From debc5f19d9685e090ae5ccd156783c37e87926be Mon Sep 17 00:00:00 2001 From: Aaryamann Challani <43716372+rymnc@users.noreply.github.com> Date: Tue, 5 Sep 2023 14:35:07 +0530 Subject: [PATCH 001/274] feat(relay): ordered validator execution (#1966) * feat(relay): ordered validator execution * fix: make more readable * test: ignore accepts only * fix: idempotent .subscribe * fix(rln-relay): make validators private Co-authored-by: Ivan Folgueira Bande <128452529+Ivansete-status@users.noreply.github.com> * fix: include comments, unsubscribe behaviour * fix: compilation --------- Co-authored-by: Ivan Folgueira Bande <128452529+Ivansete-status@users.noreply.github.com> --- apps/wakunode2/wakunode2_validator_signed.nim | 18 ++-- tests/waku_relay/test_waku_relay.nim | 8 +- tests/waku_relay/test_wakunode_relay.nim | 9 +- tests/waku_rln_relay/test_waku_rln_relay.nim | 55 ------------- waku/node/waku_node.nim | 2 +- waku/waku_relay/protocol.nim | 53 ++++++++---- waku/waku_rln_relay/rln_relay.nim | 82 ++++++++----------- 7 files changed, 83 insertions(+), 144 deletions(-) diff --git a/apps/wakunode2/wakunode2_validator_signed.nim b/apps/wakunode2/wakunode2_validator_signed.nim index 99b799ea71..fc0d0c46d2 100644 --- a/apps/wakunode2/wakunode2_validator_signed.nim +++ b/apps/wakunode2/wakunode2_validator_signed.nim @@ -52,18 +52,16 @@ proc withinTimeWindow*(msg: WakuMessage): bool = proc addSignedTopicValidator*(w: WakuRelay, topic: PubsubTopic, publicTopicKey: SkPublicKey) = debug "adding validator to signed topic", topic=topic, publicTopicKey=publicTopicKey - proc validator(topic: string, message: messages.Message): Future[errors.ValidationResult] {.async.} = - let msg = WakuMessage.decode(message.data) + proc validator(topic: string, msg: WakuMessage): Future[errors.ValidationResult] {.async.} = var outcome = errors.ValidationResult.Reject - if msg.isOk(): - if msg.get.timestamp != 0: - if msg.get.withinTimeWindow(): - let msgHash = SkMessage(topic.msgHash(msg.get)) - let recoveredSignature = SkSignature.fromRaw(msg.get.meta) - if recoveredSignature.isOk(): - if recoveredSignature.get.verify(msgHash, publicTopicKey): - outcome = errors.ValidationResult.Accept + if msg.timestamp != 0: + if msg.withinTimeWindow(): + let msgHash = SkMessage(topic.msgHash(msg)) + let recoveredSignature = SkSignature.fromRaw(msg.meta) + if recoveredSignature.isOk(): + if recoveredSignature.get.verify(msgHash, publicTopicKey): + outcome = errors.ValidationResult.Accept waku_msg_validator_signed_outcome.inc(labelValues = [$outcome]) return outcome diff --git a/tests/waku_relay/test_waku_relay.nim b/tests/waku_relay/test_waku_relay.nim index eac196147c..188ddf6075 100644 --- a/tests/waku_relay/test_waku_relay.nim +++ b/tests/waku_relay/test_waku_relay.nim @@ -201,13 +201,9 @@ suite "Waku Relay": await sleepAsync(500.millis) # Validator - proc validator(topic: PubsubTopic, msg: Message): Future[ValidationResult] {.async.} = - let msg = WakuMessage.decode(msg.data) - if msg.isErr(): - return ValidationResult.Ignore - + proc validator(topic: PubsubTopic, msg: WakuMessage): Future[ValidationResult] {.async.} = # only relay messages with contentTopic1 - if msg.value.contentTopic != contentTopic: + if msg.contentTopic != contentTopic: return ValidationResult.Reject return ValidationResult.Accept diff --git a/tests/waku_relay/test_wakunode_relay.nim b/tests/waku_relay/test_wakunode_relay.nim index 544fcf62ad..5a8e101b55 100644 --- a/tests/waku_relay/test_wakunode_relay.nim +++ b/tests/waku_relay/test_wakunode_relay.nim @@ -158,18 +158,13 @@ suite "WakuNode - Relay": var completionFutValidatorRej = newFuture[bool]() # set a topic validator for pubSubTopic - proc validator(topic: string, message: messages.Message): Future[ValidationResult] {.async.} = + proc validator(topic: string, msg: WakuMessage): Future[ValidationResult] {.async.} = ## the validator that only allows messages with contentTopic1 to be relayed check: topic == pubSubTopic - let msg = WakuMessage.decode(message.data) - if msg.isErr(): - completionFutValidatorAcc.complete(false) - return ValidationResult.Reject - # only relay messages with contentTopic1 - if msg.value.contentTopic != contentTopic1: + if msg.contentTopic != contentTopic1: completionFutValidatorRej.complete(true) return ValidationResult.Reject diff --git a/tests/waku_rln_relay/test_waku_rln_relay.nim b/tests/waku_rln_relay/test_waku_rln_relay.nim index 066aaad33b..d99bc1812c 100644 --- a/tests/waku_rln_relay/test_waku_rln_relay.nim +++ b/tests/waku_rln_relay/test_waku_rln_relay.nim @@ -710,61 +710,6 @@ suite "Waku rln relay": msgValidate3 == MessageValidationResult.Valid msgValidate4 == MessageValidationResult.Invalid - asyncTest "should validate invalid proofs if bandwidth is available": - let index = MembershipIndex(5) - - let rlnConf = WakuRlnConfig(rlnRelayDynamic: false, - rlnRelayCredIndex: some(index), - rlnRelayBandwidthThreshold: 4, - rlnRelayTreePath: genTempPath("rln_tree", "waku_rln_relay_3")) - let wakuRlnRelayRes = await WakuRlnRelay.new(rlnConf) - require: - wakuRlnRelayRes.isOk() - let wakuRlnRelay = wakuRlnRelayRes.get() - - # get the current epoch time - let time = epochTime() - - # create some messages from the same peer and append rln proof to them, except wm4 - var - # this one will pass through the bandwidth threshold - wm1 = WakuMessage(payload: "Spam".toBytes()) - # this message, will be over the bandwidth threshold, hence has to be verified - wm2 = WakuMessage(payload: "Valid message".toBytes()) - # this message will be over the bandwidth threshold, hence has to be verified, will be false (since no proof) - wm3 = WakuMessage(payload: "Invalid message".toBytes()) - wm4 = WakuMessage(payload: "Spam message".toBytes()) - - let - proofAdded1 = wakuRlnRelay.appendRLNProof(wm1, time) - proofAdded2 = wakuRlnRelay.appendRLNProof(wm2, time+EpochUnitSeconds) - proofAdded3 = wakuRlnRelay.appendRLNProof(wm4, time) - - # ensure proofs are added - require: - proofAdded1 - proofAdded2 - proofAdded3 - - # validate messages - # validateMessage proc checks the validity of the message fields and adds it to the log (if valid) - let - # this should be no verification, Valid - msgValidate1 = wakuRlnRelay.validateMessageAndUpdateLog(wm1, some(time)) - # this should be verification, Valid - msgValidate2 = wakuRlnRelay.validateMessageAndUpdateLog(wm2, some(time)) - # this should be verification, Invalid - msgValidate3 = wakuRlnRelay.validateMessageAndUpdateLog(wm3, some(time)) - # this should be verification, Spam - msgValidate4 = wakuRlnRelay.validateMessageAndUpdateLog(wm4, some(time)) - - check: - msgValidate1 == MessageValidationResult.Valid - msgValidate2 == MessageValidationResult.Valid - msgValidate3 == MessageValidationResult.Invalid - msgValidate4 == MessageValidationResult.Spam - - test "toIDCommitment and toUInt256": # create an instance of rln let rlnInstance = createRLNInstanceWrapper() diff --git a/waku/node/waku_node.nim b/waku/node/waku_node.nim index 5df6200a19..cd6603886e 100644 --- a/waku/node/waku_node.nim +++ b/waku/node/waku_node.nim @@ -749,7 +749,7 @@ when defined(rln): # register rln validator for all subscribed relay pubsub topics for pubsubTopic in node.wakuRelay.subscribedTopics: debug "Registering RLN validator for topic", pubsubTopic=pubsubTopic - procCall GossipSub(node.wakuRelay).addValidator(pubsubTopic, validator) + node.wakuRelay.addValidator(pubsubTopic, validator) node.wakuRlnRelay = rlnRelay ## Waku peer-exchange diff --git a/waku/waku_relay/protocol.nim b/waku/waku_relay/protocol.nim index bfca5d5ad6..7b54e61481 100644 --- a/waku/waku_relay/protocol.nim +++ b/waku/waku_relay/protocol.nim @@ -8,8 +8,8 @@ else: {.push raises: [].} import - std/sequtils, stew/results, + sequtils, chronos, chronicles, metrics, @@ -122,7 +122,14 @@ const GossipsubParameters = GossipSubParams( type WakuRelayResult*[T] = Result[T, string] WakuRelayHandler* = proc(pubsubTopic: PubsubTopic, message: WakuMessage): Future[void] {.gcsafe, raises: [Defect].} + WakuValidatorHandler* = proc(pubsubTopic: PubsubTopic, message: WakuMessage): Future[ValidationResult] {.gcsafe, raises: [Defect].} WakuRelay* = ref object of GossipSub + # a map of PubsubTopic's => seq[WakuValidatorHandler] that are + # called in order every time a message is received on a given pubsub topic + wakuValidators: Table[PubsubTopic, seq[WakuValidatorHandler]] + # a map that stores whether the ordered validator has been inserted + # for a given PubsubTopic + validatorInserted: Table[PubsubTopic, bool] proc initProtocolHandler(w: WakuRelay) = proc handler(conn: Connection, proto: string) {.async.} = @@ -167,9 +174,11 @@ proc new*(T: type WakuRelay, switch: Switch): WakuRelayResult[T] = return ok(w) -method addValidator*(w: WakuRelay, topic: varargs[string], handler: ValidatorHandler) {.gcsafe.} = - procCall GossipSub(w).addValidator(topic, handler) - +proc addValidator*(w: WakuRelay, + topic: varargs[string], + handler: WakuValidatorHandler) {.gcsafe.} = + for t in topic: + w.wakuValidators.mgetOrPut(t, @[]).add(handler) method start*(w: WakuRelay) {.async.} = debug "start" @@ -179,21 +188,32 @@ method stop*(w: WakuRelay) {.async.} = debug "stop" await procCall GossipSub(w).stop() -# rejects messages that are not WakuMessage -proc validator(pubsubTopic: string, message: messages.Message): Future[ValidationResult] {.async.} = - # can be optimized by checking if the message is a WakuMessage without allocating memory - # see nim-libp2p protobuf library - let msg = WakuMessage.decode(message.data) - if msg.isOk(): - return ValidationResult.Accept - return ValidationResult.Reject - proc isSubscribed*(w: WakuRelay, topic: PubsubTopic): bool = GossipSub(w).topics.hasKey(topic) proc subscribedTopics*(w: WakuRelay): seq[PubsubTopic] = return toSeq(GossipSub(w).topics.keys()) +proc generateOrderedValidator*(w: WakuRelay): auto {.gcsafe.} = + # rejects messages that are not WakuMessage + let wrappedValidator = proc(pubsubTopic: string, + message: messages.Message): Future[ValidationResult] {.async.} = + # can be optimized by checking if the message is a WakuMessage without allocating memory + # see nim-libp2p protobuf library + let msgRes = WakuMessage.decode(message.data) + if msgRes.isErr(): + return ValidationResult.Reject + let msg = msgRes.get() + + # now sequentially validate the message + if w.wakuValidators.hasKey(pubsubTopic): + for validator in w.wakuValidators[pubsubTopic]: + let validatorRes = await validator(pubsubTopic, msg) + if validatorRes != ValidationResult.Accept: + return validatorRes + return ValidationResult.Accept + return wrappedValidator + proc subscribe*(w: WakuRelay, pubsubTopic: PubsubTopic, handler: WakuRelayHandler) = debug "subscribe", pubsubTopic=pubsubTopic @@ -209,8 +229,10 @@ proc subscribe*(w: WakuRelay, pubsubTopic: PubsubTopic, handler: WakuRelayHandle else: return handler(pubsubTopic, decMsg.get()) - # add the default validator to the topic - procCall GossipSub(w).addValidator(pubSubTopic, validator) + # add the ordered validator to the topic + if not w.validatorInserted.hasKey(pubSubTopic): + procCall GossipSub(w).addValidator(pubSubTopic, w.generateOrderedValidator()) + w.validatorInserted[pubSubTopic] = true # set this topic parameters for scoring w.topicParams[pubsubTopic] = TopicParameters @@ -222,6 +244,7 @@ proc unsubscribe*(w: WakuRelay, pubsubTopic: PubsubTopic) = debug "unsubscribe", pubsubTopic=pubsubTopic procCall GossipSub(w).unsubscribeAll(pubsubTopic) + w.validatorInserted.del(pubsubTopic) proc publish*(w: WakuRelay, pubsubTopic: PubsubTopic, message: WakuMessage): Future[int] {.async.} = trace "publish", pubsubTopic=pubsubTopic diff --git a/waku/waku_rln_relay/rln_relay.nim b/waku/waku_rln_relay/rln_relay.nim index 887e28d00f..494b0947f2 100644 --- a/waku/waku_rln_relay/rln_relay.nim +++ b/waku/waku_rln_relay/rln_relay.nim @@ -22,6 +22,7 @@ import ./protocol_types, ./protocol_metrics import + ../waku_relay, # for WakuRelayHandler ../waku_core, ../waku_keystore, ../utils/collector @@ -79,7 +80,6 @@ type WakuRLNRelay* = ref object of RootObj nullifierLog*: Table[Epoch, seq[ProofMetadata]] lastEpoch*: Epoch # the epoch of the last published rln message groupManager*: GroupManager - messageBucket*: Option[TokenBucket] method stop*(rlnPeer: WakuRLNRelay) {.async.} = ## stops the rln-relay protocol @@ -301,57 +301,44 @@ proc appendRLNProof*(rlnPeer: WakuRLNRelay, return true proc generateRlnValidator*(wakuRlnRelay: WakuRLNRelay, - spamHandler: Option[SpamHandler] = none(SpamHandler)): pubsub.ValidatorHandler = + spamHandler: Option[SpamHandler] = none(SpamHandler)): WakuValidatorHandler = ## this procedure is a thin wrapper for the pubsub addValidator method ## it sets a validator for waku messages, acting in the registered pubsub topic ## the message validation logic is according to https://rfc.vac.dev/spec/17/ - proc validator(topic: string, message: messages.Message): Future[pubsub.ValidationResult] {.async.} = + proc validator(topic: string, message: WakuMessage): Future[pubsub.ValidationResult] {.async.} = trace "rln-relay topic validator is called" - ## Check if enough tokens can be consumed from the message bucket - try: - if wakuRlnRelay.messageBucket.isSome() and - wakuRlnRelay.messageBucket.get().tryConsume(message.data.len): - return pubsub.ValidationResult.Accept - else: - trace "message bandwidth limit exceeded, running rate limit proof validation" - except OverflowDefect: # not a problem - trace "not enough bandwidth, running rate limit proof validation" + let decodeRes = RateLimitProof.init(message.proof) - let decodeRes = WakuMessage.decode(message.data) - if decodeRes.isOk(): - let wakumessage = decodeRes.value - let decodeRes = RateLimitProof.init(wakumessage.proof) + if decodeRes.isErr(): + return pubsub.ValidationResult.Reject - if decodeRes.isErr(): - return pubsub.ValidationResult.Reject + let msgProof = decodeRes.get() + + # validate the message and update log + let validationRes = wakuRlnRelay.validateMessageAndUpdateLog(message) - let msgProof = decodeRes.get() - - # validate the message and update log - let validationRes = wakuRlnRelay.validateMessageAndUpdateLog(wakumessage) - - let - proof = toHex(msgProof.proof) - epoch = fromEpoch(msgProof.epoch) - root = inHex(msgProof.merkleRoot) - shareX = inHex(msgProof.shareX) - shareY = inHex(msgProof.shareY) - nullifier = inHex(msgProof.nullifier) - payload = string.fromBytes(wakumessage.payload) - case validationRes: - of Valid: - trace "message validity is verified, relaying:", proof=proof, root=root, shareX=shareX, shareY=shareY, nullifier=nullifier - return pubsub.ValidationResult.Accept - of Invalid: - trace "message validity could not be verified, discarding:", proof=proof, root=root, shareX=shareX, shareY=shareY, nullifier=nullifier - return pubsub.ValidationResult.Reject - of Spam: - trace "A spam message is found! yay! discarding:", proof=proof, root=root, shareX=shareX, shareY=shareY, nullifier=nullifier - if spamHandler.isSome(): - let handler = spamHandler.get() - handler(wakumessage) - return pubsub.ValidationResult.Reject + let + proof = toHex(msgProof.proof) + epoch = fromEpoch(msgProof.epoch) + root = inHex(msgProof.merkleRoot) + shareX = inHex(msgProof.shareX) + shareY = inHex(msgProof.shareY) + nullifier = inHex(msgProof.nullifier) + payload = string.fromBytes(message.payload) + case validationRes: + of Valid: + trace "message validity is verified, relaying:", proof=proof, root=root, shareX=shareX, shareY=shareY, nullifier=nullifier + return pubsub.ValidationResult.Accept + of Invalid: + trace "message validity could not be verified, discarding:", proof=proof, root=root, shareX=shareX, shareY=shareY, nullifier=nullifier + return pubsub.ValidationResult.Reject + of Spam: + trace "A spam message is found! yay! discarding:", proof=proof, root=root, shareX=shareX, shareY=shareY, nullifier=nullifier + if spamHandler.isSome(): + let handler = spamHandler.get() + handler(message) + return pubsub.ValidationResult.Reject return validator proc mount(conf: WakuRlnConfig, @@ -393,12 +380,7 @@ proc mount(conf: WakuRlnConfig, # Start the group sync await groupManager.startGroupSync() - let messageBucket = if conf.rlnRelayBandwidthThreshold > 0: - some(TokenBucket.new(conf.rlnRelayBandwidthThreshold)) - else: none(TokenBucket) - - return WakuRLNRelay(groupManager: groupManager, - messageBucket: messageBucket) + return WakuRLNRelay(groupManager: groupManager) proc new*(T: type WakuRlnRelay, From 988501922f461e7a220cd8db990831a805089ccf Mon Sep 17 00:00:00 2001 From: Vaclav Pavlin Date: Tue, 5 Sep 2023 11:58:01 +0200 Subject: [PATCH 002/274] chore(ci): use commit instead of master for docker image (#1990) --- .github/workflows/container-image.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/container-image.yml b/.github/workflows/container-image.yml index e3fcc01ed1..9429cd677d 100644 --- a/.github/workflows/container-image.yml +++ b/.github/workflows/container-image.yml @@ -44,7 +44,9 @@ jobs: make -j${NPROC} V=1 QUICK_AND_DIRTY_COMPILER=1 NIMFLAGS="-d:disableMarchNative" wakunode2 EXPERIMENTAL=${EXPERIMENTAL} - TAG=$([ "${PR_NUMBER}" == "" ] && echo "master" || echo "${PR_NUMBER}") + SHORT_REF=$(git rev-parse --short HEAD) + + TAG=$([ "${PR_NUMBER}" == "" ] && echo "${SHORT_REF}" || echo "${PR_NUMBER}") TAG=$([ "${EXPERIMENTAL}" == "true" ] && echo "${TAG}-experimental" || echo "${TAG}") IMAGE=quay.io/wakuorg/nwaku-pr:${TAG} From ea31b531b594ae5552da87a1dda88a344cfaac07 Mon Sep 17 00:00:00 2001 From: Alvaro Revuelta Date: Tue, 5 Sep 2023 15:50:54 +0200 Subject: [PATCH 003/274] Add utils to Dockerfile (#1991) --- docker/binaries/Dockerfile.bn.amd64 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/binaries/Dockerfile.bn.amd64 b/docker/binaries/Dockerfile.bn.amd64 index 806e13efcc..8b810e3a10 100644 --- a/docker/binaries/Dockerfile.bn.amd64 +++ b/docker/binaries/Dockerfile.bn.amd64 @@ -13,7 +13,7 @@ EXPOSE 30303 60000 8545 # Referenced in the binary RUN apt-get update &&\ - apt-get install -y libpcre3 libpq-dev &&\ + apt-get install -y libpcre3 libpq-dev curl iproute2 wget &&\ apt-get clean && rm -rf /var/lib/apt/lists/* # Fix for 'Error loading shared library libpcre.so.3: No such file or directory' From 483f40c8f7154662449a880cded5adb9ea430b3d Mon Sep 17 00:00:00 2001 From: Aaryamann Challani <43716372+rymnc@users.noreply.github.com> Date: Wed, 6 Sep 2023 13:48:02 +0530 Subject: [PATCH 004/274] chore(rln-relay): clean up nullifier table every MaxEpochGap (#1994) --- apps/wakunode2/app.nim | 1 - .../test_wakunode_rln_relay.nim | 108 ++++++++++++++++-- waku/waku_rln_relay/rln_relay.nim | 20 +++- 3 files changed, 112 insertions(+), 17 deletions(-) diff --git a/apps/wakunode2/app.nim b/apps/wakunode2/app.nim index 2bdf4cf708..080700c3e1 100644 --- a/apps/wakunode2/app.nim +++ b/apps/wakunode2/app.nim @@ -402,7 +402,6 @@ proc setupProtocols(node: WakuNode, rlnRelayCredPath: conf.rlnRelayCredPath, rlnRelayCredPassword: conf.rlnRelayCredPassword, rlnRelayTreePath: conf.rlnRelayTreePath, - rlnRelayBandwidthThreshold: conf.rlnRelayBandwidthThreshold ) try: diff --git a/tests/waku_rln_relay/test_wakunode_rln_relay.nim b/tests/waku_rln_relay/test_wakunode_rln_relay.nim index 7a040d0beb..4e9ffa3a04 100644 --- a/tests/waku_rln_relay/test_wakunode_rln_relay.nim +++ b/tests/waku_rln_relay/test_wakunode_rln_relay.nim @@ -7,17 +7,12 @@ import testutils/unittests, chronicles, chronos, - libp2p/crypto/crypto, - libp2p/peerid, - libp2p/multiaddress, libp2p/switch, - libp2p/protocols/pubsub/pubsub, - eth/keys + libp2p/protocols/pubsub/pubsub import ../../../waku/waku_core, ../../../waku/waku_node, ../../../waku/waku_rln_relay, - ../../../waku/waku_keystore, ../testlib/wakucore, ../testlib/wakunode @@ -206,7 +201,6 @@ procSuite "WakuNode - RLN relay": await node1.mountRlnRelay(WakuRlnConfig(rlnRelayDynamic: false, rlnRelayCredIndex: some(1.uint), rlnRelayTreePath: genTempPath("rln_tree", "wakunode_4"), - rlnRelayBandwidthThreshold: 0, )) await node1.start() @@ -217,7 +211,6 @@ procSuite "WakuNode - RLN relay": await node2.mountRlnRelay(WakuRlnConfig(rlnRelayDynamic: false, rlnRelayCredIndex: some(2.uint), rlnRelayTreePath: genTempPath("rln_tree", "wakunode_5"), - rlnRelayBandwidthThreshold: 0, )) await node2.start() @@ -228,7 +221,6 @@ procSuite "WakuNode - RLN relay": await node3.mountRlnRelay(WakuRlnConfig(rlnRelayDynamic: false, rlnRelayCredIndex: some(3.uint), rlnRelayTreePath: genTempPath("rln_tree", "wakunode_6"), - rlnRelayBandwidthThreshold: 0, )) await node3.start() @@ -308,7 +300,6 @@ procSuite "WakuNode - RLN relay": await node1.mountRlnRelay(WakuRlnConfig(rlnRelayDynamic: false, rlnRelayCredIndex: some(1.uint), rlnRelayTreePath: genTempPath("rln_tree", "wakunode_7"), - rlnRelayBandwidthThreshold: 0, )) await node1.start() @@ -320,7 +311,6 @@ procSuite "WakuNode - RLN relay": await node2.mountRlnRelay(WakuRlnConfig(rlnRelayDynamic: false, rlnRelayCredIndex: some(2.uint), rlnRelayTreePath: genTempPath("rln_tree", "wakunode_8"), - rlnRelayBandwidthThreshold: 0, )) await node2.start() @@ -332,7 +322,6 @@ procSuite "WakuNode - RLN relay": await node3.mountRlnRelay(WakuRlnConfig(rlnRelayDynamic: false, rlnRelayCredIndex: some(3.uint), rlnRelayTreePath: genTempPath("rln_tree", "wakunode_9"), - rlnRelayBandwidthThreshold: 0, )) await node3.start() @@ -407,3 +396,98 @@ procSuite "WakuNode - RLN relay": await node1.stop() await node2.stop() await node3.stop() + + asyncTest "clearNullifierLog: should clear epochs > MaxEpochGap": + + let + # publisher node + nodeKey1 = generateSecp256k1Key() + node1 = newTestWakuNode(nodeKey1, ValidIpAddress.init("0.0.0.0"), Port(0)) + # Relay node + nodeKey2 = generateSecp256k1Key() + node2 = newTestWakuNode(nodeKey2, ValidIpAddress.init("0.0.0.0"), Port(0)) + # Subscriber + nodeKey3 = generateSecp256k1Key() + node3 = newTestWakuNode(nodeKey3, ValidIpAddress.init("0.0.0.0"), Port(0)) + + contentTopic = ContentTopic("/waku/2/default-content/proto") + + # set up 2 nodes + # node1 + await node1.mountRelay(@[DefaultPubsubTopic]) + + # mount rlnrelay in off-chain mode + await node1.mountRlnRelay(WakuRlnConfig(rlnRelayDynamic: false, + rlnRelayCredIndex: some(1.uint), + rlnRelayTreePath: genTempPath("rln_tree", "wakunode_10"), + )) + + await node1.start() + + # node 2 + await node2.mountRelay(@[DefaultPubsubTopic]) + + # mount rlnrelay in off-chain mode + await node2.mountRlnRelay(WakuRlnConfig(rlnRelayDynamic: false, + rlnRelayCredIndex: some(2.uint), + rlnRelayTreePath: genTempPath("rln_tree", "wakunode_11"), + )) + + await node2.start() + + await node1.connectToNodes(@[node2.switch.peerInfo.toRemotePeerInfo()]) + + # get the current epoch time + let time = epochTime() + # create some messages with rate limit proofs + var + wm1 = WakuMessage(payload: "message 1".toBytes(), contentTopic: contentTopic) + proofAdded1 = node1.wakuRlnRelay.appendRLNProof(wm1, time) + # another message in the same epoch as wm1, it will break the messaging rate limit + wm2 = WakuMessage(payload: "message 2".toBytes(), contentTopic: contentTopic) + proofAdded2 = node1.wakuRlnRelay.appendRLNProof(wm2, time + EpochUnitSeconds) + # wm3 points to the next epoch + wm3 = WakuMessage(payload: "message 3".toBytes(), contentTopic: contentTopic) + proofAdded3 = node1.wakuRlnRelay.appendRLNProof(wm3, time + EpochUnitSeconds * 2) + + # check proofs are added correctly + check: + proofAdded1 + proofAdded2 + proofAdded3 + + # relay handler for node2 + var completionFut1 = newFuture[bool]() + var completionFut2 = newFuture[bool]() + var completionFut3 = newFuture[bool]() + proc relayHandler(topic: PubsubTopic, msg: WakuMessage): Future[void] {.async, gcsafe.} = + debug "The received topic:", topic + if topic == DefaultPubsubTopic: + if msg == wm1: + completionFut1.complete(true) + if msg == wm2: + completionFut2.complete(true) + if msg == wm3: + completionFut3.complete(true) + + # mount the relay handler for node2 + node2.subscribe(DefaultPubsubTopic, relayHandler) + await sleepAsync(2000.millis) + + await node1.publish(DefaultPubsubTopic, wm1) + await sleepAsync(10.seconds) + await node1.publish(DefaultPubsubTopic, wm2) + await sleepAsync(10.seconds) + await node1.publish(DefaultPubsubTopic, wm3) + + let + res1 = await completionFut1.withTimeout(10.seconds) + res2 = await completionFut2.withTimeout(10.seconds) + res3 = await completionFut3.withTimeout(10.seconds) + + check: + (res1 and res2 and res3) == true # all 3 are valid + node2.wakuRlnRelay.nullifierLog.len() == 1 # after clearing, only 1 is stored + + await node1.stop() + await node2.stop() diff --git a/waku/waku_rln_relay/rln_relay.nim b/waku/waku_rln_relay/rln_relay.nim index 494b0947f2..6f2c1f2ebf 100644 --- a/waku/waku_rln_relay/rln_relay.nim +++ b/waku/waku_rln_relay/rln_relay.nim @@ -38,7 +38,6 @@ type WakuRlnConfig* = object rlnRelayCredPath*: string rlnRelayCredPassword*: string rlnRelayTreePath*: string - rlnRelayBandwidthThreshold*: int proc createMembershipList*(rln: ptr RLN, n: int): RlnRelayResult[( seq[RawMembershipCredentials], string @@ -77,7 +76,7 @@ proc calcEpoch*(t: float64): Epoch = type WakuRLNRelay* = ref object of RootObj # the log of nullifiers and Shamir shares of the past messages grouped per epoch - nullifierLog*: Table[Epoch, seq[ProofMetadata]] + nullifierLog*: OrderedTable[Epoch, seq[ProofMetadata]] lastEpoch*: Epoch # the epoch of the last published rln message groupManager*: GroupManager @@ -300,13 +299,26 @@ proc appendRLNProof*(rlnPeer: WakuRLNRelay, msg.proof = proofGenRes.get().encode().buffer return true +proc clearNullifierLog(rlnPeer: WakuRlnRelay) = + # clear the first MaxEpochGap epochs of the nullifer log + # if more than MaxEpochGap epochs are in the log + # note: the epochs are ordered ascendingly + if rlnPeer.nullifierLog.len().uint < MaxEpochGap: + return + + trace "clearing epochs from the nullifier log", count = MaxEpochGap + let epochsToClear = rlnPeer.nullifierLog.keys().toSeq()[0.. Date: Wed, 6 Sep 2023 14:16:19 +0530 Subject: [PATCH 005/274] chore(rln-relay): add isReady check (#1989) * chore(rln-relay): add isReady check * fix(rln-relay): multiple parameters for checking if node is in sync * fix: set latesthead in newHeadCallback * fix: explicit rpc call * fix: unhandled exception --- .../test_rln_group_manager_onchain.nim | 25 ++++++++++ waku/node/waku_node.nim | 12 ++++- .../group_manager/group_manager_base.nim | 3 ++ .../group_manager/on_chain/group_manager.nim | 49 +++++++++++++++++-- .../group_manager/static/group_manager.nim | 6 +++ waku/waku_rln_relay/rln_relay.nim | 12 +++++ 6 files changed, 100 insertions(+), 7 deletions(-) diff --git a/tests/waku_rln_relay/test_rln_group_manager_onchain.nim b/tests/waku_rln_relay/test_rln_group_manager_onchain.nim index 8e63513ebb..600b3e1b72 100644 --- a/tests/waku_rln_relay/test_rln_group_manager_onchain.nim +++ b/tests/waku_rln_relay/test_rln_group_manager_onchain.nim @@ -555,6 +555,31 @@ suite "Onchain group manager": manager.validRootBuffer.len() == 0 manager.validRoots[credentialCount - 2] == expectedLastRoot + asyncTest "isReady should return false if ethRpc is none": + var manager = await setup() + await manager.init() + + manager.ethRpc = none(Web3) + + check: + (await manager.isReady()) == false + + asyncTest "isReady should return false if lastSeenBlockHead > lastProcessed": + var manager = await setup() + await manager.init() + + check: + (await manager.isReady()) == false + + asyncTest "isReady should return true if ethRpc is ready": + var manager = await setup() + await manager.init() + # node can only be ready after group sync is done + await manager.startGroupSync() + + check: + (await manager.isReady()) == true + ################################ ## Terminating/removing Ganache diff --git a/waku/node/waku_node.nim b/waku/node/waku_node.nim index cd6603886e..131cc64bbb 100644 --- a/waku/node/waku_node.nim +++ b/waku/node/waku_node.nim @@ -732,8 +732,8 @@ proc lightpushPublish*(node: WakuNode, pubsubTopic: Option[PubsubTopic], message when defined(rln): proc mountRlnRelay*(node: WakuNode, rlnConf: WakuRlnConfig, - spamHandler: Option[SpamHandler] = none(SpamHandler), - registrationHandler: Option[RegistrationHandler] = none(RegistrationHandler)) {.async.} = + spamHandler = none(SpamHandler), + registrationHandler = none(RegistrationHandler)) {.async.} = info "mounting rln relay" if node.wakuRelay.isNil(): @@ -903,3 +903,11 @@ proc stop*(node: WakuNode) {.async.} = await node.wakuRlnRelay.stop() node.started = false + +proc isReady*(node: WakuNode): Future[bool] {.async.} = + when defined(rln): + if node.wakuRlnRelay == nil: + return false + return await node.wakuRlnRelay.isReady() + ## TODO: add other protocol `isReady` checks + return true diff --git a/waku/waku_rln_relay/group_manager/group_manager_base.nim b/waku/waku_rln_relay/group_manager/group_manager_base.nim index 0dc1ceb307..e54606e7f5 100644 --- a/waku/waku_rln_relay/group_manager/group_manager_base.nim +++ b/waku/waku_rln_relay/group_manager/group_manager_base.nim @@ -162,3 +162,6 @@ method generateProof*(g: GroupManager, if proofGenRes.isErr(): return err("proof generation failed: " & $proofGenRes.error()) return ok(proofGenRes.value()) + +method isReady*(g: GroupManager): Future[bool] {.base,gcsafe.} = + raise newException(CatchableError, "isReady proc for " & $g.type & " is not implemented yet") diff --git a/waku/waku_rln_relay/group_manager/on_chain/group_manager.nim b/waku/waku_rln_relay/group_manager/on_chain/group_manager.nim index 56c82cb27b..f5375f0066 100644 --- a/waku/waku_rln_relay/group_manager/on_chain/group_manager.nim +++ b/waku/waku_rln_relay/group_manager/on_chain/group_manager.nim @@ -313,13 +313,21 @@ proc getAndHandleEvents(g: OnchainGroupManager, fromBlock: BlockNumber, toBlock: Option[BlockNumber] = none(BlockNumber)): Future[void] {.async.} = initializedGuard(g) - - let blockTable = await g.getBlockTable(fromBlock, toBlock) + proc getLatestBlockNumber(): BlockNumber = + if toBlock.isSome(): + # if toBlock = 0, that implies the latest block + # which is the case when we are syncing block-by-block + # therefore, toBlock = fromBlock + 1 + # if toBlock != 0, then we are chunking blocks + # therefore, toBlock = fromBlock + blockChunkSize (which is handled) + return max(fromBlock + 1, toBlock.get()) + return fromBlock + + let blockTable = await g.getBlockTable(fromBlock, toBlock) await g.handleEvents(blockTable) await g.handleRemovedEvents(blockTable) - g.latestProcessedBlock = if toBlock.isSome(): toBlock.get() - else: fromBlock + g.latestProcessedBlock = getLatestBlockNumber() let metadataSetRes = g.setMetadata() if metadataSetRes.isErr(): # this is not a fatal error, hence we don't raise an exception @@ -473,7 +481,6 @@ method init*(g: OnchainGroupManager): Future[void] {.async.} = let metadataGetRes = g.rlnInstance.getMetadata() if metadataGetRes.isErr(): warn "could not initialize with persisted rln metadata" - g.latestProcessedBlock = BlockNumber(0) else: let metadata = metadataGetRes.get() if metadata.chainId != uint64(g.chainId.get()): @@ -500,6 +507,7 @@ method init*(g: OnchainGroupManager): Future[void] {.async.} = raise newException(ValueError, "could not get the deployed block number: " & getCurrentExceptionMsg()) g.rlnContractDeployedBlockNumber = cast[BlockNumber](deployedBlockNumber) + g.latestProcessedBlock = max(g.latestProcessedBlock, g.rlnContractDeployedBlockNumber) ethRpc.ondisconnect = proc() = error "Ethereum client disconnected" @@ -528,3 +536,34 @@ method stop*(g: OnchainGroupManager): Future[void] {.async.} = error "failed to flush to the tree db" g.initialized = false + +proc isSyncing*(g: OnchainGroupManager): Future[bool] {.async,gcsafe.} = + let ethRpc = g.ethRpc.get() + + try: + let syncing = await ethRpc.provider.eth_syncing() + return syncing.getBool() + except CatchableError: + error "failed to get the syncing status", error = getCurrentExceptionMsg() + return false + +method isReady*(g: OnchainGroupManager): Future[bool] {.async,gcsafe.} = + initializedGuard(g) + + if g.ethRpc.isNone(): + return false + + var currentBlock: BlockNumber + try: + currentBlock = cast[BlockNumber](await g.ethRpc + .get() + .provider + .eth_blockNumber()) + except CatchableError: + error "failed to get the current block number", error = getCurrentExceptionMsg() + return false + + if g.latestProcessedBlock < currentBlock: + return false + + return not (await g.isSyncing()) \ No newline at end of file diff --git a/waku/waku_rln_relay/group_manager/static/group_manager.nim b/waku/waku_rln_relay/group_manager/static/group_manager.nim index c2ccae8c21..9aa81d952e 100644 --- a/waku/waku_rln_relay/group_manager/static/group_manager.nim +++ b/waku/waku_rln_relay/group_manager/static/group_manager.nim @@ -109,3 +109,9 @@ method stop*(g: StaticGroupManager): Future[void] = var retFut = newFuture[void]("StaticGroupManager.stop") retFut.complete() return retFut + +method isReady*(g: StaticGroupManager): Future[bool] {.gcsafe.} = + initializedGuard(g) + var retFut = newFuture[bool]("StaticGroupManager.isReady") + retFut.complete(true) + return retFut diff --git a/waku/waku_rln_relay/rln_relay.nim b/waku/waku_rln_relay/rln_relay.nim index 6f2c1f2ebf..d711a8d8c5 100644 --- a/waku/waku_rln_relay/rln_relay.nim +++ b/waku/waku_rln_relay/rln_relay.nim @@ -394,6 +394,18 @@ proc mount(conf: WakuRlnConfig, return WakuRLNRelay(groupManager: groupManager) +proc isReady*(rlnPeer: WakuRLNRelay): Future[bool] {.async.} = + ## returns true if the rln-relay protocol is ready to relay messages + ## returns false otherwise + + # could be nil during startup + if rlnPeer.groupManager == nil: + return false + try: + return await rlnPeer.groupManager.isReady() + except CatchableError: + error "could not check if the rln-relay protocol is ready", err = getCurrentExceptionMsg() + return false proc new*(T: type WakuRlnRelay, conf: WakuRlnConfig, From 1fb13b096710bda1ac73e72027ae25ed36a2b3a4 Mon Sep 17 00:00:00 2001 From: Ivan Folgueira Bande <128452529+Ivansete-status@users.noreply.github.com> Date: Wed, 6 Sep 2023 19:16:37 +0200 Subject: [PATCH 006/274] Adding healtcheck and reconnection mechanism to the postgres archive driver (#1997) It starts an asynchronous infinite task that checks the connectivity with the database. In case of error, the postgres_healthcheck task tries to reconnect for a while, and if it determines that the connection cannot be resumed, then it invokes a callback indicating that situation. For the case of the `wakunode2` app, this callback quits the application itself and adds a log trace indicating the connectivity issue with the database. --- apps/wakunode2/app.nim | 9 +++- .../databases/db_postgres/pgasyncpool.nim | 14 ++++++ waku/waku_archive/driver.nim | 1 + waku/waku_archive/driver/builder.nim | 9 +++- .../postgres_driver/postgres_driver.nim | 13 +++-- .../postgres_driver/postgres_healthcheck.nim | 47 +++++++++++++++++++ 6 files changed, 87 insertions(+), 6 deletions(-) create mode 100644 waku/waku_archive/driver/postgres_driver/postgres_healthcheck.nim diff --git a/apps/wakunode2/app.nim b/apps/wakunode2/app.nim index 080700c3e1..e72c474d47 100644 --- a/apps/wakunode2/app.nim +++ b/apps/wakunode2/app.nim @@ -410,10 +410,17 @@ proc setupProtocols(node: WakuNode, return err("failed to mount waku RLN relay protocol: " & getCurrentExceptionMsg()) if conf.store: + var onErrAction = proc(msg: string) {.gcsafe, closure.} = + ## Action to be taken when an internal error occurs during the node run. + ## e.g. the connection with the database is lost and not recovered. + error "Unrecoverable error occurred", error = msg + quit(QuitFailure) + # Archive setup let archiveDriverRes = ArchiveDriver.new(conf.storeMessageDbUrl, conf.storeMessageDbVacuum, - conf.storeMessageDbMigration) + conf.storeMessageDbMigration, + onErrAction) if archiveDriverRes.isErr(): return err("failed to setup archive driver: " & archiveDriverRes.error) diff --git a/waku/common/databases/db_postgres/pgasyncpool.nim b/waku/common/databases/db_postgres/pgasyncpool.nim index dc1104b3c0..2e5fa4e079 100644 --- a/waku/common/databases/db_postgres/pgasyncpool.nim +++ b/waku/common/databases/db_postgres/pgasyncpool.nim @@ -136,6 +136,20 @@ proc getConnIndex(pool: PgAsyncPool): pool.conns[index].busy = true return ok(index) +proc resetConnPool*(pool: PgAsyncPool): Future[DatabaseResult[void]] {.async.} = + ## Forces closing the connection pool. + ## This proc is intended to be called when the connection with the database + ## got interrupted from the database side or a connectivity problem happened. + + for i in 0.. Date: Thu, 7 Sep 2023 07:41:56 -0400 Subject: [PATCH 007/274] fix(tests): relay tests use random port to avoid conflict (#1998) --- tests/waku_relay/test_wakunode_relay.nim | 31 +++++++++--------------- tests/wakunode_rest/test_rest_store.nim | 14 ++++++----- 2 files changed, 19 insertions(+), 26 deletions(-) diff --git a/tests/waku_relay/test_wakunode_relay.nim b/tests/waku_relay/test_wakunode_relay.nim index 5a8e101b55..a59551457c 100644 --- a/tests/waku_relay/test_wakunode_relay.nim +++ b/tests/waku_relay/test_wakunode_relay.nim @@ -5,25 +5,16 @@ import stew/byteutils, stew/shims/net as stewNet, testutils/unittests, - chronicles, chronos, - libp2p/crypto/crypto, - libp2p/crypto/secp, - libp2p/peerid, - libp2p/multiaddress, libp2p/switch, - libp2p/protocols/pubsub/rpc/messages, libp2p/protocols/pubsub/pubsub, - libp2p/protocols/pubsub/gossipsub, - libp2p/multihash, - secp256k1 + libp2p/protocols/pubsub/gossipsub import ../../waku/waku_core, ../../waku/node/peer_manager, ../../waku/waku_node, ../../waku/waku_relay, ../testlib/testutils, - ../testlib/common, ../testlib/wakucore, ../testlib/wakunode @@ -238,10 +229,10 @@ suite "WakuNode - Relay": let nodeKey1 = generateSecp256k1Key() node1 = newTestWakuNode(nodeKey1, ValidIpAddress.init("0.0.0.0"), - bindPort = Port(60510), wsBindPort = Port(8001), wsEnabled = true) + bindPort = Port(0), wsBindPort = Port(0), wsEnabled = true) nodeKey2 = generateSecp256k1Key() node2 = newTestWakuNode(nodeKey2, ValidIpAddress.init("0.0.0.0"), - bindPort = Port(60512), wsBindPort = Port(8101), wsEnabled = true) + bindPort = Port(0), wsBindPort = Port(0), wsEnabled = true) pubSubTopic = "test" contentTopic = ContentTopic("/waku/2/default-content/proto") payload = "hello world".toBytes() @@ -279,10 +270,10 @@ suite "WakuNode - Relay": let nodeKey1 = generateSecp256k1Key() node1 = newTestWakuNode(nodeKey1, ValidIpAddress.init("0.0.0.0"), - bindPort = Port(60520), wsBindPort = Port(8002), wsEnabled = true) + bindPort = Port(0), wsBindPort = Port(0), wsEnabled = true) nodeKey2 = generateSecp256k1Key() node2 = newTestWakuNode(nodeKey2, ValidIpAddress.init("0.0.0.0"), - bindPort = Port(60522)) + bindPort = Port(0)) pubSubTopic = "test" contentTopic = ContentTopic("/waku/2/default-content/proto") payload = "hello world".toBytes() @@ -320,10 +311,10 @@ suite "WakuNode - Relay": let nodeKey1 = generateSecp256k1Key() node1 = newTestWakuNode(nodeKey1, ValidIpAddress.init("0.0.0.0"), - bindPort = Port(60530)) + bindPort = Port(0)) nodeKey2 = generateSecp256k1Key() node2 = newTestWakuNode(nodeKey2, ValidIpAddress.init("0.0.0.0"), - bindPort = Port(60532), wsBindPort = Port(8103), wsEnabled = true) + bindPort = Port(0), wsBindPort = Port(0), wsEnabled = true) pubSubTopic = "test" contentTopic = ContentTopic("/waku/2/default-content/proto") payload = "hello world".toBytes() @@ -364,10 +355,10 @@ suite "WakuNode - Relay": let nodeKey1 = generateSecp256k1Key() node1 = newTestWakuNode(nodeKey1, ValidIpAddress.init("0.0.0.0"), - bindPort = Port(60540), wsBindPort = Port(8004), wssEnabled = true, secureKey = KEY_PATH, secureCert = CERT_PATH) + bindPort = Port(0), wsBindPort = Port(0), wssEnabled = true, secureKey = KEY_PATH, secureCert = CERT_PATH) nodeKey2 = generateSecp256k1Key() node2 = newTestWakuNode(nodeKey2, ValidIpAddress.init("0.0.0.0"), - bindPort = Port(60542)) + bindPort = Port(0)) pubSubTopic = "test" contentTopic = ContentTopic("/waku/2/default-content/proto") payload = "hello world".toBytes() @@ -403,9 +394,9 @@ suite "WakuNode - Relay": asyncTest "Messages are relayed between nodes with multiple transports (websocket and secure Websockets)": let nodeKey1 = generateSecp256k1Key() - node1 = newTestWakuNode(nodeKey1, ValidIpAddress.init("0.0.0.0"), bindPort = Port(60550), wsBindPort = Port(8005), wssEnabled = true, secureKey = KEY_PATH, secureCert = CERT_PATH) + node1 = newTestWakuNode(nodeKey1, ValidIpAddress.init("0.0.0.0"), bindPort = Port(0), wsBindPort = Port(0), wssEnabled = true, secureKey = KEY_PATH, secureCert = CERT_PATH) nodeKey2 = generateSecp256k1Key() - node2 = newTestWakuNode(nodeKey2, ValidIpAddress.init("0.0.0.0"), bindPort = Port(60552),wsBindPort = Port(8105), wsEnabled = true ) + node2 = newTestWakuNode(nodeKey2, ValidIpAddress.init("0.0.0.0"), bindPort = Port(0),wsBindPort = Port(0), wsEnabled = true ) let pubSubTopic = "test" diff --git a/tests/wakunode_rest/test_rest_store.nim b/tests/wakunode_rest/test_rest_store.nim index a1a2518849..cae8e859e3 100644 --- a/tests/wakunode_rest/test_rest_store.nim +++ b/tests/wakunode_rest/test_rest_store.nim @@ -9,7 +9,9 @@ import presto, presto/client as presto_client, libp2p/crypto/crypto import - ../../../waku/waku_core, + ../../../waku/waku_core/message, + ../../../waku/waku_core/topics, + ../../../waku/waku_core/time, ../../../waku/waku_node, ../../../waku/node/peer_manager, ../../../waku/node/rest/server, @@ -146,7 +148,7 @@ procSuite "Waku v2 Rest API - Store": let node = testWakuNode() await node.start() - let restPort = Port(58011) + let restPort = Port(58012) let restAddress = ValidIpAddress.init("0.0.0.0") let restServer = RestServerRef.init(restAddress, restPort).tryGet() @@ -244,7 +246,7 @@ procSuite "Waku v2 Rest API - Store": await node.start() await node.mountRelay() - let restPort = Port(58011) + let restPort = Port(58013) let restAddress = ValidIpAddress.init("0.0.0.0") let restServer = RestServerRef.init(restAddress, restPort).tryGet() @@ -318,7 +320,7 @@ procSuite "Waku v2 Rest API - Store": await node.start() await node.mountRelay() - let restPort = Port(58011) + let restPort = Port(58014) let restAddress = ValidIpAddress.init("0.0.0.0") let restServer = RestServerRef.init(restAddress, restPort).tryGet() @@ -409,7 +411,7 @@ procSuite "Waku v2 Rest API - Store": await node.start() await node.mountRelay() - let restPort = Port(58011) + let restPort = Port(58015) let restAddress = ValidIpAddress.init("0.0.0.0") let restServer = RestServerRef.init(restAddress, restPort).tryGet() @@ -466,7 +468,7 @@ procSuite "Waku v2 Rest API - Store": await node.start() await node.mountRelay() - let restPort = Port(58011) + let restPort = Port(58016) let restAddress = ValidIpAddress.init("0.0.0.0") let restServer = RestServerRef.init(restAddress, restPort).tryGet() From ec42e2c7583e4d1a84272de6ac266fcd97079e3b Mon Sep 17 00:00:00 2001 From: Aaryamann Challani <43716372+rymnc@users.noreply.github.com> Date: Thu, 7 Sep 2023 18:15:25 +0530 Subject: [PATCH 008/274] feat(rln_db_inspector): create rln_db_inspector tool (#1999) * feat(rln_db_inspector): create rln_db_inspector tool * Apply suggestions from code review Co-authored-by: Ivan Folgueira Bande <128452529+Ivansete-status@users.noreply.github.com> --------- Co-authored-by: Ivan Folgueira Bande <128452529+Ivansete-status@users.noreply.github.com> --- Makefile | 4 ++ tools/rln_db_inspector/external_config.nim | 47 +++++++++++++++++++ tools/rln_db_inspector/nim.cfg | 3 ++ tools/rln_db_inspector/rln_db_inspector.nim | 50 +++++++++++++++++++++ waku.nimble | 4 ++ 5 files changed, 108 insertions(+) create mode 100644 tools/rln_db_inspector/external_config.nim create mode 100644 tools/rln_db_inspector/nim.cfg create mode 100644 tools/rln_db_inspector/rln_db_inspector.nim diff --git a/Makefile b/Makefile index abd0d4f28f..c4ce0e9060 100644 --- a/Makefile +++ b/Makefile @@ -191,6 +191,10 @@ rln-keystore-generator: | build deps librln-experimental echo -e $(BUILD_MSG) "build/$@" && \ $(ENV_SCRIPT) nim rln_keystore_generator $(NIM_PARAMS) $(EXPERIMENTAL_PARAMS) waku.nims +rln-db-inspector: | build deps librln-experimental + echo -e $(BUILD_MSG) "build/$@" && \ + $(ENV_SCRIPT) nim rln_db_inspector $(NIM_PARAMS) $(EXPERIMENTAL_PARAMS) waku.nims + chat2bridge: | build deps echo -e $(BUILD_MSG) "build/$@" && \ $(ENV_SCRIPT) nim chat2bridge $(NIM_PARAMS) waku.nims diff --git a/tools/rln_db_inspector/external_config.nim b/tools/rln_db_inspector/external_config.nim new file mode 100644 index 0000000000..e6d37484e6 --- /dev/null +++ b/tools/rln_db_inspector/external_config.nim @@ -0,0 +1,47 @@ +when (NimMajor, NimMinor) < (1, 4): + {.push raises: [Defect].} +else: + {.push raises: [].} + +import + stew/results, + chronos, + confutils, + confutils/defs, + confutils/toml/defs as confTomlDefs, + confutils/toml/std/net as confTomlNet, + libp2p/crypto/crypto, + libp2p/crypto/secp, + libp2p/multiaddress, + secp256k1 +import + ../../waku/common/confutils/envvar/defs as confEnvvarDefs, + ../../waku/common/confutils/envvar/std/net as confEnvvarNet + +export + confTomlDefs, + confTomlNet, + confEnvvarDefs, + confEnvvarNet + +type + RlnDbInspectorConf* = object + configFile* {. + desc: "Loads configuration from a TOML file (cmd-line parameters take precedence)", + name: "config-file" }: Option[InputFile] + + ## General node config + rlnRelayTreePath* {. + desc: "The path to the rln-relay tree", + defaultValue: "", + name: "rln-relay-tree-path" }: string + + +proc loadConfig*(T: type RlnDbInspectorConf): Result[T, string] = + try: + let conf = RlnDbInspectorConf.load() + if conf.rlnRelayTreePath == "": + return err("--rln-relay-tree-path must be set") + ok(conf) + except CatchableError, Exception: + err(getCurrentExceptionMsg()) diff --git a/tools/rln_db_inspector/nim.cfg b/tools/rln_db_inspector/nim.cfg new file mode 100644 index 0000000000..f3bae15902 --- /dev/null +++ b/tools/rln_db_inspector/nim.cfg @@ -0,0 +1,3 @@ +-d:chronicles_line_numbers +-d:chronicles_runtime_filtering=on +#-d:"chronicles_enabled_topics=GossipSub:TRACE,WakuRelay:TRACE" diff --git a/tools/rln_db_inspector/rln_db_inspector.nim b/tools/rln_db_inspector/rln_db_inspector.nim new file mode 100644 index 0000000000..d06b582f19 --- /dev/null +++ b/tools/rln_db_inspector/rln_db_inspector.nim @@ -0,0 +1,50 @@ +when (NimMajor, NimMinor) < (1, 4): + {.push raises: [Defect].} +else: + {.push raises: [].} + +import + chronicles, + sequtils, + stew/[results] + +import + ../../waku/waku_rln_relay/rln, + ../../waku/waku_rln_relay/conversion_utils, + ./external_config + +logScope: + topics = "rln_db_inspector" + +when isMainModule: + {.pop.} + # 1. load configuration + let conf = RlnDbInspectorConf.loadConfig().isOkOr: + error "failure while loading the configuration", error=confRes.error + quit(1) + + trace "configuration", conf = $conf + + # 2. initialize rlnInstance + let rlnInstanceRes = createRLNInstance(d=20, + tree_path = conf.rlnRelayTreePath) + if rlnInstanceRes.isErr(): + error "failure while creating RLN instance", error=rlnInstanceRes.error + quit(1) + + let rlnInstance = rlnInstanceRes.get() + + # 3. get metadata + let metadataGetRes = rlnInstance.getMetadata() + if metadataGetRes.isErr(): + error "failure while getting RLN metadata", error=metadataGetRes.error + quit(1) + + let metadata = metadataGetRes.get() + + info "RLN metadata", lastProcessedBlock = metadata.lastProcessedBlock, + chainId = metadata.chainId, + contractAddress = metadata.contractAddress, + validRoots = metadata.validRoots.mapIt(it.inHex()) + + quit(0) diff --git a/waku.nimble b/waku.nimble index 80e7220130..528eef74e0 100644 --- a/waku.nimble +++ b/waku.nimble @@ -74,6 +74,10 @@ task rln_keystore_generator, "Build the rln keystore generator": let name = "rln_keystore_generator" buildBinary name, "tools/rln_keystore_generator/" +task rln_db_inspector, "Build the rln db inspector": + let name = "rln_db_inspector" + buildBinary name, "tools/rln_db_inspector/" + task test, "Build & run Waku tests": test "all_tests_waku" From a8095d871ed0066fafa7d3195e73abf08724bcbb Mon Sep 17 00:00:00 2001 From: Aaryamann Challani <43716372+rymnc@users.noreply.github.com> Date: Fri, 8 Sep 2023 13:58:27 +0530 Subject: [PATCH 009/274] fix(rln-db-inspector): use valueOr pattern (#2012) --- tools/rln_db_inspector/rln_db_inspector.nim | 20 +++++++------------- 1 file changed, 7 insertions(+), 13 deletions(-) diff --git a/tools/rln_db_inspector/rln_db_inspector.nim b/tools/rln_db_inspector/rln_db_inspector.nim index d06b582f19..864f506127 100644 --- a/tools/rln_db_inspector/rln_db_inspector.nim +++ b/tools/rln_db_inspector/rln_db_inspector.nim @@ -19,29 +19,23 @@ logScope: when isMainModule: {.pop.} # 1. load configuration - let conf = RlnDbInspectorConf.loadConfig().isOkOr: - error "failure while loading the configuration", error=confRes.error + let conf = RlnDbInspectorConf.loadConfig().valueOr: + error "failure while loading the configuration", error quit(1) trace "configuration", conf = $conf # 2. initialize rlnInstance - let rlnInstanceRes = createRLNInstance(d=20, - tree_path = conf.rlnRelayTreePath) - if rlnInstanceRes.isErr(): - error "failure while creating RLN instance", error=rlnInstanceRes.error + let rlnInstance = createRLNInstance(d=20, + tree_path = conf.rlnRelayTreePath).valueOr: + error "failure while creating RLN instance", error quit(1) - let rlnInstance = rlnInstanceRes.get() - # 3. get metadata - let metadataGetRes = rlnInstance.getMetadata() - if metadataGetRes.isErr(): - error "failure while getting RLN metadata", error=metadataGetRes.error + let metadata = rlnInstance.getMetadata().valueOr: + error "failure while getting RLN metadata", error quit(1) - let metadata = metadataGetRes.get() - info "RLN metadata", lastProcessedBlock = metadata.lastProcessedBlock, chainId = metadata.chainId, contractAddress = metadata.contractAddress, From fc6194bb6b4de1bf22ea55ddab397616f9d432d1 Mon Sep 17 00:00:00 2001 From: NagyZoltanPeter <113987313+NagyZoltanPeter@users.noreply.github.com> Date: Fri, 8 Sep 2023 11:19:47 +0200 Subject: [PATCH 010/274] feat: Rest endoint /health for rln (#2011) * Rest endoint /health added * Remove dev-debug echo * Changed not ready message * Update waku/node/rest/health/handlers.nim Co-authored-by: Ivan Folgueira Bande <128452529+Ivansete-status@users.noreply.github.com> * Various fixes on PR foundings, added comments --------- Co-authored-by: Ivan Folgueira Bande <128452529+Ivansete-status@users.noreply.github.com> --- apps/wakunode2/app.nim | 4 ++ tests/all_tests_waku.nim | 3 +- tests/wakunode_rest/test_rest_health.nim | 77 ++++++++++++++++++++++++ waku/node/rest/health/client.nim | 30 +++++++++ waku/node/rest/health/handlers.nim | 42 +++++++++++++ waku/node/rest/health/openapi.yaml | 41 +++++++++++++ 6 files changed, 196 insertions(+), 1 deletion(-) create mode 100644 tests/wakunode_rest/test_rest_health.nim create mode 100644 waku/node/rest/health/client.nim create mode 100644 waku/node/rest/health/handlers.nim create mode 100644 waku/node/rest/health/openapi.yaml diff --git a/apps/wakunode2/app.nim b/apps/wakunode2/app.nim index e72c474d47..5dfbc1fe39 100644 --- a/apps/wakunode2/app.nim +++ b/apps/wakunode2/app.nim @@ -47,6 +47,7 @@ import ../../waku/node/rest/relay/topic_cache, ../../waku/node/rest/filter/handlers as rest_filter_api, ../../waku/node/rest/store/handlers as rest_store_api, + ../../waku/node/rest/health/handlers as rest_health_api, ../../waku/node/jsonrpc/admin/handlers as rpc_admin_api, ../../waku/node/jsonrpc/debug/handlers as rpc_debug_api, ../../waku/node/jsonrpc/filter/handlers as rpc_filter_api, @@ -569,6 +570,9 @@ proc startRestServer(app: App, address: ValidIpAddress, port: Port, conf: WakuNo ## Debug REST API installDebugApiHandlers(server.router, app.node) + ## Health REST API + installHealthApiHandler(server.router, app.node) + ## Relay REST API if conf.relay: let relayCache = TopicCache.init(capacity=conf.restRelayCacheCapacity) diff --git a/tests/all_tests_waku.nim b/tests/all_tests_waku.nim index 357bfdc236..d5ed750522 100644 --- a/tests/all_tests_waku.nim +++ b/tests/all_tests_waku.nim @@ -102,4 +102,5 @@ when defined(rln): ./waku_rln_relay/test_waku_rln_relay, ./waku_rln_relay/test_wakunode_rln_relay, ./waku_rln_relay/test_rln_group_manager_onchain, - ./waku_rln_relay/test_rln_group_manager_static + ./waku_rln_relay/test_rln_group_manager_static, + ./wakunode_rest/test_rest_health diff --git a/tests/wakunode_rest/test_rest_health.nim b/tests/wakunode_rest/test_rest_health.nim new file mode 100644 index 0000000000..46b2ea75b2 --- /dev/null +++ b/tests/wakunode_rest/test_rest_health.nim @@ -0,0 +1,77 @@ +{.used.} + +import + std/tempfiles, + stew/shims/net, + testutils/unittests, + presto, + presto/client as presto_client, + libp2p/peerinfo, + libp2p/multiaddress, + libp2p/crypto/crypto +import + ../../waku/waku_node, + ../../waku/node/waku_node as waku_node2, # TODO: Remove after moving `git_version` to the app code. + ../../waku/node/rest/server, + ../../waku/node/rest/client, + ../../waku/node/rest/responses, + ../../waku/node/rest/health/handlers as health_api, + ../../waku/node/rest/health/client as health_api_client, + ../../waku/waku_rln_relay, + ../testlib/common, + ../testlib/wakucore, + ../testlib/wakunode + + +proc testWakuNode(): WakuNode = + let + privkey = crypto.PrivateKey.random(Secp256k1, rng[]).tryGet() + bindIp = ValidIpAddress.init("0.0.0.0") + extIp = ValidIpAddress.init("127.0.0.1") + port = Port(0) + + newTestWakuNode(privkey, bindIp, port, some(extIp), some(port)) + + +suite "Waku v2 REST API - health": + asyncTest "Get node health info - GET /health": + # Given + let node = testWakuNode() + await node.start() + await node.mountRelay() + + let restPort = Port(58001) + let restAddress = ValidIpAddress.init("0.0.0.0") + let restServer = RestServerRef.init(restAddress, restPort).tryGet() + + installHealthApiHandler(restServer.router, node) + restServer.start() + let client = newRestHttpClient(initTAddress(restAddress, restPort)) + + # When + var response = await client.healthCheck() + + # Then + check: + response.status == 503 + $response.contentType == $MIMETYPE_TEXT + response.data == "Node is not ready" + + # now kick in rln (currently the only check for health) + await node.mountRlnRelay(WakuRlnConfig(rlnRelayDynamic: false, + rlnRelayCredIndex: some(1.uint), + rlnRelayTreePath: genTempPath("rln_tree", "wakunode"), + )) + + # When + response = await client.healthCheck() + + # Then + check: + response.status == 200 + $response.contentType == $MIMETYPE_TEXT + response.data == "Node is healthy" + + await restServer.stop() + await restServer.closeWait() + await node.stop() diff --git a/waku/node/rest/health/client.nim b/waku/node/rest/health/client.nim new file mode 100644 index 0000000000..c1a0ccfe66 --- /dev/null +++ b/waku/node/rest/health/client.nim @@ -0,0 +1,30 @@ +when (NimMajor, NimMinor) < (1, 4): + {.push raises: [Defect].} +else: + {.push raises: [].} + +import + chronicles, + json_serialization, + json_serialization/std/options, + presto/[route, client] +import + ../serdes, + ../responses + +logScope: + topics = "waku node rest health_api" + +proc decodeBytes*(t: typedesc[string], value: openArray[byte], + contentType: Opt[ContentTypeData]): RestResult[string] = + if MediaType.init($contentType) != MIMETYPE_TEXT: + error "Unsupported contentType value", contentType = contentType + return err("Unsupported contentType") + + var res: string + if len(value) > 0: + res = newString(len(value)) + copyMem(addr res[0], unsafeAddr value[0], len(value)) + return ok(res) + +proc healthCheck*(): RestResponse[string] {.rest, endpoint: "/health", meth: HttpMethod.MethodGet.} diff --git a/waku/node/rest/health/handlers.nim b/waku/node/rest/health/handlers.nim new file mode 100644 index 0000000000..9b4fffdfe6 --- /dev/null +++ b/waku/node/rest/health/handlers.nim @@ -0,0 +1,42 @@ +when (NimMajor, NimMinor) < (1, 4): + {.push raises: [Defect].} +else: + {.push raises: [].} + +import + chronicles, + json_serialization, + presto/route +import + ../../waku_node, + ../responses, + ../serdes + +logScope: + topics = "waku node rest health_api" + +const ROUTE_HEALTH* = "/health" + +const FutIsReadyTimout = 5.seconds + +proc installHealthApiHandler*(router: var RestRouter, node: WakuNode) = + ## /health endpoint provides information about node readiness to caller. + ## Currently it is restricted to checking RLN (if mounted) proper setup + ## TODO: Leter to extend it to a broader information about each subsystem state + ## report. Rest response to change to JSON structure that can hold exact detailed + ## information. + + router.api(MethodGet, ROUTE_HEALTH) do () -> RestApiResponse: + + let isReadyStateFut = node.isReady() + if not await isReadyStateFut.withTimeout(FutIsReadyTimout): + return RestApiResponse.internalServerError("Health check timed out") + + var msg = "Node is healthy" + var status = Http200 + + if not isReadyStateFut.read(): + msg = "Node is not ready" + status = Http503 + + return RestApiResponse.textResponse(msg, status) diff --git a/waku/node/rest/health/openapi.yaml b/waku/node/rest/health/openapi.yaml new file mode 100644 index 0000000000..f433800c2a --- /dev/null +++ b/waku/node/rest/health/openapi.yaml @@ -0,0 +1,41 @@ +openapi: 3.0.3 +info: + title: Waku V2 node REST API + version: 1.0.0 + contact: + name: VAC Team + url: https://forum.vac.dev/ + +tags: + - name: health + description: Healt check REST API for WakuV2 node + +paths: + /health: + get: + summary: Get node health status + description: Retrieve readiness of a Waku v2 node. + operationId: healthcheck + tags: + - health + responses: + '200': + description: Waku v2 node is up and running. + content: + text/plain: + schema: + type: string + example: Node is healty + '500': + description: Internal server error + content: + text/plain: + schema: + type: string + '503': + description: Node not initialized or having issues + content: + text/plain: + schema: + type: string + example: Node is not initialized From 7d9d8a3fb4ab28ed512d3038e83fbbf66626d376 Mon Sep 17 00:00:00 2001 From: Alvaro Revuelta Date: Fri, 8 Sep 2023 13:36:26 +0200 Subject: [PATCH 011/274] fix(p2p): fix possible connectivity issue (#1996) --- waku/node/peer_manager/peer_manager.nim | 9 +++++---- waku/node/waku_switch.nim | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/waku/node/peer_manager/peer_manager.nim b/waku/node/peer_manager/peer_manager.nim index a5fecce0ba..b8988dd28f 100644 --- a/waku/node/peer_manager/peer_manager.nim +++ b/waku/node/peer_manager/peer_manager.nim @@ -53,7 +53,7 @@ const ConnectivityLoopInterval = chronos.seconds(15) # How often the peer store is pruned - PrunePeerStoreInterval = chronos.minutes(5) + PrunePeerStoreInterval = chronos.minutes(10) # How often metrics and logs are shown/updated LogAndMetricsInterval = chronos.minutes(3) @@ -583,15 +583,16 @@ proc connectToRelayPeers*(pm: PeerManager) {.async.} = let totalRelayPeers = inRelayPeers.len + outRelayPeers.len let inPeersTarget = maxConnections - pm.outRelayPeersTarget - if inRelayPeers.len > pm.inRelayPeersTarget: - await pm.pruneInRelayConns(inRelayPeers.len - pm.inRelayPeersTarget) + # TODO: Temporally disabled. Might be causing connection issues + #if inRelayPeers.len > pm.inRelayPeersTarget: + # await pm.pruneInRelayConns(inRelayPeers.len - pm.inRelayPeersTarget) if outRelayPeers.len >= pm.outRelayPeersTarget: return let notConnectedPeers = pm.peerStore.getNotConnectedPeers().mapIt(RemotePeerInfo.init(it.peerId, it.addrs)) let outsideBackoffPeers = notConnectedPeers.filterIt(pm.canBeConnected(it.peerId)) - let numPeersToConnect = min(min(maxConnections - totalRelayPeers, outsideBackoffPeers.len), MaxParalelDials) + let numPeersToConnect = min(outsideBackoffPeers.len, MaxParalelDials) await pm.connectToNodes(outsideBackoffPeers[0.. Date: Fri, 8 Sep 2023 14:01:59 +0200 Subject: [PATCH 012/274] chore(ci): execute js-waku integration tests on image build (#2006) --- .github/workflows/ci-experimental.yml | 7 +++++++ .github/workflows/ci.yml | 7 +++++++ .github/workflows/container-image.yml | 9 +++++++++ 3 files changed, 23 insertions(+) diff --git a/.github/workflows/ci-experimental.yml b/.github/workflows/ci-experimental.yml index b86ae1c90b..11b6a627a3 100644 --- a/.github/workflows/ci-experimental.yml +++ b/.github/workflows/ci-experimental.yml @@ -128,3 +128,10 @@ jobs: with: experimental: true secrets: inherit + + js-waku: + needs: build-docker-image + uses: waku-org/js-waku/.github/workflows/ci.yml@master + with: + nim_wakunode_image: ${{ needs.build-docker-image.outputs.image }} + caller: nwaku \ No newline at end of file diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f10674b31b..43b73fd903 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -124,3 +124,10 @@ jobs: if: ${{ needs.changes.outputs.v2 == 'true' || needs.changes.outputs.common == 'true' || needs.changes.outputs.docker == 'true' }} uses: waku-org/nwaku/.github/workflows/container-image.yml@master secrets: inherit + + js-waku: + needs: build-docker-image + uses: waku-org/js-waku/.github/workflows/ci.yml@master + with: + nim_wakunode_image: ${{ needs.build-docker-image.outputs.image }} + caller: nwaku diff --git a/.github/workflows/container-image.yml b/.github/workflows/container-image.yml index 9429cd677d..3324531314 100644 --- a/.github/workflows/container-image.yml +++ b/.github/workflows/container-image.yml @@ -5,6 +5,10 @@ on: inputs: experimental: type: boolean + outputs: + image: + description: The resulting image link + value: ${{ jobs.build-docker-image.outputs.image }} env: NPROC: 2 @@ -20,6 +24,8 @@ jobs: timeout-minutes: 60 name: docker-build-${{ matrix.os }} + outputs: + image: ${{ steps.build.outputs.image }} steps: - name: Checkout code uses: actions/checkout@v3 @@ -51,6 +57,7 @@ jobs: IMAGE=quay.io/wakuorg/nwaku-pr:${TAG} echo "image=${IMAGE}" >> $GITHUB_OUTPUT + echo "commit_hash=$(git rev-parse HEAD)" >> $GITHUB_OUTPUT docker login -u ${QUAY_USER} -p ${QUAY_PASSWORD} quay.io docker build -t ${IMAGE} -f docker/binaries/Dockerfile.bn.amd64 --label quay.expires-after=7d . @@ -70,4 +77,6 @@ jobs: ``` ${{steps.build.outputs.image}} ``` + + Built from ${{ steps.build.outputs.commit_hash }} comment_tag: execution${{ inputs.experimental && '**experimental**' || ''}} From 21604e6bfdbf7872f70de0432bc63109306d37e6 Mon Sep 17 00:00:00 2001 From: Aaryamann Challani <43716372+rymnc@users.noreply.github.com> Date: Fri, 8 Sep 2023 18:24:27 +0530 Subject: [PATCH 013/274] fix(rln-relay): missed roots during sync (#2015) --- .../test_rln_group_manager_onchain.nim | 18 ++++++ .../group_manager/on_chain/group_manager.nim | 64 ++++++------------- 2 files changed, 39 insertions(+), 43 deletions(-) diff --git a/tests/waku_rln_relay/test_rln_group_manager_onchain.nim b/tests/waku_rln_relay/test_rln_group_manager_onchain.nim index 600b3e1b72..a0ac49516d 100644 --- a/tests/waku_rln_relay/test_rln_group_manager_onchain.nim +++ b/tests/waku_rln_relay/test_rln_group_manager_onchain.nim @@ -193,6 +193,8 @@ suite "Onchain group manager": manager.initialized manager.rlnContractDeployedBlockNumber > 0 + await manager.stop() + asyncTest "should error on initialization when loaded metadata does not match": let manager = await setup() await manager.init() @@ -220,12 +222,14 @@ suite "Onchain group manager": await manager.init() await manager.startGroupSync() + await manager.stop() asyncTest "startGroupSync: should guard against uninitialized state": let manager = await setup() expect(ValueError): await manager.startGroupSync() + await manager.stop() asyncTest "startGroupSync: should sync to the state of the group": let manager = await setup() @@ -262,6 +266,7 @@ suite "Onchain group manager": check: merkleRootBefore != merkleRootAfter + await manager.stop() asyncTest "startGroupSync: should fetch history correctly": let manager = await setup() @@ -303,6 +308,7 @@ suite "Onchain group manager": check: merkleRootBefore != merkleRootAfter manager.validRootBuffer.len() == credentialCount - AcceptableRootWindowSize + await manager.stop() asyncTest "register: should guard against uninitialized state": let manager = await setup() @@ -310,6 +316,7 @@ suite "Onchain group manager": expect(ValueError): await manager.register(dummyCommitment) + await manager.stop() asyncTest "register: should register successfully": let manager = await setup() @@ -329,6 +336,7 @@ suite "Onchain group manager": check: merkleRootAfter.inHex() != merkleRootBefore.inHex() manager.latestIndex == 1 + await manager.stop() asyncTest "register: callback is called": let manager = await setup() @@ -354,6 +362,7 @@ suite "Onchain group manager": check: manager.rlnInstance.getMetadata().get().validRoots == manager.validRoots.toSeq() + await manager.stop() asyncTest "withdraw: should guard against uninitialized state": let manager = await setup() @@ -361,6 +370,7 @@ suite "Onchain group manager": expect(ValueError): await manager.withdraw(idSecretHash) + await manager.stop() asyncTest "validateRoot: should validate good root": let manager = await setup() @@ -402,6 +412,7 @@ suite "Onchain group manager": check: validated + await manager.stop() asyncTest "validateRoot: should reject bad root": let manager = await setup() @@ -432,6 +443,7 @@ suite "Onchain group manager": check: validated == false + await manager.stop() asyncTest "verifyProof: should verify valid proof": let manager = await setup() @@ -474,6 +486,7 @@ suite "Onchain group manager": check: verifiedRes.get() + await manager.stop() asyncTest "verifyProof: should reject invalid proof": let manager = await setup() @@ -510,6 +523,7 @@ suite "Onchain group manager": check: verifiedRes.get() == false + await manager.stop() asyncTest "backfillRootQueue: should backfill roots in event of chain reorg": let manager = await setup() @@ -554,6 +568,7 @@ suite "Onchain group manager": manager.validRoots.len() == credentialCount - 1 manager.validRootBuffer.len() == 0 manager.validRoots[credentialCount - 2] == expectedLastRoot + await manager.stop() asyncTest "isReady should return false if ethRpc is none": var manager = await setup() @@ -563,6 +578,7 @@ suite "Onchain group manager": check: (await manager.isReady()) == false + await manager.stop() asyncTest "isReady should return false if lastSeenBlockHead > lastProcessed": var manager = await setup() @@ -570,6 +586,7 @@ suite "Onchain group manager": check: (await manager.isReady()) == false + await manager.stop() asyncTest "isReady should return true if ethRpc is ready": var manager = await setup() @@ -579,6 +596,7 @@ suite "Onchain group manager": check: (await manager.isReady()) == true + await manager.stop() ################################ diff --git a/waku/waku_rln_relay/group_manager/on_chain/group_manager.nim b/waku/waku_rln_relay/group_manager/on_chain/group_manager.nim index f5375f0066..b82c298fdd 100644 --- a/waku/waku_rln_relay/group_manager/on_chain/group_manager.nim +++ b/waku/waku_rln_relay/group_manager/on_chain/group_manager.nim @@ -232,30 +232,20 @@ proc insert(blockTable: var BlockTable, blockNumber: BlockNumber, member: Member proc getRawEvents(g: OnchainGroupManager, fromBlock: BlockNumber, - toBlock: Option[BlockNumber] = none(BlockNumber)): Future[JsonNode] {.async.} = + toBlock: BlockNumber): Future[JsonNode] {.async.} = initializedGuard(g) let ethRpc = g.ethRpc.get() let rlnContract = g.rlnContract.get() - var normalizedToBlock: BlockNumber - if toBlock.isSome(): - var value = toBlock.get() - if value == 0: - # set to latest block - value = cast[BlockNumber](await ethRpc.provider.eth_blockNumber()) - normalizedToBlock = value - else: - normalizedToBlock = fromBlock - let events = await rlnContract.getJsonLogs(MemberRegistered, fromBlock = some(fromBlock.blockId()), - toBlock = some(normalizedToBlock.blockId())) + toBlock = some(toBlock.blockId())) return events proc getBlockTable(g: OnchainGroupManager, - fromBlock: BlockNumber, - toBlock: Option[BlockNumber] = none(BlockNumber)): Future[BlockTable] {.async.} = + fromBlock: BlockNumber, + toBlock: BlockNumber): Future[BlockTable] {.async.} = initializedGuard(g) var blockTable = default(BlockTable) @@ -311,23 +301,14 @@ proc handleRemovedEvents(g: OnchainGroupManager, blockTable: BlockTable): Future proc getAndHandleEvents(g: OnchainGroupManager, fromBlock: BlockNumber, - toBlock: Option[BlockNumber] = none(BlockNumber)): Future[void] {.async.} = + toBlock: BlockNumber): Future[void] {.async.} = initializedGuard(g) - proc getLatestBlockNumber(): BlockNumber = - if toBlock.isSome(): - # if toBlock = 0, that implies the latest block - # which is the case when we are syncing block-by-block - # therefore, toBlock = fromBlock + 1 - # if toBlock != 0, then we are chunking blocks - # therefore, toBlock = fromBlock + blockChunkSize (which is handled) - return max(fromBlock + 1, toBlock.get()) - return fromBlock let blockTable = await g.getBlockTable(fromBlock, toBlock) await g.handleEvents(blockTable) await g.handleRemovedEvents(blockTable) - g.latestProcessedBlock = getLatestBlockNumber() + g.latestProcessedBlock = toBlock let metadataSetRes = g.setMetadata() if metadataSetRes.isErr(): # this is not a fatal error, hence we don't raise an exception @@ -337,11 +318,13 @@ proc getAndHandleEvents(g: OnchainGroupManager, proc getNewHeadCallback(g: OnchainGroupManager): BlockHeaderHandler = proc newHeadCallback(blockheader: BlockHeader) {.gcsafe.} = - let latestBlock = blockheader.number.uint + let latestBlock = BlockNumber(blockheader.number) trace "block received", blockNumber = latestBlock # get logs from the last block try: - asyncSpawn g.getAndHandleEvents(latestBlock) + # inc by 1 to prevent double processing + let fromBlock = g.latestProcessedBlock + 1 + asyncSpawn g.getAndHandleEvents(fromBlock, latestBlock) except CatchableError: warn "failed to handle log: ", error=getCurrentExceptionMsg() return newHeadCallback @@ -368,28 +351,23 @@ proc startOnchainSync(g: OnchainGroupManager): Future[void] {.async.} = let blockChunkSize = 2_000 var fromBlock = if g.latestProcessedBlock > g.rlnContractDeployedBlockNumber: - info "resuming onchain sync from block", fromBlock = g.latestProcessedBlock g.latestProcessedBlock + 1 else: - info "starting onchain sync from deployed block number", deployedBlockNumber = g.rlnContractDeployedBlockNumber g.rlnContractDeployedBlockNumber - let latestBlock = cast[BlockNumber](await ethRpc.provider.eth_blockNumber()) try: # we always want to sync from last processed block => latest - if fromBlock == BlockNumber(0) or - fromBlock + BlockNumber(blockChunkSize) < latestBlock: - # chunk events - while true: - let currentLatestBlock = cast[BlockNumber](await g.ethRpc.get().provider.eth_blockNumber()) - let toBlock = min(fromBlock + BlockNumber(blockChunkSize), currentLatestBlock) - info "chunking events", fromBlock = fromBlock, toBlock = toBlock - await g.getAndHandleEvents(fromBlock, some(toBlock)) - fromBlock = toBlock + 1 - if fromBlock >= currentLatestBlock: - break - else: - await g.getAndHandleEvents(fromBlock, some(BlockNumber(0))) + # chunk events + while true: + let currentLatestBlock = cast[BlockNumber](await ethRpc.provider.eth_blockNumber()) + if fromBlock >= currentLatestBlock: + break + + let toBlock = min(fromBlock + BlockNumber(blockChunkSize), currentLatestBlock) + debug "fetching events", fromBlock = fromBlock, toBlock = toBlock + await g.getAndHandleEvents(fromBlock, toBlock) + fromBlock = toBlock + 1 + except CatchableError: raise newException(ValueError, "failed to get the history/reconcile missed blocks: " & getCurrentExceptionMsg()) From 76e34077b24939949a51cf042077973878233ef9 Mon Sep 17 00:00:00 2001 From: Aaryamann Challani <43716372+rymnc@users.noreply.github.com> Date: Mon, 11 Sep 2023 11:10:41 +0530 Subject: [PATCH 014/274] chore(rln-relay): updated docs (#1993) --- docs/operators/how-to/run-with-rln.md | 4 +- docs/tutorial/onchain-rln-relay-chat2.md | 43 +++----------- docs/tutorial/rln-keystore-generator.md | 73 ++++++++++++++++++++++++ tools/rln_keystore_generator/README.md | 2 +- 4 files changed, 84 insertions(+), 38 deletions(-) create mode 100644 docs/tutorial/rln-keystore-generator.md diff --git a/docs/operators/how-to/run-with-rln.md b/docs/operators/how-to/run-with-rln.md index da8533b191..570131740e 100644 --- a/docs/operators/how-to/run-with-rln.md +++ b/docs/operators/how-to/run-with-rln.md @@ -42,7 +42,7 @@ Follow [Step 10](../droplet-quickstart.md#10-run-nwaku) of the [droplet quicksta ```bash export SEPOLIA_WS_NODE_ADDRESS= -export RLN_RELAY_CONTRACT_ADDRESS="0x9C09146844C1326c2dBC41c451766C7138F88155" # Replace this with any compatible implementation +export RLN_RELAY_CONTRACT_ADDRESS="0xF471d71E9b1455bBF4b85d475afb9BB0954A29c4" # Replace this with any compatible implementation $WAKUNODE_DIR/wakunode2 \ --store:true \ --persist-messages \ @@ -62,7 +62,7 @@ If you are running the nwaku node within docker, follow [Step 2](../docker-quick ```bash export WAKU_FLEET= export SEPOLIA_WS_NODE_ADDRESS= -export RLN_RELAY_CONTRACT_ADDRESS="0x9C09146844C1326c2dBC41c451766C7138F88155" # Replace this with any compatible implementation +export RLN_RELAY_CONTRACT_ADDRESS="0xF471d71E9b1455bBF4b85d475afb9BB0954A29c4" # Replace this with any compatible implementation docker run -i -t -p 60000:60000 -p 9000:9000/udp statusteam/nim-waku:v0.12.0 \ --dns-discovery:true \ --dns-discovery-url:"$WAKU_FLEET" \ diff --git a/docs/tutorial/onchain-rln-relay-chat2.md b/docs/tutorial/onchain-rln-relay-chat2.md index 46ed3b43bd..69b3e12b82 100644 --- a/docs/tutorial/onchain-rln-relay-chat2.md +++ b/docs/tutorial/onchain-rln-relay-chat2.md @@ -8,16 +8,14 @@ This differs from the prior test scenarios in which the RLN group was static and ## Prerequisites To complete this tutorial, you will need -1. An rln keystore file with credentials to the rln membership smart contract you wish to use. You may obtain this by registering to the smart contract and generating a keystore. - +1. An rln keystore file with credentials to the rln membership smart contract you wish to use. You may obtain this by registering to the smart contract and generating a keystore, or by using the [rln-keystore-generator](./rln-keystore-generator.md) which does that for you. ## Overview Figure 1 provides an overview of the interaction of the chat2 clients with the test fleets and the membership contract. -At a high level, when a chat2 client is run with Waku-RLN-Relay mounted in on-chain mode, the passed in credential will get displayed on the console of your chat2 client. -You may copy the displayed RLN credential and reuse them for the future execution of the chat2 application. -Proper instructions in this regard is provided in the following [section](#how-to-persist-and-reuse-rln-credential). +At a high level, when a chat2 client is run with Waku-RLN-Relay mounted in on-chain mode. + Under the hood, the chat2 client constantly listens to the membership contract and keeps itself updated with the latest state of the group. In the following test setting, the chat2 clients are to be connected to the Waku test fleets as their first hop. @@ -47,7 +45,7 @@ Run the following command to set up your chat2 client. --content-topic:/toy-chat/3/mingde/proto \ --rln-relay:true \ --rln-relay-dynamic:true \ ---rln-relay-eth-contract-address:0x9C09146844C1326c2dBC41c451766C7138F88155 \ +--rln-relay-eth-contract-address:0xF471d71E9b1455bBF4b85d475afb9BB0954A29c4 \ --rln-relay-cred-path:xxx/xx/rlnKeystore.json \ --rln-relay-cred-password:xxxx \ --rln-relay-eth-client-address:xxxx \ @@ -60,8 +58,8 @@ In this command - the `rln-relay` flag is set to `true` to enable the Waku-RLN-Relay protocol for spam protection. - the `--rln-relay-dynamic` flag is set to `true` to enable the on-chain mode of Waku-RLN-Relay protocol with dynamic group management. - the `--rln-relay-eth-contract-address` option gets the address of the membership contract. - The current address of the contract is `0x9C09146844C1326c2dBC41c451766C7138F88155`. - You may check the state of the contract on the [Sepolia testnet](https://sepolia.etherscan.io/address/0x9C09146844C1326c2dBC41c451766C7138F88155). + The current address of the contract is `0xF471d71E9b1455bBF4b85d475afb9BB0954A29c4`. + You may check the state of the contract on the [Sepolia testnet](https://sepolia.etherscan.io/address/0xF471d71E9b1455bBF4b85d475afb9BB0954A29c4). - the `--rln-relay-cred-path` option denotes the path to the keystore file described above - the `--rln-relay-cred-password` option denotes the password to the keystore - the `rln-relay-eth-client-address` is the WebSocket address of the hosted node on the Sepolia testnet. @@ -153,31 +151,6 @@ Once you are done with the test, make sure you close all the chat2 clients by ty quitting... ``` -## How to persist and reuse RLN credential - -You may pass the `rln-relay-cred-path` config option to specify a path to a file for 1) persisting RLN credentials and 2) retrieving persisted RLN credentials. - -If the keystore exists in the path provided, it is used, and will default to the 0th element in the credential array. -If the keystore does not exist in the path provided, a new keystore will be created and added to the directory it was supposed to be in. - -You may provide an index to the credential you wish to use by passing the `rln-relay-cred-index` config option. - -You may provide an index to the membership you wish to use (within the same membership set) by passing the `rln-relay-membership-group-index` config option. - -```bash -./build/chat2 --fleet:test \ ---content-topic:/toy-chat/3/mingde/proto \ ---rln-relay:true \ ---rln-relay-dynamic:true \ ---rln-relay-eth-contract-address:0x9C09146844C1326c2dBC41c451766C7138F88155 \ ---rln-relay-eth-client-address:your_sepolia_node \ ---ports-shift:0 \ ---rln-relay-cred-path:./rlnKeystore.json \ ---rln-relay-cred-password:your_password \ ---rln-relay-membership-index:0 \ ---rln-relay-membership-group-index:0 -``` - # Sample test output In this section, a sample test of running two chat clients is provided. @@ -193,7 +166,7 @@ You can check this fact by looking at `Bob`'s console, where `message3` is missi **Alice** ```bash -./build/chat2 --fleet:test --content-topic:/toy-chat/3/mingde/proto --rln-relay:true --rln-relay-dynamic:true --rln-relay-eth-contract-address:0x9C09146844C1326c2dBC41c451766C7138F88155 --rln-relay-cred-path:rlnKeystore.json --rln-relay-cred-password:password --rln-relay-eth-client-address:wss://sepolia.infura.io/ws/v3/12345678901234567890123456789012 --ports-shift=1 +./build/chat2 --fleet:test --content-topic:/toy-chat/3/mingde/proto --rln-relay:true --rln-relay-dynamic:true --rln-relay-eth-contract-address:0xF471d71E9b1455bBF4b85d475afb9BB0954A29c4 --rln-relay-cred-path:rlnKeystore.json --rln-relay-cred-password:password --rln-relay-eth-client-address:wss://sepolia.infura.io/ws/v3/12345678901234567890123456789012 --ports-shift=1 ``` ``` @@ -236,7 +209,7 @@ your rln identity commitment key is: bd093cbf14fb933d53f596c33f98b3df83b7e9f7a19 **Bob** ```bash -./build/chat2 --fleet:test --content-topic:/toy-chat/3/mingde/proto --rln-relay:true --rln-relay-dynamic:true --rln-relay-eth-contract-address:0x9C09146844C1326c2dBC41c451766C7138F88155 --rln-relay-cred-path:rlnKeystore.json --rln-relay-cred-index:1 --rln-relay-cred-password:password --rln-relay-eth-client-address:wss://sepolia.infura.io/ws/v3/12345678901234567890123456789012 --ports-shift=2 +./build/chat2 --fleet:test --content-topic:/toy-chat/3/mingde/proto --rln-relay:true --rln-relay-dynamic:true --rln-relay-eth-contract-address:0xF471d71E9b1455bBF4b85d475afb9BB0954A29c4 --rln-relay-cred-path:rlnKeystore.json --rln-relay-cred-index:1 --rln-relay-cred-password:password --rln-relay-eth-client-address:wss://sepolia.infura.io/ws/v3/12345678901234567890123456789012 --ports-shift=2 ``` ``` diff --git a/docs/tutorial/rln-keystore-generator.md b/docs/tutorial/rln-keystore-generator.md new file mode 100644 index 0000000000..869babf365 --- /dev/null +++ b/docs/tutorial/rln-keystore-generator.md @@ -0,0 +1,73 @@ +# rln-keystore-generator + +This document describes how to run and use the `rln-keystore-generator` tool. +It is meant to be used to generate and persist a set of valid RLN credentials to be used with rln-relay. + +## Pre-requisites + +1. An EOA with some ETH to pay for the registration transaction ($PRIVATE_KEY) +2. An RPC endpoint to connect to an Ethereum node ($RPC_URL) + +## Usage + +1. First, we compile the binary + + ```bash + make -j12 rln-keystore-generator + ``` + This command will fetch the rln static library and link it automatically. + + +2. Define the arguments you wish to use + + ```bash + export RPC_URL="https://sepolia.infura.io/v3/..." + export PRIVATE_KEY="0x..." + export RLN_CONTRACT_ADDRESS="0xF471d71E9b1455bBF4b85d475afb9BB0954A29c4" + export RLN_CREDENTIAL_PATH="rlnKeystore.json" + export RLN_CREDENTIAL_PASSWORD="xxx" + ``` + +3. Dry run the command to ensure better degree of execution + + ```bash + ./build/rln_keystore_generator \ + --rln-relay-eth-client-address:$RPC_URL \ + --rln-relay-eth-private-key:$PRIVATE_KEY \ + --rln-relay-eth-contract-address:$RLN_CONTRACT_ADDRESS \ + --rln-relay-cred-path:$RLN_CREDENTIAL_PATH \ + --rln-relay-cred-password:$RLN_CREDENTIAL_PASSWORD + ``` + By default, the tool will not execute a transaction. It will execute only if `--execute` is passed in. + +4. Run the keystore generator with the onchain registration + + ```bash + ./build/rln_keystore_generator \ + --rln-relay-eth-client-address:$RPC_URL \ + --rln-relay-eth-private-key:$PRIVATE_KEY \ + --rln-relay-eth-contract-address:$RLN_CONTRACT_ADDRESS \ + --rln-relay-cred-path:$RLN_CREDENTIAL_PATH \ + --rln-relay-cred-password:$RLN_CREDENTIAL_PASSWORD \ + --execute + ``` + + What this does is - + a. generate a set of valid rln credentials + b. registers it to the contract address provided + c. persists the credentials to the path provided + +5. You may now use this keystore with wakunode2 or chat2. + +## Troubleshooting + +1. `KeystoreCredentialNotFoundError` + + ``` + KeystoreCredentialNotFoundError: Credential not found in keystore + ``` + This is most likely due to multiple credentials present in the same keystore. + To navigate around this, both chat2 and wakunode2 have provided an option to specify the credential index to use (`--rln-relay-membership-index`). + Please use this option with the appropriate tree index of the credential you wish to use. + + diff --git a/tools/rln_keystore_generator/README.md b/tools/rln_keystore_generator/README.md index d982abf2bd..7e909c6175 100644 --- a/tools/rln_keystore_generator/README.md +++ b/tools/rln_keystore_generator/README.md @@ -1,3 +1,3 @@ # rln_keystore_generator -TODO! \ No newline at end of file +Documentation on running the `rln-keystore-generator` can be found [here](../../docs/tutorial/rln-keystore-generator.md) \ No newline at end of file From 645b0343671eac61c770a63bfe5f83c52b09ba60 Mon Sep 17 00:00:00 2001 From: Aaryamann Challani <43716372+rymnc@users.noreply.github.com> Date: Mon, 11 Sep 2023 12:02:31 +0530 Subject: [PATCH 015/274] =?UTF-8?q?feat(rln-relay):=20removed=20rln=20from?= =?UTF-8?q?=20experimental=20=F0=9F=9A=80=20(#2001)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat(rln-relay): removed rln from experimental 🚀 * fix(waku_node): if rln-relay is nil, return true * chore(tests): mark rest health as skipped --- .github/workflows/ci-experimental.yml | 137 ------------------ .github/workflows/container-image.yml | 11 +- .github/workflows/pre-release.yml | 12 +- .github/workflows/release-assets.yml | 2 +- Dockerfile | 3 +- Makefile | 49 +++---- apps/chat2/chat2.nim | 120 ++++++++------- apps/wakunode2/app.nim | 37 +++-- ci/Jenkinsfile.prs | 9 +- ci/Jenkinsfile.release | 8 +- docs/operators/how-to/run-with-rln.md | 12 +- docs/tutorial/onchain-rln-relay-chat2.md | 4 +- docs/tutorial/rln-chat2-live-testnet.md | 22 +-- docs/tutorial/rln-chat2-local-test.md | 4 +- tests/all_tests_waku.nim | 16 +- tests/wakunode_jsonrpc/test_jsonrpc_relay.nim | 22 +-- tests/wakunode_rest/test_rest_health.nim | 4 +- tests/wakunode_rest/test_rest_relay.nim | 12 +- waku/node/jsonrpc/relay/handlers.nim | 41 +++--- waku/node/rest/relay/handlers.nim | 43 +++--- waku/node/waku_metrics.nim | 12 +- waku/node/waku_node.nim | 63 ++++---- waku/waku_core/message/codec.nim | 16 +- waku/waku_core/message/message.nim | 9 +- 24 files changed, 212 insertions(+), 456 deletions(-) delete mode 100644 .github/workflows/ci-experimental.yml diff --git a/.github/workflows/ci-experimental.yml b/.github/workflows/ci-experimental.yml deleted file mode 100644 index 11b6a627a3..0000000000 --- a/.github/workflows/ci-experimental.yml +++ /dev/null @@ -1,137 +0,0 @@ -name: experimental - -on: - pull_request: - push: - branches: - - master - -concurrency: - group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} - cancel-in-progress: true - -env: - NPROC: 2 - MAKEFLAGS: "-j${NPROC}" - NIMFLAGS: "--parallelBuild:${NPROC}" - EXPERIMENTAL: "true" - -jobs: - changes: # changes detection - runs-on: ubuntu-latest - permissions: - pull-requests: read - steps: - - uses: actions/checkout@v3 - name: Checkout code - id: checkout - - uses: dorny/paths-filter@v2 - id: filter - with: - filters: | - common: - - '.github/workflows/**' - - 'vendor/**' - - 'Makefile' - - 'waku.nimble' - - v2: - - 'waku/**' - - 'apps/**' - - 'tools/**' - - 'tests/all_tests_waku.nim' - - 'tests/**' - - docker: - - 'docker/**' - - outputs: - common: ${{ steps.filter.outputs.common }} - v2: ${{ steps.filter.outputs.v2 }} - docker: ${{ steps.filter.outputs.docker }} - - build: - needs: changes - if: ${{ needs.changes.outputs.v2 == 'true' || needs.changes.outputs.common == 'true' }} - strategy: - matrix: - os: [ubuntu-latest, macos-latest] - runs-on: ${{ matrix.os }} - timeout-minutes: 60 - - name: build-${{ matrix.os }} - steps: - - name: Checkout code - uses: actions/checkout@v3 - - - name: Get submodules hash - id: submodules - run: | - echo "hash=$(git submodule status | awk '{print $1}' | sort | shasum -a 256 | sed 's/[ -]*//g')" >> $GITHUB_OUTPUT - - - name: Cache submodules - uses: actions/cache@v3 - with: - path: | - vendor/ - .git/modules - key: ${{ runner.os }}-vendor-modules-${{ steps.submodules.outputs.hash }} - - - name: Build binaries - run: make V=1 QUICK_AND_DIRTY_COMPILER=1 all - - test: - needs: changes - if: ${{ needs.changes.outputs.v2 == 'true' || needs.changes.outputs.common == 'true' }} - strategy: - matrix: - os: [ubuntu-latest, macos-latest] - runs-on: ${{ matrix.os }} - timeout-minutes: 60 - - name: test-${{ matrix.os }} - - steps: - - name: Checkout code - uses: actions/checkout@v3 - - - name: Get submodules hash - id: submodules - run: | - echo "hash=$(git submodule status | awk '{print $1}' | sort | shasum -a 256 | sed 's/[ -]*//g')" >> $GITHUB_OUTPUT - - - name: Cache submodules - uses: actions/cache@v3 - with: - path: | - vendor/ - .git/modules - key: ${{ runner.os }}-vendor-modules-${{ steps.submodules.outputs.hash }} - - - name: Run tests - run: | - if [ ${{ runner.os }} == "macOS" ]; then - brew unlink postgresql@14 - brew link libpq --force - fi - - if [ ${{ runner.os }} == "Linux" ]; then - sudo docker run --rm -d -e POSTGRES_PASSWORD=test123 -p 5432:5432 postgres:9.6-alpine - fi - - make V=1 LOG_LEVEL=DEBUG QUICK_AND_DIRTY_COMPILER=1 test testwakunode2 - - build-docker-image: - needs: changes - if: ${{ needs.changes.outputs.v2 == 'true' || needs.changes.outputs.common == 'true' || needs.changes.outputs.docker == 'true' }} - uses: waku-org/nwaku/.github/workflows/container-image.yml@master - with: - experimental: true - secrets: inherit - - js-waku: - needs: build-docker-image - uses: waku-org/js-waku/.github/workflows/ci.yml@master - with: - nim_wakunode_image: ${{ needs.build-docker-image.outputs.image }} - caller: nwaku \ No newline at end of file diff --git a/.github/workflows/container-image.yml b/.github/workflows/container-image.yml index 3324531314..a01ac207bb 100644 --- a/.github/workflows/container-image.yml +++ b/.github/workflows/container-image.yml @@ -2,9 +2,6 @@ name: container-image-build on: workflow_call: - inputs: - experimental: - type: boolean outputs: image: description: The resulting image link @@ -46,14 +43,12 @@ jobs: - name: Build binaries id: build run: | - EXPERIMENTAL=${{ inputs.experimental }} - make -j${NPROC} V=1 QUICK_AND_DIRTY_COMPILER=1 NIMFLAGS="-d:disableMarchNative" wakunode2 EXPERIMENTAL=${EXPERIMENTAL} + make -j${NPROC} V=1 QUICK_AND_DIRTY_COMPILER=1 NIMFLAGS="-d:disableMarchNative" wakunode2 SHORT_REF=$(git rev-parse --short HEAD) TAG=$([ "${PR_NUMBER}" == "" ] && echo "${SHORT_REF}" || echo "${PR_NUMBER}") - TAG=$([ "${EXPERIMENTAL}" == "true" ] && echo "${TAG}-experimental" || echo "${TAG}") IMAGE=quay.io/wakuorg/nwaku-pr:${TAG} echo "image=${IMAGE}" >> $GITHUB_OUTPUT @@ -72,11 +67,11 @@ jobs: if: ${{ github.event_name == 'pull_request' }} with: message: | - You can find the ${{ inputs.experimental && '**experimental**' || ''}} image built from this PR at + You can find the image built from this PR at ``` ${{steps.build.outputs.image}} ``` Built from ${{ steps.build.outputs.commit_hash }} - comment_tag: execution${{ inputs.experimental && '**experimental**' || ''}} + comment_tag: execution diff --git a/.github/workflows/pre-release.yml b/.github/workflows/pre-release.yml index 90a9ef8426..d4c12c20ec 100644 --- a/.github/workflows/pre-release.yml +++ b/.github/workflows/pre-release.yml @@ -20,11 +20,9 @@ jobs: strategy: matrix: os: [ubuntu-latest, macos-latest] - experimental: [true, false] arch: [amd64] include: - os: macos-latest - experimental: false arch: arm64 runs-on: ${{ matrix.os }} steps: @@ -35,14 +33,12 @@ jobs: id: vars run: | ARCH=${{matrix.arch}} - EXPERIMENTAL=$([[ "${{ matrix.experimental }}" == "true" ]] && echo "-experimental" || echo "") TAG=$([[ "${{github.ref}}" == "refs/heads/master" ]] && echo "${{env.RELEASE_NAME}}" || echo ${{github.ref}} | sed 's#refs/tags/##') echo "arch=${ARCH}" >> $GITHUB_OUTPUT - echo "experimental=${EXPERIMENTAL}" >> $GITHUB_OUTPUT - NWAKU_ARTIFACT_NAME=$(echo "nwaku${EXPERIMENTAL}-${ARCH}-${{runner.os}}-${TAG}.tar.gz" | tr "[:upper:]" "[:lower:]") - NWAKU_TOOLS_ARTIFACT_NAME=$(echo "nwaku-tools${EXPERIMENTAL}-${ARCH}-${{runner.os}}-${TAG}.tar.gz" | tr "[:upper:]" "[:lower:]") + NWAKU_ARTIFACT_NAME=$(echo "nwaku-${ARCH}-${{runner.os}}-${TAG}.tar.gz" | tr "[:upper:]" "[:lower:]") + NWAKU_TOOLS_ARTIFACT_NAME=$(echo "nwaku-tools-${ARCH}-${{runner.os}}-${TAG}.tar.gz" | tr "[:upper:]" "[:lower:]") echo "nwaku=${NWAKU_ARTIFACT_NAME}" >> $GITHUB_OUTPUT echo "nwakutools=${NWAKU_TOOLS_ARTIFACT_NAME}" >> $GITHUB_OUTPUT @@ -53,10 +49,10 @@ jobs: run: | OS=$([[ "${{runner.os}}" == "macOS" ]] && echo "macosx" || echo "linux") - make QUICK_AND_DIRTY_COMPILER=1 V=1 CI=false EXPERIMENTAL=${{matrix.experimental}} NIMFLAGS="-d:disableMarchNative --os:${OS} --cpu:${{matrix.arch}}" \ + make QUICK_AND_DIRTY_COMPILER=1 V=1 CI=false NIMFLAGS="-d:disableMarchNative --os:${OS} --cpu:${{matrix.arch}}" \ update - make QUICK_AND_DIRTY_COMPILER=1 V=1 CI=false EXPERIMENTAL=${{matrix.experimental}} NIMFLAGS="-d:disableMarchNative --os:${OS} --cpu:${{matrix.arch}}" \ + make QUICK_AND_DIRTY_COMPILER=1 V=1 CI=false NIMFLAGS="-d:disableMarchNative --os:${OS} --cpu:${{matrix.arch}}" \ wakunode2\ chat2\ tools diff --git a/.github/workflows/release-assets.yml b/.github/workflows/release-assets.yml index 2acaecb8f0..0b75519e47 100644 --- a/.github/workflows/release-assets.yml +++ b/.github/workflows/release-assets.yml @@ -44,7 +44,7 @@ jobs: - name: prep variables id: vars run: | - NWAKU_ARTIFACT_NAME=$(echo "nwaku${EXPERIMENTAL}-${{matrix.arch}}-${{runner.os}}.tar.gz" | tr "[:upper:]" "[:lower:]") + NWAKU_ARTIFACT_NAME=$(echo "nwaku-${{matrix.arch}}-${{runner.os}}.tar.gz" | tr "[:upper:]" "[:lower:]") echo "nwaku=${NWAKU_ARTIFACT_NAME}" >> $GITHUB_OUTPUT diff --git a/Dockerfile b/Dockerfile index e9b0227c5a..46aa9c5cc2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -5,7 +5,6 @@ FROM alpine@sha256:880fafbab5a7602db21ac37f0d17088a29a9a48f98d581f01ce17312c22cc ARG NIMFLAGS ARG MAKE_TARGET=wakunode2 -ARG EXPERIMENTAL=false ARG NIM_COMMIT ARG LOG_LEVEL=TRACE @@ -22,7 +21,7 @@ RUN git submodule update --init --recursive RUN make -j$(nproc) deps QUICK_AND_DIRTY_COMPILER=1 ${NIM_COMMIT} # Build the final node binary -RUN make -j$(nproc) ${NIM_COMMIT} $MAKE_TARGET LOG_LEVEL=${LOG_LEVEL} NIMFLAGS="${NIMFLAGS}" EXPERIMENTAL="${EXPERIMENTAL}" +RUN make -j$(nproc) ${NIM_COMMIT} $MAKE_TARGET LOG_LEVEL=${LOG_LEVEL} NIMFLAGS="${NIMFLAGS}" # PRODUCTION IMAGE ------------------------------------------------------------- diff --git a/Makefile b/Makefile index c4ce0e9060..3e62390e80 100644 --- a/Makefile +++ b/Makefile @@ -110,19 +110,10 @@ clean: | clean-libbacktrace ################## -## Experimental ## +## RLN ## ################## .PHONY: librln -EXPERIMENTAL ?= false -EXPERIMENTAL_PARAMS ?= $(EMPTY) - -ifeq ($(EXPERIMENTAL), true) -RLN := true -endif - -### RLN - LIBRLN_BUILDDIR := $(CURDIR)/vendor/zerokit ifeq ($(OS),Windows_NT) @@ -135,14 +126,9 @@ $(LIBRLN_FILE): echo -e $(BUILD_MSG) "$@" && \ ./scripts/build_rln.sh $(LIBRLN_BUILDDIR) -librln-experimental: | $(LIBRLN_FILE) - $(eval EXPERIMENTAL_PARAMS += -d:rln --passL:$(LIBRLN_FILE) --passL:-lm) -ifneq ($(RLN), true) -librln: ; # noop -else -librln: | librln-experimental -endif +librln: | $(LIBRLN_FILE) + $(eval NIM_PARAMS += --passL:$(LIBRLN_FILE) --passL:-lm) clean-librln: cargo clean --manifest-path vendor/zerokit/rln/Cargo.toml @@ -169,33 +155,33 @@ testcommon: | build deps testwaku: | build deps librln echo -e $(BUILD_MSG) "build/$@" && \ - $(ENV_SCRIPT) nim test -d:os=$(shell uname) $(NIM_PARAMS) $(EXPERIMENTAL_PARAMS) waku.nims + $(ENV_SCRIPT) nim test -d:os=$(shell uname) $(NIM_PARAMS) waku.nims wakunode2: | build deps librln echo -e $(BUILD_MSG) "build/$@" && \ - $(ENV_SCRIPT) nim wakunode2 $(NIM_PARAMS) $(EXPERIMENTAL_PARAMS) waku.nims + $(ENV_SCRIPT) nim wakunode2 $(NIM_PARAMS) waku.nims testwakunode2: | build deps librln echo -e $(BUILD_MSG) "build/$@" && \ - $(ENV_SCRIPT) nim testwakunode2 $(NIM_PARAMS) $(EXPERIMENTAL_PARAMS) waku.nims + $(ENV_SCRIPT) nim testwakunode2 $(NIM_PARAMS) waku.nims -example2: | build deps +example2: | build deps librln echo -e $(BUILD_MSG) "build/$@" && \ $(ENV_SCRIPT) nim example2 $(NIM_PARAMS) waku.nims chat2: | build deps librln echo -e $(BUILD_MSG) "build/$@" && \ - $(ENV_SCRIPT) nim chat2 $(NIM_PARAMS) $(EXPERIMENTAL_PARAMS) waku.nims + $(ENV_SCRIPT) nim chat2 $(NIM_PARAMS) waku.nims -rln-keystore-generator: | build deps librln-experimental +rln-keystore-generator: | build deps librln echo -e $(BUILD_MSG) "build/$@" && \ - $(ENV_SCRIPT) nim rln_keystore_generator $(NIM_PARAMS) $(EXPERIMENTAL_PARAMS) waku.nims + $(ENV_SCRIPT) nim rln_keystore_generator $(NIM_PARAMS) waku.nims -rln-db-inspector: | build deps librln-experimental +rln-db-inspector: | build deps librln echo -e $(BUILD_MSG) "build/$@" && \ - $(ENV_SCRIPT) nim rln_db_inspector $(NIM_PARAMS) $(EXPERIMENTAL_PARAMS) waku.nims + $(ENV_SCRIPT) nim rln_db_inspector $(NIM_PARAMS) waku.nims -chat2bridge: | build deps +chat2bridge: | build deps librln echo -e $(BUILD_MSG) "build/$@" && \ $(ENV_SCRIPT) nim chat2bridge $(NIM_PARAMS) waku.nims @@ -207,11 +193,11 @@ chat2bridge: | build deps tools: networkmonitor wakucanary -wakucanary: | build deps +wakucanary: | build deps librln echo -e $(BUILD_MSG) "build/$@" && \ $(ENV_SCRIPT) nim wakucanary $(NIM_PARAMS) waku.nims -networkmonitor: | build deps +networkmonitor: | build deps librln echo -e $(BUILD_MSG) "build/$@" && \ $(ENV_SCRIPT) nim networkmonitor $(NIM_PARAMS) waku.nims @@ -243,7 +229,6 @@ docker-image: docker build \ --build-arg="MAKE_TARGET=$(MAKE_TARGET)" \ --build-arg="NIMFLAGS=$(DOCKER_IMAGE_NIMFLAGS)" \ - --build-arg="EXPERIMENTAL=$(EXPERIMENTAL)" \ --build-arg="NIM_COMMIT=$(DOCKER_NIM_COMMIT)" \ --build-arg="LOG_LEVEL=$(LOG_LEVEL)" \ --label="commit=$(GIT_VERSION)" \ @@ -265,10 +250,10 @@ libwaku: | build deps rm -f build/libwaku* ifeq ($(STATIC), true) echo -e $(BUILD_MSG) "build/$@.a" && \ - $(ENV_SCRIPT) nim libwakuStatic $(NIM_PARAMS) $(EXPERIMENTAL_PARAMS) waku.nims + $(ENV_SCRIPT) nim libwakuStatic $(NIM_PARAMS) waku.nims else echo -e $(BUILD_MSG) "build/$@.so" && \ - $(ENV_SCRIPT) nim libwakuDynamic $(NIM_PARAMS) $(EXPERIMENTAL_PARAMS) waku.nims + $(ENV_SCRIPT) nim libwakuDynamic $(NIM_PARAMS) waku.nims endif cwaku_example: | build libwaku diff --git a/apps/chat2/chat2.nim b/apps/chat2/chat2.nim index 2aaa594f99..d7ebb3a916 100644 --- a/apps/chat2/chat2.nim +++ b/apps/chat2/chat2.nim @@ -38,12 +38,11 @@ import ../../waku/common/utils/nat, ./config_chat2 -when defined(rln): - import - libp2p/protocols/pubsub/rpc/messages, - libp2p/protocols/pubsub/pubsub - import - ../../waku/waku_rln_relay +import + libp2p/protocols/pubsub/rpc/messages, + libp2p/protocols/pubsub/pubsub +import + ../../waku/waku_rln_relay const Help = """ Commands: /[?|help|connect|nick|exit] @@ -187,28 +186,27 @@ proc publish(c: Chat, line: string) = var message = WakuMessage(payload: chat2pb.buffer, contentTopic: c.contentTopic, version: 0, timestamp: getNanosecondTime(time)) - when defined(rln): - if not isNil(c.node.wakuRlnRelay): - # for future version when we support more than one rln protected content topic, - # we should check the message content topic as well - let success = c.node.wakuRlnRelay.appendRLNProof(message, float64(time)) - if not success: - debug "could not append rate limit proof to the message", success=success + if not isNil(c.node.wakuRlnRelay): + # for future version when we support more than one rln protected content topic, + # we should check the message content topic as well + let success = c.node.wakuRlnRelay.appendRLNProof(message, float64(time)) + if not success: + debug "could not append rate limit proof to the message", success=success + else: + debug "rate limit proof is appended to the message", success=success + let decodeRes = RateLimitProof.init(message.proof) + if decodeRes.isErr(): + error "could not decode the RLN proof" + + let proof = decodeRes.get() + # TODO move it to log after dogfooding + let msgEpoch = fromEpoch(proof.epoch) + if fromEpoch(c.node.wakuRlnRelay.lastEpoch) == msgEpoch: + echo "--rln epoch: ", msgEpoch, " ⚠️ message rate violation! you are spamming the network!" else: - debug "rate limit proof is appended to the message", success=success - let decodeRes = RateLimitProof.init(message.proof) - if decodeRes.isErr(): - error "could not decode the RLN proof" - - let proof = decodeRes.get() - # TODO move it to log after dogfooding - let msgEpoch = fromEpoch(proof.epoch) - if fromEpoch(c.node.wakuRlnRelay.lastEpoch) == msgEpoch: - echo "--rln epoch: ", msgEpoch, " ⚠️ message rate violation! you are spamming the network!" - else: - echo "--rln epoch: ", msgEpoch - # update the last epoch - c.node.wakuRlnRelay.lastEpoch = proof.epoch + echo "--rln epoch: ", msgEpoch + # update the last epoch + c.node.wakuRlnRelay.lastEpoch = proof.epoch if not c.node.wakuLightPush.isNil(): # Attempt lightpush @@ -489,44 +487,40 @@ proc processInput(rfd: AsyncFD, rng: ref HmacDrbgContext) {.async.} = let topic = DefaultPubsubTopic await node.subscribe(some(topic), @[ContentTopic("")], handler) - when defined(rln): - if conf.rlnRelay: - info "WakuRLNRelay is enabled" - - proc spamHandler(wakuMessage: WakuMessage) {.gcsafe, closure.} = - debug "spam handler is called" - let chatLineResult = chat.getChatLine(wakuMessage) - if chatLineResult.isOk(): - echo "A spam message is found and discarded : ", chatLineResult.value - else: - echo "A spam message is found and discarded" - chat.prompt = false - showChatPrompt(chat) - - echo "rln-relay preparation is in progress..." - - let rlnConf = WakuRlnConfig( - rlnRelayDynamic: conf.rlnRelayDynamic, - rlnRelayCredIndex: conf.rlnRelayCredIndex, - rlnRelayEthContractAddress: conf.rlnRelayEthContractAddress, - rlnRelayEthClientAddress: conf.rlnRelayEthClientAddress, - rlnRelayCredPath: conf.rlnRelayCredPath, - rlnRelayCredPassword: conf.rlnRelayCredPassword - ) - - waitFor node.mountRlnRelay(rlnConf, - spamHandler=some(spamHandler)) - - let membershipIndex = node.wakuRlnRelay.groupManager.membershipIndex.get() - let identityCredential = node.wakuRlnRelay.groupManager.idCredentials.get() - echo "your membership index is: ", membershipIndex - echo "your rln identity trapdoor is: ", identityCredential.idTrapdoor.inHex() - echo "your rln identity nullifier is: ", identityCredential.idNullifier.inHex() - echo "your rln identity secret hash is: ", identityCredential.idSecretHash.inHex() - echo "your rln identity commitment key is: ", identityCredential.idCommitment.inHex() + if conf.rlnRelay: + info "WakuRLNRelay is enabled" + + proc spamHandler(wakuMessage: WakuMessage) {.gcsafe, closure.} = + debug "spam handler is called" + let chatLineResult = chat.getChatLine(wakuMessage) + if chatLineResult.isOk(): + echo "A spam message is found and discarded : ", chatLineResult.value + else: + echo "A spam message is found and discarded" + chat.prompt = false + showChatPrompt(chat) + + echo "rln-relay preparation is in progress..." + + let rlnConf = WakuRlnConfig( + rlnRelayDynamic: conf.rlnRelayDynamic, + rlnRelayCredIndex: conf.rlnRelayCredIndex, + rlnRelayEthContractAddress: conf.rlnRelayEthContractAddress, + rlnRelayEthClientAddress: conf.rlnRelayEthClientAddress, + rlnRelayCredPath: conf.rlnRelayCredPath, + rlnRelayCredPassword: conf.rlnRelayCredPassword + ) + + waitFor node.mountRlnRelay(rlnConf, + spamHandler=some(spamHandler)) + + let membershipIndex = node.wakuRlnRelay.groupManager.membershipIndex.get() + let identityCredential = node.wakuRlnRelay.groupManager.idCredentials.get() + echo "your membership index is: ", membershipIndex + echo "your rln identity commitment key is: ", identityCredential.idCommitment.inHex() else: info "WakuRLNRelay is disabled" - echo "WakuRLNRelay is disabled, please enable it by compiling with the RLN/EXPERIMENTAL flag" + echo "WakuRLNRelay is disabled, please enable it by passing in the --rln-relay flag" if conf.metricsLogging: startMetricsLog() diff --git a/apps/wakunode2/app.nim b/apps/wakunode2/app.nim index 5dfbc1fe39..c976e7de44 100644 --- a/apps/wakunode2/app.nim +++ b/apps/wakunode2/app.nim @@ -33,6 +33,7 @@ import ../../waku/waku_enr, ../../waku/waku_discv5, ../../waku/waku_peer_exchange, + ../../waku/waku_rln_relay, ../../waku/waku_store, ../../waku/waku_lightpush, ../../waku/waku_filter, @@ -54,9 +55,6 @@ import ../../waku/node/jsonrpc/relay/handlers as rpc_relay_api, ../../waku/node/jsonrpc/store/handlers as rpc_store_api -when defined(rln): - import ../../waku/waku_rln_relay - logScope: topics = "wakunode app" @@ -392,23 +390,22 @@ proc setupProtocols(node: WakuNode, except CatchableError: return err("failed to mount libp2p ping protocol: " & getCurrentExceptionMsg()) - when defined(rln): - if conf.rlnRelay: - - let rlnConf = WakuRlnConfig( - rlnRelayDynamic: conf.rlnRelayDynamic, - rlnRelayCredIndex: conf.rlnRelayCredIndex, - rlnRelayEthContractAddress: conf.rlnRelayEthContractAddress, - rlnRelayEthClientAddress: conf.rlnRelayEthClientAddress, - rlnRelayCredPath: conf.rlnRelayCredPath, - rlnRelayCredPassword: conf.rlnRelayCredPassword, - rlnRelayTreePath: conf.rlnRelayTreePath, - ) - - try: - waitFor node.mountRlnRelay(rlnConf) - except CatchableError: - return err("failed to mount waku RLN relay protocol: " & getCurrentExceptionMsg()) + if conf.rlnRelay: + + let rlnConf = WakuRlnConfig( + rlnRelayDynamic: conf.rlnRelayDynamic, + rlnRelayCredIndex: conf.rlnRelayCredIndex, + rlnRelayEthContractAddress: conf.rlnRelayEthContractAddress, + rlnRelayEthClientAddress: conf.rlnRelayEthClientAddress, + rlnRelayCredPath: conf.rlnRelayCredPath, + rlnRelayCredPassword: conf.rlnRelayCredPassword, + rlnRelayTreePath: conf.rlnRelayTreePath, + ) + + try: + waitFor node.mountRlnRelay(rlnConf) + except CatchableError: + return err("failed to mount waku RLN relay protocol: " & getCurrentExceptionMsg()) if conf.store: var onErrAction = proc(msg: string) {.gcsafe, closure.} = diff --git a/ci/Jenkinsfile.prs b/ci/Jenkinsfile.prs index e775f96b92..1a0583f90a 100644 --- a/ci/Jenkinsfile.prs +++ b/ci/Jenkinsfile.prs @@ -29,11 +29,6 @@ pipeline { description: 'Makefile flags.', defaultValue: params.MAKEFLAGS ?: '-j6' ) - booleanParam( - name: 'EXPERIMENTAL', - description: 'Enable experimental features.', - defaultValue: false - ) } options { @@ -66,7 +61,7 @@ pipeline { stage('V2') { when { expression { v2changed } } steps { script { - nix.shell("make ${params.MAKEFLAGS} NIMFLAGS=\"${params.NIMFLAGS}\" V=${params.VERBOSITY} EXPERIMENTAL=${params.EXPERIMENTAL} all") + nix.shell("make ${params.MAKEFLAGS} NIMFLAGS=\"${params.NIMFLAGS}\" V=${params.VERBOSITY} all") } } } } @@ -77,7 +72,7 @@ pipeline { stage('V2') { when { expression { v2changed } } steps { script { - nix.shell("make ${params.MAKEFLAGS} NIMFLAGS=\"${params.NIMFLAGS}\" V=${params.VERBOSITY} EXPERIMENTAL=${params.EXPERIMENTAL} test") + nix.shell("make ${params.MAKEFLAGS} NIMFLAGS=\"${params.NIMFLAGS}\" V=${params.VERBOSITY} test") } } } } diff --git a/ci/Jenkinsfile.release b/ci/Jenkinsfile.release index 512a162802..819de1a166 100644 --- a/ci/Jenkinsfile.release +++ b/ci/Jenkinsfile.release @@ -40,11 +40,6 @@ pipeline { name: "LOG_LEVEL", description: "Chronicles log level (default: TRACE)", ) - booleanParam( - name: 'EXPERIMENTAL', - description: 'Enable experimental features.', - defaultValue: false - ) booleanParam( name: 'DEBUG', description: 'Enable debug features (heaptrack).', @@ -56,11 +51,10 @@ pipeline { stage('Build') { steps { script { image = docker.build( - "${params.IMAGE_NAME}:${env.GIT_COMMIT.take(8)}" + (params.EXPERIMENTAL ? "-experimental": ""), + "${params.IMAGE_NAME}:${env.GIT_COMMIT.take(8)}", "--label=commit='${env.GIT_COMMIT.take(8)}' " + "--build-arg=MAKE_TARGET='${params.MAKE_TARGET}' " + "--build-arg=NIMFLAGS='${params.NIMFLAGS}' " + - "--build-arg=EXPERIMENTAL='${params.EXPERIMENTAL}' " + (params.LOG_LEVEL != null ? "--build-arg=LOG_LEVEL='${params.LOG_LEVEL}' ": "") + "--target=${params.DEBUG ? "debug" : "prod"} ." ) diff --git a/docs/operators/how-to/run-with-rln.md b/docs/operators/how-to/run-with-rln.md index 570131740e..7804b59668 100644 --- a/docs/operators/how-to/run-with-rln.md +++ b/docs/operators/how-to/run-with-rln.md @@ -21,21 +21,13 @@ You may alter the rln-specific arguments as required. > Note: If you would like to run a nwaku node with RLN enabled within a docker container, skip ahead to step 2. -## 1. Update the build command +## 1. Build wakunode2 -_Instead_ of just running - +Run - ```bash make wakunode2 ``` -Run the following command - -```bash -make wakunode2 RLN=true -``` - -The `RLN=true` flag will enable compilation of the waku-rln-relay protocol -into your wakunode2 binary. - ## 2. Update the runtime arguments Follow [Step 10](../droplet-quickstart.md#10-run-nwaku) of the [droplet quickstart](../droplet-quickstart.md) guide, while replacing the run command with - diff --git a/docs/tutorial/onchain-rln-relay-chat2.md b/docs/tutorial/onchain-rln-relay-chat2.md index 69b3e12b82..0d2e8741de 100644 --- a/docs/tutorial/onchain-rln-relay-chat2.md +++ b/docs/tutorial/onchain-rln-relay-chat2.md @@ -30,10 +30,10 @@ You can test it by connecting two chat2 clients (running Waku-RLN-Relay) directl # Set up ## Build chat2 -First, build chat2 with the RLN flag set to true. +First, build chat2 ```bash -make chat2 RLN=true +make chat2 ``` ## Set up a chat2 client diff --git a/docs/tutorial/rln-chat2-live-testnet.md b/docs/tutorial/rln-chat2-live-testnet.md index 6094e832b0..8dfc853086 100644 --- a/docs/tutorial/rln-chat2-live-testnet.md +++ b/docs/tutorial/rln-chat2-live-testnet.md @@ -13,10 +13,10 @@ Your samp activity will be detected by them and a proper message will be shown o # Set up ## Build chat2 -First, build chat2 with the RLN flag set to true. +First, build chat2 ``` -make chat2 RLN=true +make chat2 ``` ## Setup a chat2 node in rate-limited mode @@ -123,21 +123,3 @@ Connecting to storenode: 16Uiu2HAmPLe7Mzm8TsYUubgCAW1aJoeFScxrLj8ppHFivPo97bUZ >> /exit quitting... ``` - -# Trouble shooting - -## compilation error: found possibly newer version of crate - - -If running `make chat2 RLN=true` yields a compile error like this - -``` -error[E0460]: found possibly newer version of crate `std` which `sapling_crypto_ce` depends on - --> src/circuit/polynomial.rs:1:5 - | -1 | use sapling_crypto::bellman::pairing::ff::{Field, PrimeField, PrimeFieldRepr}; -``` - -run - -`make cleanrln` before running `make chat2 RLN=true` again. diff --git a/docs/tutorial/rln-chat2-local-test.md b/docs/tutorial/rln-chat2-local-test.md index 7e3e1d37ee..f5d4bdb80e 100644 --- a/docs/tutorial/rln-chat2-local-test.md +++ b/docs/tutorial/rln-chat2-local-test.md @@ -12,10 +12,10 @@ You can inspect its current value by checking the following [constant variable]( # Set up ## Build chat2 -First, build chat2 with the RLN flag set to true. +First, build chat2 ``` -make chat2 RLN=true +make chat2 ``` ## Create a local network of chat2 clients diff --git a/tests/all_tests_waku.nim b/tests/all_tests_waku.nim index d5ed750522..3c21bba778 100644 --- a/tests/all_tests_waku.nim +++ b/tests/all_tests_waku.nim @@ -94,13 +94,9 @@ import ./wakunode_rest/test_rest_serdes, ./wakunode_rest/test_rest_store - -## Experimental - -when defined(rln): - import - ./waku_rln_relay/test_waku_rln_relay, - ./waku_rln_relay/test_wakunode_rln_relay, - ./waku_rln_relay/test_rln_group_manager_onchain, - ./waku_rln_relay/test_rln_group_manager_static, - ./wakunode_rest/test_rest_health +import + ./waku_rln_relay/test_waku_rln_relay, + ./waku_rln_relay/test_wakunode_rln_relay, + ./waku_rln_relay/test_rln_group_manager_onchain, + ./waku_rln_relay/test_rln_group_manager_static, + ./wakunode_rest/test_rest_health diff --git a/tests/wakunode_jsonrpc/test_jsonrpc_relay.nim b/tests/wakunode_jsonrpc/test_jsonrpc_relay.nim index 919b4d0061..016b716135 100644 --- a/tests/wakunode_jsonrpc/test_jsonrpc_relay.nim +++ b/tests/wakunode_jsonrpc/test_jsonrpc_relay.nim @@ -17,15 +17,11 @@ import ../../../waku/node/jsonrpc/relay/client as relay_api_client, ../../../waku/waku_core, ../../../waku/waku_relay, + ../../../waku/waku_rln_relay, ../testlib/common, ../testlib/wakucore, ../testlib/wakunode -when defined(rln): - import - ../../../waku/waku_rln_relay - - proc newTestMessageCache(): relay_api.MessageCache = relay_api.MessageCache.init(capacity=30) @@ -104,14 +100,13 @@ suite "Waku v2 JSON-RPC API - Relay": await srcNode.mountRelay(@[pubSubTopic]) await dstNode.mountRelay(@[pubSubTopic]) - when defined(rln): - await srcNode.mountRlnRelay(WakuRlnConfig(rlnRelayDynamic: false, - rlnRelayCredIndex: some(1.uint), - rlnRelayTreePath: genTempPath("rln_tree", "wakunode_1"))) + await srcNode.mountRlnRelay(WakuRlnConfig(rlnRelayDynamic: false, + rlnRelayCredIndex: some(1.uint), + rlnRelayTreePath: genTempPath("rln_tree", "wakunode_1"))) - await dstNode.mountRlnRelay(WakuRlnConfig(rlnRelayDynamic: false, - rlnRelayCredIndex: some(2.uint), - rlnRelayTreePath: genTempPath("rln_tree", "wakunode_2"))) + await dstNode.mountRlnRelay(WakuRlnConfig(rlnRelayDynamic: false, + rlnRelayCredIndex: some(2.uint), + rlnRelayTreePath: genTempPath("rln_tree", "wakunode_2"))) await srcNode.connectToNodes(@[dstNode.peerInfo.toRemotePeerInfo()]) @@ -155,8 +150,7 @@ suite "Waku v2 JSON-RPC API - Relay": var (topic, msg) = dstHandlerFut.read() # proof is injected under the hood, we compare just the message - when defined(rln): - msg.proof = @[] + msg.proof = @[] check: topic == pubSubTopic diff --git a/tests/wakunode_rest/test_rest_health.nim b/tests/wakunode_rest/test_rest_health.nim index 46b2ea75b2..8d13cc6442 100644 --- a/tests/wakunode_rest/test_rest_health.nim +++ b/tests/wakunode_rest/test_rest_health.nim @@ -19,6 +19,7 @@ import ../../waku/node/rest/health/client as health_api_client, ../../waku/waku_rln_relay, ../testlib/common, + ../testlib/testutils, ../testlib/wakucore, ../testlib/wakunode @@ -34,7 +35,8 @@ proc testWakuNode(): WakuNode = suite "Waku v2 REST API - health": - asyncTest "Get node health info - GET /health": + # TODO: better test for health + xasyncTest "Get node health info - GET /health": # Given let node = testWakuNode() await node.start() diff --git a/tests/wakunode_rest/test_rest_relay.nim b/tests/wakunode_rest/test_rest_relay.nim index e59fb68996..75d111e474 100644 --- a/tests/wakunode_rest/test_rest_relay.nim +++ b/tests/wakunode_rest/test_rest_relay.nim @@ -19,13 +19,10 @@ import ../../waku/node/rest/relay/client as relay_api_client, ../../waku/node/rest/relay/topic_cache, ../../waku/waku_relay, + ../../../waku/waku_rln_relay, ../testlib/wakucore, ../testlib/wakunode -when defined(rln): - import - ../../../waku/waku_rln_relay - proc testWakuNode(): WakuNode = let privkey = generateSecp256k1Key() @@ -186,10 +183,9 @@ suite "Waku v2 Rest API - Relay": let node = testWakuNode() await node.start() await node.mountRelay() - when defined(rln): - await node.mountRlnRelay(WakuRlnConfig(rlnRelayDynamic: false, - rlnRelayCredIndex: some(1.uint), - rlnRelayTreePath: genTempPath("rln_tree", "wakunode_1"))) + await node.mountRlnRelay(WakuRlnConfig(rlnRelayDynamic: false, + rlnRelayCredIndex: some(1.uint), + rlnRelayTreePath: genTempPath("rln_tree", "wakunode_1"))) # RPC server setup let restPort = Port(58014) diff --git a/waku/node/jsonrpc/relay/handlers.nim b/waku/node/jsonrpc/relay/handlers.nim index 38e08c1d03..4329a990ad 100644 --- a/waku/node/jsonrpc/relay/handlers.nim +++ b/waku/node/jsonrpc/relay/handlers.nim @@ -13,6 +13,8 @@ import ../../../common/base64, ../../../waku_core, ../../../waku_relay, + ../../../waku_rln_relay, + ../../../waku_rln_relay/rln/wrappers, ../../waku_node, ../../message_cache, ../message @@ -20,10 +22,6 @@ import from std/times import getTime from std/times import toUnix -when defined(rln): - import - ../../../waku_rln_relay, - ../../../waku_rln_relay/rln/wrappers logScope: topics = "waku node jsonrpc relay_api" @@ -101,28 +99,25 @@ proc installRelayApiHandlers*(node: WakuNode, server: RpcServer, cache: MessageC raise newException(ValueError, "Failed to publish: Node not subscribed to pubsubTopic: " & pubsubTopic) # if RLN is mounted, append the proof to the message - when defined(rln): - if not node.wakuRlnRelay.isNil(): - # append the proof to the message - let success = node.wakuRlnRelay.appendRLNProof(message, - float64(getTime().toUnix())) - if not success: - raise newException(ValueError, "Failed to publish: error appending RLN proof to message") - # validate the message before sending it - let result = node.wakuRlnRelay.validateMessage(message) - if result == MessageValidationResult.Invalid: - raise newException(ValueError, "Failed to publish: invalid RLN proof") - elif result == MessageValidationResult.Spam: - raise newException(ValueError, "Failed to publish: limit exceeded, try again later") - elif result == MessageValidationResult.Valid: - debug "RLN proof validated successfully", pubSubTopic=pubSubTopic - else: - raise newException(ValueError, "Failed to publish: unknown RLN proof validation result") + if not node.wakuRlnRelay.isNil(): + # append the proof to the message + let success = node.wakuRlnRelay.appendRLNProof(message, + float64(getTime().toUnix())) + if not success: + raise newException(ValueError, "Failed to publish: error appending RLN proof to message") + # validate the message before sending it + let result = node.wakuRlnRelay.validateMessage(message) + if result == MessageValidationResult.Invalid: + raise newException(ValueError, "Failed to publish: invalid RLN proof") + elif result == MessageValidationResult.Spam: + raise newException(ValueError, "Failed to publish: limit exceeded, try again later") + elif result == MessageValidationResult.Valid: + debug "RLN proof validated successfully", pubSubTopic=pubSubTopic else: - raise newException(ValueError, "Failed to publish: RLN enabled but not mounted") + raise newException(ValueError, "Failed to publish: unknown RLN proof validation result") # if we reach here its either a non-RLN message or a RLN message with a valid proof - debug "Publishing message", pubSubTopic=pubSubTopic, rln=defined(rln) + debug "Publishing message", pubSubTopic=pubSubTopic let publishFut = node.publish(pubsubTopic, message) if not await publishFut.withTimeout(futTimeout): raise newException(ValueError, "Failed to publish: timed out") diff --git a/waku/node/rest/relay/handlers.nim b/waku/node/rest/relay/handlers.nim index 586040100b..68647de769 100644 --- a/waku/node/rest/relay/handlers.nim +++ b/waku/node/rest/relay/handlers.nim @@ -14,6 +14,8 @@ import import ../../waku_node, ../../../waku_relay/protocol, + ../../../waku_rln_relay, + ../../../waku_rln_relay/rln/wrappers, ../serdes, ../responses, ./types, @@ -22,10 +24,6 @@ import from std/times import getTime from std/times import toUnix -when defined(rln): - import - ../../../waku_rln_relay, - ../../../waku_rln_relay/rln/wrappers export types @@ -161,29 +159,26 @@ proc installRelayPostMessagesV1Handler*(router: var RestRouter, node: WakuNode) var message = resMessage.get() # if RLN is mounted, append the proof to the message - when defined(rln): - if not node.wakuRlnRelay.isNil(): - # append the proof to the message - let success = node.wakuRlnRelay.appendRLNProof(message, - float64(getTime().toUnix())) - if not success: - return RestApiResponse.internalServerError("Failed to publish: error appending RLN proof to message") - - # validate the message before sending it - let result = node.wakuRlnRelay.validateMessage(message) - if result == MessageValidationResult.Invalid: - return RestApiResponse.internalServerError("Failed to publish: invalid RLN proof") - elif result == MessageValidationResult.Spam: - return RestApiResponse.badRequest("Failed to publish: limit exceeded, try again later") - elif result == MessageValidationResult.Valid: - debug "RLN proof validated successfully", pubSubTopic=pubSubTopic - else: - return RestApiResponse.internalServerError("Failed to publish: unknown RLN proof validation result") + if not node.wakuRlnRelay.isNil(): + # append the proof to the message + let success = node.wakuRlnRelay.appendRLNProof(message, + float64(getTime().toUnix())) + if not success: + return RestApiResponse.internalServerError("Failed to publish: error appending RLN proof to message") + + # validate the message before sending it + let result = node.wakuRlnRelay.validateMessage(message) + if result == MessageValidationResult.Invalid: + return RestApiResponse.internalServerError("Failed to publish: invalid RLN proof") + elif result == MessageValidationResult.Spam: + return RestApiResponse.badRequest("Failed to publish: limit exceeded, try again later") + elif result == MessageValidationResult.Valid: + debug "RLN proof validated successfully", pubSubTopic=pubSubTopic else: - return RestApiResponse.internalServerError("Failed to publish: RLN enabled but not mounted") + return RestApiResponse.internalServerError("Failed to publish: unknown RLN proof validation result") # if we reach here its either a non-RLN message or a RLN message with a valid proof - debug "Publishing message", pubSubTopic=pubSubTopic, rln=defined(rln) + debug "Publishing message", pubSubTopic=pubSubTopic if not (waitFor node.publish(pubSubTopic, resMessage.value).withTimeout(futTimeout)): error "Failed to publish message to topic", pubSubTopic=pubSubTopic return RestApiResponse.internalServerError("Failed to publish: timedout") diff --git a/waku/node/waku_metrics.nim b/waku/node/waku_metrics.nim index 9e857fa3e0..93c98ba576 100644 --- a/waku/node/waku_metrics.nim +++ b/waku/node/waku_metrics.nim @@ -10,14 +10,12 @@ import metrics/chronos_httpserver import ../waku_filter/protocol_metrics as filter_metrics, + ../waku_rln_relay/protocol_metrics as rln_metrics, + ../utils/collector, ./peer_manager, ./waku_node -when defined(rln): - import ../waku_rln_relay/protocol_metrics as rln_metrics - - const LogInterval = 30.seconds logScope: @@ -34,8 +32,7 @@ proc startMetricsLog*() = var cumulativeErrors = 0.float64 var cumulativeConns = 0.float64 - when defined(rln): - let logRlnMetrics = getRlnMetricsLogger() + let logRlnMetrics = getRlnMetricsLogger() logMetrics = proc(udata: pointer) = {.gcsafe.}: @@ -63,8 +60,7 @@ proc startMetricsLog*() = info "Total errors", count = $freshErrorCount # Start protocol specific metrics logging - when defined(rln): - logRlnMetrics() + logRlnMetrics() discard setTimer(Moment.fromNow(LogInterval), logMetrics) diff --git a/waku/node/waku_node.nim b/waku/node/waku_node.nim index 131cc64bbb..5d9aa54e93 100644 --- a/waku/node/waku_node.nim +++ b/waku/node/waku_node.nim @@ -38,13 +38,11 @@ import ../waku_enr, ../waku_dnsdisc, ../waku_peer_exchange, + ../waku_rln_relay, ./config, ./peer_manager, ./waku_switch -when defined(rln): - import - ../waku_rln_relay declarePublicCounter waku_node_messages, "number of messages received", ["type"] declarePublicHistogram waku_histogram_message_size, "message size histogram in kB", @@ -92,8 +90,7 @@ type wakuFilter*: waku_filter_v2.WakuFilter wakuFilterLegacy*: legacy_filter.WakuFilterLegacy #TODO: support for legacy filter protocol will be removed wakuFilterClientLegacy*: WakuFilterClientLegacy #TODO: support for legacy filter protocol will be removed - when defined(rln): - wakuRlnRelay*: WakuRLNRelay + wakuRlnRelay*: WakuRLNRelay wakuLightPush*: WakuLightPush wakuLightpushClient*: WakuLightPushClient wakuPeerExchange*: WakuPeerExchange @@ -729,28 +726,27 @@ proc lightpushPublish*(node: WakuNode, pubsubTopic: Option[PubsubTopic], message ## Waku RLN Relay -when defined(rln): - proc mountRlnRelay*(node: WakuNode, - rlnConf: WakuRlnConfig, - spamHandler = none(SpamHandler), - registrationHandler = none(RegistrationHandler)) {.async.} = - info "mounting rln relay" - - if node.wakuRelay.isNil(): - raise newException(CatchableError, "WakuRelay protocol is not mounted, cannot mount WakuRlnRelay") - - let rlnRelayRes = waitFor WakuRlnRelay.new(rlnConf, - registrationHandler) - if rlnRelayRes.isErr(): - raise newException(CatchableError, "failed to mount WakuRlnRelay: " & rlnRelayRes.error) - let rlnRelay = rlnRelayRes.get() - let validator = generateRlnValidator(rlnRelay, spamHandler) - - # register rln validator for all subscribed relay pubsub topics - for pubsubTopic in node.wakuRelay.subscribedTopics: - debug "Registering RLN validator for topic", pubsubTopic=pubsubTopic - node.wakuRelay.addValidator(pubsubTopic, validator) - node.wakuRlnRelay = rlnRelay +proc mountRlnRelay*(node: WakuNode, + rlnConf: WakuRlnConfig, + spamHandler = none(SpamHandler), + registrationHandler = none(RegistrationHandler)) {.async.} = + info "mounting rln relay" + + if node.wakuRelay.isNil(): + raise newException(CatchableError, "WakuRelay protocol is not mounted, cannot mount WakuRlnRelay") + + let rlnRelayRes = waitFor WakuRlnRelay.new(rlnConf, + registrationHandler) + if rlnRelayRes.isErr(): + raise newException(CatchableError, "failed to mount WakuRlnRelay: " & rlnRelayRes.error) + let rlnRelay = rlnRelayRes.get() + let validator = generateRlnValidator(rlnRelay, spamHandler) + + # register rln validator for all subscribed relay pubsub topics + for pubsubTopic in node.wakuRelay.subscribedTopics: + debug "Registering RLN validator for topic", pubsubTopic=pubsubTopic + node.wakuRelay.addValidator(pubsubTopic, validator) + node.wakuRlnRelay = rlnRelay ## Waku peer-exchange @@ -898,16 +894,13 @@ proc stop*(node: WakuNode) {.async.} = await node.switch.stop() node.peerManager.stop() - when defined(rln): - if not node.wakuRlnRelay.isNil(): - await node.wakuRlnRelay.stop() + if not node.wakuRlnRelay.isNil(): + await node.wakuRlnRelay.stop() node.started = false proc isReady*(node: WakuNode): Future[bool] {.async.} = - when defined(rln): - if node.wakuRlnRelay == nil: - return false - return await node.wakuRlnRelay.isReady() + if node.wakuRlnRelay == nil: + return true + return await node.wakuRlnRelay.isReady() ## TODO: add other protocol `isReady` checks - return true diff --git a/waku/waku_core/message/codec.nim b/waku/waku_core/message/codec.nim index 1e92535e77..51a2604982 100644 --- a/waku/waku_core/message/codec.nim +++ b/waku/waku_core/message/codec.nim @@ -23,8 +23,7 @@ proc encode*(message: WakuMessage): ProtoBuffer = buf.write3(3, message.version) buf.write3(10, zint64(message.timestamp)) buf.write3(11, message.meta) - when defined(rln): - buf.write3(21, message.proof) + buf.write3(21, message.proof) buf.write3(31, message.ephemeral) buf.finish3() @@ -74,13 +73,12 @@ proc decode*(T: type WakuMessage, buffer: seq[byte]): ProtobufResult[T] = msg.meta = meta - # Experimental: this is part of https://rfc.vac.dev/spec/17/ spec - when defined(rln): - var proof: seq[byte] - if not ?pb.getField(21, proof): - msg.proof = @[] - else: - msg.proof = proof + # this is part of https://rfc.vac.dev/spec/17/ spec + var proof: seq[byte] + if not ?pb.getField(21, proof): + msg.proof = @[] + else: + msg.proof = proof var ephemeral: uint diff --git a/waku/waku_core/message/message.nim b/waku/waku_core/message/message.nim index d42c45a3a9..fa79d7fcc4 100644 --- a/waku/waku_core/message/message.nim +++ b/waku/waku_core/message/message.nim @@ -34,8 +34,7 @@ type WakuMessage* = object # The ephemeral attribute indicates signifies the transient nature of the # message (if the message should be stored). ephemeral*: bool - # EXPERIMENTAL: Part of RFC 17: https://rfc.vac.dev/spec/17/ - when defined(rln): - # The proof attribute indicates that the message is not a spam. This - # attribute will be used in the rln-relay protocol. - proof*: seq[byte] + # Part of RFC 17: https://rfc.vac.dev/spec/17/ + # The proof attribute indicates that the message is not spam. This + # attribute will be used in the rln-relay protocol. + proof*: seq[byte] From 47ae19c1042fc6a80bec541a9b72c209b464210f Mon Sep 17 00:00:00 2001 From: gabrielmer <101006718+gabrielmer@users.noreply.github.com> Date: Mon, 11 Sep 2023 11:30:12 +0300 Subject: [PATCH 016/274] fix: prevent IP 0.0.0.0 from being published and update peers with empty ENR data (#1982) --- tests/all_tests_waku.nim | 3 ++- tests/waku_core/test_published_address.nim | 27 +++++++++++++++++++ tests/wakunode_jsonrpc/test_jsonrpc_admin.nim | 8 +++--- waku/node/config.nim | 9 +++++-- waku/node/peer_manager/peer_manager.nim | 5 ++-- 5 files changed, 43 insertions(+), 9 deletions(-) create mode 100644 tests/waku_core/test_published_address.nim diff --git a/tests/all_tests_waku.nim b/tests/all_tests_waku.nim index 3c21bba778..1284dd888d 100644 --- a/tests/all_tests_waku.nim +++ b/tests/all_tests_waku.nim @@ -5,7 +5,8 @@ import ./waku_core/test_namespaced_topics, ./waku_core/test_time, ./waku_core/test_message_digest, - ./waku_core/test_peers + ./waku_core/test_peers, + ./waku_core/test_published_address # Waku archive test suite diff --git a/tests/waku_core/test_published_address.nim b/tests/waku_core/test_published_address.nim new file mode 100644 index 0000000000..96457e8e64 --- /dev/null +++ b/tests/waku_core/test_published_address.nim @@ -0,0 +1,27 @@ +{.used.} + +import + stew/shims/net as stewNet, + std/strutils, + testutils/unittests +import + ../testlib/wakucore, + ../testlib/wakunode + +suite "Waku Core - Published Address": + + test "Test IP 0.0.0.0": + let + node = newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init( + "0.0.0.0"),Port(0)) + + check: + ($node.announcedAddresses).contains("127.0.0.1") + + test "Test custom IP": + let + node = newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init( + "8.8.8.8"),Port(0)) + + check: + ($node.announcedAddresses).contains("8.8.8.8") \ No newline at end of file diff --git a/tests/wakunode_jsonrpc/test_jsonrpc_admin.nim b/tests/wakunode_jsonrpc/test_jsonrpc_admin.nim index 97cced0034..1a4823fd36 100644 --- a/tests/wakunode_jsonrpc/test_jsonrpc_admin.nim +++ b/tests/wakunode_jsonrpc/test_jsonrpc_admin.nim @@ -31,10 +31,10 @@ procSuite "Waku v2 JSON-RPC API - Admin": asyncTest "connect to ad-hoc peers": # Create a couple of nodes let - node1 = newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(60600)) - node2 = newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(60602)) + node1 = newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("127.0.0.1"), Port(60600)) + node2 = newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("127.0.0.1"), Port(60602)) peerInfo2 = node2.switch.peerInfo - node3 = newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(60604)) + node3 = newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("127.0.0.1"), Port(60604)) peerInfo3 = node3.switch.peerInfo await allFutures([node1.start(), node2.start(), node3.start()]) @@ -90,7 +90,7 @@ procSuite "Waku v2 JSON-RPC API - Admin": asyncTest "get managed peer information": # Create 3 nodes and start them with relay - let nodes = toSeq(0..<3).mapIt(newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(60220+it*2))) + let nodes = toSeq(0..<3).mapIt(newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("127.0.0.1"), Port(60220+it*2))) await allFutures(nodes.mapIt(it.start())) await allFutures(nodes.mapIt(it.mountRelay())) diff --git a/waku/node/config.nim b/waku/node/config.nim index 2447b6d521..b1817904dd 100644 --- a/waku/node/config.nim +++ b/waku/node/config.nim @@ -4,7 +4,7 @@ else: {.push raises: [].} import - std/[options, sequtils], + std/[options, sequtils, strutils], stew/results, stew/shims/net, libp2p/multiaddress @@ -53,6 +53,11 @@ template wsFlag(wssEnabled: bool): MultiAddress = else: MultiAddress.init("/ws").tryGet() +proc formatListenAddress(inputMultiAdd: MultiAddress): MultiAddress = + let inputStr = $inputMultiAdd + # If MultiAddress contains "0.0.0.0", replace it for "127.0.0.1" + return MultiAddress.init(inputStr.replace("0.0.0.0", "127.0.0.1")).get() + proc init*(T: type NetConfig, bindIp: ValidIpAddress, bindPort: Port, @@ -111,7 +116,7 @@ proc init*(T: type NetConfig, if hostExtAddress.isSome(): announcedAddresses.add(hostExtAddress.get()) else: - announcedAddresses.add(hostAddress) # We always have at least a bind address for the host + announcedAddresses.add(formatListenAddress(hostAddress)) # We always have at least a bind address for the host # External multiaddrs that the operator may have configured if extMultiAddrs.len > 0: diff --git a/waku/node/peer_manager/peer_manager.nim b/waku/node/peer_manager/peer_manager.nim index b8988dd28f..3e7d0f533f 100644 --- a/waku/node/peer_manager/peer_manager.nim +++ b/waku/node/peer_manager/peer_manager.nim @@ -121,8 +121,9 @@ proc addPeer*(pm: PeerManager, remotePeerInfo: RemotePeerInfo, origin = UnknownO discard remotePeerInfo.peerId.extractPublicKey(publicKey) if pm.peerStore[AddressBook][remotePeerInfo.peerId] == remotePeerInfo.addrs and - pm.peerStore[KeyBook][remotePeerInfo.peerId] == publicKey: - # Peer already managed + pm.peerStore[KeyBook][remotePeerInfo.peerId] == publicKey and + pm.peerStore[ENRBook][remotePeerInfo.peerId].raw.len > 0: + # Peer already managed and ENR info is already saved return trace "Adding peer to manager", peerId = remotePeerInfo.peerId, addresses = remotePeerInfo.addrs From a4e783303c5528d14405111cd8e72fcddc6b1bc0 Mon Sep 17 00:00:00 2001 From: Aaryamann Challani <43716372+rymnc@users.noreply.github.com> Date: Mon, 11 Sep 2023 19:21:45 +0530 Subject: [PATCH 017/274] fix(rln-relay): waku_rln_number_registered_memberships metrics appropriately handled (#2018) --- .../group_manager/on_chain/group_manager.nim | 7 ++++--- waku/waku_rln_relay/protocol_metrics.nim | 3 ++- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/waku/waku_rln_relay/group_manager/on_chain/group_manager.nim b/waku/waku_rln_relay/group_manager/on_chain/group_manager.nim index b82c298fdd..f23cc0d303 100644 --- a/waku/waku_rln_relay/group_manager/on_chain/group_manager.nim +++ b/waku/waku_rln_relay/group_manager/on_chain/group_manager.nim @@ -105,7 +105,8 @@ method atomicBatch*(g: OnchainGroupManager, let operationSuccess = g.rlnInstance.atomicWrite(some(start), idCommitments, toRemoveIndices) if not operationSuccess: raise newException(ValueError, "atomic batch operation failed") - waku_rln_number_registered_memberships.inc(int64(idCommitments.len - toRemoveIndices.len)) + # TODO: when slashing is enabled, we need to track slashed members + waku_rln_number_registered_memberships.set(int64(start.int + idCommitments.len - toRemoveIndices.len)) if g.registerCb.isSome(): var membersSeq = newSeq[Membership]() @@ -304,7 +305,7 @@ proc getAndHandleEvents(g: OnchainGroupManager, toBlock: BlockNumber): Future[void] {.async.} = initializedGuard(g) - let blockTable = await g.getBlockTable(fromBlock, toBlock) + let blockTable = await g.getBlockTable(fromBlock, toBlock) await g.handleEvents(blockTable) await g.handleRemovedEvents(blockTable) @@ -544,4 +545,4 @@ method isReady*(g: OnchainGroupManager): Future[bool] {.async,gcsafe.} = if g.latestProcessedBlock < currentBlock: return false - return not (await g.isSyncing()) \ No newline at end of file + return not (await g.isSyncing()) diff --git a/waku/waku_rln_relay/protocol_metrics.nim b/waku/waku_rln_relay/protocol_metrics.nim index 30626046bc..d075eff380 100644 --- a/waku/waku_rln_relay/protocol_metrics.nim +++ b/waku/waku_rln_relay/protocol_metrics.nim @@ -35,7 +35,8 @@ declarePublicHistogram(identifier = waku_rln_valid_messages_total, buckets = generateBucketsForHistogram(AcceptableRootWindowSize)) declarePublicCounter(waku_rln_errors_total, "number of errors detected while operating the rln relay", ["type"]) declarePublicCounter(waku_rln_proof_verification_total, "number of times the rln proofs are verified") -declarePublicCounter(waku_rln_number_registered_memberships, "number of registered and active rln memberships") +# this is a gauge so that we can set it based on the events we receive +declarePublicGauge(waku_rln_number_registered_memberships, "number of registered and active rln memberships") # Timing metrics declarePublicGauge(waku_rln_proof_verification_duration_seconds, "time taken to verify a proof") From e8776fd6643d4539f96117ecec88d765351593b0 Mon Sep 17 00:00:00 2001 From: Vaclav Pavlin Date: Mon, 11 Sep 2023 16:16:53 +0200 Subject: [PATCH 018/274] chore(ci): add js-waku test to pre-release workflow (#2017) --- .github/workflows/container-image.yml | 6 ++- .github/workflows/pre-release.yml | 54 +++++++++++++++++++-------- 2 files changed, 44 insertions(+), 16 deletions(-) diff --git a/.github/workflows/container-image.yml b/.github/workflows/container-image.yml index a01ac207bb..f609e43711 100644 --- a/.github/workflows/container-image.yml +++ b/.github/workflows/container-image.yml @@ -2,6 +2,10 @@ name: container-image-build on: workflow_call: + inputs: + image_tag: + type: string + default: ${{ github.event.number }} outputs: image: description: The resulting image link @@ -60,7 +64,7 @@ jobs: env: QUAY_PASSWORD: ${{ secrets.QUAY_PASSWORD }} QUAY_USER: ${{ secrets.QUAY_USER }} - PR_NUMBER: ${{ github.event.number }} + PR_NUMBER: ${{ inputs.image_tag}} - name: Comment PR uses: thollander/actions-comment-pull-request@v2 diff --git a/.github/workflows/pre-release.yml b/.github/workflows/pre-release.yml index d4c12c20ec..477bf18732 100644 --- a/.github/workflows/pre-release.yml +++ b/.github/workflows/pre-release.yml @@ -16,7 +16,22 @@ env: NIMFLAGS: "--parallelBuild:${NPROC}" jobs: + tag-name: + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v3 + + - name: Vars + id: vars + run: | + TAG=$([[ "${{github.ref}}" == "refs/heads/master" ]] && echo "${{env.RELEASE_NAME}}" || echo ${{github.ref}} | sed 's#refs/tags/##') + echo "tag=${TAG}" >> $GITHUB_OUTPUT + outputs: + tag: ${{steps.vars.outputs.tag}} + build-and-publish: + needs: tag-name strategy: matrix: os: [ubuntu-latest, macos-latest] @@ -33,12 +48,11 @@ jobs: id: vars run: | ARCH=${{matrix.arch}} - TAG=$([[ "${{github.ref}}" == "refs/heads/master" ]] && echo "${{env.RELEASE_NAME}}" || echo ${{github.ref}} | sed 's#refs/tags/##') echo "arch=${ARCH}" >> $GITHUB_OUTPUT - NWAKU_ARTIFACT_NAME=$(echo "nwaku-${ARCH}-${{runner.os}}-${TAG}.tar.gz" | tr "[:upper:]" "[:lower:]") - NWAKU_TOOLS_ARTIFACT_NAME=$(echo "nwaku-tools-${ARCH}-${{runner.os}}-${TAG}.tar.gz" | tr "[:upper:]" "[:lower:]") + NWAKU_ARTIFACT_NAME=$(echo "nwaku-${ARCH}-${{runner.os}}-${{ needs.tag-name.outputs.tag }}.tar.gz" | tr "[:upper:]" "[:lower:]") + NWAKU_TOOLS_ARTIFACT_NAME=$(echo "nwaku-tools-${ARCH}-${{runner.os}}-${{ needs.tag-name.outputs.tag }}.tar.gz" | tr "[:upper:]" "[:lower:]") echo "nwaku=${NWAKU_ARTIFACT_NAME}" >> $GITHUB_OUTPUT echo "nwakutools=${NWAKU_TOOLS_ARTIFACT_NAME}" >> $GITHUB_OUTPUT @@ -57,8 +71,6 @@ jobs: chat2\ tools - - tar -cvzf ${{steps.vars.outputs.nwaku}} ./build/wakunode2 ./build/chat2 tar -cvzf ${{steps.vars.outputs.nwakutools}} ./build/wakucanary ./build/networkmonitor @@ -76,9 +88,23 @@ jobs: path: ${{steps.vars.outputs.nwakutools}} retention-days: 2 + build-docker-image: + needs: tag-name + uses: waku-org/nwaku/.github/workflows/container-image.yml@master + with: + image_tag: ${{ needs.tag-name.outputs.tag }} + secrets: inherit + + js-waku: + needs: build-docker-image + uses: waku-org/js-waku/.github/workflows/ci.yml@master + with: + nim_wakunode_image: ${{ needs.build-docker-image.outputs.image }} + caller: nwaku + create-release-candidate: runs-on: ubuntu-latest - needs: [ build-and-publish ] + needs: [ tag-name, build-and-publish ] steps: - name: Checkout code uses: actions/checkout@v3 @@ -92,10 +118,8 @@ jobs: - name: prep variables id: vars run: | - RELEASE=$([[ "${{github.ref}}" == "refs/heads/master" ]] && echo "${{env.RELEASE_NAME}}" || echo ${{github.ref}} | sed 's#refs/tags/##') REF=$(echo ${{github.ref}} | sed 's#.*/##') - echo "release=${RELEASE}" >> $GITHUB_OUTPUT echo "ref=${REF}" >> $GITHUB_OUTPUT - name: generate release notes @@ -103,11 +127,11 @@ jobs: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | set -x - gh release view ${{steps.vars.outputs.release}} &>/dev/null &&\ - gh release delete -y ${{steps.vars.outputs.release}} &&\ - [[ "${{steps.vars.outputs.release}}" == "nightly" ]] && git tag -d ${{steps.vars.outputs.release}} + gh release view ${{ needs.tag-name.outputs.tag }} &>/dev/null &&\ + gh release delete -y ${{ needs.tag-name.outputs.tag }} &&\ + [[ "${{ needs.tag-name.outputs.tag }}" == "nightly" ]] && git tag -d ${{ needs.tag-name.outputs.tag }} - RELEASE_NOTES_TAG=$([[ "${{steps.vars.outputs.release}}" != "nightly" ]] && echo "-t ${{steps.vars.outputs.ref}}" || echo "") + RELEASE_NOTES_TAG=$([[ "${{ needs.tag-name.outputs.tag }}" != "nightly" ]] && echo "-t ${{steps.vars.outputs.ref}}" || echo "") docker run \ -t \ @@ -122,8 +146,8 @@ jobs: cat release_notes.md - TARGET=$([[ "${{steps.vars.outputs.release}}" == "nightly" ]] && echo "--target ${{steps.vars.outputs.ref}}" || echo "") + TARGET=$([[ "${{ needs.tag-name.outputs.tag }}" == "nightly" ]] && echo "--target ${{steps.vars.outputs.ref}}" || echo "") - gh release create ${{steps.vars.outputs.release}} --prerelease ${TARGET} \ - --title ${{steps.vars.outputs.release}} --notes-file release_notes.md \ + gh release create ${{ needs.tag-name.outputs.tag }} --prerelease ${TARGET} \ + --title ${{ needs.tag-name.outputs.tag }} --notes-file release_notes.md \ wakunode2/* wakutools/* From ebe715e9fa8608944023f972601cd05fb4e454c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lex=20Cabeza=20Romero?= Date: Mon, 11 Sep 2023 18:06:19 +0200 Subject: [PATCH 019/274] docs(README): List possible WSL Issue (#1995) * Add disclaimer on WSL building issue to README. * Add bundled nim runtime information to README. --- README.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/README.md b/README.md index 1510f6f5b9..99b253e965 100644 --- a/README.md +++ b/README.md @@ -35,6 +35,23 @@ For more on how to run `wakunode2`, refer to: - [Run using docker](https://docs.waku.org/guides/nwaku/run-docker) - [Run using docker-compose](https://docs.waku.org/guides/nwaku/run-docker-compose) +#### Issues +##### WSL +If you encounter difficulties building the project on WSL, consider placing the project within WSL's filesystem, avoiding the `/mnt/` directory. + +### Developing + +#### Nim Runtime +This repository is bundled with a Nim runtime that includes the necessary dependencies for the project. + +Before you can utilise the runtime you'll need to build the project, as detailed in a previous section. This will generate a `vendor` directory containing various dependencies, including the `nimbus-build-system` which has the bundled nim runtime. + +After successfully building the project, you may bring the bundled runtime into scope by running: +```bash +source env.sh +``` +If everything went well, your should see your prompt suffixed with `[Nimbus env]$`. Now you can run `nim` commands as usual. + ### Waku Protocol Test Suite ```bash From 563b2b20a5d6b17fe46910768e6d1d2558d37ed3 Mon Sep 17 00:00:00 2001 From: NagyZoltanPeter <113987313+NagyZoltanPeter@users.noreply.github.com> Date: Tue, 12 Sep 2023 17:08:40 +0200 Subject: [PATCH 020/274] chore: move SubscriptionManager under waku_core (#2025) * chore: cherry-pick from Filter V2 RestApi PR: move FilterPushHandler and SubscriptionManager from Filter V1 to under waku_core --- waku/waku_core.nim | 6 ++- waku/waku_core/subscription.nim | 7 +++ waku/waku_core/subscription/push_handler.nim | 13 +++++ .../subscription/subscription_manager.nim | 48 +++++++++++++++++++ waku/waku_filter/client.nim | 43 ----------------- 5 files changed, 72 insertions(+), 45 deletions(-) create mode 100644 waku/waku_core/subscription.nim create mode 100644 waku/waku_core/subscription/push_handler.nim create mode 100644 waku/waku_core/subscription/subscription_manager.nim diff --git a/waku/waku_core.nim b/waku/waku_core.nim index 8ffcf489a3..ac68e4df0d 100644 --- a/waku/waku_core.nim +++ b/waku/waku_core.nim @@ -2,10 +2,12 @@ import ./waku_core/topics, ./waku_core/time, ./waku_core/message, - ./waku_core/peers + ./waku_core/peers, + ./waku_core/subscription export topics, time, message, - peers + peers, + subscription diff --git a/waku/waku_core/subscription.nim b/waku/waku_core/subscription.nim new file mode 100644 index 0000000000..4de1fc7539 --- /dev/null +++ b/waku/waku_core/subscription.nim @@ -0,0 +1,7 @@ +import + ./subscription/subscription_manager, + ./subscription/push_handler + +export + subscription_manager, + push_handler \ No newline at end of file diff --git a/waku/waku_core/subscription/push_handler.nim b/waku/waku_core/subscription/push_handler.nim new file mode 100644 index 0000000000..490e2c56b7 --- /dev/null +++ b/waku/waku_core/subscription/push_handler.nim @@ -0,0 +1,13 @@ +when (NimMajor, NimMinor) < (1, 4): + {.push raises: [Defect].} +else: + {.push raises: [].} + +import + chronos + +import + ../topics, + ../message + +type FilterPushHandler* = proc(pubsubTopic: PubsubTopic, message: WakuMessage) {.async, gcsafe, closure.} diff --git a/waku/waku_core/subscription/subscription_manager.nim b/waku/waku_core/subscription/subscription_manager.nim new file mode 100644 index 0000000000..36293ae8a6 --- /dev/null +++ b/waku/waku_core/subscription/subscription_manager.nim @@ -0,0 +1,48 @@ +when (NimMajor, NimMinor) < (1, 4): + {.push raises: [Defect].} +else: + {.push raises: [].} + +import + std/tables, + stew/results, + chronicles, + chronos + +import + ./push_handler, + ../topics, + ../message + +## Subscription manager +type SubscriptionManager* = object + subscriptions: TableRef[(string, ContentTopic), FilterPushHandler] + +proc init*(T: type SubscriptionManager): T = + SubscriptionManager(subscriptions: newTable[(string, ContentTopic), FilterPushHandler]()) + +proc clear*(m: var SubscriptionManager) = + m.subscriptions.clear() + +proc registerSubscription*(m: SubscriptionManager, pubsubTopic: PubsubTopic, contentTopic: ContentTopic, handler: FilterPushHandler) = + try: + # TODO: Handle over subscription surprises + m.subscriptions[(pubsubTopic, contentTopic)]= handler + except CatchableError: + error "failed to register filter subscription", error=getCurrentExceptionMsg() + +proc removeSubscription*(m: SubscriptionManager, pubsubTopic: PubsubTopic, contentTopic: ContentTopic) = + m.subscriptions.del((pubsubTopic, contentTopic)) + +proc notifySubscriptionHandler*(m: SubscriptionManager, pubsubTopic: PubsubTopic, contentTopic: ContentTopic, message: WakuMessage) = + if not m.subscriptions.hasKey((pubsubTopic, contentTopic)): + return + + try: + let handler = m.subscriptions[(pubsubTopic, contentTopic)] + asyncSpawn handler(pubsubTopic, message) + except CatchableError: + discard + +proc getSubscriptionsCount*(m: SubscriptionManager): int = + m.subscriptions.len() diff --git a/waku/waku_filter/client.nim b/waku/waku_filter/client.nim index cad3b7ada8..ae7b46b665 100644 --- a/waku/waku_filter/client.nim +++ b/waku/waku_filter/client.nim @@ -27,50 +27,7 @@ logScope: const Defaultstring = "/waku/2/default-waku/proto" - -### Client, filter subscripton manager - -type FilterPushHandler* = proc(pubsubTopic: PubsubTopic, message: WakuMessage) {.async, gcsafe, closure.} - - -## Subscription manager - -type SubscriptionManager = object - subscriptions: TableRef[(string, ContentTopic), FilterPushHandler] - -proc init(T: type SubscriptionManager): T = - SubscriptionManager(subscriptions: newTable[(string, ContentTopic), FilterPushHandler]()) - -proc clear(m: var SubscriptionManager) = - m.subscriptions.clear() - -proc registerSubscription(m: SubscriptionManager, pubsubTopic: PubsubTopic, contentTopic: ContentTopic, handler: FilterPushHandler) = - try: - m.subscriptions[(pubsubTopic, contentTopic)]= handler - except: # TODO: Fix "BareExcept" warning - error "failed to register filter subscription", error=getCurrentExceptionMsg() - -proc removeSubscription(m: SubscriptionManager, pubsubTopic: PubsubTopic, contentTopic: ContentTopic) = - m.subscriptions.del((pubsubTopic, contentTopic)) - -proc notifySubscriptionHandler(m: SubscriptionManager, pubsubTopic: PubsubTopic, contentTopic: ContentTopic, message: WakuMessage) = - if not m.subscriptions.hasKey((pubsubTopic, contentTopic)): - return - - try: - let handler = m.subscriptions[(pubsubTopic, contentTopic)] - asyncSpawn handler(pubsubTopic, message) - except: # TODO: Fix "BareExcept" warning - discard - -proc getSubscriptionsCount(m: SubscriptionManager): int = - m.subscriptions.len() - - ## Client - -type MessagePushHandler* = proc(requestId: string, msg: MessagePush): Future[void] {.gcsafe, closure.} - type WakuFilterClientLegacy* = ref object of LPProtocol rng: ref rand.HmacDrbgContext peerManager: PeerManager From e8602021b6a1e577371321791c19ac91f7e53dca Mon Sep 17 00:00:00 2001 From: Ivan Folgueira Bande <128452529+Ivansete-status@users.noreply.github.com> Date: Wed, 13 Sep 2023 12:45:55 +0200 Subject: [PATCH 021/274] chore(postgres): not loading the libpq library by default & better user feedback (#2028) * removing implicit dependency with libpq if postgres is not being used. * We only run the postgres tests when explicitly willing to, i.e. make POSTGRES=1 test. The reason is that the postgres tests expect a database instance to be running locally. --- .github/workflows/ci.yml | 2 +- Makefile | 6 +++- tests/all_tests_waku.nim | 3 +- waku/waku_archive/archive.nim | 4 --- waku/waku_archive/driver/builder.nim | 46 ++++++++++++++++------------ 5 files changed, 34 insertions(+), 27 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 43b73fd903..acb1473fcf 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -117,7 +117,7 @@ jobs: sudo docker run --rm -d -e POSTGRES_PASSWORD=test123 -p 5432:5432 postgres:9.6-alpine fi - make V=1 LOG_LEVEL=DEBUG QUICK_AND_DIRTY_COMPILER=1 test testwakunode2 + make V=1 LOG_LEVEL=DEBUG QUICK_AND_DIRTY_COMPILER=1 POSTGRES=1 test testwakunode2 build-docker-image: needs: changes diff --git a/Makefile b/Makefile index 3e62390e80..e083d30323 100644 --- a/Makefile +++ b/Makefile @@ -106,6 +106,10 @@ ifneq ($(USE_LIBBACKTRACE), 0) deps: | libbacktrace endif +ifeq ($(POSTGRES), 1) +NIM_PARAMS := $(NIM_PARAMS) -d:postgres -d:nimDebugDlOpen +endif + clean: | clean-libbacktrace @@ -218,7 +222,7 @@ docs: | build deps ##################### # -d:insecure - Necessary to enable Prometheus HTTP endpoint for metrics # -d:chronicles_colors:none - Necessary to disable colors in logs for Docker -DOCKER_IMAGE_NIMFLAGS ?= -d:chronicles_colors:none -d:insecure +DOCKER_IMAGE_NIMFLAGS ?= -d:chronicles_colors:none -d:insecure -d:postgres DOCKER_IMAGE_NIMFLAGS := $(DOCKER_IMAGE_NIMFLAGS) $(HEAPTRACK_PARAMS) # build a docker image for the fleet diff --git a/tests/all_tests_waku.nim b/tests/all_tests_waku.nim index 1284dd888d..3b10bff180 100644 --- a/tests/all_tests_waku.nim +++ b/tests/all_tests_waku.nim @@ -21,9 +21,10 @@ import ./waku_archive/test_waku_archive const os* {.strdefine.} = "" -when os == "Linux": +when os == "Linux" and # GitHub only supports container actions on Linux # and we need to start a postgress database in a docker container + defined(postgres): import ./waku_archive/test_driver_postgres_query, ./waku_archive/test_driver_postgres diff --git a/waku/waku_archive/archive.nim b/waku/waku_archive/archive.nim index abdb6f94cd..c8ffb7715b 100644 --- a/waku/waku_archive/archive.nim +++ b/waku/waku_archive/archive.nim @@ -14,10 +14,6 @@ import ../common/databases/dburl, ../common/databases/db_sqlite, ./driver, - ./driver/queue_driver, - ./driver/sqlite_driver, - ./driver/sqlite_driver/migrations as archive_driver_sqlite_migrations, - ./driver/postgres_driver/postgres_driver, ./retention_policy, ./retention_policy/retention_policy_capacity, ./retention_policy/retention_policy_time, diff --git a/waku/waku_archive/driver/builder.nim b/waku/waku_archive/driver/builder.nim index 59bed30d83..f8a47afd7b 100644 --- a/waku/waku_archive/driver/builder.nim +++ b/waku/waku_archive/driver/builder.nim @@ -14,13 +14,15 @@ import ../../common/databases/db_sqlite, ./sqlite_driver, ./sqlite_driver/migrations as archive_driver_sqlite_migrations, - ./queue_driver, - ./postgres_driver + ./queue_driver export sqlite_driver, - queue_driver, - postgres_driver + queue_driver + +when defined(postgres): + import ./postgres_driver ## This import adds dependency with an external libpq library + export postgres_driver proc new*(T: type ArchiveDriver, url: string, @@ -78,22 +80,26 @@ proc new*(T: type ArchiveDriver, return ok(res.get()) of "postgres": - const MaxNumConns = 5 #TODO: we may need to set that from app args (maybe?) - let res = PostgresDriver.new(url, MaxNumConns, onErrAction) - if res.isErr(): - return err("failed to init postgres archive driver: " & res.error) - - let driver = res.get() - - try: - # The table should exist beforehand. - let newTableRes = waitFor driver.createMessageTable() - if newTableRes.isErr(): - return err("error creating table: " & newTableRes.error) - except CatchableError: - return err("exception creating table: " & getCurrentExceptionMsg()) - - return ok(driver) + when defined(postgres): + const MaxNumConns = 5 #TODO: we may need to set that from app args (maybe?) + let res = PostgresDriver.new(url, MaxNumConns, onErrAction) + if res.isErr(): + return err("failed to init postgres archive driver: " & res.error) + + let driver = res.get() + + try: + # The table should exist beforehand. + let newTableRes = waitFor driver.createMessageTable() + if newTableRes.isErr(): + return err("error creating table: " & newTableRes.error) + except CatchableError: + return err("exception creating table: " & getCurrentExceptionMsg()) + + return ok(driver) + + else: + return err("Postgres has been configured but not been compiled. Check compiler definitions.") else: debug "setting up in-memory waku archive driver" From df338b19d190cac3b72a610e7977f84dbdeb7fe5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lex=20Cabeza=20Romero?= Date: Thu, 14 Sep 2023 11:30:56 +0200 Subject: [PATCH 022/274] test(waku-filter): Subscriber ping tests (#2023) * Move waku filter utility functions to a different file for reuse. * Add asyncSetup and asyncTeardown templates. * Implement waku filter subscriber ping tests. --- tests/all_tests_waku.nim | 1 + tests/testlib/testasync.nim | 16 ++++ tests/waku_filter_v2/client_utils.nim | 33 +++++++ tests/waku_filter_v2/test_waku_client.nim | 101 ++++++++++++++++++++++ tests/waku_filter_v2/test_waku_filter.nim | 58 +------------ 5 files changed, 154 insertions(+), 55 deletions(-) create mode 100644 tests/testlib/testasync.nim create mode 100644 tests/waku_filter_v2/client_utils.nim create mode 100644 tests/waku_filter_v2/test_waku_client.nim diff --git a/tests/all_tests_waku.nim b/tests/all_tests_waku.nim index 3b10bff180..0fc247807e 100644 --- a/tests/all_tests_waku.nim +++ b/tests/all_tests_waku.nim @@ -47,6 +47,7 @@ import # Waku filter test suite import + ./waku_filter_v2/test_waku_client, ./waku_filter_v2/test_waku_filter, ./waku_filter_v2/test_waku_filter_protocol diff --git a/tests/testlib/testasync.nim b/tests/testlib/testasync.nim new file mode 100644 index 0000000000..1cf5124345 --- /dev/null +++ b/tests/testlib/testasync.nim @@ -0,0 +1,16 @@ +# Sourced from: vendor/nim-libp2p/tests/testutils.nim +# Adds the ability for asyncSetup and asyncTeardown to be used in unittest2 + +template asyncTeardown*(body: untyped): untyped = + teardown: + waitFor(( + proc() {.async, gcsafe.} = + body + )()) + +template asyncSetup*(body: untyped): untyped = + setup: + waitFor(( + proc() {.async, gcsafe.} = + body + )()) diff --git a/tests/waku_filter_v2/client_utils.nim b/tests/waku_filter_v2/client_utils.nim new file mode 100644 index 0000000000..95d3d5c463 --- /dev/null +++ b/tests/waku_filter_v2/client_utils.nim @@ -0,0 +1,33 @@ +import + std/[options,tables], + testutils/unittests, + chronos, + chronicles + +import + ../../../waku/node/peer_manager, + ../../../waku/waku_filter_v2, + ../../../waku/waku_filter_v2/client, + ../../../waku/waku_core, + ../testlib/common, + ../testlib/wakucore + +proc newTestWakuFilter*(switch: Switch): Future[WakuFilter] {.async.} = + let + peerManager = PeerManager.new(switch) + proto = WakuFilter.new(peerManager) + + await proto.start() + switch.mount(proto) + + return proto + +proc newTestWakuFilterClient*(switch: Switch, messagePushHandler: MessagePushHandler): Future[WakuFilterClient] {.async.} = + let + peerManager = PeerManager.new(switch) + proto = WakuFilterClient.new(rng, messagePushHandler, peerManager) + + await proto.start() + switch.mount(proto) + + return proto diff --git a/tests/waku_filter_v2/test_waku_client.nim b/tests/waku_filter_v2/test_waku_client.nim new file mode 100644 index 0000000000..398bcddebd --- /dev/null +++ b/tests/waku_filter_v2/test_waku_client.nim @@ -0,0 +1,101 @@ +{.used.} + +import + std/[options,tables], + testutils/unittests, + chronos, + chronicles, + libp2p/peerstore + +import + ../../../waku/node/peer_manager, + ../../../waku/waku_filter_v2, + ../../../waku/waku_filter_v2/client, + ../../../waku/waku_core, + ../testlib/common, + ../testlib/wakucore, + ../testlib/testasync, + ./client_utils.nim + +suite "Waku Filter": + suite "Subscriber Ping": + var serverSwitch {.threadvar.}: Switch + var clientSwitch {.threadvar.}: Switch + var wakuFilter {.threadvar.}: WakuFilter + var wakuFilterClient {.threadvar.}: WakuFilterClient + var serverRemotePeerInfo {.threadvar.}: RemotePeerInfo + var pubsubTopic {.threadvar.}: PubsubTopic + var contentTopics {.threadvar.}: seq[ContentTopic] + + asyncSetup: + let + voidHandler: MessagePushHandler = proc(pubsubTopic: PubsubTopic, message: WakuMessage) = + discard + + pubsubTopic = DefaultPubsubTopic + contentTopics = @[DefaultContentTopic] + serverSwitch = newStandardSwitch() + clientSwitch = newStandardSwitch() + wakuFilter = await newTestWakuFilter(serverSwitch) + wakuFilterClient = await newTestWakuFilterClient(clientSwitch, voidHandler) + + await allFutures(serverSwitch.start(), clientSwitch.start()) + serverRemotePeerInfo = serverSwitch.peerInfo.toRemotePeerInfo() + + asyncTeardown: + await allFutures(wakuFilter.stop(), wakuFilterClient.stop(), serverSwitch.stop(), clientSwitch.stop()) + + asyncTest "Active Subscription Identification": + # Given + let + clientPeerId = clientSwitch.peerInfo.toRemotePeerInfo().peerId + subscribeResponse = await wakuFilterClient.subscribe( + serverRemotePeerInfo, pubsubTopic, contentTopics + ) + require: + subscribeResponse.isOk() + wakuFilter.subscriptions.hasKey(clientPeerId) + + # When + let subscribedPingResponse = await wakuFilterClient.ping(serverRemotePeerInfo) + + # Then + check: + subscribedPingResponse.isOk() + wakuFilter.subscriptions.hasKey(clientSwitch.peerInfo.toRemotePeerInfo().peerId) + + asyncTest "No Active Subscription Identification": + # When + let unsubscribedPingResponse = await wakuFilterClient.ping(serverRemotePeerInfo) + + # Then + check: + unsubscribedPingResponse.isErr() # Not subscribed + unsubscribedPingResponse.error().kind == FilterSubscribeErrorKind.NOT_FOUND + + asyncTest "After Unsubscription": + # Given + let + clientPeerId = clientSwitch.peerInfo.toRemotePeerInfo().peerId + subscribeResponse = await wakuFilterClient.subscribe( + serverRemotePeerInfo, pubsubTopic, contentTopics + ) + + require: + subscribeResponse.isOk() + wakuFilter.subscriptions.hasKey(clientPeerId) + + # When + let unsubscribeResponse = await wakuFilterClient.unsubscribe( + serverRemotePeerInfo, pubsubTopic, contentTopics + ) + require: + unsubscribeResponse.isOk() + not wakuFilter.subscriptions.hasKey(clientPeerId) + + let unsubscribedPingResponse = await wakuFilterClient.ping(serverRemotePeerInfo) + + # Then + check: + unsubscribedPingResponse.isErr() # Not subscribed + unsubscribedPingResponse.error().kind == FilterSubscribeErrorKind.NOT_FOUND diff --git a/tests/waku_filter_v2/test_waku_filter.nim b/tests/waku_filter_v2/test_waku_filter.nim index 8d5ee06269..76c90e4fb8 100644 --- a/tests/waku_filter_v2/test_waku_filter.nim +++ b/tests/waku_filter_v2/test_waku_filter.nim @@ -6,70 +6,18 @@ import chronos, chronicles, libp2p/peerstore + import ../../../waku/node/peer_manager, ../../../waku/waku_filter_v2, ../../../waku/waku_filter_v2/client, ../../../waku/waku_core, ../testlib/common, - ../testlib/wakucore - -proc newTestWakuFilter(switch: Switch): Future[WakuFilter] {.async.} = - let - peerManager = PeerManager.new(switch) - proto = WakuFilter.new(peerManager) - - await proto.start() - switch.mount(proto) - - return proto - -proc newTestWakuFilterClient(switch: Switch, messagePushHandler: MessagePushHandler): Future[WakuFilterClient] {.async.} = - let - peerManager = PeerManager.new(switch) - proto = WakuFilterClient.new(rng, messagePushHandler, peerManager) - - await proto.start() - switch.mount(proto) - - return proto + ../testlib/wakucore, + ./client_utils.nim suite "Waku Filter - end to end": - asyncTest "ping": - # Given - var - voidHandler: MessagePushHandler = proc(pubsubTopic: PubsubTopic, message: WakuMessage) = - discard - let - serverSwitch = newStandardSwitch() - clientSwitch = newStandardSwitch() - wakuFilter = await newTestWakuFilter(serverSwitch) - wakuFilterClient = await newTestWakuFilterClient(clientSwitch, voidHandler) - - # When - await allFutures(serverSwitch.start(), clientSwitch.start()) - let response = await wakuFilterClient.ping(serverSwitch.peerInfo.toRemotePeerInfo()) - - # Then - check: - response.isErr() # Not subscribed - response.error().kind == FilterSubscribeErrorKind.NOT_FOUND - - # When - let response2 = await wakuFilterClient.subscribe(serverSwitch.peerInfo.toRemotePeerInfo(), DefaultPubsubTopic, @[DefaultContentTopic]) - - require response2.isOk() - - let response3 = await wakuFilterClient.ping(serverSwitch.peerInfo.toRemotePeerInfo()) - - # Then - check: - response3.isOk() # Subscribed - - # Teardown - await allFutures(wakuFilter.stop(), wakuFilterClient.stop(), serverSwitch.stop(), clientSwitch.stop()) - asyncTest "simple subscribe and unsubscribe request": # Given var From aa3e1a66d59b4e17a84a4b06e70e29149befa0fc Mon Sep 17 00:00:00 2001 From: Ivan Folgueira Bande <128452529+Ivansete-status@users.noreply.github.com> Date: Thu, 14 Sep 2023 14:12:37 +0200 Subject: [PATCH 023/274] fix(sqlite): Properly set user_version to 7 so that the migration procedure is not started (#2031) --- .../driver/sqlite_driver/migrations.nim | 42 ++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/waku/waku_archive/driver/sqlite_driver/migrations.nim b/waku/waku_archive/driver/sqlite_driver/migrations.nim index 772fc56566..0aa925fda1 100644 --- a/waku/waku_archive/driver/sqlite_driver/migrations.nim +++ b/waku/waku_archive/driver/sqlite_driver/migrations.nim @@ -3,7 +3,8 @@ import std/[tables, strutils, os], stew/results, - chronicles + chronicles, + sqlite3_abi # sqlite3_column_int64 import ../../../common/databases/db_sqlite, ../../../common/databases/common @@ -18,6 +19,37 @@ const SchemaVersion* = 7 # increase this when there is an update in the database template projectRoot: string = currentSourcePath.rsplit(DirSep, 1)[0] / ".." / ".." / ".." / ".." const MessageStoreMigrationPath: string = projectRoot / "migrations" / "message_store" +proc isSchemaVersion7*(db: SqliteDatabase): DatabaseResult[bool] = + ## Temporary proc created to analyse when the table actually belongs to the SchemaVersion 7. + ## + ## During many nwaku versions, 0.14.0 until 0.18.0, the SchemaVersion wasn't set or checked. + ## Docker `nwaku` nodes that start working from these versions, 0.14.0 until 0.18.0, they started + ## with this discrepancy: `user_version`== 0 (not set) but Message table with SchemaVersion 7. + ## + ## We found issues where `user_version` (SchemaVersion) was set to 0 in the database even though + ## its scheme structure reflected SchemaVersion 7. In those cases, when `nwaku` re-started to + ## apply the migration scripts (in 0.19.0) the node didn't start properly because it tried to + ## migrate a database that already had the Schema structure #7, so it failed when changing the PK. + ## + ## TODO: This was added in version 0.20.0. We might remove this in version 0.30.0, as we + ## could consider that many users use +0.20.0. + + var pkColumns = newSeq[string]() + proc queryRowCallback(s: ptr sqlite3_stmt) = + let colName = cstring sqlite3_column_text(s, 0) + pkColumns.add($colName) + + let query = """SELECT l.name FROM pragma_table_info("Message") as l WHERE l.pk != 0;""" + let res = db.query(query, queryRowCallback) + if res.isErr(): + return err("failed to determine the current SchemaVersion: " & $res.error) + + if pkColumns == @["pubsubTopic", "id", "storedAt"]: + return ok(true) + + else: + info "Not considered schema version 7" + ok(false) proc migrate*(db: SqliteDatabase, targetVersion = SchemaVersion): DatabaseResult[void] = ## Compares the `user_version` of the sqlite database with the provided `targetVersion`, then @@ -30,6 +62,14 @@ proc migrate*(db: SqliteDatabase, targetVersion = SchemaVersion): DatabaseResult ## NOTE: Down migration it is not currently supported debug "starting message store's sqlite database migration" + let userVersion = ? db.getUserVersion() + let isSchemaVersion7 = ? db.isSchemaVersion7() + + if userVersion == 0'i64 and isSchemaVersion7: + info "We found user_version 0 but the database schema reflects the user_version 7" + ## Force the correct schema version + ? db.setUserVersion( 7 ) + let migrationRes = migrate(db, targetVersion, migrationsScriptsDir=MessageStoreMigrationPath) if migrationRes.isErr(): return err("failed to execute migration scripts: " & migrationRes.error) From 9085b1b3ba95dd8993236f6b2f121f45ccbd406b Mon Sep 17 00:00:00 2001 From: Vaclav Pavlin Date: Thu, 14 Sep 2023 16:03:13 +0200 Subject: [PATCH 024/274] chore(release): update changelog for v0.20.0 release (#2026) * chore(release): update changelog for v0.20.0 release * Update CHANGELOG.md Co-authored-by: Ivan Folgueira Bande <128452529+Ivansete-status@users.noreply.github.com> * Update CHANGELOG.md Co-authored-by: Simon-Pierre Vivier * fix typo and autosharding highlight, note CLI options removal --------- Co-authored-by: Ivan Folgueira Bande <128452529+Ivansete-status@users.noreply.github.com> Co-authored-by: Simon-Pierre Vivier --- CHANGELOG.md | 102 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 102 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b20d84807c..bdbff70c34 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,105 @@ +## 2023-09-14 v0.20.0 + +> Note: IP address 0.0.0.0 is no longer advertised by a node + +> Note: Multiple CLI options have been removed in this release, please see _Upgrade instructions_ section for details. + +## What's Changed + +Release highlights: +* RLN is now part of standard release (is no longer EXPERIMENTAL feature) +* Interop tests between nwaku and js-waku are now gating PRs and releases +* Libwaku has been made more threadsafe (1 out of 3 improvements applied.) +* Added autosharding option on various protocol APIs + + + +### Features + +- **rln-relay:** removed rln from experimental 🚀 ([#2001](https://github.com/waku-org/nwaku/issues/2001)) ([645b0343](https://github.com/waku-org/nwaku/commit/645b0343)) +- Rest endoint /health for rln ([#2011](https://github.com/waku-org/nwaku/issues/2011)) ([fc6194bb](https://github.com/waku-org/nwaku/commit/fc6194bb)) +- **rln_db_inspector:** create rln_db_inspector tool ([#1999](https://github.com/waku-org/nwaku/issues/1999)) ([ec42e2c7](https://github.com/waku-org/nwaku/commit/ec42e2c7)) +- **relay:** ordered validator execution ([#1966](https://github.com/waku-org/nwaku/issues/1966)) ([debc5f19](https://github.com/waku-org/nwaku/commit/debc5f19)) +- **discv5:** topic subscriptions update discv5 filter predicate ([#1918](https://github.com/waku-org/nwaku/issues/1918)) ([4539dfc7](https://github.com/waku-org/nwaku/commit/4539dfc7)) +- topic subscriptions updates discv5 ENR ([#1875](https://github.com/waku-org/nwaku/issues/1875)) ([c369b329](https://github.com/waku-org/nwaku/commit/c369b329)) +- **rln_keystore_generator:** wired to onchain group manager ([#1931](https://github.com/waku-org/nwaku/issues/1931)) ([c9b48ea1](https://github.com/waku-org/nwaku/commit/c9b48ea1)) +- **rln:** init rln_keystore_generator ([#1925](https://github.com/waku-org/nwaku/issues/1925)) ([3d849541](https://github.com/waku-org/nwaku/commit/3d849541)) +- update various protocols to autoshard ([#1857](https://github.com/waku-org/nwaku/issues/1857)) ([cf301396](https://github.com/waku-org/nwaku/commit/cf301396)) + +### Bug Fixes + +- **rln-relay:** waku_rln_number_registered_memberships metrics appropriately handled ([#2018](https://github.com/waku-org/nwaku/issues/2018)) ([a4e78330](https://github.com/waku-org/nwaku/commit/a4e78330)) +- prevent IP 0.0.0.0 from being published and update peers with empty ENR data ([#1982](https://github.com/waku-org/nwaku/issues/1982)) ([47ae19c1](https://github.com/waku-org/nwaku/commit/47ae19c1)) +- **rln-relay:** missed roots during sync ([#2015](https://github.com/waku-org/nwaku/issues/2015)) ([21604e6b](https://github.com/waku-org/nwaku/commit/21604e6b)) +- **p2p:** fix possible connectivity issue ([#1996](https://github.com/waku-org/nwaku/issues/1996)) ([7d9d8a3f](https://github.com/waku-org/nwaku/commit/7d9d8a3f)) +- **rln-db-inspector:** use valueOr pattern ([#2012](https://github.com/waku-org/nwaku/issues/2012)) ([a8095d87](https://github.com/waku-org/nwaku/commit/a8095d87)) +- **tests:** relay tests use random port to avoid conflict ([#1998](https://github.com/waku-org/nwaku/issues/1998)) ([b991682b](https://github.com/waku-org/nwaku/commit/b991682b)) +- **ci:** incorrect use of braces ([#1987](https://github.com/waku-org/nwaku/issues/1987)) ([4ed41457](https://github.com/waku-org/nwaku/commit/4ed41457)) +- **Makefile:** invalid path to crate build ([#1981](https://github.com/waku-org/nwaku/issues/1981)) ([1a318c29](https://github.com/waku-org/nwaku/commit/1a318c29)) +- --topic should be ignore when using --pubsub-topic or --content-topic ([#1977](https://github.com/waku-org/nwaku/issues/1977)) ([037b1662](https://github.com/waku-org/nwaku/commit/037b1662)) +- **tests:** fix flaky test ([#1972](https://github.com/waku-org/nwaku/issues/1972)) ([f262397d](https://github.com/waku-org/nwaku/commit/f262397d)) +- **rln-relay:** deserialization of valid merkle roots ([#1973](https://github.com/waku-org/nwaku/issues/1973)) ([d262837e](https://github.com/waku-org/nwaku/commit/d262837e)) +- **ci:** rename tools artifact to prevent conflict ([#1971](https://github.com/waku-org/nwaku/issues/1971)) ([26c06b27](https://github.com/waku-org/nwaku/commit/26c06b27)) +- **Makefile:** rln was enabled by default ([#1964](https://github.com/waku-org/nwaku/issues/1964)) ([9b1d2904](https://github.com/waku-org/nwaku/commit/9b1d2904)) +- **rln-relay:** modify keystore credentials logic ([#1956](https://github.com/waku-org/nwaku/issues/1956)) ([e7b2b88f](https://github.com/waku-org/nwaku/commit/e7b2b88f)) +- **Makefile:** error out if rln-keystore-generator not compiled with rln flag ([#1960](https://github.com/waku-org/nwaku/issues/1960)) ([ac258550](https://github.com/waku-org/nwaku/commit/ac258550)) +- **rln-relay:** sync from deployed block number ([#1955](https://github.com/waku-org/nwaku/issues/1955)) ([bd3be219](https://github.com/waku-org/nwaku/commit/bd3be219)) +- **rln-relay:** window of acceptable roots synced to rln metadata ([#1953](https://github.com/waku-org/nwaku/issues/1953)) ([01634f57](https://github.com/waku-org/nwaku/commit/01634f57)) +- **rln-relay:** bump zerokit to v0.3.2 ([#1951](https://github.com/waku-org/nwaku/issues/1951)) ([32aa1c5b](https://github.com/waku-org/nwaku/commit/32aa1c5b)) +- **rln-relay:** flush_interval incorrectly set ([#1933](https://github.com/waku-org/nwaku/issues/1933)) ([c07d63db](https://github.com/waku-org/nwaku/commit/c07d63db)) +- **rln-relay:** RLN DB should be aware of chain and contract address ([#1932](https://github.com/waku-org/nwaku/issues/1932)) ([1ae5b5a9](https://github.com/waku-org/nwaku/commit/1ae5b5a9)) +- **rln-relay:** waitFor startup, otherwise valid proofs will be marked invalid ([#1920](https://github.com/waku-org/nwaku/issues/1920)) ([6c6302f9](https://github.com/waku-org/nwaku/commit/6c6302f9)) +- **test:** fix flaky rln test ([#1923](https://github.com/waku-org/nwaku/issues/1923)) ([0ac8a7f0](https://github.com/waku-org/nwaku/commit/0ac8a7f0)) +- **rln-relay:** remove registration capability ([#1916](https://github.com/waku-org/nwaku/issues/1916)) ([f08315cd](https://github.com/waku-org/nwaku/commit/f08315cd)) +- **rln-relay:** invalid start index being set results in invalid proofs ([#1915](https://github.com/waku-org/nwaku/issues/1915)) ([b3bb7a11](https://github.com/waku-org/nwaku/commit/b3bb7a11)) +- **rln-relay:** should error out on rln-relay mount failure ([#1904](https://github.com/waku-org/nwaku/issues/1904)) ([8c568cab](https://github.com/waku-org/nwaku/commit/8c568cab)) +- **rln-relay:** timeout on macos runners, use fixed version of ganache ([#1913](https://github.com/waku-org/nwaku/issues/1913)) ([c9772af0](https://github.com/waku-org/nwaku/commit/c9772af0)) +- no enr record in chat2 ([#1907](https://github.com/waku-org/nwaku/issues/1907)) ([fc604ca5](https://github.com/waku-org/nwaku/commit/fc604ca5)) + +### Changes + +- **ci:** add js-waku test to pre-release workflow ([#2017](https://github.com/waku-org/nwaku/issues/2017)) ([e8776fd6](https://github.com/waku-org/nwaku/commit/e8776fd6)) +- **rln-relay:** updated docs ([#1993](https://github.com/waku-org/nwaku/issues/1993)) ([76e34077](https://github.com/waku-org/nwaku/commit/76e34077)) +- **ci:** execute js-waku integration tests on image build ([#2006](https://github.com/waku-org/nwaku/issues/2006)) ([5d976df9](https://github.com/waku-org/nwaku/commit/5d976df9)) +- **rln-relay:** add isReady check ([#1989](https://github.com/waku-org/nwaku/issues/1989)) ([5638bd06](https://github.com/waku-org/nwaku/commit/5638bd06)) +- **rln-relay:** clean up nullifier table every MaxEpochGap ([#1994](https://github.com/waku-org/nwaku/issues/1994)) ([483f40c8](https://github.com/waku-org/nwaku/commit/483f40c8)) +- **ci:** use commit instead of master for docker image ([#1990](https://github.com/waku-org/nwaku/issues/1990)) ([98850192](https://github.com/waku-org/nwaku/commit/98850192)) +- **rln-relay:** log levels for certain logs ([#1986](https://github.com/waku-org/nwaku/issues/1986)) ([97a7c9d0](https://github.com/waku-org/nwaku/commit/97a7c9d0)) +- **rln-relay:** use the only key from keystore if only 1 exists ([#1984](https://github.com/waku-org/nwaku/issues/1984)) ([a14c3261](https://github.com/waku-org/nwaku/commit/a14c3261)) +- **ci:** enable experimental for the PR image builds ([#1976](https://github.com/waku-org/nwaku/issues/1976)) ([1b835b4e](https://github.com/waku-org/nwaku/commit/1b835b4e)) +- **rln-relay:** confirm that the provided credential is correct using onchain query ([#1980](https://github.com/waku-org/nwaku/issues/1980)) ([be48891f](https://github.com/waku-org/nwaku/commit/be48891f)) +- **api:** validate rln message before sending (rest + rpc) ([#1968](https://github.com/waku-org/nwaku/issues/1968)) ([05c98864](https://github.com/waku-org/nwaku/commit/05c98864)) +- **cbindings:** Thread-safe libwaku. WakuNode instance created directly from the Waku Thread ([#1957](https://github.com/waku-org/nwaku/issues/1957)) ([68e8d9a7](https://github.com/waku-org/nwaku/commit/68e8d9a7)) +- add debug log indicating succesful message pushes and also log the message hash ([#1965](https://github.com/waku-org/nwaku/issues/1965)) ([e272bec9](https://github.com/waku-org/nwaku/commit/e272bec9)) +- **rln-keystore-generator:** log out the membership index upon registration ([#1963](https://github.com/waku-org/nwaku/issues/1963)) ([7d53aec1](https://github.com/waku-org/nwaku/commit/7d53aec1)) +- **rln-relay:** integrate waku rln registry ([#1943](https://github.com/waku-org/nwaku/issues/1943)) ([cc9f8d42](https://github.com/waku-org/nwaku/commit/cc9f8d42)) +- **ci:** add a job checking config options and db schema ([#1927](https://github.com/waku-org/nwaku/issues/1927)) ([505d1967](https://github.com/waku-org/nwaku/commit/505d1967)) +- **rln_keystore_generator:** generate and persist credentials ([#1928](https://github.com/waku-org/nwaku/issues/1928)) ([07945a37](https://github.com/waku-org/nwaku/commit/07945a37)) +- **rln-relay:** rename keystore application to waku-rln-relay ([#1924](https://github.com/waku-org/nwaku/issues/1924)) ([8239b455](https://github.com/waku-org/nwaku/commit/8239b455)) +- **rln:** remove old and add new rln metric ([#1926](https://github.com/waku-org/nwaku/issues/1926)) ([56c228f8](https://github.com/waku-org/nwaku/commit/56c228f8)) +- **rln:** run rln in all relay pubsubtopics + remove cli flags ([#1917](https://github.com/waku-org/nwaku/issues/1917)) ([af95b571](https://github.com/waku-org/nwaku/commit/af95b571)) +- **release:** update changelog for delayed v0.19.0 release ([#1911](https://github.com/waku-org/nwaku/issues/1911)) ([78690787](https://github.com/waku-org/nwaku/commit/78690787)) + +This release supports the following [libp2p protocols](https://docs.libp2p.io/concepts/protocols/): +| Protocol | Spec status | Protocol id | +| ---: | :---: | :--- | +| [`11/WAKU2-RELAY`](https://rfc.vac.dev/spec/11/) | `stable` | `/vac/waku/relay/2.0.0` | +| [`12/WAKU2-FILTER`](https://rfc.vac.dev/spec/12/) | `draft` | `/vac/waku/filter/2.0.0-beta1`
`/vac/waku/filter-subscribe/2.0.0-beta1`
`/vac/waku/filter-push/2.0.0-beta1` | +| [`13/WAKU2-STORE`](https://rfc.vac.dev/spec/13/) | `draft` | `/vac/waku/store/2.0.0-beta4` | +| [`19/WAKU2-LIGHTPUSH`](https://rfc.vac.dev/spec/19/) | `draft` | `/vac/waku/lightpush/2.0.0-beta1` | + +The Waku v1 implementation has been removed from this repository and can be found in a separate [Waku Legacy](https://github.com/waku-org/waku-legacy) repository. + +## Upgrade instructions + +* Note that the `--topic` CLI option is being deprecated in favor of a more specific options `--pubsub-topic` & `--content-topic`. The `--topic` option will be available for next release with a deprecation note. +* CLI option `--store-resume-peer` has been removed. +* Following options related to RLN have been removed: + * `--rln-relay-membership-group-index` + * `--rln-relay-pubsub-topic` + * `--rln-relay-content-topic` + + ## 2023-08-16 v0.19.0 > Note that the `--topic` CLI option is being deprecated in favor a more specific option `--pubsub-topic`. From dac072f843474f56f2f5dfe2f64972158a55628a Mon Sep 17 00:00:00 2001 From: NagyZoltanPeter <113987313+NagyZoltanPeter@users.noreply.github.com> Date: Thu, 14 Sep 2023 21:28:57 +0200 Subject: [PATCH 025/274] feat: HTTP REST API: Filter support v2 (#1890) Filter v2 rest api support implemented Filter rest api documentation updated with v1 and v2 interface support. Separated legacy filter rest interface Fix code and tests of v2 Filter rest api Filter v2 message push test added Applied autoshard to Filter V2 Redesigned FilterPushHandling, code style, catch up apps and tests with filter v2 interface changes Rename of FilterV1SubscriptionsRequest to FilterLegacySubscribeRequest, fix broken chat2 app, fix tests Changed Filter v2 push handler subscription to simple register Separate node's filterUnsubscribe and filterUnsubscribeAll --- apps/chat2/chat2.nim | 18 +- apps/chat2bridge/chat2bridge.nim | 4 +- apps/wakunode2/app.nim | 15 +- examples/filter_subscriber.nim | 8 +- tests/all_tests_waku.nim | 8 +- tests/test_peer_manager.nim | 56 +-- ...filter.nim => test_waku_filter_legacy.nim} | 0 ...er.nim => test_wakunode_filter_legacy.nim} | 2 +- tests/waku_filter_v2/client_utils.nim | 5 +- tests/waku_filter_v2/test_waku_client.nim | 28 +- tests/waku_filter_v2/test_waku_filter.nim | 98 +++-- tests/waku_store/test_wakunode_store.nim | 4 +- tests/wakunode_jsonrpc/test_jsonrpc_admin.nim | 6 +- .../wakunode_jsonrpc/test_jsonrpc_filter.nim | 2 +- tests/wakunode_rest/test_rest_filter.nim | 257 +++++++++---- .../wakunode_rest/test_rest_legacy_filter.nim | 191 ++++++++++ waku/README.md | 6 +- waku/node/jsonrpc/admin/handlers.nim | 4 +- waku/node/jsonrpc/filter/handlers.nim | 10 +- waku/node/message_cache.nim | 2 + waku/node/rest/filter/client.nim | 87 +++-- waku/node/rest/filter/handlers.nim | 293 ++++++++++++--- waku/node/rest/filter/legacy_client.nim | 68 ++++ waku/node/rest/filter/legacy_handlers.nim | 160 ++++++++ waku/node/rest/filter/openapi.yaml | 351 +++++++++++++++++- waku/node/rest/filter/types.nim | 208 ++++++++++- waku/node/waku_node.nim | 273 +++++++++++--- waku/waku_core/peers.nim | 7 +- waku/waku_filter/client.nim | 7 +- waku/waku_filter/protocol.nim | 8 +- waku/waku_filter_v2/client.nim | 48 ++- waku/waku_filter_v2/rpc.nim | 27 ++ 32 files changed, 1895 insertions(+), 366 deletions(-) rename tests/{test_waku_filter.nim => test_waku_filter_legacy.nim} (100%) rename tests/{test_wakunode_filter.nim => test_wakunode_filter_legacy.nim} (93%) create mode 100644 tests/wakunode_rest/test_rest_legacy_filter.nim create mode 100644 waku/node/rest/filter/legacy_client.nim create mode 100644 waku/node/rest/filter/legacy_handlers.nim diff --git a/apps/chat2/chat2.nim b/apps/chat2/chat2.nim index d7ebb3a916..2d0764392d 100644 --- a/apps/chat2/chat2.nim +++ b/apps/chat2/chat2.nim @@ -262,10 +262,12 @@ proc writeAndPrint(c: Chat) {.async.} = echo "You are now known as " & c.nick elif line.startsWith("/exit"): - if not c.node.wakuFilter.isNil(): + if not c.node.wakuFilterLegacy.isNil(): echo "unsubscribing from content filters..." - await c.node.unsubscribe(pubsubTopic=some(DefaultPubsubTopic), contentTopics=c.contentTopic) + let peerOpt = c.node.peerManager.selectPeer(WakuLegacyFilterCodec) + if peerOpt.isSome(): + await c.node.legacyFilterUnsubscribe(pubsubTopic=some(DefaultPubsubTopic), contentTopics=c.contentTopic, peer=peerOpt.get()) echo "quitting..." @@ -464,14 +466,18 @@ proc processInput(rfd: AsyncFD, rng: ref HmacDrbgContext) {.async.} = if peerInfo.isOk(): await node.mountFilter() await node.mountFilterClient() - node.peerManager.addServicePeer(peerInfo.value, WakuFilterCodec) + node.peerManager.addServicePeer(peerInfo.value, WakuLegacyFilterCodec) proc filterHandler(pubsubTopic: PubsubTopic, msg: WakuMessage) {.async, gcsafe, closure.} = trace "Hit filter handler", contentTopic=msg.contentTopic chat.printReceivedMessage(msg) - await node.subscribe(pubsubTopic=some(DefaultPubsubTopic), contentTopics=chat.contentTopic, filterHandler) - + await node.legacyFilterSubscribe(pubsubTopic=some(DefaultPubsubTopic), + contentTopics=chat.contentTopic, + filterHandler, + peerInfo.value) + # TODO: Here to support FilterV2 relevant subscription, but still + # Legacy Filter is concurrent to V2 untill legacy filter will be removed else: error "Filter not mounted. Couldn't parse conf.filternode", error = peerInfo.error @@ -485,7 +491,7 @@ proc processInput(rfd: AsyncFD, rng: ref HmacDrbgContext) {.async.} = chat.printReceivedMessage(msg) let topic = DefaultPubsubTopic - await node.subscribe(some(topic), @[ContentTopic("")], handler) + node.subscribe(topic, handler) if conf.rlnRelay: info "WakuRLNRelay is enabled" diff --git a/apps/chat2bridge/chat2bridge.nim b/apps/chat2bridge/chat2bridge.nim index 4c9f8ba48d..b67ee2be32 100644 --- a/apps/chat2bridge/chat2bridge.nim +++ b/apps/chat2bridge/chat2bridge.nim @@ -18,6 +18,7 @@ import ../../../waku/waku_node, ../../../waku/node/peer_manager, ../../waku/waku_filter, + ../../waku/waku_filter_v2, ../../waku/waku_store, # Chat 2 imports ../chat2/chat2, @@ -297,7 +298,8 @@ when isMainModule: if conf.filternode != "": let filterPeer = parsePeerInfo(conf.filternode) if filterPeer.isOk(): - bridge.nodev2.peerManager.addServicePeer(filterPeer.value, WakuFilterCodec) + bridge.nodev2.peerManager.addServicePeer(filterPeer.value, WakuLegacyFilterCodec) + bridge.nodev2.peerManager.addServicePeer(filterPeer.value, WakuFilterSubscribeCodec) else: error "Error parsing conf.filternode", error = filterPeer.error diff --git a/apps/wakunode2/app.nim b/apps/wakunode2/app.nim index c976e7de44..6cf55097b0 100644 --- a/apps/wakunode2/app.nim +++ b/apps/wakunode2/app.nim @@ -37,6 +37,8 @@ import ../../waku/waku_store, ../../waku/waku_lightpush, ../../waku/waku_filter, + ../../waku/waku_filter_v2, + ../../waku/waku_filter_v2/client as waku_filter_client, ./wakunode2_validator_signed, ./internal_config, ./external_config @@ -46,6 +48,7 @@ import ../../waku/node/rest/debug/handlers as rest_debug_api, ../../waku/node/rest/relay/handlers as rest_relay_api, ../../waku/node/rest/relay/topic_cache, + ../../waku/node/rest/filter/legacy_handlers as rest_legacy_filter_api, ../../waku/node/rest/filter/handlers as rest_filter_api, ../../waku/node/rest/store/handlers as rest_store_api, ../../waku/node/rest/health/handlers as rest_health_api, @@ -470,8 +473,9 @@ proc setupProtocols(node: WakuNode, if conf.filternode != "": let filterNode = parsePeerInfo(conf.filternode) if filterNode.isOk(): - await mountFilterClient(node) - node.peerManager.addServicePeer(filterNode.value, WakuFilterCodec) + await node.mountFilterClient() + node.peerManager.addServicePeer(filterNode.value, WakuLegacyFilterCodec) + node.peerManager.addServicePeer(filterNode.value, WakuFilterSubscribeCodec) else: return err("failed to set node waku filter peer: " & filterNode.error) @@ -577,8 +581,11 @@ proc startRestServer(app: App, address: ValidIpAddress, port: Port, conf: WakuNo ## Filter REST API if conf.filter: - let filterCache = rest_filter_api.MessageCache.init(capacity=rest_filter_api.filterMessageCacheDefaultCapacity) - installFilterApiHandlers(server.router, app.node, filterCache) + let legacyFilterCache = rest_legacy_filter_api.MessageCache.init() + rest_legacy_filter_api.installLegacyFilterRestApiHandlers(server.router, app.node, legacyFilterCache) + + let filterCache = rest_filter_api.MessageCache.init() + rest_filter_api.installFilterRestApiHandlers(server.router, app.node, filterCache) ## Store REST API installStoreApiHandlers(server.router, app.node) diff --git a/examples/filter_subscriber.nim b/examples/filter_subscriber.nim index 6c01ec6d0f..8b0a05c972 100644 --- a/examples/filter_subscriber.nim +++ b/examples/filter_subscriber.nim @@ -28,13 +28,15 @@ proc unsubscribe(wfc: WakuFilterClient, else: notice "unsubscribe request successful" -proc messagePushHandler(pubsubTopic: PubsubTopic, message: WakuMessage) = +proc messagePushHandler(pubsubTopic: PubsubTopic, message: WakuMessage) + {.async, gcsafe.} = let payloadStr = string.fromBytes(message.payload) notice "message received", payload=payloadStr, pubsubTopic=pubsubTopic, contentTopic=message.contentTopic, timestamp=message.timestamp + proc maintainSubscription(wfc: WakuFilterClient, filterPeer: RemotePeerInfo, filterPubsubTopic: PubsubTopic, @@ -68,11 +70,13 @@ proc setupAndSubscribe(rng: ref HmacDrbgContext) = var switch = newStandardSwitch() pm = PeerManager.new(switch) - wfc = WakuFilterClient.new(rng, messagePushHandler, pm) + wfc = WakuFilterClient.new(pm, rng) # Mount filter client protocol switch.mount(wfc) + wfc.registerPushHandler(messagePushHandler) + # Start maintaining subscription asyncSpawn maintainSubscription(wfc, filterPeer, FilterPubsubTopic, FilterContentTopic) diff --git a/tests/all_tests_waku.nim b/tests/all_tests_waku.nim index 0fc247807e..6e6cb60370 100644 --- a/tests/all_tests_waku.nim +++ b/tests/all_tests_waku.nim @@ -58,8 +58,8 @@ import ./test_waku_lightpush, ./test_wakunode_lightpush, # Waku Filter - ./test_waku_filter, - ./test_wakunode_filter, + ./test_waku_filter_legacy, + ./test_wakunode_filter_legacy, ./test_waku_peer_exchange, ./test_peer_store_extended, ./test_message_cache, @@ -95,7 +95,9 @@ import ./wakunode_rest/test_rest_relay, ./wakunode_rest/test_rest_relay_serdes, ./wakunode_rest/test_rest_serdes, - ./wakunode_rest/test_rest_store + ./wakunode_rest/test_rest_store, + ./wakunode_rest/test_rest_filter, + ./wakunode_rest/test_rest_legacy_filter import ./waku_rln_relay/test_waku_rln_relay, diff --git a/tests/test_peer_manager.nim b/tests/test_peer_manager.nim index 4b85babf7e..cbd6d7ac2d 100644 --- a/tests/test_peer_manager.nim +++ b/tests/test_peer_manager.nim @@ -52,7 +52,7 @@ procSuite "Peer Manager": await allFutures(nodes.mapIt(it.mountFilter())) # Dial node2 from node1 - let conn = await nodes[0].peerManager.dialPeer(nodes[1].peerInfo.toRemotePeerInfo(), WakuFilterCodec) + let conn = await nodes[0].peerManager.dialPeer(nodes[1].peerInfo.toRemotePeerInfo(), WakuLegacyFilterCodec) # Check connection check: conn.isSome() @@ -81,12 +81,12 @@ procSuite "Peer Manager": let nonExistentPeer = nonExistentPeerRes.value # Dial non-existent peer from node1 - let conn1 = await nodes[0].peerManager.dialPeer(nonExistentPeer, WakuFilterCodec) + let conn1 = await nodes[0].peerManager.dialPeer(nonExistentPeer, WakuLegacyFilterCodec) check: conn1.isNone() # Dial peer not supporting given protocol - let conn2 = await nodes[0].peerManager.dialPeer(nodes[1].peerInfo.toRemotePeerInfo(), WakuFilterCodec) + let conn2 = await nodes[0].peerManager.dialPeer(nodes[1].peerInfo.toRemotePeerInfo(), WakuLegacyFilterCodec) check: conn2.isNone() @@ -109,14 +109,14 @@ procSuite "Peer Manager": node.mountStoreClient() node.peerManager.addServicePeer(storePeer.toRemotePeerInfo(), WakuStoreCodec) - node.peerManager.addServicePeer(filterPeer.toRemotePeerInfo(), WakuFilterCodec) + node.peerManager.addServicePeer(filterPeer.toRemotePeerInfo(), WakuLegacyFilterCodec) # Check peers were successfully added to peer manager check: node.peerManager.peerStore.peers().len == 2 - node.peerManager.peerStore.peers(WakuFilterCodec).allIt(it.peerId == filterPeer.peerId and + node.peerManager.peerStore.peers(WakuLegacyFilterCodec).allIt(it.peerId == filterPeer.peerId and it.addrs.contains(filterLoc) and - it.protocols.contains(WakuFilterCodec)) + it.protocols.contains(WakuLegacyFilterCodec)) node.peerManager.peerStore.peers(WakuStoreCodec).allIt(it.peerId == storePeer.peerId and it.addrs.contains(storeLoc) and it.protocols.contains(WakuStoreCodec)) @@ -429,7 +429,7 @@ procSuite "Peer Manager": # service peers node.peerManager.addServicePeer(peers[0], WakuStoreCodec) - node.peerManager.addServicePeer(peers[1], WakuFilterCodec) + node.peerManager.addServicePeer(peers[1], WakuLegacyFilterCodec) node.peerManager.addServicePeer(peers[2], WakuLightPushCodec) node.peerManager.addServicePeer(peers[3], WakuPeerExchangeCodec) @@ -449,7 +449,7 @@ procSuite "Peer Manager": # all service peers are added to its service slot check: node.peerManager.serviceSlots[WakuStoreCodec].peerId == peers[0].peerId - node.peerManager.serviceSlots[WakuFilterCodec].peerId == peers[1].peerId + node.peerManager.serviceSlots[WakuLegacyFilterCodec].peerId == peers[1].peerId node.peerManager.serviceSlots[WakuLightPushCodec].peerId == peers[2].peerId node.peerManager.serviceSlots[WakuPeerExchangeCodec].peerId == peers[3].peerId @@ -474,11 +474,11 @@ procSuite "Peer Manager": (await nodes[0].peerManager.connectRelay(pInfos[2])) == true (await nodes[1].peerManager.connectRelay(pInfos[2])) == true - (await nodes[0].peerManager.dialPeer(pInfos[1], WakuFilterCodec)).isSome() == true - (await nodes[0].peerManager.dialPeer(pInfos[2], WakuFilterCodec)).isSome() == true + (await nodes[0].peerManager.dialPeer(pInfos[1], WakuLegacyFilterCodec)).isSome() == true + (await nodes[0].peerManager.dialPeer(pInfos[2], WakuLegacyFilterCodec)).isSome() == true # isolated dial creates a relay conn under the hood (libp2p behaviour) - (await nodes[2].peerManager.dialPeer(pInfos[3], WakuFilterCodec)).isSome() == true + (await nodes[2].peerManager.dialPeer(pInfos[3], WakuLegacyFilterCodec)).isSome() == true # assert physical connections @@ -486,26 +486,26 @@ procSuite "Peer Manager": nodes[0].peerManager.connectedPeers(WakuRelayCodec)[0].len == 0 nodes[0].peerManager.connectedPeers(WakuRelayCodec)[1].len == 2 - nodes[0].peerManager.connectedPeers(WakuFilterCodec)[0].len == 0 - nodes[0].peerManager.connectedPeers(WakuFilterCodec)[1].len == 2 + nodes[0].peerManager.connectedPeers(WakuLegacyFilterCodec)[0].len == 0 + nodes[0].peerManager.connectedPeers(WakuLegacyFilterCodec)[1].len == 2 nodes[1].peerManager.connectedPeers(WakuRelayCodec)[0].len == 1 nodes[1].peerManager.connectedPeers(WakuRelayCodec)[1].len == 1 - nodes[1].peerManager.connectedPeers(WakuFilterCodec)[0].len == 1 - nodes[1].peerManager.connectedPeers(WakuFilterCodec)[1].len == 0 + nodes[1].peerManager.connectedPeers(WakuLegacyFilterCodec)[0].len == 1 + nodes[1].peerManager.connectedPeers(WakuLegacyFilterCodec)[1].len == 0 nodes[2].peerManager.connectedPeers(WakuRelayCodec)[0].len == 2 nodes[2].peerManager.connectedPeers(WakuRelayCodec)[1].len == 1 - nodes[2].peerManager.connectedPeers(WakuFilterCodec)[0].len == 1 - nodes[2].peerManager.connectedPeers(WakuFilterCodec)[1].len == 1 + nodes[2].peerManager.connectedPeers(WakuLegacyFilterCodec)[0].len == 1 + nodes[2].peerManager.connectedPeers(WakuLegacyFilterCodec)[1].len == 1 nodes[3].peerManager.connectedPeers(WakuRelayCodec)[0].len == 1 nodes[3].peerManager.connectedPeers(WakuRelayCodec)[1].len == 0 - nodes[3].peerManager.connectedPeers(WakuFilterCodec)[0].len == 1 - nodes[3].peerManager.connectedPeers(WakuFilterCodec)[1].len == 0 + nodes[3].peerManager.connectedPeers(WakuLegacyFilterCodec)[0].len == 1 + nodes[3].peerManager.connectedPeers(WakuLegacyFilterCodec)[1].len == 0 asyncTest "getNumStreams() returns expected number of connections per protocol": # Create 2 nodes @@ -521,17 +521,17 @@ procSuite "Peer Manager": require: # multiple streams are multiplexed over a single connection. # note that a relay connection is created under the hood when dialing a peer (libp2p behaviour) - (await nodes[0].peerManager.dialPeer(pInfos[1], WakuFilterCodec)).isSome() == true - (await nodes[0].peerManager.dialPeer(pInfos[1], WakuFilterCodec)).isSome() == true - (await nodes[0].peerManager.dialPeer(pInfos[1], WakuFilterCodec)).isSome() == true - (await nodes[0].peerManager.dialPeer(pInfos[1], WakuFilterCodec)).isSome() == true + (await nodes[0].peerManager.dialPeer(pInfos[1], WakuLegacyFilterCodec)).isSome() == true + (await nodes[0].peerManager.dialPeer(pInfos[1], WakuLegacyFilterCodec)).isSome() == true + (await nodes[0].peerManager.dialPeer(pInfos[1], WakuLegacyFilterCodec)).isSome() == true + (await nodes[0].peerManager.dialPeer(pInfos[1], WakuLegacyFilterCodec)).isSome() == true check: nodes[0].peerManager.getNumStreams(WakuRelayCodec) == (1, 1) - nodes[0].peerManager.getNumStreams(WakuFilterCodec) == (0, 4) + nodes[0].peerManager.getNumStreams(WakuLegacyFilterCodec) == (0, 4) nodes[1].peerManager.getNumStreams(WakuRelayCodec) == (1, 1) - nodes[1].peerManager.getNumStreams(WakuFilterCodec) == (4, 0) + nodes[1].peerManager.getNumStreams(WakuLegacyFilterCodec) == (4, 0) test "selectPeer() returns the correct peer": # Valid peer id missing the last digit @@ -552,7 +552,7 @@ procSuite "Peer Manager": # Add a peer[0] to the peerstore pm.peerStore[AddressBook][peers[0].peerId] = peers[0].addrs - pm.peerStore[ProtoBook][peers[0].peerId] = @[WakuRelayCodec, WakuStoreCodec, WakuFilterCodec] + pm.peerStore[ProtoBook][peers[0].peerId] = @[WakuRelayCodec, WakuStoreCodec, WakuLegacyFilterCodec] # When no service peers, we get one from the peerstore let selectedPeer1 = pm.selectPeer(WakuStoreCodec) @@ -561,7 +561,7 @@ procSuite "Peer Manager": selectedPeer1.get().peerId == peers[0].peerId # Same for other protocol - let selectedPeer2 = pm.selectPeer(WakuFilterCodec) + let selectedPeer2 = pm.selectPeer(WakuLegacyFilterCodec) check: selectedPeer2.isSome() == true selectedPeer2.get().peerId == peers[0].peerId @@ -757,7 +757,7 @@ procSuite "Peer Manager": discard await nodes[0].peerManager.connectRelay(pInfos[3]) discard await nodes[0].peerManager.connectRelay(pInfos[4]) - # they are also prunned  + # they are also prunned check nodes[0].peerManager.switch.connManager.getConnections().len == 1 # we should have 4 peers (2in/2out) but due to collocation limit diff --git a/tests/test_waku_filter.nim b/tests/test_waku_filter_legacy.nim similarity index 100% rename from tests/test_waku_filter.nim rename to tests/test_waku_filter_legacy.nim diff --git a/tests/test_wakunode_filter.nim b/tests/test_wakunode_filter_legacy.nim similarity index 93% rename from tests/test_wakunode_filter.nim rename to tests/test_wakunode_filter_legacy.nim index 4ea7750ecc..e0fd530392 100644 --- a/tests/test_wakunode_filter.nim +++ b/tests/test_wakunode_filter_legacy.nim @@ -44,7 +44,7 @@ suite "WakuNode - Filter": filterPushHandlerFut.complete((pubsubTopic, msg)) ## When - await client.filterSubscribe(some(pubsubTopic), contentTopic, filterPushHandler, peer=serverPeerInfo) + await client.legacyFilterSubscribe(some(pubsubTopic), contentTopic, filterPushHandler, peer=serverPeerInfo) # Wait for subscription to take effect waitFor sleepAsync(100.millis) diff --git a/tests/waku_filter_v2/client_utils.nim b/tests/waku_filter_v2/client_utils.nim index 95d3d5c463..e42076ace0 100644 --- a/tests/waku_filter_v2/client_utils.nim +++ b/tests/waku_filter_v2/client_utils.nim @@ -1,6 +1,5 @@ import std/[options,tables], - testutils/unittests, chronos, chronicles @@ -22,10 +21,10 @@ proc newTestWakuFilter*(switch: Switch): Future[WakuFilter] {.async.} = return proto -proc newTestWakuFilterClient*(switch: Switch, messagePushHandler: MessagePushHandler): Future[WakuFilterClient] {.async.} = +proc newTestWakuFilterClient*(switch: Switch): Future[WakuFilterClient] {.async.} = let peerManager = PeerManager.new(switch) - proto = WakuFilterClient.new(rng, messagePushHandler, peerManager) + proto = WakuFilterClient.new(peerManager, rng) await proto.start() switch.mount(proto) diff --git a/tests/waku_filter_v2/test_waku_client.nim b/tests/waku_filter_v2/test_waku_client.nim index 398bcddebd..f4cae3ed84 100644 --- a/tests/waku_filter_v2/test_waku_client.nim +++ b/tests/waku_filter_v2/test_waku_client.nim @@ -3,16 +3,13 @@ import std/[options,tables], testutils/unittests, - chronos, - chronicles, - libp2p/peerstore + chronos import - ../../../waku/node/peer_manager, - ../../../waku/waku_filter_v2, - ../../../waku/waku_filter_v2/client, - ../../../waku/waku_core, - ../testlib/common, + ../../waku/node/peer_manager, + ../../waku/waku_filter_v2, + ../../waku/waku_filter_v2/client, + ../../waku/waku_core, ../testlib/wakucore, ../testlib/testasync, ./client_utils.nim @@ -28,26 +25,23 @@ suite "Waku Filter": var contentTopics {.threadvar.}: seq[ContentTopic] asyncSetup: - let - voidHandler: MessagePushHandler = proc(pubsubTopic: PubsubTopic, message: WakuMessage) = - discard pubsubTopic = DefaultPubsubTopic contentTopics = @[DefaultContentTopic] serverSwitch = newStandardSwitch() clientSwitch = newStandardSwitch() wakuFilter = await newTestWakuFilter(serverSwitch) - wakuFilterClient = await newTestWakuFilterClient(clientSwitch, voidHandler) - + wakuFilterClient = await newTestWakuFilterClient(clientSwitch) + await allFutures(serverSwitch.start(), clientSwitch.start()) serverRemotePeerInfo = serverSwitch.peerInfo.toRemotePeerInfo() - + asyncTeardown: await allFutures(wakuFilter.stop(), wakuFilterClient.stop(), serverSwitch.stop(), clientSwitch.stop()) asyncTest "Active Subscription Identification": # Given - let + let clientPeerId = clientSwitch.peerInfo.toRemotePeerInfo().peerId subscribeResponse = await wakuFilterClient.subscribe( serverRemotePeerInfo, pubsubTopic, contentTopics @@ -75,12 +69,12 @@ suite "Waku Filter": asyncTest "After Unsubscription": # Given - let + let clientPeerId = clientSwitch.peerInfo.toRemotePeerInfo().peerId subscribeResponse = await wakuFilterClient.subscribe( serverRemotePeerInfo, pubsubTopic, contentTopics ) - + require: subscribeResponse.isOk() wakuFilter.subscriptions.hasKey(clientPeerId) diff --git a/tests/waku_filter_v2/test_waku_filter.nim b/tests/waku_filter_v2/test_waku_filter.nim index 76c90e4fb8..fe04d012f4 100644 --- a/tests/waku_filter_v2/test_waku_filter.nim +++ b/tests/waku_filter_v2/test_waku_filter.nim @@ -3,16 +3,13 @@ import std/[options,tables], testutils/unittests, - chronos, - chronicles, - libp2p/peerstore + chronos import - ../../../waku/node/peer_manager, - ../../../waku/waku_filter_v2, - ../../../waku/waku_filter_v2/client, - ../../../waku/waku_core, - ../testlib/common, + ../../waku/node/peer_manager, + ../../waku/waku_filter_v2, + ../../waku/waku_filter_v2/client, + ../../waku/waku_core, ../testlib/wakucore, ./client_utils.nim @@ -22,21 +19,29 @@ suite "Waku Filter - end to end": # Given var pushHandlerFuture = newFuture[(string, WakuMessage)]() - messagePushHandler: MessagePushHandler = proc(pubsubTopic: PubsubTopic, message: WakuMessage) = + messagePushHandler: FilterPushHandler = proc(pubsubTopic: PubsubTopic, + message: WakuMessage): + Future[void] + {.async, closure, gcsafe.} = pushHandlerFuture.complete((pubsubTopic, message)) let serverSwitch = newStandardSwitch() clientSwitch = newStandardSwitch() wakuFilter = await newTestWakuFilter(serverSwitch) - wakuFilterClient = await newTestWakuFilterClient(clientSwitch, messagePushHandler) + wakuFilterClient = await newTestWakuFilterClient(clientSwitch) clientPeerId = clientSwitch.peerInfo.peerId pubsubTopic = DefaultPubsubTopic contentTopics = @[DefaultContentTopic] # When await allFutures(serverSwitch.start(), clientSwitch.start()) - let response = await wakuFilterClient.subscribe(serverSwitch.peerInfo.toRemotePeerInfo(), pubsubTopic, contentTopics) + + wakuFilterClient.registerPushHandler(messagePushHandler) + + let response = await wakuFilterClient.subscribe(serverSwitch.peerInfo.toRemotePeerInfo(), + pubsubTopic, + contentTopics) # Then check: @@ -57,7 +62,9 @@ suite "Waku Filter - end to end": pushedMsg == msg1 # When - let response2 = await wakuFilterClient.unsubscribe(serverSwitch.peerInfo.toRemotePeerInfo(), pubsubTopic, contentTopics) + let response2 = await wakuFilterClient.unsubscribe(serverSwitch.peerInfo.toRemotePeerInfo(), + pubsubTopic, + contentTopics) # Then check: @@ -74,20 +81,24 @@ suite "Waku Filter - end to end": not (await pushHandlerFuture.withTimeout(2.seconds)) # No message should be pushed # Teardown - await allFutures(wakuFilter.stop(), wakuFilterClient.stop(), serverSwitch.stop(), clientSwitch.stop()) + await allFutures(wakuFilter.stop(), wakuFilterClient.stop(), + serverSwitch.stop(), clientSwitch.stop()) asyncTest "subscribe, unsubscribe multiple content topics": # Given var pushHandlerFuture = newFuture[(string, WakuMessage)]() - messagePushHandler: MessagePushHandler = proc(pubsubTopic: PubsubTopic, message: WakuMessage) = + messagePushHandler: FilterPushHandler = proc(pubsubTopic: PubsubTopic, + message: WakuMessage): + Future[void] + {.async, closure, gcsafe.} = pushHandlerFuture.complete((pubsubTopic, message)) let serverSwitch = newStandardSwitch() clientSwitch = newStandardSwitch() wakuFilter = await newTestWakuFilter(serverSwitch) - wakuFilterClient = await newTestWakuFilterClient(clientSwitch, messagePushHandler) + wakuFilterClient = await newTestWakuFilterClient(clientSwitch) clientPeerId = clientSwitch.peerInfo.peerId pubsubTopic = DefaultPubsubTopic contentTopic2 = ContentTopic("/waku/2/non-default-content/proto") @@ -95,7 +106,12 @@ suite "Waku Filter - end to end": # When await allFutures(serverSwitch.start(), clientSwitch.start()) - let response = await wakuFilterClient.subscribe(serverSwitch.peerInfo.toRemotePeerInfo(), pubsubTopic, contentTopics) + + wakuFilterClient.registerPushHandler(messagePushHandler) + + let response = await wakuFilterClient.subscribe(serverSwitch.peerInfo.toRemotePeerInfo(), + pubsubTopic, + contentTopics) # Then check: @@ -129,7 +145,9 @@ suite "Waku Filter - end to end": pushedMsg2 == msg2 # When - let response2 = await wakuFilterClient.unsubscribe(serverSwitch.peerInfo.toRemotePeerInfo(), pubsubTopic, @[contentTopic2]) # Unsubscribe only one content topic + let response2 = await wakuFilterClient.unsubscribe(serverSwitch.peerInfo.toRemotePeerInfo(), + pubsubTopic, + @[contentTopic2]) # Unsubscribe only one content topic # Then check: @@ -159,20 +177,24 @@ suite "Waku Filter - end to end": not (await pushHandlerFuture.withTimeout(2.seconds)) # No message should be pushed # Teardown - await allFutures(wakuFilter.stop(), wakuFilterClient.stop(), serverSwitch.stop(), clientSwitch.stop()) + await allFutures(wakuFilter.stop(), wakuFilterClient.stop(), + serverSwitch.stop(), clientSwitch.stop()) asyncTest "subscribe to multiple content topics and unsubscribe all": # Given var pushHandlerFuture = newFuture[(string, WakuMessage)]() - messagePushHandler: MessagePushHandler = proc(pubsubTopic: PubsubTopic, message: WakuMessage) = + messagePushHandler: FilterPushHandler = proc(pubsubTopic: PubsubTopic, + message: WakuMessage): + Future[void] + {.async, closure, gcsafe.} = pushHandlerFuture.complete((pubsubTopic, message)) let serverSwitch = newStandardSwitch() clientSwitch = newStandardSwitch() wakuFilter = await newTestWakuFilter(serverSwitch) - wakuFilterClient = await newTestWakuFilterClient(clientSwitch, messagePushHandler) + wakuFilterClient = await newTestWakuFilterClient(clientSwitch) clientPeerId = clientSwitch.peerInfo.peerId pubsubTopic = DefaultPubsubTopic contentTopic2 = ContentTopic("/waku/2/non-default-content/proto") @@ -180,7 +202,12 @@ suite "Waku Filter - end to end": # When await allFutures(serverSwitch.start(), clientSwitch.start()) - let response = await wakuFilterClient.subscribe(serverSwitch.peerInfo.toRemotePeerInfo(), pubsubTopic, contentTopics) + + wakuFilterClient.registerPushHandler(messagePushHandler) + + let response = await wakuFilterClient.subscribe(serverSwitch.peerInfo.toRemotePeerInfo(), + pubsubTopic, + contentTopics) # Then check: @@ -234,20 +261,24 @@ suite "Waku Filter - end to end": not (await pushHandlerFuture.withTimeout(2.seconds)) # Neither message should be pushed # Teardown - await allFutures(wakuFilter.stop(), wakuFilterClient.stop(), serverSwitch.stop(), clientSwitch.stop()) + await allFutures(wakuFilter.stop(), wakuFilterClient.stop(), + serverSwitch.stop(), clientSwitch.stop()) asyncTest "subscribe, unsubscribe multiple pubsub topics and content topics": # Given var pushHandlerFuture = newFuture[(string, WakuMessage)]() - messagePushHandler: MessagePushHandler = proc(pubsubTopic: PubsubTopic, message: WakuMessage) = + messagePushHandler: FilterPushHandler = proc(pubsubTopic: PubsubTopic, + message: WakuMessage): + Future[void] + {.async, closure, gcsafe.} = pushHandlerFuture.complete((pubsubTopic, message)) let serverSwitch = newStandardSwitch() clientSwitch = newStandardSwitch() wakuFilter = await newTestWakuFilter(serverSwitch) - wakuFilterClient = await newTestWakuFilterClient(clientSwitch, messagePushHandler) + wakuFilterClient = await newTestWakuFilterClient(clientSwitch) clientPeerId = clientSwitch.peerInfo.peerId pubsubTopic = DefaultPubsubTopic pubsubTopic2 = PubsubTopic("/waku/2/non-default-pubsub/proto") @@ -258,9 +289,17 @@ suite "Waku Filter - end to end": # When await allFutures(serverSwitch.start(), clientSwitch.start()) + + wakuFilterClient.registerPushHandler(messagePushHandler) + let - response1 = await wakuFilterClient.subscribe(serverSwitch.peerInfo.toRemotePeerInfo(), pubsubTopic, contentTopics) - response2 = await wakuFilterClient.subscribe(serverSwitch.peerInfo.toRemotePeerInfo(), pubsubTopic2, contentTopics) + response1 = await wakuFilterClient.subscribe(serverSwitch.peerInfo.toRemotePeerInfo(), + pubsubTopic, + contentTopics) + + response2 = await wakuFilterClient.subscribe(serverSwitch.peerInfo.toRemotePeerInfo(), + pubsubTopic2, + contentTopics) # Then check: @@ -299,7 +338,9 @@ suite "Waku Filter - end to end": ## Step 3: We can selectively unsubscribe from pubsub topics and content topic(s) # When - let response3 = await wakuFilterClient.unsubscribe(serverSwitch.peerInfo.toRemotePeerInfo(), pubsubTopic2, @[contentTopic2]) + let response3 = await wakuFilterClient.unsubscribe(serverSwitch.peerInfo.toRemotePeerInfo(), + pubsubTopic2, + @[contentTopic2]) require response3.isOk() let msg3 = fakeWakuMessage(contentTopic=contentTopic2) @@ -325,4 +366,5 @@ suite "Waku Filter - end to end": pushedMsg3 == msg3 # Teardown - await allFutures(wakuFilter.stop(), wakuFilterClient.stop(), serverSwitch.stop(), clientSwitch.stop()) + await allFutures(wakuFilter.stop(), wakuFilterClient.stop(), + serverSwitch.stop(), clientSwitch.stop()) diff --git a/tests/waku_store/test_wakunode_store.nim b/tests/waku_store/test_wakunode_store.nim index 6d01c36eea..117a1cc93b 100644 --- a/tests/waku_store/test_wakunode_store.nim +++ b/tests/waku_store/test_wakunode_store.nim @@ -216,7 +216,7 @@ procSuite "WakuNode - Store": let mountArchiveRes = server.mountArchive(driver) assert mountArchiveRes.isOk(), mountArchiveRes.error - + waitFor server.mountStore() waitFor server.mountFilterClient() client.mountStoreClient() @@ -232,7 +232,7 @@ procSuite "WakuNode - Store": proc filterHandler(pubsubTopic: PubsubTopic, msg: WakuMessage) {.async, gcsafe, closure.} = filterFut.complete((pubsubTopic, msg)) - waitFor server.filterSubscribe(some(DefaultPubsubTopic), DefaultContentTopic, filterHandler, peer=filterSourcePeer) + waitFor server.legacyFilterSubscribe(some(DefaultPubsubTopic), DefaultContentTopic, filterHandler, peer=filterSourcePeer) waitFor sleepAsync(100.millis) diff --git a/tests/wakunode_jsonrpc/test_jsonrpc_admin.nim b/tests/wakunode_jsonrpc/test_jsonrpc_admin.nim index 1a4823fd36..e4e8c09e69 100644 --- a/tests/wakunode_jsonrpc/test_jsonrpc_admin.nim +++ b/tests/wakunode_jsonrpc/test_jsonrpc_admin.nim @@ -169,11 +169,11 @@ procSuite "Waku v2 JSON-RPC API - Admin": filterPeer = PeerInfo.new(generateEcdsaKey(), @[locationAddr]) storePeer = PeerInfo.new(generateEcdsaKey(), @[locationAddr]) - node.peerManager.addServicePeer(filterPeer.toRemotePeerInfo(), WakuFilterCodec) + node.peerManager.addServicePeer(filterPeer.toRemotePeerInfo(), WakuLegacyFilterCodec) node.peerManager.addServicePeer(storePeer.toRemotePeerInfo(), WakuStoreCodec) # Mock that we connected in the past so Identify populated this - node.peerManager.peerStore[ProtoBook][filterPeer.peerId] = @[WakuFilterCodec] + node.peerManager.peerStore[ProtoBook][filterPeer.peerId] = @[WakuLegacyFilterCodec] node.peerManager.peerStore[ProtoBook][storePeer.peerId] = @[WakuStoreCodec] let response = await client.get_waku_v2_admin_v1_peers() @@ -182,7 +182,7 @@ procSuite "Waku v2 JSON-RPC API - Admin": check: response.len == 2 # Check filter peer - (response.filterIt(it.protocol == WakuFilterCodec)[0]).multiaddr == constructMultiaddrStr(filterPeer) + (response.filterIt(it.protocol == WakuLegacyFilterCodec)[0]).multiaddr == constructMultiaddrStr(filterPeer) # Check store peer (response.filterIt(it.protocol == WakuStoreCodec)[0]).multiaddr == constructMultiaddrStr(storePeer) diff --git a/tests/wakunode_jsonrpc/test_jsonrpc_filter.nim b/tests/wakunode_jsonrpc/test_jsonrpc_filter.nim index 17202df4ee..8b2e43c9ae 100644 --- a/tests/wakunode_jsonrpc/test_jsonrpc_filter.nim +++ b/tests/wakunode_jsonrpc/test_jsonrpc_filter.nim @@ -41,7 +41,7 @@ procSuite "Waku v2 JSON-RPC API - Filter": await node1.mountFilter() await node2.mountFilterClient() - node2.peerManager.addServicePeer(node1.peerInfo.toRemotePeerInfo(), WakuFilterCodec) + node2.peerManager.addServicePeer(node1.peerInfo.toRemotePeerInfo(), WakuLegacyFilterCodec) # RPC server setup let diff --git a/tests/wakunode_rest/test_rest_filter.nim b/tests/wakunode_rest/test_rest_filter.nim index e4276fa3b5..c13cd08b0e 100644 --- a/tests/wakunode_rest/test_rest_filter.nim +++ b/tests/wakunode_rest/test_rest_filter.nim @@ -21,6 +21,11 @@ import ../../waku/node/rest/filter/handlers as filter_api, ../../waku/node/rest/filter/client as filter_api_client, ../../waku/waku_relay, + ../../waku/waku_filter_v2/subscriptions, + ../../waku/waku_filter_v2/common, + ../../waku/node/rest/relay/topic_cache, + ../../waku/node/rest/relay/handlers as relay_api, + ../../waku/node/rest/relay/client as relay_api_client, ../testlib/wakucore, ../testlib/wakunode @@ -36,51 +41,64 @@ proc testWakuNode(): WakuNode = type RestFilterTest = object - node1: WakuNode - node2: WakuNode + serviceNode: WakuNode + subscriberNode: WakuNode restServer: RestServerRef + restServerForService: RestServerRef messageCache: filter_api.MessageCache client: RestClientRef + clientTwdServiceNode: RestClientRef -proc setupRestFilter(): Future[RestFilterTest] {.async.} = - result.node1 = testWakuNode() - result.node2 = testWakuNode() +proc init(T: type RestFilterTest): Future[T] {.async.} = + var testSetup = RestFilterTest() + testSetup.serviceNode = testWakuNode() + testSetup.subscriberNode = testWakuNode() - await allFutures(result.node1.start(), result.node2.start()) + await allFutures(testSetup.serviceNode.start(), testSetup.subscriberNode.start()) - await result.node1.mountFilter() - await result.node2.mountFilterClient() + await testSetup.serviceNode.mountRelay() + await testSetup.serviceNode.mountFilter() + await testSetup.subscriberNode.mountFilterClient() - result.node2.peerManager.addServicePeer(result.node1.peerInfo.toRemotePeerInfo(), WakuFilterCodec) + testSetup.subscriberNode.peerManager.addServicePeer(testSetup.serviceNode.peerInfo.toRemotePeerInfo(), WakuFilterSubscribeCodec) let restPort = Port(58011) - let restAddress = ValidIpAddress.init("0.0.0.0") - result.restServer = RestServerRef.init(restAddress, restPort).tryGet() + let restAddress = ValidIpAddress.init("127.0.0.1") + testSetup.restServer = RestServerRef.init(restAddress, restPort).tryGet() - result.messageCache = filter_api.MessageCache.init(capacity=filter_api.filterMessageCacheDefaultCapacity) + let restPort2 = Port(58012) + testSetup.restServerForService = RestServerRef.init(restAddress, restPort2).tryGet() - installFilterPostSubscriptionsV1Handler(result.restServer.router, result.node2, result.messageCache) - installFilterDeleteSubscriptionsV1Handler(result.restServer.router, result.node2, result.messageCache) - installFilterGetMessagesV1Handler(result.restServer.router, result.node2, result.messageCache) + # through this one we will see if messages are pushed according to our content topic sub + testSetup.messageCache = filter_api.MessageCache.init() + installFilterRestApiHandlers(testSetup.restServer.router, testSetup.subscriberNode, testSetup.messageCache) - result.restServer.start() + let topicCache = TopicCache.init() + installRelayApiHandlers(testSetup.restServerForService.router, testSetup.serviceNode, topicCache) - result.client = newRestHttpClient(initTAddress(restAddress, restPort)) + testSetup.restServer.start() + testSetup.restServerForService.start() - return result + testSetup.client = newRestHttpClient(initTAddress(restAddress, restPort)) + testSetup.clientTwdServiceNode = newRestHttpClient(initTAddress(restAddress, restPort2)) + + return testSetup proc shutdown(self: RestFilterTest) {.async.} = await self.restServer.stop() await self.restServer.closeWait() - await allFutures(self.node1.stop(), self.node2.stop()) + await self.restServerForService.stop() + await self.restServerForService.closeWait() + await allFutures(self.serviceNode.stop(), self.subscriberNode.stop()) -suite "Waku v2 Rest API - Filter": - asyncTest "Subscribe a node to an array of topics - POST /filter/v1/subscriptions": +suite "Waku v2 Rest API - Filter V2": + asyncTest "Subscribe a node to an array of topics - POST /filter/v2/subscriptions": # Given - let restFilterTest: RestFilterTest = await setupRestFilter() + let restFilterTest = await RestFilterTest.init() + let subPeerId = restFilterTest.subscriberNode.peerInfo.toRemotePeerInfo().peerId # When let contentFilters = @[DefaultContentTopic @@ -89,103 +107,178 @@ suite "Waku v2 Rest API - Filter": ,ContentTopic("4") ] - let requestBody = FilterSubscriptionsRequest(contentFilters: contentFilters, + let requestBody = FilterSubscribeRequest(requestId: "1234", + contentFilters: contentFilters, pubsubTopic: some(DefaultPubsubTopic)) - let response = await restFilterTest.client.filterPostSubscriptionsV1(requestBody) + let response = await restFilterTest.client.filterPostSubscriptions(requestBody) + + echo "response", $response + + let subscribedPeer1 = restFilterTest.serviceNode.wakuFilter.subscriptions.findSubscribedPeers(DefaultPubsubTopic, DefaultContentTopic) + let subscribedPeer2 = restFilterTest.serviceNode.wakuFilter.subscriptions.findSubscribedPeers(DefaultPubsubTopic, "2") + let subscribedPeer3 = restFilterTest.serviceNode.wakuFilter.subscriptions.findSubscribedPeers(DefaultPubsubTopic, "3") + let subscribedPeer4 = restFilterTest.serviceNode.wakuFilter.subscriptions.findSubscribedPeers(DefaultPubsubTopic, "4") # Then check: response.status == 200 - $response.contentType == $MIMETYPE_TEXT - response.data == "OK" - - check: - restFilterTest.messageCache.isSubscribed(DefaultContentTopic) - restFilterTest.messageCache.isSubscribed("2") - restFilterTest.messageCache.isSubscribed("3") - restFilterTest.messageCache.isSubscribed("4") + $response.contentType == $MIMETYPE_JSON + response.data.requestId == "1234" + subscribedPeer1.len() == 1 + subPeerId in subscribedPeer1 + subPeerId in subscribedPeer2 + subPeerId in subscribedPeer3 + subPeerId in subscribedPeer4 # When - error case - let badRequestBody = FilterSubscriptionsRequest(contentFilters: @[], pubsubTopic: none(string)) - let badResponse = await restFilterTest.client.filterPostSubscriptionsV1(badRequestBody) + let badRequestBody = FilterSubscribeRequest(requestId: "4567", contentFilters: @[], pubsubTopic: none(string)) + let badRequestResp = await restFilterTest.client.filterPostSubscriptions(badRequestBody) check: - badResponse.status == 400 - $badResponse.contentType == $MIMETYPE_TEXT - badResponse.data == "Invalid content body, could not decode. Unable to deserialize data" - + badRequestResp.status == 400 + $badRequestResp.contentType == $MIMETYPE_JSON + badRequestResp.data.requestId == "unknown" + # badRequestResp.data.statusDesc == "*********" + badRequestResp.data.statusDesc.startsWith("BAD_REQUEST: Failed to decode request") await restFilterTest.shutdown() - - asyncTest "Unsubscribe a node from an array of topics - DELETE /filter/v1/subscriptions": + asyncTest "Unsubscribe a node from an array of topics - DELETE /filter/v2/subscriptions": # Given let - restFilterTest: RestFilterTest = await setupRestFilter() + restFilterTest = await RestFilterTest.init() + subPeerId = restFilterTest.subscriberNode.peerInfo.toRemotePeerInfo().peerId # When - restFilterTest.messageCache.subscribe("1") - restFilterTest.messageCache.subscribe("2") - restFilterTest.messageCache.subscribe("3") - restFilterTest.messageCache.subscribe("4") + var requestBody = FilterSubscribeRequest(requestId: "1234", + contentFilters: @[ContentTopic("1") + ,ContentTopic("2") + ,ContentTopic("3") + ,ContentTopic("4") + ], + pubsubTopic: some(DefaultPubsubTopic)) + discard await restFilterTest.client.filterPostSubscriptions(requestBody) let contentFilters = @[ContentTopic("1") - ,ContentTopic("2") - ,ContentTopic("3") - # ,ContentTopic("4") # Keep this subscription for check - ] + ,ContentTopic("2") + ,ContentTopic("3") + # ,ContentTopic("4") # Keep this subscription for check + ] - # When - let requestBody = FilterSubscriptionsRequest(contentFilters: contentFilters, - pubsubTopic: some(DefaultPubsubTopic)) - let response = await restFilterTest.client.filterDeleteSubscriptionsV1(requestBody) + let requestBodyUnsub = FilterUnsubscribeRequest(requestId: "4321", + contentFilters: contentFilters, + pubsubTopic: some(DefaultPubsubTopic)) + let response = await restFilterTest.client.filterDeleteSubscriptions(requestBodyUnsub) + + let subscribedPeer1 = restFilterTest.serviceNode.wakuFilter.subscriptions.findSubscribedPeers(DefaultPubsubTopic, DefaultContentTopic) + let subscribedPeer2 = restFilterTest.serviceNode.wakuFilter.subscriptions.findSubscribedPeers(DefaultPubsubTopic, "2") + let subscribedPeer3 = restFilterTest.serviceNode.wakuFilter.subscriptions.findSubscribedPeers(DefaultPubsubTopic, "3") + let subscribedPeer4 = restFilterTest.serviceNode.wakuFilter.subscriptions.findSubscribedPeers(DefaultPubsubTopic, "4") # Then check: response.status == 200 - $response.contentType == $MIMETYPE_TEXT - response.data == "OK" + $response.contentType == $MIMETYPE_JSON + response.data.requestId == "4321" + subscribedPeer1.len() == 0 + subPeerId notin subscribedPeer1 + subPeerId notin subscribedPeer2 + subPeerId notin subscribedPeer3 + subscribedPeer4.len() == 1 + subPeerId in subscribedPeer4 + + # When - error case + let requestBodyUnsubAll = FilterUnsubscribeAllRequest(requestId: "2143") + let responseUnsubAll = await restFilterTest.client.filterDeleteAllSubscriptions(requestBodyUnsubAll) + + let subscribedPeer = restFilterTest.serviceNode.wakuFilter.subscriptions.findSubscribedPeers(DefaultPubsubTopic, "4") check: - not restFilterTest.messageCache.isSubscribed("1") - not restFilterTest.messageCache.isSubscribed("2") - not restFilterTest.messageCache.isSubscribed("3") - restFilterTest.messageCache.isSubscribed("4") + responseUnsubAll.status == 200 + $responseUnsubAll.contentType == $MIMETYPE_JSON + responseUnsubAll.data.requestId == "2143" + subscribedPeer.len() == 0 await restFilterTest.shutdown() - - asyncTest "Get the latest messages for topic - GET /filter/v1/messages/{contentTopic}": + asyncTest "ping subscribed node - GET /filter/v2/subscriptions/{requestId}": # Given - let - restFilterTest = await setupRestFilter() + restFilterTest = await RestFilterTest.init() + subPeerId = restFilterTest.subscriberNode.peerInfo.toRemotePeerInfo().peerId - let pubSubTopic = "/waku/2/default-waku/proto" - let contentTopic = ContentTopic( "content-topic-x" ) + # When + var requestBody = FilterSubscribeRequest(requestId: "1234", + contentFilters: @[ContentTopic("1")], + pubsubTopic: some(DefaultPubsubTopic)) + discard await restFilterTest.client.filterPostSubscriptions(requestBody) - let messages = @[ - fakeWakuMessage(contentTopic = "content-topic-x", payload = toBytes("TEST-1")), - fakeWakuMessage(contentTopic = "content-topic-x", payload = toBytes("TEST-1")), - fakeWakuMessage(contentTopic = "content-topic-x", payload = toBytes("TEST-1")), - ] + let pingResponse = await restFilterTest.client.filterSubscriberPing("9999") - restFilterTest.messageCache.subscribe(contentTopic) - for msg in messages: - restFilterTest.messageCache.addMessage(contentTopic, msg) + # Then + check: + pingResponse.status == 200 + $pingResponse.contentType == $MIMETYPE_JSON + pingResponse.data.requestId == "9999" + pingResponse.data.statusDesc.len() == 0 + + # When - error case + let requestBodyUnsubAll = FilterUnsubscribeAllRequest(requestId: "9988") + discard await restFilterTest.client.filterDeleteAllSubscriptions(requestBodyUnsubAll) + + let pingResponseFail = await restFilterTest.client.filterSubscriberPing("9977") + + # Then + check: + pingResponseFail.status == 404 # NOT_FOUND + $pingResponseFail.contentType == $MIMETYPE_JSON + pingResponseFail.data.requestId == "9977" + pingResponseFail.data.statusDesc == "NOT_FOUND: peer has no subscriptions" + + await restFilterTest.shutdown() + + asyncTest "push filtered message": + # Given + let + restFilterTest = await RestFilterTest.init() + subPeerId = restFilterTest.subscriberNode.peerInfo.toRemotePeerInfo().peerId + + restFilterTest.messageCache.subscribe(DefaultPubsubTopic) + restFilterTest.serviceNode.subscribe(DefaultPubsubTopic) # When - let response = await restFilterTest.client.filterGetMessagesV1(contentTopic) + var requestBody = FilterSubscribeRequest(requestId: "1234", + contentFilters: @[ContentTopic("1")], + pubsubTopic: some(DefaultPubsubTopic)) + discard await restFilterTest.client.filterPostSubscriptions(requestBody) + + let pingResponse = await restFilterTest.client.filterSubscriberPing("9999") # Then check: - response.status == 200 - $response.contentType == $MIMETYPE_JSON - response.data.len == 3 - response.data.all do (msg: FilterWakuMessage) -> bool: - msg.payload == base64.encode("TEST-1") and - msg.contentTopic.get().string == "content-topic-x" and - msg.version.get() == 2 and - msg.timestamp.get() != Timestamp(0) + pingResponse.status == 200 + $pingResponse.contentType == $MIMETYPE_JSON + pingResponse.data.requestId == "9999" + pingResponse.data.statusDesc.len() == 0 + + # When - message push + let testMessage = WakuMessage( + payload: "TEST-PAYLOAD-MUST-RECEIVE".toBytes(), + contentTopic: "1", + timestamp: int64(2022) + ) + + let postMsgResponse = await restFilterTest.clientTwdServiceNode.relayPostMessagesV1( + DefaultPubsubTopic, + toRelayWakuMessage(testMessage) + ) + # Then + let messages = restFilterTest.messageCache.getMessages("1").tryGet() + + check: + postMsgResponse.status == 200 + $postMsgResponse.contentType == $MIMETYPE_TEXT + postMsgResponse.data == "OK" + messages == @[testMessage] await restFilterTest.shutdown() diff --git a/tests/wakunode_rest/test_rest_legacy_filter.nim b/tests/wakunode_rest/test_rest_legacy_filter.nim new file mode 100644 index 0000000000..7b4ceba77b --- /dev/null +++ b/tests/wakunode_rest/test_rest_legacy_filter.nim @@ -0,0 +1,191 @@ +{.used.} + +import + std/sequtils, + stew/byteutils, + stew/shims/net, + testutils/unittests, + presto, presto/client as presto_client, + libp2p/crypto/crypto +import + ../../waku/node/message_cache, + ../../waku/common/base64, + ../../waku/waku_core, + ../../waku/waku_node, + ../../waku/node/peer_manager, + ../../waku/waku_filter, + ../../waku/node/rest/server, + ../../waku/node/rest/client, + ../../waku/node/rest/responses, + ../../waku/node/rest/filter/types, + ../../waku/node/rest/filter/legacy_handlers as filter_api, + ../../waku/node/rest/filter/legacy_client as filter_api_client, + ../../waku/waku_relay, + ../testlib/wakucore, + ../testlib/wakunode + + +proc testWakuNode(): WakuNode = + let + privkey = generateSecp256k1Key() + bindIp = ValidIpAddress.init("0.0.0.0") + extIp = ValidIpAddress.init("127.0.0.1") + port = Port(0) + + return newTestWakuNode(privkey, bindIp, port, some(extIp), some(port)) + + +type RestFilterTest = object + filterNode: WakuNode + clientNode: WakuNode + restServer: RestServerRef + messageCache: filter_api.MessageCache + client: RestClientRef + + +proc setupRestFilter(): Future[RestFilterTest] {.async.} = + result.filterNode = testWakuNode() + result.clientNode = testWakuNode() + + await allFutures(result.filterNode.start(), result.clientNode.start()) + + await result.filterNode.mountFilter() + await result.clientNode.mountFilterClient() + + result.clientNode.peerManager.addServicePeer(result.filterNode.peerInfo.toRemotePeerInfo() + ,WakuLegacyFilterCodec) + + let restPort = Port(58011) + let restAddress = ValidIpAddress.init("0.0.0.0") + result.restServer = RestServerRef.init(restAddress, restPort).tryGet() + + result.messageCache = filter_api.MessageCache.init() + installLegacyFilterRestApiHandlers(result.restServer.router + ,result.clientNode + ,result.messageCache) + + result.restServer.start() + + result.client = newRestHttpClient(initTAddress(restAddress, restPort)) + + return result + + +proc shutdown(self: RestFilterTest) {.async.} = + await self.restServer.stop() + await self.restServer.closeWait() + await allFutures(self.filterNode.stop(), self.clientNode.stop()) + + +suite "Waku v2 Rest API - Filter": + asyncTest "Subscribe a node to an array of topics - POST /filter/v1/subscriptions": + # Given + let restFilterTest: RestFilterTest = await setupRestFilter() + + # When + let contentFilters = @[DefaultContentTopic + ,ContentTopic("2") + ,ContentTopic("3") + ,ContentTopic("4") + ] + + let requestBody = FilterLegacySubscribeRequest(contentFilters: contentFilters, + pubsubTopic: some(DefaultPubsubTopic)) + let response = await restFilterTest.client.filterPostSubscriptionsV1(requestBody) + + # Then + check: + response.status == 200 + $response.contentType == $MIMETYPE_TEXT + response.data == "OK" + + check: + restFilterTest.messageCache.isSubscribed(DefaultContentTopic) + restFilterTest.messageCache.isSubscribed("2") + restFilterTest.messageCache.isSubscribed("3") + restFilterTest.messageCache.isSubscribed("4") + + # When - error case + let badRequestBody = FilterLegacySubscribeRequest(contentFilters: @[] + ,pubsubTopic: none(string)) + let badResponse = await restFilterTest.client.filterPostSubscriptionsV1(badRequestBody) + + check: + badResponse.status == 400 + $badResponse.contentType == $MIMETYPE_TEXT + badResponse.data == "Invalid content body, could not decode. Unable to deserialize data" + + + await restFilterTest.shutdown() + + + asyncTest "Unsubscribe a node from an array of topics - DELETE /filter/v1/subscriptions": + # Given + let + restFilterTest: RestFilterTest = await setupRestFilter() + + # When + restFilterTest.messageCache.subscribe("1") + restFilterTest.messageCache.subscribe("2") + restFilterTest.messageCache.subscribe("3") + restFilterTest.messageCache.subscribe("4") + + let contentFilters = @[ContentTopic("1") + ,ContentTopic("2") + ,ContentTopic("3") + # ,ContentTopic("4") # Keep this subscription for check + ] + + # When + let requestBody = FilterLegacySubscribeRequest(contentFilters: contentFilters, + pubsubTopic: some(DefaultPubsubTopic)) + let response = await restFilterTest.client.filterDeleteSubscriptionsV1(requestBody) + + # Then + check: + response.status == 200 + $response.contentType == $MIMETYPE_TEXT + response.data == "OK" + + check: + not restFilterTest.messageCache.isSubscribed("1") + not restFilterTest.messageCache.isSubscribed("2") + not restFilterTest.messageCache.isSubscribed("3") + restFilterTest.messageCache.isSubscribed("4") + + await restFilterTest.shutdown() + + asyncTest "Get the latest messages for topic - GET /filter/v1/messages/{contentTopic}": + # Given + + let + restFilterTest = await setupRestFilter() + + let pubSubTopic = "/waku/2/default-waku/proto" + let contentTopic = ContentTopic( "content-topic-x" ) + + let messages = @[ + fakeWakuMessage(contentTopic = "content-topic-x", payload = toBytes("TEST-1")), + fakeWakuMessage(contentTopic = "content-topic-x", payload = toBytes("TEST-1")), + fakeWakuMessage(contentTopic = "content-topic-x", payload = toBytes("TEST-1")), + ] + + restFilterTest.messageCache.subscribe(contentTopic) + for msg in messages: + restFilterTest.messageCache.addMessage(contentTopic, msg) + + # When + let response = await restFilterTest.client.filterGetMessagesV1(contentTopic) + + # Then + check: + response.status == 200 + $response.contentType == $MIMETYPE_JSON + response.data.len == 3 + response.data.all do (msg: FilterWakuMessage) -> bool: + msg.payload == base64.encode("TEST-1") and + msg.contentTopic.get().string == "content-topic-x" and + msg.version.get() == 2 and + msg.timestamp.get() != Timestamp(0) + + await restFilterTest.shutdown() diff --git a/waku/README.md b/waku/README.md index 59f49c10f1..c24fce873e 100644 --- a/waku/README.md +++ b/waku/README.md @@ -50,18 +50,18 @@ To run a specific test. # Get a shell with the right environment variables set ./env.sh bash # Run a specific test -nim c -r ./tests/test_waku_filter.nim +nim c -r ./tests/test_waku_filter_legacy.nim ``` You can also alter compile options. For example, if you want a less verbose output you can do the following. For more, refer to the [compiler flags](https://nim-lang.org/docs/nimc.html#compiler-usage) and [chronicles documentation](https://github.com/status-im/nim-chronicles#compile-time-configuration). ```bash -nim c -r -d:chronicles_log_level=WARN --verbosity=0 --hints=off ./tests/test_waku_filter.nim +nim c -r -d:chronicles_log_level=WARN --verbosity=0 --hints=off ./tests/waku_filter_v2/test_waku_filter.nim ``` You may also want to change the `outdir` to a folder ignored by git. ```bash -nim c -r -d:chronicles_log_level=WARN --verbosity=0 --hints=off --outdir=build ./tests/test_waku_filter.nim +nim c -r -d:chronicles_log_level=WARN --verbosity=0 --hints=off --outdir=build ./tests/waku_filter_v2/test_waku_filter.nim ``` ### Waku Protocol Example diff --git a/waku/node/jsonrpc/admin/handlers.nim b/waku/node/jsonrpc/admin/handlers.nim index 5c7f1a29d5..d60994a729 100644 --- a/waku/node/jsonrpc/admin/handlers.nim +++ b/waku/node/jsonrpc/admin/handlers.nim @@ -71,9 +71,9 @@ proc installAdminApiHandlers*(node: WakuNode, rpcsrv: RpcServer) = if not node.wakuFilterLegacy.isNil(): # Map WakuFilter peers to WakuPeers and add to return list - let filterPeers = node.peerManager.peerStore.peers(WakuFilterCodec) + let filterPeers = node.peerManager.peerStore.peers(WakuLegacyFilterCodec) .mapIt(WakuPeer(multiaddr: constructMultiaddrStr(it), - protocol: WakuFilterCodec, + protocol: WakuLegacyFilterCodec, connected: it.connectedness == Connectedness.Connected)) peers.add(filterPeers) diff --git a/waku/node/jsonrpc/filter/handlers.nim b/waku/node/jsonrpc/filter/handlers.nim index 43174c0e14..312dcd0364 100644 --- a/waku/node/jsonrpc/filter/handlers.nim +++ b/waku/node/jsonrpc/filter/handlers.nim @@ -34,7 +34,7 @@ proc installFilterApiHandlers*(node: WakuNode, server: RpcServer, cache: Message ## Subscribes a node to a list of content filters debug "post_waku_v2_filter_v1_subscription" - let peerOpt = node.peerManager.selectPeer(WakuFilterCodec) + let peerOpt = node.peerManager.selectPeer(WakuLegacyFilterCodec) if peerOpt.isNone(): raise newException(ValueError, "no suitable remote filter peers") @@ -43,7 +43,7 @@ proc installFilterApiHandlers*(node: WakuNode, server: RpcServer, cache: Message let handler: FilterPushHandler = proc(pubsubTopic: PubsubTopic, msg: WakuMessage) {.async, gcsafe, closure.} = cache.addMessage(msg.contentTopic, msg) - let subFut = node.filterSubscribe(pubsubTopic, contentTopics, handler, peerOpt.get()) + let subFut = node.legacyFilterSubscribe(pubsubTopic, contentTopics, handler, peerOpt.get()) if not await subFut.withTimeout(futTimeout): raise newException(ValueError, "Failed to subscribe to contentFilters") @@ -59,7 +59,11 @@ proc installFilterApiHandlers*(node: WakuNode, server: RpcServer, cache: Message let contentTopics: seq[ContentTopic] = contentFilters.mapIt(it.contentTopic) - let unsubFut = node.unsubscribe(pubsubTopic, contentTopics) + let peerOpt = node.peerManager.selectPeer(WakuLegacyFilterCodec) + if peerOpt.isNone(): + raise newException(ValueError, "no suitable remote filter peers") + + let unsubFut = node.legacyFilterUnsubscribe(pubsubTopic, contentTopics, peerOpt.get()) if not await unsubFut.withTimeout(futTimeout): raise newException(ValueError, "Failed to unsubscribe from contentFilters") diff --git a/waku/node/message_cache.nim b/waku/node/message_cache.nim index 9d801ea78e..dd0af17404 100644 --- a/waku/node/message_cache.nim +++ b/waku/node/message_cache.nim @@ -44,6 +44,8 @@ proc unsubscribe*[K](t: MessageCache[K], topic: K) = return t.table.del(topic) +proc unsubscribeAll*[K](t: MessageCache[K]) = + t.table.clear() proc addMessage*[K](t: MessageCache, topic: K, msg: WakuMessage) = if not t.isSubscribed(topic): diff --git a/waku/node/rest/filter/client.nim b/waku/node/rest/filter/client.nim index a5b53c01f6..f4d8fd2622 100644 --- a/waku/node/rest/filter/client.nim +++ b/waku/node/rest/filter/client.nim @@ -4,8 +4,10 @@ else: {.push raises: [].} import + json, std/sets, stew/byteutils, + strformat, chronicles, json_serialization, json_serialization/std/options, @@ -19,9 +21,9 @@ import export types logScope: - topics = "waku node rest client" + topics = "waku node rest client v2" -proc encodeBytes*(value: FilterSubscriptionsRequest, +proc encodeBytes*(value: FilterSubscribeRequest, contentType: string): RestResult[seq[byte]] = if MediaType.init(contentType) != MIMETYPE_JSON: error "Unsupported contentType value", contentType = contentType @@ -30,30 +32,68 @@ proc encodeBytes*(value: FilterSubscriptionsRequest, let encoded = ?encodeIntoJsonBytes(value) return ok(encoded) -proc decodeBytes*(t: typedesc[string], value: openarray[byte], - contentType: Opt[ContentTypeData]): RestResult[string] = - if MediaType.init($contentType) != MIMETYPE_TEXT: +proc encodeBytes*(value: FilterSubscriberPing, + contentType: string): RestResult[seq[byte]] = + if MediaType.init(contentType) != MIMETYPE_JSON: + error "Unsupported contentType value", contentType = contentType + return err("Unsupported contentType") + + let encoded = ?encodeIntoJsonBytes(value) + return ok(encoded) + +proc encodeBytes*(value: FilterUnsubscribeRequest, + contentType: string): RestResult[seq[byte]] = + if MediaType.init(contentType) != MIMETYPE_JSON: error "Unsupported contentType value", contentType = contentType return err("Unsupported contentType") - var res: string - if len(value) > 0: - res = newString(len(value)) - copyMem(addr res[0], unsafeAddr value[0], len(value)) - return ok(res) + let encoded = ?encodeIntoJsonBytes(value) + return ok(encoded) + +proc encodeBytes*(value: FilterUnsubscribeAllRequest, + contentType: string): RestResult[seq[byte]] = + if MediaType.init(contentType) != MIMETYPE_JSON: + error "Unsupported contentType value", contentType = contentType + return err("Unsupported contentType") + + let encoded = ?encodeIntoJsonBytes(value) + return ok(encoded) + +proc decodeBytes*(t: typedesc[FilterSubscriptionResponse], + value: openarray[byte], + contentType: Opt[ContentTypeData]): + + RestResult[FilterSubscriptionResponse] = + + if MediaType.init($contentType) != MIMETYPE_JSON: + error "Unsupported contentType value", contentType = contentType + return err("Unsupported contentType") + + let decoded = ?decodeFromJsonBytes(FilterSubscriptionResponse, value) + return ok(decoded) + +proc filterSubscriberPing*(requestId: string): + RestResponse[FilterSubscriptionResponse] + {.rest, endpoint: "/filter/v2/subscriptions/{requestId}", meth: HttpMethod.MethodGet.} + +proc filterPostSubscriptions*(body: FilterSubscribeRequest): + RestResponse[FilterSubscriptionResponse] + {.rest, endpoint: "/filter/v2/subscriptions", meth: HttpMethod.MethodPost.} + +proc filterPutSubscriptions*(body: FilterSubscribeRequest): + RestResponse[FilterSubscriptionResponse] + {.rest, endpoint: "/filter/v2/subscriptions", meth: HttpMethod.MethodPut.} -# TODO: Check how we can use a constant to set the method endpoint (improve "rest" pragma under nim-presto) -proc filterPostSubscriptionsV1*(body: FilterSubscriptionsRequest): - RestResponse[string] - {.rest, endpoint: "/filter/v1/subscriptions", meth: HttpMethod.MethodPost.} +proc filterDeleteSubscriptions*(body: FilterUnsubscribeRequest): + RestResponse[FilterSubscriptionResponse] + {.rest, endpoint: "/filter/v2/subscriptions", meth: HttpMethod.MethodDelete.} -# TODO: Check how we can use a constant to set the method endpoint (improve "rest" pragma under nim-presto) -proc filterDeleteSubscriptionsV1*(body: FilterSubscriptionsRequest): - RestResponse[string] - {.rest, endpoint: "/filter/v1/subscriptions", meth: HttpMethod.MethodDelete.} +proc filterDeleteAllSubscriptions*(body: FilterUnsubscribeAllRequest): + RestResponse[FilterSubscriptionResponse] + {.rest, endpoint: "/filter/v2/subscriptions/all", meth: HttpMethod.MethodDelete.} -proc decodeBytes*(t: typedesc[FilterGetMessagesResponse], - data: openArray[byte], +proc decodeBytes*(t: typedesc[FilterGetMessagesResponse], + data: openArray[byte], contentType: Opt[ContentTypeData]): RestResult[FilterGetMessagesResponse] = if MediaType.init($contentType) != MIMETYPE_JSON: error "Unsupported response contentType value", contentType = contentType @@ -62,7 +102,6 @@ proc decodeBytes*(t: typedesc[FilterGetMessagesResponse], let decoded = ?decodeFromJsonBytes(FilterGetMessagesResponse, data) return ok(decoded) -# TODO: Check how we can use a constant to set the method endpoint (improve "rest" pragma under nim-presto) -proc filterGetMessagesV1*(contentTopic: string): - RestResponse[FilterGetMessagesResponse] - {.rest, endpoint: "/filter/v1/messages/{contentTopic}", meth: HttpMethod.MethodGet.} +proc filterGetMessagesV1*(contentTopic: string): + RestResponse[FilterGetMessagesResponse] + {.rest, endpoint: "/filter/v2/messages/{contentTopic}", meth: HttpMethod.MethodGet.} diff --git a/waku/node/rest/filter/handlers.nim b/waku/node/rest/filter/handlers.nim index d61ae52c7e..1cfc5b0115 100644 --- a/waku/node/rest/filter/handlers.nim +++ b/waku/node/rest/filter/handlers.nim @@ -4,6 +4,7 @@ else: {.push raises: [].} import + std/strformat, std/sequtils, stew/byteutils, chronicles, @@ -14,24 +15,28 @@ import import ../../../waku_core, ../../../waku_filter, - ../../../waku_filter/client, + ../../../waku_filter_v2, + ../../../waku_filter_v2/client as filter_protocol_client, + ../../../waku_filter_v2/common as filter_protocol_type, ../../message_cache, ../../peer_manager, ../../waku_node, ../serdes, ../responses, ./types - + export types logScope: - topics = "waku node rest filter_api" + topics = "waku node rest filter_api_v2" -const futTimeoutForSubscriptionProcessing* = 5.seconds +const futTimeoutForSubscriptionProcessing* = 5.seconds #### Request handlers -const ROUTE_FILTER_SUBSCRIPTIONSV1* = "/filter/v1/subscriptions" +const ROUTE_FILTER_SUBSCRIPTIONS* = "/filter/v2/subscriptions" + +const ROUTE_FILTER_ALL_SUBSCRIPTIONS* = "/filter/v2/subscriptions/all" const filterMessageCacheDefaultCapacity* = 30 @@ -50,85 +55,258 @@ func decodeRequestBody[T](contentBody: Option[ContentBody]) : Result[T, RestApiR let requestResult = decodeFromJsonBytes(T, reqBodyData) if requestResult.isErr(): - return err(RestApiResponse.badRequest("Invalid content body, could not decode. " & + return err(RestApiResponse.badRequest("Invalid content body, could not decode. " & $requestResult.error)) return ok(requestResult.get()) -proc installFilterPostSubscriptionsV1Handler*(router: var RestRouter, - node: WakuNode, - cache: MessageCache) = - let pushHandler: FilterPushHandler = - proc(pubsubTopic: PubsubTopic, - msg: WakuMessage) {.async, gcsafe, closure.} = - cache.addMessage(msg.contentTopic, msg) +proc getErrorCause(err: filter_protocol_type.FilterSubscribeError): string = + ## Retrieve proper error cause of FilterSubscribeError - due stringify make some parts of text double + + case err.kind: + of FilterSubscribeErrorKind.PEER_DIAL_FAILURE: + err.address + of FilterSubscribeErrorKind.BAD_RESPONSE, FilterSubscribeErrorKind.BAD_REQUEST, + FilterSubscribeErrorKind.NOT_FOUND, FilterSubscribeErrorKind.SERVICE_UNAVAILABLE: + err.cause + of FilterSubscribeErrorKind.UNKNOWN: + "UNKNOWN" + +proc convertResponse(T: type FilterSubscriptionResponse, requestId: string, protocolClientRes: filter_protocol_type.FilterSubscribeResult): T = + ## Properly convert filter protocol's response to rest response + + if protocolClientRes.isErr(): + return FilterSubscriptionResponse( + requestId: requestId, + statusCode: uint32(protocolClientRes.error().kind), + statusDesc: getErrorCause(protocolClientRes.error()) + ) + else: + return FilterSubscriptionResponse( + requestId: requestId, + statusCode: 0, + statusDesc: "" + ) + +proc convertResponse(T: type FilterSubscriptionResponse, requestId: string, protocolClientRes: filter_protocol_type.FilterSubscribeError): T = + ## Properly convert filter protocol's response to rest response in case of error + + return FilterSubscriptionResponse( + requestId: requestId, + statusCode: uint32(protocolClientRes.kind), + statusDesc: $protocolClientRes + ) + +proc convertErrorKindToHttpStatus(kind: filter_protocol_type.FilterSubscribeErrorKind): HttpCode = + ## Filter protocol's error code is not directly convertible to HttpCodes hence this converter + + case kind: + of filter_protocol_type.FilterSubscribeErrorKind.UNKNOWN: + return Http200 + of filter_protocol_type.FilterSubscribeErrorKind.PEER_DIAL_FAILURE: + return Http504 #gateway timout + of filter_protocol_type.FilterSubscribeErrorKind.BAD_RESPONSE: + return Http500 # internal server error + of filter_protocol_type.FilterSubscribeErrorKind.BAD_REQUEST: + return Http400 + of filter_protocol_type.FilterSubscribeErrorKind.NOT_FOUND: + return Http404 + of filter_protocol_type.FilterSubscribeErrorKind.SERVICE_UNAVAILABLE: + return Http503 + else: + return Http500 + +proc makeRestResponse(requestId: string, protocolClientRes: filter_protocol_type.FilterSubscribeResult): RestApiResponse = + let filterSubscriptionResponse = FilterSubscriptionResponse.convertResponse(requestId, protocolClientRes) + + var httpStatus : HttpCode = Http200 + + if protocolClientRes.isErr(): + httpStatus = convertErrorKindToHttpStatus(protocolClientRes.error().kind) # TODO: convert status codes! + + let resp = RestApiResponse.jsonResponse(filterSubscriptionResponse, status=httpStatus) + + if resp.isErr(): + error "An error ocurred while building the json respose: ", error=resp.error + return RestApiResponse.internalServerError(fmt("An error ocurred while building the json respose: {resp.error}")) + + return resp.get() + +proc makeRestResponse(requestId: string, protocolClientRes: filter_protocol_type.FilterSubscribeError): RestApiResponse = + let filterSubscriptionResponse = FilterSubscriptionResponse.convertResponse(requestId, protocolClientRes) + + let httpStatus = convertErrorKindToHttpStatus(protocolClientRes.kind) # TODO: convert status codes! + + let resp = RestApiResponse.jsonResponse(filterSubscriptionResponse, status=httpStatus) + + if resp.isErr(): + error "An error ocurred while building the json respose: ", error=resp.error + return RestApiResponse.internalServerError(fmt("An error ocurred while building the json respose: {resp.error}")) + + return resp.get() + +proc filterPostPutSubscriptionRequestHandler(node: WakuNode, + contentBody: Option[ContentBody], + cache: MessageCache): + Future[RestApiResponse] + {.async.} = + ## handles any filter subscription requests, adds or modifies. + + let decodedBody = decodeRequestBody[FilterSubscribeRequest](contentBody) + + if decodedBody.isErr(): + return makeRestResponse("unknown", FilterSubscribeError.badRequest(fmt("Failed to decode request: {decodedBody.error}"))) + + let req: FilterSubscribeRequest = decodedBody.value() + + let peerOpt = node.peerManager.selectPeer(WakuFilterSubscribeCodec) + + if peerOpt.isNone(): + return makeRestResponse(req.requestId, FilterSubscribeError.serviceUnavailable("No suitable peers")) + + let subFut = node.filterSubscribe(req.pubsubTopic, + req.contentFilters, + peerOpt.get()) + + if not await subFut.withTimeout(futTimeoutForSubscriptionProcessing): + error "Failed to subscribe to contentFilters do to timeout!" + return makeRestResponse(req.requestId, FilterSubscribeError.serviceUnavailable("Subscription request timed out")) + + # Successfully subscribed to all content filters + for cTopic in req.contentFilters: + cache.subscribe(cTopic) + + return makeRestResponse(req.requestId, subFut.read()) - router.api(MethodPost, ROUTE_FILTER_SUBSCRIPTIONSV1) do (contentBody: Option[ContentBody]) -> RestApiResponse: +proc installFilterPostSubscriptionsHandler(router: var RestRouter, + node: WakuNode, + cache: MessageCache) = + router.api(MethodPost, ROUTE_FILTER_SUBSCRIPTIONS) do (contentBody: Option[ContentBody]) -> RestApiResponse: ## Subscribes a node to a list of contentTopics of a pubsubTopic - # debug "post_waku_v2_filter_v1_subscriptions" + debug "post", ROUTE_FILTER_SUBSCRIPTIONS, contentBody - let decodedBody = decodeRequestBody[FilterSubscriptionsRequest](contentBody) + let response = await filterPostPutSubscriptionRequestHandler(node, contentBody, cache) + return response + +proc installFilterPutSubscriptionsHandler(router: var RestRouter, + node: WakuNode, + cache: MessageCache) = + router.api(MethodPut, ROUTE_FILTER_SUBSCRIPTIONS) do (contentBody: Option[ContentBody]) -> RestApiResponse: + ## Modifies a subscribtion of a node to a list of contentTopics of a pubsubTopic + debug "put", ROUTE_FILTER_SUBSCRIPTIONS, contentBody + + let response = await filterPostPutSubscriptionRequestHandler(node, contentBody, cache) + return response + +proc installFilterDeleteSubscriptionsHandler(router: var RestRouter, + node: WakuNode, + cache: MessageCache) = + router.api(MethodDelete, ROUTE_FILTER_SUBSCRIPTIONS) do (contentBody: Option[ContentBody]) -> RestApiResponse: + ## Subscribes a node to a list of contentTopics of a PubSub topic + debug "delete", ROUTE_FILTER_SUBSCRIPTIONS, contentBody + + let decodedBody = decodeRequestBody[FilterUnsubscribeRequest](contentBody) if decodedBody.isErr(): - return decodedBody.error + return makeRestResponse("unknown", + FilterSubscribeError.badRequest(fmt("Failed to decode request: {decodedBody.error}"))) - let req: FilterSubscriptionsRequest = decodedBody.value() + let req: FilterUnsubscribeRequest = decodedBody.value() - let peerOpt = node.peerManager.selectPeer(WakuFilterCodec) + let peerOpt = node.peerManager.selectPeer(WakuFilterSubscribeCodec) if peerOpt.isNone(): - return RestApiResponse.internalServerError("No suitable remote filter peers") - - let subFut = node.filterSubscribe(req.pubsubTopic, - req.contentFilters, - pushHandler, - peerOpt.get()) + return makeRestResponse(req.requestId, + FilterSubscribeError.serviceUnavailable("No suitable peers")) - if not await subFut.withTimeout(futTimeoutForSubscriptionProcessing): - error "Failed to subscribe to contentFilters do to timeout!" - return RestApiResponse.internalServerError("Failed to subscribe to contentFilters") + let unsubFut = node.filterUnsubscribe(req.pubsubTopic, req.contentFilters, peerOpt.get()) + if not await unsubFut.withTimeout(futTimeoutForSubscriptionProcessing): + error "Failed to unsubscribe from contentFilters due to timeout!" + return makeRestResponse(req.requestId, + FilterSubscribeError.serviceUnavailable( + "Failed to unsubscribe from contentFilters due to timeout!")) # Successfully subscribed to all content filters for cTopic in req.contentFilters: - cache.subscribe(cTopic) + cache.unsubscribe(cTopic) - return RestApiResponse.ok() + # Successfully unsubscribed from all requested contentTopics + return makeRestResponse(req.requestId, unsubFut.read()) -proc installFilterDeleteSubscriptionsV1Handler*(router: var RestRouter, - node: WakuNode, - cache: MessageCache) = - router.api(MethodDelete, ROUTE_FILTER_SUBSCRIPTIONSV1) do (contentBody: Option[ContentBody]) -> RestApiResponse: +proc installFilterDeleteAllSubscriptionsHandler(router: var RestRouter, + node: WakuNode, + cache: MessageCache) = + router.api(MethodDelete, ROUTE_FILTER_ALL_SUBSCRIPTIONS) do (contentBody: Option[ContentBody]) -> RestApiResponse: ## Subscribes a node to a list of contentTopics of a PubSub topic - # debug "delete_waku_v2_filter_v1_subscriptions" + debug "delete", ROUTE_FILTER_ALL_SUBSCRIPTIONS, contentBody - let decodedBody = decodeRequestBody[FilterSubscriptionsRequest](contentBody) + let decodedBody = decodeRequestBody[FilterUnsubscribeAllRequest](contentBody) if decodedBody.isErr(): - return decodedBody.error + return makeRestResponse("unknown", + FilterSubscribeError.badRequest(fmt("Failed to decode request: {decodedBody.error}"))) - let req: FilterSubscriptionsRequest = decodedBody.value() + let req: FilterUnsubscribeAllRequest = decodedBody.value() + + let peerOpt = node.peerManager.selectPeer(WakuFilterSubscribeCodec) + + if peerOpt.isNone(): + return makeRestResponse(req.requestId, + FilterSubscribeError.serviceUnavailable("No suitable peers")) - let unsubFut = node.unsubscribe(req.pubsubTopic, req.contentFilters) + let unsubFut = node.filterUnsubscribeAll(peerOpt.get()) if not await unsubFut.withTimeout(futTimeoutForSubscriptionProcessing): error "Failed to unsubscribe from contentFilters due to timeout!" - return RestApiResponse.internalServerError("Failed to unsubscribe from contentFilters") + return makeRestResponse(req.requestId, + FilterSubscribeError.serviceUnavailable( + "Failed to unsubscribe from all contentFilters due to timeout!")) - for cTopic in req.contentFilters: - cache.unsubscribe(cTopic) + cache.unsubscribeAll() # Successfully unsubscribed from all requested contentTopics - return RestApiResponse.ok() + return makeRestResponse(req.requestId, unsubFut.read()) + +const ROUTE_FILTER_SUBSCRIBER_PING* = "/filter/v2/subscriptions/{requestId}" + +proc installFilterPingSubscriberHandler(router: var RestRouter, + node: WakuNode) = + router.api(MethodGet, ROUTE_FILTER_SUBSCRIBER_PING) do (requestId: string) -> RestApiResponse: + ## Checks if a node has valid subscription or not. + debug "get", ROUTE_FILTER_SUBSCRIBER_PING, requestId + + let peerOpt = node.peerManager.selectPeer(WakuFilterSubscribeCodec) + if peerOpt.isNone(): + return makeRestResponse(requestId.get(), + FilterSubscribeError.serviceUnavailable("No suitable remote filter peers")) + + let pingFutRes = node.wakuFilterClient.ping(peerOpt.get()) + + if not await pingFutRes.withTimeout(futTimeoutForSubscriptionProcessing): + error "Failed to ping filter service peer due to timeout!" + return makeRestResponse(requestId.get(), + FilterSubscribeError.serviceUnavailable("Ping timed out")) + + return makeRestResponse(requestId.get(), pingFutRes.read()) + +const ROUTE_FILTER_MESSAGES* = "/filter/v2/messages/{contentTopic}" + +proc installFilterGetMessagesHandler(router: var RestRouter, + node: WakuNode, + cache: MessageCache) = + + + let pushHandler : FilterPushHandler = proc (pubsubTopic: PubsubTopic, + msg: WakuMessage) + {.async, gcsafe, closure.} = + cache.addMessage(msg.contentTopic, msg) -const ROUTE_RELAY_MESSAGESV1* = "/filter/v1/messages/{contentTopic}" + node.wakuFilterClient.registerPushHandler(pushHandler) -proc installFilterGetMessagesV1Handler*(router: var RestRouter, - node: WakuNode, - cache: MessageCache) = - router.api(MethodGet, ROUTE_RELAY_MESSAGESV1) do (contentTopic: string) -> RestApiResponse: + router.api(MethodGet, ROUTE_FILTER_MESSAGES) do (contentTopic: string) -> RestApiResponse: ## Returns all WakuMessages received on a specified content topic since the ## last time this method was called - ## TODO: ability to specify a return message limit - # debug "get_waku_v2_filter_v1_messages", contentTopic=contentTopic + ## TODO: ability to specify a return message limit, maybe use cursor to control paging response. + debug "get", ROUTE_FILTER_MESSAGES, contentTopic=contentTopic if contentTopic.isErr(): return RestApiResponse.badRequest("Missing contentTopic") @@ -147,9 +325,12 @@ proc installFilterGetMessagesV1Handler*(router: var RestRouter, return resp.get() -proc installFilterApiHandlers*(router: var RestRouter, - node: WakuNode, - cache: MessageCache) = - installFilterPostSubscriptionsV1Handler(router, node, cache) - installFilterDeleteSubscriptionsV1Handler(router, node, cache) - installFilterGetMessagesV1Handler(router, node, cache) +proc installFilterRestApiHandlers*(router: var RestRouter, + node: WakuNode, + cache: MessageCache) = + installFilterPingSubscriberHandler(router, node) + installFilterPostSubscriptionsHandler(router, node, cache) + installFilterPutSubscriptionsHandler(router, node, cache) + installFilterDeleteSubscriptionsHandler(router, node, cache) + installFilterDeleteAllSubscriptionsHandler(router, node, cache) + installFilterGetMessagesHandler(router, node, cache) diff --git a/waku/node/rest/filter/legacy_client.nim b/waku/node/rest/filter/legacy_client.nim new file mode 100644 index 0000000000..9434dd6e03 --- /dev/null +++ b/waku/node/rest/filter/legacy_client.nim @@ -0,0 +1,68 @@ +when (NimMajor, NimMinor) < (1, 4): + {.push raises: [Defect].} +else: + {.push raises: [].} + +import + std/sets, + stew/byteutils, + chronicles, + json_serialization, + json_serialization/std/options, + presto/[route, client, common] +import + ../../../waku_core, + ../serdes, + ../responses, + ./types + +export types + +logScope: + topics = "waku node rest client v1" + +proc encodeBytes*(value: FilterLegacySubscribeRequest, + contentType: string): RestResult[seq[byte]] = + if MediaType.init(contentType) != MIMETYPE_JSON: + error "Unsupported contentType value", contentType = contentType + return err("Unsupported contentType") + + let encoded = ?encodeIntoJsonBytes(value) + return ok(encoded) + +proc decodeBytes*(t: typedesc[string], value: openarray[byte], + contentType: Opt[ContentTypeData]): RestResult[string] = + if MediaType.init($contentType) != MIMETYPE_TEXT: + error "Unsupported contentType value", contentType = contentType + return err("Unsupported contentType") + + var res: string + if len(value) > 0: + res = newString(len(value)) + copyMem(addr res[0], unsafeAddr value[0], len(value)) + return ok(res) + +# TODO: Check how we can use a constant to set the method endpoint (improve "rest" pragma under nim-presto) +proc filterPostSubscriptionsV1*(body: FilterLegacySubscribeRequest): + RestResponse[string] + {.rest, endpoint: "/filter/v1/subscriptions", meth: HttpMethod.MethodPost.} + +# TODO: Check how we can use a constant to set the method endpoint (improve "rest" pragma under nim-presto) +proc filterDeleteSubscriptionsV1*(body: FilterLegacySubscribeRequest): + RestResponse[string] + {.rest, endpoint: "/filter/v1/subscriptions", meth: HttpMethod.MethodDelete.} + +proc decodeBytes*(t: typedesc[FilterGetMessagesResponse], + data: openArray[byte], + contentType: Opt[ContentTypeData]): RestResult[FilterGetMessagesResponse] = + if MediaType.init($contentType) != MIMETYPE_JSON: + error "Unsupported response contentType value", contentType = contentType + return err("Unsupported response contentType") + + let decoded = ?decodeFromJsonBytes(FilterGetMessagesResponse, data) + return ok(decoded) + +# TODO: Check how we can use a constant to set the method endpoint (improve "rest" pragma under nim-presto) +proc filterGetMessagesV1*(contentTopic: string): + RestResponse[FilterGetMessagesResponse] + {.rest, endpoint: "/filter/v1/messages/{contentTopic}", meth: HttpMethod.MethodGet.} diff --git a/waku/node/rest/filter/legacy_handlers.nim b/waku/node/rest/filter/legacy_handlers.nim new file mode 100644 index 0000000000..92131cb0d5 --- /dev/null +++ b/waku/node/rest/filter/legacy_handlers.nim @@ -0,0 +1,160 @@ +when (NimMajor, NimMinor) < (1, 4): + {.push raises: [Defect].} +else: + {.push raises: [].} + +import + std/sequtils, + stew/byteutils, + chronicles, + json_serialization, + json_serialization/std/options, + presto/route, + presto/common +import + ../../../waku_core, + ../../../waku_filter, + ../../../waku_filter/client, + ../../message_cache, + ../../peer_manager, + ../../waku_node, + ../serdes, + ../responses, + ./types + +export types + +logScope: + topics = "waku node rest filter_api v1" + +const futTimeoutForSubscriptionProcessing* = 5.seconds + +#### Request handlers + +const ROUTE_FILTER_SUBSCRIPTIONSV1* = "/filter/v1/subscriptions" + +const filterMessageCacheDefaultCapacity* = 30 + +type + MessageCache* = message_cache.MessageCache[ContentTopic] + +func decodeRequestBody[T](contentBody: Option[ContentBody]) : Result[T, RestApiResponse] = + if contentBody.isNone(): + return err(RestApiResponse.badRequest("Missing content body")) + + let reqBodyContentType = MediaType.init($contentBody.get().contentType) + if reqBodyContentType != MIMETYPE_JSON: + return err(RestApiResponse.badRequest("Wrong Content-Type, expected application/json")) + + let reqBodyData = contentBody.get().data + + let requestResult = decodeFromJsonBytes(T, reqBodyData) + if requestResult.isErr(): + return err(RestApiResponse.badRequest("Invalid content body, could not decode. " & + $requestResult.error)) + + return ok(requestResult.get()) + +proc installFilterV1PostSubscriptionsV1Handler*(router: var RestRouter, + node: WakuNode, + cache: MessageCache) = + let pushHandler: FilterPushHandler = + proc(pubsubTopic: PubsubTopic, + msg: WakuMessage) {.async, gcsafe, closure.} = + cache.addMessage(msg.contentTopic, msg) + + router.api(MethodPost, ROUTE_FILTER_SUBSCRIPTIONSV1) do (contentBody: Option[ContentBody]) -> RestApiResponse: + ## Subscribes a node to a list of contentTopics of a pubsubTopic + debug "post", ROUTE_FILTER_SUBSCRIPTIONSV1, contentBody + + let decodedBody = decodeRequestBody[FilterLegacySubscribeRequest](contentBody) + + if decodedBody.isErr(): + return decodedBody.error + + let req: FilterLegacySubscribeRequest = decodedBody.value() + + let peerOpt = node.peerManager.selectPeer(WakuLegacyFilterCodec) + + if peerOpt.isNone(): + return RestApiResponse.internalServerError("No suitable remote filter peers") + + let subFut = node.legacyFilterSubscribe(req.pubsubTopic, + req.contentFilters, + pushHandler, + peerOpt.get()) + + if not await subFut.withTimeout(futTimeoutForSubscriptionProcessing): + error "Failed to subscribe to contentFilters do to timeout!" + return RestApiResponse.internalServerError("Failed to subscribe to contentFilters") + + # Successfully subscribed to all content filters + for cTopic in req.contentFilters: + cache.subscribe(cTopic) + + return RestApiResponse.ok() + +proc installFilterV1DeleteSubscriptionsV1Handler*(router: var RestRouter, + node: WakuNode, + cache: MessageCache) = + router.api(MethodDelete, ROUTE_FILTER_SUBSCRIPTIONSV1) do (contentBody: Option[ContentBody]) -> RestApiResponse: + ## Subscribes a node to a list of contentTopics of a PubSub topic + debug "delete", ROUTE_FILTER_SUBSCRIPTIONSV1, contentBody + + let decodedBody = decodeRequestBody[FilterLegacySubscribeRequest](contentBody) + + if decodedBody.isErr(): + return decodedBody.error + + let req: FilterLegacySubscribeRequest = decodedBody.value() + + let peerOpt = node.peerManager.selectPeer(WakuLegacyFilterCodec) + + if peerOpt.isNone(): + return RestApiResponse.internalServerError("No suitable remote filter peers") + + let unsubFut = node.legacyFilterUnsubscribe(req.pubsubTopic, req.contentFilters, peerOpt.get()) + if not await unsubFut.withTimeout(futTimeoutForSubscriptionProcessing): + error "Failed to unsubscribe from contentFilters due to timeout!" + return RestApiResponse.internalServerError("Failed to unsubscribe from contentFilters") + + for cTopic in req.contentFilters: + cache.unsubscribe(cTopic) + + # Successfully unsubscribed from all requested contentTopics + return RestApiResponse.ok() + +const ROUTE_FILTER_MESSAGESV1* = "/filter/v1/messages/{contentTopic}" + +proc installFilterV1GetMessagesV1Handler*(router: var RestRouter, + node: WakuNode, + cache: MessageCache) = + router.api(MethodGet, ROUTE_FILTER_MESSAGESV1) do (contentTopic: string) -> RestApiResponse: + ## Returns all WakuMessages received on a specified content topic since the + ## last time this method was called + ## TODO: ability to specify a return message limit + debug "get", ROUTE_FILTER_MESSAGESV1, contentTopic=contentTopic + + if contentTopic.isErr(): + return RestApiResponse.badRequest("Missing contentTopic") + + let contentTopic = contentTopic.get() + + let msgRes = cache.getMessages(contentTopic, clear=true) + if msgRes.isErr(): + return RestApiResponse.badRequest("Not subscribed to topic: " & contentTopic) + + let data = FilterGetMessagesResponse(msgRes.get().map(toFilterWakuMessage)) + let resp = RestApiResponse.jsonResponse(data, status=Http200) + if resp.isErr(): + error "An error ocurred while building the json respose: ", error=resp.error + return RestApiResponse.internalServerError("An error ocurred while building the json respose") + + return resp.get() + +proc installLegacyFilterRestApiHandlers*(router: var RestRouter, + node: WakuNode, + cache: MessageCache) = + installFilterV1PostSubscriptionsV1Handler(router, node, cache) + installFilterV1DeleteSubscriptionsV1Handler(router, node, cache) + installFilterV1GetMessagesV1Handler(router, node, cache) diff --git a/waku/node/rest/filter/openapi.yaml b/waku/node/rest/filter/openapi.yaml index d913eb08a5..49ee6d9676 100644 --- a/waku/node/rest/filter/openapi.yaml +++ b/waku/node/rest/filter/openapi.yaml @@ -1,6 +1,6 @@ openapi: 3.0.3 info: - title: Waku V2 node REST API + title: Waku V2 node REST API version: 1.0.0 contact: name: VAC Team @@ -10,6 +10,8 @@ tags: description: Filter REST API for WakuV2 node paths: + # Legacy support for v1 waku filter + # TODO: legacy endpoint, remove in the future /filter/v1/subscriptions: post: # post_waku_v2_filter_v1_subscription summary: Subscribe a node to an array of topics @@ -21,7 +23,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/FilterSubscriptionsRequest' + $ref: '#/components/schemas/FilterLegacySubscribeRequest' responses: '200': description: OK @@ -32,8 +34,16 @@ paths: # TODO: Review the possible errors of this endpoint '400': description: Bad request. + content: + text/plain: + schema: + type: string '5XX': description: Unexpected error. + content: + text/plain: + schema: + type: string delete: # delete_waku_v2_filter_v1_subscription summary: Unsubscribe a node from an array of topics @@ -45,7 +55,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/FilterSubscriptionsRequest' + $ref: '#/components/schemas/FilterLegacySubscribeRequest' responses: '200': description: OK @@ -56,12 +66,24 @@ paths: # TODO: Review the possible errors of this endpoint '400': description: Bad request. + content: + text/plain: + schema: + type: string '404': description: Not found. + content: + text/plain: + schema: + type: string '5XX': description: Unexpected error. + content: + text/plain: + schema: + type: string - # TODO: Review the path of this endpoint due maybe query for list of contentTopics matching + # TODO: legacy endpoint, remove in the future /filter/v1/messages/{contentTopic}: get: # get_waku_v2_filter_v1_messages summary: Get the latest messages on the polled content topic @@ -86,10 +108,270 @@ paths: # TODO: Review the possible errors of this endpoint '400': description: Bad request. + content: + text/plain: + schema: + type: string + '404': + description: Not found. + content: + text/plain: + schema: + type: string + '5XX': + description: Unexpected error. + content: + text/plain: + schema: + type: string + + /filter/v2/subscriptions/{requestId}: + get: # get_waku_v2_filter_v2_subscription - ping + summary: Subscriber-ping - a peer can query if there is a registered subscription for it + description: | + Subscriber peer can query its subscription existence on service node. + Returns HTTP200 if exists and HTTP404 if not. + Client must not fill anything but requestId in the request body. + operationId: subscriberPing + tags: + - filter + parameters: + - in: path + name: requestId + required: true + schema: + type: string + description: Id of ping request + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/FilterSubscriptionResponse' + '400': + description: Bad request. + content: + application/json: + schema: + $ref: '#/components/schemas/FilterSubscriptionResponse' + '404': + description: Not found. + content: + application/json: + schema: + $ref: '#/components/schemas/FilterSubscriptionResponse' + '5XX': + description: Unexpected error. + content: + application/json: + schema: + $ref: '#/components/schemas/FilterSubscriptionResponse' + + /filter/v2/subscriptions: + post: # post_waku_v2_filter_v2_subscription + summary: Subscribe a peer to an array of content topics under a pubsubTopic + description: | + Subscribe a peer to an array of content topics under a pubsubTopic. + + It is allowed to refresh or add new content topic to an existing subscription. + + Fields pubsubTopic and contentFilters must be filled. + operationId: postSubscriptions + tags: + - filter + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/FilterSubscribeRequest' + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/FilterSubscriptionResponse' + # TODO: Review the possible errors of this endpoint + '400': + description: Bad request. + content: + application/json: + schema: + $ref: '#/components/schemas/FilterSubscriptionResponse' + '404': + description: Not found. + content: + application/json: + schema: + $ref: '#/components/schemas/FilterSubscriptionResponse' + '5XX': + description: Unexpected error. + content: + application/json: + schema: + $ref: '#/components/schemas/FilterSubscriptionResponse' + + put: # put_waku_v2_filter_v2_subscription + summary: Modify existing subscription of a peer under a pubsubTopic + description: | + Modify existing subscription of a peer under a pubsubTopic. + + It is allowed to refresh or add new content topic to an existing subscription. + + Fields pubsubTopic and contentFilters must be filled. + operationId: putSubscriptions + tags: + - filter + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/FilterSubscribeRequest' + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/FilterSubscriptionResponse' + # TODO: Review the possible errors of this endpoint + '400': + description: Bad request. + content: + application/json: + schema: + $ref: '#/components/schemas/FilterSubscriptionResponse' + '404': + description: Not found. + content: + application/json: + schema: + $ref: '#/components/schemas/FilterSubscriptionResponse' + '5XX': + description: Unexpected error. + content: + application/json: + schema: + $ref: '#/components/schemas/FilterSubscriptionResponse' + + + delete: # delete_waku_v2_filter_v2_subscription + summary: Unsubscribe a peer from content topics + description: | + Unsubscribe a peer from content topics + Only that subscription will be removed which matches existing. + operationId: deleteSubscriptions + tags: + - filter + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/FilterUnsubscribeRequest' + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/FilterSubscriptionResponse' + '400': + description: Bad request. + content: + application/json: + schema: + $ref: '#/components/schemas/FilterSubscriptionResponse' + '404': + description: Not found. + content: + application/json: + schema: + $ref: '#/components/schemas/FilterSubscriptionResponse' + '5XX': + description: Unexpected error. + content: + application/json: + schema: + $ref: '#/components/schemas/FilterSubscriptionResponse' + /filter/v2/subscriptions/all: + delete: # delete_waku_v2_filter_v2_subscription + summary: Unsubscribe a peer from all content topics + description: | + Unsubscribe a peer from all content topics + operationId: deleteAllSubscriptions + tags: + - filter + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/FilterUnsubscribeAllRequest' + responses: + '200': + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/FilterSubscriptionResponse' + '400': + description: Bad request. + content: + application/json: + schema: + $ref: '#/components/schemas/FilterSubscriptionResponse' + '404': + description: Not found. + content: + application/json: + schema: + $ref: '#/components/schemas/FilterSubscriptionResponse' + '5XX': + description: Unexpected error. + content: + application/json: + schema: + $ref: '#/components/schemas/FilterSubscriptionResponse' + /filter/v2/messages/{contentTopic}: + get: # get_waku_v2_filter_v2_messages + summary: Get the latest messages on the polled content topic + description: Get a list of messages that were received on a subscribed content topic after the last time this method was called. + operationId: getMessagesByTopic + tags: + - filter + parameters: + - in: path + name: contentTopic # Note the name is the same as in the path + required: true + schema: + type: string + description: Content topic of message + responses: + '200': + description: The latest messages on the polled topic. + content: + application/json: + schema: + $ref: '#/components/schemas/FilterGetMessagesResponse' + # TODO: Review the possible errors of this endpoint + '400': + description: Bad request. + content: + text/plain: + schema: + type: string '404': description: Not found. + content: + text/plain: + schema: + type: string '5XX': description: Unexpected error. + content: + text/plain: + schema: + type: string components: schemas: @@ -97,7 +379,7 @@ components: type: string ContentTopic: type: string - + FilterWakuMessage: type: object properties: @@ -113,19 +395,68 @@ components: required: - payload - FilterSubscriptionsRequest: + FilterLegacySubscribeRequest: type: object - properties: + properties: contentFilters: type: array items: $ref: '#/components/schemas/ContentTopic' pubsubTopic: $ref: "#/components/schemas/PubSubTopic" - required: + required: - contentFilters - + FilterGetMessagesResponse: type: array items: - $ref: '#/components/schemas/FilterWakuMessage' \ No newline at end of file + $ref: '#/components/schemas/FilterWakuMessage' + + FilterSubscribeRequest: + type: object + properties: + requestId: + type: string + contentFilters: + type: array + items: + $ref: '#/components/schemas/ContentTopic' + pubsubTopic: + $ref: "#/components/schemas/PubSubTopic" + required: + - requestId + - contentFilters + - pubsubTopic + + FilterUnsubscribeRequest: + type: object + properties: + requestId: + type: string + contentFilters: + type: array + items: + $ref: '#/components/schemas/ContentTopic' + pubsubTopic: + $ref: "#/components/schemas/PubSubTopic" + required: + - requestId + - contentFilters + + FilterUnsubscribeAllRequest: + type: object + properties: + requestId: + type: string + required: + - requestId + + FilterSubscriptionResponse: + type: object + properties: + requestId: + type: string + statusDesc: + type: string + required: + - requestId diff --git a/waku/node/rest/filter/types.nim b/waku/node/rest/filter/types.nim index 595c8b1808..a7a4fa5854 100644 --- a/waku/node/rest/filter/types.nim +++ b/waku/node/rest/filter/types.nim @@ -8,7 +8,8 @@ import chronicles, json_serialization, json_serialization/std/options, - presto/[route, client, common] + presto/[route, client, common], + libp2p/peerid import ../../../common/base64, ../../../waku_core, @@ -24,10 +25,32 @@ type FilterWakuMessage* = object type FilterGetMessagesResponse* = seq[FilterWakuMessage] -type FilterSubscriptionsRequest* = object +type FilterLegacySubscribeRequest* = object + # Subscription request for legacy filter support pubsubTopic*: Option[PubSubTopic] contentFilters*: seq[ContentTopic] +type FilterSubscriberPing* = object + requestId*: string + +type FilterSubscribeRequest* = object + requestId*: string + pubsubTopic*: Option[PubSubTopic] + contentFilters*: seq[ContentTopic] + +type FilterUnsubscribeRequest* = object + requestId*: string + pubsubTopic*: Option[PubSubTopic] + contentFilters*: seq[ContentTopic] + +type FilterUnsubscribeAllRequest* = object + requestId*: string + +type FilterSubscriptionResponse* = object + requestId*: string + statusCode*: uint32 + statusDesc*: string + #### Type conversion proc toFilterWakuMessage*(msg: WakuMessage): FilterWakuMessage = @@ -65,7 +88,7 @@ proc writeValue*(writer: var JsonWriter[RestJson], value: FilterWakuMessage) writer.writeField("timestamp", value.timestamp) writer.endRecord() -proc writeValue*(writer: var JsonWriter[RestJson], value: FilterSubscriptionsRequest) +proc writeValue*(writer: var JsonWriter[RestJson], value: FilterLegacySubscribeRequest) {.raises: [IOError].} = writer.beginRecord() writer.writeField("pubsubTopic", value.pubsubTopic) @@ -114,8 +137,8 @@ proc readValue*(reader: var JsonReader[RestJson], value: var FilterWakuMessage) timestamp: timestamp ) -proc readValue*(reader: var JsonReader[RestJson], value: var FilterSubscriptionsRequest) - {.raises: [SerializationError, IOError].} = +proc readValue*(reader: var JsonReader[RestJson], value: var FilterLegacySubscribeRequest) + {.raises: [SerializationError, IOError].} = var pubsubTopic = none(PubsubTopic) contentFilters = none(seq[ContentTopic]) @@ -126,7 +149,7 @@ proc readValue*(reader: var JsonReader[RestJson], value: var FilterSubscriptions if keys.containsOrIncl(fieldName): let err = try: fmt"Multiple `{fieldName}` fields found" except CatchableError: "Multiple fields with the same name found" - reader.raiseUnexpectedField(err, "FilterSubscriptionsRequest") + reader.raiseUnexpectedField(err, "FilterLegacySubscribeRequest") case fieldName of "pubsubTopic": @@ -136,8 +159,70 @@ proc readValue*(reader: var JsonReader[RestJson], value: var FilterSubscriptions else: unrecognizedFieldWarning() - if pubsubTopic.isNone(): - reader.raiseUnexpectedValue("Field `pubsubTopic` is missing") + if contentFilters.isNone(): + reader.raiseUnexpectedValue("Field `contentFilters` is missing") + + if contentFilters.get().len() == 0: + reader.raiseUnexpectedValue("Field `contentFilters` is empty") + + value = FilterLegacySubscribeRequest( + pubsubTopic: if pubsubTopic.isNone() or pubsubTopic.get() == "": none(string) else: some(pubsubTopic.get()), + contentFilters: contentFilters.get() + ) + +proc readValue*(reader: var JsonReader[RestJson], value: var FilterSubscriberPing) + {.raises: [SerializationError, IOError].} = + var + requestId = none(string) + + var keys = initHashSet[string]() + for fieldName in readObjectFields(reader): + # Check for reapeated keys + if keys.containsOrIncl(fieldName): + let err = try: fmt"Multiple `{fieldName}` fields found" + except CatchableError: "Multiple fields with the same name found" + reader.raiseUnexpectedField(err, "FilterSubscriberPing") + + case fieldName + of "requestId": + requestId = some(reader.readValue(string)) + else: + unrecognizedFieldWarning() + + if requestId.isNone(): + reader.raiseUnexpectedValue("Field `requestId` is missing") + + value = FilterSubscriberPing( + requestId: requestId.get() + ) + +proc readValue*(reader: var JsonReader[RestJson], value: var FilterSubscribeRequest) + {.raises: [SerializationError, IOError].} = + var + requestId = none(string) + pubsubTopic = none(PubsubTopic) + contentFilters = none(seq[ContentTopic]) + + var keys = initHashSet[string]() + for fieldName in readObjectFields(reader): + # Check for reapeated keys + if keys.containsOrIncl(fieldName): + let err = try: fmt"Multiple `{fieldName}` fields found" + except CatchableError: "Multiple fields with the same name found" + reader.raiseUnexpectedField(err, "FilterSubscribeRequest") + + case fieldName + of "requestId": + requestId = some(reader.readValue(string)) + of "pubsubTopic": + pubsubTopic = some(reader.readValue(PubsubTopic)) + of "contentFilters": + contentFilters = some(reader.readValue(seq[ContentTopic])) + else: + unrecognizedFieldWarning() + + if requestId.isNone(): + reader.raiseUnexpectedValue("Field `requestId` is missing") if contentFilters.isNone(): reader.raiseUnexpectedValue("Field `contentFilters` is missing") @@ -145,7 +230,108 @@ proc readValue*(reader: var JsonReader[RestJson], value: var FilterSubscriptions if contentFilters.get().len() == 0: reader.raiseUnexpectedValue("Field `contentFilters` is empty") - value = FilterSubscriptionsRequest( - pubsubTopic: if pubsubTopic.get() == "": none(string) else: some(pubsubTopic.get()), + value = FilterSubscribeRequest( + requestId: requestId.get(), + pubsubTopic: if pubsubTopic.isNone() or pubsubTopic.get() == "": none(string) else: some(pubsubTopic.get()), contentFilters: contentFilters.get() - ) \ No newline at end of file + ) + +proc readValue*(reader: var JsonReader[RestJson], value: var FilterUnsubscribeRequest) + {.raises: [SerializationError, IOError].} = + var + requestId = none(string) + pubsubTopic = none(PubsubTopic) + contentFilters = none(seq[ContentTopic]) + + var keys = initHashSet[string]() + for fieldName in readObjectFields(reader): + # Check for reapeated keys + if keys.containsOrIncl(fieldName): + let err = try: fmt"Multiple `{fieldName}` fields found" + except CatchableError: "Multiple fields with the same name found" + reader.raiseUnexpectedField(err, "FilterUnsubscribeRequest") + + case fieldName + of "requestId": + requestId = some(reader.readValue(string)) + of "pubsubTopic": + pubsubTopic = some(reader.readValue(PubsubTopic)) + of "contentFilters": + contentFilters = some(reader.readValue(seq[ContentTopic])) + else: + unrecognizedFieldWarning() + + if requestId.isNone(): + reader.raiseUnexpectedValue("Field `requestId` is missing") + + if contentFilters.isNone(): + reader.raiseUnexpectedValue("Field `contentFilters` is missing") + + if contentFilters.get().len() == 0: + reader.raiseUnexpectedValue("Field `contentFilters` is empty") + + value = FilterUnsubscribeRequest( + requestId: requestId.get(), + pubsubTopic: if pubsubTopic.isNone() or pubsubTopic.get() == "": none(string) else: some(pubsubTopic.get()), + contentFilters: contentFilters.get() + ) + +proc readValue*(reader: var JsonReader[RestJson], value: var FilterUnsubscribeAllRequest) + {.raises: [SerializationError, IOError].} = + var + requestId = none(string) + + var keys = initHashSet[string]() + for fieldName in readObjectFields(reader): + # Check for reapeated keys + if keys.containsOrIncl(fieldName): + let err = try: fmt"Multiple `{fieldName}` fields found" + except CatchableError: "Multiple fields with the same name found" + reader.raiseUnexpectedField(err, "FilterUnsubscribeAllRequest") + + case fieldName + of "requestId": + requestId = some(reader.readValue(string)) + else: + unrecognizedFieldWarning() + + if requestId.isNone(): + reader.raiseUnexpectedValue("Field `requestId` is missing") + + value = FilterUnsubscribeAllRequest( + requestId: requestId.get(), + ) + +proc readValue*(reader: var JsonReader[RestJson], value: var FilterSubscriptionResponse) + {.raises: [SerializationError, IOError].} = + var + requestId = none(string) + statusCode = none(uint32) + statusDesc = none(string) + + var keys = initHashSet[string]() + for fieldName in readObjectFields(reader): + # Check for reapeated keys + if keys.containsOrIncl(fieldName): + let err = try: fmt"Multiple `{fieldName}` fields found" + except CatchableError: "Multiple fields with the same name found" + reader.raiseUnexpectedField(err, "FilterSubscriptionResponse") + + case fieldName + of "requestId": + requestId = some(reader.readValue(string)) + of "statusCode": + statusCode = some(reader.readValue(uint32)) + of "statusDesc": + statusDesc = some(reader.readValue(string)) + else: + unrecognizedFieldWarning() + + if requestId.isNone(): + reader.raiseUnexpectedValue("Field `requestId` is missing") + + value = FilterSubscriptionResponse( + requestId: requestId.get(), + statusCode: statusCode.get(), + statusDesc: statusDesc.get("") + ) diff --git a/waku/node/waku_node.nim b/waku/node/waku_node.nim index 5d9aa54e93..2be13113eb 100644 --- a/waku/node/waku_node.nim +++ b/waku/node/waku_node.nim @@ -31,8 +31,9 @@ import ../waku_store, ../waku_store/client as store_client, ../waku_filter as legacy_filter, #TODO: support for legacy filter protocol will be removed - ../waku_filter/client as filter_client, #TODO: support for legacy filter protocol will be removed + ../waku_filter/client as legacy_filter_client, #TODO: support for legacy filter protocol will be removed ../waku_filter_v2, + ../waku_filter_v2/client as filter_client, ../waku_lightpush, ../waku_lightpush/client as lightpush_client, ../waku_enr, @@ -41,7 +42,8 @@ import ../waku_rln_relay, ./config, ./peer_manager, - ./waku_switch + ./waku_switch, + ./rest/relay/topic_cache declarePublicCounter waku_node_messages, "number of messages received", ["type"] @@ -88,8 +90,9 @@ type wakuStore*: WakuStore wakuStoreClient*: WakuStoreClient wakuFilter*: waku_filter_v2.WakuFilter + wakuFilterClient*: filter_client.WakuFilterClient wakuFilterLegacy*: legacy_filter.WakuFilterLegacy #TODO: support for legacy filter protocol will be removed - wakuFilterClientLegacy*: WakuFilterClientLegacy #TODO: support for legacy filter protocol will be removed + wakuFilterClientLegacy*: legacy_filter_client.WakuFilterClientLegacy #TODO: support for legacy filter protocol will be removed wakuRlnRelay*: WakuRLNRelay wakuLightPush*: WakuLightPush wakuLightpushClient*: WakuLightPushClient @@ -335,10 +338,10 @@ proc mountRelay*(node: WakuNode, for topic in topics: node.subscribe(topic) - ## Waku filter -proc mountFilter*(node: WakuNode, filterTimeout: Duration = WakuFilterTimeout) {.async, raises: [Defect, LPError]} = +proc mountFilter*(node: WakuNode, filterTimeout: Duration = WakuFilterTimeout) + {.async, raises: [Defect, LPError]} = info "mounting filter protocol" node.wakuFilter = WakuFilter.new(node.peerManager) node.wakuFilterLegacy = WakuFilterLegacy.new(node.peerManager, node.rng, filterTimeout) #TODO: remove legacy @@ -348,32 +351,47 @@ proc mountFilter*(node: WakuNode, filterTimeout: Duration = WakuFilterTimeout) { await node.wakuFilterLegacy.start() #TODO: remove legacy node.switch.mount(node.wakuFilter, protocolMatcher(WakuFilterSubscribeCodec)) - node.switch.mount(node.wakuFilterLegacy, protocolMatcher(WakuFilterCodec)) #TODO: remove legacy + node.switch.mount(node.wakuFilterLegacy, protocolMatcher(WakuLegacyFilterCodec)) #TODO: remove legacy + +proc filterHandleMessage*(node: WakuNode, + pubsubTopic: PubsubTopic, + message: WakuMessage) + {.async.}= -proc filterHandleMessage*(node: WakuNode, pubsubTopic: PubsubTopic, message: WakuMessage) {.async.}= - if node.wakuFilter.isNil(): + if node.wakuFilter.isNil() or node.wakuFilterLegacy.isNil(): error "cannot handle filter message", error="waku filter is nil" return - await node.wakuFilter.handleMessage(pubsubTopic, message) - await node.wakuFilterLegacy.handleMessage(pubsubTopic, message) #TODO: remove legacy - + await allFutures(node.wakuFilter.handleMessage(pubsubTopic, message), + node.wakuFilterLegacy.handleMessage(pubsubTopic, message) #TODO: remove legacy + ) proc mountFilterClient*(node: WakuNode) {.async, raises: [Defect, LPError].} = + ## Mounting both filter clients v1 - legacy and v2. + ## Giving option for application level to chose btw own push message handling or + ## rely on node provided cache. - This only applies for v2 filter client info "mounting filter client" node.wakuFilterClientLegacy = WakuFilterClientLegacy.new(node.peerManager, node.rng) + node.wakuFilterClient = WakuFilterClient.new(node.peerManager, node.rng) + if node.started: - # Node has started already. Let's start filter too. - await node.wakuFilterClientLegacy.start() + await allFutures(node.wakuFilterClientLegacy.start(), node.wakuFilterClient.start()) - node.switch.mount(node.wakuFilterClientLegacy, protocolMatcher(WakuFilterCodec)) + node.switch.mount(node.wakuFilterClient, protocolMatcher(WakuFilterSubscribeCodec)) + node.switch.mount(node.wakuFilterClientLegacy, protocolMatcher(WakuLegacyFilterCodec)) -proc filterSubscribe*(node: WakuNode, pubsubTopic: Option[PubsubTopic], contentTopics: ContentTopic|seq[ContentTopic], - handler: FilterPushHandler, peer: RemotePeerInfo|string) {.async, gcsafe, raises: [Defect, ValueError].} = - ## Registers for messages that match a specific filter. Triggers the handler whenever a message is received. +proc legacyFilterSubscribe*(node: WakuNode, + pubsubTopic: Option[PubsubTopic], + contentTopics: ContentTopic|seq[ContentTopic], + handler: FilterPushHandler, + peer: RemotePeerInfo|string) + {.async, gcsafe, raises: [Defect, ValueError].} = + + ## Registers for messages that match a specific filter. + ## Triggers the handler whenever a message is received. if node.wakuFilterClientLegacy.isNil(): - error "cannot register filter subscription to topic", error="waku filter client is nil" + error "cannot register filter subscription to topic", error="waku legacy filter client is not set up" return let remotePeerRes = parsePeerInfo(peer) @@ -385,21 +403,31 @@ proc filterSubscribe*(node: WakuNode, pubsubTopic: Option[PubsubTopic], contentT # Add handler wrapper to store the message when pushed, when relay is disabled and filter enabled # TODO: Move this logic to wakunode2 app - let handlerWrapper: FilterPushHandler = proc(pubsubTopic: string, message: WakuMessage) {.async, gcsafe, closure.} = - if node.wakuRelay.isNil() and not node.wakuStore.isNil(): - await node.wakuArchive.handleMessage(pubSubTopic, message) - - await handler(pubsubTopic, message) + # FIXME: This part needs refactoring. It seems possible that in special cases archiver will store same message multiple times. + let handlerWrapper: FilterPushHandler = + if node.wakuRelay.isNil() and not node.wakuStore.isNil(): + proc(pubsubTopic: string, message: WakuMessage) {.async, gcsafe, closure.} = + await allFutures(node.wakuArchive.handleMessage(pubSubTopic, message), + handler(pubsubTopic, message)) + else: + handler if pubsubTopic.isSome(): - info "registering filter subscription to content", pubsubTopic=pubsubTopic.get(), contentTopics=contentTopics, peer=remotePeer.peerId + info "registering legacy filter subscription to content", + pubsubTopic=pubsubTopic.get(), + contentTopics=contentTopics, + peer=remotePeer.peerId - let res = await node.wakuFilterClientLegacy.subscribe(pubsubTopic.get(), contentTopics, handlerWrapper, peer=remotePeer) + let res = await node.wakuFilterClientLegacy.subscribe(pubsubTopic.get(), + contentTopics, + handlerWrapper, + peer=remotePeer) if res.isOk(): - info "subscribed to topic", pubsubTopic=pubsubTopic.get(), contentTopics=contentTopics + info "subscribed to topic", pubsubTopic=pubsubTopic.get(), + contentTopics=contentTopics else: - error "failed filter subscription", error=res.error + error "failed legacy filter subscription", error=res.error waku_node_errors.inc(labelValues = ["subscribe_filter_failure"]) else: let topicMapRes = parseSharding(pubsubTopic, contentTopics) @@ -412,25 +440,96 @@ proc filterSubscribe*(node: WakuNode, pubsubTopic: Option[PubsubTopic], contentT var futures = collect(newSeq): for pubsub, topics in topicMap.pairs: - info "registering filter subscription to content", pubsubTopic=pubsub, contentTopics=topics, peer=remotePeer.peerId + info "registering legacy filter subscription to content", + pubsubTopic=pubsub, + contentTopics=topics, + peer=remotePeer.peerId + let content = topics.mapIt($it) node.wakuFilterClientLegacy.subscribe($pubsub, content, handlerWrapper, peer=remotePeer) let finished = await allFinished(futures) + for fut in finished: + let res = fut.read() + + if res.isErr(): + error "failed legacy filter subscription", error=res.error + waku_node_errors.inc(labelValues = ["subscribe_filter_failure"]) + + for pubsub, topics in topicMap.pairs: + info "subscribed to topic", pubsubTopic=pubsub, contentTopics=topics + +proc filterSubscribe*(node: WakuNode, + pubsubTopic: Option[PubsubTopic], + contentTopics: ContentTopic|seq[ContentTopic], + peer: RemotePeerInfo|string): + + Future[FilterSubscribeResult] + + {.async, gcsafe, raises: [Defect, ValueError].} = + + ## Registers for messages that match a specific filter. Triggers the handler whenever a message is received. + if node.wakuFilterClient.isNil(): + error "cannot register filter subscription to topic", error="waku filter client is not set up" + return err(FilterSubscribeError.serviceUnavailable()) + + let remotePeerRes = parsePeerInfo(peer) + if remotePeerRes.isErr(): + error "Couldn't parse the peer info properly", error = remotePeerRes.error + return err(FilterSubscribeError.serviceUnavailable("No peers available")) + + let remotePeer = remotePeerRes.value + + if pubsubTopic.isSome(): + info "registering filter subscription to content", pubsubTopic=pubsubTopic.get(), contentTopics=contentTopics, peer=remotePeer.peerId + + let subRes = await node.wakuFilterClient.subscribe(remotePeer, pubsubTopic.get(), contentTopics) + if subRes.isOk(): + info "v2 subscribed to topic", pubsubTopic=pubsubTopic, contentTopics=contentTopics + else: + error "failed filter v2 subscription", error=subRes.error + waku_node_errors.inc(labelValues = ["subscribe_filter_failure"]) + + return subRes + else: + let topicMapRes = parseSharding(pubsubTopic, contentTopics) + + let topicMap = + if topicMapRes.isErr(): + error "can't get shard", error=topicMapRes.error + return err(FilterSubscribeError.badResponse("can't get shard")) + else: topicMapRes.get() + + var futures = collect(newSeq): + for pubsub, topics in topicMap.pairs: + info "registering filter subscription to content", pubsubTopic=pubsub, contentTopics=topics, peer=remotePeer.peerId + let content = topics.mapIt($it) + node.wakuFilterClient.subscribe(remotePeer, $pubsub, content) + + let finished = await allFinished(futures) + + var subRes: FilterSubscribeResult = FilterSubscribeResult.ok() for fut in finished: let res = fut.read() if res.isErr(): error "failed filter subscription", error=res.error waku_node_errors.inc(labelValues = ["subscribe_filter_failure"]) + subRes = FilterSubscribeResult.err(res.error) for pubsub, topics in topicMap.pairs: info "subscribed to topic", pubsubTopic=pubsub, contentTopics=topics -proc filterUnsubscribe*(node: WakuNode, pubsubTopic: Option[PubsubTopic], contentTopics: ContentTopic|seq[ContentTopic], - peer: RemotePeerInfo|string) {.async, gcsafe, raises: [Defect, ValueError].} = - ## Unsubscribe from a content filter. + # return the last error or ok + return subRes + +proc legacyFilterUnsubscribe*(node: WakuNode, + pubsubTopic: Option[PubsubTopic], + contentTopics: ContentTopic|seq[ContentTopic], + peer: RemotePeerInfo|string) + {.async, gcsafe, raises: [Defect, ValueError].} = + ## Unsubscribe from a content legacy filter. if node.wakuFilterClientLegacy.isNil(): error "cannot unregister filter subscription to content", error="waku filter client is nil" return @@ -443,7 +542,7 @@ proc filterUnsubscribe*(node: WakuNode, pubsubTopic: Option[PubsubTopic], conten let remotePeer = remotePeerRes.value if pubsubTopic.isSome(): - info "deregistering filter subscription to content", pubsubTopic=pubsubTopic.get(), contentTopics=contentTopics, peer=remotePeer.peerId + info "deregistering legacy filter subscription to content", pubsubTopic=pubsubTopic.get(), contentTopics=contentTopics, peer=remotePeer.peerId let res = await node.wakuFilterClientLegacy.unsubscribe(pubsubTopic.get(), contentTopics, peer=remotePeer) @@ -479,35 +578,103 @@ proc filterUnsubscribe*(node: WakuNode, pubsubTopic: Option[PubsubTopic], conten for pubsub, topics in topicMap.pairs: info "unsubscribed from topic", pubsubTopic=pubsub, contentTopics=topics -# TODO: Move to application module (e.g., wakunode2.nim) -proc subscribe*(node: WakuNode, pubsubTopic: Option[PubsubTopic], contentTopics: ContentTopic|seq[ContentTopic], handler: FilterPushHandler) {.async, gcsafe, - deprecated: "Use the explicit destination peer procedure. Use 'node.filterSubscribe()' instead.".} = - ## Registers for messages that match a specific filter. Triggers the handler whenever a message is received. +proc filterUnsubscribe*(node: WakuNode, + pubsubTopic: Option[PubsubTopic], + contentTopics: seq[ContentTopic], + peer: RemotePeerInfo|string): + + Future[FilterSubscribeResult] + + {.async, gcsafe, raises: [Defect, ValueError].} = + + ## Unsubscribe from a content filter V2". if node.wakuFilterClientLegacy.isNil(): - error "cannot register filter subscription to topic", error="waku filter client is nil" - return + error "cannot unregister filter subscription to content", error="waku filter client is nil" + return err(FilterSubscribeError.serviceUnavailable()) - let peerOpt = node.peerManager.selectPeer(WakuFilterCodec) - if peerOpt.isNone(): - error "cannot register filter subscription to topic", error="no suitable remote peers" - return + let remotePeerRes = parsePeerInfo(peer) + if remotePeerRes.isErr(): + error "couldn't parse remotePeerInfo", error = remotePeerRes.error + return err(FilterSubscribeError.serviceUnavailable("No peers available")) - await node.filterSubscribe(pubsubTopic, contentTopics, handler, peer=peerOpt.get()) + let remotePeer = remotePeerRes.value -# TODO: Move to application module (e.g., wakunode2.nim) -proc unsubscribe*(node: WakuNode, pubsubTopic: Option[PubsubTopic], contentTopics: ContentTopic|seq[ContentTopic]) {.async, gcsafe, - deprecated: "Use the explicit destination peer procedure. Use 'node.filterUnsusbscribe()' instead.".} = - ## Unsubscribe from a content filter. + if pubsubTopic.isSome(): + info "deregistering filter subscription to content", pubsubTopic=pubsubTopic.get(), contentTopics=contentTopics, peer=remotePeer.peerId + + let unsubRes = await node.wakuFilterClient.unsubscribe(remotePeer, pubsubTopic.get(), contentTopics) + if unsubRes.isOk(): + info "unsubscribed from topic", pubsubTopic=pubsubTopic.get(), contentTopics=contentTopics + else: + error "failed filter unsubscription", error=unsubRes.error + waku_node_errors.inc(labelValues = ["unsubscribe_filter_failure"]) + + return unsubRes + + else: # pubsubTopic.isNone + let topicMapRes = parseSharding(pubsubTopic, contentTopics) + + let topicMap = + if topicMapRes.isErr(): + error "can't get shard", error = topicMapRes.error + return err(FilterSubscribeError.badResponse("can't get shard")) + else: topicMapRes.get() + + var futures = collect(newSeq): + for pubsub, topics in topicMap.pairs: + info "deregistering filter subscription to content", pubsubTopic=pubsub, contentTopics=topics, peer=remotePeer.peerId + let content = topics.mapIt($it) + node.wakuFilterClient.unsubscribe(remotePeer, $pubsub, content) + + let finished = await allFinished(futures) + + var unsubRes: FilterSubscribeResult = FilterSubscribeResult.ok() + for fut in finished: + let res = fut.read() + + if res.isErr(): + error "failed filter unsubscription", error=res.error + waku_node_errors.inc(labelValues = ["unsubscribe_filter_failure"]) + unsubRes = FilterSubscribeResult.err(res.error) + + for pubsub, topics in topicMap.pairs: + info "unsubscribed from topic", pubsubTopic=pubsub, contentTopics=topics + + # return the last error or ok + return unsubRes + +proc filterUnsubscribeAll*(node: WakuNode, + peer: RemotePeerInfo|string): + + Future[FilterSubscribeResult] + + {.async, gcsafe, raises: [Defect, ValueError].} = + + ## Unsubscribe from a content filter V2". if node.wakuFilterClientLegacy.isNil(): error "cannot unregister filter subscription to content", error="waku filter client is nil" - return + return err(FilterSubscribeError.serviceUnavailable()) - let peerOpt = node.peerManager.selectPeer(WakuFilterCodec) - if peerOpt.isNone(): - error "cannot register filter subscription to topic", error="no suitable remote peers" - return + let remotePeerRes = parsePeerInfo(peer) + if remotePeerRes.isErr(): + error "couldn't parse remotePeerInfo", error = remotePeerRes.error + return err(FilterSubscribeError.serviceUnavailable("No peers available")) + + let remotePeer = remotePeerRes.value + + info "deregistering all filter subscription to content", peer=remotePeer.peerId + + let unsubRes = await node.wakuFilterClient.unsubscribeAll(remotePeer) + if unsubRes.isOk(): + info "unsubscribed from all content-topic", peerId=remotePeer.peerId + else: + error "failed filter unsubscription from all content-topic", error=unsubRes.error + waku_node_errors.inc(labelValues = ["unsubscribe_filter_failure"]) + + return unsubRes - await node.filterUnsubscribe(pubsubTopic, contentTopics, peer=peerOpt.get()) +# NOTICE: subscribe / unsubscribe methods are removed - they were already depricated +# yet incompatible to handle both type of filters - use specific filter registration instead ## Waku archive const WakuArchiveDefaultRetentionPolicyInterval* = 30.minutes diff --git a/waku/waku_core/peers.nim b/waku/waku_core/peers.nim index 19520ebcb0..bb918b3681 100644 --- a/waku/waku_core/peers.nim +++ b/waku/waku_core/peers.nim @@ -17,8 +17,8 @@ import libp2p/multicodec, libp2p/peerid, libp2p/peerinfo, - libp2p/routing_record - + libp2p/routing_record, + json_serialization type Connectedness* = enum @@ -62,6 +62,9 @@ type RemotePeerInfo* = ref object func `$`*(remotePeerInfo: RemotePeerInfo): string = $remotePeerInfo.peerId +proc writeValue*(w: var JsonWriter, value: RemotePeerInfo) {.inline, raises: [IOError].} = + w.writeValue $value + proc init*( T: typedesc[RemotePeerInfo], peerId: PeerID, diff --git a/waku/waku_filter/client.nim b/waku/waku_filter/client.nim index ae7b46b665..40ba73119e 100644 --- a/waku/waku_filter/client.nim +++ b/waku/waku_filter/client.nim @@ -20,7 +20,6 @@ import ./protocol, ./protocol_metrics - logScope: topics = "waku filter client" @@ -71,7 +70,7 @@ proc initProtocolHandler(wf: WakuFilterClientLegacy) = wf.handleMessagePush(peerId, requestId, push) wf.handler = handle - wf.codec = WakuFilterCodec + wf.codec = WakuLegacyFilterCodec proc new*(T: type WakuFilterClientLegacy, peerManager: PeerManager, @@ -87,7 +86,7 @@ proc new*(T: type WakuFilterClientLegacy, proc sendFilterRpc(wf: WakuFilterClientLegacy, rpc: FilterRPC, peer: PeerId|RemotePeerInfo): Future[WakuFilterResult[void]] {.async, gcsafe.}= - let connOpt = await wf.peerManager.dialPeer(peer, WakuFilterCodec) + let connOpt = await wf.peerManager.dialPeer(peer, WakuLegacyFilterCodec) if connOpt.isNone(): return err(dialFailure) let connection = connOpt.get() @@ -155,6 +154,8 @@ proc unsubscribe*(wf: WakuFilterClientLegacy, if sendRes.isErr(): return err(sendRes.error) + # FIXME: I see an issue here that such solution prevents filtering client to properly manage its + # subscriptions on different peers and get notified correctly! for topic in topics: wf.subManager.removeSubscription(pubsubTopic, topic) diff --git a/waku/waku_filter/protocol.nim b/waku/waku_filter/protocol.nim index 9ad6818a01..62c0d618af 100644 --- a/waku/waku_filter/protocol.nim +++ b/waku/waku_filter/protocol.nim @@ -20,7 +20,7 @@ logScope: const - WakuFilterCodec* = "/vac/waku/filter/2.0.0-beta1" + WakuLegacyFilterCodec* = "/vac/waku/filter/2.0.0-beta1" WakuFilterTimeout: Duration = 2.hours @@ -60,8 +60,6 @@ proc removeSubscription(subscriptions: var seq[Subscription], peer: PeerId, unsu ## Protocol type - MessagePushHandler* = proc(requestId: string, msg: MessagePush): Future[void] {.gcsafe, closure.} - WakuFilterLegacy* = ref object of LPProtocol rng*: ref rand.HmacDrbgContext peerManager*: PeerManager @@ -110,7 +108,7 @@ proc initProtocolHandler(wf: WakuFilterLegacy) = wf.handleFilterRequest(conn.peerId, rpc) wf.handler = handler - wf.codec = WakuFilterCodec + wf.codec = WakuLegacyFilterCodec proc new*(T: type WakuFilterLegacy, peerManager: PeerManager, @@ -131,7 +129,7 @@ proc init*(T: type WakuFilterLegacy, proc sendFilterRpc(wf: WakuFilterLegacy, rpc: FilterRPC, peer: PeerId|RemotePeerInfo): Future[WakuFilterResult[void]] {.async, gcsafe.}= - let connOpt = await wf.peerManager.dialPeer(peer, WakuFilterCodec) + let connOpt = await wf.peerManager.dialPeer(peer, WakuLegacyFilterCodec) if connOpt.isNone(): return err(dialFailure) let connection = connOpt.get() diff --git a/waku/waku_filter_v2/client.nim b/waku/waku_filter_v2/client.nim index 5a7d86d904..72da090481 100644 --- a/waku/waku_filter_v2/client.nim +++ b/waku/waku_filter_v2/client.nim @@ -23,19 +23,21 @@ logScope: topics = "waku filter client" type - MessagePushHandler* = proc(pubsubTopic: PubsubTopic, message: WakuMessage) {.gcsafe, closure.} WakuFilterClient* = ref object of LPProtocol rng: ref HmacDrbgContext - messagePushHandler: MessagePushHandler peerManager: PeerManager + pushHandlers: seq[FilterPushHandler] func generateRequestId(rng: ref HmacDrbgContext): string = var bytes: array[10, byte] hmacDrbgGenerate(rng[], bytes) return toHex(bytes) -proc sendSubscribeRequest(wfc: WakuFilterClient, servicePeer: RemotePeerInfo, filterSubscribeRequest: FilterSubscribeRequest): Future[FilterSubscribeResult] {.async.} = - trace "Sending filter subscribe request", servicePeer, filterSubscribeRequest +proc sendSubscribeRequest(wfc: WakuFilterClient, servicePeer: RemotePeerInfo, + filterSubscribeRequest: FilterSubscribeRequest): + Future[FilterSubscribeResult] + {.async.} = + trace "Sending filter subscribe request", peerId=servicePeer.peerId, filterSubscribeRequest let connOpt = await wfc.peerManager.dialPeer(servicePeer, WakuFilterSubscribeCodec) if connOpt.isNone(): @@ -77,7 +79,13 @@ proc ping*(wfc: WakuFilterClient, servicePeer: RemotePeerInfo): Future[FilterSub return await wfc.sendSubscribeRequest(servicePeer, filterSubscribeRequest) -proc subscribe*(wfc: WakuFilterClient, servicePeer: RemotePeerInfo, pubsubTopic: PubsubTopic, contentTopics: seq[ContentTopic]): Future[FilterSubscribeResult] {.async.} = +proc subscribe*(wfc: WakuFilterClient, + servicePeer: RemotePeerInfo, + pubsubTopic: PubsubTopic, + contentTopics: seq[ContentTopic]): + Future[FilterSubscribeResult] + {.async.} = + let requestId = generateRequestId(wfc.rng) let filterSubscribeRequest = FilterSubscribeRequest.subscribe( requestId = requestId, @@ -87,7 +95,13 @@ proc subscribe*(wfc: WakuFilterClient, servicePeer: RemotePeerInfo, pubsubTopic: return await wfc.sendSubscribeRequest(servicePeer, filterSubscribeRequest) -proc unsubscribe*(wfc: WakuFilterClient, servicePeer: RemotePeerInfo, pubsubTopic: PubsubTopic, contentTopics: seq[ContentTopic]): Future[FilterSubscribeResult] {.async.} = +proc unsubscribe*(wfc: WakuFilterClient, + servicePeer: RemotePeerInfo, + pubsubTopic: PubsubTopic, + contentTopics: seq[ContentTopic]): + Future[FilterSubscribeResult] + {.async.} = + let requestId = generateRequestId(wfc.rng) let filterSubscribeRequest = FilterSubscribeRequest.unsubscribe( requestId = requestId, @@ -97,7 +111,10 @@ proc unsubscribe*(wfc: WakuFilterClient, servicePeer: RemotePeerInfo, pubsubTopi return await wfc.sendSubscribeRequest(servicePeer, filterSubscribeRequest) -proc unsubscribeAll*(wfc: WakuFilterClient, servicePeer: RemotePeerInfo): Future[FilterSubscribeResult] {.async.} = +proc unsubscribeAll*(wfc: WakuFilterClient, servicePeer: RemotePeerInfo): + Future[FilterSubscribeResult] + {.async.} = + let requestId = generateRequestId(wfc.rng) let filterSubscribeRequest = FilterSubscribeRequest.unsubscribeAll( requestId = requestId @@ -105,6 +122,9 @@ proc unsubscribeAll*(wfc: WakuFilterClient, servicePeer: RemotePeerInfo): Future return await wfc.sendSubscribeRequest(servicePeer, filterSubscribeRequest) +proc registerPushHandler*(wfc: WakuFilterClient, handler: FilterPushHandler) = + wfc.pushHandlers.add(handler) + proc initProtocolHandler(wfc: WakuFilterClient) = proc handler(conn: Connection, proto: string) {.async.} = @@ -119,7 +139,9 @@ proc initProtocolHandler(wfc: WakuFilterClient) = let messagePush = decodeRes.value #TODO: toAPI() split here trace "Received message push", peerId=conn.peerId, messagePush - wfc.messagePushHandler(messagePush.pubsubTopic, messagePush.wakuMessage) + for handler in wfc.pushHandlers: + asyncSpawn handler(messagePush.pubsubTopic, + messagePush.wakuMessage) # Protocol specifies no response for now return @@ -128,14 +150,14 @@ proc initProtocolHandler(wfc: WakuFilterClient) = wfc.codec = WakuFilterPushCodec proc new*(T: type WakuFilterClient, - rng: ref HmacDrbgContext, - messagePushHandler: MessagePushHandler, - peerManager: PeerManager): T = + peerManager: PeerManager, + rng: ref HmacDrbgContext + ): T = let wfc = WakuFilterClient( rng: rng, - messagePushHandler: messagePushHandler, - peerManager: peerManager + peerManager: peerManager, + pushHandlers: @[] ) wfc.initProtocolHandler() wfc diff --git a/waku/waku_filter_v2/rpc.nim b/waku/waku_filter_v2/rpc.nim index e6718dfa93..7807651b76 100644 --- a/waku/waku_filter_v2/rpc.nim +++ b/waku/waku_filter_v2/rpc.nim @@ -4,6 +4,7 @@ else: {.push raises: [].} import + json_serialization, std/options import ../waku_core @@ -70,3 +71,29 @@ proc ok*(T: type FilterSubscribeResponse, requestId: string, desc = "OK"): T = statusCode: 200, statusDesc: some(desc) ) + +proc `$`*(err: FilterSubscribeResponse): string = + "FilterSubscribeResponse of req:" & err.requestId & " [" & $err.statusCode & "] " & $err.statusDesc + +proc `$`*(req: FilterSubscribeRequest): string = + "FilterSubscribeRequest of req:" & req.requestId & " [" & $req.filterSubscribeType & "] " & $req.pubsubTopic + +proc `$`*(t: FilterSubscribeType): string = + result = case t: + of SUBSCRIBER_PING: "SUBSCRIBER_PING" + of SUBSCRIBE: "SUBSCRIBE" + of UNSUBSCRIBE: "UNSUBSCRIBE" + of UNSUBSCRIBE_ALL: "UNSUBSCRIBE_ALL" + +proc writeValue*(writer: var JsonWriter, value: FilterSubscribeRequest) {.inline, raises: [IOError].} = + writer.beginRecord() + writer.writeField("requestId", value.requestId) + writer.writeField("type", value.filterSubscribeType) + if value.pubsubTopic.isSome: + writer.writeField("pubsubTopic", value.pubsubTopic) + if value.contentTopics.len>0: + writer.writeField("contentTopics", value.contentTopics) + writer.endRecord() + + + From 2e515a06ed0885a9e2b226a452b36bfdbfef324e Mon Sep 17 00:00:00 2001 From: Aaryamann Challani <43716372+rymnc@users.noreply.github.com> Date: Mon, 18 Sep 2023 10:56:58 +0530 Subject: [PATCH 026/274] chore(rln-relay): logs, updated submodule, leaves_set metric (#2024) * chore(rln-relay): logs, updated submodule, leaves_set metric * chore(rln-relay): update build script, fix makefile --- .gitmodules | 2 +- Makefile | 5 ++-- scripts/build_rln.sh | 26 ++++++++++++++++--- tests/waku_rln_relay/test_waku_rln_relay.nim | 1 + vendor/zerokit | 2 +- .../group_manager/on_chain/group_manager.nim | 6 ++++- waku/waku_rln_relay/rln/rln_interface.nim | 4 +++ 7 files changed, 38 insertions(+), 8 deletions(-) diff --git a/.gitmodules b/.gitmodules index ef341c24fd..5c7cb03763 100644 --- a/.gitmodules +++ b/.gitmodules @@ -143,7 +143,7 @@ path = vendor/zerokit url = https://github.com/vacp2p/zerokit.git ignore = dirty - branch = v0.3.2 + branch = v0.3.4 [submodule "vendor/nim-regex"] path = vendor/nim-regex url = https://github.com/nitely/nim-regex.git diff --git a/Makefile b/Makefile index e083d30323..586bdb82ec 100644 --- a/Makefile +++ b/Makefile @@ -119,16 +119,17 @@ clean: | clean-libbacktrace .PHONY: librln LIBRLN_BUILDDIR := $(CURDIR)/vendor/zerokit +LIBRLN_VERSION := v0.3.4 ifeq ($(OS),Windows_NT) LIBRLN_FILE := rln.lib else -LIBRLN_FILE := librln.a +LIBRLN_FILE := librln_$(LIBRLN_VERSION).a endif $(LIBRLN_FILE): echo -e $(BUILD_MSG) "$@" && \ - ./scripts/build_rln.sh $(LIBRLN_BUILDDIR) + ./scripts/build_rln.sh $(LIBRLN_BUILDDIR) $(LIBRLN_VERSION) $(LIBRLN_FILE) librln: | $(LIBRLN_FILE) diff --git a/scripts/build_rln.sh b/scripts/build_rln.sh index 3fda88ab81..dec443dc4f 100755 --- a/scripts/build_rln.sh +++ b/scripts/build_rln.sh @@ -7,25 +7,45 @@ set -e # first argument is the build directory build_dir=$1 +rln_version=$2 +output_filename=$3 if [[ -z "$build_dir" ]]; then echo "No build directory specified" exit 1 fi +if [[ -z "$rln_version" ]]; then + echo "No rln version specified" + exit 1 +fi + +if [[ -z "$output_filename" ]]; then + echo "No output filename specified" + exit 1 +fi + # Get the host triplet host_triplet=$(rustup show | grep "Default host: " | cut -d' ' -f3) # Download the prebuilt rln library if it is available -if curl --silent --fail-with-body -L "https://github.com/vacp2p/zerokit/releases/download/v0.3.2/$host_triplet-rln.tar.gz" >> "$host_triplet-rln.tar.gz" +if curl --silent --fail-with-body -L "https://github.com/vacp2p/zerokit/releases/download/$rln_version/$host_triplet-rln.tar.gz" >> "$host_triplet-rln.tar.gz" then echo "Downloaded $host_triplet-rln.tar.gz" tar -xzf "$host_triplet-rln.tar.gz" - mv release/librln.a . + mv release/librln.a $output_filename rm -rf "$host_triplet-rln.tar.gz" release else echo "Failed to download $host_triplet-rln.tar.gz" # Build rln instead + # first, check if submodule version = version in Makefile + submodule_version=$(cargo metadata --format-version=1 --no-deps | jq '.packages[] | select(.name == "rln") | .version') + if [[ "v$submodule_version" != "$rln_version" ]]; then + echo "Submodule version (v$submodule_version) does not match version in Makefile ($rln_version)" + echo "Please update the submodule to $rln_version" + exit 1 + fi + # if submodule version = version in Makefile, build rln cargo build --release -p rln --manifest-path "$build_dir/rln/Cargo.toml" - cp "$build_dir/target/release/librln.a" . + cp "$build_dir/target/release/librln.a" $output_filename fi diff --git a/tests/waku_rln_relay/test_waku_rln_relay.nim b/tests/waku_rln_relay/test_waku_rln_relay.nim index d99bc1812c..bb032f9640 100644 --- a/tests/waku_rln_relay/test_waku_rln_relay.nim +++ b/tests/waku_rln_relay/test_waku_rln_relay.nim @@ -210,6 +210,7 @@ suite "Waku rln relay": idCredentialRes.isOk() check: rln.insertMembers(0, @[idCredentialRes.get().idCommitment]) + rln.leavesSet() == 1 test "insertMember rln utils": # create an RLN instance which also includes an empty Merkle tree diff --git a/vendor/zerokit b/vendor/zerokit index b51896c3a7..b903d8d740 160000 --- a/vendor/zerokit +++ b/vendor/zerokit @@ -1 +1 @@ -Subproject commit b51896c3a710f567fc7e054681767d6547a8eb9b +Subproject commit b903d8d740e0b8b82057bcc5377ddce05ae5676b diff --git a/waku/waku_rln_relay/group_manager/on_chain/group_manager.nim b/waku/waku_rln_relay/group_manager/on_chain/group_manager.nim index f23cc0d303..618a64d00b 100644 --- a/waku/waku_rln_relay/group_manager/on_chain/group_manager.nim +++ b/waku/waku_rln_relay/group_manager/on_chain/group_manager.nim @@ -106,7 +106,7 @@ method atomicBatch*(g: OnchainGroupManager, if not operationSuccess: raise newException(ValueError, "atomic batch operation failed") # TODO: when slashing is enabled, we need to track slashed members - waku_rln_number_registered_memberships.set(int64(start.int + idCommitments.len - toRemoveIndices.len)) + waku_rln_number_registered_memberships.set(int64(g.rlnInstance.leavesSet())) if g.registerCb.isSome(): var membersSeq = newSeq[Membership]() @@ -352,8 +352,10 @@ proc startOnchainSync(g: OnchainGroupManager): Future[void] {.async.} = let blockChunkSize = 2_000 var fromBlock = if g.latestProcessedBlock > g.rlnContractDeployedBlockNumber: + info "syncing from last processed block", blockNumber = g.latestProcessedBlock g.latestProcessedBlock + 1 else: + info "syncing from rln contract deployed block", blockNumber = g.rlnContractDeployedBlockNumber g.rlnContractDeployedBlockNumber try: @@ -482,6 +484,7 @@ method init*(g: OnchainGroupManager): Future[void] {.async.} = var deployedBlockNumber: Uint256 try: deployedBlockNumber = await rlnContract.deployedBlockNumber().call() + debug "using rln storage", deployedBlockNumber, rlnContractAddress except CatchableError: raise newException(ValueError, "could not get the deployed block number: " & getCurrentExceptionMsg()) @@ -504,6 +507,7 @@ method init*(g: OnchainGroupManager): Future[void] {.async.} = except CatchableError: error "failed to restart group sync", error = getCurrentExceptionMsg() + waku_rln_number_registered_memberships.set(int64(g.rlnInstance.leavesSet())) g.initialized = true method stop*(g: OnchainGroupManager): Future[void] {.async.} = diff --git a/waku/waku_rln_relay/rln/rln_interface.nim b/waku/waku_rln_relay/rln/rln_interface.nim index 828b205484..c3668c6c61 100644 --- a/waku/waku_rln_relay/rln/rln_interface.nim +++ b/waku/waku_rln_relay/rln/rln_interface.nim @@ -59,6 +59,10 @@ proc get_leaf*(ctx: ptr RLN, index: uint, output_buffer: ptr Buffer): bool {.imp ## the output_buffer holds a serialized leaf of 32 bytes ## the return bool value indicates the success or failure of the operation +proc leaves_set*(ctx: ptr RLN): uint {.importc: "leaves_set".} +## gets the number of leaves set in the tree stored by ctx +## the return uint value indicates the number of leaves set in the tree + proc init_tree_with_leaves*(ctx: ptr RLN, input_buffer: ptr Buffer): bool {.importc: "init_tree_with_leaves".} ## sets multiple leaves in the tree stored by ctx to the value passed by input_buffer ## the input_buffer holds a serialized vector of leaves (32 bytes each) From 72f90663cd1dd3dedd6d974fdf654454c18564dc Mon Sep 17 00:00:00 2001 From: Ivan Folgueira Bande <128452529+Ivansete-status@users.noreply.github.com> Date: Mon, 18 Sep 2023 09:21:50 +0200 Subject: [PATCH 027/274] refactor(cbindings): Thread-safe communication between the main thread and the Waku Thread (#1978) * Thread-safe comms between main thread & Waku Thread - ChannelSPSCSingle. * Renaming procs from 'new' to 'createShared'. They use the shared allocator. * peer_manager_request: no need to use ptr WakuNode. * waku_thread: moving the 'waitFor' to upper layer. * waku_thread: `poll()` -> `waitFor sleepAsync(1)` to avoid risk of blocking. * libwaku: thread-safe "sub-objects" in an inter-thread requests. When two threads send data each other, that data cannot contain any GC'ed type (string, seq, ref, closures) at any level. * Allocating the 'configJson' in main thread and deallocating in Waku Thread. --- .gitmodules | 5 + library/alloc.nim | 29 +++++ library/libwaku.nim | 52 ++++---- .../protocols/relay_request.nim | 64 ---------- .../inter_thread_communication/request.nim | 21 ---- .../{ => requests}/node_lifecycle_request.nim | 55 +++++---- .../{ => requests}/peer_manager_request.nim | 36 +++--- .../requests/protocols/relay_request.nim | 114 ++++++++++++++++++ .../waku_thread_request.nim | 57 +++++++++ .../waku_thread_response.nim | 53 ++++++++ library/waku_thread/waku_thread.nim | 57 +++++---- vendor/nim-taskpools | 1 + 12 files changed, 378 insertions(+), 166 deletions(-) delete mode 100644 library/waku_thread/inter_thread_communication/protocols/relay_request.nim delete mode 100644 library/waku_thread/inter_thread_communication/request.nim rename library/waku_thread/inter_thread_communication/{ => requests}/node_lifecycle_request.nim (67%) rename library/waku_thread/inter_thread_communication/{ => requests}/peer_manager_request.nim (50%) create mode 100644 library/waku_thread/inter_thread_communication/requests/protocols/relay_request.nim create mode 100644 library/waku_thread/inter_thread_communication/waku_thread_request.nim create mode 100644 library/waku_thread/inter_thread_communication/waku_thread_response.nim create mode 160000 vendor/nim-taskpools diff --git a/.gitmodules b/.gitmodules index 5c7cb03763..9d69d0723b 100644 --- a/.gitmodules +++ b/.gitmodules @@ -154,3 +154,8 @@ url = https://github.com/nitely/nim-unicodedb.git ignore = untracked branch = master +[submodule "vendor/nim-taskpools"] + path = vendor/nim-taskpools + url = https://github.com/status-im/nim-taskpools.git + ignore = untracked + branch = stable diff --git a/library/alloc.nim b/library/alloc.nim index 44d5e67eae..a9aee0a8b9 100644 --- a/library/alloc.nim +++ b/library/alloc.nim @@ -1,3 +1,5 @@ +## Can be shared safely between threads +type SharedSeq*[T] = tuple[data: ptr UncheckedArray[T], len: int] proc alloc*(str: cstring): cstring = # Byte allocation from the given address. @@ -5,3 +7,30 @@ proc alloc*(str: cstring): cstring = let ret = cast[cstring](allocShared(len(str) + 1)) copyMem(ret, str, len(str) + 1) return ret + +proc alloc*(str: string): cstring = + ## Byte allocation from the given address. + ## There should be the corresponding manual deallocation with deallocShared ! + var ret = cast[cstring](allocShared(str.len + 1)) + let s = cast[seq[char]](str) + for i in 0.. 0: - # TODO: pending to return a valid message Id - return ok("hard-coded-message-id") - - return ok("") diff --git a/library/waku_thread/inter_thread_communication/request.nim b/library/waku_thread/inter_thread_communication/request.nim deleted file mode 100644 index 6d3060de55..0000000000 --- a/library/waku_thread/inter_thread_communication/request.nim +++ /dev/null @@ -1,21 +0,0 @@ - -# This file contains the base message request type that will be handled -# by the Waku Node thread. - -import - std/json, - stew/results -import - chronos -import - ../../../waku/node/waku_node, - ../waku_thread - -type - InterThreadRequest* = ref object of RootObj - -method process*(self: InterThreadRequest, node: ptr WakuNode): - Future[Result[string, string]] {.base.} = discard - -proc `$`*(self: InterThreadRequest): string = - return $( %* self ) diff --git a/library/waku_thread/inter_thread_communication/node_lifecycle_request.nim b/library/waku_thread/inter_thread_communication/requests/node_lifecycle_request.nim similarity index 67% rename from library/waku_thread/inter_thread_communication/node_lifecycle_request.nim rename to library/waku_thread/inter_thread_communication/requests/node_lifecycle_request.nim index 0ce14088d8..cf134ceeb3 100644 --- a/library/waku_thread/inter_thread_communication/node_lifecycle_request.nim +++ b/library/waku_thread/inter_thread_communication/requests/node_lifecycle_request.nim @@ -6,21 +6,21 @@ import stew/results, stew/shims/net import - ../../../waku/common/enr/builder, - ../../../waku/waku_enr/capabilities, - ../../../waku/waku_enr/multiaddr, - ../../../waku/waku_enr/sharding, - ../../../waku/waku_core/message/message, - ../../../waku/waku_core/topics/pubsub_topic, - ../../../waku/node/peer_manager/peer_manager, - ../../../waku/waku_core, - ../../../waku/node/waku_node, - ../../../waku/node/builder, - ../../../waku/node/config, - ../../../waku/waku_relay/protocol, - ../../events/[json_error_event,json_message_event,json_base_event], - ../config, - ./request + ../../../../waku/common/enr/builder, + ../../../../waku/waku_enr/capabilities, + ../../../../waku/waku_enr/multiaddr, + ../../../../waku/waku_enr/sharding, + ../../../../waku/waku_core/message/message, + ../../../../waku/waku_core/topics/pubsub_topic, + ../../../../waku/node/peer_manager/peer_manager, + ../../../../waku/waku_core, + ../../../../waku/node/waku_node, + ../../../../waku/node/builder, + ../../../../waku/node/config, + ../../../../waku/waku_relay/protocol, + ../../../events/[json_error_event,json_message_event,json_base_event], + ../../../alloc, + ../../config type NodeLifecycleMsgType* = enum @@ -29,18 +29,25 @@ type STOP_NODE type - NodeLifecycleRequest* = ref object of InterThreadRequest + NodeLifecycleRequest* = object operation: NodeLifecycleMsgType configJson: cstring ## Only used in 'CREATE_NODE' operation -proc new*(T: type NodeLifecycleRequest, - op: NodeLifecycleMsgType, - configJson: cstring = ""): T = +proc createShared*(T: type NodeLifecycleRequest, + op: NodeLifecycleMsgType, + configJson: cstring = ""): ptr type T = - return NodeLifecycleRequest(operation: op, configJson: configJson) + var ret = createShared(T) + ret[].operation = op + ret[].configJson = configJson.alloc() + return ret + +proc destroyShared(self: ptr NodeLifecycleRequest) = + deallocShared(self[].configJson) + deallocShared(self) proc createNode(configJson: cstring): - Future[Result[WakuNode, string]] {.async.} = + Future[Result[WakuNode, string]] {.async.} = var privateKey: PrivateKey var netConfig = NetConfig.init(ValidIpAddress.init("127.0.0.1"), @@ -108,8 +115,10 @@ proc createNode(configJson: cstring): return ok(newNode) -method process*(self: NodeLifecycleRequest, - node: ptr WakuNode): Future[Result[string, string]] {.async.} = +proc process*(self: ptr NodeLifecycleRequest, + node: ptr WakuNode): Future[Result[string, string]] {.async.} = + + defer: destroyShared(self) case self.operation: of CREATE_NODE: diff --git a/library/waku_thread/inter_thread_communication/peer_manager_request.nim b/library/waku_thread/inter_thread_communication/requests/peer_manager_request.nim similarity index 50% rename from library/waku_thread/inter_thread_communication/peer_manager_request.nim rename to library/waku_thread/inter_thread_communication/requests/peer_manager_request.nim index a76b1ddf82..ddace3d896 100644 --- a/library/waku_thread/inter_thread_communication/peer_manager_request.nim +++ b/library/waku_thread/inter_thread_communication/requests/peer_manager_request.nim @@ -7,27 +7,33 @@ import stew/results, stew/shims/net import - ../../../waku/node/waku_node, - ./request + ../../../../waku/node/waku_node, + ../../../alloc type PeerManagementMsgType* = enum CONNECT_TO type - PeerManagementRequest* = ref object of InterThreadRequest + PeerManagementRequest* = object operation: PeerManagementMsgType - peerMultiAddr: string + peerMultiAddr: cstring dialTimeout: Duration -proc new*(T: type PeerManagementRequest, - op: PeerManagementMsgType, - peerMultiAddr: string, - dialTimeout: Duration): T = +proc createShared*(T: type PeerManagementRequest, + op: PeerManagementMsgType, + peerMultiAddr: string, + dialTimeout: Duration): ptr type T = - return PeerManagementRequest(operation: op, - peerMultiAddr: peerMultiAddr, - dialTimeout: dialTimeout) + var ret = createShared(T) + ret[].operation = op + ret[].peerMultiAddr = peerMultiAddr.alloc() + ret[].dialTimeout = dialTimeout + return ret + +proc destroyShared(self: ptr PeerManagementRequest) = + deallocShared(self[].peerMultiAddr) + deallocShared(self) proc connectTo(node: WakuNode, peerMultiAddr: string, @@ -46,13 +52,15 @@ proc connectTo(node: WakuNode, return ok() -method process*(self: PeerManagementRequest, - node: ptr WakuNode): Future[Result[string, string]] {.async.} = +proc process*(self: ptr PeerManagementRequest, + node: WakuNode): Future[Result[string, string]] {.async.} = + + defer: destroyShared(self) case self.operation: of CONNECT_TO: - let ret = node[].connectTo(self.peerMultiAddr, self.dialTimeout) + let ret = node.connectTo($self[].peerMultiAddr, self[].dialTimeout) if ret.isErr(): return err(ret.error) diff --git a/library/waku_thread/inter_thread_communication/requests/protocols/relay_request.nim b/library/waku_thread/inter_thread_communication/requests/protocols/relay_request.nim new file mode 100644 index 0000000000..dfa2fd7e45 --- /dev/null +++ b/library/waku_thread/inter_thread_communication/requests/protocols/relay_request.nim @@ -0,0 +1,114 @@ + +import + std/[options,sequtils,strutils] +import + chronicles, + chronos, + stew/results, + stew/shims/net +import + ../../../../../waku/waku_core/message/message, + ../../../../../waku/node/waku_node, + ../../../../../waku/waku_core/time, # Timestamp + ../../../../../waku/waku_core/topics/pubsub_topic, + ../../../../../waku/waku_relay/protocol, + ../../../../alloc + +type + RelayMsgType* = enum + SUBSCRIBE + UNSUBSCRIBE + PUBLISH + +type + ThreadSafeWakuMessage* = object + payload: SharedSeq[byte] + contentTopic: cstring + meta: SharedSeq[byte] + version: uint32 + timestamp: Timestamp + ephemeral: bool + when defined(rln): + proof: SharedSeq[byte] + +type + RelayRequest* = object + operation: RelayMsgType + pubsubTopic: cstring + relayEventCallback: WakuRelayHandler # not used in 'PUBLISH' requests + message: ThreadSafeWakuMessage # only used in 'PUBLISH' requests + +proc createShared*(T: type RelayRequest, + op: RelayMsgType, + pubsubTopic: PubsubTopic, + relayEventCallback: WakuRelayHandler = nil, + m = WakuMessage()): ptr type T = + + var ret = createShared(T) + ret[].operation = op + ret[].pubsubTopic = pubsubTopic.alloc() + ret[].relayEventCallback = relayEventCallback + ret[].message = ThreadSafeWakuMessage( + payload: allocSharedSeq(m.payload), + contentTopic: m.contentTopic.alloc(), + meta: allocSharedSeq(m.meta), + version: m.version, + timestamp: m.timestamp, + ephemeral: m.ephemeral, + ) + when defined(rln): + ret[].message.proof = allocSharedSeq(m.proof) + + return ret + +proc destroyShared(self: ptr RelayRequest) = + deallocSharedSeq(self[].message.payload) + deallocShared(self[].message.contentTopic) + deallocSharedSeq(self[].message.meta) + when defined(rln): + deallocSharedSeq(self[].message.proof) + + deallocShared(self) + +proc toWakuMessage(m: ThreadSafeWakuMessage): WakuMessage = + var wakuMessage = WakuMessage() + + wakuMessage.payload = m.payload.toSeq() + wakuMessage.contentTopic = $m.contentTopic + wakuMessage.meta = m.meta.toSeq() + wakuMessage.version = m.version + wakuMessage.timestamp = m.timestamp + wakuMessage.ephemeral = m.ephemeral + + when defined(rln): + wakuMessage.proof = m.proof + + return wakuMessage + +proc process*(self: ptr RelayRequest, + node: ptr WakuNode): Future[Result[string, string]] {.async.} = + + defer: destroyShared(self) + + if node.wakuRelay.isNil(): + return err("Operation not supported without Waku Relay enabled.") + + case self.operation: + + of SUBSCRIBE: + node.wakuRelay.subscribe($self.pubsubTopic, self.relayEventCallback) + + of UNSUBSCRIBE: + node.wakuRelay.unsubscribe($self.pubsubTopic) + + of PUBLISH: + let numPeers = await node.wakuRelay.publish($self.pubsubTopic, + self.message.toWakuMessage()) + if numPeers == 0: + return err("Message not sent because no peers found.") + + elif numPeers > 0: + # TODO: pending to return a valid message Id + return ok("hard-coded-message-id") + + return ok("") diff --git a/library/waku_thread/inter_thread_communication/waku_thread_request.nim b/library/waku_thread/inter_thread_communication/waku_thread_request.nim new file mode 100644 index 0000000000..79ba7797d7 --- /dev/null +++ b/library/waku_thread/inter_thread_communication/waku_thread_request.nim @@ -0,0 +1,57 @@ + +## This file contains the base message request type that will be handled. +## The requests are created by the main thread and processed by +## the Waku Thread. + +import + std/json, + stew/results +import + chronos +import + ../../../waku/node/waku_node, + ./requests/node_lifecycle_request, + ./requests/peer_manager_request, + ./requests/protocols/relay_request + +type + RequestType* {.pure.} = enum + LIFECYCLE, + PEER_MANAGER, + RELAY, + +type + InterThreadRequest* = object + reqType: RequestType + reqContent: pointer + +proc createShared*(T: type InterThreadRequest, + reqType: RequestType, + reqContent: pointer): ptr type T = + var ret = createShared(T) + ret[].reqType = reqType + ret[].reqContent = reqContent + return ret + +proc process*(T: type InterThreadRequest, + request: ptr InterThreadRequest, + node: ptr WakuNode): + Future[Result[string, string]] {.async.} = + ## Processes the request and deallocates its memory + defer: deallocShared(request) + + echo "Request received: " & $request[].reqType + + let retFut = + case request[].reqType + of LIFECYCLE: + cast[ptr NodeLifecycleRequest](request[].reqContent).process(node) + of PEER_MANAGER: + cast[ptr PeerManagementRequest](request[].reqContent).process(node[]) + of RELAY: + cast[ptr RelayRequest](request[].reqContent).process(node) + + return await retFut + +proc `$`*(self: InterThreadRequest): string = + return $self.reqType \ No newline at end of file diff --git a/library/waku_thread/inter_thread_communication/waku_thread_response.nim b/library/waku_thread/inter_thread_communication/waku_thread_response.nim new file mode 100644 index 0000000000..c3005f4d7a --- /dev/null +++ b/library/waku_thread/inter_thread_communication/waku_thread_response.nim @@ -0,0 +1,53 @@ + +## This file contains the base message response type that will be handled. +## The response will be created from the Waku Thread and processed in +## the main thread. + +import + std/json, + stew/results + +type + ResponseType {.pure.} = enum + OK, + ERR, + +type + InterThreadResponse* = object + respType: ResponseType + content: cstring + +proc createShared*(T: type InterThreadResponse, + res: Result[string, string]): ptr type T = + ## Converts a `Result[string, string]` into a `ptr InterThreadResponse` + ## so that it can be transfered to another thread in a safe way. + + var ret = createShared(T) + if res.isOk(): + let value = res.get() + ret[].respType = ResponseType.OK + ret[].content = cast[cstring](allocShared0(value.len + 1)) + copyMem(ret[].content, unsafeAddr value, value.len + 1) + else: + let error = res.error + ret[].respType = ResponseType.ERR + ret[].content = cast[cstring](allocShared0(error.len + 1)) + copyMem(ret[].content, unsafeAddr error, error.len + 1) + return ret + +proc process*(T: type InterThreadResponse, + resp: ptr InterThreadResponse): + Result[string, string] = + ## Converts the received `ptr InterThreadResponse` into a + ## `Result[string, string]`. Notice that the response is expected to be + ## allocated from the Waku Thread and deallocated by the main thread. + + defer: + deallocShared(resp[].content) + deallocShared(resp) + + case resp[].respType + of OK: + return ok($resp[].content) + of ERR: + return err($resp[].content) diff --git a/library/waku_thread/waku_thread.nim b/library/waku_thread/waku_thread.nim index 8fd1253c8e..c9a4051177 100644 --- a/library/waku_thread/waku_thread.nim +++ b/library/waku_thread/waku_thread.nim @@ -9,18 +9,19 @@ import chronicles, chronos, stew/results, - stew/shims/net + stew/shims/net, + taskpools/channels_spsc_single import ../../../waku/node/waku_node, ../events/[json_error_event,json_message_event,json_base_event], - ./inter_thread_communication/request + ./inter_thread_communication/waku_thread_request, + ./inter_thread_communication/waku_thread_response type Context* = object thread: Thread[(ptr Context)] - reqChannel: Channel[InterThreadRequest] - respChannel: Channel[Result[string, string]] - node: WakuNode + reqChannel: ChannelSPSCSingle[ptr InterThreadRequest] + respChannel: ChannelSPSCSingle[ptr InterThreadResponse] var ctx {.threadvar.}: ptr Context @@ -49,12 +50,20 @@ proc run(ctx: ptr Context) {.thread.} = while running.load == true: ## Trying to get a request from the libwaku main thread - let req = ctx.reqChannel.tryRecv() - if req[0] == true: - let response = waitFor req[1].process(addr node) - ctx.respChannel.send( response ) - poll() + var request: ptr InterThreadRequest + let recvOk = ctx.reqChannel.tryRecv(request) + if recvOk == true: + let resultResponse = + waitFor InterThreadRequest.process(request, addr node) + + ## Converting a `Result` into a thread-safe transferable response type + let threadSafeResp = InterThreadResponse.createShared(resultResponse) + + ## The error-handling is performed in the main thread + discard ctx.respChannel.trySend( threadSafeResp ) + + waitFor sleepAsync(1) tearDownForeignThreadGc() @@ -65,8 +74,6 @@ proc createWakuThread*(): Result[void, string] = waku_init() ctx = createShared(Context, 1) - ctx.reqChannel.open() - ctx.respChannel.open() running.store(true) @@ -83,20 +90,24 @@ proc createWakuThread*(): Result[void, string] = proc stopWakuNodeThread*() = running.store(false) joinThread(ctx.thread) - - ctx.reqChannel.close() - ctx.respChannel.close() - freeShared(ctx) -proc sendRequestToWakuThread*(req: InterThreadRequest): Result[string, string] = +proc sendRequestToWakuThread*(reqType: RequestType, + reqContent: pointer): Result[string, string] = - ctx.reqChannel.send(req) + let req = InterThreadRequest.createShared(reqType, reqContent) - var resp = ctx.respChannel.tryRecv() - while resp[0] == false: - resp = ctx.respChannel.tryRecv() - os.sleep(1) + ## Sending the request + let sentOk = ctx.reqChannel.trySend(req) + if not sentOk: + return err("Couldn't send a request to the waku thread: " & $req[]) - return resp[1] + ## Waiting for the response + var response: ptr InterThreadResponse + var recvOk = ctx.respChannel.tryRecv(response) + while recvOk == false: + recvOk = ctx.respChannel.tryRecv(response) + os.sleep(1) + ## Converting the thread-safe response into a managed/CG'ed `Result` + return InterThreadResponse.process(response) diff --git a/vendor/nim-taskpools b/vendor/nim-taskpools new file mode 160000 index 0000000000..15e23ef1cf --- /dev/null +++ b/vendor/nim-taskpools @@ -0,0 +1 @@ +Subproject commit 15e23ef1cf0860330dcc32f50fcce5f840031e28 From f617cd9750e7dd23e29fa53e2646988fa9360177 Mon Sep 17 00:00:00 2001 From: Ivan Folgueira Bande <128452529+Ivansete-status@users.noreply.github.com> Date: Mon, 18 Sep 2023 18:51:49 +0200 Subject: [PATCH 028/274] chore: Updating nim-chronicles, nim-chronos, nim-presto, nimcrypto, nim-libp2p, and nim-nat-transversal (#2043) --- vendor/nim-chronicles | 2 +- vendor/nim-chronos | 2 +- vendor/nim-libp2p | 2 +- vendor/nim-nat-traversal | 2 +- vendor/nim-presto | 2 +- vendor/nimcrypto | 2 +- waku/node/rest/store/handlers.nim | 1 + waku/node/waku_metrics.nim | 15 ++++++--------- waku/node/waku_node.nim | 4 ++-- waku/waku_archive/archive.nim | 30 ++++++++++++++++-------------- waku/waku_filter_v2/protocol.nim | 10 ++++++---- 11 files changed, 37 insertions(+), 35 deletions(-) diff --git a/vendor/nim-chronicles b/vendor/nim-chronicles index 1e63508708..1922045dba 160000 --- a/vendor/nim-chronicles +++ b/vendor/nim-chronicles @@ -1 +1 @@ -Subproject commit 1e6350870855541b381d77d4659688bc0d2c4227 +Subproject commit 1922045dbaa34c2fae86a32dda0e2ac56f1cf435 diff --git a/vendor/nim-chronos b/vendor/nim-chronos index ab5a8c2e0f..2e8551b0d9 160000 --- a/vendor/nim-chronos +++ b/vendor/nim-chronos @@ -1 +1 @@ -Subproject commit ab5a8c2e0f6941fe3debd61dff0293790079d1b0 +Subproject commit 2e8551b0d973cfbebfab3be7f3329e11b9049007 diff --git a/vendor/nim-libp2p b/vendor/nim-libp2p index 74c402ed9d..41649f0999 160000 --- a/vendor/nim-libp2p +++ b/vendor/nim-libp2p @@ -1 +1 @@ -Subproject commit 74c402ed9db4652a455c00c8d1713b222e3ef3d5 +Subproject commit 41649f099979e0320a46b013744e5c3d2b6eb9c7 diff --git a/vendor/nim-nat-traversal b/vendor/nim-nat-traversal index 27d314d65c..14e016503f 160000 --- a/vendor/nim-nat-traversal +++ b/vendor/nim-nat-traversal @@ -1 +1 @@ -Subproject commit 27d314d65c9078924b3239fe4e2f5af0c512b28c +Subproject commit 14e016503fe6488230e6d0e59396efde96bd9252 diff --git a/vendor/nim-presto b/vendor/nim-presto index 2b440a443f..2ae448ff5b 160000 --- a/vendor/nim-presto +++ b/vendor/nim-presto @@ -1 +1 @@ -Subproject commit 2b440a443f3fc29197f267879e16bb8057ccc0ed +Subproject commit 2ae448ff5b0808c8f562c6f0a70bbd7a05407a37 diff --git a/vendor/nimcrypto b/vendor/nimcrypto index 4014ef939b..1c8d6e3caf 160000 --- a/vendor/nimcrypto +++ b/vendor/nimcrypto @@ -1 +1 @@ -Subproject commit 4014ef939b51e02053c2e16dd3481d47bc9267dd +Subproject commit 1c8d6e3caf3abc572136ae9a1da81730c4eb4288 diff --git a/waku/node/rest/store/handlers.nim b/waku/node/rest/store/handlers.nim index 04f47c9b94..3a4acf3c29 100644 --- a/waku/node/rest/store/handlers.nim +++ b/waku/node/rest/store/handlers.nim @@ -7,6 +7,7 @@ import std/strformat, stew/results, chronicles, + uri, json_serialization, presto/route import diff --git a/waku/node/waku_metrics.nim b/waku/node/waku_metrics.nim index 93c98ba576..140b55e7a2 100644 --- a/waku/node/waku_metrics.nim +++ b/waku/node/waku_metrics.nim @@ -21,21 +21,17 @@ const LogInterval = 30.seconds logScope: topics = "waku node metrics" - -type - # https://github.com/nim-lang/Nim/issues/17369 - MetricsLogger = proc(udata: pointer) {.gcsafe, raises: [Defect].} - proc startMetricsLog*() = - var logMetrics: MetricsLogger + var logMetrics: CallbackFunc var cumulativeErrors = 0.float64 var cumulativeConns = 0.float64 let logRlnMetrics = getRlnMetricsLogger() - logMetrics = proc(udata: pointer) = - {.gcsafe.}: + logMetrics = CallbackFunc( + proc(udata: pointer) {.gcsafe.} = + # TODO: libp2p_pubsub_peers is not public, so we need to make this either # public in libp2p or do our own peer counting after all. @@ -62,6 +58,7 @@ proc startMetricsLog*() = # Start protocol specific metrics logging logRlnMetrics() - discard setTimer(Moment.fromNow(LogInterval), logMetrics) + discard setTimer(Moment.fromNow(LogInterval), logMetrics) + ) discard setTimer(Moment.fromNow(LogInterval), logMetrics) diff --git a/waku/node/waku_node.nim b/waku/node/waku_node.nim index 2be13113eb..01396bbedf 100644 --- a/waku/node/waku_node.nim +++ b/waku/node/waku_node.nim @@ -114,14 +114,14 @@ proc getAutonatService*(rng: ref HmacDrbgContext): AutonatService = let autonatService = AutonatService.new( autonatClient = AutonatClient.new(), rng = rng, - scheduleInterval = Opt.some(chronos.seconds(120)), + scheduleInterval = some(chronos.seconds(120)), askNewConnectedPeers = false, numPeersToAsk = 3, maxQueueSize = 3, minConfidence = 0.7) proc statusAndConfidenceHandler(networkReachability: NetworkReachability, - confidence: Opt[float]): + confidence: Option[float]): Future[void] {.gcsafe, async.} = if confidence.isSome(): info "Peer reachability status", networkReachability=networkReachability, confidence=confidence.get() diff --git a/waku/waku_archive/archive.nim b/waku/waku_archive/archive.nim index c8ffb7715b..b6e8aad3fa 100644 --- a/waku/waku_archive/archive.nim +++ b/waku/waku_archive/archive.nim @@ -221,19 +221,21 @@ proc startMessageRetentionPolicyPeriodicTask*(w: WakuArchive, # Start the periodic message retention policy task # https://github.com/nim-lang/Nim/issues/17369 - var executeRetentionPolicy: proc(udata: pointer) {.gcsafe, raises: [Defect].} - executeRetentionPolicy = proc(udata: pointer) {.gcsafe.} = - - try: - let retPolRes = waitFor w.executeMessageRetentionPolicy() - if retPolRes.isErr(): - waku_archive_errors.inc(labelValues = [retPolicyFailure]) - error "error in periodic retention policy", error = retPolRes.error - except CatchableError: - waku_archive_errors.inc(labelValues = [retPolicyFailure]) - error "exception in periodic retention policy", - error = getCurrentExceptionMsg() - - discard setTimer(Moment.fromNow(interval), executeRetentionPolicy) + var executeRetentionPolicy: CallbackFunc + executeRetentionPolicy = + CallbackFunc( + proc (arg: pointer) {.gcsafe, raises: [].} = + try: + let retPolRes = waitFor w.executeMessageRetentionPolicy() + if retPolRes.isErr(): + waku_archive_errors.inc(labelValues = [retPolicyFailure]) + error "error in periodic retention policy", error = retPolRes.error + except CatchableError: + waku_archive_errors.inc(labelValues = [retPolicyFailure]) + error "exception in periodic retention policy", + error = getCurrentExceptionMsg() + + discard setTimer(Moment.fromNow(interval), executeRetentionPolicy) + ) discard setTimer(Moment.fromNow(interval), executeRetentionPolicy) diff --git a/waku/waku_filter_v2/protocol.nim b/waku/waku_filter_v2/protocol.nim index 36c488e06a..3dc7a9ae10 100644 --- a/waku/waku_filter_v2/protocol.nim +++ b/waku/waku_filter_v2/protocol.nim @@ -255,10 +255,12 @@ const MaintainSubscriptionsInterval* = 1.minutes proc startMaintainingSubscriptions*(wf: WakuFilter, interval: Duration) = trace "starting to maintain subscriptions" - var maintainSubs: proc(udata: pointer) {.gcsafe, raises: [Defect].} - maintainSubs = proc(udata: pointer) {.gcsafe.} = - maintainSubscriptions(wf) - wf.maintenanceTask = setTimer(Moment.fromNow(interval), maintainSubs) + var maintainSubs: CallbackFunc + maintainSubs = CallbackFunc( + proc(udata: pointer) {.gcsafe.} = + maintainSubscriptions(wf) + wf.maintenanceTask = setTimer(Moment.fromNow(interval), maintainSubs) + ) wf.maintenanceTask = setTimer(Moment.fromNow(interval), maintainSubs) From d6c7cd256f575e289b50c4c761f2310ec7a63739 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20Soko=C5=82owski?= Date: Tue, 19 Sep 2023 12:28:12 +0200 Subject: [PATCH 029/274] ci: add jq, fix RLN build script to not use rustup MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit To resolve RLN build issues like this: ``` Building: librln_v0.3.4.a ./scripts/build_rln.sh: line 29: rustup: command not found Warning: to ensure you are building in a supported repo state, please always run "make update" after "git pull" (it looks like you've forgotten to do this). This also applies whenever you switch to a new branch or commit, e.g.: whenever you run "git checkout ...". Failed to download -rln.tar.gz ./scripts/build_rln.sh: line 42: jq: command not found error: could not find `Cargo.toml` in `/app` or any parent directory make: *** [Makefile:131: librln_v0.3.4.a] Error 127 ``` Signed-off-by: Jakub Sokołowski --- Dockerfile | 2 +- scripts/build_rln.sh | 49 ++++++++++++++++++++------------------------ 2 files changed, 23 insertions(+), 28 deletions(-) diff --git a/Dockerfile b/Dockerfile index 46aa9c5cc2..0bbcf68920 100644 --- a/Dockerfile +++ b/Dockerfile @@ -9,7 +9,7 @@ ARG NIM_COMMIT ARG LOG_LEVEL=TRACE # Get build tools and required header files -RUN apk add --no-cache bash git build-base pcre-dev linux-headers curl rust cargo +RUN apk add --no-cache bash git build-base pcre-dev linux-headers curl jq rust cargo WORKDIR /app COPY . . diff --git a/scripts/build_rln.sh b/scripts/build_rln.sh index dec443dc4f..aa86ad6c5b 100755 --- a/scripts/build_rln.sh +++ b/scripts/build_rln.sh @@ -10,42 +10,37 @@ build_dir=$1 rln_version=$2 output_filename=$3 -if [[ -z "$build_dir" ]]; then - echo "No build directory specified" - exit 1 -fi - -if [[ -z "$rln_version" ]]; then - echo "No rln version specified" - exit 1 -fi - -if [[ -z "$output_filename" ]]; then - echo "No output filename specified" - exit 1 -fi +[[ -z "${build_dir}" ]] && { echo "No build directory specified"; exit 1; } +[[ -z "${rln_version}" ]] && { echo "No rln version specified"; exit 1; } +[[ -z "${output_filename}" ]] && { echo "No output filename specified"; exit 1; } # Get the host triplet -host_triplet=$(rustup show | grep "Default host: " | cut -d' ' -f3) +host_triplet=$(rustc --version --verbose | awk '/host:/{print $2}') # Download the prebuilt rln library if it is available -if curl --silent --fail-with-body -L "https://github.com/vacp2p/zerokit/releases/download/$rln_version/$host_triplet-rln.tar.gz" >> "$host_triplet-rln.tar.gz" +if curl --silent --fail-with-body -L \ + "https://github.com/vacp2p/zerokit/releases/download/$rln_version/${host_triplet}-rln.tar.gz" \ + -o "${host_triplet}-rln.tar.gz"; then - echo "Downloaded $host_triplet-rln.tar.gz" - tar -xzf "$host_triplet-rln.tar.gz" - mv release/librln.a $output_filename - rm -rf "$host_triplet-rln.tar.gz" release + echo "Downloaded ${host_triplet}-rln.tar.gz" + tar -xzf "${host_triplet}-rln.tar.gz" + mv "release/librln.a" "${output_filename}" + rm -rf "${host_triplet}-rln.tar.gz" release else - echo "Failed to download $host_triplet-rln.tar.gz" + echo "Failed to download ${host_triplet}-rln.tar.gz" # Build rln instead # first, check if submodule version = version in Makefile - submodule_version=$(cargo metadata --format-version=1 --no-deps | jq '.packages[] | select(.name == "rln") | .version') - if [[ "v$submodule_version" != "$rln_version" ]]; then - echo "Submodule version (v$submodule_version) does not match version in Makefile ($rln_version)" - echo "Please update the submodule to $rln_version" + cargo metadata --format-version=1 --no-deps --manifest-path "${build_dir}/rln/Cargo.toml" + submodule_version=$( + cargo metadata --format-version=1 --no-deps --manifest-path "${build_dir}/rln/Cargo.toml" \ + | jq -r '.packages[] | select(.name == "rln") | .version' + ) + if [[ "v${submodule_version}" != "${rln_version}" ]]; then + echo "Submodule version (v${submodule_version}) does not match version in Makefile (${rln_version})" + echo "Please update the submodule to ${rln_version}" exit 1 fi # if submodule version = version in Makefile, build rln - cargo build --release -p rln --manifest-path "$build_dir/rln/Cargo.toml" - cp "$build_dir/target/release/librln.a" $output_filename + cargo build --release -p rln --manifest-path "${build_dir}/rln/Cargo.toml" + cp "${build_dir}/target/release/librln.a" "${output_filename}" fi From 11e7394e0d767e3d7aa570c92d404c2c6e03bfce Mon Sep 17 00:00:00 2001 From: Ivan Folgueira Bande <128452529+Ivansete-status@users.noreply.github.com> Date: Tue, 19 Sep 2023 17:01:32 +0200 Subject: [PATCH 030/274] Adding 'librln' to `libwaku` and cleaning waku_example.c (#2044) * When adding the dependency with 'librln' to 'libwaku', it is required to remove the dependency with 'confutils' because the 'nim-confutils' module prevents the creation of a dynamic library (libwaku.so.) * waku_example.c: less code is needed because the Waku Thread attends any Waku event whereas the main thread can have a blocking scanf to retrieve user inputs. --- Makefile | 2 +- examples/cbindings/waku_example.c | 18 ------------------ waku/waku_rln_relay/rln_relay.nim | 1 - 3 files changed, 1 insertion(+), 20 deletions(-) diff --git a/Makefile b/Makefile index 586bdb82ec..a5109bcf24 100644 --- a/Makefile +++ b/Makefile @@ -251,7 +251,7 @@ docker-push: STATIC ?= false -libwaku: | build deps +libwaku: | build deps librln rm -f build/libwaku* ifeq ($(STATIC), true) echo -e $(BUILD_MSG) "build/$@.a" && \ diff --git a/examples/cbindings/waku_example.c b/examples/cbindings/waku_example.c index f6d4a744ba..b58dbc9a61 100644 --- a/examples/cbindings/waku_example.c +++ b/examples/cbindings/waku_example.c @@ -167,14 +167,6 @@ void show_main_menu() { printf("\t3.) Publish a message\n"); } -void set_scanf_to_not_block() { - fcntl(0, F_SETFL, fcntl(0, F_GETFL) | O_NONBLOCK); -} - -void set_scanf_to_block() { - fcntl(0, F_SETFL, fcntl(0, F_GETFL) ^ O_NONBLOCK); -} - void handle_user_input() { char cmd[1024]; memset(cmd, 0, 1024); @@ -191,7 +183,6 @@ void handle_user_input() { case SUBSCRIBE_TOPIC_MENU: { printf("Indicate the Pubsubtopic to subscribe:\n"); - set_scanf_to_block(); char pubsubTopic[128]; scanf("%127s", pubsubTopic); @@ -199,7 +190,6 @@ void handle_user_input() { handle_error) ); printf("The subscription went well\n"); - set_scanf_to_not_block(); show_main_menu(); } break; @@ -207,17 +197,14 @@ void handle_user_input() { case CONNECT_TO_OTHER_NODE_MENU: printf("Connecting to a node. Please indicate the peer Multiaddress:\n"); printf("e.g.: /ip4/127.0.0.1/tcp/60001/p2p/16Uiu2HAmVFXtAfSj4EiR7mL2KvL4EE2wztuQgUSBoj2Jx2KeXFLN\n"); - set_scanf_to_block(); char peerAddr[512]; scanf("%511s", peerAddr); WAKU_CALL(waku_connect(peerAddr, 10000 /* timeoutMs */, handle_error)); - set_scanf_to_not_block(); show_main_menu(); break; case PUBLISH_MESSAGE_MENU: { - set_scanf_to_block(); printf("Indicate the Pubsubtopic:\n"); char pubsubTopic[128]; scanf("%127s", pubsubTopic); @@ -228,7 +215,6 @@ void handle_user_input() { publish_message(pubsubTopic, msg); - set_scanf_to_not_block(); show_main_menu(); } break; @@ -264,9 +250,6 @@ int main(int argc, char** argv) { cfgNode.key, cfgNode.relay ? "true":"false"); - // To allow non-blocking 'reads' from stdin - fcntl(0, F_SETFL, fcntl(0, F_GETFL) ^ O_NONBLOCK); - WAKU_CALL( waku_default_pubsub_topic(print_default_pubsub_topic) ); WAKU_CALL( waku_version(print_waku_version) ); @@ -289,6 +272,5 @@ int main(int argc, char** argv) { show_main_menu(); while(1) { handle_user_input(); - // waku_poll(); } } diff --git a/waku/waku_rln_relay/rln_relay.nim b/waku/waku_rln_relay/rln_relay.nim index d711a8d8c5..15a85348b8 100644 --- a/waku/waku_rln_relay/rln_relay.nim +++ b/waku/waku_rln_relay/rln_relay.nim @@ -6,7 +6,6 @@ else: import std/[algorithm, sequtils, strutils, tables, times, os, deques], chronicles, options, chronos, chronos/ratelimit, stint, - confutils, web3, json, web3/ethtypes, eth/keys, From 28b040007f3b2387a39049e3415675bafebb6191 Mon Sep 17 00:00:00 2001 From: Vaclav Pavlin Date: Wed, 20 Sep 2023 14:09:38 +0200 Subject: [PATCH 031/274] chore(ci): add js-waku as a dependency for pre-release createion (#2022) --- .github/workflows/pre-release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pre-release.yml b/.github/workflows/pre-release.yml index 477bf18732..16a4092bc3 100644 --- a/.github/workflows/pre-release.yml +++ b/.github/workflows/pre-release.yml @@ -104,7 +104,7 @@ jobs: create-release-candidate: runs-on: ubuntu-latest - needs: [ tag-name, build-and-publish ] + needs: [ tag-name, build-and-publish, js-waku ] steps: - name: Checkout code uses: actions/checkout@v3 From 8f8d1efb34e4273b47826d1152e6b05d7a53d649 Mon Sep 17 00:00:00 2001 From: Ivan Folgueira Bande <128452529+Ivansete-status@users.noreply.github.com> Date: Wed, 20 Sep 2023 15:45:20 +0200 Subject: [PATCH 032/274] Bumping some vendors (#2048) dnsclient.nim nim-bearssl nim-eth nim-faststreams nim-http-utils nim-json-rpc nim-json-serialization nim-libbacktrace nim-metrics nim-regex nim-secp256k1 nim-stew nim-stint nim-testutils --- vendor/dnsclient.nim | 2 +- vendor/nim-bearssl | 2 +- vendor/nim-eth | 2 +- vendor/nim-faststreams | 2 +- vendor/nim-http-utils | 2 +- vendor/nim-json-rpc | 2 +- vendor/nim-json-serialization | 2 +- vendor/nim-libbacktrace | 2 +- vendor/nim-metrics | 2 +- vendor/nim-regex | 2 +- vendor/nim-secp256k1 | 2 +- vendor/nim-stint | 2 +- vendor/nim-testutils | 2 +- 13 files changed, 13 insertions(+), 13 deletions(-) diff --git a/vendor/dnsclient.nim b/vendor/dnsclient.nim index fcd7443634..23214235d4 160000 --- a/vendor/dnsclient.nim +++ b/vendor/dnsclient.nim @@ -1 +1 @@ -Subproject commit fcd7443634b950eaea574e5eaa00a628ae029823 +Subproject commit 23214235d4784d24aceed99bbfe153379ea557c8 diff --git a/vendor/nim-bearssl b/vendor/nim-bearssl index acf9645e32..d55d3a86d7 160000 --- a/vendor/nim-bearssl +++ b/vendor/nim-bearssl @@ -1 +1 @@ -Subproject commit acf9645e328bdcab481cfda1c158e07ecd46bd7b +Subproject commit d55d3a86d7ec3ad11b244e17b3bad490bfbd076d diff --git a/vendor/nim-eth b/vendor/nim-eth index 285da12bf3..ac680ed79b 160000 --- a/vendor/nim-eth +++ b/vendor/nim-eth @@ -1 +1 @@ -Subproject commit 285da12bf318a2e21182dc2453a4a30c58f73067 +Subproject commit ac680ed79bf9e4e78ca14a001eb7f78acdf7b07d diff --git a/vendor/nim-faststreams b/vendor/nim-faststreams index 814f8927e1..720fc5e5c8 160000 --- a/vendor/nim-faststreams +++ b/vendor/nim-faststreams @@ -1 +1 @@ -Subproject commit 814f8927e1f356f39219f37f069b83066bcc893a +Subproject commit 720fc5e5c8e428d9d0af618e1e27c44b42350309 diff --git a/vendor/nim-http-utils b/vendor/nim-http-utils index a85bd52ae0..87b7cbf032 160000 --- a/vendor/nim-http-utils +++ b/vendor/nim-http-utils @@ -1 +1 @@ -Subproject commit a85bd52ae0a956983ca6b3267c72961d2ec0245f +Subproject commit 87b7cbf032c90b9e6b446081f4a647e950362cec diff --git a/vendor/nim-json-rpc b/vendor/nim-json-rpc index 0bf2bcbe74..60c4c9b5f2 160000 --- a/vendor/nim-json-rpc +++ b/vendor/nim-json-rpc @@ -1 +1 @@ -Subproject commit 0bf2bcbe74a18a3c7a709d57108bb7b51e748a92 +Subproject commit 60c4c9b5f28b530d5d89fd14c337af1d86390a82 diff --git a/vendor/nim-json-serialization b/vendor/nim-json-serialization index a7d815ed92..85b7ea093c 160000 --- a/vendor/nim-json-serialization +++ b/vendor/nim-json-serialization @@ -1 +1 @@ -Subproject commit a7d815ed92f200f490c95d3cfd722089cc923ce6 +Subproject commit 85b7ea093cb85ee4f433a617b97571bd709d30df diff --git a/vendor/nim-libbacktrace b/vendor/nim-libbacktrace index b29c22ba0e..aad5aa227c 160000 --- a/vendor/nim-libbacktrace +++ b/vendor/nim-libbacktrace @@ -1 +1 @@ -Subproject commit b29c22ba0ef13de50b779c776830dbea1d50cd33 +Subproject commit aad5aa227c43a83984245b180c6c295ce9ff561b diff --git a/vendor/nim-metrics b/vendor/nim-metrics index 08a93c4e16..6142e433fc 160000 --- a/vendor/nim-metrics +++ b/vendor/nim-metrics @@ -1 +1 @@ -Subproject commit 08a93c4e168e74ad93f14b3cc7d6f280bcde879e +Subproject commit 6142e433fc8ea9b73379770a788017ac528d46ff diff --git a/vendor/nim-regex b/vendor/nim-regex index 66f144f935..f080b198e2 160000 --- a/vendor/nim-regex +++ b/vendor/nim-regex @@ -1 +1 @@ -Subproject commit 66f144f935cc73977c61185fab15a3147bf117ff +Subproject commit f080b198e21dc013551ade831bb0338871e03bc5 diff --git a/vendor/nim-secp256k1 b/vendor/nim-secp256k1 index 5fd8135783..7246d91c66 160000 --- a/vendor/nim-secp256k1 +++ b/vendor/nim-secp256k1 @@ -1 +1 @@ -Subproject commit 5fd81357839d57ef38fb17647bd5e31dfa9f55b8 +Subproject commit 7246d91c667f4cc3759fdd50339caa45a2ecd8be diff --git a/vendor/nim-stint b/vendor/nim-stint index eb1f32c675..54e24cae41 160000 --- a/vendor/nim-stint +++ b/vendor/nim-stint @@ -1 +1 @@ -Subproject commit eb1f32c6752478e18dff9256ea45538ab3312cd3 +Subproject commit 54e24cae415b1bed39a987ecd08c19a34f740972 diff --git a/vendor/nim-testutils b/vendor/nim-testutils index 29f98cec6f..b56a5953e3 160000 --- a/vendor/nim-testutils +++ b/vendor/nim-testutils @@ -1 +1 @@ -Subproject commit 29f98cec6fd84652b2954394d3c86dd63c85dd8d +Subproject commit b56a5953e37fc5117bd6ea6dfa18418c5e112815 From a01b63aaae486623a319076d4b7c64368d3c538f Mon Sep 17 00:00:00 2001 From: Ivan Folgueira Bande <128452529+Ivansete-status@users.noreply.github.com> Date: Wed, 20 Sep 2023 17:46:27 +0200 Subject: [PATCH 033/274] Bumping vendor/nim-stew. Adding vendor/nim-results (#2055) The 'nim-results' package is extracted from 'nim-stew' --- .gitmodules | 5 +++++ vendor/nim-results | 1 + vendor/nim-stew | 2 +- 3 files changed, 7 insertions(+), 1 deletion(-) create mode 160000 vendor/nim-results diff --git a/.gitmodules b/.gitmodules index 9d69d0723b..69b4fe2cab 100644 --- a/.gitmodules +++ b/.gitmodules @@ -159,3 +159,8 @@ url = https://github.com/status-im/nim-taskpools.git ignore = untracked branch = stable +[submodule "vendor/nim-results"] + ignore = untracked + branch = master + path = vendor/nim-results + url = https://github.com/arnetheduck/nim-results.git diff --git a/vendor/nim-results b/vendor/nim-results new file mode 160000 index 0000000000..f3c666a272 --- /dev/null +++ b/vendor/nim-results @@ -0,0 +1 @@ +Subproject commit f3c666a272c69d70cb41e7245e7f6844797303ad diff --git a/vendor/nim-stew b/vendor/nim-stew index 6c97f11c7c..3159137d9a 160000 --- a/vendor/nim-stew +++ b/vendor/nim-stew @@ -1 +1 @@ -Subproject commit 6c97f11c7cb59eadf91b124b92d2ec035f7251fa +Subproject commit 3159137d9a3110edb4024145ce0ba778975de40e From 5f9896448d5433c95ab8ee754339d7481edb55d2 Mon Sep 17 00:00:00 2001 From: Florin Barbu Date: Thu, 21 Sep 2023 12:56:04 +0300 Subject: [PATCH 034/274] fix js-waku tests in the ci (#2061) --- .github/workflows/ci.yml | 15 ++++++++++++--- .github/workflows/pre-release.yml | 15 ++++++++++++--- 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index acb1473fcf..5009efe379 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -125,9 +125,18 @@ jobs: uses: waku-org/nwaku/.github/workflows/container-image.yml@master secrets: inherit - js-waku: + js-waku-node: needs: build-docker-image - uses: waku-org/js-waku/.github/workflows/ci.yml@master + uses: waku-org/js-waku/.github/workflows/test-node.yml@master with: nim_wakunode_image: ${{ needs.build-docker-image.outputs.image }} - caller: nwaku + test_type: node + debug: waku* + + js-waku-node-optional: + needs: build-docker-image + uses: waku-org/js-waku/.github/workflows/test-node.yml@master + with: + nim_wakunode_image: ${{ needs.build-docker-image.outputs.image }} + test_type: node-optional + debug: waku* diff --git a/.github/workflows/pre-release.yml b/.github/workflows/pre-release.yml index 16a4092bc3..81706c9db2 100644 --- a/.github/workflows/pre-release.yml +++ b/.github/workflows/pre-release.yml @@ -95,12 +95,21 @@ jobs: image_tag: ${{ needs.tag-name.outputs.tag }} secrets: inherit - js-waku: + js-waku-node: needs: build-docker-image - uses: waku-org/js-waku/.github/workflows/ci.yml@master + uses: waku-org/js-waku/.github/workflows/test-node.yml@master with: nim_wakunode_image: ${{ needs.build-docker-image.outputs.image }} - caller: nwaku + test_type: node + debug: waku* + + js-waku-node-optional: + needs: build-docker-image + uses: waku-org/js-waku/.github/workflows/test-node.yml@master + with: + nim_wakunode_image: ${{ needs.build-docker-image.outputs.image }} + test_type: node-optional + debug: waku* create-release-candidate: runs-on: ubuntu-latest From 1c4533a27a9f084f4036a7b15993ef3f431636d5 Mon Sep 17 00:00:00 2001 From: Ivan Folgueira Bande <128452529+Ivansete-status@users.noreply.github.com> Date: Thu, 21 Sep 2023 13:12:14 +0200 Subject: [PATCH 035/274] Bumping vendor/nim-confutils and vendor/nim-serialization (#2056) --- apps/chat2/config_chat2.nim | 8 ++++---- apps/chat2bridge/config_chat2bridge.nim | 6 +++--- apps/networkmonitor/networkmonitor_config.nim | 4 ++-- apps/wakucanary/wakucanary.nim | 2 +- apps/wakunode2/external_config.nim | 20 +++++++++---------- tests/common/test_confutils_envvar.nim | 8 +++----- vendor/nim-confutils | 2 +- vendor/nim-serialization | 2 +- waku/common/confutils/envvar/std/net.nim | 12 +++++------ waku/common/envvar_serialization/reader.nim | 14 ++++++++++--- 10 files changed, 40 insertions(+), 38 deletions(-) diff --git a/apps/chat2/config_chat2.nim b/apps/chat2/config_chat2.nim index c4ae74292a..d7fc7c77c3 100644 --- a/apps/chat2/config_chat2.nim +++ b/apps/chat2/config_chat2.nim @@ -273,7 +273,7 @@ proc parseCmdArg*(T: type crypto.PrivateKey, p: string): T = # XXX: Here at the moment result = crypto.PrivateKey(scheme: Secp256k1, skkey: key) except CatchableError as e: - raise newException(ConfigurationError, "Invalid private key") + raise newException(ValueError, "Invalid private key") proc completeCmdArg*(T: type crypto.PrivateKey, val: string): seq[string] = return @[] @@ -282,7 +282,7 @@ proc parseCmdArg*(T: type ValidIpAddress, p: string): T = try: result = ValidIpAddress.init(p) except CatchableError as e: - raise newException(ConfigurationError, "Invalid IP address") + raise newException(ValueError, "Invalid IP address") proc completeCmdArg*(T: type ValidIpAddress, val: string): seq[string] = return @[] @@ -291,7 +291,7 @@ proc parseCmdArg*(T: type Port, p: string): T = try: result = Port(parseInt(p)) except CatchableError as e: - raise newException(ConfigurationError, "Invalid Port number") + raise newException(ValueError, "Invalid Port number") proc completeCmdArg*(T: type Port, val: string): seq[string] = return @[] @@ -300,7 +300,7 @@ proc parseCmdArg*(T: type Option[uint], p: string): T = try: some(parseUint(p)) except CatchableError: - raise newException(ConfigurationError, "Invalid unsigned integer") + raise newException(ValueError, "Invalid unsigned integer") func defaultListenAddress*(conf: Chat2Conf): ValidIpAddress = # TODO: How should we select between IPv4 and IPv6 diff --git a/apps/chat2bridge/config_chat2bridge.nim b/apps/chat2bridge/config_chat2bridge.nim index 682f4c1ae6..e9aba7f59f 100644 --- a/apps/chat2bridge/config_chat2bridge.nim +++ b/apps/chat2bridge/config_chat2bridge.nim @@ -134,7 +134,7 @@ proc parseCmdArg*(T: type keys.KeyPair, p: string): T = let privkey = keys.PrivateKey.fromHex(string(p)).tryGet() result = privkey.toKeyPair() except CatchableError: - raise newException(ConfigurationError, "Invalid private key") + raise newException(ValueError, "Invalid private key") proc completeCmdArg*(T: type keys.KeyPair, val: string): seq[string] = return @[] @@ -144,7 +144,7 @@ proc parseCmdArg*(T: type crypto.PrivateKey, p: string): T = if key.isOk(): crypto.PrivateKey(scheme: Secp256k1, skkey: key.get()) else: - raise newException(ConfigurationError, "Invalid private key") + raise newException(ValueError, "Invalid private key") proc completeCmdArg*(T: type crypto.PrivateKey, val: string): seq[string] = return @[] @@ -153,7 +153,7 @@ proc parseCmdArg*(T: type ValidIpAddress, p: string): T = try: result = ValidIpAddress.init(p) except CatchableError: - raise newException(ConfigurationError, "Invalid IP address") + raise newException(ValueError, "Invalid IP address") proc completeCmdArg*(T: type ValidIpAddress, val: string): seq[string] = return @[] diff --git a/apps/networkmonitor/networkmonitor_config.nim b/apps/networkmonitor/networkmonitor_config.nim index f8fc0ab5f5..b29f5b8235 100644 --- a/apps/networkmonitor/networkmonitor_config.nim +++ b/apps/networkmonitor/networkmonitor_config.nim @@ -69,7 +69,7 @@ proc parseCmdArg*(T: type ValidIpAddress, p: string): T = try: result = ValidIpAddress.init(p) except CatchableError as e: - raise newException(ConfigurationError, "Invalid IP address") + raise newException(ValueError, "Invalid IP address") proc completeCmdArg*(T: type ValidIpAddress, val: string): seq[string] = return @[] @@ -78,7 +78,7 @@ proc parseCmdArg*(T: type chronos.Duration, p: string): T = try: result = chronos.seconds(parseInt(p)) except CatchableError as e: - raise newException(ConfigurationError, "Invalid duration value") + raise newException(ValueError, "Invalid duration value") proc completeCmdArg*(T: type chronos.Duration, val: string): seq[string] = return @[] diff --git a/apps/wakucanary/wakucanary.nim b/apps/wakucanary/wakucanary.nim index 24dfea3eaf..d769687976 100644 --- a/apps/wakucanary/wakucanary.nim +++ b/apps/wakucanary/wakucanary.nim @@ -72,7 +72,7 @@ proc parseCmdArg*(T: type chronos.Duration, p: string): T = try: result = chronos.seconds(parseInt(p)) except CatchableError: - raise newException(ConfigurationError, "Invalid timeout value") + raise newException(ValueError, "Invalid timeout value") proc completeCmdArg*(T: type chronos.Duration, val: string): seq[string] = return @[] diff --git a/apps/wakunode2/external_config.nim b/apps/wakunode2/external_config.nim index 6bac5c3ff1..a21bc86df5 100644 --- a/apps/wakunode2/external_config.nim +++ b/apps/wakunode2/external_config.nim @@ -25,7 +25,6 @@ export confEnvvarDefs, confEnvvarNet - type ConfResult*[T] = Result[T, string] type ProtectedTopic* = object topic*: string @@ -456,7 +455,7 @@ proc parseCmdArg*(T: type crypto.PrivateKey, p: string): T = let key = SkPrivateKey.init(utils.fromHex(p)).tryGet() crypto.PrivateKey(scheme: Secp256k1, skkey: key) except CatchableError: - raise newException(ConfigurationError, "Invalid private key") + raise newException(ValueError, "Invalid private key") proc completeCmdArg*(T: type crypto.PrivateKey, val: string): seq[string] = return @[] @@ -464,11 +463,11 @@ proc completeCmdArg*(T: type crypto.PrivateKey, val: string): seq[string] = proc parseCmdArg*(T: type ProtectedTopic, p: string): T = let elements = p.split(":") if elements.len != 2: - raise newException(ConfigurationError, "Invalid format for protected topic expected topic:publickey") + raise newException(ValueError, "Invalid format for protected topic expected topic:publickey") let publicKey = secp256k1.SkPublicKey.fromHex(elements[1]) if publicKey.isErr: - raise newException(ConfigurationError, "Invalid public key") + raise newException(ValueError, "Invalid public key") return ProtectedTopic(topic: elements[0], key: publicKey.get()) @@ -479,7 +478,7 @@ proc parseCmdArg*(T: type ValidIpAddress, p: string): T = try: ValidIpAddress.init(p) except CatchableError: - raise newException(ConfigurationError, "Invalid IP address") + raise newException(ValueError, "Invalid IP address") proc completeCmdArg*(T: type ValidIpAddress, val: string): seq[string] = return @[] @@ -489,12 +488,11 @@ proc defaultListenAddress*(): ValidIpAddress = # Maybe there should be a config option for this. (static ValidIpAddress.init("0.0.0.0")) - proc parseCmdArg*(T: type Port, p: string): T = try: Port(parseInt(p)) except CatchableError: - raise newException(ConfigurationError, "Invalid Port number") + raise newException(ValueError, "Invalid Port number") proc completeCmdArg*(T: type Port, val: string): seq[string] = return @[] @@ -503,13 +501,13 @@ proc parseCmdArg*(T: type Option[int], p: string): T = try: some(parseInt(p)) except CatchableError: - raise newException(ConfigurationError, "Invalid number") + raise newException(ValueError, "Invalid number") proc parseCmdArg*(T: type Option[uint], p: string): T = try: some(parseUint(p)) except CatchableError: - raise newException(ConfigurationError, "Invalid unsigned integer") + raise newException(ValueError, "Invalid unsigned integer") ## Configuration validation @@ -531,7 +529,6 @@ proc readValue*(r: var TomlReader, value: var crypto.PrivateKey) {.raises: [Seri except CatchableError: raise newException(SerializationError, getCurrentExceptionMsg()) - proc readValue*(r: var EnvvarReader, value: var crypto.PrivateKey) {.raises: [SerializationError].} = try: value = parseCmdArg(crypto.PrivateKey, r.readValue(string)) @@ -556,7 +553,8 @@ proc load*(T: type WakuNodeConf, version=""): ConfResult[T] = try: let conf = WakuNodeConf.load( version=version, - secondarySources = proc (conf: WakuNodeConf, sources: auto) = + secondarySources = proc (conf: WakuNodeConf, sources: auto) + {.gcsafe, raises: [ConfigurationError].} = sources.addConfigFile(Envvar, InputFile("wakunode2")) if conf.configFile.isSome(): diff --git a/tests/common/test_confutils_envvar.nim b/tests/common/test_confutils_envvar.nim index 551f9f098f..5fdd6c788c 100644 --- a/tests/common/test_confutils_envvar.nim +++ b/tests/common/test_confutils_envvar.nim @@ -12,7 +12,6 @@ import ../../waku/common/confutils/envvar/defs as confEnvvarDefs, ../../waku/common/confutils/envvar/std/net as confEnvvarNet - type ConfResult[T] = Result[T, string] type TestConf = object @@ -34,13 +33,13 @@ type TestConf = object defaultValue: 60000, name: "tcp-port" }: Port - {.push warning[ProveInit]: off.} proc load*(T: type TestConf, prefix: string): ConfResult[T] = try: let conf = TestConf.load( - secondarySources = proc (conf: TestConf, sources: auto) = + secondarySources = proc (conf: TestConf, sources: auto) + {.gcsafe, raises: [ConfigurationError].} = sources.addConfigFile(Envvar, InputFile(prefix)) ) ok(conf) @@ -49,7 +48,6 @@ proc load*(T: type TestConf, prefix: string): ConfResult[T] = {.pop.} - suite "nim-confutils - envvar": test "load configuration from environment variables": ## Given @@ -78,4 +76,4 @@ suite "nim-confutils - envvar": conf.configFile.isSome() conf.configFile.get().string == configFile - conf.testFile.isNone() \ No newline at end of file + conf.testFile.isNone() diff --git a/vendor/nim-confutils b/vendor/nim-confutils index c8063eb814..674c9e4c8e 160000 --- a/vendor/nim-confutils +++ b/vendor/nim-confutils @@ -1 +1 @@ -Subproject commit c8063eb8142aeb6489ded24f3da908bc7f921b7b +Subproject commit 674c9e4c8e0cad2b7193cc9a59c12d39a397750f diff --git a/vendor/nim-serialization b/vendor/nim-serialization index 5b7cea55ef..4bdbc29e54 160000 --- a/vendor/nim-serialization +++ b/vendor/nim-serialization @@ -1 +1 @@ -Subproject commit 5b7cea55efeb074daa8abd8146a03a34adb4521a +Subproject commit 4bdbc29e54fe54049950e352bb969aab97173b35 diff --git a/waku/common/confutils/envvar/std/net.nim b/waku/common/confutils/envvar/std/net.nim index 2b58ee8dc0..509de57daa 100644 --- a/waku/common/confutils/envvar/std/net.nim +++ b/waku/common/confutils/envvar/std/net.nim @@ -3,7 +3,6 @@ when (NimMajor, NimMinor) < (1, 4): else: {.push raises: [].} - import std/strutils, stew/shims/net @@ -14,15 +13,14 @@ export net, envvar_serialization - proc readValue*(r: var EnvvarReader, value: var ValidIpAddress) {.raises: [SerializationError].} = try: value = ValidIpAddress.init(r.readValue(string)) - except ValueError: - raise newException(EnvvarError, "Invalid IP address") + except ValueError, IOError: + raise newException(SerializationError, "Invalid IP address: " & getCurrentExceptionMsg()) -proc readValue*(r: var EnvvarReader, value: var Port) {.raises: [SerializationError, ValueError].} = +proc readValue*(r: var EnvvarReader, value: var Port) {.raises: [SerializationError].} = try: value = parseUInt(r.readValue(string)).Port - except ValueError: - raise newException(EnvvarError, "Invalid Port") + except ValueError, IOError: + raise newException(SerializationError, "Invalid Port: " & getCurrentExceptionMsg()) diff --git a/waku/common/envvar_serialization/reader.nim b/waku/common/envvar_serialization/reader.nim index 837935534c..7884f9e2bb 100644 --- a/waku/common/envvar_serialization/reader.nim +++ b/waku/common/envvar_serialization/reader.nim @@ -39,7 +39,7 @@ proc handleReadException*(r: EnvvarReader, proc init*(T: type EnvvarReader, prefix: string): T = result.prefix = prefix -proc readValue*[T](r: var EnvvarReader, value: var T) {.raises: [ValueError, SerializationError].} = +proc readValue*[T](r: var EnvvarReader, value: var T) {.raises: [SerializationError].} = mixin readValue when T is string: @@ -48,7 +48,11 @@ proc readValue*[T](r: var EnvvarReader, value: var T) {.raises: [ValueError, Ser elif T is (SomePrimitives or range): let key = constructKey(r.prefix, r.key) - getValue(key, value) + try: + getValue(key, value) + except ValueError: + raise newException(SerializationError, + "Couldn't getValue SomePrimitives: " & getCurrentExceptionMsg()) elif T is Option: template getUnderlyingType[T](_: Option[T]): untyped = T @@ -58,7 +62,11 @@ proc readValue*[T](r: var EnvvarReader, value: var T) {.raises: [ValueError, Ser when uType is string: value = some(os.getEnv(key)) else: - value = some(r.readValue(uType)) + try: + value = some(r.readValue(uType)) + except ValueError, IOError: + raise newException(SerializationError, + "Couldn't read Option value: " & getCurrentExceptionMsg()) elif T is (seq or array): when uTypeIsPrimitives(T): From dc25057a2632baf487a9ae00533db291f2791dc6 Mon Sep 17 00:00:00 2001 From: Ivan Folgueira Bande <128452529+Ivansete-status@users.noreply.github.com> Date: Fri, 22 Sep 2023 12:54:23 +0200 Subject: [PATCH 036/274] chore: bump nim-libp2p, nim-toml-serialization, nim-unicodedb, nim-unittest2, nim-websock, nim-zlib, & nimbus-build-system (#2065) --- vendor/nim-libp2p | 2 +- vendor/nim-toml-serialization | 2 +- vendor/nim-unicodedb | 2 +- vendor/nim-unittest2 | 2 +- vendor/nim-websock | 2 +- vendor/nim-zlib | 2 +- vendor/nimbus-build-system | 2 +- waku/node/waku_node.nim | 4 ++-- 8 files changed, 9 insertions(+), 9 deletions(-) diff --git a/vendor/nim-libp2p b/vendor/nim-libp2p index 41649f0999..b2eac7ecbd 160000 --- a/vendor/nim-libp2p +++ b/vendor/nim-libp2p @@ -1 +1 @@ -Subproject commit 41649f099979e0320a46b013744e5c3d2b6eb9c7 +Subproject commit b2eac7ecbdb695b0b7033f2069b03a63d28aee2b diff --git a/vendor/nim-toml-serialization b/vendor/nim-toml-serialization index b189c104f7..43c546c365 160000 --- a/vendor/nim-toml-serialization +++ b/vendor/nim-toml-serialization @@ -1 +1 @@ -Subproject commit b189c104f7eeb2c8c2cdc9d103415dc7a6a36037 +Subproject commit 43c546c365af4d291c33b7d94b5b730300165aaf diff --git a/vendor/nim-unicodedb b/vendor/nim-unicodedb index c70f8bc8c7..b055310c08 160000 --- a/vendor/nim-unicodedb +++ b/vendor/nim-unicodedb @@ -1 +1 @@ -Subproject commit c70f8bc8c7373265670e0575bc5eda36fe3761b0 +Subproject commit b055310c08db8f879057b4fec15c8301ee93bb2a diff --git a/vendor/nim-unittest2 b/vendor/nim-unittest2 index 883c7a50ad..2300fa9924 160000 --- a/vendor/nim-unittest2 +++ b/vendor/nim-unittest2 @@ -1 +1 @@ -Subproject commit 883c7a50ad3b82158e64d074c5578fe33ab3c452 +Subproject commit 2300fa9924a76e6c96bc4ea79d043e3a0f27120c diff --git a/vendor/nim-websock b/vendor/nim-websock index 2c3ae3137f..f8ed9b40a5 160000 --- a/vendor/nim-websock +++ b/vendor/nim-websock @@ -1 +1 @@ -Subproject commit 2c3ae3137f3c9cb48134285bd4a47186fa51f0e8 +Subproject commit f8ed9b40a5ff27ad02a3c237c4905b0924e3f982 diff --git a/vendor/nim-zlib b/vendor/nim-zlib index 826e2fc013..a2f44bb7f6 160000 --- a/vendor/nim-zlib +++ b/vendor/nim-zlib @@ -1 +1 @@ -Subproject commit 826e2fc013f55b4478802d4f2e39f187c50d520a +Subproject commit a2f44bb7f65571a894227ff6fde9298a104e03a5 diff --git a/vendor/nimbus-build-system b/vendor/nimbus-build-system index 47052a3fcc..81ce5fc752 160000 --- a/vendor/nimbus-build-system +++ b/vendor/nimbus-build-system @@ -1 +1 @@ -Subproject commit 47052a3fcc5553c03e67332895b6b68faded7181 +Subproject commit 81ce5fc7521e400ceababde59b4a90fe7da8919d diff --git a/waku/node/waku_node.nim b/waku/node/waku_node.nim index 01396bbedf..2be13113eb 100644 --- a/waku/node/waku_node.nim +++ b/waku/node/waku_node.nim @@ -114,14 +114,14 @@ proc getAutonatService*(rng: ref HmacDrbgContext): AutonatService = let autonatService = AutonatService.new( autonatClient = AutonatClient.new(), rng = rng, - scheduleInterval = some(chronos.seconds(120)), + scheduleInterval = Opt.some(chronos.seconds(120)), askNewConnectedPeers = false, numPeersToAsk = 3, maxQueueSize = 3, minConfidence = 0.7) proc statusAndConfidenceHandler(networkReachability: NetworkReachability, - confidence: Option[float]): + confidence: Opt[float]): Future[void] {.gcsafe, async.} = if confidence.isSome(): info "Peer reachability status", networkReachability=networkReachability, confidence=confidence.get() From 02a814bd357e802d1339a3f1f26ce00fe327cb62 Mon Sep 17 00:00:00 2001 From: NagyZoltanPeter <113987313+NagyZoltanPeter@users.noreply.github.com> Date: Fri, 22 Sep 2023 13:46:55 +0200 Subject: [PATCH 037/274] feat: lightpush rest api (#2052) RestApi Lightpush endpoint implemented * Openapi definition for lightpush rest api * Update waku/node/rest/lightpush/handlers.nim * Fix install handler naming, added negative test cases and fixes for restapi lightpush * Fix error handling in lightpush rest handler * Fix main success case - relay message that comes with pushRequest * Fix rest relay serdes test with RelayWakuMessage validation changes * Checking response message tests --- apps/wakunode2/app.nim | 3 + tests/all_tests_waku.nim | 3 +- tests/wakunode_rest/test_rest_lightpush.nim | 194 ++++++++++++++++++ .../wakunode_rest/test_rest_relay_serdes.nim | 5 +- waku/node/rest/lightpush/client.nim | 49 +++++ waku/node/rest/lightpush/handlers.nim | 86 ++++++++ waku/node/rest/lightpush/openapi.yaml | 84 ++++++++ waku/node/rest/lightpush/types.nim | 65 ++++++ waku/node/rest/relay/types.nim | 7 +- waku/node/rest/responses.nim | 5 + waku/node/waku_node.nim | 8 +- 11 files changed, 502 insertions(+), 7 deletions(-) create mode 100644 tests/wakunode_rest/test_rest_lightpush.nim create mode 100644 waku/node/rest/lightpush/client.nim create mode 100644 waku/node/rest/lightpush/handlers.nim create mode 100644 waku/node/rest/lightpush/openapi.yaml create mode 100644 waku/node/rest/lightpush/types.nim diff --git a/apps/wakunode2/app.nim b/apps/wakunode2/app.nim index 6cf55097b0..46a9f329c3 100644 --- a/apps/wakunode2/app.nim +++ b/apps/wakunode2/app.nim @@ -52,6 +52,7 @@ import ../../waku/node/rest/filter/handlers as rest_filter_api, ../../waku/node/rest/store/handlers as rest_store_api, ../../waku/node/rest/health/handlers as rest_health_api, + ../../waku/node/rest/lightpush/handlers as rest_lightpush_api, ../../waku/node/jsonrpc/admin/handlers as rpc_admin_api, ../../waku/node/jsonrpc/debug/handlers as rpc_debug_api, ../../waku/node/jsonrpc/filter/handlers as rpc_filter_api, @@ -590,6 +591,8 @@ proc startRestServer(app: App, address: ValidIpAddress, port: Port, conf: WakuNo ## Store REST API installStoreApiHandlers(server.router, app.node) + installLightPushRequestHandler(server.router, app.node) + server.start() info "Starting REST HTTP server", url = "http://" & $address & ":" & $port & "/" diff --git a/tests/all_tests_waku.nim b/tests/all_tests_waku.nim index 6e6cb60370..f5846a0c56 100644 --- a/tests/all_tests_waku.nim +++ b/tests/all_tests_waku.nim @@ -97,7 +97,8 @@ import ./wakunode_rest/test_rest_serdes, ./wakunode_rest/test_rest_store, ./wakunode_rest/test_rest_filter, - ./wakunode_rest/test_rest_legacy_filter + ./wakunode_rest/test_rest_legacy_filter, + ./wakunode_rest/test_rest_lightpush import ./waku_rln_relay/test_waku_rln_relay, diff --git a/tests/wakunode_rest/test_rest_lightpush.nim b/tests/wakunode_rest/test_rest_lightpush.nim new file mode 100644 index 0000000000..fbd3e0f6c2 --- /dev/null +++ b/tests/wakunode_rest/test_rest_lightpush.nim @@ -0,0 +1,194 @@ +{.used.} + +import + std/sequtils, + stew/byteutils, + stew/shims/net, + testutils/unittests, + presto, presto/client as presto_client, + libp2p/crypto/crypto + +import + ../../waku/node/message_cache, + ../../waku/common/base64, + ../../waku/waku_core, + ../../waku/waku_node, + ../../waku/node/peer_manager, + ../../waku/waku_lightpush, + ../../waku/node/rest/server, + ../../waku/node/rest/client, + ../../waku/node/rest/responses, + ../../waku/node/rest/lightpush/types, + ../../waku/node/rest/lightpush/handlers as lightpush_api, + ../../waku/node/rest/lightpush/client as lightpush_api_client, + ../../waku/waku_relay, + ../testlib/wakucore, + ../testlib/wakunode + + +proc testWakuNode(): WakuNode = + let + privkey = generateSecp256k1Key() + bindIp = ValidIpAddress.init("0.0.0.0") + extIp = ValidIpAddress.init("127.0.0.1") + port = Port(0) + + return newTestWakuNode(privkey, bindIp, port, some(extIp), some(port)) + + +type RestLightPushTest = object + serviceNode: WakuNode + pushNode: WakuNode + consumerNode: WakuNode + restServer: RestServerRef + client: RestClientRef + + +proc init(T: type RestLightPushTest): Future[T] {.async.} = + var testSetup = RestLightPushTest() + testSetup.serviceNode = testWakuNode() + testSetup.pushNode = testWakuNode() + testSetup.consumerNode = testWakuNode() + + await allFutures(testSetup.serviceNode.start(), + testSetup.pushNode.start(), + testSetup.consumerNode.start()) + + await testSetup.consumerNode.mountRelay() + await testSetup.serviceNode.mountRelay() + await testSetup.serviceNode.mountLightPush() + testSetup.pushNode.mountLightPushClient() + + + testSetup.serviceNode.peerManager.addServicePeer( + testSetup.consumerNode.peerInfo.toRemotePeerInfo(), + WakuRelayCodec) + + await testSetup.serviceNode.connectToNodes(@[testSetup.consumerNode.peerInfo.toRemotePeerInfo()]) + + testSetup.pushNode.peerManager.addServicePeer( + testSetup.serviceNode.peerInfo.toRemotePeerInfo(), + WakuLightPushCodec) + + let restPort = Port(58011) + let restAddress = ValidIpAddress.init("127.0.0.1") + testSetup.restServer = RestServerRef.init(restAddress, restPort).tryGet() + + installLightPushRequestHandler(testSetup.restServer.router, testSetup.pushNode) + + testSetup.restServer.start() + + testSetup.client = newRestHttpClient(initTAddress(restAddress, restPort)) + + return testSetup + + +proc shutdown(self: RestLightPushTest) {.async.} = + await self.restServer.stop() + await self.restServer.closeWait() + await allFutures(self.serviceNode.stop(), self.pushNode.stop()) + + +suite "Waku v2 Rest API - lightpush": + asyncTest "Push message request": + # Given + let restLightPushTest = await RestLightPushTest.init() + + restLightPushTest.consumerNode.subscribe(DefaultPubsubTopic) + restLightPushTest.serviceNode.subscribe(DefaultPubsubTopic) + require: + toSeq(restLightPushTest.serviceNode.wakuRelay.subscribedTopics).len == 1 + + # When + let message : RelayWakuMessage = fakeWakuMessage(contentTopic = DefaultContentTopic, + payload = toBytes("TEST-1")).toRelayWakuMessage() + + let requestBody = PushRequest(pubsubTopic: some(DefaultPubsubTopic), + message: message) + let response = await restLightPushTest.client.sendPushRequest(requestBody) + + echo "response", $response + + # Then + check: + response.status == 200 + $response.contentType == $MIMETYPE_TEXT + + await restLightPushTest.shutdown() + + asyncTest "Push message bad-request": + # Given + let restLightPushTest = await RestLightPushTest.init() + + restLightPushTest.serviceNode.subscribe(DefaultPubsubTopic) + require: + toSeq(restLightPushTest.serviceNode.wakuRelay.subscribedTopics).len == 1 + + # When + let badMessage1 : RelayWakuMessage = fakeWakuMessage(contentTopic = DefaultContentTopic, + payload = toBytes("")).toRelayWakuMessage() + let badRequestBody1 = PushRequest(pubsubTopic: some(DefaultPubsubTopic), + message: badMessage1) + + let badMessage2 : RelayWakuMessage = fakeWakuMessage(contentTopic = "", + payload = toBytes("Sthg")).toRelayWakuMessage() + let badRequestBody2 = PushRequest(pubsubTopic: some(DefaultPubsubTopic), + message: badMessage2) + + let badRequestBody3 = PushRequest(pubsubTopic: none(PubsubTopic), + message: badMessage2) + + var response: RestResponse[string] + + response = await restLightPushTest.client.sendPushRequest(badRequestBody1) + + echo "response", $response + + # Then + check: + response.status == 400 + $response.contentType == $MIMETYPE_TEXT + response.data.startsWith("Invalid content body") + + + # when + response = await restLightPushTest.client.sendPushRequest(badRequestBody2) + + # Then + check: + response.status == 400 + $response.contentType == $MIMETYPE_TEXT + response.data.startsWith("Invalid content body") + + # when + response = await restLightPushTest.client.sendPushRequest(badRequestBody3) + + # Then + check: + response.status == 400 + $response.contentType == $MIMETYPE_TEXT + response.data.startsWith("Invalid content body") + + await restLightPushTest.shutdown() + + asyncTest "Push message request service not available": + # Given + let restLightPushTest = await RestLightPushTest.init() + + # When + let message : RelayWakuMessage = fakeWakuMessage(contentTopic = DefaultContentTopic, + payload = toBytes("TEST-1")).toRelayWakuMessage() + + let requestBody = PushRequest(pubsubTopic: some("NoExistTopic"), + message: message) + let response = await restLightPushTest.client.sendPushRequest(requestBody) + + echo "response", $response + + # Then + check: + response.status == 503 + $response.contentType == $MIMETYPE_TEXT + response.data == "Failed to request a message push: Can not publish to any peers" + + await restLightPushTest.shutdown() diff --git a/tests/wakunode_rest/test_rest_relay_serdes.nim b/tests/wakunode_rest/test_rest_relay_serdes.nim index 2a3789370d..19aacfd56b 100644 --- a/tests/wakunode_rest/test_rest_relay_serdes.nim +++ b/tests/wakunode_rest/test_rest_relay_serdes.nim @@ -19,7 +19,7 @@ suite "Waku v2 Rest API - Relay - serialization": test "optional fields are not provided": # Given let payload = base64.encode("MESSAGE") - let jsonBytes = toBytes("{\"payload\":\"" & $payload & "\"}") + let jsonBytes = toBytes("{\"payload\":\"" & $payload & "\",\"contentTopic\":\"some/topic\"}") # When let res = decodeFromJsonBytes(RelayWakuMessage, jsonBytes, requireAllFields = true) @@ -29,7 +29,8 @@ suite "Waku v2 Rest API - Relay - serialization": let value = res.get() check: value.payload == payload - value.contentTopic.isNone() + value.contentTopic.isSome() + value.contentTopic.get() == "some/topic" value.version.isNone() value.timestamp.isNone() diff --git a/waku/node/rest/lightpush/client.nim b/waku/node/rest/lightpush/client.nim new file mode 100644 index 0000000000..96caa818ee --- /dev/null +++ b/waku/node/rest/lightpush/client.nim @@ -0,0 +1,49 @@ +when (NimMajor, NimMinor) < (1, 4): + {.push raises: [Defect].} +else: + {.push raises: [].} + +import + json, + std/sets, + stew/byteutils, + strformat, + chronicles, + json_serialization, + json_serialization/std/options, + presto/[route, client, common] +import + ../../../waku_core, + ../serdes, + ../responses, + ./types + +export types + +logScope: + topics = "waku node rest client v2" + +proc encodeBytes*(value: PushRequest, + contentType: string): RestResult[seq[byte]] = + if MediaType.init(contentType) != MIMETYPE_JSON: + error "Unsupported contentType value", contentType = contentType + return err("Unsupported contentType") + + let encoded = ?encodeIntoJsonBytes(value) + return ok(encoded) + +proc decodeBytes*(t: typedesc[string], value: openarray[byte], + contentType: Opt[ContentTypeData]): RestResult[string] = + if MediaType.init($contentType) != MIMETYPE_TEXT: + error "Unsupported contentType value", contentType = contentType + return err("Unsupported contentType") + + var res: string + if len(value) > 0: + res = newString(len(value)) + copyMem(addr res[0], unsafeAddr value[0], len(value)) + return ok(res) + +proc sendPushRequest*(body: PushRequest): + RestResponse[string] + {.rest, endpoint: "/lightpush/v1/message", meth: HttpMethod.MethodPost.} diff --git a/waku/node/rest/lightpush/handlers.nim b/waku/node/rest/lightpush/handlers.nim new file mode 100644 index 0000000000..a13fe6fd4c --- /dev/null +++ b/waku/node/rest/lightpush/handlers.nim @@ -0,0 +1,86 @@ +when (NimMajor, NimMinor) < (1, 4): + {.push raises: [Defect].} +else: + {.push raises: [].} + +import + std/strformat, + std/sequtils, + stew/byteutils, + chronicles, + json_serialization, + json_serialization/std/options, + presto/route, + presto/common + +import + ../../../waku_core, + ../../peer_manager, + ../../waku_node, + ../../waku/waku_lightpush, + ../serdes, + ../responses, + ./types + +export types + +logScope: + topics = "waku node rest lightpush api" + +const futTimeoutForPushRequestProcessing* = 5.seconds + +#### Request handlers + +const ROUTE_LIGHTPUSH* = "/lightpush/v1/message" + +func decodeRequestBody[T](contentBody: Option[ContentBody]) : Result[T, RestApiResponse] = + if contentBody.isNone(): + return err(RestApiResponse.badRequest("Missing content body")) + + let reqBodyContentType = MediaType.init($contentBody.get().contentType) + if reqBodyContentType != MIMETYPE_JSON: + return err(RestApiResponse.badRequest("Wrong Content-Type, expected application/json")) + + let reqBodyData = contentBody.get().data + + let requestResult = decodeFromJsonBytes(T, reqBodyData) + if requestResult.isErr(): + return err(RestApiResponse.badRequest("Invalid content body, could not decode. " & + $requestResult.error)) + + return ok(requestResult.get()) + +proc installLightPushRequestHandler*(router: var RestRouter, + node: WakuNode) = + + router.api(MethodPost, ROUTE_LIGHTPUSH) do (contentBody: Option[ContentBody]) -> RestApiResponse: + ## Send a request to push a waku message + debug "post", ROUTE_LIGHTPUSH, contentBody + + let decodedBody = decodeRequestBody[PushRequest](contentBody) + + if decodedBody.isErr(): + return decodedBody.error() + + let req: PushRequest = decodedBody.value() + let msg = req.message.toWakuMessage() + + if msg.isErr(): + return RestApiResponse.badRequest("Invalid message: {msg.error}") + + let peerOpt = node.peerManager.selectPeer(WakuLightPushCodec) + if peerOpt.isNone(): + return RestApiResponse.serviceUnavailable("No suitable remote lightpush peers") + + let subFut = node.lightpushPublish(req.pubsubTopic, + msg.value(), + peerOpt.get()) + + if not await subFut.withTimeout(futTimeoutForPushRequestProcessing): + error "Failed to request a message push due to timeout!" + return RestApiResponse.serviceUnavailable("Push request timed out") + + if subFut.value().isErr(): + return RestApiResponse.serviceUnavailable(fmt("Failed to request a message push: {subFut.value().error}")) + + return RestApiResponse.ok() diff --git a/waku/node/rest/lightpush/openapi.yaml b/waku/node/rest/lightpush/openapi.yaml new file mode 100644 index 0000000000..2327936dd3 --- /dev/null +++ b/waku/node/rest/lightpush/openapi.yaml @@ -0,0 +1,84 @@ +openapi: 3.0.3 +info: + title: Waku V2 node REST API + version: 1.0.0 + contact: + name: VAC Team + url: https://forum.vac.dev/ + +tags: + - name: lightpush + description: Lightpush REST API for WakuV2 node + +paths: + /lightpush/v1/message: + post: + summary: Request a message relay from a LightPush service provider + description: Push a message to be relayed on a PubSub topic. + operationId: postMessagesToPubsubTopic + tags: + - lightpush + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/PushRequest' + responses: + '200': + description: OK + content: + text/plain: + schema: + type: string + '400': + description: Bad request. + content: + text/plain: + schema: + type: string + '500': + description: Internal server error + content: + text/plain: + schema: + type: string + '503': + description: Service not available + content: + text/plain: + schema: + type: string + +components: + schemas: + PubsubTopic: + type: string + + ContentTopic: + type: string + + WakuMessage: + type: object + properties: + payload: + type: string + format: byte + contentTopic: + $ref: '#/components/schemas/ContentTopic' + version: + type: number + timestamp: + type: number + required: + - payload + - contentTopic + + PushRequest: + type: object + properties: + pusbsubTopic: + $ref: '#/components/schemas/PubsubTopic' + message: + $ref: '#/components/schemas/WakuMessage' + required: + - message diff --git a/waku/node/rest/lightpush/types.nim b/waku/node/rest/lightpush/types.nim new file mode 100644 index 0000000000..d3711e8033 --- /dev/null +++ b/waku/node/rest/lightpush/types.nim @@ -0,0 +1,65 @@ +when (NimMajor, NimMinor) < (1, 4): + {.push raises: [Defect].} +else: + {.push raises: [].} + +import + std/[sets, strformat], + chronicles, + json_serialization, + json_serialization/std/options, + presto/[route, client, common] + +import + ../../../common/base64, + ../../../waku_core, + ../relay/types as relay_types, + ../serdes + +export relay_types + +#### Types + +type PushRequest* = object + pubsubTopic*: Option[PubSubTopic] + message*: RelayWakuMessage + +#### Serialization and deserialization + +proc writeValue*(writer: var JsonWriter[RestJson], value: PushRequest) + {.raises: [IOError].} = + writer.beginRecord() + if value.pubsubTopic.isSome(): + writer.writeField("pubsubTopic", value.pubsubTopic.get()) + writer.writeField("message", value.message) + writer.endRecord() + +proc readValue*(reader: var JsonReader[RestJson], value: var PushRequest) + {.raises: [SerializationError, IOError].} = + var + pubsubTopic = none(PubsubTopic) + message = none(RelayWakuMessage) + + var keys = initHashSet[string]() + for fieldName in readObjectFields(reader): + # Check for reapeated keys + if keys.containsOrIncl(fieldName): + let err = try: fmt"Multiple `{fieldName}` fields found" + except CatchableError: "Multiple fields with the same name found" + reader.raiseUnexpectedField(err, "PushRequest") + + case fieldName + of "pubsubTopic": + pubsubTopic = some(reader.readValue(PubsubTopic)) + of "message": + message = some(reader.readValue(RelayWakuMessage)) + else: + unrecognizedFieldWarning() + + if message.isNone(): + reader.raiseUnexpectedValue("Field `message` is missing") + + value = PushRequest( + pubsubTopic: if pubsubTopic.isNone() or pubsubTopic.get() == "": none(string) else: some(pubsubTopic.get()), + message: message.get() + ) diff --git a/waku/node/rest/relay/types.nim b/waku/node/rest/relay/types.nim index bf7ebce909..1d3c84bcfc 100644 --- a/waku/node/rest/relay/types.nim +++ b/waku/node/rest/relay/types.nim @@ -103,8 +103,11 @@ proc readValue*(reader: var JsonReader[RestJson], value: var RelayWakuMessage) else: unrecognizedFieldWarning() - if payload.isNone(): - reader.raiseUnexpectedValue("Field `payload` is missing") + if payload.isNone() or isEmptyOrWhitespace(string(payload.get())): + reader.raiseUnexpectedValue("Field `payload` is missing or empty") + + if contentTopic.isNone() or contentTopic.get().isEmptyOrWhitespace(): + reader.raiseUnexpectedValue("Field `contentTopic` is missing or empty") value = RelayWakuMessage( payload: payload.get(), diff --git a/waku/node/rest/responses.nim b/waku/node/rest/responses.nim index 95b58b387c..f5b244feac 100644 --- a/waku/node/rest/responses.nim +++ b/waku/node/rest/responses.nim @@ -24,6 +24,11 @@ proc internalServerError*(t: typedesc[RestApiResponse], RestApiResponse = RestApiResponse.error(Http500, msg, $MIMETYPE_TEXT) +proc serviceUnavailable*(t: typedesc[RestApiResponse], + msg: string = ""): + RestApiResponse = + RestApiResponse.error(Http503, msg, $MIMETYPE_TEXT) + proc badRequest*(t: typedesc[RestApiResponse], msg: string = ""): RestApiResponse = diff --git a/waku/node/waku_node.nim b/waku/node/waku_node.nim index 2be13113eb..363581e73d 100644 --- a/waku/node/waku_node.nim +++ b/waku/node/waku_node.nim @@ -404,7 +404,7 @@ proc legacyFilterSubscribe*(node: WakuNode, # Add handler wrapper to store the message when pushed, when relay is disabled and filter enabled # TODO: Move this logic to wakunode2 app # FIXME: This part needs refactoring. It seems possible that in special cases archiver will store same message multiple times. - let handlerWrapper: FilterPushHandler = + let handlerWrapper: FilterPushHandler = if node.wakuRelay.isNil() and not node.wakuStore.isNil(): proc(pubsubTopic: string, message: WakuMessage) {.async, gcsafe, closure.} = await allFutures(node.wakuArchive.handleMessage(pubSubTopic, message), @@ -832,7 +832,11 @@ proc mountLightPush*(node: WakuNode) {.async.} = return err("no waku relay found") else: pushHandler = proc(peer: PeerId, pubsubTopic: string, message: WakuMessage): Future[WakuLightPushResult[void]] {.async.} = - discard await node.wakuRelay.publish(pubsubTopic, message.encode().buffer) + let publishedCount = await node.wakuRelay.publish(pubsubTopic, message.encode().buffer) + + if publishedCount == 0: + return err("Can not publish to any peers") + return ok() debug "mounting lightpush with relay" From 3e72e830678ee49ce65e9787fa02136750015861 Mon Sep 17 00:00:00 2001 From: Simon-Pierre Vivier Date: Fri, 22 Sep 2023 09:36:46 -0400 Subject: [PATCH 038/274] refactor: Moved external APIs out of node (#2069) --- apps/chat2bridge/chat2bridge.nim | 10 +++--- apps/wakunode2/app.nim | 34 +++++++++---------- tests/test_message_cache.nim | 2 +- tests/wakunode_jsonrpc/test_jsonrpc_admin.nim | 4 +-- tests/wakunode_jsonrpc/test_jsonrpc_debug.nim | 4 +-- .../wakunode_jsonrpc/test_jsonrpc_filter.nim | 6 ++-- tests/wakunode_jsonrpc/test_jsonrpc_relay.nim | 6 ++-- tests/wakunode_jsonrpc/test_jsonrpc_store.nim | 4 +-- tests/wakunode_rest/test_rest_debug.nim | 10 +++--- .../wakunode_rest/test_rest_debug_serdes.nim | 4 +-- tests/wakunode_rest/test_rest_filter.nim | 20 +++++------ tests/wakunode_rest/test_rest_health.nim | 10 +++--- .../wakunode_rest/test_rest_legacy_filter.nim | 14 ++++---- tests/wakunode_rest/test_rest_lightpush.nim | 14 ++++---- tests/wakunode_rest/test_rest_relay.nim | 14 ++++---- .../wakunode_rest/test_rest_relay_serdes.nim | 4 +-- tests/wakunode_rest/test_rest_serdes.nim | 4 +-- tests/wakunode_rest/test_rest_store.nim | 12 +++---- waku/node/waku_node.nim | 5 +-- waku/waku_api.nim | 9 +++++ .../jsonrpc/admin/callsigs.nim | 0 .../jsonrpc/admin/client.nim | 0 .../jsonrpc/admin/handlers.nim | 4 +-- .../jsonrpc/admin/types.nim | 0 .../jsonrpc/debug/callsigs.nim | 0 .../jsonrpc/debug/client.nim | 2 +- .../jsonrpc/debug/handlers.nim | 2 +- .../jsonrpc/filter/callsigs.nim | 0 .../jsonrpc/filter/client.nim | 0 .../jsonrpc/filter/handlers.nim | 7 ++-- .../{node => waku_api}/jsonrpc/hexstrings.nim | 0 .../jsonrpc/marshalling.nim | 0 waku/{node => waku_api}/jsonrpc/message.nim | 0 .../jsonrpc/relay/callsigs.nim | 0 .../jsonrpc/relay/client.nim | 0 .../jsonrpc/relay/handlers.nim | 2 +- .../jsonrpc/store/callsigs.nim | 0 .../jsonrpc/store/client.nim | 0 .../jsonrpc/store/handlers.nim | 4 +-- .../jsonrpc/store/types.nim | 0 waku/{node => waku_api}/message_cache.nim | 0 waku/{node => waku_api}/rest/client.nim | 0 waku/{node => waku_api}/rest/debug/client.nim | 0 .../rest/debug/handlers.nim | 2 +- .../rest/debug/openapi.yaml | 0 waku/{node => waku_api}/rest/debug/types.nim | 2 +- .../{node => waku_api}/rest/filter/client.nim | 0 .../rest/filter/handlers.nim | 4 +-- .../rest/filter/legacy_client.nim | 0 .../rest/filter/legacy_handlers.nim | 4 +-- .../rest/filter/openapi.yaml | 0 waku/{node => waku_api}/rest/filter/types.nim | 0 .../{node => waku_api}/rest/health/client.nim | 0 .../rest/health/handlers.nim | 2 +- .../rest/health/openapi.yaml | 0 .../rest/lightpush/client.nim | 0 .../rest/lightpush/handlers.nim | 4 +-- .../rest/lightpush/openapi.yaml | 0 .../rest/lightpush/types.nim | 0 waku/{node => waku_api}/rest/relay/client.nim | 0 .../rest/relay/handlers.nim | 2 +- .../rest/relay/openapi.yaml | 0 .../rest/relay/topic_cache.nim | 0 waku/{node => waku_api}/rest/relay/types.nim | 0 waku/{node => waku_api}/rest/responses.nim | 0 waku/{node => waku_api}/rest/serdes.nim | 0 waku/{node => waku_api}/rest/server.nim | 0 waku/{node => waku_api}/rest/store/client.nim | 0 .../rest/store/handlers.nim | 5 ++- .../rest/store/openapi.yaml | 0 waku/{node => waku_api}/rest/store/types.nim | 0 71 files changed, 121 insertions(+), 115 deletions(-) create mode 100644 waku/waku_api.nim rename waku/{node => waku_api}/jsonrpc/admin/callsigs.nim (100%) rename waku/{node => waku_api}/jsonrpc/admin/client.nim (100%) rename waku/{node => waku_api}/jsonrpc/admin/handlers.nim (98%) rename waku/{node => waku_api}/jsonrpc/admin/types.nim (100%) rename waku/{node => waku_api}/jsonrpc/debug/callsigs.nim (100%) rename waku/{node => waku_api}/jsonrpc/debug/client.nim (92%) rename waku/{node => waku_api}/jsonrpc/debug/handlers.nim (96%) rename waku/{node => waku_api}/jsonrpc/filter/callsigs.nim (100%) rename waku/{node => waku_api}/jsonrpc/filter/client.nim (100%) rename waku/{node => waku_api}/jsonrpc/filter/handlers.nim (97%) rename waku/{node => waku_api}/jsonrpc/hexstrings.nim (100%) rename waku/{node => waku_api}/jsonrpc/marshalling.nim (100%) rename waku/{node => waku_api}/jsonrpc/message.nim (100%) rename waku/{node => waku_api}/jsonrpc/relay/callsigs.nim (100%) rename waku/{node => waku_api}/jsonrpc/relay/client.nim (100%) rename waku/{node => waku_api}/jsonrpc/relay/handlers.nim (99%) rename waku/{node => waku_api}/jsonrpc/store/callsigs.nim (100%) rename waku/{node => waku_api}/jsonrpc/store/client.nim (100%) rename waku/{node => waku_api}/jsonrpc/store/handlers.nim (98%) rename waku/{node => waku_api}/jsonrpc/store/types.nim (100%) rename waku/{node => waku_api}/message_cache.nim (100%) rename waku/{node => waku_api}/rest/client.nim (100%) rename waku/{node => waku_api}/rest/debug/client.nim (100%) rename waku/{node => waku_api}/rest/debug/handlers.nim (98%) rename waku/{node => waku_api}/rest/debug/openapi.yaml (100%) rename waku/{node => waku_api}/rest/debug/types.nim (98%) rename waku/{node => waku_api}/rest/filter/client.nim (100%) rename waku/{node => waku_api}/rest/filter/handlers.nim (99%) rename waku/{node => waku_api}/rest/filter/legacy_client.nim (100%) rename waku/{node => waku_api}/rest/filter/legacy_handlers.nim (99%) rename waku/{node => waku_api}/rest/filter/openapi.yaml (100%) rename waku/{node => waku_api}/rest/filter/types.nim (100%) rename waku/{node => waku_api}/rest/health/client.nim (100%) rename waku/{node => waku_api}/rest/health/handlers.nim (98%) rename waku/{node => waku_api}/rest/health/openapi.yaml (100%) rename waku/{node => waku_api}/rest/lightpush/client.nim (100%) rename waku/{node => waku_api}/rest/lightpush/handlers.nim (97%) rename waku/{node => waku_api}/rest/lightpush/openapi.yaml (100%) rename waku/{node => waku_api}/rest/lightpush/types.nim (100%) rename waku/{node => waku_api}/rest/relay/client.nim (100%) rename waku/{node => waku_api}/rest/relay/handlers.nim (99%) rename waku/{node => waku_api}/rest/relay/openapi.yaml (100%) rename waku/{node => waku_api}/rest/relay/topic_cache.nim (100%) rename waku/{node => waku_api}/rest/relay/types.nim (100%) rename waku/{node => waku_api}/rest/responses.nim (100%) rename waku/{node => waku_api}/rest/serdes.nim (100%) rename waku/{node => waku_api}/rest/server.nim (100%) rename waku/{node => waku_api}/rest/store/client.nim (100%) rename waku/{node => waku_api}/rest/store/handlers.nim (99%) rename waku/{node => waku_api}/rest/store/openapi.yaml (100%) rename waku/{node => waku_api}/rest/store/types.nim (100%) diff --git a/apps/chat2bridge/chat2bridge.nim b/apps/chat2bridge/chat2bridge.nim index b67ee2be32..700ef5a434 100644 --- a/apps/chat2bridge/chat2bridge.nim +++ b/apps/chat2bridge/chat2bridge.nim @@ -217,11 +217,11 @@ proc stop*(cmb: Chat2MatterBridge) {.async.} = when isMainModule: import ../../../waku/common/utils/nat, - ../../waku/node/message_cache, - ../../waku/node/jsonrpc/debug/handlers as debug_api, - ../../waku/node/jsonrpc/filter/handlers as filter_api, - ../../waku/node/jsonrpc/relay/handlers as relay_api, - ../../waku/node/jsonrpc/store/handlers as store_api + ../../waku/waku_api/message_cache, + ../../waku/waku_api/jsonrpc/debug/handlers as debug_api, + ../../waku/waku_api/jsonrpc/filter/handlers as filter_api, + ../../waku/waku_api/jsonrpc/relay/handlers as relay_api, + ../../waku/waku_api/jsonrpc/store/handlers as store_api proc startV2Rpc(node: WakuNode, rpcServer: RpcHttpServer, conf: Chat2MatterbridgeConf) {.raises: [Exception].} = diff --git a/apps/wakunode2/app.nim b/apps/wakunode2/app.nim index 46a9f329c3..3105991bd2 100644 --- a/apps/wakunode2/app.nim +++ b/apps/wakunode2/app.nim @@ -38,26 +38,25 @@ import ../../waku/waku_lightpush, ../../waku/waku_filter, ../../waku/waku_filter_v2, - ../../waku/waku_filter_v2/client as waku_filter_client, ./wakunode2_validator_signed, ./internal_config, ./external_config import - ../../waku/node/message_cache, - ../../waku/node/rest/server, - ../../waku/node/rest/debug/handlers as rest_debug_api, - ../../waku/node/rest/relay/handlers as rest_relay_api, - ../../waku/node/rest/relay/topic_cache, - ../../waku/node/rest/filter/legacy_handlers as rest_legacy_filter_api, - ../../waku/node/rest/filter/handlers as rest_filter_api, - ../../waku/node/rest/store/handlers as rest_store_api, - ../../waku/node/rest/health/handlers as rest_health_api, - ../../waku/node/rest/lightpush/handlers as rest_lightpush_api, - ../../waku/node/jsonrpc/admin/handlers as rpc_admin_api, - ../../waku/node/jsonrpc/debug/handlers as rpc_debug_api, - ../../waku/node/jsonrpc/filter/handlers as rpc_filter_api, - ../../waku/node/jsonrpc/relay/handlers as rpc_relay_api, - ../../waku/node/jsonrpc/store/handlers as rpc_store_api + ../../waku/waku_api/message_cache, + ../../waku/waku_api/rest/server, + ../../waku/waku_api/rest/debug/handlers as rest_debug_api, + ../../waku/waku_api/rest/relay/handlers as rest_relay_api, + ../../waku/waku_api/rest/relay/topic_cache, + ../../waku/waku_api/rest/filter/legacy_handlers as rest_legacy_filter_api, + ../../waku/waku_api/rest/filter/handlers as rest_filter_api, + ../../waku/waku_api/rest/lightpush/handlers as rest_lightpush_api, + ../../waku/waku_api/rest/store/handlers as rest_store_api, + ../../waku/waku_api/rest/health/handlers as rest_health_api, + ../../waku/waku_api/jsonrpc/admin/handlers as rpc_admin_api, + ../../waku/waku_api/jsonrpc/debug/handlers as rpc_debug_api, + ../../waku/waku_api/jsonrpc/filter/handlers as rpc_filter_api, + ../../waku/waku_api/jsonrpc/relay/handlers as rpc_relay_api, + ../../waku/waku_api/jsonrpc/store/handlers as rpc_store_api logScope: topics = "wakunode app" @@ -591,7 +590,8 @@ proc startRestServer(app: App, address: ValidIpAddress, port: Port, conf: WakuNo ## Store REST API installStoreApiHandlers(server.router, app.node) - installLightPushRequestHandler(server.router, app.node) + ## Light push API + rest_lightpush_api.installLightPushRequestHandler(server.router, app.node) server.start() info "Starting REST HTTP server", url = "http://" & $address & ":" & $port & "/" diff --git a/tests/test_message_cache.nim b/tests/test_message_cache.nim index 31fe7cdc3a..b9dc691838 100644 --- a/tests/test_message_cache.nim +++ b/tests/test_message_cache.nim @@ -6,7 +6,7 @@ import chronicles import ../../waku/waku_core, - ../../waku/node/message_cache, + ../../waku/waku_api/message_cache, ./testlib/common, ./testlib/wakucore diff --git a/tests/wakunode_jsonrpc/test_jsonrpc_admin.nim b/tests/wakunode_jsonrpc/test_jsonrpc_admin.nim index e4e8c09e69..1dd84abd31 100644 --- a/tests/wakunode_jsonrpc/test_jsonrpc_admin.nim +++ b/tests/wakunode_jsonrpc/test_jsonrpc_admin.nim @@ -13,8 +13,8 @@ import ../../../waku/waku_core, ../../../waku/node/peer_manager, ../../../waku/waku_node, - ../../../waku/node/jsonrpc/admin/handlers as admin_api, - ../../../waku/node/jsonrpc/admin/client as admin_api_client, + ../../../waku/waku_api/jsonrpc/admin/handlers as admin_api, + ../../../waku/waku_api/jsonrpc/admin/client as admin_api_client, ../../../waku/waku_relay, ../../../waku/waku_archive, ../../../waku/waku_archive/driver/queue_driver, diff --git a/tests/wakunode_jsonrpc/test_jsonrpc_debug.nim b/tests/wakunode_jsonrpc/test_jsonrpc_debug.nim index 5eb438df8f..ae6297c9a7 100644 --- a/tests/wakunode_jsonrpc/test_jsonrpc_debug.nim +++ b/tests/wakunode_jsonrpc/test_jsonrpc_debug.nim @@ -11,8 +11,8 @@ import import ../../../waku/node/peer_manager, ../../../waku/waku_node, - ../../../waku/node/jsonrpc/debug/handlers as debug_api, - ../../../waku/node/jsonrpc/debug/client as debug_api_client, + ../../../waku/waku_api/jsonrpc/debug/handlers as debug_api, + ../../../waku/waku_api/jsonrpc/debug/client as debug_api_client, ../testlib/common, ../testlib/wakucore, ../testlib/wakunode diff --git a/tests/wakunode_jsonrpc/test_jsonrpc_filter.nim b/tests/wakunode_jsonrpc/test_jsonrpc_filter.nim index 8b2e43c9ae..0c95626b08 100644 --- a/tests/wakunode_jsonrpc/test_jsonrpc_filter.nim +++ b/tests/wakunode_jsonrpc/test_jsonrpc_filter.nim @@ -11,9 +11,9 @@ import ../../../waku/waku_core, ../../../waku/node/peer_manager, ../../../waku/waku_node, - ../../../waku/node/message_cache, - ../../../waku/node/jsonrpc/filter/handlers as filter_api, - ../../../waku/node/jsonrpc/filter/client as filter_api_client, + ../../../waku/waku_api/message_cache, + ../../../waku/waku_api/jsonrpc/filter/handlers as filter_api, + ../../../waku/waku_api/jsonrpc/filter/client as filter_api_client, ../../../waku/waku_filter, ../../../waku/waku_filter/rpc, ../../../waku/waku_filter/client, diff --git a/tests/wakunode_jsonrpc/test_jsonrpc_relay.nim b/tests/wakunode_jsonrpc/test_jsonrpc_relay.nim index 016b716135..f54d7399c0 100644 --- a/tests/wakunode_jsonrpc/test_jsonrpc_relay.nim +++ b/tests/wakunode_jsonrpc/test_jsonrpc_relay.nim @@ -11,10 +11,10 @@ import ../../../waku/common/base64, ../../../waku/waku_core, ../../../waku/node/peer_manager, - ../../../waku/node/message_cache, + ../../../waku/waku_api/message_cache, ../../../waku/waku_node, - ../../../waku/node/jsonrpc/relay/handlers as relay_api, - ../../../waku/node/jsonrpc/relay/client as relay_api_client, + ../../../waku/waku_api/jsonrpc/relay/handlers as relay_api, + ../../../waku/waku_api/jsonrpc/relay/client as relay_api_client, ../../../waku/waku_core, ../../../waku/waku_relay, ../../../waku/waku_rln_relay, diff --git a/tests/wakunode_jsonrpc/test_jsonrpc_store.nim b/tests/wakunode_jsonrpc/test_jsonrpc_store.nim index f2216bc840..de04f83f0a 100644 --- a/tests/wakunode_jsonrpc/test_jsonrpc_store.nim +++ b/tests/wakunode_jsonrpc/test_jsonrpc_store.nim @@ -11,8 +11,8 @@ import ../../../waku/waku_core, ../../../waku/node/peer_manager, ../../../waku/waku_node, - ../../../waku/node/jsonrpc/store/handlers as store_api, - ../../../waku/node/jsonrpc/store/client as store_api_client, + ../../../waku/waku_api/jsonrpc/store/handlers as store_api, + ../../../waku/waku_api/jsonrpc/store/client as store_api_client, ../../../waku/waku_archive, ../../../waku/waku_archive/driver/queue_driver, ../../../waku/waku_store, diff --git a/tests/wakunode_rest/test_rest_debug.nim b/tests/wakunode_rest/test_rest_debug.nim index cc03cf8918..b1b57cc85d 100644 --- a/tests/wakunode_rest/test_rest_debug.nim +++ b/tests/wakunode_rest/test_rest_debug.nim @@ -11,11 +11,11 @@ import import ../../waku/waku_node, ../../waku/node/waku_node as waku_node2, # TODO: Remove after moving `git_version` to the app code. - ../../waku/node/rest/server, - ../../waku/node/rest/client, - ../../waku/node/rest/responses, - ../../waku/node/rest/debug/handlers as debug_api, - ../../waku/node/rest/debug/client as debug_api_client, + ../../waku/waku_api/rest/server, + ../../waku/waku_api/rest/client, + ../../waku/waku_api/rest/responses, + ../../waku/waku_api/rest/debug/handlers as debug_api, + ../../waku/waku_api/rest/debug/client as debug_api_client, ../testlib/common, ../testlib/wakucore, ../testlib/wakunode diff --git a/tests/wakunode_rest/test_rest_debug_serdes.nim b/tests/wakunode_rest/test_rest_debug_serdes.nim index 28b9315695..fb0e572927 100644 --- a/tests/wakunode_rest/test_rest_debug_serdes.nim +++ b/tests/wakunode_rest/test_rest_debug_serdes.nim @@ -6,8 +6,8 @@ import testutils/unittests, json_serialization import - ../../waku/node/rest/serdes, - ../../waku/node/rest/debug/types + ../../waku/waku_api/rest/serdes, + ../../waku/waku_api/rest/debug/types suite "Waku v2 REST API - Debug - serialization": diff --git a/tests/wakunode_rest/test_rest_filter.nim b/tests/wakunode_rest/test_rest_filter.nim index c13cd08b0e..a2b4ea1d31 100644 --- a/tests/wakunode_rest/test_rest_filter.nim +++ b/tests/wakunode_rest/test_rest_filter.nim @@ -8,24 +8,24 @@ import presto, presto/client as presto_client, libp2p/crypto/crypto import - ../../waku/node/message_cache, + ../../waku/waku_api/message_cache, ../../waku/common/base64, ../../waku/waku_core, ../../waku/waku_node, ../../waku/node/peer_manager, ../../waku/waku_filter, - ../../waku/node/rest/server, - ../../waku/node/rest/client, - ../../waku/node/rest/responses, - ../../waku/node/rest/filter/types, - ../../waku/node/rest/filter/handlers as filter_api, - ../../waku/node/rest/filter/client as filter_api_client, + ../../waku/waku_api/rest/server, + ../../waku/waku_api/rest/client, + ../../waku/waku_api/rest/responses, + ../../waku/waku_api/rest/filter/types, + ../../waku/waku_api/rest/filter/handlers as filter_api, + ../../waku/waku_api/rest/filter/client as filter_api_client, ../../waku/waku_relay, ../../waku/waku_filter_v2/subscriptions, ../../waku/waku_filter_v2/common, - ../../waku/node/rest/relay/topic_cache, - ../../waku/node/rest/relay/handlers as relay_api, - ../../waku/node/rest/relay/client as relay_api_client, + ../../waku/waku_api/rest/relay/topic_cache, + ../../waku/waku_api/rest/relay/handlers as relay_api, + ../../waku/waku_api/rest/relay/client as relay_api_client, ../testlib/wakucore, ../testlib/wakunode diff --git a/tests/wakunode_rest/test_rest_health.nim b/tests/wakunode_rest/test_rest_health.nim index 8d13cc6442..954c030658 100644 --- a/tests/wakunode_rest/test_rest_health.nim +++ b/tests/wakunode_rest/test_rest_health.nim @@ -12,11 +12,11 @@ import import ../../waku/waku_node, ../../waku/node/waku_node as waku_node2, # TODO: Remove after moving `git_version` to the app code. - ../../waku/node/rest/server, - ../../waku/node/rest/client, - ../../waku/node/rest/responses, - ../../waku/node/rest/health/handlers as health_api, - ../../waku/node/rest/health/client as health_api_client, + ../../waku/waku_api/rest/server, + ../../waku/waku_api/rest/client, + ../../waku/waku_api/rest/responses, + ../../waku/waku_api/rest/health/handlers as health_api, + ../../waku/waku_api/rest/health/client as health_api_client, ../../waku/waku_rln_relay, ../testlib/common, ../testlib/testutils, diff --git a/tests/wakunode_rest/test_rest_legacy_filter.nim b/tests/wakunode_rest/test_rest_legacy_filter.nim index 7b4ceba77b..b26dbef8ff 100644 --- a/tests/wakunode_rest/test_rest_legacy_filter.nim +++ b/tests/wakunode_rest/test_rest_legacy_filter.nim @@ -8,18 +8,18 @@ import presto, presto/client as presto_client, libp2p/crypto/crypto import - ../../waku/node/message_cache, + ../../waku/waku_api/message_cache, ../../waku/common/base64, ../../waku/waku_core, ../../waku/waku_node, ../../waku/node/peer_manager, ../../waku/waku_filter, - ../../waku/node/rest/server, - ../../waku/node/rest/client, - ../../waku/node/rest/responses, - ../../waku/node/rest/filter/types, - ../../waku/node/rest/filter/legacy_handlers as filter_api, - ../../waku/node/rest/filter/legacy_client as filter_api_client, + ../../waku/waku_api/rest/server, + ../../waku/waku_api/rest/client, + ../../waku/waku_api/rest/responses, + ../../waku/waku_api/rest/filter/types, + ../../waku/waku_api/rest/filter/legacy_handlers as filter_api, + ../../waku/waku_api/rest/filter/legacy_client as filter_api_client, ../../waku/waku_relay, ../testlib/wakucore, ../testlib/wakunode diff --git a/tests/wakunode_rest/test_rest_lightpush.nim b/tests/wakunode_rest/test_rest_lightpush.nim index fbd3e0f6c2..a05228beb4 100644 --- a/tests/wakunode_rest/test_rest_lightpush.nim +++ b/tests/wakunode_rest/test_rest_lightpush.nim @@ -9,18 +9,18 @@ import libp2p/crypto/crypto import - ../../waku/node/message_cache, + ../../waku/waku_api/message_cache, ../../waku/common/base64, ../../waku/waku_core, ../../waku/waku_node, ../../waku/node/peer_manager, ../../waku/waku_lightpush, - ../../waku/node/rest/server, - ../../waku/node/rest/client, - ../../waku/node/rest/responses, - ../../waku/node/rest/lightpush/types, - ../../waku/node/rest/lightpush/handlers as lightpush_api, - ../../waku/node/rest/lightpush/client as lightpush_api_client, + ../../waku/waku_api/rest/server, + ../../waku/waku_api/rest/client, + ../../waku/waku_api/rest/responses, + ../../waku/waku_api/rest/lightpush/types, + ../../waku/waku_api/rest/lightpush/handlers as lightpush_api, + ../../waku/waku_api/rest/lightpush/client as lightpush_api_client, ../../waku/waku_relay, ../testlib/wakucore, ../testlib/wakunode diff --git a/tests/wakunode_rest/test_rest_relay.nim b/tests/wakunode_rest/test_rest_relay.nim index 75d111e474..2d571b39d8 100644 --- a/tests/wakunode_rest/test_rest_relay.nim +++ b/tests/wakunode_rest/test_rest_relay.nim @@ -11,13 +11,13 @@ import ../../waku/common/base64, ../../waku/waku_core, ../../waku/waku_node, - ../../waku/node/rest/server, - ../../waku/node/rest/client, - ../../waku/node/rest/responses, - ../../waku/node/rest/relay/types, - ../../waku/node/rest/relay/handlers as relay_api, - ../../waku/node/rest/relay/client as relay_api_client, - ../../waku/node/rest/relay/topic_cache, + ../../waku/waku_api/rest/server, + ../../waku/waku_api/rest/client, + ../../waku/waku_api/rest/responses, + ../../waku/waku_api/rest/relay/types, + ../../waku/waku_api/rest/relay/handlers as relay_api, + ../../waku/waku_api/rest/relay/client as relay_api_client, + ../../waku/waku_api/rest/relay/topic_cache, ../../waku/waku_relay, ../../../waku/waku_rln_relay, ../testlib/wakucore, diff --git a/tests/wakunode_rest/test_rest_relay_serdes.nim b/tests/wakunode_rest/test_rest_relay_serdes.nim index 19aacfd56b..d1422bb09c 100644 --- a/tests/wakunode_rest/test_rest_relay_serdes.nim +++ b/tests/wakunode_rest/test_rest_relay_serdes.nim @@ -7,8 +7,8 @@ import json_serialization import ../../waku/common/base64, - ../../waku/node/rest/serdes, - ../../waku/node/rest/relay/types, + ../../waku/waku_api/rest/serdes, + ../../waku/waku_api/rest/relay/types, ../../waku/waku_core diff --git a/tests/wakunode_rest/test_rest_serdes.nim b/tests/wakunode_rest/test_rest_serdes.nim index bc9c0880c7..725bf93796 100644 --- a/tests/wakunode_rest/test_rest_serdes.nim +++ b/tests/wakunode_rest/test_rest_serdes.nim @@ -6,8 +6,8 @@ import unittest2, json_serialization import - ../../waku/node/rest/serdes, - ../../waku/node/rest/debug/types + ../../waku/waku_api/rest/serdes, + ../../waku/waku_api/rest/debug/types # TODO: Decouple this test suite from the `debug_api` module by defining diff --git a/tests/wakunode_rest/test_rest_store.nim b/tests/wakunode_rest/test_rest_store.nim index cae8e859e3..8e61e2fd1c 100644 --- a/tests/wakunode_rest/test_rest_store.nim +++ b/tests/wakunode_rest/test_rest_store.nim @@ -14,12 +14,12 @@ import ../../../waku/waku_core/time, ../../../waku/waku_node, ../../../waku/node/peer_manager, - ../../../waku/node/rest/server, - ../../../waku/node/rest/client, - ../../../waku/node/rest/responses, - ../../../waku/node/rest/store/handlers as store_api, - ../../../waku/node/rest/store/client as store_api_client, - ../../../waku/node/rest/store/types, + ../../../waku/waku_api/rest/server, + ../../../waku/waku_api/rest/client, + ../../../waku/waku_api/rest/responses, + ../../../waku/waku_api/rest/store/handlers as store_api, + ../../../waku/waku_api/rest/store/client as store_api_client, + ../../../waku/waku_api/rest/store/types, ../../../waku/waku_archive, ../../../waku/waku_archive/driver/queue_driver, ../../../waku/waku_store as waku_store, diff --git a/waku/node/waku_node.nim b/waku/node/waku_node.nim index 363581e73d..a3a8f764b1 100644 --- a/waku/node/waku_node.nim +++ b/waku/node/waku_node.nim @@ -20,7 +20,6 @@ import libp2p/protocols/connectivity/autonat/client, libp2p/protocols/connectivity/autonat/service, libp2p/protocols/rendezvous, - libp2p/nameresolving/nameresolver, libp2p/builders, libp2p/transports/tcptransport, libp2p/transports/wstransport @@ -41,9 +40,7 @@ import ../waku_peer_exchange, ../waku_rln_relay, ./config, - ./peer_manager, - ./waku_switch, - ./rest/relay/topic_cache + ./peer_manager declarePublicCounter waku_node_messages, "number of messages received", ["type"] diff --git a/waku/waku_api.nim b/waku/waku_api.nim new file mode 100644 index 0000000000..8eb8f84640 --- /dev/null +++ b/waku/waku_api.nim @@ -0,0 +1,9 @@ +import + ./waku_api/message_cache, + ./waku_api/rest, + ./waku_api/json_rpc + +export + message_cache, + rest, + jsonrpc \ No newline at end of file diff --git a/waku/node/jsonrpc/admin/callsigs.nim b/waku/waku_api/jsonrpc/admin/callsigs.nim similarity index 100% rename from waku/node/jsonrpc/admin/callsigs.nim rename to waku/waku_api/jsonrpc/admin/callsigs.nim diff --git a/waku/node/jsonrpc/admin/client.nim b/waku/waku_api/jsonrpc/admin/client.nim similarity index 100% rename from waku/node/jsonrpc/admin/client.nim rename to waku/waku_api/jsonrpc/admin/client.nim diff --git a/waku/node/jsonrpc/admin/handlers.nim b/waku/waku_api/jsonrpc/admin/handlers.nim similarity index 98% rename from waku/node/jsonrpc/admin/handlers.nim rename to waku/waku_api/jsonrpc/admin/handlers.nim index d60994a729..c89fb05de0 100644 --- a/waku/node/jsonrpc/admin/handlers.nim +++ b/waku/waku_api/jsonrpc/admin/handlers.nim @@ -12,8 +12,8 @@ import ../../../waku_store, ../../../waku_filter, ../../../waku_relay, - ../../peer_manager, - ../../waku_node, + ../../../waku_node, + ../../../node/peer_manager, ./types diff --git a/waku/node/jsonrpc/admin/types.nim b/waku/waku_api/jsonrpc/admin/types.nim similarity index 100% rename from waku/node/jsonrpc/admin/types.nim rename to waku/waku_api/jsonrpc/admin/types.nim diff --git a/waku/node/jsonrpc/debug/callsigs.nim b/waku/waku_api/jsonrpc/debug/callsigs.nim similarity index 100% rename from waku/node/jsonrpc/debug/callsigs.nim rename to waku/waku_api/jsonrpc/debug/callsigs.nim diff --git a/waku/node/jsonrpc/debug/client.nim b/waku/waku_api/jsonrpc/debug/client.nim similarity index 92% rename from waku/node/jsonrpc/debug/client.nim rename to waku/waku_api/jsonrpc/debug/client.nim index ceb11c6fd2..a699a4eaad 100644 --- a/waku/node/jsonrpc/debug/client.nim +++ b/waku/waku_api/jsonrpc/debug/client.nim @@ -7,7 +7,7 @@ import std/[os, strutils], json_rpc/rpcclient import - ../../waku_node + ../../../waku_node template sourceDir: string = currentSourcePath.rsplit(DirSep, 1)[0] diff --git a/waku/node/jsonrpc/debug/handlers.nim b/waku/waku_api/jsonrpc/debug/handlers.nim similarity index 96% rename from waku/node/jsonrpc/debug/handlers.nim rename to waku/waku_api/jsonrpc/debug/handlers.nim index 582083fd28..41462d791c 100644 --- a/waku/node/jsonrpc/debug/handlers.nim +++ b/waku/waku_api/jsonrpc/debug/handlers.nim @@ -7,7 +7,7 @@ import chronicles, json_rpc/rpcserver import - ../../waku_node + ../../../waku_node logScope: topics = "waku node jsonrpc debug_api" diff --git a/waku/node/jsonrpc/filter/callsigs.nim b/waku/waku_api/jsonrpc/filter/callsigs.nim similarity index 100% rename from waku/node/jsonrpc/filter/callsigs.nim rename to waku/waku_api/jsonrpc/filter/callsigs.nim diff --git a/waku/node/jsonrpc/filter/client.nim b/waku/waku_api/jsonrpc/filter/client.nim similarity index 100% rename from waku/node/jsonrpc/filter/client.nim rename to waku/waku_api/jsonrpc/filter/client.nim diff --git a/waku/node/jsonrpc/filter/handlers.nim b/waku/waku_api/jsonrpc/filter/handlers.nim similarity index 97% rename from waku/node/jsonrpc/filter/handlers.nim rename to waku/waku_api/jsonrpc/filter/handlers.nim index 312dcd0364..df7e459cfb 100644 --- a/waku/node/jsonrpc/filter/handlers.nim +++ b/waku/waku_api/jsonrpc/filter/handlers.nim @@ -12,9 +12,10 @@ import ../../../waku_filter, ../../../waku_filter/rpc, ../../../waku_filter/client, - ../../message_cache, - ../../peer_manager, - ../../waku_node + ../../../waku_node, + ../../../node/peer_manager, + ../../message_cache + logScope: diff --git a/waku/node/jsonrpc/hexstrings.nim b/waku/waku_api/jsonrpc/hexstrings.nim similarity index 100% rename from waku/node/jsonrpc/hexstrings.nim rename to waku/waku_api/jsonrpc/hexstrings.nim diff --git a/waku/node/jsonrpc/marshalling.nim b/waku/waku_api/jsonrpc/marshalling.nim similarity index 100% rename from waku/node/jsonrpc/marshalling.nim rename to waku/waku_api/jsonrpc/marshalling.nim diff --git a/waku/node/jsonrpc/message.nim b/waku/waku_api/jsonrpc/message.nim similarity index 100% rename from waku/node/jsonrpc/message.nim rename to waku/waku_api/jsonrpc/message.nim diff --git a/waku/node/jsonrpc/relay/callsigs.nim b/waku/waku_api/jsonrpc/relay/callsigs.nim similarity index 100% rename from waku/node/jsonrpc/relay/callsigs.nim rename to waku/waku_api/jsonrpc/relay/callsigs.nim diff --git a/waku/node/jsonrpc/relay/client.nim b/waku/waku_api/jsonrpc/relay/client.nim similarity index 100% rename from waku/node/jsonrpc/relay/client.nim rename to waku/waku_api/jsonrpc/relay/client.nim diff --git a/waku/node/jsonrpc/relay/handlers.nim b/waku/waku_api/jsonrpc/relay/handlers.nim similarity index 99% rename from waku/node/jsonrpc/relay/handlers.nim rename to waku/waku_api/jsonrpc/relay/handlers.nim index 4329a990ad..213b410c55 100644 --- a/waku/node/jsonrpc/relay/handlers.nim +++ b/waku/waku_api/jsonrpc/relay/handlers.nim @@ -15,7 +15,7 @@ import ../../../waku_relay, ../../../waku_rln_relay, ../../../waku_rln_relay/rln/wrappers, - ../../waku_node, + ../../../waku_node, ../../message_cache, ../message diff --git a/waku/node/jsonrpc/store/callsigs.nim b/waku/waku_api/jsonrpc/store/callsigs.nim similarity index 100% rename from waku/node/jsonrpc/store/callsigs.nim rename to waku/waku_api/jsonrpc/store/callsigs.nim diff --git a/waku/node/jsonrpc/store/client.nim b/waku/waku_api/jsonrpc/store/client.nim similarity index 100% rename from waku/node/jsonrpc/store/client.nim rename to waku/waku_api/jsonrpc/store/client.nim diff --git a/waku/node/jsonrpc/store/handlers.nim b/waku/waku_api/jsonrpc/store/handlers.nim similarity index 98% rename from waku/node/jsonrpc/store/handlers.nim rename to waku/waku_api/jsonrpc/store/handlers.nim index db52b35226..fa0897f533 100644 --- a/waku/node/jsonrpc/store/handlers.nim +++ b/waku/waku_api/jsonrpc/store/handlers.nim @@ -11,8 +11,8 @@ import ../../../waku_core, ../../../waku_store, ../../../waku_store/rpc, - ../../waku_node, - ../../peer_manager, + ../../../waku_node, + ../../../node/peer_manager, ./types diff --git a/waku/node/jsonrpc/store/types.nim b/waku/waku_api/jsonrpc/store/types.nim similarity index 100% rename from waku/node/jsonrpc/store/types.nim rename to waku/waku_api/jsonrpc/store/types.nim diff --git a/waku/node/message_cache.nim b/waku/waku_api/message_cache.nim similarity index 100% rename from waku/node/message_cache.nim rename to waku/waku_api/message_cache.nim diff --git a/waku/node/rest/client.nim b/waku/waku_api/rest/client.nim similarity index 100% rename from waku/node/rest/client.nim rename to waku/waku_api/rest/client.nim diff --git a/waku/node/rest/debug/client.nim b/waku/waku_api/rest/debug/client.nim similarity index 100% rename from waku/node/rest/debug/client.nim rename to waku/waku_api/rest/debug/client.nim diff --git a/waku/node/rest/debug/handlers.nim b/waku/waku_api/rest/debug/handlers.nim similarity index 98% rename from waku/node/rest/debug/handlers.nim rename to waku/waku_api/rest/debug/handlers.nim index 9067a02df7..95ba6f3539 100644 --- a/waku/node/rest/debug/handlers.nim +++ b/waku/waku_api/rest/debug/handlers.nim @@ -8,7 +8,7 @@ import json_serialization, presto/route import - ../../waku_node, + ../../../waku_node, ../responses, ../serdes, ./types diff --git a/waku/node/rest/debug/openapi.yaml b/waku/waku_api/rest/debug/openapi.yaml similarity index 100% rename from waku/node/rest/debug/openapi.yaml rename to waku/waku_api/rest/debug/openapi.yaml diff --git a/waku/node/rest/debug/types.nim b/waku/waku_api/rest/debug/types.nim similarity index 98% rename from waku/node/rest/debug/types.nim rename to waku/waku_api/rest/debug/types.nim index 56f2d872cd..102cbfc154 100644 --- a/waku/node/rest/debug/types.nim +++ b/waku/waku_api/rest/debug/types.nim @@ -8,7 +8,7 @@ import json_serialization, json_serialization/std/options import - ../../waku_node, + ../../../waku_node, ../serdes #### Types diff --git a/waku/node/rest/filter/client.nim b/waku/waku_api/rest/filter/client.nim similarity index 100% rename from waku/node/rest/filter/client.nim rename to waku/waku_api/rest/filter/client.nim diff --git a/waku/node/rest/filter/handlers.nim b/waku/waku_api/rest/filter/handlers.nim similarity index 99% rename from waku/node/rest/filter/handlers.nim rename to waku/waku_api/rest/filter/handlers.nim index 1cfc5b0115..32527f3864 100644 --- a/waku/node/rest/filter/handlers.nim +++ b/waku/waku_api/rest/filter/handlers.nim @@ -14,13 +14,13 @@ import presto/common import ../../../waku_core, + ../../../waku_node, + ../../../node/peer_manager, ../../../waku_filter, ../../../waku_filter_v2, ../../../waku_filter_v2/client as filter_protocol_client, ../../../waku_filter_v2/common as filter_protocol_type, ../../message_cache, - ../../peer_manager, - ../../waku_node, ../serdes, ../responses, ./types diff --git a/waku/node/rest/filter/legacy_client.nim b/waku/waku_api/rest/filter/legacy_client.nim similarity index 100% rename from waku/node/rest/filter/legacy_client.nim rename to waku/waku_api/rest/filter/legacy_client.nim diff --git a/waku/node/rest/filter/legacy_handlers.nim b/waku/waku_api/rest/filter/legacy_handlers.nim similarity index 99% rename from waku/node/rest/filter/legacy_handlers.nim rename to waku/waku_api/rest/filter/legacy_handlers.nim index 92131cb0d5..09de827fcb 100644 --- a/waku/node/rest/filter/legacy_handlers.nim +++ b/waku/waku_api/rest/filter/legacy_handlers.nim @@ -15,9 +15,9 @@ import ../../../waku_core, ../../../waku_filter, ../../../waku_filter/client, + ../../../node/peer_manager, + ../../../waku_node, ../../message_cache, - ../../peer_manager, - ../../waku_node, ../serdes, ../responses, ./types diff --git a/waku/node/rest/filter/openapi.yaml b/waku/waku_api/rest/filter/openapi.yaml similarity index 100% rename from waku/node/rest/filter/openapi.yaml rename to waku/waku_api/rest/filter/openapi.yaml diff --git a/waku/node/rest/filter/types.nim b/waku/waku_api/rest/filter/types.nim similarity index 100% rename from waku/node/rest/filter/types.nim rename to waku/waku_api/rest/filter/types.nim diff --git a/waku/node/rest/health/client.nim b/waku/waku_api/rest/health/client.nim similarity index 100% rename from waku/node/rest/health/client.nim rename to waku/waku_api/rest/health/client.nim diff --git a/waku/node/rest/health/handlers.nim b/waku/waku_api/rest/health/handlers.nim similarity index 98% rename from waku/node/rest/health/handlers.nim rename to waku/waku_api/rest/health/handlers.nim index 9b4fffdfe6..a57fa3d27e 100644 --- a/waku/node/rest/health/handlers.nim +++ b/waku/waku_api/rest/health/handlers.nim @@ -8,7 +8,7 @@ import json_serialization, presto/route import - ../../waku_node, + ../../../waku_node, ../responses, ../serdes diff --git a/waku/node/rest/health/openapi.yaml b/waku/waku_api/rest/health/openapi.yaml similarity index 100% rename from waku/node/rest/health/openapi.yaml rename to waku/waku_api/rest/health/openapi.yaml diff --git a/waku/node/rest/lightpush/client.nim b/waku/waku_api/rest/lightpush/client.nim similarity index 100% rename from waku/node/rest/lightpush/client.nim rename to waku/waku_api/rest/lightpush/client.nim diff --git a/waku/node/rest/lightpush/handlers.nim b/waku/waku_api/rest/lightpush/handlers.nim similarity index 97% rename from waku/node/rest/lightpush/handlers.nim rename to waku/waku_api/rest/lightpush/handlers.nim index a13fe6fd4c..7bbf22f6d8 100644 --- a/waku/node/rest/lightpush/handlers.nim +++ b/waku/waku_api/rest/lightpush/handlers.nim @@ -15,8 +15,8 @@ import import ../../../waku_core, - ../../peer_manager, - ../../waku_node, + ../../waku/node/peer_manager, + ../../../waku_node, ../../waku/waku_lightpush, ../serdes, ../responses, diff --git a/waku/node/rest/lightpush/openapi.yaml b/waku/waku_api/rest/lightpush/openapi.yaml similarity index 100% rename from waku/node/rest/lightpush/openapi.yaml rename to waku/waku_api/rest/lightpush/openapi.yaml diff --git a/waku/node/rest/lightpush/types.nim b/waku/waku_api/rest/lightpush/types.nim similarity index 100% rename from waku/node/rest/lightpush/types.nim rename to waku/waku_api/rest/lightpush/types.nim diff --git a/waku/node/rest/relay/client.nim b/waku/waku_api/rest/relay/client.nim similarity index 100% rename from waku/node/rest/relay/client.nim rename to waku/waku_api/rest/relay/client.nim diff --git a/waku/node/rest/relay/handlers.nim b/waku/waku_api/rest/relay/handlers.nim similarity index 99% rename from waku/node/rest/relay/handlers.nim rename to waku/waku_api/rest/relay/handlers.nim index 68647de769..5b4d4f97f1 100644 --- a/waku/node/rest/relay/handlers.nim +++ b/waku/waku_api/rest/relay/handlers.nim @@ -12,7 +12,7 @@ import presto/route, presto/common import - ../../waku_node, + ../../../waku_node, ../../../waku_relay/protocol, ../../../waku_rln_relay, ../../../waku_rln_relay/rln/wrappers, diff --git a/waku/node/rest/relay/openapi.yaml b/waku/waku_api/rest/relay/openapi.yaml similarity index 100% rename from waku/node/rest/relay/openapi.yaml rename to waku/waku_api/rest/relay/openapi.yaml diff --git a/waku/node/rest/relay/topic_cache.nim b/waku/waku_api/rest/relay/topic_cache.nim similarity index 100% rename from waku/node/rest/relay/topic_cache.nim rename to waku/waku_api/rest/relay/topic_cache.nim diff --git a/waku/node/rest/relay/types.nim b/waku/waku_api/rest/relay/types.nim similarity index 100% rename from waku/node/rest/relay/types.nim rename to waku/waku_api/rest/relay/types.nim diff --git a/waku/node/rest/responses.nim b/waku/waku_api/rest/responses.nim similarity index 100% rename from waku/node/rest/responses.nim rename to waku/waku_api/rest/responses.nim diff --git a/waku/node/rest/serdes.nim b/waku/waku_api/rest/serdes.nim similarity index 100% rename from waku/node/rest/serdes.nim rename to waku/waku_api/rest/serdes.nim diff --git a/waku/node/rest/server.nim b/waku/waku_api/rest/server.nim similarity index 100% rename from waku/node/rest/server.nim rename to waku/waku_api/rest/server.nim diff --git a/waku/node/rest/store/client.nim b/waku/waku_api/rest/store/client.nim similarity index 100% rename from waku/node/rest/store/client.nim rename to waku/waku_api/rest/store/client.nim diff --git a/waku/node/rest/store/handlers.nim b/waku/waku_api/rest/store/handlers.nim similarity index 99% rename from waku/node/rest/store/handlers.nim rename to waku/waku_api/rest/store/handlers.nim index 3a4acf3c29..58b31f4fb7 100644 --- a/waku/node/rest/store/handlers.nim +++ b/waku/waku_api/rest/store/handlers.nim @@ -11,11 +11,10 @@ import json_serialization, presto/route import - ../../../common/base64, ../../../waku_core, ../../../waku_store/common, - ../../waku_node, - ../../peer_manager, + ../../../waku_node, + ../../../node/peer_manager, ../responses, ../serdes, ./types diff --git a/waku/node/rest/store/openapi.yaml b/waku/waku_api/rest/store/openapi.yaml similarity index 100% rename from waku/node/rest/store/openapi.yaml rename to waku/waku_api/rest/store/openapi.yaml diff --git a/waku/node/rest/store/types.nim b/waku/waku_api/rest/store/types.nim similarity index 100% rename from waku/node/rest/store/types.nim rename to waku/waku_api/rest/store/types.nim From 6cea737109223bbd2900519d8d958593086b9798 Mon Sep 17 00:00:00 2001 From: Ivan Folgueira Bande <128452529+Ivansete-status@users.noreply.github.com> Date: Fri, 22 Sep 2023 16:36:31 +0200 Subject: [PATCH 039/274] waku_thread.nim: Using 'ThreadSignalPtr' instead of loop to handle req/resp (#2045) --- library/waku_thread/waku_thread.nim | 33 ++++++++++++++++++++++------- 1 file changed, 25 insertions(+), 8 deletions(-) diff --git a/library/waku_thread/waku_thread.nim b/library/waku_thread/waku_thread.nim index c9a4051177..a2965e4dd2 100644 --- a/library/waku_thread/waku_thread.nim +++ b/library/waku_thread/waku_thread.nim @@ -8,9 +8,10 @@ import import chronicles, chronos, + chronos/threadsync, + taskpools/channels_spsc_single, stew/results, - stew/shims/net, - taskpools/channels_spsc_single + stew/shims/net import ../../../waku/node/waku_node, ../events/[json_error_event,json_message_event,json_base_event], @@ -21,7 +22,9 @@ type Context* = object thread: Thread[(ptr Context)] reqChannel: ChannelSPSCSingle[ptr InterThreadRequest] + reqSignal: ThreadSignalPtr respChannel: ChannelSPSCSingle[ptr InterThreadResponse] + respSignal: ThreadSignalPtr var ctx {.threadvar.}: ptr Context @@ -52,6 +55,7 @@ proc run(ctx: ptr Context) {.thread.} = ## Trying to get a request from the libwaku main thread var request: ptr InterThreadRequest + waitFor ctx.reqSignal.wait() let recvOk = ctx.reqChannel.tryRecv(request) if recvOk == true: let resultResponse = @@ -61,9 +65,8 @@ proc run(ctx: ptr Context) {.thread.} = let threadSafeResp = InterThreadResponse.createShared(resultResponse) ## The error-handling is performed in the main thread - discard ctx.respChannel.trySend( threadSafeResp ) - - waitFor sleepAsync(1) + discard ctx.respChannel.trySend(threadSafeResp) + discard ctx.respSignal.fireSync() tearDownForeignThreadGc() @@ -74,6 +77,10 @@ proc createWakuThread*(): Result[void, string] = waku_init() ctx = createShared(Context, 1) + ctx.reqSignal = ThreadSignalPtr.new().valueOr: + return err("couldn't create reqSignal ThreadSignalPtr") + ctx.respSignal = ThreadSignalPtr.new().valueOr: + return err("couldn't create respSignal ThreadSignalPtr") running.store(true) @@ -90,6 +97,8 @@ proc createWakuThread*(): Result[void, string] = proc stopWakuNodeThread*() = running.store(false) joinThread(ctx.thread) + discard ctx.reqSignal.close() + discard ctx.respSignal.close() freeShared(ctx) proc sendRequestToWakuThread*(reqType: RequestType, @@ -102,12 +111,20 @@ proc sendRequestToWakuThread*(reqType: RequestType, if not sentOk: return err("Couldn't send a request to the waku thread: " & $req[]) + let fireSyncRes = ctx.reqSignal.fireSync() + if fireSyncRes.isErr(): + return err("failed fireSync: " & $fireSyncRes.error) + + if fireSyncRes.get() == false: + return err("Couldn't fireSync in time") + ## Waiting for the response + waitFor ctx.respSignal.wait() + var response: ptr InterThreadResponse var recvOk = ctx.respChannel.tryRecv(response) - while recvOk == false: - recvOk = ctx.respChannel.tryRecv(response) - os.sleep(1) + if recvOk == false: + return err("Couldn't receive response from the waku thread: " & $req[]) ## Converting the thread-safe response into a managed/CG'ed `Result` return InterThreadResponse.process(response) From 6fdee058114535599f0efceb5b7a1cf1b894c994 Mon Sep 17 00:00:00 2001 From: chair <29414216+chair28980@users.noreply.github.com> Date: Fri, 22 Sep 2023 10:18:01 -0700 Subject: [PATCH 040/274] create dependency bump template for releases (#2058) --- .github/ISSUE_TEMPLATE/bump_dependencies.md | 47 +++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/bump_dependencies.md diff --git a/.github/ISSUE_TEMPLATE/bump_dependencies.md b/.github/ISSUE_TEMPLATE/bump_dependencies.md new file mode 100644 index 0000000000..86256d0fb8 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bump_dependencies.md @@ -0,0 +1,47 @@ +--- +name: Bump dependencies +about: Bump vendor dependencies for release +title: 'Bump vendor dependencies for release 0.0.0' +labels: dependencies +assignees: '' + +--- + + + +Update `nwaku` "vendor" dependencies. + +### Items to bump +- [ ] dnsclient.nim ( update to the latest tag version ) +- [ ] nim-bearssl +- [ ] nimbus-build-system +- [ ] nim-chronicles +- [ ] nim-chronos +- [ ] nim-confutils +- [ ] nimcrypto +- [ ] nim-dnsdisc +- [ ] nim-eth +- [ ] nim-faststreams +- [ ] nim-http-utils +- [ ] nim-json-rpc +- [ ] nim-json-serialization +- [ ] nim-libbacktrace +- [ ] nim-libp2p ( update to the unstable branch ) +- [ ] nim-metrics +- [ ] nim-nat-traversal +- [ ] nim-presto +- [ ] nim-regex ( update to the latest tag version ) +- [ ] nim-secp256k1 +- [ ] nim-serialization +- [ ] nim-sqlite3-abi ( update to the latest tag version ) +- [ ] nim-stew +- [ ] nim-stint +- [ ] nim-taskpools +- [ ] nim-testutils +- [ ] nim-toml-serialization +- [ ] nim-unicodedb +- [ ] nim-unittest2 +- [ ] nim-web3 +- [ ] nim-websock +- [ ] nim-zlib +- [ ] zerokit ( this should be kept in version `v0.3.4` ) From 0d9e9fbdd2e61aba6a65886ef19f55073c5902bd Mon Sep 17 00:00:00 2001 From: Simon-Pierre Vivier Date: Fri, 22 Sep 2023 15:13:50 -0400 Subject: [PATCH 041/274] feat: peer manager can filter select peer by shard (#2063) --- waku/node/peer_manager/peer_manager.nim | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/waku/node/peer_manager/peer_manager.nim b/waku/node/peer_manager/peer_manager.nim index 3e7d0f533f..a705ed450f 100644 --- a/waku/node/peer_manager/peer_manager.nim +++ b/waku/node/peer_manager/peer_manager.nim @@ -16,6 +16,7 @@ import ../../common/nimchronos, ../../waku_core, ../../waku_relay, + ../../waku_enr/sharding, ./peer_store/peer_storage, ./waku_peer_store @@ -631,11 +632,14 @@ proc prunePeerStore*(pm: PeerManager) = capacity = capacity, pruned = pruned -proc selectPeer*(pm: PeerManager, proto: string): Option[RemotePeerInfo] = +proc selectPeer*(pm: PeerManager, proto: string, shard: Option[PubsubTopic] = none(PubsubTopic)): Option[RemotePeerInfo] = debug "Selecting peer from peerstore", protocol=proto # Selects the best peer for a given protocol - let peers = pm.peerStore.getPeersByProtocol(proto) + var peers = pm.peerStore.getPeersByProtocol(proto) + + if shard.isSome(): + peers.keepItIf((it.enr.isSome() and it.enr.get().containsShard(shard.get()))) # No criteria for selecting a peer for WakuRelay, random one if proto == WakuRelayCodec: From 292de5a6c111286ba56c44c41253e9209247e984 Mon Sep 17 00:00:00 2001 From: Ivan Folgueira Bande <128452529+Ivansete-status@users.noreply.github.com> Date: Mon, 25 Sep 2023 08:13:40 +0200 Subject: [PATCH 042/274] bumping web3 (#2066) --- vendor/nim-web3 | 2 +- .../waku_rln_relay/group_manager/on_chain/group_manager.nim | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/vendor/nim-web3 b/vendor/nim-web3 index bf6c24dba5..70f22351c4 160000 --- a/vendor/nim-web3 +++ b/vendor/nim-web3 @@ -1 +1 @@ -Subproject commit bf6c24dba5c808ac570b8602d3b2f748da6a1aae +Subproject commit 70f22351c44b849a321b78b94dc0f9cd4ac9a5e1 diff --git a/waku/waku_rln_relay/group_manager/on_chain/group_manager.nim b/waku/waku_rln_relay/group_manager/on_chain/group_manager.nim index 618a64d00b..3420882efd 100644 --- a/waku/waku_rln_relay/group_manager/on_chain/group_manager.nim +++ b/waku/waku_rln_relay/group_manager/on_chain/group_manager.nim @@ -162,7 +162,9 @@ method register*(g: OnchainGroupManager, identityCredentials: IdentityCredential # TODO: make this robust. search within the event list for the event let firstTopic = tsReceipt.logs[0].topics[0] # the hash of the signature of MemberRegistered(uint256,uint256) event is equal to the following hex value - if firstTopic[0..65] != "0x5a92c2530f207992057b9c3e544108ffce3beda4a63719f316967c49bf6159d2": + if firstTopic != cast[FixedBytes[32]](hexToByteArray[32]( + "0x5a92c2530f207992057b9c3e544108ffce3beda4a63719f316967c49bf6159d2" + )): raise newException(ValueError, "unexpected event signature") # the arguments of the raised event i.e., MemberRegistered are encoded inside the data field @@ -170,7 +172,7 @@ method register*(g: OnchainGroupManager, identityCredentials: IdentityCredential let arguments = tsReceipt.logs[0].data debug "tx log data", arguments=arguments let - argumentsBytes = arguments.hexToSeqByte() + argumentsBytes = arguments # In TX log data, uints are encoded in big endian eventIndex = UInt256.fromBytesBE(argumentsBytes[32..^1]) From afdcfc78b9d164baf7a26ca2c34a9fd71ae167a1 Mon Sep 17 00:00:00 2001 From: Ivan Folgueira Bande <128452529+Ivansete-status@users.noreply.github.com> Date: Mon, 25 Sep 2023 08:15:43 +0200 Subject: [PATCH 043/274] Makefile: making the 'libwaku.so' to be built with 'make all' (#2070) --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index a5109bcf24..083b4f42a3 100644 --- a/Makefile +++ b/Makefile @@ -35,7 +35,7 @@ else # "variables.mk" was included. Business as usual until the end of this file .PHONY: all test update clean # default target, because it's the first one that doesn't start with '.' -all: | wakunode2 example2 chat2 chat2bridge +all: | wakunode2 example2 chat2 chat2bridge libwaku test: | testcommon testwaku From 45fe2d3bee4d311f74bbc51c1941a607f64d1acf Mon Sep 17 00:00:00 2001 From: Aaryamann Challani <43716372+rymnc@users.noreply.github.com> Date: Mon, 25 Sep 2023 13:26:16 +0530 Subject: [PATCH 044/274] fix(rln-relay): segfault when no params except rln-relay is passed in (#2047) --- waku/waku_rln_relay/group_manager/static/group_manager.nim | 3 ++- waku/waku_rln_relay/rln_relay.nim | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/waku/waku_rln_relay/group_manager/static/group_manager.nim b/waku/waku_rln_relay/group_manager/static/group_manager.nim index 9aa81d952e..3274975de9 100644 --- a/waku/waku_rln_relay/group_manager/static/group_manager.nim +++ b/waku/waku_rln_relay/group_manager/static/group_manager.nim @@ -19,7 +19,8 @@ method init*(g: StaticGroupManager): Future[void] {.async,gcsafe.} = let groupSize = g.groupSize groupKeys = g.groupKeys - membershipIndex = g.membershipIndex.get() + membershipIndex = if g.membershipIndex.isSome(): g.membershipIndex.get() + else: raise newException(ValueError, "Membership index is not set") if membershipIndex < MembershipIndex(0) or membershipIndex >= MembershipIndex(groupSize): raise newException(ValueError, "Invalid membership index. Must be within 0 and " & $(groupSize - 1) & "but was " & $membershipIndex) diff --git a/waku/waku_rln_relay/rln_relay.nim b/waku/waku_rln_relay/rln_relay.nim index 15a85348b8..72dff801d6 100644 --- a/waku/waku_rln_relay/rln_relay.nim +++ b/waku/waku_rln_relay/rln_relay.nim @@ -408,7 +408,7 @@ proc isReady*(rlnPeer: WakuRLNRelay): Future[bool] {.async.} = proc new*(T: type WakuRlnRelay, conf: WakuRlnConfig, - registrationHandler: Option[RegistrationHandler] = none(RegistrationHandler) + registrationHandler = none(RegistrationHandler) ): Future[RlnRelayResult[WakuRlnRelay]] {.async.} = ## Mounts the rln-relay protocol on the node. ## The rln-relay protocol can be mounted in two modes: on-chain and off-chain. From ed473545284fb703c25a9bd68548d3b7154b2846 Mon Sep 17 00:00:00 2001 From: Vaclav Pavlin Date: Mon, 25 Sep 2023 14:38:59 +0200 Subject: [PATCH 045/274] feat(networkmonitor): add ping latencies, optimize reconnections (#2068) --- apps/networkmonitor/networkmonitor.nim | 107 ++++++++++++------ apps/networkmonitor/networkmonitor_config.nim | 2 +- .../networkmonitor/networkmonitor_metrics.nim | 12 +- 3 files changed, 86 insertions(+), 35 deletions(-) diff --git a/apps/networkmonitor/networkmonitor.nim b/apps/networkmonitor/networkmonitor.nim index ccd223c9e5..fc0787543d 100644 --- a/apps/networkmonitor/networkmonitor.nim +++ b/apps/networkmonitor/networkmonitor.nim @@ -16,6 +16,7 @@ import eth/p2p/discoveryv5/enr, libp2p/crypto/crypto, libp2p/nameresolving/dnsresolver, + libp2p/protocols/ping, metrics, metrics/chronos_httpserver, presto/[route, server, client] @@ -33,6 +34,10 @@ import logScope: topics = "networkmonitor" +const ReconnectTime = 60 +const MaxConnectionRetries = 10 +const AvgPingWindow = 10.0 + proc setDiscoveredPeersCapabilities( routingTableNodes: seq[Node]) = for capability in @[Relay, Store, Filter, Lightpush]: @@ -47,12 +52,14 @@ proc setConnectedPeersMetrics(discoveredNodes: seq[Node], restClient: RestClientRef, allPeers: CustomPeersTableRef) {.async.} = - let currentTime = $getTime() + let currentTime = getTime().toUnix() # Protocols and agent string and its count var allProtocols: Table[string, int] var allAgentStrings: Table[string, int] + var newPeers = 0 + # iterate all newly discovered nodes for discNode in discoveredNodes: let typedRecord = discNode.record.toTypedRecord() @@ -65,15 +72,25 @@ proc setConnectedPeersMetrics(discoveredNodes: seq[Node], warn "could not get secp256k1 key", typedRecord=typedRecord.get() continue + let peerRes = toRemotePeerInfo(discNode.record) + + let peerInfo = peerRes.valueOr(): + warn "error converting record to remote peer info", record=discNode.record + continue + # create new entry if new peerId found - let peerId = secp256k1.get().toHex() + let peerId = $peerInfo.peerId let customPeerInfo = CustomPeerInfo(peerId: peerId) if not allPeers.hasKey(peerId): allPeers[peerId] = customPeerInfo + newPeers += 1 + else: + info "already seen", peerId=peerId allPeers[peerId].lastTimeDiscovered = currentTime allPeers[peerId].enr = discNode.record.toURI() allPeers[peerId].enrCapabilities = discNode.record.getCapabilities().mapIt($it) + allPeers[peerId].discovered += 1 if not typedRecord.get().ip.isSome(): warn "ip field is not set", record=typedRecord.get() @@ -82,43 +99,68 @@ proc setConnectedPeersMetrics(discoveredNodes: seq[Node], let ip = $typedRecord.get().ip.get().join(".") allPeers[peerId].ip = ip - let peer = toRemotePeerInfo(discNode.record) - if not peer.isOk(): - warn "error converting record to remote peer info", record=discNode.record - continue + # try to ping the peer + if getTime().toUnix() >= allPeers[peerId].lastTimeConnected + ReconnectTime and allPeers[peerId].retries < MaxConnectionRetries: + if allPeers[peerId].retries > 0: + warn "trying to dial failed peer again", peerId=peerId, retry=allPeers[peerId].retries - # try to connect to the peer - # TODO: check last connection time and if not > x, skip connecting - let timedOut = not await node.connectToNodes(@[peer.get()]).withTimeout(timeout) - if timedOut: - warn "could not connect to peer, timedout", timeout=timeout, peer=peer.get() - # TODO: Add other staates - allPeers[peerId].connError = "timedout" - continue + var pingDelay:chronos.Duration + + proc ping(): Future[Result[void, string]] {.async, gcsafe.} = + try: + let conn = await node.switch.dial(peerInfo.peerId, peerInfo.addrs, PingCodec) + pingDelay = await node.libp2pPing.ping(conn) + return ok() + + except CatchableError: + var msg = getCurrentExceptionMsg() + if msg == "Future operation cancelled!": + msg = "timedout" + warn "failed to ping the peer", peer=peerInfo, err=msg + + allPeers[peerId].connError = msg + return err("could not ping peer: " & msg) + + let timedOut = not await ping().withTimeout(timeout) + # need this check for pingDelat == 0 because there may be a conn error before timeout + if timedOut or pingDelay == 0.millis: + allPeers[peerId].retries += 1 + continue + + info "successfully pinged peer", peer=peerInfo, duration=pingDelay.millis + peer_ping.observe(pingDelay.millis) + + if allPeers[peerId].avgPingDuration == 0.millis: + allPeers[peerId].avgPingDuration = pingDelay + + # TODO: check why the calculation ends up losing precision + allPeers[peerId].avgPingDuration = int64((float64(allPeers[peerId].avgPingDuration.millis) * (AvgPingWindow - 1.0) + float64(pingDelay.millis)) / AvgPingWindow).millis + allPeers[peerId].lastPingDuration = pingDelay - # after connection, get supported protocols - let lp2pPeerStore = node.switch.peerStore - let nodeProtocols = lp2pPeerStore[ProtoBook][peer.get().peerId] - allPeers[peerId].supportedProtocols = nodeProtocols - allPeers[peerId].lastTimeConnected = currentTime + # after connection, get supported protocols + let lp2pPeerStore = node.switch.peerStore + let nodeProtocols = lp2pPeerStore[ProtoBook][peerInfo.peerId] + allPeers[peerId].supportedProtocols = nodeProtocols + allPeers[peerId].lastTimeConnected = currentTime - # after connection, get user-agent - let nodeUserAgent = lp2pPeerStore[AgentBook][peer.get().peerId] - allPeers[peerId].userAgent = nodeUserAgent + # after connection, get user-agent + let nodeUserAgent = lp2pPeerStore[AgentBook][peerInfo.peerId] + allPeers[peerId].userAgent = nodeUserAgent - # store avaiable protocols in the network - for protocol in nodeProtocols: - if not allProtocols.hasKey(protocol): - allProtocols[protocol] = 0 - allProtocols[protocol] += 1 + # store avaiable protocols in the network + for protocol in nodeProtocols: + if not allProtocols.hasKey(protocol): + allProtocols[protocol] = 0 + allProtocols[protocol] += 1 - # store available user-agents in the network - if not allAgentStrings.hasKey(nodeUserAgent): - allAgentStrings[nodeUserAgent] = 0 - allAgentStrings[nodeUserAgent] += 1 + # store available user-agents in the network + if not allAgentStrings.hasKey(nodeUserAgent): + allAgentStrings[nodeUserAgent] = 0 + allAgentStrings[nodeUserAgent] += 1 - debug "connected to peer", peer=allPeers[customPeerInfo.peerId] + debug "connected to peer", peer=allPeers[customPeerInfo.peerId] + info "number of newly discovered peers", amount=newPeers # inform the total connections that we did in this round let nOfOkConnections = allProtocols.len() info "number of successful connections", amount=nOfOkConnections @@ -412,6 +454,7 @@ when isMainModule: let (node, discv5) = nodeRes.get() waitFor node.mountRelay() + waitFor node.mountLibp2pPing() # Subscribe the node to the default pubsubtopic, to count messages subscribeAndHandleMessages(node, DefaultPubsubTopic, msgPerContentTopic) diff --git a/apps/networkmonitor/networkmonitor_config.nim b/apps/networkmonitor/networkmonitor_config.nim index b29f5b8235..769c2264fb 100644 --- a/apps/networkmonitor/networkmonitor_config.nim +++ b/apps/networkmonitor/networkmonitor_config.nim @@ -11,7 +11,7 @@ type NetworkMonitorConf* = object logLevel* {. desc: "Sets the log level", - defaultValue: LogLevel.DEBUG, + defaultValue: LogLevel.INFO, name: "log-level", abbr: "l" .}: LogLevel diff --git a/apps/networkmonitor/networkmonitor_metrics.nim b/apps/networkmonitor/networkmonitor_metrics.nim index a136ab1093..e5905ba464 100644 --- a/apps/networkmonitor/networkmonitor_metrics.nim +++ b/apps/networkmonitor/networkmonitor_metrics.nim @@ -37,10 +37,15 @@ declarePublicGauge peer_user_agents, "Number of peers with each user agent", labels = ["user_agent"] +declarePublicHistogram peer_ping, + "Histogram tracking ping durations for discovered peers", + buckets = [100.0, 200.0, 300.0, 400.0, 500.0, 600.0, 700.0, 800.0, 900.0, 1000.0, 2000.0, Inf] + type CustomPeerInfo* = object # populated after discovery - lastTimeDiscovered*: string + lastTimeDiscovered*: int64 + discovered*: int64 peerId*: string enr*: string ip*: string @@ -49,9 +54,12 @@ type city*: string # only after ok connection - lastTimeConnected*: string + lastTimeConnected*: int64 + retries*: int64 supportedProtocols*: seq[string] userAgent*: string + lastPingDuration*: Duration + avgPingDuration*: Duration # only after a ok/nok connection connError*: string From 7a376f59c85c59494ad2ac609801e495a207c737 Mon Sep 17 00:00:00 2001 From: Ivan Folgueira Bande <128452529+Ivansete-status@users.noreply.github.com> Date: Tue, 26 Sep 2023 10:11:38 +0200 Subject: [PATCH 046/274] chore: Adding -d:postgres flag when creating a Docker image for release and PRs (#2076) --- .github/workflows/container-image.yml | 2 +- .github/workflows/pre-release.yml | 3 ++- .github/workflows/release-assets.yml | 2 +- ci/Jenkinsfile.prs | 1 + ci/Jenkinsfile.release | 1 + 5 files changed, 6 insertions(+), 3 deletions(-) diff --git a/.github/workflows/container-image.yml b/.github/workflows/container-image.yml index f609e43711..d8de9e2542 100644 --- a/.github/workflows/container-image.yml +++ b/.github/workflows/container-image.yml @@ -48,7 +48,7 @@ jobs: id: build run: | - make -j${NPROC} V=1 QUICK_AND_DIRTY_COMPILER=1 NIMFLAGS="-d:disableMarchNative" wakunode2 + make -j${NPROC} V=1 QUICK_AND_DIRTY_COMPILER=1 NIMFLAGS="-d:disableMarchNative -d:postgres" wakunode2 SHORT_REF=$(git rev-parse --short HEAD) diff --git a/.github/workflows/pre-release.yml b/.github/workflows/pre-release.yml index 81706c9db2..02293aa00c 100644 --- a/.github/workflows/pre-release.yml +++ b/.github/workflows/pre-release.yml @@ -66,7 +66,8 @@ jobs: make QUICK_AND_DIRTY_COMPILER=1 V=1 CI=false NIMFLAGS="-d:disableMarchNative --os:${OS} --cpu:${{matrix.arch}}" \ update - make QUICK_AND_DIRTY_COMPILER=1 V=1 CI=false NIMFLAGS="-d:disableMarchNative --os:${OS} --cpu:${{matrix.arch}}" \ + make QUICK_AND_DIRTY_COMPILER=1 V=1 CI=false\ + NIMFLAGS="-d:disableMarchNative --os:${OS} --cpu:${{matrix.arch}} -d:postgres" \ wakunode2\ chat2\ tools diff --git a/.github/workflows/release-assets.yml b/.github/workflows/release-assets.yml index 0b75519e47..eafd04e217 100644 --- a/.github/workflows/release-assets.yml +++ b/.github/workflows/release-assets.yml @@ -53,7 +53,7 @@ jobs: OS=$([[ "${{runner.os}}" == "macOS" ]] && echo "macosx" || echo "linux") make -j${NPROC} NIMFLAGS="--parallelBuild:${NPROC} -d:disableMarchNative --os:${OS} --cpu:${{matrix.arch}}" V=1 update - make -j${NPROC} NIMFLAGS="--parallelBuild:${NPROC} -d:disableMarchNative --os:${OS} --cpu:${{matrix.arch}}" CI=false wakunode2 + make -j${NPROC} NIMFLAGS="--parallelBuild:${NPROC} -d:disableMarchNative --os:${OS} --cpu:${{matrix.arch}} -d:postgres" CI=false wakunode2 make -j${NPROC} NIMFLAGS="--parallelBuild:${NPROC} -d:disableMarchNative --os:${OS} --cpu:${{matrix.arch}}" CI=false chat2 tar -cvzf ${{steps.vars.outputs.nwaku}} ./build/ diff --git a/ci/Jenkinsfile.prs b/ci/Jenkinsfile.prs index 1a0583f90a..fccb94d24c 100644 --- a/ci/Jenkinsfile.prs +++ b/ci/Jenkinsfile.prs @@ -12,6 +12,7 @@ pipeline { '-d:insecure', '-d:disableMarchNative', '--parallelBuild:6', + '-d:postgres', ].join(' ') ) string( diff --git a/ci/Jenkinsfile.release b/ci/Jenkinsfile.release index 819de1a166..59cceb50f6 100644 --- a/ci/Jenkinsfile.release +++ b/ci/Jenkinsfile.release @@ -34,6 +34,7 @@ pipeline { '-d:disableMarchNative', '-d:chronicles_colors:none', '-d:insecure', + '-d:postgres', ].join(' ') ) string( From d178105d9fdf5c261e79ebb1c7fbcb78bfc88e0f Mon Sep 17 00:00:00 2001 From: Simon-Pierre Vivier Date: Tue, 26 Sep 2023 07:30:55 -0400 Subject: [PATCH 047/274] fix: filter discv5 bootstrap nodes by shards (#2073) --- waku/waku_discv5.nim | 32 ++++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/waku/waku_discv5.nim b/waku/waku_discv5.nim index 52bf267b8e..efcaa02143 100644 --- a/waku/waku_discv5.nim +++ b/waku/waku_discv5.nim @@ -4,7 +4,7 @@ else: {.push raises: [].} import - std/[sequtils, strutils, options, sugar, sets], + std/[sequtils, strutils, options, sets], stew/results, stew/shims/net, chronos, @@ -42,7 +42,7 @@ type WakuDiscoveryV5Config* = object ## Protocol -type WakuDiscv5Predicate* = proc(record: waku_enr.Record): bool {.closure, gcsafe.} +type WakuDiscv5Predicate* = proc(record: waku_enr.Record): bool {.closure, gcsafe, raises: [].} type WakuDiscoveryV5* = ref object conf: WakuDiscoveryV5Config @@ -74,14 +74,32 @@ proc shardingPredicate*(record: Record): Option[WakuDiscv5Predicate] = return some(predicate) -proc new*(T: type WakuDiscoveryV5, rng: ref HmacDrbgContext, conf: WakuDiscoveryV5Config, record: Option[waku_enr.Record]): T = +proc new*( + T: type WakuDiscoveryV5, + rng: ref HmacDrbgContext, + conf: WakuDiscoveryV5Config, + record: Option[waku_enr.Record] + ): T = + let shardPredOp = + if record.isSome(): shardingPredicate(record.get()) + else: none(WakuDiscv5Predicate) + + var bootstrapRecords = conf.bootstrapRecords + + # Remove bootstrap nodes with which we don't share shards. + if shardPredOp.isSome(): + bootstrapRecords.keepIf(shardPredOp.get()) + + if conf.bootstrapRecords.len > 0 and bootstrapRecords.len == 0: + warn "No discv5 bootstrap nodes share this node configured shards" + let protocol = newProtocol( rng = rng, config = conf.discv5Config.get(protocol.defaultDiscoveryConfig), bindPort = conf.port, bindIp = conf.address, privKey = conf.privateKey, - bootstrapRecords = conf.bootstrapRecords, + bootstrapRecords = bootstrapRecords, enrAutoUpdate = conf.autoupdateRecord, previousRecord = record, enrIp = none(ValidIpAddress), @@ -89,12 +107,6 @@ proc new*(T: type WakuDiscoveryV5, rng: ref HmacDrbgContext, conf: WakuDiscovery enrUdpPort = none(Port), ) - let shardPredOp = - if record.isSome(): - shardingPredicate(record.get()) - else: - none(WakuDiscv5Predicate) - WakuDiscoveryV5(conf: conf, protocol: protocol, listening: false, predicate: shardPredOp) proc new*(T: type WakuDiscoveryV5, From 1763b1efa128b80f9a53cbf1b22ee061aee1d300 Mon Sep 17 00:00:00 2001 From: Simon-Pierre Vivier Date: Tue, 26 Sep 2023 07:33:52 -0400 Subject: [PATCH 048/274] feat: Autosharding API for RELAY subscriptions (#1983) --- apps/chat2/chat2.nim | 5 +- apps/chat2bridge/chat2bridge.nim | 8 +- apps/networkmonitor/networkmonitor.nim | 2 +- apps/wakunode2/app.nim | 63 ++-- examples/publisher.nim | 2 +- examples/subscriber.nim | 2 +- tests/test_peer_exchange.nim | 6 +- tests/test_waku_discv5.nim | 18 +- tests/test_wakunode.nim | 4 +- tests/test_wakunode_lightpush.nim | 2 +- tests/waku_relay/test_waku_relay.nim | 18 +- tests/waku_relay/test_wakunode_relay.nim | 79 +++-- .../test_wakunode_rln_relay.nim | 34 +-- tests/wakunode2/test_validators.nim | 22 +- tests/wakunode_jsonrpc/test_jsonrpc_relay.nim | 96 +++++-- tests/wakunode_rest/test_rest_filter.nim | 5 +- tests/wakunode_rest/test_rest_lightpush.nim | 6 +- tests/wakunode_rest/test_rest_relay.nim | 270 +++++++++++++++--- waku/node/waku_node.nim | 112 +++++--- waku/waku_api/cache_handlers.nim | 23 ++ waku/waku_api/jsonrpc/relay/callsigs.nim | 5 + waku/waku_api/jsonrpc/relay/handlers.nim | 186 +++++++++--- waku/waku_api/rest/relay/client.nim | 5 +- waku/waku_api/rest/relay/handlers.nim | 169 +++++++++-- waku/waku_api/rest/relay/topic_cache.nim | 33 --- waku/waku_api/rest/relay/types.nim | 4 +- waku/waku_core/topics.nim | 8 +- waku/waku_discv5.nim | 9 +- waku/waku_relay/protocol.nim | 38 ++- 29 files changed, 906 insertions(+), 328 deletions(-) create mode 100644 waku/waku_api/cache_handlers.nim delete mode 100644 waku/waku_api/rest/relay/topic_cache.nim diff --git a/apps/chat2/chat2.nim b/apps/chat2/chat2.nim index 2d0764392d..f0c4b433b1 100644 --- a/apps/chat2/chat2.nim +++ b/apps/chat2/chat2.nim @@ -212,7 +212,7 @@ proc publish(c: Chat, line: string) = # Attempt lightpush asyncSpawn c.node.lightpushPublish(some(DefaultPubsubTopic), message) else: - asyncSpawn c.node.publish(DefaultPubsubTopic, message) + asyncSpawn c.node.publish(some(DefaultPubsubTopic), message) # TODO This should read or be subscribe handler subscribe proc readAndPrint(c: Chat) {.async.} = @@ -490,8 +490,7 @@ proc processInput(rfd: AsyncFD, rng: ref HmacDrbgContext) {.async.} = if msg.contentTopic == chat.contentTopic: chat.printReceivedMessage(msg) - let topic = DefaultPubsubTopic - node.subscribe(topic, handler) + node.subscribe((kind: PubsubSub, topic: DefaultPubsubTopic), some(handler)) if conf.rlnRelay: info "WakuRLNRelay is enabled" diff --git a/apps/chat2bridge/chat2bridge.nim b/apps/chat2bridge/chat2bridge.nim index 700ef5a434..af90dbbfc2 100644 --- a/apps/chat2bridge/chat2bridge.nim +++ b/apps/chat2bridge/chat2bridge.nim @@ -95,7 +95,7 @@ proc toChat2(cmb: Chat2MatterBridge, jsonNode: JsonNode) {.async.} = chat2_mb_transfers.inc(labelValues = ["mb_to_chat2"]) - await cmb.nodev2.publish(DefaultPubsubTopic, msg) + await cmb.nodev2.publish(some(DefaultPubsubTopic), msg) proc toMatterbridge(cmb: Chat2MatterBridge, msg: WakuMessage) {.gcsafe, raises: [Exception].} = if cmb.seen.containsOrAdd(msg.payload.hash()): @@ -204,7 +204,7 @@ proc start*(cmb: Chat2MatterBridge) {.async.} = trace "Bridging message from Chat2 to Matterbridge", msg=msg cmb.toMatterbridge(msg) - cmb.nodev2.subscribe(DefaultPubsubTopic, relayHandler) + cmb.nodev2.subscribe((kind: PubsubSub, topic: DefaultPubsubTopic), some(relayHandler)) proc stop*(cmb: Chat2MatterBridge) {.async.} = info "Stopping Chat2MatterBridge" @@ -229,8 +229,8 @@ when isMainModule: # Install enabled API handlers: if conf.relay: - let topicCache = relay_api.MessageCache.init(capacity=30) - installRelayApiHandlers(node, rpcServer, topicCache) + let cache = MessageCache[string].init(capacity=30) + installRelayApiHandlers(node, rpcServer, cache) if conf.filter: let messageCache = filter_api.MessageCache.init(capacity=30) diff --git a/apps/networkmonitor/networkmonitor.nim b/apps/networkmonitor/networkmonitor.nim index fc0787543d..3af9c5cee1 100644 --- a/apps/networkmonitor/networkmonitor.nim +++ b/apps/networkmonitor/networkmonitor.nim @@ -402,7 +402,7 @@ proc subscribeAndHandleMessages(node: WakuNode, else: msgPerContentTopic[msg.contentTopic] = 1 - node.subscribe(pubsubTopic, handler) + node.subscribe((kind: PubsubSub, topic: pubsubTopic), some(handler)) when isMainModule: # known issue: confutils.nim(775, 17) Error: can raise an unlisted exception: ref IOError diff --git a/apps/wakunode2/app.nim b/apps/wakunode2/app.nim index 3105991bd2..3b458cc917 100644 --- a/apps/wakunode2/app.nim +++ b/apps/wakunode2/app.nim @@ -28,25 +28,11 @@ import ../../waku/node/peer_manager, ../../waku/node/peer_manager/peer_store/waku_peer_storage, ../../waku/node/peer_manager/peer_store/migrations as peer_store_sqlite_migrations, - ../../waku/waku_archive, - ../../waku/waku_dnsdisc, - ../../waku/waku_enr, - ../../waku/waku_discv5, - ../../waku/waku_peer_exchange, - ../../waku/waku_rln_relay, - ../../waku/waku_store, - ../../waku/waku_lightpush, - ../../waku/waku_filter, - ../../waku/waku_filter_v2, - ./wakunode2_validator_signed, - ./internal_config, - ./external_config -import ../../waku/waku_api/message_cache, + ../../waku/waku_api/cache_handlers, ../../waku/waku_api/rest/server, ../../waku/waku_api/rest/debug/handlers as rest_debug_api, ../../waku/waku_api/rest/relay/handlers as rest_relay_api, - ../../waku/waku_api/rest/relay/topic_cache, ../../waku/waku_api/rest/filter/legacy_handlers as rest_legacy_filter_api, ../../waku/waku_api/rest/filter/handlers as rest_filter_api, ../../waku/waku_api/rest/lightpush/handlers as rest_lightpush_api, @@ -56,7 +42,20 @@ import ../../waku/waku_api/jsonrpc/debug/handlers as rpc_debug_api, ../../waku/waku_api/jsonrpc/filter/handlers as rpc_filter_api, ../../waku/waku_api/jsonrpc/relay/handlers as rpc_relay_api, - ../../waku/waku_api/jsonrpc/store/handlers as rpc_store_api + ../../waku/waku_api/jsonrpc/store/handlers as rpc_store_api, + ../../waku/waku_archive, + ../../waku/waku_dnsdisc, + ../../waku/waku_enr, + ../../waku/waku_discv5, + ../../waku/waku_peer_exchange, + ../../waku/waku_rln_relay, + ../../waku/waku_store, + ../../waku/waku_lightpush, + ../../waku/waku_filter, + ../../waku/waku_filter_v2, + ./wakunode2_validator_signed, + ./internal_config, + ./external_config logScope: topics = "wakunode app" @@ -576,8 +575,20 @@ proc startRestServer(app: App, address: ValidIpAddress, port: Port, conf: WakuNo ## Relay REST API if conf.relay: - let relayCache = TopicCache.init(capacity=conf.restRelayCacheCapacity) - installRelayApiHandlers(server.router, app.node, relayCache) + let cache = MessageCache[string].init(capacity=conf.restRelayCacheCapacity) + + let handler = messageCacheHandler(cache) + let autoHandler = autoMessageCacheHandler(cache) + + for pubsubTopic in conf.pubsubTopics: + cache.subscribe(pubsubTopic) + app.node.subscribe((kind: PubsubSub, topic: pubsubTopic), some(handler)) + + for contentTopic in conf.contentTopics: + cache.subscribe(contentTopic) + app.node.subscribe((kind: ContentSub, topic: contentTopic), some(autoHandler)) + + installRelayApiHandlers(server.router, app.node, cache) ## Filter REST API if conf.filter: @@ -610,8 +621,20 @@ proc startRpcServer(app: App, address: ValidIpAddress, port: Port, conf: WakuNod installDebugApiHandlers(app.node, server) if conf.relay: - let relayMessageCache = rpc_relay_api.MessageCache.init(capacity=30) - installRelayApiHandlers(app.node, server, relayMessageCache) + let cache = MessageCache[string].init(capacity=30) + + let handler = messageCacheHandler(cache) + let autoHandler = autoMessageCacheHandler(cache) + + for pubsubTopic in conf.pubsubTopics: + cache.subscribe(pubsubTopic) + app.node.subscribe((kind: PubsubSub, topic: pubsubTopic), some(handler)) + + for contentTopic in conf.contentTopics: + cache.subscribe(contentTopic) + app.node.subscribe((kind: ContentSub, topic: contentTopic), some(autoHandler)) + + installRelayApiHandlers(app.node, server, cache) if conf.filternode != "": let filterMessageCache = rpc_filter_api.MessageCache.init(capacity=30) diff --git a/examples/publisher.nim b/examples/publisher.nim index 1c2e9d1453..da18d4e7e1 100644 --- a/examples/publisher.nim +++ b/examples/publisher.nim @@ -99,7 +99,7 @@ proc setupAndPublish(rng: ref HmacDrbgContext) {.async.} = contentTopic: contentTopic, # content topic to publish to ephemeral: true, # tell store nodes to not store it timestamp: now()) # current timestamp - await node.publish(pubSubTopic, message) + await node.publish(some(pubSubTopic), message) notice "published message", text = text, timestamp = message.timestamp, psTopic = pubSubTopic, contentTopic = contentTopic await sleepAsync(5000) diff --git a/examples/subscriber.nim b/examples/subscriber.nim index 73e89b2376..946b4809bf 100644 --- a/examples/subscriber.nim +++ b/examples/subscriber.nim @@ -94,7 +94,7 @@ proc setupAndSubscribe(rng: ref HmacDrbgContext) {.async.} = pubsubTopic=pubsubTopic, contentTopic=msg.contentTopic, timestamp=msg.timestamp - node.subscribe(pubSubTopic, handler) + node.subscribe((kind: PubsubSub, topic: pubsubTopic), some(handler)) when isMainModule: let rng = crypto.newRng() diff --git a/tests/test_peer_exchange.nim b/tests/test_peer_exchange.nim index 95cb75ee46..a5b52f84f7 100644 --- a/tests/test_peer_exchange.nim +++ b/tests/test_peer_exchange.nim @@ -54,9 +54,9 @@ procSuite "Peer Exchange": peerExchangeHandler = handlePeerExchange emptyHandler = ignorePeerExchange - await node1.mountRelay(topics = @[DefaultPubsubTopic], peerExchangeHandler = some(emptyHandler)) - await node2.mountRelay(topics = @[DefaultPubsubTopic], peerExchangeHandler = some(emptyHandler)) - await node3.mountRelay(topics = @[DefaultPubsubTopic], peerExchangeHandler = some(peerExchangeHandler)) + await node1.mountRelay(@[DefaultPubsubTopic], some(emptyHandler)) + await node2.mountRelay(@[DefaultPubsubTopic], some(emptyHandler)) + await node3.mountRelay(@[DefaultPubsubTopic], some(peerExchangeHandler)) # Ensure that node1 prunes all peers after the first connection node1.wakuRelay.parameters.dHigh = 1 diff --git a/tests/test_waku_discv5.nim b/tests/test_waku_discv5.nim index a99380d99c..dd9e4fd046 100644 --- a/tests/test_waku_discv5.nim +++ b/tests/test_waku_discv5.nim @@ -415,9 +415,9 @@ procSuite "Waku Discovery v5": asyncSpawn node.subscriptionsListener(queue) ## Then - queue.emit(SubscriptionEvent(kind: PubsubSub, pubsubSub: shard1)) - queue.emit(SubscriptionEvent(kind: PubsubSub, pubsubSub: shard2)) - queue.emit(SubscriptionEvent(kind: PubsubSub, pubsubSub: shard3)) + queue.emit((kind: PubsubSub, topic: shard1)) + queue.emit((kind: PubsubSub, topic: shard2)) + queue.emit((kind: PubsubSub, topic: shard3)) await sleepAsync(1.seconds) @@ -426,9 +426,9 @@ procSuite "Waku Discovery v5": node.protocol.localNode.record.containsShard(shard2) == true node.protocol.localNode.record.containsShard(shard3) == true - queue.emit(SubscriptionEvent(kind: PubsubSub, pubsubSub: shard1)) - queue.emit(SubscriptionEvent(kind: PubsubSub, pubsubSub: shard2)) - queue.emit(SubscriptionEvent(kind: PubsubSub, pubsubSub: shard3)) + queue.emit((kind: PubsubSub, topic: shard1)) + queue.emit((kind: PubsubSub, topic: shard2)) + queue.emit((kind: PubsubSub, topic: shard3)) await sleepAsync(1.seconds) @@ -437,9 +437,9 @@ procSuite "Waku Discovery v5": node.protocol.localNode.record.containsShard(shard2) == true node.protocol.localNode.record.containsShard(shard3) == true - queue.emit(SubscriptionEvent(kind: PubsubUnsub, pubsubUnsub: shard1)) - queue.emit(SubscriptionEvent(kind: PubsubUnsub, pubsubUnsub: shard2)) - queue.emit(SubscriptionEvent(kind: PubsubUnsub, pubsubUnsub: shard3)) + queue.emit((kind: PubsubUnsub, topic: shard1)) + queue.emit((kind: PubsubUnsub, topic: shard2)) + queue.emit((kind: PubsubUnsub, topic: shard3)) await sleepAsync(1.seconds) diff --git a/tests/test_wakunode.nim b/tests/test_wakunode.nim index 5efeb8d3c0..fd6f21808e 100644 --- a/tests/test_wakunode.nim +++ b/tests/test_wakunode.nim @@ -67,10 +67,10 @@ suite "WakuNode": msg.payload == payload completionFut.complete(true) - node2.subscribe(pubSubTopic, relayHandler) + node2.subscribe((kind: PubsubSub, topic: pubsubTopic), some(relayHandler)) await sleepAsync(2000.millis) - await node1.publish(pubSubTopic, message) + await node1.publish(some(pubSubTopic), message) await sleepAsync(2000.millis) check: diff --git a/tests/test_wakunode_lightpush.nim b/tests/test_wakunode_lightpush.nim index 7a15175c1c..7208c587ba 100644 --- a/tests/test_wakunode_lightpush.nim +++ b/tests/test_wakunode_lightpush.nim @@ -49,7 +49,7 @@ suite "WakuNode - Lightpush": topic == DefaultPubsubTopic msg == message completionFutRelay.complete(true) - destNode.subscribe(DefaultPubsubTopic, relayHandler) + destNode.subscribe((kind: PubsubSub, topic: DefaultPubsubTopic), some(relayHandler)) # Wait for subscription to take effect await sleepAsync(100.millis) diff --git a/tests/waku_relay/test_waku_relay.nim b/tests/waku_relay/test_waku_relay.nim index 188ddf6075..62e094bd1e 100644 --- a/tests/waku_relay/test_waku_relay.nim +++ b/tests/waku_relay/test_waku_relay.nim @@ -46,8 +46,8 @@ suite "Waku Relay": networkB = "test-network2" ## when - nodeA.subscribe(networkA, noopRawHandler()) - nodeA.subscribe(networkB, noopRawHandler()) + discard nodeA.subscribe(networkA, noopRawHandler()) + discard nodeA.subscribe(networkB, noopRawHandler()) ## Then check: @@ -73,9 +73,9 @@ suite "Waku Relay": networkB = "test-network2" networkC = "test-network3" - nodeA.subscribe(networkA, noopRawHandler()) - nodeA.subscribe(networkB, noopRawHandler()) - nodeA.subscribe(networkC, noopRawHandler()) + discard nodeA.subscribe(networkA, noopRawHandler()) + discard nodeA.subscribe(networkB, noopRawHandler()) + discard nodeA.subscribe(networkC, noopRawHandler()) let topics = toSeq(nodeA.subscribedTopics) require: @@ -85,7 +85,7 @@ suite "Waku Relay": topics.contains(networkC) ## When - nodeA.unsubscribe(networkA) + nodeA.unsubscribeAll(networkA) ## Then check: @@ -129,14 +129,14 @@ suite "Waku Relay": proc srcSubsHandler(topic: PubsubTopic, message: WakuMessage) {.async, gcsafe.} = srcSubsFut.complete((topic, message)) - srcNode.subscribe(networkTopic, srcSubsHandler) + discard srcNode.subscribe(networkTopic, srcSubsHandler) # Subscription let dstSubsFut = newFuture[(PubsubTopic, WakuMessage)]() proc dstSubsHandler(topic: PubsubTopic, message: WakuMessage) {.async, gcsafe.} = dstSubsFut.complete((topic, message)) - dstNode.subscribe(networkTopic, dstSubsHandler) + discard dstNode.subscribe(networkTopic, dstSubsHandler) await sleepAsync(500.millis) @@ -196,7 +196,7 @@ suite "Waku Relay": proc dstSubsHandler(topic: PubsubTopic, message: WakuMessage) {.async, gcsafe.} = dstSubsFut.complete((topic, message)) - dstNode.subscribe(networkTopic, dstSubsHandler) + discard dstNode.subscribe(networkTopic, dstSubsHandler) await sleepAsync(500.millis) diff --git a/tests/waku_relay/test_wakunode_relay.nim b/tests/waku_relay/test_wakunode_relay.nim index a59551457c..db18fc5373 100644 --- a/tests/waku_relay/test_wakunode_relay.nim +++ b/tests/waku_relay/test_wakunode_relay.nim @@ -92,10 +92,10 @@ suite "WakuNode - Relay": msg.payload == payload completionFut.complete(true) - node3.subscribe(pubSubTopic, relayHandler) + node3.subscribe((kind: PubsubSub, topic: pubsubTopic), some(relayHandler)) await sleepAsync(500.millis) - await node1.publish(pubSubTopic, message) + await node1.publish(some(pubSubTopic), message) ## Then check: @@ -173,14 +173,14 @@ suite "WakuNode - Relay": # relay handler is called completionFut.complete(true) - node3.subscribe(pubSubTopic, relayHandler) + node3.subscribe((kind: PubsubSub, topic: pubsubTopic), some(relayHandler)) await sleepAsync(500.millis) - await node1.publish(pubSubTopic, message1) + await node1.publish(some(pubSubTopic), message1) await sleepAsync(500.millis) # message2 never gets relayed because of the validator - await node1.publish(pubSubTopic, message2) + await node1.publish(some(pubSubTopic), message2) await sleepAsync(500.millis) check: @@ -207,7 +207,7 @@ suite "WakuNode - Relay": connOk == true # Node 1 subscribes to topic - nodes[1].subscribe(DefaultPubsubTopic) + nodes[1].subscribe((kind: PubsubSub, topic: DefaultPubsubTopic)) await sleepAsync(500.millis) # Node 0 publishes 5 messages not compliant with WakuMessage (aka random bytes) @@ -254,10 +254,10 @@ suite "WakuNode - Relay": msg.payload == payload completionFut.complete(true) - node1.subscribe(pubSubTopic, relayHandler) + node1.subscribe((kind: PubsubSub, topic: pubsubTopic), some(relayHandler)) await sleepAsync(500.millis) - await node2.publish(pubSubTopic, message) + await node2.publish(some(pubSubTopic), message) await sleepAsync(500.millis) @@ -295,10 +295,10 @@ suite "WakuNode - Relay": msg.payload == payload completionFut.complete(true) - node1.subscribe(pubSubTopic, relayHandler) + node1.subscribe((kind: PubsubSub, topic: pubsubTopic), some(relayHandler)) await sleepAsync(500.millis) - await node2.publish(pubSubTopic, message) + await node2.publish(some(pubSubTopic), message) await sleepAsync(500.millis) @@ -340,10 +340,10 @@ suite "WakuNode - Relay": msg.payload == payload completionFut.complete(true) - node1.subscribe(pubSubTopic, relayHandler) + node1.subscribe((kind: PubsubSub, topic: pubsubTopic), some(relayHandler)) await sleepAsync(500.millis) - await node2.publish(pubSubTopic, message) + await node2.publish(some(pubSubTopic), message) await sleepAsync(500.millis) check: @@ -380,10 +380,10 @@ suite "WakuNode - Relay": msg.payload == payload completionFut.complete(true) - node1.subscribe(pubSubTopic, relayHandler) + node1.subscribe((kind: PubsubSub, topic: pubsubTopic), some(relayHandler)) await sleepAsync(500.millis) - await node2.publish(pubSubTopic, message) + await node2.publish(some(pubSubTopic), message) await sleepAsync(500.millis) check: @@ -420,10 +420,10 @@ suite "WakuNode - Relay": msg.payload == payload completionFut.complete(true) - node1.subscribe(pubSubTopic, relayHandler) + node1.subscribe((kind: PubsubSub, topic: pubsubTopic), some(relayHandler)) await sleepAsync(500.millis) - await node2.publish(pubSubTopic, message) + await node2.publish(some(pubSubTopic), message) await sleepAsync(500.millis) @@ -440,7 +440,7 @@ suite "WakuNode - Relay": # subscribe all nodes to a topic let topic = "topic" - for node in nodes: node.wakuRelay.subscribe(topic, nil) + for node in nodes: discard node.wakuRelay.subscribe(topic, nil) await sleepAsync(500.millis) # connect nodes in full mesh @@ -482,3 +482,48 @@ suite "WakuNode - Relay": # Stop all nodes await allFutures(nodes.mapIt(it.stop())) + + asyncTest "Unsubscribe keep the subscription if other content topics also use the shard": + ## Setup + let + nodeKey = generateSecp256k1Key() + node = newTestWakuNode(nodeKey, ValidIpAddress.init("0.0.0.0"), Port(0)) + + await node.start() + await node.mountRelay() + + ## Given + let + shard = "/waku/2/rs/1/1" + contentTopicA = DefaultContentTopic + contentTopicB = ContentTopic("/waku/2/default-content1/proto") + contentTopicC = ContentTopic("/waku/2/default-content2/proto") + handler: WakuRelayHandler = + proc( + pubsubTopic: PubsubTopic, + message: WakuMessage + ): Future[void] {.gcsafe, raises: [Defect].} = + discard pubsubTopic + discard message + + assert shard == getShard(contentTopicA).expect("Valid Topic"), "topic must use the same shard" + assert shard == getShard(contentTopicB).expect("Valid Topic"), "topic must use the same shard" + assert shard == getShard(contentTopicC).expect("Valid Topic"), "topic must use the same shard" + + ## When + node.subscribe((kind: ContentSub, topic: contentTopicA), some(handler)) + node.subscribe((kind: ContentSub, topic: contentTopicB), some(handler)) + node.subscribe((kind: ContentSub, topic: contentTopicC), some(handler)) + + ## Then + node.unsubscribe((kind: ContentUnsub, topic: contentTopicB)) + check node.wakuRelay.isSubscribed(shard) + + node.unsubscribe((kind: ContentUnsub, topic: contentTopicA)) + check node.wakuRelay.isSubscribed(shard) + + node.unsubscribe((kind: ContentUnsub, topic: contentTopicC)) + check not node.wakuRelay.isSubscribed(shard) + + ## Cleanup + await node.stop() \ No newline at end of file diff --git a/tests/waku_rln_relay/test_wakunode_rln_relay.nim b/tests/waku_rln_relay/test_wakunode_rln_relay.nim index 4e9ffa3a04..dac93782b1 100644 --- a/tests/waku_rln_relay/test_wakunode_rln_relay.nim +++ b/tests/waku_rln_relay/test_wakunode_rln_relay.nim @@ -77,7 +77,7 @@ procSuite "WakuNode - RLN relay": completionFut.complete(true) # mount the relay handler - node3.subscribe(DefaultPubsubTopic, relayHandler) + node3.subscribe((kind: PubsubSub, topic: DefaultPubsubTopic), some(relayHandler)) await sleepAsync(2000.millis) # prepare the message payload @@ -91,7 +91,7 @@ procSuite "WakuNode - RLN relay": ## node1 publishes a message with a rate limit proof, the message is then relayed to node2 which in turn ## verifies the rate limit proof of the message and relays the message to node3 ## verification at node2 occurs inside a topic validator which is installed as part of the waku-rln-relay mount proc - await node1.publish(DefaultPubsubTopic, message) + await node1.publish(some(DefaultPubsubTopic), message) await sleepAsync(2000.millis) @@ -141,8 +141,8 @@ procSuite "WakuNode - RLN relay": rxMessagesTopic2 = rxMessagesTopic2 + 1 # mount the relay handlers - nodes[2].subscribe(pubsubTopics[0], relayHandler) - nodes[2].subscribe(pubsubTopics[1], relayHandler) + nodes[2].subscribe((kind: PubsubSub, topic: pubsubTopics[0]), some(relayHandler)) + nodes[2].subscribe((kind: PubsubSub, topic: pubsubTopics[1]), some(relayHandler)) await sleepAsync(1000.millis) # generate some messages with rln proofs first. generating @@ -165,8 +165,8 @@ procSuite "WakuNode - RLN relay": # publish 3 messages from node[0] (last 2 are spam, window is 10 secs) # publish 3 messages from node[1] (last 2 are spam, window is 10 secs) - for msg in messages1: await nodes[0].publish(pubsubTopics[0], msg) - for msg in messages2: await nodes[1].publish(pubsubTopics[1], msg) + for msg in messages1: await nodes[0].publish(some(pubsubTopics[0]), msg) + for msg in messages2: await nodes[1].publish(some(pubsubTopics[1]), msg) # wait for gossip to propagate await sleepAsync(5000.millis) @@ -237,7 +237,7 @@ procSuite "WakuNode - RLN relay": completionFut.complete(true) # mount the relay handler - node3.subscribe(DefaultPubsubTopic, relayHandler) + node3.subscribe((kind: PubsubSub, topic: DefaultPubsubTopic), some(relayHandler)) await sleepAsync(2000.millis) # prepare the message payload @@ -266,7 +266,7 @@ procSuite "WakuNode - RLN relay": ## attempts to verify the rate limit proof and fails hence does not relay the message to node3, thus the relayHandler of node3 ## never gets called ## verification at node2 occurs inside a topic validator which is installed as part of the waku-rln-relay mount proc - await node1.publish(DefaultPubsubTopic, message) + await node1.publish(some(DefaultPubsubTopic), message) await sleepAsync(2000.millis) check: @@ -369,7 +369,7 @@ procSuite "WakuNode - RLN relay": # mount the relay handler for node3 - node3.subscribe(DefaultPubsubTopic, relayHandler) + node3.subscribe((kind: PubsubSub, topic: DefaultPubsubTopic), some(relayHandler)) await sleepAsync(2000.millis) ## node1 publishes and relays 4 messages to node2 @@ -378,10 +378,10 @@ procSuite "WakuNode - RLN relay": ## node2 should detect either of wm1 or wm2 as spam and not relay it ## node2 should relay wm3 to node3 ## node2 should not relay wm4 because it has no valid rln proof - await node1.publish(DefaultPubsubTopic, wm1) - await node1.publish(DefaultPubsubTopic, wm2) - await node1.publish(DefaultPubsubTopic, wm3) - await node1.publish(DefaultPubsubTopic, wm4) + await node1.publish(some(DefaultPubsubTopic), wm1) + await node1.publish(some(DefaultPubsubTopic), wm2) + await node1.publish(some(DefaultPubsubTopic), wm3) + await node1.publish(some(DefaultPubsubTopic), wm4) await sleepAsync(2000.millis) let @@ -471,14 +471,14 @@ procSuite "WakuNode - RLN relay": completionFut3.complete(true) # mount the relay handler for node2 - node2.subscribe(DefaultPubsubTopic, relayHandler) + node2.subscribe((kind: PubsubSub, topic: DefaultPubsubTopic), some(relayHandler)) await sleepAsync(2000.millis) - await node1.publish(DefaultPubsubTopic, wm1) + await node1.publish(some(DefaultPubsubTopic), wm1) await sleepAsync(10.seconds) - await node1.publish(DefaultPubsubTopic, wm2) + await node1.publish(some(DefaultPubsubTopic), wm2) await sleepAsync(10.seconds) - await node1.publish(DefaultPubsubTopic, wm3) + await node1.publish(some(DefaultPubsubTopic), wm3) let res1 = await completionFut1.withTimeout(10.seconds) diff --git a/tests/wakunode2/test_validators.nim b/tests/wakunode2/test_validators.nim index d282733587..c1c05a0e88 100644 --- a/tests/wakunode2/test_validators.nim +++ b/tests/wakunode2/test_validators.nim @@ -61,7 +61,7 @@ suite "WakuNode2 - Validators": msgReceived += 1 # Subscribe all nodes to the same topic/handler - for node in nodes: node.wakuRelay.subscribe(spamProtectedTopic, handler) + for node in nodes: discard node.wakuRelay.subscribe(spamProtectedTopic, handler) await sleepAsync(500.millis) # Each node publishes 10 signed messages @@ -74,7 +74,7 @@ suite "WakuNode2 - Validators": # Include signature msg.meta = secretKey.sign(SkMessage(spamProtectedTopic.msgHash(msg))).toRaw()[0..63] - await nodes[i].publish(spamProtectedTopic, msg) + await nodes[i].publish(some(spamProtectedTopic), msg) # Wait for gossip await sleepAsync(2.seconds) @@ -133,7 +133,7 @@ suite "WakuNode2 - Validators": await sleepAsync(500.millis) # Subscribe all nodes to the same topic/handler - for node in nodes: node.wakuRelay.subscribe(spamProtectedTopic, handler) + for node in nodes: discard node.wakuRelay.subscribe(spamProtectedTopic, handler) await sleepAsync(500.millis) # Each node sends 5 messages, signed but with a non-whitelisted key (total = 25) @@ -146,7 +146,7 @@ suite "WakuNode2 - Validators": # Sign the message with a wrong key msg.meta = wrongSecretKey.sign(SkMessage(spamProtectedTopic.msgHash(msg))).toRaw()[0..63] - await nodes[i].publish(spamProtectedTopic, msg) + await nodes[i].publish(some(spamProtectedTopic), msg) # Each node sends 5 messages that are not signed (total = 25) for i in 0..<5: @@ -154,7 +154,7 @@ suite "WakuNode2 - Validators": let unsignedMessage = WakuMessage( payload: urandom(1*(10^3)), contentTopic: spamProtectedTopic, version: 2, timestamp: now(), ephemeral: true) - await nodes[i].publish(spamProtectedTopic, unsignedMessage) + await nodes[i].publish(some(spamProtectedTopic), unsignedMessage) # Each node sends 5 messages that dont contain timestamp (total = 25) for i in 0..<5: @@ -162,7 +162,7 @@ suite "WakuNode2 - Validators": let unsignedMessage = WakuMessage( payload: urandom(1*(10^3)), contentTopic: spamProtectedTopic, version: 2, timestamp: 0, ephemeral: true) - await nodes[i].publish(spamProtectedTopic, unsignedMessage) + await nodes[i].publish(some(spamProtectedTopic), unsignedMessage) # Each node sends 5 messages way BEFORE than the current timestmap (total = 25) for i in 0..<5: @@ -171,7 +171,7 @@ suite "WakuNode2 - Validators": let unsignedMessage = WakuMessage( payload: urandom(1*(10^3)), contentTopic: spamProtectedTopic, version: 2, timestamp: beforeTimestamp, ephemeral: true) - await nodes[i].publish(spamProtectedTopic, unsignedMessage) + await nodes[i].publish(some(spamProtectedTopic), unsignedMessage) # Each node sends 5 messages way LATER than the current timestmap (total = 25) for i in 0..<5: @@ -180,7 +180,7 @@ suite "WakuNode2 - Validators": let unsignedMessage = WakuMessage( payload: urandom(1*(10^3)), contentTopic: spamProtectedTopic, version: 2, timestamp: afterTimestamp, ephemeral: true) - await nodes[i].publish(spamProtectedTopic, unsignedMessage) + await nodes[i].publish(some(spamProtectedTopic), unsignedMessage) # Wait for gossip await sleepAsync(4.seconds) @@ -227,7 +227,7 @@ suite "WakuNode2 - Validators": msgReceived += 1 # Subscribe all nodes to the same topic/handler - for node in nodes: node.wakuRelay.subscribe(spamProtectedTopic, handler) + for node in nodes: discard node.wakuRelay.subscribe(spamProtectedTopic, handler) await sleepAsync(500.millis) # Add signed message validator to all nodes. They will only route signed messages @@ -255,7 +255,7 @@ suite "WakuNode2 - Validators": let unsignedMessage = WakuMessage( payload: urandom(1*(10^3)), contentTopic: spamProtectedTopic, version: 2, timestamp: now(), ephemeral: true) - await nodes[0].publish(spamProtectedTopic, unsignedMessage) + await nodes[0].publish(some(spamProtectedTopic), unsignedMessage) # nodes[0] spams 50 wrongly signed messages (nodes[0] just knows of nodes[1]) for j in 0..<50: @@ -264,7 +264,7 @@ suite "WakuNode2 - Validators": version: 2, timestamp: now(), ephemeral: true) # Sign the message with a wrong key msg.meta = wrongSecretKey.sign(SkMessage(spamProtectedTopic.msgHash(msg))).toRaw()[0..63] - await nodes[0].publish(spamProtectedTopic, msg) + await nodes[0].publish(some(spamProtectedTopic), msg) # Wait for gossip await sleepAsync(2.seconds) diff --git a/tests/wakunode_jsonrpc/test_jsonrpc_relay.nim b/tests/wakunode_jsonrpc/test_jsonrpc_relay.nim index f54d7399c0..e99e2edaa8 100644 --- a/tests/wakunode_jsonrpc/test_jsonrpc_relay.nim +++ b/tests/wakunode_jsonrpc/test_jsonrpc_relay.nim @@ -22,10 +22,6 @@ import ../testlib/wakucore, ../testlib/wakunode -proc newTestMessageCache(): relay_api.MessageCache = - relay_api.MessageCache.init(capacity=30) - - suite "Waku v2 JSON-RPC API - Relay": asyncTest "subscribe and unsubscribe from topics": @@ -33,7 +29,7 @@ suite "Waku v2 JSON-RPC API - Relay": let node = newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0)) await node.start() - await node.mountRelay(topics = @[DefaultPubsubTopic]) + await node.mountRelay(@[]) # JSON-RPC server let @@ -41,7 +37,8 @@ suite "Waku v2 JSON-RPC API - Relay": ta = initTAddress(ValidIpAddress.init("0.0.0.0"), rpcPort) server = newRpcHttpServer([ta]) - installRelayApiHandlers(node, server, newTestMessageCache()) + let cache = MessageCache[string].init(capacity=30) + installRelayApiHandlers(node, server, cache) server.start() # JSON-RPC client @@ -67,16 +64,14 @@ suite "Waku v2 JSON-RPC API - Relay": subResp == true check: # Node is now subscribed to default + new topics - subTopics.len == 1 + newTopics.len - DefaultPubsubTopic in subTopics + subTopics.len == newTopics.len newTopics.allIt(it in subTopics) check: unsubResp == true check: # Node is now unsubscribed from new topics - unsubTopics.len == 1 - DefaultPubsubTopic in unsubTopics + unsubTopics.len == 0 newTopics.allIt(it notin unsubTopics) await server.stop() @@ -110,14 +105,14 @@ suite "Waku v2 JSON-RPC API - Relay": await srcNode.connectToNodes(@[dstNode.peerInfo.toRemotePeerInfo()]) - # RPC server (source node) let rpcPort = Port(8548) ta = initTAddress(ValidIpAddress.init("0.0.0.0"), rpcPort) server = newRpcHttpServer([ta]) - installRelayApiHandlers(srcNode, server, newTestMessageCache()) + let cache = MessageCache[string].init(capacity=30) + installRelayApiHandlers(srcNode, server, cache) server.start() # JSON-RPC client @@ -131,7 +126,7 @@ suite "Waku v2 JSON-RPC API - Relay": proc dstHandler(topic: PubsubTopic, msg: WakuMessage) {.async, gcsafe.} = dstHandlerFut.complete((topic, msg)) - dstNode.subscribe(pubSubTopic, dstHandler) + dstNode.subscribe((kind: PubsubSub, topic: pubsubTopic), some(dstHandler)) ## When let rpcMessage = WakuMessageRPC( @@ -162,7 +157,7 @@ suite "Waku v2 JSON-RPC API - Relay": await server.closeWait() await allFutures(srcNode.stop(), dstNode.stop()) - asyncTest "get latest messages received from topics cache": + asyncTest "get latest messages received from pubsub topics cache": ## Setup let pubSubTopic = "test-jsonrpc-pubsub-topic" @@ -176,24 +171,26 @@ suite "Waku v2 JSON-RPC API - Relay": await allFutures(srcNode.start(), dstNode.start()) await srcNode.mountRelay(@[pubSubTopic]) - await dstNode.mountRelay(@[pubSubTopic]) + await dstNode.mountRelay(@[]) await srcNode.connectToNodes(@[dstNode.peerInfo.toRemotePeerInfo()]) - # RPC server (destination node) let rpcPort = Port(8549) ta = initTAddress(ValidIpAddress.init("0.0.0.0"), rpcPort) server = newRpcHttpServer([ta]) - installRelayApiHandlers(dstNode, server, newTestMessageCache()) + let cache = MessageCache[string].init(capacity=30) + installRelayApiHandlers(dstNode, server, cache) server.start() # JSON-RPC client let client = newRpcHttpClient() await client.connect("127.0.0.1", rpcPort, false) + discard await client.post_waku_v2_relay_v1_subscriptions(@[pubSubTopic]) + ## Given let messages = @[ fakeWakuMessage(payload= @[byte 70], contentTopic=contentTopic), @@ -204,7 +201,7 @@ suite "Waku v2 JSON-RPC API - Relay": ## When for msg in messages: - await srcNode.publish(pubSubTopic, msg) + await srcNode.publish(some(pubSubTopic), msg) await sleepAsync(200.millis) @@ -222,3 +219,66 @@ suite "Waku v2 JSON-RPC API - Relay": await server.stop() await server.closeWait() await allFutures(srcNode.stop(), dstNode.stop()) + + asyncTest "get latest messages received from content topics cache": + ## Setup + let contentTopic = DefaultContentTopic + + # Relay nodes setup + let + srcNode = newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0)) + dstNode = newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0)) + + await allFutures(srcNode.start(), dstNode.start()) + + let shard = getShard(contentTopic).expect("Valid Shard") + + await srcNode.mountRelay(@[shard]) + await dstNode.mountRelay(@[]) + + await srcNode.connectToNodes(@[dstNode.peerInfo.toRemotePeerInfo()]) + + # RPC server (destination node) + let + rpcPort = Port(8550) + ta = initTAddress(ValidIpAddress.init("0.0.0.0"), rpcPort) + server = newRpcHttpServer([ta]) + + let cache = MessageCache[string].init(capacity=30) + installRelayApiHandlers(dstNode, server, cache) + server.start() + + # JSON-RPC client + let client = newRpcHttpClient() + await client.connect("127.0.0.1", rpcPort, false) + + discard await client.post_waku_v2_relay_v1_auto_subscriptions(@[contentTopic]) + + ## Given + let messages = @[ + fakeWakuMessage(payload= @[byte 70], contentTopic=contentTopic), + fakeWakuMessage(payload= @[byte 71], contentTopic=contentTopic), + fakeWakuMessage(payload= @[byte 72], contentTopic=contentTopic), + fakeWakuMessage(payload= @[byte 73], contentTopic=contentTopic) + ] + + ## When + for msg in messages: + await srcNode.publish(none(PubsubTopic), msg) + + await sleepAsync(200.millis) + + let dstMessages = await client.get_waku_v2_relay_v1_auto_messages(contentTopic) + + ## Then + check: + dstMessages.len == 4 + dstMessages[2].payload == base64.encode(messages[2].payload) + dstMessages[2].contentTopic.get() == messages[2].contentTopic + dstMessages[2].timestamp.get() == messages[2].timestamp + dstMessages[2].version.get() == messages[2].version + + ## Cleanup + await server.stop() + await server.closeWait() + await allFutures(srcNode.stop(), dstNode.stop()) \ No newline at end of file diff --git a/tests/wakunode_rest/test_rest_filter.nim b/tests/wakunode_rest/test_rest_filter.nim index a2b4ea1d31..6170e9ce8e 100644 --- a/tests/wakunode_rest/test_rest_filter.nim +++ b/tests/wakunode_rest/test_rest_filter.nim @@ -23,7 +23,6 @@ import ../../waku/waku_relay, ../../waku/waku_filter_v2/subscriptions, ../../waku/waku_filter_v2/common, - ../../waku/waku_api/rest/relay/topic_cache, ../../waku/waku_api/rest/relay/handlers as relay_api, ../../waku/waku_api/rest/relay/client as relay_api_client, ../testlib/wakucore, @@ -74,7 +73,7 @@ proc init(T: type RestFilterTest): Future[T] {.async.} = testSetup.messageCache = filter_api.MessageCache.init() installFilterRestApiHandlers(testSetup.restServer.router, testSetup.subscriberNode, testSetup.messageCache) - let topicCache = TopicCache.init() + let topicCache = MessageCache[string].init() installRelayApiHandlers(testSetup.restServerForService.router, testSetup.serviceNode, topicCache) testSetup.restServer.start() @@ -244,7 +243,7 @@ suite "Waku v2 Rest API - Filter V2": subPeerId = restFilterTest.subscriberNode.peerInfo.toRemotePeerInfo().peerId restFilterTest.messageCache.subscribe(DefaultPubsubTopic) - restFilterTest.serviceNode.subscribe(DefaultPubsubTopic) + restFilterTest.serviceNode.subscribe((kind: PubsubSub, topic: DefaultPubsubTopic)) # When var requestBody = FilterSubscribeRequest(requestId: "1234", diff --git a/tests/wakunode_rest/test_rest_lightpush.nim b/tests/wakunode_rest/test_rest_lightpush.nim index a05228beb4..a41c86c5a7 100644 --- a/tests/wakunode_rest/test_rest_lightpush.nim +++ b/tests/wakunode_rest/test_rest_lightpush.nim @@ -94,8 +94,8 @@ suite "Waku v2 Rest API - lightpush": # Given let restLightPushTest = await RestLightPushTest.init() - restLightPushTest.consumerNode.subscribe(DefaultPubsubTopic) - restLightPushTest.serviceNode.subscribe(DefaultPubsubTopic) + restLightPushTest.consumerNode.subscribe((kind: PubsubSub, topic: DefaultPubsubTopic)) + restLightPushTest.serviceNode.subscribe((kind: PubsubSub, topic: DefaultPubsubTopic)) require: toSeq(restLightPushTest.serviceNode.wakuRelay.subscribedTopics).len == 1 @@ -120,7 +120,7 @@ suite "Waku v2 Rest API - lightpush": # Given let restLightPushTest = await RestLightPushTest.init() - restLightPushTest.serviceNode.subscribe(DefaultPubsubTopic) + restLightPushTest.serviceNode.subscribe((kind: PubsubSub, topic: DefaultPubsubTopic)) require: toSeq(restLightPushTest.serviceNode.wakuRelay.subscribedTopics).len == 1 diff --git a/tests/wakunode_rest/test_rest_relay.nim b/tests/wakunode_rest/test_rest_relay.nim index 2d571b39d8..be444c3e9a 100644 --- a/tests/wakunode_rest/test_rest_relay.nim +++ b/tests/wakunode_rest/test_rest_relay.nim @@ -11,13 +11,13 @@ import ../../waku/common/base64, ../../waku/waku_core, ../../waku/waku_node, + ../../waku/waku_api/message_cache, ../../waku/waku_api/rest/server, ../../waku/waku_api/rest/client, ../../waku/waku_api/rest/responses, ../../waku/waku_api/rest/relay/types, ../../waku/waku_api/rest/relay/handlers as relay_api, ../../waku/waku_api/rest/relay/client as relay_api_client, - ../../waku/waku_api/rest/relay/topic_cache, ../../waku/waku_relay, ../../../waku/waku_rln_relay, ../testlib/wakucore, @@ -34,7 +34,7 @@ proc testWakuNode(): WakuNode = suite "Waku v2 Rest API - Relay": - asyncTest "Subscribe a node to an array of topics - POST /relay/v1/subscriptions": + asyncTest "Subscribe a node to an array of pubsub topics - POST /relay/v1/subscriptions": # Given let node = testWakuNode() await node.start() @@ -44,9 +44,9 @@ suite "Waku v2 Rest API - Relay": let restAddress = ValidIpAddress.init("0.0.0.0") let restServer = RestServerRef.init(restAddress, restPort).tryGet() - let topicCache = TopicCache.init() + let cache = MessageCache[string].init() - installRelayPostSubscriptionsV1Handler(restServer.router, node, topicCache) + installRelayApiHandlers(restServer.router, node, cache) restServer.start() let pubSubTopics = @[ @@ -67,35 +67,39 @@ suite "Waku v2 Rest API - Relay": response.data == "OK" check: - topicCache.isSubscribed("pubsub-topic-1") - topicCache.isSubscribed("pubsub-topic-2") - topicCache.isSubscribed("pubsub-topic-3") + cache.isSubscribed("pubsub-topic-1") + cache.isSubscribed("pubsub-topic-2") + cache.isSubscribed("pubsub-topic-3") check: - # Node should be subscribed to default + new topics toSeq(node.wakuRelay.subscribedTopics).len == pubSubTopics.len await restServer.stop() await restServer.closeWait() await node.stop() - asyncTest "Unsubscribe a node from an array of topics - DELETE /relay/v1/subscriptions": + asyncTest "Unsubscribe a node from an array of pubsub topics - DELETE /relay/v1/subscriptions": # Given let node = testWakuNode() await node.start() - await node.mountRelay() + await node.mountRelay(@[ + "pubsub-topic-1", + "pubsub-topic-2", + "pubsub-topic-3", + "pubsub-topic-x", + ]) let restPort = Port(58012) let restAddress = ValidIpAddress.init("0.0.0.0") let restServer = RestServerRef.init(restAddress, restPort).tryGet() - let topicCache = TopicCache.init() - topicCache.subscribe("pubsub-topic-1") - topicCache.subscribe("pubsub-topic-2") - topicCache.subscribe("pubsub-topic-3") - topicCache.subscribe("pubsub-topic-x") + let cache = MessageCache[string].init() + cache.subscribe("pubsub-topic-1") + cache.subscribe("pubsub-topic-2") + cache.subscribe("pubsub-topic-3") + cache.subscribe("pubsub-topic-x") - installRelayDeleteSubscriptionsV1Handler(restServer.router, node, topicCache) + installRelayApiHandlers(restServer.router, node, cache) restServer.start() let pubSubTopics = @[ @@ -117,17 +121,22 @@ suite "Waku v2 Rest API - Relay": response.data == "OK" check: - not topicCache.isSubscribed("pubsub-topic-1") - not topicCache.isSubscribed("pubsub-topic-2") - not topicCache.isSubscribed("pubsub-topic-3") - topicCache.isSubscribed("pubsub-topic-x") + not cache.isSubscribed("pubsub-topic-1") + not node.wakuRelay.isSubscribed("pubsub-topic-1") + not cache.isSubscribed("pubsub-topic-2") + not node.wakuRelay.isSubscribed("pubsub-topic-2") + not cache.isSubscribed("pubsub-topic-3") + not node.wakuRelay.isSubscribed("pubsub-topic-3") + cache.isSubscribed("pubsub-topic-x") + node.wakuRelay.isSubscribed("pubsub-topic-x") + not cache.isSubscribed("pubsub-topic-y") + not node.wakuRelay.isSubscribed("pubsub-topic-y") await restServer.stop() await restServer.closeWait() await node.stop() - - asyncTest "Get the latest messages for topic - GET /relay/v1/messages/{topic}": + asyncTest "Get the latest messages for a pubsub topic - GET /relay/v1/messages/{topic}": # Given let node = testWakuNode() await node.start() @@ -144,13 +153,13 @@ suite "Waku v2 Rest API - Relay": fakeWakuMessage(contentTopic = "content-topic-x", payload = toBytes("TEST-1")), ] - let topicCache = TopicCache.init() + let cache = MessageCache[string].init() - topicCache.subscribe(pubSubTopic) + cache.subscribe(pubSubTopic) for msg in messages: - topicCache.addMessage(pubSubTopic, msg) + cache.addMessage(pubSubTopic, msg) - installRelayGetMessagesV1Handler(restServer.router, node, topicCache) + installRelayApiHandlers(restServer.router, node, cache) restServer.start() # When @@ -164,20 +173,20 @@ suite "Waku v2 Rest API - Relay": response.data.len == 3 response.data.all do (msg: RelayWakuMessage) -> bool: msg.payload == base64.encode("TEST-1") and - msg.contentTopic.get().string == "content-topic-x" and + msg.contentTopic.get() == "content-topic-x" and msg.version.get() == 2 and msg.timestamp.get() != Timestamp(0) check: - topicCache.isSubscribed(pubSubTopic) - topicCache.getMessages(pubSubTopic).tryGet().len == 0 + cache.isSubscribed(pubSubTopic) + cache.getMessages(pubSubTopic).tryGet().len == 0 await restServer.stop() await restServer.closeWait() await node.stop() - asyncTest "Post a message to topic - POST /relay/v1/messages/{topic}": + asyncTest "Post a message to a pubsub topic - POST /relay/v1/messages/{topic}": ## "Relay API: publish and subscribe/unsubscribe": # Given let node = testWakuNode() @@ -192,26 +201,18 @@ suite "Waku v2 Rest API - Relay": let restAddress = ValidIpAddress.init("0.0.0.0") let restServer = RestServerRef.init(restAddress, restPort).tryGet() - let topicCache = TopicCache.init() + let cache = MessageCache[string].init() - installRelayApiHandlers(restServer.router, node, topicCache) + installRelayApiHandlers(restServer.router, node, cache) restServer.start() let client = newRestHttpClient(initTAddress(restAddress, restPort)) - node.subscribe(DefaultPubsubTopic) + node.subscribe((kind: PubsubSub, topic: DefaultPubsubTopic)) require: toSeq(node.wakuRelay.subscribedTopics).len == 1 - # When - let newTopics = @[ - PubSubTopic("pubsub-topic-1"), - PubSubTopic("pubsub-topic-2"), - PubSubTopic("pubsub-topic-3") - ] - discard await client.relayPostSubscriptionsV1(newTopics) - let response = await client.relayPostMessagesV1(DefaultPubsubTopic, RelayWakuMessage( payload: base64.encode("TEST-PAYLOAD"), contentTopic: some(DefaultContentTopic), @@ -224,8 +225,193 @@ suite "Waku v2 Rest API - Relay": $response.contentType == $MIMETYPE_TEXT response.data == "OK" - # TODO: Check for the message to be published to the topic + await restServer.stop() + await restServer.closeWait() + await node.stop() + + # Autosharding API + + asyncTest "Subscribe a node to an array of content topics - POST /relay/v1/auto/subscriptions": + # Given + let node = testWakuNode() + await node.start() + await node.mountRelay() + + let restPort = Port(58011) + let restAddress = ValidIpAddress.init("0.0.0.0") + let restServer = RestServerRef.init(restAddress, restPort).tryGet() + + let cache = MessageCache[string].init() + + installRelayApiHandlers(restServer.router, node, cache) + restServer.start() + + let contentTopics = @[ + ContentTopic("/waku/2/default-content1/proto"), + ContentTopic("/waku/2/default-content2/proto"), + ContentTopic("/waku/2/default-content3/proto") + ] + + let shards = contentTopics.mapIt(getShard(it).expect("Valid Shard")).deduplicate() + + # When + let client = newRestHttpClient(initTAddress(restAddress, restPort)) + let requestBody = RelayPostSubscriptionsRequest(contentTopics) + let response = await client.relayPostAutoSubscriptionsV1(requestBody) + + # Then + check: + response.status == 200 + $response.contentType == $MIMETYPE_TEXT + response.data == "OK" + + check: + cache.isSubscribed(contentTopics[0]) + cache.isSubscribed(contentTopics[1]) + cache.isSubscribed(contentTopics[2]) + + check: + # Node should be subscribed to all shards + toSeq(node.wakuRelay.subscribedTopics).len == shards.len await restServer.stop() await restServer.closeWait() await node.stop() + + asyncTest "Unsubscribe a node from an array of content topics - DELETE /relay/v1/auto/subscriptions": + # Given + let node = testWakuNode() + await node.start() + await node.mountRelay() + + let restPort = Port(58012) + let restAddress = ValidIpAddress.init("0.0.0.0") + let restServer = RestServerRef.init(restAddress, restPort).tryGet() + + let contentTopics = @[ + ContentTopic("/waku/2/default-content1/proto"), + ContentTopic("/waku/2/default-content2/proto"), + ContentTopic("/waku/2/default-content3/proto"), + ContentTopic("/waku/2/default-contentX/proto") + ] + + let cache = MessageCache[string].init() + cache.subscribe(contentTopics[0]) + cache.subscribe(contentTopics[1]) + cache.subscribe(contentTopics[2]) + cache.subscribe("/waku/2/default-contentY/proto") + + installRelayApiHandlers(restServer.router, node, cache) + restServer.start() + + # When + let client = newRestHttpClient(initTAddress(restAddress, restPort)) + let requestBody = RelayDeleteSubscriptionsRequest(contentTopics) + let response = await client.relayDeleteAutoSubscriptionsV1(requestBody) + + # Then + check: + response.status == 200 + $response.contentType == $MIMETYPE_TEXT + response.data == "OK" + + check: + not cache.isSubscribed(contentTopics[1]) + not cache.isSubscribed(contentTopics[2]) + not cache.isSubscribed(contentTopics[3]) + cache.isSubscribed("/waku/2/default-contentY/proto") + + await restServer.stop() + await restServer.closeWait() + await node.stop() + + asyncTest "Get the latest messages for a content topic - GET /relay/v1/auto/messages/{topic}": + # Given + let node = testWakuNode() + await node.start() + await node.mountRelay() + + let restPort = Port(58013) + let restAddress = ValidIpAddress.init("0.0.0.0") + let restServer = RestServerRef.init(restAddress, restPort).tryGet() + + let contentTopic = DefaultContentTopic + let messages = @[ + fakeWakuMessage(contentTopic = DefaultContentTopic, payload = toBytes("TEST-1")), + fakeWakuMessage(contentTopic = DefaultContentTopic, payload = toBytes("TEST-1")), + fakeWakuMessage(contentTopic = DefaultContentTopic, payload = toBytes("TEST-1")), + ] + + let cache = MessageCache[string].init() + + cache.subscribe(contentTopic) + for msg in messages: + cache.addMessage(contentTopic, msg) + + installRelayApiHandlers(restServer.router, node, cache) + restServer.start() + + # When + let client = newRestHttpClient(initTAddress(restAddress, restPort)) + let response = await client.relayGetAutoMessagesV1(contentTopic) + + # Then + check: + response.status == 200 + $response.contentType == $MIMETYPE_JSON + response.data.len == 3 + response.data.all do (msg: RelayWakuMessage) -> bool: + msg.payload == base64.encode("TEST-1") and + msg.contentTopic.get() == DefaultContentTopic and + msg.version.get() == 2 and + msg.timestamp.get() != Timestamp(0) + + check: + cache.isSubscribed(contentTopic) + cache.getMessages(contentTopic).tryGet().len == 0 # The cache is cleared when getMessage is called + + await restServer.stop() + await restServer.closeWait() + await node.stop() + + asyncTest "Post a message to a content topic - POST /relay/v1/auto/messages/{topic}": + ## "Relay API: publish and subscribe/unsubscribe": + # Given + let node = testWakuNode() + await node.start() + await node.mountRelay() + await node.mountRlnRelay(WakuRlnConfig(rlnRelayDynamic: false, + rlnRelayCredIndex: some(1.uint), + rlnRelayTreePath: genTempPath("rln_tree", "wakunode_1"))) + + # RPC server setup + let restPort = Port(58014) + let restAddress = ValidIpAddress.init("0.0.0.0") + let restServer = RestServerRef.init(restAddress, restPort).tryGet() + + let cache = MessageCache[string].init() + installRelayApiHandlers(restServer.router, node, cache) + restServer.start() + + let client = newRestHttpClient(initTAddress(restAddress, restPort)) + + node.subscribe((kind: ContentSub, topic: DefaultContentTopic)) + require: + toSeq(node.wakuRelay.subscribedTopics).len == 1 + + # When + let response = await client.relayPostAutoMessagesV1(DefaultContentTopic, RelayWakuMessage( + payload: base64.encode("TEST-PAYLOAD"), + contentTopic: some(DefaultContentTopic), + timestamp: some(int64(2022)) + )) + + # Then + check: + response.status == 200 + $response.contentType == $MIMETYPE_TEXT + response.data == "OK" + + await restServer.stop() + await restServer.closeWait() + await node.stop() \ No newline at end of file diff --git a/waku/node/waku_node.nim b/waku/node/waku_node.nim index a3a8f764b1..bd7f1eb5bb 100644 --- a/waku/node/waku_node.nim +++ b/waku/node/waku_node.nim @@ -25,6 +25,7 @@ import libp2p/transports/wstransport import ../waku_core, + ../waku_core/topics/sharding, ../waku_relay, ../waku_archive, ../waku_store, @@ -101,6 +102,7 @@ type announcedAddresses* : seq[MultiAddress] started*: bool # Indicates that node has started listening topicSubscriptionQueue*: AsyncEventQueue[SubscriptionEvent] + contentTopicHandlers: Table[ContentTopic, TopicHandler] proc getAutonatService*(rng: ref HmacDrbgContext): AutonatService = ## AutonatService request other peers to dial us back @@ -220,62 +222,104 @@ proc registerRelayDefaultHandler(node: WakuNode, topic: PubsubTopic) = await filterHandler(topic, msg) await archiveHandler(topic, msg) - node.wakuRelay.subscribe(topic, defaultHandler) + discard node.wakuRelay.subscribe(topic, defaultHandler) - -proc subscribe*(node: WakuNode, topic: PubsubTopic) = +proc subscribe*(node: WakuNode, subscription: SubscriptionEvent, handler = none(WakuRelayHandler)) = + ## Subscribes to a PubSub or Content topic. Triggers handler when receiving messages on + ## this topic. WakuRelayHandler is a method that takes a topic and a Waku message. + if node.wakuRelay.isNil(): error "Invalid API call to `subscribe`. WakuRelay not mounted." return - debug "subscribe", pubsubTopic= topic - - node.topicSubscriptionQueue.emit(SubscriptionEvent(kind: PubsubSub, pubsubSub: topic)) - node.registerRelayDefaultHandler(topic) - -proc subscribe*(node: WakuNode, topic: PubsubTopic, handler: WakuRelayHandler) = - ## Subscribes to a PubSub topic. Triggers handler when receiving messages on - ## this topic. TopicHandler is a method that takes a topic and some data. - if node.wakuRelay.isNil(): - error "Invalid API call to `subscribe`. WakuRelay not mounted." + let (pubsubTopic, contentTopicOp) = + case subscription.kind: + of ContentSub: + let shard = getShard((subscription.topic)).valueOr: + error "Autosharding error", error=error + return + + (shard, some(subscription.topic)) + of PubsubSub: (subscription.topic, none(ContentTopic)) + else: return + + if contentTopicOp.isSome() and node.contentTopicHandlers.hasKey(contentTopicOp.get()): + error "Invalid API call to `subscribe`. Was already subscribed" return - debug "subscribe", pubsubTopic= topic + debug "subscribe", pubsubTopic=pubsubTopic + + node.topicSubscriptionQueue.emit((kind: PubsubSub, topic: pubsubTopic)) + node.registerRelayDefaultHandler(pubsubTopic) - node.topicSubscriptionQueue.emit(SubscriptionEvent(kind: PubsubSub, pubsubSub: topic)) - node.registerRelayDefaultHandler(topic) - node.wakuRelay.subscribe(topic, handler) + if handler.isSome(): + let wrappedHandler = node.wakuRelay.subscribe(pubsubTopic, handler.get()) -proc unsubscribe*(node: WakuNode, topic: PubsubTopic) = - ## Unsubscribes from a specific PubSub topic. + if contentTopicOp.isSome(): + node.contentTopicHandlers[contentTopicOp.get()] = wrappedHandler +proc unsubscribe*(node: WakuNode, subscription: SubscriptionEvent) = + ## Unsubscribes from a specific PubSub or Content topic. + if node.wakuRelay.isNil(): error "Invalid API call to `unsubscribe`. WakuRelay not mounted." return - info "unsubscribe", pubsubTopic=topic + let (pubsubTopic, contentTopicOp) = + case subscription.kind: + of ContentUnsub: + let shard = getShard((subscription.topic)).valueOr: + error "Autosharding error", error=error + return - node.topicSubscriptionQueue.emit(SubscriptionEvent(kind: PubsubUnsub, pubsubUnsub: topic)) - node.wakuRelay.unsubscribe(topic) + (shard, some(subscription.topic)) + of PubsubUnsub: (subscription.topic, none(ContentTopic)) + else: return + if not node.wakuRelay.isSubscribed(pubsubTopic): + error "Invalid API call to `unsubscribe`. Was not subscribed" + return -proc publish*(node: WakuNode, topic: PubsubTopic, message: WakuMessage) {.async, gcsafe.} = - ## Publish a `WakuMessage` to a PubSub topic. `WakuMessage` should contain a - ## `contentTopic` field for light node functionality. This field may be also - ## be omitted. + if contentTopicOp.isSome(): + # Remove this handler only + var handler: TopicHandler + if node.contentTopicHandlers.pop(contentTopicOp.get(), handler): + debug "unsubscribe", contentTopic=contentTopicOp.get() + node.wakuRelay.unsubscribe(pubsubTopic, handler) + + if contentTopicOp.isNone() or node.wakuRelay.topics.getOrDefault(pubsubTopic).len == 1: + # Remove all handlers + debug "unsubscribe", pubsubTopic=pubsubTopic + node.wakuRelay.unsubscribeAll(pubsubTopic) + node.topicSubscriptionQueue.emit((kind: PubsubUnsub, topic: pubsubTopic)) + +proc publish*( + node: WakuNode, + pubsubTopicOp: Option[PubsubTopic], + message: WakuMessage + ) {.async, gcsafe.} = + ## Publish a `WakuMessage`. Pubsub topic contains; none, a named or static shard. + ## `WakuMessage` should contain a `contentTopic` field for light node functionality. + ## It is also used to determine the shard. if node.wakuRelay.isNil(): error "Invalid API call to `publish`. WakuRelay not mounted. Try `lightpush` instead." # TODO: Improve error handling return - discard await node.wakuRelay.publish(topic, message) + let pubsubTopic = pubsubTopicOp.valueOr: + getShard(message.contentTopic).valueOr: + error "Autosharding error", error=error + return + + #TODO instead of discard return error when 0 peers received the message + discard await node.wakuRelay.publish(pubsubTopic, message) trace "waku.relay published", - peerId=node.peerId, - pubsubTopic=topic, - hash=topic.digest(message).to0xHex(), - publishTime=getNowInNanosecondTime() + peerId=node.peerId, + pubsubTopic=pubsubTopic, + hash=pubsubTopic.digest(message).to0xHex(), + publishTime=getNowInNanosecondTime() proc startRelay*(node: WakuNode) {.async.} = ## Setup and start relay protocol @@ -303,7 +347,7 @@ proc startRelay*(node: WakuNode) {.async.} = info "relay started successfully" proc mountRelay*(node: WakuNode, - topics: seq[string] = @[], + pubsubTopics: seq[string] = @[], peerExchangeHandler = none(RoutingRecordsHandler)) {.async, gcsafe.} = if not node.wakuRelay.isNil(): error "wakuRelay already mounted, skipping" @@ -332,8 +376,8 @@ proc mountRelay*(node: WakuNode, info "relay mounted successfully" # Subscribe to topics - for topic in topics: - node.subscribe(topic) + for pubsubTopic in pubsubTopics: + node.subscribe((kind: PubsubSub, topic: pubsubTopic)) ## Waku filter diff --git a/waku/waku_api/cache_handlers.nim b/waku/waku_api/cache_handlers.nim new file mode 100644 index 0000000000..c378505764 --- /dev/null +++ b/waku/waku_api/cache_handlers.nim @@ -0,0 +1,23 @@ +when (NimMajor, NimMinor) < (1, 4): + {.push raises: [Defect].} +else: + {.push raises: [].} + +import + chronos, + chronicles +import + ../waku_relay, + ../waku_core, + ./message_cache + +##### Message handler + +proc messageCacheHandler*(cache: MessageCache[string]): WakuRelayHandler = + return proc(pubsubTopic: string, msg: WakuMessage): Future[void] {.async, closure.} = + cache.addMessage(PubSubTopic(pubsubTopic), msg) + +proc autoMessageCacheHandler*(cache: MessageCache[string]): WakuRelayHandler = + return proc(pubsubTopic: string, msg: WakuMessage): Future[void] {.async, closure.} = + if cache.isSubscribed(msg.contentTopic): + cache.addMessage(msg.contentTopic, msg) \ No newline at end of file diff --git a/waku/waku_api/jsonrpc/relay/callsigs.nim b/waku/waku_api/jsonrpc/relay/callsigs.nim index 332e317402..679eaf2f48 100644 --- a/waku/waku_api/jsonrpc/relay/callsigs.nim +++ b/waku/waku_api/jsonrpc/relay/callsigs.nim @@ -4,6 +4,11 @@ proc delete_waku_v2_relay_v1_subscriptions(topics: seq[PubsubTopic]): bool proc post_waku_v2_relay_v1_message(topic: PubsubTopic, message: WakuMessageRPC): bool proc get_waku_v2_relay_v1_messages(topic: PubsubTopic): seq[WakuMessageRPC] +proc post_waku_v2_relay_v1_auto_subscriptions(topics: seq[ContentTopic]): bool +proc delete_waku_v2_relay_v1_auto_subscriptions(topics: seq[ContentTopic]): bool +proc post_waku_v2_relay_v1_auto_message(message: WakuMessageRPC): bool +proc get_waku_v2_relay_v1_auto_messages(topic: ContentTopic): seq[WakuMessageRPC] + # Support for the Relay Private API has been deprecated. # This API existed for compatibility with the Waku v1 spec and encryption scheme. diff --git a/waku/waku_api/jsonrpc/relay/handlers.nim b/waku/waku_api/jsonrpc/relay/handlers.nim index 213b410c55..c52369abf5 100644 --- a/waku/waku_api/jsonrpc/relay/handlers.nim +++ b/waku/waku_api/jsonrpc/relay/handlers.nim @@ -17,6 +17,7 @@ import ../../../waku_rln_relay/rln/wrappers, ../../../waku_node, ../../message_cache, + ../../cache_handlers, ../message from std/times import getTime @@ -29,54 +30,51 @@ logScope: const futTimeout* = 5.seconds # Max time to wait for futures -type - MessageCache* = message_cache.MessageCache[PubsubTopic] - - ## Waku Relay JSON-RPC API -proc installRelayApiHandlers*(node: WakuNode, server: RpcServer, cache: MessageCache) = - if node.wakuRelay.isNil(): - debug "waku relay protocol is nil. skipping json rpc api handlers installation" - return - - let topicHandler = proc(topic: PubsubTopic, message: WakuMessage) {.async.} = - cache.addMessage(topic, message) - - # The node may already be subscribed to some topics when Relay API handlers - # are installed - for topic in node.wakuRelay.subscribedTopics: - node.subscribe(topic, topicHandler) - cache.subscribe(topic) - - - server.rpc("post_waku_v2_relay_v1_subscriptions") do (topics: seq[PubsubTopic]) -> bool: +proc installRelayApiHandlers*(node: WakuNode, server: RpcServer, cache: MessageCache[string]) = + server.rpc("post_waku_v2_relay_v1_subscriptions") do (pubsubTopics: seq[PubsubTopic]) -> bool: + if pubsubTopics.len == 0: + raise newException(ValueError, "No pubsub topic provided") + ## Subscribes a node to a list of PubSub topics debug "post_waku_v2_relay_v1_subscriptions" # Subscribe to all requested topics - let newTopics = topics.filterIt(not cache.isSubscribed(it)) + let newTopics = pubsubTopics.filterIt(not cache.isSubscribed(it)) - for topic in newTopics: - cache.subscribe(topic) - node.subscribe(topic, topicHandler) + for pubsubTopic in newTopics: + if pubsubTopic == "": + raise newException(ValueError, "Empty pubsub topic") + + cache.subscribe(pubsubTopic) + node.subscribe((kind: PubsubSub, topic: pubsubTopic), some(messageCacheHandler(cache))) return true - server.rpc("delete_waku_v2_relay_v1_subscriptions") do (topics: seq[PubsubTopic]) -> bool: + server.rpc("delete_waku_v2_relay_v1_subscriptions") do (pubsubTopics: seq[PubsubTopic]) -> bool: + if pubsubTopics.len == 0: + raise newException(ValueError, "No pubsub topic provided") + ## Unsubscribes a node from a list of PubSub topics debug "delete_waku_v2_relay_v1_subscriptions" # Unsubscribe all handlers from requested topics - let subscribedTopics = topics.filterIt(cache.isSubscribed(it)) + let subscribedTopics = pubsubTopics.filterIt(cache.isSubscribed(it)) + + for pubsubTopic in subscribedTopics: + if pubsubTopic == "": + raise newException(ValueError, "Empty pubsub topic") - for topic in subscribedTopics: - node.unsubscribe(topic) - cache.unsubscribe(topic) + cache.unsubscribe(pubsubTopic) + node.unsubscribe((kind: PubsubUnsub, topic: pubsubTopic)) return true server.rpc("post_waku_v2_relay_v1_message") do (pubsubTopic: PubsubTopic, msg: WakuMessageRPC) -> bool: + if pubsubTopic == "": + raise newException(ValueError, "Empty pubsub topic") + ## Publishes a WakuMessage to a PubSub topic debug "post_waku_v2_relay_v1_message", pubsubTopic=pubsubTopic @@ -84,10 +82,12 @@ proc installRelayApiHandlers*(node: WakuNode, server: RpcServer, cache: MessageC if payloadRes.isErr(): raise newException(ValueError, "invalid payload format: " & payloadRes.error) + if msg.contentTopic.isNone(): + raise newException(ValueError, "message has no content topic") + var message = WakuMessage( payload: payloadRes.value, - # TODO: Fail if the message doesn't have a content topic - contentTopic: msg.contentTopic.get(DefaultContentTopic), + contentTopic: msg.contentTopic.get(), version: msg.version.get(0'u32), timestamp: msg.timestamp.get(Timestamp(0)), ephemeral: msg.ephemeral.get(false) @@ -96,7 +96,8 @@ proc installRelayApiHandlers*(node: WakuNode, server: RpcServer, cache: MessageC # ensure the node is subscribed to the pubsubTopic. otherwise it risks publishing # to a topic with no connected peers if pubsubTopic notin node.wakuRelay.subscribedTopics(): - raise newException(ValueError, "Failed to publish: Node not subscribed to pubsubTopic: " & pubsubTopic) + raise newException( + ValueError, "Failed to publish: Node not subscribed to pubsubTopic: " & pubsubTopic) # if RLN is mounted, append the proof to the message if not node.wakuRlnRelay.isNil(): @@ -112,34 +113,127 @@ proc installRelayApiHandlers*(node: WakuNode, server: RpcServer, cache: MessageC elif result == MessageValidationResult.Spam: raise newException(ValueError, "Failed to publish: limit exceeded, try again later") elif result == MessageValidationResult.Valid: - debug "RLN proof validated successfully", pubSubTopic=pubSubTopic + debug "RLN proof validated successfully", pubSubTopic=pubsubTopic else: raise newException(ValueError, "Failed to publish: unknown RLN proof validation result") # if we reach here its either a non-RLN message or a RLN message with a valid proof - debug "Publishing message", pubSubTopic=pubSubTopic - let publishFut = node.publish(pubsubTopic, message) + debug "Publishing message", pubSubTopic=pubsubTopic, rln=defined(rln) + let publishFut = node.publish(some(pubsubTopic), message) if not await publishFut.withTimeout(futTimeout): raise newException(ValueError, "Failed to publish: timed out") return true - server.rpc("get_waku_v2_relay_v1_messages") do (topic: PubsubTopic) -> seq[WakuMessageRPC]: + server.rpc("get_waku_v2_relay_v1_messages") do (pubsubTopic: PubsubTopic) -> seq[WakuMessageRPC]: + if pubsubTopic == "": + raise newException(ValueError, "Empty pubsub topic") + ## Returns all WakuMessages received on a PubSub topic since the ## last time this method was called - debug "get_waku_v2_relay_v1_messages", topic=topic - - if not cache.isSubscribed(topic): - raise newException(ValueError, "Not subscribed to topic: " & topic) + debug "get_waku_v2_relay_v1_messages", topic=pubsubTopic - let msgRes = cache.getMessages(topic, clear=true) + let msgRes = cache.getMessages(pubsubTopic, clear=true) if msgRes.isErr(): - raise newException(ValueError, "Not subscribed to topic: " & topic) + raise newException(ValueError, "Not subscribed to pubsub topic: " & pubsubTopic) return msgRes.value.map(toWakuMessageRPC) + # Autosharding API + + server.rpc("post_waku_v2_relay_v1_auto_subscriptions") do (contentTopics: seq[ContentTopic]) -> bool: + if contentTopics.len == 0: + raise newException(ValueError, "No content topic provided") + + ## Subscribes a node to a list of Content topics + debug "post_waku_v2_relay_v1_auto_subscriptions" + + let newTopics = contentTopics.filterIt(not cache.isSubscribed(it)) + + # Subscribe to all requested topics + for contentTopic in newTopics: + if contentTopic == "": + raise newException(ValueError, "Empty content topic") + + cache.subscribe(contentTopic) + node.subscribe((kind: ContentSub, topic: contentTopic), some(autoMessageCacheHandler(cache))) + + return true + + server.rpc("delete_waku_v2_relay_v1_auto_subscriptions") do (contentTopics: seq[ContentTopic]) -> bool: + if contentTopics.len == 0: + raise newException(ValueError, "No content topic provided") + + ## Unsubscribes a node from a list of Content topics + debug "delete_waku_v2_relay_v1_auto_subscriptions" + + let subscribedTopics = contentTopics.filterIt(cache.isSubscribed(it)) + + # Unsubscribe all handlers from requested topics + for contentTopic in subscribedTopics: + if contentTopic == "": + raise newException(ValueError, "Empty content topic") + + cache.unsubscribe(contentTopic) + node.unsubscribe((kind: ContentUnsub, topic: contentTopic)) + + return true + + server.rpc("post_waku_v2_relay_v1_auto_message") do (msg: WakuMessageRPC) -> bool: + ## Publishes a WakuMessage to a Content topic + debug "post_waku_v2_relay_v1_auto_message" + + let payloadRes = base64.decode(msg.payload) + if payloadRes.isErr(): + raise newException(ValueError, "invalid payload format: " & payloadRes.error) + + if msg.contentTopic.isNone(): + raise newException(ValueError, "message has no content topic") + + var message = WakuMessage( + payload: payloadRes.value, + contentTopic: msg.contentTopic.get(), + version: msg.version.get(0'u32), + timestamp: msg.timestamp.get(Timestamp(0)), + ephemeral: msg.ephemeral.get(false) + ) + + # if RLN is mounted, append the proof to the message + if not node.wakuRlnRelay.isNil(): + # append the proof to the message + let success = node.wakuRlnRelay.appendRLNProof(message, + float64(getTime().toUnix())) + if not success: + raise newException(ValueError, "Failed to publish: error appending RLN proof to message") + # validate the message before sending it + let result = node.wakuRlnRelay.validateMessage(message) + if result == MessageValidationResult.Invalid: + raise newException(ValueError, "Failed to publish: invalid RLN proof") + elif result == MessageValidationResult.Spam: + raise newException(ValueError, "Failed to publish: limit exceeded, try again later") + elif result == MessageValidationResult.Valid: + debug "RLN proof validated successfully", contentTopic=message.contentTopic + else: + raise newException(ValueError, "Failed to publish: unknown RLN proof validation result") + + # if we reach here its either a non-RLN message or a RLN message with a valid proof + debug "Publishing message", contentTopic=message.contentTopic, rln=defined(rln) + let publishFut = node.publish(none(PubsubTopic), message) + if not await publishFut.withTimeout(futTimeout): + raise newException(ValueError, "Failed to publish: timed out") + + return true + + server.rpc("get_waku_v2_relay_v1_auto_messages") do (contentTopic: ContentTopic) -> seq[WakuMessageRPC]: + if contentTopic == "": + raise newException(ValueError, "Empty content topic") + + ## Returns all WakuMessages received on a Content topic since the + ## last time this method was called + debug "get_waku_v2_relay_v1_auto_messages", topic=contentTopic + + let msgRes = cache.getMessages(contentTopic, clear=true) + if msgRes.isErr(): + raise newException(ValueError, "Not subscribed to content topic: " & contentTopic) -## Waku Relay Private JSON-RPC API (Whisper/Waku v1 compatibility) -## Support for the Relay Private API has been deprecated. -## This API existed for compatibility with the Waku v1/Whisper spec and encryption schemes. -## It is recommended to use the Relay API instead. + return msgRes.value.map(toWakuMessageRPC) \ No newline at end of file diff --git a/waku/waku_api/rest/relay/client.nim b/waku/waku_api/rest/relay/client.nim index a0be015ae6..46bdb64647 100644 --- a/waku/waku_api/rest/relay/client.nim +++ b/waku/waku_api/rest/relay/client.nim @@ -46,10 +46,11 @@ proc decodeBytes*(t: typedesc[string], value: openarray[byte], # TODO: Check how we can use a constant to set the method endpoint (improve "rest" pragma under nim-presto) proc relayPostSubscriptionsV1*(body: RelayPostSubscriptionsRequest): RestResponse[string] {.rest, endpoint: "/relay/v1/subscriptions", meth: HttpMethod.MethodPost.} +proc relayPostAutoSubscriptionsV1*(body: RelayPostSubscriptionsRequest): RestResponse[string] {.rest, endpoint: "/relay/v1/auto/subscriptions", meth: HttpMethod.MethodPost.} # TODO: Check how we can use a constant to set the method endpoint (improve "rest" pragma under nim-presto) proc relayDeleteSubscriptionsV1*(body: RelayDeleteSubscriptionsRequest): RestResponse[string] {.rest, endpoint: "/relay/v1/subscriptions", meth: HttpMethod.MethodDelete.} - +proc relayDeleteAutoSubscriptionsV1*(body: RelayDeleteSubscriptionsRequest): RestResponse[string] {.rest, endpoint: "/relay/v1/auto/subscriptions", meth: HttpMethod.MethodDelete.} proc decodeBytes*(t: typedesc[RelayGetMessagesResponse], data: openArray[byte], contentType: Opt[ContentTypeData]): RestResult[RelayGetMessagesResponse] = if MediaType.init($contentType) != MIMETYPE_JSON: @@ -70,6 +71,8 @@ proc encodeBytes*(value: RelayPostMessagesRequest, # TODO: Check how we can use a constant to set the method endpoint (improve "rest" pragma under nim-presto) proc relayGetMessagesV1*(topic: string): RestResponse[RelayGetMessagesResponse] {.rest, endpoint: "/relay/v1/messages/{topic}", meth: HttpMethod.MethodGet.} +proc relayGetAutoMessagesV1*(topic: string): RestResponse[RelayGetMessagesResponse] {.rest, endpoint: "/relay/v1/auto/messages/{topic}", meth: HttpMethod.MethodGet.} # TODO: Check how we can use a constant to set the method endpoint (improve "rest" pragma under nim-presto) proc relayPostMessagesV1*(topic: string, body: RelayPostMessagesRequest): RestResponse[string] {.rest, endpoint: "/relay/v1/messages/{topic}", meth: HttpMethod.MethodPost.} +proc relayPostAutoMessagesV1*(topic: string, body: RelayPostMessagesRequest): RestResponse[string] {.rest, endpoint: "/relay/v1/auto/messages/{topic}", meth: HttpMethod.MethodPost.} diff --git a/waku/waku_api/rest/relay/handlers.nim b/waku/waku_api/rest/relay/handlers.nim index 5b4d4f97f1..6e74db8bec 100644 --- a/waku/waku_api/rest/relay/handlers.nim +++ b/waku/waku_api/rest/relay/handlers.nim @@ -16,10 +16,12 @@ import ../../../waku_relay/protocol, ../../../waku_rln_relay, ../../../waku_rln_relay/rln/wrappers, + ../../../node/waku_node, + ../../message_cache, + ../../cache_handlers, ../serdes, ../responses, - ./types, - ./topic_cache + ./types from std/times import getTime from std/times import toUnix @@ -40,9 +42,11 @@ const futTimeout* = 5.seconds # Max time to wait for futures #### Request handlers const ROUTE_RELAY_SUBSCRIPTIONSV1* = "/relay/v1/subscriptions" +const ROUTE_RELAY_MESSAGESV1* = "/relay/v1/messages/{topic}" +const ROUTE_RELAY_AUTO_SUBSCRIPTIONSV1* = "/relay/v1/auto/subscriptions" +const ROUTE_RELAY_AUTO_MESSAGESV1* = "/relay/v1/auto/messages/{topic}" -proc installRelayPostSubscriptionsV1Handler*(router: var RestRouter, node: WakuNode, cache: TopicCache) = - +proc installRelayApiHandlers*(router: var RestRouter, node: WakuNode, cache: MessageCache[string]) = router.api(MethodPost, ROUTE_RELAY_SUBSCRIPTIONSV1) do (contentBody: Option[ContentBody]) -> RestApiResponse: # ## Subscribes a node to a list of PubSub topics # debug "post_waku_v2_relay_v1_subscriptions" @@ -65,14 +69,12 @@ proc installRelayPostSubscriptionsV1Handler*(router: var RestRouter, node: WakuN # Only subscribe to topics for which we have no subscribed topic handlers yet let newTopics = req.filterIt(not cache.isSubscribed(it)) - for topic in newTopics: - cache.subscribe(topic) - node.subscribe(topic, cache.messageHandler()) + for pubsubTopic in newTopics: + cache.subscribe(pubsubTopic) + node.subscribe((kind: PubsubSub, topic: pubsubTopic), some(messageCacheHandler(cache))) return RestApiResponse.ok() - -proc installRelayDeleteSubscriptionsV1Handler*(router: var RestRouter, node: WakuNode, cache: TopicCache) = router.api(MethodDelete, ROUTE_RELAY_SUBSCRIPTIONSV1) do (contentBody: Option[ContentBody]) -> RestApiResponse: # ## Subscribes a node to a list of PubSub topics # debug "delete_waku_v2_relay_v1_subscriptions" @@ -93,17 +95,13 @@ proc installRelayDeleteSubscriptionsV1Handler*(router: var RestRouter, node: Wak let req: RelayDeleteSubscriptionsRequest = reqResult.get() # Unsubscribe all handlers from requested topics - for topic in req: - node.unsubscribe(topic) - cache.unsubscribe(topic) + for pubsubTopic in req: + node.unsubscribe((kind: PubsubUnsub, topic: pubsubTopic)) + cache.unsubscribe(pubsubTopic) # Successfully unsubscribed from all requested topics return RestApiResponse.ok() - -const ROUTE_RELAY_MESSAGESV1* = "/relay/v1/messages/{topic}" - -proc installRelayGetMessagesV1Handler*(router: var RestRouter, node: WakuNode, cache: TopicCache) = router.api(MethodGet, ROUTE_RELAY_MESSAGESV1) do (topic: string) -> RestApiResponse: # ## Returns all WakuMessages received on a PubSub topic since the # ## last time this method was called @@ -127,9 +125,7 @@ proc installRelayGetMessagesV1Handler*(router: var RestRouter, node: WakuNode, c return resp.get() -proc installRelayPostMessagesV1Handler*(router: var RestRouter, node: WakuNode) = router.api(MethodPost, ROUTE_RELAY_MESSAGESV1) do (topic: string, contentBody: Option[ContentBody]) -> RestApiResponse: - if topic.isErr(): return RestApiResponse.badRequest() let pubSubTopic = topic.get() @@ -178,16 +174,139 @@ proc installRelayPostMessagesV1Handler*(router: var RestRouter, node: WakuNode) return RestApiResponse.internalServerError("Failed to publish: unknown RLN proof validation result") # if we reach here its either a non-RLN message or a RLN message with a valid proof - debug "Publishing message", pubSubTopic=pubSubTopic - if not (waitFor node.publish(pubSubTopic, resMessage.value).withTimeout(futTimeout)): + debug "Publishing message", pubSubTopic=pubSubTopic, rln=defined(rln) + if not (waitFor node.publish(some(pubSubTopic), resMessage.value).withTimeout(futTimeout)): error "Failed to publish message to topic", pubSubTopic=pubSubTopic return RestApiResponse.internalServerError("Failed to publish: timedout") return RestApiResponse.ok() + # Autosharding API + + router.api(MethodPost, ROUTE_RELAY_AUTO_SUBSCRIPTIONSV1) do (contentBody: Option[ContentBody]) -> RestApiResponse: + # ## Subscribes a node to a list of content topics + # debug "post_waku_v2_relay_v1_auto_subscriptions" + + # Check the request body + if contentBody.isNone(): + return RestApiResponse.badRequest() + + let reqBodyContentType = MediaType.init($contentBody.get().contentType) + if reqBodyContentType != MIMETYPE_JSON: + return RestApiResponse.badRequest() + + let reqBodyData = contentBody.get().data + let reqResult = decodeFromJsonBytes(RelayPostSubscriptionsRequest, reqBodyData) + if reqResult.isErr(): + return RestApiResponse.badRequest() + + let req: RelayPostSubscriptionsRequest = reqResult.get() + + # Only subscribe to topics for which we have no subscribed topic handlers yet + let newTopics = req.filterIt(not cache.isSubscribed(it)) + + for contentTopic in newTopics: + cache.subscribe(contentTopic) + node.subscribe((kind: ContentSub, topic: contentTopic), some(autoMessageCacheHandler(cache))) + + return RestApiResponse.ok() + + router.api(MethodDelete, ROUTE_RELAY_AUTO_SUBSCRIPTIONSV1) do (contentBody: Option[ContentBody]) -> RestApiResponse: + # ## Subscribes a node to a list of content topics + # debug "delete_waku_v2_relay_v1_auto_subscriptions" + + # Check the request body + if contentBody.isNone(): + return RestApiResponse.badRequest() + + let reqBodyContentType = MediaType.init($contentBody.get().contentType) + if reqBodyContentType != MIMETYPE_JSON: + return RestApiResponse.badRequest() + + let reqBodyData = contentBody.get().data + let reqResult = decodeFromJsonBytes(RelayDeleteSubscriptionsRequest, reqBodyData) + if reqResult.isErr(): + return RestApiResponse.badRequest() + + let req: RelayDeleteSubscriptionsRequest = reqResult.get() + + # Unsubscribe all handlers from requested topics + for contentTopic in req: + cache.unsubscribe(contentTopic) + node.unsubscribe((kind: ContentUnsub, topic: contentTopic)) + + # Successfully unsubscribed from all requested topics + return RestApiResponse.ok() + + router.api(MethodGet, ROUTE_RELAY_AUTO_MESSAGESV1) do (topic: string) -> RestApiResponse: + # ## Returns all WakuMessages received on a content topic since the + # ## last time this method was called + # ## TODO: ability to specify a return message limit + # debug "get_waku_v2_relay_v1_auto_messages", topic=topic + + if topic.isErr(): + return RestApiResponse.badRequest() + let contentTopic = topic.get() + + let messages = cache.getMessages(contentTopic, clear=true) + if messages.isErr(): + debug "Not subscribed to topic", topic=contentTopic + return RestApiResponse.notFound() + + let data = RelayGetMessagesResponse(messages.get().map(toRelayWakuMessage)) + let resp = RestApiResponse.jsonResponse(data, status=Http200) + if resp.isErr(): + debug "An error ocurred while building the json respose", error=resp.error + return RestApiResponse.internalServerError() + + return resp.get() + + router.api(MethodPost, ROUTE_RELAY_AUTO_MESSAGESV1) do (topic: string, contentBody: Option[ContentBody]) -> RestApiResponse: + # Check the request body + if contentBody.isNone(): + return RestApiResponse.badRequest() + + let reqBodyContentType = MediaType.init($contentBody.get().contentType) + if reqBodyContentType != MIMETYPE_JSON: + return RestApiResponse.badRequest() + + let reqBodyData = contentBody.get().data + let reqResult = decodeFromJsonBytes(RelayPostMessagesRequest, reqBodyData) + if reqResult.isErr(): + return RestApiResponse.badRequest() + + if reqResult.value.contentTopic.isNone(): + return RestApiResponse.badRequest() + + let resMessage = reqResult.value.toWakuMessage(version = 0) + if resMessage.isErr(): + return RestApiResponse.badRequest() + + var message = resMessage.get() + + # if RLN is mounted, append the proof to the message + if not node.wakuRlnRelay.isNil(): + # append the proof to the message + let success = node.wakuRlnRelay.appendRLNProof(message, + float64(getTime().toUnix())) + if not success: + return RestApiResponse.internalServerError("Failed to publish: error appending RLN proof to message") + + # validate the message before sending it + let result = node.wakuRlnRelay.validateMessage(message) + if result == MessageValidationResult.Invalid: + return RestApiResponse.internalServerError("Failed to publish: invalid RLN proof") + elif result == MessageValidationResult.Spam: + return RestApiResponse.badRequest("Failed to publish: limit exceeded, try again later") + elif result == MessageValidationResult.Valid: + debug "RLN proof validated successfully", contentTopic=message.contentTopic + else: + return RestApiResponse.internalServerError("Failed to publish: unknown RLN proof validation result") + + # if we reach here its either a non-RLN message or a RLN message with a valid proof + debug "Publishing message", contentTopic=message.contentTopic, rln=defined(rln) + if not (waitFor node.publish(none(PubSubTopic), message).withTimeout(futTimeout)): + error "Failed to publish message to topic", contentTopic=message.contentTopic + return RestApiResponse.internalServerError("Failed to publish: timedout") -proc installRelayApiHandlers*(router: var RestRouter, node: WakuNode, cache: TopicCache) = - installRelayPostSubscriptionsV1Handler(router, node, cache) - installRelayDeleteSubscriptionsV1Handler(router, node, cache) - installRelayGetMessagesV1Handler(router, node, cache) - installRelayPostMessagesV1Handler(router, node) + return RestApiResponse.ok() \ No newline at end of file diff --git a/waku/waku_api/rest/relay/topic_cache.nim b/waku/waku_api/rest/relay/topic_cache.nim deleted file mode 100644 index 301165087c..0000000000 --- a/waku/waku_api/rest/relay/topic_cache.nim +++ /dev/null @@ -1,33 +0,0 @@ -when (NimMajor, NimMinor) < (1, 4): - {.push raises: [Defect].} -else: - {.push raises: [].} - -import - chronos, - chronicles -import - ../../../waku_relay, - ../../../waku_core, - ../../message_cache - -export message_cache - - -##### TopicCache - -type TopicCacheResult*[T] = MessageCacheResult[T] - -type TopicCache* = MessageCache[PubSubTopic] - - -##### Message handler - -type TopicCacheMessageHandler* = WakuRelayHandler - -proc messageHandler*(cache: TopicCache): TopicCacheMessageHandler = - - let handler = proc(pubsubTopic: string, msg: WakuMessage): Future[void] {.async, closure.} = - cache.addMessage(PubSubTopic(pubsubTopic), msg) - - handler diff --git a/waku/waku_api/rest/relay/types.nim b/waku/waku_api/rest/relay/types.nim index 1d3c84bcfc..f11ea40c5e 100644 --- a/waku/waku_api/rest/relay/types.nim +++ b/waku/waku_api/rest/relay/types.nim @@ -29,8 +29,8 @@ type RelayPostMessagesRequest* = RelayWakuMessage type - RelayPostSubscriptionsRequest* = seq[PubSubTopic] - RelayDeleteSubscriptionsRequest* = seq[PubSubTopic] + RelayPostSubscriptionsRequest* = seq[string] + RelayDeleteSubscriptionsRequest* = seq[string] #### Type conversion diff --git a/waku/waku_core/topics.nim b/waku/waku_core/topics.nim index 5c44aaf788..f4915999af 100644 --- a/waku/waku_core/topics.nim +++ b/waku/waku_core/topics.nim @@ -10,9 +10,5 @@ export type SubscriptionKind* = enum ContentSub, ContentUnsub, PubsubSub, PubsubUnsub - SubscriptionEvent* = object - case kind*: SubscriptionKind - of PubsubSub: pubsubSub*: string - of ContentSub: contentSub*: string - of PubsubUnsub: pubsubUnsub*: string - of ContentUnsub: contentUnsub*: string \ No newline at end of file + SubscriptionEvent* = tuple[kind: SubscriptionKind, topic: string] + \ No newline at end of file diff --git a/waku/waku_discv5.nim b/waku/waku_discv5.nim index efcaa02143..c02371dbbf 100644 --- a/waku/waku_discv5.nim +++ b/waku/waku_discv5.nim @@ -307,7 +307,10 @@ proc stop*(wd: WakuDiscoveryV5): Future[void] {.async.} = debug "Successfully stopped discovery v5 service" -proc subscriptionsListener*(wd: WakuDiscoveryV5, topicSubscriptionQueue: AsyncEventQueue[SubscriptionEvent]) {.async.} = +proc subscriptionsListener*( + wd: WakuDiscoveryV5, + topicSubscriptionQueue: AsyncEventQueue[SubscriptionEvent] + ) {.async.} = ## Listen for pubsub topics subscriptions changes let key = topicSubscriptionQueue.register() @@ -317,8 +320,8 @@ proc subscriptionsListener*(wd: WakuDiscoveryV5, topicSubscriptionQueue: AsyncEv # Since we don't know the events we will receive we have to anticipate. - let subs = events.filterIt(it.kind == SubscriptionKind.PubsubSub).mapIt(it.pubsubSub) - let unsubs = events.filterIt(it.kind == SubscriptionKind.PubsubUnsub).mapIt(it.pubsubUnsub) + let subs = events.filterIt(it.kind == PubsubSub).mapIt(it.topic) + let unsubs = events.filterIt(it.kind == PubsubUnsub).mapIt(it.topic) if subs.len == 0 and unsubs.len == 0: continue diff --git a/waku/waku_relay/protocol.nim b/waku/waku_relay/protocol.nim index 7b54e61481..15562983c9 100644 --- a/waku/waku_relay/protocol.nim +++ b/waku/waku_relay/protocol.nim @@ -214,20 +214,21 @@ proc generateOrderedValidator*(w: WakuRelay): auto {.gcsafe.} = return ValidationResult.Accept return wrappedValidator -proc subscribe*(w: WakuRelay, pubsubTopic: PubsubTopic, handler: WakuRelayHandler) = +proc subscribe*(w: WakuRelay, pubsubTopic: PubsubTopic, handler: WakuRelayHandler): TopicHandler = debug "subscribe", pubsubTopic=pubsubTopic # we need to wrap the handler since gossipsub doesnt understand WakuMessage - let wrappedHandler = proc(pubsubTopic: string, data: seq[byte]): Future[void] {.gcsafe, raises: [].} = - let decMsg = WakuMessage.decode(data) - if decMsg.isErr(): - # fine if triggerSelf enabled, since validators are bypassed - error "failed to decode WakuMessage, validator passed a wrong message", error = decMsg.error - let fut = newFuture[void]() - fut.complete() - return fut - else: - return handler(pubsubTopic, decMsg.get()) + let wrappedHandler = + proc(pubsubTopic: string, data: seq[byte]): Future[void] {.gcsafe, raises: [].} = + let decMsg = WakuMessage.decode(data) + if decMsg.isErr(): + # fine if triggerSelf enabled, since validators are bypassed + error "failed to decode WakuMessage, validator passed a wrong message", error = decMsg.error + let fut = newFuture[void]() + fut.complete() + return fut + else: + return handler(pubsubTopic, decMsg.get()) # add the ordered validator to the topic if not w.validatorInserted.hasKey(pubSubTopic): @@ -240,12 +241,23 @@ proc subscribe*(w: WakuRelay, pubsubTopic: PubsubTopic, handler: WakuRelayHandle # subscribe to the topic with our wrapped handler procCall GossipSub(w).subscribe(pubsubTopic, wrappedHandler) -proc unsubscribe*(w: WakuRelay, pubsubTopic: PubsubTopic) = - debug "unsubscribe", pubsubTopic=pubsubTopic + return wrappedHandler + +proc unsubscribeAll*(w: WakuRelay, pubsubTopic: PubsubTopic) = + ## Unsubscribe all handlers on this pubsub topic + + debug "unsubscribe all", pubsubTopic=pubsubTopic procCall GossipSub(w).unsubscribeAll(pubsubTopic) w.validatorInserted.del(pubsubTopic) +proc unsubscribe*(w: WakuRelay, pubsubTopic: PubsubTopic, handler: TopicHandler) = + ## Unsubscribe this handler on this pubsub topic + + debug "unsubscribe", pubsubTopic=pubsubTopic + + procCall GossipSub(w).unsubscribe(pubsubTopic, handler) + proc publish*(w: WakuRelay, pubsubTopic: PubsubTopic, message: WakuMessage): Future[int] {.async.} = trace "publish", pubsubTopic=pubsubTopic let data = message.encode().buffer From a27d005ffcadb7fa4c7a926e87a63a01fbd448ff Mon Sep 17 00:00:00 2001 From: Ivan Folgueira Bande <128452529+Ivansete-status@users.noreply.github.com> Date: Tue, 26 Sep 2023 13:59:54 +0200 Subject: [PATCH 049/274] fix(archive): dburl check (#2071) * dburl.nim: simpler regex that can support db_urls with . and - in hostname * dbrul.nim: accepting any non-empty sequence for user and password * dburl.nim: skipping validation for 'sqlite' db paths --- apps/wakunode2/external_config.nim | 12 ------------ waku/common/databases/dburl.nim | 4 ++-- 2 files changed, 2 insertions(+), 14 deletions(-) diff --git a/apps/wakunode2/external_config.nim b/apps/wakunode2/external_config.nim index a21bc86df5..3c604dafe1 100644 --- a/apps/wakunode2/external_config.nim +++ b/apps/wakunode2/external_config.nim @@ -509,18 +509,6 @@ proc parseCmdArg*(T: type Option[uint], p: string): T = except CatchableError: raise newException(ValueError, "Invalid unsigned integer") -## Configuration validation - -let DbUrlRegex = re"^[\w\+]+:\/\/[\w\/\\\.\:\@]+$" - -proc validateDbUrl*(val: string): ConfResult[string] = - let val = val.strip() - - if val == "" or val == "none" or val.match(DbUrlRegex): - ok(val) - else: - err("invalid 'db url' option format: " & val) - ## Load proc readValue*(r: var TomlReader, value: var crypto.PrivateKey) {.raises: [SerializationError].} = diff --git a/waku/common/databases/dburl.nim b/waku/common/databases/dburl.nim index affdc04b67..772235bb60 100644 --- a/waku/common/databases/dburl.nim +++ b/waku/common/databases/dburl.nim @@ -7,9 +7,9 @@ import proc validateDbUrl*(dbUrl: string): Result[string, string] = ## dbUrl mimics SQLAlchemy Database URL schema ## See: https://docs.sqlalchemy.org/en/14/core/engines.html#database-urls - let regex = re"^[\w\+]+:\/\/[\w\/\\\.\:\@]+$" + let regex = re"^\w+:\/\/.+:.+@[\w*-.]+:[0-9]+\/[\w*-.]+$" let dbUrl = dbUrl.strip() - if dbUrl == "" or dbUrl == "none" or dbUrl.match(regex): + if "sqlite" in dbUrl or dbUrl == "" or dbUrl == "none" or dbUrl.match(regex): return ok(dbUrl) else: return err("invalid 'db url' option format: " & dbUrl) From 6cb9a8da86e9b7171c8ad4a2bcb5663faf369274 Mon Sep 17 00:00:00 2001 From: Vaclav Pavlin Date: Tue, 26 Sep 2023 15:02:12 +0200 Subject: [PATCH 050/274] feat(wakucanary): add latency measurement using ping protocol (#2074) --- apps/wakucanary/wakucanary.nim | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/apps/wakucanary/wakucanary.nim b/apps/wakucanary/wakucanary.nim index d769687976..fbc82f3a70 100644 --- a/apps/wakucanary/wakucanary.nim +++ b/apps/wakucanary/wakucanary.nim @@ -47,7 +47,7 @@ type logLevel* {. desc: "Sets the log level", - defaultValue: LogLevel.DEBUG, + defaultValue: LogLevel.INFO, name: "log-level", abbr: "l".}: LogLevel @@ -68,6 +68,11 @@ type defaultValue: "" name: "websocket-secure-cert-path".}: string + ping* {. + desc: "Ping the peer node to measure latency", + defaultValue: true, + name: "ping" .}: bool + proc parseCmdArg*(T: type chronos.Duration, p: string): T = try: result = chronos.seconds(parseInt(p)) @@ -98,6 +103,18 @@ proc areProtocolsSupported( return false +proc pingNode(node: WakuNode, peerInfo: RemotePeerInfo): Future[void] {.async, gcsafe.} = + try: + let conn = await node.switch.dial(peerInfo.peerId, peerInfo.addrs, PingCodec) + let pingDelay = await node.libp2pPing.ping(conn) + info "Peer response time (ms)", peerId = peerInfo.peerId, ping=pingDelay.millis + + except CatchableError: + var msg = getCurrentExceptionMsg() + if msg == "Future operation cancelled!": + msg = "timedout" + error "Failed to ping the peer", peer=peerInfo, err=msg + proc main(rng: ref HmacDrbgContext): Future[int] {.async.} = let conf: WakuCanaryConf = WakuCanaryConf.load() @@ -173,8 +190,19 @@ proc main(rng: ref HmacDrbgContext): Future[int] {.async.} = let node = builder.build().tryGet() + if conf.ping: + try: + await mountLibp2pPing(node) + except CatchableError: + error "failed to mount libp2p ping protocol: " & getCurrentExceptionMsg() + return 1 + await node.start() + var pingFut:Future[bool] + if conf.ping: + pingFut = pingNode(node, peer).withTimeout(conf.timeout) + let timedOut = not await node.connectToNodes(@[peer]).withTimeout(conf.timeout) if timedOut: error "Timedout after", timeout = conf.timeout @@ -183,6 +211,9 @@ proc main(rng: ref HmacDrbgContext): Future[int] {.async.} = let lp2pPeerStore = node.switch.peerStore let conStatus = node.peerManager.peerStore[ConnectionBook][peer.peerId] + if conf.ping: + discard await pingFut + if conStatus in [Connected, CanConnect]: let nodeProtocols = lp2pPeerStore[ProtoBook][peer.peerId] if not areProtocolsSupported(conf.protocols, nodeProtocols): From 3264a4f5877203ba085f1a4e8e02e4ffc6ce9249 Mon Sep 17 00:00:00 2001 From: Ivan Folgueira Bande <128452529+Ivansete-status@users.noreply.github.com> Date: Tue, 26 Sep 2023 16:32:51 +0200 Subject: [PATCH 051/274] fix: libwaku.nim: unsubscribe -> unsubscribeAll to make it build properly (#2082) * libwaku.nim: unsubscribe -> unsubscribeAll to make it build properly We introduced a change in the next PR https://github.com/waku-org/nwaku/pull/1983/ that made the `libwaku` to stop building properly (make libwaku) because a signature change in the `unsubscribe` proc of waku/waku_relay/protocol.nim. This commit is a temporary workaround to make it work, and not block any ongoing PR tests, although not exactly as it is expected because we are unsubscribing from all topics. * ci.yml: adds library/** to force tests when changes under that folder --- .github/workflows/ci.yml | 1 + .../requests/protocols/relay_request.nim | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5009efe379..481a5f82a5 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -33,6 +33,7 @@ jobs: - 'vendor/**' - 'Makefile' - 'waku.nimble' + - 'library/**' v2: - 'waku/**' diff --git a/library/waku_thread/inter_thread_communication/requests/protocols/relay_request.nim b/library/waku_thread/inter_thread_communication/requests/protocols/relay_request.nim index dfa2fd7e45..3315348bde 100644 --- a/library/waku_thread/inter_thread_communication/requests/protocols/relay_request.nim +++ b/library/waku_thread/inter_thread_communication/requests/protocols/relay_request.nim @@ -99,7 +99,8 @@ proc process*(self: ptr RelayRequest, node.wakuRelay.subscribe($self.pubsubTopic, self.relayEventCallback) of UNSUBSCRIBE: - node.wakuRelay.unsubscribe($self.pubsubTopic) + # TODO: properly perform 'unsubscribe' + node.wakuRelay.unsubscribeAll($self.pubsubTopic) of PUBLISH: let numPeers = await node.wakuRelay.publish($self.pubsubTopic, From 56dbe2a7e141306da28ec399721301d66851a4bb Mon Sep 17 00:00:00 2001 From: Simon-Pierre Vivier Date: Tue, 26 Sep 2023 15:53:46 -0400 Subject: [PATCH 052/274] feat: added RELAY openapi definitions (#2081) --- tests/wakunode_rest/test_rest_relay.nim | 14 +-- waku/waku_api/rest/relay/client.nim | 16 +-- waku/waku_api/rest/relay/handlers.nim | 42 ++++---- waku/waku_api/rest/relay/openapi.yaml | 134 ++++++++++++++++++++---- waku/waku_api/rest/relay/types.nim | 5 - 5 files changed, 149 insertions(+), 62 deletions(-) diff --git a/tests/wakunode_rest/test_rest_relay.nim b/tests/wakunode_rest/test_rest_relay.nim index be444c3e9a..e3fc2130bf 100644 --- a/tests/wakunode_rest/test_rest_relay.nim +++ b/tests/wakunode_rest/test_rest_relay.nim @@ -57,8 +57,7 @@ suite "Waku v2 Rest API - Relay": # When let client = newRestHttpClient(initTAddress(restAddress, restPort)) - let requestBody = RelayPostSubscriptionsRequest(pubSubTopics) - let response = await client.relayPostSubscriptionsV1(requestBody) + let response = await client.relayPostSubscriptionsV1(pubSubTopics) # Then check: @@ -111,8 +110,7 @@ suite "Waku v2 Rest API - Relay": # When let client = newRestHttpClient(initTAddress(restAddress, restPort)) - let requestBody = RelayDeleteSubscriptionsRequest(pubSubTopics) - let response = await client.relayDeleteSubscriptionsV1(requestBody) + let response = await client.relayDeleteSubscriptionsV1(pubSubTopics) # Then check: @@ -256,8 +254,7 @@ suite "Waku v2 Rest API - Relay": # When let client = newRestHttpClient(initTAddress(restAddress, restPort)) - let requestBody = RelayPostSubscriptionsRequest(contentTopics) - let response = await client.relayPostAutoSubscriptionsV1(requestBody) + let response = await client.relayPostAutoSubscriptionsV1(contentTopics) # Then check: @@ -306,8 +303,7 @@ suite "Waku v2 Rest API - Relay": # When let client = newRestHttpClient(initTAddress(restAddress, restPort)) - let requestBody = RelayDeleteSubscriptionsRequest(contentTopics) - let response = await client.relayDeleteAutoSubscriptionsV1(requestBody) + let response = await client.relayDeleteAutoSubscriptionsV1(contentTopics) # Then check: @@ -400,7 +396,7 @@ suite "Waku v2 Rest API - Relay": toSeq(node.wakuRelay.subscribedTopics).len == 1 # When - let response = await client.relayPostAutoMessagesV1(DefaultContentTopic, RelayWakuMessage( + let response = await client.relayPostAutoMessagesV1(RelayWakuMessage( payload: base64.encode("TEST-PAYLOAD"), contentTopic: some(DefaultContentTopic), timestamp: some(int64(2022)) diff --git a/waku/waku_api/rest/relay/client.nim b/waku/waku_api/rest/relay/client.nim index 46bdb64647..65f12e19d6 100644 --- a/waku/waku_api/rest/relay/client.nim +++ b/waku/waku_api/rest/relay/client.nim @@ -45,12 +45,12 @@ proc decodeBytes*(t: typedesc[string], value: openarray[byte], return ok(res) # TODO: Check how we can use a constant to set the method endpoint (improve "rest" pragma under nim-presto) -proc relayPostSubscriptionsV1*(body: RelayPostSubscriptionsRequest): RestResponse[string] {.rest, endpoint: "/relay/v1/subscriptions", meth: HttpMethod.MethodPost.} -proc relayPostAutoSubscriptionsV1*(body: RelayPostSubscriptionsRequest): RestResponse[string] {.rest, endpoint: "/relay/v1/auto/subscriptions", meth: HttpMethod.MethodPost.} +proc relayPostSubscriptionsV1*(body: seq[PubsubTopic]): RestResponse[string] {.rest, endpoint: "/relay/v1/subscriptions", meth: HttpMethod.MethodPost.} +proc relayPostAutoSubscriptionsV1*(body: seq[ContentTopic]): RestResponse[string] {.rest, endpoint: "/relay/v1/auto/subscriptions", meth: HttpMethod.MethodPost.} # TODO: Check how we can use a constant to set the method endpoint (improve "rest" pragma under nim-presto) -proc relayDeleteSubscriptionsV1*(body: RelayDeleteSubscriptionsRequest): RestResponse[string] {.rest, endpoint: "/relay/v1/subscriptions", meth: HttpMethod.MethodDelete.} -proc relayDeleteAutoSubscriptionsV1*(body: RelayDeleteSubscriptionsRequest): RestResponse[string] {.rest, endpoint: "/relay/v1/auto/subscriptions", meth: HttpMethod.MethodDelete.} +proc relayDeleteSubscriptionsV1*(body: seq[PubsubTopic]): RestResponse[string] {.rest, endpoint: "/relay/v1/subscriptions", meth: HttpMethod.MethodDelete.} +proc relayDeleteAutoSubscriptionsV1*(body: seq[ContentTopic]): RestResponse[string] {.rest, endpoint: "/relay/v1/auto/subscriptions", meth: HttpMethod.MethodDelete.} proc decodeBytes*(t: typedesc[RelayGetMessagesResponse], data: openArray[byte], contentType: Opt[ContentTypeData]): RestResult[RelayGetMessagesResponse] = if MediaType.init($contentType) != MIMETYPE_JSON: @@ -70,9 +70,9 @@ proc encodeBytes*(value: RelayPostMessagesRequest, return ok(encoded) # TODO: Check how we can use a constant to set the method endpoint (improve "rest" pragma under nim-presto) -proc relayGetMessagesV1*(topic: string): RestResponse[RelayGetMessagesResponse] {.rest, endpoint: "/relay/v1/messages/{topic}", meth: HttpMethod.MethodGet.} -proc relayGetAutoMessagesV1*(topic: string): RestResponse[RelayGetMessagesResponse] {.rest, endpoint: "/relay/v1/auto/messages/{topic}", meth: HttpMethod.MethodGet.} +proc relayGetMessagesV1*(pubsubTopic: string): RestResponse[RelayGetMessagesResponse] {.rest, endpoint: "/relay/v1/messages/{pubsubTopic}", meth: HttpMethod.MethodGet.} +proc relayGetAutoMessagesV1*(contentTopic: string): RestResponse[RelayGetMessagesResponse] {.rest, endpoint: "/relay/v1/auto/messages/{contentTopic}", meth: HttpMethod.MethodGet.} # TODO: Check how we can use a constant to set the method endpoint (improve "rest" pragma under nim-presto) -proc relayPostMessagesV1*(topic: string, body: RelayPostMessagesRequest): RestResponse[string] {.rest, endpoint: "/relay/v1/messages/{topic}", meth: HttpMethod.MethodPost.} -proc relayPostAutoMessagesV1*(topic: string, body: RelayPostMessagesRequest): RestResponse[string] {.rest, endpoint: "/relay/v1/auto/messages/{topic}", meth: HttpMethod.MethodPost.} +proc relayPostMessagesV1*(pubsubTopic: string, body: RelayPostMessagesRequest): RestResponse[string] {.rest, endpoint: "/relay/v1/messages/{pubsubTopic}", meth: HttpMethod.MethodPost.} +proc relayPostAutoMessagesV1*(body: RelayPostMessagesRequest): RestResponse[string] {.rest, endpoint: "/relay/v1/auto/messages", meth: HttpMethod.MethodPost.} diff --git a/waku/waku_api/rest/relay/handlers.nim b/waku/waku_api/rest/relay/handlers.nim index 6e74db8bec..72631a2272 100644 --- a/waku/waku_api/rest/relay/handlers.nim +++ b/waku/waku_api/rest/relay/handlers.nim @@ -15,7 +15,6 @@ import ../../../waku_node, ../../../waku_relay/protocol, ../../../waku_rln_relay, - ../../../waku_rln_relay/rln/wrappers, ../../../node/waku_node, ../../message_cache, ../../cache_handlers, @@ -42,9 +41,10 @@ const futTimeout* = 5.seconds # Max time to wait for futures #### Request handlers const ROUTE_RELAY_SUBSCRIPTIONSV1* = "/relay/v1/subscriptions" -const ROUTE_RELAY_MESSAGESV1* = "/relay/v1/messages/{topic}" +const ROUTE_RELAY_MESSAGESV1* = "/relay/v1/messages/{pubsubTopic}" const ROUTE_RELAY_AUTO_SUBSCRIPTIONSV1* = "/relay/v1/auto/subscriptions" -const ROUTE_RELAY_AUTO_MESSAGESV1* = "/relay/v1/auto/messages/{topic}" +const ROUTE_RELAY_AUTO_MESSAGESV1* = "/relay/v1/auto/messages/{contentTopic}" +const ROUTE_RELAY_AUTO_MESSAGESV1_NO_TOPIC* = "/relay/v1/auto/messages" proc installRelayApiHandlers*(router: var RestRouter, node: WakuNode, cache: MessageCache[string]) = router.api(MethodPost, ROUTE_RELAY_SUBSCRIPTIONSV1) do (contentBody: Option[ContentBody]) -> RestApiResponse: @@ -60,11 +60,11 @@ proc installRelayApiHandlers*(router: var RestRouter, node: WakuNode, cache: Mes return RestApiResponse.badRequest() let reqBodyData = contentBody.get().data - let reqResult = decodeFromJsonBytes(RelayPostSubscriptionsRequest, reqBodyData) + let reqResult = decodeFromJsonBytes(seq[PubsubTopic], reqBodyData) if reqResult.isErr(): return RestApiResponse.badRequest() - let req: RelayPostSubscriptionsRequest = reqResult.get() + let req: seq[PubsubTopic] = reqResult.get() # Only subscribe to topics for which we have no subscribed topic handlers yet let newTopics = req.filterIt(not cache.isSubscribed(it)) @@ -88,11 +88,11 @@ proc installRelayApiHandlers*(router: var RestRouter, node: WakuNode, cache: Mes return RestApiResponse.badRequest() let reqBodyData = contentBody.get().data - let reqResult = decodeFromJsonBytes(RelayDeleteSubscriptionsRequest, reqBodyData) + let reqResult = decodeFromJsonBytes(seq[PubsubTopic], reqBodyData) if reqResult.isErr(): return RestApiResponse.badRequest() - let req: RelayDeleteSubscriptionsRequest = reqResult.get() + let req: seq[PubsubTopic] = reqResult.get() # Unsubscribe all handlers from requested topics for pubsubTopic in req: @@ -102,15 +102,15 @@ proc installRelayApiHandlers*(router: var RestRouter, node: WakuNode, cache: Mes # Successfully unsubscribed from all requested topics return RestApiResponse.ok() - router.api(MethodGet, ROUTE_RELAY_MESSAGESV1) do (topic: string) -> RestApiResponse: + router.api(MethodGet, ROUTE_RELAY_MESSAGESV1) do (pubsubTopic: string) -> RestApiResponse: # ## Returns all WakuMessages received on a PubSub topic since the # ## last time this method was called # ## TODO: ability to specify a return message limit # debug "get_waku_v2_relay_v1_messages", topic=topic - if topic.isErr(): + if pubsubTopic.isErr(): return RestApiResponse.badRequest() - let pubSubTopic = topic.get() + let pubSubTopic = pubsubTopic.get() let messages = cache.getMessages(pubSubTopic, clear=true) if messages.isErr(): @@ -125,10 +125,10 @@ proc installRelayApiHandlers*(router: var RestRouter, node: WakuNode, cache: Mes return resp.get() - router.api(MethodPost, ROUTE_RELAY_MESSAGESV1) do (topic: string, contentBody: Option[ContentBody]) -> RestApiResponse: - if topic.isErr(): + router.api(MethodPost, ROUTE_RELAY_MESSAGESV1) do (pubsubTopic: string, contentBody: Option[ContentBody]) -> RestApiResponse: + if pubsubTopic.isErr(): return RestApiResponse.badRequest() - let pubSubTopic = topic.get() + let pubSubTopic = pubsubTopic.get() # ensure the node is subscribed to the topic. otherwise it risks publishing # to a topic with no connected peers @@ -196,11 +196,11 @@ proc installRelayApiHandlers*(router: var RestRouter, node: WakuNode, cache: Mes return RestApiResponse.badRequest() let reqBodyData = contentBody.get().data - let reqResult = decodeFromJsonBytes(RelayPostSubscriptionsRequest, reqBodyData) + let reqResult = decodeFromJsonBytes(seq[ContentTopic], reqBodyData) if reqResult.isErr(): return RestApiResponse.badRequest() - let req: RelayPostSubscriptionsRequest = reqResult.get() + let req: seq[ContentTopic] = reqResult.get() # Only subscribe to topics for which we have no subscribed topic handlers yet let newTopics = req.filterIt(not cache.isSubscribed(it)) @@ -224,11 +224,11 @@ proc installRelayApiHandlers*(router: var RestRouter, node: WakuNode, cache: Mes return RestApiResponse.badRequest() let reqBodyData = contentBody.get().data - let reqResult = decodeFromJsonBytes(RelayDeleteSubscriptionsRequest, reqBodyData) + let reqResult = decodeFromJsonBytes(seq[ContentTopic], reqBodyData) if reqResult.isErr(): return RestApiResponse.badRequest() - let req: RelayDeleteSubscriptionsRequest = reqResult.get() + let req: seq[ContentTopic] = reqResult.get() # Unsubscribe all handlers from requested topics for contentTopic in req: @@ -238,15 +238,15 @@ proc installRelayApiHandlers*(router: var RestRouter, node: WakuNode, cache: Mes # Successfully unsubscribed from all requested topics return RestApiResponse.ok() - router.api(MethodGet, ROUTE_RELAY_AUTO_MESSAGESV1) do (topic: string) -> RestApiResponse: + router.api(MethodGet, ROUTE_RELAY_AUTO_MESSAGESV1) do (contentTopic: string) -> RestApiResponse: # ## Returns all WakuMessages received on a content topic since the # ## last time this method was called # ## TODO: ability to specify a return message limit # debug "get_waku_v2_relay_v1_auto_messages", topic=topic - if topic.isErr(): + if contentTopic.isErr(): return RestApiResponse.badRequest() - let contentTopic = topic.get() + let contentTopic = contentTopic.get() let messages = cache.getMessages(contentTopic, clear=true) if messages.isErr(): @@ -261,7 +261,7 @@ proc installRelayApiHandlers*(router: var RestRouter, node: WakuNode, cache: Mes return resp.get() - router.api(MethodPost, ROUTE_RELAY_AUTO_MESSAGESV1) do (topic: string, contentBody: Option[ContentBody]) -> RestApiResponse: + router.api(MethodPost, ROUTE_RELAY_AUTO_MESSAGESV1_NO_TOPIC) do (contentBody: Option[ContentBody]) -> RestApiResponse: # Check the request body if contentBody.isNone(): return RestApiResponse.badRequest() diff --git a/waku/waku_api/rest/relay/openapi.yaml b/waku/waku_api/rest/relay/openapi.yaml index 3b356bb313..9e20653adc 100644 --- a/waku/waku_api/rest/relay/openapi.yaml +++ b/waku/waku_api/rest/relay/openapi.yaml @@ -11,7 +11,7 @@ tags: description: Relay REST API for WakuV2 node paths: - /relay/v1/messages/{topic}: # Note the plural in messages + /relay/v1/messages/{pubsubTopic}: # Note the plural in messages get: # get_waku_v2_relay_v1_messages summary: Get the latest messages on the polled topic description: Get a list of messages that were received on a subscribed PubSub topic after the last time this method was called. @@ -20,7 +20,7 @@ paths: - relay parameters: - in: path - name: topic # Note the name is the same as in the path + name: pubsubTopic # Note the name is the same as in the path required: true schema: type: string @@ -32,7 +32,8 @@ paths: application/json: schema: $ref: '#/components/schemas/RelayGetMessagesResponse' - # TODO: Review the possible errors of this endpoint + '4XX': + description: Bad request. '5XX': description: Unexpected error. @@ -44,7 +45,7 @@ paths: - relay parameters: - in: path - name: topic # Note the name is the same as in the path + name: pubsubTopic # Note the name is the same as in the path description: The messages content topic required: true schema: @@ -57,7 +58,8 @@ paths: responses: '200': description: OK - # TODO: Review the possible errors of this endpoint + '4XX': + description: Bad request. '5XX': description: Unexpected error. @@ -72,7 +74,9 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/RelayPostSubscriptionsRequest' + type array: + items: + $ref: '#/components/schemas/PubsubTopic' responses: '200': description: OK @@ -80,7 +84,8 @@ paths: text/plain: schema: type: string - # TODO: Review the possible errors of this endpoint + '4XX': + description: Bad request. '5XX': description: Unexpected error. @@ -94,7 +99,9 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/RelayDeleteSubscriptionsRequest' + type array: + items: + $ref: '#/components/schemas/PubsubTopic' responses: '200': description: OK @@ -102,10 +109,109 @@ paths: text/plain: schema: type: string - # TODO: Review the possible errors of this endpoint + '4XX': + description: Bad request. '5XX': description: Unexpected error. + /relay/v1/auto/messages/{contentTopic}: # Note the plural in messages + get: # get_waku_v2_relay_v1_auto_messages + summary: Get the latest messages on the polled topic + description: Get a list of messages that were received on a subscribed Content topic after the last time this method was called. + operationId: getMessagesByTopic + tags: + - relay + parameters: + - in: path + name: contentTopic # Note the name is the same as in the path + required: true + schema: + type: string + description: The user ID + responses: + '200': + description: The latest messages on the polled topic. + content: + application/json: + schema: + $ref: '#/components/schemas/RelayGetMessagesResponse' + '4XX': + description: Bad request. + '5XX': + description: Unexpected error. + + /relay/v1/auto/messages: # Note the plural in messages + post: # post_waku_v2_relay_v1_auto_message + summary: Publish a message to be relayed + description: Publishes a message to be relayed on a Content topic. + operationId: postMessagesToTopic + tags: + - relay + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/RelayPostMessagesRequest' + responses: + '200': + description: OK + '4XX': + description: Bad request. + '5XX': + description: Unexpected error. + + /relay/v1/auto/subscriptions: + post: # post_waku_v2_relay_v1_auto_subscriptions + summary: Subscribe a node to an array of topics + description: Subscribe a node to an array of Content topics. + operationId: postSubscriptions + tags: + - relay + requestBody: + content: + application/json: + schema: + type array: + items: + $ref: '#/components/schemas/ContentTopic' + responses: + '200': + description: OK + content: + text/plain: + schema: + type: string + '4XX': + description: Bad request. + '5XX': + description: Unexpected error. + + delete: # delete_waku_v2_relay_v1_auto_subscriptions + summary: Unsubscribe a node from an array of topics + description: Unsubscribe a node from an array of Content topics. + operationId: deleteSubscriptions + tags: + - relay + requestBody: + content: + application/json: + schema: + type array: + items: + $ref: '#/components/schemas/ContentTopic' + responses: + '200': + description: OK + content: + text/plain: + schema: + type: string + '4XX': + description: Bad request. + '5XX': + description: Unexpected error. + + components: schemas: PubSubTopic: @@ -135,14 +241,4 @@ components: RelayPostMessagesRequest: $ref: '#/components/schemas/RelayWakuMessage' - - RelayPostSubscriptionsRequest: - type: array - items: - $ref: '#/components/schemas/PubSubTopic' - - RelayDeleteSubscriptionsRequest: - type: array - items: - $ref: '#/components/schemas/PubSubTopic' \ No newline at end of file diff --git a/waku/waku_api/rest/relay/types.nim b/waku/waku_api/rest/relay/types.nim index f11ea40c5e..76a5117b82 100644 --- a/waku/waku_api/rest/relay/types.nim +++ b/waku/waku_api/rest/relay/types.nim @@ -28,11 +28,6 @@ type RelayGetMessagesResponse* = seq[RelayWakuMessage] RelayPostMessagesRequest* = RelayWakuMessage -type - RelayPostSubscriptionsRequest* = seq[string] - RelayDeleteSubscriptionsRequest* = seq[string] - - #### Type conversion proc toRelayWakuMessage*(msg: WakuMessage): RelayWakuMessage = From cb1d2024588d7b287dfe6bb6b5825e0a2b26776e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20Soko=C5=82owski?= Date: Tue, 26 Sep 2023 12:08:07 +0200 Subject: [PATCH 053/274] ci: extract discordNotify to separate file MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Jakub Sokołowski --- ci/Jenkinsfile.release | 42 ++---------------------------------------- ci/discord.groovy | 40 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 40 deletions(-) create mode 100644 ci/discord.groovy diff --git a/ci/Jenkinsfile.release b/ci/Jenkinsfile.release index 59cceb50f6..d298badaf7 100644 --- a/ci/Jenkinsfile.release +++ b/ci/Jenkinsfile.release @@ -81,7 +81,8 @@ pipeline { } // stages post { success { script { - discordNotify( + def discord = load 'ci/discord.groovy' + discord.notify( header: 'Nim-Waku deployment successful!', cred: 'discord-waku-deployments-webhook', ) @@ -89,42 +90,3 @@ pipeline { always { sh 'docker image prune -f' } } // post } // pipeline - -def discordNotify(Map args=[:]) { - def opts = [ - header: args.header ?: 'Deployment successful!', - cred: args.cred ?: null, - ] - def repo = [ - url: GIT_URL.minus('.git'), - branch: GIT_BRANCH.minus('origin/'), - commit: GIT_COMMIT.take(8), - prev: ( - env.GIT_PREVIOUS_SUCCESSFUL_COMMIT ?: env.GIT_PREVIOUS_COMMIT ?: 'master' - ).take(8), - ] - wrap([$class: 'BuildUser']) { - BUILD_USER_ID = env.BUILD_USER_ID - } - withCredentials([ - string( - credentialsId: opts.cred, - variable: 'DISCORD_WEBHOOK', - ), - ]) { - discordSend( - link: env.BUILD_URL, - result: currentBuild.currentResult, - webhookURL: env.DISCORD_WEBHOOK, - title: "${env.JOB_NAME}#${env.BUILD_NUMBER}", - description: """ - ${opts.header} - Image: [`${IMAGE_NAME}:${IMAGE_TAG}`](https://hub.docker.com/r/${IMAGE_NAME}/tags?name=${IMAGE_TAG}) - Branch: [`${repo.branch}`](${repo.url}/commits/${repo.branch}) - Commit: [`${repo.commit}`](${repo.url}/commit/${repo.commit}) - Diff: [`${repo.prev}...${repo.commit}`](${repo.url}/compare/${repo.prev}...${repo.commit}) - By: [`${BUILD_USER_ID}`](${repo.url}/commits?author=${BUILD_USER_ID}) - """, - ) - } -} diff --git a/ci/discord.groovy b/ci/discord.groovy new file mode 100644 index 0000000000..f55ddaefc2 --- /dev/null +++ b/ci/discord.groovy @@ -0,0 +1,40 @@ +def discordNotify(Map args=[:]) { + def opts = [ + header: args.header ?: 'Deployment successful!', + cred: args.cred ?: null, + ] + def repo = [ + url: GIT_URL.minus('.git'), + branch: GIT_BRANCH.minus('origin/'), + commit: GIT_COMMIT.take(8), + prev: ( + env.GIT_PREVIOUS_SUCCESSFUL_COMMIT ?: env.GIT_PREVIOUS_COMMIT ?: 'master' + ).take(8), + ] + wrap([$class: 'BuildUser']) { + BUILD_USER_ID = env.BUILD_USER_ID + } + withCredentials([ + string( + credentialsId: opts.cred, + variable: 'DISCORD_WEBHOOK', + ), + ]) { + discordSend( + link: env.BUILD_URL, + result: currentBuild.currentResult, + webhookURL: env.DISCORD_WEBHOOK, + title: "${env.JOB_NAME}#${env.BUILD_NUMBER}", + description: """ + ${opts.header} + Image: [`${IMAGE_NAME}:${IMAGE_TAG}`](https://hub.docker.com/r/${IMAGE_NAME}/tags?name=${IMAGE_TAG}) + Branch: [`${repo.branch}`](${repo.url}/commits/${repo.branch}) + Commit: [`${repo.commit}`](${repo.url}/commit/${repo.commit}) + Diff: [`${repo.prev}...${repo.commit}`](${repo.url}/compare/${repo.prev}...${repo.commit}) + By: [`${BUILD_USER_ID}`](${repo.url}/commits?author=${BUILD_USER_ID}) + """, + ) + } +} + +return this From 56feedc58a82a5a6f00480014fb56131f3e81c79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20Soko=C5=82owski?= Date: Tue, 26 Sep 2023 12:09:20 +0200 Subject: [PATCH 054/274] ci: push images to new wakuorg/nwaku repo MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Jakub Sokołowski --- Makefile | 2 +- ci/Jenkinsfile.release | 11 +++++++++-- docs/contributors/release-process.md | 4 ++-- docs/operators/docker-quickstart.md | 14 +++++++------- docs/operators/how-to/configure.md | 4 ++-- docs/operators/how-to/run-with-rln.md | 8 ++++---- docs/operators/overview.md | 2 +- docs/operators/quickstart.md | 2 +- 8 files changed, 27 insertions(+), 20 deletions(-) diff --git a/Makefile b/Makefile index 083b4f42a3..8fe940880d 100644 --- a/Makefile +++ b/Makefile @@ -229,7 +229,7 @@ DOCKER_IMAGE_NIMFLAGS := $(DOCKER_IMAGE_NIMFLAGS) $(HEAPTRACK_PARAMS) # build a docker image for the fleet docker-image: MAKE_TARGET ?= wakunode2 docker-image: DOCKER_IMAGE_TAG ?= $(MAKE_TARGET)-$(GIT_VERSION) -docker-image: DOCKER_IMAGE_NAME ?= statusteam/nim-waku:$(DOCKER_IMAGE_TAG) +docker-image: DOCKER_IMAGE_NAME ?= wakuorg/nwaku:$(DOCKER_IMAGE_TAG) docker-image: docker build \ --build-arg="MAKE_TARGET=$(MAKE_TARGET)" \ diff --git a/ci/Jenkinsfile.release b/ci/Jenkinsfile.release index d298badaf7..25ec1bb8eb 100644 --- a/ci/Jenkinsfile.release +++ b/ci/Jenkinsfile.release @@ -24,7 +24,12 @@ pipeline { string( name: 'IMAGE_NAME', description: 'Name of Docker image to push.', - defaultValue: params.IMAGE_NAME ?: 'statusteam/nim-waku', + defaultValue: params.IMAGE_NAME ?: 'wakuorg/nwaku', + ) + string( + name: 'DOCKER_CRED', + description: 'Name of Docker Hub credential.', + defaultValue: params.DOCKER_CRED ?: 'dockerhub-vacorgbot-api-token', ) string( name: 'NIMFLAGS', @@ -72,7 +77,9 @@ pipeline { stage('Push') { steps { script { - withDockerRegistry([credentialsId: "dockerhub-statusteam-auto", url: ""]) { + withDockerRegistry([ + credentialsId: params.DOCKER_CRED, url: "" + ]) { image.push() image.push(env.IMAGE_TAG) } diff --git a/docs/contributors/release-process.md b/docs/contributors/release-process.md index 272b670760..162aafdc29 100644 --- a/docs/contributors/release-process.md +++ b/docs/contributors/release-process.md @@ -71,11 +71,11 @@ Ensure all items in this list are ticked: ### After the release 1. Announce the release on Twitter, Discord and other channels. -2. Deploy the release image to [Dockerhub](https://hub.docker.com/layers/statusteam/nim-waku/a5f8b9/images/sha256-88691a8f82bd6a4242fa99053a65b7fc4762b23a2b4e879d0f8b578c798a0e09?context=explore) by triggering [the manual Jenkins deployment job](https://ci.infra.status.im/job/nim-waku/job/manual/build). +2. Deploy the release image to [Dockerhub](https://hub.docker.com/layers/wakuorg/nwaku/a5f8b9/images/sha256-88691a8f82bd6a4242fa99053a65b7fc4762b23a2b4e879d0f8b578c798a0e09?context=explore) by triggering [the manual Jenkins deployment job](https://ci.infra.status.im/job/nim-waku/job/manual/build). > Ensure the following build parameters are set: > - `MAKE_TARGET`: `wakunode2` > - `IMAGE_TAG`: the release tag (e.g. `v0.16.0`) - > - `IMAGE_NAME`: `statusteam/nim-waku` + > - `IMAGE_NAME`: `wakuorg/nwaku` > - `NIMFLAGS`: `--colors:off -d:disableMarchNative -d:chronicles_colors:none` > - `GIT_REF` the release tag (e.g. `v0.16.0`) 3. Deploy the release to appropriate fleets: diff --git a/docs/operators/docker-quickstart.md b/docs/operators/docker-quickstart.md index d60a0beaf4..bd86caf107 100644 --- a/docs/operators/docker-quickstart.md +++ b/docs/operators/docker-quickstart.md @@ -16,16 +16,16 @@ sudo sh get-docker.sh ## Step 1: Get Docker image -Nwaku Docker images are published to the Docker Hub public registry under [`statusteam/nim-waku`](https://hub.docker.com/r/statusteam/nim-waku). -For specific releases the published images are tagged with the release version, e.g. [`statusteam/nim-waku:v0.16.0`](https://hub.docker.com/layers/statusteam/nim-waku/v0.16.0/images/sha256-7b7f14e7aa1c0a70db297dfd4d43251bda339a14da32885f57ee4b25983c9470?context=explore). +Nwaku Docker images are published to the Docker Hub public registry under [`wakuorg/nwaku`](https://hub.docker.com/r/wakuorg/nwaku). +For specific releases the published images are tagged with the release version, e.g. [`wakuorg/nwaku:v0.20.0`](https://hub.docker.com/layers/wakuorg/nwaku/v0.20.0/images/sha256-9976ac2dc536fae49b21f7b77618aa6f0efb59c694e7b3181e54c08be0c4f089?context=explore). Images are also published for each commit to the `master` branch in the [nwaku repo](https://github.com/status-im/nwaku/commits/master) and tagged with the corresponding commit hash. -See [`statusteam/nim-waku`](https://hub.docker.com/r/statusteam/nim-waku/tags) on Docker Hub for a full list of available tags. +See [`wakuorg/nwaku`](https://hub.docker.com/r/wakuorg/nwaku/tags) on Docker Hub for a full list of available tags. To pull the image of your choice, use ```bash -docker pull statusteam/nim-waku:v0.16.0 # or, whichever tag you prefer in the format statusteam/nim-waku:[tag] +docker pull wakuorg/nwaku:v0.20.0 # or, whichever tag you prefer in the format wakuorg/nwaku:[tag] ``` You can also build the Docker image locally using @@ -33,7 +33,7 @@ You can also build the Docker image locally using ```bash git clone --recurse-submodules https://github.com/waku-org/nwaku cd nwaku -docker build -t statusteam/nim-waku:latest . +docker build -t wakuorg/nwaku:latest . ``` ## Step 2: Run @@ -56,14 +56,14 @@ and any discovery ports (e.g. the Waku discv5 port) that must be reachable from As an example, consider the following command to run nwaku in a Docker container with the most typical configuration: ```bash -docker run -i -t -p 60000:60000 -p 9000:9000/udp statusteam/nim-waku:v0.16.0 \ +docker run -i -t -p 60000:60000 -p 9000:9000/udp wakuorg/nwaku:v0.20.0 \ --dns-discovery:true \ --dns-discovery-url:enrtree://AOGECG2SPND25EEFMAJ5WF3KSGJNSGV356DSTL2YVLLZWIV6SAYBM@prod.waku.nodes.status.im \ --discv5-discovery \ --nat:extip:[yourpublicip] # or, if you are behind a nat: --nat=any ``` -This runs nwaku in a new container from the `statusteam/nim-waku:v0.16.0` image, +This runs nwaku in a new container from the `wakuorg/nwaku:v0.20.0` image, connects to `wakuv2.prod` as bootstrap fleet and enables [Waku Discovery v5](https://rfc.vac.dev/spec/33/) for ambient peer discovery, while mapping the default libp2p listening port (`60000`) diff --git a/docs/operators/how-to/configure.md b/docs/operators/how-to/configure.md index 6d777bf784..b7f70d4c51 100644 --- a/docs/operators/how-to/configure.md +++ b/docs/operators/how-to/configure.md @@ -34,7 +34,7 @@ wakunode2 --tcp-port=65000 In the case of using docker to run you node you should provide the commandline options after the image name as follows: ```shell -docker run statusteam/nim-waku --tcp-port=65000 +docker run wakuorg/nwaku --tcp-port=65000 ``` Run `wakunode2 --help` to get a comprehensive list of configuration options (and its default values): @@ -73,7 +73,7 @@ WAKUNODE2_TCP_PORT=65000 wakunode2 In the case of using docker to run you node you should start the node using the `-e` command options: ```shell -docker run -e "WAKUNODE2_TCP_PORT=65000" statusteam/nim-waku +docker run -e "WAKUNODE2_TCP_PORT=65000" wakuorg/nwaku ``` This is the second configuration method in order of precedence. Any command line configuration option will override the configuration diff --git a/docs/operators/how-to/run-with-rln.md b/docs/operators/how-to/run-with-rln.md index 7804b59668..ed6d278735 100644 --- a/docs/operators/how-to/run-with-rln.md +++ b/docs/operators/how-to/run-with-rln.md @@ -2,7 +2,7 @@ This guide explains how to run a nwaku node with RLN (Rate Limiting Nullifier) enabled. -[RLN](https://rfc.vac.dev/spec/32/) is a protocol integrated into waku v2, +[RLN](https://rfc.vac.dev/spec/32/) is a protocol integrated into waku v2, which prevents spam-based attacks on the network. For further background on the research for RLN tailored to waku, refer @@ -12,7 +12,7 @@ Registering to the membership group has been left out for brevity. If you would like to register to the membership group and send messages with RLN, refer to the [on-chain chat2 tutorial](../../tutorial/onchain-rln-relay-chat2.md). -This guide specifically allows a node to participate in RLN testnet 2. +This guide specifically allows a node to participate in RLN testnet 2. You may alter the rln-specific arguments as required. ## Prerequisites @@ -55,7 +55,7 @@ If you are running the nwaku node within docker, follow [Step 2](../docker-quick export WAKU_FLEET= export SEPOLIA_WS_NODE_ADDRESS= export RLN_RELAY_CONTRACT_ADDRESS="0xF471d71E9b1455bBF4b85d475afb9BB0954A29c4" # Replace this with any compatible implementation -docker run -i -t -p 60000:60000 -p 9000:9000/udp statusteam/nim-waku:v0.12.0 \ +docker run -i -t -p 60000:60000 -p 9000:9000/udp wakuorg/nwaku:v0.20.0 \ --dns-discovery:true \ --dns-discovery-url:"$WAKU_FLEET" \ --discv5-discovery \ @@ -86,4 +86,4 @@ You can also refer to the periodic logging, for a few metrics like - - number of invalid messages -> Note: This guide will be updated in the future to include features like slashing. \ No newline at end of file +> Note: This guide will be updated in the future to include features like slashing. diff --git a/docs/operators/overview.md b/docs/operators/overview.md index 37ab3ea988..28ca9ff0f8 100644 --- a/docs/operators/overview.md +++ b/docs/operators/overview.md @@ -17,7 +17,7 @@ or download a precompiled binary from our [releases page](https://github.com/wak If you'd like to test latest changes without building the binaries yourself, you can refer to [nightly release](https://github.com/waku-org/nwaku/releases/tag/nightly). -Docker images are published to [statusteam/nim-waku](https://hub.docker.com/r/statusteam/nim-waku/tags) on Docker Hub. +Docker images are published to [wakuorg/nwaku](https://hub.docker.com/r/wakuorg/nwaku/tags) on Docker Hub. See our [Docker quickstart guide](./docker-quickstart.md) to run nwaku in a Docker container. ## 2. Run diff --git a/docs/operators/quickstart.md b/docs/operators/quickstart.md index 5a6a262589..bc2fe67080 100644 --- a/docs/operators/quickstart.md +++ b/docs/operators/quickstart.md @@ -29,7 +29,7 @@ make wakunode2 ```bash docker run -i -t -p 60000:60000 -p 9000:9000/udp \ - statusteam/nim-waku:v0.12.0 \ # or, the image:tag of your choice + wakuorg/nwaku:v0.20.0 \ # or, the image:tag of your choice --dns-discovery:true \ --dns-discovery-url:enrtree://AOGECG2SPND25EEFMAJ5WF3KSGJNSGV356DSTL2YVLLZWIV6SAYBM@prod.waku.nodes.status.im \ --discv5-discovery \ From 6072fcbee6aff47c65598f4d74a06f998daaaf87 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20Soko=C5=82owski?= Date: Tue, 26 Sep 2023 12:10:23 +0200 Subject: [PATCH 055/274] ci: enforce default Docker image tags strictly MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Jakub Sokołowski --- ci/Jenkinsfile.release | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/ci/Jenkinsfile.release b/ci/Jenkinsfile.release index 25ec1bb8eb..fe24d916ba 100644 --- a/ci/Jenkinsfile.release +++ b/ci/Jenkinsfile.release @@ -19,7 +19,7 @@ pipeline { string( name: 'IMAGE_TAG', description: 'Name of Docker tag to push. Optional Parameter.', - defaultValue: params.IMAGE_TAG ?: 'deploy-wakuv2-test', + defaultValue: getDefaultImageTag() ) string( name: 'IMAGE_NAME', @@ -76,6 +76,7 @@ pipeline { } stage('Push') { + when { expression { params.IMAGE_TAG != '' } } steps { script { withDockerRegistry([ credentialsId: params.DOCKER_CRED, url: "" @@ -86,6 +87,7 @@ pipeline { } } } } // stages + post { success { script { def discord = load 'ci/discord.groovy' @@ -97,3 +99,14 @@ pipeline { always { sh 'docker image prune -f' } } // post } // pipeline + +def getDefaultImageTag() { + if (env.JOB_BASE_NAME) { + return env.JOB_BASE_NAME + } + switch (env.JOB_BASE_NAME) { + case 'docker-latest': return 'latest' + case 'docker-release': return 'stable' + default: return '' + } +} From 184479e3851f418797d827c9abcafa216fd1a478 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20Soko=C5=82owski?= Date: Tue, 26 Sep 2023 12:10:40 +0200 Subject: [PATCH 056/274] ci: push GIT_REF if it looks like a version MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Jakub Sokołowski --- ci/Jenkinsfile.release | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/ci/Jenkinsfile.release b/ci/Jenkinsfile.release index fe24d916ba..61404b99d8 100644 --- a/ci/Jenkinsfile.release +++ b/ci/Jenkinsfile.release @@ -57,7 +57,7 @@ pipeline { stage('Build') { steps { script { image = docker.build( - "${params.IMAGE_NAME}:${env.GIT_COMMIT.take(8)}", + "${params.IMAGE_NAME}:${params.IMAGE_TAG ?: env.GIT_COMMIT.take(8)}", "--label=commit='${env.GIT_COMMIT.take(8)}' " + "--build-arg=MAKE_TARGET='${params.MAKE_TARGET}' " + "--build-arg=NIMFLAGS='${params.NIMFLAGS}' " + @@ -82,7 +82,10 @@ pipeline { credentialsId: params.DOCKER_CRED, url: "" ]) { image.push() - image.push(env.IMAGE_TAG) + /* If Git ref is a tag push it as Docker tag too. */ + if (params.GIT_REF ==~ /v\d+\.\d+\.\d+.*/) { + image.push(params.GIT_REF) + } } } } } From 89854a96f6b59c91635de8522906398002e7ec1b Mon Sep 17 00:00:00 2001 From: Anton Iakimov Date: Tue, 26 Sep 2023 12:47:52 +0200 Subject: [PATCH 057/274] fix: update wakuv2 fleet DNS discovery enrtree https://github.com/status-im/infra-misc/issues/171 --- apps/chat2/chat2.nim | 4 ++-- apps/networkmonitor/README.md | 2 +- docs/operators/docker-quickstart.md | 2 +- docs/operators/droplet-quickstart.md | 4 ++-- docs/operators/how-to/configure-dns-disc.md | 4 ++-- docs/operators/how-to/run.md | 6 +++--- docs/operators/quickstart.md | 4 ++-- waku/README.md | 4 ++-- 8 files changed, 15 insertions(+), 15 deletions(-) diff --git a/apps/chat2/chat2.nim b/apps/chat2/chat2.nim index f0c4b433b1..47cb2aea5e 100644 --- a/apps/chat2/chat2.nim +++ b/apps/chat2/chat2.nim @@ -374,10 +374,10 @@ proc processInput(rfd: AsyncFD, rng: ref HmacDrbgContext) {.async.} = echo "Connecting to " & $conf.fleet & " fleet using DNS discovery..." if conf.fleet == Fleet.test: - dnsDiscoveryUrl = some("enrtree://AOGECG2SPND25EEFMAJ5WF3KSGJNSGV356DSTL2YVLLZWIV6SAYBM@test.waku.nodes.status.im") + dnsDiscoveryUrl = some("enrtree://AO47IDOLBKH72HIZZOXQP6NMRESAN7CHYWIBNXDXWRJRZWLODKII6@test.wakuv2.nodes.status.im") else: # Connect to prod by default - dnsDiscoveryUrl = some("enrtree://AOGECG2SPND25EEFMAJ5WF3KSGJNSGV356DSTL2YVLLZWIV6SAYBM@prod.waku.nodes.status.im") + dnsDiscoveryUrl = some("enrtree://ANEDLO25QVUGJOUTQFRYKWX6P4Z4GKVESBMHML7DZ6YK4LGS5FC5O@prod.wakuv2.nodes.status.im") elif conf.dnsDiscovery and conf.dnsDiscoveryUrl != "": # No pre-selected fleet. Discover nodes via DNS using user config diff --git a/apps/networkmonitor/README.md b/apps/networkmonitor/README.md index 599efe125c..79041953c8 100644 --- a/apps/networkmonitor/README.md +++ b/apps/networkmonitor/README.md @@ -39,7 +39,7 @@ Connect to the network through a given bootstrap node, with default parameters. ``` ```console -./build/networkmonitor --log-level=INFO --dns-discovery-url=enrtree://AOGECG2SPND25EEFMAJ5WF3KSGJNSGV356DSTL2YVLLZWIV6SAYBM@prod.nodes.status.im +./build/networkmonitor --log-level=INFO --dns-discovery-url=enrtree://AL65EKLJAUXKKPG43HVTML5EFFWEZ7L4LOKTLZCLJASG4DSESQZEC@prod.status.nodes.status.im ``` ## Metrics diff --git a/docs/operators/docker-quickstart.md b/docs/operators/docker-quickstart.md index bd86caf107..bf0d582c9a 100644 --- a/docs/operators/docker-quickstart.md +++ b/docs/operators/docker-quickstart.md @@ -58,7 +58,7 @@ As an example, consider the following command to run nwaku in a Docker container ```bash docker run -i -t -p 60000:60000 -p 9000:9000/udp wakuorg/nwaku:v0.20.0 \ --dns-discovery:true \ - --dns-discovery-url:enrtree://AOGECG2SPND25EEFMAJ5WF3KSGJNSGV356DSTL2YVLLZWIV6SAYBM@prod.waku.nodes.status.im \ + --dns-discovery-url:enrtree://ANEDLO25QVUGJOUTQFRYKWX6P4Z4GKVESBMHML7DZ6YK4LGS5FC5O@prod.wakuv2.nodes.status.im \ --discv5-discovery \ --nat:extip:[yourpublicip] # or, if you are behind a nat: --nat=any ``` diff --git a/docs/operators/droplet-quickstart.md b/docs/operators/droplet-quickstart.md index fb5b951423..abecf5ec44 100644 --- a/docs/operators/droplet-quickstart.md +++ b/docs/operators/droplet-quickstart.md @@ -255,8 +255,8 @@ a. Add the parent directory of the wakunode2 binary to your environment: ``` b. Choose the fleet you wish to connect your node to: - - waku prod: enrtree://AOGECG2SPND25EEFMAJ5WF3KSGJNSGV356DSTL2YVLLZWIV6SAYBM@prod.waku.nodes.status.im - - waku test: enrtree://AOGECG2SPND25EEFMAJ5WF3KSGJNSGV356DSTL2YVLLZWIV6SAYBM@test.waku.nodes.status.im + - waku prod: enrtree://ANEDLO25QVUGJOUTQFRYKWX6P4Z4GKVESBMHML7DZ6YK4LGS5FC5O@prod.wakuv2.nodes.status.im + - waku test: enrtree://AO47IDOLBKH72HIZZOXQP6NMRESAN7CHYWIBNXDXWRJRZWLODKII6@test.wakuv2.nodes.status.im ```bash export WAKU_FLEET= diff --git a/docs/operators/how-to/configure-dns-disc.md b/docs/operators/how-to/configure-dns-disc.md index de6c154393..abaf2b325d 100644 --- a/docs/operators/how-to/configure-dns-disc.md +++ b/docs/operators/how-to/configure-dns-disc.md @@ -24,7 +24,7 @@ A node will attempt connection to all discovered nodes. This can be used, for example, to connect to one of the existing fleets. Current URLs for the published fleet lists: -- production fleet: `enrtree://AOGECG2SPND25EEFMAJ5WF3KSGJNSGV356DSTL2YVLLZWIV6SAYBM@prod.waku.nodes.status.im` -- test fleet: `enrtree://AOGECG2SPND25EEFMAJ5WF3KSGJNSGV356DSTL2YVLLZWIV6SAYBM@test.waku.nodes.status.im` +- production fleet: `enrtree://ANEDLO25QVUGJOUTQFRYKWX6P4Z4GKVESBMHML7DZ6YK4LGS5FC5O@prod.wakuv2.nodes.status.im` +- test fleet: `enrtree://AO47IDOLBKH72HIZZOXQP6NMRESAN7CHYWIBNXDXWRJRZWLODKII6@test.wakuv2.nodes.status.im` See the [separate tutorial](../../tutorial/dns-disc.md) for a complete guide to DNS discovery. \ No newline at end of file diff --git a/docs/operators/how-to/run.md b/docs/operators/how-to/run.md index 2f01713e39..4cfde3285c 100644 --- a/docs/operators/how-to/run.md +++ b/docs/operators/how-to/run.md @@ -167,7 +167,7 @@ Discovery v5 will attempt to extract the ENRs of the discovered nodes as bootstr ./build/wakunode2 \ --ports-shift:1 \ --dns-discovery:true \ - --dns-discovery-url:enrtree://AOGECG2SPND25EEFMAJ5WF3KSGJNSGV356DSTL2YVLLZWIV6SAYBM@prod.waku.nodes.status.im \ + --dns-discovery-url:enrtree://ANEDLO25QVUGJOUTQFRYKWX6P4Z4GKVESBMHML7DZ6YK4LGS5FC5O@prod.wakuv2.nodes.status.im \ --discv5-discovery:true ``` @@ -182,7 +182,7 @@ Discovery v5 will attempt to extract the ENRs of the discovered nodes as bootstr ./build/wakunode2 \ --ports-shift:1 \ --dns-discovery:true \ - --dns-discovery-url:enrtree://AOGECG2SPND25EEFMAJ5WF3KSGJNSGV356DSTL2YVLLZWIV6SAYBM@test.waku.nodes.status.im \ + --dns-discovery-url:enrtree://AO47IDOLBKH72HIZZOXQP6NMRESAN7CHYWIBNXDXWRJRZWLODKII6@test.wakuv2.nodes.status.im \ --discv5-discovery:true ``` @@ -202,7 +202,7 @@ appears below. --db-path:/mnt/nwaku/data/db1/ \ --store-capacity:150000 \ --dns-discovery:true \ - --dns-discovery-url:enrtree://AOGECG2SPND25EEFMAJ5WF3KSGJNSGV356DSTL2YVLLZWIV6SAYBM@test.waku.nodes.status.im \ + --dns-discovery-url:enrtree://AO47IDOLBKH72HIZZOXQP6NMRESAN7CHYWIBNXDXWRJRZWLODKII6@test.wakuv2.nodes.status.im \ --discv5-discovery:true ``` diff --git a/docs/operators/quickstart.md b/docs/operators/quickstart.md index bc2fe67080..87ad12b4a5 100644 --- a/docs/operators/quickstart.md +++ b/docs/operators/quickstart.md @@ -18,7 +18,7 @@ cd nwaku make wakunode2 ./build/wakunode2 \ --dns-discovery:true \ - --dns-discovery-url:enrtree://AOGECG2SPND25EEFMAJ5WF3KSGJNSGV356DSTL2YVLLZWIV6SAYBM@prod.waku.nodes.status.im \ + --dns-discovery-url:enrtree://ANEDLO25QVUGJOUTQFRYKWX6P4Z4GKVESBMHML7DZ6YK4LGS5FC5O@prod.wakuv2.nodes.status.im \ --discv5-discovery \ --nat=extip:[yourpublicip] # or, if you are behind a nat: --nat=any ``` @@ -31,7 +31,7 @@ make wakunode2 docker run -i -t -p 60000:60000 -p 9000:9000/udp \ wakuorg/nwaku:v0.20.0 \ # or, the image:tag of your choice --dns-discovery:true \ - --dns-discovery-url:enrtree://AOGECG2SPND25EEFMAJ5WF3KSGJNSGV356DSTL2YVLLZWIV6SAYBM@prod.waku.nodes.status.im \ + --dns-discovery-url:enrtree://ANEDLO25QVUGJOUTQFRYKWX6P4Z4GKVESBMHML7DZ6YK4LGS5FC5O@prod.wakuv2.nodes.status.im \ --discv5-discovery \ --nat:extip:[yourpublicip] # or, if you are behind a nat: --nat=any ``` diff --git a/waku/README.md b/waku/README.md index c24fce873e..b9d7b0cda4 100644 --- a/waku/README.md +++ b/waku/README.md @@ -194,8 +194,8 @@ A node will attempt connection to all discovered nodes. This can be used, for example, to connect to one of the existing fleets. Current URLs for the published fleet lists: -- production fleet: `enrtree://AOGECG2SPND25EEFMAJ5WF3KSGJNSGV356DSTL2YVLLZWIV6SAYBM@prod.waku.nodes.status.im` -- test fleet: `enrtree://AOGECG2SPND25EEFMAJ5WF3KSGJNSGV356DSTL2YVLLZWIV6SAYBM@test.waku.nodes.status.im` +- production fleet: `enrtree://ANEDLO25QVUGJOUTQFRYKWX6P4Z4GKVESBMHML7DZ6YK4LGS5FC5O@prod.wakuv2.nodes.status.im` +- test fleet: `enrtree://AO47IDOLBKH72HIZZOXQP6NMRESAN7CHYWIBNXDXWRJRZWLODKII6@test.wakuv2.nodes.status.im` See the [separate tutorial](../../docs/tutorial/dns-disc.md) for a complete guide to DNS discovery. From 7797b2cd033f8f37fbea5696dbe28257f4fb45e4 Mon Sep 17 00:00:00 2001 From: gabrielmer <101006718+gabrielmer@users.noreply.github.com> Date: Wed, 27 Sep 2023 16:02:24 +0300 Subject: [PATCH 058/274] chore: resolving DNS IP and publishing it when no extIp is provided (#2030) --- apps/wakunode2/internal_config.nim | 40 ++++++++++++++++++-- tests/test_wakunode.nim | 61 +++++++++++++++++++++++++++++- tests/testlib/wakunode.nim | 23 ++++++++++- tests/wakunode2/test_app.nim | 3 +- 4 files changed, 120 insertions(+), 7 deletions(-) diff --git a/apps/wakunode2/internal_config.nim b/apps/wakunode2/internal_config.nim index 6da34c7c4e..a5de21eee0 100644 --- a/apps/wakunode2/internal_config.nim +++ b/apps/wakunode2/internal_config.nim @@ -1,9 +1,12 @@ import + chronicles, + chronos, + libp2p/crypto/crypto, + libp2p/multiaddress, + libp2p/nameresolving/dnsresolver, std/options, - stew/shims/net, stew/results, - libp2p/crypto/crypto, - libp2p/multiaddress + stew/shims/net import ../../waku/common/utils/nat, ../../waku/node/config, @@ -18,6 +21,23 @@ proc validateExtMultiAddrs*(vals: seq[string]): multiaddrs.add(multiaddr) return ok(multiaddrs) +proc dnsResolve*(domain: string, conf: WakuNodeConf): Future[Result[string, string]] {.async} = + + # Use conf's DNS servers + var nameServers: seq[TransportAddress] + for ip in conf.dnsAddrsNameServers: + nameServers.add(initTAddress(ip, Port(53))) # Assume all servers use port 53 + + let dnsResolver = DnsResolver.new(nameServers) + + # Resolve domain IP + let resolved = await dnsResolver.resolveIp(domain, 0.Port, Domain.AF_UNSPEC) + + if resolved.len > 0: + return ok(resolved[0].host) # Use only first answer + else: + return err("Could not resolve IP from DNS: empty response") + proc networkConfiguration*(conf: WakuNodeConf, clientId: string, ): NetConfigResult = @@ -30,7 +50,7 @@ proc networkConfiguration*(conf: WakuNodeConf, if natRes.isErr(): return err("failed to setup NAT: " & $natRes.error) - let (extIp, extTcpPort, _) = natRes.get() + var (extIp, extTcpPort, _) = natRes.get() let dns4DomainName = if conf.dns4DomainName != "": some(conf.dns4DomainName) @@ -69,6 +89,18 @@ proc networkConfiguration*(conf: WakuNodeConf, relay = conf.relay ) + # Resolve and use DNS domain IP + if dns4DomainName.isSome() and extIp.isNone(): + try: + let dnsRes = waitFor dnsResolve(conf.dns4DomainName, conf) + + if dnsRes.isErr(): + return err($dnsRes.error) # Pass error down the stack + + extIp = some(ValidIpAddress.init(dnsRes.get())) + except CatchableError: + return err("Could not update extIp to resolved DNS IP: " & getCurrentExceptionMsg()) + # Wrap in none because NetConfig does not have a default constructor # TODO: We could change bindIp in NetConfig to be something less restrictive # than ValidIpAddress, which doesn't allow default construction diff --git a/tests/test_wakunode.nim b/tests/test_wakunode.nim index fd6f21808e..7fdc15a98b 100644 --- a/tests/test_wakunode.nim +++ b/tests/test_wakunode.nim @@ -1,7 +1,7 @@ {.used.} import - std/sequtils, + std/[sequtils,strutils], stew/byteutils, stew/shims/net as stewNet, testutils/unittests, @@ -215,6 +215,65 @@ suite "WakuNode": node.announcedAddresses.len == 1 node.announcedAddresses.contains(expectedDns4Addr) + asyncTest "Node uses dns4 resolved ip in announced addresses if no extIp is provided": + let + nodeKey = generateSecp256k1Key() + bindIp = ValidIpAddress.init("0.0.0.0") + bindPort = Port(0) + + domainName = "status.im" + node = newTestWakuNode( + nodeKey, + bindIp, bindPort, + dns4DomainName = some(domainName)) + + var ipStr = "" + var enrIp = node.enr.tryGet("ip", array[4, byte]) + + if enrIp.isSome(): + ipStr &= $ipv4(enrIp.get()) + + # Check that the IP filled is the one received by the DNS lookup + # As IPs may change, we check that it's not empty, not the 0 IP and not localhost + check: + ipStr.len() > 0 + not ipStr.contains("0.0.0.0") + not ipStr.contains("127.0.0.1") + + asyncTest "Node creation fails when invalid dns4 address is provided": + let + nodeKey = generateSecp256k1Key() + bindIp = ValidIpAddress.init("0.0.0.0") + bindPort = Port(0) + + inexistentDomain = "thisdomain.doesnot.exist" + invalidDomain = "" + expectedError = "Could not resolve IP from DNS: empty response" + + var inexistentDomainErr, invalidDomainErr: string = "" + + # Create node with inexistent domain + try: + let node = newTestWakuNode( + nodeKey, + bindIp, bindPort, + dns4DomainName = some(inexistentDomain)) + except Exception as e: + inexistentDomainErr = e.msg + + # Create node with invalid domain + try: + let node = newTestWakuNode( + nodeKey, + bindIp, bindPort, + dns4DomainName = some(invalidDomain)) + except Exception as e: + invalidDomainErr = e.msg + + # Check that exceptions were raised in both cases + check: + inexistentDomainErr == expectedError + invalidDomainErr == expectedError asyncTest "Agent string is set and advertised correctly": let diff --git a/tests/testlib/wakunode.nim b/tests/testlib/wakunode.nim index ff0d4697ba..cf5b157bdb 100644 --- a/tests/testlib/wakunode.nim +++ b/tests/testlib/wakunode.nim @@ -13,6 +13,8 @@ import ../../../waku/node/peer_manager, ../../../waku/waku_enr, ../../../waku/waku_discv5, + ../../apps/wakunode2/internal_config, + ../wakunode2/test_app, ./common @@ -38,10 +40,29 @@ proc newTestWakuNode*(nodeKey: crypto.PrivateKey, discv5UdpPort = none(Port), agentString = none(string), peerStoreCapacity = none(int)): WakuNode = + + var resolvedExtIp = extIp + + # Update extPort to default value if it's missing and there's an extIp or a DNS domain + let extPort = if (extIp.isSome() or dns4DomainName.isSome()) and + extPort.isNone(): + some(Port(60000)) + else: + extPort + + if dns4DomainName.isSome() and extIp.isNone(): + let conf = defaultTestWakuNodeConf() + # If there's an error resolving the IP, an exception is thrown and test fails + let dnsRes = waitFor dnsResolve(dns4DomainName.get(), conf) + if dnsRes.isErr(): + raise newException(Defect, $dnsRes.error) + else: + resolvedExtIp = some(ValidIpAddress.init(dnsRes.get())) + let netConfigRes = NetConfig.init( bindIp = bindIp, bindPort = bindPort, - extIp = extIp, + extIp = resolvedExtIp, extPort = extPort, extMultiAddrs = extMultiAddrs, wsBindPort = wsBindPort, diff --git a/tests/wakunode2/test_app.nim b/tests/wakunode2/test_app.nim index 1779d8cfca..d0edd27df8 100644 --- a/tests/wakunode2/test_app.nim +++ b/tests/wakunode2/test_app.nim @@ -15,12 +15,13 @@ import ../testlib/common, ../testlib/wakucore -proc defaultTestWakuNodeConf(): WakuNodeConf = +proc defaultTestWakuNodeConf*(): WakuNodeConf = WakuNodeConf( listenAddress: ValidIpAddress.init("127.0.0.1"), rpcAddress: ValidIpAddress.init("127.0.0.1"), restAddress: ValidIpAddress.init("127.0.0.1"), metricsServerAddress: ValidIpAddress.init("127.0.0.1"), + dnsAddrsNameServers: @[ValidIpAddress.init("1.1.1.1"), ValidIpAddress.init("1.0.0.1")], nat: "any", maxConnections: 50, topics: @["/waku/2/default-waku/proto"], From d864db3fb546c3eb7a1cf76e42c5fd33751f8622 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lex=20Cabeza=20Romero?= Date: Wed, 27 Sep 2023 15:53:23 +0200 Subject: [PATCH 059/274] feat(coverage): Add simple coverage (#2067) * Add test aggregator to all directories. * Implement coverage script. --- .gitignore | 7 ++++ scripts/run_cov.sh | 52 +++++++++++++++++++++++++++++ tests/all_tests_common.nim | 8 +---- tests/all_tests_wakunode2.nim | 5 +-- tests/common/test_all.nim | 7 ++++ tests/test_all.nim | 6 ++++ tests/waku_archive/test_all.nim | 13 ++++++++ tests/waku_core/test_all.nim | 9 +++++ tests/waku_filter_v2/test_all.nim | 6 ++++ tests/waku_relay/test_all.nim | 5 +++ tests/waku_rln_relay/test_all.nim | 7 ++++ tests/waku_store/test_all.nim | 7 ++++ tests/wakunode2/test_all.nim | 5 +++ tests/wakunode_jsonrpc/test_all.nim | 8 +++++ tests/wakunode_rest/test_all.nim | 12 +++++++ 15 files changed, 146 insertions(+), 11 deletions(-) create mode 100755 scripts/run_cov.sh create mode 100644 tests/common/test_all.nim create mode 100644 tests/test_all.nim create mode 100644 tests/waku_archive/test_all.nim create mode 100644 tests/waku_core/test_all.nim create mode 100644 tests/waku_filter_v2/test_all.nim create mode 100644 tests/waku_relay/test_all.nim create mode 100644 tests/waku_rln_relay/test_all.nim create mode 100644 tests/waku_store/test_all.nim create mode 100644 tests/wakunode2/test_all.nim create mode 100644 tests/wakunode_jsonrpc/test_all.nim create mode 100644 tests/wakunode_rest/test_all.nim diff --git a/.gitignore b/.gitignore index 469e90e52c..bba92fab8c 100644 --- a/.gitignore +++ b/.gitignore @@ -57,3 +57,10 @@ nimbus-build-system.paths *.sqlite3-wal /examples/nodejs/build/ + +# Coverage +coverage_html_report/ +*.info + +# Wildcard +*.ignore.* diff --git a/scripts/run_cov.sh b/scripts/run_cov.sh new file mode 100755 index 0000000000..0c496c7142 --- /dev/null +++ b/scripts/run_cov.sh @@ -0,0 +1,52 @@ +#!/bin/sh + +# Check if env.sh has been loaded, or if this file is being ran from it. +# Using NIMC as a proxy for this, as it's defined in the nimbus-build-system's env.sh. +if [ -z "$NIMC" ] +then + echo "[ERROR] This tool can only be ran from the Nimbus environment. Either:" + echo "- Source env.sh 'source /path/to/env.sh', and then run the script directly '/path/to/scripts/run_cov.sh'." + echo "- Run this script as a parameter to env.sh '/path/to/env.sh /path/to/scripts/run_cov.sh'." + exit 1 +fi + +# Check for lcov tool +which lcov 1>/dev/null 2>&1 +if [ $? != 0 ] +then + echo "[ERROR] You need to have lcov installed in order to generate the test coverage report." + exit 2 +fi + +SCRIPT_PATH=$(dirname "$(realpath -s "$0")") +REPO_ROOT=$(dirname $SCRIPT_PATH) +generated_not_to_break_here="$REPO_ROOT/generated_not_to_break_here" + +if [ -f $generated_not_to_break_here ] +then + echo "The file '$generated_not_to_break_here' already exists. Do you want to continue? (y/n)" + read -r response + if [ "$response" != "y" ] + then + exit 3 + fi +fi + +output_directory="$REPO_ROOT/coverage_html_report" +base_filepath="$REPO_ROOT/tests/test_all" +nim_filepath=$base_filepath.nim +info_filepath=$base_filepath.info + +# Workaround a nim bug. See https://github.com/nim-lang/Nim/issues/12376 +touch $generated_not_to_break_here + +# Generate the coverage report +nim --debugger:native --passC:--coverage --passL:--coverage --passL:librln_v0.3.4.a --passL:-lm c $nim_filepath +lcov --base-directory . --directory . --zerocounters -q +$base_filepath +lcov --base-directory . --directory . --include "*/waku/**" --include "*/apps/**" --exclude "*/vendor/**" -c -o $info_filepath +genhtml -o $output_directory $info_filepath + +# Cleanup +rm -rf $info_filepath $base_filepath nimcache +rm $generated_not_to_break_here diff --git a/tests/all_tests_common.nim b/tests/all_tests_common.nim index e2e50a852c..1bbfd2c10b 100644 --- a/tests/all_tests_common.nim +++ b/tests/all_tests_common.nim @@ -1,9 +1,3 @@ {.used.} -# Waku common test suite -import - ./common/test_envvar_serialization, - ./common/test_confutils_envvar, - ./common/test_protobuf_validation, - ./common/test_enr_builder, - ./common/test_sqlite_migrations +import ./common/test_all diff --git a/tests/all_tests_wakunode2.nim b/tests/all_tests_wakunode2.nim index cedc5087b2..cfde01da01 100644 --- a/tests/all_tests_wakunode2.nim +++ b/tests/all_tests_wakunode2.nim @@ -1,6 +1,3 @@ ## Wakunode2 -import - ./wakunode2/test_app, - ./wakunode2/test_validators - +import ./wakunode2/test_all diff --git a/tests/common/test_all.nim b/tests/common/test_all.nim new file mode 100644 index 0000000000..d1573c5894 --- /dev/null +++ b/tests/common/test_all.nim @@ -0,0 +1,7 @@ +import + ./test_base64_codec, + ./test_confutils_envvar, + ./test_enr_builder, + ./test_envvar_serialization, + ./test_protobuf_validation, + ./test_sqlite_migrations diff --git a/tests/test_all.nim b/tests/test_all.nim new file mode 100644 index 0000000000..2138adc3be --- /dev/null +++ b/tests/test_all.nim @@ -0,0 +1,6 @@ +{.used.} + +import + ./all_tests_common, + ./all_tests_waku, + ./all_tests_wakunode2 diff --git a/tests/waku_archive/test_all.nim b/tests/waku_archive/test_all.nim new file mode 100644 index 0000000000..9d45d99a1b --- /dev/null +++ b/tests/waku_archive/test_all.nim @@ -0,0 +1,13 @@ +{.used.} + +import + ./test_driver_postgres_query, + ./test_driver_postgres, + ./test_driver_queue_index, + ./test_driver_queue_pagination, + ./test_driver_queue_query, + ./test_driver_queue, + ./test_driver_sqlite_query, + ./test_driver_sqlite, + ./test_retention_policy, + ./test_waku_archive diff --git a/tests/waku_core/test_all.nim b/tests/waku_core/test_all.nim new file mode 100644 index 0000000000..bd24a0bbec --- /dev/null +++ b/tests/waku_core/test_all.nim @@ -0,0 +1,9 @@ +{.used.} + +import + ./test_message_digest, + ./test_namespaced_topics, + ./test_peers, + ./test_published_address, + ./test_sharding, + ./test_time diff --git a/tests/waku_filter_v2/test_all.nim b/tests/waku_filter_v2/test_all.nim new file mode 100644 index 0000000000..b3856d1b7e --- /dev/null +++ b/tests/waku_filter_v2/test_all.nim @@ -0,0 +1,6 @@ +{.used.} + +import + ./test_waku_client, + ./test_waku_filter_protocol, + ./test_waku_filter diff --git a/tests/waku_relay/test_all.nim b/tests/waku_relay/test_all.nim new file mode 100644 index 0000000000..9131aeb5ee --- /dev/null +++ b/tests/waku_relay/test_all.nim @@ -0,0 +1,5 @@ +{.used.} + +import + ./test_waku_relay, + ./test_wakunode_relay diff --git a/tests/waku_rln_relay/test_all.nim b/tests/waku_rln_relay/test_all.nim new file mode 100644 index 0000000000..5d0c806d08 --- /dev/null +++ b/tests/waku_rln_relay/test_all.nim @@ -0,0 +1,7 @@ +{.used.} + +import + ./test_rln_group_manager_onchain, + ./test_rln_group_manager_static, + ./test_waku_rln_relay, + ./test_wakunode_rln_relay diff --git a/tests/waku_store/test_all.nim b/tests/waku_store/test_all.nim new file mode 100644 index 0000000000..e74805c392 --- /dev/null +++ b/tests/waku_store/test_all.nim @@ -0,0 +1,7 @@ +{.used.} + +import + ./test_resume, + ./test_rpc_codec, + ./test_waku_store, + ./test_wakunode_store diff --git a/tests/wakunode2/test_all.nim b/tests/wakunode2/test_all.nim new file mode 100644 index 0000000000..911c6a81d7 --- /dev/null +++ b/tests/wakunode2/test_all.nim @@ -0,0 +1,5 @@ +{.used.} + +import + ./test_app, + ./test_validators diff --git a/tests/wakunode_jsonrpc/test_all.nim b/tests/wakunode_jsonrpc/test_all.nim new file mode 100644 index 0000000000..17ac8b2a5a --- /dev/null +++ b/tests/wakunode_jsonrpc/test_all.nim @@ -0,0 +1,8 @@ +{.used.} + +import + ./test_jsonrpc_admin, + ./test_jsonrpc_debug, + ./test_jsonrpc_filter, + ./test_jsonrpc_relay, + ./test_jsonrpc_store diff --git a/tests/wakunode_rest/test_all.nim b/tests/wakunode_rest/test_all.nim new file mode 100644 index 0000000000..5c568820aa --- /dev/null +++ b/tests/wakunode_rest/test_all.nim @@ -0,0 +1,12 @@ +{.used.} + +import + ./test_rest_debug_serdes, + ./test_rest_debug, + ./test_rest_filter, + ./test_rest_health, + ./test_rest_legacy_filter, + ./test_rest_relay_serdes, + ./test_rest_relay, + ./test_rest_serdes, + ./test_rest_store From aaf10e08711bbc79a7a61f092a59efc61901e37d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20Soko=C5=82owski?= Date: Wed, 27 Sep 2023 16:30:20 +0200 Subject: [PATCH 060/274] fix(ci): fix name of discord notify method MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Also use absolute path to load Groovy script. Signed-off-by: Jakub Sokołowski --- ci/Jenkinsfile.release | 4 ++-- ci/discord.groovy | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/ci/Jenkinsfile.release b/ci/Jenkinsfile.release index 61404b99d8..9a2a8afefd 100644 --- a/ci/Jenkinsfile.release +++ b/ci/Jenkinsfile.release @@ -93,8 +93,8 @@ pipeline { post { success { script { - def discord = load 'ci/discord.groovy' - discord.notify( + def discord = load "${WORKSPACE}/ci/discord.groovy" + discord.send( header: 'Nim-Waku deployment successful!', cred: 'discord-waku-deployments-webhook', ) diff --git a/ci/discord.groovy b/ci/discord.groovy index f55ddaefc2..ee2f726b3d 100644 --- a/ci/discord.groovy +++ b/ci/discord.groovy @@ -1,4 +1,4 @@ -def discordNotify(Map args=[:]) { +def void send(Map args=[:]) { def opts = [ header: args.header ?: 'Deployment successful!', cred: args.cred ?: null, From c5aa97046b0fb8f0eeb325d9b4b7c2e9321487c6 Mon Sep 17 00:00:00 2001 From: Vaclav Pavlin Date: Thu, 28 Sep 2023 10:07:27 +0200 Subject: [PATCH 061/274] chore(networkmonitor): refactor setConnectedPeersMetrics, make it partially concurrent, add version (#2080) * chore(networkmonitor): refactor setConnectedPeersMetrics, make it partially concurrent, add version * add more metrics, refactor how most metrics are calculated * rework metrics table fillup * reset connErr to make sure we honour successful reconnection --- apps/networkmonitor/networkmonitor.nim | 223 +++++++++++------- apps/networkmonitor/networkmonitor_config.nim | 3 +- .../networkmonitor/networkmonitor_metrics.nim | 20 +- 3 files changed, 159 insertions(+), 87 deletions(-) diff --git a/apps/networkmonitor/networkmonitor.nim b/apps/networkmonitor/networkmonitor.nim index 3af9c5cee1..2d676c0d40 100644 --- a/apps/networkmonitor/networkmonitor.nim +++ b/apps/networkmonitor/networkmonitor.nim @@ -35,15 +35,71 @@ logScope: topics = "networkmonitor" const ReconnectTime = 60 -const MaxConnectionRetries = 10 +const MaxConnectionRetries = 5 +const ResetRetriesAfter = 1200 const AvgPingWindow = 10.0 +const git_version* {.strdefine.} = "n/a" + proc setDiscoveredPeersCapabilities( routingTableNodes: seq[Node]) = for capability in @[Relay, Store, Filter, Lightpush]: let nOfNodesWithCapability = routingTableNodes.countIt(it.record.supportsCapability(capability)) info "capabilities as per ENR waku flag", capability=capability, amount=nOfNodesWithCapability - peer_type_as_per_enr.set(int64(nOfNodesWithCapability), labelValues = [$capability]) + networkmonitor_peer_type_as_per_enr.set(int64(nOfNodesWithCapability), labelValues = [$capability]) + +proc analyzePeer( + customPeerInfo: CustomPeerInfoRef, + peerInfo: RemotePeerInfo, + node: WakuNode, + timeout: chronos.Duration + ): Future[Result[string, string]] {.async.} = + var pingDelay: chronos.Duration + + proc ping(): Future[Result[void, string]] {.async, gcsafe.} = + try: + let conn = await node.switch.dial(peerInfo.peerId, peerInfo.addrs, PingCodec) + pingDelay = await node.libp2pPing.ping(conn) + return ok() + + except CatchableError: + var msg = getCurrentExceptionMsg() + if msg == "Future operation cancelled!": + msg = "timedout" + warn "failed to ping the peer", peer=peerInfo, err=msg + + customPeerInfo.connError = msg + return err("could not ping peer: " & msg) + + let timedOut = not await ping().withTimeout(timeout) + # need this check for pingDelat == 0 because there may be a conn error before timeout + if timedOut or pingDelay == 0.millis: + customPeerInfo.retries += 1 + return err(customPeerInfo.connError) + + customPeerInfo.connError = "" + info "successfully pinged peer", peer=peerInfo, duration=pingDelay.millis + networkmonitor_peer_ping.observe(pingDelay.millis) + + if customPeerInfo.avgPingDuration == 0.millis: + customPeerInfo.avgPingDuration = pingDelay + + # TODO: check why the calculation ends up losing precision + customPeerInfo.avgPingDuration = int64((float64(customPeerInfo.avgPingDuration.millis) * (AvgPingWindow - 1.0) + float64(pingDelay.millis)) / AvgPingWindow).millis + customPeerInfo.lastPingDuration = pingDelay + + return ok(customPeerInfo.peerId) + +proc shouldReconnect(customPeerInfo: CustomPeerInfoRef): bool = + let reconnetIntervalCheck = getTime().toUnix() >= customPeerInfo.lastTimeConnected + ReconnectTime + var retriesCheck = customPeerInfo.retries < MaxConnectionRetries + + if not retriesCheck and getTime().toUnix() >= customPeerInfo.lastTimeConnected + ResetRetriesAfter: + customPeerInfo.retries = 0 + retriesCheck = true + info "resetting retries counter", peerId=customPeerInfo.peerId + + return reconnetIntervalCheck and retriesCheck # TODO: Split in discover, connect proc setConnectedPeersMetrics(discoveredNodes: seq[Node], @@ -54,11 +110,10 @@ proc setConnectedPeersMetrics(discoveredNodes: seq[Node], let currentTime = getTime().toUnix() - # Protocols and agent string and its count - var allProtocols: Table[string, int] - var allAgentStrings: Table[string, int] - var newPeers = 0 + var successfulConnections = 0 + + var analyzeFuts: seq[Future[Result[string, string]]] # iterate all newly discovered nodes for discNode in discoveredNodes: @@ -80,103 +135,104 @@ proc setConnectedPeersMetrics(discoveredNodes: seq[Node], # create new entry if new peerId found let peerId = $peerInfo.peerId - let customPeerInfo = CustomPeerInfo(peerId: peerId) + if not allPeers.hasKey(peerId): - allPeers[peerId] = customPeerInfo + allPeers[peerId] = CustomPeerInfoRef(peerId: peerId) newPeers += 1 else: info "already seen", peerId=peerId - allPeers[peerId].lastTimeDiscovered = currentTime - allPeers[peerId].enr = discNode.record.toURI() - allPeers[peerId].enrCapabilities = discNode.record.getCapabilities().mapIt($it) - allPeers[peerId].discovered += 1 + let customPeerInfo = allPeers[peerId] + + customPeerInfo.lastTimeDiscovered = currentTime + customPeerInfo.enr = discNode.record.toURI() + customPeerInfo.enrCapabilities = discNode.record.getCapabilities().mapIt($it) + customPeerInfo.discovered += 1 if not typedRecord.get().ip.isSome(): warn "ip field is not set", record=typedRecord.get() continue let ip = $typedRecord.get().ip.get().join(".") - allPeers[peerId].ip = ip + customPeerInfo.ip = ip # try to ping the peer - if getTime().toUnix() >= allPeers[peerId].lastTimeConnected + ReconnectTime and allPeers[peerId].retries < MaxConnectionRetries: - if allPeers[peerId].retries > 0: - warn "trying to dial failed peer again", peerId=peerId, retry=allPeers[peerId].retries - - var pingDelay:chronos.Duration - - proc ping(): Future[Result[void, string]] {.async, gcsafe.} = - try: - let conn = await node.switch.dial(peerInfo.peerId, peerInfo.addrs, PingCodec) - pingDelay = await node.libp2pPing.ping(conn) - return ok() - - except CatchableError: - var msg = getCurrentExceptionMsg() - if msg == "Future operation cancelled!": - msg = "timedout" - warn "failed to ping the peer", peer=peerInfo, err=msg - - allPeers[peerId].connError = msg - return err("could not ping peer: " & msg) - - let timedOut = not await ping().withTimeout(timeout) - # need this check for pingDelat == 0 because there may be a conn error before timeout - if timedOut or pingDelay == 0.millis: - allPeers[peerId].retries += 1 - continue - - info "successfully pinged peer", peer=peerInfo, duration=pingDelay.millis - peer_ping.observe(pingDelay.millis) - - if allPeers[peerId].avgPingDuration == 0.millis: - allPeers[peerId].avgPingDuration = pingDelay - - # TODO: check why the calculation ends up losing precision - allPeers[peerId].avgPingDuration = int64((float64(allPeers[peerId].avgPingDuration.millis) * (AvgPingWindow - 1.0) + float64(pingDelay.millis)) / AvgPingWindow).millis - allPeers[peerId].lastPingDuration = pingDelay - - # after connection, get supported protocols - let lp2pPeerStore = node.switch.peerStore - let nodeProtocols = lp2pPeerStore[ProtoBook][peerInfo.peerId] - allPeers[peerId].supportedProtocols = nodeProtocols - allPeers[peerId].lastTimeConnected = currentTime - - # after connection, get user-agent - let nodeUserAgent = lp2pPeerStore[AgentBook][peerInfo.peerId] - allPeers[peerId].userAgent = nodeUserAgent - - # store avaiable protocols in the network - for protocol in nodeProtocols: - if not allProtocols.hasKey(protocol): - allProtocols[protocol] = 0 - allProtocols[protocol] += 1 - - # store available user-agents in the network - if not allAgentStrings.hasKey(nodeUserAgent): - allAgentStrings[nodeUserAgent] = 0 - allAgentStrings[nodeUserAgent] += 1 - - debug "connected to peer", peer=allPeers[customPeerInfo.peerId] + if shouldReconnect(customPeerInfo): + if customPeerInfo.retries > 0: + warn "trying to dial failed peer again", peerId=peerId, retry=customPeerInfo.retries + analyzeFuts.add(analyzePeer(customPeerInfo, peerInfo, node, timeout)) + + # Wait for all connection attempts to finish + let analyzedPeers = await allFinished(analyzeFuts) + + for peerIdFut in analyzedPeers: + let peerIdRes = await peerIdFut + let peerIdStr = peerIdRes.valueOr(): + continue + + successfulConnections += 1 + let peerId = PeerId.init(peerIdStr).valueOr(): + warn "failed to parse peerId", peerId=peerIdStr + continue + var customPeerInfo = allPeers[peerIdStr] + + debug "connected to peer", peer=customPeerInfo[] + + # after connection, get supported protocols + let lp2pPeerStore = node.switch.peerStore + let nodeProtocols = lp2pPeerStore[ProtoBook][peerId] + customPeerInfo.supportedProtocols = nodeProtocols + customPeerInfo.lastTimeConnected = currentTime + + # after connection, get user-agent + let nodeUserAgent = lp2pPeerStore[AgentBook][peerId] + customPeerInfo.userAgent = nodeUserAgent info "number of newly discovered peers", amount=newPeers # inform the total connections that we did in this round - let nOfOkConnections = allProtocols.len() - info "number of successful connections", amount=nOfOkConnections + info "number of successful connections", amount=successfulConnections + +proc updateMetrics(allPeersRef: CustomPeersTableRef) {.gcsafe.} = + var allProtocols: Table[string, int] + var allAgentStrings: Table[string, int] + var countries: Table[string, int] + var connectedPeers = 0 + var failedPeers = 0 + + for peerInfo in allPeersRef.values: + if peerInfo.connError == "": + for protocol in peerInfo.supportedProtocols: + allProtocols[protocol] = allProtocols.mgetOrPut(protocol, 0) + 1 + + # store available user-agents in the network + allAgentStrings[peerInfo.userAgent] = allAgentStrings.mgetOrPut(peerInfo.userAgent, 0) + 1 + + if peerInfo.country != "": + countries[peerInfo.country] = countries.mgetOrPut(peerInfo.country, 0) + 1 - # update count on each protocol + connectedPeers += 1 + else: + failedPeers += 1 + + networkmonitor_peer_count.set(int64(connectedPeers), labelValues = ["true"]) + networkmonitor_peer_count.set(int64(failedPeers), labelValues = ["false"]) + # update count on each protocol for protocol in allProtocols.keys(): - let countOfProtocols = allProtocols[protocol] - peer_type_as_per_protocol.set(int64(countOfProtocols), labelValues = [protocol]) + let countOfProtocols = allProtocols.mgetOrPut(protocol, 0) + networkmonitor_peer_type_as_per_protocol.set(int64(countOfProtocols), labelValues = [protocol]) info "supported protocols in the network", protocol=protocol, count=countOfProtocols # update count on each user-agent for userAgent in allAgentStrings.keys(): - let countOfUserAgent = allAgentStrings[userAgent] - peer_user_agents.set(int64(countOfUserAgent), labelValues = [userAgent]) + let countOfUserAgent = allAgentStrings.mgetOrPut(userAgent, 0) + networkmonitor_peer_user_agents.set(int64(countOfUserAgent), labelValues = [userAgent]) info "user agents participating in the network", userAgent=userAgent, count=countOfUserAgent + for country in countries.keys(): + let peerCount = countries.mgetOrPut(country, 0) + networkmonitor_peer_country_count.set(int64(peerCount), labelValues = [country]) + info "number of peers per country", country=country, count=peerCount + proc populateInfoFromIp(allPeersRef: CustomPeersTableRef, restClient: RestClientRef) {.async.} = for peer in allPeersRef.keys(): @@ -209,6 +265,7 @@ proc crawlNetwork(node: WakuNode, let crawlInterval = conf.refreshInterval * 1000 while true: + let startTime = Moment.now() # discover new random nodes let discoveredNodes = await wakuDiscv5.protocol.queryRandom() @@ -223,6 +280,8 @@ proc crawlNetwork(node: WakuNode, # note random discovered nodes can be already known await setConnectedPeersMetrics(discoveredNodes, node, conf.timeout, restClient, allPeersRef) + updateMetrics(allPeersRef) + # populate info from ip addresses await populateInfoFromIp(allPeersRef, restClient) @@ -234,8 +293,12 @@ proc crawlNetwork(node: WakuNode, # Notes: # we dont run ipMajorityLoop # we dont run revalidateLoop + let endTime = Moment.now() + let elapsed = (endTime - startTime).nanos + + info "crawl duration", time=elapsed.millis - await sleepAsync(crawlInterval.millis) + await sleepAsync(crawlInterval.millis - elapsed.millis) proc retrieveDynamicBootstrapNodes(dnsDiscovery: bool, dnsDiscoveryUrl: string, dnsDiscoveryNameServers: seq[ValidIpAddress]): Result[seq[RemotePeerInfo], string] = if dnsDiscovery and dnsDiscoveryUrl != "": diff --git a/apps/networkmonitor/networkmonitor_config.nim b/apps/networkmonitor/networkmonitor_config.nim index 769c2264fb..ac5832568c 100644 --- a/apps/networkmonitor/networkmonitor_config.nim +++ b/apps/networkmonitor/networkmonitor_config.nim @@ -64,7 +64,6 @@ type defaultValue: 8009, name: "metrics-rest-port" }: uint16 - proc parseCmdArg*(T: type ValidIpAddress, p: string): T = try: result = ValidIpAddress.init(p) @@ -85,7 +84,7 @@ proc completeCmdArg*(T: type chronos.Duration, val: string): seq[string] = proc loadConfig*(T: type NetworkMonitorConf): Result[T, string] = try: - let conf = NetworkMonitorConf.load() + let conf = NetworkMonitorConf.load(version=git_version) ok(conf) except CatchableError: err(getCurrentExceptionMsg()) diff --git a/apps/networkmonitor/networkmonitor_metrics.nim b/apps/networkmonitor/networkmonitor_metrics.nim index e5905ba464..61d2d69122 100644 --- a/apps/networkmonitor/networkmonitor_metrics.nim +++ b/apps/networkmonitor/networkmonitor_metrics.nim @@ -25,22 +25,30 @@ logScope: #discovery_message_requests_outgoing_total{response=""} #discovery_message_requests_outgoing_total{response="no_response"} -declarePublicGauge peer_type_as_per_enr, +declarePublicGauge networkmonitor_peer_type_as_per_enr, "Number of peers supporting each capability according the the ENR", labels = ["capability"] -declarePublicGauge peer_type_as_per_protocol, +declarePublicGauge networkmonitor_peer_type_as_per_protocol, "Number of peers supporting each protocol, after a successful connection) ", labels = ["protocols"] -declarePublicGauge peer_user_agents, +declarePublicGauge networkmonitor_peer_user_agents, "Number of peers with each user agent", labels = ["user_agent"] -declarePublicHistogram peer_ping, +declarePublicHistogram networkmonitor_peer_ping, "Histogram tracking ping durations for discovered peers", buckets = [100.0, 200.0, 300.0, 400.0, 500.0, 600.0, 700.0, 800.0, 900.0, 1000.0, 2000.0, Inf] +declarePublicGauge networkmonitor_peer_count, + "Number of discovered peers", + labels = ["connected"] + +declarePublicGauge networkmonitor_peer_country_count, + "Number of peers per country", + labels = ["country"] + type CustomPeerInfo* = object # populated after discovery @@ -64,8 +72,10 @@ type # only after a ok/nok connection connError*: string + CustomPeerInfoRef* = ref CustomPeerInfo + # Stores information about all discovered/connected peers - CustomPeersTableRef* = TableRef[string, CustomPeerInfo] + CustomPeersTableRef* = TableRef[string, CustomPeerInfoRef] # stores the content topic and the count of rx messages ContentTopicMessageTableRef* = TableRef[string, int] From 8455b8dd1764d7e82d51e6020ac613fb17bfbe6e Mon Sep 17 00:00:00 2001 From: Ivan Folgueira Bande <128452529+Ivansete-status@users.noreply.github.com> Date: Thu, 28 Sep 2023 11:10:42 +0200 Subject: [PATCH 062/274] chore(cbindings): Adding cpp example that integrates the 'libwaku' (#2079) * Adding cpp example that integrates the `libwaku` --------- Co-authored-by: NagyZoltanPeter <113987313+NagyZoltanPeter@users.noreply.github.com> --- Makefile | 12 ++ examples/cpp/base64.cpp | 53 ++++++++ examples/cpp/base64.h | 11 ++ examples/cpp/waku.cpp | 271 ++++++++++++++++++++++++++++++++++++++++ library/libwaku.h | 8 ++ 5 files changed, 355 insertions(+) create mode 100644 examples/cpp/base64.cpp create mode 100644 examples/cpp/base64.h create mode 100644 examples/cpp/waku.cpp diff --git a/Makefile b/Makefile index 8fe940880d..97d96adbed 100644 --- a/Makefile +++ b/Makefile @@ -273,6 +273,18 @@ cwaku_example: | build libwaku vendor/nim-libbacktrace/libbacktrace_wrapper.o \ vendor/nim-libbacktrace/install/usr/lib/libbacktrace.a +cppwaku_example: | build libwaku + echo -e $(BUILD_MSG) "build/$@" && \ + g++ -o "build/$@" \ + ./examples/cpp/waku.cpp \ + ./examples/cpp/base64.cpp \ + -lwaku -Lbuild/ \ + -pthread -ldl -lm \ + -lminiupnpc -Lvendor/nim-nat-traversal/vendor/miniupnp/miniupnpc/build/ \ + -lnatpmp -Lvendor/nim-nat-traversal/vendor/libnatpmp-upstream/ \ + vendor/nim-libbacktrace/libbacktrace_wrapper.o \ + vendor/nim-libbacktrace/install/usr/lib/libbacktrace.a + nodejswaku: | build deps echo -e $(BUILD_MSG) "build/$@" && \ node-gyp build --directory=examples/nodejs/ diff --git a/examples/cpp/base64.cpp b/examples/cpp/base64.cpp new file mode 100644 index 0000000000..517e4b2a56 --- /dev/null +++ b/examples/cpp/base64.cpp @@ -0,0 +1,53 @@ + +#include +#include "base64.h" + +// Base64 encoding +// source: https://nachtimwald.com/2017/11/18/base64-encode-and-decode-in-c/ +size_t b64_encoded_size(size_t inlen) +{ + size_t ret; + + ret = inlen; + if (inlen % 3 != 0) + ret += 3 - (inlen % 3); + ret /= 3; + ret *= 4; + + return ret; +} + +const char b64chars[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + +void b64_encode(char* in, size_t len, std::vector& out) +{ + size_t elen; + size_t i; + size_t j; + size_t v; + + if (in == NULL || len == 0) + return; + + elen = b64_encoded_size(len); + out.reserve(elen+1); + + for (i=0, j=0; i> 18) & 0x3F]; + out[j+1] = b64chars[(v >> 12) & 0x3F]; + if (i+1 < len) { + out[j+2] = b64chars[(v >> 6) & 0x3F]; + } else { + out[j+2] = '='; + } + if (i+2 < len) { + out[j+3] = b64chars[v & 0x3F]; + } else { + out[j+3] = '='; + } + } +} diff --git a/examples/cpp/base64.h b/examples/cpp/base64.h new file mode 100644 index 0000000000..0994a0b693 --- /dev/null +++ b/examples/cpp/base64.h @@ -0,0 +1,11 @@ + +#ifndef _BASE64_H_ +#define _BASE64_H_ + +#include + +size_t b64_encoded_size(size_t inlen); + +void b64_encode(char* in, size_t len, std::vector& out); + +#endif diff --git a/examples/cpp/waku.cpp b/examples/cpp/waku.cpp new file mode 100644 index 0000000000..ec8346520b --- /dev/null +++ b/examples/cpp/waku.cpp @@ -0,0 +1,271 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include "base64.h" +#include "../../library/libwaku.h" + +#define WAKU_CALL(call) \ +do { \ + int ret = call; \ + if (ret != 0) { \ + std::cout << "Failed the call to: " << #call << ". Code: " << ret << "\n"; \ + } \ +} while (0) + +struct ConfigNode { + char host[128]; + int port; + char key[128]; + int relay; + char peers[2048]; +}; + +// Arguments parsing +static char doc[] = "\nC example that shows how to use the waku library."; +static char args_doc[] = ""; + +static struct argp_option options[] = { + { "host", 'h', "HOST", 0, "IP to listen for for LibP2P traffic. (default: \"0.0.0.0\")"}, + { "port", 'p', "PORT", 0, "TCP listening port. (default: \"60000\")"}, + { "key", 'k', "KEY", 0, "P2P node private key as 64 char hex string."}, + { "relay", 'r', "RELAY", 0, "Enable relay protocol: 1 or 0. (default: 1)"}, + { "peers", 'a', "PEERS", 0, "Comma-separated list of peer-multiaddress to connect\ + to. (default: \"\") e.g. \"/ip4/127.0.0.1/tcp/60001/p2p/16Uiu2HAmVFXtAfSj4EiR7mL2KvL4EE2wztuQgUSBoj2Jx2KeXFLN\""}, + { 0 } +}; + +static error_t parse_opt(int key, char *arg, struct argp_state *state) { + + struct ConfigNode *cfgNode = (ConfigNode *) state->input; + switch (key) { + case 'h': + snprintf(cfgNode->host, 128, "%s", arg); + break; + case 'p': + cfgNode->port = atoi(arg); + break; + case 'k': + snprintf(cfgNode->key, 128, "%s", arg); + break; + case 'r': + cfgNode->relay = atoi(arg); + break; + case 'a': + snprintf(cfgNode->peers, 2048, "%s", arg); + break; + case ARGP_KEY_ARG: + if (state->arg_num >= 1) /* Too many arguments. */ + argp_usage(state); + break; + case ARGP_KEY_END: + break; + default: + return ARGP_ERR_UNKNOWN; + } + + return 0; +} + +static struct argp argp = { options, parse_opt, args_doc, doc, 0, 0, 0 }; + +// Beginning of UI program logic + +enum PROGRAM_STATE { + MAIN_MENU, + SUBSCRIBE_TOPIC_MENU, + CONNECT_TO_OTHER_NODE_MENU, + PUBLISH_MESSAGE_MENU +}; + +enum PROGRAM_STATE current_state = MAIN_MENU; + +void show_main_menu() { + printf("\nPlease, select an option:\n"); + printf("\t1.) Subscribe to topic\n"); + printf("\t2.) Connect to other node\n"); + printf("\t3.) Publish a message\n"); +} + +void handle_user_input() { + char cmd[1024]; + memset(cmd, 0, 1024); + int numRead = read(0, cmd, 1024); + if (numRead <= 0) { + return; + } + + int c; + while ( (c = getchar()) != '\n' && c != EOF ) { } + + switch (atoi(cmd)) + { + case SUBSCRIBE_TOPIC_MENU: + { + printf("Indicate the Pubsubtopic to subscribe:\n"); + char pubsubTopic[128]; + scanf("%127s", pubsubTopic); + // if (!waku_relay_subscribe(pubsubTopic, &mResp)) { + // printf("Error subscribing to PubsubTopic: %s\n", mResp->data); + // } + // printf("Waku Relay subscription response: %s\n", mResp->data); + + show_main_menu(); + } + break; + + case CONNECT_TO_OTHER_NODE_MENU: + printf("Connecting to a node. Please indicate the peer Multiaddress:\n"); + printf("e.g.: /ip4/127.0.0.1/tcp/60001/p2p/16Uiu2HAmVFXtAfSj4EiR7mL2KvL4EE2wztuQgUSBoj2Jx2KeXFLN\n"); + char peerAddr[512]; + scanf("%511s", peerAddr); + // if (!waku_connect(peerAddr, 10000 /* timeoutMs */, &mResp)) { + // printf("Couldn't connect to the remote peer: %s\n", mResp->data); + // } + show_main_menu(); + break; + + case PUBLISH_MESSAGE_MENU: + { + printf("Indicate the Pubsubtopic:\n"); + char pubsubTopic[128]; + scanf("%127s", pubsubTopic); + + printf("Type the message tp publish:\n"); + char msg[1024]; + scanf("%1023s", msg); + + char jsonWakuMsg[1024]; + std::vector msgPayload; + b64_encode(msg, strlen(msg), msgPayload); + + // waku_content_topic("appName", + // 1, + // "contentTopicName", + // "encoding", + // &mResp); + + // snprintf(jsonWakuMsg, + // 1024, + // "{\"payload\":\"%s\",\"content_topic\":\"%s\"}", + // msgPayload, mResp->data); + + // free(msgPayload); + + // waku_relay_publish(pubsubTopic, jsonWakuMsg, 10000 /*timeout ms*/, &mResp); + // printf("waku relay response [%s]\n", mResp->data); + show_main_menu(); + } + break; + + case MAIN_MENU: + break; + } +} + +// End of UI program logic + +void show_help_and_exit() { + printf("Wrong parameters\n"); + exit(1); +} + +void event_handler(const char* msg, size_t len) { + printf("Receiving message %s\n", msg); +} + +void handle_error(const char* msg, size_t len) { + printf("Error: %s\n", msg); + exit(1); +} + +template +auto cify(F&& f) { + static F fn = std::forward(f); + return [](const char* msg, size_t len) { + return fn(msg, len); + }; +} + +int main(int argc, char** argv) { + + struct ConfigNode cfgNode; + // default values + snprintf(cfgNode.host, 128, "0.0.0.0"); + snprintf(cfgNode.key, 128, + "364d111d729a6eb6d2e6113e163f017b5ef03a6f94c9b5b7bb1bb36fa5cb07a9"); + cfgNode.port = 60000; + cfgNode.relay = 1; + + if (argp_parse(&argp, argc, argv, 0, 0, &cfgNode) + == ARGP_ERR_UNKNOWN) { + show_help_and_exit(); + } + + char jsonConfig[1024]; + snprintf(jsonConfig, 1024, "{ \ + \"host\": \"%s\", \ + \"port\": %d, \ + \"key\": \"%s\", \ + \"relay\": %s, \ + }", cfgNode.host, + cfgNode.port, + cfgNode.key, + cfgNode.relay ? "true":"false"); + + WAKU_CALL(waku_new(jsonConfig, cify([](const char* msg, size_t len) { + std::cout << "Error: " << msg << std::endl; + exit(1); + }))); + + // example on how to retrieve a value from the `libwaku` callback. + std::string defaultPubsubTopic; + WAKU_CALL(waku_default_pubsub_topic(cify([&defaultPubsubTopic](const char* msg, size_t len) { + defaultPubsubTopic = msg; + }))); + + std::cout << "Default pubsub topic: " << defaultPubsubTopic << std::endl; + + WAKU_CALL(waku_version(cify([&](const char* msg, size_t len) { + std::cout << "Git Version: " << msg << std::endl; + }))); + + printf("Bind addr: %s:%u\n", cfgNode.host, cfgNode.port); + printf("Waku Relay enabled: %s\n", cfgNode.relay == 1 ? "YES": "NO"); + + std::string pubsubTopic; + WAKU_CALL(waku_pubsub_topic("example", cify([&](const char* msg, size_t len) { + pubsubTopic = msg; + }))); + + std::cout << "Custom pubsub topic: " << pubsubTopic << std::endl; + + waku_set_event_callback(event_handler); + waku_start(); + + WAKU_CALL( waku_connect(cfgNode.peers, + 10000 /* timeoutMs */, + handle_error) ); + + WAKU_CALL( waku_relay_subscribe(defaultPubsubTopic.c_str(), + handle_error) ); + + std::cout << "Establishing connection with: " << cfgNode.peers << std::endl; + WAKU_CALL(waku_connect(cfgNode.peers, 10000 /* timeoutMs */, handle_error)); + + show_main_menu(); + while(1) { + handle_user_input(); + } +} diff --git a/library/libwaku.h b/library/libwaku.h index 1c383ef5cb..d2fe5cd1e4 100644 --- a/library/libwaku.h +++ b/library/libwaku.h @@ -11,6 +11,10 @@ #define RET_ERR 1 #define RET_MISSING_CALLBACK 2 +#ifdef __cplusplus +extern "C" { +#endif + typedef void (*WakuCallBack) (const char* msg, size_t len_0); // Creates a new instance of the waku node. @@ -51,4 +55,8 @@ int waku_connect(const char* peerMultiAddr, unsigned int timeoutMs, WakuCallBack onErrCb); +#ifdef __cplusplus +} +#endif + #endif /* __libwaku__ */ From e85f05b0b60c86d4a24c3f61298acd9d99d90a63 Mon Sep 17 00:00:00 2001 From: Vaclav Pavlin Date: Thu, 28 Sep 2023 13:09:41 +0200 Subject: [PATCH 063/274] fix(ci): update the dependency list in pre-release WF (#2088) --- .github/workflows/pre-release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pre-release.yml b/.github/workflows/pre-release.yml index 02293aa00c..13859983c1 100644 --- a/.github/workflows/pre-release.yml +++ b/.github/workflows/pre-release.yml @@ -114,7 +114,7 @@ jobs: create-release-candidate: runs-on: ubuntu-latest - needs: [ tag-name, build-and-publish, js-waku ] + needs: [ tag-name, build-and-publish, js-waku-node, js-waku-node-optional ] steps: - name: Checkout code uses: actions/checkout@v3 From 23b49ca53df788e7610d7adeb67172e75cb81282 Mon Sep 17 00:00:00 2001 From: gabrielmer <101006718+gabrielmer@users.noreply.github.com> Date: Fri, 29 Sep 2023 16:30:07 +0300 Subject: [PATCH 064/274] chore: adding NetConfig test suite (#2091) --- tests/all_tests_waku.nim | 1 + tests/test_waku_netconfig.nim | 340 ++++++++++++++++++++++++++++++++++ tests/testlib/wakunode.nim | 17 +- tests/wakunode2/test_app.nim | 19 +- 4 files changed, 360 insertions(+), 17 deletions(-) create mode 100644 tests/test_waku_netconfig.nim diff --git a/tests/all_tests_waku.nim b/tests/all_tests_waku.nim index f5846a0c56..2922817700 100644 --- a/tests/all_tests_waku.nim +++ b/tests/all_tests_waku.nim @@ -72,6 +72,7 @@ import ./test_peer_exchange, ./test_waku_noise, ./test_waku_noise_sessions, + ./test_waku_netconfig, ./test_waku_switch, ./test_waku_rendezvous diff --git a/tests/test_waku_netconfig.nim b/tests/test_waku_netconfig.nim new file mode 100644 index 0000000000..5ecbd258f8 --- /dev/null +++ b/tests/test_waku_netconfig.nim @@ -0,0 +1,340 @@ +{.used.} + +import + chronos, + confutils/toml/std/net, + libp2p/multiaddress, + testutils/unittests + +import + ./testlib/wakunode, + ../../waku/waku_enr/capabilities + +include + ../../waku/node/config + +proc defaultTestWakuFlags(): CapabilitiesBitfield = + CapabilitiesBitfield.init( + lightpush = false, + filter = false, + store = false, + relay = true + ) + +suite "Waku NetConfig": + + asyncTest "Create NetConfig with default values": + + let conf = defaultTestWakuNodeConf() + + let wakuFlags = defaultTestWakuFlags() + + let netConfigRes = NetConfig.init( + bindIp = conf.listenAddress, + bindPort = conf.tcpPort, + extIp = none(ValidIpAddress), + extPort = none(Port), + extMultiAddrs = @[], + wsBindPort = conf.websocketPort, + wsEnabled = conf.websocketSupport, + wssEnabled = conf.websocketSecureSupport, + dns4DomainName = none(string), + discv5UdpPort = none(Port), + wakuFlags = some(wakuFlags) + ) + + check: + netConfigRes.isOk() + + asyncTest "AnnouncedAddresses contains only bind address when no external addresses are provided": + + let conf = defaultTestWakuNodeConf() + + let netConfigRes = NetConfig.init( + bindIp = conf.listenAddress, + bindPort = conf.tcpPort + ) + + assert netConfigRes.isOk(), $netConfigRes.error + + let netConfig = netConfigRes.get() + + check: + netConfig.announcedAddresses.len == 1 # Only bind address should be present + netConfig.announcedAddresses[0] == formatListenAddress(ip4TcpEndPoint(conf.listenAddress, conf.tcpPort)) + + + asyncTest "AnnouncedAddresses contains external address if extIp/Port are provided": + + let + conf = defaultTestWakuNodeConf() + extIp = ValidIpAddress.init("1.2.3.4") + extPort = Port(1234) + + let netConfigRes = NetConfig.init( + bindIp = conf.listenAddress, + bindPort = conf.tcpPort, + extIp = some(extIp), + extPort = some(extPort) + ) + + assert netConfigRes.isOk(), $netConfigRes.error + + let netConfig = netConfigRes.get() + + check: + netConfig.announcedAddresses.len == 1 # Only external address should be present + netConfig.announcedAddresses[0] == ip4TcpEndPoint(extIp, extPort) + + asyncTest "AnnouncedAddresses contains dns4DomainName if provided": + + let + conf = defaultTestWakuNodeConf() + dns4DomainName = "example.com" + extPort = Port(1234) + + let netConfigRes = NetConfig.init( + bindIp = conf.listenAddress, + bindPort = conf.tcpPort, + dns4DomainName = some(dns4DomainName), + extPort = some(extPort) + ) + + assert netConfigRes.isOk(), $netConfigRes.error + + let netConfig = netConfigRes.get() + + check: + netConfig.announcedAddresses.len == 1 # Only DNS address should be present + netConfig.announcedAddresses[0] == dns4TcpEndPoint(dns4DomainName, extPort) + + asyncTest "AnnouncedAddresses includes extMultiAddrs when provided": + + let + conf = defaultTestWakuNodeConf() + extIp = ValidIpAddress.init("1.2.3.4") + extPort = Port(1234) + extMultiAddrs = @[ip4TcpEndPoint(extIp, extPort)] + + let netConfigRes = NetConfig.init( + bindIp = conf.listenAddress, + bindPort = conf.tcpPort, + extMultiAddrs = extMultiAddrs + ) + + assert netConfigRes.isOk(), $netConfigRes.error + + let netConfig = netConfigRes.get() + + check: + netConfig.announcedAddresses.len == 2 # Bind address + extAddress + netConfig.announcedAddresses[1] == extMultiAddrs[0] + + + asyncTest "AnnouncedAddresses uses dns4DomainName over extIp when both are provided": + + let + conf = defaultTestWakuNodeConf() + dns4DomainName = "example.com" + extIp = ValidIpAddress.init("1.2.3.4") + extPort = Port(1234) + + let netConfigRes = NetConfig.init( + bindIp = conf.listenAddress, + bindPort = conf.tcpPort, + dns4DomainName = some(dns4DomainName), + extIp = some(extIp), + extPort = some(extPort) + ) + + assert netConfigRes.isOk(), $netConfigRes.error + + let netConfig = netConfigRes.get() + + check: + netConfig.announcedAddresses.len == 1 # DNS address + netConfig.announcedAddresses[0] == dns4TcpEndPoint(dns4DomainName, extPort) + + asyncTest "AnnouncedAddresses includes WebSocket addresses when enabled": + + var + conf = defaultTestWakuNodeConf() + wssEnabled = false + + var netConfigRes = NetConfig.init( + bindIp = conf.listenAddress, + bindPort = conf.tcpPort, + wsEnabled = true, + wssEnabled = wssEnabled + ) + + assert netConfigRes.isOk(), $netConfigRes.error + + var netConfig = netConfigRes.get() + + check: + netConfig.announcedAddresses.len == 2 # Bind address + wsHostAddress + netConfig.announcedAddresses[1] == (ip4TcpEndPoint(conf.listenAddress, + conf.websocketPort) & wsFlag(wssEnabled)) + + ## Now try the same for the case of wssEnabled = true + + wssEnabled = true + + netConfigRes = NetConfig.init( + bindIp = conf.listenAddress, + bindPort = conf.tcpPort, + wsEnabled = true, + wssEnabled = wssEnabled + ) + + assert netConfigRes.isOk(), $netConfigRes.error + + netConfig = netConfigRes.get() + + check: + netConfig.announcedAddresses.len == 2 # Bind address + wsHostAddress + netConfig.announcedAddresses[1] == (ip4TcpEndPoint(conf.listenAddress, + conf.websocketPort) & wsFlag(wssEnabled)) + + asyncTest "Announced WebSocket address contains external IP if provided": + + let + conf = defaultTestWakuNodeConf() + extIp = ValidIpAddress.init("1.2.3.4") + extPort = Port(1234) + wssEnabled = false + + let netConfigRes = NetConfig.init( + bindIp = conf.listenAddress, + bindPort = conf.tcpPort, + extIp = some(extIp), + extPort = some(extPort), + wsEnabled = true, + wssEnabled = wssEnabled + ) + + assert netConfigRes.isOk(), $netConfigRes.error + + let netConfig = netConfigRes.get() + + check: + netConfig.announcedAddresses.len == 2 # External address + wsHostAddress + netConfig.announcedAddresses[1] == (ip4TcpEndPoint(extIp, + conf.websocketPort) & wsFlag(wssEnabled)) + + asyncTest "Announced WebSocket address contains dns4DomainName if provided": + + let + conf = defaultTestWakuNodeConf() + dns4DomainName = "example.com" + extPort = Port(1234) + wssEnabled = false + + let netConfigRes = NetConfig.init( + bindIp = conf.listenAddress, + bindPort = conf.tcpPort, + dns4DomainName = some(dns4DomainName), + extPort = some(extPort), + wsEnabled = true, + wssEnabled = wssEnabled + ) + + assert netConfigRes.isOk(), $netConfigRes.error + + let netConfig = netConfigRes.get() + + check: + netConfig.announcedAddresses.len == 2 # Bind address + wsHostAddress + netConfig.announcedAddresses[1] == (dns4TcpEndPoint(dns4DomainName, conf.websocketPort) & + wsFlag(wssEnabled)) + + asyncTest "Announced WebSocket address contains dns4DomainName if provided alongside extIp": + + let + conf = defaultTestWakuNodeConf() + dns4DomainName = "example.com" + extIp = ValidIpAddress.init("1.2.3.4") + extPort = Port(1234) + wssEnabled = false + + let netConfigRes = NetConfig.init( + bindIp = conf.listenAddress, + bindPort = conf.tcpPort, + dns4DomainName = some(dns4DomainName), + extIp = some(extIp), + extPort = some(extPort), + wsEnabled = true, + wssEnabled = wssEnabled + ) + + assert netConfigRes.isOk(), $netConfigRes.error + + let netConfig = netConfigRes.get() + + check: + netConfig.announcedAddresses.len == 2 # DNS address + wsHostAddress + netConfig.announcedAddresses[0] == dns4TcpEndPoint(dns4DomainName, extPort) + netConfig.announcedAddresses[1] == (dns4TcpEndPoint(dns4DomainName, conf.websocketPort) & + wsFlag(wssEnabled)) + + asyncTest "ENR is set with bindIp/Port if no extIp/Port are provided": + + let conf = defaultTestWakuNodeConf() + + let netConfigRes = NetConfig.init( + bindIp = conf.listenAddress, + bindPort = conf.tcpPort + ) + + assert netConfigRes.isOk(), $netConfigRes.error + + let netConfig = netConfigRes.get() + + check: + netConfig.enrIp.get() == conf.listenAddress + netConfig.enrPort.get() == conf.tcpPort + + asyncTest "ENR is set with extIp/Port if provided": + + let + conf = defaultTestWakuNodeConf() + extIp = ValidIpAddress.init("1.2.3.4") + extPort = Port(1234) + + let netConfigRes = NetConfig.init( + bindIp = conf.listenAddress, + bindPort = conf.tcpPort, + extIp = some(extIp), + extPort = some(extPort) + ) + + assert netConfigRes.isOk(), $netConfigRes.error + + let netConfig = netConfigRes.get() + + check: + netConfig.extIp.get() == extIp + netConfig.enrPort.get() == extPort + + asyncTest "ENR is set with dns4DomainName if provided": + + let + conf = defaultTestWakuNodeConf() + dns4DomainName = "example.com" + extPort = Port(1234) + + let netConfigRes = NetConfig.init( + bindIp = conf.listenAddress, + bindPort = conf.tcpPort, + dns4DomainName = some(dns4DomainName), + extPort = some(extPort) + ) + + assert netConfigRes.isOk(), $netConfigRes.error + + let netConfig = netConfigRes.get() + + check: + netConfig.enrMultiaddrs.contains(dns4TcpEndPoint(dns4DomainName, extPort)) + diff --git a/tests/testlib/wakunode.nim b/tests/testlib/wakunode.nim index cf5b157bdb..5920d3fcad 100644 --- a/tests/testlib/wakunode.nim +++ b/tests/testlib/wakunode.nim @@ -13,13 +13,28 @@ import ../../../waku/node/peer_manager, ../../../waku/waku_enr, ../../../waku/waku_discv5, + ../../apps/wakunode2/external_config, ../../apps/wakunode2/internal_config, - ../wakunode2/test_app, ./common # Waku node +proc defaultTestWakuNodeConf*(): WakuNodeConf = + WakuNodeConf( + tcpPort: Port(60000), + websocketPort: Port(8000), + listenAddress: ValidIpAddress.init("0.0.0.0"), + rpcAddress: ValidIpAddress.init("127.0.0.1"), + restAddress: ValidIpAddress.init("127.0.0.1"), + metricsServerAddress: ValidIpAddress.init("127.0.0.1"), + dnsAddrsNameServers: @[ValidIpAddress.init("1.1.1.1"), ValidIpAddress.init("1.0.0.1")], + nat: "any", + maxConnections: 50, + topics: @["/waku/2/default-waku/proto"], + relay: true + ) + proc newTestWakuNode*(nodeKey: crypto.PrivateKey, bindIp: ValidIpAddress, bindPort: Port, diff --git a/tests/wakunode2/test_app.nim b/tests/wakunode2/test_app.nim index d0edd27df8..fe2c735c18 100644 --- a/tests/wakunode2/test_app.nim +++ b/tests/wakunode2/test_app.nim @@ -10,23 +10,10 @@ import libp2p/multiaddress, libp2p/switch import - ../../apps/wakunode2/external_config, - ../../apps/wakunode2/app, ../testlib/common, - ../testlib/wakucore - -proc defaultTestWakuNodeConf*(): WakuNodeConf = - WakuNodeConf( - listenAddress: ValidIpAddress.init("127.0.0.1"), - rpcAddress: ValidIpAddress.init("127.0.0.1"), - restAddress: ValidIpAddress.init("127.0.0.1"), - metricsServerAddress: ValidIpAddress.init("127.0.0.1"), - dnsAddrsNameServers: @[ValidIpAddress.init("1.1.1.1"), ValidIpAddress.init("1.0.0.1")], - nat: "any", - maxConnections: 50, - topics: @["/waku/2/default-waku/proto"], - relay: true - ) + ../testlib/wakucore, + ../testlib/wakunode, + ../../apps/wakunode2/app suite "Wakunode2 - App": test "compilation version should be reported": From 8897ae1a2f9ef4dac98f982a6250ed378bc3d234 Mon Sep 17 00:00:00 2001 From: Abhimanyu Date: Sat, 30 Sep 2023 11:10:52 +0530 Subject: [PATCH 065/274] chore: add size retention policy (#2093) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * chore: add retention policy with GB or MB limitation #1885 * chore: add retention policy with GB or MB limitation * chore: updated code post review- retention policy * ci: extract discordNotify to separate file Signed-off-by: Jakub Sokołowski * ci: push images to new wakuorg/nwaku repo Signed-off-by: Jakub Sokołowski * ci: enforce default Docker image tags strictly Signed-off-by: Jakub Sokołowski * ci: push GIT_REF if it looks like a version Signed-off-by: Jakub Sokołowski * fix: update wakuv2 fleet DNS discovery enrtree https://github.com/status-im/infra-misc/issues/171 * chore: resolving DNS IP and publishing it when no extIp is provided (#2030) * feat(coverage): Add simple coverage (#2067) * Add test aggregator to all directories. * Implement coverage script. * fix(ci): fix name of discord notify method Also use absolute path to load Groovy script. Signed-off-by: Jakub Sokołowski * chore(networkmonitor): refactor setConnectedPeersMetrics, make it partially concurrent, add version (#2080) * chore(networkmonitor): refactor setConnectedPeersMetrics, make it partially concurrent, add version * add more metrics, refactor how most metrics are calculated * rework metrics table fillup * reset connErr to make sure we honour successful reconnection * chore(cbindings): Adding cpp example that integrates the 'libwaku' (#2079) * Adding cpp example that integrates the `libwaku` --------- Co-authored-by: NagyZoltanPeter <113987313+NagyZoltanPeter@users.noreply.github.com> * fix(ci): update the dependency list in pre-release WF (#2088) * chore: adding NetConfig test suite (#2091) --------- Signed-off-by: Jakub Sokołowski Co-authored-by: Jakub Sokołowski Co-authored-by: Anton Iakimov Co-authored-by: gabrielmer <101006718+gabrielmer@users.noreply.github.com> Co-authored-by: Álex Cabeza Romero Co-authored-by: Vaclav Pavlin Co-authored-by: Ivan Folgueira Bande <128452529+Ivansete-status@users.noreply.github.com> Co-authored-by: NagyZoltanPeter <113987313+NagyZoltanPeter@users.noreply.github.com> --- tests/waku_archive/test_retention_policy.nim | 40 +++++++++ waku/common/databases/db_sqlite.nim | 3 +- waku/waku_archive/driver.nim | 9 ++ .../driver/queue_driver/queue_driver.nim | 12 +++ .../driver/sqlite_driver/sqlite_driver.nim | 12 +++ .../waku_archive/retention_policy/builder.nim | 36 +++++++- .../retention_policy_size.nim | 86 +++++++++++++++++++ 7 files changed, 196 insertions(+), 2 deletions(-) create mode 100644 waku/waku_archive/retention_policy/retention_policy_size.nim diff --git a/tests/waku_archive/test_retention_policy.nim b/tests/waku_archive/test_retention_policy.nim index e08455d275..948759dd86 100644 --- a/tests/waku_archive/test_retention_policy.nim +++ b/tests/waku_archive/test_retention_policy.nim @@ -12,6 +12,7 @@ import ../../../waku/waku_archive/driver/sqlite_driver, ../../../waku/waku_archive/retention_policy, ../../../waku/waku_archive/retention_policy/retention_policy_capacity, + ../../../waku/waku_archive/retention_policy/retention_policy_size, ../testlib/common, ../testlib/wakucore @@ -53,6 +54,45 @@ suite "Waku Archive - Retention policy": ## Cleanup (waitFor driver.close()).expect("driver to close") + + test "size retention policy - windowed message deletion": + ## Given + let + # in megabytes + sizeLimit:float = 0.05 + excess = 123 + + let driver = newTestArchiveDriver() + + let retentionPolicy: RetentionPolicy = SizeRetentionPolicy.init(size=sizeLimit) + + ## When + + var putFutures = newSeq[Future[ArchiveDriverResult[void]]]() + var retentionFutures = newSeq[Future[ArchiveDriverResult[void]]]() + + for i in 1..excess: + let msg = fakeWakuMessage(payload= @[byte i], contentTopic=DefaultContentTopic, ts=Timestamp(i)) + putFutures.add(driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)) + retentionFutures.add(retentionPolicy.execute(driver)) + + # waitFor is used to synchronously wait for the futures to complete. + discard waitFor allFinished(putFutures & retentionFutures) + + ## Then + # calculate the current database size + let pageSize = (waitFor driver.getPagesSize()).tryGet() + let pageCount = (waitFor driver.getPagesCount()).tryGet() + let sizeDB = float(pageCount * pageSize) / (1024.0 * 1024.0) + + check: + # size of the database is used to check if the storage limit has been preserved + # check the current database size with the limitSize provided by the user + # it should be lower + sizeDB <= sizeLimit + + ## Cleanup + (waitFor driver.close()).expect("driver to close") test "store capacity should be limited": ## Given diff --git a/waku/common/databases/db_sqlite.nim b/waku/common/databases/db_sqlite.nim index 48eeaa361f..f8dab5f6ad 100644 --- a/waku/common/databases/db_sqlite.nim +++ b/waku/common/databases/db_sqlite.nim @@ -484,4 +484,5 @@ proc performSqliteVacuum*(db: SqliteDatabase): DatabaseResult[void] = if resVacuum.isErr(): return err("failed to execute vacuum: " & resVacuum.error) - debug "finished sqlite database vacuuming" \ No newline at end of file + debug "finished sqlite database vacuuming" + ok() \ No newline at end of file diff --git a/waku/waku_archive/driver.nim b/waku/waku_archive/driver.nim index c3f2accd16..4e2f33b5eb 100644 --- a/waku/waku_archive/driver.nim +++ b/waku/waku_archive/driver.nim @@ -45,6 +45,15 @@ method getMessages*(driver: ArchiveDriver, method getMessagesCount*(driver: ArchiveDriver): Future[ArchiveDriverResult[int64]] {.base, async.} = discard +method getPagesCount*(driver: ArchiveDriver): + Future[ArchiveDriverResult[int64]] {.base, async.} = discard + +method getPagesSize*(driver: ArchiveDriver): + Future[ArchiveDriverResult[int64]] {.base, async.} = discard + +method performsVacuum*(driver: ArchiveDriver): + Future[ArchiveDriverResult[void]] {.base, async.} = discard + method getOldestMessageTimestamp*(driver: ArchiveDriver): Future[ArchiveDriverResult[Timestamp]] {.base, async.} = discard diff --git a/waku/waku_archive/driver/queue_driver/queue_driver.nim b/waku/waku_archive/driver/queue_driver/queue_driver.nim index 9a8b54f852..86f72df986 100644 --- a/waku/waku_archive/driver/queue_driver/queue_driver.nim +++ b/waku/waku_archive/driver/queue_driver/queue_driver.nim @@ -280,6 +280,18 @@ method getMessagesCount*(driver: QueueDriver): Future[ArchiveDriverResult[int64]] {.async} = return ok(int64(driver.len())) +method getPagesCount*(driver: QueueDriver): + Future[ArchiveDriverResult[int64]] {.async} = + return ok(int64(driver.len())) + +method getPagesSize*(driver: QueueDriver): + Future[ArchiveDriverResult[int64]] {.async} = + return ok(int64(driver.len())) + +method performsVacuum*(driver: QueueDriver): + Future[ArchiveDriverResult[void]] {.async.} = + return err("interface method not implemented") + method getOldestMessageTimestamp*(driver: QueueDriver): Future[ArchiveDriverResult[Timestamp]] {.async.} = return driver.first().map(proc(msg: IndexedWakuMessage): Timestamp = msg.index.receiverTime) diff --git a/waku/waku_archive/driver/sqlite_driver/sqlite_driver.nim b/waku/waku_archive/driver/sqlite_driver/sqlite_driver.nim index 8746838a97..4ad9ff8b60 100644 --- a/waku/waku_archive/driver/sqlite_driver/sqlite_driver.nim +++ b/waku/waku_archive/driver/sqlite_driver/sqlite_driver.nim @@ -109,6 +109,18 @@ method getMessagesCount*(s: SqliteDriver): Future[ArchiveDriverResult[int64]] {.async.} = return s.db.getMessageCount() +method getPagesCount*(s: SqliteDriver): + Future[ArchiveDriverResult[int64]] {.async.} = + return s.db.getPageCount() + +method getPagesSize*(s: SqliteDriver): + Future[ArchiveDriverResult[int64]] {.async.} = + return s.db.getPageSize() + +method performsVacuum*(s: SqliteDriver): + Future[ArchiveDriverResult[void]] {.async.} = + return s.db.performSqliteVacuum() + method getOldestMessageTimestamp*(s: SqliteDriver): Future[ArchiveDriverResult[Timestamp]] {.async.} = return s.db.selectOldestReceiverTimestamp() diff --git a/waku/waku_archive/retention_policy/builder.nim b/waku/waku_archive/retention_policy/builder.nim index 3cb84d7974..d968e922ef 100644 --- a/waku/waku_archive/retention_policy/builder.nim +++ b/waku/waku_archive/retention_policy/builder.nim @@ -11,7 +11,8 @@ import import ../retention_policy, ./retention_policy_time, - ./retention_policy_capacity + ./retention_policy_capacity, + ./retention_policy_size proc new*(T: type RetentionPolicy, retPolicy: string): @@ -51,5 +52,38 @@ proc new*(T: type RetentionPolicy, let retPolicy: RetentionPolicy = CapacityRetentionPolicy.init(retentionCapacity) return ok(some(retPolicy)) + elif policy == "size": + var retentionSize: string + retentionSize = policyArgs + + # captures the size unit such as Gb or Mb + let sizeUnit = retentionSize.substr(retentionSize.len-2) + # captures the string type number data of the size provided + let sizeQuantityStr = retentionSize.substr(0,retentionSize.len-3) + # to hold the numeric value data of size + var sizeQuantity: float + + if sizeUnit in ["gb", "Gb", "GB", "gB"]: + # parse the actual value into integer type var + try: + sizeQuantity = parseFloat(sizeQuantityStr) + except ValueError: + return err("invalid size retention policy argument") + # Gb data is converted into Mb for uniform processing + sizeQuantity = sizeQuantity * 1024 + elif sizeUnit in ["mb", "Mb", "MB", "mB"]: + try: + sizeQuantity = parseFloat(sizeQuantityStr) + except ValueError: + return err("invalid size retention policy argument") + else: + return err ("""invalid size retention value unit: expected "Mb" or "Gb" but got """ & sizeUnit ) + + if sizeQuantity <= 0: + return err("invalid size retention policy argument: a non-zero value is required") + + let retPolicy: RetentionPolicy = SizeRetentionPolicy.init(sizeQuantity) + return ok(some(retPolicy)) + else: return err("unknown retention policy") diff --git a/waku/waku_archive/retention_policy/retention_policy_size.nim b/waku/waku_archive/retention_policy/retention_policy_size.nim new file mode 100644 index 0000000000..6e56ccc627 --- /dev/null +++ b/waku/waku_archive/retention_policy/retention_policy_size.nim @@ -0,0 +1,86 @@ +when (NimMajor, NimMinor) < (1, 4): + {.push raises: [Defect].} +else: + {.push raises: [].} + +import + std/times, + stew/results, + chronicles, + chronos +import + ../driver, + ../retention_policy + +logScope: + topics = "waku archive retention_policy" + +# default size is 30 Gb +const DefaultRetentionSize*: float = 30_720 + +# to remove 20% of the outdated data from database +const DeleteLimit = 0.80 + +type + # SizeRetentionPolicy implements auto delete as follows: + # - sizeLimit is the size in megabytes (Mbs) the database can grow upto + # to reduce the size of the databases, remove the rows/number-of-messages + # DeleteLimit is the total number of messages to delete beyond this limit + # when the database size crosses the sizeLimit, then only a fraction of messages are kept, + # rest of the outdated message are deleted using deleteOldestMessagesNotWithinLimit(), + # upon deletion process the fragmented space is retrieve back using Vacuum process. + SizeRetentionPolicy* = ref object of RetentionPolicy + sizeLimit: float + +proc init*(T: type SizeRetentionPolicy, size=DefaultRetentionSize): T = + SizeRetentionPolicy( + sizeLimit: size + ) + +method execute*(p: SizeRetentionPolicy, + driver: ArchiveDriver): + Future[RetentionPolicyResult[void]] {.async.} = + ## when db size overshoots the database limit, shread 20% of outdated messages + + # to get the size of the database, pageCount and PageSize is required + # get page count in "messages" database + var pageCountRes = await driver.getPagesCount() + if pageCountRes.isErr(): + return err("failed to get Pages count: " & pageCountRes.error) + + var pageCount: int64 = pageCountRes.value + + # get page size of database + let pageSizeRes = await driver.getPagesSize() + var pageSize: int64 = int64(pageSizeRes.valueOr(0) div 1024) + + if pageSize == 0: + return err("failed to get Page size: " & pageSizeRes.error) + + # database size in megabytes (Mb) + var totalSizeOfDB: float = float(pageSize * pageCount)/1024.0 + + # check if current databse size crosses the db size limit + if totalSizeOfDB < p.sizeLimit: + return ok() + + # to shread/delete messsges, get the total row/message count + var numMessagesRes = await driver.getMessagesCount() + if numMessagesRes.isErr(): + return err("failed to get messages count: " & numMessagesRes.error) + var numMessages = numMessagesRes.value + + # 80% of the total messages are to be kept, delete others + let pageDeleteWindow = int(float(numMessages) * DeleteLimit) + + let res = await driver.deleteOldestMessagesNotWithinLimit(limit=pageDeleteWindow) + if res.isErr(): + return err("deleting oldest messages failed: " & res.error) + + # vacuum to get the deleted pages defragments to save storage space + # this will resize the database size + let resVaccum = await driver.performsVacuum() + if resVaccum.isErr(): + return err("vacuumming failed: " & resVaccum.error) + + return ok() From c019016545e479623e244ca92e1174673b2e1934 Mon Sep 17 00:00:00 2001 From: Hanno Cornelius <68783915+jm-clius@users.noreply.github.com> Date: Mon, 2 Oct 2023 11:07:13 +0200 Subject: [PATCH 066/274] Revert "chore: add size retention policy (#2093)" (#2097) This reverts commit 8897ae1a2f9ef4dac98f982a6250ed378bc3d234. (cherry picked from commit b213b2c385b0534481448cd6e30af18e183d0504) --- tests/waku_archive/test_retention_policy.nim | 40 --------- waku/common/databases/db_sqlite.nim | 3 +- waku/waku_archive/driver.nim | 9 -- .../driver/queue_driver/queue_driver.nim | 12 --- .../driver/sqlite_driver/sqlite_driver.nim | 12 --- .../waku_archive/retention_policy/builder.nim | 36 +------- .../retention_policy_size.nim | 86 ------------------- 7 files changed, 2 insertions(+), 196 deletions(-) delete mode 100644 waku/waku_archive/retention_policy/retention_policy_size.nim diff --git a/tests/waku_archive/test_retention_policy.nim b/tests/waku_archive/test_retention_policy.nim index 948759dd86..e08455d275 100644 --- a/tests/waku_archive/test_retention_policy.nim +++ b/tests/waku_archive/test_retention_policy.nim @@ -12,7 +12,6 @@ import ../../../waku/waku_archive/driver/sqlite_driver, ../../../waku/waku_archive/retention_policy, ../../../waku/waku_archive/retention_policy/retention_policy_capacity, - ../../../waku/waku_archive/retention_policy/retention_policy_size, ../testlib/common, ../testlib/wakucore @@ -54,45 +53,6 @@ suite "Waku Archive - Retention policy": ## Cleanup (waitFor driver.close()).expect("driver to close") - - test "size retention policy - windowed message deletion": - ## Given - let - # in megabytes - sizeLimit:float = 0.05 - excess = 123 - - let driver = newTestArchiveDriver() - - let retentionPolicy: RetentionPolicy = SizeRetentionPolicy.init(size=sizeLimit) - - ## When - - var putFutures = newSeq[Future[ArchiveDriverResult[void]]]() - var retentionFutures = newSeq[Future[ArchiveDriverResult[void]]]() - - for i in 1..excess: - let msg = fakeWakuMessage(payload= @[byte i], contentTopic=DefaultContentTopic, ts=Timestamp(i)) - putFutures.add(driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)) - retentionFutures.add(retentionPolicy.execute(driver)) - - # waitFor is used to synchronously wait for the futures to complete. - discard waitFor allFinished(putFutures & retentionFutures) - - ## Then - # calculate the current database size - let pageSize = (waitFor driver.getPagesSize()).tryGet() - let pageCount = (waitFor driver.getPagesCount()).tryGet() - let sizeDB = float(pageCount * pageSize) / (1024.0 * 1024.0) - - check: - # size of the database is used to check if the storage limit has been preserved - # check the current database size with the limitSize provided by the user - # it should be lower - sizeDB <= sizeLimit - - ## Cleanup - (waitFor driver.close()).expect("driver to close") test "store capacity should be limited": ## Given diff --git a/waku/common/databases/db_sqlite.nim b/waku/common/databases/db_sqlite.nim index f8dab5f6ad..48eeaa361f 100644 --- a/waku/common/databases/db_sqlite.nim +++ b/waku/common/databases/db_sqlite.nim @@ -484,5 +484,4 @@ proc performSqliteVacuum*(db: SqliteDatabase): DatabaseResult[void] = if resVacuum.isErr(): return err("failed to execute vacuum: " & resVacuum.error) - debug "finished sqlite database vacuuming" - ok() \ No newline at end of file + debug "finished sqlite database vacuuming" \ No newline at end of file diff --git a/waku/waku_archive/driver.nim b/waku/waku_archive/driver.nim index 4e2f33b5eb..c3f2accd16 100644 --- a/waku/waku_archive/driver.nim +++ b/waku/waku_archive/driver.nim @@ -45,15 +45,6 @@ method getMessages*(driver: ArchiveDriver, method getMessagesCount*(driver: ArchiveDriver): Future[ArchiveDriverResult[int64]] {.base, async.} = discard -method getPagesCount*(driver: ArchiveDriver): - Future[ArchiveDriverResult[int64]] {.base, async.} = discard - -method getPagesSize*(driver: ArchiveDriver): - Future[ArchiveDriverResult[int64]] {.base, async.} = discard - -method performsVacuum*(driver: ArchiveDriver): - Future[ArchiveDriverResult[void]] {.base, async.} = discard - method getOldestMessageTimestamp*(driver: ArchiveDriver): Future[ArchiveDriverResult[Timestamp]] {.base, async.} = discard diff --git a/waku/waku_archive/driver/queue_driver/queue_driver.nim b/waku/waku_archive/driver/queue_driver/queue_driver.nim index 86f72df986..9a8b54f852 100644 --- a/waku/waku_archive/driver/queue_driver/queue_driver.nim +++ b/waku/waku_archive/driver/queue_driver/queue_driver.nim @@ -280,18 +280,6 @@ method getMessagesCount*(driver: QueueDriver): Future[ArchiveDriverResult[int64]] {.async} = return ok(int64(driver.len())) -method getPagesCount*(driver: QueueDriver): - Future[ArchiveDriverResult[int64]] {.async} = - return ok(int64(driver.len())) - -method getPagesSize*(driver: QueueDriver): - Future[ArchiveDriverResult[int64]] {.async} = - return ok(int64(driver.len())) - -method performsVacuum*(driver: QueueDriver): - Future[ArchiveDriverResult[void]] {.async.} = - return err("interface method not implemented") - method getOldestMessageTimestamp*(driver: QueueDriver): Future[ArchiveDriverResult[Timestamp]] {.async.} = return driver.first().map(proc(msg: IndexedWakuMessage): Timestamp = msg.index.receiverTime) diff --git a/waku/waku_archive/driver/sqlite_driver/sqlite_driver.nim b/waku/waku_archive/driver/sqlite_driver/sqlite_driver.nim index 4ad9ff8b60..8746838a97 100644 --- a/waku/waku_archive/driver/sqlite_driver/sqlite_driver.nim +++ b/waku/waku_archive/driver/sqlite_driver/sqlite_driver.nim @@ -109,18 +109,6 @@ method getMessagesCount*(s: SqliteDriver): Future[ArchiveDriverResult[int64]] {.async.} = return s.db.getMessageCount() -method getPagesCount*(s: SqliteDriver): - Future[ArchiveDriverResult[int64]] {.async.} = - return s.db.getPageCount() - -method getPagesSize*(s: SqliteDriver): - Future[ArchiveDriverResult[int64]] {.async.} = - return s.db.getPageSize() - -method performsVacuum*(s: SqliteDriver): - Future[ArchiveDriverResult[void]] {.async.} = - return s.db.performSqliteVacuum() - method getOldestMessageTimestamp*(s: SqliteDriver): Future[ArchiveDriverResult[Timestamp]] {.async.} = return s.db.selectOldestReceiverTimestamp() diff --git a/waku/waku_archive/retention_policy/builder.nim b/waku/waku_archive/retention_policy/builder.nim index d968e922ef..3cb84d7974 100644 --- a/waku/waku_archive/retention_policy/builder.nim +++ b/waku/waku_archive/retention_policy/builder.nim @@ -11,8 +11,7 @@ import import ../retention_policy, ./retention_policy_time, - ./retention_policy_capacity, - ./retention_policy_size + ./retention_policy_capacity proc new*(T: type RetentionPolicy, retPolicy: string): @@ -52,38 +51,5 @@ proc new*(T: type RetentionPolicy, let retPolicy: RetentionPolicy = CapacityRetentionPolicy.init(retentionCapacity) return ok(some(retPolicy)) - elif policy == "size": - var retentionSize: string - retentionSize = policyArgs - - # captures the size unit such as Gb or Mb - let sizeUnit = retentionSize.substr(retentionSize.len-2) - # captures the string type number data of the size provided - let sizeQuantityStr = retentionSize.substr(0,retentionSize.len-3) - # to hold the numeric value data of size - var sizeQuantity: float - - if sizeUnit in ["gb", "Gb", "GB", "gB"]: - # parse the actual value into integer type var - try: - sizeQuantity = parseFloat(sizeQuantityStr) - except ValueError: - return err("invalid size retention policy argument") - # Gb data is converted into Mb for uniform processing - sizeQuantity = sizeQuantity * 1024 - elif sizeUnit in ["mb", "Mb", "MB", "mB"]: - try: - sizeQuantity = parseFloat(sizeQuantityStr) - except ValueError: - return err("invalid size retention policy argument") - else: - return err ("""invalid size retention value unit: expected "Mb" or "Gb" but got """ & sizeUnit ) - - if sizeQuantity <= 0: - return err("invalid size retention policy argument: a non-zero value is required") - - let retPolicy: RetentionPolicy = SizeRetentionPolicy.init(sizeQuantity) - return ok(some(retPolicy)) - else: return err("unknown retention policy") diff --git a/waku/waku_archive/retention_policy/retention_policy_size.nim b/waku/waku_archive/retention_policy/retention_policy_size.nim deleted file mode 100644 index 6e56ccc627..0000000000 --- a/waku/waku_archive/retention_policy/retention_policy_size.nim +++ /dev/null @@ -1,86 +0,0 @@ -when (NimMajor, NimMinor) < (1, 4): - {.push raises: [Defect].} -else: - {.push raises: [].} - -import - std/times, - stew/results, - chronicles, - chronos -import - ../driver, - ../retention_policy - -logScope: - topics = "waku archive retention_policy" - -# default size is 30 Gb -const DefaultRetentionSize*: float = 30_720 - -# to remove 20% of the outdated data from database -const DeleteLimit = 0.80 - -type - # SizeRetentionPolicy implements auto delete as follows: - # - sizeLimit is the size in megabytes (Mbs) the database can grow upto - # to reduce the size of the databases, remove the rows/number-of-messages - # DeleteLimit is the total number of messages to delete beyond this limit - # when the database size crosses the sizeLimit, then only a fraction of messages are kept, - # rest of the outdated message are deleted using deleteOldestMessagesNotWithinLimit(), - # upon deletion process the fragmented space is retrieve back using Vacuum process. - SizeRetentionPolicy* = ref object of RetentionPolicy - sizeLimit: float - -proc init*(T: type SizeRetentionPolicy, size=DefaultRetentionSize): T = - SizeRetentionPolicy( - sizeLimit: size - ) - -method execute*(p: SizeRetentionPolicy, - driver: ArchiveDriver): - Future[RetentionPolicyResult[void]] {.async.} = - ## when db size overshoots the database limit, shread 20% of outdated messages - - # to get the size of the database, pageCount and PageSize is required - # get page count in "messages" database - var pageCountRes = await driver.getPagesCount() - if pageCountRes.isErr(): - return err("failed to get Pages count: " & pageCountRes.error) - - var pageCount: int64 = pageCountRes.value - - # get page size of database - let pageSizeRes = await driver.getPagesSize() - var pageSize: int64 = int64(pageSizeRes.valueOr(0) div 1024) - - if pageSize == 0: - return err("failed to get Page size: " & pageSizeRes.error) - - # database size in megabytes (Mb) - var totalSizeOfDB: float = float(pageSize * pageCount)/1024.0 - - # check if current databse size crosses the db size limit - if totalSizeOfDB < p.sizeLimit: - return ok() - - # to shread/delete messsges, get the total row/message count - var numMessagesRes = await driver.getMessagesCount() - if numMessagesRes.isErr(): - return err("failed to get messages count: " & numMessagesRes.error) - var numMessages = numMessagesRes.value - - # 80% of the total messages are to be kept, delete others - let pageDeleteWindow = int(float(numMessages) * DeleteLimit) - - let res = await driver.deleteOldestMessagesNotWithinLimit(limit=pageDeleteWindow) - if res.isErr(): - return err("deleting oldest messages failed: " & res.error) - - # vacuum to get the deleted pages defragments to save storage space - # this will resize the database size - let resVaccum = await driver.performsVacuum() - if resVaccum.isErr(): - return err("vacuumming failed: " & resVaccum.error) - - return ok() From f05528d4be3d3c876a8b07f9bb7dfaae8aa8ec6e Mon Sep 17 00:00:00 2001 From: NagyZoltanPeter <113987313+NagyZoltanPeter@users.noreply.github.com> Date: Mon, 2 Oct 2023 15:38:40 +0200 Subject: [PATCH 067/274] chore: Revert lightpush error handling to allow zero peer publish again succeed (#2099) * This reverts former change on lighpush error handling, now zero peer publish still succeed. This will allow js-waku use case to succeed. * Adjust lightpush rest-api test --- tests/wakunode_rest/test_rest_lightpush.nim | 45 +++++++++++---------- waku/node/waku_node.nim | 9 +++-- 2 files changed, 29 insertions(+), 25 deletions(-) diff --git a/tests/wakunode_rest/test_rest_lightpush.nim b/tests/wakunode_rest/test_rest_lightpush.nim index a41c86c5a7..5581da5c71 100644 --- a/tests/wakunode_rest/test_rest_lightpush.nim +++ b/tests/wakunode_rest/test_rest_lightpush.nim @@ -171,24 +171,27 @@ suite "Waku v2 Rest API - lightpush": await restLightPushTest.shutdown() - asyncTest "Push message request service not available": - # Given - let restLightPushTest = await RestLightPushTest.init() - - # When - let message : RelayWakuMessage = fakeWakuMessage(contentTopic = DefaultContentTopic, - payload = toBytes("TEST-1")).toRelayWakuMessage() - - let requestBody = PushRequest(pubsubTopic: some("NoExistTopic"), - message: message) - let response = await restLightPushTest.client.sendPushRequest(requestBody) - - echo "response", $response - - # Then - check: - response.status == 503 - $response.contentType == $MIMETYPE_TEXT - response.data == "Failed to request a message push: Can not publish to any peers" - - await restLightPushTest.shutdown() + ## TODO: Re-work this test when lightpush protocol change is done: https://github.com/waku-org/pm/issues/93 + ## This test is similar when no available peer exists for publish. Currently it is returning success, + ## that makes this test not useful. + # asyncTest "Push message request service not available": + # # Given + # let restLightPushTest = await RestLightPushTest.init() + + # # When + # let message : RelayWakuMessage = fakeWakuMessage(contentTopic = DefaultContentTopic, + # payload = toBytes("TEST-1")).toRelayWakuMessage() + + # let requestBody = PushRequest(pubsubTopic: some("NoExistTopic"), + # message: message) + # let response = await restLightPushTest.client.sendPushRequest(requestBody) + + # echo "response", $response + + # # Then + # check: + # response.status == 503 + # $response.contentType == $MIMETYPE_TEXT + # response.data == "Failed to request a message push: Can not publish to any peers" + + # await restLightPushTest.shutdown() diff --git a/waku/node/waku_node.nim b/waku/node/waku_node.nim index bd7f1eb5bb..eb04d15f02 100644 --- a/waku/node/waku_node.nim +++ b/waku/node/waku_node.nim @@ -227,7 +227,7 @@ proc registerRelayDefaultHandler(node: WakuNode, topic: PubsubTopic) = proc subscribe*(node: WakuNode, subscription: SubscriptionEvent, handler = none(WakuRelayHandler)) = ## Subscribes to a PubSub or Content topic. Triggers handler when receiving messages on ## this topic. WakuRelayHandler is a method that takes a topic and a Waku message. - + if node.wakuRelay.isNil(): error "Invalid API call to `subscribe`. WakuRelay not mounted." return @@ -242,7 +242,7 @@ proc subscribe*(node: WakuNode, subscription: SubscriptionEvent, handler = none( (shard, some(subscription.topic)) of PubsubSub: (subscription.topic, none(ContentTopic)) else: return - + if contentTopicOp.isSome() and node.contentTopicHandlers.hasKey(contentTopicOp.get()): error "Invalid API call to `subscribe`. Was already subscribed" return @@ -260,7 +260,7 @@ proc subscribe*(node: WakuNode, subscription: SubscriptionEvent, handler = none( proc unsubscribe*(node: WakuNode, subscription: SubscriptionEvent) = ## Unsubscribes from a specific PubSub or Content topic. - + if node.wakuRelay.isNil(): error "Invalid API call to `unsubscribe`. WakuRelay not mounted." return @@ -876,7 +876,8 @@ proc mountLightPush*(node: WakuNode) {.async.} = let publishedCount = await node.wakuRelay.publish(pubsubTopic, message.encode().buffer) if publishedCount == 0: - return err("Can not publish to any peers") + ## Agreed change expected to the lightpush protocol to better handle such case. https://github.com/waku-org/pm/issues/93 + debug("Lightpush request has not been published to any peers") return ok() From c74abe131d00988cc69933525ad2d8c206bf0e63 Mon Sep 17 00:00:00 2001 From: Ivan FB <128452529+Ivansete-status@users.noreply.github.com> Date: Wed, 4 Oct 2023 15:28:07 +0200 Subject: [PATCH 068/274] postgres_driver: remove duplicated const MaxNumConns. (#2106) --- waku/waku_archive/driver/builder.nim | 3 +-- waku/waku_archive/driver/postgres_driver/postgres_driver.nim | 4 ++-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/waku/waku_archive/driver/builder.nim b/waku/waku_archive/driver/builder.nim index f8a47afd7b..2db18515bc 100644 --- a/waku/waku_archive/driver/builder.nim +++ b/waku/waku_archive/driver/builder.nim @@ -81,8 +81,7 @@ proc new*(T: type ArchiveDriver, of "postgres": when defined(postgres): - const MaxNumConns = 5 #TODO: we may need to set that from app args (maybe?) - let res = PostgresDriver.new(url, MaxNumConns, onErrAction) + let res = PostgresDriver.new(dbUrl = url, onErrAction = onErrAction) if res.isErr(): return err("failed to init postgres archive driver: " & res.error) diff --git a/waku/waku_archive/driver/postgres_driver/postgres_driver.nim b/waku/waku_archive/driver/postgres_driver/postgres_driver.nim index 7826d944be..775b348778 100644 --- a/waku/waku_archive/driver/postgres_driver/postgres_driver.nim +++ b/waku/waku_archive/driver/postgres_driver/postgres_driver.nim @@ -40,11 +40,11 @@ proc insertRow(): string = """INSERT INTO messages (id, storedAt, contentTopic, payload, pubsubTopic, version, timestamp) VALUES ($1, $2, $3, $4, $5, $6, $7);""" -const DefaultMaxConnections = 5 +const MaxNumConns = 5 #TODO: we may need to set that from app args (maybe?) proc new*(T: type PostgresDriver, dbUrl: string, - maxConnections: int = DefaultMaxConnections, + maxConnections: int = MaxNumConns, onErrAction: OnErrHandler = nil): ArchiveDriverResult[T] = From 1042cacd3f76f35b0b9a2724bd0ec216ca29ae45 Mon Sep 17 00:00:00 2001 From: Alvaro Revuelta Date: Thu, 5 Oct 2023 13:25:24 +0200 Subject: [PATCH 069/274] chore(rln): add more hardcoded memberhips to static group (#2108) --- waku/waku_rln_relay/constants.nim | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/waku/waku_rln_relay/constants.nim b/waku/waku_rln_relay/constants.nim index 7bd06ed97e..0576f74b53 100644 --- a/waku/waku_rln_relay/constants.nim +++ b/waku/waku_rln_relay/constants.nim @@ -31,19 +31,21 @@ const # temporary variables to test waku-rln-relay performance in the static group mode const - StaticGroupSize* = 100 - # StaticGroupKeys is a static list of 100 membership keys in the form of (identity key, identity commitment) + StaticGroupSize* = 10000 + # StaticGroupKeys is a static list of 10000 membership keys in the form of (identity key, identity commitment) # keys are created locally, using createMembershipList proc from waku_rln_relay_utils module, and the results are hardcoded in here # this list is temporary and is created to test the performance of waku-rln-relay for the static groups # in the later versions, this static hardcoded group will be replaced with a dynamic one + + const - StaticGroupKeys* = @[("2de8ad2cd30e993ff870a31596df4161343d6f05cfe8501884b807eb22dec066", "11ddb7419b09e862027c0ff978d60fd8fece82b31ede62f5e5b931d9986c383d", "022eb3ca06ca2634c5e5a63bde6cc40455cbdda928236f6ca2495f749172ea53", "0d8bae46e9af5072c2042a4c6960fcfcb5ec945479a4683827aaf1ab8a63e07a"), ("11ab22ee14e4f53ca76120588a33513a5f212dfa6e24175826cdea72482723a3", "263555637d443f73e6ff88ac5fd95cf1c525e52005ff080f2767a8e56fcb86f8", "19a76ef9a5a868bec4b62434e437d90680e36b9d0099302a9adce38a519c7040", "07061c488d0103f01b7334cd175dcdcbaea4bcb18a3847cd9186866536d246d0"), ("0acc4beab8a4fe06b775ba52b36d7d8d7890fb62da415277de02bb8d7cbfaca2", "06649c699e795cd10588844aaa481481a718788ba7a138b413f7c735a0f76a3b", "00a0400ed331a6a74dbf3e361f7df612c318f1ebedae26f739e80827e36bb5df", "0cb30c063d0363d5547bfd01b62500b61d2f6d434d7728d96cd7b8219175d85c"), ("04d56ee5bd17cbda45b2fd5b85c2a147c1d91ac675eaee991859abe314e8509c", "091b97505778841b632fbe6cfce2552e091ea1e71ee0266dfd542ad73e4da476", "2bd71275649625675d418d46347de784bf93952d3b29cb9e24a95962c570c3ff", "0a54271b9bfeeebd7467b4306aeef7b36ba71d4eaa6ef4b6ba311872d2cc1d4a"), ("215833d966a2d3650c3b3d38829d2dca39b4b557c5e35a3783c41436d54415bd", "28c7c326b89a097da2a3254de930f98b05c3e1a1f6909c20afc4ef67d58948fd", "23d336beac7ea57e699537ae0270a3d7dd7476bb59835468be0b46b336513a00", "05f5d750eb243da48f07e3629451068fab8f9d7c551906af0caca00d2c94c50a"), ("24520de883497eb171445202d7a82b98f6afa3827bb8064dd568e0546d08f49e", "157ec42e00e8d810ea94f834541a3d0bcc6029c4115269354d3baceb084bed9e", "0954402b0b26bdb7a2da1312cf65ef616dba71fa7c1459e421def2337897116a", "2bf5d1b7e98b51ae9cc300669d6e6d2a6c8d2de575519c6d53dda0c0d0bdde30"), ("295fa4839e238b1410df304a44e2b59234bc9f87c1e8c8bc09075c64ae16e2b9", "2f90313f25959ed8f080c5a54df6991e460cad3d6312e3b18d029ad05f8e28a8", "0f0c817957603df4edbf7cc3a046e68f09ea7870a31192c48f1fc12e45032031", "1839a530aa56b1f50856a85926c1842e678754e9c3dc059e34eee0bc70f88dd4"), ("1d0c99e03b6aa94e01f29decd6148230471a5b8e60753b659ed2a891c4e89698", "13d29e820f34e02477c7713a246e662705f33c92dc2e69695228d593e115260d", "006fe254e1c8fbe34555e51224ef97f0ea4eb005168cbd8885a5d99ee73da095", "119b0cebca96186bc219066d781258e04e386097f3c03080a494ae8d01e2bb31"), ("217fd32fb7bd401ef0229aa2dd1c93c591772bc970249e52621f76a6d529fff3", "0113d56afd15a5ec23eff9d434f4547fdbb3c82029a622391585f5000633f583", "1f677a1bab221a4d5d1c281b635133b9376906dceab0fb36510cb0c2b08efca2", "2971c74b6c9f324a30a83b32d211850230250ade39740055576f0dc85fb98cf0"), ("2d420d4da783d075faf6aceb5405766f49d08a06a57932f9e0fc58ffb41b4198", "272849724f0faf574008a29597fa21d8f86cdaf3973cfea19a50b59119621a3f", "18189e9e10e820cf3c667c8346b9527213ff3a1945f687138316bb0bb5e65ca4", "056ca699b1c87b5e8598665ef129318935dd3e96492b79113d2451fbae9f1cc6"), ("1fe33b9a7284967bcd69b14f648a7e4667a59a59e030030abc12864dcf64a681", "1fa7f7a31f8d313d919765e6b4a0e681ca3e1e6f95cbb48d893fad389e1d8859", "2692bb4ca076936d3079735d5c9a6add5a1f02a968b00599a1478114a04891d9", "12b4157333b5b07b785db8a30c73b5c474c5f2649ef47a63d78f1b998cbf59e4"), ("1d053812ffbe4d4da6e21cb3b8728a60bb6cb2420e29998e78c4ce965c35ec8d", "09d840b025919e2c2b381ecc5bf9fc2dd599e83ea1c2825d17299cb34ab9f6b2", "1824d455c9577d65db341e59ebc7b6cf940bf54af49ae800fb0dc5f32014d249", "2012a26ab7b783808fbcf8b2cc58158a2db725d277c9520b65e5d36e5dc6b052"), ("132a653c9148ae4f992f223df26541e11d39953e273e47a863ba631c318090b5", "20010c72714dc65285a0201f7bb1cf464e030b0fbf2d2be3177667066a9d07da", "1b3dd5b82723da7f939d882125322f91f74279d0cd858c45e09011a51a4de962", "2601a3ed3ff4a7718f0019a3939c08fc3a9a5a8180a68daaa7bf34cc486bc757"), ("2f656d8a0c07ac9b2de82be9d3cbf4535cdf169cbc2b355155d9e0ed256cc33d", "1f7c9c1aa1dca7354f135849012aa5968b37ae729b2847694f65355895d41984", "00b8302bd41850608f88ef1b0e6949b08e850fd8d1044b3d23b7224aca5ea7d5", "2c1d654b251d138a3a6be82f784e54b05ce5b6501ce2d59b89021d20abca7516"), ("168c45a2df3f7f5dc9305277cd8b78d023f817ba5ad198a1ea6b1f23aa002478", "0f50c493b68eaf26cfab59c903ef583f03348d9e839806af0522759d64afac60", "2d1e68d056c1928fe7a44b96cb2333888ef3a169be54f4dd5438fc0de23554d7", "10e58fa7abc99dcafc5f4e08181c095c78aaac093e3a5c5e356e8e53b2049a99"), ("0b543803e520e8ca645d8d324399c14e5cd1e6d5c2e371f2316beda99403471a", "0ae42ba2beaeecc65174318588f875ed9d4bffdc8a40cb4862dfbbe39254dce4", "2a5b829ec8871ee4260f83688978295a5b553cfb92a8e307bcab0a9d0e2d9320", "0d67d9161644b0a09e230f28e95b2f70558ae09260383b97b6f53bb791e72aa5"), ("273961e60d8b20fea6b34446911f6922e95b5948f0c673f260f8b2e40727ced7", "0c0cd7f50d1472d3246ae86f605e3c3adc8865c8ad4799ad0f738ac710f71661", "2764d7522256fc102b5ec886e11938cfbae7b85fddc4b8ee2b40180178bdc118", "26d8a135115208aa2321b57befda6602fcc048cb988426d1d2f4888aa7b6a652"), ("2d6d3b281a2d50cc5bafe3255c353247642966092a48ab570510c865c20f3691", "0300a6f79f78c1e0dbefe938800922046fc2d5ffc4e7d5dd9fc3958145ad7858", "0f7123bb490708bcdc2b16685ce3515fd1c62680e3cd628c15ad663bd1dd10f8", "1ca0d6fb94e3acb89299d8c5724f55f14eb82875d5c6d3e769ed2afcf7ec3b6a"), ("205b991d7685b23c17abff32b668b09a1236742c0f3b35f4bbf92f61cbf2946d", "0cf3674c678049376d9e0c24e6fc8c1ff7e5cbd00971a23aab01efe1dca3d712", "27bd23a401958d102829f7cc4f2812ffb457fd5d4af84d603bb6de2cd81a2d0a", "26feb04420e100cb694a9e54cc4bc09848c99981e3d1d240a299a84fffec42bc"), ("1230a623220b9c5246888bb15f98c646c85adba671bedf1facc7061f7d3a2cdd", "1e5da8d9c840a6fc6c46616d1b49d8c83328f3cde51ffb2a6d418da63b0827c2", "0ecc20de9b74105a5da2db218396997059e9ed61c2a2aaadd278acf4c6d715b8", "03fd0919740fb0d2d71827d1e904ddc23f386706edd61dfd88cea89c87df5620"), ("0116df196a2fbcaeae5ec4a5ae817aec779881cf9aaeb315f8906d6b9fad453b", "133f0939bf05bfa523e51c6e9e4c96c125f10dc733f5166b0eca1c902a08a698", "1784c2ec594b121b2784ea4a9b44f259bef8a499939406d7859041226bc9b80f", "06f5089423022496743bafca22605c04e570887e349d109aaa3342cae557879f"), ("12c80c6764d68e018713802998171001446c58d493b3add50643679bc506a894", "02c63445f57a532a0fa201eeefe1a5cc065f301a6e01f339c1ab7a2fc3c346b7", "1487669cc19664d349e43eecef1202b4706d79baa0fde4a44396b33d8232c6f1", "21c5219a7a414bed8e4a41d6586cd0791fa512166fc4615b643fb26d24cdc16e"), ("2f4ee97ca44c2508af67ef15ad5bf317adef767f2ba80ced53cd3a6136cdb1f8", "2f903d2bfad210c4556c790e271af0f4979c63516b6f61cfb34eecedfcc641ec", "1a5c10c4cfac10834e5dbe29cc7d0e9d07c25f90b9f528fe87fcbea3b3738c57", "11587341d004eb538887cda6cbb2ffc33ac819cd4884eb06585a706c4efc4228"), ("2146e9aac9c2eb448f738c0c67069a8eeed3e4de24e76aaaf4ae1bd94637a35d", "190fd021acd70b4c4465048dcbb2f42178e84a2586672a6fd29653aadcb7e580", "1fb396f784fcf88e50e6f005d1097916f62262677caf055e867a711f9486a732", "0489a13f0398f99063227918013c9da644565e62896d97ac520ef99c35fc0ca7"), ("2dfed889b0b401205fc5e0b69728a732fe6aa3a3abcec3fe55edd671041344e5", "16886eded16061974adc5889a7a289283bc9c4103447fc971fef722e0627d8bb", "1ec4c39a2ec0a2671ec26045f307418b7d0bd92076b5a5e5997f13a08ff34f82", "0829b6f724b6d33060c3545c04708aff599cfc783aabb2cf50395a9de5505795"), ("0dc00687f68023c9f79e4b01c94caca14a318aa24123f924eccadb5acd3ae674", "1a6a4b9d8804c109888b1e67c31f19e816d485077722c57377dc98462882a778", "0771ca89a28322686f809dff401b626a205f05d98086f194c9cb0ab697010004", "0a3d44533de845efbd99458b03d0fdad1c94c0e94ff98203141906c316943caa"), ("05a6550fa6a01e2ee1eb13676f3e1d10afdaa571555a85e6c36749948cbe5fd6", "296c1a3f9a2dce1ba04e126883f026b96e3b24c7f20a2622fefa80fec566dd72", "0786dafe3c7aa093f2a6d474a62574cf96ac755c9b7a22138000a4d86d0b6e28", "2d82b28b0fb43d8f66b0ac548c099f5b03811f5fd3d64e79f48fc6a11fb368e8"), ("0d3799c90302e2622222b85f6919062bb3cf20920ab42a515f047bcbeca8bfcc", "07945b9c2ceb366148736f997ea3567b2b88bb7b2f1bbd7152f7cac3a15356eb", "0cd858026c5a2a8fcecd92568fae21bbae89c0de60a966edcdd842dcf20b5bb8", "0080ead6d9c19c515e29072519d458ce942337e725dcacbbe2a0037a7d357c1e"), ("1aadfd7495ddad900e6298f8e3b05f76b1b38790982f00dc1cc3c2a0d7b7a0b0", "2d4d02617233f6c596469a454225d5312209f83d9bf7ef7042986f4bc0d2f263", "17dd395569064dac45abac3f165dab42b4e2522d4bf3973d7f427a9895382598", "0a77dc303ee2cdac0b1f0afc6d033ba1fff4d3b4a5d0585288fc0da640de4b36"), ("15b569e4a54a91a7c18007a46fc5d9bb2367b383a0e1d2327b667cead37600d6", "222e9a22f44cbe8e704ce52aa4edf54dc98bdc7240911d12c4f41b56dcf6edfb", "1122b5efe8686520a0e24ba534ccec09428d921d9bd290284910f615627e0dfd", "0d5bf9b92a7a3d942a68773b0fa3ddbb31f8abff8c1cf7c175b03a73bb5f04d3"), ("09f5e4a584ebfd2bd07837020ebb47ba881c864da25a96c6c99ebc8046073651", "26b819e34bce5e8e20acc0a8370385d476307c2512a1655d550ef16230df6b39", "1ae05de2fb9296093f5dd47502627c35a50a1a0adfe59e2ca1fe09d0e9ab5192", "09c90c0a107d8798593de1764f90fbace04bc8ac2695eda0ed3011b7f6084a29"), ("0f5503c833ae007dbbb53bc06c6abf4c7c68f52996abb2b115e870544868be01", "2760cf6b2471fc666674216dab356c6167e978d9b36fe871caf959e32254f6b7", "2def3b0bc44bc2d52a6f3e66e43b4a8aa048c66260ef7d8ff8b3ee9837a1b423", "0cdbb3cb827cd02819f8a08149bb9bb957a180aeafa18706df01e0edc41a89eb"), ("065a3762cc9fd71b13ab5dbac9905d73b9a2adafaf5379e0f6d1a3b788735a83", "09a50a6e15d90468e6ab37b988804e44308530a2d9113a62607bb436cba7d21f", "08fe67b723b3c7d0a3eb1e041d1fed917a21750c966fff993c648b1fedc90083", "0808d4a78df10cd77889fabc546147acb93f94ee617019531719ea52a853bcb3"), ("2adbce35c09adaea1f97a2fc639e1f2a1a975ccfee9509cced16760c7c9a75c2", "2cdeddb0628dc4b46d60ae9c6fb2a7c3f7fd04689851d91db654f9ba30d77522", "061ea76a71766cbdab24bb18e513dedfbaecf7dae6121d90e756360b5ca21a76", "0fea769786c8eb3e48489a92e1aed1965e61ee40be7f3fa3c15544fc6cdde7f0"), ("138227c591792141525d9a128ab021f427c968b41927c13110dd3debcd5bb79b", "2111e1d4acdf7b4b0d46708deee5f5a4b93d7138798245075e591ef43af6c86a", "24e8c1dd992d18ff1646a911a4506ae64b59adf99a757191d8b15f294f23d39f", "056a158c1aac62d6e5587120a40f84716583bed992d31399b31a8c5ff48811f3"), ("1cfca16420e617a17fe29ab96b468f5f6c63ad0a2fcaf1627ae53994bd9bf6e5", "037c3af3a9591d1cffde88b2383a27a3472e219c14545e8975a5b02bd7db8735", "1fdb4510b85aec27c60c977e1eb04318c560549a8237fa75788305e9376d1c1c", "244e22cc2f20498c300bb6d4b482e0fb0b70cc38b74f100d27b7f1a536fc3b3f"), ("165c1c813e61d12e8203a378b681a6e56d38a152e3ff39ef35ab8a74162f6739", "18fab342e96343933108180ed6a96e018e9f46764379bd25ec53a02625deaeb1", "0aca6ad6b91aa0e4ad51b8e32eec62c770d2dddf69381010020b4c294834204e", "227bd6205ee4047bf5c16fbe8914e69e41d28b92c9d2fc901319bf6946aacdcb"), ("0aa16c2106010e06debee4558bf893415c689ab661c9f1538e62350315e7343e", "0305bd43adc89116b436e004e0fc7b49975631339dd0e5e608229552edf6364d", "1e37cd06cce3965a566a2080b2087be3e85af2776f9f293c4bf2edb92fd94102", "037931a869e246df195a3f367df6221abcfba5f4a230a5d335de6b3f1d4af07d"), ("0e7ba80ad7b271230438317de4ee9f2a3789a495d85ea75e2320f3dbdddcc3bb", "113d9847fb222673b086881eaf6e90a72ca9cba676d22d3e4f3644c8e8244b79", "1c10febb6e6bc82aed81c3a80ec34aa6bb7a14dc45eeb1272e7cb4d19c3eb1e5", "1d657c9ee4a8a2b31a02e6f5ad79da3b71f22685da66d48be63b8c96ca7dca01"), ("2f7756ac206f83fce0e090a93f81a08563ae66594415db7a86668533ea19069c", "27d4c173a56e32bbfc470de7380488fb03c4783c1465a6f6f4ab9d9be7b81337", "2bbe945d4f20dd95b444343b86cc44a69b91a26e60c1f05754c76941f200c28f", "2e046ee0d56a92d75055b7c72766420cac23ee530076fd81917704141e4a3037"), ("25a136bee3451a9bbf51a30e507eb281cbd6a56f160a51b849643d0b054e703f", "1839a68781e571545fdab3e8b04f9997006896fe580ce0e40d5c0f30a17b743c", "18c1217077424801cbeff7c71ea24327a3c7eaa01c43681d14f045982afe6869", "04cff8f2dd2248c6c34f312884af6b7ec6875570e795daf7cdf3b302a2f8d360"), ("149975c4626c7c621e05af3c1059b90bab8fdbd8d11378343f8a13d36401e88d", "1978d1d3ff6483f9b26adfd2fc287d4a3f4972a9a00ae4a16490807c5238b6d2", "26b04d8f9d4071eafac8877bc305533f241cd03e857ca84bd689bdbca7f9f7f2", "2e2869ba9d0894a917ab3a8f5c03a6aa92737a2bf8739bf894c012168d730e33"), ("05be359a5d595637d1f4e9948d17a611401a8ad583aa78d73aefe5cac3417e68", "265dacea532a6793395aa5e9cd3c2f19a9cdee9bd2229f9ec0ee0987f178439a", "1a28c25b66f03ac6749551d2a6056466f85b7b5e5db738110913734f6bafa5b6", "2d55b1ac28d0b2baf29bfbcbfde960f1bdf18bf28d52bf306d774a64c5a04faf"), ("0acb23e044e518a88df2345f9cb6e331520f89af0f2c092a09b63716d83b029c", "15d2bc8ded95329ae9174bc01a4c12a48aa3399441dc1ff408b4fdaf181634d5", "2ccd822fd559347040e4fdfa2e7690d1af03f3d523cac219a7cf06f881f1859e", "0bb7770a6df49da10b3e2babe1f5881d2ef4f40e49d99a6a848ec1f2dca72e4c"), ("1d9c9f55deea40422f37828e0816fe18b1acd665e96392d376bdec709d31862e", "02f9d59214040c035861d50b4e238e47a75460d03d58a217892f89c63a9685ea", "12cacfaa5924f4bba951f13cd3df068f2c11fe99166a4c59732ab1adeab418d0", "258e4273c1c463d211ca2a87866136192b0c0564cd91bf0a4fb037fea0a781e6"), ("1611e0ef464c8903e6b6b23f9cdca49a09d66c1ccd4cc113f9a6bd6b20e9d1f1", "0744b00b48d373789adbbdd0be955e4887e2d68337ef477a5defa2b5ce6eea84", "162a1e3e6f8b7e91e8f3b44bf83ca18909190811bbd28b579be19b385c7bb524", "16ce06eaa8ef6e70e30564051e0f6d2b5752142cffff3937c6a33713dc87937d"), ("115d5f4bc2dd803a71af2a43a230115dc2725a180beb7df1b88a2259e2053412", "10daf1f8f9e13d9ec374327c2b51b4cf2ba45e57ac2a45694aff64f6916aa889", "18433218813243ecef035e369a64b46a704a13fe6c80858c6ce90034f6357bb0", "04fdbb0aa628440f438a57f0f213dcda509ca8f1d0cea93556b30d4d01c5bc10"), ("09de472ca52c06d076c3798403302eaa75803ed28e4d81f63f2bf488b69a88f6", "12759012df29f9c911a8b44c41d13974b7be3591eda2bb6f75ab41799e4712ad", "13d7626694617b0a492c90996660b665bf093f931891663bcaf7084c7cf59509", "15a646e677c3e76c021715ee48ea0430e1f279b739f8d8a129c46afabd26290c"), ("1bc3c21386512fd3aa169484671be058fd471f9d4a899a6be4cc16a83b483c8a", "07e711c6993c9f370fd6100b468b7300ed1fbd3238712cf8e65052672171ce2c", "025e58dc2bc1483098410d9b3c4a17eab6102f89a6183aca299026b9f1615b16", "140229fe33aab22020f29e9b2432ba65065e4d6bd1494c359e6b086266f8aec6"), ("1525b676c8981f9c5e544b44133e94f312baf24b42cbd459c41f92e24ea02cef", "123a0dc832ffcb70c94f1cf1bb8f1c7809f66a4773fccc3006d3110e60414f36", "2a645289284773a2efbb11823419b4ea22cd71ab2a8b814139e6375ba459acdd", "2d5105e8567086d71a2cce2046c449768bfea36645be00f17e4339fed306bfed"), ("288857614a0f17a228c98105ae993e48bcdb25a876fff0a2b9e1db52aa7cfb12", "28d0e7dd79b3df14a6112bda58932a8a4ae65180b614919e7a8f32a3eeeeba39", "124d335735701f8f2e7af829f5b326c053c7fdc0bfbe9299f0d2cb4bf432f5ad", "13a602a334d937687a5a7710dd7085bb342dd5fc9f2261fccae20cd39ea7d45d"), ("078e9560c3ac30232a3450e8f9a487c55e6e37728dd1abdf5ecebc56a2f1b691", "24d0478044359d16d5477892983d609a261f84b444214f2325346bfbdcd8452a", "1ec8e1362fe0816a633a02d4f1e80df5ad3dfbbc5fdc91ce3b4600e6e969c551", "0377f7c3c95b5799fa0bf03a76e7b85d436154f680a9eeb6b9b107a214787786"), ("03da01bde649b5d23817740ef1fd2afe0d8fa3aa35add446e3c2165a5ee20c7f", "11c1a1006f436bb062d34cbfd4f65a37970c0cf4375b968e9afc39dedec5a1f5", "12ca4ee75899ddf27179b38880b4a0019b3d24cccd220a17ae2924b03fbd1594", "2c41274935645dadfdac964a5845201c4962560ee8cc4932969b374ad55ea4a4"), ("1acc4748897f2319e9840230c603fee339eee1ae480317666de5bfe935b17a92", "1adcd69d17130e4e2d9349457735ebdf09d3279d81e577877ea969025647062b", "05b9178f7b8962377d922cf18942f88f994369079e7107d79f48b1c7ecdd0f75", "15a764bb5eb2cf17cbc6eddd7479e85d2de5a53d8961ad7e47e7481739580ae5"), ("28045d48040ecea6e8ffa983f27422c12c9a32b6f93259c91d37b1b7282085e6", "146ac2fe6a594fbb4ad66cad23becdce68461fbfe9b1cf5e6d160f2e3b47299b", "1160d22d7b3298f58f65553d1332bf93669d26fd550b48317bfaaee8d5df09f3", "2ee983b7b21cde8ebdf78a4461abd510496f940a8524569e4df0203e449a415a"), ("1a67133e1153ca967805fd36a138b113537f2dcd6bee07d89de2549541848fe8", "1a0214be9ac7f2ecb4e60953efa1d4da075e180b90de1320c48736b502272134", "27f3091c65ccf894f34a37a47c62368725969aaf0f83f11dd8693f5d3cee06ab", "0f09d248f2e5542e69a5d3f8cc4fdf88603fb563cb12a861f7511c98028a20bc"), ("03a5d3830dcb353dc60546ba371901c2546bab426bcfa7a3aab986d67cd75a36", "01c05ed73a97503b50f58f265ea6809ba990c3fef2dc4c7ac364524c4682968d", "1ece48a1732f79a80629222c9183f5928c96d4cad35bc67ce066e2db5df1df18", "0c897ca901854557c05b01a58d15d4e39ea85f69840c29cf5a7077420a2014f0"), ("30482bfb8cd460b37ad4b18d41a3ac4a19678bbf4eeb23df0a1f17ae293c2e59", "1be551bd7b10a217a68e982369e50e686642892bf52023a65fdb665a08b294d5", "14d3a66b20b691f7f5c676c4496bce6eac351a2fbdbb0551567e01682cbd563e", "245019483fc1811216ef3de643147c9a4dfe0c305165fa3dd5082c2828ae781d"), ("0b9f0b77879dd07829838d350ea748dad8315df92eda8a09a06ae803b52433e8", "19d0ca56369e4f1bd8328de20ce700bda523f3061b9fa27c6e41c72707ef84f6", "2d731edfd266ae50b1ae70d22e3a9cea52bf052318240c6ff43ce25e0d26ac59", "2115a2054a4a502f18bd51c023220afae7f666c98bf27fdc7bbcb98a7c3220a7"), ("053d4993e28cc2ccc565bf58cdd11707fa5a23bafacf48e0738851b7dc7cba86", "0b936c7981c946de2f6a212355f09abd15f17ee7cb1d839f68ce110484ad9b1d", "24d042c178799097ad2f73892cd2a667c54d9a27df62db765d783ecbc0e632e5", "28f150ec05f4aac631cf20bf530bc08df7dab9b6372df9a01210ea7ca68a90d9"), ("0bb355cf5de29b2e15823def2571259dc74adc246e14bb815a31f29517a3adf4", "28ced5bad892909a16d7c1ee56eea5400d816a126e4e44fbbe8a48f1db8d014b", "1f64a07121a479444254e65b6c6cbcb94669fdde074f598b653654a62294f2ec", "27e1c7393ef111b8fb531cf65c72009a1b4ddbdaa8708d709a835652a2a7d49e"), ("2f673f5f870d491c69c0435ee13b4c8e861e6eeae494416ee9429a78ead553e6", "13742c523d2fd99a3082fe6556c81ed61130e2965e5aa6a6ebe1b962ed1e9da5", "2eb3fb08e15d8a2f09895eaf0c599a7177e37b2eaf7e24b7a36a9e48c7d975ce", "138c90876961451a808920cfda3c2768d647e9b6659aa45888091d5b41c92c01"), ("1b279e5fe04439739a57fef9ae89460ebfc9b25e9e14823bf0d0ea60854e3655", "0ff39bfc718daba8ffade09ee5a296dfd844a65fdb1ba041991581bcb4a9d1c0", "259de05683020849eb06d1416da4b4e5840af03316cf206ca01a30ada34582b6", "1354c7a215ee36091f67853a1300821c742d31a128542b1b4bfc0d849ae84369"), ("0a42be19ff6acea717f247d0ddb3af24a22fa35b05d1f98bc99de3e1906885a7", "0b42f7a1b093dd2a6e193a48c8147b0042cd2a33b4947cae1df0da22061b4f69", "144c7d59971c8c57497f3dc42dbd3465305c181a5bef7849a0e5aa3fe765a2af", "2a8968087625cb77ac8ff378c126b18af6af4bc3853b42dfc7b7f13d9ed2b7c6"), ("2cedf85a730cf1b685beda07c884488ee6af197eb48e484db7ff463405ea9451", "2b0f7c30e47a315a1621a962dbd7ebd9dace0060f5ad57d669eee0730d1b642c", "2875faea6e2d98e623589585409a16ffb363c30daba00e9f9c04bf4b418cf286", "1b0af6541739aa72b91b2da05a8efa65cdb26a1d8ecc0cc0c2b75a8bb5724196"), ("2ae8bf17e5431c4e490ee932e16cb4d9e55d16b0d3ed890ba7a4c793158eef10", "19ac467898482e9dac2baba1562ea504a37247b72f93703f7bd7bd1926909ff7", "218201f9512cbfd8afec322da50972558b183a50a9fb8c7eb66ac8ef0ed5bc18", "1175ad4f6fff309ac6ee415975421776a910ce721b125bfd027dc70422d4a000"), ("15d86af8963d33f8d74b7baacb24a7d05ca826ddfbd9e4122a4afd51d77a949e", "2eac91f3d0a76bcad0d776d4730cfd126ce6ac45a2a81a05eb65d857490108c3", "29233274802a5b2d8041635463b156d1cd779f0c5009007e4b11b17ce959cf20", "11702232063b55b92cc7491b3a1e28719be901a4a04efc54f844b322fa7ba85f"), ("0e534fdbb94b67fab3591cb7fadfc9065c1f7105e43d152b843073f252b9d67d", "140894d438cd675e7b728f72c2a1caed5d59314343c3cf7da67a31c7933b8e68", "0838af0f022cf6eeee7f1d7219f42b7e4882be01d8719566a720a0879e612753", "2722e88784451b4909e8f9aaefe2d61d8446242f1e4d4a60a3e205bbef61d200"), ("0d3858ba3f2abbea60584c7f3a1cca0fd5499e7f578a920c15689fae683e2c10", "0026cca08282ad624eebe4bd2040365e7733245b983b761eb6c3fe07a64a2e95", "07b05395164f77c9b3879c7b466d29445515a358947c9df9cf15f24dbd3aa771", "02ac50fd9d54446077163f0c44a7a071ce1950d97a1fa7323ef069e9eb6c7908"), ("1d5b1cab3fcbcafd5df48d4ceb8b523ad69c15efa00fb13562f78a36fef1e025", "0d1bfa26a14e8b62348032f24ed9dcd1f1f26903b047bcdf8e55e46f31a8152e", "08b8d63746dc89688ba14b06f43f555c81fffa6bb61b53b10aea8a4a653a33aa", "00d635fc0e8f77ffa3551705b112949d6c4fbd8f4fb725be2a6fa5e80958f925"), ("0f641c4ec00b3dc902e655e8b1adc205d510aee7e9f1c42dc8fa79d97d1e7c00", "151db8eb6d5afbc184eab5c8ccf78b5c480d96b03037a0c7bfc9447132b6a601", "18a12a1e7147b63046f266d2a0da18b4fe11833b935d24855bda1ef845c1c471", "28b0db4b66d7d70d9ee033e2327e3875455e74256769255725c6efec20755709"), ("1a1c01ec0431a37fe70c552d7c0f61884f393f61f3f56e65a47e648f7fe21905", "2f5959c33370a833feb0cd0cafc172522f7cc557f1a087163c3e58888fd74d47", "2ed8528b478370dc1bda869a4d532940c09b91ea8d468f5743b20c76c9cfb962", "2a56e627a133a00a1ac09302d0999e93a7523aa2bd076ee7c7e8b126c0386a20"), ("102c3b0452b4fe0941e7d48fa688a879350b5c853e2c784c7aebbd1f56dbd7a5", "063d1c4199129d0e9455635362c52c9a4e9cbc47b9a552511b4fd2f88c1ee5ae", "037b9e440035f9cd5ba1241bed7d231d0095fbbb9f9c4bcca2348e3d172e25ad", "2c1bfb2c73ba38f332b92270348b6c4e46f5b7db64df4b3286a1660aeec7a335"), ("13eaab664792f60698f6d3a805b1e1d2b022db50c43ed36dcffe91adc6f6ea62", "1e09b7b25afb4d9e9e54f0c629cd91f9708ea68124e96644df0358e9de3f5a0c", "062a451e555686c3440435990c1d01761222244f37eec105a096b8c085c6ae25", "0f38234ac951490fffe7dafbbe51d8595e45b6cdbd35eac0064de517c70fa81b"), ("0b43651f0b0428a35de9198a094dc89e24dd312f76f135380d6c1fbaf09ddb94", "0a299fcec2d58a5dbfbe0a6d3959f7eb917532dea24fb005a6af69578eecf2df", "253b83ec9924123a182ea50a78b22839f0f3da4e64c83a0cd2994c00a9ccd267", "02eb4bbb65921bb1c3490c4c8c2fb67f6df5723cdebd72ff6272ac1f167be36c"), ("2079f45fb6956af1f2bafd60f1f5aaf88edfcaa457f3723586b0809b70f2d347", "223cfa7528ecbd533ef1377443604a16ae29954dbd1af91cb98f7e2985f22e8d", "1de1d663c28d45f511e5cfa2653a8b78ca615f9dad70e9308c78076414c11b43", "160ef23a48521ef3d0580309153f8794a6012c04c7822363e217a06ed9338d7c"), ("09303702cf5b7ae9b8c344cfc4f5ec65d01122e625b6cc5d8af93bd62c406b7e", "0794bba36cbd98002023c13172a687b872d63939f6a9230b0e0045a3739adda0", "195a2521d450622ad65bbe3af7ab543cbd4f1ddcf996fac3b4167d1b2c111b4a", "22c7096816650e9422380bd97620b0b531b73b964513d1c04567a297c69d55c5"), ("262e1fef656acd766d8a4b82fd239d0b5944ab1bb6b57816392dc9b0e9234462", "187ece88f5c70b2a65fcf1693dd81b580836f24e7c812b42e9e1e43653388935", "15bc5e9790848aa852a77fea27e7b3889928e6fc8939f632a0aea1aab8368d55", "027dce453827b37e79fef82b56aef1343485310fba4e767a521654db5da30e6d"), ("147b474a0cbbfc629d30880b6b2d2d2397beec1124471aa3b9f693ed5168496e", "026ae7fe174d87aca57671f97c4dbc5e09a322103cc56d81d3f2d278474e72e7", "1c85cc18a5d56ebc22db1612948045f52f59db5620af270204b11d7aad2ae007", "1db4d3ef5a93bdddcaed9e4c97f7ee00b0cecd1623a3c456f81e44ea688dbaaa"), ("12e3ea5692729aa114ef93abf94c1333a25943eb830a3620557f2827de98cb6e", "2935b4c6947ac07770473837a9f1e52ae5ee3fe73b1e7b229ab51be7a2d946b4", "1b5ed93c65d71c6ef23e3ff6c1e6110e9a86822f79e537f42a2217f726f3fa00", "03a4a5f4dc95358f9274767da666d6167528ed2d844bc68118de01a0d98c9299"), ("1eaccc5c180dc5363f973c0a8b5f66dd1278c837769b48722ba5b058dc43be43", "2ea223ace807093bb610a287f523d193560073b9b2485975a76f065cd762a7e1", "224677f701bf32c3d07ba58efa1347cac50c2ddd85bf275dbcc6f8949afdaec1", "09c6c0800a5d66aa73e5332182a2e504c5de9acf064f56d8f68827c3a41b6b8c"), ("06da02e21a1fa7023b4aa612515bc144e8e387e574f12d6220e7bbb35d432845", "0bc7c2f858f957690d4b26fbccb16665efa4421999d9b51999d19ed4f0fc83eb", "2755b25d79e05e3503c8f7d6aa55cf12cc2d7e56de705287cae328b89e0cdd77", "25275c6705b80bbd8d60f370de08154dd82527b25486bab21dae3ed632276d5b"), ("0b3c0c13f2436948d0c8549350060c218af3b44f60ddb2cbcd891e1ef565ac80", "27231ed9c7230915aaf9597711abab241171e0e27a4b4a959a502f4e1c56640e", "0194fb9ac68b223d73022523023fe5769a018117591de6891cd152fe8847d55e", "150162d0063ea23267b36654b0dcd02bf312ba8521b4fda787db0a03071402a2"), ("28a9cd34f4244ad6c93879c90241f0b9646ca951d7188d750e7f3d950ea90a2e", "00d3149066fe7f78404185db5aaa2d5db9ff734e282830395302b0fcded9823c", "2c782b5e544fa56ad3447f0dbfbf9e4dca3e60cc7830fdbdb21e5100f24db2fd", "00ee274ea6df380969371c0daf34fd2420dc55890ffa6a8332f19dbbe5b552fb"), ("0ae796b57a05ab6977f73d0171078e32ebe92dfae94292a9bff12015dea15534", "001a8ff98d149891ae02c5f3e9ef14027085663d5fe4f655f630557c68f75d03", "28779cdfbe806a646915c115149dbd990d4aab7f4613f7d604593f90609ea56f", "15346345d59885de47eda8093b55b75fdee1e3b81e06cbe18816bee8f79b7371"), ("0846615c138473cd30621416f2efac6b949bb334534c90cf149b9526a4c2ea46", "09671ae0e2a806e623b4d60ed15eea55e501ae41c781064289009aff152ad133", "1b8860f58938bd656cc7e3bd45e70ec1e5d88167e7f465f175e8940bc71ffd64", "1c73e79002a4d6f102921cf947c6b0a51885acfc0e7234a6ead5be034c13b97c"), ("278f97261eacbe09ce5e35436bff601f56ce67a62c3f619924e1409072d013d5", "2650415f4edcced1bcfcc18211e84e2eda41a6d7d7afef402d0695730ce9eaa7", "2a55ef81807af7d514bd1790e32d2dea7d6624acddfd379fc1db525c21d2d246", "0aa3a82171b1ea6703afec3707fb98a6f3fe069d9a1a193e9fb21216af8adfb6"), ("18da37f89c631baec3fe0dfc5fbc2b7abb8a0761c81cd3fd511a56469c5820fe", "3048d89b856b0730550d2a91104c4386db5c5e134dd951ed95293ed66dc46823", "17152a1e8c25d7fd372c352d2f607355eab904d50f3c94ce35f77c19ace8746f", "1deda369a6182a492f049ac9817f6ef3ebc158817b6b2de1926fbff8b874041c"), ("150fb68164e011be67ffde47c166279ffff5d701296d9250d039a8e755fcdc7d", "1345557d87b9db9d6d5ad1e2cd3bd266bcb27f5c093414b34806384e03c062cb", "0b35ad4db700375aca9e444dda33a08ef942f21bbd6ddf30f7e268203782fc4a", "26c1bad66fcbe4fee85f1f9e73349d18371043a0dee0599055d617ec71996ee4"), ("1a148f8a457b42830c34545a4accdfc1fde289f09d40ab38f11a967fc541f9fe", "25763da3d512f69548640fe115796be216f728649ba652697198861b688d05e0", "2576def12e58d34cccd48c12e963b93a929b91ed2906eb6e8b9848a471787e86", "14c2768d1441466bcd54bfe022f50799f32348790f85a61db590197c093da99a"), ("18a8d241b5c76d61db23696d79c634425214c8f3dc13d414411ca61e8a72223c", "0963977a9f82b767a9e2aa7bc2a70b82f440ae2882bb78ff46fc7199f2317e2b", "0501378508f3f4c4f569eeda41626fd94d59af82c05b4fe127a7c3b9b20dad1c", "29c1ef75583cbd175eb34b2583b43e7e4ecd68008268e31c945127dc15737836"), ("2f420a3b42cabc78c3804794232a9276a947c497e8e590640e4ac142f6bee057", "27457c22d9a344a4609c35473ba64046251a404ff60da967161366eebdaeaecb", "016faa994d3130859029a6e8df7ab268361a3a3ed3e85bf13ddb8b5edbafac85", "22f16cc6150e13d909d7b928ac7f02dfbdd2ee1be7c9d052411becb1f6134670"), ("0fbb74f3c014aceec5adb459988a5a3f66649ed09788ffbf7e2b21691073f87b", "02bc677759f9e91d6b5d92703a350f0742c918cbd9f2be43399e2e373810a57d", "270211fbee7723a8c9b5d1640a843f29335953587cb641eef5bbd4d035c3e43a", "00908849226addddd34e7cf6c23f289b08dcf801a7fc1eaaa271143df3cf44ea"), ("1dfd5b762b89ff0c9e63bcc16159449993f32835708bf6d22974da45448fc174", "2a615689d584dd478176c92e4b2156c429cb9f4ec29f32029807cabf1f6f5729", "2f204d7ebba1c7f34872c21a0c12f3ab66ef17394e720a465cea6932766779c6", "086398612dd2fe9c17f91c89568f91e3cbc722381cbc713bf98ed1c47d7d4e7f"), ("0e2082a73fa233c9a81849ea7d8892ee3fb236c97076eb7c2a5fe4ccdf426cc5", "029576c3743409b9cd59c2117f6f0a8dc9d8684b72630928244a33c6288282f3", "13641d459a687b166340190a9c79d9f11cf0ea57c14d975310328a9e24b8da89", "2108d0dba482c072da3bc0d973b7c498ba8edcb3cf38537da0ee3a7e715e0fcf"), ("2f4fb50043d4f39e59e2a86ab5df51a7463929fd9bc082c5bf9136182ea86e19", "14d5e53acd259b59fe35123380d0aef9fbe7c0429c456ffbcede7db0762c2a2c", "20f4c1f1fcf7a77160b02c7b3abe1d5851cb7be7cc3a6d62134fe449e86ca99b", "0c0311cd9978a19fe59f6f480059120c2759f74584e3981813f13d871ddb9814"), ("124aee738cdabc3fb60e24f2dd845a7cdbd3939aff9e9f5cfc98ab6700c6c2ee", "19bb3a958205dfd40fc9c94e375016cff6a17b3b3075ebe8b6b34a09e7b1fafd", "2595be6d65d511b6e0fe790c5f4aad0a5213d40cd490febbf4100f4f44314db2", "1dce61aec04e8d0aa0aef5fc0492b1fbc292e99a1e485e68456c0985ae4095af"), ("1ea0d1c7bcecdb91fdfc20c08d0f8fd4e27cc33e667c34e00bf9dceb6d5613bc", "1ea08f34053277d81440078e2f949030bed602c3b5f10e639f049813a6a66bad", "2b6ef02aa647456c23962109da0b43955383edcd2ca4531ce1fcaa84ef6c20e1", "2df64820d779c6066ca83e9121e94ce9e401185c05cb9422cc23be91ce654440"), ("22e844870735033cf76801a3c7c35a37ed4b2ccbf21c745c745337d20ed0c26a", "0721d0db4965e7b114a91e3f39cb17038bfb0d4f24db1dd067def7353656d5eb", "1aa4cafdf3441b1209d8a46accda68eca48b24b6072280b688703cde443f98f1", "15b116f08da9d67ead6b0454dbd96b33c6ecfbed71751bfba7e69849f5e66bba"), ("04820a29928ac4b2099d12bf7bfe733d39b76b5cc70cfd95150e37072847e635", "19f42966dcc7d571259a78a79e70fb9a7d0cbfc76e552c34581a3bbf0528d865", "05c40968820e343b3957125f484a59327bea56694bb9ee0f2b4d0281b7bdb92c", "143e3170fb81d62a3fd2f37eb452b8ac41fd64a71e9b066ef71b035df0411b53")] + StaticGroupKeys* = @[("23904f74b07209db3258de20e981b4564b587b238a5d259ba08329b4f84bc68c", "294993a5e2720d8e85ddbe69c45245fdb974de3b7e62be0a4147f5de75c83059", "12aebd3f304d8a036734f390549fef01316f754e480bb37a37bbafc0b051e617", "197895d5b16d7f654f030d102ebcc3261df296c0b6e37061d62f7410cff524f4"), ("1316ebb9f814050fd695ab397e8c3b45822fe71aa6127a254a8d63e2f8783567", "0f52affeafe65be040a28639cc694d5841da2c8c5edc4167271e3f813c30f4e0", "2b5c57f5ae378e6b88eec4e608b07b6e9c654f617381da7f6a40592499d26601", "11f6c80e258b238e9a90a9130f96e4ada309e269fe29512152cc1e1d8bf53d68"), ("15001a2556ba1054ebb98cdaa342882c4a0523fec8152a1ce04abda7f7e42098", "0cb912f5e88a64e0902019610c04162cadb0d6b495061c5e84fe2fe618c276c9", "274a05f36f6feda6b1ee654831d4132cd71e80bb07a875e34ee689d8925ab8c1", "24e7e253cb3a8c098b68d4b97838113c8218aedbcc0b175eb603db873e6cb72c"), ("03f7d0262a0010ad7efaea3b44a16966c427f0ff3ee601a6703e8c90915b3c7e", "2c72f97ee08a7d9c735775671e327cc52fa5bc439d4e51516f0bca5642e0b30b", "128c206de7e2f168af2fcf32af1483a311a9968cd74d6c29c639cea884375da7", "1285b0cfafc26e0ed52a0cefbdb400d19fe51455f3d594ce2460a10ebec24ffb"), ("279af6e7873cf346f3f62fef56e074a820feae108298381cfce0923be9615ade", "0faf7354c0ca795715a2a8bc723ac53407e01cf39f3f83163224d03616dfafe4", "191830dc3e240f5b95bbc81b27dbc38999b127c3d05ba3bfd6ade8422b9ddfd0", "1ac88928c8aba50df550cf11630c942dffcd4ff0af8da57124c9a605d911f068"), ("09e30ccc3cf5ccbf678131d0ab5acac6927b68bc12d56ac5a8bae57bb161b9f6", "24bda83f8ef4bc85e2b994638f87befaab0bfca13a855225df220e605bb96bc5", "19cd638d603d29b32b9e7e8e49e497e7a0c2f2145867260b65a476ba8c8a2de8", "150de9c39b53d6e872ff3017d1d7f0d4a4f470ebe413185b954304edbb6fd4e1"), ("03145b8600d35a7bd2719d693828f8da60ca98b2067571d9d6f0e7b73f3bfa33", "2c6a2a711c6f8b27583dccb711c314fb2fb513c2adc0b151d2feb46ff35a7611", "2435fc1c5694b26bffe9be63037e3cadffa84a49bc0947ae3a758059ee213885", "1316478feed4e70b467a3f38cc52b4635f372d917dec300df3c42ab934af6f9e"), ("282f621d99dcac331f95fbbbad2cd44072d6d20f34dd795327c14ece0a82869e", "1f73579ddf36e03fa52f93de177e8501a3c60ffe9a4ce316805ea534a758cd29", "00be2365079a7b339bc78bafc50a892083e9c57b4fde6355dfe95a7bfe237e4e", "1e1292203e1b0513cda382a52bad89a6b95157caf571dead05f987ec42a69139"), ("02268888f1c777116531775c87ae0536dacd37e37f7fc861305cc926c101dcf3", "276680842eaa6effa33bcfe9bdba2962061e4a04f817a0ac7b75aa7488ccea15", "27ab7634337b8a1f06d140b7017fa06c0f7696400b8c8434b90cf67d4455cb49", "25063f1983fca39d282a15a515f282d7ba021ad51a2777df9c0c4aec26b959d4"), ("1714ec83a9098d0f967a343eb382768c527a35c3fd6916438d691c732d8aeed0", "14459be363ae06c0c8b59ba78343ea4674f060d376e8e775e91756479a004972", "0bea9c16d033a5608985c8b596ccdb60c5bb3e750c1f773ac05e2f5c1c23361e", "112ff9f14ad19b6a9a1acae2f141fe4a6707e50af7d12dcdd227e988b8e11daa"), ("215534c514b0d826370001453cedc732cf993561c76dfb9a3dff62a98e4a5873", "0f024fde4842885beb75e959092272853c3c524e31cc2048f1fd19c37881ed96", "0a58fe29184d4b0b45329bcd858f11b068525894032140ce910c81bdf6e7a18e", "22b7efad3a97d1a5d1e669c3ca3c0773e7c289b71781dfa66c9f65da05186149"), ("06ba74307c9d3f397d9d6a599cdbe49fc048f95b74e853672a771d04f182eab2", "06e7f865245d82015c8992acb888c8d384770c2591d1ead29d81a853d5f7eb42", "0334f5aabb4ec2886fc661f815f84d355cb0c4dabbfaa3436338335480f2b066", "1aacaeb540f19cd512be141ac0dfa52dc018a086c2c16e325f7b456186feff67"), ("0c66a3e2a5c536b745887524047804546e5cea2f5b7b0e065f6818e255bbad07", "2a4ddb2bbb02cb6d9aa13c2ff7c288b68d2bf3eccb05a9914139b12be2c6b8c4", "0f9b5586925b939232ae087f92d6b0f8b15c7c85652fb75ea1e5db6f80a1c8bb", "113bd9ab2d189cb0e70783b7b68cdbfe19834a4c53b8976fd8b25b551a971c13"), ("149983b274713e9134fb34044be0239b7dfbe8a1523c5e6845d23c37b570eb2b", "2939a9ae2a84896e63213d822a33df434ca42f7ba86eed18c0cdee167383df22", "111923bdf94a296265d9df01cfab0ac8dac8e1bab9f9480fc2d4a017c82230c9", "0dfb81f48f64d67d322a73931586bdc56cef6800191e75325a0f8fed0c8f5481"), ("0c0675e87d522a3a81f66ddb81bbdbe9e39ac0527c9dcb7d900d16af1058def9", "1fc45c1e92c016f56ec2b987873a0eedce20d3fae1847e2dab0d74317a21de1f", "208267fe395ffc6f45d5b6e7b9c04a620d5d07c4828d8af93788a91c74a913d8", "24205a86d18d6fbe04cf31e74bd1fe83af23969df30012d586d9bc4bc1c7f43a"), ("2858c9cd8069ffc7a567265f5f3b1f0d221f812110c800d8a0417081b487bed1", "2651c8a9e7a740584c83c134555e7a4b8d5bab9c410aeae6171633c5ae6b92cd", "28d620d6cdd2886b2e7121a1a9c4f35fde5d59be7914b08a6a2921817de2348f", "1bb506d4ecbe29b8bc4fa1eefaa8a777385aeafc9f9b750c782ed73d0b9f015b"), ("14be56115b8b150283d83283f0ad52d975f0b4cd7e4513de9a42030995a9a992", "0f97406e6f00c9f14ec447cc01b52d4d183e57af97c2e2ed0cb31cb48350fe72", "2dd1a99b1689eeadb33579d402b025f6faa213f5ab087ec0f64cb22acf7b1128", "21811f4307fdce5f2dee4a2af2105aedba8e778e3c323d845cdb5a2949839f88"), ("12846599753e42ae327fcd8c9ee83fdaaa96dbbf6e1b53e0dbe5be8215624421", "2c56e3318156b2f0b429d8485b4aa3eca18bd8d71e0455c098d6c6759b3cbd4d", "09171db65451ab735d79085e8ba595c568f9fd67890870561a93f831fcf8a28c", "1a30f94af00fe9e33182987f6071eecb381fa2ed3d7c4c4525e2936e298ca429"), ("2a1b623a239ad4347d5d0fb4e424e608a3146d7003be65e939e08c85d599fc60", "2fadd1baa902b5cbdda414f3913d9c53e9ba0fb7972d8d833c25ddc970d95d35", "1e8022d9c894e809a2e9b2d24a9d5ea32cad3b5ba46837e68d8412a6730685ca", "1766b7a333891449c00f69415feda1a5a99612cc596d42e565cbff353c995ba4"), ("085ba15666d5015152714e3be5e8aacf22169ca040a5ac96d1d61283a22e35ac", "009c5e5a774d5d19881edc360f7ec483d5bc7b4894aaebdc8b32b2fe829ed4da", "19ed1092f24adecc69709ea02209e77a57d44d0ce98e3d43765b6fe9342d2bec", "22d9672ed4c9f3094e23070b20b99126a0f5173050596358a2f3fea6f349dc41"), ("1b76073ee2d7e0f8849f667f380eafa5309ea5d68dd8830ca664f7a479843012", "0ae4acf8c156f690e44f7b175dface0d111a0eba6fce2eb99cd26c9064d08df3", "05f494eabc2c60b0356b53009f552e449fb13464b786a9672056f2997b234a70", "0e76d41f0db1e18986ad757f84e8eaf50323a90887dede9dfcde7384e8cd9386"), ("06d01762b2fa30ffe3657dbdda7595f50e055161f6ab96fede681af4a139eb27", "22829cac37ed8c0b69260f565c884584c82c6f9375764b32a692b5cea2024230", "1f4385c501de5762e16db7c841bbd82e238b4c0de963823435b045cb73ac99ec", "163df370cd90a3e1b169136f2e526b487033d813d9bbf66899514e60333eeb88"), ("0900a829ee46d68f241185ab33d27227b8be7d0cc8843c98701884d2a329cd45", "259fd7ee876abe0efd1cf0c1209efaa12f4d71da27620f4c3b1ad6c09bbb27ff", "02b8c31808b702bb4ac0ea1ce99232201afbbef950b5ee8c9d555101b5ae1fb8", "1df3d6d35d466f3ff0666a2e7ffca8af6a2e71bd1534852dc6a21b88a574cb64"), ("066aa1ee3140d5697e69e7c8e46271406f5d7ec5cb2a008f764a530d14bc34d4", "0ea76a08d155f3054fa07df2b22d9eaaf95b52e1ff61bd9c168e73c0c6ae4ccb", "22bd8d4a98da971832a0bd19f57c7f514b70681ad0052c50c032344ebda57255", "225f8bf5139e400213d184fbf05185f42927bd1b878afdb8d7a9f07dca0be922"), ("161bf2ddc65fef95fc8a17638f2a636253d133269479a5f6cfa22dd4550b276a", "1d0121654dd3014d280e24f4cba41815638b4e46c8e6489249ae16a21acdce0a", "10af6545fb26cd1d13437f08b88fd486da0bd93950913ac5722a9fab21438d84", "1d2306b9634fafedd3491d69bf65079b7dba3f9187658924b46ff33d8de0b93e"), ("2c595614c1b525cf384b3e25e426fbf0975234b0b05904aa99a8f1684c2d1e9d", "06f546fe377df1ee0d7f5e2c310c4fd125bb2136c154ff7c5a12d0cd295502b4", "2cbf34ba9d6a3fea5b0ffd6b87f147a615393f0bcf87c4d9080556b07a203c66", "02f7d00352517d477b15aed852d42b7d9bce06d14c9cb6f259c6066503992138"), ("0cf0a6190ba781a7b4e6d3222ddb07184a10b74bcd2766b02585ce8d7b083c7a", "188245e3f4b9ce2b64f60d6cd5ce9094b93d54812afb5f5d22421fd3d5902e1f", "15fc2897d615fe5b82b11151ba32774520b58ab8da2003eed783c19d24328309", "05a3f88f558dda4bf0c9a9d276cfacb1d400043925e12f12dae0c6ad6da59c7c"), ("2a61d02be3c6f64f939548eb9565aa5be8ffe719a36e0880e46bad7b49aba4ce", "03719ead2e5a22b435a4604ab0eb9adae76cc803f257d049eb1ae74bd5c17676", "06c4bd0dc18161eefddf7f1b97624721a01582f4f14b76bf74aaae7965ff353b", "0c5d0794ec6ce04a01d7dfd832c529edfc906e5c247df52c0f2dba8ba10e05e3"), ("20fc3b27b5b8f511f7ead21028dee82455dc691321913d3ea6f8c4838c7451dd", "28b728c8c43cde6929b695ed07afc7abd7512646669a30b576ba6487229eadda", "22fa02c9c44aeca5af7059835074fd011c40577085f2befe2a4377a7d2b6e2e8", "238af256998a03706e00a12422b49342d382d8316a7aff8b5d9c0bdd25bf61a8"), ("2b45eeda736d5d8f35591b4893768396146e207f7644f09b7bfb0816c86e5142", "2562add26b1906a9999462721f090adf3f1d43b1d599c709c20b20e367606588", "1c52a25f72b7508de1596aaab8bd7b43927a118990a442d88d8ee21fc1292df5", "16f43813d20b829083f827e6f17b21f0319f0d4691ff00e855427be7d31a1698"), ("1bedb2c8b6f6317292a44e445c6eb7362d261d9ff073a9b609c2423ccd12c107", "0d07ed62a49e31d46a3fc78988eb7177bcc1578732c929de4231f18803b34797", "0fa424d50b1ac158f32877a0911c52f281fd9929bba13a5a542866ac224c9fc8", "274cdc216525d5bdeb398f9a66020a06c49452f8347bd899a2f0252e4bda2f3d"), ("04421c1696e61626774f23e5be3a4dfebebc5431097bd9b150944011753063b0", "2bc971a282b2482b64444771e20f3e92c51235feac17bf5dd97523321a21be50", "06dbcaae146df418d57735c3f9a722963d62dde78450288114bb9265cf3ff767", "22e7d5fbcfeb4c6cf539308324cdfedc19876e7634429d3ecff8a8619aea84ef"), ("0e5f3b8cd1ae0f98ccebc63766a69294b1b9df5970b3ce89043cf7b1dcb5eaea", "274dfbd995743932c09924511acbbdf69e063f9c5301395453e4f13564401cba", "0fdedea501b412556b5684bed3fa841bbdcdf635620c3fce5a4341a4e0dcb107", "1507c78782ca1d4267ee9ec2890ca87dd3c1fc1c10d0003ec78082c53e0d9a3f"), ("0930fcb6de548d66f97d261b41cf2ca82411b055e6d5d7cd8e14798163379acb", "1641bc9aa583843931b918d17c7fa9a39e0a81e5639d0caf9b7109eda30c75a0", "245158cf63abf4ad37c72cb2d400f00dfcfca5751145ca7bf578322d22b12151", "20e0be5a89ed2d1667a4417683d0fcddddd83935224d61196ae83f5a25ed65b6"), ("0e478d6e77e6e8ac1113ffbd8df4a992951d45afa8ed338bc94e1274edfa9087", "093aeacab15072be42d00e57cf165999b2d4f819561d336703694f27a3abd50f", "0b7b54c1083d51691cf45251abcb885a01c572988995ac33e62b5a9d552c881e", "189cf0f86394a3666650f8ed8dfc510f6c63961d65a58a89e600a56e5336a50d"), ("2c6500020d3585645cb671fe24f803e27fa4fdaa1a29465108a6197d0d3eaadc", "006892f19beb58c6338e090a9c2194274208bae766f457d1d910a9e9e98df9e3", "2d3941bbc65d5d829eb7bbb803fd48b49936dd8784b2a7140a992ba4fe0244b5", "238c18ca7f319287f97a1e12ec7f59d296ebe9f976b4dd8473259aac31ab00e5"), ("1b3b238d64d29194d56dc98de0097a5a1793485035d4da5a65a00fb3bbfcd4e5", "2bb34085d3b7bbf1d2d148843ebf6c05a990f468457509419394775b49be135c", "13514f900dc049a2f117abfa28e4a6d2dd742dea85d326980384aa481c3b431f", "18ace5433394f5c5979bd309144c43a141f6c8b9bbebcb26dd0b8cdd5cf6ddc3"), ("2e88cfdb3f47aed00b380d580e92a8758a018e54645c22812d7d380ee0663dd7", "28ce1ac0b93730473e795f1cc906df66959658e4eedb28aaca47a7a8be76e5b5", "1b5b5584092a46d2faccf2b75e9fe5f6f9790f6a4039017094e30aa0e680718e", "24973f9b783d0001599f8553a6dca0239da33229b5b90b4880e2dfab1d9b6356"), ("0e8ddd55daf9231cdc5292bddd7bb9ebb74a47ac715a8806411ea9e6ffdd6934", "288809d543dba012d4ecdd60c3baeddf1ac21e209b9f3ec00a6c3a24ec6758b6", "279dd1beda521dbc53d494d00845078f35b2ac03e094030c03cc2f6e61d25b4a", "060272bbdab4637b3e069cf2298a51f5b64ccbcc47085ef24243521187aa3329"), ("0816572afe024fbde76b7a59f7c656069e00258cf95497aba05ea01da8c1719a", "1e9137bc3476fb4e52788193abd4d456f60b6720a46afe6b0fcefed728f8bca8", "160b52d01c661dba8a7fb668eab75d56020e4f717bb3458ef6820d29cacdac29", "1d55cecd041a5d3c4c74a79c92b34744c0567aa685058fd88a833f511d522c05"), ("0fff6fa12ee972d229b093576b5413b6432e021c627fbe870f75218e319b97d2", "14f931b20ca3c0e91769943c2313b6a7e4b16295bd8a858fe2d8535079e9aa53", "03352836e3454b0995c5e0aa3e1ccefb3f9de2df49fb9bd55be0a056b502ebcf", "080151fd6bb358f682f4ef82c9279f8eed5213cdee68ed745c1ab70455205e13"), ("2647c9ada0d3b2e3f232cb3344f4c58541feb1237848308fcd7075115ffe6c22", "1aa96f1d03e80d5bc3f9f57d57be787be24f12bdd9cb35098c158fe9e5e02d0a", "146e74f16560ed7dbbb9bf4fa4511d056b93155a0fbf3507947f09cf149f24c5", "2bdb083fd2a15384f9ca67f0a7b52d601d9b7fcd97bf56f65c5e9895ab1b0025"), ("01e2bfb4603e4b8eda019a19dc59b18da9f0ae9f8156125f362ec696768e53ee", "16f7c599de54d5a425bcdcaf4d9d99623e766f9f0b46fb25de3a5ed474fadd95", "0894d5aa7d2b0ff7f68a2269eb6fff8f4c9e65294376a4520ba8f00ddbefde83", "0d6cfc5ebb4446a16fec154f6f39e862e18cb8ff0f20212b67c7bcb653a4d32d"), ("0759c55beaabd66525df642b7a697f4f31ed4714ab42ef75106cc4d4f4ca0221", "2a5d2b24999b4bdada7e9cab92ca575f0f1c76202f81c10c4123b7d6d699206e", "2e50178c806299a4869cfabfa0e3400564ff979dd709b9046bf282bfa4068d62", "1f7f4734ed9d5b16f98fe713356267861429996e8c7f4bc9b440fdbb3a0a8bc6"), ("123afe8a93b419246e31cd9f3001d06cd01f254234dcc52a028f24dcd721f362", "076962565276c553e7ce0ffe67baa4dda0ef5f7c8dd6d36eff3ebacbf416264d", "2bceab095d81c7d76f52ebc525e3667e0835d021a5dd7ce360d38916e156143e", "072b87fead3aa7a0fbd1ba1061876dc76fd734624eaeef8c5eaf9929a8e61618"), ("1602bf4b25be7555ec2a63680046404ba356769bc8eca407d37f4d194bd2a50d", "024261ee8aa23b6e6e85b7fc1bc961513cbd2364dbe4fca3af564ed17ba8bc8d", "1fcb3d99e46c8c9dc18aaa2e368433e21927e40f395415ab5ab45bf87fd08cbf", "2ab84ed149734215104258c92976a4b90d37503fdf4274b3aa1bf6797d5009f4"), ("141a5d18f9c6b0029eb43fcfde02b383db5b178db044662e837b9dd174f40e85", "06feedd8c9e059e11e3021508d9881096fe4ca8f37adc4db630307f858027241", "11239dc67428301394d0c05390f46a5d2d043f23faa75800df6f9201e419fe4f", "02979b2e8df310dd99afa1e993dff953672e493bc9bce30b2bb3bf9b5d36dda9"), ("25ee42481f5cb011280ff23d85579c1d976c69dd9326d831d87bd632efb32328", "2e23b8c7b1c826e7cd0107d22b805b107989ede8ac713cd7b9f2f1d965436845", "1c5cc3d7aff2f5be038cd4ae98a24005b2c55c9736680cd219dfbf37ee312e26", "1ba7bb474408010a7981916c28c19f28759d847758d78d3469678831ddf999ea"), ("00a617aa6b0bdcd836e8ee42b4009b4d7ea16544e57a1ae2ce7dabfaa85617b2", "036be1e64b7fe25d2d542b80341c7306931c636a19d310d77f3ee51fede3fa66", "2cf39b8e3d608ad80b8eb9ae402de71f7a14b449554f4e608840f974b7c52363", "06a8f1de8650cc7b50af48435c7c3ff2788b3e824336ed0fc87953e8cc684eb3"), ("07385741cb66ed2313edcf48247e04b8bd6845a9ef8145deda80ff8f8eb42cc6", "09c2f04b2087e8d4e5af901d5c22f899fc7eaac2dbe85f9f30c17f99c3bb7f4f", "18a7715dc06e8cd1f9e7aa89459d3f3f5dcd4b99aafdac9eb8bc13b7e30b34d5", "07e0fa2203db07cb51ff9905532cf5e7762a4fdccc1d100c45301dd03ba66fc8"), ("1e8089d90e30f1eb6a2e181f5c39d863d2aee47fb9a529c6fc16a8a1b57d164b", "290fbdfe22b24a3ffce0842f6eeaf975f397f2649b8bee78c0136a1d7035bd4b", "18f6623fdbfb722bf5e4241b4c3d7e517950264635126b081883196ce0c8e49f", "278b7971f2c37d7b9279ed8a62391eedd888a35711d573166f017707c6dd5c67"), ("2587c28444fbb8a4e98b80c6814913785f6cd1c96d4ea57df60e2585c0df1430", "0af1f904f5150b7d216caab5784cf0f7793e5d08540afbe1a6788f9e1399397e", "06680f80a2759106478162f9cd4452aeb8ed77c41e05246524fd2cd0a287076a", "16188c9074abf647b64671e2e7a4acda7a3e9c9991fb66c798c04cb3211932fe"), ("11775a64339f1ba7a7715df04f5daa3bcf784c952cc349ff8fd46a0d97fb9282", "0779942d0c002813b64dac051f2d7e345eea680eaebc2d492ae0cfb40a2f0176", "23610a2e88bc710688b0187d728f6b8e5e52df970f1af40c0abb63172f8deba0", "2f8338acbcf483313d5facd9278987dd449faf12bebb63ae5191b0a40c6a6cae"), ("0db2f53ff68399727604c20b2fad39490a736e4b161b39b51fc3660221362468", "0a82e7181e990a2df224d16e6c2f1293920a256cdead836388945c491dd4dc70", "0080988e9352f9e86c0418831d09fea381ba35b4de91f5f3705af945a5338e5a", "15527f85e4ab7431b7e694de4f8cf2efc412e555242724adda567f6a0b43a66c"), ("22e695ace59e89a96cddb874bbd5304cefab88529257b565d1db51ad16286666", "2e9d011d4b5abfcf782079cb21e020bc68e109f369ae5a3e07b391332bf96bde", "285ae8f55f87a963a1c282946c52c59aa9fd6c500009ef6ec2917c97de032011", "19669bc769a8cb470fe6f3e409c61b13f9df29627ef5f46e6624047e1c9b3ce3"), ("19278e5865e2fb7abdec1af45c6805023c3fab266f156db06e64e98fea9423ed", "03fddcaa010b689a2d572276d55c74d14d931fc3ec993271fbde0563bf126bfc", "12105099e6633cba8ad219ff9a48e242a2c5229a60decc86c8a3de806cf3c8bc", "2fbe3d260828ca467f16806e979adfd806cc203504e0203144388b36aa9e0e3a"), ("03e3c06a40cb8e1581355a8a86c8fb4c6481703003d54858ab7a8027c4489a3d", "1691e818e62831460f54421469696a54c2ab75be3a0984e382928f24c531b90c", "27fc7f8b89c7e4c4453bc9caf26971c87e89dfea339cd8cfd42bb42134942081", "2a1164ba56b80c960eb37c2a0a4b98878f6f31891ccadbb7703b60e7fd12631f"), ("29f8529a4bae4e85df94dbd8c35d192a4943fe9532e7fff195ab186c3b7d13c9", "0fa02c6a48745698e764f51f76b8188c7e86112954e83f1873df52af7b756eb3", "14fa5f7012e4d049a803601baee1388694622a1163481c3d1680f8192d99eee0", "23b614b2c67a0165a5a2275291424c1324cd70b55c3785ab5af823ccf1668973"), ("2dbaa4b5cb60b957270b211a6f1d3df4b84c3af77ce5af745b2cd2997818b3ee", "21bac2f69e8ec182eb591d34795744f5764b6e3453e2cc2b7035da0150033d30", "082abc5acf7de318d8fa826bd18fbc41a1766a1eddb503f038ee9a2e931d58b8", "101a39628967d8922fd77c53845a8ecf48b67c5a0c6f203dd0b29d1660b01fb9"), ("2fb5c9e1dd5ab3a225c44334189df7bc5ccb80f67b7318b7d89d29651c902601", "2aac798a857bb454edb4c497b9f11c3b41ced65d784f73d137b0f5f312d2371c", "2e363d0812589c2a9a8d82bddeff013b4333e0f4095eeac61e2c819cd2f962e8", "0ba4e11c05da0646427e8bc7205e9d54b4d23ce233f31c73c60de030980e276b"), ("17175a58dd354d90d0dc5e4d50028297b36715c5abd4c74780a833ba264b898a", "2b49b65fefe79d0b721cf254f88d4cfe1bfa2afab3ad399fbebc8f3f8815419a", "10cb2537756e321385a970b83df1e5f1057bb6495acc9fda3282d8636923e238", "1faa9fe6ec3412d19dbbdb65497e04112639d3a57c6dbd93461fc6d9c20cbe76"), ("0b19cc9f9ab4a2cec81a566e1858eb622c9f42607602bb26f0f187592a2d1ddd", "0e55c01a066149052631b0338f396cc66c85a20d31c15b8b4d03a337fe32e39b", "0c43821cf1e9657bc1bece3f4da90abd30e70b984ff311f80199201bb222cba6", "134ea201e3444e8d0145a9d8749d3512356f2f7934b0fb6b04462bd4026b971f"), ("10d19735e754ac38f7416bb9554966f033cedc83af3ef21f0d4971f9c6a37d99", "2e07baed6fc06d9391646a39bd9ce33f20a4331235ca7a2a2fa1cf762c7bdbca", "01c13b7cda8fd89f3d17405a941d5882edef541141f3508230390f31576d6b46", "15ef329d427557ae8c65d6fd8b2968125b2679ea89e404b4a97640882e47ce51"), ("29f4391c3c669a0ba355c6eef5060c117e45ee19023f0425f72ccc467f3fc79a", "158c3cdf28eae31a4af624c7b06e6bb77ff59e3a7fb76b13b4ca030df6dca854", "15405501f68c92976eb3b927e8e78a7e9739d4a0a20043553ed2d5916cc35ed7", "0a843fe08169162a7ea23dfd1d1f78a3cd3fc54ddaf5837e4881acf408038549"), ("2649bae2b8325bec7adf670f0cca7ab4931828c32a6c86af98c0e1e34dd7b0b9", "193f1207d1ca6359c8aea478c7ea23512213276b158385ecb7b06b358e4984f4", "0f527f63883e0a8cf49c1a66be6558cd88ce9a5e532d9f2af1039a70f6629068", "2a3060b7ce92f974782a93ac55d6178e52131251100bb8d137fcb71352997b92"), ("250dcf0770d221cb1e0986f55d9ed0a0ec9806795337cd21656686b1c2046528", "1b579981e6671b868918c38034b4d94c53c178d1cd3433f1440064c7447d8598", "1e161585f42077167d5bc9db8e25ff885db12e2d307e3aaf6eeec855aa4819a8", "25f295ac205ab3ad097355527c69721fc5520bac4c3aedd554c860f2cfbd8d8b"), ("18a72bdc0b8cf0fa56957aafe687931394af32eeb6cf6338d5f2c7d211f6ae72", "0452d9f00e14bcef2f7082cd033bd08b029b92659e9c01bbf594b25824859540", "2b68e9b81d9fe584738211d8579607e3e3fc9fad057cf52c6590c9121f2de300", "027a268f577ed821ae6b61ddbd84d7372cfe0ed338f4a99b7a5c06b43e2489ac"), ("2da49e533d62433917b35b13a0815f64a596b823f958045d146a8c8460b379d8", "2bfb5f245001812fbc5c1b06a559d7f5eeb4bb336fc5011e59ae5ce39efe7262", "2f14d9557276b06aff29a07fbe3df4656894e928c25835967413ae17718054dd", "286fea6b2fc75fd2ab9c30ea54892d7a7a298190a48b107376ad6b3d62728e15"), ("02383299bde1fd0639a3a6144a30bc2418f229f1998f31bc3f87c6957d8f388d", "0d2ad77d2b0c43804041c12dcc447928c58a34836fff494dfc6929536b8f6ca2", "30087fb5da0d003d3444a54b51649ca8e1b88f50bfd770184b4e84314ed711e6", "24cca7b263fa8334220976e7745bbe2943eb881f01bf0c5e9aa251811b66b47b"), ("2aacadb57f7372703a1f6300d2a6c86b1fa319fe7cc6004937811fd3c3edeec1", "1085acd1c31bc91635afe281d6c3175698633295616c75d8fc45e9dff4e5d694", "2916427c15607481ef9a8b5c21fe4f4cfd7f2864f4e8dbbdee80b4790819d1fd", "2ee25076569dab82c16bbf07079754eac2ac02638fb60a25d044215d34bdd8b4"), ("0f3e0bfbae773d315c231f5c936bc4d5a1df5d69c3f9c7c9627ea16370e1ce43", "0d47e820d43aa68309fe87ac12de6c2026c4641db879b0ed4a583b78e05c1f6e", "2d5a7f1310b05a772f463ccc836dba023f4bd837886ed0c37d4c2ca4f3c39cd7", "1a9e9ffdd839b46c5890d03f5ed75acc7e42014445568d4b4f12436ca214f019"), ("194e75dcb238b57ee87486f615952ee8a3d641d35a57389782f5312efe0bdd56", "0c0e47702704dc0bc47e34bffa073a4bdbf73e1fb22012ae1aec3f45e0b45ed6", "252887c25e8ce15cc0dcd080346346ed432eb2b77cb520fa9080d3773d8ee21d", "101bd9c58aae0c2b56ac59e66c4f1ae05b850e9fc3ace2aad44213341b6a10df"), ("1ca1f47c78a98f8a782667a6765969c4eb6e7f89ca57872982b242bc73993acd", "15744208392920185c18ff2a4647cc69d061edd0654281c8614bfe0d5a7587be", "18884ada1e5e2428d7ed59e6cb61771009d45ec6da2064d464ced8c6f52fc3d2", "2bd76e83a0ae2f891425649df85c84d044c1e49a3974fddfb8ba66ac4a6632f0"), ("0c74f6a76b6c66a8c2bad72ef299dfc011b37ec69417f0b8037e5f85891bd364", "1b00d7f017726e5d75a90bd6973260dae90d23d9b99200d16feecc3f8f065da2", "2f6e1b001ba4fa937d70b71a120da648022582d6496b3cba16280b24475a29d7", "09eaa759e1d844e26fae0417d2c090cd4fdf789be6286953e90347fb146254fd"), ("086eae276dc9a8bb3ee98329f907f4c59255703f772cf77ad9b5406f9495b674", "1322ec404e68fe16f59ef599e62ed41ceb45766a97b59fa1cc65cdcee674f216", "2997363c5d365b8d7e4d9c78d5edb57aad194f92418ddbf2601f1c042d1b0324", "2c281216266e42e9a72f99bfc2ddda4a88d34ba55b71ce08067e0bcd9a5b36d5"), ("1c0eb4282f68dce0aa06ea76ece445ad413c0e0fd35e42213900ce6afc963804", "25ad2873cc0368749b51ab6124583aa39eb29447a27c33c8702c8010d9d078d5", "0483e82d3565a0ce61adc7779e1ec039cf5f981aeb0c2389ea642e39f473dad3", "0b6eb9c5ac6aab00d2ace29f3bb3933f865677713d42c496a8a75a8604627b96"), ("1a309ec83045d55e750ab78d1e651ddd4a4ddb9caa93f91a65e059a75e0209f8", "20ed643faaa8d20040f23e93bf4949c684117ce75e84a591ef1845e73c4429a0", "291a40e9a4fb861417c0434db19edc19701bf7cab560821af0c3fc0f2eaa5259", "0ef2a8706c2afeee8a52fd1cd7bf40a061c26d82159bdc00697231354906945a"), ("1f18477081f4d5e67cba633fc051d1f25cca3b26d3afe345197b7088f19ec1df", "2850a8aba04f1e756071fa0abeaf19c501233d983ccb2cfa434bfe366b4d26ee", "28a45082fbeb6e5a281da8337214c3bdf663d1a9b7fd6c5b46cf181f16838d81", "0626bf7d81334bd8c10548e4261a305f4e2cc127d49e4557be903ce37a4a8d2e"), ("273677be7cb7cfbf544aafe60060f8c2e64ca94bc127e50835fa7430f40cf1aa", "29327f7121f6d98ca7715d952ec6870912ff6e91b9a14501938aca308609bc7c", "2c3faa15dd5e1a9bc45a7a25694fb656901a77d4412637df7c4fee5867ce05fa", "1bb679a2ec9264f5e61157106242ea0be55bf486f974ed012c4366d40522f85f"), ("2493353007a1174aeb0b180c616bc1ca2c1080b294a68bcd5e6dfa3495df7a0c", "07289638bcf6a3666383b4513db3c63cc8a8c9a4ebef127636241181aa6b5661", "2bd79628251f792ae6be6e90f337c7412dde88800a7993fee1f06bd8bbb43fba", "1944828d5710e7fcb892538c56dd1d3d18c5f2184cdcac4b0e5d09b609cdd586"), ("21cb0542c6028a775c9e91459ace0a60a800f9cc2512dabcacaf4d8c3c0f229e", "25601fcc0c6195270af9f7ff17a0b895d7f016173a25f65e29757406bb3a7000", "0d7dfaf934b3b819d8e7be1a15218871afdb27c5aaa6304dbbb441ff3900ce3e", "1ce903d105564538c3d1ff222f80a0de8f79dedf24c25141f885d51c07155f24"), ("00968c9de4d54b3fdb9d3b04883fd2f6ce9d2bd353067c4dcdc0c4d77cb49dcb", "0120d89a72c5908776d221bd69440a2cf70a004465a96f1dc71fe3774f89db85", "1bf2a108fd15ed91252336be31817195c93b125bd4d7ff98849f3c6bc6266ae2", "18a0aa25551a9831281f55b09177177d33657b1d7477c7350328b0b9c629ae14"), ("09b08b2dabd795057ff86569e9ca957a09a9ef2261d8fdb55b35c199a2950a0d", "264ba9951820104267b6137b8291a5ca93ed8545dcb5edb2c5575f6fc3868ab8", "2b3795e8e02a7789dec1c96431e15789db309eb1be7d44990e72a2ee23ea7631", "02935b7d1ad16f2276709e622fa4e59e57c37c8c34c97e961ca3a7d1cd0f3b49"), ("28ad6d4cc5c122971bde222021f58aa4550036649cf7dc1b37462ebaf42a6b25", "0bf9753f354ae506a885b9f706b1a37df9314e731046af55e842119b451f89f5", "0c5b1059ca052bd10a8955de33f21093061079bd48ac7eaf878eaad52c824b49", "117c33abfa3477630ef5f961eb8faf2255ce3eb9e36571342e1e69e5faf7ccd6"), ("0dd4a20b9bbb88bcb435be9c7573bf19edf6925d552b7e46deabc5eaee198ee0", "2e92a5229ae0c9e9ac34c0a243e0b1485ae5f2987724d735ba6d2ea0232bad28", "135cfe8680a5047de729b3f3b6841ab78853e5ec2fad015a89a02e1e03918875", "2674460b00a19a85bba3ea71dba74755fa2ed63807df405a89317b0a136e78e7"), ("05fb82868b92769762e923e032ee7f57934176884d7bf286519a74558d7ecd1a", "27ca70d949cb0dcaf5481cb925ab1869142cc4cfbefa717f35398fb160f48cb3", "1b97de8db7c227985de8ff8a88b7e7d7f68fb5b271a9097d235f3abec72ba144", "083b762a3426ad57b5fec7abf51abcfb3dc62e116f2fd9449a77268df2017f4b"), ("2ae241ad88367133f8a5d90af0624568cc12c74155236abcc23c5833cbef3614", "0ff24e3ce225fa7127a0340549df3efe3662a29de2e4d462d001e59212a33c97", "0c5b53622b72a55ab9aa39182e948abcfd3c4a4e4e05be8eba6205c4f19373d7", "1b29eb36d4f66431c08cd024d1aa6fcaabf40beef7d4f1b4ff74191e64a865c1"), ("0a154bd732b880b88117a28c29c8cf158ce926229fe6857703cc2968ec1e749a", "2195cb1d0030203bb2bb529ee513036ef825c967665fa420a537ff4fed30ed92", "2364a4ba820d687345317048126426f5ac8a15eff2db456dac5726a2cee2027e", "0ec594c87b558e1060dfd36d4a2fae337d8eb5df9c7f79df884de06367ded971"), ("228e896d94614fd72156358fb743fdb4cda73716e22c7ce44d2e3d6c8433f301", "10a246f6bea487e47f64e6be6a55b0d8768b07035b47757c98da7c68abfcc131", "18460719d7cb7fde99647ed57ecbfcb60d04f26f61c1ef6c307e74ba29c079a2", "0163b3d633070425ee9368b07e406f52b0f8fc76e54f1913f110f878af317c01"), ("015be653a720cd707b70f84f3b810cff42fad9ea5f9582fb43c14d00b87f7483", "303b2d03ed77be9ad9da523080a733b14f38de156b9fd65295c723dd006c768b", "2bd352ebd4472da9de7e53d678f1cac2f5d77654b259ab216f346e9fe1d3d159", "2567a59c8c4d7578a7f0831ea2568eb9528e5b1928c70fde164cf98a192fd1ed"), ("103bad0acf8bdf5ba38d09fba060d48584ad4a6ee06252aa726e23a323ea3bc0", "2dc63167dd46a5e966923fa0544b68cccd6e2de93254373965218317b97b151c", "14b2fa02a05e65d832a40e26dd1ea9f988b9ec506691d5a5151e24993347786e", "205899cb9de98fa10b0dc2cb3c8bab7e26a065891fbb1caf5a6bb95695242a1a"), ("0c8601894b08428fb4df9bd1496c8d98b1f9eeaf27293c77b92ff6dd9f7c57c1", "2b3eba51a50660eec9ae3e6c2f17444b31b8b09cc35346f1387047588787d748", "2b4cc14e31ef5374f2a8f719d4367418eed1672b416dcf2d856980bb53eae9cf", "1bf2e8091887d6215d38bef0bcba783e7d5a0156c7fb32621f27d1d394cc698c"), ("192fb2282992b2dbbe0d6cb9ce309b4b58edc94d98d47614486b7640af7f3c72", "02546c511d03634b6f68a9270e464bdaa25b9fed5760178ef302d40340305787", "214e156e282113dc2c64b8a28b93ae71bd4474d2828e6132ad0c7bb5b07a4be5", "2fed8ad92c024aa3f9cd7284586721815e950179daa3807a7986b50cddb3e0f7"), ("021b1962a5b97b6b0ff4f6277f6025d45551d5b51593b66514e719d066e12d5b", "02d5220ce80b76a2930798bb75730fc71b5f25458d02d1cd4c7b22a7fd97ba9f", "0814422ca6cff3d870683601c1a95e2319f47c8d25d0a152fa7976a14ed18463", "241ae4a83256b289939f87e0a1b2a73d93ee6c78c583995c1d44b40dcdd956af"), ("008f716d31293f6058b16aa51ffe2b4939ed3e945012ae2e25f8c95b4eb18c37", "231cc9acbadb313057e5cec95c5b10f6588b287afcded9d23ff8e508106ea3a7", "1e398b710761ec69a0e9a2dcfaa0b31417bcb2440eb4b629a497ad9ecc09e604", "25f054d17013d12ba7cb6dd76ce90bd9ca5b5b1fce0a81af719f07ed16427356"), ("2a93faea75e9c34d929b095ef6f9f4de8874f61359ecfb3c2b87e63b07317205", "128def7b1865bdb38b459ed7d79b0ee8f523a98b123d0abd6b405f5136b042c0", "07ff0f7e6fc7dab9a95a292364558f0ac13047cf524feb54e82bfb4734cc8e81", "0262f7bcb495eb6aaaa6d649041602e4f11ffbc2b8e5dc719583336d87b5e60a"), ("30342581a8119b857b41e44342da4683bfec0acc524d996cf157f3df02e13c4e", "145a8cd1112c6adfed34cded7e990f439c1e2720451ab8e0c9a971db5784bfad", "2aecafc28ea3e87abc93ec1ce4bb495dc8ea160e1fbe08fb3e3eaa79f76be001", "065e0df8f6056c7fe4d6140f9ebd63c354b8e1a2ef02cb274e16bf17473b608c"), ("11671df5ddef8104913f87f33fc8ad92e821f60d5bf73fbaedee7677c139e394", "18999415e56055c883d7b1b4196a32d3e8586bbfcd970749d339f2fb690379b0", "0c490343bb16c6066d94520d42f62cca1cb0b7490d1c4cde3a6b6fa3feac9f59", "0dff4d195a899cddeb251d8c8c63dd6a7957093072d4e0a1298c2a224f32bd46"), ("057ed095229b27a01de746a4e0ed3dc4d71b0fc77d533f7f52f46847d4b7b37a", "11bb003c06c6b2514d35db393eecf8b84c8b0f5473acbcf5f473440e20974b42", "17eb4f6f01664978717fdfdb36ddbe222ef025e580348428d0744237ed3e5226", "10d2abc5f2a0b052c472cb8fe5fbfa4fe712550440e3b641cd63b340304b1295"), ("06944c9a8a099abcf4d0a119215bcbfd52cbb62174f0636ca488f2da950988d5", "104aaf80ae2f7cda96b3d6f5f6ab64b46d2cd41c7ae5c4d62cb75725ad639595", "251b8fac63bbf9728100d11233181bb5657709ae500bf1f7310068407d57d9e1", "242fa7a705ec868e045874bf5866145cba02291850613d76402b493f4f5577fc"), ("2438b3f943cb368a98ccb3c28b5724a840c9e62f2354319b513fc76b8a6dca36", "190de990b7a7d0917ed5a110c04cc4207a5f6a8a7d1a395144a50d68afeef89c", "1a4850fd92ca21bbc425f4815b08544a392073836f82bc8b38ba962626ce4ecc", "0865bd5306a96de76a038d81fdcbf5b2a579655804310edb62daece60e567f86"), ("18b098a316dc22443d7784dcd6ceaa60a7ee900a63b5c6efc854dbe89a47f834", "07eeeac8f40ea7092d576bb6290425056a42aad0723b002ff98fdd51d3b2ebe0", "09472222c57b4cc8329c1d1bfdc1a7b4e44313dc7ab397b5365e880ede3b26cf", "2e5ef2005221e47a706af8a89dfd73ac288ecd17ed0912674625ee5a6fdfbde6"), ("1b7125b48e7eee8a7df7be0b73927fa7becfc6ab7a68b599fdd0dfabb12e20f9", "09af37c8c3ae7cb53219fccb6448a6ee89a184b2df95f79907dae3bc087b291c", "24d80e818a1a6f8662c44ecfff983faea965ea97a7eac3a6e062bb5f32571b64", "2940b2bc861dd39f2d69c2c9237379603ca1b655807b5f35807dd4f489048e31"), ("24ca10826783c504b5b21a143dd848efa8b3a9a273df25f33c4bc85101bf9db0", "0a35d39af6f0121a21ea658bfa5dfca40e5bf857237072123e0c941a1276ee52", "075d03837f468a8409cda49e98948d7b21de2ba9fde4caf6fad0fdb03f317036", "189ea85a88283c8dc46eedd7fda467d931fc11d8d234a3a0b6ffad6896114d16"), ("0762c449618fd3105f2b71d3ff29a3957fd86d71f781be0d4be82307e5493113", "1d49ac586297ec85c492d9db8a7e2b152afd7ccf19bff12b1fadb7afe85216d0", "2f62d7e86f263d85914df3a7ee5a0410fa5dc52bfe7626aab5a0b232fba7d8ed", "0101cea5543df5f118be9d97f819663049a677187af0ba581505c9be568a1a0d"), ("19ea3536a6a8c3ff3fdb6496b10572a87c98f26108ce92368ea558cc595a19c4", "0d0437becc0109b8bae977d733d5b81cfc1309c9ad98d99cc32ee23e95dcbe8b", "2df88de2b819f3c9c7190356bb78af1bc24b5a61d7749a2fc2bc08b2802fb2c0", "0f71b9f133ab68f140062ab877f06aabb87043baaf6cca451dac6c802af11e2b"), ("08b1222f336a553326c6ed910370f7342f7bf3255b710ebcb800f683b7aeb65f", "145438df0c3665ea07adce1eb5fd8f7e626064a8a6e2634084a3b1d2bb852c66", "00da200b96e706412a211a4ce4273756693294e10dd33efc412bf894c63ca64e", "1e6fa916a47294b17ab30b7b2e29c61d79b260fe29fa7febddae9b3de5911d55"), ("073086131c34830467e26646a3074ac7b797ce9581b1e00e3c8bfb16914e54f6", "00e4a60b1874298466524124bd5c4ffa9baea3b5d3cadd78103ccc2752cc153a", "1013b17e0866e747213e5eb13bc28ea539485a456f90258a8e6d7c84101129ec", "178e1ccf39a9b728a833ef38984a045343b59c84b6af15febe427427822688c1"), ("06507fc961fcb38c66115cd44dc905b2869c32d5b443e2277d9f7c38d91e7831", "28a2c3ca412ce417bada1c897114d50e6d648550c4d6d0d5c9082b0db4266384", "0b68c63959bf58f91d4eb2d84a1fcd5ae2b7abf34f111b42e2b6bab82636eb0b", "2d15425d97f3c2bb4807f8a13963a9c7c54eb54e908f6123586acee74027e7e3"), ("11c43456d0702ba60ec550ff355b17832b7294eb3e4bbd03309d83f6cb215551", "002c8177b1b7970a4aba829d288c9c8ef983d61eddc85408526ddbe757c633a5", "0fbd0a1cec76e6dae8fad90f45db0d46874c1d1602129ec192ab66903a08a390", "0038d50b36bbb001334afef18fe721b5035ba8637bd5291cc6ddaa8f0e99af33"), ("1224577e0dd9dd0fcc542f6f7b4c394925eaf1f06e112852ea906c16c674beac", "04c5d572903839478edec51f40f08de0ed1aa278fbc0878b7b82d10943c90496", "26da7ed20ccad87cb5f37ab28f748015a0f42e1f178461e597a211a1cd75f633", "2d85e9bb6c930222dbbde930b1831d01002e9e62f43b98a71c64cc4bb330c44d"), ("2e935775aef16793e8a5b0a9b425d2753a8fc09b0e79523cd729761cafe43743", "2e3c31f6ae856ebb03ea6fba8fc54a5d2e4beae669ab20cbe09d3263ce3b65d3", "19b0812b949e99d87f2e4047a4f9e31da46bf81fbf991f350ffd909511a66a23", "14b85fa6d98c36c501e308afb3d69d02bc37d1fb2eac1a41dccaea0c9aff77ac"), ("1439ce47ce1ceb7cae8961b0b52f9dfb08033d81ed41bc93d2dcafff2f8d47f2", "0a53ce5afff9ddf805735d4eb4a7611d5b084c2040034ae58dcfa50b3936e260", "01e892284715065b5a92b9c063aa7d220a818d78a6a91eb9d5624a080d472973", "262e3fc1f5c41d634b0e243e8e5385970a3b9afa9008d6f501a4aafef46e9279"), ("0e50bce13d33ddd0e39edb02a7bd1212d60e22ff25e7e683bb483b3c3d23b2f6", "2c75daa3b09344fdd2287c1df8698e1bc948c8afff46aef475f331d618edf368", "27fe12ca2b90444f7223c78af9cb23c1466eaada2de2e33ed283d342c28bc85e", "2b3daf9f4a9c0b4b4d644df01bc0f6e6c8489ca5b6faeb1b7aee44c903a20eac"), ("131b7d2f1215fd042256a2a0fa2a257a46ba9dc339cfc31aae8c28d1a08f033b", "1ddaa9c3a64a81b0ddd6c9f2dd44b649a66fbdfe78ff4fcf6c0779a8fedfb5ba", "2222ae8c50992fef283adf9524c412a5705d677daa2f59575f8ebcafd0704bca", "2270c090fd8e0f6d0422e9ca0b9aa6effc01aad060074f9135bde1f116921b89"), ("2e41c81ead6b3858a20c8ac6626445e71bd6808ee4019ec32f759f01ffb2c26c", "26368ddd7ce16a0362975548fe8ca3cab6bf49859488f5c78e1af5e1993ee496", "0383da042e3ccbc90d925061b41033e0dbdf98096b840b67deac6a59f6bfb1f9", "162f777911335dbf27ff27b4a046e0233814cf94ff6c3605b8d59d4519cbd64b"), ("2f0168a220e881362e47344b500f7605834d69daf295f2543e12b13ce4efc95d", "23a2ece604aa110c0f57be38c38076d8dd2910964b8607d29698aa92c8c27914", "0b2af369173f144224f32f9de079673cda6000e252f0f8471290afba5e701889", "15dd3e2938483c6f24df6a8eef5fc6a97e4f6e9c4fdec47923a353ee95cf2d6c"), ("13571ab785acc53480186dc12f492eee1daa9d1d7fd75a0fd76b060dada6ee74", "1e40c0c340a516113a80901b582ec8b4961904c5095d0b9d7f37afb627d41b35", "073c0319f3d1d5e85968d61cf83c2c7f6c784711e9f49628eb2185d511c599c8", "2f618fa8ac4243e822a374a24aecd24d94ea193aaff9aabe5431022a5ec3c007"), ("0c4131f7f0c548b27adf9c550f65415820300f9544d024b8d90a758bc1f2a2ae", "2590b8330ed3e60b3fc3119be7cd5933556f11b13b290ab5cc42460caba7bd0d", "1e5af9bbfb44bca82695b7d384b0168b3fb7d285245fd00016c8db018fa69845", "2ba5d4cc0d1ebeee1c3fa341aa9fc2cce21d9c4e1517c22ee8826cb54e08c61e"), ("0de55303ad2e706d579e25bc5806c6ad5d26e44804747085743fe22a5fb21426", "200475e59632e235cc4691af6854d34867e47d542b23eb8dfc60cb0a99039b86", "056e01d0f2bf65c709de12ff4e5dc77f6419f2d68077573118c58e2a68109ca8", "0e4bfc5bd20c4ef8d85fc4a7c3835f3a494136845ae4474cfe714a1c84802028"), ("1f5a7702f1fc99debdd7aaea7abc48107c45e86d58dd53d9fcee67a36f50b078", "1c60bfdae0ff13b81ebb7f219ea1495f1bd33a677b043215997cd41b6b510463", "2215e6f274fe6c5c77805ebf75115d6d0abf6c0013b78f72f4c19d7045c7c317", "1ccafa83a3ce74b9962f697befede2c50bc36313b4858d6106535c810b24ce1a"), ("1c247896c35941044269d8882a300864f91c49ed25490dc2d48fdfd0259bf0c6", "0713057e6fa051963abbac0bd1b2b079d771ca68ce2fca8f0d42a7aa2a4c3c96", "0f32052638f20ada89f7eef31d01f7e630c85598b07c0db10718f3458bed44e3", "2828582cebed2c593389e6a56b60a3a777314abac9566ef4840cea7b6bcc0fbf"), ("1ce4f4f07ca0ccc3881cff64371698866807d4cc216f98124146ab1be5bda72c", "20b63ef6117bb245d84b195169b2466ae9b55cf76f26b28d8ef59c21ffadf69b", "1a209721915a82d4fa5cf3bd332089c2c144f3c042b21ade5db931726d0bfb24", "1f93e5e4f441b332744a7c3d9b53cdf5b9bff3f9be505cd3f74382bb75cba740"), ("0eae4ead53cc32e3a8c52cdea26a32185ca410c603d1307d8f5e4c1b266b94c5", "24b4b87f143cda2a3af7400d21810f8e8e3056f0676dff5262ca8a7c766a01db", "0d183f3d8468be8fe2863b069c798e7e629ccb5c715fe262fa1008981209aeb1", "1c0fcf56bef65d20ad1fbe6bf5ca0e5fbac211b5d1d3b2b5251035abd01888bb"), ("14ad4d62b5c91e2a841e3ec47403d82379954e825f7c4b15d1a490ff58bcf1d9", "04993debb01b66f78eadf88f19696f0578e13beab30e1752b609ae76addf7517", "0a1b4f153a8782297e90106fbf16404776a98b6ea23f3ffece473e5d0a3a93ba", "163af447a6d2497e517ff14671c4ba70e6e4aec1cb4f12c5d128a0359aedbebb"), ("0eca9aaeac2232771146b8a13a755c4894ab07540b6df510f114047841ae2328", "190a8bf4d669c7dc92aeeca680792bc9850b1d376d7faa0f7e55e825cd84f794", "19d6affea63082d08c00a77722b92aea7f4ec9c616ce66991f1f31c38a5d0aac", "1bf7c1446c53216077a11ac97c959b2fb696e1ca0373f54e18201792f5ea2448"), ("070cbebd8d0cdde38b42ab24aa11be28c8ea48d99a5b9d62a9c3c9cd9446d58d", "027496e381602ab456b1ddd4ccca28ef50f1ba64b9135a9ed4fbe9cb0767a1de", "178fe606255c467a74298d65c3c65e67247533aea320e94bdaa6f3e23586b18e", "168baade30d319d7c864df4f4e3b1f701fefc19ad1eaf704bd70c537033693ce"), ("12d602e2dbce477c59493493e0c287a575d04b32ce352aa8d814121be6d808a2", "2b6432bf347fd3e3be9dd6743c6d5e326023428e5241b1c44c3bb47d4e7c0c47", "1caf7c2a05ab0ac862899af46a81771652236325afc3d62a418e2ca2dc0c1626", "0d8b367aab21463d97774c059626602d63854ec3d4196ffde658fde648718d6f"), ("2475edade3fd9cbb4dc1c33ca2e9d3bfcb52f1ac3171518fde6b5c01c70a3f9c", "165a2d3b3fd42ff52adbc4d3d06232423cd7d666b2e80ec7e664f7570f57d883", "124d8fca624b97e5d14477bd33cb355ddcfc804782bf68e6913f10160896a138", "031b69ed186d35a04da9789ba189de468993f43a99a28edff21c4ce7a73b70ea"), ("1c34fa214fe2c62b210a3df2ba15cdc8afd059794045b6e3e592de2d6e692d48", "053619019fdb1b23cca2cbabd40baa28a5c3093d5c531fb2c4d06079d341440a", "1a4c63d5d1481829fd0c77f3ad79a45a21fb1f4bf77cbdc6f27c2bf5f469d8a5", "1b795a186e16da995c4372eb374cf43b2fbb403a0d5b1ea7119440b5c1501424"), ("2662e87e1a935341078d8c00ee2364468cde3f634a6c8379ceecdcc4c9b7fedd", "2e3edd0e01f8d9f6e6e776c4013ef6f08eedc419db2c6a475b1b855e1650fb1c", "19b26a325cb7c0ae23eb43fceb66793f4b75f112cf17fefc3f4ce9e681f56a47", "0373e69614903fd39da2fa0cafb09fb324dc03d0481bedc4602fc7d60e0c31a3"), ("252f27ea559b944498c27062db5164126009bede91c9ef7adda71d9360b6dc89", "26cc05eef6a557bf75b71ef8f928625ec39d21810a17ec9dbee002bf4d45c273", "19d44a7109415e1d302c7bbc6052e2141e5ddcea8886faf28c77e35a519487b3", "0951a82674096c9b5ee4f9a863cfbc7a95f0b9d0c311f2c3e29c2d8796be4759"), ("11d9a582788bef777c011d82815d6d415f0175d2b49c752749a0498823d122c9", "0343d1438f4fa7f8bd46633464f44c50d030be41653404a2ffa2136aae93608b", "21fd5a8d35e639b2790ccdadb7d7fff9fd70c4a0f6bd15b95ec8896d8dfbded7", "2610081e5defb64f9c2828edd7bcbd60b0cf1fed3465552daabee4c6aacb597d"), ("1c49acf8b598c2d3f1912b59a490967db44cf34af50063b9f524c478a042ecd4", "297806ceecc0a6cfb936c6e6188b9354bd6afe73754ee2d1e890b56be722acc1", "2eb865b23f0c13525f509f9b2cfe13142de7b5c4900af6b2324ed29210ef0be8", "2abfc44817d062c476c986b74a3cb90efdc7ebe761500307a10129175e8f03e5"), ("0904cc57c10af69d1a862c37e19902c4c05e93352d24c9598d8f5ee87afa43ed", "1f0dacc3f656de5aa0143022c42e6af09ba1f211fb1519cc7dedea68afe4e7ac", "031718efbc36552d16acaa9bc329ee9e12a511655f40e83285c16f079d3ae2bf", "264da915c6130b38bbef3cd112d6e901f2e58e2ee05bba8a243b8d238c6c5012"), ("1d2e297fd4ab1b1239fea0b6423b332074cedb8d7d49811bce8bace430e752d4", "22c8d9074c0ccf01a2af40378df5ba5b1a79f7c8181c4e68799a3d2467060d1e", "027413bbf7e921af8d0355c3abdbafc94f317b9c1a7da16fb9a0d9f3e6efa57e", "028b5869327c57bb155a923d13b3a193e4deb017fde88ff3379f1544fd691d4d"), ("0d6b98f20944fb916ebdb79828b33d923cb2f4a6ee971557b14a14049763c4b2", "29c28013aba0d6e8f65af5425865a2989be33c395bd9e6fec7a83e29045533c7", "1f00315c08782bde2b68397df16d338a25847fb5ec93790822af41c8a4e8a00d", "14e3e78a2e5a73c1ec6187c39fbae24161c3c4019e62718689f1e8474db23969"), ("1ffec535b9ad175fbd8faf5a4bf12849463fd2f9c209a24e6a909d539b48989b", "16967c34e7f366b5262718fa8888a0bf1a1a0e5652c5d96732c215f23d31231c", "0c3372704f40233a326ba2bc3d1368f6cc0a7f5137736d58960b2bd04c2e1c78", "1d96e2e14e29d8751d5b5382f6fbd2009bd9c3cff7f7b104d6066aba24e13b61"), ("217fec3360d3e3d184477d67bd8c24ed0d5ea61fb220869852b8f9c97bddb7ca", "1c8cc721539f46c54dffabd6b46a766107a40d0ae4491dfc76f6066b50ae56d1", "02ede3aa093afe55270316b4d33a0fdef8d104756f4c1003d9c695da4d7453fd", "0152bfa2ab270a5a3afcbf14f2fb7152bec1ac784a2fc05a5f86e8172cee810a"), ("29ebd5d631e1dcebe7fc3a7181e557d2c1c653ba95c2392ceca11aaa69447de7", "0c8b633fd3ddc7401b32223328cddb648bd1663766313bae539096f79e26a723", "2b7b3e7807291c8938a2d10fa8e8092bed8a70553bd4302badaf54ebd01f74ce", "0716b699e4d023539ab012d32778accd6fef6a086daaf9ffd954989929427fbf"), ("16c8bc44cfb171b231c4c4c3513af24ba71389e0f8de8b239f857bc86ce0efde", "0b3d9a1273814304d250f912a45b2456e40c340ea98dfff6f6d7795b4e15da03", "305d5c44b2f20693ef762a403660e5c279a977056151b62123f56daf2209da2e", "1d2c6e6637e156c0b775a5dd04e9813b50881f73327ed21ee8c879a9178631e2"), ("035426025a01ee7aab5b2114a247b767cd1cdd52af603b2d90cab56cc22f5ed2", "2333366673db94e0af709c6a0fb9907d20caae93bb4bf969975081606e6e8ca6", "0f9e526cedaf795784502ce32bfd5d2d397d77047f9bf6acdb142e4d74f41c97", "1504fe4ece5bc124b8c706f56b141beddcf93f5a1d97e371ea162fac36b222b7"), ("100fcf22921359055952396a6e262db042c38e395b32340ea9bc48f83fa5eb19", "21ae0a6a17d9a07d38f12bc44ee8753db10564a1ea9c414506ee483ac2be0eb9", "0de3aa1a8fca196bb89ab159bc60bcd5e20d35f39838ef1fd550113862ce9d92", "0f953144bccb9a8c1e0f397ea4f96dfba5d4871a212009aa3411653b551e851f"), ("02042f8f8251a13d61e2fb76d69d79fa344d8b55250c861ddaa32a6bc6d4add7", "2afdf314ee33893fef831c7cc1b0b8ff239f50579edd333ac6a408455a77f23b", "07be34222107841ea282b7b24ab4ae037f7873be7d0c40e3b3b341f108ad4ee8", "2657d21de044e1f3d7659d0b6c026e102c0df6c241b953db481009a11e05c60e"), ("03747a8b3221a368dad262110ab54f0c744d1f55086200f2d6a6b6c96780aac6", "0f2a7fe8ede6e5e2cc338e1160b86867d8f6a17205ee05f2429368761f698126", "1647989d0baab95dc0170803e7d6ba5119e9589e58ed59d7bc40865825c4ff90", "0975e54e9a6ee20354bcf92324ffbeca3c665d354a374025fb1a313de67c93c2"), ("085f1f3d8c4c7164011f4da1b1cc72f01c3fa43e962339d7a3b852d1f45a519f", "0002d6915f819a3cbc6595e35f2e3f204a5c242dee8cb4d746030944cc01f2ff", "230622ed4e4f9b16b69ba120a3b2f0fbaf9b3d1ae377f72b1092292531e31026", "2c0b2d799b9481f64f3bc2b8e5f2d80eb2f6ac1048cab4059e567af76a57f295"), ("1825847ca12e8f8d856d0d44142f1b118768995419c3675dad4bb5059682ba7e", "1a978da966d4803d4621cb5e3861e0950e7a84e9b7284eea7701e3b2ca3aeb3a", "088e676baf44c14c4f5898a1c4ee2997a39d04093d39a4fc8bc59896cb1bbf42", "0c2148db28b1436789985c13ace3a2e4a3ddf71d983ea8fbc6bb7dc1daa9f76b"), ("2956020eaa5e8c7205254efa5f7e486c09ee7ab180cf83b90245dd3af2ff35ee", "26c40fa7c8891ec066cfd8a394d7c25e6bcb300fbad5f863045ea64210145b6f", "03cd3d1b7c79bfb2dfa4d9eb7fbb3766bc1075843dff9c46dc354b7cd758dd13", "28eba56408a3175ecabc674b2b7b0219253529680d31a7e8e8cde11dea86c3b3"), ("20891ebd7a26c8094a8bc10b38e859cb5a289a2580d8740712c05a842a517c78", "0b3a9ae53fc67a86cb0c5aaf5d049246a3fabfa43f4bbef6b8129bcdf8afcff1", "19c4c29495e1a90699e6e8ad6300d6f8a863033c7508cc7f8c58ff0c576110be", "00dc3a046cfef13f67c56d28b8f4d4fab67037965f0c40b1ae2150a5cdeeca4a"), ("099b3d2cb82444f2ed41c7dbd6040a9a527dd45ff85b1ed5161ed410e90fbc1f", "0da0e7c86da0c31ca11909735897fc1293792dd93cdaa1ec6b3d36e800b6ffdc", "2847334487afb8bf086fc8ddc20f5d581be4dc29e7d08889f0dce8ae57189bd8", "09fd0b6b47d2b4a8fc6a1ed506bff7863f3efa8a905d83d4b38fcaa78ce164ed"), ("05639c7ce1680781b4d2f25ef01d83062d5a9ea3b12964589ffccd1e3af10a9f", "0711965e34cddbaf6df5d1117087581d3dd102956d80b1db87c095fb66012471", "21c42d71dd637b6f3a494cef3dc13c20b9b3dee39e19819125cd4a15cc243d1e", "2ec461916eb32c2b7fde5d3e4fe104697435ed2073627a1abfdd5a8e7d1d1315"), ("1172e5eb716877da9ac5f9ed886daf441ae1290007c499c49dba5ca5f49ce5b5", "0f7e08b1c91be67a55a0b10d5eeb64b87370af04c806fe5a08cd5eb0bae03bc5", "19a48b34c539b2009cd2dc20c703579828408814d2952721e872f0b09275f35c", "02d6efeb9b4fede767ba2eecd2608fd302c1b5ccc9aeee55ae25833c3b9ec1e0"), ("0f4270933cb066ba9e7d86bfb8bf9b1bdc8b59d336961c6df94d9507e06fb6dd", "1b6f69f13dbf23a953e528b2fe045ae1b7c93218b5842d1d092895b959a85fa2", "27f488eb7bf5b8c98b9feb23c64f336d23fe1717c0bb7a7fa0b3b374bda54e39", "1dcf10e6e5cb609cf876f87e205783d109b7a1b31cb40a32b3e80f2b42733000"), ("2b5737b48e629cdc6f656dcb78818010cb97daa8120d7684d637b421640d53f9", "068e8b2742adeb76d822858bc7cc60316fa47a8a5c5ce4fe70b51229e12043ca", "0e384d589cf8b1b7d20e09935512b585ebbb9f0e090b07a781385cfb890d66f1", "1eb16634b9c27aca940c7ad5fe44e081f53becf3d5c68ee9ab748ff751443cd8"), ("2f01e6d82b5eff995673fb9df8c674c1ed2c953c6d42ecafbb4b2258c9eb8ebf", "005e338a24c51de76cf9cc4c97758815fe2de09a02828137d41f77951edcb2eb", "1e351e0363509f4649308b4077f48e6c3abd01b5e631a825310626cd6d243ccf", "0f07b3177bb2dea9dcd394977f98822691a16082146b48b34a285a8d7258d523"), ("07ef7b35679af4af624e00eb2fe21ea82033775bcf5af81e23780d63cde1b18e", "0668f4f69eebe8ae1c9ada9586cc25d69fe4f7d6db115b20cc75aaa025a6f47d", "1b5d044b183c39fef2b86c5f052e64e179d2e0fb620904e76e1d6f3c07ebbcf7", "2fec4353fb582115301c86b47e9e057a31a152ec432b97e075bee5e842af5a53"), ("2ad74f3adbf8ca473a4831c43d3a3110fd73c1013863946372e06175991e8f94", "21fa3598d3e33384ecb4658bfdfc4e30758a916f77bcd2b8b32301f2a8a1d0d2", "2c89388e9167225d78bfe1db0286fa23cc542746cfa950667104e11fbc83aa55", "046654748008d3452deb13e2105111279aa38e7498b3c0aa5e27db2fa2c5994c"), ("003490756af6bb1ad5df74580de499d546fc2090483a45efecb3801fc9bd8ea0", "26145f30150755e3b792150af827f69a76f35958b7e177ca2dc3390fab915491", "126a25d01796e4928e637a8249f53d008e5a4f4627fc17302f30026c4bfc7e70", "0a4d3bcb02c202476b10366886240aa817cec84c09563c7152c8c6e02c35001c"), ("27cde9cb1f4a3df4ebba593d84c52998c3615d23c55499c6d293cb9852c8d9ac", "2000fc84f677df2be4a48a37554df867a327e4007dedef25207adfbf74ed523a", "08d9b810af368e2cd79052c8c80d0a4f1fb7f21c61eeb54649c0ad13538dc442", "08d311f572d62d3326201e7e7cd6caf4573e95c492aad300dfedd79b5d45d1ac"), ("1e75a8440c64a6d123362c9bd1a9c2102d8c6be2359a5d444cc9334f9ce4b38c", "0dbbcc0333d51b78f53c2b9aa17ea7f6deae39a9963bbd403086f34d91b602e3", "200833b1a7636c1c1e953faadc1e08f2fbff62b39c977cfe59afc4d65cba80f7", "2ced3e9c4b9cf68d63e317b0ef33a61d56ec06d8056405f5da6968d8f8fd48e9"), ("008f1c0f0b24ef1abb037e0bd5e5eb6d3bce30ccd9e74703b38d985bad860113", "19ecfecbb9d62bdfb10574178d04118711ae01393e5213df98c6864fff677810", "252a02a8e2802b08027a37e04c4059d2e71f71a1bc65dedd6df400d5e9cbfc25", "213f61fb4c7c7fbfe4e17cea5ff34c2488092b0e45bc02c6136121d0aa317a2e"), ("18bc02392ada8616edeaa45395b97ead71e5899960ba0e00ecfd99548f3e06c8", "124516115b163de057a11fac7dd40f24bef73a392ad9c455cfb7fcace364eafd", "1eb01e4732fbbdabd36f8645c76b3298b29f91dd026d07fce37e1395a57ce361", "1239be155ea1096527b59f3f3a04a9531c1927f73d37a9854a14ecb24f5054a2"), ("097692f8a2261f9fb818e213b1a9e2c890eaf1441670cc3bfacb1978f3638845", "0c60ac3f5c99dff1b30a28ee6c0117f482076ec477d2ac01f7b721bb5234652c", "0a2dcb3270aac9e83b226e19ae11a7b48036e5786356730d13fbd6fd6664f99b", "004b39a3512bf12123bebcb64694a637f352e13931f2e6ef112bf114ba1c5659"), ("05396310552a88e8331743ae869a91e949bc730f80a30c4abe0fe8e847cebed5", "15d3664dd2cef0c10b02cedde912aea37b54e232ade71e8038556ac247800c03", "24f23de39aa01f5a94901953ed2edb26600189cc3001bf0c791784f8a0fe3623", "0c370a643f75040b29135f73f012f9ee29c310a85013dfce999f49ff275b5ebc"), ("016ed1eaa4544130dae2a3f8369855fc03d88ab2675a6f10c942fc547502ced8", "07c3828741a49d535df30039a0b4b73ff010920b84df2176827d9dd69adc2414", "209a6d13b6b7c2619961c3836fe7a0162f857b405e991944044dd78186c0c6f5", "029064309e2d52c947142079a0951f32c28bc17279475ab4f2aaef337a797fd5"), ("0d9fca66874c8266e30301287c392694812adb28c6f5ff74513c6fad528a8125", "11b5d6acef28d7461cee295bc0949164ea0953ebc58cd572c722c05dc2276fa1", "24c2283330330ec36323812c7a64c6446469e16a748082481e41074867fd53a8", "0da3fde718cbf7b904e32d089004e82920aae66888b7aa8e3ce660d8f8de57a1"), ("05e2587e4bb6bada5d1e981692a35a1a7dbb775b25dae805ee93ea7ea8d1169b", "0dfedb80e0ef42bbc9cd2a115ed6ced27b18c1f4454216d34e65f6756d30d462", "04fa6953afe444489066223c2d7972c706dafea2deb0fe24fa3dc0c13abff191", "0d1d7452354e1e85fdd88b93e38f28c4761d39ade81c9bffca4a05004312faa5"), ("008a3ddba35692d3c594f7ab1c617d48cef29b4b951685cfe46a688184bd1c1e", "12957e324f809acaa94f837b63d7465bf0a5f3f24db090aa1e64ca0555b62449", "0c670ae100ef690687309340e76d175854afcf84f6f33e0e620936a2c19acd63", "0ab2373910e8765ecdd361fb14ea45c1083ac400acb6476a2c93ddbf54ad190d"), ("04e56fd3c73d94a6d332717bdb6aeeff4f002c0350aa8e4630cef6994033fa26", "1a615a44f3235a069ee45f5e1fd93dd420e08e5d00756aab62ba35014b5a1831", "19db929e057eb4972a8fc4d50e1152e2bdb42462826f43292f0ab187e59b335a", "21a2fceb08a5b79397b7a3043277618dc3bc0471024148067857768063e3942b"), ("0c74c92add56274bddf0e773c2fc0bf28dbdab91100d4c34bd723c7d5b1f6181", "2718d4bee60c0b7756be3d773cfea2d513fb1690b91208df99bdcb4bd4ce1a80", "165e6fd58b27d29118a9fb1591b04d7199d06b8dc2e70d342858ee076f78096d", "2d617cdbda0aba79d03bf8798874f46f59ac62e74c0c8db700213b0e73fa149c"), ("17941bce65f722b9ea15fe7b6e69d3b6448151db85c2dc745111669799154307", "115bfc80e8580fee113d52e24d27f5ea797690a154e36580110c3c5fd1513d34", "0a939a518f097dfbe77c786888542d9d1215fc6462607cd1ab72bfcb58fbef4a", "2ca18e7545dddd9ce761cdc6c29462aed1607baef1e70936500d040b41295c63"), ("022781c876d57f398ba9f1ed720338a07ff4d324ee65b6735fbac0f6bc9590d7", "2c36e4e611de41dfd32a5e6e2f2e69a1a72768bcedf6262241ddd90f5b4c17d2", "003b49d2683e8dbe8e716db1ace69be72eaf2032a452be04537f925e23049d82", "10fccac6c797681406131931f2cf580640d4889e900e730029ae773a3a7b109a"), ("1cf696bf712ea6c28cc5f1722da71ed9adcd3ee4435951588e24d1ef20acd455", "139dadf50a0314973a699e27a87bfafeb19f2a1acbacd01fc72052ae4beb4b5f", "2c3cbe00cd67d10a8a215ec4aa01106b630e55fdf800319a12ecbb46f66c8e61", "2571d4f190692317d02eccf8503cb2b1fa71ec4a4c536a5df2dca3f923af324a"), ("2916118a811a306f00011dfb3fb5235d8bb2a71ab86ac6f25853a7ffe3b3a807", "0fdb71d21a6e8fd03886221f9481d1ccc79a47ee6db77337e187d41ee70b4f6a", "2f68f33ab7a94ab21f2086b13c47d3ce4a9825dc3b1c5d7f629f9a2b22a8d33d", "12ddb370d04b57a17e7c6c5afccade562267c01588e570ab3e2b148f4e444add"), ("2cc7f247657025926a023348351c4dfe049578f6a605bda031bfe897b7d93454", "1fe8c20ebddc8a442bbe99006ef0f381e1dbf6c10e96046e4a542298a7c76153", "0139ba90c0ce652d940dd4ff6d4788100e0d09335bb2cd3a94b4039b473e1cdc", "14267fb7aba83e8693596d62bb4bf8c57c6cfd970eb40c5f34d456fcc5772b6b"), ("11d0cfc3680e9965b0eed357d62ede9cf333a9f48c54743ff2bf7dabdad5c7cf", "11ae8023b3d0f6675f16a805172ea4f662af871c91139ea1bc99a0a2f31e6b0b", "2b5a1cd735e56ac62d3ea35ae11700af6ce6fbf3c8aeaa9914afa0b525dd0003", "12b2e059eef0f6979b54ef0c84f93999f6e623c3f09b071ee3ffcd6ad4eadd37"), ("021fbac690c266d655053b97c76bdcc5587fbfeb4543c522e5df46c1c5c53677", "24f320c94d458e505fced8967df10a03695a7b41b809f52bc1679f964c0ab845", "2e6fb0756fd9cfcc34f1d73bb374fbcf693fdd151dc9ce6cc1f208d3b1450676", "070b0ef51f2bf2ac65c201497db0c02542789c5e3eeb63e494b573c842854007"), ("13d84e42b4f8b53c609798d7eb2e3e21e38756d49f31a6c879e2e2e32b471592", "1a698e95b0d1b71200b1e0b480f2e9831c8b8370bcaf85a58acc35df5400340a", "1c525e90fa60a4a45420e3a8c6912f7e3eb49bfa1f14cfd8b9460ab1655ba309", "17cd0c08cb79d88310bd8bdefd0caf05ab511bfc2003c1322485be37e968cc8a"), ("12c984dac784ccff6c724b914696eb6fdd6ffde53dc1ab43c3633e94f9aeae14", "2a6ebd349613ab761286314703f11c3b754739e7e15451bbdc4dc2c8160715f6", "0518ffaccbb59b313821f152bc98bead3f5b0300b7cd57255593e63a347fdafd", "0483d21d5c43293e6d0563faa4931e05aadd7cc9f4ee542fba9827881868e343"), ("0224b85f8dbc0d2727c8180ebcf5ae707954cb9b81439b1d3637e3d51d588396", "2d916855287b4600dc5497ed5986fbe15bcbf4906cc67617ea1ccaea88fe1c0a", "115e49b55b9682a4963a69f5de42b9fec3e35ad93e08c6dd2a8f1cc3c7bfced8", "2201beea6fe7e9c4e3733cdb24a2d6d7fae0f3d8d0e68a28ad9fef160e0c6da0"), ("0fea528347723f4dafa5c575d8bfe5bc13cd76f12a96f65aad975626608c7e0d", "11d1c36c2d7436bf332338ec1d329bcf03cae278041d4591a5c7be2876e30814", "2a97fcacf29ec723ad6b8ac33017b2a1828a7aeba6b04df9dc6a53aa58d19457", "11f95265d883cbda110b7df121a882f1105e47e3f769a4cb81c9d85857e485e0"), ("19d72fb3d0da196ea06031abfad2b0896fbfc14a609f4a6a5338d13096f8ef36", "0820e27880d6c16df2323457173b450d0c08afbf6756bd7b44e221607bd8d072", "09efba89ceeaa66e87ad9f858d08fa6bca0391746d7f5815645defdefa132b16", "23446aea0d0b787d6d8216f6d75cccb2e9ac42d797dcc49d1dabfe0b7522fc09"), ("20c35ee5db652c07537d68e7898a3cc5c87a0c8f0e4d366587667a2b19ec162a", "03a7da7993d6f9e4d4391c4ca867d1b10be21436b0f413a4ed25eb9e56e2f977", "2226460a8a5423e44b0460971601100d409daf55b989986d609271a41e0f5bc2", "007f9861c00b561d7e242281ab414b7b0d9a75375b979daa1c0d0459b877b25c"), ("00b190d14ca01578af1b5992c47a6d66b3cb699688f1d6e1134d1df90cf97c61", "2077f08122a96f0bedad468c8df35b1576f0ce2fc57939992b32326c6dd9adc5", "16712f65e34f282840872f895e6fefd0a902a9c710c8ddfb846975be89b8e779", "24fd54c959d9fc092a9ed96057c400d6171cd3310f3acbcc824daf0de5796098"), ("16cada2ef4b74fefc7e0096e09d2f030d32e51e0c42d7530a7df1cf4dcba8445", "0e8fc8cffd1ac82b737a22a42e13ea0f88dabe1caa7ce257ffe2b573ccd8e39f", "176dfba4e02247d2e5c634f790b879fa8e27311b80ce4b9a6d8bacca9923b3d3", "092764ba25a1b4b3ba594a5c4e160ae4f698795d57493805b21ddedf73c49220"), ("016caa67163f55f5cdbde944308dab079ea5b5e0871a0fd1c7598b5c23f2f494", "01ec39107f83b45c45b176dcbf5ea498d77fdaad3cf4cb44de518930f2652505", "2e3d31c145f3feeedfeefa0e2e8503376fa462b5b46e9c3824cee1d157155ef7", "2c5187948753763841624f8a90dc129c4cc269bdffd9de57f325cb4c3fbe9393"), ("16cb6749ba98fcd0a05367682be15de12c1503f761f436b803069b02dcba14e8", "0458c7f4cd377686c77ea5241a4d86b6b7db79f65f79e3c701533a26d4e18278", "24b32537ec9b9b66f6cf701b92b89302b16660ed0ae9cf8813fdd3181c07f7e6", "09ace4f43bbc01a3eb6a83d8b13ee62f8612c90d522909d2a03bc6064fb74aa8"), ("1f7203a6b2c7d2cf85d522b2202fae78a62d7eaec0dd71dc92953dd8b67933da", "018ef74caa7348bbf3657a73d7cc8d2e28475926fa4f89ad53d8fefb3cee95a7", "1de95909484c32783e5ad5cb23c18b3e8ce37d31e780052c679d505b84b33373", "04c30cb8d7b39edb9c2493e7724262138172133cbead4300ff687b0fae2e260d"), ("00efb6a5cc950d566e96a9abbed7ee8065d793f9792118b15ca27391417eb4c8", "2f4189d93c9b1abb4bd1244499e9a6dffdab1e48d597092fbe7b87b8e670803b", "2033ca17dd2563783039497c84a574da6be6883680ef6d1b4ee36462a4c6c983", "1048f2cabc3b71e84880734ac2e0afc058e8bb4cea3083c73aaa85e8eac0114b"), ("0d884ebe62559fe58f3987b5185f6be345996caf8c69398afe80f4aa3723be54", "0acc2f499630a57d0b99ad5a9b4ff7af4f081f67c7f4a609bd190b8f5f63d0ae", "17d65d6c794ca10c389a3386fe9f5312d2d48adcdd9fc90496ff851edf247af1", "2f189cd1f7e2e9e40d59eed0b990b4681aa044643756351382fc6a42dabe029e"), ("0aa4dd825ea019180d605608c3790ccdc33cdcb7e67607b7f3510315b9def9b4", "0ef39a38f1a230abafa549e98f49290f38ea7e70fb0921696186b0be060028eb", "04a9d104d698bf23a2f4b1243351e238a1ffdf3c95dcb6b9531050bb267911d9", "03d736efb88e03acbcaef1fad046566de9711b233eb30c727cdf2801ca47c9b8"), ("251c228f21310ff603a4cd0312c8dbe60863b21066c949027da303fd351a38f0", "0e1fc22130aaef9f31c879e70364804f5a2a0023a1a4ee6f57a49a73727c2c5c", "284830bee5ebea228e9eeb566cc56d32e93b2f61ffc1dfb714c47463ad54f775", "14260a0205e62fe635d255f6aab37ee1c8dd84d93fcfdd93c78685f5b3e16561"), ("24e3ed688fac1251c34c7707683703790ad726a60e1ec705f9b174a2c1588280", "2f13f8b7f277c8d30d0f80f91655e1d7b9bc8cca02b5566609b821c159d2e960", "2d2bebfc92fae657b1aec193e1c0ec1fbf5d000b37364aa7b9378824e3b696d9", "13ca6617d62e1e45dacf6d71a6bc1a274027ed6e79c5d5e513b38786fa097df0"), ("285a186944b9b6e8f2d3ec37b0602af9d56fd0215ad79d8afcfb1acdb5e020b1", "1b77353da2d1bba1abda776ca2332b578311ef164ff648368c3cbeca835e5122", "1eddd92dcfb03f03917eeba4c1a787c12e9b3796fac94139dd6f00dbc6a9bcd9", "1138f39a25646f9d05a3d8eb1806dfd6f8ba9927cfcbb293a7f314aeb49daaba"), ("0a09616bb78ee2b31fb2f195882910525ec551ebcbb5c76f0c37dd4dd364d31d", "29eb1d4718414856c41e5cef90af99fe5eff75d6a114e5351b873762467188f3", "2d0a538eebb72b20f0443098c48c67298ecc54c77f63bc541d81c163c17e2d45", "2e1fc71ab8ef565b960502a7a4c1e99c835571798825d39c9ccc732d780bfd44"), ("1ec0452a42f25aacd97b6f9e1900be26da0f9165f96cc5ed9e5046900e1331b9", "22e0798bf05a615b68160e6e76159983ec1b91f1f1dd10bf80794b491fbd00db", "1ec291425d7d55682fa649d7956262874f000d01d9d73028ab701fd671869b79", "141f53911191cbcfb9c25e3bbe1471d3d094265ae1dfbcfe8e5bb30f13cc2849"), ("15e59b5dc177da4088bb7565186340fea8d960d82a0eb097f79ce3ab348d12c1", "0b61bb16b56463d475019f1259a091619b6bf9391638c0ff53b0d528ced2d446", "1ea89b0ca9e9c854e444da3e1f8500dd79721c12542b025a391a6dcae5b3da00", "2d83122b4d991d331557b10e6b6ae3e0dee20e6366c40a06007a5d2d0924639c"), ("000c2edea39b5a5fa79ea2c41803ae60bd22efd9df75f36b65813bf352ebcfba", "19388a5bb8e4823ce2dca66b1485e3efc39f28eb7bec491afb27ed737067a60d", "095619c6b611adc45544af0659a8dc4da36372d4727ae33e2cda3145a8e51640", "2e9cd6b0ec07c71d8051c6ccfef7380ad3ea55e35496daedd6dcff33b1341ed4"), ("11bcfcc388ed8e31d3ca2bc14b6927a5501529d5f584d52b5e62e925ae0f5101", "2c323b6fe710b2036362771f6c0dacf8fe7db35d8f7325d1669cdae581cd934f", "2094f23f85147836801e74270b4435dc77a06917ffecc81f6de8e570a0544291", "02b4115dd3cf7ca8dd0aba827cb6f397d7a7eaf87bb429cefead09d3ad3ffb0e"), ("04116de85ba843aa343a368b20d3c0786fe060a9053eac2487c69cf0ce8f0e0f", "23f9d814b7e7b4c61d4a4c5c2d8970fcca79df6c099f252bb8db6823b377f84f", "2c2412c5710f21d35cbb7f6267f88b1883ee7c4c37495af0e3477299e7b62ba7", "2c1934345106c1783eff0dd798b7d0e8685d901bbabb04b7fb9c8fdbeca94c28"), ("2c6692dbe507f4b8a33898e435c76acc73c2794747f0a3d202bb6f1b9395a63e", "255a958d366a214b32b2cff73bbdd5a2954ba40b2f0547e202d22e74a07905a8", "112de8cbac5075cdcc1f84e28002870ef9deb5a8c02421da9f0eee27c6c6033a", "22677961243aa7c5b1a9ebb8126459b67696b27b70dba8b5a906193c48016dab"), ("0b7b1a937dcd885953a8fdbed064eb15ece6f53203bd143f3bff7f3366c85fa4", "28ab3f16868bac07cc863522c7b3b118bdffa97a8c8be754662b0136558456da", "18c4e079b142b26ee4cd814aef5b9afed25b3c1734facf2118f7c1bda75221ff", "150984910307a919b84bba654d12d5102a342c71feb9bb43d05f4de382e995ff"), ("1e8d1dd246f46bb3573315640738d4d2094b3a350746d1f96c4d941eb6faae65", "1f84399fb0540c88cc09023ac24d7751e24ceed2aeb8d42e4bb212a76421900e", "0bd0466819c6729181c8d3fa7b4b57483300f10539e4234bb9be9dcf1263272f", "2f2cdd06a5457251a05d9fc8161e7f3f6795b5e238bd215a8bcd78cb283ab462"), ("0eab71c676b223570e4f9941abba1be152082f355e51b6f11c8d507ac42e5bae", "0f494d5fc26158c92b95d017e2c10b1af84bf1c420d4ff8a5519a1ae8394c834", "151cfb8103330998fb12e2435f256cab931391984217a48176b60d62fc8472ea", "034970b6832476178accc4311fbb8faa7725faf0b3990b1461a9f1662acf3b68"), ("287efb94ef5a0750dcacf413f092c386358cf55c7558383444cff76efba9c5d1", "0c5f2e0b5336e830ff92218241d9be954cc510bacfa5330b5914f4ed6b0267d0", "2fad6440210e3406cf1a486dc6b452df2769b7fa7189c1046bd3268a9135255c", "0baf95aee2465db8f138d97915d2c0d0f580cae9b9fa4b1ad21a966b0cd882bf"), ("06ad450c4ddc0a9fba173e93c77c39df0fdc19ce77663d11a2b85cde6b9c9f0a", "294c09707cd2971267fb71cfa22a35f36ab4831a56dd65e25dcb45a15e188828", "038496a3273d25486f91c458ca6d98ec321c97d9859ddd197290a949d207dfa7", "139908520a78dfed52a9df2fe4058d503a811ad39f504675fb8677209c41fadd"), ("29b34363b86b9fabb2284f87f2af875beeb0ee73eb0f10e08586aaee310c2ff0", "0a5a0f4c806eceef902b1be6d069d712201aa007320d2ce9d6b2bee7ce0a27fc", "00608e59b94d2040225dd621b99d52f55b9795f7ebada31e175cb7380dcdc4ab", "1741971989d787fbf0955a250e76ae1db9e3c74167bd475134c454538760c716"), ("188e45a763f1247dee9bcfc4b50a2b28dbf60698f228fc947a84f2decbbe19cc", "2aaf79636553a603ae1366dbfe7103d1619854374ec193d160f1b78d94701650", "144dd8ac4d325fc370262bf386b28365dafc55bb00e9f0081cd4cfae6610c7c6", "2a06f6b24297a33c2bee6f6988de0c885770dd4e0daca613620d5caa7f1e64d2"), ("156eb1b4f2d44c7a6fa2adeab4ddb5d190f7f58a9855b0b5bca1907c2f802d76", "29c0abaace9575eb719b149fda7bbdffb3d68c1d90062e194ff4a12489ee30ee", "2fd967ecaca4fc3ef3613468459aca2125a526b2419982c1aa7826e9e6a7e405", "1ddfb987643a54f92e307bfe38bc78d1ca69ab0a8336af787c6093bf79094fd5"), ("0f7b699978654ae9d056f9e45da77f8bd7cbfadb8fa966c061a2be58492bc7be", "24034f331692b5d8975a8834d74f0e3ff943954a85eab498c45efee138f54719", "037c9f989d5bfe5b46fbf27776dbacca9e0f82b18aef460cf765e5aa5621e7ce", "09f1aeac494cc15853a3c55418914ace13c10d8085527d6bd66598b586f8ed9d"), ("0c8d5f59e8542df69a6e16e34972b3e34694e39787f20f30a441c6c484ad24ea", "12be67ddaa1209a2b09d3c261e66380cec4df3a4d58095ef26dae6ae6d723a05", "1d54fb1d02a527d3c4a6a1752d8dd2fbb6f987a0baf629d407b0b568c88190d9", "29eb66e887920d11b55f1529628eb2f331efbab82ef373a574068648a4f0b0d2"), ("1712b49775fa47a4d0f6482e290b56ecac304ade28d474c51bf70cfe9147eb26", "0467df1e6419f899a634b5842ac84d6f5d37f799a439ed53337d3c4341c0f54b", "110b572437c33159e1374e36c36de2eaaa9e57979cfd82fbcb28d8b8b5813ba4", "069ae5947c774f0a22ffd97e3e704af0cf00e6b39a5ba383a8abd04091c45fcf"), ("109ae9ac7a9600f46b1439fce5c04d5be26c07b0a285612cad4b2c6021d06a58", "0ba8167cafb9adb4a852d4ea712ac82295b4af426d6b2251a1b6cc759241485a", "21cf73161b0acb4f5e16751b2ef0845d1c91b5b6d3ade49f92c43b86deec86b9", "1071ef952f4881baee105fe7669d600e9b0bcb5b39d4c9424e072387f1dde161"), ("0c33a92db126b49450ed7345862eab3080c00131dbde9bd81a7e197a5cd579bd", "0ed4d2743aefdec89006fbc2cd1a9bbd6b85c59ba3f0b1b9f9243eefdc4e21d2", "095a939673a0e4833dc5519013e873e566849e36181a5dbef61638b1ab7c51e1", "0ecbc26c8939295003946581a619d349d739df301302cf6bb70e494e231e8eae"), ("2e2fef135aa4f8f43853c7963d1c7de7e0dab8c128bb568227e824100ef9a80d", "13277453e847cf30489bea87674bbcbe6a4b995601b155e651d8ddf272dc64e8", "0f2f02bb7f083b122f1d305e75cbc5615b8b2a963a78e17d966c57a019754a6f", "03901f23f50c9eb4f77ec263a436c1c957b1e8f63e71593f509ee1ee692b7943"), ("1d735afe270c65c6500464d49233951327d8f6614b45ace0aa3d968c1cfe2f34", "1de4ea547dd0137d8765912331173755149c614ba76ec823dbf6c46c1de7fbfb", "24ae4f0bf7700fa3f09c2fcff743aaef6e530b2a52a0a9c1e128311a262ed46d", "15684bba125b62f77cdbd72218b4cdd3a7ba7e2b6c91876b329beafccf2a4d2b"), ("0768dce7c0c4a9e9fc892ea7686ac9cf4b6cac632d6eb42cea33bc47d5aeb331", "1da841c11e3ba2c5bbbe59d09b6ebd0f4ec1a0635af088da1638d5f53ddfe769", "2c786091a2985d0b652eed5bc580efbfb59bc9b9abd3a34bc729f24a6e4cba9b", "1a412c6720ac244aa5754c96fab2632fe330777ab2883d01f5995fcc7d81e11a"), ("0701b561f7f8bd34d93ed09b7a1f981f6b8da40c542573f4d7d4f784d417e516", "2e7445595612cffe676f826188da46b52079b9586ab9b6996f812ab2e8008485", "2cba557e734cbfa716058a2866b83bcac0ff0ddf911d87f89b15ae60fbbbb236", "1866d633cd1be5940d2c68ff4c470788b1e8bf4719f98f2ed3a291fd2e5058f2"), ("2d274615cca9843ccf870533d79824dd3ce643f27711d9879f6e451b5ade2b0f", "193066827d572633ae062627321bd5d9d594ff39a8908e85504fc3844adc3fc4", "15ec632c08d636a1c3f24414b5baa4aac44f49d65df4355dd9a694f1453e96ae", "18e73f0433df739a24f732e0af217be576a43c88ef95814d65100bdf8ce75886"), ("3054a809c881b24d5041284640b6972edce0adea2b2755da97bd0e81d369e51c", "10648a59d4ba761e4545a492a58708a2a4dd609111d21d1fce696d48ff91185d", "057fbd5250ec215d8cf2104ce93e258560d036d3f13b16a5d12a4f82d41a7120", "1cc91a56c74789b72dd20a6bcb1850a4ad04ad189a13f5ec763d3c471eac9741"), ("05ae3e98015f660f8eb8fc806bd074cc2dc140e126deb7ce6d7ed84fe2c030c0", "243074ed711706c572fa733a1e3da634027fd0e44d937261a31db2bd0f53923f", "05e77cb10ab1b632100387572a8960ab04e272cadc57f1114941812ceafa3026", "1b08a3961cbe010fce980127aea5122e83590de26625b4a026ee5ebeedf35046"), ("006d60e385830e20074fb583ae59ad2c3b56a7985003bcca79df403e0a83cc78", "125cbe83e30f346a5620f8c60f441a17f2074dea100c2f01c01527894fd42167", "06295f6eff7bfb7de47c4e478bc0bc932c6096bf4b43b706c3526738b92d19f2", "1f79bdb4bcb6b67b6f0ac44bae0fcb251b9d6fb4ffcf64003b05eca41bd1278b"), ("1a841b29164a7d75b0ac02ef45ca997e1c5cfc87afbff252a5f8abd00823f725", "0263b70cd74592d5e574cfa35884b46c6dfeed0befe6ddf7fdef5cb8cbb69b85", "236f64f55eefb6330fe5da58669a103c696065166c81c7e0ed523be7ade10733", "1fcbf7be6d587cf442c9fcd8ed9835d4f716ca29555c335dadea403bbd7927f0"), ("0c9c09cc9a2475833a89be85855780bc0d7b3a4e205988d8605194d22ec301ff", "1c52f04b2d6d191930312a0356b65004313b0f7fd179e33f8147a412bfa3af87", "1578ef7c743e4cabfd6df653b2fbc9a55c58bd8409a8ef7db2d61430ea47372e", "2b89d2cff763e9cb805a14b7fa33cc3f26239c6f44b0ccf77c36747d10916f96"), ("0230304d7e0ad06cf2b0862b0a0eeb7acce9f21ba196878a7c1e72a948a8f177", "284af2323753da2699cef568fe2469a6dd651b61df4ca4c077128ca42b1cb68f", "1c3690cc018615401030b95f6f2e52c746716a695dc5b094b66558cd1c0f315c", "12360cf34c32e26cf079caa63102b2a691cb8a87abc96ff8c381e19e56d57916"), ("1acd48f503c89a235bce238406ab895af19174d002e528ef2d7ff366518d5b4f", "18ba9f21576e53a1c858d67217ac9c1fa4ec1039d9472922409d82d26500c232", "0eae7d33d4752920562ca599938ffada7acdd2dc440d154b7492b6b9a689752f", "1e91b18ff778f0e08ff90080b6f5602704524469ea1a5ff77b148395b747db8f"), ("02fef0c47457f713aa2003cb1256a370617475bdf64e03d78065cbec78bef7a6", "0cda0527081c3981c524ddba7c2b3a4aeb3ed541e3ba2ed94426dd3492492315", "27172d96156308b33091c540b8af9158c0b627cbffea5ba61681c000c98d7051", "0e0912f9c41abef702cc92a56ad8d470d699638d4324a8d7854c38e798f72bf3"), ("2d5ae9fc742896df117ba159c2579c97678a5807ef575a86479039949c1628e0", "1d520f1379b18a5e68aa9733dd8ed30780709167ebf2a322ad171b7333bafbb5", "0e9d75b488d00a576ba67ea0ddb9b9da7a04af314a82384d3d474266cf0fffc9", "0ed6cd5a9ab74c3e347cbbca5a822500088dfbde7c78411571bd21f65e0eaa11"), ("0e1719f76591787057f22774690431f67897264fa4dedf3ea01c630e23e94aee", "232426fce8061a713014289a40b074387e26ef96d7c9f61c8f50c581ade30f23", "1be85405cc639d90087c9674b7203959fbef63ec8788d847758af2a5e3ad22a4", "2869d3dd6c248f448d0d6411adda299d4cddb2fb49203ce04bedb29cb602fe40"), ("209f6a3355ac0b43b973c2c3733b40bcd4824fb147da7da7e38e736e29e1be7f", "2b3799abeb7a5ea5e936177e35a26734df9acb18d26cc0131546d6d9726fe96c", "12ce16f2d21c7c43d8f1b4a68da9170d5193e1c4182bb3751c960c3f5659fbaf", "02f9f8bbd1e828f075a2da456342126d65c7aabd28c769af8eb52dd0933a8df1"), ("1d2dec1824e26b9804252680259e6ce9853322d4288c094068c3404dac9983ca", "1e7112cf99939ec6ee0d3e678c0cdce6671740f65e0f3c9ae3549c854ccfdb9d", "1e82b9d5fc5684b9bcdc138f00eaf56e0511285c8184d973df39a944037f708e", "130c4f78830ae1dcf99eee2b89a084f7e96356b9379b95d679fbe4cc3ff37309"), ("1c2614ee7436cac813893179af27740c2c011bc82737303a79a8c3a9058a8ff3", "1b316120a9439c94dfca6ebdf2c72feaf73b91871e0cf86096ea6896813229da", "0024e3699d080832f7b75e770bccd36757bbbecfd8a8331ffc0a31390aefaa99", "2159e87685c6e192115c3a55cbd05662bbe498ec632364202c627eb2723b43ca"), ("2d6ac3b2e7c183496e6acd695785bf4a4c8c4311531bc2cb9f565abecc2a14b7", "1d87d18b1b93828d4799df9fe7753ac4504da36e98d3e5ca875d0fe8da2692b7", "01d7d0cfaac3b326568e0097e698bcba397efa5ceb41482efda7f8845a6407c8", "1519b8b11dbbbbc4861789664b8f96089920338f08382ac7b86debe2b9595b4a"), ("11cab5b5a33bbb502530e4f5fa6e958608f70de228de78a8f477d98272dac1e2", "1633d3a9607ea3e7e1fdce4eb0320335b8fcf68a63fac720f8762114a5aae2e9", "2df71c8d240a052ea60d85448a4d4f5533917e0155822d027f2129a05c1a96ff", "1ea820ec017d698acc4de848688911fcf55161259745c7bf8e4b817fd5029570"), ("26b026af1328caa88e4c739930564d52040e5ae5fd7d0e76c5144233e66eafce", "0b629898797fb82eef2caf40ccb1739ce927dbbbf4ba620f04fd44e4c7bd06f2", "10b8b9c4d5c1809c02c09aaa8f15544ef8e88af0829b51fcfc1db7e45904e9bb", "1fb28d19ac7521e9a97d8937b73ccd9395308df1592f9aedcf695dce57d96611"), ("183f23ea8d2316b683f7fa1a57b3147c66f459a776c2f64ba245baa6d5a99a97", "2606728a8365d1fb22ba909bfb8111e330c528871730893dd7046380bb41c616", "1d9a8d17bf0159993857d8018e89698f82dcc2538dd798bbe093fe5f3d6d4a89", "2d2dbf02b8bbcdb61b7af9ba06911de9ebe0498b150a5c0e6a1d5738c7ddf117"), ("13f5fe66f74f3defe94ff45eae91bded9ac12bbb80e13aa9ff9589ab56130538", "257221ae68e196b595484281c52a214cad4228fabddd93d6e92d06b478428f69", "1bd7e2335f9d2398e265372a4a19cab5ad4aa97c072bfe879128f043a659f575", "2bb8f4e567c209f72bf5b4265914f9db2266ef9fbbe823fdb8503e34fdbd677d"), ("0ced80751bf0d527171d1e487fe89e4eb1cb4fa8be95e28ca22cc8716b80b1aa", "15b5b6b59169850a69734f106bd487900200e66ffe72895e6fc47debbd28781b", "1badf9b86bee4618a7ab6b3202e04446a2cdcee1c8e72ccd26ada29b0acf7578", "2a7260431303f2f2d6964d5760fa0b8b59c314d0023d41d50934d8a14d9be49a"), ("297ada70df4c08d63738b729d7a42030bbbf6ad76b2aaa82ee8db47dab3403ff", "1da2ae2d8398d32feaaf50558c9c9b473443ee72309d00be29cd818256def097", "167160e9124d6f24937050b126d9e4c09ad3aa7902561125bfc503dee0b1f6f9", "2e144a057a3172e010733ff8d094418127c6954e74cc12aa6c4265f389b624eb"), ("2a736f180dc284e25c255280571762bcf8e4c6a7cb5717a4a6c4e8eaf4e897f1", "0e327a177e11d015549e48423aa9d8deb16f749724aa42846481d7ec5f4d7f01", "12b89588b3f93a85fa6f73466306b17ef289d75d75a5772b50096287d174198a", "0f5b4de70fda76b1f0222ace7a084e3a88e4ccba95e3b101fb72121f3e575226"), ("2869901a3ac47ba6a23f091fa85bf05fa7a0dcbe9a1d1776c9a5afd39fe1838c", "098765b689083a219105fa189d4c49f59b688d27bf1ffe4c30165f63a4c245fa", "083cd9c4a7528b97e3e26a72bf40ccbf3df1d159102efd54252516964b75d6b8", "162575346e4b273ffe80958f9ecb80515a24c1e03802c3d4fee6f151a6131ca0"), ("2fca7cccd98be40246c99f8d70b8b1770706a4427b2c689cca2886b29b783c55", "11be9e73bd4e1441e9f92a9c78eb75aa1c827ab1b261c4658346639c60c19a46", "2f0900dadbabf460f141a35b5290b5e51e3c074fb350e75da02a8a1b88a0d863", "12e7eb7dd5e78890d2589255a532388d8f3d3bae1fcffd1da9ffea5039e62379"), ("0e7aec6dc0275dbdc85d838759823bc8ee52492ced80f42e83068372bf4d7beb", "0011bb0b9ddbe1651bb88a271d2fa2bd5ebf06fe751f7403a0c6c17695cb9c94", "124b7b30d9989632c4a5f132d3771f951cea4bb715e101f7348e0e2c26626ec4", "06a05475dd57d7f24fbed0bfccd4becdacb2119440f0018779f02815bbeb32a5"), ("0ea7bed3c575622112a5bb0ae6e4fdb58ce3b75ed549f0cb95076bf12855af99", "0b556abebea5702abfb6bfe2a55e9eade7ce850ee9c3421e2d4476d00995830c", "288b4957aa88d7fde4a55a6b4d5830b1141cce3ce733359c561f02dbadc7cf88", "13fedc5813a9208a6739c2e8f6b2341f8f60841090c8f9c11457e75f784f0991"), ("26bb6b9324b81804e61a9728f1b763f7e020ef903ac4e32790d15ec6203b9c0f", "2195211573ffdf03d62ca0e94b2941180d2f2f9cdacfe2e0109ab13083d6064e", "2799144df282b8a2dfd0382d17dd2366e9333bfb0c4071994d6f7debf8a13c0d", "1852266c518a617dcebb212c8813b00751a3a4cb929873b3de5ac67f05a2c52f"), ("02a2c2458408383e11e8a0cb249eeb93ed930654dc921f2b072b444b289829cb", "1a74472117ec06a0da43051b1bdf09ef3e95244b7a0353e643a9aeca5b34fabc", "12ea82c1636226a4065c51ae403fd24b09d9e16ddab449ec9a041c4a36bbf0ca", "0d97cc98f7370a67f421df18f622109360b9483b99023d714ffb70f247ad51e6"), ("240859af97c9500bbfb84da6dd155e54d9eb93f9ca97d0cf741c5f80a72b0712", "1d5655d5eb5ee4ad831c1502a5af3a0f35e3f7b7580d97d4c77ba26a8f21cda1", "0ac6c2d9ecf1dae2c5e2926330a8ca0f8c9de2ae16973d216b7db55ca97f05cc", "26ee776f11d5ff688d7fa9ae104465b7e0357f6f50a748171002a3f4f2af02ac"), ("0b2da2b8071a06bd8e1289c611a02c3fd08bd961e848100f75c95a6d347254ee", "1d3044b38525f23b23b89c30237276993976687b0b10b9a01e62b3a95693e2af", "1e003632328ef38bda8607a7dd703f3553ff5d573e0a6327074da9a7a0225077", "1d5938192dc7a3eca595456841dd18e78336aaea2e9593084d552603ceb18864"), ("232a8c59072ca5db20551b52c41ce636e616bd1b398339d04c86ef899c456ae5", "07ffc46487ddfed169ae5945c8d464e43a06824997f8d30cb6c2dce978ec3900", "1fbb3cb2d35a1120239839b5663766183d76320bc3cb825cc8acd41dbb6f3743", "2f7ff13b21d3fc7b52d7e84952237992601fd38c218d04ee947e186cf4b8bc4a"), ("1f9705870cfaa352c133d576b82fdf83966bdd28d98f91d31e184271539d1b99", "069359971f4ae13bf4e50bf8acdde73b0c3cf4261a0855702666d2b0277a9ed0", "2a0e7bc0b8006eea0c2f7eb0120551ce19387582f3bbe908e5d938107a50d9b9", "1e15474245a4b8450f089dfa586259066fd0c54286ccfd2914a41e8cc495009d"), ("2039a99ec2f8c9075417bec5f5815a1679ca139a140b986158da15e0b3783ba7", "14bb2540161df9d9051cf35fbc6100e79447c1ba5857176f1a34e9bf40d558fb", "287530a6b18781a48bdcff1bce8bf18df0f9627a814b46ecfae8e915260fdc1d", "10bfb537862143448254db8483d3600808cd2920acac8c9cddc2ffbe749d506a"), ("1c85411cb890534489b0810d7f52ed3afdd2e4c5400b1db240fc2ff7d6ced080", "27c72d608deb7d77cda8d94a254e5b89201befbac45b9dc531d24333e5f8bfd6", "2565fa2b87a88dff28ad80cabb25f6013355a97e34c6d489f285c6861af6641c", "2aa21467fedad0a45a844aca1f9f2201c100a0b6a463624ddb63c17df2ad66bc"), ("1faa8b855a2c721173814adceb0731427c2d377af2b30426b0af3870a7d4b87e", "275fcd066b53ca7a81ed9d1eb12e82f28bb8e45c1cb1a11a07f9f3195a5a61d1", "2903cefed0b2c1004e4fff434efd15adb0b9732b2b7c9ba72b98b7b6032c5a87", "142b1d99065dc7bae49d935f271661a748aa1e1e507075ca1896c821161bcb9e"), ("193eb4abea5f2ec62c790434aeaac23de75d82002b9113fba3721eb1a1256ce7", "2f97c433fab8550c63e33bb72c23512631687b1f6f470a7fb1c2cfd7a7681f25", "27abb7c3411515bf3575e801d236c819af56f7e7ba3a271a528511a172178d16", "17df4bd535058593d6d9c6e5c5369d587e29d22603ccc739f00f7bc15ab17039"), ("2444f2c294bef122e535b83a10b05da58ba2d74a9dd66f70e6530bb09082e344", "02ca30a462172cd219959f319ccc7c3d18529a8442fd0b048fb4e1ff5787eff2", "084687301878c65c00cc978e6f1b91e881e567f374a13338e00bea6b5e58205b", "0105d1780a651acf69be1b9189abc88f52bd16db6b05732971ff754e4972885b"), ("281ba4996c33d896fe11290211764596c8a0025213ed8ee709efc53ae905ca3d", "07d51a9ad19bb3e0ae4e9b152bb653d9bb52a204b01c1ccbe35415316760a763", "014ce0613975f6514d056a58e442ceadb91029d69bf50014bf80856e9936a237", "26e51c11a64fe4c4188f1a0114276fe4b01b851340a7432b89e9568488c69f69"), ("121a3235fef4e2c53117332c8d2c33b2fa5ff8f37bc77c581e46ce9cca5d1271", "0d106a45a9ddce1c72212cd49726a7e13bc5f60a4710a711cf3603ceeadd4f28", "0e3f8de0a0b59b56c9d6a84066e21c5bb3f653185be6b2b413d577552ca66b82", "2b18936a403dd42150d9779c27495aa3d4145fd0cf43dfbec24837168ed5de3c"), ("2fcb4fa7f2a18ed19e366bad116d189e52266c7d5dd957b897723536a29acad1", "22b735a77dd6496198665948852c47ffd870ca43d7a360f371569dd0a5bc64fd", "29a2a1ba42acd99185f357a3490339e8cc11757a598b79dd8ec299ce7c74b090", "264c61071ba48b0c06e626dc2df0e363240ad17e398fdce333e17325b4d1ad98"), ("1961f1ce74882083939f359bb3e51e6aaebeada03cfc74ad97946c337c4f7fc0", "1d432769c8097a1c8ef930c2ad6ccbba20a86c50f02990db36e5eb83795dbf41", "1612b9f5f792aa036359ece4308427fa0b52569ea9a5241546f9e4374193af41", "009e992d89a70587c479d62fbea1d0c34365e2106eedce042aa2cbfeb7fdf768"), ("2d98b96fb3e3ce0c698d6f7a1c3ccd5d76c442a949a758d97858524736fa4f60", "1f7a0345dfb878e258ab76331d21f70e168f0c904bb61559c7e33fb80091b300", "1295f2758d0c4816446c7f0e12c9df4cb8662fa1854b57a38e342dfcc2869321", "234343edddad62798e464ba8f90acce6ffb4bc897b3b89a4c76b8556d7e149b9"), ("1b613278dce529c06daf6c9d13e94844d5d216e0b5721d10a1de5a58be4558d5", "0db6e8be77ff2b61daffbd8133f82c6c6f641c6e910694f822674e8266c1206f", "0d07136ee922e55a027c9993cee991406412294e512ddf33249a53b78243382c", "21c35a1638e5684b975caf5cbf93ca1fa623fefd12be83f4712b06e186a55a6d"), ("170cae4ba2e052681125ba2bbf32eb26d098543f4d462c16daafa3740922d70a", "2851b343adfeeb29388a740fbc86ebc999a1852b49c88f36d0763ad57d9ac537", "158dd8a35826400708bef5e84ec677abb4541dfe78925c0cd7c7340d678bd73f", "2a0210140fd24481d7f4b554542791da2218ce0c0bd6ec0036737801bd472ebd"), ("28caa979d93f39cfe64a19d676d952986c310c7461e6c11d6d25eec174829f0e", "0c1383fff2d82ef5b544b9f3ec5916d80eb689493c86f9c13069c5a4871b4649", "0de40123b60abe49a3f250e73152ce9998cffa88a8a9572c89c74dc65aa53205", "09f745e1116901f835105168eebdcf875092030a2766ec20703493ef56f25129"), ("2680b6d0043a9ff599f7ef93eb7e2fec4b71ad6646d78721ad7b79277e38c38d", "02f56a7a4d0b45949460a27752f9d9ad16b2ecd043e9cc030e88fb79bb9c9160", "06cb3a21b86a74d54ae34fcd579235c6ea9aa57895daf53a7951e6ae2e02e819", "26e1153b695f9103a6d55b191bfc5c6eeb3bf4f7f5e5149257c32a64e69935c9"), ("1279708dc3838456631bc3fff4f897c7a8474d0425a27fbaa45f1c3c973338ff", "1ddce0ad1e7d0830e9f36f65b5a4708e4dbeb799b84b0919e55b3fb59c3e9214", "07dcd3df111c40b969fc551607e7acd8af280c1a64fc8cdc0341cab5e733d907", "107b8debaf7ced1721ca0f6618b76c556ec6ad380aa53961553973f8e86931c8"), ("021bad858fbfca25d6e81b7dec267fdebb6805dd7e2a24b2d6941ad18d8d8d91", "11a3059c85eed720960943e810a0746c01200c4c94554cf0a3b7cf221215542d", "249469dda9f70d46b90a2ff3487b9ff8a882d0ce582ac376b1fae70ab016921b", "279ede6958563a9a9d5abf20afd109ed59b5c11afca70c7da0a0d3899e9ffae3"), ("2643bb2df4af362269d8de9b7e24e9a08aadda5d5bbf17006d2376395a3babcc", "2f8338b7d5d5f539c5f4f5a431aece12689ec97f236877485a0b6b25e60e8ca3", "2fb0b0b4c22536f4fabd20c9f76936073a7b76befd6629e6eb9cd00c538a9089", "00dd5dcbba925db2b3552da1f5fba5f6d35c2574c3dc58a4587bd411bffe8508"), ("01bfa685323505f3937062a93bc4e9bd14d1de002b191dac8671f65bf3675f1e", "240098419ca59a8079810ea77d18c471ed0f310d01374097991fbf900cb81fef", "1ec1db6174cf92d9a80534f011a51a5d51796f9bedb7aeea4806b1185b939296", "1e952cefb844ed7028d087d58923fdbe31465829756bd8f53420e954546b5a50"), ("062421fa3a0a2a00058f061deb2fd5ba335703e206f042e4fa4d5084e520ede7", "198beb28ca87fd0ac2a6daf5a8fa726eb312757abb6afb3c27ea10f4b3fbccba", "0a1be68102d516362b18924af5fbdd0b8ba48071ccb8952773080409e18632be", "2fc6f00fd133fc870a360aa92078baf1275895c53aa47addd8bf23e2ac4ae1c2"), ("0f52628ae1c08571fa2968160eb54db807490536f914283a3a11142232530019", "23342f58ee6a8bfb66d0ad20c40160e7fe47795323a9d38962a9449b6f3aed3f", "0805429b0d6084cc676bad5d84db2eec5206485ea49dbe6febc5608a0e58ebda", "20f4bc378636879c56ad7a0d2ec8ff33f5466e48fe79ab2367ae3df9f975580e"), ("19d8234dd2fa5d92fd94f87421e5b13de9e30ec8432a64af65ca6bfacd9f918a", "11eab5032d2fcc3242a2154d2f3a47fbffbf99e187493f9ae248589397f0ca0a", "2bc4f5938d0dd2cea280f367b557ef855bfe0f9eac9d6d12837a547fbb255122", "2d1393be54428e56ec6d8dbff43c6fd0c702523482419f7943f09c29c4d0d099"), ("08769e62a0454c5f6c16f237f1874e7ba81b65935ce55b6e7b37bb46e0d4f2bf", "1028a45345583a4db1f7d4aae096d7709f5e61e5d9ae500cd6ea8820c8c905fb", "09829acec1a44aa8940a524124f70aee116e927319559411a16126f09b91d009", "2ff5db3703a30517a86b05ab5e2c86cf6adf23b5e5cfbf3780c8f4f5a60af61a"), ("0a94f1ec5677ea31fa75c54cb5f01c71efeb6382b56b35f7405de2ec94caae60", "11a7b83e44c6a533711cbeb3a0239a6429308e41e6546f161f87b524e9fc7011", "1a61d02c9124a9a55f3a95deb785b069e4a0d8d4fed06bf2d0b9897f52d06bfc", "062c1003a918c004763e8ec8ce0b2fe8d7bef881233e66ed82a39c35043d2246"), ("2618550863ca2733c6178a9f736693c4dfa28697ee100df4ea1ebf049727d1e9", "2d4e2e3faaab401a85b8488923d811ee3feb4473edfb7d65dce10256ef330e9e", "0ae848c03b3af6efe8da662df34d81c01af83a4acb78c5ceab66e89dd5a077bf", "1d17152f4e23737d4224dee98d0b4274d321b6f8fc3cef4e6f9c439f6a48945d"), ("15aaea10391f6bf18cc1950f13239b6bea2312273603dcf6dc1c4c7378a43b00", "08ab5389766165b36259f3f88843d21e25145c6a61836c998a01a584e62a04c1", "0b12943b4c49420a31415ded8ae3f2bfa3bf24aded0cd370f433cf6f7310e111", "06477604214e7d3c214e6151e81b348e0e9bcf00bde6d9b495ef8b64536232e4"), ("16659fed0f2e475aac193cc44625d1ffef5c76c309114c5e90ab3275a412840a", "0e8d54a3507d1ac02c20424c9bef5dcb534d914ac8cbf1a75c836ac49669b4e6", "2771cfe20ba32a513c0f2fa919d6ed343a555ca37f3eee2086e98cd2ccb82f1c", "24dbd6ede19ff02f3d67e6ce1844eb0337b7e1350e1d36a6f0d12165e9135d41"), ("2f00fa2530b6f494f5553221b3b86729fb3241d2961e7a880e6aebc92bdb8d4f", "0a1a413da4afe0d74e123861c12b65110eee2d1babbfad21eba1d5c48795aeaf", "13eec2a7e117539c8140152c1a129d66de8a9b2e159787c43994eeccc080bbc1", "09902f422a7838a92b46127fb8b44bcbf417c545668307dee9069fff694d3ec0"), ("2877048e71533d99bf1e901ec4ab232ac15adc8e18802ed3bd63e73011dcb51d", "2c9be63725d1344c4563797f646833b41e5c80235143bda6049ec826bc913a39", "0eb7259138ba05a62226ab8f660051f3b8ea7b1ca30ae1a0eff27a712bf2331e", "244551b32681822ba7adc46527a16254b7de04a7f397218a13bc84da705c7a96"), ("0e796627b30e3a647470bd70ddd1aab322b7bfa2a3ad6cad825ba64187523f03", "211bb14d9e4bda3d8306d1167fc4d4300d2ba4a80b82ae7c594b3714eb4cbdb2", "20981bc9fa67349557d17904ba160641a69c65675f180a2b87eeb3602666d197", "16046b3e545b54581370bd16cb110a9e78ee94fb1b4cae7bdbd41afda3abdd18"), ("065199f17985bc5df3a9648d0de14b4e0a08f8974523e1913d7d9b161d0ff83c", "2320ccdfb3897cc0a75f4a99ee9f4ae0639cd8f655ac778c3c081999027876e7", "19ee21fbdf69a544cadaf450301041189a03f964084e704bcb621cc1febcfa2e", "2dc2dc6c48c28574a7d55b83cc27e7082e16c6031c304112c39c094e00c3e4b0"), ("2220849ad2c65d71afb047f98783777cb51b612b8339a84f39f51d861332d7f2", "2bf0ee46dc4869e25159a7c12f59ca4a981ffc54ad5da7bb410df880707e6b2c", "158e31cb06e231dbb79e58b57adc14495e09c81e38918c098d2fa8448b11af85", "13eaceb4472fa0c176b1dca0f5a0b87e61db89fe9d538a4afec5e4d83da10e44"), ("1b8d79bdd9ebac25491ffa9cb2b4fa45b474442dd3e842c07ce56c61e63709b2", "2535a937565854467d23d7508300d92ec3b764185fa88319c865af4f7e0b06d4", "289dcdb7ea6f5d852b05d8d167b443c648a898ed41be95c207ccfad92c39dab3", "2eaae4820c23cbbf9798ac47c03a20435949ddaf8204cc3179264e78aedae620"), ("14f181bbe610394bc81443562f72e07051dbe1a9625834f705974b78653260f6", "18c6ae2876c5ef3ae713bbab3796ac83b67345ce6274baa30718a4739d9e3a17", "1294795d12a48035c22ac1cc5eb9b0f1e08ac1b9a0b9088b72cd6a0f99e9e5ca", "23ed7dc98b96256ca342d964ff1961bce0e05dcd25e3acf2242d17911d43419e"), ("1036f87e73050362271c72da2cec8ad55e7cfe498e036178d0e9b303d2ac2ce9", "0541dd4b17de8db4361eb8ea7f3d7ac38cf2da1a4fdc2f6e416c4e8788c83226", "1546403397f23f2118e0bc30b90f321b3532104696a35c7e01811a02cbf37056", "2b03605deb240133412f3db421e623382069e38cfe916c12b076d7825655106d"), ("2e940b4e0c5798b2b2a06271ad2d3e1bdfad5328e0d62e29e3cac51e9e4e02b3", "29b0479bb0856c2c8a34535a26f6f5170d7ffb5be1e86fdac0f8ab6aff40cf10", "15e3d0f37f09c296898ed73cc6784b1100efc3d733011aa7a37e90cae26fbc47", "231dad78f25ac7b57ff9154e30df0bb18ddda3a7b610cf542aed2919b683bbd2"), ("2b3f11d8eee80911b48119820d552dafa38d34b9b8963772b24aa61741fe72dc", "2d9022b4c58500b9d69800ad9b5978987e1b6b8d54890168bb5f0c6187da1477", "274c4799c5777df07fc50d705bf12b282ceab423161e754f1a12c872f3df4ef4", "123220c9ec3c72f7412561d29a5238f7c16ca1abb87b0e8de247ca4a5b362c38"), ("1dc4097fc1bd0d86146da1627377b66cc8182b4fe95391dab26208ca000b832e", "10dda7ba457acaba4553bb77472761dc2ef2c2be7aa13357be958e4a7238786a", "303af302005761b0d10dd5647f865c4b57193694ad4ee1ec9b6ee0da21f8fdfb", "2473209ca802eb582c88cc3188bd7178ba5b81fec5b4b761ec46b666bd07137b"), ("1dea3d45039a9f3f32a55e82dea65065dd5fd7c7b1f21b9b4f1c1b318149b676", "00ea0794a49105490cf0c07419f74055e2edf50cc6209665a64fad5e0a2a4ed1", "027f27e916958687c8cdb9135c4ad256a2c58842b355790791b5c22353875f14", "1faa23634aa0c2489433b39a7d51da6ac9a91d68d5cd776a3e9aa9de650915c2"), ("25e5c30af1c43d55ac552213535121a2457e51d8c0f97afacdf024a753cdc01b", "2b722b7dc8527f55db5c67451cada12ac6b2ed5df12bfaa573c127b514874cb2", "255c3f64eb8a1237d1d1fdaeb1842bef6d27b349aa4315400525ae1eb87f9b07", "0adea40c70008b660ed4eb75e310302b888a67efc2e367242e9e8f081617674d"), ("0eb399abefcf80e524169fa98852f24c247954ba3def85cbbf5c9950f2d15755", "1dea3d2e098ad992eac02b179e81e0f3c17cf850a1e473625acb49c3d028b9dd", "18f35480f3a8d360fcedd44c3b19c73cc0a09c8126b985e2e27aae3731adc196", "1a872dfb2da9010e89e239733e4d8660c9ad6df8d1e1f25a9a53f6bba1619cb6"), ("23c3977253ea20972a19c10efdb7b91d20c715579cfb5dbf2ea7ead87411653c", "20a72f46e3d4d460fc461c8f80a9bb2eff54a919d07f87bc1aa01d8fca791d9b", "208c1e8aee7cc66545a9c828c9fdead23f634a51c8a57d5f7e27c1044f096b0f", "17d62b0878ed833e2edeadde9a7f3f0c7064f0229ea4d28accbde805d2afa669"), ("203518eb8d4f4596ef7eadf5a9bc2719a41c30e03b2a8a5e2c6831b533f010e7", "0ad33888052fc9d29f91fc9687025d204465c6b35d520dfc244ce80207774e9e", "16a257b370dd319dfc0cbb90c9a512e66e17482825dfe800c87d9cf3a3e734dd", "16730569271510e71d8591a8c942f3e04b1c2c3951fd2767dd0d8dadd37432b9"), ("09bf3523c7012bd4f50397870d7a5a17d5661c75d1d20de4aa127506603acecb", "01874b0d8eb43ba3e689e07c23c05e61a7b659974a02e5161111906c6ba1608b", "0f6a77e7d4a8a487c512ff7a316a0093b36e7a327aeae5c09c9a342bd112dd22", "18d923a447b02af913e0672ad5dc93d71061843c164bd3d6fa4c77d141e9e6df"), ("187d2aaa6c18fe92635543d8840d626f3662ab0adf997b3ccbbef2ef3a50e9a5", "1307c689c27fe55764b2e22ec09cc87bd31a31dd4d6fe8959474ca52b0618832", "11dd3c90327689f732555053848ebe550079aca33acb9620cfc124040211601c", "1b698495dd3f2530e927a8ab37c3b4710bfc321cb52856133e0046aa4f2038ec"), ("28cb838a6718bbb988456635d22ad0c0d078fabe40eabf0985587318089e51b4", "1fdad00cd6c10891001978b3bcb10477f0184bb3cbdbfb7c00c86d0bea6f9ddd", "26913f97ba4ffada82ec38027dd3d150b8c91382b1a65cbeb8a95a9f5fcea62e", "1c4a37dc22a52f18d3ea7b3f6ebc7f975b397ee915fa0a02b31974972bdf182d"), ("1ef575734f86f7f7f7158e5ef9a135ac33f07679425079ce1234a651a456728a", "0bda74611146c8ebe690d49d7171e8c96367ca1097c1b935a4c63f3b38c5c697", "209e17f95f0f1b4936da4cc13f00c11a1bfb09e461ea65742661133cf263f3a3", "1253eace8b9524b795270256ed7859ae5409ad36cc0fb7426dd95d912655e7c5"), ("2801b7cc6c01dbdc088d20bb5c963c60704c43076082b7bd77608b36e7233a90", "25855143f81a91278d5d892052af87b8708448bfcf2ec27e5177bdb89bc64b45", "1ccb835f82307ff869c247df00d8264cb5782dbcb9f23f03aa219338f40b0b9c", "19f690beb3d6b1e6b4356540d183e03e4319e16d4810d564b88937aa94f7c187"), ("0b4656cefe7e113767f1615f3e9ed05c4032f73a3df61d7eea3dba89e2698ce6", "1f221faef792b40569ec351d43de4a439345df94683937f9a7ed310794fe3b78", "23aabae41516bf5f966921081cc0dd7e8d5a547e1681523755fb52dba4318aff", "085252d88160966bd5e47213486561b4134decb3aacf153c2a854a9c31a3e91f"), ("15013d905f44699ec4e5b8c2bdf5d600156c76d4c381bbee809a0d3517116407", "168403458cbb46e84da5206cbca3eabd53f08ca6e8f3444092a9e46936104950", "165cc1307d2b91900adb03073eb7aef395e5752d443ca0a418c024df51cf2fee", "2407c5eb76ba5cc360c730e9633208efe74ba5bef2721419fd956af74e4e35d4"), ("2c9ae4bb679b98b4a746f367811344e16e010a40fc63ca3e6f4ba1465a77ccdf", "058fd25910fedcf9533d7838a2b47507d0b8d3d75563cd0946760097082fb20d", "1fdbf87b45efc8c3c42e30b4a51448a78b2dbf57edf9bc15941fcc633a46d683", "0e995846d0b09cc7ff8472b5c8a0e8182ded4f34bcaba9f656a96ca260d6970b"), ("2d3c76e210ce7d5443f6126b2f6ed9bd7def85bffa7390a2e8b8a40c7a163e7b", "075505b698d6065eea9aab8523bb90c13b3c041c8bcbc9d425d88612c41b5cd3", "09fbb3ca2c980929dc89621ce31761965cd40df91b533ae17a3e2e34b8a9dba3", "1af07e363252fb91321a0f85bd1e9061db397b2c545a154410a63c46e0704108"), ("263c7b0cc571427c4e517912653e3c9bb249b89d8e3fff87d885952b3a69afab", "27ec7a9ff53742f8774bcec24d96f2bc7e42fc9ec14a860be3b6a1963399ee08", "1a6559b84bfc8ad88d263fa69d81c5c748f84691b7262464252946de0f1e5586", "19d54ff985cfaf0f9057764372ea5fc4bb243f9d36f6f0a1c2260da19ea39cfe"), ("1a7580f0f03531817ad0a03948abb40133f6188cde7ef0293e16db3dabf1c55f", "23400d1c320401e1f2d9bd9e7b656145799f9fa71be0bc93afa79063589ca4b4", "1a7e6991f6acb47e17dc8f812db0a1be050a6a06d448370f18583b261751d4e3", "0fc45b06fed7d57b4479654603c1e30bada3b2fd59a1e3e7b3817594f882259f"), ("2acfc766a43bd5be07e03cca77d46215d7aec6d87f35dd0db7f2a16e2709ff3d", "0b9a453bad5e0b9f34cd0eda550863d95cd01139d1c41cd68db52029d1149864", "2643a56f944bc20ef6e5e85b315d32edcdd429c3db5095eb8d5e476af149a360", "1f8503b85620d34a6578f522f1b631dc36d5beb3a09ce60a4e2f646c92d18a06"), ("00540864bfed8d62f37737290bfbcd36a4dcd5c9b4b68c7e26d8074c764a3e9a", "0605538a3a4cd406af5ea614863a353a0636f9b8e9c05cdbb3725e65894b79f8", "2007eb6a30f9eea9ba87362ef5c5705bee6573fa8bdd9609f2525cd8675fa47a", "052ddbc2013eaa02d2b54cd7f1c24c32d2e636bfeec6e22dda29b90f01ea5ab5"), ("027efff26d6c9eb1c8760821bf75198f6029c6b42d9e88337938c37699049d98", "14f31700fbd6e970a5c7a321a4078c03388d6a05a2c357d7e2db32dcbbbdf316", "1fe549d27b4b2b64f1e95226e05edab9e41b0801006ec195b94c4c569fb4f352", "078de6386241032e0c6aae5278d7c7e46ff0952734c6cf4ca43b9223981cc18d"), ("0c83f9ed96d1ae8537d4d43fd36ab0242bfecfb37ed973bb38dad12dedacf778", "2ef5eb6b1a5a551db146cfdf51b7ee186b300cba0d6eb783f60b30c4b8906208", "1fd515dd2e165e2729a4b4e313c81bc90756dd33b70b354039f3335526e8504b", "19ec7879abcb4f79ddaff0adeea253ae40c9cc81a5a1a0277aeaee73ee6e139d"), ("0a2b8e88d9a17724fddd545193382541e8f30bbe1c069154fe5836256d5d7f11", "16e5a680c47e22b471d076d0a9e5935166428ef71c16e21127a31f7e0a26760c", "10257608d872a6df5ca0e767b9236281719ebe7ac0c1c542099bd8ae71b67c73", "1adfffa5636f22007e15499b03a96148ce66c74ceadb7edd8dc484b8278113f4"), ("27f1a38f51800547be1580dfd76922d7a22480e95bc7343d9c613f20c40f2a10", "128785104c84a0234b281ba6b42512ff0c4dbec83504663a663b6998afc2f65a", "0716d1eb87f420769acf4e971e4fbdbb729dc615cf4ba84e78c0e46cbf993263", "1fd2150f0a549215af9f9c31cdd9331e9be8da4153bd5ab419b4fd5b2e2ca974"), ("024e11231d62f6391d1c5ec56ccaa3acc373dbdefdc7116f3985edd3b84b90f2", "1e75d2d373b0a864a1ee45a848f8292daec022b13285354c46087e42120b7b3a", "0ddbdfc182a278f1f8e321da258d9938df3d04e0b394ff4724f9ecb863114937", "2e12d7ec21eb97f7874821a216a4f81557c92b142846f7f46cc6a66e1b56c4a1"), ("1a4e26805888d4af2419c59b9c0f41220f5ce341559e9b43e94c6fa2924c3464", "175ac80ce30428c4338f9afb5e0888e9596694bf1c58fc1daf8453cbb080d4fa", "02f694e4913567c305f94e904dc84e31549b17e9fee281b7f5a8fd57df9a0991", "24ebd77ef3c1cfe4c5875b86e2b21ade20338a431bd19c3a87b8b04f8b9beadf"), ("21efc9b43108c57d0b6f4fecde5384b4443eca88a5af5fa729dd16c63ed0f9ad", "09fd23417aa0406a3910fead793191341bac2474bc554e815cea7700c8bda228", "1b3457f3859bc2ac69931249ee93a0211af9121f69d2366e39d0484ec26ab640", "0908c7ca13b9803d414e0df8f99a8f28d5b857849802115dab53df05512ffdd3"), ("26bdb8b2e53586799567485c83c7d5e3d3d2f7279b200d29045f4e26e70721a5", "283970cbf7d7cd397da18f371f0622399cc791d8ebd7aa1d9bc6e1ff30e6e6d6", "1bde2278c9b3b48f7cdfae758f23fd6af93c3ddd207ae6cfd8bb7cebd78e500c", "2c66a647b3878a77e3162ca2ec0bbcf6bcabdd5e75d833e93eb38e431cb87bfa"), ("2b06c4a55550ae8df5d9fa48c68dfad4d39fdaaf6bb851a4d2c0039e08b4a591", "278e00b7abdaf00f52cdc3d856f10b8ae6326f51454da391ea2d0510300e64aa", "14ddb406a2d4eb24149ace39c61d3a0c559a52808239d827bfc3b217b3513169", "21e4ff14e169ed9ac8040e4e0d954df0629b7731b438283628757aa0bb4b6c05"), ("1b08e903016b394f7b728237b01c66938a51a6e102095f0129355b4e7bfff196", "29b79820bbde096eb0c1662423ed0e8ce4426b626a65484f99f15f9c9a15a1d4", "2ae8c770d074a9bafa4d5b31813bc39289ed8441c8b567c43709fad25e5f6b11", "0d9733fe3001188ecb114149e339381d02ad51af2cad9af72c35d2f0895634f6"), ("08830714b7db1b7f95338ae92e6441266038b776301aac326070ffc98abd596b", "111fb71dfb391707dbeae2f68b9479f0a16f181376f81a519c5869b8699fc643", "0cea78a3f8532375a6918a489cd6f6fcad195f39b15e00c11c9f20c250c9edaa", "0bbc4499ab06d96fb6af5496936b212ce43b3163014795fa4837aa0bda0bebdd"), ("0ebf425f8794eb361cd9b8faa3d9a9bca07ae5917f7cbb02137d3f2ea1653efc", "16f38e247078da09c82a0e9fcaeaa2a6eeabf21b5d33dfb0f087ff02fa91664d", "26ba73c822745d12d031fdd17e9f783907e263b9018ab5cf11bf77e5607eef12", "099fac5622578fef5d99191d86d4333cd87982f79311fdf159a2bb0d0045f87d"), ("13e00822969e208269d282558c5fec162c8d37977ae9943b5d6c4e14a7cb2042", "19e6e6209c2b5185f0c3cf2b4c8208b495292ed23fbd8f6ae8c6a7b51f63ceb6", "1d6ee5bca207effc3a7effbb3bead03ee9ba92fdc8ccd2c4d240ef9a60bf984a", "2297de9ab2ceb244e8c26869b2a5403be6c73f00ae2a9984d13b3d4ea7ca4d12"), ("1eb1ed5a20aa302a80e1a09fe93e5c11d5dd4fcc605bb77e6c4d4e846811ed73", "2832bc11142f99cfdbef7f3c50524796ee25d3182983c69656c28987beba94f4", "200b45e8337b6bd5bbd71fed9143f6e34f48146dde1c68bff9d7e5f8ff078049", "2a7ea7bb60f01aed5f22f753aafacda3f27aca31c7c42a928ae654ab208ca7f2"), ("069f10e8f295303529358a8bfa153b5b955a53a27790ba4898dbfb297e1780ef", "047ca80fda996c775d0978b9ee7b5c1e291c20092a57004990826f53555f2fd3", "055bd8ca681867799b6f3de5d644cf8d896bce57c7fa1ed5c1b8c3c94eb6d568", "20d98415a16b0b3587deeac5dfec3b266ab3652b5c255cca58ef03727b284f24"), ("1e22a7fcb543feb755be64f663899c3b7648597cc553c9f833ce6168db32a355", "0347ed48df67eb505d5e8d5a0b68a7a2e72eb30d22f2e94af7fc5e0c4046854b", "2b1767a119ad66a082ebfde21ed14999788221405b5882e00a21db63e99dd10a", "211e7c7750775f13af6debac9fb74e3b06ddda77bc6e450bf1429bcd880ebe38"), ("149d7ff818ba90d7b09ddd6af4bd21a5cbf467d2e7010a7b605ee4f5e8159f13", "1326ba4e4799c15889b238af96fd7005682ab303e5a8d246dbb6090a81705fa1", "03c6451c588cdd08b01b86db8689da5bd6bbd79f9ce259c8cdb0cb36531d1ed7", "214b9e5a8508bef9db0854aaefd401297a596afc24b533466472f579a4216161"), ("0596acf0236e92986982b6bae39d9c0d677f15f11a4b6750f4a9a8afc716ae5d", "03d2bd254b8bd891f1d49097671829fd548f03f76edd6a80c271d3c6769972aa", "1a27f277419fef7d894058c28b1feb0a7a50f47c0721ea13600e4046b8e8cbc9", "27f43ef4aca1eda5f6219ef7e528ed967b3751fea976ee7c77134782e5967138"), ("163acd6cb69114cd57f029f3d3a62d89a7a0997b92747e0ac0fec48169f24204", "2c5d15a0c79cfc3e1085661e3daf89e85cd59f3039f6b75f84a6ea9f0de289dc", "23328b6489a2d5f3f31f4d2b4926eb0765780c28ed8d4b39d8557d200c551ede", "0496e85e1aad3b7b2d4050bad0c26da3b5b8ecaffa4bd9fe5df87a0c5b842b98"), ("1a27d838b78adc8b8873c21784875ebdd2cce23f70f8acf5a2ffa5a9708883f2", "185a76279eec86f1be52e8104c8d255bdee7c0a6d3e4acd974beaf4a2be54053", "1e508fea0c5ba112b5d2e04991e78a986979b9a668c714581e4d031117b2c035", "0b6c072dba2e10b3e72c7985390197632c23cf7d73f6f1240e9d23fe069656d7"), ("3018c555ccfbd200320ac01663916fd3f809230635d8409d625535f8289cccf0", "1707a0a8e87bfccbd47643a0d996627ca82cd354025c122380d9f06ac897b397", "0c056495580539bde791e16e5ea378b8f16a9a58e7bf217edb35fcd64ad0277c", "2c22a804746092f692955161d1ee7a942b66995fb626f0715eb57b1da39a1fe7"), ("252c620a06e3d7b2df8a9a8f871ee556e112db61ba47cd1ffd9ce06906b718c3", "0ff64356c5da60405c066d10cd4a4649a5a65290a2e4717797c5fbdb7ddd936f", "2fd6002a25efd4969feb3612691e0233611aa53009b2cfce4af88830e9682109", "2fa6c428eb5a8359403d61eb63078c38fd37fc29d4097dc63122f4936391c576"), ("12b123334779086cd646a86b6179f9eacf836a2bd0d99703859add92c21030e0", "0a615505f668f80b469221503eae4b1ae8fedded58c167134b6a5d53df631a8e", "17219e8bc5c25c8f97d3d46bc4b161f52d50c5ce3a7096beff1de1caf49db70a", "02fea457b15b7665309b45b860915306036c06e1108edf2a2305aaafd27bb0d3"), ("065272e6e2391df4612ff0e4d5b857dc091052a531c25d837149b378baf12312", "28ddbb9058ce152eee4fc9a16b865fe72eb51317dc782caff9644dae382c86c3", "19034a652de363700cd217c6b160bac693af032cc3909003820c55af5114076a", "1c82159e4e1f9a780327dca28b4a1a4b2826c87e8902eef4786e669a91a850dd"), ("27688cbe13d7fb88d10a9b73275ad843507e1a88c38e9db6c48de52c618f0750", "1c9d3d0822d813385b61f007b5d8120719b711d2b2150fc055070022737adc66", "03c0e653ffaf75d406c3e919294b2e4986f033ac045e5eae79cc0fdfcb47eab3", "0341bbd95af94e4ea95ff57ba1b05283c43dfffdd2c569aa1622ead913a022a5"), ("1f61aff111e2a5941776e58418e7feb77d398341686594db6e15a47f97b4c353", "02c98e566509918694292f31f2841d8a43019fd294064568eb4a2a7654968527", "196e9fe2307fa5675eec064bee38194f591d9688587a5ec4f9ad9fe7cc6464f9", "088c1202ee577d91f11278e86cb62fa06370826882a4f099926e96eba95ae7e3"), ("24cea0a8218771f51c09f2e87c7309345ca929deb8a5564e8085121e1ade98ac", "1433946b02573bbee1c6ceca6ff38bb98a5ea8acf159332173f78536b686d298", "0f321ef359f2ed7057441cd47aad172bf7ccd7e8987d950ebc9233caeb8cb474", "105943ee5b99e00763b0fad22efaf4ede4d27aecb5310747268d50f973ca104e"), ("1f78ca0504a77fe5e5c35910e7011f3dc47149a0969ab74042b08480f4347b86", "12d012d7deb405f810b3785900239ddea85ad06a57c9d24bbf881cadae32c489", "01fff6679b37e6eb4e17ebdad9bbf36ada46605baa287cd3d09842dc4023557e", "228a185a0563317a8f680add9540d1a9425b9c801409479dc4915c307ea58e30"), ("2a8b27fdc0dff4d4fcb0a440e747f9d5682ce764868ecfa6898cf7621b8987f9", "057a277bc517d6d124434fbf7018d2d18f4faf0b1d5d05610e384341b3880f45", "02b8b20c45c726c4d7002a3e89f1e52084ff4e7a66e5ccce7feaebd84cd7fcc6", "130cf0f2329ff723416b6ccb05b4a3a422e36674c04398dcfe15e778b2c999c0"), ("0a507dc72afe33a4ab8d21595e2f693ec113015d27ccaba2a552993597ab588a", "2272a6d88861000c309b192af5ca9e541ff39041f10076162a316cf6d719f16b", "19c21f4fbe9af52c1b378eb12e006069cf1a1bc1494b8b34abfb223a6595a7c4", "2d4059bf5d86c19b0fb8e30eab2312309acc470fe7061079c7bb7b040c8a3c6b"), ("12a95caa3f748503602f1250f95c5891698409f2015deef26d01241a9b9eb4e5", "118959929ef327c5571e503423a36e53513e3c62a7dc356499343547a87d7fc8", "1a312d0c7fa367e26feed5c5ec70888dca57928ffa6bd1078fbf9b2ae7ceabc3", "0cf44997eb2e619ab5ab834d65346cf4d86ca762fd320d94e1c160977cf835d8"), ("12f95d9030bce823131ca3530279a9616ed92e9993658178118dfe0b5f137735", "0dec7b9409f81a4467a2b33f570ce61f7fc03fe73b519c4bbb97434323199a39", "110fd82a27c430434b11fa7d92a00cdf9915467f84b4684dda9f89964409f388", "246a537cef742255b362ec8dae963f08f731273269dd6ed051efde3c1a5c6272"), ("2ea573ebcd423d24c3333f9b49abc744a506a43a0aef068a660929427213377b", "12d8c5a495571a82265a507f24974e4c70031cd91657fe03ccea4bbfb135d0d4", "2cfd2d2d828c7b198b152898d5b1c1400a86b3c7b96285443c366ca03c41cccb", "138ab231d366be19f7076a1566a4077edfa6a50bb653e0f333874a977fd1b8f9"), ("1c2df2405c5c4e4a27973ffda0a058df2a98f66eaf0793fb20d11713086554ab", "04c7cfb9bce6df4de1337dfa8894265667320914dfdfb0abfa1deee4514a50cf", "077979d61973a2ff67daae9322c843291ed341280c4b9f7bd20afadeff4959b5", "1019786db2f3993ad52d1e8edafc61ac2cb1e32ac03d11f7069b27e80eb24f28"), ("0c9c27deef6f21c6d784c067eb27ed1a8d39306ead0c0674f2ba691c0ab9c40c", "15bf6ed2a3143ec0644601af841b05555f638bb17ccc5d82add472178bcc59ff", "067b4372d685c97288ba89c7aeec78bbe7c12b2a6df905d6d5c65a7f91abeb02", "164645d0292582ee6285f4e94d189d673b39ae04f8bbe0cf73d5dcbbe9d38be3"), ("2bd8847f48adeb3e5dcd60462aa06d33713fb03ec329775438c6118448f23780", "2d497fb3f4f7dd7511a687f1c9961ac7530e44033a12e72c4bd9146bbd9043ee", "05c858905fb3224b1b2f307e03d32424bee6ea020af1f2d4b8b7022fb58588b3", "034e774b2ce3c79ca16ea25ae3edaa5dfec4df52a85d2b9c420f1afd8af14a47"), ("045cb36428b5179e1039bfd1b56ccf76b6099d2c494531b6c6d1f43c4930ee41", "2480bbc5b1b6c34f531b2332d2b7d3a18d385e25729c817b0302d0804425bde5", "11042089b171db7df54cb7ed19e689d5ce4e58be1f0923d0ea026899602dfad2", "0de30f486c3de108e1db3576b257cd2aafca2e2fa41c043f44b983b497add463"), ("01100aa943adf7e4cf620b33478c3f78390141eaf63c43a4d5c620777631289f", "07d9ccf939c9fe517b394fc33127a694b76e452a950c482643445869ee525618", "2939d9ac326f0752792f0b24d15438fa9f315ed58522e56428b77cf5364875df", "13827b2a53c642cd47bc83c43050302622a35c027afa3cac70d1ea50d47fb37c"), ("20db6e3bd8519d24f65388261b1c477b37649adc6f3463fa3e7fd4fdde85d8de", "303826fe2c4f3361279acac68914845ab263ea650db5a649c9c3c8a1cbe5a43a", "225f0b216fd5382f81d81943987948b12ce0fb488ed792843af674bfb63d92d5", "10a4e05e83cffe04567e63dab4d821b7cfd19d38cc733a37008be068ca1e768b"), ("15cec4f17021a8bb3f9f225aff8c5e753486aba0123255d917d32a24b8223df4", "12db7f1ce8556c766a3edbe2b5c84f5248d31de95f9bd555e0eff66fc1dfc21f", "01cbeb98252f60472f79fc3c167aadc8baa5338e96d1b66e862630eaa3bc6397", "30061f0ef77c242642cd96662a3d46b2a63f34e9eddc613577efbd09cee6d509"), ("1dafc6ee1d0ab474c2278a79635abc7832cc1ccd92e6e06c6b4005597903faad", "05e3f43ac9c368b76a4dd48aa9734665390e34d146a97bfd5a7ef6e3878ada6b", "112036f9c6b8b3273a202f04a00b4020681b3af21cd9995b33aa4791b28ce136", "1d8833cf289461f50044bb5c5e584770205c6256f23242a8d2d5d8625f9e52d0"), ("0172b73ac4314d8fe0653f8a3d8b688de4ef4e403734dfd4e918332e16ca35c3", "0d0fd0723fbda2fe8d15c0eec5e4711b70ef5d28bbd6ccdfc4b389ba43f3d60c", "1585ebf9317c09981b3f8699be2e16c3375652561708266a759246ad08228bc6", "2ed902df344c05e3102ccaa9f5fd433ae2faf26f17dd413e0baef3116378dc6f"), ("0cbbf56ff9e3a3788b6957379b11f2f9113a04d4fcc6b66a1b4366eb77aa5efe", "05667cff9eb01533a94e986fb87eea4c000491a883a1d6f57d3d1266c934a0ac", "01b09d7059e3c94b43b6b9c3bb821026088cc11c1102d65458f162e0d71be675", "22d2a54cdee207480578f117b3120703f5dbca0e6d1e8c77adfc1df829f94967"), ("001f3c16ff798896e22d9c07d42ee4eb7afe439b0c8eea184e12f79c0950b0a9", "10e4c16660ecc991cd9558ab32a70bfa5a90b24a3d26697966692fbd0e4c7f68", "0e2af332c9a6e8e469a89d34fc73af0d43c36e76b991922f34c197bbacd41adf", "1e2026d268cd6d4de956cfad192f6918f2c983d19ae72f4d9ef2e89257b86103"), ("1a4c857a5af052017e30090dd5224e3f4c0e913fa15928d7d55fe04da762b581", "0347f37d22fbb6f546459c075326d4ebcd71508250958516044f830a276d22dd", "1718b48b8ef99de185e4400d906383ee2726d0c3a0fddebb0023219946a7cef0", "1d7691d3857e298a2a3108d1f0a6a204b0c9caf2474e1abe96772793cc02aefb"), ("2a55726c82a4c37a363aff2fd24940c9a7ec26aa1e7a3402f8e7af46b1bf6d54", "2fdda5a058aac1e3b5f800f7569a793185b4c6ee1bddb721de38273ccf21d544", "15a56d1e46362a8197048e71a7ec08bdc0d699659302d0b198ddf3f0bda1c2b5", "2d19423833d32f179b6b933782801798e08e59623a489bd1bf6b5ce7815ec4c4"), ("28f1b0f34c3d83845531f210bd34f3f6cd9379ad3d59758fa11a6c99b2722889", "1f2a2e5eeef4bb8b5f0b2aaa7fe226ea5e5e3d4d8781d94dcc89c420360d58d1", "121a2e0e334dc0e5ef6ec7bbfef26550e46e9737531de53dd76b1285c0c0041b", "2f20e415bb0d1d29bc944dcb3fc63ff5d4465bd4a964e50990c892e04b26d370"), ("2f7bd8f0f0fda72dab85f0cfe374d6464e70bda6736bafabab92b87b9ac4ce40", "2aef8044c36a4cadcade149a4a63eb094a51a94363381e4363d859b78c0516da", "03763be17ee5b8e97055a2e0a8bc9ff4c108d4431cadecb7735b26006149cf25", "0e595863ab139795c5925ab5f157d433267fa68180bb47172d8b947c386988c0"), ("1e7895901ec53e13fa41a4e47c7c293f1429a0c11d74444e05fce3ffa74b7133", "080c7dd467c45af3200bf2957a9eb19f621a59ee460f23ae59bfd1311e039fab", "18152c15aefc189a6d0844bd6762fc194609518d0d30353144651234b06285d4", "0ea5cc33bae82ae0f0f3919d142c6dc05a852ecf3f077fb2d7ad915b338cbe18"), ("05c4c863ae5f4d52200b1ee4c986e82863e7e883360d20db8502a2a774758000", "1e50955adb6fa050902c3d17a780f8947af603077bca01f4c0b9e81d07b0976e", "28177752688ca3303c9b0fc9d33cdfbf374a8db4fdebf37789c1ccdd579ca121", "0144d1313b0f01e8c571a51f3424844d7a94ff222bfad9df9157cf7932f90fbd"), ("205220ac4db56644aacd4486de5b0bf905e05eeb29a99ffddceee5d562f60eb4", "09881484a26b51c3652e84b182bcb325ebb04c392f33c02f2108daa57adc4687", "1f1693d85b427413fd32f59a3663dbfd31791523b5c0ed5952471991ec1cfd14", "1c912270e32360d3a3aea7dd5f2251d43ab5dc9ca2590b8c5af2ef8716075a21"), ("17e7315adebe4f1a544e0901a8e5c05ed2101585793335a96d8b8f223e2fe334", "2339bdb55758a049510d064b8b2b0cd695361271550368a78e20f6f9eeba1516", "22aaa6cb72916759797f490bcc79e0e8eaf0fc6c4837f72625d1ec5dbeb3a3c4", "0896bef2bf7b9ade8be4a1f79d831e8af88019f467c964558c702b9272bca263"), ("2805f6d5cbd0bc88a8cc9abe6f5221c8b15e1db9ab95d1a0505ba4ecd2a3901e", "2b33c9ec533512940c1c742fc7f5120637dae660c3531ee7950d17ed55c64033", "2f22ac91e3513434fa13215aad17154a1953bd758b61f23c36e7c47b0613247c", "0ffcf34fb1a5f6118d17593aea1f1fd63e8cde9c3b265a940867610bcfe4c230"), ("10fccbc7958fa2ac6b8aba35c028dfe44fa15d1ed8f79112b86ff3a76a6e8136", "20c9ce06f51108d595f4141ceea555d12736d3549835b9883a081792a4e4fe06", "1bb2f2bb17a435d5a44035887ab132bdafc5cfd142409755a414c6e3a7213f88", "12b3bcf6c6c0c24734c73e31543b56930e7200018d35b93b177946f655f8e14d"), ("067acb8c9d6035595c0a2457713131f6b4142c2d99a2de0fcc7c31ccba355a16", "009f495d1a15903c352a2745112e7fb8b0506dc5e17e1d61df2a893c4d979685", "0713d5efb0b049090cb127fa29dd80a2301fce85b586fdc0f01c53bffd822bda", "1d875e648e3e703e3c0189359945efb02c75a386279876731b56d38718e9728b"), ("2a72eb2f68529b46d5a17025a66979fc133ef37bc8f10d724aed218774c652d4", "22b7ff592ba1c3acb75595a8c1130c947fd5474d429881ea120b99dbde23494a", "159715606e2736798563c7e6664e209615c48cfdc79d3b60f23d8bf45ca09966", "0827cf71743dd20fdd6022f26e9c9092f935b83d96a4180a0652131396e0f5e3"), ("0a0cd2280a48251487921f5394da8a400d8a3c26b24cdf7cf0efd585995dae11", "0bfa834160c0e8b668a8107689344e1dab7d2c6112086f65318819bac172d3f7", "02144b2c4fc31f76164b7d035517a4156e4a514b1f0c6edc61148df57fb8087a", "0e99b8c9a9caffa2372b5f8b751831c7fa2ded94c3bd470df83e7b6746e555ba"), ("288384cb698bb3c4327e3e0bc6d8adf6f2e121280431e6c9d4972d01216326f0", "25cad2a8ceeb1387a9ab3df57512f9510710a8e38ddb511f8f1ac5074d3dee61", "23367fc00fc8315237628f44cd614c080f570a55a62964a745c59f96af881f6b", "217f887db8b1f8e446037b1bf0393a652287accf51c5253b5be16375a4528f28"), ("0545fd7b5f839938a1675d4a3a9c9300ca4c4b43f53db936f9703e02643dcdd0", "28255d99619b00b9828b70e945d83d3d69872aea1594f65af94eef14bd95128a", "081f11aa1bbaeb184a82d9effd31d923358099619cf423bc80da92f5373ad1f9", "13d4a75c9c7056e381324aca0be7ef3bd79066e5ce8f0a9e5db7f44b9ac27547"), ("097e0f2a8f264c595b3122dc1492b172c4be9c012035468a9e70ea6e2941fe0e", "288c9aeb1791242e0b9417ef6b29c2a5fc5f6ed63e166e7f364d94540d1aae6d", "03d0acc3fedfa2640cb9aad34e7cd039bbb0914655f8895aa91c941815992fcf", "209e1282ece7fa66c307a796491c69b971a4dd033585db57365c33b348e98f2c"), ("2d3f04a9f493fe6ec8e99eafb0a00bd4d490ba0a7a460821b7bf3fc6d85e9adb", "17c3e25ca210eb1bcc86a2050cfc72eb7f4acf013ada9ebbf2c8d7bb44635256", "0e141a1cc324f52eb6850564f3787ed9acf93ae57fb423b5b608321b8cad987f", "1715c1432c61260858e33ef263941bc52757d3b76bcc56fa8900e286739fb43b"), ("28aabc4c1a7a856e8f580eaf2ecd8eb4a77c6e5cfbe11ff3b6960ad657d9082d", "06b03a1391c3481ecee5ac273f52266058a4a0c3ba20e17169c7547fdf71a78a", "02c0d5e64e297cdf85a92e44f901492692939d69b2fd12f1fe338f28395a28aa", "2df7705bc31c0e78f67b9f7c6885f878702a458ecb1c4c649001a40bad490608"), ("1e42e5145bf8e7a53bc96cd4a10f3bb594d7eb6bf37a52e0fe430cd98e8a4e72", "234fd5df1fe8f1dbff9e620235d487b79d0a602b059df01b2b84402dd53442d6", "2b057ce939dddf7dc0ee3a4913cf63e2482425c05bee31d4fe8648f3138767fb", "06159d9acc1ca77bcbd9f27b4209cf387fa37ca458b66d944054bed8e50e2dd3"), ("250d26d101e408889ba22edbbfbca6c27ce4e47f4bc5578e79f470daf247d4ed", "1e4c81db80a919b4fca77de28d143cc75ab2f34ea3e0a225bad275c6f992ecbc", "0ddc8c02b1ab737ea80e834bdd96888f79544d3cab390f73db05c4a95e4fc485", "16ae5ff14519949fb3ba06e97ecacc8eca6857153b035fca9b41b1ca453eb53a"), ("2c94b1105c5621633a5e4b27620f7971fd69a38fbfc93c4608b4dd28da8d0e60", "039f2894e2de2608a2ce316392e8a8b0d692407eab2b937dd8823c59984e339d", "12eb6f2d8db03104963ea78db7d0e8c418822e7d3f9c36bce7bb1479b696dbfd", "25f367b837361c64ce5f6fcd769be5355084f08f9bdb88fa8f4e7958e50d895b"), ("26d1adac5ac538a8279648c5874611038aa1cad4f6b783e42c96438ded2fb190", "098e2a85be54eaa6a5eadf0ae97581e606174a4997ae61dcb0a0f9bd4a4b97c5", "1b0c6a8721697ae1bf341b5cca3c65a24f73e22f757c82596dbf2b9351c59c9b", "305abdbdf4788bc1035bd3180806a007de7ca647806921c2e9dedc42feaecbaa"), ("117f4bf0c7f7434728d4d0df00b29cbba8f25ab7d7d6e04810e2f438c595c13e", "198c05734b18b63a0060d48804ca31ca91d064a2dfc22483109d10450c787823", "1c198885472cf83e93adfdc5b0105f28cb467e9a6ad532c6889dbecc048f0dc5", "0797e48b5befe6982647103b5415fc7137216ccae732b97b84727b86e4560c5e"), ("304ffde5c9d6f7725fd45fa8ce668421434b66c1446dd0dbac0481e14ba94a90", "074eef3592280b78f2bc60650d111f4ec15aff7a39d5eed5d859062a9b582ef1", "04bc4167b8ee2a9f0b0a75a8ea107c442b6022acb0ffa8d06c31113dc7db146b", "1902bb70157a6ab355a24187c2dc66f282d51510e5dc28818f1f5f52ae0e96e1"), ("0e3ee78039075753555ab70e65cd79b842f68ab260c7d26357f26cb0f2952a45", "24da4300b00aecaefdc3698bb26650bfafde5fc28e110179ab2c0c9204eebd5d", "1004536d5b54914b418d4606e0ff571910a01fda231648d3f7fc7a0d1ff8ad19", "0de3e096fb0269befb986d9c8ef9074bb6d3d342e1acb08d6885489f9ef0be16"), ("183f36a25d8bf7cf31ad5b8a181f4cd68afb4fcbf547946485278051ddc8aec9", "2b50fdd0e8f6096757fd5284e678753d562a81694ba961cddc22454d864c0483", "1d12a6fd2419b1463e3d13fcad72f3710e0b641c2b64969ea91428df58af38bb", "1cfc542a1de9f368ad191e7b223c434c3b870639504ae0a823f3835d900bc97d"), ("0f7ec28d671f45853666ebef18610bef4441bff13c0e6629c0c5a933341515b6", "27c89ad2c3523a092045d4ae2d92aa0bda7f991f0b2d7307fb30d2fcdc6fd645", "0b20d8bac70b8639693ed0c6aab2bcd89c492c12bb56a7b9fb20107c0378e3f2", "0798d4e7d620edd8090592ef70d9e131c82a82f865852a689e3c0d7f61df92c6"), ("13321f60e5f486468bfd5819de857dfed1942bf0bd54b0ea941e888f3078e0e6", "04addc91a0ba1059782f7bdf56ebf9bcb5f671671c31224e5953dfd13881fa0b", "2fc4def8992e1d1eda938e11a8131ca3c3867725af26fb3717559cee9664787b", "261b8b0b7a2aa00f758914abaa94256542ce368c711e3d35138fa8b57497c5fa"), ("1a3aa0610cf6ebda824ac0fb816af295d19ddc2b83f9dc6544b31a0f0565ab9e", "08317452eadcc07ed40319aac98eb4d9063474f813cf37178a4d12d2f36e3615", "273c06379e69dd00aaa8d67d69498f1437e69cd24d8e7b0993edbfdea5e50fd2", "028018b89dd3ce0d3e02dbc68b260e3806f031c4d62f7bdef24b5857ee03815b"), ("1acef6a71a60880b7bf66b0cc7fe8721a20178251ea8456d033d1d70f5f43854", "27a86ba3e6086c91a816074a6f83b575097ca9bc9282ff1a2ce1fdacfcb8b7c0", "0469758b58a79685c7f0430a5388ab618b8c8c2697592e7b4f91a8a6f47a7496", "1ba314446e84cdf76edf9b3bdec0d7951d7d34c13be242039d0040be9f1ddbd9"), ("224484c93c28d5c2879f8c6300e453e8fb33a1d07cfac22ece59f83f82ed65f7", "2ad62381a34cf72be9d66da92a37c2e0c0b01a5d1ed50769f859182aabd293db", "16e79ba81f0e84b91f4a83df339cf28874c8ad6f85501f1d5c049df565127a18", "11be83514927b245bef7632fe8fd638a94f3baa5d9f30f6809d55fcd9652a9ce"), ("033cbce107e619122866d1f15e62967e533266dd1ee8b1603c218a0af3a278fd", "25487bd9a51571bf7b7798d71bae6e317b3bbbb89aac7f687ac8a0eac7776148", "2b3a47e09018d5cd91e61f42e7c6e37c90efc6dfe3aacaf465572a9aaea3b558", "13d5d06ec635ea31d996bf1b95b1d7a852167ddedcf6bed8842f9c231b27ebf4"), ("0bc78b415802781b7dce42743917cfea81b9b75fdd142b08e671c44288c17566", "2c1dac87d2a89cfd8ed487bfbc82d7e32a42523e4db48242d77cd1631d87a67a", "1b212c1f0680b40a718925ac0ba2f302813e77bd766823ec5703becd15f6929b", "24afb85e62f7c1598541a54c0638464d7180039c12b4434ac79560b8e08304ab"), ("01b0afbf46d8a49310e664d624fb44fed5a47d69a69b45d9b23ce75ca8fca359", "2c62dadc1f7019257db9dd6d5c2361fd5d3f20c36ed1b31f3785eb6d5e897528", "0020b9a97aa02c75947b4f05ce0be4042b173cfea1ced53d122f5e62e8dd481e", "11a7a92738ee29d8b98d57150db13d231d0030af6c50b27ac74ba972d4203080"), ("1bdaf5eb41db5cc74c6b9bdfb290d2b7f52d1f42cde0d1ec1865f6f72e3f2c0e", "1a81c6651b845520e9843ac2021c507997eee1939b7fe283a8c67acd7155454d", "0dcb1f6461021bb772e45e3e8d03dc930604d485bd96a1f1047ff69c982a1102", "1a095c5eb139f13dd86f89cf2ce6d2f2f4422abe2a226a77952c5c2f9cbc4de6"), ("13f18ff3f59a5ff9d7db33142da76b590aaa270fc16308a6fe686bbac640adf5", "0a5a3835280ee3293855f5c0e7d9e006acef74680c27ac000dd38a2194e69031", "081fa5a239b6d0277b805b7058ce6e4babd1a87599db6f00f67003219d7bb363", "0e495f2d9dfb9ff1cc720f0944fdd2a4c925632b9ec1bec7443d587a1ea52abf"), ("057c8403b896f65cdbb83e0479813e0aaadcc8a7208ab791e14879ab0b8f70dd", "15e8ba68df02df9d362a904f6ebfe7f18b0667b7f3d33a2a10092e06f6b09cd2", "0013d55c7b201ab2fbbd7de9287faa1edd58f5d2f034245c871ffe736d1c23cb", "0c9361d4d1799d3995ff68801d0b49755936bf87f7edeb19f016e9b8cad7055b"), ("30300afba45da3ebf5e0f1f238664100eae458fc4207ebba5c3c6d682d3cc2a8", "21ee32f0c5598133d3d47a2a34e9243b65ccbcf811435ff59cf6d1213bee0371", "2b1861f961da42245df3e87b824c18c670666842d6dc69d379f81422a136a17e", "1e242f51257131e5735b6e1020fa00bfa8c6e847da23363727f5f6d5df121d50"), ("2942147850585d16d21f393ef81f9100e1fca3efc751b41452e5e6a45cd326ee", "0734966b629aea231a99048f7234058d62ab42ce4d800af163d3111d074b26aa", "03de7092224ebf6e4d6e09d0ca5f893a87125f421e7c885976e78d2858979105", "13e6529fbfb428658a4880ee6b493784dfd10835f374b53eb6f8bf361c9bc624"), ("16944e03eb4c3686d53dfbc3e17dc79070d638a6c5fc641b3bed6b78844600ae", "0321913ba3ee6705cd144c63e6099c7d2783793942b980a49134b11a9cf02db9", "2bc69c3b84c3a411245d517bfbdb2023c3a6af80684fd046c78866ab9081d17d", "027be0fc63b6fd4e5ba4f7d9cce758ccff8577346ab1db223758d2c5ec63dc83"), ("093d6b2261461a6104ccda55367107a0da0699f04916391051b753490d46aea5", "1e4ab7ffc38fa7abd15f0ce4ae321b3e634bfdf58cc73e780ca50b801d41ff71", "091ee2ae1bde198438291983b6f672a1eaa270c7e6e857100896bb45bff5fbc8", "209dc23d7933ffb1acff5ae4f16b4d8f06388c544ec6ab40e6d402c3c7c59220"), ("09e0d6815fdd10f424e903952bbc119e968e554c67ec697de19e65253aaa32ea", "257740c38959b9a773898b737a709d05e1b7763feca973a583944670e7067629", "0fe63d3361f6f3fe612544c01aabb309205991904c26fc9df317b3c24d38d95e", "0a36123a01450cd54f96df219f5aa3a6e194b02eec164f584a01fcec5043c2a9"), ("12e96ecf5c15f23f4d6991b70e0fde361ca22426596dadde27c2855195dd6fcf", "04545e4e9a20e05e045305f1edeaa3ac6f863f754234c3a85bbde6739102fef6", "270db18ae86f3f238d6723b67da86a8274ed7ca15141dabfeb27dff6e9140224", "17a0a63e7a4827ec6c4245c3f8a1a56b4e32171c10149b06a699c983953a18b9"), ("05c86fc9e6f6ee5dc8cc50d11c3bfcaa08f1ea1767af6258f894b9ea2ebdc71c", "159d192fe2462089a2364213dd0e55f608f83ecc2dafd00242573a586d6a5868", "13880f6184a0be757f97a3fea294ab01e790ef017ca85766dc3d15275d133054", "05f45ad1ac93898b2dc05a6cb0922f2f0aa65f411db81340684438d8d1bff0f8"), ("11fa717bf788cc47c19bc2f2d0eae81d9ee5710df0fa0ba445e9b67e041d04b4", "1691c129bba68424bfe70eb4ac38ab833dd99c249044e1ba78fbfa52d93104e1", "1191b441b926ddccb0c0be12613ec9f2b07c953a8fd853626b238e4318f1cfa1", "22cc7d15c3c43f852555cabc0963216e0f72db4a7e8400a720199345007f8af5"), ("0404ec6fa2983eba266065c579d0e9909192f24359e701ac165cd0c32a91323a", "24d270826454796e4958ca366fbab3ff8b86e4e0003a16ab2720caa94b022f88", "2dc3635fabbf0c6dd763f0b0cd35693a00004db907501a38ca95142e20c5d7d9", "0aa62334e845060718c8566aff71de670eba99c92f144955b3bb5026ec1bbe06"), ("1a2d1f2b5175e16f8e8e33a3e7120e05451473f4ebcdf5dc134dec5586be37aa", "0c567750f73724663f2c1c3610e67c7d65bb91fd1c8281960dc3aa2ea93a70c1", "180ba3e2d1a525d3a8391c7fff2b034c534bc69eb49fa06076f947b7d50d2425", "2d38db863d136267c1e664a7701df2fe5f12fb86480f04c353c8dc71710daa19"), ("1397de95fe34ab2de61ad137074cdb4dcf2be249b6bbfdde142978275ca52bc4", "0635d0872ed0551da586c07b707607bcfcf6472c92740a919a7ce8e027f812d6", "04f4298802d0fbeb9c0e6a6283d8b31e872ab9287ec39aff94bcaf94c57a7acf", "275421e192f80a025d2daedf1e0731ad4030b3f31d6dd4fcf48de2dc7796b146"), ("2cc22818cea37fa483366d09903485b7710a33014910ef16f8dad068c5fe5217", "0e5c72ed4975166c3801fec4f037b1b1c65051b47a26b2fc1c0f7360b1bf22df", "09a0573147f4208dfc6de779bf35bc216d6d008423e15354c736e118d8e01f00", "0b7af2ec653447dedbb980d6bf2892d7e866d2a90bf93dc16fa8d4b12891e387"), ("048384ceeebf76f8bed465b7d8425cb4683dc0f91e8da1fbf3485781796c24f6", "0065d83792749da0dcb3189f044a869a8077dddc61b5f793e49fc4d4756a64c5", "08cfd5ba60a272888426f11317136e18d89029946bd76ee7a8bd21b45211c9a0", "2fa3c78f3f8a4fc84d0d1cda2c80d92886848a6cc876cab5c55bd8740d0d7c24"), ("04e737bf68e9f9639adae12c60d1a7f6e68306cfbc6d4ee8e9b35c08bfe81f9f", "1b57a0e9f828b2c5d376ee3bceb4a53842e9fa891f6b28d879b3ef727cf6565a", "1121218e7a16cfbe9756da116d47d5da11672bda405d2c529729f9e8a9421ada", "06c547416b135be08048c4b2c94279fbd86d96d93b9f43554caff02d24409f26"), ("0778a0681f67c68212bedf21eb2a0e4bf0b294d0c2a6ff2f364e55dc8cb1141c", "22f091d4f28412391105d48c299ae55a34ea63d17a38c046e977e7b930b87740", "0c7065be8c5f866eed385af636cffb0cc4ef09c80332b5b4a83be412cc45c0dd", "2490f33606a0f3d36ba12116737d737d3f4f1a1a2681170f86c469a26a390fd8"), ("1db16dce0b920485a482459ceeffe14ccba0d468d2435ee54e0f12a23fc0177e", "040adc8b5a8ac9b6d489daa538c2022105d30010f57961385ca96639feccaa1f", "20ec9a24d1e0abb51ce79c59e559fa89f4183fdb876b828065ea064afdecf473", "19bfd5b713266aa3e886ed3d088aa32d07ed08dc80734f954456693d22644ca5"), ("269b8e1396c56d9cc8b06cd13af6531c872b78fc3dcf690d11686be5b4222fdc", "27d73c9eb7eb3fd3c14562cd2de8ee8eec9f163daf482258bc2076f08ab575d5", "1f1266c4d62231cee9aaf6990960e0c607d439847c54d3ca6d775d51a573ca82", "1cad9bcb8b49e0f575f4d0284ac2036d7069490d75a6c1b463b2efcd4f79007a"), ("0335d5abcc61a9a0bb335c0b05242a343353b4991b7cd658af863ad79de6c9c4", "13cc9ab9a8103e94837cf69616a78144456fee2e9a6794c0cdbbcba16dd0aa02", "0eedc053ccd4672e529787e28f4de474dd7a53825a07f1e2cd6266199a00229e", "23d80c1197af30f94ea73e0455ecafe778b1b05d04993ec9a1c2b9c2cca51738"), ("123204d3fb275ff55c92c58da4071b538ef548235189c896b5779e040f151c1d", "0d2d110fc15913e4e7e5dc606d6e0d3ca29414622a8302f727bd6532aa93f2e4", "12e57ed4ceecfe1c623c54d00f7512084d4cd22dcd3803f7441562267eb84c72", "1db02e859f30ff483ed522e9ad2d44f3838cd6efe12f3ca49af2ca52ac7e24da"), ("014e59914182d91c42affab460ab98fcee41569a1362b8755e7cada8c149947e", "13db3101695d3f7102628d3cab0fad5050c5ca82569027fe3fa67c1d2c8b1449", "2a71490d5cbe41ccae30c1f253df7838409eef8fdca53803b259adb4fd9946ff", "23faf15588803dd2ba87c0631aa0595c0ff564e9121642eef2d4056094422386"), ("214d76e599c8f5c395b215c7b74b60429d404964ee5d8fb39216cf7d1306f6d4", "0194ba0f760047bd6d3e1fea49322effbde3806c681ca954a82f597cc4545621", "14f0f782f48c13c2b0de76a9102e3142e9fe8a850701e4f9ff773ac22d468a11", "263eb6f1634c7e2c1b19e784c6807254b7a4241f2dd665708ae6fd8f16396e8f"), ("1e105a823b2271b9a6e9161c606dcf0f3101da0101ac33649cd993d60ccd9376", "0743c582dc6d935735b05f1cb0a31663b12c1da5889876d426f77e944273c105", "0d526e347da67b06b001674e9a416953397297cb8144cb893c08b132169f9146", "021c1427f7786eff91a5c02a2ed223cc6480d5414e91efd4d88c5a9a124e53e9"), ("2bc59395a5217fbfcf12c5c221c3f7b2105452b71a01cea71e03e1a0b4cb7393", "236e26b854113d70dd4d3aecb4793c52269cdce8340a0f93a878f1bf7c4fd973", "0b3dd6db3d77494f637e7e2a17546b8f2feae4e53ea8a7e64bebd4b485c08daa", "0ac4ab568db0de01fe4b6b51f55b9ad42d3abd480bb353bf190ee75579a7a8e7"), ("1581e21c40f7ef45cb30290e763634b747d28cbb38b0b8275a357d5b95562af6", "1a683df51a6e34210cbbf91d68e6e8f31354f59b9b3e48428ee8f06fd8d91a87", "2c299a2ec15a93910eaa0a1cb50171ef14721ad46a6a9eaee7ad1c12a316a66e", "1181b6f0d8f8efeb19a90d54acbaf316d0192a609ef9cedbbb692a5baa525202"), ("0a0a2f56e8c85143013609856cc250b24d9c9f351e380706f48a4c2d1535431f", "112675f27e489139c80e4c25f41302684e93fb6dab1d65586141051515dcd615", "2d005743295212f6bd1c9a5baf773246f035bc37ec5a020516649263f04377ec", "21e0a0b0a4fa3e73138066fe17c54d28210aee17768537c8adf3d20fd6ce7153"), ("0c3f0a16f3419e4155c45bb6f51e4f6193643a7a3994cd840b272177aebc39bf", "0046a0e5c5b60891f260051675216d147b608a066aefed02d1ab8e32ea604a65", "04689cb300ea6bab90e83768c28d91c9142349c65394e74f8340ff7eac5a6e59", "0ea8c8ae0b9996040cb8fe8c2578efd0b27305708d82f69929158429ec5d0659"), ("27ed5113be5b2204aa3914362c4a737f9384d8c6b26188268f1669525c48497d", "17e27760f6c757a9350ea6b2ccef818e6da585ca6534c1d063bc7a76370e26ae", "1f25ab05e513d02ff6c658513ab3a96ea06978f847b67d45cd2b94a16b95c21a", "166f1f3fa2f9a62aaf7f9b6b300da4cdf5e5be0902cc8c6852ff12040ce68300"), ("29832071e3abd449f3e430505f80afff8aa33b7e1fa69b233b96af8c10996948", "0a0f98b68d9baf3c461ba85550fd27490e1b63b7e8b5ad86f4cdb2a58f50d5d0", "1603356ad335ae2ed8879ede87079b92273ebba8921234750022ab7f167c3a55", "00e68b1b12954098af170a621ca8165abd19eb0403cfc9415589df1972eefac5"), ("2954ce35ef27a175e99e9d455fec22b981e23426349513fae24c18cc47ae6ec3", "1d4920f86e93d776aa6fae5ca5ec9295a31bae77d2a46d0a0f05b8a0503fb953", "212ef3f3ac813f09912dda9a9b50031a6f5d57bd0ecfd08a348636ed87b60634", "2d24ad8876c9e02d9c6f0c6d05eee1eac42f0aec56f94eed16dd66cb347a1665"), ("0f0bb261c5abd862903c7713ce15691afc9739b903e4660ffec34b887a741719", "073ec708040673baea668da2892181f3912431b5588cfc5cef49ede2405e9ca3", "12364c19ee734ec3201d8bbc58a32412187aff468834e9546c6830299be28608", "143df3d7de4e2072d6109f05ca46bf1eab8333891d8258817873810041205bba"), ("1da5787fd994f403e834102e378eb9016e6f10b44d1b739262fd5d9acdfcef7e", "05b2b793f881fe14e529ad260d55bb76c5c1066fc0028db0c8ea26e3078db9ae", "2f12ee7118e8d0619f9eb8d4cc3d29f29c99ef28e4c7f4a111c24c2c23b5aaec", "058e599fcca628d8ad9907cdae7cc575a3b5c9051c5e73f3606a9bcf8e3f3d04"), ("284eb070ad5754e82f64063c451763355e3324f355aeae21aa5d4314ca3c6662", "1ebf5b78112587956bd6fa4796cd9808047512fe69e76a73beb2885b98366dd6", "142b2a403d2ae4865b37ed50a7509be2e18e8d51a2394e96f48eec75fff43f23", "004fbefe3e66d1f67e00f4bf39c6e415fbccc8954b0922df0737a2e6147e909e"), ("08a2d88742218edee78ab54b093f26c7ee5c42509b1f23a9d69f428805bb6cd2", "0559523a247ca4cb50f9eab41fd3e6668c476d79cb5e92b4de58eb2f957d0ad6", "2d59c8a669e4c93c048f3449dc2e571baecc7fbc065ec9b31b0cacddbdb0e805", "1bdc7dc75c36bdc11fd0fca4bafa0c29a367a42be04de629624f628cfaeb801f"), ("0d0d4908e1280b9655d0fb0144544bb81b9a4ed38cc7c8b8217e11efed6d503b", "21a7e7f11170338672e7aac53fc9276a4144ddb5e9a688c27a2dd98a4cf0c95c", "123c0078659b59436d7305742b3b02867c4ce177468c90b4eb7bb2361ce59500", "1acbe45889a4810dcfe3279db9b3490dfa6ff4dc5741654259eea64f270bc189"), ("200ba315d898f7a8c98c1f828146e58296c39edfdb4d01ccb365334fc3372bbc", "29eeae07b57b44f84e5515f9801aaa2e5ba162a9b96ed86602b56f1d52f90519", "18cba8a365d54fc37caf69354e78a7579a342009084250ea457d2429b0be9457", "2f0101de0dab0355707ee86b8893f53dc380b7172acd6a1d20fd739ff9d9998c"), ("14f4d449c4e22eaafee01bcb4424cc7aaed616e48dabbeb2979fbf81592c9853", "1b5de506361c4a658ba2619cb3887d032d072211af96c65876ff94c853bc5190", "2ab7c42b60fc5242ad2f4a17183eca063afdc46d0b5264f5c05e2821f3affa1f", "23c159f2f697d2f87f244f51ef4f1fd5b4bc273e9cff81d97ce6f011f186afe3"), ("1fe12641b3e97831ecf2e74072a2b6f48f9bfaaeb3ac14afa4740e3a911477d2", "1c2b377436470a5c5e796e0be40ae294455df098c2589633a3ee318de06fd020", "214af8b4164b141ec2185a5be14288f999a2baddfba0d11fa5a7908a2bcdf119", "09e3ccc79ec42f282d732c64bc1009873114365ec64954d97c898bb2a93ed7b0"), ("2f76a8e3aadb94e6391b3025541aacfa2b0666e0c49eae64cbd85bdb655e1144", "1fdc1fe5a22127366e8442a90fed0dfe8c61ec9ab91a4fe91d41e93c8678fa0a", "2f2dd48ed1bd2ab1b9f36e40fd005c3ed25691c273b08e176939a0633dace80f", "16118d435382bd341370c26b170f47778c841cfc1ab5cf62cc4f691f693592c8"), ("151624c65e567fd364d02eccea7f345fbf54f2e637e0fba88760a62f0ea19cbb", "302606ce8f012a80aadd27106ffc6612938938c134323ce8a0a47f7758b09045", "2aeff094ac73a727f1272945e8b5386e84c48abd603e47ee9f428abe3473db3a", "1e188305dc6dd1f351acf17f0280cc68247a895dbe0b309b8f1b6cabecaae7fb"), ("2e3c96da2e5c5ecd312f22550d4ba60df4b78a8d794856e66d0c966f33c72101", "00be5b383d3b2bcf9e7bab59c4a90b7d566fd744ffc62a6ee69d3d743f6de2bf", "147b12afd192493ec574f0916ccbd9cdd86d4da75637a80a4fd09cd320197376", "0612c0cf3baf63a1a69236fbee6ce3089d95b57b60a11a3533985b362a5f3769"), ("038d88d8b99f7407e77fc3e552ba8ceebfb34376ab9c97510438124c77cddd1b", "304c28a9cae3b426e1e46f362300a7a34e5c1c061b0a04596f331e24966dbc51", "01724f72e7c600f875b0b68a927acf7e4c6ed3a35e4268707087c316b4f5b04a", "2d2236a739c5624fcaf525ef14c0310fdf217efb794fb7f31d36089dd3196935"), ("1021c0fb2a99d927b00db92300fba413f4c09d20069137b2bbacbf1c7ab254a1", "1200008687874b43d3080b247ce634304c33078315a300d83fdc5c9e8cfebaf2", "0d013228f93b6baf0cb64e08b455d2b0983792e74ee631b4a3aeb425a5ac45d3", "09253785d46598bfbe3f7c3581b30cc3b7430ee0ac76fd55b4f9c5fd388b92b6"), ("11d6e782fee281e85ec02f97a29509075d526e99828c949ef5ccea33f0e0384e", "0ba1b30a9c9f4026c1f55a13a69e3e279a0dbcac3186da4fb19c927cc08a5f8a", "29be0e10a8e07cfc997ffe0f89d7e8e1a05eaff365d8ecfc600f72f09a435632", "05e238684e7f2f7767e8aa4d5c7880fa8b615a08609e8fa57d5b62434e95186a"), ("05f0a6df22c009a9878fe5d09f124e3636495e80e24269d8a3f1ddf44b4ed46b", "2fdd152c2554067b4d1a49de7b496e3d989aab9e4b942217838ec1577d88dbd0", "0c68171778f1291d41de1f525334a4b5cde27640c316152e4f59be80dccfbbf7", "2947d3fe653f909782443d504c500f8f14da0c489af978ca0377eb5a45eade5a"), ("1d95d9bfdc71308751d12ddd2fe7709a7d335fbdcf784709d2c621c1f7620f80", "025a6f876c68e7c1d2211897c5ea19cc86153fb4743ca75ca7238b3e04f05fc0", "1d1fe0c67deaeeb7af160299d235a4e6d5545d0015b843a320e22017c85555b0", "2edc09f950487117114ab1af95129c16e79733d517e257525dcbced8f3110b97"), ("1d800411b954ed9fbd60a33100fea96a938da9c0aaf3b8742b675eac07468aa6", "09a65342b282852951d86c2786a7f97ba6ec025d388430eea67d89d6434af995", "157462c21b2d1e142fc1ce96d01d56bd335868761c233a955a154ece4f5fe582", "096b83f7c3f38cf9833135354221203b83b570b420926aa6c3adfa5f5f028997"), ("217ef4ba4fba162c636613f664ff285cc281e09f331c940ae5b7e7419c650661", "27502fae9f3941e1afc53fa644cd825bf74408ed5b301b95a247dd75a22416a2", "094fdf9b81cacfdfcc946bc8276cf447d26b6c1da8bf615df1f8185e010983c0", "2ad2093ed97996af014d5c36a89b1a831ace9941767fdb0afa0491f0711051b6"), ("0cbe76fb3c60748f4e57892401d306d883863949e7be65d3f021bd72facea310", "0f1414e6ec8a3b9f554bd52122a613ab193d5da7594fdd9b9c5183c91c92b958", "1d8dbd62b70331593141b1f3470f51e31c7af6ae52481cafdeeb318f28d05148", "0ad6ae7749fbde782557155f00b9ce8ded79458ca424084611ed5fe4e13296f6"), ("1494184e83b7f61b68eb13e347e7fdf774386158acdf4b913e1963d2c11269f6", "26e15662abcc014878fe7e208aef27850fe483d0ddf1fc2400140a0c699d111e", "0b1834e6b211caa67d4eb875f9a636face793caff8a91e1f4845e79f286aabaf", "258b67e1175f2613b274c5a407d0c0c5eb29b75fcd5a62a30c28f821d926f17f"), ("129b89ae1314c630806dd6a09ca92046591914c3a85be73e9342b0f962f2f258", "1fefbd905a5f95aa453502cb5a170747e39d52f60deadaadfe92b9051b0ad5ec", "2f58ef82c316a2b523923b2a54a52a6de5e4482b9e7a5ce7d38765fcbc9fb5b5", "1cbcbb9da0396a1c1adbfcbbb8efc09216ef96869d0c102709704ce9bedca4d8"), ("0d20dba8ac1d46695dc2180d5d26b43d1c5b2b07335963b8b958168bd79733f0", "21b0e5eca5ff6cd4a64b74ba918e0d4c7d087b49fdb8d9fa30021f52e86a07d9", "03c330af09778ec1d92daae1647df9368857bdffd2fa7a88889609d9f46c0547", "068ccf8da429d519574d7acb20b8d190d4b0a63b14b067c1671f12e099912c1f"), ("0f21d1f46fdf2cab4d19e7d60cfe7bbb1e40f32848ebf6b2aac9be6c61d1e3b9", "1389804daec23cc6055311d4a935c40d4a95876024a696e369b42b5f4ebf75ba", "12ea05aef756dcf46625993ee247519025816d76276d4f69cbcc753edc836f11", "2a57896beeaf908895e3800f6a3670ade8d844b43080f81dd9f450d1f7f3f9fd"), ("156ebdfe898e91998d9b882081a07d6919784d33e55859223f8a200e071c3823", "04fc4a552fab29ee0e6624adf0892ffa46e7b1d45385efa0e73db40c4cb196d0", "07bb8543099af7074cb33b253edb4b6e38f13d01d84651347a4559cf53318ae4", "031ac2f2b8763d1576f86466d274d4e09b23e20a0e9a888614f68095758fc492"), ("141b9738faeccfcab03ec87a377a72830004b82e4a3f0a5c76b7cc1d3282a4ab", "0091588548202096bdbddfb00cd451edeb4334109a3c3e9cce0930db3b186430", "0a58739a3e53f35eac7616ede6b564e37dce9e253ec25395cb6370c071c14290", "2fedf0206c33312e502bbebe07f595d2a4af3d4df2b04c4ad58fec1922b751f4"), ("1aed93e81fcfc28840c8d1e0c6add861b1237c6068feeb0145b7e0e1089f5e3d", "17e81b33b8cdea4d59369a428ba5db4add28c97721e6559814c99e0f0f6e987c", "03ba24050b5b932969a8b20694fdfa75f84fe427690e42653c5d46d71a4281fc", "1efc4772759e6f228e4468b89b8372c7f225cc54a83f2716f8c130b6e370fd8c"), ("2a8d9619f7fb0f8ac67da983cd52f24ba4eba398e2cfc8cdd0027e6c9c45f798", "165e960f36c9e35fa2f4f02ceec3279145d9fc69ddaa131f4885e1ec66298d8e", "12c39897cd011982692e0c69e81c00696be464be7f2a100a26b4b6c5f6d79f26", "0f22e60231bca682320944196ee4ab3a120d2e6f2dff5ace1badcc23b3174ae3"), ("13d51efd1e7b40c62b1184679151ff4bcd4e15ab913c90df07da520b3627077f", "137fb61151f3da62eaea4c253c7969aee4b34898997e9f5106348763a9c39f26", "18d14df3046bc44eaac1eb6d736ec8d19ae5b0aaec475ba29410766892276996", "28ec8c6f954bc6dfbbb918eff899dae5133846d7a3c2d0cfe26affa68191063a"), ("06ae30a2ae49ce86860ee0b7b4dc6b5bd396718f9bae7a569cd4c597834537d9", "2f870ebb59ede9e45c90b23a61a99098a3b78292fbadd0d1a6c9efe44a8504d6", "2966e3a3c18b2411579e47e90f61858d43e87c336e2e65c2814dd3856a0d189e", "2d332ef4b78f0643eab61be30a8e44ee6c99527b1b9205de3401bac9a16d76f9"), ("25008f4b30d61e934ea3f9fe683cacfcd21ad7620288cf4f5247ad01df3de6e2", "23711dfed6bc30dd620a088a4aa7f633053a818de5d29f0e0e99f7012502fb6c", "04ed8ee9fa8f40c56a9500051177367b233fc6ca0d611b1a8b023b31572a4406", "2c30be47d9f06267a1ee1b6f8afb9ff43c97dd09f8115b01b24708805812d1b4"), ("0b0ea86e644b9c576cd0669b81d90e6acdf52d768332cba246df434fcecb487f", "2562f2a524bd1595d9b6a0697eeb93ef39dd4abb31538c83ec408d0e7d833f5f", "23874db495085e758eabb38ed4584ba65cad482b1d69ddcf5ba980a42491a9c1", "02874606320adff0d427d09058fe3ea5807739d62df50ea55c905aaf9cdb7823"), ("2c90df09d87579856049578b08329fe66c5e7168125e0a089db75520cc6a2b36", "21e184d34356c3a066f5bca9001f4ca78d9f33db04aff5c6710f27ca767eb420", "2871377198afaa121eb587d0fb091ca5dfca1ef8a790b696b484d681f1c0fa7f", "2d008629fd1ff290f84dad071ac3a79bb921e7258e7785998c1b41d82b503ed3"), ("03543cb3794d6a5c46cf62188beb3447e5459707bc126d1f6f0fa98bde9186fe", "1501eab4596449b5cee9b4225c32ba6536486d19f98a41a581bbd32eeb834fae", "2556d5bea8204f644075b26b8fa411c0c85adbcdc0719d97111a27066deff1be", "023fc180b4b21b8b99beab2bf714d194242029ad60f50f256f9c4dee8e864df3"), ("05a946c6af76eb0d5780017497ade521997783bb05a9a1af90a4c42587c7c607", "04fe677a5f68a1f6e99d49065d256bd3b8e5e5f26f933c85358fdef9e5ad373b", "1960eb3a7fd68732cb158d74e5a4645fe4f25723b34a56564cd24b47d04c4d2f", "1e080d85ea9a674f1ddea46df322a0af3a9d0e9f36a663c2261e782e4ab6c5df"), ("2bed98e2652dc771d3f8dc84f76910648f71464a6b2fbb936f07e15faba77bc2", "177142bab1293eafb184fd996f92173e5a1a1406f54bfb93007d9a5e048a19c1", "1168ebeb22f9e6e05cc978919427c70ef984232b6216a303f8871923d346f606", "079f31e8bec02f38e4e301e42cc99430dcf10f7773445eb60ed275a9256d8552"), ("2dfa2e46bc39e40094a04f9c3f2c949e0a2f5759ca219b9e9cb16300fff568a4", "0cedc6648a1c0d32a7dd3f233f053d3e989a2a2c72b0acb97bd8af255f94555d", "27283bad9bdcb88f9f7b13aa52e3a27c8be06e101fc6bf7221ea049b495ea4dd", "2d36ca05c38abf4f63da0b2d8bfe8b938520380ac1c660def8919d2cbc405b36"), ("276ef85ae8e4009f3777351b520a3674fea728a00b52688f6c8922fd2a8b1065", "159db6962a6a34adbbc244c0d2b476038d56dc9dbfdd20fa9162442f836abd6b", "2681c05ceed79432a2365f9c3e9959a8ecc3999552ee74624b6b08a4813ff9b9", "1b4c6492ac5507b080b6e8202f5ce32be7d04882b6802cc74d1d6fb4ab210737"), ("1d7db497943d4b7341a0bcbb027c1ce89a1e195d5b47a203263f61a27e0349f4", "1ad93b372bb38d6f7d114836fb5278e59d62523289b4d579f7e3c67d2fba3b28", "2fdf59f445f91f64e7c5a820c17cfcb2d782659a7ca9525d93b3f3cb73aec017", "001bb79ab32d2fed6db1c051a7b15f99dcb930a8c872909f6f576d9f55ab6cb5"), ("0dfd82d24eaba0d0240b9716e1929e38c4ea929a79a2fe6ae86fe3978d37d111", "029a532a570dbc732e4b529ba891a0f1ae8cc80e8ae8225e97fbc7f3a8db0f90", "09e7d8cb00e62aad7ac23f46eea4d97998d98cac72848387654784f707a2c06d", "1b27a705d4f07dc3b856dafbc48e55142a4905a3ce3275cfce6052dbb662768b"), ("288aa969591031363cda2cd019c6522d3a763a07e26063034b9229c6d841970d", "2193c12b94ec4710edd9d44a06cbc2e8a46e5964056e170f81be8d2c3a32e701", "102255f89c054ab9e0e6287db001b70167aadbe01b0fe32b765c3983392b7f31", "265ac8706e820707375653e3d894e320811d2c868d1ee4fc79a34641cf15181b"), ("27e781f5128944b1bced26978e7310bd7fb00e085225cdead420223cd10be6f2", "11a0108011006cbe14701fd44baa3660780dd884380dbe977c1a9c142cdc8b49", "15de292ab74255259b0af674e7d0d8f2753af1f6cdcc49d9621205fe8b083145", "28a923e564a312d1e36e05d32ae191f2268f6c3e40ae172be2a2490c776ced4e"), ("17ed23fb8aa678c6843ea651219275d057b4122c356b6c5ef33bcc1558e09eaa", "00160f1c9349b096e5c011805e47b639aa76bd9579cda47b629a4eec83429e17", "2b7a1dade674f706118eeefdfb3176ee8daa65f7eb84f3b52557457ef28b8271", "01e8796b66d7d003e69294bb4045aea646d730451d242888f604da7ed3206486"), ("1768a21063f96683e5b81659693d06020ee709ff8c66a9371fcd2d3285867370", "028ef089279a13fb9b4e1c62bbc827162e70fb617364a089bd552379c501e446", "0d3a7b3ddc997bf1cda936522980446c60279972967f2421bc498a6a7ae283e1", "0d343352780df657580d0977da049b72836f657fe68dc1f40ddb66ca7daca37e"), ("06e721ff977672219de71b36ac3656d3b7a22ceda1530a6e497e4e7d9f6eea18", "280a09f76bab849806b24ae22625b88cd5b1c3c77d25ce0cf38a3077288c9733", "14ec89a73524de42e4e9f808d545a4312505391e52865756755a5f3ea9073ba2", "1d8d6da05413583e33ecbf76efb87a774ee5181b837a2965949f69d6e6ed32a8"), ("2a7912dd2e6ab186d1b1280036f7952e9401ca44977ce6f1805736dc943b47b8", "0f2d262f2a9e7d2cc895ba9e659cb61f7eeb09dae1b1443ff51dd086f8119290", "2bd9c4de5d22590b254c6f05352737563787c165065eba89826a5f656cc3768f", "14f7c2c4dc1d98bf94993a4b85180108882ce03a04c46175c87382b2f33e35aa"), ("03bb56374c42b03166a51e4f9ce85b286c1f3491672b203fda62772be48651f9", "1d00f5bc480a8c9f3687aba68f518ead488fcc39bb7779f1e691faf94e83807c", "05016df68e3ed93f86f8ec661907cc32a1eee2b287ca3bff8b5ce4051709d42d", "2466bc0eb21a6dadc5ab99fead8018f62739ae0364404091fbdb3f512be9d1dd"), ("009e2bff4edab4d9ce618f38a803fa6028f8059446a67fb9f7a791e22dc8f14f", "1e5dd7de8b1d84eca36fa83baefab1785bc27e2fe4a16d71f229021dcb570bb9", "0f5ed401074aa3d8595893d2d07a4c407a1cd8dbb92f8e0018ec5e7cea036801", "07986381613b9743b36f53c514accd232ed8d8eed0d20d7e4c132cd918f97ad8"), ("14f5dff2c891f933a42940f62a7dbcd61753acb039b205a93473614f8f6df71a", "260d883b37b0c18f3a971bb64d069e2ab27ab1230cb0d3c5ffc0dc4af89b0a0b", "1e1be90372d24c728e9391beaf683a7c9443908b6c3e4bceb3d89db91b0c5ab5", "15d404c82e5c82a733f6b77caf47e29d5c2bdf41365a348b065400c70ce6b45c"), ("0b4c314de237f898da8d50fb265ae96300ea2ca6e7d0538d4366993129bc3638", "1baffa8befe7d9925de8566d7b17efdb4e4cce8dfedfdbe48e79548c7cc43e68", "145d819e2fd471e779f599b65aca2cb0df43b5bd2c40cbadad7551456f8c28fd", "0d07858e4bd166c42fa57dba0b2354f62bf420e868d905f32507c092d31c25e2"), ("11e430f20cc9f2e4d1d4f726ba2f4f7db121db51f961cc5210f6249e55259def", "2e6dd3c542e24349b7255b0e44a1c571a6ec603bc212ca3fb53f061dd96cb4b9", "171c07c5fde65907f86a6ac38755b431ec12f34a16d24e8b47f74e2f5041a5d3", "17805cd15f4edc670c82f4c36aec0701bc1c77c2f2ab717cf94b677b4317da4f"), ("2ecafefcc203122ff46bd6de527a30f0f21a1e991411f17d37b7c61b59bc17d7", "2c429e18ff20bbcac1269e0bfe3dff2bd04e2991feaf1d853f6434167eebdb9c", "2f95b56e3b3c6423443bfd129d836a4e8f57a27ec0dbc2274fc59d89303db220", "09593e71447d81343b198a85636ece43f51c84d177659d1821f591957164590c"), ("09c0afa134c14a774882ff0e08a409409afd948b9df35cbbd043ab165c44f189", "0dd88966a7d8b0aceaced65360b53947a1d563f7dba2c89b118f94dbe4041803", "035cd5677692fcd9cece6990a3c587fe448a014daa88e3a67e41eaeae0adf960", "0c6a3767788d31e0ff0df507b0cdb5a37987c096d61a3c1aed85a2d1cc24a932"), ("09f2c2f06c56e8841a53be24201f7f561593c5f65370f185493f66752b1449ff", "1759941efbba26a54fa5441f71d81b4612ae2d040e8042e540612435978f2b5a", "287b52ecd02e59f2cd57f2c1adc1835741c2c7f771e25b0f786309ab9adb5cfe", "0db193d4d76ca5b8fa32ae7ad0ec70732d46d1680d7b0c5a3dfacda6c0b0451c"), ("2b5e1589fee0602e19edfb1796c26637f90ff59ffed8be63be680ddec015599a", "0d0e6b24b44f10346778c66338dc20cecede42ac8e0e59d90af8ad88c9cd5f68", "03817a6f8da25263fe54d11aa9b702ba291864ef62bf9c57ebff7f43ac7f6cad", "06fc49a88ec04986cd0c0a5ecd1a9aca1e0d5035ef1ff0a71ad1abb8a77987de"), ("1231150aeee3b790fdfd8c04a17cf8d87c1a80ca63ccfe30a2e248a472bf03e6", "030e8f71a47187733963151c0071a9ac68063b668c0578153a014e9eda5c578f", "257cdc29b6f955dcc206644058635786309807334de761afafabc903d507c388", "1ad1b020738a0a3861eaac12f10876e2e569e5a6e0b880d2437995e77a5ad6d0"), ("2ad087f99170c8a90edf0d46c6ebdfcb8dc4032add9cae72c25500f8c915adf1", "1f37eec549bf0ec7c91619ba0d3984626fc9daabfa92426bd878dc8e7a952e9b", "0be2e54f4ea29b24d0fe9c14fe5a8113dbe254ba0f589aba62f77cdf6d7a271f", "0cea3d20f23d0f7ae4891e1b6469460ade556adf0751f7afde9797298e31a26c"), ("07f5341235de2aa9583633341bd67639346fb94e2193426deda3dd778d2ae1bc", "1708bedebe786cfc4823849252a555f6a6e8c85088acefd61ad284c0a7e1bab7", "16c202e070786e48fb00b930cf3d2b0d92385730656171a24d7ce76f30111c66", "15c8419a86ff680b10d11f0b4551536050fab4c7f0bc3a9264300e150a89c4cc"), ("2e12c36629fa555269e96b3e2a7500513f01dc2124271e3b22b8a2444d627f65", "1319180e6a8fee487cd55141e0cb8cea58000141e0d937c0cc0b1abf8fcdb039", "22d94e080142ea7f42504b46aa4ee60d95019912380a0b5cd06909e96669fc87", "036a91081a052fea398f52e108d15e2f9a2cd6754308cd8a828d2053bd377e92"), ("2de2b27c170b18596393d9f4b6d060937426b00a7d7f5d21a0aa961006915df3", "0e1202e5e081fd2eb262ed12d659f6480a3b0180eef334added34c734534e0f9", "0361db0cc692879da258061c75463f28b4fa171099919327fd57fc85fe1fdc38", "30524d4d554af4881b12f6f5d5c79f6e4184eb77a213f7416fb4d99fc100550d"), ("1330254b45662bccff3d9495e3c9f578060b63562471f20cfaba2a2848f8b856", "0cb2caaa3c5f41d20619610ec5aa25676dadba2363bf598c0bc45b82f35233d5", "17994fb64c7c2e8f73525bf220e3b4c95457058af9225151740b1a808256ca74", "16174465ffcf5a979f59a034ee19e59da1c0fd04309ee56f7a6d7b1ebce66319"), ("1e120247d06fdb6de30fd38f6eee799301710b6cf1a3ae67e2f04a83712f740b", "0d8b2ab7a3a7a19cf2206b6efddf48419b4bae5884ae661466131361e785817a", "03bea851c900853a4c0118624f8138b66dc24966032edb5d4ca77bfe020a4576", "26d4411fdc19cd3e8741d9fbc08e1d31a31488dccfea59821e8d2393e17080df"), ("23546551f8371277ea12319a2b2680f1931cbe1954c13f9cf320bd734af7ab75", "1106b29e9e41cd586a63f24c45269490ee06b33df487e9c6552a6463eb736352", "13494e16b7b050c8f4d47c46fb2b4903a195bbaa9a4d2340c79dfe061a339905", "25079eded59ad2a7e3e6b19e594db88966af8ec6305ff29bef0a7980e4f459a0"), ("08cd6cf3ac99954ed7dc26acb083c332f92ea3efe9b346cbd79319f19def56aa", "0279f9e1733e21496c767b59140cdeaf0d05500c60fa8db9e05e535096a6f697", "1aaade05af60de9e93393ae7d02b2a7a12e26774b9a051fb6b9bfaab92ce471b", "214c6f40f27865f74613ae7f3b5c9202ca3a8be0ac9a7fef1a09dec3fb582b50"), ("127f688d6ad89227111cf98e6a48c2226826845a74dc1bcd86f8bf43f49d5093", "1c061d100ef7cd3ab134a27bd67770150b2aa9a7c17280601149f1ce28a8ecef", "17a5ab2659f325a4297c57702a1c847dd7987a0b7f59a728e054573270c667f7", "22e648c91ccc43caaad055105c700e0c36954eb1047bfba71dc09ee4c36aa6ac"), ("20e4557b4cb960f5cdd3c552ce50538f26790b79c95b8e8a3823358c70ff674e", "1ae9a31bee7693033872bb64e1268d052b2b5477f90016ca313f39601e952972", "06b55f342f09ed95f0c00db9ea839767efbb410c600d86433b8b76565da68801", "19b3d60d6064d7e45c009186568b4b24522d5afe555a8f9e6288b6a48189ff4f"), ("05cd6a35198d82d8db90f8810bf29f0f2454f972cd4be0c370d8fb3d62f8616f", "2e32a7139c819176d1f1de7812e4b79a473d65791b81a24483cf8eabce79761a", "0e26e8a82233a4320cabc7248040f675ec10da23f5e65c0a4aa59fb7529fd3e0", "199e400ac6f4c190d59241bea44287202d7f8297a797303e65048906836b9c27"), ("0fdadb98d8b3a0609f918d047718404aaf26b1effb4bf03dd76ffdc2076c9314", "112f705c4b2d34848cbcb2409b308b80dbe9a2f3e95405d56fb137c67afe945d", "06e271991bcd459424817d05f5944d53a69bddc50ee9a78e9114a026ca8ea5d5", "1f3d4c4a569547331bdd995f1442111a1352b871587286cfa5cbc39e6163b331"), ("13def430a91c94c138262a53264c2e3818b9ddb5f80a68968a6f97db0b58cfc5", "29c7f653e5a15047be92d51a16faed2c1ba714fb0b921747310bb3f7983be6b0", "21573b4e3738e7d10b6174ac64e640c22fd391a2f185ec7f4a88db67d67bbc64", "081587fc3f13fdf33f3803f5361a4d69f33a76f7aaa16280458b13e27bde2afb"), ("27b468f42bb01c7bdc09a33ac4dcfecefed7233f07d5ff1c31b7a0a478520a0e", "03c4b4f001ada25fc3025fa736ddb282d747b9a077ea58f73cdfc9efa87192b1", "2d319ee616280d94b45bd78dbed979143d0ce4f90c96e8fa670ec86af48e2afc", "1a2ab0cf71fa69e14af267e6356f12aca43ef264fe378b1091a1e049998330d4"), ("04886bd26fbeb5a3be7e4d1c406f11da070cc7c5641ea75a230a39182a4ecb0c", "09dac5c9661784ce305a8991a547bbe64f6e14607372b5ab03abd0e52144efc3", "1640bba11be7a01978108357e875e46589f522bf9ab9b85a0d295450a276b1eb", "159fa4359ce06654e3a11f299ed98faa0f59dc6fcc2b8cf2aad29ada9710f00e"), ("278a0e9b8c528ee99a4afc510dd9c19cff28cc6951a945882f7de891643d3ddf", "0eb58f38ca793c89f73ac52b4208d5e20b21bb2515ea880dd734005c0c4d8b44", "1471192963a473a66248ab465b0c3615351ccd7d339681a58c07a236c34002af", "146c7d8178bff5f7c65b83374d06e3cbbb8097b95765247da0a11a53313f3c20"), ("295bf9b92d8004880edfa6298775e037993fcf3e22e06495bf9e5126b1161e7a", "08e8865139887ad5c61c5cb42f58642d71f764897a7101a0b9985f44c986caf4", "0d92ce29c2f0a5e8470d9f7947e60b09ebf614840a74b9e6425d260d65257b4a", "2f310faccbff7d615ec448299cb4a0d1c9f32ae7ed44439af439ea03732cc3f5"), ("21601c8b82f5a9b878780447e920ea2858d1b78417f7f205b3e2e9f61dd75b50", "30139bd46e43235ef2a82e8956cad5cf6c732245020e7061bdbc16756116c62f", "163fca46c77455941a133df1195431b2f2588999c885a439d1767bce0a549038", "2851c1d03e06e4777c69076a6ce621e38e898cdbe038b2739fe2265002431ca4"), ("2bb84aeed4f26010d55a82c8c7dade43ac31993d3adad1ea926511c8a65926fe", "085a694474494f9cf20e463f1e45e5533d7ae1f2b701696838aadd316d382972", "1620d5ce144954d17914b047756e9328ed9883f9535816fe83741266ca718803", "034c852a130bb7e3abac0fd9cefbadf79e274d9e197f1bc605bc3404d48347d8"), ("06cee6a08515a82a3da8726b98db7faaa4b21192cd1aff94d88335c9e5c33229", "2dc6251b7112edcc92c496339562dc287e98dc96f9fafee2d1a0f0f99dd63746", "269905f522a51e3bf808c444453a65649684b7ed7ee309151112df3a8e527038", "0bd9a3143d37588d6df2d4f82a3249bb3436307fff1090c0ff6c5235b7a2da76"), ("02b7d8fadd31de4479d2b983430b8ecedba113bb4c568e641c0615a0f4f76a0d", "2b598dbd01425b9a249a80b6238d34602d9eedb2ff25da4f083e8260b854ac62", "2f8d3af0e6833ef45d5316140974b6953658957bca10c288a6341ecd72e10410", "22181fe410783a097c943525183b6adbf6d3d0cbf2b53d24b380e34a0f33a85f"), ("297dc7985c6318a53c20ef433e993529ed94981424f96392bb2aaff43367d344", "1112721d4e1b6c2aa05b058e2414408bb0f8a1cd07399f2b96ae658cd1b6f6a9", "1938dea6ba7ca6f88d189a49d3693dd511b138da78703527a11a69db0850fda8", "1d9bd20f6f8f412d1d1741dab7e48fbad3c80638d9c23149a350fc6eadd85688"), ("2445f7468cecb07d6f0118f184a6babf9a671a0f1e524af0cc9abb3b22c3ba38", "0f0b014ddcddc8e01c09bdab5300235000c9be31d197fb53d1f0cf024be3399d", "147c1871cd5e0f52f8574586a84379c7008db97187863b35de71c44e241978dc", "19d5b9e263f9579d650b7e5cedb9bbc0dc8d847d1dfdb4ad6354befddc5a088e"), ("0292cd80e5fd6311454de46616074f38040080856dd91785f4313ced5b239fbf", "2aee94afb4c7ac4a50e551e21f9f98bdbed3d9f5ecd04eca3e7c6da7c3a3bb09", "2f2e4e6604580b72f3f724c7e398a1a3a43ac987738692cf9c84500937583406", "18199b2dc5a29c036773dd795fea6985797e5184a3b19e2f1b427080bba11bdc"), ("304ac61d8b9558ae56681a97cf8db86c84f362d954f31261aaef7b4f285dfb3e", "2b4f949fce475ffd3100f67efbbfbe12055ad049724da136b229c753e3d1998f", "136a3811541ae30d1e9c29c728973ce730e36dcccb70c7dafd7ad4a486b71998", "2fa6939d237f28793333b2db98f76e3ac03d7945ae6745e651c9a21d3703fa3e"), ("07603e20f0d7ab715d244ac9d61adf55267cadc959c4d761eedd938c58152c51", "1f147006e8bc6ed17efe0da2adcf347fc1572c7ea978947c94e0db123c23d64e", "0634862e3542af88f4ea369f7cf6fa9d8c279dfa15c7666bf5ca3897922412fd", "26da01730dc7d91ab0f3fbb6266fbfede8a30e2d31225a0b359df94e2f7b89a9"), ("25387e8358736a4a28933392521e83f8b734d4ff90ab786381efaa5c4b71b14d", "283544190b32cb9fa78f59fa67c5909f8308f3f9c0f63ca1f76335353139d002", "19465263ed1eedcde53e33105f0e64598fea6fe259975f36aef0ee99cbd633d4", "0d39a8d69373cf4077bc96f9577994c4ce3caab071dfe835a51b1c6816884134"), ("1abe1c68ebd308d474ecbac4fc53de4d62f3278a8fa4b14c6f94d263d71be913", "23b84f07904bda87a2aab6d14b1a8b13696c112980eff4c0534cb05d7a451d1f", "04413cdfc29e0361c69394fb8470c5b25dcf8f21249bc6e808017e85423f0a17", "17b441c85a173a05fd794b7ef4ab21cbb1ad9c4fbe483e0dd2bbe3917781eabf"), ("1c818d84e01733b2a933e253771043ac04002e2652614497bc43586d52007fae", "05434e17466ed33baf57ab9d79f077ecd7039101693d2effa83faae14105c260", "1adb37bc3ebc79bb54be9b28b50c80b11cdbeb934c95293cc783f355d15fda31", "1c71ba13f05cb62d91fade1536dfb5223a8a10f5af78dbf0b93ec505c3744019"), ("1fba3ba1f0df3255e6b410f62a5c29861e8cc53488faaf0d7e0549146ff2c13e", "0e4b5d937135c897ae1dff9320f89a2cce04f6559bd288e491f0bc68ae219df1", "11f40916600f9b6550af98452bfa35ba36b9baaeb6ca75d443af51e021399286", "07ffc358dc898e047304510db9eed967c3eefba1a7c14ccefe53f1f8161714a8"), ("05424593465e4f44f6d8cb713f68ceb13b93a4f82dc069eaebe2b478ed97f01a", "252e097963a8d599b2bad317bc8a2a2157e8f58bee84320e5bdd43d8fbab1f49", "1e7de339e2451d6c39eecda49880f75bae12281f8ca04387345dd0a5fb310091", "0d29c66eba10078d06e39f1424ae1f4dafb9cf67931f46ba7abf42cc93403271"), ("08eb43f252a054391414ebe2de2d7a728cadf4d46ac3f7e60e8664c21b515808", "0dca04c08bd8ad066efd533c4ed3a2b09d04c997c6581238ca0175cbfedecdc6", "0a784c4452a85ce380a8fffc035d007a69c1da6ee7a526a3b5d646f268499763", "1520cdb3d0b010f22fa7e6e6db8418eb48401af460f93a8e3694c7c44ab6e896"), ("1c4a2a2c06cc4be2ce281aa9498fe3259bbdc16984e73da238666dd94c1b5326", "1d9f4ecf1a7f6f56576a57e7ff800dc6085aa9017e3fd8318e8f5f0dcd39ee33", "064c4fc50022e028399d3b5cf511747d156efbd6460e6fb0ba222d95cdcacc20", "0cdc5aa49fb16791ffbc0cf024d39408487c98a9800b147ba97f089e79d7ab79"), ("0ef45f36bce2da317954f74f929a4b31c13354e66ec0caf98d421f929320eb5e", "0d4fcc5a64597b5587b98a99a621543b630b8160d7229292fc253dea1171b4bd", "0e1cc0b2edf88c0a95b3658bea1f72a9d116649fbe2f47a5f4af38bda6db5dd8", "22bc4152de4911dd3f3fd955e6dd7089d6320e6cb804b0d3d036e99c166b034b"), ("2f386b54f5317d6dd7dedf0e1fff73ddb5331929359e4a9c618a6be5d6741fc6", "2ab3d1f772fbf5dc59231f5c6885375ea452725959ed9577c00ef6c272307aef", "06c9031ff976715e2b4698b74dd3279d16259b53eff06208c6ff4aee87012585", "1b3b2fa740332c6ca42d3f63dad94fb211370f4760cb32529d6438abf0ff628d"), ("1875e47ec62010af27f9e0ecc9f51341b4afeb394e7ef5392fe8a42c78607b91", "104065a2cef85c145dd0f9427d5744d4596f99fb2a5b75a15a0f0fbba71fdbc9", "1d38e922b6a8c75e397b32d46b4608e603254c4d1727bde0fdf181cc0881079c", "26850f5dd142c6b748eb6d0b1ef419d5fb91483757ea1786468714a2332404cd"), ("01e78a1c4c756e48c061d153da41b09ca249d1386f20149076739660572ec2b9", "1e9a1fa84e70d32132e9968d48c1f690e92fe4b77178b2ce2eed0963040a0b6c", "2ec630da2ea9c94b8d1e9867d366d070a720bf8c872c9ac5db0e912390fd73c0", "2bf345d967fce5fa3ffd0f80ddaa202b391adbe3bb829d8e6f43ac7ca0f64cc6"), ("049bf7d0a5f2e48ec1691b6203b80899177065dcbe023da0fa7b731509f171c2", "1ce981cc7d0bffdd94453243b5e389f105cd505bb6c8b673e78fa39ee949d60d", "05011e13cc746eb62c276249074ecc6d27b95ebde999a70e88a78e076ce786c9", "23205eed878cf456b834a164cbec89c43ea7cce32da709df61674629f053e93f"), ("16517fa0efb069f97139d970f354f189076d338a93dd8cf76a647adacc0663e7", "0ac018777f79e86fedc09f0da078dd2d4ae1bf455b298e2c44eab649e5f819e9", "1caeed38c2dd2d6ac78a86ec195b6af862954249a722e253e5b1c180fdcf3d8b", "2b54f52a49771eb8372b32024ed77b508d38479bb5ef2e61e564280c49dde086"), ("244a5d575973ccd7a1fdb51ac09249e2c356f326e62685cbea41c7bcd663e60d", "2393871a503a0aef173c45efb40f10a053613cec42ec959ebd1f3eac18aff407", "0a8c3129387fabcf1ba9a6b0e2cca71a4353f4b2eeac7d3f8d5637fedb0b0237", "1557016fdf91ae58ede7fdffadd26f1a6bfc1713ebafe8f61b750356458073d0"), ("0c73fd4af5e7ee91e93bc859368da0c495d860c5447f0e84d804f0cb5718727a", "2a6b4698db66826240ecc32a32d7a79c6d6431f7f35254cf834b4a6af4925417", "1f4075c56937e629ca3c201042ae839dd8a60aaaa56c13fad5071e791fafc46d", "14d48906e701f7ae31739adc9a5a9a0c4e647c915989ff4acc173c7c7c18d45e"), ("02c9850f7ba28c6dbcfe2ba145129823f94efd9e5618e645ec995265c9d1557c", "08329b8d4d7d5c31637df665760c12d0acef31a438ffcff2675335e23e203913", "0cda635e56ce788e8351c67e4de753a5173d842ee8cbee6d6452c87da9e0eba7", "2283909b324cc0561ac7f938305cf1f9c28a0f103dbca200eb93387a8e812b1f"), ("2cbf154a815be828995ad109bd229c544274f2a68ec446e1f3f53efdbd404009", "28f5a62f262eb17996a13b0dd7ef43db1c1d82738b5b99324c7e79739ba08bdf", "0f98dfba541dda91f2a2668e5f8b8e5d4690c358fa0d25bccd4304afbe44c842", "1d9074a806946567a7eac3e4071102c31f3ae1ba77e276a6d32e64d8a5d5a1af"), ("0bfcd39c0c41c219a9806cdfdf154501c7b19b2ed2c7fd8b6ef41af5c782102a", "0cfbdcf652f6db131324969f21d15f42417e3983efc99b15ded67989fa233962", "23e525e88750359b9e5f9ff0048ef46be0d0233c9a7e73c8500884b31ecbc758", "1640450235cfaa5d57a1b292a7cce594357f26016d40b15493cb09e5db151770"), ("2ef6648365e3e89d2f5ba086ca1b99b7676e6a931925e1bb1f42b9bf1bcf314e", "11820f058cc2112f05b472fd7c971731f9ea1f05b70699dd4a6a02729f44caf3", "1b3835cb81a8be447c54f0a2b3c64208c4d26163f0adef777d86f975b40ee685", "10d006ece4816a74371b00018373ab39b3f49a56d79a2e7bce7ee831a08bd000"), ("2b8d63640746d690fd58a281247c7f3887f5e59f5b3a463617b0e00e28dcca91", "2b4d383c064501ff9ac6df1bf8cc6be3f9ad51d717275ef2062226f855dc8285", "0c064e04e8b73d95249c668f12f74caf9a8087618413eb866d6d45de8c542138", "0cfce42ad3ac1139afe44469ab28572c101f4d67ec2bedc7cb70c60de6b78388"), ("1362678b2282be81cdffd346d8d2585d21bde2744d9d67f8cfb42b293a94c260", "0ed48b73106d9820bd7d25ff3399278c572b69d7f29c7396cff283687d6a4c31", "1dc43bea351c4a3c4e6da8f647b6fc24a5a65a6e5f9c02d3d158110d63d0b8e3", "2d0d5af1f4444f932307110ff4b55acb46177c8b11617efcc8f66bd857978166"), ("11349697a4bf70c3188636281d53c3fe2e6bece1f64c18638f943f291a554d69", "23173b10f9663b679da8392dcd741098d45199a6d1544c0b8375616a755f6d88", "2686d1feec8279ab6cd1ea50c0ef749d853c20805aedebe15d37031041ee7d2d", "16efeb67dff29b72f2511b65f1ebb95f2004216bec4353ffc645b5a5732d065b"), ("0e662a45538070220befafb0589855a12c3820a455b364270038a3ee4835af72", "23990a586bc048e61c149c0d6312f749fbb1c1f2e896b4738a0cc9abb30ea48c", "29c4f079d7c087793c51d642f5d2347b2bbc5d0f649b8817fcdaaf75a827c027", "02c9593a13e213433ab8a33b6029c49d03894278c6e0f4e79c5af32be285fd91"), ("0b5ca1d95c58e0f8f59423412872e3e5e630d7997013dbae7c3b713a94daa103", "20f005ef1faaed3d770b3d26e45abd9c84bd976ba48359449200d8bb10d1bc34", "067e0013bffdd0c507ed5d23f2a1e1a55c2cb1f7a96dae977b2a5dbf05c06b8c", "0f05b1dc249210ee19a47caebea86db3807a6a246079cd5b6543e67a35aec963"), ("2f049a15b3cc9c151120850744294535cd5ffccbfe89a32c15fed69cfbe34803", "191b6dc4373e95d981d54ae676528f7d542a9e4a15bac7e40e85face72532db0", "10cf52fac8edf0a99eb5115724d529598ba45c173a2fadd361fbd6069ac15535", "1a838f6d4296d5eac604b85cb82da7e194ef11fc89aa2dd59106a0bf38d2b082"), ("2a120d5f76bed0a50e1553fba33b70c7b1d23b6bf5886c4970443039e67434fa", "0a66c199ba83b30e0800ad1af0dc8584dcb02d5b43d152660655af08c402b017", "1b76f03f70658b09731d21b295157f8fd0ae4d80d2b94e4dfef296d55e0b0d5a", "0c640074b072e033eb1555e2317070536c3b870745a4d9dbb6d11fc05621d86c"), ("2e4d811c915c67f463fa0f2748246a51a43963dde4b6a03717c866e3493e2f1b", "0404244e2b88e4d943dbe6fc0e13989e8215262545a1ce2081778ac0569a6acb", "298221eddd5f2892632012dba34cee6570a65bc5b7c2461451ebd23656927165", "203ccc0101bac52739dcbb9a2e498f816714ea340e5f56f216a445eacced93d6"), ("12a41ac491d193e34bd6bb5000bb9fc908ab10211de112360007124757c7e665", "0ccbabe2588a631c5e56f6fedb1078a62120edf2c82aff702104ffdfeed265ae", "26f8afc64ba43559befada8549dc9e27af4dac955498de1c23804b2959b61a75", "0dfbc67c583e2fe161de7ef466fdf5ed8a6b91246bae3c7ad9c608151ad9bbea"), ("3047173d25caf18e300e7bb2833f0745e7db634bde3b2fd82b263e31ee630ae0", "09287d2509427aa329f698bd2d26449465d5a324f8bb03a473b33c7f3e80fb9d", "1cefed8abd49a35dbcedd10ab249e76ae1978dc79e78bbc107a73100e491bab9", "2bf4b42844dbe79a7e2802a269d96ead5f782b2359fbd156ec8e4af291683b2c"), ("2791446d185a4b172dfc892085c66c488d76382a74736d863243ba0e0dbbf7a8", "25f49e0e5e09bd7b8f97240ef9a2f4cb81834333771e5dd5a6af686cde8c0d40", "23ce19f3fdc29458808f2939338e0d74d2546822d7035287715c95e9b20a4ad6", "29255a8245add94a51b485bc7b5d73e6a7ecbf1deaec2567eba9f6c015065a7a"), ("1c7145bdd43ad2841fd24db0c10accecc67dbcf1234c78d1166c37be80544a69", "1522629d2f99ff7b39dbeb6766137b628c1834120e2c11f51ddd312e0be76199", "2283b57b94aa13263fb7a63dd8e147a8a511ea8bdf2437c6c6b49805c5856cb3", "24f16d49eef5b4c45c464fbbeb28281f5d859de2d2acb966d93d2d32ea5a5032"), ("04e5636237bdc15abfb6dcfc25e51f6160a207ca8341d6d9a1168ab7aae12f3d", "1a480e3da2220eb26a602c40a1ec061700a229a44ac4dec189256a8a888e0c60", "0559665378ae74cf88f01fb267410a217e49bc83fc03ca6ded5b60eae4d43a18", "04f0be431924b13044c72d568cd1501245938ca20972eb9b35ac031c42fb6d82"), ("2a168143986a84cdade6a98a8aaf36bd409b2b20935fd915090d64a4b4612bcd", "24a21d22f87f786008f68b326fc92a37761e563841be5cfd0c1d994150bfe1c2", "2ed48d77abc32192cf581be0413c55039288eb59151f56306874090e71247e0c", "12f4a651aa5feecc0ad29cf38fa3d6d75af0f59aa28152ecc98262041e2e3c4c"), ("2169231f81ea7b7819d7df4c903986a28dad040e9188873f0a82b5bc2f8dc3d0", "17b9d9a74c2f001269d2fc0ee99c772c6482949659bb5214a175c0ad3499cb0d", "0e0defc6a98df7ab4c496c06c805461086750fe76009ffcdc5ee3533b521c967", "088a2509790a5e3da430f3819fd9646cf304a02b9e0560aa56df2f7abb6bd9c2"), ("2cd5d4503cd9f3fb9d1a19abe73e1eb869261ccb0b077e7a23d892dc70cfe153", "2155ba3f8211fde4c8ea4bb96fe743e04fd9bd8b7d2315103993ca89351b6ca2", "1b8bd293ba4a5403dd908a89cd44f6004fcc1b4b09393cc1b6f20ea66f8c0491", "0ed4cf42d8d7bc5c6640ef92605c088dbbcff53a2ce8ef4b770ba2b3d611367d"), ("30463491e4756f86cd1483b3c4040fb7e00631e772a63e45f5958f06c3f69e8a", "22add81ab7755fb1b833d8742ea3c19d7261eda312fbea9794a40fa1ba1e7671", "0bd7fb61c071e36799b9ec9d7c8a4fe401c333852fdf5d4dd58347e5e4bc7179", "1ad047fd283e477c0d9dfb61bcaef6a3988599cf10573f9f8b6a424c55a4a008"), ("096aeeed2d547e5c3a6cad13c41b4806b404cd1ab185c53d7f9375ff3d1c5cf3", "0dc0753a3de7736984faea1763d2a9755ecf5866717b6df19d0cbd6a75ad11c3", "249ec639aea129363a9008eb63a9798ce90966118e6e91966a8b621745c2d9e4", "089f9057e85b230131e5be81f40f33e0de22f4a27c3a79ec445528a8e9d87099"), ("2b684ead476a1ec4c70c3a2a227ae6e6694c449804e819a2aff1cdc6bf7b4615", "01d10c79888da5886731ed7c20de398efa81de5a5ae33081b281a64db09a09ec", "0dfb83e05fe1c9ae24d4fda8c4c749f6343e118c00aa2c23343a1571b0018f6f", "18ed02e239cdb553bbc3c93af97d5ac23bff326367036f57398b6a84826489f6"), ("194fc7bc17e1d13fbff5b122ecf7fc55d1c4418d618274149952ab347f441664", "24fda9ee8eb65c8125d22d43841f0fe7985fd5c93c5d8bfd30b8e9cb927adc34", "207d996ff51e6724a6f839b2552f9f8a1c124b9ee25ef801daf15a5acbf35797", "27450803aecac830b292d5b8b840f26c0e48a5203300938a494579f8ace811c6"), ("1bd6769d06ecf2ecf412acc61774b0b31364640bcdea6e3be0d625dc767a8dc8", "2643ca558c7f22f12753cd85cd8eb37bdf6a5b89813e43b416a3463c2242fbca", "282fefec75d44b5444503598698316a20720a6a1635a9f4080c3b1c0a9bb0e8d", "20042a8576eda3856577715f43e772d170f0868126b2e4f27cafb3085986f7d3"), ("13aacbc8082c44c53df46078ac32d0baa8b63b456d9cb4f7ada1a1ba98ba4181", "232d3c89f3487d46935777ac2a1c2164716ec97340eca8c8ad030b1b6b5a3c22", "0d380b20405769b7724e34b34011173fde6cc2dc0f040a55ca4213de8a91a6ce", "252338707d60c51f654a374b58aaadd1d5c30dfa0988706b6d8fcbeffb7f11bf"), ("3014ea1b7e9ac8ad2f3a4ec42d90d4c79ff0fd5f8f5f545d2cb83ddea5463105", "2c7d72884964a5d4cd0d8f00b57a4a009c497fb2769231516fc9278e187df091", "0bb06b9b05bf8558cf28479578936ed161f5b66700675147ff683d92883429c4", "14b96de1330efacea0b9a6e5b5523d30e6cfd51a870d34bb88f3f866a1494662"), ("0c7ccda4e948e4e32c762f1544a67043228ff9bbd0e8591425f965ce743e6b6b", "2d049e3762dc9e868ba99b836e5df5e77c7eb7498383e722c4d1bcef0a849d22", "176f139ebd64e4277a5e6ed787edb73a746bff791340741562ca358c84ba2e03", "26808f7ab81833d271e86d8a5878e98831f0dee294b9d496d8565aba4fd5fd30"), ("02fef159151e9ad227baf16c45ccb20b2afea9a41f9239ef67746b4a9f4a759f", "0c9a0bf2a7217a5ef94ef24bcca5ff9b00c8d78c80029cd1af32aa2f15bc79f3", "0fa776b3c02a259c6d5154c917ec49df9814a75b8ba3a80e3089e300a8c9e950", "1fdc42d3268a23e8deab32f6db6170c3fe76bf01fea37ad2cdb26a4ab81d2ae3"), ("2ddcd4020f996da40dd830e165719fd82ac2f64f09f1e5824d4b67430c24aa03", "23b09616c51417b944d7a0cf9fc2b416f5494f9c419d8dac97c02112b57027e0", "177d56a040e6a70fb4c2047bed7edccadb69a78ce47ce30e2de0cc4aa59dab74", "0656f0875dd76d467cf5936a2ee279b0a510c3fa0a104f6b5133f93ad1c7631b"), ("010eef0d7c6a1bf48891e6f9e690892411b2a10893b8ca5d6d09918e0412f991", "1d0168c5271fba9c48bcc8836678a3ebf41806a76a0e3d05fc475ee270f6261d", "14adf336cd9e7889488113e72dd084310b9fcae840199f5aa0df18376f6f80d5", "2cff939f12afeae1f36bdf7a35231373e825fb50817979bb9409c9c77f034850"), ("12023037cb8a5ab378c5e11e201c8be56216aa9d26718e75d398828eaf250c89", "276e77d7dae0aa3a2c4906b2ed18bef49de863f6d5c808a95b3e2d5f761cb0dc", "1b320c3e2c8d4a6f9666830c8538c61b2bf25976cf3de484ada85564a4c51357", "231ba8324a3829a53278b09ace34814a71adc902dc08f88f5294d809240873cb"), ("22d584acd5b0be88f8781bd5a5c51e3ac496c93c28401a584bf72c13f734bbb5", "1c2f042c2626ecb3604eb1cf11be898257cab93bbaf98eb79cdaf07732b07eab", "1670f698da58677833a50029032b1303973bfe971e62dbce0f9819996c2cebba", "22be93d7c419b46017358b9757fd27825267ce6656f8e7bd6b939cb613809380"), ("02be2dc1401be09662c162a5ea84b5e072124e1aa46b82076592caf25bf9b57f", "2ffb19c2e1367f835497766360dc1b8f946ad1da59eed39466e65a316aa84447", "066629bf720c6be07fff1a9251e8c842ad6c974af84f0149cfda13db666dc55e", "101ca6f9afac6d0739a0c0808d09873225a5281aa527b97cab3d0cdceff617d8"), ("11b821e7a81930a2a749e7abb243c08d8d436472b138961393ab71125ffb11c3", "2e273c394d1cddf40ea18a77864717d9faa9a153711af70403d0c3627c46b931", "28b8a19ddcfa748a373d2ccedc3e8762e221bebec29b99940da08c30b2de796e", "2cbbc72159d8159abfaea12114a1d2025c5e1c6bd8c9fb628ba033bbf84f1ed7"), ("1393289c3738945c37d51bb8d756079a86bcef343f2dcbdfdc5c23e705c6efca", "1498b93df0ff0e66700e4f95e27a324a77e570cc7bd408a36973f8b0fedc2b80", "070e75842b2faa0709339736abe492847fb70011f156ce0829aff73ee3959bc8", "0f26fdf6ec7191a2ace27ee9f67c9a1f0afb417dadc8ecc29212b3acd88abe08"), ("25ef2a7306a7e275b69ca50d947419aeaba8c3389faa501bc6234a984bae3310", "287978680c109d540abda081252abc44036740e1df72725eef77608f4967e2e6", "1a7abe7dd1c534f7c4c6e4d3493a7025d371b9e48870e991cdb62f2561e9a200", "1656a72f461fa9492dda8219500465743d9fa8f36770686980676ecb10722cc2"), ("0e8f07fe426fe44a296cf6172f6a11f8d34565ce87bc12bab2412d2ad48e58fe", "20da3f6becced6a1f0c3324ab756d27ec75387de0d6a45cd0afd3a0297779a75", "145962259739461780afef93368986316326bae3f4b2baa7d39d6eec55696a15", "1870215a7b04486665fdc791f240270c658b4be99f2151423ac14d81f5debff5"), ("214920bedfecf86fa607483681965fa69ce8fd973928c3b8b6c87791e43dc02c", "1cd2586fbe1a9679c2d18874f8f1c3fe11843cd2711909f502398f434a304d99", "1fcac7126b404aad727144fc2b20c4e16190f485c8a6662c1b09cac458a07e7f", "247f62d4d54cbc556489475e40ef13122b432a97d78d5bfedecd395b1989c2dd"), ("2048ce80e95a270d44f913a9f9f5902dc8403009adbfade5ef0ab53e26c76841", "083b57fec84585ecfeda98edbe67b317d8aba6c6b2aeb1eb2d2c33229ec4a5a7", "1fbbb4cf88b7b6e3bb872de2895147ddb6b9256466ddc77a74d991d4c49f01ad", "22ff43c1dad1c15a122be79a8071270f5a68467639d06b9e66cdf9f189497bec"), ("2c58e57d87afdc635055a0f15797faa7c25c769a51f85997bf1c1f3cd6780a2f", "22346e7dafe7bd5269c5eeb795f2a011426c35e3f5e6b16f4bcc50643f9d31e0", "2746891a2b942f7db2cf8c70f570abac955f83fd9edfbd84c0b73f3c139d3f12", "2ffaee72e299c4248fd6aadb07455b66453e45d76dbf5064fb4213f7349603a9"), ("09f5cbdbc3752c20e535b03e8ad9a35fe75c1a627609bb33447df3d9e82ff5e3", "2c3ea65356a854f5885bfc5d199ca9fcc9e55d4ac2aba081cce542463b50a9ba", "132e492441cd8938de780196d9a6b46268f6a08c353b676f9e5c70f4bfa3e196", "06fa03884b1175432c5612a8de057ec261ca9bc2856c1313a4e8d6469e89fa01"), ("28d66d8a63a14d3c55a52a93d222a7c16a29498f13a4107015a971fb41c1a505", "15016afbf79709dd432bdc32e9f54f8e64092b3c8b548c1a18115a15e7ff1e8e", "10ee268fdb293e5fd5377e702554df471533bf69cf80cb8ee49199f820e0df4a", "23fd60575ca37d8ce5ad979e37fdd17bbdf1ae41eeac0b0345c0965020006b1e"), ("04e2843ca3e5f4c2f06d05ec9ff7e02bf29e402ee34508557de1db85929097d1", "0733e121cfe5413956b954a9e1901e4d9dc9e2647976fe6753d4849cfbaa2abc", "2e4de31ce4c3e9bbf9bc8c7e86c83d3413464bbf437e763763c6ea6c49d201e8", "09de249bf6873ff1b41d4bf16918f107ee6a1c614578cb671725d38c254d5a90"), ("0d82cf03cdd8543f20d6925bcdba71ba8b385ffb31187cf506930079df961bca", "1b3b3e817bbcb644db5b9a1eb76823625a55d75a77e27e4cd400c0162ced54a9", "18daaf8b6daaea9583887d2a05602f4b25f5b68592251da0e345b77cd2a34c64", "2b0cd18c7575192b06cd64974c3390f35e4891f4be79ce78b3ac55cf782c150e"), ("030b7bbda555100ff0a8a2cdd447b18b1c999066b5e143e299717b99d394f4c7", "0e73321e2d19bb654c838242531474222af6896b557419a588b64951e37b9ec7", "00b2056eb8cc7d8794977badae17ef6fcdb8f69deebfab9f5c833fcc5de889cd", "0a9ce36ee19d3f4b10cde89b35280d333999783cc5f5660949acae957e8234c3"), ("05afbb2f88edb8c622d4f3807e16c2bd71858191467d170b0a0152b67913e4f3", "0fe4848652173fdb021f5b0b0229459374c824fe5fbd9f6b2ca068b5dcfe969d", "2ec564213cee46eb5189201a2e209c1527e4f2da76fe9b7e996c09629fdb2761", "01cee7b70e37554e1019c16551c3fe51fdf89d796c25c6d07478a3e761415e93"), ("2ef08e968dc015163b8e1dd92fd3bacbc457b098c2deb9f573b7d8eb5f964808", "0027f63f092d6b752816670d7ec96e89b91267fc3cfc09023b04c7a76955d56e", "10a2bcc5890615fbca7aadcb71d82c662deeaee9a57cbcee9754fe0fc98ccbd2", "28f046cdffb5b7cf6eda82de846868c50f90bbcf7cc59a364f4cba61eef1469d"), ("2489fa1e5443c47f6114d3a9b6736cc833f0d70b194effad26a25eb7bb4d93c1", "2548b5e18e1ee389d6f2143f37abb98bbb127f648b145d29e87e4160f295326c", "135e2407826bbc73d610f810e4e19ce1d39d907d09cde2ab39e17d83a01c7ab1", "0df168112b0cc077333e395428e40a689d0d34d0965671bd4cbf4aa950b03657"), ("305706008112950422b8da4473dc2c4f6c3eb0fd4d704f020277e0c521abbf81", "14b5e8c9732caf46c541b3fdad9b7c275cf9568b82575011d9cb1f61f5020ee6", "275248ca7288620d590616e4d3c9c61b13eb57ba611b9acc478524b994da3224", "0c046442fe324ea342890caea8689b07e2e8fcaec310429da02a6436e43b4fa0"), ("07606964f43d5daceb129a111a3b85db92de5caba0f6453213bbdb02a88b503a", "1be56320eeb677fe27343104911ee9a08df49a61c70b4529f04fdf6b4e455de2", "23b92cd310ecdbf837f17a825d241107f429f662ac4ebb5bb6b166117d803377", "2bc53fe940cc46cd4628042558690ae656a835e387688d0de02fb6f3c927a181"), ("1348cfa200926e4f42cb64f2a8a23624d6985997db95638fc70810b997a7ac4e", "299916794121b817bd1b77935611f7138ecf545b373bc72b0154c32b2ffec724", "06ce342e8f9e63668ff077fba9a55292788168f2b6265bed7925f125c7f56138", "0c8aac031a067eb008fbeb118f535257ad8ae74cdb9600dbc18e6a1a633a381c"), ("2a02af48bb923fec076552544bb10b553b17c03f465f05071d79e782e54519c4", "2fb6541ae2d25579fdb54bb1508e2aa694612c0dcc878a9be0bce834da815b44", "1267b1f6e0c6938da473fba6435e1407ba259b06299cdfd08aee9526418fd7d8", "1108eb2b739ee1f0d8d78944bbfdad0bc2ccf3785f5ac3f8d884b1ad9d3f9df2"), ("1fd6b82543c8f8de47df6c384b6b8286b89bfa80f792a67f12f7ea3e7f93a162", "2ef23987df3dbfb30a35c5daae7f5d7d5adc5966d1807fbbe5865816837a5ac2", "0b3afede80d35d066f2a809be3cbc5fee212b14e306f3681a4eda51aa0a4ab2e", "12c3e3d4f5250cf2cfb209c74e7101af206cf100946161c3632a212bfa44b858"), ("1cd931a2b5d310cec6d0e0fe2307041d96b3a5f898f4ac4d5477de526c7f0487", "2fec84a4c04bb2b8d1aba0a4a38b11ac52a4f368b3f8343b4cad32642889f13b", "2faf442dd2e97ea3e0626da2a88fd16af0c4c99ade114ce9ad3b3ff471a60ee3", "07918ee82da0ca8e992ca6db7a32f50c9eec440b99b3e350dcd9324e640d7fbc"), ("19a0b67fa7273f6523625d78ea1e003f895e2a1b0cc5ae5af21d4a9655ef089f", "1ccd75eb12023beb8e17a3b73bf8646cd6d611756145bf7cef95bfd5832c577a", "2201095267c21cbbe83b2b3628cd591b35c081b24858be8a0b451748ebf11d03", "1a27edc36f0b08f481fdd4566c4785bedcd69803721a375903cd6ee98e478b5f"), ("198dcc160bcb7761c32bfff14c6b8f3fc816f11075d3f7fa5e27d96bf83d1eb8", "0fab0f0fa600b62cfe6df6187de38d9fa5744c8942216802e8aebb927cfe68a6", "22ead298f0e483f721d58cb418f8effb66a2fd383719e3259cf86c0ebbc73135", "01e5a0b5eae7af63c621c486d502a390b9b106c4b4da5e0ffc74e34d5191b498"), ("15e5e761f649d0245803199c5aa073578ec2f66f6902c4ddf1390625aa20013b", "24c89236d954f0cda09d96e7d3eb79b9083877cd199ff2f766b45af61b9c6b87", "197a7fde9e46d66c42add5e1df8aca5a16aba812de1bc66c5697fc786e1cb00f", "1bd1c6f8fe9a24dbc6ac441531811956431185418674b1129308bab70e6d75c8"), ("088322a7b1b9614440f662b48d4c7ce7e133804f63ece75a3e87d50aff27ece9", "0299d6fab78ed2e5bf30089777cbaaa5f17b193521d926e37e04731376eaf4ed", "060e769536b880ba74f9c03144c0f04867a66a8fda7bcd75e691b8e86c00c649", "274c82520d8aea38f359f9eb4b18041a6b604148cb55fae59e2e1b864075bd6f"), ("0ea828b9a776b7bd41f7f74b6b2a4109f00753bdfef15a0b238f480990a975b5", "0a449e787fa26a42aee4bfec004a555ff37644aa965e0850d9da53f713c80dff", "24380c25f05306d3783db7ef5fd06470372dd37f4a661ae55c189ff819e3c4d5", "1610573e07bf5de9365358c60bcab7ed804bc851a4dc9d45139d074fc476b96a"), ("2c43b559a09de785b6be75bf4cdb9c93b8c8510d27cfede6cd56a9410aa7543a", "189fe47a52d96acf3cb7c47bd7c2179f0a6a8777547838d76537a364ff35351d", "047c4d47aa6556a26d26a287f6d4ff239dcf491bc4772e4377c8fa4b3535b0a4", "1588b50e5091c124cac5e0eda4c9f30668c8567dd25404919bf464ffc8031227"), ("094e3ea89bdd787785109dbf2f76bdc0c15cc4bb0318d61d6389998668d53b10", "2e19b01d077229a32766dce3761abb440cc6a404e83551a0c38cc79e369a92a3", "19d4dd95a9f359384683703ef6fda116d78b1604ccaba5797c97fa1b7d52987c", "0848312aefbcb1acb19c18112cbfa2381a875a2dc3aceb09dbc107b345903282"), ("072670b5f60429a61f2332d3a185ef81b4abfdd9127f6c277cf7d2c2234dc693", "1f3a3bee0dc892f97ae743174dd7cf0a51d45a320c35cf1018c2cc7cd330cc0f", "229fd1b635f222d45fc13e18ad94fd28f3e280f8ee2e980de798f67f87e4eaf7", "02d2a97a1a4c7690be96f521caf607d6c6960c207401ef03bebf890c0b132c09"), ("211e62bae8dfbe4a33b7e751010e7fd5df964d40bf08d3742bcd09fc94b1e0bd", "11ec7357f680ddd303eadf1e576bda1e390cbe3d9cbf29ef356f9a0036f800bb", "2a9805edac0bd4e2d70c75d0943a18fcd052be5aaf0e29b995aae125c8f23162", "176428b187b735c30d9d9952541aa6ed6de0425b1f29bac85b373e304d9ae1d4"), ("23cbb2057c21ae502808ad7f5ab654f3832ec40af85ec23bdff6ae34d2afc69b", "1f78f5c6dca8d3d35c001571c881fc5325db616d4e7b85d5d23dc4642e6fd06e", "1e2a896ce95434ad171ecf7ecc49a2dd4b83e8e896e92b8486c460ddd96a27c8", "1bd247f7ff916cbb67943dd07cb71dc86da457a38b72c8784afb99416de10cb4"), ("1ae14c8876ccafae26c0be9d2f217d2cb481063a2c4d30fe9eeb4f7a09ab7794", "2ab1ca69116344215ddd9eb2436cd0f643a8de8f108442ff33f647f881bf2e94", "01e486807ab0f7edcaef081e3b2ccae2bca66c7ef779392127180b2c4959d61f", "0b8e3f63a4372f5876524bb762dda44813c3face23106b46392963f4b6d0791f"), ("1ef54b3214dd08d344ff9450c14ad501576b96659edb48416fb462efa81c90f6", "0b921e0284bc1e13b377cc1220ae0ece5aca4ccc2de0a57aa487e8b4b18e06a1", "0d0c9a2535b8a35a149a75a236c468e43a77a89f9e170eaa704bcd2a749a75c7", "098182a18b92e3351e4aee4d73c2cba4d6df34e470a32f6ddfde37a68f2abc80"), ("23338d218d1edb574030f8392e83fa846db955538b29959764bc105e20261a4b", "005078388f6022bef8a5f220b30698ef06eea9d1f23b3707cdd737543b4ea63d", "14dce90d330546cbebe3721e4921ed64dba8b41e88e6a58be0d8bc13540a2b42", "0082cda1003259edb1c033f04db800368b3be3abe9b1558117b91c98622a435a"), ("2febba7b38227b2f5eba980d4cf5fb684215d376b9110af32f94c18799c45fad", "05158635c41ae6795e5e81def408b8b604862fa3fffdca92aaace2d4258685e4", "194506d35d908a704e3cb7bc1ccf1c490370992bc5ff18e77806f82b9b9690a8", "2d67f9284bc494d2e9d76727bc05131714e0fb0e16da33282453e28f445090a2"), ("187922bdb463466aa3a5b78655252e1be94d36f15b3923b5c050790d1968c020", "26368a4e4f3722757cb44614e6b1fa7e895119a2e7f55d4c320b6b925540aaff", "11b4b593b349b28df5cfa8545a39b01e98527b325149229f34271658b9e877a3", "2fc6325d82a570793113aaf1aa0d44c88221dc17aa39744ad89679d47e8fae3c"), ("16fa6c1cd67bf5b621e33c4e69ce3d2e01fd96985c3362dd514142b26a24285a", "281febe34b45f4bd1ddccd7f974a6aa074c5dc6b007dad6cd521485a4f81a2e7", "0fbed8fef217ffff3914c31784ad2568ee4c2d87a3a0d8408e6d3f7bf14d6c92", "22a33f2411256a4bbc6f95ea9dc0d6576eb08e42e8da513fca9303932d2ad4be"), ("027ed8b15be52ce7fc01f79427aed87082e4e0219b872b1d559cfb1db0fe1d46", "0c58171f00236025877ef1fac2cdb9f41ba1b6b33bcee92c4ff6286788d175aa", "24d5d19bd9e4591d195531ae953569b84ada2db70e19f22aaae90fedfcfabd8d", "305d451017424c6b0432a424e11d95152288d0d388bd79fa299a7118db675dbb"), ("12452697972e86cc048b31cf426052ce4fa57d0cb52f5faabcc3800a477360c7", "0d1a5bd03c6c4ebe2975da12a1e5788225c4d28183b641b53856f5e90008d09f", "23ffbb94b1e58a3176e592b6625e90c178147bf1f92a441cff02a57d07262dd1", "1d13af449d85ad6c1182c32d4f26c48a27eaedf2b53166a967bbe68160e2e5fa"), ("2045813b85bdfec02a0bdf31557e630b4547e080e363e2726c8995b5d508e939", "184572881b00ed0c9d70b13935861038cc2257f2d53f75954b8502aac1a474c3", "1b1b64ae7e456fd57b79cfa9ba20fa287342045401d5acceb237acde08afbc9b", "029947556c5e220ffa180504263e0b4a61f85658853832adc86055b7ebfaee0c"), ("0b0fd2a8aa2e3d8471bf0a4dc90215835622f9d11abf3a12cbfe634b4e0d0caa", "0e8dcdac307f1ae464ae342544d7762d3f62f3dcb3e98d2fb08a292497726faa", "1f275ccc0218dbd1e6f6b7461677d5a6a00e62ad810cf974548f69490387d0ec", "1bf9152a08350e23b5a795d77df3f53a0ee71e4aa8d80789e1b0f73ba3ee12f1"), ("2d15f424d4ca9de72a9191768e4feddbf453f0c0b5c322659c2957007405c5c4", "2229f036b7bd67849e29def7e5d4f9859f1658d887dc4bd331cf2d558a0b1e03", "1a88efd6783e6900d484063ab15b4f729248ac1b334eb04115cd6a1e0d19ff44", "27bc0cb487763cc69bee8d33785fa28ef18d93b4265a501c2bd9757b3c273f45"), ("121d4d672bd1c554125bf68753e527973c8910373f32a07722948e39cb288e42", "0ca8794f63bdba9bd90eaa10fc93b81053f71c0891e699eb482b7e2ef4c04782", "1eae121daf95600bb862ac8e0361c983a0244570564bc038bb6c236259469d37", "29767a29823f37b5a54df2562ce3403180a4232e4d1324af7ca7da942f8133b6"), ("1ded8a029a54b1577082db23f4ff89ec7b9522cc77b96761440352dbe7f83335", "278bdd5b9db8b212f9098b773bd3b38fbdfe13711eea2d58f28af79775ced30c", "1aa6eb1e5fd9a8cd2ccf5dbbf322031d258a5d051acfc7edaf0925b7e77a6103", "1bea71ec76fb5add7db0064638ff61d76e607682898e73a73335b2bb418aa082"), ("07f2958afe1edd0a2535629c16dd571b4c249123c13e2dc048531d3798042d9f", "18d6e59a163aeb0aca312d9a8bbac38b236baa2a59df8dab22cd5a3dd0b30723", "248bb0a2e722f9898caf28c0fcdcc1aa5692620680a98bc91db1ba7b42f6635b", "21bb825cc7d9e26da05211fd62431d2db6b0af0d25fca5de39fd2bc48a0e5ca3"), ("1b75372bac09f3c59017e05e5dd82c270a0c6e5dbb0fac877bb9068b2de00032", "00c634475c038bdb03cd97dd53164207f5437f33169ac6e5757bef4d216fcb07", "224dad031ef7e2625bd81491a88c8820db2cef8c8f9eec664140eb0ca92e624a", "301319d1209980863d3ffcbcc5fe54bbcf4f3aa2aadf02ab7a5ebe792bc147cd"), ("1e382d456556708356ef491ce57dd9425230c6777dfcba12bc8eaf3a9878977b", "2c40265f74bb0489cd20170df77014b0e30b42eb9daf0dcb6088adad5646a3ab", "050e826dfe9c70925bf580d09a257d30f5a6129276f08c9778a763b11fa04eb0", "0a4b76fa05d24a7ef2f6552ec7a3f63b5a71bb5dac549eb5bbb4dc3583f7d33d"), ("16f82b88012f29370fd248a2bbe9b471512fd3c699c8b255ef134d5007655a5e", "12e8720cd2fb2f28339ecb98ed09abb37452d49140248b09dd048e157ec13a0a", "2e2fed006760a0b34dc0809bb68ebf2334435a2109db5975ebd9e0421bd5d4ad", "22ac136d6766e617ecfcb9798ef0ed986738da17da0bdc3d2011bdbc8761e1ee"), ("052ca2c0bd3f676c1be2876c690be5839d947945d921b5d8e9342439d21339f1", "2a4a5ab8e826cf714f140563eb15f9094523e8b8f41c011393b343a933b59b42", "28b5b9180cbef03e8bb6961a6d9875bca8bfbe23935fee919981db66958223c9", "018ba440d1a60bc857544423bbb3e61d74ebb637fa05bc3664e144021b3f9683"), ("2721403eab6032535d06118dbb94673ecebba95e058b15d235254de7bc73402d", "21ee6dcbe1f9c2732637428b81d75afc90414b8a233f6d8a798f80885220457e", "2ece685fd63a08d224fe89850a344c129edae4f83efc90d7b6e1d9c65ceeb9df", "0789cbe03ab416538a6a19d3dbf496cb8b18c3f7ab8ba85ce7a4c3fca4a80b50"), ("0a8dcc2256807b75a86d37d852f810648b2d122264dd0cd5a93d6de06aa6d664", "23e6a1661cdb72e70be8747552a270bac33eab7706cd05779371d5d5f18bd783", "1c2e8b0822f06bdf0b031a3ec79f0a388ef0fd41e738da6cd3a2d2952a542a83", "20622bcd650526cebd91ff4a11315972373b20894784a9f44a4821a9e5cecffc"), ("1a11da0b64b4049514483bd4ac6499f4ef2795e1fb1b25a3a2184c4e94552792", "29f1bf146ffed64b4f11cea146492354fb203ab1b9adef4d4401208ce293f289", "24446e5aed285455266d5191bd6719e91b757a01865352c80537066b419a301a", "0d5bf7e782d0c74f26d77e1f2b8f23a1282a9491b9aabf9a488ae4cc95ef9c9f"), ("139cdd9705783ddeadc97a81fc5979fb4209d8f964bdf399b280417585f1e3bd", "1877c6c165b2a6c404a5fcc30b3d90ea1465e6dfb1a534b38a3e044fbc904a5c", "0a20c3e68996b2619dafc84818f2cac628e3cdd024953a865510f3b47e2d0638", "0940c73f9c693f80ccf6117abd8c6821e5557304af851596bc67e0b35cefb314"), ("088ae1968f833a6d7e4ac878da4e715b6eddc4ff606e96741371826cdc77abcc", "08535af396562c0b68dd851722ffd3183fdb2fdbb6648e29d3aa284e1a6f0aa4", "114f196002716e3f1f02b46da371cee4b3ff561634258b586ccf023bbd799e31", "15e8041d0537bb1cf02eb717cc1cc93c09caf9416b230cc52ab2ed2371c0704e"), ("0a34ad0c5f4ee898fad5900c5720cd1328c43f0e2fa8d470faa05ee6cb91ff2b", "1f5c561ee8b060c648d1e725e826935114413672b8f9078981056bd948ca07d0", "14e24f4fd19387b894469ae2179763b2244f6a1922373d3435e457ef744070a9", "21b0628cebe6f946797fd5c2820623e9d12b623f19560db143c075ba56938fb8"), ("02114799f41c34c55a3af626fbf591f5ef26559522f394f650bcc7dfc47b6388", "28edba755bba29bfa0136d3b48e745ce4da6d5c273333789c44199508711b1b4", "162ba0db584ece81d94744f7ef27aa053b9d5f300aad96c3a7a8fd8283e14cec", "0c218b1dcb33669c1e8c5b630dad4ed027124b02a3850f6fea07cbf68dbe059e"), ("121ad3de15f173f417649240f2dda6ff7dce1be70c4febb3757c1bfc49701b3e", "29057bdf2b9b6ceaf5219790f1a8b545588c21bbcea878bedc1b5e18c7aa4afc", "1bf27a5c9bc43ae76a2e98dde4842887337d56186e53e569816b6e2448211d6c", "2e63f3bd35dd7a1f97572ab72deba11a49198dcf37904317fa39d271ef769df3"), ("219b40b0242b0767b8db3cdaf219cbb2aa772cdb09e9315ab1cd6ab01cc854b6", "1a899e9a231aec27bc22031d17c163ca1a7c3a5e96bf332bf64914af8bf91327", "2c0ebb098885d42b92d6cfac56cf2a7b80d01eadb23e52f1e840becb26900da0", "0caf04dad097d348b75af032b0f35e538be52f6bf57d50c091f91e816f21c713"), ("17cd6df95bba9f565dc48d17b6bcc4a8e7c94add2ec541cce6970f9f37392a68", "23539372fe3afa3b7181b4ce1e2cd7821e40e2e9199d755434451431fb5633eb", "026ca9fc6188363c7176c3828288afe2824accdbf6d21f50173c7ab0d28608d3", "05cdd91937130c27647a96199bef7e94f9af42bfedf8da93d6adf922d8ff195a"), ("2e73a4a4e8ab4d39f858a226a60f1e1a7b7e4743a54313cc8b207fe587b5624a", "08d4b2631bbc2e0d16b572ac9e86a4e37fdb00a3c97db1598f31fc8c416ae7a5", "1c37785cb08c9ccaf76a49bb067135ad9a17be41f7f8456ae62b3995e8080e36", "1116c96b8fcd192eb493742f22fbc942e10f90f67a46599c234805cb612c7a46"), ("215a47480e5de422c6f0a47fd66dabb54897ede43924efb7cf30ca1e973160c3", "19b03276c337d13d08394f31370257d9ab2fc251d0f0061679e60770f39c868a", "083041564dcbd456e636025764f5c8eeeb36a9b566bcb2b033a1db5346151607", "304379d543311f468c0c83ebfc832c1e1c5fa8422851f8ef19106affb96ccdb0"), ("0dd62ee1237dcc2c192be9d01372ac27dc56b5a8b36d7b65e970c130f34c10cd", "22ab9a480e658148fc065292c5a1663399700f93ede149db2beec9b4c8771ed4", "05f02db87237f52d9828dfc71ca2ee1ab01cdb818c1a646b5eaae82aeccb6f3f", "0ca2975e4617ae98bdcaed48a23a5cd2f768cb17ab78c93f6f155ed3e1458f18"), ("1ae16ba0329664f6682087ddcd4d91fcb47f00fc4c594b2db2b8383c04ddad19", "2ecd7ddfa659083ed6d404c482805199e33510dfe09e4dd5cc1b244bde1bdcdc", "208c109266b475da340053d6076ba935b30a2166e56d5da4bbbe643f929b7938", "2dea3ce314645f4ba50bce9e003c1fed878a447efaa88c51fb1c1ba595f3d8fb"), ("0c7d3e7e198248e29b1f2157a5b8c5b5bf929c4483b805018cbb93cccf0edd3f", "0773fcf75176fbb8ae276519c5e2d8adc8f696b77e6ebbe86b42240ef06ebe77", "16e1285b07fb8d4c8d6f81a50845eac0334b8ff51588084c2db1b03e4d0d26b8", "17b6c0f96f88162a8094225827ca4142a70bfe2de64672d2c9300227b8fb747d"), ("27d55f2dbc63177227bb4b16e3a5a0abfb820fcc008b672e1bc204f644aa399e", "1b2f4025f869e91e09d640ad5c77590002de94d84fe99477cb5705d39b225fd2", "1af91e35d07e25560de2ba5749a6eee8e27ee04695fe0991ac2213f904db07af", "0b0bb7f79cb19908adeafb7f50d19aff18c5b8b45e9a73e559711490b2bce495"), ("091f25bffed375def51eb0431c77c37050437013da264cffc2e00026d7abdd43", "11cc987a4986d01714a3da47aacd0f0f1e48176163d4d3627e5755fdd32c3dce", "290c5749573193a0c2eb173e819387a4e346303781d551c2a1cee648809efc2b", "21824c6babf19faba397f5a7df92b3a570431856e730908db13bccc9d4656d12"), ("27cbe8dc75c7d3b80fbe255296d7bd851d943347b09d1ec542ad5fed8bd8bc90", "2f461efc33155e02bb8e200dcebd95405961b72e71008d77763dfe90340510cb", "1d3d0a2008705ee52908adbc8cc944cca8a891b3caf2c4b8ead49d379e44fcb8", "088b66c22e76765eb28c5bc5e4d0006f21680d0960a12a6291f1d6c72b929ce4"), ("1d609d926ef8e49d0007dd760a8161bb0b10422159057079b79ee9e7b5bc4fb7", "2c509320d3579c688174f62b2cb01aa683bca1c55c6b535720ae30a8469c9a0f", "29ac092597c2cb521ce6bc385ace4d20d01fd85d502ccb5dff6689479dd294d0", "17826bee6ba48cacd9df20d596af21f3e5d9fabca6daf1a1fdaab80fbea00e07"), ("1039c56b18726308650ac79396d0d1333548e6681d5b49b6d0d108f526e2a7a0", "25cbb51a6ec1a7616c97bd03da67d0eeecc9dbfc57a1a78425c85d612ef57e21", "160b37ed220871fadd347bf1ffeef4751d0f1090b9dd72ad6bcb0e2e77d3832f", "026ccbabbd6bb71a248a974e07c63fce7584375e4c79c5f81324d685bf004d4d"), ("12e789e58bad5ff8a3198cc97bd3a9a4f972877ab26b22d1879b0696767c7f77", "0cf8dc3fd5cd2b8b24c91c60fd66f6e55ce6c69b33b741213a668129e30e9597", "05f8c818ff70c1ea9a51fbc89d93a62ac4cb7527ad0991844ff2fe925098fb01", "086f3dc79920f1111d9c19b0d5d914cc522e55d27ab64afda201363678e85374"), ("2629a19643d3171c256cad6405466df5cab308cc68bb910757a4d4ce8665a07f", "03f9a3eaf5fef71cc0e9e0230cbb68f41021d6073e4a784cde6d879414680f11", "12df0194aa5b095ded8e0a8a043f0085021c4194473cef6b59f3f0d7c5c3db14", "01110465f4ddd6068b444e8308e716dc8007a5e1aea75550e83d1a9a0b413e68"), ("1ed2efec3d6bf783117d528f85817c22bd3add12699628c823b8927f5376dbe4", "2edf2e504411f0e98bd275715c97a582bc47e03469ef50ebc190b4ead060a59f", "19a759d54ed08dd6ec0880ea2a67d11c8f603fd760a223f57c9bb15f4c0275cc", "13a08fbf27ade778523797bd424e218bd9466ec01128b889b53055ce2522e26d"), ("11a737393f98dc3a24d8fb8e5ec161a490ec09f9c397e21b9e3cf0b44e0f68a2", "2ee288f7c60a44d6b4530aa63634dda22a3d8410fc826f7fcea1de9b378de6d3", "0b2da78f1accc10860b0939bf2a2e1868867929d916374cc236ed4cd058d16c4", "29c631ce0e4efd9c323bb8da3fc26f3ca3201c7a3e6c55a3b518ceb77c534f7c"), ("1d138bb3952ccaee8618b12b421d01f0c7456f8f812ba1c45d98bd7f54eeaeba", "2be67e0b3b30dbec9ef2ecd9494dba3512e08e583b1626fb06812b8fee166495", "17fac684728935e8dcff6ed66caff008fc12b3ae91fe345ea88420586871f412", "1b810979c05bf3d4abcebc795dad9a1bf61d241ce0bdb56c87eaafb405a2a0aa"), ("158e8fe71104fd40a15474efb44722cf21303c6b88e2258c22b8f2718232db39", "236655f475339d60fdcbfddd4462f2c649efc89af48dbb7a58599814c54f17cc", "2b64b2a1f8de78e0056880a0f84cf0d9bc7d8797979162a0c46568d63f406bfb", "09be0452c9f12acd897444524fcd02e90927883a894dd0295162d2ef4cb5d11d"), ("096454eada40f16e88c5d043096b18ac91e9b5c22af26c82a4a6bb883e0ce23e", "24246327cefb43bde2640c6f96ad5aaaa2ed6e09512b0253b96fb179bae9ce1f", "04b5d71db6aa0e864dc79e9ab0df3ac8deae753b2a623fd8dafcd213f336870c", "112eb63c72e857eecee274c08fbb31650dfa9469b2f0e7a9132e8e36acd43ad6"), ("24e368c682775eb4a22ff73b184a8d80958b7e4f05a9d9164df792fd6ef13a13", "245a7acd762b194023b23de2c597518ab02e438c35c0ae4db3827851b3b06f95", "253868095555e0e0e846a8128813df9d92bff1b4aa2957f0cdffe3122822512c", "19a391118352abf8918581d4ec8593b96c946c7a22c1664fb05b944769714e74"), ("1bc357147ae8db9299e92fcf2849c680a4d0b06de86b758e3b9c59282898b44f", "156f57843dae967040b5876f60b489753068932a3d11cbab7a26087c9457eaf8", "209a3bdc5d0e1eab27527274eb4b15149affac269681f81bb83fe96c0bda4b4e", "1e47ece26daf25bdedb07897f317c773f7c770a5da1ae93006efeaf291ddc719"), ("1340a76a41bea3268ef1156b7ccee1c13d2bf8be9ac6215f78df8b808a8311ca", "154147c65bbe6bccb59eb2cd1ba84d8fe359678e7c923f6d74392db0ae7f528e", "1f73bc877c8c61d1fbd5ed96ccace0c51e8e94a15589a86a0e0671f441ca9c18", "03d8b38a955e31ffa2aa4f9ed99898320af348be1940d56f56de1b652e8586f8"), ("2c9ffc5bcdf5108f7980b9f9010f0bd45885468b3e40c4f710d9b43474b1b3a8", "21c0da8252b6228d3ddf55d93e3417452ed91ebc39dbe4cc1f819f035ac3e277", "0cbc62d4e5682dedb960ab416bd8809b67d966ecbf8a2224e145012038e95ada", "301e217e3280960d20f644e5b0b1aff0c76079053b7a442d6a9110fa1417a7c1"), ("25a340e8561b906e9858e9b88ac038b0b806e31f76bc86a43f142a8489e06f1d", "2c46d782938ebd79b827dec9258e2ea448271407146fee38258f11df98bb7df3", "1450e05ff3ed0461e13379259d03890db928a44d6b288121980869f9810cbf57", "219ef11593d22150f71cb6c381d61b6434bf63006a708fe5d935aaaf9c6e4414"), ("278275e5d7333ce3bd14a59f9bfa1a30f4e5f65f0bf7239cf28b17a437878606", "2f81a836c7d37e86700a6e58b14c1495a8d1bd6cbf9f8957040b9463cf31e1bc", "235238e41c4a0505c04140486813c7bf33edd535eccd1321684ee09dcb6ab083", "17d9bc57ad947fb6caf6cdbca04eec08e38e4e26376cb941e0fe4f041db0993e"), ("2eaddc46d9faafb99cd25d74295418690ccccf955ce793fc114a12d306691c9e", "2da45edd3ebd44cd8e258ce0dd7cc2c24ec7e2a308ae5061bd75b3269cb2dad8", "2e524abb7c7ebbdb7c577e452a9a4aa46cd0da72ebe1a57fd729789223f25164", "1429aaaa25b171661253460140cb0b40625ebba1ccf87fb40c55f22ad2ef5627"), ("20a8f23b8446eb217b1eeb70126df9e53328ebc391807858263067d798275023", "04bab142a6cd08f1f32e53de3f23ec67ce60c8e24271383e903c26b5314152d4", "1617a87669ed0a574f7e019a91f6fd84806e39eaf561f522a43b456862021fff", "2c6132d80b12e16b2d869bffef7e6701085c5ea0da31c464b1742b66de2062e6"), ("07017e99a377916f046f3a3dde0d744c4c0ff67e4c35fc8aa8f5ec498c1a2e64", "168896ee1864c525900485117fad93f6783bfc5aad4b2462890e4f263d02bd57", "0364bbaefb42769dd8aeec57855096e6a66174903746af422b261ca566e40c66", "1acb9465967ca20e04bbcac53717b53ed71d269eefbfe48c8d7a0d777be3710d"), ("20adf9d09e1e4b241842a03a99c8690bbeb5c28fd7fed42ce3c64c22331c581f", "1ae5b926503bc9597e1fc423514b36829715dd79c54ad298af102ff8536cce72", "06bf1a723f544e9e92446abf288dbf867d872d26da69a621aa3676bee191f403", "12103367b86adb4267884e34314f4282fe7f375f413ebee143673edb9e7e8e33"), ("096ffe74b99de81d02b49b6b63cba6d584ef26fdf51681594f70055055b7f37b", "2979de952cbd2762cfcafe36ca657cc5c415fa9822c627e39ff529eba88eed8b", "0fa3b5aaa473e322bfe5e78512110c05c7da111fb5c3686c3c8bc9ae0eeb4eae", "2c42ebfc4faf449fe5dcf32d7a9094c2e87833fb5e2c9d7327b0d3c228133d66"), ("147abecbc4dc70fe54c84eaa901597200da4a109786428428dc404fc8c40b1b7", "2e6b625434d1b4c3306907002141356811c568f5f08448fea40e9d1d377516b7", "09e4353f6988c4728df2e62a482cc195504fdbbbd023b1f9545a24bd320625f2", "0e1b4e909378e55beb7077189f2e1048f6c38e4e1409db4c3bd7ef814b7f2dcd"), ("009eecbf9ad7c699c4674539b533cf107935a7b4c564a5f699d9420048d7079d", "0fb28f5dadec017a64b2fb04d7c45a637576be9b2a13ed25ac876cb606085699", "2d458bd6fa5fad9ea2c64e9fef8e5431019c32ce0d499ab47609c199de946a43", "0e961fd3841cc8166af6c194925980b977776f8c15782aca55898c18b028121a"), ("2ad0a20a78f79ca9598a91d9abf23e60accfd5e4bcaef38b07238d3ac0e0a779", "272147aa2765ebb0fdbec1838fc8bbe7729734a64a633cf01b6571101c4c0d82", "1331f9033d29260a112411fbe9ba8b71541fdf9a1d31695400380c9f0a33103a", "2503550bf8f224f759d46c35a74390603f5960c7a9d11edec0cede91bc6cb08d"), ("280b95635b091d9a169631584cdf1bb4cedab49d9861665deaff14711cf24daa", "1457c5ce4908aec9bea5a6845feb9e63a35aed77ccc3819acbc128fa57a1b578", "05958029575a197ba1a726cf13ef05de33b6d3fc5856f50a8322203595554ac0", "29f40a9bffb5d62cd19c365500ee20ea255dc44a6e245c7e24ab4013d6c951d9"), ("01f33720fae755c72599bb31b85384214e7f29350941818c6276ae1941e75598", "29e201c836f5e4771aae9476957883b33d663e8a9fd72cbeb49d59b1f6a82905", "11f343ca90df257278c469c7c3957a44ef6eb070539bdad64e75efc4b0b46c62", "0d94087f302ca0a21663a53c2bea54d5c1fd7d5bfaf981a0c1e002039df3ca19"), ("180b464a6fb8246fefdf4d4b2abfd237653d42cef5a132e71e9fe3899d8f9661", "2f373fbdf4c95bd3ec75575d4134d11530e96421012cebf0c16a7a82e5c18ae5", "0badb61c899baa93bcbe3af00c0b8463a06005583a0eb1bf2dd2b0782d4d3b68", "2c87df4bca86aeb75e84cb37b6567802d28745e025ac25bd71f862122cbb314c"), ("09e40dfa2abc69d7b7a6f089f55b9d15bbee5c5c21b716967e8a00d7ec3c8457", "1bd7b5d51ffa5a3b66e6090acb88ddf045423987e92384ca7934a951dab12453", "182fb74a366875021c5a17a002ef6f256a8541ddcf307e7ec29cf2cd5f939fb6", "241247fd21e65344f1c74242efcf7d4264c3e1cb56d888173e56713084d4a1d5"), ("0ba2e4731f92b5593b67acada38a319c0a140471def2ea7b05b96ecfa15a3eee", "23e5d21fca65d120f2a57ea6fcd656a6104337d5f783b062c269d2de1f792874", "2720ff7356083478f085220b3fe57d14b05b5713150f3fc152473f18506ea06d", "1a56b29452dac467b4bd107a16041e4fc723fe9e808e84fcba6d5c7551f1b6ec"), ("136c9caa06c1bdcbe23571ef9ef85debb4003be9ec3ea8550b63610d9a61238f", "1ed4150265b42944c5540bbbfa3f7ca7bb84aac42920dc8088e620822cca8bde", "2471c380c18103027359bec4b220de04fe5daec5b4ebcf5d7f47b06f0dd65938", "18af4d83b17aa4d2b5650416e412523f8b1b2578f5823932ff9f32fec40ff193"), ("071fdb43abae36ee15cde7a2078c94cbe093848144177c719e333cc1bf576cf7", "2f349583a7ba7411a0138d2249639f89b148fda38a6eb4deef6a0d4c4f0ec097", "1652ebad24d998fafe516f50c4bfb70be72c437cde30f897bb181a34d55cda8f", "158da222c3f40f564f6f0a7d92e2fde5bd0a1368ae1c995dc0950690fe4c5382"), ("1c47434879b97945c77dd5d6ecc6e421b17257a513130664e9b83871048726c6", "270254e8c3f67e1968de2977f90882c3b8957e0ca05e681ba1fe16eef03f07d4", "1c6f505eab99c20cf9fc64f70c69529ff9b3c8abd72cc6d1a4367145a248c5d5", "007c639048135a831fd428a26615c28efd7b9c7e663ecda4b82de8d83c3bcc14"), ("03269cc04ef3fb457ca5b0bd12c8987930e136c4d13bac0f7c3657418e3157de", "1c65b28af8067632069deba7f3c0f7be82573334a3662919d1070ff11b868b25", "0e6be3f9cb90b47774a294370c0944563443ce0d012c8de9fbed67c49d2a7f35", "21879d89b1f76432d47dde4009164ee34d61c935a47f1eb6161eb69b4a730181"), ("11fa40a7b9eb0929173ca6cae76fe6bb77c6872af64fe9c4035b385afeaa2919", "1b21252bac9fa345a26c551d8c10a888d5b4eb3e31b72b5c104c8d58cec1c62b", "2ffd242ed9b55bec69722388df3075b2b0a9514a333bbd027923e90731141e5b", "2c97d9b71ec86d769914d6e7655d2c4e727724a3565e071fb611f40d667da7db"), ("0b756252d4d6fcf449337ab46acc6d49a1be367a3ae2804b7e228aee6adcfb61", "2263cb8a000cd12eea261548aa56e762d3dcc5756bb6127da9e1499840c348d2", "1d3f46239c75998c7202a0c116d828be198881fe8203212d6f443b063789b1db", "284725bd231a82ac8c3491c2ad761089f6de4fa6d28956363d64ea3146ec4f57"), ("265ab8c9549333dcf1ef904f4e0e81a2feca4d0de2a2b2e30b76acac067d6254", "126d5a62f110674380dfa713eeaa024bc6535cae46270c630f4698a1e8679c82", "11c3c22b88f000ec52d6fad2c699266bc56cb2d81577ee09f4741d766099cb13", "032196a0ad198aa98d98960960e8af1f601e104e0153e5af7197290546242df1"), ("119d6eaf64a5765a4a737fb9d5551eee38f620bda64e2e4ab46453d262590718", "1d92b758836302d4a39735c721ba031f02b2dcaf3551c951dc68a9b6e8977374", "05367aa3c212058e90a0d477967b8effcc7810d1604f4d720a57d67fe6ddfdc0", "12966ee43dc0223ab31f87f16b13ccfaa66f1d4c703fb2eb5d876ca47aa98fba"), ("0a5e367aad33b7f44c2f55a3968ebf2fd46c83ec8f90e76c8f3539091b6057b4", "201cc2312d757fb22f6276db05424547af92628cc9affac171dc43251b5cc4f1", "1669b9ef1005a2d609ae72152e6bf88c02f63b535947feb30eb7bc1abf0974a9", "0d28f8c2279a72c13108b1f12df01c9a6408e37a24e1826b84cca0bef865d0b7"), ("1633106aadd7f310ffccaa72d3f4a9694ae22bfe3a935a4b1df4c39e782d28d1", "1f0fea107799116b701f759d572466859bc8a6fabf3237e908aee592a31ff4ee", "2529d186beb1b611723e4cb98c308e84ab9658a0c743dee57cedf1cd43c3cf9e", "0d782a1442bacaabeccdefd3a5060834f1f3fcda36a345ea86d5a299172c7acc"), ("0e1eae6545d01b392fc3b28bc40b558b6db21c30a7cecd59b86a0a1e68cbfe28", "18846b61463120453e9e00da4e5de4df69e80dfe4e5a09afe403fb629ad1faec", "07a37c65699fc399008ee2fe39196c3d23d083a0bbbc88fdd0b73c79c773d13b", "2209f0039f547af7cd94d527721c318f630673626ed1006f94cebc99c1542811"), ("09fbc07aa03360e10520e2463f8e744bae874e22618fd355bef50b42268a67ce", "193456762047bdfc57f1ccc134e1e64dceb450f39f995e76c1aff958c8a470b8", "0abeb89878796828175f4b8c46b61373b6f63b7c757d9c14f2a252789c5ec804", "2640006716362555ea0154a88a6b5a75ccc7329862c0036163128b98383f5129"), ("2849d112385990a4db93772b29e88d3cb8fe9e55b3bad76938c1b726ef3e63ff", "1adf292c9b30d7501a0933fb0f4bc65338578496c280066e92d968e7c4bf0dcc", "0fa6ca932bbea7c984d7a137b48b847a66e21b56378beb53844ae1dd52a8f400", "1865b5bfb911a7ddb1138d21fa844a2fbd952a01c685d48507cbcdcdbddbbea6"), ("176292c5b2aa18ea294963c7a94a2a0bb4b088ac1c15930b9689bba7a409dbc2", "11dc879c36f2d5dbd6fff66135213ca1c88a65a842e848a0395d40d851513515", "190e5800a14c005efd977935dbb452d76f51c0d879aa3aeeccb2ba0b1f89c75c", "0d58ee9c44e9f938a27c506f8b0aea188b933d604ace833466c92d74768d636e"), ("0b8914f2708b42a854a07b79b9a331bf5e4cf8c816dd3aefd396ed74acdb3458", "119c4d05fc8ab8d677295aa7bf38dd7e1124e27574e785195edd4c7c21707fb8", "0813c7f55d97fef4696e5f661987f6dc42b90b74bd70f833ad5164bfb4d998d3", "24878a73bf8fe78e4526ad0e17d3b8a92ad0809447f614825691fc191af0c761"), ("0662413b720098b6564898fb726d9ce4c55455ffd4ab41e6de81c0125531d8e9", "06410bc0b6ed1fc278656798b47e68d63df43634ec0382ae97743a169f57d768", "081e74bb45d9194b8339689c872dff273f33048346654b808ea6df5076021310", "169379b75550a9e6588d604d3f01909d51da5f20227894b7a0559e662246913c"), ("29e1af62866840436191ec836fd7cd5e3e06d5f3adb58522061e22c3620e5185", "0e262a1c6d5734794157f4f1f7f80742bb942701769aeaf431a71e42653445bb", "05d2c4f2a610a617617c81861c6760480914cb4ca8002a373b78fbc0e305be38", "2695f2e3350fd16753a10c36019edf27701390fc9be77058ac56694cfee59ee9"), ("2ea6acd24453f4d533ad2e1afc85a811bb449b3dd30b081a30cb4aa1f598303c", "014b66599b273e2c82681f464bd01a697da6c00f98c968ee6939b05f1cc0b8b1", "1dc37a8277c79e454daaf581f75630367a1acfb4205827db51a0eed8b4ebe19e", "027426129fc13b0c5be97cdec1c8b7a3fbea0138c7d64d94da792f21c882f0cf"), ("0e46e399bdab01616a5539465480cbf8dfe9344ed85783cd7cfb23b1f2d9fcba", "031e4771778b4270db17121f4d1c8cf6bd2e670a2947b4759793f3df16111839", "275a50c5b2597d79b7e88dedacee1c407e55b14520047aa6101ae9d129b12f84", "00fb4f966046953438257cf1936ca69b12abc0428494036fb1683c5333b4edd7"), ("281ddec8fec77b4c2384b6eefb46701f17712aac9429aedb8b8f3ec9dee0fd4f", "08eeafd9174c0960515f239932a9b695aaa0e9e0f598f0412b90cf5eb0b86ec4", "101aa6d5791358c1ee22e6a64e7d5ab20b23985f5bcb444f4df1b58ac64c85fa", "27829f5fdf04b8213034baf675de6cb0d62b03bd2406b984c0d96d7d01887ed9"), ("2b06daa184425678ed4f9a7b17fc51edee84ad726125e9457638ceb6ea86cddc", "16741e8ed40c8eceb9c7190294ebe03079e49b1569f6ab901444891f7cc3271c", "0aefbb0572024dc5047131afb78c8eab6e4cee4ca2b967643ea32b1c6bc49ae2", "0cef060a12f33c8a3333f450c89c67c58598c60717a80550230e3de99e3ddae0"), ("23a572af4a1d22decb3478db47a3e1f7ad8184c4d01a15129c84af1f13364012", "02f40434de50fd261eebedb2bccaeb63a4528873398768be04d81f9fc9ec7d96", "2909f2a658f9bd8d769fc1df1288d3200abaa6e97094bf60547666fe3b6d2f22", "12c0d75ed555dccfaaa5feda789cdb2f6a264c945bb5a2819a719df6354e4345"), ("0e9528978b2686aa80e5c0452a83a539c14d612d2ee21d6467487551f9941c58", "231978654ee5a860617733d1c484bda6e7893e08c7dafe8d5484979c94f5dd24", "074de44262334ebb3cb1327e82210fe3766186f3474918caa8124cae696fee3f", "19260785ea7d6e43838571f5aa1016b70699126777ac5583595eed92726ba259"), ("271b7f0685fc1172e08352d3bc51fde5c04a53892f764e5874ce58a35e2f1e72", "0a927c21f4881c1d7967b0bae52a78f3cedfdb4caf879f984bb23adea087fe27", "1e7d36d1e1a6f75abc831f561d8fd44d7d0924e815075f3747a984c6cbac3af8", "10723e4d43ad56700a5f5d6cd91a1e1765736c37aac477f19793259d6b17e816"), ("1229c2abc7dcebb4bb364ecfdd95c6889553b22b628363f7dbb42a3395f5a22f", "2a6ea5b32ad29a07ef9b11a04367c75ddb70ec5c815f9a2ef1bc99ffd0cb1268", "07d99e0a6dbc62176f0a23279fe0de62f62b68c72998905dd56b0b2a7852d802", "03d38320f20384169d9e65778de3eaa60fab2db8eda0be121fecff9d623e1700"), ("1b26326eaa4d207470cadf0edd2bd251ed9e9930ef9afadb0f87a979a14f9b48", "1afe13ae076fb23e8dad5b2ef71b473aecf761b7b31b1adfaf3245bc4b207ec1", "14704ccc28f898dd93f2448a66849b44bb3ea0d86d8a8f1a6967209e4a1d0db3", "2d1ee018b4a4a2fba2b320ad5c5d6f70004e6c94523657b81b404f493d53865f"), ("11e0584c4cc3f72db487fc9ff8cccd33296553ba26831221c5f29aaf2d4a184a", "16607f453ca23d0160ab047c35c4e3067312dc4182afabf9a531936847a8f569", "0e5efa620df93bca0054c6c9741446fd383f7d15ea802c360f5155210fa1f1a0", "1c866d767360928e130bb91b836126dfc552ead1e0b6547e0dc3c49ce4091580"), ("058ed51425442bc8008ff483c2c86e2f8791facbb2dda826c6f8ca744720ca8b", "05960ef8d67c6a649ac8abe5a424ad50052d7f4116134dc290bd6522b617e69f", "2c80f07b7dc653d8e2a83a738dc9ec98263e35f532e7a617766cba4677ce5765", "0c72cd9ec6e4ff32607ffc4dc66f0e7b13fc28a1e81d0e1c907a183bcb67b46e"), ("198e8ded65eeb92fff0df2dbd57251a807e98834b28bfe91537294a94775cc57", "1fe67f51c9ef7fc632f23e444af8c74f0faf97ef8d8e6c5aa587becb00ac4b1f", "2381a96bf830dedc4ceb99faa12b1a79eb1f57f85c4d40357761c3fa84f2ee61", "1d1cc16f1e2d28cc7ae4779ba960a38563f363cad7a01c310e2a1dcafab45c80"), ("2897e170f4e1563ef5be1e2e38c6be525a5f1a27bb98382da71ea42acbb35b1a", "2a8328f7699255c0ad50b43ca7faf48081173d52574ea9c046c4aa5a248495cd", "1e9287e347f4d384017659c4e3e7de55fbb0ffa505049d4623826532783acb66", "244a18aeda239debef393fecbef2d6e7100c945c8e5d93f69598bb765b25cdba"), ("12e6e48cd81207b04b0242f50fe6370925524d031d5ff3d725d3f006930de5de", "2c5cd878accd1c8c94e47660fdc1988227eb7dcb9543b00bbaa3c376468b09d6", "2539b42d4ec92968a42f009b23cf921ef9227ad298a753633b0ba7cb5bfed12c", "254ad786b02a6f530e847ab10ff7e2697dc84eca62062f07b35f8ad020118ea8"), ("29f07b47eebccfc8ccf05032fb29fa42aa90e4dd895e846389115d152058adab", "06d88b6c258c66d0ef116296547c62350b3eed6460ec29d76a5cd14e0cc2818e", "1d681cf6ef1e316398004868dfb526fee8682aba413837be3ac9d179f56c8089", "1aa6e256a05505961ca6e0f1386929841d7c9291fbb5f789f10b6f488f321d77"), ("0f0281503023c1e79202bc50320bf915569c8b78ff7be383f2a333f97c5e62d5", "28dacc49606c818e9b0ac8248fae6500346c3632f7be06f0d0bd80b146743d6f", "100871b69b750496b003488614d5154f657a28507b57f82e2f6079b529ce1d28", "1c0dc37fb9394d640015b9a676410c8ea35285c580d979c4f35577da732f357a"), ("2dd7c32dc36ac3e24944317af4d4a9f1ff158aee8874e5a60cfac3a176e0bb06", "1867d72a863647ea4a900c8f4066e2a4267b1d67c50c8416bddb0e067e657e2f", "21376af1516ea5cfd5b0cdb550696a141f3483e5af2c1cccf8ba481a32749403", "165087b7fa8c7c94f5d650d9e12eb2abd9ada4827e7f669d7cb71c266934df31"), ("1c5d81646c513e189a03c32c58dfc173b11302cfe458db1ba1fb5932f9e2af22", "27890d12c19038024e2923ea0cbe6f4b2a9003bd119a4de995d018354749a6e9", "19672223dcefb284df5fcbfa9091a2e7b3901e0f795c6c854fc96d62c1e88573", "055d32e8d133ff8ac760310e93c6ee896364e1b6c3c11e7b69f6f3d126b8b395"), ("233ed400f02814671d0641f784d4168afe5ca476b242c9a4f29f0f6109b41e35", "04e81543591799f98bc36045e482e8fa97dac85179ac56864c8a8e52bb199058", "0400539dfbeb0d4e324ae873fd1c333d58308b541f415f0134af9094d3046fef", "2dac2328f6d0d9718fc29cdc83ed95521813d14bee0094a029e0c8568ae1c76a"), ("2b218423c77c008820da9fa0a86943c7b86fd4bf502195ec62653891c306bf8a", "2cc8e8c2cfbdd6ab614c97c5f3d7f6a0ed8f253f16c2f5ef632abdace9931d81", "29eb95cbe839c674c4f292aa2c6f3fe724b56cd1c1d4eba84311e0ce8ecfb3cd", "0b1e31d01a60ab78299a1fb22e847e78fbffdbe76a0cb8b76e6240d9fe95371c"), ("1d51991a236cd1f200f75601d4a8150478fc76582eaac691e447a6ea291b264a", "1fe1ffb3c570ad6a1e711fb0f2ae1407bb13d582ac45eb271399ec3fc9b8694a", "27368c26bc6f131651ca20c13b5d08c705f8bbfabe9c74e7221f0e56ee6d818b", "2fba0bce0671503d9f47549876fbf9328dfcc64397add169a562bc4b2926f4bf"), ("10c4add8a8f1d7a97970272dab3b4052db8cad28771716eab7ab54ceff753b79", "1ca512ec06eb72514d986ec73b75361ad36f224aaf54a489e30cb3ae510267be", "17ecbfe9ffc2a8199110881c3e363023d567b9f151a167010cc3a2c2fb12d02a", "1c4af2848b19e602c8461e5791394632f2b835f182cc94674ead3d60f004e520"), ("184fe654d6eb057b61080c6c08a84524b4af6ac24a23492e1687058832d4aacc", "2ebc07cd216d51aa6af09c9c35dc74b92308e38dda51fefbf613666ea2beab57", "0f0da0680231960db88fd22705624bbb14b5c1227f1c0ab7339d4d2097bf8ce8", "200a2bbdc2045def690c2179d1fdb57aacebd96714e658c148d25f527378629f"), ("1b6ba2e49a4978f4c413c54608978bccc31ee65bf7aa65a1b20ced3148955836", "27e87de1bffd7bd9e3ca693a9a916e3af047597868b51cc0045ab7f801b3c245", "10b19324a5455a8410ce7c08b54acc45c62d2422f613262a17aa594f528fd055", "2c2cd69b29a678ee212371c4dc61093e38cadfbe083a96593d3f713add7f8545"), ("2c75cf85a2e4320ab25f1fd7fcba668da61b674041debed489a7772a3b123ed1", "209a55dea4291c83b29a14ad93f94fa8c30465d71fece4a96f982dd044466748", "1e4cdef5710176a50ceb4425f46085a8a3661d4566d54b80d9dc3bbaf9f16c09", "1c7415c160a1551518acda400d09b8882fdeb57701e06e247f8298eba2792b94"), ("0ac9e9db72a56b62c828f72bf0fd24fcf0f945ed4b1a69db0520cc69ca34c343", "2563e6bc472ea3dcc6a4641c420493462f47414ddb572ea581b30decb83af052", "09827e2316488cadeda5f77a2df5a5ce203831481d02a58864c5824b50b7c6ca", "2c98cd3d762a0cc22640badbf324720fd49eefd9096aa0d1fdb696778300b3db"), ("23fc931c90b1b9312b8f825f9be1fb4fede422961aeb4cf686f67a5204049338", "22ee7edca5e2168dfb08ddb21bfa3d2ea5b626ff6695152761f4d58f823ab6c6", "2cee20b3e14d9d47d9476bf026092be0f4ee7a5803d66b3283dbac7512b36c81", "1cf0aeb2ad9745b317b4255e6ff679dacdd0f961d2ae182f3c171d4631123600"), ("0d14378299b9fe275c14f48c6595fc5cfff56d2277719eec15a09484d6466fca", "1bb9dfa12079909fefa3af2724724607273d78759d594aa3f78c0f7c9d35adea", "2344b6e3b96686427571eb081fc7b197779982c501ac7a14d6cf7949a830a9cd", "01d992c9f3d76ea5f9067db5bf1b6a68727146b86420eaf0afafcae380c4e232"), ("1e99c5102442f888efc08f1ebe212fb60a78464a15f27d80a2796595f623ee78", "0e6df177547427d6e6f6bc910e0115331a538674e705bca235cb98abd3b3efe0", "135994d0f409b77460bc7ae6ede22e85830067344b0be9faced52cd818fe8f70", "01ac0e849e5b8df5471af4beca9c453d6736149d3b462d83671397bb38f28c11"), ("25a31c95570fd8ee4b783bc897ee3f2ad63d0db0325d01d0d4c5a7db8cb0fd28", "225f68d7e9cba75589b4a325a079859d3f3106e5b2055c8f2f160855524b1148", "127aa864041e09b9b8004a0e81dfd73f9f86da4221952145605c78ee1f374a83", "2534f3245f416aa54bc2f0b428ba401cf8f9d4169ff43b19843a2352843321b0"), ("1c8ff4a2584d1de6180837190fbc99c37db6734bb6dc2844db7b8897bcbc7c5d", "122951403265324306889bacfd20722743cb4a53a525f2133780fa627803d180", "238ab9a3cfc7adc9975353661d2e925b3ad9b9588838bf64523ae4037bbeb13f", "05eaa2680b5ddb1af5045c021c64138aa6aa5532c250f2d0685246121267cacc"), ("2f4abc68768c69ff2ee4a8afbc27dea6c7ec9f8cdb3c82bee00b2ea03a87c4bc", "188414eb6f23896cdb0e56c64f2c45fec9e34e9f2a287381ddc0a0a03e9bd426", "1f1a686dd8a9156497fa0d4b7a07db13244eb0d78510d57710d792100dcd09c1", "073279d3d5a85086d28378a89fb27eb3b529512c4be2624c59bc48c384196158"), ("13f58d609a20d29052b6429e5ab014d83a87490e5cb090fada9342a233c3b114", "0408313a8f245e5e712bb9ace5a254761b66994da89097dd9f37706b1cd5921e", "0f4a825ed88b3b41ca890d80259af5264a98bdefb5f6bfc04e5c2cabc1a2f40d", "0462e35e185785347be73cc74ce289b4d9a91d14db7cff01af83ccf91db6c074"), ("162392190c12554f08d973c52e311a9bc5f9e2cf1b6e0303e326dc54e470eba0", "07ef877388abbba5dcb30066de79fc02b9830c3f96bbd0c17ee147f006481500", "24a0ae662b43a935d6345f146fbea67ef7db08215329df92db0c900477e07296", "1367968107365b27bcdb82d1df674ec6c96627a44013a831607ad36b1f6eb9c8"), ("26f1c999e23c661239119ae4672517f3fa8c47e758164668d6ea55836f34001a", "1f25125d7230ceb51853e7459e2b52b28f862ccbdf4579522f281bba5a4727b2", "058d22272c72ed0d37dc496a7a413799d35745dbdafda8a09030c4490c213ffe", "0c3b95163ec41a6819728355b6d0632e9c8d78efb822491f7c2ab07bd39e457d"), ("287403c75e0ad61f466f004c75c766eeccdd89e36b7f220c105f82066b2b6367", "0162ce4fd2d07f771f43b001d84310d39ac2dabafe782f2cdb7662a59817e999", "0531d0a15e2c8be835ec3f61d4a9d2917e879851b1e62f717db0884728e7b54b", "1847d6e21caf3285ad4b43580314707d6390521ef479b24efae8bf6346e08f3a"), ("0bfe1c2f69b66ba4bf95fad4b6076348179a61fea702aa34462f5809c05df9ad", "015c0590eb9e98bf1179deb9664e80cf56002e718d9d3f226f005cdc8baa4e65", "177e5a523d6345348248710881723bf9487d6eddb9608c247845c7868bca637b", "0693287ba75b40823729eb6bcb8a833d9f3d7d6bee031842d29789ee6fede732"), ("2df698b1337bb4e98a097143369301d49e50367afbbfa55e3cf1bbea6590263c", "2bcfa648dbf0874060b6a545d6b134d319ccf000fc72878faed8a1e55f2bbc0a", "26c82e7ab0a3c6bf7665889d418cd896aea9f2304234cdbb2680b3a2117a1ae6", "104377135f239ac1a3610ab99c84b00db1877383747741020097b0c90aea9d1c"), ("1e090973adce395a4dae4770a1f2b5a6ba10e9f96a42723da41af07d1a0a403a", "02d210f8beab296af1d0073ac2cd986eba03117cc5b52d9fb9ddc54709c0db7a", "29b103c3fc598153d0ffaea2ca0676b87e6072193f6acc264da4977cdbcad03d", "04b43fd84950305b9f79d6d6ba70cee141d2908b72dd5b4fe37f3e4f6e26d193"), ("23dc211d48973b59d1f61edc141c6b43135d1bdacd8035dd3f1b3dae96d420ea", "0f2b588608fce558e2ba34e83453988096add3fcd7b3ae9fc6e4438619be1ec0", "0bed07c4d21878dff21cfd49b21de0d63c2589a496d378208f606cab395ef76a", "1343e7ccd64545bb55af2b57ec820bd242c462ba9cb3e7112645f126a1c69c6e"), ("25e19ff79d2352243e6111b38c9639d029a4655d1264170dd6eb00db2685f5e2", "2e94fa2162d235df6cb263816d27ba953d84c26dba3bd2a61439e29591d68f80", "117d17d5a8b13e0a99bf191b84279dab39a505647cef8e62b04b659869c85dad", "2fe1d75a46d4fc7f90f9ba5d316324e990a5dd7f7a9b62be227e01c359c9a635"), ("061c25a3d77be417b1c696ee201949dcce3d6205dd53439df6407c0d297791c1", "0911bb49f06fed56593f013a656328e34adb4339e1698b18717179f5b491dcc3", "01fbe26b2fce523b51e2af68276d2a441996eef07928187d352a1ff01d63b2d2", "00c7a3c667c74dad942ace88742611f3c1ed7217d609589f61be0b1548f671c3"), ("0c8dedb1a9e40b2ad7be48fd527c900aac54457f151bd6b018806ffeb31cc25c", "268c715cfafbf317343ff2b169c2d38a9828cd9dde92b20a45640258906b30f4", "09a164a83d4981be4fd9fb74a14a1b7d389943b1f88816e48b29d7cb0d1a8fc4", "007ab211a32e99e35ae2fa82a7f855c4adf3b7e481d908c222d49620ff43e0ee"), ("2b71ba40efcb56e4ee23b0ee719877e2ae34132daab888b474adc743b3413168", "1554b5bf2fd69d3ba925bf580248da97d029227d42a770bde4643ec285192b32", "258eeb1537a5e80c33b83e1b88188c4d37893ad03017ba28629e405304ead089", "29777be45bcb5592bff7778a956fff23d680a06d6993976b9fd1ba9e12fbb6f3"), ("1966fe55ee7b5784f4cd7378c89579d37529005fb65710d48003f2584b7025b8", "223d86cb342d03558a80d0aeec2956c2150ff1d71a50b2cdcaec5fa3d6a53029", "1f29c3af82b2bdbbe537e2522fe650dd469ddab25f74d1f707bcec6949bdf1fc", "2ba493661b5dbe431377527ff4ce5d836ae497c27f7d35422f4671df30877abb"), ("0f76b8b74c93d6aba739ec0200572dddb790e7894cfab3476662ffeb5bd04070", "1b48b0cc96e21b5fe8cd3f45d652c3a15069bef5ed4c37683c59e8e11269ac63", "1843b7aa1d0689450a1fe27397b114e7e21c90e74f7833d651525647dc03d2e8", "2e05d8a151976df7cbc3394a4d960f7c314f079e786e09e5c1d692c675ce6974"), ("0d9385542d347d77396577ba1474d9b6a458a6d12a4364bf36fcb67d38223853", "21edb43a204ba4429b2b84c675fbf611914d01ae80ffd652e654904d50f2ba28", "06f190d7fb91af78bbfd0253bc5a1f1677d8605efb95e2983ac0522279db85f8", "14bd96a3d573aa699ae9f829177f33da2b0c962a8f58d058ddd60624aa153a1f"), ("1abedb18d1e002e6588c730499692e7b1492d3ed43466b3fc7f9c47329cb8a28", "1fccb1074b54c6c8eeac02737079914bb56c8cb9d1cd714ad137677d51cfdfbc", "1c6e93efd367c2143ea37e71498cb46721f8c274452679eee50b9dff5d009837", "1040e2015700ffb295fcf8d2e36e14b51ea090dd5bf495c7d7628280b1b72a86"), ("2a5a820d4411f3b6b8e05011dc641db4829d613175f7b3bf6439848cb247e34d", "149926dfc8cbceb4e85e851f5ac973c5c0014d1235d6b0bddc438601b964fa2b", "29963225bc58089476ccdc90219b291eb97c4aeded5e86808e4e7807bea71984", "042fba1e527cc353d9fd55b82150e952fd9e39853bc1b4e6d68a6fdc6d70ee99"), ("0138ff653d3bb4b9e3b7b4561a548bb25d4ceb77c89fedabffca6af5e7c77a6b", "271ce49457751768d80baa3fccdf523c2666d3461078c89c940e3ca5daf758e5", "135c987041025bb96ecfb23696c4c3799bd0745460d067e5e60aec4eaccb7cf0", "0a64f610b39d7c9944fd4a2941317c8d6670438dd6918da06e61529da23069da"), ("18099b34277a8b5eb8cc2b22ed6a01904e1aa857cf4af4e7fc6dc6cc235320f9", "136f41f261afbd11dc0fd28c72c716f28940b78a5fde3e153c0507ba2cb2e793", "05cd84d2ded35cb5f2f0581028a382768cd0aa7d1a279e8b710b0cf89dea6767", "0681233c2beaf2d6828c8d57c27bf30e29c4465aed19b0dcc272a541c2829fb1"), ("18e0aa653ec9a1177492b443797ad911c8131ae6e6ad502a7ff8b83af47dd33a", "2f9d91b04fa6f7e1ec8217b96c43dda03cbc5e782747ddab7532c96877edbb5c", "0f07c0650e47fc493b98bbadd53c8e92481a1682bcf522b74960a024b8d76b46", "185fad06d754c3c92637ec2e81a85ede705a201085be7d7c4a88f294bb11f504"), ("00e4177ffe9e0ed04be44f9436c3bb06490b32dab5f68efae50c77c58fa008ab", "00f4396016deb077c6e68d37bc642f00e3c70fd2a12e699a4896f311a1ac566e", "06f8d5b49bd0b2916f07f3bb0abb7033f952cbb6342d36285d05b70deb4c9e44", "2554e15522b78744aa519cc90010e8491a1816e9419f702732a7e70842a55197"), ("0712793d062912a100f0892bce2d05b6676ec42e494a1ef2cfa4c14d44b599c1", "27307708d8d4a7a3f27d88499c7d4c51b16a48cb59bdfe5460236b19d42a4ec9", "2791fac13cb6e70a2461ab756210d7d58ab58cef3482c329ad97e7491dc5ef08", "1affdc16b5841cc08218a7fbb43e198762a54042bf60ef36a7df69de04fedc51"), ("13a7e3f21c0cf4c74cb4eca60762cdd8cd74efd683ebcbd67cd16c0067f230dc", "041bc7e56edb445ca927d22e44debc5e5dd1162722d61d9237142720e1b57e05", "0101fe59137fed333476df31394d072e8756b47ec80f9151bab8a544d9ee8e24", "16c724968cc4c3ea2b889e4230001d7ee851be2078e3c1197fd2efdd38577c37"), ("0253ae3ecb099eb9bf6075e596eb418ce316a8531ffc4141c19119c12a8ce3fa", "233f08a0986e3f4aacec260524186b61219a4d0d9c99f45a83f60f86b37741de", "1690f278adfccb9e39ad25ff6fef27ded7f5d8a5616c7aaa31d11216174965fd", "13885a9f5207f5fc098f7c9327b634d17c1480003984c197999c6832e5a59481"), ("0ba8a047b19e39fe9ccf1307ea08ffb48bae7ae951c1b143d19a93ace0f7df5d", "0a3f5bdf15143201aa51e440d0c682ec6d9711e21f0c1bacac43f4e014e666a3", "1af3346f10a575fd3b1329d0f5255ca689700a49625d6f9716d11237d3fba803", "2c4b636009060430731ee1a97bf1ccc679eb884e52501b31f3c1f2fd718eee78"), ("2d51fc9bc9798c56b902112196507eae987e2a1bdf4d038d64b76ee6343e9072", "165056e52952f9c931974a4e2f65fd492fadf2b480d11e36407f435500b6dccf", "26763d2b0b6d7e58ffea7163dc4f3872c381dce8bfa07c2427daecdb7f4508b9", "2539110ca329bc3278ac660849176f4e4ec9d524d3018494f04d8609a58b2ab4"), ("07ae1aae65d0abd2ea9f9a6ac3d7970e41a5ea08fb5e8c7b2e3c17d1ccf82837", "09e44bdfd200fcdccae3c57d3c2ab066d83bbb033fb8f871d967385f5c1f8877", "229c61f6ccc98917bc88ce95d32f75453d4ff5e7df785d3edb36bd0a12e54e87", "29bb11d3a6f40f6f9d5ed8702c720d2639467c02eb93f832a6b246957fe9171c"), ("0327cf71066bd99ebc1946422291272539b59fd6039583ff2c6af8dd53dae11f", "19cfb4dd832e203a9e2c93bc654ac51754ec750a891e4925498255a67b3e6908", "0e61130c74411a1c1d3214b3760ed2f5a3c55f0596d56a0d83c8b64e07a509e8", "0402593355cbfb136f9d5019f0b371f6feaadad0082bff99aa25f948170a7e1f"), ("24b83c5d31279e5fd3e4aa858085aed6d90220aa9f24784c3d7157fc5bf7754c", "21eac97ff9a25f1b0092b7e1f437c29d39476be6b23016c7ce5081c3516f9fc3", "2cd2faf239fee62c7d502e2b3b60d6c3388be2e1990674dc77a892f52320e76f", "1037a9c5862437f10006fe030b57bf8ef69cf8cc726c3856568ce7d49127613d"), ("263125c9dae42546ed8211924f056e9729308ea2cf36e3c1b6141fa818c3347a", "01607a4d6d6ad1bda38ccdf1d08add652d2596fde9b000499c713e82566ca7d6", "0db800824775f4f258fd6afed9270cfd2a256a511c3af6aaee8ca71c6f690223", "29746c551e5ba653e8a5ddb6052fedb5643f0d747ebcd9af0d9413bac7544f14"), ("2508c7bdd3723ed4631a319fa8f5d290fe4a077961c660d77c22b8a18f9c9b4e", "2b82e065f509dd546988288e40498e43caa6b316c189dcb6cc1d894e43c771ec", "277cdc268bc6cb73397a1f982dc994b7f867f1b45c8948736e4238c657e397ba", "19e1bfc71fa735f1f4778a419966d0caaa10e1455b4f75153c560882396d47c2"), ("23fe15cc3b3e623dd75843d95b2e41bc3afbd2cf0603a32fadf51067b7b56503", "137df74eb2c7a0504189beb18fbabc5dfc2e2a678a2a046e63b1951b5dcc96c7", "1156a41d1f2e77af9fc0bf3b6aaad132e6ceb0a513d953885bcd9c81622a23e7", "25b772fc7eded8d6b1fc0d8e631af98de3cfd0200a66830b79f877c0eac50801"), ("0944365b2f2df6a62cc3a28f7284bdc23b34e70d99a299dcd8ed7e4f23983af1", "1873d4bba5312219452277d76adfe0abd7502c8e2f19ec26e68420cdf29d5e9b", "054e31f0e9b5a29c9d18548f2a71a23f4879e13885741f265cc3800e6947a226", "19b934917587d3904e5e93603249f41737c89d4b6c0e4c76392a902da2e3e16e"), ("2dc0a92aa3d23bcca670eb32a0fdf9993a6e4d1f709e1937b6e2b51b23f73b2a", "0d3cc10b063cdaab2f444db7e849489b6a5cc7923131aab5d075de112fe63ebe", "084c427412d9503b7d39980e788924abc39f3621cf3150425ce1ff4ce9cae727", "2000b4858044b7dd9725b893ee51881d4910633032f40ae7cdee375b80637c8d"), ("096a6c0c4a97fafb2b26416ff9661d5bb9d15e6cb2b310b7827a036f29e07168", "01c9f4573d1c2a5bbdd80d99e86d4020d2f82dcdffb20fbd9ea3ff8677e0b21e", "2132f37b88b7723cde4c551f886805973c1768bb6dacba38d9ba1c5313801aee", "15cdf6a3da68e1ad942d2f11e0c382f1a2aeb575fb47dc48c67e9c9227efd1f4"), ("2707478ea2e883e636ba8f20ba553bb0b245c53dc9ee8c0fc479e88edf6fdc79", "1245fc0230b49fb9f270cd58e07ae817c784eea40231a2cc319683e1579d3d38", "19ae406abb6e9b1ab4e6bd65738593b3bbee119a3760ca4d588f5876d453e97c", "28f2b52256bbf5a56c9faa9aef7826f5325e5cf8f260b2f9339f8325d4b00d79"), ("139c272d3bf38ea7f44dd49bd571e62656d0af094033591c7673019be9b29bfe", "108ecb5f02ecfa819f8008f531fb3ed394d52fdc4aafca797c55ea4052128b5a", "2423e106afa4be5d3ecd4711c8e3d2e7f6213f38dae12e8801360740d6c715bc", "2b6a53105759c180eae75494580c8a227c34c360b769b056069df6ed14ac1f45"), ("13bddbfcdcb8a9be90df686e4252a1ab1f715e9c19d5f7094e689b9bdc45fbc7", "2086e5b013b3ef771397860825bb7932f19c6e80056ebe4c3f15bfb790784fef", "2450373fa22e12b44c94c6c82fdf959fbd72f4460f294635315aa7d8743510d8", "08be499f55c553d0c17f6a93fd47a54e526839da20d6f5f8f809f941cdf54317"), ("16a0653bd7a721bdb146ed9fcb64f2fb9c4e5efc5aa2a8b28a6bc8f48a1803bd", "2562e3d7bfb7bedf96e2db146fa1b077beda240f72d5fccd8e8be935110951aa", "17557a33ea39538aa2ad09aee2cb03a7da1c0db6e8e5a8a1bb3b73e50bcf6929", "092ff63cb25676e3882bd830a1cda7212a7f4849c704cc2b31b39b2fcd279a94"), ("2c6d43720ddb4e7048a8e54cb54b8d9e3c3bb1355447080611c469822dd4969c", "1148aa0b54a045c4be0c5529acb26bbfbb5a1fc5e2da14e564eb770e0daff324", "22fe64a27648ddb8b0ac62445e8c95651304fa9d814d9c0f13fbdeecf7ca8dc4", "0fef6bdeb55fee057d6d2db55398bfbba40cb1491cd541107283f1750d2e7d5b"), ("2c7f0dd1f11d52b1ec873cbbc589cc4c2c78d175a779a329942fc8c70a1e3acd", "06d2bd201765996f32b0eaa1852198ddf542de8101144c63de6667869cf28da7", "1bd258395233989218da46dc1d345cbb601fd227b672e884aaee1ed22fc71488", "0ebb28360129e89c73b06832f0d79f9f7656b284b5f4e23748e54d4abfd41b3a"), ("117e1204faeb21b0234ba5f280577c6295790d2918d212d8e991c0d9c4ce8260", "1a482cd525bf5a82ce02a627444c0b9ab75235c9931f7df3a574cb593e3cd9c0", "24e1669c1506827ec839da3a72568a3a0c899f1385514b2682ca6e6ad2215952", "180b9f9dd28c3140a4889259d2fefa7a56b9ab4e8b28b04c10a2f0c2b606e881"), ("1f7b646d8f9c923620c0ef8be03109bab470706eedea7be6a047bb012c0fdcc2", "207e2ac819e94bc3718125e6bd2cf6afd3564651f56740734be53af4424ad7b9", "0e895801fb5c0b7a3c05239dbcde43c3bcba5c8843199ee459f7bc726bdeb129", "1ec62264f7bd0773b4248e8faa10eeec819f871b26338202e7a5551b0da12efe"), ("19473ac6bbbd38513a0ca3b4cfc3f16b824b70bc627c5a9461dc35e5c531a5ec", "05580bd24e4ddb80ae2d307aca249323e34f4baca2d972d380a7b5b0682ce58d", "01f2ac49bd284e9297114ddcebc45f20969a8aeccc02a071576e49e0b196c467", "2786ed25d0a20ced64993b6513c8432170030ddd8dd43a6298f4a67f37d0a13a"), ("04c549c50bc2c32c774c32df7a13cf9e10f00ac660d7eeb47228b6c32d26a003", "251c78517fad927e0f94c9f6bac6784b892fb28e4106d541eb3d2fe8bd801ae3", "288c29e43d48b86433f2425a55fa6faeea1d3e339bf562e747755f4b060eeaf6", "19113c8a071e5a85e75f3fa1b2ffa878c9974129b3606803f06382c9b636319e"), ("2605af7bb5f41df59d32f3d1471ef1b5b12f2bad4c4e708c4932f0e43b2b18eb", "03c7851d370dfec6b79c7db9fde441dfcc94d10018ae9bae5ee9c0050146641b", "10cf856fca9bccf7d7e35f4e1f71996b49ede631f673805417ba6ba08990e05f", "067b4a2213660f915d171cfd393e71a0e0aa1543a44dcb69d5d39a939c694684"), ("1a1ee3da9e2257d318507b5a9c69e5698f78b00e1377f469d09e2d1814298e59", "0b50eb7917f83ebffacf3d5b8fc289d93c15a4af7ab5b2c03dc65ea9e0851ab7", "03af5a3d7c1b726afd592dd3e743c6cad2f77cc7dcd6ef1dc66c8b2e008f1e96", "01956ea11bc616b1a54ffa0f034d23e35d8bf68137ff023c26347648d4be5070"), ("0d9882534e8008adf248b6072248ce6d153650e97b4dfdc652ea42637f418f31", "2d409c4ad3687620fe7f4e7ad49ebd0b1bfd89a8360b93a509ff59afe19ffb75", "0e149632ce194cd3315252e99c6b0e825be57029b7924594187fb6d6b71a688b", "19075c1bd198584aec2d728309d8d63b875dec75e6d27b01bcd877c38df6c46b"), ("28b1d02c17fa5c13953cb3654e632ffd82e4b051ade18eabab94bac8b60f4183", "02d99c58d0b3867941f79dbfa5d0e87113f78419b28152264753b982f4736c37", "211320cee7151a5cdaca4e3b7e88d00ccf5cd5d3e8df50489c43b43af3028bcd", "264ee901b6bffcb056b8748ed38cc1284749f66f620b4df722f6e6caf2c82b92"), ("12eaf5c0053cb25f9df838e311ab6a19b93c7f5128608fd0eb39cf1dd7b6853d", "0a03a82a7a16de9648a106a569e1122961df225f53ece8f4e695e7ed9ac6e92c", "2735d2d7f758fa4fe1f0127e02d6d696fc5d0aaee7344eb46ac0785841c65189", "273ecb263d759fd7c7378ba038e9366db5bbc20afa6ca711e861dcdc57d21255"), ("0072c66312c09531b656cf91ea237ee284ffe604717c6368c938ceb8d7c8b083", "09b5d42c9f325dbb1882e5fccd3ed9791f62d4d02c4c09a287a509176dd1dd47", "20299fece85b56693cfe034eb2523171c0a72383534359f339abef09467a46b2", "24f1a049d972d03737f01d312ee8b78b6291879eab731c915551c884b5e323af"), ("1efcd5074f67363a6f7800df2f2c1f2dc6d1b0c92482e1337820ae3854af6222", "1fbc30b959f7510fe50ba9d1e9df90b1511d48fd6579a90c190fb3f4a8827c0b", "0fc49e395b8c607292b55de8728cd3759269392b22818e0b3c7cec137da776bf", "2c38cd4362c11f55b5f91c348d0b6b2bbfb9f4a69fba31a756be74cab5ee0a62"), ("0370ee2afacebdead5a510e28b66ec940a572ce483300e83225cb78bf6baf4c7", "1e2dcbe0062f0fe2558410d72319808438379fd70d5411add6756f7307c6c81a", "224bb7d6e2798629c601f5e4f475732c1897264a36d6dac2851cf1579fb2ad3c", "0b8bf0c3bc6a8cdcbf6e912dfc66cdea3c5316ae413cce021fa915a41c7bc0b5"), ("29a2435c4e6c02ba7fc54f52f9762761ce26dcedce0820e63f4abc2d12c2da5d", "1d35c0199877fd97df826e2e6e9e74cb1e0bf9605ab02d7eee5cc7ca4ae7c047", "10817e67ccb1d79618c766c0ef56d00bc1a31dfd2337e0d9fdf42c0ff2b4e91c", "05e6c79594a62b1d4d4d7b8488476c217ab6f1383792a7f44b268386f5d64f2f"), ("0fce60074c50aa1400bbe29648d567afa85201efee8b5e04fef6f5f3876b2d57", "26778725b9cd3c72342f32d63c482f9ef3071c5af3d3085653888ec932db3ab9", "1cf0e947b098fe6f47f4514d4578e13597369f77ed94acc186fd31a37da6b563", "0f43b8f5b5347622a4a3671bcc8d2ac10cddf69957255c9692c39a10e565a0a1"), ("27e9ec706bedd6ebbfbdb53b5045bb048011bc959c9beab226912353bc7023ee", "2663144ec7e54f66986cb7a998fa5c98c7705c34689d3801d4e5332489f22965", "0aa15d6b394c2bdf6079a8296fd81a801d2d797d4c41390c5c4cd9b8424237ec", "1e2c653c69f936bc8499ed100d361d2081ed0c82f5b10f00bb7d09310aca643c"), ("07bddb409129ad031316aef303385d6614dbc695799c561ad9b7decd8dcddf84", "057a3debdeb137360207da8153a07a231455be0e34d80ab84230216f75e6f130", "056e0a8d02fde3f75e51733d63ee22c43c8ca52e15a0a32b1980c93d58278371", "18da1b2e5c72f797ddaf9b14c3cf919e56121885fd6bc775dcd609bdff69bcd5"), ("1e9b226d19faf34212448b8ea7cffce239892cf1962e9248e31794b750e885d7", "0d71ac0b6fad7a8d4a1cec3ec6b9c51aed87976191ece9998b34261bdeb029be", "0c451c42a34f4b13e086981e6c7b952ab497cb6d5b40a0887b8c97d5fd72a5c7", "1dc41b746f91a376d00d64c6bed8a32a8da673ca2110e988a951233902a8f5da"), ("2ffbb72bacbc5bbb505c040e33233c810132b50a3e616d9d8f4f043442f9cd07", "0d637fa7e62c08606331f07b093ab06eee3a654ccddb47fbd373150a0e225dee", "2600ff521298e7440b87888b5e9483ad9f33bf76ecf06707d0ed32b3d0e8c1cd", "20cc3e73ab26a5e37857cd17936c054d514605b3f3210aa87c8baeace15c60e0"), ("20a1721231c4dd7bd3f0cfab29ca08d4b42f5c0c96e18a2c5a3988fd59812486", "007ac569a56a5796f42dec4a6f6369dfd0da3276c4ee325db13d7f2bef7d29ad", "092bc8cf027bdba093e43744e51e2588d936630152d6969c94697416238dc65d", "154a4ed7c42ad8681965a69a8e079ff23accebbd6e2d92583f0201260a4ace45"), ("2767b275b43f0fabfc704de113aaabbe6ddeb986a6d84417c54b53cc2fc720d5", "1551247526f845bee18576ea3ce63cd5aaffc6d506f8bed42f0c9226abd11a28", "116790dbe20b9ed5df634e4e2ebfaa32bd4309a09416b66bfd09a049c3ed214a", "04d87e1f702e9f7590683253131e6b5e40b0e8234a15e7c549de19f0b0d148c5"), ("129c92028213254abbc5d2fae4fddf64b0f71e1c8fda8c20319b24bd5b165e03", "24c3f8e6e205d7f348a3400bace161c62ae935f521b0b02d0b550b58e559ca28", "1ce899fe9e9cfbd54de186871de634b3bb50c398f4e90da58dbd2f377205b732", "1bd4cd88a90c42e1a8f62dd38e2ddfb5a7ce4c41658bd1e07f69ecb7f6f98b2b"), ("03b6a71614d4ba24b56b09c1776e80b2a4d88b397f5f9717ca215917ff05f743", "1d133127078ce8596533253fb1f69bbbfb215fc71f8b5beebac2af165f79b5bd", "06111a1f15c3e943f424476248c297db9032604dd75e9ccf2a976f3a17191ce9", "12d8f2f46897e20f6d5f279c5f3dc381141c04e842899d3c85b2483f717a8740"), ("2f4bebbcb76ade67232c6427b08a25adcbbfe2e1d44c487f72ac7ff71a5ca6ba", "2cfee48166481a8ce034797a8687f1808cb0fd984a4cb830672a905568901c2b", "2dc10044f30a48e85d5e89d80cff1b47a8b72ab9566df80a6dae3cf24278aed0", "18ce34b815496ea6dfe1d3ad666a172bc1861781891ac52c9f2696eff53b58ee"), ("0411ac8ac89ca4072abb3d3107fb7c7216f07aaca201f2ffb3a1139bd65562af", "0d260c4f7b6c1119ddcb41b9cd1a3c6afeb83015868d08ec4158949db042f226", "2475719d0a162f9fc9c3c9a40daabecd8c05b687c1bf1d12b47cabc2c95293c6", "282de6bf2a4508fed634938de3a5889e8de1a89f4d798187b33c2ece096bcf9c"), ("14b9801e4f1a0a3d1b2842bc0f8e94c0724fd06eed99b1f05274d9a432d033c4", "0424937e1d6b12621d9dce760a38a7b619343ecfa440db1cde8d6155560b2091", "3003fc5e7d6a0d5c0f41ab3a9fcac1c10e9db930e61343459f737446666b04c6", "05ffd61d6a0a3523ec897e17527bc4dee413cccb62131f6b640f2d66064f61b4"), ("23aa8499c3c04112f0ea8ebb9c0d3b83c43c9ed612efe3d75e079d0c1324bea0", "2a8c3bc0cfd52b69b58282e81469f419206fd4cebab4398374b2a7bf7de1cfae", "2ba94eca9e1bac538755fb20f6c852fb281e3ab121eba78545e8d5cd7ce41628", "2b4a43e9c9a00c0a48352759ed68178a62fc5a54fab476b7f3ec7387db0a6446"), ("01ce7b90f821f11adbcd29e76babdec6a64bb33c2a788a3c2a44a488dc2292e7", "0123b3206786328ec7cf6d5b97264b8651945be0261d21bf404d7b00ab17c572", "15cc1acf07b92bc65252a9241046d4eab14cf8e36ed506a852471222b49d9853", "16b67857fa1066eb9c6116610f249b1445bfcb6d4b7dcaddf63610a3c91cb4ff"), ("241e843ddf35e2c2ccca0291e8b08ccc89ec12d2a56b9ceed9f658bd638020f9", "085389677e9274427b575188f3f7e87a7be6b939a1b2bf92a604dcc4996c9307", "1099ac54c5672265e2cf100940b1e101e7cc39534d0ae365bec9fa3458255333", "29b934968f734d408a1a44c7b67f3b8b88f82b0fc755e23b9e2692aad13c0580"), ("0a3dc154284e6d17b90e96ffaf25998fc4493036624256f87d296fe1b7ebf621", "0fc9db5903e80c2aee7257e7e03614becc67f3e0adc09a32c1a6bfdc82b1577e", "0425e4cec0c9c5fb3a58f731161a96713a4f231731eb5e03e7f9527a0d6c5463", "1cf9a97744b381065232a05cd85e85ed843bca412905a0d844d95288b47c222b"), ("053d97c8e995f36a8972f4d872100286e2f9c85197d0ab4aec01413ab9cb9fb4", "0ac6f9c8519a442b7a7b99cde6a47b3d5e4bc21629b35fcac6ba27d7cb14cfd7", "0ca76d01e247a93714cad590094b8c58e552ea3ae9695c3ec7dd0e715537d702", "01cb01350c848ce3ec66516ba6ad52188b8e254e6b8abb705e2c8d4988d1cf4c"), ("265ed14afb564f27baaaa44a5d6839595aa1e2545758ca944b08d1493745c186", "12d58bd570d821923f8e1282a5060f2e6d394d6807d32eacecc9e31349cbb6ca", "15a591ee869f4afb2f31a515b8dfac1b66e6075124d48dbe0e7e2112efd46985", "06015da664ba697c3944624cfd37a98b07978eca4cbd8ed6b02cf3d7d7df20c4"), ("0629ad6e3764ff25eac6e09ac6ce74e1f4996f8e7a1291f42dc30dd24fe64ec5", "086dc5caa846c00376f5c703aec8fcc4cb605b76700d0981bb34decbd024f871", "1293ee03bd5d755e89fe5b66508d67a15519d3d97088a83c06a58d0011414268", "16ca37ac6db49ebc4887c914393289f97aebc4373c0764d422e44cea99dc2460"), ("196b12f98e57fbfd970a9941b359c704280a5c9f2be262c1e55863aa6dbc3586", "217d18e6cb5f0a791ddb1a2a877217da10eb06bf7bbe6f3260ee8857f6ede535", "141c0d0ed2bf07caee38897ff3aacc71575694a1107383e056d29e07f7c44b49", "2d1aef53023e0714b8a4747a9ceda998831bdf93fed2ab12ca6af9dac2a28c58"), ("0c5e505bb92a22e3ada36f0770841726017f2dfb4024fcec4b2aad3c10bd8567", "2615221fa2d77e49e7fc0514992c345454477c991fbebc986535615cd5576735", "0e85b7f9048ba6c98f4dbbcaf596e2822e86ef85bc841178670e7806d728a140", "0d97eb0e8256e6f55417de8bc819eddbd740f469a952a0f072075e6aa2393669"), ("1edd72ec95a0b1e2adb6518bb305972e95271aca7e357ab6c132b248bffa6a87", "25c6e151c1c2ead5f4b3c8c681c0f22d6e4439f26745c1737b48fe09da4b4a8c", "2d25c1b5380b8117687f95eb800accd18c320399b878c11af49876af5578c973", "28b6f85c35a6cbd0bb7ae3e935de9ffac1a608cb45614adb9ad622aae3800b33"), ("087451740a831f857e70124f1a6b26188b8b704043d18f1b8d3ac1a5efc1aefe", "17309393314f6a228a95614dd3d45685adff80acf53c2cfe72389c869f097760", "145ea7d95e579a8896d57d771b47e0dca1dbf89e610feaf8c4476fdccae81aac", "27c200ef152ea1733ef01cfa38e7c0faf5ac7242fbcf21b78aa1e528e97e2dc8"), ("1e3ff564e8a5353d78a652c5b694a775a9e24781708af746e6ca766e306633a7", "0880b1c33fd555838c4d0e09d113a4c983d92ced250dafa792bcf443160a787c", "0816a4e4807a1a97f788b6020396c49004f6980e04e6ea60afd818b500ffe114", "2792f9846292ef1ae5757d04aa1f6d0d51c8b540ed47bd94a18ae24e82e8568f"), ("0f468dee6e9a5d4249f0bfb62c0211a7ae8da93ebf50ebf3e56ba7de65eedd7b", "303c187af7401ca7a8c065ca53bb9052a760506c2bf9a63d73c35eab343edfa0", "145672ac0cadeae57bf7ea0f296a00412f80357c8418ec546e0a34a8e2f5655b", "263cbee3cfdff913c3426749380c60543727eba18b9256b59b97df2c6f614aff"), ("0b385e6f2e689b3e3e253e0126ad93840c18ca7680525b831e2a87826d08423b", "0cb401ff3e67bda46a5fba47472c83d76b70c9b923e283574980a87c804396a4", "2a0ac3275e49b663b1fc39c96105e245f985b3b03348a556d425b16d3e640756", "10448690853fbcaf867bb32d0064a8c7e39b159fbec1eef1e5948683356db2af"), ("1ee798b00a9023ba5f43de6d05da4ae680b9752038f79ef43b737f0380b31176", "08f42c69d7aec1d27e3dbf782d0ed14449589741eee3cc9685598358d5ac2043", "126c594c2c4d7c9d637cf89bc398abdb9c8b2c756c7adc696873d76cf297856b", "1817a8aaf1a7c792d4b1055eab729130c27ad134f6d7e711978931a417cfff79"), ("058389204a520c76aa388615913737d790b16073b39c1cd86f4be9219375bb3e", "0100ad9b15d06c7c2e2513993a50d853dbb80b1fa4a1223fbf8bfb0ba7a03b16", "147cf07ede7bdf271ecb18c5910df68141d9a2dce2779ddcc8010f7999ddde4f", "044d6dce31b7fce0c12239a8a9263da14ac0669db1178295b9941d63b737dc19"), ("18d1876e99ec2a0464138a9bf303c1cb4958edee412a167d9d9fbae966f9f5b4", "060254d56216b97a5ad2be9475a0a6ccf4af2c46a7debb132732a4be519b5880", "1f0e8ace3318ed72aa504c29ce5d6aa7f028261a5752fe0db860c938061032ea", "2838c20b36fe625f3b666dc5a42d153b0a2017da2d6d0634fc432e93e6da73c8"), ("1e518fbfdf58fa276466ff8ce567f12fef3787358e9daa1b051ac21c9e677f3b", "0f8f544572a303c030ae2a1b6083cc29a0a34f965c04d9eae84abd6698ea9ecb", "05ef4f0dc358a40c887d54ca833cbc1dd87001b736965d08980781c7e35f8487", "28b9693fe125e53f203d1d9027bff82b1c876cdb845014a5373956f3c42cf97b"), ("261bdb48d5c0335b6a6a6f38a4f237e6278e6bab57b3a73c67fa0db8446d3c56", "06b3e947de138fc6934eb8eee4743d0d06fe5e573366fade6b7c7a9c78514822", "096ad298d6f0f24d424e8dc6dd702f5719c6dd4af01f29b877d1fa79cb1b8162", "277675c2329055631724ed8f0dec61548015d89099d2a4eb2be2ecdb275b6e6b"), ("09770b1f89d996ef8eee3beacd8ec67237fbef311786ff259e371929abeb0085", "24b12d4068917d5d110894c7d8d762ccb54a60203f40b08a9473dc1c9f78c546", "130ff848045eaa87b70b510bfdc6f924b836c79400a7f7c7704219529ae426b2", "0fc8f9d6e460f5d0171280e3fbc782c4cf764b9d0e28d5b721c1ac98f447579f"), ("19641465a437a431a5deb49824121480c4d5fefb4de85d94f54b45d33f2251d9", "28f9a85222c9573d1554cba0099200ff75544001ef93ace4174080824e403e47", "0f7c5886e4dec602b25722510179f0c88290c01479361a66df7ad36cff56d5fa", "0bb8fc7af3bc91a2fbffdb322fd83033ba06c05b1e717f8310bcc5697f546cbc"), ("1c1c6dac93a7ea806224aba1b159227c9119e286013657e980bbeda64da994a6", "097c3c8d6a1796c91a4d438941a1113aff138a21c3262b2386de3c8776610c57", "0c8a960834d4311c74fdc4a521ad2f35b73da78732f1e810a69c428be26eaf1f", "2c892c0b5f6b45af6fc2a50ce674f82e4b489ac26e650792473c7bdc6fb638df"), ("163949309990d3ee3cf15f079ddbf8b3bbd4d402951ea908b780e3da2bc097c5", "207b523aad4ba707dfb9ae4b4726334d2c94ce9f1aac99b4bb4262ea7df580b3", "020d3008e0c858c6c5aeb3a5f0e08e2432326217f70c0b43dcf3f3607fb508a0", "0716abde6016f532bceb67f11fbfd2d78b94d30516827ba6e16c20c74c3380a1"), ("0df3b69908859e2e8ca82fb53f8676170b72a9e1d76cffc783a471a3105766a3", "094bff135e5d75480accf746b6834035ec815ef47f842b25cfbf71955a3983ac", "00df98ee0f77ec243a4ca777da3498485bf229f58eb45bba5402c206299a56bc", "0087b1e90dad1b36c3c5486fc8d5de03f395d664f38d206ce27b0ac68873bd45"), ("10bac39122ad2bc2ad58b787b8ca13e645649c6304d537830e0c7ed7b886ebcb", "05029bb1fe7f6405366c1e780776e5221d2cf48da3fba1f16ba4a280dca79a74", "228f72990b02bf2965268b8aa5a04f2413a3bfeab28ed8880963535409d03f03", "021983228b1edbbecc96d719348cc3f335519aa3c905591e120b1571404f36de"), ("108ec158c8671fbe68d35b44c8445d1f730f5e3739f1896ef8b3b84382c63481", "08ca00cc36597d2396f5ef17b1a48eaa76d5fdc4255858c3487f7d1dea3c0d91", "1f5135aeab442ee66dba46021b9f907f20541b4aee06e61e695f2d0033f9ba2f", "0ab909e1b23563f1dbfb9dd674c7cb5bddea717eb8f937606b66b5db40887990"), ("1997b1ec3e23952b92e132af0a18c425c181ac89aaa84e2531bc365b1b5ab7e3", "221168872c07518ed990bea6c52617c52020438002b1254d917ad3af6613bc8e", "260c5ecfc758d2313538003db59eadbbd8207e8c33e9d107ac2fb0bf3057bdfa", "08c49a8fea33d27631b461a224afa5e8f165eda46a9307cb41d0f097ff9b8185"), ("29ae2d80361daa7e63ef8115b29bed4ea24cfc669632c2333a0b0888f0bfd9ef", "0ee06c23ebfcb2b2c5d16415e52513ee8f5b5981f0523a214cd1032afcfa01dc", "14df61c8620a1e82daf0c2a42b4b8cba18eb764b3faee16f23827e426e6bae96", "264f475f2b91ae0a0b495164d9c8e56060c2bdc875fbdf5fb5083024c87b62d1"), ("0d09b635a85e6e8e70d7122bb7773bf3c67ffc02f9cdc2bf0e1f399157420406", "2cc1e6167da0d759cc24d1ec08f77178519ac3e94376a8ceaf3838f785da8e1a", "05d473df8714b5fb830ba27edfc5cbb274f26031022aa98aa6254494dda6d5fb", "25e18892b5c1a4e8a22c17fbb503a945021e45c4ad9f3fcd7ddfe393413bd9c9"), ("190feb8f1510c511b4896d734bee0840ef46201d63da614798f963f57f4cb597", "06acb771bc0d0893504e5e057c7c703e1d047c089f021de387b9fa974952bedb", "11320540be76f14ac9f843705cda1866557234bcdc5d7aee8f87aa6799112fc5", "0372b8a591ce0bd24f69161171270cee472b494e28b9831e93a94a2c5bd2b47a"), ("022e1f34224b3a3dd18e674d69beab1b616374d0f8a64e5a1ce2d792dc2f7d24", "09cff63d0108ec094f3c6c1e2bb3c8eff9aabe6bdab34058794fd79db7c3cefe", "2ebd88bc0e0610161b5dabbba6cc0d871dc266da29d609f3e9f6496c06a503ff", "0236db5ad7186af4eddf72589995f51a517ab1202a95af50681a6c83874e0f26"), ("1af5da81134136cf1b0581cd9704d31ee9b2390d065c46fe93da5c018c01f421", "28ce8f5fccd4dd709e93f27a04f6150b377451f64bc22633189b9fab2f7cb52c", "0ab23a047d12cade64dbf7d17fed23154370b6e9d43116fa5519d6c24c16adec", "2c51a5abb0c35e6e15e1745fd702e374ac2325469db96b0be94e2dd005ba73cf"), ("219f8b3ce5f932288c098f5eace37ebeb30dba74e4184c5b8f00c2784cc06284", "06e0784d32f854694eaeeec0b13387f8794d0ae32d82c136bf3147be2fb6c855", "039ebf55df8278658ff8c24c32d273a7768afc7fc8bde381b3f155e29e276143", "09d78288c686493aaebd1442a9946edb2cf56a8ff840e55b2145d31316caf48f"), ("1efa4eda984e1292fb6f676b0a065b05e344822c1c2a92fbc1230a770cd9bc6e", "12fcf3fee769cd323d2bdc0bcbc88476f5780c9224c9f330c9259fd1331c49ab", "0e602ef3b66d19f373008226728018a07f0b02ace9f8cdbc087446becc5ae9ac", "229455c0a92e0017d58e0ef6988048b8bc05a9d135a043777194fdb9622c7529"), ("115d0ec6d01ee1cb05ca25d689ce98b1dfb02ae6c36857bc2b4a772bb50bd5aa", "25fc28ad27e7f746a28c98946fa667c69b4fa62fc2010d2433e68e973eac1748", "2d068c93eabcedc08eb44923a7d34af89bc237b6ca882cf633edfa75d8713e2a", "07a1a3f15b7da77053de05489ae25eb61496a35fef5297cd3d6fd1d7d136d29c"), ("247b5503385d3e25e76cd0e08bdea41bf3b8656d1c0906f4b505ab290cd05fa7", "2bc95a7b0cc36cda31d1330652b724e1666e6decb74b36fa1a609ac1b0f22379", "012940a308c83f37daaf38c68d63feaea7b6a2a72c4b14f25fd65d8ea8fc6848", "18964b117c1fc0160d7b6f7df41ca62e58b96d7ed3930addf56381ff3619d9d2"), ("048df2842967f77c71f8e999e7ba1b150da1e5456302d1861f925663dc25d26b", "30157c4807014e4155f97d0309a1bb3cf6bc4bdcf9fe669aa45728caec9f3f3f", "2cdc904849cdeb4814f228871d35beeb7c3d1779fd427c71bec7a6ab00342806", "23f624c6ac8ca9a5d6bb48d29b6f9edfa3946283b4d856663aa67fc1692514d1"), ("1442573f8cb053680b8214b3e89473eafaedb4fe9dc31b47ed72a2a1eaa175a2", "194a4bb29983a4f119e33d31068e61073b73aba4e1133421b04e12cbccca9040", "103441967b4d9233982eb72bfea4c2cd191636c62c032dcffc7f0ccf56fd6d33", "07edbc81456dac73edafa2ec4fdaab3da099c632b0d24f60c4edbe6cf361c54c"), ("0a27a48c68c6b8430d1cfac99c4b2750083d3d26412e3699fea5d8340db47398", "2b40cd879904a48b210bdf56068fe8fa55c9a258967f68596f7e03696fb898c3", "25e344932c6a30d57580495371a61c0895449d8cd28826672fb239bbec330b5c", "0ef7ebbcb17f11fb59ae732009042cf31b4a9d730b474aa8d4c9c6bf73b43e54"), ("197dfd308ae846d5ca9e4d1d88ff5b4a57c95bd100ce94adf16e287786d7fb86", "1bea4046ad0aa158b6a00f4e6b6d3dc9f0e4b9eeff4cc6e3901ab368f1488352", "2644838dad8c0693483128fc6576fbcf019387209c045130d85662c7d31f1477", "0fbd8fe65ab3b5d76f1fc427618b7540740e514f48bdb063dd9d4f9fc48e9887"), ("13f2568a6978bac88317263215097f4461e9ea223e0287018da8ae1f075200ec", "2778f9d96e13c654edc1fc8822efa585ea1287c62c86d074ff510fa6d9e312a1", "22cf63ae6380ed25ece0933b69c52be6d7f94f62cdb9601d361b091e665f40b0", "02ef628e0123169707cd0d911511d31532e003430df48cde7d89ea6beb414e28"), ("109ba7940b3b8dd0ef60661388f2bec3169c0f74ac7144f69631aa7603262989", "0136cfbaa548a27ae973a17a601674ec504eb5dc0a278f3fc6588762520c755d", "1bde873be326804cc044bb08d95bd840b95996f4f476584681fc4dd7c36e18aa", "07efd332f839657831c3c365b7ffbcf20760f60ee21f558b274565f2cbf3dead"), ("2d261f9868f46344c7cef66884d078e0d63d62d17933790e5449bdf2e12f96ac", "1cd92d235124ae56ac8f9a2ba0b665c131458d069ec44b96b80c3b095ff18d12", "28dd19ee4a425a11bd35688cbb29499a337443105f20c591cee0a6a9b6f65ae4", "1907f5a4481897a3f97812cf0061f7ae03bea7a2b13d1f6dbb3c4d86936f17be"), ("1aadcb0c8920478a246d7c87c1fad43bceecb389e166f60698fe57847fb892e7", "1e35a8a9c8944879b22ee4055eaede6fb82d4b39fa570995fbdf42564a19c744", "1747d5a6df794b32eae90bdd599e23a20956f5052d98c2c51ede25833b837ef6", "1457e89553a7fd4421bafa6a41fc72448b0585880321df6316e16eb05188a541"), ("01db4e4c95ba1cc5a86c18e5e3dfa6654c7c79c4fe18f9fccf45aa6fdbcde245", "24409573a829cfcb746cb3b86ac5d5a3dec1e4a37d5dc917ab797a6c24aa13eb", "2f329d4fae9732db9ed47568725d80150c0d5429132f355c62e33a030ff5dd2a", "2744115db2b665ef3b04fc02dc649b2caac0be9a11ca394c578dc7e2f1e9a977"), ("20c44d3f26b8ac6289049ed2c7700e86383c5c83e923f83a090530feb6c80215", "1d51c893ffa4c22b650caf4af721f6af0def1f72716e2cab0cf8798be8a7c1a0", "252303d79c97d3b3c3508d1faf38f9a89b07c1d75576c3d074c5d2a2deecc3d5", "148ededd37d77f0479716c82ce090b934be705ec15799d3cd89238d4371f1827"), ("16b5280b554a103d2c1644cbc05db9e0b36d66c7fb9072b481c6693e6ae10aed", "0390ee83dcbb32777bd4f9bad50847cf9ea9e1708a4465dce0627a5c93ab9ebf", "19f56b6176a91c5c199668828c4a2fdc263be119836edc685afdd32183d6d3f1", "22f640c8671c8c6f2382f41428cd44abca879423f9a4722c58b2804a79f3fde2"), ("0ddce8c6d8811c947c89ed7d0fa2e0b77ad55e7bd3d9b7e481e8bbada0ca1099", "10a9763e2ad5cd743a5cfc48a2ae820099371206bb875647dc498a876a9eb686", "299ea5510df535575a398e2e00807e55055786c620a2b8c8b73a9ab76ed299ee", "28c309fbbfab00bc0322447be5cb1758e8527dbcdf1ffc858c89069f85fcea73"), ("2f7fdd40685c7c94c1dc279b5a571de4932161ec6e2579e9709f04295fc2b560", "0a8a88da0202e204a1a2194358bf297bce3a81f254c431c9d88559638d2f8c7c", "1bd871d72bd6882c684530a7f0d55d9211c07f4d81d6740e859629f997f5c0a3", "0b14eb5f52aa83c278bc6e3b58af2cedb622d4a49ec6c014ecc14c24ca18155d"), ("23cfb65453f7398c407c11a9d30b88138961db1b9f0e31256cbcf2e4823d2d2a", "2a8e4955d6a2459c0d22a5f029176d83b315fd8b0d0d479ebcd9cad696c242f3", "2b09592c7345c87bea7037d2085e995f6575e8abf73467c3466ef1dc9273e371", "243e3240cffba6cbd55a9088c06536a642deb65d75f07bb9fc2caf2c1ca6d223"), ("0b15cf0f6765847651099f2909d4f29a7ad19f0fe90183652715d995936ee3b1", "02ea0cf987a154349cafe4719d1aec338484fcd44b4c3d760790a5fd7fe64dbb", "035503fff2dd65a08873b8184b0ca7196927ccc55ca6c183e7158d972b5cf2be", "174b021571432e123455f9975c540abaf25f2c4d95b309da73006f2fadbfced9"), ("286e1d4477aa1166b783146cd30296a0f04d578a2038cdbd6b538bbc71f0c19d", "250588e5e8900dc6e91671575e7b376f959c89393dfcd63ea9ac7ee589742a43", "174522ed772094f8354e66581051fee47b6d99ae56fc137450f88d41667292eb", "1548c1f15c4a0e701649c88c8e0bf004ff2b88a6824c0f0c8711b3d587688fa5"), ("24ae5981947cd6dc0a25fe1284d88c96537d4b10ef39fd52a74880873ccd2bdf", "133e5889b349cb2a16b53eb97f3262d4bca3466fcb297ea221d77560831388f3", "22641c2584ca9e7c605ab21d70bc61e4b7903cf1eaa7d2bfd7777ff884cfc289", "0ec352292184cf07b2bd88432e5915c20713e76a770e361dbb81f8454b4eb21b"), ("15ac017950395d56c548003ea214616f2611d020e2b8dcd2b8c635569afc2a0a", "29147d211cfb973b2927acb41481727fc7213bef0fe2dcf34bb72f6dc7c192f8", "0a80d19dc2df4d85fb35abb20f0393f7ad2cc6ec8cc118cab364bf8a47ca528e", "1f99b472465b21846afcc9a33302ce15c19707bca89809e7c302a7a05f00896a"), ("2c58eba42a43775527a3ef529c838516131f7aa39bd3c3cfe747231d16084fc2", "026b253e6f98794b0f286672bfc823b1db26ebb494d2f85797642aaa3b89d27f", "25f37514877cd3029209e5790f7824cefd8116d11bb3b674ab1ea2e74a507044", "07ffb5bcc7906e54423431758e09489a72818188953e9509d74eb231b769683b"), ("0abbd2288da679902e802671dd3403187e4b0d775ed146f0352f0082ceb3b4e1", "034373c7ec64d3b04467748da1ac151457c69225b1428567420d1068ace0a679", "1a5d1e8a8f9a6439a3be9418ac21154f72f3bdcb8cc7ce9aa249907f61a9635a", "1fe7f38caeb7f9be16ccc319e9f36ca8272e4a20f99df5dffc6a43f43aa956dd"), ("2ead42b4cfc8fcfcabc35c9308817cfe22ccfe15c851054c6ecf58d6e73bd37c", "15da6a22eab5c54294969e0ff4fec88ad1dd346530951c10a3aac0d2f335f88d", "2eb4f7b114c0099c6207203acfde7cd7f29507b292a79e2a9f0b4d2e59213650", "1b364bab3af015cabf1d2ecb88ae08b969fe20c5f0ab9d282fec625dc9241cfd"), ("29ad1e1b571283f7fa242d70e7f054bcc9a0229f43f3587ad2ea21b236cbcae0", "2c660e25743c41434219b2175c175f81bbc54f9ea9c4217df9e3529ee77ed7da", "26788906c6372b15d064c52fc5d8b18f5bf6ea03589445419593d4f79f06a618", "2521a70918920e2fcc42d4da0a6667d6e8097e2dbda56488e21fcf2217518370"), ("034f7de1a0fc3b10fd731c4cb487515ec5a8720e77a237e614661e4a823e6712", "008826ea441cf0e32dfdc0642044a917df7a6a54dca306f98c1b50272c0ce018", "184ab69aa3998276062c648be6c0e8bf385a4043bf7c0bb0a620eba2ce3693da", "081b80a2fffb1e0cec768e04479497390168be8c8a4e8d82b6f2efd541b004c0"), ("045d7000b104567b86caada0e24abc4141c0cfbe54d4e68f0754f41eb1052999", "29d3def335a73a696d2ded0beb3bff8a871c63f09b0499c7a5206fcd584853f2", "21e1ddfb77bb41b7005b17841a4c7248e946f4328ceac6280a02a1f4e6b11799", "127d6798f0ccbfde3d0bc82be89e58741792f4d1249bb30476ba5dcb9c7e1d93"), ("1c5ad85da7e4abe260ca28e96360fae51cec9be47855cef3a52e9dcb9ee574ba", "229b100a65507df93f1272bec3f92be54bcae2abd67d54b58adc1d88f7ac4bf6", "17ff7c8688b5b744d0ca7303196205bdf440534790252f7c0ebd37c32a1fd43d", "2e66674b7e18dad0c8163a8c7703aaa3038ceefc91d6fc4e15c679494a3e459e"), ("2308fa8b9c358af8a2caf4000eb2144fc5df9e9daab60e8dfb50cf6149543a0c", "17f71a2c4ec7f71378cfe68fdf9a01d2f9f8860fb77e8c2b238ec012f30ac3d9", "078d7902c94fc6344b08d3a1bad35033100d4d0b1a7f8326566aea4490109608", "2b218f4d630ce645319d5be94492dd83bfc3b260ccb5c6a9497ec4f8eb29e155"), ("13c310272b98d709a4fe19620d3d99a450bd5a36228b639170f9299bf6eb81ad", "161c03337b9a9357874e1e4dc1657aa3ee64635f2d6f13739be0ed96539c41bc", "24861a5e7d17a920e9f8319c2b354acadb0cca706406ce37e5d00e17696b0589", "220fc20337a359b9bcf648277126a3781e6daa3450c41221bee89bcdab30e164"), ("0d61e4c60d474f47f03047ba96f8779acc5f35170e5dce075a3c9dce5ab9b130", "1dcf81a733c89217f8e06ea53d3d75c067ffd9c4c8e4eb9b886bb004bfa3ef85", "082e2d5367acccf497acaab342a21e74896fc2c6c1076ba54159f80712a9dd0d", "3045ea4ea6495e3c0b50aaec823b5c3eecaac5947a79431a71c8ff60701d756a"), ("2542e4da7c702d9c2954a1a1324464a505c52a580638413f3ffa5d7e5ebc4560", "2a4daada22dc4482725c12d39ce33c1f474a4f62b55f633006a23c4485d66af7", "1617ea6657007f6335af7292b72dafe8bc14baae8006876c84ccdd2197b9e676", "2723600c520de50559daa37bb709338b3664c4d693c20f10b7393bc54dd755ad"), ("2af2e2238457eee8285618d93fad085aa627c48c08b58cc0e990eeb45ed08234", "09112c197e47afb63c6e12ded3a1c63ab4c26a87e2c068da4bd8d90ed49c7eb5", "121d6d805e3207b00c6cc9bb704cec07bd3b262bbbade53eac4075f140de2c98", "16284ee330502b5f279ac955363c88829605ecba1f1356e3e6384040760e987b"), ("055a1d3f9ee194bbdb1e211aac366480d1b133f8a68e951e2c3f07c27ebb5a28", "2cef03364f7da2d5860d458ddbf31568e9aa51875c3776b5223ec5f05da7abd8", "2058e9797fa8bfdfee51d81c5ae0bf138b7484669362e4304a236e3220a6b70b", "225bf2863ff53999e0f513d9d019f5e470c94d09b3124c73b9fe5a1f7d985f7a"), ("2d84c8c0ba4b1adfa71267979727b36dd2762374ee68d53063e33a0e81b37334", "1fa01c204f4b37c86ce6157c4034167d8c5bce6c0b6f0699a052ff9440f7bbbf", "24656fc43ddd474cfe800efda254a4eb15cd3431491522659dfc2039b1c17d0d", "17e21e75a40fe9bb1e9bb995aab75e34b3e943420a2f61ac1772a47039c8c92e"), ("2ebbb8a4049fb260b3fe233d909642046ab53254221aafdf2c45dc349e566036", "18ec57023940b4d5763922f7f2dbbbbdd394d21a7b36e1c0c58d9ecf1013e0d3", "0ad4ff2fdc7fb12ffe078c5d3976151c058d0d498b73bac81aff0d1c78e6b7b5", "0c4acc2f9961fee8ccf11f3751f458d9427d763e400992056ecbf9d3b4e35da1"), ("050e8878545a92e9a6cef1b0da50ac540ab5a9106579aee45a8fc832e67036a9", "27866683289cccabe77a4db0abd291d5fdcd86644538ac3ebb40c71322f79b12", "1e68fd286b399fd883191763d2049fd1cefca14f1db6b067df36559af8b67f99", "1d7a8ada83589af9c2d87548a258fdbadaa6273053bea4f899f9e75232878154"), ("1677a3c3fd96a972d0f6ca5b6347cc739aee130b81d59f0e676b362ca766d1ae", "10a96c0956a503873484a27d35cf2d2069d97d3caf407b1ee29fe021548a4008", "20418e2d2a1051ed48c98900511e4fb8cf2b28e00efb028e31bb486bd4581766", "07e473055457234d294ee831a0331106bf3f545bf254b6e77b2f44f0d1fed8d2"), ("090121f5d1e6de6ea288df1a0ed89fb7c08e83f494f63d8bb9d39fd719cdf2e5", "06e5f12e47d75d374bab580c55ba34959a270500c4ec1fca5f64133ba0f709bb", "1d48f1be9d0dd90bdd1b917a391e9429344b239ea400da6d131bb1c4d09986b5", "244d7d2545a0b7a7ad742f4d4dd69bbd1221ddef850c3154eeaae5fc5204bede"), ("0c62461364588450e4f1487678cee5349e794811b33b02eec2345e85f295c30a", "225fb69bb6f182ee764b9b02f65b0827b1593b18b350f9a1bee034052cd01f5c", "1a86647ee01a6a53c0fe17eeae1013468fbfc25fcc2b5a7802280d93d9a4e575", "0184e2f9c949adc5a78ff42d1c9c498cd5da985381cb2e0c11c49843cbc12b00"), ("15149770901e7e7938bf8ea9c65d504fd9fb49238872e2c027fae0326661164a", "1e2f9d9661177fd6d65e0a4bd8d1da7550abfcad15b56a755de2507360dad601", "1b51211922aac0d0e2de647327fae0389468277e6a58701145413c8c88b83ebf", "0e1a73b37187dedc3b1e5fb5cdcad10c27253c44dc2921e3c09f5f56270448ec"), ("2ca4c7f8294eae918f2e8a08cd607d3acb6f4eaa3ded29dd0061c5e157449e34", "294133e5e1e84dde03a26c348c9c25c69996609d6abc003b90a9103e9ccf0a00", "0c197062d6517814ba1d03770a65fe0db2b5b1b431f509057f5019497f2e42df", "098e0087356e19c0fe3754c7ac6bc2de69cb29f83338745cb4e99e9e7ac7fbb2"), ("0f1ee0a9aaf3bcd5f0d09501f5444f646ce218e1c3702067b592be688f08e51e", "2ea0303a097a40acffb40bf0b027fdd5a5bfd296cdb8277ffaa824527286bebc", "1f19e320dd9a8e87a2c443e15569fbc3640831bb27fc5aa8ff10c6295d32822b", "1834e65b3ed6e7d6c9baa7ed4fd295e472b1413e8bb93d1db7ce37a94a0b2928"), ("25e2d81fa45e60c706e2366e08bc3352f3e9a01489ad39aa4f1c54c7dbb99838", "08772aca4cfaa9b0c72e87739245045a1265571c44b491353470cb0dbae8f35d", "2eb4c8ebedfa91996f369a1332dd52dc3d9c29cc723c7b1d12f67d372d1cc24f", "0ed8ad5fec3076921d3626ad1edaf8c33a77408b2fa50d7dae516440a1d1d7d3"), ("19263cf5888b7d8be7c3510687e74d635135ea37438725bb7e84a993a4a3d090", "0efcbeba3087d091f31c73759cc7083ee726cc1241f8219fe1fb8992cef04ef1", "24e03b2c04e89e2476e66cb2fd36b0f803946a8de70f1f5be99094f7982a6c10", "2fd7a22757586b5458ea4d12461ead8def685d93c7edd95bbd257501d2c1f2fa"), ("1ab07204037ecea9cc8a9ca5a51e13d7ce65940d0a6bc306aace464d7cf3855e", "0d6c2504c51476a6f4680942905a56528f78d95a5c69a18bfb7a6f37fe6d9b78", "2f52b9e792f7762ae8612353e9171af97b5d534029327c0e3ec85a94fa791324", "09713a5ab9b432e05730bff4b54bc381c67b12e22c6744da321c35750a74aed1"), ("20db24e7aa2d6b964214bbb2832f84723d82556ae0ea780670fd70013fcf25e5", "19b75f99f5773edf28af4cbed8b95297fe891e7a1bc1bdad1ec2435f116a92c4", "0cbdba13ef3fe64b359ec6d2a9353b4bd0bc19a6db9306fbad23b1a955f7b040", "24a97cf3d0546c548dc9a52cebf9e6d6bc537ce2f5f9ce33c4ae3bffb4b742d9"), ("290b18206697106b40e42643b0224c97067e1a4311e428e83efc7050e07931d8", "13b33bb2053cb6f50f804ef9af4301ae60f11a97b8f60b64f731a8b6498c2b2a", "22bfc6b81d7c5d8fd2838aede0d34c82eb05c27b601e15ed459f30c3456adbf8", "07176187964c4f36d8752476176db2c057fc8666c7021c99a807ccaa1adb0602"), ("0a4480cedfa5cff144890ff43177676b636eda72fe2941ebb53daa601666a923", "071f2ace1bc34ba31267ccde4963630eec028b7cc37ecd5f1fa965ad7cd757df", "0c64f8360b909daff09f28b768aec494c9262cec15633a37fa204efb2fe325ac", "05fac49b34c9d4fe3b013abcfe67a9fbe646efb8b7b61aa9de250bb861254607"), ("1a6a7ae578461d392e6ed34b2d20aca9cd5255ee1d45f5b2d33a48d2e9b8c0e9", "0c0052561c40567fed0347b28b897cd5cffc087478854df32017e496a15a010a", "14439071869e9743a35726d9cca42a6d5c9e02b121da00427049f3bedc3695b6", "167804c5f507983d30b677a9eb71ec47b99114c311f23caed9c12d63c80ee596"), ("18dfa4ea4de7c966996032b3985299b051e488223de946005c91f88b373310f1", "193a7d1a857205d9c2c6632af2181960258f564996d3491c59d1b3037198a398", "10fb4b46739a7a27bea1056c022b74262c5c76fed34747e6ce91f20f10442386", "0e2977068c2a77a2438a212b9f12deb754587bee462f958224b8455092cc611c"), ("12a396e4fc82c10313ea953371f50aa7e0977f1d3a45cdd31f418282c3b58253", "09bd23b683117d032e99310ec4ce7987d470c525949d2c4bd0a13d03cfb59a7d", "1349cf5431d952896e25457cd1667e13a1afb3a1046b85f60d7b7f5ce73cc349", "16c4324bb98bebe9c21a3103d65e3132b81d61fc1708bd79f8ab00afc50ce5d6"), ("2a83bf0be5b3d76f1b905b99a0790e63cd1d674e969482ba4e98ee10901d29c0", "01dca967d2aa7ca5e48ebbd72bf5745ab884290fa7e2f22b36e52587a0cd0b98", "1a76222367f42d1995914bdb76b7dac6673b6a6f3ef6a41ed57863526e4b8394", "2e5de98aa7f03b2cde87e4a742c3c90151660269ff981324fa58ee3119eb6534"), ("271877af01f7f0358311f1cf90025934c574d17a3a69c282025920a848ddfa8b", "2362042e360ef20b3518e6253149821f19ba5a1dc33983629258e8effdbcfe13", "111fb71ca1a3daae9a57a6139fd73eeb768c6ea5df14c662c5cc30bd6a08021f", "0f8640ae2eb18d829a397eab4c2767d2f412c255ee6b09786cf1fcc1576fcc25"), ("216f98560f60432a3ff620d39ab8039e5729c0fc3382fda5b44f5dbe469fe201", "28f6c76ca062a05a2f2689e77735f6390b8fa09b1dd0acea678f8cc6cd3b5c45", "24eb7ba37a10b02ed70f95cde5dffc1c6e4ce8a4d2a0b5910b4ab6de8602dc53", "2037979228ca4c0acab59341ca6626942242c484ef3d48742cd94e734777a9e4"), ("03582fb22e1e4f53643362c3e54098a64ac14c8aadeb2c35992a70eae904b61b", "2351a126e39ff5e2ca758d175dea73a56340e50602cf0b0879e9ab3228014915", "2424651e0a42cf80d8ffa48cfb9a434b80b8322d61749ed60187dc27399734bb", "2e508115c802117e2c5c612ac595b7c4b089c4acd185fa3bfaa5c6d47e59c687"), ("117cd8433ea4c7131185c42ccdfea95aad4a4c253dc031105256133e7090caef", "2bfff7b98265f1ff9e82dbbe94fa0494b316f4dc51d9b5d1a9d0cf5db7f06792", "2a25773b5981b20f6d2da93800224279c0f82273229f7595a63e1bcbf3127d76", "11279ba237b9e464ac9569526fff228bce72fbf1e1edf3f45af2b55aa883b0e3"), ("1b3b1af640897bc136e01dc89092b16f1fee9714a0723f5b53be6f1068a29b6e", "27c0e855419c9acd8fead1a7d8e342af080cd0ac6b9093ea2ab2359457dc1c3c", "2335c08333a362ca9c0324de89815d5ee6e8d7a4027891cb84706a6e5c9e1753", "09dea4eaf049c88767ef3ce2b20d7c5208a7c03bb49a9320d06808e52895e222"), ("14dbf7159b177584c740ddc559b54ee959337d694eb4294b09f548ef8878ac91", "173f08abe20f5a6ef1a366047b5f528b231aa2d262c8fbb124a36de3c8662fda", "19bbcc0ee629783446504b6bbfa2434a1977f3fd7d533c497f664b60b2435b17", "2a6292f8412c877152210f8fb114dceac33541c95f7bfbd4536e8eb62125a28b"), ("16549b0180c8e744f9e8fa9194c785e8f4ca456af95ceb322222350065a9578f", "0bcf4d3e57a20a56abdb8e6e32a792b12bc0da3051a5f01412ee8f5c781ae7ee", "12548dab8d0454392901d0bc14f3f1bee7b5eb5cc787ec57d0cd14273d25c84a", "0cf247bd6e35fdd6c7409c61d82c90a6fb25d0a70308d584301c412cdc65414d"), ("1d14995a2a330f6a21deb5fe38623f076507939b893af684b2087312968e2e67", "1300b1346d1af1099af75fa367039403dab0a6f1b836066c20c9180ff21e8f52", "0775bb7cebbdeb1b416c17bfacd2b5ae48c1370a62f9fc0ec4bd979a049cbdcf", "2d348c920c5fa9daa95b4b6b22e2e349a5f1e81e6ac024ff46559c615dc627e8"), ("07f8a962a0a27366f821e00c9cf38a82682e8b8a5679b1758d817d9033be5b74", "0f1dd12e705ec38c1ff14d1449e8cb3624025934cfdb966a808a95970a1fef8c", "07925b09bffdddd00a85a8fbe9e8b44b6fa61932b2cc3559e2d92310af82a3b0", "0fa570b6a59b8cc78ff63e59771f95ba6263d1bbf5644fbf07a51a65b0967479"), ("048a472a4bb41b3a8ef14c3649f9a314feaf42956f316e578bc1d5b981d1bc08", "05cde865b2b53b5d0ab7418af1789583c563027731186397f62b1b10fb775cd8", "19828e5cd588b72905ff2a1cca3adc831b128ea3179c36641874d7c596af3bbc", "21dc490b6d170a17543346370f84cba6d4680889af6c9d4c94485b9728b5d568"), ("25e2e5652210c12c0b8f61cc7f18bdf0c7e25edc61cba5198653c52f2d43eca5", "23cc410e015377d5bc4e70586a1ad067bd62e2bd4e4ba7a192200a8f53b21e37", "0380b0fe6fefba4dd4eb033fa1b28726908c7b0b33847981f9ee4705e99076f6", "01df774bfbe8b1e9508416a131532cd75cdba2e95694ad39f0f7e9e931a0c3d6"), ("2631c9c321a31f0a995c50b1bb0a2c8b2f2ee84f7b5df03a5a88f65cdd96a47c", "0cd11070d3c73810a1d76af7475262cbd33c57a0a630fbc38a86f27ad4287448", "1d8738fa5995cc16ca5a3a6d6bd3bbe314e3e6208f1561d77a04d1dcd814bf92", "24440a948b58c14a9a5a5b3a93a58c9e368c3527f3bc3326b84d1fb25e1cab64"), ("298799d59290ccdc73ae56c41adc220cdd0d01775ca70c4770071f41fbdb5ccf", "232bf9bc4d0013be1e13e264c19b2fe1cb7611df7f5a60d79abc4656d1cdcbe4", "30122e9cc1a156ec9ac4f6201cef8e547741e1e4fa65a1aa83cbe680762d14c4", "2bc03d98d02960ffe03b5dcba86855fa7b6ff42b1c6f5a45aad26b6b714fa522"), ("19ab4c98d7b763ca2ce63f5df9d2fe3960a41c835c68c372e6dc715790e80c5d", "2051b766ce3579fe463aebb029cfcd0ac83c04f6c7116603069a32a326bb9c1c", "1bcacc3e7a372038eb3faacae90d14b9f2e2f6cec14d945345f1dfa73df65033", "127863a3a96d5210d7223c6c5a0b79505807ca9bd45ce4f3d70cd94b3d8ade47"), ("205c360e0dfff416ef2cebefd97487e5f42bc3992fdd47c3bc1f6b4380b314ce", "02470f37eee192e586e0eafef20926f33f3e35e7bd57eb1806cb04f5ada0bbea", "2597746988f1bbbfad7212a8025c6559f63246b9b57578b208113b76aa3b345a", "0705726fc6e2af165abf2a26cca00e479a395b0680297d7cc366cafc05d92ba2"), ("11dd7463fb4fad336576f1bcc042cf67dd87b60466d875f24020f9283e24eabf", "06d2c99928e73c3dc8f9b8e0aee46a7801109f818f2c2f14313fa194cf1dcb04", "123927c18c1d7623ea09c9244558b75d59a70da54b20bbc39b80bf4bc559a011", "142fab6f0b17ad40ead6e0835dff1d31425569417136a0be80e46b37eb6ef2e6"), ("05f8d85a454bb64a88ee1a2cddc93093ef73b75587dc7c6b1665e9ec3ddb52ec", "1504fc8b247af924e4bea4b118731b06675d86de8471b8cd0ab928ce4220e9c7", "29d3114c8d9c689ff095b26364ea996a504e77e610b45d2192f9ecbb8be70a96", "0c72582ac436b48d0a8bcfb7e59cd0c022a42f44407be2f5da3375e126bd2cb5"), ("06b4bf75444ca25a793799c9388077dabbaf5a640d540426bb1481ea0f557594", "1bcecf6810eddb8400170a40d38c133ce78a32ecf7ead4fa67832fef712dd18a", "2b4a22c43f2d4a8582a2792ca643b105683a4581dd52db26f54440f90054272b", "3037aea2301618dc46c25b6257c79bc55dbe0ae22a87841659a6b4d0bfb89e61"), ("1e3f54a4400b0f455088c35bd0ae7e8e09d842fb433ae0b03165a800b26c3216", "10b1ab91de0d30a79b3624d6c1fb2a83f5ffdcc5f89b5371afcc4949cc0a16ad", "0b9638ab0e0155441b60aac731ecd034d2abbe68d71083b831cf05295a06929a", "190600e816db120387aa2d0b9c66159f5274fcaf48589d2513909585c50e70db"), ("2de7ff2880f9e4c34d35fce593812fb223beb7516be707e99e46a138724e248b", "1fe4e3dd6a5225dcfb1da6a3ae0ac9005520acbd2926def8b49eb99383e312e2", "01788ee5b804a7169980deb1d528083cb399be6cfc97346d13f24b9e64a2e8bd", "12c55939ee01d7bbf5675b1a1cca33acfe1bd4f31f0f5320081aec29fcfa2a82"), ("07cc680e2b40b29f7ebc9833ba85b420a07b088473f80bb995dd65cc5d73e3b7", "12909e87a14d14e9f188d2fa7f12267335813bf66091c2601ecdc0a757976974", "1dbdf414734a71ff0e66fbe9fd44a91f168d5964662d8c32361f19edd13695bf", "154f486cc8bf7fded6c5ecf17fdbf9608f396418f4a784689948b338a74cc4aa"), ("03ba2debfabba6f18688261c84e1919fe65eecfc336fa7f1132dc1f9322dd5bc", "215683e472b10372f8c49fbc4e9c35d092709d49662aae955a2cf831609e0dba", "26370c9511deb6a1dc8f272822414c593fa42704e9933db911522d66208a3d0f", "135dea74eeaadf9cc3f48eac3d8781f0be2c5cf63ff7fa21466d4ea0fe61ad2c"), ("077a8d7e92f27bb57d8b0848a76422c4c33a9bbe85f61939cd0706efeba6796c", "0ea93ab3a905a82da0ac67ace5a06b8954f60f9e8432fe0989ce2365ed5278c4", "136c2e42890e339d813ed9ed56f6f56158a79d845c85f063b48e3742fbfa56fe", "15b04c9e01fe3246e9677a264f82a3deb808c90af2075d103a84e6bc89c3fedd"), ("0010397414da304f7173bea96f941e18439f5acf124c6e912f7c54547c93629c", "27bcb98626cdb120ead144a9e2b98fc8d7362b95f7ac148074554a571b0e4af8", "2bacf0e89d0554a2c95d3d4bcdc661be3ea61dce4c1a1c2605402417d7b20211", "2eb5bc1ee8f8630349dc2a09abab8b88fbd0a3c688bff02b7d3ca3cbfa03a9a1"), ("1e84f356a126c0c617e0b01d90f4a4a5410bafa9008dc13ac3e0125c4cfffd79", "18b1def1e0f57953faa0e236298ecbd66ab084c66b81fdcae0304c9ecb307a04", "205955f4c3e4d207fd4941fabd100dd5cac090e7099e701d30f952c80a463d36", "0e6799136858802b2d2b7e09225846aa1599cdeacf332355fb08cb96df8b3c85"), ("1bf4a572422062348776e651b57140c6d827a3ac93b34fa8154e673643092f66", "1a5f6ea258699cc66737e5f8a904ac5ed40ef6c845788625ea3d892b1813c8aa", "1c43166b0c477bb5816eb7c5c65d8a35d06121e6eeb9c2bbd0dbf9548280a2d9", "0fd10c33a7e0e2fba0b7134cb4c16d9e4b91aa4d39a29f93431e7892e867f841"), ("27ddcfb9ae3dbebc4a1b7c2859d3dbb3a74a99e1487b4cb242d5a489bcedd298", "1ff1be507c67bf5bc1c572dd2371c2c42912c60272c8d3b62296fc97590cdf0e", "1d89ab9c34d7b9c32b1a8b678e45f0bfdf7547357f371a1f4ee42b51023cef67", "275514984451628267d60f628eab557232a028a55b05771128bc5f60bcb00f12"), ("12a05079c31eb5b2ea4b767194c8b6b0705fcafe31722b6ca1d0dfa18d7fc58b", "2feaecb395f8dab2ec5ac6f4f2b522ec6b4da484f65e748d7fdd0f8a26220838", "04dfad6626388237a4c3f7a38b7e801554d561575a94c7a2fd2df1458342e820", "269aa54fa18d1a085f22a9be0f7672371a2fd5edf2fc8c3a64933df7d6b497a0"), ("2ed2e8ecbe991a3c6d65b245da4c82c0a30cc23900eeb1a0137124311f779081", "301f5e59b0c5571102d73bd890b9af36a62af456cc2cdcb8998349319cd73937", "0ac091e7c058554ba42427bf9d11b52a48f139b379d292b4a96aba6d138e5506", "0a32684461f6246fc6131eb5e32c9c14f50e7d3d6c1ebf8b8d8b00fb21baa1fa"), ("075919f65cb3e96c1415312463b37c5db60318c54011dfff108b8ce192cc773b", "213f4ec519c757e180fe0507d1cedae4dfb649ea560b8a90eaf33e163ff9904c", "161542e23525c687968dce0442c526359799ddb36ab3b712f29f08e6bb278baf", "124c4eaf4290a8042b412994d3c231d6d35ff187efb30866b1a069b7413bea79"), ("249e3ba0c73f8ecfdbd2a8c74d281c635a1fe36cee8106938eb0673ec575cf46", "01837816336b01de63f1d9e5c4558d8826ee404a642dedaa97f0fc64aecbbc07", "21279dacf6128a5f3120e80d58aa29b71c6d127d03dda14c9778b9f8e16114d2", "0569f36b5d0299a1e84060e6fbc50a2123ded6e198355136669f47dbeae9d29e"), ("10035ba198cd45428e95a177df68317df23525d3d3a2bacc1f42a5c41829c9c1", "269071fa4509796c71e35f24cde2ad731fbea1a3a3d9d61749ae1ad4b13d54f0", "21b1b360b87c34c5e95979b1139e3a919e1aebc06e2385f155b96c177ce6b41e", "1ad0c0c0aec22b2d4cfd26e3e6506e528c4f00429e90e79c84d44229e9fe76fc"), ("031c5cce77d31f49c461e40fe8a7e2dab3d63439041a063935de4f91886c1828", "003f57bf608c7eea3c014cfcd93f789527ab482acc8826232e894cef460551b7", "14ca5eb324d08de3c4126fbf5a591ed8c88113cb84f3fdff5b4a5d5cd992bf18", "25fbfd37849bac4908929038413d13e2398af0da967bd60ed4739ecd3af39f79"), ("0cc723083cdc7a153dd5c3d4071969bd47215b3300f6019cb3bd29334808d0f5", "0b5cae1958da11f000220ec20ffca115ac84bf564ebb532329bae62c9016b9b1", "248a772fcbdb4a2299fb971ada6af20fcf85f2eb086f48e31c68afb8acb86909", "1f4160a5475bd2c2a3719c8a14ca86dba0bb20157dec3c9275c32100c97e13d9"), ("248ff36e651c4a7a554220d853f69f4dd86e03e0f48d5d7619afce23349d4889", "17a65d8fc9be1f3fea4cf00b523708abff748ed5f89a7566f5a5d38e65551471", "216e25dc3808def454ab42bddf66e7ccf43904c1040b43dca45bf7daa50928c6", "26873e9946b809751a6ea5472a85489a2d64c2235fb7497d80f077a9de6ecd55"), ("0aed93777830ee95778c9dc3f8fefea55248e77a194290c4021dd2ed852eadd7", "11fd3e147d84b8fd57f129fd9de10d15ae01da82b3b603d1fc62df9f3b764623", "26142062fb9995d1cbad4334aa6fd9f18385f28b81f6065bef35b26a77e830e2", "1408fc199c7331821bd932fab9a1b04551dcd9333d50382e3e6fc1d856117c8c"), ("27d7fae0119b3ac6d388e9404410da455ce63608e5cd097314c856448706ce1d", "23874d251ffdcbfaaf49e6e8258086d0839d0d23f69ee01fd651ee504ec3e6e7", "018efe1174ea217fc261fcb3160a795cc8110f8d2a766cec4db191a8420804fb", "2d1b5b71e2bb0c798cc8aca6d5114edbe51b1aca75bdeddee906e53fe0dec7ac"), ("2d9d4e6c09d9225c724e386abd85dbe2232425d187fd7bb0acb17662dc6b7fa1", "21fb98abb5b17b63da5eaa08e36357963d0b7d5cc33d1bd8c1a7e0ce2c034a41", "0b5a043e7cb1f57630f3e639e1ff30a5be78bdfc58804e96ee7e6deb8865a952", "07c489c5e6ec7573c47efc96713c67ad11e8234c5e80db5f4e41772539e09a32"), ("0afe3ccffbbadac3372eb1325264a25133d764f83af3f29cf6cd1599f69128f8", "1204137f728297eb2dbe5c17cadb784b6819f07237557eeb4dbb86d0bf78af69", "08f62ad285f05f8b4f742d4347fbec115898252a312b6c3d4fb6685783415137", "2638b20740475863443863844c38a53eb0d9c24a1bd6bfd2612c3a2056e1e2ac"), ("27d32354368d2d6f9db8b9ac5ad64f6bc35ae0edf756e6fb6740dcd744679c0c", "15650884dd5cc96282124a1f79d401775ea5db41dcdf47ad6f9c0520de7dd344", "05635d9d4dc0b980831d021e6fb1d2805634bcf230f79b12e809e694ebf4c173", "18260523e66b6d61e711351eb4291283c0efb3d3ee4c4d13b6ec10cf751c18b7"), ("0f48399446ac7b5fe2a96e92fee2830c5d7554fa26403063b2bb23ac575bb913", "1e60d84c0b0c1db4d2f1a2c04363095857bb7086508406e6530ca5b23c128621", "0a315997427b7c4bf725d3d5bdb3be5a454d7172f312b4c6309957f7b6966eac", "1f00b0a18de4c4ad1fd67daafafd61ada8c6c01e7ce73dd9dbb2fdb2fc0fa36e"), ("19e849a0acc9cc9758983f35381897f97372140b585e7ac38d1238ce7baed6f8", "222a6b91b8c11aeb8e9144f7baa26065ac18fecb756c36894fd7f4250bbcad7f", "1368fcc1ef42dadd403e57de6a2d11f4eca553558d64392a928f8672ade29db1", "1aa698ae780dd330d42a816da9382ad01f683aa2e15f3bfa462bb0f837d1f52e"), ("2a610c3b40d4131f17bf31bebc60b80f75c5b16d81783d83ffac979aedc1c6ad", "02ef53f19a5ddc19f0b94d0c2177fb115489ca6b962cb5a53ffa4060419fba1b", "0d3b1ae17cfd86105df040b684f229f2240aec5349af665e79e904f6b0fd3c14", "1a378617dc7e3062e61f67a229a70c7f1cced66ad440172f448e9a1b9fccc4bb"), ("2968cdd6c3a92f3fed51601d5605fdd271388ac3a94bcfcb668641a552f5a89f", "0d0705c5dd4a0e2e7de97ae32c522fd0c7f85621d41534d4d252435f7e5bb953", "049b49fcfa372b3fa31f8341db97c962ba9b04be63a30403a0d3c7571681ddd8", "2a7caa3ccb6ad92dda91cd7a6f75ef88cab7f7b5936a42db9db903210ad4d78c"), ("108f980f86c990ebc765eaf20e05987e7f1cc21cdc4f1e0776602bf2b315c753", "2fcbef857c1e26f089e6bd6e304e91cb88bece2ad165ad4f611fe6c314cabeaa", "1bf2e8aead644194abfa357bca2dc16436bc6039ad6104d3bf4a3f01a940e8cc", "0e99692104bc987a37fbb6d67e20307668c38656ea6096c4d3ebe4240937313e"), ("23ec0fe89e2458e309cf30a2771f8771d9b34b779e337c5a87fc0be4d65de840", "12f99b900972827edc298dccc418d4633cde286d87309c762192ed317af900a2", "0e80324d555acc9147034b9f2c18a85cfcc5d002e33d01219758a0f253679dd6", "013300e265d0ad3131a1ee78f451150c03b908439ca875c8aed043164143f56f"), ("21e7d7ade093d8eb64d954354d488d682ead4965d3b0b1c7e4d391e8c861f716", "30639c48c3b1c6bca06c72ddf280c84dfa916ffde76b609864cb0e810929ab48", "2ac212908e9b6e7aa473535db1f1952166dbee9ccec46f7adaef9a90f54e0b53", "18575c1ab4244e6447906a87e0aaacc8d6b5e17fbb23bf2dd4140d811854a7ec"), ("2f66fd084f63cab859f6188ac9e2bee5aca0c03932b1aaf6c06508ad49c292e9", "165d031b37d6180c7833ba78b44a14ed7c03f0e66a9d3b0bc1e64db3e02ecc51", "28b3bad3f0f1b5ad4f99e2e7340cc8a675025ccff4980b9271fd24d9e71027eb", "12323e03b40eed46db6f86f8a3d727b35415cefa9a4aeaf10d93cbb3d292ced5"), ("26716b4983e5fe94bda1faf80b0f434a1e0bde747f2fab60e2ee9b516de71fed", "2d5d28f2c60ffa7dfa26379432c4948e13d268a4a0ad8a477ba1ec252e3380b2", "1d855c56d8d7e35758aef3b594331e05f8b5a0ed728140ad5c23ba553bb12c72", "247e49ed6bad7aabb742dc392ee8eb3b195827abb3d04a7ad7f3cad3fa687322"), ("129aae6e352cb8625bc283ad2b6ca62b677bf338afa3d1b30599a831b3f588ff", "2bba19cbd1e5f703d9f4a5f39fb2c6348e55eee30a16f24afc8043bb931ab2fb", "0fa9ee8311c19d249423b20c902dd3df3c5678e750b6c17e64a2e1f6687fa329", "188b3e78005a31453a00d1d32f56aaf97101059db5505fcef870962412f6b934"), ("18597cbf3b54d0cb2073815fd9397a120650bddd562c5d6d78ee3a7cad1e1dff", "1d84dd348fac2d8ac7a8fbbc99522ce3333d0e9444ab6010dea339047acb8420", "0e7a02eb791087b1d44ccdc01820aa4b4f88d256cde37f1a51966fe67a5502b5", "1ad9d7db4e598b5e1d1dcf459c6d36ad5c82aa0e0296cbd1fafae887a6138530"), ("2e4c774081e12217124dbb1f731931915dda1205cbf2fc12cfd7cb937b2aa4f0", "0fa831cc707a8913be74daba4666e6a3a18720b46ed92c101b18c9e0e51012bc", "250a4f57d33dd4d7f5adfed079602519e9f395e146522140b16d67b4897bf8f3", "10df9ee23e3566d3bd7de536eadd8b08a7c9e783d58542652b44e440c1080cc4"), ("16eeed625ee9844abc6bcfd5b80beb382af4b3c85806a330321b52f6eb743f5c", "1a739ea5ec5f20754969697dbba0665254b4381e95363cd97429b87eac0899e2", "184892f9c2a6a71ff9d35577ba5b50162e772c5a696009f2d185a7e9375b4185", "02b33e5c3d68cb0b0cb17f5e0e7ca9952e3fefa89a880eecdb137c560b389bfb"), ("2f02fb4d711cc05c9de79da1c4622ccd9a6ac2862ae45873e3e3f7ca237a17a3", "106f94e1da29210418032a48fba7efed467c8477d161f7077fce8e452deec69c", "1ae44df70969f7055dc29d59c1156cfba0937ef8f2f6be098c48179133fcb319", "2f5d9d1f76f1db83f958219182eff9067a7789ecee8254132133114231bc148b"), ("1bab8da5413951d7fd5318a18625bc321456c8ccf2e5db4b14e4a2c4ec02060d", "18e85a55017ad7401d6c7b3965249580a6ba856b27022c1dd7abc605d0be91d6", "145cb4dc80bf1463f0d618898e92a7250a87c9abdfb29f529262e08e612b16c1", "267b04eade13dcd3868ecf6a5e515c330fd1154981819fbb64af2c38e3f9b64d"), ("0c34e42e6546ab9556417abe0ce2436e87e9e96f672f351b5a99d59cf216b437", "01f5157d66e623e33a43c85fc3296053ddff8ed1fd9f8d406a1d99eac93f4be6", "18d3a353e973bb4ed7c1926ba87e4c3523dca984212aefd24aa0c88d819a2da2", "200f9e1ce7bea843e833820a7f7260ad6e90fca8dbe6a727b17653711a3731b3"), ("2c4fd0b2acabd628cffdb3f9ca8e9d20e5c5321911e78108f26944ce536a3e99", "26717869fcc04314901eba0e7eb244d55f840f89d4f8842016fefc4754695674", "1039cfa5fb377fcc2784fc7eabe6ecf1f124f272a759b1268c8f32f686824ad1", "0cd43c97131d08fc476f6db87d48dc45a29dac37d0798a0661515d51b4dab1b3"), ("296ca9c6e735e75bc65df5db0733896d6bc739fc6c0fb15ef45d93b3a6c81b79", "1e8da6ccf256b6c71f1b5b553fd1ad77d7d072d49c86348db49d815c3989531c", "1980b68fcaf4ae9d805a2ab5de3f6c193f4193a03cc479db9d8ad1ecc97ea446", "0e06ad164be3a6e76aaf478920d4f8ce34c2564c7eba60daa52b7a4a27347c78"), ("03e0851a4039a2c38c70f7331c733079784f9446239f1e53d12da1c76265c9fa", "028d26ac9c761422f45935cbabe8b4f9913e16ccaa44a53df9b8f4d6e86b2584", "3033a398521ebbcb2a080723d196d24a299eb0e56252673ddf734a5c669d7f26", "16169662c11ebb5a54ca52f1f266f3d1ed9ff83561d65e7873a8db8a54b19c8f"), ("163e36d199109255c46fadced32d980e11d8289c0483fc2c792047cfe3b6d744", "1e6ed50882d48fc674c647a2d9f8a14732660519e16f3ae0e78601b0f73fd72a", "0f6e088617b0a604ebdea0f455bc1f4f3fd8d494f1497281f1a5ff822f1829a2", "1a2a1a8cf74cc9ce73a62d7bea86c677411f4348990587b924e76b99129cd3ce"), ("2e6361788848d1743075deb8eeb0bad6595d681e1aa6dcf4f21fe41f9c0ae460", "179392eb83a40aa06290651ffc4d01ed68b5589c46d8249fa45cb1a6560643da", "10ff1597b99adb74e2cb17a3eda39ccee8bb256ea532029788ed12e6f88bd22d", "130113842f1b1e1337b1772f1b7495027f6ba43a6d9d0dda1f99e551e5fa68c2"), ("1f2f35be0f84ffd9ab90f896980c180ff597828dcff482818463fbe87b3b21c0", "2ac6ee40731608b4cdc2f568271371637ea4f4eb45b5fcec7fbe0fc286bda074", "2a5e142fc007e87dc8227c669c36b7ca64eec81a75b1e8455067454a1abff6d0", "07dccf32ea6e9d8ea1771affbdcc7751e2012ff6314bfb3459e791b365a09497"), ("2aa4d017faf12e957f4ac6eb43416f5a8a9185fd3ffd46f7e5eb12eee0bf483f", "30406a270f87babd7d485ca4cd405f9f719a26ecf6ea28dfa80cacea4bb332fa", "246429645d254c77901b3f0ac444d9768c5e1aebcb713188d758fd98ea56072f", "2508bddeb0e85b70ae191885b1f5df6f0d85c6c0284c7b89afbe99902583c0ba"), ("1528ff5114a07ee8aa91dc30acc922fdb80aea4d3972d9929e8000ace71701ba", "1071ac6d9df81e3f0db77a4c0b31b7f9f57c933f1593584525d877be89e16594", "28d793e514847a2762f40cfa836eac518493043df17683685bbace792ae62725", "1b704531827b886b67d2cff4f6176391d907cdfcbacc92823173c952b87409bc"), ("1a83144785041364c85ab4d43f798312d0643d3fe3d713acbbd97cb082ca0c7c", "03414ab93ed959385ca98d46185492cc7882ff24b6111c3c28a02399a3a588d7", "2947e8535484796cd5aaa038b4ef6df44050781079fcb02d06cd21372aa2bff7", "1fb3ddd0893eb43367e3ad460aafb53dc94eabb9dd094e5c03b1e5a48fb7d7d8"), ("01f6a038ca8d8ec027628727cdfd33c2c395ad9650752563c7cc3fd11b342034", "25a0c71f3f0e66f1275b01bc55a21941899c334100ea34a61c21683c10df3b6b", "0b75b9d7a74f45f6b9a35960d22ca292489431b07e7f7f067aa8dea561ec6e60", "0ddad4ea651a0e7680104bea2f5137298007b2839ca9d8a217c69da7b0a5ff2b"), ("1379e5847370f1cc669f5fe24b53769eec3d46f7c583192eab5a5b592e9b4d15", "270901ef6a1c11b679f6c8963319dfa9a67c162005cfc00a25a21d18d8a56793", "27fc542c860a48d4f8bca2a0a195933942af314bd75cbfd15fc8ba65d7f94560", "2cda754b7eb67de5a432c298092cc6702cee3e2a6ea55ff260e8860d15f9fd09"), ("12b161bd8e813b85f18c5827f79e63a0d1c45b03a575e599b80fce656f9a6f72", "019c1d30494e684ffe114a071f5d34c2fb6d41655f4d4f655360f315d1acd6a4", "073bdccc588aa3501f47d276b70c5c9ce15c118d6ea1568717ccac46962db880", "1821d9fc130f4654ab8dc64f11fbd3ff07fb7ab780378ed57cec5cd4a8e89acb"), ("2e4713c5efdbd96046c23c52ff1526738b70d16aee8ff3f0471e8d88155719c3", "1a3cf241eb02e35519bcd0c192e06b8f708c548f14e0a3f19d02038b35384121", "0b886a7fb26b79bb0a7b9eedb4d64ef80c8c40b30ed2b6d197d9f31df90a5c35", "21451098611a5a81f254949314946c20564b9668a690a3b1a2b782ae5574e6cb"), ("15bded97440f0a5a347a0e550e040b2e7316ba0c54347f059d6125673a13506a", "080dc9471bcefbeadd09825b4cee802a189246a3dbd454599f308d30d4a2c189", "2b60f6511bb66c33ee3a8209dfdd869d61edbc6bd4280b280890024789a50eb7", "0e7a428a07d95ea13cfee933407199c7c3b72a89ca4f37e92bade41d18a860d9"), ("05220b32695b38c02c25db95f8f7c2231d5d650a36429931a7d4fd9320899fa7", "18615fe520c49c8af7167c94da3ba8ce9c5c3de4832d138f8c21ff753d8056cd", "14c964907b2bb310e1ddbc35a129c89b15738f6c7299f63a87882dc0a124a7f8", "0d3c8e72701a461869290ecd920ab5aee36e6f29ea6c33a5e7e40bc5df3b33ff"), ("20682ba3c9a64295ed09c492710d686687b1d23cdc0094dab2462b94c7d7ab25", "048169aa0630d3d38d4dba5cf735e5e076b2ceebb097ac75402c7777e630d42d", "237f063668e280032aac187671d2dd264efe8b2393b50f2eb8f1e71139d69cb2", "1cf413379cbcd800770413903d585da8417cfad21041a3fbfa72014b3c2ce5d4"), ("23f050712903e33bca73255d5ec08d03deacaf6f9baadd385a79276f463a16bd", "23606ab00b8a55aa195c1e587454753dd31b8ee4b4de14b3082f9af12bb0405c", "1c8359318c613c76a3314d4b1f7a1a060b990cdba22c29f03c014b47882d1a9e", "08303eb677b774f7532403decfd98b0cd911cf79018af0870e20b0557fa4cb71"), ("2237108e8cbdd26b5dcf18e699796a02403be38818df8b0c3bfd39b85ed6eed5", "2a113de2672c66d22ea477ba3c2b5f38ecc727ffbe3922ac2c3554b2ae43cae8", "21aa366ed6e0dbf6b06f1f1201a29c450cf5efc2c0f9dd0b3768387649c56689", "184e4ec5ca6824a001f2fdfb2ff462e11e2e57ea66025d2a2e37b37a379a59fd"), ("17fcb1c829def6d8c105391b94a8bf9129e412bebc6f06814776958e46f11f1b", "1dcedcf1cf9aa810773485954137054206b880675e92222d146c3a7d2d358581", "0726972e6effbbd9e76495e64031de622a999405248522beac59034a8a899f93", "1ca262b2aa4314b357e456c0a7cba74af2a5599fa5011f69f2889175f32ef597"), ("05f17313f2ae58ca6333ecc13d5f815995bf749aa1cffdfcf9ba02104c1a6e9b", "09921ea62330a3d5bd655abce689d4d11a6e8d87701ca1e96bc1f12fb4a401d2", "21335c8b0a2af500d7d00e8fc5d63da45c4a41296c49414165c80eecc1c787b5", "1c3bf710b43d75ae407b7d67119f6e6bbd6e43c123a2cb66ba251251727a5e37"), ("0c6f0fc41298ca9825808cc8c2a78aa18ef5aa80d2d0c22890a93ee039042ed5", "1b8f29423a5df5fbf83a142afbdbcde8c120f0f741895ab6a34dc686f9a32d29", "2284bd5d0252b3a12ecf8d71b953c92b8abf27cac7044079736383e815f6f9cc", "2f10f00d6363de4b341919117663905a37dc9e52d0542930fe791a290ebe01f5"), ("06e6d20b3532024ea30f26c66dbfdbeae634fa9e2b0ff7252434b8b38abf1754", "1307819b951e8c9dd867c4ed531aea2b8b00bfff4a2ccab2ea7b843fd31fa304", "20dba602b1e957f58baeacdc3d40863c739da6f37c274a858a7af3b0c0cb59a6", "1ea8b2d48b345e9ed7a44de02a664c36c32fe8d0cc4c89e47f264de7b347f539"), ("27aaf5e3dee6fab9d562cd564d6f28622e44e7d80d2038e139172b0d48e12329", "215fb3f8f6a84294ecb2e5c8a505befedc52eaea598d72c5699282182fba6437", "0d980be93e6dcb98c36947ee9ddda705bfdd4ad233c2a49a4516094767b3e7f6", "087d091833c2c96c0321dc6e051e7f8828e1c45d7627b32fe5e45ed014878f4d"), ("29752a6f2208d5cb32b54ac626512b9f3f0e3bd39a3dc61284e4cf5fd436ea9e", "1e41d679f9b28838207923f17348772b80c479fc53646ffff808bc50962dc965", "130db0069aefe9ec0faea56113eb922cd9245c664efebf17bffa7962ec8e2748", "0e810df3a75047642eddbcd90c94092e113bbb23293d340252e94f460fb4f16d"), ("01395cfa2f5175dc644c91f9fe128bc7e8d67376a5716f438a168e1df36f2732", "09305c681cc0ef93ccf6dace3962deddbcb897db1365ac817bbd5f4593a84489", "06371130693d91040164280b6b6a759f79eff4c9f5bfd647734871aab6c0954e", "1e256bd49d997e8ad5fad895f0d0b5b7484bc17ff1e524e956dca1bbab8f8bb9"), ("10d36d3460ecbb21299c2fa0ec4ec6afb0d2f3e7d41138e239fb374a56b5deb9", "09ca823be00a4a223c238ee1668d55f1e2b41e6b3fdafb3abb60584d1f9e2211", "2c7930ae4dba3aa8c31f8e7479422ee1d102e03e6b9b4b3a22e488d10d2427c3", "0e474c779c4dbb634bb6283f23b5375f4c018f2a6337851adb8fc5da16a9e3c3"), ("1408ceff10f93230eed5815f815d289565c3babef1a356d64aefadb6cdb88daf", "034e8dde8203356e10086f09d289022c133b28852a012536faee4b5ce58aa2f9", "1afe76501063e0ed5402aa65c0baa9d2ea0f6708d01ee8f354f1d7cf8a91a06d", "17a4479cc1f6bbf76966f45ec624a78563085abc2c627bc738b19442f1e9ea27"), ("09933e758a19e3eb2298f834af4e5f7b6e067efe0ce73c6edb63bd4ead659015", "2c69ec5ed70b76582396d63c35f65a20405197a81fddac5e6deb29ff70199c33", "0e40bdc81eeaf59cfbfcc555ba04b6771b4716cd014d903f707abbbff1f78b0b", "1e7796754b01d2ea2e1993494948a72ab57e67d81f4f4fd25dc00a61ecd27c29"), ("02cb5c7ad206e39684c76fb13fd131ed04628b9e5c0701296dd65a87767c8fa2", "1d964ffc69f28e694cd6e1601cf09f0be15ad0948d5c72583d55a342dbbe3312", "000da0758840e319b8009e017e99f7ed71f1a2f4ee9b3254058af23a0b24e500", "13682421f5a6854470b9c6f0776e6472f5d7773bf942fecc6f9963f29bcdd5fe"), ("0a37045880b82453ba36bc43a7e54ba18c2800cdaab3e29b8ea06f2c839a62a3", "243db589a7409c94f2e70ec7176a731de974c1d9631666f16fecf215589a8f58", "12e2e0ef34ef338d287b69906ab09eed979177c7dc210e553d1d881dd0b1c796", "106128c5cf152908080fd0abdef4907de17f01d8a26b56806286cb66c7d7eebc"), ("0be9198693df7ed73c281538a3220e56086242eb9b4cd2ddc202600f6231931d", "29f76e541efa3d8f46278886a2920af46f7a0982f34b9e340d06d0d7d0fd6781", "22e4b105e30fa1fd46963ff887bf4d4db0cbcd92f589102050f75afd00519c40", "191aa1657525645f133833302595fe52263eb41c1b88da030628491f0074f6b3"), ("15614befd97064558859fd5fc0c238f1ce3a7aad890f76c7daff9b201067376b", "07486837575a0f36ea92322aef23a1bb1431ebc259c70796804473a4cb1ca646", "14c1e60aaf3f7620fc5a64b471d6a37bfdc10ca5620d1972b4d7018a8f513786", "20da010c3db2a472588d7da37ed0bf288eac9afc6281718c369053b2cab5ade8"), ("1258a27c488a3d5e4aefd5c66b5f91cd1b8bf9ae8d37451d78d8a7a93fc17e94", "28ec3015f342773ee8901d610bd621819d321c9d99dd548cb2cb3d4916900514", "2ee135b594238427b0c9ce78da8361d5c2d2a45f31263a6bfcfe4fd0e3b48702", "0ded646fd00e51f8cf660e41641fa85ca7b1567ee145a2c31901d79adaeff256"), ("0448713b3d49655e1db44b2af896987acbcf2db100a82f001cc319cd85657b40", "14c8aca8855b66a88fcd9230cdf7e65765d6e14e8c53942d9b9f69fae0c81618", "15de1aa41b01a6bca4ffbcfdc763c62df17b9f5f475c6017301ef107a60e38f4", "202ddc740b4c72de840bfd06ade8544f77e7750a0946eddcfe0aca2a2069fa3a"), ("1f0e0268b8de63ada466c3301d4798cefe59a524a0f71b89689c977d9375ce69", "0d0ae3756afdc32eb009def3eea7796c544efc12516a9389df32397e094ae79c", "268b143c51fa6e304ffb6ba40d02ccae765682c3c53131576b5356a039e9ccbf", "183dd85e622b1c638322b2f5117711d79a09475bd4a011685dc04744b84fa1f9"), ("07f32b8faefc7113a5fcfdd650f1cc98b10b723be9703a25653b59e5abe2cfb4", "07fec5a47a460221e2a6e7264190aa8c233a908d5026ee60e7c2f1c37904bbc4", "269e3832e1ae350db13908cac5d971ed7e643dc4ca06cab35bc5302360f97ac2", "1e870a3911e57a290fd3d745b2dd9c1c1b05b5773d01bf7e9c2edb3405d14634"), ("235f921bb4a1a93d9eec7cf7309032aac27a4d0b68bb2e5613be18883a1a29e5", "2efc7fe0ecc9827e788d2fec046616b4aa1fe5580652e283a26650511a4160ea", "1bccecfa6db5b4f6137e5bf430e7e8e14ccb059f1842f6f827859a980269ca88", "00077dcff698528a416c3ab23e589c5dbe5204a82542e37d7b324053181449f2"), ("1e3ff78bf207a5039d6086f546957d05b921d36b7c615150d8ddbc8b8f3b6a8c", "2b5f47cb649aa522d69f03fe71b3d96ba45ed6842af52d442cba358147c1d21b", "0a5fc55e1f9e886c7b118361f97c497c31cf32052da3fa11793d8229a791f98f", "1e7fc4cca89061897ccd393f2de4a2d4bc7a8c1c638b1a621b03667bea22c03b"), ("290ee317cd9cc637df6a1c92ab72748e420ac2b331ddaed3c72cd4315c8a528e", "2f3ae9f0f3c1c3fbc5f0673d7f4d0fd162905e86a567503957e98470923ff01d", "2ec2e10aafe1e621361ebf54cd8b5ba1a454b429fd5e15b0117405b8520e7fe5", "2a823b5700899759012122159be28b9426b72f2defe4f8211b6e7640b41e7e72"), ("044b064052908a2d5e278b10ef4e75adb1f4cf3e6f469791d1b3bc637e4ae36b", "1e7b73ed5845207e9b77ef19c8d69d0c83d1289b8ae5d6bf89423c043cd24de3", "1352bbf6ca7b98db5ea55f2a179aa5957c8ca64d05975317895f9a5ecc9d9d5f", "24284c4c94d87314cce588e881d1c507fac03886598e93e628a2af587ad1aca9"), ("0cdc3edd07f63ab13eac3b1602129963854460407286a185d0cda244487c9980", "1c158b06925d9b5e0deea1af3dd3334d2b6b4749be14acad2639655099ae37d7", "02cf3cec822e48b6d084515d45d0d9a81f3153ba07f32bc0659ae2c042f37081", "0feaa253581e423a4e1985b6078d638094845b4398dcebc04f530506c8628fe2"), ("00967a4dd4a2a922343579dc28c2787240df1b308c1d79c0f8304ac24042d842", "21e3327a8834875acae58995d92bc47b4980d4600a63e57732db97245575cd6b", "2beec6594a6c6b1c207dae1411e4bf7c7fc82efa92863e3bdc5a565da4a9e381", "2b225bf79aa9899e9bb96d6b6efdf404f7962e72dd76bbe263ae3074ed3d317c"), ("2d2a3022f47bb43e37da05ae3b66dcfe0a8455b107616f683dc0a382526a1c87", "16bde4c6556da2e17bd0237f52f3539372a2a16c5fc0c6d20bf77c8504c162e2", "285e55c0a6b207cd6aeb80f6b2593c4e7406a1e595b1da41c9bbede54c1c16bd", "1465a86336eb6e6a6f0a2231e7ea838808eba1c43c6e36e40c6e0ce34ff3eb42"), ("0d8408f0f2e7787e92b836c68736f96aa463bab01a28a5d666f01fff159a1d09", "0f352387f151b0c7124f663f2597620811a498c5d60b5c1c70d3bbab8f59729c", "17582216816ab154db41e5b4c83b46623cd9a7f81c1328baabe682e77cea8169", "151877b0d71d857f9437d8e24ba541cabedefa90c5dcc487debbafd4f4cb7213"), ("0079abb8421e8af4c7fbf0e0bab7a262046ca237905f1d6d37400aea5f8307aa", "13ccd46ad1e23a460bf78236647c83fdc03c1905a9dce7bc922a94e189f505fa", "27ebdb26a39b565a342b86b051744616081cf4b9aece499bc4b6b0fd5b18cf0a", "07e6f463635f6b5fed195f172a73404c96e7fbc4b6378d9cdda09ae0c64bde63"), ("1cd2e3453ffdb87f3c3e6f01551990f4bc4e8c2becaf49f577c57cdcb2624d24", "2e68f742404a645a2a0fd78c062a439577132981bc79b0fdf841dd93c06108d2", "00174e913acb790e49ee46ead0966d373ccc1444a7e939e73448c175d06ccda3", "0c49e3cfb1397d11c2d4a386126230234124c0d945cc0da551b7c505aac264f5"), ("1cad488a5e030883a2b9ebcb6bde4b7ba37d2ecfe0fe605ff3a78bf07d22d0fd", "274829623be8293f127b9308b5bcdb70e556b09c6e04f51c65711be4996a1d17", "1e1bcdfafc7600b7c95d5c9fec1c37c4811037a4097a6fadd610be0ee9d8a9c8", "2fce7638ff1fefd2b0e28def36afc9316d560941d09be37617113fdfd505f473"), ("1c0cdff82ed3be09d7b075c70b623814948861296189bf18f9e63633893459e8", "2cfe62bc94274576bc234f220380c1dca8158938c46946594081a563c04c131d", "0d8e5ce4d5fa36609b7b5077f30d38bc07bd432d5f1428a1b883195081911106", "10f34380d8dfcd8b0f342c2b1d19e798d52ecaa3ebeb9b7167ea86702fd29c18"), ("1ae962a98428be38459d2c0e90e2e99a07b20b2fb40afb7e38521da8d4eb6ccc", "18e7b675276f0664123ba2ee23124b93423365a7b40331cba2880f07ed04ac83", "11959c7f3127dadedd32fc93de6aaa5a2298604330536801cb3e6196956ca828", "27b0ed0680e2660be8d231e5f924d26548fac4a1e6782fa07f32cab6b13699a9"), ("11c7e58f8aa02c0fad08bd8af5ecca6b5aedfad22780f9b21a1cc040e2bd5887", "18a78681da8bc9c80d4bffdd2b827b9909c4a7bb8364263635ba40ec833d6f0b", "18943ed462cea9ebab3aaa5fd9525f906a00fe379cdeb6e22b9fbe405b3dda35", "28c8093ee15813da3c72f5900611080ae285bf969713f9f76392b923149d995e"), ("0cf429c6a5255aca55dee3c34e4c4eb8aa7b21b492e00e077bbdf2dd0aa8faca", "06be8ed53d733b44b159f502ffb53b32e7fd6fadbb9e25a8d8d109945ac1b20e", "20cf3f60d57428e1e1bc8df16310f89cbc9d02a2be40bb12378b2a438b052e0f", "2041eccf328426bd1c76f8d86e8114ee081fad0deba41c60cc37f49514a2c687"), ("0712ffa0377f068a162ab29a1cfcb4befd4be1a60f157217aeb784c579866f5b", "27b612cc6e0cabf6775bf008787ade3321da39ee0c638bb735aa68f8e933d834", "0133ab8ec4521e4e09e0c4f1c4c997fa8a084127e5d49f5eb477cc0e3724438f", "27d864ba43418b2b6c0cb699c06de4b14d2829ec3884592b94a511aa30d2423e"), ("26350b8e93f47bbbcd5f22fa6fbe33ad448c21716fb4dc0bef845d864db54fba", "2e1edefc48e93a8045e7d91127fbef5d735abb71550a24d3ec851291f2cee251", "16b2c9e877a004434fefb77f0f9746270fb2a2094d3360117923ed2014d7b8ab", "1bce8f30c26f752ef202722fca2b26e73782cd8808fca90698cee143d41aae0b"), ("222048ddbe43bd7a668f0af62e5ffce12b0a8406aec9936f2322f3290fbd41f5", "25a4ead7906624cd729e3d8994254d7c69bc8adb223443ac2f7faa9487577d3b", "0e0e61e9480e4f3e7403675d1135a8c3aa334868d841590e7495292b633a2ce8", "0b0507b65d5f12deea84d8552da987dcc4c8abca66ece2c843b9e56a9c8ade27"), ("201fae52b8758e70d96d503981a4e38fc6d65ca126e9353c80abc7feb1ab83c8", "1e4d7d4480249bdff1698f4c6d5704f1115d3012b1ed78b361ce255c4d503333", "0f71fe563e03635fe8e2621f44ddcd170b41c153912c23c07c24e19c6d183791", "034ba952dbedc50b361cd3fd7ca4861b83f50de47c101816b43a30ca19a52cd4"), ("278e5888004b776dd8ce20f6ef5ca237695c6c19f995f6524f774bfa39150753", "1a2f2e78b9a1b9597d4dd5f20d19492b9d1fb09eeca82187a717cc34948375d1", "04237e7e93b2c150d2cf9f850b0c6a08ae88003930e3a62dbec458ee34df6df1", "2227521e6517572da97580bf903bc4a14ff0b3612e15691417ac8c067a19ae33"), ("048a236c7c95ffdf35e155c832615989c2b1dab7e2b00e3586f977d980fb4d58", "0aa089b7af7cf3c26238363dc349d2dcd9b90c7aacddd946962cd6e4460315d4", "1b6353f354bbfe3502443105b2acaab26cedf266e5bf92f4003d322e824503fa", "1129cef022d609e9dc3f13a5ea1e3dd5f239bbaf91a2701b20330e829b46dcec"), ("01578c74df6c68d847851b5cac930670dc26e394c31404207bffdc1c3b5500c0", "0b2aec6d6d41768631c0bfb395e062f00acd4a1ae89538adeee8a9440bc4dbf0", "1b3a663934ce660a436e3e11f0cd84b9a90d9621d319ee99c5c975b8eb2eadc2", "18724cc2ad819709f91df99b19b5de2ad8b75569ada09940fe0928bbc374d590"), ("04baed545ec1ec4c0598d2461c352661945e1f8e40e931e0f10481e0432db430", "170e1ddb2b3d69bea6da312100255b1c7601754fe0b83475839c404c4b796342", "2b379e8cd5541f0f0fd5b5169001c0a96c8afd3630aa5b8e0a8bb65f1b32188e", "29731b0d82ca2b9e196bc1b5a29836c9e393d9822fa101f0364f389250f9c58b"), ("18754480918ed4e2a1dd02326f86c2af83e34942cdbd0fbd08911ba2b122d446", "1decf3a7796b1bf7fbd4f4537b461523c2a054d0ac1e836fcbe8a829d9f9f26f", "20a5ab6638d70cb9bba08116422898eeac037a9efa58fbb1931b0dda09ce94fb", "160e294944b1d682f7a4448f8f782c61e9e1d55903d2038403b414b62457c762"), ("0cc90d52601c3611f63e7a40139bec573eebfe9ab6ae089072a39a7ce0fb1615", "16987f1ba908ef6b40b97d75c8891321da7d2de71981f04bca0bbd41f1d58064", "2d0138a0148d69daf461d7f8d35909b8f93fd9d7ae563c44db3f245b139f3c5f", "0660e11a325a039967d263b9f6b61e62c4408229391d546c1872ab7aadf9a4e0"), ("01c84724f0a4a039227a6ab85c74f9ca22b13cc8b0e194ae4f452a394329cdaa", "023d1943b1951b60bb4739ab5f5ae453f6ef4c38770f177c4d4eb3ed023b52b8", "0a064f1f4517e625558c945013c4d894d8f94ab7cb7ed9b513d869bcf3f64136", "09dc9d9f9a8dff2d883d302018db7610f1a748416425f5abaf160eef06742fc8"), ("1486fc12e67425d45adadb00e349e53bb2abb307b947853dfcdc9fc1f900a2d2", "2a86ebf05ca42cc8748eda5da474ba6dd6cb41924ff104c83030ec5e4ce2611b", "2160bee412fbee9875db42da617c0eff79b48b2491c599707c653274ce1dc27f", "273941c0c53e512fcf27be2267d8bf8b3ada4355bcd7634ce31d67e1f0244400"), ("0be081f366cadb3d15b2f119d742ec1f054c800395eaa17f26d36084d0ae1f6f", "10798e70a29bd5ade808875d6b670cfdac452f74d05d0c84f93bc38aca8bb1ba", "237c2cb53998b1b72486338aba112cd4fb78083d8dfa0a969c52285bdbc8669d", "09bc5c352ce756d8583594ab4fb52363e605a047e78095b292f1b1c1e52542c6"), ("1a7ece53959cf63b752bef84fa8d5e3162b9f2a5dee5a61663282829555ff36e", "23bbd0df4c2177912a1491b5ac54d10c47e41dc5ee30ba53975badb33678123f", "144b2efe7425bbf6b7a49fa0fb9c3ee8579c423f6864d0e7ca7c5be00682e60c", "264c51711b8af9190829efd7ee287f28d0a09c42f4b3a3af059700dc8bc0fde0"), ("142e919f7580011e4b3a2f76942720586f8d51ad14e6072d956127ff0c57bc08", "05d97d74f7f5794ab7a4eb4743051c9de966c452f9bfee4988bc275bd6cd18d7", "26200c724b66955cca0169b02ef063cc33d884917cf9da9bca4f760ac3ac9d9a", "2eae5d14d55ce43522d739610f1e908e8009048230dcfc79595b5ad76b0de573"), ("2b37e40d63a0e2fbef6f23d4de66804878bbcb89933ec25d1ddeb9afd8f5597c", "11de228a7faa5045efb949f3b06ffd0ccd2f254e22f3dce200fdb7c4f7ed8bc4", "1149f2106576bec2a11305297f41ba7797db4a103d3f3a7787df9cd90891ca50", "1323b6a107018c180ce04b7a9751c7658022310c69122adf383f164f6ea9ea76"), ("2985e529dabf9cc387c1d3498630d68a4aa0953171d4018ab75c5d56e1f2f6fe", "1335e3a8a75d3dfdf6dd26337c089b7c46bafd05a1db4ed10dac86b19c60bb55", "28cf0f5778934e18a6c20a4bb73ec86b76d622640f3eb819e09fad4300155faf", "166a724f2565b33ca5c2800240ad821ee682eec1656cd5d630a35fd5fd99a5fa"), ("08a16b2246c85377af627da98052ae7bfe163c5080cef587d8a4ba8fcdb482cb", "276572bfbc6f441824ee74e17ecaf09b32118a1d0bc9d429132d15e9bfa6b7c8", "200f7452cf15540500c266544fb6662076bb92a9fbc0cf4582fed0d126e65ee5", "07632a098cf9037d64a8455d14eff898ed55dfb636d9fa9fdcc970f18c989d9f"), ("0b196beff6e037f4320b4129c384714e56fc45c0d6603582cf076e3f3e955a5b", "1c6757ac4612489015844e494563a539007111594366396303536307ac6aacdf", "16c9008421ceba87c8c16e5a3c6cc6ce42d058a401da0fbe39450ea51cc2af23", "00d194fd938ebf0325972a5c60489f8f7ebab5bf1c9f4228a5454cbe7ee7602e"), ("075f75667746e0a15ab75c918c108a2a22000b269f89e098891880cd22075450", "205883897c64cda1818cdb2c7d7c7c575235c13e6f705b0766c39df6d8d3c05f", "1be4b22fe17ed60c6b47bbfbffa3d5be1ed8f3c3d41f48de87a39aabf04cbea7", "205a4a3c2b1483007c5e62c59ee5109a437fc12672b18cece701883076f5ba80"), ("13eee955acadbfdc56e1f24a846aec6f98901590ba9ecf0a3bf4c01d79cca8ae", "2ab3baf96d76f19f6a5ed81939a49edfc3c8409dac54e3dc42da2c10f0d16f96", "12945f1b612a3e57741ad4c6e0c3145bcfddb30e9203c079150af92eb2b0aff2", "1228c3a53a386be54c2d9e20bf1d08e41b4adf9790efd74dee06ba8361fe9799"), ("00b90d315e8cc8341a9df381c0ac2278c138245f452bd13231500337ebc4f0db", "117b606d396d5fc48d521b5d3066d1adc685968e3e7379c4f840abeacec00f1b", "07bca5d6115860c2d362db8f56111c48bdf503486f2dcf6c40c1a3c82e076671", "1bf0a85b141ee320beb0e802a9d7c88b4287e8916e9384a940b020a745849bdd"), ("20f04a0b742a2b770689fa40689a2d99058270a6054def7d09a13b355885f059", "229a9379814596944c783c8192431fde75d2b5dd1f94ac331251eed867d313cb", "106f8de823e844de12c61a77169999add4329e8add90cc07d6c0fedb65dd4139", "233cb06bd10689f1eba5cdbbe3d0c0137b213dbb8d1bd3a66b10e27618250143"), ("0f306a337c30f9d7de82c0528fb10fbbe9a68d7796b93fe249fcc33366ec0181", "2635cf0747d02d24ee5195a0259ed44cf608cd5b27cc780bbfe31d1c718642d8", "1e244d436915ae548e5a710338aec3ff6e5009d4da581ca795edbc512e344495", "2999e41afcbcf1ecbbbf5d73e1adaa8d6bfd74ea2310936c41c37935fbbf9b15"), ("26c8cb87abafbdb34c23d8c15953b95533d55584ef2449dc660ae10eeea4ddbc", "2626a483f6c06b75d8cac421f7f5ef90c67a4779c294faabd162e946d9b222f7", "15a62009277b1a35f2262290a65c5a63cc1280b5665d96479e9d7b382587c01c", "0748778cfff5583b088f3e0ca71ca7312e131077e39005fc6af4b5934f65c946"), ("080463246268be7363253f82dbd8350c6c98ad621c046cf928df4dfe1fb69039", "2878df531e1bf47e94e6e0eb0d9aa0122e491560d4b534967d7e4f1999e63ade", "0f6fa173072ad8403fc0812830e291e21be35acabbc16fcf6ae3be7744338330", "0db871ff596365aa83b94d45bd80298cc356980262367e837a832063eb204bf3"), ("192e646cd6ee84065b702bec5925b74267c2e3d28fcdf3505b3e00f781536846", "066be702bfa5d739890b5c196d59dde4981b51813952f45b1978ce2f35e72ec6", "04afba980cdac8817701cfd958b4eb81777407e2195226ecb5b60743c0fcbc8a", "03f286c78dc6b6e58da6bed264220c7772eb86f39795a4702425afa40cbafbd7"), ("0791c82630be0042a0c499f1fc4f2126d992952970b2a8284424ec58620d1cf6", "124a23cb6375c530b07878808e274402714480adb7bdc86dd2f3fdecc993ab7d", "1fce8c129dc14c391c5c787d5a539ce01fe4c174b47edc1f22c1decd012b7681", "196c6b400134708bb9b5dfcc9492aa828c88761e5e1f73f34e94a4e29c23420f"), ("280a9f1896b0f281e903d03a86976c65f3dcf81a312f6f74375f45cd572cb79b", "11e08eb7f69935b67832506bc54dcac0bca9442b195b597eb48fd7982b69d450", "1835df7ef76914a9ec8c27d3430c7f357bc1bcb879877825fc3ace7d83e1bd17", "28c36bb841b4f06d62aeafe36a87ae78f232d6ca6b71b1ffd408bef2d8a7aefc"), ("2bb86fd219de0b2711c46de631130dee371bc47b0336c1c160a3554cb3807104", "2fff5dc52c3fcfdf81ee725b6f020fa20201c55850b562ec2ca7fe737069523f", "1977c978137415af29ec458a339fa0cca419547241908eb1a363512bd8793076", "2782a07f4530f13ce9c317693edc6f0ddfd5e17164acb320ba7e49b891f0e1fb"), ("0aa59cb37f9c77b3f2a5b46dcbfecd1381b0abbfb222189f597919493e5a24c5", "16461f7cfede0782650ab6068110cf1f3f1a70c3c05861390c2f375fce0ff6f2", "088d6f6a5effd6f63e38d0de6085004f16640e7c79ef741edb58dfb82a9ecf07", "1f04c3259eff444bb0bb5b51ee95ba9d09e9cb3a83c4aefec65dc6e8025b1571"), ("027d5f356fdabb415d1c0cba31a62df662d0724176d6cb0490eeae97246cae47", "0ccd9969e3ff52ecc852fe51fa09873a8516872b4028a55d5606edfc7c610206", "2e5de1cad95ea6565a570d42749c42bd361115a367ed83a9ac855b7b4d8d7183", "21b4dcdbb27d0591f0a50b62006a44bebce25a85f3ece77779823f19f4bf41e2"), ("0258b512acd1297a44e323c9138e0829e2b741f232d143325b973521b102848b", "02a99aeb439e5fb1bb087648a4e60bc2e0a2404cdef6a68ad0165ea07c710b5e", "0f28891a8731bfd139316e7986a0e97929e73dd4d6a9b777165d2729161b011e", "1860c6199bdb7c57d8bc58e48e7df1262e496d6515e0200cc8fb0ac9dfe77c45"), ("26fe066e4363cc92cd9040520e1ec275dc12ac1864103739ce22138463e8af0d", "01d40a6cfdd5918e98fb9e09383a233d8e830a0f3baa57ad1438f1bc1fa83b01", "2d3a63bd9a8b146509c194eef47a5bfa1df2d036cc770f008b52df7d9e3242db", "2485c3596c976742dcb137ba537ec77d056cc482e28ab3f491e44bbd5c613098"), ("2754270f5e7c72989c1852061e582695da58d1c28fa2cfb1e3009b060b5ba923", "29dd4c2192c3b9958d3017be4378ae0fd9e7b1e4cfaaaaa9d5cfccd69ff9dfec", "16d3ee5808e66ad0078c813ab6c5def91f8168f7f20dfa37b417f4b64ece4780", "1c85faaf1025af7936c16e198f601b8daf5e515ed6d94513bd240b2e91c09133"), ("2d44f7522dff93a5dcd6c74ff41b082708fa5387064b5d56c6b85fcd4e0a56ca", "1e2f2dd4406045a3daa4d861a2f2d027e678ef473329d992d57b881053feb5e1", "207dbfd9569f8b3293ee0fd96fb9f87063c7ba9b888356a3e76e828608e9ed71", "0e5ab718cdc40ebb82ffbef6273bee5c5d9ac95122655637b415e384bfd8a186"), ("2efe80241acfdda746122857f63d7a4f0531920d73e3f347b8f8a5a33828be40", "2cc2dafcbd3e5db5ac796f98a3b4d201f9957373be673a5b5d410cee6af30c4c", "2b419773feb613e9efb3475204e32152a3f861adac24f70cf74d885ed4d7e685", "1fb116b02e15084ba836bea0fad7cf2e359738842d8e4c432a40d4c7cd7db77c"), ("26987c0aa67b625b31fdae3f0f237501c9062937c93df9ca6ca5ae777ce3255b", "14d2138f38823015ce89c74d00841e17fea415e3aa9c7cf4bc7cd55bba138c07", "26937517cfcffe11e9714ef9bc0a712f0588fae293ee68e4b5af8438a310dfd8", "204ee66a44c2c14c5706ce037ca04f1c1b56ae68d5815f9872451efe83e54c17"), ("0aa896a4371fb2e2055f4f4afe637f7cf651ac0fd0cbe8b2b70cd056e573dad6", "0c6d00f2552c76e4625f2e96c93565548948a3f7e3b6b59d3ec3cc4912cc2dbb", "0665e821ca95b62c6ed9ff2b1ff62379fbf6cf9579090bde0843d68ff69fe359", "237c7737c46587272b6e5812828e683200fc5e4732eeba0fbc34da314cc9ff4d"), ("0d78ea808262c39d842a1471d2024ccab25a91657fb9227e1413cd7c496d01ea", "2d41cd5ffae53344af65ae46145365cfff14960e295cd82ce25ed3c3dbe390b6", "182d90f01c8d7b15bae33b4d4c918201ee3163b6ceaf3c6ae4bca71661a8463b", "02ca6fd6a5226252de4b8e409e8d92b6e0f0e01aba99cf1db4830f5c8e442a34"), ("03c4bc66d96d375d871fbd9e7b93ee46cf827e62d68bf46eecd6973c13e360f0", "0071105e5681a780a7a0731acdecd4551bf1d921498b43e0e53f83118c59e84e", "1f34e1020a55a1fabd40ac99d2e9839998ab135053ae82c30fc869665469f710", "135d4bad06e7a94ed8b13192cf64dfd3a494ae3d5f7958cc231d123fd960c88e"), ("2c1c9bf149f35f729baceb9f49191d1b47242799d92b96aaf35ac68a6c109654", "2453f57cf6b21f6084988679d8f92475a9db7eb3f3f97fdc0dcd431803b94447", "23930e19c843762398f5005dfdd3e6775a851f04a07484befaa19c39c29818d9", "18c78f8936a51cda79d107029911e56cbc9dd22ed4f7951457b7813a4ff2b96f"), ("2701ecba93d6fe1970d3e09d22e4656954fc13f556139f30b1e6a9f7ea5ecbf9", "2e3505368e6e67dafaca9ca9ae84d6c5df0bc7490389ca4cb44628f37f0afdcf", "23afbd9f2aa00a5d6dd5ce23069c432b2ade7348a25ca6a25e79894bcaeae121", "2b7de70dbc102c13239d7f13437fdbe94d23ad430024eed7027c49adf18ee247"), ("179d7b5cae8294cedb5f57a975ca74a20cd004dc8b8fdcb5b53b149dcf939cfa", "1508be12607bc5b08dbcb494c74f577d4faeb187c1d6409a1855e791744dbb93", "303396c1b64646b3b2c43283b73733f9cae6874d895601fc5ad3bb3787a3b6cc", "28f821e430e4159c001e1af0ce05d9b2f34ca2031b287676f299d99c59d3a8b7"), ("27a1511b6d797926a020f9f6337655e7a202f2b914798c1e5de43f051fe61958", "125030b855996f34166f40db0c4477c3e5a385b33e9f6de91fabc700c3ea2747", "0c32735f90d5abebd34c73bcafb7e4efbc2190e3d8a509f77e4cf6a50d19109d", "2a7c6cc3247a3b95b54a645f9fa3acc1168a4a754da332ba8b72310308273126"), ("13f339c40a3d75f6d65e62831d692770da7469b5d0504731c7ba1a907a66a0d4", "1615746f88eb58be426a811fc327d1edff3e1c6ea07af0d34f96d6b7a3ce0693", "294da08594e042f7bc66f034d4aefa46a5a3bd93644bb0fec088035575c60199", "11f7682d6842da59626e253b3c814509899cda606bcc3306d540309d23601543"), ("075b4deedea3c1b6705db0b5c10055328c19b145e2873ff71facdd36691c6d03", "12a857cf77b36305f3e143c57b571ae232f0979e36b5f5b54914885d6a8ffb49", "2f48cbef6256758e2f2300f8db7ae3df020facf8e3185d7855260300e75564be", "05ad6efc3bf9eeb0feb0b35afba3599c4bd2b25f9ec3a504a68c3adada26627c"), ("2e79780176805a91eeb1ab00ad919b56933a376fda0ef562916e8b5054188904", "037e94888797d898e5e51e288230fdb0d8301b55c83b7db7809356d7e857b278", "088ea757b5b81701df49716f963a90fc4206c036f8e5bd1947544c516152351b", "2c695a456fdd2a2c85bf379c4dcafd98cfb5e183d5b44731800fe463eccfea3a"), ("1d5397f68c842d4c030b9c3d7258fde8e31ff660a05239d722d3c37bbaf44154", "10d7aaf7c15b2c2d53bc348d4187875202482374e3edccae6bdf45ddf5a58314", "251c5bad7ce1ca7386360c0e0777bc7d93568949a3bc34576944277899d7d93e", "20a30e4c9578ac80330bca6bbbbe094435afa3311b1de3d13514f3680244044b"), ("15bdeb2a8dbccdbbbb423418a08a8090cd2db546f20ee6dccb783e2e32cc8c1f", "08958268f7cce4d6671a7db8eb8096a40134f65ade5133e6805a0f8b3a23af24", "138a34db089a446e7c9726541a5742328e3f470fadcf56d83ecf7c99c6107a7d", "2e0bcf1714c52f8225a8ca58bd92474db4579bf07a5c7524961942c9a13aa1c8"), ("153c61cd09f648841e948a6f9c3b27b29186b1d036a6fc1e49c1b1a75b108a08", "1d26099777f19a0a3f83968bd3408dc3d7dd386ee4a5dfe2fe0c03455aa72cfc", "1a5898f684cb94c5c1209f93da941a81b52b88ad34c0e85cf2c37b7633458719", "197fd2462dd33a73906ada9a043ddd89aaddb738eded9c2ef42b082019ddc15c"), ("23117d1c32819a725c768238dd61a04d9356903d39894f13afcf6d61ff0637f9", "028ab5c5810f611781059c1fabad5d3a534b906e0cdea770ccf71b802db20b36", "242e3379fef0ef46940fedddbf7a1928bc5920b7b8e47350ac775f0ab67ca0be", "12bf6118a1dc877f71b0f93e594efd1212781fd171c250841f8365d2ebd34fe8"), ("0c86dbe11f4b2d629f8e5211bec34c638e1981b0d77d94b2b2dec52356beaf59", "0c3250ffa700d9a0b023041e12fc08165615567bcb85bc3f8ae7a5f9827558c8", "1ce168114ffc97101725f8d87a05d6d58110b162150b2168dd59951f5565c447", "153d46dcb30806af38476d8e0efbd23b679f7f216d9194d97f7a4024992640c0"), ("16a27708dad6a15329969b8d8194a2830b1f0b2bb64121c133e2488eda85de58", "08a7935544a191233cc7390f69b386973f2eccfeb33ae9dd6345d0abf4da91ce", "26f62ba963c3f77264764a25d16f8e75c22949fb206448285762fefabcd4205c", "10be1fc73a1b27c41509b7b188f74003d10bff5c890c1ac1569f41df9d883e75"), ("29ec61bcbbdd642040d72e4f356b0dbce8195335255f444c07cfa5d918a57ac3", "1323ddc4788f18af376cf17f9f745c12739eafead219c766cc34adcaae3d928a", "0e7fbb57da335b14f34aaebdee2b6138965105c0315e09dc724f80061165c1b8", "10aefbcc367340d82fc9852013957f4083957b4bb40563c056bc04efdb16452f"), ("220b5c0cf54a89fe7b61f8a95d1e4d0fbd607690e66bde8472ded283e1501a26", "23b79fa3a779587c768c1895cbf669c5398e783537f877450e3e15e15d7ab5ad", "208e0954cd7e46d33dba2c669dece4b12675cf079322e61e412fab74f3670077", "1b5daeb152fcba522429ff648c1bed21402d93b4efb2c48d16538f5612383918"), ("2e5056f1546c1f5548ab0cea2b0a474def83a824452a110e865b3e4883cf6bd1", "2a30c372164471f694e6931a6a8d1f56a7d5487202b96634ebe71f8b85acadfd", "2c14030840d3a7dadc6368f794f71283e95ba8312b9f3160c47c534459cceed9", "0241adcb365028451caec75af7324a169819129baeb242f79a0010fa37df437c"), ("2c5a243e63222a2ddb56e738688310ac199469aa7858bb9c6e7aae1f4fd9c544", "24cd1ccd6b88e1cd57d03e38dfab2357bd1b30087fef330ea3d9c6462f9f6293", "2bdc21516254cc26341890d2877064b60f660d05860d583479c885905dcd93f4", "25d568d1abbb7bd94713b51bab46abaa274c56e4fdf43eb4c4e886b43062ea84"), ("1d8e01889740b71c7c3c197935ba93ba30d8ab8b2fbf9e040bd24ccfea7b53a9", "0f774306dcac604268c507f164e9292844dc21a19d344a372426c2e6d82e057f", "016d5976457c3a3d50d428f2cd43802992caa19ad3aa63f2617eee39cdd57820", "101f40ba6cb90fbb18a8587b47f25f9973c7f09a0558e3a54c3eb26ae7c308af"), ("2fdb1da1a251296c13569e720dbbbc29dfdf5f5f5f579240c5ee09d8554c8552", "2fc4832d39a88a76cf9b5c250acf77f4d1115dd1c7c85f18a6f9b3feb73e1f69", "08137b92af30d1f01525cd71d83a80c23715045eceb973a055501d3d1b64ed44", "2bc6de778071d45a0538e4caf16c329916a2f9789bedaef551da98a77b8b9f70"), ("1298ca8a8df632223ebbbb7f79a6e8f2f05f8090928051f261c7cfd3da519a5f", "037fdfe73e049455aa7b1845c4fa171589938ea0c136d606bfe69e3b61991059", "1072ee38bd75b1b3f6b94e7e1c96b9472298ebd24ffb88faf5818dc1c1e38db6", "195c8e2364767200279424866c46a0b5a1fab50f33485acd5ed0041518ed90f6"), ("09ca9e213f9dabcc41e941fbf603e83c50564beb484aade38d10681a937258c7", "079843588567d8f48e7fef0bd54a04fb90b478f379e3e94284fc6f3e7d9ecf4c", "19938c831509c9741cf15422106575e39d0b869882326acd77fe011fec59309f", "287564dcc6d4af7d41b618320291aa193cc3988d99e86a5c0ac6b64611eadb44"), ("140296766978e81a483f3649a15c8be494b993a3c8b826a80c70c3458e6aa312", "1ccf7972ee34b94e756a6449bbd238c1aedccdb315279c12f971ed3b3c94acd9", "16ae22cfab5f8ce290ffc9cdb1405664e87aad373635146db9687bd851f63c5c", "1437506c86386c1d447946c65382bcf6a69e4499b6df7534e5b8dfcc0d62d464"), ("0ae2c890a1fe33440df73d386fae47dfce018f5ab3bd0724127f11e5b37c122b", "27e0bbc25bbc607a24f0e788551e1eac8c4c3ee778d30063ff583a57eb629329", "146f067539261386f4d712b1cda18d61366f0168d94537bd9a220c0150578bc8", "106a2b34793a094697da44549f341862eaa820aa68416c849c6354c4d458247d"), ("19fe4f3cea03ffd68de41f99f0d4ae022ad3696c87848ec40f548c623388fc3f", "22722c7db05dc958a6557177da9004a130276a2eb5147a83a824313b8a99236a", "0f1dea127fb633000ce16c98d145771aa62d9b7f01207034ffc334f66242a78a", "2373c2cdac2be7f29f06e98ed50f45db87acd8922c262c583fae188d476d8496"), ("14bb3c2a27859b68367e226a08d0a94df2b5b52f1f0ed480a7eeb492a84a81f2", "07f5219ff4b675447e0e829bed1a0f28786a52133b751ec3a1c4272c4df828af", "2d5aca87c3c2f82248c5d637ecb4a2652cc1b472a5490a5699f66d9d0d6a391e", "027892f373c6feaa4e41c03100577ea1a5073888c6586e3d08cbba2e7f3094bb"), ("042aa23ffa5feb2ea857c595241a485ebbd84fe4aa1702d2485fcac15569fa94", "062273ae8bf025b4c4c4d3da2f0acadebb900ef4dab1327faceca7701130f1a9", "10bd84753782c28ae58c10b94c4babc5fb901e8c45d005aeb038acb681f34ab3", "0e19b90a6602fe1756c76d2f5a7564081f27ec5e9a406f47fd118aa716013672"), ("04e73c204c6f338b220d995a3e871d7d75c44867f9fad86164d9e2c4213fd6e9", "0e0bedb34acb4b75336fcbcf86ec5fd8df95527b4dd8e5c40a34adcdce61adbb", "24fc7252f0f48de2091e3f2cc46786daf90c45e44c3bcd540c12eeec9df9b2f0", "020e6f98aae11e369c953e9c91cd9a2a59bc2512128e225f406aed2d6ca5884a"), ("2af948a930bf3a4cb9b52ae07d108b5e60ea300a8f18ee31776b931c6b10f48a", "12203bf9dc5893d6684e8d973928c3594d7083b94fc78695fbbf82cf0090ed24", "22b884286b18f0c2a70be496421b3d0a37fc7906bdb7fd82dccfb39acc0b6339", "2a6d1cf7c3ef7f9fb40a141cbab145eac555494c80a563d91a7159bb7d151c7b"), ("08451306eef5fc7625dd9dcc4f3828bf5edf479bf3a98996ab9dee883454aacf", "1840ee2b5ca7ca9ece3b7b8cfbaab3d2f4412a37a6d4a47e637dd9734c8b7b4a", "2096dd8b1c7cbda5078e361abd88c5d3c494e22104f6cbac3f9d070b9f86ecba", "2c3b3b5fae41f66056da99bf864af25f6869433eb02a6a77d95c94cc419d903e"), ("029a6d7b473e2752240fd60a097cb3a79a5ef13501db8a5d58ddd5e1ef578a7e", "09b465f05d4a84e2c2e35ac609cf3d8b3b1ebd4fd62cd5e4519989730b1b9c9f", "1e0813c594cf744fc86552de6bd36af4691d5a9cd73f197997d4af3114db7470", "033a39b2dd9346686bca03f664ba3c56475b9e4540e8428048c48bc885910fc2"), ("25a7da00177467e175577df7fcd935d4cc251b64014a033ff8633e720b33b159", "09309d8ef7de792565e76bf234f216876c521daaff2c28e9f8ed1a838fc11984", "01be5ae6c0231811da993c331aea8fae6fc4890d85709ca6ee53fe81656f4f63", "10718122776d6517115d49bcf640c209a9c1d260bc9212827f9d26b49f2580a2"), ("2c8c58eaed79b7e0ec752e6a1eb68c15029c2b3615f5b33ef78db61b987e540e", "2e50de3b64a5b04dfd51e70adb98f18dcef2925f355bafa1cc9587f098bdd0df", "2267e1fbb08bb9eccd0483fc438c1534839ae9b69f330ddd981616ae00dbfbfb", "20cbab5e11129daa2a7e3b462831f9e16eb36e587d9d2f3301ea5aa4134644cd"), ("2c6a4893b57ac8f8a581a9752381f49c750d19b001aba042ed9ee9a7acc0f9b3", "0f7e6613f4a8d7e4ac4b4fe1b27a45ad1dad6e3e61b54e7017a5e2bf9bbc2e26", "1ee727262042574622a0a0217a5297e2285caeb01a5a339317396c92e942a8ab", "137153f58b0505c2a240a9c46faf8747b3e147ba071c7fd2daba3304db13b79a"), ("0a0fec4539c672d22d203dacdaae9f3e8192446d45a9a33ac9738a78dd706624", "017ae8413b4482364d3df18cf1368debd7d9c21576158e9323d2a02f1ea31bcd", "2cf3bac4a1f9e46e469c5b3ff81641989c8fc7b768b2ac7543b05e244a8a3f6e", "0239306c04942fa354a5c7880f64a2e20b3ec30a17fd1e9dbcddf8ffcf5cfc81"), ("0272e858b0f653155a11d62a34d35d3301d3b97a2d57ee311a755b2358d8b019", "2af722b8a7860fc69862fcd386aaff925e89dff888051409171273b5b5ceb268", "2b83dc774394f8f03841d1b1910af4a4630049822a125705beb4330cb49b8a07", "0a5ae46ea7b97acdaa7fc3c35f1aa8543dec4ded42460ed188f41af9363939b8"), ("2c42339f2b51412f4ef732cd5bee1b6f2edde3fcde2ddf0b881517af57cb0bbd", "1b8f67696b4d7d45bdf42c2718b8d1306097b8bb1a7b4df75c55818346d0d2e1", "01806d647cd20667fc6dcae3beffbaa83c0ea743e955b8b7b6ddcdc1b856ad61", "0b4061a88c9d513785844e5e91fb8605f86d4e7a0d1ca9c0c9c3e33363eed03c"), ("1781018c668be0dfe9232a073b6ee3b427f0c78bc0cea19b35c3d8d58a5a95dd", "25ce46481e95072237ad749e3ddce4509d2921123b75c0a4dad5180003bea74a", "1dae223db6bb30eb5848088174165a75389bc0459e0b29c76d1683f44b1dd4c6", "2633408d0d8837c28c54a3748aa177afe0d381e6aae0b0c6d425d0f2e711bf08"), ("2e52147defae97884e725fc4213657aaa4bffaae7f7cc7c6102cf0fe210de64d", "08a8bfeb0b7221adffbb559e6498afad48e502fb2bfe5e175b88e459b0f0d829", "159a58c0323c093539db9cab71714c039939aff5a4ad89fe54ff417cb9d9bf8e", "0ecb75302e1fab017e3c7bc4fcad961d6f9ac99790e703309761d5583d7726e2"), ("1a6345be279d652694086254af0fee5df6c200397911b17b620d41f85651298d", "2fc00054fd453c85002fa76d33fbba8d5813a340172f7cf7d7a2e03446860ff5", "1a561b618ffa070890a8d10a9aa3c4e35647f7f381246f82d06fea45964dbd24", "29b4c62fae1bd36843cb27e366725d024eb83359842d4a4aef05378318d07688"), ("089ae0bae9f3abb858098a638742fb312a9a58348d0d6b4992b9bddf534db3f4", "165c56bdba29ddd301c6f4e2130f7b7c5b19d76a922c6bf68a4aa7b73b0fab42", "283e3dde477010a66afb183fd628d907f091436370e64bd4132908ee83001924", "05c117656ee65bc4022a1172d29b5c710d1d2d054912cdf198b1dc1d487d0b63"), ("0349696e396bf47927a18c4f060c4b17c45f11b063a5ae13a5090a6f28c9b4d0", "2a64d4d390a3fa4ca8fd43381923f85ede0b259258dbde516236c2bb3e1ff75b", "29e0951a6f95fdeb9fffdf30eead5abf8b8598ac6b150a8dbf09bec1b4f7c933", "1879f87ecce4eb645ee97ad0a254bb7fd2c4f56b6adff61aa796e4a68d5f6a4f"), ("05a3358aa9bb3722539535f8b15f717e2d3733fb8f943a26b7fe6233f2ea8a0a", "1926147199d2c287517c8c3ecd42ab6510b657ccd943f796d404e819487b700b", "162d5a09ecfa926b97145427d3572defcf6a18fea1a9265b0e7fa1f13164b785", "186adf8bf5a813c43dda3baa7895ac77a832494b2146c8d9c7a0887d55e35bee"), ("12261adf1e7cb97be714b8b637d329966df87e5664de84a51f9b42f2d0cc20ee", "117aab3a08d299935350f7a2b568a30bc4248610e9ecf4651fa4df6600a3ddca", "25f5c660e3b1e63ce50b51da97957e4512f4e18fb475a94a28e306f0a3d566d5", "089fd50da3991a66eee56e8b090830d7f64d61d9ad49a314be294f33072ede0f"), ("1d3f74fceb9d1eebd7332a95f7520a89bebaa973df96578ff4ed8c2be9801796", "244c71372fc05e332c49da3b5cd5fe855fb5267eed1ce79abdcefb43eb5f437f", "0d931343a00170e30636bb54e17169a1617c7d91234e84626508a4dec5153b7f", "01a856688f56f1346a03ee739bf5762c58d4658f046ae464aa647ca632ba506e"), ("03f5bb058243edeb47ba584ad844a3db865d6190838b7ed9cfb9089d5a0bf3f4", "1f8beb139d9fb6b90d8b013f241c2a26409514a808569e0fea1b380028daff26", "1b1bac22462123e6b57883239159911868830c13a8d09477b30937868d7ac024", "0c4b664db2e3e5d6475a48aaa1616bd4e93d93db2fef540cf2d5c03efb0ade2f"), ("1005d6d23732a2b902724ef68d95c8b987ace94ea84b33325feba11673eddc4f", "1e5307620fa6de68986c54fa4b78e53bd614ea28e8fab3e1b987c6730bbca576", "28262a2202241c19045d773b91e0dbfa6cf9ea623ba63069791d094b0aeeed29", "0f7ce6b97fafde6dcb23a49b9f4a3a30a1669836563e4f7cde7a5ca136b8ad00"), ("293ba8bc080ec952cc6756b368c206a2b069c7b6d4712939417f8006e5e47de9", "16c835e7dd9212d376fcd8ac5e282f5e9bc987f525044406d8f751cb10475621", "09dc40ed22cc6a4cdfa6146c9d7cf31edf78725cdee16667309436dcca0a02ec", "2c45a5f99125b8091ebbb6fbd0ea3eb9a34272d6e160d7b8a69cb25d4f75da4a"), ("2c5f2c691f8eb81c2831050ed5b95db36d973f7d9c1994e916b3dbac96df97f3", "1420b8c134744748fe471ece3e941dc388cf03fe2607f12578efbefa5bfb433b", "09c9e8afc0ea1949c8a1ac9dcc4bb1387e86322be1820a7df55a753c1103fe3f", "29a6aee6201871e08df2a194ed8fa50d8a1429ae58672ec8f9841d716874701b"), ("12e16f380773f9c1740c3a7c0597beb2bca45d3be7882b0648516f5f75a1bdf4", "0d8834b8000997f30a880cd41aedb1639ca2ceedfb2e8d3a1334facefdae1420", "110dbafa0edf47386b8f04de0bacec172962e03a77e75353e0cbee54f2b67250", "26e2755e3886a56d64a6081cc42637e1a4761b59cb3737f5825d2c07929f1a09"), ("204af878cac2b9a7d53e5c78b219c454ce2a4546a495e40deb665d61bb7ee6b9", "09cd637ba21e4a2533a66e7189fc456be266bb12cad2fef2081049874f9df232", "017623cd0587263e476fbc466fbeb4700399f9dd8f0c49b5f83d586a3e563c1e", "2872c37133ffc561fd0e35ca8462d4d746b53703d16150770943a797a942d550"), ("1b777f79a7015f770e26e86a58c676148d09cd30d4b8408d3ddbce87aca9c341", "1d89da1c9e91c5e5c85101b47e87446c2cefe19aec745cf3b74c4ddac5b6e86c", "07cc04ce64f57e5fd1dd9dcb0f7c90e9b7bed79c9e3637eee81e0c174c0732ad", "2476da79dcedd9f7f4dd26c582f02505569aa7cc066ea12c174bfdaeeff9d372"), ("03c4c1b08e537728ebb8fa915f494fbc5a0621f479afb0fac3f307f94be5e60b", "125184ececdd209c46c84e0e865bf079f91208fb3c0aa936484d8ae85e8a05a6", "1986393a559c2450421d90b49e1ae140a2fb456f25068e970d848acf3c7b3f10", "1cb3db26539d3a9773fd4b81bdf125f79f53a07a5b60cefdcb63a77d23ad15cd"), ("2206eeed6a08364612ae785a5eb0d6c1561ec8c07719b66416e661dc6b584e2f", "29a1a40059a12887fcd19e4d39dce3c17c1ce04424dee3507ba18ddafc0e93cc", "226df2160d0d2231815630f171272a911d227c2d135092f411a048bac228ebbf", "0e6ea7a514b1814d5fbb3c6931e5d927bbc4559d26fb24527ebe33ad04e3710a"), ("2b48d0ec948df5ee7c83739dca13aa862531c48a6ce69b4ea4a7997dae245bef", "2dadce0a2d37facd1ea64a632ffc35ba6d4e7c46248cfd0696a7f60b695aba4f", "22d4e704cea24cf033efc4d6d66e72c7612057cd768c1cd484d01ad16d39db6d", "2801c193dcc3fc5596c5d2410aa9cb850677d993765016411fa9da814b6aefc4"), ("0c113564717958434ff075c1767c22dc3d6789ed99783205b06405f28c78c6df", "05c7a40b4f2a2f436191e37c27309ad3c3f6b67e24beabdeb9398ba736f457cc", "15ad01f32a69a4a5414758889b3a68bdf25c2dfb08366403ffc3a69c731dacf9", "0b890ccef7c05a89509af324157369bb133e742844523d623a02fac66b9a2907"), ("0179f98bbcde9d0d7c754c53579ab255e9caefdb74d50de76443b97a3787358e", "1c418b586ae0b38accad7e19de4e654eed8cc2fb91e36fa3f05c453e152f3a3d", "2a75d013bb065791d24ce6de42fa81d568faae402f90b075f799f30d100ed54e", "1d832fe8a18f35d4a80de97275d7f27613b14162024f748beb29c8290f4e17a6"), ("2f09e839f8ce162d08fb77119f96534c7d1b8e7f4c9a53f5bfdf17cba969adb9", "28cc81461664069d03475a13a6005515f3cfe9c71b66b4d84ec3a4dcbcaaf346", "186f341ca5558c271378958e93e95e0c98fb7743f2843ea94cd762e5fe627bc2", "2be562f5b3df7e6ef1e01ae49a3d0cd35b5b635068bd870f85f7081023bb9fad"), ("091e16ad4e30ac404eef791dd69170784f9940e1657f7474d7907f34fd23c8f4", "2caad83f613419027aa8015d2136cc99f7136bf3e31843dc20969b610c0fca8f", "10f6a56869699c16e687890674fef988c18e96a11ea651c63030a8b95a4b01a6", "082c4e805c70bcca7352e03d1e9615ea050f720c6c6d3b519243dedaaa0d9641"), ("28fb27dbba0da8617689c92da540e2a4ade40d1dedbcaa849637367f92cfadb9", "23e4f1c3540d4502fd19e8e530ce748892f7878cd1362a830cc1013f5f77165c", "00352f6776d2438fed01dca383b50a47657ff7fee98b5f6f3aa52c0293689f7d", "1e38a95443f46a6f74ca6e522e217bf440434a59ed58ecb3580791f883059701"), ("2f787357c9b09032a86800dc66edce91d96dd2a06c03074432d5c213687bc776", "2f27f81119bfa216056b563bd04c8669c723fded981bc629fb13c7c86b17e5cc", "00d4fe87d758a0277e3b369d294bff2d5b948feb0d219a2acdca04f2078cef0e", "0a5a8e7c4a13087753e5742ccb69fbe54307bb51a23038945e03f0badcd7284c"), ("1447734c06ffad67de0997539e2ac94b91c7a4d53dfd50037d3894d38ecab4cb", "06d8055e451f01798ba5992d4945aad465772e3a2a21d14a31ed8cd4664c591a", "1ef4d2cfb71242835100d062247c904692158234688c8339e79023f823db461e", "2a4d08e6c14cff3b3148637f45dad33761cd9a067b173079b134ea7f2bd7e853"), ("174513ddf3c4c9297dcb5b3708fade17a2732b66657c4d75023da525a1753026", "2ab1a76a53beef43b81c5adf5972b8f417fbdb14daa6347e2af29f27750b4391", "3045a660f9c55659400dfeaf4abfb345f24570de30fe32c6c501bf7905f07a22", "1a64364668b76a466f626eb930240e4a36add0759e64a16e806d7d76a704e6f0"), ("01a11ba613741ffda51a91a8d6d899759db8aa9a845bc85eb77cb68deec16de9", "1a131d81ea747c4c9ff55904bad6c339846f0cb09b7e282a4934c275c24a6946", "2fe3e049135a6ca303477cc2ed7464d3f803425c33fee9d8022826cf7918df56", "189ae2eff883b39428446cff937ad2cea0ad5b618c90568b10b7a059784bdc73"), ("2064e45824d61f5d338990cf030e03c0d3c0d6c6939be0aa728f0be49e382498", "080583748c62cb313e597363310d66fb03f6effdd51304b8ab376b72a3a80b0a", "1fd35735ba3afa51c8e80786c841daddbfef736500d9b6c3f5c77523ca48f0b4", "254e6dc173424aa6e7df80d0626d8f96439459f212aefd1794143b25ad199fff"), ("1a3b4d98d3fb7adf1f6c71e4420f26aeb46f69762ec22ff9f588bbfbc5ba195a", "11b74c56af479daffc9e69856d11c19872f304ae8cd82fdc8baf5e701f5bd47e", "09d5aac9384b3e2782f0d7a4ff92c528ca027984465b6c2618964ff4e4ebc6fd", "1a0109c699fda03ecca1353d3658f27a92c0f8fb9a60b35f8e89cbc544cff232"), ("132f293e29d0d0c19f0d645b97c58a2c4614dfa380317c816cc0f5bb8712888f", "1c12484f2dcd3538bf5870e02f5a590cda10f81109705b5a5bb4fec0353eb334", "121f3c9ab8054f942e52d2f70692b4e2024532afbbb8e7b98c353f3a397006bd", "2faf7baeb57e382cd14ce8ebc1c1948279a78b87c587f196e9c644f0e0752225"), ("2b94f40a5f1e4b75c545503b9a09c704221d4495fc2db1d1de4d818a8cfab148", "162f5a6f892bfa9774073c9828fa4f0d4f6071a9064c942d6c629af564739d5d", "2e08072759404c6920d2f37a7dce4b7b71e39079dad4d9bb75e94c68c8f9b05a", "2a08e1e6c5d711d029eda49c5b4bc30e7f573b804aae065c1dc31a00ec99e45c"), ("090bc3042b94acacc99c6697340b8b9fb09a312cbd5bd14b18e10c7f35c29ee5", "2e05d67f9db7dd1a8f8fc6b27273672aba6bff30366f0b80f60f776ecc915b14", "1b79d38e8f39a94cfc79450a4f4a5b3d2c617f3895b325094ee201cf1bcf6d2d", "0bc5dd86adec1172bf8b36704e65602d3eb264e9aa7940ca5f103ed8085c5ff9"), ("127030fe655c851be1009290dffbbc8cecdff5aa262d3cf851a908e82035dc4f", "244462e8752b73db2f5c6b7fb06ec3ba60bff94c29f8df6676bed56d38004839", "272d502a19ff309a8e54eb6f11698ec318087ba15e74317d1b14dadc3fb7ec7f", "2cd7443d43ef2e1b544344187e77d8731b8d8f03ced65f643c3b0134d1e0dce8"), ("1984321ccbae1fcf60ccc7eeabf4dd5853457720a4bd81637663a24868fd0a01", "2c4c3da13347c36f2a740f5476968d4a12f9d005d0fcfe43b8e08f91e2dd43dd", "23398ef9bf71758656c1e3049d138d56c3ece17898c03ce82ebeeb6aa8642b3a", "1ee5927713ef1e5fb1a9b105abd7a651530cfa728ad0419ad2b59dadc79e691a"), ("011537c14f38f690d2166eab8e9bc01b5c8b5ac5c1173cc43258029db6676941", "0f91d3c0b02e5495162397160d97146c4eb3617a3163891b0fefae955258eeb8", "0719c4472b3cb3ab231e9ff5989175301d417b2e10343e23e50405a00feb0928", "1abe139e7c8455f007b42f3c8bd1c5c73dcb921708acb0ecc178dd9254182f0f"), ("00aef3ff6e9d818505ee894c15c2da8eff4eee57f08929e04f4a537472a68f31", "08d7f12821fdfa6a477324ebe5af3b4da96ce1aa32c2647f3cf6a628d78ca5c6", "2d3f0dd043fe7324667babb16d8678ffece211926ab89ae437d33cf09160f7a8", "1362a7f13b3e5462a767d2de6d2f7f6d4d9c5add0b0ea8d3e7fcb6810c81f227"), ("2b79f1608ed5b8b4965fe1131d9c5f326cdcb2423de1f9938a1c66ce28f28e36", "2aa2fab463a3be1a41e1d20d0bf1391d29fec38159c2091df83cbf036a2e581b", "2d3ba4246afb3314e4c60dd23eb75012272540cce8380e47f239004841fe5dfd", "217343b14d654ab8fa41a64a0eb09b8b0fde3b95f5e42cad51c04d072e9da066"), ("0c5011e71892186e80425000c3530f5e50545c289e64f3ee50e9e9df6d56d1b5", "1eb01904d83f07308906e038d82a76a3d34ea924d42dbfb2c3092b9ee2d4790f", "2172992be82d7b361dc71c14ca3efbf598ea2a196bd8ea690a5f27886cfec3d8", "0703528f4de9b33b0eae6cd2b5644133e897deae03fab48f7b7f4d4750738a87"), ("273bc935387d7019f71dec8ba09c5b250c01a78b53497daca85ebddb2486d6f9", "21338dff479df2803d3c3f3a739ab167ae819301de38a53790cff4da63844325", "1fb22e45feb54537ba67ff02ca8086172aad018734b0b1f2908c365da2ff4e0a", "1494219e97570087cd1966dbd93243a4e7fffc248a96386582be1e3a49da0f6c"), ("13925db43dfe892ca1dd65e3a12b8c013d470c982d54fdff52493641c72cbb2c", "0e6e82be0f81ae00998aadebb513e1d660196c2798782e70c0e996f2ebbabef7", "0e21ea3084c71e61478048624e4442bbb4a86dc5764b4fd5b65221a9d6a7ed90", "17cf4d75c0315212a9f14f635aa9ec14ce80a5b2245f67982ce64a38b74abf9e"), ("1a28729829a9ba74af3c5dced98eb55fb438e91e5ec04ad348a4f19dad5959d4", "27cfcbd23bb3b625b3ad93ab6a77d2c1d5d559bf88acebd69922fba637e909e4", "0e7683f7750aa693812ca03451456ba0c3b81fcb0bc81de2a8b841b8479b0037", "08e1e0e6d0b27ffdd87e93f911ebc7511e70a041bf8b7538058a4ada5fd82438"), ("2f8e0173f7e508d7c2ce09318127ab02f408d647308732235a0539e22884ac9f", "0a0b391b964a495c5547b427c2ccf0a6a9b9949f363121e4ed107121aa2f9c82", "2568b15d102cb4aebeb223ee9057bc23093cf53e35a8af6b50fb70f6751be98c", "1f36661a4ed63230ac649a7775d2f4db0256691c51cdc0f7e4b2f16f54047380"), ("0ccd4d5e6ce8bedb18a58c26091d337077087382fde08610cc245d562e9fe037", "14f2a63e2ff14fe58290dacc3459fc1d66c4ea0cd4d3b2448dab35e46ab24e4e", "05c53ef29818bfac9e20d6e52d5022b996e82751f4b5ebc05779f4d9ddb48be6", "2ae92e4a56bfe009a3ec229fa7cab59e83186af9edd6d6836f471f12941ea14e"), ("0ba9b63b9655fcf011033d1a25e72afaadd9ee09a7a317498caebebee0d303d1", "0fa15a7c986073b8c4630d5c7422f1c5e1981ac192b97a4209839b6f830cba94", "15ebafb2f2f4afe98f5c2729f70eadbb2d11d5f8f37eb9c01ba29cb455997a33", "052005b3ffdd258198e8f3d77712dfdeccd43ec85c7c23a30f18a35fd5755b24"), ("2aa4d0abe1ca7ff16f2ffd739b0383973bfb536b9ff64d835fb18a26449f2b6e", "03bdcbbf9354e21026d70ab8579e3f524f539c8816370545b618aca304a8da36", "28595e5e2bad42995c9eef74d447ba0b31be7cbc146a595f4bbf1140fd770649", "191e521e9e8a1d63117480091335d0c4b62ee8dcb4c40e8d67ee47e0b8a4aa01"), ("0970ffbcd648e60b0144f584ac67a4a6d927975f8b9cdf1b2d45f882f56fd140", "09ce95516bbde9d71b279c1c630b94ea02d3cb50e8766c090fe0dec0d7d4172c", "0c80dbf2b94df0bb3dde3ce1ace7ae636816c195c64361de3f9509c90c875683", "18a8abbabcd40988452654b79071ed0ee5026a68a12ba7b7b32e6ca86bcaa42d"), ("25f0d81cdfef66b9a1653433dd9d2002366ec519b36c77f8eaf674b8378b147e", "1457c029187a94ba4500ead66e1e97eac437a95b552446c3088378e389cc1e4b", "2eafea365d4d4e2c2d0905cb52f79d6ead7878ab7609343210879b56a89f30ef", "0d1358f6fff3394af2ec680c546c5d4a46576e177b440cd5c1ed10cb5b42894c"), ("0e95a48891b6a9fc7c91643b972281e296f953d2ffd51c6041e0d296d0e54d55", "00971def7564fcbd511bd1b2a701827e2d18ed9d92e79aa3969a8983d1c74d96", "0402d2869025262446e929af608dc3cc12df4c15ae03d86a2c0f940206278c07", "17b87d76927bf6aa13d86a701519ded0e6f8ba0b5ccbfc902877206de5d38b46"), ("18a4cad98735afd488a4c4bb54919087b5677de40111080d08718324e84d0735", "0f6f9ae05addabe5634b19311fd4ce0af1a25ead064afbc99d41f8f05bffed45", "1ec4dff050a68032dfe0869247e247147826c3f76ac465b8a6a7adf5a2c483ca", "0943fca705f123e26fabfb4676c2ba673249881574bfc60e6a81a16ff6bc71fb"), ("2d2b1c14323192c367ec2e6741459f082d83f16cebc099a6cc904cb891dd72c0", "15b4976256d073852d66552e96f261a4983d326e0f8367bfa6267b1fd309424e", "11b76d5b31c9ae032d8ee528112963b63fa85efc1f8a5a9fd4d7c9b4a4c42fa2", "10b88bb0378ff60303fb00f5e066ef32ae448015ea95d93128e03b28e9daeeb3"), ("22428b4f4aa90150cb29702edc66ce8d657f45e9da629330655e1516b5b51da6", "0a6cd87e68108045ba8c5db4248ab96c9fdf1078af02152a9bca2751e50b785a", "1ee0fd6fa5f29bf0e5e55e20a7cacedb63e88eef283a99bc9510ea18ed5f5979", "057949ca562c5a772d38ac9f0c714beb51bc8e7f3bd81f3efa8de8e8572b8c7e"), ("26728e65d29036fab7532a1aad23c3e81a730394a61e2908d00a813666b7aa75", "09e848f1d2c23d8da22629ffcdbb030efa599212cc99e24a90f7976021c468f4", "0126d0bb72e770a5d96951e49ad2d2b7fcad984273c6bce2722f90c1ed646c7c", "1f47090954577046af37e2e4ad56fda935b0810af16f0b61d9cc3805f3a446d2"), ("14aa7fd894087f193224e9204e789811fcb29ea4e9baa2d49cc36474df57f29c", "0787e212d6c265c57bfbbaf65d2b1f950288579c0900f3e41d7209720a32b47d", "14bc6e0488ede81caa0cb94f641dbb31659bad4197c8c9e2443a191919f02a74", "2aa0432cc3ad5ca70597bbfd2d7bd369b8caa3f190471e6d9b3397277ae0a31b"), ("2508bfe55fc7d98c54b644ba93aee879be54b0bbe8675072ae4d3a5362ffc686", "13c4b83490c97e825387ba42781dd184d7a3c5e760763abd5111cfdf374cdcef", "0ce4cdfb5de043514ad900cdac0e18a8b02769d7614b27ac818c69407ffe63c6", "025ce5ce0a0a78ccc634c59e55173608c547e981fbfc0dcb99bdd91587437a22"), ("20c0722aa0c7d15d3d94feb322e2ec929e705137d2e147d33c5a5897d5542c1b", "1bc6df74fbbc17948534593119817f17b9cd4e4d4952db3e5c7417e40f9d06e2", "20a4099c261cf0dc3a75eb213865d038416bd4927d9fc42d2e6fa320b687a347", "0e9b4332e327396b48c7bcc70a1ef08316112e6f78ee954eae76501f72d070e8"), ("12f80e0bdbeea399e03b2e7287f501ab01f1f63967b2ec72080f349dfb5a43ad", "1bb76c9ffe27e53e5f885ff4c957292f4870156a824e313327a39ea2bee3f97f", "24b57affaffcdbea6a52d160f13a007e7636e24d4f0ce5f3e30fb7762ba7cb9e", "0efa1fb0f66eef48898fb7c60717c3a6a43dbd5070af050c8e54200a35f435e4"), ("268230c114404041deac6d654a7ccfa0ff00359e94d2ed3957481233bd5f281f", "1aec255c8b1de14dcccf6dea0978ba4ff1e0e2ad8473f6bf3a84d52750e0e231", "1ab25c16b39d8bd604515b0fd0c6f5687f346acb650f8b77b4c9d8e8180aa310", "09f3aaa9299a5842b1f832a13e849d47bd6efd2109e8de43671db0362e2efdf6"), ("0a34f1f857e667cfa6ce9afd6a016aab4910bc09889066158a6d73dcd1d86e46", "1ad4724485c968ff160070f0d9705de708f2b71e39b633d9576b529b2c1378e2", "0d5837f90c597ca4a1a33f92403c24e04ba27696e74427cf12657f297823076b", "106309242b98c0f0de5c7c62f42f1777ef6cebdf7cf0f5f18cf6ab61d1c4ed51"), ("0950078de0b5d407a1e7651a92b5fc58a7f06059cc292a473342ac67bcf759c1", "0c5c2d529d8f3a5a6f4a3be40bbed873a70a2ade0a40d7bc9714dac8cd1677e5", "026d7631ed21cad63d9b06fa49181e861d677fed99885c52ee391ccd6a52246f", "0246eefef85759b056990cf06d0650f444cb7d83e74e2043189452ac79a01654"), ("0a7e530890d45d0b54fb68cb9bff43165e6fc1e7e588874abe894de937e72670", "0ef5cd9d2d709135f5f4b4eb84bfd51ab757ace8831a9c75e9d07d041826fca8", "2827f4cfd1592381144a2584a7f6676f120b248056cd2a0b151d80adbe6c1fae", "13c9486eecea3bf38de3b2ba41cfff44f42be68c37af536514973bf368abfcb1"), ("03221a52bb47ba17d6400b9269110f2c8f1fc44c2d58b82081c3bb32ed79a5a3", "2fa7886e078d9606964f13bd54c1342eabc67d9f9816232cdf0c73df398f4ec6", "1483d1f9ee0056b1191159643c100b85e2067c3734d9bc3dfe3ecdf1e7094dc3", "0846ae84179d008f552de0e0c87214dc6c4adc0b3c2389c74353e5f9bb82fa3a"), ("068784d3e6569eac06829752e821c235a577eaeaba4c0b23acf1a87b31cf4d47", "00ae1b8268b192a65db84e98f2a97ac4461ac135b935fe6267761a66b46f6c20", "1faa72954f5f2a01993271e3731ff30b0bb35a84ff0342c956ff724d434d9b49", "2b30232cd8cd47ff313fceb745357d9b9ef15d48dc890b527334e4f25a2bd187"), ("078065d7ae655ebac031280c98b845d67d3509b0c7a07406a8e29f70b305b72e", "0b1b173f066e73ed773e17d3b61b91b571cb2ba547128016c005d7f818714837", "024c28831901cf7ce7c5cddd2865e89d16996b5cc19cd75f9882e00c0f88da23", "2910cc1d61f57e0ad21a92eb4efb649780ac50d4f093bb7e9db5624afa0d1d92"), ("0abeb2aea04ca43db89096e600bf193e9d9e7783f7d2f38776ce2e9106f3b491", "288a63b6c199d11ace2345ad3903f8624a25108674e51bc4a48ba6d18a278a8a", "06443e97bf73b01fe168d2c81ccdc14b039399b387260a86eea6bc3dff392a8a", "1070b11149a2f235f8ed723725523e5e72ea6acac8690a4be53267a0f846c54a"), ("0d926c4362d2508bc482baeff0c55bc480c7cd4199e8a10d30570237b005d949", "034517acf5eed6d27360da6bdda974710410022077aebe9c33d32cfa4c70d6ee", "06c19dacf1ff4fb62e8f9bc06cfaa194ed14037ef36b74959d5be6b355f9fe7a", "15e651491728174640b5dab1c92d4ad781379c604a11b39c975b3309014d6de7"), ("2e65d355605df8188d00a9c77ad65baf3739a859b85d9c0444d28d8d5381ef4b", "18f94c14f99e48287e8c7329d334a73a61016ac2c30af924caf251017fe6e479", "052c1a633127515887ef0f339acaddd9fdf36912f1a4fe42e9e2da7b3a42c5c2", "066584c88e07c0c3a815962994392ed67ae981b3565c17136704839dad9c7018"), ("24484ddc0cde950da9c36f695a778533dc290d9ea8b3604fc502a97742adb4d4", "10833839521b7172ec2094e439c5a37719af01d0b376e8a4ae96f06db063e093", "1a464208897ecad7ee9173f046b88a00a43a09726c62bfe37a476ee9da91826f", "094795483a86470e40304583768c940990e38db1ecacf7856ee8b59548f9f204"), ("0eaf4d8d3988dfd74e41ac79f620fceef70a84e9718fc1335f32f09a01d2953d", "17bd3ce3f41be09b933edbd35063610ae76d2fce6f05d18a5f26aacf0eddc770", "2839f1aa9b48be1ab062a66d650b45f7adc72f72396a8e437d20a0fab3746cdd", "1d685fd1529e94c7a2b880a3e29ce1b87cfde87fc01bd76b62fd49ea9f5fa05f"), ("2f89b2b7489d225da3f20bf6bbd8b6a25d49d772e5d60de540adafefd0d889a4", "0a124b87704ad8e9ebe12bd49f9ddd6af4838e5b9ef5c25fc254977647648644", "12528304d38ec6845416abecc9d7188d92f52048d93b00c255b6fea99fe90682", "0fc011856030d45ad6952120c9302353413ef7c6c93bd42f077e515bba10276f"), ("000d593445b72bb161dc7460a172f3ec4934e88ec9416071fee468a58bfbdd30", "1bd305a25beadce02a17d65f092c396b749dcdb30ad199cb33d18d6748648cc6", "2ecdb47377174151fe5b284c5eca9d3a68fd701c3b20febf8d326bfa590a86d6", "1f1e98b22a84812a3a5bc05c6c3b174bde80161c3328620a384a802456a8f241"), ("14e7eea73b038d0052e9c92ee4fccc72a128089f678228267f49d9281200ba7c", "0841ec4b6f7f98a09dccb5118abbec1c2ddac209ac7c3bcb23b4318c6cececf1", "16ffd5e03d15bf8164e0074ac87a291501259a4f74c1e2285282c3cd37c53d36", "1fb6575e090704d1fdee0195235e1af58010620c7429c8b8cadc7fcb2db1c5d4"), ("1334bcaa2865f5c0bc16e86f61e8c8b08477fabd68da0f13e2c235d43b58e703", "1f69e111f3a1194e4f47c20c2f377f8219f2d018ef3cfc48166725c965b1be9e", "1ede54ea0cb4472234fbb80d8bb2d518da11c21e35696da16b730a068b2d83c7", "20971d0277e874c5c34f7cb65201736cbe7b53afc3e72da4159d46ca65be98f7"), ("10cd260f0058cdaa2c89f2e694723ee38327c3ee97c6d59092b28f2e70cfcee1", "25e7a9de752145b055af0a43c6aedeb2c67d3fccd9156e478adb5210650088a5", "06c9b81f66ca27d5d582f25620dd0e31d210d71e9ebf56818a5d58e3867cd9be", "2d9b83ea88b0db6118749a280bdf5c76fef904181be72398b41845b10afe7606"), ("15958694401424b5553e3b061d0d4a96a59aa6162d0770f8ea4e7cefda406072", "2c710ea7f5bba12c157aa094f715ac71fdb784d469c642e17a0bef48736a0d4c", "178caf2ffab5d7bf4611e2f6fcc0bf0022502d941c0220ad943be1d7b5093b4f", "13b649cdf9808d505ddd1f933d9ec61d6ea213e04ca87af49b118d44478bf7e6"), ("13f2e26dfe5c32d80413acc4153058d854fb24c2a211d182687116edc2bd3f97", "0a4408f906d6fc0c7842017f160caab90cdd5cef71563a31b34640e90d237a4b", "0b3a8d7e2ef281aa57010f09934cd4a185b920d4470ddf7e439535c063b66d2d", "262e23e50ba114014c18c4abc6983fe3991cc32f5657d32c0ed8d86cca310b81"), ("05832e426ddae825da950fdc4abc001cd0c8b38532fd162eb179d291dd9560b9", "2dba47e2d7f8b4bad7ba28f3171a6a40de25123750bc37795487585b4f981705", "1dd0db87cc399d70382e11028a053ce8f06df76937a05f639fe792bcde4b067e", "190ca9483fba6db0db85d832fbc748958f6ff517d7f9086011d9bb15345f9ea2"), ("1ad391e1b90d47590a7a888fe933c8758eaafc81176db499d31ad68acaeb006f", "2d9246a2f3b14214fdc58c7a46e21bc82ae25a2cd3183fc79e9a2c4742ce9103", "0f45065120619690d0b9f0475fa72e74322a651460e3d9ceb5cc320a531796a8", "0804198cabf34f909751831a8000513168e179718f712eb627175587565b1dfa"), ("2c8231750a5a818672a71fb1e492c82d707e3971d14bf4adc475226cec82a3e6", "24cdc9dec28392efabe2fd9a856d9d6521d139a59454a04978579304788d77bb", "0abeb16bf50153ff3c450e89f9ca0d3bc1fc8e398404d4b7d75968da87a011f2", "259f2994651ba346d5944dd1a75da4f70181d95ef6faec6d8528c7ef3fa96b59"), ("0efaa1f2333b2d9ce52f43feeb64849d1d325b3c025703b8946b8755a47738ed", "1046fd4db5bc3f7594241c2d418bc3c29c11b4b215c9bb4d3cd0956ed002c703", "24a7f5b6fbb130ef13ad5dc7493641a8d7671eeb4b863a2f348bff5f1781ce94", "2d8bd84a41b076f368b74e25f9ee4d2dafde7b95847204a15dad0999cd82ccf4"), ("0544f6820401b29f51d8d10692b3958cda59ad8648745fcd25be8aebfc63f3b3", "2ee5d3043e2df5cea1e03d4e8d5e8f10ab4a9ff75760764a5271e6e7c4d94453", "06d19d7605f545d7080358b9357beb335fd667664b2baf8fbe7a84c96fef5b9d", "06c721277975e19577524feb450db25e252db3bd2a41dabdcd4ee01ebfdf56af"), ("1cf94d19dbbf464d2b3d4a9e66ba90895db9c0e9e579c0b2ff77a6c069145051", "2b8773dd6fea98b888783e7c39712d837da0aa1e766dbffbaaa7c1b1bcce478d", "1e2b52999a0a725139b7e6afd66f8b7437d42cd8f76293a022b96943457995df", "2a225f7eda300d45182d7bf4d99af7e2169307ff5e71c13180de4142bae4ed0b"), ("2ad3249e1f6b91293a593790323bb98dcfd94f1b65cb4ad688fb6f858c560993", "24dadef568a3b3417078f721102575b13654c578ded32f6aae6da1d178e3288c", "190685cc16bbab671960d81ce3e9290d24a1aeefd21e53491e48321a27f94d01", "20a4b37b4b32b459ecca341a3e553e38f2cd1df7556d1530589b34dd6808d03f"), ("06caee271dcbb008adb09ffd7146a520501cc6d6f30cfd8970b9ef12e7cec20f", "0228a3a39d9930d8c51c1685420c629c1b8920649401c1cd3a6c993f22737ff3", "14f08938ba7f07bc1b26de81bb59a164ce0192318b002ebac3b0c9da6dc7dbf8", "0db9fedbae7847066f3fcd9d1c8d9c6c031dd0aa69194fc8bcba5177c75780fd"), ("0ee97bbe8a63134af1b94393e4497186a6dac0f9f540356bb15ed4bc40ddc5ed", "1458625a61bc7ca6e4259a3fc4d1aaa147ea23675c5b6fa866abb74c0a76a106", "25e050f9f9bb8b47b73e833f657705896dfc48ebeee32e2c535ad83f6115cc4b", "2ee378a5bf91f3fe53b4ef4ad584d3468186ad8912a546acc422d6fbcca0c3ca"), ("1dda12af3490d2ed4c4cf32704a60f5c13b90ee34077178dd6ada8044f2ea167", "13ebbf26044f5e2ee7535d80c74a442a7c32bbc69e4ec422ff58ed028c8df84e", "13cefebf79439cadd40ac5250277cd9f61aad5e2acfcc3c852265e29f2153f33", "0a8947c256c86cc5724cd120c724b1bff8fdc951098588904a434176f599abb2"), ("189b7c57c541bf9b273d803e53b83c7fde18df23227be60c4ae81e0c2d53e651", "0db6d5967a094d5688c7cc7cbd6049695555295c6cfaf02ae49409815f8cb346", "22fd637c7fa6db6c8b946f687a9fe2757e47a316121be1009714bc1c7f2f7d78", "2b8495d0de9c736cfacde60200afac78edff0e321d1fc25cc6aa052f810ff65c"), ("2d332f0bd541efa8032dd0989454e2bf47e746f98b4b272007942666109ffdb6", "14e58df68ccb8af4a5fc1bfef7fe0fd88460c98cac68b3054b20c9326fc7c771", "0736bf7dbbeb6dccb8381ef090603fe098250975b8a5b31056650295bc581d81", "1bb59fd337b748e2acba3420f3bccdec1a875d30b4eff4ca47e7e00d66930f34"), ("0fefb28ecaf393c875c541b6931fcfa656e5ae922be9ebc669ea79fedd974d04", "19bc88c44f50b1da2bb1bfd8edd7af1ba46d6ed1e119b54a68fba1d3aa234e5c", "0ff1c8d394af9315b8a3afb7215af252ed06debd74d369b02881bdf0742ade9a", "19a0af41cce8d6d81103a6494e3b20189e9a9fb7ead204350ffbbd394076558b"), ("22c094ca522d2b5fbb531c36dc773830827b0670c3b5a433cc0b35b135f03d39", "2251da25639d6ae5c66733f63aef56a75808c0d88e754fe6f0f11d1d25ac9a6b", "0ab151b87a4e69627c836e7314bd372c41766ffdbcb54fe7994509ceee3ceeb9", "2da1737df9fd19a2b6775c67d6c9c3d3ff20e6f3d8de086c1c6bb41b93c16412"), ("0d123840154a1fdc0c5c5f37cd661f7d57c54e6f4d2ae59b822a954764696eaa", "1d5722b58af7ad4e871b1cc51388c7bf4a1afe1bd7d0806702c80317fb665ece", "08a4662829fc834a8486ec64d31f25e71c5f1e99f7b5a0108333c277c4d27629", "0d2a07c30db093c029414ad80ebca02026e6eb1e2c3c8a03fda43b6d1bc36f0c"), ("0cef6934b12af433c5e0fcc9729898490e9b5cb2445a2dd808c7233dee01c1b8", "102b199f3cc7fdef4c8f8173a16de2159724954fc4f953f4402f1941a1a6106e", "1fa19d4accd64adfe375dfdc88a51ad8cd61d089d37a0ab50b1d01a7a86b7126", "0df4bc530767402278ff6851677cc1d6a91b0e55159bb184ae95cf61d4e5b3f4"), ("06ce5adff66f496f110650faba5211789c26a8dd6eda034089a1c3bb82c8cd98", "1d78bb8a410b10876631be7283e6395674c2c396312fb6301190f7006489c725", "1ffc3e2d1c65d127ba060cdbd3220a98fd5e349d34dfeb513049533db570141c", "0144e8eb716304ef0a2b581dc80010399f0b8816d5835b81fb7104608550c978"), ("0fb69734ece6545fb8714413490c83ceef052afa38e0e9ce1d311b1ead5e06b0", "2ac9024a7929f5b2bcbd2dffdce596bc88f16c4596a64a98731b52055bea9efe", "204bbc3f9f13b79565ed5f84eb4e29bd1c6faf8fa58350dfcc70b18e3c179f52", "1e765d0c0953641e6c03086ef062556c7576dcc2f264e5023d8b4100443943d0"), ("105b55fa3b22335efecd0a20e25a11354cb4355406f010d49f58b3dee07d3d3e", "0e556d3e0043e10d13367bb501e10e7fafe6d4d0ccecb5ceaa26b6353a151d9d", "2c2e14e221681e5517695b5ca7db5c72306253fff553376c136fca8b2b15e942", "229bcb35623c9b506d4a8e1fbe39ebd04d768df872381d38a462d81ff03c16c0"), ("0fc07829f382f09f091bf8ee6c8382376ef8c4292e27d0ba33f601b29b411b66", "28474e51559d158bf99fac469986c277412ea3613b8a854b397db6f832e0acca", "06b285ba5fbc16cbd5c393e221d6fa8ce80416e60f3b39459e437b0b07582266", "211b16ac7b2cff5391e723d184ff93ab2a086f872bb7eb3473dd73ba7ae4bf62"), ("2b79138873e0779add9a794701c916a36c7bff1cb5d3b9939afdd52c0cf98030", "27579e12d1cfd5fb8a6c9f7541c9457ae872c1c9045a6ad258accfc84515370f", "0001d849472d02f482d4a6d419e6f6aabeb8fbc666d2bddecc599035c0943ea2", "13291a11db44cfe3292e38b7ce4b082214e346e3d2e067519696727e477a5b9f"), ("1bf9dce844cdd8760345269f4c466fab2d1a6e56dae05a246fe13e3449638797", "1fe837aa98ab0b11f527903daf5e77fbe064961b46b7a7414b157a5f366c7f73", "27cc06649b56942a49183c7457e8abcc34ca7d928ae2ed480b2049b1fa82ef59", "1a67c30d7a88a3a2ddf72e358d46cc6c7dafd83cd9b007fd1dae9bae196ce74c"), ("024e68f07acb069e13cc34e69822980ee943e989fdcdd569c3efe45e7eb01bfc", "1cf92ae998ff5b839f2d5228fededd6d7af91a4918c2a0b891a59128708f5c6a", "2488b27b8d7b191c95692c5e426cec6f9d25176b50eadb2e84572dbaf5301b2d", "2e2ddda9505149ff40b41eef792c96944c351903fc30ff058df77439d638c9b6"), ("02f9ef517ecad3da243494ed00fa2369212da3118826d450b16e5e59efbef856", "0cb9b28fdd2a50119d9c7abcb96942fa192bf6bec82021ecc978103ff5ca8b4c", "0b48f62487509ea4655a61b441633f79b1b664e27237a9b5aea80996d617a07e", "2554dbfb4812cc76adc04194031da8097438c94cd2801ebe4184e0dae523010c"), ("0562d0134ce7ee68172979c0b89f9f4ce51acf722e72b0cd547074444e33fe09", "146a845bfea769379e114ed3fa207ab506705b6c8991561020cc4d19a4649d21", "0f14eae3298f9b54ca5d34c4f05e62ed10cb947a4bc011e19952f3aa30271685", "09e3598bbf732f1eb2c3984efd8f0f926694df9121d726278b2bc9f6aa50c721"), ("2c5d3fbbae5cda9a45ed5e936c741325186d043470863d368dd67888a30105c3", "267d8cf5f8c9ddcdb4f0f3228f125d9d36fafe4d6c1efae5cc67086e9cd70fc4", "1b82e2d424960d00780c19208f31f862ce7004e4289f5227a951f3e0ff782839", "18c8deb798098680cdaea992145c20ff8cdccb3b1b3fc7899d7dd57e935ebd0f"), ("2277ee92c0fb144fdfb0c2ca7d3d715caeea1d886b1e255993cdb0e65d02a987", "17e21e2fe9ba839d5e2bb90424d647d4df89f0b388a6e694849eef0e61c8851c", "059affefae51a60b32c2b4b9dee7e2a0758c264cd1c104c5da7a52e7092c8e92", "2c356dbb9fe7555cb6846c8de3bd9e0a7a2e74cc000918222adb243048e3fc03"), ("14ae9200fb4b0a614b0c8f094df6cbf13d8953d18359e1539488b88e3ea97613", "1947aa4c24c1c8d4eaf8423362ccf45a6dcf1fac547f7e8c6abad351bb4720af", "18e368e3d0abc66fec84f4aadc71777827e03797297a7b6c9f0931f2853ba7a2", "2602e7ef0c50dc17af73c27b6f09689c5c13852ee2e33c170d284a689494f380"), ("26b98943d38106ddccf67d2187b6ae5a2293f3060421280cc0ec220ba4f00c42", "26705279b040dbc6bc6e1defebfca8c546aa8c49ea1488c837a64637d951a66e", "1c980c0d6035c93d205c4736eef38a3c2ef4ce666216c29c41250ee72a2cd552", "2a164ab0aa014aca3f4eca14db7cf083049cd38e14c13529aade170133b6bdca"), ("1967dcd622bd22f8ed1e6e97e808ee37d8d055aba73efff0fccbb6abef2359f7", "00fda2614373e4cc640be57a56ea4d8f57534087fae41795bee8b4afdafed9bc", "171a94a36d1718b6295f24dd3c06b122d67db19b86688b478c871d0a4188137c", "14a2060029ed6ee294b13845c7922561b97ae841f65af748e32e3c5bf62c67df"), ("2a74d4d177907117f2e8e3e14ad52ebedf6bd9da1d1703efa194191c9d53c332", "1ce55e2faae73fcb7c4ea872e4d363f79765169784ff69cd0982b8b15fb38dd8", "1aee1d807afa1f6db26ee371936900a42cf2904146ea739e604438eea849477f", "2a08246440381aaa02d2b262171e98d7bf98ef5d94e3381e98d2f0418ccd9dbd"), ("297ef5f48d0a9bfc3a659a4e0c5d471c6d4c4da382cf4f4f48264b5ac07d3204", "1e78cff214ed7f3ac98d257f42e844cd057be07352da6be3208c49b82a6ac0da", "0a5216985e261ff530681526c1c440083c9067c1a1da4cbc5dbb41147369eef7", "0780db36ff29d382e168cc1f41fe68ae5560679a762c4898911ae742ee1df0ad"), ("09415d69e4d8ee69e0dd347b7c54f86325ac4059c29e2ef71bab8fd018b0b562", "19b890eca6845109e8cd3c7a5a4d1a871304e7ac6af686fe3d14a4b6aa52e104", "1bdf721fc6edb3ce1c4466d03a0cd48db6f3d9c20a605050ae3b5f3ef077e65f", "05e0c68a6e85c55048f6a6db9a8a0ca66873d3086b1c83e9c7df09b8af6102fd"), ("24a593dd4c56666dcc3e461d9cdccdd16ef37329609e703b9fd32067f8e4bed9", "055591f4d9806bb2a9725623b07922dbc3bd13e4897c97b86bc660ee0640e099", "2bcc80cd66e86e57973496f34e4f44a4df41fa0d9237007a73e962ac2e2f8b00", "1c423bd9ee6a425aac018763d16e997eb98e2a53a456b28a9875606bbf9c4511"), ("2c0a93585bc89128b879833e6d016f9f7783789db8339cffec5b4c83c81a79a6", "0725bdd420d84029a0438643ea166625b6245b4411072ef84dd7cbfb4d74af1b", "1b4f5a7accc530854ae6db990cce16aced7c27d2aa2b1ba25a29461849d4df52", "05ae5f889f8c775238b600ad770bbfe6c7d083eb93e0a5274d5ae0d2e603022e"), ("02df341f6580ae13b8a52f1c1fc08979e4d5ac7d90808a4a15fe771a8202d4d6", "2c106c40ea52b53099b5a5d39d646cb2e47834dfe450ded03c33546eecfdd925", "16570215984fbecdf093e3b6d6101640931e617303f49369780b4f3754344c6c", "28906763e6fff10f83e4948ab0ccb2b5c4ed5f166acc3b1838d10e4b80204eea"), ("2c48d07eab993c29a00782fd48fd8bc7e127980c32b483215dfa9b753f70ddd3", "055e1e11020f9d0a380c1d33ec1c87f3ac5667657d6b97defe5992170e4f0921", "2e209354327b703d58ff8964c1d948891995bdb4f02bf6a646163d19e8fae3ed", "0bd643ff72f7e7d454e40751485cccc67a0fec2a3b8fe670a2b3239c06a7cf44"), ("074a2f441c4d7338c842c8492993d68e460be3c49ae2cfb12d6de2c888198ea1", "2000a41b0cb6212d93eb29ccc4646b2ca0b2ee78b1897baf2d9d83b7e77bf2b4", "2bc800afc040bead50948c732936cdbe3ae5d33be118d8a9a51d29b658fe31d4", "0ba80c110226b10ac0bd5d62996e073922a0736b0f7203bfd918bd0641d443e9"), ("16378a1d5f49162280ab15b7648c41181d201abd074c81bfae3f0de750743732", "1ab7023b8adc0f2b5faf205e6b8a4c00464eb4cf26c92559418231243913cff3", "2742335fd5b6913fe8bcc31c4273a56bca44f41e63ec2adce76b80f19d2222e5", "24b9ae6733e7ed9434367507ea44e0cdaf01b67228a4ed78c2fa68807fc2d4ca"), ("138bbef0f20af12e18371e368371ed4beeca871c51ea349b482658743dabf724", "029b86504f37ae7f9fa1bb00f83402bd61858960a56f7d30fc91a589c9da4637", "291aca0078a98826f02e03adc7d36f466f4b45ae3ad7f41409f88166d1145a66", "2a4e0076db1d6d2a19d49cb02a9ec5c5c812d2b1fc1d72f17cb18b8a123991fa"), ("1fce02b38f9b253c334de33ff51030a12ceb34e25ad34c3197beacf56343eddc", "215e424a3e427fce9b6d8a4df4c6caba20b47ebb028fa790d7cd57550d5551a0", "213928e43fddfb29317005c4c3383c335bcfd7520eb48e6e1805326c6b9c87ec", "30327b1554aae3c11ec3fd5d4e27c8adbbe1ed8fd0bca1824da5586b2a0327cb"), ("28c622a19e6b3dd16a5ca59a0adba3d096aa63a0b89da25e2ee6d2e02d47087d", "1019a06440eb43753d19a087407cd323233044bf1e377d2d065e3c79c8f00cc0", "2ffdc3a2c6856ddc1257fb0e999c7d8f3c5753dc4d47cf17490927238dd71bba", "23c421772844cbcc1aa713110f1aea5e7572ebd4d10d6c5954e3275a6a949e1e"), ("0312fe6279eed95b0dbad6cf304ccdf0c6eb5e77d8e689b4f75038aec4ec7b31", "1e6897b7d0fca69cd4822ead423ce06eff5364a6e70e0dfc573fac7194519d3d", "0c8e61cff21f1ef014443bfcf3ba6acdd6d9913581d584720b0a8f0aab2a823b", "0ed8e8f87d5fb7fa48722e4bfc2551294826288245e2033c26f22efa60dc5c33"), ("1c66718254e9bdbb55fcf32afead9b9c1f36de312a4dcda806be8c92d93b68fd", "17dfd37481bac1bd397b24ac8f9caee3bacf77c9fc883319c44823f74f03628e", "1686b107390079b3cee908a6fae17baa0a1225ad355f8aad8d748deb4bc08202", "140ef88262c048cade66846ad6b2e334015a48dfae7183698a9b22b917ba893e"), ("268ff5b626e6687eed95df894c3939f84192374e491ccca6610642172b2dbfa2", "2b9c88d323802541374574ac724b6896ad2f7978f707d073155fc61d6b280046", "0296099fed399252e632dc759f29d0165a9a10fbe26c40edc713a0422a676ccc", "0eb8e0f7a174358e1a601f043fccafd53a7bd6724310f93a82a57d51a656088a"), ("1ae683d0f4eab86db70a6d37a51ce3f8b37739069d2de581d4857e506ee0b58a", "00c7f5e431eccc352c16d17e9ae256ddadf4e3bec3b4c2b326d5df31f66c174b", "10416a1203de4b6b9f1f52805690dda21cd064d26d6fcd9664489a1d3fdadac9", "296180d0596902bc7f68f5cc1a9dbf7fc37845c03c3eb3cf8e8a3abb501fd755"), ("0addf98f41ab2bb1f5b7106467c31fec8c1d57aaaf71555dda50d4c3bce78c92", "2942928eee3de1a1ab83a3544d7e75600db9282fe185b15a12e6e46838721f1f", "031f6336fdc84b121061a21e33cbac882bafc90bb415c9a6633c1221ca5e5ea3", "01b8c0543aa1c0b49d302915a77b9e6aa4fc2a58b2971ddb7c34096432580ba9"), ("25e27969d1754874728eec3407806da2959fec453e278c71f55a93462313e0d1", "0348d3c0d9e30ea62e0e30d5099deed3c1d168c8c193d2c3e04a2376224953dc", "09efcefd8c29547cbfe27882bd71ecf29d9b8c3c3a18851c45c59440d62e09ca", "1ed6beb999beb312b3318ef35d3eb0474a8e456fe308e2bc64a8881ff3d6ca8e"), ("0076b132f83bd2fa4f18a2398031ac151c62b51e778b86d6c24ab73a5104f0b4", "29516e09fcc9dd4528c9b2b8e52aed726b78456fa5fcfe6a1fd6a5787a03fc7c", "1b898cbbfa76c28d769fd98d74ba64b249f26af73161dfd6522f50823a288115", "1b065f87a9e390f2c5e278e1669f35c1606fc92b84de8d9e547d2c6e9f108d87"), ("23c9fa4ca9bdae3ef077a165ecd8f613495838da7c5acfbf0835b49429c2c038", "15bd3a0135cefaf2b83b00fb1f21436c3f066469170cdfa7fae0451c220648a7", "17268dba5feb5a9084f0bae73af2d7875afa4fae8531bb9b1a6122c962854242", "2d85e6fc83e6343eb2ad0f7b56630d0551522b37db416647ae3295b15faf500a"), ("0785e136aa4b5ffff5e9677d4ad9710939dcfbfbadbe5468976be3627f6be805", "1d492800146edad64d48c345ae9937cba585e994740cc2f0711f86323fc3d75a", "14de54f80fa793d342a8a1bc731afdca2d8e4280314ca02d0d2d0594fb9770f5", "06137a341e93b9724474bbc9acc14ca9ca1bb027a9d2cb47164a5d9e1a9c6dba"), ("2e278529cefd87f5dff10b8e610f5852d7df82e176bb66a9cd73f2707a844759", "25518e069c5b50b09aea1706ec6f52501015dca9ffd918571635068dc2d1ccb3", "2e3017fee766028ef92b22786ee4b8e4c85615e841415583efdcea9b1893a659", "094fea3cdd9f70a284cf357e613ef73e2f13937a5d0066d619df5a0182a802a1"), ("24a45285ba73d026a758dea6911c63a85df161065a59d10134c6367a81663f21", "2a5f38789c99558cd2822bf70cfde7d812685e1e7122737e9d61abe453cf4932", "075a22032ad33e5dffd98733f68c87e4ec835154300e8c6bf1dba08595fec33d", "2de2a27b399b356182d11bf1b2cc88984f8a05bbb998a74806c218a5609b062a"), ("2c1a2a558eea15d7c7f4c01ad8d67db8deb866f80f97cb9bd56291fced085d71", "1f156ef8e80af5754f33c798fb4c2bd9fd4cb508b6ad827e4ea3a436bd3a1853", "1f8a409c63ab56dc33efcdb09d6737761f0c534e52fed5ec5ba9445c6972e9d5", "09a4428c18747f4efad6641ed69d21e424eea8dd6e1511a4ff9ee75c7627c8f0"), ("0274a8fa804d3cd059f07b821995b129f8121d15dd4ffe537fd61beae2e6a4fb", "126a2b11edaab78ab1382b9fb78cd072802124fc3076afe9a29f8f8b531a1bd3", "04cdccf2aeb8fb02f1c771e7d908c6b9b216e4c8f249eda0b52ba773fdf13459", "22755c99454c1b07f0fc31865809e08e346e7f33fee5fe41679940619abe79fb"), ("2195d61930e0ca2a8bae61f6fb73c7bb92fc1cc40206b8976d3ef76ecf714098", "2f990a5daf02dc2ff662a6d067ddedb1375ed791e4c82fd39ada32e543a867e6", "1e6f12ed1244901bcaa39cec164bb60d906209e4f113b80c9329b60db304d189", "25e5dda6806be308a2c1b9b7106fed718b1eb46c12dec3a6d7b4f5bb6bba0956"), ("0da68132479127a09e1ab2014185a8034dc0d9e325d5f122ff48598c849577f7", "24513bb72e891269c150eb7b11d8b5653e84c7ed06e7d698fe2039558ece70b8", "007ba90c0fb275c1cb87cd685d167d899f6e294d0f58988e24eeb89fdda7c13b", "24c69530e286bb1043e15723df734910eea3e8b9d4bc18f7fa95a16e0ebe2fc3"), ("0839158d721a817a51c29548fc161f6709931c45bc1bea752f853813fb1c6709", "14848fefae437f8edb05a03e84d7604d94c260a6a5890707953e0da0101662bb", "1108282531bee5a0257e3db47e8507a8214c5627f9a6de39f433d70b96fa505f", "216375419c264fe23788a68e7c34ddfc17ae65335c3146a2b318447ea975c4f7"), ("0044a60d3a74b268a7c699cc96eafe0a41576e2d326c24c213ccd8804e60e685", "0da19cffbf33c9f1e1a427875bb2517039bcd82ef7b31370343ba4719d560a01", "28eed8f633d2e8e95df622812570e36d5621352985fa284dfaf765f1a509fc72", "0b99285b8f524de457fc34ea8244a04c29931d59a7af533a7fac2ed9b5791878"), ("2e4d42e48f406743a565b87eb10e14e7cb085586d8bc15bc9cf92bf60f2cc4a4", "06a76fb412e4d52f4324882896497ac99d357e30a88e9c12dff0af685291f2d0", "0566c1a6e7ff483766a904a361c1506a78da63fe089c3f2ec3e2832f6103e485", "1b5aca0a334a7420dc638b452f210738ff7940dec91aa1215d3bcadbf9fd5d58"), ("28bd9113857a0321bd2703a902fb35821d57dc03f9e99ca718a6b3623e9e0efd", "1bdc03eb7889c3f7c64c751e2fc5c73b69dd3a725756d6fea2a9cc3e18824361", "1296edfead047a3c5604a88b6b50dfc1310893c0087ef9141cdb799de1e9f42e", "17a458d12867feb9527b76a93ffeac229a1525829cc48dc8eca097057890c9e3"), ("02b5e0cd4e39a0870b73c99d73da64520ea76f1752bff952061c86d06a094c39", "171367f5a881a0f484195d93dc1fd46d40f8ac1d63650e31ed32993a2d5860e0", "1e6cd08b1435682bc1ec2d456ccc194addfd430450683764a8ba63ea210125f2", "1a891cf037961bb95d1a3818e263120c9c0c1b39860f25ac9fdb2c99f201c4d8"), ("047e54008c27734ea317f0fa869af8f1d5a91d8b9806475220cb855c59107384", "289dab4bc316e7365573bbc7200b2510716661a5dc6a0ec17a01a4ca55107ff3", "241403d6fae96f25e72c8809a13a1c4f84e10ab9c7ecb1d4ba371fc52b792bab", "0ccaf1f0d7c1385be6d1aff6196387897006e96fdebf6c3ff35e7969d147b4c6"), ("1fd949abe619eeb9c54000febaf5c93bb3f565c2ddb34fc7002e884f5289c080", "122d278d053c327ab51953bc974f0e547bde1071afe34372336d567108192033", "1c19bc97520d576d1a787a9d338fa05fcc95bdda8996fcb99add1b0eac2e5991", "1d66f4379d5f0afa5841a0ac7ef63cfef07b30f7212c25e79c2cfa42a892204b"), ("089f02ca67e1dee2256fa3cbe3b48bdbb9f9da708fc50a69660d950a353e405b", "2a53267b1b15932c9e22a47999352a69abe43211dc456605d1a96f82a4842da8", "241e22113874efd00522bf1f09619bc5845a4618819abb78f995c0a0d447c6eb", "0098e190ac3f352c7b97c0abe3de38b75f201ae3f01a6a4ca52e1abc810ceeee"), ("04b0988d67c607d39de4b4b25a612474ea8b31acb848a77f4a794ed0f3fab4ab", "262b277d68de8b47b8e747315e7d75669e373cd6223dbad2d7c7c60ca42cb377", "13187c386af148781f7eab9309ab7f853e3dae5a8577c061f6e55dc44f284ee2", "06d06455d82d3db092031db0ab5a50cf618ffd7566b48057ac9f3c32b381d4c3"), ("20c715f644016eecdcd245e198882fd857e2ddf6fd8afc126085fc4ca89c3238", "13ea33f80bce7d102074018b6c0fb23155a4ea0697877a6599e9184c4d32c754", "13f1722d0b6c5e12c87e1c5a0fb9c8d0b515c439b2e23dbf378509ee4a7e1886", "0fdf92a427e1f2e96ce88b8dadb6940fbb623e5758c06a66860096a6c066f6d5"), ("034eb88860e3cd4efb051d9f075f2e5d91a1ec126b88adc54c2b2310b1955211", "13445baa93ffc6a54c3ede8ce1c99226462eb3820c5b52819a57e18689a771f0", "09d1d47a2c8a334c60786bf5a659a19e830dcf4946d2a6813bebf2381df65eb6", "1cea608fb8f3d390ec259711eb10d259896fea9ba322619754a74cdb8c9aa09c"), ("1821095694c63b1cb351c3d4abc060e092d9e5c4770c7cf600e7ab5f756f4da2", "1c9921776fdb7a72d26d36a478199f7be7a90832d9e1fafbf2cd671066b26709", "249977493bbeb4ea7a12a225c3fe194ebf2c5ad97abaf298fdb023ed91c42531", "2db847230bc36f09190ab1609bcf2085a0b0a6a3a23132ff9c28ce9c4400b5ba"), ("0ab59cd5ac87098a59999851ebacc9cf3a1c34204382a1e415074279f602adb6", "1e7ef7be5616a7f0a28998cf61b14258a8e900e7ec128b12237e209ff7f8b53b", "2694d84a368a9a0255a89deef95e6eea930cabcbac655799418716592571150c", "121a120a2c735e2dc81186c051be709f1e0f9bcddfecb9f20a180282bc4563da"), ("28b47c18338dea3dc68a0791a46d317bc09893f0f8e1af381760a8a5e9ca5c50", "21be65f0c709dcf43dcba5e1ab826300ad072196b62eb6d74aea2496ca38c04a", "2b58b94a9fd14169242bfa7b56d9eb29ec9b2b9743386b29392e25b0f8bfb6f2", "2c4387c47b383d0827dc2536fbbf5a11b6246ed3465f29c7234c0342254a5900"), ("20049804cbb1d122cf782f17a5d6c4b1369db58652812163013f0b0e0b29d4f9", "258c81d85c3f37a7a048ca2816237df68030c255aafcca36fc5792a8aff216e8", "2bde99ac8272d60e0b0a8e0b2fa1894a9e3eee34aab66b9fdcc7bb2e6d1fbbb7", "185a0a44e4af994a2e378ee1e48c88af533179bd1e2ee2f5e8c322ae07c4c89a"), ("0a20c1752628d6d9d2e6d24bd7579061230f6935abdc5a60dca234318a6f48bf", "2f1536b2678908ee0ba1a621a5c2cc52e65b4a6dcb281118c281301b6a3d70d0", "01a0cbe1ee34e97a091e01a498179d382851368561a61fcba880191022c51293", "27602c7b4387b78230ccae24a3ca11bb10d5125264663215c4dfced46b940ac6"), ("183b2f845def2c87bc46b3a433ed679da4e5f24eb764ed188479be191fde0a59", "0b3311fff9053f17f27b4f323003f8430df217f9da0c198e3c87a03905f00cf3", "2281c217db31839813231cb463b2966c0a4378ce73b72ad675659c16377dc269", "0006952f90f2b42ac0594d2b713de43fd99fc3429cded6369dcdfd0fd87df1b9"), ("0d12de72e7b6037d1d1c0b45550fcd93b971a6c201f41bab690108a929fde335", "2123f0fc56592eb81c5d15c13b70f3e0f61c3aef6eb0d454e8fc27a73277bdc2", "1b20b2910445eeef025f58d3196197e50b91219fdbff365b03363ff6de7096f6", "115df72b53cf2cb36371190374ad0cb19634edcf38fb90c15a74931fa35bb044"), ("093659fa2e5feb74493f8b87f1e1272c1baf9b95fe37c7124b24e84bdd7089e6", "262b1d3abf2dba6463b645f92cef4b13732a96d49e27701670fa80ce3e2c0e22", "1cd7326ed676d56ffbdb4f1f1d4f3ced8214fe1122c245ad5141f36458478a54", "1a4fe7f9131525dba232f09d34f882877e6b681c861a8a0ecc615faa7ab5b207"), ("1eeaf7691742470780c4ca9a9932bcadd84be9b69def61c804ee54317e901658", "0260a4e8475a94bd58ce0804413416e479a3bdaa981152c227507e4103a4dbcb", "0a979dd61fd77d226c9ac6974e1c7a8002e096efd48307a39eb07276960ba949", "1349ad3dd2c4d645dd8347532a1a0978d6970c31dca089536e45b905cf08eacd"), ("112fc3e5dd56eb579574b6ce16d92fb2cc755deadd874634996ccacb87ad94fa", "181f534f734b6e878a04c6cd672815a82afe5e3e685fe1268581ef4e1393ea0f", "0c43b492b708d423f4c431b367ef00f5de52590dfbea092526dd2d04812472a7", "09f68b8ef8285d7f67396b3e00a08d454d1b281235b26ebcf18253a825f9d0ab"), ("20c4d58ea6b0d38c29e13a47a3d91a0c17e6ab5526f6a7342ba63feb111b15d0", "00c69928a78c48b5e677e01ae380b4fc66fd6c2a0840333c8537065d4d200614", "2d195eee5b5fb821deddc105bef0ebc27c9f92949c9e1a5155dc1f66707b9985", "13327747d412b10d495df7605777478f139f708113c05f6c4401aedb83b07a02"), ("053618027d5edac7b03771fdf19657c3368fdac76c9352c3612a57413b733d5f", "08947e58b083042dbe9dd7751e6fb6782a5e8ce724f37df6202a74030a179dcd", "120b9119d39e29c9d6e5e4fef80c45ec3a9ddee62b1894d334b264a9dca393b0", "2936bf4bf14f1ae4ff1450ab5849653e3f9417911ad9356d87dcb60956160ab0"), ("2f446d500c69eeca63bb80f5ed491c9033d79676449f27cc545ab0c48abeb19b", "10920aec46c8bcde31c923c24baa1997b47fa5fa579891f90570d815a2604c59", "16f73e6cec4e6643c15af51a53b6e8590083229ebae76a901923c0acf5c9c5e2", "0235660ea437b589885946f7dacf26101d17544da6a7bc1f533df525d3451358"), ("1f0f9705ccfa54b3e2b02785c25e8fb8e86f2be49e0da5ff4545c6678175058b", "2ccc7d501b188d1328366b97e26d32683b367046f60e2a8b49793697db87d8fe", "036e722a388f0adfbe7275b0e96167583739bcb7378b259ae300bd9279928bdb", "159a0326563fca7d0898e49607acfb4de82bad969c1d6a06406ced849aabb634"), ("1951057493a91759f8ca9f4d718beffb837463141ee2cc799330b1658992ca67", "2a47a7e21ddd744ea5cb0212d1b7991ef55e20d9868f5541cc880522e9f95932", "2a479600ccb6a23ee66f36eba0894f1c26f42df27b861e5a6c13fe97cdee66e2", "0a51512bc831255254b728a731e7e2e7f04732e3c20e5d4b437fa85ac2824552"), ("0fc383d6d1e95476fc45db768ebc1fbf0fa11fd7ff5bbef334ff996a367bf5c5", "2050d60a09308916200f99b13d95749764541fe87ba5c60589419b811944e25d", "0b8bd4247f10af360c3732fa17541d72cf641374ea5980b6d8222ef944f3fd25", "2bc7be885ea73c661360e4156d2772c0ddb8b4273eb38b3ce7f60d3ae0e231ab"), ("0963b8dba7446363998bbed1c22b51c2218c3b095b6c9edb3fed1c1e1e73f518", "2fe276b3866cd45d464827fc2441e058deb922c84461bef9c1eaee15d01095c6", "1655a0fcceb2d268d1ed026eea3e6c7d51174ad2dd1a9ec90ead592b8cec45e3", "18a2bf4083372c8c87159df5d86b052388e40373ad4e6494ef86310755927bdd"), ("1f64347d95e843e7c7470ef093e3a51ac8865ed7828b08d355f73e2114271f9b", "2991020229f3762ff4e9184bbf3715267e4f520b9d96787cd674b85293076049", "047ae6da1384c8289570288988f3caf26f62ba51bebac6f5212fcf98248eb1f7", "1dd637905b6d5d3c8e37f8a63e3a9252b79623b59b01d0f066069b2b208308ed"), ("1933cef20500460e23c5882b976002b044b649cd5408853d26dd8b3604228816", "0637bbdbd47ec6253336b38ac1619de9a591495b6a58479c6d0d0ff224dd0d0a", "0c79656d7f576cb1c4dbbb3fe90b05af3039ccbfe0f55d0917e37b8d1f92235b", "0cb88b2adcc3e1592df3c141ea19d95e0896b75a496f518e604f83fbfcc29f60"), ("2e17ac72058fcdede8c20ee72c660f303db07fef7b59680e1500c0ef2dbccc01", "2f5f623ffa1ae5d99f61eef578f9df9ce2b63049680cba7aba833e8b7421365f", "25d0161f2fd72c64b364c46db402c95d1a7f31334b3c6ab8aaf7ead29c59605b", "27fb5f00ca2aaea861a800c52607cc748543f504f0d7ed732f7a454487f8a7ee"), ("257d0466ab49afd78db372dc0f7e9d31e57c4a7e3d54bc2f7e5538e830e4451b", "1e7e8d32c93d8e8348b5e196a5055a635687ef5462e25e331a53e18fc9ff7933", "0f570bba25a2ddc142650832160b052a3872ebd05e460f73aedb18ed6747817e", "14ba526cc27d8156f5cd6033d743e6b2f741ef1f02823c5db18bad42a8faa4e2"), ("1ff57c556554b440bcd524e365acb2fd0b620cfe49bec86ac65cf8aada9a82d9", "2d37eaf0b7e9b71618ca8429d795ac747ea2571627981d4553c01767200868f6", "102254f84d8fad6399831a134ce2f2a3cbad66ece9e67d836ff7392cdde7cb54", "0b4743c3784f2b0e40b3016884b1025f010fa633a8a6d34aacf6b636634a9cf3"), ("2a391458aabc72a0697641f5eea17166766f849068c048b5b26f932a90999ee5", "1d8c9d3853539e1a65421ed3a25da873fc6e190ec0bf0aa4bf02e1bad03731e3", "1d2cc0d0410a8745ace8fd4d329b6135966523eb31387a9c796744318f5d8d70", "2a7fbe2375a4a6deaf33d4863074c0d98c39c66b6f06a0c5d418ede7e0e40b8e"), ("2f70e1e15d2fd9077a9ab75b91c1e0fde6c3c932ece487d2dfcb8232d27e1a1f", "0950ceebf00cfb89485bdd94c3474e57afa7726c5ada8d9c1be1d8ab5ffa83b9", "2529025e85062adcf0d0899471b03a50107f9fd4d25979b45fe6ff54f1c3298e", "259f1556867838b799c5ae7c56ce339d840fbc3bb90e24ac4d7cf140c3086c23"), ("020a619ed8d1c71ce8d2f9a84ba718577f6f2191d10a8242f497ffb4f83578ac", "0e4a6ac1602ddbced54403873d5666bb300db8847094e805fda6138f11fd3402", "0dc627b149643c29613e944e46a99069c529978b18541b441fd9f74d57c19089", "05f8787a606b86e8b415f49076a323c44ed5468ba6a397b65cea863f37ac3fa7"), ("2505911e368bd0f365a1bf54fb1067a80275c3ae4b76394addfa1c37e93092aa", "1c08b5253d08ec64fb6a81ec3bfb659369d12c59cff686523ea0508f5b299cb4", "08e7ce512423d0c84f8240de48aa511c7b030f8a125772d96b714d77cb855fde", "0f25573b98c18333871b0a69eb28b3ca23c045556b3ba9acfe68dd2ec6dc6c0e"), ("14f3f1575bd9e38744ce3b3f2ed897695b2974b69caefd379c20d0f615ed874e", "07871277c70a75fce5e6daa21323d6cc08c4e78a2f318e78388a785f6247e0c7", "05c9d882e30b5dd946b0e5e7dae4b8227055cc10441c08bc12d63b32cdb8b376", "23b16df7bad7426c0e85b3df560ac8aa0f109dd0cd38e56815ea6f2252a89fef"), ("104306598fa541e4d63dcc973da2b3eb86f7c071c9a60b20b9856346c222d9e7", "0c165add3fe2227f5390b9b6aea385a24786dfa09022141ede1819453ea3a319", "065e4f05fa57009b2cca97d7e19e699b6598f5df939d11bb05899faffb8f143d", "1ba182cf04ac2fc3c19cec994b718336f359a140130f0f2433383beaca27aa1d"), ("1a1db4f2451e9cc925ab164c1df8060627b3a40388aeb33dc08ae9de8b98794d", "0e10c9766b4cda84350749c4d2ae8829bdcd01f10454f816967b0bb28cd593c3", "1fdcddd37f1239187c2871c115b09bd851674f10baa3beeae006eb0ec1cddfd5", "273e0e5b81a34740513982afaadb811e27b92882aeccef29cf8cfe530a3b7f4f"), ("10b30d36d6d1bfe4325e69aad8e8a5ab3c414ca21d0f43de04dc0e85a23600f3", "0e2e64d7fd52e510b14529b3e37f887df42ffb4add59c914d67a3b590077f0d1", "103a7450efc50b59ecb55d6f0377beb2b3bd7a6b2622719ad906d87cd7ac9864", "1932b4a0e0090224be058e54c888ffbd5137c242115abaa94e842c58484abf3e"), ("10183a9ac0b08dceffebd4ac00ff69450ba8fe46c62b5ce18cab2ba1666822f1", "1c4e9f733d8e1af3ef6e980cf65b5d11ef4874a322b31686a84144640245779c", "119e08a39d5caed718fa20a1806e6d24dbf465bd061c3b3bfefac3955f70afae", "0007bc2de67d2e9d63b355df04ba0bef5107f54b00a38ee3f13adaed1d087389"), ("20d6f4757aecdb936eee92ad72bfdf799c2e00f9b2eeb9b29e39323636317e8a", "2d0107265f81a8966b4e856078a081016f38d8ed7803ffe2a96e5e2cb4961f1c", "11fd28b7af0395cd0501e816f62fdb5b0e7fa12a00b373b49d40132b2081f487", "1e291d6327f6fc9844088354aa6f324c1f676dfd3a1633fd45b3cca907ee3d50"), ("053d1e533bb83ebea94c9be499e2ec813f640bf48eedf28fc9c5fb85682244e8", "2b11afca857ea172c3f1a6c3391b0574532d8d2d02b10122cd503285b64f55a0", "1d47261aee52533903dca35af25305dc85d81af873cfc4d8217472cdc64a08be", "204f360548eedef1f823b8fe2cb51ea8a18350f581c078d30d9cc5e032cda590"), ("1bb1f53a4bf202c979681d7c73c8f4e0bf6ddb20526aacfd67277f0c3e2fdc99", "03d15e2622cb65bdd8ccff6237bffd2569929b824fe6593c95bb189b584e4554", "1308226613d15ae9456f202c2744e64972edcdaac9f8ded9f85b8b619a62ff4a", "1addcff40b901be563b39996c5959b7ce730e06873f2580c2235210759f32f91"), ("09e4d7093de62c98c45d4b35a5df63836fe8cc86b7b8aac21c308fc01ad513d5", "1a33b4cd1d09d7387a45b63aab011d56b31ce051a94c81df1a2b3a1cbbf857fe", "1e81b5107d4bdb4f01b4ef541c851fa05f69a7f564c5d36eac68f288cee327dc", "17f8919ed873370d133d32d4ea8a32ec34b85b45a357586ad31433c90bb97a75"), ("299b2212f5c4a86f6f98734e66262481aa75c192050c546897b87b4b232e9d33", "2389ed61fcb7143c02eeb43ba392ecd695e837a4f46133d47ffbfbda8037c8b8", "0703cc5c9c3b163326d70bec0a216accf7966a06a536085a502b1a0a76f3bbc5", "12a15ccc11b3d4a980280f2e479e7002e12e0de874644bd69c4026474dcf02f8"), ("1f7ecfa0da494e14bc3085b03cc67be9ffdeb76a691f1d635fd0bd3098db0984", "0245a3e1ffe2df70338dca455d5cf6467febc299c475da2b4174627f4c76a7af", "2ead4ef7f4be4bec2e76567132d9c4a4014164a0a0a76464b74800243ebe7e80", "195b5fdf76629e60a7a9e78d3f08291733d4ba7b626cb5260773541f9666b13d"), ("1544c7ef498147c478c3a5d1b535844e875de8f9d149c75ae6040d0b3af7bc83", "2c59c8bb5a49dc1ffd3182f67db3a3358d1b7aa105a457b66c2a50471a29d0df", "27a9312b05fabaf9d0e59da0d6cbcdc726bd95964edf572c771cf0e9de977471", "23bcb4cd90035aa5bb71ba92e59e12a00edbbfcee9b0a179cb2df6d6adce2cca"), ("29a9cbb31d5bb7a9a13f6836c80049df515fb01ad5a3ddd2c8670cc1d6c2d0bd", "066e01d0cf3f44066f37b753e1382963a1102a8312bb702422acdb8f1c487d4c", "27185380274c2688d233a15ef643a5272ce566e628c8aceca3aacc81d608f55d", "207929041d3033c83ce18cf70072f3af57257639dd74ef9e986918e63c7322ef"), ("0c06be7061cd93c764e6bd2ca1311a1bcf9838e0f6f8f7f67713ba19b2bdc90d", "02da653b9265e5658d3c60ecbadc0b26ef2199195e4d1d9a836c90d13574fbe6", "1e965ca543fc01d59368be158dd373c78baf65b65b6a1901edda7cde72494bfb", "2eeb14a3c24924e7b518ec9106a1fd82157733ad2627a1fa91bbf07a1744cbe5"), ("16a90fe2a7941b2eb73987d333e99fc699c6f382a1e4443d0cfe249e744c146b", "11b452c4875115ee44ba82e0cad0bd64bf3066ee98315c90017e4292b483bf14", "268de1803ac73c3d3eb474bd4ce2df4320ca3688e5b0c1c2b87302f38b236eca", "20389e02c6b48a7975c7ed97466f48ef2916c161458c3e9ce26732442dab10b5"), ("2b0310ec853920c192fd35ffc032a234a4876feb8ee55850cf4d906aeb2a177c", "0d9865f70a6214ea9d56f2eb736e335df5ef4cb2af217735476fb782202009b5", "2fc91225bf017a58b0be6268385951d1ac3a1f2134107a1d24e49cbf72299179", "16aca40b0d188c0d5c48539c113f1caf07162efdc550269aaf6ac54fc69e8801"), ("28bca6ed4326b9d676fa3165c3d7fd8920e28521de4cfa4b974cb99982dd125f", "2e9d1f6120e840bbd4b2819fd04e84969bb352270c12061a0646cdcf1c6cd18c", "097b628000a8599081466d13a70aa8d5f1b5f1144eb64070f11503defd1dd7f9", "18fd03d5c47de2d8365fa91cf52bc0345ca539d10cd9750740a42849962d2f3e"), ("2a09ff445fdac743c395ecdfdfd27169302c80cb12d7a0d32708e8380e6ce04a", "16dca85a01122b080056008c757ee4489d2384ed60802bd376f994e7eae30cb1", "2c72022cbf6dabe2c22492577d1500d524bfb85d92877cc1987208a53ec9fc6b", "235a41362ccd860855a5a6dc19ec5ff379a249e261a2515eeb2b07e243fc2d6e"), ("229331f189d50f3e0bc0800b063676790a26083bd636d8d44f1a6bf42025f376", "15f8bc07974ff9a8d132d71870ed755658b7be56dd459efda82352361d2832bc", "0b025f51f447c73f98f3683f470687a1b25975b732066e873549e2eb6bdd3be2", "092d2060ce31e09f74361391ef3e80fdce9479f22f079d2942d68c31dc7ab4d2"), ("1e921dd8820ba4f0adb5a9358573d7f6cbe20bf6f01e1b6d81a0bd8bff348005", "0f4e5dad31773f927b28924a1d8fbefdc9116022637d7b7164e0aec74b110669", "25ac6f857dedcdbac1f1f5fc137abd53ad3e6cc3efdeb41d25c8cb084fc9c95a", "0671c6d0e829f338c54dc10102693055efe36cb352e9703f6c063666e4449eaa"), ("0500ba5949f96378f052b56b3e166bf85162bb439f9c2fd08655b20289baa7ef", "09b4f08cfb2c1faa1df045e1806337a45d2e34a4ed54693343ebe6754369626d", "1bd32dc09b21bfce9f42d7672c7d0bdd89e8a6055d586eb476917f0dd9ebf05d", "1ab7564f492fff66a7f0a83506a8f5385892d402b36dfe3c4644608363adc585"), ("1f7f54b29945340c350d00f371d70bb00566a70cb5325d810aa0ff3de40c8fa8", "0ec35dc6d0d8788cdb94c22f35236f5e1d8e6d5d06ecfb34d52b9a8017b883b1", "2859b78c2ae629ba8cd9016862d1df4e207ec4eb84cc0a61ffe0eb22b82d3978", "2f66d460119f492cfccd0b6f5568056689ff5ebf3ac67e0b148ff31541d80cf5"), ("1f3891f49de93072882d35f0a6534c200ebdc48d776d6f52b37b3ac1e24b5960", "2806ef187d5ea1b51614170836518f2433aa79d20658375bdc877b904cfd96c2", "028c885f72bdf3c148f8b7d63de073f24f9c4d4e44bbb0855f09b7df4ad616df", "27809d584ff97211b0930e4ab837551dfe87e8db98904aaf41ddfa4d84fe8c98"), ("1b0028c71cace01bf13fc458f71e1c7f0edbf86f1da6c8b00bd1105298ac81ca", "1c492c5d80b0a182266176698686fad41d4ee0115f0cc7c072d33488f7e322ea", "122f0d3e4e0dfc2a51e6d75f1a96c3ad5c88a2b9ed2be776372857a02eddd0cc", "1857cc04ee4027fec1ebaef5f79a200c9ecde25e80ad0f7853b4d3b57a0a59ca"), ("049acfab1cfa6fdc76a3e6da5ddb6b0f62bff94216550136e2d7fb231e24ef1f", "24f4d85088368730b9e6027947a0d89ab449d069f3978d3f184a355bbe6d65d5", "1d61ce9dafdf90074fd06faada2658c644c90833b07f7a4a7e1a42d8bdba992d", "18c838f94de2983ed989942381b5263986cb501b2bb47a22f35638bdb17ae50c"), ("0c0e5bee6da04c4b364f690689a605b20eaa664b6fd28a06d77f958aa75795c7", "2d0edfc935a8a18b957b913b880a6bb99045fc307801dc68723a3e080cc83a89", "2faec9ad3c15245861c1fd0a265a950bf9eb462862d4656c71d4c75684c71b58", "1723e23e26b1f437ac3203fe14a91393f88150ce5082fa923fecb094301404ac"), ("18f3fa31b6b4a7369050ad6bbd9d850b69f3c923d201a7389c496b544318596e", "06dbe765aa75c3da5c6d2f3d2b80387a5fe4014f70d6b73916afa1a3db6ea41c", "04bbba7b619d1ce11cec1a9513ce026705e5e2fc288b4ffa5fae395cc1408e4b", "01391b5ee2812c388862682e44491e3bcf5a9a3e506d627ca2606c80b271e863"), ("221c040d7e661d0b028a7fb0f329ea34b7e0e3f3abf0fc5c3bee801057cadaa5", "2c23ca6d1af312289e7b2ad0dfbcc371bea58e5c566cf6e1408314b5977e83d7", "143dfc9245b5daeb9525e257a8a130f21d6b6ba05abd08a4448a5e0c5dbf53d5", "12089d42f96c36926bf3b3d7c8e7229cb9897d9fd6159b88422fb591d04e95fd"), ("15bf9179447d47b94caad0b34f2aa566f331669fe10b4a36f50d1850f33de73e", "0f0fa7a8f9e10f64fbca481a072c79f5963ac7c8cb667dc75b4f4eb9de592ce1", "0b33826c79b0289dd25eef64d0425a94efa2f14a61f5e361ce2f90c8ff3dd6c9", "05d5a2f9b38cc319f290fc73b7c0441a24b38326eaf90083f4b858fbce017445"), ("1dc623484a940e8f9c46e13739e0cbd48cf5590c1a1fe19d1684dab857225af7", "1ed28c6988081df1b43f9d92a0226ca431d154d54480dac934dbab3d72a422a4", "26074900e49344f2ff9dec4dd01998254753b26b6b5032e978376b41ce5f09cb", "2329cc67801f022edd82356956afc5fca495b441aa19108cc6c0fce39fa5b4fc"), ("1b3c81a63e9d83c7a063b25ce440764c90fb5740897f9bff3ad03b453431d575", "1f4bb21007cdf38e35ad92ff4f30bb151f6dfc67e63e224401d7b2e244f865a9", "12a6afe683e86df70a9c0747275878f28e8a5f19871c91680b8de0f18cda839b", "26960c5c60cb175733fc9e04b9e3569fbc3658e2ddf43e64d246221854750ecf"), ("2d9ef0ff492189a299eb64cd093c3b2f33a5e5e3748c2478873e4498ca54a309", "1afe6550f09a7abeaf8ff0af279aeaed7b11634980f5e9a289ff9d4772da7e48", "29fc1855a0b582aa36a0680f02256b3ba516d9e2d47ef5c29f8f2ec5de7d85e1", "177b70e5b6c8aaa1441cb8fe1de011a6314a643b6a7e35a4cbc65b05aba99dc2"), ("06896c1232ea1fc7e639cefbd05d09310601cf522c55023d1862654d65d6784b", "122281538676a1f97840d62804f7845fed261e0725001ac4ec04831d8e27b2b4", "28433593829af9718495143d8e17c967dd86e27e698a7c55565ece99daa9e4d5", "1a1467db11c696d35407627d2b4ea56465464a3fa92408537c794612da49b715"), ("0d943b16e677189ef91cce47206133b17e6cb0918bd18790579ea091f10a7f11", "23224b590e10a0c2651717667d90c10923d5bf16ac1c1ba78ed76a4235a0f9d4", "0e7b311e93f18e40234d585d84e914900e1f03caa949cfc2b2ac80c19bba3966", "094b788ee89307a42171d14265ea52d65574f755b870429f719df8c9a8512568"), ("04dfb970060454f35655298dd60a3233a530565ae186b1f26dca1ad035386774", "1e1a477fd3d2f9d1d2e517844d33c39a24657fd5159a7f45ba6b763756e0a22a", "2642dc8656f79d6b2729a001137a7fc424f27adc49641d57776216e812eb94d5", "0e73872169d8001b9adcdfeb6672c2c8e327d4045d82920c28bbdbc200f03906"), ("2dd3e961f97877e68e3d859cde49eab1fd4f38bfed656322a5680ee9e3694789", "2603bfb78970b7d7b4301b5c81e5dd4d815fad7c37ea5b0dbda4f71e5ab33766", "0e58a814aba1de629ea9fd570e0ef8d943d0fc9ab02233a06cf92aea3b02a0bd", "272431960fa582293086eeefcd4b1cf4393afab8db21587f0e4be12153c2afb4"), ("0354004a2e0ae513fb4c2bfc97e58b1bd2a7cc626dbf4b13e7e36e4ed4fbe137", "1ca28dbf31d4f9d20b5a8cb1d31c5d907da1ec343d1f44bfd7b98709b7d88666", "2538797a800bfb22637ed9414da5270e5484843d6a7e024b5982d55557632e02", "012bb6716bbe0cfb023e7140c456c969d4675cde7c66d183826deba387b429e4"), ("165f372aae14c0006632add6a60bf474f3bbbcdee0c31861dd0eabaa9e0ed334", "1b65e8e17bb6bbd3b27f4168433459976020361dfe188b2a71bf0e1e6fc0f590", "1a513c195a805f7f42c4c11000d9cb744481b76b6cdbdb4c7042baeee3ffb645", "0b8194a0608e0d388b38797b16a1938e1b7f93d869c68ec86d3b66c6b1fb7d0b"), ("2790c6be6129ebbc0aef698c25c2aff9fdf4e5379ac04b4ee148bc855333c547", "0f8625166ca0fbdbd3e7ec7072f166081345ebbbe179e1b0a3938bc68d9c5759", "29b6d0f661ef46e707f871ea1522047c0dc431ac74c17c577cf5bee62aca07c4", "173596603a49f9d10b44a73216a91dbd03594561e34613aacbe16583800c3334"), ("107e590e936808f669ebb2fff2d954616c49feb9de1ee4e42bf258f65909f325", "0aa842c46163d7c7a1e39be6313ea8bcb147524f3e060b0d3f9987d9af94dffd", "0ec738bb793a9bdfa716ba026b2d35e84fa0ffc15432f732bef20ebb294f2dee", "2776a7e966d22da86c404a6aa5c9fb6bad674b123b18aa732ee767256160ea18"), ("1f9ddb0b7844b748e36e806c67b7913c641d5bec9233ad0308d0063a95806e3d", "23a5276fba2688406039b817324894ccf1bd058b23365f42dc81a4099843e5f3", "19e8b9f94ec8c14470cc2d111877a54432ba0eb6b064b7ec189441c62aceabbb", "0cb55403253dafc2ba0fe5b50e98fe4256ee099422e876ea6f661f224717f8c8"), ("11116dbfaae99710545e1f29e658958e06a545a10a52893b6c06d2c8db2b7d28", "1fd7bf2e4f0470d3e57eda19acfb0a1571b6d1c0c97fd34bcf308eb8c7470003", "213e471093263dc15de8c83bd0d1917bd51e27ce87de16fe2140be7e0d9225ef", "2332b216ebd9431260746aac760c9e0cf2cb748797a0b7b5861f3dd24c88dba0"), ("095a65b5aa41f01af1ec8f90094e98a710f656152ea7ad19cfd2bda4a89609d2", "30498ba89fa7ac85e459ba73f1a95f4f518ce1f4d043908ed588d54283d2e0d7", "2436c646ebd9d8f51e762577cc4fd6249079084b862651febc4a2c2a3f0c968b", "28e9a1a1faf20f7c7e1483c5c0bf6f7fa3be63c2d0b4b6927377f128b9cf38a5"), ("11b77225fa205e80671f317c48d286913c89bf3158f58394eaf087c78a41cb71", "0fe95f4fb9383393fa0666424415a38300f7b4caaee44900d6cc76dc4b470e46", "0ae59e5b8b6414ce619908ac8b3064b9ba2e28665df6fd8d380ee9a0f28d0e12", "11a6c788d0c8ca7df459574345bbc8d0fb3c90b9907b9499720f999d681b65e1"), ("03375f89de12fb0678e5641d64f35a5699350057f5362c2f123b5990fb497bff", "0cec1d202307683707fd71fc3dbdbef052e652ccf0d9486113e4a8e8f92a546a", "226cf9e8f80b9bfcdc1037f64618bdf81e6640f0369915017c6eb5891eb8f730", "16d5e00482d93d4db0e41056885bae2336ab110f5c174c2d3d731c557534360e"), ("2e2259ea67162534de90191c5aa6fa250d35f85cfe242b136d9e40e79fdb59f7", "0e9d7dff6640c406b910c02a4da5977eaeadc5526bb95bb431a22f8008672a43", "23ac76bb2255ddeb8ba6245cabeff7889dba5c45dfc1f0d98dc420b8269e435c", "1b57e1dcd25b719433c5ca860a58b321cf9019aa96b64cb5e4809b60d84851fe"), ("19e319113a089c225a56e7684a62c609b40e48ccc0ba34975d1974078c441319", "06a8dd806ee5f4f5138f076aabcb88cfdc39b53870dfbc17094065f2e5fe6330", "2ee15b4bdfbfdb658b46b2a4917567e3db0d14e340e5f94b02c5c9d9ed3836da", "0b63603f3f29a3f4f19a64f8f6520d540022e3b437ef446f2fd86686bc57af40"), ("097673dbd8df9339486bdee9b5878ddbf517d910a8e860fdd8631efc20c69eae", "0264c7e8973538249ddbffb58aec8d2ee765419bc4e489071156c197974c6380", "13108ac9e06e338570fb65071776c8f3f516b416dfc055cdffd0d1fde9bd4cf4", "1f5e6aab69a3c4d5b8db48ace179d8f5addd322412c0dff3ede63ee5047be9ba"), ("23db6237ae9ac69a379bc8e9cea498a3659c37fc0fcf3d9e5c91f368d3bbe3ff", "04c9abba91e9abb07e1f557b3c300652d4eaca2886aaac50854d4756f7f51a18", "0d6978c3f0585726ef3a4a00fd6327279a79553999241e85b29ab4be2421d8f1", "232da4c24ec4f70e876a9d864a8255984bc5ea184ed07460af7af690e0b42906"), ("0d249ce1e1ce62b32253f65b722d2759a1f40b9c64c0643d9a65dd05dbec3a4d", "117f33eaa3ec95281b068ecb1b366fd65c7fd08d9163d814a85efb55b7a6f176", "0d463972293ec2bfc4bdc4f5f24ae9ab4786465fa6ff52ce999ced3e91679e48", "02ca0c879ee10f29161b9e69844bfa27bf3c28b935374452aa70d948d5b0608a"), ("2fc5fe4a75f38a1165791bd3beb3501f94106ef87abc795b3388b6ddac6ef3c0", "171632589eb1a221c98dc57de7c9e5155066d90ee0c18ba6632511b96a1f05ac", "09623e07c9538bb66cf4ec16b0a26e3bc71f39a0cda5c2a919936da71cfb2afa", "04a189b7acbd19d0827492286fa50efcc98410d47a96f3a97b8a3d603b411a6f"), ("1d2ac3a7a3ad7593815f977127ff11971f64ab643e4210711889edfbf7ef73b1", "2045d3bdabc34eb812af11305924acb64b5b6570f8edc056091ad22f3779fb3b", "00a487d74a1fef9639e416f1c6ec2ffec654d5c642a3a533e44fc2fc3983b13f", "1cb1acfec6ba8df0c9278ccb6e19b99f5b4b156c8790dd8f8c4abfca04a3a730"), ("158c882ae20215f715ca64b441be9a5b02a690ddece31135cf41abd105075a56", "0be9207c22850a3b5a00b44636eb6308d3567e61e4e2ff5737f56ee591fea0b2", "1e84ff3059406322543dbb136c3223c17e198f7413c7d548d44360aad306ae08", "2554fc4f78a148e06bb9b09ece51e439a9170cf8996ed4963b3f342027117100"), ("1411fab0bde7f26875657ee7690d4be6c6f5733fa8f3c88a8da329a3ce135a08", "11954fb1bee10b5ffb2f2ba166ff65cb1f6c8f9362c6ebc9362425429a2f56b0", "273eab0780069f82b00827b49ce098a585b40196b862911a7643dfe4df88960b", "159d1c08a61437d3680c20ceb7b42cad4eb25ba345c756fd3cb9222dff5287d0"), ("2860d7359d5dc943067e5ebc3d7f750ac2b2e5d9dad0aeaee515e12ba1f96820", "28f034781be6074113ecd3cc04827f414585531d43f2a0db0d91bc2b80b29288", "0de136159eb00b46d0db0e927a76ddfa9034a73f05e08bb65e028c2e90a342a9", "227a8f7bc5d6cf9bbdca1a60455d5f04232119839ca430dccb2586b93d0220ca"), ("27ad330b3b8e50bdd842a04e368a43f5a2d0ed839a0ee43dfa46e36da6a9e3a7", "0ec37c616472ae1b96c554130839eaea93252dd435d916b069f97903fe9ffa12", "1e0a02f9278a30648dc16822eccf48d5b09753a2dd81050adeafe61c26f3ad64", "01b45c8618b855450be042b21dcd28638bda79e42b11b8d817fdbff6ab3228e2"), ("1a13ab072cdd27fcde28ed11a38e327aecabbe16cdb6a98ce472db3f97be1892", "09ae5cb5d6aad24758f71a1086976ea021008915ace44dfd69e30f90934739b8", "244bee0cb5097dc0c98fdc722668f81a67e832d2854e40e8e1db6017d623d8d9", "0185e54deff8e6d48ce88db8667f91436b42c2defe6792a73fb2eae270a17ec1"), ("26fdab12b2252796cff35f53e7e51eafedfffda397273fe94c50e0f4ed1ef149", "2517bd9630292a25b07fe702c923d9361d62e1a4250d7c55e23cd21f6dccf540", "1d47a5ebe16d46de20867650fb56d0de4c4f658b8d5ce2a2ae85e1490e9af3da", "0d93e0811fd679ebe7cb9a9f50406ee36447143db0cdc21859141d21e854de6c"), ("092f247f1e9d36f95f61c933159ec0f2df88f42ad838fd763747b2e29cf5e8dd", "1a0161c6eb54105f09cbb3bccd240a291cd87a0e4bb2a7794c26ec4f86cc4ba1", "2ee0760c7c66afc8687cfc8917dc64771c6b8cb6e515f5385874dfb04e51986c", "116b3923599af433d3a2a381fa504a0c304ef8fae733165bcbfedab8845e3561"), ("237593927e0c2c09126e8546280a0c58f65a79b5d061e875e1d4872476445f0d", "213e291b2fa998e0051446cff9488a53562a3372f32b28dac737d1010409c886", "07de22481917a88e733038ecc954fc3004b00e08c8106879b94e7b8e544567d7", "1f56b9fb665041c747f7a07886d2a98d3b50033a3f79d56210a17b065de4e458"), ("07f5b00e0cbe653b0dc2cb93ae482044c8bad4a9a1f72ada3f78bb5a613d0091", "1245d04e10f2aa645dc3ad4a161fee099a5c663fdae458d5b43c178d8b514f77", "097e854348109b9f87b6536576164ec1a841ba51c30b1ed5231c3bb6b442b721", "25bc84d63f0b3fab7f07706c6b2738e8453b8ce1bf37246db1eb9163118ed7c4"), ("1cd0d0664f07b8dfda78d88fb63ac0512c90e50f2bdf2d8736b482984dab32b4", "19cc3b8de5228e29f51edc64c87315f0a39e209718f676ddc02770fa88887714", "22970412d0aa0403ff1cb2a48e27eafaed1c25f509eafd96c66aea1cc545b4bd", "23efa99d002831e523a4cc6e1db3082c7877521a8aaef64f89cb9a9613fc4107"), ("1532bac90ce44dbb36d5d06a6b8ef4e0483b53703a6f8e76542a4d2f84badf9e", "051466d9ebf13140d5d096c6bed411351caceb16d49ad6e4e1e525707e24ffe1", "06c63dea08c7fadb72929cb487a4e9f6765480fcb809e7c65a162ad8c38d99cf", "2d6c03715fb7fcad208e7933a0d56f9fa685a93b9244b2c29b88e5bb702f7a2d"), ("2b1ced44fbbf09e0444adffd8cc33780d8c0f87aec2889a6f9147937f11a3e9b", "2096640f2f57b80fd1804b9e0ab59a2ab33bb0335ec60076ae8eb4c0672ab9a7", "2e130b4772fa7d4c835c04364e35c3ef0ce57e5bc5ce643341ea7e5f90d2fd69", "032ff1b8f0449762371ed473b11671cd834d2608445c1ee4ea3319516665bf9e"), ("13f47ece1dee1c05b565704952422775470f9f4868b43a324106f4b480eea6f7", "0b291f4c5283318296ee5db3736441236578904df76ba7a4560bcc7530600109", "19e55424c9195ef9406d9faccad4f95b4af9a525f7e9263bba723e68b3725171", "2517fe796a9fb3cbc59f237d81585ff7c365fb774782516ab8175648f5e08531"), ("1f90cec2626c79c860d3a9b04885322cfd0356854e41d07cba45398d9859c7f7", "287db2750a612220cb2e6d6b39c5c465ccfa2e85867ede38878675b71714a2e8", "153ff15b4be10ce9979e184b15392084ec943454676c29791c190468231d13d9", "13d9e2b2b7d66dbc2216f3a04c357006c0a5816baf66167d31844752b72ea298"), ("24658cff352d6cb187059c56c2aada889a0c01af9a1d50b5644257666521f2c8", "289725ab44c3da71e6f13941ed30e71f7c2fecd6480616b9fbca4cd410551f07", "300ff7a2034e0f121092334c461def9a0c9b886f5095e406b14bdd42c9597f72", "29f1dca9a048f45ba79e3cf0a70932ef225f51316c98b8dfac1dec4f820573c5"), ("17027713fbfd6c4d2db8977afb8f89144f284031f49ef70d4f464d1c26ac8506", "2070eadd847738435ff45214d0b4e3334e87de3200de9f214f369d41a964067f", "25950e6a34e43a7d2f4631a45dfc940a67c02d5dadb4d70b0b8b5b4a8c863653", "08598756d23cc2893cfcbb38cdeb64b1140c5e62e2d73489dab6805d1553c2b0"), ("11927bb3c002e39025e1b7d0bcfaa30e411b4f67fa2a026c0410ab3d504396aa", "202b4806a58fa700d68e9c499e3fecca7c79b0297ea56b6993e1faed97d400e3", "0aa1671f9f9e9ed971d9073d72ade9ecd7911306c866291172f540d5e11bc665", "00d624b1fad177e90b1617a3b7512dce751553674fc44fca20acb48bae678b83"), ("173e0198fe25b6248c29e5ac717a6f52e35fc34bc2f556c9dab468ef6912fc02", "26eb57022e15aefe41bafbc72e352209f13eb988d55a51d2269727feeeb86959", "099484f524e799994b6d287467e8f8859717771cd300253eb4bf8bc05dcbf4b5", "24889798d855521d98567527e155813b86a94f3f9e94171d9bf53b2142e620c4"), ("01b3a2c0eb335197325ff7f9935f714b6557d123980021d7e8ab3b9e0feb87c1", "05ae3d298b02c5860cf0a0122070c7e13f990f7d80d741606ded5c93130eb478", "12863b50c206d02288f74e295d344ea9ccf1e8b52c80e76b7e0b9430ce8e5aec", "0cbf922d264b3b4defc55306e6f475155e871d7642b99ffab398dfa285b4af60"), ("0caa85f2d27cbd00c368cdbd0d3324d5639a189f8ea9bbcebbc7cbb3013833f1", "0a79e78473a4386228d5da2ee990f23c5cff7c1829d54d27c296aa2bdab03452", "2a827619a7ac9c12f472fdfb3e7888174d4af1d399488f693452b5eee2b08365", "2bc91237d5585899326fc1fd359ea09384ad15e64c75edf87a3a1d3ec3bdba6e"), ("053f04e5438519d9e1bb4fa56f2e5e1ff348de9c010852fc24c58559694461ed", "17c512c7a7572b3b8902c352389f496b2ee0f52dba7e24ed7cc7c8e2da3d5eab", "00d194e0cc3e63638bb23c4d3ff4b3c4bd03a67dfc786514ece57354e800b2d1", "0971154907d64af37eb4641a7dd46f0be99269108796941a3d57c9b903fb08c1"), ("13e643cb6a60e4a316eea894e61654b6eebf2d1412b371a2e84d5aa3dbe482c8", "0459e2c042f78d8756077b8b2a9c559cf033d28b1cd477ce47c8df5fc15f03bd", "0cc6ca7aeff6abdab5b9269593aa70e2b15b78f23e75657903d317e43cb4860a", "1ff895e37533817212b4f55efd811bbabaaaa37f63ed43644e778bfcb4a78c04"), ("24d561d4794eef1f06f3a0247067f39e52f48d6a8a6df78fa63fe22b834b6447", "1ba645ae4b0fc34a58c6812118d6377fcd92c043267806dd9c1cab2d2240523d", "1afe89d1c2dd795813334df863c78d45033d29710eaeae720560d375cc6f3a55", "2190e74d4e5e87ba5fc04bbf363cb2c2c5dae8cca46cc7b19475e9f530d0bcb6"), ("043d32e5f9c99c347eb3fb7bcc47d4a3340a43201c1b1b1bca67063d29cb1514", "193a7fa4902d7c992050a2dee37d4b3efba40857395a2f93f099c6b975b8169b", "2720564facc4517aad4ee4855e67a697d013087886473846a52bf2f974d32af0", "182d111b6ff55e6fe9d42f63bc1cc7f6d30a35d64e9389c6591fbb1c590622bb"), ("1b8818ba5e77c0cfb5ba7a7316af16575452af86ee3f95715ca0cf070b2f5f09", "2874f6b155700d31cd94dd2b5d89081abf33b68c9152a62b37dce7f6ada2ebce", "20c2a5a5d77d3229d1cc22e858c850c7d1498f869b0f27a72a989bec736761be", "2954d82ed4f1d40839a8cd9bb3358fda03dafaa01e5621c4eff542b56dca005c"), ("0445c226af6761b67dfb9546ecfc90dc664faeb1ed1094e799a7d1e4b529240e", "1568fa8d3b1e1b0d9d18012c4b9e484871eb44dd93ef9994eb3dca2af99b42f8", "1b35379a20842e4f37d5c33ba3944e30c16650c3d184f3d4b22845d4b2657172", "15d8cdd86c963c5f81dc0245d57f3ad315fde0f3e4ab86e840b18597159e4379"), ("09cbb13a13f10a12e18dccb62f839263485db6917290a9675461856587606139", "002fdbd21efaa446ccde5198daa187a8700d767f59feca8142278d8acb44ab6f", "2129b1606ca074162cc415f00b06c48f01e8dac1a57b89c3d73a227c85670d78", "0ffe77f13daaf6cc847819bf02e72b6cf42305d1a0e04b0505a712fe2cdcf59d"), ("2235f1f265b83df7b0fa1c7fe461c80be01e64c16766e287ea72dc07a84bdcc3", "1c90be7c67bf498a667bcaa1248f8e8463da66c1a6003e8c5ae1326084971f18", "2f257a56e38e9f19c2bc7029e2afa39496b3e1aa208e3237d97988a262eff0c0", "07732c76bde5ec048f3371c1bb074ff50c0b030b74619278e14cf7bbdf0f481f"), ("2db9b2b77ad68425e7cebdbf91b9fce4f9570f952bc54139054dd7f66427f17b", "09f217844956abcefe8e62a58117bc9e84bd3fae47effc8e5578e78e211913c6", "2a4341f514d1a9a2aae7cc2627816617741e045b6d77e84091080b7aa6572c53", "22ac870a67283b0315bfbc8c60c53f0b244acef9121323abc7df4e249d7e9b97"), ("29f6d4d8b162196e001edb93afa26ab19117134f0cbdc5973739d33b4be7ad02", "0a11ec091efb374aee3475f47aec3f9c06b0051cb97003151da16ed87ac8d28e", "1de5bad052f57af1b900d5f21580efa34b83990b1c367fc6361d8dd7a01d5501", "077a3895657749b402001170726e3a7dfdb1e3b32f06fa1c1d290a657fc05451"), ("2df81a573a19a014e1de3982057531ae60920272678abf978866f8c8281e1fd6", "0d7326f701357ad207d8a1660f3a58e984ea578b3839108c038a982ae93225fc", "27ba41398ae5428f06cc3d9498df50b5391914b4a975ea88e4957142553634d1", "053b8737f06ea5b4f9285e9f57b7248989f2abcbf57eb6801a86f0b984a6e6ee"), ("11681645eb97746ea5a4739ea75c134c06fb22f5a7b6f225ad607401f59a04c3", "0c3341b256008e32f177572c9fdb3f3560fc901b840b5d6a997876312b9df841", "1958c2d8c64694678087855b6e5d5c456cfcfb1daa1335453c6a526b555500bc", "21ebc599e640d34819e86ce03e8618e8c1442daa1ffb2601f11f9d5680d4e430"), ("2e9503b024d867b06ec02f0daada2ea90f384b7cf180eb3ef98d8ea5314b38b8", "17719781c15ea84dbecc86f9ed4cf8b616d2c81f9389d51d24d6e3bafcfe235e", "10bf63af2dd0b864d5456a90b8e7f03309af5a0a6e28909759bea1ce66049669", "282b3aecc840910c25d2d14c20c1b779091a22b6dec56e3c645f35347b400b4c"), ("16d324c8bda68d5fc6cf8bf0347eedeb6192c9419e76b8971a27818b0c5ba3c0", "1024f38c35ded1170aac2ffbe1293737f9bcf6a96b47bac0f29b9fd467c9c4d6", "1116a49d7e50f1eaae387969a3d01123193bf2a0284eaa38dd60f69141411ef0", "2559c8bc23a0cfdadbe9e1f966591f6d3f69dac4e856eb68eeafd09181a2d1b4"), ("1401b873b914751d6a943db4818ff248c40e72fc2e8121ae92a5311fd5935e1d", "1b4cfb08c991621d04f9ecc75e752134483eac5762cd739ea43d3bb1e35f8fff", "1ea7a1e6bd96d6dabfe061085f20513cd4745eb1613faef9b89d69dc861fae57", "1a65952748ebe9e9c90d490fd33d01ed8e7a32027825182c68ebae3c03db58f6"), ("24a8a5f732d73b0d4fc8f2fb9f0838b74c4cb8c2fd3ed10d32459c4ac4d147cb", "1a9acc14cef69899150cf9706886e3d6001f508e7a57f57f27dda3ffb439d65b", "2237d34b1f82f5e7672d3080b028ba360b2fb5a3b8c24911c1a20a963497a37e", "10e4ffd537b88afdad3e7a202c0067debfd28f1fb4cbed8b6fea7341d6cd10ee"), ("0252f74e65c307a98e9d1f59316b99233df1dec7c8aadca052f7d4e7b9ca9d26", "2f923799fa21c9f10d630ac37ed74899881b3286fb84b8ea93db40c2cbc68a61", "04ba3ac3d609f23425c5a9009ef017dbc67810fe72843afd90537e5269409541", "058ca3c20fed7b6a3517b9120b0abd4df4fdc8e618e587f5d35164c515774e69"), ("017292befe5aa9b3f3555870b2864b8b5ea7f50ce45a14ceafe2da7d94b3e5b5", "22dbe33f7c1c6c687987eb250335cfb86b456f9981864e9f75016dbf6751f4b7", "19106edda65b28b1a0118c1d8cfbf510cf8a31aa69a77eb8e499b88f50a5bf95", "1a35af13db73c6e99aea0d7379fd466c7183012c69a88c7934a87d2e0e8cda2a"), ("23a31de760771c153c3257bd5a4bfae708f1525c01a5427ea6809e43c313fe91", "1bfdfa7939f735d387361d7b27481a99e0d3e72fbed04832b013328d5d7a0943", "216c9140565a79e752c7e2ab4c108a999de7404e698f8e616fb35a8c79feb491", "02a3de78ae79aa08f7732e4bd3bde6eec3bb398f7eb5e287a5e32802780f498e"), ("10fb3991d43f1e2035a0206e67ddd82eda91e016a6228e178632c774d425e42d", "2f561b9dcec32605f6547accb48e86a5f42e8241b5b8078fce5fa9095dd76207", "1862af8d167759e64c7a9cf1e741fcba8a6b2d79774efc9ec7a4ed8579de61ad", "0a6ba1f286206550981f3a217277999dbc0d745de6d54a1ce3593649c2d89e38"), ("29dc8f2777e491f7d82826f756a7f7bfcc7d6ac1e21f6940abff81fc92e69fce", "26b4aa85146814472310f15e2162bccbabf04f3fdb90d4f680012952635ffc49", "07f4fe162120e2f09e918c72b878dffe83796e2c264f2f37d20d3790a2f1944d", "03b78c323819736bd2c403403f55aed894085cc4eb533d2dfa170bcb67e33575"), ("248b64bc022a77ccb9dc2fe8ecc315757c53dd5e7ef18e7bcbbcfffe3f59d8a4", "2ac6a2f266ada43b227b07e4eba05a18b748d6f9409b8a36935330f2975b7b44", "22251162ab5330385835e63e6fba469123a170a42ce357b367119f12fc3b2efb", "12852923c1dc6288b03b4ef302ba94fb10888365cf27bf14a129d780bf0c3f46"), ("01d03646ed030f0131b2996f6c634f12f475c447b74512cc3d6e3510d32cf69d", "2f7f65378b13503c4434b139b0003c9c4754c2d55c22c456a73e563ef17ced42", "14aac535be1aad4e1c64d38de71835a32739360050c0307d6f9419a12ebc0cd1", "0cef76912da33f79b962e6f236186127308814ef4b178f6a979c30580599a940"), ("0840a6e1294e723e0b66b54e423d3de673dfe27619627b8a6bb4bf9709b49a73", "20e33c54357e831179d8b8e2c3d9aabbc2f01f05838cc8633d7726f1e6205d17", "2b38c568536ede2d0d6e70fbc6ec50e37172b126d46e42876b732d16b0b0f5a9", "1c0fd43150f67a977a488cd95ecec1aad61568ff8769a9f768454d69d3d097fc"), ("1101a38b4217374a98ff9562ee1b77269052b3dcde3d574a3daa8143bf7ff4af", "2fed1b9bc8c65a09f45f3141ca379a8ff4814d5d08db3769fd0ed781bcfd4cce", "10724c0c6732337a905b1715cb193e6935042cd93c68bf0a7a8fdf2c19d915c6", "067ad85e41a715f246fd5ecb0b99ecc371bc22bfaa5034fc0b2056cdd17dc092"), ("1a6129de7ba01744d030ca0d70d1b2d796dc717a7aac81809617768b7b0f17a8", "2e4ae39d5807d0fa3de772760a326f01d3829a002823bc395e0ad62e2860c1aa", "2a2998ad2ff69788c039bc4ac47749b892b23ab58673827f1aa295757720c273", "0cd8a22ab4b4551ca642de0dfcbe2ce05be98c285c3996fac85f2f74eb3876c0"), ("1ee49060763546c525d59e3ebb6b826e1cd0b21350990436089af2cedef82691", "1c98df0e3e3da74dc1e382d65ef60592a8968177c9a5b51343d01d0a9b3de38b", "0a798799ff737c3644c56bbefccbf226ff1f61c479b82cc3cf20644db42427ac", "1380736126f9c462171622be4a365669ecf7f535dbedca49f28a1c9895d68f51"), ("00565645fede288622f30ca5a12a347b1fb6896519dc3d2acdfdc4fd0112261f", "1d8d71ba72952baafd463a0d2eeb225faa23d28a551f85cab30cc15ebe4c7ba2", "2da1a2d1a2e8e01b34a3b62e499183f3ba90019af0ce22387336dd6af576d651", "0b1bd20e140a6a34bd3aaeadcc94e933393b78d2acd4fe79e62117a48038d82b"), ("23054fa399ca9ca5dc9130a8559a29d28c899fa6e5971403d8183bb13f472e6e", "11c40d0bdac0fafdd214bee0b5769b00e03c0069abdf9bd23787f3d1d5104d4f", "13af2f83b0418797ae25e48a983af88ea9f1b936fd9200aa8bc679f11452dc7d", "2b6db430eb1f6ceed0a181415743077664478f387d2107cb6950041c52c1dfe7"), ("1f275a5804ff8fa2cc5c51f16b749b8f9a8b528a505ba178776d01038fcd6e2c", "2e00d7f5e00b0cbc2be2fafc35d670af5fec01bf86ff3907b562abb0f3d8d503", "151954c9965905bee33f408cc60c116a1551afe54782e743bb6f401519720da9", "012dcc14e1683626657ecc35b483a383dcb3fd9792b836702aa03ca004094bd9"), ("038f8d630c37d462c51e7ae52a96de6f49596790fca87c0b48fadafe8b4da716", "05803b735bad46e34021b12d4f8999c981d8fce170e0917cfe5fafabd66ff367", "2db478f22fc1a9777de1089be800e66d088973b1bbc09d451df266b444aec368", "266f63d645e6ce6648d6432d333afb58cc0fb78c42d1b653d49be3802337a99c"), ("20dbc3392c3b900dd57165823b4976f5d96e730c3dd12099063b64b3ba1bd917", "27a18df7595afa27ea1c9ab4c4486524f2ecd89d57e02cf073da526b7100d93f", "2f35ea2f030d79dabf51268c046634d262e96f90d87eadafb720e20ce20f167e", "126b2a58b56a01261cf85710abd73457f647dd9f63862dab41b1ebe420ba1fed"), ("2f71092e0c862dfc49059581485b0d65762ac60475f275c0aa5d8667d01eedd2", "18f9e5cccca520043e68437495f4e27c94782b6c82158d967c8aa04923d7917d", "0faeccbb26e10cccebe60f588550850b56052bbd5b45e68bceb6bde51ed62ae3", "0f5ec884b98d06807ec4142ed95c3cd80c91f4c9719724f55ea0378d7fbe1f44"), ("18a7506b48eb7e6aff84a333292f5849c549d97f6777a8ac02fe25df4cbc9778", "1340b1db0addc46870985ad1927a25320467f1b321e9839b2a78faac8c3af8bd", "0d7611785abdab4baa283a8cdea2c18f164e1de53b22e3ab748873c83d26ca5a", "0e69ad40ff829e77758a78d015252341e1c69b9dae994726600f69323bafb4ce"), ("2c65e408c7980b713fbb73124b035c6ccea34023028d22e9783c4d6392d81681", "10463e916219eb9b3c1662e03154032bd59217ac5705e19b27e2329b7dfd7202", "1ab3271742976778ee12903df044d86e872d625bd12a6b41858213991f1044a1", "2a49094b7ff8391760915d9085847f4af066b9ee64a04a5f70b4403f04400bb8"), ("0c06b555a38d225253be98589d1e4fb4134699099a9ca53b4abd8969acc7f74e", "021b10f69de80fb3b2247eaf76c2aaab3579c43ae6046716eb074e1e126096a1", "0d7433f716a0cca7cb2eb4b9029e3fdb1bcce2b3c0109f74515d94fd2da4746e", "2b8a61b052d9657999db2b532947316e0a32ee0ab301b713f7a75e09def618f5"), ("0100112ca978b790a36d37379aad81b050d27e1a55fc26dba3b7ad582de58ed6", "0b1f27f0ee73f6880d584bc579687edb6d2f8bf57301fd0fbde796884e9cb78b", "1ea1475bd9e43faf37796968ba4caa4c7ffabc2e10c22bdd2ba9967aa65cd3a3", "2b1792d6d11f2b4cc7a3350a7aaec49541b5524915e6d73278bb036c34f687fa"), ("06e4e09b82230a58e9b0cd23cc95fb73eeac84f765dacc27c2ea16145ea26dae", "15034f29acc46e16e2d0a53624fa546a38ce2aa949a6ae30e41384e3d42f5145", "071be4161583be19ef7210b7b2bc216e083d43940e4176fe390b65fde71c3d19", "0175323e65405bba32b5d59f8473e52b53c31f1a5fcf0033dea34fb5b49cbeb0"), ("13cd1e64bb724f51a69f37df735520977b7711df9ddd7094ee1c209fcae04c76", "27787e6b8ddb098240516cf1aea7f78df5568c160ec084263a3e4b75ef9ed40a", "21d68f5e75a131acc35621886fc262c79c9319402f41e45674f7375aa136087f", "0cdf4c349febeb18cf8a7fd3e4e35b591ce176ad9824b05c2645f9ea8c4a6072"), ("1ef635aca764c7ae85a9156e7545a4669812bc0b09ccc93295a284f1ad8dcf4f", "17619a0e547e5a1c20caa63d7e272470a201dbb4d184c4634cd0efdb1d163b77", "15532ad75d5124a2bb3c805844124d60c098132bdc6cd09b8618646770cb802b", "0e64d7ce96ff9671a187dd6f069421321089df9067286c30dfcb5bf82526eefc"), ("21b7da752255210fc4bc80e5f221fe6bbff1366564de2092dfe4358f29a85556", "082e7947b12ad1151b8b71073ea5d985418a74c4d263c141c78d0256c2a57793", "093ef1e170dd903366db9914e3d5ad1274f3fadc716d911a2a64857591fc8dc1", "1b8444d856f6743e65bd4989b6f113861c540c3e475890201ca62033414c7aee"), ("23706b2fd9646c47f98254d4d535b1d26a97abedf47624ead0dc5ce550e31b7e", "1ce3038bccecd09027bb2289f521fa91788600f152becaf6bbae25de5ca3be01", "2cc8ab2490b965c933097af2287620f8cfc6991cd4bcf55afbe52a535d2362c1", "2d87bb3f5cbc40df15822f74bd43c65e34df8fe5f1156e366d226e89f373d440"), ("158bc860fa523505d3d18b9ccf4a21657eacdf80c8bd17535260e2ffdce0f6ad", "12af1dbef9d1f99a7e2815c7fd39246c373339936df80cb5e2f302bf1748e91f", "22146c4f568dc326ce05c4dd4750c501b04d4fade8bd9b5d6e4b2596ee6d5f7f", "008f6df856fa13ba6c160feb3842520996bd9b81336bb96f164c262d4b0843fc"), ("142fb228b3881e2448af036061a6771fd29981534e45c2ef325b387116e66b2e", "1ec5bb625af68e87a45b19005e58253c31c0ac98f9074dab919a78938d6d9249", "1ce469176ce2c63b27b7be2d0ad986b2fa62b1d3f553f16f61bac53ac0ff9ce9", "166981d78c7f734529908b7a150fa9d34646566674b9d12917b88673df12c7de"), ("12e1cfade6c7b77de53030b85060932b817a3c811a2733aeb10dd655f946ded2", "00647d83548ba742935f82538ac6af4b55bdcec9bf20686e6df21227674462ad", "0a9c834eb3dbf69336073c2af2bfb73407ccfecbc45acdfca9c6805c296e5828", "1068b92483828ee641c1e55662a6dd59e7760f3ec0101239325a0f4c929cd8aa"), ("0a253e0044720b5407f7cc22106545e53aa6a2e4709523c7d524edf2491aaca2", "19cad407df8554041f943448e88c226f7a3dfa04047524736645315df64ed83f", "0734a040b097fc8f3ebd576e3c5d3c10070fd4db0acec9489238f4aa2dcde344", "1275459ce152e06ca2540affdd63d7f19de9225360e01c6c9ddd94a9277404b2"), ("0355cf80b1e39ff5525f11f60449abd2fd593e698333f57200545bba6581f303", "1aa36f57683cca88a7c9cf7559a3e9886494621a03138196958f03e37598ba5d", "0ef5e7a3aa0222c999fed374c0eefe47b4c71ad10891304fe39c69b5929675ce", "2ee0095dc5a9f45b2ad9c9d35e8d27523028ab098a084892e517f5e7d3d409ea"), ("10afe032a6e6b3c84885552ef984d938f609d87da0c14658580cb6db57aab960", "1286d1225416e14e7f18c810800e7766cfaafff9eaa1fe160ff37b97b5187139", "2f34ad4088397f4691edfcd365b7d02fc638c677ca88ed740ac7d082b39df125", "295c57bf5281777eb454f63aafb7ef5cad4223bf3ebb4b2f6ae552c38e8d0566"), ("27d65a5ae52b7d74c733f1d93436421ecf958c79f132d4960f94b3f847a3cdc0", "190c0caf77eb27046527bc6dd47e56ba18d8c3f68f639e86550ce686e9284b4b", "2b028738269e7a4c1670e87e5a4f2cfcf00591b0b7014e4270c4e8aecb3162de", "1afb6b22797e01d53e0b497ce352492a517cb33f45636c18811fc59a0402a125"), ("11427fc54a49e52deca4b11b71cdfbe679553aa06913aff23ff4d4f0e73fb5ce", "17d55d00b95da87d82e7e4f1ab905772d5e16cd7ec110f0cc6cf4b7d63b73442", "2b50e5850afb67c4ec852da66d64d23128d6f2dfd2b146a1afd5be0de4df1bdb", "22bd1fa7a4cb124c2cdad2beb0f19c1da995274fc6f617f5f83216106eaf139f"), ("1d85c35359155209c81af17812955b048b31576cc005c015f5ae63578e3d83f9", "1868d0dd7098d61bc5b16cab193d6ae60eae683405ec7b0aa3ebb8a7c6c42b22", "1e26ed5c5018c4e2d70b8581016bcaa30728f981d19a714a47b4296c7bc40348", "03b014a31e9811d2cacaed4c2c298fe8b2daf26b45ca8b8e4e496d71aa4db05a"), ("176020f307da797e8e85a691ab54fb1a11511e49030a5e07c02f2fee5ffd834a", "09ccd4b46596331ac8d4b921ad04b90c667a4631bb81bfacabbfba59578ef1a5", "093871957b576fc063c44802c269fe18666d46fda2f26c43679887f7fec93a5f", "2dd6127b23feaead0cbdc332f01952f145c778ca0fc28918b88c66f7ce917eb6"), ("0ad10c4589331352a96c2e680ad10f7be6769dfa49342169e82038f1c4e1bcce", "2e24aa0d23e0f70c232934e8b0688b10101314ff83a9055b49c6ec1f6474d302", "1e4078684284610eb9434d554089b510f82a665035f743f764b136e11524bf5e", "1f85a1c8fea7b34cc87b722b69746cecc17c6055d31b39d1a4ea78424d7bee81"), ("0f04606ba1e2916283f9cb97192337fe9be5267b35f84f59817b7b99f244f85c", "03b9822d00dc41d6f90f7369f2c5898e5a5741209d7213d0d381221630714337", "15b35f05dab0e5e2a9e34d892d9e2849734efff09b67cacd163cc0b268a67f51", "025390d01602c67256c38b06b16393b44c3a60638b3596faee2f21e4990b6ed6"), ("0d8d8154671e21c57e054af3fd14b3c377034326f578d07b09df45566d9e9afd", "1fc17744e77eeccde0d71df6852370cc2249cd53ca39f636a597057f9c3c6a82", "1967fd6b3dba2105b2f6c76de1d6a87db775fbc5a8336c45f92e7f38a6af0ced", "150d49e28fe971d1b8b6509648934a1d51a095f46e37b70410bfe4c89184c538"), ("041020e6341d004aa116e30c3f65cbc6a27348a7434bb6b4fa8def6d225a3e19", "2557c43b8a2acaf7915dc6c040c752863a7752b99e8530465daee7690394d957", "191e4687755ca76db326010dee475313733816e5c0f3405ffdf29a0e5f039825", "2d1671d042e0af7f24276555673af5266dd05455f027342e03d04e77102a8132"), ("08116260f5550e5e399b5eab072d668e49a18c4e49c248f69bfbfedd30833039", "13da24cd73a2fb3bfac4624c7f285998c7afc4bbaa3102b485b47ab10a6b16bd", "1b781d3bd23b317376d8504dda598a758febc5d56ae95820d88b0aece62c60ab", "00dba0bb53ff493fea88b507d8d090d22f2cd678e5b14f924754b6849b2340f0"), ("169705818de7dce0e5bf47b0873e7191ea8326f1834afbee074a33dfdaaa970a", "25f43512b818452235f81eea2c168d814bb486c5bfb0caf071ac5b433d11bbd2", "17e9efb4e8ac319abe2fdec93f3cb1d1b63fe12673430813f8314bf9de508b7f", "2307102d8dfc19e291afc09455b9f032157818e5dc3a534710087ae05b9af470"), ("1bd201434a9cf2874db64aec41ad6a2bc962a5b0fd2ac847c39bb49a5f496a18", "0196a7055d3f486ac53c5d9aaf849e0f28a7f796411dc3333aea24637651b127", "0590ba6c54060655ae87823249f15436ce38997398bad1d2bdc18135e09ae16e", "28bd28a64738738231e6b3cd0b5f684024b91425d1ae0cf1ad76e78be6c7ad7d"), ("1afe41f6bd3067628a7323db2dd75dbeb51130ee28d92a9a6503c75675304fb4", "1f44a19c684a3454d896465d553f3ac2a3865cf2c171690fb30dcdbbdfb1422c", "08cb2af524e40c56540f3e146c2a0c6089b3d2b3899bf97a79f857f121dd9ea9", "00dda907440a53dd181a68e62af7f96ee31c36132fa0f0c1d751dd81897f1e84"), ("280619d128cf01fc5ce4195c5f75d6917f9716dcbf13ebfae6f546265d93c05a", "2f238b592ecbfbbf6fc70bf20d516225911298af8f842460f1927cc8d352d1cf", "0b57a0170caf33e9b7dcf0e117bc61d6e69a55bb6c351678904ce98a101e591f", "22733a8b2ea61bb795bf02192afc2adfbde908741648edd4f5406e21786da03d"), ("0b6f3f58ae0d2e2d634aa1667fdb88d6dad2806b593b8e165bbd00cb504bddcc", "26b84025164684720a61ba5780cdd376368e0d2e873b00d077622250599b1963", "038e98c1371f419fbc138a31357f1095f341b74236188a28862a821731af94ae", "27acea390c3403807a09567d8577974978006145b4f7a4b852cdd1cf3181acec"), ("2fab9547d45f5149893280d3010bc4ac878c0ef6c0094da8cd178561d78f5f5f", "0ac5cab5114311fc713374478750e6ad3fcc25e4edd1d4513e9a39f05dc24254", "2fe1074e0eacb116cd53ed7d150e16606e226bb421952662f1f52bba31a55a18", "10f00d18fda99e8b2058e043a79dd5a81b73fe82b1d59f428d1056e9528e44d1"), ("113ecead4422e0c14d10fb2740aea13046f7066c74f4c20627009eba1088ce80", "21a887dfd38d13c2b211af077b6c302e32d265c59f84df239e4e3a8ed41dcabb", "2c383573233e87b6c0935a3d567df2ac0016298ea6fbad25f7a570cdc74fddc6", "0c3452304451e23da15dc91c67fe44d6e7ca9a9dc04defdbdddd46277c7aa968"), ("01962b667e13a0263e66230074392e51cd718b48ec51405381050ec6ad16f5b6", "174ee807c59567d58eec9b88b5939f8068cbaeb8f7734d57e14c3afe120f6091", "1b4e6b5debd9eb4e7c6f2c91cdbb6fe1a634412fb9562dba18e7fdf2da1af363", "14c5a0030957499ac7bb567df0da79ffdf3ee23006a9fd088b00e8eb169c44a7"), ("1480c5bf7b360e3064b2f55b77f90cbf28777d0141ea97a8c3a3eb2e5d8b93c0", "271e3f0159b15326a57efadae01eda73224f723728d934726e8edd175f7c464e", "20443c42ade757ff5e814e2de74c974cb19960b0c10de3bdef6443633311239c", "2801d1aeec67bfc1d60370186eb868f8b5925828f1897655944b1ac78e6fbaf1"), ("0455c554d8ed28a5252302491d4e37a9d57e52492de2d4b0c6d5f9ed89356de8", "2c0f8716c0b73f06346068b07483c49b6bd6486ac385a81464d36a67342fa797", "00a986790f1f80df32bd1230fad2ea6689d13df80a7fc6c0aed0641803b24e4b", "1ef10148caf7dbb98fec64242ce704e3b88b8a4b054a7da08caccbfbca2e2799"), ("18cb7c84da21f41899ed403729a4448346c3933081cb2a82cb3f54cf6ea56e15", "0a20269f60d18d121f0e7c890a8cf6828bac0289f9043b042363cfaea0eda834", "23b0d9971f11a5d7d09532c8388a06134ad48f72149f200af87b1ef661391570", "246690fd1d3f04a0335c4a1a25ec051ec0bb957ac6b9742bfc3805751d7afa53"), ("1398c87657d816a7175ea2774e8b76874100674b7991e9328e8f89186b55e8c6", "2130a3de59d4f140d3cc5f4eee2104921300a741f57a0956f43f4d82d2f939f7", "0be4bc26af1200cd706c866019dcbd278035cb2ef422049f05810b250b28bcb0", "26d1b4b853faa7156a4ede72641e8076837f4ac251eb04b8308caf430f876d9a"), ("2670279a07c9b04384f49b7a6dda0cf847f83098806a2b948746dcb613832ade", "049aab3c69265233d003000b372eac1e7bdf7fa7aa0286d0377d8dd1ba8cdafd", "2b6903848a778d61b9b65279892dd0ae7c11bc79a971fda70997bde3fb507eb0", "21c66b1190f5b1cdbbe18aeeb963af84d003b44acc046cbbe54d42ee3799d798"), ("13e79c8b9b73e05349d99915cd8517582a77262fbedb92542f38a0e955dfe6c8", "13de57179109466172e15c8cb14788046aaf0e68b63508d236985c248c500691", "20369bfb694398f5ae881776137e20a76338cfe516626455b2f5681954b60d43", "0d0e91783a2faf4e82542015637cb112b46954159f4c3dda07f75a056a0eff15"), ("1a0e4c5987b525493c6f770e92d4ba2238d836127f7aaffc2e10536e7a7d8c8e", "16998484e3000efafe7f1f68e7db6bfcc58243e205a20a57bde8e3f4e63f5a60", "070415b134c4d5b8e3000aaea9d15cbdff87ea132e76a4d299eb66a884f159b8", "0a2511c66bc9c5ec4e27bf36de41b441085534d5d845bcbca05baa27b1c42677"), ("11d8ed7d5273e04b04fe1cd6e981e5cc2c4e42a243fcfa6d1e3ee92b9bf50327", "2cf240f4e8ebccd90b984c0c38cf7c7040540e548c29d92c724f4ba99bf4617a", "0afdbb48fc093c2795c38b50c58b288201c1918be0eb94165381208233159ea2", "2ce5c2a88f7889bd10d68fc6e63997fac35ca075c45e5a4666825fc138d4601d"), ("2b22ad6562cce5a3cdad64604fbb91c3ceb8478546de33089e4f8906b649c715", "243bf8c8692b778f13662aec821c28ff42c04f312290185d032ff4e2a73f53e1", "12651178ce567467be5f735e913cec55fa9796c8cec72826a59b86c0ba32300e", "1a36bcf0585b15be6c05e75ef99f5b3c47ee46e5a4da0ad56089804123c6f0a7"), ("151b5c0d3e470f5d49ea6ef6e3aee624a2abcc37ec4b0e5d73a06db0f2c1cafb", "2798ada073aec281495ab3e02cce0309a931b0f8040abedff52be035849a9bae", "28750aad185c46c8515bd5d771331faccf0f5550d44a59771f67c971d3d4356e", "076dd3a5b790719689ba51e53d4cc7d3758c28b218961f86aed424e0e889513d"), ("091bb35cec1fd3a2b9df61a55948a225d12286a6388665c4774ed6ba780a323b", "2a894b671e6e722ad8bf077e188ae57424ac25f6a70ed572047040b418dcbb07", "1cdf28d2429f43d7ca6de3806aee97cf9484f52203a6f872018198ee37da7ffb", "18da90ef2083a81160818bdb90dec377e2213a7e1bf81f2f1274c0fb71d8b676"), ("0c8fb657e3efc22e5430ec02f9846945acf57b0205361e2746f4c4fd12317c06", "15da72367f1e268a5f52829df74eb97053e3139abd6debd4068b06a3a0ea8d72", "27ad97d4a4bc9b05a7c3f08f821eb9120152bf4d0c187c237f7a3eb203a5b986", "0a18c40a09330cf274ffb4c1135abc42e739e34e6785e865ff2403c4ed1e3d37"), ("15f28bf16f2ba82c369b105073a2daa291f5e8b58df1d2698ab9f4ad43932b66", "302f38e42a57a5ad54f19ac1dad69ef63bb07a7f01f790a581b7be7304574d02", "0d2c7ee2831b9a5d509fcdf520e875f7713f37c2c07f080f850e0a7806966b09", "08a607e22ad18a0479ca88b08d838bc7da3d0d7891cdc671d1d920225cef6f71"), ("10af44a5ddc9e82e6310d49afc9069340592a73bb57e8d51ca5ff0f4e63e65d8", "143d978ca93ac5524824421cbdc8e762ad8c715f9901e213c9abb889d569ba50", "0852c17e505d55ed6b5e307c3573951b060d45a4508b8c8bc0eb780eb661db04", "2df6ecb06b831a00c7d2f9fa07031e5c745e62db035e8226a1f961db5f243ad2"), ("025cc242973e1db3e24523f3ba0670ba958cb3c65a77d4d736b8055843b06e06", "15693b6f3c6ee1f7f893338ed2aa0c59d64caf543fc19cec38aeb2dde02a60bd", "017b0d06c732bba5d1eb5c27cf6e12e264766bd98340d78980b457459a012b62", "22de13520e028f3f8676b30ffe84b9de2e7d5e153631331045d0b84eeeea0ab2"), ("133d4c3718185a7049f26966ff608e92a4db4052bc9264900b16cb92eb8f63ae", "23c57f99ac7d386608ad915cf71edd9c9fda707e89ec21eaa3f76dc17e847e25", "079c7d96fa7184733c5b3ba0f3a6119c9d587551bb50ec6c523476cc477614c9", "07627494ed3787a1a42e2d5d7be5fb6670d75c2f2b68e8c8f24633a3a5bbb161"), ("124db1b92c9f30450e61d475c594ea2011fe651899e19e550b5cccd818fd28ab", "23169f8bdf096874716bc74f0b14ef4c9e31a3d8edf00f5eeda56baa768874bb", "232637aec6b09b0e3b25f22bdb985332f9afa7f936a4f0b12743934d6f88e85d", "18781236fd3847dddf0864ca08e7bea18a2891d91943bc3eeb67691db98133ed"), ("2f4b301e8e28ca73da42e4380f95a6069afc4ec5b5f6424df6fa39a2875411bd", "20d9189ff11160017f055b7e502c821c75f074cf017ed70e58af85adaee28262", "1854ce7176966b7d078e651bffcb174751bd4a5a9046ca95f02f4e501f2952ea", "07b593d18f6c78264e31e89510fa5899ee172bce47f78ff33fe8b16a209a1ae1"), ("0e53eee7267fe0e57298808d2e883769de89900b5ef105d12406ffbfc000ea59", "0502b8db1747348fbb4bb3050eba8c1a9a35b89f2c7745da245d98a959315ce1", "0bb035b7df995087465cdcdb3b73a90aaa9834b4d52630c3696b763a24829499", "15e3495c9cf68a32e337f8b38c86af0677f32a566a524c50519ded1ad52092e5"), ("2f15c01a9632eecbb8cf01c6964ce75c9ad354030b73b0d12361c20bd8da06e8", "2b3766c2364e09d62c9e6ea78abd9f743d30884de13d07f743f812b2fb032a37", "235994b8989e3d64038b43685af00ee89f3f3305fa874a823a3453a72684045c", "2bbbf5baff0d034d0108892c65ae5aed15c47d14b2b92cd9d281fd4d08277f41"), ("2aad68900435c43b09001692a4b5fba3e0d972992d9446a5f15f608b7643da29", "22eee764f29cf2c34fd75f80f68be9c23aaa5e61bee5d6cb7691e075d81fb071", "276ed75b080184d42438d1bba58363a9c32fdb0ec836906e348580b643c8e429", "154a9f2d7182fa4e86a8495fc2fb1058b80fc327eb30b6ca9be730ff1f555ec3"), ("148db39aa2db93250c110cb75966f43cd5c308cfdea5ed5b2bb4c4d77b2af221", "020e38dcfcac49731dc12aa8a79a49938520e791697b6c5bba0e7888195266c0", "256a665bd0cdeb36fa11f93d63537730a013bc594ff83dde3fd20b0dddd0b200", "03ad3b3e985a213c211a40a19441a6da2955d35e7d3adf3a4d6dbbbc3f761d59"), ("256bac9f45ecefc6caa97a1dc2dfbaf40eacf2feacb802772be15bb56fc802f6", "213bf7244e0fd15536210be4e43f0eb14c6a7a9bbe741f29e142b848f6521b01", "280ec723a4804c3459dcb305703acf8dd338d22fc85529ddf12a275d899d63c0", "24208b6860854ded5bd7001650a575a2262764c71d2ab44309fc88fca01cff8a"), ("1e0c75892d78c322ecbd721e12a0635969e4053497b70489136f90e2a2640f1e", "139dc5fb814a65ff7df22ae211263bd0c883fdcaaaa376d9d2868959c63b0d17", "0357240c12f20928ae6af9a81e9d7535a8b3473e285d533d931915ffb8683f69", "040fe15f56a6408389cf5e55f87836bd839b39802b9dbcc5f9ced122f5ba886a"), ("2b33232efe6f2ee400850226c70b3513f06a38e0d8f94ec7053d1b3c12570e53", "0e57239d881edbe0161c2eeabce54971f84978a345ddcd56eaa72ab3bacabf18", "21c102836a8e03779b82b8fa6415f518ff054ea4db8f051f8ffda2fb48192722", "09921e8d3a88eb77b86972e382d9e7585ae4fb5d8c475a3d2aeac28b7f6a7291"), ("2ff278b5ca3bab39fd516f30c98a15043e777a405c6b2d2462408bac4f722af0", "0244d4fed2e7144ae56026970738d6e34802fedfe65005d19fe52f5575676e84", "1e5c49d49b5a35017c1507a5995a72805a50d21f5fdc263e740f9ec5caed37d9", "107539f94da83a48988f887956f54db1da55d61026802b3dc821424d88e0767c"), ("17e6bf3a8f15ce7141b3d4252f38c0adabef8578078736e7ea2d5e257fd42f72", "0d8edd15f50547864a8aa8a0ae8bf12d74a523e7362f35d0615f002fd3c5b9d9", "0786e58e50e20cb0a4da42533bdfb6e824b6d58a1dba911d38a6467e76e0439c", "02830c81d3528cb93d3ba202ab7bec807fb07a2bf5b8b038a8fe484f30fe8ad6"), ("02cedecf0e1c3cee9f74485fa3754797001ac3042228bb0cdc5df5e90d191cf2", "19e96ca2d49d1eaa2b6eb6342e02e3806676fba7b0db59244ef5d473d6fb59ce", "0ce0b18b6f9214c572cc5e78a8a1eabc1cea01fd739e164bd8da3af96c0a32a3", "137fd67763ad517e913407d4ff612374cadf9ac9d729406b2d2160d107a7a734"), ("076b48bef83e2c9da5a3636d1701618b650a69ea368f8a316cc2886694884277", "224d4cc84359d740e36002dcf8daab80037e6faa30c1a33a4e8ab93e7d6f7a04", "0e18f520b2eb39abdf260cabccc2c449d11f82f8df19b2dbcfb7712c1a0b9b16", "0d6ca574b717b7909aebb68d86e369962557e0df9e956cd32011d1068940bbec"), ("1428adffae6f5f281f38401348c3a44c87f49e8bd3c38bf4b00c25f5743d5e26", "006faf81e4a7b41265cb9f4fa5ecdd93be2e9437ecbe22b6f7ee652175332837", "07e56a5bcb58626548d9d539d8e94d0254e605509dbbaf1e90e8c92c18c38a6b", "23e91df173f17dcd8c1bc064e477f7ef9da405cffe5156019fb9ca1f862ab86c"), ("189316ec39a62a880558ea540422a2c964c215813291de464e6f00748b8e585d", "1125c38d49498a27d213ee3614691ad733eea1d3fb1e787d09d465160f17f030", "0487d7c1c73b6755f1fc87659ff9ac841e1c0189ade1ffcb580d609125b00e0b", "085329c321130f64eb0fd2118c7970327e480d8c66ddb078b4d18b52c3807073"), ("1e76320591dc6292513b4f47ddb52c9f3310769b7eaea7ec72b1d7ca3327cc4e", "123819db62aebdd0c498ffb505a167c4beafc1a3ea3ac2b99fa97e0f2961df53", "145d0ebfd4119b75d5d9e4df9d9916a8f9d6e1b41d4eac60b59b7b25dc56c8ac", "236030066fb77258b8967ac5db9d9da6ba7786b49377809045aa1419439588ea"), ("130f8af051f1bbf6cc2a69b6a41b50e463ddcaf444344133598a48c004cfad70", "0510311bc059d7c3295b8a68fbe9eb174a4fdf6ea5c434297989d2501d08c4aa", "2a997da4f683840628988884cc35b5cd7c9e7d7fda5067540a298ce9f28fa637", "2bab5fc652ffd53b85b12a9a3d860ae8300b9ee896c4fe761bbb5732e72785ce"), ("18420de86015281550b528437e4d003d67ea388196fad4a9c65d1018071feeb3", "0514886b6b20dc8c4850671a4f8f370c3fc3bb0c6e050a0612daa032c34e4518", "1e53e3cf10cc2b2421148de887a374ec11476132cb2132dd88fc6d38ccebe6a0", "2988d1bc86cdf54ce56841abdccadf15ed1f1e40785ffa5da775aab7c911a496"), ("16cdcb4fb0eb32ecb117d3b3a204ad1efde72321a42bc1f06317f5c11c5687e1", "23893f760a250094e861e58d45a946fb1b287af66ef8d82c761a5015f9353842", "269bc377512531703d99ac8c6ff0372d12792b1a1bf188d220f68fd7796073da", "0ef3789c0fca3a35f48b1fb9189ac3df54e359a583bcad40e683d482974acf51"), ("25341e7be72abc8696ed829da97c2aa45b09de7b710ade5f47075d46fc8ebb0b", "290886ae95b435d20be3627f5476ebb03915e4c06b871665d57c30bce77134df", "0af241b1a59d6344fd40c7d9dd0f79b55e598a49ff78cb494b11540d5563f334", "077c7eb4cf5eefc67f86df633593434e5fef8060cae14c0b906d0fe765893b71"), ("224c50180b5cb67297efeeba387fb2361c7c511c37f82ffe5cfa08e4fd82b431", "0e60d387c7fd8d51b3dc983ec25d11c08c56ac6fd4bb0512d383cda877225958", "1083e4022c9070e6067eeb6c7814a475139526733eb7da845d81de97fb29363d", "080a3c1b7fe39ce5804a838908b1e2d1e7e70ccd3244157f482eb601f712a304"), ("125da6424b523c44e7088d99db135378bfee0beea9b3d9c3c49f9003ed079a39", "02908f186110f5b4c5e25bed2d32e0bdf7b78af009678bd20f5b063503b21723", "184d564dbd14b365be352494c29f94966c4111334e4fdcf650b1be9dd37592a4", "268f6fdfcf9b6892b76d0474033a16d5783fc925a6ff950897414b953e668497"), ("1a57dd627ce3d9acb813beefecb2c61293ea8d34a5eccce215d06e2cc5a7f999", "28a0ce51ac51312fcb9bf98d59808c0fc699b99ef6f88d5f22adabf5c017211d", "1c0c200787b4e5512c74a326d2755b1b91abb4301d4d9d7c0ebb7096fc3418f2", "0881f65516f8a49c4494fc525f5c2de17ff2de95f75ab8a13721fd771d10b5e8"), ("2415603eb24abe4d4f2a46303872b31d54c2824a46cd36799d07f6fb3f879675", "06e5703817c1967999e42006d9041c43ad2176360622fd79cc2d3d99654a6be8", "13c976616ad17eec59a39ee3c72cafbed036ad1f897563f271bdfc5a96b91168", "193a262d3f9fd4a57bf54d89cc4b28aa2adacc7af35decc11e9a0a877bfb0b28"), ("1a165f86424ff342e9b0ed872555a7b0f7d380abcf600ce42ce84cea1d224f17", "052f04dd8a7df4d93becff20b6733582cebedda1d401a46f36db862769232a23", "11ec2814dfae825d2ac86689b8a4fb90116f2fa1671ffef5cf348d2a915fd3fa", "243d4e8c2eb1d4d1ad0b903d5cad22e1abbd52cf7455335225efe49dfa7e733a"), ("14e1c7b07584bf9e5c1b7cbe65820e99b7ecba0574ae7e25d1f7f3e08a431885", "081f827186b6a3ff309d063f77275d266d6c461eb7d9dcdcb65c9831405746cf", "104fe5e721f108745781c74b467fd4b2110bf8c08ff77d2de5b92298c020050b", "235928a1c74f1bc7fbdf5364a2542bf474b97760f90e3e9f53df539bfd1d3a39"), ("2c9cafbc9b66261ea97c0fdf27561a8738a71bcd40c1e07931f05375c7284c66", "148362adbc8f05e550e4ff3f235aa967874d7df56861af176a58035e04b84f2f", "1b4e3f36196a97914a03cf7b6144a462d4a07a270f524cd7bcaa3c0f323c59f7", "27afdfeb6b10e773a536eac74a5aefcb918fb50934b99ece438dc423e50d3753"), ("226fb703155b7bf294a1784e77ab81b364448956de657944d33af7be9dfca633", "0b5e29359fcf1c7909b39915b5e5fdb54146138b90af98b82f55577176ed7ff1", "125dca43fcfb1b5065028dededf22beb847fbef0430f119e08ad2722c803f0d8", "1d08406056f2e758f0fe6199313ccbcea741d1e56459379045c11aadbbf5f296"), ("20d3d086ffb8fe33e8eb26bdf78e2993505f793881a006146dda044ec719898d", "0592598d0b85c96780c4a4cbad6a321048b0fce35b9019e7f8c677dc78fd6f75", "064b6614eabb7ebe80c2c585f01d757d21bbc8f15bd9051933ae177e9cf8af4c", "0226416c6c281b7344ca3ec6c267d790c4f1cc573672fbd2ab88abd75198fe2f"), ("2a1a25f4334f2f26062f145c76199f310dc9f54de3c1d26d1d6f818860800d52", "1b8adaaf107d7689b111845dfc4b8092fdd4c6497de77cf37d4be6e9b85c1940", "286a6fcbef1708b56b2c80e53f8ddc8a4c873e1c281bd4349f7d959ed97c3666", "09e5f1bca5cb9ee42cc201c718bdf46e8ccb66c75f98ae6542003687aabc87bd"), ("08a8cbefeb37b77eb22919e1c02d1b035acca1e2c165c3ff21f21b838bcdee05", "16b0151d3787c4b0d82160e4ef76aa9624064e91a99679402fba1ecdd3d83b44", "008c255391504d6fd5e2aaeec2d8c66f2bf6b09cb322b8dc9fa16f354835f753", "03910ebe0992a212f472fb1949623d48ace4a70821c20054a1243847a8bcd258"), ("02eb5417764c93ceec0c05877cb8b1ad0d39daaddcfefef046b4381bf31b126b", "18d7e10c760c5cb8ffd56dd7a025155fa5599d9f6b316cc51a77059430cc41fa", "2bd6bb51c1dd47a3f9e68eff8ba294ab1fea39b4e803e33d3b1201f23d5f3150", "095762b6071befedd176b77b874e2d42106d80fe7b30b66a352a36ab30af8369"), ("2998d5410a38a50f42f0a7d4bf8ce0c41d94bc1563577868ecd47e8bdea41780", "047c8c9e58a8332fd8b5d87fb02771460cc326cf53e59ff3d4e066569a2b9851", "2df53c3a594cb6041b74d50ab5e10d12139fc490b069193fd02f4680e28da7b6", "1334257453b43ea5b7f25cc20f54ec12955663695acdfb0d535c879ee851c73f"), ("1abd9f0a120e9dc32c202585d7eab88ec2c6c491674a145b48232fbdb8fff9a2", "10fb56970f5fbb0d72f01d78209a989e7212a8cde153a49906de4fc5c01ba0dc", "12995f8de2c4b60e050e6197d81776d1626025ae93d3cb3c58c6c1b95433df8f", "0fa68135410c6bdcf0ebd6056647bc6ef31048d5a1302e80f460537cf2f8c6ff"), ("00e372383860e985755d39761e690cd8ce683d3de9ecb17cdf970f3a6b029549", "21235c90d44d0907a768782b2647f49841f50c6379d4c26c00bc1c59d5fdcda5", "0844fd53104179468014ac9300dd6eb5adafca55416a076fb9572b13dfeac6fa", "29b13ef5bb9a5ed44527a2339d7de7c8fd6b57a9c0ca5e54650cb78aa34f593b"), ("2eafa1a24646d67e856a1978e62c22922b7420987610b5b6f196851860674386", "1b98e5938647dad28d823e9fb11abff793d03959c3b251986b999804deb29bae", "01addefdc2d96b990e4a5428efe1da234c1bb6efabee8526221adc8a5996f9bc", "26e31e00ebe6651390eaca3c7a1bc6d75ed9d238602cc6453fdf80d78a47799d"), ("1b80ae5ccebe8c2563c1a7f52110f3f4cb4bfa6de6d25693c1f4735f328b698f", "1befd514ae66657313c1bde454b96bcfc4123736e9f78d9c96be5c5b810dbbfb", "232ca07a1adcaa05799ed39cdaa410935b9c98818cf493d5f9e873287afe3739", "085db4b0ae179b962a100abd852ffef4c78d137c78e44d7fed5efb2f1cb977df"), ("102ea230f0f25a4ba072e51c165023a1a20dacda652bcd91e74c681e3475065a", "17b69601a598f1ede303d591085b7242b0d9a88ed33b6707e1727843bf5b3048", "25df037628b714be715374eda00683ea4722858cd085450e5222600310397ba8", "2f2ecc98f5d53adf5dca06a481f92d19167478c75ac1d729f84b3552e4c6aeb1"), ("240827712cf4be52c2ae020e81a6480c584b4c276056d97a4991bfb4d66445de", "02f5128f9b30645c1ff5b5a23c442d788df84f046a1d05f24eff2d6c99cc3168", "18cfdc705a4bd82780e54c3cae54a513334e6d99878908c38247e451bc982577", "2be83a29beca67023fb01027ddbe1f82974df5fefaf466489be12c3a743635b7"), ("0d67b82c8c41db2d657fd9dd1e0f5b66aebd76aab13d01430237087f0badae63", "109e8bfd2d1e93678351255a04b96c1133215c12e2a7c706be0da8313b2adb5f", "14c7eca5fd2e8076f3e073ca5dad5b73fbbe845ba5632e3b26789265fcd457e4", "02b88535ca674abfcaa8ebea1c12e97553037c11896edd885b888891692a7b9b"), ("127b38034ef5bae63d21352f37f342d94bc0f75faf588f15e64681d1af9b103e", "1b7b36ca0f3597b62b094d0e530c1a7bd8ed6db3213d5762b0ff7492aa18245f", "131d0c929408a0bd51660dc319281e0d7f68b0e35fb0deffb62cd92a31576d23", "154ab3d3991a8b6b0336b4d4812d848501cd1cd48c63a0a8c5e964780f9b1b8c"), ("0183e4444bba4e718ac6f8acda8d6b9841237fe300269c8f081873d0e827f8fb", "22225af0217617d50863f28e262bc544d16243e0832374ac02ce9ff822f2ebf8", "144cbcb01a71413147e3bfc09b6b63e4a294418edb9ea0ebbb7352fa4aa33a4b", "2357694fe697c9d5fa82e7ffd22d958eb1a3f4df7b049c4723697e951b77346e"), ("2a2de916e5a8ca18118c1194ed2a65b6b123e0c88e36f6db676d3c5e0764180b", "051071229c3991f8ee464d0b5812ea3dcc461035dbc5f4e1d1f2aca6add4c1db", "1c01d0ffe12271b9c94d69aa7703968a67714105dd672994b0f6c68b4417bab2", "0971492f5381b1629fd77f18cdc27575ec20ec0db30c3161ec072ca94e278847"), ("04d8b8a692c7233dd136264cad5b6af43f545f1381c458913d520a53874d25bd", "21462e7fa4f500bc5cbcf4d57f56c487138a757b0c25b58af7f597a233a6b790", "0a68acb8251f805d7f868f1b2d7cd46686209b5740525ce1928d9dd825a86fd5", "10e92e8868fe414d71397d3e65aae9968d090a1c0e03995a40a524b27ac7986f"), ("0360f10ffd4751838d985ff72bd327fcd9348b190d5b727524249cd68d00deea", "2b76cee7da3dbbf5c1c967f8313f4ef954a99001699511edbf2c665138457b78", "1c97ea43e3bb6268b3dbcb7593e76b768671f9fcb991bb372f5e24c98d0d89dc", "29667dde3ca3d14ae496ff074faea869ad8e2abcedb3edab2b66637499aadd0b"), ("147157240a896293d1c72968171377a1b933dbbfebbc6d3e348978fc9f8d7df1", "1e41f1d82d6e07556426ead873a4d7b0a780ff86c1f965e860129fc2d8a2e778", "1b460b6790dd9155459fa426d065622fdc1552c6377d929817705897e1ef008d", "291d35dc689088d1e8763e2ce2dd56171290e5645b4ed717ebc8b2a1b1517ca2"), ("01950d622e46e7cd8c6ded79346a07c260683bcedacf5920ef9da90b319e72dd", "11ad99123b878c9d33a5fbe28044073ba8545c22d4091511c4bf9cec237cc280", "0ac2724a67b884b80dafe13ea25634aa471f19cd8c1a175421ff585c6d29bc8e", "2072c95a7780d5f7ae487e06aba272a47883afede451d4bf0483fb20d3dec529"), ("142293087768e9baeaf4a9ac4de09b56c348de13133f008593cb5bd6546b4a4a", "16829133c4b6ed261291ca1a1a5f7bfc69818e8c46ed231e8d4b74c5f2ca8b76", "0828a9d3cb24894528163bab8e6b86dfe9894834b67dec9cde68c54a66953948", "046394eedbe3e1ce3bc7f6ea8fa8105dcdbff9916ed6cbc01a075b46d352a81f"), ("1c9e9c6679a8b320b744c79c40915657413e2d043378152b09f1f01f563bce90", "2865ffb6ecc521bab31b4329ab2de3448c2662efef3141b2f28bb711f465f141", "2c9700c0e28bd89a4667bba127b69dc0d9ef41735d8671e0282f2a8c6246b3ae", "183646c94881a2dd013d0861022e9983481ac97511380145bc2aba74e3cc7bdb"), ("10e308e801e30c712df9a730b39827dff02107e34e3aaf0961abb03cb2588441", "0d4265ac20d973f1f5724ae280d1064f892abdd9ca1112d2ac5048ea2764b1db", "2341882426b4681ccecd718489c9aceb6f6a8283d87297e645a5aa0db98d129c", "2377b29d5288703e0693ff1ea442dbc06146ef26831a60119ada47d1e98c2567"), ("2771fb590c41b546a80d1b9e365b072cdf7f814192fe8b29792a1bd8bcb36cf0", "28d63f00beb74bf5e59eb2aa1fd11ba5356581b37eaa2b88350d03b761e88913", "217402136cec7e2eb51eeabbbbbe3d78871a45432a9e0fba2c0302645e88f434", "29516ae44eac5c25dc3ed97078fdcd81cb09cfb04078b7ab1ab18b80f6bc9561"), ("0dd5aedbb4d66ff75db5f84bf512e236ddc183c5a132d099b821d33eefc7b3f4", "197d1bc7883665332033b020f738ed085b44cf8d8d1f6a1226629a42bcd10946", "2517b910ebd3eb84535e665c5fc1a8f413893624c297f4c2703c27fe49dacea2", "22e3c450e798dcc6d44da4c8c9b2b4efca9fbfed0b36d13f020f6bc76a37faf5"), ("22bfa1b251071197cf9e16e0b11fc374d8e08575c942398347f52d19b8e57d95", "0518befc2da4ad2ff1892fadc018f520bb4ec9a57dd47f5e8e64de739ab7039c", "14ad697b7a45d7dbaa7a5c9973fe019f2beb7b5c9d504911df9fd736663de1ee", "0d51d34d70bcb39e4f4640bd0dfd7193aab2fdb7e6d7ea1135038119b679ea67"), ("1df00544cd3dd70fff1ccc1e3f4d9fbe1c25395dceec20bddc59f5bb6cad05bb", "0673c5f3ff58fc17bed6130590dbc5021b43bce47e87c8af95a39c69e299f582", "2c986ff1621dfe18ae504712e623377d428b6218bea12c8a859a100263c6e96f", "1c4d3cee4c508aca4e91f8e92ee9a8b0e93de7e0827ef612146baa6df3de0f84"), ("1a0d329a05e5f1b8249addcef03ed2db0cac65dec342a83d69f0bb788089a04f", "194b9088f0cd6f8f91f435fce46a5a4310b05ec47a2a0ba4ce41239d4cbbd21f", "2599a47189d94d0e54fe4f3ed4c4ab4abe7b901fcf13aa675c572f9385b4cbcb", "1ee0a8864501c09382fd9bd6e5f3c628cb1bc404d9d268550353e6ae02ae5c1d"), ("02d132947ab2e6cfa59fb652304d21a75d7050e712207a427bfdb1d38f665f4d", "16d928daef5c12a3b953f29bd2c5d149505dda73acb58893c238bebab0b83d26", "2331f4ea9d4b9ea4ac15bd0feb4b772d32494e1371e7eff0cf1f3fb552be6e02", "13495e5808dcc47869fd4d6087286040744bd4e36728299ffa554f3fd17576d5"), ("2f6c511b483fe39c17d69684fee8c1d9f8f0919c80b8bbc1dfbd3ea902f9d8d1", "0728a2ee07aa65ae3655825e6dcd523b14950d96251ec313665f5aba2d451f81", "272d4235ec4a3a78a602b57aa962a1c2084bd2bca87824a81eb750b9131a8077", "208c3cee60b6b6ae1dcaadf38f3c939a058bb6a08874f62caef6aadb4ed95b93"), ("1b7c1cd97b37455012913a9576f24ce2bed2fb59f6adb858b4982d41e3369d65", "242ca33b033aeaacba04ac4a8a0169ad64a12ab36256c0132c96e53de9a9e05f", "0d3ca8e00200683c8c117a2f6b5685f4a20774f91e1d8f5a8e533468a1d86960", "14d44fa6d70e944c7a9a4e8b73ba65d6f3ccc0b6f990c5a8989b8d6351ccb149"), ("0e8ecc43b71a6afb61c84b74a630500f2bb1bc02087f16d08f65dc840a9fa70e", "0bb9ccc611b0c79a61d599061057b745603e6311fa0be430bc72925148b957f5", "2812aa5c4f0eda342e4cd313deb221feb3ba71adf96a800f32c5d4a8aa6a151e", "0ca49025c1a1febebaedcc8fea52b38a14e86c52cc6a366e5ee769707c7a7773"), ("0acc865a9097580e09b9acc7290066ea5c1301121632e2cb9ccd071a0fbdc45f", "2afa128399dace32fd202e7f8850799d9c406b910f124f89955b2faadaa9c829", "0a3dcab795a2a32d0e0ad15c3e41a547f7747434b37a106321ecd1457af90813", "1fab54647eaebe8ed2ff8f4edf8fc7aba0fe95bc89d51d4c525e25b8de81bc3c"), ("24b0b0ef97d933108d51e1ec985ad029b9b43f12cd2d3f638d3d91f9120e411e", "2a39d8f277442a9b1b7f999550df9fd494b6d7d121b87836dbb4b803a3e701af", "03a9e461457eb403cbcf795d8c7bd8c9fb7230d1c393c84f8ffc251c5b79d265", "1b99b2822d3e2d2e6e38e3d1ec0765cfab0c1893f01349549902a10c07d36dc6"), ("27cc49123937abadfc8f33fa8f2fe5598457a6e8854c9d756db6800422365836", "24ccc6b9242df4fe055664c14c9fc614be28bb92938ab2f91e3bed85b1ef39dc", "15260fb80029d448043d64bdd20a23ef530321be4e64dedde64a7a57cde37703", "16b66abf445b2f83aacbe5621b398fa3fbcd8bde202125af7257e2780f7472cc"), ("05cda9c626249cc1f56e3531de7d6ebb333a0368cf3d9de192855604c2ea5c94", "235e2991f2b36eb6e6a2d086634406a9257f5340e036676cf673fd00615ba8a9", "109607137bebbce5f2312e86ac2f2835dc8270ac5da6192a463bece16aeac109", "1b403299c188e200d25922049e37a09b4519f351d28a8798eeca074b19c7aa56"), ("10823044c9fbda62d5001bb27ea096deb1ebbd3c64b23b834885784bef1134e8", "15950992404283372e2ca97fe78c493eecb5dd23205e65a20cf090b93b2c995a", "1b08fa080a5dff65d6ac31ac7b5724c76ef2ee938091c271d5b824647a0a8e59", "04ba92c79c78ca59f18f0c3824db4949dfa24e841843de64d4af7603463f085a"), ("2093dfeef2c8ee2b5d11e43fff455df65189b5490712fe901152b26215de4175", "115166fde3738ee7ad677735666360d83591203f01bb59edbd991f089e0531bb", "12061ba3b32f59bed7bf6f5d5122bb350cd597ad5a405788462a3e0d81911508", "09858662116f0f4189fcdc5e4d03253ae7ac49b45b9eef518f57ab3e24a9d302"), ("04ddaf5f32678a9bbe361b21b8ec805c58193e60b59c904298e62c1e142f38a3", "1b744707f5cd058d3f7fa64283b6b82e61d2a89c974be6ac92bb84d0364bce7e", "0f03d2da640c4994c039b36b49f53416be4af3407d912e540971c39acd9698a6", "16cd97a615a5b8cd3cf331a3dbe01bf181676cceabfd2b2efdec2722940e2d03"), ("0d9afd05dbc30a7cbdb8c46476a4f8ed5140c37e373e4b7a2ab5a7465366b211", "1f8c69e948ab8b2c2d6c00a0072d201ee26d59c4bfca67a30456aa9398028de5", "0f42ef37c8e1d10f755aa096b97dea15f94f74ea8ebb57bb3d07330e4d4b71dd", "05f08edcef973032fa0f5368dcd8031755822d249773ab3a011fa56d4c745e84"), ("1e9743b0ca8d5fec3382089f9aee77d957fa8c191aa1f067f84658c1fae2e57a", "00631708c309101223bc395022595e6e512c0ed54aa7d0f64cd135682c789fab", "2dfa699bb602352b6625da85bef0ce9329a88d3f9ad9e5873190510fd1a04485", "2c57c5bf26dc31dfa8c36e42439a4c39a72f3123fc89513295d145d44c8aea77"), ("1d207ddece91c2213ea53af18256da1129c5e85c48fd3aeb5ce87606cda55a73", "1a514809c055ac70b0adcf75145a34ad9a802d85a1005863c179d1044c09abf8", "102c9c3dfafcb46fc95521384f638e521f51bdd15f81cad6e919db2795a48f71", "12657a4eca5d0d3b4ac818ad33812bc5decbfa3c6e11948facc25de67d110663"), ("2e8f3e1447c2f4f4cb889d8935f1d77a017b1038e9034e3cfb8663e9954d7101", "2bb8db65247699045758d14bf7ef3c24258ea80573b7285a7a5863c1abd8dc20", "113045bfa9da7d6fc021c4797c077ef90989399dc95d84bd3af940587363e44c", "19165fd78f4e39f17a2a35be6094d5e6012700c62ae8340689f71d3b264dc0a7"), ("1175a5f1baae3b0e08239afbde2d651054c7a67b662da5a13e7c0839b1b38d4f", "2c9549f097a7b979ffe757801880775105535a928df76012d59859364c67d060", "183f2dc980e47873235b6a0e8fc05baaa20ee12082e85be9ef7ebe6de2df0ba7", "1dcf19de0ea00c441617e3fefabbe1a2483c6c31131f6ca2a28426e308f16b7c"), ("202dbfcdf03e97f039c545985568508dd5e0f8de345f82efad9c47a14c67339d", "0221025742b723b29dec0d701b175088167905230b5dd1536dda52c38d88e5b0", "2dc6aca6f83fca45ab2615ea9be623d521cc7c9675d9e2b611d18530d523c1dd", "19ca98ed022a8ba56a3d0523c582b33be510e449c3df3212df3351258e4009ed"), ("2e33a34c7757a360ddcd3ca2dab705108ecbd09e0054cad1e05a28524794cb52", "2a852b9b819299cf36b66fcc6b16473dcada6682a6cca015b3f89511470e40e1", "007edbe59d6c9bcecb72b3366ec7d13fb20c97da55864da355b3604bb934820d", "293b83ada8256ebc222074bb7d578506da91cd12961f7f87838fc1d8209d8523"), ("26ee1564b68980cb2e2cab3b2b91714ec9f8007ba67e3113250ffaabc3fe2585", "235464b99db7e75d3fc9a922edac39ab08bbad28cb5ee4d9f273d4a6ff4e4484", "080f9b37aa5d804defa4677cdb721f9047c677f858e397a800216b550dcaae62", "19bd7a12b119918090113e5a0086f8b2f3d347a718e6592906cf73d5957092b4"), ("0288437cbfb6eb00ceac6e2bc22b9152fc3f960931c039ceee9a38ba1dd4be67", "2c8ea159516d70c32f60e40d8f894c3b81342139fe82fd6146fa3abc2dbc613a", "2c67f9e726cc5c872979707fe6782db9c81d4930fd5672c6c122b24d6b35f9b3", "285bdc506f737f2e46b96d03dfd0180fab788541080caa35f21c0c885afe6da7"), ("13c63009be9fcc665af60fe8bb2346c1ca463462edb6d37beca408000e66bac8", "104315e26b6271007d7106ed54e0a08f442cf02ac84dc08eae82d0ce50efde42", "14d078e1bc94da1e53f5aefb07fad3f23efa3623047637e3451f2ba8ff88bc88", "1e56b03d8072abd195d9ee8b422b70007d5e563fb317558cfa19bcd9c0ab1bf1"), ("0911c567356bc7de1e39181bd5ce967856fddaeb4fe919a9f7663ead5880a804", "0dde503aff94a52e52973a5bf6407e391b00a7a54cfb048e73733cfeb2fc64a2", "2c1928cd0db04b65abd247413c52ede2c5d4e9448cb65fb6b9b5ba349793ad48", "13809806f5281807675a92d725dabd1e73b11eb1c28ccec556f4df93ddeebf87"), ("1a5c96bd15e8e932dc2acf53c7b55d10ca2fbabef07ee209ae3ae5bf1249c464", "1384c1a8d6dbdeb0b695a6524662152bdabc7de8660709da5efe2edee0791878", "1bd6d9b17ae894a8169c2bd3c9f69d190b8ae2776628cf74a452174e9a6eeb9f", "14846b37292f306b3e846b2c24849c54f1721dcc8e291fe1637e9315ff21bddd"), ("152e5c9731a804e4d7bfe1104d38d349800bfacf4f7f321d038d04fe26ced1f1", "00ce55700e086b85ed28eca2de68f9a42c74fc3088d56bb790f41fa16bf0a2ea", "20db73d176f95eebc759ade93720ad342608734800e2e965346f6a0c5f0f79a6", "25fd5d141c47f667c7f1c5c94870b5d0349b006a54ffb0cfa63880418831b7f5"), ("0526c77461ad88f327ff92575dc4bcaa18360c0c9b965f8e3c14be391471b98e", "2b0c4b90f1f48ef8267fdd882a28e3536a78b01486043cf4a3d6d9635875ba8f", "2cc0965e57e5fffea404cc7a3afd9a6afdbaddb70682b0c72202da5a54ca0d84", "023b1fd5fd51bbc617b9edf2f49493b56d23c711ca58989aaf346cb2a42d8dfe"), ("066e5e7c9647e9a6431dc832c7b76e75cfe8b37dd0c252d824c4246d64685021", "23ed88976066f81f133e46042a05fc410dc2737802727aca4adafbfde478b194", "0f2ed3cbb0a265609c99010c6be4609421ea04676145236eea61e45f97604163", "095101fc203422a305487b9728a916015af7e8d4048eefa850c60ea8faf6c770"), ("2504ffecf5829eb920c1fc689fac5084249cf33a64ac2e959ac2cbae0bb32e12", "2ed4499bb9418a912a6cfb85fe8e346f81e86d39b263613d8d295e4817e37528", "03986e6deb7ea6dda0f1484996336e37e0fdd0a6b2552cf640ba5947c28e8f11", "00fb3134d2b91940fd2eda48b37139c24c47a124df20b29cf6eb84b23f3b1cc6"), ("2d516982c7eea3a95538a45b2e8365ed7eaed72a403382dbdd3799b95a889e54", "10c7bc842465e87226ee071a6c41eb97c7e6b22c47c35afa22e6e2818f536206", "1eb7f4e077f3f52bd9d0c3cc76c76b134e1702fe77dc01bd4e1f0a2251e1b3de", "08b14224fde56995dc6e2b660d84dc6805b384351f1c9a4247d75a18a2e4884d"), ("200ed69c3c2d62b1a702bb658c5cfdc7a891ef6f0103c249a856868ddf18ab87", "15892fc9383bc16daa5d3d4079f0edd50f062200012d03ae4158f8d44067e9d3", "20f0cc1be6ce3ec34ec883564a519949a5dfa2680fa07f2e14274f034fb5d54f", "1def0f135c18d6aeeaffdcadded037c4a4101a682c5d3d4aac41073c97912b6c"), ("0e3063358dd80a45e110a56f15c57b8a4556765f38f7f101372686274117b451", "209e4ee4c7ee8a5a9cffe940168009f035027f487215d4c5f92f50eb8fc2c7d1", "1a072e6e97e43a839c96699fc4cb54dfca26a071a9e2938e022f07b4d82d7bb7", "081ecc648d84290067b2bcdf241c09b7647cf0d600f297545a63d997da31dcc2"), ("2d2e1664f5f58b3baa0c36ee125a9c6d8e9a4a1ae79037ef9476d561f50f3344", "21cf355c1e36271bf22d72370308f2cc9048b783b43c84aea894ddafe34bead2", "2285574d3ebf4a7ebe4f83874f38b4ca10c6ab0ec8a7c5bb4e3a3c4bf6f05cce", "0f6b7febf64578490cb02e13e5139927a11dfc7fcbcaccc06cffb2d8ea498032"), ("265eb6c47968bbff24dcd85d1515c2d5c135733cc32b188834e2590dd9e39108", "09cae62a04926bb0ecab66360a11dbaf67798c78a8293b7415b20b9f0ac8e058", "2eecae476630de72752144f76d52c4b12d6cc67495ed6a16361500fd81753bf6", "16c5597046f121fb7cb67e09dedca38b7d2dfa02821175816c76dd90aea4dafc"), ("030b4654d92d7bafb01b472cf58aa5c6e3bab246ead7ee18a49e4fd0e8843417", "1c967bc4bf8b259db0f1410a87f1b4c5da16017b3445f79a40b1f4507a4d721a", "021deb1962361c20e5ec28e9a10b352e9e05d023e8533179866b33fb415a5318", "1815d5b80dc14a6d9c84fb84926d74369d119b59129419f19f2a744f506147ad"), ("1a33094fc2b7d0da10126e6b681aef4389c9eb100dd5c3de7a403a66b9fa054f", "147373d32a676fc73a0fec1edc08c25865721853744f30b6fb55401cef255f60", "02944b41442c42b753744d27e1bd4b979aebaa126a4db0e7d3733381f0971b3d", "1b3e09f0f13397cee3c3b498584f9998d665654d3b33dad80295a6324ee7e0bd"), ("0a1f1acd9082cd7492012396aeac90ea03704b43d43d2f61cb9ab03fdb9fdd1f", "13a795bd1ba76c5b1da0d0a05096a7297829dc03b039246dedab38b2133702fc", "019af8d179b7280f591f1976fef6a3cbdc2e671e271471c27d9bc46107a9a340", "1573102d62e3eaf1cb9da99aba411381917cee4ea569b0dd1a02250be2b98873"), ("2cbc6b239aaa0be08f0999c21685c822fcaef0d899b4f76b45c5ea1dbcbb6ac0", "1734619a21853395d1602380fdd5438f699055bac9e9f13519604a3cfa80d988", "0fd9b8f9b01c2144ecf3a69b63938eb7f88f63d6a38402d02a9a8409a3ce06db", "078fc5ebcdf540b616373b2ce34f3b6dafe0d02d98bbb62d53fdc16c306d8060"), ("16ce843432c6b947a54f7979242169f92bbf1b90db3aab3d578335ae92fd8725", "1226fdb965046ac1e707017d9d7a70bac3b04435c5c2b297b1923fbdb94ebc65", "1a07751546e7fcda7ca26d7603597ccf46578ce8475b1f71f0615441d40f0003", "0daf6e1e7c555f9ba2bc43f2394eafff4897f2156bd89e748e9981535caa340d"), ("222f63a8f765cd415696fcc24078bd1d0fe8bee7b660e6e3a52bef555dff6e38", "13844d7bbd242d713396c86fc49f765de19550411f0c35cd3ee430f6ca05a60f", "06ac3f306fc81c3f0c21bd15d9aff54753b1f5add46b7385a4d4274d31248088", "1cf595fd24d36ba0474f5151cb7459372d281cce0cd53b97effea357934fac3b"), ("2c4dcd40599441640bf7cc825fe82073d72ab01a4816ef2af2983a4541bf2bef", "07ec573054189f1e828f2c3faf682132bbba6c2b8951644f5535287eb3ca18b9", "24721c7c86b76570bf876ab6535a5bb605e07e72252826ab3cba0b8a007c2059", "25c53ee4000e427fb8d966781b13aea600c0037bc2bbcbd416ca6d1e669f5b78"), ("1ef6f8994d93863dc00f0bb54e4cd61fedf9c83c20e3679e8385bcaa07509733", "01a969f7f6cb6d6cc0a07ea87361ec975c91d60a5c67967a5575ec0b5620a107", "157e35a2bf0a3b0a9beb6bdf851a6c51bf13a0669c02a9fce17e4e6be4526ee6", "1d43125f25abc3fd7c9a7f8c9d6b33d355522d078a912c0b96b675e10a6983f2"), ("1c03a93c344ae99748f74d0d8b83ef22bad3902482c0a1d6bd4dfce90ed39f2f", "24be9ecd0e69ce885587ad302aac4cd792cf114f588560dd4518ffc5d109e416", "07f0dd18423ba2ee6eec40c4240f5401191fa9340e4826b98fc0f2ddece825f7", "0cfb37151fb9e5fd5c9cce34baadf78f92c6a7542b7af4208b3baf7d321a0874"), ("2c0689d89e34da375f71b5fd5850f3bce85bc6850a6f6fc6182490c946988de5", "2ef27e60dee380cf0ed15245ea77dadcc3951704e28a7ad99309205995c30913", "0983601712b7cfbb12d2ae55c18e856eaa9865dbcf6ef503a7fd7535f86da1e7", "05d924c1ac9ba2cf6147d3a83a639bab4b231185e5b669455cd17d321994025a"), ("13477df23d877ef2926b572ec6a7c9b1067974868b881a93b0db98ea399bbd80", "1284a8dc4a564e43e034c487a0e6505f65db151e1b3827b6d6c7b3534f5c4fae", "1e14fa50720658f32f32309b4d978c54bd5add7621c105d10635f632e5c6fe39", "0970d7b2fc19e282ecebcc0ebb90f8ffc6206f25ee1f791ed196303deb7580c4"), ("182119ca726bf9fb9889abee0a9fa660db72439811b5e7b451ee91c7cc7734c5", "045be0456a1f3e36b3f41d9630e5ce3d9c764758bec0c85fb8699a1e5e994e90", "066715f8b18d7bd803953991862bbbb052c2391c5f045c252be2fd8840b1ce63", "04d1d4d4383342076ad48598cbe9dda9ce6ce24b6f2cc981cea4187356ea0305"), ("1bb72cb9bb5979ab92b9a8f286d34ca42d835c45e69e4680dcb02acc49faddc6", "03f22d119671f39073e04923ef061eab7bca5e8ed4c26b28875a18ebfdd416ba", "1efbf510664a8d735e393d42f761367d78d0fd7fcaf79e67ccbd9a0290147dcc", "188008d543b8022c5e6452f59874b91985baf81514b281721dfcc43b748621e8"), ("1d73b6eecb92248cb0017e890b96065d667a829d005fe1b6a5e56c89ca1bca5f", "0aa9639a5b109aa854d46cd6dd4c1773268b3b5629e5ded1b758b5025153d28b", "16458cc290ad86cc4980d853a099242fa22a712ab23081b4fddcb2a914350efd", "22c2cdf2d50d9cd4d632aa800a32ed49ab9842b31378bf2f5ef90c459bbeef90"), ("230c158ba6a061ce3b57cd94fcd817fd1954ddb9f9f6f3cf0949db5c583c4d67", "208cc266731617e0f51cf0ae990b79f2fe3d83485c89e7de4b94825203559ae6", "2b8a0edd012c7c30c915bfd5c87a12822787eef070ac3ead18edea679f06d0bc", "26d5f87a44c3bb59f73d7fd7fc9c001d570c855ad50b534602d5269a8bff8092"), ("0cb85848baae151f5ff4b242db19c887a093e79d765287c3a8666bbe5170078f", "23691dc01f3cdcfd28374ee27d6e6cff78728377ff5c57223284a1e7bbb4b410", "1cfa117338082b0fe0bb63dc998ee7d3f602e70c173206df8cec4673f884a91d", "035e0ca14956336ae4e828e7d3d33e78731a5673cb87dc886cf887f20892bdcf"), ("16bc8ac1551094c61b34ed358bf919492d3877ebc04d22661266fcf8dc298dd3", "2838663541f8137ff90df424314f3e93cd412d8c42a818ad3d666e6b9de7fd4f", "05d3885830fbd3a01ac5d18e399ab767db102c7da4af4e73ab716c6ac95cdad1", "044e9cd65ff00b2b13737de11be08e4fbe8d93e5d7a646f383bf11db4bcd63b1"), ("01001f95e8c50219c4c967c3d1a8048e8f601eb18a671cda9e3827b284819f38", "2c6086ab4584c5d54ff4d88d2ddc08a37aeb466f2eeaa05bcd74e216dec8c026", "114a177184467f436e62c806e9a649375edb5c8b32b833c27639fd18aeb19f2b", "1596cefd043f1701ea64b1c3b62ff234f85b9f8b8c255917f3ebe0e8878fd9df"), ("0abd2777dbee174e8d1cb39bd0c60b28cfd089c423da62c1f05520b03dca73fe", "269f1ca8a3e18b1c790506bceb944979cd446ff407109b8844630702f560fd66", "164cd0e6c9a4ad7081a3b7186d3a31d219c4ec913f7461f04c283b91b1d430a3", "08624d170b3b20271d9fd7570daf91be8dc5c3e4f199c7fb41b770d4d606e1a6"), ("20e34a8117c6c8421699a8c0f58f377674d5e7d7db2d684c2a35e7bcd1e1ae7e", "23e1d188a60e726dc5a5d3abcad94866184fd618b56894815aa0a6383c311ddb", "1d3fee6b11ce49409d568cd408b207a06bb8d4277ecd48a8abcef6afd50be8a3", "249c6996b183e7efb6d105f21c2e7c5bdbff7bdd7a1488657f2b29b3b055e3ef"), ("1277b3a507d4917ffa23b3d858262b9f77537e5c4ab3a9cd3a47c8150ca2acbb", "174907a731fb8586cc1b8fa8d9e6d80ad998cec94d951254466c3b553486a5d0", "2f03558a82b85f0b8e062cc547627b51422e9b0a8e7f871a3751b2818aae20ac", "103bfa285e7a46ef32ca15e118f1d88556e71afe0e525b9f65205ae2734494b6"), ("20a67ee66355c54392ff62a354fd493e27e4dcb813530d35e14e591b1c16afe8", "1f388b8bfdb17882437876d68734d98e69ece1ca70ee0f25bf9d75ac1a682f91", "28ab08fef750ab96886b711aac5c7685c0ac7c53172162b98593c2676ee9c64e", "01e53dd8cf6a0cd5c9638c8ce91ec679c5976a307f056bdcc0b599a6a27df96d"), ("048fb9d0ae96d1ac5d7f903748f17913fdb63e2b577e66be8f9e4303db180130", "00cf0a64510342a9bf4f8ab0f0359936f22549143c006e220b1150d1d3f7e192", "2fb963787941a245af7c4a2ba983e509238d106a4a388404c313cb676e8736ff", "08e78cdfb800709c2872e7579b2ddcb6523df0a052534404fa9d350dfc072161"), ("06745278f3742056fc9ec8438e7016f6597584fb8fe8f68e823e9d931f933197", "15ba8f3e1a7168f6015d283bfa027521b8345767be0ae3d04d5c50ab5e15d4c1", "1d82f5b6f31b7ae0298927f395fff9e888e0159950dae03438274956fe4338c7", "24f35ae6ab1fb538d61716d23b9b238f68468649980b6f2c6f5f55cd0420f8c9"), ("0e3dd68f34fd497d879dfd2c7e848a9f8d02a6451cdc91a6d9e68587228087c6", "069168e5ff7b7e78d27e1badaaa53da4c46f22dd658de10cf76a713d570b06cf", "04e0c2dd527bcce24b55a9eaa145dfa28a6ff1e4480943076babcd0607751f60", "0d112b3ccbd113e8f2d75f9d475db92ee11d9bc960e3803eb935c9a8b2b4395f"), ("0d0c1006acb5847c736fd2b1eb3637fe91d844334269097b035679691585c308", "192634bf86566e48d20e1904d83b7373ee44719d95007de5ab3626241ba3dd77", "242c1b679d36ae2c4327b9ef68c801451a66f1b27e06a0988e4b2e6b1c318c2e", "0b9b55a1c56bcec65e74f5db1b2edad9a288c648790ad967a1a7a759b1c6f5c8"), ("00bc805155d21731a34e1642a304946d5c14400e5064d49d59d5ca16f85c3835", "00fd5cab7e40842f52b4d00e8f542d4cbb9620f62003add18480274a2b37a8b5", "2c665c103447c84078244899057c5ec60cf32278ee9062dbdd93a7635b64a717", "0e3da5cce66453cb61f78ceb3aac9d631cee51dbecd85c5d92e54cd145879267"), ("29b239912cfd91e56c8fd9da5f820bb74e91cb6d8028dc6827b89f274f1f18d3", "1c43cdf4a2874d5a136c1395649a759ecabc3d03662973c3d7137ee80474d17a", "193ba4098a3a7e62d42c89f680ce8c39f25daa8141569f867a50b61d858c763a", "28646a7d83b8ea969c950f8f67bb0528dff028e6b1d689b7913b948bcf60e2cc"), ("0cf08aac6a8faa8ad03894236c42bef4849eb238e8daa71830bce0784a8f0548", "0e0061a4e327fd8d59094d9fa649f5cad9166c89706a2aa92ff375b41fb03826", "0f2b2644422d5602b1488e39cfd9f00f12b364e5064665a5b8763bb1b3048615", "2f665db3f52026be773a519fdd41c23c6616cf03432fdbda8f6ae51e4350a136"), ("1efbbbad180eb14c42b69b9b1b9368c591cdd4a11b78d594219f1f8b9bdeb2aa", "0605f4d7cc20c69408c073f35ca3fc358304e7d9f1d8e54ece1f29c2f31d7073", "21484ee77c626da07436f730c00b7ed51de30066cdc9ce824088b854b1959022", "27eb275b2cd276f6ad5160a8ce2aae5fa8f37ded8225a5b9ed19bb9fa94171b5"), ("18b8062ec8044029d0964e42dbeb40ee7e3696a3ef9cef31d4631597d8eb3181", "17c0e16b824ffc40c43117785de5a43752811dfbd612efd532de8b883eac1e5d", "0823a3069eaaf3ea91451b1764ced23adfc4d0ac7a448b5c31425a8fbb2ff9de", "20b73caab52ee8453d89512c48050be9d05d40e403f9f5cfbd0493851c0ab470"), ("1cb66fdf2378c50a6407c5d6d9f8e254f3ae251e9dd45fd367fc70999593ae74", "0bff55ca8a7eaa189443acb85d6802d59838aa3ce1bb64126ca30a34eb354eb7", "1540273f33e7d02cfc510b303369ad914258af85bd583f148e2f51ce4689fc1b", "1ceb827d15c5e0eb0e926af419c628f9e4f05333970ab716dfc7dbb60f384991"), ("0d61db5bee7b7b5f4f9142901e3c1ee352c296446a5c8f3b88de4cb8a3905e31", "2aa4ce383a2b31b09e8f391dee6748eff51643422dc727f0c699bbab9627b14c", "16011ae80119178091218bdb6d81dde5ad8190cc5716fa6f91c39380fe45b135", "200c77d33f6d3d194ff5f83c48a454ca29920977d78349f529dc8f39dde07c5d"), ("0c48c4a857860343fb0d41e25faad8adbbe42506b552ae973d14c77559415e1d", "0ac34ddf7f91c1aac73a4ffd2529113a01fe6632d365f398f288ed83c1e20624", "0adc4453e96646e24147e47ea5a8b21e335b6b294359832b04ad9e5dbd3576b5", "1acbbd4817e9bc6898e7646e75df8e8e58cbb799305eb04d60275988d4d40584"), ("2af1b7b0f4e719da49efdeb7ddb1ff8dd19fd6cb1b8815964242ee8af6b84d1e", "2092509fabba1657c1e6fe392cd4b10c56ce96480ba8952f4f2476d0229d51bf", "1b0bd98d0b9c2a9c38626a65e05a62b9d78c55c2ef735fcef7e0077122c3f539", "1e565837782dc08e529fa5e608a8d65e95590c1f07be77adc05a68158480dadc"), ("24560c972b4b2baee73077a5ec142eae13b9f2beab7a91542ad9f23c244cd76d", "27510c9e032be3006e177c79e03dabbdf0a2546d177c18f4694bae6cbac85c02", "206ad795a19aef00209b78c160bfb36a70400bfbe6a5ce2a1e29673a1947cc49", "0764e8ae0a937a8d8aa65a1fdeeac1c70b4a98dc7410ccc9460a4133fd353f8a"), ("18a3c8eb50e1e27abe9f6a19ab9625c63d13b30e286b2d300cea8f2a8043fb17", "2479cc7f21fab2ffbddac2685b8c677cbcdb33aafca2306128bb39fa1a6b8739", "1719ce20d12c927eeefdfd86d9f40d3642991ca47e499c6bab1b0004022ac002", "0e8447e02cfbd0e29b81057e82b3e93ff068aace84c0a6dd20382eef59a537bf"), ("0eeb68e4e64d57711a537b636119a0ac34fb994a23a9aae2b7f2b730db4fdb4d", "1116f437be97809dbae3638f4401575e6ea33c87de8c998ce09a4e06816cf8dc", "0da928fc736e975b978af4d7b0e99aed34d43840c860f29d02303a3d4ff8f34a", "17ab3ac140e06b4bd8b1acb16b9dd2ec7dc0f17b1e8643e06cbda3f236a2b720"), ("052375b31509a997929a1d1a17fa10c419deef0871eb98ac4c2078aa56857912", "15597cbc1a752efe00147b1daa62d90632dd7f8dcd9e5a2a6da439dea2041cdb", "0a5db220c4d17119c76291a2ebee92f4c1aa16db31d066627926d94521fe4c11", "2f55b242ddf9caa4a7dcc25dfe2118ca1b21918c63e36c7f5e4a1296b1ebcf1c"), ("059fd039bddd9306d323eba36543852b93ad16a20ac9fc6cadd5238e148f0999", "221a3ee362ee78e2bc80c1f04978b4672e103ea30ee94dd0eb5ce182596e49b3", "073cf65c17afd2ea8924f57ede1ef5ebbb77605d05320d67144b456744078973", "1776ce155e625523167175b3fde596c5126de8eb33285efed938f0d482dddd51"), ("00032bf50524ee97b4582720ba84d0f8fc6548b1810e1889f1c27d60bfc43921", "06282d8f3779f78823123f5a888f975f01d0199d7cc00c72cda09ce640df7a6b", "0d08688487cb5dd59cd5fc6429b28da0046d0f4d8b241e0a4786329b1e4bae0e", "1a9cc3c9a426e93a0feff5c3e0a3fa08c28fd1e02a187ac77eaaf4ae9cd7d396"), ("03e76d552bb16c5ebaacc887e70a0d2df362f3803f7156bbb6b09eba551258ba", "0be2e097077c7b50037f00ceefcdc6f4e2f588d3f897792ea5e74b58490561f5", "15a6ba06d6966adf0c4f06f4516f56ae11fe978bc0538ace958e92dc17c980be", "17abd57feb7e571d80ed34635d430e87b61e2b4421b3100aeec39e3febe62c49"), ("1589307fcfc6d747b2cf54ebb3f001d90aec270461aec695ca2f2245ef73ecef", "0f2f255a808e4d72904253d198372929255a1d877816d2a05ec0bcbda77a28ca", "13cd57113477adb74cbe28b44645d6966edabb98cdafc3e4a6b770aab8e39442", "0b7dd2c925af9f388401bbe1c2c1d530c10b9e5d79a337c31f99b3004b2efe5c"), ("2a5fa8cd6e5dccd4981e23ebb153ca4ad679448e36405414f5e6106c1b29a084", "286d3bee0d605a20818feec75dddcb36f97f3e9f75a8006842b93848cb427412", "0cec38cd729738315fe7850812c00a2c2084233f13563e4e89ed8f42ba8ef755", "0df3d73693e4c09d9e8400dcbd7d778dca1f6940da5b4817897d4b771757637e"), ("1f21e4068e0804bd1c22e95df38dc52dd114d0b43ca648e37c723ea1c59a7e98", "15156a4c8e7c2411ca98e993afd9014ff60ec5d2762a59812c6e9edd283d95d6", "04e0242598f2faedd41a0b60f61d3d65b171e18d3059f16c43f58635137de57e", "020f2ecfcc0b7b19530d9b70f8ed5223f01315c505332cd5e4e00afe71843fee"), ("0db36c9c195fd812868fb59926e64487a167a40c1e935a09705a950c121e61a3", "11341c7df366ff88bb60f1a5175bc4797cd06e5637e34b467190a242a759f617", "256c340b0698476bf04038b33e50cb4f14460c709768694c41e0da142059d880", "2d79294189784d6fc5e420d789ce41cd0f21382f9a45a246c64e0b6398bc06ec"), ("1a622be6cb1ed3c1d0729436a811d332197bdfbcac34032be966c1e45625ff9a", "17e1ce14189a1486645db124872dbf6e587135bb33e972e8d1454735fabd5ff3", "026755374012804b7fde7f808f6ede28ebb05b693a996316ebb1901401b4cd3d", "2cca65a5a76b047b635d283b56a59e63608c8f17e3121ddae94c1d1cdd10b8f4"), ("1ab742e7e314e89b83b851ee30df4016850263b1d0d677770110de2ede0db9e6", "14652e735a3cf6f62c7744eda1d3733cc519f161fdb4066ec22f29dd12316dce", "0868547e14cdf8c777e3e3bdf31e23d038d500240e03145526d65a62d9440151", "19795c9231318bd16a79fbbbe581a0d775bd4f7f9a0cd858974b5308698e38ac"), ("21dbce11633a669ae41a0ad5882774e57b59f07fe4d32ea506c5dad5b27ebd35", "11b3c6b8baa0f065cc293b4d18b8eb842e3dc30396134b388d2bed48598e7af2", "1a070878a14ce31ce68777fabf2da9126c07d58315b06dc0587116a5b1843bb9", "2cc2a476117d01790c0bdc4b3f27ecf8d867ecc6e89dd7a6310a929a6b7ad5b9"), ("2b290d6c0b41d942599d9eb7f3692d6ae097c882848fe51537d6abad71f0d6fe", "2bd9f7b480a03f9e37e8ad3ff566274f1914985dbcc919bc59e1a510384145d7", "168a37cb375d981e918cb958cc7133bcbe6ec24908530b7d95bc7bfd272ac03b", "26ab62537188fd0b00f1bc30cf52f689980e02249988a4fce74ea8ae21fef56a"), ("149f68d1c1c46f96d9f2b4ea5f917413e6af0ba7bd2bddf60001f7a514c2efb3", "270f988016a0c61660041cd5f66d8cab382ed6a07605f40c9ad84fc4d7027dc9", "091f57858b2bf675cec17bcb1264f043fdf0d099a396479b3c5ef04b2e50164e", "1058ad7b067f33d8d1aedd86892e4bf3d7604eec5250f0e70f788e5cedbdaa26"), ("1932716a837a86c61469d68a24d99592158b4d0a925e8cb2272184ce49ceba80", "1506f2bd90abbd23c4d25df8070f8369d710492f2918477f284445171fb62476", "1f04c452bb67124b13f4c2d090b3566adc45eaca1e5a2f5079647dd96816cf51", "0094a22935eb233f39a2336b5253e098d5c08fa8b5607f8f64832be8807d9829"), ("07c797dc0930651c89e8e06dd0aa22ca41437d33749e8119167a403570c56b52", "0e334718a4ff7c7dc2cb4efd17b99c434169e2cf3b62accc6f5da79ada6386bc", "17b5f1bfb704fe41a9cf2d07e2563072e95e857b649aa1d0489a535aea32236a", "07a7c6325fba6cd32f5311e3525ac03479ec3b0c41c39e1cfbdec2ee3f303ed6"), ("0f409d96e629f06197fbdbbc4813c044701c6e9ede29fc3dfc491f649ad57909", "08173adadba3c3e921377e427fa279fb88585acc07573b8528369cb0e86c0c67", "1fa1f3c2ed2176e9e29b56f31410325a0408daa4ba5b5e6f0810d5049e3d6a44", "156398e8f4629f7982304a5a4ceedaa04667fed77f23571e5c0caf5b4894716a"), ("1517b100f8019dd38101e7d9b104747c03d3b39d378c503987c700140e43576b", "1b05f0244a5caeb0515ae2405d2d7866b56d04aa284f38c6fa23238ebd1c949e", "2f48da8aa275a6095553d6adb70f3331ed6e477974e6cbadf442608fb8d78f20", "03e08df58ba4a79aad93c495d31f307eb66c1c9f43b113e9cd06a61223c54e6d"), ("239dbcab30c4f20ed753b61a8634775b4ed3f72d55ce9a9415907c0b5db3690b", "25a03efae682d5ad73f2a83651687bde5c81a642f73aac092bec7f59c59644cc", "298784908d833e02d6c0d4f855a615554deba033683fb6b7037831c23d78daf9", "13744a1375d5f46f71b3cf126128c808c7d06e978f57e42ea6a9ea8b8fe11912"), ("2f5d0e4461d70a9e599a4aabff91c18d214877e3ebf92f404897d491adcc56e1", "01b4c7fc67dffd01850570e4dadcaa5692122bf23da7a2fcdcea04da26d69e82", "1936649db89dc2bf1af674198e23a4f066453688b2208184e5b4872b41e06582", "10c2d0737e260c083af206b5989c1c2a760948dd19364ad72463836ae5470775"), ("156744e8186640c69df03c68848b173e749e5b5a5b4a7260410203df75b5b29a", "254a4186e8cfd331c1ab9eac646b0cf5e984def4038cf8fb029a7fb3a3759f38", "1833207bef9adf99919ead6f20236c9e72eefa1a51174746b9138ce92c714b2a", "0eb6f8a613bb8bc8bdaee809229c3ca52160ba2c874bd0e5c3bf9faa6a1374f6"), ("1ffadf2d5ba3d5c1b4a51aee2d363e6cf5ba0203d95163e33b4e07ef88272094", "03060ad44454d6c48eb7a6b8842505df91e5a52a47547432789db3b39b8a92c0", "1010432236d09b8556aa73e8a725e09e8fbcb3767b23c2d0dd1f9f266f4646e5", "102d682b3a5702612888f2b20952254d1e710e337d7e813304b3423d21d15001"), ("0d4e75e146ee06fb457fe3cd1bfc771f3c0b0c112376db3a3b662dc4f8477500", "2f15aede1d22279bf87d481ef3ada460eed0261a63e1b5fc27537af0006de7c6", "0cfd4c90ca0515ad6bb9ea629ef5ca3dddabcf08a43349c971a869fe9d0a433b", "1d4edff06c237c693a6ddcd0e52bd5b64736d60daea27095de36a996495ed380"), ("0bb3b5f621ffc1ab26c9db6aa39de5348c347079b97fa52cd441e544e182eb37", "070bac91accdcc1963c42218fa214dd1abb22c1b7cb9f1107a85d238fef41604", "05c35f5e83b29f6069f7fa816db35894c34bf7f519af2937439a62e6c9a32b5d", "0cddc161d5e6d13b2caa4a63b278a224db3c3a52274ef193881cb050aa3ec6a2"), ("001b2b9e6368c9e20a2e2a73fd826862dd717028aeffe2927d996583825fc969", "055fbb77145ac9e1674d4cda0697e95dcc4b3661918d09d9350734a1c6d42bda", "0a5eedcd146e0126de74158aacc0ca3d2d0ec4305964f72eeaa9bffea45fb810", "1c3b1e1609b27fc2d522a88f0dfaf3212b88ba064dd56e63bfbefa043b33f906"), ("1119e145b81e7972f21cd03fc4a58d651cdf42fceecdb152fb5017a4058f3a0a", "278191db4aaa64721917d68584c3f3e974c86455357f23262f907fc91a4b2917", "0af3f4e7cefc26664639c77bb06af64f30422d76a06cc8f39769f2ff14aeed1c", "08be74ec849c8a3f5ddaa6a5229fc4e4b0c82c4df118a54577b2e7a6c2041943"), ("2478afe106ebd25d65c208b37dabeb9435fcb30cd0ff7270f73d8d93818c13ff", "255e8d1fd5c85bb3a45cefa3a46ac1d3e4236614792b72281ff99b9ab942e40d", "17047fa1d05319832dc67a60f4a89dd3ce9e7e5e0adaed49f0d2464ca05acafd", "2c44eac6939507da220b4a336683ba87decb93c342f46dc5b071be1111ec0e3d"), ("25fc9728ed110da25099c0f6aea190706c0d4c5d9c9ff1e749dce0bcd1d1fdff", "10367e5fd22b9e8310f7dc5851d7be6ccadecb48cbc59124fbee67ed24ce1c04", "252aad2ccf3d895253bc82665cf0525fbe8ffe82a5c9749add51ea70d22e6e10", "09627c7d9cd106415ff8c66ae934c0206e77e9306d0f203c72e7bad1a55d037b"), ("2b6adf7c41f3fc7e66b58eb1dff2a38d154e6cba48e1741ce427cf07a09b2ca4", "0b6238bde8b5e9a4108e4919e639926a88a61870669937e1ab634ef20a41ad2b", "28648a539d8e800636ee2cf8c5f529e7b88a6ae34674218e4d8a775fcdeada88", "04e44487f8433e07a883fec28d7f0c345e85bed4b51886a2064b157a8ce42cfe"), ("2b0df2aa9758877a1ec931260b841b31d060d5b3eae82dffdc10df17b28d330b", "30499110d125864ea987b6bf49a045d3f15785510826c643ce15a7aa32bfe9fe", "2462dfb8318999c828dc92bc3c3ffc5269945dd8fb0b3685365e31d26fdbaec1", "1fdcd439a7769e0ca01119f368992cb796929db6ea2a4c4f039eea9f0819a8b1"), ("0ce3277b98b3db4832940f27c3b635cdf63d29bcefbb9275a0f8edc22c64f5c7", "0789526247e193ef961bad0f39e512ec3e1f4e04bec6bebdcd880c30533cdf4d", "1de781cd6c7752582f6db7518ea65bdf8f18fa2213e7600072f1b3c1395c55e9", "1015f3a1c002b4d1c17481a871abefee74c2f32270e0d070a15afa6f7938a309"), ("2475b7be19fddce2e11a8f71066f6c012c346854a3e5a30c085a31d6cb84293b", "166a3e9b33a3110c5e8c3fdfb38747233a84adab004677dae8c696bf75f29594", "033fcedb67bfebd5ec2b943c47fb193d8aeb949f161839d81cedca9a9ed33810", "1c603e397bcca045f910dbeb8ed9283bfdc2abbbd757b89c7749fe28282dacf5"), ("2efd4dc4def0701f7e13ec11d59e41427df5e55bf153929a0bff7fe63bb4909e", "1cc0e7ca98d026867c879a019d29fe5a77bba193c25e31eb0f16e93e29428931", "13e0c14cb1140dce4e2b58f585bf4edf620fdd514fedc01fd0a216e241cd6f9f", "0f25eb273f19b9cd0fabda82809b699f231b41c3d2ad7878b7d75035d35d9a81"), ("1169cad4d8b149712f58b32ee933117bd4d2ca9df6c5897ee922e6fc1e295ab3", "2760c992d234bd9a90a51a5104948e8946697f7fb19103077deec6e6d394e75f", "1a4495ca644eecb4f9b57743ec8a96a8ead3c25194290bed603967b4e67c6e21", "053f546c621bdeaa24249a44ae75c856b55840cf606c06f94a0d7c6ae0fc206d"), ("0c1b493585c89eed6488b1cf48bec49b383c632f8721734c41982960fc1fda62", "2e8c86f8adbfa92a4bfae5e4f67ff343e8050a0538595148b24c046c0fce509d", "11a2b6a91fb8dd8827a272fd6ebd1d4f1e08331de056f7d89f4193c1b584a47b", "2e5fc488f58d6d8d06184187a19ee3ffb878b5dcaad297daacda8c3c7eec574e"), ("16de108e87c58a8b96801bcf40b8a14abb68d96f1d30a4fadf3e804d9a91eae1", "0011602036941da6e1e8f8f12634c794357bc2baa035e2742ef3abce19afd9b5", "1fed24f60668f933de67077e189d910d9ddb0208d422851062be14d66745284f", "0c223de33468c3da93d2bad5d721c56f2b390db1c5be2f7fe25306167eac93fa"), ("1982199289938a32860da2185ec3a6fae37a3205dd46551d91720b73fc947967", "0b897506580c7c3b51d03d3c37787b6932a6e9de0a6a3205bd668f1584b6db4d", "0e2fa3a6bfb843706b14e086f6250dab82a339163a68a598e9bd859a540e4997", "1a890bf6807f368fd7c111d77c095df0e30746becb2f476640c72e87791ecee2"), ("2607ae7aee9b141360b303c4239da0b3d980715b0168a5b336234ffcc1c9bcff", "0f0b89e448c8eb0ed5a9be44cd8c6a660e0e133424cd49f2b3afdbfa3d2c5281", "1a4f2d3f1afad5729feb0a38dfa38454624032a846206111dace66b40387c59e", "2b49bf9053d79f2ee83f9af880ce36c211b73e24df410a53b560bf1e0c1e795c"), ("140e0e12a150df136004af3ca7e8b9b1ae341308710a5eb1415aa5c4b69e3895", "303d089e8a4baeecd894440d10ddc378daf7b145a5b0f8853998c2b4323b0499", "11f65a429b64eb9afc71c640bee67cc9469ef45887a751604386ab5eb26318a5", "2506ceb22368b8df2e69f5fb3ce0bd4d384ba980109a0ab21a64149d66e1495b"), ("27c4576ffcb33159b825881f223650a5fc3567411aadda27c8d673e6456299f7", "175376227e4bb11b941214e6fab3f5343d8c8c8ae2af1b47fc30b1e06863f228", "1011b1dbaac192da80570c9753e7ce252224689f2ee5e960e58f6a48bf05a4fc", "11e3b0e81014466cf8f29a2f2a66caad6da79e4829dabd99d43accf072be923d"), ("2b349445976f9905f83f95530c08a386e2cc73e6943d712b2317373a79529939", "0e97553f59ce6f201af4c8d5cb099aecabd6fc30999aa75867f8f870b4cec62d", "04eb65aa397402bcd1330c79a612b80d71178e6c8dcc6ae8a8983a9f44ef1767", "0e51eb1a1bd9b470a7fa0ede9e6035e3132681b6183bb3b7ca778b0aeb2a8f80"), ("1a2c267658c4345728879bd1b771d9e3eb8cc1cf4b0d399177d6811051d54b15", "2d90f717cb7778f765c6e157cdf78e03f49ccb819f25e5c96546b4b2357e1a1f", "0447b65d224dc29b5a5ef48bfaedbcdbd2572e8c2fed1cef576ab70b540fd6f2", "15449a37b90b9d7609bb8435ba0da339f34cade8111290c6c60a267b8639ce5c"), ("2d0545aca1d16115173eed774a5b9b0e9aba85a16c683a9295fcaa151fe7e21d", "166caab114d6cd642d402d199ed5ab8e63f858400a45d2fbcbc5f828efb45e3c", "07865b24b48dba0872bce3caf0c72f37c20c61a6e0bd30161723ab114fec3bbb", "037cb99e77684436797b57533bd467c9eb4016a2f5317cde3cf8ed529fa06717"), ("0ebe6c8e7acfa2488e2d5d95ff3ab3e5b57feb5018a1ce7ef2115a8ff33babb4", "01463f4dddb10abc761975c907292da222e6aa260f52dc046638a6aaba7e0153", "10ae87ef9712043b3fa3a30d86b42c759aee8d778f34945796414bc6686dc7be", "14d8d8250b49375377b62d72e6288ee4f10f83cc056ef3091d977eac59c1580a"), ("2945693a7f8558185aacd0345f0d6cf03f7648251e60f435bedbffdea125586d", "293e8ebb856f8da95082ed19a0dbe3bb851045e647fecf7e9e033138a48b587e", "2ee93684fd1b28a44c8f0995752e41a1e062de7e7ed65f88b0b8d31ed5b93fd5", "178c3e1291bece80a5e80df155149a6d4622db0e8c64817b7a54835aa95bcc96"), ("048f9a13a9ffdb147b477905337341c531c667b7f12bb18e037b6e1e00070de0", "0530490f0981079a6e9e9575270cc7c5367ae45bf3093cadfd6c6aa5e83ef2f7", "235a4ce855b482b04b64902f7cde6b115796ff0391c8ed97316d19aad9ebb12d", "2f1ebd226d4fa5e2f9510293fa4bfcc54e5300c255e7ac308680259a79b98e18"), ("204526d97f81b2a2bcf57dc95e87902127b4deb937f1688cc74c0a15920afd13", "0fcf9224240032ce0505a151da879c865b83a1056309d9ae28b33c23c948bdbd", "14748db89a5741e385151345a53595214758eab72c0f6e0ef82c984dc396d584", "121e3f7c64d284d51402b8b80a03df21c01495ad3fbb96254e9a429fe4dcc749"), ("0164c60f380cf69d2b53eed508686fc2d74930f57f8a7259d13c4ab9b3b17182", "2317a61af322591ca19328bbc7e4781183ee53f6274a0a776b9deb25c0596ccc", "2890db71d2b3b1b3752cb1f1c6a36ab9c871ccf357b3430f216b2050cdba20f8", "2b2605ca0e9b6421aadf0253fcacffa6a08fa3c80c61061d84bae95df20ad4f7"), ("0f86fbc59dd21a957b804c76aa7ba398b526f205e3ea19d5c1ee63a79c75ecd9", "2e9f30bf34b1deaf2929c8fb6e1eed870a4ac5d8d2d1c9b609ec2e3d7eb11fd4", "19efff6ba697bbdeac3d17fab4c98d3c5f164e4788f1ae25c7666a746aac6621", "1e018f342c923c3446aa7c0e6ee44540696fb0814c4cf422660bf4978d623bd6"), ("23273664fca405ef555f3dadade4f61351a4d17f505228fe2c983773cb34047d", "0106b493d552269e59696ba0cc71b1b63b8d028055a946b70babbddf46f8d250", "2dc3c75d5ce80f7ec690fe9cf11094d2055c85a979ddb778e2b4bc2484b5009e", "1b06117f7e75947651d87ffec5ce129944ac787bc3a0b210c12bdc0ac0bc5979"), ("0f8b019292a43a9bf4c197aede128e186447e566d04323bfe536d20ee42df7f9", "1b14fb030f29e61b9a791d503f517a04d788445a36039a88246bbd3ca0c6bf5f", "27e9b694fb2f7a199a87c41fedb015f0bb3841a4459434676be1c3df088b9782", "0449ef22b8cd7f3d61608afb16b9b3ff2cb699c1cf2ffcf3b787f1a1c89efb11"), ("211f33e6cd333843f061e6324fe1ab227c73012b633f1a81c84117442b2b8815", "1d3008dbb0333cadc39cfbd1e7c5b78db9bd14f8903ac2ff7ec680ed1cc2539e", "15f308f190540773ef4fdc0f53a889d8cae7304536daef7b6aeb3378d1fe38bc", "012d2eea90a16ffc5e1fd573117a7308f04a3b60114a24729f969380e70478bf"), ("053b5d12761e4605ebbaf7d699756c68bbd67ced0cf751b6398570078220a659", "2abc083ef071ddfacb7d5c6c3db011b24fca5a98ce1ca7c6cc47d98deb3cada7", "11ef020774e1deb6c0d619c9eb6025f5ec4f769c6c4c1a0ca3465c3b6a3467cd", "1cf92889de87e3291d313a27da07cb6db5a5a4d3fc54fc347d877b5655ed0759"), ("047cfc99246de3e6b2dfa53aafac48f9dd89d7a475647df02f7159ad1d7dea88", "22711e7f7efb07c40b74b30bd671cefee5551bb627a70adcd5a67f3a9e6bec2b", "20256f795e6375747683c3f0d6f17b739db8b626cc1c30bd0996a0dfb65834e3", "170e1bea9235165ecefe92571881bc13dfaf00ff2bbab71c975055b051bb16bc"), ("1c8d7df279ddaa5a83a7a96b2eab9b295e0f18008c53a9ae7ad4bfaf093e7497", "0833380cdee593e1b676409a4d14b1c0a52a25704a14e10396f85b459db89276", "01ad226c36da782d5e2605850491cf418dc40cf88c54331e048d67f9ce41bfc1", "1f5336bd89f97d63039a5d006723ab4af597534471041235270dde0d7d701809"), ("0f5ee398ab65adca41b53e157e78db4425e06c48755b6f81223e702b4150e19d", "27010d6437bd733ca08683dcfc683c774f23b924e772b23877b65c28058312fd", "12595e5d2c3155afa189130ea59deaee4640392b4e5245bf4de5326d769cc8d9", "0c35f43581665fdba8ca330f3af4866af674ffc6162e8c0d2907c2782e2217bd"), ("2416793af597d52d7eaaea2ea27506b1e889c3c020ae1edff51b9b7db2b8b0a6", "2a6ace7a22b267d5bd8358a0cdc913ccd5572b2b1624e044c19c2eb5b071e2b7", "2e44f8cc78526f763f936ccc099d7fff8cd3e3f53f822ca3ae2c88ecf439f186", "2308199e4440ceabc2211c8457962a85609e05018447bb6e5787c34ee3865ee4"), ("1fd3242bed2bd3c6eec50d409b1715d93cd84477b6547957a797450d8ef4042e", "05d6237a030bf295812d0ed85c7f882e502edc01046e446b69063adeb9d816ca", "29f8b264a5715c20ae1e14981eb46eb2605f8b3b4364c9d39bf9201c7c464eed", "2f2ab25fd9b03719bcb4ec012ff146e993627d2ed041f2080e1e8f9b6ba273cc"), ("0a345b510db0a5c9ab8c943d13beb0e8fcead4753644d418c53660ccaa8f9af8", "19c2a096b678b0dede0ef8e9e5efbbe4f083ae31b486b4307c1c145abc0b631f", "05e5bc7394e93e0e5055a6de41d4f4880d1f62fdd7d988c9fdc2c078272b9269", "0d8488363f686f0f462eb5ae2db8bcd62a5659e8d288714b547dc81b79cd3e53"), ("1177b809666c31007a366fcc00740352c55e6fb14e758642318219b1d14cd535", "0898ccbe0945b9ecd9c56f2b496108c7e001ceeefd8229f3da02b428f23f253d", "1d3654293af1e9881c807deaeaddef369735bf8b0657d2328edd3c7af677f375", "303c70e77ea67fec92d462b753fd28a08484b0218155b67e4367b6dc5cdc6362"), ("28c188b431422f2ff78c71d0a835f751a8871c16437f8bfebca3202b7a3f90aa", "00b562ab9be24f713ed2c9bbdaa7fe15b0ee0bf3cc17e16107bf8b5e1cf01c5d", "0524d605f880a66c9ff39a5beda858624d930bf6aa320abb8e6864ca3cd00bc0", "114311e87b0a1c4389d85497e1a305ed1ec728348f5455c77ffde70b620abdf6"), ("0a63b9e5bcdc0f7019ad04d1ce08710da26cdd8d26a44703a7a56923c180acd8", "126554915d9fcdef703e4c0267ede790f7384099b8453ccbb34aa1a20c1591b4", "21620aecedbb1b5c215aec1a0db14d3e3b9ad7cc943e82c3f416f720986085c0", "2149b0cfa04773613b258d6e09a8e24c2c0affcf51f34e0ce5dae37bf7f853eb"), ("1298bab8b0fbe836606af42db09219bf3a891106a6793166bb98a0602dbb96f5", "137395a9c732de30f78399671f3ceb609da5b3a53a869302d96260ba134d0c87", "2fafc2fbbb874a74ade64a246a978ba2242c73202927a332e380d8ed18e45eb4", "1641f9573a34c750bac48bd56ef67b04fe20e6eb70fe0b4b41ffaf515c3851fa"), ("1e90ff484981990bd7f3b6ff3d6f212f4e5e46760fc3289b61026338852b5378", "230a678f7540d1996d76a64f7aeeffea60a2d98cd06876eb522a7a0623a54858", "063aaff692b0733903a26d71cc6a70159f5af03770b30ccd9a0a09dc687ade51", "1362c538e8b5daf26b26a5fecac2f2309102027f7dde1055c071ec637d9cf829"), ("232ed2b547f3efa5f51a2404b4f85e5ab502ab92c593a183e276b1f1c80ade7f", "2a8e58ecbf785d1c511526a5c64cbb97bccd2ed5a9e18c31fd1738ec3985d028", "23f8d3f50443903c7a91d58673f29bc68a9af49f9712d445f67f35106e59d953", "09e9e6b770362e3c39494a24b70ede8dd3c60f1d0a38f1b9ace61747aa080025"), ("068c11210d2c7fa97318b32387407c75ad72a1588de7afd8fb5fed6630d8f8eb", "0fb83de044947ba8c8d5f28dfc550fcb4cee57ebd02bda53bddfe6ca0d6bf51e", "01952ed18854b63f2eef5c67219d1363124d6ee32ec2630d6a4dda449d3ea73a", "2345f14609adbff9c9915e35a41f64a1c4a132a112b29246e8257f8f3d0fdd2a"), ("1bf3949945ac1338c294f57fc609b3036990b40dedd6f88a588bf0880cf06b66", "059b013563fcd9404f8d5440ad7442c0a8840deb0eb49a81479c6f48c6b53e39", "1abaa6aef8c198057df13638e74f9209a0031dfad3590d057559f876d7bb8b46", "234dc3ae6d0052578235dd267a5e0e7eb189515e9045e3f2f1d23a6e96616bad"), ("23b07735b25e1f00b909392c1e5d39b785e655dbef7621cb091e23375510e787", "2cbb0828025050321ae933cf9da3f10cf2be1340372c2df0c85d69d9110772ff", "0c87c8221de1cb2ccee4942f2a848acb8f289bb462d55d20bf2feccdd73a8352", "034544f176b246a341f3b6f12acd1c245cab7cb5b0e5a2d8fca50f4933a7bbe7"), ("0de84c914805ac44c656731810d26e23c19b6b8a4add929d66648f88e5505578", "20657eb7d42fe6affbc8d8bc38e326b1161ad933f8579d52fa4ead1b1c21c516", "210430f0ffeacb0010af30fb6bd2966fb0f1aaa047ea86a946232bf411797fc6", "218275e35c56101c1b817b02ee9b3e1260a740c2bd75172dda721986e6afa9de"), ("290ad3ac5f8a745b7d04881258d5ea7b95bfeca237cf4dfaf58d529bf871020e", "28f6563b2c61084b08e847d29cf6f61e3836c3a5980ea11cbf5554a052c710d6", "2ac679b58e5528039d6b37b40dc9e45d7bead16ad619823b1f72f35610960c98", "1ebfefc02ddb66aa10b9ced2fe054b2283871f6b5dfe272e70889e104833e8ba"), ("198298688869b7c034bd02f68f59a77c11e1cf0c995640f345a4610de5a7c55c", "0f0db9e7a4d3dc1fd6d3db2fbac7d5f2ec772234fd502ddc27dd17647a8e7b67", "1010b076b25b6f6b97230502155f7b20585a36cdf2f61f67e71830bd3d76a44f", "261878e565a17910cff777a3632836eb08de322bd7e1651691a2f3e7ca4f8300"), ("2d9d9659b4625a5e55b684e368b2574533468ffb2d1e35587fb6b4fd821ea0a8", "1820ce7b564029a88fd9003e4fde177f809d983ae11f680ffc4ef1dadeee2ccc", "2fe95da593a365f70f105cae022b73a8275137d91a035067fe18b3a43e5896bf", "2fce04862730b64ba5c9054874a38f5322b93407e5f60a10d86db285e7d3c058"), ("0880b41e559f9df0b97dcc21ddafe652cad73074022ff9b13d147f8a546df21e", "1c6af0cc17b0e97d5d4fc71ea679d72d2c57ec40aedaeffba2bb91d6158d8717", "007c7406c52cb287e766af73ef6d0215c2821b70afdb417085f5f910914a4219", "0b5b7028e72ab21a6c9b3f7cec34705c6ac27b1c5af453bf00d520c0b94b5eb1"), ("0d063fd3b9673b1b391bfce292c8ec2185e79d79e7cecef1d75a4fa9f19d53a2", "1707fc65fbe50148b81fa63a6281d88dd56840a0b7c465650cc8d9f477117a67", "0ed994f55b276524c4842d3fb93e3a2c3d2c144b8daad77569602488fd0c8940", "09d5bf66af45fd9b1c7f045c7deb85054bd2f17e7ec17b8945f55fdd0df2132b"), ("0bbbaad7e185548bc8cbd4c201aa22cbcd46b52ecb9373cdec07c38514e34e8b", "203e03ab5fe706b3868c04bf8566f661526d3265fde19478fcfa214af7bde250", "29c87e92bdde5f3ba7d675d4e3dbc05c03564435f9cc2e4433bb78fbfa34c580", "02582df7974736381513012d4c7523ee917340db8570e3f98c4e26431e5b5f8a"), ("1f75844cfd6a568dd12475c0e49aaaa88cb78a4dcc8d47cf55ebcc0a91d005ab", "0e90802ac3e920b21dd764d46d86b79297082f977b2669bce10e95470b4d6bdd", "14ec2186a2005fdaef8ab9c51bd10deef50dc457dd1b38038d3d953aa2c54fa1", "1922bfdb18b8a31d5aa842aac05558b6439188ba72fbf76ce5056413d3bc6b27"), ("24030dbef5c1c5c1495d7fb3bae734a3e0012ff209fdf40370578e136fb30d29", "181a000922eb881df07c8d3fe50f2173c3913c54a34ac55d26b6051b3334f179", "0aa5a15d9bdd23291edb32b07735326d8bec542806b7a7024c199945339063f4", "2b621570b71c741d0794d17b9411c1723473d25e249aefb7a9771ee34c38ef47"), ("1a0f791742f3f45c28619889828b498a7d1812e901b7557aaf887cc427c1f306", "03ae84f4b6055b234e102f22aaee6711488057b384e1ed3646ed3d1824477dbe", "099af2ff15754ba5242bc50caa1303d79a06c957bfa6539d69ea14389e8b6bff", "0f8f71beac80e2346038ed41933c4bb1fa03500798fbc347396e3b81546da8f5"), ("203ea1c6eb51eefdd3791bc995ff278a147ecef851d5e8704520d972bf0b6dd4", "236d41c664b32ae4acb886ed9a13f5ba8264be0ab7b0185d3c4e7987a2844e6e", "1397f1a3fe987f379a50a763375c8c6d928a16a35985e973ba164187d9e87ab2", "1d23f982e3bd30e7da2a86041816f63cdc90ddd08159291f0db78c94e9267ea0"), ("24d29d28409fc66dd993c5122048f63ba147c090fec4db869d2c5fbad6802f19", "2cacd1231299486ec6c47d278d466968850c327da1ef055949633bb7786d7bf3", "03d3542452c8346b1094ce21bd145ae17877fa050593c8348f1b74ee5091a525", "17918197dfdde76bf92c20352469211b7583d2620585298be95c8c76ff723b06"), ("23515f434ed4cc413ebf876d3625ed60cf000481a3e3dc3a2dfb4d5416954ee8", "2937d1819a7473ae1fcf807c8464b0a1ba39cc1ddc948ba84b9bb50e61e58e7c", "2bde8d56a471c48036d5badf82f1a1209a5ddf19c40943d06b1cc780ed6ce92a", "1f3d74485d26f889d118c094eea8ad31cec024869d4bac5372490d6a4e57a1b1"), ("0d63e4d767300fa10bc66b3d3dbb8fe67210799343ef3f78327a04cda07eb072", "0c586495012e6a731074765e3cc4d16c6f325b6b1c6f264bcd6f5d9661da852e", "28d4af1c940a0c09aed08ab0e58c02a1e5cd8766b24318b71a0f7cd63e679257", "2a5a67641e0db9f45ff8a1a943bf5573de4dfdb3d321b70b9e5098cb37faef62"), ("154e6e9045ddb10031ef66fb668afcd09212cfaecc7a6b9d93199354d9495364", "17d4978a2a3bccf22c6fa283332d180595a77d94273f23887e20ac231a3346f8", "2c575c0e3d5f0ba89db9719f9b805f30a357ab503633651fafe5f54edb7b29d7", "04312cb57dcb413710fc8f1681e5e6bd71ed4f4fa3e33ed1bc2dfd507034035b"), ("2cec1d8e033d84e003aed252efcb036ec11e15f2cfcfffcac08295b8b9a5763d", "067b4a60f15bf201859343927044bd9cf238121c69a8d378c201712d295d7150", "1cbff4c78be9c2f62f078a48a8439dbe891bbda9cafeee0b08fc026bc7959437", "1b365d32f79a72860f532b6c25fe256789c68c5536a05cd25c41cd09c6fcdc90"), ("09d7098f40c762c7cad2dda26e9c19e73b9524ab1ed68ea9dc25e7f2bac279df", "2a9e55fd05b1d63920b97662a53a8b007b3cc692c444c71f0cb225537f619fc3", "13a2dc07f3c3feb5740a3e2f3dfb890d02f88a6b4c23528206a01608e34dffd0", "01eb17ed1b3670cb76b57991052fc35aabc6a96f021f031e588bccda3d86ab5e"), ("0d669abeb83dc81b9e59264362811c24897c780aca0017cad96968df5f52d612", "00b8a81cd62fbc069921e38878ebac810e338ba25c73855aa12fa24e73cf305f", "2583440d3a176b3f99b72aa3b21dfb75ba3818445cc6c1fd0032be66cefd7d1e", "1a78dc95ab47136759953066da5640b65d6763c95b86038967a22de636825c41"), ("01d44a516c804d44f235252b73aa9d6d54e076949d0229905a2505c281fb089b", "14007b39ddf9cbd36697710ac415ba3b5040d6b87953cc892eb3e16f3815eb07", "2f68d052035b958e8f52e01d4f00e4ccec32bf20ec4e861ed936cd9414d94e42", "01ef2691036601487f31cb1d5efa2d2fe9c24950847880a49d7732b65104bf86"), ("059c3eeeeb660c466ba7f65bcb3f5216340d1063332f3fa5415d1e179427f0de", "078e9680872bd3d26f712f600165494732a6b20757f2c6f370ad6436cba964c6", "2cd105a361c6166f31bfb44b0739c674c9b5f117ed40857263d58e8d1f85c392", "2ddd27c06e58b5f7826d8e94d0cbbe35187784702b806b7be5d34ab3a684a8c1"), ("0d57ebfd7cf763396f9e9d1b0e711fda89f37a777678acbeafe641aec9659932", "163b6e3290a30fc732270abedda408d6bd5b422e8f721acad5b18b3346d0b6c4", "0ed0e74257f16cd74798adaa51ed401c5912987a81a41b65b32167e5a14778af", "116ec201c305aca8c767e071117384b09317057f16968dd782fdefe9a1a1977b"), ("19e12417eb27ee6c3b0b7e199a9f47add02b78b010c206e53294df5cb5a7147a", "0127698d8f21bb462c44a59755f7da802e0a1b9676512778259b608e0da743eb", "1ce2eaef76c05c0e6813aec6438289a750386236671a763c905cd7c3939b96d6", "2ca626e923137d2d249404a52f2d8852a5ab651cc5b4f997eec0aea644c1ff5b"), ("1b2bcb1a64f7ad272de487be8a83e2e7991b05777ad9471b20d36dae6999e1ff", "057edc703657d139eab33e5e16a3c64b867cb8a30bfeec4b33e297817cef624b", "1ef86fa50ec81dcac68c9244830f1f5be82b18be2a5cd88b1ac38177f7bcb713", "2829716a24a0380c923832e2e8393511614f954cd5348220ad0a4d401423081c"), ("0b3488be25f9bd7f3674c7b3c93862db1ba15e60e03c533849587ab2d1643b3d", "1b0cb9d7ed585d097ad86bd248b417ab2d4bcd6b7374d9e0e67646dbcdd1a0d9", "2abdc068f6ab84cf9c6a697e70a82d2260148945a2bd91a534cb3585b1d5636c", "01e5c47337f5fa35b805d936af7e2e8f234765019d4c5af2bba7e0a6614207a6"), ("257f741e9cd504ea1c20bddc37f350a9be390c1303ad3a78ab05d3b94d53a705", "26fe83cc3ed37ff396e9ae21bc21495dac10e3202873039299b414715a968687", "195351bec45a6484eacf75e9a3a10bdec784a15739261886703ee98732197020", "1a63cb83c54096248d36bb6e12b47a35575be2b3bf110f87a9d95eed023203a7"), ("0f78c7b7782479d234921c655a23b7a8a841616b934337629d4e3e66c4feb525", "2ca025a8b2386790518cf098e31978be3612ac54c98f6e376f78245278b197c5", "120096b2b6e9ed9c3cccf8d7a96736a9033ecdc0bf6ac80238601a7f4c99eae1", "104e0d9cfb3380aa13be9150d49e6ca7ef06274cf845f7256a478b5cfd3a4b05"), ("11b03a01628367dd566cb44093765d7e6d8c1be462064b22fd3192c1c9d58940", "1ee72d1d2217715a86fb938e3cb82c9b9fc06092173f5087c56f4f11b00609c4", "10f17bdfd03a1595da2408f8b62d721197b870a1c6d9ffbfb4aec35091883b6b", "16756a56ad9288fd77d40f8dc940ef5e32b8a2e60381c2c44afac5929e032b45"), ("24c67ec002b62b9fc1848daba7eec0c3c27e5eb6c31d61674468a166c27ebe2e", "25d07ccc154ba09e8c6e2c2b8377f4d70b40bfd9938019bcf95fc3aed0b84508", "1cb08455c566e170556759b79c23e9f9f35c84db2326d748f3fad81baae5143c", "19f1ffa283007baf0e559485307e3cfe5a4ede31ffcb4a252ff085277ae9c114"), ("13659901558b9ecf92c1b3dc3ef94e7a84f0727cdda77f213abc639f903cc146", "13ac2ee342f9a2467f01ec0f4c07956f7595df78af2d0258c7cb662f24291fea", "240df2d465a896f16375bfb9b29b8f8727461e1bb01e0baa29e7813cf379e044", "2bfdc3f08fd27742e03cd390a12a57afdc8a9d6234ab7a8509ba3f7ce0ab48e3"), ("2cfc76597105a7abdf246d290be618a6c4a5c8cc643452383848f3e24a477c48", "28feda5875e2cdd6496c51f998861e4ae1cbd352cda126ddeadfed28ece93b65", "0df6662f34a733a40b3f830cb1e418f81c97baa08e922f561879457320edb25a", "1cdc77d8f6e04454323f098cb30b6937067c3a99e492e5dc9bc927f57259f5da"), ("18628071f57ab942d19434f1361d4a7a2ce4512d58430564721f6a755ecf8314", "220a72af952bda75d2f783ceacc578bcc063653cce0cfd4f8e4b2ace1479cbc3", "118525ab5d3a17acb66316815401022b664834cd4903268dc6a71704b8d717d3", "11f55538f3d566376c27e7141be0113d417133b405f244ce1743f9e75e5b7aad"), ("1d55c172f21fff258b4658ea37c97777ccf6de1803815fae62e4ab17a1764ed2", "1c057e8452190d6cc283b54d240d0afda6e9cb337aad86dbf52aefb99cb65329", "1ec2aec85b2636f36b7ac2dc17afbf917ed9cd6616c394374b3b8c086eb1133e", "25fefa0febaef7f470765c8d6fd6b07f8903e591f22d12591bbd3af6865e00ff"), ("03bccaed0c9496026d2a85b4056c716bea03069a666cd65a1fe363df6826c3c4", "07894c48c9f7c1670f3e5af22abdd1ad391e3e502e40cd363e7cae42ca9c09ee", "0674df03b70c2ec1e1517a33fbbb171af16c4daa10ed3fa6d86bc6ea9890d123", "2e427a0ccac9a6d4243a4f86b64d57db069ca357fcab580faec53e634e5dd243"), ("192f89857e76a4ddc7c09771da69aff93ce51d8a1aee32ab12093a83ada5e655", "08f3824c9d09f0951486d48e2b76b584841a62f8cc9a59fd44ab908f18d7090d", "244f5dfa18d1cee854934166fe9bdee652883cf0f1ec0c47f57b18e8aafc1155", "01983137a686052240bdcfdfee81fc7c15c1898d99d9d6d152a997a2b87412f6"), ("0fe75222a8af14d2874f903c3da3c1cf22ad309f52db0004419e1e2c66cfa36e", "1b8c34e9c6376e2262b69be27fd592a532e481258ed17943472758e6f328d03c", "20e891fa0e24975615ba5d43d2f3371568e46ae06cd7d07bcb526240ce667ad8", "25fc9db54fc6bb5c2d852b430782c6647f81a9d663f65b2d7b6864b1cb504824"), ("2af1a5f72629388426232d3797de7219d9d72932e7fd9a2a5e1bc704821dd0e3", "22dfe0df0c2795ee7509048bd7a5f0b7e2f2005eeaaace021934c5e334942955", "13e3f39db5761421498c3839a223610236c06805247f4a26a2edcf2d74aecda4", "0c03db0573ac439b9501357d9594e6601c1d12d725d343b7488e5fc59d53bc17"), ("0ba3f6332fdebae8760306c8ac4694e04dc40713f43e31637773c370a4e3d13c", "16324ac4152df4f4b066d7b9742cbf9da35711c106cfa28551e568e014a24e91", "0ff5a8af307c7f950b6baab8bd05d54f2f325c96799d4c9e567390609d1a4393", "2be30b04ee495d38edfb8d9545c103f9ec31135144cd599e654b7c48030d3d88"), ("0e42ab42858a42ab2e4129143729fd90456af1dbae83c3acccc04d44fe5e559e", "11e9fe84492fc67e715de3b3c8f244784f09f87c3982a4e85f5902c6398aa9a6", "0bd1c0e500c551f8cf527f6c89e91ea057bdc12a6390ba41c2d219c4b6898a3c", "0c8a07666c8ee0df923751d270839438f9e90b1f044c65472bafe00a32820f21"), ("05ff87420bec29373eb05b53cc090377538edafe9f60dd6a380869e5e0c948e8", "01de2d3c08fc5ae0ce9780cd0bf33996f918e1f26f19c99a09f95fd1071acb08", "0be679c90ca0aa5d657ed2e1c60d472ea2107da3c38dcefcf804906979035ee1", "27a6599cf853fe8a499c40d15c2b52d76a851ec5fb1453cd16438ad9275b20d0"), ("2b5c91feff914869baf54b7904e7a9e41729480871baad7458023f51dd9af3d2", "122f8fbfa90308e1f1a8505994ed6491faa13fba55e461096ecc35c17c43efd0", "2c86c874581d47dc8117a6749b722ec7c62f8bbf22cc427bf55b648cf69b3f83", "0d458f77d9a2acb81cb2d5f30fb0693de4e08cb2e5c2f682c740859a0c1e894e"), ("0ff0db4839f64a2b69f3871217ee9f0f6e12d1fc89b7d7f7031a89374bb7fdb8", "08b05e21a32bfba03b41a755ced461eff1bb480412c9ec2b1e4fc255f1c7ee0f", "00c4b189b24b624384413f4f94a6ec4ddac3bcaa015cbd5a71060110a0a7a9e1", "021684348773f27e3287f6d44dc1f2461cc8eaf4abfb0c84e58697fe2f06d8b0"), ("091b4e81f05de4c581f648ad2fc6a29d6feafb53b6ada0a8f84925a0a0c8c547", "0860ac6447a5d443965b5875e2fea3cafaa5369827a3f9f470e80cafd43cf3e5", "1ef924c387076e90802dfb6b72ed5d2aeee3b9e64a78e197e14c1abcbcef82fc", "0cb9ebfcebd8e10d68adafc00f9807d13521a9b90a775aa656802a17c9b4104f"), ("1932d9fceb5f186cf4cf2ab428fc148dbb7bacab5218ddfc1bd312980dcaacf0", "2b145c4fcb3cbe6e94b92722191bc53d64bcc012d6d87a087eb314669637e37a", "0790abad4dfc2bf09ca37cd1ce18afee603412f93c474e137acbe12e92561ca2", "06efe6bfeae57d48c16649dc7230af839acebc0982555653d31c3be16203bc0c"), ("1d670081d2b931d023adeb7d6274dcf3cd06068652627c1f2676a0154ef400bf", "0a50bd183520b1f9d8c4aa354af2db77c62d877252acce52e96d9677545f8dff", "0c2d283a911f52a304530bb067d76625952390ec99194c8a63efbee7b6f659b3", "14a4a61020de590879ed044b2bbf88a6712d9995799622fd234b4a2d1270d646"), ("024eb6bd4299d43a9aa073a99e9f38aceb8686a7a30cce296e89622e14457721", "113cb8f4f679d13564ddf9fe4a518ec93fed87cb30f8157967720d26a0fc3940", "1d7faff42f5ae5d36355b4a7e24ca391fc03c175651ba4a0c6a3f379b2da9366", "235c789a06465cba47db895afd6230fa773f5e7eaebae4103121af2babfbfe7b"), ("145180cc6657aaf8ea11141bbef52dacbc8fbd267afd888457f717dc91777335", "206290c2e764e4a336159088c4be8b1891ff2c15b18f7407935b7f2e55421567", "1b6517efb45852892afbaf734e14214b3d818e90722b19bab8b089d37be40c68", "1965fd20b83298a605285c3b972f6e2e1baaeeff111e1c716887fd65149a04c7"), ("15552e858e8fc33836869adc4f37ccffdd0b3854d75d51b75e75c2d49560b951", "12c093e791b39e0af531d8440a127d4a9017eabd0dbab5427b673382a6cc532d", "0d0035fada2925f0118ddab3a697f3054469e72052ba36f8df8e49fe26e4284c", "12a8b13955a0f1c7130d36fa679b27056767d90c60cbc05ead2a88bdef67ab9d"), ("080db7c133fc1513ce93c257deb70722643b44a0b958369de98851128d87baee", "2d462f2e79b488293e5c2ca861bf37a6a4ab31ea1a292857e15b347e82289290", "27b57006aefdd4820142d63abfeae44c40b2b477acae1c50758ba2b484be71a5", "195b9bbb67bf97b6e5c1b2e1677eb396e9c0568bd96bd95a02d106c2d1fc6b26"), ("2f32ca73bb4c528b035100e2120ebbe33363cda2b07c48d4a1090a15dc57875b", "1f5f003edd368ddf7ab348dbad5d44601d5160e89cce1abd3babfbf2e504da6a", "0d580046077db0ed1ac625c4629614a3874095b44c424671d42e145927e3e904", "07e81c88776f96ec3ebc747b44be7312fe0f3f710cb133ca7e8cb25660a866c6"), ("1b36dbf432c656a51c9283a308bec6f0d08414c0d890e03b5016ea1f2d97cff3", "08fa57ad1805819d670bd6ee738a98bbdc4a8ab563fdf7e7833554876e47a8f1", "0aa99f50bf0d89e02452d8907e94a517afb0580e0e36f57dbb18db9fcd5b8c3b", "1d0d925a313046391caedfbee56bd5d9d022807e42bb344171dc75a0e75c01e0"), ("0cc27048d684fb70af574492cd656bc393e67c5890d58bb844c9e11399b49ee2", "1a128cb376dcfe5bb0ac982bdefd4d814c50d33c2102b88b2eb8edaf7e1d5fce", "105345c905ddb1628a9c651a17f9848a1e3ce323ab8e7f019aa0e453665c17e6", "06cf6646dd02422565ef198de43f9518bea985491f259a040928ec40e1239bb9"), ("15e6749b4f3c95a0e41f290722743f38eea93837f07b7c35c0a8201ab5f90a64", "2fb945b038efeb5d5d229bc42fb50d3c6c1d850a30ca67dda81f49ef558298d2", "11980ec12bb9259931aef4a366a18834b6f6d45f90ff385ed4514a826f96af0b", "1c38e05b37fdb3302de6201cbcd20cd5d748eb1ec08f3d7f384177017991c215"), ("2525dab25f30ae7cada61e9cd6f09653ed217be60757a6b275e27ea62d5e40c9", "0ef9d36a1c8a123e77b3a7ef2fc139c0e51b8b48e02d6463e621d647a3dde218", "02c1001d0dbff11abe2ece2ab6a5cdd23ac9d168669759142fa234434dfd7dad", "0fba87931d766189d366c79e9a0b2f5429cbd3365f9be3d185927cc0e6da7a58"), ("146fd01d47f90f4679909a1a5eb75f5764e28db8faa83491856d1d7276afb16d", "206bbd16ebfe0bbe5d67b89ddbeadb9e338635699d563009103b3216ba6978fc", "12c14e4c9985865a3098e559f200fa1631733ffda4b8eb5c911fe718eea99fc3", "1c5295f0bb87c9c6084cee35b08ad9b2554ccd76ece429e85ef22a49e538d46e"), ("16e11f4a66d4981390bcf5b6e55830695a40d57c7a4a2731b395eca3c92cba9d", "1e2260c1a34cade634e07fceff4b14090b8309049ff20c212336b1a4d21517a2", "267b581c62f7ac689594526425bc8eb85fb3e8e19f89c85154c0288822ca531b", "14a82f85959a012b317b8396a66883b014da6152ad2468eca1608591abfdd736"), ("0392e9d6eca648aa8038231905d849a4e8ee16086db929d5f4b9c0a617588d55", "0b325b8bb97ec13ee7343446a3e7d24917045b28cc9fb6b18e6940f990d0234f", "2ed4058472e2b8635cfc42dd01b8f4bcd7b147280afeafd85cfe995b3230b06a", "246747c0f97e07cfee40139877d7f4ab88075287b74135afdc878b76596f02ea"), ("14b9adf7305011ec8e4fdaa4c5533f98d0a7c44d02a7c20de0ac9d786c235b5e", "1f76ca4b7fd05ef42b7cbefd58617e2651e35ca21b504e5b96c09ee0c31721b0", "05eefbad436a2e1a6ab25d89b3d953bc39ec963eb4b31bdfedd32e7735d7b208", "0cf4bf701d38ae174b15c4dbd9755a8225b6c419fc745e8b734114a7bf961407"), ("184f1861520bc28455943012a4a9e1eecba33faaa2ba87fba97ae2131ff355f7", "007a510c678e6a57ed46c9551618e710ac359c5328fd0c5a6d6639fd7dd92dd1", "26ff6d216ff56fff4502e59fec3420c0b7fed571c4c92af6902de6cb0be584df", "1bb7e23d6a0c7d94fa0136872e7479678cdaebd49487b15a15ba7bce95660473"), ("277b10f0c888d772edda5ec92682bd2f727efe3485332dfb8d8284d672bdc9e4", "2d4e936a068084a1a390d3c08cebaab977647c55cdc887546f58d19f428631c1", "1c2fc25223f3db6e7eeaf1b978d92c26905c0fcb98647e66f4b0f335b42712fa", "08f6b4f8b4eb9241054a8eaf15f86f1732827bd2b94bfc8ac47f7ddb42f29e4e"), ("18f7ae253b708320d9af282fc18f2e102210462ee4b4bd491b2b882b215d756a", "1c2ae25025dc791f51f361422bf7ba1373c754fa63c45b194fe40ff2d8724936", "0681ec326875d5bb8287b4db609e54463f25239870f353dc856167c26f6e8900", "006b74738bbe86d2cc7e51420399f971a93d371cca1e95f944085efc81cf776e"), ("133d187149eae1e0c1b748617c8c54fe8d46eab95dd73325594f4bbd57db5b76", "16264af4a0542c04f8e34cfdfc51ca3ed82bd32456548c8881d8b19d7511f4fe", "0d0b9985a6412493bccf5a02d10f06b1566be28f84eb43976d25df4da4740d99", "29d209b164fd1eb78f5a5fc7907382840b59f0dbfb425f3c60c68c5b69ae5c0d"), ("2c12b8621c0f34668fd9ff5dab537a55c30e19a19dfafcbedf59888611919119", "23f471791ea4a3c2e88e506c60db81b59da056290294d06ff66a23e3691104ec", "21c321504b6d3e6b33f5df42bb2603bb268a8bf15e4ce48314baeb06a8c6e290", "0e9e9386638319ab066c0e088f6599a909ffab2c3948c814186dbfee67a9b3b6"), ("2597e717b6dc4603a00d2643c429f9a1dd1666bd7e77cfc8fd4bd2eed37f59e1", "29bcf654f992b188e13ee120233853d8fd1f01e6394e29bdfb63e11c709a40d6", "087b3efcb0c153b2426e598bcefde55ddc88b67c4b9aaca060a4038975351a33", "049f755993ae2004e004ee64dfc2bc1835353b946647d87303b54ede1c720605"), ("06ca39476348e9852fa336cfefcb6de29615a93944061f389ab4c59f81e6da10", "23b556badbe608866487f73360bcd756b7ed95d62c01e207265acf628c860269", "171c6ad745c22014dd633691344f35b4595427bb458309b9ab9c21bb1cda843d", "22ffa3f9257adf5375daad26a8653cc7170576df7413683851354bdca13f1845"), ("2672e4600ecaa000331ea572d371b32cd855de4021d51ae685164739b4827989", "2d9029142123da17efbe1d1abd523ad586ad444989febbdad81800d2ce7e146e", "0a27b773d65e11d6a47db1605ccb9295eec3cfad4a84ab3b655980198ac365d7", "06a746d594d1c5925e83aea504b392e516a531b1f0e547f0971920f7cb318452"), ("180d5b4715d153e34a125a2b0c84148f4c45550318b6f6605794cfdad96df41f", "16faed3000792fdc51bc7baa6a5bbafb6fbde33323babcfd6716b6c79eae3864", "2df71bc1a01ada50b540dc46d7c82be60f2e8a9ef89f2355cd2d3cf3dbe955de", "2b800af43f05f61cdd19f5d3249e7b0ca2ef5072250e55512b05ab990049a464"), ("0b1b46413923d606b1e74030df2accba026819b5a086d2b145d80d685ac573e4", "259016096926ab8451af979c4316804c5089bf46bdd5c441e0da4c6dc9a1dbc6", "058001e06b4facfadb49ee5ab828816933686c2d44438a6e68111ef5b609dd92", "2ea1bf104056c4a4f56d98f44d83ff346562f6c3802dacde7db6ffcf8d5486c3"), ("04a5e79b198a8e5772247416d47aca22894d926b03b8a054e97afb61b66fb65a", "2e7d711d666e36996877afa43cd536d9b4d6356ab3fd790dc48c5510068af919", "2c7293f6e0d3c46087b86ab00a37d69a85b0662146290286a6067f08b4119652", "20c68ee0e06b106e6e6e2cc472c6a682dbc5e2eb89940a0349c74cf5e03ed96b"), ("2391069d885354a0249e8c439fef2ac2a231e87c1dfbb116351b3acda4e083e6", "2ebffed2274855730f8170da70199694207e6b220a48bc6cc90c7ab11bb07134", "1f9fcf64f661d1627b6d8e5173fdac18966807102452b520cb699433b353161e", "103381c166edb6929f2568139baa67c09a70b97e658a41bda457de0bcadce778"), ("2c1351d8bed61c222b409e0202b4ab09ff519b4a0a100a1ca270a6add6d5fa1c", "0e1c06b0e44ccdce6dbc5b79b890dfbc08ce2d6f3171833c2079ef07c8bdec82", "282b32542fa9d1b4d4840707d46d6bb2ca640d6b932ad383eab9728a66055bb2", "00531fd32624324225d99c9fef44779e211596dc8bb4b7c74c07eb75ff137c08"), ("1d8c91571a28931bed84e04ae8778055c6bbcb2c247bab0e3faa7f167cd7660c", "25433837d538b054f8da1caa06fd22fbd540e2d135444b7ed330d2032f21d7fc", "08f176ebff881433eb009b44705bc2c3864b1201b5193cfbd58ac53d3bafd8c4", "222887cb40bd1ce1eebf300b46ccd61c3dc3ad7a4d8632b6a7859cc9b346973f"), ("246c30bf7647243e6ef05fd9db48bb7739bafa4433536a265584315a2157cbb7", "0d9f5cac59b5ba4990bc4ffb645deb7066ab5266fa83163a6ca43d74c047b67c", "1a49a55baba68b603273b7527fe33142755bbad89464213b16cf21e5a7310532", "1959bb14e87526cb4a3f1f64dd2fbfc72f7719f36e4b29e6546e9f2bbe5f1f53"), ("0c19418ce3798a1eb26e4e22ed3ad9548376059142506b10877c619b1c70fefa", "05503d21984bfdf1051958623e5b206eaa39be7830c9c1e0831b345c72f88cb4", "1b1a13d1a8728f0314606cb1decd242f24d90dbb702ccbecad58d30847de5393", "0436d27e79fbd1ff7946948bdf3268b072a2b53747d80de8f4fafa1c3f2ba558"), ("026ae5817278a32bc25322421fad10195aca15b4f6a6e0accbcc056a3600beb4", "1835088bdfe82c8166d6180e439899e37d4369a4bbaf915b26d9f1252c8081c8", "06f3f0c3c655bac2a1dafca3b26c0f95f4d717b8279861164eadb7b1596add92", "11928e70721a122d1a98ac427bc6cf9d2c7d4e4c63287f0e921ef818131cae87"), ("18a7732d553c6c7bf1491ad53abff976a83599d25f60c4eb151a64254886a6b8", "2bdf934e4b01be0d98aab000059150966d91753f3c8bc5d4428ff3bcff582dbc", "278dc7767edbd38d685df5afab1bb84d47b20e05dda54dc8d387a45352c3bf65", "250e3b0512c7d47ec3d951d39b03d65bb63bbf67d0db798145892d3d5380718d"), ("2a1d5587e3e8d929da6571b25c40478178dbf73e44c9cba22f0539c6a632ec47", "1598e1e455856d3cb9a637553fd1d5892855b550272b3f2416690e763280eb77", "0edf178c97fa23088eae17bc8c8f2475b3728f3f0b356ec5d14962d8410b4412", "001610ce4b6d5f7a7ff845ad90b9982288626723d73ddbee38c17d6dcd60bba4"), ("19e3fadbd600e3755da4ac3dfe4f74b41ba17d0b3f0fe66cc8dfb3c5e40f878c", "169662e8c17930cf2a93bfb6144d4360765ddb457a286cda97ef7fdaf184a4cb", "1aeb77760aa1cfba10a57bfa3203787697a6b907b52db7f26387820a12681e82", "06126f923a539599078f490e5a2a6a4c8f7e92f2c48bd8e77e9117840aaaf0df"), ("27f5c134b932c238043b32ae3954a0ea5790feb8ca82953d86398df87847ba9e", "04154a17091bcb9eb587348c0033740b300d6923ef7d28cd6949b78a9c2061bb", "0fc4fac796298a19d89bad0103e76096c805c4a4b009d540fb874eb8360a1d02", "0fbcdeed51642ffebf14003ff948f22349fbdb8bf36f07b1ed2219c68c6e3dc4"), ("07322c70252558b31f075c8f130777fcdb0b916190b6766a2355c62d67091b14", "01da7c0d17e64df4b4463c03b14fca7a2146304132afbbc79d9bfc53cdf08857", "0789e18c87276b4b42618a516e9a41deb7dd8c9e5aa4b27d1bd73391088205f4", "27960653c00b752d4692ac7521ca55082e7e3e5ffa87caaa83bb785d2304343f"), ("201e307d26b96da51dddf423b5b0ad602edd065eaf8a5ed70a121810713b0947", "15d899f36f47d3817a5b0bc16df5e2e887e966956a520b6cb866a8251d8b10b7", "277eb0aa6289fd8ba9bd7d5b85369806b878c0e1e16dadcf458bf701b4f3e2d0", "2e8240adfe55184e020d7dc68b6854b128080c21b6ae1ecb350971ed082f8802"), ("2c12f554fdf4c65de50f846c45eb6cb23ff20e21aec35631798a91d18e8f0d14", "1a2affdb0ab0776086b1ceb39466ee47b3c537ebb720ffefed42a1cf95c65193", "0a415bd603ecdfbd5dcd4dd1085dad0aa70a7bc479a4ff19f5cd912e7694f4d3", "02657bd24359152d8ea277c58c3eb1c203b34e69b9966a236ba106e89feb2f4a"), ("0eddbe66bb81e7fb4a68e802ce1e52eb46ef2a88203d1aa3ba77a33c40f87e68", "2d970174d92f7e77f8b7279625c28413eba037ca028f2d3b2a04129a0a6af764", "12fd094b2e18521c83b2f256daf6c3ee30d50e8c740f578856ca924a03ddaa3b", "0605d9378630fbc83bcffac0ac0a90086a8e8f64856e7094ce8fac2c141f4028"), ("0ae1531069f490f0783242513a2f988caa32abb23666cffe2ac77e9240e2b0d5", "0167f12ed75f9e9155387dc86638e6ab3b01139f07a04c8be8c43f68f1a29202", "2ecbcc693dc73484392bbdea4f513f3f07b8d498aa69165d6d8f679bb4792f2d", "2c9cc13276eb568b938cfe65a36e458e2378faff4e28d000a42de0c78ade5bd0"), ("284754d84da0de0755cbaa1ca7c60bf2b4861de5d431978912fdd91eea9097ac", "076537a164e20f8bb9635ab76017554fba181da55438a94a8f8619dc1873fa63", "05a15055a43a7fd301de85d25b189e9131e74eb852c7afc7e97c12f50f2fd3c8", "0f78258548286436be28372f83ce83cfa1f82fb7ce2e1a18393ee65419b9afa7"), ("075412dbf30e0f4eb62904431f1328ae8efd8ae625b8bd9ac4ecc892a69619d0", "2e71856030037ab2c714911c1cbc886410ecfa8805b97e678eb26a7a89a1affc", "0d573f0adabd89adf11b3e7073ad7b29113c3ee2f02a69b8d9e0fa5144fbc830", "23dd83cf0e488a1dc115fa535d16697a1f3fc287ec1ebbb5f2fc94f23886e31c"), ("1d0d0a0e810905f11dd90b2a64a5feee7ef532b6fb869455e8088b30662a7cba", "0185490e314111a0ccdd48b5492e1b0a76aaebd43a8d8d6167685d9ea12220c1", "18e349c2d38fea77a5ebbdb10a1220e114c6de0de009efe06b36c155681b3363", "225330ba04cbd735565a3c1e12576659872168faa58c5ecf6e41ee4f20902639"), ("18729fc7cfbf172097915da97e2db4c8a50503c932483060bbbb772fc256ac2b", "15da08b5e279d27cb9f126047d5cebcf9953e42d55996fa2a03032d2481f57d5", "106f6fa530849a5f22c49bb43b78249827b1a50784daf2ba737308a008202f70", "05c4bf54419988b01913473105135e2e0735434bebd2fb90db58fc7b026c40e7"), ("1a66a2a9603dc14a806e55b764b108be7e53ef31a2f0b3e40106234cdb5a7f66", "05cad5353b18082818eff04f58fc70b189d1968142fe9fea21005f7239563b52", "08d83c3abd85ef11d66da4683ee7f1afe29bb9dcceab5ddc6687cc3dd607d3c1", "1bca8fce04e8aa7137987bfd69bb9f9a75783de96d1c50fd65d342f9bcff92c1"), ("2c196865f6bef2feb3d0b9dbbca89929c2f38a4a0448bf3b7bb828bfc79ded1a", "1f3e67097e778a22b5e2b7414e06e810490d852efc7caa1cbd4431183352fb48", "299cdf2677d6bc32afcbd51f8e748ddd232f505d9bb030e2052885b535897e2d", "255b0d97d7e906edad73807a8ffabd0a8835068b5cf91c6cd609763f59ae9199"), ("234bb74972ecb56565b43691a42f02a212812b7c00ca7ecde10d6102ca00e6e6", "28304e80795c34a6fcea9edd654b860702f9ed773f880e7d42bece90e7070f6b", "1c052c78b927f82cb2378b731c9d335a191b8ad31f38b6eb110fd32eba542dad", "0c8d1e4dace61dba78c1396b3c231ccfcdf5ee33b84dde784ffe48af2809a819"), ("0ab7e605c7b03082d6d6dc5e68cf5397052115b1aefb766510ae8509450d491c", "2c313e751a3d489f4f0df8cef63f22d4ea4bae2a25ebb6dde846e44a1dbb0ef5", "0f3178411e068c3f28167bdefc55e43215a07b569ba3fd4520769eb2a28a2869", "154122975b51a628fa77a51427c3dd0c617bdb68c8c4a86254bf99413e45fd96"), ("27117f65cb93d3b4255b9fbb8ab47caa4d26c1c4f063103bce59de7ffe61cabe", "1e430ccff13155daf9c5c3c3dce22f540d1c96c36f970c83a16782308c5aa814", "1da780fdd12cf6aadb7a882feede4f1cd3e854fdce4ee918b4907f32a186b36e", "151a1f6f0965cd7f6d7728f5d5281f94e227944dd242d2affa688fc1c6c4e8c5"), ("0bec123f6b5dbe6ee7b0c4dd6f56b90b9cd179512742ebfacaf06978b3d756f3", "205b8eb3688e29c4eb0eae6161cc48a914d89d688e59ff54ca17b82e89f8bfa8", "08740d4214ce80254f59b82ea49901032cb159e69fc497e9bf460039b46be17c", "1bfabcd6de45e4be4fd0c734089bb6bf61810a2c608c442fdee70c8d4fc454d7"), ("2868bd71c9dc356a80ba7acea0e7af70e3559ba660c396986b1aa1223407e47f", "15191ae37326d1651eeffcdaea571765e6f617e9ecdc43f2b1f25cd41ddf8a1a", "17663baba18464c543fcb2293d27d5a9c4f4a2045b5da8dc1d1968f28ee427fe", "0129a9ed97d8701c741dea1ae59063aeade2653635ea96f0ac58c4aa410a9f2e"), ("10404413e081dc063c2a60b084e98cd2b56cba899f6ad5bb2fb535001bc81fda", "1e5c1e6a8dee63ead5faa01a771938cda05a8969f11fba672ceeb8f863794aa3", "08f511cd5f32f73a6ca54b67b4550c9b08959705fa58eac0c646850993243177", "0e514536283a57b8877793822dc126aacf10ee37f9b9bbbf1b9955f0491c11fd"), ("2bdd8ea3da1b39f20d7e6cb9746fd69c812db112253504d30db760a3b8c00e71", "13a8e6d1fb54a888a0b35adea75fd687c6962f1af67dec7623147365362b1c74", "1acc1157de24c9fa202ce0162c5bff9b538b0994a01a13f398ba61fd81ee14fd", "02b9eb168daa241deb288628bcd0515d814a944d1bb37f9640fcf53fbfaa26a3"), ("233cf422ba9a45500385c10e3192f21993fac18658e48fb56769b49d1c67cce9", "0cc6484fcc0ec67a7681a1fe2ffcd3bcdb1c3ca505851c0a8d9f176ff9fbf48f", "105d6a71754d245b690305f3549aef2f366def5e3881616fd0b3a76d20dc9c02", "2aa25298c5a206b3464a6e4e74ee30840a465411076f58a2038a41be72a9a15e"), ("287a986c00cb93bfbfb139c9e046da44d54c8437ab2568bff47e091321b770a5", "25349b33b5e4adf44fb363cd9143e07f01efba620657298b9c8a400720ad6c16", "1cdde8f351286666ff61d03fb79db0f67c0396fc72f19641ad593404f7905153", "2113895f586db98ebb985f8f8257af2995665a53d96796869909433c45c2edd0"), ("090871a3b7da682d70a0cddc7fc2ca3603a097b3fe1b138a78215c653680930f", "1374b44269d126f4ec0d2b95727f77d6d1ff1665779ea364125e677b28f5eeb1", "113ef9dc0ebb9642fb5628677b6684c3898ebca8f50921b5d961fcb05ec95f8f", "11848d5c68c9db97c6cb2c5bb18dd5d3bdebb53e5bda2ef5504f96d7f2457d36"), ("15f90d36873479ef54caf0f0442a7ba468d5a242ad719f2e43c2545738bc2e1e", "01f3b2531cee74cf37abc7800ca6080e0be68c83c5572e83ef830c9784f4d971", "1250dc344c04ef4261042c6cd35665b48976bf427332bb92090b9e9d4987492a", "0db59cc96dc544bd768097c65fc9666b4adb882e41530f37962d21c69549c247"), ("1076f7c0f0a9210bbfe374af1d034174bd3ee8e425e90ea606c85920efd898d8", "1d9b72996cbf7a4b83c33112335fcb3f6507050e29977258bbb5e0112c2b7793", "144f13a3c740d7626a44f85ce84f107ea2d24b3e279fa5de3fc637b120f0a228", "1ea9a658aab6778b3f3ddd26c7ad13dc101660f26fd4bd208fff12efa9fc4c20"), ("001278c3da7f14bb213ff9c03e1f2a878f05b2044accd3266e6bdabe6d6ab207", "15f7bbbe184e1430b5a65e0b9d3d1ddb1080e2d9e75b9af2e535516f065b7d48", "1a517415546c21960bc2216bd93f45577857d9eaee2b7aaa6e67599679ea2c01", "247492b39702f0221728d815932b619b61d6015164f048b0a00fc2665e4cd325"), ("2e564b91ac474c19e0a954b10da814b3f12be1f0f3687b08dd8e53df65b06025", "0e532bc5382716627871eabac1235a5fbfd4a4f7bb2dec2b57ca397b737aa305", "1f86fbecd295154143567982d0c691d91394eae97aa4d415c8144744af5f5ac7", "1b5d888050d4d9ef104898103983e741188d4fc3283eb66ee9cba1dde6c3de8b"), ("00f476dcefbad478ee7b31d4b771ac43f8ae3c45e31b51d25ad6c648deee6f98", "03a9d3f01d9ebd2839176a0c008782bfb11b49da666ae530c56e292a5fcf5f6c", "0a4c9a172448c819cbc26c897226e5fd33f3407498c58a235efea38939783205", "2597186260d50cb1cb84f5b0574d44416023091c5277a368b77ec05f2dc3c302"), ("0f17c8a292f88b31682f629b6736ab3cd7b2138754523453a93c44bc409c14eb", "2aab4dd615e43b9bfec4a5afddcce9ca6327d1bc11f6b0af0198196a082b0a68", "3001856f0a8350d288c2696b9ef5b8bed3b1ba5f4660081961baf8582050888e", "1df5543be5b7ecd083e5fdcdbdf857dfce88be16135a97de01788e1dd7925561"), ("25486d9b2ea21fa69a624806576df3bb6d23344609d8675795d641ac5602c756", "042adcd2a0d702f937fbf51065a78110bd8c06aa71e3b6264aec405f523bf9be", "243ee26f085060d4956a0fc50699cca9cf5e2126ccf7c68e3e4c41cbc181d3b9", "1937793976510a657ef8e3fb5ad96809535c5603cb70d07710f56dfa8b786b19"), ("22a426a16c25e1d9327ea93c8c13eb6d2d771017ad3a77bb45aa9dfe8ff5c660", "0e4995bd9843acfd21baba4fafb03691e61bc1116b3071a4d3c5ddf499f06e08", "2d0c493b5794bb0ab6fdeb35d2112b93036feb43ec59c2c4933402b99fa0a0fb", "088c82aa4e74cf76c20def6e8225f993a9d04670aa5b78c6bd749937b196bf92"), ("1d35a973b949cf4811f043ddc2cfcf803aea6bafb757490721a5e65a1d23986c", "2bbf3d004b590c1cc8a24af5c3dac110d01855284ba6a56591490a9794f28446", "2657ccabd1bdb8001c35465f6c0b6a2015d3e1c7ae56c66ec20ed6e141a82d0d", "18d8300b7e0d45fc1cbef186512a0188128abd577bd38a1b085201c84ea75500"), ("145672ebe030416d249ea188df5eab72510b599e7a26e360da9ce9f97ab2121a", "03db6bda1fd0dda76631749aa57c752a9e2f7c98e031155d9026b509546edc70", "0d3acf34372eefbc599998815b0c6840bdd2ce149d342578879302de1ce4aef9", "1cb85b201d916296587e27d001b969d13a0a67d0a902bac82e117ab45b546a92"), ("17c2b21747fd037084d60c4678f9e35e6f97927e63c109b799a29faad89c6430", "1be50fe2f5f8bfdd89afea4540ea5719a47681790300b1b96ca4f5ae112c31f7", "2d5b22c90d0e66bfc7a1665e4bbe8313ccebc9e4deff81c6f92948e3cec7d091", "2fc8d2f239284867fe0fde1cee70eb846dc314265ab6b8d24e0663cef4f3ea1b"), ("129059e6ba10477c215cccddbc0042e235750d8f0413cad14df1517d4d4f0566", "1fd1ed56f45ef2b6bd33d60aaa8ffcb20e344740449341d503ed71dde2a34cad", "1dcb532689a8048ec7441611c885711e04bac6d0d2c66625699bc5eb879e99e1", "174887baad58273432782f38abc8275cd1cfa1c5aa7252b14dfa768fdd5c8d95"), ("11fd6176687eb2e45d61fc8ff7939ca33149af507c307bdf2e9520159174200d", "08e1ce48f4e075fd4105acec252b92cc4a48c92082499660107d82631eb9105b", "2e700c76cd8a044ed2250f4513702eb0a234465c4859e27cff04cadcb9e745b8", "06c74510c737c7c2a98882a27f2f74ad42eefe74711bb08b8e22f16449df0e60"), ("0e0a8f9d1c6ba5cfcefaeb8810f9480817e5f1ffbd2d7a0bcafa3106eff85226", "04cdc874dbc75b83c65539df0269a75ae9455eac934b8928584daec891ad6f7c", "1ca97637e6ba88f899da21c22ea61afbbcf5b9862e78ed367e4fb8e02938f79b", "1427321290d307b470cb5cdabbb8774fb97923fc678739d479750d7c2031eb2b"), ("18ee85d17e686091e4bcf5299ca93713e81c10ad80b72317056095ba6f397af8", "0be1dad9b886fbf7823807f2744bf540b40ad64065158af95ae6be005f97eb9e", "018799754d4891028aa868fa6d5e45af6631c7364f8d843b25dfe3da64059e81", "13e7dff38b254f60c5e8dd3a83ca4373d35cfd89157db0bb91c0d03c514f099d"), ("158c101de69bb74e7940eaf0849214e29b586796085384435aa20a66f63378ac", "0672285d1760e5681a5966cf328585b72c7344899dc154d8cc5f20784095cf5c", "266539f19b5681d8b98e1f9c8e93828284b9f0f244ca7246a14a6942e832baf1", "26d091a008a90d19bfc8ba1a16d24d9d5ff49bd01cc2f31e215ef7b8bb4ac7a2"), ("2556c861c34d61e59e94a644c5c5af6376179e610f7e7db69011d49c4c7f3683", "13f1591e88ffe14dc13dbdbe57bb1fe81b53fd452236915e8211d10504bf439c", "0643ba78dc69f321d112fee7be7d6a4441cd19aa4cda9ca1a94de442b7232fae", "05df59e372ec1b51f8a3030afab698b1b7a6b84dd1bfb612d5553ac336266367"), ("12a0e0cfe5b0e0778e9dac77f09353cecad19dd8f590a93ad5a6288fbd2aa684", "2d5a181a8b2ee872453847c4f73d3008fc1a8b17324500d3e0f559269e42c01a", "19e216708ace0040d5b8414ee596513a733795199180704092fcb915c7278ea5", "2f88b65be4eef36aee83cbfcc3bd92094579eaae3bb4c3e35f3699b227d0cdac"), ("13bf051815ef77c369f0002a665aea7b645ff98938ee733d961a2cf13290b8d4", "1ec7cf02a233fa3065b44d88804ec3b669380d2dec45fbba60639796798e434c", "24806aa0c1f44c64dc6d8b9eaf37058547ad70c65dbce8b5a95cb5487df7374a", "1b72676ebec29028fc80a6f6cbc00fde0f668224d66cf8e237beb869653af705"), ("1006738aa30f86fa373f84b71477600ffa89ddcac3f0f424460f510555bc8001", "092f526e9c8e8519ab2b9f5975eda1f3098ad6b1e14d1e2e3861db4ca2174bc7", "0c19fad6982a88ea79f85d680edd733df742bea722d8df26930514e56b8e41e0", "08434997ef0aee7a000edbb089c800d6ddb0663c2937c32af8c8aabf718f3a52"), ("16d1671bf73a7b40e1502c3979ed24e15d64fc76c26c966e9a9d4cc40f25ad27", "18e5ea946f99a3d467bf8e85c8214cff0a2998b1a0c05bfe3945321fa7be5505", "2eece68a912a38e0dbc3fa928fa889f47a4f2191c23e64092b7fafcbe6f0dee2", "12856c0095cbac510193b0f9d60fdd358017857e233f41979069f7b2bfe732f7"), ("25dcaa01e246dcdc1c7549aff10c858ebb4f3e0a48438abc6e156634d94fe136", "2a5e39cad676b71510a9c59b1837d7e47a150ed5f7bbf118f8c350947be6f8a8", "1adbbfbcd6b207e8d52666ebdf9ad4b4222e0083478463559c81ea33ca00de7c", "1ad7efd1b5f303ac942ea6e0aff3f41a67f6f7166b5665cd9c14f067144fe9e3"), ("21ffab9b3889260ac74967768d1b30dbb0ea5e4295bf8ef18d41796316c5a385", "18ce7ec7612a7b3b9fb12bab8b8b37bf0fd1c67f00bdf3f67e68e2c480bb83cd", "13ac549a5eab5de0e2fd548317698027158f2adbf1c387c588b8b1d584bf8c6e", "1c9ea41b776d1fdf95fe1f9041ba3435290356648095f7264a997728cfa10e04"), ("057ecd3fda1fb42a472a8e334644209123651f390ac6340cc6822abc443143c0", "1e5334f93ea79c398e5fdc6c53c9d20882d0d73355e8813c585b9c82bd81afcb", "2ee8857d1db024f34505427e3185523a70b92b8e76731a6eb417595c99b6255f", "22f87925038365ba1b7f707d2a69395adf0657f858721d7f044ea9381486add2"), ("21c588fa784d6be87475b65f070d4fc9ab946bbb358d7d73b00433ce75bb9dab", "1dbb11ffc9e4804f0ff08b740b8262b652ecfdecc0c45514e6d018a81226c26b", "2ae2b9997141fce54370af43432f93352de7b24be623e405164fe8caf53bd86f", "1426a510d83a9048a53a261ebf1de694bdccdce70698d03b6b337dc377aa87a5"), ("107f1014e7e93b4f14e93b1af81d1d0542737f0ed6c3e86bbe352bef7e45f30d", "139236cf2dc3d78b90e11b23a527f07a0f8745ccb624586529f5550840e9d376", "14d27e23a93887a8ee8a2d78664597f5bdfcc45c4ee8d9a56b80c58fce4863dd", "06bda36912e841edfd0c106095d28d7e2d3061e475c88763b233f9f29a08affb"), ("2395527c48f4d5c0cf099c5a3cc0f048696d1da65a955bdc5b99abd98bc4f6a4", "040ee4cc76dd183e1cbe5f4d194991c89d8ffab9f8c0a5e21d4d1d701c0f38ef", "06f2da944be518eaa7a05f861461b1b82699b4e3d38404d2f87b24f901b18dbd", "1b19deab2ae68516072582158c76da3e5ec0b4abb5f6f3255222734eab7f6837"), ("154d5f490863d99889454cef34b4625763157b2aaf95115e435aa39ec6bbdf84", "29c3da98505872c42ec7484e9bde7c9b74c1769233c72aa123d48df7706d8c33", "1e92f775070a92b52f8d64fdac04bd219f8b732ec33a22072df06a073a65c9a9", "251539cfe0ce724f58ce25fec56a884b940277b067f581fb083279d94fe84875"), ("0b1d0f6737cceca2a3e23980e57beefff48fc854afc9db0c6f79046466d05d55", "1ad11b0f3ca4dd79b863939834cffbce63b975cb0e58da2c94c54126fb880bd3", "281fda0190a3b386eff9e69b0db5848306a1bf59951be234f7edaa9be0441ac6", "19fb7235b83e100fd4e29fe32ef4b80c821bb9185cf33c77cfba91e5e06f1aa4"), ("2c72ee6815b6c7d91967571a578641d3cce684871d15a03f1197107e1391182a", "130ad01d387b95793581d318fcbad3e1000974f6694eb177406599cdbe04d740", "29034d6a19f2a7e4c760f8dfc0afea9a13b7a8edf6b022864308ca83c1bf99a2", "003e6cc363b5cb7ab988237fa02d22e2b98e8ae8870c91f0b422a00414baa271"), ("1294f8b1893b3e27dfbf6fbc92da26064c3cc0aa00de018ac1d726c164cf4a34", "253654623f75670fe7ec20f922e06a7890e0b8c978c77e739f53bc550af56fe4", "05b44c916d94cad2a3856b748d4499cbeaacd0121c4304b166797840a06f2204", "02ca411eccc4f7a4d2871f1461c20648181afadda8086abfeb583673662e931b"), ("24243afdb03197a9c58db00b23d6591894022643fa0142d1acb5bde754d5ab1d", "1a25e18a2e84310d88ae340a0df9621d669d3c4052e1af558cf90c707eda661d", "1fb97d2974bb3b9f8fb1ba16311015cfcb4a8bd85c1c6bd5fe48c4a435451942", "1e3827309723a14a0d8050230a660562215a599ce02c4a8b0a1048492f0e61a0"), ("2d9498987ba4a3913b08ebadacc0e035fff6171b6d136f81e504f9a8e6d08609", "1f95c1fd10dafcd469b340843232b1a45dba1e65a56887ad2834f908a334f580", "2dd7f4fce54068f5ae4210be930088e3a0a67f7568f7dcfe59aa81d0715d4ac8", "043456d74437116133790a82744201578da3ac0eacc0564a943b4523ec7a60ee"), ("1e46f948fed57e53fd693cf2e88e0012a432fa2cefe73258db4f769fdf9d3325", "2d99e0942aa9a23c31e88303a5f542b388b1b84253173c22e037f0d781afa154", "04702fee0d763261803ba7dcb4db0357b3b276c93945d4d2ae69e4611c019806", "2b803b2b9f3ef7e40e68abcd324b45792f8e88d5e31d12db251f2cc8a77e3c58"), ("2dde9dfedfe2273c3a29a4fb46f334f03f8ba88f3d6c111414d862b3da52550c", "08e0084617f1f8db17670b84af3e3cc01a6898720074c3ef56b39ffbea6cea55", "298bccbb512da1d6feb2db817dbc7f2ed3ebd76fd284bca9f5924273191a30ba", "2719343ab4e391fc38012931bc7618e8547ef06fef18dfbdd7153037cbeca2e0"), ("00b61a680da9c144a6efaf381c5f4ad0c94c099d6672b7acda5d1ccfbf75ef19", "2c48edc8c01b55229a43a8df17106bf90f135ff6ea9b0a3ce0df6b338d5ac0a4", "21734b3fec0c7318d09d6fb413c2fe6002a41e8c51d7f7d40ea42acc9215dffc", "110e70bc19fae22a7d66bd84a4c50733f7de289a20473e6d08fbff3540814205"), ("0873ed1f1c5f0f82b0dbdc9ade482f42e4cbc3b4542b8566544b00211f6774cc", "025fd2f851ee77a82519d8e6bb8756c2b694feff7a4eb4afa1c87c47fab3fb95", "2eca80940f43cbca8a7570fe4598ccc9894578acb657dba91f29d9b03fc0ceb1", "2a3449bba31aa77c0895ec9c182a54611ce54eedf42c126639c04535c60a3e96"), ("23514901a5b8b4eb258b3cf10ee25f728fbb46b7ca5f9edd78146b9629aab95b", "1ea9795bae417d3e60fff6520af2f5f6fc8dcf558942d39586d4b3bd1b0264ae", "0894f6140b73ffd0de1d3cf52451f04839af48e9c7b82566c45cedaf131f42af", "24cfbceeeb1d0447bdad33702fa87b32f1d3cb528c4eaea4451ace4c777605fd"), ("1ce69e8a782b7c1290f53810ad5ca0fde006770b13aab859a288bb20a7c70ac5", "3001a28a19f614ceb3c74bab4e0a2e13e1b29619158b2d4bfe1eaaf9e1246540", "300362d57a1c93af1b26f9a27078b981ed6eaaa0d0411d1e4b075b808a03c225", "1004ea160a0bb7230bfc20d5a14b6889650b23176b58c88fce234b4f1d05a214"), ("212c8a35590f77b7a278f3e6e20789402a6a20def24418aaa7fc06a3b589f26f", "090f6e16978710983a479288ed7b4d2c0854321e71f40dd7ab9c52cd6ab0b0ed", "022d8b3b3bc89e943be7c963fdec1ca547dad242cd4003999a241f54cc4fb41b", "1404e68bc97d148bd9911d2cab92063b0432ad5f367a7bfc5e287fcf3628d49d"), ("1c85e914ec3f31ca6e81cff2fe6fcc0c239c85ecf5f4bc1ecce2ae58f68b4f97", "2479f4cc7c86670ca0d777b3344f2302d33a674b8d4a0430c108d85690e4ac00", "2fb87c2b6c68cfe8e0c42ec4a49ae80f5a97d8318707d89d5eef7a87525970b0", "2d8e8d6baa4adc0d4d7ed3dfd25036f350b8327feae0e11085732c0214310aef"), ("11202e37c1ef9b8e840bae02ed9745c4fcfdd0db23c2b4ad929c8fdc005e6568", "10788dedc12d33aed2a4e99797c519cd2775a17e3cc31b73c054d15925fbf63d", "044449d11117b73cf5280f47ec7e5a7e1230ab1a9f2a226cfd1cf6a6d9a79a51", "0523ea43412822efd18cceb9efd76b89c32654aa6919042d5b9cb30beb7cefdf"), ("0389d13568b0a74a6acf72b371f4f26de25811d3398fb02fdee9061ebd76ce9c", "262cd16ac3d6132dd46b23f73c1225813a396e5eb216509330f625a465619c1e", "1c0973f3874c59d7e81ee529718c2f232dbff9a30af91df8aa9f281b1043a2b8", "10fe2a7e8fbec9f6ca49fc098d9cb93486cebd57cad44f415f253c4fe7e5eb49"), ("06442d54e9ade1e4ce1ad5b0ca4ae3459894c980f9ed5b4193903a91f7158ee8", "282f1fa6ba67feb98886265346c5e30231fe61e80bb7c53eb21a07b41aa52e0d", "02e9a65d5cbe509543e1e23fb6b374e9d00d6f0bf1b7fed117b94870cc02ba79", "127b6069a83d46f737ea7f97d2e5a6057328496a04a25a3e6dc28d95da4e30bb"), ("14d7407d5fd3e2c12dd5c1f01cfea01d06f9fb52a5d361fbe7fcf5b25ae78c3f", "1ffd90a022ea4a16fbff7aae1e8f2733168404de83ace1d85d352ac1a5bdc170", "2a6c6ba711a5d420f7f8333d83d72f2b491c0d80ec153e46a4b7f61faa14395e", "073285ee911a2cc68d532720bfe5e942d18d545621b44aae5b8505abb07d4475"), ("0034bde1695b28eb600d9edd634e231bbcc4730ee40d60559e875445cc39138c", "1fd45d93a199b083fae0711c3c7821a59302248ee7635fe31a632e25b3912e47", "2e8eb856d9cd15ca21d028d6b70959def0786dc72770ee00ae7e67ee8f996c34", "142ea96cc0f7651fd4840f0ff88e9b556f6b7541144043ffae2db89db86383a1"), ("1f52a6893ea57e4c203810a5862c16e3ebe2afbf690bb23859e9215fcd426a0e", "1c733b7d9cd360cf7eefc849d59a2a781e42d2524a065bba5da47ecb3a043c8a", "0a092e374c55197f0ef5bcde13b96f24be77818682d53dcd19625695969b6a74", "181871a0037d08d2fd3653efc125c81e00d811735512238650312fed86bee7c9"), ("2b4c0e82b2ce46c6d184421dc2447ca32632b296550cc1131049337024f806b9", "1308841c9879763c4e658b09cc83ecb6ee9ff234ceb0f6f02b0fcce46e55b0f7", "0b0f443375acc4852921d04bef9386b02c88f1f88c671f276f6e3bd07393605b", "1cb0a95f6f63fa6bd429715eafc6483c4d78878859faf855dbcf19e835024f9a"), ("00236bda095a820b4d77b49a9babd5a9ffdf34671d7c4dc954c1f468adbc2648", "27077d2245ff014b5d003d04abd625c122fd9ba42a4aa98c8753a323168587e3", "0c5d179c5b2cfecc641f7212ae8d7127ff4c3d5ca231cafcfadc8377f643af68", "0485d561892f1d944aaecf1176274b88bc2852eb94db3501a4fdc264e5cdf3c7"), ("20cd02775feda5213e609eb58b2166df09991fd4a75f03e18cd76c867dfd7bfa", "20d022307432e0b7d809f56ff2b115509282195d5194aca732a54649dbe1c102", "117477cf9e2c74e5607f0e415394585cd5e4d603e4632276a320ec6b0bd1f327", "05334ac4964809c6a83aaaa2575495fa3645a7fd1dd4bb40c2ffec92151c8b2e"), ("106aa4012ba0934dcaea88dfb0be2f59df4d602ed37c2371e4eef2dc9f96c24c", "1e12ec46903245a65f52c7e4ca49c342146c3c3599292c95e2b26d186c4cde35", "13145de65dd9752e89eb8b7eee511de7e304ef917fdfdc39a93612a7ad1a4ee4", "25d55b4009a57e5bc9380b2641ac744d2f62113d9bf9e6e629d368af960c141b"), ("207cd0a29951cbbdafa04b44ce849633858913ced1d3312d2f307b962a35c63e", "1b8c60ac271742bf5d270f17686a1af1bedf2b278aa862aaf10b95069d8cdbe4", "24f36c8854360af7d18f01120781501add07cf11c9c274475f725eee027fe83c", "0e9adced82cec14f8c1251acf9d4ed2932b8a6f88ca878ba369ede7b30f8d80c"), ("200efff612470fe3ade70a77e0a648dae5f86a3df55258ea9d6e34d5ec01a59f", "2eab165aff402765ba27b38fe38f870f530b9b9ef9936e38857078a2e9b8c834", "202a0174e34a1de5dbc5ac73cfdd523aa5fe63c9223ad40b5b1f2f6fb184544a", "1dc2d4edb0bfb467c6629cf0d41c20a7b75f047b630128a64f87ddeaee153bef"), ("0095b742844d9bdcddf09a1b491f3359236aa7e3acf182c4ce70bff1a66e2912", "02a8a590bddcfa868e024679e2863eb0624acc91a93b8c3c8325831a6cbb4b13", "20b039bab63ece9ffe351c3266f5a0731b9b6bcb832a46dd5d7d86cb00e04b6c", "12d88078c47bcbc12a47818ec83c5d6f7ba99b5806010faf08fae788bca794b9"), ("206a0c0971674eb6c4fdc574ea9a5f587fd6dc5583499d79f7b0b07e5d0b8306", "273e2410e0cfbdb9287b4e418f49874c8a81879f9e3bd56b917508095c31ed46", "16761675e404a3d42c5fb84a6677aafad40448fdc90889ce95d70d423a247177", "2ab4f6e46bea1abc041c09b71808f980248f5ac62f4109da71cf90ecab5dce5f"), ("02e083da606e6f5c539a924139e7a247fa15e937c382a16786fdfca837a6dd42", "25ceede1144b20ec47452471a96e53d62460da04b5e8bc7aa43ceaaaa4f10d0e", "2005f43b1f98e3788864b971305adf4661a8e38a26d6200a557629d7c036e49b", "27bbb17d344700315fab91e8055c11c03e82c6cf5eeae3278a330e2ea0fd7af1"), ("2b0116e443e84fb1412dd3b90595e649ae793afb55d64d19d24f0589c785bca4", "283a039c22141a419a54b81bd9bbc4ea088d56d5915a876afb3fc4788f73795c", "1de1310b2bd00508846a18ee7d447c27ba72ff2bd89bcb444f78c4e99a3a4c90", "16a2bdd21cd967dfaf2f36cf8967f476619195b04d90f9ced23d21872e65dc67"), ("2c0b11339a35a41d24a5d2bdc24782e1b969d491af7fbf6e710d5f217b71ad8e", "088298b657c04253ee869d24e47f3340fa5d962a5bed193963bcb39c2ffcdc27", "107a22b651ec88311c304ba2799ad945b2696f88e3b02468f5a68333112014b1", "112a850951796bf7ca435dd9d997d654b8c09a382f34be083cb703f08addbdaa"), ("0e5bdd4e33397e69f37b54ad08bbe8a33db425f58ce885fc91788accdf8dd9ea", "176a623f752e9335c7f45db471f598c16735704498d08b3fe827c0e708910e2b", "28d2c942a37f62347fae0051337cccd629195df8d9bcd362ae5b628efc6112eb", "076c0f638d81e6b8a984979f1c3265aee200bacacf5306ee7b5c3b0e46488df8"), ("25810c42134adf209c238869053b8b2457bdce4315e8f2b714d63d4e0271867c", "103941f5570c3be013753a932f2dd06e4b662338abb323df27b42edbfd1dc835", "2dd3980116665078186f99102ef485aca575f5a515bbac47461f85887a9682dd", "271a31c56fad4403eb5ebf88254e3f6d1b18a8dbbbefd9404a71d4bd0c1d32f5"), ("05689986dc19c96d53e98d26c53c303f63fe5245312c5c2fc10b402f98c5690e", "276005261c62f52532c7693fa2bef2092410c3b0c13cb49a48e60637693e03f8", "04eae0358229751702ea26fa602a96964f6c173443c2f30b7509f208dab1e9ba", "17b9b668e436a4f42bb96bdcae62b8801837bbecd78c0b54b2b796b97aabfa76"), ("25753ec0357d0e31b49bce78451193c5a09aa1e73f45219ab107aac35fc2e7ca", "0740353b8c7e1d6c2f78b53c7b8713a0eec71889767461cc3bd14f0c5525dff7", "1f8d411e00660837ff054334bf1babe898502c8403573c54961340b9974dd4ce", "1c7a920f525c283592f0517bee3ec050613c21059bd1c838c58106be7ff1146d"), ("25f0c73010e844b909ebe99048456709ba0ac927fa9a2fe6be7863e2c0e40bb8", "106470bafaf843d6fed3c9644f5a9ded1e5274c7b8bdf60d958d11ac798789e5", "1acc93704c57d574bac3489760151f18b31dfded3979b3bb21b6ada4dcbab8b8", "246c1f3f7d9d503eecbc59e7c6845cc2f12663ce9e453ccbe21a8426a7bf380d"), ("0e7ebbc403ad80228e43b2060beb9e6e19a627b7b77abd1d4b4ddf25cc1518de", "29a7467225d708c3f16ea5f69ead6dc632bbfa56fe05dfa536a2cd66c74de672", "12b1415dbf778f32d8469e8e6b9c194bdda8ebbf62ad2e99e7a9597ab573e03b", "0ec3adbbf187fa72a1f123b244c255042108bb6ac940891955665aa4b6cb65ab"), ("02baed2dd596e21151a79f6075195c23c80474f48187213dea8958063ecc1286", "0f7034925c0666b904f781fd95e0144e7ff629256f2e4afd6391c234a08c496a", "121cd91971cc1440157042bb051c1c7f2d9475eb94351bcafab2f8599165e716", "02baeaed2f5d5a4f3accb5bb69daa7cc4ea2945f1e1529edc0fec6cd7e0d005a"), ("0d4be7a8f01460e9a84a0ff5f44e871e13105a083f8415fa560e9d19f73de7af", "1d0cea525bfdf2ab90f29482f399865a139ad0877841d345e319c8d2f726f8ec", "0418d8209de8d1a4ff6a6bb870a925911f6f87c62888ee123637354036d96819", "230650f0d3e79c86ce3c6a689cac551fe6fab693b15ba90d6206a0830f1af154"), ("093bda14691c75a7d8e2234bbffedc8f9c68dbd68aa533cda42fd519eac7e19e", "2ff4aa5c5f74e2315851b75ac872aa93d215e213ed0e1e4da4dee576a777b7ab", "055bab7de2bc0d2f89ae977f66b2287491109a6999850ddfe4a0c3a1c45ce16d", "241642e3ed14311daa3259f355eb1f0e4bcff2f6b01a4fc957968bdb834362de"), ("21d5abc332f351d34b6582ac27ef5b3197cfdfe7c236d25a8f29408d03d0bc52", "1e2d610a9fb39be19c4f42d5aabef1684a46bdb85e592dccef1c7a80093e3d7c", "0c44053342f544df1bd924135e99b1463d989a9257a355cc0d2647d836bbf8ea", "2e4ca5d915bbce676215fc8cf70d95dd3241505f8bae2bce13a42e5166e0476f"), ("250903eecf47bda27adb5ee9e0056be2519114a0cc6e8e3f813f74ad9ef28415", "030eae3f8809f3534556929c3d39c30a26e661605c54f67742f1a372614798d2", "0e5c81ee8d3243dc3aa8c4eb96689a85209531f3aa731812ec3b0b5cc3608e18", "04e5cc1853ffd30ddcb17c1e312bdb3ee8dc05906642159b3f24b6eea8efc272"), ("2a32a34a9b99827e636ee13f26fbb2bd2b7e03192a39bba3d988f7d66957ce4e", "2d70de52ad13c5334b0e83e15f4a01b317efcb585e387237ba8fab9b601c1a46", "1c46c5ae1762b7dcad3fb2044064f46823883588a515cf17f13d541b5173da78", "0480f6b5ae48765434748d2c6f84863b13c51fbe2b0b1b2aca3845707d7511d3"), ("0c433685abf8cf1c124f6f58109b391776ac7df3260753a275ca2f6383399acf", "10e10d51c0fa98ae49e87ba50d7b98e820f2d1476d7942586c9be1b5c6ca8a73", "0499e94396f3b1c33085f501fe77a1ca01df0e5bda31ddb6016d418ef32e9bfd", "1834f95152adbe8671f7f88772aa4afa6ac46224ae8cfd2cfda82802747df08c"), ("093f19499e65e99f57b693a25bb217b8756436b13b8159372adbd51de102286d", "201960b91c9969d7acd205c67a56dfc8a804ee91016a8e79673022445b9b534c", "2e0b83865e2b4ea684b59478050d7c2efe4171e4a598167a3621d400a8e1e67f", "2cfca91ad027ff2ea18156f5937435112e2d6dc54b06fad51b0414bb4d14dd68"), ("0a069943f95f44b87fbaa2ad3982705caf21f3a6d1e5072e849af98e31d5cc1c", "1099cfeb838b11847abe78f321bdf8155fffd3e96f9efc134cbf1314049f56ca", "21c261001792891e96dd6a5deac9955098a7002e59cef22a004dc6acb933dda1", "23106af658d4e22afe457b1e9c414dd12843cbd1270a53bb6a31ef685160a8ff"), ("17a36713b5d73f4fbf3659bdd7aea4eb347e97f298fdd4810f65eb3338dbdd97", "163e26aec7a652612fe8f212c9c5295716e575ccf815d1a0f4086d704d333f82", "047d67a5523fb751340fc43634ee82dca811247e83cc83120e4e1630206500d3", "1418c90f5fd5435a17d483d1bf231b3e212acd5369a6c1124ebeaaa5990ddefe"), ("207e5e9f0ca404fa9c88995bf9fd0f6cc5bab791950e156c04d30f52b3858cc3", "2f5bd4e1623c078bd84cb1b9db953c4959bafe9fc93fb6e0360c64578b93f3a4", "04b60a3e5736b6aae169aa4ab13f84cebce771e8beada1a52b19ce28baf583ec", "065acc811c3efa08148a8379a955d78fd7d4facee851859f86f03b1290234872"), ("1c6b635b6dd645d6da789f8fff034f6360e92753734bb40b00cd875e5563c28a", "2166aa2d48afb87b52da9e044cb337e9cdd13ab9a58149c8dc988fb6781d3fc6", "0946372c02222502e2bbf8deddae85e0a2f28a804dec6920b58aa4990abbe3c1", "108f88a5aa14abc1a704475b4797ab41243941b54282b3bae83a4d5119d97b64"), ("12ef673c2700fe1ccb694d0e34acae6ef728dca2878901450bf5792f95a78b63", "00a3473b9711b0007208008681fb3743943a6afaf9a271ba2b90935904810a68", "071c5415d098921085eabf90cc83597e68729c3aed451d91c92820b8d01cbf57", "24154adfb1732ef76eb4462f950877c588c61f53042cb0617b8ee985eb08443a"), ("0fc4595dba6288f2ca5144eacfdb777756908ce90ae967e0483a2454d35aa897", "2ee88300866670d889f6fc19f96a1bef0854a959af2393e0439dfb49be0b9c42", "111f1d1f29d444aa1f78a574ba90c68664052da5cb4cdb162433349e3b0ffacb", "079015f7da1ca9be4e6558e4afaed5df79fb9729636701ba1bf9cd15a08b02f3"), ("2dd3d348c681900a44e8b20a12b9bf3637e4ef1cfa8714215b280be97c291161", "0e4a06af63bfc652dc0229e24e8017f0e76d4ffbd35bc2acca2110d52370ba96", "2b950e8ad3b18db20d52429df9775e2d7c66cc552f0efb0a2d41d883573f638e", "1f9dd372cdea12af9b9553f67814a1f0904ea0437241fd69d1eb4653bd83afe9"), ("165a5bbece061ca8aa70418986fd6327c39426edf708c52307423993ec9107fb", "26b4123d76cb32f269d32f76b8eba2074af2cf7aeb36233b92b879acdd53638c", "01323cc46f68a6ac48559378a2c846d323d4546a4a224509430b41048dbd2575", "2ba110796c318eb01d7038c063cfeeb82c42f22722f5cb3956905c9f67d18590"), ("301e8c14cb4674a4b3410c97f767ff5fe68cb4ef8397edd4d015445cfc924ba0", "2e86f2404735c2527cc9941690ea64f282cdd0aecc279e934c491631fc2fe497", "270ba80aa428233d74be716831d422ec959448f9bb388818a9a31ad174cbb629", "206722d40fc334ba483c10780122e27e6b933b3008ed13de82533864d28f4d06"), ("06a99c5949ab3812c1aba35a12d478ec072891ab41df45af4e38d26393eb87ec", "1e9b7d2fd9bc24e9e8efdfbec9c52c76cdc5be2525fd0acb825a8040518faea8", "1143d833d832e64974e2f98ee1d8611e065e127c89c311760f1689dbe4f6c819", "2d288ab808ac2c098ffbe972de22033cc7957228464cec9d14b3c3135c0af14f"), ("0920e5690acc25e021802f6a3d27d2a39f7080f85cadf1f6d3de3064a978dbe0", "2fa7482412af47102e9a5d243f358a26cb4978a16126a606584a92e1d66fbada", "02822afca8e31de938a53f3466117d3a91595965e7bb95064c7978ecd43d9cbe", "23f7af3a02c9fe7800f40d0f6dcb00e5cdbeac0075213a33a65b21ed55355ef7"), ("2fe42bf408889a5d97f39f1b41bc8641ec4c9c86ef35f4c624b61c83a22dedee", "22c56bf7e452ed80744f67149a4c9b9b0bdb6994e3e69bf10dce1d5e65ef1d84", "11c1106ec06505b3c4dfc1e8c14593052b9d5905544caef0273d852eef4ac095", "0d3ef7eeed6f2ba8dc419092265a9b829ea378a546e1af89ca6ef5d47fb7bdbe"), ("08f8c9cf981d5f60831f04540e5a39d82c1dcd3b4d308373b6b73f7a05468f5f", "2812ef095b9b8167481562656a41fee613f264fa7409574b6d40091b8db3642b", "10292ffcbda2858a1dc757653e084eab23ff86660895dd65faa3d1376cbddf28", "2a537281bac830fb791bb459be95b35371441f08a4b783f01eee8c2d0f732aea"), ("13540f3840228eb03a6e4e398df723775c1812edc2a365c7a4e63ee1d0590e38", "0bfe89f01ba36513dd1c71eea8585339fadbe035c8da8bda37e92da2b648807f", "1f6ae0850ca133b196909f97590c0283cb06dc2b99f5ec5003268fb6a0e005c8", "03f870e30a2e6b0fd875a37e9aeb08e12a785666cf37a777cb6132693b24f23a"), ("13204b018f83785a249288880ddcab042993a6cc5ef390602b6c26cacb8d6755", "0c026e6b1d1f96c91bda5c0653c3aa31d68c93be5263a0876f3b16f2aa13e1f3", "17d138b47d8445fe403754e15e13a33dfc00d91bf5d5117b8adeaa3610332539", "0126bd484c2638bc28e682bb95aa65a1739c4de38cda8265648591074a5c4396"), ("05a6987be6898811482fe85af7cf463a98fa991ed2ba8841c439882d340c04c5", "09016aeeb4cc462ed1e4cd065c0cc838eda33ebda25e8ca38268809febc8bf1c", "142dc0d5c5f909bb55aadcd1e9e4f118a42c18241984bf499e255d960eba7d7d", "04f9c36f462c039d10c983bfa7779956d6463a00191d37f5269f9a9c08382b43"), ("0d262b63b4ca9ebe7b731db4d789377cef5a5053087f892df8c351a617b87358", "1d6253cdac2fd73f1f3c6a107014451e30928ab35f4b8dc9ecd50b12a397aac3", "190c3ca9b349140d2dd991e6c00e688a38c5fb30291f21176733add16bf0e660", "0b47c0a73c54b405d8fdda28ed9c66891b9fe7f4db20dd1b4665560892492dc4"), ("0941852bfd651e19831b9b13672a3e39f45c63aa349f77690684808a5fd7750b", "18521e0eb4d2eb662a25d6935c0c04b1ce8e0e482af29510de5a952a5b0faab5", "0a9551ac1bf44867350685e4c8a5f0abd5aa6391c3ae3bf26bfe6ce359680d60", "004fe20f88c4b99d89258d9b0e18903ab8a10b1bb423ac621a8999e4be9fb3b5"), ("2b80f33461aef2a656b521711e957d892fb0095fd7d1f1ab50fc6acca922f1a5", "194426c412208b62e96f9eb19b92fd2b1d27aeaf96796f73116fc0886a445393", "262715c32ddd79f54043f34c3c8849d42bb7af2a8b8d64c0377d37d568614ade", "1157bbeb9ba78a69ef59c408bf2a5607f5cfb20a6cf5e9fe0c5c4a3e2bfd89b9"), ("0893fed3779fc966534bb7fb31c3bf71d250f9180f337fa6c3985a9919cea7eb", "0a7992b8ec48a5ec5fffbe0bce589fe58e7fcc141cc7ef3bb538cf41a2f54d92", "0d50559beb472d4bf8555455abab85c1558cd576a358e5739cc1279638b363f8", "2db75fe15b4412a4669bdb9a9f198fab3bf97db8061bf2c63dbe78a85cf656cc"), ("2e0933af5b6f9c5e92a7e574c548b65e50fccef11324a5ab5514d7f326da81e9", "12005a9a42fb95530dd78124cfd65f0b8d72712b8de27127cc6c12f27c7c02eb", "1134374946e4e527617c16879f865939447add419f733168eef9494fb5a7c552", "1ac809bff55b0e75f2c7e6041a0de3f40e35bd8acb7cb0a26f2b61d575e91ceb"), ("01417abaa9acb4bd05a52da4b08d5a4423e154b1189a2559dd081c1c6110b9ad", "040b1d95dc13b5b70b11bb0446935df2a2c8136339868384efbb3572e11baefa", "1ee0eae1be4a1d720760feb4c132962b08108c555942b31824c3e1519182697b", "09277d4d578d0140e01dc2d9cc3ab68406f273f5c81ce04e63e799ec69153d9a"), ("2bdbc64877e43a347a4403e0296c5c237a106eda65dac82423a67f857cd9e9b3", "1dd0f4070421d473faa6f08df21c50340508eb639c20451a03b04181f7f3b866", "0d8a7929c5b48943018a98949d790fbbb10d98968e9386b0400cdb00a73a1b0e", "18d7c94bdea4759bd9e9ad1e9d2396bf648616bbc3ea5dbdac15782c4091887e"), ("184b078a0369b054e04feb15e43d6063f49ba5aa45ca3ab34565832d9602d50b", "01ade44364de72f57768c6b23b111058aad2558d33b6aedfb97accb42505c0ee", "03cd1587265f9932bef3587459bce61eb41d1a186ed2646adf9dfc0da8f0bdcf", "049b3a69ce86fa3a214afb3b25eab17a8bcfafe71d22582259af275ea052d667"), ("1a39dae6cc793c031a24cdfb1191a63701f2ad89de41f2d73d2261d7aefe68c8", "1fc94d2ca3a6edfc6bb335e84754f44ebd68c4af89f5cace1aa513f20b393b67", "2d0174815ef1dbc8b4f74d1987358dcec6d46af046d0b6f6ed05af0712e02d74", "1e9132fd1bf354ec58ad7d70bfb0618035065eec7ae073423f8b83d759cc9957"), ("06d345e0571a32d1c7148cc45ab4e2dee157b3bfe760bb29675ff5975d34cec7", "0d034c74a6d5aed065b5891947171ef2501c067da6789a0777e62e112057cc4d", "21e59cc897865028bd75eb2b54b90c122feec480b123af6b0417678d4882ce50", "28807bb4f93e03575ac56a83988a59a312c0f18993b106b504bd80408ccb44d0"), ("2f8d89458fe64f88acc1e0e8975db7a8bdc7979420f162e7df211531fa36c376", "28d8c2e7f1ec3adac92e4025eab4b4c56a9d33aebf57198c7a540f3605b755ab", "28363fabcbfe8ef149186c8de76abb054dff98050e8df663358fd72cee3dde74", "15cf935f3c9abc3959cade6fa29ada9f9cd6c3b3f33a1cdd0931c015831efbbd"), ("2bf000f617e93657f2f106a2eb0362c493af1976dd181b3eeb7c5b710f03d44f", "3015a6e445a3f58ff7092da08a7e3b34e20644dda1c56811e6c92e1ef75474e1", "2dc7efab9ecd55953daf123a8a72b0eade7d6ef278f1a7f7f8cdac2382c48bc5", "14da58e054f7739a02204fb8ca65157080bdfd875576fd15e65197fa8ce97bb8"), ("2edc70c4921d7eedfdda52e0d463954c2cd1ff789d30f168a5456e6ef130a916", "154ff0d913f2a40f07b1bc34c9e19b887c35f93eddddb6454ea639a069cd6520", "0eaab2f9a291343bc77b8e8982ecb90154806bab25d8294183e1ab7fcc29a12c", "0b281fb8b6177a5d4b829fdf30bfa99ca34b631a40b0d35407dfac11c96951f5"), ("276bcadf786aa198bde75c2a6af654608e5f7c6763270aa4e353a1babd06ccbd", "186ec09d5c8cec37d62b6b6b7fb3df3e9524a72c5569676f3fd35510fdb52a9f", "1cf7d99e7f24cafdd9dd2baa6f2b43be85c60ea7fe9e8f50aaf0c2df44f930a7", "11a38db5a8fe842f8427cfb39813e64a376de19374fd9dbbe29ecdc542d4619d"), ("223e03707c3701c868e22db0b93e6abe8216175a85072f67f4ba6f52fdd68cce", "021a5ec45de1d9b728ddae2567b1add906cfa5e889f962b8409f8a7b9ffeb189", "0cc0c6822ddc134b5a2508d38fec7b0bedae97bc3d26f33a7ee25ff140a9928c", "232ed2e5fc1074cd5861047804ee07abf653ac51b70ddd5ee36e8f20fe96e3e2"), ("070c1c7403776d2fc2660961cbd5436438f66be32f9cb686d78b97c6ce3f6d38", "200e452d409e2589dbf8abe4029c44ca7e7d4e7a86b0e80cf7e785d1347874fa", "073c0ca1105b93c2e687021f1308084fee3789dd79851587b9b58430f4fea45a", "1d70da44bb1b6f098552365aea0e0efbb2f9ef68202bf79f37209b4bf8952b25"), ("0bf84c2309658016592bbbd657bbd56801e7aff5568db3040c8d75f8219149ac", "07c719b9a6f198d726872418c072e9a1fd21f130a52595a58d74e86286f1ad0c", "1bafbf3c6d0ebcbb25e04e25b5b6ff081304546cb66d4d74e76b6a022d9cdd67", "2c0cb1854d71f1fbc4ba31fd5dadd8062d9a7bf395046777144b0b346f07409a"), ("1907b0df59841b66dab736dee4f9bf42be7bd7e62ba1cdc5b445b17037378c56", "1560663302c2585a42c9f0c98ff488aee917859d7296e449be9cb35397d72e94", "1fe32de85c7ccc3186cfd1ec6feffc74d5c271c42feb5b2973cf432bc03b2052", "20973d3b93b2aeb8542a20ab77747c5c17f46a5ed53c42de5c7b6fcee6b27453"), ("06967643c22af3b88b54ac66e2a61db86f7f3958bac57e3c94509e6c87be4454", "00aff02df983b044278fa5910a7667471aead5ef3a3f60c0bd91b2ca2b8cd8e8", "117318a79b744b71e68d4341d1d3a01d1891b7ac5414433ac3c3ce59745533bd", "0a8c1128be20aee9f3cb8d4288132536b538807f901a7e9674b817cb875384dc"), ("2140ae6ccdde03e1dc8d460c6b922474b2fca69c4ec51ce490d4bb04c27e83c5", "0328d33db34ee536f33cb6c092460ed17844b7a5d467eb168d538b15945f6fb6", "08f990ac26338dea0038170110a9cee773a74b100252bf2050e752f53e5edd48", "08426abfc06d23c0f4bdbeb30b463e07be843801926d8734f03709292e53ca1d"), ("1b275efa15de281982d0bda73db2008ba7d56efa264b5ac4cc88a5e93f61474b", "26569e1e7620f1e6b9bcec23cbe145f66fd322708a99e7480ed08ee77aae7a62", "2e40bba5b3768f10acf36bd4ba7bcea5e9adcb9578a46e7703d6cdb6a1a8fb4a", "07a755e3fe59b82d5f5bcc615e66b0e37c096b5705d8d539276f58b8e1b199d8"), ("02e58dc79619f7439485a48fe9103c9722c8a73e9a180e83c3c1c049775fc590", "2f808915d9fdf1c339f3720841c8b2b8a80f197a152076595a286dd980636027", "1933037d193376c3ad5773250ff2cd2fe878e2ba48d9eb627561144b99c68cdc", "0b54d2b50f36823cea294b30fc43be4eff2924d842767b474749f2bd3ec06b22"), ("021da1113aa5d69d9d27f1d94f0e1248e29ac21872e99e49f515cf0588662939", "17c281b5bef3de73b2c611425d8f0f0f096dab09808d17fe8244528a2d7b32be", "1819d7433698a8b41df78c10427fe04b33c319f5fa47cf2d02d3269ece74729c", "03a54fcee5e0f86bfc266359a97bd38c722f30822c7f173d10bccb493f09bc97"), ("22aca925df83772adf5f745274492a254c67f5b2e9237c3a0b596ac9f09e4d10", "1d172b1d7ec8571619e37f3eed0e91c10144a830952d0611648e25202b0bfd98", "0e294219ce120b618665195623dc46592a1c61ec2f7ef6230aff719ba8f09dfa", "1673f88c1585a85553dce67b1985bd604fa506f12515be17bbdde854fc88ea93"), ("16926401957b9a363c626ec9863f2bbd760c0523c6857b5ab6dd595c791727dc", "1fe5658988a3242b35276bb3f889a4d18be85e7fc06665ce256227e6b86df26a", "061645f60ab083da9b3cd881f76cfcae7cdad5556ff931261d65ee54ef59600d", "1f0301139f2ee8df8dc18e35dfb2c02f3f58b2003d0cfec1d5c89eb83bba8a6f"), ("1cfb5721ce6ccc75eee9d1dc423a3ba067914556b9451e7941ff71c03ede640e", "035b04b1ead7be75c6578457409bebbdc8f472fd025bfef94d68b61f997693f9", "17a9fc491ca3cca9a69ac4b58401d6f6389c174bc5f457befa3550a311a3d89a", "0658daee64f363a94983b1fab74ea30e5621376a731fdb4d7a51da64e52e4690"), ("2200062f4d3f4ccc539acdc0faeaececed29f6a75024c09db00ceedd6d0a4485", "10861e7691be6dc13a5091007639c4395a529b460a88b5929189ba0bc62c55b5", "1d57cd9873a1f6d775033dd67c9d7f38c9d22cac5c8068223a435b854517d5b8", "2590d5d716c800b4d635a6f6da4b8a7382c0348d7655c9471a165ade43299b65"), ("250d6222d3fd42536cd3f24ad4ab6808ba907603650eafd65ff637d5b22b7b19", "1b3f5a9900200e0cf16b21e1ea69b9a0b1ac87b60e16d6f515b2080b6da88745", "233dfc4cfe93b25b2abcf8543aed218f53ee1c67af08e4eec1827dc6ed67f9a3", "1a712debbef7a41f6b7666e797d8d1ede431f85876209cec44f3affe78580cb0"), ("1796d77230573c18636db06f80d455ac16ff476246aa1225e7516d31a497d827", "271042d702ccf6ec597e634ec02775afcae4d3d673d22cd731cc96cdf6d16cf1", "200e3a59840b977d432d4319ca5c6f1859108a82f881dac27d196264adbe5c94", "0698f952c94c0d41077905641764bcbe28fed08cd5951a46b084722fa645dbda"), ("20f7b9267a8a17f268d1b167bd55097f06cb4547740a26ca811ebede441463c6", "293e44c7747e750fbbf6518e710e5eb924c34515b3a217ed345dfc259adf046f", "108763523cd3efd377154428972ed206f376a565df145bbf79e367c5eebc0f26", "14f415f48507bccb7fb9b4d26ba398296d97e785627aade9066a081d3b192657"), ("0fbc1becf4cab2bc9209710b8f8129ad607bbfa5323279f147ecb57130bc25bb", "2aa18111f14ef4460bfe42b8206b6dd9147b4f91b5c642946f9bbdd7b5970da0", "113bbecb94c7f5d804ebaeb21d418e07de4b7f9ddc4c1a81e7b36be5911af374", "1b04e4dd3e0a081944b8587cf243b82e0ea9c2176f1345d405a7b4e0799db771"), ("170e8ada5ad81096b42ba6c75a62ad016272239fdb4c0d43b14d952fb24b6e5d", "25a6d6fb0832df931224936309c652f5ed30cec4333aa7cdabbb736e45522a2f", "0ef3e272414003d21515791023a0e14ca5687e1786d1e78010b2ed70fb22aca4", "1f788cb148bc11fa863676cac4b23b578abccae3b692c27bfa6cfbb06a6d6263"), ("086d935bcd8fea45d8b08ec37f7dd3c7d05f228e08518cd07f5e50cf43444e5b", "0b936720dd1ca2bc738378ff2e2915f23adbe29c8ec35d2d6686923c5032093d", "21bb53ca55b35ffbc162d4c6f1b9283612fb4a261ab068497698cc9fb83d03c1", "19eabbed9ebe2c2b056df4ab82a4b2c36003fc6318b9423dc3a9b5916ba22d1e"), ("051c3b41cf11e578e717c9ab1401e08493c56ee3a619545d9a66f37805f2e55c", "2b2744b23fd063e255c22fffcea43db3f48ee68e3de53f3ccfefd1288c222e2c", "15ecc1081623a28b01d6c185bdd7215a3d8b119fe246fd080af101e0e2deaa6f", "139283e403c4f7239b7da9596adc6d7ca19ff599389f3ebe63c46b639838c942"), ("1324ab5ccb3378656728dcddbbde68db0c133f4cc1e9b777986996f20c42f0f7", "2dcf8d06f8bbeb8448cd21b0e9e616f26aa39d231fe5af2258f3126d63630b2c", "14346b573ef82247ac08ad724f402b65f358336dac3551495db268429f6b62d4", "2360a57167bd5c644a7ab16c2013fb591596d98e3bb84ae7bd0dc032edf1c150"), ("18acf7f758ac4100c6722bdbd8c95560bd7767b7359f1dfb7bcb5a7215264eb9", "1e393bc51ee7555e0f698e3f5a27a5176372353247ff5b1a0d5d238e70ec5e0f", "1819dfaab13909d1f64f7f856f60e6d59759db32f0c5fb66993c2b9fa8950ff2", "22123eac915dfacb2675bfcca839e6d6828e3ea874a68f01e9ca611ac186719d"), ("201cb5e62c9f7571a8db9c4d38b0b15d2ef10e86f9a265138e9328cce0061549", "045074a3608dedf65accefe155d757b250c46767e214168a5fc01bfc04d68c46", "22bec6046d2cfbe55688a3d293fb1ad2264a87627fe37abafa7f239256f281e3", "07986007e69c761e674f913d887a0fbd3cecfdb20b9fbb068c68b19d2ad2f2e8"), ("0fc2a40aef59dabbbc6f57b62d6844453286d26ccbe6442158827c0f2319fd4c", "1d724949483be3b5f106579468eca8df48b44a414148a076f3bd20ae16c40260", "130f82f978a53bf71185299988feae9d2c0804d2665bcece92080c59c94ae1e9", "174a7c9c0170d78e169dd6f944b0faecab77162bd13bec0f7e3d8cc1548987a4"), ("2841cf419e73513931fb219369bcd5ae7110e478c9b26edded318b84aea726da", "21ee19c6bc07912b7b2a6900d396f52396ba263cc0265a44f2e36804e52e96ed", "217f5667462febd72f7117802801cc8527a94da1b7318dbc3b7a1f82bd96d68f", "12fdbef0e0ea41e64328e60c6274388f970b0b4c88165e1fe18796f8356e8454"), ("22c72fc7588eb7d83785e3a511712de410780624739076c2d7f6ccf27738bb49", "08b6c0213e59cdadc3d4a40b09f9ffbfbbce87959543b2d52a6ca7b377b04967", "01b763cae272737da3c5f505ac78988051fa577e7866ad9b669c8d1660045af2", "1d73e356685f6b0038ecaf2a257e3658127675edd19e2ef1890510808b02943f"), ("2a7b918460d1207fe34451988cb1af5da34660fe4e337e3c14147df1b3907cb1", "1ecef42edaee412616f8082ef9bdeafaf695095416213ff4f8281e0dd009568d", "017eaa1587c0dcfdf8d3bc33456248b888dde202f67c332ca36f4b321e2b0d29", "1ab20497391dd4e8538b6f543480740b737f5035bcd655c1daac2fefe9608021"), ("2d42787d7dc32782e75d65c13816f6f9a0ea1d9c3be7e4285569fe53d1e45886", "2217e114e97f08520e8afb46c171a1d25198545266ce4a19c408db5cadfa5a49", "246ea1a1d973a12c16b1b51c287471e5d36c41bc50a4f12c9e567d0d7e133239", "1ba84b8c49308147f0bf88431d336b08677e53f9e3bd7eca7ba196ca8192a0ce"), ("30147207b98a7a33517edd692d7eebd2a16144a253b0bb8dccccbb91d71bf9e1", "0f708d9a54505c16abe516f95477aed723f6e4cb65e564bc6d98ed69170b8270", "0cefc269ffee4a91a77b27b937b967f8fd90792d1f2c27618588f3311d66567b", "218c1cf86a5c3eef7cfbb9fae1fad101f64c0749a5ad73c34fe2be6c917117d0"), ("146c9bb68f6fffee3bd46bab4eac62a5bc6f58f4288c70fea91667c7af375d28", "0e5423c4027b69a01aeee0487ae10ac997d6230685cceb613bc8189a5796b84a", "23af154db8aad2d8f6adbc890ab47a48c9d599fb1fde2312e7022d070098bfb8", "2697d0bca15a31918588bc09853e28fd177216ad87c54fe192a337ed056e1eb9"), ("17f318c92debf173e76a9762c70cc6b37252498239e703b2a5db129fbf3d776f", "10407729ca783ff76b5ff25e4db8fc1711d40cf83623debc43d19bbee30741fb", "0eeb222e7592710221e59d68eaebcbb1876e7f042eb410a5f264b6790de75e19", "1a0d8a2576747f59f9e70209939a6cff85bbfb7149ae2ab83d1310144f0aeee7"), ("26abbb66114b1ebea3c08666cb75398c10b19312ca3cc5140cfd63f845c56052", "20826ab709e3a5cd83b04083a840d71577bffa52393bf695c6a06c4950a63939", "08391a9fb1b19d67a0563252c7850c6f143b08ac7c5403f252e7c74f7eb4f47b", "22ff3c94fe33be1398f852e89135d78232721e1c8e0646b5d1c1e12e5300d13f"), ("1e25ff11178bca02bf5e6fef0b7ea2933f9cc8be94e052428d10741246b96193", "2195daf00acb5d2725cf7b0fe3c59779221fbb3add8e0d09a74da2bffe0c45dd", "035e568eecaa792b5a9210b462eca6bc131d915c3e16da3ccaa46ce312e1b6dc", "2cd8c7e9ae4ab7785ac5483e7410d29e97610c0df3ae4cf9f5a199a451e4b7af"), ("3063b28d06f72f21777d52b9de3e54b8cc4bcfc3f559c58b2e5bbf29bdcd6bb6", "1da5cca54746ac9f921f280cb26c9e7a946100c475f9c2ef541931e793b807e8", "15573a49b18a28ea17a115a53a5d506387450262b113a48289411b1b87957b38", "04af3dde5a50455a4e2e9b6e4a6d3c988b0b25e8fed5f95b866e538b34c703ae"), ("2018dd5ff4223a92660997d4cf2f162369a6d3e142d992b6a4d02766540c9593", "28dbb42d5bb38144e631bcabbb94c151a74883e5ec6228e720add970e6c301d5", "2a7aa43aa5ef44d9888fbb0924d5d4b1795e32a17463a254cd741e68d67b8ec5", "1a72ff443c6e42fe917183b9ff7efd093c552c7aef269a2759171cda5d3d9d9d"), ("21b88dbd83fafa4e65eb4a74bc36b678249cfbfc8ea5eccc09122dbb51cf5f7d", "1ffc93f741745faa367213d868989ff4e5ea6ff47154de4860dc9c7e0ac42796", "2e4de0d83237f5ca60ae8e4f4e3db1cb44c360c3c9edd112bb7720ed93c8fc29", "039f68e999b6892238726ff372ba5559bc963ca9cc3fffbc03569db26ad97dee"), ("184fb2aa867c291c7fed7d22d312eb333902e44de99ea099cbe023c9d90b701f", "01708359254d246f549e155a2769819375652db220fd95b00f9fe30626d6e1e8", "11dc0093e6a9b3930bedf48a2011a8143647160a7b1f059a2d63d43e3da152c7", "0535fc8fd97420cec0730ec49d876c86a1d80eed08764ed5e3e4fe6e1012ad11"), ("2517a599f37495bdae5e1cf7c2056364fa09b49c1abf52977d79d0aef8d1ca48", "15327e4719b4c20fbec4a3821fe04be4394714f70d449cc06b947e5c19927f1b", "094d874796213c438dead45b5b68e8cc8d63297effcd058a08c612bee32718c9", "01cfbf1fcbffea54e5bcc34c6810f79b5ddd9527fd6b363e81ed11ba54f497b7"), ("010cbfa1a2771a45e99e1ac8b5277418df1aef4e3688aed0b5be97761e8bc84a", "233ec36066a59a33aca570b2ba7d712cf8e839bd179702dc4d11edb458ead036", "2ece232b54002514216ff1df4b59507631097bf4011afe3d4f5a4ab13493170f", "23d00f5d0dd1e296f41b79e99ba7df4316d80743b25b79d8cbdb9ff2200ea755"), ("1c865ead25417234983b4d4a471f9456a6536d45204720e536319a1b33f0ce14", "232d59bcef8174eeab0806ae6f529a322c01090298caf40588b4c138512d09fd", "247573bbe9fc12a2a1b535150fd4808f79882de05fcb03093ac58c8c53b0b30f", "11d48493a0e9ba4bbe06c6604ba6357d69ad23d514dd47e101026db404e8e185"), ("1c2d2502479c48b553386e209da24038351c837690d11b7b71fe689703e4fdbc", "0ef4d37fcf55e93a0e664221efd38daaa38a6a3c098896aa12b8786a25fbdbfd", "0be917db5c779dcd6da3343792758b56a7869a45c02e18705ad63ba4212234d6", "0417c28117a9cd167ebae225d425a2fdc7ba9c4d502c17be3cdd290fdee83851"), ("0893bb0f16f0c44f08644b17af3807465f28ad3ec8cd79e3ea133007c7b19e08", "0b80d1849fcb8803503986c5aa505f2ef2b58607740ebb53bf6a4e74722ffa08", "28a6fbb671794c5af5aec96dbcfae3ca296317cab3c6231d3e0e4245838b34a3", "2b88d489becfb8e010009146c81c80c3cec6027d854cd9290588400aae39503c"), ("18cb2c6006b206212a391866e67aa622ecb220cf2d7b06481e35170df5c893c0", "238ae94aaea1f79ecc1591caf4210a267ea0ffd078d10149da5a4b91b127e133", "2f162fba196e8cba207ee302b8d4209f1e053091206e0ec0289f39a9cc2003da", "1dce7d63b6cc2d2883043540803268898c1aa6a173bc7546057dc57d053d99f0"), ("1da820435b072af0449a2558d18e0e254e4714f1e9d0128eeae6253030706972", "0d155926e5a72b4c2dfc253d93caecb99fa45bbd08d4e002f06fa0af4830518f", "169e626839e850c9080db66f7b1803b4f8be512e3c5f60d18ba5cfdceb47e4b8", "0113a8a704cf27f55aeca47f1288a13e42b8e2e3e4acb25912f868f243ba91e0"), ("1b3fe18f6cd2b1a9c9b1b9d0fd6e83c96dbb3ba3663406963d9a5611e04df7eb", "01e40774ea0f26a95df9a580d9ab38bdb1a595258cbbbac9690a1651eb493e87", "155da4c79d8f34d2ce8106181f86b544b6ec7514666acd1b6867d71a646ee1db", "235455488b56d707daa8a7289712b5279c0bfd11925b4f95ec4c1c7424ba67da"), ("1314506cc9db96a45bbbbf90983a50f3e4be319958adece589bc0054e0c0b84a", "2181b80d1e6ccc4e79950c4c66c4a827445e60b2d04a5bfba8ace71637eff435", "2162484a32f0daba49f9e44e33cf4b1d18e24e582a01dadfc40a728ec78b538f", "0f5d00b35e88cbffc49df1fec5675205bdef3a88be307039e8c275f05272f8c2"), ("070d10800b5c0ed56e6490d74e8e5c78582c6bff48ee3de0aecefe1d59a2e351", "1bb758ae94734a3374c220a46eb084ca0363e0bbf413bb73828adc18c004efb1", "1e929ffadffa5a2e3bc92f8dd6f030769e61829121dea1b195c02227c0c21fc2", "2efe801d185f449185549b73d22a1c12528921dbc90f849563f797b0571e0baf"), ("118f7074ef92573d0b5003bfcea4b2812a812f54146ee097ebe0878dbcd9488f", "04c3e4c3980d213ada4bebe7fe3e05b510a798f7cfb913a4bdae46a7d16571ed", "1ea3cceacba435252b6c620f1fa1f8493a76494c5164958aa141fb6fa137869a", "1b94e2e66247c71e74c46ffca274bc57f8610a72b37f2e38a2e4961809538c5f"), ("2491366fcb42945cdb4b6381a7f25d8070a4bc99ae5db60f9ca44ad8addc7661", "249686be20b486b97e02cd8ceee56ab77204b4f5f6a4119c4b7bc44e3ea41215", "09490594f343853cd4076d1d03358aec969784cb95cfd88b1759d9102b4d2d2e", "12e32bd4642bc90333a0147968b5aea5a06758472382fe17c864629f87e6b960"), ("0dc65b766afb878fa6246cfe72afd978b9665309f333fc9c652ecf82742cc363", "1a452171b3658923549241894550bfe7802b84581dd864771fd74bc894220086", "074acb04815d4874adca18d02ec49cd3e0265b6358c7a15e8041b7c21375cda0", "2356d4957840c2e304b55ac14aeeb06462695b38264571ac09dc260a0a3b45fc"), ("133a088c043a066de77ffd961abee51b0ee193fdf58f92f1280701bc98a097bf", "1bbd3ab6f2a4a6df85390a61b22ec4f5965855be3803d037fb6d4258e6731105", "144b3dd2d43f055c49cb3501c21c9db914f44cd8e884e7c3a418f2a23e466ad4", "15f2fe1a10a9a26bab541d55c44dd25a48368bff93e6cb1723e1f86041ddfb96"), ("22b9fa624424f57a897a7de73ca4f2d45643102e9277737232d860d446e309ac", "0d8fdf8e90f002537677617c807009c79117faebed4a5410d635bd108c4074a8", "3032d2ef753a2d224868f22d1767c76fa5912fec98491881dd32501804a6ee66", "2f10aaa727014c5abfa6f64b0bc0fecc309fc8a1ddc8b643d5221feed68c364b"), ("20b231b5b95c8da9a0b836a31ef97d7dc5a793582ef9b06075c9ce1070c2c703", "2ac80c2ca9f6ef85065f8f4d05bcc726a2482bc1e040ea01e0ea0c3b5495e11c", "1789538604f5c11e77161738997cddf4ba56c59dc60172d863b17b49b75b234b", "26be75979ec2f9c615af2524ccdba3d38fe5d630849020b2a40114c0cd34b76d"), ("201effbfee10870772f565248985e31be6f4fca7047ce0f3c7db1794889e55cb", "270523cd9ed47247461c32555c91c2e7eabdfb20471546f2ac8bfa08a8612cda", "2a312f8722e17c6374644900a66683479058515c4b4d46a124daf00722350556", "169cc21715d7ee41ed0039f368c7a11b459a8e12ed6bdde049c8eaf5323d3562"), ("125687409dce67b1e8ba449482a5fd2ecbacb894a5c2c30cc5d4313c1560d1ca", "1394c7b5c1dbf0a5a4df2812ecb7301c4a84dd5b3f6f0ba2148328e8a10d9753", "096b64b89be99eb176e1510d5dfc0f5764c0b0e5e5106cbfa284876b55d96d01", "05c5a845056dbe9532a0e3f6aff6ac21dcd19e5ec9f0dde9443ab23107fe7c0a"), ("18156a3828273f60e49be8c9dc2822030c888fd62c223bcda85caefa84d51b85", "1e281d47b1f50d67eb3e34c1b646a9dd94865a83847e568577b7d039abef45f1", "0a8d357ace4b62402c4ebce0294c883393742527c8c1edcb17018247bdf42dda", "009f1c41e41cdaefcc7356a4104a7b52facf1e563cb76531ce91054abc9d29f8"), ("02fad92a8ebe705fd4bd7c116d439679177bfa50033a803f667794536dc4c55d", "00e2773accd84f0d2f60ec8d7cc6ce984f93dfb85eca8eb75cd8abef89983d92", "21ed2a9a09653505bc5b01c4787d62c052841697cb457957061e1a619b119cb2", "0f515d80c581bfffc393f2ab54d8d4d260a77deb36fe1a28d3b8cd34e851c2b1"), ("00419b6e096c2f52fb5761402aa9df64b0068bedf5c515fe22f5ba39a5486b03", "2c8d6926c1abe54474a1210814c808413d70e5a8891e2182c3173b2a3485a0d2", "0c68a87653afe67093792d70fbd98a4f47e44c6297bcee2141a5c4e3cc8cda7d", "08c8b219b61007da2943c7e51fce2112240371466222bf9bfec491285536b496"), ("2a29598ae6f6559e585de5d57328865afbe237957603703bb42859ec753357a1", "1ebcc02207f0f9ba385afdf120e99b0fd0c9ad47ffccf39c40c61a0f7d9e94b6", "191ccc64c1cf5e7ad069e1a974961caa4d2e81d1ffe36f9405ff8d670d46bb1e", "03023e4ad759efd5913a88dab7b7eeea57f1a8d937b42078a11def21fa931ac1"), ("0a4facc6feba57fef406ae4cb231acfa7f95d8f9ac17865ac13920e2d52315f1", "1086c13ba1cef15639f9928c81ea92755506b5fe3c873607089ae7ccc76a692d", "0951d80f7a88b738ae7be066055277919e18ca941c4adb835961a6147a99374f", "243b8c12789d3df3f896c005cc3f38216def35f6514a2610a211928b0ec9e17f"), ("27080b10186ce58896691c1599cc19e05498c61e4b608741af1e0a79aa81191f", "0ac42551ea3f7d2102f2640908fc8a4e45b0ee140ae300f6d9c6cfa87c6b7650", "08da528eacc2bc3d794d9dfc17c96615b9bba933ef67267556bd3faabdb17273", "0c047dc9273ba9312543ce0dd9995a92b5829a79ea0cb9311d83edf03c5e2713"), ("16161a90c4b82a995a54ccb35bdd536883a98f304d434550d01c42c17fbc6aa6", "0155a6e24a72affebe754a5365517d3c09cb95b2133ad4a57fb70302e1861977", "2d17533f9126a7372babf819e33cbc5f7d377d16608910c3529f265112af9d4f", "218b7586a53f1eb0cc37f6eaab02ca9ed56e0f51901d60694020855aa724d0e8"), ("16e6468326348ed785df75413c72b9f1ba6451197dcf12e0b1a883f2d4c56493", "276cc5f722ce4018ef1b906e221adf103225a5d029e9a2e793c00ded82d0b22d", "1c37b67331ae603cdeaa45016a4f5996d9fde07ec0e602b0ac358d81e63ea5d4", "2002540347f3aff244149511daaedb85dd168e8cd3df067fc8b063fbea0783ad"), ("26a6f196b9d382d48a669345234171539435a79891b8af90c7e977e6ad14d6e2", "1b3ed682c7517e83cffff25a1c6a8311db52ee929d58da4742caa916423809f4", "1ddf85d820d5ff1a0669aa81c4fc1c1d410b43b25a8cd7c8f7058bdb5154aa0d", "113037870e3f1b10553510c6f91237acba166301e748ddef85fcc22d8b8b755f"), ("237a7cb1506cb7dc4d510cbffeb6626c3ef22714c1dead88321ecfc6a6d7d382", "0090db7685ffa1034f591e180a57720fc9fea882519155c7977ae2f98a208fc2", "0a696e5807ad76ad84e457b33c718750e55ba15ed0633a49fd6ae2ab180a497b", "0759df883f767c8df1f77f4f4532c6fc7adcaa91914479aaa779a8dcd0bd18b7"), ("195520aa00077ff5bd88901caeed451ca32faa68879f9024dc92b7faaf9b8708", "2deec52258696ed752a93a242fde16ca806ae7670422ead224d9227bbf3ce75d", "18e189ce4572e28bb1ee1561c860345cf040b7f3984eb99a22c155aa6248059c", "2d43b63d5348a60b458d9ca9eb40ef66317cdcc7d9d05666702d057fe9217808"), ("1469b1b422c828e6c254f67b9ee5aebf07fc675602b858ab029c49f36910c5f9", "08f730e281c1052b2f564b1668796b7b376be92545d6d787481b93ab713dbc5c", "1d91e7fadc3ee0e3999451e7039b595f6b1bd48af2bc1dbced8e11519ce8f610", "05b26f2779b7700b4ca07d47f600886ada25a0415003be862cdfed128d05189e"), ("2bd76244d88f5895953e9066d8dac15b7878d1279a1d2a9cbcad616786631e53", "10a467bb9234bc4bff8f49cbacb8c0a329bd4e991dce23c4fc8385d199ea49a4", "092979a554e73946e50c7b200d8ede78d12dfd0e09f0e8d148f41ed01f93e0fd", "2d9cba588fa49d5bf72cb6ec4f351de0a4074697b0ff5cc444c33c43d744137d"), ("07b415b4b16c677cd73ef1fc1f636e407afa35f2a05ef4b03ee01be12f7c8e9d", "2f202de88880f0956381df8e5e1e5929d064af65e6041b8d939db27c3f47e5c4", "1d90c3762c9570640876e8c1dbb40be68c1805e7bd2f7b82baf978094e1e69d1", "2d545e7f6550fe7eb63edf96bd6642fc9b2fd19daf4b5cea0f035630dfa0eb7d"), ("0015547ac353147c488934cba0afe910cb8cd07c2a3f850cab7b20cc4d11ee00", "1f0fe388e399cdba6eb74bbff394a044aef6a092ffe3b3e57a07a3f1761b0b2a", "30555a244d173a1f883f967aecec834edc75de471acd5d636cb271424db0fd22", "09475bf7c35ed32fd6bb7107c28a12264eca7b592ddeab0674c0c17420afd240"), ("1a7773a65f2359ca0e6cd39d4fc35102efcfa4bdab91963457b0f6851537a8be", "1955e2a9d2e9e0c71dbbfaaa7c4ee9c7dd3bd40f3db005174b2d13ed6b1203f0", "1de67c833c03207bd38daa53d493409665205c757063952bfb82fa911b592a29", "1c390a14786d60745b628a06964d70fad44eb88458d6fb205cbe775884b1bc0c"), ("055718c0bb11a25874b2bf58f1e0e7a9daa89b1c7c5077a03be316c987a62aec", "20d703de32208b7584957121989bf9c01185d8b3b0238db91659acea509f322f", "302334367f9c11904423782b416cafcbbbcd2b57d85ba32572ab9b7de4dc98ab", "19180bff4263f835a824c8538ff739566de55a1dbd1773aceef4305f0a0268bf"), ("1f7dba0d78ac43e558237ffb17ed5aadc0aae0b9faf34288eac7bc62dcc9dd53", "1aa846c7880c98340465f9677c97b458960cb9f6aff176427b82804822989f9b", "232be546149c7e332894b88ce0620569ecfa1f25354cb3ccc55e37f4067bc430", "191b71c359b861d3a92a2eb007f10ab84339492d4d6f4a0616e5ed4e42f6a9c8"), ("2dbccbe4a33616bb37878ed87c698c493acbc3925808f7de91cda3416c330b38", "29e506ea1c65323ab78eec6ea1c8b47110aff55457caac2c4ab63d2fd324e759", "2267531d7f393a569af5b63ec83e5462c4af3d5c099d526a671d72c8ca50e0d1", "081afe03938f86d4a9d246ea9df98d4f39045a2cc3d8e191c3f1411b422d6707"), ("070d071e6bfb9f708fe500ef14e41dd3d18e10064e6a889a3946968e94263fab", "13b628e56cb84dda5115aa4a0f090a24a80df7f2d7a61f777f2d87a7aaf00de8", "1724a103962c592de5b6c112a268b9f9bab203e0b390fbb9122156cae11a30ef", "08187559753244e9ca0df43d87d229c1c7dea8365d5e3f26cac8e56cc9262587"), ("0c400c9b6afaf3a3a8dd26dd699d07aa0a9c77d55327352b8805d90cab9e610d", "291f1193480001bb4b9038e9de2dceca037ef2f56cafab32668c827d05058258", "2fea000691011327ee8fe26f97d367e865940284905eea3509026dd5992e630f", "27d73312ab710ba5b5b07a70c55bb0d7a54b1691f2d220ea6f6c545ec785f9e1"), ("1e843d6a1137f8e2979b092c6949fa15a35265858a9887106b5e1a002352afa1", "2a80bab94fd229025124758d69208eed2318b553038e009d89676600a149e005", "022e2eb3ec687810f3ec5ede3c4a78100b5e97bd7295ededf20746cc4606c3e7", "000ebc15f3db496786482404656df321acc32466b6c71c5a8f5105e43db1b142"), ("2cd6aa7284d0147ad69f3f355e8a76469e4ae03c0a48672321958738fadffcb9", "09facd7228bf6afce8a1ba2fdef50a2a28c471c301bdc70926e7d878e5b651ab", "18f7fb67d9722f3e0b9993b8e3a70ac6e46d3a57c01797bba7abc2d0cc228fd3", "2fa8f5b888cada5066682e1d47025bd63ae232175e4244bcc6fe1f857b879059"), ("00adbe4832c241300b674f4892ac0aa53f4e34669744264d12673c0085e3d599", "0a198768321aff5a7f2625adaf26b1c2069098430804477961f632b504a2ab77", "103ff8c9afc739b6a8e3b431d4f61b91772b7fb694a3e83bdf2187ec465433f4", "0037047933236ed8f809795e737ec897e0e8d0dca54fdc840dce3605cb569cbe"), ("171d9d5d501db2f19ce359d179a010cac3ae6fde80674094d2de71c2c4386d09", "297446f5be4f08c8dafcef4ca31a283f73058ff11cac542c823c5ad3e7ed37fe", "1cbd9ea61288bddd1c4cc4692b0c5566fb65cea371521726ebcd242bc1e775ef", "2c4a21565bf4da7db0119c95f6716388f60612ac082749830f9f1a130025399d"), ("2eae2bc560f910c7817a84de64b9ccbe16b504dca44396d852d2aeebc620888c", "262aa6c37a0abd4d03cba830c79a7beb8e445a3331552bf9470f6238944c13ac", "1ea4028009eb42044aa1db92fbf9060154fe157add54d48e035a00e4a66e215b", "2e806f31ca7d22376c427ad4faedd42000cd489bba0d058c5272c5d628b4135b"), ("15270173b7678ff6ca0c4ebb531716a3cce03fd0ec180acb4c7eb0bbc81c2bef", "2d884af43c7e4e8ab96126368941d464169bb8bd16b49eefb279284a95162ebc", "1f505da8308700de7545312668afdba48b55c4ed373a09fb67db43a5f45460b1", "0cec6afa916bba21ffb60b7beca1a85d34e4024862b054733d12561de4de6069"), ("18349831c648553bd4df02bfaa63634030e5b32cf6f6dbb712cf56808bb8cbcf", "07e870f8aa7ad135142a4c1bb69c64b7745f553c64e441dec918ab0692d44509", "2dea8ece22e405bcc1f0393763c0b6bb61ec353f8b036762b1a35ee2d089f9ce", "2eddf3e76bcc61753e03c8fb9e08a1cca5a593183bc25ea644a5a8bc3eef9134"), ("0aa1307f1291969e6650bff4b3b504cfe78dbabcd61de762052d758de395aa3d", "190cb94ab8891e14c6261b5edbe568446d3cb96720619422e97b732bca298518", "22dd2f26efc5e40d39e00bc48f9702f03a7b3eae3ea9fca4affe3c966bc23e89", "0839bc044cb9f50fa6f1f2e571f545c7d1ea1177b9576a032e0875616994e4fd"), ("1de223b13aac63bdcc97247413b46ecc460cee513b484e51146622a8c2134ad1", "0d4c65a5c977b06aefc00d11376648769be44924990e4efb03c3c54f3bf49ebb", "1a86dd875a145b07c8456d586edf56d2bd04714610fba95425e8c47c287be53c", "14df25f136c0af3d07630f8e392481523c71963d508f2c307a1d174da6ac755c"), ("0f49b6db94d7fbe6ad3d5cd120500d4ee51e5ec46486601f8e6d82207ad994d5", "28b91e93f267197c88b171e0780e63b4f7323947f179f18aed818740c4d8df99", "00f57900f79740b7af3905019fed30827b4b766fcc794373b7de353a1cf47de5", "2179b502abd3eea3794e3cbf9897da9b9e6f5959877dfadce1b326810a3a0581"), ("305645003dd69eca880735d25395dda118d8309177ad6a066b07b4de0b584462", "13ce88b997e94d158ba97e09c5acf8f71b9d47b6e7f447bf7066ae7ac18d20e2", "2a426f4e07c3c4561c77edae89262f669e27b6535ae4ec1753e7d17227066061", "15794add4976e04050194c5dcba4a796d7dc2b66c050f896dfe47273070f3d15"), ("10cb38f133b682ad134810a0656f991187511c360b9879a50bbb2fdbccbe0a32", "301b87507819ca49d3904cd26fbc8a99182191cb7d05b2f2164668c6d74aae41", "2630aaa1bc041f3bb67bcbf33ca988bf2877c34da052110ee854640fecba278c", "20497bb13293a7e90f73071256a08130f329b01d6ae77354cb479ed690775e8a"), ("175cbe0c01c81fa36b67c5625605493c991191c49b24f13640c6dbc28b72089f", "2f72dab33f80c9e20f40c79d3a16a9e598e735af10726b151e2f6ab8d92fc1c6", "1d5cdcffcc0fb817f23388459ff93e5d4dcb724994881c4936df978e25183290", "0e99bb851a4bc6d2ec8613471e2ed2adf490077309e2f061101d8e9bc003f8ca"), ("3043229107a91941d2fdc1d962d4b7243d7d59d61180a4a525c6636c6e18f396", "2408ec0b64ffda960a82523da54fcc7685921451a809530ef8004d18c0eafbaa", "16d5c9d88cbe1c8dc0a5cb646047e18b280f9f572cd8af9b5397aba3e6c1a2f5", "04b8a24ee5b3ad11b6f9e61bedbfa7661665476a4c479db5a84b178ae7de77ea"), ("1388ae15442b3c7583c47eb27859cff7690d61d39b8a966da43d3d5861c8414a", "091699ac9de3ca5a3a7536b11cf7d248de3d82a480ac639954355838ddecb233", "034156ab619d733e3724cf814352a5692219abd203bdd8195b4c46d23c3076dc", "0d4e3cd70a862c63d0589373d4b10c280c2fd4b04b83e41669a9287797416c1a"), ("1878fee0fbcfa67b3775b36207d9581aa6670318beecb348f5a7fd6e2337b617", "171e8699aaffa18454824c8e97658deb7adcb942c9fcd6054387c6cad5eee804", "04f000ea2e8172af3a151bb912ccb334ad8cb0aa306fbfa495314a9d4f35be36", "20d290c777d74a6b2212756333c81d0d9f92309c7941eea7723056e6ad46a6f2"), ("0f654be962f2048971701894beb48de45b6bd8aeed9f89f9210dc7e5ace84cdb", "1d8ca7c991ce3cb3527ae2635e9dbfcc2a4f8517ab17b0965b4f8631fc02440e", "14ec56bf9345a24bf9558a25f02cf509b8fd79c7c66a1b46b9067157eea4edfb", "0a59b79cfbef994623a562cd8ef5ccebf7e02ff3ee03f978ace9cc6d4c55a78e"), ("2f684d653ea36eda6a3e9c64c0b0351f56ac5197ca7b3bdbc18e8f117ec044cd", "09fb3c93708393e765a511f9231153afb6c9b0c03d3c3a99f41c43bb7c9765ee", "1c9c75aa5781915e9d364d178d67057270609c4f9d1265e3b684755d225b6e02", "08e23e6c5a7ee2b364c92211c5c1bee0622c21ad792781ffb4ec5ef6a4861b05"), ("23eb33baee8347725be8cf364079a04c4e830a5ba095d9db1f6703c20bb221f1", "1fd005544cf04da5cc5740972d0a78fc1625e487e7c65742d43a62fa482bcf62", "230545676f7f572ffd624d852411fde459b27afdec70489a6118fea599e5bb94", "2c40af05a99597b70fbf71beb66f1ab49e058c9853e931e524427e2a648303f6"), ("2d5a0b15ce75eeecedeb76f358cd899c405704851029e903ba22ade992222300", "0fff5fc68031794f9c4a92029c13c36b6b63ca08e6833e645f640d44bbdd3ff1", "2b47b5a0d7b0d0a8bae934d31ef2ffaa5fa9a81ad8594a9f173aeb356c0ffb8d", "09fbb800375f7033cc6fc2b7d3ea285194ba204dae4f1acbefe54adf41566f0d"), ("2b43ec1a2179b84a2104f0ea152224ff2d3e1d7b8669600c37288a80343e3f7f", "18e9228e27164e48af8938110b71234a27cbf123559224f2e2ee20174c494563", "15586e0def5d8942916f5a41b6f94a60ac74b3382f97cde95842f9cf6949ad4b", "11428eb933fecc12c7a58e2d25fe194363c292ee41b1a2fc5f845c044a95ef4e"), ("1d90b4c7dcd3532d658758306846739fb65a4b5e9a17ec46e874f2dacbba8d7c", "0e0864988f19563ab630e9f900d05005dad18755eecffcc292ced0c98ebb6381", "12b2a24a2d49ba2bc4729268b2bec1196be47cb3667438101dde8df79abf0c66", "1bd3a8f8aefd9651c1d052fd7ded68862d2114cf11968e8c31853125e104f37f"), ("2dd2d9d190a5ab5a64c78de623adbb6f14205203720a71b3fc279c3495e2161a", "26aa05d4b38712f0350772be97b716ec452f80c90259d5476c3781b7cbb093df", "0299e8b48b78ae66ec9ee3fa183211f8050d537d3dcbe25954429bd0184c4216", "0df553d02c118dbb14b6ec44c9b22086ab655d10cec4b0ead9030d80e2a37075"), ("0c94e9834e21cde85dc8a89d3b63dbe484ec403f9a0569a3e93a7ae312bcd520", "081a01d78baf49ff82b522dab1f8648a6f0eb141c00376f4b5ca33b4859b3318", "0b6150ea8a2191b4ba35bd7de4c4bff1f005d4505f03fa0e27dba5366e9083a1", "2ac316283aa1de2b70f46f83162b052f33edc5c9d7c21405449735adc4de5575"), ("1c1e987c4eb9b14ce246da37749fc6f75d4d635de54792cee05cae497518e624", "00ca2295916f6260ff63fde3fb791f834937c8b0c0e93c002a5916076ced85e8", "2dd206b40444a48eaed197828d0b99709ce90b9fa612392cc4796cbd451df8a1", "2b4068c442bc4224d7d3158b6cc69d1349428629e763594557a8d24d6cd5d638"), ("0848e6de8b2887f3128c7e9b2c5a667d43444525723d7f637a2d0351ed1a1dda", "1a40397c1a3fc9dac955b9f32f2421bc2b8b47a64563e85f4d22572bfe6b36c3", "299d6ba60ad196d6b6d57c9ed8ce5a6be9930fc6039ac1eb0cd5c59279b4fff7", "239e672e3f01da186f0869868f0b5bcb36354a31dacf1f01d0795397baf012cb"), ("1612c764065351b1c4a9b4ffc719420808d4fc61b5864b15f2f5fad845e34b3b", "1bf876d904cbe35691405de0edc95536137b85cc9730e8e5836da891522864e5", "1d700e42accff85a7d1bf57a92a54c125f46fb7140f2b680f7738a706204fe0d", "2a8f242730f01e08995081e143ab41baee43da1e7e4efb8d499ef164a7e3e057"), ("1d694dd51fca065b0538ac23b5b3aee5a7d5c48cd09d1e425c9f3f3c256d3917", "2af79869d8a541269d0a76860dbe4ff441b8d25b6b02921367bd3915f6a3d877", "21d4276dd22fd077f0fc96ec2e615fa9b01c1ca7daa78bc3be0ac1bdb85dfe69", "1ab3c552bd4fbe360f44c2ebcf7e8379adff65fe1ad5a57d48db8d0d18aa7365"), ("034bef48b8152e826973b2d2cf5b2ecda57ebc6d63b557349fb4aa56191ddb97", "2464b547556390f47d40534d5f5b040be3c05d297fd8b2d3ffaa1e54e44d90a0", "12f2cef21e91eedf230eb4fdaebefba15ba44144ebbf414d6a63440c2dfab14b", "299bbb5a0ccc9cd35bded93e8290891d79321c56566b39e28672bd5ae5341526"), ("0ffe8cecc4041715c2399f9aa5094ab238744157157d035c6010dc1e0c9f081c", "0b0b8e00c4e0c3148efa50d9a86799e813f707569367ab68813573f8775f39e9", "102e2852b8681171851b86f66abb422fc981180f06cc3501446aa095ab7a52af", "0f6dd6d1dcb7091adf12e0860622bfaca4e7935df37458ba22c361c0db6fff76"), ("21748fcc25fd6d5fce4707c37c1ea4d29ab4b3de57b0131657d758c033a48801", "233adb165c7e2107230c14967c5e4b8090cef5564a61ef5db789fd23160160fd", "1691f79ec0f6b29d053d8cb1bc7f961f77c7b4120a6dbda85ea9c783ec34aa62", "01e318660e34dad61b6a691270a1bc30dad5dc173945a581da2e0286e6a19de6"), ("2cfbaa92336b26095ad00eb48bb7dc4f22cb0e9954437e2c40711da746c7f42f", "1272a0f13d1bcf223b3501ae562ff90e944949ee2389c5fbc9405240f987795a", "04e0331a9c2cf5ab4d8117dc0af734d8ebcb5c666cb3beb8c457a45acfcf33be", "095f3880bdeea0a7366aecd175d66cb28de8bdbf3ab7d2012c137f2f2c5c347b"), ("1ea9f03d3f70760f57a36b98202c5e70f704c155ba19b347fa955f0c89848680", "18d7292edc33c007aec2a11519d75aa377cf27719ea7fb8613ddfeb5e28b8859", "19770608161506b550d1144a9352000f4324746ec25e8c255cf3d998e20d5b5e", "072acdb840e892e133d6dd9d5b8a71a7f2d328e2e1eea89b1a4e100b85580a4d"), ("0137c7e3b8a64d316714509ee13ce87d4421bf02cb778b2379d86f24b9fd0e50", "08cecd58177cde8e03dc42d277bc10ccf616e74190d38b86dd6be6c6bf05e2ef", "11984394dde59da4628bc637c2cf14c24494815fac48f48f4702b6af1d0d4377", "05171a56917a251645b78b64d60d4140e6999ea2eec7852955ba77306644b501"), ("0643d43be6a6a98e80e044fb8b498d6c2b9e8aa51b9903e5b2088be156fc881a", "05225e75a8108f3873195e2682ec3f76f38d94d2eefb66196d2b0c52bef14329", "1294927228ff4d2b3e594f3264bafb478ba371daa5914380f4ad2ab83cb105d2", "1fb59f3f69d11c99816a0b8d32c6b323b09206b16ff84bb444df8fee474c1422"), ("2f47d3a6f575c2910ff8c870cb0f4acd298f723c81a73e1778ed2c59e42bb91b", "12562b3785cdd5ee26645fb13f90c4a1e13044aa660f9f36a89ba644c5002993", "034ca18c81375175ef30330bb623a8801c668855c2860beafc123d636e410e47", "1eef4fdc0fd9ef664df1329dd9fdc9301ab472c8cc4dcbaece30cf7579b52ce3"), ("06cd8de7d531a8523952edb0d716a0db5e70b49a5002b4ca2b1243e7ad22c0f1", "2a46af182293752b93e088b26d86b6d5593e881cc1f43e3522ce9255fc0d2f9f", "04f2259efa1094f094d1768b4ed006cfb2926fc6708d4d5066c503e8aacde486", "2854e8af852b4f08622210e8a776b164a82bc15794f2be9670db6c6bed8b6ca6"), ("0f2baac0ad3cc0262140799ec3417986d07ce67eda5da4443c2b4741a134a24e", "2ed4201042a0e10d55dc39a776007232015d9305ef8937ff099f3e15e696edad", "1720129c6e53d4bbc39641bac669facdc2c343ac4f14c9af30b30336f91ab546", "2f31517cf9b0121e4ff46c4834350550df9d5396cb382cc4996b6fe85ac63829"), ("1a78f28f54a19e9f3f64c17335df1fbc08211493bf8bd8c95a65a5194c89f239", "14e70441572cdfd40a9a8fee0500b99e41bd88a719907eb3302abf7409efff02", "090e412b18298fc9e9b690529335fe1b3189c39a9e70f76ab2a9a5225553ece8", "0be38f33cf10f0849c71b83e231f28bdba8a9ba7081ef3a12f62a8c6ece0e4f7"), ("1fa3b8906423a3100efc2c5d7b707a9493227121d56eb469939b9fe179e74fd8", "268b50ef27f96255e1e6be8c1537a6546fe90093e769d72d775d231d8e7f3c8a", "2fab0199fa41b982b93f6e2deb3bd3d7e929b7563664f1e5640feb55135c8541", "2c1c194eb0f8ea009558d10665eba5c0fd9c22899e5e05a86259b863525a8e1b"), ("1314dfad95fbdfc3083582550a06b9a9e7afadaaca5eb1d24d646d68720aa775", "222027f3a375d9d0060940ab2211307af25e968d5982cd448f89787f72603f38", "2a409212da6564a3e1f3c79e056af016e836b0fa8bf91b280afe7e71418dd3e9", "18d7d3c014136fb21d7110070d18bc78e53684305d40c7446c5fb1e67f5575f6"), ("222140fbb6540384a3b409858cdc607ce0ec53a86bc9d144e7e7786e9639d6d4", "28c3e1063a668c4381d6023748a7c32828f9fa3b2ab1d49d56afc47c9030c91b", "15b9edff79989af214cd4fb4fd795a9d903bb16fc0b489a539480140c80b4aa4", "181474a888b033e0bcb8fab2329538da661de1c0318237b12c15c26ceb6bc353"), ("236d02514dc7c93e3918442d03bcb1d748df5dab0b803b69ce3d45132ca57f91", "2fcbef4d5921295790730ec163b80dfeac4d2479b9ed331782548c8cccb9e572", "1ad1676e8b22b01280d2eed9c94a2f3560f9888a0ee01c6c6c47300aaae24c9a", "2cbec47e7abce6467b1463dfc3d301179eb5a7a824400ee67748f6b69840f8f2"), ("295be31ca6e95ea34c3334876ee857dd1dc320c3e9de7fa14451b6b26f18ab3c", "2bb0deb7f4ca04c9a5da6eb0f10f66b38b3d2982cc39bcac4862a9599d00239a", "06c5999f4926811c13195965c0594a8f2989c0e631fbe971cea0144c0155438c", "1db95394a6b1db49dff71ad45178d992a2feb1e78c5bdd1822a70ef6291ac771"), ("046d25c0a5db98dd53128041067ef14104d03388ebab2d8de9361657876ce5cd", "0e6d193d33fe571ff52890848343ce6dcaefc18f83ddd12124f8c08010d71837", "106f6af0a2bc8c4af019f57a5540fda4e6432739254df3e7d2a947fb69597eb0", "1bc8538e493b259f98ea1d521573fdc4e2e8754d193f0c79bdbac74f5bd0e0d0"), ("15afe8e4b45fcb9854b7f3a6f698ac5954836dbf35e6ee6a7869e1b5a9ed88b1", "2f024a398f94b2f1105345567ed131bb6057cf4a9768e4ba547bcc1b8a836f56", "013a00f861adf4dc1b4c73d916c636d70469d432ebd1c2f10adf9ad3eea72615", "23d92b2536c8cd6dbff987c88d7c6db5ccf45d5aea3eeae6d749bc4cd31a191e"), ("01dfae3b6fd882419948140a7081b40944443d5bf49746a727683aed4f6d0396", "05b5dfdd7a643c6619ebdc7a15db933795cfbdecd39c1106cc1b124e215c5743", "2c40d370b5e3d5c2de1d14bccd6c25d551bf2888211dc057ef076d39bfe71ea7", "0d8590cbb827dec149eef70d2bd9e74d3895e3e49d63c33e1287c16bfab7ab7d"), ("0f10c2a90f7724ed3509081a58da9204df8a3be03bbc7de5fd020f243b18b7bb", "0118c687eff71a93db14ecd0dfeb527ebf1e66f3de024e20fc50ea2416b2a788", "0cefb89b5bb269707e33ce93c347add97c1da278d288ddb4d3dfe2f0fe423449", "0eebf46c5fc536799fae662c6d5a121288d93ab99e77787e3f605a1575d7f42c"), ("0ffa39c16d1b5672ad00d2943ad4cf53f8825d41bd3d4f793483c0b96a025723", "2171ea0a3571cac8c85d18b52ba6530a9d0128f5c6c5ad23b4a49c6b9ea5207a", "114d2f96b9b6c8658a0f8d2ddd2f5054a43cbb5b16f49f0bc145ef053e14de9f", "2af82be7f0a53238829e9c723d48d55c3d541c517bd7c3b3d3a4780d9ed55007"), ("0c716814afb1cd17a319a9aa228c53b4eb6b2742f59db8c45121edf0b51fc684", "2171e4dbf0e462b3a9e6671daa20052355610a92e3d1a93d896bdbec46245516", "300ea97c154f8220a24639f281a3039ad7256cdc3d325b316b8851194ed5a9cb", "114d438f7820505bfaf50fdfe7d424d4404653945b1b62eb37330dfc661f07da"), ("0eb3b6be109f684c6f3a390d86271c317f41ea3ae2ef0fcf65a21e7758f514b8", "2088e98c780360fbe1b01da8c7945b4cc5534d70812a5e856d05a7018e78db77", "1dad1db60aa549ee6009076c8d5b85c0cf3678dbe612e1f4aadcdab350f3199d", "11f2d79356d95f98ed6b46096b95c2754f1bdf19e9c88c05c1769678bee70b27"), ("210c04d43d3815fd09dbc25df7816847d778fe7b08ffcec755c2eef4b795f1c0", "21184c888aabfacec6d619ffaab81d1e62e01102d785b3f36e17f5d93b9cd2d7", "2b6b62b023267e4b45a61c4526fbc1d84d45ee8dc7e037e0e096fde8e82bdb9e", "08340c75661921c398821290351146f8ebf164e24c72e0d32f6e37020880b9bd"), ("09deb388a74bc4c0bbf004fbc83e48591da3327e5ef0dc48c6ca3532b3b2fb13", "133ba3fd45f868d51634e2b28dd6710c6763afaae1593cba1bc3fe7e26ffbde7", "046acb654be4fd76f5e3569baf4107efdfc68a8db1b5c6a38f95b06712f51c9b", "11534afd1607fdcbbd253890070091e3e588472d2441ce802faabf6373160567"), ("263f5f372880214c9bbc8433b33e6633fc4c1b2579046303b6768455a10e3876", "04c7379f7db56a2c0e58b6e68b49f584f819d43a40097586f7f8035aa4e67c20", "076f75e3fd793bc35b61990a2d28280ca01e5a30a97ad89feac4433dd3fa063c", "2fad44e85eef5c01f0843260555dd9d1c66195d97e3e7c94cab5062a84350e2c"), ("1d094ea03468942889b56a13c9aa8a12e54663de5de7e14dc42d4aacb073835b", "113f0b1d749c93c7a16d8311a45609fec360cf6a14da195ef4ca58d6a0475222", "1935b145def6c49c711c5372e777ec0071ef88447b0b9080e006a010b9bf57da", "2ab2d8c5f9d67a49d51db2300e35c97738ac2f26568ed61ecf764a9809a18bb6"), ("0b19696b628385cf0a850142abaec1c52204a728685facf128e4c69a3c425cd0", "0f76ac19d5a359715c038812b02f5519301b23b2025f796cd120b6f379ff7cba", "0e32cae4f83db55bca31dcbfb99b1aea054838532011e3013f250058a27131e8", "200d54f3931a11b37846d02c5864aaeebcc54348568ede51fc1231f72abeb36b"), ("09aa300b598d59ade32a55c10fc0db1b70591a4290620f17bf10fd9cac59e9ee", "0bfae2421c4d814b2134006ccbbc92b64091d1066330d023accd982207d10656", "23ad70c479a3d0c10d91ad2457dce461e299e037ca8c8fb0454f2f1fa4978d68", "28e361f96526307aa552c0f9814b162da3fef56b997d337bd967138e37a4c256"), ("1b5d1a17218a63c8d0bec660cca19baba5b1896132a573fb9424e143ffd0d198", "0696ada8a2b178fcc1d79de18012a36c067af3e8b8584c96f7c1cac724c23301", "277cb7af2f6bafc6b6cd289de116d7f4ecd1a69df77a4a799504bc81dcfc511b", "2fde185ce9f51c6c9259fb960deaa485cec8d8bb3485eb261a28ea3366178b9c"), ("04d3cd87b193b948b952cb98f381ed68c9042d5b790f199658d9570ab326b02c", "063cd6ea349206f94433f79fd97695cb09e31aaf63de1bd7b51e6fb07096b19d", "097bae88f213a10886a42e099426ed36ad86d80faf5ac199989e9aab21d0a622", "0ba501a978f31bb9b6d5de26edeea9626de37b7e7f708820dd07cd7913d09fdd"), ("0d52b71542840ba73cb6bdae1194494307cedc846200855e4833baf83f92db5b", "0f0e95ca1a6e17216d8838a550f6b16e1df9c573feba7397ccef3b288d6ff850", "1a58e8283f307a7ca627676c7abc5c8b439ebb163cd5f79f5be7c26025f8892b", "11021d07b795e60bc19dec91da475d7ff99a8ffae4da9796104175df1329f9e1"), ("173545ccdafbd1e888efd8bdd75cbcde8b3e1a495c6b99e9ae033eba041ba50c", "22efd532a5c35251ecd0fe43341b8fbfc6ba2b34d6ce5608453b1e4b23042173", "2eef4313a05aec1e8bced5cd47f830959723d7ff53d1e17e340f1dfeb791c1cd", "118fbd457184e1aa70ac9ee06eca1aff0dec4e85884edbe80f5045ead618b94f"), ("119cd0e6627272d3156b6d6ee26ceb05abfea081c7794eeeff6c218af6e04076", "2cb779696505236378071ea94fd3644780f885d4761153988b316ca17993175a", "2c3657f357b16715dce114a302036f54c8d73779302613c051bdf6c83efa1082", "0e3b9b1ee74cfb9e2ff93eb455723287ac57588072b5385c741c49c2022dd417"), ("0662199b3db1d2f6fbeaa89ab0f5a373611033c6e5dde2a779d1ce5bfa6d4950", "01a4653fb5c89c2267f389a7b36a5f0d420ac5a7ea6e5051d134c98140d92b4b", "1294d87a03c745548081a92e4c8c2d792ab3d5bc3d2bbd50111184d8062c3323", "267a6041e0af29c888e48b30628f6de83a49ca06ec3153aed3496697b560f927"), ("1e0f044035d4c71252b528734d391381055aeaaf181a2bedfe44ccd8058f4835", "195c6ce93665f20760ceb369463ab944740a9efa808f20eb10d372cd8a918ba5", "096c499614d3b6ae613ef6ab2c57403622d3f9beb58bd9d19c709ce284d7665c", "1bbd3918a228041d555c0a48df9c723f62886fe834edfd777520d52a5793fd8b"), ("0038bb98b33107ba4674782d86b55ac50a9d4f9c815f471f2422a09218b602c8", "2c07f94a483a3a7e4a54b1d936768bb6ac38b80737bdab4fa1564a50b5d9b512", "07f8fbeb378701e6d1d67ae2ffd0f327f70acaabb9c04f2b2e5d5bfae5873ceb", "244640bb6d64c50256746d2a9211ee8aaaf60c5302cd5795236755560e34b1c8"), ("1c543496712e5814e1b91ac36714a13c5190ad05de3dd08e062ea9eb71fada43", "18d0fb9d7d14ff3bd37ee3d29f0b0868269cf9bfd9b645c0256ccf424b282f49", "104d53da343b227cd1605afb7bca4426cffc3db92313b114949f95a5e4be42b4", "024fda0357612b304df4cee74cc78dcb31f0487aad32707b9061c4d9c8fccf26"), ("09d5ed1bf043aa690cd8a0560497f6cdb67a4d04e0afc2f005c2ac60303056ee", "0e22bb299774d5d43995b5019cb794bf1b05567f3ac175b9c80aaa1abd7fb657", "0e75e52407b545ac3e7701bfb09f261872be566abe38baf920e7b0823b59880f", "2fd98e6540746b804827b280e56a90849c801154de6f17c224d4623b2eba8e5a"), ("2c8817981deb096c2160ade823915a7a396ca0a3cd75ba1ece2f2417c855f035", "1a2314a9be64ae47bb7fcbc4d44760ae94e12040bea94d49af5be381a126a58d", "293af380710feaab6eadd7b66c1fac3de7dcec3c979142447e33af52011cb348", "0ffe80a3824a1d1866cfce2660ce6e2bddeb240c5e6c136a1dd6e97b0df845ee"), ("0afccaf2566869c3e0d9fd2ee84bf283cd61a59c6d038b850b6bc4b2687a9355", "07679b301beddf868dabb4c81768b98d846f62bce79aa41c7b951e899feb84a7", "091b7640704c94c1a5ab6f44037135d3b3e149402f9955b3d8769b9229c4399b", "139f3fe32ea2cab27407afb3dcd76737abe211d142df7200a1bcb38517a65957"), ("10a28cd1f9266e1d7c402072494eecab3d6def150e059102213c78fee0f1b5e9", "20346fb82c744950484a4fe4be76002f2bfb00497c4d292448ef98faf6a6bd98", "20751e2a35e5a906220812f5fd602262bc87e56e98e4edb279921218deee615d", "1e4bf4563a9bd9eb5939bd7f6991e26f9e5573786d1c45293be116d0594e8be8"), ("28daa970649218155c66e51c9379dd63058dd2258f54c0376c2aab7fb7ba40d4", "1ba0b66a03ae202ec3c791510732198f108f80925432edaf91e8b13442e2def7", "1cb5dfda06ed811db1e6c65303b7c08be68bca27b6573a49993da9c9cdfd77c5", "017432ed15d7c83eaeb6c02933ef98ce855781f3d941a81925010a43f9083d28"), ("2138c98313d80d69445704aad99257acd740d4ec50aee0a110edf6b57b75700b", "20915358642ca102b03b3f71ac8e0f2282cfb2b80472605c89d0c89cea9c0e53", "23976667eb892cd0b20666fef9c834cc4368e790f65407d398799d0c58b09f28", "171e16f850d386462a1dad02864c7f10ab85831b595a4d6b53a1e506421f026f"), ("04732a4fa0a6813051096664b6834a009423b59263246b51e4cceae461f05add", "2e6186161cc37ffe4c9c50c5297232dc81b9aa044c45eedbb427cb35a5a3d6b4", "1a6d70f32a440cce9ce82ebf9c8b528aac37bec23216c3e329d53f272c286c6a", "2a2594e72285173689db5362aff1904030435b2579ff2a1235704034588e7cb8"), ("198b65bd42ce27e81c7978194d89be6dd5377b94d9c0e419b97b13aa73fea68c", "22b62ee7cbd98d29f22a08e62826f28273d41aab3b878c7d069fcba1c6bc8779", "2b0927d1324b1ef1c685aa1921d98476f8261e574819bec18913a5bae79a1a2c", "0d0a9a94e27b4971c00d6d2ced63427d1f24e507daf15b921bec2c05c7cea96b"), ("278b6800cda96534235966cc02ceb743f854ea5c948c77774882a5617778c42d", "131fdfc501addcf491cc9f1ef0c22b1f47a0a51f160024885a4ce43cbc7cf6ff", "0ebfeb603ed57246748ca0dc7de5f84d8e2299f80fb42c34eb0182e7c176c855", "2b48ed9648c126a7e364153a46bdee1c17397072f54726a156269941717dcc47"), ("1c0af84712a6908462d4420c433e41698d88462211b66ca5149feb205f95c6fa", "0e2485150d972ef8553ad344f221597861bac4eadbab50da18d488c5a6b27e8f", "11774d3a187d02c1a5fa30d83e7b7c314b92486090389d7a3fd8b70ee9c4726a", "1911f589c9523504786d9d9752586f821064a140c0bef58561df99321b2037e6"), ("16381349d5e8d28239f132346ce921c141a4c5c7f2fd8c1b5a1c61416894db7c", "2c81355f22127291a1982b0d7af3d3553f8380bf22b35275c7bb2473f2f3e8b5", "2ace9e60b48ad2690b0950992502ae969ed76bcc72835bab7f31fa43525a5b11", "0d1ae79a600de3b533db19e61206b6f393ffd195dc8f2d024e3ba71cbeaf7833"), ("24ddb4eddd2e2b917df01c3d15dbfcbe5a212f8379580453615c8481834b1b1e", "117b45cd661f1b86f1ab0249046f7e05739a31445e999bc8d00c036233b26622", "03f10390263e7626cf219ea368794b9e30a75ab04ee8f0464ff1e3aeb2b0a8f8", "06728882251defdfb2746326547400325710866c1413afeb852fc2ff217fee90"), ("07b6334743de145b8acac0cb37bbe9313c370422a04b8f1ddec5c9eb6d2c2231", "062ce7e10ec115739187f1774b6617b433fe59f6542ed9255b2a966ed1466c02", "25f61439ac52d3596ef7f9d8e46f0f407a33844d888d2dec3854bfdf126c53eb", "095035c34a4c10377470079b5c9fcf6a965ee96a456933aabf3cba5db72912ca"), ("1305d0242af6a2ba72ff3cffcf0f6e135511ae5e6d046aedfbe012bd1aa3fec9", "23ab8c3b7135de046fe4c6e21826b3ac183a51b628ab568ce9c94e8446ff884e", "0f583f840e9af3241f9da6f4e449e60c728328072438946c74fc1de94049ebbe", "23b79b793ad18865eeeb2e8996a05f269eadacb751881ab7a0e4ac269643ced1"), ("2145ddc4bdf48e4f97a173ac0afa0a45b97ad5620ad26405f99d0ff01db9a8b7", "27e47ec545621e2475005ba113dfb0933d3d60f20c473dbe101002ea8a9c3d21", "0217317013f4f4fa57b0f2e391cc23de7cfdf3ac515b4c5a82f37031e7e30b1a", "109c0e5e8b7c894965279bdb05f3a2f22adcee50844fbab70eb9703c25e4cd3a"), ("09c01566c70afbab43ad4fb4811746c55c04902a92deb334ec2161cc3d5c5803", "13dff28679bef5108de9ed16e2552bea7c3281f2b41466762f6ab4ec49cfb98b", "1837502f08f79dd0a369d1149bb051eb5b8d3b1777463f19e0d63a048246786a", "06c224790b64e081570550455d35233b2ad49c7a37151cda215c38f9665fafea"), ("120e11f60398e1e319cda808374e102325a79362e98521b8a703ed00adf890ba", "1cb4e716fdae8aa0941dad309a4235e026505761041cfc58608069470d747e11", "117fcef31ef252616286c00a003eb4bfe91f54da69202cf3a8f255cc3c53ccc9", "19322b65165e10d2b326c43c3dd40dcc17a8ad0ed8c630e210756e35a6a28cde"), ("04cf814767dcc16a748f952b5abe12d24bc7c60fe61bdae1e08024616bb3555b", "23c1d9a1c2266d65cbbccd7a2244ff06fab645fefdb69dc189dad223cd28703d", "1b5ab6bace9d5297d1894d09d06fcba7a1a6e6e08e2526b87cdb634a8c6d4a9d", "0bd9ae9882fe17951d3ea96fab5c946330e6750f237567fa3554c5758a8470a4"), ("0a57f3d32d6a748e58dfca425a52643ded5c22fc84b56c2aa38d7ce5dcba99df", "023cee50b4cbc22073bbdd0b6fd0318b4de76d775f4b91d6f1b886c477c24b31", "1b76fdc379a97db198fc0a85606d868db1d97580b1acaa9e95ef5227eb55d965", "237e75ef7b524da7e385f861f638a6e870c15bdceb82ca1c975a92eadc094018"), ("11eb0b3f6dd297bc02dafcef55748e0e2cc88e459321a714e32ecefbef9a61b6", "19dd0164b67a9c070f7c332969bffe5fdad8a8fca1623c7d4d13e2b0cd8683fe", "2640dc198c04cd726bb54a6b14c0c22e9b1bdede70a3814238b9678e00de3163", "16d771030605fe54a54605afc684bf2c3576188fb2331e05c0ada190152d476d"), ("2ad32997fe45aedc49fcfad4558c32b84a4f273f0b7b5820ed3d51dc6470e0ff", "1c86bfc21665a022b399403732dcebfcedc9bd59e62e885a7e79d09d81ef2888", "16aec954e9225d346c523c034f2c95ae44bddcab3605fb1fe1b6eb00f2fd78d5", "066b0d06ad6045a0c52446aef3964d3c93f2caabd2188d5d0edf2027edbc406e"), ("2fbee821858c9bb4f301e4cfaf87b54f390b70b4cbb75e27bb7899c7f1bad1f3", "2b684b51b449f506f1a99857f929865283a8356f405ae47fb76ed84ea2035169", "2c13256bfb2b71110728e5355348658804d8e12ef096a9b39ad641c4894d662a", "08729f378299bc4cca9601b5caa1db9c49d27c73c74b675c9e866295bb1ee853"), ("12781a3189325ccdb8627ba432cf28abda0fa55093b1dfd8a313c20677733850", "0c6d4a0b6bdf799f55e40deb3a91e3bf830e0a0b975f5d666e445a7a6e5b579c", "1359a68c31f02d1c425498cbc427228ba2599a1528939907a31bea1b9e4bf993", "2014f96e72d4c602d2109e374d88be70a1eea41d0be32fd31d2f941b0ff15b54"), ("1a4446448d41913d030e5d64dfc2b34c77477e8faac8007c2ede99aa50a1babb", "193a82bae8aaf8fc49a0a7fe9be4bdcf33b34f8b334a4b282e97d0aadd0c3156", "13fa8ae9a0ddb73da71c066f0e99a3bb8db2596366e6496a81bced8436dd1081", "196370d63670367df35d234286bed579f857a24871379fb5cc93f2f986a622a1"), ("22214044c5998d34af92b9f50fa9c241a6a7738aaacd1204290ca8f5f2861d8e", "27a8f5cd211d062871e3fb21119c85e5ecb8689f8ab8cc935e237056f2d4c12b", "041a5c7ac76e094c3b764ac54808053ffc0b08bf73098317ca23def84e2f1d50", "0a98c43104eafcace0d343af361642a26a36ca9e763a25b9ccd6376b2a1ba2ee"), ("18f1c540f6ba2d2f61eac415106096ec21001b0e60e949e71d69d49523b0ec22", "178fa9224a8df036e7d2c5df4d5de755ee4588dcdf3b67ecc205dde159c7c255", "221dfcb4b8d3a0c94b7f3827aaf16d4f70e9b7a3422c8644d00950755663a53e", "2c8d9a90b75365d7ec91211da9721c63714c2b9cf9cc859cc3c968f1325a6cf1"), ("2f21d3196e436284df59ef472b8001d09e6a4b9945959eefb608a796304afcf2", "2f13a402adc90e037d9d56eee160305ec8db5b0a9bfef58264f5f617a729fdef", "2a95bdbf30fbed99d236466c1a916f8a5c59ec0c0cf5f292bb8ae9ac12cf5ab3", "2b15c429d30bb490cd9e6f4642bcd0401270f95e3031ccb4e262fd8be8c65e08"), ("17582297b0292f80c9589168dfd45cf6d6307f9376c6a65c45d397e2453fc230", "0f6494a7df50343624107da0327660cccfa77ab886218f7c58cc5dfa84956ab4", "27252fa4d60a69e250b369acec2be8018d14f3f473085b05836a74c8d009b45e", "16093ecf3078959cee20ec58531a295285bfa3585cf246ef21d0fcc74d8af2dc"), ("2d7a3c41188146a52fc609567e25c4b7d76e1b7d4e09714d3242590b2a0631c4", "1928efdf734b795bb22960859730670d3f70dad23168fcb137a287cff25b2eff", "2cc288494a708a5e21745bf54903602f00e9b491e8042a10ce085b4d780c02af", "1152ed419eb0fb52d818e9ff30ae71ff315c2bf1ca1f9c3e224fcc2a04184635"), ("1c6a92a5671490df5a296ef281674ebaf5bf73741be975c5bee242234cc5fef9", "2d4d38c72a59351960fe99ab86b02f502c28c5314677af26253a9744276f707d", "085051605f3cdbe73a03a20c6f81e777dfad361e74016e027e42681a64d297a1", "0fa058e75b611c066bfe6f47305eb44ab64d96a34d7d9973b16a07b388914434"), ("21c91be94f92de2cab00aa400af221c06e55239f40505e71212a83a7154b3de4", "0c42afe5bf1a858b6438b8eaf98a7600eb0ebd21a56b17f521eb31dda3519602", "0e5a639e98bddb472a570d5b62196b7ec5775a684c5e49963187ad11b9620ad4", "0166fc9c598119fb58619580d0ee85e530c2330fa53593290c1623eaf784e4cd"), ("1028c08200806c9bcf59f67ff8d32b0258596c64be5973734215a1ed1b1cd135", "22a486892d679adc72db368a94b631433842bfd41784a0166c9125549ca44f08", "122d1e6d3b2920fdcded0736ea89302790ee5ef97fb02f74d7a94839262b3264", "1807c9d94108acb9518c64b54faa49e171244d740dc7726f99ed01ab80623d10"), ("0b83d775f7316e7471445ee804f0e43dc998b41e9e250e2c001fc6c00f5b7221", "018161dca2b1a501a55ffeea42a0db6e3c28af452f4486ab9da419d817c28946", "2a9e4a594e723ec8db8de139f254b5e1bfb4454ae615a954a093e9786778c694", "10bcb855dd2061916cea6e080653947ebdebfbb1805fb79bbf2d695153aded62"), ("0819ce80e29525e8fe68727e884c66e9985dc5e34b873ce8edc8b34cb080eeca", "25d5cfb05d19c10193d09cfb4469bf39fbd69a31e32cb5a27f814b1918cd8be0", "0e28d6c683d48f506380013c6844cb21c7e68ad80bc0eb59014cdc94daf02b46", "010f4624f61fe16c9faaabcd09617b49c709537f52399071d76209af6cbc1464"), ("0ef4d9415bb8d13826121bcde0c11f60cc223b91ff63a8bc89f8a57c0bdeb7b3", "27d5a1c041b888bcb15deecd76660c91736b05e6a0d3e1fd40cca25eb6288fa4", "0d874065aa7f6fcdeb22e0fa722fb666f504947e1c6b745539c6606c71410d81", "1bbfaf3ec7a388e3bc6818fc6333083ab67f1bf6e5e9837fe8de06948b91385b"), ("0a6e469ecd86abff78990eeb58479fd8cb908648f63cae0849bbd71b58bc3a98", "257d31dcfe4b27022fa1c8f32ab79da3541b1b71e066dec1b6238a54b1b0b031", "10e338a5f46015348dea68dd28e9781f3e245dabda1f970cbf8d030980d098a3", "22a56f4920eda4cf97ecd20e29c97dbc354a3b309956ed24ec0fef61c7a02054"), ("0af3a87d8a50aa466290e517d7bbe42ead2d01988b735c67932cb5809ad0a23e", "23a542f0d3150be5e57218aaafd7eeabc7e70ac45de6ce53da7a9a9f3d6d0e36", "07297c548c5345e3eb088aea1e89ff747197c88fd6fc0d54cc7cbe2fd4fb2c1b", "0d0cd16971fc6f4ab8d2c52b08a1ade84cb243917e1d315f0e9bc4351d9bbe69"), ("0ae6092f7de8fb431edc82469ba7b6b41bc3ff27870d2ebd7c8eaa1eb4edcfc9", "1fe24d1d27620b8aec407c067ce11703c06cb831e722dbe7fed96b194caed1a9", "1d070e9aca4444328e9b7a45798a6ad2d03aa3396c41307be17154e70bb84ba6", "0af4bf822526d37b1b8d3cadfd9342c5211ee184b6fd8f726c313fd2fb58b4b9"), ("10a21a83d1ea5a47dfb428dfabd12ac79512252d65e80407d25767f2d955ebc7", "278a4b988d5ac45338350a021dd364e3149f739f00ff5e6ad1a795305e7e72c8", "2e07329d80bcaa57171390a3db549190a947fa491e9cfc7db83c88a352989187", "28e48c6f1224ed493eeaceeab70ea6ab4dada5df7f3693e4fc2b8ef39b17f3a6"), ("0bc0f06b2beb854f4f7eb4bd10102d864dc026bca5b862146d1bb0c7e43a4750", "232f4a16c70066e02b6431aa2ebe3d7954835257265c11bf25aa18a3a6df5ee3", "0a84925a6cfadb20626de69972e63d299da5f55d222f2b7ab1eeb0ed5f9ee422", "1fa4b9f99e0ded79bd33c81ef2af427cbe4b806769d058ef04964d217ca69c10"), ("1bf56e02ebb3b5211f22ca7ac4e96d54c2e82b79c75949230cb6cd8c2cb6a7fc", "0557a4a4abeff050b4fc3d6da542a57dd7de9bae852a998c3cbf8c03ca93405d", "0cbd2ee11b874fa5bb8426b5aa51a4abeea9803f4feff9f55c79ca67a6e433d8", "04800fb90509c675e294a54479a5b4217f12d140791949ee6fb364d1db10a729"), ("1b03501dd7b4fbf8e2cc1d46b22415f92e16b94e13631eeef4ab7341e08b051a", "10225c49615157447a955bc750f0262c8ef0ff42ec42e0775f822037885e1522", "17a262b291527a94b4cfc306a40461f08a582f3251a8622a929dfd44bde334b8", "0629d8e433ff39ce3800cd1aacef70c0fe8bd68410dfa7973a693e8b4c1aef0e"), ("226bc96e6e2ab623d1a345cfa879dff366ead85767528866e2914cacd4106a6c", "0d7a9169a2ab374b1e79855eeb817b1a05bffeab824cadc6df54516de224c898", "2a2ec08359c8a50db9af956f7c43d42024e368fd084ed96497a3c88e6827ff30", "2e2f1cc6cafbb8131df1ea729a6e44c1e55559acf8f52b36aad66a271ab76675"), ("075316a2cf4b204b19974b409d6d787d3e2f13d6e48404c057e0abafc468e1da", "1aba78acd68434519c301407f1dac13db0f431c25ed483ea4b8b296b9946ea31", "1c25c26d2157e703e4f3abab5c8e610c956653693530d0baf0702b3c7ef84d5a", "13c168cc0ba5c9947d09de83d0b508f7552ae255ee956dd027a3b8a71c351299"), ("1cb15b4829de251c877e5ae34d443979c7bed5f76259b000ae8f3489294c3f04", "2c10cad1beb08127d5cfa08e9b0410d26099b49b326255f0a242031d8e4b0ade", "118e609f240516721c900d64bdfbc25999ac0214f8a89f960b406a9ec068a2dd", "16ec000a8ffd9cae54aba841ac781c8e90d941603a78d3216699861b326f2078"), ("0427f72ad3a1ebb5ea3d82b8c8260b6c008c273831df0ae8cc864f1a69db9c89", "1bd72ddcd1f6e786988d9311dd5ecbc0c49abaee64d7294966a4128f7ff71b67", "0155e0cbce980753e91316b2c7254100b879da1150964d727c36b706b7618931", "27094851e78386de3674ef94f38982b51f529ac4d29a212df71831265956f0fb"), ("1a00b33b58c0c20fac3c7c3fbd977c99f1fac4e84b71aeff0b69e61a2061d0aa", "2b260eeea50185ad6b586e863c024c775d739113c4d55c71ffafd6349bc1b03f", "20674d04d0dedf3e3191ed3c2fe3b8975559b54fba063103fbe99c9715490d8d", "2ee30372d9ed778f5b1a735bd3454fb22bfa6ad8f2af458b489222bfc2418c6e"), ("2878133d86acfa3dc5e6c6bf085135e8a1da955584dec87a31a440e71294c087", "0902d38884f2c94bcdaaee4ae8d82d1e9075db92238671f70800353183e2d97f", "2ee746cfedaaa37b54b0f4fd5495750143978a94b33348af289fa6760682effc", "2c7ec05f76b2cb452ecc56c97659768464152add48d1787f5cda5cceaab3b001"), ("1de95fc58e6705f757ff8e94de95739d98ca4fb35fb55f7d7556b819cb59fe7e", "2580101794d1237c7231b25afbab9d0de54dc5f94a1dd21e8299966e0ab09a9b", "225e9fd49e4c7960417857044c711ebcfdae21b7a7a589f34fb418a446cfa29a", "2c2863f37b58069387b60433f55f2703226abf655512ec8f12417601b76a9507"), ("1ba707f208615ec7ca3e1980ed1b2925cb61b92cdcf2227a2a5af171dfff8361", "24c603927f2ca2cdff3f63c78aefac067d078e160257fd5a78f018a6b1dae016", "1c1ac6c5db34268bf5337d29becc28e950434158287c996adc65aef6d38b338f", "00d0fd04db7d7ea7136c2b67716a1c1bfc0dc5d909616887323ef312aab327e4"), ("18fed66ea4e92df6741a258e5900b4c6d980f283e7eef539280cd38c94c377ea", "0ac1e6b8135754ac091bbb2ef15f02819fb0eb2f4565f001febecd3adda4058f", "18a1b8d2f76670b80b6623cdfa0f7b2062d07cae50fdd65e5c85203ed0cd8540", "0d3a836a2b02fe55c3ef70f81f1eeb86eed9730e153b14009e528f72d9d78f4b"), ("11d2bade2d186a431eeccb7be4f80c020b92469d9acf9bbfa9ef4ad634574d18", "11f48eef9c5ddd71fcc46374a2ab6531e87d293ce647a088ae9aa3f5fec05cea", "0804ea03075542c4cb97831a0ed565d99ecf4dafbab9fd9be4f5d146062c810a", "10ebc252440307d5befb9d2095c2f46c5cb3270bb2eff267156f622e6df115f8"), ("1867b3a980614a982a1e43e57350ae469dde74c87af2e6db54dab65fc79d7660", "26afe63e95bfec9974c01394253edeec5c8926526fbefb657c45e930cb0a1cba", "204790aadfd5e18555cffe2247553519e3def84cba8bb7dce31e2071a2a5b562", "0e74132f2cc11837373deebfbb49d439ffe87784ee6b804e72c453944926ed1a"), ("165bbc5650603b71777d07f2d743c49af8a312f7437e4cd1717d0da815e1d849", "1f0381350cd708a26e20d2209d2783b1d957d9cfd3d43ef54788cf81b12ca72b", "283d6a357c69eeadf38326a30534035434c1117ab2feb59bd4a220ef9130c923", "2d24fa34d3fe2bdf3e3021d79cf4d099e8966f24cdf25ef347a974e486f3cc69"), ("239c343f8200840562744b4fcfeaa0136f9bc6330da168021c5951d4e74c3676", "2654db7b3496921247fd06c6765e32efd694e35010c72376b4e7311820310c44", "27f787f4b1a4fceddd960d4f00cb760cd69590fe8d12e156b07fdc5a5da6a079", "246df47f32f0c1c9fbfca5571b8c2b695dd4bdb03ff7d04cc342a08fe3b41f71"), ("2252cd31cae98e57465ec18f90a751ab7bf328129e57c7e68c63d21e43a5097a", "228005e23d14ada65ea833d24e8b95b9bc43ecdb4acc6bb3f962a582b15e1625", "14a8fe71cca25f7defe4b1464267f860b25d3627eaa33d29863e3215d588b68b", "105ec1d5cafa2e8fbd45abd7643e03af0de2195789f93b85d08e1d168574ffdc"), ("2aac47af025f22cc16b500d7c959b4d5214d54d42770f52954c63dc99cdb93b1", "12dbcf180d290161b5056dc1f356b1e4c1a59c9ef531cafd38c4a0c28c69f4e4", "19e64e1b37d93b76111313e0a8b6ded3fd69463b1818f67cb1042176b6b693f6", "1bb5e43ea10be1a23c2711ecdcb9d290ce9d5fcb42166e35631dbec74e65cdba"), ("28288196857238b957500b86699fbf6db1fa75dc00155f445bf379d6a0e642db", "149ebe36cd872bd669eb79cf4d33d1b1797478fb1fb7062c752acb34723370a7", "0c43e3895a0ddedea6dbeabc331e5f383fe19a643f7a5b27bcce7d94b9bd8e4e", "1ae94ba5020906988623180f3c3fd65afe7b6666c802e805d6b19067df08da98"), ("2d90babc7cf89bf8464aba491bfa823bb6bdd162860f6d9915259383a59086f5", "210ad24f839cd9ac85d7a1b56effd4c33f1fd7437a9ddcbc5feb3158cdb7e0d3", "19c38de864732747616d7b0a12675c3ae5635a6d5019ace62969601236856c10", "25bdada10002cd383a82625dfa8c14b96bd07f2595aec99e228758ae0323c531"), ("1af89fd3ebe1ba502f6ed440bc8a72d4a3c1f22aff6d9fe7839deb37ea3ece98", "2ff64b824c770eb3627d2ba0e33372fce7d644ee338d32e9240ef9277cdee8ac", "2176f65c86fb49a4bcb7deb6050d5ea72385b3330de99b57e221f904f3467862", "2ea095bed3cc287777051aa3bfec72f40a6583cd4714e39be7096c5f8721b181"), ("2e04066d44fc98f79ab9da7882bc230ff72c44b51f6bf29c4679608ee0ce5260", "112d5d965e1a639665ab65a584d69dc5b2b0065cf892289402c1b360237750d0", "1a2687be0f0f01ae81b252789370c3bce018e5465a2f64b37b1e512847723845", "0b441e17baf6ec7b8775da18db6840f3305013218e569ec9b85b750aad88121c"), ("2e83a148b4af01a8c97c7b2ffeb738fef8a9dfa4bdbdbce115d5730e4f5b7157", "1b65d011015b8682b1bfbe233d77bbe4575bf8e54953d9a7225017263a7e6b93", "1699b017db582540bbed5579288a67ad36796b39ba6d4e595f1440f9ac5eff0c", "2fe1962ea42ca3004e45b6bcace1cc8c86f5abf4af28d2f0acaa29cea4721d35"), ("219fdec529eeb348b3a35d0224c2446d9de08018a7e53f835916a3410b2e67f6", "1099145db10695b178499b219b4799aa876cbea6e3813927c7abf57d03234230", "1a1198f3903bc097717b2db30bd14c7665e7e6e800fa6c92679f75bedf29b535", "232b736cf52ca94c9cb774b0c5ccc0eb2268a63e2ce7cc042a42fe4a9df1d2e9"), ("02c55205722197e6584d570aea561fb3ad12f4f2e9ffcd8e08495a36c4c45a76", "21ee1c50cc1313c8e0cb3caec759ae77d3b8a8ce9bdfc78573092131ba9f56b9", "2e85fc68812b954c0f6822eedc05d5754996eb0eb6cedde8a7fa142cf4bf7782", "2a4fe0301338646cab599c6a21637e99e0c32bbc39dfdab990628cdba08cc1eb"), ("07318a579ba722c56fd1b5508dfcc591e8a6863a0b07e37825147a4a6c0003e8", "2783225f08a8da54cb6c10e89cb85090a0ccc95fb904ebba8018466b8ab29089", "1a289a1aaa2c245f306d641c6d75846ac1a113fbee8459e5f927f799c529190d", "04df302e51a010c604f174f8a5b8d0e0ea746d90207fd6e20bd50a442badace0"), ("2cece6491c956d6c9b33eb841f3f0404f4b90f12d055d21bab445a77511c197a", "236fb15b4be2e8b1638bdb0b4e6569ab50400a9c60b24df17cddaa09a95f1b18", "0583741236993d30269b618ca5ee17c00acab05e2fecf1f678f943f9c800f44d", "0eaffb4df2145e7042e90141fd5ad4ac48b0fff6f31c8c548ca8c1d5d8340ff4"), ("040087bdfc663db81ef926e57a50de6d52a45870dd88bf15d3a1167acb6a50f2", "109d55434c37cfbad27401e5a130c485ecf1b56cdaa8876eb72ddb2004d2a46d", "2df33b861664778e0f2a5ab7e4ad92c5823589ab770fab22fff521cfa3242860", "2cc1aed7c82cbb439586564012231b9cdb8c9f545ce4a667d00057860df2879f"), ("0f7d179e2e8c83dcbfda3c93edab8195e5a345f6ce2958ffe767f2b921abd419", "102d462dfdf5f1efc6d4dd349b0b5ae4c609306c2c9bafa40731dfb76bebc15d", "025781ebdcf08b0b4f56672b3f487606d02d5c4482e9051a5e4629ec236aba86", "0007ccc32f3c47dd380e319cc097dc7e2a18c85e3bb37202db9e4585e08d0fce"), ("13b9f3f64ee6c156a5a3a1664e2bcbe6388b827767c393cd12c5e52223d96fe5", "07918cdb6eff49690bfee8cd4cd8c8e0d53b95d3f4c87335e03c58cb3d06de0f", "162891c6b7189e2c16bb9a791b71064d4e3b7df8843c07ba5b95c000147e6435", "257a1d8b11beb03369eb5d866a397e2c6df04f508279f41f789edaa6d7526de3"), ("256cec9b2ab7a8265c9e765b5f4ce743a849a0aad761f41073435bf9e7d976e3", "2f3aabf9fbb41bde2ac9517832c1f81860d25f9dc9e5440c4f1d09a95b661e95", "0e2f1c3451873615e7a75e705c7d1bb726e184499ef717e54a6d6b2d725e0aff", "130c02772766e2ebb9efdf6be50e54d92fd149ddc992cfe6c19a557b938aba91"), ("0120bb32839b1869a72ee5dcbc5a88d61a0457526b1191fd3a09ab5e4cd543a7", "14890419836560edb6a2e8e33921a9f1a947194f51dadb0509b5d0bc1903b0cf", "193c319743f035c8e052f0ca0afa78b8fe32841b03b30f5e0e0ebf524fb46349", "06d953fc559ab8370d5a16a479f143e9354fbc5cc3c3fe81c7503944672dee9a"), ("0f68cf1842d650200baf60f8750ccc1f04b5e88afe6a8b862d25b318a7f45f45", "16d406a217d47bc6db5016c09329e267dec2a8e5751e7878d5e21a518b998f53", "2619d207120c8c0c82d11af54109f50f1b0c9b69a540a2916b2fc6a10606bcb4", "2311bf32e1126f958279a088dba525c277a51058be92487baf2b1acee7a3593b"), ("20f282c194eb7d36108a605b1b3f5204f3dbafc1e13fb50ecd68958fcdf2ed4d", "036d3a349808cfdc683276692ea75a8ab805c9bfec8b31ef7842650894b0ed23", "2ac0db6c6620805b71285c3306dcf9f52c13b9ea82a42cd3ba8494dbe50ea9cf", "1973febfab941300151b6316f049358e88bfdf9e71873b06344649e785729e88"), ("1b49aa6e9631a0614de722f4518f72c8330efb8a9e86610cea35959669b88be5", "030dcbbd59c4e0c6181e978ba3e20e9adc2560e6c2606cd0646fe7080849134e", "1bb9de29ad08918bedc1b67bbad33416d1e70d012e7cffc361b3cc9b853ce7ca", "2efb01b669b1885bf2702ef3d1a1b8e6fc97cd01f0284aac7c6db485d9ab6cfb"), ("1c7c2adc3ffadd36eb7abadfeb536373419f515275272bac9af47085e51ff4f5", "0eb96a827cf3768d9b6a7933154432376956dd3c41f753dbc9a8eb2df6b712e4", "29a3bf9e7e7d8621153c7438c79b24bb0580873c1a9af5ddfc851244b2d80704", "2ac5afc9bce876992b5247d0349a316e5264c6031a9a442b01be2a0598995b78"), ("1f288a3620f7c5e867ccd68dd5a0fa3e3dede4ce85f018192821a584e67f3dbc", "2c10ec404b5993d8a1153f86cd9dd6bc9b603605e9da3ba690b56cb0c74768e2", "01854a56263653f62b187e344f572b13033518bc0a40d561a37c888d4ec0d083", "088150b7740fb2c16462ef4b675481869687c1bdee88709674a78ef5fcfc1b69"), ("1ab8c2ed6d54c7e4136fb0b92c747c29635b23bfffbb537f7f1a0f26217fea67", "1988c07c880f88301bb40a571f18e9b09015274070ac15fb7d173dc386eaa75e", "303273f9a570ff0bb4744272daf1b1433f683c8f211e64acacb21784c3656881", "17954fe85e60a90a5d8e29d174488edc47a9f7b3a4e5b19d4006fe2a87753aaa"), ("060b0bda4a7bcc1c847f12dd2825769f2e256cf9bb1519f787ef07c6ae1d2961", "0f5a6b5a39328ffd4cd8375b2dbce68fed25ba3da8aff771119f8cab9ec971e5", "077b006fee95c793ac78307b7a7b61cde65cc29e75243b2592fa9499a320b655", "0bb18b3f9d16b78845bc1099b000bdceb5f26135087015af97dd05199c8ca7e0"), ("0644e4128ba4191e646481ce1984f34e4227ab7fe780bc3bf3f9c86ca918ab65", "081af7d4a4c15410f4f42bd46c6428f0a4b71d7cf8d2c67f5632efa34d2d2195", "1d5b33be9e38647baf3ca8bcc90079da28dd72e33875c1cb0318e25b8d8a4965", "1584d93787eda0a11e6d68589d63ccfcd92d3fd739699b2adbc1ab4aaf8558fa"), ("1751561935cf6cb32f078fea1584f55d83c915ffb943b88f88bbea9cd5e56937", "0d993c5b028f51a45c57eac2cb7ef4f9d8fe54395d41aec4188b1ab09cf1c368", "0cd69b79bc9b5788834f2bf0465666986fe9d9aca8483e91024dc36000434466", "2c87bbf71a2288f23e3c36caef5d83c1be658970bfffe31f2daf2de29f1248fc"), ("03f86c69ea7e3983e060bfd9abc8fda2359a943fdf0e1b9459bd99edf7f24192", "11ac2e2be0446e4b6c5775aa3f9c9a07aed9c7e4b0108a8f1dc23309eb3e9cf4", "2a76014e81c9ea137c2ac22afe170b4149e59bdd058bb07357185e0677a192ba", "28ed03d49e158757a65d3a3ac266f432e97580d689204158c85d82c5338257b4"), ("120deb2e846dabbfed5061a1f3908c9d546308c6b873f9c566eae1ba5d63dbad", "2ef6c407843e373906ad268daddfd0f7f9702a99f258358e12305e78d2d254b9", "04ae7903822c477949e512076f4c145e9638b223a56fc1311255c7622aebfd9a", "277ca9821b068fea62cb7560d65e7a0dddf45038976bb72713f9062417fd8356"), ("0670741c119f0ab2a9a06824b9743fd3946a4bf40cc13cc03d97ad29c7c316a7", "08c5775f3c17bec142e360992cf1d6194fe081bc32dffdd178d5f9af8d75637e", "05491f4ef5d033ff05b21e951e356b9deb605e88df07e2d8b6965a232774a25b", "0b241c9d7b78d5d4491dce571cc2ecbdd32c748f52ceca87737514fb2fcdcbdb"), ("1ca6c37fd1e907a671bb3bb28e7f1894024c2df83fd8bba392a0ecb1165e3548", "088722ef8357a078e3f39baf1ff6a1931550a1e68bc794e8f4374ecccf089444", "2ba3b6ef31bde69ab32c54e4eabb9308562e5d84146ef9d8f86c52edd9d8817b", "2d1b68f2f31df46e433d2b17a37316551ad6eac19f4a0bd15d7cba9093929aef"), ("120d61ad3d7c9afb9f955d5b77f0e1c2e198bffa40f24eed53f8c3855cea2e99", "26ec676651aa7bd9a9c8a61d4b32dbe5361bf7ac5c0f1e20f67ddab6b1fb3107", "1e92e7347dfbdb24cf6ec070725f66902eb9d500a7de3aa94cb491fb373c95d5", "07e2681e881fa0b95d4f27b74d703102c56a593083997e5627d63c2006cf7b42"), ("1fa51896b3bea3d0852a0f3921bd4f347f14ff9abeae893c952a645394cd5cb9", "26d1bd2000a8abf4b3035e77501d149a28a479319c27d497464883f8b650a23d", "1a96fcc3f8befea32a4095e2275ce03c23224307bbdc79d9f28146f4ea02106f", "1904e10313b19de43ec3b29bc984128183f674f5380e81b02d1933d07c3fede2"), ("0bc21131c651655bdc2640744cb22c8dc78c5c640e7c01e88b6b4de2cefeaf66", "1480247dd7704178510434236b89390f755c89a8254951e580cfd8ec911146b2", "2dc8bac4696963d0335f7a3b7593af548f05d60f468b7c0df647bf823e1835c4", "1d7ee416eae217c9e380faff5dc1fa95d71e0e08a465b505e10a43a9bff2d882"), ("0915fd077dd6bcfacf06076e4bdcb19ed26e4d5b3cb285a2ba5305d220f6c1a6", "1dfb2bcc1c5fb111874e8e5ab22dfe4b76c34b5ce22bba10f9d67873893d7292", "08a8c640fdb783bac673823a0978f4e68a938302f7e1ebf93f76921761d04915", "0086f067f3c77267e9f4efef3909dec6ba86313ffb72ffe694c22a45fcdb584a"), ("11b7a24560c107ed9365b4a99ea92853bb344fd1ebb32bb3305322c1b5329fad", "242ab61b4f13dfd3c63e304f23d49da53ba9f139d19e065264459fa9acbe96fd", "2759f754d2d21e8ef5a611f31d1f444d38e45e1291f89c322baab566c8571a45", "0b23ac370aa6282528cbe4b318ed5b650478b4240c94406f8d48793d23a5efb0"), ("01e2b803ae04851996e3931ea19db9ac911d075b668d3337379c912281b2c785", "1189b8d7bbe579ac128adf937909df98d5aa52fa185c599c34f9f7b90ae49717", "102548f7202394b722f1e93c90729e5d65bd7e40555ef1f65693afa75dd84f4b", "0e29b4012f096609749de5336433757af714b5d2b65833ccf49e91ca4a70893f"), ("0368307f3c927d5a0819ab65ed0ae1dfa63d4d5822a4bd454a139fe6227b5e6f", "2acf34f3dad5933f739065c3bc72028c38b98c5ae80673729fbbb8946efee0ce", "266fb7f98cf4fc5bdbe5c0c90aba32768a8feeea0136fbf660f51027509a2301", "2b33e53b949b8355f6e7a8d28a4543dec52163fd7d672288779a60affb09c550"), ("2a9e21b789f010d71990a4d093f0e4c516521fdb5fd6df021cb3ab75fcf17b0f", "1f5fc2f9e7dd2e8c18abf3a0abbbafbebbfd6fdfd489ecdf98e7ae5dbe881734", "0800abf38d11b0c6b1292b320dcfa012dba2a4c7c03e333d1b9e4f50f6645510", "0de6dc8a6e71a8d20d1a3f8625d03279b79f387de5928871ba12f628e697f5b4"), ("277393fb4dee35f7fcd696d5a9a5bff96cd1a0cd1517df14af9e0aa1e59d6a97", "08cd50902b21681e6f73c1341fd83ab40d80c839d8894f5825afaba371177fea", "24a2b5ceea6aa0241b265dc3e306bf551d5e8e9ab1e004fa08651738de1753c3", "2ea76b14f8804885e141f4504b804173931c1fc51386b6b430498e038ee8b68c"), ("20dc54bbc50b4f5f4171b78b3b26769aaa95790f5d9e85a9ecbeba15f461e904", "00bc04e001d0725c6633d2842d4c70356d82610d45761e005307742abe018490", "076d3dc8882f78e8f38596a4eb8e4708c85587e88f8314deb883abe7c1eedf7f", "23dda97f0e689bf02868a25ab5c7027eeecdf6e29629db1c3121d00910917c6c"), ("1438d4f30eb526914b5a76231d3a69798fad6a60c97cd3b53f121668235897e8", "24fc3a046e34c2f103e23c5bbda7c8fca3244cec26f76063a0e54b001d57c472", "2f6331f54790f70773c616330ab74ca366ba41ce1c8a9e158b7b74b8f2a86382", "290fec80acf252a99760f3720a5b950a6cfc8531313d2fcb80f1268d1f66839d"), ("2ea84a5feb2d58bb60f957a84df84a9b7405203abab820502ac39cf97f9075df", "15b47bb9014885158245265548936775f1d8866ea259be88b5a56bfcd30920e1", "226a17a363bd529799c772adae73beaf6678f634e4ba2c321cae3e43fa12dba1", "02a6a2f060a8905bb9258556655422af12bc739da6987364826867d6dd6bf2ab"), ("16ae2343340e37cbc2792be1dfc12e6630f32940a98393f118eb6446d3b3ca27", "2dd420257ad10be9b1323b889051752f1d451aca89d72fbb15cc9ad7b2cd3ecc", "15445a3034291ef0e0872b85300e2111335eecf89c862c38919ea8a29cec8f8c", "2d4d27e854337c045c33dab72dab08a3773fcd065e29bc655b1e1605a8529553"), ("287acee0829d7ec0c1d0600b40eab3be37bdfe17204dbf494917f76d14347125", "0a396f0662fbd9514059785dcdf971b4d9f3c54c755d8302f1e10cc5ba0fe6da", "2313c57a71ffc555d609107e0d2796832697eb671ba0e424537ddb22b933993a", "0076ce296df95443b56eff39e24ce273fa77bdbdbf3a6255d704bda1e6c80533"), ("22c62d43ea8236f6b2b6eaf60519eb6b953d7c22ca0af13cec099ee102b2fcb6", "27d02f362aaac8ad5598b1c302300b13f48136d8357d06ab0650523e26400bd7", "0ff99ee814b6a4a7078a665049c02cf3e6fd55f5ddf55b171fefac991d805c74", "246aa9e3a93ee59eb9bdc92a49cda16b49284be9475de122bc6760d983ce006c"), ("04b7d1a172582c01cadee3e92ba408efe07083f679e2a6d811cf5d18546fff81", "16b39a7eee9cdd8f94e42e1780d22a8bf3c38defcc11fe710f37ef0fae9965e7", "26aca43260044a5e07a0f69cc3e8bc605c582b7aee06de0b1390a4d82a93c082", "20035c8b82c63794400fcb3ca5ec9b75e96fc730e678d32f84f85b0932f230d0"), ("0a946d8e98edff234ff013324ad14c15ab3519906e5ffc07820f83a777e75ecc", "205e953403d7a21d6cb395f8f9025c35d9ae4d91cb19cd664036dd05807763ff", "2ba2226e90edbd22c96803acf9109eca63311c8a922c53951ce176e362b23e2b", "1f7b4c5a205b95a326af136a6b648fcf92968d5be870a7e2e149080fc0933998"), ("0641a6cbad9e1d93cc109700c2f3ff0d361afe84ee371a388354aa672047e9bd", "2c2b741b9e50fc5068cda1685fdfc0832a6d370d529f638b983f165a768bf71f", "0b7608c687ec77eb8ae3fbab45590cf78304052795a23c335b751c2e7b51c4db", "10aee2f94f65ca2e51e5698b7f61f46f2b603c75c3a0de0da6a681567da7ce44"), ("07f75949eaeda9b02d9c373acdd029a45f3f36b88bdb5a8e637ef6f4ecc0058a", "123171ea2fa9ef82cd546bb99a09acd569e5edaf9b825a3248f4f87c7ad260e5", "049c43abf071ed0fdda7d959bff3c85f349337d13c53d31077b88dcb47a592e9", "24dcb9c30c08134cc01e247cdb72cecf6517cbaf1076607cd9ca4102ce856b44"), ("16c7354f82bb6f8ccd6b500f5da28fa07e4be67166c38ac721b7fb13d8f43884", "07b6e8955c53800d6e49718c4775f7e507548d4f93b0c8d68292e215756871b2", "29ea2d52d7604fe5db0bc10bdd1b7d7b5e95409ea82ce93a7486bc0c94c1ced1", "10185a804682f39bc1c10602466ebb00f71b2b6b49cc4833e0c7a0646dd7fb27"), ("24851356b577f2e9dd92a90269401eb44f0fa3b330b41693cc79af8253633210", "02c87cd269b143dbfadde6cef5432dab079c75faeb4e36b80ea0616dbdf3a636", "0c7aeb262facf3cacade7ee355519dedfa12ab4e8a05aeeacdc67564e0a449ed", "2064c802bbfea1cbbbe004c69b06980ba403839c57c7c41a9d80fefc807657f8"), ("1f0f158e1b637ae65c318db45f53a6a4c6b1c3f1888c29685899dd051f715abd", "2b16fd469aa73336ede6848a38d6c67d251208d4f1ef2094793a80b7daa255fd", "280dc8d54d4539f67340a15a6794f3ec96be531c9e234ca5f3028341240f49dd", "09f7fcb8bf9d0d834de43d6fff009d9cb6cbdd626fe0d03e31d7562d1363f7c5"), ("2823183f13d9b16c044e4f2b26b07b8bf20c9db83030d46870d56cda9d11f1d5", "26d4266cd5b3a7cceec72377aac747ef1d4c93002375b92e3f4522edd298290d", "168a3e99af290b55bac31304a28caa73e2aa180cd73dd9b53804f88f1001e0e6", "0b2af4c3c45d0a59756bddf563d7debf21483e1f9eb67766fb1cdd8deefaa9c4"), ("1783ad84ed46322f1184f556534a37e31d5522525a49852a70123e1efdda6dbb", "148b36daae369de376e9d5b82b7305e7f3d0be9923364c2db18ede698af6affe", "181e2a415cbcf30e44b762b909d3844e3914c523996e2310afe6ad15e70a9749", "2c426d5f43bce813093668d8fffcb34c2456ab0c87c5bcd97a4837825b009b3a"), ("2a7d8e36ae1b4a6d4b8dd76bbb169f7b349936616cc2358045cf1fcc6f183587", "0c149609cadfd4952dc37d5ce179a8aef025ac4f28e4c762a4f1bd071c0c5119", "197aa5348a0e0f991f24363c1a2012915fc97be498972352b151c98e6146feb8", "16eda0d752f7db2a0dbb2d6049884685b95fd1c75df16844925f71aa87646fcc"), ("10855de67b4362c179eabfdcbd4ce588df3df8503bfa7ef84fe957bf7a65fc82", "1a793193e76d52f83253698f98d1ea3b31688789cbccdebc590e90c1b9218e9b", "19ba0fd23cfec4b595a9df3ba80229c028057dc6dc63884fe37375d845635922", "0c520cea19c081b711a30b10e84d4bf7594b5361c0b7746ccabe6d05726a83fa"), ("2119ce61df8318593243a482f13521dd634e6b51e23ee11186de6f3b5264963e", "29a4689f98400e73a625f95fb1f508c724acee342aa257bd26f8229187a79c2e", "21626db1d298b7052b962e11bba666433978f43566a7f5298b26cba254b607ad", "1ffd7bf6eed1a84598a71253e057e88766abe6479ebe9c1abd6b4739ba3ddaa0"), ("27e1c4f301269133aedd383ef4d3bf163a81abffdbb664f20ecd31e4a5efbcf9", "12e1dbcdd46cf683933ba868173cb84a16f99f26d9d2a100ad3b619eed863028", "01cf02f0e27ac2be22c61e0e6c032cb509ea2567ec8f934153b9dc7560125c27", "014fb49b73ab91c906a2babbbf6877e048cd6f4de28256b2fc4b2126382fec25"), ("104d2380932ab722545a51747ccf4fb3bdeb66060da393cb93a5a2e8f52a39b1", "2efea00e982c6b8d48bbcda70531eb7a2da3260cec29f3d41522f2469313ae75", "024ea2b78fff3e465b47c978ca92c6de39d32aeac8c7ec7b366f8b5eeb4a4a91", "28468e928dab9bc01c0a2140d5fd79a931dcf88e271fbe1e3ca734f09d84e82d"), ("1fe3604b4b2be4dcd62201ce45d538ebee37af56157e1d7695c3f5dc4e18b194", "03f430e919b422dbde7c2cc0c2db1f3f9a0302ab169dc64159d446e2f1aa9163", "25b257a297aa827a2b814e3e73c563eb58f92387a94940aee85a34c4c56fc34a", "2bafbc66d9ab7c595681f31831ebad98fee6fbc07de61b530585bbd7e23dbb4a"), ("13f8253eca68c9019db0a465794ff702898d336c92aa9da4108f9ff22f5d173d", "084e3b0fd700f1ada6f609bb272c9bf8bbb65e573fd3f501af4347dda69086bb", "1fa24cd19313d3e2b4b1be69fe15fcfa401392b37fc2cc9e28106d1fd9daea03", "07a9dadf4f714b0a4466f0756cb6679fb75db6e5d88a8f7ac500c61c1df9dd63"), ("25ff716466269df1a91335273fe2dfc69f5b9ebb5664349e9da6fc33fc8284ca", "169d12c616a9a161241aca82993bcc6afb1ba5de9499c6b54a0d34a41e05f1d6", "0789f95ad65908df930f02471f26f7d5f20284932ab2478e2d570c152a4b40a2", "2c925688ea42b5ba172829461ae5bba69a71df9afc411ea7e54fa7a286df3f23"), ("25aeb9288d1d92ad417dbf79e4e1746fa70ef482d3885eca0ab5349aa51e8806", "1cad673e9632079e3c02f7dd9d49ca443dfc2dd5952f779785dd62c81b52ba82", "2707e8062bee7f38715421f10bad255110a6b8f238bc14de9b4fb6d10cbec756", "13b1a5bfc72eebfddd0079e3688e7e383ff97719d2ab5f18ada77060e279df4c"), ("0fdd745eb8f1afeeaa828c5784fe70932474cd5fd2f49ea64313a3a8fbb9af69", "13712498da4ff1b99aedc88d73e92b336580eca0907b360772c7212ff8ec2ad9", "1a4c29675ede9e656dc54ddabd17802952cef5e4d9cdb0445d05494a24214683", "13bd5306797d22a199843f5113c62e23a47ba80a83f1fdd71968946883351c01"), ("017160ca66aa4da291feaa9bf128e1376bdc7ef636c105c554d0cfb1e30365ba", "0f380da369331b14788458ed00a1ba1136493d3dee5492601c370dca966d0371", "18f7491f4d55a2bc233fe1e99189e8e76fad920e7e6286f032654cbda39602bf", "08ec9096c946b83ed0bd3e727a9d45cc6e14116e898daeb49daddee56e7cf48a"), ("114cb666760ad522dd460f0cefa062e846a3e2dd11c037fde7f4b8689b44f502", "13a016a6f3cc9311863d3f5389d7bd4e7051d562f8f2646c3cc2f53441592a8c", "22e6b15ece94642b574e637d816b4f09d70105138017472b654afb8220a73809", "01508af8d1df9fdb39fcda0020be56a74f0f1cede74dba0f81f272ac21c34cd2"), ("086e8b0a9df6089fe884360dfe9f48fd9309b79046d150143d4d8dbc95765d22", "0180f3c53b97d8bdc6fdc20d94ac637faae11eabcf4ca6a0f6a959da5c82a209", "29608fbf5a5b181117ba569d18ec738cebd7eee6c602f891759a808533114073", "119add8e6aa6e7a14c4177d6ae01411b190c0da7b07984c558911f34768d8a7f"), ("13b2a2de8c0797c89b3e18b6d3afb7e57fd2346e40570ad376a52a0dca091fd3", "27c64ae0549cab150205d5f44d8966ab20b803df0d3e6b08ebc0dda2372e941a", "1990c4662c50b7e54e9ae899ed0e249ebe26dfc6cea7be852443bea9a3e5a12c", "1fb60a69bf45881c95851e2ed1ec0d38c9eeb4f6b6ed13e56c659a0dea0e9fcc"), ("2a99430b2953edbd008cf854eb859ebbbecfa8233109c6e397c3b497731f155b", "1ae2de84c7c107cb263ffd0def2b4a53fb5af2de13d5728a4d6200752b7a946a", "142347cf7c34d77a20a3e3cd75ce0b7f5a2b8840268253bd06c56d5e35276626", "2946fc7faa554ef4b1ceb9a055992cd1231c641c8d9e04f767700939adc3f927"), ("212b74098fe003a7fb8f1e7cfdeebc0ee138a7d2d81546b8825f96d7d6c501de", "101dc6a55681af10627de5a0ee73eb2262468c238318e1e6afe568e2aa233137", "15ba782e93082ec9385e8c7c30556024dadc34a706b1efb76b65a3c7868e3a3c", "1068ebcd840cbd7ca6eaf33f6e61e50557ae30573ccaa5f450caabdcd3b83b6d"), ("27412ed0a9ba0b9ec7d342499ca4fc717a638475b796dca02b599e4f403e868b", "01312979a8159c9491084074a1c9d35e47f21482034bef19823f9f8ad91b168a", "2d3d66c2d38ebe70d1767de29322afc2cd5c122b952640dd8b3dae5432544408", "05193825429305d56ddb0ee7f51ea22b146e0ee49ce0e2129d620edbbab8af6a"), ("23175478358d14796eb7bfcdaadf1fb7b2dfc5686ede9196fb77cba6873c7c32", "203c55252782e13173a5fd2fd13bcec3d75182d4ca4db93d56e51957bf020253", "113d21c4ee11176e861278bdc85e7ef5c483c6b027f46b66a1c1bf82ad1f0c97", "1ebf03d9ece0590c1b831e1c1a4a4424d47c82af77e5f37218e30eaa08056c90"), ("166e22d93cc1bf4a03070ab236b87076f77717d72c80a2d72dbda6a8609b457b", "2ac86643d6d08e3f7a20f7c5c30a64f85f8569032e1b6fd2a37a527b76f4b428", "08ae1cd02b2c12504ef4b8eb4e9e5e477f3e353b22a6d33fdffde265b43fd9c6", "1d907e3e2629ac1ec34372d712f786b34d1333a7d3dca28f32549ab0fc4a809d"), ("282bfa1f7f3750d59c60b8f07fe903d3fa92a5f90614d11a99315fddb09bd141", "0a554c65204b76c551dbcfaae1880bfbfc84daf1579b032b9363a67baed2ea0e", "1cd4a3d8fc42f0fca8059dbc77908671c82bb4ce6f6798c5da93966b6d5ab2dc", "16838be2c294fdca1d927538aa141d0f4cc51056280a6db76431e75b4c6d3593"), ("01514e816ec1c46974a206acb3bf0c310d3ae7ba5e7798b149f419d445a518fb", "10659d69c48784ca129c8c9abf5a1dbc26ec29a4574cd31f056c73539387d21c", "00db4dc21f1abf139a5d5e5a4d32d33d027aa63442570a63597388bc0045af83", "2cf5bca79b52af18122d8c4061ee5de8b2f66a39002d500300914ef94a8ef082"), ("16977ffc64b7c43f82dfcbd78f69b1e8e862e05c9e6f9d95359a9bdacd4bea38", "0fbc28851709f84264871bc28140220dc9e7fb04d51ff3b3f6fad9751f3d1ae3", "2b64d13b2cbfd85a75ecb869e00f56c70ce36caa10a45a26ecfbc9c52d8bb237", "0361f6b2b8b9553b04fe62c866b6327fc323eaedb23972069dac999577fa5fb5"), ("155d9d1b23d86538581a8bf5f657f3746949e25cee0f48bde53ea48b654763c3", "00b5aca96bf8566655de65fd404d5efe2b46d1f2384bdad662b801bac95f45cd", "228ca58c236c27b18860d5e43d5c44c3d523e0958900fa84a3505c432cc6cf5d", "0d7c8d127add6b36dbcf166611febe96d8492fe1058a4b15cca36d71b48f6a8a"), ("0e83a46f989dd853cdff31786bdbc6e914fb0c64f78eeae52b9ccb4167fd4374", "1523ea3aea201180b18f27d47816af11fb745bd84a778ead2c59a6b84f376cbf", "0059e3968bfc038612a2e7901baf498d43461536fbc420a558e45b19f5738e43", "22e8571ace58ff51b2079506955cc4f851aef1b547d95e5011f319630d63e7b9"), ("1e64b4023b231833f748bf08eba7215f3a4c93ca7660152a157a9b1da34f6000", "092f28ab8f55e14c049896fef542fc9d1045b164eaf61041eee5304f36acf0bd", "0d9d78d1b7b1bc4e363cf6b81c58f2bb63b3f9cd3ac3480d99e1cd2d59682334", "1be54af98a083c615ee316d39a6f3109e22e290edbb038f384cab116a857618b"), ("090757526ab7f23ef94f8e5d937b967a31cc0f1fdfe3fed38fc716fe4bc5138c", "2e8bf3bd015f1603bb81447b2e8808fac76705b53d68c2da512740579ababea2", "29ec668fb248888fe212a30ceff65b93da922a6f9b377e42070adfbb7154e2ef", "26d7f1d6f99324b9803986e7d311de8d58a64cdbd567bf44f46c6ecd11c92738"), ("0e76ece47d0b4d2201ee90a9c652b24e7e3c7b95f8fa6313190ed187d138404a", "1ccb37f339f1ae1268278da2d3b55581d0637a5fdc7c30555c5ce40fab9b0219", "202d0cd50a4629618066b93aabd2de01e3aadfa681e0d8c648112c718fbab67d", "146502ded981222c1fab86ca300004c4f792e50f6cf9ff39b42c238423116748"), ("02003f9e3ecb7a1b21540cde3c37895076ddaf6620872ca8aceda17a3bacaf2e", "04d7553e690d413ee0d5b1dd6f804c7265f70d112652c659fdecd6a3a6012f15", "2037fa80d14a95a629847b45e00eb4466136489d4ad3e1e9b7f2e4736e321861", "02bbc9b84c79fcd1f1de981ae0c2b0c97208cfa5a68576315ae7f39b246a54c2"), ("0ddea54cb26ebf8690952844b316dc720f7e933a9305aad916ee5629abd281f7", "1cd4ab4f7e173440f4636a1e89b1c451551dbcae2153e7e6b808ccaee33c889c", "274d75f49ba5416d91d7ce9c15ede541139b503c8c7602a4ac3639a5767bb7f4", "09faf5ed33b310778ec98b8c651ed329abf3968941c70cbac88ba2ce883c34a5"), ("20fd20ef7d86aba83fa7d9cbc8627155bf505d163c0ae17569d440bc935826b9", "28738190370aef42c5b95e586c629d8ee4774427b33b1062e635a172541a9fc2", "1c9b0369bcadbe43b6aa539e8f155e9dd55cd195ec868fb9f5daa0f0ab9c77cc", "0b13e9df18a851693392c194bb66ecb7290c551bd5bb5514c78f442e24454ab6"), ("185c0c9d7ad6dcc80af7eec2a85cd34a8126dfc20858420843c6b0b2b7cf77ef", "2d80cc4b9c5a739d1071176968bc2cb4f7f5f5625fa81145dfa7b2a799a8f29f", "06661518c800f646d93ee1acd1d2a0dfb2979ebca7117a1a9b5b9094ae1d638e", "175b01e940111bde4350607ac26ca9c3d54fbef88c6af14c3ce691bec2e5bef9"), ("3033cee47f5012a1672e18fba49e27d358fe323cbc6bbde1fb7fad09bced6d21", "2f6ad1fa1e670bf00aa85e7e5488cde456b557da5382484136c7604cbc0b270a", "1ac1f1dc4f9b69ae24920ec175de443dc49ab0c24d830aaa64c5a44ec26fc845", "25a169cc4b2323773f9f87cb136cecacef4be5f6382e3ad951330dcb17c66c32"), ("2944889e465d11e3649b4005a0f0bbf4c2ccd6f4e6b2246ee944944d6dc2294c", "18ef2c80479978e0de00ed93eb27f81e558a769d3b6f954e9916856c56ac82a1", "18413281ce9bd4edd1da42338c9544290fe6620a6ac18497fd8ad41000807d75", "2f3b9c49ed65371b4e1f41c2073bd776582dc33f13986e5598b2064f77ff4da8"), ("13612e77ae8db98754f92009af6ddbd0eed71196f3fdf71ff63a6f7de74950f8", "16d54de411fa97c76e127e73d38234ed180a424f34da8ef424c74ccd6e56764e", "014e7b1f491ca98c5cff2fc5ac0fe744c51b0010fc0a332a02acb2eb957790ff", "1de4193915bf3836f1d5f2003931659577514759b3db6beeb390acbecfb870a5"), ("136e785a80bbd5a239fbf1d8ef10288516641903329fd2cf76272bda39b4fd4a", "10e0a3cc6f8eccaa0175fb98039d82d0367b4f3b112619c26281a704796e840d", "221359f645aed1ae8a833011cef8925c5680c0c91c23a10f4a711456e989ea3e", "2ac72721a3202a92482b35c6f350ac2d0b282952c3f5cff9268a72b38556c58f"), ("04e872ec7c75223fa7d6e087dbc0e388c6136954430589c40c8da1605907077e", "081bc077951d109f919d5b53c6a05f5424945be8ed9970f20bdd2b52571d1f34", "117f642234e4bd385a6aadf8384fc8d71c873fd62a00c0b7027478a43335e5d0", "1ac6424ef7a1f7fb86de175aee6c859a64c9b1669d33b7942b13129158924391"), ("01786387721165d99f1c7c49fa8a98923e39f527c1a00385f6032a347b1e8862", "0af3606bce0a386e470b9cfe8333221918b22bfe5d3d61491ca772a7ca62a416", "16028a6bc87e1a0ee5f958b2cdab944c65e1f2a974268dbc91bb14de67f90317", "199911e279d3d7fa17c924c38c93218103db16ce49f4c8fb505ada56a4937620"), ("0f1432e2b09775af5d4adfe19c8b9627cbc9c754e3c96e504a2959df2f713685", "0c1e08fad6d5664d54bfabc7b9d17fde83ee49834631d00a88eb592cc5934bc3", "2b9768cd106582b24cc8618f522d08d42f19ed7463fc4db1b5442ca2257f47e9", "06b07601dffe4aec945a718c33013f844066ae1a03487fdb53c76e8e344391ec"), ("1424ff5947a9e37ac7d86d3ba778c99f6c24939fbd9f4d6fd140ce0d89120f36", "229adcf0c72030dd3c06a4673f59313a1130d657179b0ee3e6ab7347a5e957c0", "0b7be5d4dbdcc0d5c66888c411ded026d270cb53689b5e677ad6e3b9cc0abc96", "0629ee6bb8029201ae79348e2336a221dabc47e8edb30d7c80484ab8d90ae559"), ("0d091748a3f88e68c65325f466a853b6086f21264e6559f4af3b17833abc5db7", "0550f78a924d01639eb0770c0f452950b0e854c6002fff24a96aa1497ba42bca", "0c75dcee334725749c42b21deb89a5495328dfab078e3e2eb44fc6fb0fb0ff9d", "272674c43098b9801ed06c996b10a12493680fd1221392617a5aab456d07b565"), ("17c4944d8b2e95ce7def52a0d90e888b6e6c6860e170739227540f48a661199b", "28d8b677fd2f7caf6293c4ff43146db496844cb97855b3f211f9ff3912f91702", "2a8731dcae08586320c9b752acd4ee2759d85969eee1bcfe7817de412dc02610", "0946d70695a18f382f7aa02a7c2a134fc004997a273526eb0f78445f67cd9567"), ("2d6c1224b234d1e6f9f061caf165bd86aefd7a103f6566ba7e0262ae2cbac0bd", "26adc2ccadaaf6bfd5d2bb5297ec3cea4338fdbe1bc5005710320f2d0f611ae3", "0b4832c68f6613d428ce18da182718d8baa873c1449362eace4145d2fb78a31d", "2ac6877098de72b3255b9c5112c9af4b371d39f7d107b1ba3d4079b682dc543d"), ("27d47494340e752498c0dac15214547e4c7b2925fc213483580d2f715502b8ce", "2de48cad358dcd6ceeed5e9bae86038d016c90500bffd9a99afb0f6cff0aa022", "1dcb1df6edb6b81a56035a292e7a1cf60ae9adb851133fdeaf5c334adc7e90e5", "15d79a0ed13e4929567bff23ef218fca3e07f36ca1284ea397d50e67d72e3197"), ("204246033e6eb02408ab029edc04f89a261a4be35ebf1bc9c7fd549309428382", "2e9d33189b5aada96f30ee958f91a73b3a636a84094ada44dbf40dc0422ffada", "2e3a8a5b9c5a12b3f409b197c4bb0ddd18013514b417fb0702d945171095650d", "0b43cf4631b073ba6f9524ab0a65139075a8446ef464c3a7dbd6f6301a5678cd"), ("10041c709d8e86c3738e849fa74b33c19ca8bc84eb4707bc164e86e4b0b5b32c", "113f7e84b2827b4cccbfb95b5f90c6e592c3ab7ec3b4ef3d6a740a5036b54f38", "18b94daf42c2876e2d4475c5b93e63e46d380d29ff02e58303816bb1bf7f3963", "09dc70ead561bd56e4bf45bd6d09c1b519bcc5890285c134b8898726fdfca3f9"), ("2d09b3f2fb4f41a2dcafc1dc9adae07bd8d8f162c5b76a764d23996669be9551", "107aa5c84358fd4b38881511f7f141be74dc9e0129e925da804bd696d58346b0", "29109af77d449b0481ff2424ff3239172e3a9673c590d3a05fe540f38daaa959", "204fdba5e3aa07bf5bf715b935d5ede9dc32547d087387024316cce725f3ad1e"), ("107e65319f0c382cdb3cd3891f1236105d9be34f9fcecc4fea96736275968616", "009578bae06e124fcd960157754ae04817f7d220fd6f028721c4c32aefb9b06f", "17a37acf480df3d4036c827d49a3a4ddc89636735745b44013671ac42f37190e", "1d7dac040a1bc0a2263dcda7b8112d3a34c2c86ef991901642bdef2760f8695a"), ("168c29142cdc30cc3872acfdf7caf6c6baf87f00efecc99857e56941b68d48b3", "105eb76d78e5617ff2e8ff12ae5ab040e5835e82177416c0cfea78a51a0f615d", "300f8ec69a484cd69166a32d2cad1b47a0ea15148e7bd5ab06bbdc1e0d8669a7", "2ab33b7b78bfc14f980ca605f68a1a41e778c2fc2e9cf865e8b0e45864a501aa"), ("014c10adebca69c73949bc30bcb82fdee6dda90d10f9a91b42b63f4a88befae9", "2f67ad6960af5bd4eb3e75d4421793410aa2ad0996c744f90259df149958cf90", "2bf85cc79f0534502faaea408c7489dfb425a96e18f373c4f424dc0f45234774", "04109584ec952d55d0724fcd3aa0cf8ff4dd8fe8c63328cbca3ca2ebb9c8a904"), ("1caf212379e82540037857975d03bc9e35af0a82290ca17dd5b701e04c5b34fa", "106186ab1ff8585e996583c29083a16e436f73ce3d3a2935a2e821c105ff664c", "0259592f6b805f8cbd193a65e68d78103de9b30381f117424ff2922ce6545b56", "0bcc1b9e08a86681c538c6595c39f4aab6da2cbcb303a211fb63d2a0e2f4897d"), ("2261a56dbef5507d75d94a756a24e4e597e9283978a14439fe5eb17d008bfd6a", "116ea287c9a92de571b045b3fb9bb5da9c86694d09f1ac1a618317d35d6f30a9", "17f363b1460eadab1af10f6593cff7304df2a3788e13cccca7b3ada43feec4a4", "2b22dc5446eb90752cab53934327e5ee6ed9183ead577c9e7d1907c99aac8fe8"), ("1387a91749ee9de07582ae5b8b678fbd9e2c96b6cad1aa7b3639e22d40f7608c", "2e7c12daea63154936e37b39c22bd7531e765bb8e899e2a6a27f4b882ed51fb6", "28a5039a19c424704a1912fb27f572fef77f65931dc2e0d5b73ce06f3af49906", "2af05618089d0538ad2b1e24559d8ac43910b3fcc24c7a7b15c66801bd2cea1c"), ("021d98702b28fc0336dcb67b86f318a8b817df35ba62d251590692f2a11fc6bc", "07803770b966f9ab84a54cd0abb36ffaa564c1fc3fd24a3c0ca70473fc024222", "1002d6d5ae155d3c66894aada92f779f811380d2032948fca8ff97a368ec9d59", "2eb45c8ba5a2d5488ceff684f6c2ca0dc0851449b34e25d99a1dc18ed0392edd"), ("2d6dd710ba4dcda28bfb194d36098466a670995eec844c7049cd8e4ad7fb8202", "2435b53349f3666d663dee26eeba1ab3bf3168680b889008696e0b360d555454", "16e143763685c17e8cc1ad76412321cf84f133542c4f874ecad0feb7e1d0b7a5", "2738193a51ebc7f12ff95e634c4b16e9961a1cecbfa40015dad1119c63d7ba0d"), ("25fb94fe0bd2e90a039970a7ba55981fba93bfa5b28411e69e4e31b7f1574870", "1cf6c5a82e765376253f7aacc25c1cc0bf7b52558b42c48cb7f76fa585139a91", "0c343679b796a1040015e2e84a0c2d828c87724d328dd14461d2078d1c776a5b", "20365c8a2924700c12a282a6a4f1ba4a244b3033fe19e5a76840c703d3ce0bb8"), ("04f7f66f115cee4b5e321948356b0e8f01d032ddaee9abaf2d942c6d1d247e05", "2bc608cab91f975f7dfeea4560f1f8387ea1092e473d13cc4891093c4bda33f7", "277a209cdad2b00017ba9a9a8c1e944971e1fc1377d3304c507aa2a045814eb1", "214959a5eeada294bfb9172d40d52e2d55f0f08f52dacb01717101adf9900ef6"), ("2933323bd0e2468ea07876d8a90e0622e69c29ea54e8c64ace8110bdba560668", "220f6ac3a61b6c84574813dc57d83af484036fa41d46c4a7279683484aee2b3f", "0f8277973acdcb9e8891983797c79f380ee01da20f5cd860f23851a393c2570d", "01d456afc9ce4214e34896b7dfc95728099f7cb7b4d1bc9bc884bd01da2e83eb"), ("00b9cb8c0440f5733e715e4fdabe32983134aebe3208da0c9f8f067d81efc37b", "024c9048d0c17d9ac6f2be9abae482811693b0c1de2c33b0161513976c2e95bb", "0afb1949287566d1a87791ec41d197e8819081427316c52df7e02f26b30cd0d3", "281e55147dd811ba495fb3e96f3a7f703ad7adbd4fca8d3ed85e800ba47b51b0"), ("15269b68e1983ead0ed76c176710191ad2a50c17ecf1b458aaba1e439cc63cfe", "22bb7ace5837ebee319a435ee4daf57189a302486efa2a8d067d7a9439b9155f", "1ad3cbb3eb8894a5cf73c90be297ae09f1dc51f962ee34477ef57617f1766610", "245d6a1be489f38494a65fe0c40349d75d8d490dae9df31c2090cb5c795075a7"), ("1e9ce02241bea5197d2355569969b649d451257582728bcd89dfc6606bbd738b", "0632c7de0ff9e83e315aa812b1b50bbe4ed385b12539fee756935ee1622fb2b2", "2b5d224080776d3d8746838741304ddeb1b2ab39255af3227a721aafe87130cb", "2f275eb72a03c3a1c4c23d409f263a3e6d3347d02dab8bca0d58a9887054fbbc"), ("2d03f0e8ac2e3a89a357a2edbb71c0973f1e5410c830dd4ace8fcc9e0b9d1757", "0866ee1fd4113108ec7008f78d8fbf0f0a3525c9ee316d4ede4eecfe8f06c764", "242bf8afcf34be4ea7083aec439d3eaeb8e94357fa89f3cd628436db2d680c69", "3050b3469e0338c1fcb4dfa46599de5b64c09f20ea4816ddef2a2701cb9d264e"), ("1ff637263f338947b6bdfc788f15ea4bfb30c1b47cd5e9a47563d271dbf9791b", "0ac32f05e61a11515e196ad668d5fc875a463833bb20d8006e274ae90a43bca2", "14496252dca6fcd7f654277cb0c52199513bb4a998da0e61ee35a33b251e606b", "1e61b29a8c939d8f2488e47ecfe5c4d1973b1819a8e9931378811add80d0e98a"), ("229865f264c6a97ead15a48cff1b906f874dcde902fe83bd9068d0f4002ca4cf", "1502548eb65a50ccfac75de2d5f33195a347cb1f2d89f31a22dd65bced261738", "148f8d122485eee361143873c94d224c14941129ee4108606c13098c7e039d13", "0990b6a6e792149c233d0f0890aceb274d8178325e638a322a7b837d18060384"), ("0908591d370c838a9e1035faaed442082cccf698e2ea858699b0f6c9241d6e5f", "098c049bae4f3d82b33c65f9ef9d240e11b0c02b40145e8213e8c49246a03f6e", "1ebd6d0f240e81b25e9f3da81320766d1067822c77331800cfd7e5f2605cc948", "1b6515165720540c3bd413e1900ad45abd5b7babe4b6660440b13f647a1de947"), ("2c980ae67fada7a0851b946d71d69755b5975198e06b9b90674764a4c62317a3", "133c123001e21153034b4d22bbbdd2f0bcec45f4e37a880ef5e182a3e8b532a0", "22c00d96940a51da822f49c17eaf0a4589b3c3a0fb84553bad75dfc3bbc128f7", "18d116bcfea9902c242d2f0ee56800d0281116da3c9da9450a56fdabcdacbe2c"), ("0bf5c7ab931421a037c7c989e3a868c14e13609804d61cbe735d2faa255382f8", "083bd0ab7e68c242ddb7a60f85cc36fe1561f9c281f0b11e2b2bc047f9c3579e", "1619507258aedfaa52cf8f01032712e811b9955ce16c62b955fdc14e44bb216d", "15a67cf64bb0013950ac44487da0836e6556e3a8c3e9f5dca3ab2225864a1f98"), ("0d6bd2ddfad919e2761dbeee08e6c595631b87f4dd59a37e151c2bf8ed545244", "215fb97147aaa98c3f25eb79ed50020971b0ec592180e7fa4ac7869251b5ad22", "1e402b360a865ec478a5de3962fcc5d90746f9534e41a85bf3cbe34ca48cfe16", "169d8a1859ba18d876e56184b7f097f0e8502f5cb0c3ecbd47951bd03bb37c93"), ("1d0deb27cab307a58e5abeeb98d02a4e2a6fa1fe735a68202a89869559971e2c", "1440fac151f55b011fea287b543c5250776ada0dea7d84e2a0b2928826e0c887", "084f4351974c5d166dbdf6a16594b68b84f80b378fa2c3eabc4605cfad4abef5", "00f55edf28218031ad1e8e26d49aaecc8628e369c78e5a341d9103e9e1254b9b"), ("184041b187cc18da2d489bcd04ebaf761f2de9a610bfac06334ba05580d9be89", "1a42d1e5b74684706d5102b7763656ca275848e3f625701b38e0996a2ac86b21", "2983c1cb75d4545a4368148d547c4cc6a2cc3c687f207a53852f9d6d05c0a065", "188a67402a1dd1722b1b214dd7d4481f0714631ab37b22e5a47f03ae091d3799"), ("182c23d445f1198d36963d0b8c8ffd2150861baebe56a62e71cf51eebda08eb8", "0e8526a48c0173862829e67e52e850e440b5df3bb3d07c5ff1f562f954163145", "0592236a9be70646368663480e6ea8fe824bfe47ab0a03b71cb876c489d7f211", "0701c556b7d909d327bbb73e57f26718eac29cb0b47af8f1a597c7ff03bb6d6c"), ("05b4d47c4d0fa22f7e5881d42cb045d580e06cd550251b9e91198133ba38b12e", "186e752632ae4c20f6acdb383af7c107c806d5338aace6793aafcc79f4715df6", "172ac7afbb832429c4adea347dc00a570f5c15e64e0bacd2d9ca642d3bc5c8b3", "2349445cb608e0632a429629a2e3b72383753642c7a5f6d83c30827abce49fcc"), ("24a2e2d7731ddddacaef9e1de9883bbd0b8271570825f98cd9184ee42c5659c8", "24785be7d094e310bf7fcef01301303f1f25041f7227550547ac51447ab98411", "1deffbb5a98aa720c03f8c62c4e5de69d1e77bb2d091e799e120ffd5d730d875", "0cd61414adeb0e882745343da5e3f94a223d32b763c70f8a0f672466f73c5d26"), ("1c4786c7e930f784dc2113202829742e55e44e1c0f7f9e0c16bd647678df9f7a", "2ab71a4840c998dfddcfba54a4409ce21f3d7825f730151b962afff02b0285c4", "28dff9e95eaa2254d1334aab20ca4b953eb8fc78221f056ab5980135ab36470e", "2f3a33bcd0e8e12c7fca9db4a9b2a0e5f9cf9317391ce531d2196c9d4ec63924"), ("1c1022c3332e1f99eaf3d8cf6ab755e8cfdaec842a57207608ee6567a09616b5", "232c46ebfe00193317a333347b227fd9f8ef5f6eaef93c421d6b763e58903923", "0057295c9183ea31ed9ba97e38d37d54fea1d8725ed1b5010d0b4223b2db5b3b", "048a5975b820adf78fa0646182e966a87f3c08a1203142ecb3be1e08c40c8078"), ("25f344d572a2d712ef8a9254e418beddc647c0aa82b3cfbf614aa9a23d91543e", "0b9221c4d119f950649ebad58ea329af56bcea5627dcac8a6305470ac45b428f", "062245ff9fc74a9b926ecf1d04d91b8728ea14120c6d53fefcf58a3651b39a53", "0bebaa651a96733cdfe19d05b9d7ad2c2ff809636c88b11e728bc8461ac89e47"), ("13fb6bae40633bf397ef6abc1152a1913d6d817e79cfcb25b191841c1ce6cce7", "2a88f394fbbd88789cf70ef845077523f45d1c5330e4928611b68da7423a3da0", "17daaebed4f5fc22fb09b800b08975f37c8c9ddab4970e30abff09b41b31b034", "0f389552106c238b759c2ec510a7ad0b0874825833a289b020441cadb82e24f9"), ("17e66ebc16197d6841e927358b7a9e4f3e6682b80dc55ab4474c76a5a05ba1e5", "20372acc9d7c037cf32ec5378edf892ce8dd23ba5363a3c9aa4ed614201d3bb8", "0872f9e08eff0327dff2a19af180f890b563efceeaa131a5785d86621b366218", "2d9f46e804cc4dd0e54cbf34169e6ff4ce296b2e724025b5f5514ab42629a831"), ("0c2a979b842943ce134d6580898b0bd6d6234ac550f9a6117b98a221025ed23b", "28cf03a73de16a1ba30245bbb14a4dda9926d586a1225922ae50d5e222f32cc8", "14588a2080375632b8105bc04c8657db74f23de6bed410cda3413cf7bc4496f4", "1e24d0b3c1c76dd4a5ee9f6430d7a7635ca8b451b3f021015553100a4baf3c6a"), ("05a18c6cc8fcf8159123dd9f76cff74c53dbf04de38048a90422c00a2248119d", "29e9401cf2fc3cef0973132e8ada0d260436551cd14cf9a1034edb393ef69db5", "0946cfaf6ef46a37e876c73b42f6edfbb3672217f6bb55c82bb50c8773eb5ea3", "2168cfbc9186b2c46e9e1ff79f893a5a98d135098b76b74c0d21fb89cdd819d5"), ("1f99665083ba30474e350c53743406a3169f83980c5d63f2c1f78dc25a1480e3", "0b3658754ef47a8829fa49cabd55ab4057891f42cd88ede82c5d099cc7033041", "2d2880fe1b5d81712f37d8de737ffd1b40e1197d2c33bd4de6e327bf570cce48", "0aef4103e58489f4efe4b197da5032433a6444796a374ac7ab39b65205dd444d"), ("1bc758e662b152c6e0030d8dd82fa7fa8e2ae4e352769bfc0d36381620a19944", "2e4ef10f1c93582ca07ff096ac9a9d33926f709171dfadefac2aeda895b3a6f0", "28987a6a2665d1394dfaad4619323d3339f2b78596a3f9b8792d3e535bee5310", "24cfb8d356396ef0b7b0d59d565bbc475dd7edf33966db0eff2faa08672221c3"), ("1b2b25782e85f6eb7c88e928638a5318f7b67f750d01560c76584f90a6bd9294", "0281e480e29102f9349e3733cbb8a7a0ac3f4acac817b1885d97f72a70f9dade", "12001000eb1132f0dd52668f1a4a890c6598a491fa7c185da2ea2086f7c95bbe", "1ac43856ca974544dfad79b0fef66618435569535396f3bd98d04c830351d9b5"), ("0ca98fd65897a1184bc807b95e9efbe8c63c9a172669b6ec7bf473c4daf83b05", "1376c0e9f1aa5e84437c141e5e9d52ee759238d18ad0fc683bfe46c72eeb24b8", "18e1992a3f7454830d71bc38095ce1746c4d468f1d51f530899b57c31e29c186", "1dd450e4dc30ffd9b62df0e31f0d2683846a2a2690acead65c86eca70afba78e"), ("017a252b11fae88e06dffd96510fc8c6b59e40c4e14556636aade8ca1aac3eee", "14d2bb904e3e783802b7601a84b05d87b6237dbce781b213ef6799ad386f4b4c", "0b6f6a44e1d19f1132691b929f8c817a8a4e5a91898bbe9b2f096190b233d734", "2dd61c18218acb5a71eb9cebb8cb3c568d3325f8f8e90402752658ac27a15854"), ("2b9e4d9cf944e3564c33a84ecc34feb6b3c27923c0a6979436d3e4f57b7ac5fc", "29b7706334f8c1dffa2c967de81086059ee6230c1b4cb72a9b099fe541bf7db1", "040bdde8d0010d585bcffd485be5077a1686076a93e068ce19fc4f1cdf79f9bf", "02401360ca01bd11a311ee8e96bf827e89c339d44bab84c55efcef4e11ef9e4a"), ("079c4c25308b459668c2841d5949dfad4271a585d28c7f8116ff1d3cd96358bf", "27c54dc26c25397d91c378960627018a6bfc129f076de0e16e314b4183ef358b", "131a41fdf07f8999d9cc12dfcccaf4ce94bb496db9143b22e71980f2b508e368", "1c5b92994575e41befa7cc49c32202b3220b91a0dec1f60c9c0eb07edbb58032"), ("21e67d1018e0816ae1be51e67bbccdd37f51278833c2bfd35a7d63ad2765230a", "144436abc0b939d4750c2ae46a4abccb1563308df1383f869512562e2f8a127f", "0b38e00985a7ca3c3a12d7789ab0380738cdea8bc3ac5cb5b8b291a8b9407bfa", "259ed9802182e63234c689d6653c8bd307a284c705b6025f9b3b14701a2e2617"), ("080469280664fdc2d395129b0ccaeb31f4539175747ec18440bd17a01db497d0", "170c73d702070375e34d8d57d4f0e04540c4538698e42f6b9cee66f5f3c71611", "27f0aa5a1c971896da7f24f87f3a642975bdeaf6f5302e63e5d1fa68b13e5064", "0c105f953c5984c3460eb9e32429f5e8e8e313c8516b946108d490fc65367de6"), ("0072731df5418b4ea21524e9a27f9a73f0360d64d527f4b11d8978cd56aeaff4", "0ddc12002ff014326ec9c4e92c260e76de29d3547b6b856b91a6137408c938d7", "15e37fec7e9820953fc498bc88231d997bcff6e765ae812852f5394ec441045e", "179dbe5bfe63e6b948000942659bd541c582329f3e09cd672a090f4a140a9bae"), ("298eaa881fbc3594af54e93aed87d61e9e0d42233a8212735d9da06d368d467f", "05d079c5027c628d0b4d89fab583ca53a76a4601a0b55f98a26a85f3202e2c7f", "0d67db1e694d12e81b39e0d64b3b82176bc9ef1a6a67ba972538d416a5441c61", "287dc8375786924cd748d384a62495af25beffe3abce19db5d92be776792a345"), ("2e81cb10cbd51545d8ca8a283f116f3f86881ec7af78e681191f89d8869a1a34", "1de4612da27408914738177db41e9a1bc74a0ef74b605a7fb85ea85c1ed61193", "1ffb629870f95d0ef6cbe7566661f267bffa9633bf7dfee6b95252631ecfe030", "1df785833b0ec6c1a39067b6d2c035d3fe8c8a4889a39b582578fb8d87339275"), ("2f7a562b418643e9655e701035f185808c087c48ae7200ab8640fa4923a5f62b", "24ea8af1c40762c6603cc872866a93573c3214c192e658b464ee41e25a6afac5", "02174e8cfeba6dd0991d50a0f51f329f52a83a4322c0fc2e9f8520d7d13d6730", "202179015aaaf3bb50d97167cd7bb192432dc8ee6bc3d903817d04727cc6270b"), ("0d3a8509a4b96f3e6ccafd5c7f85d192bf68142ff5e45117bc6ec031025d21be", "11268ab338d2a93c7db2f61c4ba0d9fc06dab0163e9da514553ec7f24a784eff", "01e106c6c4524cfdfa718dbb0cd207dcd57490a17599a6a7694fb5ee0c2f007b", "2f765087cff07641d51395a54661b2760ca4cc20b6825a338ef50de45ac91caa"), ("0ee99922a90149c0f924aa2340f559b1548a16401b43f0d643f5ff8e7d83bef2", "135a9f21dbd94c246777587013afe0796670a45d669622666df7a34fb149f52e", "21b4886c8c484820324248d486f8313f727d0327b671440cd33215b6ec4e2eb7", "0cda429533a4c4cdd94fa7e1023c553974c7a3d00d39110b898780a433b534e9"), ("0f28ddb4e460346d8b7c39af6a8407e2a2d60d4d8e81108e8b0e30bf59caca73", "109d8e793a3226311bfe65e37e10ad47fbaa2bc0244d351ac8c1578f2d64a12e", "1b19642b1930ada01ecb8fddbe8e84d5089b74aa3ca1a8f4afa6a1d2cc317d33", "2fd7ea0a74d78899036b1c9b982389597fc1663d5f35ea8c30576c9b26b21689"), ("2f6936b5c8588366b34cca59146bbaec70245faec022287ddce95a31e77572da", "02fa776ea1362e02e30b37257724dde11a7a9c77c425f1909aca572ef2644224", "19ec243e2ff798a4cfb69aacf3ccbac115d04bb45a721278c1cc96b74923e117", "243e94489584295a949055d9abe0028c23ff84d142c039457adebd8d9bb1104a"), ("02c9d1473e9e4700a1f73b53c6c01eb3fd8f4b68a8f24d318c1f6728ee74f484", "00ab44471812388cb6cd734fe38ee41a3f1accc463b71d15b1ff46d6977855d7", "1a20c441fd17e3f2a00bc88406ddd0c58975b8dfd209cad7ef3b3cff69c4fa1f", "2ca92c1834579eb6be47fa37df3f7912c7358813f790586d229c9b4e793b726b"), ("0bc374c2ffe167d15c4405dfe9a848e25d85049bd1f807e73a58e0b7e2729f30", "21dfd51cfb79262edbbedc2b2bde91b030e84435cfc100653ad869fb64234dae", "191b76f0604dfaa02acd0c236bb9cd0cca549379dddc74e5433db7f3598785ac", "1a3a6093a42aa76614ad25ad21ec3ef883eff9fa886a8ea462db58fe8d6026b8"), ("1ebb48ce2d9975b26a8ec06de1dc11019441085768e31d6c2d3b07b2d2cea099", "2e36fec03d6671776e0021e8fa31d72b222c5f99cc27e88734d78287385e91ae", "261fd2bc941a1ad96774a87160ebd62a5649550b7398451f27ddf4e2917e26a8", "0d571345a3cd269e5b10d02c62a9cb51129e76c445661ebdc11ab28b1d2655ac"), ("02907733fa5a2ad1cd918b51d89af210bb9bb32bee5b44222db048e9aff5e690", "058cf7a8c3dfec3bc6f3d6869e2a8352812eee7520ee25aefb92194a1afee4ae", "2a6deed4cad04234fd45f5637691c703412e14a02ef4961c3e03de70be6c3505", "0ce522cb0f156b9cc335d99e6a70e460844968ccdc00112fa39d012817dc2fb4"), ("18a0362c2139af37a95d42a02c90de45e413b8386209ba1f2fa11a2425ae6066", "006be86831049bebf65203b7b9553b390333b2e39dea4ab6bec356578ff0c26d", "1aa47a19d9c25f3a238588fe046f4f157397ce6652a73a1b5cfc101a0fc020cd", "181df7f98666e9627e7c1a6133b70c75180a4c8b1c1cc442bcf06e34f8d0a985"), ("2aa1dbccac8d8846564a9db1f07f99214de1630fbd6e13de98ac5c2093eae4c0", "1ae71211744a84316d15318da0c8f46905128eec191f2d2211d7f59641b418ef", "066a88ce947bd9b86dda0f940811e36e5c18c2e46c84330b5b87a3cbe8f3ba86", "230b7b0d92fcb607dcafc0d857999558dbf0d831fb2598b31441c22f84367bb2"), ("081edc042d09db534497fc5a806c285a295e8bae9129b0a64f04dbd0fe4c0db2", "1289c5fc2b87a648dad68410e0a3f58c35fd6abfb11d56de2bdc635c3073efbc", "2957fa16eb06b4134250743f72ec3a91ffb7a2e7ac11e1eab1331b0227101bf8", "1e0c209f31ee94d010f188947a4619c1e7fd4ff61da47bcf31b4c8ea739d24ee"), ("29573bfe38bc87c5ecf97e2c7ccb661703345e6528e58b195234260afe62d26b", "12d7d63b8bed2264e567a5e0003512a3273804b93c7c026bb5f81cbce0734f37", "304e8f9108967defb2398b8b9c14cd03bede072d8669ed582e3603909162c047", "11344924d172472219361dbdd05d9a4cd5533049230f0832fdc82649a300e77d"), ("16dd274a62b95dda64b181684fab0f3ebf6e7eceac57e1e3e448d3e327195bf2", "08575bd98dcd7183f5df11dca2d09ae0fda20225c888bf7358566ee298bc1f13", "2a3357ea74d19ad55c8c7e21f42ac60ac5d83e27cc05c1f1057feea12301f5d6", "0c2d2d177d97f62628ae62bfc74476f220aadc0de02643d2e67cd603b9766026"), ("092f689861c976d6d12e6d8b086b40a79ed56500a6faf9f835d282deaf832b74", "2bc4953e159e74e8ca9c49e40d1f6a2394aeeb00b5b2431535a6fca952bd7c86", "0d81934b051915baa40e757539432a8474d2922b590aeff75df3a8390f191946", "073bc74e229c47394744ea9a348a334709d59c04dba011bccf024acd0747cec6"), ("0db3c1e7da709f6b8e6d809154846168b2cdf0e7f94a6e6f919140dca44944d8", "16675e07eadb4c53fdfe63d6bd1bdedc11764b69ad4e8d6a8ff3eaa8ccd51440", "02858dd336cbba4b6df84282543252e1c74c4d83612249339b40e9baace31446", "1ae2b2641ed11cd48c160918ee6b135f6f757a984e89c8ebaee85f3af790d6a4"), ("1b1cbd1edb185c7b6d50268d942bc7873677e8c5cd2b6e39dfcb4b0068d6e645", "1d873f50f4ff9a0b2cd3b0817f82fc6ab694ebba100d6be522a85f5e71bf680e", "1e2b9e91b43f48bdd4136422c1235f648f62abdf002bf1e619e7c75ee4fc7879", "277f3ebd556c7f6064653f9fa9b59778378d0921c03217e381207d77111d8975"), ("0fad959c1da7368fdfef9b92ee29c4942d9e616dfe54bc3b8bc8e1de163c30fa", "1ae20edaf61e34edfe29e8af4d65a972e71a65346d81d6ce4f0e87f8c2967cf4", "01a06322817a768433984b91c3b9f83d1aa8815431476e9110d772b9c64bc7b5", "0d21305e635e89d89cc709f54608461671cf10418947a6bd78dc9e71bc44ea2d"), ("00292651a5cb55651a3b75866dd688e77cf49adc282c06268a4d8e1ac94016c1", "264f3cade5eb44bf7904e2c24a83238285ad7d501d08f4966b18f5e5c26cd1da", "270cbc43c614ef6c0a02d1979909e1e4735849411420297a4eef8ce99c5aed5f", "0ae97dceb251219667e84eb4ab7451fb624f63c08ecc78210543848fc64c0acc"), ("2cf2d5b14ca718168eaf974cc4820b76fe3d2fccf95d83d226781bab3da6261c", "2dad84aafb2ed0b9a30202e3ff58a3381c81f08601d69cef2139a5ee685bee88", "095965364fba84e040aaa484c384987375c5769c8ab8643f7d0fe42d9cc7d1c0", "0607c35bfd833e134f773059d508cd9a9afc9481f4a06e7f6b76e39ef8a380e9"), ("02143df72c442d8abe9ea2ceb193603676a4fed9b624ab15f8ad5e8dff04912f", "2f04945bf0617352af6e61539edbe7e0eeb53b53351bba9c43205c110fd009d7", "222f7d170beb446475144ee4094308c481a5aee51904f311682a665c83b06df6", "0bc51d591c07bf2b7ad5e284d072a4ddfb8f01b135d461512f2379d4d47baa9c"), ("0c7f79f71b1c848a0416eb6c5600654059231e67c5c4a38d6bbe873fec993473", "00443801a0bb440cb25bae6983b026165a440768a5468cbe34a31d9f6b9c553b", "2ff3161ae1a246f90cb396aff7749b7c09ac97628d382a71dbb10bdc023aeb52", "297827271660ab9290b2dd9af2979288c87f41d5afe826124f1353d98df86c52"), ("2493b9f3d15640db4d69119123a72d1c3c56eb7e8d7b49a6213dc35398b5a90f", "2cf95febee5e41156d878930f09084fef93ca3cd1a589a5106cdb9c1c12a3e0f", "2d8717f5cbe8cdd0529a30b217f397c64f6acdcfb2896eb025148b18442af794", "15b219c66d5505e6f36f185cd90a8aade27d931e11d4439ac47e94166c09accb"), ("0fa04f177c2052d6a7a3cd7a697adc010e81453627b98e7a5c1b2b4ba9935f14", "27939fa227295a36241edefc5068a69e17df018f3feeaf178312e22c4db24fb7", "15b319af552ccfbf2f4de359fcce2663fe4e4de023d74afb78f14bbd41e2a31e", "2ebc4eb29a6e20be8feed8ee652e79a70311bf0d0df73e2d327cb6e40e216f71"), ("169fd61d2aca5d0f4d298fdaf1ccbd4d134e8afba311a03c12501f87a1ada959", "0abc9bc8431b2d8bc6e6068c708bcab5a42aa218076ebf56ac2039ae830f9955", "1ec1e50b36803647f5711371f9f4bd5828ad33cd838efa4310ca26ee94ca1522", "2fd520233ad35b2d4773e19d9756343b56279b4ab1524e0647dcc7eddd811947"), ("005df0034bbdbb4744b56f3873c67a0f667948c755eca6a0637db3adfb50a543", "185db49d34d1892ad3f106551e18b25eee33b4acd45ea700c42e03e30407b4aa", "2740121a1466506b392eb4e8fecc18b98d03bbea8cd00f2e9bafb0354e4eee66", "2ef3f31bbb1576c3b737edabb53b8ecba71d2cd18673435a1203e75456c2f3d3"), ("2934f0bb61303e3ef8ea6ac5309b237216f511e8ed265c7c8eba52aae4aef348", "0314926dc5db1dff8cf1ba7600387f16e666b3fda98f54ef9e0bd2f1a38a29a6", "1ac4b104e21d4bc011483d124719e0206493f7a3254c97649f197ff36d08f55f", "015a9fbae6e846c4d3a048df14308ebb8cc36e7f49a39571fd554101d87f5b7b"), ("159f3fecc25b05278ce8bedfc0c3039cae506dbde387b6b095adc1d955625f2a", "208d63a7cf3f87b4f414628a1cfaf8fb796f76a47c74f63d25233df096be0850", "2d0f046eaef7c46f649fae32a06cf4f990b373f0e622af41371ec3a3e8e0357f", "275c14a7b18dfcc0fd414156a8e663e721c95b3161b41e2f289501b4870b8b0e"), ("2fd363c788cf223ef8bf5832f42b19fce4322111ac11eae532be2993f9d0caee", "2364e4ff3fc520665831a422d15c06194e025a4a2b5874913ed75737aaffeb52", "05edae1ed727cfc9527fda8d1a6520f2ce085a4082f341474545e3bf7b291e21", "17ce693e7597ad5fbd3e95c93066cabdf9610dbb0b538851fd02e5d067afb3b9"), ("051e0e009df46b3be229764ac6e84691f9fc15a36d2c369930c7abc920bd0f38", "0386be63a3f75e19e76bbcbb2294256d392e9ba5f47ab90a5958216159f3c0d3", "2da4fb650b22695ac5d655ee17e4fcb148b9bf8f1111d08d7d1412e9806b7b8d", "2c93c270caaf1a6ccce854592a99dbea8079db74480660a3135ce8213a0fa838"), ("0ede8d3cc9dce888239e718a88c344cfdad0e531b2a0de11b0d7c3bbccc060c5", "1c6e9114af8fb900409da1c82a08d9ba17c513accac2b0b742b802b72d864a67", "15a36484a2246d15bf32529826d4b94eacf61d3703dafc6cdfdf218dddb3212c", "2e6d6db95ddffe3eaad2b0a70d527460278f6a6d334b63bed2f3390d011f04bf"), ("1e531b1e5378df6e9c758e9fc9d60502cfa2e865c80df594eb42b821cf10b2cb", "25cd6ba1a2d7a2a8509e8c31ce711fdd097d2f7c5f6ec2a778b364e2538d2f40", "2239e4cbbbd0a2ffa124e5c706a3338ca9edb93d81dd34abeb6be2df474c9c0a", "1a4187b524f1a8a688af102df65cc3bd6f3ee12cd8b2b0a89099077fa1c8ca92"), ("2bc4dfe5639cbcd73c1bba1cf1171cf02ade2a3523be3ec8b21dbb6f85d45e08", "2494bc6ea9e62fab00e3f889d087602e838a97d340b310f80d3ef57c51543368", "0d2be50aa10cfadc75c8fcbdc1382d77de0fd07439161031ea9d5bbe39a48b3d", "05495b2582cd5bb584396f39220d631e26b666fbf9b30b7a258d398e98ae446d"), ("09d54dd802e864014c840f00201adc1601c4a83535cabcbfa8e10c6c3f1ce88e", "205c6f7f6266eb401ec8092650042dc2c91dd17a00b5988e6556f6a42b4e945d", "2cb8b381887327caa8663359bf511ebd025a3db09e866d50a4462bc55693d58c", "013f02479cb0d4da76f35ebfb218d18f16eb5a46fdc1ca5e02d161a96a4952f0"), ("1572c919fd643bcb081ce2a8762a5c253586edd9b1bb849afe4fff590d67be5f", "0a2a3524151c0a023b03d53d295f032a2a90af3fecaf2e0f35bc5fdf38d061b0", "09a90a19de71056fbc415ad1556d2f3588b892aa6038adc76faff540f0454a60", "128b27de45d5560fbfc69b1759b44cb0cbb9e87b56c134efa993ce41a72ce645"), ("20afa622168bf99fa69f69c88c86937f1eea1f463635b142ed81ca751aa861e6", "257ff175ed9c0983e7a66e0d76e328e20ea421cef6bc1e1593e173a2beeca6fb", "10b185053f7dfbeed09fc5ee67485d3a52e436a00799561f10294669d8d1c098", "28554fc0ced29e109ac086bb258b9c5bfe798ca86cd4783cd5aa8785f2c50439"), ("0ae05c062858ade034521f46db8f6194e50ab31ece3a393eed1dff69bb24ef6b", "23d26efff29b97361db32603992cb0fa3f6741b20d005c3b61093d72f470563c", "02add08ff1d4d4ff9b95e6826be2ef0c3bc76810b215af798011b3adc263770c", "2ddcf36f8a2e451af9bd615700476d559447dcad5a12b709e9ef84ca25465bfd"), ("09498566a11694e8c4991dc75fbfe55baa80fbed8daaf71a3c832f75ac18bf40", "2ae0f48482c61ffdb86152928452b228dc1135110b51cf3845e02cecefc5ac0f", "280cf77230e695c8e699ec6bf4518e906ff42b5d801a3657d20c784710d7c5ce", "053887cd2a13792aa23e75757db8266692ef38565d33591b16bb2b24a5a35719"), ("16ca8d6b5613cee2d6bef2f261978e7414b59cc1ce67eb116e6d7337aa9f2a38", "01a2b34832b29a26540e3aba42466b8b55bdcc5a5c9674cbb1fd4d94021249c6", "0eb92e959085dc4acc5e09ed5a7a362469295f3d4a2aeb914b7dd605a25d4fad", "11c38e0113ba5194cc7bbf8fa2b2c1763e76d93b1c6fa511afe782859381aff7"), ("253fa41ed5a4adb74db2405772e49d96a7b63bda7f8cca6e1d841c1b1c3903a2", "21ff649513ee66369f6f7dcc7fb656a0fdbffd42cded0dac564a87c81f933363", "25a979b6692ffabb9978b25a692dd9c5995574bd8446f78a4ff422dbc27fb23d", "118355b5b452dbbeba04d69753a463b02a36747e7c018753b914db9c2aa02b60"), ("01c7008bef748bff84969a4b579a7cc633bc4e6b0e95174d14bb11460e945b13", "23509044b3816a0e04422151b93a57cea3c20d9afb67580efac9cc142adf2867", "1a8b0510fbd75506e07346599be329da94e88aed91709f6aec0c0f93ec1ca642", "1e927c4fbba017c38ef608f056966fcbd425d550901296f2b719e626160ce697"), ("17e7cefc34da6228e233a0702dbb151c3ed8fae6eb8c221278183f4c7d7d6b9c", "1bcb23ff5c6b5eeed3ec04e5e33bff4fcd66c51084dd5c3b30ac659dbbbf13bc", "03f23fbe8a175669c0d4cbcb14a6be6219db74e610b74c644fdd815e372928a8", "1b45d886d8bbe5dae7800c8c05f2cb022b229fd30a4fad4d10fba09cf5853fd2"), ("0d63f517f36aae2d0d1a71480f77d7dcdbbe252acedbf599478a0a748f465922", "2b016cc15dbe8c36e1a6783c24634e0252cfd2475ba8d05a9b6113b24ecaed04", "2af959c2d706c61ed2db3b06a32ad26ce083a6b170477c60dee5136fe01e163e", "0a5abbf0d849ab583dae345259c55be51bca4b1fe3f6ebe37dca46f679a6ec43"), ("1b47f96d6dfdb44c1a2ad14a0d707eae908e27720acecde5ae1ef8246656b49d", "23012505f17575c4d20e3f7afe16404968a70523cbc840e183696016f0ca7ed8", "03c651d49308f29b435deb3fe9d48314d7a736411343e88e64202ac2d4a92bba", "20b31d1c1a903fc1e872455b1aa80c245eec52688e36fbb54ac9e431ff74a1f1"), ("1c0953323f5eb779cd5d5a9a3f90af93038bfc8d88b85f30dfeb4123277101fc", "08a6911aaab51fe70201a30625edb992c53ecdc73d8be4baefc746694677e4f8", "046e2f21c36cf4de8868cba498b8b544207a3791dab8bc9df103fa32399063a1", "2f29bfcf2be2ac210a188829747f15efe97aee4a0da29737a741f4055504c0be"), ("251b4b794bfa8a7568f02b7408a0b204a3e816a73533931f9e292417d4e3ab44", "1cce0f83c65ffc468791ed93e24094ac249e3bca84688c809e56fd0b04b5912f", "0f4f4e829326d2e04a615d477f5da727e7096e0d864699894d38d62e0797e42c", "1bec0d2738552631b49adf23d994251e9fe072f6d5f914aca36fd0d89ad08045"), ("079660cbf531af7151be4a82eb4d964275dbe60ca62951ffdef502dcd02406f8", "1dbc58deb8e71ea711c688cbdd827ccd3e3d1d5d9f1c4f09a734f1272936317f", "22bbabe9e1046d5b56a5623cf929bc8d6821cc7d3a1456dc932d5c0984e1ac18", "0b842b476b3c3e74a8d116944ad1b54a87c5ca8d63cac24b8841d595797104d5"), ("29d50c741bc6047dc2dcc7c960185fb744b5875fadf597cd563bbb615ea51371", "23d6aa7da8e72e701687fb139fa78216074d0f980f5f78cb246f14276cd65e77", "21dfd24007dd4d81fd62d9815e589e579f012fe0b53e76080898cbdcda2327ff", "2f5ee04f32950fa0ea35e812641bae5b988f901f15dc1152cbe71d4b95f31d00"), ("26253fc0578a67eed4f8a57218c87154b2e1aeb655cace45986a0d74830cf703", "2135bb39a7b38b82f45782c2d0dd35e0a2b336c3a98dc520fc332dc93b329882", "04604775d925e629e208f6d36af5566025ded2921319ee8417d92018eed00535", "2abf71160a1593f676a46c4d284cc1c81df016d02752f7609e21fa7cbe6b027a"), ("2ab8f20bc624396b986d18e1d9a7d9845e6f415af769041d8272583226ff3f6a", "0a73437a77d51591bfcafa990057c549d8f386a073c26d5fadfb309225ff8a41", "224e4a5d46cc561946345a3fd1b622610a9c4857e71bc8784eac617f64d8b3f1", "2fce386160fdac7233812f4b5a13643c92c09fd357272158f77401f41cd050f3"), ("2db8bfd1b5e92ce969b628b65b1ea46187347d21f5b307a6128f55ae6659d897", "3045b59ab2aa6750fcd00affe87bef8e722f639527cda13169a013d89538d03c", "2401a8073d86238282d614c1d3b8516abc818cbae93c5b1cbab5017a07ef831d", "1de4e15c3c19a3936e8038f0b5780d12b290a91dd65ab21ef1928a0775c705fa"), ("15d37734e718ca2958bb73c34501febf64783646a85d94289b633cece0848ef7", "0c17ca635193ae4f980ee8548554029ce807c7a6a9deca85bc3f7573f4692260", "277691f9325100b4095143b38ce216f89baa61390c5e7034a68499028f149edc", "1e37e0734092280c58e63ed0de918f522c231cb8f3b4c960426770946dcf0acc"), ("0784417bdd56128db5bedc741d899a7a832bf62fc85a37cdc0036e330a407fae", "17cb56848d12c0ddcf407bf35e5683bdf1752412712026d26f9b042be4d83095", "097cb7e4220cfea9190997a3578efe49f8bc5de3c92076abd9f4164652d304df", "2d23144330ee029301e63401aaa8e492a8373caf97451461c53cee3f1bfe3eba"), ("1e0239d619c8d2b2660a860f031761361a74a1e0a0e2c2e7256078c5aad0aac7", "23d6631e1fe6535f92662f95d55c8378bd12d339c3bde445c4eb56a7018a8cea", "108c5e131e7b4fb142f398d5aa7de2a1abbae1cf6ed97b560a3f32dfc59e67af", "01d5540ef25b586ff103cc8b0fd42c7b51f73d5c980213066cddd71244ec7085"), ("1870928c7467149cdd30613e5efa2852e522e396593f1327c22ba40f4a6b968c", "0eee5074bc9826da05e882e25e2b4bf5ac121e124ca04ca71f487709846e0c7e", "0fc8ffc8c4628b8c801d473f600bffdc7a216a1873de1bc8681d5e859ee7342e", "00b696d33815e66c2056d23c5f819a7d35cf7eb902559848129f88883df49005"), ("170c4d544046270bce2ced6f26df5a7a548e3f9eec626473ebf28f7c3ab4ffd1", "1ac9d1f27b0e6eab8ba81e413001cabfbdc6525dfd87d4dd898bab3a0a6f617d", "211ffba8036c469255dc401217bcead91bb82f96d8212ac95ed1764505d92f5f", "0a3704dfad0f14b649054ac27a8f445ae3fe41f182e55db95efb7f81f2c01468"), ("0fbdb24ebef2ede6370c21375f8ca0a8fd2da6f973fd2b05ec783a0079050c31", "0a553a91f2f712a3070980ce1b24659d4eecc695d8a6990696918529ee1d76c0", "1f6eb8b186c9a2d81f81e63ea5a93e541d8d015061205fdcf0b2215dd594a2f7", "0c1984daae9718c1b98cec57477f65b2b6eec23c68868e120512eb5946a5e497"), ("18cbcc90fa12a657139ab57ed0998501c7885833aadd8752da55e8eae75f8cdf", "176334cc50950ce04753711eb65bbb1040ab7f2f5fc3627844c277b1f492dbdb", "2e6a8087784f224cfb24f286ea7589fb6d4cce4e317960f29b1a482798f548d0", "01ebde6dc6e271ef04213798d7b54164bc1f918296a7fbfe0485c25d37a2df9a"), ("2ed2ec546d1c2c6ba045b25ca476bcd5474ec8b0f87cfb632e32947303ab72a8", "1fd80fa01a32e2a7f05e80dab321e1865df597d3296223d99d9134c8d87f1127", "1d1cf3dc28c7e2f5179c2835e732e378c3037143717a1d841b7bf270ecc7540f", "169893b4146a0a9d67ed809d21f18eec8683a59004812fc54cd8fb03b2ca2d1a"), ("2e7b1bd9af5dca531e41ae8b1aadc2124c7dc196aa451ab958ca4b181ad80bd7", "1afbf3f9647139f3047dd5ae9875a14e9eac728384652d3140d1a81efd4cbef6", "013d25f5242dfcdd70ceb7e434e533dc5f49646dd4ea0b480880a8165cbea353", "066852aee13e9c2ac16d703920ef4937b4abdcc6be41abdb3d5f1469713ba444"), ("09ddf964a1f95c8dc0508593d8a3943fa02cc4ccf49605fb6e4f864979804dd0", "2ad6fca3841244c3f32601d24851be3e3d2fc2997cede359d925f8a3b8f52d64", "0b0ab356140807e69cd6bd03b9362f2e31e5fd6737a089c7d079117f012ae755", "305dfc2da8875a6ff0fd8062153767c3a72c8da358f3476bf66aa412f8eee6a2"), ("2ba44afd4911e45fe50ba1e31316a44b90569fd96c4bd800638618695535007a", "1969c56ebb48b8fea00e4b7b30b0360a7c91b1a23d2346c9c4f5e07e86c91ecf", "27c5a2d21cf48f2581d69b1a9d59110b79c4f90a05757b8e7c801497f76377b5", "1fd184baca48f61da40b690153679546be42ab1b52cbb85afbc56e977a1d9ae3"), ("26229d0c2ccb5858e6a1f53532dadf1745e6f341ef44c193b0daf1c1a4753715", "1b4f2e8c89ec4cb0580042c1a897503d8fbaae538c51b1c3ac6e341c5fdfef6b", "2c0dc9e9725a18faeb1d462a0a14b967a438788998961ec73d4325fd9e5eb588", "06efaf6bd3c1528745c6cd8ad64aed1ca9df2e0bf9c4c8a193d462ede92013bc"), ("1ee4ccd76398127a0e67e82fec75fefbd0fdc3d7a0c2321d7a40d4a24029b166", "08e7bd8d001bda29b768050e11f6b71cc0fcd5870ec284cbb17b50b0bbc022b6", "186f945afb14099c403fe357b5172a2c312413aa068089b8c89a18b15b46d6e4", "04b7a198acf08729d9a6913daeae2b0f0ec22238c38ef31e58030aea111c86da"), ("1fdd69f75c8a15a5c835081157a748287f6d2b80b00f0f180042f34547fa5861", "2539d37db6a2541b21f82bd68b0d8f3ffeb1dd604b815def48bb5c2ca6a21918", "16b3c74ede238e1fcead96af77d10b8f6951b47173078cda71ec8e0fd0c5ec78", "1ae1084f4144443b5e6a94024286520362fa6113ff08cff45f7e5cbf80a04993"), ("17ec9961f7ff1742c526de45ef308a4b657181610f367a888842cc962a309784", "0452ddc7059783c7377ebf92dd99e0508cbe53e409f54ed1742f3a880b356647", "06f4ed9faa5df44cd760c9c0157211baa5a4fca4d9b04f7da0494d559443335b", "275669bfda4eee4d60994aaff89d941a147eb9cec588eb28045cd6e242b6a727"), ("2e42ff6fd82b53f4d5a93683d8faec7ea117f9cc2002c3c8eea0070aaab5b82f", "23a79b220b7d46f006cb02c113a69dd2ecd1bdc073bff324e538b5fe36300606", "112e5b28a37a542da7fe0da52eb37c6caece02d38265ed982ae0956fb18c9070", "2e4c961bf111006eaa0bce3d328b59afa763ab9f4f0290566bce2b8f9776463d"), ("1f631274046c8ec43ca4d6d66676b6f4a85a4e06876e77f23bd87177e53d1c8f", "1b7289decdc568bd5f9c2bcfd1e33b98af68d55ff60a8143ce87624a8f0f775a", "0414f360de445aa70c966e53df48dd3a2a18d493c91975728e4e44df56a0884d", "1c4f778cbc60ff4af7615e4038a67eb26ebc6da46c3803371ee702582595dd50"), ("1227a129e50c575d6fb29257e530958644058eafed39d63826422771aef82194", "122c3a30b2f9137ab21bfbc46b718f6fc39a2db80e9af2e29b993e3e4ac00fdb", "29f5c2b9f75293d0bf54ef2c2e1fb67f3c0bff4eb895ca8fac2eff5c8d529dbe", "034b771cbae16796e08b3eeb011b83c3329847eeb6305d2298013dfef436296c"), ("1243c80b3ae4daf96d3375e768d7acee698d46b0210c888ddcb929219fde7c39", "0354e586d12042341d60c7a9a16ef6d124e942fff11daf0b7ccb743cb5ff7181", "2582ce8cb3305f0b0204be5cac6c9514158a48f9d6147f9eafda51024dbb207b", "2c95db01562788bbb1f46b076e7ae6e473fa0782c517bdb0fbd47764e75f86f1"), ("05db101b46f45a77bf90323798ce70c6a392947136356552a2a4fc6a530abda8", "01f0f549129be6ba2aa240217f2af04a88f545c23d97d6b976a78a32ef899633", "29de901a0c62e9a13f6f15db6efd3e54998039ea713a0ddd4aa406e7967e2e8a", "0dae249aa3662afedcbf6068f8e993788afdb38b7937d3ece9339138e7d6f65f"), ("2976230a3549ca2e1ad5407f765ffcdb5a38b2f7530443fb03a9d6e1aa19b0aa", "25fbcb948628b0930508b57a8d358b690f4f412d9a08b52df7e42676a3642e36", "01b3b7ef858294491e5dccedbbf91638b029ef0efda9b692b1aa6fc1aec04b97", "0f16a6302a833c40929be080c38d9cccad10d42fb56f54d209e67100122a8762"), ("0fb2cca010cb64a0eb3be293e700af2d020366de396abcb96fe124cfefe30a9f", "2bfe64eb7022bd6ce548856c47349a0d7881a9e823ef135b1239d8d92deb1a88", "215ca3b8bfa091547ba13c33f327fd41b64fcbeacc0a21707738672cd0cea7d2", "2f2c93d899b4872565a1e46b2342776a98e3b9dae2b2579af579cb24efd182e5"), ("06a6533ad73237285293d97325e7011eb6cc2026b9d6402f86c9fb0841adc29e", "0dd518bfef22e6f6452b3c9b3e67fbfbf864eb39936659fb9c6f52620803e7f2", "2e23d1e9c1de0ac507457ed22fb1f4ebc9fbfe41092c45af4f717e6bd48e2a0c", "0b6ed717ee62a721e4dc88cd0ccba2cfd42a7d42accad389ed88fabe4d7d3d94"), ("0b1e78fe70adaae56c5b98344a2a869021b40964a5fffd168caaafea5816dce8", "2db665e8cb6ad73463e38af039a65883c3c1a3b094b57a2860cf8902f865eb7a", "1c5afec03bf8774bce037536c7a85d2adcd31bd323ff081836d2f92eaaf34c1b", "25fa4aa2ee14fe0586d68b13000c1233c745a089a1dc786326f08eef94639917"), ("2b81dff9aefa278c76cb1c4658253cfdb2adb91ea8768655afda719afe123a07", "229c67b7f298350a170a6388da15e7fa780ac05c102d3596e922ac3509be59e9", "1df0447e139c6641097e7cc5088b19e39daa9afbb6ea52078c31be6efa96587a", "1655af8390e492d93860673116ab06a5d09d7c022b568cda4dc479bf368976a9"), ("00ddae75e3512b9cd8e2fc4df034d363a8326b859d7a0a608d6f473ae1f3c2ed", "133c317ef7e2cfb8600271056caf405b32c6a80e0e79297b722bced2e261e66b", "2bdfd31715901d7767ec081d9c315914d3c2976099b1b7ab2b8346e75722cf34", "0fbad4d0d5482c759988b8814e76c399fbdc60b2640406b819e1e1a86f4ffb83"), ("29cc16114e0b68c73baeca1c6830b5a5bbb30405b4f43336583228dd19c8c47c", "27ced8b36e587b3a5baa781e3faaaef05cb7b99908adf279843417d79d5338fd", "0e03cf02dacee01169c4d2fc6c1d18d99333acd480e12a6999eb026b1cb1d3bd", "20613d4746aa9a800a948fa3cac7b9a8262eaefd8db4e5a8aa2b2f3197852e66"), ("25bbdcd6bd80cc04e28abd507d4168ca4e355d9ab29e99fccf0c88bab60bcc86", "1376166a48a4932fc65f478e3c2c05d310c7d1aca6ffaaaceb8ebbe11b100c0b", "040b52da22b4beb9b55e536f39d7a5ad98ab167a7b3f3d1322307013b13b43a2", "2724bee8b32400e866ac7dd11681363cd8423d41ff883753439cdf6472e9c0fb"), ("1e1aa5e7635aa033c6ce57829cd06ea5ad0777bbc1b36cfa45c3f5aa899abe96", "24b9d654795dce559d78c6ff3d78e902d40a307459a4fc0a1ecb830c9e5a6111", "276c95648244f8a9f396561cf0de1a73b8bc54bc3fa39c8ea63ae63c7c90e975", "2d59af0549ecfb4ef58e4869e83a602af92fa47a0c1df37de8ca71e4906ba0fc"), ("2327b47e9cfd1cabd2f9ee4bec07b0d7ba0c8c1d13160e49f1c5206755977a2a", "2229531af40f52c811dd0ba415c297cc0b289c0e559930245dfa685a355ab42f", "2ee6089980c520f9f4de90b964cca4e9ea30d7fa23d21f52254f908577c55fc9", "20d422b6cb411e1c642a3a7154cb34b9a5ce64b386907f523eee2f3a81856928"), ("149c6868e0747c177ec6305470a772a14716c8a4d7d30e1fe7e793630ea6a774", "05fbd625a4d34b3f58316f88793b43899cb36c9d1f2ca5c1a57a95f582062c04", "0823e1398d8b291a4d3499d6bef19db76cddc9ef84114c1c2fe13e30e82f2984", "0eaa841074a1f8c37cc52224b6426d81b093d1fb73c4e60a847e170d5243b641"), ("09c49434c788ca4764a3960f1ed003f99a29c16df5eef349a70ea7bd96099b70", "2dc3b44815076ee118d9c74b1d4e14f6da74ab5cfa0b4d3a93af22eca70e5ec8", "2be62db76c75a342206990290205e689fec708ff9abbdb3605f0fe4cd0e49948", "13a2f2071086f79b30575d5342a521ec50c2c26322c360276844ff450e406b3d"), ("24496e20373d9a9cc0e5a778c04ad7b90ea0c86e20cb383c77e521beb7ef1fd7", "0e4e7dfce58343b9e27b286bb99c5d8138325fc8fb187dc36f8e9f92260dea07", "0a5c57b6d74af34c1792980e84e861f3106f9360701b6a0c33b1f0166df05821", "131f73398edfd1c90b0a0e3f1ca5e070836505281c47f954f33ead5346492e10"), ("246faa4d6da3d96bf4e8cae11f618a129388b05789335e551f534600cf3468cd", "10eb5b11d20f4602138d21cf2a158811deaeb9f7a3965e9b7a7a7dbc34d13eba", "0ac7400c897199ade809ff85c905ce2bedb35399e6078bf7c4b77a3d363ebf9a", "2df2d9ef8c1f699fcbf5d8f7b136ec72dd936b9fe8bebfb8c74f69b648ae2e6c"), ("03182931e640641f9aebbcd365212474b8013f2c4bc7f4d1f5fcf8182dcb3d6e", "0ebbdb2f321c82229feef61e8b5b9554bc013dbec8b508f5376782857535663e", "07631392593a392c22d0f8fcd59dd22b6fd23e5864e51955194eb951414451d7", "285f9cfe2a952fd00c8f4b87ff13b062aba13dfed66a914379df70d932a06ebc"), ("2edc7dfb6aff603b85afc5ea90dfba5bb2fca3a3f257ca4c572ba5216c863efc", "1fde0a886e56388305370870426875ee6796df6910fb5ba1bb8d0fc83dd9ee61", "099ea784547177b8931c04f429ddd06c87604e0c122999b45e5128983e72308d", "27c3924e499e986e3dbd8a5c1584143d497e6f2ef6dac179cb374a5bd364fadf"), ("1920d31e6e4f738e5b965067a10ba2f941aa9af2cfd339a0e2c8b2e2bbca21bc", "14d49c43cd08dd9434dfd10271984be4b71d462513a6e50a134e5257ffe1499a", "2840be9b66e34b2c5046aeeee4017402bca4b87224fce4c506e894907eb38311", "1ba4d7cca35d4935f91a906a1d3dea80b394de28aa50018755ddca1342dbae68"), ("2d03b75f1fe00a67511fd47706af82adcad96e0b23c652e977a6ea352ddde769", "2accff4c0c1c0a24e9fd05beee52d79ebac242d52da479624dbef3df36bcf2d3", "0164b94e022bcdb19e949c1a97c215aedb9a56f2e9aba307c709478afdf51585", "10e5d9ef42923c5f536459a09d8c6737e52a893a9a7c2880222d23d43a6bf1c0"), ("2f59618a375dc3932dd21a8cc62648d91ce8f984e5bfbb189f7973c7a4d7c527", "0e3fc7dad04ba5ea518a0832b14f54ee442619133543a183c65aac60e828ba3a", "1197445bb5ec94a9af0f38b2ea00693fc10634b0895e6ea3de90697de5411fa2", "002fce335a2727afdc5f02f0cce33e935eddbe193e7e87dcf74d8a934e279304"), ("28a5eb055bddc4a4fab8c25d15b5191a922ca86b410688f14a78d387a9ee9583", "234e2dcb8e8d5d51339782e43f3826163b7e6a40c268e4022a80bef57c7dde43", "0a410fa767ea8b5d4abd9cb2934fab1951b05a1fa6874119cb039cab8101ad23", "143deedc64a2695e8a9a74a3044efdf78c9220924ea34447fbc21b6d1bb5d443"), ("0fa2e62c106e061c7f7eaa3d2d846ec3dc0529cd48c45c5f3af4b30ada441971", "0151ccd98c530dc15aa4f73a3689dfc588b31351df707aea1777f48cde6b6133", "07329f7f41cc59311feeb06910e2cd942f39cb828104a11d6a068b2ec253cc0e", "2981f72695185efd4d59ed534976f1f0707fd895b85685bdf636ace078ce70d7"), ("0c4a11b8378e9fb631776da56fba6b7204f8a96b400d0f88172df4b1293e51e4", "0a27c4f2da6310eac45249f1c0a81398cdfed8ac2045925f15302dbdbd0dd5c6", "08a7c605935a8db3184aaab2c4be569e1dd39d72089741d96d75f4420b8a6799", "1ecf188ce452761b3556375ca016ef68b476f628a1ccb9f4d2589de13b88ecdf"), ("0c39619816c58d3728ef2b8d470928b4ebddfa1861ec7586eefda0d8761b34b5", "1e061a3c7a45772e0280894fc1082a7ddeaa2ba6901e767467ee54c7e49852a5", "23c815040e4de8d5186c9816180bd127f45b2280124cf2e17d78356277180876", "01ca85d15e5c8fb70b0d339e47b844964dec8bcd2351c8af5a526e194069fb6f"), ("12f6e257f294bc83193e1f543d39fa1e47e7b28a9aa9fa82f63205968df15684", "0582b7150a17cd9c7a75b68487a269a522d598597f34f25376e192a53e77c20e", "118cc61cbc12b84a36874e224e927dfe51c28f72b94f991cd1e2156e2c4ffc29", "20d65dd3a9d56cbe2ff851b5560ead64661ff9e51bbb123535c6d3e75c63de71"), ("097add68f02fea158c92a3ff6da11a2e3bbc30e83e185091806e5a0cdf42c1ac", "11b3331e28ef79ac92dc74b8be5208ebec1db034aa374f69d50fabbdf79a7dc0", "1a8091d8e16cdf14b33d79abd3d3a46a0bc2ac3aa35b349ba778f68baa140963", "063b183663dd0137a8d97aeae7dd7586894790e68fb2585e9147d132add9ac32"), ("22bb4b217f2e02cd232f6aeb894cf109a2b2ec42d2af663314352db3960ff608", "103259d4b774ff5f829984c572648441b0114708b77b38b82c798b489f5ef003", "2e9f9ab0841bd25483eb16399b380ee7ffc81490daebbb0f4ffd442b574548a1", "117a40903482cf0d72d978c6fdb7919569ff60aaab3ff789aeff9140b0bbc6e3"), ("287002d9bc512efdad49c303e3b71e8f15e2d26b353162bbdea2091635693995", "24cda32560415432bbbb1e14779787144e8c5cf65e18eacb3478039f055991fb", "15125d36be3e2c54114ed5ad85bad8c019d3881aa8e1b8e41020707640a9d23f", "09a5b27e6a5b1dc5e87758cab7e28d5a76a78c3369c6df795f318af02f12d54f"), ("03cffeb95b1c0912d9657aa89e43c07ceeae692f9ca6d4198f479df444f87ece", "0b8dd980ad554714adebad1fd10093178b4a16d36cacfac66207fa16e758e654", "08a02d0b3c3d422d3e4f4a9a49f7dfe1ebd46828dc60cfd0cef43d2c35c50d0e", "05e2bad2f24b298073e8c8a8253462ef03a8da4213efced296fb5f424a7c4066"), ("16ce3b1649576051f5d33eee73ebd564c4199f26d93516d1b039f040308b880b", "070954348a335545eed818f37859c2b61a5b5db6d48b2dc6fa336c81a83c68f5", "22aafa0d1857a6bb91c04ea83e743d1301a25dd319df556728936cb48bd07851", "2c04fcff073ec21cc57d4a95c1210362e4e638be707833cbc022a5355f6757d5"), ("0b99a7dcbaa6fb6bb21c99708dc117980aec518d7f5e7f4489e04db36de763da", "140fa6977f40af19a374a6f7103825f34ddc75f51de44a5d9bcf1cc4468712fd", "2ab20a2a9800afdd68e863db62904fb020dce12c1f965e4e6670bdd626a7561c", "05e13efd04c99f2b1275470184057618fc86e5580ac5ea3bc08394ebf8519a19"), ("24cce0816a84957fc5e95714b6f2cfcf59227f7b20675ceb6de40572af6c6cf2", "144fe087e5d128773b5ac6162aacd3c547a66474ea570703f728c7494d3aac37", "218ae50ff5c28daded6a8f685fb162217b6e8edfd60969817e564d616ac53fdb", "04541a81e0914f75bbb45969e0a5914318cbc7b538a6e7262f521da6c4309bd5"), ("2623eefdf3390133af48ffd8388d460f7be4ed71bb090585d6257c7478df786a", "153b9bce35661ec0e6efce18c1dfced06ecb320a26ea771c9531dd277d6dc5fe", "2d031a240bd6ea0bcffaa1eaea6a9014f20d7d149c47b6a24aeb743c1dc73523", "26aba4d3c12c06536db4f67625419c8a3a412ae0ef927c3ee07d1a7962a7df3a"), ("2233f4cf7d083463a768ae3b0e1d6a897c7a8b495e9d33090e5ec1af0eafaca6", "15761b56c490ab11b21c2c3ba7fddeb1923431f09f52be996e81c147629d4a7a", "08b95da3153e57aa28046c75470f523f6431f7aaf207fa0b9cdefce459f31d74", "2aa68123a18e2baa387a04dbb36b50c972a7cc3e56c16024386a1abe9d98abe1"), ("1e8505f9859a3f2cefd3c8c957b1246b008bab6586ea70b916af3682d03756f2", "04a0a584a581c2b2f6e6a0d105cd40baf1d666e78db6ac1c9d4be0bcc85cc3df", "086053aebcd50eea74c8c91930e02d18dd908112b4504b43fb97e05d45de094c", "064eba389ce037207ad9432a8312ccd5c49e9e023e3d8eaa554b7e9881c91c84"), ("22801f6715068603177a19d08cf82cfffbce4b30d6796c63fa1c162977975d49", "01852f4a197fba8c03cb648611dc74ccf0fe8f1aeb211e932614b19730c50499", "03df85efc4294e60386403688354c671e6b6f39b66b62cbf1edb4f56704022e3", "2f0796a7ad3d9b68b4ea3d41341ac1c804ba70cb1f0156233979ff79d6cf92e4"), ("1c13a3d2b084b32af77fd8c8be38e4d48c29c1f41a6b486059d0dda9f6496797", "00f46703b7eb3dac51249d1cdcf451462141f0535033c030c102c054c81acd74", "0eb125701ee15b946ee7ae04708364a8cefd89b3d339432053612344812a28ba", "07ee5da780b4a82dd29b97208cb4d3c9b6857bfa996300b26f55bcaef468ff61"), ("0cb49ad9923ff2238e44b25a6dba3015530df278c8effef0655078dd9d7f0984", "0a06a2f676cf0f06a0361dcc22526a3d272e1e37bec692a35025b16128deaecc", "245a1f15f1d68aba158e5770a6177e6fe6ce2da12e47f066fdf26f4e1a98edb0", "18640fe15dc757f1884dd4fb6a9d8873df2f523b878740895f048897b6ff737f"), ("0b6acae7c60c9a4d514df21ccbf211309ddb35054bc1b3570ced51f996b33085", "199910f834cfa6e87450bb87c4e05b9988c50f26967ab1544002e1799b176710", "2864f7dba8619824984f20d14d327270f33a61f8f73085058a1869eb230cf9f1", "13834b81e1bca450a0a6be53af3d333b2a41c3e9803a66f6c25d8835cbc40c0e"), ("05c4b89f1bce5d46c521cb033fee975b3cba22ec6e213c7d867e651812fafd4b", "1e2146ef8f5e92e02687da337bf9726e46791cb64f35b59243aa9a92aefd4c48", "09b262c71640f10b2121c59d96b105bf27acf00aa44b7365637c2e797f44abdf", "020d5cea4a32fd6ec92dc5840c6f80caa907cdddaa23dc64acfa88790a95e2cb"), ("21cb0b261ae409a8449cca0cc2c7ca249f76d4ce6bcf15c15f32e0311046fa57", "27dd6d0cbb19c1d4a127f3ab70785833a01a6014d6779f8265cf1a81d0533591", "0b56df2aec2b70593e3bb52f487d73697fc936adf5c1504101f2b61e740cc601", "0fc8b81b3ad016f5068760b977e845049df21888060810e7fcebf3261c62b3a7"), ("1b6d22a090f8ec7da1ce5fdb93acb5784508a6d1b7e239d1a881bf81e667c439", "112cd389974d390656440ff8e02c67ebe82d85dc255a7d5e9f8e23edf60a8858", "193e93a3fa863f907db3c7eba89f5ad7b71a9bab9022459d3850aa576a8517ca", "158732f73fad7752e33ba2667c1093681924f55258723185a3d64312f71378f5"), ("1807f3d4ef7b41478f2266e4e19f2e8c963ce09f7a2c7a493a56a09084aa5729", "1c44f7dfa4be0cde1a1cb8914af6325eab315f72ec77f2ec7768d46f186e3d57", "291b041c336a1f0459966872ad058d3f539d49e22c68a3e770ffdf57ac2c8bb0", "1f6b39ed95930df1f4f7bcf3cd13b7aa1dca1ff4c2fb953e2773d6d956614bbd"), ("047ef50686714c0e758169c0bcb6e48b51b6727f99d762679f3a2d3c7e8bba74", "082345e1f81e1b0a1782e058536160cc5639710bef0776fcee8cfd48082df093", "0d5f772af7f3f3910ab1b3a867ec737104651736ba0965658aa79bb1ff6d78f6", "14040868fa6812e6568af1a012cfb61db784719b8bf7d2d4dd2875d5265d9e88"), ("281a6831f57d15ed63f294a4c4b8ee155c52fb7aa8dc79f7339d4553de9e5999", "170b267a4f064c3031111759aed7fdaa49c96b36d6880b41d094db24f9dc2af3", "00740a20a1461cc693ce7380c33d8eef0003c65c114d30a957689dc36160f136", "171d917ed76cf91b0d8e59c0f30d3792d93eb0b8e6cf181399088b463f48dbdb"), ("1fd68bf018012d78bf357a09f45d18d98f38f23d42e22e9237f233f6eae68dba", "288e204b879165cf6a2b2426fc8c4c17c1c664b0326b20f2624972ab4e552dbb", "2359bc5b8a382f51c1f26bef110d9fcc0a3fff7b885215f31ebd31928ce82efc", "111deaf1a6c16f5ba617fe2b17812f8b2657df71e227bd76051b6fa2dd1bb998"), ("0dcbe889a3723f5dbe7cc73645813f949cb40a071d7184a2486b5312ce7a6cd5", "1969c3200bfaa8a41cdb54963acb3fb86fca3db09ee11b8a69a1e4c589580ff4", "1c370a10c8a98f42f796fed8d2710a8951e872b18471451b5ec3a5b803d3dbf5", "13f2baf1b303d3b6fa5df81d9ea813aeed75b26aeaba71a94bea799cf97e05c4"), ("0699018d4daf6382d5c3dcf7db10587fdfbf5851a875cb3a194a0518cc747a1f", "1f05307aedbe7bc22fe423b4b52f786e934c50f3ba85c9b4eaa53fe700d88b0a", "02ee8af07c8f6a5bec9b3ddca3b4b0538473d41d1b155003461f43dfb26023d0", "21ed1071cf4fcc5f48e3d2004e46aa0994e1e6373e2e91da3b7bbd0332703254"), ("1c8d1f3bb79f33e8ad5da1070c5ccd143b65b7668e53d83fc662e3f4dac1e09f", "2d22d56b36374bf23fd662a107b5384c9f65937667218a1244a4aa51baa86f97", "0230f76cbe894619367480f5f0a410a29916ad81a3caaf5f3af9a74701d218f1", "1135c65e9255dc81125c2c8a8b4e46d40138ed2ea92253df449e6b0bbd2337b6"), ("1f1519ef2fdcbd85215b6288a4faaced7dcc7d784f4b7546ae6bc524b7e5f256", "111869e5ae444a8b95d0d6b9f5781be83181cc23e0df8a9a33421c9ef1f5bace", "14fab239548014a913aa5d5b937482a84e9b71195a454d44e47f462dc1caf743", "303b92a423f70a846b2bd499b8c928d9d5fe5032729e97c843d960df6f2ebffb"), ("2b11c5c27fb82566113ffd3707988ccabd43e372c3aaeb96421783e3f8245027", "1175871a9f2680a97af5d3168f5a50e5348cf9a3dcfbe3ea618238982986dee7", "163e813792c68ba2657a4f684125c4de1b98c251d8e3b9dd9e90cccfdc786cd5", "099356d64f2bf03eea846e55c6e9d0c2c71c79fe79eda93f56fcfd56091495f4"), ("16b2d625ec46b14d10dedb0d3fc3da75c54c9d14978bc96b41e6ba084a27175c", "1d6e0781bc5f4d2901ba8da4193e1a616031add686fbe319ebca26f8bbeaefbb", "022aa67ea44d76fa21547e7166da4038b0dd0b5580b8a9bdace4dfb3e4cc8746", "10cea46961bbff6ce74f7c9690785b3c49b2df7b8c5aa3bd8d74f7fc9796dbc2"), ("1ea1dc5b9e357913f2b0cfe2cc4658357adc987607667701f66ab0bd50d04ff6", "2d00c007e3e0e4ee0df24d4865e814f67e1e7c7e2d127fb825eb39deed015b94", "24c80bb7b2a55a2884940ad80cfe08cefe3a8e52e5dc4f7f9ed2cc5c4f7fc386", "00208fe4c6243ab7fd3863921f901f563b48463e377ad850de2428339be509f6"), ("0a64611795db1a963358a1dba5a80d49557f832e913030d2f990508653955148", "01a690b7c0086f1524edd1ad7779060129d69cfd743e503a694e3c9a90bc2d70", "113a400827ca37ae0651a845d96862b9b1fcd6a96d0045bcad852139e0c8bb0a", "1d7177745df2aace3011d1a9e2c1dd40070993187aff4e32dd6d75079687182c"), ("0c98e9b6052175d6873b68df2fd309b3c686b97412a713320bfb883c1e31ebe5", "2acd647fa78e21c56fc6eb1c99085afbf583d7ce1e8ba5f5d9b01800f4906377", "088ccb9837f57bb094d6db552212b25de9782f876515b3dbe030619ae64d36bb", "0902977531253c58cf5b55d0f10275b185b19d9aa4e88e284c34a5e3fd7b69a1"), ("0e0467b4e38bd63ffb077ea7a630b9b7424485532298b614d86d9401831ac724", "2442f5598d47543870ff23acc90a0743c9a6f74f4e5d97eff6dc437d7de6ee9d", "164640f507ee38e7842abfaae297164da99c1c2bfe22af7475f9a0429f87c392", "042e8b260c0d54781c1defec7823802b560db0f214b44bc2f7f17de5aaac8521"), ("141494ee5c1989ea3464dfd381f7081b6e3a61754d916b56acb2861b9c7f1306", "1e4771e3019d9cabae1b7dff80eee6b738269b1587220ed469f4f7f885c1a398", "0fdeae8a00a05fe7b3fa36283db1a91d44c0e72d5eeb7c61748a60aac940a4ff", "2bce35e00ab253a708fa532899feaef553c6a6a2adb8d9b1172e8459154491b7"), ("07d2de016847158ab432e3016752878b9e9e8a4111856bdb39021f5b1d847ad5", "20ea8860e674fc709c91df82e1da69c35f90a8c104a1da23d9279e0fe9beb346", "060bd8d71bc7995564b1de1f76a5971c9f7db35813b62cf2d50d116e5ef059a9", "1d4da7330fbc51c15501993e6392c24c48d39c298395042a739792b400cd5811"), ("09ed03d0f0f8fea8021e0c6220ae86b6ad3e571cfd0eccb515da73eb861e6264", "0d439c12f8c79975951ed270dd5f07971e7c3c5f8e552064d58765032b79cef2", "1cc4c40b01a80cea2744b2fddfdc86b42e6ddce08d1c6fffa0b37c4bd01d416e", "037d8452978300b23dd085211494387853611b7dcef172eb3c0fee56f61f4a32"), ("0df476932e866453e726c85f0a1c97f1058f54b1ea6cd58e6b6996f021ccda97", "1a98de428b31d67349be58ab646240658d3ecd2ab7050c9a0138c0f0edd94f30", "2e2e23b90371551d995bce6e09ccceec1bc44800f8b9e1792a2f4cf37e1d7382", "069e8f0fefa0d567cc76eb6dd333a387cba159fe6144e94c2d5391b784e88454"), ("06ed619e18225f3e9fba3be1da5d69a6cca6bda19795eea58f10ced72d751245", "2e3a9797182b47d4cfbafd624ed7b25416ff941f69f0466a802e53b62a569b06", "0b64cd01d8310f756a87e4408d466105156fa5da5dfb7275227f36bb3d51bf10", "11e67bac38d310dca5dd310986fc71f2d0703cccc97cc3f35021cad18a857f53"), ("2ffeb554f7ca2fc36097acfa4467e226fa78d98f487f9bf1a1eceae04d91ddf7", "002fe767d41ffaa3b03f461ffcc01e6d91ae2f77e25943002a4dfdcd3a3a9624", "153c727f00c7d1f28d80ed7eded5b53b1f7b59e410c2cbd30bc6fbb665d65f0c", "1b4433e33b8b0e69a739f03a18331e57008d0b4bc34006166254f7b854c62e62"), ("1837a26fd860725ddc08b3756ebe28bf5c99fac96be3a7f3a112bf3f5f25763a", "1a87d140e6c27ba86a7172a7efbfb700cc499b7e1067123fe7fcfc63b2ca4fbe", "0a414546bd6b69e67296ff435797ba26536ebad8455db5c6cd49bea3381b0fc4", "2d47da41a469bc80383cf55bebde722cded1bff702a48ba76953c249d6274ab0"), ("1f00e3980ce9182c7b3659a81d4e3f6501f27e009d67732437bdaa245b2db56c", "17b3924e3a54fb8264179cfb7bb7204c721679d8a00f1d24d6eb272c694166b1", "2a67a76528351ded9da1129dd7284f026a06c0e9e3ce525de1dd7430d48c5fc5", "27b12cff503e03fc68e8931fd8a5877a51e91c441ba8de7e430e9caa8a415659"), ("189a53fbc3cec8135d0f4f0aedbbbf9ed85c84e40461362a507dec8c646ed314", "044c9f74d97b80a3cbce0f6b6ae6520ccdf566ed70a1360b1fc13e24f1800905", "01e94dc43968e73ea9fe7adcd98831ca0714635a9be95f2532f3df1bc68e414b", "010dd9af4154ac1c226505429b17f159e67c1ce700252065f32ec3849e3c99e3"), ("19ec22f93a5c700991eb151c234e60c46d4ee8be2e3505ae99aeacfd3dcdd3b9", "12905ccd0e66f5e76acded5bfefb5142b7ef995639c3ead7b61d632cb482ff4a", "104b48e4e9818d7b6d1b9b84594bce62f16cdd1ae8b03e46824535e0407e507f", "0a258d1d933594f9f1812e6d8a808a3bf0a8e8f225f831f657ea5345fafda6c8"), ("114e5e92fcb182604e5750ae7d7d3b0b767ad1a039672e71105c891a78af2cd6", "2f751665770965c97f59af653cca4fc16ce27cef867811ea1029f827864c9a2c", "07b8178aeb0565369653552ba51732a393c61dc608a52b7ced0eb45d1b854d11", "06a1fbc2eb4837c642b191fa8d1dcd2958211434334b572bb33da43f64eea180"), ("074160ac8c1a735f49dde3cda0e1c3f653b1599cb729d692894070e0a16e0326", "270e65a21261918ded4fe32e3706131ba241245db5d5d837d0f74fb33856a267", "29b48024288b01b3c4bf9b3aa1cec8c9552273fa1eb4b6023c59bd171044429a", "2b2c0e05c3309d32add9a7c2fa4a285108ce5c0327dbea1556e226af22efc09e"), ("1535d2c2a051a08e46a3dcd4475354a95405beb97f786dcb951d9a29937208dc", "251b57fffcda329047c3cba63969dede1378e536d95c4d8e17526dbc03a9dc55", "1febff78d0c71279dd90dd205c77d9c4956abb71813d816ce4b044b4d314a6ba", "14f1b7ba563e1a8d8404d8d62698577a9dd1f7577d0fbcca8881140aafc2ee53"), ("28993bd4ff0a3e50d0a430120f186b523028dc4ed5b992045b78f17f0c48c3b1", "0c856cdacbf701c1aac81d6040c7d76e7baa8626d219b903106a727cf9e280d4", "24655871cf0c505a493153fee344d9c014b2f36815c811de64b60dde4d930c7f", "17a9ecee3a5286bcd2fdb118bebbbfdc6a3eebf994d74333743672825e9448c1"), ("0496cfd94784389562ba0b258df8492b5edaecfb4419cf189438c9b3c2bcad75", "23d3ebaf42796840e754a24720dad6ac0d4eea81de36cb2f204712ceed094425", "18d15e1c9e2eaa3868c87f3cdc9110d2c2ce8c96c035c3d0011290222ea0cbfa", "1f1a41ca13d62bb2b5888bebfb314ac8382149dabbd51373e477f74f58159a95"), ("202a2d700d2338576fd5809c5518beaa73a16ca06fdf347738e1e1dacfe2c1c8", "0c888e162f4485cee57a08ca083fe93fa79f6b3112017a67f0a6fe0c00eccd48", "1a47dfbb63c171a0cd7d813240ee49d0c783f24c9bf31fc0db6ac1fe7762afbc", "0e033298d7d61c3662eaff5d8cb868aac23d1cd10f8375f226e105b728b9a80e"), ("12f7bc58a96ab631ff1a58e2b5201c0de1d37b52b0079d0f2b199ba6233c67d4", "00b1f7c2d2844409e3d08af04c3b871bece40d0b9fea160ffa093580c8bef12d", "2b107081aef0b3998cfc30ca25ba6a30bfa40025b8aca9514e975b7c487fd45a", "298d9a1d7d7b51587dacc82f076e6d4644dba6b354612b4f70e4b4da0200395d"), ("2795083796cf62e0e36ffa4452b9f14ad2e0cd3e646f4b5ef80111b501fdb3e5", "0ac23e67cf4bcd9bf61fdb23e977ad1618a314a5dc6d16360a53345a0e75b8a0", "26a8b1535d34ababb806d680989ecb0861f4bc963ef1776620164fd07f4f087b", "0c627baca0cd10114ed0aac125af5fe94b21120e0c3c4ca268d087d0454da7da"), ("20896555e9632564895e55ece9512e60d3f9f88daaf05498b339a045d1cfb474", "0a679c833a1090c51c2103f79d157ac84befa3cc0f73bebcf54c64ae09e2b9f3", "2a5786fd48b009be5fc2e699d22e3414f31f2e3fff3bfc39ae3023715c4e6958", "2a3f8d5c229a34805d17b88a273415df0cd527c43f03a45ab12bea4788c048a5"), ("109e44bb1a0603bd46fd4eefbeb450f5d100528aa1304b43f19904189d4eff77", "10890d2158ee7cad09ab4a37d263531b899f68c4294ad9246ab87f017fede142", "0c07a1d1665711fa51cb2d59ab5429b1fade0b0e1c26fe93f3f0233fede8dda5", "092516c93c585d85d9f58d66e1dbbd003d032d7999c1b350cf719af012c32baf"), ("16478fd1b980a55fc88185d4ee25072bffc54a5eb7bbe73f49099477aacdb98e", "124f13347fa69b62834e5eab6bd63790f22cdac80186b381c1bded27832877ed", "2e0424c115842507d83564fb0ca5bdd59617368f75251b0ba2677d474c2f6bee", "238a77236fe12783f422e58db92ffad7f60d22c1b18b4d3b5551e6f89e6e7384"), ("14ffa479f7bb96ededcafd5721ef762276ac7e4dc31f3718399afc37a8e5255d", "0cf736d1d5de3f7622d7b566df168b31426d913e5657c745e7f6994233e019fa", "16c96974d57828c836539dc5bc96dec0fb68694e630db6988f825aeed96c4635", "15a86f849ed0954aef38188e9aeddaf4404d52dfc8f1479fa7895e1e2dc66f90"), ("2f46eb714330faf16840907b2497fe8e549131176f1bb7c813f26aae78f094ab", "0217dd806ee8c5687b35c87eb15eb51eb4fb8a2cb0dacb9ba5c3764610ff8b58", "281545d8fa0d5bb95474d5beef9835ac223023225d30e9ca86ee740dd417a1d1", "03b7c4505d737a00303a51b4f3c8227c61a31710758f2c80195d7dcd4563c758"), ("14ac9e0acbd365654b3d3a31c7d3258b452b1054ec93a4bd65d7918adf8baf16", "1a491a3d046ed9ba3c1ea1150e4599e1ba3e8b09c14263a9f165206d65a9715e", "187f9015aee851ba19e93b1d37c1e554d66a0b5f5d3bfc0017851d7dbf94dd02", "024943d381cd0258b92296a26d80d472c58a2e21e050f6954736d97f52422a5f"), ("0202673faebc57581541bbd781b2b84a968355d566ead9afe18cab6cbd57cc31", "1ee18c7dc1c18316888fe580ebf4408a816095320d3ac013dafbdc1de97e71b6", "23dca74e278e008be02cc241a2c53265a5a523c077598140edd6ad43d17cd95a", "29d87190683625f7ee992f297d1e627ffa5a9829a20f0e20d1246da162ee8698"), ("195450999d271d1365bb90522fe77bd35d8e362f26d2d308cda36ea178ef66e4", "2cd6276121c251af3b94b47ddd78ac925bd14a9bae20be3b0a58a159d9cf35b1", "15a6b07725c1fa742fa48adda48140413529866af10e7710f7d7a60463fcf0a7", "25f4587d841dcde5e9d9a095756290b28c8a4b027a9ce46ca56d9ed2511d867e"), ("1e9fec0f573a8c00134b916efcc5079adacd03e6567b32a9bf2c8e1d8c4c2e3e", "27e13dee7337c8828f9da85722ba75cc812dc6aefcc2b8ce81e47cb74d1ba8cb", "16601d883b7a561ba342517851bfe7852cc8b93d6bcd81e216c10615206fd796", "0c466d5eaac6e5bfa487ff94a5b3b04895332dfec245219bc89ee18fb4ec2833"), ("139deaad595108ae6abc05c7007a87d56481e783849427c382b6e6d0fa9c1e20", "2c2626e25387eff33828a7d03556732f39bfdb6c9fee2fdd8806f5cebbeeaedf", "2ddd197d8f261aceb00e5e1fac5700d95b1a00f8a8af18772266136d3cf57c8f", "236cfdde5af0635b6115c02611d6ea2a1bb13c3dc58b253eca6aa6d6043237cd"), ("1537f649be051a661f89f72737d490df10cff3446643a7ab157e1df87fef292c", "1b3aa738f549179fd7798aef57d1722dde0b17b8613c13bdf2833344fd66a27c", "2227cea82f0bc133ce99511ccc018f09845226d0a72ec4d0a51fd7a956480b4b", "18d0d2b79e58e42e50a29123f39901f18eb8e7def8eea834e9b8de0ebb965bfe"), ("057a80bad770ce4760e98f9f9680542cda8b3e2e09f0ea078a6c3e1b3f7093ad", "0a2d623029d90352bf0b24736d3211355ebc9d377d378a16d3ad6368d79f5b82", "0e9db7558dc3fa7cbfc8ba4e5da3735bf2c03a3d623e3f336bbfdfbf8169c852", "132cacde02bed8c67dfb5129dcd059a15944e92c6577b7d41cb35a033adf279a"), ("24241b155c0fc747ab4cd9ab9fd3d32746ae9aa25241d21be528bad44410aebc", "22bd27dc0b4d959a61711263f4d5ec9c591693872b30598dd2ce69f552f953b0", "1809ddeb8b56de5b2ea87a70e1275eafc4284614bf9e6596c3a0caff14626e1d", "2e0f8e60a5d987bc3c79fbe237414eb8fcb05b2408a794f04a6412f1668ab2c7"), ("1269f16b821b9e337d2fd3091c198066aef91b2ab6c74f21ba9a920da61b4e26", "10fc55af72e9e8ae1798c6339e230b661eb630ce98028534147e41bc0926f3c5", "2afc6ba82862dadeb2b748bc959d378761a5a0240f6ee689f2eb0f61e3748fe4", "02e75160e039929de8c4ac90f24da962d8096223d30395c3c58b012c70d901a5"), ("23958be21c9d07c9796755a087ca875e08bf88b8ddf080910324849521d4db49", "1022fd2b1e0c3b0e29e72228dd47a1157ec585f7deb347cf897d027546658af6", "10c93bc978b9c1eabca52db38af369f82c0cc1ff54f23d66121a8b0ae941e8ec", "117e5a948a656fc0881fbb1e474239f6c75fca2aed41bcbb6fc292cfcfc980c9"), ("1d733999878e417ec3b18916b4c14210c743a224d225dab3e54b4a3c56e224b7", "08f21437fcfc17ca707bc212df52cab9e1464c40d1b5aaf80e3cdb7af2ca5580", "0490b3ba8d83891d8676795ac8236b0a094d15345a1b308549193c730cc15855", "2283015dd4082ba6324c4b3aaac1f42f6a3a7c47cc80ada6c68d67a3f3f50bff"), ("2760482ce4b652568fa97ea55e535eaedce6f9443316c71c3e708dcea9d52ab6", "001bff378b13d290ba59d46e3b61072ace71fe61a9d7cca9c42bf10f6125fd04", "215a6c19db16b27551c88f7272a81838c9ef3f2575a6ae8b120795b5458552b1", "1495ded9c1d4e796692f861a277423bc9bef6ff3feb2983d259d619cb67f9ba9"), ("02fd1bd84195470597af5b756025fb591b7f8263642ec1212c5a027ce0e8e8d2", "207cbb5e387ef72ff80cd3ad1789607216e419b0fedf5ce26fce5a037c58c591", "27d9280cf8837530b0b787dbba3e883237ac558f0222d61829f4454bdfd83037", "1de2b67646b75e0be930ea22214a47ad59ce1782c428b89f4323bc6bdd24889b"), ("2ccfcc70f77c0e3c4fce24aa16421cd612e7aaae4e9f922db1e093a1d7527680", "26921e8562a8416f445be25b9ca8e9f5caaf996c9d1d2c5b3a35f96c60db23a3", "1af0cf3ed781837573d396bc019ae5a1481b33557d28367295f39d9899ae3d7c", "29081622bc6043ac01474331295e6e7351989105b60cbf8855932cc997a54ca4"), ("2475eb747fa4a8f728062bd33e2251dd869702114228bf371e7f76f6f4204c29", "202f80be2300188aa88f9ed02f278ee85ea1265df8b290ffdc9318f29ce7385c", "1b96cfa4f81ca2b691470502047746aab9db528334bb0b079df077fc68bdf1b3", "0097cbf512cae995decc6985a9e605d3f04a8c0fa7388dbaea7ef8e3a102bd9d"), ("162d4b03d5904a2a8dec2cce9c133001a101de75091c05274f5ca86c09ede74d", "081d6447fab40523ae08064e58db0d9da757e0bd387492e6785d3a40024c215c", "2317eda74ea75fcabfc804e987677f5a3ea75341203d4c2221a477f4a6240cee", "259e31555f31f748ba40007a2f74a371640079d4ad184bf2753ef0b6236d60f7"), ("2614cb01fe869c3040eac31656ad6b17069b29e0a7f0063fad33d88760cc1e6e", "0e8236b0ae69951a8d530437d918d22dd270ad79a46c997ae78c3d1782c564da", "19a23b53b7c85d77c6e4f87c10c70b1f1a5f6a861c215198f3cd32f19130e3c9", "1d4c9016455a088dfc8bff87156c8ca672e4f3bc9a0f4d7da1d723d4c4c903cb"), ("1ba9a4fd397011e2e519db8204a5ed0a21a48bb6e620ec77ebc913c6fdd047e5", "08d484d3b193a8d3d12794bdc43822ffcfed4fa6a607a7c8d6301c51ad5dfc17", "0b1e9ef2b0d270d513224c12d54d0fa0067967ec23b9bcbf49ee6b158a5da91f", "1d0450b42ced6ba352939da095cf69017339e00756c7c2b581f6e3b3c0850b5e"), ("166e9a2db241d6f8202e9d37e503f22626384ae00057b48649571bc4d4130db6", "11818602ef6295216bcf661d2e0c3eac573df705f2ec8c21a6be6c4980b329a5", "2c4309ac9ee02a5e43842140f748dfad9b9db5fe6d8d03098076d8bec3418b03", "0e7a997dc7fbd02fe0ae3fa411aa387fd7240ec0653c1e71d1517b2cb13cfb96"), ("28e79117b9f013e0a643fb3023281e0499c99cd015ebc7a0a75c52f9cb336403", "2461a2a5dc8a00834937afa59c5fae8bf1cf757aaa8e62bfca6b6496fdb9680a", "0288e19eba8b6b90464e1bae31203fee067cfed6b332c797334cf89fdb022f29", "07b6681e3518ef1af846579c16281e20db359d1e7eaab7dab52587bdbbd26361"), ("1b94ce190e8ffa097c2d765471a46209955c6d3ca3e6cdac2b445020824b1f00", "29ecce52f4832aa440999b5a496ebeddd8b5a238aab6b4fd56b63aba8e9368fc", "20d538fbc556d8cf214f1337b797fecb4f36dd6ea0efae6b117ffcc9b1fa2c7a", "11a2adfcaba7f5051b1e955c2a04480ce354557633cd7b3f4f932ba94c1f5f78"), ("0bf4d856b2eade3b9f643fde76defa337ccb39956a787b070d931087e62e14c7", "02fc62a24da0c67e19e097c07cb81fbabbf8e3f3270ae46dddfc0d544af0c2a8", "1cad6ac98125cb7d8d6d0e54f2c1765985aa0f364e023920a33c9db1a2dad3e7", "04b46e3756ab3f7b311dbe2276d986dcc03be85820262a2c9c5058ec5878d416"), ("22d57e957c772bb002ca93a3a8c79d8708f60f61d551041c8fe756dc9126d165", "1e3c0974298ad269daf70e05dc4955fbda83c28e19f61dba814baccf3f40f2f9", "257caf352c143534cd626599b24ae76fcbc902e39bbe9e2922411dccb50e5e07", "2b5b5b4e42468818edb8c623a001274840b3ad81d692e07a3b102a33b6a97efc"), ("0aa194df30e97de4d631468dac57a0d17d4a0ad5a30e8df68d89d71983e4f5df", "01cb8a8c76f7cd0b9b57c18b7d0fc79a22fbe6094ae1cae5b49676e33ce63a4f", "166a415491dc976f685c6a1560a9b05c99475b3ccad411e9d5f254cf1ef0ca45", "0af1635b8035d2c7d0c765db135051aaf7b176e2d98c5fb8a40d641f718d022c"), ("0961aaabfeefd4d953953bebafb44a293c3a1e8f7cd55b6f87fcd3dd22ee4fbf", "2f730d08a3b7c9997fb436ba60350700f7e8748b06b503d5e7b094ce0636e8a2", "247722f8d74e1b8a1148de79a2711da1fd9cf07fda8f10662097037bb6b7b524", "0e5bd643d9b062979c739b2236806f2613a2e4c6ed7e160b705c60952f92a730"), ("2c399593aa02d230637dbcb21f117bd2f72314386643f46b46985f53938e7eb0", "27ea662dcb677f23a23082c8f8a1f2da2562d151aa97c00a6b607f06307787d7", "135926c1570b170e09696daf0bf7506292438271048e481d47faaea1fa852b5e", "000ab11039ea4ab8c74bda976bb07215601c061db6e1c1cf231e9f5287b86b25"), ("13702e577213bef7892d34c406c9cbcf27814d4e0abfcc5672b5781f661e77ba", "232d9664a766d0e847070b819ca8a4f6c71b5b15728b52c57f75629aab73b356", "281b4954d771c46ba90445d48fec3e1af8417b74c3edf62b8ff8de7702cc1389", "0026602db9247a35cb995b7711c1d5b908049fadaa0ab6a4253762c781a569c4"), ("090de538f35a224cc82b11d6c38e453023d8a7423f4d059ca974d19b0c14a203", "1a9c376b6b0854eb8d14a3d9d108bfdfe85ab3eeb21a1744d607ee782899ec22", "17e6026fb9526d5aee3b71b3f429eb26c5bd13a13db81e0d85ad9cf26c106251", "2fd44c381630950fc82330abec540de099ffb9ab7822d3e1de0f7cb8e9e6c3b5"), ("218f3f4c3b1b156bce679d67d389e53c87777418fbcf05144c48011ff5dcc6e9", "2c85de77d7373438486424d281ddb1b0a9cec32a4ce702ecc76a1ca3b0f19c74", "209135bded5911b9ccd0df347b9626c56431ddc3735c7c0b50c55d70b3b3aa16", "06c287a163472b15daf937e07acf5be615bd9dc9f1d87610ab6c0a2bb1c175da"), ("1f8ecb3a9663b150ed854f026edc7ac3b717e472c9bb6f33137708869f451c19", "1006ce1a2ff81a814cb3afa44e8adc01f8067491b47b3953bab23a52ab9903f7", "1be09e785472d3cc155502a7e33d431ec81619c153bb5456df59a4aadf252c14", "0d877cef10fcb4cd4c10958a37a3f97ef1430e7020815fa5e32d255d595380cf"), ("2c9b6197a02d71224d9224ee87affa37963eb6fcfd13cd59e2245fce0a2f5a2c", "1bf3b8e0ec4c0fc3661706379671b0a9fbb3faa20c31c99f38d76df153bd6342", "2abd17c4fc707dde0fc4e24e13bae6a6c8c7dcfd95e46704b6079e842d87a804", "01b0e8285d7ff3751e7aa53cae02654a7e4cca43fb1bcb74af47218ac4b4ac8d"), ("029d441992b80a6c16eb251054769f69d06997b0f5474e142a26eacd247ae993", "1ba8018b0d67d4d9b9d5d6088f353ca773531303e4bf9b332af7f85337fbf262", "223dc24d3eb4b9306160c2eba91bf472ab9463d946c001a714802c8bbd39bc54", "1dac6d6341165651a775ae06bee5dbc075a59c9af843a2bb0e9ff306f877d045"), ("1fdb508011954b92868999a68450d444e3442b55aee90f9d76401b77dd89a71f", "2235879a78648d2d72223afe60c6cb4da330c51a6e58f1bc0f65a22a0a343fbb", "2b564233875514104f4cd0b9290001e918e968a520790c0d4bb137f166f6522a", "28caab61d0d639552905d639a9b275a31d9f5fe3e9ea7a8280f41995729f914d"), ("04a753631aca9f88d306dc637571b4f004e7ac1617a95f3104e1f9e7f1e53449", "231464e2bc887134c8c1281a52f126b9d1fc3ee4386ec59a78f91ba3598fa786", "04c521b26f5ecce6ec585a7e03fdaf6217d0f5be83fede790bf9a30db3a6c52a", "0a5a2790eea19ee18e09e58d3f6f4a429becbf160343cfeaf3424135ee00d2cc"), ("25f343825b77b7a0159b5fb8172fb5c4e676edf38334d3e4b29ad172c836a8a6", "114c4e707fd05c79f68e64b4a6adf49e45694f1e31cc460b9546cfa62b22b133", "126e2b65ff14b7676b80118f33962cfd3a79a3a5ae55347e0077161dee9cde23", "2706a93e4f6d77e5950c1e8d5f044868fcba6e1b8cb37a31c701d0dd9b21a647"), ("0be64ee3ed17db43f6c8f560f75c54ddc02a6f3710ae2287ec835b9cebf9560c", "2c4f176a165b23ed0ca82fc55d86f0a42e79e812be5ea31293d1fd4e2a709d03", "14847f1c62f33c1c929d600554c31aa74d7681487406d4f94a0f9b70c8d8f9bb", "300119d80df72bd9ea5c3c236db5e47142c44f6f3980e4cbf5fbd16345d15d34"), ("2ef0d287ad7642ab03910bd56804ff8c536e736583f1bdd90fcff4d105f02c30", "159f61b6598faf94fcd793ae9fcf76eb82927ad8d76612ad709b0fdf56a951aa", "089106143fdd8f638c8616d9cbeec6f6cfeda5e455cea537593412d18a91a27f", "216919707860faf30ec5f778a8f1ae5c482e8c547d173fa28051a1e48cc9be9a"), ("258e1c60960c0d9e5a5e891d5ae669e64450e3ffff1665b3ba708b758f7a2338", "23db77ead4f112b021033364fc7481bb8bbdbe4634c554432a8146c57a6e935f", "0502d7c49a99c99bffcee64b2204bd35063dacf6fd6b4b1c612b62caeea6658c", "0f745e8986f9173c6a7f4fac7bb279e74847ff77e28ced5bbacfa5ecfe359a5e"), ("2f76ca1d39fc4a3b8b8a0e2bdcd8939bda70f8d2bac9db4cea6cee6abd1030c7", "0a0daa9f5be1680abc7f2edee9b71c3bdd8858b817e01a277c3a42c72207c095", "1070a8cf5b23d32acd44216768e59850d473bb454bd32185ca9dffbf6a97ed69", "09538d46c5014a7b8c45879b048774afeedebd009c9ce0ab256bf176d5df597e"), ("22b1be8bfd92d3334f63f673789b3cbec880261e4ca65264afdd7e7812e39505", "1ea3941131ef28cce77f41187f0a7580119f56ffe126275246fd6de473e95d9d", "06ae3f7592b77dc031d0c1a3fa0fe950fa813b693101ef79a85aed6847f68625", "14eacbd4dc5c1439edfc125bcd66b7da7d9b49be804d69e12532e47655702bac"), ("1a7061d8b457440660614896c54330ac28077649b574a54f688b44fed5703ad1", "0ca0565e9033d18ae73a1dad88ca2afa41daec5cd15ab62e7cc18048ccda689e", "08fdd1467caeada38bc2019a79947c9042bdc2ae9108f3d360d184fd6e7c9ebf", "1d5e6aded8ce8e50e7e6386fc7516f177e6b1943f0cff004de382165abcc71be"), ("0719f10a63a10696b9a525c5cf86ccf84ec633b46ba892b235add2ac2cd20043", "00cbf7d6c1b0e79242032912f74419a3caaba39fc852ef5c703fd29dd836b656", "16dcbb19ca753c20704d05b640f7eb17057c5a3cfd15e0c4ca7fa810ee9ce337", "094b297ffb89ae70ea664f624a4b3ef8e12f70acdbd9b5cdaa15ac437e139db8"), ("14ad949d3b061cdadb2f69a298db8645b842b4e33202e3d4609ff2bf330a6db5", "2ee0dba4a9568ebb1b22bfdabcd17372a3a441d05eb0f8aaa73edfc429f23d01", "134d2843bcc18b56facecfb5dfcbce30bb00787ba01d3a5e2e804cc6f6a12b62", "07d3a05b0adc92bc3cf0a2f00425694ed921f1292fda6343ea1b39842929239a"), ("0f726aa5ff8e172f0b42427b121af79d8b25621054045fe066a9f02888a948d0", "271adb7fa24728b135c7d6b2e89eebe8d11569b26a1a06c8b511ab49b9987469", "1f0f9c5f204f448b488b66f5aef71c078a28eec9c9fee8168b2d1623f4cb325f", "27b1f3f1313e48c70d2147eff8017b59ff006da344151d82807157c628a52e8e"), ("0efb489361ef892234047965944a5356f05a591f5b4967f26a692b6d13c9e5bc", "20bd7d0a7d7b536f7ff6d15b28be990e2157b736ec66b71ff28407042fc430b3", "01ff2e9aef08ef27ca32541b0be95ea846d2df20c82a8ff2016e8bd111ff81db", "0a567fd3acc593ddb85767f5695bf6aa709b1674fee50b0d7a4088f61ae60b78"), ("1136ce55bb756619ed320c70bc622b83dadec23950d89b2f59424ac99931de99", "13f67acb12d2bdf01426de54456d1146a49fbfaa1927dbe6d2ba0b5d150ac485", "23c1e5d9ddc662f7bfff4fbd70c7ca8d1aaa33c79c70b6c24ad137a741654e08", "164486b1d3ac370b033bb1410f966539715028d4dcca22b6b39380fb99f55508"), ("263b3b46229593187555809a0492eff0c4dfdda4afc4beb9e2975b8ea4faf6b4", "1609f9493928f2176602a940df89cee4e4b0c4c305e55bff540fe282e074f0e8", "202c9a11f915684e0e9892daf59f84bae019db77a290f7c0cc13dc18130849bf", "1b021ee0cd646e27dad82732c1fae76fc08d845044a2c9db4ec5cd52fedf1637"), ("23f5218789cf73940008801b837b24942a664b740a2c7954ce1273fa81b24f91", "23df26f9c03030dfe6d7c876765120adb1e7d1029112839d08d0b9c5f21a07a2", "2be1524ea31033f8bc6cfd45a3b6d7846cd68249b89bf12a09f5d75a1a9dd41f", "2411d948917bd32252a8c96c1dd97f1cebed02eb6ce841f988d947f2207841af"), ("002c3679f317889897a7d9a5f1ef7ae75dd48468ffdffad1031e6abfe30eab6a", "290691f900b8b16e95c4080759135d87201239ee25b816bc1781c15b491e306b", "11b5574054d515390666cd69709f45eb3b1479d8b74bf8994ecdd12bfd8a76d8", "23c916ff55e202f4b7e6f95775648862ba3d09ea7aaa6b295902ab2c303defbb"), ("0014dcab92e4ab41fec9aba9151a7965c1ebca4ddb6526ddaa275a24c9d8e94f", "095103030d317af4fc4262fe4298975dfab7a96517316dddcdb9d49515fc46bd", "07aa388ac35ecbb1d695ee8954083ab4614becfbbb1eb8e6df46e0775db95a3d", "0648b886dc73912d03b8bee2d026c5ce6c25f4ec46b6435de9c93bd0613b4e2d"), ("020afc6dd9c4b794d8533017581f423525782db87b113503e51732f48372807d", "05252a58cde9abc835004538844e66bb6f2d2e8484e83cff2e5ac7afe88aefc0", "21b61d003cd9432f09c35ac5e275002fc71a952031ef4ec4656e9601f0581e16", "23b85b09fa766bff6543ef8ff288d2d978418c75e41e841dba581c58ee841de5"), ("17c883fb81bb37ce267b0afa03bb8707e8e3e021ea7bacd4867305ee77b8cb91", "0fd738c7c1c3f71819780f2e8f14c21cbb1754e222b874334ec09394ef58bbc9", "1f1b37952bdf5c77fdb25dfa85cd98b315ca027d6ea0ebe04be7f4af8be568bb", "1a4cdc570f195a269ae346a03d2c36859c29759687c755bfeb861637ed1bb143"), ("1a7307edd9ea57dd6300b2e74881ad607b4beb1b0ce8a5c67243300a04387c51", "0ef019a4590c6ebbaf0ff61fd0e3c3df53a09d8fa469783b95e7325c1c301cd5", "14e39acee49266e434a47234a4b20053ee06ed88980205214db97e08286421aa", "0caafe087403c8b8719b47a286cae7f6fe2217bcb5e3ecd6194833d2dd9238a3"), ("133a6fab7497505f764082dc047ac0681168139ad719e38949d085834b7eb2c7", "2626539dd90f4614add1c9f570db815c5c86a3e442717fc5f7e7e93dd240095d", "1bb47467ae2b537f52aa58e4cadb714280f876adb5b2b49acf5d7543135bb093", "2be5237b7baf472a1bd4a88047a59bb31cc529ed9dffce8d34344573ee5d2be8"), ("2ef136aa575095e727d9c0007c374ad23641edc40847b6fd9ba708666faaec3b", "2e4b733bc82e0d9a984ba3927c5f96deff90958ef0cae2692c246eaaf2dc4d5d", "18b980bd8724d4f3ca6faad873f4074fd28bcfdb6dc21344e4372c2c41989928", "251161a656cac30579c23583607c6dc789280209f78b67cdf3eac769ed4cf0fb"), ("1ffdf989393949055c94da2a07699ac9ed3c813f3fc501e10a31ca59bbe021f4", "02e8932ab7c73b4f1b27c77c8c43db81658f324a6549ed0628e424f957497aea", "2a5cd4920c8fceca198b43532740a679350d2fcd6f59173c0df5883efce33243", "0d32f0fe40ea92d58ee8ce810e3f4c6f49f6f72dd085062c851835632bc09924"), ("270458ddf60c44b7405dcfe4e76b8901226cd037efab983e6d8069484ceac2f1", "2933b5c4082c4551c6d1ef57f3b782855ed2044c5dd884feae057b4533430d26", "0eef6181a4a843995a90b74598c24fc1c124250a433cf0fe51fd90d42c941509", "29494ea8ced4811ba20a17f638286a865b39430e066afd7911ca9fa03351a8aa"), ("13783608fec8c464ae0ef62cde8c2c4d9da7aaf263ec2394c312511288c5ddca", "0678d71dccd975c63348965ab81dd052ac2303c72c6cecba673686863afbce08", "1051e0d8e2159e5e72107cab8b4f92f358e60f6f9b4ae8195e4244992cf1c685", "26b76e56c8c10aeb0ec6f6b13337c5445db114e5e0c8ba0b6fdb3c87e8ee92b8"), ("1e8d2fc6cd130a2aff33291e5d0507ef20a21baa2c55ad84487faea5178a9a62", "2f7fd102ebd6d35af1db8db6260cbc21cc8c28dba15c8a3a5a2bc0e6008b0c7e", "0f94559cfe766a8543a8dc0e936df14b2637049b2ad836daebc7ff9f115784ea", "2b0d89c9638f842c2d4fca655e98fe1eadb420cecaa38ca3078a32c09f651990"), ("143051396266f6cee9b484bba38d96a356fda8dc719ad3ef814eda8567f64ec7", "066d8a825c6f99c0ac7ae2dda66d7eb48399d8b7b5e5e27cdfc27784d5280138", "0e3d3491012331ad7b5185c86eec8348e20af8a919aae4ab93a0ae4554ea684a", "0bf43f423697614f6f1e775e103c44909335837de2fc2654219e7db45daa1e29"), ("08b8f2653090fe4f49e478678fab69016ab0b6ccd540d3c724ed5a4be34e0495", "01846351193c92060725ee5498f54986f2ddda0533c4c31c65147891f9af15d9", "1683719f64c5a7c485a1f5ace391e148dcc17f22c690299a3f6ad007be9718bd", "07a1dce08c67590b2b31df3dbbe2313c0574bb833f24fc7c1b1a4b6a871f02e7"), ("03f0a3615e5720310dead1388b03542d71b65e37acd29d95d08c1a0923ab3e28", "2022414f9bab529e833786bef84ac91906b96a26e9b3b0029c824013119b2ea7", "118ef0283c9c96260f24eb7b7e03cb91ddc9660cf59ebff3d24c7dad2e65ac98", "1d10b417a39e16da4c5950f49d800ae2073a227ed3183d3385c38a1271aa81b7"), ("25bdfe143e9d9d202c2a644cadca716e18eb39b8daaad0179e3c68ef8734c239", "152044e130eed26adba9e31c55350ff5ee442f97305c75fee5267213b6e11951", "20a91edefe02654e8581eab99fb41afc3b5a7f9212395ad1902d22a790ada029", "2aecd6a55fa131173e2893e74c3bb37232c5166591be73108fee97facf8b590e"), ("22b61ef791b0209f24f43956f6601fd30b79ea216287229acbe57bf2086a35b4", "226030f3155d4f26f801413aa93c2e8f9ba68ff8d0a713eae75ce58d0cf95074", "13d61d0b06bc5350b50399d48994de2e13f77b2d5b3f05ef1ecd7dd97c06e8b8", "20f5d361fa40ad773f4c46b00c290f04a2a4f5db9fb9c6ba777643a47b8ae452"), ("210e805bdc0ee60c7d6a6be1d5ded666e8fbae24c7a55f861381d774019fef6c", "11eb5a2a4ba4ded73088efcc9d3c3e7bf1893a4d7ef9b855eb1547eddf30d47c", "0ba77e653c69e649c084f88f44866561b05ec8791efdb2104cab33750fafa3bb", "2aaa92ce160608552a6a43583dd8033b51a38dab3327cb959eda7a983eb81941"), ("2baf00fc80c3fc65b19620acf87d0e4efe13a72675479c0e33c4a6f560b60c3d", "0fa1596d680bb1ac990d6bcee36b3b073fdc3a7e6ecb3be396c80cc43e9cb6f3", "2243d986a1a683ec35ce4d090d81e6155de6f4aba1c96c7279d4f1eab15aebca", "0c9467192d7ce1c98813ca72ff78e22d35c6abe1fbb557730dbce2c6ad702107"), ("1d65f9f5679681b90927dad800fe262c159d017c6d8fa551473948b812f856ef", "09ec33d8a243301d27708d9dd4964f977cf789f3f86e50edf9d48e329ca103aa", "104692afccf4cf28e59eaa6946a34b2a812196e105cf38ea3d8651e26e5b1b54", "17b7f4c62f8bdfda24b39431e5b7c5331983b7c75662d1fff42f31ea39a7c1aa"), ("2bb0ad23520a3afa89503eb01a88da3a63066915533ccc8e9211c71b0aa1a493", "02e04f62a3840b0d56180ab1b9236d9f1acbefd4f873a79fea60b7304ae00a37", "2416587f0660a8543e187691aa1c4ba89af37519ed0e7a2d2d2628a65b05b118", "065ac89edebdb994e1e6be7c4c7f7a61c72dab916aaab36e19a36b7f534fdb43"), ("13c858ccf74de01c4c51f6c8cf4a69b1de4d54cca386a84c6044203c96ea3699", "18c174317c54b0892b890e01d8f6840b6adf1643c6871539840489a8e166ce22", "1d54635db55ff6d1277e256b63ef4184a524b44af0f5e7c6640629c5c007ba22", "08d76d67e3efa2f9acae216f29596aed85e2f2c8cc4ad88a410f1b3a8c33bb44"), ("09a6c31c270ab3f64d73b67ddaf1d8222b297834ef38580e32fdeb9dbd214a32", "0f2f255f276f9d86a9c1ff56102976fbf5bd6764207892292b7922c53eae1078", "1bcf4dcd6b7e868db66d261ad646abbaa99468f2929ee3f9e30ae48b6f484197", "11c45d5868f2ad11de162d3b57001db3ab1baa8defa956aa902ffdfbddad6c78"), ("04726706df8b374f29b94bf10304fa2fc88ed29ff42535ee04a0defaf7c51fb2", "270e623227bd6facffb81ae3f2a69e5b4d6fd4ada2a4e5a349d5e8a46a4651ea", "07d0dbf682b7ce8c94df5737f00bdffe8812da149c828b948125bd6f0f10f77b", "2d39059831bea68164599dd7530282888046b0fbaa886a63e5490130d2f263c8"), ("2a7c01e64ff33f006246f39f13a34a90d24918d773a818a92b265a224d91518a", "1cf1cd91e60d7ee6c72a9a0c862267fbd034c69df24bac30559b1a3adb4293dd", "1c98e10dcaa58dc29af04da47303dcc75aa400d8fd15b0a1fc31b4d696d88b6b", "2630dc6423f9381d161ae53d9226e19a8d6a73215c082280b01976c5f826618d"), ("1e4095d25e299de3e2dfb224dca99b2046b86c307520920196c7b2fdf0b73ce7", "1afa609f850372a905202b6e52ceee18927df3034a305727d7c57c2d602454f6", "1e055f79c73595d045befe1e8342932c69bd2bc84f62424d815dab307ed2feb6", "286aebe7ffb54d3565802184aa64d05bf6bb8fd352cd8b0691abe46d87c98625"), ("2b487e4f30a464e07a1508430684891b5d86b300d854fce5b7cb3a1536877cc6", "1b5ce6e3b996822f8b7985ef5e5ae16461839882315d107d561cf1a4b6e88df5", "00575f1ba8a0caa3cc1c6be4dcbc1a780afcd93d189fef8db00c484071fdfbee", "2ffa1b2061a7ed5ec14e19595f68dfbe2f5b83c1a2bfbb449838e06455046ec4"), ("02ccbc8d9c7fe4d3c2e5edbbebc575766648c363c012d0f26aea01a17c3e1d68", "0cbffd24ce2b3e9e20204b82ea731aba911cb0209fe1305a999b7bba91d87e1d", "2c3693a6950b3e74969e538a9592463fd16f5a1d9751dbd10a30508a487e3071", "274d67d91e21b3dd8c15a2278461294aeb4dcd312f76aaab11c402c6e7cf1582"), ("16e29f79745889043c6deb4ea146d3674148b05286453fd8f67d1cc69c8646c3", "11d3f767766e47c49129ff1a4cb298d28e6326116974206c26f381a208bf5650", "246b4a48d971178faa7610759b1bcba6339fa7df6253e6d2cd614783bfcb939f", "187f5f0feac8cf398644d60ac07dd9744183c6d566073ff635e2cc7c8262d54a"), ("11da82940c9fff94efb31df4771f04e39133963be5f600d7983ed760262c74b0", "1c5e06286d3a24d3323c201e39f9d6768fc35747adc6771b75e6b0777b540d6d", "08ecf7aeac792f096be2a4d1374e776cb209be2532e381cd7b557d6bebbc3dcb", "13ba45ebfadc1ee5b896077083a92c1a779124d40777eb3de177ebdca164b6d7"), ("2a3634c23c46fe2c010559db1a8af557f29cf3286286c752feb936e1e2ad10f9", "2570e5c15c01cabb49e6a3d5577f8beadca4201684674e4e9444047a69cffe89", "0388ea39e948e142f7c7cfbafa520601edd9c0c2fd1f559090df6186ac9c961c", "12f2905cd20903c7a089e6fb8c9f1c927f81e9dd7e7ac251f5088ab9669dd7c7"), ("2c8b2227e236ada52b51546d5286add6677d095a2b102ae9d92f20967af6bd3a", "07702e4e27d35e1e77b9322d2e2b0af8afd314567d7a0ac052360f5c0bb64ade", "0433214ba20fddd1780c54ae67c05c6307ae16434eb40da000806d93c21b43c7", "0edfdd43d24453a56131719abc73b4e72c5e691758b594c775f9f9066ffebe18"), ("03c7eaa7184cd37fac3630191a43e85279e962eee3aa61b41b53232a8e20a72d", "07ac0fb6a047c4dd67790863b705371d7eea8492e1ebd184159340d187f21a8b", "02c483a688e5924faa9fc733a10d8eebddfb0b0c2762f552e48d31c3f906e5e8", "15a5b5db5befe0407cef2e12782229bb96724ec4fb7675754e36f721500f73e0"), ("14ae6f046856bcf71c9c10a06f858b547168fd4e92d7c62520c729c301fad50a", "147388105db414fe5e61818a7e84095cf34e2fa186bac67976a9699bcf8539d2", "14f84e9d6b7c2d655daabbe36095ecb4b6f2334ae684101b7c88d9cc5b2d41d9", "09b2e603df43e1f1baa0022e940dad7ae4f0bb12925655fc96a50cad71a2f2cb"), ("1a49a4ad57cb2251e00427b45cf124955cc734191ec3a133ddbedad24d2970ee", "2ac1490ae699ab401031a553c58e324d35b2c8f055575bdaf9135e8370014784", "266df5ffc724fea957b5bc0d0e0720fbad178daef2b74b3069be03a840c7cc2a", "12d5298180e6e0ff87d2aced8bbe9b1a32b5ab4989260734770d17ee185a83d7"), ("15cf582137ad67c4ccb7f3dcf2635790b09f4990547626825bb716b8bd249f68", "00ccf1143109457cb3c4a50d405047917ee834d63a266f37bee75929872d9148", "2e3a0b0b9d1cbaa08664b11e0447b3a3dade38bf845562f473223a8053b2592e", "0bd5cef1a72e7798706b72b6ad997b1870cf1f1f670a50926a9f4e95fc8c4d22"), ("1aa53cf77b182682db356aceeb1bcd28798382e4a143a086f716eab154da7c65", "2adabd54ec005cc17d35c31b0b1e4a4187b1ecd7509d1346a1f7162cc08022bf", "22b42137ddc36e012d1d93f508549fa64ee9a31ad303cf963f8078c529c35d8c", "1f60464c02a1310eaa20ebb5501fd21748203afd615a2f3434d09abb2aa03c37"), ("1a23192da6d55daf0332def877bb9bf8528b13b9550e074f3cdf9dcd2a15b51e", "26793a5949b3e84bc2fd0e8cbc168e470bb38438f5ac1e08712ccbf25c29f72f", "0ecb59b6c396dfdc81625abb5af8ddb49c8228972183f7441e0f4eae2da09e64", "24f2877cfa445e140a3f13d9376ad0e22e35bd93d65e5f454635815fa9f878c7"), ("2213965cbfcdbc8f286620a3d3dca30f96e78c850d14322b8d09e02f20e11613", "19231c794d359042a2f7499fdc737397243520b983353ffff6b7b672e15075a9", "11ba1ae252256e8658ce33ff3edb629132810e8fba80e0a9647b837028b65f3a", "0aec54ef373098101c3b87aa1bf580812b11898199037792dcd4860e9014a8a4"), ("0dabdab259fb2dd2fcbc5c4182b3f9dc511cd0f2c9e6533338cd35b4c7691fb9", "2c559f66ca5b6547a96fd0cfb4dbea8f00f99de916f6bcb120ae4a42efe59101", "05acc5aa2128f183089f64a0d6084cada837dfb5f57eec48f05de5c4ac35f767", "2f5592a22e06721a6dad9f2f37986a455023c0aa9c98afed96ae2b6ddbac34eb"), ("10ec6d982ca7a917cca186104d14cc34fc989169c93f4d6d551fdde5f57c1b8e", "1d7c1b88bec692a436eacbcc5946b9c0cd553abda266e00d5c2a3abb07c5ce57", "2e6c54e7a1426439f082528260ea8caf02ee028fe4d864ce33f72e2d11883e15", "089e23735a2f63fac2a8c054a5e50d01aa1977f24e7adbd7aea06a29265cb585"), ("2eb87f50c3cd27d8521391c32a3bcb3eb417fb85051b29cad451a00fb49a79d2", "2a06c4778b70b39f29171708a75bf4e7d002aec72a28db31dd90e58df99d9521", "28c7a64ddf61ce054fd50c154333cdee99d81a4a46f3b42502f8145a4cf3efc5", "1e9023c73b7af7180a659eab3c44640225b4adeb7c682d3144f304c6fc28b0c8"), ("001445ac2f85222198ce09f7b6cf9ad75d0ee2bf0bb5c21cd766ae1e1cca2817", "2037dcb820b45b84a6384d4d49c50c75a2421126c88258a2723bb835c666599c", "21e4c3e87c02708baaa81677e97d20958436f4afbde022d698a9a04b28e7798e", "255c97e07854994761c781c97127e7d1aea82ccb17db3954063d346be9098c5e"), ("15836c7e7b9055eb42a8427faadff3faccd13fdc32ab0bb1c0dd50f0c61e5017", "1a76df5b1c366749bf8a5aca67d16713092096e866bd367a361f43a84814eebd", "2f2882c47af7320258e365c42ae4a86748c56cfbdd73ad721da03b24467b70cb", "23b3dcf508dc032ad206ef0bc28d495bbee73cc9cdf56fd6337b099436ab52d2"), ("01a90c8462453a04fdc61bed98da7c401cce32d10793bdf800af51133ea91b00", "2b7ae99a0e6341d073b2dd71bc62d427889c947e4837e085178c5233f161b00a", "0ddd9b8539ccb009ec9094e3ad1d2220b759e1b4a00b24d35e14791e7191d2e2", "180aa903b6b6ab183a54fd5839f4fcfeb739252fb1be41b36c9b83d95ebca20c"), ("13abf49ef9cb6c8a1c0785801756281572847ba682ce8a16036119cda73cd4f1", "205a044feb5d1fe1defcbb7a6a5af9ac1886a7d0d20960bf18465c301982706f", "263e8f9ee206f872c628ff606996d2e251fe67308dcfe51b23026762cacabae0", "1e972495bbb52bcce30074b3e91ab1162e086dc25c2806a2e2f8ed84252711a6"), ("00784e119be0e4f35852c41bea554ea73b39727c84c11ea14ca9fdb577a26e4f", "2fb18107adc6717b5c8c7d5dbeeb5d64eea1038178a73b3a3704b355584faab8", "0d44032da6def5580e18f27c11cd47068ee67a1e464ed546894764af56f273c2", "1c8c112201c3fecd3ccfd6db1759df0a94be821989b8db2d72b8528193d5f3a5"), ("2db024dab1687602d781c2147b3d4608a4247708ccb5f77b5c52378516d9d8ba", "10b2dfeaa002eb64cfe913da58a71796f3cace0fc3b6aa2738281488691e2f6f", "1016161518bbb6689b47c5cc3bd8dcadf3d11aa6aef0a82663a1366b9ca09e40", "1d7623868353d5c70c84b3a6632979fe1655de4684ed2e1463ad8ff4ea357040"), ("2347c318ca723f30236f05cf88b0bfb022266779c54f807df21225e14fa9ae94", "1125aa79d71357438618cc9af20f0495d9a4a544f13f3f032a149681d877ff93", "1b3799e878fa890854ac8d87d9ddee9af7200749cc9571194446fe9a2c48f3a3", "0d612f9204dac5f3405d3b60a759d8a6dff39ef2e98c2aec687d6d39a2d2218a"), ("0e02072156d7ef3271030452da489bd4eb84cd050da78558e2279fbda9e9b01c", "25536b4725cbd4df201d9751c962490a3506ef13dd77373285e03672fa496806", "20c14ac8d23efa92305257ad338a6dc8d3f001bc6b9f2f8de30166e52a95f900", "111170cbf94dfe2282b71ebecd195ad6702d42a0fff9d925458ab847dd3c4eb2"), ("21fd0dea36e7f5cca7ba5f43520ec762b080f12ab3421477ff97a22cc6f0e7ff", "117532693a59fd3e6ec666aa2a2edda7fd2ed50f2ac6f15d22b9d251094c7883", "2fadbe709deac331348ea44959f9e53c07b5e465168948a30ba777932fa60eda", "1175fc9aa355e109a787341d76a381ff04a72c7296fdd339d1ee5dadade179de"), ("1d2989975eb8a109a1bd1a55b6e0286281dc4d164bc7677f1810b1722eee916e", "22a9bbe2e65c1303f183db217603aa099053403b031179591409066ce3b5c159", "13ea6397e420817939740b805fbfe4d14c1ed762664b5ba364fb52456a12a915", "00d1562abf3313c78a7a8ca482e72ce6f5c95b4af1133ba32495661489ee8d29"), ("21f99c6fe9db75585a122991eeaa658095802015899ade7625dc07c61f8e53bb", "0aa40b8657031c22f9c40295eb807e510f5e566d4bc7fb9926b449dc22de0bb9", "24d159cb1b88aae58b87e28d5a49638167acd9d9424eced77cc0868cd2939012", "0126673ad37cf3c7259f1570bfa0bc01e8df0f7283be523ab6495ea21c3d2ed4"), ("0f29da2de41269429904f0a3336e77c9844b8733e98072957ade8db784f6853f", "0e8b1cdcfc803b8c363416b6f064e49dcd661eafc0e935286d186a1a7f70bb1e", "16d13d52c28d5015ca99452c8fa51d4a4ada835100d10b941da345c3eb02e536", "09b86b37863fc1a41849666afd06fc6dd893dcb2b4986cebd06150e749c70d82"), ("01b293be218600e5c908aa362d3741543e5124bde2fbc8c895bc4831012bb2fe", "2b7c99131f5dadcbe01a258ed315bc4978b9194aa5573b8cfaea05454a2079e4", "27f60d3e6a8a3f2ada1916d28aa32fda2dd835f550c76e8e70f725d7ed4e0386", "1d885d0f4d2a26bf14de2980393e8560dd578d447d6baa23b7416c425239f97c"), ("16269e1c6972a455e4a4064ecd8e4a0785ba5cdfff203570236309ebbae9a2d0", "08c64d19adcfa9152551d3be388e658fbb7444b1c58e9588bf91c69f568ae0d0", "26366de4b69d115747153230a3281aea68a9ab085d90feeeae540daf31aa5c34", "150822c6d722e6773dd6457e15bc3c4d364d1ba70aa94c06e5aae3dc0ca59086"), ("20510a9118e4ebc36b6f5427862c6c691ee66bb667a699c9d4d5b419765ede38", "237b971fe506367e33efe4f5420af1789e6373a9871b3971335b004e33de7ff6", "0f8696616b254d15b0099e2a9976d528237b6f552d55c2043a52af7cd9175b39", "2e6cff60a4ccaf455947e2fae9c79bc83249f4984c8bc01fad79d4dba30e2433"), ("2a88221cd80ab881164bc7daaf1d88ef92c3fb2afd85098b2b5b8da49901c28a", "235ec74b03b1b9b07060094be66475fd8bd660a5e9351fb9e7c9b4a2945470ee", "301dc952b042709ed10587e565ffd9f8f279f4f607a0712f8dd444579b5173e6", "1327bee10f8970f3a0160572d26d49f379cf7ec0a326aab2572ba779ad6ea882"), ("2bfb24e7a18a909f6fd50f28cca1cddf231e6222f299c6b1c15cb6cda0a2cca2", "1039760ce05c1f6fbc8248324ff8f347a5619f5fea0f1fcf0e669f1dcb4dfced", "2f780a13535561e874f7cc91b5826dc295aa91e3df08eac3d97e781eae15885a", "1a6ac2e9a1f1e05523fad9728aef5b903509596c931a21f8992fe490e90ed8dd"), ("0a7cb5ff783129adf15eb5e76c2d54c7de590bef38e502db03fd10b9699b6246", "197b8e0e89b3837d045b452edb6c0644eda36cb25b8a80aad30c7ec9d1c6e7c4", "0117dab648969cee067191b7cf048a744c04bce89b4da5d59c0d94d68054a1b0", "2a4e962e3da6ffc47a72aadf327365da76486edff9b771cccc1e1ff9ccd76cf4"), ("1cb8ec67904d04134ab117a5d65ab3b2189934313ce4ac60be16b1eaf94a844d", "253a8c200d72da90d00edf9450b38f1ab62f45b91e413dadab5f7b78284e6906", "296c263bd7dfba84dec77c55f4a85e1a3532c27e7b76c33155ce6c7051b61bc8", "28dd4a703db4df9fcafe8d8a9a9a449bbdfd57a5bc1366bf2265b307db2aac33"), ("1385004d476858a7e4b3e234f5220d011dcfde7336169c6a6089379f26629315", "2101657eff16eac6d85d2b18ba31b25dc38d648b07a662f7f20c528c9a9c37c8", "25c2b3b8e6d320824dc19e86652eaacc96a268264bed0521b602042c7957e47e", "13c4974d1bf14c4cf6720b913ad61389f7a0415fadb4ad77905b5c82b5a31c2d"), ("17d559c156ea2ee6f21e3333782e4ea1d513aa14a5010a3f98dc2c23022c3718", "01b6e2e8cc95671a6348eaa7bc344f53dda9dc92c03106245efec9204a2fcc83", "162ebfe41fc90da1fb1631e026ce05a6454aff89d69b87f0e6bc040ccfd7d7b6", "0c7d5bd9807f1540699eda4565cc1cc8e7ecd5054c9fe9b45193b7af16eedf97"), ("0feed03be34fd50b15de5f1e237a3c2ae8711211f486c7d1597fca4d9b57aa8f", "300c77f46f727b44a20beb0c9c0908e4eae5e122caa91f8ba2f6994017875d8a", "12e4b0b59539fe02926f35654e4c753cebe37a7894e0f95cf58b2eb00ec59887", "0b8f7f4e29c4629798ef1b7dfda12203991b6987041105cfe0fd972ad84fba09"), ("1d3e0ae37b6d731b5d86783d4a802e8edd575e7298325a1d0ed4c3b755949351", "1b95c7fb3d828f331a89721665d6097096fd5755c748210ac944ecea4f3e39d4", "286e01d0a9259461660c2dd643e558bb4ca4ffcdd7363ce676e8804b191e0590", "0fb85b87ff3ad617141a9531c4375ffa3ea6ceac77beb3728205dc7b0cb5c1e0"), ("0b9395a1d94f04c2ed7ba4dd1f0bb2e87990528480d811875f8d2cfb309b6482", "14a718258a6fa7874d1238b90709f59953f16f7dbcf81e744d1c6d27cdba320b", "04b5e6e99e76bd06f5655c5528a11e695eef69e96e564774116fdfbf5b73fe66", "0de3e56d41098268d1d559260f57e550204fbe8f001047c15a677c21ed2f29d2"), ("25922bb657467a0a921a98d7efbaf129c00377442e77e7e311ff4ff04797a9c3", "190b560190945ad49e9343148cdeb70f4f6462d4df6f837f8ca384e5c808f92f", "0d99aef98a1ba4294489624bbe3f3a6a91f4de8768c64955ff962b49dce69bc4", "08c99b937606573f3388c04405ceaa91eafe6e706e5607f9762484b6efb2a1d0"), ("1aa54d8e23626c0a80eeb0bc8f5701c0067c2af726452200ecab40c5242b944d", "00e28c7c3b323bf657cbf15064e438f71f289a6b22dd0c94f66b076a9516d787", "131db5acc45227d8bb4328297fe987679e469ee008ab0a2d563bdb9c1ebddc81", "0bd19457f1daa9dea5397b8020c9e49c9e3b7e8cda9deeff1a1b1fb66524a782"), ("009bc3e15a865318f232e3c6e15320b6c4b9e336bd97dcc2bdb4102398d39032", "20e628cc269dcaa531e1bd25decacc0a5c0b1e7c2d8e881c95c529d10f034e3f", "2d9d3ad66a7728a3493cfd26d5fe7b7ea5153e48a2b5b2a7550bcfe921e974d1", "06a3df883c8fe8a422f96e6e566bc1dd3f428a46d85620217805974129783d4d"), ("2cc8005354c3c62ae007cf0e767446ee060ab272f42fff7e33b6513e65afa6d5", "1fc58b6fadc0a6541f68bfc52f5549e95607a152b65559b067ab35ca04b9f74d", "26147e9dafde58ffa69e8c8097fb4fe22c98f8ac546f3bd39d36f9b0232a0427", "24b425334323cb3fb67f8f0e1c167599b66aba39ab3dc0a0f19f88766463594e"), ("2c14859afc1973502c258cee1ae4e6e693fe91604f00f10b4175cd7d9a43edf3", "2afb0b731d9e3863d668b4f4e49ffb57976fae759b82d314d5b41906a72f8416", "1b216b1eb30bcc7d029c17fdc8be0ad22a32d613906bd5c670e60c78b0fcfe9e", "17adcd3e6b7584f0c9c8fff6274135a67aeb9115346878879a67b3d5528ae5b9"), ("2dc291b9c893f79cae56d00f59356a1d7753d40a9d8c79419d3d64e71e624d01", "2a58595bf5abdbac75f1c7fedf8ad3567767a32d6ca10b18c3a25a065b865eac", "1f18d4ff011cfe7ca9c3b1a1e7c2578abfc60b872e99e590cd9029a01c9ca886", "03102fa4e3b864816ccc818810be1e573f32c2d286df220ddb62d656e80e3b48"), ("2f1c66fecdfc5af8b246dbc952250b84c75831448c056b7d9147ecd96ac3bedc", "2c1223446e514b85de6be14b7c196c59cc59584c8a5092b1b367915ec7537bf4", "115d5602387627b14b9688a270f7744859f01698e3c536f4b0b3392f00d7da9b", "26df91248a0a0a5461f545826354dd3b7f286410d8268337ae1b89a51f649f1d"), ("0aabf8c45f20932ffeaa2e116a685a611dc877b6e9e700a70e6a17e6da3bf649", "2d62eb62e6d5afb1e6da52d095adde28182d4e490d94043e2556321d11ae810f", "1cc272e86b8a4ad23605a74fe63f0cef519f769a3c2b4c68409ffd84bcfe8a84", "0609b9094747d6c2d3619348c3434396b21f3c902c08ed225d8efa50df4facf5"), ("29c0d11885a4a57d8e0b2591085f69ab2c95ab4c6255583f8e0d6cec799f0fcb", "135bb204a3aefc2cf2cd5511c0def655da8a76c93b59938306e1a3683d96e377", "04becc403f3034d6ad5da902f38fcd43dc0b7b04002efdd851c666bcd004313c", "0384ccd2a2a6184b82049b64a5171b35ed06fd9fd8a7980d3caa8dadd7a85c9d"), ("24be88d8eb838b0d4c0e2cf96729ed2f41154dfcc8720fd83810e71943c0cfea", "08a3f31b77347490cde13c4f2d58a6cfc2aa5806c2ab19a8792c82c859c77c71", "2c01cf95f1ca61995b04dd8ffb6476bf05f6b75ba0032afbc56fef82e418801b", "26891b01aa5cd309bac27c372e8fb18a8de1f17c228efbda6536bd0d3627480d"), ("05ce47e67a7b3975fa62fffafbf469df1374d95d9f222793a37ce0d24df618e1", "1cd3c026f7345b8fbdd0f6e110457f4fe723850a3a3c854308d6b0105ac08454", "29fc9a08818b206a914d17d995373d4618002f543c3782513aad2f1f47273708", "25ade47cdc7234d916d916ce07380eee7c1b3d0f4e7d0ece7f236eabafc3c761"), ("06cf9758c3b17e76267f0eb005757b66086ccc1bbadc6d1d67d28b57b019095f", "159e4fed19d2a80a5a79fefe3f8cb4a61457ac32a3889980487e3bf64f63e7be", "19eebc4f132646ea677c966a99f4d9907a0337b45b3d8df41c7b09d2cad0e9fd", "14c97a26a585ffaa15cf54400b1054e352dff04cf5553e60a93e5a504d453e2c"), ("1d93be6e755d926362606e38e3d2b5fac88350d4ebcf9713c6ace7fe0539630a", "289100bf6e51d7f168f7b92e9eda74cbd697a306cacfe8042d24949e9436d9d3", "2326cc2a6e00a47bdcdc485faa670a937642198cced74b3c5bfe68dd9d296cc6", "04ccb381405d58e2d26a3e97d941b3da7cb6047bcbf9739df89372bb3203721a"), ("0bbc8feadd2f0b99ffd721a12d4cb2fcc166d7f046eb62f3a4a579f5a3ea8380", "053f8af7d9935425837f281fb273c818eacbd20cba1db869ebbe493e0c6fc7a2", "04584fd79df109ddddece6d5cf20a81b588daa168ec347f74e05a721f17b56ed", "22fd36ed09f03e29d61bb19cc06da43aaa88ef6a2b7ce99908905c3ba9bf6295"), ("29746682cafb316d472c57ad990606685b8ad2cd47eb91436319931e80255845", "07f971509679b0ac861bbf8ed8b709a50aad566f1e8d3a634e4c00eb4f90499a", "16e78dab6853070932f8d714739ca5830e826c4a42ee68a3fafab742f5698077", "0c7b9adf35c7ebfd13e82691f5cd51f9f6b680b90c1e16597f50585c76f218f4"), ("13631a3c05fb8a3615501eb76b05318fb40f4d58205e6e6eaf81dfeab7262db5", "24336d2e6750d922525fd5c491261090481d5181b117c7a27a5395bf4e5bb143", "185412196bc90fc2eed8e71bb71633dea5c75cb5b36639bf4e17f48a6b10843a", "11b65e9d3ef2d36ddacbbd45b4a4bc3361c16a7d78bbd7b9281cb78146fa4e7d"), ("01774426b562b0ce9c1acc3b1a7b89fa13278c676807f120809ea27a34c3b097", "05ddcc7b6b8267b06f1a577ae569f7293d6ec5fbfe1575c27ef06a5b370876c4", "130e6337ddf457bc0dcdeb665e683f36f931c4cca7ccd5359a4bc5aa342ec472", "144373951e5aba0147fc9ee9fe0d0687b753cc0779e426f321a412dfaa2dfc89"), ("1f850c83cd8c59006f5ff06010527d9b454afdb48a762698dbb0b8a2d69af08d", "119b82c11cd0b66ee231d2dc44188a4b951cb087c912104dd460cc1d9ace3f80", "2674a01effc2ee8e08fb6b79a054081eb84b6cf8f625a2b70d0148148482484d", "283d26779d20c3f017ec73d3ba18f2562741366f8c212a44d518ea60843d6fe7"), ("1e69ad25e92a7c5ceb5e305532cc6d54d2d4b6871633564b9dc56d8c511873a8", "085f623036a76d341409f175c3c99bd16660f4b94110977deb26acf11763f74c", "163c6e686d248ed381999245106b47e038ea1eb21ea1c60474e498be2250cc35", "286d81a13018999096c1250c662c65816665e4a72afcf5b6747b2414badb9305"), ("15344398a16f9910fd99bd4c0f6e98c055d6ebcfc604b1a7b76c57da8c638daa", "21c09b5bf2cc0fe280234c9371e8a51d7e2a6e1a20bf220c6ecb2d316056375d", "2de96ce64eb3e422d6dfa358b71cb3ec2b24ceed46a3ed3ba3f1f5b889127c85", "0c6824dabeb642be37e6f0986844121edf28f501f03771cdd1e202543203dac3"), ("27e7ed56501d4aece60c01d4169bb378892fbb88768e0faef318764a609de4ae", "0532636c8f1869edaf484e94f2750938c153321299e09d1ffd659df99b2cf425", "0c82f0c23f3df59affa91cfde12d7d2e9e7656bfbacf88d9e3eade1785721d76", "05395eb5ddff4103c0bfc323cabc893fc7495852ba4c233bf76ef2e402662baa"), ("0346d8ccbbf9b47490df77588f7c9c6e76aa4a34a437a1975132508aba69931f", "2ac0387195726ac3459d3146a3677ffd9ea59dffe2b4b3eef0c08afa4768dd5a", "0b6c25426a516401d0ea7d68e61f099dd1499d43e683988068e2b5288bfdc452", "130a292bcc88a9ee4cee9086e9d1deef59e9cc0610833b9b8301e7b9d0b9e1c1"), ("0fc6c361b0554b825d03b740d3f98e28f3ab2e6e3db7a75a5c20d41191cc996d", "250ee583352bc0d8d9903f4e456668898f7637cf3fbbb16cc8156803e44d4120", "21cb594d52822a496702b1449470eca7d3a9152c76b25faa98e17f0ce041cfcd", "0fe1ede0ce3d1825a0f729cf36187438c4f9f126b50b44ebe8f9819809651778"), ("0ea29452a2a9a3c0cd727db17539ab27f29a4a9cd1e7eb8184f6f9bb0b648d9f", "1ceae02dee6b3262292dc49a35865f1dc0f81fe0dc6882cd3ee001ebf98be46a", "201929c606cde2875dc501d94617dae7dab56e3ac25052ff57ccdf275ff095a9", "2c62ca70642d7c6582d5815418589db3994ba7a3e0f94df1e86f3ea908336154"), ("08550820b8810026fcf33f872c326d28bc0227e2ca64f40a71d6f8a9c492bdc4", "02174736b2277491a22ffca9671ee66ea4a4c9870b44da321b0cbea4072c6c73", "25ceff98420d360c2d76ee16ae20ca5ca6677523f3576f9c0be2694b5218d692", "26f31fc219bc4cba2bdb396db731e8b5a7d999bc9a29d2bc1a2378fb9bc6e372"), ("0c7b2e30d39b7e258f3e422e1c8b5b4388b45fd6687eedeb3ebca656fa8b6448", "0ad6b8c32e4161b107ee5e7e1c5787dc7b6d08ea81337ac51496a967950a8c0d", "009ecfe79c20cf40ddf516d492550b3e9e60dd8cd7dfd8ca23730fe000926066", "2aa922549164a9598816c5e053504ba6d8ee010c35bd8ce8ea5a85382fb07ddf"), ("1529ee63221b42dedb2e0fd8616e3e8f3967cf4712b3e2838196f9ae542a4f65", "0eaf1973ffdb12a8e5aa185e045bb357c4daea5d9b2258a3bb3310e0d5cb3c62", "22029c9ac196df5a4c3fb5957f0ca437e872e9be1d2908c0737f3cbf9c5d6a20", "279893bd22d69e5d1f67ac42a4c11c6540ce434494c647164f21c0ec8b5ab5e6"), ("2e8941b54d2205861c48c6ea45ba47cda1b75738b05f3c31f3bd69c9f0f02eef", "18ed31a504c6a7b25572bff5d2a7e166e4d60bd051dc47de9c4440e3dfbcf0a3", "03dc26c3d1c86b5604b4cf9e0b3bbf1c6a0b6c6afa2d6b549f038de640b731d1", "2f21cfc88acb14438dec8f7e63fcd72baddf934dbc56214ea61da55b2589675c"), ("13be00e81ef385f907c69742c87f0949ee5dc1dd7b1ad9b4225ab3ba226a6ce1", "2da7f3579be2f25d94acb8c23d7c624c16d1d16db14919cfcfbaada2fcec4110", "0ce153e103a3855205af25165a7f5f6600c1ad4894af07a1e0e03d39464f44dc", "2514dbeebca50fc87d22cb501d9ea2cd5df937d09094553994ec7ef59e66c7ca"), ("148267499eec5cc00ed0960735752efa6675415dcee379fee235c3f1c1c600a7", "1edc7b3c5dd5c74cc080fa1417305f17e5b45b40c16bea443d381f1af6b9cf95", "1bd2f1af5814d9565b59a1d61745318cccee5779afca18ca9ccd725a14f05d84", "0e44d7d91e4f1f23f89356368c94956c737cf11178662e246680e218e435793a"), ("1db837750597797dcbebc901ab258c9d33b81cb532555fee5dc83970d4b5f595", "12b0267472a75d7672ef365a97f2b079a270641315402be17d385e58ee54abfc", "14500b74767823f9e54335d10030669a9468b82805ac27afdbfbd6e984cf302b", "10c82017f279bef6e4fbdf0caa41998d7b27e2ea6a7d42ed0a0f2bfca96a4a46"), ("254f5cd8a1c6d1f7e9ed07bd7ab77cd56f95b73a7adc2daffed19e78fd49dc0e", "20ef10a167b44d1df8a06d2a3103a17387833e3f3e9bf2a404ccac78a63a9e12", "04b678ed1a9a8ef8dbf115049336e1b6bb63c2fd8cce8025c091ff075e3aef62", "1ffcad7f5a409a87e5c45d099eed9290f13327b0bd65b5fb3fdf619c036c9b15"), ("0fe13d4f310ea441dd2a3d5d519aac7d83b2d306fed5027a246022b5dd73734a", "0ee28ccd72a600b2152982c660a05f512daa2a23aa5a08b12e22134a9a33a2d6", "24d610d85d28ec4dabeb7643863481668217ccbee655b7d8021ab0dcaea8f96a", "01791f5fa2602ddc546546a02adc3e97ff78b606ee2dc6a9f82441d6f9bf327a"), ("029e7880164f7d90a1aba3dc4f304a459351626c7e232a67400cc5dbedfafd05", "2989e95f1abb76aa7014dd1f7b22b02b995a277518c9079823d0148a7be3427d", "1901cdd55a19eec7e048fa69bc6f10b18a67430d4d51e12a74aec32801307b9a", "2d6532c0816cf9c7efeeb6ab1da10312e255d7083d4411d81367d8d45e72f27c"), ("1e0192cf07b50cfc38f70adae9899a3e1f174d7cf80f3ece527504a4e9ba5e2d", "284107f5779c2a3272bf2d459ff78be8ecfafeae5c81e1805902fc23e615febb", "06c8a8335b686cf10cb408d412092a83cbdab06a438f72f3bf2d8ac7c3eab046", "01b05e9ea85327ec68455c06c27e0d385299c6ec6ac3094f3467de91e5f27378"), ("107574193dc75258824fca752362a7b1e35a2bddfec08284f10d6053f15b3949", "0a3d365f2bc5f1c36a39bbab6fbfbe72f94e08db16be5e41478311bec6e4e696", "119e803e9857d267209122d434cf7d3d53d0074ee69d458eeed788e41d74302e", "0031bf363683c1274d3cc02633cdc264edf7c4e69f52afd5757824d7a08e62f0"), ("173e63f0e3b4086e95bf7bef9c865377bf59c1773b9e0ecd4696ee7f2eaadf69", "0b287488b111a46fc2cd91acf0eabe1b9fd3071623710eef9d2a75b66ebdc3c5", "2690d6536d3488d7a06bdac91e5e0533f3ac481be3de7fe00546dcfce3d294a8", "05cc56833c4d2f9fedd2d39c8d4e72a3d1c7275c1ceb36869ee8043228e57586"), ("2c76408814905e5abd6b07ea6abf94bc80fd6528c9d81473d8dfaf1869a7584d", "0b96ddcd783f0d34f06e510402414b24324d91fa7cfaaa4459d834f970831af8", "1b262f74f7331462122d90270abda218fc16b277e042735b6eb75bf9ef342f0e", "25dd365db19f6e91f24ccb758eba6f8a7f224b94116daa59001512a70bf70d35"), ("0fd1ce76817116b94ce05c1c54a6a48bacbf9ced6d7738e0a6fdcb51fecc14dd", "2883ec51fbba4764d6a70d8cdf1cd10977cd4b1611d75ed7fa7ca3be9bc6372d", "0bff18f63376d7dc6d3b80ebaba06bcf919f7d7bdf088f3e22e82b1cda83d1be", "2f5ed479a8c97edc5732ecdf610ddfa31761ad84e2f7ace69526e9a439849da9"), ("13f0e69f1185404bafc092ec9c4fbde51a36da6caae9500381f6380d7de84b72", "1e0555adfeee3de6607c70fb33d94ce4b42ee988cdc34676eeed3b05b001a6d2", "14eb9f350e9ddea7dd04370c8a5177e1618bed1e6adad221dbd524a8bd39b0d6", "21f44889e4219698f657f89050ceb6579b797a1595ce1753ae4297706673dec3"), ("22e48c155f58e08701d8556b64979f4dc31e706cec8713e884a20b95245a806c", "271dc00d17b380904b9d2a1c40203aeb1b028d4aa41f0e9102b458cfd6f67b5c", "0c4f70fc4307d4fe55e0ebbadd7606ca48dca641f4ee551d090585be7802cae8", "17c6f3d989cc43ef4e8d930bfd2d4bdb4b2f1a5c5a4b8107000a15724c250312"), ("00709cb6d8b2b04177abeea78c508ba2b23156afb0bb137ed63e423b0d318d8f", "08731208cf65e8002f979169e53d1072b8cd9491306c60ade7f0dc63deb815cb", "010b189369a18a258866045016b91bce0a210b4851c21db2965a296c59c99809", "22e14dd3518e17a18e4ca7618e1aed2afdf5cce3aaf47e2a4e01bb72fa8ee18a"), ("2470ae5898929a1fd6f1f7570c1a41669890d1ce5f1bdbf8a05272486d3fc600", "11a82ae162363aa459cadd922981a3acd8e7f7418f39adfca30328f7937dbe0c", "2a83c2caaa06cdbe4d65f0d1e273b41dfafc1ae22db16148c1813038fa6a3bf1", "0d9703261f0c57f63eaaf0feb1655b4b0aa0d230500a34b4718243e1192c143f"), ("1a87c0546ff13aba0cd8fdffbd68c289934e60e034c7ae7620687e39228a4876", "1c09cbae4ee43b81c5ff575e3e162b2849d80612acb425a20609de701401b8ea", "074486828381c3c03ce4cfcdc065358a4b6981fa88b48d85afcbf9eb8d206c67", "08ca22873ce5d0c52c1d3d6a2f40d75bebc68026c81be44f806c11e9beace47d"), ("04ee6c6408efdb061e33429feda6558a076b5cba4b8e32fa2863eefe0be072e6", "2e1b243e7653034cc4345efd8a89c9a168e110ef35b0c25ceb529ebbb2a116ca", "0c9322144d978d77a3911a264a837b9234ef35c008a60608e24326c22d4a8a0a", "1daa56066082d5277c05425cb949f69073683d91982e94524f9f6c00869a5213"), ("0aa7c47b6de08a7428f8b66407b0b130387f93d2f6029cbc58f15d01cdd71568", "13ba338b8907f9d1cc467755b7e9965ff876164aff8b191cb98f029f389d3bd6", "100f221bde9dd529b977bab41dabedf074316342c5155e137c7aca19093756e2", "0d8d15c41a8b1aa8163801dd4f979a9d079ab78eb7f9ff7caa61a00eaac73a4e"), ("19ebeaf8d6f34eeb1e6fa4d4342c0a3e4cde2df77f2bc06d5908c4376bfe89f3", "202b57a947e68a383d0f36369e7571a8dfdfce015d570b5fe62c924e86c489f9", "107894c58ea146481b7ef27ed32859d7d066e41ba2f4bea55d8bb1d1b025a336", "2d3f5ac413f8941e11f31644a022c957f26d3ae79d0c280e04565e00db425c21"), ("0bce3e578f7e2a4eb57b6e04ef19726aa279a920e7342a546fd6a50e71ec7176", "289cdc4186e251317369e77a06688169a78172162e8c3de89a3ee01577932450", "2e2a0db235bdada170f912ce15503c4cd389f5eb8c79c42e7b8268e662d2764a", "00919c1b004c19aa9ef8d2ca00560214891db0b3938fddc03dbed0f241266e8f"), ("11fc73aa5c2461d14425d0dca254657d4a5b841aae7371eada66defc663003cb", "27b3fd25228768361dce406e566093df1524da670a6de15337bf58f6b5fd8d51", "258feba6c049e0fff5ef9e92aa422736ce3d247260d412c000b44b8125024d7c", "108075f43a48b65cc48fb1f802d47e52a2c0e9904b71ed33b4757a0f17f7125b"), ("28eff2494032dc91a8a75f4854097f1d1023649d8a8357552f5c8585b416bd5a", "2ed28a1fb6c3b089a4d94f116060519cc810e674e4db3995a964cb34874f6fb8", "1d2df4a37adbfec0007ac31cb98769a7a782a1579dddf40fd87f4cab0e3315c6", "24d3e11c2bb16e75ba176c0d6a9f4d2d68db336fe055b732190b8a4116d28c12"), ("2c9da5db79c78837cb5e5424475dc5cd952e3d691c450229246ab5d958d136bd", "1cf8a96229d40d0e242901c619c4818ef3a310495663c506c69ec0ed23a88da7", "2bbda865f6cd40ee66dea824b3b5d91c85a2fa6fd6fb761fff822dfe9d529501", "074a3a34cd32dc23fb8c1aa03b6f1fa2693e3a5350e5f89449319738e93d6027"), ("1d76ed6c422e0ab5253ba9f09f783004fb65e086ebbddd619a0d98308026f514", "2230fb2445bab52ccac7ad36b6078a5ae7353f3bc37702a33c158fe9391e33a6", "242f59b77dfca67e7ca36b3207b52200a4f89775df4e56971a195e7c6b8b6554", "137d54aca3a53e2ec02bdc3dc5c16fd3239871c8ee2c829b385d3bae31f82ded"), ("1e92a6a5fee1dc2408bb90b9d0f31d173be56fdb47b0b04fbb187396d2daca3f", "16611716bdbed5c2277f68f3121a9e558eb89b90b50a832874896e2ce2a82a8c", "24782ac05e94ae84923bc4dad21140fe99278a43df05c9ddefa0de5883cb040e", "0a0a6f3b86b335f796b9182a3f831d72c50e800ed3c48559b877f8b5646bfb81"), ("03f4a915f0507438eb9d17e48c185bbec4e532b3bf25bff683eaafcce5e6e2c1", "0ba97997d7ac50a174ed37f34c1c9b1cdc363730162ac5c996240fcea6f1dacd", "186ff03ee3f3e94ebb56d910d6638e1970b3db5269c8ae5c557e7a2ca7a835f6", "11094bb154a681e787f84f411085e31a73e4e29891877689855c7ddcada0883b"), ("151a8695505def82411a85905fc6a29a696675d921bf057180eb9738294a4009", "15e3d77f24ffb0ff0eaf041683b7cf30b7e05d56a392eb74da7eb2ee792cc199", "2708a28522d812dd437739745d5e147766ce5dc18f1947b5b1047342c5672d5b", "276e908cfba446fce65a7889bdc59493ae6bd40adaa522d88b5b7d690622d459"), ("14cad5cb3842680cabe2d443f6c1e42f82ec2e58220372b20fec5289de57c16b", "12611d7cf327ae7ed0b29928cc90140b8cfde90676197225e62046c3d5c5100d", "0c3171c65c0ab82b04532c0524c5c71d20c2b692d9a26018a1a68027cb452b7f", "1b585f69b26c770e1970528ecc084481b3d13dda542426a71b756594a7ccf4a7"), ("098b19dc8d77f448a65c28728cda591d91bfce1523262892be1e52a399445d0a", "0002018d2fdc4926140275f183e470d3204172878e095c7d65d52bef31bd62c5", "2107a4567e1f0ff940ab62fbf69c07b77645a9e3ad14dd6232d479cf82e561e2", "2626bf2675aed1fad4e1948a8cf375b3e0846c70b46d8c63bf35e399e5b7b631"), ("13e544b168de08dcb4370ff88c68c9bd229047e5f04669bc691a00b7b215b143", "153e769d45c790a1b04d4959b273e85c3446077029cff166f0ed12f1eaaf5ba6", "02fcaba092de8dc05be4a564407b353c82a8a5e28266f2e02b395f796574355e", "11a7e31b36ca40968445398359245af0ad76b93cb986e643e602ca33ebfd8eae"), ("25267df42006801d404dd4b017cb8578da0f271eb80c3da95946186e2063850c", "0707319138f379015aab512f44ee139fd9c2bd658a5d537ed753ce92ecfa4b6d", "085ef87a967299f63da096a10ea6f16bd59c78cbd022ca34ef1c4e19435a1bb3", "0d742790fdb911a148ecddf5415ec8a9dd9f1b2c36b7285de24aac9d07e9ba4c"), ("07138dcee6f5d968122f43cbd5c0bf554abaf9e25903e319c378e9384000d9cc", "14f0f79473c0051d1e86690debb890f76c586adbb518b0af9ae8fdce9d490ca6", "1de245bfbd195745797e731189552784f34c5ab0d2f66120e3d51e85aba68928", "0d8671fc96f789a79d1aa2f4144eb32cd235e315abc884f1c883f4ccb7d4824d"), ("259dccf776a03e1a5149e07d5f509c6e31683a042628cf846b85830baee1eff6", "266c33b5b097f1ddccd7537235d097af04f7bb60fa597be85aa1fb9e98fa07a6", "2c506b1643de57bbf2e33ac181c8a8d8be4d59f58467d20f93ead7e3413e0ec9", "198933d70373ce29898f5c46be22f796872b624c913eb368a513ea72d8a9a594"), ("1fff12d30fd075cf2d11983d7518ac465509a686e32c23692f2b6d67d90f2409", "27222d8660d9602281d267e46737a95e4f6edc2dee672cc1296d12f4b65e38e1", "1c904cdc516914099850fd9dd046e0e61b8b4f8f97aa77e560449c35decf8508", "284a3b94e3d087b43bfe2cc8e8f306ba3a3bed5cd3a4c9f98620220929e77a22"), ("2e8cb6db41e41ca475c1b9911c046b574f4a5770b041d59e2c418a403e7127fa", "24a4be72bcd44a9b933fb6071c733c1e7c276a2cf36293a017ffe43a289723be", "1555e5860dd6be54ca8044030b7d209362b3c4ce11e74e7d8693c8fa7b2f47d6", "2e5eb356c6a2256ff0e7a64730a093715851c46d29cc3230e032dbc26802cebc"), ("049d2ad733e99f8928cd4d19cf7c019956b359de45093c522590b50ced7f592f", "102a737b85df93286fdc298e490386ae100c0cb0251f4822ad8e87649428ce46", "13d5dc80fe1d85063d01319312ece1ac5e5fb480d08fd21056143ea67971c397", "2a4e354a84a48650c87382f49458ffcf7ef4c6b252d27abb2f16048b40175592"), ("25e51ca7188d4046aa80164064e22cb2b8ba6029f66a1d9de4c012c10d94d3d9", "24f0ad9a864183a3189ccf2ff65c23281d21fa545979a3a5dd9762101bd1ec57", "17ed05cdf86d06109c104fbf3de20afb7e58f87b97e2c14e2ea8ba4b32e138df", "00644d18263dfaafa3eb5153b298e42c5c23aca4f0aab8aa2b775ec643a236eb"), ("054ad9e634644b31e709847880a42892974f4acf28cf084b3e298761fb16060e", "1a42e40a78aef2faddfd77f25f1bc8d734c87679ddff412dba845767c286c60c", "1425ff9c1f2a73627f19d9f29eb1f97196c30fac95ff32655899718c460294d9", "06dc657f239f92665f654e59d7c29373d1e031c4cbef469ad11460cab5193d98"), ("2319ebe9ccf6086ad13b5ef9e82da0d2c9cec8ec0f6a0e8c132e8be05c74683f", "197f3023153b6848a1c032b476af28174b13ac73e7da721aa1c703e7e793552b", "0ea1ce76accfd926215b0e8ff160d94661f7911a7b7e61ee835cead7c5fb3d29", "01eadf165b4f8a42115f2dd27362ae7c42fc7b30672c0be550ad9d315b4f472b"), ("0dc10aa837043b1d8d807ab53ddb0ec8968e190d1aa9519590352d2a2e9b86dd", "04584e7fddf31017f54e131a81ff64eaafa2f814bb2273e981e296bb7025c8de", "279752f92a46f646b6e11e85547333ef6eef5598a6d24f9a480ab504db1652aa", "18ab7040f864e751695ba8459719f4f2b21efc9ac5cdafb4e588033b4034eaa1"), ("2011d8a1b124216e69799330e6bb95dd261c0e9b0bf8210ffdd0982ab3e1f961", "25fae98b11d88a9ac437f3068b3613f00b72849dcfd7e93ac41c0a4e6dc8a495", "2df6117a68c13367662244b6f0eac3109ce75d9cda032451e43026438ca80d52", "01ba3a1c5a1809ce293596f639a64944dab526e01b52028966c99f31f35e8249"), ("247a3954cf2e8820adcc3d8eb0d551d4a7db03433d2aeb6a0b7f9bc4da93a39a", "08c78189bed05016e8d6ca8c51b77ef018222bf8597b3e5cfe1c1fe222b15f6a", "13b3f945ef05642aee4aa189c292d8a1918e7dc44f5161cc50c35d38402caf6a", "09abdbbbcbf06ebedaa95b3668a104f1c99dc5ec48d162742de96eac23b6b042"), ("28cfc29f4679249a3629c6860d5a337a30637cd7e44d1432c36cd61e6184a658", "233fc63d141c1b241d99457becc1d3ad042cd05374c727f927922fb05aa16bf6", "1fcd871d950a4d52f470a41de7052abe6888a967fe724c458aa0b734fd44592a", "1639d397652ed2d040bc0e2d0988155ed606d1fb22d2855c865f64a5d9fe38ea"), ("2cc1a70dbb38f7c1dc7d5ada913d841dad8331bf56e9d7e7f0c2b178e71d381a", "046f2cdd2ad1d2540902445febf4fa6de948af23478c74d12993b8f8be4e3683", "1b6990baf7f9463d5d2c4f558991cb36866bd2b66f54d26bb16631a4bc531f30", "0457e8e473cfaa6632726e7cb4f9ee7bd2fe9a2692f6b42c53946ae931883c7b"), ("004d6dc5c17e77e86b039be3cb74f021acc19f6b909c72816320eb467ef54cd5", "292b9c8b18254c2ac7e0105714dba4aa79d7e556412bb9f4773e1af0a3344673", "0e64cfed120d181927c37d0c1d2733596d4725db004bac9fee83e5d8241e3403", "171306c429bdc0510898c5e1caf0efafc40f46743d896c1c6a184b52a06fdab8"), ("04dd051811adc17554254775d9a13962c124ef4f2616610c8f5d6487cf9ea48f", "20a57915246029f8b5801debf2d5e222b3d48156efc3585bad3f0729abec21a7", "0be087d3030019be767f1eac65878d9ac989c335879ca765454f37ca37d210c9", "038416546709879d5fce92bd2a8cc80741c99dda47e9d98b9ed40152e8efd225"), ("0d22e17e5cfb5237004565ea4fc22e83f65f468d53f8ba2ffe80efd93e23c2b3", "135e82339ba25a77a35573e3bd9467a7d7e3a5952bd2b9c757f48b5ff8e030b3", "036994a038489ce782d0fe4517a0527fd198632f6fd38f215691f0f69831ce3d", "085b68d8ed09f1bc12b5cf20e105f99d1021ea446eb3f276c64b5766c9007b86"), ("09003d1ea566164007d1ef3d159cb8f5f500fdc912c4b838c2d46fc62c80333b", "2b835702f372bff7f24f2bc1d538fe11b3c0fc1bcb741d0d780b020ff3d56208", "04e2260047ce100e1e08d730caa880424c7a5487c08185f942dd4b1174cb0729", "01701294933ecae87f55e58f7533a6daa409edbe4b8c69457cf1d930ec795411"), ("212ea49ebce2e8975252f09cb3320266e44238546273556e823ec9738c4a7d42", "18c5491790146c092925fadfbb0df0b9113c29b5afe8d55126826fc0b592db82", "1751ed4ce0974169b0304182add81f0d5d6658f67ee789c8df5e61990e997cf8", "1333daaf4ef197d58fdc1deace53026d7c80dda0d18d4e68d553992b5c2b0fe3"), ("2d3c532b28806ca29d0810eb315bd3d7dc8f943f2d1aded293e254442afb7e29", "13e8a6eec7584ee73bb6bf7650711a9fca20fe65e4622c6f8aed929f3ad9f4ce", "11930bfc5dde82572a7d7f9046a2333f04221a14da01ae1ab96bc21369db52cd", "2eaf47cb849191b659229ed14bf5a11878d8ae3d8b57a3385876eb38580a1fb7"), ("0e290d743566d7c590d82430fd338a3244d88254e9b07438add9088c1342cbc9", "00f0246a13afcd0b2b23ee9c6afdb5551d5dbe4ef9a1339093f11ab17133d348", "0e37e8eda6c2f36adfc9ae882a9dca73e11768762e2eef9e1d58822f5627034b", "0eee040961f73c272dfea8ed71c2b4cffb8df60d17f2622f2aa246a3865f19d4"), ("033e58bd5ae437968d45dc76e24d0a9380fc4ce3c38e73116439717349c06126", "2fdf7f6fda689c30de696ded1ccafbc26d587c0d0f9e84c40fb4fab62a57cc57", "18341d3f1d445907c6363ff091b2c1712103b3791b40e34e389d28bf2b41af68", "0a9779d2264bb78d4ce5f4cf4f7856851de0f0a8548de49de16aa1ccab4506e4"), ("22157984799dfa5655eadb2c21171e3d7d9b4512cdad0096577a26855ed93ed2", "0d0962b69ca6245420ab989ece51847665c3ba8fde9e4ab700ecf0f9a418c7e5", "199151a0ba70572d453721858977d45014788b0a7b554d74da601a1e96b026cb", "08c59d54f85f9b2caeec48d29d3bdc54cf5979cc027ed8ace121d5713a8a1c4e"), ("28f61a72159dde47d135679ad360e72525582946d7b04ee68e367a5139b1262b", "2131bf5ee571b817c072745f6e6e77f09da9f34776b4ae3f437159c021519ee9", "1ec3a6dc632e3105d7d9ab88a45f2a43e7661123b3cbd448b43ea844a498ced7", "0542bfe8a410eb93dd8a47376a1c656deb676fd3002021194d0fbe3ea6c07619"), ("28e4decb0c69204bd4bf0992f550329e51b437aca1ecdd07d98a223204a4186a", "0f51ef35c50d72ea2ffd883c06cd0f29166787f2970b9a0e6f93993e208e9b1f", "14efa23ad0530a22ac6dd9b69bd8e8482a6dcb0d605607e699aa04ef19fb1c67", "26aee75547e799ff0874477f4954080496ca762cb0579d03552faf187f740b5b"), ("1793224a8cd097f20fd8bc76a1d922645393d18b7840b6a6e8fbaff3dd631264", "1e389d6d98386b42aa92c6c9246d0c379a43566f9fe84879d5f35b3ef9de9b56", "20dbc4a0c3e3a8861a258c6928349ff40f79484b33dbc682cd16edb0874eea37", "0cd9f59a44c4d8070e2f1c9e67e1a0c684f26cd50cfbbfef918e881cd91f7b70"), ("1581c095b89bc906d17bdf83338c0fce8870571a86bf9b0afaece5db7dc6addf", "26692215896f63310cb275f2a5e3d23310b3fe33bb0f591d95a7c5ecff76868c", "2862efdc510c8d75d3faa53a48472c0fa91d7f6f8607d9aa73c83a6b792760ba", "1a7c5ea21e0422ddcc76651fede941684ee1771847ef99138372b98b1d6739c2"), ("0806e6612d54783248751dc80b1a7b5971fe2390208cd370f42a1dcd3b606ce0", "0ad4ddb4775471b187dba27f84b8d29a56fd7d56892f27bdec9384be988d29ed", "2ddbba2377a29f2dc405b4e5baee428aa114bcce73050079680247d278439392", "1a0dea2937f109f7df8553fd72d1e67bbec9e0db0adbba1c37fb13ecc6de1970"), ("0acda7c4de84c272f7b738491a9ac9631813931dddb61bcf365328e2537d5a7e", "06aafb8ef5ee754130d9125a5554f992d7c2b8f88f392f6d06e62baae09a8465", "26b04ac3644197797b73414c720f3618c47c328207465af1c4417f8b6d03c0e4", "137c6a4225908a00638ab6616a8e7fa79e016a5584b41c3ba38b1d1df051adea"), ("2f4dbe42735bb01597681b1776c38f7547ffd5a14b48845337c5e41c1a89576a", "27f09d942b277dcf576539bdab94268b2c28fe7a12432bbe2b87577202cfc07c", "21180167e22f9a87af0fb68a7d7e88317f8d56bcc83d3446d9b32b5133fb4203", "001fa3cbf0374d107e40a2ec130ac49396365bdbbd337f5f9dca32c95b8dd782"), ("0cbe710572c9eb733872bab1dce75eb515acb0fbcd64c68068a3ee17b095d5f3", "23db9e38c71c0a730ab12a2f2e861287b0a494653bbdfbeeed8ccaf02c8a274d", "27ab94f9389109a40df5628def82446e7e182f7ae8a34c0a429bc630a0117d1c", "0e8c1608fc9eafb2e334b4134cb12d499446605e05dc88f6e76f7803ed3981ec"), ("127e35070f8ae12ea482ecf79205a12dc3d262b3db602cec2dd57d5f64fff0d1", "250c02db60507e19c5925911092ff26cbdfc5a61f1cfa1c601e4692364d90899", "15a07676881b20dea8d46d2006c6cd256b6c4c180c474f671cb4574bc199e31e", "178685d9ee5164861658cb1052ef409032a6b28044c18d72850e3c519644bc57"), ("1feafd6bf9e432d5471fba86da93a1a5dfdaf6fad974bc9886414e885bb44ae3", "030952fcc32203c463af510e06808607c1bafa256c037f56896fce52ec8156b2", "14b70ef4aa4497b04f2568b3b138ae2d469daf538ebb75b3c3c7928bb432366a", "2df457c5a223cb57750dabb149de7cabc1ff763ee900b038fa37c75712340393"), ("2e25deb0caa96152514b17d6fa9b9db3556cea5d78df05201e21a069ce293000", "0b26aa401a0cb2a2d628f3bd97bff2f206bfb0f60e4d5c4e4d67928ea56b7eb7", "2eb256064d4111d616405b51bb9b48d59316119674616d6f79345a23bfdc290c", "0a7e71df4ec63500258f4a8a7fb9d6753c3f0b795d16d8d06e206216c6d86cba"), ("24700301afd6d98720effd73c833ff9ad77d4f1eb5824ba326974d7ae6ed1c18", "0d64164df595d82259ccd6d49e42601e04d9346dfee09b897f01db23374bce25", "2e79d3aa4f0b0f9c3c8feae88e0e933a7b0d6dcfb50bef9a7aed725b16563a20", "1b9051fb3667bc248a1086a5ae79c93ab7726fd301bd9f4ed9e388bf9615b387"), ("06fef834c79de1c9ba977f889395fc1cbd9213c4a911f386f163f49855060bc5", "100912eb1cab94fdc606e1f59d3422cf12b61487258334242798671006efc86c", "1af201a7c1d5aa9c0d568ac1d8913d1a6526209c51a12f0af0c7efc688394e28", "0b9a0b200d213ddefba8fd2bafac277cf22e2331350c77e7e06739fdc85dc12e"), ("25e4aad62e382f66e2a558720ff6de6347814ec461fab7b448b20b80db4bf4cf", "1b80f076bab845aec2d71dce261bf09dbffcb3327aba9d0a73aa23534f2dfc6c", "00dc4f795e6d65dfc5c6d9b26cafa3defc4e6c2c5d2290fc7b49c71c2203c95c", "1e14eec00477bd891f45b3730327556bf396a86dcc61047129b6446457b83687"), ("04889a8bf7d493113e971032daa5a440faaefee56af4bed97b49ca6f0ecf6cd5", "24b691ca8bb2da4345073fbedb385e3c675b43825368a1d61f79f37acc7a4dee", "2cf9e6aef869bbb92460197c102749c5873c3600fa61ebaa24e7cde6b1895239", "1fc76bf5056d0b8cff002558c7c49081d2f8a848967b26d8331df1adeb471383"), ("2e3eddf9827df39f2f606005709f086d88ef2d2443da924aa165e19b3986fcbc", "1245a42c50f34c9753791462861dda9862718436ba1fc5ab2fb3ead9a7db3929", "1faf5bed38f8e020e697ff5aed01b16fc390e38aab9fe1238534d840da40ced9", "2cca9a0e80fb468306b30e150db30899281669715bd50598bd06d2818db08928"), ("06fda1c61a03232c41a31ccd60246832df1e177009fed38e87f36080fda137c8", "1ca5fcdf1773f05399fd787b0983e584238a427dd5fa09965759807bec3f9e94", "2615c67b759c37cce28ca6a7b5812e7b99270a89e318446c74ba74355f09de5a", "25a059a398045307b220132ad52eb010707846374435df70a3dfa9fb8cfef4e1"), ("04169c791882d5c9b0559c45f82f8271807e7736eeb68c62845ee26dced37ea7", "085ccda1bccd2dca93f4457c1d18c8fad5855c0bdaa02c1ba4c26c6fa5c0b994", "2d48a93ebdbd58a20b2e6a31393d2dede157ba7e89dfb92f74435fbb0705947f", "1e1dd85fcb1e0d11d58ca0882991232921816ccdcd9ebed26172608188cc0c6c"), ("24aba5fc08415485df8a405d55ea7aae371b395e4cd457cc6df991304542928e", "22b586743c94f43bf6b0b04b54d05862f60dacb8d74437eed5579d10b82d22bd", "25c81688c03b13bb886656e8f4cb7fb5dde2a55d5ce7898cf61bc47c90302700", "25998f7157978e05c9004f1483881f686b0cf84a300234c1c66d2e15f60d6fee"), ("27be12221a78f63c2be9c432495831c5a505566f23aeb5f2d383e32364aeb983", "031f2b0c84afa5a48ca7a4f541ca2ad5ef9c17eea3321ce1409196ee250ae8b9", "0a1ffecfbdabb7f0ec76af7c36cfdcd0775865553da1e45781b4ddfcd26e506e", "1c57b4de56873bd853709c73fb5329b11fd40e2e022a54e3ab6923c1590703e0"), ("305191a29dfba6081959af7b4c1defe583b85fcba381a5506eb34d9abe9b9856", "0ca050e0b7db68e962cd09c68b0825b4b9aa71eeea206f8694989425441159ac", "0400880dc54ada3db65fe5c412eccbefa455dd2192088909df336d59e1cb9f3b", "0a502c7099dad7ce640a80ea75dab9a7c3d4cfb09cb3dc63c768e5da4765da16"), ("1805e8bd17ec7358eaf8ca97992d51fb7c2a1c53b150fdea9bc7fedc169670c6", "10199a9f6878f9daa4f16aa4f0dcadb394933c1ddbd0abd147da4462b6b57527", "15d702f7694039d70954caf29a8849895ae05e15ed881d46e02ae365ea12eea2", "20bb172a851553cdb2072b39c4fae7312e7a4724e2848545387e614af05a41b6"), ("0068706b1874a2e3525c70170e790a55d5da5705445119c6ae61975ec0ce4232", "24c98d659db2322410d6c5feccdaf5f6d4f0240142397ce8e335e40b8304d3c8", "2091902ae00dc5e23ab4960161b788f1c21482cd7cbcdb096d9172f4cd11dd41", "2b9dd4e36ce0f14a41919d58284c3c960766ff86fd805fef71f24082344f3ba4"), ("0c1870b3c558159a6aa3581c968134d3b692d9be522b9bb584de83de7f281de4", "2551f19b0774f0f936f61f9da183da97d81b21ae106a2a3d67996eaf2f8ba992", "0e7d0b8cd135d8a2ee771204b0c5482f406e02bcb9eead391839bfc3b38202e8", "0dc2f537bb6f41d7b72a977c54da1d250ca2a8ba281960573dfdb6dd7b045787"), ("228f5b80619e39c375ab7d0946388c64d52b653f6b8c715055224a73dbfa31f9", "2d619316cd50b48f5679bae3677c9250bfd856c2572cc29b93fb93237df379ee", "2f6114288b437ddd35a80f488bf658ad205cc440180fd9f404fde3514e4aba2b", "15b84565325b41775cfa03d2ad9a3b7e17f99e3ad38fb0b44e408b19d6b35985"), ("02e59db79854a1b3be4038bbbd5ca78aa8223ce5fd5493c03b386a34b439b26c", "08b262f2c5a226cc1bc95b86cc7e56e864acaf851756b2f441911b34af95c46e", "0472e5186d7a60c339951816981561634e05afd27d908e4014f72b17ce304665", "11a7098f25418c12e85a4d584d53c0c7ec41e3a849e4b2baa98cc9e2a4481bc5"), ("0d496fab52fe005d0a8d07e24daf2c73db6f9e9c41c4f9890093b9c20e06246c", "0ab4fe7587d1b23dc5f2fd353362ef4d276d00c84c4078be552c619ecaacdd9f", "2ee3e6b1313c00009cc76c135dedf68e8684b7f227035f0351ab508aba7a9e5e", "1fa2030ecb370ba68b9e26ad1ec6e73b3f9ac636e382859f5a531a779fe97a61"), ("132124ff051edef51ac5bac8630c15bcf7ff17e942987f4e3cbcf71bdc32bd3c", "276df0de5af0ca19ffbe501f60fcf25ac1579c2b8f91e6913db98e566bd54ea9", "10df13651f497f2f0e3de84c6c7afc6fd8a00936456555a5a4942640d86e05d5", "031e8e53393c8bcebcd2aa4d99beeea3886a6ce6b491efd2ba265953c17aa3d2"), ("1b2d2f1bd8993714b672322f7e8fee3698d4270bec7c5d54d2f40c9690d03bc6", "2bd33a52256c47131481496968df2eee3774134b22c91c0ef170ec90b22685d3", "121a847d8be5db067540987f65175b23a5d5539a6b1c3f4867b718d24dfac2d4", "035d678da7758776f31d96667c9d74c266ba82dde421318661de4309af6e3043"), ("0d0ea737b0cd4806d3f8f1148a7df27443d453465a30f1468c4569bc4e048e7b", "0b9ef9e660a177293202763ec115daae5ba4fb5a928453a388593537abf1aa17", "09ed9dffe5c605e7a006d09462e571b34587a01f540a8fe8a4cefb519d72610b", "073d09242174196d1c87817cf67af1f9e468eccc1e2f7df5dd75cc135fbcf139"), ("05be2b3a2f024925ef94c4a6a3471fd6d23876e77b0a7ef882489c2ff1e7c7e0", "2dec184cac27a43a5c6fc1cbf4a11deef94efbdad077e288bdf7587cd3c17016", "0f57be1f52a5133e9cd146d3f4cc5f438fd53f06acb04104398bbca9514b59b0", "28f76becac6d24caf32f8a11332299505fc384992c33e37fbac14b8d7b3eb6b3"), ("115c3d647b4477537ddaf2f34a06dc683aff811722bc5dee77bdf4cfa03efafc", "2e9a197205c5cb2f1443afc698de23a044b51c6ebafa0ed26f797dad4a79ed47", "2ef1392053c2db11a34d85e4d1cbf01635a57c5fbb739bc5260ed89309b6a3b3", "2a1067e6cbe4d66cae5aec5b8a26c1944cc404124eab2bcea6aff2786827bdee"), ("2ee335bed9f4bd9b9d3f22704ab6d2c243570e96e819028a5e6384c32dd4e333", "1ddda5077479b14189801e5aa323502cb2e1496dc0f53a8094f5748f2b588581", "1a9b1fc1ac6c1e6cf12d3e25ed3016a4f751c068b8539908011e6f6a421445ec", "0c0fade159dced3fb4169184a39137e146b4fb94e6220eb13524ac3021e1c052"), ("03bb48fff78d9a452c26360ee14f78d102b3ac182ccee29f4f91cbb893536757", "2a70c2b6c34c4275b66e28167f31b179dfec2c3bdab3642ae678d492132fb6c7", "01a8f17e0ae89b0fa64494947cebdf4448847c9b0bd235cdab0c63b78722e2c0", "16901010bfa29b622617127a4c18c97c8f37e46072bc3e67e606a9b52c8c78c6"), ("0e6d4e894f55e5c03a8a0268806510344fdecd9e38aede840d4e05d87cb5c789", "0cccb8e644e7bc622b02ceab18095f05ac444fa3606e6d0aea23b0c064c6667d", "1eaae1e2f9884b878675f447e2c3c9f1eb7de81ecfe926da71dfea323935d60a", "088b02e21d003bee75a624de685f6521c3e2495f9326a772fbab5ef16ff14290"), ("04b15c7294917a2d2e352c265d733ebd9020ab84ff6a7b54e215c0f237289e25", "2f15ef98a12ea3ac3aacfdc5edefa63553b911183b5b060da0f533e00261d019", "0e2fd4285e6c599d07961071def1f095226c1209ca3a1c2d28523af7208503b5", "280c9ac20577d989cdd98d8111a0f5015335a4ee1db2fca460c3c7b4d136fd3d"), ("1094e366312a69559eaa194c20968a777327f721fa945883496973ea76b766f9", "24b91bf3edb1f36212fde806ce3828ac7812f1b12fdff11c6098096b89d87560", "12e9f58c366e8f32b09cea2116176b0829ce8536d5d6d3db126ab8663f3d79ff", "098c0004478af0790a30c0a89471e382de16492557b5865fb109134e018d494a"), ("1fb138721f68b82d1d6fc160321e87f72519d902dbd19fa824573f6da418b433", "10106f7e299eb8939f8a2929fbe974a6434582c469dc8cd9c191f035002fd088", "0730738548503dcdc532bfc58579e92591610e5aa5b3a443710dfb2e858b9f9f", "0366360c9a9b3e7cb860d85d44df023c853ec17533033dece35f85ca06c5c4a2"), ("1bc10caeef75ca6b7a1509ea5c057dd262c8cff19ae95b146be24fe4a6fc1c0c", "1afb13a41cd5f1c307f4833aa3cbb7d27cb33924659053cc25cf3510feb96c5d", "287ace70608feb847bcffe9f96fa0c4ad6afd2edc6c520f825ccea6836215e82", "09feb3e7cced0e2f29d5011df96793b4df6b3245b688f02d4b91add1e1b63e24"), ("123e54c769cdc616c40a5783c9208284b7ae152db2dddb383758538da01fbc8d", "075409d0e561d6a53146c595b6c8dbfb6e04deb056bb6f4fa013914af507e3d8", "1fc67130c28ea385b13371bce2f6f575322e0c93806baa22bff5e3a0a289fe39", "0d23ebee2ae8ad9143b0bf1e68209c4bc0677f58532597609a3bbc3f35840ba7"), ("012e620967b0af4849a9efa8c5a4a468f8b31540ef28c2fc529926c8fba50c4a", "27b45fdfa5dbb6858967c20225aabe2184ca63c6690281df7ce0508674c5172e", "2b2b800789cee6dfa441e38bf776ff1126a4b6ccc2747bc4fa7f71d856556ef8", "04c6f7457a57b87b1452d10522e5342961146aba333d82e94b58796aa511fa11"), ("272af0996df821184c82dabe0c4bca3a37fba3857546d8a8f94687d7f71875f2", "1fc564b99bf73a9a8fe0d5b8f8214949a196bf258c2c235d5e13d4bfbbe1e0dd", "1bbe192d41f4a3ff1dfa55bd6c42913a12dc86d3894a4e13a8bc3b2b0f4546c0", "15beddbb5dba6b5fdf20b50d88e451af89be2e36a347729c6b118cae48bd0c07"), ("13d1e7f635d1dcae2f0ad04ee5b4e2e379d633687ce0d406da8d6a974781f76b", "13f6010df9d2142e50f1650b0fdb960497deeade10140a87e5301f791d2012d5", "2d487bdd7d02171ce184a9e56e5dcf7afe4606fd993b6a81f7e521b1a87cf2b3", "28062ae46fe2d3b88571255a51a7bb293e7c1be190d3927c25136c0126b23733"), ("1ba6d3d964dea8a4f3b2c44a5b2f207aae361b9030de477d676a9ff6ee7ebcb8", "0a657c34db6c5f34fbf48c334566369260142da1aeb437f2fcf8f00cd620e893", "0cf057abc7b5180d6a5338b78b3c3a6dce9c7299a323421e32f67d3dbab21732", "03dd177be66e905e1f38d7e6d03abbbe75c81c0cfe3951c6a75181717cd78209"), ("1fae2a221ad41ed53c16eb1c41a0641ef84703994f9efd4a4b7ae8f71ecfff99", "13dc161f04681d408327c7214621566046af8c1c30ead51e35a9f9d26d46b3dc", "04fdee2746c0d614c415331f627c39a34c97049c1f1cae343caea1a97ae7dcb6", "27265d9683e87eb5f1609ec306b25ae3ee7e22ea789518ff855827dbb7772031"), ("07688ef7ec4c012158cb416eb6fc0912f473b7110e86da22edfe82f3fc8c02b1", "0c4ba802535bfba0415be5d462e0c3eb055e8810d210598a59c0d8d2b71e2ea0", "260109dc50735f7c9d3df529d8cc2cc1aaacedfcc054c877d432e2eb4caf8586", "05ea6a5ee3ee2a223645b319ebcfe0f75dff6d24cc90d16b682ccc8be4571fb5"), ("22ef9f69498f4417bcb616e0e6a324bc68ef4029cc1374a0aa826e44d6fce652", "02da16d345b5a967cc6c98615c37d82f5ab9958de792169c4ab5ec36aa3ed244", "197932e79fa79db17fab95e90fbca8f6e7a79fa73c29b25ff6cbfa88821899a3", "19db1decbd55e656856b78cbbe8ba7feaaa0fed0eab0ac651522928b5653e9c4"), ("176e2dbd8ce9ae9da229f0437d08d19c9aafa22cc2c93ab8ad7665f34ee409dd", "0476f9fbf06e320361a288e29cb3405f6c1fded2d80d03c5801ac8279df9ce64", "1d8280b76c37a724684e36f8fa5c80eccf367761e89b815f6a69285c1917d676", "12d5e99f60673ed874b75938e6df968510094b0afc56ced25622cb23953bb15f"), ("3034a5be55601ba4122ebf4e0a381b17997045ceb0fa5e6b032a8b6b4106a7e6", "27598b52f970dec4986da3ca8262d46236061a71cfd5b5480ccc480760c5c666", "15f9467ba352a8b2fa6cc776e8ed0dd92bf0fb3b7df393f6184129368160e21c", "2a9f18ddeb868bdd5081a4685e4665ee8b9deba52c081cb28351c0a95b1bdd38"), ("1d817a4dcb07fb439d8e6c9a387cfb412040b7025c7b026c7b7e5d10a88a704f", "198051c97b0a3e3116ff21f5f206b409ef2a99b2d5be8d837da776d5ab4939f1", "2b58226557f870eae172d7d0eb64a317c2e3c24d8f0b2282e6b16eb0d93a708e", "278c1428c470f03f8fed1187148159f940e90e4d89cdb656c91de6066b531102"), ("0917216ad5e9582184fa1c8264346a9e0d48616d03b52764623c1d42f1d653e6", "2e23c5ffa9dd08cdc48374ee9ecb7c221a9c9e53182e2c321416562959fae995", "1f9a720f1efc0d6e725bcbae9827d63cc7892eb9bc2d3f0011abecefc63cbf66", "03d8d7970f311e875f43ce045aae794e83f1a8db12c0e95a6b04ff72c75d735c"), ("27ff7410b1325a6e65329eb06368defa9ff52ae787a4eaad9560b1cc596751b4", "0935025e3c2d4751ffc090bb3dc51e3ce4cb8e1838bf0d67469746c75841ad51", "2d140507b210987dc895396bc06e8b6ec7bb6201b3959825859a18bf6117b6a0", "14fb125d13f1752ac7ed24e468e17101a8ce8ffbd5098abd760fc37ebf008c3f"), ("255ddb24e55d2979bc5ec0087755760b5d2192e778dcafe24fe26352bd532d1b", "01356452a0787fd42e4aa436d08de95b4a60d19bf31bdf537a10edddd33f1ffa", "1c31bf83ffd71f5e9f40f54736653344b6b74ce5b4f0154da9586a49cbe5566b", "1c752ef31dac29fb9466060c2fb40a8611cb76c7dcfef709b63c65ec166ce579"), ("11d0fa5fc693488c0607118e5e96248871ac18262c0c8ad1596bb333cde8b22b", "162b8859e668c0457b5de6c9218ae6d0c0939b99d5fbe880ab040edb6eccb590", "270d4f86ce3f7856f02d7a2ec651bef14b15a523f888a82a2d15b1c172afcef6", "20a3dda0a5d9118e3555bf8190cca2baee0c7b892e5612fb0d2a8aea962a04d6"), ("06223c771c568507d5407ca0e9d0507c95ee44fcb31b7dbe15da80e92486ba37", "21ba57f8286ff684a38498db7d76d43e9894f93be2d0c5029f05fb117ed45c3a", "196dada7da30aaeca13f8d04e5345ea3eef58a921002aad436d422f33972b870", "0dee3f6bd04fbbe0e2bbabb11590e898082ed219232f9ea405509e969a858c2b"), ("2b70a42d5547ed10681dcec9361d73c4f76d1552a477b555444071c20e4834f6", "0b08b3b5a47e69342fe3c4f8ee2b9954d5afd779f0e038deac7089bdcdd1c42b", "11904161c6c3402f4d01ee53ccce5b7a6a71557c8a83b478f7480f7892aec611", "185732faf3690d06c0332a89a345bdc8da377579e13356a729bf97dc916cdaa6"), ("2b295e366db8f9d72402dab5fd23904a3350619da572cbbf21d2d920263ad5dd", "21b35f725c6c701a5cfe48ab6948d751867284d7e17a66045a64f1492c954b3d", "13be48ba5ba6ddbcdc6273fd271146f4cd76a6891773640cbb13ea4091c159a5", "1896035ba6446c7a9388af56e61701f190e74556ae8c4490684f214b96f97ac1"), ("2cf7b33ab247f180fc57a9efc7b65d18d094269129f17c2097422cc3c49c6082", "0d57adab7c680a32f2e216f2b69ce6c46b4af376ec57e6351407cab6555cbd30", "13d48c5207caf64c817c142f8ad8a87a29fafe091a5c36ab943df9d2b80495ac", "26ca4f90d8f27bfb33e4c7b28420fa1ae8eafb57f9099a50aae6abf68b6688a5"), ("1272e793ac2d201b7453a4ce41b1e26deaf8cf8f1fec318c3fabe15909d6c2a4", "1650676c447c7b2d2fb85daa442c0459cb7603ef5dfb601928cf2a0560905c82", "2d41ae77a5d68c257a85731a1432af1ce013b29c7edd4065dc500c7ea2b8691b", "2f4764c99c2424319e4af10491b9274fc62b280b9bc30eb82320e8f5b15d4ce5"), ("020c4a9484e16a11bba22c201df339edbfeddcdc2860d1d8ce8f3cf154423dc5", "025450942209c821dedf31560838fbbd9e257a06009129bb121911bc67a3513f", "111252c49694a23703111eea669082fa49a1bad36ea1435a76bede3d46698967", "0e1f22197a144dd133fa53a0a243babb7226c1f8162ba92e5ac9db7dfbcb149c"), ("2cbf6b1eafcff5dcf3313c379af86634e1cbe106085ff7bb74ff8139e185bbc9", "2d6cb29dd37cc858b5260fa93163517bcd3188fe881ead8648083dc74328e47b", "165b42cad7bc2645375d16a4b2a95918e2bcfc9017ed2fb63bcdaae9cb17060d", "2aa53caccb10a5faa940c0eb4f4227b5851a357ec3d4efc75fe6cb4be8ca2f01"), ("2f9f9df0e837576a0073eb7206d4eb9b85acb9ad95da7828fc65ec2f3cf9f38c", "0b49b4646becd8c44470bc49fa9cad4577738ce94fd71b75d713a8ad97996bdd", "2246dbb02420628a660a1d6068091dd3bf1a5c56e38eb820c9efd7b0998a06c1", "13713c6cdcfe1e17171ded93ec58adb57afa28971e6580fca4e5a83689eab698"), ("20d93f42e4f11162cd593c241cc4b57fd409f1a4ba1c00395816bc006aec0784", "175275b8daba4b7a6ddd91bcec2a5619e383229db3541a9e761825ad8e17c6ac", "03d3416b16ab17a5eaeb26448b2b21ddca132337e4eaef7c0242f5f804ab9364", "023df0d2f7a6770e308adac724cfa1c87311ba08e862f69fb9e411135664d761"), ("274378fb3f24897cc891e6ed549282c32503d51171c8768c8f11959eb8efaec9", "1a4f2c75dc1d248225b3fea6356d7badf76b6f407dc7bef02f770e8aba521b91", "20cd4464d65923ab89abea79148d3e197a90691f9bff6330d6d100921764e235", "022ef025132ca39b2d5b40c918aecea45870f0118f432dfacf7e2b7a19b93246"), ("0ea2133c1111f22fc56d025d1c0c22fc651e915d10feb42daf39f2740520687d", "19603f6885a64cd53444ed64ba9b95269382dc70ae17efa7e652e6e4e27f084a", "061d2f2fc7d200ba846531ca40b803631bf478ba4a18dd8745f494bd0de803a2", "276544f8a2018e2b41af7f73ef1a9c3b619d6031ff9bef51ce4b0a36e4942790"), ("171e2e338efeea48af52e298bab6b2556edb83f951c2b9d828d5433481bac071", "25ac58f377aab8e3a580181b021bce414283db5b7e2180b31ba81ff5aed4eaf9", "219d89e182d775be6796b6e890f5471d5770969f93d446645ae355cb37934d70", "17fd4a8a351d5e6d9947433c5643ccee07ac1936bcc97644a78646249ccdc5ae"), ("0af789167b0d5cb129886d8d8d192f59ba15d255b73ed5b511128c99cb973ebc", "0134266a35c2996f59c6e5a27e564df70b6057f3e7515adda149714e0d5cee27", "12712c47fa9972625dd88dbf7afc3f0ac98bf6c7b9b27fad4925b3a39054b54d", "00c6546999d995b4976f90efb23854f667c3bfb03f81c8a7c883a53d3ba35938"), ("2118276e46c1d6ccdcd92a00ddb2e6e16e457687a42399c16c222e0d2470f650", "16ffc17dd1af98f822d2f9eedc23bb848b7986ed700b15534936c08449e461ba", "1b3b4884654fed7a9061477939b4e9dee30b914d06f4a6410e24be149d0a749e", "1929c4c65e9022b2c564eaa2adee23aa64e4a4633336ba6adb6666455e0e58ef"), ("29afd70fae4fd8f53372fdea351f8d6698a82f92e44c4b37b16cf9ba5cbeff9b", "23bfdc8271b28985edb61fc5cb04b8a1598668404069a9861196cae86a032137", "1032bb79a485dfaed157821283840e4020a3a771c3deab048a672a274a024c25", "0ff5f21f3b744686ef9a796b82912de9eca6dfafd89039645af9128d7796c693"), ("0755063fcd9ea8f68e1ac4a57ed373472c180ef303777cbec5edcfd002fb5bf4", "1abacbcca376894fc4b83fe2fd69256ea0723b09489776b22f825f6acb369179", "035ad25404fa69a33ead7d723a310782b75fb222ee45b5a4e9ef928365297a4f", "015b523afe304f9fe221bc35e12d35f8ba5afc2048f814e949eac067c803dbf3"), ("087cc8834a125bc2f6ce9f86b1673547c119d1892e68cc721a5cc54ff1e31f99", "191742fdb24f599e6a949655179854b0fd1d238b921c67ff343eea64cd5e1f9f", "22ee2d86f0c13f5147470c42a2fa8bb58e65757988544548de743dbe5773641c", "1fc65e157ac05dbf4274cdce0ebdfc0dc3f7155d874c75d0e52d9d4cb7f2d68b"), ("0924ebc7789c5946a59343cf4153b5a77632244bae1a9b1f3867c1da332e0601", "2875f4f18e704e8f20a22f8d6983c63b92c55b9db02a54c43b6fe198bcc37c6c", "09ae4f73124e936d560a312559e046c539b4343990ed4ed24cdd4fd82e96efc0", "0970e0e7f836375abc9afd872fc218563428ebefa9881bc369c388d93211beb3"), ("13810f51cdaf696fc2eddba35bad5c8f0afaea763628e0cabaa10808b037c0aa", "2be80a8146ca6f350c3210afc4951977a04c5207c799d65938c570925eb35bd9", "28d05db3a42a1923894a767728a226d2d14f6175d45754014f9c62ad9d722509", "29037891cee6b3b778b51a2aab03d48dd486586c6b0fce1d96596294e607c756"), ("1b9ea306787c1e1abb84d6ada0dfc67a7b7386259491ba12b6a1be4465e97bc2", "1707e7ac3507a6d0a9edde26e9599f782825ca22c58758ab65c809d026f6c2d2", "0ce5176070d19cf7b0f4e5092f4248ac6e310fc39253838d9dc4f72055a6e874", "11148e5c87d6fa226ec074b57dcc52aca6df1f4d108ccecec24ae9c52d58cd6c"), ("26242a9ad8242d693349e21fd0a7c4bb76f3fcff184a09d29f4ec1035a81326e", "1a24e671add6078c94dcf7f2962669596d60e8a101bcf39566ef576825ad40a2", "27c551b47913b9abdd1529664d84472a408b7f167a696173c1914c20bc37c62b", "1dd3364fca43803dd9aa43d5dc3bdbf17c53544c40f49b60fc64da23693953b0"), ("297f12030c1939735e18ea10edc2eee3a9ec85f50afb48f1f0e854bb06aed1e6", "02e30b96e7e21fa627fdd01fbdd72907cb353b432a7568a263822132f68381b4", "1495afccaa83af66246248159e8376ed2662ceed9b6c87696e583fa5bf336313", "03ea7dbf5864cdf6a14eb4b77f9e6c3d93add9d7f2c899580abb3a8c49e072fe"), ("0ab4a2e021b12c14f1c5be6cad5e6ad7708bc2c8756ddb8376c352592d143413", "12904d0241c909d49f0873a930800e445333f5770b2dd5c3d6a6ae8a420877fe", "0dda329ab83191ef5ad598f5b5e00e2cff401cc097b8492f2fa5c374a273d5ab", "236070f7064ce23a88dc8916f37457c646b5df2c10fc477423412e082e7cc716"), ("18367baf08997fdce43c120e25d69508911fb712d8fc14ad0c6d98961cc5ede5", "0c62bda8cbab34dbce7dac4247a6f41ad80113d5323647c59270b7b281e73696", "1813fefbdfa547d727db5d90ab8fa19cf4b233788af94b0e1ece4c3da2ade814", "24b9add819d4d084dca3ac2cb018d519e9e5e30f4e0bc76bd99d45a503515807"), ("09feeaa61dc7fb4da32967f95036446b6fbb3903fd6af1cfd0e83ce46013a412", "08e059ce1fc8c4eedd480eccc7fe43763b4d2e3852fa39336b489f06c1ecbd59", "27f2bd715361f08387a5c2ccdcc360c64fb5ec9697d0048c0f9917c4d2650386", "063b90c0de309c0050fba300cff2d42889c29f5bba9701381458b267b73833a7"), ("0e8e6295e5b8bcf716403937db57bf492bb8fc41fea27cef528ea322f8c92ddf", "03759a1a99d30dfbabe8f9968849db533153642d7cdad07e84045ef55a694e65", "0f6b08bfc94f482cbd7817cefdf2be7942b24d2d1ed25b4941f5f383e48a3205", "29480133424a8018b9df87e45aeebfb232af66419c137be9dd32e94bd9cca3b8"), ("03ee1fb8819f6213bd51fcb946a9dbce0173e859db1dde53e65c0cd4b826f6a7", "1f262e54dd1178273878598b4fe8c27f6669cb54a6625f50db5dbbf37cadc246", "2fb2ba141cbfd307a18ed7668dda345a6ddf6596df85b959cc7555ce42694593", "282e7fa16b269b76800855168d03d22bed6dfd635d1ca2c59d5614330fb5c52d"), ("079b938989af026dcc60822efea39b272e2171c180c684c990ff79a06ddae574", "280836349a01fda15c873f04e895040bd2f6fb61876ea96d49547acf6ffebdc6", "03da2437a983f49788c60903ab84f29148159813bfa74f627b3fa5a0d557514f", "1370c36fc13c0d88ac4bff189e26c3d341ff1132320273d88febe1083ec17c6c"), ("04195ce54951a216657d38d1db56c5cde44505154ec2fc7c9d726011f6a789ea", "0c7f418de13a188267818e8bc280e8551336b6bfd0e5f7beddcd97839ce68cc1", "15ff0c5f63bfa3afa71b8cbf5bff33a97a806be04646ea33e11cac5f83e28ed8", "08171b3c16aaf6af9fb1f41f5af60359f93e519bde799563b5fd59366e96da6b"), ("288beb23e7c480a9d691247116ce285d592eb7ad92a56a677f80db04eb929d49", "0e7e7318b8a27061e5a9ee57bcc3a62bae8752bee76380e4f3c6d3fefb13457a", "18e293fae8642c1e0f21f8b8c4f5798aed21dd4d98bce32ba87c25705e284418", "267f8f4a0901529dfea3ef98d80ac4306abe7573b3b90e1c33d01fe9b3ae4bad"), ("0ebf073308dc8616186d0db73161c1f53cefb07a7587b9564a9e68c75cd96a72", "2389a5661c0ec4d803595280c2598be67ffb49f70ab14d7bc56c803119bc8749", "23299be4f777cefb05b7a8842482a5cf33c79e7472934640bd057b89e9f6c46d", "291cb61d4150d0078ec158789d896913c22e03dc873e3c61f33aa7be9bf04762"), ("0e0c75a264011f0cdca33a5e96f1331e622cab80c24ecaf0fb421c295c91e34e", "04493b3a4af9ff271489b3515529b2e3484d78d16638d606e206ea82e210835c", "118b248a9c045a58667fd9e9285c0e6006280f34839ef23d001f9df30ac9ddc0", "2a6738da41114693f826470b3939fdcfcb95607b7eb6cf17328a00c985705e95"), ("2c367d78353b8339e47552322d7498631a7dd714f5bcccb8ed1b47279dcc8661", "21b81f84716a09c88e0e8395c8f19748992e429a318480b8766b7abedcde62b5", "03415920b62d9e34bce04e18e6aa3c8f2caedc4c4720a466899679d73f4c5b38", "2795c48436c5551465faf59d740851b10edbc9dc5830c9733327601791bc68a8"), ("0668d247e5f2dc26eda7e79b4482a06e9c8ef30563eeed3a5fed9ecd4b4d8858", "2aa3c0f2438f6f2b4340727d7dcee97c9f9f8ba516a07bd483c0ec5c06780170", "111f8164d2b6d2cc594fb6c28cb126cf3fba3bec8552ceb0f2d89ad905bf6454", "21ff85d719ac99d88db21147a7f4153580072a820342944d273318ccbb5c3518"), ("14f174c3aa5be09d4de5019d965c0dcf70d46a5ff6a3404bd7004177c9d05d17", "083867f33dc3f373fdb0b903a1cbd8e4a22b20145947b09202cdd2369e8d526c", "2d85efae6983ad11d9be58eea01d094df681baa57bf0244e06623f4c329c9af4", "1ed324e7ed2db9922991c47dcfbe5ef9aaf71077be3755a2c9463911d99649dc"), ("06c912e8958db70d6af1404250e454775b7760be5cc9f7add9010b88ac5a5b06", "0344c2a95d13f246dc63727c26d0ca67cab1edc38e677bb7d719e3ec3cc22d7d", "2cae0fb66222a5fc16fceff2da4e1b00924dc444f972f044844830c40c538302", "0804320a5f982226163f275c33562dab4f797f965faf0b82469fa82cd0855414"), ("2e106790ce3f8f0df0f139e23204e2c1336878e61606709ae1525e62a610d6cd", "077ff651e0e3050daa79218a73e120a64312fd466cddfd6e56662adc0d3e4294", "1e1352fed156687ca6804796b4f7a4ccf4be8c91a57798e965e6e8e5b366ed88", "24e48e901f69ed50741595c486954969c6cf06446a84f89d037ce433269bfcfb"), ("0bc30d547611815058eccf70ec233f4daf726e93805c8be5d4bd4e9104a80b82", "1be7c58beed1bbaa140b6adaa49fa629720d10194573d404c78d3612f599a5ce", "24a9b0cde5d705fbf5d00c62a8f5a189e6e460178c25352c87b63b37d4a03f1a", "1fbc1c406888009133abc8c3bfe70ede5772febb00b13121ad05816fa965cced"), ("0d3be2b64efac14a80193b9b84098849f851783b925bbd8d0632b05c1a0803e0", "0cac5e5328c57b946cfdc4b64b763e070b8fcd870838f290e1eaaf4199107c92", "0519f5b5ed3b53ae50341803e66b331829e7103651d8f0b987d4bfd28c6f5094", "042bb721232947362cc127f267b74f9add59bd9de2df9ba49d998652b343516a"), ("29c8eeaf7ca936e12fbe347dedf847a8af755fc52dabb41fd96064dc364a49c2", "2081ae4508cc0a210923cab3cf64915865fd1de3b0942876edb1b9b61f223e1b", "161acc03c49a48b0c6a44a96ce07ef4084f7ee2ea9bf059d8d1c7fcce048e92b", "2dd158cc81ba3bd057181c1b60b5c9ccb7289b2b7702577f5c372d8dc30d4496"), ("11db08b9a92d6c1a2a01ae6bd9e1870df3140ab7d333b8a11b84009e7dd11d8d", "03d039e9e259b7392a474a58e2c64a94b90675a905d100053c8e4fe7c8b9f1ba", "106c91e3f0f4c2e6c07715c7e55b7b2e9436f802eb3ab162f9785b9f9dcbbbd1", "07d20811b4d1ab6903c886110ecc8ea4fc2772d77e92da7b1f9bcc3b68c7df49"), ("2b658e4b2ef718bf887a1c89db08c0e7a8cbb19cf8a60ddf1bd5f679d8e2798c", "2c547a8058381c6cb1860b32a2488af3ab93b6706a4b450cd8a8aae107cc7b87", "06944f85fb3c757e96d6ff0c36ce655db84b30e374cf4a0bdbc5656b7710c9f6", "261b5f05f27e45b998b51d1978e54925db4889871543c42a2593088e1287a158"), ("28b5102a8bce1543abc4d0d4fbbb2382a43ef888512665300b7076a5b3a4970e", "2c9136af7bf84b78a6d74df57cb24c1cbb65018f463855a54f9000dbff5cdab7", "111b3f6cf7286a9aed4c8d6acfe7a5be2da3f50f4a015f968a4d71d35425c5a6", "2decdbadb5f0cbf272d280a54f55b0835d6ceb22aed3df2fbb49eb5807aedd99"), ("14240121b41c8c481325833f1acbc8ec92024449bef5cb9b253c588e30f6452c", "300c43a00521f583560868a24a53ef808e9ac22817644a1192a7091b3c6015f8", "27fe7aa3cc83f9f01d14bf640f3132479d6010cfb26c36b00c7b6f4c0a184639", "265bbf01de75a30482e93d023fba39a91fcfe746e108e3460d4a9cf3f9252fad"), ("17522eee097d3b1e7a20f5b7fab7c686c4fcd17f0816b2e45082d079479824fe", "0dda32c724c7553fa91b2774a3a4389164328f95741a86e761d8f553c31ecf94", "1da4248785d942cbacca830002511d4377c8624da5390f7d70ca62e6b5fc315f", "03542ef70e13fd445bbc31784b97cd838c57e509826a0bfcf0c2b90bea81af5e"), ("11896853e1977d3c57cf3e8bc1c9a09f8dba242423b6d022c5d73c425b29cfbb", "0ff72242a5e7ec6c868ecc8b5349a38f369372ceb4bc6b81a9194ee5b8efcba5", "202143ec0d34f18a3405b1bce8afc27c5f262a9abbc311af610994833c4f3715", "0820b57ce35b23f77b2f8a5a8b0a222fb6997c9082fccba64b464ad3838bd987"), ("29a3642b50d6704f69dff44564e704f626212d89c38a3029998a495b5e93a0d9", "22fbc362c9707a0eda9c8be93be61c99aaaebcc43d16cbb72439881a4ccacb8c", "04891db5f113fcf6f1b2de19ee163c4011e0138949f06b5e55250b3777f59c1f", "08d453d8c5f25d4c6ebbd71e2eefea81b9f61be9a688d5088d568f1da1576985"), ("092c6cbc2652c7b027a49080c8dfaa5882f947c7d6cbca3c2e20e2bcb01ce6d6", "1264ef9efdd371818b2f3592ac71a1531aafc7475b4a3de46bfa5cd6ac530063", "1066e38be3e660b8b371bff149382b05bb13de079f5589a3dcbcad6233dab507", "03344671fa6296e979a859110362ec19725994d570ae6ed0cf56a76dbb239189"), ("000bb6ede8382a0186d833a0d5a459bbd3cef26ec45503fd0c3e75cad6a50438", "019e5e004e8029faef56a39f6979aee897e5993834044fb1207ae119b505e763", "2b99fade5bee290af6a7120b155e6665ad1139a9fe1b664794d3cc0f4530aaed", "2cdab44d5ec961350b59bfcd5fe9813f967a8e437eb404f1573755d7b2d48ab9"), ("2c5b4e5b79ba6130a194baf619ba65a259d74e9a1a6b5cb707b8a1b7060163df", "1075d7834d33049aac9863a8ae7d408268a86d71f9dd0affc14a6c3d41f3d5a6", "264a6c4ccedcf792a944a2ea2cce14c61c7e89b6963dd552b02167b4253eb63b", "2f2333691032058e04a67060df6d02b1badf1cbf640846a84bbd68d24c760037"), ("280a47aab020bef1ea24fd7bd4c6fd57264f58c623b9e4b52fb4d0f8a70c5226", "02480ff2493678a57f87f6ae272ab93af56c90e2a271bbffb821f0bd603b1ea9", "237f2a2b084fb8b5e6f4ccaab1119cc2d73f5a1a51b64b6c3014c91aa8464b81", "26c9ecd504ee27ed0706e5218e6d4068b9e71a70a468826dabe73bbadd7fdaaa"), ("2e8178731539b74c5ca53bd9bcf00621e44b2da2dacd16f345b63f6a793bfd06", "013350bd62c8e66048991b3720351eb5784acd552fac7d02ded47307fa4e6452", "009778196fa3625752b04d1a8dd819911f39d235916c987f612e0c65d1abc7ea", "0f05c314227244d105d2c560bbaf20b304a4c470c296aaa6127d9293ce449d26"), ("22e07c9032ec8130127faf066b75dabedd8588d53ebe9d467bbcb0f07f089495", "25e68cad5320afc45701abb741b97e115a5a39f3e9e1062913a6ca9ca101c4b3", "0d56bcc3b68ec55dbcc7a102b4e9ebe6e582dc6f49b77d60d926347e5c7a04ee", "211282cbe325a1d06de3c449bb789a6a3c0ecd6b64c0630cb23c46911b4ea4fd"), ("2a5b9291455c253b9849f84afad79d07c9efa3620619bdce044fa307b82affe2", "23f641edfa1fbbee40202b487a3a225b14ace3a96a65c329d586fc5fa33cd9f0", "2db86ed542fd414a139e9393107078d317688aadb64c39067ffbf8b02ced6db7", "0b7941d7d0f8a370928f4bb2a786c16c9b0e61b50d867dac93a3e5f4a05fa42b"), ("032d49576dc40dbcece917a85cd146a2866eeb9208071353ab0b7ae0dc73543e", "286031133066add576007534b143aa6d8c38774d7dee8a30d43720870bc11ba8", "2ce5a4183f416750e7fa34676dea9eca05d658aa8b84f3c9213b37f5a8a8fac2", "251a1f901f2f5ca2adefa09dc665f5f5705521ca343718225cd65a6247f124e8"), ("10d503b3481cbc202b8aa91ca383f882fffd7401bcd3dc92ecdd0ddaf6c1d0f5", "27b77e40c5b42b04393a73dac60893613f4aa5d5a684ba6538026c1db837f93a", "0033f4e081faa08970ea5e0cd0c45eed431b59c18ecf3d6dd422ae3c5bc417e1", "1d31da172e6e56345168ecad36e439239132dbbe713afb038089750a0e40278b"), ("244b2ff9c6daabb39ccf6316684c48fce3cc5a4a4204e8ca4edae0d30fdea500", "174215ecd2a7378fabe9e3ae6b6a3f4cdd5725ac91a7deeb28b9952c88f0d6ea", "1bbf6c332f7855911003d6807b7439d67825a0f008f181811d64ac6571c8690d", "1139b93d1040b4e66a54b1f28901aa3d087322b282c88c17fb73a5e35ce4c8b5"), ("06091f7be65c32ccbd6f6bf06b5655ef25d3686fa2d6cdda63a13101f7dd5e25", "11cd113d8a4f03ac73cd69d78f27aa44463db5144733e0ceb4f13b2816765684", "0770d6d2ecaaec972e9b2362bcc8090ab2a651643e00427193b47cd0a807edf0", "053e45f12d1a992cfed37fcf9a034fccd90a2a4efad50a128605fd2344165b13"), ("0b1f0ca90ede116ae7498c318260b091a3ff8d1809b6c567c4906d144893f7cc", "1fb030bed1aecdfa371f7baf14176dbea8eae1e01192aef7be5751b069b7e904", "24f70f34da4534f137d2e7b1a1560f79ab2615c5f9d24d8279dea643de8638f9", "2c6c11a51ce709975551d685a824e6c267633bd4255d82633157401ba2165261"), ("0dbce5f9aa5c7db7eb79f7b9edc612ea2e08a6dffd82b6ffd48006f884286544", "106a87c5b9d71842754fd5d3138522968521952b4bf500df3957b91a68de640d", "20f5f85ac1f90d0735fcf91566daf51f79381d32f29f8a3cf88f3c71955e0b67", "0138a18eb92e0e5b4554885c3271d49116318d5331816341a884338bd6786821"), ("0c67fa0b7bbcb78d5fc7c065949b5a76a94a9e08199302b7ff761742ac31c1f5", "124e9a338985f5fff4bc8b2d3974504c9e1743e9c4d49b4ada6db53b06fb8707", "2ef0e0861e606bd781554d1915c9a8a346c8a9255c7139b6de432f01f95c0c5a", "1b8910706f8b25adbcd9a7fbe39a9c489b78a163db597dc0409fce08ffa9b1ee"), ("03805c0dc189ff893759edceff17c093b2c670572215085ed8db964f650b4c37", "106f8859e3c939b26c5ab6d7ab594585388a7e62e364c076157eef36884346b6", "14a0f5643da46af54f5024483fb1a27b18da2b7da80035f5c586ce88ac81f829", "1bb2b6798c5fe5c8a737b2bf68865d6ea4ca9c7899da1371c597c61566f635d5"), ("114fb9e5595b4b2191478e84849a6867fe9512de7d938612520cbca5c77f148d", "28e904911762ce5a9f047144689ed5d44615d9ddaff3ae47b5a640a407328cfe", "0091361acf295a2e414ef8388ffc08878136bbf38e8a54cf2cf8e8d495218d93", "303d5f54f2dd90e3b862d82397e4f5e84af36de6fba365cca8fe0569d6b34616"), ("030659f4ea1ca52a65fa53019697c91209f82b28eabc2ce5f014a8e10a4c4690", "1f76cceaac5534efef8f3c800d1c5b14b1d49ac47004dc60152e2ab9b424d8d7", "23348a3208366c679d7ed3f1d526a98f75289908432dd056113b49fa802be2cd", "1ecfbbf229ead0fe149d979f0f9299df4cbbb99e8c5d4df4d30c8e0bfad08be9"), ("04dbbffda7b167b61d0006decdf7403197ee72645b37474339a889bd3ce96ed0", "24d7928060e3cb97b63daee5a0672556de4d3b0f68345fd1d18458870654c10c", "22fe16a415db4c78f380c928f99e2896845fece5cf58360a83f81bd9ee45f367", "16c89b159ffd6676d534a34b1436544c8410703f637e84a9960e286929c9c907"), ("15fe54d6f799ef172496793b9e5aad02195bed0dd1a986eafd2545c318c63eb6", "0457c881636c304fc18d7c5e87658f4921993ed85bf518a0dd1fd7f308c68164", "29225134510daa3f0bea6567b5667df82b1f40edbc232a7793257b8aeec07a2a", "0b86160b67a7dc64ad2468f95d35c0ff3b82a57a752a0857e6c19742374a5d62"), ("18be5175fad2ed774667373429cbdaaa23faf2a845274cf9b560fd4672ff8c90", "0cefe1b8653ecc9ca9c60787408641a7e13f6ef70ef132e78135baffc389dd7c", "2e9c2ba6c4a14123cc1a4d008f0cf58a81cd98afb7cde352db0854fb51511483", "074844817fb02c60e65038d115891aa6b81d80a2ea062f5d64b14ff4597d8196"), ("0c6cd8ceca4aab2d03ab69263ff734f2de4265086ffeaa178ca5ab23f07c7ad6", "228d573f3de625059b87e2d4fa32e4570ca557a4b9ebb3349b1b06eb7b3558a3", "26892f53750a297ede377028a45267e5e01d8e20d2afe782d7e91dc47c820bdc", "16787961dbe55d5cf0a00ff169555a67cad6b521cd25291e981cee3dab1b7a39"), ("06a2f21c16146c7991fe2330c3fe22d24ff768a7b94310f3bc7973f9028a3956", "29f520fa708ec35a82b4bf1145005af399c20e8672cfdb3634caad0af00499fa", "0a1f22688df6c7dce6f6d51e154d565aab26befac5d9bc26f1d1422e3be14278", "2c69dbbed31d02347250672bbdfba251b81d517218a8cf6bc3a09172faeab01a"), ("10b63bafcc0257671a80efbe782f9b6242df21950960fd7abef3fb22072b3756", "12406b1de01aec051222e0e2ebb7efc287e378a7d6d9f7d66b6dcf0bb46fb350", "1d5d25248ac501a8a4d7ad4c0b632e1c26bcb1057842c0cdda6a4f3d5f97ba21", "133336bad1cbae454c355e36e14183eff4d1d5cd0d85533f152c9253715f7230"), ("2a29f6021c63ad02c48fe04ebbf8d76aaf691bfb84dd06cb8bcbe83d0aafb389", "2a521990b90e596bd7a4e18f06fb6093a028f36cdb468c3a4505f23043650843", "27b348f870ef461213e53cec829a2ceae29994123474e8fe126fbb47dc1d6e86", "05d58cfd069017ce2b03df7a86ef67b309770a372b9404cc936f1f4066338a71"), ("16fa2c52d9ede2eaaf9c19967355f47dcbe3e3020676386bad419a6c2dac2470", "20cd6be1d25523fb3147d772e1442362acd9045baf6e19079a6c12678563770e", "03c9dbc43357a886a222c681b07c707fac384964958a10d468eb8e53bcebd9b7", "069a3c8ff19489a24637b4557ff4e54e7544cbf971d1b460e6f2310a02bf34c3"), ("10c9439f5375081234e79af76a8c1476498bed786050915856d313fd0fe6e173", "11760c55cf7708813b79ac7f0bd3d0043f1f444b4fd120c19363c8efddd3e21d", "2a5122ee5c14a6c6ef252baa58ea8ee8ce99bbc81405c5a0756f36bd90f7e1ba", "0d88490a3d8e27419b337a3845712f612d80db562d51e2065aadfe613f3495dd"), ("103ccb79e86889a4e71bc09ea8222b4c2cdec86c4b272c22dccba21e453a1a6d", "141f0a51cc23205f591b556d684fa35ed742123c333854208bd67bdfdd19d978", "22eb1fbe0e610c536806cf7ea3f1773f08a3c63e8d3d2a0f4ae17d68b51dbf23", "2cd12eba29626046800ddbf396cf13d7343f5d8eb8bfb9d87ee4452df84ef3b3"), ("12905c8474d05e29e57a1b35196b74acd3b01e7153bb9cf1bc9f13fb99580dc6", "2fb0d13e1fa195fa3e4a5ad3fea2d49c33a4d97052d013144229e007bf7c9cda", "10135aff8f7a118f42143f68622971801db3f97f928c11cd1dc82fc1d7bffab5", "1269c8bd04f360e642f90ab4ec5d3a7748a584cae63f1fd35a6be1adcfffee52"), ("0f60727430fd9c43cfbc4a48214eb53904e23ccc2f3dfb154e1ad07b0b379c15", "1c2ac8f2f6048182559893b5d1128501b75bcf1589e323d91f43b617e7a495cf", "2dfddc84f9c3f1f16377874316d01d10c51ee7bcaecd507cca248b23ae1df3b4", "22a34139c76eb99acdab0310463b04b868c18849b80e5b5e564fcc4383c63a89"), ("271b34e753a63e24eee1021e6facf600f6514ec745f1323efda03c42521b6199", "196bb457b6f5bf723f886a51ffffd9a466364846d8df53716b5230fae3c3a51b", "25dcf0d19834175e2f22b9c387d98c3676b4e30be2217d1f9df65317b731ca03", "108d575747fca1e6dea0bc70cadcfbd41db7ae35386d17f1bbbc7de81154b629"), ("251b88022fe03a45a3bd7add36e2f8f655e584dd90ad558f23572766a1ba191a", "272588f4b0869156617d5265b83c5cf3d5797b78ad331a629b355196d0734407", "068b7f8532923acf66d6dde932d604e2708b727a99c9766d1607919429af47e5", "2c6179ecd6050a0180e47d655dcf90afc347fd22020685d4d71970652b124703"), ("05f01c3f2566dd5169106e386d330122bd8b193c5fda5521c4b47d7c03f5994c", "07dbfeb55d52aa175cdeb88b45efeb490bb88f2b5f88fe86dcfb47c06a2fc2f2", "2b89584a81c75e951ae31a20447c9f4e7e080654e6ab611e161eabbb15a0a992", "05c4e35a997a25dc95dc11951fc2d38ce95e612a5298cd58e48295fc512e9257"), ("15f8f5918854f818393e7df30720b8334714bd1153bf832bd26afec4aef06e0c", "25dcff028a455a05dbb6f8cca10ec90f381d707d0d0e55354f8ee008699a802a", "271b8b01a4086f7e6ef4f0767a6d596654bd93883a9f88a4e83ac64a54d6cda0", "0918950ab4a4be2b297438a88dd732cbf0f92f233146fb9cd803e0a5ba26ff49"), ("043a0d9ebc0e831918a0b419e01dd6f3b568952418807365505f461ca1b3eb20", "04f76ee18434c52c28fd8e3ca50d0e6aaf3da947689f72b69fd9cbd9ddceae5e", "0ea82b5a990929bfcffcb731f005bc2a3ddccd04e985645362681d0a259683bb", "19ab04ca4a7a5de2ab689a6de6d94db28d9555c8eab1ff9ad65b6e422477b08c"), ("284c69203fe6c396d00c097155c7e827eb05fd1479827f0284bd6bdde189acea", "22506cd20c17e10be14221bbeb04b7e9555a394702823b9cb4421d057badbecd", "2386b8bfca0bd778d8196e0b3cd9301fc0ed084d4e637fdac0f7d91bf5cfe03a", "18eb286e846db809aec53e01ebce76ef21fdfcb317dd8f1ba153fc535aee958e"), ("2ea751f7f350a84d805f2d5bd9a2fc83bb5a8b71576a133e61dcc9cf9bded859", "22915a47f63831aad0dde195d74f03caa804fe3cd1248af49c7c57fbb9a4f0d1", "217b1aba8b12891dc33a552da0138ddc902791450c37fff33deb945e6cd9c6a9", "07e03836f2f60016368de427a86fac8d12312bd4b8138237cb4255b66658fd96"), ("070e5f30f2259914914a083b7b5c8d92f4fa2458077dd536870d40ec1934c0ca", "00937fc44695aaaddbbc19385ee72f798b41ad8dd32394edb7925989b9a8a027", "0d6b4bac78e73806adde78b3bc8519e55eafe96b57cf2d4dc347271e84243368", "17e5d6a3d39eb020776dfb80093227c9fd6ad031a157b60baba708ca3b904a88"), ("2dcb5c925bdca01c61ae39248e3cdc2e628ec81c81293c8a0b11d4694005a78f", "2785b61b544fa1b386d99f561ef8da1b32261873d1371a2774769435346b6af0", "02d87ebddb8a3babd283e185631c6dc4d7e0165b901d71ee506bbe936910ac05", "01c88996c60b4797ca4b5d1b6502e03b6dc9c5ed4c62c2d91127466034db600f"), ("22d374f8e33b4e711bc3aca6a57c3ff82906fa8b8628c3f62d7b0221d7b2aca1", "13eb96d87754ccd8c971a7ecfcf87aa03b8c65b84a9ff2988de35d3fa79fe923", "1de547edc6caaa1732bb2b699cd06a49c3aefcfb986219d621605f04613e8117", "252fd84c9b55d841021abbf687d777f70127ae4a0d4522d8d3aff0d6cb2b6409"), ("0bc65962d1f907d3aaeb377f6c029165719f4697903c558ec8c90004f69d8977", "052ba6edcd271b80bc7623b6aaeb7a5365663b02783696103bbbada617fab80a", "12f96faf2b6a9cc9deb4a5a6ff82f3904c191758d0d55b4815425fd5e826feb3", "0ca9e05a9ca185cd9b70c44828a42c56e11ad3f98eaa2876296118e856500b29"), ("0656d134b56ff52685dfb468cad2234e691567e1634c191d82d8cd3939e8438e", "28badaf92dde46377cf5213892b1053277b12e60dead694d4742c5eb784b2d09", "263cbd7a85eead04de8fdcaaa6a48b4eb455d47d79aea99232a9b0b160b4a074", "034f2718edd20766ea1fd5be49c5d1067fba0c5028f11c0b47575e99e0ec5eae"), ("0c775a35c6b8872692523aaf301af29ca642ce31142482df9a6d4315b7b0d1b1", "16223311eb182f85910d2240de278297030992132e5909c32c6bb1fe075b409a", "09ecb66070451511112bbc41fa94dff8e7d6c42a8e136aa0a6e29a750c66cfa8", "13d506ee60680cc1ee6f9771d541c434627aa9be340eeea7c58eea23f29874ce"), ("126871d8704936644e4539b67734f88e1bff1d9b0ef3e8ce43e3d8bfda036a2c", "01ccea64d7af99d90b3c0382702d544ec01b4a61a449a357f5ef23c751f06c5c", "0798d3681607bb3c931c911256a3e8b03b12da076c0b6fbbe8c4b285d9a00d2a", "1c9f9366fd541ea6992b962595edff397ce8eb8ac130db7fe6ed49f0dda19ef2"), ("0c1b5540fbba39f7f2574539b350222dcbf093b8243e38ac4f9f4533d4bae07f", "1e937024584d9cb5ee72aec7b1d965da8f52e6141f8cb8d2ce252876742a937f", "254aebf89ccf192d379e057088779a155be7c335703538873f4b20a0e8a8f269", "1bed38464a4333d92620af37d349b5b3942d875a8e8262c94c087657ac3879c0"), ("0d4e5a230e9dd136f3f186bfa891b1361a5918505a3dc5c55a2acd0fa7dc8ac3", "24da2c1a2b68977a698013bd328c5c25b66310c8841129fa91c9874db513ed15", "0b077be415745454b7fdca2c92e5edd68758acc3b1de9f32912a52cb72665de2", "0f5cae71cb20ee28603c96a33679cc64e652fc599334178dc22c97e53f42928e"), ("18b9f364775f875999cc89d06bc24c2299dc9511cedb50ebd3c2816c04046d78", "2a39be445124e0df030d30ac389c7032df5b3baf31aa7a40fd268f42c38ec1c1", "27ecaa0da21f11d78d61cf8b086229e4f3e35306ab30d51126f2080a7c75aca0", "16304e0d05ad2aa8fc810d415fd49a4124f87085adc3742dc1ca6e37546fd203"), ("05846fb929ce496f001a2a8a8dfeec7fd0fbfdf91870a3b611b11d42d896d9f7", "105fcbff67e73624a13413e259d3046541b83979a78b271b770db05b2d7e451d", "27f5a00ce4362cfddddc042a1bf1f41f620727d514eda8c152c885e04c312c88", "21ac416828994c1e25e3fb270df0ec65d5eb1747ba771b804efe590bd0a266d1"), ("0e173f9cf4f8cb6e20f1140bfe8f1e0b4d3cc0651fcbcc6d6f1da6428f86f65c", "21c0d8ba84e14525acef927e132545ff7b5b87b19cb5f9fc942255c242f0cbe5", "08bc95ac82de35722eb7c5a5c6cbccc38796f9703b3b7360a9dc0391a62ba477", "2835c03179309cc642d90545a7a7411f998ceb2c082781528b032a1d0526e0c8"), ("0b1cf8490720e4b81fe6dd1bcee1126e060750c24b133bafe4b3b96a8ca29f4c", "1fd0121eec4c4c07692ae20ca2245c8facefd5f917dc1b91949c292cd3dd3da5", "24b3e35f721066be16cc4e27970be7e94aac8a69a4145d6004ff130cd2d111a5", "25244ab8b0e3d3838e82e112c658acd2365f4e3b227b8dd7a693a9bc0f442cbf"), ("2c00239bc49ab60496755c7d0a5cd74f42111007e256eedace7b02ca682e5837", "2e1219aeb52974d371a8fefcbb181df0d0db44072ad7b271aa0ad5f9fbe1b9e0", "03e6368da47c236558d25e49ca12f671129b0691806e3061901f0ecc1d3bf0cd", "0774ccef36f8fe047ab8043bab3de2efe3d055ed5f0308c44ee3851430966e84"), ("0052386c55af8405bba5a66d249a06c02de7f286ddad3a2cbdd13eaacec14e4f", "2149d8d1a060dea4312dde87fa882e161802ab3b82800f23a060164e6369d2c1", "15055e554ff4bfee39e7204d9a133bf069c1d444818c1353192c08f894520066", "2995f635e713344a8b69dfe725c0315d02b0ad2f1abead945ce1351e128d31f6"), ("05c835b47f0356bf84fc6c562ee0143be4f22a4925cb61ca0a689a80267d5276", "03aa4fc69ead01ac1cb852930614588ae8ae3f715c35c0dd9068b23e04962154", "0ae8acb5c00c6e29be57ed8781471987080760b0637ea54f41cab6f77fe93268", "03887c5e927593e527214670384bccf4684ad846d14437547d35134f447ff496"), ("1762efca16e7bc58001d6c6f1b9d108729afd62dbf1c88d0eee968904e004523", "26faf7ec3db85b50246b90bbcc05dbb439739a48016011f4e55e95b107139c07", "03745b44974e90bd4b0c1377f3fcf8fd5bbeacf4d2b112598ddfd2f081d54e5a", "17f6aa485d81121a3284b3240e881c099832aab4a1ea5e766c59dd5c5e71a633"), ("1a51e1a388dfed21e1a1ba3e131c82a3fe00ea09fb47c7eb10089b0f689d86c6", "1bb5c2edf6848774e3a94558fbde82732f6d71cd5315414e417dad620e659a84", "1cd51e48a54d4bd8ea6a65b3d4f7e26d421c5b5c2b0cf92701bd6fafab8620be", "1d11a9bed55fa5a797b6dc78bd88f20f0f744b92d69c122e97d7467de84e5ba9"), ("0ba572a72c1ce72966b1d8a48f0ecf370571e9f232d7cdc98b4de66fe5e1ca07", "01a76d7262fe3a6d7d1c5f4dd8e5e4b7dea41bb83823e5f48d05e5dae8c92a0a", "19b95ca0827839cad61214456d56ab85b1053a15f5e023a2090ab1e98faa3db0", "02bf3168fd403a7098a793f58f681b98b82e3b5d3ff7e61af8636521725dca05"), ("087bb561c6f73a9c5444765e0d8b7e29ac2cbb78f815849f8aa49b361215e1bf", "220521c13b29c50155bb080da4269ff3e6be0a75eb11fcc1cf6989d167ec4570", "081854223fef4a2a9053f8f71638401ed5823e4592236fa3d9c932f88afdee1c", "228d36659d21a017db28adf96174100024949c335d31ece33b5186a2ebb53f46"), ("2c35333e8c40ab8da9dececea6e98560514c27e7cdbe7671224ce3ad263b6340", "077088baaef8f2fec7ad383c2115cc67d018e68d7b0edc1fee5f91bd8fdff070", "0ce5c45d52f7c13fe9bd4a646b5f5ceedd5cd2b86965911dc8ce3def97c81a4b", "1a9d5c50bfce6b45e2629e60b8c9d5b11238fbdc8baee01285675a72b5d98427"), ("0982dc9af1d9c8b77931deb30db4493be267592699a0ee2c4e56e0893ba35007", "154da214fd990e6cd0eee4b8f011f3c909f6dc1500b9e1f7b6f933d5f66bc82d", "1e977e702bf0506ecc64823eb2409184396cd8684b1532021a29e1e06e2bd360", "2a3e9ede21ba0fe2c1440ddb8a777161eb3328bf654ada7f7c96d949c6210e5e"), ("1bf97adf3d471cbf706f00e48316660783dd222f4afeaf1ef7911edcf64d01f4", "1596e02eb9432d31d311d896b462f963ea35933d261096458e86a28a221fa6cc", "0c7c22846ea0c570c7aaa66a770b73c9c458bf7738636735626d3a6136785206", "2cb363c0dfef1b5a01a68332a44c2e1579ce1f9044ac4d054b2367aede8d469a"), ("1054f38cf21d7cfa66673e69c4484e68f212f468d3abd3a44553005f7938ca6a", "20a7d36f60eea804b83bd720f96b3beeade7a9d39b0e77218471319ee5110c30", "2b862945dbdb9aa4099bed4843375deac7fb738b791dbde012964d26bfa47cc9", "2960590a5e4aa5cf09038351d317db09ca4ef275ad79a3644ed04fa7f3cf8a60"), ("0d1333d4d1002245205d732cefe64d0515fb1272c50d2cd0130229a4b5ab1af8", "1e57aea4f945f4c34b303d331195c5af1d9ab7d37a65caed44fb5236b729fc91", "09b8b5cde9c6fa336d46544c134f749d9afeb331a8b0c34e840d9944204077d2", "1a2ccc21cd81f79de2c54d08c84f385f0552c2b9d5259737673a3da18bf5770a"), ("1faa87e0903e1dcf20ff19de725531a4fd09dd67b99190e156936b6377866924", "1c9dece7d901fe87325d7643da167b24791d3f7599d108b5822b77b948780b5a", "23e7fac3e8537cbeac3831d9ffc29488fd656d7b8a08fa84c3aa8a5dfcf01730", "0d05be71707c15ec070166cfb16405211581bc42b3e6c299df1a036c187fee7d"), ("054dd6a083f4f2522b205667c35983965f08f341ba4f680b0744b94e1b86c012", "11346a661cf0a3d0d1bfa875e0e48091403aee703f557a3b70df86e0cbb63e99", "2e707c926174ea2a08202069c9f4c67db6727cc3a91a0f44e5ced073f3e832c8", "108c52a02dca2f8cd789bc67302ccc5340f1a3a2aaf87bcb6fca81f599d2989b"), ("24e797d3990fa08f8f4f8d5503287ba5bbc812b93cf8c53e02d41cbe26ad865e", "13462c11532641e403650a750e22c7c29abeb72e5d173bbe4e7f5093b722e7b0", "15aeb841cd6b8e526d71773a7c779e6b767ad469f6203e3775b087a19947df34", "075201c727697ea6e0f8600f2b2944101fc81b2c1c22ed8082d2526e2ce2c0d5"), ("1de540149a544e3365001fb5af87621bb993a322744359360d1b1857569811b4", "19efd85b53019d623c813747ac1aecfd102932d964d04485cf0f0e6f00933c15", "288c2618c6e4178be58a0d6d9824f9aa54eedcc55617b89a2d2068b5f64f5599", "0669d9b96bbc75d5e0084fb928645a8b7e0b16b51aabf6bc55ccf603ff834b71"), ("0217affddfd225885ceee9912237a55f9b9c7ec23a24f0c0da73b84c884896ac", "283f2d234995c4098216597a437384b4da04817893f28b33fd9375a0323d7832", "0b9c707913590ce80fe7f5f50462ce4d4490bd648ea58f7a3d0d6005cef7b2ce", "02628f344100b650942b077ba90c395cc1556f9f1ea12470248cfb9dea427388"), ("20985867c69d632003734f23c19b293219e0a5200585f71661af5243c8201178", "1b2bcc061fb39b38528c7211978aecb7d639e4e0688fae0553c44113c92f36a0", "1158aec8cca1fddad60338b7867719ee3f4a91d4ea0a25246be5127c460fce0a", "051d5f090ae590a5e29837f12825d356259542c2babec231ced4f7a1211e51f8"), ("152cf07afb47777f6312294cbeb3d560eef7d71afce3ac7623b4d6f7daf9a6e7", "085a9f8ffbbbeee7f932ebe72e3212207432633fd919e3b6b0545ebe776db1ff", "036ff8f2b89c88480236e9f45931799abf7a13b086d7edfe07c467eb860b2acc", "2d2364a79aae48c966ce5c1ab711ffff914b96bedfd7d138c329137bbba060ce"), ("10e99000a1d1c53b7756a72c53d22a652a3596d7cdf521d376f2807de1ded1e9", "21b1315e91799a83d3d92885d02c21cadd144d397d9441b6aaf9e33541f43902", "02ccd14cd365ac366b0bd0aa2df162cf8ba504e6364ee72a307494b90dfa2cc3", "15b44366e04b601b08af1b4b319bf21eee2f1640e9215056b5a9cf9c49a4b9e7"), ("1b206b75a45ba1e8633da2201f80165fd946c54aae0e437e3c620f63b9effeb3", "297cc55aedf9b05e83741f566090d1c0aea57a9f9c8f25568bb1e88ec1f3f112", "2b2999ec44981bf812846c2c79558d3e695166110bdd5d13f2f00c59ded48b5d", "19015ed60c9cbaa98df9e3b7dd5fcfd3c8e6665220cc35e036b1e473d0f4d53b"), ("02ef1c0fd3f29f5286a6eff056d9ca3574666faac7d980bfa881743574f59be5", "253f0cb893972e6c117ea9142364bb8a3c3697f2183cc95e7f9b31ccd56b73a8", "2613b5cc72c5b6a7d13cd42d251cfe2b90f53bcd59df2e8cceed16aef1d7eb4b", "21173c23eb593a62b6d9add677657fbce9976e4533f26a327a4083d15a4c52fc"), ("02a1a0636bff4c70ae8ce9b27fda648a7ad4824607d277678147cbf9dcb20ee7", "23f9f934c9220cb41ccaaf0e32c1c969e6704949a6cda437b575f3d0860d22a0", "2fa78ffae08a6b007c1f9b2efb6e6ab5b55054c30e8698a1e19b582fedcba2a4", "2360bce9d34a179d6e22a4ededc7ed5fe71bd39e2fe087a36e3a22c4f0cc2465"), ("05ac76cc5ef01d75b7c47ae95a885c5876bcca9b625d65c978d1ba5180f67707", "09a62480d09cc3f208916f2c5721b044a0ead51cf01b5fd8e80cfe80e332e316", "0b5a70afe45d1d70f34f8df9f95526f9b659d80ed3b027bd1c4c3ac2c0ab8e3e", "0e4020ee73e932e2f1d6b8d158640aa16a9bd3a873e1689c4ab1f28f5488dd73"), ("3007f3533922190dc193968af33aca20de4ddaa7a08dbc6d27d7d22beba2278d", "0fa759e97a83be7a6182e8fdc0d043707ff970706c9b8a17011c9ba452fc1ff7", "165ec27d63b64459655c2c76af1c62bfd4e91f812e8c93bfa78085902fbc49ae", "171954a1a8c66acc5e02594aa9bb43b4a0fab4b5210aa4a8aa5c4e37e6f5740a"), ("0fed986a298d3d6fdbc59bc8af1baf6ee01b63ddcf0afd66656773d240efb45a", "02a4afcfda318ce5c147be02a1e76fcce14b0511e5ccbcf4b153957b37d75b18", "22df2a8085d12b5cff56c478425cdef383ed4749577e7db4ccfba5463a9c7212", "038dc8c1817a0bd5f0bd1e336ed9b5aac0ea364933acdb0c6689a6f804e559cc"), ("1c0842aa61c1c2a2817a452d6db57befa7c2bd83002d12344ea5d971f1115a95", "273923700de64fb186443f1e1844c933ee952422d7e9c45f9fc99432631a42ba", "0cc64d0eef1c238d2a7c036b8cf0afe8ee48ad90b2c25574718fed70744c7f93", "0040ddd594c5e4c532d19ff36133e527cd87817dedff61e68e1f88b470e466fa"), ("190aca656f43133177a665f87eb37628c14a6d5dfb35b33ed2dac2f5baefc916", "22b69ea09930dc6fe1ffb16c3438299dd6b7872a8d4647f3f01a483ee7c92bbc", "04152575b6104c90eb9014497275c01e7f151c64716d033d17d364444ff54cfe", "252b7c8d8eb60584435175d5b129cf28e0a8292cceebade5adbb1a65ff3cb19b"), ("0e8df4ce33cece2bbe05a314ee3d7e4ef9a441b9bd49c0992c2f7fa7b33e1598", "1b07ab06fa240056b184c054f5928446c14b62afff5e7f0eae0d738f07783331", "05e21435e19193d2d2f0c3357f863907eb5fe64785fe3fcec6f78bd374f8542c", "281d2fe05eaf2d7c2262c0ae5a7c93f0d6c3a5efe829f159583042c0d27c40ea"), ("1fb7cd62d3e86aee4fe7ce3996a03181a27e4268299bc662fbd2a30c9e8071f6", "15b76f2b9d07337f81b46bb48c6338f6f4fbab6c4373811748fd2d34c356480b", "1fac339d68ad85f625af09787ad38c3544361bb13a6ba3cf528183f5d63dcb20", "111915eb703d69dd391dd57b9961393e21021fff2c49942288f664b4f0ae15ba"), ("000921238a5ad0fbbde2e155511afddfe66b59e711ff3d31c4b3951a1866d4ec", "090cd700514b2909fcd07410d2a82121fe15a4386a0672561ac7e9501109d965", "24642f3e68c19b2981f2fa8e2e3be176f8cf1691e15242f7a3543f892dfa6580", "2650b0db2d6b714642d485f024e678e95a35c697e55b8c8ad7dd1f7f393e378c"), ("0322a0bb878be71b72c5ee43f04fb1dd6b93820c533f6604fff99c883fee7a46", "161914cc5320220678b2270126f07341ec7ab75bf6446f9b54ba40f7834eaafb", "210dadcdfb949849184460a6385501c991ebad2606418af476c579d2584c3a01", "0872a53b43e6e880d224ac9881441abd6c47a603a3be4673c940364b0f96edd4"), ("08d743129ed988c43c76f452707d6a196b8e52192b92ad8dea8385cd66615d25", "25e0ed021db737d566d8e8dd027939c369caf822e6304a346950b17e6651a3aa", "1b9c8a410136165e157759a2cfd2b517f9536d447cc153350e942f3423954774", "2d810801f998c13265ab550f253deab15dcdec7210d6ebbcd8ac4e81925c7357"), ("2755e77270010b9193fb6ad2c35508ee48ecce3281ae106127595dd014e56e15", "0f2fa35951e0d4b09a17835bb9a604313b6caf6f3b086293752b94113129f3f9", "1c1b80aebd2c295fd63536852e459986efb4f62f75146353d41c34526e562d43", "0e7dcb7b7d2232222dbb6aba17b868736b42f509dba8ad051bc156166be60301"), ("280588614659b2243bdb55dff930bed127023c64378abb137b75aff87ad6fbcb", "0c79f456c71ff04b6929df0a5479ac55588c106c39d4660a13a9071d21c76554", "219a70c0960ae5a1be719eedfdf398428c8c4a6025815ac17af46f2e8765b05b", "2688101afa0cb3d90b9395a92f6f621ecf2a69fe797a78f8e3dad7883f6bdf50"), ("04fdc482263c1a26915fec1d42e35084d7a7090c49c354628d90fa200c72231e", "2a228183268d84f0e8c64ecb20cc41ad4423757989edddc7c1fcee9438391045", "2fe910257ae7fc9f4f918e644898ff4e0856bf22f806d9194fb41303feef2471", "0e77134dab85b34cddb7a211ce33b6fe23d4a0b1433588760ecd458d06f73076"), ("1a185562c57176f72f1b745d90224a16e7b6ef815104cb64cd0ebbfac18d8600", "01f4ff839029500dea1127a872030e4183a8aaebf26a3fb2c84713096eb3c4b0", "1c865334ecccd491305329fca109639bd283ca3cfac4fd9f2e770d5e1825c9bc", "0e894bc3f9ebc1bc20b346b33e90c8bcc9c541a4c77b3a250612171fa7050e77"), ("1d577402b64553765e543cf714e82979026ede5f9911e1e87f1a8a9241bf360b", "16fa1d1fb8906eeacd88b8c317b7432a0d08015de56ae771752dba7ae3be746f", "05f3d268704947553738abb546be591d3e109d4284a7bb3d89fbe5e93eed4501", "2cbde05563e93dfc596dd5cae354a4bf704aba65a9d7c6ccd73362b5b97d3b83"), ("05a30a2502d284ed5dad5ef4a2f244c6d67f9b8e4eb7c6cbf156ada928c392b0", "0c999176d09ac0d3d4142e4ad8ba0b1c29944e12d054134fb1cd8aa03ffe812c", "23f34ed8c025d1c812eabb93115cf7e99d8f774d29769e01b05458eff1c22d90", "2598f6554eb5c3ad6c40170d26f198a5c4fb0215027ebaccfcb6d5737a9f385e"), ("1b64e875571af6a5bfb2d4d718bcab0b6035b060e35714455c759333e9afb205", "20dfe2d6d55f04befff61bf1d1f65e2017cdac956cc31419a39d379de517d715", "06440eddd54049980d521f33aa088e6aff5246d785378aa998bad08cedde10fc", "26d18f40e48dccf6dee232b87fd6a1bd4f41c31b1ac2e0cb2ed54023725f62ef"), ("17a2612a95ddf0176fc6bf6a6902c007e98fa0d6aa1fb40e1851d99672fe3721", "2014260ac0d546fd67512a10615aa8462cfc8393ef9d3dfc613b24e2be7108db", "1a19b55c3f30680208c666022c450346d4be63141f73e836fbd6faa1839cdded", "191a588085ea4f9661d220e5165a1e27b9982988ecca0e435de08ba5732558e7"), ("27ff88e6aab8f712fe6182dbbad9088fb936b39cef56c9ef5d3fffe4ef72109c", "2e71a2c9e62cce1a266ccb350ebd3617d82b7f58da53f8d05017ae355716772f", "2dfbf86329ae396d8c5d34e56fc4570ab49fc4419ad0eef0feafeb155b0ed74a", "04df55054e4534deef6dbfbab04870d1f3d5fe1a3a1b62b43ba23b273dac0652"), ("17b5f4a10dc8efc5cac3efa692988c129f8ff5ebe6b9a80da7cb855730eae341", "2f0bbb4c14c900908eff617afe00b1398d9d90a9f317e055907a73dc7ac90764", "1d7494afc7774fcff165b423976eec6a7b9c924de4880d4039cc20786bd460df", "0391eb5ee26cb204805bc7d78d5805e245bcd2ccd479de69523dad5d293f8f5e"), ("24f2715f39ee6142ad85a2641e48a933fc4103ff9c118ddee01edf686d73ca13", "044d00567e9cccde81fb853f5833685af0c5dc5a6c7356d07df4bfba3b0001c0", "25394e3d28f7b51aaf73fc192bee526fbe1ae8618328b9a5df62c9dc792fd51c", "19a0422bafbd42bcf5370af6cdee4d0af2cf22238714e3ced0ea18fde4ef9045"), ("1cd9a9f76e0b98577ec0c21e9d347b3cda661d4adbcc0eb3a896bec6b603bdcf", "1bffa392dd16ca5fad0f2ed7c11b00f2f110a5e75776af9b885aae5745857806", "23718576be43fc240e6a21b60bbe86fa95c60ec5af69b25e3177061f5e195522", "04fc3f30ea7e91de7af39de13457290ad902a7a646a62fd07aac78405d59f240"), ("1c61fcf30c7c5c483e1c082527b49b7c4ea727f9bc6ea7c3476518304dc88d11", "2cad90df173953294667f3e0b7af58fd9e1da62485ef4feccea48003580849e4", "00f6bc5b2faaacab311dacf3cac399df9bcfcd21ee0143f20f7520bce93d746b", "18b3b298b4c487bb80af52531714e3c1477e86a62e2b8694416fbacd049486c9"), ("217fa1402474018da873b793a7a681ecafe3ac498e0c413d4cdd836260fc7619", "0e7db84c796558e8a7fe0357028acd0c837c0e1c1fcaf8e27cb46f830c4f88e7", "22fa56579b23106846856803e76469b39d26ab721af77f1b9844e381e36d54c7", "19641a9c1fb1be93c96071a9335a204296745514a90ca4211abca56871fa76b6"), ("1f227289387a624881c3abdec6eca32acb3244ce84dda2dc3bb49f36d7779e42", "13caa68ef4328c26cde16fbfc71b256b36626aa97390a4c9282a9004945aecb7", "08d5384a06dbfea4d1915c0b6179da539ae99e4e0876e159bdb259ec54d3915e", "2b486ced2df6f516baaf56e151f7e54edb75d54d84bae9a72e684e51a7f771cd"), ("2e8d3853486e6ea9fb048ffa470f5d52a4743b3d5ad0bb0509553fd5cfed6796", "229ee21ed3fe978054b97172c79f0ca37b103ac9cb9dcad7990cf29dc5ef2ecf", "214e87bccbe827bf9a3edcc37534aeaaaeb2bda9eae872889fb7596102f3799e", "0da81013ac343c80a6d0127caba5e6e66a7695be3b5e588338b0d84d3333b057"), ("17d132c8684d4e80ceca3d8224fd7880fab1c210ece522be4635bd7baa600b5b", "24317366e89e963cb920838ba2fbee501b37a6eafe9d581a09facc28f0a69885", "133279deedac959d0c82d695098fcc25410380f0f6f75f0990a4e1ccb3858ffd", "172ec45128daafa1a733a9920fcd1f1a38922f01b06bb081b5b80d78f21cf566"), ("0663d5730d67445b7f935180f58a5423e7e430be110393f4f771457996e8cc3c", "2f3827e285f122c3aa93b3753c2e8827a71bebeb624c293cca3229dbd15b0564", "22774794473f4c3c9063a6bb24aa915687c5fb36ee498ef2c218a5be9a0c4ef3", "18175d229bb7529ed853af2ee66a96128e6d33d889a227a688666912a0e79a45"), ("1fde32c3aeb090680c76e19ae82c5bef32c6265f29063c32e1327701a766dfc6", "00fbbdd9f92cfdb53b18911d08aaf877bc3064e178f9eb133d3bffdd24d17155", "18b42a56f566895a3748810a4b6f1e4db65b7a51e1dc0a401762f647f1ea2f2e", "14afc155111020e8aa89d249f665c05f0e169c12ce25c99ad310ebf80f3a0f04"), ("044fb559a91d6da8757f4152b8fe5aeb3de92cf7f8d7ce741023e7132cf0ae1a", "218dd95a9f59829b9fd8ce13bb960d8382c35f1e5c5ff4523490e2bfa5e20c8e", "2cb9f177e0091f70a1b34c11ed1628db3c2e7cf02c69caad5e78d8f7bc753263", "2d28aa6723784ac6aea7adeb635969d601aeb1bced779968cc4be3a70f840a02"), ("17c7bbfb19c7780653d052c19c245e3efb7ba31c00ee40a13b79ef6346899804", "1b063748b425bd2e6dce886ccbffb8507b456ae8d203788a0b775d35b83338f4", "1420038871d9d88161feb891c82fa34d0e83ede71a3d5c3c469743f19c2ae2fc", "1cafe1a53e8f0cb6ba2a1e54ef6c5eee59bccd24c81b9039823f9bc1426e001b"), ("10d31b7365463b3a38a4fc75f633ede769cde612397fc5215791a9e7362b0ed2", "160f9f0ef8243602dee0dbc026a01864d6384f55b46419863f00922e48f13d82", "1a485295c9ab5820ddeaebd317e267d098f867d7ee7f8e45c6728e0142419779", "2d7b12d560bb1e4d651028f3e4c93d8ea7322b3870b0b59ea1de5ff36a2b5bf6"), ("19648789bc2c7f23fe58403b746beaf9363617b055ef8381b5c4d6dbd971a17e", "025e4aeac571c13b35d2b5e9f1dd43260c32bea011890b87fd4f038bbed0caab", "22f2a5c8b095799d6b44a45d9aa5a96f8f9f7840bfa7d6b40b06b3bce6f09df1", "13633fa2066653d844fab34d5167a0fb9891da10024c35324a6f116a2b5cd16f"), ("2724ddc1d7621f3cd3c89b968839f87fff770b800b086b41b8a19900eeea03cd", "2afeaa22447689b6dc304285008ea1efd24fed7c6182423ca56a60cf4e3e9175", "2d19f45861dfbe79e12eff3a716d6037e2a5d91f50a57c0b52009954e61d5b37", "00006c34fb76409a59e0b93aa0dfed671984e836d864e3786f19b32073b1fff2"), ("113aacaef31a4c29bde0c2e10093a3315279bb62c91d1726924e6b752312b323", "08c65367491f244546bb30ba55e7f1dff21dcae633278584b6a4224510fc9a10", "0265de2ec0c7da3aa6d149b0b99fad35dcae87e556e33c41d6f5baa1936e7d9d", "2054ead06a31a2bb76c1cecba82bb2e65d3f3f117e71eb1477bd04cb685998f2"), ("034f042fd8fd30d26b467c6bdbcea61c3fb70d8d05bff647932ba0c4522bcc97", "155901417425342414519d80c17217f381a1cd95e8fc2169a36a050991845881", "12485aa3c5ec04a552fa3157dc166f7b8b1eab10e38cfb286352b012febcb043", "0ac1fef65f28edd107cdeab9ba61d12766550faad12e5f18fcef106f289d9f08"), ("1851b5d7e79d497dcdc3838579c9f6f7c77cfa324df5b76acbf8a816c85d9233", "28ea5a94558109d1a754f7c94189ef3897b55b28244dcedb4ab65e55944b6e6d", "118958e74c32dab690c852f1e92bed079e00db988b3e2e4f9caf8635f38fbbfd", "00de9b21d3cda6027d3101bcc8810244d825d83eb8e96c7bd5664110b8c0c2c7"), ("2b67cfb44306244b56792aefd6e598613b21e393762b90519872160aa883c89b", "01a14bb40b8b324a4c5c3b4eb7d20e366d02929e21920a8c727139b5aae496ab", "001a6c2b0d73cd9e718d94c67089e90c6964cf2029636b55811dedf542352e68", "0fe7e768029f6e281269791b6f7964aece1850deea809fada59f9a55455fd3af"), ("122a1dc859f729f6514c9453a3180a956e5500eb9eecd5cb142ce7a22bb61069", "0e1f3d9c0e6b758b8b8558a6860d83334d134c3c304d931ef7889a9fee2db098", "2e233527f4f2be671edf886aa00aad90fdddfe9f2dbe2c358029e04e0a798743", "135193dc84e7469e50e3af7eb8a3448149b1f92af21127346a36435396d9fb31"), ("22fa4f4ab3d7e2c3b8fb13a5e3cc664c2f1904c5b6ba0d83c095a39fb8dbf938", "1ef874cca2b875ac72283d115d649d89ef7976b7d5232cb1f90ab4f7b334085a", "26cdbf1c3914fc591a2785b5c2900185e5a286765cb1d307be7526d29500549b", "1b5fcb43693fcff549a968fae876429ece53812d858a489f4a5b2887811cb474"), ("305fab04a41a232bf599c901e4a6771c3c122bad0ae25660b0450b8ce87a7b6a", "0dae1adc9f521e76719b12d35625293f6fd4af5e3cca046ff3a9716b4a6d6641", "048792f4a6c20f580639fd5845a26882379d67cc6a5ee46784bde7baec5305bb", "2423dd95d98bf93250def12ddfb1be0035e39b18bdcae5cd9d7845137e9764d4"), ("2c8d86a54fe65a4ff352ecd00b817b4a80d07e24c95de13abd144b6689b01290", "01f7d4dcf51d89ceaaf89f430e2ff6e71396d59a8559cabed7a78cb75dfd25e5", "082fc3375a2f0139d5ba8a7a7a6619a10c7de7c98bd8d8159e8a50566187d2e3", "04671173c683ea1b3f9dfd3974b7807fd2841775efd19e716f237fda659fc803"), ("1bfb2f6195985cfac7c9caac944b0dccb129440bd06b33c4b6ab887eac68841b", "25f13d7863584e5c13ace774af163844828a67cb9f6acc079aa77f7cfbc48996", "09180819b03a5e99a727455a4e967e1b9a47d13a4d1d14a389c22e48e3f5d602", "2585a8b2dc1b911a2d3c35bbc3f75e2accbb5569d8555a873b8d240ce6c1d750"), ("048d0c0b7a08b2f38493f6e398a612f18aa3a7117b44854940c554554663db4e", "28451f9b80e96c2394efea22fc8de8a5834b83b1f213cea14a1ff8aae93b5f8f", "273cf850b933b7180ba03892bfd7b1c2730938469455725704b32a3d54bf343d", "1b8050f7c2ec8c90513566c5d7ed92ebd3928acf7e7559f11cc9325e1ec29c4f"), ("2baf8f07cc6ebdb385c963f6e21eb5944a15a52834b1a23bc61616b00bea8c22", "1baa136e2884c0fd05128e4637d6d04a824f8c4aebbf609b8b78e4fe1d74a0f6", "0c6340015ba3f2c0680fbe4b7ff6cea2fa440a6ad3561c43103558f9a285de63", "19ee7d0f748fba9aa3fb1fabaa1dc33a9232167d3b7675df08a8746dd88010e2"), ("09579e30a4a8b307e73e94b1cc322f0dc97f7bb048217012180b410692232bd0", "0347c2dcecab6ab15923903857048be12611a391c730d64ad67b9a7533fd0fb8", "0dbf4d4d4379794593c6db8ae458bddb417ed15dadd54788f63f57587a53fb6c", "238269985f6251b0d7e8d16000ab5ba78d8f8027c12f2c960a9c8a4fefd12f2d"), ("065a634bf690b77309d622a00b7983469bdeaec67621a448d579541f97ca0561", "125bb10b2addb2f97c02fbae9d3dfb7e277495b3167e0413ee988c199458d708", "0b1e9fef04c24193e5dd2c90f373b125e749d34c06b51e2c991cb59c5a951df8", "0050aa661018c6e06aea068a35a8e18cb5efcb0a08ebaf32ebcfe1b65d4cfbc4"), ("1bd5c15955a7996c1d596f51839a26ba68d300474df46e7c917ff1212ed03b3d", "155a62bdfe022024e84ed929540ecca55efb5fe8d23dbbc83995331bd312a4bb", "08cc8903f5ef95c27eb05ba56d46c81c88eaf06644ff54375f1cb0b7ab0012be", "20ed5835897e3d9a9c343bcb43ba2cd5e4a36b909e1db73b17c02f6576ff87ea"), ("206f75b991e0962c94685a6feebf82fb75d5e3ddaceedd3affee5ba2ced8b4fa", "0988ce1db83135a1ac2281c2504cb88282b7cc1ace911903734ac86c3c42dc2c", "1607e592e30dd6529879e25dca612a5be3a4a70cacb4f033582f2ee2869876b9", "1e85167cde945c9ec8a92e6aebfea9df7b0a260ecdb2abb8fdbabaa58e96972f"), ("223f37415a41adef1a16f4d80fc91047e2d2b5f13dc299935e593cb16f26b630", "02d8fa2ffd0730f8d885d18c35b8ddf7083900258cd3689ef5166b77c398be05", "0f5080e7d145e5e3bbf4712483b291d9f231e39d031e914afa6e2a7f3cbf0138", "2ade335b3c42b03e3b433e833e24197f1622556fdf271b8cc8952707c6f3bfbc"), ("243de6af57e470b0e4594f5b28f3def0655bc3e2ff8544be292573428779da40", "15faade4004287448c18977eb73f6b17555605137a2b91f242aed0aa9150cff2", "20dce0f23fdc5afee1303078a481a8c5e84f401711c0e238e63e348c712c65eb", "29c931d1f53af3fdca36213837e578aacf28fe1dc5a4a22397f9c281e163e149"), ("2b7cd0d05bbeb985d643057263ab2babbd1973abc207f768e5acc3e41c696808", "19cdc3ac2e0b8945286c18e6c30b8e0d7a7249c01fb9f92689649f81cda18b76", "16bdc4327a3d934e2d22d3f6fbcd8fbea759d4f53b957efb257c7962cc1d7bf0", "07b2d5f497d953144c6e6b29a1d0a4fa3afacfded68f30beec5e1382fe40a365"), ("01032b50c95a9e8a97ad530e8e537f091f55af58666327215282970de827b835", "2777e578ddd3f9a9df425545265627e3189f82509c521171be972b88006aa2d4", "2d1db493815980ef5eb00724fefc7f2a4b8318ec7cb298eaee358ab54ff1765d", "2c365fb089187a369745fd53ac3a4e52904271c6badaaeae75bcc9a0d923feb5"), ("10fb68adfc0aef5d9e168806a5dfbf429181c87272cc14c01dde818b4b3745f9", "2bd3e54de9ff6f1a489fd45bc8093fb99639594e557956a87b48df8f267fa2d8", "123a1cf7626fa7de7c4aaf325ab0b7b005fadf199520235c963d4e71c69baa5a", "0924ed20184f0ba9dc0957a2a1ccbb85dbda32d00048653ed691e9a4235035b3"), ("169092fcd5e95f408039f847adeeff1622447264335b529d778e489beb4db308", "0a817db2e2f86bcf30c69f10e80d68f8cd9508c9c632fe12f473485c340d59d7", "06a7eb901ec47b68ee909a4290a3af1cecff0688ed4cccacb47ca28906c8c573", "16fc3b5b1098c0950da5c07364d69aad5959ce62dc065f37d7b98077d3939cdc"), ("00500621077da49c97cbc0a89d992933b398da66889a68ab0a2cbdf97f9113fe", "06955b32bdef862d043b7b590980ee6569bea16e25253a20c66b1eae0e375b80", "09ca69e6bdf4ae22e1e592b631a3347e673423e3a6633e89d27f4eb56f1c3c0e", "1e7fcf8dfe7d67676345ca42984f38cab95c1e53a180ca93b742f9332a1a402b"), ("2033a24ad3cddd5e436c601fdc00a24a5195b0b69118788528e601ddad6098ff", "185693bd7845e506501e06f5346c0df4bb93e6891055335d9892631004bf2f6e", "233574b6ef378af1aa5dbe6c2955a4b5346a625755d6a32aa20191912ac1a530", "1e86c311f00412599f3e83fa87d0a9eedb499caf16fe0c2ef8abe5a8c355c656"), ("21afc664c4f1086bf31ac21f918594fe2522a5fae452ce4b7507a0b2998821f7", "175d57bb2d5f7bb9320728e7c9a113fc2562726edc5d258651f2b249e795f2d3", "1f1a03bee394d25e16066a452ee569f9a2d9f0be19f3bb9343ea394fa85d7c16", "2d9d6a912ab8740c412890b69db05f3c74c6c7de05755f7fabfd72584b84f0a7"), ("2d5831af000f7dc23d201adeb3be7b0e537a9687a10b84c2f163a84b07c5b292", "25b83820652885ce3bff28aeb0aa23429ea1f0ad9c6d6d5449a9d65cb393d669", "1899f7a4be7895ccf8009e3a8658a35ba413953753cddf6b85945edf4f042b55", "15211ae708d1ec3f611fad816158d9288510c70a90423baa0cd8c3299aba7b07"), ("1ea9ece79ec55ff611cdaae05c0b0fd81d4220bd58ad5b74220650981d0e31b1", "29b910c856ca1fb786319c80cdff9fe0ab53dd9c85547a9450a71098013213ad", "1a9214a5ec7ab05bac4d8bd295da1b9b741bc3be679722ca0397eb51b5d63ca4", "2a48f031cbe355528b92f4dce3150dc7a0f9d853690dc3260b9bae042f17c463"), ("0e8e848d9c3dd5a6764618ad9593cf81e7655a399e9ff441d31a948f65b04e50", "12aa0e47fab3d8b488153d02bffc1e1656a96da0c74eda1de0bf479a219e8cd5", "1a3f1d1dee56c17225f6334530d37a9b1bd562e3989a46046b5c9e0f3bc48242", "130c6d8e322f5caf96f6c9f8170a7617f77f417ab962d2a20d0372649dcf96be"), ("27e8fa052f525a1f4fd65be38acf2fce040f56ebd372779d83b5403ddb51b691", "2c1cd892c55c6d3db3644fc6a3427e7817abe275036c2ffe797839f42aee9ffc", "133aac51b94b63002f7ccddff12012fd89442b717120dfe2c6de0eeeefeb689d", "2787b72a37324629a610fd0b05c38f94ab3f50c2d97e4fe775d4036004523ca0"), ("26781e27cca43f475be171708c39240967f3e8b40a47d6504345b71d7a5b99c7", "2f52ecaf2684b2192f70ccb3d1fb28e59c24153b870071f96a26f5b316c7487d", "128838a4fad27c333e9c0190ae3b64c787f75fce1fd7f7f5c36d323df75627f2", "147fab952017da0faad58f7eab56963ab623ea93255066654952a850159d141b"), ("00c66e867f3a444da533537b94879c10d313fdc6bd24652cef2e5cf8540b33b3", "07b7668d21d019c4f4322b8ed2ad74b0d6a7520e235e57eac122a01b2cce58ac", "19797c6fc5af042b4ee3e94af8f29bab517c7b89d0c79d3e15c138142122df8c", "17a8cd34d8a95fb6f404eb082136534c936f5c7cb9198f5802e8fe8eafc15577"), ("0c8daad2da85f17e878e9d0106f0bc99e31cbc5eb8386ccf2a524f3e485a3656", "00d157fe6431d172b3ab1206c84a2779233a3ea8472c5f2af66039d832017b59", "1e1581177f9337f8008bfbc5d40873a22187e4303ab8e57d5766bb3394653d52", "2bb3cb65b1d131f69eac5c7486bfbda6011839888443e8d30d6694ff06546355"), ("18b6cc5a096ef08503500eecf00ac8d8a142ed585be658ab230c7600bd7fcdca", "263f7eb3c9d8719cb2e5b355860973aa20bbe738e927c9f74fcca123950c068b", "0be36d8a3eacdf16a1d96442e3b1026f8d0037c06dd314c54b582e48818e54ce", "2d33040b9eff7ca627c4cd16af8bc853dc481a8bd57c8e114367bee1c8f1ddb6"), ("01cc80df2251d737d705d879cc735bba6723c83cfaff09b8d698845c05c47472", "06ebe9f961776971f246da289decb7447dd23752f19a7a07761f9d249bd72986", "1ebf0a782ec016e711f1be98951ff4e045c52b91ec81113e214e4067e4a7959c", "17e33373f2f1a3a6ea7bced788a07a7df1377e46cc05f5556e4aa4ddb93c3fa8"), ("2c60078b2d0287b206b67a46dda4282d00d463d67f01ca83893b51176fb916eb", "244f9e8f2c731da18cf1aca2e697bb91e4fcfe996f4fa15dfd49350d8f2af167", "1c6ea7f70304bddc0460fc070c9c018c16179e6b627fe1097355193132f2043e", "0c4d282603a52fb68bf20a1cb3b65737de1634f536fd86eb9fca30f79f2bf14e"), ("15aa6f2d7749d1ff0a4a217e271ae85772b8af4a7cd12411e5d06493907fafe8", "26b25c103695ede6dc3d7dcfe46f252b8097324e421648b3a2fb885a1f23fdf8", "093ec322b15944353ddb52e0e497ab59b027b33cad2d45f5314fe75d2a61704c", "13bc46bc0d226a6a3a0a858d56f3e3487d266adfe371579ca4288d74c36a83cd"), ("223d994ccc76b4fe9299cbc40ca886c5b7c8d10c304fb7ee6be297795dcd4582", "1221ae236a1b1f1737d30f8ca13bfd5c582c26a44e64abf7429d8d4d62fc6792", "1155105752576727f2c3ac132d3889ad2f9a22cb7bb34af197b4e41d955777eb", "2d7b2d0e66410b74fcad0b48f67dcd109085763ca147a39e55da61d3fe24cee5"), ("094dfc7a5ab02a16db1e93213cf0ec2a0e672c4e36501b9800f2f8bd5e4394ec", "147f5c9a94925522f0cbef8e48f0b83daedb030d35eb8608c2ee9665fbfe4ba3", "0d0ea23baa68cccb67829f456d9ae4c16b0b7f9f2864b8604501b4cae96a5dbb", "14b13dec15eff07428d96b1cf3b93318c5690b833233d98ad7320ef0873db64e"), ("079fd678b84ebcce95462b91467685f00ee2fc11842609a7176d2babe2d5e73f", "0032d9b199f602b69d1eb0914dec6d6f0c03ff52e68e44d1c22e432ac1eea6d5", "24405bb21d24a6739e91faf02814a249d53a223068a1f45284e90d2080c0af84", "0552a5948377a7c2485e531ea3530435c77e4e5ca2ee8017f41590973a693668"), ("03adda50c5b0b33245627536204f8766d0055559c149841a33aad0a9e8e8a63a", "0163d42094c905397433f36b64940aae9fd83e3f566f050dc40a14c23e67f807", "0fca0c0cbc1500e824fb9e3b0bf2d9bb6c98242e6d640da86031ded163d69e6a", "05ad6ef07e4d37a030df94d48c7a39161a58e1b7ff835782b9662b5596e4dd3a"), ("28f90dcb0e1cc547e5abe7465043c84cb2af7dc9539a0a88d61d85f503c57799", "2ef06e0fc87b625c8a58c4909caebaee555135407cd48e239a3587e31eac0a13", "13839c018e3986052846f95562dd0bd9a067a3f5f4cd71681e110298aeb47a43", "05f3ffacd1120ebe77101328980735dbb926f39b58ac36dcc8724906d3633527"), ("27166f9a64c542bae531f6ddec84504449c21f6fc79f084ee6d3b16c6b3064ce", "20c4fdb270c66e0da588569682a35af741d7ac1128fc58cd4d15462263975e62", "18bbf820e4902dec8cdd14faf34317339980f4852095dbcbe24dce53deab1236", "1baee12fa0fb79c35943c37c796809cf78ebed5cbb7be49e793c7e5ac629390c"), ("09eb0966be98c491c41e66adce31a33997c0d95102573588b34ef1b26beaba13", "1b55150e8c557ae927e4335f4da4738cc3ecd3558755d0c70a828d565ab7bea7", "1f484471400354e8a81c9420e4db5aecd9551ca47945ee82c4a016facc51d6d9", "0a51795ecf5589a6aae0c7379d2275fa80ade11eee34435b092ccde57c5373af"), ("07be798644fe33dee7cab5a4a14a559d06103ab70ce8bf9d35b8331c4561e5fd", "3052486d8b1e1f80cb7bd1c050c065a52cd3c9c9636912cb7d8fbcb3bcab3edd", "1674e6b7c5cd5af6ac3b9f15ad00dc0aa43ccf2ed61f793a278de3c95ef5a1ac", "258edf5f71213dd3b9b6fb6a9bd4c08001962e22bb24e10c38399dfad0cdfe85"), ("09ac3744efa7eb53d5f8813ae4adce84f73c63c0c491b0014157f807999cf37c", "2169b099ac136ce326afda1ff7ac1358c487d2f214f2201d2aa8bf0bd5c09dc4", "24ef407b27c7de992b57867b6f9ea2e7bedf646863f0bea61c14e76b75e58e4d", "1832f00c018778f7ac3579598c43e815dd58465aac966bf67c7f3360535487df"), ("0f942fe3e9161f66d4c449e23a5e0ff0802aa3cc9e663c7ff29e310dd92c861c", "2ecdbc3b634cccaca09b693b889defdf32f59e10d352973818745a4a6da2c72d", "28860cb7a67598c63312ac4245a1fffd1ac5f0915e4e4f3e5fdb4582e596e653", "19478959787b6c82e233fe2f47f744ee71463db02724bc2bf9f7fdee7520d69c"), ("0750f6c0abfce2bc477ff47ae00fea6b7f64b8d995f57a58a211d739875cc469", "1fde2bf6d787ad371394e45ceff85278d4fc0d35e2a454975c3aa2bac5b60ec2", "0f7a186fcaf1912cce5209bb6eba3a39010b1ea7240a0ac3395e5bc8c9a0812e", "088f02d3bd8dc12c9fe7261e154f172a63a1c1e327c0ab7ec9f7a0f519360ae6"), ("14b4f7126784da25a6be10d76e8a4df88479add47b0c22068660e7ab9ad99d2b", "19490e076e25acdd2fc7bb509bb08e47835b53825a0cd8a5d0fff1d5555c244a", "183cdbd418c3256812f8b3b410b69a084ed7fe5585840c028f3cbbeab8effd40", "024f9ec22f7e95442ddbdf4781cc5af85b3355c1614d7920bfad14d9f391ef63"), ("0d32fe8ee4901336062ff075768f0d753f5016a280cdf2889751d711ebf56ad8", "05e56d696cff25f0c392c32d6283dfca2a4239ce5f57238cfe944890f9109ead", "0049e151906ee29498b673ce51ef2c01fa8353240f28e984409186779dc466d9", "00aa18ac2d22908fcd670b21c81ede1df4ddf724b7065289691d14d778b7c5bb"), ("052773b309f10bef98f1e28d275b99952a1de6091f5385a959ff500da9061cb9", "1db621739c61c4ab6f9d941249ee85295480867baf1e194abc655c329e08aa8d", "2c12f86f90b3398824950f8fdbea5e4f90775aed3a3de97a10aaa7393b0a70d9", "18b4d76f6b78c2f3261d45d1609b861221efe568af35309b1181366e181f4b87"), ("22cd7cea45ae7decd9717a29edbac3d0e2cdd32e1691d74eaef4fe50049796c5", "0b9b55177e5344d45747793956c8625a7ed257d086c648f51f7ace899ec9b495", "1ca9608faa0d457f1480ce595a1cece10b3db5d9a90091acd02e6e8965bf35f2", "0d59ae9ca5c8be0bdb61c87d9f41dd3d79d9385f7ae0eaf10a81fe1ae6fb98e0"), ("1b761750fc23a6a3a2e11f83b4c09faf6d15d920c40b12c9ad58fd90e6d28f73", "04bf233604315a4e08abe6160bb74e0e482a637a395bf64d2757c4e891a3b83d", "25746d6a66df9c69409ee61e24eb17599d2e631e68c24fe4048d128a78d56b7f", "260ab216b85ef257feae16da26c058f573cc53dc13cd8566ad876098ee73fe51"), ("1c101754ac2eac4c23a167de8cdb2c5ceb0289fd72d21e2c6ba562e4bf4734c9", "0e3ce15f5bf1f35fc7092f93e644482535c42cffcfd3e634c93879b09ed3d540", "2babfeaddb1cabb4f977603575d3180fda27c0e9c97ec3584ed54378d656d469", "281c76339785b2c80f3ebffdae52a94dc6f1f3809224945a89df9a29400ac491"), ("1abd9edd3395995643cbdc21452e684e53fd5f35913f3bcafa84b0daf853b127", "230df463b156b5a378dd72b3e3c9359def3efd39dd5c273d4f7380ec313f4fc7", "1c73b15d80a7efb0044a9e0e98ea1022c496934d309a62ee46d3271806060c43", "23692402ca472b725a9758e97d800561c2e4a3d1baa4bb3d855e615252c9f9b3"), ("27780545132ba1b8cc85154ae302096606c269159777f846d6be203938b9059e", "267b18106dd58bfae0bb5e64b2a0d2cb9d1ba80b8092fa25d6732265fc72af0a", "0b9d050f5c91058b1c4e16b9c71d691db1e474dd237bf116d8ad23b35a85678e", "05c6660c5ca93ed8797b23b784b358888f4e4b8f3ab6f9fe765767e4ecbaf71c"), ("10a240129b167dc0722d92b4e3262d1e176b6ed6c79f44e1a1342b6cefc85fae", "2618df7745ab359f2e834060da4f89de20ca54465baaaecb1764c9113e408caa", "2bf2be0bc5bd4960bf399f90f73b6ae6a56282ff2e115ddd9a2abdb7ee672131", "2040b8fd5ce96f258e4c276116de7d47535646b9c9a6f706190b48da4da56847"), ("14d96af33170cfb7d05488aca95a8fd4349de40ed9cca2ea879e3cdd4fec7af0", "2046f8581ee15df65a7cc71beaf08fdb43edd8e146197bc7629373c188ee099a", "2201c1dda839446455e368664fbf6422e8ec2a143d943a0f8d1c0d739f942d47", "298e42db28ef755e448671334e3e44249b594cbf1c1ef6cd0e35aa586733a9a0"), ("2cf62b045975a8258aa70827711eed2c251d96eccca8e4a3e55e1a972dcbfab6", "14791222bbe3872313d7605da69845e959378a281c6d449ca9c9198831efe37f", "13c20ad157731dd93fabb4dca4664b57cda0c8c1279836c5b9369267279b906a", "04c8aec589e1cb4867dfa30ed68c971200a715e71e404471f231cbea655d5c7e"), ("1e4e2e57814c9668315ba064832968564e0412f89383c1cbdc8a5fdd3fb83e41", "2e637978271b901b58c4803629b17cf4fd2d24c5af30645d926cc0710e889b29", "0bcd51134bcd5ef86364ca5d33c38acdfda6d38e2f27487f908b82467d716f1c", "2d84521fe8bd69ff3613cd77b0d84b93357a8f6f60d046f51036a954c9c1029a"), ("2498153fa24cc333ab21a8149299a46d32ec26af139d0af3db88cc7cbfd32460", "15c0cad41dc5d1f025796c12666951b78c0ba9893277d2ac280fc4a85b4c9e91", "076200bac54eb6e8f7f6da401542ef53aeffc04dcc19290eebfb2f4b9f0e3f5a", "0624c20c43aff207bbfef4b245589fa971b15c90b181d9f0bb2bafb1b09e40a7"), ("2139f5c150284cb70eeeda765f62e88c905ae865385ab5fd73cb190bfd4adcff", "0de341e3f757fd1b55aa4e289a29f4d81695326cd59fa07114780a7b575eab2b", "0641b97be235100d9040699cd4249852af566e0688f29ef83d92f52e35740dcb", "262056c4f3b75f5bea6a25434a4d7acbebb9c61dcfe6abdd011ce4b85342a5f7"), ("0d1305020e2eb41482662cb06387342e531aab0510081e66da91f5a82b4b4456", "0ac955597086acce9e088990ebcdd20fc31c01303b672d486df673758ad68b8e", "112a4fcc773a47d4544ce67c55a1785e85b5863f69234653be4007c5440b162c", "0e1862cf5d63dee2f093c7a1d20e98660569bd029bbee6c02554104baffe69c2"), ("07939fe4ede255727b06931706142c9811c72731b66ba9246d2c6f5aecb0f8e4", "06b1958ec6dbe59ed5b1aab6efb9152278e09c5811235d0ffd18981c5d6a7499", "060fd485a12b87abae80dbcd1bf7206293b7524739f0429cf14b25e6236e3735", "1a527a9b7c8abbfa454e15d0926c3e6effffb957300317d94a3a461076761b73"), ("1e2ac0155f8aff35609c5ffb85aa44866f6202b5c23c0794282c7a1101c155b5", "081fbd3c528ac22280381ce66aa5dbe98f4f04e65f8c0f0ccaa490543eb0b3a6", "0a05f9433578f3d2a179ffd4519b56d442bd5c50ae0249cf12d90e13c459f155", "15c57ed31c257fdcde99cca28f7afcdab029600988f82a97e5ddd7b0262ef563"), ("2b2d7523ef65ef4875da54de936c9239d92f5c3c9db859d4245933574c5aa54c", "270966d7a8b24d959537d244f5deaf8c92885cba869bf79358d636b8b255b8e2", "1d5e43504a11637a59a1406d7bbd19323f1a2408809ab948b6f2108f97e78e59", "089cfb11cfd11417ff21c3306ae93096f9ee3a30ceb3ae0425ce5e019849eb57"), ("2737800ccf652cc8a6fbe5914f5cde3a5c7eb3f23b6fd82e01402317fa0d557c", "207b02fbc6df31f23d00eb97773a73a90e5ef2b1c95e865991e45abd5c714e81", "07a9eb9e9b8e87165b054b0b4cbce7702f637836e93ac71436320570e9767829", "09dd0b74d1e7a3ef88737fe5196a3a98bc330df311888b7b12170d25a52d5ae8"), ("1650d609f80b6704dd01198b0eea56d0ca0b3a953525c0e44aab846b66fcab23", "2de9efa7d471cb922ec73acd3c8e8a5b6cee15c146dbc2032d38fc0ac8214c18", "09b796c83a1ee159708569d5528c40f72fa3b2a409d6ebf54f0dbc14354b0a73", "0a07454e5a8a24d18339ad35b415e1e91d66c6760b776e2abb4c2d39c612c878"), ("0c46383aa52d076d3a139ab57742800df8a1af7d709be4a7ca100a8a927d85a5", "2c6c2c066662e94ad572e64a75e669a67ce85ef7d04b26815dda4dec0e8297b6", "107e4244472d9a17806694d439dcd78c0fec00c534fead6dd2c69f1e1aa86316", "1af12ea1cf3c2cc5f0fbf707ef4410936b1af2a238381f2a1013640e8350818f"), ("203324fb35a6b8fda31dc1d01a1b6dc44437b2ecfa3ab432b73731b174788282", "21345ec532d0980e5c1a105c2341092bf7f4a0063f49f9331928f70f165a4788", "097c413a083939de97be744158784f1cd9b0b9a4b0ef92ea085bf1a8d896b9b9", "1c57736d21042dea65389ce30dc4a876ea298b71e5cf5283f33cc2510bcf439b"), ("04ad79d274132bbd98601ff0cdafc6f46ed072cb4adb5542027c9c17f0712e0c", "18bb47691101602ddb90e439eb315b5230e1f25fd4e9b41f7e96b87072fcd130", "290a7b22f1f3111a1e925410923e9453b5e57cc1679736b1a4286c90c98e3d52", "2e1a558a4ef0fd2fa08d679ccde8d768eaf27db4a263a4d6b3bd57490cbef086"), ("19f85468543826ce5421f1d141fdb6650f7c6c55cb74d7cd846a2ddd91ef3633", "11e990dc93b21155b98f840bbea804a34b02b974f14f04373ca719232311dad7", "121d3e399d47b5349ce96573bed79849a268a09047fc896886cf83eb787f4e6a", "21e7573aeccdf733a48c62dd4f369796ced73cd97af65ee96c2686da013aafa2"), ("070d9c1c9ee168ae2c0787c36913acf5a0aef2ca86f5d33b1571361ef945dab1", "0cc8f8242366c0678546964ec115613886bd108ba8e638637c2d5dc08f09872b", "00cd07c4abc5ff1addad40a069ad03e51ac28a8164adc1c6a23ddfcfbfde94f0", "198f23b3e87feefb61fc77a9c270554fde23b1bdde5a47c93b252947f9797f1d"), ("2c62bb571be4ab9fb9a396a1613121239153121fe337bdf6363c320d1548f8f8", "04db6c0c1c0b77c3ca116dfcf9614b6bc179c84cb4d49f01941ffce974941c65", "13982c9f3db68eee8da415044379556fac51f350b169d239458b9b1650846e09", "2de70b4eb14362123529a9958573b62cdcb59ae09241b5fb6cb83214a9cdca6c"), ("1cc9b4195d09ae88dbb5fc39d3c64de40febbf5a1715c4aaa33c2d0c09fb1bea", "1268af8e431552348c7ff6b34ea23e0726bb52fbc448ad711cf97ca38945f3e0", "3021887abacc2c9b0afe6307e60962baabf74c6dee52154bc2429f59ef012fd0", "12f83bf6caac5886084277b8c1382606f7bf46c4957366d280c24dab49ec2fa3"), ("0ae85138120923a6653ca8f420a09b28fb86644a9368466c610710a1ab154461", "0a40bea97ef79d42ec809ef9ae51b4720c8b33dda6ccd9ba4b19439cd7a69617", "1bb87bec1f866ec17d6c80b09ae1d4ae0d374d98586f1dc21f38507c7396f928", "0795d0707e7b59340f86218f47e547cac754cca935b21437ca1784cbcb371e22"), ("2c9c7a4ac954b340eefc299127c5384f1d134e607a51267ad3a16fc2b83b76f9", "20357f1d3de75add442e21e7cc2e38d8fa4338cc2c1072c196b37229693add8c", "007167ab1f1915045a68a0189238e8f8f73956f1702786145e28cc6474f9468d", "2ba2a1f16311b942567b9b1ff4bf82c248609a3e31af54c93dc581d8ccd651c5"), ("05771dcdc27244889f8ae9a34e1c1fc1dd5312572a56985dcbe7b54115196a5b", "11c2c1a34bcaf90422717f54fbd9a3f34438fc75baa8765fd2820c579ceda8c4", "0d3f8a6449787f6862a87c96cf7c27e4b37436c38ea3dad0376e8fa6124a419f", "074504eaef740c4300e3477efa70bcb9771fd3e6349221d1e8abf457227640b7"), ("1bf7a36dde16b1dbe82e7466e6278c9eade2ef620f08fcfef5b19df14aa557c6", "1d02505baaa2fd029f67475ded5fb21f5bd2c4fb648d7e4f1c234ec068a23506", "175ce8257f6a4a0416c37c2bb14d806c9c479f530f4227ecfb51409a06702163", "02a881a266706df825eb436f6385aeec14c3b22180bbe56d9b1b19032e2d486c"), ("27ef2d170b75ed78ec6e4081225a390199379bd272ba530cc9cc7723c082d0bc", "228988df9ceaaa5ec7ada181b657f9bfe23489785420c8301621ee7e4a1f51dd", "1c2307613f7f89f8bc047f0c292cd54f9bdb4894a33a2a73a28612e8abdb7c91", "132548726a3989108153b357546c5415baca9a8726243d3775cdc9052a084cad"), ("00d2cadf4eb94938364c432855c162492b6c0ff987f53e8a4e082f5cce4dec3b", "08a7f04121e49e4bf171570ca499739fc567ed2014fb3f85098a7fcd02556347", "12c134f6488c1301b3b750423690218bf9cabc48e26958f22e4e50ec0e784f50", "24323bb99a89530f096284a7c723064f9f09c512590a3c278f04b9a10d66e79b"), ("094073c222d412fc7312719026d93e8c310e9c9e77670f9a4faaf359a7bfb42f", "2a1627b6fe03b75b34f14cf94483f4649010bef878b356dc3c60ece43e7f29ad", "2e0a4a035bec0163079e267cb5641cfe57efd0c1a2bd72690695ec0ac7f669d0", "048727856b31058f6aae7210920c8b9a22dcae32b09743484e949c8e6e07b5c2"), ("14042f57edccc4b18f7939b2537e3431650f184d3acd81c1f5345830398c2e21", "293bbcb83ddb066542cdd3447be01993d5f341d4678675f0b22493687bbd3cb5", "25fde040c9c67706717a7207c21fc0ee5377de6974eea9916dffb78eec97d4ec", "11ff3ea8a272f10c6c08fe080151fff0c596f5dd74a3ccba1b1961ddd622172c"), ("156c21a1741d927507052d009c23c6af5667430e6e60f03d747cbd6e9725e2a7", "07ad824afc9014bbd0a00d1fac5a83f366a98d52d93ee63aad6dc3e0b3d49d33", "0084495c84ab0d3b2fb2250da0ed55881168a6341a653002bbf5d43544fdd5dc", "0680b8e00edd772e7c83d6f8a8421fa75ffb36259b6b72e72d51442f65e6123f"), ("1f98b06ac06cb93ba8811cfc260a7a3db660f61694650305e55e6ace7f8ca1a8", "0a086fe12d30f7331176e1968e4c8033724484de4248e4038742995698f4e905", "0c4ae0ea275a6b4f3b8e1c50f70dd92512d0fc411e2ab9a17acd1d4bffb1059a", "0e7e2b5bb6fe4c76e00786652655195ed278f704e0a2c336436e2d54b78a4a06"), ("17a2a4fec60496159eaa597b904d03c5c5f0fa84fb01e365d71fc57372730491", "16a85a87ff3cd491f6a9d43d8a54402f14b0bb550bfc82aa0e051340946e123f", "1394e8dd9f628d05bdfa19c2e664c5ddb8186ef4e69776b3b97805b1e21c5003", "1e72cf93479f1fd87431bfca5a579dc34b4c688511e36686a0068749805dcbdb"), ("24a83e5f7c7f1a1d24e66fef41dd7e7591a66f57a40f2820bdb09403666ed51d", "06a812453e705eb427a3a8c363e76a418df244b3f9a5c0216a4ead08c1fc2069", "168bef231234053a6583dede5e7b77fd5726100b7f1d6f0fffc23f4aafbc8aab", "1f81e9707b494a28e667a2836db2d68a641432cfcdd97a761c5a851d8c861a20"), ("2769cdd7a54c888769303f9d0989ac9737c230dc53e5dcadfb8876441561d737", "11a1359c4df8bb127e3426050cb0a507c7b10574cec2c1f686864b65956dc7b4", "15b72e51f6d21ca53c80a0c16a38ea41b8a687d550232411410510bca3a7dd58", "09076e803ffb89ce22a253a507361206818522dc7c8adf87e08e5558d07f7b7d"), ("280e2a4e1c4d4fd2a2926719e7220fe15f23cfe38999f7b9ffc339542a6db4c6", "11857e5f0b37fa4f9e36e4000d3008f5ce490ee5f9deabf073ae40f5e37c34f1", "1d15326c68bbc8965a982d61dc36c6354bff6f383e92cd86317dcfcff48d8bab", "081a16aa9c175e37a18e1b1e71e77f679ae3f382b81c54b05881dbf435c9fe55"), ("021c186d08d5b26901be561076f290bda887ed8684d1d29dc9feffe5fb8aae27", "2e41580c49dfc276d9d755a3d72f8b37e9fbbc30ab0bd74a9dbd0ff1edf0ef74", "23cf9f8519f749889f83a70174f25f1f49752070e42a9917b494ebacae901a94", "14ac0c1502b7c912c1cc51e2c676c20a7dc45c9d07b1bfaa36fee5bee19db9de"), ("158fe2f54aadab05c568b8cfd28c8824e5495862252e15d7414a1c11f7c39060", "2d55b1123e83ebb1064c7a16038ad5dcad76864bb08bb510572b0eb85a381ab0", "1eb61893476bac2e1fcdf754f2b8f40942fd8a5c2d4798493ca139b06a09df91", "057a2800e84a4d2eac0e1602f50ee349ed8a4c66eca3da09de4e1c23af89311c"), ("07a27c800fdb81972c423ce729516c463df6b546060234e3131ceaf0b5e9eab0", "120b4e72d31781915032eb4f75b3542fc481b80f4f694081ed4f7bc28798e4f0", "0d5f1abaa445f0fdb283e921c964d8f7d4f852608122dc0382d5055816e6fe56", "1f8dacf5c2acb4c56a19cef37c1a5ecdbef7f564a02c948eca7207eb6f9b6cd7"), ("2b9ab1eca1c6dcc46bdfe519a913b92c227351b29a0a8c756b18cc4c3f0305d7", "2550f637c0a1ac368962e852484b15e85c6559ee657f1ae065a9cf01d5c0604a", "19a687269b532b84e9bba48d76c0294552537aee35e6f682e0bf90fdf81cb8e4", "1193bb18d4dfdc8f54ef1e2fd189b18cac08f44513fefc72c2cd97cafd7feda6"), ("09b68b7a864c30bfe10cd99a8c91ca8025cd2ce2fc371503d6b8155660ad0bc7", "2df91b75973f8b9b526e00a9753161773e592b7c0ce21676363603a83771f99e", "09d06672874924bc92cf575b934d94fa70ce27adce02c630d4e36305c689b448", "29042f32573a0faf9ec154b13e472cac81087528348808c8b0b6783acd1cb906"), ("09c202aca1407d8aae95b0ac1923ba09ff7f77ee46f563f834123173619f72db", "1cf7658174fd10e179ec7bfdc3a22eb26399417946b7eee0b9a2c237939217ed", "143d66f95f8f4c11fd7d0ee1586d52cc15d39d0b0e5e2c0c32155a7a1bf7af1b", "09e3b7ad2183f68cd9076ad8139c8587dcbb743e4e713f623f45f75c84791e98"), ("2802ad826d5e56ba81e32fc5f4d1b3eb38dd92e3d665f9fe1ea28a5b542c65f6", "0c4330546fdac224c321fce0a950ca57dd57a124ce9513dfc9e8e8254abf61e4", "0f40eb93c958fb9b13be094f2590dcf5a5c345c5b21870e4583197398b77b148", "2339c48135abe423e29ba85df57887f72406e450c12fef3a32c07c91b6db1e5e"), ("09c991eb462f6f34c6f39ddd80447fb65e079586281f525ad301db9fb84e5ec4", "0712dc39a2be532e672c0d9600b0e12384a6dc347f3abf9cb46dea6883865967", "2f7c38598bf18a5699c1fe87ca102605a5832308a88f78c3c7e7dcfa5f7fbb8e", "1a111baede1a57f452a34fe564002e9f9ff3ad06f0d3e23dcc559981943b487e"), ("06102b2393c59661196d9b9c19b24587b9e2ea3410229c3d034befe9b676cc19", "1c5e2dc3cad1e0091e4463a43a8c5d9e43d6e151fe9e8073d1a9433206d2d48c", "2385addfa43d53b08a1284e3d8c30b7f4b6cae141213308771621e03052dfac7", "061ea0b609070297ee4b2e9a4492dd14a6d62be3b20090476fb1a9b752ae6ac1"), ("204273f7a4e532336620b240b67bac79032bc1c0e5520954a13663667f81a543", "0b0a29ad667b7db3dbec55b41f0a437c317515746614a1b65ffdc6673499856d", "0ae897e274b9513250d5a58d8717d6ec5d7392ea9a097e890e536a5a89115492", "2aed6d890bbfc1c7c1e666efdd7bbfb485627caf8a31fe5140e7853c94ff97e2"), ("2fc6e55c15fd4a68ef91dfbe582281dc547e0580833567ac8d7cde9f72eb8932", "02d255f836fce8e75ad5c5a953b613a6e4f60f91a6acd80c90a5a5d89c8b2c6f", "26145fe084010f42215b54ee90b5d5be26db7c6a68fd9a5c48fd10e91dee46b8", "01ba6269c10204ac0ac6af614180da134687d76d7f75c2f522ee7cc97c63cfe1"), ("0f7f5631f446742b89135726cb870b2d1e5ea800d6ac537407267b784986bb3e", "1d7e8e1a58706905a8757a3632d7a92e658ea2da2cf93656130c799cd5c16f51", "0a62350c84ab3e565f2b2d1ed9f2a947ca7512b55f94c57f593fed6ee5f209f7", "171ceacbcaa6b1f43927a321a57b558bce9262958a0a4086c40ff0a7f4605ead"), ("2df3a562b99cf86b2239dc1adaba4b4c5f8f5447aa54504696e16b1e2926b0db", "2f693a5797c13c4dbdc197e24835cfef309e85fc379e31cfb36bd61bb81290a3", "2b121a187705f091774213ad838cc1e6a965e6b61d54c7b82a287816aebe6092", "2410f808c63de14ab246215e1ae2accd224b56a667dfe05b15812d5dd60e8e11"), ("06536c6ed59abb920489e41c623b83884c517814fb4345f90741171400e20861", "026d1077822e6cab5e9b66459fda4368a134ee8b2b1eff2e2d7b9b5eef8bd245", "10b80b526d01d49cfec4f413366b641bcb04e88902b96d2e89595262b43cd606", "0ee8d140aecc1b7b8ddc3252ce3e755fafb4e29fe7442e18da9b98ba6e5d6d42"), ("29251b6eacae5777c34e63b01717001838b66f0e736158997d4bb49728667296", "0dca24952e89c55199886f9475d87c94c4627b33317b70ca7decf8f48f957680", "165e93f5072dae919988bfd538b8fdce2ee9ea5e4ab00dff5313dd91231bd89a", "18bd7a57a3d0c208e26f777736180de5b225faa09e56e4fce534a91209c6c456"), ("2a9e41eea7aa5c1e727080e01dfb0eaf86b71401db6f39361a44f51a41ef5a0b", "29ee57ee21d30cb1aa62f7247a4e664d9f25df218e8f1e936adcf41ab05e80a4", "0759dbe6e04e04729c7cc8f3ac829f45bd872dd5fe2e6aaeb9a208db244700ec", "28275174e7a44c497d6b0ad331af0dcd414ae69a1dc9531ab0ec7ffe16f0dc1c"), ("22c77eae01b0b89381f8be99a4c906ac4ac33d541556e1c018c349578d0a5685", "2c6f704cbe6a4701f0acdef23a9e1e5ead7e00df20ce8aa968038ede42f550ed", "182783ece3275a5dc60684f5c644a1edfdd49eb6a6211f2359c50af0608e46f8", "1fa54bf91a9edcc8478a9abfa4b38eccbbedab1df84c9fc8d353b936bcc4fd7f"), ("2641efb1e321f6249a7e5330c6965a86fe80e955495b1ffbbb00993808b4a7ed", "11827ab69c2fae64d20375598089bb9a6d8eebfc7dd686b25a1e5d4629d9a069", "1407d9943d16352e8fe05edd37677090f2294576a8165bc217da5600e37dea7f", "2cec49a08f333a6c93b4fbe35fd6b3cb8f2f4130f35ac48354ff6f22ed78facb"), ("1bf6df8c6785398daa3f51f642db67183d9f5e07802ff5c59d07a12f5417f299", "01e897d783c5b326390e599b24b4c800e71a7f54ac02aa73779804b42145e4bc", "020426f2df3f0aa1afa0207563be6a6d94e68f81310d5fb1e436ba9429fe3f5f", "10a251a27135d6ff285ce3820f8a32ca656c36e3f42c9a922cfa0d9ef918ba28"), ("22db52f7101cf7b717c359477a1e55bac69b3f6dd637f15deb65c824ea965dd5", "1e41ab8e22c393b1f08401ad66e9a63f39918a410c2a7afd8d8394678c8815ec", "2d1a012a72aea41457688a6eb3ce699f4c87db92608e8ebafd7abcfa647ae920", "2fb10b42ff0b6496a00188368379de1e00849487d3f268badce46953f0bf126b"), ("00ec38e33e022452c357126fb6cfb4ec9c99089667dde877def6b1a80c67c099", "2e25ff5d046f9e6c050a824940d9c1263bb970e7fde94e6457209ebfeb1aafec", "2eb647f9ef5957d89a507593e24126e677e8912b6948d772d4e1237e6e9773a5", "106c0252b67be7444d6e7a50778c50482d1fa75d90efa3f3198e3759d5608162"), ("030f9da7a69872d764708d1832012617722e7ee1a44ec91a2151b36d4dba0f2f", "14956acc74af5e1082b7bddc4a1dda09dbf21496a424f081fced07725df12381", "232f4bd7a967e79f0e90ef150cb374ee09471309f873b76a5f776c945c8034e5", "1e7b2de905831f711c42cc233b88e234793fe52fd02f4d2fedc17ed6b5a1177c"), ("27f06fefff4218ce19c1699b2207b3ac2bbefd10b62d83e15654f5e4d79a13c3", "296fbf2a7010171b40dd083e279e4cce6316b863c63e4a3a1e52187649ff4a79", "23356e83de9b6179f6263df19056b03cd2b73c6ff865b61049305be9396a2ca1", "1e62208af96bd69c79cab870c618e06e6d688d406492ee78dcbba93f61a26690"), ("0114c80d2e24c0fa63a99fc4ffff662233d330011afdca603d7172a106c5d115", "2f52df491c2185bc778eee80f8d255b67f63f24b2e7ae067d1cb8b0df97e603d", "283c52524b8be8b1089612c3a38cfe30beb2cc9a9735bdbe19281d1edaffe46a", "18528fca233d8c1b698445163f3bbddebb1a65c16948b3edf79ca5a4b00dd797"), ("0c42858d01ad452350d367126c0f1df2be2de94fc3dbecfd807781ebccc3a6c8", "28d4f8ed8f47cb142b17f7f9b6f26c2d2fbed8ecb9bcbeba29d9763b8899a6d6", "1fcb6dd9b6900622bc4a546279a72df1366c3e4502d809e915826741c8d4e9c3", "2ce92cb60f5e88202184aa0f4035fcf38341a22cb9ac0460dcb5a5ed140e0eaa"), ("063296f3e7024de6b3554184c451e1e7390b4ad0eb40060a3cc70edf4286c67c", "23bb935eef05b1e4db23ba9d078823c0486f11612dc6db6ef78606225af254a1", "2a33d39930eef7715210a5a9104d2cd9da7218199c0f8a663544c1be8e64688c", "1f628f7a08471eede4f5e0b0bd6bc5b8af43e2e9bad622b854982710e512e339"), ("0226f933d5d9b3c1463e574e3e81eb740c52a80db253e6945e8aa2c1d1bf9cf3", "1af71dc8c6d870fe65d13d7050423ba84e2dbbab96df8daca0dab2da24776b93", "0999db6fb1dc4bf55c18fda8b8c9bc266e29a1c2440be946284b49345e4686f4", "21f7a103fcd7644fa4af20c7f1f9f9be22d126a0cef87f27c47796629278cd1a"), ("1ca021241f15a452374d8961df16905e3aec9bdaf16e98c6c2a06b75f238aff5", "17ee0ead0ad0f4ad81bff7633a2c0afa4c778e754b87f8ea511b8002c107cce5", "2e67a1965cc46561cad2f7f80220190671dd2eb0c02db4821aec586f3971fa80", "070a04b62fad20efc02ad026550a44397c6d8880341486b77a58b8375f20744b"), ("24b2429700e9f44d6071a1a8875c632c3f64072abb5ea97d41998a6da1336d8e", "158915ff1d741dacb386823fd1b64b82aaa83957e011816870e56fc778cf254e", "18689044830e8ec4e7cbe402e76bd8e68ad736ca9f28910bc54fdaee88e48982", "0173cbf85b8f11b709200781a8ccffe09647dc458af478d6864c44d59f4de815"), ("0d3ed2ce1788213d71f4f7ca6ea3074278f9cf4c6d693a458dfd18cc872079db", "098c2776b7d5da55596ac73ef694f560faf038131ff7d2f562c9d017ef654705", "2ccbea02d3d465a9472f40def93af0e513142c28c5d75d13acd3beb3e47a7cef", "1085a86ff2e74d2b4e1166f6b41d761c5b879f6174684206da166c2c561abb8e"), ("228b3f4a43552105903770355d5f757a6d6e2c884cf8dd9a6e67a73e6e3d81a5", "109570c3abb5970bd86a6a1d5bdb1f195ce66042b2f2e5a98edb7748be9f3380", "1ab73167b536e7d93480932ff6754f6bb99a6cacc35631da40a59a64250e520d", "015200d218d981f6530580b0e7854a18b3a45e63600de332eb3835e290ddc41b"), ("0f4816aad753c2ac0010a30e305705a845f2a10d395608f599d48adb514beadc", "03e09f8d9beb28e690d99551c34aead39a09306b2457689c144b2f0bf6ef6796", "06320e1dce172d3eed2518691d46499cdf204b20a5e2039f4b76e668d316be26", "2a834751c49c50a39a4c70dfd53700cff26c956342d943158541baa1681a89fe"), ("0701badd3a985e6211255bc3c39aefb5dec4a0528c1c75db2e47965eecfe6ff9", "116c45a45dad414aaba5b3c8cbc86210d356e003608d51666f1174fae4763bd1", "1391f08469dbbf53b451a591f8811e2bc9d8e171ec9afd4c3521bda890766753", "1b7fa5d0966118bf4dfa1e961176546524cc7e9755dd253486e11e73529cd475"), ("0f84f6145898960d53d0f0e47670e5f294a8f72ee6f0d2aaa2574e9aa1dafbc5", "220517158af69e134763a4c4747eac3ad0969c08f64c042b97d2bac2bf30c0bc", "2c8194a14f5d925396cac21ea75cbed45310386a8101c2574cb98ae22eca5444", "151e5d3dd7f0a2209618baccf849543e6482c98a7a3a71a73e488cac695df5df"), ("1d2c59fff187b03544ca536254a10008c78e1121f87e91c19e3337071e2aed89", "23f2223e786a547141733eedb5c55f03de0be736e2025ff0ff061f3fb1c5e485", "2fb04cf5c0790671e33d45f7d5bb3e682928e943b223eb9e294684cd766de07c", "1f9383cd640dcf4c181bff86bc0de09cb132870c737fbb13742a6b5205fa5ade"), ("13fd6bd0f1e1cfb404e84f24206bc0bab81e1412b3d2360ee2c9125994461157", "1554bee3e4dcbca1165d7101dd231d11f9b7c4f55cd02dc566689d62cd5cde2b", "1d802b633540418fe9a89d70fe916852d8a6e76aa2a454c72d4b0130fc590ef4", "05edd1c30779e646ab1536ced45be38ee0aff19cc6d09b457f17614c9116eb8b"), ("28447cf837db6b7d1398288346b2c28148e5726c59e829414118ed36fe43a59a", "19d69f13dd343508c259a2dd04c09d4fa54ca15da1fca14ff2db4433875550a5", "225cf8fbed300a214b20ceb0b3d782a950cd78b89477f17e4c88f88acd110fb0", "1304c1dc70c7adb32a76a99a006a6f50a37c1f24f682f7fef495d13b2a25e3e8"), ("29b60306bd63a237db9632ae5f33040ba7e7c32f7702e3b8da8591dcffaad24e", "175aefdb0bf053168a32611f5253ed59c734092801654b9f634283f515fa4f39", "28424aced1ee65457d1878a451d799b1c910f161e84731517a1960d2df29262f", "28ab849a05c903d6ffd7fbed5a9b08de0216a3209559bc2b04f840d48190e38e"), ("0062c73fa8c6b3d5483441e2b132906a500d7d73cb8b74ccb8dac4dbb847f9e2", "2ffc2024c95a1dc3d3057504cd1e4a139b2c0a670c1ae6aae861fedecf049c71", "158b03a7b5371e88000061f45d29caa56a43422ba479c9f7ef173a80326f3d5c", "2faa189ffc2cebab6d21bbfcea3b87c66490a77a87898bef076ccd61747a765f"), ("202ee1531ca2b8547a7316f50d6dede2892dca950da84204d3a9572f3feff1a4", "2ce6451eefbd3ad149f419d87cd9339b1897acff386035d16b85bed84ede05c8", "2899249a2e7f14c53cc7dd68ad722b3b32248b80cf5b6de4361b1d125a5b3136", "152d2b05c00e2b46c3d7a076b3a03e0bdf1a8f93f6e26b308e2d970f4922d8db"), ("0bfb1d0b21f7ffc544fe38f329f3fe0ec2e2ab63209e80b35d0837d92d2614a9", "18ca48bb78c4b03e5877fa0b37e79be596fe870594d99e3023c41c9aca874bac", "1cfe8f3988b0529a83759b4c4224e5e9fc88feec9f26c9be921694d227df3a0e", "2a9141e18ea812f1bc2baa1f0086fcd20985335cd5a53932748c68b07394460a"), ("0d4819e04a53c0aee298e16e3fb1edb5f372b6770ee32b7b2afc35324b74df19", "119cd5b053aa4f0d2f4eccffa855bfecbb9b353cb3263d6a4523e431f37c5820", "1973e34f67a044f7a9cdc9fe595ec80a77368ea5e125b6d379db74304435881c", "1fb09708f8a55b24ebf493eddc5e9037758bfaebf553447be19668387e7833c6"), ("242b21e594e3ff5a58a26c82895c5391d9c508bb669c75867c2e87a9fd5fb3d0", "203e9210b92cd75ed354ad8e0ec38236c7cb14a4349504eb4242f0a92656694c", "2713d8a491a6b6304b7cf1edd8afcde858afc48e620f7dd8db2993e2da53dd80", "10adcce3ea6ff4c4215a5a9b5df9c30b90e289caaf642025b8697c5e7b3a51ae"), ("24dda751312daee6fd933811a08f36055386ac59582135b4c78d9b36c0865003", "1f0803c6b9be7374bf0e99bdc0302d01dadd5ea411a2db4d6bf9f3b8ab1f4c5a", "1340772c6aa84da07537c56b17d2518ac1d5cf37589262df59c86308b122240f", "15a000b911a72cdc4afe04106c0ae0b289a66044d64febba71775664d27b2c68"), ("05359b5575d7713fa278f12c50fa6a9222711cd8c2378e93527e0a6932a97022", "0cfd3f5b5ef49d93a2db8cb62a28e6c121068e5c55b02f45a750e14e9bef779f", "1b4346763024f9c1b8c4d5d00c7d4f0e4492f10d5d9adc5a3193d03a3838dc61", "17d58889d0dfeda23b0f37d5b42a1f12df4e7fbc47f8570c1cdd2fcbb176a2f2"), ("0def1d6db6c763bdee9d4b602182837e8983eace974780fa415433e02ed593eb", "018382140638fbdfc7b37c5e674f8e0280dd42caffc4a146f2699a8a3926d9e2", "131d867258e5bdbb40f712448def1d6e6bbfb548653d402d888a6b8bd41584f7", "013be5773f0e52d93fe81059d3b09cc3936d8c3e49d177b362427711a7d06e88"), ("29a57b55b734a94ac1b373d98d6a4630a8df0cc30a0ab83fcf6e930c550a8b34", "0e3e19da93a214531730b8c4dc3f64bdf98636e24c4e4b4dcdcc583563cdb196", "070892424c53cc12f07208eefb7a99043405ecb348da09a14a62d173653280bd", "20785f73906fefb3bc9d2c8851a76f0c9c3580d263edbef52e0fb0d71b03db4e"), ("07d55bd1b03355963ebd9b5e33fb5fc498f2cbc3f3c892bf408494e8093b1e4a", "1f4cc231c6f72dd5fd9f8226efc765ff53629cab52378591927689cef440cfae", "23085e678db1d6f1d4d05ab2e5796b252e2bea81d9dfde79ebf0f6296220d847", "2f3f029f5f1b0d95a662ffc14fdd639780e77ac78400bcf57c5d4d1c882db9a4"), ("2f3a6d7640ed8f979ba8ecb5f412ba14c6fdef28800f5213745a781a9e92afe5", "1c482e57c91f92124f9ff8eb8d41ee3aa1cfb54ff9a0ec049f84f21ecbfa96b8", "291cc6302a1451a3a36914d8cc228d3bff39da2a247799c0cf248737ab136ffc", "18d80c508e5e44404661074db149bd082ef0ec31cf7c5dba78efed452a5ec242"), ("02f6581d5c76f42cd9f38f7549c32246ceba3c11f6f4392f49d38c5fa67aa0cc", "171f1872200043636cb32617122edd361ab729a80a36f8575527307dcbdb4bb6", "17e8585d628b9043c60867d6cbbe950313b43ddfc0bbc3e9f15644a839cc1e5b", "2407742c528d5c37b92e901bfdc42bbfdace5a4cf305023a8c2112471e1c5e62"), ("183504bc473d67ddce9295f80c811b485b7a1e6321c1483a3e24c02f66a780c2", "01d69e90d5adbb34295a682accd783cdeac02b5be9f1e1a3e8cdb3104fdcd9bc", "25d6170a016c231e02cc3ee265fd4a7c3a341e99180e11261b4662a661bd590f", "11568fe20171dda9068582a9d8a1b5ebb6094702bffa389aa56287f5d13ce2f0"), ("1665d1314a3b63795c4eb3d588fb932c14cc2ebe8a73eb5288a4807a514a2abf", "1d703d879d9b127754a9e13a7cd2fd8e5ec2f38fa843d76e2fd8faa565d64eb0", "17f09dc03dd2c1f10c5161d198dd2d167bb4f70e097e0e50c5cdc76cfd5224ac", "21f3cbc6139e8d14d32eab4de151ba48c93ddbc98bf02a7812fd717e77ad8204"), ("12c967844454119caa82bd6b4327c08164d2c59f4eb1fc53eefd5b508735aa08", "2c089445b6e448ab6b19f63e0479f5f1628bce86640a3ee1dbdff10627457ae0", "0dfa1d6a6a7bfda2b592cbf50c75aaa490f3f56cf9ebfec229d6acef4cf4902f", "064c4d590cf55766f39af3e3fa3a46a787292a6098f41f40bb305ab7a9b3a1ad"), ("2fe9201d7985406079274b20d2cc41bfb49e9941acd086d7699457e2926456c2", "2ff5e66f69c94d36688ab8e2e9036fb014e7eafd06a1a76138b2a04db8f820b5", "2f291017884e9e820c15b4da56a3bea3d1e8169cbee78cb829c6587cea88d6d6", "0f78c24dfbd61d6ce62eba0791b6924d38a91bf9021482a3a9fcc176882bcad0"), ("149575e2b116bcfabc9ffecf6be8c823db16733788979cdfeb639a4106be2a6c", "090e38ebf2e06917df556aba4c604b57a99859e6bf43552dc05f237c9af56c83", "088a5da61c0e348dbf851804f5807ed8610a980802a6d05ca2be00f330a37458", "2704eb361715b29b60130ad1cdf8028799736b0fd2f21cc6e839759885da68bd"), ("0d6a61de2da5280565da5dd7bbc3dcdeb35c08f6e23fa248f60055f2f6bd7f78", "287a1c03c38a7694399aff13e623e9e1d140bdfa427838a9f1e07ff7aa234b8e", "1fcbef72429f5f8bec34af61ac61684583a8189ea228caab191c49d8672cb2e2", "0736054149c585c54c0236ecee48daf6331b569d5758a9cb510cef020df7b2c2"), ("09ed803facdf1bc2ba3bd3e93ec04445a2edc7d712c6eca92fbffbb0fe1e5276", "0aa24b1cff97aa70ec8d735575158e2c72818b7107bf7d414adcb83651838828", "24ed243a8c210f74773d51846ac8952045d9cddd00e72fa054cfa7cf87843e28", "00747c28720ecd079d535dfe2f596ae004e858f9dfbc221e0855b93ada4d1b25"), ("2a58a9c9090c51657e253510ec8f430c527f169879cd4dc75ef30cf7e734280b", "22b0a0dfeaa13531e2993cbe2f4bc738eb37eb429ad7aaed6597ba196deb294f", "1df7daf97510a05a5585c3b83f6842faf553f2503cc24b172819474c61bf3f50", "08c3e065cb45a91afd06fd41762d8608306d7fea97c2a1a90387142c2cc49ea1"), ("06e22d2abbd7e0ac93d6f426235d03f4ccf58706c5a4631e5f49427054c2a8e1", "143f276cfab6097822aaf447185205eadbd8b7a77433fc40c251b074b2ab6d60", "06a31011a1d24b20e56cd090a20bb9ee313942bd004b1062301a898ba798e3d2", "10e4af900af1c857dda17d2ee2a0c5e199d327879f66f46b27ef64e3fd7ecff1"), ("18ebdad31840b0bda019343aa0cd56d94a95b292e2a8c9ac0628fdf33122e699", "0bcc3230787821747e3e0da083d0951b305a7cc01ea7922e19db6f81ddef7d89", "22d5692a5486540e73191b3b69d1ea1b7eda6aa39e70a672aad3ca6da809fe13", "2311d531ead89b6eaad4d77cd0218767446e0d7edfc8e029e125e5ea1f224c08"), ("11844f29cec7e9ac9076060d0fc1a5d310ddabd7e9719e4ab688611c9722d9fd", "2a713ca75a1b0bad5e461d445851ef3604963c270cf42b9ee185806c7b93e117", "28b92a5117b61121665072703375ddb5bd055b7863d3251319fb7f569dd970e0", "115150014352f56eec93d41aaf21386830404197bb2e3e586432771c5712a673"), ("22d1bbef5644dbd0872d66793460b524bda93be7133291d65cd6ed11bbf9a1e8", "29ff2ce2bc6b511adab45ad2c2c0f15c90d9811bcc9ba3629d182756cb9a14ba", "15743dce270ba0e82fb71aaeffb6e28808f43746d971cb4f4765b1f4b7938684", "0a52417bfaa62dc0c68601ab8914dd471e999198cca3f7b6a014433f84b99890"), ("2bc2bbda25e370592e0df99182b124efd679c24c18a41937455568906f723771", "0176c8d024aa87b66fd7bc3b4f84ad2a269cc6afb21c6bc7bf1ef46e353b77c5", "0c7d61a53e2c5ac73bf56dda63893c00538a1336db1d4e541c9cef7f4ca036d8", "17420db61dbea23cf220db42292db8f19b4bf5e4d4e439c61421d9e577c65f93"), ("07d93bdd6e275e4779549125a558fed341d1c9ca08a0874a5e047f75ca7ce0fd", "17a5e5215abf96ecdea0f3c98957f5ec9deb765aaf272b54e5396532f766384e", "1fb289033ddd4444c36cb89347409897b82ec7f9b58e796e0fc2c10edd600958", "11d3791b1df699cf3caa62e053a868f5310e613a0c428549c8d31cbb87a9c2ea"), ("1be00f6fc69c0563938592856a2a94addc23ec77ac1a677e3a71b879ea1eef9c", "136d322df7cf82d781e8fb0f7bbc4587c7edbb87ed1faf0c915a1af3864d0e04", "2e974057703db2784ae903a8b2edc19767306871c09da972bd2520f842cd6875", "1ab536f95f68f570809c2117bd4147c3bf47b3e4278fc9e1d49efcda3276277d"), ("1d068d365f904964c8280b65b3879814f67d2bde7c8172537e8d6fbafe18544c", "12de5221411e2fb1324b7e5fa893d27c94a99c33b8c6792ad3e0c19da174643c", "1b14c06c86d7b79d1510fe350bd29e0ab68a099b1fc77d15c8347c5d317196b6", "07646c8120c8b7ffacfa4361faa27d11d679d1f0ac67646a7bd98dfeadd4d5c3"), ("2365e7f3a15b6798a95f5a587d07a90f0747c6325017b9c305389d53bee63ac3", "0714c0e6a2eea57e29ffcd601206dafe96ed6ed9f85e45fc85028694d5db163c", "1a7afafe1481a9b5581f0931843d8ff925b650edc18765d54e06cb369027f8fe", "119320a0ba2484119b03ec9168b260923204b647e82611821708e4a8ca85ddb9"), ("0f787e7c6a1ca745886f15f5f0b2bcdfb47fdac940d623075207e85834d13e11", "1560eadb83293a5ea9e1874fa24e5e44996701dbb34b836a84d40ca2f31aa003", "2c16fb798a90b00c8e6c493da0f1117ecf2aa09b10c53c735333814264208b08", "0397476cc26f3e3859b7215f07a08c96ac17f2122a325d175408124f5f3c1bd9"), ("240dbd798cf0b9a12f8fe11b8d3a21b2d0d5e11e214a2e51a3b9503ccb4840f0", "053475cc902ee8434b36b7dc1cac4696865b0d0cc12e24aa88d33af7964a62ce", "2e51cca4260f429b0a239fa7b774d314b29719715bc84a17b798a751cb55ca1e", "24c9d2498b6729bbd75864c063e93b8b7a1c424386e65408766570cdb02aa7c0"), ("042875b6124f14289e404b37fb55ba35f799e424f49b23a00a03ce2dfbbace93", "0e4ad77ebd347a34d2a426390a10aeb51083938f5848f4cbb561596e4b29743a", "090ecf3b4e15bea1ecd7ab3ee05235ed8dd6d32e309bf3a373616fbc824785fa", "09a906d6bca78508517838823a75bc38eb5d44074f86c51970992746dbb15c01"), ("00121e9be3ce71107dd83a5a35a7d6773f2b1164bdc0efad625432dbb9a948f0", "00eb891db3d037666c86f2bd10f96d79621ff55e62b08b624c87082d86d0289f", "2e2ebc2ae5e8aad2e3da6df1d5ee46022f81a3f8a4f42ab24f1ba43c80fa8f25", "19acfab417d775e3c5cd641d4a8ee1a5585ce7cd9ca97243414d43a8c72f65ee"), ("1b1a71c9904f79eff5ef684ddc9c548fcb3779eee72357153eae3f2638704a2e", "2a63d5251709338194b188e45a4f00187e1459267693dd003abeebf2db814615", "0a70e74a66f7e0964a6665111a01a66ba4c8b1b1310f4110dac0999b9a65f50b", "12bc7a194f2fad5a365822114fe8b11fdcbb4217c4ce216aa0cf6dc70e3e18bf"), ("152c5d1a2d3e322221f83eeaff810efb64f6daf9189002aa536dc976f4dc0f1f", "1a10216f9da34160732034cf9b3d2d4a0fa4a85ce86bdf65573693993431ebca", "222a37ffa561bfdd8608c39b524aff2fc7f098930935dd7eae47aaa9ce2e6b77", "2e9362e1750cc2dc4636b93e3f233e50845169eeaf98b607ab9caa7b81ef5fec"), ("01a8120b3ffca3b4fea4310e891ce0cf753cf4aa152a4be60c651acd573dc96e", "0fbee9f37fbee2de5a910dc1cf1b06a6a66f3565396df73e404ae624f0412351", "0d02d19aaeb6d00acd7f6b100eeb6f3563734c6f6c627e472fd3d609c7699e62", "127cba050a58f5d2f8cafc7e49ab8d09fa4dbce434919f02cf3ba7f32586f87d"), ("21c41bbd3d8f078bfc4dcc43be9681e26fed78b8ab6fa407502389bd81386072", "09fa4cbc4d82e9e1d9bc364a3eb6a058147b2287470a6a6f4ae2081e949a81c9", "07029969b90565d490e68e0903e157a58401813c5ca4b6ed3df054065478222c", "27bd33de12d6fb1fc3240c02d074980eee257cdea50b866183a5e51b42c256a4"), ("08674c1aaa38a974468b3628853d66c290ac9e4435dcb6129da3558a26cd83b5", "277ab319ff13cfa09c5f23466b2efc5c0c4db84e7af20b99ef89e7869c1c4337", "01582c7bc7b0b94b4dae62bcdb0452ae0dba4a1d440b786fbbbb1c1533f6fc03", "19af5a522d0979a507d2ddd2aa84a39739daa73f73d4948b15a6274bdb94554e"), ("1d7f5d66ecb6d62eb68f48952ede9255b7a7413bbcc68c7f9c665c003022d039", "2fc40e2083dbf93047dc6964c8612ce6a23627ed4af2565e7b33b7015e63080a", "2badced2c1c79bdb29bca718ddf45beab23a0b10f083cdfbdebc9133f521a923", "089259b20336b941dd8be01f4e553e0e72cc91f6e37cc89ea7d31748c3eb5522"), ("06a6af1c753ea2dd44593a4391c60a0b6e0e4cd8a7f5b56a59784e03c83e8ff6", "008f011d8ac1f6a44be399ea334a83e26fded9bf3008ecb9266012f076764da4", "1375120ec61c09c75289a70dca30fdb043d8cc6d918673610b885717929fba90", "27916e80eaa341bf638b7922a45334d80423c2a9d27f16c5bb35307b09eab295"), ("264f2b7eb6b2194bcee2492abe588a49ff43684dda9a5a3a9d99ff60b993256e", "05eb4f89999924e079fdb717bca56e260eaf69c9a22ff9b2d598a84c5971238b", "2a4df93e986524887b210faaff856a8c66657db0541023000101c0e7ef98fd81", "19228c564c041695ac1c02f7d1bdbf029ae03cc5819a308426bfaacdb888bba6"), ("29625a6352ef426805050c3745213dc7c78799286c3e710f9965ce42a72b4283", "03e767e3c1e28e88f754b28694fd012593e2e23fc448141a6a8e1c033b0552b8", "031cf31daff04cbf30150949c0f51b079428466b3551d0bdb4ac7e52d437d6ac", "043801ff6abe0715ae1f5f5456fb8b05f68eff9144346055fce6de322f206f26"), ("1c7a79b38a791d67a148f4b528a60a775ec4feeb3c12b45a66e20b5db156f1a4", "2ecc5cd82e12e68acfbeaee74ab4c2dcda232501e6b88765355b0d8b6b2ad1e1", "10de24075a3aca41301f992bbdc7d56f05911a8fb7d8e01ab15c3625a661b1a4", "0b48752d25287290775316ff32500f51b6a01dfebc540b6dfe87934e0b7b8344"), ("07703421be6c59b2b2258dcbcb4ceb7e4d111e370c27bfc9d52defc89e05ebd5", "17aa284ccccf28e91eb82aa6e47908373bdb0e53d66d8b93e15f378c842d7581", "12f2211e76a1062dcd728288c24f646a436db4c10c1c6fb89cad03dcb7ae523d", "08bc5efb2af924e9d4a66b9438366e2d6b3f13500ed6b76e35b59f87ce40ca9c"), ("0896625dc08b88f42bc276a54ad2196d94c79c49bce30fafa75a5af1cebccb99", "169892f3bf43d264f892ad3a39bf39b8a92e90bbfea2078c54fea79b431bea35", "0f04541b663fd81d3da5f1ff0720f8177db558d7ef956886aabd8a116d6e4da2", "1e7d0d239b0171eaaaa53728e669fa205c06569722ec553eeababed3d824b7b6"), ("092cdb0545c41f56ec6e96428e523e184e9735fd8125bce675c60cf62c500a32", "06cd088d52c6190a7c5ac481fb81248c9698cdcf6a6069ef937078f3829fa958", "2dc58f3b8bec0b267f5c12cf4bb272a36f1d13816585829e01454fc1ac41c934", "0e8a992962732a997c969f9b510543584a5c216a87ff09655b88a10e92f6cb0a"), ("133ed9d4facdafd2e3b7fd20883af7f0c9c759a4595dc53c46c53840c4a1434d", "17e4079ba0939bbcb83653162124fff0948b6381aa6e5eb7cb92e8827740fa12", "20d61aa960450104c23be9935386bbba8170fbf548c1e3f91feaf5b8f7f6ea9a", "09556aa78bf50d28d6dc55ee99b0880cbaa73bd68a218075978816daa5ba04bd"), ("2e295b81aa0d27403eb11dc1140d7656b9888dee5198f9b8a8666dab307faf94", "08c6f8e298ad20a2672301976ad9ebe66815817097e8aae2bb766c3e3b7bb274", "01abe2b58a1e84e2d3b9782d9dd1cb8dc039136083af9a2f0feb59bd88c651b1", "140cc7d75f4f6d263d74cdb6086bd13e93d7dd9cc4e48dad81a0ee30499211fb"), ("1bd0c4cfb5fa6e7706b72923a60f88c4c1ace5b31e3ef2033ee762053acf0b4f", "0dc3d0b0245677cc14a3fa8446bf23aea9caf74e36c31664c1004f6cce172d9e", "2e5c57f9bbf948c36281e6ee9747e26a1c5ab527575aad3820765e8f405fa30f", "10b6f449945fc2434d4bb366852f6b8afce38b1a5c4228e079cadb84572f8fc4"), ("2dc4030168bf200c2e6451c9109185bfcff0cadfadf3ed71e4a0b1aecfa633fc", "000a67e208394840daa6bdf0760be861eae50cb16521cd2069f6c20369cb440d", "1041cfdb57e40a63fb4ffa5cdf1302836d10a60b56862393343022d6a567d6bb", "2db8656f84a721ee7ef7fea39864b430163eef233c3d9d2e0d303c1f774da948"), ("302ec93203c17c41d19850a0c8c3495d21df8ae0a7eefb68d889da7c8400ea5e", "21a7bb069a44415230b46aa2943b7f00f9175fa52ea73734160d29303e8a80d0", "18a91a109145a82cfdb7a3d2b61ed6e1f675d321e0f6ee6611cfddaed89056c5", "233f640287dddc06ecd4fef0b1843e79e85e4d0d026069930e864e9d0dc98686"), ("01cd9d693b92658e7f6e9fce9c24bac85a4b6f555b9701cccfb2188619096211", "2aaa93d28c056feb5e87a09cd2a65a70f406b5e415d8229c3c35e80d8065ddac", "2481297a32ea03d796f21029b8816f845b28c3b7d6e43ebf2100847931c6a2b9", "1bf6df0a63f3e8f2a90116dac177283e002f8076a280e825ef2e9aa2fc805487"), ("01344977d1eaa7d85aead2ff542cc052acac48f5acd5822f712d9458f699a6e1", "1efde70b919349fa7671a8048174342f1a158e8fb4368799fb481cc26b5328c2", "1738b0449cd9a8373e739c54fae90059064be42e3016bdaf0fe86a8b1d1adc8e", "1753c9798a48537a2d4e780c808bafd338ae8945e4c5cc4a8d70c578e2f8c866"), ("249ac73531bb1ccefba8abcb887944c4e4b2857b814829c21c86a1f8ffe2abf2", "177ee4b9188c9975de947d8fe6165ccddf708bbeda5f6f8fcd51a6782e968b02", "0b5c1574f1dd350cdd95bfca3b2b847a3b6030a0a6a248712ae3d26015a3492d", "2003235cf9c206f29473b3b0d10d628aa071a18a3bb83187cb7874490dca6713"), ("1b7fae339dc397f76af450d151b1a016db3792a1a1270e07db8e32ef80794a38", "0b61904dfb236f9aa67cbf7ac337ec72c89486aa292777ced5af53b6febbdde7", "1103354ba37eaabe4e1ba361576413d4e63f0e60cfe83961ce22b3fcb85f3a6f", "24c211945a93f5128d4f3fed2c6d432d123e6c4019ef1603aac1640db19a8729"), ("0f9dd38f1d32e5abff57fe88efa4bdcfe026e6106e02dea3d4cac1a1bd1a48a2", "18da55aa2eb4c732bd65ea867bdc99acb45b917f86b85e681a2526661f7137fa", "02b049ad6ff5da3a9d2ad3207c1e68e197841a2017d1471585824339296a3716", "0b7945c4c4ce91061bd74edf10a618b6df2cbc151c9f9dcc81996c830a52c2a5"), ("1b063ae7a241bfa161544b95ca752627a6895805a03342884ed56524ad0dbf72", "14318b217a1dfbbfe48f09aaa87bd3ee3283b5e0a669f70ea4792dcfab1e2bf6", "0f8c61d9eb9f9a9bd07083221d08f9d59ee53762bf665fef19c29db5049ff95a", "08878e91c08502a9c66dbb5162ed4397620ac2fc5edb4b442781669b55a85809"), ("29b3b793d738381ce0c54fed8f982019a2c01db122085ec6ff42274cf54e68cd", "119763d469b8c5d5eae5f846e107c816474fb6e6fe0888b194532dab9b6d4720", "2149a966b6f585712db72ee0a476eb0fd8d2e7a8b66dd2116f0368824f415af3", "2808ccc3a7acb12d6cca4214e6bde8eacd67ba16dc3a9009f86b6af571c04965"), ("1737dec24ca6478e1d84fb31de040a68b4ab055b2c15aa4a510c075eabae60ea", "0d8413dc8d03a5934d7c178d432b5388933a33f73e1f712ce3c464f322166fd1", "037026cee63bd0f2e1309b7ba136cfecc5acc75e18f5090968c9f33a578c124a", "0aabaf7a74f2e41daacbea8bb15e781b097dffa04c163b394c3436e74ad9ecd8"), ("29039fcbc92a6a180bb4386d452f568a0e8418b845f8924b08a3cf2436dcd327", "08abee797ff59509a363369440eef10a19acf6ed0270a329b59b33e9eada4233", "0b1f3d8bcc9f4de7c45c387d708250f2fc94d5f283c99febc1f4524284c8cb83", "20f805c7f00b92ae2360942e8a061937875bf7241f17d2816a3a2e947e11cb6c"), ("11c385653329ad99692068f0862eef5d879d88035fc130f41fc9482bb9e916fa", "0c2a5a910e647c384f1ca18cece72e6695d7a404ed4111cb321ff8515bf86638", "1f70cf4878dd29a162b3d218fbf6867dbe7e9444dfd7e2ef661b39086701cc75", "127c463ca5cbeb228db4d29531eabcb9f930be0226570efccc3bbf9f192858a2"), ("0a2ba1a71109c174341190314fa2151628cb50485f3a865c1b2d2ec143a386dd", "19f8d16b300e66936a539da2d482777534156ec8a15d30f39e0fb67942f1325f", "0d48bd8cbb52ee2433983f43a414e6bd65413d0ec2312428c57be1247e6173c0", "18273b0e97084a2f4c727dea3d20644a8ca4db56670e96d843b2238dbc982e52"), ("2887e754f1aa169bf606b969e499f803e25f8fabdbc8c9de3331987614ad3655", "305bca4e18b9243acc20dbbafee5711970793701a24071803f8ef7a35726168e", "0c8c508473b953021ecaefefbf72cfc7341118f1f59c292f78f65946f030869a", "139400a305703b614303d3d52dc8022da3ddc09e5f862dfc6565a71f50affe99"), ("1fec8927026a67a3cff824e1c4afd7774720625fd6fadf7f9454ea79eca6c64c", "0b5b0acd2ea61079f68a28872fd88cf63690422cb5d82bddd598b60a06d8ec45", "0b41fde52e3f4543f0288882431686108f0be01f8309ab5ec1996b165d626f67", "285b0e64512ffc65ff8d158b9a5df2aaaed7302c83dd58dae772b1cea85d2342"), ("253506d8fce0278cf47a1e67f6dfc3e9de0c74c6373d2c811b088b9bc6d18a95", "08d42de15966e543004c765bc356019919bf14b46d3d5586b71849c8220e9577", "10ccb8cd8c7ef54cc1fea68d79db5ee64d8c19f27218fd77a2c4584082d71d09", "188a0a18fc6b9de763d47ea5996532e270487b14262a1fe919a32f9d587ee0f4"), ("017dfd038e12033f16a61e69ed8354ed12cd5d7ed3597c1002684e37f81e745f", "1e289832ea6a549cb133d10565fdfa62622208c38a50b554d705fdceb78e574b", "185e25fd43da857188692323db98b9b380e7c634f96c89ba7d763ef8aee60bf5", "0dd9345c9ec9fcf0ef2444c4c6bd7065b66f6e5ff774f4cceeae2011bb2dd980"), ("1e5d01447e0aa3e2ab6e20c3379629ffe98cd6b1be394699da6e3683dde0e6bf", "19b480e1169e0c399a0c1608916c452007dfb4937f9b047860e07ea7921194aa", "1bac8f417e1d7b4373025eeaebd5e5cf26b4c761b14f7a67b5be9e5e9f2ccb74", "064b3b96ca1f650fd82c982d554611e95a8c5a9e93f48130c09f74161d7c4f21"), ("0a5021efaa8145e89b2d3df5625ecc66ed5fce757cdb5ca3144c0d1cd69e96e6", "12194b2a8b9d9bc6339f8de793bf8a715f6c4ee90ab1e62a52c4b0e6297f2d21", "022b61d68950af6391253e1fdc054f4711962b73e7440befac64ee87f549eb7a", "2b11368d793e816db1341c4ff97266a2fd3b2651a024c14a89d54d42d8460ffa"), ("26e3bcc6ea5e9fd5c0f3346a8b32bfbfc9f66fa43c25fb61e73045c20b5f4d3b", "25e44ae13f0a9deb5ad22c77db9ed1932b24c54c3e1fbe183d7ef48dd64bed44", "1ea22a513d3eed57215fd0d4fd698df1e46a6124ab0e45b4dc5e566388e74d46", "0c97c7ee8cc242f2bca11d500e1ccdb04f7d67280875cc242384b3df6d2f7aba"), ("0c25e8e50a6dc202f9212cd8674972d2234417437aaf0e37e311869b4782f929", "2deb9a23e7c21038696bf452aa13bb28e3de6ea2fe050a01e23a9cac9922b4bf", "0324499e8178a801383c78fa78194e26a6d4c4d89d048e4cbe4f9ed31e5e2640", "04b4d60d6cb66c4c76594109dc5383d738907be9bb998543f1988669af09821d"), ("1eee8683e3800e05493d7556949402f7037f38060c8723d9dd28914143e493af", "1009ccedee088db546befa1964c4941eb8bb93ae429a56cba969fcb6928ea010", "050af57cb465af21789406dbc3483a90532324d01e4f70801541b58a069da023", "15f3affbbe9a7352247cbcd15f0aaaba95fd84dbdc35159bfa47cab6c31d6b86"), ("1ed7d4ce03c13af144a36d0d6c144f116c5cc15e3e0f41b68d9e4116eaca6329", "0f3eee7d15e729d19fabe2df70ee5392e1a8733155a9ea731374a11fb3ba16be", "2266acb3f45697c8b14ad871221e57bcc3aa1c7f7ef765aeb9a8fa886c8688fe", "1c27e529e7ce58730a030cc41bb269c6aceaa1dee6237c29751899042b780593"), ("2676c9a9bd541eac083d58b23784c454a62658b3cbc7305647aba29e6206aa8e", "2718814119356d7642cf0f8c1c2e2a6477a73f17b7ba89f604625eebe6d02342", "04e90c68e6a1679145ee5dee8512315cc6c820f661153c76180f434239aeae12", "1f1a9c8f6eb87c756975bd5a94ee5c721102697b66505983dbee517e104dafd0"), ("19e10e7017a77e58452f09dbc5934b292b7aa973936851456baedc2f9e414335", "13d05fe1e1e005e6f2c3ca5276173050235f5d83ac56305989757a0c23403a56", "012580ef29fa14a8725764b826d84e9abd512a7461fa5e71589516f0d78b8609", "21ba67ccfe80adc43f0e3c41d61bdc8d6d2c635c196d9b254c31868127ea4b6c"), ("09ddb98fe8320318e549618fad978047239366a127fc950ffad00545f2266693", "2b7c1d9bc2f4fd897870b353b7c60041432066fa76ba8e178dfd6764b817b72a", "0193c93f65ca5cd89077c5be1578e9c62367d23bb9c7ab4fa352e3643c2c004e", "19c597c2dac0e208482bdd5cdcaf00d3f7b69e042b228a7d720fc0b634f3bcdd"), ("2ad9ca6e359e1898bbbbe1b561ab65c2d9fd93be42869f2d15882cfeac141bbb", "0612c7217de6106fd638a627f93a2fe982f4e49a5a6134b1fdeedf17db7a7227", "10fe63414babee15ecddabbd4f280ad9796f530e4217e98923162b528e1c6d09", "2273464294fe1167724ec0800637498d0a4d89d03e0f81f3e652f2ed3aaa23da"), ("109063f3fc6453db845a2f7d85ff32611c7dbc1e918de6656858e9021551d89a", "22a8a844faa462f9c5b382e1c27ab35092d8b1dab0d981b2449fd8baabacd762", "25dbc135a00a0948e2f7532311eaf2bc7545c5899268f6def12708fafc80dc8a", "01291449b5839099014a06633d5315b6ee0ec76fc68ac6ed7aad8de9ef3e07d6"), ("17b79099667eab074d2a084429517f8fe86e134374280064f62e75b93bae6363", "2427ef6f16ed55b1ad4f9bda36ec62777fc40818065da8c0228ef7d74362b448", "2b9fa48f77e47143381c1ef5c8a17d4e6ed334fd2bdf1ccba549c17d0d567ad2", "006774b2148dc7e8c13646911ca280808e52b26f4cfa8487ad0d33926f663a3a"), ("03df3a999231b972a3d0ebc457b6720a43642070de5f77d8cc89aef3428542dd", "05564215dbdb178dc2af11178ac8f1d7c23b770e578a58be4cc4c3333b36ffd3", "205e0b47aadd43ae2f5631630c9113e3a518c99c59b035c8fe57979f3e2e1b43", "1ae21cec4ce06c59e950dd258358058b76498a34ce0116d47fe9bdeaa4c4da8f"), ("08ff2a0ebf118a7b817be888caae79a669d1e07ec9bba567e53164d3dda94dcc", "3000f088ff5e567dcd8054c1bd85c303be35b2ec0fbb7042f40b1fdabbbf329c", "24df5d82e25ca1e0db0d29d02ebd517c904af3d25b99f03b9502b848dc3e0359", "1271927641c5b2e31a1d1f2c2468ab1086f0be20deec4af4d48b245f72e4e815"), ("2baba6fbe1a565f0bd1f327267e48657230b37408559bb8864276a813341ee8b", "0cff6b852f624657f6453193e57fc2f0f05ed150ce0e2a399c350c5af8171f24", "013cdfea554883aeb9e1820003127a92e61878a70153598a82fb3f48e7f5bfb7", "0981d4af8fc43e98ab578c4339e7533f68023bc63e22d752b34eaafd6bedd1aa"), ("015c18d718ac96048a1dfee6344f7a947d81021a022277bfda3baa519e76f701", "034ba5eeac3659e88ac23d65bcbaad1e2f8dfef631bb5813d1d0c3b36d81e26c", "09b10aa71aca45063f20e44ecb5de82d674421ce9a1ec812b16e604024f316f0", "24704ad50a00568ad87fb0e7487a6fceb860ecb2e94807861a5c6b1a850ba2d8"), ("070df53c7d3179af7841db3ba56de649f4fb7255ae921c7c0b856412ea09c901", "1b9f873fd5dcaf57543344232646890c0534559af0c5474ca44e62b7678676b6", "073611bd8f16be0d8d6bd7aff954b78fb57b1a8aa92d894ffc96f2a56634bc37", "10d1353d9d0435a3a031b428f2f1ab0756a0b7a85aacc3fe48b50a1f6fc504fb"), ("1bc32110c840350150cde6dddd7e70d3a09a8b02b66f404b3cb6cdd078ef3aec", "18d4c2fc44861525f98d6a5590d806199a3ba92df178956f3b6d54747f5d30e5", "105d7448a969d8bb5965058c7e8356e17461e77a8a3dbe3325c6d4542379640c", "0cf7b625d8bb5b92ac6a3d64d35c31ed60ba9ac5e1fce6714b40ffb6fbf96e50"), ("21c47e2a3892521608244601a1f3d0e3c94198216561565b694f033b7e71beaf", "1d1045d0767e2f2e00e512bb6c329a70305172c562ec6916a299684cab2d3205", "2fecfb7eb95a9f3c5effffd9b2cf0a140964014cb6c8bb89f608787f72bcc05d", "146f0363c2cbc807b9fa00fa7017b08c0b29956af078f63ff4f6c1983c61c34d"), ("0c1b44ac7b38547993adb714286867e37323222dbf4ece1b3847ae365c235e94", "2635c8ff958e1a27348ac30637f232f4223a96986b30a802a2277b7c63666933", "136114bc9ecc1dcc9c2b2d76b1ad27362e6a5494908d5b8c64be6012acc308ab", "2ccea33b3d127b90accc51c8ba27e4e045c99ae8e8948603524c26011852044d"), ("27c635c18f980dce85917532386c15ebcfb51fba2b3fdbca044741a441692382", "2ce80dbc08fd3d22cce08d40be84e47368478832a083f47aae30dad573c4dd19", "2ab3956da4cef18715d795207b7e3fdb59e9cde7ab4fd8ee33fc3cff44cdecf9", "050a00c5e335945260c270c59cab0b5217fc55f8e59a48f94c09a1c211fae6ae"), ("067458430b0f614f271019c6d18f2bbc664b3ae9997c067d19d0488686131763", "2e1fed583ba94ab0af683870529f6b65f78b314d4d9c0466964aacd42fb754fc", "17c681c3c9ad64af537ac03aa573612ac26ee0b049c3f00b9847d4487fb153b1", "1cb24565f687c6e2fdd99cae0421412a2d7b8769189e6bee959e771d85b2194f"), ("00da24ee14415c5facd69c0f48bc28cb21bea8b83ddf186cf61b72505f38c626", "246aed246173a28a2c67205e244cce77668ef4757b541002b1cbda0a08821e3b", "278ef2de2060c21e316ef035368b9faaea2664ee7be19cffb904509dde94a8e0", "047b0bd1b479db0461767f4ef9c8e0ac83107a204edc8278e0ed6d0ceb90c80d"), ("16f948681163661f3f9700177e2516bf23461045ca5c34793c64416d77e965b4", "22b29a146330e2aa0d669c07733633badd3027e7fe2f2e907020785b0d0d6c65", "095ffd3e7c98f62cfc5f3035a63e2b0edb64bc2be4773decc8f84bf15feaeb58", "038dd456f60ae221d4393bf368447cf75989341bfa207c2f19b6cfa38d4ffdcc"), ("00f34632dfb5d3f1182362f170bb9559fd6662b301bec3cb0d5fb8ee8b983a88", "18588eeac43708f956eb863c2198c979075169d2254768eb3fc97d2536c84003", "0cfa442b4e7886dddd99a922752b6c994598ad9832861e393b501656fdcfa865", "2d12459d0fdfc62049402a050d90d0d707ae891b8acc4d77c00b20e27186d92f"), ("02813a1eedf6ba139a8746140248b3feebd078c26f979f194b70ab1b1446e74c", "2f9331ff1f391446add4bbcf13bf1322ce9b13de5a199e9387d5f6354dc66b2e", "0be902d23df679b88c546117c65e7f8fc8a7817419dfe8ba41cd000f583e80d7", "2fe3391df3d62b1ec07821226d3910d7bcefbdfbddb16a6b0c59324fadb26323"), ("056c404964da208dff6446c03869c0500440bad8bb6d9e4ea02139e67f6b6ce9", "21512bf5b5ab72759735d39d7bc7440283233533b6d122a951d609b103869190", "10dedeea7d5a9fb929a4148cbbdb360ddcdf42aae01e70b58aa01e54ba1d38e3", "2e7b6b9d7b99b9ab8dd9386a3c4d76ddc7dc52bb7877eb761a79248548a9988d"), ("00f083dc7d66e96df9ca7d1eabfab90e5f7542730953d4ab80e2fc0d57db59b4", "1b11677771a3f83245fbac4fc6f5dabe92b171f1cd3697d1eb4b7688c1e39cea", "0e6c3d301935b10efb3b107f7f757327bce5bc111a6300988a3fdb291166d4eb", "1e946bb6a4bafc5769cb768a3cd45d82460dd6ca1469dd05652ae55a039b8216"), ("0b250dfa56bff49065c4a489393e09fd41c6b4bd96069abb506034c566079475", "1b4ca1f1f8b2d518bb41c242c128924ba3148fdcf07042b4f6faafa7eeddda42", "0b3f9241a8c4b7a00a7f2a1fb0f66792c720a1be66970cc7b060dd0caf493af0", "2fc17ec21947777081cc52e527854e5a514e5e91de54490238d37e97ee0e0e4b"), ("0a612c96199be590b8d0bca772fe2f6b0fd577dcac47203824ad1ad8a6503d64", "176f9c7da1adec50de4ee26b287da4fda80c22f06ae15e9976365e7dcc9a696c", "26bfc1dbefaf9ab1a7994fd05c671fa7b057e40df9633b5534af181410da5e52", "113994427e447497e8cc8c5b987222c062a8a9b66f6d5d23ca50d02dfd1cdcf5"), ("1b1930217a85bdfb74f2386a33c3e8d939c933b458864d755905c97f4e3f49af", "224378ac1ab0adce564d2c691cf6dca5306cf353ca1ec8c62a6859acb1ed3b95", "163af885cd5f94c9f681efc171718f1cd11a84bf8997ea7eb898d1c580b2724f", "0579f95aafe5b6d492a88e88c3c74320d249e9b586d17b78f63ab04bcf4ff207"), ("0b08336843f6b9eb435accd16d9471be3315adee2d86f0ca0e0a10544bbb197b", "224f361ba46026943a25e630e45723c5af7b1c14fb71ded513abf5c137c31f9a", "20a3bf22bdcdee45f0d79564b8154d8c4b53d882d4036d73bfd61d34c51839b1", "23db20e59a132765c2e5c2be5522439e31e0de85e24b27796b50b60ee2464146"), ("22bb83f0d7761cd38758ec1c14d11b665178b1ef36cd9635dd96d7171b672cd5", "28b5334ac4a84a143ad43451912aa966f4da3cd81af5fc28b43d6ab3de8caaae", "0aa29df4789ff0d9dce60250d8fd5be4c4254ccade9b67ac1b2981eec3c3c586", "10228a8a718fc126c49be5516b4d9b8611917ccb9388ef06482b196a1e1468f0"), ("2768c6c20f63354df0a621f70ac7059897bf392e0538797372e90e2aa2d268fe", "20e9a7bf10b21800da4895b79827973987c1154ef53874cefa6f82d6689373a4", "18bda40e3ef85c6c963a2d83179d63ec5565e8c44b63c29b237280585feeba91", "1b532b0ea7f3b9b6bbab7103a4841d419b7c89f6d4d0a9e1b7e9b6da42fadebf"), ("2c29c0a34d0e5e538557db241cf9b26db6f0ac333363a4f7d381e59a6f3ed89b", "12db320852cff7dde6ed91aba692774a481c989671816629de93354bfaefc9f3", "1562f2c8252c8dc5f013e6ad141d140dbe954305360dfebe7eae66d81c3cf519", "2757e1ae021bfc77ee9e4b37cd30e277c3abb13d29e57cd9b5aa9cb0642b8681"), ("1fcb50a75780ecb1cfbf94e09750469e65b118175b7686448fb380b5db435f63", "04c407ae3499c23d96613f0350653e4dca567f6c9b98337ed1acc08dd40970af", "2975eabfd9f42cfac981c115402164959f8b1af380e9fd2cd31fe802b104ac82", "0692d737a0208161994f35150765c1b8342b2bf1c327d690fa6e355b8f7f9c1d"), ("0947c4556afcc68c8cd8d986bc5d8215642fd5425c7eafbe718d8d7090757f6d", "099b0226de411bd1b03ad75c09e590814e7466164814a6c3a9fa3ebc585291e9", "3063fb626b28da2b18daa031de28c54ef8febbaf9e142d3a352c671ea89beb9f", "14ea4cc5536294933ca56407e018e45e11dc89edca6bc5ebe56d3c233faec392"), ("1c29b9ffd1c5df708a5ca525bf1ecd80e11b0ae3c98a23c6b72f9db40c174088", "0f7d392d7d6d32f4d4e19660b22bf5cadf5f5ff7ecbf729879bc4a86b4dd849b", "11c69c6243fd5533b78dc2beb3655f1b7fd828bfa21d6387277cca18e91f8368", "1e8721b6c76d013fa64e7f52992a88843f02056e04217d7e3ccc3832f10d1d7d"), ("1fc538be679ec64c5bf33b9b83588df96801b10552b8b1b1dba17fa8d62d73ad", "179c21e9568725519df8ed022313631855e2a3668e257ed5e15b8f55ff209bdd", "22602c1410a4b88ce52e11bd9148bdb89da59a387d1360e69b78fe6f3112afe5", "198f0a7251b4599c0b8313d065e3d46df68c8b3737815acd5677a3db4aa405e5"), ("164bbebd97ade7ea353671ec23a7ea5dfd4bfba7986c276f16b1c34b64c35b18", "22d27403c5e0e1b9b7d48e0425c02ddfb7d7529a5aabacfb59cbae6d1bc70e09", "1fe7306b04e2d537c6e99691fc64e5a3528bcb080f4d3ed4cfddd58a33d90dc8", "1796ff6c8e2e6bf87fd7b10203d88c3dc749bd2abd4b9316da57b0d65de6b0ec"), ("2031923ce8a8ef13cc3754065aac3446e19c848625e535e012201ff7bcce3442", "10b49923de61e6b79a893a977c9b2e04fbff5e607f27fc560b5ba52e30f0899f", "16c7b3f243acb174cb1c846466ed7979c1a452a4cdeac87aabee9ee3f38c7d31", "11c86c79cef55693ca5c4849042abb84c139d57349f36d00c63cd62266d0a8ed"), ("2ee7d397eb70ff24110caf26535cc68d7a7126bf2aed629e98fd1bb644546161", "1057f539778d930e1966c5f9175948d4b51b6958f9edfe3d59ef527f61ad3804", "1f9e4264534684879353761e574f0f96a2421110bab7cb3a821212a149e5d4dd", "1337a910978d070a029f9d323d6d20eed7d98f59af65ca80082c20f752e0ff86"), ("1a067104f447a064a60b478405c07eb924b001d9c7542888498fcf25e3253116", "1debf2fe2212d9f8b54735fe15c8c34b8b9f9e312d3a7ab5ddc2394a182f3cad", "094c64cee3d56487be69632a4a7eb2bc4b87f20c17439fee9e606f19ab619851", "016d050da8fbad8b4d0e82f35646d3572b6c67dca4234baeb42903ff20c2b0fc"), ("22528bd5bc6240a0b5e486e56f4eca2ff5cfd02208fb46b8e545b137d5b29cb1", "0d9416fe39dccd0575276c4c9749f570aff8696c38b4d56b7c3ffc5b26fa1930", "0992ef5025352d55518bf3fd65290f58edc3bb14bdfc23bb37e5236175c5a443", "0c2703b8ce05c2b8d82f7e1e084b27dde73e2eef45400ac61b24ee3f46b0cc8f"), ("1a4a2578446844dd54970d1c4879d7d0516b1cc8cd9a519c2c19f8f6459aacb3", "1d68037d0f9b138b2553ef09d8668cdaebcae4e1679b54c4d10d76b6e7728e75", "0d6091bd8b7362592db2997e2cce34b3e4ce9bc7e4bf956043cea3e7509933ec", "2683e6021d2e38f6ae7c6a8d0a6f3209b1673dcc3b9f035fba5fb84326d12032"), ("2dc8930f9e9337006b5481b400e31a7bb66fcb7ade5520ed731a16fecf272c25", "05f6fb43bb7659da2fb9b1e964f670922e22acd0a00ae902b4a0735a17cb8b32", "0820981506f10a3bdbf526471472c02a64f750ddd0fdaf0fd0e2c09d56e13403", "11d626eaa2a5f73cb8829d53a5172ff0eb2e0a7a56c9874b8e145675e37a1308"), ("1246f06311b8e4708f9026f3fdc4d5c0fdabb10029bc649d62d7ba0b341306ab", "02e2f9c79619293b5416907b95bfc33b4068c3a72bb312af1f6447f00b7e9c49", "01e36eb2969b2c309b52fef8ec71950f947b39f3577dfde7de2212c0f1214ee5", "0a223de0e913e26ad0775766772b4d7a0d1bcf2ea9f80c6201d05d8bb8e71c8c"), ("07a6f8623d6afd4ecb7eea71270ceda03c3d73857748cb79cf05a970fe265984", "02d38d249a5022e96fceb91649561b3f6e8feb3735c02fbb125a02c755409139", "0fd6f16014e37ed1638c8100d607d4fea5c5b1cbfd374dbeec8924884c11fbd7", "0d89a7a1d4ca42a2213525605ce85d801b467c1903b5f4ece04511ad73783169"), ("20184b26929cd32aec702aa240de53ab361a2cac1e7c0751c06ce51ca8935bf6", "2f4feb74a16f65812a41e6d8e93eb8f4582ae0776e80987499e1a9727592766f", "17386f1f86e3cf7a8c45b61024e1182b0d2eca57d5f28292240a745f521056a9", "2a923f5a6ab483f526eb243b5450f68b2ef6c86afbfadab59675f4a743abf1cb"), ("2bea946a8143887c478f0a97d7431c6a752da9a4de5399defae26ed7f3ff50bf", "0a2b8b1591470d70886120d4024a4a7620de9e3e5a9fd3bb26164d0f54824037", "2ef319b2f61dc427dce2e2ea45f1cfb27d7ab6e525d141b9ce2f48eef2eee907", "0f754278a1cfe4259a776355fc8c3debdb9123b6a3510c226fe1747c33feefe4"), ("2cc3478d439043af682aca8dc6d5ce705b1554195390cd8ca38c5c2264142361", "122c82ad3c1c5163924b241caa7516e3a71c2a780a283484732d89a9eaac981a", "14467771b3b86473a058992a0ddc90429a95d9846525f1cad3edaa100def8896", "15fe28c5b1b0f666ff1f69dc5d8507beff67f33c4f65aacafb3dfad81d78fd26"), ("14c7799dbec034bd9d226a1a3b2c81f0ab344a266dfb76677376dcb9a989cf24", "1e2b11693451dfe5f04edb179fc8ac8cf5a471ea0f096272cfb56050954eb510", "2cb725a64b9f609928ad093940f13e0bff4fe5e1b93486b2d151676b8be0c562", "0cca4258b4607f427c4df6ebca1d26c6cad2b067bfd5a036ed49013c35b2d90b"), ("2e07b01085cda29a8525dca64fd152aeb29a2edc8f7c69fa08f5a681dc540143", "1139d5e6c6c96ce2de21aae41e29840b3a86e24b7f3a020fa008517cb56bae35", "187c45e3c221ea190372dd46991da269f3c628fdab5a7f31fcc747dfd4ce70dd", "216ec248becfbbfb2e4f547d3c187f4f28ee3fc30279485dadb03e5f92eb8eb0"), ("2dc3996ed66a4e78edccca6c13a6283d1cd727aeb2c9001a26a5e36f155347bb", "26aa8a276a728b8d651ad6de8fb61ac0744e50c25b669e8fe31bd696265aa672", "0617ebeb28d2a892ea70d6b5d61089929fae81b2a23525e9c95dd8d02a8d11f2", "08ac253802251fc07cf52bbfe6f114f26ab735d34bf97e87f7afdd24158debdd"), ("28a2e13f3c0af770eacc1eeb81234ab0028217189a40b80ca8472bc8e21b4c09", "1c598cb76f0b756d6c935b00c38657d8bd19a57d1a4cd13c4faec40b1dad7499", "290c5fca0a68c1d57c2404004e8a93973080b3da44051da3c8ccd59cf7be1680", "1c958ed9afa15b259691181b298f15e15eeef1d6ea8e0e534f6ef31136662bfb"), ("0962f835dd6020a3b875d95168a38a5146974f22db940166bdcba053e824a694", "0a4a37b512574499def7e59f771e6ab1c411d2c4109902d5492c385edb9cd045", "0cd0c3c434fffc56bceacb1bc8a4698e759045d98def237d74fe72dd58470740", "1f5a70e9f200e7e6ae268ca09bd0ee59c5ed9f3f40d6297d3fccab0cdd960540"), ("1ed1d64d5671e9b41bd81dbf46b56ba3de9bc7926aa78e325d09c1f2ffce8de6", "2d91ae952edd2e96f0558d8c70f68d2a628ccd1a547591852c990d82ecc8ba17", "065104668c081629ae8c25477d9e0d9b809ad48f48557c362e526f1114922c6e", "2a1beae22e006fa2c36c1dc78734ee54c60861efe4b9c8776845c0e0e9e70ff1"), ("101d0a7997c72aa290473ad193fd0806c760d638116a3916a841d2d702fc6a03", "093d4e0ab16fafc2a48afd900116124fd5718731f99891d7b3cbc4dbc19de985", "0a367c742c77dd2b517b745f09001b48867a748d35e3dbc27d29b3ab20cc8f01", "0affec66ae8c0945787fc2cc8901ce6ada40acdcc0ecd6b7087cfc572d9986b8"), ("2afb25f35df919a3d1c658f4cf8ece7eaa3df02885e7539b8ae17e308641b2f1", "2e201b287bd5bd2209a374681f2255cbc1b9ab396e359a82dc8765d22e6f5b73", "0737cc8db945d348c9e58f733a6b9fc0a41dcfd8ba88241d72582a8079107eff", "2342dc7aadda54be73317e986b9a8a0e0f933805415223a607bc87f0e8f99e5a"), ("1900f7127d86a15fecd469234cc4ae6ed6bff83107ccac54567109dd793a9ec9", "1edf45dd6af8203bd9e23cce8f393a7108c8a848c11a268ece6e704051afd0d6", "0839504ca1cb34df30a9bf47549a578adf06b14f6b007809b469cd37b4df5deb", "069cebb24ac1c00760a0d578a1e96ae2d842306e7e9c563bef2ba3f2aa7fb148"), ("1e0e38b3f68bd823a1a2a3741d3ef289c10a7fceeec2403ec7e50d6695e8027b", "1fdca0366eaf7e62a3014a8dddb0b3432f918438a9a5d178ae012952721c14ec", "0fb9bded5febb4eefa0e7a4795305217b96eb5aecc32e9da304dc5bbe2894a08", "0ef45a6134d35252f012419e28340c3b24a07db9b15bf32c053c79a6ebfdc7fe"), ("2ca0fe6b8eeb4541afd9776ffa1bf9f57b3f2ba6f1928223872a3bf7e2b28d6c", "2d2855fb82e01ee30a4ad6772a2aefbdbee2f2f38fa632d32553c194699b88b2", "0ae75e6d652c8731a6117b37ed7cd9549fdc137c9bb6fe2e5fed49a4099f5c51", "24cf686627e74285918c2fc1dba007ffa8997ca25e3c4e5596eee555157c5b83"), ("16ddec0405961d46154db6b9cdf89398d106b82beab6ea6e07e51aa237f07cc8", "0c934fc82db533acd48b0b3536ea39b3b717a89b1bae40b83ac9dbe5358e42da", "0173d82a5320de87c5201a504264451fd55dc64230b452dc7cc446c0a3cdbb01", "2488701898950b6a180a4aff6cc265702e1b04e2e2e42e4e0aede643428c6b80"), ("2c55b34c997e1db679d13bfa8a99074136e0ecd7ba442a33956ffc6a8fa14cb6", "0c53abea4c1544e5481103b9bc36c5f8e829b57e9e3bbed4bc3baed496df53f6", "17f775f0e59b1f7c5185aeb23714a66cf5ec9866d600144f47f936fb24bada14", "2079b0ace7577c0aee35898304a310a1a48ad73c808c362ebcde81b965e3caee"), ("0477d2b1e7ccaaa5dd09fd565f803a3a1276805a7bcce48ff824a4c0667736f5", "27354ca91b55a5f419577956f7819a331bf702b4cfbeaee3dd48967037197811", "1090f8447bdf94b6cf583d571510520009136a87699a7a74ebc5b42388f48283", "1d45b3fada72d830d8dbc84bc3d87efd885ebf3f4b23d42c3d12d588905775a4"), ("0d3b4b7640ab9f75f74644ccc4563be368bf70a1e6bee08df1db7a704eb60396", "2709ecc6bc3a4e101d8aad784fe9df627257be0b061d4282c6a8faa1f4bd8199", "17058d28602d1787e013a1d764b6c363f46c92d73a5802b6b3b7c5d988753d3d", "15cb00433312893c1ee692a13daf5c598b9062ee4ede05e3c9203fd928b7a5e6"), ("183668dbf4718c481391548ef92ae6b40631e1e52e9602722f9cecdd3cc9045a", "0bd40d581be77ddfcbe734de36adc2e03a8fa7138e09b109f6829be403706311", "1e1e17cc66069f03ea4698eba7552974826e25887a5e1eb48c6020ccd6d2ecbc", "2db916eb08c9fe14dd27ba6e0dbf4a7b61cc9db4dd263333d0d514b746119f19"), ("10387e78920b6ce71929b485a890ce5ba41913a8a9d1631358940b2c1485a271", "16c4560a4ddac2a87dad01b4076b41e1a08a7b41da1f316a0aff7d6d93e72fdf", "016c45c458ec220d3d59aed372d70b9e9878a57b41b666738d1fb428817f7e1c", "1b0ee370818ec3b8b4520a161732e8e4ec12fb687796c8ec05bbde9d8032ee91"), ("1f4d22c19bf0ffa967da4562fb0c554dd879d70690358b3c46ba210bb20d3f00", "1084e50222fb59dbe2f3aacaa47567177af972e1087622407beedfbf4da40ed3", "06cb7282d7ecc03bccda78c8c58e9eecb91f9f1310d027853be113bd9918c28c", "2946e22336620118690b286060e36a974ab1a3e7118e8a26df9fb040570a93d0"), ("21087606eeb7bc6aa0c9dd84c80ad6aa6902d23dfbae6d45e18416eb4c60ca06", "04398c405700049dfc628f6ef207424fe0afcdc62942cd5442ed6c1084027947", "00b0ba5ab09d39c100c32a1974054a8eef28df21e2db611a3150a2c422ef51e8", "20c0587f5337998e56f4217d5a02cf13ba70247a3477f3371e6ca0afe4af6a0e"), ("179e809cb44eeec9f9b95e5b863b8d859d9ca4b6b1be61727273d1e5e04ce870", "28a3bca5002d2d03129b22543fe15765724b7c1a30c2889f3ecd4cab2b621032", "2e195f52b484889adc6a7441b9e8dd1c27562f5fdd4290527b98460b78447c62", "0b8bf2fcdcea13f3b1521e1b01191f9d2219ca3efa944aa5081ad5d137de798b"), ("1f27a79496507825349ad060843042823b73e148a4ff61de994f936ef889a69a", "262a06f745f4cff914cceeb7ea38584449fa5a442f08fc5bc04a1fada59a6b2e", "285a3a5c02664f151ac35934dae14ca27efd44aeda22a5a3da03fc4759bfb4c9", "2316dee8a238923a302b97c6520044c139ec7fe162dae46f830fbf70a715a65f"), ("1d9c7764c9ba99639fdf1bac381ad87b16dc0ab6595cf455cf5fbe32ecbab4fe", "26f9281e33193a098676d2b8b1f5d0cd4bb10b64a004a5b12105ed6e32a9d93a", "1f47ac43cc1810444f46cd4ade2a8b28e01aa8c8d0f4db56d9201184d667cd5e", "2fe5caa998e4a0bca6b0c4878ee22deb2fd52882f45b5ed3499938ce3eb915f4"), ("0e9a887c6c31abf0ad77f62ed6a8bc9c9be79a4d373bec247f123aa31b4d2624", "133ee1f6634976b84d8f4ee00b5ce7850b887770285653c08c4a3f9c3907d384", "156c0f043badb1480415d60e671b1bf4d240d444a429b8b6b72c130c725799d9", "2c943462096a1f1efd583d69e3a557e4c4e99f176dbcd719465260e819d7ec36"), ("1b5d769f1b6eee742b830cc8c75be5902c730c92b4bf991a687a39d70cd2fab1", "1cb1cf6a47744a9296daf209668a39cecb92edccfb70328c28ccce19b64f5c43", "2eace30b634605824f9c59a49422e41c7fcc3bc91c57102d17b832db1537eaf0", "1560c163b7963ff14c0df732a5e937e15e7ac460c5ad012edc5b877318af4ed5"), ("17566de00b1293b4ac148f5fc57e8c49ce3a73f2cd210f46a8fd6a402b71cf49", "1d4e2999b76fc8625c17b4885c79a40f7c124367b3ec869b1a4e802852bd2eea", "2c274f724f74bc7f31b17cded8332a0aa167858d5db3ec17d8a80503421c9151", "04394bf0c9620302faab009fad23827125f01d133a85977b7163f77a623e9a0b"), ("169e259791566696fb2a541129083cab94d834643a97d35a9efac0268563c870", "005783cc1d3af4b916ef349382880d824b25f08c385c2dc42a3fcf2e3cd10d93", "2bac9a3a48fc20bc6d5ea84a57decb3f90e67e540e188939abd29a64524d53a6", "23f998019f0ca69fe518c2c6cef70a9c2f6d2f25b1dc44e66016e8d30b7306be"), ("237df2da84e014fc394face28d276d9453ffb32653e3372e9a90d8697f205ec3", "0c67539d4c585fbe823ae8e60dd015abbc9a4c7362c23e6a4ca12c866652f769", "03505880fc81e14b419d6f1b757550d3808a7c036361c029dd7a232dd84e3033", "20f3662a3070a5561902a6d3f0e758eed8bb6613d0249bc7ff1b191c70eb6a95"), ("1781deb31b086d8972fa9a6c67e5db790637cf036e31e0479a56661bcb3618d4", "0b237ca0776554282b390ead2adcc341befa59cbdeac4638c54ab9752b367ab6", "2876fb429087b9c9d8c9a05b4b03a498f5167566f424445d6bef9fd5e2c61280", "2688f963dd73325baa8e8267b427cb29ddf0ae3bcbeaad0cd56fa792938231ed"), ("0b5797ec8981a5723cb3353e04ecdb9800497ec7f71e733706d1999c83d9dc09", "20414bae6b5c9b7ce33c2944d031876aa645fe5658f10db79929ccafebebe586", "0123d95cf730cd5ec461aa1c7988e5337d553f41b9f1e93b4cdd68b4c7b2ddff", "177139741b9e921e881a4a57968a07906ee1f6a758762828c6bb9ddbe76a897d"), ("2e7d696a6b1108a79ffad16988196e4b2a888b1483ca6d2015dfae2b98f92f5b", "16cf6a0911eba5bd5f86b64d9508de139640715f354f1ad9270b8d9db5e848a8", "1e3069b4bc1c436d7719a700145064365c13f261d460c35f8fbf7495f6edef2c", "04d8c6ba6a791dbb997c1283c0194210aa8d337be3bee053d076d37ddce231f2"), ("094bf4b546a8e8202e3a7febe23df5f4d3e0ebf6edc32d55a049d91b08a4375e", "19286f230c73f8ca3518b5da6e488364efe35890c2f7f8a8e0c0a6d7e8d290bd", "0276d05b0405053af288f7004e03a4931af44ad5914b511a8e93582babd6ed4e", "1eb9967411c9b342e62da9e6897199a9e67326845e03cd4c38808ce5453f79b2"), ("1788a6495a0aa121c38e8b947b365b0375fa35f44cf109c17e690fa81c7e474e", "2cba6dcd035ac53a2db55686e10cba466d23e21da4ad3d6ecfd36a06c43e5792", "253236472b0642e8168dbe3676b2bdcd551f8b970042d35ddc36ea96d7b5f4a4", "16c49fe239c0f9333a9ed77dadfb67444a26dc15e52282a9eb6532a42be93d59"), ("22ea7b5934b9b12462bad91731ec0feadea1d11e5e6ba42454601ac6b18161d1", "1d7953cbdeaafa9e4d6d0585fe9c1ba3318a96876b8b9e3f809a35b58bd91159", "043493a18f4200d082c3165a3d3ce7606e2851e2435f288d29f748d7bccd2f86", "24d012e5f90dd1eeb3fbfdd82e80729ac9cf5fb37ef21dd5b7b148e8049bf10a"), ("224bc7eaa21d1ef53282a469047af772f21e275ef3b12c3894b2e3e916fb09fd", "0ec4a1fa4cab6ff825ec3cacc15385094e9995638b8a9fa01baca6d097146532", "29f0523a09a758d5cd55a0d4ada23f4a4250ead95a5540f64340e10b35e3091b", "2baf5f29d00e192ae0762764a7b1e2fa1ebb8e5065681d1cc457f20e83b2ff57"), ("211bb6e7c009b266877a0c9a1c6a5663746fe0cf447701de0af81ae725633788", "2454ca461f652561da33cfd8d68b107f9795b00d3ab312f9db10cbe9a0b1ef06", "1b8dc777c5546cef964a0b3a49c19bb8bf8193af4af8ae6c48922bc0a995f323", "00517c1317b3e134c8ef20eb42107e6b3acd7bf7941d6c2ad561292875aff00d"), ("121cf9c3491d619221d5963fe63b3f2aaa303579c39a06591e3eaec7cf78425b", "0b2c2205566b8ea308496eb0ca5923aead81e1a7edb25fd543042b8dc2d29111", "288629cac8192dbfc0c3a6890117c846fd343ecfbd15e8d6312954d6777f355f", "0684600a763a0948f42c4afaefaa345cee56a1d82ca89f1b334aa8f4062e7dfd"), ("24a2c9687c74ffa7c6e766f7a54de9a49967e10aaa1c11df72351bab83c09fcf", "2de81e265ef467d7c2af619e311052c86d6c20bd7776d65412d1d32c41c96e9a", "06463ed568212f79be8f5b4fecd8b7f9b2f984e4cde1f3a9ef3b91bec4e95f92", "2bd47c22bbb8a4388bcf6ea52a83043dd8e2d24f1818f22db5bbc097de41dae5"), ("10b2ade30bd866798cf54193947350d7b6011b4ff1ff5d2b9bd78f2111dc20c9", "069f2a836c4d68d7ca8235ae995c10f621398242d613906636877c80a9b94cc7", "266d9c183c4ab5471027adc0631a893f7aa0dbacc503abd63cf28d9b287ef920", "1265bf2b3aee5e162f02eb35514bd4e49671dcbee967f2b7fc1d5e553cb4f6ca"), ("1721e2b5c20aec1ca220aed0805ce4b60c733b012f34c22250b1958dc74bb313", "2cf5656de25fbce046ba0e5566e3238fd6cecdcf6d740d409d8e642ca2dc3016", "1cc49f0dfcf9990592a593170645e2ee4d3675ba0c4b4387d487ab2fd93ae0fd", "2c989316e3db47060b0a44ac1270bd5b13c5a5e86ba9698ac4a55f143b207dc9"), ("1cba7cdd7a22029d3c258f48fc6c134af24c0e1b86409a7cbc87b6f2a3dfd265", "0bc1a34ae22081793862396c20c4542ca6f298c25fe0abee1889087755756d6a", "2c348291d89242128b8d234dd488cba2008ea79e1ab958309eb395870aadb30d", "26d29aa9c2b0f3a29f33f1b877dcd98c7220b3f4bf873e670b88cc9334779f42"), ("243f500bdc9629ae5f342a79945dc7f32a73405c4c9867d0292c9cc4d885d890", "14cea074b021a7530bc1ea7fbe2a2abe1f2df19732094688327453a9fd303d14", "2e7134d72ec173aee3eba0413f8e35ea9a961936a4b4cb0d12390e45232c1047", "08bb17d36ac9d141461182620bd49622486567c6eddbd893ca4addef8071ed54"), ("0d6c3c2326d604a951380e8cb5d237b61b9b7c1d8395c7c641a32aa5fcbd20a2", "0b8cc3691612fda2a0293a6c94c76e034a45661ac72baa634a417476f8402ff7", "18d033d44a1657001885b68a3cf13e5ae389c4bb08e482f88fcda34376144525", "1ce1b2c36d58c3389bd3377d4072cf030efd679965c9752dfdcd5c2859ee2c3c"), ("219af4ccb8dbc77c9c1d4676ec6619f7e8649c25ac2bbe09d8bf8e2112ccd097", "21ad8b24b03ce50dd0e428f11c08fcfad344c2d888260465add0b3b08ccdf2bf", "05e27b57020d456d71ea41807ae6f9d6f532782a6ca7d0a79836ee87a7fbacf2", "2df3f28c38e496a0286909ab77157ed3d49d6d83a6494341060436e7400108cb"), ("30290c0510865eaf78eabd5e264c28ca0f807999f371bb37ee3a3c84e4a369d1", "09713256b3530c57e5f45dee31595cafa1bb834ab32d1a0e65510b7405e77bd5", "10c1ef506b778f55951b17350bf3640a6aa4fb8e35fa5d2d28921956d07e027b", "262b872825b2a62384deed2028f457e33ed2064d7943d40e9ec90c8027d73ba8"), ("2ec68e5ba528cd4053bccbd652e0070ea3ca3ecb017fae190ac29c1e19259cbf", "274879d43a5a93cc572e5b36bd44077a212cce56a03233b8c2dcd169429a1ea1", "1f47d737a32badf41bb152b73f82033cc0d261826c8f2ba4862f8fc4b4bca435", "09880b472492966cc9506b7df1b44211beea34be96688075c6b1eb15a7fe1475"), ("1b6c2415ad208720b553428f4beb3672bac0066dffdf6d0627c0cb3d00df0ab3", "0cb2fa393c49580e64642e64c697d591d133819bb9619de80f935e8ac678ba76", "03477c44bea26d59137d03a247c82c0dff31166fef0055430265b9dc21a6f608", "2232af29f77d448ab765c04f3658683bb704272dbe23cb126dabd9239968af40"), ("2834623ef1a198d55dfe7e6f4a878e7a1d962b8bd0dff6812dad714abdcc3520", "2302435b4c2bdc87b4711cd747e3b49fc2d7af91893dda711b98468271aea9c7", "1aa62c54bd53b0c3b25f18539d0857d52f9c082eaeae5d9f06deb8a002cd666b", "0954dbfbb268a497e87291347c64649cb8a1c6f57034124a564c3c0c17c554f9"), ("1c1f8a2c67717973f556152a084f6d2684ad9a9b5a53f35ab093783651b2120d", "08ca53765a23bc73d268c60da78bfe29cdb25b9cf0e9c992cf85f2c716994abb", "264fdcff0443cc8c8d75ab567d551e22c2df4e2a01212edcc1849d1f077c24aa", "06bd7196d45556604b2a2e95f1374d62ea03556cd4805ca07ef07eff201a4306"), ("2d053f8fc28fe687be16c487ec13ea0cb9276e50d6d00ec2d4ee7b64aef058de", "119a68d17c7e41e9d6bb66467ca1763ef00b5fd08bff994926529f8c895ad190", "18d1e608e49c28cfb7cb146b3311fba5035b594abf7bf27d23f64bf1648de377", "2eb94a9d4dd95317c2cefb3c6ef27372c28d3082658aa4e0a7347f86fa7df29d"), ("22518606f2e54b60add220d66ed4cfe69efe1231fe794d49971c0dd149763bab", "0052fa99f60e164559cdc6d5b6f3905f7a8d73391a9731e442a225bdce81d6b9", "2fb1871c64adf7ebf0bb580dbe5533659a0c6dc1a2c9fd504e9b0a48e7e652a5", "290ba63beba34026185d6723798ab71229de8470cb517284ff61a0e3d0078d42"), ("108c725b550f5a262300b0a9db18e612b9b429f973e94ea0a26308dca68b9abf", "1e575230c2712d46ca1931d4cdc9ecc71cad46f2397bc2df3b8774224f25495c", "1a4371743d8b7d67aa24c964ee70705fd8e5cb4e7c9929b0db72367f687bfb1c", "2a2c28b9b85954f391de34f6fbeb93519cad4adfe3e36679e40242ae065113ce"), ("060f1260c9e303a0ebcf405076a3436da165ceea640a672acd8718fa3610ddaf", "2c9cc84bf52b3bb4fb7c99c4a0b1421c43e5566a26f189dc238b095c0bbc8213", "032d86b9064253bdfb4b84e93920a249d011550a4ecfa5e0cc363a21e0f49677", "260fbacad97f6000d6081cd1beec42a53cbb61d51c189a6b61cc00461900a325"), ("0e8191ae82803358193b09836d6f5b228116eb5bd672f86a9f6e084e63188707", "2819361afef2bf70b1d46dc7632b7149eac091892fa05f404b46ed6f7755e1b2", "2542bee905041b9cc1b4abb0b6cd1c7b7584d39ef99a541e63aadc0a5899ebc8", "2a13190b4e693703e000147195516dd0bae7d980c7b6cd87c0028b6a493fcb5e"), ("133365d9a1cad2c692b04062b8b62f6c75431b07cedbbdd034637f165a739eab", "227c9a8436b9dc275dbcea4bbb0297882899280eca324d71dd8a88eb29aa74c1", "2fe7aae15dc892e650c0e01b74d6b590cbb76d5108c63872764ea6d8e136b70a", "1b2f0e94f41e37135b186e6ab66027c92b7985f2b04f7f58b9060f0cdaff9e8a"), ("2897272da9b3e03f9a345f8cbe9c44f898e9ee52e4987a362a08aeb196badbab", "1fd02a781aaa4a27e6dfe585b09d0ae0b32936ddb4c0810cc5cb4364520fa46e", "24813b98c53ed6fab3a1a48968a28e8249714a3928b0de07e0004143187b6425", "2716574727588288020aba9d65510111c64e47a1f37ec476d975b2fee5bf27b5"), ("27572800dffb17ebc9e3c886a8f1cfdbab60ab48be552f1940dca18929acdab4", "155c8ff061001c95eff38217571eb8de48a910cf643fa0c7a3af4cd4fb3396e4", "25af44ad8dc50c61de03a1a08627886a7802265c4a1f4ebe8ca5e97c9ec6010a", "29f064861a2a3a5f04205b424e3801afcdc54e242f8acae99067218c2de107a9"), ("1814b6151c065a89bb19d1a24efb5c0f7338d0602d52548bc04a4dffb8f8a8b2", "0b66958f137888c8a27fa13423a0aba59bf0fd72153dcf1e6ef8157d369008f5", "0e50ba4efc04358c65c94b75f31d176c427354d07f6f3056e9a4675945e6e3fc", "0aa559597d0e1f357f04db1d2ffa57a9e0efbcf77ebfd3ea172c175b4f64eabc"), ("1fbdef473aaf8f33cb76bd4d28c4520d0ea5a1306bcb512c57851d623244f358", "1ac4c8a4d1c14b3f6f67d8619a8ec4d902a89bbf67e1a1473b5cb221a34b1f4f", "2f42f18d4adc1783d358c10f683c50d3697b79870a658858ab8ccbea726ad569", "2596021e25d4d04d1e19ab51a8963084874f283cff228977f44f5fea0316dd0f"), ("11ca7fd8c496e3d72a2080ee30446b8c9209bc999bd62b5f5e8b9210443e92f0", "13bfc7b1c8c72fd5c82c106fca47b6ff25d1532f9d402659b53099d4162164f5", "145c83907951e8b4b07ccc6f0247c855f4e527553bd2ccb47d3483f59834d1d2", "1dded2ff073421bff965d75fefaff8c62fad8e3d349f1f0cb759a197e33b2520"), ("246267ab88720315ae1ba6f6d381fd25a91849db0c6c2489299a28b6e32161f1", "066494264e78e62140fc8d89f3e1812c70c1050d7b79b4e50d03ac4d033175c4", "0ff1f1b051ec119f31257582520a871b6ebae79c806ed9473546b685e7f2b533", "107c32b05057dc567685c26e8e181c148139722af03ce013e6054216ad573120"), ("1736a2c1044057b01620d3921d9d7892ce90e95d180794b592a9b9c4e150f14e", "0a46d44ac87df29e9846d35905849b3fa309346d6395cd68fa7dc1aa1fab5902", "17c9702e036f1b8f31742ce7724b0e4d3e032bae09b0aa5bb62001ee0e549f78", "0480dbc582f4dccc004265c98efdbc32ff6a2d78fa782c6de390445d5c1545aa"), ("0f8a4561bc01dccd56c66ffcce7be98d6fe2479cf81e0942685797872eddc64f", "1926a61b5e5b1f167f292189d452afca933009bcd889624c9129a728c1f5343a", "1fc71fb8719ed59c9ac1e80c6135da2671f561bcdf8bd5a842186af72d9e4476", "277077de8995c60be14c94045eb9982b47c2f7bed85b0348b8702b742e995dc4"), ("084162377d325f5fd95a663fa2a9e5f1f7935f2ace5a8d5d2faa9c1a13a24e97", "204784bd119e87e17ff159a7418025d0e6d7d4b61462cc4b15f9d8f9594ed5e1", "277545488feaa9abfece12c4a7c7c17e808455aa4883686fdaafdc6caa7aefec", "2b82b16533449dee783d3f7da16c66ea0a213837792ed55546bb2dc596017956"), ("066d8a91fdd3e56141f18ff9cd8e38300c26062425d2aeaa3d880262b2ec5575", "009255701411ba8bdddfcfda51ac50308ac2d468d996b2d1690ab78d7f8e7b05", "231510ec1354b30bfc1c5684992be3c49c1728b27fe03a0f09de5ee771613eff", "1bf2d53065365d01dc1eed76de60bbd22b9d78069edd49b39539cc8412533e97"), ("1401945a5d8c27d1653d498e8c0adc40894c5c583b1547d0ad8c7b900021f13e", "18a0ceb646656c47d80cc04d05a10128259bd6966a6d7525a6b1a02f9ff976ad", "2ea12ffa3e98b3b56ca70450c4c06c1622daa7cbb9449d1ad8c07ff161cb466d", "2fbdd140c4a70d19f3c9107a12e076ced2dd9303fe5fae54d7d9ef4f7827053a"), ("0ea6f26a796e5d1b1268feeeb109548da17920b61170f5a56c83788f8fc7b117", "2a55a8034a2597398a56eb49d8235ad6e7f25d761a785ea6f723273dc1eb0938", "177141227425ebca1620eac8d067802ca86374a271a4abd27028d7709c3aab49", "21b0388438e56e4c207efa8e626ccb87dc2a336e126c8e3482cf03694c75ff4f"), ("1c5e66ddc67a3865bc32c9c570d9c4dad439b3e135176cd6aeccbe797565853b", "060e9c5176ec8e97d5ff71a27dabeaaf87d18ea0a8d880d0fd8fdabb248ba3d3", "16e136c3c68ba5e596e169b23e528a3003b9817b8ce3a5a4b0fdd4a5a2d4ce76", "2b896da19a80e0cec13d7b0283e80b05e31ea878689acef511696fcbd3890cf1"), ("2f01f8f3a373b4d8386ea50a7cd26976cd4c7f2caada7c982b01416d1651382c", "1578dfd1197b1bcfb9cd7491f42c30ae7695ef0a927bda8ee0ab7fedad72eb0a", "080055f98beae0e34453835ed0d4d633b26c4be392cf9aa867283ec2cca6af68", "1e0c25bf14a4d0be8fa23b879792652259cd045db20e7019b263f4207e01b47e"), ("28112fc91dd7612db61f0d7a38e018d48a30f7cac221199957312ec41413a1b4", "19f3e679d9c406e135fd77bfb54d255a26477c8bbc475071b8a316b98c2bed33", "01212bbb0723a2629d4ca617e3a9ff5cdd4310f3ff711d8adce180363318296d", "2993fcb5737a260663e01b31a21b78f02bdcfcd49e1366c20d0af0966fc19413"), ("186bd38de8aaf3eb2f0531012660b8c228e76b09bead535d84eb377eacb697c1", "148a9ab4d042f1f3a6e04e2bc52f5b71ac6dae9e8fc0b61eb34fd302d93faba6", "013d230d50ee9eafb6741b5a81efd271b04cec2862d93a74713e05093ecff6d4", "1583caf45c43de6ceb22c5f84909602635cc51d63c09894ed90ca9286d332a03"), ("293d31c5e2990ec47da3e0160f077d3753df365f612336087e54d8fbaf98b5b3", "1f6c9cf61aa1369c9a1efbc382552542d500605cfa610445ad87d759aa698650", "22f860dbefb991fc679d95108a982ba61af2f0420ba163cd93093d6e06c861d7", "0520c322a6ead165291951466cf6ba25b712f06036301295ffdeeab3529d6797"), ("064469373f04477842f19f5fdc463db3b90c6487b1cc4e1dcdd85d79665feeb1", "0691a097165d18f7bfb270530edf307ddb64faf35f9da39d8d6329d2e3842056", "2c015afc18962c238d28ff50e0017436bd10349cc54ce320e26a9f14fbf5790d", "163e5d19f4d00f5e00f76b7ab4c6acabd1a7b13ad5376a64c525535e6e0626fd"), ("07bbefc42ace165c1b91b4edf195bca634c5d40a8acfce0b40252a8881e02473", "0746787e7f0c755d82df64b75fb1cdd1ad81a9b83fd5cc3a1e1fc93e85cc888a", "0d01b4ededa99f8220ead4e1440a8a972ea54c9ba7cd47c1335f42600f2b26a7", "137148ceb899535d01441560dabbbc3797775d82ef616754deaec8360825e20e"), ("07eda44f4a8b62a964a8a6ea02f7c9c94a4e57d0162db4d01c0655f46d59bf7c", "0cd3c1a1e504108dd042dcd845b6553a3727cf17fa16797473f825c49bab6338", "15030c1449072ad580558313661f6c14d8d6232fd922dcd0d3b7a60eafae10a6", "209bb522c807600877ebdfe2218a8bdd73ccbb3e2290e7cdb6fe10cedc44312c"), ("10107530d5448185c711eac228ddda43a97105a93eb9d0cb6750463a06b01ef2", "141d168a38f70bd8cadea71cf6bf3c339d515da5f5d063a8b32015188ec8b9ef", "2e94194b59bc7663d2ac7d4721da29e6d2f0d3416a7bd7a8f1e4f806e14088f6", "00f3ce7e60a4bf01684957f748546541d434f796c6d87d8adf90a4d91f373a33"), ("0731953464f8ad38e277e19b745b7dea6dabb0aeae9eb913ad648fae3931671d", "0122b24718ed3964bf8020562ebbcc9d80609bc95709f7ecdc4ed6d9bf2b3614", "0bcd2b35f3d2a3f15343f5532871504ab62479c3b2ae755ab57f7cece291bb3f", "22a5c0ddebd52e5cc1a7e22dda2ef1e37ba31d27812d7e7443aff71b1b6f1b91"), ("1e70ac547fc053249e5660331993680bef05bc8cbd2c426d564fec31f64ed901", "1b00de2cff9959fb7597d2e2d72a38e8810c153605b188685ae321d5b95cd9a0", "27c975303f7e20fad2126dfc749586aba62b96741a56de4b71a9e54b2222175b", "1d7a8290c76cb51c6baa5ef80dfe72fb1fd4c57be227afdfa8ff39e04e0fea98"), ("2d0c24cd94789eb3c35a81c5f5f673ca3a03b0005b373de839c94a843c182cae", "232366fee7c2fd853a78acc1fb4a43db92addb59bcb624f19fe2b9a471c3672a", "14b6192f0353c2e352f6cb86977c2cc4aa2f44598a960992beff17db9d322e21", "10a4330805ca89e7f7b87e82c8ecea48f29bed231716001329835939d0ea37dd"), ("1b4dc6412874c5fdd0a743eab1700ff28718c799df86d6231c9622ade7699900", "0501b4892aa5f04acbe9f196a5cb2576302cb466267432de6dc1d29126472ea1", "084395c0997ea365f4d874203c6f76bd1a8b28d208dfbd3731b74bce426bd251", "0a8f4760b6ec6e7f360300502c93bd62f4396bf1339d4eac372db6cbcbc2930f"), ("01a8d05a44fa87d9874ef80c361339efbf37a245489de0f6ba036a00db267573", "0ff00aabdc582f6786ed9e9c63e4f38aef463a48559c6930ff554bca40bf308f", "242c41eae2ef5b895d3ab6320405f4d11b8c006c2c8e0403f2390dba9e618663", "2ba75cc35eba7d886d95a22f39948f6746590f4fa7ea72483c6f6f8ac013c844"), ("114d8f381617e9a55634d0a893d0a2c0c9f112b552b1eb6e95e3d3c6b4169ed9", "052ef21a559cab5b8c21fa86bad57ed57ac764956561ec85f45788bbf0f5130a", "0c4ad19e9fd4db1ff8a1b520f0bc9e26f7bf3bf32da11dc3cd8e39e6409e7084", "1328adb8dab83453cffe99fe152a8c6eb434f5ad13ea8afe0a40b129bc0d672e"), ("2fb0e7f7795073b0fa5d0ad3a8aafcc2a1e813b00ea60754bb64079c3574ee05", "12f5724d3aa47ccd5e2290590fd9c5937b025dd3875f6a4865b1979adc9b48d0", "07c9649942f657d69a33e77c845cd4ffd749c85662ffa3cf9132274da9acc102", "0f2f4cf88fdd746dac634784c02a56875ccbb67f13d20e850f1315280f2fd550"), ("2109844c36983a24130f6f7dbb04cba8f3e59c05f2e06a67c55ee9a060b793be", "2bf1f189350896cea8bd1cde214df073b2eb8dae24de5a85d1ff33d5d27f4c00", "1271801589970b4f3e568fa151daf35d51abd870d20f48c25acab0ea113a78f1", "2e0d83cddb913f2f2e324dd2eee2f31fdc30b2840dbf9439e55cf76b2d0bdc04"), ("0c72631492aadd00a99fab1c67287891d505d3f17c4f5f311945020d0ad0bcb1", "0350c11d529d47e09d95bc7788b6e027fb91f21b1a115d0d32d915c1b56dc5cc", "1abf3677d2dde0bf1202cd7f9bba8fbc1a67307b81f1692309b863b6dd8a4ba9", "2f6ed14cf0a82ba842f7ada2cfe266011d22e49bb2d2849ade225c0e1701ce08"), ("059a416d46fd3abe52b7c1c3806edc768223fdb2cd4a43e7eefb018813ab2c09", "269d5ecb2fefa2ba7280b01a5419242f4490f58fb1d5919b1b814466af8d8712", "2be6f8180ff650f1a52fc62ed4ea58ada16b032a72976f03bbd65eaa68cd1c0c", "270a2efc8e2fc02f59ab0da3cb0a9fa0c14dad94a72f5940f7f3e921412e2c69"), ("1138481524ecc44d00a4364c2083e85dc50f717eb01f215670f490dd1501d75e", "21bc99b237acab5fd9af77b86aaf55a96833eda073e38d198a6c645baf214cfd", "014d7148632991a11705fff22980dda319ccfe3ab4e414585e36e684e6d49d67", "1d1e09f0220566225c523d79d782661cc9c173cae557fa82d877e2cc57a424cd"), ("22e18883e95a1568c1f7dae93fdaf4ebe27e1f30bbff29c1b87cd1ae4f80aaca", "257ac30aae9e440608d4ce8f0cdea81ed285cf9757d1d93fe870f8de86dcb01b", "0e980a68762be9dcdd0c5f7ecc90c39fcd8fd45a62d80f5180b09c044e79c7db", "185a013d13057341c6162996b15caafc321810220ab37397bbc2189fd5e99d09"), ("11d735cc60c838eeecf60d51f96588344414867ae2667283a889e13ea25f04cd", "0fc1ef3bf69dda6e3df7f9b18f3293cf2ee53fc7b4f2ef083d9d2ed8c458c46b", "1aec6ae84910be9870c4311a33084e2f57ecc53c45a4d3a347bcbb20c40acbd6", "1b4b033b4f06ded67f31f3d2ed69aa3ab2b1b2b2405dca9d57f3e9cbcc62119e"), ("150d735b0c3d964ed1e56401ac88e501a0c6033f462760e6545b9df3a4a2023a", "07b0bd26845fb512a01d1b6d3796841402931085f768408b90acd1b3cf6cd1e9", "2537993afd34a58fa7745e3105b57630966fb4d9c581676f0a6f295ea62ce398", "282654a57af798856d3474bd78d1d34aa71e77b45ea2c944b8a34428732ecbc0"), ("07da01142edc5f84da01dfeea457b74d5a5c3a3ffceb8608d9223d7e2435841f", "2679700f62473aebe476ed571590a700314ddcb9411f411328bc20c8fdc21c67", "0542c619dbc6f33c4423bd2049ae8de9ae561c1a21737af5b151c467633fd66b", "05d0c7c2da6ba85da1ad9b5f5280b3d0ab5fd191bb4d7c6582f5b39467c2e82c"), ("200a975209a1ed38e148fdd780cefe0361a60d67d471d35eafeb487e43058b73", "14a84733be8b155bd0be6160027f8008b09d6853a180b9cf23d7c87cb9926568", "1ac409a07ce16e91657f18cfa0416ebde409a42f623444bc5bb6760ad67d8add", "1b4a49f1c64203dcd9124e2f263126f6d03d18bc82935ba4457926075de3c1b4"), ("1cc7d8bd2c948d3ad8a245edf936332b4eb0632de2786dc217353aa75924f7af", "2537b6e2b5011e1084b7ab120370ba4e80f3bb0cba602fe74c13a6dcd849c6e1", "222628118227786298514a4d799817dd0990f2baae6cf37b20e83134d1fdca87", "086d8e452e355a9a8c47d9ddc103407795e94f79085b601008a5d9e9c66bd0b1"), ("2c0137716cd76395d0c5608d676d4fac1c91358fcb392a2cdaa566f29db82374", "22ef689fb346a3d1c163b435bfcfb6c15c3d629d201e5c6676a344d0baca2fd5", "1642870b8477dfa9efd316d990e6398d382f74efc80e543cd44f4477f3b5beb4", "2dadf03be602c4a0c86c3cbd223a344e70ae5b1ca39ef6345c1b4da44ef1a6bc"), ("1e31355c1a03ed80673a97792fcc95b73314452193d82dd6596d90d14907e557", "03de48414e14ef9181832ef5208423bf09bfc9e6d0effe73fb3a575ad2951a83", "29615b9b1cf33d2726bba4958f198adc67647de28065da8faedf38827b9975db", "01a64f2abd0f96935bee52ecd67a488c8541ac48180c0aaf6cbb62e29e4c1f28"), ("1473f9758455947dc0e77d6cfc69104e5219de452bd3fb1d7a9c0e22c9fd8079", "071b4edc723c4e90bc4db144452d9a6989b05312ee8173e4436ae48918ec2839", "2f294ba772fd99cca7e965eff9161bc4856afe7408b0cbcc3a84bb834b1c2fc9", "2f3e1ecfdb9d5e908bdf48537aaa6f7574e221077871a8688c9525e3424bd81d"), ("12e8b7003af16dd1df5851cf57c731e328fcfd6f9b541c03cd9fc41a62832e10", "025b031587179ad3357c1c46eb0efa449e5335a65ab9c056c0e8c536d461abfe", "1a8c4db13e9257930a76d659965394b2723ec946c85c580094069d8836804cb0", "137adfbf1f0a3cba6e8ffcdf2ea013e776e884043b27d139b77eff8f733f6cee"), ("151494877b5c5231235a085bbddcb116e4fa3bd94ca04d1f9e76a0820a851148", "034d8e10183547b297e4ecdf9e2eae810ff59642a0111ed3db6bbdd726a4f80f", "2afb898bd9fec4c3f686438bda37ebae54d30fa3b8094327f7e43e93ff7714e1", "2b1331c6d5b2217f6ab292f4fc9b733c471d64f9c3ea92ae270619e0886632d6"), ("19ade83640928769e76f0aaba501b5eb2e67bb049927cedcf52cce0e847ef10d", "061506818179c5ae8f2c46800626f920163ec65882fbca055c2a29fb9e540343", "2ee662f8e339e91d75c65d504079796a785b5b42b09769bab5528e0d9a495a4c", "169deeb75288ad6c3e8c26a44559523af9f10a807fad316bb705209919e29365"), ("06f56d12f37de78c3687f7f53c503fd939a04e7c099a37f431d47c1a7fe4a654", "1c4d7ba6c000c87f439a49f8a63169f20ad4758ec03bf55f03794618b3e73ddb", "158dafac6edbb69ec1a330e39c082bd2e945efa632f9936ca7704d0adda35a1e", "151f26d551a84e8d4017e289c38a9c3173ed038b22113afcae8212c7ec75a6de"), ("08d3b877cc5011d9018bcbef917d01d31d87355fca90aba40dd5a07488d91593", "1de10a034109acaf88a1e24480b7e2b8b9ac6f8f934ea961ce956954aeebc165", "1c665302e864c6db1e9dbf57606f9cf63868c54c5c4c3a4459bf786e20d118d8", "1a6be363c7a659872959e77b35271ddae126e0252ebe3442d09e0d4738ca43df"), ("2bf3d78443d5d4fb333408e704867a89e13219e1300ab5abe57a36e11723c3fe", "2c40164eae42daee5a9f654f75b6f78f4a96a9e2667981e5cb45f387c93bfa54", "2c8c1bc141ae0384ac8d51f909b5a61240abe4b05378453a2bfd70800c5ca919", "29b203203eae53d2b0d806cafc8a3602d18c9e98088a29475452e0ee8823fdc7"), ("2abfa864647fe51f63f1f105fbc882f13b64a544b3af592e34c1ca75b820516a", "05fee2cd4acfa23ffceb4c37426852a89f9cd73e2562c431cfab40c9c5be5860", "0e6e4e5520d9b7e3d0643108ef9ccd1e770c5936c4a21be81304fc96886d522a", "2a9f279ba06f61c13e850f0d6c94f864c6c06bdd95679a6518f88f9d818c736d"), ("0955b0888df0648ff8e185750b54385cb6c626c8b19b23c068b049881ed8c9e6", "23d238c0de92512580b6b9ea9bc517307e02a71d3e64602658b50b53eb77fc06", "10c92b0fd36af95d4d3e27a50b90191c4e95f933616122a21626ba199ae52de6", "15054bab9922f8c74fdc52c1f0c9f35fb727d33ac3af8c04d389530f9ddcc920"), ("025c314b60e3ecbbc7ecc7f4e60f768a8a511c98b963539b28d155a4b8257ffb", "2ac5e571856ede1214e3cead1048ff73c5c7a454a954ab865b59ee282caf0b7f", "2aed3ce0ec77aef9416575dc873753c349e2422b901a5d31564c61cd66fb2f00", "017d92f6b2ce2313ae9bf1cef842f026c44087abcbc96dcba148369228cafde5"), ("23d8dcbebc2e6ebfea8de263bbc22b4413af9c8c966692ea7067e97837118e1d", "296c3816c4b9316860d3a975c2343995dc099375a990478aeec05311ce97cb22", "1e667ef06bb05e0f92d6a0a91b33691555d0dd2243e942f9de511e4d852f5a0b", "239874135e7371de19d354a77d16fb8b1f486f3868be21fe654a08ede974e0ad"), ("2a9599f950fcef8ec311f922ef35e1f040daf5f60917f568eb6ef1f97ffd075a", "28b808cd41619b0f29787444382d9ceebe71b22c5307857e5988ebfc9783e889", "1ddbc2c9d9464d1238f8fedc7ad20144c34e7c71d83ca3e8e4f8b7a1f0e9ba29", "0d69ffb964f879f6a7c41b42b66c6b0365e55e0a6c35dad5c84f7acc743943a6"), ("2be8c760be791c8d2814986969bdcec8c7a5ebffea2143e008e7052c9fcdbfe3", "09e7ef8d0eb05c595427d9441bd50fb3eb81a3ee964c04898f774090ec818798", "2284bc8bd167b4d71b87e2bf7f850b5eeaab4cf6a0844f6d22c3f8001cd01ba9", "2697de18ddbc4e6f3bca344bcedaf7db31ea171105e176a54b1f1ad8211bfd00"), ("15eea8f82874b7d7f3a9fb71ebb9e62f95c41684e50622d2059c323bdce6c2f5", "2f7d70cfce2ae526137c156b402937b3528a740f42c7f02d27991de75a9a0c78", "2b27ca599b02ad309b2792c7ed05516bfb9ecb2a419e0360d5b566183a8f64a5", "1715bdb431574fb5f8e47efd05175194151599a35327d35b62ca1eff0b8be068"), ("1153a4a0d15f22fad027cc86c21522a4e2179e37ea25a1551403ba2c4fa7cdfb", "1b1f01e954d5e4e42c74cf44a5f6a32839fbc37b2010eef626d70e8ba12e5f87", "2b000e14a0ffdd204a6a93a39f6dbc362478ab6880d1423299cb6d4577684852", "13e28fd335898193d105705867d58dea5d2848664b47a8e3287758ec9cc0f181"), ("0ec2406be10d93b04c1fda9b5da37394f9ddc43b26789fca478125338e41966c", "247a4b9e67e51505713cbb71677f25c9391dd93bdaa3007ebca72be4c7fe4359", "0eddd3288bd18c6f91cb7c1d01c05b0f24535f65524bccb74fb748bd83835097", "14f11a6fbe88675c81fe26ba20eb367323733f531c9601e496843f8e4ff7680b"), ("2c517f628cac246769efae0aac5f6d603f691925f71044035e4242c41d366d59", "18b3466958c65b5d563843d31a84c232f1dcec0a442538294e71124dcf710934", "2c13e4cff8f43476d7faf53a6785e02bfd19d04c86617130c0728d83c8649ef6", "0dbefb8a2764407f7b8ad5c291c4f21b972dac7fa0bdac73598d4660daa7e789"), ("2de46dac9342044a52de3654fe06693dabac4a6dba97db0e59483d4e246c605d", "0d6deba8c072d9afaeed3cff60577a5ba9ad3b53931ff8f8782babddef5c50f6", "0edbcb26f5c352cd18f0ff7173ffad58b58c0a2d77aee89efec73d7517b7d2cc", "00e099d023a8630e9e20333334335443dbb140973811957a6703ec244f478041"), ("1b9f88f199fc656274400de6d44f68d6dd98e83a0978a0257bdac56d8f00864b", "0b66e1669819c5c11e7fe4e4dc2b59b88753ba9a7476febd1245a16f223277ed", "1ab9e8cd7ea818c96769db90e00c28c94b6ae43f91c13c60904f79ace3620ced", "25241921fc2120e51ebc09a1a24148dba78f6b6d08e6c395ac3b224a334d2d75"), ("229b6c8303cb9a72deeb30fea77620e0bfa022aeb43bca3d8e15031ce63ef4b0", "1be614f65b8db9aee71162505eff384eb5f55c6984f7e8e9ffaff3b9980ae958", "0b83bbbf72577da53b7e709dc1344b30e1b097ae08fb8d54e2e8561fec504cbc", "177665b728ff714347ae0532908aaba712134320577b39779fc414d7e87ee84f"), ("0be310d5139733cf087263007819d5e8964806d5cb5c16632e71870d64c61af1", "13a7d132ac8ccbe8ec37c94de7a30f8bb63111edee1cd024db892fc622f7d9c8", "2845d3ad89ca416cb1082ffb71c746f065debe3682a4d568cfbf2ee83307df6d", "12f2530ca5ac3d65ffb07e71a519231ba12523090ab13091f507a0d0b28fe6e8"), ("0b5297cbef1cda8d0ef1b55656a7b50fe4416069db279f811fc3c88d57736906", "29e6b90f43452433fa587c3f2ddf7b91d615b0ccfb3052d1e4fe2c1137837a12", "055e1022ebefb401d792c03ce920cff72fb3976fb2c885d55f50f5011027d75f", "281aeca7bf638fe4a1cb6b99710716bc2c8ced39f25771599a7089cc4034d5b8"), ("0e5283061f6f000aca6ea3e204ad14cc8b7fb9857e7fda088da0459e1f0436e4", "2287bf8fa80fdf5080b98e2f5bdde7638bfcc6c1e8f5849142d6232694fc5ed1", "02675e8e730e19280360b438edd0ac1fab319a34aeb0630bf05ff259c9754936", "0c307a212e8acfac495ee12f04cfe613197590ae820dc082f8efb34de57e3f65"), ("0bb617da1f0da943dba39324ebcc611ae6f07629e0cdd596b6aa35b64b1a5089", "2c8ec9c52f7876d7bfd489d2f68e64a3362f4e1ff802529ca236799218192a07", "270c4adaf2d1203645257ade1ea4819171c953817c0ab5900aaa4be7e4214333", "1ff9459f328020081e4184cabb3e2956bd05257d7114d66c4d5126348dba35ff"), ("0509df6f3549e6287c529f08b0c04c9195cf06dffdca8c86a669078628f0dec5", "0d846a51d1269fec468fd9b74e64aca967e1cc74d226acb8588c704c4ce64e0c", "15b2c135d7cfde02f307ff03b3419d313ad82befb3baefd015045f8e81bbd7ff", "2f1141be4a9d90a4d238fecf418f090e2e78d8402dcd87d97694c98dd2c5dc87"), ("004a92232256429d3a5df8d836fe106cc973bdf22010cf7424866da28f86f587", "0c21f179344a6fe3ab27d741ed0c1563443cf9b92401cc16f2b80cadadb78175", "2233fadc3a5bb962edcf99f28eb157bab3b833e7eacaab795e1b3663bc772dec", "19497dac95cfb948489e8203e0dcfda0d2b9d89fc750b0c9cd66431e0849d87d"), ("0b1d36e467a7bc8d27f90bab4c4de80d3f66567a53d70404f54fc82fd6e0e5b1", "2b95532290502ab721d052252459f7258a807852843684a70326e971c313979f", "23a8fa64c90b0a850681293ce5280f19be13c8b6c45c8da39f21c1984d667fab", "0554141f45147c9ea101277e2e78581e423371fd2dbf2dee023abd7359c712d4"), ("0f5e4b321d5a329c9bd4b3971bb432657732d3afd37daf60d37f1ea3821c2682", "1075fe9d51a4db9a122b87110493b11e6975602690a4661ac96c3636d45efcb8", "1fb60b8be56d8d26861ffc39576a7285be575a13ff8f65ad3a9dc22e4a56f4d1", "15e431fb864710c1be8ba6eca392027ad7dbbf08186991819e14e3c638127440"), ("2d295bcfc0d84059b4e3215f51693d0fa7656ddccc9df712044e174f1b746de7", "200a69cd84b17b37cbe90cd1c23a6a39e5091bc33e0798801b2df594e4fa8915", "1db925983d857da366d52f6efbbee4cd46e6164ed261083ab2cf11d0bef1d585", "02ef341bc895e5ee7c73b421e22253bd31edd0cb6f40f950ec9ec1dfcf400442"), ("106b9abbec02601d7f42ff933943b8be70c5aea7f3905df7e1ea887f328f8a59", "1998d8a80426cac6685c077f720830eda52d707b92fc2c7c3e20c2afdf582bd2", "1db7a0e0eb69648ed4806210b5f30622198fa202a0e7ff70ae016986e04d0a94", "170b9340cbd95b32edcde0e88e23ad8b8d03b2a7b8cdfb6eabed187110b40157"), ("11a5290d493284f4f5fe6224c3eb3ef375c429fbe4a479c51a52263a880fba65", "223ac0763b9c5b152a826170c7f8f72c81d1ed2ef6d1ee97013b9f34e5ca7fe6", "04e743217e5964c27a58a2c44256a237d0c51e6734c3002f90430c9afbe03132", "2a36144ddbf97b66f4d1b4a8d25399b34fab5ef8dd5547d4d5c2820e7a70ba99"), ("14a6c237cb22a89cac01b54fd776ed938aa425f42d6e41116d16b3fa96b3df9d", "02d31ddaaa9ad973b08a13041e1410a97601a0fe5f611c3bf1bebe4896248cac", "2865850e4919e4875289f6e35c547547aa9a23e9580b49a3f1f29d20c3689d25", "241636f3e2d158895dd144cbf7e374cdb702c97bbefb10c7b6ae739635d08a2c"), ("0beacbd09977bdb0349fe65d4818e8e6897bc9730ba8fd55e1cb23155f703315", "1380cffaef30588b8f6e64bbcd2c9a2d8258c8f7582ae65e1b501599820e00ba", "2d780299389dd9ac233524c0e7307562dcb0234fb0e9abd0aa3896317569ef26", "09791b324cfa83d6e83e218fb7173246f23cc5fa15a40abbe0b214aab04f8bc0"), ("27e19d2cabf6cc5255b79e5d44a18f14a406b21b7814aff4130bdb63871fd0ea", "16fe5fcd53f27d6a218510ff9a71c306168d141c094c3609b40d18841169bbed", "0e7fd9e7996c516a3a096c31a2f6b193ea63f5eba0817513597e4d666b48bb76", "1861cd97ff8a2fc4181f09c690c9a41748405894d27e386bc5095b9159791cc9"), ("24ddf004bab67f05fd46d62abb83faeffe57ce534b7770084471ae78aa1444ca", "1e52dccd997f766a410279ce71a88b4152a3a8aaedc84422f56849cdfde952b9", "04e988d3a3b9f090ee043f83d080c7d22a514623c15d9f3463e3cb54218f0495", "119d2427dce88163076f098c4b828615b2a79bf8349c5caa2f6f009c0409230b"), ("0c57516aac9ddd78ee529ef9858da8604c1ca4db28dda48bf26355bb43081b21", "06f3de826ebfe7ffa31296f7c89f3359705aa7b12db9fafa302c46131983a37e", "226ec512110843c0f2b8572e833d27abf70e53561d66358652de39979bc21ca6", "27968037466f9edd2a1053fe8bb48326ae267de35296ea1ae7e8028767fdc7a0"), ("0f3421c51846caa4285f317bbe788e34dd5815a448ecf0909cd061f5865b11b5", "105635e51a92aaf94436b6173aac76ca53a3a22d14a63431da642263001e1bb1", "1927737922b68c7deb8a79dd5c218dbbef755852c633c8f34b5df2c05f0c7cc9", "257a684b1e4a6228b7f8f14e2bbeb096d15d04e6f001d0c99610d3611b5d4007"), ("0049681b96fa26733b746154e583fe76a937422476bd96a32cde329a1c0d8f42", "292dde345453b6408871f08d904d4fdd329bae66d1d6dc36bf435950cba0eae7", "0bac1c9f6945f09826f80764e1b2a2d42775c4996d79575eb7bb77a20a8573db", "02a558245c2c9690b079d5ad7d23c063e5eb0cb0bb45729797c8044e0900249f"), ("222970a09eec3408b4b632e0195ee6001275c4d02fef9afd7685db7516395d76", "165670906e604028aa3265149ad70e7742e81c2f0a0b672a3e77ee5c5f7e27d5", "27d1c79e3fdff47b4c04c396b2b79d4adeb085d9f99bcc11ff04086c842595c6", "16e51975b0cddecf86d21e9919deaa4e396a499e88bbb806e2c1cf8391c11d25"), ("0347c495d62865a74657d7402442cc4249e0e00175557e0e059f82de8d2073a5", "26d164a73c2bf6df3072d7e60f0786599afbe3658d6ef821c70a1c0cb2a2a223", "18622bc7de1937a8fa66ab02307e5f124c608f879d21b76b340568c34772a563", "1c5025e27206e03aeb5d78656b9f9e1df43cc053f9e8e67c18e0d859fe680b92"), ("22f22447f7cc305146ffb1b3ccc24751b09e450230ac97967a53d42dec42dba2", "2ce3cdf15529f3d0b2c654c97de841033f6b3ec0c833b71362da691a7fc090cc", "0e78968ee9afe4af1812a4329b97a6df3ef7d5e3c59b6d209cc5d73506850f39", "2ca776bcd00e25a9ec844248a61d38cd5fea5ea5dafd56b716f8d42f3c76ad97"), ("058699efa89ad48029a2534df00baf48f30b3e234bf4a7bc0db3184c039757ac", "02150db5b5c074cd9004b66c240c93f55464d0e3f1032d2aca5b3a16155c8d44", "1e7ce925c0ba1bcfc14360f2033a748bed15aaf4123c35a6c80406a592dc8f27", "1c8e48e886b79db59f096650cbd79b4c398183b6f66f233460a85d403ff418ff"), ("2cddf40f40ac98b483d51ef18cd659dc628c4cfca2160a11bd477aad0cd7871f", "216f5770abca80ef2d044171a26a7bb8f156c7923f6e98a50d0b16cef0ae6dc6", "1f3fe7fdeab353810cd05832a401bc745524b95007d988088e5abfe4867c6efe", "1ccf807fe1819abc1da80547206a38fcc9262632c566963dffed5c18b65ceb42"), ("221658c02e839b3bd47e7210550d128dd410f006258848d4b53ec0726f3ef3e4", "18d774341629cc65209a63409e699645d537e05d47858c71d67dd2f3f40d35f5", "074f24849d43081e0da38ab086ddaa56753e00c59a8dcd8a8c38cc06451ed66c", "2db6d2856cbb57a8685b14846fdc70b3b4aebc8bc257d50d1c7630c7b554e416"), ("1c1eb2dd7a1cbc3c9afba95a19663b8728d857102c30714df1fa0d1d41a8fab8", "2b7d06a7f7f2c82031078620c9bd4c0a14def035c920f3e920e617b37c9b7881", "12907239763d02c7ffb501267b870732f88f473768170616d31bfab22c5052ec", "25217b84e27892399c2dc38d4f641a40521276880234520b427f32e94f6982f6"), ("1988e2696d8ac5c0c1857667128fc7bb842fac0edeacfc7b1113d835b7bc0d12", "033ba7f81412dfe9022fbf171bf9de0e4d89d22b266a71310a7af7f8f85adb6b", "10741b32b9d689fc44113fd131c9f5c238a85c72aeb44cfc04121c3e691ecd49", "2f4a9ee283416b25decfc948af6e0bfbf28e4cfe3859cee81d594e1b3043c2b1"), ("1a7e090123afa5d2aaa9ecb64cd5053ca545fa8edfcf72304d921f656fb5b1d5", "0bf820f1d545c6cae825474dfb801798351d602023cd813c731181ab328efb0c", "2864dc68a51da51b50e0985da2b59e5be59ed56c0c4d38f9686e41e541983bc9", "00de09505856ff9ad12e1e9d02bda7ae1586148ed71155a32a8848a531101c18"), ("0ff6771474468eecd505b6936f0eaac636eb904d56579d0ef1cc5ffe9f93013a", "1de14cf62a9ae1391313571028d3c3536bc540dc68342b0eb405c6ceeb41bc69", "2e587f5415663eb99034cf21eb9850fec18bacc970e5cc7c29ca7640479194b7", "191e17a9f657417b779c813b79c611d552eebfa969657e713474928debf12c81"), ("05f6afacf1d13fdf1151146efd22274fc5723829c9a26c1e7b210f30259c8dd3", "25008b0144aa3cf2cbc76a0da6d0763375b222289812fdc16f7696f02dafdb97", "1e08dedfd51d7d82662049d1fe132dad102d42a70658e6a9e6bc7f5acf4cf66a", "29679066f3419856bc99f908fbc6f3e6b69ee71718a539124759cebffc3d3033"), ("1f40bcec3f1b5ea0890148f8ecf8d314d71ddb819f29b3fd5199f9eaa253ca1e", "28127403568d28f4b470641c2c45886c820f618e1c7594b8064b7bc4bc1d8ba6", "1082d5425a7f5c2950e692395f9f48f764939921773d46bc735a2707d61c7759", "2a39366f38ca222d4bcb22f7990fe64abe9b26c212a31b9744b17d1bbe4c53f7"), ("0d3dd0408ff03cc04e650ce56bcb591a2bf4689448a60741503febc4a5d6639b", "1e29cd661e2b1c8e1789f023bd0e0be351327e41e48f3c7bc0f2f8e869b23b6e", "2a4dd406031ca71d4ccf005a3398dcd93d228b0e51f18a5942be9b86e245e909", "25e033d4206fde12705195e779446b61afa41ebf12f39dad14a7358a01a536a5"), ("28777970fac129ade66b5fc3be55e2d1858c4e4421690d95a447920d7a009eb4", "13a15da6220b43b5accf00a80351fe87b100a5a87fc6d1075bcd44c94523260c", "05fdf101855b1055d8a1b2403fafd68ed626d658e3ddc7e0f78b956bc5884b2d", "2e60d7352bcbc393726023ac5cbeb381db42428f98a13cb514d2088a7a02c838"), ("2e060a25b2956297eb231ebfe142cfcbe241bd3c56a92a7c74bec14386edae5b", "065aa696aa6f486f2edab8efce9ad7578a76a43d1fb848f7c797d9643dbc1e7b", "2646f618de874f31c737edbba30de375d5a4392517d7720f76b6ce675896ec01", "0e5e6730569f5640c9ec7207508e804aff0f2549a89a7f085ef2365274878bce"), ("19041d3495e9a52f110966901d7d6421ffb0b067876856f75463dcb821707083", "2a2f31345d2aeeb86b9a5302f9e533d0acb85558ccda2085c6c0a29fbeed4ba7", "29998f3dc0c253a0a98119ad027725c7f1e768702c80bb5bde9d2433eaeb404f", "1bd6eafe0e5f520be18907b1191eb419dc2579014ce539fcd94157d3f655a351"), ("20cf40813e3cf90528569536c1097099ff0fc93618fc34484381bac258155439", "070dbb777e78b350151e0a471af2a1f7179ea7905246197aeb1917dc8cae4617", "17c5ae833737d6e0216b09987d9055a0e1dca5cda921d90c72c3a71764f9c542", "266b2840b5f86c26904a3c8b22a91ef65842431a1b3b7c9801cf8c966bbb6b7f"), ("0d2782f85f6dbf7a439680651c133b09f08306c472de0e5d56def04e87d4706d", "2cd0811df5b0a7f64db5b1940f27086c4caa939da4a2741adedbfcf6bc8ad347", "166495cac93dcc6aed925abb0133b73c23bf726225fd1adf4c9c64d626257b49", "10fa5e9ea288b706864ec89001ef5405c2787354692fe56abb5f8c9d1abf3876"), ("2636fd4f8a9031a3c172551a62bdd75dd4d944104c6b3f6c0f9b547ea10652cb", "0ef388fb2826f7aea421a25ada4b447df519785350f88c13c66fc193adc39984", "0a80ae7d42cbd29df06078cd690c3ee008b38af4b0266dfe6ff7c887b7955af1", "2562b890addf40bb6cd0015c69be1fcbef3fe903fffd137f781f9b7c088ef19f"), ("111585e24f15dfd00ed91536e870722357bbd731a0b90a53539ba3d77eea854e", "24c687d9754067773dcc5a37144c3104e6ebb7cc4329431baecf73aefc6d64f3", "0d25d9e4cb9d5769703daa7fd16fa83875d43635934d096b7f2ac2fbb64cff35", "20c4dd28e92a82f50dc970b187949c8a23971aefa189ebccb9d8f2df48318874"), ("13c0b01a0546bc39df8fcacf79ee086e50f097cfb17bb8274996661f72b16365", "1aedf449f11d65a57fdc3767ff4bdd27014a4c13bace75026995c98c3f6b2bdb", "0e93e2adc3729a27e14f7e579b1e4d7af1e0adbe3c8c53dcae395e6d307375bf", "0fa4da2eca1e687e88d822a9aac490134fda09ad3d13a0a77f7a297be084cc86"), ("2aa9e9f6588d41a791a3d26adbce90d7c7b2d4e4aee4ec61da6f428c96f52a37", "29e74a7e61e18db5c19fa1c5458b5c450e121c18edd223569f36a211b920e773", "211d7a60569d67db13767e00d046a68c4ee2916c617f2776bbf4ec848fc272d8", "06d06efffde1a1d34435faa3becced2501a29a8405f1143bef391fc1e22ae76e"), ("0dd731d1538d5c14f8e869e566f07e094cfa94fcdf6df93c74356c7ea2cdc509", "06e9229468998dc092055e213f4d65fc7e3e7c50ef06a0c11047f71ed17b0b16", "09ea38eaa208ce583840ab6b892aba35580995b8a377f6f2e880be9e4dccea37", "28f588dbbb69dd59852f24c4718798288a4e57823c75ab3e4f60be714802e762"), ("03d081caf9c8daf275dcb117dfe7b9baca2ae07da3e790b689dc36a03e8bc48d", "2153b6c795d7c771cb9abbb2ca68fc3d3f2e36938b75d757a927c607d456b6b4", "2be201def8da94380465c671010664926653edfea85a8d5a907f36eacdcda620", "22e1d581a6a6a9d665cf3eb4d21a57f3a601dcd8b7116d2cda8603f0dfaadbad"), ("0ebe411f922c69625e8d6ef97be260f268b6ad2e234c8792cee42583fd3e5417", "055dfbe63c1ad3d3afc8250e073557ebd2164428a661421daf13e38b4f046f19", "1ded7ccd68e850a32a60463f4ca4bdc2e01911bc0177589a82f5fc0444b1becf", "2385709ef7429dfd4feb35d7bb1d0e8f3b6c8761eac959d1b14550456304aa81"), ("01a63305a1fcd99e73474a79394028b8fa7fee365fff78bbb6938439609a0702", "083dacbf315201517f506133da7114c4004ddf045040752d4ff43e4446818458", "2da418800742fdef17c3279030f20cba1b535b176ee506886c82c51add45d5fa", "12513523f0fee2dd3a6301e7b51f4bb8cd2a00ff194c246f071279cd61a40583"), ("271ff217b3c679d52ff0723b31bb9461b53924d0aafe7ec5ebfb20cfaf1ca278", "01c9be24698dc03762acde29fe7ff468c8cff2dfaba143fecc4ac0a7ea12a72a", "2ef949ef68362a2afb549cdce0f47330276a5f697f3c060c34775e627c7f47bf", "1608c724b888c3f11c096c3f240fbace85fb0c2d9ed9b3c7bc8e7c5d0cc8fdf9"), ("1b92b672f41437e1676868bde0d15b125f6f6c532dc2ea0815c858757d5e2862", "22085bd6ed818a3013d06d577f36c75ed653a666780d6345d6ebb9373a2012ef", "2530fa730e37a5fcdd31308a17c1a8ddacef93ec3ed24f6e1fd0215301a5e8f2", "0fbc69209d50c41939b0c00990b68d83f0fb6de13a9ffe62d52fdffac114bb57"), ("1ec7641b93b75a35988d0a82f0149a9b19299ca990cc73988f134b844b466a7f", "0953f863a4d3406a2c21823588004716070e3221d31ff4da21facbe7515c3221", "29574572a102471577721ec72975daac736b53b3d097f953d61e54f1b0cd7512", "1afba03bcad9ebd9b15226a5dea76b359e24531883c1355360f253e153a4dc9e"), ("11da362f334c88e1443dda550c301bd71bc893b15663ab79ada5c2be394b235e", "0deab1cd8ef363d1ced1c8449673ff9696cc6459fc88f2b48c956ebddcae0a42", "11d489afb2bdbf29dc1b280436a11de9f0619a398d90822e93be7421862ea5ff", "1fd9ab31a1d4656c76bf3f24fba96ff5a4cba0b0f8060fe4ef5b3eb5c8cd1a5b"), ("2db76ab8539793b2ba43859a5afabbe1af5a792af6eba7af53e6f6500ad9c0e0", "0f9482fa36f340d32c59802fe15cc92ed7e0dec2bdbdb2a77ba7a50da641c302", "1d91d6563ad8ca9abba31a2ea40157bd0996265b3bbac723ef3e2059a5efceca", "11a316a39f39b567a137487ab0f5804847b47f4253378d8afb41ecf11f8b0a99"), ("149c70994bf33a911cbfd35ccddf391a7df9f77c41d596b9c42c6f2ffdbc8bc6", "0c41da85cc8a35955aa3722a6b5ff89e602750f85964227ec3fd76f12903d47b", "12f8ca10a3dceeeb6b1ca3c3d539dadabcade37dd305b7068ce43a53953caebc", "0c344aada041c551bab305cc2a57ade83edc4a94db65f1e7e50ae5094440a3e8"), ("221f38f54a132af21f5a549509ee88e594bbbe379d3fd4cca98f185549d02ff3", "018b0f035fc96136606e79ff351bc122dd2ecd969eeb5b2e86f35f9b03fe0671", "2b322e83c57ddd3c62c46905276c8ac17855e24a893ece8cd6bfd78a0159c96c", "2cd66c47924d9883f35cd4369a8dfacc1bf2ce3606c13b9eee1013c959f6b732"), ("055c14e8d610e96c6bc5ffecdfbab00d20a3e5dc624f87a9713814498b561805", "1b521aad058046c528aeb18183558a29b54819e61a51f0f9b92713544d996b5c", "054e33d2ec52a6243802316d5e7e9895393c870a3647744eb696d9144a291c7a", "0bd7c09340c8544ebe18b313eead535e85f448b7b66e5917323c1d9994dbc278"), ("00d3b3cba77a427501b3608126ef67ebdf5b97613085ac1e30c532ebd0015e1b", "20ce1e9b9c26607950ab40fddbac9a11dd8cb7355c1b4ede396e9d5b4f36cc59", "0252da14f9b591a186680e053471d58fe21aa8fa77f39aa992473504200a2337", "1815ac249261f530325b64a40cab1f7abaa4ebc7cc6ef79cd44a577adf303a56"), ("27072e0b4506f2b469cc8f5674868fc840ff2e48cd8630b676d72d9418e2060f", "2a33e9e27f9686f3931a7cce055216e6548238be07d2a3d7ba32b44a3dd38aa4", "0f7e84d2f015eee57f9e5138752406196d2ef67f74e35c63e04a9cbfa3bd787f", "1b857f61386bf519ad48a2c6da9bf04aabf21ee5b60eaa80581e7fcb553f3c79"), ("1af836cd85a538ab17379ab2950c8e1e35a802ec85cf56c0c766ea6aca19dbd2", "14e2eef92ba18efda42723a191cf65358e331f14a045e9dc01c083717256253c", "107087cd064a798c7db2710f265b969812e1a44fac5132eca1427d285c0bfdad", "226d6eca50e8980961ed3e546e4574d5ec033cf7bc3b69fa0d2040834a13b219"), ("19a62f4058effbf9562e9b5c431b45c3ff5302b7aaee0c486108fecba910b3b3", "26a4d998420e57ab8912b6f5d9bf58401a093f09aad8ef5233906e681b525f2b", "05eb7cd849277782064ec34619171b5bff2b1ba27241281f54c5ae63b3a6726d", "0cedb769bfc4e6856af0d76a086dc5bfb536a0eb57a659c30af8abc2398a066e"), ("0e98a0d50ddc306ad4783f177743fe51a20627788c1c425a9da3f52e35abb2de", "10d960ebc556364efce48b374afee4a2d33ae931af8538ca7aa14e700187141a", "14a62d91f4921c9580a010081e14669ba5910f788447a24b669b7a48a1c6462e", "0301ca603291243619e5b024f20967b2fb4044fad17ee40fad7b2c80a7741212"), ("16c9ec3f152ae2c5872c6e55f30ab51565d0311bc327045c40e190b742db235f", "2812494ae9579541779a8ba205f8ececf71bad4f54a96071d5fd3a419bcabd8c", "2f965c43988809dad286c0d0f76a7f070f84e45677288744abbb980727ce4bcd", "1902af4b6a092d0fb341a226e0e2eca9bbad21b15de57a44dfca6acf24155cff"), ("2f37d4655389b71526200311aea8462a6cc3d7ee445529994b9cfa19c4a15424", "0508f98ab4f48d3b63cf5263b85ab706a1534e620f588c78940e33fc3939b53d", "18d4d2aba0ecafe7d3da433b0bcc54d2fd840eb7624243ed36ed75eae14eacda", "1cb617932cbaad65dbbe2e3c74a977e83eef1babcdffb61a0505988198693682"), ("2e9932e94f1dc61619b5c7e83d2fd58d9a526bbbc07d7b93def4903981f060cb", "119852ecebeb623480f1ebd5c21e7f20fb7b96c379d96220dffc0011dfd275ad", "21ed0bbe0bdfc80db9cca54636c36b646261abd0fed6456a20dde63438e58579", "0546d485a5019f2d524f8b3f9fc5e3fd33a468e946182561de5b5cb1a3782ca0"), ("1d061f693bbc55f8971ae9878c70cad915994dc05edbd0671fb4a5deaf40152b", "1f3cdba054a3aa46387eff5d012f123ffdb372ccd304116a7c2aba26e048e84c", "0e8e9e8e277483e2ac689f37a222876a60c29a2630b5c04fa98b4ff984060f8e", "1401471d324466774cc635263fc01fa58be50eb8a6d030c04bffd9a1d740700f"), ("2d0a266be20e0e1fd9186aad47668b5cb934e05d769fe676c250bcd4e9aa521e", "0a4edfc773fc1a584a12f6ccdfab7f3d739ac588f2920ce554fd69e7f4ca6eb5", "2a2c1974ec836c69ea7d430c5fc1b5535530b326d98fdcd1cde894d970bf2290", "206060dc5c1c67544bbc142c7ee009f6dadbbe1ef8261277147681001b42aa8d"), ("1b19d625e5f6f6c1ce6c6a00d9f0cf7c5a875650fc186da6b7f41b7ade2d0f79", "031141438400774a123d2591ad8a7bb55598f7b4f9d03155b14463e5652e056e", "1822d918b9c47f646dff0a5452685e8953a17e7fe336e9d5e237cecb78d0af97", "03a22c5033aa74d8446bc8ff0329e148cba8927e66ee0324988a75b2992a140d"), ("2f49845d50e5ebcc2f6526a39e485d460e179f361752e335363125bc8a92b6f1", "26cf5d817169aaf95b8bc5ac0fa3bd5e4c472209644a5132e03adf8f3efb4da6", "012e3bf8a5fa2127824510995b059030f9c3c60a351de364bb320ae4f25c6a58", "12e1eb0cf94b6f9161713b23f7ee7d5a9ad2342ab53c242872a40082d16deeb9"), ("175c5ff25e6337b1070d4be3b6073c4b6f64bdb073108758dd26be5c2359a4bf", "253e16184135c864b32eac06eeaf9d6a02d1027d5b20134d7e697c9a2b71845d", "1725f2a26cf7e1ee8ae732df219c4ec3e0c8aba6be52de8b2056da6416ce6573", "09298393189e6ef77f7461052b87d2d8ba4799363b415843b814749e02f918c2"), ("018cd56296e49521c5834f9d502abdb7367a5baac760b0cc79e21ade869655bb", "105e014c792a2d7c83a23c2615d26d0be1221268fcad381701e940ae2640fadc", "0adcfd529b185b919758f6d21c35c8e5669843fe495afc188429792e515da140", "096698411be0b6f654db9453da061e06b664a18aefbf6eec9033d20bd1194402"), ("0a9f332f96d93d9d7bb25a51c330fc222cc9a74b062c3ea528aea45381c8c6de", "290f760e29774afac3af1f8458f5298026aca371635d883ad37138d2c9e4c651", "12ddaa23d9d003d50f7c4685035f478469f89d197061be751b40517d9f6c91d3", "02a2ce7cb35050f81773466a688c349edfcc06ebbfb47ace71c27bb002789eb6"), ("1c576f4819ec0fc9cb78ce7c1ee1a8fd3442893029420e07a4ce332d6d0ef7d2", "1742497da3cd485ce09bb49c9cd0788114442ec1445f78a1dc1635ee82ebab5a", "167e33ff7ac635b9c6ffb236c8605ceb099b83f3b83ae07ee38a2fd9a6df3ff4", "0bb1066629383697da3f5b98a92029ce5d5ed247e0e7f8391d90b4ba6e98c5e1"), ("0c704144eb2fbfb11a43e34fb3693039ab0ba48806e12f289c6ee051012c3c69", "1967f0036c49057ab84d6213aa897a6833bd406ff43435152818ad18040e83ec", "0340009418141e752cac1452402482662841d2c7710a6f1279e673ce22ce2264", "28d2a6d728a55b22bdeaae2abc901a2ed42a011f61d738bb700d6b5ea5dfcae7"), ("1489dbf9b1a7e64efbf9eb1c7d183a351b458d3f44016d932504ccb860184069", "065e8172394c892733f86ebc31ea1aa28f9197f57a00450f2b5f83aeb7421c41", "0a41527067ad0f1a2ebce3c6873849c8064e2e910a5e6bbab7cdca305a83ec7f", "07a3e11a754828c90e0d499a1f0fb772a7949b3059af0463a1d96e79e9a86fac"), ("0bd1b984999d257d4b7fd250b7663649244e66ffe2fb29dae4182ba0f3bcb8a2", "2933b468b1a769c165b955caa31038cf10c415f158db6ffe70a4bcf9eb7cc8c8", "1dd93e49c5486aaab6ba04dee302927ecb9b415d7540ee1ccacc0315d0278271", "1a17b8b5fe7512c403b79ee7bbdd2b57de0234cc2f1c98e1876979cb5081f58d"), ("1e9ef1706ba7311a34e026a9533c0fc2649f47775b938dfc2c109ca5f3813cfc", "2a5aa844ed9474ad77dd72605cf12e8233bf4113e39f6d67c21fec5b5a11a073", "26cc5be43cc553af917378560ef5668eb6f5eb30926acb5d1b19f88b152f4642", "28e0e682f70318f5848cec1329241d3bcf0c63af6c43578b0b1a61140afd4353"), ("0f894f8855e8f7cfb3cac23250f9d761afb8146b097bef1dfcbf3ceb8a153cc0", "1d47ff86ae7fdf3f2726df411d3e3c2e211a35d18d053628450308ef804aebc0", "27fdcb1ec396854708b4f92733ea440ed55096e5b6ccea05a89b8fa1ead74007", "1d95c5d1b6384df4d6abe692d1c7d1a24e90de641cd758ad934b7d11ba14246f"), ("0a16629ed6ecd208e9bb2faaa0d892c376761112192a392e79ed6e810b87629b", "0e3bd5eb21958970b7932991182c0cd500ebb2a3eb117704f428ae6f56e0e6c5", "1def4c074e15cb465374b0073a2a27eace7ef5b924535f480176992ddcd742ff", "0aca205b01fe290c719cfce1734062b5715e9ef58da363c8ec86ecb37657841a"), ("11596b697dd641841690a26a218e0bd6e5583dbb3083e81a77e8d79b192c5939", "204270bf3ca4a208a338ab78edb58a3ea6dcae26547b6033b97ec92afb70e59f", "2dc7e53a32238951e7e3c8465e7a0712ab58fd287cc53b3258e16c91759d4f79", "200e9c49f2056fa5d4622782bd2068a4fe4fcab2522293309ee0c4c8447e9888"), ("16b71255a41b66efc218873cf196e1d40fe3cd43e26ce1d0cd3d89338835a761", "271fa76700c5c25212e6d9a83c4143c1bcb59cb8871212368a1466b68e976ed2", "16a2329f024f0a004f223f33733b7aeb5a6d90b6d2267dc6c35a1d9901947fa1", "2f1cb8a80705f75f1203cffc434a6a1cc79d819952527ea23eb032ae12458163"), ("1f065c8a9ce7ed29a1d06f423f772977ce54ff3aff0d2356c25f59c0b6523845", "0da56798d8a96c174a87a1ede481c41f5857f021fab122a3334967cd3eb05cfc", "1750fecd639f3ec804f319da5c234386f91107dfef6be61c63474d44b1141c59", "0acb47d0d8e4f385cd08fd5d4ed34684eca26581282140dc8cc08b27320a01a2"), ("10d7d6d9db74a0b51d9ea35ad5ace2d65033d27af28d288fef906734c0473ed8", "26fc1f737f74d4c2605da5691b7b9a6d895ac1876a3c462554683bc0d06aeb5e", "1a95d375127800f776e020e591acd0801e9a81cd88f5b7fcea4937c32c27880c", "2cc47196e3270b69cf4680571743d69d1f88963ea884c70e2c543795de2050d8"), ("08125cb859f3d73a1d5a3e481a12614ccb571749c9b8f5ca1aad4c9fe52909f4", "13425b482ed646d164a4d85d013b7e0af140026c8b9ec86b1b0f1c7cfdf4c2a4", "0941e0287e9fd8c26277059731b149bd06833e88323baf764a6d55078dfcfbf2", "04b01f7c17003c925e918635fd5573103fba361ea584feabe271e55ee8a2704c"), ("26ea7dd7157d6d26a4cc21c8be50dc267922a08f3fd6c5233654e8b8e2fbb6c4", "2f4de0148df1afceb4f2e5fa4997f03c82ad548e746c14c20276716d82184bc0", "05a515750282e6922e2fd1bd601ce86cdd0b7aac7db61f69774c051db61b4ea4", "1292680d93f86077fb8f6d4db2f4ab815d2af9bcce8a4e621e5d570153358461"), ("134057a8a28958e8250205d6eadb64dcf883f58121c5716743c998557124982d", "02c4f623f7eef3d62c99715108d2cca52578f77075e178f5a880e2f6d20e3d4d", "2ccc988ee33bdcb8ec44d0e6e81fcb0e490725e401d99ecebd119bb85c6687f0", "0f4086a6d5cc5e23c202e9e3d1b8b29f1e663e3ff4870ce53bde376d1ead5d6d"), ("2b17ce5b5a131e88c4ae119146c5340190e2f8ec4a0059f45d9195da1709fa62", "1c5a1c5c0ac626ef56c92742fd164b2a5abaf418d2e90f2d9d4f4d397f3fe7ab", "06824bcadd1d5d4b39e265d03f39a505575a230f4a3bcff91d27720f95880a3f", "1d1baaf31e0c5b8c785ed343a3ac24a3632153f3baa68fedd94c562bfd34d8eb"), ("16679f459ac39e8c0e72987a0fb4422f8c2ad67909151a63a5077c2eba729956", "1c81b426c6b8f44658288ff57da77fefd2ea9738c39b04cd19fc4a9072ae0e50", "0ac66414ec918f2635cc7752de250d8dcbc8cc95a8e89e7035d493ba8f02365c", "12d5fec3035da31ceee2502c2deefb00738c46c5593fdd8325b468289cc26edf"), ("00ceac57a9daca908152bc2a9b59bc6da14b82de6d0e0f3d51190ac9008ae7ab", "1d5d8965f0145d8261ceaa3e5d1ee0ddd1076683151fa3626fcb23c0b5d4ddb8", "134ae4faca02472662380487b5a48cbd1c0ead2cae73878899f004643b8eab23", "00110ef99b50264a3d7fbd33c19c933c688bd07a57b77ea0ede41cbc61cfad12"), ("0909677b1c19bdfac4c271cb647ac92cce9a653bf85e8e63bd3224beee880563", "0937f79382c8b5bb8c7b52dd2fef223eda76956a4c95bc5c5586fc966b3579bd", "1e7df91767481792d69c9418028a3aeb9338436215df7367a28ff2c46485f465", "1d9ab94638a290d0da2304b23bd89f3e21399a63da4670e0e1b01767b73dd080"), ("06be60204d2fe7a2f76b58b6d1aca8b50a703035953967921c84a756e0e9533a", "0fac6d9d46581f90b8caa0477b08b5bfad2cf38c284d44a80ce5b7f62fdd6ef6", "156461004169701332d007efd027d5f9d6585487e367cca8cf0263cd3c512e23", "256051eb8ac5e5e8d71f7c2306ce0d663124234898054a57f7de47ae648205c8"), ("064376440bd96991275fcc6d1cb3e3049e8b3b02b5d5e8767cd9f1f59777c66c", "2ee2457664818d769bec81444ebb7004b22acc106fcacd8b4be4b605cad4f5f7", "08e1c481eca055ea2b014bf14a48a53c42481fa0c95938a6e8f2bad4b882edf9", "2f8fca1a51ea4f1c45e3851bd27108c2ca2c9db6d6cdb6200cb4e9ac460964dc"), ("22b059378aaefc53d641bfb40c669992178dcee8b4074322d20e7a08c3b0ea61", "2ce6332c3e449688259c1b0cd1f44c570ea3c0e36203c6b3c095a8693f33cb06", "0af56ad62e826692566de4b2acb5c0e434f567bd87aaaebd1ca31f2135a2a944", "0872e0c09df0eb099ec42c4b0de1eb4ac8eba75aa79b120d276a9e5529682a2f"), ("1d8ff7e9c069716c3e6474d67a67239650d2d3109090e108fd4b573121ee18e4", "1a60aa069ffde27513329bf90067a08a9ed513ba412d430568df5a5bc03b6701", "150fda6dd852ef01ae036d488ad4b36c1bfcb029e4589ee87aa688f96aeb102d", "0fdae63f70d59ddfec4418884f974a3025ed1094bd10e9944d2d9ac302ea87be"), ("18bf6dcd1eb2dab930bc6cb7bb14b5a6b4e152a7c0c70378b147e87af5c0f37d", "149770bbdfac16835a73ae868421c910d20f2696391f8a8e24ba8a28f7b3dbc9", "14b7ba420e394604bb8bfb1e94c1bd1fd4e03517df55fa194948475594582a1d", "2d5f0e2bf9c2bcc588253d26929c9fd4334bd7623b58bb374688141ebfcb604a"), ("2f56705e25f99db92f41beed9cef2c1b8470ab52909001615c788f3ec8ca7f0c", "2dea9032d1e4962f37b9448f1ff5bc6b3d39705e0a99be70c867f53fbb414ded", "1e1f568d6a6c9e06741e1115818099e4565871d7ba800a975b6d41869c4f8122", "25c8140de973a84691d429db6e910fc335d20005ee84794038312e23f7f3ee68"), ("1f31b01f45ba49651a31b56f4d3c0bcec2fdcda96fb806ee0d2a409432fae6b4", "0c03392c20f0423e1d93302ffa1f0697fb57b3dc59492d98a9dfc440c3ecf8a8", "032da3c73de59775ee07521d0446dc1d8169ae8d89909066e59ea9251fb4ff1b", "27630864ff74cddb74463f810be3530984a0d2363ba1fafdd23aaae44ade1743"), ("08b20517ce45fa170b2c829f749f20c130cdb535db1d7bf0434a1fd97f7d0d97", "2edbd227b1ae4e7b63c6b8220e0de2068613b1d929ff5dd09dffbc23bd9f2ed7", "079e689b838f99bfa1af0707aaf61790aeb35de7481caa809a8c05fb9bbe0b58", "07eeac9b037c0432c76d2b233348ae81a6f565881d4e26c8de5ef8c75efdff23"), ("2701a5a73e106e604694396a465fa28f20a24592d3df88cebfe7b66c6fe887d6", "149005dbab417a095c6b89d001ff64380dec3e6633a726250547502afd84ac1a", "0f69b42277c8b3f571ca2d0737d57e9868daff7ea77801651068e028c56325bc", "09f94144b77b66c8468f3865f6d2eb7b632141c3557db5ed9127c97b71ffa8a8"), ("191bb72dfee49d0b88c122c2717b9c5b7310ff5efadfa3b9d7f16ca09f42edec", "2732447dc8f4d0d32c14f9dd2875a417af6f930515fc62b76f8a9bffdf5a660f", "301502c7d0049be28ee6c0d8b704de99616d53edcc25956acf5008895481d86d", "2a3a6af3810cde4cc51150f76b799cbce042095b004e6afc9f196688bd92a165"), ("1056363486977c25e03c6b6cd2b2952319063ff30b00247540cde5bc65868f05", "2e9993c6c105bcb4453061e6544bca34db6e61b8f975a78b5a73275fafd956b0", "026de6d07a9760cd2221ff8b04977533c79743b32ee7a8e359a1fd51db0aa6c8", "1b92424a0c4550ddbdb3eeedb5082e9270fbdb9ab128aca312a01cd0941312f9"), ("2ecbeec7fd015a69f209a8119c1d87e8787e3c3fc886582bb8892268bd610896", "2fabff62f13114773df10e79fc145a57607cc5c3fd533b9d7dcb4c73a90c1846", "1aa01f43bb4a61577100790cf546f5e0e2a5743bca28f20a8ef561e71adb05cf", "1ce66f6b2305b17aff6896390e1f81f0599f8d98534c4e5e62e49320daa103a5"), ("046e37b401d0aea65ca107848b7f15a64b3fdf551e092c4509422f59b3b47abc", "10d8dd8122c53b4bdbc6d708ffd720ba16200e530a4ae8ea31ecb01ca64d767a", "0e283314ce46c9f9a29d5d471cf7c0a9e8092c18b18fe7393e74dad406c6b2d2", "090bac46ce8804ed708970bd19ed7bc372682107ad8136b46d6bb7893da80b0a"), ("165454bdb3d3d54300512176e0d64a672d8a9e689f6e03b94a369133060c7551", "286a569acb52e53e368bf0ffc7d4490ca637d3bf74e6433f16d0db5423485204", "2fc92c9ddb060f03fc5b71c61cc0f15a9bb1ec252013964e3abf342b7aebe486", "27518db2dbda5ce3ef0700044456ad3a74c9527af7f7393456c52f6b9619b129"), ("1d9fda913b39c4f866e24f58aac4e198079fb281692f2d409642021c813d7659", "1d0783248ed036f6058b866c3835572f61dfcc8c6ac025139b9a014c60de4e3c", "291bd66ed7552669b6b32b8539886406699bb7d83d4990d8477bb0946ae947cc", "1c3e28f3880f42524131ead86ec441ec4c4e0dde82163fce2e0969ef297b64f7"), ("098bde084c5b938ebbf704cf3ae9fbb81c27116e97227ac4d6688c8dd5dcf250", "1bffaa7d4b27135b1e154b39cf335684cc27e7c79aab614c177b1368898a6258", "1d48b5d06a3be61e6bef0685806a2bc5daf9a8c0e20b93371665fccd29bc64e8", "2faaf5fd9aff8c38fab39d290a88411652f61297be0f0400fcf36857ac302a53"), ("2eaaff05e74f9897ecc70249beffdc6d8373e017a7997e9c47c8a1a7d1fcdc09", "1a297fc807869add29bc11b2ec40c3f01cee242f37ec08f0de505dad64c4e025", "1642ab4a96dfd9cb8190f3855ee29faab83d060791891d0c538ba160a1dab1d3", "2492c75551233ba1f7ad3972f174ac10246458aaa57e64c594b0fea59b298e13"), ("06f72cdf38fe314eb0fb42dc78cfd5cd58dd6d66a6598b0099a7e92292c91725", "043576b6bb5eae6deaf4528543085abf907065649c1d67ddd8619ba0b7b5007f", "03e23c7e0705e2709810b8a065dfacd64e7dbc9bd92546ebc983726f6f2f0d1d", "1b348c7de3481ac59d3eb4b2182c44d84799f23cba51f9d775668a8aeeb0f867"), ("19a1cbb6949898647582d2bc0e15b9d174ffc966d8bb25756246fde08ff89f76", "0621c45553ef5b89d435e94a947e6f87a3984f664a2a0fbb60107315e0c223d9", "1b3fa2fe3e3c39d708c8c6a273032b9d89b12eeb4a5b9d1c3cd330a338580978", "0e2b0f5f04ec7c02e1f912a0ac08e943226ccf8affd8ca417f79058a635db650"), ("26ba251870a92ac37688343b32dd1feab914b07c2d6359cff07cccdc067bd368", "2fa5c200a80e030d614e4c6fb654812bcb545f6a38b01e66a73b434be4019cb0", "1fdd950e7f78d2f5457d016798634939bbbb8452c1d9834225cc6d275f7ca909", "05bf922ed65c0cb4420b55e1a6675275f7dda3cfc26824ab80fa38b93b4ffa19"), ("1e1432ab660b3ee6864f09f7fee059f717ad6122957a1425f6bd0bca1a4ae30e", "2f5968efb7fbdc1026b9992c1ffd2cc509009edd5eb98e8030f3384265eb6436", "1dff28dfc03697b621b921e994561b3cd1c5780dc2dc05a6a933ada5ebc118c5", "032e1aa7c7cbe0cf9dd99bf5dc9705e1f9611955b2fc445f4526e1d8905b16e8"), ("0fcec8b7c1fba2d8e8735251076add1efc0a76fced661b5dabbd54d9196a7f78", "175408736f25a0a0e6acb687c435298fc51ed54671539fa8595a5cc489e9497c", "0674578058575319b3830273a1278043ab4ff96a2938c28700be8f1a8bff517e", "24ec811b561b31fd8d88f93c3ad22d4149ecd6c11fefc0648662c4e53994a11d"), ("019410be0bc977a5d6aa17bb2c65b01d09fc5a7735fc807a921b8ae90e4a67b8", "28ede677266b28ab7f9de6d236ba829cfe0a94e26f443c91e58898dc179adb17", "0da51fad4110f91570cf8389483efdd028d7e2f6f08613032f95797847f03cc0", "2f4d7d9b78c0bdd1c9819bce1a0d8dc05c6063e7f2bec20b66d52b13946b9917"), ("26f11a3691c42c91cf231b17fcbd8074f356cc3273ddec32ec941c5de636e345", "2a18d5d26a4f4c16536c59e0630e1f48b45370d245342975de4937141dca858f", "24938cc0c9a4d8a808554520948850890e55aed4388881192fd2543e057e37dc", "29e0ece99fce7f17ecaa0653849301aea79f4b6a60ac6bf53c294efec668e44d"), ("263c5ae288a1e93f947d748e47396df2332b1d2c0c873eabe35e125b7bef4db4", "2f8c46686b1a6dd3e4c0981c170cad1c54414d74da514d4409e2840b7453b2ff", "04583b0649d46773b9736a1bbae5cd7bdb610f67e0259f83c27b43776758aa42", "0cdb76ec2f4a49b82a18b0a9e9c043f85735c8186f3dd25418871974b9912bec"), ("1291ec4122ba87397a7f3c274eab9460144d4614edc277fa20b3b382663ab23d", "0d3b2f6abfaf73d773760c7c2e4962efe15d558b29e4b5b78b1d3bf2be2ba1e6", "2eee2efa42c778ad75accf0aafef50dfbb6de912a51d506d2e9a86cbd80c67b3", "0646eb0422ea16fbf592903732cc5df3aa6fef29b5fc3556c0809467a08d6a01"), ("039ff3a2950ee4b84612b9173b134b7321304ce0b4884cb93bf147798b394540", "2a193f8175455085a908d77e5e428910cb759a3f98ef1f736a09c0db61529a3f", "0ef674f97577c69592897fa44bd9227447dd8cf7048c91214d157eb62c3ec0ed", "16a3e3d2f57d57faff1601cd67e80ce6cf6846a04574b08d2e3e523c22522211"), ("1cf0532fb107f7dba0494ad429b9ce42cb454ed845805b535856db3f6ff62340", "12d33de5f356638aa92d38f9ed5e87b7ab64fc96448cd57065668ec63006f9d2", "21a4f24c2aaa8f3e6985ed6a4411b215a3018df00d220f32203c72c326faeab9", "0f5f91d10180438ef0db138e7c8ffd1d380a761920d01f47291b4b2580178a5a"), ("2ee74e0312d0348e0dd4889a2b464dc6f4cc33c1d822349ddbe3f43bb3a4c803", "0788edc22a702bc5dd7c7a6a67f93d6960af126f6702c5a467767036b65d7029", "287a3e7086b41bd5909a4cf90d50d0b3d66333bc2c2ea333ab94d3f86ca1936a", "0f0a75645d4babf334d7481cc85316573ab7856f4dd0a36114468e8bbd2aa7a9"), ("16dbc65630f3f8a68dea0dc671d3f105e9804a9e9520d90a80d5e2ca25661cde", "2f028916690e48a6430110ff23a56f9fc8c96c62490520c7c7eb4f19b9f4077b", "2bff81f6c855e0edca36c339432e18b2a80bdb0e4d6a13f7be349818557b088a", "0dd48bd803e1c61e98ccb1d6c6d3364a342d6a431cb0241e01a2e14d6aa1f9e4"), ("05e75e10d9917965dd3f15390c0778a67cde5350c48accdbe802d584ce5cf735", "06ea65c2af73e78480f85d85cb6cdc5838e7819ad240668e83733af971c61e2f", "2060bca4cf405cad0bea533f0a22784f364f9cde7dca54dd10819931a8c349ff", "02a33019f5a756e04c27cb418be7f2a314187d11ad02b44ecc82b489a568f67f"), ("0457759e1f264f78a7b6dc5d0c76d908fbc094c57bfb1a84fc6186dd2d1cc9a6", "07aa86e9b4429943ecad938142ec4e6093e510eb7ad19e15a71d0446f88a06f4", "194ba3ceb236ed7c7f8a95c39afac3abf0dd98d8d406ae656af8e40eb0c172e0", "27eb0a88193d42156e8697b18c3a6e5a009c06075df92329fb144679dec3e2e3"), ("204a5ebaeb6f35994e493dc6cb98aded1d2c2a546ae9649091b403a5fe027875", "03a2929436edac32f1b1818cdaaa85dcc630dbbd22090e4f0a9c2afb028ad8e5", "2dac48d06f5ea0d956bc8edf83105d941e477d770080652c91a066b4e8f51667", "110058fbb4f7c396eae7686c8d9c90a9c24ecded7805638cf361e9789bd72bc7"), ("05ca5fe887d102c8acc2985c62339753d244a76d1fb612a45ce3fe89c602a421", "27f04d66633e2f03377b332aa69e55a07657e3e30a13c2764c2b427ae1562638", "15f3eb8ba1d620293f2e93e40a39eb12128900abf665a67fc411d821adf2f5c9", "0675b19391512b9a9919a95e51b253161d32ccb20fce5b7cfe39e78a3a393d39"), ("0b4df90cd146b444253075928c6bb08abad4bbc4a71a66ce9e792dca44d7ffb2", "30352aeb7c3d5d5dc36e47d43ad0394bd8146dc9f1450fe5683f26343eccc805", "2e9934e350cd10d5d3ce9a9be19c055d4ea0568a7b3e3c5db6c2c1934e34383a", "2c410eeaafec8d44054d1e3572bff214b6bcb77af21bf9dbd5e4f87c69ad82de"), ("16b54051c5df40177a9ca21e933d5d1cc220910bf6d15672836338d7535a30fa", "0daa4012885e3727072c373889cb952851ec036c4b2d6765dd6dd41f9ebd709b", "2774d2b4a8b632ba8f4aefe9aaca70182d2f9ee71ca08c614e03cb527d22b25b", "26a2c5a96e226c3b60efb5309f5be1408ffa361508ed667d1a39446d99a64b80"), ("2631d8212cc186e17b4b9c352bb5470741de3e67a49c2cfd4ca7f8185505628b", "155f6e7b1dec82182939e813943b08158aee22bcfa2012ecc68de76d0c78a71a", "2f01bae0988d30c638bda4abfc7e2a94f5a72a307139fd5f3864ff6024c64637", "0269c1041259acdbde8f061f30a4b43a6e4418a2a08b32d37da7a173f4b5b6ac"), ("0a54494117878c5fb176f005a98a860b967ccd161547d7689f48bec61c67f140", "23ce0ad9195a2351571f41b821dc14f6a984aedf82c1b2c55e418447cdfcef0a", "0a1acf7ce863a50cd2d564063feb4c33e58f3e8f82f13c5bc78b9b22bec3ac73", "22715a803948d025fb1f8cfcf313af99c4d58ab21953805a338c6dca7c3a38a8"), ("11b65c1e07b3d314b0531756c92e4b9b5fcd495c758e07188552cd38c422a843", "10ef83c0927b59b71c35d69f172778445709ff5295b737d8ec12eb6f99e38024", "0bbe770a2eb8907b8cfcc613aed1877835186fcdadb503310f5be5aac2b252cd", "033917cdf74ccff9b083cee0a6788f56ac491faef26d1f84a35ff410f3c665a1"), ("093c90f3feeecea2629bc06341036b127b4c496d35d3b6aeea39ce7c1bea9a4a", "02299239208d11e314d2ec9c319ea80f803afe569b64ca569435ee1c0eb75137", "28c2a2567d061b8b163484bb7c1d4f2d46d25a0d29d94ae42fb2a06ad1820c3a", "0a6ee43880aaea9635b06cce4dde8d4249013a3b9c9c7fb087309b890f459628"), ("05008df377c69a5a5dfd5a51b97b9a1b534083ce3782330fca58c17e497f6ab5", "0d6391390b92bf4519a8dc934cc7f7d3a032159d249c7118e2ac749376dfa744", "1f7371beed2b09ca288e3bea033ca17c5c8481fbe7abea7801d9056aa11321d9", "1946ff46842093de1c99c39b55fd30fee1cb73f150db5a48fe401082e572a11d"), ("077cf607f54aa80ec2aa80f080915c967670efe0aff03f24a27348dd07c64375", "2d9ffaa2b0402d1a2396b5daefd7ce952ab9abc01dd3ebf1e1a52464c3bca351", "234e966a7b7b58f18060d5ca6c27b4d19db383628c5ce9ac52e41fc0d2cbd3c1", "13558b939e3deb84c4e4967d25ebb025016cdb54598af09ac6039f0a0eb1f84d"), ("292b82143e381bdc3a464f296e6d52f139b16baae0cabfdf5427e3e11b848723", "270babd1e182397e71473266074a51f3662f8056072ffdd420e76bf942d5bcac", "0b147e9908e21731b3d879bf48de5068923a3847bf231a2747c423d605887332", "2adf93889a47b835bd39f6c8eb1b7eb5b61724b888a4298c3c5f8b48fa9a63fe"), ("17ea55b2c7aa233440b84d4ddf4e97018d10c44dc2b36bbda9932c214d9f9517", "0cb0d213ace65382d4bc69d3a4617b07b017468b7f8cdb113f20fa497b7b903d", "1e416b21d56767a582b1ec281c6efd402c10e956a465ab7b6e568364ab3ca6a6", "1e48233590cac13dc8902da6401c36115ba148ddf27a9c10a2d42ce2fd605d6b"), ("1d0605c231342f4ab1f850c8e02bc98e33b82922ca37faa21f813b735a84b126", "187501dc7aa2344493599e0e203ef99824981741944db8b78d8bfc710caf5054", "0d78be37e269194c156360bbe765b672a568e0e1a0127cd8830497d0c56f3d3a", "2e09e28dfa15f97b279a32547b5542a7b91711aaebb128b0e774a16093b2d047"), ("22a63064888599059fc9103d8da05cf8681195759a43f1512c7e48a119412fa3", "055a8ea3be7115ce91fa78c867b45b926f2f2323662118d9105d2db4c76ba637", "09d9f5e0df9f66beba451ed19277864aefc54fe180e110ee949d937b85fdae15", "0400c0c6073491d9be25d144094cd6fdf0fcf4f8f152ec1f42b866e350464fe4"), ("2a526cb1ae1faafb652eeafd75cfca129595ebca83372ee99848c784433a8604", "18e1f49d6a3183a96f3e892e62539c5436f52751d02d47476a1ca1bee2813555", "1cab654813444e0be50871c90a8767bdbf70f771a145803879e2e3fefe135c32", "03fd43dd17ca38fe57569b49a0a2283481a06e99632f6bb69eb25ecf39402d06"), ("0b6e2ec9f0b25d16f95029ce31c82fad076cf1744a7e15b6dc83d2ae57ab3d9e", "017fe94ff9893a8d530d0cde00408c1c4ae152a88d4a7ef0e98688528bc3ec2e", "24d0d70bd69d30ce0df13d335168863815b8b726dbe4ebd7d4f7dbfa35449d72", "1aad742b9bbf458344b88d033431c5c5349a9b81494369fba696a3fde052b4ac"), ("08d92a5b434cf1c4b1c9588f95ba6b848064cfc03e69fe05689feee03b94615c", "1713c5a11c35a0c443479e9379b3af014892292abb0bd98434e059ad55a3bb76", "02fa5d5c148145504d96b327c5ae8b789979f1fc97c42c19b5fd289485972c56", "1a2c4e8183c19b5b31dce2942d5b30f55e416f394b324acb94cc30d395c82ade"), ("0610b230e0afb4036b6b5362be876b095eedf335196101eb062dd58e8d0fadf2", "022d3cc600c53f69aef8c2548e13d35ce31d9cd3cd12c2a74a2e7bc4ef43ce54", "22b275a12c7def3c3627007d58c72d82e74f1d949a731d8484207484ab66a4cd", "1a379c0c1450b312e30116db9d72137ee24fdcb82967da4fc075e58b33de871b"), ("11622b4091b8059065b6953ef3be30e35fc522c9a1a11a1e064fd8f4324b6dda", "0492deeb6618e2b092c912be86093dd8904a1f41736cbc1ffe35c0bf8f137de1", "0976f64f42f801e5b79876edd930391a4ae5cd7aedb2580bcaacd821369d337a", "26638b776741adb17ddfae6bb6ce51ad7a7bc6db7f02695ee40d7c33dba1ad5a"), ("18b4cea82025034aa4bc1565003ee2255d087bc1d098a8fd5030eec57a6a7944", "09541e370c980358f5609b4a7d3de3dc306d6550441a9016f68129365ac1bcd7", "26c4f5ebec774bf568700a21be99708e9e7863e52501d4c2861cce57bae11df8", "2f05d332729c15858cb0203e4cde7655d108b303af7621d640e0a1409aa3f35d"), ("184ce9bc7f7f17ad5e61264ee39d599287a6507d5b1f26633d6df8b9965badea", "2874ecd4942242800c8d249123bfb62d01d90e194195d096714e8818f5a3ec70", "2f5d207b95de4944fa0e76122d2a87fc460e3dfb284ec68ce213ede48a841c15", "012016890e008e728a4099016154d0e4264486e177e7913c8b2bdb29faa23453"), ("1d3b9c1d410877e09c148ddaf9d52b9c4bdf37020b3e8476c042b1f7626f9321", "05c5ae2fe3c81e9191f7e5569c0f134aec169519b8638e372583e766b1f3c1eb", "024254120dddd1070a5b97f212647f178e7855b12fa84bb35ebc84607cf74d9c", "2dde6c3688065b8d6fdfee9b2d980d830152f6847a5c4de7d9aa0a7fe47265b2"), ("275cc1d631195f2d403fb1d7e26ecd32edc6c2ca463bfbc047f4a0a9e530b7e8", "2ed9b32f5f2cfe0e7040e82bddd5f52f187a338c1c612f6414602cd393083b14", "1d97cef239dfba4f731f33d41d311ee3dc9147f496256e2153c917697ce0277d", "21794246ab2fa228ee488b685e2bb31db7c2f0f18ace998bd0edca8cbaccf597"), ("1b673366a4a7f6c7284780eb3163decbc73eab41c6e170d21c01a776a95eb0c3", "2a7cade390a1815ec44489afc9cfc399bec24598ca12c6cb4fa985a2f17923ed", "1c981cd1386dd03fdfef6e386f83bf90c10e877239414f429cdecc70c71cd216", "206c78f343574d4700fa5593eb1512b599e3d5d6f692c40565488a93425806cb"), ("0077efcde4daf3fc522054bce8f913beb36b0170551e70d23c9cd4ad318235b4", "1f31c1d634284d969e4bb0cb8b16d73179c94f1f92c1363f73bb332db00f0e0a", "2c1275c6bc36332d840c7877b0e49cd56d61dae55e93f4f98b46806128201f78", "0f2dcef3f227524e114366e32088441c6eff2f782d5ff4e8030194571965ec73"), ("164d5a493432c9fb16474674a320d74b5e06022c4ea11ad70815138fbd743f4b", "2bc9545bf6d39401fbaad6142cb01604dfc1d318612cbe07974663fdb788f05a", "2a19a0e90cd3ef09c180fe638a160126fd9032dedef11450fe727341e1d2a070", "11eb7d0b704a6187a0f5580c168b7ab741d797aeb15bb967b21723bb924a8f0f"), ("2697a7db016ee5983829090e628ab0bd33caee9ccdf52a1ebef26987c58a1bd5", "04a8a41e89ed2c54d83be6fe75427cd10c116fbe20be71db12736c52060c2a6f", "30177ff592a3f367b2f71b03628f8a10e3bd1a39db7a19170142244fedca0cc5", "18e10bdf9f9740b988788a8b3f4838e06b5e6a2adae7d41957e09cc249ccae71"), ("2f3cd2491b5937a5a946148e657e035b56185029c8ab6cc19c2008a815d9b886", "15f513c479f6dce064c7997146c0232a6fb7bb8ce65c66c0f2a8cb7c95a0cc8f", "2693c3b5e7ff9a9ef56d715baac7e416b95506fa1e64eaf733641fe7eda39534", "0e6f69ff967265f8f31fa860766f1637f1c65557f79850c00020d3f4fc72ee84"), ("20761cbaf9cbac04218aca6f2f1865a161a5276e738e7196960d3286b0bd9fd3", "27f9b5c46a04e216136739e9feef226ba0f9da86e3c6d11c156d258499f87c78", "19f0ff28c7f22b88aca40b49e512f1d1196629b1346f185eab0c3ae619a9d1b5", "25ca8deee173a8d18ae38ea84e8242847470732197ecaed1571053d56ba94b87"), ("2f0c95ebf2729f29c0f2ea5922d1026df893642bc1213dad2feecd40c311371d", "0c7cf839e0e13b24287480128fe2f690af6f9dbeb0c67614b878528412d99575", "153eba3f5795ca0883adab65fc2178dbd50f3e5d1bbc6051f8066729e713c6ac", "01eb0ab544564e51e052d4b88e70bf74101f1cbe75926cecf36b5febe37286b3"), ("03b7d8515df66791b81354b7888369f9c0041f04ca4dde33b12e4ee29157b14f", "14178b30010f5ef0d752aa7491a44eeaecb0ce5ddf64d1cc80fdc70247c5a184", "029727eae53913c0938db3dcdec6c79ac148f4fc5486a0402b03cfaaa959f66e", "1fccc7f6cd300b1800587722160470c116b7b0ff2803410756b7b1e1e2a19efd"), ("06b81b781aeb741bcd1b3a8b9f88b1956a123fa4a17cbf0c113e06a41ce2370d", "03631d5b297353371e6214331b6965bed61fbb82ba006a2648260b4b56759a68", "126fc1ed2c084d585f3de97c4ea5ca5524593b3c5f67a716f95c3461b17b7026", "17dc2240ce0f4d7921de195bbf55b686ee5fd5f8133b68eec85b064f947c5d8c"), ("1d7c87c0d2e4a1177c5dce03cd93e344c80bee8af714b90941db809a900e9e10", "0f7992171cb0997ca0f36a06fcdaecf6de9f5faeb2274cba036f90ac1afcae67", "045e7d503b673ed30d10d7b1d93a050e99917dbb66b538c5ac0c4e018976a65f", "268d7d88bb9b21d191b0e564e2bbee3e56984fc710641a6d7d07aa945457d190"), ("2b3b5d58873ef97072db95e267aa64f786ebe50063b6682170187dffdaea0b31", "173b99fb122deac11443c348d0f19fbf233a788653557569a2a3f932e6740308", "01b36d0e2e5ad65463bf4dfea57090caa82dd7d17b361a4af5c5ab3091e5f136", "02b4ac1ee32b6f51a28aeb445a64670eaa477c9714c539abdad2f21a054661cf"), ("3012c0b412ab366d59e676d523e24a6e6c8b9e06ad0bcc7937f0a58fa9cea827", "16aeaf3d3ffc6f0fe8986964307bbe9ba24af760f97e01c27d90ee57e10df80e", "036f83924d3e5b67e7479ff15946b14c84d3f87441517f5c57386e2804946d85", "19f5d64b18e3c3787218b604cf69b64a3832651ed29fb050a7bee4da52bd688d"), ("02ca62c572b9b85cdbeef0a69af3e6af007c7a1f305d717071320f9089fbb3f0", "091a7abe878e9a9525939b2712973c92decd086bf70db3375ed887c860e8b39f", "23737421a83901c32a815cd7bde94a89897cd748343af6e6dd57752f8b445c6a", "0a881fdee88f1467d6abcaae8179563db8506b8d61f0d2f32dd3e6aee14a991a"), ("18f7712e39f0d6c8206c054efa879849ef2fcb6de166aa2e8cdb4162b29d5ab2", "06bb2a5251ad123185c898475ef9b97b5cc09f313ebda5fd3b69f5d4f9744db7", "10e62a563df719f0ffdf1b19843703b762494e6abbee96b41f7cac66e4a3a3ac", "2daf64dd0553825ff953289431f2d2fd6b520fc7cbe022b48b25494538021d0f"), ("2db9d81ed46998af3910daad291b08cc4dab33cfccfb5fc094a0c99123af3a1f", "2d516a4ed4ca09fe9d6a5517fcc8e8eba0f6ee2246a889cd39a938b900b42740", "0e5b21687b1d0e3d522311698d53c0318bb1bcd0ea786dfa312d360d7208216e", "234ab5594fe310fda72235e0f1a846994821e1dc3022ae4cd930c89ee07882bf"), ("15514a91c34d857ace116acac7d23a737a225ef20588ba745d1cdb67e7f0581c", "00a2920d530abedc423782d4843154aa00175bbcb33672ebdc89d63ab285b4c6", "12d50e661f17e56d2269ce6d4b0c41ca1ee4ee4c31967ca922a3ea57a9d6fa62", "1c97daae9dfdc7bc74168f7aaf4a35e45e417991f504ce84f639710ef5c84457"), ("1cb1bb2e66d3df221571dcc89b85559e87f005c480743c80e7dd89c5e57ea226", "1f2b7b269feda44af6626b489e3bcb22d73ff4ada3b8a9e451bbb9c62555c6f9", "19bfcdd86d6afb512dddd919c53c5cdfdf264af50b8bcf387a76cf8aecdfda2c", "2ebbeba8b40ee32ad78ff9b7f385bf9603bf1a98b56bde6d82e60924bd54b3d2"), ("1e50232329981b654ec43a34188c5212a0982beb0250c99ba1c56b733233dc7e", "2cc79c7c8e0ac934fcb8cf35b860713ba9c0c17a97bf8dd5191da46a865335ab", "0368fdd64902183e0711f1b758f821b3ea8f6a1493a429cdb8e3be6274583cb6", "2f9f685fd06592e939afd75549d4129292e7d876be67e453da4952ffe95fcb3b"), ("21c057e8493bf690486377935c36d75d09f4b661042096e47f09206524b899d8", "0f39410e7364244c64f168989db0ffd3e8e5c7d5f4da856d4c4029e24eed8bb3", "0e87fdc08db83e2b0486b3d5362b99fc0204d39c430709930aace97b184e3589", "005b37e529d7858df588e75fc3a24bcff711205800b4ed1f8c0cd0534984b7aa"), ("11e9a8c561a06034aaf8c98f198e90b3ade4c6f96d37c3a54d30209b9ae878d6", "16f21521739e427634167ce08b920617b7ea62e731c6fb704fc68e5db0bddc17", "0a63742fea4ee0282c71e06d3c2c56f4dca8454e564a14d10fa7c6f4b1ca5fa6", "14b0b9b91491b7695d5db481ee794dd1648cf150575fec718437e2900f5f6883"), ("026f25d78f63a4cd643d2c480aeab39355f43df47e2c0ccbc11ffc0a33294a23", "155ac855b396843ba74ea67370edac9ac4b61a55891e7e841ac57986c18ef7e5", "15740c1c9aaff4eaaf437be1612a11f0cd5ea362fc20c27eefdb48698aa7e3fa", "0296c49ac23178abaa260739c7798131275ef623303bc201d0e16ac0bcce2c3c"), ("1b0064401585d5033893c5103f8dd0553b0a91927a0f8820d36574019bc9ffdc", "21c4daac1cee1448fde28969db3d43d5641912dc4905a066a5174d72200011d0", "0f2bb89def1e1fb54fb031919591305cc617f1a087f3955baed09935f0b61c49", "2435c42fd6d7bdbfcc8280b4f250f029d5e22512ad2b560c797f873c859a44e8"), ("20ea95daf8489f7684d7e01e1fe529cb36a1272e45de06a01a4993e53015f305", "07636f6bbd7a354d8d537e9ccb1cddfce040c02f07f1d071b39072ae85f8da93", "159b8c35fa44bac1f62ccd6ab0e75ad39e6d774ef4164227c6ab2b47acc23eb1", "0b0bb81f03ea2a3f89a5b664e93ff3fcb023d31a2d875e279d2aa01efff89bf3"), ("1518fcb52769e6497d2f3020f58a19f06957ba39ea26555bfafee335aee6d430", "2e6100a87c3be0c389bc3f120dd395807c4c278379db9f52bb1067127141728a", "1c7eb2b0a0173ee2a23cc6fa12386f044c4ac2db2ead57e2efe134cad5d7f925", "17bb83642bae94d3e9db955c8899c3b02616942a18e6791cb1301241f451dae1"), ("168f5b9fb98f28132ffcfc44f5574c5bba182378a7607ef3882ab8eb41e834dc", "03ddcb1f7866b96306b32e54f6bec6a5f04278adf68c4bee6622b58d436a2cf3", "2f57cc215df140f3a039b33843e5cfbd012913e3a785c09203d0cee0e790bd87", "22e30a9f6eb73fa5ace890854c79a6a627529b0363e8f8f24b4ae572adc7f493"), ("2fdecd7fa7b374549dae530106763cb2301f02628542ded39cc026e266e375c8", "11d0e0f95a4222029750cd5e99ee4b983dd88387b8601cd8babe137e505579df", "2bc9db4bd00284f05d801e60bab6e28ae289f223c9dad5cbf5a6e1255eeba477", "1c20717a3fd89a7280381084c118fd16c6b6dd54df0c0bb8c9cc540071c8b973"), ("056bd7e11f0e1b50488a8d86611eda87f93f2c30c8eb498253a0ea881c09f5a5", "1172f5b7f72b0ad2c9ca4028c5573bdb19bcfff1e17ebfb0a59bb51b60b87457", "00b00b836353a08a9fc654e2d897f41cbf112007dac1432e46b38b98911f8a9e", "23f82bb853c5536354b881b96cd6a618829bf920714311a4076defc7f1d9bfb5"), ("303491259405be3fc324f9a452400fa8241ffc11dddc0600f61ecbd4dbdd7bcc", "00f2c25a3cc4e3ad4235f857da28588f0ecf28565509ab0b1c6e72e9bb81b550", "0dcd8e75803e85511a0159c8c49cf941d97d00454a5abea70e4bf5874f24addb", "2877051c5d50eb75dcff646b5487a3a740b59fa8153d0086acd8b2e5d95236a3"), ("1d141cdf422bdd9c7979aad02b4911ed4a488b17aa8b131f7623ed7d50f65820", "2db751ff5a27e8e47bcadaa689ee455d4229dac94daa87148a7446fdbc55f640", "02b953142a35a256bcb41615e80bd1c8a4eb245f81a62b2ddec29b285226f07f", "14a2cefe6d598172fa55ad0d157bd0a1cb0436efbcb95825bf6b2b482211d424"), ("07cb5a2825b3847e3380fd1a983bc4c7096c202c8a3e09e1b915b130dd259e81", "0e15c1d567c78ea5e818f50674ff87ab639c57a8afef372252297f4a26007337", "25a1deccb24b59bed14b902f37d50372e85166c55069eb7efbe72d534136e42c", "2c9b4cb813188563fd260666bbc1fa03cc5f136721c07af3674614c60e050cb2"), ("0a7ac6dc79935e35a9ae43c7cc85f927f82b7ecfa1710c8af0324010426824ec", "1429f65c2235abaecc879f862b5502539d073f26009f710e0874314881a18381", "109b6843ee06e626292bd8092b49f4b4f06841728ca5cb96b2e1d3cc8fc84d9c", "27a13c000b43290d8166a3122bf60e74f2ef79327228c0ee4bfd61fdf77092c2"), ("09b2bdeb11db152050b12ae8bbc5e6770b48b9e86f9f8042673a6d48171f1094", "2e09e125ea08e1fdc269388827120eed595c6e49a448e37a7319c9039c2c5133", "2c44678ea032ebacd2a72353ba1130bb5d1dae01d8cb81336559b231ba4e922c", "067d4b232fd24a5c6700615c5357c22b9fce5df221841016d04c31c2fd2eed06"), ("1a6fc02b39069807d9798e2986afd7bfaf88e3aa9c3e730c994136fd6a5be591", "13197b9fe9525ed7c503b1557fec9ff8b2b05c60256c853e6f200e877cb8084f", "265b1a900a9294274d962f0a1693c81a5ee6d9c0de83e64cd7f6ee122815df37", "118173f1e4a0020ab669c058e1b55346170e30ddde6a57c29649399e18a3a8da"), ("1eb637e4cff80b0c4ad82062f07ac0325e437d65d0fc2531617eb0bd4505378b", "1cec3614142de5ccc795b59594374b2f02b3b204cac62599db259d6f51124573", "11a9f23f7e1209316ef4ee05ee1257899ad0f0ff3857a1abb2b2d739711ec357", "0a0e61369724b125be4a286d153897785b43a944b99678a2bb3d3e3e51cca709"), ("186ced90412492529c23143180f076315c33d957d060de46218caffd2dc3d2d7", "2d0e13ba3fb1b5860197a4c837647173b15ee375abb1e5e311a415a66169f59d", "20794f919d760b369a492a17464505539d7f18ed140273a964a1a4f8cf170f17", "0be24d2af76f58ea92b64f8db214a73fad66112380ac40c27992b50cc22700ec"), ("2739e9cb81c8ea90c0c86b72ea03428adb7f7f277ee0618c815bf54c8fe38a1a", "270ca9f8181ed2c2563e2a0332033ee1ece5ee8c3f6ac4d7db8d0e32b091098f", "29f194306cea4175d0f724a55ce9fb03d0e340b79ad4c304a67a8552b7fb41a0", "0902f911e0053615bd7d0b8ff6d285f1c531c5bf66c90a91ac6f15afb82d30a0"), ("08f79a5403d78c707d6a9b4e86991d0e948d9376e4e9f6e15e9fd4af91dd383d", "0fe502c7588c9dc6f0e5a7a995cbc146a3b733500a47153956015a50b5186482", "0fa55d289ef93e4e41a60e98834e5822d864eaf109ed27f0121841a725f145a9", "30026a65785ab0e33664e8be9b3098e7734dd0472aa998cce3fc2ccb0ef1d687"), ("28dafb9675b4589d1d3dbf2a9f1ad65278ff04c588857f7a9d1035708472ebfe", "0ba83180bd7b111bc1c244be08e58c98502901d2870aff8c9e621426766c7c65", "1cce109394da0151830d49d0aa6a426f01e6beab33fd087a9b41fd7c8ac678d5", "04a01e9571c96751f5614ee572bba34226d38b005107d82b2df303deb69de1b5"), ("25e4c22561a36d6972038df6b2c7dd3d71e8a262dfbafa20b2a1f3244eb7a342", "0ef87043c5e6cadafafa1d7b20ce69631ec3e2ac1a7db267fc0076eb17863ca3", "083cae6e717fbf0b1366caf5e6aae3691a224c8187fe14b0e7731ee2ae022686", "04316c83a9f6980a15c9d9143d23c77a4b58fe97f194e4e2533913be9392fe29"), ("2181518319eb497b1701b6994708f6fb403c671425edf48e5927b6d51f6e5726", "2ea86ccbfdd79478cb5c771e528c89f5b325e5e56503433dc3098df72a170600", "04a55034f436fc1e1b659099923e9127229ed1e92346f94329a35390922bd565", "2be5c5e472ad72e6cca0e4b7405da0371392c7fa4b47b7f0ec9a3c728bc70a6d"), ("0c003aff2058adc2aa15232d6b39dffb4170ff03a224f8932e8ba7bcdef85e28", "25d0b0a6409ffee3f52ac410577ce2582fc3b4324feaf8908d9e60415a650ef1", "15246a0055fdc8e75d237199f539984fb341c1f1aca46fb529b695ca884575cd", "01942e00faa11567331399e2089f7042482b8a7c29b8568542d6d8842300abb8"), ("1079fd198402c6687e2be1dcee1ac143077a10aa99a61e6d5eeea3b5c46a5b6b", "09f957639568cc64a2429055e70d0887948ad2bb81a0aebbf6cae0aeeecb0a0f", "24485f4cf43ff952b821dc3418f7dfc98cebb0cfbce0c915251b1c8b162401a6", "2e00a3a97e8b463a09435861afe76ac3ef085407dfd8085c5700427b5cbad9e1"), ("002f48f5c9b22f8a397f1c50f82b33198137d66d3cff352531b12323160d2f30", "18588827263d4803b8355b070e493ba911bccafadc15574969d4b9047b14f41d", "2a8fd7daf0126f2f3c4ff537e21095c00214468b167b0fe6b97ad8b62311f9be", "25e131759b6c090b1f800266769e3bd7b48264c30ab8dd347e69ff7da05a88ec"), ("0195eb0f496df3f22c6d97b0701ad3ad8d18b0ac71c7197c11590fee9139cf75", "025229dcaee4abea05f1f4301a825963771f5ac11d5a91be6ca644de9f68670d", "2a1e9a116b5137ed4a09e6cb2ec0f64a1dfee10e5b69f38ea7201763306da181", "0e1c5b742ae0e3740b54ffc70ea59d8e0d086be5c8e7e079027c0dc5f9971d8c"), ("17a00a070d8cc5db21ffc2d4ad92a8a6356e179603f374e7ccfa9c77f19e1b99", "2d63512c1a64aa65fe555534909a678452873d187d3bed4f7801f2d0e8e87618", "0062e2aa00c6d1a0240d6eb0955a54c99fac57a987907d1410dfeff76a0cc9df", "0b13c4e96085543e00920ce76b37a697456fba88b81db28edcdee617e651b389"), ("2a87c5b91b00e03fddedd4f710449e99377a883235c1ca4237477a0aa415b2eb", "2b43ece96870fed853cc6b115c5d597bc810ed21fe6799f5ff71ad6865b1e89f", "230f7182cd288f1248a0e159897f2d31304f7ea76d8625a5c44033eeba8f5475", "2b21e3d874d64bc14d3c44808c04d49f6b4769cd8280006b8566bfad64e71047"), ("210ad562ac5f39fc4e78f160769b4621fb50b3caad48d9c1ad58c9fa65717b94", "1d60ad40e18b5ffb0fbe28d2ada6f77edd365c3ab3503706f269d04af5c095ff", "081294cad0e5fd6f6b292ec7d206ed8f137bc225f911c79eac1409a1394ef9e6", "04d270554475cc77ae3473bb4ba59e798eed23e935b014473ccc9d45128d0d1a"), ("22ad695225e70f120c3f159cbd1acb0ed5ace99ef55fbf44a5e98251ea428095", "0c06c6bd46206a7e918629615ede8c2d530d2ddc1949bca0bb81aa018b568ec7", "1656a029a5a3f8e9ec791c215c34b3a3fb9ae2536f2bec7843a659f1d5b74f88", "180720f6dc39534069e4c1ad804094cabeb4f7ce40cc05e38306bf0ac4c0b19c"), ("125fc0d6c1b8e28de625ecc180553e8626a318d3faf8006de92f3f69a2d47475", "2d7b2d63b1e05beb1235d58d887866ec03ff4efcfd62d6d32a9c28eff6d74798", "233d425a57faf391df353409595c111b3566a80815f84f810f823cb857bef93a", "02391e8397bc0e4d72c721f4c6fa598373dff3bee0cfa5af7291847354694644"), ("17aedc746b3ec15ed4c62aa189e28a3e504ce96dbddf8206db86646d4f7211e6", "234235ef102b66e159b088efecbc8955c208b9745912407e4ed793e2657b900d", "0d2eb5b2cebd11f44e2b7f1bc5e2b43cedc6e3168f807ccf219ec11554127ee8", "11a209816335a81656a3226596b01a2c7e2dfa63af94cb991103621541711309"), ("034e1f84584757f5dbc0c902d9609e403e4e0b5fc3a4cac38485b032f8488e2d", "09e5e379f9b62d3c8399166eec2a8463af8ee951dcb8478d16ac37439b7e8f4b", "11241c7c120dbc00ab90af0258ea7455ddae0747ca963927e7b152b35ea2e1ed", "12d821592e764192c478490caac9754e112dac05cfb8701198d19c98adb2f2c1"), ("207b42e175ae0423828fe7b111b3cd3db2e4fbb4673bf2a22ff06cdeb9781e82", "031596440f476338e37b5064b4b1e6bd1f800a750aa789c3c3945207d07d6622", "10e61a2799367d59cdfb8f56b0d7e4b390a581cfcad9a4ad6356baa1b44603c9", "111a5a897b6b6d89af90a5e4411de855d8584a8facfb005e8c73494638d7b01d"), ("1dbc8492756700554574e4adc748e9dde37dc93636fdcc669368f3b08c2025c8", "0142a042c07d1ed70e5e7180ecb921a8c57954c4e8f89b542787c541ff8044dc", "0caf3ddcf4abc2dc35217b61c335aff6468fd8c2fd882a5e08136c521699f7ee", "12b781e3c1d594a553037c85236e1cc9462175f66d6968db6b78dafd7a65d929"), ("209d5b6b2d4a484756359507acde95541a8fd2f4958995a5993ea8551d177575", "26b86fc3dfb236da5ec10ad79a51195e1d6904efd342bcecbcb21fc6a75aaaa2", "16f5ed502e9c967fcf6c99070677552074e1c5e51f3cbcddf893e6141b51a79b", "113bcbf8ab7abde31f114aa73da63790a0427b60bf524910206658db11c130f2"), ("032b6ac073a781462b0a9494e79f6bcf6f56b341fe6a5e1e9510b796da1942e7", "1213e15cdd04137b7adc978cd772299e8aec109055a65e28f1daaf526a0ee5be", "1a47879d175199784fb4598401d966210296080088921ca74e3b76cc9079c600", "1b31e98bca1ce0431caa2c0fc2914f3e34b5de8dbb4d5ed2f1b4a9bc77ed387d"), ("2069c1a3d26d90f44b72457a1fb5b8ab268193f189c52899213ce2b52072bee4", "201d790953e16ecd75cda8b304969ff3cc12d716456095b144b471ad821f6d16", "20b680e12b692fca22bf2eb8149fff253129d59a89d59385f8995e4ceea0933f", "23d32f19cab6346ccf60d71d552cc30870db29297a4f81ce65895330b4fb4eb5"), ("04d4cc9fbbec72ad66063c57b2344d5ffc5817b898edd49803521ea564677d83", "118761d19a934b252aaead0367ccde8a7cd45858926be36328cd4bb316be3a29", "1764d30da4663b7cc0c4428848a2c74b529cc2a5f688674c1090ce995c17ffd1", "104617e66b6e1b00166e35c285c2aac03c35aee5bcb75b0f059f5f48fb5b34aa"), ("09a504d1767639709c31a90394d558fed081259cc27153fad5a9d60eca750a28", "017ca40da0709592c486bd7fb113fded4131a01247e416d17fc52167ea20159d", "2c5fca5a1c5e0a7fce7d59a5900a1900c18fc943378e68ab32ef405cd9f1e0c1", "059b39a7cf44cbf65dcaad035761ffaa143ee26b0301a308d5518a661065d782"), ("28c378da8743f10820acd518702b0d605ad222173afa990104024ac8db352f1e", "2de0c314ed9fe7cf1dbc76342caaa6f9b0a02627928b92d72dd59a070e3b4b5e", "1ab89660f28429bce905e3fe0fe3700cec5ba6cfb4e2ffba4a86a9e32667cd2d", "1d4c54042f24fe75f601046a6ecb66911be7437ab1aebb758bc23c173fc1bd4f"), ("2f3a2593fc112e73e0f11ff9a5157d252dd2b079359d727d9fc067092556ccb5", "082fadad11877f497ec2fe3bf5d72fc66814b71b734e7ee8821513d8f20a6e47", "1c07702d990862cc3ae0ee192124c609ba518455c48072d7f6f72c3a83df034d", "0bb814b80bdfa04c31f5d75c8c49077dd669955793159656783434d6cd27168b"), ("300275251cc4e5041240c8c9178ef280f0dac53ca719fe0df60552964e769884", "08774ad8cbea8c29a62387ef8622c7c84327a4175a79b3a27328118aa4e6419f", "0cbf3f280a47f2559c076eb988bf198c94a11f21fb6beaca1b3c3c82017243f8", "2323d90ed65a1996fb7a8367e3ce4c08ef086be88060f5e40cec6d3a39d6f783"), ("0135777c4cfc972060912e69a405719f4d8c8422dffea48c0ff7215385a2154d", "27c5111c78868d8c806236abcef58bc7d4635642854a8331fb4c469a871276b6", "2fb92d58da7db720b4cd394740ca4aaacbd84cf95cf60e65e8630cb572c0b6ae", "1652ecf9bdca82e78d5edd879ab6c0a3dc5516238d75014b470654dc74fa5790"), ("056eb7c443c3b546b0c847c5a8cb87bbc14fae274783fb6ffe8c2cdbfb9bc662", "3017a9cbc1b0c2c4f6cfa583bc48861fd8fbd199639b2400e8e838d347206311", "02dd7f200e2e3ed9b89b06fd9947250c79a9a2723566a1f163b9b4d5da8818ca", "2ab7dfd26a41669390640c6383b7317f2bd0b5e796b2f150a508876ee1925af4"), ("0ad25f5838c39e9b449f66a88c63d3ad49f37554a9594dc41a6370a4a29e1686", "1e6422ecf54493c68807e37fd1a63cd6e2a63d904d39887cd388fb9da734436d", "11c299abb4a4f2e5221b4e1ac93afc03e99a23cda32a0accbc9cd6ae325d61fa", "08d1b22b774e73baf2d234a0299e7b46742620d6914a40ab7ef7aa6f7f0d2621"), ("1b4db8377dc4bd4a98a81a09610307f8bfa794cb2a762dfc430da9e360c9f794", "0c9e1ede1660dbb75867195ea38e3acee9044cd47da69e8a2a9a53cbb22bc85c", "276b98eb6ce9a9580fb538edf2aefc47c5c466633e7162b793611062dc576853", "0f5e8c84fa4774ee121c53057625bd93cb0b4bc050a400a433e2dfbd3015dd0c"), ("291280d995bcaa9f68d4ab6798006adc5c1b499fadc0377c41458b4ddbf2b0d4", "1f7aa4b668c1fa6984eded5391bcc725abb17a6d6c305876abc2b8985d6c3100", "2a18dc1ac9d3893443d5d876634bfdf0c3741f1f4368ffda543e628d36e4bf92", "27727292495ceb33c95e62f1f8b58870d315c937b97f85462a4fb81de8c088e5"), ("2aa4f0f110ce77d302a87365361550baa1fe8acffee11f98521d6a92bd8b1e13", "1044d89cbf19b893cbcda2e16cc3fd1969d3efbc844e20714e39b898f3196881", "189e32c55c4bd55909357413e9d8bbe08f15fd16a642f470c5f015e89e850c97", "0760340417595e3d0b18ee8af74842cd65ce589115e648506a9818d2e6731fb6"), ("2a402fcd213b4c0a34e876c4b741cac58e3b39bfbed3173e38a1e0045e4bb6c6", "23226aeff2118331ef523efcb829a5efa3d32cb078bbcb17b9de3e7b7312785a", "2bd9dcabf3cb22cc31efd7e1dc3ee174e973eb9df343dd47b79350baf19e3ccd", "0170271ab7a1b7b36eb4ba96182af44d2873660d8150e5d5549db888234e61b9"), ("1963350defe42aa29cab80691eaba2298acd4164ea74e8dafff596ee08c17aab", "1904eb52513219d7e5b293ec7ee48dac86d7edb8081b07e81f20571021d55fe7", "08b25d0cca3062fd0a87a13778d0332217f66e1a99731a38aa2ccf34c30bf392", "094c06a33ae2ad0fa943d3f27a89f82fb5d6e1b6b11dab5497130462c79c6214"), ("2e87a55c97893d99db501f084b602ed7f73dd82fd2dbbca8fe1737136e7fbc0d", "19d66037653bc5edbd4ab06f72973f5ffdef1a696722997ecadb06c035f1a84e", "077b0d3944597f915c159cd23a8603b6edf03943c8378d7a5761dca5326c9375", "0a85bea9d5d777ead8bd64aa9098f264b1dabc5a7df08f422354bbfdc43764a7"), ("21675bc93ddf87a372157b9b03ed3e6f0d8d072889494bdc716fc1377a05408d", "0eb54393c4413825e2170d4dd9490213cbac718913df7ae8447047ccf1d7786b", "0ce498681b88aed87b4dfb5837a7e5aa682fbc09c9b03bd62a71319572e2898f", "0de467a789a6a80a74c93e0afc60caad3df4d94e8cd7e3824a03e099a00c6a62"), ("1b43d73d2234a08d6d0a69e538f456557a1715b4abbb08177571f6ebcd2d76cf", "160c85eb707c10a01cdbe0caba60af332f8208a561c2fa93a98b724f50173499", "2a12dc19cf5f241c67b833a31ab928cae87c6f5989952407ba15f303c2727d56", "2a87f9824d9201fc3af08c5594eca9134fad303cb2cb5ae89cbdb33620bba0bb"), ("1e720d54855c8a4b87768efa22ff793ce28daf86b4f3e1bd4389ccbffb1c52c7", "2936b8979085854e81353f39fee487479022b925c23f9bd7b700bde30af94b80", "091cbde53006bb0bce0a833c9bd14ffd31d4b81c7b488f2222970ab4df6ac2da", "1047019b719ef2300c44691c630aad1d1b1cdd253b5be13945a442366873f341"), ("2090db78fed44d0bdbee25f0ffb96b581fa8ef814da1b8ca377397938961bd33", "1e419e417fc0be7d6f530d04c3683d6c87aef9e90b5b0ac0b25f05979ce854bc", "11fc0296cddaed33c91dcb1601e214a3f70a9f8a3667108b6836ff45f214616f", "24c3c3aad9ba25941a6d8d5c964e9a310e6f5edb10eee179329d9333a0553e2f"), ("23f0e41011ebc9af726e0d5b6ff0cfd6d5f334a73a5f18e06548fd269aadd9ed", "039207568928d567dff70b2b64f4480c56e9c102a3cc69c9fa670c8b575d26b1", "2e73acc2b29b0d6a32e616911bdb3469ebaae91fc44e136c79dca0342c8aafbd", "0b94af1435e25df1a70495b6ca00d273f250520318e0ffc33afc1df6ae58d097"), ("2818e48e46e5f763231dfd048a2bf8e725d5099be48910b880efff4e6dbb20cb", "2b7a8e2eec77bffe5cc6a9c35c7aee5567c29ac14f12a255110c608f09baef93", "1bc8304c3e485a06a09e4b5637e8a8d61cd3cef69af7b63e327aff2aeb90c4b9", "0482b2df9779c8c86530f10ad73d1208a67ef8c61ff935f55441f89a326a0e2f"), ("0b73990b6e4cd7d6b96b413565a6dd720e406ca4f70d5e35abce89323dd93512", "0958e7fb18c246542cd09a5cd468e0b4fdfaf37b95b3052532b636c7bc01b16a", "1468d92dc6bd68b0453452395d602c1bed4ecb4d76f5675725407953b285be81", "244c38f69a678fb69d29fe5502d3f230deda0289494e856e42eb20cd05198f16"), ("14d35f13c984e9453977ddc5ada39e2f33ff0160bd0710e629a40336539e8847", "167e16b8c3848ae9517e0805ee51d830e9b029ad44be8342bbcbc8863faff1f4", "2154caf6c2b7a4d44929ed5c17e66cae3bc9abec1c90218fc5d564dc4cc22091", "189f2e99839a71559a3e935269ad40a2f4aedd6a98f19f00f5b4b6543f844a3c"), ("28f4c6c261a6e34d18d5b59eb1007af5e29b2a52c55f166c635aad3ba9d83225", "2427009804c9df6e099657b1f82e12ccb579af77ac37825eb830c8c9a207f237", "1b7608031da633ae19b0379bd6a7515944621accc76b8d42fcbc1e022e13c61d", "2fa9286432acc3ca372ade736a2ce97632ef2c68e0a0cedbd4ed0155c8d52cd7"), ("0c2b2d04d030f9f295d93b3542c5a95289f995b6daad666d0e0f34da264e4203", "207a02e839cbacae8f55812a1fff1dba326cbee35d810cc3ea2d1d7103e611b6", "22b9616bf62fd8d189bfb8fefb09ac9eeedb9b4024b81356acec46f3fc533802", "236780a04b53d9e13c08dd4b059c80101bdf05fea1290a5c11b304f088a2c4dd"), ("1dd4356c3778cc41fd3c0a1a6608da54fbb3f019280fdf8c667791fa29d57b6f", "107318e7b9cb380b68b2be4671bc25dfd472bf112c5e7e03012fd2f87f6af99b", "104384a7dd998d0c4e9b749d4cabc48eb3b7831a32c6f3475c7bf95554a518da", "0551e6d91cc0f38c782cab2d130f95b906c6c4ac9534fd2cae1737b70759f984"), ("229637bec4a33c0e1d7605121cb89cfbd4886e6c27e7b1c211fc3cc3fcdb9346", "0576884ae3e5b35819bdf42749a6c0d0b97c06ef2a2d9965200aae04b11f50c9", "08df3cb1ea0f2d4a2dab2f4755c39a2b0adb0462df427f960718d5fe6fae9f2e", "29455192cadc172262687f53287200b8f7fbbc654c7977411cde2613da33e312"), ("21b85dcba5c3fd34033029a176a34e0c7aad2e903e4e2c6431247d223f31a853", "0b7d851675ceacb10208e0a70d0e4c9c555466b694977d8fc3966a4486860b33", "1b67ff54cd01deb5b36e42b6759e6cc875f53982f70bbcea74a79981a1ad22cb", "1bbe3b35aead79b32fac68e9dde2fba6c819e01ec1d79ef4dc8caf2b2fe4ff14"), ("03904d8ea0749b168acf769b8e086005ddb67f661482b316c3f869356b992474", "036ed7722b7f9d8f8270c7e93d7d81f7a5671e27870110a03997fed198135f7f", "13429d4a9d29a7c8f41ba63b934855c937a7698ae3c41dfb032cbad60a27621a", "24a1653b9d972cbf9f441db60ec26db64af6ac6eeb533d1540d5cee1e3e8aa56"), ("04873f25500ba345ac070dfc6927523ac9b8fb093d73f0124cf8db2e185df166", "2a7c31fe0d7c2667e0c4fce8a7847985fa3de9e999060fce489ed5b047b35644", "1f758d03cd24ce720c2ca3693414d150c7f8adefb081d7af3f821916518bb8c6", "2313f16224c7f76d9d883c7cbd10a60651d7d248263983651dc45da463385345"), ("1db9ab2f051221e7aab721e00a3fd09fff2499fc62e22e914cc901d5a1f481f9", "2367964b08bb59a6327a40963f50884ba5b6619d016a94bf835674d918b10f71", "1a180169e925c4218d05dd842f3404a702353abd06e2cdc6e8f954ef9b66e96f", "2e629658f15576bf58c4bd0731d398dff99f2e0fa8b317f84f4d1712a4ef4b8c"), ("28f9c0fda1e2c6f982948a22b7222f093b7930114deb7b1fd88b8c8a54fa21a4", "0aba4b44bf8cc9b811495f6e6ae6c33e0c91b7424b5d64a38604747896d7c714", "15d755b24085fcc279c246b59de32c3f6b89755db0e6281e08dee3cc30828b54", "2106286824fe19b9d8d8d580eed51423a1e08a089adcbde6e502e3304f9d6d89"), ("18aee69a02197d06b654b2821a5995b0cb09b4ae51aa47d0c6ed39936f7b6923", "0f3d6221bcf7e2a0050a96726c6ed3c7243349d336535da994aac47cc564dfae", "2cbf1e1855299f4f423983e400d3d47021c17aa16e5e4c42652dec1bee52eea3", "018da366d49a5d146ecfbc9eef10c33c6b510f4ff198e80f78848aff6f1d585a"), ("29ffbafe3287e750095660fd4b73b318d3090fc1861db9d9409747a726fa50a4", "1b88bc678c15be8189eb111907f45c3c79156a948460c547988e95571db08f4a", "08dd9d267bad3de0fc55135d5f5966992957143e377c2c1c241ad3414e98e42b", "27a1a84b607f41fe57d363864b49153fb8640d6fb505bb57c60f42bacc222b18"), ("0768c87782a6e2fdf8c9e6005f9d96ce60524b9af9d539873b6dc575cf9c381a", "16e68795af463221dde4a93b0cb265df0b63c9718c36ddcfb88e4a0d5d3c0ceb", "129a5c47347c7d8be4eb3a59cc28c072a1c8d6f7752ea1300c0ab0e96c3b5a55", "09d875b81ec5d231219574155c21326ed59d35d3de30275880c6ea2260aa3d5b"), ("268880c145324e213a9c97f3cc22f86cb89fb5696bf423f34bb8a0c115a46d93", "2eaf930e55be6086f0e26a66e3b160770b96ef84218e95b3e59c8f5ad7128889", "1c1388b60475cbbbc0dec4b99004fe191ab411f68dec44a540a7743d5fec09c1", "12456db4aea0fbc690965c54784e48b8ae61cbaf20605de74aa6f9d0ea6ebdd4"), ("050e1575ac4f82a082e1296f453fe0a4c5c37a533e7ae71b06c9e8c2cb579462", "201902ce57f6d8569578631a67adb9723679426da0adb3c053b04d6219fd5d7b", "15223261ae7b7efa3e935a8caabefd0d8d272b0a450c891f0532d8752a4f2104", "048fcbff63b70475fbf31e825695e64c1999f67eacc1286769f0e690b9294f18"), ("000829e9b09fcae64f4123b493566d6737590f49e5a0d6da47c0711738b2bd42", "10ac70b87220a1bb7fac7c0bac5e100bf7cca5492b73e4c6b3248272ecd71c59", "01c31ade63ccce8e9ad585e5a15db8b40c15c811921acb769f2d6ee7de1b137c", "07b390689b2c364c116ff4a5857036cbcf9653cd2415bbfef967539085fe3a01"), ("078f9d03855752348ac6ac396809cf861823abd8d9c8fc9124b7eba43489998c", "20a70f1474fe0f4269a6dffb10170506c174e21170556d599eb19750431dab1c", "2f63315f99ce789f38505d586cf8c684c69f21db41d88944ec9d7de87bad7223", "07ae196801a5ddd02b07c841240828df44d69b4441a1af265a613a3159c2eb7c"), ("2e49ade77fed9cc002c4e7c9ee370b811fd0d0884c5cde5d653b2eed2de41736", "02b03da5e5d4ddba8f6522ef5483faa88fc4a6cbc62b329f42176bc7ee9cb084", "2298f67c97b203864bed3158f2d8e9e0a9c324f1c23dc389e3dd3a0160d4f952", "02ba2a83c3772895e846350d83e3273456a1c0dc0c05a6ea48f222776ab815bb"), ("089229b48d962bec2da07e95229371aa584ae6b6a8d2cecbdc50ce54a4258ad3", "148b3be74ae9b00cbd0bfb2264ff3b04ec38f6eb9dcfb4f2a961c3ae871e44cd", "2d3a4854ad81c383e5530a7c7832e0082bccf680177b0fb7889ec1176e00feb7", "06068eb9e425c2c97f7a7a78e0b23bf916d213a83697e52b5444c760433cf121"), ("1422fe7828bc64fdc8db394bdb4f8b29ab559a1230f0241b027acc7961786750", "0b1596b0bfef42317e1d608a042584dd3485cb1bf1f7bafca8d27fd73faca256", "022952f881462ab6775b07d067b8eb94e987e840ce1083bd660f44776c9a2ab2", "2b8eaa5583af4ca0eafe7c5cae270a55a4258d7f1b4754a82cd3c1364a726bab"), ("2b9659ce8511b562db662baf9b995ea5a142f2504ed4f5daf757e55d173592b6", "0d4571229789e5414690543875513fe3db21c5b5fc15371633ac145243a39458", "2ec770378d1258793052f2574084eb26798d0edfc9b93aab0f8e84364fb1d8ed", "065755f4b96de83d7395eec3db9b20ed7b5ad3895e017df024e0b2b437dc921e"), ("04823416c116b696a05ee4b1f9d75a182fa44cfc5656e0bae3df6a48df0c7078", "21ebf9c228acf27f2654984d6e60bd01de7585e3ece26000efd4ec1a3f9ad2a2", "2328847f2b6dd7e1b5d6b6c957cef10a8d158391df3f6b4daf2c777c28217b7a", "0ebb588c34b028dfa3ecfb0a81ee2cd41b956dbdc4901cc07643788b8ad4b2ed"), ("06bda44f061c8b577731e1d744aa756ced89a825535fb1e1c72e1129e126789f", "2c8da79ac65b7602bb22c4c47a3ddaadc905a8c7b5c20c314c5665ccdbb8e2cb", "0df980e847f6e2eba450c5da9c42e409fa24d421f665f6f267a50455989cac91", "0c59db4143e744f65b664f4dec23b53f381b5463845fbbaf49580f379f993ad5"), ("1c7bed41c0084c8bec5c09ab581d8d8613f20943e56cba33c57f5f0c31670782", "154fbe3bf2e8fc5538fc0ee83b01f1484d04b1bb2f61451489040f284e6c9069", "0f5aa2a9a3f930de629e3c8eb22717463e740dd30bc06da952666dc06b1de0f9", "2bcbf052438c1eb55674e124ba3c27a5b6dc0d5202a4fd478acd28d72becac2d"), ("26287abb1ce857d72ffede26ff0104c09102b58dac0d969ce5c207f6e991cb86", "0c42ca974759b52efad8aa273e6a4f212c7941c87401fddc1dd3b3b316df4719", "0c14a54be3fce2c26ecd52ca67d2a5341d13a1df943e242411d47b04bb9d422d", "249dbd95a94a338def5f628408fe5209f415b28031524724364d0c244346e7d1"), ("2359b280d427807c51419ff962665b22534b31e53365a1530e4feea455ec897a", "04ac06d1cfe3f17da0ebb7c9db2a24290422cfe9e85877b01b0a4b04c3b084cc", "08cae76f16f3c11a3305ae42ce0a1fb02745a75ef34bbc24be59483300058fca", "0f37c14b90d21e5d9336b6d607e1f99d333e4ced1a90fdb4655d988119474608"), ("1ce6f62e0d434ecd4e216078c68c3180c74b7b1b46687de7c74d014ee3891016", "0f88cb6847bf74d7eb3f85218ff73e97c48597639a29938cbc6ddcea45ea25dc", "26e2b515311330c9929ee8763f1a21a1df564646df880f43c514b633f7cb3a8e", "2198fbfe4c57c9cff88d9433a18f292b18d0d55e7d63e1ce3336626ed1feadd8"), ("116acdc2b8e621f456010ca549c25c32ae6d883a7e9a33da110b7b3d160bd8e7", "2b9a37eb170eb23285ae9c17a2d12123db78eaf5f5c1c8b141e71ec821109521", "0f9c4019ac8edbdd2b5ca86b742658995b060bdcfbce14a5d93aa16e484032f8", "08c4e854aeabf4839065d6676ca1b4a4f6b97ff989afb3b4b5c1fb3aa04f3530"), ("10cae131c85598b4cacd5cfa13587428c9f4083b6ac249bf81b51286b83a6f1d", "0ab1f695314c012af485a89de2fc803aba23e1bcb045f62f54e8f82be9c407bf", "18146ba18eb2f85e9613e0aabce7142dba50adfd9f61c65c476d74a6add454e9", "14dd663f399bd7c7ee8e88560739152d36920eaea3eb0ba95493dfb51bd30618"), ("0b2500462b5518158593878c8ade731defdb59b96cab6bb5ee84f8ef2ebb654e", "0bc8b1d45c34eb1c2251e0152a2c7bf63e9734d2d3dc07569cef1717d9d71f0d", "043d394cf0f76a5d9418ccbe2a91df580896dfc14b2b8ab3c8e51a33f94e43e7", "11fa27e6f15f97654cba0223819fc29f4e4e9b154ffcd09e4ed2e5280d06e174"), ("1c5a76b8ffea7d0cc48b84df149cfbe742f193531768f3f45ad00261c55a93bd", "2321cc929e579836c50425e2b3e335e659c8a7bb1d3d6dceab32ad6348e6aeda", "2d74dfce8cacbdd9aefc904fe9d12706323cc1944b85ee275f1fbab2a1afca83", "1f699f9e29ea9be038157f8b818bad502d5ec100fb829719a2ab1893693fe2ed"), ("1c2384e48da3a1081dc9adcd0ae05e894ddb9393cd667e32f6587cdec2a2b348", "1c35e4dcafa37bdbcc8f3bab090542f1d8d990752adc546eec26f7f9f6a1b326", "06041078e0425c999c858e0cd4ad3eb86afcc2ee90609917e5a3ab23e68fed57", "1f2bd26fbb47129e5e94859612d9857f8d6ff006a4b444bc1a19cbcd29ef83d4"), ("20bbba94bdf0423d3de7c2097b75cfa05ffc03b12dc9fda2b76bd28a9a3f0c74", "0e1a8739762c8f4187db1cd0d9a158b535336586442eb41a6c5feb05c85d17a6", "09449e6f2effdb1d16716e4e08078bd3067e8359fc6bdd546e9e118741211fdb", "0c251f7aed1011f4da4da4a4d3261cb38f00429e89e36202b5a9495985434097"), ("174f286527192162152a728b55fd9cc11e668ea78212897fd3ec7604894ec053", "1ad3643e103dde46b8f038639cd6e059efa29ad707632b6355e2fef887db836c", "22d3fe0ac18dea9f9f318c8a77bfc7b96b201151f8cf83d2238c871f8db6e1ee", "1220eb81bb3a7f16f7701d1660ffaa4c60b67528f388959b934e105c521345c1"), ("2666bc4062d64850ccbc8dac2552a98f926db14e7fd2fc348611f5c30f5beb17", "118e0d111edf4cf0e24be5aa25bb550e327f782ec5a15cff060d5321939d7119", "26372a02cd4bdf76af15f030c5e6c767e46971a9aa89a649ebf91191bb753e1f", "2bd857e12829407d4c728671e083ad0b552785299147b9b852d95cfb3431d45c"), ("2842734e5542263b341ef45422a7c5c628366df6681c6af32e142c69296b84e1", "06ff637a815f8f62c9a4077ac98112231ddd0a23c7a63b2eaf0b8e72eecddcce", "0f37d9b354237f0798b7bb997312ad16d192d836b4a33df01b17d581e2a1fc30", "2acc9b3a43d2d5b8b572bf07476dc52bae61a7515308a905c25f670f2fba2c8e"), ("1acfae034fa8d7f3f117af9124eec4abd4d71dd32f9041275c9bc744c2b2bd42", "02b04b88370ac534a0d267d2e96fbb6d8ed7f33d7d9c60974e0c9ce12365fcdb", "0f37d33dfb68604e965682ce387fe6d62e655428f7cec5e7209a6670b050873c", "0a544938fc1d7640bd6e3e55b7fa4b115081b7c8a91b8c227a06c417a395daad"), ("1eafa8c5830e2e2eae6b76ea526648b7938399d49bf032c7c29cfcb3448ae243", "0362fb53d47c0ec559fb07ea4a688241cb5e609c3e2d7ed089c3b6db27179930", "1216cc740d44c60d14934696b690f93d8ba5e23260debdb592dca4d27b7c7ca1", "1eb4bc52f907a38516bb7f15e22604a49649d4dfb6bcb8a501a3cf6e59acde07"), ("1b79c69aa1f4bd90a204ed9d4344d848eaf2102ca224a10334e323f31d6101e2", "0bef7abfc9aa466542e55942bf03cc9d706e1523d13b2faea19743608b36a238", "242d892ee950b36dc8fa0a982f4a0099818e3c9f3c33fe9ad6bd0261b980559f", "05b348d738487e91a59ad1e06e633150c0852a1593c522bf0db21ce200153420"), ("1f15268315d1444af19ea824330307bd05a5f5b5284951732aa18f0bfd149ac3", "2b8e3b150bde31c0327eeda29b03dbbd0aaf7b55509fa81c052d1ca124542ab8", "247a42f7d32b83079b09799495920c051a883c29bf71d5e2d4bf8869731e7eb4", "1a640e40fa1cd19f305a9ea42b913f8177cccafaa3bf9ae465a29a4577fe98b5"), ("01c2637ad9ebb6e75b4da83bb0178c1a5d444fc1599a6c3178af961ead30c424", "06374099f3476bcfe46c28b1395b108a6a44f5a6b0475dd159714169b406a9a4", "27c6ad711d878d48e23d42ce6ac672b69ed75bd09ecc4b4965817f3b888e46c3", "0f1242810096cf4e28daf9b0fdf25879d202c2c13250d59deb6985ec046ffd4f"), ("0ef4a766e3f07a46cabc8f367dcc7dd825cd0ffa9f003868692cd92fd4b5c5bf", "08da2541092cd4f89fade07c69ee78626ab1370d3990c3a1cc5a56ccb8ecfa8a", "079b94d519372d5edf0e5e188536158c04c34bb914950ee5e98fa9171260a6e2", "02d1dfcea2daf5f03d3bcfd1927b83b9198cd38ab46019dd6ecf527e5015ac00"), ("13244df2e4adc2ef60bb8fbdd417e479fc6bf2c04a35d4210f0bfa5481e123cc", "16f96ace52a3649da8940d884f787675d22785903719fee156f83712a4e7c380", "0d7de56cf49dd7be85c7879d90697d61c2dcc37841f2b5c49912c0f1e6b60e32", "1099b3acff089a5449e4008f1be144014ff5c693cc3eb86297b550e4e8c2a41d"), ("0c2b2a7e122bcc0ee2230cdb49f6e742ca9dc1032e5b548a6418a52299a9e6a9", "1c29d53d8921c5065a1c38ce22d1265d8b0a6b0d8fc0b12d997df14f13363cef", "036d3369c70b3d822fddb36cd4b7bec4f7f7d73a17fcfe6da00108d9d765b1cb", "10375c00844275c1380dfb0fe87aa2cfdf548d8eba798f543596c36959ae7a3b"), ("2cca2c0e2cef4c31a5ee3e84662fba6546f9e579f024b834fc8049a00de19b43", "25b6651250dacf07f2d97baa2d40445949fb9aca32ed3019c2baf7f5c6ed3016", "180931d840658d537c1de9d11f01d57b2faca16f45df8e253e0af2f0cf6d9729", "0fcff2c850d02d817c9294bce3a7b2b3ab0e7acab35c451119f8b2f1e7603036"), ("2274608168bbc137a0474709068f6209419943ea3d9d43f922c92a64ac6aed03", "1351442d0e9da9bcee0426744194c3fa23d84551324a64ab20f5e7ae6d434772", "2c6060d2c98d0661b4a96a73f9b96f700b7df7bbe71431c589643402b7367b9a", "023454aacaa9c3b6edc72964fc2416c1ed0be1853a8aa8cbcb728ddf57d253e5"), ("0dbc08bf950cfe138b7577f2e4661dd148a81d73f79178f6bf22b384628123fd", "24caff50bcbed6e93f81031b7abb0b5017d7a81b7c080b0c804a0967e5edfe44", "1c5d831938dbb5cd58e5bac05f96bc82f891f7aabe3b78f25b17e892b39f5ae1", "2909768248037474f2b8ce6650836f69240056d074e58c9f555ad850b589c9a9"), ("1fb6aa7bc50a63cf8e5b092e6d8edd67ef71b19a4dbf0ee6f3c864521d01650c", "025bb81e0cd16f61f3b8df60579e4a29f4dbb9524a022ea3421127ade5590cd1", "27b65f1c83047d093a5120df0cb5aa2877b4d402e077105905ac4e71aef7ee2f", "00f84d98a14c1f237c1b11866688e71e4b94271366b5e42043a2f9b8770b558f"), ("06142abb9bc75d31386bdc5b067eb9dd99f70ddbe0a32db58461ea11bc9c9aff", "24468af4177cb4ab40fcf7662666236f578eed27116f9eb41131bce14c9217b1", "01be38bd82f320f608f40e6756b382f07f96add371b03badae76b5738740c840", "19cc500c05dbc7b37867de08f7a027ffaeebb55f5c8296242c0e01d43ee370a9"), ("0ca112650fbd459dc030bfdcd5ba887e0556a5e2f159a6b649e194aaead9cb65", "2f64a04a040b9054575b6437b44788044d583e6ba4a90989a532679f328ae0eb", "1293494878cda279635a4da001227719516312b16a0ae54b83d2ce3d5b32f8e6", "10b025677a487ecbc013de2b6bd739adea6a274019fb437abd911f1f1489108e"), ("19fac3357988038b217930e36e54989edd7948ff27b1a09c646473710f2a304a", "1b22639f63c9bb14965473efe5b959f28dd340d4d13f65b998e54af41d1c58ba", "139c52018c5cda33abbfc24ffd3b35f6b1bca4cb6045b9c9fa6796025559a816", "1a607fa32bdba3da5d0d4a21cc71980500bc891125546c97bd7ca47047d90c99"), ("0cd75086cda535cc117c3fc20767474bd6c323f9ff10c52a46871ee205e86e95", "28c411b2cd00706430515a394f92ebd280d85a383692f059c3f0754c6168f16a", "2103d58a6c25fa9a4d0bd93c748fcfe56a918a56a51ebf8b519c5e269273f5b6", "06f953378d817ceec75178e306ccc04547cbb65354504c4e9ee209c294be2010"), ("120269966ff0920e4e97e5f5c0b9c884a95f4ff5c56f4147a75a9bb5ca11239c", "22061640c5567ff464e924e4f64a03e5bd5ed028580f74ac0e72b2da6418052f", "0a9b8a86e387377f5a0ba0888fc014f21bab394f857aa174939e6cf62b7dd9c2", "07cc4ef56d6ca417f117efeef1991ec6a4282bf4670e5279dfa32876c090caf8"), ("1f93dfa5b97c6cf86f580d39327f17a00d1eee014f76619419270599987448cc", "1e4000262f968e24585edec0f4d17a7067501987d36f63dde9bc931969317189", "28b067698637f78b78df8a967353c992343ac38def6deb1dbb71df6544a3c515", "12a2f324ee6d9489e73eb18e562c98eaf5a1bcf6840c38160abc4e4bfe4be767"), ("2818291a1f7ab60e42b1a9d405c4eb256be6838048ea243855e341deb7a8b0fb", "10f01fed218c69ad48c53e9c1f330be65d5346b792ca305c19f615eae0391973", "1fcbd515a1b028d6a022dfb5bd63f66037bf97c7658264d199b7ba72d98d2132", "1d045e0245b3a19047ab2c88a370edc35a107ac5579a63348c4fae918c17b9e9"), ("1769706f195107ecaef0e96e5a19e917bbadd58b2f982158295f85ba0f77a5fc", "019527ad598098607456eea450ca99bdc64c8eb5706f86e54a333a6242ce7640", "2747e096a8b2c8e92c35ea512cc1ede5bded78c6f3ff3df2a9fa3150c82bd618", "1a16e19ff06d76a347dde7c9facb1be133b3a4beafc81ccd7b0559b0177fb100"), ("2c7caeb1783b6c1ee5cf3109021fe60210d861b37ad72622e5e2809002d637a0", "2ba3bd2b75ff549805bd760f0052b161dbb3032b0915e2116717d6a54aa093ee", "1257c3a47951eb3b3870139fcd73329dc28725916b23fd6a9f1ac334417b0235", "1741955cfebbb82620f10daddc23ba3d152b964ed8445f46579ba7a4b7375b51"), ("2b6fcb5d799a8e74372d7d40ce0366141c5f873be19efc16335f49a1821ce451", "2454e4b70fa5b8adf28036856c3fad778a826bfe829de76347d8cb4a2d2a788b", "294636c9dcdef6210b06e2053ab3732298ac936f9787197ccc74d4d6578f707c", "0815d82523a5abc53ee5b67d520d64f18775def24c75184d84dfed7c351716bb"), ("01fc50d9a324e92c17dfecfa2a8317971915366b07717b3a118663c56b1c5819", "16df92405d9ed888d4eaa105e5a339536edc06667036f267cbf994c6a2d10dc1", "20fa327fbf3f581f0ef9f3cd926378d468d9b3e37c387985ba583541462840f2", "1abbcf1c3d71446bf0578423a16ea3201167845fb67535f573040e1b6155e93e"), ("16059a880e89e8fc135ff1d98ebe094f98586409326d3a68132230295223bfed", "0f5ed805d38e80788f4f7227537a4b37181f61ba5c42336582a40dd41fc443ea", "298dae5dea4842f3287e92e29e920861e08aebe8418a6a77cfaac191b8d4074e", "20ce5803ca03bb1284658280defa18b70c39ffe427cffcc9225425aea4f3ca33"), ("271b0ef9646e7adaec4d5e7ccdef857f0dea0af920e4155e44f5c3e49b2c3ffc", "066913c7144fcc6ae5f7d349464aa600104563820f085c03fc289bd9b084d1e1", "254ce754df08f4e03cc1c3ac406fdb527508ffd14358f6f1cb947f7b3ac981fe", "246a75e8d7dfc050c1eeb3c4aaa32c764caf4c0dbbc422377206b4dca2791a61"), ("25df51aefd6baa4301790818bff67960e6834fcfecd47b2f13f4bc8d35272fe9", "26109c318f1ed933df1e9d90d87cc6eb3b68abba79c3890c4aed607627e49667", "1e3dcb568fbe734cf61f7b0eea329b674ef54fc4f26ddaad77e7ea4e6aaba7af", "03041e3c40148826986bdb8b51894b6de19a84e6983bb6f3b6ca13f0a0ea07fb"), ("23d8ebfcff26f0b82f0213cbd11ab2e105825a02c8cc83961f1409b2b7a14862", "057ea9719ec3353ae99497c0694d3c9d585a8e81084d6c0a372a53bf1819c8db", "2f7dc2b3e02f9b43ae2a54016b071a468d3ad06ff8d710ae7a6af4e04d1b4a15", "2d25b464da1e803deb3a646e120f60f392c71b6f2c450fc9cc8613d4ac7b1bca"), ("305a4416bbe263ed7f6fbd01df20aaf4fa5236144acb41f60df50a1e1806ae53", "1f3e88c30602299d0224d19a99cf1d298849546c5c6486d8f3fed5767581500a", "001312d51c52d4869ff0eceb14a3527f847a36a0605d12f125be5cd2b2717976", "039d4a010a51e9ca5912fe1e1f89c58bed7eadbf8eef8a15224ff7d54b40defb"), ("13b09bc51ffd6527cd4bd024cceca4d13a4a52d520f45f528f7c574a16dc14f2", "16fa215224815d03b8b448b13bd1728dcaec129dc21e428c022f296d5b7748fe", "1b7e285aee3c992b3b236f252002b011bc3963551dbc65889713a3fea67eae8b", "1e9172876f49583775c0593659254ef0c69fcbbb85f4102ac704cf0c964d2c1c"), ("2538da2ba7800d52787e2048aa7a22a7d10cfc99fafcd719840356b9b5e8f21b", "1d41b22678aaa10f1ddd117c144155f4ee898580772be24633c31584d5dd8e73", "2a1d506695f0c3c69e68176b724ab61b4cf40b5361efe4e07ec173bfde441bae", "04abd279259a98007f9a9e32e68e6f94ad7618e201ff7a6509a9d3828b803ed1"), ("24ddaeaf188297057a0b7c0aa5b471e2fa0d535338e74fbd9d77bcf59c943040", "178a0da650e5ba2197b2bcc0d9f23ad54555559688e47eebbeb1d5faa81472b4", "0cd026a3cfd0659eb6087ef0751a87a72ee5f455dcf52790b7dbfeaee9b5a9d6", "25005547d624e1c27245f981aceced05d4a037c8923362a4ec5fa37c395b030e"), ("220a5920cae2420e8e0756f03f5e7ceb65de777b62976753aa0970d7feb1987d", "08525ad31e62164aaeb2cfdab11aefa0168b113c53cab083369a2858e383a565", "1e53a3b278366d1d727672dcdb6e920a359b86220459287291aa38761bcd1b7f", "28d945bc5bee40f3ccbe00ece75ff39b6004076e645a25c382719853e848e1cf"), ("2fc740983a5cbcaa576f9c78ea5f044a59b30e2d0e8e19bedccc4efbaa1f9dee", "06d09a0cb501e83e18ff6cfe001ae95bccd752dabbcc9c0fef203415d7ff144b", "27f6203869a3d088fee5972237793502f3cd074e904c783402bfc6e2196a319f", "289a6f3a8d0b3be864d26ca0f743ece1d83bdcb27829275fa61cf38943b0bfde"), ("096419def31497c787dab7f706198ba88ae622eabc89b9961a1a27e4a68c987e", "2ef34e50526bb2ea9d335ffcd177a7466f99ca45d01f370506f41f60210f39a6", "1fb765bb68ceb9f28ebf7a7c38c3cd071587aee5a1aade06e3d7e82381e6ce68", "085edba8f51d091c9e051d5525ebe7f4b787464afa3450c90ba30949aa444c33"), ("2451d9b51bb9b71c9fc0368bd7002095c0c207a78d156580bef1a69d041fa022", "176d72bc14668d36bcc2ae066fb503963de18a3ea55b4527108370ce5221829c", "2abbe011155ca12d9234a1c4e9f81b3ab6a821ae1b161dc360619d890e6067d1", "02411aeb8c684ccbbea982731546a44b014f0d2fc2adfd16b18434906d322346"), ("00a40872cd13ed60302a22c1f1290a778aa393cbdee3d258a962a2458ed52a43", "09528986f865fef71bf2f20d392e28c0dee6fa01b4ec45445932d85c6087031a", "236af5c84154e84748e77094737476347b882eb6cb9cf38a00854d48cf2a727f", "1a9ffc8183fcfed0ec65d5afaa6a9c7e6049cf49a5c05048b5bf2fc18d861644"), ("279bc200090dc9683e5c381ef354850d7e132156d3f35f3dfa218484615ae1c9", "2c8d21425a7c7487a8f8a8132381c48d65e5bce2683cd1d1b82885eca877bb30", "1d4aa46222afac05f95e4f103ebf1b090cd6d58ca60496af55452ba6be4b740b", "0dad9ca686be9757d837eb207ec2a0372bbbb8935b763dd9f9acbdb0fa06e42d"), ("124165cfe8e81f98fdef27bfa603651bce1042781084c14d03629a92c52757a4", "1ca78a9cb39ed324e4dac7d165f7c0c3ec356a31c8ea41cfe6734a73f0dfcae7", "2cfea0409943f46d7dd7a8f95a6c6279c352c8069cf7580db5e6afac1bdcbb0f", "23a38ef55be912bfb2213b49d5e7d0127e1130659bbe63c8cc71c58e60e8061e"), ("110c1493d29a0acbe3575fe80ec9e9054f60ad1244162732f8c965aa4f39354e", "1d97bd13945a61f6f20377ac0b841f6cac6f4d18d37e5c0e212793e96431de05", "229575f8d19241b32e722e3d7449f9774995c4e68b05b777d442ac2b99623e95", "012ea09bc69284526d6060f88653c8e756d0c584c550dddf48fde79b739e36f3"), ("0191c3b329800eb886e082fdd8e2d99f1c04b2f9a50cbc8c6d4960b07d78622e", "2c442cee0883f5ecb325638fba15ce0cbb6227d0c97a2f50485204acc8e8b1ea", "2dc29d536ebd186355de133f85997e6f07750882c5158e929bc8e223057b1b65", "0e0861213a608568fcd2e1a1d9515d4147bcfbcbcddc92c8de418e3f709aa8d4"), ("2282347bdd3fba47a70634549a7eb3e284405d598436ebd3ead98d089ae2cac4", "0ff7c7acba2a3c5deed0837c1ef5c8ee70d245373e20ce8d3fe04227cd222ed4", "167bb4c73c7f03453eb5856c16647aa11ea4774fd77d0ebf0bfb6d18ac0fa2c2", "0cb81724559e066eecce95608eeacf4b5f82318a0a31dfe36d790d75d66c703d"), ("16590427e47dfc7b795ff629d6c7af493b3ceff1de0d3dcd683a18b59df399c7", "03c5006c41ff7cb2f55649c6a415d2040516297e6544044592e6b8b690b628a6", "20c5804a6440a8d3d652e8e750a89f0cfe9ea9a2876339427b1134644bfeffcc", "010e6e70d77f7a383e3f087d7542e57672c1a032a08c9636309415d28f0d43b5"), ("13a9089571865932128d35e35cbb4330d14e61807913db09306761b41a3f7e52", "068e8bc5c3f02e9645430c953c8998ba28c07c2bb2cde901ebe3a4d67ce5409d", "10ba075b123e24863f4e9a594685c7f3dc12bcc1278ad6c7329caee860fb386e", "1a1e59eb406a012706ffcc16ff52dd7e722040d95931b0bf4acc234d2560ff09"), ("2819421d2b02fda29b77e226266fc73cf21f2ff76010530e9fcee7ab82782e2a", "21ad3adf9b08f23fe14389c72f645a1ec8784fe1c0c403ad5510ea32fe3af93e", "1abddd2346ac5016be8070edd8dfd17c0aa37056d34ab45b734f92260941d059", "2ff98257926b698e29401c2ac883f3ef7be7598bd7b8cd94087ab411c7b0883f"), ("0e6577e0dda3938c8aad0aed9a11755a28875eed37337081e7cb2a29f088e5cf", "2e88458ec8ed1fc6eae8cb6dce841de555d3235726ee2959bcbdf212b862dc9b", "1b686c53c6126053ddfa90a19728294abeac9fd74c4ab695c1ad0831d48b05e4", "208ef232a21aa8c37a843fde46edb0d39b13e75423e85c52f2fc210c5affc380"), ("292102e2effe78a3f4c2469c4d2eb96a4d7b675e22fe58dcb3530c78be60ad92", "19459cb0e94d375285275980a09443f014439806b59ccf64474bd531217c2d5c", "299f820f9fa1fb94625b02ce1380bdcb564943b32a2504d3a68747a933da1357", "08d7903d46861713ab6a8c5f8251dc8db130fbf29213cc7ac38eeace48931a42"), ("15cf8cd02a8c7622d2dc9e67a797891ee9848224ca38e0542a59827f4ed54053", "283132c87a76f648a41ed06d5f8b574f0f26807d509158932b60233e7d85675b", "0a6e9e084dab5e2a4113ec6e1df00b79ece4ee870db74961443d76bdbc9b9fa9", "2ca9f2dd338642f87a36ff5e7b3fd14e8406d0d151a5ae2be52b9bc34cce69c4"), ("216f36072e570b444af1c419c08b52beea945a2c8c762e10adcb63b1038a94df", "0a39c3fe48a98faf94a69e85a2647690136f13e45682f4dfa3bab3c2f411fc6c", "1d092cd6dda30efc6ce89249eb0a97e345126ce0ef774be4358b547466e52622", "1ad063776223db6eb8bbb13dc3fcf45aec7392be10aa895f8a4075fa5a104e79"), ("09d9c64d362af789701ca315d2de0506cef17c22266625ffaee26c9075e254d5", "07bd7526fac4be1377f911ccef222e47d6af75fa857e58a3b49b40ee023ef00d", "301e13112844ff73241eef1cb1de4b6b5114318fe679d92f1b56d6479b68f22e", "20da14f7d864ffbd68e77f03c9493813ee652e5cdd1a87927cb51f53485658d3"), ("0a547c1ed51a23eb7d1db18480e58057466bb415223bd4b2c2ac1890f78e5e85", "2070b13502f6a11c57a4b80d534f0a2e82c95774ca6103f12ef377c713c46a35", "20bca2f9b12bdc92d9ce5cc0ea42816c8a7b18834d5084ab50a8842f4f429b5c", "08d5ca7cd12b3be5260fad12b2e7492da088834673e97eba68f5a227fb020c54"), ("194c6a137fdbec23879d8cf9014e0aee55b8d3d95c3c3d05f5f20ea31d5833ae", "1e048173695642d5837a3a1dd88240b074e1c1a2e28fbd330bcb7259a85da30a", "1f75023ec4a600273a66dc1d4f797c9e5893ae1bf63048523b2d611701cc66eb", "125f3033afd6c4cfae3414391f106b9cca9f6005a4e61284134f3b7c2e879c5f"), ("041faa86b237a671354a2a8ff1e9db38d51288e5b3be525c877b6e8590b79551", "2b904f6746598cde9e7228deaaaae4f6b1e2e7d30816f4a7021e8863d12d7f92", "1b1871d247b46b1170beeb68e12bc1e4872ea514a31e43732dff13724c06684e", "10256f7b6b2331cd64fecdda079263c3b89ef53e90b8c828a9e7fe43fb43b991"), ("1480415663f1568798058a9cd44d229f77190d2b9de58c9dc347e29b7f7f9f0d", "02ca721b0c307f934ffd3cd8c04496fcdbbf4373770fdb4be777442e02651a52", "2e0fa500a5e96f5715698c2e5392a00be760a3be272f7604d448836b878e8075", "15e6ea1fb328a8b424eaa7aa5cffe004f1753d0c6e5b9938908d18f466e28471"), ("2ee448aefea48c18b62e31ed477fbb9393bb7933102e23a8e14a060e952cebae", "1726edc0b09d51b8fd6d4b05623b4f2c923194fd04944df8ea37540aecac9f8a", "0cd390288c25bda970a7439c03009b50c92668b52fe8d0ec7016559a1570e171", "2f94a45bd680a9e29ea024e72a50170bf7c9c59d1ce5fd2450154996e30c75a2"), ("0172c4b8652c106d98c6ca070a829be9b5674dadac150f42b6ec2bfc1a2048fd", "24aa2c719c727d69d2e2a240cf8fdcd6893d8c0bb1072fbc3199fadbd8d33a78", "0edbc0e802eccd3ab8423202b62facf9044dec04992de52373284b6285814d60", "1dc046d54eabb96bc2975081dc1dffdea9351e15f134160c88744cbf34659b47"), ("115ec10285da0f3c85fc8c64de01e2932e0b91a3006574f5ee65c80b13d55ed4", "25717f4976ee5f63932b0ad3d555d402c8d56ecebb9dd75d500840ff14a980d0", "2d3aae51ae1e308fedc2c22ba353628f4766eb2088f09e37e01444750481b57c", "058dca91f871838003ec4a6d55fb5b8f827004887fb61469897e5d79ce68240a"), ("29c2dc677ba95b83ad1f685ac217d0d6925a4dd1e23c4400ce4d343ff7361e20", "1ad4f024031ebd88430110778a54d91a76e7e327dc0b748e93684e1a6c156a03", "09afd77dbd87dbacb9d2b010b70821615d474d32d6fee3fa36255b4a4cc343f2", "2c6af5f6d73861c96445240019fa6fce69a4bff726140ccdd4534dc3b6c4faf8"), ("256707667aa3e6d975732ee39e2aaf50a581743928da7fedea6264195e1f4759", "036298295186a61d3fba9bcdca876d3a50cadff77b95a6ab94c5c4039556b774", "16c3752f8d4dff0d11c54603115d34f84260f97936ba80244422fc0870723355", "0d24360887bc136979868d22d0c7bad57b8c37f47eef2d50942a71022c222c27"), ("1d3e37a4f46c44f8e5dd3b448d8223eae118f2ea879a17738daf92dc8fd081d5", "15b4bdef5e2acd7d7af3c135afb08b0afad32c3401799683029df2b3183c0b10", "0bfb564a7d2a2c1fd6c0453c7fddc054b74b3fd872f4a6e5cc1e95d4da85967d", "2b2b2ccaeb34195fbd174936e13a423a354fda3642615ba10dee94117e85749e"), ("2108b96df0f1ed4f91bcb9c7ab1f255976a03c999b52b1d5cc98a4adc5836edc", "2138f630f6043ec6efbc8b3ea9aea101acc66c1394975a834d1ec2d87ea7e91e", "2dfcf00450f465d29e7dbce84d36b000175e971dad43c6a55ec702a9956a9c39", "07975939eb2cdc6bb3748c0b11e54fc4360be394e5572d6e4a0aa19e47668177"), ("1a58057ec7ee4f8e948903093d173b2814305fd3bfead95726e556b00528fa2a", "089ad53354f1ecc66ce6430dfb0d5efefb73623f29d61176c4f8f34e92a2c928", "20150f3981d6bcf616ea9213b8edae1fee89448485c64ee5d82baf63e034a004", "0df5f836696a884a58cc601e2f410d938b9379612345558d650c2a5f2eaa4e8a"), ("1143d3269119af409c54e53799c2af6a3da137582ffc958c8f3fb25d3f114bcd", "110bfc24cca4c4371ff9a29573a521f8916fec5ede1c103d0c1dee547acfbad0", "01c8dd9aed9f2c74f0c21e27c9a483845e1b3e9751fd678ee083f3005fe6ddc9", "0280077518e085e509c6001cf96de5eedda271a3c7b0e80d2207f6525e5db0f5"), ("03ae43b929b0442f8da0e4fe2adf33b202b345107aed2591b8f1c7eb1e9c4d61", "17edefa1f9c66fbcaf95d528e4c272b015ccbbcb07e67698fe2257c79763656a", "1f826abb955c5693ed6097951f7abc545124da916aaf3e7b518531181377b5ea", "0b25698ce90d4888a211073a7b84bad2e44c44c2db2b675bd893377b9b56383b"), ("220db616cbeef157523da1c1982a339de09d2a98224eebdf14397793039da2e6", "0ec8e336866f4286b794c6a1669cfb9b67c6b2b975ac5efda7efab67e4aa2f27", "155d179dc8d70418069d37049786dd10a28d7de96a3c2c1826e0fdf65babc1be", "05ae152c07e8b8347cc43638bdea2e40ea69bdba6c372fe4c7af76ec8cafc8c2"), ("131d0577f3b9173257849c14e1b1712a0a6f40adb7a8fb89ede2d8c95df98495", "0f4721553a6733c6e37ddeeaeb92a527ea0554f60d1b7aa914f2c1456cfab7f3", "0c67a5487e1505eb9ebd56527bc769dfa17f71172e88309a4a3b30a80650cec7", "13cb8bebd159e4774bc799cf65577d901c9ac33b212325c66a27b86355b61040"), ("223d966889cb26831627ce619ec103a13e1a5851adaeefafbbfbea2d61c974d7", "2810b39c414e3db770b1f8eda9eeed6db376c868c375bb01717f0deb1ea54f1c", "1aed50d83626c1533dd7fcc30c91496d36611886af3ae218ae536ea2b9d9a046", "1c083c85a821df548a38aa0aaaaf65868f046b2be9847b0f6177055c55a2f070"), ("14a2d2571ea1c21d20fae9dc2e507c442a83ada1a1adbec8bda3bc6b5e4c7303", "229637d996d3c9923997048e964a9e6d97bcc477c9c73d601eb45155fc07668a", "087efa4fad78ec055f37335b19516dd9ada4276c729b04354befc905f2fce795", "0fe6bd90e2b8a8f27ebf8738fa22bd48ea91d50e6a3973ba8f5830dc772324ce"), ("2d5d3fb3f8a470ed6c8f99c723672849b2170a766bfcd96cd173c4253bb6e7ca", "2f29a6a24d4482168cd2a12e33874c907b3ea2e518e67685c97e1c1ae6975042", "0fe89b1a46c1957c3177189dcc6541ad92a9612fe7398d95dd935d47aed03e39", "21cf6e268d483ed612d284a27b0a54bf5727e4d83ea57f9e189d470872400772"), ("1f4cd6d6987e21e2ddf992039ff952c1e015ca4dd41399807a94274c6ed9d3fc", "2200c599946db3ce1bb4e4081dd48759f64318934acbfdce13b5fae4ad3d4ad2", "037b99ad9d2a9f8667bbda55edd9610395ec06bc87afe350d38b548f07ed3944", "1f446a9e833f456037cef170d1c2f947d19dd77cfd1686c6f96d16f3996e6406"), ("11178567954a4cc4c51bfdb2aa10c40e847621a656d34746ef09d7e5314b5139", "042a902bf5779177a309ea84e7ed791198fc5a207451226b4feb29f7278a0ed4", "1d2af5bf4c32fbb9862a6dcf86b1060d5e76a8a2fffe8b5e1297f4f459fbe2cd", "0d420cf6b449421c1610e33fefd1da8c9a321fcb5ca9f0652e72c558e49ff6b5"), ("1724c8b7747ff4f1daff3f6cc0b1b825b78b7fab024cfdaf58c3ace054b3c84b", "1288ab4c5789f3282ac02c3e29029ea9abb011c3c6c9e954870d6ef28b92bcf0", "27cf6c6f24159dffce55faae884f8220cfefdd203a6510dcb112cb7cb881699d", "2e81e07edd88362e1b7b689e271702e4f840140acb8ecdcdfe95924040ff192f"), ("16dafa830335b436e5e113ee0c7388155064b6364fe2b2c7c669739173c134e5", "2794ab76a19c60422e8cac99ab4e48f2cf14f457e28cfa35180cb017d9fc7080", "27abdc5b3f2293b6e94d4ed6b3139420cec08285b1f670c4cb6a3cfb34e83645", "293647419be504be8410cb1a623ace83b6864be6b7f5030e6e07c7bcf53f424d"), ("2743879a6a6e440f083fdb317b0736a2fffadabd9429e665c132da09a90aa2cf", "23992eacc9b79e0f82fe273b41c2c39c6146640d6663f57de781837587c93463", "05e267ee0f9b5b1f5743dc79d143efc2e93fc628065267d0314e4377f6a00d9e", "043825068616af8422887bcff896bbde848b5a17ad64f019b8f34e382dd0a972"), ("0e9db6eee4fe7f9b23be07a9ed31e6b179520bfb42ba0ccd3be44887d95c5b31", "20d143b4f9a063d0f35b2a4a20989c55a8696d7a55b2e3f20362a5063e566e36", "282186ab8cc8997c97e718b588d8689199ded33b7b31e8b35ede67efd17ec777", "1c2094abd387ed72eede1885efc8e99a0ac6f8488f6a2a9b847f5a7808f4e593"), ("259f6d2b19cc610f15f89aabadeb2a7b336bf1bddf524f252bc51c2788931059", "0dd9167e1df3e01043c5fafc6ee43dff4ed846ad2d0d0a2ea1a090edd76cd7e5", "105385e4dd8b8a9de769bb57b4242f6664bde8c64b58dfbef6fd9fedbe28e77d", "0f6617977ab4bd0fea10cb80ccf047b79b6514bc921fa958573ae5d6aea0ef7c"), ("0cd814f4476223f1a71ffd87e71d42e6e6a3f161867ce24eb8c5500ba0dc4444", "1fa1ab31816c6770db5f6341736cf58d974232a69ae694ea25a322fc97507c17", "0744201dc58f419973d44b6c2ddad69974564538606cf095b7a426931275095e", "2b1a7256ac66ff1fcbcf02833ab23bb8cd99920fd20c92209706cc218faae3ab"), ("23f80b624a2cc630503e6e1961997a748836afd16a0681d047d4f9299dfd1b6d", "1f9c59ab40a914c7a0c3bfe59462b211fd1f865d59ba21881bdf1feb9edb96f8", "133190b08f2dee2a7bdd9c66f923bccf6a1bf5441853ba7188cb2e2f54ca4665", "002088f02cc318cfb9e22fc1408a6804c6c9759e7aa0e78b19861bd40d0b4000"), ("08896ef1185d534c36376be39a865dfc8efa5c2f1da0fc05d4827041e92172c1", "126a24c1598cb95228e39188a026ace2af30ec2152b4ca3594a6abfa55b59e3c", "18824a54259f8545d4e2ee5f3614ba9485edac47366eccdb3f2989debb42af5e", "0e102b4be8c83c98bcba213c8d3925eec89f0c214f7d352487e3aa03c3e629c7"), ("108722b3be74d5ce44b8a68dfc95b1740eb977a61b3cbc161b4d66084d4bdd22", "163cacaf5e0dc0ab9dcb91e975bc1e181d3da0bb748df00cfbb300e4100071b4", "1a3ad8f159e60c9477f7681bdce8973259a76320a930b5e5bf0aafa94b5c6422", "17f408e1fb483c84f5d61b4e5297ea549ed047ed38d86648322e22bbaa36158c"), ("273e1b2e6edca2e7aac1c6a9d6585bb172b9a6bbb3298064338055b57f2ef40d", "2ba7c0c003326ee0875a9479cf9f933569cc34d98bab504487db38dc028feda1", "10f44377a4c324923a98bd6bb08e3c6882e09edd5fe26c18f242208a388bfec8", "0aa55f85d8802188d3b33cd24182f0ddf3fbcab3a3dac009f7d132e59549bafd"), ("2d89ddbc75728223519054924f414095eaa398cdcb8282287d06660959c9c72f", "10eb0d1a07682d0709b7b73e4cd98484da30a83790e639022f12975d108f5e32", "055ff5e4da1fedc8302d91429f546d21d4e668be6c3404bbe8795a572c66726b", "17db300f35cea269972f808d75154320e40f3d391cefb83949fa16a7782688b3"), ("2f4f217ef9d5652db425c9e2941673275f1283aa4402642f3788c7ca006dc9a9", "0ecd3e23fe8936bad75a7ac09b1cf2f259310154685b08ec9afaaa4a536bd3bd", "01ce9e04f4928b16385e231046ecd21a2c7e52e457669650011e183de8f2970f", "1716f2de289c4351d438737815b3a97a3cc83117bde0c51c032c7ce8c6222bd1"), ("0e5f352bc7fa7bc862d78aa6c949861fdaac02ae36d1d5962e608f5d3e51f41a", "0f9e642b71e2add2402c5b954f87113de2c0f0e464fc1ab2016ea92b1e019bc6", "2283e6a1eb164f19acb46b3bf29ebdd360d3591a5dc0dc8bb4b9e0070e0850ac", "2436161b661c504f94a529b2c9c4143203956e0be5e4af62bdd9eb6878d35ca9"), ("0bc8fed63156cdeb41148c4fe8e4f0bdce48688d7c97d68cd7390c833174f056", "244e90166a0f5739c25844e83a9f1e65098e6ee44287bc0b186274485382cbaa", "0a88c757408800a5b9970901538cbea737d24d02771124e543f9b7320c19948b", "07babd8ea1286134c0e58e1651e3af94d8ed74ca92064931d074767102559b40"), ("0e8b3b65066c809e0b2a9c5e89c76dfd6ee70797ec1a7d6b3380f7910b813c93", "1ec4a3259295c283e778d1b6a340bf0edb22f5c5cbb10038bf80b90212e9efc1", "27d6bb0d78a24cc20fee9384874bd71a961a14e37872375f5c3d06f59aaedf2d", "02460b0bea496faf32526b734daf8b085b0595c7b36d5b5de7f1f1bc902d0066"), ("091a1b54cf1e981cde52b40975c2dd8df34150adb968214da0edd77c6398934d", "17c822c3b57f46292d48e16518c8b3a0a0265e162efd21bd7dcdf09ac6c010fa", "1ad3637209548ec9c55f77be5b9360af0586a61a4f68cfa6d2fbc5d7637007c8", "15085471ca3f002bb0cbad5977d815a5f94f8ad6e636ac4fb1bf512650e4e631"), ("0752f757295e91d0d0e5468456e64c36641a3be5bf334c5c7f6052f3fb9e7660", "2a2d4a5b7a678fc47d8bde3a6c99d6cff936ff7e87dcaa55bdd28f82c65a4b1b", "1c14e2b38a5775a101a0ffe8c9377c696c22f8b96f9a0bad4085470a9577d6e2", "030b01776b377ee877ed95604430d80460de5b2791c2ca51d477f1fc5e0b3a1a"), ("0be5d931d90b443bb00fd2b5ea58fc78fb00891657310233b8a9f76e89f6286d", "1580ff44a3cd1cd1d5008e167703f18ac211ee26b475cda724e279e77189eaef", "13b57ff96421c7777c12d16aa00c0b924dd456794099fab388c436455cd0d238", "10c0129ab9a3e81296b1bf5d254e47dae157c067fd80711b6ff749331981f049"), ("09e8a7c1cb769257e1fd16b0a82ac92090c464294203a7493c96b988643dbdf2", "21c45c1d2a2eb6a961690d8cec83a78372a9a25d9160dc38777a233d28aabc3f", "007439c2de50225ae8a12d592af3f32395d91e804b7cda928c4237c885456cd9", "1a363f045c7f45b1bb5bb545e7b06add2af65792d832e5e89d847bffdce06376"), ("176be204ca73962bfe707a10af946cb3442948b6480955c6dd2e3fd71157937a", "0b56d721ce4b6ca3928a2d8acde89332fc9e22299b5eb0b4989ce902bbee3a6c", "1ad8a49b39ceeab1fde13f810a681a2d0c26df300134e0d0c5ef42d2478cb580", "282927aac503f8d9a0453b78eb9faebf25fbb79391490b57c5a649c81220de44"), ("11ba6150bb56a5a2bd4b4765a65d086e4a5baa88f1972789617fde71be0729d5", "2480774bfbd1c918101cfc70aa42d8b2bebb271a1514063763e2a738286f59e7", "0eef30dd97a79af4a3618bdbd598815dbce02fe43c8d50d143f40f22cb87d714", "176e9e240b5acb08e49d8e5beeb582fe349c2890745effb54cd37517bcbba247"), ("19b8103ff25c631a903c83afd3b68928f26df72aa1ae4f37240b877798ef2bd6", "2a02a8c1b0683539563bf7f0f0bf240f9f8a4115516144940293f3ce13f34c2a", "19840afe12c6bf3e4ab66e4df2492bc0bc7472622a32d351305d5fdd47c5dbe6", "1b6de9f9ae54fdb5adf2c6a6a33267fcdcb278eda892b5d707b24b71c5bc0bb3"), ("25395064f11abfb760b7057ba427dfdf1ddd53fb6ccba3c01fbe06a4f833f9ef", "1490019f0c79f55b47d91f9b98a8ce8cae9ec745a0cb0a4bcf6c693833649627", "0019973270c061a958c176ca8da8c8372e84b8bde9302378f5e7654433f684c2", "0a6f2a7ada0e044a01ce34b79996b7aa14c563b0d043951c20d3ee5ae28cce9f"), ("1ed604111e4627a29e3afa42bb59fcdc47b877d8347ce25aa9e48bbaf3c7722c", "12d07833b0f9ac8b463a2d28deaf52e3b47167fafecf19673e5a0f16262754ea", "162fff890cc6e7aa220964f9bce7d675188923f9bce51df47b6bf78325bf909e", "2f512ebf42b56d65a8035b7488c0d159dd7a1dbaef464aa51b846f25da976ee7"), ("02a1844abdf6e86b37df14af9839a04d962f088e630abde65d57da28bb655715", "205d535cc89918dcbae8480c7a63682f0e14859576a32b1c7279baaaac4bea08", "28704d046a4991057dc44b72410a2950e05bfb51131759442f55898eefae8f8f", "2a6abb1df7ecc22eeb026a94f4b06601968855cef58c8335210441c4f31c2982"), ("19d3d2c3cab265393041231673a96e8c82306bb55b6fdf5a718640f30bf510f1", "270473a3e300986b69c4d92c719b5307dadde5cae77550a947ffe44e13b77718", "0194fcb4842cd0e2c4811648118aa1fd7156ef98b815e955d2f55931ed39b8f6", "1367d9648a80cce4b20c494698c6d068aee75c560bb40d0f16e544b37a995d6b"), ("0d3f48565d10c46a3022fa251bf3275c9bc726c9d8e8079e17905d1413b0d982", "1aa87c3caed79a6ab668b6856bb7db84cbbaea23e7ad6e9f0f4d33ab5d534457", "13f90ec7838acb5c4550a639385bb39c85861755f7c57c885982f68cc6f1007b", "0b3944c0423428e27175199b1b32623c62e3ffe8ed4ba8024a43f5bca21cceb6"), ("1d736db5ff997ab3795d1d59941cc022d80a73f7f8ec26f383265f5e8fdb7dfc", "1843c506711befec900a5c46f0dddc357197ec8e89504897e0accd2fa50aa4c8", "2c3988732bf0bc28d0826534cf66154312e7917ed342921a560c698ea1024ad9", "0b594a474969ac025abd4a3b21384e2e1e9461c16a0e055fe1c5ae4d674569f8"), ("110e5409af49203af870baeef33f4c144e6c950c5745014598245e5dea7b3b2a", "2f99d80262d17569ff43d2eecbe69934ce3c9e20c1d2c425b246ced217d95973", "1ed2119aaf168b6ef072329f726ded53f6930cffbe3781a986354554bed45d45", "2b146c9210b3503115ebc60caf0a8343237cb4790c2fb7a4cfe406fc8e78d7e3"), ("16b5a9a73bd223ab5be4960ef6e9bedd11c25654b386256028e3951a8d96e327", "288ce9aa53451248d4b1a3cedc69c68219ab175d56b0edf4a63d2d787894cc72", "2798043fcdcf9147efaa45b112807a751bef195b5f6368805ef34ec0d4699fa1", "02730323ef46734989f4214a76cfb2dfa0c55652d840b65eb0d31b3ec62610b2"), ("28d9aae30f0d3f1a603d5957b23a84924e3ab471e87e736187e325b95f6f1b89", "03873179c7344b5f02b474449e7d5ea15a2dba2b96e89960ea248f90e0e68422", "2e322226916d60b5e8c0435af43ab50e0f89a41c63ecfa97c4aea7364f02b46d", "166dc5b4d418a79de19423af708955330b89b6e49e3fac8d97d933166677c18c"), ("26b632bac1f7162b6d1f947cf756b6369a6b69a531b88bedcd381c06853c0328", "1a1a7d3de2b8a22a4cf4dfe69d93ddd6ecbff8de0e7fa1a5d46520724686db9e", "254d48b2367841147704ab2ba0c62b847095e994689a0192b0063f40bfca805d", "284984221162319ed4f611b7042ad44425a363b9a957ab33b318d84c67d77332"), ("2dc7b0309e24143608c52db55a5f8b67371bdc0a36056dc57a1c50e2d4bf4991", "0ae8967d2c9009f60d1b3e56eba24a4478524d9381bebd2f012f725849b427f0", "22ce456813970a532461854f3dd0e1364472123e8224680b88a50a17ac1a5d9a", "0d8a9c57535372484dbd5b1dfa0022240accb345fa1e87c1885414a3ac86b208"), ("1626e671237283bf9443388d716c5f20af50d0610131ae17adf6e620049b8322", "17196e8e53c61291c3596cdcae7b2f00b9c0e897cca5f39083e77bf8c5a39497", "281721d77984517237ab287dcf6f86f7b290be79434777dfcc304972eaa8be4f", "1a5c9fce37692ef9d17dcec68f009f9328bc3f01900a64b03376efb8fb1396c5"), ("2ad12353d8daf8a4c5b41cfa0f4e6be586459aa53163ee06b9fb3b2ad3800a4e", "134653451b5966ee080f88c99d9ec676bb25432d90109c3c848edac869c2c009", "2c8131c1b9c2673e58c965dbecf527e6b6c2c0d16d24a66df4307f74077ff47b", "298e36efe77ebb5c7c9fd17506007fb1efd69810fa0d6dd9b3247e22590dd8ac"), ("0d2e3510c1056e3c8b888f5e2eddd4dafe571bdaa77a80a735593175a241b33c", "125f3972467cba2ee061f2c4b87204d912a20f5691669d2ff84eef0f719aba4e", "2d39495f0bed6a1aa0ab8e3f7f2e4f187259309a16aaf7ddc031fb4575622ada", "1a31f2f0c21866a87b69442e783e2ea8c9e3845ffbacf0abceeb2e3b6597e932"), ("1da2b9e221a162b134e8953440f5fb7fb1a36deb8895e38ece08189951f615c5", "20942738ddf33bcdd874fe687913effb0b514db130aec12eceb883b0c75a8f27", "01294d2e67372329b97a51471fd4c7b2fa2dc187c045b46ac9fc4e0983a7c912", "1f8156d661d6dd4bee722c543f9b8827b775af36405502d06d02f11e5e5d2163"), ("11e9856878a3286b1bf54e124a36721304e5adc5ab42b1dbfb9f18cc9799fb0e", "1eb406a3e8155aa512a128e0563be1f2b2b4f7035eff25a9981c19c4728ac1d5", "2de3c6b41fe571fd42a20ea4ce551161a58711aeb689342d5be78ca73cb5d821", "04fc29bafb20c04a635606074ac8a0ed4d16229eff3a9bb4800dcfd97c029db5"), ("19b48cb3ad95685cc078d1616bac7888ef9cb87ab1da1dba501e5d4ce7d3abfd", "0a66a379015e470c1693314c9864ae479e08c245165482979f0621e9b37d794c", "2a01f16cfa3f0c1eae6785ee6969fa328385e5de1772d0fbbb9027baf3e23a9e", "05535a51e791713027d0c1e36d41e35a2283e36767e0e72ce6eac7f886165469"), ("2188a19408427fc2526a268c93a4cea721083f34d95f6b652963a42891912bc8", "2521d8ad6be1700cd33aae2d288783902bad98be4f27482a81a0457432fb8aef", "07cc440ef86f6061e1c9ab8c20d740023c23fe568903beca4fc46128fa7a752f", "09455e0b8cada1715eb2bddb4946a8e8fd7a0a4295611b04b150cca2c9d159b5"), ("1d0530cdf0d7aad7306406f3f33fc0705c3eba41b3df2c19c911b892a68f7efb", "2fc32f948cd30a119d9208c88ddc8a0a298a6875f48152c535c6c7c68b520af4", "2521a4c39fba6ca18cb5bba3901763fe294c26a63a84f0ad2c650ef9086c930d", "2e63cf82b46c2250c32f3e6843437f0acd13d61113f6ef625ba5be1787d2402c"), ("01745f6db32deb96d05a2b8fcebf7b16cb09405d90f84f292b43e82a37e9c868", "2b34802c3b3455c5d555c6362834450a2b83f6a9852d915f2084c19f9f42271c", "1809a132aaeebb85b8f91c57b0994301fbbc74029851e8ae179cc390951a3022", "141b647e9ff77f30a1b1ffc77a3c89f20930677f8a4646cd5e29a314c56644fc"), ("0aa28552cfa93d1a1737f5552efad8de0937c9f40226c6da278586fbefee995b", "2cb73b7aa9220a5951e116b225bc53e96061033ecde3316aecea37948e39e386", "28dd7dbe5508e1514795e5e5cf17a7e969e404bc2b3dff70d48b0c45de0c8e3a", "1ad4770f66b2ce30a78cfbdc34cdd69ddebaa68832eee9433d14d46c236a1ba4"), ("27d35c0cdd681f6fee4d896f3d5099539d87524c492f3e051baa2b5e670e417c", "0d43b6c1e51622d14b091c8801a6e252cab085ed9ccbea666176f87ca0312fc3", "223b0158f31ce2f9729bd50fff001a6043d81d78c081763742e52cc226fe0271", "0d4b5cdde540f70e3527ad7c071297620647ea7de0f47a60312efe4860354d41"), ("20e595f86c4364106b929e846a0152e1e20707810e0623e47bac108cd4aae405", "24a2577396d96d1f9fb7cabfdbb914b21a5b8b92332ce9714fb0746d3c0fb0b3", "110ee28e3f9f85bd89c5983cb0b17ce3585e7a9c2ff75ee963568f3d6b0e9053", "2f1e1ce6fdc74d61cd9e3e086e9b5f5eb14eb53fd27e25a065bae7b2bb793914"), ("2724c9a49c1d7b74c445ecff5f0ca7b5a337011d4e3228ca8b78ba41e858831d", "11f542a68c4cdb0e3a4ef36b9c6110aeb953bad7f1499beccd21365b17c80ee2", "03b4e2a75da922832173e1e9c3105b23a8810b05d8b7d998643f320a94a43af7", "01255233fcdb83896bef702da8c6461c9684508cee4cdea4ab02015776f57fad"), ("0c47394e05dd051d2676620a0898103a4af5c2e337105e49c5675142034f3d13", "262160baec6ec04c980ee7f60eee3d7d0eefd5200797ed98fc2ab7252dbfdf2a", "22b1c16bc9cfb625e9641bd3f1291c9db67e4703128af7e7c56654f3c2c27db8", "10d1c02890436e1a23acfc2b5851e286a6e5f6df772ba46f8eba1a17af2ace19"), ("07c41aa0769457a2cf3779178807a4988bb2c543fd737dfbdf56368cebb3401a", "174a147e72c794e2152efd243c83874143f330aff69ec9aab713ac1eb9edf161", "289c9fdf81c7de0294f540ae3e39d0a16c1e1f4f1630e2df1823c7c2b8817a09", "05a673cce5aade282be7be0a6cef8d879cc9be32684651c68c537e9c24d5e532"), ("10e7c3c33065a87e13070527330f289b1ce6236bf6faf390820283048dad6174", "152b255e07116504af9538caa91e99cf785dde9e4f72fde7f4dba3e09e81af92", "0d5527bed1d53d3c1fc815e7ba3573efe89c5f1b551438d1cf0f7b402991081c", "03af836afd202a7210005ab71e5967cf339d729dd44e25f3adb73ca12aa9d63f"), ("2ecb4cefe1a190ccb393a5a02a62ead36b00343f8f82b604808f323745f7c949", "0a2617fd251675a1f795d54f62ad1f7b6b4c995b55b216ad50e2ad0f427998e0", "1875db6cddd5d85b688354c4d7bfaec8d91571bb53520bdd85d1bd4d774ef1d4", "200e27c7d073afd0b6592de492deecb64f7c1ad5cb13c351f91e0412cf901209"), ("287dca6333b40c736b633a6a0045d03aaa2849eb24dcc562524e174a3699f182", "26a99f6ffb4bcff6042172e138446250e21735f3f7bc977ba0fd4b2e3ea60d6d", "2ac04d3ec987c632ca5e57e53eeb1d3f35e054d9a8c397fa923235c0eedd9645", "2179a1943c1c856f641042e9cb22398c3062d0777d11edc4294a02f15e4ed2a1"), ("1b38515770d1b31c7358e1f0609e773d0cf46a929b1c74f88e63ebb37c72de84", "2c8883c80123942394ab65c6a8cd94f83f9701c0d6b0c4d98f24b8fdad5bc44b", "147c2fa694ff79b0dfef293afc1877b8d28b26bea7f835560b4038abb5a79ab5", "1366ffaed0f2d4efe3d1fec69f5f0637a8e23671c19178ff0ceb5d969d2908e3"), ("09a0c59d4975443def9b341849351b339d15326f734dea8207799adbad0b59e4", "1f330545e7c1add873ce281a80142a8b4c919e27e9c21722702c923bc08979b1", "2f4021cbfaae03544c1cc9f9a7802aac4c64186c4093a68ccaa789aa1847f0ab", "2ab42d9b8ed3a0a5b72e1a8cb7f945bc3f46bd67247630ed3d0e45519b9ae84f"), ("17170fb763c321ee962cdf694a230d4dc4195f3dfbf3655b2512d6cf1aeec86d", "2e5a195fb113afe424b8967078b8c319ad86885e88671755a9541db5a2b7b8ee", "164d65af95b7fa06a2946078015fb15ce5173959c446ab251bda4fbe9c9246fa", "11a23f7caf61a300cc1c0920d26f022214848081cf15893bba73fe1632279759"), ("1e3abe05ea8f57662c90706491b62eb38f2d41f7925e9213e0a3c6acf65d65f7", "069d2dd301945ef43920c9579470021c1d3e940e3ff6e2bbc7fadd1711434ccb", "0ec88ba4d2139d6179df6f71b755133442293d56a15304f1a3dc59838ca6985f", "09fa342c810a23aa955596e8df03e86f470f6dc649a35b8693d17eb49d184ee9"), ("19a9f70b56c74167698cb8de23a0abed39b80798bf31197dc3455491e3339c6b", "277e3b8f23923702abf8c7e7e2db6025ae51b1c83ca414ea348f800f493cd9ce", "269529a95896e44c6ca395889c7700379bfa99de54c538b9ce1eaf46512ae10d", "1a2b40480e2392225bbd77be51ab6f6f209906326a67a164a98e549c6b8cf23d"), ("27ba3f2f0e0c0143c835149d1dd572a5d7cf21de6cf344735f433f85deeb3135", "210994c07de9f20c506f55886898ececc62b4518019138d06b24055df9009289", "297ecbeadd95f66213d458b614ca3daf568596701e7075089abecaff495979f7", "049e0a798c678ebf5c3a84457feb318a14ff1f0f3b9eac59f54817196c36acd2"), ("1f20f7c4b61a6b2df7b713fecabc772bbc02975958e94f27d97cda69426c8fca", "2cdc6424be3286c9c31b445d876d3178396ebbd7f382b53f1460c46e82233f2e", "251e34e93cff1098d504576ec081b8cbbde11c80bf9f40da01512244a9f2ff67", "0473b64a3ef30588d8cb413bee9ed82074345ad5ae3831b2ba8bfb619e556856"), ("18c3a537d0366ab3b113cb45adb4e5ce92ee2b75378d181b83f1aac2076e39fe", "13bdc5d4a8d54a76779454f3a093eaed948be0247fb6b8155c839566aecb2f9f", "1b5f72820f76c09b5b2786500263b7dc7144ab3228bf716bebdd322154b87ddb", "1481da4284d83173b24ddf1cdd244f9962eedf2a1f121a01fe57bc1bddcffc67"), ("0241118eb5a7a054024bc6d262b32eb376017e09699bef0ce18c2d2022e60655", "06ac33c5f46cc596d5e46062fe241662969ce71fea895682f684279241380fdd", "0b61e90d092c8040e95832b610628e9def4c68ea6a7eccaebe9815e9059a2346", "1a5592b15fdeedc513fe907458529d1db18e01fa907ee0c0d44e178b4b05a605"), ("1f0c8aea71d43f7d384d2afe86e8051308ee1241cbf3cb78921226955d7f71a4", "2e5b96746a407a0f22f9225970619d13239a4c006326475012f395f37b8df943", "3016c08c1ee98b9a22dcf7562421038e16637353f104ffbbfde40b25284a5b56", "1095cc2e9e3a2749fa319992accfbdf070fdcc8bc05dcb641327a73535f3260a"), ("204d43a8a8e7dbf166f85cc38277229b84907ad675db3f4514267d1fe7b1d910", "124386ad5bd82d3d4b4683940fb18b6f2d7e20fe961b88b533ae7d7dae4c30c1", "2623851b27838ebf696fc8cf3f608b777dcc8e29f312737359a48ee71ff1e6ac", "22f9b965d77961679069006015d7bb0a70c476c9ffcbf27f79d0911ff02e56c2"), ("0c22f3b7281d2e3f65553b18519ba0c3b3b2337674c153bead5e309d75425756", "05a32eb135b3fee528e4825f0bcbcf5e6712ec1b593c9e6f6e6785ce7b8c8357", "0463cca79a5cfeddb2dd8f08c1e0f2642ade70647bec7a18381ec12e80451071", "2a1449a6590f7fd0c006405d674b2f0bd16e0023b1705a8e751940d4ebff59c6"), ("17a10999317c72bd289b368faaf793a69595a0cdc57d734f6a84b6045b76c2af", "2669846efb64bddcd5a7426762bb1161b7a4123fcd30e079a0cb395774b9b298", "0622f8a3b444f78cc7273e2d1b98f3e699c6c9f336c818376c52365ccaac996d", "007fac9a6615504982b0fba892583579765446eb3d49db671eb2d86afc5f034b"), ("2285396197453d73649838066f9350ee24347ad705ba75147c36fe5f39120fc0", "10aea11f03fc4b678f33ad6098abdb4e2168b61308fdac2d77c0849f91dfa48c", "0711a719f1679c0ce6e202d7f21ba080534490d93426b60b6ac70df560c994d7", "1a50368aabf931ad924d7fedc92119a5823463c1062efdff29ca1c792dd2adfe"), ("24a194495063057d1daaf09a903994e1a85f7ceb07e2f1983b65403494db5cb2", "05faf0b4d443f83a7a318572a1a1f0b38e66fdd90ff0f56317025e83cf833e05", "2856592358ce717f3a946e9e2f9e90a9d93ff5187c23478f6e0218c97ae7cb80", "1168f164bd0f35eddf9a543cdc1ba1f1a568464a479d72469f750f4c88428b53"), ("287da1f1c565ace94ff0dbb186b5e6cc3e9c09fee6c7776732a18bd87cc7685e", "03d07e406c3a543ed6037f2bd0e001c7eca21e62546ec79d8279e12b3318b70a", "05971eb826fcc79833cc6c36f34e1dc0858a2ab1aca3f5e85ca37a2f37163c54", "036f3b4504e0d177170d01bbc3ea89bc5a4dbdc181d38afd5ed55bbd558ba812"), ("252410c248f970ca9d896e7357a41a960e4a22026ec0a268d50cb4f31eb17992", "2c8508641b6b7a938402c79d3197d30d0d822961f3c9f8d121a0920f4c54dba4", "19ed1a66a71f4515c06c4a104f829e49e4a9b69a8d347a9f0701fd493e6a9d25", "16fdde6eb2f5842e2acd4287f336ed0c398b696f9a94cbd3ee7cc52f41bf6334"), ("1a1a4242b056cacfa88addb39a6145fd641f7c60dd8bb3c3c7e097f91bbff5fc", "0f784fe26f38884391bbc366064e28831cb7fb4b45c117f73627357c34e50405", "0887b0d88c85d20716b87440e6079757e96461768829593b75f599c20e499434", "16cfe1225911882f7597accc927e597f582101f12d17b11c42d6b002cb717095"), ("2a93afb24703892715c35fd44934a2b1a8ab004b79f93b2ef0fb7bd84f961e60", "0c5a2d5e0ca1cdf16797d0f9182132cc80c02b164eaf2c6e2f8c44b9d0ffab17", "28d99cfde3b4d9ba1436df5e0f67187fb74057cd4e3f30b6177878a903edebaa", "1512e660b4ae0959e1279b0f0123fb5dcec24074d3faf96a82a9a831fdf753c5"), ("2190d36a5dc6392d8b9655213d00be589114dfa0e34bb649354551034674ef55", "0048e6bb1af331ccd4b4b2cb8c72a7b7f16fb66180382306ffb78323dd30fd5f", "0767b185c67d310fa7a5648e0903bc95492ab6cd66b174bc64c9359367831cbc", "20642294a5546753c59d895bd7fc27444e480c4ac2519b62d06779b830a41342"), ("2026661a40d1e9b59259112596bd9f77f8e2e2e90ad51d68ad528007f8b90488", "0ae40cda2acd93961c140b9594667dac0b51e41085c9c66f582764132c2ab900", "03944ff37f7336509d1b8e0e48d44ebd20b1fc3caa3519658e0c635893bbf378", "23c78f8ae7e005dc851a9e285b861986cf37dae1cb46a3fa9f107c53a10b6fc6"), ("20cec8c4c95bfc67d6a1d17df7891a313bd98411ab3b3cbd263b57bcdbe0c713", "071f067303866d429d038eb7b534dbcfcf8650305cdead027ddde4ddd9ef6680", "21f620c392d713b1a1ca6fc2b7d7d8530d4d55bea6a79e2668a371095f487590", "17a02b422b22b06ee38312b4318657681ee98644b872ecabbd3e2ebb634ff138"), ("1ecff49299d6ae50cafb2db956616d274d5e8f6e7c48abf63bab1a152218abdd", "245c0225079794a89690be69a2eb72f57b1100f9ab7012a3c80a6c6a0458cc1c", "23aa8217dc1817d617ba8c3a01971eb217ecd127c888075dca722e99abad4e7a", "1026cbb7745f9e7b7b497ba873bc4f4111149e606fafdcd801203465fc556b8b"), ("0a5b849be63730cc2fcc14455e5482523dfef524ee3904328d759eccc9efbd11", "2237cd31f0f68eaffbbbf954c30ec119de2ccf197e13142f75c526626e31fc79", "179c24301dbe60d4f1768a0d218407160e3f9cd9735a70159426b6901b750387", "0d037e7a6101867102911d7c729bc60a26b5bacc349788ca18ff0d6e8b848f1a"), ("1d7792be08f4aaeb3e0b476b0e626a5cd971b588d9ba4d0959797155ee2e7b8e", "14be0ffabb187eed216bf87e666a2b91b35cf08779f75a9261b23c4666506140", "116184d5f12b52002679b2c7d5b4004d556f1c93a5205a999a3bc3736ae61a29", "13b6755f4a2837690d0f17cb203ef9c316c44f35dc97725847cfc87c33a411c4"), ("0d02347eb1368f9b165c082f6b7832f5205939cbfe3ad7389ed3177f3c01687a", "10ef04caa245a258b10805df2526335074972ff92bcc9de735eb9145163e9bd7", "1a2997e41ae38818596107b60d2e25b7e363937727d07c9959d8bdb3eb72b2a3", "0d141b72967ceeae0f0150ad80beb0fcbb6762a76f7b8d275375d359905b814b"), ("13c7d7728d72c737c581a0b0f9330dcc2f6cef5bfb6ad2947f80b981ee20f08b", "1ce3e3cc1aa2ba7e90b6ba181f76b318dc5f64589d0578cd0ff67fbc0892336c", "020f6c1471626ecd084ad90ebafb599e1655c8a67330e5f7f5a78d2985c20c8a", "07d2ad5af6b99122caadbe4c70e3f994e88ccc1fa1767b90c4d4f95fba069915"), ("2a6cafecc34d9a2571254ab5905df25ce293f870263e3ece86875a864b7c5d2d", "2b84c0ccb169d50c9ce164f78717f92015b7d840d240963fd899d6eb5b97c96b", "2f15d6b6ec08ea82464e4aef0e5ab5765597ef40cdd12c8f360caee1b34d5ebd", "018491963fcacc1593b3e6568d68f908e8fd84b8d7784e1fdfccf8613fabd3ed"), ("0b23ff5c0334b545310b56c72621f61e612cee04944bea3d6fd81b0ece2ca68f", "2d217c12170280f16a5ada57e68bfcf78f5f7d59d68c3a72c37d82cecf5d857b", "199d7633624058e11e372b6d2346c8ff54d1b456d0014015a22c2830bb8c757b", "0017d68201ed2454bb63a9e9af840f005db99a633e604c14c44eaec0d0043719"), ("1aec71b68ece8f6e91a571bcee9b7033d39b03c23c3ff68502cdf9fcb57d6ef2", "21825246298afcc210c9b05492afdcb14a62ca89e382c0c9f23ae2dc49f3d95e", "0bd3e65179fac7d8e34cf35521c97735ef31dee0a524c71933636faadcfafc6a", "02405084c95b346209e41402cb00a7dc4ecefb6d8cffbc29a7162537f2c6d891"), ("1a3c853d00f9a8dd7f19f61a08b418c9f6ba9285db7cb07ee78dc81dc098bfe3", "26cbe7f1248682f74681e83b4ee712cc86c519869fa917f7ec2ae986684fe0a8", "2dfe7fcc4af7e9fa8ceb3bac9c583ac31fc2de580a7809162814da59d0d9e4c7", "1540fee41c1e8a5da695aec9f5e50454f25a77c2150f7442d680dcc7fc912069"), ("2f7a00cc649d4639bf44bb06f37e88e027fbab056d20ca9b88bbc9e49b619056", "0b39b15b194575b924f6b4749adf8814036e8df8c394498c575667deeadb6ec8", "30552b74543d3fd268dfa54e5000461aa9a2254e296d66683fd36736ee1568e1", "091e5531f9c6fd04dc0a734e52922083fb89f4e62715f57e9a981bf92cf010a7"), ("020b16418f82d3b97c89af593e6d05d94d4662b654af3f8a4eea49d9f20536f1", "1878035cfb7b974490ceff24467cb6b5f3f6f1362c3735e37a4dc3dd0bae1d72", "0486b08c627ccd55281ecbfd3dd8be7295f4fe308bdf87d0fccbb7c9b08f9759", "22ef582aa49b5dee41297184836991618c24a09db18ccfab65738c31f06479d4"), ("014bd5cd7c147e601ba81f20a8defb2a198ecb182219a18866ddbfd4de5260e3", "2d641f27930dcd29411b2e763badb7f0e9bccfa44ba71ce6bdacaf330d871b5f", "0157cd69ebb351cabe437dc7531319e6c59a409783568d3373a1e59b5110429b", "1c4d7e3d0c53395486d90f036c2ce5cb4e35bfe9847a7039441b974b24a1bc66"), ("0ce1ad71a4d54728e167d80b419569ff459538dde02ee5c00a4e236eda25fe6e", "1ca8e87d16ac550756371867bddb89d7d42992003737f96e9cfd2d0caf3bdf28", "0ebab04a095db2ffd6532e1ce356c50ed3978ea7ac7448dfad5dd737c72c27ac", "057f4020f90b01aa4279390512203b0a96615d9698440c2918fe6c04fdebccd7"), ("1cae8dd0d1ffde103693f68135683356a1bbe0f1772c035f15e8752785d19d25", "2611bf4020c7a797572fb39bf311231adbc55086e4f4df8ff97d0888075f8507", "1958d32429953a76de8f5b1395113512c5e62161b20431dd413841b0317b4c93", "15164bedc765c9c7d633cd0bc9182cecf06f89daf668b91b5bd9383196a40275"), ("26267a558c98daa6329b2737e688b9a83c1b4a398be045fece0114b7f60d728f", "1ef7a1bedb78f319e719a55dfd763fa956f1b28a9b7d1e7282f2c9bdf71f0c11", "25b6623dc188c8c17591916fb4564030d98418d6ee998cec8a0628c05c5ea3b1", "29f2be1980af58cf64003cc8940e1dd097f4822d42482f8e6f97511477259fa1"), ("127320369bb2032ae7ea640d0880f77a4225a4a80883ba516108c11897cf54e2", "2de750f0dce90d2d7be9b6232b2d084cdf899daf765e2e6fdd9e5ead2ccab779", "2a0c11ecf6988f5c45eb2afefe3058fa72a10d4174370a12880f1a1c26d9d144", "19f9bfafdb1cbe8d655db0bbe81dd19977b3f61f0f40b16b4f9039d0f1649ca1"), ("233a25e519abea12a267556af2142355eb231b1198d64d4367a76ea92c820962", "112a6cbfe3c123517ef93a4358a180d9f6a27a0cece3332dcf7e11db4f956ad8", "032c2a9924b955d338b3ee8d49d316080660363dfe684a3c3d822fcb1151b8bd", "070ab5047cae359858a6cbdc79338b1b23846d727956725b8f2d1fda7d0a2faf"), ("2ea0bc97eef032acb95f0261d94fe418dfe9952cf5e5917c88da3adf825d4e04", "04a51c6f206507d09c78d8b417e150fca722bde09aaf5ea4e181fd2bdd6e6569", "04e552a3042a2ac8811e29c26810d9572687921f4e3fbde4b6c28f0da16d2f02", "0af40f1dc068f6cc00b646472854811edbade2720839937d9336bd0b45fbdb58"), ("1fe0635709d09f92cde1cb1da7d1d17716be26367f7e14b626d3c24b311fc106", "1cf255ab3f1f9bbc612808304f5b9aa5b5d4097220fb262eda52ef3d3c320ec0", "2532babe6c3587abfddcc53e8bbaca3a956308ed77c33d163ad222a98aafd17c", "04a59d5b3c471ac3137345a6ad52fcc589f0f8f56981898d22a646fcda07c33b"), ("06fdcf52a30843f437076ae1cac2fb25ae90c4f35498021fa7c752dfeeae5e66", "257e91ded5ab9fda1ed22a52c609d0c74c07f969446a88af1a0f04e67bdc4988", "04d6ca350e68e2ab15dbe6a097f21d78563d6702795ed39ba9ce5919092823b6", "098e0e09ccbd5fce7f70f842eede00988b4275c76d9476ec8c003ab16b0118ed"), ("06b1989dc9612536ba8ff1f083f4b52484a0bde97b192d6fe8a05361facb02a4", "270c8c8cbeeb05d1c5e621423ac7a4dfc2ee81325a6c9690e1fabc00e0895672", "177b635952a85c948944810331eb72f57043e3bf16f35de134d9110466af4311", "0cb0efd80f14c39b7cfbc8c63406effa0e064988e21c96f42ce4f78b04b8c7d0"), ("0396b4355e404d3d0e98b2eb201b43131ecba8a675036732ac9fc196f9bb0e66", "23ca8cc1c8e2d0eb66aabc79bc0ea63bdac6b361d5908c2ea28480bd141ea428", "26774df010b52dde28cb2ca87d7f4317a1410a412d9718e884ff7ae7562d6f3e", "195974d3426b57f8fcd2260363af3fd2d811934c8be90402bcccca1589b0f3ee"), ("2e7ca01ea28e826c37e1c7c0ab2f30c4b20d9791df6c4cb875dcc286b9cee093", "2e47ac662fa594f4a0d411be05f464735c51c40bff4ac3a00c201fb85804e918", "1275a7e0a9e187e778fdce490d99c59984b5eadcb9ae09c45b8e55c26d649477", "21b0499c70de942756633dce1bdc44cad26631f3c0bc4097f678daee5a9707d2"), ("0de408efa3a7aed1db5cbbf06e151a05dd0a592f3471b7ac73481957cf2f33a9", "1a9f24da4908bdd9db4d8ce836179f26fb0de0ac54de8766ca5dcfef1a8ed9ad", "1b3c9410534ae3a95299fb84a5077b2702345caa2f9317d2834b49d9eddf689b", "0154a44ee4c86c9c29248efd781f9ddd02a65d4ec64cc53f4027f0fffd524b51"), ("2e4353150769e78226f4cbe1f0c6c5cd8a9dfe16b6465f0262f16d04b6234dba", "141c0028ba79c178f815dffeb262f8b8d64c7cd76c389536417e0cf20db3459b", "00616c8c4674e5211e7f0bf626bdab2e648e7e64cdbe1c44a2671ac257f5adc4", "1818ff2a02a892a66b2f7caa5303e6c644a11faae36e0cab86b72fda28f7a260"), ("09e4aa58f37eb2ca7d6acf9ed24fb3b30d0a2025103379b13bf8938afb15a1e5", "1cb2b5879bee2842a1b07fb0bbcbc24866538508467c3ccc593cae47a96835e6", "09d047eb17b882d474de96eb0d63ca456cf1a882f9debb0d876e3ff3aef364b1", "01b0af7732ae8d9fdca5bd787fb720c7d4e209099487bf77e71a03b40743036b"), ("1622fcdf3d0d0f34767e2d2288dc10b15ad5d0bb40d2f387857821806b064710", "083d71ee47866d06ac2e508d55d2ad3313c707643e30dc12463b3cc0490b15de", "302650381a99e30978c6a66b6b9fcd6efc8e52199a5c5e1a4a8abe9b09b07867", "07a664b9419d04fd208fb937c548f625c86334c9dfa554c63027f60c5d28a1d1"), ("0b1a569051d3ae96282da8e1e36d0982c60007a4a00a598b1fe62a1caf93fe23", "24849c155c4d612f31418aa6bf1c6f6a072562f7dfb3afa2d53f29675c9e74df", "1fd72694d8068386ec6f54a0352fc28a1490b49fa661e5835d10eb449379996e", "152b0d719799b5dfdee424f42017972d917730c9774a9254c546a74031696677"), ("14ba5c298ce848a3ee3ba614a8a4556a593587be27a4c9c44330d19f62ad832b", "0f0a62b664453704de8fe694b5cc643254780548e07ab4cf9212f6ab7bb16501", "15a9eaae57c519545cd666782bf86fbacfc7aa541e4c6639834c9159d958add9", "1a15d0e1e3ede59cc395337513961183545d7254458dcf06c44971bb4f0415ac"), ("097b45b8d30dd4ca598553aa7a8f27f2bd3c73dfba4294aecffd9d1ec9f46145", "1311a2f953dcd4ed01990e0e1b59702e064d0501349a405095a1c2bfc5d5cbbd", "1f97ab69418a89e3eeff1699600e7579192d2872d191ece4650892ccc07aa64b", "1ed63bbd6140851d2f37ade22ac84fcca8da8ec8a73c9e2c35e27eb97e47ebd7"), ("031de957ca09871accaf7c4aacdddcd5af07f0741ee14752a258357ea4442a3f", "0f49e2f1e034845f97edd1169df3fbccb852e340d935d8cf00f8d797b43a37a8", "1607417b541787aece28954dd4dc16506d6e43ae3f09bd99abbbf98babd58d98", "08f8e3e109c07254d38c0bf1eff34030e9f92eabb8ffcc93a639242f45a006b4"), ("0df7ee9dc1a4d6a81e7c77d4003ffd08b3df3343e5c5ebfcca15ac495439699e", "162564719aa49448254604e1b93ca47b01320889bb86e1a608a5d07a7475e58e", "2374874892bbcd4fd3bd05edc62da734c7b46a436aae5db680f60044b440fddc", "1c281445da05471b3c7c62d57d0f46ed0c471a1ef3b38874b8b624e2a8900564"), ("183164ec08b0b1744505bc3240bda6c8cacab320bcac687284e4384603e47943", "0df90e92490693c50c6059cfc25301edc362f9ac93e3db856d865d4f29a2d17a", "0dc7e25c62ae5200b47b664312e379bc1dfe565993c9aa96d95c3ce985828ba9", "260890a588bd615358d8c5892c42339059a7a6a2a2e470ab955a5cf103e6ed41"), ("09463760c716b61ac06c0bca52a669bb033abaa274769f9b8a8468e90a09c910", "0ef979055774f9415c477b685595c10b89297765f998649657d8857e9d08e850", "12b5f061a375be35dbbf4170aaac536366f8371c16bfd560523f5ecaa94e46af", "01de1cfdb67ed65631555b4325756211573d7be0232c839afc66d4c6e7af2666"), ("25b897a740341838af314b220c68b4bc9c937f7a321cfe694e1fcc464551fcce", "1b31667f643523ae1e9c19456cef688a4bf35483a42b4866831d5b45b749736f", "1dcaba96b5c7cbaddcd8cf79d2d6fb72a01f544aaf445cd49b43f45e7e900bd8", "2aaa61dcd27df7480fc0ff12aa7aa691d1d273a07902574caa159094be4e9780"), ("2a51eb04cc393af114614f5df8a5c512a12d0749a33708dc709b79f2c911c969", "0ec1778aa713e8136c9ef1d2e6c23d279687b838793d26c1de617c1adc8e8868", "0c8a188a3e31381ae63357936b3a1dc60fd0a22cfbc29806c9028908102ab937", "045191f8f5b66cc9ef06df80559bdefa4fa397712b33425fad001bddb0bc50ef"), ("072f300f5e4a41319b0efba54e5895ce0ec5b1c8117b35316cc3aa30575c7fa4", "24583c959f8b3cb8f3d62426e78e078614d260c1dcb1073e5de34d512254cbc3", "01c0ea73d839551fd7a99b142b0db72ec0271d321cbe7ee203945f0a19406968", "0577a0bc05e192bdfed8896b16eae92b698a97631ed2d89b4c030bea91a303ee"), ("05c57b91f26212a64156bedf52318ac0db393be2c6c1c24c966f569640ac3388", "29db92af62e57a56aed1ccf4ae890e354aa5c58bc5b89b21c3165cc1c66d0e6d", "2bd00fd3498e209896e9b2e565dbc2aa18a456b437b559ac1c318ca550f5b30a", "0aaf44f7d0030d5ba5ba2b016d0585ff55289f5834401c7414e1ad8e062d786a"), ("09c9876c523f501866ae571f79a143a0a6e2691d164d5ee70dc9483aba19fe4e", "211903fd550eddf224776b741735813f49f94fa1217261227c3e263f55e07d22", "036cff9eddca626a752d1c525b678bc8c4b71900a8db1f6bb448f13c87ba8079", "0d5c0ffe514565c9153c722b109bdbf0547d05e8996096b958d964474ab8f3cf"), ("09b90a0a197d62ec287bd9a5cab757bdeec05576668a63745a54e5ebc11387be", "0bf99b85740430dc35278a18c4f57aeecd5e6ccdca988eb606c154ae1b1854b9", "21c00acc2b0a1534cbba2bb34d02f98389dcc0e42fed9056c9c86528b6de565b", "276087d52dd42300246cdb3641b19bf1f62a410cfd8f07aa706679c40d72185e"), ("264cc96cbacad2c4219153457276b0de3a8d95e00b6370b162444b829b92e80f", "0ad4254b00647e5fe0cde55cadc5540a75cceb47f9049b41ea01c8bfb9717c32", "17b81a1af93a21a6ae107c63ac0b28b76ea41f009dc12700ad9a12c4590a291d", "28596054565e67c2789cd28c4ab9ff74cc7ea7ebb78cc027bb8b679bd20c7709"), ("0b1d8911b816320bb391e252e3b84c97d570b73e72d4c37c0f19eb36f18e8363", "0f4c38aa7b5766ca0cd94c403c58e869816f05f349c0cb81b12413b4ac0ab30d", "1f1654913c1280e58a739dd81b418002ee3c6126ae5498be9ade66174de326f1", "0b60bd7c1dde8502faf69b06e90a4fd064ac901bce5c6c84c7b5a28baf452e8d"), ("2b85e16a0db12b5f1de66c32273260e9f67365d081719b7af3e1c8152bc6fd52", "0487363d822c9d6dfad08e11bfad6c6348d99ea493d4566ebdb3a6c11654afc1", "1e835e8df2c97fbb575812a4bde6e94972fafe7e00222eb6891ead2fd610228d", "10aedf39ec878765d10858c38b10c81783d889c26538ff838e5bee177fb57a12"), ("00409f90b0d4252bea025773fda2813cf7a0e085d2cc184080dd4eb4532a4963", "2ea7e7a76bfa1a176b91f0b137491b1f85da8f6ff73c3c41a754f3a123c57002", "10dfc518d01a33c5c07c4307c9f17ee08c45046700a06974b60fda594aac8d8d", "234e6662b7cc857cc223c3bf83c93221a750c08d29ddab84a05359ca6b63b5c8"), ("0424d3a1ddb7be68934687c2a492ee2155ba95a0b4e33c4ea509e93a382fea30", "16fb35e0dd3fc3625be8d7af36d7641816aeff0bd862f684418ba5df7aa035a1", "1127056eefa10b4e0b6c563cdbee6a4a896502dd08ade20f1423eaf16883d80c", "1dabe9bff2f83f39d7a436efcbf7b8025db7fe954e4ac4db8158ac7a93a7ad7a"), ("22b69d6e22f20f3c88c00bdffbbe3324a235718e2bcebe137298288f6887c0c6", "23e3e8ad331ebcebd3153b8065d08ee6396be3d99122907fb9b4037495e68103", "2065accedef629d97a7665a1cba1c882b798eefaede1fb4d8f3e335e06b398e3", "2c84a2948b79ec59860c0cebaad621c90f405b892301b0f57a0e75de338aa0e4"), ("202f3ddfe8408a5b0f08641c1e18afef8a8d2ab1196b85f0ca93411a00184a40", "213a8e02ac18876454223ac28b817b7a5218feddee6a3e37fced46daa65d9593", "0e1716b4daefb9edfc941a13d2a5766112695cf64d7becb56a886021454b49d1", "1c7cdaec34f063f3f7f21889bfa70d43492e057bf75bdf064a7764ab73a0c31f"), ("02fdcf785a5ec191b0deab6d3be9ec65ba1bcdcc70945862deef3618b243ff25", "054a4e20be53624e9c1a885b3130f5bac5f20acd4968d494e28aee2ad44dec66", "08a472e504761e29780c416b7c304e780d2191e9416d4a8f83f676c0be74007c", "2817c20711fd76e8d89ae95163a6861254562b77383f7ab054607589a75d2db9"), ("151a75ecfaed787591fbb691e04c34c081c4879d430964ee4bf26495d96f8abb", "26ddf73a36aedb503b7684185816554cd739ea1b472717a35df4a954e377b247", "0434bce1d2d8cebd4fd37e8d2a9d4a352e9b2bc896cfddc76a6f1523994a846a", "1e11d4f106dd57d03013bf2a293139e5029f7afa740b7e125fa10df470d48ec7"), ("22c39deb7ed6526dfb62d62b78e0abc2d9121925a6a0b9c1d0ccf3a69a0a16e0", "2501251366ecb7ccb5acdd3f833b4dc68449109530a98f533188f707a16c626a", "2dfa8aa40a58aadd4e14baebff6640c4920ca59b92486591ddb815607386fa93", "2bd2afb1e4928ee8ca39c992adc3845c3c96e15b2ba25c99a526f6d4c7663670"), ("230c403fcdd60b57b7278f1f64bf1751a6e1ec9c5047c460f9c85e5f1416fe39", "1da9b5e180863760245d6c9f48a9fb9e5569c3a454b1b65279ee8581d312744c", "00e8ed1d90f7bb4fff12b36934b850b44387f2743d6da3f177382027dc2b39dc", "0ab9e30c4bf3b18477c127edb950aeb9100d0e04868112b62235dd76e60839e1"), ("061428dc67bd09700fe140f8487493c90a0c0aabcac025b862d6851f7998ab2a", "01f8248ae1cefd20a2d92df150a4c1b23f0c4ac00fb60e7dd8cb05de569ae7ed", "04af3267496be0590681451aaf6e24b4543f05f40ce0d6117eddeb021a87ead9", "17e759beeb87a62b169eda7d34f9cc7405a4274e08d9a93fdf0378c09d2369f5"), ("1f7f99806fa0a6bf58a70a42f7d5b0e5796770dfb8dcf40d3bede0c28d21f6c8", "20860d4ba09b87f3045d9f7bc394cea07473e0feef1cde1a890cfb21cd4f1330", "02a10c4131c5763aba2bbd5aafc88335968248a6d045feba77cc2e7dde1f3bbd", "1c518567fe674e93505b81dd0c9246c1d91930ec729a09bbe2e96f8cf4ae4ed4"), ("01a603df8439225c5771a8755d2378f029f34dd70d9590706a9f7b57e1a25856", "0c34ab722ec6344f88d62cf825e5e3cce73df4963f2d37a7627f9c20802625e9", "1af0610e17b04731909fd2a864dc47a068634271ca0d85b3600a9ae720a097bd", "2f64b3884779575d67bcf6a89999c03f7e6200bce4d9f2308073c8685ea22981"), ("10080d4b9404f40d8c96f79142209c3e8e88414d27702eb64e13f66951782370", "15122d32d3a4828af9f638e3b95f609d67d3c7dc30400d4c611ea923bbc77537", "274f4b2f4af4a40da66a85c2e1d4b16c9a7dae9b4d4ff5185281dff0a2b8cd56", "26399e6902183a036154ca71ddcc52b71e7be4b294fa828e44fd29e9db84b4d8"), ("11d0f8569539d83d6a440e4d7b7de7bd0d66c801c9932064d5f3ba988942adf9", "11d439e3e64dbe4b8a0889794d8de26eaddc3bdfbf6a16c98c209d6a561da90a", "11fa404c03a952e88b9080791312b88731deb8fac5aa379ca717fba00868ea97", "0782117470e806b00ca9a60e7dc92795ff8fd2874cf22eaed82338115993e689"), ("07c7b616d3f72171d4ea21cba169662ea8c437f247d07cf89de14b5ee06f7fba", "2a0b21a6345c9313f0890a12077d94df215e35aa7b4466944ce18b1c872115a1", "02da05f6cb5f13aafe1955cca05bbac659b8e23db4df409fb28b04814fd79a25", "2aedef6a1db8e03fa97132c524ec3a9f7e175727ee5bb9215fc7fb81aa4ca708"), ("23abf6eb5df403270db249d60e43da73981e81f8d2e6b60978bf9ca1c93c17e6", "0da231773044e691f39a28947c34e160f5a667f32b69fd99447451763e46ce5f", "231b7208121d68c224feec8c85124bf47134c95e0e4d0901383cd9c68df50c52", "2eb27f8edd08b5fb505df20dead67c19b6810eb18bd7de40379074639e592513"), ("17c0f1f9cdbe73abe350cfceb408acac9dfc1aa3683593c90d8329ffbd6bbce2", "01909767b8610ea6994caf8f117cb61bf6172e76ba3e788a6a32c0f2836c3159", "2249d02d3423ef722b93788a67c801f316b95621ecad3a36d4c2f4f5c933de48", "151915784d1c54374545b514d34bb76327653ce8dc48cd0c98bdb4ffdcc01efc"), ("0ce3815269070615e69e4f6db76b2ffc3d56c4bc80c5badbebbe56b199180ce6", "0958a3dffe629e26cba32b88992469197f16ca8b58dcd02ce06c344c54308c19", "0f7ba9c78da16ed73461e1cd23beb856957668343268b700fd701d4a6c6a5568", "199454bb3df1d06aeac3245ca00f017f06fabc035e39c2fdb0616393e93a9851"), ("06c63fa6641aaf1a9697031d9101f82eb3c3c826a9f1a67c5b78fb8c1ef37c7e", "1b61ff857e3af7c7747f5150b2a292d46a6620682ec7a32e0f48145f0733f150", "2509dd1f17d71af0010333aaed6243add8caa79916d27a5f31b9c14759d9f47f", "00d247ecafce028669c84318c5765c70a5bb34b43efe66fd24cd86a90322c386"), ("19ac6b5b3fa83b80667a31786b83d3c370f58124583679b586edfd0e6a095967", "044c924f27ba8ee7adb4eeb43afaefdf10b911ba11edd80d7ed83d66c4139360", "245e60d0ae793e18557780c3a94ae230db5eb49dd4f51e06d5df344da0893179", "045950266d3a09110ec5d286f9cab20b8128882b097a01f8760a19fa67859211"), ("0da2a70bfb75de54a4283aeb89f44eb1042f3e13ea1caee2b6a5d4bdce58f831", "16a8e7a5dd7d0e99f01e8b35e6ee45090d04695ec0af0a47dd9835bf39e5eddd", "0d54b121d37154bdbc7fed96e4382a2927353241a23d7d8fd764277f4fbeb05f", "012d6b22b902e96973060b81c38d61a201bc6526e58df356740c283bc654f0b7"), ("0be01b4c62884a34de738a7d0bcbe8dd0d6078c055c0f1b31d914d61d39888c0", "03c013f09fe37ca60b7fd33dfec3075ef8813b3bd97fc2c85277606f8f25423e", "1a837840e0189740d908c5a1868146376a758e19d0b08ad10375ebafc29d5c80", "2d1e7b1827a8b3e2673cd214da0dafbbadf7f712c898c85c2936e2e4e85314bc"), ("1dfcdd687b1795449825811f1f3db20c8eaaed916ef7b6446cb53fde38c58d47", "0dcc7a66fd7d3b92115a96b6d8bd629e873de87d965d6bfdfa780a045f11a5b6", "10b68b052a652325c77ef466ef13ccff5e6133641302d444cdb8eb9d799c72a0", "133485eab277868f9b40515dfc5d6d28ca7bdf5cc02e89f2fe686673c6d54b7e"), ("247dabd93512f85728ba2fe8fe78fce0af58b1d01299817151fc27025ed5aa5f", "2cea3582a3d9f0dff6a01fcb9501e1fae1d1c0628f0b698782fa5831ad0a21a7", "1d4e207ac6dd38b65aed8e1e77599e568aeb4b3dc1d7cbebc3e4ca5dc8bccb8f", "1e7cc0f37c550ec3a065e4f6b5189056acbeec6958c0626102b1c843d37af354"), ("127ef6ead9a2fecbe90f9aad95e1a8336a132a195d880d502c21625de9b14421", "14178d0b1b7e293ba1b261d9874dd49860403d0d1128871d5bf1c0db94af28c2", "01579d7b9cb48bcf219e044efdf459107487093000703237f60d2ecc24d23389", "0ffe7efad6f3fb88a34dc9e56296355ba8acbedc8a4c63c9ffd0abf5d92be10d"), ("0734afee5f34648a9a98e83b91b1f194d51d9270d851d6649e95b9b1d210e789", "047aac379f1aa1c211fac25ac01861ce68b00baef43da68d057110cf66fbcb70", "13b9a7eef6db0b9a0e9b2c31b85ab862a80a94c88e92f5a0c4c72619f3b88ae6", "1763d0ba8aaf5ec47ec1ec5e351ca0d458e49f075010c6928f48a27df95694f0"), ("2940ee83f7bcab8adeb1f533829422688e67e4352dac1c4541a35cc4bc75e229", "03aaf618f28bc3a2a6034ea00936af1d5bc65a9eca60343ad027922c2b9be178", "1b50bb74a860d8d5820c841115b3aec68c2a2718531005a4096c1bff5b9562ac", "24e456157cc46fc0ea21bc92536eaea6d4cafed2a805231444319a54957e4795"), ("0e033e2ae16209a133354f56a6aeed44505e26e23f80f01d857cd8bb73806d5d", "07a8e23edb742719247ac93e9eb62df2f2807c1fe4c3fa3807ad74b80c40ee6e", "26e9056403b88032baa91d0c7c9502e1ff2e1f45072dbac9d1f52f7be5ad9843", "2be389b4b63328c1888588d4027d2872e16bf13c6c88a086cda1eaf6a9d981ba"), ("252949f6441aabff6bac566e71cc6074c1716254a62c43061b0bd598a29a6e40", "1be7f37916e19095c8f08608e3d124d2e9d8dc1ad8fe8a30ef1540d225c822c0", "2c4349f5a5e60a1f15d98c7fc4909e52088901481de5949b90c3f617cd4083ee", "2ee0a8c9cf7c71077dfde876c6bbbdf5aa09e318d20b3e5ca01209446404e4a4"), ("082b49c7210f7fea9a054c3d6e0c88d15109603f022d048546d040a43eeaeeb6", "2733980265c9470cdb927699842175fdcfba4add1b67352af83169ac1ba01314", "1b87314e99d2f3132e63b9cdbefc9be1bd430f1674cb8e53286d58af1843a3f8", "0de154c1889d900efa4d82eafa74f15891b752450f5f269981cbd5cfeb9fc4c4"), ("1415f97ecb6a9647ff4e699bceba6f74510a360d851c63aa9fa2832658d995fe", "233f8488da6dd6586d30f7289934718940c6587bb6e1d9e22721773340cf420b", "22e70085f7e4279e6f48bb265c8028d747e4dbc82bad252d9f88781308d6f9c7", "0f30d2a114174d8c047a6e5c1e9dfbb55964c910ce30dad30bd0823a7c8bc15c"), ("158227a88bc7c78b428c901d6a4e6eab39c7e7df217047c1c4ed287a8bc33541", "256ea93c3e090de513a9b1a41c3280f2edcf0bb07fdd56ed41fba8c60465972b", "21e6b3fa32207357cbb59d6db03f8e3ed91534fb1ec8d4eb6578ee714a28227c", "08cef353324bcf9f273cfae618e6511883f62669d57c69d8414587d3a1b990ad"), ("11f33e41994064f4a17b08e94d148b563cba8f86f3ee448dafe04bd8cb01b70d", "098ade2ae9cd5ceb054b5aa41f56de56a0c112268334f0ab306cc9a38850d0c9", "2b0629125b4e57e6598ada091ad01a771dd9b633c647deb317133429fa7d2450", "13f543b9a5635d956485a614062910c19d6ccd4d98f9f41352e82002360bdbaa"), ("2514d8ce8ee2534245d8eafd68bef3ad7810b98c5b4c8bca3a52ee33dfb7a790", "178ee5ebeb707c1161381d57deb83d65dfdbeb69cf5fea1a26d9394efbf79c13", "112c08d2da6caa0669e795e2557450b88db87d8b0967e2aae0816ad01bca11dd", "08942824767bef9cbe733ece1982762fd8bebeaa771b7bd68ba94dc2769b4a11"), ("2052590b9d10a30995347b0ebb401c4f7c02b90d5530e9997e97bfee41495166", "27de5b27d6ed82297f22e78e3140f31f6ec734f639ec1474307d38bc06f0b239", "1abc7a0a00947128daf89c94cfc41604f4caa257e0cd063c5fd82a6b7a2f5808", "2acdaa4e6011d3d8418164a83fc75dcb62a08de364e85f82164644e9d02e7fa6"), ("06cb63e52babbbb37507ac4a645661a23d14e12eec41082a27b35ce22492f2ad", "207fb767b1bdc5929b3b099346ce245c505a38fc4e98e215c37c75038e5bdce4", "2e9d5b71658eddb1de8a0921f4523015061bc3ea5d1ef83dbcbab434e347a78d", "05f0661a478c1c6d55063aeb47b0e4ff308bd5e5ecc0231ec04c5ce956dae142"), ("109657bc250d2760b1bbcc5af85c1602de5f33ed28ce5383204e8497d3401199", "0ffe7634ad516f6055a06573bc2c727db3ed962316bcfc6b217c2a64bc2fa54d", "12c519491c0b32426352742f68d54e44eaf29e093256cd9780630636135f58d3", "25c55fd155804a9067009b2193dd60cec174e4738643bd81a5044cea0e4cf9e1"), ("201def60e5b83f8ec09e6622d8b468abf1c067db1332d0679052c33f21707fd4", "0b5eb2cd7d87e331009d1401e15df03db0161d4bc2d693f78e18daabaef1cbbb", "2b84ff769bc8515eeb1d9091a49d3842d5c3f97157b4700435ce377308f25262", "08af79e3755dab75ca781e57e3b22b1b37787fd172c9f7f78e1836ca1cfe030b"), ("0d4860180ad3907c2705143d0b4896854f83176d72236d83071b572d9b06fab5", "2e15f169b11964dc9a65d46834db7d7202832e261fe66aeeb85f3fe7b418ad61", "1ac170b14d1b08750c117f5a3bc5e90985511158d59dad3f1f2bc62d62c85d78", "07513c613564459f3a7b960b33e812363e489701ff723442e5eb31c89be12a65"), ("1f3e68abb945dd843864fa802eb11d9ecf49dce7074da3d51ff4acb0ae8ac44e", "02f5c07ea2626b14b413ebd5567206c4417213e81869031a10b81fa02f485c23", "0ed385d0b65f97febb849bbcaf7999cd3e2b0224c59e47933f238e8f9099f4e5", "08bc343db16e59685f13c4339ff85fa06d6e8d69d1cb254e2012f21fc8bc4a12"), ("0d65580cdacfc22291f3f4378e700ecf024f1b5123959f7a87fdccec914ba0a6", "29f0381988ddd356ae94212ed165e8413b271faf91a403aa12af574f7eb341ae", "0baf831b6e01b9149fa56539e8d1cf01b980814315f4300e5debd9281c283f05", "084481abdfd08377df76d3064ae5b17b0fd199c00c07eb9b844e1dfdf3aaa8ee"), ("2fb4b19df084b07d7693d3090f8bce4b0fecd30591a80cb9903e0e6c761b2f6b", "2f14259c89383fc2f067f099f71eca232ac901e728175341b20cdc1cb125d880", "294d2dc9126b047cbc4b4bb473f56611b8e50396aa1e8c4769e1e6b4242f4cdc", "27ecfc7a89901735775e49c7eff83f4ab7174b9006ebf817cead8ddfe78f3e0e"), ("1721de75608b304dbcef7f30f7f9a7200278caaadb4cba70b750673315453dce", "036befce7acaad7702f3e93d311429da241b706b09a8eaf255ee680adc400c99", "1f4ca501bfef188857fbcb008e6f5ace98029356ce9cba8c563e075653c7e5e3", "014360584d52ee252297f0eaf47130168602d8dc62298e3d3ab603bb0cf6f562"), ("17f5f113142354d44cc8bfe402d8278b7566c77852f34ffaa69e66a48a4b50bc", "101500fadf239d9cf8b20d56c2d2cf4a73bbd8eeaab7b9f2fb0fdbe50ce1b644", "3046d31f9a80af0d652f7f7db14306ebee7bcf7de5a4e5a1017a09a5e4ba79e8", "272a9ba60caae2bcb79161225febc88781a5f54a3a9ff98845505126fa425c23"), ("29e6c706b7de41e5486572ed5e5231d8d4365b45c745ecf57c4ff0e0ebc080cb", "2884b4c17fb35a8ef40a3add3094bba90b2c4cc8570fe2073778d30ad8c63750", "28e769e46270d87750cf74254f7b8fae39f8dc90664233e63be45f40cd197eb6", "14f63084abb429b6852a09b5d55eb0cbdf38765607ec27bd4ba7dd44b5f73a59"), ("040360a1a1134760b8cbb5ebc0559f310e3d4a2fd6c8ad82971f4ff90d08b568", "112451dc2433ccacb608c5bdfefb2682e1b116fb9b3fafd1e888f81947d37919", "12d0d855de6eb7a74773aeec9899a244bd625ed3836ebbf8873b15e18a2feb3e", "167b4f1f617662e0963ad771533abed7a30d75b42411a19179cf089035b1835c"), ("2caa45960b1599920630c34993a218edee3602713f6a58a5e26d389acbdc29f1", "1b290de7fc358eec68421c929db243fbc2c0acf060d5f4834e3917b5e074a268", "22e32a82e7de05c63aaf88c6a32541b628df47a78c2c12c4245cf8e5746689a7", "0ead13788c0873b486633d298a8b3a6e661e361b9c44c61fc44a6aa7427f1535"), ("30217c52535131474085abf269183f7b42d1af7967772afb8bad7bdbf90cb632", "1e5f3bebff9141c52f2826ebffe019e7fca1c4dda87ced9598905f5c5a525234", "2d38d3fc22dc8309a519f1b20092381d90eebb2672370f8f00370b61443eaafc", "05f265d63e7b5a0eb2d536d1b92b490f19ecc361b7b3c429913fb93629c72e19"), ("0af12d2ec6a9ba1ac6007f1ae35daf2a9fcdffc5ec3f885c31f27fe9134e3f82", "2e67c2588b97e3a4eb797f953e05a3a6c32270b2db2a4ef820c692288e1f5f73", "270e62b4bfb21ffaaf99959a7d9d6596c0f729a2d5247b021eb862443709c57e", "0ecb877520d60953fe21673775112d72a9182b129c7cd44c70917018d45419b3"), ("12548d0fe85a7ce9816ceb592c45053a140f0c82a1d73547ce234a42cad46371", "17c1c25750a7dab5e31fa7094549adb81b38bbdedd036d284752f2c5de339f52", "05a48c3d10a0f2b072643b91f9cfd610f64438b5a4218515d22fee511e2d2c58", "0fab3f2fd8da9c8663bd5dfacd1097508107bf79d18cfbb0ac671e6f118c9506"), ("0b36b173f8a88bb77d09095e9fceadd918a30d540f18532babc0431f741c8230", "1212049cfa27e35978fb87818b3c122a00456117dc424a24c6135017ef76a631", "066a1de42d14d4f63f840b161438da615355c32d3bcefffe3c9ab6265c68858e", "00e10dba8257aae4685f79d4258370b54b8920f9d2c130a05890d8961cbcf030"), ("029e1d38c818d8de1ead6e4d0be0f702b9d69308609c23955bcf4bc1a4aace56", "04a37f1ba62a64c0f23fcdbc95614a201a215d8dd33606285d7382311587ae37", "2438fa8839da3b63b1578fe25f10e696b56bdbe7ef616f8274ac9d604a9991b5", "0734267ce23073b799821a4e3ed3f068abd2cd6f33ed7fd3be627579fe358198"), ("25160d82b86eb0daf2af89edcc5a86e5f3e690b6d772ee6a0945ebce89567def", "1375bc21329ac3ca8c31c03b5feb48e339d2cdb3ac0e2503e9a329d11cd9e70b", "2de710225ee8164f11196417693aa15151f696b200c2529b4db8c74723b84148", "279b10af277a9462e38403bf9682c1d3b22272bcf0c01b12aa16d334ce1a71b4"), ("19176bb6115750640768d61093a58b47ce980f5d77c3169963d22eaaed47ef02", "0b17771a732babdbff13a14c5eb2a60b1a730583685f84091240abe2ca44de13", "02f27bdecbea466e42b7e44da5e6207118c2cf6b38eeb7f8c4c0ab9ead923831", "1926899b4f18c2912ee959d0b50995288b991b38d884c5cec2f4e3ce3a212d97"), ("1988dd49ae59cb1f209d1c7f2e249951fd50365927cb16ebb5a6799a83d6a154", "0eeb4ea55a026eb5729599d2f67e9e30397a2b7db595edd480f802d0871e362f", "00a09a801d5e0ebe8ea4705e3e29f6e3d97964dc59fe1d66f2628cae84f62455", "1ce49149fc765c558d452a9ec150441a8ee0a2149f63dd36381f1182b4f046b0"), ("05c7284b2258a03de38c32566be394a06f824a65499dd09551675cf3dbf49848", "0554cce9c869bac125136a6b1ece23701c4516431e132f9890194735cdd6034b", "04858a1b9fc943bdd2e1f19df163d0eeca82abb3b36c30dcb7d7b81789c373ef", "0e80c42c17e850d9fded341a1abc512a451a53f9daf34389ca6069292d46da0a"), ("10598d0a4898d7eb1675ae5f7ea2854c5be8b7315a1a0be19a0b25dacfc1a9a4", "1d2109fde7b877b2cebc5563601b82c84ab0a491380fba455d56c78eba2dbd24", "2e643bdb016cde3b7a24ccbc163e11a5dd816ed280ef261d20231b31ea78823e", "2fd3b7c52c67907b16879e5ac30ccf03f11297b587a1d9a737d097e9959fedcc"), ("0c37f646d65372f2d12bcc41326be542f1eeaf9f6074d9956cae3c39590801d0", "128aae866a66d251835f2d5eece563acd9137c59ebffc43f3df093345981a9b7", "2d362056d1e5e8977e23e967aaf543a73d5123d6179a2cb8d8d061bdc0f31c44", "1ac160864ee6a9e542111c4ac4fe2031aff0ac85b863116d30b78315cc133f98"), ("23b31c48f9f4bab2cd0dde7bd61bf328008263b9ec5005302c3dee2026deaa06", "2cb7dc3768380e36146ddb5086b9e55a2096fd113685603dab4f9da79ca4a193", "240856a2ad726db748f50e1200156c1689d650b38f00be382425f4b72549fc96", "215c4b3111ae820e32dd8806705a023335a610e0642015457ff22e285aa0d9e1"), ("22f144ffa149598b868c19a706d6914f069965845d5ab469ff93be0304662b3b", "12be443d046652f196ebc1fd89e50fc422e8c3cae4f71f5db12d51ed46c0f67f", "2117889feaa4afced9ab9c308165967145db566d82fa861b8fce9159424d3218", "22b96707cbae9434e07e17a5076258820f22314d2c8b700a0188d8bd8afb3753"), ("177fe16ef19154422ff1b77f88acdf92ad944753f3a1920e0cddbc045860c905", "1bc7dbb699d416a266756952029c4d31e7778f71d66e4701d5798cec6632ea10", "29833e14eb8280081b73dae77abcbdb512e204c98fc20a71cd7e62d8fc3ee90b", "105b7f6c1029aa3452d15304630bc9d90581d48840a42b9afcc9677df268c542"), ("17ea065e3ff7bd7f67d29ebe863b9e130b13bcad75f7baa3ab026f340f1ce56a", "27379eb9923bc098acd7bc4fa073b2171d99e753fb29ad984196412700cdf661", "1db0b53397237324e7a9c8157f82eeefb50b383bd008cf59c9df68bd49e0ad75", "2a647825046963d4e4c71aa174dfda388e5657ba274b47225723ccaca7607e06"), ("080aee06239c384042e981982c1175929840c7e0cf4b8d2cd4d22d989b483b6b", "1d61c06f5df59175d21f44727ac11842ce07aa0a2d6a004d41d6b8768c154a27", "1930103add7b568adbbb1560e4f0e98f33a64c3edff415fb06e4faa38472885e", "0999335a4e83e4817335774d76861238c9cde415a207e41930a941bf473e58a4"), ("064cc87eebb87a3ab5439a8ad5d3fc831e2dde16845fd2e28873990483f20e31", "046b82079daeb9286bb10ad281c40274516587a2970139c2b6e0f14cd0e5ead3", "26aac753aa8fc8032593ac9f950aad5132b34255f2e20eec975f902ef4873507", "0d3245e490704957d564c4a65b8fb24ecfbe943772a11eca1a0a9bb55f7adee6"), ("125ff00d1294774f7cc3adc4faf8148358bb2543d7c9e9a3c7091097900f0bad", "17f2925fb6c4fa9bfa0828614f7cae69ddddee59121eddf4f0eb2d5a1b07e19c", "127fe0927a8690b3baf64d86183ee5f919a7e4baa3055283dc3830af1fba080e", "20ffaa0a5974f7cb8f94e8310f9d9fa7ab257b4fc6eef4a765139db58b77697a"), ("114dd1ce564a3e0795aeb5eb531b8c3fa3d0a66019cee86f725bc448c0ea0d42", "0c464c9dde52251454c83de40c2a7f10d4374e3756184b64d26b426876383ab4", "14c015581b75516adfce96c4633e71342c6f30456ad02cb610a4b0d18fd82a47", "06497eea8c5cd81f211e0856045a7bd6b1e10cb34707eaf7f453b753453c125f"), ("00707a5876c025c61d596321dff1da4089a71f4f33e68a041a3876d8cf19e8d6", "042dbb72a665b23ae98e4af1bbfd4eb5d1644ee50650b3d47e89b5956375106b", "198a56bce6a1af2b094290394eafa3593c4126f65ecf90cbba26842139664e4d", "0d9dcfd1fcbe76d4a0d9439665c117d273f3fead0a632f311dffff30ae739a5f"), ("20551407ad70edd6b552cb60786e51fa38c8fb6bfe974c056afc89e9eb395a10", "0db878e0cef39513ae25c256c7c04f5b54b293e918d7459af7fa6f1340ad0fde", "0db3fb634e4d061922e0acb420902fdcd653d6e0e38fb35f3ae4802793493116", "0c8974d54dc05cfd435b174c53bbb1ad88ab067c831a315fe3ffbaea7e76bc95"), ("28f7d2622b86a298dad3da9b74cc3f150276c2c99a525fe1caba36f163a19670", "06b5d451e718f457fde809e6259868e83e2f8bb1ab622ff50bc15223f62518ed", "047535f1353e20ca87d400fb27c41186e21425b3fbd2e5c6c3a347adbd7c7122", "2523fcf165466100c51e9151c3a7b2757882a4da6d9515ecfe8260eae76a1cd9"), ("1752c1e8d635a840eee0e3a681a982b44099761745dcbba69e91bc94b0311331", "05ec36260683755aa59e6e67fd7e09c05036baa93366a083d5375e7baf35c77a", "145ca4334f98f808cd3495f2cae788da2d6117d4d11aa99fe500053c1d26c596", "1dd297ba6acb54dbf092975eb9b9e738063b7a9af855029d4d0e2fd5004a1505"), ("07626b68f82b52fada495ecfe68fd9a0823da600a87f9bf2eb403fe5f1803541", "014a38cf3b9874ef100161a59d2dbfffbd03fe7a272e199db1d7d39cead5577a", "21abd7b4ecd99c3cee27ac56228990d5c1d13f867db542246a23d584ce541399", "0f3569e054343223e3e85decd3caa89a04552af2cd7aff74694809682147a4ee"), ("0a734dbec07a754f566193854c923304d657f7030d6770e0c3fd17eb033fca12", "1716ad54a06cb3310073ed03a0496691e0b3f6384f7adc0dc2a11f7062916c2d", "11323c134125e888b1ee281910aa24cf078a8f320c04d01e9709d993920db39a", "10823a03e4b10bbc7450c52d51ac45f4c63e4c5ed0d1e3d050a2a26bd20e9a87"), ("2bc66f9f98c2ddc29121464b105c94a9b50ba3a0d459232a8f377adb802c7250", "127c0075861a70dc05888fd4b57af953409092db09102271738daca525423178", "302046b22cee60449fc8a10230a433618e78d5b3efd5521032ed1901268e1c01", "276027a2199796fe2d999d8646cf0f6e8ff0fd0ea5afde5ba6f5820c3b03146d"), ("19b8b62a0e8d603cc699f367a42dbb50ac728dc6b58aa099547167ea3bb615d2", "05ad5fa0f2f0275f060cb8d7886b39bc1704af153f06b490fe32901ce175ac5c", "2f8a644a098521931105d9efc9f2538932de47de52afe2bc8d11f944253663c2", "0548c947da9ac91db898bebcc452272a50bfcc75edbaf1eee7bd7b52afa9aeaa"), ("164c77183ebfd2f9887942da752845e63d65533c7b4b5e701b455bbab3195283", "2ba6afe8511288e5bc5d36ff73aa1290c3ebf19389ae34a82a45572b8d300305", "1db7d2ee13256f5481f3b58f26eec6347ecb4c48ea546115a9184c24919b3aa4", "0e7cb2de2bce4693708784ccb5537fcee3917b3dfdff4113fea0f5f6a8eb34e5"), ("115e60a439eac3f6be698660e9e1a4f4fdae87c551807851fcfe17c3a59af722", "2fd542754623eb4cdfc6acf1f0ceace788c8dbb0e73b8a4ebd097bddba240113", "13a4aaae24503ee2217f11d3dcda1be784bf7b0ede8880aad6704a0769797eba", "08326fb6a9dd713ee9c74b7a86b02511965bea4e2b9ac5259957d20939f6ec82"), ("21fbad68544757068b2b8527ed98b8d56aaf7215e9593fcb2e996e7434511db9", "27bfcf7e8770098a0cd2cebf3b8d3410a2aec6c0d90d1e60e9a9de9a35d287db", "03f7865a74b62d7ca95cc930b5c0636994dfdb20dfb04291482c681850b3e949", "2c9b8816f5d3304a35f34fadb47bf941bc1efe71be60e9b5b27ecf139a7941e3"), ("04b217332463658e8c333e5e483080216eff18b97b692dca00317c689b9f2cad", "18ffc048dd3367f6246c2dd4b2b68914f07e5bcd132cbec631907b35949af57d", "16d3ca74fb045863f622a5051029d6ce223839bcd1c14aa0ec8cecfd141e1de1", "248f0d58649ff44288f141cef559380c562978a2b2ca387cf9c56c8f79a1667a"), ("0fa259b1d82cedaa44066fb363e7709ea55a62b71b884a04191f4cbab2299594", "13a0882a2fdfa36a058f91cd93444f279454b898602c591d5480ffb70d5476ab", "1f7b6cbdf7a37ced3f570e08ec9441eb4e5e12a7bb01bb7015b26185e09cfbe7", "29fb45af5e349ce1d576c3a8d5102fc0b0ba1421ffec977f52c68030ec286ef8"), ("0a06d28ee905284a1c8cff26c73a86f023e3485d164423abc99125a3509d8b46", "22b9f3d9f397fd26ec0e0358f7fab919c64424a8e8574c331e0d79db7f9959a9", "0e8c4ea3ff25dcb786c2dc97b5e9997f03f458b86d38db5f6141e34cd625aa40", "305e5d1bbae28e2db1b515166c8c56e253f89c112006af6b53c995eb5a8685b4"), ("1ad6db6651bf38b319287b93a6289e3ce4df2a701ff2c8a8ccb92c13e926b402", "0560360f83dc6fbb53510e38b55cfac18a0e4487770d742437f91ee77efd18a6", "23f14d86a5e699a61fdcb26a52977b490a4b6d81e766f9308d8728fc2d564d4f", "13022a59bcd4ca11be96adb436ec60ffcba0e9b3ce4bcf3ca840d4cd46ed8bfe"), ("128e87dd7b4f5c673765babe3bea1a329b022103ebb38fe9e9476a9c31a31f35", "011ea99c511bd463387a16373a92c8972d73cba237d8a5f85ee024e285027cb0", "19c81cbd66156b5b03f355e0a41d727b82daf54f1fc7eea0cf6d22414c2843ae", "22b49def981bfbc2e01a37b3a614ea1ec3c6cf479424b81b04ec0b56a03c97f7"), ("0159888ba838e5c4629dc6077a03048953db8b329826daf113a6b0f22cf0bb51", "2f2ca9557b5f739890d599294ea309e5dce2a2bdf6be75ca17bb8d906b3aa758", "1a0eb39ebcce36033fb24d2d72e347a302b9d2359a19f2d82d41b386b0e809a1", "01cd47b0849f15dc4a63e42e23dc0dc9505a5a300f429c0ff9831d2ce22682e6"), ("280f3b77fa27b8760d701aaff7dbbd3c814bb3e2e80fb9114836f7627e6911f8", "0f5e0c59ca2e480cba993a149346070a616ab67758cd01b3731dfb5087d07c56", "0619ebbc1363b06693e35c9a3dfdbcc7bbfabf6461fb9c0ef0f621e2bce88a16", "01c1d954b2afa755ac8d324fd5fce8e361709032e9a38a8bbf2bbe9bee91c22b"), ("2dce2ceeed7e82ced5bd6571adf2b9976ac5fd6a004523b681b3a05ad8c03afc", "10a9786a3b4114a923ed3511a1c7b232cac6d36df7f5a53ce2790329a15c34b3", "1e27fbea2e774b8451cfab246ae77a5eb57892ff607df103d404d457ddfedfae", "087db7be2044867d7ec2a669ba07a85d1858d6f9b74554ad40b3415e3e281d0c"), ("07184dc98fb623d4337b4a6f02d25c106ceb7ae0b6a477db2be718cffd1069ef", "2e5cb685deb27ba55efc038f0409fbedcd6ed8f9faca28982ebaaf355c05d0ce", "0be04fd90c49efe194bfbe4544b5133cf250f9a74be7a94c49668c3d0b94fc46", "1c3d935820202139262084ecdd05a9944c611fddd9054788007031f47358370c"), ("1bbc6a6b5f0399f556149d1ee227077d1a795c1798edbb2333e89be00f41e8ff", "2e2aa32477ccb7c9b495130dcd114d0e6a3a17ac44ba23b5a72b0242ff8c3a2c", "00965dbadbba5c6724dca7687be1bdbe7ea75c4fba0a90abb487859179cd7b8d", "0035bb2fb7a868e47478dae576a2d26f7f4c46f47dc12517e74ef323a14e754c"), ("0896049fc33e44212d7d6ef61ad8430eda9d5f067f829f313eb4bb138db6691a", "143837dd56c7b4f3ffe22370d7232178e99a1259699e0c3770ff6317446bc1b5", "293ea183c5ca758a3e441c774ef31e9a982673d85143599d1c00dda03d03d216", "1cc6bf16b054a7e0abfc2c0e2a901d7297a6d7d82ae19d3e6fd1881bc1e194e0"), ("2e9b65139f2fa1e90f16e0ee6eea56a3c5477634e2f3fd19fad21c7266c1b2ee", "2a6eb330984a465dbd9e983a0c608f70090a87e835dbc0e1e8bc3e19a3d6c319", "2424210c6f4f0049a0f6aa867edac2c754b41dd2165a231ae551a7dc11d11e8e", "1d8ecbba3c06b747d16bfe789011a6266dce32e36449605b8c9c6b4e0b4ecf87"), ("03bc2f1b5f1a711cc35380d913ae4a37e55b0064caf8662bc538fd4c7c06e235", "1b850ef07cb959d127389f6557a2d8ab9ea25d2a5cc4381e7900a4387f281551", "250dc771d8f2b6aa8d2b0a2ce0e855e592a06e407292ceeeb73ad5f73a8af47c", "16f6ced4fbb71af14d0cda58ce9a03b326d6c23bbc99a8c1db6a2ad1d8f5ba93"), ("11f301b109d00802b2981c6bcb7d6254caa65044f0828495e7e5cb9c80564a9d", "1e26f7893f5b35831dbad251e1c45d020b6a3d4d617c2b540b1f64fd851c17b7", "07c0e1e1c3d868717ef1cdabd37e02185d3b13772668ce71ff9064345559e96e", "0bb83717ccccc87e90298efe4337f5f93c85388a5300936c488b13d38d4b7c95"), ("105bf09bfd69cb6c92c47378b1a6ceefdb36f57a46aafe9f23dd979e536e6f03", "2f52c0902d1530bb132c01f4dbebe026047eadadd24fff30abc15ade0f823959", "11e12d993408507d6dd6ab00d5f8b923763f8762eaaa51df3b13946e87e9d264", "100aa751f085532a11583c62fe1f3c6b5938c2c7ac44886473bf2cab1c96a274"), ("20d73bbc870f47a704c2def2f4f0e73a88b246347254d8305566df47b1bd1842", "2e373d217a16141be46ce43d829962f034e4d172bd46e14b4821bd290e968916", "157f9eae6b189d88ee8d958d6e28b75be173c459d82d6b90278639cf02da121e", "1a8df4afe8ca7027ae80bee3f6b012aa45e6adc4842722293c0be49a675e94e1"), ("14b55d69d804fe7fd5aff0bddc9bf4d7b22f800fe0cd6ea0a344de84dd3fd858", "29116a3c6d91a9d49c1a7c186d0246c63d128c4334cbfcd498ae00a76cac77b5", "0a83a4ea7958735cabe9dde3a83b329e3691c39bcccaaef84eb68daae2ba8cd0", "27a2d3d028028f66fa4029caf967f9652d3ef4816f72ce153f5dc2d6d57dd748"), ("2f70bf226c661a0b50c5cd2d3c1558addb12c408919e53403bade48c5c43b787", "22012bd87f651575642f14ee57b9663809e3414004cfe2ad6dbf03a3540a481b", "2a2f12601fae69c8f53986e43c19526533423c26b9d2b913b42890e20dd69859", "2c7121256eb8528717c50da1df21ad248138d6b23953bab0c38ea55c131dfe88"), ("06dc430221fdd776d8599e1306a5c9c7c787a4e6412b8d40935a2621bd8367dd", "13ee707ba5552c01175ceb43a9fcbf90cd946185a349f98dd37d2a83c6a466e2", "0e3fc94ee382675e0ab418047018a40a520cc3badbdfe964efed938f0881c16e", "13e8288039939a5ad9581b5cb1d8945e3268f9bc245f367490c686c5aa7a0f16"), ("2713259564694d6c8022c895a3d8b8000eec01e2d6b18e5d1bd1be693f11fd45", "21f4e187c5b891668fc06374a18da8b010811ef5d0a3787444fc35f0eb14e3da", "22c38aa8e798d81be8fba63c509a4bea3e6d60ae6ed61efb4476205d2b6268c1", "184663fd4ed808d53d78be62e29cbb75f1efb9c30d8c109dd80cc510ed7f3939"), ("115e07ba2467eb170713019bd21748ef78d631fc9f98c42e5388536a4b5c959d", "26795796aab094aed21a51634888fe7d30e504ef29570e01c24f541f9dfa6763", "2dd527adbe3172187c0182dbc48abae37b18522dd54f4da74062e07b1b0ff93d", "1fd2f78c55d8d862bc0efe0f97b7c6dae8be67c2def05b5131c24c295e5199db"), ("1b4a0ce318e7615f63103f83ab461200bf134585b93a69fc5bf9098e4dd1b4ed", "2b08be4ca3cd752b45350adaec30ec23c6a256fdabd0d0354d905e8f7a4f97d8", "284aaaeec0f8454f9041a7bebd37a091df3aeaa8445e736581161062dd5b9460", "0915f96960c07bde2a582005df13fccc87b7e365fbf99d25955404938f849b06"), ("1dcb67d107cdba67b966fe69a502414caf38a2099c2a4c369b919d912ccea393", "02f082a1647a36e4a00ee6aeef86989902e803f3e0694407e54fcf62e8ec06c0", "18d6e5f34e9458b231f0f0fbd20d78bee6ee9d4f12831d34907c1a3ae6fa48ea", "002596618968310ff198996c2b87034a7b5bb3356b1edb86e4c12b2ed7a1e716"), ("2204c305f913b105d857ca2d12623f57a030c4b9c9c2b91c6d1ffe1c1b3e40a8", "0a15bc2cff4b3e711a34db1953c7d86aa8d02046cd213e32e9c379f6f26b27cf", "2b5126c489adfb8c2f072836cbc222b7842580aab22d0a95bf698a6b143303f2", "200eacce81b44e84448a3a541adca8ac69f9a02f90e735942ffb57ee99106305"), ("2978b57061086a9d4ead5789f2d85b92715dc539291f680f485cff0f5753cee8", "1e9f7be191c4d2125dddd919418c4ee834f1ca99defce3c3506284024c302574", "14fe273f325575e25dc2fba13ef6344eb1b3fe5231e58ccf180ed3afc50a4870", "1ac423fb91e3a591a7b682c7123be79df0976d9a17ec55e1cb46a8fde906f112"), ("1f29f68a9b8bca67af4443ccbfee4d1c9e9561588529a24e8c1dfa0f2a056ed2", "1152dbfe64faac29eb60277cd6f7836868d12afd0f505373aced2e315a3e3bba", "2cd765b876ac90f031c40b5c78eb571a7d8d4a012efb8a1cb83d1d69c0088572", "065fd7bb6988dcb0ceb6261d3f15a82057a84379baf4f46ba36955135e4e9842"), ("20e958cfdd399818976862f4c23433b3e9e9a85873253aa951c14246ec5635ce", "22e79bbb680c7f10068f5c1f7ad99140878df9562ece61483c8a35b7115e45f4", "1e65e72a3c9f4233985832abf80a13daf8a0c093fcf7784fa61b949e46689408", "2b0ff589d52e84ccf6f23e4f70f342c9dacd170cfbff06f01a2c9ee641ebebc4"), ("2644a5ef7b8e86c2e40d397a5d28ff9b99da7d8a1ea5cc3531f53dba1f612e48", "093919e0fb8c1ef42dfee67606350332add04f59b07d2b33ff68a2871948b5a5", "1eec15b68698a90221307a3c81ca7ab4041b162f34fc9ddc5f5c3934c689284b", "1bcfc17734d943abf58695f4c396f1e6962672b97439894bd2c3eb890cd05b60"), ("09a6e5e5968bde8ac84d112c4bbe3fcb58c7028038e5665b3e0342705fecd0fb", "00d538f25c747c0709378cdc144d4a455840b529f5c04639ad2899278df73c02", "10e5bff38a0b840a732a2684f697169833b443b0bea23dd925dce841ac9e4ed6", "02dfd3ca4e63bdb5c6c82b1771339321516925188deb725680a8077d5c250ef9"), ("2dc2f85a9bb18d51d5b6c14dea7013b7e6441a562bdab5dcecf15b1b356fe16d", "21f113deacc86e4161c9c0d519fb5962f81ad4de90a68248084d10d9f2effb57", "062b8455e6ef8c0a289f5eec803a6814a470bbb7e3a389703336e3d5c97368b9", "1ddcb5581684d9d10f978a66532b942f80b2edb803517a6b23925e9e3bb9b191"), ("16afe762acf58d5f1182a35587f06e2e70e68739c02ed8c32c483730f480e700", "1b5a088e407f6bb4ef432429263b909376e710efd059fdb8d655c1e7423ad113", "08525270d1260ffe71c00fa8517c27b72c10d392ccb65ef2bafd61218dc22abc", "1a3811ca8f815aa0cda267bafeeed4295c3ff3c2dccd31c3440f38a3db385b31"), ("20057309cc769da58bbb1d4ba44ad4b85e0daf9f30eca1d56fb1c2b6a6e685ac", "08b4eb0ae5ff15bc25cda5e7639f08119270967f7c3d6daffaced13550800e84", "0263244273f2db82fb77e1d80c2afb4b055ab066eddc25a3c3238e1178e2b602", "2cb59eb35e16df840c6d51cb7cb0af5aee6a13f83b585902bf41be2ef961d77e"), ("118fe4cb013c3e68b596c2d16d7e93dd22776af3cd43710d4d97195e5db67073", "2089bf47e7a6eb8a18b8909d8f8a7ad198130e5badcdcfe9f3fecea69253ad1a", "15f80c5bce5741f98ae619dc30116d8300925cdbdcf6be69f926a24d16e6dde3", "16c4ebec456b8e3ca622dda25f7899a747a3a5933e777846cf2f85f8b74ed275"), ("28d80065e53d677d517ba15773c1d1e9f1f5142f0770e7c35f78281e12322d09", "07723e8a421e71d636230bae1fa2b102ca14023e45da865d89aec31639c37743", "2861f38203e5a5b6ce5b05d345be635c1e3ac6aeb815dba33b5a7cdc8239a550", "255b69cb959b52da6b8668993dd5b7706f22f931d97959ff1c6823a9357b3017"), ("2a601d04a73da7d69cb4db10d0bcf8f0156f8a05f61457c11bec303d608d8c64", "0c8b64a4a93702671c75b50e8b14c524c7e688008dfe05c0b7add5a7d857dc93", "13abe40037819bed4fac8b725409056b12229af0875d5612fdc73e99cf797e97", "10b8312b58336135f726e9d06f97aeb1420a0d4811553f25b3ae2d3a9c664e0f"), ("22a6fb219f918f1fd0716b180af8cc9f0f46b35356e4eb8c3a01902c5cc70c19", "1ad64b3bd0f14ca3b5edbe357d09e346cd0af5baa4fe0fde8e28ed5ce17b2b86", "2b474a2bb0833e90f8024a64f6431d9fa66c9a04b5f058a1d24870b9a862be99", "16dabf380e8579fe2ae782ec64f64f32dbb2712417735e40d593df6d945668ce"), ("192763b334814bc97b46f2957555cc0dd6a1533748906dee2198fa8b73f09a20", "22ce4cfc315d23425654e3f91438646cd8a0a0401e32046edf4b5c6a9183baf3", "0f2a256f1731c337a7848b910569e006a54806012140d9aeec7d1fc1dc5a690a", "1a713e117f7793d88f719445cc16996f1906f6a2f91e8c2a9f2deb17bb7fc94e"), ("1ebeca8bd46556a05541afec2abcc46cace1a640add7229fc92aa9dce2a7e088", "045e0e25aa35e31f7cfb557931de6651d33d06901a1f3cd4a4009bdc33ee9dd8", "091b698686fd2c67ee7fa2cac9dfe7bf8c7e062ad037c59a88d64cd1cefb5810", "1f3b2678dbd9b485b307faaafe5f144e4f96b41c8ec527c7cb0a12950e397869"), ("2751be645213c4005bdfec9ffd38bc672588e428e3552d897c5fec14798a9955", "18366b5cfbb6d8a299c48ef493b6eb6acee99c27005861b553860c9ac22d4f45", "255fb4eb5b76c648f536ff4f550473dd9ffc6c3671925a04bb9447bf4c1c287e", "09470c3878d984350916761eaee2e2b19f5b62164fac8003cbd805a9b677e4fc"), ("08acaa78e3b116a3703081311781f84f08ab5f6c39acfac6a045f2df34b0d765", "305cf305c017a0866ce814b372b215f3e58030c5f828d024b862d3d65cee7a2e", "161595ea3e2a51a344182cb64359e63b24cb725089ecc916c3d1bc2c2429c6cc", "00c7ba8fe66f7913b939f44fbe89a54676b91f9a4a89b66d9adcfe4f5d5a2a9e"), ("19727195ba98f29704719d4ff691dd9521389dce7182a6f4af33a315c0e6cad6", "1f0102a61b564949cea03719042ae15b19a6407d0dbb4607e34b8e7c72dd4d71", "06e11d623ecd66c3ef2b3f349b630fdcb3235864f052cacef07b9765ef689a12", "1e3c2462d4ae56921afa3531bf820afc5152a7ed3e942675ddbccae35981b54a"), ("2c82173aea2e95448469a32ec30aa1bdf10c3da64d77253a6f9a1622ca9d2206", "134616946ae4ddfcf4a0206f16b9738b2962102bd4fd0bcb3c195f1c8be04f8b", "0e458822e18f51c879cfa02db55641f87c9d68ac124a4156f960e1f4d3e05d47", "1412e57c1e064381697740659c83be50c3729ce2d4e90141e6390a2ad521337d"), ("04cfe58fb86fecfbe0230d3398276aaf76ec95e92d08dba07f87a410a071a255", "01a79023308350d68db330b283eccb1f825845962dba4720bcc03074bf42ec87", "2787fd4630116c0384c0001a58fbefc5c4a5c21a9e39d5ad479803d8853e3ade", "136493c6e8334602bbc7cfc07cb830bd46076c358a0fa4823081e41b93f165d0"), ("2b33658a338344ca3687da1238fbf53d10c4e1fbf811a21d4083cd460223601a", "131a77c2cdf19e701daf8bf166cc6d8965f966f64811859042b38259dde44e81", "0ac764f02045d2e493e13f2328f9148ca8156361355ac1a1df00031b43d5d64d", "11b4e796f7438f7cdc95f013081db142725a6bb166e304d6b27da02cbb78e9ab"), ("0290ea6f2d52f577e5bc4cd74d73b6f601b79c5a6d0082fcccca3ed042a0d0cd", "20d60944114c76714a9e748cc25d59d7516a0a3dfc81b288bf409310eb362af2", "23931e43431d5b6dc9661930ecd4b070cc41dfc644c4b8802abdbac81d283637", "044683b512c02020105e90f3fe7fe5d90b9a6ec8f387302084c5d53e74fc9e15"), ("12c827691ddc5607c92f1ab1938f3fcf1a63676d9cbd1294e5588dd21df3b79e", "3021f0850c125823315576516bd4797b20bff88ce2c254bf76fb91b6c78b47f0", "2b205c61aade84e6d24f4d6448266b76433c1c383e9bee5f83bba1f9c429fa8d", "15916fae7e04d841564796c77ffb6f34f654a7c860614d7df273b8deda76ca0c"), ("26b8cd8d94df8d5831014b94dee2cf8183df3aac33a8af76ba98b86d1875f9c4", "06bc8772b08f543328192f824d0f35f6ff2610173ea59aab35732d6b4886a217", "027cf43595657043966fc468a3397d9d15e68269134834c7d20ab116d0ed4c34", "20bf6266ffb688c0a9dbc859b1cf5e23e5a506d69fb367ed66b4bce15259c2ce"), ("02b59ebb909c5501857ef5e82652e778a6179a586ce7c0425d25e3fc24251e77", "21d28dd6bb3c2f7a5de57ca93e05bd0bfb7c69890d45e058d8cf1e40a0138151", "2b5d5fd3071393164eb75954946fba906169ed1a8e55ecfa951ceb1668da784b", "17eb78dcc5447da1753335127a9d9b928f84794143ed8ee57cba07c5aee1c140"), ("2ad5b670a2d373097e6b1b6ea96f2d535c686a8acca0e5a68ceafbd30cda0688", "092bde8a050befe3bea12150475592e5ecf5f55a8a6136399980567da9f5458f", "29f079ba3d61b971efb36ddc87b6812b122dafb9d68b7ab52b50b1d2840509ee", "05a7381dc61e9393a14176614dea2264f5ddca694b6a026be5e72c2033f6c15f"), ("1dc7fa7f44bdc371734efdca0bd20af2c6ec07417da0090c2aa66c77ac2e77a6", "1d7bfd922faea20139af134aa0eb15ea0a421a418fbec131992430f0ad02baad", "12e927a5ca69b0c064c9b8e7832aea80ddf8fa1beb876e2f654333a4f35e48ca", "2c1328dd5eb13711c5549ead7dafbe66d171c8d36bbcb92dc4e19598fc712a58"), ("231f79afae3d067610824de2eb3a2866d3492b058803d8d69f232502b27f2bde", "0872ad440465f3a897edea3576ece7cbc9b6e2675449bc641b53507564f195e0", "00bc78bffdbcb7b050fe82b664accd44413ee60d0840469f788f33026eae80ec", "0786a1b89cac4a299b06a65ca9c7fc01f6fd5cb5d3f61b201af99fde21963f15"), ("14b4a7c106b2d01e2c81219e87fdbb8286fc2b7340e10965753e858656cebe2f", "2b30bbfbe38e670b3c0ccad78f8577bfad32426476ec2950d6f34d9ac26b74e2", "2d44e56198ea5bac79fd6fafe2fec467711b1310ddb8bc174bacf3b1d31a1196", "0d88a2cf5c9fea45d0748941f87566e4b4a03dc1b88538333f66506f90b69679"), ("0bd1fc12826756276d8cb7ce775f76050f4cbb068275f50011258e013cb22b02", "25ac7fb0ab2a49ac030d561210583db1a90d201da64529b741a33940402e7572", "112ebccf828604f7f83f997cbaef6992f9b3cf52332bea4832e210228b84240d", "2a08bf5b7fbf5bf8ca9b6bbe0291ad713b4ce1e1602e0c9569a606d54d76b764"), ("12295e9d5adf73822a258aaa858a879f061effd9f4a8c069140c52bce75c3ac3", "139323f133a9b66b5af322100995217de36fa45d4dd0c95df326371ad45bcc43", "1b9c54bce18f40b1e82c33bdc5a569b3bf64456c9bedf6907ff6ca30a23cbf1e", "123513a4c7256226b006a42b722a4e5458447cb717604afc30d2171417fb1ccd"), ("07c28262fd08a12ff7d00fd6c5480339742af14989f1e8cca707bff890b58634", "25fe6923a28795d8c9f5fecabeea04b8ab5043f2969979152fbbc3a8032b7f2e", "25d6187eee5361f801193dfd8c0cd660483916472ae64f6570409d6247b29005", "1c214eb62abe35c9dd20c8daf9c1514fca636a0d198d6c181448830a18f7e75f"), ("218966fa3f9aa4865c4dfd288d8eee9e5a4e4f59c9620c692922c957132ea6c7", "185459dec95281447c1c8de4f2119f16d047dac397f782f8db590e8c728a708e", "1053638e5d0e775cb1a810828f3027abb0f73e61c85147648bf02180fbb71e7b", "212b151110901e18c7d3a1ca6786c7ebafbbad21cb33cdb4513347b857cd57d0"), ("2bc6aa2c8865f8b9c42b59370136762d0a91d3b0510ea050ba289b3c0d20634f", "0bb868b789b41ec8569bc8a400276230b9358e1a0b7e1dd349b5195cfec546b8", "11c427c4bcc6e9eff72403a23b2bc90462dcaa28d34dba0dcac9c37635e16531", "24f929920502df2cabc8e8e017828775fb5d2ccac922c5522b27f3001a57ccac"), ("1ae6fe69587c4e698b18818345478b9360f7932cceb1a703fadcfa6a65b80f77", "29b83d48e9c82fb54dd547602f6f3c4e29801a0f06c9d30e1b5042ad52b6804e", "2410626be03574909da6b0c9a9e8fa2373db06c05f8a3e2095fe6a45423ead59", "09e3c65d0b1185f0762061083cf1eace4a8178b86669fb26ffdaed42b6b42dfc"), ("00efd6c73345ce60565b66da6f808dc6d4a5331ab72a6b4bd18a2d3376ffa54a", "2c63f89bf19493e290af84e3551b625c86f3be7c8d3a6e6b1c438d5510de93a2", "1a59cdc9e97111c0c85497f9dfe7ec83c2acba272d7b9500accb61541b34e1a5", "27476345a2fe17e39568134703006a7933dfe48500b093c34682bd25902462e7"), ("0f270622b8fd99a80c1cd13c50cffe7c4c5f97b4a20ce22c9a22b4fac6053498", "07ffcbd692f70571e4f56237133b965e95cae6442cbcc1e5798bfe2b23ecc75f", "0f457832e15d1bb56daaace830ed36e9e9126e84719536e5cc1750e2af1ce445", "0055b8d873928f35cd38a104dc0f79b70fb270bf4c1d8f9771045306fd9f6833"), ("1d61250a004f2326c4d174891ec342de564ff3b8e4971655c08c06389f6923dc", "00749b516a6c9daf885734302ef77310feb4d650c88706433f1a864064587048", "05c74b573f895750cbaf2ea3f6c6dfe5d48f8e8e5fe1517f9c752a9e8ef53238", "045ccb04fad60c50dfed2c14af9fd606d22b2ee94b65298fd481524a7256c160"), ("1bc09648eedd5cdf5fe754012b5a6f7c335dad993c43d9fa29ee05267a3389b4", "06be0f5b9eb329d1a693ff02cd347065d7fc34dd070591b2d286eebad1c90ec9", "17cc0fa9698fa782309de1fc5a7a3184adb08bef4d5a893645c079359e466556", "222b47ac312ea714b362f1be557194e2cda7c58982949c40ae89071b3e99f8ba"), ("2a4537f5d490a6c50f89275a9b4324ec6f4bab6395f75c63f293d3439f0bdb86", "1be472ff784dbe8f750f87bc689d19867338dce33a0e4edf626e6e23b387f5a8", "28c334b62504df4c5e4aed433aba1d8551b68fcfc7aaaa386c6098214dc2574b", "277796f875e6e4aeb3d9ee3a9b8d404c4693146d3c4fdfd189ba97330b96da52"), ("2c03e54ab7a97a415e4972519bfd0db63afc0bb071be0fb1896b6f1926732876", "0232d5c2bc6aebb78ab70fbcddbcf1f09d1a9b04bcfa2c2be2360cee3aa3a2f1", "066997386af61db25653e5a88ec349fadb393d76390b58efc64f531a7004e487", "24e8aada331d75fdee61e58d26621711a6c287cbc7746108725204d85f9e5300"), ("267e221ed69a9b313f702e2ed33d4abb02153062e3e15e23c706ea2734f392cf", "1b2c67e5d9fd4c814f5a218470683261c691057763adcf0dc837d7c9db2d3757", "1e0e2234d009aae3810719e4889e0ebe6f4945b83facfb0119e9b778c972fd62", "0878db76e02939d2e9a3fc4cf0af4f7e544f721234af8a91d0d9aa8693b7eccf"), ("0b91f4e32aac9bc3c616aba31844e15cb21a0285049432f62dc09df5976b0935", "02ed14b270824566b5299cecc2b1be3501fa69f26d2a8c2387eb5cfbc8851b6d", "0c0e96a5bc9b4540443a8c592f0da1bc4f17ce543c7bb1d86e0f25d16ec7827c", "185d638ac55507e8c3d4540de909d2b9c004f60f86630e4e15e4bbe81f5ff764"), ("186ebd78a107458f94493946a94a122b57a12234721d74ba2a2a05a2689b9df0", "0997051d6b8d69514f98e80439d54a1b3df9717e74839899e9f8594b1ed6ab32", "2debbd2465fd679b611f2d73b63e2148f71a488a26d047b2a86388fe4ac3cc69", "163ca18f09785881effa366f15503a3c4365615c8ce4b4193c71bb7b21d3f1f0"), ("027be788d84cbd3f6b3d8f5477eb81785c69cbe3a30c08df25ef29fa698b9ef2", "08689c32ebcbb152930f10355a3866c2cedd5a2ea75f29048da1a54cd9ef4ab7", "00064f6f61f0de2e0fdc35268bed8d8eb65c4e2d8c9e9d07366f6af78e1b59d6", "251589ee2a7503cb2c4d21d3661e8e7983c08cba08d3ce5b7561d590e43efd64"), ("1146f06e99305e303e8a70d15ae18c00465c8171ffdef43ccd68296a1289a73b", "10af92043af589aab869d2426cfe0c795e02334dd54398ced5945418e081f418", "09dfcbc174845b0103e0c6bb91bafd63d359830826cd891ac6199152fabc3a77", "0827908eb5999cca1af0897b42247513f51227f9c939669f3c58d002c8acfc16"), ("24c2527cf6d53b5421fa6002e795c9b7ecbb88f475421dd87739d8a31866feaa", "187f3a7034480c5fc802f6d73c311cfd50644e44c8c5293a8654e5a3ddd93b49", "06e919e486c5ef1138d6366c60cde2abb4027a1d9bfe50e0e7ce37bcc5a8a2d9", "1fc354ce38f4c51218fc90d3342c79ac9f1070e6cb5150ad1259f3b776c69043"), ("15c8368733c37194f4d6b753cb5354b095c0ffa2e645f0a18de26d4ee29c17ec", "0afdfd62796a66f4c52ede92ba4fd6ba75dd703179b85244cced63b4ff10bebf", "2248b64ba00f2482cbea07c08736997cd78c2ece69561cd21f2ae6d598860c39", "24c8299e13af3f1646d4988d17a30d2e6c918065df743e28dcef2232f1918d50"), ("03ec55e5d6843c657f7fe8911bb15fd19c281d0a7421dea76d2b8b67c5181786", "1559638216862920683362a19deea4b965921d6011df903b182b720f7538c5e8", "08de4ad0a46eae61283d6b233eec0d9173e308d146c0e5ffe9a536928c912c4b", "1f03fadd3496d9b13480d6d0164fccc3682528dde2384ececfe19c70eba4c5ca"), ("13d163425c0e431923198eab6e294e14bb47262ff76eccab790a62e61bcfca9d", "0065021d22bc1ef8958382619f9d8912bc61ed7342543631cf35e62b890f4886", "2ca5889b65d4674aa3be81fd0078d157f672ca8102380872f25de866b3cf0e88", "1cecb439301c43c1bf312e26870bf19d108e18cfa43761d757f97073a6c94981"), ("1b38739f0aceef34975cafc7a71eff5a966e0a3f72085210cbeb719f44e3bd1a", "10cbba6f6863c4b5a2143e138b14dfee5e8563bfdf97c4898cfb216db099a6a5", "02cf366e5af4934e0931f8aae41caf6db9d404f69d18e00a837a0c03469d9513", "0e8327d6e7db266c7b893ac7f5aa93ba0d27f79711f7befe6fa6a716c0312f7e"), ("05eaf30479eca4d3e8d63b9fd772befac3d1809696bc0f1693321f79900f55ac", "05aa3af76ea71d0a91c1a0cc9fefaf0f0ed6fd60c6670332dfb80547fec734f2", "167922f292a82fcb6e7230230752c9289b167f8ae9c5bc528f17ae067b95811b", "2c92107bfb5b0238b5a13850d806708e791f8e33fddae3e0cea38bc18b8204a6"), ("1452065df4f5442b81a33fe3516a6c99e306a302d8be2bcd32eb59f971ebc0b5", "2a1d8932a30ff583a0e78bb77a150b18d94d12c6e91313c368f146745c4acbd2", "0ac9b71d64c5b17c21767a8dc4d2758e4effe50ab7e516285c878aa6a2075933", "18bad7df9a09645b08ec3a130864e2a4d53b606e79755d2aa5faa220d8330d56"), ("01c30d51832658c17d53d9d620f98728f8f151e9f4fc4c2189f24e39c33af8e3", "1c8f1488c7830a0bc405932eb74f46187999df75e9a33d08a9677feafa2af032", "20505bf1d7839919bb2bfeb45a20de90cd8e43131eca8312d4fdbdc67712f419", "248db94e2ae177ab8633b0f7e11adac555329a472ad93e4e9d787737ab0352c1"), ("28c4afa037668895b0da699904635a5e79f10794ff3d63a038f96af7e21bd842", "0a58a0a3871680ce9dca5cc51131a037a16b42b1369759a6249ece91c61450c4", "2883953ca04a760c52b389f6e519c473cc0342999cdbb114fade4b21364f376c", "00e3e46cc77b37232ede7215806ce3bae383eb615f47dc527976042721b1dd34"), ("12d4726547020b1275ebd47865a17032dfc8c9422198d94974ef5e443519a55c", "2a25d9b9c2b758dcc269bbcaab79b23bc29ff81edce9694baf9a47a6760a555c", "0d167458659cfbf7fb253b5e9b6cea720946f3111b0db05e9be66f23be0c8d53", "23efa3f5febfbe86fb8ba3d5d03c6ded5ff9e3468b237f1b17aa20e4a13cdcca"), ("26a42855e600cd9474c2b4145deedc511c7f1c14addeda20cfb63d7bf3766106", "0b17ab57d9359ea1e1f170702f7584bba386afe52b4ad4e7df65cd0ac8ef89d0", "07629793997296c9f08f20f4c546a779a2708143032d7e88d6b73a1e72b63b8e", "15ed95ef32883a7c5cb96b0950df85c4005969e762fc09bc6e2e559c4af19fd6"), ("004e15dfd8328a297c21610a3cd049b501d1ce37c90c1da4ea822692cf904e79", "1fd277153f67d4c1863ead05c7ee8a343f8fcf244088ed32dbbb1e5206217224", "09f517a55a7b0651bea81b31b4822998434d6d0cf441a0ed679d833906070003", "2fa06a32b2a1084c81e2c01c7e0108b24023a8f9255e71df2e2d2698a7898409"), ("16ceef120798e0470c82af8e801e284757511baad9558ec4d356d27191362e70", "1d4bd7ca09c018edca5abe79181395d388128e56b4590f2998a2529adab3105d", "1365fab2ee03f06ae7b52e9b3710f9c865bac91583ec62005d8bfd408da41f8b", "23e20d2d07a4404ad03a1e003575f4252fa5d1d6ca0987ae799d31ff04d8f16e"), ("233a82f712ca642e9c457f0d8a01dcf310bd6dc711e71feb1f91c7c0941ed9ea", "1319519ebf2ec8d7a694ae6fb904794cebbce2855b2170c94cfc5f5039bb30b4", "1ad9c1c0c2d4cc63e9fa17d0dfabe9bdf43a65eece5d18ae02c87314bd4025d3", "15eb1bcf4dae19718377d5e7ab41b29155d4bb6d744cc46e865b62e69ac01d2e"), ("20308d1232e765139a3c4d006721ec7cd7c0972482b7be9cdccf24807410f805", "106af2fcebae16fa15bf60062725ae51036ca179aca695a559a18bb8ff79d1c4", "16872e1ae0d1a042c4f96711ab983ea02fc0f5e5cde02905a995c4c504d4b96b", "1d6a33ad5f98b2979a6c11b7492a018cc5e77a6cf9382a4c2f0cd724f1efd613"), ("134a3a1afe5371bb848adaf98574a9ba57fbc1028fae9577a5a0ac3f376387c3", "2962adad0dd255f7768763f4a6b3dc9b38b7362fb755c64e9c9c65e0bb621c19", "0b6f23b6e28bd609a3b2cac65d98476345abb019fc0598cdf28c2faa8ebfb66f", "0b474dd9580022e868425721a478e28be9891069be8b7d4c66c88f69d89a48fc"), ("1bdeac510660d4c13c819b6b1fa37897e8ec5ebc7d3131126232832861de7955", "137e163687c279f650ca64d9834f2b3a78c6b683868df321f8ebd83457f1923a", "06cf383faae6a8402a89492b07ab1d9e3b959cec9181613fe61d9053bc021548", "258875d8abd758059e68e158f39e689b1b68b159e0f0df0377ca2b2423277170"), ("14a8e299b1a5200f532dfef101cea8dfc6d9e9ebaac423e1737933fb44692b0f", "276a691443ec812eba483f5b129cd9d18a4eba6b4e0cde95113ffe203ae855c6", "0545e4c44807ef36f57f00d3f3a40902753327d9701813e95c627fa5159c6933", "19e92e9c7ec8a7cc02967edd5bed9e01f345f12acc9d0ced2464681e89b2e523"), ("18dc1664d85226db655eb300b2b39cd7c5a122ca986b20437220f5b5f11afbae", "097a5c81af39227fc3cdad5cc87a530e074b0a98a4ab8194b9dc86125071047b", "20b99595ecb6cc658ab6f573c6d1c08ea17ad432da32f0bf9d8f6d1f1416d03c", "05f083995eb436ce58c51119d3a4759ef6c24c2b11d56222004b1dac26da2a6f"), ("261ef4789dcc0e7d2ef4ef11bd1d2098302dee14c7864c2cd793ccaba26b7c27", "0cc9963c8788e8a4861c426c742e3e94d4277b9ea93aa8bad431f6e018f2b0ab", "2d0df341ba8793c33799c86ad6783f5f2c8048feb441b5295dd86d59054d41af", "0bf16523c5ec4fdd66e4b2a3c36f1f41812f11c532e0fafd0c91e762d1d0f22c"), ("2f02f3b95752f9ae75a5e2981d64b0f93c33201a85b5a9b81ee8773749ed8b6b", "005809eb30b94d398ee7299b9d6df6a93ce9e5ef28d9077eff1f2d68705cb79a", "09e1cf7b4bb2e4e42493ebcdc3c8f3be8ffc3e4de98d1097f285f917712a9ca2", "080a4c2f5679ed181c5a5f4f2be457c13099424ee10412e75f9865416e2ade98"), ("18090bd5b6bfc58d591fdc88163a616b5b5299d0bcd6557532ebeb7ceb7d17fc", "04ccc40f33ca63532e3eccc7771ca802d89a0337afef2cca69faeef63f540a93", "00828a063239aa9c85d6aa5b3e8e732e727dca52529944322eabcbbd79a31636", "30083028177aefa7080d5f7ac58887a3f86987ecf769fc28377d0785d63f0224"), ("0f8a5c794148998ec1eebd55a0ebb3eec7857779a79bc53d4df8792c40427f78", "2da2591a1f10dd04af79101886dff99959924b98f6bd599e6015c94205ad42e8", "24c275da455701486fa23c33f55676008ee849c1e2b0a1a301aa3bf23c3b7875", "0fdf5d987e5cca7f3b908f4eca3fa32316e93c39238b8bbc2ba27b04e7d77379"), ("2482f30c716e6408cd88184523afd6be8476d5aed19ddc9086f94497c779a9a1", "0b9dae02bc6ff993f654b5864cb59886e01f1922a07b5930b60b86a947e65d88", "084fdf782f7b3acd9c0f33479505c81c9a7d6ddcd6a7067a01cbc4c1eef29c2e", "2de3189e5c56feeb7cd23628ba5709346c3284f6db54ad24e28dba2bc45a8a0a"), ("133d8907fc87324bb8e731d1622a835965714d5e77a97a5975518663f0b88129", "09e8b9d8dbe638cc494272ca415ab634a886225783fc04ee8fe4c381495034ac", "16322dff185f3f960c6ba150e14978a6e4e63bf6e4b4a830c29ba8e289bd41ce", "1f0a940dd566221f1918ca6002b7636fee538c451b0e640d1e1053d564630ce1"), ("1e1ea401d97ff470ee27f68e4554b84673c77f06e56bba20571d10e8babedc6a", "2ba7344d006e8690dd31a1ffb33fd2ad5a7bd0442d5b03276c395a4cb16be655", "0bc1625f1dcb249524af90ac75028c64ead550d96f161f2145d6c5d3f8ef4493", "0f64f28945a816564e1a0eb1f9f3cb543e192dfe3fa9307d68fb0407f6a8e1af"), ("15dd2740cc8107976a37733b5b653d3c24c646b3317d9defecf135cfac20de66", "1e137e39620bdc409f08d445ca767408d30877303b5018fd42c4d54ad54f1242", "03a407fa9c3f2d7473c6d34669f651692446af558c7d2ae3bd8579b65e4c24e2", "251774cc57e0ff59a81743f73581b5eff5a1bb641e4eab00e4154dd17239edd6"), ("2d0e486bd3d707f31ed9e0ca67f2c305d80d5f159eae2e7120930a6f7aeb3a16", "0bdd6708675f4b1fdda7227207f4ab00bf6510415beabef8cd0ca968154537d4", "06856e7848fd99756e511b65040eda42ac9681e282a2334982e6b734b2420204", "199d09874afacad63b2c764d169b27bc7c30185ba2cecd3aa70bb7dff3eb0f17"), ("21bdd992cfdae2bd06ba001e78a52a1e9c5813ceb6a26bbd07ce2f9e8bfa4dd9", "141f38338809b0f64eb25b1423682289af27bb237e19bed7c2c7033ad7d12841", "03ae08d1606ddf3da594340368710b02093ac88ae74a69eba7b6e175b9cf0ce9", "1c2cfdd5627fc2a5d86b18a299e424bec6aba5a16f3129b90221905d3f8edfb2"), ("1e8d66c8956eeaf531920cd0509da1fc6a25d452bf66ff717f296d68eec7e126", "12001cc2ebefb98b5beb317258793c340150707e617fdba4410de3902bc3e613", "261afb497ffbe9134301b40daab652c2e9ceb0794bbde285c00db4555f42f6a8", "10f244b639fccc6509b2720a7a33a87314a5b111c4e25d839bcaa81bf8f675bd"), ("20111ffbe29cc4bc8a88e926957194b6b012d478ddf020b059159196a2c039d9", "11aa564b8a1dbe62e8c7e11a90da54b5e2be8d86c909c36e0f78610f0f689735", "289fadc6715b34eccdfed02ebd44b77ad61aaf6c8def3486d287727c65a97d72", "0b7dd14b0e7f96cc9dc27ce9c75e82ca55fd350f300fb95d37dc1c57dac66237"), ("25ce1e54d5f7a54d69361a0756873a648af529535f3fa45036a72b4bda9eac8d", "13ddb662c3fc0252ae33a80ba132d6b8df3a29fcb8eac081a47bb1e468959b24", "10c4ead2c90ee4c2bd66c03d5bace28d830673ae65c788c3da2eb0185f17bc5c", "20155aac45eb1f3ddbcd5b9f2d1d98a072181843808978829d469946833ec4aa"), ("144e5a5f564b0dd49ace6a2dc1580dff44f2b6048c66d75fa98ae8d96d7c84bc", "00559e2a15c64a29417a0a6a2ce13d826771ee6832e562d5a52bc960fbf5f4c9", "24278f0b2c2760b3d912dac719f0c7fd21ef47ac27283c81d772995b6f2af477", "26191c1c040a25d8a60b1eec56b5286a3d81733ce49dcee36cdb46cd5a045d9f"), ("04a7c435779b81c3af2a97de1328d1cea5544644f2f845915a288375258fbe30", "2a292988d8baa5e3648a05e1c2751a86213fb9e89907d3d5f45e49c2ac4c863c", "10315675c152a8799bafef7e770dfc9e78b5fb6f0c2d4bcf878f61f3153fa6c8", "1fa35b67527cb00599a6ce0a3a853ae2da41534596883c8638b9165bc081bee0"), ("037012211a57c82f60bbe8310a013d1685c7b55fe443f7f8747978cce7e3a603", "1e3696f83b2162b9108a5858309861c9a52dda85f9892e83c131794a3cdc1246", "2131b36dea09f0558d5a359da5036e822dc2c6fe9dea235c441452bd512d600a", "20e1fe5f58b2079c5440236ebd22e082b48d9dc359de1b1b2596587558586b90"), ("22d09a91b38c92d47af64472b96fe4247ee01734884a54d2aaaa02279001817e", "277a42de8f4ae62aa97cb7748c25be5a39717f2ca97cd5d7c6349ec5caf4e182", "2846af5e0ac2333d1381eca505c218e8b112b5e71f70ba550c0e1e9dbafecea0", "071cf4afb632be2845d8ecef9f75b583a0e937432538d85317f9f155e9b37393"), ("1b7c875f94b0ebbcbc379e0667af52f68558ce466387089fe9f684dc2a5acaf6", "159c0116e800a52347d55708f2e74503ac1d9fa068dd3cb5882e30c6c14e6f0e", "17592c08ea3c6166d4c7430029e14ba27d46d189b6785bda4c5ccc354189865d", "19fd9efe9814dd7a9618ebdc0622c35155d015cc69d1da2c0c6eeea5748a3046"), ("0431b04c3538e4ecf038559ee860671d95e643749835a61ec36865bb23500e26", "159fa85348224f8548c475aaa8d9bf1121e439ab01407668863f750ed92997b9", "120ac23b783f1ab56e45f3f5525d6a41961e47994bb5e01a67475cc5227f2516", "10154bda655e10d368880cbf44ddf51601c64e8dc3479d3a9dbff0a99075a392"), ("23dd401cabe98eed0fd977fa149707447bd2432873ad31c69642c26f0b890c71", "0953f8bf88e24553a6ef22de00ea0f44fc420d207909598013483ed30dad1384", "263198d11fbe8d746056d2467236a42f51794af6df0368caf36ef16a90b0ea7a", "001601e7d211e44d527944ceb74bbf3eea0345e39a6ce645fdd1df170739ab52"), ("1edd68cf2df542cfbdf064b253cce7921b87328a75218a77f2e682a869a5cb2d", "1d45938eee0ed897e19867ebde3884a9339e2c8ab793d9334c2227cc57597812", "270ab5955308389f218e020c8510e245de76dcc6460d3a73933fe6a07184b0e7", "28b2334988423c1ae0a1f6a832115cca3fccc45d2ec46877d8ef882586662dcf"), ("117182fa6ca7e4efdb07b4e5002287e3975404c312965cc62f1cec19c56fd93e", "1ae68574e07b51833b5c1e2fd68a308ee9ca80d028152a24889e25eef590d012", "1662c515976c6db0dbad18e90a4e01da0ba211f8785406c0d018f72b39854cbf", "0cd8fc536ee922e968fadce942d62f17a00d42a4b6c2a7fd4fac12250a709f0f"), ("3054490603e54350e5b1a17cd97109ef9b5272dc661645e2ce72837ab1a66f1a", "2c44a87f36ed9090ac8a5f1dcdb18740622e03726c5dea96c4eae9021a919aaf", "29c40c9aee62cc453f2258f71c0c37139447a5047f7912001952ca99c2b43534", "2ff239dd8a177fed668d01783773853c0ab2927e9d08a2bd2eb4c1ff0c2d435d"), ("01eb805b85fa65f89451f0b5fea99b3d34b96ede8f10e55862f85579019c9d07", "209b99d735d6dcfc02a89e911eec9984a6f5a22d02ad3d5d0220f54bd5c7ac87", "045c1412d84f16569343f5fca8c0a174f0df5b8c8c9763b1cd87d9d13b2aa84c", "1b0fbf524709e3ce09c51b79a211ff0900abca1422a79ea79b2f7c6aa34330d0"), ("2b980c0b3287e900caa00e806ef900d292fd8a417df6cd281f20dd5c56d0aab3", "1308f0fb2369b247bc9d6fae51a25fd930650fd1d6eff37152e6aa2aa6f19692", "2d32fd051173e8ae314916b648fabdfb494ddf886d3e9737efeec896e79eba88", "2a83d242ef0d2eee01f6bf4953d1b80219b4226a77b8d7229307b751f850b0ff"), ("1a92c8fa43e6e277eba765294f6e5390882fdc0f07c2d277db1fd99cadbb18b3", "0033431867db0dc170a9f20a836aa917c9cc5e53e5a66eae62e93bb472cddf55", "06903fb24bbe5cb0ff8491da18dc01a6c5c50190c9973247e9bc62055fa74ec9", "0ff4ec71cb54f66e6634fe3c98e7d646a69b55d9713ac4e0b1231cdd2165a2b5"), ("25936150967fe5ca5370166708b7866fdcd7bb7142e86ddf7610f134724b0fc6", "0e96ecc313e1c89f86dc1386a35baa0c00c2889e0e7049ff0672145890835c19", "1a4a07019bb60b9d6be9c5f91d42ea4640b6a22c84caa49ea012f095d1cfd66d", "0a7cd2d911ddb29f495a8ae374c81db9e06f9b363a010953dca368b10fb6f668"), ("0bfe42a81bbda75dccf07032efb565d959f557fa935a943b4dfa15bae2866ed5", "0e815fa782441eaacc6a2f02f231a53ee8e033baf3781c309d6c0bbc6e060e4e", "22dcf3b4c1f3a533d55e97ce381889bded597a21770aa6c7ea3362291a37f7d0", "26f94e81fed482ddc334d4334c2adae4f3b9544dbc324e319178e7a8b6d4c72e"), ("298866709eb55e8087055f6ec9209a29c1824b8e985c8be4284298e6000bc10f", "283ab3b7bc25497853c63f1d0d07aa32f93e8a81c9b3c360dd9a11506a779077", "18ded8f334805ff4fe75417b7f1e6fb12447ac4ddd5d6926778c89d6b9cd2d11", "261a826d29b4a78d43f4da9b1430729f34f63fb61c10317b262dd31699c38bdc"), ("0b2881718a4471ef6592bd81ece5dbec09ad03563230c7dbf31319961781b6b0", "0c704d82cec9116e0e300a784702feaf00350884aafce2ae85df4ff4dbb561e2", "281dc8cecaa1a00a8839d8e3e9a678882795c52bac8840ad37da761ccf6caaf0", "05452c3a05df37f0bf14003190b86f3faeeecfbb389f6f31ee3865fa2641fb40"), ("2225685267a42aa09328bef0c48d2cd2335e672042b9b4ea5ade4e1c2d5261d8", "14392638dcb4605bbc2a1cbeb575d6d7514dd8c8fa2ca40e59e099c9f031e286", "10c87ab40424f5ec26446cf464d56b010859ee49b06182cb5a6113b95376a8b1", "1d7f113b6e88ca0bc4e391e28f73156a9a7ec8965255b9f36717d15d97e8ef58"), ("0da7e4052dbc96a944184c9a490141a87bdb3dade2194bf9763fcb4900f4dfbe", "26756bb62d59ccacaf5487cb7bd21e0e3c684b3a440e5d2c47421af6ddc6d15b", "01d6c8f1eb177402adb3d6d490113b60ab0b934630441f6cd26a7dc6a503b13c", "26a5a441a70ae61067c9817a79ef8d26fb767ebf4e343781408ec128c9bfaefa"), ("25754103f83196bef7552dc07ba7223188155313b4a4788f5f7959ed3fee27f5", "2742678adf74164c73d5d8a34fa1cce1f61185a5a8c311d6c32a4c8b1ef4280d", "068f40ad7734bbc8b5d08f22c926a37486eb0772d4b8df991ca08c72268d1a35", "10c1a43edf7c1dddae54e431985fefd3aa2aa2cbe1b544ad52665989f0564a27"), ("0ddf7eefd57afaf67b6563cfcf8db77f21740c0788a547fd03f64edbaf13d5d1", "0fcf6f09d7ae985afbdd9118284847cc667dfd0d74b42446db3b5c0db30cc146", "2c8713d7b91e71eef0223473735298de2608ca5a24171933b303d98c45403fdd", "19a984eada8e37b644ba33e199e403fd035a5e152e86be8a42248181183d7f4e"), ("0fb6aa11d9f84b3b678e00c1da116339f27ad558dbe4761df28bc84f757f87a2", "0456c3a4df6abf67fbe2d5561c2dcb6ebdd85213461985bb2f4962d3de424956", "26e523584bb453259370488fea906dfc64bd3fa9123eaec1c7db4af2b3c1d64b", "1eb00f2b884c3fcc7edbdd841ae55057c5f4bd026e70f30fe3888379c741a873"), ("181c62c661640241691b3e3527028eb8bc68bbbbdb56b3f081d74517d674aed7", "0b1c9c3d6bf80b09c1e9876c922088999e8b80d6c04a6c4d2aaaf654e44adf29", "10e0706fdd10e86c50e30609810ccc39434f2da40f971e456f3560ead4885ac9", "0289819ec8a713020e1ced7d22595595d3d4d5b3956d87cdd62f43e46583b071"), ("178a929423e8655385c8743f97565575306a0d7d2120df3b21989084433b384e", "227ccead0a9d0421bad545fb4ce4f4338346ae4478bb49c5772e3f80dae1fb60", "1a9913884f27fba3c9a9f60139b160744866357c827a84b0d821cb38e346ac9a", "23e404a0666ca5512107b3b0a51838a509eb1c2309b5fcc36b1e2aa1e53c746c"), ("18eeb0d7aaa3204ed6c245c3764ace7b9512d550339113281d51f96ac0c41660", "0c0984ce880a6c02771540f29c8c733ca84e09fe43445555d9adfd0b22e1b984", "1f7995516ce13d8e360aa7c3ce09842c79a72518747b5c9c24d8da06dbb85a85", "0cd78b7665de059a5a614c7c3745066128c64d620a2b7f5c163be9cc7180c76a"), ("1ad350bec3e7311e1341bf5daa60764cfc55bc87e11b3640367b32f82967729a", "171db98723b6bd296d810e3315df05dd70a0361fd556c0b7a2356bdfd5ab6c23", "2f7df9d713bce78853cb7e856147d7ffef8ec00d4d5345a2c5e5b834ae332d38", "2365624dc0dff407a67991656020dca31df4810af06d4a47081fa7879cef6c3d"), ("167bff96f8d495c7c0120822562577f0902c266d49d11587cab9e95ab3fce51b", "039b0fc8f9bfe248b53d7f02ab4030d0589d8ad8ae37892ed96e1fa5a5f3ebcd", "219cf4949a6ebb2cd0c5a1b93084ae4dc89b827a8b3af9f22be39fce7a1d45f9", "1ff755218b4af0f8c46c8c80129544efa693611abae89d3c0c316b6f6e6515a2"), ("0076c17f91b5481887ae74c4ac298944256864939514b496099550c608abc554", "0754c295943ad97882bd8a0828543d892d1f7e00399182080cdd59a9c6d47de4", "1ffa77dff4ae32bcc5fae5fed6a76b3749c74d256d8782894c05aafd1c193fdd", "02e735c2952c51ede16717ec0822bdecdcfbf5a63550c116cfa9d75504d4e9fe"), ("2170eaa30e27dcf4ec5e577ff319e8297cdca5c8027d1e9d878651553010daca", "1e55209071321889bdb3e708e9c21fbf38a0ccc8587e3ae60e830250f5082a29", "04ee348fba078ca3f56ca2d12fc91891a4c03e9ef306f1d555070d293c96c5b3", "1126561770599395d280b8160328dd3d1f114942c8396a71bbf48b54af2f7cfe"), ("0bb68d5b24a4720b8eb08f2ceb36b0f59f260bdb768c92ac9163834f580cb468", "21d463a1cf7da142d32d6d11d5a62fc5bd045a3348e43fa6c41fb7f14a75f729", "0216f80c8ee57f5e47a7b3db1e4d088b3587da83858c197f10318246d1532520", "0a66fa80116669e99b5e1cb916bbceeddf2533106b699e74f48d83c86d9b9252"), ("285f8d767058f94a19e7e4026cadcb415b99764df5cdc3821ab5bf5bc7287422", "0d3a4a92e1cac8388736f932ed0c11f5085e88715a18e2ee724441223b9c678a", "0417eaf4bda04c950d404c1b8e8ae9dd1ef822b705aca296f6b73fb76edcefe8", "122e4dd313b201ee60f30c140e37ced19dbf35486b54584bcc2a6dcc85a14d7b"), ("0887dc7ed84f492f1a7dc00fdeb9fb333e3b2370ff0519bd02335c888cf304a0", "12da4add5d85485f2a9127a55adab6117815ee448a4b95714c386b746b5b5441", "17c430e9e118a3d53a993b26c08faf150b0a012edaf06d3e088c6e5d74efca4e", "074f4f0d4651592f8d2e1fe1081682a51b2f2b331990a8d441cf5e32aa9effc6"), ("23f78b8bc07b17a2c4c1e5b7cdef57d834bc73481981a72465d7c18b52c09ac9", "076ae97d1a5cc483b7c612c8502bdb30d1629fdfc120985520749769288e3b05", "280208b01d0c2b66dd6c3ab9082fc8f06d031fe06608d748fa25e7a5bf3cecee", "0bb310ae09fa8e6f0485020028df1dd7edd046c5e2189d4e2ada6e1243dbbcdc"), ("2321c8872d9aea243e2585cc0c7901074a5ce75b0d8dce4538cab964240add70", "2e72ff76353dbde36a162f97d8d043cbc7f5d95a07ea8da5a40b41eae84055e3", "21ddc73d77bb9b43ed119d57e6aa1419fd279807262e4870ba03ea46654746a0", "0d9864ee417a97ada1075d206a51ccf421d2563949b09a27aebe46752048e044"), ("289834952004ae4c6fa2e1c2f3bcb207dc0f467bbb67ebce10cbf5bad7dc303d", "06def9b32fd88d6db8fbebee26ec376a24334ffc9ef09d644c5a6eeea842bac5", "02308a67aaba60c9941ab380413b120da7fcb5ad65f4eee2790f3508f7bdd2fd", "2491d0ed5fef2cf8c54648566d4299dc3131da5897ee1e58d59d13d1f679c32b"), ("18618b65a83f2945d9fbdaf562d84818499bff4f2afc86cc88bb32d499b37354", "10c69883be6cbadb03f02c5e06c167b0398342f169d76481cb1b082ec09cda7a", "12b560c5b7a70bb39428076a5dc4f1f5e140a3393ffa1d7ec0738e573560a50e", "2f6ff0cd068478a4dd5ed8142d3e773be5cf3da220dbad40b31549c960acc714"), ("02d7ca10999dcc13dbd29e72d313accbd792036c8faee5a3728a3d8049dc09fa", "0426113741f33a5e9ed0f3b6ac2c9f472f3b746b16fe63f9a05eb2c06cf53d6f", "039dca987b82b95d4d3ec6a8f50c5f7af0a5bb95b873991214ff0a71c25a44ba", "265a514bdc6d79177439782a15e39160c619431413874570cd9627a969457d9c"), ("1da7b20e4e025c5cb0484f4aa8318a4015b88b986865ab093292b2d1cace37e9", "1fd2b872cd049e5917b7db2fcb015d41f387e1e3088db16152941c60103a5227", "26efe14f84798150c2aa83757b202bc77695e42c09c266875438d9cfe5a9dd40", "0d9c5e1c9e7fb446cb38f7c90e02f6dc5372188e8ac991dd121dc187c37ab77f"), ("2fb2c2d04a9e5ee0badf7e6d69b4ef03ff9347792d3fabb6192b1604b7239350", "2ffd7c8f0a1e615b77649b96f6a8b80cf14fe01328eb0e2babe29ca2bbc911cf", "293acf0deb7a09ff8179061bcba7ab73a6be156db3b1c54682eab2e4fdd22176", "168c264d5f0f8592cf894990ff0df5e5e249f7491201859dbb3ae8b48cc2215c"), ("094a20d84efb25cad6d80b9489d0ebd1ec18c1c9b8f8ad66a6959d936a5c5b5b", "2d4199ff66f1e72ae5b2dde23cf1124c17f512730bf6c4a43d8af961400e576a", "0741680289cfe54fcac4226e911a857d03c07625a8007067faa4c4ee02f734ce", "2f0d099ad35211e7c464c2e9185a04c2383b028d3bb5c723ad0efab3c228ed11"), ("16dd01f17270433f79029d9cf16a874a5916a150f455ce5b68013132cdf9607d", "25ac0b4cc4ff31c1f97432b4978b8a72f49fee69c77faa3d2c2d6e42db923ee1", "01a12858499e2663432ec6268cf521b4709091c0452d0c4276c61639088fc626", "16a032acb4b39fe85808829e5d73628f47c0aaeb1ca0be797ac9b8989a1c3d49"), ("145a2591648dc87c2fd9d3ef33d2ffffd24caa76779a596b917f6cfd69b7de18", "2238be43ebc576678d6620b1a854d4c3dfd2e9bc1f11b7e917d2129cccb28f35", "2a4cd49359edabaaf48316a7e97406dc44587e5b273bf02892e6a028fb9e16ba", "2b6faeb0048838add22fa6d93affd53090da8efcbe397b99fcf3b8be05c601cd"), ("1638c9d5df693ca123aa637f8ff7aeee42b55d25f869edefa3dfcece5567f519", "16a3f156188bff36dbf80114069ddf46feb35698f16d68d14829385155be0490", "0788b3b8a587b674fbd0660f7c6b30dacc0306f37863879382847b4fb467829c", "066531c1c550f67974c973640e7143ea83567d5ddfc7edaf75629dcca46cf3dd"), ("1d55866bc3afae48348949bffd264e515711585c476e5287d7d69716ca02abea", "17c25a772d1e57351f16ff4384aaaf8205306256396314f3d14c214ee3a54729", "1f00fd4eb8a031500dca6db975890c1c6e8393b2812099b3ca33279e146e4170", "1d03220b650fd96a737f597799f45348a577b0980de2cae02608376743c452bd"), ("239a6f57553a431d074663c2b5bb9100cd2080d1a2ae300eb338abe39be5f9a5", "0709e9395fe80943e9211ae26bd476e028fdd5b10fabb4e2499bedb643106a36", "01493c6a61b0f14e8c5554ec867586db68c8b2672b416961c9a433ecc2a434db", "11800dd44a6f49dbcafc60812e5449354e08f9c7a9332485d4a1a01583ac5878"), ("19b4a3121379dec5576f633394eb570e7b0fc637fd85324d08aab2c59518d3dd", "203c1bb40ebfdf9cff09c3f7394e741bb5896f06e3a7a84eaecb752ad85bf32b", "0ef4d54209319f6a678e94ca1e287c33f6e9fb01133d3e1997692f5728eb23af", "17d59455b1614bcdb872c6329bbfaeb387ff975dd92482e8624240d7241416dd"), ("053dbcabc27ca2fbc99531dadd1d5f78f6c154938edb39e95cc76fba5b337798", "18c8da4176d3d15286379e0ddcc3d6bd5a8fa626860773442b3ca4f24d55769a", "22fe058d824ea479e292c8a8a0ef201f918e3fb0e2325436a2d3cca277c70576", "0e37ead6c665c5b52dab0d61faa168d1b53eb6100009a03f1fdb26140bf6a1d7"), ("008ef1dc4957ebd6cfae9fbae4d93d2e3683f1a58f4e173d9018599a74f5872e", "171b942942f79d76625446b802e4daccd8299cf21a1777f47346fb35eb667ef8", "098543b16fde7e222a89f53edc300f9080f66c20f5692c6d095327496377adfb", "2cda7f79f1b357d9854060381c1cef37312eb4b37c2983f5e9a5b9917b8b4b55"), ("09ae813cfbeb1263bcf1d9d6a938dea7b65beeaccb41dba29f568b22c9a2bf51", "2a0c83a6f0eda09291b89de1aabc95e6065178833c55011ecf0a0353cb588a56", "09fcc3973da6a796ed3cb4e8ecb12cb4cb31a8f3ea1ad065d85cdbb430acba5c", "1c0752eaed8eb476c16ae27efaf9504629a7be9e60c37790b6126317c245b3a1"), ("12477968ce5700b950d79c6018626670a97d57ffd1ab32df23b2be95c538fbf0", "16d9678a9b272161fc3795b9300256db8d0390f535d0506e021d1a7924682bc9", "224c91965a7faaf782f9a609dbb3f9586d0bf38451fea3b068c70b56e6194258", "30141266a337b889328a8909fb57b8d457161dbb9f2b979e2b1e95bf65e5dfd0"), ("1f6f8184f0eea10f172ab4c1639c605587ad2fe070c422416cbd5f91e01d2fad", "01c1864d8a35dd36287390c3678081a55e1c63400c6a6ac324d466d07bbae066", "1bb8ebc3b5f72bc3727b69d78edef3579f79083ed37b70354187131fbe282cb3", "017dc880d09138c713692bccef8d82a658bf29125094bd2191acc217bec13d68"), ("019f58ec2e18faa20b8870afda5f39cdb3d4816859a881ffb218d63a6c27517e", "2df51ce62a7198b3c0d63e9994c33e0e483f9bccde193caa3ccc26f1a91fb41a", "144dc9b93733955cf651e1786615827cafa5b9ae2172c6cb1733f44daadf758f", "14e80776e78a9cf037851c23a50a3ea5322bf1896f8fc28ffc9062a20c1719ff"), ("205c44172f4921f0836b30fb801d94781bd53d9360f684414aff884b2dfc524e", "036a5c6d669abf9934e2b286c66eefb7942310d68824715b0ab1695d34f9ddfa", "1251725170a044c25a54d6ccf1f88864a7204a3829557a9b5890347157b93c74", "2f6d0fca1e7b2257aafec6798ed273234d952a2cf61020378c0636d32a536f7f"), ("25b981da308c29add18a201f98e5922976b3e1ee2798a7c68ab86e3f068b4b45", "024e8f1d2fb31abfa1d784fee0e781b5d8137f0eeec76747219ac86496fe3fa6", "1260ee01a048e8c6948e27d6a3997eeff26baf964a7f13066dc5084d37abc4e1", "1cb2069f833bb977fe30302852869bedb1ad415aa202da540864073fe18d9e5e"), ("1f0e9ba506dbb3e89d1905e60afec5ca2e99c2bbd78314071d19bcaf3358b596", "2126f8a85dc2037fe955ddeaa77b9d8633a2e5693663b62efed0f6028ddade58", "0fddd2f55194de361187ab5bc13127abbddfc4d5b720ce4e4561d04adbe09431", "20f8b3bb2619d132b44e038ba76f7605a39e53b46857811cc0efbfdc37aa43c6"), ("1649b9a2358a78bed473976237abb875ad37d5078cd441b9948fde49030fb283", "0b859baed7e30084fd9bf523b04c612bd1e81b3e81ababa9f1145375db55cbb5", "25a9d403f1c335e5b715866fb87564d675195c15de5201c3046bb4f8d7b30c0f", "2ff89d921f49a3de30a68d528a6546023ae16d6c0dd63d410ec76e704165091e"), ("304e8464a277a7fe78217e151cff75e9c5c187452e97b893ce99a7116a950f24", "249db2c2f942f485ce50adda7c98c8dc46a3e47dba89b6ab8d60c1478f7d29cb", "10c802feac05de138f9452256bb9b95dea822ee0909819514e1154e29fe6b50b", "2697f1f00c71fd27cf2160c68e39403b467f1291c63ec329ed499f1cbdac4260"), ("1c0612d705a3493ad3c84be94d23a42858d682e3eae04f61b3e6ea46a5ed65cf", "21438c2907f50a3d454385355a00adcb459b88ee35bda0447c9895c26e9f5561", "1d70a7f99c0a671dc488021f599aac3602417b9696a97965af970c1af34d73bd", "27b7d46d85fd15af421618fbd559ae8aa30f93b2c6c46f44a03c8dee4628307f"), ("10e1cf6326b126c59f9d03b80c72dd5e78e67924aff96b9a575e124ef25cc820", "181e24412f301f272045c9ad05a81fde0f5efa6c93eb67a9c28345218e96cb1d", "1745516156ce04c457e57a06f59018207010d9538dc3943d62b1ac66e2dbb1b3", "27957012edc544b6ab9c07edac389666d41f60cfa963e18711adecc4fee00c82"), ("25124f7505d3ab2b4243954b1a65aed4df5cb652f41423221e25ae81323085f7", "2fb478e53ca2586705cc232edb6f0c7a83276d8c233925cb6998d90a0b81126e", "1d4f481a9b3031e98aa1eb652f6e6cf35ef0a4238e8212c1640774eed605a86d", "19a9da847bac80dfac106749453ec24b40c7c0bafa8787645f443268a1b61bf7"), ("0a8322bae76a6721037a77bc23d1b3d04d1f64daedcd055876d8adf105d91d02", "2cda6f24e15fb426f436ffe5487d15ec6ecda057bde64acc8a058cec812360dc", "0a47d893cdf99b9b63bd9c822301a0647b30078b8283be3e343eb4e2b28670a9", "1f6b63224d8998d1be14b1369d04acefe8a05ab4bccaee4442c1dbb49e3adf66"), ("108309224641e7169e7812dfb099404a6045910ddb8d209bd6758077a9c9702c", "2a21d2dbe577a372133dc9b8bad363042bbc9e7669d93b87586d68f82f935db4", "010fe4ef8c1ae1d672c163efbcc6dd77494a16c76121d0bb485b6941063cf832", "2a80a99250d0df73b08e5eea07b3947c8db0173f06f0f35bc9f7b8aea78fd9ad"), ("2b44f3daa0bb8c2422b2b5401744e8e0e24bbc9885c37318ba89951a51449712", "08bf03a78ffdf2d3ef0c6fcbee9f2226dd68f03d1f7a54dd943056678283e9be", "1b05cc90360db1366b4263a4d59cfb559f026a834feaf820306e13c866e1b2fb", "21420e5633a493681332eda010055836ad67fb7c857bf14c1f9deb8099372308"), ("0de0781471546e0a11a29d37dbcb278a28cd0a39fb333e107625e25a9be330b1", "1bfd2dfdac4804faa48f4aef240502436c9db48071d327684b19cd7ba3850695", "196326f16b451844c4cabe9be7af785e95af20605671fb5cd64cb2957eb1a9f8", "2ccf963550dee9a874ea32b96aada014c312e54e023b385234d0b1a617991365"), ("1906291cbd21396fe53ef22307dbca0f9840a603b6b4d07366238178c044783e", "2a83f2d2b5f9b3a9ffe05984ae631bc905b5907e2c3b11f84ae04e24320b4e59", "1d19a4f3aefa1931e4bd0a4477e3c6796a34d95471fee8d566e58abebe0b4460", "1fc3cf6278c9c69c4b773033b708341f260746a67d9bbf97dacade3a56f16a5a"), ("2a72e33d39af2fe149f4750a81dcda2492fdd3829358475cadce24c9ad23240c", "15845ee1fa3dde2c3a5a1212cd8854448c7cac4a0aca82ba863fb198866f5728", "026f664d7a23c5002cc49a78cff0098ed64069e5371bca3232e4f92862352732", "008a0d67ae219412db7b651277f35d17959831330522b3590035fd29c04eb339"), ("180685c1f6a72bac2fee24058535ecbd728596ab144aa8d167856f6148633efe", "0508a3c51d89f3936b830f8d242d8eb994fdfe4d7cccba688f103a8c4f8fed69", "10e66b0103235ec98e7c815f1a0f0df4211e913ebf82d30e5eff0d8c67a945c5", "1a1a0b3043c44cf6b00bc6b1dd234a0fa31d8806ad96fc57eaa776253588a62f"), ("0b7c7474a5be22c8c328c145553fcade927fdedffde8f2d50a7a88be8d9976b7", "1534bc0e4b92c8d475461b239441435dcef6947dc9b4d628bee5223f3ab5739c", "18eef11ab76b9d8a48a00653bdceadc594e039ceffc9f3a09e2dc1af15a56721", "0ea892ae1b5f1bb7ec3f4d7a61984565db8e5a9c448711dcb4325a3c2bd5c332"), ("0857e0f931182ca508642d0d7202b12c9cdf786f6ad97ff9e5445083ecaecc1b", "14c9b17b6e4640b981a62bf10f12a8b1ed20a4bf8958247f3ef20102a70f3604", "1d25d6d829576e92872ce3692a8453de6fd5f09e5e4eed7e6125518a2a18dc34", "1e51b4cc5807f0d49cefb5dd888c8e60c56ad37551212112bac2b743c9287b37"), ("24eef14d4e08427f179fadbaafd5227e2403370d60c39489bfebcde035b98f63", "0552f94837a9430f2957f8b4a4bf14e2192067adfd4ff2fef9c097a7cde53b94", "0a4591fac3ffdc3f0e87faa234a6673bd0d815ca75f4e2eef6d6064178579ff9", "0782147c2b492d6411050e08fd6296d12d16941d7631fb60a75df443be84a862"), ("0c5e25a337ae15d09e95e9fb6095363282cbe5969bd7c070eb7ca98b5f166e5d", "050f0b992230a426fc9bae53db276ea7c3bf8e6ffa8b01c74806b781532c95ce", "00a21603bd90602154cdb87f01792a4b27ad60683756e91d7965df77711f3e1e", "08c7f96af46a8eb353786d416088c741da192332c09b022a268d5b74b3073151"), ("29132af7c0d4c212bd573fb2c7d0c238ff27769af0a6a2bf6421ce3c8b541ffe", "248e3d5b5abd7e782cafa628fafac594f3a7a8f24391d02c792cb0550ac79031", "09cc0ef74d0359c97b28bea38e423251b9ba56ea297c81bcdbfbc05a1d25eb3c", "2e7d57f1a897560ec05358434ae3ae96718da48d35a13795b3af8d2aeaefc161"), ("1d9886a2e21e110b0fc09c4ca9cbed1a3753d663f47e0891005db20436004bee", "286fe531e8182040952982879d5d10ac8ab02a855720c1bb004cf0e109fdfc49", "0e5d247d797ccd529e28054b4959bcfb9fff970e83045f77238025423a55523a", "2ff6793793750831b820c2ee3a6b1682715e130e2d20fdb11f0d9c9019170281"), ("2020884e3a904886c384415c51dc7514c5f4ea0b0bd8e7321991e7d935e9806f", "1ec5dbdff2c9b03fd8bd4e35fd975054f073b7ff834fa602d8f11b551125e026", "2c4906df8c580dd10f29427eb0131f6ffce67bfffcb9831cbc23f4606c35adbc", "0a75c3fc39c4efd921297510d714ba28a4ab0d5238dda4673c71526fb20fed26"), ("280e6e788b3c030881291d6b7c1e7fb86f24c3bcf4c6f5da6f0b1d3d7701c9fd", "14fdf9243cab4233b529951f58c3630663325ebfcf549e32b2603fdd8af263be", "2b8d60ac6606a728c1cc79395ba0e4c00e0c3d04411e1040bd59586c7932597f", "06166c07369509e08de99597476c570d8186815ff51a20f2ae8c8eb14911be31"), ("26545e02a76670eb512c0b70c39155d96faa844bcac4eab60e6ceb06c6f5a0f5", "1e5c9e866b5dfa3ec3488818f51f7fb7531e435c2481bcb3f93c5c45a63530cd", "29eb16a1cd284bc76e12d8765ecd99111ecf8f96516941222fe7931dc1baa96f", "13ad2560aa8e3f2fd2fe2cbc552bb7d7764813d941a8ae8bb94b1b6816b236bb"), ("10d4b8916fa8617e765443e70b81e6c805a1340ab006299d57a4afb9806a4938", "2468483b3b223e9a8eb6b480decbe0171d31ab7683f95fe4f39d26daa80d5325", "15eea711304ed726a27dcfe406998f4a798768b499cfb878bee04128b123926c", "2cc97802362ae02403805d9c31aad53141ee8da8e778721731816b9043410dc6"), ("2b140dccbef2ea248c428bfb0cf87b2884da149b6cfb5f2e09202705b8edf57a", "2fa019ec2b24a98844fbb84952a871b6e70cf25817d5b5432f17a2d47c612c49", "0b6f86cfc8584bf9f0b0f6beb3bc1ad2747a7a47f6ab9f7e89dfc03bef1bfc3c", "286d29d0bc87f2024da6296aa54979f0e5e3f2744a53fe6668c79fe686d29aca"), ("1e7295c893ce9203c16edff96931491716def894bb3def733d3a66a83fb78797", "2f66802780f479df77100925ffc36a08d93236d91d459d1dcec496043de925f1", "0673e054c3e6bcbe721b944cad5656457b8d0a47bb79f867af373da645c1275a", "27ec0c3211d466f10ac521064c03d6a3a8d0ecf7f9a0733e2a0de490da2426e6"), ("1a416e80fe0667ab1ff546825e8a15afe1976ef7bda19b712704040487fc12fd", "168e8eca063155a5a43fede4d261c3817d152bd6e753991dbf37d8779ae44a1b", "190bfdcaf698c9b2d55aa45a2e93a6fa8562eb0201f8355e549c851cc494e811", "126bf234216ce658a216bf91d50ef1c14188a08485df88e92f8fb939b496afba"), ("029d4ace54e608b3cb989f2281f136e2ad032efa8cb076159dccabbff7fc3ee3", "26c706a440968ee673be886021482dd23976c1962b1d055a8797934e70558ace", "0d9202e1cc4fc81160f2ade807a26eb89feb2aafbccad05a5c14f142c0c31f31", "197daec9c321fc0840b792c220f313530e59748a403bb4e8fa615474e65fad07"), ("112bf1e5c594c0e11b58d7236f4d1452f65df25312a1207ac69725fd13b55207", "206cf61b3df4ca31bede2bd1156ab084279764bf39a8497149ad8e9562da1ae0", "252e2f552c4ad30d9907f43e376e4df808ae2ae3a1469dc2b81be36138288227", "15caddc650f063f7a9cb2ef3d7e7ae2214d53a40e312d6cf5e3586f6967a543d"), ("2b81b8128f929d6f4bd7349416c8d71205a160322f42542fb64a8c9a930d8ff8", "1953fd4bcdc8a2a874b00d87054d99de5d9a7f06ef37aed2052157f2aceda480", "2f2434306434907fd46b900e29008f4b2b43d4bae6861d280795643dd0706ac5", "267ffc887e42e5b0c7f072eb0b12a45d859cecd99b8fb4b1bd2d1dc289a5f174"), ("097ec85e45321f1f624842b047cb4750b4db58cd536dd61254b489c0a9285256", "0981b0e8fc497bcac62f727392fbb3964643a86e23ffe6b6a6c1f868088c1cc3", "0cab1f90f02cd73673e95ab123ff0d51cbcf478b82968f2f8776c231a69424c7", "2c381005ef1b872b406903284fa6d51c0359ccf9834d1f5b02af1b0b5b5009e0"), ("037791ee58ee25eca223f6864a9437f58b8bbb2d2e986c823f55e43345c5e76f", "067204fcd42a9227868e5149030c1a6cfd4ad6cba06dc7cef96f53004c359ae7", "21461740db6cbf26df436d510edef49e2a3d30015c4d4eca80ad3a54ff467850", "0b8fb5da74f075d6d22ca4f5baa5940b57553bc296aa27c97411910e86b4ce59"), ("24bf3053b989b3b0820d57f5b8d1c8ff2a3bb60401c528b0b5b09705b09dad6e", "1c5b4a1bb786b05a3ecbc780f73998af309aa8e668a6f822203b52b1d63e36a4", "0c224f2334a437463ecce057218644c329c0213eedb66fcb3e6e0c42d20af5c4", "0ead4a27991da05db0b7b02e7df20ce36af616a83f9b49e53e8cccd4164a2324"), ("02b4aed8e71784383477578825a38986cb9794cc584e3d4d8db641105ac35934", "18166f2086df558045a05d1b4a9fb034ec3c6b53759cd4f50b4e035e3ec9975e", "1a483a90c9d320351be710ec4f3c76b45ea9ab35917ced0d9086d52ed4dd068c", "28760b46ffc6504db4fb9d43b0656d09eee48a5bba90a4496800bb275235dd02"), ("2bf234dc627ad3086d9559f05469bf689ed48370a919b4f799e025e48629ac0a", "2da28b16a6ecf2f5eecf61ef5e1ea136a532631ffbc9652000806d54789f631a", "049491f4cedc9ca76e27f651cbc510eaf18e500cd26bf562599ed9e5c15d9430", "0dbebc2582f004c83f117de70e99534a8f1e7dca69a3b97ad88f379de7a98281"), ("11925692ead8c6020086bd419d2d036b2af787f77be48bf2c436ebd3b4d27f91", "0a333277581adb4f6cd79fdc23ff2707fef7da843d9c4213a9030d9664f5cb17", "2b52da5775d7d3bd8c7d1fba2f6e1f5440ac9dff2451dd55430936ae16c5e331", "235c6dbcad03471c1d927564cfbf205113c78f450b84f38b1de08257b211bc2c"), ("236c4283c8e6bee703852665c33ca2612ae024f380bf59588e971b7b67e27817", "0b1c525a5e74a3f2fb601dbd9b62115a90c03819fecec3e476e89f655a09ebaf", "26a604ea02650b49fe963781a2556c0ad0d59d030ba41783b25b5c8a93d394d8", "30015a4dc34fe4545a66897128cba838ad15de987551e13154525112cc76d404"), ("0e94db64008b340e751ce04fef4d16f17f5e6faaace4c7c129e32cf93645c570", "27a5c8335fe5f045238d3301afae35722945bee3f72307cb46ff47310055cb50", "0211bdcc3ce9e97921fcfcb3fba4d0c4711909c2c5c79318bfaeed6139cb31b2", "20748cbe6e98914bccefb5be674b2c387526116c4db488d81c200077f0e7d1d6"), ("164b120c2c6e07a48c1baff9966f9a73bd6c25c56b3128837562874c11948f58", "21c95e943f226fe044cf700add59cb685fed1da323be345e4afbbba193ec119e", "20ccec5fc1a5891263043b82cef362e2a340028464facd995002dd150b72e029", "1e902f6d859ada7ac197780de12487cdef59cee10de1011adf42c0c76e2f61a0"), ("07410b9c1a4c89862365219a6da33a2dcb79479424ed079dbfec4a8ea6d1b2fa", "3035f3a608b4fdeafd33f6ad53422e21df1759885583d5cecf04ed285f48616a", "227012678a6ab9c90fd686d21d7e418fa5cc580eec122740e232aad5d801318e", "17dc5d54197e0586b78447ad0923c2266822b96804a544bc743b3ad29cf1768b"), ("0132376e59a98535aaa681b1ea7058203e1b25ecb6089008e0a509f9810ffbcc", "281356265e373cecd5dd8cdc72ed6902089fef874aa947125a02e9ff2761ae1d", "2abf060eca75b16e7d1c3bbb28435696fc5050292598c2bda4b2b29c2aeecb44", "169b82d3e874cca06c5144eedc66421ac7da6661bf3c067bd8f877cd7db0cc78"), ("1e8c8561a936a4a3c26232acdd29eeb78dcb017f00562b473329d598f0b3864b", "10a946873fea5d31d60b6b8dc56ae3cfee4e8cec264a3ffc04ee2757b14b8507", "15fbaa2cc4c0a2e638f2be40e9075eb31a59c15432be2a7e9f66a4364943a4ef", "14f6f77d28b8b8f93c47ed0d42e220f11191059f11165ad2a3909ef9095c14a1"), ("266f8825d6a53bfd1f89a5bb81156c1a68b25d4f20e1f82d976cb38fee0511b7", "0bc4d7486ed641aa0c01ea19987f1dc75765e25403a68f1fde0a87f8028febfe", "1da3d40dde1b715e72740916c1706158caddb58a42f8c76ad5c5e3066de6dc78", "1b200bfd5708033c1df3542c50c30d9a27f31c0cc9847f4c2c001e98e94b76ca"), ("1995c7299b0937f0a0f09967b8df346541bd5a91ed857aac43538e69eef7a6a9", "0e5b7609ed04fdc0a751c3a325b0a32fbb2d736699a1b5b5f09f2d81d2978925", "2e3ba97de8fea1f58d1c4f58da0ca9288624101f19e29495aceb2b4cd7f277dc", "2ece59931e7e21830983b8eab72a463dfd333254519c98e931a5d6ee47c2a9f0"), ("2fc31cbe0559b4f34b5ae039b1f476b500da5195282d4812c9f3c9bf95682c07", "17462849e2c766b8f780bc671fd2ab9114bd935df8bfe5282cd435306e34659f", "1a51756c0ec2b4b978410e265760a1af59e0904fc7309dfe5d372c0bc3a9a12f", "218178bf0769e4e291d9791452b465a53ea6a8c9d3b86ff7c6ea2f4603795bfb"), ("232af27472deee0aa081898105a21ddab15897e900f2581367442034d20faaca", "0b7488fc749e1ca9461a5c745c29ba74ae6c3b20661bd4c08e7c2e43e2535364", "001ab0867bfe69e3497dbd9ce41582534c78c1f6fcea50f148b25008ff82d4bd", "143c64bc74d405ba36cef457206cd9523d5833ea39e9878fa8976009e0e578df"), ("17a12179b8acbb3f250f7421e90f704dda1f5981e5cd158eb91c2abdb2e38f76", "21fec5667d351300b9c676c4dd79825f9e8511bca703579feff7105c6df521fb", "050a0744e40644987ae30b4a67967cdee4f451bdc6aff76fd3d3e17d29a672f7", "102f92c35cf9f642b743305123f9566b3fd317ed0c06d1c70a148705ae8d3acf"), ("19cbe587b92526001a254fe878c426246a5ea83c877c526a5d26e8a860cf62f8", "1f607dcf0a77cf3f53064ef95b35f658e335c2e0d8bd1612c587cf181b88ea4f", "0a4ea00e6cd95eb573b6a0da54432aedeca78ab027bf33c7b78c2f7b643c446b", "2e3302473303961d96d145baa1b5f50d81ba7f29279e530e6756a479ca2cb624"), ("2098a1dbbdc1c5ebc2a51091d1f1c749724f5946da704c43f56c5fc371992100", "13303643fb0c37096147350fe978e07d20a5004ae9d47cbd3b61aeb377f7c0f5", "1e53a1dd35549a8b6001d42926331d2a3ef3eec683a444394bd0a4af47ebdb9d", "18b5adf64c6480b0344f19fcada1f26c180804bfe631d66828930ebb9122bdc3"), ("2f4faa3c6c16e79343483dade4e47278000724c70e1fa86ea57f7841149e8cbb", "214e329839820ba9ff9c29aa414b1512498cb0ba7cb11d9ee1991acd015888dd", "02e0939729295eb1522f351c8aa3eed6881f5499f7beb92804b1481b6b80312b", "02cc103831e17db4d73ce2260eac7aada1f3c573491b1c637a1b5297a49e6fb6"), ("258e13279fed281328dd224785f587b5ba34c8f33352274bb2fca2621fd64563", "02721b8c60ea659aca9703f54b480a5b64193cc0a54b34aa605e21674e748f61", "24677146d6674c92421d9387b6b0a5d079f9ea7180df2bf787448dcd2fe18b93", "287632c6536d8baf7ec63cca0ca8be5733a8221eea2f0d1cdcaaa5a44050399d"), ("0eae1fd81e2fe4bc8dc6988e34f4ef3a04281e72f5c934898dd9a5c99bbef43a", "0a3fe3a03735dedfb198528f69ff7e561a4915abbc00f05f20eb66c3a65d828b", "1f874ade5aa358201d8dc0f116f60a7cb704e3630b00c8a8eefcc6c9737aafa9", "1419103effbac1412df5bcc33c9a03f8f31f86694a5c7dd050eeedb53dc1daef"), ("10ed7048c6d7906f0bcfe4ed4524a5da54e68c2b7529c69a98f28eaad6d7b280", "2fc3f83bb5b28cc5947b29a27de78809fb4ba000c583d0b4a28c9d4871470466", "037f2f2e11f5f54d0f1b0588e56d33fcbf82cbc509c335bb04eb207803ed9791", "2f8decb8d9351adb6b259b60352f52a80287f92cf124d832504eda6c5417fd27"), ("243ff905746968f435e8e215b1469d0048bafa530b40fc9cea3c2c27272e9ac5", "210cecb4029c4b0b3096fb54c2b85f06db9d933459b6b6c1d81283d0c7b2c614", "2f74c80eb3bc05568f425f7e2a4b8366bfd40c6035463b117cd29978d9864d0d", "043a9a48e7538384811b58ade6015e1892f257cece1039059f32446adbd51c62"), ("0e232ede75b83d4772a8d9f8017e19d5a019834f9502096f803bb14dd6b2b19d", "2266adbd95449c1e55ff2db469604192bbd24d15f078776b3b03d10fd445d305", "16dddc67c12edeb5ceb66752466b60172f397cdaf49f00e645c9f21d549d4b9a", "07c684142b8b8d19f8569f543961051ef2b3d61ed07e4e07f32fb2fbea393df8"), ("2ac96599b0a931301090a08fa2b2c3f38aa36357d7c2ed64a4aa5ffb2e581db2", "260d4ab7ad996fa6e112bd3f02616aaf030eb949c0e79273f558727f3bd567fa", "19a8be38c1f4d8775560beb35af396b30c6fad930ce7defa06378a578f3ddd17", "1b5486865723856b4acbe09d552983b8e324a8f64a35cdfc9c6103c878847c91"), ("0c2270cbcee34cb688312468ca98d665b4a5cc6b1cf49c26e2e040e5de83e8e5", "0b67565bb5b45c8c3c5e12423edf2b08dbf7ebe50fb7bf67e199478d34dcac91", "1df03498e9b8494606f9f2b9c04d95280c794210661566093fd7cae851f9440e", "01b7cdf3389e97a379f4b632967df49b574a774b09a9858bd2836bb76395d78c"), ("1b958cfefa677a21bf873c9263ce44b21312d537142b7c9a6f11202eefbfa657", "1a056d2b3511c954bc2fc54e42af79305903a838ed00955c0dba633596766dd4", "230b31b8bd4dbeff5397bb0fc4f2343bdbfb18c2cd717da75ee0cb992d5e13bf", "1970c2cf0bb736206f8aaaa1eaaa91c1861958df8b92ad8d56ca9c40974420b3"), ("065fa26f3832dd3bcc563daad5ec48db9b4bed37f82dad1bdc1d2e4f0695951a", "1e708cdc7613a929662fcc87560e5986b4211137ccffea0143db8ab5d9339ec8", "2ba75f1e06303c1d42a8c7ebbb5184aaf7018538956610b223951d1a64503d89", "13f87ebcdd0397f39d7c1979b51a67eb25f2ca5a4a6d91d284b74d3e9a41ca2d"), ("19ce75730c3c1489518bfa1e2fc20354a8fae0b847b0fce56436dd2b1d84296a", "214f2818a541043bfe68de298bc99ed70b7eb1a9c83439a4cb4c597b8cb62b9b", "2bfa8a4142580a97f68827b8e48e1be13d9094a9787c8d10883f8a7a1a139970", "0b3a62fcc7fcc7cac51027864287882b63a674851c980665b4cacf29d20223ce"), ("23a648b516911c5c25f152724287bf0ccc622c841ffe9892183c229bd4ca405a", "186da48afa411970d22a008b007f036857feed77c3f99dd822db00dd5c974a1b", "032e715b6b6e5d0e6ba9c802120de55f4a87f0473fb1662d4e3388e7d1c2c446", "074f3c5b334d0c8b23eac916306884faa04f23ce1162bdee22590e806b6d9bcd"), ("246030b79a547cfaf1babef0af5b0faa70c6a5d2342f12baa7e96cab7adfaada", "1ea8f733d35155c36fe23e31affad73971da44bebca4d5c1b50a408b7ca185ea", "098f81ce6cee8ee677437022a1dd6ac04b1aa4b2e632e796e84527c59f93e3b0", "0665e473aff79a50eadb0b8306deb1af23e94e75d313b265b7f943d236b07892"), ("05c8cd6e846eb9745a8c87ff4da41aa9ebd7cc6f0d79ce2cbfda257ab0f6dcf4", "06be4d7fea21c5135d9564f93136e2d4974c2ff15d33fb30d6fd4e657bbb703b", "19fbdffabd42e6f5eccde3a7d395c8fa1900086466b8ba39984d0d6e8172d2d0", "0c6efadd7f82993a7ae114a4ef53474ab522c1a34264681382640b06a493861e"), ("05c05779144b7fb652ff93280aa7234815981c04d8a8b9ad6c657505a90a86a4", "2a15edc205b571e027e0f8fab3e19298c8ab60c74cdb8bcde44bd6e07c0175a3", "1f1a9029306353d79b41646618438505edd63a5470ceed74b6a88ece74302397", "0c9f5fb2bd9eca25426de39d53638cd184523830a0e3ff7971bdc6aee881d214"), ("2ddd712c816bcfda6d04760fb4a39567715d99b4d7138d90178a36d6f0d50c85", "1da793eea0071d4bf1a35ac87986fabeeecafa86b35fc7132634430d9408c3ad", "1fe8ceefc1133dd5e4f2877ae4fce55cf90864cac722fdc95899b7a1c2954947", "2da2373883dd835b8dea47a232d91ee214a231a1fb2ddbd89aca02dc9427fe84"), ("2721647c4842e98d005ee3e94a081286ad69a23761100a2864fedb4baff11242", "14e15cd3aca22238018d2142e0793f19552a9a6381e1e984231bfdb77a9c27f9", "303526d03b0fc4d9bfd6fdfbe43910ed9f1d26ce7a03762b45695d05530faa32", "07ac0ed84a95ab8325a5d3cf22bc5abe116d678a448bda88e214fe31d7841671"), ("1a8e29c7ab09a7a14011dd08dd2d38c7762842e08850643edb16563eaf4e1cb2", "131feef55c1ed18675019ed69b77d8ffdd5fb8873080bb1c7f63c168b358d9d6", "1eb5e1255cf0e40d445383105fa483c7b2d61e2e339858368f5be697e74d4227", "1d8f928d1ea3599e245b22bf531350604f4a4bb5d8d9a7dc86097c882ea02857"), ("23ca9384cc84a805e804cfa3eb01a84b512d1486469a77a33ab4b6582158e10b", "2f23f5fee44f1667a0bac5fb315a6fab4227067184e770f768c235c2f117d7c2", "0872655c2ae863e7c6a2b503f411c7454e73adffcabbbdb12c93571c8c43c039", "2033266433c5cc349925a842ad8c5934e40a28e392c2340c591b931559a9ed94"), ("2285e9cdbf6dff5c021592f3250ad1a3c9b0f021932f0e51bfb668f734efb11d", "21d0eca47f68633a387858f1ba0a063fb3710f1244e8a2f793c4603ce6223be5", "26916418525e9d935021765a8d7abcb9ae08fcf0c43b08d8b72917decfa67ca9", "0310cd7733c3b769736a93f92175a14d0372621fdcc6f6b249696705f38d38bb"), ("2ded310864c81ad8e60894c3d3024301420fc9329ee3ca8ea87add29f0eb5e24", "10743d01ded1c328103bde592a010ad0bd303ef1e8896aa639c6696a0a932ac6", "245e0bc062cae8d37b73590b0504113058b9b1c1e6987ca06a27fad44c9f4f5a", "274cb066b08e428e5411b7c91a8040cae1932f64b4143c4dcc9b02642b10bb09"), ("1f34473dac8594b316f49b98682fcbbad4959424a95711f681c210be51b4d58f", "0af3b48c751665a440fe285142366ae275b3be37035ace8c2a0eb1da691e37b6", "1ffa86c6d53111c7756d887a71d608c0ac2707bd0b9eaef8bb97b647f4868c42", "0d939714ada879cb6cbcc05acd58470c74da4f76d26de535a06ce2233703cfa0"), ("08b38aa6405bd366fe2d4a853455490e8e6965a30531e8554b99e6c5dc5eeb7e", "0cd3fca06751c5a190a8e04e459eb4851ea3c8ed219e2575a1a7d7b61b65e4e1", "21fd3a6555fa62b665de80dc49532c4a0b2a0404c49537a99f4aea9025145fce", "1dbb2bb067f1b133aafbcf5c39fb90f438f14a7406ba1a77c7025da46977781f"), ("162093ff32581297b23599ae53b0495a648c415a1fa5edd4092ad0aa94fac8ef", "2c9c77e51c4edac8c36035826d51d87578cb6835743b73015e2f7c9b2041f9c7", "0458b93af989c91b5949a3e2e0be671dbb9f54ec28603f548055ba081bb65c3b", "26a0c303b4781c9a7bab0ee6c431a4678020fdfea6df4ff36f7ada9e760520db"), ("2f031e8c7edeb37d17e6fb2e558f0c0d44aaa9f984e07739941ed2585bfff707", "12dea74ec57c26b90295669ede26938ba0d83cb3106f28682e22c85489743178", "03bfb0282bf5ad4155e2ab741c83aa1d0f70f35b4706641a2a5bac435a82b89c", "15bda938dcdc105c3cf01bea20153db5a292321f85a495055a1d7e7c72d56e3f"), ("02b8d205fef4ef405f72404940ae80f11a0da890713d7a5d8961da8209446b05", "01b5958d397ff09e0c24b5173043eb3f881802397e19df289bab87053f2bd978", "2fd342320e7407e3cd37ad3f98d35d6f6f4d894cdea37be9bb47e49531a8d1f6", "20a7f545b256efb49b9452491d0db70ba045b66440e6a085f00922f710c8539b"), ("049e702975642978cdb63988088bea01b50e9e503861d61b485af1e6e5a847cf", "1bf6f67cfe3a10cc00ddcf4e3d824d9e55eebb71469ffca0dd95e10f90908e0b", "110f157e166f75dc0e742405c6b20a7a2ca52072d60088c29b14e89e0f24983b", "0a5875ebacad1e2225e922da2c066f4a97bdf63a30086110d9302ed0f4a03836"), ("1e3c3ea0f040b02df83e42d0fd9ae08513104db3432241bcec8ccb82ac02b040", "1b2ed545b0065ea36aee0576ae1e71fdbd5d608e50464a90661d23d32d45f541", "0fa6410425cf681891e3650fe862bbaf9645f4ad8655211a9ee1176b3309d6bb", "19070ff2e57802972ca06820a17a3c169ac13d7b55f96f002dffd45347354c4a"), ("2e23f2a86e861d95293ea211a7727a1c15437de2745b266b448d12fc5dc59545", "039b2190385b985243173abd28271dbdcbb6c2b500db5d62a7174f1caca63557", "0f91026afbc6b51955673b7da3897fb313d797fe4892aa5a6e82636d55cef11c", "1ccc3b9537fb2b95d304b2661a67b368569a14c455b345d1bba398936ea3699a"), ("1d690afc531390c6077517bb8b5c32e06379384b40d6cafefee713ccf4439cb3", "294502cdabb9f2db14932d365dde12ae58e32e38b4a9df1d8455ab783b9ee7c2", "2f589163d012baff33faafc70f14776ea4484220d2091986173f3e62b9be1ab4", "21c1c0821ae00d053b534d318ec67b6a66ef357602ac94c58350af2a2703e5d7"), ("0ab599719bbb0a07c3bd899fb2ef4faf28d27a41895b95dad5496931711e5e90", "000250d1e7ebd4b5df8cd26e9ee68886213024fdc3e0bd206120c2ece4d8cb9e", "21a27ac471cde3712c5e3e7dc752fe47b02abe14c01e430d01bbd4c67d1b8a93", "2597a4c48cef95152b6dcbc27a9198b6a1f0b188431298953fe97d938c394f17"), ("098d529b4cca6862b167907fd5effd66d9ce01f9550654834c90acccc66f4883", "14da0ff5e4fff3ae980d40cc837a79160eb02e91572b308bf9d183267e97fc04", "127bc1e06f34bf674bbe1beb079b94e6f822549157e991e55194c5e16aa0be35", "0ac617a369958b233f293ab7d56aebd7bd6242436999fe1397a81fc99d9841e6"), ("115c8f782c4a55b4e852ac48cb63255d5513b75fd2281f5329bb50c75534c9e4", "1fa8f22f65ca5ac7a54c2f189c0df9f5b28884558c8ca3f7c7cf05cf154e0444", "1326b6c016c2f21469f28c3192a249ca6bd4958910d7b586732a40fad3957f6b", "1b14d8c026d5df60985c4bf217b0dca97176d95fd1b2827c427081e407983dc1"), ("16791feb81d35284cad8b36bef5567e8b8738ff9523370372cb26709f0ca03d7", "1fe040d7fee4454b2959ecf94debacaae1df72e5fe6bd678539fdde6c3fd2412", "188ac1b1984b6d26af6d620395aee7ce5c32eb42765ca21525f6ea94ac615495", "2bb7a2ffa5c2b7b19b3bcb62a165ecb66a353b5c93fddd1e4c132ef2b0816262"), ("07fef841684b91bf0fb6d15bd148717936f94b1a0a1e932848551ebc3dfac81a", "1102c435a523c2275c14b8a5f6351e0a67a8604b44eb969faf51453baf4fa4b0", "2dc3720f21da562e2b2f8838877b9774234b3821fbd6bc1801e9a2e803d66af2", "267b168788253c3aa73b14e32f02193313ce2d0d64e4e29740cd143672e1ef83"), ("1ac2c6dd2705f63216312f28e4916551307150132e9ec0c1250fe492ad8522b7", "0a21fd59008c90895ff447d7f36c078821e07e85a43d04dc9ab9d87e526a8cdb", "1ea1f207fc2d7c9e98952619e2eebc4a011a52fb86867daa4b105ecd6094403d", "29a0d43596a7ce947dd018c53bb46403b57439ac5df920eec2df86d8e29015f9"), ("24db9cd27b562f1b40a52a0bd1b145e70d210521c9d314ea7d87476897331665", "2e676cd31dd4def8309f6fee590edbb2b2b468ac74881b30864da45e4700f085", "2f18506f94b950b1708388cc7c1682739f3cb18ff6c72a62d6aa34eb31188664", "0612df15dd0868b88451321f599e17722d13c738ecca5bcfe632c2a868aee838"), ("21c12522f994da217bfcd35d829a4be5439fc025364b908cb75e158433969a47", "274e7d25e721f18ed682edbadef1cc5937484e2740549035db0bab67d5f77b04", "0753c8c60885c7e80c53d6643a78458de0f2c47dd05ac71c5c143fe5e104ea28", "0d166eaa10de661d6138a55fa50bda5d4078a5713c0a269e99e4470694a24e76"), ("2e7fff73d3dca11cf0d9c6cfff1dd7fd109241d834f0ed5dea6d136379fb31ba", "0b16d059f4cad5d628fb084d9a34775010fec9737b42c16a6a28048711fb1fd4", "00bb946ff8bc0327b95624913c3a2adcf8bca1c789af70722494a021692b63cb", "1c1187e140867a16fba3ef6077f2a4d32526c13b0cf98ac907eb0a24f9a16ea9"), ("035f5699cfde2483ef92d96485e480d651d46542192b4eefa6ac7b8a858b16fa", "102d47a0588d281d583ff578c936cc77f91eb3d82a0335b8b12947c7c5dd15ca", "20293d4af1517cde7719d6fa62e09a39cb82564f258f6b0a04adcdcdb1f656d8", "0c8598a56cfde472558577951390121fdfe1153fd6836baec8458d4e81353cb2"), ("0ec8d12df966dea1555271c7fd7b2c9446625a7c5339ccedfc39cd166229b20c", "0ef0423187ee6d37d6cd307071c1ce83ad797626b39b918771e7595b52187d42", "13a992ba2897e4651353fd08b3b8b22082e24b1b99c706441ca8a8c8b352eaa8", "1109d505e897a13ca9eaeaf86ab7746df154be65f0587216eeaa32a73369b111"), ("298b9bceaeec9ddd116732b46dbe1dc461086fe06f1dd7e0561ebdfff44c2978", "2a8797e4e57567c8e5ee6ea1191c7463881ef960dfe92e7b0f83b21a4dda381d", "19351a1ebae2b8109c459e2c9b23eaea6ae14130bb96bc8a77188d27ef105304", "149b119b00fbe71dbcfd5f0e60dd9cf884009c3b7fe175c79e9f7e6a9155176e"), ("0066c0faa22963fabfdc8ea2ec7a05fe607ddec6ef3577754db08c4e71e4dd78", "1bf5e5720f696f388811595f0304d3c36ccdc90ef5b9217579cbde2a0d56e0e1", "2119445af2e28d918da7f6afb1dbf409331521a471e04505d5e3458fdff16806", "26cb1446dbf0e1fd33904e1b5c2580e02d0e7a9e93d875f252ccd2f68e716f12"), ("2616ba2025f7c9fde4a43122fca4c4becc877af466ebda1d37b3eb2b9857ad99", "200cc6c5ae361a4ae875611ae28909aed264268c31ea8efe8bdfe3cda63b71b8", "0541b892f6235ff64ecaee11a8a93c3c79456f89d4f8220967f9d7488e7c6dc6", "071ced8005bc6ba0460dc80c55277146257cb59dcffb729db9f6cbf1287048c0"), ("21a74b1ab2ce75e2b175e2c86a8d8ce5c93eb646a5d4b0f5027f483886313cc7", "0eb900d52782e6caee9ca29386311603382c7f1ffc202499ba1a26e0ed304142", "228e50a5b945274959469ea05eef038ed73695844ef8995e4f95d58f50d7ddc5", "09160c11521391f53e052172d8f541deca357e662ef3ab0510b158c42a29138a"), ("0aa103f704c77396a4a3338583499f80c995ce6a6491d6223b1c3ec96e59197f", "1303e3c8c076363c08e1f848737d4b3c56e3e536de28c195e85f9b6cf1edaa6c", "2bff97ba542b9a27253fb53e8776c173a4ff57cfce86f4c160b3c4d5801d7e17", "0f866892e4abc3d77d65be2d1908cf29d4902b06d822dbc9d405b9fd3cd32cc4"), ("153cd26e2f04bf2611a01e7c35c468f3fa4b9ba24e0319bb8424ebb70503b18c", "1e3d4d4bc230ccd5085b254fa07edba0ce20024b800836d3f134885bca5510dd", "1404e20ca3c91d293e613af18be895b160fca61bc6ae45cd909b40da416899b0", "099f542bd523e41234981325e44c6310d8d113c024abf5a925b29884101598a1"), ("17106b8843974d16f9096b5558ddba8a96c51eb0cdfac65d8c32416e4245d3ed", "15a3c98b54ce205a2358f62598d835d6795859c725b1f6e24f47c4d0f11ac567", "26c8508de49ad105973742b84896ca541d2391b0b6b9673f24eaa00d1cd46c46", "078ad6f83e0b57809d195e9ba8726241c91ddf1688a8b652a06eb059ff68ed1c"), ("1d25a32d607dcbdcc83c4f6f698c68ccbb8ad8f3a2ba4ca1db54a9bb2089569b", "102e0ea992d3c7d49a864140ff3289b30847c8d49bcb987b38c6be7c0758782b", "2edf4dfe044e39ec22db82fdf21cfa62d00604d61c380ffc3833735e044d9b63", "1a8875e9250582e7493a7267899a2a0f30541c6aa493f01ee0cce75a0f74ada5"), ("00ca2bffeae82f7bc7c3e19f3176b4828510ac3afe1db52b1cee8911f61720d8", "0b5fff603685636db93bc617218247b66f412666c286f784849cfc7537cbe6f6", "267145027920d30cc6aaa373a93dedb8106aeb736e7e7b2504e8141014e34d2d", "02f23b49e038384b9a17be0c0509a75f4cfeac13fa244f77c42e4a8ff5ec3e20"), ("158ceb93ba8b61e4f8b8e64d02a530a28a2e11f61bb779f420c4523f435cd168", "0b246dc5411648d17f9a20288512d746fc599fe0dc9888c1edea599000d44ce5", "1ec936f65409f26bff4dc77cf82185e3d2cd0daf7003436b6f7115b454d5e924", "1d61542f824407ddf395cce305798b54ce82a84fb9f28d81fb92f378d73eac9c"), ("0e96cf3d038d745becbe516474d910b65fe0eb7f7ea2e60df1965a9c1117a7a6", "2a4e1e17554378aef387403d17d1c350dad674897f0ddda66bb3f3925983c98a", "2c00d58e8fe8ae705dcfb9700ab3404f0ec4b0d44f0c183fccac164adba77973", "2cdfffe5d35282610d64db7136e0e4f3737d597620262dc75b1cc9e6bf3eaa77"), ("1fa3c84387884a82b3ed40be50c88aef13eb875479e5aed3d4f6b6c356255bf4", "1715bcd073a0f1a4f400fa43e84973cdcac17e9c90d848891d1d8b75b8f8324b", "1ed86a0132500e166ce6d21e4d8c698a678768e7decbfeda6f0aa90bf7c9dda8", "0dc46d236110732bd3316c77b9557825ba55720212771946bdc52a571815785d"), ("2ef54c3bea8483f9259e4b0ba3db399bdfb50baa8b58026c4d7e8f80f5f7c488", "1338b847beb737747c82523daf4c620fa7a494ab618e0766ff838586c8e7f2c9", "1496acde1288cbd04b43737c131257941c9e37ee412bf99ee33b48e5f6b3fd56", "0f005414d19532f7617680fd42d13da85e2dc4f2d677b29304c3b02e8a922d6c"), ("0ce6ebd4878b8b48fbe2e6081296d7a33d9f120ac8b1669cb8d7333cb494bc2c", "2f59c0c95beb69a8ed0cf55c9745fa212d17e8dd15cf359f2ca4824f29604222", "1df4bd1b19ef7e60da8477a35afe1da6964253e882cc17900952e03352074c2c", "08196f1a8dae703282c6bd18ad8cdf390c6849311912dc9f87ad641ed3558060"), ("05d4b41dd7b04181870977d0755da676bcfdb49bfe1a465ce75576e8a4bd49b1", "074ba217be53aaa41d9b32dcec0f69000de550668b2b28f41b5e38dbd6b013e0", "08d8cc05b60fc45b58f5390209ed9952891f1cc0cb0fd270e6e8d1ee9a2af127", "19890bf39684571560c7b38a77f4f016ca74d450356373c29e5e3c9b10804f48"), ("01d8df7c28653947483725003f3593ec1a1920714d6ce0a84f65d8966c8e0fed", "01e3a436a8bc05dec2d4d080e74cf2f1f015aa8e1ee5c845b56c9e6ffadda42f", "062096f8edecfc32babd0e1e1b28e8af49c184fb236d88a6f62adfd5a496020b", "2acf402b7f3249e4051eb7a59b55e02b0918c07889d349f5a524ed291b0fc367"), ("15b919d16352445214a1eac25c2d0f0cd4d08f930523c30f120590ab220fea1b", "133ead51aad8eabe552b4f5acf49c6242115687dd705a05d9e4688e6f33b8da4", "28b81ba44fdb15945497c1fbcf17b8cb3263651426c0764112ab6450c8816e83", "2a0dc4c43176ec80d128e80ccea5573c7ac5d9df54b46bc58b8b2c5705d8bc47"), ("0eaaf11ab98fe56069cfa334dee90e86b5a34b1e9d6f8b2cb45a74e8efd35e81", "14d81c0671d915268012925a0e6643b1c5ad21c08b827eb04c12f99167e05702", "25b0d11f9ba34957eb49356ce24cfabd81a7b31d22ab6d8e5395c05dab9d5503", "0320b3c386dc5724e6bae1fc6428e3746f2ae73edda99a90d40298be39c1e179"), ("26874f698481840573572d840116b94936145bc8b8282610267c67ae0b8efd3b", "14e57648ee3df616becf5621f58cb2484b416144a0a93e8e7ae04ece53068aaa", "1c34e8272daffd99c7cc07c81e909f7eb3821a24a5672309f5fe8d0ee15939f1", "3032bd76a8feba22a12a33a0fb5c6a3825915ad20c099947e4f730fb0da81027"), ("0f4e9083fb1b1a183d6b9173ac83afbfa29ebf7357e6de84b94db170f97c4740", "0d8752227afb25be92cef10a5d615136738c432113c75e35778d3d470ac1084f", "100a0dbc8e3d0906ff2a5548ffebdd5e166fff010e6866e77363a67b947c07a0", "06a71870c50c6b7075818d7b696c458664e7a32c4607163d365c90619a255213"), ("3005a86684a3e801c37c32d419e06d9767d91707d36f55d5693f7598909313e1", "0ff62c0021657952ab752ebd69cf06f7e73f5fb546390670eb01f09b31bd8674", "07cbfcd00040285ab872487a7f2e22b80c8018acf7bc3990e350da9227a8ece8", "2aa3ef3241cecb05c347e1967c6370a6f98d81309c6e338e4c038ded1d4d9750"), ("2b3bb6f0444316063bca7415917fac53049ec6f43c6b244ecf085c3ad3207c04", "2cfb2fa6c18fe26c2b22a70b7a86295654031c089adb875736862ce1953a9392", "2b401931c2642e1b73ffe59b4b09e84ffbc085c5391213347373c7aad326ca14", "1bf64082604f964149f1898e2cdd7bd3ee779ed1fc19d52ab1f4c77785f731ad"), ("210e3391c4ff41eb6f112e0eddb11e57190637bbe66d17d7562b333032ecf16f", "2c71abed82fd011bcf8e645597c762a7fb24b0cecd3be8a1b32e5006e73d90cc", "2508adb8913ccd8a6689cc6529b35baff7271b1d85bb6f10c68be53465de3c29", "134c39bfd44b74eeb76c15d9939b031c9c8868e2aa507d4ebd10fb82fd237f7a"), ("13e0616653297822a8716bbba445fc7dfd7afe7b5ac52aa4ba0efeed51480338", "1486e9ed9fafcd726103966ed518de4645071f80132dc6b27a3b72ae445f8fe7", "2d277d42afa3d47216b351ab83b167f4c98f6797f008bff02e77de072113d722", "041c490c30fc28892cd925de3faa5f6ef9e4cd67ccbc714b1915d64a121735b7"), ("1d78a425d5a92699519dc1d2611f8d571e3f765cbb6db2a602a4b711337b7b22", "2bb2a9583108c05b926aafc88be2de246e29905755d22d3644332d18fa7dbf4f", "1bde068867156071ef939f4dc02b869fa5aebc3e2c6cb403ec39be60bad654be", "190cdf08d94f1f3d1091711ab247238c89e8675a307282d5dda1a2f80cd7e410"), ("175a5e774a92d6d8d9e8a3dfd1b8792d918ca23945a874e14332bb6956a62d49", "01369143878ce14e5619720549fb88797e9d1981d0c86a349848e836737c0119", "1de7a61c0a78de373cbb13a2cee1028ee69a44b38f976a7ff5bc7a8f4466a506", "26c8e8ae470e60a73f780bd99033f43bb3cf0b723a7420d3a467ffb2900423fb"), ("02857f74688d6cff7c787732ccb0b91dd6b31814e070bf77f424fa5ed7aac505", "053ac9ed3933ca4fcbb260c52fb58139bafb5433ace447986e7a10bbcf858c2d", "2c5e40cc577f4d797677a5235564fd50d5c683a31136cbda48eefa45e9c36b1f", "279f25f117e713099815ae954ce681900d18def268dba21cefaaf14f9ad059fd"), ("0139a59077580ab155a472fea714711f8d3c460a890f4478bb986b2de5c3729c", "2518c0903263b278a57e9c1fa07dfe8defea5eadbbe3fd11808e0a2fbcadfe47", "093805154ab790a031ade3560d037ded631f465dcbc0b72f43f770bd9c8c5438", "0d7e6d7da8eee8250498d1e4e3666bd561e99e0feb42179b741481c4efaeedaf"), ("28bb436e4c99c3a8067ae5b57028179a5f84d3599ad2887f2c12754323840d8f", "0514280ce2fcbdf0dd9900061bb7339344a774075e19cd8c8e36a0f0069e19ef", "021ab11ed1adc16435b2db0fa0d67f0b4c6912c7e0780ba8b9706a26442fef3b", "246a775c485a0f53f8361737b75c6d77f5263ae771b81fa80a4df8b27e16a0ac"), ("09b7ce212c093610d0712e3be1619c8044a3d0a94bfe201ddb8b368382623e60", "11c52535c616f60190c9ad0a59c8c7683629f8195a1061fa598ddf9602255565", "137ff64f135d7808391496f6de57abe1de2f1048f390cc94fe02f05abb21fd02", "2314389ddc1c0f3e73235e06aae0259ed4d90d80bf272a725719ed8649104153"), ("2c7d825b12322fa11d12b40897f927169ab3b3ccb87aced61af440edaada8772", "0310cf005afbc4d3d22c51174e442bb0dc8a0afa507e33a3d3efbd1693ad2ce9", "241bad196a6000619cf1979e0e1baf03bc902d1b35aea20db6ff98f3c1883a40", "24a9115c93086952fdf1a588d62fd3fc8bbf5cf2a8b89759f12bbc3124ddac31"), ("118d35eba7ed751f4f7c8cf604e84c5e25cb32e8c2989b0410e6abeefb7bc658", "146218565f3a45b32bac40e553877305098d9e854bb61a9ed92092262f117611", "097657288017c256ae8deb048b06af6f9b207e3907b8cf5d201eac9e7fdb955c", "0d89b29ca4f7f80864f701336653764b735fcecacdd3a974ecb49b901bf8f796"), ("13b62bd6c19d9243b35bb5e0325bdbc416a58c1b87d4a7c8351df35bb77f0fb4", "2924d370694e8e7e27638f0baf4f96137aa9dd227298a8dfcaacb2a335a1081f", "04649f3891c8106dece256e1f4dcfadfe4fd89867a3a397c11dad160feacb917", "2237967e9558f60fef6b98c4166cb984096ef78fd3b23a53b0b9c858b77bd335"), ("21da4b790e4e5c24bd7fe3563b9ec8c7d0bc704f32bd1f68d3d576933cf63019", "0f81eb898e7dd3d5596efe1569dfdcd419b8a202d68b9df63da48f9894b4d481", "273c920f3f6bfff7231bdcb8ab4112039d9ada776935568ed9858dfffb8ca522", "211111c72657ec59ee34c77c3e318af9485ee12c81fd4ba44b0caa0d944253a6"), ("0d0f61de7dec56c5a3f3ec3ef1e13fa16322a1659fbb3fa4f89eeac9995e3146", "1cf7520ef378de4c784c8e1692645ea1ae485b83d014839be2170a0a9aa8ab5e", "20863104ad4dffcea5e28fa56e073ba715e5cf5fd1709e8f63bcd3c0d13d070d", "00d4bd2b98eceabdad646ed43adfc9772f9115a1283395f467815b06e2b895ca"), ("0c6790711e11ba14c3f620acacbf6c5c767b60ba91773313543955f98a049fe8", "00641bb08d3e736e97c24d8a39f075ed1dde4ee92a5956cf7cf89678e16815f2", "256fcdd03206d1466e565da7360685fd436896cdca34e59131985c5020cddf58", "0edb059610f3ac801b62a8b562a527c6efac8db9b9f78af4e95ea3c4b3c53499"), ("07eceb5decf8c1f88182d39ea9cb73db34d3800f048b4bc7e512561fbcb6dcff", "1c30f69bf88f26bfbad1d3b3c45f073dbe2a326d2c7178f6e6e539dcaedf3777", "266cd020ee8ea9caf52b639af0886c48fbcc2db0a362e106fa62fa0d1273b9ea", "00e150c5ae4a05fc44a13459a923579bdce6de2c7e8c2d9795834828955d60e1"), ("207a0896c58ba27ea1994f687a7ab96ea9a9d5f7eb3f8278fc2ffa6489bd8766", "0ff374edc0869e3d2c00a1718d14007558b8d338df66f46b12d99ec34bac145f", "1298a46ad3fd09fea06e9a0f263266a586c9c6fed07e3cd86079eb611c59e71d", "1bd9b392158e6b40c99e8c5583e85ce5404c778861e8ac48adbd473acf17cfb0"), ("01f15e8c91eac18b2b5274d933c8053c6ae8187784b5cb1383d087c663794f43", "1088fb09b2821f06d09b7631f92fca17f6838acff61a5d65ec943937ede66724", "2bcb445b2233ad8cbcb2ca855724dd44ed10dc44822cc8814561796b76a83c72", "2a929aa9e61129487721cb15a895a4771da031254b458ed5220059b9d8390e87"), ("0f1d9d3c2f8d08a0f9e7e07744add601b1b0db9182a29a1957526ab83e7c7686", "1ee339528d9875b70a34e3c4dd23cfab49538f03c0017efe8f4c11d753f6efb9", "2f5cdb7c5c8b7008074fc6a37646d28d6aff0db02f77209009ef6b7636a3ee5a", "15d3e0c096071e71aac5fc9759b7105177dc1024d1524c95811a515211026a14"), ("2d833625079976a45d112bbf277495a839456598b84e354024eb3e09e9b158ae", "2a8cef3c53ea2d9b4ee65c9ff7a8876cdc97a61ab0d25e21283f4ea4d6c944a9", "19085ab2ec53d4191a2efd5a29bf9ddd70cd85b57ed6f4a336944b46c7e16c39", "0b0b0e1afc87998f5d705121cbb4e8eea8d03e7119b086ba6b2750037ae204ce"), ("2c4bcbcf8df1a9da39c5d971074dfb3346cec183c26cce5593c2b5be94338d73", "114cedbc5e704cee7a6d1b71b721b84f13395f5e8f9a08b04123ba5e72d865ed", "0cd2c54c26c5d44f5e234648e005d6f72564f85f22e07ac1c17869894c5edec5", "1e4af6aecba2c9bfb77c932f8ae906fcad39b4692252e6829eba5e77b664b7be"), ("2cd6017aaa271b07bd4d5e5fcfb89f1756947d5752a2416769a8d92b4d22aa24", "0f2a25661e69f6039d64127f949bf18cb250e7501da2e2ca3a872e1c55d586cf", "17c94f4b669a17c1834309624b53e19139b1d90d40b4a08af091f12416d136d8", "23a04562a1b6ee6e7d74b96e6a63955208e6aede791d47f4afaadea45b7d97f4"), ("1696b6750b26aea84375b083b2e7db7534381c0065d578ae94edace7a14b561a", "06f15f3dddedc6da773919f79d3514b6fdb2d2cc4db93d929cf98e370618a40b", "27957a9399251750c12a2010a5efbb57559242b7383baf567379a05efcda7bae", "08471ff039b7a6c1c78255934dbe157155f3ef67f3af795a3d52f1fd0096faeb"), ("07c389ca6cf5cbf28a81be345a9a3c6edfa267e614a7cd380eaab7f78eba1bcd", "1da0d32621499609b13529a286f70e9ec221c29fe070cef27fff42da39309641", "2b7e11af0bea391ceb7a469174f673bd489440e5619363d95dd93b3ef3748d4c", "0d6f4020e54992f3ec7c6924c786936454b648343a46e278942a3f1bc5a67693"), ("23c40fe07c877c040f0749aa398d8bb14a5190e847d214f996cbf1178170bd36", "29a03a772011754bb6818b68ac305d195ad7b3417bfdba7ef80df29c415188b5", "1b54c0b61ad0fbd5dce8d220dd0d7ce56a9b3385bac740f22d3fb3ce83fe0f47", "1f98bb0c405b5527ca47e1570bcfcb2e77cf947b8922535c4aedb43cc9f5f38e"), ("11976bd5a204938320e21dae5ddaf594d41980c81228cd099d0a2f1773252aa4", "1eb27b609fad5007897bc879666859981448c42ea44cf19c68b9992f01af9e53", "1e7eac7ce551471e5045c5372173c9e063c2cfd8314df3717d46de1edb688186", "2f1ea98e66ec7e57895c17103c0d1160a02edf83928a2150e18f2c966ad58231"), ("0f3c559eb192e51de8d6edf35a0d28132fe486667be48e11890641c8a80a905d", "1114ffb41c806bd0f1b577ed705c120d7150131bff2050f3b0f06a60ca36fdb3", "1a029dfd83bbfc3309ba3fc0151e3ee23a02fc63e653a75e9f61f5112f9d7f54", "295b4085b9043e2ac29a361c27f21ed9d6f660b0b470dba4d95a22d4e4c506cc"), ("2d1b2b7452bda8367ddd40eb7e33bcc0add3e6cba6eeb0b93a1674ed3129d5a9", "2febfd47981d5359a66d78e959a55ec94c72fc4a8918f9d19f3e53f3e145c485", "1841947dd9c3d8434e54f56ded6d751f99a727aefba39881facc4b344632d566", "1e3fe397b2ff5afe5c5ca1ebd09b548b1524ff6f9111505683c290825d91f869"), ("02efacb83f62300ca03091d16b686e78b8cbf40608b4c0d26a27a4b348773bcd", "0bee3e00cd7724ab064c7086d1eb33e28f7b064d8cabca88abca9c526144b947", "20b5a86e89dc84290c13cac2588b3b3ca323c5548344bcb7e95135e7fae405ab", "2185a8768c70aaaa24e23774974fbcad9da3c958ff20203256e535a7dc17f8ae"), ("0833d2a00b32145db9776d3fe666be15d523f55c81d2d9579988113d6d15c10e", "1dde181d24b8cae42353e57cc9bcc5bb58194054021a459ba6a3eed9ece7fba6", "159495ffabbe0c8db77ac977d1facc531b82576a7f991038960e1a3ea1f78899", "202791faadc9d3ad05c287dd7f9a57957147e3e4d963b824fe60cb79555a81d2"), ("1e5aa4add88c4cfa1219dc26d94fe879b0a53dd8dcae89a01af2d4099bf0d781", "1ff1433103a0121b0c178652e46c20d774ad49b76096c30ef405356317b7ab2e", "06a00462b6bb21268a08c09b38b40e2f36214676e7397b34b5e5116582ba101b", "0c8460ab356fd076cd5fc577916f2e0e8ed8f3e60df1c43d37ea3f55d96981d0"), ("1c2ff891664446218c743cfd4a90623d7230c12c2aaf689105778f870c1aa459", "015c81ab05e18e6fcfc9ddaf0e60a81a0afb93b8f3966d9488c57acaa49f8b61", "2723834d5556010877a2981881e955a704266858018a89ef2b3e04cb28cfb196", "247030921e7cbfebab7d9c95d1d2c0745e37adf6fa69ad34d08bb8fb744e69a5"), ("20880ff5ffeb367b23456b22d5d8519e8f53d5ac413cbefd63979cbb01a59ef3", "08024775c1c8bc5f4e933e062bd4e387d6e641d5977e531745c3e9d6e4a4aabc", "29201cdd6beab07024650b7de9140fe73d22d832914ee995eb8878c28971976a", "02db271aa187d8b362abed800e2f817e6c196c039a8e3e63ab7c9f572c81cab2"), ("2b007d741a232e0590b79f7d7af20d6b8e0d30dfbec20b4f6846e044b2692921", "194f7632fce6fc33a24a3e442bffdc320e6d64e9fae66e7e7cb69328d26e38ad", "2cefa6302ef32380bb4c9691799f8b440c6e4e8a63c1e7b2d597691dca796f7b", "3056141cd065af9422f687edf2332d4d7883e93f2ec7ba11f895a32d959ee922"), ("15495b9983f7ca7b74f9f027e5e48c557ad6d9872a058a27be95092c20e442fb", "28c7ed0f0a1acdab06e7096e789ba7eea8bda52987243f5c45fd4185200893c6", "1b7d144027180898a674c08d3042b06bbd6c49d9f57c2e640a93cca25c6d8039", "1e091d73379588467d733cd0e49c1837ec9e6c3802a799fdfdd293305ed4983d"), ("260f1c25182600cfb7bbed3f67d91fc68d128946ecf285127c9c93bc74ad34ba", "269de79b287a5a722d5cd0f6f5b362da49b9665ffb32a6bd52b6adac8a444d42", "140a79d33105236aa5c49d05bca7bb28cb70f7b7f5e9eafef68a003da54af8ab", "149516da18c77f98b83b9f317cc90c5bea4b2a5902f74daff9294071266b9328"), ("259433433f1ac15ef51bdfb75d0884d462c27edf7866d7f76f38aa6dcc1047cf", "0b4da6275845ea686f463b67326e0890f80bf753625f9ef8a262f3e8ed028850", "0e4498b56652643781f3ee4dc90abdfc8f4087b8a5f8fd79794f536b50b1c8fa", "261c1e367ed6d608fea2fe333bbfcb8b3204fc7e5668ea28cd4a19b56abb3beb"), ("24a601814bfd07c9a29ab92252e8eba6d3408e161188dc72b0b079ba6fc38c50", "265715af2e80c4d9e64ad83cac881a83f1e127ebc6984f0a9f926a6ff2ac2a65", "119e40f7a4cc4085d3b56358075c991d0a964e8f811eefa890c69be5f33f5734", "2bb6896581c80dd53fcd9d54e0dfac443d8531cb670356d28c5f7bd112a316ad"), ("04d10ff65e3f6f35593b0d3a2aaae2f50ae0c04abd66d9073b38025c2c669b22", "25eaaff6689ee09605b972961ec8686a6b4e54a258b08cf66e355137a92de94c", "2150c8662a1c29124fa0ad4a613ee699d863f2a8331c6be94632aa1e871f4d23", "00718a8360a24aca71118fdef01e77564aceae6141b4c8757d9d4d632169141e"), ("03f5ce92cb68e9233f8512bc6eb9656b3e6faa6407107bbc75e10233ed87fee2", "0480dd995700230f9eb9776777ffbc6a6a3eaff292b9b5ce5dde2ab5238bef27", "14b2d14d37b288c13f1b9d0abf4008d2c5ea984a44604367750556e202ff02bc", "0145de2ec6b9d7890a227c499cd8d3e01096b6908c1f5e6566073dc4160af2c9"), ("08616064a42c3d1d0cfcf3bd18f9b7c20fdff1fa57220932fd3c0cbb5d29b00b", "25c96c23679360df7b8124d62dd51381c4c58b0d9f596bb4072b9c15f55116db", "0991767859c996915f79b71265126bd7fe3c186f146307fb2fb0a43a608c3d9c", "21e6e146c772cf0458a2647549b31a2ea6b6112da398daaa583d2dce2436b37a"), ("09d2667903c72be89c132682c3837f76609cf2cf8cdc68bafdaef452c3a92b4f", "2100641f69b38299a9e9ef5af1465d09105c317892596426512e876a926822eb", "01a061cf4edbb801997f721cd5249f197db3e434dc0699f5aa60ca52f4044c2d", "0d3986aac17a79e0f7931e7cea6853e6d4e73caa4d628059e1ba21a76998196c"), ("17483a4f592436727382d8f2ccf5ea78ca8db6e50a78472cfcc382270ebc22d1", "2c1a63ab2dec2ba9a82a6a49172f504726efe8ac6186c54884ec56425d9f0a5a", "2993ee647135c31b90735bcdd3e9b411b6be7fa6010b93cbb4acf3f41c31515d", "19a5574cceb9dcc6a6b4ded1ac1cb640022b6026cc1af26b69e9d402f7c4aeaa"), ("05c0bad4e5c8c6bda51caad78519e197d2a1efd1d339c8898b47dc3fb0b04b0b", "008e46dbd0062d1b279b72cc01350b1a4d1c05d5cf8c21c87500824d0e607239", "24fe96f4eb2902d1960a0732c09ec31c42e9156b0a594b039285eec2b19d63eb", "1ac416ce30ce6ae8661c2e07eb558cae2b01f864b40d7f82d94d81114d9e7583"), ("2f05d7fcaca010725539feb4a211e5f0ae82b633ab818e29bf6707f0ab130c05", "008f25b63f92049b721f3f0bacf08fb0647cb7ba9a38032ec321c24a5a8007f3", "194af7c568c5b8c1d522ffd4d8d285fb645ebbc290534295b75e213d1f235df9", "031bd91414f2a1975756313ee5bacdd14b798a00d89a4df78141a69c63ce2d7b"), ("1876a5f70340875b36944899afdedf59ddd9d631b1194263583ae677587b7924", "149004ed895ce62c00f7ea859f19ce734bddc6068231dbf6c42dab793909c5fb", "2a48d2d60695710353e631962c6dbf2c7813269a79e82b8c46af066a3c2d289c", "22451c1cef5dba107e97e0cedb0bed5ad72e36f1ee0cbe20baf2aa4a13baf4bc"), ("25ecde1deab7ec79c4ba80e69e5fb434cb9a3c24a20b3fb475e8105a436edcd5", "1f4455f01c80fca945f4801a0a8fa77250a8f3a955589e8bd6ded0a4ebfbf10d", "19c7fdccdbbda3a11f85b19a68eee0f1c35ef6a08e46b4f3894deca731aa5690", "1fa9672461ad22ece7af589a24b9784cf9daa90e31241e3102b7e24986954f4b"), ("20b1c49ab98a809e2d3c1447007b66abd0386992eceb1d89cb7a951906f79ee7", "23bf625d1c15297bdfa9e5ae1595fe23de3f1483ba3b13e71b9a021981589e3b", "21f1222e166eb3ff11f5790281327c2cda5fe9196499d5fee584e9e2aba258a7", "0daffc3635d58599e037f49d01ba75692b2b3598e614747dcff24adf1fc45a3e"), ("2491f8f3c1359ae96eeb41697c96099a6a3a12d14ea960fd94a967bc4bd4645a", "12bd8cfeaca6ae910d552939d38928111dff05b0e9b11cbbf6a36f3fe4e7c7b6", "152a90efebd56e3d7d255f6b5f1eba4ac207846ac91fc0e659d8308b9e7381e8", "139d257281bc40dd9b25746cf073e3d947d13ec9f9908bde37d88fb4e088159e"), ("03bc6062aa389dbd01b38657c7535c7ac54724ffaf44ce88acaefcd68efed276", "2b98ea35e76e903bff694b0b218dc9e0e9bbb44d8e0aa5fdee10856c93e95327", "0c6343698926d64914401899d001a81299173b1cefa8436a8dc20818fdc5bf6f", "29d42c5d8f27ed1c67297b28a46afb0cbc6a87c1c234bf5bcec1307f478e702d"), ("104cdc583fea25934b0a8d362fc4bbb50f588192bc2990c7ea9b2b7a626bd08e", "207dde7ba2e73ac6e2b6b25769e81c155e3fbe08ed1feb283e0a41bff2707ebf", "0e2fcf88ce2024ea2021e63c8367349ee53e5bf9e7f6b5f54dbb322eade16b00", "12579a0032b002a853013537ab40e44dad2bb05aaef529b73b37e6dbd69f6d6a"), ("243e8406d3b896b7c85c1a376ddc53b7b4405e3a32898b42dc140d1dc69f4561", "2ded8490304b9cc645898fc21886a89cdc35e2d57d5556ef85118acd838f37bd", "15d3bc41dafc80b4a0611a5de49c5b0a39b3be71bbfd669b2eb71e4348f70118", "11521e11be33e83e7a9d394ec065460787a8e8873d58989290dd728756952b63"), ("172f802170a795d07975214b6805eafcaed6714d07e6ecbbd86f2996c8746a86", "0a1eb7f1387ae63375daca54accab4a7a4f260e415c86ac3e389a5f5b12f5ed2", "1f18b31957311e7f06d00ec761bf1fca415b18b00ddb002d492baa459cc5437b", "277cb445ac25933032eb4920f271e3a53fe22e100c983ad79f8cbb95e4334633"), ("25dab505ee5731c7100f00f595121b6735b26b34a9d9e9efa2e54337ea192a19", "2d145893deecbc9be19e851ba381772bf9c3923f2514edb4c2e9ea3c9db9caad", "2725cc8a9e7b39d334999b8854547374f1ee0a78984920bf8525cb3eef30376c", "11d9f840afe035723e3511e7db411d5c35492eb1d343ec35471fd9991dc959fe"), ("2b209a24a9f031ca863844715a0669f0a931ba4019fd60a762b86489a3c358e9", "188a4b92ee46c8ed3ed65150b1c88713583704edc9d4c5a77d718ec7e3097c45", "0a4e6b6bbc5c98e71a995853f1ec5e2044369432c62a25431022057231ff2f0f", "2f6f863de1c3da960c6c5919a7f0c277cc3d50379714947da736ee811e13a761"), ("0d311da7f94a585e757b0e52d0bc4c6a4f6a5dfd627d7f0a137c8fa778591b47", "3059ca9f6490bd3a78d168c9e2cad5c96556654f5d6f8afec429372a0e360e2e", "25e0c4798cbf8ab4945ababbb8d011c10e78df50633c6b4e5cb4e29e054d205d", "0529ede7f84c9165272938ac79a324efede723d7280cf6673b6da8f2e7699c46"), ("2c9d31a2f21d0dd0835edaaa00887282dc71695123118dd10ffb4ca6e2912ba9", "27ba5de6b86d744cf586705ddca13dd0c03a2d81f55c12f2c4e8d59dbfcd3c51", "2ff877e3b03fb9b164e45e70f552f34a7d589bc73dec1e83bec25bf361483dbc", "20c1d7b5de6be7b4130a36b2e59878479450460b4781bdaf4abd044365b6e908"), ("221dcc5fe66614f7b5371c706e43877eba21cf1f517e53921ebec766f792b7ef", "0d18b97a34a0793a329293b6bbd33a3aa8995c76997820b7a94f5c1016cd8736", "1ee7412ed76be9639a782138c47ba9e98059fdf57bb6cb8cd77d82d9c0c581c7", "16dc7e257bfd01c6b9b7e700371d7f93589289af377c3aeafc618ecb6ceb24d0"), ("26974478d6c25908307e6f71d0b87add2cdefc2f681fe234a1e18bc2f940646f", "00c8217bdfb0dbdf8245ace0446e051700d6dddc1e8b3b69b8842feea64fb4be", "1dc2f9668af3d1c1aca5e2bf476c19d8ae038dc9d2dca3c73f085a3963ad612b", "12256274c26dd7de4a6e367f425175265d4da6b2ac1f3cc903fa50e2b1d8f430"), ("10656f518cd84f89d98299c506527714479b08e2867fe02bc3b52c04aa17e1be", "2d6da14eec48c9eed6216d4133db857f1c9776eca830d52b9a9f2d82497e87ca", "2e2f816f8ff7e41975221ceb37fead4122cd51f62ea55209748849c1a274bea3", "0326b702c4b9db039a6fab188c74102a209af3d1305a1c6386a35506148829e9"), ("0f7fdf65c6cb0cda6c50b6700537655a06b52dce554f9939bad45f6ce908d806", "2f35e2d2590da8f62bea75eceb08a015a9470fbcdd5fcd721da86deedcd0dbce", "19041fef8fba39bc0bd6194e6e6b41a4d153903842ab606ff71fe99b357da1f2", "2aeff063b77b21daa822963715c7a1b8e5fb0a36e0de422aa83f7780cc07522d"), ("14b7c49e74af19ffbee81fee153b06f8ef6580db6a52a6ffb31fef63360c3a5d", "2bcbcc040d1d6f51a8584cc9244f52e1010d968250ef214f5e1dc0cb691b3589", "0cb7c0c35b17b93a71a1d4888fa8b19cd9be39569e6228a720f0ec454f90b8d0", "281aa2d9398e08d541954fdedd7ee178c4e0c3f89cf9144794ee0c91e70ad015"), ("29ccfcc83887436b58d50323ba52d79c28bffaea8722a9ca7642953a90439f86", "086c1cd35035777f728798763262f0dad1d4b7ce2849fb5ee4e7e67a18734bd6", "2cd85fa92d8cdb6da88dfe755f6e0ff9716f0e0a487cf65f3629b2d648c3eecc", "1ae27bf6a049f19b965577134305d757a338b10b8e1e12f8e76e0a89169f7cc4"), ("03142a1dd7fdd4c016e20a83d2facd2dbecef725d69944e14db7f470ca8c364f", "0db1a62db8de6cf72f52798cf8c04472045f55801f8b4df15c3cc3a4165c4467", "2ee458ab2bb01dd06fa8908f0190f7c559a7ec7c7d7444474561f4f4ebe45a0f", "18a379a6f4ab7f245b8594538f572ce4ac779bc32ebd946968421367747e8730"), ("13ade776d392bdeba8c42f0e5cb3aca9ebeafb4c13afa15247da2246e1e01442", "189975bbbd73add983fa6e82d72dd5974b331508de623d8b5e3bbb0e418c3b38", "239d26704cf462006d5d13a5686a2c06639c463b3f097131a429091f57ba4972", "2777405742af4c03a623ce7ab92187378e117c6da83a4ece6864ce5f4b567958"), ("27a83107b8c9e390da5ea81f595fffda3400031e9c9370ed79bb7679e2385d45", "11d2de66938ad93eb5cd63ebae49dc4881ae7db406af1399f4d41490624675ce", "117198ed1c2cc2af9cb71dfb5dd27301c5bd2c45c60f58a519e6981fd3474728", "0d8c00b648e14326e435e2ec8a61d1d6ee4dc9737ce165e5fb249d52f6741e0e"), ("0447cca173db7b950653474d631e627ec9b81936f59c55037da4b662f2a1cff8", "22c28bf82b9674b02df3026e5583381f66d16779bbd9c0e98e55807e6c96039a", "2294c5e292717aff9ff87184e8db613ea1e67dc06e4c1e813a88831d93090a21", "1345433713ff3c305b6102e6f81c2aab093df4399c8ccad50ceb854421f03acb"), ("1a9936c7ae8fa65e6259581796c99d844f0735473f5519851c473bd6a05973a8", "210c1d623e25fb93c699c6717db1d78dfed359e1aa98183a6fb2c2bc12dbd983", "03f5f62f0f36967d8a7ab4585048188c6a931e02556023b8a4c0c54752c81033", "26ce45223d6e0a3b636cf241121bc700680b7cc29e88e5ceeda0e57c47cf6756"), ("17c9d507849fe3e5f7caa98e2dc867a0a5c7a56c51d4d1831e8faede8f76b4f5", "2a6f04f48ce564473e58a5b472bbe8eaf80fc22f451558869daa36b030fd22e7", "12b8d9872112b0cc96d00beabdce939efe9a1827a1c57e9025e2ef0dc4653220", "119fbc41c30538b9fbeb7afb83fe7b608495328da3e12f68a34dc90c482aa5b2"), ("1a90c6c81f813a0a3928f1aca29a30a33731d6da825d4f54f301bf46aeb88155", "21dbe5a4b1092e98d50709cc1e2c5aef8dd1857f6ce971b817ea7c96ccbc8445", "11d5f96338dd9e9d335ebfbbefd7a7cb71b1d6a3aa49b258ed775a62fed8b4b1", "19461555efc46e0c37ceef19b459164f67d37f6de473b482cdfe1bb94b74bc14"), ("08619901bf83928574f1dea8b0f85b01309ae6cf6aa385ce596fd42c3a4dbf3f", "25edf6f29272f577b617cfac1a59c6dc745659cb8f91fa28c6123f3d6133f955", "0aa2b36fdb7a9c83467d9fccbfd9eeb10f349e9bffae59c4fe83a60b52c7ea8b", "2d8c26e3ad774c0974ef7826322d5af1091316dd2579b0deb33be1b82d228895"), ("271a148584d86aa99e419c4c4a2cc9410b9d876afc32fd971d533e8190f9e5e9", "22d07564a672e954c1bc137df167bee62c4dee582d3c78d2c35be0e44584fc89", "1ebf5bd7d8d8f8de077b93083ac3502d833b7f387f68bd883f1ef053de8d0467", "0bb3ac6c7f08422c06fe3906420b20f7772fc708c74de6baadac38d4131b4fdd"), ("0493afb482140c7f2d6f6a17e7dc47937b079214eff797a3162f1ac63edfa99c", "0e788d4bc48717bf30f55f3549bba84596c2013cc3fae63ee2dd85ce16269073", "0081fd0b7d743c1deab6f7cc9876995e33d4e8e7f767731dd088b94c2725817c", "268c5a8e3e878686f4fc6643f349878aa6f7792f9c71174d43209ab97e63e13f"), ("099a797cfb1a58c95038c1b06251d26920250f0ea04a1cd864b71dcffce429d3", "13dc3f1eb2d47371d03eaf1c80afdcd5d32a6816f7bd9543cce56f6307f2a373", "0ef92d7c88d68abac1f0212c91ee331a9c32b53803e85f9eedd7f28220338d8a", "0869552d6a4b708e0cf8f9d7ccee53efa5c53628cae0370dd67b552e21da6895"), ("25c1e311bf3de50c9ec436009d57b1c2d0374e2b726681561bb1614e7c547811", "12bc0dd5c5665e16f98081e09fd15672d06d9e549d3707d92773e0ff6dcf4e03", "0c37ba69bc8542e0e9ff93a94c6e183a9f4fc5f1c7c32f4180810c3301a0b431", "2801dc8b69dd0eac6a47cbbe46dc9a49ac1473ad665a45a586eb40071263d860"), ("0ca1458f66fac330573e31a5d4b9a7ad7ea70370094bbdfe6fedce5b2a2b545c", "3059a16eeeb954cfe4a4025d102a4243880c39f938adfb48cc8a97ba3764f693", "061d3ca5f545bdc0ee7fcbf7c498dfd0f80e63a120babbc8314e20f831ed591b", "0b72b5e71ca659728d70dbf8a5e6b5b98b1a0475e8ba4676ff11511d0e026530"), ("2790d88fc3707ec5a3f3d48ec0e575fed01934ecad4a4b22aca62cc8188fd5b6", "1c74946f555e8eb4e8b5f06798676dc9612674c88b60401dae65cb15875639d4", "2d9d7588c112b79829c15d9cdf1548cff4069f3650a110f0da5713956eb6652b", "29edfd946a84b493a176c64841874b5d9adb5ae16ec5e9ea3ebb92884826ec37"), ("1ae019c61098396d1e39813c954860135910b8833c17d45f3d4b314aa5c4afe6", "1bd4de3c266245110440f051d8dbe3e22cd9841d8f7266abb29daebae494d506", "00bfbc7429ebe45d6e84e12c9cf01dfe4b93c8c451c4ca477d53b39430ef82d6", "19168015b4dd3cc2dfa4d5c58d9924207772a7ba3b9509f4c9bcac8bd81f8100"), ("2641e9ff33880d88a55204395ec66b8b82e415bea3b5d27549d37bb507f122f6", "2923ccbb6edd711d2f2ca534781d73666c233eb3625ae266dc5b9bd6714aac47", "2ec4daa7d6716f0a50bf60bd9253fec04a9843d8633c20e1545d9ef27602f621", "173e6bbc151d8c5edc5efd6cd0cb75980c4d1648d1d029a39af884e7812dc217"), ("179d772f52d060e2ac7d8f7cd3324918e7a0959d65192eef8b985c2cb0cadf26", "0d9657d6fa3f89eb315c40ebe5d5b1a44490cd170caa489e0fdd0d8b953db69f", "26cb08e8c5f252ba7b44ec368fa267dad73a0a7f79e3e6c1b236e1ea4f2aabc1", "1622b42d4032a18a93fb39ff77604e9ebc84dc25504c106c268bc5ddbb363376"), ("03ab85bff5fdfa70724a946693120edc3d057bec3e327a58dd3338a7b3d45c8c", "1cd9bae96274deb678c0cd1de2056bd423c0bca229d68cb31448c62db92aa77c", "1611770903efb067b11e8d56ca8105bbf4198e59f5ded837662761650a09002d", "0399855c75e536ed2ac391a681c4fdbc8e6652ef9b9ffab40b823ab2ea38f290"), ("011576d22041c66e2beefd5ffabb6fbab99388ca05c08f4ba214249897ec5f84", "2d405e068227e4801c0a69b0d7b024c90f3eb50489be2550663e511791156b9b", "009d76a32b9609034050be925e18dd95bb4181a5c92312846b6b0abf5ef88e8c", "0b22f67698c8ca8a541b3e7810d9eac21f3317c08385510bacd8cebf1ec30007"), ("18b587f1cd4c13a1e172d07b6a42775d1630099af46fa606139bc187c765be6a", "15d7bd11367ad6d3c1c4aa76f77e4a3a5f488c0ae6d4a35db3eb4949ff485e4f", "083b75e3d05bed40b8aee2873902d6ea7cd44cb0b6560c4f9295f45e66e36644", "1e6fc141663ae18ddab592a24c6830d04ec3548f33cc2ea64a929e8524aa9d84"), ("2f0102ae2153b6efba455751ddbbbe3c5ba3b1a22180ee1f3bf1b575494adefe", "27733452f3f3e29fe5f62efc55d9c16481d4b4c2bb7338c1f9584265f50e7c79", "01843b791abb30cfdee2b35e0f245e2660f5122bc2529599d0b7045ddbd90183", "13b10e25d0b26eb709a20126bcf32a7f45d285ebf76ac5672e94deee098afa5f"), ("200cb5b2485cac0395441eaaf98532e884ef06da5eefdd108cc6992944cd1a2d", "2a92f11755e7938768c1aeceddf6b26e674db096685ba0096277389c28ddbf34", "2e5063f9f4aba9b2cecad0f572febc09fd3822b162bd39f8f67dfcc41b4e2925", "0d15e83da67b5c25197bdd55cb39b53127e02c17bef74b4fcadd567fe98954fe"), ("03abb9264ee3e6a7d04dc71f9fab294136c7e2c05ab6846f01c266ecde328978", "019a1f69b153472cb193ab976e10aecc4ddaacd48d1d36ae3f9509c3c9c27ce5", "1f8dd75eb7baf435f13b8112ae3817593e658852c9d82f54e3f2a046a08d6c75", "1bb4688265e024f2345c640faca941eb2047d3b7b76fa4dbb0eadaf82a6badf8"), ("07e5117f6b02e9a4f56f951ac9e9697048dbb79270b1c4064c4ca4926fcf07bf", "1136a02a8240e94233be9c117da5a3e674ade02a32685f665d3f457b9ec08e3b", "00bbfaf4342c84973d8bde65abd002560cff467f723f02a603786b178c544fa2", "21510e652aecb920ea697e206d488c878fe54f1f1736d10e10a61962cb6f1992"), ("11a3e41ba9669e6bee57d4d11f530407d7c63f1be34dc271df7d0df7290c7d57", "0a57965c061b186e87234838a0392ba1914b9abefeb8f968f02ca8aaeec17d70", "0dc26431407a937b6e8f419ad7a62cb5c1723515374041f7f6a71624b21dee34", "0b728166105a1ef5d37bfc3ceb25e3330a00de60c6a61322bac024e04e7f028e"), ("2a8758d876fa827d7707b58c311c7a39cc62c98f5731cae25c54f7a8b9acc3e0", "180649d8ed3e0e41b55d27398d2da6ba143644e27085dcec9a7440455d52611b", "2fb105d99bfdbfcbb96731ca9ac5b93c94ef95d28c6b7b45ed3c4cd224752269", "1770c4d30cce54f149e24a0044a10536eec3daf8f69d4d6b505d5fee5870fd80"), ("1e1e34660b73662be9b6fbfdfa57368db2ddcfe5b637dfa2822697f983dd967d", "2f769941fa203da37763795a7fdba3c56a560ea591e56a839811d69af71f4af6", "1a6acce7e0573b874c037a7b3963627debfa16f2a52ebccec1cc20aea21aca25", "19b26f614816cc4355d3a8356ddc613c6b1aab9c1b3d3f3bc02b11b46e0c1abf"), ("103791395ed820b23fd473d35858ba63a148ccfadb26ad1bc836ceeeeb9f492d", "050845644f543b31e6c0a40e082d60f8b6b696cd9aaeb0ee04259a62da78fbd0", "13f4257ec384d3567e3b50df51124cf4e5b74418b68f5850a3b0a84e136650b5", "2098dfbbef90ad852ef21a3b1bc6466ad4548e1860572ac6722400695449e5a7"), ("1ef61d9e789e32a53669d21956ad4cc7f0698f049e3e42dc44735c6ebd6c67f8", "17ae63a7bd0ed501b0757dbef9335e7c25d68f85844d3e038e22a41fd206b4e6", "062a035858b158ffe4630dcc04840f726a6e91c9bc07976446ec33b76d430de8", "18c8e3c6aec39dd416eba5bd6cfc2abd035770d7c79ca4082b4c3b297b4ed08f"), ("004bbbd50ae59d64deeb3555296462327924b0c377f5b22f253f3d275da77a28", "0359eb86d02f08ccbb9560214d74b30b6936e8f5859ed84f41f4fdf0bdaf0cf4", "016c496f71d4871c76f5052b4633913e8b31eafc3b0917e67c5153e220a43b31", "2f6bf9d3126b8a5a80eef7f25516426bd4968eddff2e39ce1193ba4b0cc2f4fd"), ("12bf8347d519f97711cc0a15158f187a4d363a29b2c678179dd919d4725df23b", "2b620449673fbdb613ad386b43e39f636371774a4a56a974065ae1f828b9ec27", "1a2c820a818c359e67edddc9fef9f4bb96cb30a23fe9c81e7ae0bc76290a42b7", "292ec395768ce05221d340eab2b6a600bf73876dce8b6c87dbc55b60a95c8dd6"), ("292eabf871121ae17b227a85cadaa32f6f0c4b1cf2759ec309be40d48b32f649", "26f76457bb1ff46121410195284d2bd5bb3df87e1293a52ef08bd536aad662ac", "19025ad054118289a29f57deb54166f7296ba72c030b73b31c25d6d32c4374b8", "07df696f1b400fa5f0dfbe330938cd6aa3771e8739144bea5087fcebd4af5169"), ("273886b8fbb6abb51d6d7da768c34cc12af24324ccdc3e7655ededa62cd536c0", "2b930af4c66c00d768458bc936336c7c1ba36e90e4aaed3f200d1f83bf80537f", "1924b0f1bae453852798a5dcd4668306ad1b2118bf5ca2dc27cdc6de4a3e663f", "2540b45c9b9176837b6b82e3b4e5f106d136b11e392ea9cda9137b39801532e7"), ("2735d5494555e3ab8976f602e84f6964e434fad85a14fcb08a695180d479e0f0", "14af516009c401fb605a8535a4688cf1000e61e9c5664fdb8c626d8a32ef6a93", "0df583e3ab2724229db95d1ef25434f3593093cdb0f899e247c903748a694d61", "020cf3eeac177fdc1bd2f09d6b0be5203618b9873702d88cb38fb0a01ba8f369"), ("0af853fdc3e079608739476ff260979c342adda6d175f05bc48979e120ecf6f0", "04c7adcf7865b9db237a605f8727ec7f7313f92c9ce20a4f16d225a3671e823a", "0ff758317d4c28c1bac4f00b5669b601c19210c5607b816272609325bebe083d", "0759504d387418cc122d2addf3dc534f282f3e8027cf4ce75a4f036ebf5b15e3"), ("10d94848730faf6327864803c620cc83b311a2166e02701d6662efa3fec584a1", "2826cc77a8e614ca63a5080c90d6d4541fd6378c30fc71f228c96443b226b9ab", "17d34565e9a007d386b55cdd1765881d0688381dddbf87482f16316f7fdb9f69", "1747cdfd58fde5a019e1f6b5b504844eba885ae33713adb7e4e71354ea3a56aa"), ("1c962d34b89aac81f956611845e07df4ebfb51a08f449de35c61624e91c5f359", "20d72732d1f260b0876b2ac1eec49da3b57ae4e8a995725508bc5423e7256b0a", "0031595104a3e060b7d6389792eaa41fadffe98830fde0b8cde62136c79c3104", "22e465c034f4ac7430eeea19fe75b067422d45213ee9c26313d107990e2eed28"), ("1ccfd5331a56c36d89c85c59771b68a5f01c53c7e52b1c483e2e5330ceefd7e8", "20b3b2a80847bf5e78dda7a68a17d7922816ad25ada13e3239ce63aa803839ea", "0972d54c51318edaafe8055a8a37be2762d3824e2565ad7da58cdd134fd7165c", "23cbc2881635712ca2af2411987803f3a9f26df065bcd2c95121142fe9d105a7"), ("26a125095feff5897624bd552bf40f386f1f54b55d7814dd7765a37faf937338", "177b4450eb2fee195dd179ddf7f9cc8d69f9c83ba03d057eb699ddbecd92bc48", "269a54b4337b694d7ecc5d4b2e8cfb567e3cd9d05a9489925fdef86958935d33", "2e220b88b569b3592657f2cc285b610f5142f70f53de97707b2733f908c0ff98"), ("2fd03ac0402e89eac03880abcc92f58342cfe857d3f2ef16b8e34eccfd5720fc", "0b6666c9db4731e3fe830b4dd2d85fdb8200aaa56a6e0c71f8bc187dd913c341", "1a920932de40397787afdec3aa8097775fea6e68b76159aade0fe3de444779ea", "11aeaeffbb0bb0390c4d0757816681bee1788d0ac6abeaf4c69f18dd63094518"), ("262db716b7a11491839b2d2a68613b7e9318679a828d70a92ee0a2ac342bd0f1", "2cb93c1cac5e290ccd0ab4f058fbbf9099ca7ed8c25b3bb373c1bb9bff6b42da", "1eb97fe01cc0d1b71bd9bf55c7df69708ac0719493d04e8f0b08eb36c8d0e15b", "147f6ee344d5cc4ab23b758c8539e26922f91cad42ec7cb33aac9e58ed29a195"), ("2bbc698946017ddf9df526e5c25fc966ade031ab1855d95a43ff4f61f974dc3e", "20d93abc1c3a571fcbf17a2997fb67c30594b1cce55118dd0e21fb4d145c3ede", "09cafc34971434e4b6c1c979d707c6c271e2d4680977d1456ae81d15376593a9", "2911df6674539589833b5600bfd8ff4aee8479b00f6ab512eefc97c374a2b2cd"), ("2df1219f7ac3df445865cd0aae02af421ff624bbf57e8bdbafb478aa999d15a7", "11ece4214da629d0ba76b84ed20c5a0b6c80ee97962ac05094f82aa716118e9c", "15147afce07e1a6b978713f4c4b672ac73bf1a085dd581c929dc85d002f6a15b", "26873379fb0491bf04c1d2b2f5674f642163737c1f176d8fcc66c44115e2c04b"), ("12332000330fab2578fc06bdbba4fb926d068d3cfe3796b1f31f2a3a7fb6d6ab", "19b3437307354ac46bd2790cdec590e66b6a326230640a5ffc2aeaeea5f562ae", "11f61339e21b8281df24b7121f486bda51b48d718b7756c24f8f5e2d7bec48ef", "218d9156e462ddb41d90799573bae750205f559a96f82954dfad53997456ba22"), ("242c3536e74900ebda50cdc5deaaa3f23c4a1377829b5207165904b86fc194d8", "2a83bc503db83c8982349a9684e23fd44b2f90c0465eae6745363480b026d92b", "1cc7b5da4da54bebf611778efb35ac58041244cb07927c26a3a23558fb2c03de", "2ca47bb07e08221f334c08ccae9db19c4e2f3a96f3e45a741dfb57cc532ba49c"), ("165074d226730108305e8562b5a0196c4122530149a85ac358256f6ed1ef721a", "156d55141f56040f13540c994ee1c7533a5ab4f93acf37f0cb580d21c5413ea1", "08979a727f9c5184ee1445dc5e7998f8b269b08d4f65e17e9a141ce3a6b5e6ed", "2daf6052cdf1665c0415f9820564a681647e414918c162f6459c6b320ed17ed3"), ("0e5e6baac6f5d72c53629af5d5684491fbd5400fca4b312106e561b83450cfc7", "2004616aff4a7532c93279e7b81eb4723916067c70a9f73bc2cf1b953cd55ccd", "0b806e5e6bea378bf376c905a93d7e081947a35cf4ac0f1e209be66296a6ebae", "29d63bf2c5a4d602d4e7c93c86fec869626565fc1aece517d9dee4ccd7dc781f"), ("1ea0cdda89c714a822f64e3f657d2d8285f703a31630334820655450a4331b3c", "14e8f8d6617291101407757367c7d6805a806c14a2d705faabdd7c231833e631", "261a18f4c1fc50b472575e61ae1d144d09f5dfb368f43b179095c138ce097f2e", "0d211a26ac2802523cae59023f377b519ebfe4f76eb3c1bfc72e52e6f4b261e6"), ("149d0d6906fd0246411921e00c11de7f5480fc247457ea7411964fb26cb15899", "2d3f887e15aa5b5a32458e6af512f6cc54abb664ded98de90d38b47dec4bd486", "0efb869961ce5bcfa6266bc64ea2a47e9c077f593135eb43a5a544fc911e83c9", "0d475605a5c56ca19352447cc783be6d1b65c1b96f6d871351d2625dfc0799dd"), ("2a6fc44cf9b199f586431edea6223acf3d7b9cf2cf130ea2a1c8b32ba3a6c464", "0fa90fe35ffe8fceeb2181e5120bb596ad7dc768b8c868132593a068ebaa9b43", "1594287bdb963df02d1644044f1c871bde3ec3b216f027d7d45517a3201cfef9", "0858867a7f1ad0ad8f4ecda4b5679a657346a154e5dfea2aa3434baeb34c0836"), ("10ee061269f4aca577d47b8275e761c59764c25f7360bb1f183601f4cd690a5a", "2228f1e47ba9b6f35a58b2a4f5ebae343d6b9f4d8f5b28cb2e2c48c444be6474", "0f1f2372dff191e1976e72bcb932c0016c17e5c9f557304c7c61ebfe525a1948", "1e748044a3d1fb47236b04231acaed66afa670e4e7304ddfcaec01c312e2c23e"), ("1b14df58fddde2aefb41dfaac6f3b0b04f1067c594699fe2b39ee305615c4b4d", "2e75a79e35e6dc512e6dc524b5359b2fa7d3ee0b90fa393054f3c396454e1bdc", "152d7921951b9a5eb64418e4d42d2473f2107954821d040d681babefed166f97", "23e208173d2c45eac17442f217c65ddd9ab63432a05f65345eee7cb37e7442d3"), ("2a7dc9704f30719d1b382ce55a58b68139f63e1b8301daad52f4654e22ee2740", "06608e472236559e6e1f0be8d7f975b7593d1f5537bcff10f4eb20bfd51f3a18", "03039da72d4c421091ccbf8aaaaf089b28ffc8c99fddda54094f4a571a8addbd", "286aeb47b25ab7fccccea7a5c3217d9fa1df8cb0ccf81d9a69c408f8dc28b7bf"), ("2c8ab45859a8e4ae9fead13ea4f348d5eacd410629a9d01942b9796850e82c78", "2942b8b1c5de3ce434823c8df341e6a2f72e0f6a050a463ebf6418fb04693961", "2cc8fb3597ee43971a866f10c23bf0eb0d583e087be3621f5b1f1feacb78244e", "1bbe7160a6131b05447e083bd9b7a73368854797aa15d19fcaea71a2e556cdef"), ("16d5409a566becea5cf88a78a4fc629ee496486d8ddcb1144f9e40331f2c8f3f", "1a987957f67e06e63d8555b9fb569c77bf4fec199a703b5827e9bee305cdedc0", "03bb7890c871fdfe7fb81f8d56c24df9e61b20518d50aece919a55f23fb19b90", "09f4afa0101ce08e5e62aff4990e4bd8ed58def8d203f59c1a9e9db7ad0ed6ea"), ("264784e143fef7f173edefd6eb9bada4b124563550c342569814ae85b76b85f8", "0b1114053cfb46b63287aed443b9f418364fb176a47f4825231866317ad993c3", "15f9630ed6dc0d52f9aae123f3587da4662c03c7ee49a7cf8a72d2689943f18a", "2a0ffe437e6c30cba9e9d11d76d08a7d7447c67fccda99b9698cedf38f5a6e6a"), ("0dbd0c4bd213334019647cd1a9ffb8432b32d4d1d1da01e04f524ed2152813a6", "15c2e3406a1dd78b487f1143901eb7054158fcbf318633626e891fde69c54c93", "0f8d7570e5623cf87e2a0f538f7355af0e823c93f2abc0989e3807dc172c75be", "2433235207232b9304d2c2ae1365e798c66d5807da12a385ab9e0ab426f8a348"), ("0f90fcb449eb5673424ef737b3d9da54476e844af88d2ebeb2cd2ece23693839", "13975e5280aa1341478d3ea40978e05b50ce644c312f5ada037320ee8fbdc52b", "161cf7fa5cd251bd71477ba2259385d6ffb45e6d2eb3b921e603d49bf835dee1", "2a3efb5c01ca334b2efe76c0aef1dc42ec7f2a4d922909868d6406b383c6e7c6"), ("08aa50729bf0ce87ac9b9471e6a1d4d251f6470788c7b76b2132d79ee8436533", "163adffb9e15e18a683d0ae42c1cb0934a25d7311cd05d9e1d137f483c28edb3", "1d530d1c10e4e7c648568a5e806b606a149be10f250dda40b3fb1c3d66e87ebe", "0d542dec302433f75c50488088b10161f39faa6a99e4a459da828bf9e90e89f6"), ("12767baf65ad83b90ad0c6fdd83cff52421be5cad4ffcfcc6ff737ad2d5d90a0", "0ad522febe731a7a0695f8077ee7c02bda26934b4e1656f1f4280604fb1380ec", "2b7f22cf8a9c5b9dd1b3182fec56a313b52dcea5a60ee24ecbe0bcb6335548e0", "1daeeecffc4001424228885d071c0d834c0636efa677712e3a340dc27324d59d"), ("2031de5683b43f01f41507ac7004af8b00df9369609c04261707716278131e67", "176be0cd4df600bf1ef1ee5c32d9e447f37eb064ff6ff59739fa3886048d3e89", "0f790fba01092869229d344bd6730afe2b98107aae766a8379eb2734c08fd7ff", "1bdeced2f2e36949827d1c08c1103c2f7a8da800aa5b62b370ee34353fa02b1a"), ("1a45258c5549f75a0307b5ccd6e002cc92e84895319cc4a8975596ab1d3ea198", "2bee62d92a6ec200073a870f6f8824d72c988d2125e3ec10d6cd9be8edef09a4", "23e4ce5231359b46846c51659b5595b00811f2308155f46100f238837f57c305", "10b30e3c3085f82f7d0ccd73be52ad1895aeeba21ba2ac3fbd4f215dcc70c90a"), ("1b7c523e06a9c3b835e0dae38d7e64d8d4285a42ff873f51248980a62142664d", "1688fcf3086837460bf11733f7c4c0aba83deaba9df1f38fc352e0f8c2ca0546", "2b8a082a07e0d532f37a4069f76bde412d78dba07e0c81a9cd9b219cbaaa60d6", "0ac5c321a7ec2a8d682ffd4d3b12b5834c58b0f3eca89525b73d82fc36aad2f4"), ("0043c47545e8a2d3cc7b153f946d4f54dd3f77f8cc70dea010a2c312724014fc", "11b502fdb05ad81648f205d068b3eaf31628a529fe6068b32543887964b93bd4", "273ec46e45df5bf0a1e864a33782843cfe0a7e5e9ea7f2b0f9e734ca618bb355", "20e48166219b35da5387f7c329cc3cc86accd598e646b4a62e88f14d60d37753"), ("2dc32d485eabfe08d0353e7e3a2c69483851621e2a0f1a69649bf3b08f32350b", "271f0b47fd8ee498b1cb2b36e998b2445b7c4154e942cdffe5ba01a8686b9894", "07653ff2d80ad8080dec3782a4b66246617ef44706438b1e6c470a532f4fdccd", "0f9f02417f2f11d6642b957cd9aeb7b37a6767265116881de6c0f80a714e7e11"), ("2c2ed8406875a19afdb051f2a705ff390d296d28b1cb04c625ba62ddef817aa5", "05ac23cd826a5e89c41467e31415719d96feaaf4c140a720a06b322b6fbf4c14", "2eef44664ac3bac6a3ca54eced238604eaa76b02566a005dc347452d21c0cda2", "0a8b456fb56501d70210a65fc505e1a24f64e23618a4ca27f8d696f9ef58399a"), ("1ab93de921369a444369b8e0a41c2a2e1691f1b524d3589852433861435bd333", "24f61b81e9abeef24d4105615c433af69a659a27a05b4036a11a0e7a02e8abf9", "10ab3755ff21089f9f9e7f14f921398d10b3aadc70743063e5727fe8bd6437c0", "26e7c81798a8a2676d8109fdfcc022f5fe9adee3dfd9397914f136c73f547923"), ("279a82c317c447f53011cb8c0aa8f7e9650191572228b4bc6a30a3946e83aa06", "2b7437570e907ae245a8da5c33783dc54fa2ac18a186ea14ec4469b55c3d622f", "0a498678f760d28646061e9bc997de8fe9d2b7b2eb9fb853df90053d81ca9ebf", "12bd1d60421395763ddee624d34b0c694b83b73a6663a56962854eba1abc4d12"), ("0e7c1c49668428d4db8ae0830febd8d90f567b53be15918065217b54e76eac13", "1c2b4acd7728ac3a69dfc2d2ff5a317da403f754ca71ace324585486a1b025ed", "24c2b022e95892600fb419538dc74a8641b8283a2394817e8130aa0c28065ec4", "092d7becc86d02f658c16b0d4b3f88afd8a0881fc08040ab0275e5b2b956a99e"), ("1d56fc78ebfdeb7b642b46458b195fc67b7e05f770a12fe0b940c52c2410fef5", "0258eb411705b1573bb74a7773b8abf977970acc1f149853159fb6403835c124", "1e9fe5a4b5ef78d56886bb6533e769385d666c602611111e58c2667ccbd1e00c", "26004a22b476fea5f8ea383eba91146e6a70a21b49f254613c2166c5a0a90625"), ("024ec177d4db8b47d8b5053d82a96ebdb1d77257965ab9c8c1ad12606f3a4e3d", "0302517ca9ee7eb9ae82db1fc916528a88547f6cb6363531ec799ea6e17bb7f7", "124ac357eb7d9b8d534d09eff3bbfdeb0c80bfb199556d0d1913016e6d922486", "05ccbd3624f862c07942b3a6467f318044f449730f6d58ca7b394e8c2fd45b49"), ("0f0b0636ecaa7ee909b22241858dccf28a233c43f4cdca2f6546373d163c3066", "2ba521cb3f723820b7c34de9b6ea229ea701119640e35479538d2e946dcf08b3", "2ef359b2eb119a11e95dc1e5c7be097ed53ae7ee2c85502820dac6f96449e13a", "0ef6e0e5909432b8f3aabeebb93810980785ec8d2ff7b39397cc356b167e05e5"), ("02a5b670c83aa8f4d419b1de6daf361cdb2188a89ba12f9811aeb12b57910932", "0053eb88b26020d150a59896be2dfadf7c6c66facbfdafe4e7c24dce53317126", "178dc5bd6cec28f902f85d77173728db12a01855f07ebcf10985f490cd1e62b0", "2c7ce31f305ea09cce7d804fdeb491287d3f7c3414cd216a481416c23eab61b5"), ("2acda11b4ed5d6cc1a69be601b5e2211d2c65f2a9c4bf282636f662e2560a301", "0f3047381bf3f6bd7a9b2cca3b051aa5f564bcac56edce34141b97668c2effb1", "245f445ceb80404e5ddb526f5ddcb1f4a59d2134f1fd687b564db7ce30048ac0", "2ffbf7cb099bb72ac553d3edac87b3861c665687de63fe57f8d9577dad994c57"), ("17c0e4f1a062b4feafa3fe34b49ec16b538afab8a75e08551de188e512ac511e", "09b5bac154d5a8035e01bafe7d8a81d630bc1c1cd567e27939b60b6ac0f8bee3", "27c6847b2ed2e8176f59c62d8c4be59f2cfcc259fe60d2bb5ba32bf91e6aa829", "0e0bbf01886975aad7786a496db61531f3a0bef4f778f627546cc32bfee3aae9"), ("287983064ae935f9ca5a7a9ebf2b258fd275ce69d6baac02938484e9a8e4c00d", "0fc43e703c01073b09f06eec928c75a22eebcc14a7d20964b0da8a7145d0d8c2", "1563e7201280feee7d8090e373244b2b85209c39d2104e5ac263fedb968f4c74", "202f7e11e3dcec921ce18e53228574cd4f7b1004614185a08e6d211860f72b99"), ("1231fc806e493f2ceab944db1b2d5f6533bd8d929ae8dbf006b4122733d5ec6e", "241558a8aa8ec5ec55fc2f35235bf3813bf7de567df007b67b596b7513ea5f41", "086d16308478a9810ad5321033222410a3c841a54113efaea0280665ef5f5b21", "14a34acd8890d971f1889809182b7a3597b31921ff59d5280b33fb70dd5d9ebc"), ("004ab7767c8157b0c648cec511d16822c6b718e4e20a6a303810c856260678d6", "1d8ebb5cc1d6b795667efe473ca70923e523271d2072ce90a4d72865d4cfba21", "2ce212cb5570165b06055285e0ed1e7315e5d44d65ba713b44d09f27d75cdf0a", "0ab82a727c0deebcfe78faf81bf7a9ea8d5bcc7a5d0b07e0821edda74a5b22a3"), ("1dc327d775539a687bcb0958b496c9488800e3841aed69a87f84e7ef67d2256d", "19707c36658464993dbfb61fd6b7979f6e74e449ef855376ae7aacf480b95b80", "069178067574516ed168b36149e0322af0438584c171083a770a8c18e491b4e5", "165f7b721a6e1702702e7eb1227c174e976d2752758a41f37c65cb23e5b226a3"), ("2b0f2bd6d4cb153b50787d1da96cca85c8a5aef50d9c4fcefbee5ccefe3c3250", "17e2d18f3aee92ca4cf2aeee1b4f7e65519dbcff7716a30ec80aa5aad1ca97b8", "156fea473b5bdf28ddb7c28921d64f4ccc55e3f0df930f2ad8b98e2a559b615f", "033930684f38aad15c0ea079fe50b9af0d33f1f1a78527cd617a9e3c311ab23d"), ("11b9b0bb7c6ce51c90d637eb530b08c5b41bb538d45fa5b78e022ccd958b9344", "1243fd880b7701f7dc5d1427ec46f476ef16a5aebcf237eb68c26b4219f48244", "1aa6a5496b8bee8344746e5634814d90172f9f6bb699c975dc583612156f8d4c", "27b3268dfd9f25e63e8c18b7151698a7ae1bfef70c49089161009b9c40ac1709"), ("239d3ba46048b74f659745027bf524755d11110c0243c032a45f3a58a302385c", "16e9ebbf37c215bcb37054b06421b14101f0f40ad87bb35396e0cebc225bd9e8", "06f5c7d2f6a5f1c4b09c0699d8828d24d871038b09dff586e4e8f8bbd500620f", "1080f008d9c70a63afdef5dadb76c56317c3cfac47571540446a99913279bd38"), ("2283932ec95f55736f6a4a9f12375a0d5bab059d85b11aeb84301703a8e7e7cc", "089d9217d5ab7e2a2a73f143fe76ccb33d7b7e0c3e2c6e6f4e2026d1aab2544c", "23513b33824a116cb746bf9a9e1c4f5a18c34762475a311fa11983b3d1a914b5", "04ad24a88c47d8647cc5284ef0710023408aaf6439a99d85892b77a85e55ca66"), ("20c050e08b2ac04a2294490ac03f35925a534d534baddc9b1d9fe2b7a41763f9", "1b3ab90b8629500312dfa2aa391fa52ba07f74661799c24cc49f44034fcf0419", "1f3baec6cf68a5973a10a95fa1af49e3639fc5327624615f43220180112f597a", "07aa0211ff828c406e0aac1eb70dd2d468fd99e6b4d8b8bdd77e0fc04e4b1cdd"), ("2943b55c29d46a6d6e7d494e2895cc17ec465214c5f5e5ff974758e5f5e0713f", "281574d61df6598c6e78c880383382b99f54cd31e77b9b4b02c23e338cbf5db4", "27b4c0648a6da16f653a142b2548ce2e33097eee495de23775bbc70fd3d9e74e", "2aec12e86041dabee1dd6ff10b8b4d902d5e9a0cd8099ba8438192933857ff09"), ("01ebb34596ae09d3f8f9cf95bb869977291dda59a66a95c3e0f38d1ae65e5e23", "0b41315059f00b684d6ac534acbbaf0e86e73cb816cf2cdaa21d1d3312e02551", "29dbf1133e15a6db7216c7c001837e43aa9e8deb87f1ff9d57265e9dad1b6c2c", "0e89e4fd9d139120b07f40e588357f603504423519845640413cd1a390e73a98"), ("2b92375673afad2018dbf6b90c5da15f0f7dec7e692e97e3cb89d643fb67f49e", "164fbf7c44464428df145b55ffb2c94e5ee9935ab00e723a6a0606b99a2a55f8", "12e12631e998e6b11807d815db753df075971c0804057019310aecc939548409", "1461238060385878d1c53326e0ddd0683f66d3bce09779cb9af0cfae9c97cdc8"), ("19a7e1211329871a472c6d1718684cd961cdf40f0a121d8bb61a285ab3d4df90", "21857c031cb0d9d4ac8111a5b19d3153b0a68ec821fda788ed5d87220b69912d", "0c195cd8b1d7acec2e23021d76d2b4ea284fee92fdf7017142c457b594118747", "1c27dbadb27191127de6570099be73f557b4fdf57e74d882d031bc33d1937cdf"), ("102e395543bd6cf45c182b7c312ad6573a2e49a4322b1b4e5efee3a893592a22", "0b54935335a103f3272428875bf9f5b6bfa62bd6649e2d2a274c6cc0751db93d", "0be04cd52076b4d737817ee4c82f9fc24d62bf141963299d94dbf11c5cb987c9", "08354f02a080c0ffffc09faf1b095e277989eb60f0f1c2644da19dfbca22734f"), ("1bfe42d02f352e8b97538785ae615ae233133ab6dfa9eee90382548e0532cca3", "2156093f6933707d94d8cd10abf2434826ea66c58732cec5aa856616809cc49e", "248bf6b921c81eb44b15e52c8baf60680538f13041d35f40b82758d7ee12e43d", "1be799fcf0efb940e80c169309910e7e030c39811d960c34f897d5b805ef4088"), ("1ed83cf17e2d3c217b9632f5dcf709758cf156ae0eea4fd2ab32c5abbcd589bc", "0f1cac1043cd7630cc37cfe6b3f50810cc5d65cf55459b5946f0881218298924", "26053789440eebba4b4dbe3ba99fa2f89407886bc5ea066ca837ba8b9cd96f83", "2fded840bd6317c81cfb553440bfe9fd23166d47d73c48f5de8b163d011ff825"), ("11b1b904cd9b104bb89f8d1e29ddbd02bd8a8b465d6860fe32c334d5246481e7", "08df81527255e9087c96c7b59f54183251536a92882209ff1b8632cc042723c5", "11e36086b53ec242cd752c5d640fd0305108c71911b27e5a7aa7c1d450815f60", "27f251dbf3d7fc73cdd1126a84081e9823287c0f9b2ee13a0ec17499c9018d85"), ("1999503ba1feb96337eca21c08d062e3527157e559484bcc90283a8f9eba48a5", "077d346760482605296c966d4c83de0245145b7617787e7bf3e880e241a79145", "0c0eb1d657e65a4319ca71cc55407d95bc1c20d5b7fce87cd0d375ac40a4fcc4", "2740105c0cc0b02c9445a6447c73e900664413db04416f0f8683f411d95d0a1c"), ("23a1694a08806a456507b2a8e67afa1cdb18e80b491b6ad72bce844cd614ea6d", "2f6eca5637812e2e73099b9871fb22e3ba4a2413b47c863149302baafd6568a6", "07e46dab44d4cd06de5655161ce91afe9bc2ca61d4860750dc111aa89542edf0", "1cac23ad32691a42a3c6d96b8e967c2b1952e3e2ab1406f3247cee24768cdf84"), ("0e469e9211cad735fad4f72493c6414443605b07d1bf6876728d07216ca7986a", "0c7fbf5c28c63bfd5f09a16a657854bdf6ccd2514af233f0ba226f77d77abd09", "2aac95b1ac2af3753fe191315f2595f3accbe85ec42a6701e6dcc675d55a179e", "0f1e18ad4cd23becc35b97ac1ddb3486d602db9093ec3db8c83fc370690f5b74"), ("054f070cd063832ff59b451e24ce5a7fb3e0f7a482aa1bd2a4f14d025e0d26d3", "09878e527cd59ca826ce2803428c4fc892c9f0ce2c1f751ab7726e56ade52e54", "20273f451744d86df80c95c059f2d00b713f49ac01ecbc31948bb164331ec27b", "070dfe15c57631abd285b11034abfb24b2f6c4628f9d7fd760b698eb90161ff7"), ("21a38848c123a03f7404dbf59c8afcd229a6774aabb66b161ed8bebea88d53b2", "2f8eb063daadc7cfd71297d1e29f2c3ea53578754f45fc0a453c0d6828f74f55", "231c556faaec358cecd6ff0492df00d975a753ffb14c1d2f87b148de5fbac433", "0dfeaa477ef1f15486a478554c252bdc9dfac695d0634b5cc2b1ab976ad9acff"), ("27eb4f174515038552151883542371cd80213314f3b92e5c4fffd73dc434651a", "026f59df20997c1a310526fa0e79d26388ad524417fcd59e5262933f439b1711", "01b43ed1d423db3326668363c7405a2feb30be2f123eabd7b96d128215c5b1ab", "28e0f43be0eeb3d0faf2938f344d305984c64b25d275fbec1290d07aa93c317a"), ("1443e27c571b1b01db1e5a82126f95c37bb644f3ab4404c46ec90183be1fa36b", "0536d8a6540aa10947f2c3873fa1d250f8b4cec90b97376e4de1da4180d52ff9", "18589d439fad2477fe0615517f91d05a18d2576926e2c3be6cdd911179a964f0", "013354e1dc30a8a126f0555e15674079f0898156907e10f39a8c9a8fb53abe3a"), ("04f06bed3ee1bee89118edf12ba75a34a732d149bf5298b6e95e505a00f950d0", "2da05d46d7e3c815405822c55bae94c89d2e55cf01747ee6724e571379b2ff31", "0846bde47e82e443f38ac8ba14460904d2c1103c30223a2571f71ee628b9e65d", "2fc1944e96b567c4b59813a8c2870248c32d04c6341dffe10e8cf7cab6836834"), ("081ad175c10d225999dd79273d75f490b0fbc0c7281c49da46cb2b677d6b20c3", "027ed266817a0070994d515de536884444d2ed3f30f3a3215cce980dc35aa534", "2384dc7321b86a9763564b91b46c027d83e3c6d143da75658291d6ee778af50e", "1cc2033f8c0ce113d0306e03112f17cf2d5406ce5c3be89a228e7a6658dfd79d"), ("13f53883d2935afe7b8fd652fa6bbdae1132eab887da11e3c7d00d14ee787fd3", "28b37957fb1eb9d8980d7d56db5d846346b4fa5d886c3e34159b55fb591b5fa2", "0e2f8fdff2d8637d56a127e6c96cc9eafc7cdb24bfd8e263f80380dca8ed1211", "07d059193c7d8b4afb5b052d2057569c55ac2783bcbc00aec6b7ab5a425eabde"), ("0e2667cc018fc3a0e65e1d01cc3fc8429b0d9b4ea1a517a6f80d5a7eb4a55b75", "19d9b34bd73f01b241f4fbf672cf386608087d34df293f8485f4874c8ebbb258", "166e7243cf609ab810d5c87b5cfb2d6f4464c7037b908a395b2c1674d378d2a4", "294022c3989e0d7943dc8b0d8bba3a7b509cee0b6f9c798f2ed935dba51896c1"), ("11b02707d288face88814e7b3b78762ef52f8df578810b746cb8192653d46eeb", "17dc2936d5a30cc7c43ab3855bec49b46d25855d8e49a4e7482c6bcdca48f3fd", "000810be2fe9cc3c6f61c3c01d3c3baab826fcc19d361577bb248e159333ac92", "2d18a5b9ea6b8167bc710e52273072e93c0e10941607312912914f443b128c5d"), ("170b26c94b4b7c6eebc917fa3c0ed322baeea5941549325cf60cbb77e66f5f56", "11c8e4ef5daa8663d222f7a632476c8b9f4074bd43d13dfcf0b2ff531300ba69", "2219eaffc3a6274869800d839150cddb347f6b38b96ef87301f33c51ab79d275", "045d4bf73277b7023ab9f1e1d8200397cc153ad0183dc2ed486e71f1d38cf52e"), ("1a5d914e8e75783bd3ae8d3ab70b329f5cb236b1bc2edde1728e6e7febc03a54", "04080372355b4c00080ac452bfb8bbdfb068a1dc45f3521e2d672eacaf013f20", "087e52940e86c4eda14296403df4d47892b683cbd1b41e4123c16c4d5350db76", "2f4b0f848b9da0f5351ab9e8febcc9a0cc2c875920ac545a1095b29e369725b6"), ("08925cb6dc7e7574266f955b6e988b9e0db70687c29db6acd8a62c98a3876dd8", "1770b9867e0c97eabdc77706cfa5fb5174f987e03438e9b993d64aaad705986e", "1bca237bf2ae6b2149fef33c36662dc5fb29b2e9d1837d5e29c4151d9d194bc3", "14935d8fb9a739cb18aa7671ad583005fe76861ff95cfcbeb27906be4c4252a6"), ("07e21feb1c7f37cb809a926d3e8dd4d9806c01f32d0c601046b3ecf6c6af5180", "0b41ce420eb0a5ff6bae304ecdc258f57f4a7895f82d750acabca1774378969a", "2c6af2a88ae6927cc290c821bce2bbc21c17fa6a18209c8a8d5752115576e9c5", "224d1d62f13207d5a1ee4ac857b659c35689c52c3a43f9a7c7aaee09b9a967c4"), ("114c1a25ef169420afea837d130098cc985b8fc32cb0ee0173cf88fff43d54f4", "2eee3e941232a2bb74593ccf80d137b660cf901063afea20c061c7522a7f5d66", "212f298ff8aa5d5cb3c566b8410859d352a44c40713d379608bdb3352c081899", "13ee5f58d79fc254e01d1c12fe476a09b38414a3d7c0654530067ba0ee58c420"), ("06a38cf00ed2c64a35d2058612489779892973ff1bbf6cb2710b5967c4ef0c86", "27c4d29b7c69e45e2dfaeb568bc77e5bbe56d576baca836c28fba0e5946ea133", "181ee95406952d8cb5696ff79e6fd07c31b659300dfddac72b4f2fd8b01385d4", "22a59896bd8b200eefbdd0afc5a25cc2cb2088b2784f322359afb2bd5dca8f03"), ("0c0051278d539b5b7eb9c8566f15c4f5d76e5ed0bcf360d4fa6d567b5b89ffbf", "2dc6d582acedde9f75ce0f7cf8c582158e02488456bb7352fb6fef9c66351cc2", "05e1675539fd567e31c93b4c0145c6a257b719f16f1b12a4daad651317ad1df5", "2e81c5c1b66e3c68641718e710a9a6397c12eb78ecb617d159771d6f54a50b72"), ("0577aff8da502802ef46eb074c74844f9c1c5211bc9d61cdde1fce52bab9f2e0", "00d2186959f4a02bcdaf181b93412822c6776227ef1c25325f09ac09deffce1c", "0ef044f070f453dc36c3a26150428f8ac64744118fb2a24e37ade1dd07eabaf0", "05d508a1d8c27bd28e0533e9f82a4e4fc45d9339ac75e3491a6b1ac0a8081288"), ("2c0e7ede7cb8905eb218efb81f824bd50d5b2c4d282e9128877bdcefd53964d9", "05bb254dc5a780d202e995b9c31a703632500606d8e0a171c3ac9eab82ef3697", "084da33d4ebe7acb771cb218de18baa934dd2b066681b8671caad88b117cefe8", "05db04b939290184e128282f038ada6fcce30e1a9c3288e6442640a44be062a1"), ("22d5cc363c35ad716e754c4960f5db16e73b99614c948fd8b24bd26149286664", "111465318ad070203944769b8ce47e6909b2ca519a1d6c4f68b5770424ac57d0", "196de32a00e88150aa6ed0cabbfdf0575aaa0d6c6082eb3f3e85300ddfeba9d2", "1599f829af2a0856a3b0ef1062aaf5ee8bf49f4d8e2e37b120975069bceba8e4"), ("2fba6776fc50ecc64972281ba015d65ad4403631b45db85535833b6060b1cd2d", "2c0301b267d625a60a7c6831317ad18d13d7ac695bda1f97b1f4ccb6bd0a7479", "25a70eeafe201a7b9dc169b6e04725b378bd775dd066f98e914cb250868be4f6", "0561407e6e260788ee0f4fa7fba69d8db06aaf0d9a23b24dd122da920bbe01e6"), ("1ba6970c4fbb7d6cd8d1ddef6505f97db19fef441bcd72890f8a711856d97ec4", "0d53062d78229e177102fc3511243cfa01cdfb195a3a19dcab3b149b8251e36a", "122ee19cc344c6d0e54a1aaab0c351629b2257161c9ec87e9f76b8351ef244e5", "104792fc97e3f889a9d33fc7dfe29ecd67c83240d47f246c22f363e6fd148ac0"), ("2c109270c6376f62a5cfb5e150a17c83b5bfdbcf1dd6f7df62eaec0575d92634", "07ad7044a5936d83b44fc421c04717800794fc5f4691b53c135a97703459af94", "257ee29fbba1fb25cb038a572db64dff52c5f3f494cf73e20a3225e58a4e3dec", "1b2fba3d83b88b2c7b1d2317be030e76dd2f07d0a77d338fe9a7b62c1f36493b"), ("17ce7fef497ef0af05ba5152b685940f10c3604b21b7575fcb548dfc49f3f1f0", "0c97a4efd0bc046b5826e92701c881ac828690321745ea5fa0eee2db84c767b8", "209b8140fe9bf9b8d74c39d23cc314aadcaac00a594c0eca08904a07451d71ed", "2654f23303b08e3b9d75137ae7e340f7a4f021d9465e6b619fe4977c1511c184"), ("10be25608c05efe3da30da7ef3bf40f22f9960809da2478a1af17c9c621bceef", "1c27fb92edb174a7d4d72976f78d1d89927d83d61662a50d784de019bb74d53b", "0ed7eb5511a801976fc4ef94b38f2878c48a3dd08930720bbd3e692039d12ae8", "21dfe4e6a299cb7d8bf98dec5d6c70b2aef8078f7a345f1dfc33e779e2370c0d"), ("07b62f0b9fcc5da1264279e1a9cdc4765de2e96945d169e8b7f3cf217839cbeb", "26313f74d3ce37084bf7ffd4dd756ac5eea78a758b83919751aff31c78db1131", "1d40ced3457efad327f27f73afa80ecc62a9bdab29bea7a9c93690ba5497751b", "04e7867c6e85478332d21c1b0d149aa7346230e1419a074de65e903485139d4c"), ("300e2c4ce50e573791a1015db1db8e14523b903c409a69f40edc48e06a5c226e", "23f2063f4fb17e00d65a2e2fa8f5b5668cdee8f14cbe70cfb0ed419c05548f95", "04616c1cdf1917fd3bde5a64ca0a065de40a70c95ab2534ac3d77dce66cbc504", "01ac2e32ab6d6c865eb586b9671258244b868c39d2a3c7f49b4096c5c16a64ac"), ("268e59c2ecf02ff715958b3b9f5a22cd4eb96a286784529c9dd0bd2739a03e83", "0ce0d18f0e415938007146bfdfcf68f3b7256acf0fd887bb5cbd58f50f60d6b4", "2c8f4ab5636f074169f217c91691e8798986471935ec8a45a6d96e2f0cd965a6", "0d82981cfcd0fab7f61bf9e450da56fff390c80fea26d9e89be69a15072cbe42"), ("2acb1185d3fc45765e3c6d23e54565d3571c50e0fee369423e49783d1fa02002", "104d7b07722d2d2f3285084adc08393e92dbdd8fe32fc3c082fd891a59c2f5f0", "239e7f263eb81de261a7572fba4440d753fcb0c72c05585ecb6af6c3501ff875", "172b471e4ce8f184097a906374e686824f30a4d594108a32143d546f8baf7ff5"), ("0d2f16e8caf06321293657167bece0a2346ef10437828a96d24d435b051dad90", "15e7266c3b5f861c487e224a2b029936c6beb545a3431e83c495ff1970f4f159", "0b36bca744b9c2498b7d3a26b6ed0617ca4ab81735179cfd9f23f8e6d52c97a8", "1f5e466e31d047a681d905225132af5da625ccccc5a22b08eb08530cad9e650f"), ("2898bffbd6ef831b405779db18946f1ec2ffdf8a5e98aba2bdbd4c481798256b", "1d5febafb8fb274db5c6f23d288d41fa6b693b3c09e6acb4890e6bc9d13acab0", "2572bdaa95d64eb1f90708842b16b50cf1b0271b5c89eb1ea63ebb8c33f1838d", "280beb62c1e362e8b92861ca6497c22e8fc8c19901b66134269f8edc146e65bf"), ("1657981410b30b9b323e3af3a1e575e110c681a5a38636712bb91c2012b56627", "087e5a645d7ce0595a043d8372c445b4b7053282f7364bcea7543806b9f23f59", "21dbd35a45e8ee678714a175c6b377793282f6ba6b39bc6ea581b68056ee2b57", "3063782d142cd7f9158ecdf523f9cd41d75a034590a99f9292683bac7ecff64e"), ("1d9785e96f141e0322626ccf0ebb74f5024b151891b78d60efe04869f2a8bd05", "0b5ea50bc3b804eb44e4e8711ffd95037b329fdde9a0bb9011deaa4507d63c87", "1669d5eb38eb449a09c9a006f2d2d012706c9a853ab9f8f98a4355192b0ed7c3", "28c4270e631c1f02979af711769b46da2cd6e67f8f45bc7ade8383646f9f4078"), ("2aeb177a6ab13b8aad2bcd11e419273767a4615aec458dc6922db3f72fc7cf3e", "24704fbe2809144493a7d19d014d5be6ad34a9ffee0081b1d37d4e013a47618d", "17460002b0cc27f75840a7ed4dff92414797d7fac37cd524b9cbfd2cb9366c0f", "146ef72a90635b3551a9bbf87cb1ab5df85d0525e55b67466469a30a1e3e9915"), ("2f70e82906a2acfea4fcfea90ca38b633898c69668973b227cdd26f1d7493e2f", "11fe38d5dcdcbb29ce92741e586827ac55aeaacb4689e071e6d1a06f428ca33f", "142bd38d1cc8df7cdd26f2eb40c4c783f679289742f511728e62c5b5f0d4f862", "23bf407437ec3f86700d1f5b9857e6c1d81535659057daa3dd7edf7ef2f31e6d"), ("2cdfa1838a2c07e5b9afd6fec40e6b898278daf64847cb8597891434804ec0b3", "1567fa5b3c49cfbe5fd824014e2c85dc423c740157e0243b5d9cf5884183388e", "05ee9fe336186ad8c914e3ee862335458ee4c648479b5488d483649b7b965138", "0d9e3a7fef0441709569aad4a62e03cbfe7772cb0e058489713a99fb107d86d8"), ("00e9bafbf23082960b7fea4743baa3b3800f2b0e9e9feed320a390e21f9a5647", "1012eb895ec7b9c352d1c5e01d896bff00bdfdbad3e08024c9c8b1fe3d847a60", "0752024e0e303fc4071ad3e597e68ada267db3945a3650a57f7ca040dcfd8887", "20b417adadc0a4cdb87c4d6d506eb455f040f9ee03d3d9cf8076472475d46eb0"), ("1be371e377ab8670df757760d532ca40a1ea0c2090ad823712a158405f1cab64", "04578b1ea1882a239b6f43edaff3961c1acffe6e6b251c1490f9d26f379072b4", "0361d5633271381c52530ea1e4e7c81a53ea0f0471501665aef0b32b630fcbeb", "142019e80fc9e70d01268a18d1309afd16392ea0923fed731ed464a74364b122"), ("20ab1d67fb56b64291234c816f9e7024bb6c52c5b8a11ee7f5b4a570d9b79288", "2df4f6b6ddfac11b94fb698fe4442542fc390349f662ca8a7bd3768a6c904c23", "1d9dae57e43353fa6432485e1217981b2d389d9e80937d5fdf6af445aa99ffc7", "149830e589169f434d4a1dca57c6d286a9a7c72d9a274f7bf62ecb052543eefd"), ("2c4b35d485e4472b153b9d4681133ab86bfd6132f9a24beab4ef8f3e8f1302d3", "2b36299d8992388fd284b35d980535928abcc44aa50edf77464f211fe7f0b601", "11155f1ac504e6eaa81a36aa0dfb4c91cd2f4a59c4d3f894535250456c1e4f23", "2b06d2497753f79bca38ac184d369448148f4e4364c6c4974829b06586f43878"), ("17869cfafe72eb1be3537a02da1712bb5d9ef3a0e4fb81702ca31404c203e70a", "1b10bb7405ffee14e60c670f6a3707bebcd6ba8791206a09bbe6798194b61268", "2c61212113edf6c8694ccfb1a6bc641a2ca99f08bae5bff17c2e5303a41234d8", "05587181c58a84001ff9dbdf84e5be4f5a6866a540135670ceb04a305b64bb1a"), ("28b9a2160f2ce51005668c1e02ee141651ef32c0ac95340770cfd45602d4d399", "2d00a3ccc080ccf2fe3a6e136d359df8a01131e5c2d19a6ffb3c030bad2e8b73", "0781e382cdc8564c94a59eb68b67fb5fae6dec261fb99d26409c1ccc6f8079ab", "095d7482535a3829f92b04eab979bcdc3c79d0e5453f2fcac0764552a06936f0"), ("19820c4739684457fd7fffc62f7647581300006c5bc2e94736314ce7f2b24738", "17cbc33669e9d51e41c4e712191edfdbdf6930e996153d4922400a6fd1639a4e", "03d857bfa1d00f9c4ac798809139725575517d66b1b3fd200f5f5e70d39347b2", "04febd41fe803d9473884463c1e3e066f5e5bf5c54e25eb9a0b342bdad7bb554"), ("2fe48e4c336fb2e9a36da98a886538cfcee49f847e5c0d0cc2f4228d29b2c293", "0277c8f89980bd0230b3c5860947f3f28f7c61b02748a58264e559c3adc5008e", "2f153f8aea319055d0b5321ee800912d08a06a6ed9294a4e805f5eadd3e9d37f", "13c98ba52f9bf5efe38bcf3dc8bbc8dd3c9f014f26d10a2bbac782402db80a6d"), ("26e99fd9d996784b686be9163d69d460f86df0a7d6e37cc143cb70fc905cb1b9", "274ff6cfb2c7619555534cbd2f6f96fe28bb6a5ca0d338780e02860a8782a5ba", "1bf77ce9ec02b64f02b06fe60951fcfbde07da89f551f17a9c3ee11363ca3173", "06397197407259750ac300581c9dce4b6c91aa2a38341c47f0f439598899a5d2"), ("25cfec54362c6bd62b4670aaa0e81e6ec4eefa40e77e5d760b0ee2c7f46907ed", "1648538878630bd3741d697aee948181d8e231b44297a97296e0a956ec83c7de", "1b3350c1109abcb767c313345e95d54180aa257417cfc6b19d037e250e99fb52", "0eac514d167fec5c2d6f509ac80dceb93844756e413e1e3917e496df51b8f3a1"), ("016340fc9f98bbe6ba5cb55b60c66efe69519e136a0e0b1b686000f38ab811c8", "11b67981efa983e49c96812a335d72145a4acbfb390ed94559e4d3d1b9d70716", "0e57884de458df0c41750c8063dc8c0ec27266073dd8d1d5e4d031794850a8b5", "2ed0f44a229f97d7d2b560956f6fae64ccc1dba8e06d42582386e647e709571f"), ("2998ddeb6fdf6261dd4e1abbeea789ba9271d4e35a228c081e108b7df122aec6", "0b19da8e24f1ca6a31e19e8a3d35f27c1cea808f8ce5f163feb2eb8d53462a84", "04147152d2479623830b7b9f558f5b85bd2e619412ed3965a6242607be186dea", "0df62db9675edcd6beca0166217337ddcdfdf66ce48cc395a74b4d0b252e42e1"), ("2fdcc936d08c83af5cccdafde61e8c69d41002df7960e3db90b15ac4433cc3c8", "18a395240705c778887fe27f332f376737692f7ace98373844dcc117db737a8d", "16de0dddc66a18b60fcb0ef48de5fc44d0b9b388b2d8a1c0bf257af501d90ec3", "06a66ef861d451a17232e6849bf1b54df1dcdc728c01c87a96122ae137d4d415"), ("06b49ea6596355f0ce9f85862873c2966a573620de1a5b41e1cfe7ceb3eef94c", "2ae9df3d9b1a80f3a2e0389abb38d03adcdef431543b4af00e503c3ed66be91a", "29f8e1ed1e7167955843a7f24903bb02532190e2161d4d68b32586311fff5ab5", "1d61f37b6b3b48f4dfe0cc40285f0a6282cb64f49c3f11f503954f22f803b19c"), ("1dffa5409a34ea655ada0c9b2b544ab1c05ef6b6b5ced644bf0fb3af08b676b6", "173ee95a0a1215cf867e12eea3cf436404aefb221f2b05b745a7db0a091de013", "202e4166e97986c742b7d9564cc7e2cd8bd760ce58358191607261cea1fdc17a", "0536650285c553d1eb01e7ccfddf12b39fe56a181f1c07581ac08e483f3925fe"), ("13420b47b2c898f9d004d418274670bbb009318aca820533825a0d4c75580cb1", "25c204e5704d04d5ebe0cf1f65f556127c6355d0e99ef817273860120a674e4a", "2d986e87d55362b1de55a6780454e8b6c186b8e17093f269688d0149fac3156e", "1f1582b1e4cffb0a5699b30a3cc430efb2598a6db37c9285f7c9b4700b80ed36"), ("2deacb8d4e8dbf09fd603cf429c838332cf250c706d7b0241f17fb9bfdb86140", "1d85463d12157d4c2e838c0f1c44631f9a94d8f0b07f7a634f9fe1660cfc14d9", "2d41ae441eab8eb35073cef4ac3decc485a888b297a16b9c30a7a6f7cb90164a", "0359fa9c99df4d0091b71a48dd1773da250c216ff308c61ad624f2461a822155"), ("2c9842c511490895d00c9b7094202466866843acb4dcf8d72532d4c4836ddb8c", "1c311b02f41b0930dcc36752754f88fdb8ee6698995e94eb70deb1aa9e617a46", "2e6470b352680d50573c7e57f8fa2c125fcfe77d18866b8e9b9b460aa4696ed8", "1fd75b4c44819d15b3018ac163f85ffb3eef7e2e88664eb1d99c7f1c47df6033"), ("026f78efa812718b6d558835576df2b9153478c062bb9d52c1fa3a4552b748f5", "1b15d84305cc6060f8bbfe04c5b0d9a8c430f1b3bd8c14cf76141392bd355b00", "22e45ef708ddfe5d2d9157da8d8b7bb6b7a799ffee9599203523129576cd7f01", "02c341dc165e8ee7faae133596ca72840caa4e01a790ccfd14e765240f243925"), ("2e7ff6cdc3a6a15a87c1195d3a1a96b1ff14ae205c429f092c4dc1e1cbcb00b9", "2eade26f5de39778bc8c5b0035bdc547e52d4358e80be33ff6c8f8527744e5a4", "2220b6570b42f96b6f783da75e7ed3071de16ad53b033944a02bf70d988cdb7b", "0883ed19fcbbab0f8a0612f4cf361c5c97256fd02e99a6d04720465685db5c11"), ("137f43c5c9b93cebb5fc38c5cfcd8bcc08f4797d3c1d7c404d9398e68815f394", "20fc94d1b0af08540e7a2c437b3c775bfeccb3bf2b6cc44354641a95e4be8b12", "04b834c28a89f769884af00ccf5613e52e261494ddc0de722b2e5725ed03a7b8", "24476e3e88d71d38ccb8faa61828a6abd8f24a3bfdd6ef115be6fe121f36765c"), ("2924250ee9b12312645f13d430100a5a09b30b578ceea8d2e3f4121fb60d135d", "2536d00dce5dff1ae1aa163ad5c836d620654bcc6f71852cf0ecf1b7183a6f4f", "288f01ac0550cde6da88cde8611581aad075d62fe53e1c7245d5e7de26ca90aa", "037cfb675f6b585b69d3ca445ef6589496e5bf1cf47552c89a0990a821630967"), ("1a91ac5b211e10ea41320d02a0d32e37a66b02b6a7ce8c45db1968897ab70fee", "1dcd64340ef0eca39a580a1302ba22c9ba5a44bb615a69f553a444212630facd", "14d18d25e04eccd956a9c20b7b066f0feb4280117de76155234667bbae0f01fe", "2e9ec9df34c127aebb6d2960f509043770e11f89af6b96ee4fc3d09c45d8c3fa"), ("1c820083efba4a34a9485df51f45e06a0e66895cdddc46231e7557942a534ef3", "18bc8c367fa933d3d51e9aa751b038888b26751579975243015820a94d4f4b3d", "04d87e3169ca9860dde9f6cf48ff9508f3b60e032f5c0c9fd87a806061f1b571", "06c55431f407fcf72e9fedc21b841e1a6049fbc42e01d0f43a115b2e8a951ed3"), ("10e45c9635c9564e0d9b42e0a77712f4d4d9daab53a0c7b93f894deca94f5e71", "2375c150bcba1992c7d251dc804fd62ca7b2d52c4104a97f8ac91bc9a942bbdd", "26383da94e87416a4c46a3b3b00f27d18905406dd8b0f54df5468fdfdb0259a2", "16465f993e828ca97d395f89883de97dfc7e4d967cb9fd6b7b1cc86002af8d93"), ("0117c0d0d400ed2eaed75367b229223e17dc485f2ed31984738b0889b442c6bb", "1b132d722a041f8550044ff7f3a8b3e850f2be7a4a4831f1d14edcc27e65eb37", "292abd474ba1206984703ee6216b4677b0d94f75510616d74e3c96d01ef8dba7", "0e7a425428816b7dc0fb61670b1f5507f17a1b23c1ecea2cf44b36469e4f57a9"), ("127362a4fe1bf8ab5f4923641596d8f7e04defdedf3e791a1b3fee4ae8120aed", "1066fe75bbbf5ff76f6b334e225d30042d809142adac24fc20317dda989104e3", "1b47ec7ba66dcb342ac11fc1946af3938237854dd274cc3999908f07850eda99", "1e64e30b38b17ab3ad2cd188d75f55a25f4d1de19f505c4872d87388c9979b9d"), ("28285ac4d3d8dc4818517b1e1e5853c6913e86df7ad9f00a28b702a6e1bc6542", "0bb1be52f52397065775081d52789a3aa9ec835d3555c51e96b047687a5f55b3", "277d97bbb2f41475cf4a8061335cfbfd42bf20cf4a0d3db51d637ff74da6f329", "2d59af1ace834f25085ac2612c3aaf41d09e3aadf89d1366c5ce5c22dee17781"), ("037700f74b826d27ff964ea678f488c9bc72368d93b520a4f688fd25ec5f2dd7", "02d799530706eddef680106aa8eb7f7a6395c46a04691062d423dff78d41890d", "28130da2a4cc80c86b62b5acead5aa99b0ee10ee5ea1bb1b17c7d4686f8c6323", "2892b6a21b228bf0b6a42c15bae33c28f8ea1b93a91663723e3d48af7e27c012"), ("089da1c055ceba18df83193257699aec7f447f67544d25410060ba0e374497a0", "0a8a25edc8590f4bf2edb1fd8ca94bd6d874e7f7d08eeebcc3d36e85c2b1eb8c", "177e82f2c674c5ed09407f8d43aae5161a147d9cd1e20197a285ff1e0b248d2b", "14800329ae281b3a1d04824a4278009e4c386570e518c304fc1d502b41330e70"), ("020761d9f6af62eb520c3e558b74144e8c9ee0ce87c4c2f0362e3942748d92a9", "073b9d17b1de0761a159912310a342dbf00a5edb03f3112b5aece6f94ea05de5", "15520f5697ed8a6a694fda4b638643bdcd57b94c25b549806655399a1d941001", "0c00d9eba91a9882a13fefeb0f814e6ef5d0db7abdbdcdbcb8e84edd9ac742d0"), ("28598d8fdcb9fa01b26f38e8b2b636165385e1fc4bddd1198baa2b7b367ec2bc", "22671501ca32d5bb5d03eefe4e5f2792db239731551ef76cb783b4cad63943f6", "0502a4fc69283c1fe935930050c7d44a53d8d08f97f777f1da82ea9a0be0936f", "2cbec23f29bc23d400be93b8fc0b8f21e9d956ec3bf36ccea466f76be1c7a017"), ("1d751388f4b7ecbb8cc235cd82cf0fc8cd3a5e5a6606e66ba168f8686b64815d", "1d2989c26d633ed722a7bb830ac32f0c0338bf20b1b6ea996d385c5cd254492c", "1dadb98cc612b2129b9de1dbc972483f44852574bcd95a15e172a12c9370abd7", "0673b33aa0433161aa903af7bb0ec13c0bd40885248fd4bf2aaf1656dfb2ade7"), ("2c8c3138734833884920274faede86fa58702fb4353a0c308cee2375589d9953", "140b69607b49696a05aa82a1e4071e88ed8cc65d976995f6535893af4c19a8fa", "2e23870ca74ea78a74df2ac9467611f63c333232de162ba118c5ad920cb80ba9", "206f286480966af2f422de8b06633c889491d7381aafac83378fc7c5365aafbd"), ("27f5d3a49f4cdd091892c58ebd84d9609e24078f802290167184bfc2f28fc65a", "22a918b182130526bd6bb411bb0b8c96993156086ea211d1f1104d8a877dacc9", "1fd8365fe44ed3321a51dec002561c4d3321e087495f419585ea4baf0e517444", "05772b4f4d258c404fbb232cba865719471f139bb71477650416ccef00d1241a"), ("22c89515f527396dc4648bd9b76d5fe86934aeebb2bd4cf33b30557ffa178a16", "2c8d1e5b7a85b1dff79af037a71021cfb3d5cdf6d6aea12d5dee28093bbd8e71", "04c611153b012e2db3237c5b6602a02fb4c871ad482fe552fd557185d44d8738", "0d20b1c384041dfe3f2a7cb57b585191130a5e9dbdc223553410d40a37c213b8"), ("03c38e3b0c65f38b410e0258534dfab52a4a9f2bae4050a984c0c30a9af28a6a", "273af80770347d3c80fad8dd8e6fc5e9e6d548ab5711f6c5ecc1461fd75b4edb", "18dc1a2f1db600b80e27a7050ab13a53c4f85f9c752cd75f06549d4980eb6409", "0d72ea3cdd5bd62d8312eff5de4a6efdd45b251a4271c738d8302fb5d029b284"), ("13fde799f3dcec10e398c44178b177a04dcaac5af5988d65666332efbb25bdb9", "037a9c7655d493a7eeec85b0698cb6aef660cfe2ed8e0f949d151fc32713ee8f", "15f758c7d18ed767f686697beeb16b6fb049aa1842e43f204292f5a5305b7963", "22b70aeaf382ef4133ec6a583544ba4ea5da26e27bcf919594478773f8433263"), ("1e7917dfc241be717d18a50813a3fccd0fef238c6c7293fcd8d4ac4d428c719a", "1985452e2261491f4b35ff8ff7031fccc60469e85923e2415cdf9827aaf559d7", "18c571010b3396cb3b875f256f7003e962d0e6a7c5f15ad74bda9bc291432a88", "1626730ba42bd0a0226dec93b2622d698d886cefb59f171a8a8f29381bf8e11f"), ("1493974032b36dbf5a20b6e66bf76015cf5d1b3d56e30c94bd1a40f31000e903", "2df6eb2e5f4d0d4ad6690cf0d02d130d3d225a3fa4af8770859ab8cb71c5e8d1", "022674fd86ff3a90d1d4bf60e79697b706468349d5e43e5ff5c898db1ee054f8", "18fddecf4dfbce3fb8c1723e9113093395437ccaa67b8d794541a1d30d7b6141"), ("1492ccf9f3db485d2a5a4b0301859b56eb56a9979c73ace7d77b4da24f5cea4e", "2eadeb05dbfe4b94a74c989f6d41ba66ac3b4db6f07e76dbe0226849683f41e8", "04b7f24fe82a042370462712609b1e207c03fd89072da0036d442f66a79888d5", "1ced02638bfe3dea428533177b188db51eb4efaf50b51c39bcde7e557e643418"), ("06929d1f61598ec67e701cb83b4cf46762574df9df3021d74cc1b9191bb61a3d", "2731f45b99cce2863870fb9e73593559e9c089dd4c9643c478e1edee76c02069", "08b512490e81c07906b5c5bc0161d70fd99c717fff07c26414cd98e85637d88a", "245a21052e69a740217fd58b1bb3837ec1bbc0ebd7902c8308428f65d72a6b9a"), ("0e33e635a60816186e81ece5640362d11c363fa2c78cd9348a45dfba38f19adb", "03d91389be8355b02c9b6818c107adebf1b11b9808d69522917b91620a47f016", "00b8a61360221007ef32ef4cfba76a831cf9930234dc64df6362f6c2dd280cf9", "230010fe8f30a1d5ca399f6c1eaf3f18081690dacc1bd7f16a178d5222735c47"), ("283091a3bd0e02a3b90626a4fc24dc890d16608eb816323cee8539b4df704970", "09b5db8efc42f0df66d840b4e1e5f85638bd135822dd8b2688292e52e3416580", "085713bdd1a9d3c4a20c57f1c3a6f20696090c23008afd8d51fad0fe1e4c5e68", "0ad0b4160018c844d4a6a0759c65f5cf486d7d943f2f35b95bdc7c0fe0cb8368"), ("17677975e449570c07f9d7408253682ae28296b2c2536421df4609b73691da4c", "0f7786d16f168a61417106e0ca5dcae30a808e2e7558e2342f702c3aa54b89b8", "0d286f31a636eee2ae9823f517f9ac63d1bba62a9819ad7431d0688e59d5a22e", "15cf5d77fb3aee5ab7541262973a558ead5849035183ce793f7ef8c98f242992"), ("17869ffc1239076e36dc9f6c772c282e9a9f02a72437aabc7a60d489ed03276e", "0fa3847bab783a2a2e3eef0fe0ac63cc481f237898eec47a9c4deb34579df7bb", "0c6facc62662195a9f6e0d7d96e5176ec6f4ab42004869d81c9a785e3baf1c20", "00551552d8f7d1b40ebd120610d969c8ca3f15d6804a5225301c5ae53ed347ed"), ("24550103c725e6ecb00752b70259cde0ab255708d5fa0657d8828276391d194b", "0390f1ad10d08ec04f32ab13255032b15d9a185a7a18f3789b6e2359fa2e7e6c", "275dcc106ee43602126ebf0b3c0f957bfed773090e4479395378180cc17fb7f8", "2751db080b17f6dba9b1ccb63af14631090f4780ef990e713788920203a99071"), ("0f2a9ee8a0acb2e9c1a31a8e86c1f6b37496ba27402478b5c1498b3c174fc70a", "18b3b8d4027d55f015424886fb04dd83f3968fe0bc70f54a8e47982f6704a1f4", "154ded73eef9e221a24b10b4ec18eb9ecbf5e5f77417cada106ddc61d286f3ac", "1f2f580a00c5af626eb375f6749844a352afbef323ee68d18b9961b18e747059"), ("26b6ce6beedb9654e7addfd8db229cbfc296f2822aa39a82b418a4ef210cfe7c", "0aefe96e5738af8b46f0bd3de85c65ed8f1f94fc556ef3de2929e2bc4b0964c6", "201c25a811fdf60c612008fe300fac9e659145ef833d7b47b533c43865b3f0e5", "13396f4757dc601c4e5a13e85585029db90cb5ff8edf174e8f55dfabcdd339c2"), ("21398009746fccf8b49a530ac5da21f8b31917c49ffdd2e9ac6ece464b202474", "24d69baa9889f7bd80cb48ceda9e5f3d146013aa47e19327061bf3d8efbf073e", "2bd53cc9a65dfcafca2327daacee76f34ceffe4649767a8b95f6ba22c178c50b", "055daa1cefdd10c06c9732895c19764c0db61de601191c8e33553e75435546f1"), ("1ffca4e71821362746e81bfb432da03b77ec2cbd3dce1cc3c0178545c7d19f44", "0852f90b0bba3bdd51d731b4b8aba6ef4f7d909c3e77b5db125375bbbd47236b", "04c7d30e9a898d572c7dfb3c05db1fafc14b89604ab33ee769ce18835e080d31", "2401c8d570b9150c7fd16e0d9fb70d6b9a4d8a9bf8830679844eb3af08b28287"), ("1391ff75ce6c16953053d8961c337fc09a7f21b965167c23fc52e69f032d68a3", "02afffb9220f214d2cb58e67bc605e0bca39f2eea563562ea90bc82ceadd19ef", "19a23b413f7630578ab3662628f14c5d3f8c496536dd64f1cfe328bcd467808e", "1a13e34ebd858e76f409b7832f4b52bcd6501e937fec25512bdbcf7fbe948788"), ("0751a3ee72c5ea180d0b26ec5466f4976b056b8486cadb4d54980bb4051cc0c6", "01db1275a6ef5e16e721deadc6b0525eeb129ad14c2b285cfd53b651b69ab9ef", "2915b2b0262ecefcf61b279f518f53ae95c8ed3ec5b2fe95c095d64882c9ce0e", "2d5ddbc5955cea2fa73ce1d7059322e032266118131ecbc78191427ccf69b26b"), ("2412c879cf1863c4fc0ef038a04420f7f0c8032a4478070822b11e21f245fc1f", "26c45c9234e38aa3f5e6b271da1a98f5062b44488a29703b418b6c3fa81878ff", "0da23fb75fff812573fadada34042be3a35d553de9b7c20c61b51397e9ebbf36", "0ad911acad00f5c60f672607d46cf66f65a57cc106855f4823c6d151a1352b33"), ("098502ceec2c36d5b9f286235db28144fbfc179f16bc7181043fd40887abb2b0", "1d1855cd300253e82639eb7b47eced1773b7911c8948fb9e8bc790485617d25c", "2f6550efc09a233fb034acb08f43abaa0ee27bf0dbc7658fc509c6686d31dd25", "1affd3e373f6e0debb4b89e2724ea66d25aae9949d348df8f8745ae476ec797f"), ("1994edd0fe53b7bfec70ad60c8a42d298fe27483a8037a440fb75091b43b0996", "04c934bd63b869909a9522cede218c26711f522e706b9155743a244a4c41579f", "21cee34fccd20e21c3140e5d52796206b65089758e3a3a9c28083f501987a8cc", "28989b40c58fab69cbffa392a6457984e61130d6a4f4cf106427b65cac202e7d"), ("2e10424a247646fda34565b6afe31e54ccf16d34088bfdf3688a90571db9bea8", "2e6cb5cf0d97e101d51a825d45a9fd46a80bdfa7c018e50ec6bee9b0bf818eeb", "21411c7e4248813011be085e480a62bd064ba848f9c3188d1a1026dbf337f400", "117afe8f18c1473f833585fe453f3b6bab4e6f6257c16b70d333e517b4772b92"), ("2da2ce37f37ba7109e6d81f9279a5d6c34fee5d2c3032d085a85764c336d72c2", "1fd267e8862267de54a3d41a28f181529351bcf12664fcb9bfb60b079bb6cfcd", "1165da6d72d81602baec6a0adc7614f70255d69ef411954d6769bb142a006347", "28f585193bc4589947046e7b5cef2024b1baf3ee617c04159da8e767932ee713"), ("040185a2d6ef9279f10fcd0ce60c954af1b6076f434a37299f4e76b0781fded3", "2558ae7a88b5172eca72bf5afd3e0e6576f493b5d110b6de1ba4b89d812ffba0", "2ef3916691f4276b7065ebcc8b4ab2c239c22c03db543db1231ecbc29532fbda", "16bab875eb8c5a47884c552bf632a3df06def5de440feaa4f9885a474f135be4"), ("1e95db675deae05c1031748cf96e0497bd346298f744fe752dca0ffe8087e6dc", "0074cdf523aca07cd403d8ed198e03fc3aca824d2374e5a2f64ff7d70c211c8f", "181f9be2ec9dfbe44b63b51afaa05f7aa1d2909238f9b0c0465be0fc16cfc39a", "13941ee398cecb66f9110e8b6518fb8ae47ac88b70111418dbf8d08d56640478"), ("177405067b2d5b5f8ec761f10f34252d312605c485fd330c0add50450a9732ac", "15218cf58422a20f9752b6d3096c2256fb519a12c53460a844fa656f64e603cd", "0b93123f3aa16f603777946de8153cc3efec03e81bac1a589c043d4706e62390", "10a4d1bfbcd85761d842380df4a47a3afa774b71d5f5768dfb89317d823e2fdd"), ("2097adf7ce4d4e1e0a361358d5f9ec07f62ad01febc7a5e25022fcc1fec677de", "1b527366598ad0ea9b78ff19b8762620ddc86cf05d099f00131ad835ab6f72a3", "221282a6d8750df566c8d73071557eac93cf96a173d7b28effba1c807db23735", "26b3c7a5abcc4d85eb66812bb1f441db41823bb0f1751c7fec4f884cbde98b08"), ("1d27747941f1a3d547f81524eae386c680ead34c9bd3f0905896fdea8e4924a3", "2682ba2989b4705275a496e6f45cc911cbdf14b287917976eb1e2b439a7c5de1", "172393ab752a1f4e7a2249687655ea6c5d99ec84d6dffae14df166ae6b587601", "28560cc7c55fa44ca0796706151cd7f10b2abc7c6bf31fdf3f9dd61bfd02d574"), ("12bf25f6e51c34c1868c3fd3b8ea258e5e2a14ffab58f35d07ee51c233c35512", "2fdaed3e887f1d144cb6422b2acd71784cb3c10c3c9619902ad9fb0a617008e4", "1ec8fce4e98c9d607114efa2fb0eab329fa6180383880fd2d0e4ff3cd2058f3a", "1cbe8422d27ec7a6cbce9147fa20af6e058ee468b14671967ec484a9f2c85806"), ("08dcfb2a82049d902cc9959a32dbb969751c7a3fe913b1179b96d02c4a3bce4c", "0ed938c540d955eeb01d0887049cb22d1a2b921feb32da9cf5ad19bcf3118f37", "074e141bffe53515570eb3727805044be125523dd879a61f2566f1b4688c4b43", "04a11a5e14f63e037b8b376afcf4ea04aa5911c4bced450d4ce50ba712f430e1"), ("2336791cb667c98c92b980dd02dbb3afbc0455e2a68d8d260fa1429b76ac32dd", "1911348fd3f42459508e53d00febf64bbc8f642b577243341d619d0ec0bddbe4", "14fda0c895886977993e28e87a7e0c8cca1a3b4a711d2b88239e24f4861279f3", "2636e42e928f0a838ea9eded69093bb73989422a47e5051711b9a79bc7749914"), ("2e1b1695c52ea70541055d26d7def02086a13869fb4d5f5f460ba0c0c5bac0de", "08aba03f8eca20c767326f2b57cfb16e77df8e8c5d376027fd9f162df27828f8", "1cb4f224e10483050932e64910b31d62542127b3bfb29684ee07436237c710a0", "29d9eed2c1bb1c03413f31cc18ab9ad4408ea1052b5b9caf1e6f68661bdc3601"), ("25be7972d6b0e67028aaba587c6c07128673f42c6daa17115423832f5fba8bd4", "2c6e22ac4e311cfc107a9a4a221555926ba4dde6326c5b3606f03cee71787863", "18012c42f7312270190525f9bcce4a25d7b3ee5f5ee6663a57717ff3d3b56f3d", "0ffd609ed33568658ecb4b77256a37b385dfa8788581b0e8901730f96a9aff98"), ("1a86b89b7cc8848141ef5cc35de530107b4fdc6d9a4616b03509f63dd2ba1e8f", "1306635c50ff36be731aa440be8882224fca7a558aec1449abe48eb3d62e47ce", "2f857c0bc777be9198453698fa1274604562a3eaf516c7194b0c5064e777e5ee", "1531e810705c56c5bdb2cb270302e83b576059b70f4813cca6f68b8ebbcde7b3"), ("2cf8c922744e320e76284f37dc3cfbf513156d9f76806355e47b1c26036c9e97", "250b2d0fa9f612573c4511dee83441ee09158a4dc0d0c4c72a57fa4ac01212c3", "1f9873ddb48726da6b73e8f02276b2ad23bd168f35cc74246302a14b2b378239", "0a9c7b7d7c35c659ab460e296bb88ed287146c956dab40045e94caee9abc6abe"), ("1644e9112b58cda1c9bf28d88b6c5ed6acb890f33d6f65fbd738f533cfebe101", "125d8333e967a37c553ba19918e7e415a792386ffa18ea6daf18b7e3f48c0955", "22d1ebe9285c9a8dde34713a70371c9262c96996443dc72ba6a45c7c1d9fe94b", "1ea9df1dc6bfed886f90376cb1840ad904540b25e3d7a9f682d7b06a29cd7e12"), ("0474ebe6abee2deef29e62f320df00ca6e5d57395343f5cf38f0a136c5a4463c", "2eb77f7dd3e650125bf0e6043c6e9d24abe91117ac1942c8208851e1a102781c", "0fb869e83152717837d43592a8fd3577689722bb19f7544236be258111d9140e", "1adb6ae8d7a9cf41805484823046db43aac5d6e34b77d9a11249aafbb12ea58c"), ("1d469a76c40a354a416fb8c579f8ad92f8baa83a6c587e08ad615c406f479566", "0e9fe22c0ba55341e212685ef519972de76da0338627429a64d0fa1cb021f83b", "01a3a7ab64a708e0523c75b5e1557ca60d559990b73ee62b71bf4996e941beec", "17adc13f94f1d5f78d8568d0488344bcf114dd0d99def5ac6764ea4d07b3dd8c"), ("07fc9010ca06bf121986ec29462c84aa942f6d722be21a8fad90fe6ea8b3b57e", "270b061360b06584fe74db2f5296854e1f63d283848c3734220b80e1cca66cc8", "09a0679aa4bee10f99dc8bfad1deefbd5fb6b1d2e1f2782477cd11a73b75d06b", "117da420f2399c16e0b899250612ccfac1984900d46228c1535d5ee4c16e8bbd"), ("032fdeedb491a3309d2a8dde4c7412683e36c5490e2bab83954126df0cc9cb7e", "0cf26b75994d3c4d343460397063d52544a5653c9976a85d722f07828dd86e62", "13e7fd486403d9696c0c1bbb21b463f8e7039c621553cdc2c05625639edf539f", "25433a9bb19d1d5481862d6ba78936a302b42a5278a3bb2f1eeb440622d69cdf"), ("276239c301fc977594b1cbab7a78985e74adffe9762d56272e38760a581e054d", "10ab23a79f0735312da175a0c7666ec5c796b4377061731a420cee094108240e", "233ae9892b97fad2fb450f1c9d9c3fba93b651f939e85cde4d112a24111b480b", "26756e62467b530889afdc050780e9328abbf820b3640d045afd358a308f3b2a"), ("1eed842d8fca392d18e337f62f1ca4322d61fb0d5b2beadf4b706b299ce5284f", "123b49424471709dcd6c83a2d4abddace02859b3858b5792ae0dacbd396a3a67", "2528c85df0cd6db7ac91ac1f6e78d5e740a0cdeb58f54ce3da49c45d8c31d1f3", "0965e146e055be3efe781ae069fc088c2fcf29c11924f9f1b1cba46275413bdc"), ("13e6c5a31d793c333b346e9bfbba1ffe0215fa7add3d68d31c08be9cedf2b788", "0c994981ceeb862468889c855e0f28809ad1bf842cf393cffc47d1ab5b2d8875", "2857f1663ccccc467f7b45f8a6c7b8f19398a13a4918bc7229be395b8af6af81", "302e0d8fa962632e5faa82c84d069e72a3d59e7bc7f8e0c42abc573402e0a978"), ("0653021578dab3edc59fe7365d419ce48ff6bfd13d70767593aa64913a3345fa", "07e7fbf67c8a0f67591505b92395e7adc4413b0f522c7e74066142e49e012707", "0ec059b859035b88c73fc88b328c166944eb3e023e519dddadbcfe939066c267", "0c83c9dd9d5dca2af6518ed98cf188a86698664b9d6d223a2d4452e520217466"), ("043338824cce7e3801ea3c784e3753783d6d869b4924b12e891c8a7a19cddb7d", "1cff88747edd97a0acf9124c11e24c4d8a236ac8d918f64e56e43e50c780c673", "1f8fb3f8369dd4a1dcf4c459c005e37070af410b164b93501949703aa1145625", "241c45db29d205d6c442af245837381151d62f06ff54deb1ec8734402e5eee8d"), ("275279b66fcffe276073143456174a5a60191cf69db658f50ed1d2f3032dded2", "278280aaf8bee552f03055d4af57cb3f6bf331927d89ad79acd0892294d9e5b2", "0d235d7db33e1a73ad0943304d7fffd46efc8219da68f93c7751b9b1a8b04e84", "03952e0f352bfd10cb6f2e53298e110f04d18744cfc01bae8e1b85dca3a29052"), ("2de24975c2a487c901f674f11e1648d3af58ab26c2cad5c1d7e1527def45baa0", "23f70ca713899f484bdf6646dbfb3f507e9c1592f16ce613b477797236f98b10", "1b98396a447bf344b43d6c6177a1ca768179ec482de25daa15382f5d3e3dfdb8", "0f0c3447eaf2f9927d27055c7e2a30b9aaed75933422895ebd8cec96b8b08637"), ("01cdf407edbde6546d5a4d01a7a503e325adcb7ceadbe40c49550ff4c6fa6dce", "1f2c81dcc029ff197f75652fad48d56925e13c992f82f51a5ce73fc870cac8b7", "20cb50e50a779b4f285d0f0abaeedae8c7215dfdc32832f2a94f4af09f4562d0", "0f25ae7fa825484cc3a59fc7208abe9c095b62f5d89d467018939e7fae638b01"), ("2df1d7813194a5224b9fe1d124ae0f1e6b27ea269a80c605257d27d490d21e06", "26864df92ce180ce6bbdc863f99b1c70f39edfae069eb279a400c6fa6c85fd1e", "19ad0a0855389d87b2368ad81948770aac608f52efccbcb8bf1ebaaa7026965e", "1d5e340a0a36bb4ad35feb3e8348ffa5c4053ae22b949760e41e84552c4d7821"), ("0dec483d514e57c10d3589612c5feded2fc0fb66f61f87259c41675df0db2b03", "18152662fd269174612e91fc05b97ced7ba7968528f3ae3c675ef377aee04fe3", "238aead7be4c18a9d4b5f432c59f61d2ea777949286bfe7624400c014cd97ffa", "1cb5ff156bf41f90e0c84183a18ac352644e393459ec53e989fcb4fe5795b16c"), ("189ff0bee7fb72cb5a8f06c61bebe007451715f365c082299a97be69b4425533", "07f8ef2f9a63aade4a9e64b3527fa18c4a1165d843448f473aed04bdfdfb4b64", "2726b98644f4a0f50ce2b469b8c19c2a77265bc7e7a7146e323d2be4d20ca7f0", "18a92d105f6827448d09d2c382c9e4572d206a9c4cef752528ec7854da0c12b7"), ("0a7ccff9c3e3e6918b49191da3e0f1aea323321d0e281819fb31fffeee252c1c", "05da51949fcfce1882b6a42102a5e1cf88dad97bf2e1f09ccebdc5fa410e30ca", "03fc7367409a5f46226e808eb62ad275ec40a4126e184cbc6fb6744d86c44cc9", "032262dac8729c97a74636ee895a053531161584b834891378e186f692a791c5"), ("029a3c9728a056c286faa038a90e5f21c7856ce1b61fc1ba2bfd6837a85b91ab", "174e02056129b8c6df2ec6bc0abe47bede6c4f87b1161a06267716c33a6fcc81", "0e69cfcdf13c5f169762c5ff8e7c921f6c90a15bceee709322b7138faf09661c", "0ca81da7778910c018effb5b795e0816df9fda985e45576b77709e31be041e41"), ("2e9ab1f9f12963a3266f501fa0e18a1ce75bc07eae6497643cd29fd8d3f9a0fc", "2e87590af7f57c2317d5831628b8b4950496396ec984857653e0a7f48c89e7c5", "20ae5a2b7088982748243cc37419a698d845d658e57a25921770fdae4b7fbc3e", "2de8338f49e4fe9e9ed53a8e74de5d173e162e81380f9460f625b6ec101c5d47"), ("221230e554185b33ca6b606dd73ca8f028741fe5d700686e60fdd88485ee3520", "2bac45b732f7b3d27912a24aa3aaf3cbfb55bdfedb43f2cf0a966d4d5230873f", "23cf2aef8d7aa8e33399d0552abacf71f02ff2d5d99786ed3f9a2ea7a4da60fb", "2b086cdb32aae40822e1df06624945f0135b510715ed343677371f5a53b21429"), ("1c5e507ea63bb4266f964abc4725b73d18be87cea74129a4e656887f18dcc1e7", "25c581862a1524315737943332f2b0c669370271c2048729d246dcba69d1313e", "2f2217d5b28c65cc0ee597de9c9b8b3c0995299a61c5cc10ef223b90f67f992b", "0de6173e0b952cd26c9b74070afc7239fd73ffcdd15f7532b859e3dcb43e1ca6"), ("1676e03402d0dfe0d0cd7a46d581ab5a748782ee129045dfa3f03ea56cbea35a", "2eeb4de5c2bd93c55f0c23c405ea31780c85852671297c1bc00649cf47ae7abb", "184188e577c7e7333072593f226773d4b69415617c1bf21ad9c9ead3aab48fd3", "1d2de2af36720ec160f7895f8611b4b34e272d98bba707d54e28e81be836bc92"), ("18c81ab70fe262fdfd5b17d6e753818a037ad8742af19e4e5351f52d31447004", "1f1a6f7ed111ce6452fd3b8670b7a9f10b8d0af8d0bce6e57fc6a5e7d1e0654e", "0ac7a1566282f1ee6eeadef8492cf7bad09a5bde52bf2f2c378bc3733bc2747a", "0117639ccdbe1501a2965eabd5c4abbe1a9e3be00b35e2a45a4c5d19fc845042"), ("1e2332a5b5fa60e3ddf76512e09087fd52f685979fdd108310e8d5998f2fde73", "1b6c08b964643a64a59464f0c93cc23f2dace15736f19508dc2ec46856acf3ff", "242e966c0f0850a9fa3e16de700f2e785059030d41350f49d7c62ad64b72aa9d", "0e98fa85b7d967be4f6fb1a22d74541727d4a9bb00429527fece6e22cf69c6ff"), ("045c6c968790a30523c77be6b18e88c10a893668146f1667796ff750e3eae5e9", "2936b85cd449c180be15669ce8d0e767fe631ef6c43b8ae8ba8d117d4bab5732", "04ec078bf824d705dd76c30dabe5820329b556e484a367525c901c3aa156039e", "2b5d1f36726eae52f541798fa80aaec8e0bceae405e82dc96e808c20270819e7"), ("0562703a8d7525eab063ace9f8d7790a4031e924b4ce166135d20f2fcb88b538", "1ff40fd1d69a02e2819f48457730b7382aa4399df6463f3710ba233489329d45", "0fc38d9770f2becb7b0e52d8ab956b958aec0a274cc9179a0aef755c2ccfcb96", "1fc81600b3105f2967e9a9394b655d29aeef526bc87147d164c0c48ce5d4de62"), ("01e8bbff38b6b2fa3ec45a511f0a445d768691d7bc88524b9f5433566aafd48d", "29dd21d0b68cc0b5e06f9f3a5b3dcbed54170c7960a0a18bfeb8e1af64c34065", "175409bc28a9ff998d05c8f6a7e9d868f3f5b09f782f896afcff52d968b95756", "2fa0914fd5f811dba850d7596644c4413967ec25812d864246cc787375108e64"), ("1a91d917476e7897640e6cc6ec437417949f5aafab7af1cb373b221c79ea6375", "1b029d0ac2bbb8db619e7f2e1105a5c9eb06093020f3fea8da0587686cad0b38", "009246922a0b50dbd934fd9c9cd6eded5833d636823df682213666ff4e3eaebc", "18a427a223bd948cc869a636c9342b5e888ca55e05a45026fab90723d48d88b1"), ("0dd25a993655dcfbf20e6369d81ae4da95cc08cf539d0b0cd267e4d981e2df65", "1fe0cc94b8748a601bf68613ab3d3449be15be21ed3540561761ff2815d74c90", "0bcd60e69534e8fc551c2c425e2a065aea156501a9eab19e8b2e86eb61d2eea2", "055285e8e5015c8b8e54735ffc2ea5890341114432290db0462ed297b9fdf044"), ("14aa2ac17a3e6b57763dd6f8c9de08cca2ab19f6ba489112ac6e5f0c6f4b76d3", "026b860055be435ac7b23ee2c24ff62b45d228f06ad18a91401f7eb8021b69d4", "28a420d10952e613e064fa3c0a53f315b43dad3940e684acfdddd4bead5912fc", "10e34f67662014bab42a13620765feeb02224528a53340897b0396d8f77c65eb"), ("005c28beb559faeebab8170742230696bf7a69e974113420ebc7b0213faf302d", "2baa79a6ade7176cc4aef539250e980442fcad04e924cdbf1cab7a39c1729968", "1dd55717fa5eeedf3631332ab01a6b3ffa0db9bc49f022fd74dd3d81d442cf88", "24e0746841b6e3d60867370bddb8223180ab153a5fac62c3e1a493bcfb07c46c"), ("07214039f2c8d37a2510dfaa5dc3d08833fca3c6365505632f48b38e5bcc43b4", "009cbf5418fea1222dad21e2a9b282ebb85872f82d1347acea86ecfaf4e4bd0f", "1692e95ab4b327d43b9791b8d73fc3f4775fa1ba7443c83b3e6bda769495dc09", "17a4722ce7414f0c795d6b670ca29d5d82d5dc33f42afbe8ec1ffba220399862"), ("07b8c157f0533c2fabb1260decd46620b43c466ad9c1e89e1bc21d632044058e", "184ab4b130d1010d3e0f90fd72422a023e39869bd334c9b7040a1241eede4263", "001a1c5208dc32a07ca7abcf6bddea3cbc64eed1afc8ea45b250c2aa9f00d879", "300058d36340349724c03087f92943276db458d7e6d14b16111212966ba7e2b2"), ("2545884bd4d8e0425f25791fcd9584d22b6824dc05ca0be99c78487afb03db89", "005003e503163e24955d461786e59ce24e69607623df9ca70fceb2edd4cf69e2", "0957b4df165a4b4a32922a9708a10cb6f2738bfe1e9e0b5fc49224fe86327f65", "24037a174c178d4d4516382710d5238714043ff84f4acdc413e92a643e5d5b4e"), ("2fc7a351b478cde4c2b26d227521d1e70ebaf8e22076122dd3aae4965928e32b", "024cbc043a6ae1693a61ab5aaa8e731c83bd8d4e8186cc2522d48c52f780a2e4", "0e905105d9a7cbf26a5e45562f7cd73120a819d615936b9b66cad686f98198e6", "1f07460ea5846c30ca7d890d5f019d0ff2acc82dfbddc34e678ecf018b7ccc2e"), ("15afea50199a245195357b3dd5ee547230e27f2469d444e85762cbede0ffe56a", "145e52a43e5b93abbd14e9bd0115532bd734e91a4ff3cf5a5601ae1e1f2006e6", "2cc2bbff45a3f6e9b252ed85fdff871f7796ddf8f70beae3a05de2b2126c6f6d", "071515d0f87a44fef143c684914b667218e61f5c69f6d033279db3a128efd1ed"), ("0483486ef5ca6323ee6a80deb7ec586a711dedbf7c967dd6f2fe7ea06406289f", "1abe812e50b7f7b4e73c46ec530b133219ee43fac1911ada2821846c14c351cd", "16a0a77873046a642421c7c99d32457ff6beb4d60e3edd5a33caad073af0d49b", "23612deea321d7328c81f607befbe857fafcb69d0cdd4259ae17e12ef5939bb5"), ("2fb892d82de98741b43029fc94f627376039fa78c5d3d98df1640d74b2612035", "2618b80117982058a77cc774e58388eff65f35ed762511341fa23b0b965b6964", "21926b30c4ec6fe8fe86ab1b8c0b4dd8fa58e085201270abfff5cdde0a61663b", "1e91654ae645c893ddadb223f03a9a7b499f35a60d52e5e69dd7c4896dd15794"), ("06a319c8bf2ced0fb6ba1be927aa33fce5629c5165ac834cf7241df1c3413c93", "1b904c7016cdfc32e35d5767c6550172ba857319916f9d816a623fcf40d67682", "046b97dc091d4938d57211f142f33248dded89473e81950dda01db148739fccc", "0d714cdb31817eb13f3a2190627661755a0571c72e47b9d23abaa48007237e22"), ("07c88b2f2fc62dc14d12d6343d2d0910ab15ea8ce3a1bf72bc6a5384aa1cde9a", "0f449725d8f56d1a35697caabd0d461bdce0b3b5ad6c044d3a24b5cc5edc489c", "26f6c51153553e6c167edaec30bb0da87024e8032fb7e0cf63b45efb0f48a42f", "2a37754e48b45e0946b3a52356c93f0cd28239d989548621461434dd0d40061b"), ("2474b3e400493cdec75fb9c8f83e603ec60760627373ee371729223166f2f124", "0af3d1009e318faf4d5fc376d0e70a1a4745e40977bf8cb28018b604a8a009c6", "12bb2d67440f46aad6446b2d3cf613e7a813c85c4638ece16d36ebf613077973", "1fa4471be05d73b4b4dcefb2c382256b31af285425b4f0c815aa4f5eff604723"), ("002b76279f2ef28d464424fd80278d6944d9ec28bb2f0ab2dce747ec6dd0219b", "126953778f4357eb581c7536d229ae971242b4333334af7940dcf39031275fcb", "0bd3f1103f11a2fcaed11e384988f258fb4f140fa10680e1916cba4a3528ef12", "2321001f867e6721ada6fa2d26661807de073380f5ef2baea26035572498c7c6"), ("08d29c4481b635c855605a2fbf8b66e92faf7f01142f8a2f079dbfa710c92f90", "2480f13d449d14e84b54f9a67735d2d80540553aa4d9fef735208fad9d75a87b", "0319b7a97f0c0dfdc0a07694b883a13e7cc9b28e176ac6628981f5890762b387", "2492837ca82518c2bbad0d964c5873b33b33af6456143ec378f73fee3dc8487d"), ("21cc95190841f8562dbaf4deecabb1aaa1bc260f401b6f3b510f1069e27e8d96", "082e339343fc99bbd4564c692ae95a751320044e1338e6008e1623345efde882", "13ea8275fc1fb85a50027430963f30162ed2dd4bb35aec12cac2378953a1c9dc", "2205e16a791e10a8e85e85b2f042db06cf16bbe2bddd8ccd79622ab0db0ee6c0"), ("20873311d8879b36095770820d38a36ee1a61348b279d8679b967298d1b246f5", "22936e74bf2db701f565430553d0015e1c89c18d78f4371e075c25e1b503aaf0", "0786ae43123dc225ce1905471c1d3c10d7cc92ef122db83c431f94c25aed3926", "0a7b80e18df911fb4ca4ddd1ebe4f7bc856fba88f845f3f0fc714916e0f5c718"), ("0ca0d57eb3af9596e5f1a1612c676f0aba53f99d6a40a5c3352794b372d65d0a", "124536919e41d3c9d6f017c435cb5ebc6770239b07b022eed1b1ef13dc851da0", "0422042aec57e5e419b98f08670d11ff87298f47aec980c967726b79896c25b2", "097b8d3b9955c112a31c5fee1452d73d916f68c7fa541a2c837776f6c394e7c3"), ("2776370b63947d5125c160785c6e2a628124f0e31ab442b6e31744c991cd0fa6", "0fa5c4935d8bd2d7946ac1186a682d8010bf1fb9909ea612747685ab31c3ff00", "0dfb1129a1fe10dc6e3c0766a85fe77b8c8d680d80bd9a209f190f29503b3375", "2330a539908b7052707d5f54a2ae71f1984336641ee1b97d2a10605ee393524c"), ("16895ce454818ea7408c8b28eaa71e9c3e981e9f8ccb104af297becd8ae41478", "26ef033b3ea754661510a3d1210cb7e89d46b2d0fcd3819746752507d5422f95", "1b1f3e6d620ef49f546b115d0f80e0bbf68e955d07b54d1b1d6fb94d90a10b20", "0869a712305234450493a9927470624df2ed39152de00df5354da8e862b08a44"), ("293bbb3299004138ab218f91a016bb34cfd48e89071ac5d7a37d912f268f33c4", "1ac52d961540de1b1711676a855989f116dd3dca003b12b7cffe2d0c9462af62", "2a7cd676b692358ab08fa52a18aa727b5a52b3b1f6f49c0550fc92650126c3cf", "09524aecffdee7fe14eda875b445293665c7872222e3be99a6012ebb06447fe6"), ("2cbdc74d198338dd033cf1317c05c63cc4d377b621e79dabdd8dcf1dc23c398c", "2eff39bd4dbef06c3b3b47c72435516ec35419e943d6d1c958ba0b915f42ec55", "2d5484f6e6e710bf0e599dd7ae5658e2bf53c83bdabb84cbb844d90052deb491", "0c7337736c9c23b5a704559484f6324933640e62b2f581a155c8b31c7efe02b3"), ("0461635789759a45fc4fda9568ebd6e0aaf395319f4d208fae8a771690d8b1ac", "05be5aa84536f043336a0acc1c3fa0dcc89a0a10448eb583d3772f924a910a90", "0a5681ba0dad01b1dea627f9b82e2763c79cf66369bf78b6d00863fabac4ecd0", "1a357caa7abeab88de898dd5057a15b16af4eb6152cbab3d1d47ef1fde1a9b60"), ("0807cbc6334a2d5c20b3bd9052dfd359cc2700c1f50478b214f4a9519b503b68", "27ce158252eab8ed336325f37d0296b7ddecad4bab12c59aa090228e181c2476", "0f713aa54d7ecfb0bf3d94e5143d54deddad72b05c92724f6e84ccf876fa58ab", "0d31346031103f5fadb3f8d2907204c0ec838989469284f639418279fdf9104b"), ("1ef817064b53cb45fd32b2eec9f50d45c50258db1e63daea733becfd8c354c62", "0a43a453469ca5e1ef1b82c97f2fc2c2db7f5819cf1cf4730449aaf0a34e4450", "073eff002e50862aa09acd33b221abe0147cdc2d4f7109c29f92204a145d6ba2", "10eb4255d682a97202813fe18ff84d6275ef5d5e060f03dc77cd3ab5aaa3268a"), ("1c75622c3877f935776a4c2f195eff54f3f7fdc8f8820e514b12907d3b5b354e", "0a91b94f95606e2635a0c32d19909013bacd7421dd525d0323e5e75f26fc2588", "14011c22d40400962f1d920d4c0424aba104b9058c2fe58f1f75e524c761f9eb", "138d617891c228e1799f12ddb5b895368db6632019ef28bf33ad8c8dc13f487e"), ("0cc51bdf8752e4c548dd27ed5961fa6e52d579bea976792ac688480cf2c33e01", "26d524eaad4c47197f132ae3a39a3e7ea7083df91844faf0fb32fb1d38c3bc50", "2cf9170ccd464ec0af1e4c6170f9a0522afcbe62432ced0a10d8b6afd59df154", "04c86cc27c5b50abac408f3b0ca07241bc0bcbb3b9f2683d46d044b6917272f5"), ("2f04c10adcbdb854794de9051fb700d7a02bea26f235856fd09bf8b1351b23f7", "1d0acf91638f044c86a8cea9baa2ed5e097fd064be32d6c62a7380b7ed05350a", "20e1dcabfc7c1d0746041585a6ebe6d9adedd81fb105339b8876c427c9a6295b", "03cf1f4e8e5e6601510e685b470255cc8da97d2a76d12ef1259f48e7096e17a1"), ("0507640f4fc0e41561b91716aaa449957c1629c89fe32f1ad4dce59e3ef72a74", "1efca85581bbe95fc98e85837671776d4ce93ac2ee8357336391f13a074332d3", "2fa17f9f9efb3e84d2ed2a1b2b167aa464ba4459437892d55cb81f62c91aa040", "1ab6b1ff0e7fdefef8df04ea9e657d7a8738c22c187cb9713c512c8a245ee051"), ("28899a8d7814c3cca5d4b672a2d4f30d645ade016d8890dd5c8c83de37e09163", "1ee5282e3d8b09176dd89a6e48dc092785bd69bb7b397c4e487641740561e2ae", "0999c7468261fdf58d25000efc62cf7c35c3e9aec20fe35f9bc91848723c7bde", "0301a0169ba786f2d19a8649e9424b30b8a80ff8353963ac6d42dd307f1f197d"), ("21d5dd8f6b5c076b6baa57924efe529784efae3ae1ad42ac81f5d16758a1bce1", "2f2625a087298372271f9cc30d90f5c1e739f667a3f92c6d6202a98f698d2094", "0bfdba1ce7122e34e98a523de6ac68cd7d0a85ec29cc76116ba47ef7740704eb", "08861bb03010334db8e74a9d39ecd7ae9c67153d52520f996425d5e12424d13e"), ("2859cbef8738fd81f294580de3c306b1ec489ce8f1bea398e2faacbfa8f9a2e8", "046c3acf5eed1a952c33c347bf54e081e37418dc9f310e121cd0b338a87a7eef", "05bb926b8c17ab9c0113e2ce08319afcac8c88c6b1f1f13bb8b3687c59f943f9", "1d170464d2dceeebab399ab62112ee2ce359a5ef4f21b656322f66002fc1a8a7"), ("136b2d3934730a8e0c95c0c99150a80a7ab2f0235c6b8c8cb57e51d444489f3a", "061c319502d72a32b34af17a4eb1b9337be6b94f4e822df7f37a97e2740e0f38", "15f3ad7189d655fa0f53070fe895de628a54df33f1abad63d7e36d9b80fc9368", "0bb83a9d0d6908d4c3317bdd4393d77b82165a57c288676370bb3a1b5a8b9975"), ("2137fc7374b9ef27444dc7236995a3fdd50e7012e4f442780c8b1448798d8491", "28e2524e8308c630f3803cd3ce098309c3f7b7aa08e5e375b3153c01e3531bc4", "0b35eff3a370d2998608aaf5ec6047775df17063fbdf7d90edab42778996f513", "19ae8233083d24597871594e0b2c1794d625278d263d463415714e19ccba4b1e"), ("00cbb7f7e22205aba02d4cfbd29528abbfe574d09449cfe65eb29ca903a2017e", "1818e57c4638da5b43b45b59c7f9f681860f8aef288f433983e16c3c44e0c95b", "0c6df11484ac8dc5a7a63a14a342c275928588ec54d4d63401b517f938bcce6f", "021ec621f5cdbc60370ef385049d7af770a39aa2b515ccd4b64943a91f8c4ce0"), ("2bfe8a7d34eb5cc156ae077bd38d51f745a8ecb7805f1f051a74fb09f0d126cd", "110c96e10918ac39360a5fee3da8cc030ea4c321c1e67b3033a4330011ba6bf2", "018d450ebf37e0412e0b7c2f96a00f461f0847f67dad1fa176edf2e644f9a92a", "0d7557bfbbb66bed230b5fa6ca7258e255d9697fee1b4e109bcc42c2d13139c7"), ("06bc0afd239100716af7e0442ebf6cfa774fe5bd19636af790720224e87059ab", "24cd5629068beebbb5e47b9b321ec9add8dfb2fc02f423a982b1f786d0f64805", "2fcab074b7aa5c482ee98a03df79b449f3da6c2b97c2eb1a42562a8b93f0b038", "0f0ced31e1d7233af685214f05e11ef5698da6a21fd86fe70c1b6109c38f2229"), ("172d505a8b234ec4b52afe58a56f75f288adeffaf53bc2a59772d74def817250", "1cef7712eedd9615083eba814598371b4110c865da1d057ed01c7aa150df525c", "1d3bf0978e9d4477ef5f3b3e9426fe6879f639e4ae96cd6a3a5fe89d66f2085e", "19e8de7c9fcafb75300b992d7c9a2b36e4ff665cf7e77c1cf6e8f6d14e166769"), ("263f65dec38b16aa78d6139b4cfc441559cf8aca37fcbae8d6f30607122f0fd7", "2a4d44046f14ba2f30ffefc41f8e67b64545493746af77e5a2e8de53928ee634", "1a5fdf4cbb51d24ce6a89593ded2fd53cfc25fcb0c3d2cccab7170cda823d31b", "150dfda90834d5faab065ec1f9b486d24c4708ae2806a0b2cddac43d1ece02fa"), ("1659c51c669b91e008bd657f6f6aea1909e9ad78f1954d496c8284c373de79db", "269142f55f156f5fd44d2cb8f794a6fe86422095099099a72f00fd5cd30f95d4", "1f38b9a70c98f9376c065c224d3938b5d00ab7d561c8dfa06d8f993c77208dc9", "13a1e2dc9647b8d5041d0049af19430cc7001d2f11b5d38d624a1b381fc0ce9a"), ("168fbbf282feefc3868594c0c0524d113020dadfec83e99a06eed768789c8f12", "022e256fcf63614c35d4f6e816cca52af60a3761ba5c8a5acc2dd9da0e546dee", "183bd617cf3bcc18a2edb8e030f36cc3d551756464bec2ea3d53186e0d6d1e96", "2ae48c3ff9daca79fb1edddfe471774c83906a73197e5f8bb8f46f7b831befcc"), ("267f26f47819cd9f84f7b4e9041d591751dd4c1917d094ed341f2bdc21eeeaff", "0dae939c29963d58d932ef9492c3b4d3f194afaffd3214625d97100daf6b5757", "1d6a605c8140795d91fafaded5f5f6e782d640ca2fe2b84fd47adeb672d8eed4", "2d83124395474ba71de5e6894c19e7aa28df80bf7f2c02fcc192c7921974ea9c"), ("2e08b53e95a73d91575e75acc573d40c95bea373e260ccc148633773ba6bcf48", "088cdcb15dd8a65e63ed9334d44e41306dc19c3f718ee4336aca6722dae02301", "0cda61ebce7624d292da3a8bd63df255de440c42b4e03db76cc381a13c719b12", "18d47745a7061290aba5f604408a95d032e5e820456bc96c46c6a5cc15559e88"), ("29983fd38222560f607ad97b71e0eaeebc9847e32ffe54c2c61c66cfd37f9d84", "2a673852756b35c213af927df3ced46bbb6fb5876634f7abb3e6a4ff11055757", "016e01866a5ad7a7061bd9eab65efb324c62d205266c80f18d1bf6defcd23b80", "16f8c316d5edef6028763a03750151f4c5657a960e4f830b571b779847f29503"), ("051a09998176e7eb683dd8d2b9389737be2c9e988dcb348139c1f830ce99b692", "0e1fc1b4c3d81f5855e37d0d38f042fe95740481adcb044e5b495299d6c13de9", "2a74de52d8a1ff0f39fdf10f1ffa4f0810a924f86d5d65aa4e2ec657bca7bd8a", "248d19c4a4da0954d32594357c0d527a58a7741998582ace51efadc07c774874"), ("2581b0476ba6f1ea212c3173ba1b653e2c0510c73c93aa66c7165fc76890a9a5", "248f38131e0336034af404b4b4da6ae10bfa84a598fe19ebfe326993e3291859", "1807ab8d322fe23510f6a5c05f12e7d9199f77dbcc7a0a55fe5b50c3b498bcff", "09484ad7b0d44984211b64a3ae090190a9ffb60300f472fbb917822a10b1bcfe"), ("0d87cf1b62d2b81a84ba15933161871c3dc607413751e137bb0cb13730532e5b", "1f636bb8457d1c285b313bb055333bc4b57cadcba916d2542fc796810e0391f0", "0fc4b68431f091bef3c2e36317a6e64cfec70a52a2101516f094fdf18d3ebb27", "25e5040284434713ea9bd26f2ac9b8ec40f3b47e0dbe9dffe5b792eb0300e3cb"), ("2e993a916bf57196eb98f5fc0b2738a1fbbfde5e1845809ab80cf3505a5d7434", "2dce6dec26ae130efc0a62a13921104d10ed2842687771fa4cab2675e72b88c4", "20baf483d713df51b4b005a4ff750debd8366d4c8169a0f520e2a2c87f26390c", "271d9a97f6d19a84c87d50c836af0c1634aefe8f630516dc1fdeef27777daeac"), ("211e6e1b53a49c353298ac78488610812deedfbd1ed996d153ec4040a741f419", "0355c5d80b96f0f10bfb46b64495b2d41f932b171402ee3d8552864a65158c9b", "1306973fb54b60c8d28f416fb43aa7e15d61a40dcf0b8d0492cafd34e212f4e1", "123ea7fa3890ff206363369956a70fd19eafcc40db27425926a7e153498c2b2a"), ("05d8d91947018e2c8fa0085371c5fd3b152fb0212197f4c130a596e4ad449df7", "0d631f8eb0eb2d84c30ff6ff428467256a12a8d9757d635b58b86c083fd463aa", "0ff43d9c0289d4fc8a641d97ec60312be563fbb2dec20a0cf1d5386685eed323", "2d2c3e2395f598301228d0e10a89370c9561b7002d4cd428ce26f4fd72a5389e"), ("0cc3c46ab3362fd11a31baebe30346e8d182125bfbbeb7dc6fc63141f9d2c4ae", "1d8e47aa881f41fe85914f45dbb08e25ae5db24ae815311985a4f1f4743dc713", "1e14618ffda19662bffc4f2a780a91846357c599ffa52ff7e338a7916978d784", "0664d25ef60d47f3fe05d641f6118fed9915859ab22d90b579c589f694c0fcc0"), ("253988246455f649ac922eaa5372155d8cabb7d972b0a82f14add3290d044d8c", "1fe1c0e24d25c11b12f0b0b68c4986232bab6f2c84cd555292a8472699c7a63d", "07f498e7325fbd02cc29c286720829c7f9e920d1224df4132fd3837afb6bf679", "25695a72f257db129264d3798178fdd45182c6d6fd8b607d78ceb06e80622b80"), ("2134fcd6308adbf614eddda1aacac38c21b374615a5d82dc48b2f4a1ec6c7cac", "1337e79c32e41aaa98f86dcb7f75967f18acfe49eb9a6840e25a249a0961da43", "1e7ea357896f4b3d8bda09feb2f31f0f8a2e1d6d06c7211e75710498a05187d0", "11e3fcbfc526d2a9b3b1744deb57d73b81c9907ee075bb86627d044585e1d9e0"), ("153559c4f54a91a3da6f8267db8de8c429a2ac7f60743b2658e965f184356fe2", "2362fe704e997abed9726f9b5ba98832af7beefa8c6d38e4483dd61d478aabac", "170c7d7e95a81525e6482ad1cda5441f95dbc82521dc0c6d46e95d9afb32d093", "184ad70f83686668b0822141591507f3c7b884ea91a6784b23ccdf825022116e"), ("0a610b0b3bc992595038af87b01c2e10d3a4802b43813be5c69409e5440cb1ea", "2dd7b25a06e7fb87677b29ffe5efd5664c16fa2823a0c99d9a64dd51e48329d0", "060bf0f9eb82f0146d749a1d889ccbadd5ad0a91bef50277cda8239656e23331", "219fce520558573f11e942dc6e94500b21568ebc594725478f4c5ea68f20b037"), ("0df4b3c91bded3df1a96b2bd3fb6273791a13999ab8ff14254d31d1c68f8afff", "2d68f1951cb4c93e11a464e58582bb9ea701da6aa56967315a2952e2a3b977a6", "13938756c206f161ef46934a5d26e37cbb72cca297dc1f66a0a384506a46c3d6", "214ca8b32d76511e67e9086436c6f33e1cdd8a10fa129257ff97f9cc8a77c8e5"), ("1762d1f4f6694f2c7c27a259c236d4d4b5d5510b170d21fa4bbf6ed1fbdb0fd0", "0ce6c4749b212507466ee6f992800ac24d98fbe45630f261e80a29f9df074456", "200ac5286d507cf862df680806edd8f4203da639ca7b03dfc830ee78b4c967e3", "1fbd198b3322d297da679c3cfbe88a9e2d259ece09c1d89df74b8e47061756f0"), ("06cd7f47fc08f90bdbe25bff4d6309c02f03bc7b466ecea09d62d4248807eb84", "14b3e6d7765b724e0665ac3e765be3088275ef6e8ff8b024f3bcc3c784185d8b", "217b5196adab3275bbc50b7203a3ca10e884dd689b402f1f7e94e3b4747204b8", "003898955ecfd5e512390069c28b0fa71f5e98e560aec78a6a355ae6e01d0dca"), ("131d6c61ca738236241a5b2d5ed1707ffd0cff29ad8d5dcebf45cc5a5944ab06", "2540a20118d8b59cb278a45d32f2687d20a6a253ba8ef7d7e91ac27cdf2448e1", "113544b9ff6ffb58cf7c8e9ca765e035c668919fda310bfdbb13686c8b7b8634", "1fc0395fbe9d23e44a8ee7b99c2ba8f35100ced68ce1cb742740155d0ce030f4"), ("084591db3f768ab1883433f371c9292fb90586807e403e0fe10cefb598a0ad02", "21948fd1f55d230758300924bc92d124c86dd34365ccc4f753e98bf8d786072d", "202edd27a71921601babecac7806af00752c6c191ec787781e2a4573e7231a9d", "23e929a82a2d52de1f6e78351b4f6bcd364d7abbaec74d77bd655e088c0bd452"), ("286544a6223fb9659d090df3994a206207784161892cc97469f402bf08260fba", "06920f1b3b360fc3c5dfcf2bd8864e32a24e276b5c9cfa236546b4143473a197", "25161756ff7921a854594cb26da202c3bf558bcba10af2cdfd06705902a662f3", "1a54b20bfb92d5b6f4ddd934a57736e763814de48513e5944bf5a0e57e8d91b2"), ("082edd73d2f55b8efea4b2bd652886a4f8bac00a062de199db20e1277c54623b", "10d089837afc2a38f22f7cd48833e80d3ac4ef8a3a22354715bd37faec7415e0", "246d4b2ca2fd2a8d227e37fd4beea60479bd968b82f9c5abd3182983a0d5b91d", "2f9a0e1c026d04c4a1b99a084e2f9f151030ace0945dbc79e239198ccce9b3c8"), ("0b0ff44b7f5e51deddcff98e1457103c787afab5bfe7674e6a769d29f39df690", "22309d11e5a741830140267c57baeb3ff27c58d26782a530644f4fcd6190e0c4", "152db1fbbde2e691bbe9235d3a7fcff863546d43610ccc692afc9a3af19314f7", "230e11247ddc31b65034355e30688a818496d2f63942e1d1d35179d7193cf9fa"), ("3048a20c2e7391c89f300dcafb1b586c17811e57b8201e9819130122d7171120", "0100382057d0e82655b63b54352d47b0981641fcdfa6bc27abae45828c4bf081", "0c6f156fc122e51710314babe15bf6eecd314b0a888c818a13576157a23563a7", "044693275a626f77a35b7fe0a2f49b0e061815c8434c5ee361adcaa3170ca4a7"), ("1ebdc50d0028fcd6e8ffc2db0edce6cdce9f42dd0ee4cc35866407afcb04333c", "1a35f0afafcbc7a3b01f2a06cde423c62800b7575bb31a25afb34bec8b3329bc", "0e9d9f4bb31611cf1f264187fa4ba549cb66e81a1cef8a1d4b22baa35988484d", "0d3eca91e2ea13e53a43ca511d025ec7a63f0ca72b652452ceffcf4ff481ba96"), ("288a35a5bb3f246a0e3887c40acd4a2b65adef2b69ef37f13061b3996d078fb9", "27599e7003a4b9835e2e321c1aae375e4d3efbf9e0a90545d1f23e284d0aa198", "0bd50dc4c4949d3e02633daf1507f2f8a08cc552283fe2e946c4f31d7bdeac9f", "179e6dcd9bc90642b74aa5f6266e60a33d4ece9b07616f25b768d9786e5064f7"), ("11d449b9d79f95355bd1f98acfff6214a52f5064525d77bd774ffc9016de8f27", "1ede317b205a6e083a07645202fa5b32143ca87bab8dd560ef5f6345d84b6068", "2765e086ee2004eb1a0ff4d494da92c292891c1ea4fd37565130a441610ed725", "1ce15405decef3ee0968e17433190a559afc2e643c24f2d25ec1bf573b7108f8"), ("04f75df8e1e9bc7e05b16c834d3d8949a76cbcfbc3db20d707b74b094722942e", "046735b8ff389ab62a06cf4a6449c5c16b59cfefee1a43da1d8cec53a23c5d89", "085894b387ea48b64e77999ec74a7a849ee5ab25b57f89a30bdb6905ed425eab", "0ac71b9e9179b253434c9bd06b2ed97d7f3f67d72176f0ec26edaf043dfff4cf"), ("20270dfdc1377ffcfef23574e7ed5bf511b94eea6f53967eb5373a93c46a144f", "093354088d0fd8afed114b2870a9a649036efa729a8c537d3ebbd90ec346e9ec", "2886d86b2a433c87da1e15ad3b5dca4add59468cdd285ec363559deff96d482f", "098fc5d5b197c11af008e8a50b1e9a3912a05c8da6a7a5788ca59d4b988c4e68"), ("1ee6033fed055f61f16bdfb6811de9f7fb0b98257298ae2b4eec5cef99d5b2d5", "12281e2b83e9a254578b70e90ad68316b72a46d958c92a319194e4f614fa5302", "16ea7bb59e27a4c62ce65f9a9009fb02eaa7ccc56bd48eba1213386dea162331", "2fcfad49263b2a58701d3051984714af067c3379c327569c866ce4925edb45ad"), ("26195aa92411ec24aea506c57b40bbd56206dec041cc36730239d7d0cfeea8cb", "1af747b248a6c1e0eb5bbf52e9bd06ffbb2dffdb50633889eeb4a49a1602ec88", "1e71e97e7cc7d894eea281106bd3e647b9e6e6f32aa3ec97d8c4076ae9a28e4c", "0ccaf958b806db8bf664e7c2197e2dee3af5ed46b407db10f90e178d0409df12"), ("0d4aa4676ccee5a08c007f13cb7d3bee81039ca105b131d6f77d17094ed50e2b", "13404c66fec0bf4be55496b7592499778553f55c097f2af0d128eed81932569f", "1749b5abe6a7d32bcdca4e1f271f28606e58d9da262586d7baf8862529c0dc6a", "24c938f7529337a1a6adf1a1e9f7940eb0f81f9f6786296cadf7a21edcbfbaaa"), ("2dc3b780c08e8be5242ef74faeb9cbbc3ebfbc32e05c5b31f93ca75a5d2076f8", "2b784b4e3d8733afdba9be34b8faff881c5e55d1bc45e0a9c87397f7254358f1", "00efa92ef65b27143c95dfa41f9830fe59b4b57717fe8257ead89fba35a833d2", "0b4c772732cee6e8038a28ab1d026dff61360095a5fe608c37757be2871387a0"), ("0bbe30389002dd814f18b3dd731e3686342935881630efb24efd07a9acaa6ea9", "08f3a599e2d9ba8084df80ea51bf22a0da1dc04aaf29dac0861c8549e361855c", "2b47e232bd5270223b64da7b15f41555e25a92fe5f37bf333040f79ee5f282bf", "2b7b8f8c199eb939eca68d4b936302eef5ae50e59220b5801b6040eedd1ebfe2"), ("2c67aadacefac6ea9613c5e93862a5be2917ca48760ba1579d845bf60a5328ab", "13ad7b878d86143d1b5f7572336102b227f49aaef4b5af7e7fd99486af2dfbee", "2e15c4f3a2312e041ae8b95fa5a53541ff4e379b6f2249d3d3246c5c5f518493", "286fd44f5be2aaab8ebfffa1086ae63c87fe1f4fa3978a3cea4ab7709270aaea"), ("2b8b6b3522294cf6cd62c2077d36b38f494fb334a0c301c59d4c45bedb4ce0cd", "181d09e88f765493e1341107d6ba37cb550a23154e4f569191b24f7698281e67", "146d7913cec81fe7e92afc15ce7070f30775c4afe2132dd89227f910a4d784a6", "040c07bae6b38997661c6a7d482479a0aeaacdcc9020fea19b368fa8eb20251d"), ("12a21fa15e593d89af433661a0c1d7fa991090274e11d5acc1d4bee053ba2599", "274bb6614bd091a54c122fd1157db1923eacc45c25e5795c47a012672499a71b", "1890be00ef2c20f0530646669555f397f42508cee07cc81ddc2510f88b173f8c", "1a9572d309db2b15af3bd34981b98190237250a8a179003095feeec9343623e2"), ("15aa291f8baa6ea6ae427d35657e0fd0cbcaa5f70dde0f66db6e91fd4411f434", "19d833b17b6a10bbcdeca78ffe526dcd66384076963752423d5d323215591e9e", "06fa4dbf431a112509396c53e51bc4b71f00a6fefeb2aacef816253282a3ecb4", "1cafcbe6b929bb93a3e51640586f721dcfa41036e0bdeae23d9ad157f6e956ef"), ("283f00d17e3b1d282572545ae03e45f2198599f6f288e39d735bcf886bff66c4", "003c985057c0b0556c1693d65942aebd8bac8aa89cb011e3bd6b66521129749a", "232138d8dc775ea35ee2e90e84199b5f3545b69f7c36506243c364d01916c86e", "270dc57b06c411fa0e612d5ccf1ab55df1e5d15d714755a65155a934eb1aa1c0"), ("1c7773749d8863243655e47aeec44f09c2256704912a81546b4f1f64750d8ea6", "127dec00795b07f2df227badbfe7d68d807ffd7c4e9b57e5f97e262661270aa5", "24b77237f735a67c22eaeab354352c7033c72db1795ccd05a02d5fe65fe367d0", "0968b85c25995e2183991ae05349b27e8e81be64f3e816ec804c345f5620c352"), ("07e6e6b47d44a2ad442ab3d9b93e852168ef8fc72edf6ae00615226fc875c17d", "00bbb97621c1f9bffcc46b8bbde41bfd5058bc44ded3c00981c131e555dc6a18", "0ca4bb70259309231dadd43c7831a1d720ad8d2c4d0cc785b1653e95dfe4e358", "04ce2d83c0c89610aeb7dfd93ce170ec63ca4554121d6825751870599366d2de"), ("17eb73a70b97dcaf5441b12b807a2fc6076aadffa5102c126786adb382d1dacb", "0381ab69f1a6255bac99373ea2bb757c721f6ae0ba079875476250ff2608ce4f", "1571734b4e3a6c56e576f5c0e35e4fa99ad75ba91d321e826f7e5b9a42c12d70", "2323954881ab5ac9c8cfa6a42d884944bceca252370862cd7e05a665e94ca026"), ("2dda1d56ea77e63600b5b4806bb0526f4f0728d2b40056019fa5fd23ca271b3b", "2b72a48adba52882289280349ce3bc949cce45e6a8bc1064b7400f69ed7ffb36", "215c7c5efbf1c2543b3d4a3a3a12c526cb5bb5c00858d186eca147e97bcfae29", "1018ccfdb7dddd4f6f28f3193f0f8d7a9875cb97e6b2597f9e87581d0680b79e"), ("03812200a221cee0b6ab9a841c99b1c51f8b3fc9e1a939290475aa22c453b934", "01c8ed3bd48cb59ff09951afc6271278cd7997d22b306d0640f47a473b2a0e53", "2ec636e62fbf3984340e137be4d69c0c07b26edeec2b48fc09efa05ca9fdbf98", "0dfbc061fe79d6b7729ea3c0d25fdda00ff498e6cf33eed9936d7224953681df"), ("18b8e6db0b883a87e8180d2a8a0820521fdec85179226c0674d5b1f898cda5cc", "2cc1dd5463e0171b6c6f66a43d858d61650d7a6c76b3ab3e0ad56b6db312bc6a", "01fe19465775beb8e8080a65800349cdd3201ce31384f5c477f909b9e92e1828", "196730f6151c0aeca963af93ac673fa10f0f86e08285165dc5ae2a20104a3e61"), ("208c8e1759021d7ddd8c524c72862d95235e6e9fc6163c1fbf6ec10a1081e663", "2a6a37e234a5df691655d36eff791b4226268cc0cf898ad274c058bfb41d7900", "2a2ff70f41f918284542e167fbb737d4aba7c688ee25ea6bffe87cc750e7b497", "04deeb736af6f54bd6ee65d996def1a3d551996205ccd49ebfecee02c911687b"), ("1d165181efa5fa761a1a9f8c9e323f1e445ebf50cd5947b7871cc69da7923149", "27cf6c277e329ae9ba0586bde18b0bcd01223d9506765d64e16bd3fa8d5d58f6", "0708ed48c994e21e8f6a132c62326c130767a1d5626877c0e6a6e5c84363e9b6", "23d6683c2097c3d596cb24a1576393dbaabaa236686c27a3b4d4202c02b72901"), ("0ad81be7d6d6b23dc6af6ec92cd61b91633ef9af6a8be533dee22d252f008d52", "3046419c98a6da739f33fa6c6b6e716807557412276ccac41bd1e4a852b71155", "1b75dd3b5996df317965984c3c4967236b4945d5ebbf88e20d5d8e230d7396e1", "280665bdba2c4392ff308be64a237b122d024d48d6cfabed1430f6aa3eb07d06"), ("0d86eab3e46249d43ad68b131bf148534562cab62a7c6094ce74ba8a37e85ab0", "2f354955c45aba36cf4c5a4aefa99d271db091e65f8c193b3379b5acf079b6b7", "038211c4d1ac50c70cdeaf5cff77a0c0c2b171ea655d058f3aadb44ca48a006e", "03e7f3dc7a776ea9dda832e7be759abc5c8f1fc41c3d593683e3a067cda44f07"), ("09d157bb77836fb31d7dcea54e43bf7216a841d7e8ee40ae8de29f8b0eff12f9", "0647d2bcefc9e3ad736e8051bdc14d0b7771912b4a166a9c956189fa976f96a2", "1719ab21cc495725bfa219eec2cf6139fee0d6a67d573a141aa4af22c8e4d7ea", "03671ff84f79ab86cbd94026f7f9ca6f872f92e2383eb4cd7b85ed048925aa01"), ("200d299edd8db12039d736076677add5c0ad1e9745b574dfb906ba3db1765a40", "11efd060f934764cd25c98e3754dcae94a74f8da2af07fcc8dfc32fdfc12dd44", "2918345bd5c11cdc796c7bec42c930af336f29eb7a97b4ca7aa450c98722764d", "13b6ab7071f360ce64affbb89c202a27e6921513ee74dc3e6843389a4b9aee47"), ("05738f3dc9cbb63c4090cee07ec6a055e2103d5f151a22c4901b0e47af67d9a1", "0f693361da3e399ae85f480948435e04c1945e1eaa7653235b02247893ab9502", "268f024583b325993124596de5bd36d1106c8ed9ab334b82ac45d09668b1383e", "17a22d6b427f22e7ab07f6f45a0993b4028e88b855f7cdafddb0a5fee059813b"), ("187e11e15f3e63355b39eed7f1c7c515e6db21fff87c46b96420ec1af35ee942", "0b882d52c04aab6e4c43a21952505cd2b90c8b595e7e7070b6a25d5caf1f5def", "165fb1c601c663a358414ffe16093417ffa07b3ff749d8fda45c2acc48ebb3ff", "27a6c21c28d14425f25e1ff363447633f24608b99aad81d064d594a749b05fda"), ("19a99be203b0b521ac3a975346a0295347a17e1dda964bd77eb07179ae8bffd2", "05e3fa90246ce4a43e77ad6b678a1d0c961c739f51f4c264089e5382ae205399", "07f5cc66cc58afa93e453c3cb9150cfc364696ac2d5a72c8656f52b5e72364d6", "2771c179ad3f4e296f37e3e7c33b80aca57f5ff9e5881d2af7c9917d4c88d78b"), ("104bb9d8eec14ff5394dfb81fd75103ccd79405a23fc6be11ce658b475ea1a91", "0b314c0b986c7fff5ae13c0a1210c2d2729625c14d5278d780e78164904f1ded", "17b8488d828ed1057ad1473aa5000d2dbfa3808ce9bae71d99a6b1c8f1b9aaad", "23f9a58f533b6759e471a628dc5accfcca4ee0c5528762f781bb42ec23b4e7d4"), ("2facdca38c05281756e3f555a1f47188e1dfddc9b7a7b4518b6ab0e858bce668", "29a6fd97a23de6466980139badb906ddc448c63fe70ff94bfe256d766e8de116", "28808c0fa71ea0cf0a2a4c3deccef1f6f44da7a8ff1c4f08af34fa0f6c2225ed", "003cdf7d403e4540ec5cdeaf121f4a7ce14c5be0599444d6a5c35c16b929fe63"), ("2f8f684cbe5967c179a666057f240b4e413826207e2fc3735b488dd556d2d0b5", "032275be02ee40fdf7e3aff7c97568c56c11d52d093a8c3622e8ee3eb6780b44", "022d94ec50d2c32bb7594f26931d47a3cbd21c915a5f65dc2b2d3856a13bb39c", "1a81005592190f29ae0891fa9455e19a3e9be7fe811762ab5964dddc37fca0a0"), ("0c98c2058d64dc250b07aa4d45daa74d0384f68e3752118ddbbfcd42f8a7913e", "08f6efb293ff406acd32207b9d2fb90419c93fb124683fa598cfc81509a84e55", "0294933ad9d238515bfbe2ac4da062ec82ef8a70fce0641bd7bba2c8cce351fa", "2088d739b8f0bc564d4b48ab9e509a71e60dcaef7589a215d38bb06014820a4f"), ("13c3f8d0e3accfc2cd6a27b5ca22671c8c06fb2ecf80159539a6839cbeb25aab", "184658de4a268c50cedc46ab06521fda7f4dbff8f863b125ca08d4bd8dccd89b", "0755896e229badf3f1a5e4b5d2106fe6b7b85b090faa0d670709da2406b6c31a", "0a30c1ce87e4514ca483791f08ea94dddca0007268e6ae358985667143c0d360"), ("18eeded1c9660d6975d185164db6207a2ef8959d84ffff6b54dfc42b393a205a", "204612536aa5ded98bdc28aff185e1c5dd2820b5aab0a0d53ae38a589e0bc066", "28c25670c53f0af1f135428562e2a30b5b197f650ad19f80aa7b7590300bc711", "28a13f628d9eef258b3aff9e49a8c77e445dc44306f04a037d801dc2ee17c910"), ("0ee1430ed30013b85b24cd191e02dcd9a022cf1d9de256d559cf73c567e1dd34", "182c6c40216c879de45c8deff418377dbf9204381b5cd4716ca29e5010a0b432", "112035518938d6936a20b4d3f388ea29a90af8864b874e4e577f324e94890fdf", "2ce7b0f2dd3a2429d81a005d291411f77d5e9d75fb2ca7410da3b7692718f1c9"), ("1682c28ac1792346efad2fca535f1ab00999884672c273bd9044eb3842d999e6", "2a6b39bfa96d74497e83de84ae808a7a86b9f96f81020469ca420a9ab617de4d", "2aa6f9abdf61a468bfcd4605f00e0dfc42a9750be518d74ff283ba109ca70933", "1cbe9e5fc7ae663e544b47ed1ba9003d2265767f92279ec01be54b7a5f6fa1c8"), ("018f4ac7468be911396678227986897eb695ca95d2b1a847cf075c9b56f309a4", "07c3128ff661e392db2e9fc7ddc82eb76d9e2bf7f9e28f8030af50752a027f2c", "0388d68eccb2cbc0b2ac1a810ededc63d1268e0bb98de2f356468c5ea1f62bf1", "0dcda7d9abd027613a81d4120828fa788f8ba0ee2818d3c229c27d8c6efa2072"), ("12550262248fb6988d3f7a9fb78a0bf4d9222f82c9e9eacffa41b455c8ec2f97", "270873ea583182a0d9296f49d411ef8603f4fbabf81ad69b7a4db2a853a4b797", "1124307dc90923ed79c7e8bfb3aec4bd74a11a71649b41a4faadd49e582284e5", "2e0fadfd3f9542b7e22bddad27c319e745e5414df7313ceb79e8fb914161edf0"), ("1b180ec22896eef5aef1bf27cbfe8098b49e2bff2d7bf518e867133ddb107af0", "06fd51beaedee4b9c9fa09843c3611029aeb24e961cffface62514d373c5d58b", "0df60a7e7b9c220bd8d0f34cba5fe5dd6c60d0a92a139e5afb8e5ad266f5a436", "019cbd602bab22453e7ba9d7739187190d9f7321a9385118a1bd2f055df8eef6"), ("03721c6e57bd519b029d99b63d48aa1e4f569eb2f832ad36394cee6bd55062c4", "09865aa56d4cbd46db7f3abe1009fd24d7d2018a29275de25af9cb250276c398", "161043f01749f3344b87ba672417476cdd5cb2e6e89e1ef5619a998c65cb8f7e", "0220b53849d179009518693d1be66299e0e16089949c4c9c5ece56f0f16900d0"), ("1f7c30b454d18c0e837a50395d55bbd4fa4f41835ec2036302ea4e6c214db79e", "285a9e7419c55582d76eaee973f34cf9d8108f93521ea266f0cdccc5c55d5b4b", "06ecec7a85431aee470c32b5ef0d80b28b2656672800a0e5e55b988258920732", "0a2301a2fa19435cc54b429b5864a261b90c73e7ad6285baeac465079fa0f1cc"), ("156be63db7e6d59094fcab003a1e1d3f827e5aadb93f55cf406cb680f4c3b49f", "27c2d8aa6ab300a413891409501703dd28bc490b4cf26db566b7d9c3388d2bac", "1ad22abb5d93445ca7c4e4632fdfd60454d6488a6b2b8eed77a05aae55ec0d32", "1b349b255a8f1bd4062b19514be5f5b8847ad3a0907ed9764f4472f42426275d"), ("30132a81a193209101dc41895b89c890c01f8d6b5586cd5170b3338f48841066", "2ca42723afbcf04c06a02523afc5982994889f77293866e23823109743fc29bc", "23803ef2fe8e951bfa2b7e9c2c2622278b07cb4d7cb75a29e51b890eb1a5771c", "073765b169a4636d658e2cd3a28d8ecfa8f7e7560dfc021fbc47bf977fd8e9e2"), ("25120f108194fd0b89b9923776fba15279abddb3bf6b3ced3a29f3523ed34c26", "1a9825ec451467b5cca6d85c5a1405c023c0e95443273d5ce51854cef414bebe", "2a412c7fe82e1b26ef3f65e0a4b3bb9c4b9358400c6fc30ae578c13b7fb6a257", "153c0fcfd5efa8f1377067aa3f9e6e6dc370b856d170f19b290a013212f8dda6"), ("0b9d8973dc9249d2f5d03b6fce1d9120e1b397a46359dd666f210d993d6ac89c", "20722638ffdb07e5ff3c2b5a206a0d2749a11523fb07c31f776414d25b43ccd1", "1a1076428961416aaab205bab65e33750fe7391a68669e7354c997b67f0d97f4", "2446c694d0bf9e596c01efdbfecb0b84717cc938978e647b49e9bb6aaf84d0d0"), ("05c614d2f28637a1c6fd3e0755157642d04a208a86224bb42008b5ac62847c1b", "1c3c86c32fdebe23d5f4e14469ab7f62d5f557262539e6177f6b9e1c713bf76d", "0e4fc7b275d87d28bf7748269d5a76b36fad37db18ebbe691b36acb4591072c3", "1ac6b6819fe7564d7c44541d618a4bbef513e92a9d63f5a9ffada3f18f90a14d"), ("14a8e52c02f041f0e1791209b160c2c317daee8e5fe9a21a38ab0cdf282482b4", "12fa792cff4354264f02b9c428a97c0caf980d6168cb727de077d5ae2b1128bb", "132333913acec2568a4da296df1eab051822d3753effb2bc0dfdb30c3d47c631", "0d0d8574b6aad6ae8dc9d7ea447b84a1ec942f3425e54efc1e6c008de6a733d9"), ("1bd960bb4a6aff27562f78a850cce05db2597cb94f3846c721d5e0df9abcbf17", "0e8aa7f1a1bc12f64ad0c59a0611b7bc7685692426543a2f475503a80bef28ec", "1c6c0808a5a43e75cc4edecb11f025a722809b14dd7ce71c508cebb7e8d8c845", "0b4964ce82e219ddba0a2166ccbdaf17a7b4910403249c5134b5414584731c9f"), ("19a70ed4fd20381555a3c624363665c9108188176d5a793daa432e6010eac23d", "128def006d1c01590cbc2cef784b60ea56b711b4282b363afb92b41bac0a926e", "1d10d45907e995114d843daa570ef85ee8797baaccd7ec2a8346c990fd448bce", "2d6aa957902d1cdc1eb59be24ddb6d6cf5e339154ccabeb1a5454bac03d0f2ef"), ("0b96c6cef1ebb1b5467fd886b8f4950ddbefe9417433aae2e31adc658362bc55", "0769eeb09eefe663482093a9793d65e4cd45d24b292596705c6e5022faa8fed5", "0cf8f0d30efd0198b8bec45f01c4a750254c5824d19100b835965e879f856be7", "1a8184cb285555a7d2d059335220a6f89d8aaa2039b6c8ec222f21529513f610"), ("0ff05a86bdaabdbf0f1c412882dc6e085f3ca038b7bf63b7fbd9c7788b81e17c", "2b399e598133e01aeac381922d2c3ce374a63a48c47193fe3e9803dfab41a3e3", "1f17bc46b617c87faefbd01dbfd70912926a7a1806dd90804214029c9ade3aa4", "01c333419963c2e5daf81c833b1b84515210f4a9510e56f5d8000b78b417b020"), ("00226dc14b4175ce3d45e9b0125efe7aca791fe867ba218493df1c1bf7706768", "298a2af47a76b8c009b3db300b55cda59bff32bc528acc4b1f70c8182de54149", "1f9e41286e703c962098e8c7eb58b183bf116eb3c4dda9216aee5748ef298658", "190a901fa009bd1263b8be6483a509cd12b61f8a850455fd2ede8e42fe00a306"), ("1d2b8c2a0d48a86526097749bfedf821dfea8268e2147b6d4c3b211eb8caa7eb", "05f12f330efef83cf05b7f2c2191945f205315d163942da088a488ab789f528a", "1d159609a9d884518b47a82726f06f029a0f1bc616943a6471d589010367c1b6", "0ec530e4ce7e804da1917acd6bce878df315a39d7648736bc3ee3269df12e841"), ("111e4740e0a67a30bdca9cee75276f486a31f6567248ad231ad0d032cbfe50a8", "02f2e9f6d8215ae0d43ae260a91e459c9cf89d1ae3fa5a07ebf37c5055b5d8b9", "2de5bb205b94c02fba9462cc3f16546f50345a926816649e54f6e83a581993a1", "2214e010d87e5946e1307658a3dc324b35ad967b254aa1e0124e4835740cd9ef"), ("2dea9d1fb0c3e1d2f3df13fde6a0618f756a6e1a87fef36810a31197393d9c50", "1ecccbb867a341f7a0bb60be69d38e6c4557540b580add506c3dfb79aec1089b", "0b7b1c1b646bff9be7cb8124ac22824ef55a26495657d66245fa35e9a1498f46", "25fd52034240a001108aa81a9fb8303ff5a40b37cdcbc51df4019d7e73ea82e3"), ("101fc64bf588807fadb44c926fb2df37aa1d2c7195332df2fdd9c29d1430d2c1", "1385a362da660b0971d6df027f609cabb625d8940a05a21d39c03fa63182f496", "234a13d83f676465d741b7edaf9271c97e4e2934175037af25293dda560665a8", "0fa6fa9d77b42d54a9565b552c129799b47ee5ab50ec55c9341aa3e9944cb7a5"), ("1b20a426c2a1d61538d8dba2782ed39b1d692965be51a05bf38870be7c61b535", "2d7bfc7c7b7f3c0d43688d24fd10409f430b4afd58c639c1c31c38191d2b40c7", "2fe3bbb902c55e5cb86a51b49ffbbab95530a8d82769e32661846a98fa24ee08", "1e6c99b510c7641e8ed5ade51bd4a24bab8e0c2fddc9e9fe33fc15eab5ec64d4"), ("1ceab0e91d0c23ca5906a458f0ae85e186cacf939be7695b063e9657949d3ce6", "0329f355f5b6ddc068038fe32d6e3a794698057ad8044e2ce9e8d8604ed1e418", "17a2d4dfb04fed6adae1d831e363aeb103d6d50a0effa670cf057f30b1217360", "15f455e479b4b7ba4de195877b427494c6404d5feb20e9c62e0ba50841837f68"), ("0ff156f6213680f9d90bcbd84595b0ab97ca165e2b02f824cdaee01c2a979f4b", "2d5866477767c591b401a0581147a9c39d01b5296d82daf23158bff3d53aed72", "282d020b882c9c39fb8486d935a53c3db3564d22734f6dad1445205068a2d6ac", "0c669fcc15d2c084ecd30fd82a00f87df67521486a2e3a11317200c65a2b9b53"), ("1540a2271d20560e86cb172e77296845a2cdf76c1e0bd688d2f62a82d60651b6", "2bf3961baf7caeb7ea751e63510b3310f432d89af28dc4a2e1d3c355524bc558", "1a0b7e20b58412b09ebffcf271c32fba19c14c9bf002ec8f7d32fcf21a6a9051", "2b6554724f765376526751c8bcb1258234284429eac9118025f1ad8603b4f039"), ("28730d4e82c1f238f4fb278acf4ec45215fc99da3ec4ef63fd4582edd6c195d3", "20b3b0386acd6e92d67f0b161dc03ebaae28091efa194c24c610277b80d159b0", "1481114a3914fa79bb4639123f3464f443b1e98d6793a5c15ebd3a5e077e85bf", "1fa5b73c10f630294b3de431b8db831dcb68b9fbc10f5381e0d8ceaa5a77a3bd"), ("0717f5ccce642a610dc9bc289f8ebd1d0f6845277ddb40c1bc003109080bd51f", "2a0a3f528ca2448c99d5f4c3645dbdede6669556365b20db581d45a03a79d8ec", "201948985558a2d39841f1b0f610e74194b5a1e03d710bfea72cc7debe2c6722", "14160b5d6ed918464558998ebf2277f35023c41c77a897de6df9f6918b01efd4"), ("1e0b1b0a9a55bdffbaf7a56d9260002885db8a3dd4386ecabe8dba689bb29638", "170a91015058ca41958fb398b2ad72ea48ef1fdeacd8c5f89b7c450492ec1f5d", "236740d8b0fe33f982ba500aadd26d0540a55454ba1474fa6e9bb36b2a0776c9", "245365467c5249e850d1f599440c3a5cd36f2540b3ce4bf8c0f2c4c7ff3906c2"), ("11745840536066d163e0d0a8db1ed846a97f223e83d77dea373462661512828f", "17b70076b362fa72e8645c24f699729b699d187b7d2706aabf6d18a71f8bc100", "1ca161e2a1292ef2e2b79d2547170e23b020bc479fd76650caa1e5cd867c0190", "0875880434e5e7f32ec272a446fa13b2b9297bd88493b09a94638d7269d74294"), ("1bf7cb4bf9c24e3e9180ff4ac3a470ca2ab0b03fb6e515a78ce6f0f496664e16", "03bd225ed5611f129e2dbaa0fd093be4f8bcee01eecb2d8a14024a93a6396ec5", "0911196814a182d260acaafd50588d36fded71bafc38aa408cf329c3ad873f00", "0c2891d60612d7908fa466f253f185e5f800862be36ec486185da1d5bbc7796e"), ("2965f7c1babab6e4cc2e0a4dc3fddddb2f0308a7e1cc262bf6a817d8747cf181", "29bc212176757d2fc09df42531c6dd8a293b63bdc609e4993d05fa04134e6bef", "1f2eb6566ada5c8a966fcdd75971c3da02b336f5aab79ce70bac2a271ef0b6eb", "06e60690f25bc121c59ac121fe672ec4d5edb29ae67735a4183657de1732b32e"), ("12a91ed6be8ae4db71cc730c25fe100851413d4bdea062195ff730ac4938901d", "03ee9a156b3277c9361b4b1748127ae0df620259daa4423ae504940f7fabf5ff", "0e470f59adda93f3d81e4c5301db683a3aaf15041eaf143e6b1550afe55d9130", "055086210cffc66d7c6e8ede68a12ba38a9cc99fc9ba84a002ebda7ec0748e66"), ("1d4671e28c2856c638ad6ca882cb3748836f1be158603be6c9f0560b96a344dd", "0c207fcce9cfdb6bcf0751bedcd3496a9e548b9d8311d4a07b62fe768898ab12", "2b6e555671ea6cfeb81b12b32a87f75bcade272dac8de0f66ab299ef8a8e472d", "04c12edd35fe51cef176b36a82a2966b39e8ba2eadf60598557eef4b811f1715"), ("065ff46c6671550d4db3b654f84f51d64226219404ef7bf2fe9362fa938e814c", "0a16b12800272534c570f0bb3379d036106a1e556922801ff629d64ff29b576b", "167645f45464b7c5bb46f4cdd3dcd1522b3b055cbeee2163927e1a14c287452f", "0d0adff499b0bb0cdfeaf21713ea6f25ab7a5c698d2a0bb39f96a78e3ecff8b8"), ("19f31557e6f13973f13d2ca5d714f919dbfa48dc37b9191596ea3995b6debcd5", "2d31b0fd0d022f08219dbc83bd15c162ebfedf5bcad9b1f101130b0907a5b010", "09e83d6e37eda5f96bd6aae63660d98fb2ba8b9b7e8e41c2bed82c38466cdddb", "17dd0bd94b3900c19ab0395f6447e4f3970a36f92a61c513d88621fbc766ad1c"), ("172542ce7109fa19be8b761d9e60ed443dac31ce2b1b7bb4b837dd9a8d7b7bdd", "1a5f9f33010f0aeda74e63edb3e40e930cbd71ecffb9e814510fc82ff0a4b140", "09bf56fe9c9964c9701e3e3a7e54a240511d6ea9f11dc4e2293fe584f1293e43", "1766350a307a0e1d240d45c0940bd23372fd5f7a2568b2a7292834f4ef74e888"), ("2fa005dc9bdf2195bfba3e0c34d2602bf29f3c6bcc02cf1506dbd435255e9869", "0e9b146c8db92531e2ae942de3b304ea743a9198547f9d934a9fdcd6e22518dd", "00f2c21b329a105005125c3b417d89e6f97a70e5da609ae0ca2ba3f24851d28f", "01e0ca794acf2484c704de6bc06176ef33facb3ddbca3e80e91da00e8644133d"), ("25834b9356a09a1fc777eb53f7375a98cb6a2f147533e83da299b95683d61675", "0b049bfdbdf260a206a9a190e7c3bbf5f0b5a6589b57110ceff0653f9d0e5d15", "03ee759bd1d3b1a84e5ada9a12d6403a65e2993139bc0f5aca836f319109cfec", "1b2ebc49ae731a001c74691d05a2e95f270b83d9ab7f49c78aa677c3fb06cde2"), ("0f7459bd6bff15535657f1915651dde81265694deaafb07a1d4200ead9947fb1", "199a6a1c654d302157b5f7a235eea1ee133a365e54c7d2748c72dd92cbcf1a61", "12dc096abe229e6247e26149e9c3c9abb61fa48048e2b18ef5150dd2629d58fb", "13ec203b9fb67a70ef4049f96ac2b357ed58a8baefedf9daa775495e89ae7ae5"), ("0e93aabcb2d92beb610f39c5c36f072fa570d7c8dca7fd578e3e9ade464083b4", "30639140a9534eb7fa16e1c4423892dfac74c0691b019c121958a76180972817", "16e3c384c0697849f00604df6e2874a4a610554e4892eab102763705b5c4eab9", "1b0a10cfe8fe69abcb51d5061fa621bf8bfe87b0baa584f2b239c1a89bee0bfe"), ("18123170188e4a9ec5850781c6b9c27662b469f62c3f333975e8c3b3c49de660", "1a543dc14acab035c0f732fcb32a02df2ded4a0e819121f93c7453ca76843850", "2fb7a9aff774e9765e33f276b6533dd7544af9e7bdc2bfbf69efae6e5cf06882", "168697ae1c331012e9b9a09378f5f1bdf21c290a60dc75f571d7aa9766e1cf00"), ("15f5048d111f9ca84533cd9e8b5da0ff7302333348763a9548217d3296e2229f", "0be4f5af13656edab88aa5d75f5a602a2199306ff9a9e87e943a9129059a45e3", "0ccf1de0954ffc053fcc6ac636ccc526fba5a30740ccd202156454c1db608891", "0081e3744d5243e9697396fbe0817fa5559ba2f2f5b333d484b76505acb0b8dc"), ("0a62d2219d83f1515a5ba4810b982190f8ab8cbcbff84101474c4cf85984cce6", "2f530e5e7b51f32cb9661f7212affd7bb77b7fcbce196917b7eeb73560e628bc", "2056d043b53c79c792dcf81f4098fca7de1f7fd328930f0f19533e8b7854ef28", "0b89aa5e6a196a2d4c4ba2209f23f3ebc1406652aec92f99489f884bb467d662"), ("0fd5aeeb2445a6ccd32e72cb67fda6bd813e2fe4e51ed5f05fa493e59b640ec3", "1a9d6739d106dd57fb5957558849579c0efe7f282760d46e6529f08a989a6fa7", "22f8d7dd7959be4c8f556082dedb923b08282574f3bb86de0b4bd7825e8d2bf2", "09d994ae7f3cc39bfafe2cb5d65fcd53beccae5dc41244a84f8126e8215d64d1"), ("2b9608efd2522b03ec1fafaab1c28e53eee1fa73543fc701ff22e1973aaa6ed2", "1f4b12b78c145fd430992268700fdb06fbbdaae720a6aae229559267ffe80462", "0813af8e537009be75fcc01546f80c8197f3a0e95875eeac0cd687128dce6f60", "1ad22f9f8e42a6672632ee5426d8f007e2f108e41c06abba7b07f575d54c1c89"), ("21f6379ffdc235bd7972a2065a5885c8dfc53c3064c046e0999d2f76d8fa1fbd", "267e013aa54c53fcb1d63edb9cb0ee1d47a893a806f2d75b221deaf452303109", "082e7f382d97aea1974b78cbd8c3904552427415bbaff58098b6672abd5d0ad9", "2105aa08b895871470927ce24e3abd5efbc0b66ad46b5c78557f000f1ae400c6"), ("2b25b7e5c323c24e83cc4f335016d6d35df592c8af24ae623299464f9504a112", "05a8482296432cec133f513c63cfd052b951fbcd95c838907a2abe3b0e7719a8", "0dc5c8cfc794d1b191a2f8100d1f4f0079ea381ff46a58a6395da5ec0623235a", "249c3bdc1681ce57291cf3cd2b4983aae095ec1cdadce9ff3a14ffcd67b702f0"), ("2d6242b6b5fdec8eb8d954acacb5ec9dd16fd3ec283e1a5989b189890dfe0b3b", "13265a09ad34a6d0bf35f7c04b8b96279a1252813f5bc5d6ef52f28f71de6868", "01fff588a814a2b96f368571ed630aaa157628ae87c4b9d2697356f618f3cff6", "00dc7054a654548e6d58d9e404eb3c5822929d45f15ead5c1c3f4683c1b20622"), ("1bb016cc2de9ceff34ac7b37985e20daea80e4165c1fa43b3574c797250483cd", "24d801fd40cdc00c303f5b36ce07784f6b90258cd49b9e74f9057e441a476ce9", "27ff8578674edaa3bab81daf1b64ffa3abf6390c81fce9bf54e473576399da13", "06bff3f74951d488aaa9af7cd9a96c9e8e17a4654e4925b82dd5595e00e73805"), ("01fc04add5e2cb4fd3e444da9182e7c3153382324b354931df27519a71b752b5", "006aa1686d9650b727bdf001317851e8d1b68ca8302cf3fcc6f7f8d5ff529c69", "1e8d23143dcef7655a0fcfaa0740b8761ac1bb157bab039080a0f0530c2479e6", "1d51e18f98883390ca4dff892e38a5ddaefc0681543567e4337d40f7a9d99ac6"), ("28ed68cba2ba9e5629b0c08b834c793f8119e8577de354e487de96c651442fb5", "053a6732ba3cbfe8f2f7db89d9d504746ce66055de505fc4f87da1877dc8163b", "2ba739a4e4c7808c190cdd7a451371e011d2e8a7b941720e57a458b88e9f9617", "11f69ce474c014a57230e3e17725f8c0c28d41b5ff6b3c4c6d86573364a74cf7"), ("19a7c37bcda5e1d3c797d58fe8ee9b8a87c947b94570e9571ccb4c528debe044", "046d7e9d37264db03b23bf553410b4dd13161dfa49378d046031481e1156216f", "235e81ef5ff9d78dc13cb7cc407b7542f831aeebd574e0d3912c84aff0d312ea", "112ae9d4ac73774ce4b13ef439ec9da9c120807200ca8472506cc71507e07ade"), ("070a67d152ff5d6376d425ef727a0b43c8a10a4dce912fbdfb8fa0c5a86a5981", "1b6ac24cb33a6fb552a18a121b1fc1417338beb9841f7eab636258f9a2bbc62a", "0e07351e611d1fc6feeef42ebe2bb4eaa9597fe30e0d8d2cf46110d8a17ba8af", "034675993380698b12563ae1949af553adc95411f445ef676d97beecf9c76803"), ("1106f6c9c9eefc0d336eed4d0d9d7904793b05520b3ba3dbc8cf91711b4111fe", "0eb3ec51ae7aa93a8b1703887bbad3ec6627d5c384fca4475f0c2c293619a099", "061f3003df6adc52d659c31794f410149a6a5852080acc9e10fc77668d1cb944", "2e30eca2718c24b5d105557702d328a6b9bcd7f158bc31dd136e3ee67addcea8"), ("1b665b82914e5b468190edecf121715bf74aa84a482e8f2572cdbce4b95681dc", "1b5695115a5a5f5ade720d3d314738c89feec424b013941630eb81ce36433328", "202cb27132b457315cdbde176e25a598decf663a0d5b948c9a05644ab3b457d8", "083d2fb6c9822ceef05261a75a8696fcfdeb3d3e412f839d8bdb694569c936a4"), ("19d1430bb73e5f6373dfd71d83d07c103b27f748a646828adbdfe49385dc43eb", "305efc852e774a1d52c956cef89c27af8d1304a56ac6eb974cd98768ed80adeb", "18e99b8a6c3e55bcc471605bc9dcf5f502bde795b9fc62d9916026978dfa2c31", "2d89a5b6ec4162e0d6ff5c22506fdf81fd77dced1d72b362bb56e1934c3cfea6"), ("004d6917a7fad0f4d0729a77e05ef60cec7ee4476ffbad94e37b2c34905fb625", "24904ae1271811b4e526e3a2ca6cf5592df25e1ace42a7d06026c1628735bb6e", "0b86d288a1a1438f3e6ba0c89e025a3fa16bbeb27abe601488043373a5703bdd", "2607b62ed25600f4c861b527608ea95e08986e8936e4daf9b0b5df0ea70bf84f"), ("0cd6d54024a3a7f75dd2e41f9c540737a279fc45ef0d44031f29608e17382648", "22ffaecd327f84e9b1dc252d413559d2dcb632a96239393bf584926e4e85cd98", "1f367ba303f2e0bc8f1216d35d6dbe958a7515144e26f6cc38680a6b5728d418", "15836a6912427c04612501c00c8acb160f67481c286aaafd0576f40767984b45"), ("2397bb387e2febe9937fbc5779b270cd52f665cbab164ea229b88175c841ecd3", "168c1729800fb393249df15ca3aad6fb97751f0376d2c95b333c00ea91ae447a", "1d9e72193682a5d619f101c95166b6ecef23f88ad786622fe9c86a759438f58c", "004f0226ace1ee2919ebe4e6ceb2ea08df2150859d59815b643869408ad6030d"), ("1e8130d21efa4f4e733f3c76c9b76a6b3e91cd5241559246a69df2f07a267c05", "20352ac9499f6bb006882828db62b4a161cb92fba5ebdb145675cb9a891c1fd1", "10e94b09059ed714d94a8f5491c3506ffba04f90c87f20747a10a3a9c8ef35db", "08ef99baa66bb61aa4c1ab1f73af27cf7af7e320e0c0bc900d2f375814c682fc"), ("0090372ea0e3d6e9617126dccb6c0b1f1da51dd266a0ac74c4e40aa9843c3b19", "2e02f28855878d9d0794a14a31d50adf4cb4817266b09df637d649fe548890b8", "2f9e190b923c6b96bb434c1eae9d28e8bf503e5774126363544078ada48afa88", "2a3665f4109bb6be3266cd66f237440321b5a48aad873fc22903c8240d6fcf6d"), ("265abc15ec78e187f23a835ee2750a807760f4f0b5bcacbd25a273ea0a5c5398", "0205f8fb6dc6de90fcab322bfc81622b8d29bbfdee259daa8da7c39895a3f8d7", "0ee0472891931ba234f95c6fdfd496e07ef024903934d5ed8364000cc5b4c034", "063c64df2beecab46bf3ee855aaa55db75d8ad8135490ffb708cc901ae156ddf"), ("1bd8121d1be9bc309435fab29c6f8fb8a4de3b229cb49b7cd3005478b1ae28a1", "070aee076d364e9c6a8781d2853cf9bc1f3500e2ac1da2fe162280ace975731e", "12f2c36f46d560a6e941165535449a86335d2c66ecec8626008c82165e98e68a", "0e45f6977e7c79563469e710c4ba47f68a519950d352cde88cc37ae6ff1b5e75"), ("18f3d9b8e688306d3d3d8def6d1238f3c9d97a2762b452ca09071065bc28a951", "1fe4d44a3724ba089d70abb5d4fdb472a012ab3b9df6846cfcac62336ff95d97", "069557257404b026e23bb0e3ce2aa270b8d2e913b8f726114f09d60f72ccbf74", "277a707a213484e6eb635a0688ffae879c9d2f8bbe5d41c231c380f2bd3e2f7f"), ("13fddbda48ef1f45730d0bbdd8708acf24befdc5dffbc212817e4285d7083dc1", "20b780509c5dd5e188b3346799b20a63f0519a2ef6edfc8cf2e93dde3b20baa3", "0e38e12d428e804cfec7d2a9ac09a4d71741385a88c90929249d1b64e97af5a7", "0f2edc19bbeec245e3a9ebe3a69bcedd898d55778863b4289164bdb8c7f7df92"), ("0e43e176111d413c1029de5ab8d8bf6f1f23682fa77fca6419838d123fca0eac", "0e9c2fa602fe776618d64a7b16f77a6e769990bc0498620e3cae69ab91871132", "0379ee976d47f6a5972bb8f2a745032f9ad441e2737c91a111655e2627e78525", "0f19fd16e2ec11f4e7c135a27e3cfeb976ed637d967a68578ef9489f8ba47044"), ("290af5a8468c0f856647ad847a38b271621863d8e895fc312b42233877403557", "1ba35e4d64fecc637878c04a37a724c91dcff323f045e2ad70fbe7d1cc8aa2a3", "10dc19132d5e7b728f8aa68f32c875a5eaf8d98f008d8229741a56f870b9f695", "118e44f5a326d35ef8cd14ea6bbc6575264d40b0360121ac553fcb073ada5c02"), ("0f92ce15b5ffa1ac4c72b92bbb23751130d301acd1128d7629875d20d895cf6c", "2e35eb045c50e38310c5ef90acc473ee4d2926d1fcc5255fa21295104d2974a8", "22226655a29f6957788046208074a3fa0aa101016b3514e564f8d639c978315f", "2a616737b934ba992bbc512caa57a11e919e65d972d433b0b3366af13246f095"), ("0656719932ac0b59e7b549cdd3f605c11d6886b57c247bfbf3812105cf6a11c1", "25bd59bee61fecf0a82fc76b8542b61557e9a0dce30b4b9831a4cbe6ce0f06f6", "08787c0ea8c018285db4665eb585673aeed0fbe7b68759e0fefca8da62f9c7b1", "146ce7f09f3ca339613b769b50bfecc5cb5533631b7da59bfce7c49a46e535b3"), ("2001dba77d32b82a97bacef0cf7684b2740eff689e50e9c43c03835891a8c929", "01cd1ef1c2367bc46d1ce35b38a9b3e0f450eff5bb5edc0c2b0563c0993cda6c", "262aa2e0b55f40bb7cac077fd36b89c7abb6a1ea548d6bf1118b2a0e7f1d528a", "0be7393fe9d126d496e247abf6a7a97baac6c7492db598fb6a94b2c2940e5383"), ("1ebe51b7e2e9bc531e589579b27ee4b5817cd4cf2b365edf0d2d15b11267b44f", "2a49c946e9147a1db66d2bc684554f54f6d3a7932189899d8ed17b40174b6842", "2bb50cffb3fa6db633d5978df90ff77ec457af9ac0eac817636c3fcc111a0693", "090c729cd26badbcbc5ac272a6d464228bc0f789ce067857976b05c9fd325b85"), ("2a51d5130bdeea8aa0aa3f62127928417b017d1c8fae9e2fe6e9cc4d458eb6f9", "22733e1dc42048e5683bb1547ecd51dd6638784788e2fb33c3677613afcfce60", "23ab72750ae2e75eff0dfc9205f2278a69f69949376e9360402e1a317b5f4ed1", "15ec494512e2337c15430c1614ed563d26a7bab9a927b3110110b509543d84dc"), ("0e3a3a085189a3afeb566f3f63e13b6b67ee61561b15d1bfd469df6d39a4d80f", "2fdb89c71e06e4f6bad8b257b45a0c5681b4f94b7021e6a1747319cbf9d3fb5e", "0f79756c0e98bb1bf23135494cfdb250e57baa2a7c8f1072954779c989445b73", "01801335460be2a3e0671c9257debfbe7f182b1bf6b2a4b4d1583161b8343df1"), ("14cd4124f0565f40e94687f271a07569a8a55e73de2aecf64c136ed140ff36c6", "1c984875f9b220f920d8634a2902032eb395b99fa50516268461b7cdf0b20db0", "132e98f20c163daeba4d26d942eafab71667951d1612a7a1d973fa8cb118f0e9", "21ea6fa76451ebc742fa54741eb903ecc8e1ce8612474d7f38e9879078c73cee"), ("15707a9140abe27f52afbd5a3e4e11a88200a778b14a0acad01f6bbc8175f60f", "20d8bc0815bc907efe8f7c22c34bb1290c059b0e358a82240edbdc3813045bf1", "0910f8205be0cf91fb720cbae459fc9280c5546ab4dedf7315491a2cbcf1e620", "23bcc0df1bd792dd78c04c711361203680fdbd14283277dd2d3b413b22bfed82"), ("01aa3d08f7eace1404818c87d2e803743a7e53ea57377976d44f7df78708e544", "290bba183bc53561da0312dcbef98a78ace0abc16c1c47ffcbd6a48f3f59e21c", "1e064a988481eabcb599628e29f215fea6977d339c435e65ef8a23c2b4f22acb", "0843f9a6a68054453517d92a6d4ec9e9fe3093df6e46e53d3bec7671881ade34"), ("1fa013e38866998087f0ed0ee036b6bc7a90207bb62470bf4129c409577d5e16", "13d7cbca02148cad2c8a16436cd96d81158a1289a43bfc5bda51f2318cb36d50", "041e532ed01d9b6b3309afa68660de79aa8632f050c4c5ab3ef5650194cecb52", "1ddb61e65dbc8d179dc4d19ebab015f65064d64d48ba372941f73c1efd39ea21"), ("2563dc33f65b1eb3d7f2afe54700789e065416bc750967cb10a8b695ece25948", "24135999f9265f5889c456cbbfbc8ded74bb0065e85d9470bb41c857dd5e6c97", "03625f73f5e918f6541b964c12ca48b02996d9165380e201a67ca32ef1f79df5", "0df98c1cc0d00389368ee2eee6f39eca10262ebf792147dc75bce0035f191d5e"), ("0403c5b134d5c3effe2c7f91a6a4e8362ae7ff0b4ef9402680056db010c5c6c7", "0aa9a2e58346dca1c1ee204ee5cfefe038bdf6fbc5cda654e2f3ecd8b1b119c1", "0178afcf1b1dcb6390ca31dede5a10665a3e4417113ca8916705b2c02c2c2e68", "09a265378c38c5fe81413ba03db0de60e52ccb325be2897a2bcb656f34bca90d"), ("2bf189232e0e7a9cbedebf4257abbd2bf7c2dd58e86f75a275e80fb45d0de8e4", "01ab232fe2c5d28b6dfc86427fdcaf16cdb00ec30bf258d06b874c3edbcebfe0", "02eea06a2ecdd243398b1cdca75cd09d3ca14a3bff33216fa33a22ca671a25c1", "1da9a4408d9f3595d05a7925b5ab765645117ff9a7699d10343536795888d00e"), ("19f7db8d43118d7cf670a302e3c6c593ac4f66391bfbee2677c83580d00a64d9", "302399a8b067bbe84f4ed11324f78a287affdc0f83de645b77e4a3b906215711", "0dfcf39c44ba41fe11d876bb1a36ad5ee439b6b838c314a6e61a848265d0d381", "2a4d3faafecee8e8f55103839e4e5a2ba211920189133a79fd23450efe874ab6"), ("2f9b32f4e4fa726480757ff9feda56f7cff1483cd6b3ad50b4ae6dbad4e9f1e1", "29827d361564b6df92811599cb2345473a416cbbe339d083d097751c69a73178", "26d30b73d383c59c6cda533e9bd1f73435c88bdbe5c1cc853f5ee0b0bd359ec9", "0ec18e21b1978e05008e5027f5526373926f0146f19c7ee1dfc9fc890427448a"), ("12689b4ed6183a56983f0fd4a388155f591eec095e065f56c566a573440891df", "2ad910d4523c6c320a469d8e6138da8bc950644ffed72048c4a37d163f751601", "233042e1a29c450ee8d5870dac332b5145cd4bcb19b86c6a137a3a47ab2fc273", "03b2a304cf75d2925ab0e62cfafbf777066ea23e992afc0c5f48329024583e7b"), ("0cc81295356b1c402742bc5a1b7ceb52214df87279a65c937918bc18c0f7b500", "1796b8907cc1d1665aa7990e571a4850344497ea11640cb184c3f63dbfbfae5f", "28bfb46b41447eb20f1fa23cae8d89976b7a0790e95dc0309344f47e42706a04", "14877046d623e2549a69281f8465461fd3422f08dfe390c07c0fcd8110d5e895"), ("299b1f65d207ab33f9bc591d9b1715d20de469400d1040705aaea6c69895ad6b", "109233251ad9d847f72d0cd2b18f4d1ffc8ffe5657483a6af2346878298a5736", "2d738fbef6ac25c6826e92f59656f20036c5ff1d63c3fc8685f5eb5869a96625", "02f6d50996cf372f1c3d1690c655acfcc85116dde4c81153ddc87f80cb4f8512"), ("1515fbe4ef168a06315e0bfed75143cec9b7e0e2e082d8d3018a91fa3b70eac2", "27e754407e8dee131a5c64d709b2efce39017a5003785cdc82648e1d4e03d301", "2ab18f2ea0ebb95ee732e4c9b7f13b3a4096380967a80b8eb801cf956af6a8e6", "242e9196ffd884693201a0a41bc2a14f50ec7888c36be129100279c9935aecb8"), ("07aa16210bc107fd6066baf2ed181a96333ee11015bef75d0d5fa86e487773a7", "07203c7ddc74ff8b39afd83833aaf46d5e988d12092ea10eb5fc4931a485c012", "22a7e8a2bbbbd0bd9659f1a18db860149fe83b67d49c41c2b57ea9089f86e01c", "0f3db2a4e300f8d2cbf38a1038db0761fb919fab7eaeee970226525c6ae61510"), ("2136ed54905f7d5002036b062e636d6064b54f7a05b5b0733daeb4197f090b9f", "0db9a54d73ce2562cc788eb5c157d7cd5888425156636498b1ec06d60b4f8415", "04245a8a96d0a272b21ab8008733ffc00b741c014a4112560270bf5079c6f9a5", "068f0a40cb5f4f4422365bbc5f28a3f9c2b5e29af061c48c4a03009855804490"), ("2fd2ef83891467aef08ba992a0e8a3b894dd10af3ac9c05f63fcf137a15cfe47", "2da97716b2f739d072fe662ff740e193bb94b5af564ddb6ebfa565badab942c8", "08d932189fe194a83916fc3d064772167d6d3f58a94d2ff081579c6575fc42d9", "194b8861eb03201838f53d1ed7c75b51927bb249d7c082a19e756b2222e6f60f"), ("1ccdf016c719213f87f3139797ade62167ded428237193cab16d487c562376aa", "17592db0ff1317e29613798d65fd46439476134b7ad3e46d7c74e22fe34fdb2b", "27b1efd65190a194a1b69ce12944af8927755d110a0e03b1481ccd64be494459", "21c216c558396cf3bc2bbc94b45d8d30bebdfe2e731dd8657daafd9d7b9a6ecc"), ("2180522f9946e965c49e989515b007f3a4499344136d4b2d2a7c3c38d128c8e6", "037f8e4dffdb2bdf57830dc73f7d537c6cd615e34d9e94f3d629a0a8e3a5922f", "028338804d217bfd1f166f8cad375cb9d1967362a936fa73eb6e2e6753302b75", "1eb4c4b0e7244c794703f56e963d2db855023c4286d52e994e970ec5d5033c0f"), ("2b844a11050a9dc8d0a353b10c3f16802cbf5e03ed8172e33645860419aa178a", "2d3e4a3d15af68f508b2af6ccced41d7ae0096a1a30b2a2fda15e821e35a4106", "02a2afc50f4b35384b9a37853a975506dd8902e6204c2b54da492df5a1fc74d2", "100902715962ab92d7c876d384e676228d9c19ecc8cf11ec81c49ada54708b19"), ("3005ec16ecf07e84e68139924fd00c4488b6c79f48adc7cc0082a05cc05d9b10", "2e657fc6c93c3f8dafe0e1bc46181f8051e939a0c674fd938fed871f98f3fd92", "1c9b4657df435f1aed41efe13f0aa6349027ec8b0e31509a6794f7780a303b2c", "1a66dadf3df5f57e70bc83f1342d7d98b8a8a6ddfbcc94b51bf866a75df6200e"), ("2b5e7a3060629cf1c8bba33dd0830460f1342fb278b391459db826034f3de4f7", "23dd9db8ef4a012ce70bff7dd23c58ecaf858dada38d5ea66ccd4b1a41db0b43", "04b3aff6470a1062aef99c0320f5dcc3234db4b7ac52d9eb21d36715a6b5ffa0", "2af0ed039a17b2c1ad80804bf5468695aeae2edb351e509ef7d0bc7c958a36d4"), ("17553f79c4ed84c6c7c5bd7f21581e468af1494f55bfdb299c2f73f33aeddd3d", "1690aaac88429c76c8df0160aeca5910de48996affe0f052280dec3b50e8a003", "1f50a4f70b0d83b6a0675297afde4416ea20e20ea9370c11b0c204d020b2a497", "049f7d48207ec3425bd67e8c8fef6994c642cd56b1aa38268f356a967e8164a5"), ("2922099c0dce55140b51bf783e0fdae2e64eada4a0f941b2f7b3ede38ac6d4c6", "0a8eec166c3c9ff4bc9753141b6b4c0c11a39b7093c911acb11ba82837cbf80a", "134c3356ee796edcc84d0249f2e57d6d7e933280dcecdad5eeb720d78b5011d8", "16e1b8f42873e63f26efc86a8433cc7fbee48accee2299151c1e59605e3819e2"), ("1e3382b0f741849c2df745ba9b5574cfddf052345e3a89e71a84a687a6e5f423", "132cbd8cc8ccbffd49e6b33e4d050d414accba5d430a9ca462fb25ee2e0260e7", "08bd3675a45e6941371485603aede917f1304a97a5424c965dc15b0be2ba025c", "12985bfbfcd1de4891d709f20c23688f9a078d0aeef89370dd3f34e987105461"), ("2641bdb14135f55ecf389af599ef69fd5266a365dda3c105d13c7aeffbaf12d0", "04e5a30be858bd595f4888fff8098a6c6f33e01adfb57bddc00df9556ed8aec4", "0404047fe1b2a6dce9d59280f80655cd9d592f43321bb3415f089595bd82d5c4", "05eff96999c19d1a4f6fd232255eba21f26c68572981798ac7bc0c9317ade9df"), ("062b60ca00643ea9fccde3ab5e50a71c56bb4a40c57955c9f87807357720e003", "04683efee8b75773509bf5cba4675e0beb8ee77cf7e34bca61589db32b9022dd", "054364eb892862f98c59f9cc7e907a823431a2ca592dc186a03c82a30f24ea5b", "0435caa665d48011160d28c0a3ed7678680ae10a9e0ceea3f4f86dc4d002882c"), ("026e81b709bd574cba96e6caca320b4c2e9b15fc36fa766cc35d18c61726f2ab", "0a3e3c375155dc9e3155312371988dbe1ae572755895597db1368bf50d188952", "1f7fe7d876a626b6d254ea6c6d86b10d6ce5507efc9526e820ffe13026d7828b", "2bb9545107715a8c2cbaf33b2167fa4897a7a22ef94b2cda33487636348bd753"), ("24c62f68838af1f57c69769b18c78fd7ea220ecc4b68fc5c2cd16c265dcaa4c6", "2d7b0139d86cb8f8e34ad48c95dff709e01726a38a7d545293e33b7aa4258275", "2beefd09d1a6c3837d5d653fe977d4a693b95a490e1a4f0b23fe7178dda97662", "0ec8135b6fb4e594d310780b2bd959b8e22884aca8ef3df7dcfb3f199e90bf63"), ("06846bf6914c175423f9f4258d239f801cbb5018860f5b866a38b00ab4f3d343", "0924cafca3164fc4a72f6bb1909761feb53e03cf8884ac158a2d9e0853e6e739", "2c985a6cd4917fec6a80729293f27a232985a0b7d7aa244274ef2b4b104ac040", "266e40774d4e81e9dbcf2e9d07c2588c5c229b69bf495d7c39d4dae71410badb"), ("08d5ca71a3f19db1a9437f035329a58614133f5e9fb171db8cf34797e6afccee", "1c700eb8650049d82695dc644d1a8e47e68e9718d8bd5323d23c529d2d762634", "1b5ea77f2e0268ecb5d4f10a8b626a85afecca2d95391f83ed6513e6293d1511", "2e71771fc6fcfe8d4344589502caada3f2c355521bdd6cf81cf23f70fb6f6877"), ("00766261ce3f77def4d19c13409f1486f5041ac1d987296f8d966fa3036e01a9", "22e2f50d753140623d3c48f7dcea3b091258bdb71c0ce9e54e44c06c3c973d33", "2d914a02369472170447232bd07ecce1e3e518b665d76edbe68a42505d138859", "0f4562a9840f6a1b4d509f3b4bf18664e92d569314800deeda3b5e857a47e153"), ("254e201c22e4f04e03121d0807cb53b22a28da28726bd091b1c77b5dfbf0518f", "2ab8c614736b2488d2df4192dd90fbb0c98a005e405eea18d0c1c70fb20ba89b", "082ccefca0cc56c949ac58bfca05a5349450ba13593cbbb2d66f7fe00bbc63cd", "0ed0c5dd22ff49f523de9bf13b994860a295a60501f4ebe1ab834dc2759bb803"), ("255ca42a45c1736595353759ab8a21eb5de8733339b539ea5e4ae9b72b73c092", "1270db3210ea07babe6873982fbf937f9d9dc9ac521abaeec24e9abf8e1b8a78", "2fc13deec4717d8b670e23b95c924f6e087116803ab2326647342ebfb715bce5", "0a7cc27380723ab8be610b4e16171adf3763238ae71fd760fef104147a3d4df3"), ("211d570ca68d81b1d5cdb10d5ad6201c8777d9fc0e2be1374d7d335c70899a49", "2a6ea508ceb2ffa60cc97fb03f53cb3f0bdee6f41b03edce3baa733cf61207fc", "16f9af79fa30aef8760369fa4c1acb4c610e4533f332476559c3ae226dea03a0", "1b52498dbf429e664829890756f5fe882016923bcccc81ad7f6355864e11d6d6"), ("11d32cd2cda1da7eb17f6bb65b030675b7c4c346c290fce749255c0fb4b15594", "210b223937a03e3a12f30d05ab7915edb3332e0b974cd28fe3b3f21d28f91d64", "01aeb6508abd6283d65b28a6cfeeb3fbd5039142ed5069f7991f887f2846e800", "2780ea133543e7afc049a673f349d80f43cb8a6f9a0fa634306b616526d7e636"), ("0fe8cc4681b326da4833f662f2e605dcdb0d002d9132807cd8c96414aefc397c", "0997b5c449f3b9e3ac76191469dd256c1cb2e30cdb53968e3d8454ec219fcc9e", "10dcf01ff698b7993e2e3884e61863cfd15b8cd9c629a1ad1b094b8fdb67abac", "0e7d323fc19c15333cc6f88a348e82a046e2068a3e7b5b062afb8fcd01bcebf7"), ("2cc083b9cd654845df2d95327611f3eddc11d20f37578320fa5ef3b8a985169c", "19d866f04636a9b7d66e69b14e84481a02890499203c9d6a5a40e083b962e0c2", "11cc04dc970447211a5903a8752ed4182e23ca39e51beb4d86b65d1982174165", "06295ffd1a763ab47b6eed1e1d9b1184807f590e2008774777e3e1cb80d6ae9b"), ("2b4a97997551ac46e13c8964b900aa64031ae6d284b8354e64459c393b803409", "070990e8493356226dfc0c43999fbc08236f287a7170fc119c78b5829378a76f", "2b8df69f5d0aafab5af4457bbcd2ee1ea7869913e6c6fd2f10261407fcd3109b", "2c93f3c95296c7652ec32d57b9331c642ef1f72d8d642a60699d6fd4626642c0"), ("2868e80319ea537da6d186e9a387f29e9d9d72dce5ae9a7de151221da3a00386", "2867aa545ae45e85b60febc820065bd1d6dcfe991a62483ba085c91dd894c8bf", "2889780e4a1acb0348916bf762ee2325f80952682c9d4bd70a8160a0d4c0fcd6", "1001780f7c652b40610de35b3317c4486a94e1765623ecc43430759d2e3a2540"), ("1bd7ee460b9ad8797a3d46f40894de8ee63ce777a6c141fc900be78a10738c38", "24894af91f02a6584822190a4ba7b04665b773f5a9e61f43061acec9311aa1c9", "17234da2d71efe24344718a850c796379b788e306b9b3ace38c68c51156f5505", "21ed48572d43f6a264ae83ba98901c7256f7fdf54f30dde0f7cf08cbe7724ed8"), ("1ac40d2357331ffbb6fdfc219db8f0c39e023e56b434d6344e0a3fdbe1a8b62d", "235dc18ae0eee97de3ddf549db9d13891342d2e760ca88ac2c7ef1d03ece5055", "222f5e1ba9512e97978293fbd337b6da404b1cc7689078d0f0f188a59cc881c6", "21b4b7132bcd9b45f7a8bbb009789361cbdd7cf49c191da69700718641d037d3"), ("10e9b865065b77927b00c89697cac3000b1bd0f6af7fef01ce71c0bc727eb25e", "23719b483688974a2a1abe6575cc56a71d69bddf29feb02a827fbb45cdfa55b0", "1484f9684d9071b6d43e2897fa5a66b998191983335460de39e6e95ce71094e0", "025cd27f2fc95b873582c5c5c8738d038951ab7b0290ad874fac002600b32f6c"), ("21c223ae25ed4c066d8efa273072b7ba71ed5b7e0f242e8e27780d128b7a3e69", "1fef7e2539857b094cbca461a2be65ad252f600ca4839c917b1fba8be2739904", "17ebb985876ed1612c9905e00d3141fa76bee11b5357696b287b901b2ba53b7e", "1c87cf99b97874115fb1fc0ed1654b483af4c7c3e37232df60774127717dec7d"), ("0c1eb82dc61bc55343c4ad5c0d9251ec9e2d1f5128df9e23bb1bde2dd6021e1e", "152073ecd2ce4a5c71607235143c63dbeaa2ff8c6036812f20a72f65b1160310", "008e994b649a2bd13691cfa4f904f0b9718d7ef8f53a2fd836006b6e48cb2a95", "1ae8ce9ecd73f95d9105d47e0a70c446816f8d613f9b5822970c23bcddbccf95"), ("074878a0650224341c3616a427ff93bec8d21c0ffc01fe0cefa7356bd77ce9bd", "06f1dbcc58fa0fda9d178ce43f0902178a412b2c1ee9ad58eb91327bb1faab24", "259aa3b390077da16f05597a44a47e80de415c7c332ca3c2a89656125fea57c8", "2a0a61e0e550eabe659beb9efacd7c499d6d69559e1f3c3c649815267454e8c2"), ("0eb24638dce1ce3aa1ff89d2da9730557f8712bdbf64b17951dd46121c8b1b21", "1f65de47efa60ddc2004140efe4140c2688aed4ea56ac75bc129d87e7a7f16b1", "2037d0f68581b03e2e6d60a244a0d6d519672b94e223e24ba902291441af88e7", "2a1e2490d923d16cf80b4522d92d08278c8326bfc976483bc68ca3abe97e9d9f"), ("218ba7eaad129e44c3d0a2593e0184f43d0d1a3a7363625bc69b836d4455475b", "2cafbf4d28c273a7901121532412cc94ce0df9a73e9b4ba896d99ae9102c85f5", "26459bb60dca8fca81df1b83d47a1d46883c967be9187ba1481ec1ad71612028", "1ef8f041f359c780dd61d2cf038ca116bf80405e57439d4102d27d8c3c0664da"), ("1b0e7ec35502a01481e2b90ca29a371d2a48f65fcd98bfee71af9f21016f5a5e", "0febc52d34b5499d70ea1d7df4aa274e8069c3dce7733629e8a9afa837cf7265", "2745a64e64d1cfb8313eddfbb1b4654e729ffbe7be2f921129e2aac7e284b863", "024a4e46380e9bfb5eec98c07daa3826208f4836dbb9eb181e326d99499a001b"), ("26910f44b95d2db0327aa261d82b10ed46b4c95a5034a4d7cf8e870205d896a1", "00d3e8445ad8b08448457d1d7306912e2372724159308d1a081d1faa02e964b3", "2bae4aa6b4768bf0683ad2c72e59b375a20cdb258c7368f03d0c18b8fc49223c", "0957eb323a98498f98d8a8ba447b4e658cad80682e4daad336edc44a5462cf2f"), ("0a2eb334079b708bfc7a82c491608b0021ae36925432d9cb6fcc9486a9536881", "0a62e73c831092818ec640b7e363472839a912089348c76b2440ab7947883d3e", "1f630e60a44cf4f5c2b8a2307b381ead18fcc7620573208776beb33fd4b0561f", "1d45840577d18117b5ae2adf2404e530a9961f6ae7f2900653b430ea77ca8779"), ("109fbd936a02c8677ad1abc985be246fd57a455a3ff931f8ebdb8bf0a5e36701", "0452afb40d5d44280e8b951cb7b03a5818a2454871a3d4d3229a1002c4e1af7d", "0e51f4f14ec7104562ca220137ea2fe14a527362506a46efb823985b0b83a5f4", "1166424b3a186a9b1a2ea3fccef9a2f0670f9f998654900a6a3d3c52e0c76d62"), ("0bae9955e43b4c20e051581344b9b202c152bcaa419e90b78aa685c2408c35ae", "09bc4f55d4d2823bd68de3157c12ec8823a62ea5eee85fda571d19ab116a603f", "053eed3756e9d2591e4baa0792d7218ebe7b35ce827bfe32d2e016f121406745", "2b303ee4a165b37e7a8d37c59288bd2bccaad987311d94ff8067e9edaef411b4"), ("060f081ec1f70f41988357a52e2623151759213206154c6aeca1cec729cbf274", "257eb177808c6456d0e78b54b504ef25868c2ae2805b9f62d930060f09634eb2", "084a9e058b9aab89a10ec60ef01cba3e5a60784a77bf3591f99af7ff13a97fcf", "00b2718bc4cf8510e0430359ba50482936a879743905f3b6248ac188ffb58999"), ("28470c0b2770c9f515e5b6ddf439836659a7da71c54d1d38d477336adcd5c6fb", "217ba4c6213940a120bb337426e644089422e2e04deebcc98ff328d86b20e22d", "1200cc6492b9547737f54fc52403f6be82ac6ba3c88f363e1c1f3253d138b895", "305a97c5cfbbbecbb639729d5360cfda3d10183774895923952ff193dbafee2d"), ("086f921aeec40204c6579021579210a808faee7b564f84497ba4e8eb015d31d5", "014bc4ca78fc1eca9d5c66ba271bdc7cc1a1528bc7e8865ba5f67b72735b42ad", "24bcc555b7e6c8b2f418b690a0f257332c8b9d3a06ac502b42fc257951493ec9", "2fa0da0042beecbbd1db0cab6ce3127eb6f68253ac8ae79dd17fff11a5b58004"), ("1f164d776091e1dedbf764b56e6891c4d85867fcc12dbcced4666d22ac0db11c", "145a1c2f93e7079279f3c8d43f195bbc7c2ab7713986b7307630c041d369df18", "129c97667c82b136eb0437cf578bfe4e3db38664f52c386e373a8cdb59136ea3", "2fc6d0df9cc75ee8a5ad6722b79b65cb5b7efc5d52993972b074cecdc7eaf9a4"), ("211f212425d5dd48920a4306957f10bff2b4432bd4922b4ae4d7015cd9aa7f5e", "1e1ab5bfc46203b652f6d3b627f498235ba5a726e467584567d1a7198827c21e", "1e40ba3397d4aeae25ebbefcc6eaa4b0532d8bc8c22e3a18952186a209ccd5d0", "041100f1d29f884b6302b3ff4e08be3bd247ccec23597edc1aae4f7d55adbdfe"), ("2532ffaaa685f5da5cdb414c6a2329360bac4b70013217beeea35a5c2e4e4e07", "2bea260af03c0015bd5a5847fa2c9372a24624955d70faf4b4d8872d79326261", "1162be25906d5e98c74ed9b2656c5d3fe4e3858991f00e7d43d99fae72f30783", "1f40d0775162ace9338176f1b5fc11a442b9d056a2b0e97e91251a055428569b"), ("3040e8b97434ef6a67e09b7e52db13d0089bffe916b991a5ffec2fae02bd4566", "1dfc3fe83d2ef0cf2be51c6374dcdc2809367d655af01aadf0e63015be022b5b", "1d15979b2d72bf45b5cb0efc2a3e56870c6792813bdbe4536005c9dd32f2abaa", "106452b97719a2a2fa7e34c87bab752b0795d71df4263f034c5fb3607564b917"), ("05854f4fef0621c7b79f79cd979327126759e6f64c897a5bdd9a3821624d2598", "2bf58904bdf9a911ed2980471932ae27146e83a7a54d3100055233288f9ad1a2", "2ef895e8b3fdc6e138346427dfead57a50c2105804b732fcc57b670d1615559a", "1156bdb0ca46f3e37d6f4af8768b622ee80af8c59779c38af4b83bd38535d6ad"), ("09cbf5fe80574bbd2d3e4302392a62caa18d620bc93d8478e3fc4aeb36e501ea", "1e568d8f8df97359484f9ffd4c54a333b79d2f9df2c33b79eff96a5d33d05d80", "0d6cbc6e9add04bf91b784b53ab9ff7535bb446dbbd03f1704cea75d5f5860c5", "200e8d14f446a2f0f168e2673fd1910a327f84a17b67c64d2f9db8a19b6fbc4c"), ("0707ae6ab995c8fcc398500709232f528bd0c2f44a9151d0a3c9400cc884f995", "14dedc8b291dbdbfb678f53ec63f3ab5f5b22a4017de3a27b33b1e6e6173c8e0", "1ec8702d8f87f44ffcfa14edaa64f1f98d0a8eb02c4cebc3944cee446cc81f21", "2a0d19cc2a6090b5bddceb96d406815d112b0e4d71a036da712e88cf01a9da97"), ("29c1d6892ffde2747feeb6dde13960448882fadee8c13de229aa06673d2c1abf", "225577334e9c45acf8bcfae673478de916f99856869fb80eabb77ae082462826", "116ab19cd0cc717aa694012660329f6b4b430dbdf9c003eb11c306b1c62f6f6d", "1219321ce5238906c71d1850eebccdfa1da3ec1e9305da99025fe6176ab625fb"), ("0eaad5d65110392440bd1e620f4082d83988fdc1c4c98a9994dc23259f4cafed", "212d74f366dba9964290b764d68581626fc792f1d2a9dafa3af0b2bf3e7c5c56", "23fb295054adfb08abf0c590e95a5635f8dbf11ef71ffeb779f3185f979657a2", "0b8ee1423baa8c76030d3b89c1f64d27f3b7e91a1a0e0aa80277ee11fb5f9367"), ("1ca370199925496777dccc3bd7cf7404203204d97b47dbe7f7e6d0f5310f12cd", "14d81cc191e3579f85c0e3fa8ec6efad25fef06c5292098b70300cf2851bea35", "23f1dca8ae3ad2c8e4699cea86d74929a6b54bbac1e41fa170317513883df89c", "23731008ffe256d70bd10a35448d6ad9448f045c0b671fc03e811fe91328dbe5"), ("1961e8f781ba26fc79bc36506bd0d75f3e27891cb80303efdf4bf275cbc023c0", "0ab276a4f9e4e1ad330dc7800bc359db47d71bee3fee3b3be68c9e8ef27dc8b3", "0c844a0555a5e5ae16bab745fe5753c494cbf265342e0ff36ca6a5d25fb26f60", "162321de3a16a085ccabaa556899067b161653fb6857031a567225d4e0b6f921"), ("0e122d5b6c56a72f35a8c489ad02c0c1963144ef21cfe41250f740966d5d1d68", "1e3acf1c85d24b664d5b24c6747f5e17e4ac9fee543f3577a40ec3ca2d191b2e", "18b385d8492e8b90a8779097c4c27b468b888cca6a8c8c0ab30c23e0761eca60", "25a2cbbac281bfdc915a41ead4c3c2f4172ab53be89e276e8d3785219738338f"), ("1da10e3d3da4d8db4aee65c9367ef7266a03597e03da34a8b1b9a8b0f599aeb3", "284767f16c1698cbcd89befbba04fa716920f316572188780ef9b024a4629117", "1159b6de5e332146db07144947184b0d273f421e4f8321e19b61d3d508e495f8", "069d692a4acd7ed1bb81f9954563d9a16b0dc1c51ab9fb189c1e5fa02fb66072"), ("29d79a2cd8c1fdb074778588ed86110a6802f9b4f3defefbe40743e62484db9c", "2a7ac465218f9973b483801b33706c1b1d94e8257c14fc629f394efd0850eb90", "2ce9c0223b5d59667998090813ca436e7eaba67a29d3f2fdfc2fc75bd83188df", "2d2255718290c435d11772a145b5e50d87925166de540aea54bfa3ae52a6daf3"), ("239abcd2c0174463a6fec8b190f229a3d240479f71dd928b9b9edb6202b51688", "02f019380e8923fc657d1e33f215cf30a36146669aadee374109add23d0e648b", "018987906496b76079478aa895654f9863ddea9213cb1aa875206ca22d15462b", "228f4967e029dbb89593b6d0cc33153dac95f339ba1b0aa450776fc01833c715"), ("0929a7f485609b4f4d3f97667ffd280f49746a2cc0fb97cf9fbc4ca4cced0cf4", "29639561eb04632c0efb95073d7671ade49f5af312077016a2fd12da534e9b6d", "1e4e591452f623f75602b054cdb1598e8e9f69f55e2e73595305f13ecab785c6", "0badb70b922a7095cb4e4ad0d26d9ed7fa3dcd5f9ce195afb85a03f920d5f5df"), ("0ea7fb3aee3602d423ba65746660433c20f073c4868c5e99991c320a6cf7cc2a", "0328e4ac004967457c24e5dd3dc3e1cb44d6454bea6d53ff2e082913d9712140", "23958e7baa74cfd76aa54676d390be2d41ccafe0a5f6006a7a485ee2032b8945", "0ae9d96ee8dd6300000f2d3fddb7576cdac62987e57f270442464236d8f0e6ea"), ("10cab6f38500ad37c10f78b510781c215a94d23230ca5a975ed9444c5a67a9ba", "1baece65afae66a07e84ec92c93874f3b0655b20e0baef7f26debecc562a1be7", "1f22950feae3b7f370a0cec34232df45e8f1d136cb87d033631ad09e5137e761", "08a3f4201b106acfc330e6214238adfafc5e10ee0f56f4234600735ee2047f39"), ("212f6c5b3a49d43ef3692a9f906a2db7fd5cae7c3708e1f8e323eecadd264e0a", "216d25509d5e6214198cd7db4d0830abf26aca9828b2cc2ae9239fb3bbba2b8b", "21f507765902ea8da720b499b4dbbb869763ede6d78813fafaea9c7ad15c3fc8", "01132225f0c678e1aac9dc9a6b1de293ad1d4a70e1662f84432c8efc6439d02b"), ("01ea05456afac648730c6baf5b9d0362920561b3671970805f63dc38695aac5f", "255e8c33176a2c6acc1efa3c95e30a26c4514581b3e5ac7d5c41e3d725a886c6", "124e692df26a8620a4921c80fa484c88f28bc25c41f1424517118916bc786b4b", "27667ef054c65decc187426903e7a4f813ac7c91ec13c8fcbcc53d289cbcaea1"), ("1ddf19571715d747aaf4f9f07ca246d7f26448748e033ce692d08e42ed5e3e22", "0f33aeae0b417f57d798c32ba2776538be5d18c9d5658c3da340394bba4ff8e3", "1c52804d7a10756451d85695703b1b8ee0b3797b0fb8098ff27167d2d7bd52e1", "03927c7907f79d87ad7cc25a3dfdd25205f4d993f781ba066e89e071d7ef69dd"), ("06067fe6bbb3a85f9f5085b94b2f8317f1453a7f481fb4aad0f8de3c712e7ee6", "22cbb539165eb6be1e85914a68a676e83d24c09637e61121a3f3aa059ba3628b", "0da644649c9b34276855af3832fae568e21496c2bf55029cd609693252dc40b5", "05e4a577db8fda1ab847649ca8854fab2d487dbd80200ea26af5d86d20b456ef"), ("235ee8883b6170f3b4ab10bd971b156d15137a271bfb9d8fa72e793f29e3a29b", "2586c9f0b9b28b51981a7d708f418ada2fc9b0bc6b3f3897692b530615df2087", "29ed03f0bbb7c3d0f1edaf001e2c287f1d2c4c8a179f80f1bca3c10b6cbaa721", "2e80c124c9b606e384624ea9c688dc64f9bdf7e1ad9a1bd7673c85ef571ecde2"), ("0cd8fdce17dcad90b239dbae24d7a7bd61c4e7530ecacb7723d2183bdd40d6c0", "1dd29f68487a64fa5e3f4096f75f05e459d734521094b3e219a8b7bdf4590e77", "29843e75cfe99a3e13e24e248ba7bf2f065b17d6a9fcf4b8d3dcf5d22d00dfc0", "019b369e53f65304af0d11dc54ef60a93406957b366565257bcaa45c0d0aee6c"), ("13328c0d3403dd166bb72fee8c9efa9cdda61d54d63cad0fa28fa3d388f2e81a", "2e5ad60c09f424ffda06ebc9301247485c54a3e911f742e49acbfb1b56bac482", "28ff3077e144d6daf2fd3d0739edc4808bcc1e089af88859f795f8e1d99e0e0f", "2077e6804609dbf99682b87b0dc7c45a547edb193c3f0ab00e647a46b2c61fe6"), ("0d14a166853a427657d011f47a2e4579552abb682d652451dd63a72716048a47", "0cd870ecc18c789f70679c6ca5f1f96ac16188c98976df02ec24558ead177faa", "24fd7c641484d3ab6ade14863e313d2b82d2d2615491d4ddcaf0a348bd39d89c", "0593439fcfd1b1390dca12cb50c0da9f8e7084e4f3034f13e3aa5ddde95e007a"), ("1aae788be3511e4597a98330752aa1a71482664777cada8f9b99f54a22c54154", "03c9d417eda3033f4576515c0facf5c9ad16ed8ccd5874c7d426d1222578a166", "219febca71529dab8968f8f9b154b5c4a44d215f46be1171100fff8fc6d098de", "27a1f3485216f9aef57d61370d3a182cdfd3961e79eb267b15403c13a45070be"), ("1e5f1181139cedd27d8a60afc73da6d31162f6df405488855ef370ff86672b1a", "1543d0a2aaf64f31671b1716d77a2702f85fbeda81a2ad5eb32e49837be88176", "03e4ba4ded62675f166dc2e9bf28b6a8e0a71efbf28f218ccc0131bb968dffb8", "0ac874300bc843f75c71487592618d7dccef9b193805b9b995bca26dd9492c1e"), ("0c7b6da6d19baaa86b11537bd0bf6ad698a267037d4b23678ab006f274ac3c15", "0c3d6956d6639209036a451e5138aecd91661d863da88c1fd3cc466afe629dc5", "28549277a4c04cadb72780438d463d492f390f10701f079adbe2f95365ab5b58", "1d2c4fe14e212173c0e5fe29815bce340df69aaa4c7f7d5957e99ba972757755"), ("1b1cfce6e03b11a683a06ded7c80ede2d0fff2289d614b77fe352a9f4dd2fe81", "26eed7deb4d913aa8962498bde02b38ee7c15c2899020c714cf46df268417333", "0c24253df7b4b2bb027baafdfeedf851988b5eca6add8d4de561053cce3f8721", "0d017cf45de619448fabe77760d779756c3f4bb72306ada0b2e34244d3497c31"), ("083d1f9fc3c92b386c78bf9be5735222c659724f844d08baf4e4d82df41e393d", "2d68757d169a0ebe00e6215beac47a6a3ae4a314670c3f380f782eac82c20324", "022724d5194e04555ee527814206ed67b94a81deb4edbf6908bb046ceecfae57", "2867971fd27e92f3d453dcbb22c40e148f70dcd9ce168eafd06dfa468b3a82a5"), ("0916f149ddbb57c64e08382e19f716a6f37b9cf2311e5cdc8ab4007a0682f6a5", "2f4240f43db718a3e5764def592d157927748f41fb71d89eb88e28de4ab859e6", "2e04b209ca36a0295cffb5b4c74f6d5ab7af0b546d8338a2e70710ffd6bb484d", "1c38c15e5fb743a71c687e91afe9d55317cc47b9816194ff63a73037172bf513"), ("0545c54eeadc9cb1ee2141f77c0de52da3d3f2d68277faa1fb55d18d298c7e1a", "07e3dc13039d461c9326429c3aa481a59d4ac17c52b226752bb8bcb0cdb3550c", "17df0159392f9f4d89feb9aec8680f7e086063483a15be43cc9b3b5004e93576", "26cd6424e2fa7f94ffd3d05bf908fc544c9f5ee8e9b37ee991b4edb646f59652"), ("1fb481b14e1b66569326cc437297663072947034e272b9f0361f7fe00fa6b636", "1651272fb9d5c9472fd9e29668fb6119ae9dea3a13208ddd35cd4f0bcb1894e0", "28397a52129f58e6b5a67643813f34a547a2844bca0b46073e86523de57c0fb7", "29935a413ab217b661b74fd2b51de00bd473ed225e3b4952b4ef05bb3f99889a"), ("2604f14bdbb5227cb996cf64f61a225a15174faa0c3e460b35a5e288edf8f580", "05d88a4094fef252e11981961ec98b47b50fbcd655b7f2ea647e085c7da92faf", "00dfc8a3db693e7f52b47e5d29016eeeeb2f83238c410011507fa14efd532a0e", "0a26d57cc687b6939afcd4ff1c38249d541e59d43c8e404b3ea7952bf78f60f7"), ("128d3136fdb6ac3f97bce281d3e47cd197b8f64f3c54a8927d45caa34a9d1a57", "09b277a1c7f0efd7722bde34b9153acdd8b3c3b3c92d89b3ae90dd9f1077f0e8", "08488687b2370826115dc12e26864b93d79a720ca8a9bc1bf73390e007689100", "10fe5bcc765a53171eac0590eec92c11d7ae7e434bfd71bba2a4c26258f22935"), ("195b52a4d1403a567a35c934368f4c7db3c49e6f727b0f5e8ffc54ca70c9679d", "00afb3d1f7347088ff94f34dee2acd0289d84282c96eef3a602d22d3e95c53bd", "232be8dbc590d1e51fbd2cbdf71ed52db7816c256a4fd19677f98704640e8321", "258a4784c78630dea01335610fd5e698dd2c0daba1c3eb0c3863cd9e03457462"), ("2c090eadcfffd8b12e4559de16cb4218443ac2b16cba7737c5d8d2d969a946ab", "184b404c1bb666820cbf094b0676e55cb5b915057c07a11c38fa74a621a6d733", "07fea6c344cf13fd9b0083747ab30a3346231b0295ea4b2ab0e8e0ae54908c69", "02f9be90030b199827251194346160414d46ae84a4fef1ed2ec27431fa102cf3"), ("1a8ced4e7a82a16cb9a9d004e969cfbb514e483231977200d94f3adc25bf03ef", "28d3c1a67b1dd3dc993d81d4ba9758f226d5aef0ad3152583da50e0039ff4355", "22bebd0dec1954e57e0bfe073c94d5c7d5b81e883a6f0962b608d559bcbcc16b", "0a4bae5932f9f5a9f8b339c29c0d4ba52984c01945819882b96ec4169584fe55"), ("2e6da1a7d4f18bb0a82cb6aad940c2aad0856176e2ea6b18ac22f6fc8019d925", "174beb41e205e33587b6ed15f733796ff9635b6bc6aeed6682828bd098f3ba5a", "119378b8f4c30fb0831cbd1f205bed63d4bf24434dc37dcc4027ef679c53ec5f", "26517919b63112a91921dcd98f12d775ed133863e10c78dd4e38530c3c49ab0b"), ("14302db93124ed037aebe7250cbc9aa02e00f9a17fcf2e97126baa7dc28bfd22", "2838b6447913402f48a51016af46e51f3b5cbe120cbb249533e69071f1bc5433", "2fc6d2865b2a6300af201256d825a4323afe54bd67f3987824a7de78e16d3df7", "25852f76a3a115bc2733cf8b0f1753ba546361f3df106e16b9e803ef7b22c83d"), ("16fafaa668ad403eb6faad882b89d643a11b995cd8cc5ecbc3fcb7a359379d8d", "12b3840210184abfb5bdcebb46f72b6223f55018463c51e98ca22936dc874f43", "1f12bd5dcf24455f48c1ac8fc624b1c42f2dd07b24266353f106a0ab004f5052", "237c9878e5c9e200e000d7eefc94d54136e07159171d6971e1ec78a123b7b082"), ("16c75808941564ee6bad2dc44fd24f90b2f0aa4fe2e1e6bde4bb6f80703eb702", "0bc4e33cbca30be5711616763a60d3492cdf5316a114e4830f59d4c6dc01bcd1", "1cf125d810f0c8fb154c7f53cff8e302a0b0ded5738ebf8ee5846f8d34ecb006", "0a546935f7a3f6cf9103641d2fa677d55c4219b169d71022ebc772057d7623f9"), ("20b55ae37ddb4926e7729a665f141ffe9d38e791775d43fe9df6f54e3f9f4bf0", "09793b2b6392ca3e7fe13b80f75a7fc2c7360286befa9b5a465ee2bcc36eed3a", "2126702faf7656b0895b0f9b928a2d8a8fafead4ce591c3abd366200c8c99fbb", "0f8ddf74000d8d784d2db9372a58b5ec8cb8f0894632205c1ce98e5bbffd84a0"), ("0b30193a0f7832667ef5a3ac38c27af1bd94b6563a3c0795e89f40c194d89803", "1520be593b54c10e7be468043d2736cacb2dd7f7fa24660261f9069fffca0447", "02be28dfd48b3f39e15b6cfdd3666408960b108e671a0b340b02cd02acd15f1a", "1392e08dd1ab9d50a53d9488c941538880bf9a208c6ac60f854a08a03e9cf66b"), ("124ffde57f5034a754a981b677015507be3d3f5698b551dcc9df5202d6cc3429", "27a8aa557255c05810899da5d9d85c7af365409b68806ed96673d95fc9108d94", "2d00607543c151889c64f047931a5fa68d341b0f20c305d8e27916793c45c92a", "1dd381cf88017d0fd90ae3c7fc15a19d188f3d0200875010bf1a03643588c19a"), ("054684e44f938806cbe40cd926cd07b7a3fc4632dc6b81b249e31100b25e36f8", "00ed0e283bd5b9d831769253c06c573162460be3301382403800a5e02c2c8cdb", "26ec00990e41368637ece9d9bdbfd948bfdb85ce5a51c48ea8ec771c4cda56c6", "148953c87c9d01a58fb3177930503ebd595176d2a844df0e5487318135408756"), ("1187b44ee2052262e5637a28e9f0507c2a5a88ee0149efcb5ac35cc86ba469ef", "2962a49ad713bd75ed81329f13f111445d0ca9abc2d42d195c00348f291c1ff8", "1983330a810628a99f21c6da92b8fc68afd1b3b8fa6b23dd93d26dae0edea841", "02ad24e967f622ba7223130e1fe4a654bb34fea0b7d35fb2d201c7647ef3115c"), ("3050601279f6974cbb1fa79b477fc2b75012b807f24a490c5366e0b78aff9f0c", "192a868d3867b3d37ccb04673395e1cbd3883dc461903b1b8e5585191ac75180", "1807f501f51508d842483f62820d38d518a44ab3c87f6a15b7fd33661d6d4832", "0a003c18f5b854f554ba79d9c3d63edd350a702ee996411ae82dfac53594bc22"), ("21ec786760d88c94d0aff561a5c613c1d7f823a542c94e80f685c9d27ca653d6", "23885622f87a4493e3a5de238aeb99f40b5ef5627f18291e280bbdf3ba7d18cd", "03fdd259806816351674d23e965cb58286d6593a9acb062eabbb53a93df0a531", "0f438c12859922217b41b60179bb1c6c37f4c651ebbca4f5808434101a21344d"), ("01bd77a056481fbab779a9bcd4982f09eb06c004940bf2e46ca846113fb3009e", "28797b8d47b2df0856cef65571ed177c3762bda2509c568e65b8fbb18e094f73", "0bead7902d63b4389fab6264c2c8292b8fd1353c612003886f9188b284041b05", "16c3830ebf339d91bbf330c06423d63b98d090ee9e296082840d2057f544ac64"), ("13f685ce05d21d7d77b1496c531ea9c5d69fe569d5d02a2e4a471da1b3664d2f", "2527d41b0882955bdd38a2ffde34767be61c178744af7b7428d1e296c0bd3194", "00bbd008873983083e69f3e86c2e3e28457cafa3734e82b0fbd9280122feea34", "136b50cc25322ef37e2d02510af58f693da7dd262d0e0682d26a55cc62cc3838"), ("277cef6dc2f0d69b3cf933af48801a45fb7cdb0d974168866692f1b2d63cb505", "00bf482f352685f3633f0d19da630e335354f4fb0b1ca99b09dfbc10ed8a2670", "0b0198648035b93ef6e69fb8125ae7c107bf42aeff69ceac0830c5d209c42500", "19cd06ff069f1de44a9461902acf52433b7d0e22dda2428ed9f70cec25846e88"), ("2ce40039863e7f9f54772a6951941a167a1cc18ae0e7e54bd8a400427ed545b9", "0a08d8ed4651523664c18129006000592a90b8c3b876cc68a334cab7c994a7d6", "2139dec22ef6af94cc49e0d797ab8f7c1dbad6cec6927cae5faec9f43c6211d9", "0d1a18adfeacc68276597b6989a4a9f8d6bdf53fa18ce331a0a50dddf17a7769"), ("1a5a4be5070d020408a30eb8fcb6e0bf41e6e10dec0a702e5cda937cddf6f172", "10c9cc9af529feccdd01d9ed5506c798c7ab51af7e7aa58ebe37d2070203b44e", "07eb1343be7b1f5032929e878fd157a527d587a50237c0721a52f3afa40f620b", "049ce382bb6b6fc7a168559cb2d53ab59e7d382d2397a1537dc10ab02feb80dd"), ("2b7d93c345e6907cc6c1b3ffb8a44b57f7df5fae2046bd723f6845766555724f", "2c98d8320996cbaf6b53273002337ddc06fa1a4944c1a659b36775dae603fa44", "04889ade50f3e7a27d8520bacd63e9f3f62fbfeeb11f365da0075ebe24b2b40d", "109bfd6920864cd5120b5b8fbc07f73a631f264517ba794e688a6f5f60d73d04"), ("02861aebb36625f49ee783e807b659d0f42ef63c3d5f1476f8a3000a7f73fbda", "19547a4fe081a3ec8eccd2638a1baa314e9c0e6c0ae0891b3a19363e7ff14a3b", "224c4d70588a687b98a14c13a35c93a4af7cc1dff1d5323ae29979ca49ab2bae", "23df496b5eadd7e42138e79e0aa86ad6d65621da1bbdbe3f7f2149d9032f97e1"), ("2ebea355fcca87048e4e896d825bf4d39ac5d4fd51fd2a7269618d7f8dff86fa", "1a38d662fc5d63ac23f9744990376e120cf65fdb27191b5dd3c32292c0123f12", "0a9c337c79c13605a6e4732275fc9bd597a9d2fdf27de7840d29594d21f60d02", "094b5b1cdbe7830504af59dd9579ccc19feb05deabdfe59d85139e053102180e"), ("00503fc573b41071ab05fcfb819f26e3270210221da6136c1f0de62e681df824", "222cb30d1ae2192732cd7e4de7398a210f5eb21d16230b3dcdb156f90455d95b", "2d703af6e8247eaa9eeaf090841e202e43d63f0c7b587dc75cd9c0631891fffa", "24569ca0d52e642d6dec800fbeb891991148e2569ed9e13c23faf08090691013"), ("026535c3314fad688133f318be5c92f4816bc67f6b9fa22a7dbba0a0b7cf39d1", "225af89fd8de6aa0cc91ccdfa6d364093ab53c38975afefa7bc33f6c97fd1b56", "22a2e81ec26f00a03779fdac6996ec03c623e323d07b2f7e515a8e232c8da856", "119c058eca9b76669343f0b33b479474d445572e29475be277720fd587287ce4"), ("0cd4968d34f563b2e0f7246c8c2dab0ff1b7ce31aee5a2a5f4379dc64e574102", "1d4278094f9d6a36a92b816a5bbf8f66916aa6f7cd176ae3aa0d7103b48561a6", "00b0017727ecbbc993fa98fae8fd283dc1c03033b7ad236624451c24102d4a8b", "23ed57a5d6214729cb40391f7d52f51a4f4cdd8dd881290d54fdf93ef6e0b796"), ("0fef5987e0c52b6e8c6a82daa4ba2047c7081d60e934ca40f01962dd2273c7dd", "02d9e6fde5a4884cb59fcb130b55a90aface887a384b118612de7d48030408a8", "231a51780b22f50c84c9b04a466a7d780a84d793c21d7bda2c3fef94ad81ebbc", "0ce63ac3e4ae0692d57319921ed444a10ff5274cb0075dd78b48e8a974db4cda"), ("2aafa376179d76afd4d214282702ca31120463043ca4e23bc94936e4f9c529d1", "19e650dd5f81ee8ace07ffe455746b735d1ba6b1106fb57375ee4933ff2a893f", "1adc24bb5414a32db2942d9bd5a1dbfef52c701dfe15ecb253cca3a5c72e5219", "2c79a340ee122a869db49c7d53be1a22942c1e9b6a26bf8a6db7e7b0be7ceb5e"), ("0b927f76a56f89a5ba4cc53310a7a84158e1ac4c7a017de6ee362163ec465b93", "133866727ba5cbd0f0ae17c7590da1972691a4d9d3d7935b19bd72172bccd3ff", "2dc06f9437c456ace21be7789fb6e865e529d5a3cc07390effc64271c56835cb", "0a80b9390163cfd470bc17aa872a3359fa21daebf66201f3f565c2a16045fef5"), ("02c30466f6172cbc607b5058b7dd5de50f5c432dec7d3202046d095b4e88d60f", "2131c75895a4db8a569b3fed7e8f2bd81128ed1c7fe9ab4baa7b6559b56c4322", "0777712fb82dfd8c32693009688612d185f3df239feeb23df278f51a9969a58d", "2b9ac09bf33d451f38217d10d775b4500e69cc4084183bc4115a5681389d942b"), ("11a6211516aad37080cc5026271b66ba56bee563e8173a9dc46a238188796179", "048564171c77b7cea2c073e3ff099469c907bcc870d781a5c2a013290746a87e", "104f928aad4ca79cfa629c7b833cf18d1707332cd16ea00367d68b2c46928f26", "2ec87c7eb15b0be73068bb8c8e50b35cb20b0b40fd4c0e99006ce27e69c947d0"), ("26b431428c5170b490b6b172f815684169ed02f8b9c16e253e7362dd49df9ea7", "200c23ee3cf60d3f98d680c68a7ba8ce669dd662f61c8ddfd7c4530bd9e5a9bb", "2148a24517d1da59fba5e3832894ecf37f0365d4112f93fc880bd4366184ddbf", "2db27443775b14b47e0fd03089988746ccc394dc98188b8ae6e1bba19c99e9a6"), ("17f77acdf9266a3923c106158f462737bc2e64b48340c5b37132d8d28ffe1ccc", "2b9cec9c0187bfdc3453573cfead7ebdd4555609344624eab0cf14cf94e73ac7", "1f8129a369b22634bec48caf0d1d92b742f47d75a86d0b69c8e20e18f7b7263f", "20481dc72a0ba831b473e13f7dcbdb08351adebf479e406a2da07b890009fcef"), ("01216300d9c2a618cc5f2eea6c6a1670942ff8978d8d3cf2fad9ca89119b2d59", "0d849088e01a2c38c9209b8bdfb924e912a96c440a078361f40950f77ab14f29", "21b796e228ed242c1e385db39b5012df22f52afb99259fff342b0cf5c6f11529", "2779eaa8ae30cd0545d88b5a352e220b310ec52652b9efb9ad4528fe8d8d6347"), ("23a51b5197ae368b61da24023a77e4f9833748eb652c0a73a6b3245de871e8ad", "252050819cee12fd2998b1f0289e3cd9d17fbaf11601656c8ed3c8b45373c898", "24ad2e8595b553bed99b2b5e4aad3c47f71153373f520b6be36908dd1a614e5d", "07ef7474eb1ddb0dbf8d45b4d841c9caad2c5c8c8dff1362f6a993a35e44cc78"), ("0daa3ac37e3614376dc46abc17a6f86a1c7b8d9cd2f6fc3938a11e575e0cfe0c", "2e237067c3dcfa478a67bf3109e430a067abfe9f15a0613131121a4e90a6643a", "01daf239a0b8ec007d7609c4f4d9b08c939e0c593bd65d4ccb4d0e5ff13c3fd4", "15f55085b7dcd9b4d84946d9b94db52f7550f4cc13a4689d14a72487c52e65a3"), ("302f44fc03d8357b26474e11ec7c8396cb6ba56511c5d2a65da12aaffd33533b", "2b840d6b6297e5818dac767e34f44849554f11c6ec672154bce5f2db5e1a4007", "22b2d63a9ffc82401673d04f0b19c50c7f19a9a184690c9cff38c8933cbd9ce1", "25935c8a3868ea3fc769dbd2ef14c65e407d58e33f867ecd37539eb55cb1ac2a"), ("24d0dbc7a3f20f1ada158bb165eb880d9b1c73d05dd33adda05b920d4ac9b996", "08452b7ad052a073870918f5d654f360563d6a80b35365b9a34e530bb78921df", "14657c6c0967e24324c031e79b75d1a51b03a0c2653c930abed096ac5deaf07c", "0b601666274dfa398ec25dc7c9cc5ed4e2ed677cd86ef329070228ef64d08cf1"), ("0aa5fd11e22df31cd7b9a90c86438ae6a44f61c2a5dff4eb4e29b6c6ce42e49f", "07cbc2b9e9866c7b2f3feb65f346ecbdc25258f0a484a17b663110166809565e", "0522f7078e808e79fb2349cab1bf4d6d41864120c5429b192c872969bc6bdff8", "232d727685eddc4c7c7212fb96a09583afda93fd7540ad8654e5930f39a30662"), ("18989d05f2974940f8c9da0e7843c7ef32eb7654bbdcf43600b9df1e93a161f4", "0e82d06baef9aca7fe9775ace994315f09416d9b7426eb72bd47de4cb6dd3793", "10c3ceb6867ba4b85ffa01026a628cdf32977e81770cb18bd31fa4ee1a185a38", "1503bdeaa8ac6fc26b4053500852650a27fba526218eb8d3e4fb29feb9550e1b"), ("29dcc565242bd64d12594283f5b05c3a96db8f6bb4d8fa14a683f7d06e1597f0", "085b7726c228ff299af1546c26daf0d5bda2379bd0e7c51c7bfe84323ff54386", "16878769a518db8656085cc1c5d374244750a9547a24e3028cc47f0fe270efd1", "14819cd619f6a5237e3412c83efe44955766a0cbce33d216c58bc095c9011065"), ("08423664dc067f55e9330995d67f0e7dcda1588dfff174c80a731b52c79b83ba", "05c4713332767c05ca86318990b7ecaa2e102213e4310178738304081c706c58", "13d9b16d361810329f43f3ca141a803e8c010cb011d675fda4134d5a6c209a22", "1a29085bf75d6249e16ade4efe99a2b138a53cb07fe3712dd52220e2fe5958ba"), ("1f2926b42f8f43b1d9027f98cadfb3bca6334efff8b706f236e2651e16bd14d4", "1c17e60f55b442755b0f9a3fffbb52c040614a88fe9cceedc0cac13c39810bb1", "18125e9f730f0f3c4490cf3792055620a651732349923ef435000b3b635c82d6", "2152352b37a85b6e3c394f013f4adf9fa1cb77c8a6f5d6e223c4df9c944fa866"), ("15a5bb87cecf7497d6992ed8ea4b8016f07c92ad3a67cd4fd04e4b358dd5b366", "0dca598c53a0070548c9bfe007b9a4cf7b64d65f955a0dd54b6313186c71947e", "29fe50e959c8822710b0499144f51670fd84ae5ca519ce120e8b5793997c59e2", "0ed615bd9a109d95e3d2d9cf85c49818d5fc3752b5ff9acea84cd776b7acc61c"), ("200d85d6fe3be4a3dbfef25d06dd6ae06c753835941353198bcae5b1037a151c", "2612bc85a933c7e4d05497aa4d700f0e8e4de62f64eca5707621d23ba6dbcdb5", "252f192e5cf6c5a9891df6233198332cc7e393f2086d465be6beb3a579668594", "0c309a61502295a54095c3bf892a6398a9da1c7bcd753757e7cc4eacd9dae072"), ("097606ed36bfe1b2d300fd824d9dca7e9eae76edb59f29e7fc205b880b3099ac", "2b5f9c03e1c17d03a1607e8448129c8e8c88409d086276dc8be461a18570fb13", "0f011b106a5729f320281eadcbbeb4df851ee2cdc020d19d3e3a7fe87ed5fcdd", "1f8587a88cea2f4158fa589b217eaf2864b714239de1a882f245421d425656f9"), ("293de8ce3a0115519f468d19af6c220c0a73acd72125dfc322e6244cb843311f", "30320dca81b271c0cd34d6f25bd60a3cd9faa661ec02347a7c3ec2c858c4b47a", "18efbdc7db899046a2a658678a490ce6c46112436257eb9f16b64d37eaa1a039", "2ea6bc2e54c3b5a1b26fe1cf84123a69554916c0985b15fc28cef88ebb73af1b"), ("22c14617089c3433dd0a12d01377a4106d0d227b386c88fd84995a76fe9b5e97", "00f4c63be9fbed9d287d8723aa359eed349bcabfbefb8f6038de6f9fd6bde89c", "2d425982231e75e3d1f96dcc7e1a38f43340bece4f3de7c6d51c0bcd891f7af5", "0ecc01a156a299d0755da38d55186609f14200ee1006196746d575dd16112eda"), ("0c4b8c2f10804a8444572f0bf6c91b8604bde95ea7982e6bd2c660b630aba144", "1c97fdb26a6076ab5b8be2584e826d291768fabfdcc61e82237c7c091079eb47", "09db628f50d5058998c9637f25dbe2948a2d477a90b3b830e500bfde7dc0d5ac", "0d268429247f7fc342f48b9070e0045a60c583d6cc0fa697fad6460fdce8e0bd"), ("243f13f921f4764e0304f783212726e4c8031ef1d39ca5b692fdb9a7cc3ee0bb", "1b9056546c7e30c57d4a24206eb882d656f3495bd578c939db282265fb104129", "22392abe5ed02fcd669e7a34d371988cb107c4dc411becca15a20f736696b5ec", "2a8005d7604a6f5a505b0a3944d7038f8c1fc3cf196281ebc988d42d2ccd74d3"), ("2d80d06b8f8a8d0f0a0657d3a5e475e6dd04c9f222bae8250c5627150fddb9f9", "255236de3ff537f050a7de01cd42beed702487635026c65ffa396224a3eddaad", "206992028500fc0151cd3bef3aee98d4ab53f95e8165366ae8f46249903cd572", "1c6f0be1a4f9eefb138dc15bf78c58914d5925557d34776d33a79a5ff140f313"), ("281530844e5f95bb82fd58f469bcb5e631a2aeffbc98e419a9487f98fde8c86c", "011d05959149712197223f37709122fc538b42c8027c693bd410e4d7a82852cb", "2d4b52b39d8c78036e214a6b086e61fc5d39b0a9c8990d8725ae2744f23359b3", "026e0416fd2538a0d4a94d0fd004b2f97c2a51e46747e754502b6a9f27f807af"), ("09ad2398c95eee95bbad6f4391233f06b97c99fbfc9182522b25d8ccc8882a26", "1f3ed34937c93fda76d87ed6acc90c5dddb1e348c4eeab53e8399f209b85eb9a", "049a204c76ad9c9cd1eb8470f3a3c6c176239c75f67d2abe2908f4495df7c7ab", "208a5b7957ca2d285dafb464cfa376c8a6c7d40d31088797bb98870bc7d9f4ef"), ("1be23b2d4acc582ab06b1ce47bd7c042da5cef3ae0e9c57d57a38cb264643844", "1f693163e17f1d1fb343f2adb04469436d34bddfb83e20abe7ba33171766415f", "0468ad3abb8db04cad176d9c81187f524521f6a58bfeaf4047e0764abca892ff", "0ddd3e2a265cf19bafa6fe08fb450348f4b31cd23fc1e9a8f5d040ee4bff45db"), ("09232ae3ad5bd6128ac659970858737683cb6b338706de13a9e19f602d210f24", "0c578530e6df15b866a64859a268b8b8d1e46de86b49ea936ae427872b4db2ef", "1dd7c0d1ea4ca6a155f7014ef8b1c76700786ffecc38de783a26ee56fd1e544f", "0b540680ed7f0e8561e504e9bccc596cff70bef4bc08f39351aae66b93b58034"), ("27c0de23e9298806ae974257bacc7d9f43e22000cb4c7ef779c3c21d7a4cc21a", "0062b7d37c25aaf1e9444e474a6041b76239348d5f7adf8eb6d5d10af63ab81a", "10c6e65db2bba633da36652b2e76eb247c5f0b7fc1153624145b9317aab2baf3", "1643f6c18e2a63dbadcc930583e89e609bfb1e0f40f1641a329fca0074b4f3b6"), ("2b7db03042764ae313f74a57b5bf643407ff9ea20b3e134fb927a3cf2083ce7b", "02ef8c07716a04cb62b842195f8a458234ce4465b446ae600cb1ff51345ed9ba", "13bb82b97d6c38d200a320bda7d32dd01bd06dea6f8a25e66d204e9877683c4e", "0577b4bee8f459da1726e7fd9c1d993f2e4b7c8dd463dbc88b7b89b74ca0e33e"), ("0684d712f8b20416b7cf998dee13cf4eff4470629ede2f1522d5e4e0c4e89b89", "18a364e8650c6a657d3dd176bfdc415eca134034c8217d45f47f4e13024dbcc1", "0320eb90ab0726c46c4042b406a9db1ef4b4bb278ffd81e783684a8659a755c2", "19b120ddf8a41edd234707dd6b860350bd37b8a3cb7e0a2d967c713a8a6854da"), ("1a29bf7abc7d9f452e089110f0f33c6d190acabba09dc7a5b2db8e3796f0f152", "23e037520bd078fce0e5a41e2e3a40530e602780b505cc6c04486c56d55c3a75", "0f50d1c616cc7ba8f292a077194dd54ac45e12b99526209a6e42352017efeb87", "1784bf2dd4fb48965956b961da48521f3032383849568ddce78127e8375c6989"), ("0e27ad10b12d4c0755702d4f52ec3f4d5923158f56cebd95b49d90956a953eab", "090dfb0c206831d84574337386a612acd5bc2934b8a251a6dc1fb21f41f2b4e0", "1ca10f00b7728ea8f977a61228efdc62a838e8b01711e9981d8ed94a5c62ecb1", "00759c4935db9f9d380285e90069425a9593a9499301d531f9b605a2ac7eb49d"), ("26be91b1f11720f0875e160631f6735f6f741f05a10ff8337fea5cf6807673cd", "108bc5bfdea062513b3115a74b9a7bd5ff2b2000327345670629b506f1679541", "17196630ba80c4aa23ed467abd76c4a24807e0b007f5f5b92de6a15981e6ce6c", "205b8e4bd0be42e719a0d5fbea8314c92d4ce00c20acf5cf623d272d747e0b83"), ("000abd56f4e9ff2ff6437edfb0a52c830b81ac32a96f544f6c4c62a499475aed", "24b0556eae339440fdbe26c6b28372a30404866ba2bf86e664ae746db7a7ede9", "2a07b035dda5cefdaa1109eba43e85507f91b8870189a203e7ac424e00cda5ce", "2639730e7a6ea638cfd6eb62be3c8d2a536ea08ff33805f095bf2e5e3d543c57"), ("2ed7d5c2b94fb24468f7d840606e6ce71e8b43df32845fa184b072b8143e0bd6", "25321d2b4ca0f71e6dc9b0e1a9a08290e9cf02c3593c60d951b03c3bf5832381", "2299a8b639bc94eb84f728f062ef80d3ff42a656a4a9326d8e766073646adab6", "271be1c66659faff421a251e4134a7ed78d0ec554c9c19547d2bcc88afb1e6cf"), ("100eac127b6458f1a80d9698834b7ffbca401950a3f12004a575747228fe05e6", "2e1024402c648c15ed6a483058301683b71dd05304c381de801c31fc7c179ff0", "16e8bb358d2bfd6e8735537b802d065d18c5951c6e40379f53d90ea7179703b1", "298cc3dd155602d2b4af2d4740e7774a360d2bef3c4a5ed7e6081bb1b096391e"), ("09bf7b7f3f7a6b0fc9cd2c930394192b8bb8d23a93c4889c930b8e28c0f36386", "1015f2f98113e8f6f7b7c485ca5c7082f9a45970e5191d52b92e73bef6cf07ac", "1015b39baa5d985f39e8f3ffb0fbe459e27a3a03c396a03a8773ba315390c02b", "1b6e898b2be76c5e365a7b0e15f385423afc22e892a4130463cb0d74f9638d97"), ("13e54cd01e5c8da268de6cb6f267c2846fec48299382a708f90f498c0abdf7df", "19a5b8a0b284f4ff9b0a86396498ed5ffa2949d7193096eef36cb64aac7a267c", "02d55ac4bd4aa75a9ccd841f95610ff93b1b22962a79bf16c7fa824a58f91cc7", "0d22a9e8bfd5febe06f652a245d21d94b7d0dae57f19a03c0a5d17bd909df215"), ("04ab7b8e57204faf3e5f995569a839113b0e65845e5757574bc260962554ca41", "037e5d0894b5e683c9d2a60d5c26af93033c87bf2670d491d6812b58331d755e", "17f4ca760f0b74ed603f399cc3fcdf2a5a70ba8d44d557bc53231b90c237c5b4", "2273045c70a26e70f0389d30691c4365847fbf849cb771a3a8262ea05aa4dd6c"), ("1a973f99e1e85d394e12117e81594618e17d7923c219f24f99221aa9ae34aa41", "2425bfbc87d167408c1124cf8db65695014fd2940a5535425818cb714bfebf91", "013e669e06f83bd4adfb22adfbffd3281f4e3f2044751a6040fd2b6def903cc9", "1e0a3ad5d7e8f08f20bf38460d30d03aadf698e226ca52c47203e241749c268c"), ("0998ac7461d63e7c3ebcf37f79f71418164330177f56e9f8f0addada1901e7f0", "04cea45376562a247b9c8967149604696a05152a4aa602fc579774ccfb20cf3d", "025df1ccca105960bb2442d23733d215929dd7b6e5a596490e7f249b68519b3f", "2d93e08191e56f578bf728017b4de0a36fb9d8debe5c42df26df21a175612478"), ("04d14d13c8a89ae2c47632e6e5bd0ee30f08ea026e20ca9e62b732a81898dd40", "2f6d6913f212535d222ea85c43d923c16803d77eaa8bdb02622fb2d8624d85a8", "01065afc0d7c19937c062cbca56e61fcb0fd52ad6a71b4a6a1bb6db5320b8ebd", "2016b5b656c5fadb61d8c8606dee918fe94be745376ce39df1b333ab50ad13c7"), ("0a67a99f5b4880aefabea6d2c9cba0212e3db3dcfc25b7a0366b16eefb40161d", "18c88053ba918993ae400cbaf248e529c20bc2373ea5b5261f5ecda8ee534aca", "0b9fc4dcbe76ac6180bd6578e77bf7be3615071f10f7c5df534b652b2084f113", "1bd22eabdb8f08f9bd99a1940454842944484281acaadb484cbca6c870ae9c6b"), ("08f5c0dde15b1367da895ad196947f7f6ea06fb63987f2ac1f30050653fb9ba6", "0b420bc4e2a915df5de267c5dc4b46678367042180146c83048ac9a7414207cc", "01fdd5e29b368509b1f33be21296e48876cd11d34f9dcd89b6b9ec6672e8a7ec", "2e9331d3ab77fbe8fad85e4493007ca88ec3267f2385a539d75e767cd34a1ee3"), ("27e9eec14ace452772a56e4f75058b9c89b6b11073a9fecc4d1bfebfacf822e3", "1d01964495dea39f9cde52f5f408b95849edfcd06e5cd3d482a032079e0ea314", "0c501222df1d5a066a423dde215d06b77247c41c66da30abb73b62d6267eb86c", "215be5a804d7c9dbb132f86df8a774e75223c217c4f01db526f2aa55cfa2112d"), ("0f4a94cc0bdebb28bc9fdad3948b228043784e48640c479d24cc55cdd4430932", "0121429d605d43db8f953702782498818d474a7e4a13cbad798152cbd5f9edad", "294f79b459a997684110b554a468b76e56ff22a1429b4a90bb7e063b155ff793", "28be55efaddf5cb60ad9539ddd732e532d94463f716f4629c7a967c998b6192c"), ("133f00a29ab9cf417aab1344b1e5c936a452bced0002d6dc18f57b6196fb534b", "07fab8fce7560b0edd3c6ed9c44c5e647eb948f852335af1a8533df60fa2f5ab", "23416b6256de9a59733f1e0a7fff7ed8cb4e1345aaa4624cdeee002bdbc7936d", "28d41b284b2a0a69d2976d15846a67c606c1428106007eb1399f5637fb5a8bb6"), ("2f91ce297039014b72339cdbae992c72750a254d7b5b7b727013e8e4698ea007", "2466edf43351f31c4d56947f2ddfb62ed6c812f79e7d909c711d0d4fb163272c", "227b0de5cc92805ba866996fb23626922eb77a5d9b4574e209c289f8a0f30601", "1ff1fcc6841b5bb5999e129a5400609c5467dafbc630d0e85eaacbf82e21891b"), ("07e9f50d493a585e934c08ff33a8ceadbc00b508f809ba73c7cf6ee0c570738b", "04f5c707f1c8fbd01ab8308aa34ba60f15b3d65d494a500b704f6bf3f9901c67", "26072bebdbbe6ae37c91bbc675d26496d117616335ebb2ed4a276a016fda8327", "0050dee54805642306df8680e831f86171bf4cd717dafdf0ae76fe060bb8cbbf"), ("0a3b5bf56e806510aa393a0d2dc5d41939fd2e5dd680f1b43548baa5b42421af", "16fedc55166220bca419f86b4dfdb211aeb15e2c754cb4fc516c07ed4236e2a8", "1a3f569a962739519e521a6fadf1eaca529c6806933ce298daefcdd6e533130a", "1cd4670ca35f0f7a3f18f6eaf43c98c0144f47daf47d1f073ce22110198a4f0d"), ("0638b8f45ddc5e10f9db9ff275ac0d068cd0c4c80e81b899adbbf6dae9560d57", "0037b2ddb180f69ddde5ef94c7a3655279144f2a655ee19b88af5ffc42811716", "280f44bd95c21cae0f6b3a7b53da53e33ea59280e2177e576d1e7913d0ece780", "0c495e138019a2863943eb88f69198bd4e436c5245fcdd5aa845b475e117eb96"), ("1c754612d94bf5bba9a6d34924305ec24b1a14a0de8671c2ae48d9718fa9e0fb", "24f703cba430b7774da23d5f1eede8097889cecf4cee337303fee027c8e694fc", "1ad5a3936cafe1da1e8506f8157a66ca952824a9e998aefc51fa253dc38a6c71", "2200cf27aef77f23081709871b5615486730ceced95d8245ff7969b9d7921cb8"), ("1374d87fb30ae76ed4b2175195f086e7cc322eb1188bc7c6ebd783e43000f969", "1fc01fb2e5a966637e886eaa2c04d9c0b932663623280b76310e70b5e7227ae4", "140b6994e91921cfb53873ba5f1546576a586d3b6465270fedec6bc9631deff5", "1546034ccb1894aa6e8871ad87bcf137368a7c9bfd1cc763f6eee8167b3c497e"), ("1388c5324af62b2abfa687a60a786ae7816f271cf8d0422898133b715d9cc8bf", "1ea0b152831fb555d477bedcc427c8a72c92a7f94e39567c2269aaa9c1682492", "0cdbc50521eabda39adfe65c502896349809947239917056e398b923c174f4ec", "2efc50e50d02839818cd24f999f0e2daf2d9c20570ab0afcb04625582170f956"), ("0b0e80d7f1ddddf48abe361aebc52ccbf81d0b79b64eb536fbf5bfdb0b6f4d02", "02eeb88b7d072fd7f7a6c1b6cee2a32823f0a9947704a25787f44f2f2054e787", "247447a1407328a163df05eb1fda97039fbdfbe0dad4e84885147df839a51230", "0e6d5f85c04a577afd34bca35cc24103a17bbc15228f92b3838458354f355abc"), ("1d7d7a40832422e8083b7552fac016e535126b9b7388173bdd67170fb6674945", "14448958b12faad968fc9a8e37a729f9665426962cb360f3a838b009ca892fd1", "0e5be790c3a6f41047bb919b24c380bfb694293a0078c88ed72f783a81d8518b", "09ff1f00e3b6fff662fa9c96b5903c0b0e19890918cb5e14b6898102cb5a499f"), ("16923ab553f98627be983901b69c4a19f0b395ed8a65698831f7a42269c3d4b9", "114a1b538c4926eb4b39c6177946155de04e73f1e5430920a71cc642269cffec", "084c66e34a8f542e39d2394586ec12c498edcaae9caeff06faa614463246aa0c", "26a7cee878183ef9d98e88e9d4b280f4480f6e5018d5893fea09f6c2942d32d4"), ("1171a7ec3505124ef62b61cccc1d18611b8f112380707e62da24fdfb3c7e203a", "0ab596edc4a5d662f75ed1491a0ff382e88085b300d40d3ae9d26c63747f9cca", "1cd1eaaecabfc459be4406f4bb68a72144d04b30a707491fcb806887daa1ac79", "261e48789e6a5e4d3480de3ba5ccabefeece6bd5fafdf091650f5185be720ac5"), ("291fdadf54169eee0839878b04320c706c07d8fceb6b0eba9b708eddc36e60ce", "2172122589d5205efd2a2e618007dd9fe54eb6deeec72846c6016b3a3c1d0c09", "175bdc70b398469d1aa48d3ff104fc3e5b67b76642b4f77ac1dbcab138a703ae", "0ba23982b789963d7895f10390f743754341458cbaf03d7b14f7954f5443bedb"), ("089078f34cbb0e1a1d0719cde72f601650f8b1913eeee4f3788cf0d5ab396294", "2c309cc23a60936435816e5bcff2cfffcdcf1be1eaaec4c7c66ab6c7fd8410f4", "059efee3a07d6039e5b18a43af3a5378e9d8cd0af00a8b39fb999488266c6881", "01a98d756665304a68e254f2c43cd9f42b99026bf952ecfd7469ece950cb4a62"), ("135d95518982fe12c8290d57b4ee0a3c0591e75f096049ae9fb953e13d5c0878", "0ca2f5f607d960cc8175ca2afcc492fd40f6a45e35c4a14165f4525a2f54ce48", "0b7c7af403977ce216c0a6afa40dfd14030f35bb7f04c7c678f79a6ff90335ba", "00aaf44da71aa209a16dfc75620944db6f000f4cdcd60eea9612ca94ca75cefe"), ("1959c9310fc662ecdea228cba6831758e15ef8e38f8bfd3cc68f8d76db4b384e", "28055e47900bf47fdff14c8ffc0a038acb47f41429fc42f5390cdcc35deca992", "075d4cd7768294bac13bb19e22fd62e65a879f0b1a85040af722b5a1d9bbedf3", "1376404e3f063819f7211d31e285a831fc695c0219797253b6cf69a8458735fd"), ("2d15a42b686f4e4ce2bd029125b2728381887def35f7a328494a5f08d717997c", "1102bbf8a6c9953d507f692d6aef7923db8fdee286ec56c435d8b576cb979fa0", "0b610bde495470a6f65297c3d9d9e5a71aa85450bd143a9c2c7ca32b23a32571", "0bea713a9b29d99c7f310d6e4d02c4c1f689c9befa6876a285f6deb7742319a0"), ("03e816865d22eaedec9f9d1578f1271e13a1f17cb70f925241d81219fe30bf90", "29b1a2c3a9b8e3259025462696862d0fc397df7d1b77383701f5ee0d79bd5e49", "0529edec541072664e606d31626e2791d69d4bc528c50f4b1b823e0f10322294", "022d3a01c6fa7c38f6a834410ddeca2f16c73a5235846ce0d65718853f5d6270"), ("2aff1f0755f00076990e1878fd5a346d09732ec457b49e1f3b67a7dec467c203", "2de79b3aa3a361b2478fb3fddb49710bb40c90503fbc8a90f9aa8e6f6f269dc8", "10110312e1a5a6b52842867fb98c564714ebbc99fbb39b870fba13eeecd7a80d", "223b5c556786c5a9faf93cce9b6f300cb01ad4ad2e4e69fab88456857687125d"), ("1c24b54a306d6388a0422deae47bea9f20727569ae4e3e29144fa2177c3c6fc5", "0352110d56e20d73451ab554cac5e937a825dfdeacd331173eef5b9253934a69", "0e0e665feea0b14e6e599253fb53370064ff51a5137a06c558f9f40d443a497f", "07e621e6dfdf78c2a566c3eabab96981a6313d4c043e088049dbb69d69f5d64c"), ("2ea7f1b838444e8b5d84fc8913e576e384c43f9e1be4956e4484f0b14d00a087", "1e1891cfe3349b535d66ae116d4a4885392f5215e87fc8b3e28ddf9d6f45faf1", "1b3b6bd0294d3e945b4fa4c0feb3e4fa8a1079b3792e9dbb7f1978d85ae16fc8", "053cabad4b16a36a56575ac6f46180f88657cde38896aa68f6baf089fdc8e5f8"), ("01f5336d0c24f62b70856ff928ffb55b8e0fa3df031367312f27c0bf450761f5", "2724569e9e12ce98ee4e933a0bb82435e808f9d65e50327c87f8ed6093e89462", "1961c18e22ad4929bcb3a8a16e5720094c386f5e80da345e87a38260168b82f1", "2a84321e2bf3aa8f0e0c4e9d2b450779002454b269e6d74281eb72e48190e190"), ("0ab15a296368e5f5b4ac1b6c867dfc219934989f3b028518af30c1d6899fa310", "047d24346ea35e788cc8849eb1fb34c8fc8a8abde45faf5fc35518d620de9309", "0ab98c084967635131bf4a6cbc908299bb7891363ba050f2c6495222cb1f6008", "2b57e492835a1fc34130ad3c202f1ac4b60f018902a596bc0e26eeea9357f0e9"), ("0e70937dd6ef9e7ec3a1395e9b2a3ab1e1300a2f28d45f29452e79ef846a2696", "000b278fb6c766ccd02cf44152b6418f23a663c211c3e9dc099571bdbeaafec0", "1c126d53ec3858bf9e103ff57bbeab4e54b7445807e36178a9e2442219ee169f", "219ef5c538b2c572c295f3efe23348aa4d9508a60021e5835c812227e9208030"), ("2246d591bd77787b11ac808bb152f7264be2fcad8fd893c700f7b33abde34522", "2b7ad5147a17bd204258c8ad09961c57bf7347b2a8ec34466a5c9f0b7d73f773", "2b5d79f0fb8d9d8201acd73b2521ff5f47b1106f01a0a113c761258a4b3b583f", "0ef3378ee7def58fd98051a501b4cdb7768094103953849b0a68e59262c5dcae"), ("09d5280a8c57d103f6ff4a6a7eb2ad415b5866e1ec60b8b04e1e692449c2812b", "17578ff56a11d39e0b589cbc2f78578ad58496d0f0ca65c1b2f4d912c15a7b29", "1af157af4c2ba76358328b97a5d9c10285de769839e8d92be03ead28fedcabd6", "13defe03eebe9914f27055645c5039543185bed3ec165d6640635922672456bf"), ("2f97dd63d238588c151a2b87ac88a94748c0884c251e38931fbcd116a628db10", "24fea17bf305c72e98496d094a4e8c05c743e9a0208300f706cc1187feba9b87", "1f633582f6f79f74c0fcd1c00df8c771328220399a304c631830ec20dfbfb0c1", "0eb4707c849ba56353585c23b2f663306dafdc1293525fd63c0afa87c8e3d134"), ("028be8fd1b571b0be86d1b96970e86ea33dbfbe40c66572a66c0d91d613ee444", "2e5deb4732c8e643d17a7f2874461a433ba0e0dc5c16de1ba35a8be59e9e09dd", "11dcc33468ad66d0a29abff7876b52cac1d19ade07f1b3305ea1c9fc73211d64", "07ea50fcfa35a18d1b3730570d755c41551267c8218f00e3da35bf5748027c3a"), ("18ec7bceb83d944f5c630451d54c7624f081cb6af25e1e95ad3d95db396313c8", "192967c6834b4b2f70284a8bf71aab4b50dadc15f410f15b6853cc2b210074ba", "3054cb77acace4e98870a4a273c033c9b48a842f0921cd9f5638dd9b86aaf128", "040dd8f31b5ece6f185d77e0c78d9efac4202788102c3fb7c079834df027f726"), ("0693d1f42cddcec87fc767d6d314e0c22638b5adcccc72136e2373cbe26c4894", "210f0f884600d0607aaf35d6a6307c747972accfdf075c7e246c71d28b070f4e", "11c99c7c6d497e8b7e84c5fc297751c3bb14d41c16d70e0d7083450dbd2f7cd0", "1db0ee17dbd0e299a966e3d11a77972c6623b5c6d65c8c73839c3bf61e9d8bf5"), ("0ca557e1b823e3697de809dc3f2a45df1cc8f9f0de13d933eccb0319a894ddd6", "199bd36233ba8aa9d2eb6a37927f376ef41dc6d9218eaf5bfcb822b09c9c5745", "28430a7f0c0063542949880e823e7b134c5391478a1a2cd5654af6bf5cc59a5c", "29047f555763f7fcade09cb11a9c9155421a4df99c28a43e50887f222d626adc"), ("2bfefd7deb9e9a382f14f12c77cff60767aad71ff2e010e53e971121a4fdad8e", "0306a0aa031e931e626472a661579f1c68d3fdd7a43f735d25da360f09619cbf", "1c7249504aab14a7e0ca272f6ad05e3b2616db97947963131057960457d988e4", "0ded726b6135f23d616c77c0b5ed724fdd33790cd5566c0dfab8912eae4f01b4"), ("12d3373b5aaa2b070fef4bbc02018867afc1363d3e36ea10bcfa9fe7db57ba2d", "06430e6114f1a23e88ed02a3c698fd4bfd051962b69b6548caf34cd271316af5", "150d66a5c472cbda5e02af52b2294cca5b796e6aa3ec544c2c26ce5236534f36", "021cbb67d6137cbe0dd21d2c817e25b90b804384921b43eff93a581ceb29815c"), ("0d80f2df8c7808a8329d874b9846d00f96b33800603bc0bfd3a8f3c1fa4f701a", "27221125aeed3d6d24681236ed3f9c89d0bdf6e6273d3bacd787db6ba852bc0d", "06252e065a18eb40fb3b41f9cef700259de5b5aa6125a25d11e6414005d32bb0", "09ff4edc20a584dd1e6dcd82c5c21d40762aec7127c9b2fcc274c6084546ca47"), ("23b6b1de7dcd0f3553df1fddc91017c531ba46813a452434bdfc55a64b24982d", "04abfecf2c4e04a2a9c7a0a120d43356d124b1266bc21af9be8cb11cfeed992b", "2e46198efe7849f800a0fe37ee1b0e19cc1bf747df13e261bd0e29eeda7ea661", "0beb57dd500ad44a6d7fd79894c8841d17b0297a6aa9ddd967e98276c881a113"), ("0990c6c20c0c61d84fa17e833305878f209af68b4eb2a818016a6313b29923e2", "2d0371029dbfb871eb6bc059bd94c93ba5dd2b5c4c80cabe87bcda24519f72f6", "2c6a9db3641dcf006a216c92718d67982a5089954664460f3b9f526159aacb17", "276ba30765c3504b92b763b476e6d24ac099ffbc364475c12ce71e7997fb32f4"), ("1ed9f1157ea46d6ba0b609d39cda6dbd55433d93f962a0896a86acf1c0a1b616", "187f1c0153ab91c1b3fadf4f037d85a5351835fc19e5d317c098de6e4b99b550", "19fc9798bb23379cac8d3dae07d46da716d747052bd3ffb6381f294d890df58e", "0692d55444b1a31100d9e949242da49606e3d055bfc5cfa559c3febee0ca29ca"), ("2899c67bd2e30c946f0147f58a5bb88519aa49f3c179bf086ddf551bbb7caeac", "2869d9d18dacbd5c2779a60f070249426bf645f48ccb752bc551cb7b83c8115c", "00e5c80e58421681a58e55189fcea178bd6783ae2c70205f17c5a00bdcc11cab", "0299139addefa4da38df87ec22cf37f5ef0c0c4ced34d30a89c2b5b359c8075c"), ("02ed733a41c08869cdf7a33a2e5afdb9910d696bb591d2bc38c0fa29d288cca2", "0ce64d0d4f38e52b5108318b77980a89172ac2fa3af1492e95b26caee59c209f", "229f6f667731245340b101aac1cad85d5dc8e4925f27d622b780bd9b5b5aea5e", "285d1aac6683e038364b582d8867ab21675b19b0d991cc83fd9e4d2ec17d9d02"), ("1a0083f554c8e5973a83cbc22197bc44e808231556b03c595b9b4be8bc699bbc", "06fa4ca02c79b553cc046f62644dfb7e88efccd7321639628be9fb6c3c7db37e", "0d3eb5c245b1398e28a9989248eb2034525d8760245d4957e4a9c00d7e5e6887", "1d6616c0d3c3f39999b0afec1c35d4505a7bd2a112eddcb4fb028b786cd07e18"), ("2d75fe18b43528512f67b8bf11b7960c844fb96a8f93b6cc71053ce6a97832d8", "231914bd24f6e06588dcc7789eab22c1bf9975008111385ce827a4b92e0f8d4d", "2ea80da8c1c190e0442eb44e194b62a25bfb76db05681fb6314b8aa364f0654a", "25c70c34ba536cf3c97aa002c81b63387bba129e2a6adbd53e659d66bde18b78"), ("10730c6eedd03961c7aaad7d4727654a0229e64ad1d0f2345f4538b4a1df2d1b", "27444deb75bbe101dfebb824cb9d9da98568cdd78c7e58403ed188037f1d0749", "28986cae8c35e23d24beab3f8eaf58d0922ee82990325539fb82cd7ec4124359", "0addfd69580a615b7ef1cfd22575b0c1cbd53f2ab0697d977c6fd137fd18bc30"), ("018f64170976c76aad196e85c4b173b3ba4f3f0ca8829555e9b1b61d41a06c30", "21c54e55c05532ff8caa19bbb9edb6180eb774bbe77aa4cb08c714b00899961f", "0fe093cedc09ef4784b00b0945481709756af315cd652254142ab5ed4f5fdf67", "1cbd4127cb0a49d828714386f05dbb2fffef349e91f30ef728953af0667edf05"), ("1457bc9ddac688f3711627cdecb1ad180f6db99398013dd9663eb213c01ff496", "15f424ab7676c1bddae971c338859bdfa85b4ef1acb28687e4f089ee672ff866", "21de6fe0569589b91d53f0aa38648a1a123bbe139d2f6c6a4ea2e9a3ac95458b", "011c095f0eaa860baf65d3959b06e843842cd7466d0090fab479c8e76c8a771f"), ("0def0aa345efe42f23f8904a432d3a35828a57cbff76e51b6e5986d634e80347", "2c42b2494d5b3be2fa34637e927acceda0d2ba2f68d997d372cb755356effd6d", "27ddd1e80c07c2894e16a816cdb9c4f0c63f8d940ff139bc933193a7f7657311", "197d99a928f6d0a3b43e730067ba57d42a499f16653ef6da3e6bb6159db8abe5"), ("0db17144b2722ae5ca10aca038175c5bba7365ef7ec933c228dc706a4cf074d6", "03e4d48ab9aff17b703db505daa17f5445b2acc5c24fdc70df4d5de6f33a9b27", "05fdf8f6a6804f53f0d6e3174ca4feac942d1400c35270efa846355321e605a3", "2756dbc423edc9294e5efd29b7dec871e25cb818a575e2581dda825b87921430"), ("29e6c5d602f0000387d40ba451a179ca0654eeed7bee94cc2f414a393da178db", "154aff0c2ca1108ba674000561f47409ba14198acf62eff7c2f8f365a9b051bc", "285557d07cde5dc6483e4ecd3cdff4ff94148ca748d88c611499a8c8fba951bd", "0de2765a5b02bc4416337493939a8239199bdb38a212db902edbdff219a5d337"), ("0c943e1dcfb448828acf3f6bcb0812a02ad3d09783c7415fdfd5c65b1ebd12df", "0adf45713f045b51ad2b612df22d5b9832667c24b8c0c5c14108087b9fee4f1a", "1c994655fc9b29ffaffe0b2b3d5358583e20c5d430ea1cad17c9e3abd11ccc76", "0ef4b99f2ab5e9cb9f3f2870fa814ff7a3a7710bbc4967058983b942f64705d9"), ("04d367ef37ada86240420f4a060a682896f8fe0e4038e8af14512c570ec9a851", "292683502e1e879ffcfc894c3970ac9471c7fe40a4061f9148a986652319e547", "00d0b18de260245ab0e608bf157987e927bc6235cd494c70e0ee687976b7e21c", "134ba6c3f41aadec5290ce3648abe2eb3a275756bc035f0d57f6107a81553237"), ("07114822fc812d23a24a2fd0c74fcb297f6fb197d0463099686e39e3ad5152c3", "297fd2a58c1fda20bbf50a18f816a1683678a61db22269ed462bcde56493a790", "18121ea79a8871b70eca11acfe1c91ce64be939756a212f342f805cdd95de288", "255270724a4f3ccba08bfed107c5bb0c5a6229575448ab5b1d63039cc66528d1"), ("12a69d285eb8bbf814b49809fab9183faacc91acc98c7777a8e0f6ffeb77d328", "2006e82bd7f31a3ee4c29307c84955ab53472fc0e87c4edb296349ad1ca14ba3", "009b0f83122082dc5474b9f8f10d53f24c54d94f3c1daf0e4dfcee24b1c764bb", "26f485f79342494603157d0e17f67ead4c1ae9610348c2544b3c03177310fc90"), ("06374826cde975339f8e7db4817591e1913553b8ec600a96b23b95233c052807", "04fc33c7c4c289ab7277009e77a3212f08d960fad29092697dd79b28f6077a86", "06dcce911c1faebe4e83d30e795fa4ae424fa5bec3540444fa9220427a20da0c", "043f0e391ceb1bbd4a4dbf6fe384963363a0a89cef0a4d6ff584e82c4f1583b0"), ("2549d25742c7ae2f086593f2df57793fd91b380d900ff57e473adfa02153f1c4", "2d3d4d3c842ef5de1cb25a567a3ec0a1c8cf9a1652e8f51d81ed94f538c1b100", "1bfc26841f31dfdc32b3a3ede067c34a625c520c8902abb596b3f6d08533a23c", "13da6de51b284999251e684e65d2947ecb83ff85cad9589b373b68a5877a7319"), ("29020489f5a9b1848841f7dc8369851c33ea4aa93d3cef97a3ca2ac6aabfb4ab", "185496e886a0af2f89217c0980070d0964e5e7471f7a8ea728fa3d1ddbe2abd5", "0203bf12885db9dfec8734ce582ec645e1ebac2e989b47f52f7b5a8179b256bf", "2362186b36246e5498698d89f8bb35e2297bb0a73f5875175d5cdc269c271a2c"), ("20a69dfaf60b13edd592f38b497bfdcb0fe8f4d87964ffde8d3f563e310d01f5", "2188454347b4286a773cd46954aa459f05b7a3a6c3940d3cf8e1017b5200089f", "1eacafe1c302776cccd618feb05aae304b9b5f65e8f455f396edc73153303027", "22bf1d45ae12eb4a87e9fb514b0d5d3bfdda6b419bbc87dfec4c64ab33212fac"), ("301e98e314ae573935fa82c9a78c898eadaa1ed0b85ca3c07a19cbb5ca8856b2", "2ef319a777d83b6cb9fe4f72868912c0dc90ee308fcca40fe5496271ad26353e", "15df7c0b2cb630089a5762109b0c706b68c923b623e19badb721ef0e0d787b28", "124742383961010f5b4c7b3c05abe7ea9970e2b3ba44b27566858370e938dc26"), ("1d99b08112828131d47692602b5fc6e1774ad61218f98f7ff26439dc3f5d4970", "0e4ec489b2b08669aa8b84386ea148e2463c95656184d02065578e5cb965b307", "1eba680cc7705c9ccababaf9ca87da0612733a5e5fc549f0385efade5c76be95", "1861b0f7b93874b56604f250cf759c33d6bd7afa3d5cb4f654096de201c722b9"), ("09379a18a0b9c5cea6ac70ccb3f5ddef8af0ffb9929ea1ecc4f0fd3d35d715a3", "0aa7e37bb4246d95ac68c62e705768ec9d79d3ad0c1970bc72b4f787b8d35a3c", "16eced4be6d367523559aed77dab8d38d1153813a1fca9a27557669779c113df", "1b3f69b0c9d3ec5ebb51f53c10a89a032532d3451f622927aed195d81b8f0b11"), ("0cd63a359eb0832efb9f91fe460c43d7d58256473cbd29a450f1bfd827ca3fac", "184c0c0551b68a7ae895d7a6b72d469cffd6666abb29fc53d382793c059a19ca", "18e75357676f4a3845cf2868ede3f2c5e5275eff3ed65054b136f571535b13cb", "29a150c626e37cd18fe7d5539004c6646e64003aeb6d2161ede2199ac7df7eb5"), ("1779c7f75a328e3b8378f409b52ae78c81bc20a437aba043df5adfad4cd3fa4d", "2715624fc29597caf8044cde22daa78c2877886ee6b7db280b27ee9bd3c049b7", "2609fa09597119c01b713638635d6a70df12a84612b3d690a40439088fa13541", "28e4e285dea9d2f58ef8474d3c4122ab1af85fa3f7469ec514b1efbe2f7b7107"), ("26bf0d13113c964b94d6d8f2dc4b9fbaf4b38b3cc3dbc24c546c84972e6b182c", "1f027da9f8c1547918a615803627e6f0a8699a01a4b08d8f3d4e7848e00c3af7", "17ca1b43e45b5f8754c2b39d101a97153fe660e0198e8983ed022a45102fad59", "1a257470e777c7fffc9191b6d905a4d8a15b984458b19e8fe062f01b7fc1eee1"), ("0f74dc983cddfdc36779792029dd8ece99c57026a8739d602ddb429af1e76515", "081fcf70f96f9b053a26b433776eb359b3fe5efe5004a0f40bb570fe83805054", "1daf51d93c3fc1402649fb48400dc91c1d9f18af9274acf25a6f3e81e5c204a1", "1a46a56ae15d2acc08585cca89938154cee1ce24ad91adf822e15061bd4dae6c"), ("0aef3f108502556df3dca7b8883deaf295cf2baca26c5f897b9e7f0ec3da36a1", "2c280a4e16fedaea2951687d6ed2b6beaebdf87debe996a2c3a2054a37cc61d8", "2aeb96dd57abd6c51254f11267b85f452dd1cd75666660fb9df586f23ab6de86", "154ebf72174ba68892010beac7f587365453b9ae881b84df6ecc1d5415429178"), ("03d4894af1817a87f261f6cdbb123b0bc76507a1afe8fdf795cbc87ceed0d6c5", "2175ac0b20ce5ff760bbcf4ce6f365a4f7a816fc654867f59d8da2748e9fb306", "07d6a1165061fa07903721d31ff127d4fa21ba25785de025bb520355c0d99435", "2dc8738b26fdd65f2d2e221235d6aee04d2465671ae05757617198e1e8f83fa7"), ("1679fe2bbb10ab718ef659cf114288bcd1524a5a255afb3f760f3920a1bf9ab8", "16c4e1060e8d1df2cd9dd9bfc64fa4b1a3287fcf604550e95eff615a3541a658", "1c37cd8284718911b43e2f669d2b23df7fda02d8dc42ad1b4ec4bd97bb393024", "25bd4c8df9df86a2e42adf27ccaf48e82cc17aef91b307ad5c2b9de57316502e"), ("07a08c757f2b0e58b7a9ffba9904ab7a6a7e7a70901ddb7bd7a09db62a9b6301", "24feee3ef012a79eeecd16158a470926e073f0cf401605bd7f27d824931fd948", "1df5a74e87900c652f0fe7ca72e5569ce144f2cc0ff83e5991d81ea05faead62", "2b526fd148412966a32ddabea4b54ab599997a12db65a1f1614a27f1ee59b805"), ("10a91fdaeff86d5ac7133caf89198478442a66851e0f5a821ef1bce8d45df6c1", "2681fadb2148feb52eb6d163fef18683f569f9c7faae6f9ce2b33dd6dcd1848a", "2a56037e9ee23eea469fa061751b19a8873088f41421f750336d8a1caabbb399", "1897bfd09fd25deeb764b4b4f12862615f3f10d42a945181de339fdcc962bd9b"), ("0663e73f06e903d95f00af78dd0448fcd9fe5e6ad8bddbc59c17451e069b28bd", "07bd3fb866a07368a7f982981aa1471a631ef3979c719a7c2a4e02f44a84bb5a", "0446dc6b53b7a83c71b66d5e5063f546bb6525b82b569a0900a685dd887a28e6", "2be7e499c3d47b14e939a26a17dd3aef3e078f08e22bb4a27315878b790ccf15"), ("1cd1af08079ffc2527d745f5c3c86e668acf46f5415c1b0fba8bdab2842fe601", "1dc3bb1837cfcd311535fdc9c3e3764068d95437a56a8d05561cafb8dd1a92a6", "2f41f4b64631b0a9418379e0cacf1ac7689a5aa8b3f8ce1b8bd93232f01ee02b", "0eaf866a2e198329c54e0889e6b6daf94ae98cfabd9c0be2517b655ca715a799"), ("2dce26ae145ce878930743d341405eea188de4ff715b0185d1e2878cc33b32df", "0722ef5f4287e21c992ab527d1bb9cecdb28e0d7888f138bc928a84ba036c780", "20b772d29ea6495d00d1638e83adc9772097bf1691bc2fd0c1f3f3d2101c6775", "08eba399d56caa567d5dfba21d7e33b60ce524955c24312971873c97c8d46fcf"), ("220d9208b1e6aaf490801c7a5209aeb4d5b12828fc48eac45c2cc4f1d5a1dc73", "0323b8286758c04c5412f24174dbf1e4562cc901f1daa175ee9b08d26f080040", "02038c0ad71949f096b687e63adc4db016829f4dbd65201e3799d3ecab5d0819", "0f5f5ec47cf5ce54ba1fd08fb557bd0ce36f4d2388f5917e7c29346ed51b1e11"), ("2aeaf44f6a9a9e9b9dd8d99841c7da7a6c982092ba97c0768262ebdaf92b9b01", "09a7c540e5af02da2cb7d56d3b06aed8ec1ef6abd70b28cd63a1d050608aaf24", "0fc7d23cb243d47dc77a8674d9bdfc03635868fa5b6024a367d5bddb09a12bdc", "14472258475a17974305e04f46f9e743715d0958f95ca1be8d2fc68e5712c783"), ("26a7c54c026de6b8a36a8d9d44c98424bfb6d0ffbab086169d133c0920190433", "0df3c4c748718868500d573af605b3ea68d22ab4923a4eaf4241c9490f2db78f", "2ddc2b3f7069342701f949481720c06758154f1aecae0bf9293aae3cb5211079", "289f104f4eeb64952c35861d594b2b90f6a02396a67ee3566a6d79c9b7f75c56"), ("055f02cb2782943237f0bde69f5612326be34b4346e643ead53ad47a359b504e", "227783919a653eb0bcffbcc54137a4c74475f6db29c812ed39b6baa9b8bf0cca", "0cf044c4b33f6da6d87cdc359b79484a316ba046e379093e69503f645767ec93", "1da635ad3d76eb3219cb6807f6622a3b216a2442e8d4ad9fa42099f948b35ba3"), ("03f6ed8e3710e44d6282a565eb8e2017590146e9e595728f912513478d2efd84", "0402c18660726829054f708435f6360064dd3c56d1b5b34b1080d79aa4f9f0fa", "0077db47aa980171731a544afeed0aaa8035090805a2eb3476050bd89d29262e", "23bb10deb72d8d502ddc65aacd234991f33a5ec5fcb67968686631c1cb94d708"), ("0b4a1fee71385c52d13dab64a591d8affb07ac7bb6b7185e5da8aff2defd3055", "269870a2d3f4d3dde95cb4d36adaf3c61da33b0c13a0107ca24c5d2cc87ef28f", "29446d3a44fea31d6b6a1c5fa29e18a5bac47240d5a49b85cc4c8fd2101c2e53", "113d7adbd6a5d493aab9bfcb2445b754e9a7eaa489b15642fd5cc1eb713b8614"), ("088e5ac53c7bc7a30227d85a72bb9ffef730e352b77a7c3db067f6ff00816809", "1d9d622325fd6a7483e0bc0039b8d61c58ef7c4af71ba4f3632b09f4cb64889a", "20d6073a1fde3a94776f6d5bd8c480e8561c7aa22cfa6d998f755aff0d2eafb1", "041ba5b2cc5d26f8e7dcfd2199f703f56a056eb8588899eabbea2a2e07fc6372"), ("111ba58549360629fb1a8f8d572cf3f1cc9c07403d5af18c83a5bbba977b6997", "17dc52639a8ab0f1ddbe9eefffd25d80a59826d2c8a5ff6fcef8ef8d21a1d88e", "0eb71db210e0a2cc2090850f8a7b63b4307f9e272e5522f8c5b4a033c023664d", "00a77c3198030d7e7f9a803faa5879de3f06e0a1dc5c9de293652cfb3349c91a"), ("131e4b438cd543988febad48a1bfcfdf0e5b1272f68a06977982921ce7525d37", "2e2b70e08752b0eb5a9caeae438498598fb51adf4f90abe33b46223745593706", "1e616b1c27173b8a29b66ec2c122dad970ecbc6e70794b1b806ea7513bae0d98", "2127b597c6665646b28e36972c9a7333ad9ac528a8d6b36ba98610d880d9c7f6"), ("2f4ff80da69f3fd5d60a5f0645ba4af925e9ff3684aee5acba80fdf866263be6", "2c451ebc8da5eb6b470e3dbcea6e09bd39e3a7d9dd3950a3f69469834098bfe4", "2ad832ff08449845829967db4ab516e38435efaf9778794cca872492c0814f0d", "1306a5dcaf8bdbf10fdc0725ac58d830dc4ad0f4c38671270ddc278f4c222938"), ("2f98a4b0d19e35cdb402f7d951e03b643016007b945c71c1d2be16e06d60a9e3", "0bd9c68bff53c51e134e6ad65eca7dfc4e1e0173deef526cef7248e1e90e7ba6", "1d699d0899ac9fac8655375e477f8c83bf3cdadda208fdd3d44ce382aea8ebbf", "2256baad70995b66253c01aeb1289638827c5e72e22787f741b0ee3c04340aa2"), ("0665d9962b64999c6428698a2ef580e0a91f6673ca1c67bf0df9a2c66139fa32", "27a1e593742b97bbf973011b2a2b429dc1803b415942c6096ae8e2f6ed6b255d", "043d3ba9268acfc74781166042eebd3ce218c8dd2ab01105223fb8154da70615", "0ce68ebe0415dc0a5a4edd33d6c906e62abca51de5c604333f3e4ce12b2d5bb4"), ("11b0ff660338903fa8ad55144a6a9712d8f8d517824d530f7db70e761c81d0d8", "087b8469b8c383feefa74509ace143e33c464ec2ecc8e64429b1972555e9d478", "07d9bc8d77dbd52eaec66432bc5f0a910dfbcd55ab758a063b0b78a644ffff86", "20e79550f7e8d8f57fa3602a571e90e69df435a172f9ad7fc87721d91e8b1aad"), ("0c6e546492be24261f37025c45db82cbb679fca81a704c13230975629fdd4d76", "091bd8b2f1fa7722d9ed9820da86174f6ae00973ddf12af593401fe1d038842f", "2c8fe794169578fc8b679fc4347ad9b50d35763374b328a22c638435b93cd596", "1bb45cef5eca8649159613eb2c8a3ae8bed043a8c217371ac4c15fd727cd5ac3"), ("05399357389f0be6596d096172f7cc411a17957ba91568f063bc9790aacc977b", "300ed3acf2e1e334a3c6173f9eda7df06b218e33027db259a631b675345c5de2", "25f9ac9ff17444708b068fddb4527d8e289c09774eefc16d5bb1b1df15e8501f", "168cbccbf1fabff3b052aa84a94cd2f475407f6d88c66aa57e0e7d3151bdf9dc"), ("0d838927988f0f3b44245344c7edb30c3f6c6677c775455610c6ad147c149b74", "30013f9a304b5b3aa1c2cc39c7d3ad3af094d3811b326d3d4d3dda499b53f3e4", "1231aa2502d4e83a0951fdb2185c87dc2c694ba64ef63c6cfaa70f088f27eede", "12a858476a534e90dd28a8fbe1b4c2eb98aab1fa2d157d8c80e3f77a667c1491"), ("016a432d52532cd385c04ee4068c891a79f0fea1f1bf6befa5ea05c92d53159b", "2dfa5f9ad4cf45a101e5f448a0587f588833ef540320be8e0167719b97eed261", "05e880a8b1b5ed15edb682cbafe7558319c37e4685439cae54006d0cd2b971ea", "2f496b920e296b0d1ced3c18cdebcd52dd3762cb75d6c18b776059827922f334"), ("0a5447884ae748c55472256b78948527b7b638979134755c1e1ba9397c9f3988", "014f81eed78f88a002fdc573f569d3fdce3a6339e9698a83c21ca53e1352d229", "1059dfe664c3bda2541fb90aaf746f97f96a67bb9f26ddc562293b833bca85bf", "183e7d90873cac8e91bd8e3dd67287429b97a1ac4314f443c9d7781e15b9e651"), ("2bb1849fe4152563e95f28d84911273ce5cd34bcc7410a2861c6252ec5313b2d", "041527f4975280505f46e04e7efa461d5907eeb83d16caef1ed9862b50b33486", "292cdaa3bb06907bf7de3de85558977975b0ede2395d02363113de2e813bd2cf", "116785d601151689d908cdf76912cc70ad2b4ca2d7da9205f088badbbcf8b089"), ("1fc1c85fffdb644949f984cb26f1b96c67166845599e7be72b8a758965b8eb56", "2f22f54aaf49b8841e4abbec0268aea532583612585efe86086a8dfd6001f9d1", "1d8c2270784af30c86256b5ff31e0ff051778a6c7dafb8188ce8e74507230f26", "2c5c0856ffebfe6c89706cf1bd4d9eb95da04d86dc0ec54f51a74e7b72cc4fca"), ("1fd0038bff263193000fa836f9e4c9bec89f4c6d79f5d01be30471d89add36c6", "1060c31868a1ededb4e7d7e56656ed060a0e6a3e976f7d6696895c8cc8b1033f", "14724f45ce0c0a06314b795b060ce9fd0a8d63f7ff5501988b694cb4230df3fb", "2a477fb9eb24ce44dadc356bfee68af5410db30756e90e1bdfbdd44cccb2e0f3"), ("04f44fc547dcf00e47f0e12fc3f7fde416f26e83b292872a5bf3edd5f51f0f6e", "2743aac757a7b40e73ae004b3f9a860723621f49662334797dcb2a6c678bd621", "11b0b95b2992ed10130f73c617e051b64db525e3b08716839c30125e374d150f", "201c2d8b27123cdf68c9f2b1e04b03e601288bafcd1df62fab5188b523b23882"), ("082470e21b07a91f1a04cc0357c71078e26d3c68242a3ec878f30a9d1995fc19", "0300de83ea47667e6d37f68b885c29051074049b412f11f02f00989f9b5ebf9e", "22b25737da87bbe14962111a8f35269864bc10cfb30e5e49b5bebd26bc332472", "228b0913e047ed095e294ab806937285829c71cb7925b96796023d3cab978948"), ("14f8a4dd10a9503a124542d4f1db4ebf322789b8555e1602d61fbaeb9850ac13", "24beeaa9d185dcb01546df6860604dcc3727cf46ce5cc79851a623facca4ba0c", "0382ee271b0f07f55fa8ac8eee2ff510b013dbe2543309f60bc9a4c8fe2a0ca5", "17affce17c8a8d5f01994945d9d27b0b9a9c5c43a6f7e2758a4bd90639033a7d"), ("215a56b6cbae16dbeb2e445779716609e203cdfd49107a1d86758d9fb70d07f5", "223d95dbe84098837c58fc8cca5b9a1ddd4ba6c2fe2140b4b9b1c4e46e624b09", "29672d4a03d520da7bb9459081b3f82cb9b27caae87c9840366b72b354cd8dc7", "22d417f45bacaa6255c5ad6529d93d830ba2ea1da8fdc7907d74dea84f3eb7d2"), ("2c8119fe471d5ea42ccdd977fea41ec76d59740b887eba9b011a581d571a9334", "0f6eb65200bbc8ff78a3e24f2d7417e45703c22533e3dd70256d381fe3ad4ddc", "285c2e36c6ee4da05bbc00790f9a3147519036395f51a0f28bfe203ce64ac4e7", "1687cde456ebbde34a8df5407f628301a69b754e05a1925540077eb80ee4721c"), ("150b9a0780c33fe72b1a528bd9556790b246a60e30212a966ac8f38d2c2ac51a", "230a520f8ec917bd5b3128a0f327aa5d3194a21d81bf463f46b4d062d77e4ef1", "03d3da4489872f437a73f67ef9012954ae5bde0e6efae6038565731a16ad065b", "080446714b4cb7e70c7ea1691008b2c5276ad05a38a8b2e02db2905725616e7c"), ("2dfe8afec56e2c8537594096320593e4e9e60146da86b38ca5277a6b93f3d41f", "184b63012e15afb0d62694a0de2b79eb9ec876c27d0ec98808e35e867e629f22", "17f986513e3c2c1081653edcb30a4ba01b8570b597e02b8197b0ac4acf64eb73", "089d8155e206e200aad8ad2c14d2c72df36f05be01e3d7a1b46290d2aee7679d"), ("068f2070ec4d5e70aa7dcbfc93f162308aa8c2397a80eb923aa32f897f276dbb", "146d5ee4459fc6154c80821b14eeff31957500a6a628fba84f717894145b2147", "231a048755d9dd11ce956443b6857675ee30952bf85e9f5800c21d1924ec82ae", "058e63d8b9db30a495755551c84231c2d3066ec2d566054d357f56bb1bbf1b92"), ("2111d10f92dbd2c5471d2ef547a813d969b0519156a3ea4920e035c387b4c323", "0c0b218575613deea2bb59562fd6f924f8078d6aff729bf62dce7a1bff0bc642", "1e29f6099b5e26c4d7a2b580e81f7eb38a96060d04384a51ce95ee5f62f68019", "1f7d735fd32050efe8df0a9dc246d3cfc5a29d80ed5af0a11c6cec47400fff8b"), ("0d978d45be5a1850e88494c4e83efa5893b490edcf5e7dd3cb36fb3d040a5d77", "1a41013cead0fe356b6fda1420da5c47ce9a8cb55f46e25e0b9e74348b5ceacf", "1c66ae67534f42e779bf1071de11c15793d0882ff88a97b280e060a1f1de02e2", "260ca4f0fb3f6ff20b297e7b355303e3e53ed2d0fcedecee4717d2bed1a9f009"), ("126e8703449d082308e13964fec0431eb2cc9d8f9e8861f6cdf8f6f2a3514bea", "2662d14be352ab50830e0a1f2d811b37ae10c1572bb740a1968ab5aa6c4c5959", "1b103fe1947c9752a07b8415c798dffffd034239eb1eaeea23b6e1bbec28777f", "23dd970423151d08221970d65817e0e307d1ed70cd2baa19d023ad872efebc33"), ("0f86632f28bc102dbc6ec5a97106540bd6a9fc34659a9a00d05972b99d604b29", "1a479d11a5122d00fef92132a55b9fbd975d80bd26c3e29bfa52b883f588d6f2", "1005aa84b397e334df05ae16607247feb27ca8a9e31e31ea650e2fb0f5ccf10f", "26f11bff49edd171f614cf23d0da02fe5bfbc1a8165fd8404d6e52362562cdff"), ("1f7a1866a4afba010a15818038dbb6e514569c9967ed121a4038c3d5a0bec8e5", "2d4ed9fe3f9f932c8e77cc2117466862ba291006889311f4a0653de2ae6bdc5c", "2a35c3998e7a61ab25a55d44c6e78431f26ce8ca4e42d5b6323dc3adcf4f04ee", "0d7a95d0682d82cb6a7fe179cf6fa4f7c770b3c8f486b326621f0cef6eba89c0"), ("07fc019434cc7934c97d7fd44db5ce33f9b7244e002facc535a5376af2fb43dd", "1fea5b2218c13b57fbfe3116cb4b51405a13b8ae420cbdaaf31da8bf9c14d125", "1ae4ac896bfae718cb0fd1b9758414a8a3534457447f044aaa40b853aad266e7", "12f561757c2874bde8fbb878f0156e249312b6a4c7121830b1862c5ea92e5e44"), ("285b8c9603428d9df1753e9bc044cba3861a93c0e5c74f95e2bccb702992eb57", "011126247c0da1eaf24ae721bbadad0269837340a4b02fe446be60961df304cd", "08ba679231a3bc2e49b4f97e6aeee918ce9fee3987696cb3f4cd651efa8a87b2", "14fd9c5dc0f522a4361dcc9e102f6ac8835241bb33a2ff35ffa538a75d0f68fd"), ("1b965fb91481cbf40caaf56d17c70d84561d56a2b5d4aae56d41db2a90690e25", "2041b542fbf41216ac385e680558876f17420233920537b8b68deb0f2ffc21d9", "09bb85d988f929a9e12950f49ea3fa1f2a73134deaccab2a7fea7975361ec97f", "06fdc321e51ea0b8d49f49e4de55f99e629c50ef0c15156b04376bb3212685f4"), ("254c1be484a9fa591d5a960f510272aba2b52e4ae14b4c29e45b6516b15bf7be", "231e4a117dd594c7a433342b721933f5f7bd21a269a5e0d286700143453e9ac9", "0d29e1602e65a8c702b19fab59d0aafec13d02e25096596c2cd66f67e91816f7", "1de3d622340917088c3eef27d9a6f9e92e86418196f19be28221cfd786f40015"), ("0a4d93f5ca460c31deae2fddde3abe1b0cc3eaee7d84866cb4f30afe45752e1c", "009efe6e96523c44985f18ba7d6185d1aa8ba16fa0676a92cbbb7ac92c36de94", "12fdb3300259d960757b34525257711d26ffe1a8eeb00d6bb6e366abf61bfbed", "0c220a3018e081c8fbb1ab50ee7f181555fc323778f673b516d3d678ba7c498b"), ("1496bc7426d6a00ff03604cd8f7c3946dd8074327b799065bd3c0448755e8eb1", "1866d0b375365d34fecf583f34e913333da96a33996012be9d00be892f837587", "235e4c31eb7af9058a146bd79057f61bdd7d90045227e098cd2e9e0d38293c5f", "0c207c3d3a72289a61397b495ae2b70998bdf16bea15e8a7a2c82791a50cbd00"), ("241422e18b7e7e894be0bdced0f56113dd58ca2c1dbc984bb2e0e166ad2a89bb", "27cbed9a319301d48d6e56fb252b21c0e7524004db377133fd5fecf328fdc650", "1a1ab8b8b61548a2a48c54fadd59e58420fbaf6ea741a90f2f78f242c5576acb", "03443bdae98727ef96a07230478ae880644a53099c75b94e7051b4991c94cab4"), ("22a58606a8711f5ba1dc4b00b8de856c54680c5ff184a2da903465297233ebf0", "22619e526f9a85270f734cbb8888604e870555fefc3ed480d1b91a4f66e7256c", "0ca101ee5f07ab9bac7705bd9f6a6e6d9c1b9b0baa1ee8144591103d09058562", "23d250d4491002f2623f86c7f259defe46925099edcdbc123e1dbf33e8a869fd"), ("129cfefece7fa28cfbb7ff2553be3900b3bcded73291f6e50215fe94fe6a45aa", "11ca115139954135287689c53be1ae94b0ef6994426fa965d5de63117e6ed2be", "0af956709bddc7f490022a3b21e34552e7f27a78fa85b7f7727b13c86dc71202", "1673bf626351cd3c164ea7684d2785e0dae09c987d11fae6eed9262c9f2b5abc"), ("080fcb6d9523f88e9402f730d2dcb2d441311a642bef010dd0dc2bbf26c529e6", "2f525a0f35e031a47d6b02d5cf4a8bbb504c9fcf7184acc776adb88b462460c9", "24304d17ae7dfedab1e7386468591def4a0169d1b75e8679457ebf04743adf7f", "1a883b4f012d2a7c2853de1c92084a595cf2b556bb1c95ae9b3e0712c4760492"), ("1e974920d787253aa3d1c58a9938ea47bcec2f99728a6b114f25d8a66655ca54", "225a3278345e2a170c2ceb2cff642f9b5bb8793425bc1469321f1304b251fa5d", "1334d700e58a604982c4a94a99ee8b85ffa2279ad0c07a047e5a7576b0e2dabd", "2e7f765c5f6c7ddfd72b8b926cb61f52986b8beeec6664e86a0b8fa1219443e4"), ("2fed6c11787324035642a5f48f5ef5138d65c5a7756e184ea9b0d90fd7168113", "1b714359b2678c78a74d9456c4cbe6692c91a312e640f4c1d4d3ea3540832c61", "1d57078263ad1d0b9d1e924a542685e51d92ab7c260f7604fc937c7724bdac0c", "27ca0ecb765976730ea25fc695578579d670a35ef2d5623c1818e1ee84527240"), ("0ec4376fb825ae79fc48ceb3902c3877206e1bad1f415d2678fc4fdcc16f4be4", "2ca53b937a0546614f2881742ac6e77db85afca0027406f253ffb586cd223d62", "14634b22971dc1abbbf6907f33f349a7ab5cb5b0ff753c8bcdc23224d749a4dd", "15f06e573edbc6eb68fa4e0eefa6def02a9c9120b9ba474609c7b30427da26e6"), ("22e6d231e365fdc64db6273a5a60c61d61599870d9be4d2d84ad795fea40090c", "2e851b4beead43b7c98e799894fb5b32d457a3f66b40cb1e3ab2652dbd0928ef", "19ad965e5bd9cbc62d4273c61deb4b2b86bc781d1bdde802204311cad4f7ef49", "089df9d36a912394ef952d78165b89e09cc05d44c97be655b59f00053fd7b65f"), ("01830ee4bc4a8591d346970b82a93ac219b969ed2f001b18fff9b02fd29684d8", "2309e8ff07b4bef8e28a20b6f09c127c1eaa4ceb7472086a8e54308fa1ab3e68", "22470d1bd99ee7e172a738e9c65741a72728cff5fcc11b1acec8731bf58841f1", "06bbecf6bc21a4fd09a3d80e9529a8ea1507a6ddfba08bbbd84b21cbdd8247dc"), ("23fa14538bab689ca6abfec97b659752260a8d312985b48dbd6f15a7d9c5b4e9", "1a6bdfda78948415c216e2e53bf96754540789421e4c640c986f8ded83b5b201", "2a7b01336ab558c7090d522a4a98d11db6b15813cc09281bfdaa65bc1d9ebd58", "085f5c85003d43e62bb37e8fdf83f454c63a8ce707b7456f273cec2245482fb1"), ("18c3e733f8009c488368b7d56520141371d52968956802a9d1d8ab88f2c87b3f", "08dd45595607bf302624cbae1021cf282d1a2a8efdff20a22d27f3999b0efe82", "24c328178fa4c10efaebb13df2f433a509a32498619bac9c525d2781efdf34cb", "201e3dca9792b0289afc2deeddee9ee106d8aad6dcaeef82a6964e40556d90e4"), ("2765dd8b0a8ab6eb5138a904f7e5d5f27a5f23d80798f72bbe319b9fb7b562d5", "10ba807c5a5af005e8e12299db6b4c747e792bf9ee2a208a041644b06f8955b5", "2b4dd4be5c69cf93055affb41766e46cea21366d727638ce204da4b628fbc700", "2cd36ffb9420f0e9d6d9f9d89dd1b9f293302977e0d2c7a13d1feb8fbe3166d6"), ("0e70cbea67adabb7986ad09c550a50fc0ff3d49f1ea9b736e2de88bb7db1ce38", "1e88f8fedfe14da6d5d3c719c0c90c02277fcb61ffe75955c95c4a771f5590de", "27e785b2538c922d09c8527a90340c4bfd025c1bc89f4118b58f900b03ea3e3e", "21daaee3c39b7fa09b6303dc65c9fc1de951d08e49ec56068c7093f2ac3cc786"), ("1302dbdfbff5494657f2e4658cc72eb52290f1cdb8036c856edd99f66635e5f0", "2771b53173d5e663db206f60a046839a590bb84958e198fd2e80d4d090a252d1", "18040dba690432959189a626ef3bdf4557833ba1ab71ebbe0efa74f9ab9a3acf", "273750a89a5bf680b1dec6169331546dc4bf1b70495455aafed04969886a9010"), ("0d4a686f70a420faa42bc978d0a446fed6a6b5ae1910495d3d95ded417095b9a", "09b1158c7912c2495c54f583c341d384088302e870b17d682b7e5601e2d802ef", "26a16bf7c2294f7f8ff308cff82c3c4eed4e708a4beb8b526334cbadb66654d7", "134fdb708a944964570963c98fb4ccb11d8c3b6f04eba3b0470819c66172876c"), ("1bc352373edbd7839fcf0953f5a05611323fd17fa6e9eddb5609b8392c4b0bad", "26f0e59f89b1ae7bfe2c6e9ae19fd1cb166c958a796b57c5be135da6c9f8b46c", "0f6f1de61dffbee50407bd4d99dd119bd8377d08b7b669b1ba1d9d35d3b002d7", "1f81cc121feee6eba3019a60cad693c6377ebaec3f2fea2d092d44655a362585"), ("0c7cafceb84713628dfe964ee8c1548d650610f7e3631173b2b235fc87d96db3", "083deb457b38e128e709581237a199b595e4639db5a47fc42313348c4c4096e8", "2969e9d07b57a3c7e15dbbcdd580878ed7eee716ed1e24b5e60ab5c869cad79b", "2be18774f9e40dfb410163b9a49f9074f62d2cc414c55bcd5aaa1942d3fab00c"), ("06dcf818b58275a42a774d777d296f46a7255da4195582697c291e1c0a0ce7e9", "0b9d17553be57c19e6f4c8a3a1582059659e25802a7145eb43455b862f4a9761", "24f793ddbaea832ccdc36775a5aa3448e1c83a51add5f84feda0ed09bcb94e5b", "1fe0817240c996c778ab0815a2814b48c04902e0db10229bfac7ae2d8c85318a"), ("072462a62734f4367184dc58ab7508642f39e4c3227a05b9d53a421acf9c3b25", "227a7d4ed77d4e8c47fee98c864df3ff33125fa83254c44af674bf5ec6a0bc37", "1ca8aba3bf1e1a33b1aa7e5964a890b43a346e9ef66f7f6f7182a115b967882c", "091b56bbecc26e0b9a0f47ac4cd2934eb26c736cd404837a86507417f55d10ce"), ("2273aa29d17b9866daa8924adeb9debf0e7d0c2b7be0e02128912eb24a4ccf25", "2c990df26e8f6343c463beaafc6d88c379f04d624c42e41f4dbc5a5f531048cd", "0795b8cf960ce89055cecf74796d28e5896485486a5a2ad311bd018324c7eb9d", "0716ce1e96e6242cbb9dea9a49cf93333f81a8a82f9fe16e0f6c250fd056ebb0"), ("0e16d85625778d13a2d777e6cd19a2fd81c82bbe222cce25ae67383621709212", "1941b1cd26e2661e91bec7781c1aed45c2df58bca88182381a795880a00eb180", "08b9586893f6a5216bce45e3f6859a943e074ef801dd5f7cce8380ceb2e07b79", "073b94ffa44f640c6eb8556d73cc93f80e3bb825d44708827e6d02f2ddc918c1"), ("1c13d0cb2e10a8f54122311f39395fbcbd58eccd3041616a8e5ccf75cf90a948", "269421c4221b1aa832b787a34d943fb6caedc28146ed470f8645865c1133d41d", "0e12163d16630a7face82115b015330ac461270bc5b8c649bdb8e3aa66593d61", "2ec620c2062f7458b6956d83721546367e370c1ccb3a4ad2fc1204e91ecaf3f4"), ("1d15df45951f13f8caa0361c08585d8378838a05ef81cffac3739e0aca0fd932", "0615af692dec42495e4d36e3bcaf3a25041368ed0234e9cda1d4197a530ad0e2", "0bb328137b166937f1843e4ea7b9d265477d0cf03baa360a52d3db4ec5cc9480", "2e7d7faeadaa8574aac514ebf2f77479279327f9c07c47bb646d303a11930081"), ("0f6a1afb1c52c36860ceeffd3bdf854dd18e41d2179963ece05b69b98e3fd5f3", "1fea6546ffcb3ce50aeee599309d43d0f3c8fae105a9c97cc1bd23566e4f5ce2", "11b0f284d44bea9efd8c1b36b96d2934c1c3fc74aa5d530df81eaf1f03942a51", "2aa0fa16684f0f45df1553dace6ee80edc920665ef2d6c7c20d1287098cf7beb"), ("129048f7a0fbaa50c2492c0ac3c706bb415dd7cb7244c2e114502c0a800d33b4", "1793092ff7244f8fe9dbe2058797e09b7a7cc998a3627aaced6efaad589d647a", "2b2ee96b0ef337b618aac202b5afac0ba9156f6a0cc6c8deab95af1ffe3491a2", "1e3883cc0adcdaedf3f3946a3db2a74b988ce99f53f9445b909ca28c95ff6977"), ("0a7d8646b0feedc7d38daf0b0b0edd101bab54a47e14568e7b557b57bdc4343d", "194c6ee1074f68dd74f3f61c0560acfc4618bee04f469be7e648ac9cac3e9c36", "0cb2b4f2b1efc009101c0a8be214e97f3163c2aad19f94f0fbdf6806e22d060d", "2ea2cdbc4acfbb999c67c2a6b256f3861b9637b28b0d91a030520d67196c4bed"), ("212b5f28cced03810ea3813250f783cbaa2e28347f5deeeeaf789d4d80f009a0", "08e3535d230aee5a0f6f930af82f51633a3d630936d55c3b6e0dc9bda7e7d561", "1cebd933e4d6647339380105adef833c6892eba7b503bd07218b228b454b0ba4", "24f598ae028ca8d4a744aaf35eadb864e87ad4e7b93f27bbc041f042ed9d47af"), ("174b5a23637eb6b30706ef0f981cc17aba3d4a54d1023edf9441267fd0fcd2f6", "20da4cd7496dccdf7673841fc1c1e6bcfd7d8e42b03ea7e57a92c4df970ba19b", "24b15ab4eeac3b6b5e772e0def8b20ba5294828bf9b853fcbbe540532afc323a", "19cd0be00caee84a038011e3c9aef8e48b64b7acd72cc6eede8ba1802a23da41"), ("29a99f34d4f19ba09c9730b2c429b46336164fd11338a5e6c360211fe56de38c", "159b350fa71ec7955614efa9b6db48633de534498e9b969c0583c10abe442081", "0ee091e4d407a59d94681a76c2e1d9bb192e35051322b296e836c3963b0bf1c6", "2a990147cf94e34f27b30a1715f80558c956403da3dc6af3ede3787513e7afff"), ("0f5d65e64b3b018358b6372ef6b9324a551521ee6108bd095fc87b937dab9f38", "1f34bf12e6c1d8848666954e74aa7f895e58a6af3c79a18704105b904c760032", "0e2f66bc10e27f0e7e208fdd559195a33ccfe7d55fdccbefef32d27d05cf6b79", "25ccd0208ed84b72a5c9d81bf893815949bfc111ff0001ee2fffd32436745095"), ("2ec402c8adccef975557147c0be0adb62b07d6659e263147b403c85920ad17e2", "2cce05b4f0753a99bde9aa708da6891c215921ea1ae23e076d35a9df10facfd0", "17de7e27429bf382173a03b3b4c24192f5ba4d8e0af5d87fe7f3ac42355c7ffd", "0cd0a71c721c0bbe3eb955c8bad7c05f0436e406341202f927ff143fae3c0b3e"), ("23b4064559f30ba05e0e0f2f952ae64b1d6d5ab1912c63c22aa6ec2664c7df1c", "146a149dced5d3e3ff6124ea232b3de2aeb63a8fe59d7e45961f3cb8d6d8532f", "033431b723af4a5b902bebb3c13d5dd2a8c46a62f70caddb243d7f6f779bee49", "15e684a591777e245d6c8a6d5686560d9ba96fc3e6096cbe66d7dea27c942cfe"), ("266bc63174f85b90c3f101a306d35a9e19643b261bd68da4b8c463a2907e3e93", "25ab86bd51b6c7359a3fb9a04e6fc46fd2082a98a82c6aff749eaf30d13feb87", "168ea6f1237d0d6dd4c3191e5dc1bde4540d9dbb84d389d1705fb26223e5e623", "2bd010b33dfcc82b12f188f3b155e44249eb4b0786d654697785cb43c4cbf5c1"), ("1e3f6bcc145c063029a3d36bdb4781aa16c25b1d24deca0459ce438daeb04680", "000731b5ca76f4e55a4431fb557a35205f46ca968940925eb030696ab3b3dddf", "282bdc9aa808533c8c029dce335a96c5a3aec9332d6e03a8d7df64c12e2a292f", "03e25b6df7496d0ed383ef6fcb04eea7f3ae85ef3abf89e70c36e1d88b3eb866"), ("17e0ce050434462c80d4938f4ff05b3c076375c6d18f05065f4d8103c4e56c90", "25d59ba50de7adca0afc8678cd24847c443002dcd8034010aa1e6b387895690a", "1b701477d824c2cea50281c244a9781965697ae683fefebecfd07de9e3df06ae", "10b41b66676392d0d6bf12d65846a6c76bcc8dfc540ca68e91e1cea5c5d688f6"), ("2b3cb52adc7ecbeed445778cb51ca4d3d55c879a8caae7bcd94d3edba54b48e7", "0135c04df04cc3e6e3d5027e31942c969df4ad9a6ee57ed043f4d45a1293cea2", "2b07324537b8773a8e8c376fb0dfd4eb4675e9ebc278476b5b69ae9b5d1b0a4a", "2ab51ac6fa3e399f411438a805ff8e40a8b4a132b0b1e4c25acfb13efed1a141"), ("1f2e3891b781e51b1c2d062dbab00b24c182db18dd2c92a8369b6b9e7a206d56", "12ebf381198b81d84cd16504a7bcad65ea2239d18f3ff6f4b28b30c3b3493aa9", "2c1937b104ff420e56fc8d3daa89191cdcb8079b15f4c7cd66f042e8a28dff21", "07578d69c55710d099ae3f9fe2315b3e0aa331d819ef91a45a4b65ce6ce9bf6a"), ("22e0ddf3877d7085ccf0ee50b2d62fb27827dfd466b806b3bfd94b5a7b2c4e7d", "12166661d1cc5634c1a57d61482a0d4f43057054c57f15b9ea2a90ec4603fcc2", "2aa1ebe4d3dd11b0a2640c5da17d2aa69ba0f6e71df47f0fe22bc80a755da456", "260b83af27d4fe5a4f415ad4a454bd6c8113ad6d6537378664df7b812a1465e7"), ("1cca60f8a3e8179f7262edf4594f2a6df24c4efdf79060bb8fa03569fc614971", "20092359467abb31df6dbf369caf814c50ebeb6065bbfe56521750cefacfbf22", "23f86391dd5163e3abb5aa3b00145c7e999346184f532541cd8abf0ee4ecfaca", "265edfbe5a804aa17a2a13e5759c86d775b219e0ad7a27b1b3dd5aa17b0ca94b"), ("2cb28c7edd954d1e2c9c6ed304cdd50a90a4072458d20ff0f1ff71d2cd1dfe3e", "191f8724701da0323944a58508b6dda617b5fdfacd671314775bd8b1876a6aa6", "22119e5c371c73aa123b79332180e926c3735cf927811c835b8d4d0e028ec55e", "227ddbdf26bbf15cc7f92d656e3eff8448d4c04ff35ecccf650c5572dec7fdee"), ("15135a2467cd0d6344d7ef9c56ac351fbbdea8b0c7b4e4205dc9c89d7b60558b", "2406415810483e07d87b4403f5935300461993ab582e1e78ba0609d69ba94608", "158c8b6c81b215a5f5a0e20d7d173862d7d32bde9369b2e6c3e1d2541bd773e9", "29abf0cd8b8fe8a782817040512af57762c5292c368d2d70698e409c123145c5"), ("121a4c0ea6cc0340616124e2e0713a90868723703f36bc7fd0825f744f7c921b", "0793951e08ebc617d0ef49bfbc4efbef972d88dc3e2a3474ed527206de79db95", "0a03ce3534b13789bf72308a918c0066ff651cb101f07f3198357828d0a2df60", "2f10f428196f769eb3b82523d5126dfb35e6c492aef44671137d939e32fbb11d"), ("26918258b36aee11e203906fee112bcdc9b194fd25d965d44016d174b8c6ebc4", "1ccc9c2a4aa2fccd70aee72ef31ecbfe7417ad05c50ea779aad1d4defa95b3c6", "01d6f0f568301f97eb49477d4e675360bba7ed83ef84c0e8c7df10fedf3457ca", "05a30cd97d5e35f058a0f5f1ca9520a58099c2a59d990b45b275bb11416d1076"), ("1b4c841b7e56b800be9078edaa89cb832914e2cb5c22a0e4abbcdc0706c8391c", "143526ccd0cd9717e71b1672180835bb0eb8b8a08edea79bfafde59d79ecc7d4", "2a99629e5011fbec1922db91e661982e661d5c481f4de6433b9e92a853e4679c", "126482dca87405c7b2c0c36f5adcb880930a49aa3ab4dc351aee39fa33fc011e"), ("2ee70d27c0a9d18edf268b424efd49082e9dc092ff52c52adcb98bdd02493f09", "193dad8f822c23c385585f77de4c8bac3c6b1955205029e9a6f179163a796fdd", "1d7321230e0a44c839f3681e4ae2c6cf57cdf700efd024dc1d8466a9b35f0410", "077d6d71cfcf21abb243e746954cb7faf066fe5d9b26b2fb02772e63c208d0e6"), ("1b4e0059eaabd7c531b3f2bc5609c97f4da50bcb8791f6452908cbb1f5dad087", "0148f6ffb794d4c9efd31e834942b89d008fd4e74cb0146b5101080d1308f935", "16b1b50a1da719f874c436dc770ce12f5fb4cb0e3c92712bb7e9b425778beb57", "030ef119535e3780980a3417b0d968db0d4b5955bc3212f8bccee21a7ab856eb"), ("1ffd727e33f35e28b7ad3b9ae13a729bbf328e3e607bedc685b48adc02dd6721", "15ed8ce5639145648b11453516037f12b494aecafd517c7be88c4d7cd0123073", "2be30941761cbd32d148bd2ce11e1082010179c53606d5b80b17251e8c98cbcd", "10b82decf61a7b07fa16920243abc27652d9fa7523cc96a05e5504df38b7696d"), ("17b6c48e0f559dc2aa0b8006a7d9787e4b2069725d38b191485deef54578728e", "067cf3d12ffc4243f867cf807c6df67a655aeee30451de920843fe4b8bdc1960", "254cf0fadf4e5d9dea117b6d78337c281bc2725136e9bf96b664190d852226e9", "28420d3e13efc71ece4190e38373f3127e3ce2a7c03b20a6161a5aa2fe96f4ce"), ("0c3389e44ba031e52422f4e197297d1b745c1e1263a73c6d0894d88bba969326", "1f471593bbc5e2f8ae28e286780b05b6bc5dc6fb9763a4bdbf215f62abd723d6", "1c597bb3a7cd548f8b30ff5441676abcb9a81b032fdf2d1105f3108bdb6d5b56", "22b11443d12bc18bb0c2fa9def6205255066ee7498ce5b2093a77653dfa69738"), ("060c0a42bfc70dda547be433b7c94728b8207b250e1639779b4b2c59bba76377", "2d2156e2a76b6ab7b511f536d65923744556a779b5a6fdac21275c44f5dac78e", "2356b9e28cbf498e2be549f089fa3c26a8a238d5a84dfa3b59c993136ded11d1", "0291b22b72a941232e7e129de1e5368a527af5845776805712db08dbec78ba57"), ("1a84ac7ed80138c425070559f056b29468d37ebee141c6f54c59575045da2303", "2abba4b65ebb9d9a831bac40f0d33a31e239c45e39f457b590d8dea5d3d0d6ad", "12b4fee6ab56467dc4dc625e4a10d6fe29c871f229328a29fb4b1267c871c6fc", "214eedf92ed57417c72a7b1758532e6c80902af48e640251d5648ace582a2045"), ("19d4d079782080ff9fb2dfcec165f4e094c760c16dc93de4cef0afaa43bb6428", "1c0a4cbb0b2822a012558648fde00774cdf2d72be3c9f200e15cba73e7d8396c", "175bde863d84ea4d4791839d1d23aa1404e17339f5614e697263070b894e7e68", "15b1b3e6fe1f61383b60bf24a63dd45d3b16782a8481aa985a1a0899692e2781"), ("2530d39f6d1c1625796a14ccbdf57b4ce4fec3cd7de68492153372ed2a8b8cb9", "19add36e5af62c5629df7e5baee7768f9fb8e32f5898e179dddd6a81eb6a1bbc", "0da3f964bd9f6e0f64b5dc4a726bbe47a85f2b5a0e62383945c24adbd3239805", "06ffb3b590f8a3bd171ce5098d870d4f823eedd1df745c51580f10db3c2015ff"), ("2fa00eeb5430c08f554dcbded444daad8d236dda1653f3406e33336c6c3817b2", "2a025798a662543d09784c0172d553ccc573372c142171fb53502c589322cad1", "0503abf531379ae553e906a4f242615e47eca511072c4fa2e0ff0c81d0a087a0", "2b03ebe6db924b1b2834c272311387a642506372a6a61a5ababfc9ff13fe6e8a"), ("2866e5c15c89201cbd541f811dce8b5d78b89371246a4098c13662f2e3b2580d", "262b624dc2d7cdf4265f723ef0a87483c5940b890de17dfc1969575d356663fb", "11afb8ddd152637c6a3d7a513759aa6b61ec86285a3590b8e276640bbfd329c8", "17528617148f049b0f37e750432e0f646f4e358b0899d52bbf6cb4c824e26a84"), ("21a47a0c5b57bec50a64388d569073c89b2a76e781a5c36cabb676acf3d6d343", "0e5b77ac5d8000cd9ffde36a13df7bb19914ff40e7d84ebf4c8e82d96050f040", "2eceebb495bfe5b17d796d1c38e4255bd590ea7935c105970b70739188d9bd93", "19960ddd607eea48c93696dec0955e40e05010946be1ec8c1bcafe344bfb6f95"), ("06029eab8d6a8f7f48a9ebb7f3fda71d553c4739c1044535db2c568275f8b5d6", "201c51b0b2b1cf4285608c54f94944f7a84306af55523090f2a28318f26448c7", "1fd55e143dd3f8970ff86f2f14dce6eeb652ff09d53dfea269b4eb61862d1091", "0c64918a72b979e35ca21edc2c0e0b488af148f94fdd1b74751710c94d74dbe3"), ("2ea9f861c5b75f35c671eef092d1374ccfcf8265a8ca01d2ef152e16ab1049e3", "2d753688be233b11df7207f93c42b3af869f778bde7636b7cc5485f8acec0fee", "0eabf0cc68492b08a383fb688d781d0bc94c6dc28adcc4c7bfb3fcbaa1199d35", "2d8dd7d367baee7f1cf1196a6524699dd9571f51463dc0dcc198a255c021ec21"), ("0bc61fac5a99e6d9593466171347695cf17185df968b60373421db5065074377", "2a10f9e256b87928b4e83649919afb00210094b205114315f1a7cc05e9da9586", "0571af0e6b42c91e404cdb94a8e0764039c7a2eb8434fe3f1273962b191265f1", "0603de5a3c2db555f23adfc8f5cebb180a96e3388905bef956ca56ee6b6e9ffa"), ("08f25fefab867ef0a1328a44abda34137724ac041b0b2ff6dda267fdd459e285", "2f262a76381a3a4d6e0f773277e0faf6a926a905495b50e5126636b24dcf3874", "134d9620578d3c76c1091d22afbaa8264cbd4387ed4f7e0aac48f456a26e5677", "1b98c54e8613e75f256dac129abb1fbe67f945ea6605543ca5c982f48fe8b5bb"), ("2094caef102d514438f9e6d22289c3613286bbfdef0cd7792f971458ba221670", "109b94800e030a7216973a96c1f6c425ce198cc1e4ee9face27d45cfca4d1c4c", "01fa5bc2ddd5f25fa8f5125aa3d0850ad5dc323bbf691c79c1e12c55d6f0a291", "08bc063468642094d0c116fb93a34a70168ee78543a86ffca138c033fc27ffe8"), ("24750abb874d28586a566c05b3c7cd80898c3ccfff59a32f537c00e712a0b94b", "0e899b7dd343c27cba2ff898d3d01a26d836fc3b74051bf3afdf4cc5b11c11aa", "120aae629f0b798de2dcdf1e71e99f3e9ad8bfe548af6eb7153c9ca07a0ef294", "24752259d08134667b7548f24e3ada59998052101fd012dfce3e4427c499f3f0"), ("16668efc3b28bdf9633abf127bd72e440d1018df9100566e4a9d5349401807a7", "24b31d5d9a3dc3260f4b485eb317a30377601fc1c3f5ae18efbe6c5714b1e327", "0eab7068dd78d021e44552b7540c6fc495ad22471a6485feb3482269ae764a56", "2ae72026348f5337d40f834e55c8a503aabdbc885b797f5469d082e1bdf10914"), ("1e59606a7eb7f1e1cd36e3d18e9598b3fbeeae760fe95fb94e9414c036967548", "02a7bbadc2b8defc35582aabb9666487964a486c0fcaf7976431057975feb131", "06c62cfdb7c4a39636fbefebd311605c3cbe447bc31870fb9e62136b22a71f23", "114b5afd54118c1684169cab9bd6d2c3516abaef88b9e053717dc720a0aa1b72"), ("1df4c95505a0424ac3cd556864d2e74c427af8767a28250197135f695736a109", "16547c07beb882c4a0386a5fdcedfc354b2f80313bfb8474170a2fda8f5a362d", "2da5fa97a66284c7da27e5ab5b4659fc25bd17725462043d564a0dbb14c090d7", "2f8172e1f9e457f250aac6e085166f9e558e4b0de1325f781422e1a76e2f88c0"), ("1945097116c03718eea27dccf1b1e44975b93cfbe8c9d743e9d25fa95683fe7a", "2b1e839a77fc6b30175b3927fbae24fb843ed5526f2b37b2935da83112f47fea", "1ddbde269e54751ed2450967d6817a8c5d4528024a64c725ad21dc4cbccf7651", "103bd7100c354030be3725558c23c7995c6115bd27523372fa7fe3d9d6ce75dd"), ("2afada7bc1113efe8ae8feb8b141f9ca9bc22715e68690e5ed8ef5527a7500b9", "00f5205883502d18a763cc87083ac4601c78759845078de1bc1c3137d57cdb69", "0aff5341b53688ab12208c9c61674b0386974fb7be405374e85a08f6581ead7b", "01b371cfc7a0613f2c0a7cfad2f67e889d16015e673e75bba25df27e82a808fe"), ("0344dc9c819157f258826aff858f6f24c20305b6b096b3a047d4e9fdfdf49af4", "007d28fe3adebe19a4a6d1a672128afb0844cfe9518063e0c1f94ec45b1a807b", "1a68850173fcdee4ed848daba5908ccaa8fd8af199ae9762c93cf2db6c87b554", "0784b0a77289f332ad157db727df34a26687b6300e094393e8a44978e21adbdf"), ("25148ccf1ae0db1d3f0fb8fb22806dc9fac58e1d93c634b5a9746b3a94b317c0", "002f11712f3cdbf47c7184ea7a456aa19da371ecaccaf21f69f005295de1ccf4", "0e300ce1204d920c58f76b16890fc2cd31ad8c91710d94fc6a888258672eb291", "08e8c3b48478eae82c014c7cbd025b137bb61a6a24ad8827e4c502122c5e7299"), ("111c6233010d9c53fa2d33aabe09a01204c77aa02274db20f9f6c1e84837a46f", "2352feec4cf09f275e95f94fc827e9944fcbab489d83bc4a45a4232389c78057", "211df279ca83f5e21ec37ddc2910eee340536660ee64cf5c87d07fcab3be6027", "0dcf875f118f758053c19b2a13af5116955b61810ebedab3d0fe5bebb6e6b35a"), ("302f891169af2b90976797396371c9394f15d560fd87f66079bb9d32aebe3282", "2338403ee244930d4a05923fe2fd2ccbcc55050339d05e54c721300d7c868cdb", "22f81e3109ab4970451f35ba6bc452e6ad98cae7e5082b5a80ce2f698094c59e", "21aad83190eeb231e906d3af4498b6a1798caec4d587a749cf484c643b9e8eac"), ("0e5e6f0fe0afe76e7576ba01ccbd31e1ef925bcc160a1614deb327d1a17a4f9e", "1b8d2b1c493800eb21a490bec786e6cad60f9b9c18139f6ae1014e9ebb2e560c", "017c172c32154ab686da68e69f1b4680ca2e0142a0536b4f1ad3957f75359169", "29c60c8645ed37add674924702a8a2a28b06f0ab90aa1ddafbf4edf7dbd32826"), ("2266eb815e8cc0cc5501ce650f712674c30e3adff01e59d5b4e3d9ba78bd72f3", "01e207686386cf8732b3ba937f7dce41a4a099918b9310a9499602e7e02879fe", "18900ecf325873acf99d35f71f49d6aa8b957eaab66358f1aed1842e67c8dd12", "1a4ea3869f0cbe93279f1551692e0f4363e16cbe83196f9413a9d89519307f65"), ("22067a4b9f46897665d3b19b38f4d9d2054c9985e6c78f53bf1f718d0c0fd1ce", "2adf016a2521583c572e68f524e1e3ebbe68cfa8966bbc3f9176b9f54dc38ff5", "0523185de6e04c207e8edf97fe4050a355c0c823771ac92da34b06cb6a473794", "172facc5677041268c857854705707b2df6142add0e2ebff50e2165b67823944"), ("2627b6868488c7984ba789e863d3d0a4c6e353c715641659737438ae75af0aea", "1da752a84800622de09210b3695e54363f59cdab7b48cb59ca5598fd246d91cb", "0e05e016244e259b84cb8384845e986ebc5516b97079804c841059f4c7d3a538", "20031f149e62772862d44bab59267bba7919b8fe6b12668dfd12caeeae4a62d3"), ("101f1d7d05506f1870b72ae1b6384ace237b4a451a7b70cb50fb48556b441dd5", "299edee524a39f545c19200758c9a4dddc4668cadc06628983a6d903a72d15e3", "11dd75eb88a7836e9b67a7a3a753d14826ef882b832d338d5be30ec771e71bf8", "2611b5c73ea1525c8de9514af1111ea9956003cbe67c72fba6e79251d4a3facf"), ("0c06ef669fedb077b883c0aa9f43e87125e9c769717bdd2c26eecd8ec4bb6e0f", "13a8fe2ec34384e4d203f21e0e0d1f36bcab3d36bdaa7925f27bf068a8ac93fb", "11a2377c127699260e2a36bda04efa988161b40f871ddcc184dd02cd68c1e6a8", "2d30d5276d29ac6c3d69068278b33447da72101a8605c147b852aa190360bcdd"), ("12fb88818435d803dca78435a4aa482d861977289cfbbc1f1518d0bad4f17289", "2150313b2caf85a03a85f5ca11ab9b8da0f85b7bb43705e0f2952615d5ca3bbe", "1814db5719d7510dfcc1398af569533446376832fff704c219b247ce70cd95d4", "1c9a4123b49119f99698740d234c20c76ea6fe52cc70d9a09a27a57396954e91"), ("2dfa6fb5e9ddc9d267da595e06ca027baa9a07935a38c732b421c56111ce211d", "2b6f0efde1c0e68ab82a01457eb90acfc0ad2d66b56e44c23a61a2abd5af2552", "01908ea685146f213511196c73643187c6f5a96af36ae4fb36fde44b663554ec", "0a927aff4cf2a385372dc4d6846516847864afdfa128b50263844b06f41d8c66"), ("010c74e5925c488cd3cddfbadfd588361d6197ead7b2d9c439c179cdeb20d44c", "2f647eb00679f812d3fbf3894269403a53f8663e33e4026ada2ebe0e338d6e36", "11bb919280f9317c09d0b7f16622ba7b7737befff74be5ca80289d37d54a3320", "10db0599a1dc1c54be25c44d0c13545cccdcd2ffcb07820cb06acbe230185935"), ("0b2e8f5fa59715a69f166d1f8d845d29fffc921f7072ac7f7d96b31b56f665fc", "1afcae628a118917d84e8626f8b8d5f2393255b0a90540e8d42ae8733515125f", "2b51550e7c90b04e373c70de580afcd3a39d49231278148e837febe5f4b02573", "23cd8d81583aa9a05ada2df76fd40be292bf6a23e93894f0cf35e6f4863652cb"), ("08c4705786b60fe5fce5151e474c18d90b1d319cd50a66117e81878cd1699429", "016d3ffc586c673ac88f97772ba4a5d6c48247053a71267e4d60a0d9b3dffe09", "0ffd54844e25bc0f6cad257ab3ac8e676b8acd0f97fec2b2e43c9ef7a4d7a7cd", "2dd2abbaa0dcb801e783cf7334c84fe7c91415cb48aa8cad8151b986db358eb3"), ("1a3b9d2581c28d6bfc9f0cb15d422911e4faec899a6191f01cdee518420625e5", "209e80f36ecc765079356381a004fb9d8f87f47a13654d5a5fad4a65f687ff19", "1a1810f830b77fbc732fbf841c1a60cd0ef13cdfb428dd36a36a8cd909fc7cbd", "01330c7c30c3d02d635b8dd671fb3e89f78760162116c5b236e893c672af04f5"), ("042ad11b02e3c545b25a2a13676c0a8342b870d0721280ba556c0d6947bd39ac", "1bef6edc46974a52b11c1697159654ceaeae8b3badf92afa5486c9469486e2a7", "1fff1929a1ca945bb35868e779a1c645c775418b0c8807b0f2832585e2fb2fb8", "190959057e34f885d7c02fdadc1c8cfb1675bc14e1e893dca28fc94c4740bb57"), ("0d29a9ca045337f54b27a6803cf46a18472539f04c53a5e2e7522012c38f43a7", "227fccc700736164be5a3dc688d8bf6ed1951b2feca5cda903835f5c138aa899", "0dc0de14a075ea522bab456a855b56d569db04c17cc1aca668376aef3a83061d", "15c38250be0a3d3417d341f6da9a0a5e98922bd9ea60a9d6a82414c55dfe816d"), ("23314c3fc13c2aed13d02182758d6e1ffcdc70b44213390777f4e305bbfd43e7", "1ce488f88509128b4977317faa44388049c93e611cbcce58150f5367ff7c3e2f", "2e071cbf1c3973a7eeb8db2a8ffdcd77359eca2da6c58110748dc3b58bebf347", "011d38455855c9a3b45dc7bf586c10e1f15230c440540a7a64604b2ce8ec683e"), ("1f8a96b4172bca502c103e22b33ab1b5be20f9a6e3810c4e520aff0a9ddd7590", "288db1df6b3208293e1845d47d76b8a74bd92c683d67e594f86e667b5c490693", "1f40c8863e4af65b76eb2299bbe4b2f7d73b368afa8ffa520c827ca1a18de77a", "039ae0f40e4d063763bb6f4620a7a1a7ecc20dba75bcc45a8bdd0f7dcc1b2c11"), ("2ca831306f04d4ffd24f54e9477746b82a28cec5c0bf133ab8449c4011522e0f", "0aaf2253bb5365da7a129713b28a8c0ecf9b74a4c720a8d069d7456778680421", "00604292f4b9f0a47879eb0d35551d36e5134af7800ce993d350637dffcb6b93", "0d802d45aad27237e849a3175415fc9d8b8829042b8c006e88039537e23a1f56"), ("1ecd74ca7d756af8ceb3fcf9fea37af7cbfc294ba95eca4be56e85abe233f9d8", "04b44db74f892b61ef02bd44a8f5e688eecc8b986754e93d5dd602b18e7a3092", "2df8d5c948adc79fd608afa16af4d7755a5391dbf753ed0df9a0cb7bf075fe6a", "05b911064f1ed2509efed8cf46780db4c3d615e7428b0a94d6ed3b6ba27fabec"), ("1032708c207d7c169556b42b3f50b5bd7d776cc6a4b1339fb051dbbfa888dfa1", "2f30f5141ccb5989928e4c8eff01ef28f2a3c82f61d7fbdf6c76886e8da4b365", "24bcc73214bb4a3dfb28d0dd58d7bf659fa15c6c852d3cc74afda0c93de2359e", "01fed133777a7d6f676e7a9bcd5640bfe45783238bb3f5a2c41fbb1640300125"), ("0b92fbc0d358a8c30a2f144deb5bc40f0949a06dc9dc57ff276b20bd6d2be21d", "0ae5ae804a3d038f4aca0bf97208831fd68240ea917f99a151774980539ee759", "01f2bd8a808bf21e1999b453b1e011087e000f4d5fd63dded6d57da8f5110221", "0fbd078e9da5b2e4f52309c9f6f28b807eeb78833633ec3d0799e212f421239a"), ("1c1d2c6ee41413efaf8cfe272239ce79e3a0f564c5e36300d8434e1f0e881d71", "05b4f076b668d8d4312d63e659f39d497649078ea9d660376ee3d68bf30a4cc9", "07e593a04a29e5f87eb7e1b38b4e8405d3981c680901a53c26f8b86e34148ab7", "27a535113aa70e50775124ac2c53439f88d4e3acb75e552fda4ff97e66e103a3"), ("0d9146370212c00001ccd4596871e0bde9bdf7ddffb9f091202de9f109a2131d", "0244031f15a91666e59b4802c1c0693193e2aa124e5756daa476df72c3f558b1", "0c5316e80203a8af7a40e579f363d2c57f5a625d6881779d31338e84cffc1653", "277fb394f538325d22bb65f67ff21719cc416eb30b5da3203a63bc5cc29ffd68"), ("10b17fd2826341a8db49297fb4f6fc888decde20557b3d36f4746e42912215ff", "2d10f32adb03e44a05446829e32a23b3174dbd6ca3cc33c562b151252dc79e02", "270911523fbd727df4c86c7811e82168cfe9ba435b8d41b72a256ddba9d13e96", "0443ffa76f193b2dd26a0f4cc0bd7702ee64ba0282dba29086cb82b0853e4cf1"), ("2b94b29d76bb78094c731eb3ab307ccb23f08ac72645d31f61b65e2298b42f56", "251f92c25b43359c8b3393bb0f87aa742dc6edd795d177bfc01d881ecbfc3491", "0c0cb1918ee56682a6e6cbdaca04c5c44cad88e88664f70cb66a380a1960a894", "16064a9e8ae8db8bc46dc62a2a1fd19356d3006a954f344817228252f71c421f"), ("14612e9a5dac0ed29c21e7b773dc88447862615df5356ed47933cbb90080186f", "242497e23adf5a18a1210a2e0e99d7f6d2d362b24e91345c09973e79cec7554e", "1fef96de83f4ee23d3e0bc2df25521e260c1b1f91bac64faa2b219ad1acbe421", "164978a56f56ce47b20e6633eb5fa8f5be575de4e6501d0fb9de984b4a15cc51"), ("00e24b062724463db579b0085e51c8848a4627d7bcdad2ba22bb8ad4465a0824", "2ec1559fe7430ecf8ace5dfe1d7625a3383af04254e2ac8dcab4bd10bea7c8bb", "24466e3e75c6e9619b6f8ff34591830df496f1e1c379c9064402008c06b07fc2", "2046ce2748d0f0c6c41133e6f9fd0f3c6ff9c471d8897bd5eda4ece96c633ff9"), ("20e99ae8bc1f1e2d0f40dc6ad85abcddc70de9929b0deff43adcb57035109be4", "248ecd02fdcc1636f15b8a036935d8f84d0ed116a2f64f6ce6b6dcd5d7c6ebd9", "02a5646b0d690004f0ccdb60874af6efbd83d7aad5ac8c5fda2123fcf20af83a", "08a4bc164bb4f76f6a9c89909a7053f0240af11895734b23a7bd70e6858568ef"), ("0bb1c0f386d9caf8f2b129a6c204139e2925cb946ce5bd681577dbc26ee4c519", "1d15ee182defd57ce674dc5dc176a09ba6cd407579911d9f55f2bda15be7f56b", "0c4948ce8ff84c46d7c2c56acb42578e59dc45e15358d669aa98ae0a1ddc353b", "1c71aa8daa39d211cf0a1ef8a300c65eed08632053dd6b3e15bb939c567bda0c"), ("0039d5f879dda5d3249643048a719201164e8e5fad491024cbc88d3d51d797f0", "0871d54d908ac4232b723045e39d935ee305863ad167f453e709184010a60466", "12927cec14681b51a7cf8b31fccc0a4540f15671641d52be18ef055fbe8a48e2", "0b9b2d9f1743a8c3c0791094a778d868f5746e7424628f2554ff0818a767cf4a"), ("1971968d74fa90371824615fc62e6e59e0fc54a9936aaf40b5acb8eb6a22d244", "103150ce205b21caa2bdc298c100002d49c0cb5e352b5d620ec2face358bcb89", "0c2f91e671a476a0ad8a621071c7a834e581a8eb44c7c8c01276ee925fbe0b5a", "22d446c110728bd2aaff2a9759f16b8e1dcfbde003aac6bea8523d4de97fd781"), ("0222948202103a32fa6ea4f2d3ef23b6833e1211edcf3e219956c50bfee8f859", "2d6c8a612de17588e8c1f09adaaa3dd49feabadc22db62a740350ed4e206516f", "09a89e0deecb585d7f2cd977d55722b8f9e55644ec125a45a78d272221007ca6", "1ea794960bdb65bf71b66be67c71c4e8ff72b2268cef501dc303884a1a5d9db1"), ("0b2dc6305906dd7ca8c90ce270254cb7712c224e4aa8800f1ed5afb7d68299dd", "2a8288a34eaeffb6298d82c41051b8699995c5d1509225a1dbdd4dc3752383b5", "113876392aaa377b614804599ead779a4121b8d0959adb1845ef95d6d332d307", "1b74127aaa24ffcb0435ca840864b210500c833b4dbc3b53df122428b892b962"), ("2000ba4d98fa30970a70bfe4105e84f36d3265cbff8e63b9fcbf9a041f9d69d7", "1843fec9ab902ad591da5340dd219f1b0dbff16cf7a62fa9ee4c31b17038d5aa", "04aafd704fae6c19a8b98a0bd95da95cdbfa39b0f3df8a2b2d0173786a8fb7de", "28cffa9fc6e40ed076fcded739280c287c2f4a115fdc3076fd9e16bbf7c821a6"), ("0e944e0b146640f3145da752bdc127d80b3846319822e6b00c89d9ea3a2ee214", "07338352d3488c68ce8aa8a00ae5ff1b90df0013d7258246e7bd6fc350afc702", "149844ce2dfe1d98894fa9e16fefdfde9b121697b95e5ae16ea4190683ae0e54", "20bbfe7f09989fd1c5937039bb5d947f723ab926889be86c8ef6adb60908f406"), ("0af38f5d769608b582cd082e8721cb26f2d0dd36ef578c2b7b0c80336fba16d5", "13e6e8f26c64eabaa8e8348911598e86885bdf02a3b58d18369e02da2743a35f", "2dfa60a5610deb5b002f853cf9d90e31b8ea79c87e4faf6ee7ed22bbd192eefc", "1fcb58061c290837e62f10d98914a5d9e3c8617a83ee189bbd3c23c621d6fea7"), ("1fc0b8d0cc0fe770e22b6cf669cce175a194fc9e1f3f054368aaee986a772570", "2f90567d98ae1eb4e44ee514d35eb50dc3e56987b4ae60de529ec78074f8b79a", "1369fcfe8b2982f494ed485d2f68eb548b136ae5694964859ed13e30373039ac", "2b3345ec1e8147ac2eab9c8d2c2aa6edf927f37f1a0101290bfe5572710fdfc3"), ("1d1ea1dc2b220466e0bb9972113f6aa095b1d62dbc7a9e7a11d16f73f2bf353a", "23e3360716cf8d9e288fd24ea16e43aa5f8ea52df96516172e9ddf00b6c669a2", "171d61882da36aebce0872b5516d7f2225ba82d531ac7f65dcfd4eb61370cdcf", "0ee4c06b98adeaead5c76d5fabc5f50a46f8f83410719cf85897d564f9eb2231"), ("1e6ba578c4aa2704b3fc891f1520d29ebf276af40de5b8926b4585556b995223", "0598eed57c3dce022aec0d09ce02ec01be3f3ada064a6d101da80a0df56519bd", "05f9e0d8451557184eafb8b9ff0907fec64f3ffcc1b241b0be98440eff8ae224", "257f89da493d195e95c37f566aeda6be733c77a642dfca7d16cb936b1a1d812f"), ("03278f688ebddeecffc2adfbfc6383eab1eeaea74bd530e3ba743745f36dde93", "2a4c0e95195310044723c9ea264fb31559d378d9d80756c80298193ba7dc99fc", "25c9e0d19e26f9fb1fc21f7b3402b991a294b7dd701eb85ce5fa834cf7657026", "1002673ccbcad2fed3dc608e59f086125bf8f1a45f02cbef609f927ceff6fc11"), ("1f88763755dd9eccd1bdaa0ccc78a46f1026e144d03568a37cff7f9133c3b532", "0d1b31c105b22c7b1af6364db98211c503fb9915420bc73a4a8e876ab0d0f9fc", "186d338acadbff4da8fcfb0fbb3359d6711cc9522f4cff2a64734644f678c4db", "196fb2ef2baaebebd7a36937e58f4c5cf32313d1d256f7969aecb2b88b7e07e6"), ("0520262076690ebca9958bf232bc7cf60cb733971cb7378f8ab04c1cf6c16229", "269e5964db3181595483959c18c242091e0f5b1b256a1dcdb340a9e8cbf860d0", "1e7b07beb7c4c360666dbd4b5961b4193e0485271251f8695dafa6fb9fcc6fc6", "187e87056602986db447194817da7bab71b1098048b4dde4e246dd70876446ca"), ("0d419b7ddfa76baad99c968fc9c50b60129094bae174efd762ad2d621e8dfb2c", "238f85980d9c3364b314f582a303c64762b5407d568bdd485702c6c7792d939c", "1830640080912b54ae3f81e70b8d020b5faf4a8afece8e5cdf2cb072edac08bf", "2dae1f3fb578c25eb21e227e722445c03931c78dde0e69bd21e064f62068c519"), ("17f103d4b2e8d85df9a96d64350577905d758f9d773c5ae01f56f1f4378c68d7", "0dd300ba98fb95534e82aa144d70301fb0ee3e95c87985089ee016a287a9b359", "0499645d8224bd96682431b19c5cf3f64f26968d486bc5764e1107c10b27903b", "29b477b15daf524f0cfbb1410a922acccf422219f699b90aef77b7f431f8fd53"), ("2454ffd913cb1456f608850d4b2bcf89ca82ea77cf2f4f5e0500452c204d8795", "254a7879fdfab5ee20250edd154eed8d5c7abeb404d35194e393004e2203188a", "29400c8e65069ac1dddac8f1a1cacd3e1aeac1969161d620d1c9290eae2535ba", "040c311b32cf472b607f25dba49642dbe441c85e756d037c92242d22bb821b18"), ("0507e33c25a133a6ade2f900c1cbcbf09f52a57e06312b714e7db488e0a119b7", "04e77d9b97f37727fab2f4964f630a7e53d973874d958b82e9e041a89410133b", "1aeb77793eddb32a77151bcc18c3e53dccbc934070bd9bbdff4ca56e656fb4c3", "009de15455efeaefe1097a1f4364fedb7991de780f3fe0e76eef96a2c057a85e"), ("26d79ce20774fc6854c2cf9f7b2f269b093dce7c27821a0bd98fcabcf83e8c05", "2183157437c4963848f8d497c4cf216fe671ac2c503598864a8ac19bf11c9c97", "1308eb9a1f6ce484f85280324212473e90a1fcd13c42237968225395bee89dc2", "2c9e3bbd094a81cd286cd429ac5bdabc94bade159c81dce0af54b1f68b048089"), ("1fc8f5fdf60984b4103814ed4d0f3e8f1d5acf5bf584d13d3a91429316f734a1", "2d4e4db0527f2e396d64abff18f08128d442ed80cfe747e1039d402858ab31ff", "1963e9076d7d029a4cfb8c40c8285fc5adf7b0dff39c3d2a22e54f975e452fc8", "24f5156eb304fc420438a70051e8e605501b54b24bb2926d69d3924db94049f7"), ("02d733100c028faee32ad19be6fae7ae83467f7c9bd04f80ee616d91f9ee7e93", "137905af51df38d0b62439ee3f12e4eba2338a7ec50d088bd5ca9b2d74067af5", "20faaf4c874ce3663f063c994f1df4b5710c26b7be0d7548fa3b08d8403bcd22", "0ef11e3e169362c122180237043f656ddeee4a13c39cbe388063f54143816951"), ("03fe6810b628005d7638952ef502b1f5925d9df4d9c68cace94ad8aed78aa043", "22852b0af5d28a1c49c3aeb7574c7d0f6acb1ca6f68707babaecc3922098bdf0", "1dc40d73a40df19510493d1a5945a9d8c95c4a7be8f14dad943acdd78492d3fb", "26be0d12fff8a4cb28c4f8ac39d4f3a4bd7665b708dc508bd3331ab408d23edd"), ("258259a2efbf69341fb3f3523bc5aa52b386583addc5085d2a29c696e8fa8a97", "006ebd784a08c34fc0b874adcadc7b5c23c00344cf914b6e122eb779e4d40de2", "2597990eeeaa84c49b3473cffc37d840065ff233ad3d92be0a33ebbfee8fa60f", "0b036adc29c0e55f4082b23af28d70ec1fca091b72144d1fa1a5ec8434d1798b"), ("27d4645f84c97c123dbaeca4f80af09d05dc500a60fea5e2987e026b7ea10d15", "0e82402b4ea457259b61b512eb6f080a84252a60376699eeb82fbf4094632bdb", "2ae675999ccf393ac32bd176814d6d8782a2588b305619007c9d72d77a71b6a7", "0ce7149eaed430d819eec6e4ed339c938dc7793af75b407639f31bed2dbaf560"), ("1c8c22b3eb84c1ee0dde59cedeacb4c1a51bf9c1af25fadec1e674da3225d4a1", "0f74c733a2702ee89e78c117942f5171f0d98d2f6dbc69b113901f8dfbfda7e2", "2397fd2ab6d891bf54fb666fa1b0fbfb29873c667bc46667fb31e46cf756e6b4", "1bd5c5a4fca418b79ccb26b1f24d37640431a7c9647d3c1a69774a7db95440d1"), ("2d98d308c0361f4eb3782ec5d5b2a851b8d11c82a569aa32788c2cc4f6fc385b", "078a21bc9a51fbeed9ebe410835945b35c40585ef1c1809a9af26b6b85329ca2", "2b6ec8d61c3eb72b5dcd64ae920e5c3f1033ff41ce1e1dcf86f689759cac2b3c", "01becdbfbc4e529bd851f191bfa0f4fcb14990f1bc3e64043dbb17498f792cab"), ("03b473bffa9d56be3fe9d7f7c7720997ee75a26a6d149b4439e864ce417b51ed", "144ce56df8bcb26c2dcc91fdb88bbcaef85c9693a9333ad75b4a6b82d9176233", "004858f0b0943373578a457bf86ad339904eeed57c46d8ba38bc5f8ccc0a068e", "0a134036b5a38695cc8ff87e81b040ce74a6b9b550854df2aed38b5c8db6661b"), ("303203728ab98d11d6a12d75a1b6a3d30603ac3be435439ea98cd4f0bce4c6c1", "21eabf73e65485dea4278ae5af947c0f081e5522e5e3827db7d6aaf22cfb3dcd", "11f5ffaf15ea2badd80369be31d5556ce23939d038ad95956bc0c4a68345afac", "1b7b8382ddb06e7098e74d8bda87f077a4cf3edbe9b39849c11009c2f7c2f712"), ("15146b6b71cd7709229460ae95ad5dd3d725b351be5d469a7011a7878b9169cf", "0e48be2270d2434db523128ae1cc347f13b0d8f0752a32e1f056be44b3de0585", "2f58ef7b074e2d4501327cbc50e5f872a617f6e9d6286d0e00594e6f6895b9a4", "2fe9d20154556f1b7298966a66484f3b526adb42a2c4a61e991fba8e4c0d7252"), ("2ccd5324940728bbef1e4a19649daa91ebfdb63601966a8de23763300526e0d3", "09505d8c058527fb3a1450134b303b7677864e9c3f2986905e38cdc51a3c1478", "155686b8a36281ff85eac5e36db299c7e3065d898b0990924f363970919b06dd", "0057a302a84ba228af987ed7332f049dc92adba10fdf97348df829433d71eb30"), ("12ac65c7a8648496d7217e67c14eb262c1f7046c542097ff0fcf626abc154942", "159dc315106357b1dcdf4a2f8e6d363e109fe40e4d7aca4d8fc9852c8ea33a39", "1e71fd6d98f4a2e258b93fb5c24426b3d396270f1c48018d57a9397372a25e5a", "137bf8bcdf30e9ed52f783879a709dc005a71912829fe6c03d9ab719a51c40cf"), ("1a8cdaefb47084143ef2492f4495a664dbf69e184b2096b0784c7b665ec729f0", "0c1290d1794247df7436188639a6898cb3a288633698d9cdf25eb371a139a66c", "29fa3ad1d2b44ec737d97bfefd6821fa304cfa0efb3d2a69de0eae179448826d", "182abc7dfec96e6b0d3f4d4e7ba23faeed7487154aa4d2e68be5ce74b33c5191"), ("00521809df36def51b52d272ab237c4af10f1e998720b844338c55a5707df5cd", "0b25e5288b7d851ed411cb337f8700f8dcc47085dc09710ac7a1531e700a3a51", "16fdf3c1e9acc5731283ddea145b6ffac35b2f0ac5deab2a9c23a2cf658c984f", "1a401f8e9320aa020cff3a555c312c1841ed22f8965b0d6198ef4ecbeaede026"), ("06e8efbe6715c9ea34c044739c301034b9f71de50e14003327f4ffe5b0900adb", "2ebeec7501d9516b5aed557bd6c6d3c8461cffe9f7e1328e1eb728c0bcd87204", "234b7eb38bdd2c293026646bcc48839134360ff21071aa5796238dd3ec1ae0ad", "1fbc5c5ad5f6894d10c66767e5b9d24fca05e552de1b3775f8629dedc2c8ca1f"), ("0b6223021463470bf772a60bf91d8efe84cd7fdd63217e72126c60807a6e96ee", "06340d327cc90b3cfcb7725ea501e5cbf0895f0948964107f1cbc1d3caf3858a", "198757b900a0ed0f3ea239cec5f8899ee17156025b72ae7bbb2b361d08127edf", "240eff8c92e2d72c472db70fc2f0b829c68b79104d9b5d7b1bd7843376fe7d3b"), ("05329c82cb820d546c76b803c2220778954414d46571d001e9a4ff2dc8d5703d", "2f35a74a70772e07f144f20c671380ef889fffec11a6fb60a7cba5b13062eed1", "01134846f9dc35c582cede208aa0c533716d2614d08496aab8db33ff40df43c4", "00610a93cfaeb8843e3f93571ede98b8af27f0871883913776d56e7285b93c93"), ("15e4973e59ac3534bbe1cbc5063806186a1da1a4d8365cb38e94c805a237f095", "0d182ceb17f51c9c3db39b7ab8e7aa5f1ff5740bca4bad3ceffac22f5a597d0b", "0d82cadb4287f2ab77e27974de4c5e1bfe23d5023e9edbdc3e74e9121bc1aeab", "1bb566862ac8955de8d4d60fa6ca86963687382667abaa66b16087111eaee69c"), ("223b7fcb5c4127d434977d7a64b78031b6dfd1995a5aca8dab7410dfe7ca3f20", "0b850894c7553ecd6c5c1e72b93cd03647d0720c51f35501292c92cdaa552c30", "240dec1c1635d913ffc7ee9a6b7f2a8de81c5ede7c93026d438b12a554fcb275", "1c7d0514b7ff07e3a962c03ff7365cf253f649fdba58be9e5e6886b0ab69ee15"), ("0c6c59200a6497c3fba732e2ec4ede110950f262088ef4eca8c6cd248747d77f", "0c2ad12eee0ccdcb51d05dbe6bd164d2afe3a978b31eacd69d2f26921c4420f3", "08f591dd4c73d065f7ecd69f8678c257dad8183e577574d3190c4dea0eb3b2e7", "2d3b1b5f9d6acc073e7d35820fc6e98ec53825734404ea35460eb09b1a52f5dc"), ("0d187cfacb217b733448599c2833e05af0697dfc3a39333e8ad23381de57fc70", "19b3a4e7d1933327b4776f67d29e9966c7a5a397fa955f8353ba99a34b131bb6", "0cf05e3c25b44ba7dc6b1cb140a28a035b49cc063a9d58c68965e7c7ccdf1279", "2ae90042366e8df35eac74883298db87a13f6bd642b2dbc183ff99bfa2146fee"), ("0c14f48a97181a882976aa8fd4b527f0fe9acb343279856fe29bc638b92b37e1", "148e302d64f146612bb45dc419079a3705dab8901aa9ee50b83b5aaf25405b8c", "10cc5a6fd23741469b1596d34f72dbcb9fc27e142372d6a762441fcb4fc2a166", "030a0aecffeb975d2c60db07858c6ad4ff603e3859a06bc0ba1fb08eb16d43cf"), ("052b36cffa89ff5db52eb11cdb3a7d8b1cf6a3e9a5412b1a5db3a186a1c795f7", "03746d645d46e9359165c1ec3e24532058595ae27815509a8b896b5ff4f01e4d", "07e1bb5cef5e215238217ce3c3abd2620d13ba8009533b40af5589d113e32b24", "2b1986488dfaba3631cc68a56f80d340fb22334c596a241a423bf7a7ce8f8f15"), ("0d683260572e2d648ad5f0f0d279353e7f08338bbe35d18b59cd9e71d32983fb", "291b4c907e06f785b4849c0d8ee4057a49b954227accd3f3c5d4fc99b968278d", "2c4a452b5e0e3a35525f4fb962072c2618db2e01d0feec9c5ca026017d1ffaa2", "2ef2733cafcdb61b887e48b5712536ae1696820a555456679e123b81492b72b1"), ("29647b07048657b92f157739ae268ab5fda9948d16a919238e324b991f5a3d3c", "2c99020fae3e624deba1095f125affe0c3115881b2254984723892e0e988d9d7", "0a7f1c4536ac761e5315f0e8fb2acb4eb62ebe6dc64dcc2a94dbdacce8f024aa", "04f7e376febeb0e158c23f659c93ead5aaea92de7d7e6afd501d544c51028852"), ("1336652f384068ef2a05c24968ac535d84b0158b17be22b685b45c38537a48ea", "0d0bf20f0bd3ce73cc76c536517cfae64c064c5dedfee38d8f61bdd33499d970", "013bbb6f1cdc9968f1a0133a153d2a5db438f945f0052bbbbbd162d62df8f5f6", "1f64e8d3f9a40663ecc19937d5de46a5c3d39e3c963a1f6c647848b1b6ea3178"), ("2772b659e9aa3cf9073accdc60ede219cf4fd07352f94850e420599f2897b71d", "1d97dd1bf81b3551e8ecfbf96fd1a9954c924cd2b56402b5274ee64f74b882ae", "1d7945d7475ac54874413189886bfd8cb6b4ffbe187f0c81b2bb09fc00a68c54", "0b832379ac63d253102fe5ab84c42e7a1a79ae291ee6b3305d058894315e5de7"), ("262466e9a7a3212fc66c31b563eae5f99e444103ecbbffc1d25ae563af97e853", "0973dd483c9d0bfa2138b3f80047cb2dba79080ba382c7964d89bdf509679dd8", "2be7a68727146c47e49f93023f3d915caf5735c32a897350f729bb872209121f", "0671a1d9d53e91c1d7fb6f200fa10efcb95a2d86f89932d3b85095dfcc076c6c"), ("22ff10c8b2b1b093da5945e16790ebe5a06930c235318868e53873ec7f4d25a4", "1c9c76eeeab8cfb0e4f84b25fb3574b4dfeb41e7455a636ce840b060b1f28124", "2254ad744396e3f7d4e2ef12ce4bceddb549b2931da636596add1e3f3970c420", "1cba9e6082741dfbbfe0afedb13fd87348000c4dcfdc27084b1cd725e1162b3d"), ("0becc9dc2b8e5c99fed30426b8bbe3bec915eae2528e94e64f84389681ba18c4", "2154265142079aba722687bc1804a356bcf634a4cd01bad15900d8ac6892bca4", "00bfc204c06de5549d4102604b80b82e9b6a91061c4902226b373824ea911b58", "2eed437b4b960e2fa91b587cbb5a56099a591bebe1c51f281946d5dc98bd6072"), ("0e3b6779ffb420944fbc297b364ec9cd3bca21033b3c9b097fda192c913f1934", "269840a53150cdd74f60dff97c706392679e7fda0176985a640407f79305e8be", "09ffee78c1c90f9a172dae858a9888bbb873f85a55dad2c3475cac8381d696ce", "1feaa30facfdb66875ffdc9108e791ea868d7d915b566bce4bcb17850c29c5bd"), ("00fb43654cb3516816a31b381111e7aeee18cfb1c397acfc9dd08d957e3e041a", "058fa6cbc12d728d59b4ff951a9e611c4ba1ce5f7830e9605d66ad5b7f916c0e", "06bcfe0712a790ba4bfe090092148cd3c9670c3973a4783deb2be29677947ebc", "27ec076c1e1d417bfd5a042d528d0b3cf3145b1c3960b2fc31781eb3d88e0c2f"), ("114e6232b50b8cddebf10a5b7095d010e2df2ec9512a24d0533ab9f42d9055ee", "0411485965de7a3962837ca0b5275ead8f62f6567427dd788e2c5550aa1ddd02", "2eeabfcd7bf1e3d92689333441d2339e182c26eece8aa36a29833e675cd062c3", "20a05a6a92e6802d4179e284d131266ecc4d10089fa93ea4d66364811cda3936"), ("1c2db1c3846756773c27a0910b7cec19a72e1caacf574162e6a27d6cc65342ad", "1fae670782cdad51ee42a84e5ac8b8b4518624fd9ed81190d2e2055a47e8edd9", "2ddc5be0e5952af208572e95b6e6a03b92d911ff661591d975cd4f56a29b46b0", "2169c48fb3bb37f5207ff6a9a14ac4c1262aa195124dac29768d02e3ce629649"), ("081873b87842a612fe45ec440e3a59968de2bdac238f0cfd678de6a9ae2ab63c", "2c749bd3cd53af2739a0c0b0d4ad705c26a6e045e216772f718052fb34604e4c", "27b27872fa7168be4fde7be13496e8f2898f5c51768581fc04de84f1f696e430", "2f795023bc1667a0748c4e87fd72b1fca8f6e4d40f9f924bc9145b33d65b9448"), ("25ff9063ef8c311d4a200fc700d387f4c6f411d05e1b8e0054ac67b881135e8d", "144afa018dc191f6717906859e641ef934976422ac383854f3fef157b7a50cdc", "03a208f2fc82fa44b84bc4ea33e0162b8af3a91779bd1e47185091ce00196d5e", "1e17648d700fc6581aeae031d788c272d0a891194088528f173bb49830f701b0"), ("1319e76c48e69622a4e856923a12048ce73ba5849ccdbc1e72fec2ef7873a859", "2f2c1a07eb561376bd1dbfdceebed401b9ba8acd93ca46e27b882aa98aa5c694", "205e4389959f12adebdfd56df80c002b70975e983323a68328bfc93c6d0b942d", "2404ba47e2fdf27ef8ae216fba3be9ff3ecac5a8bace71e561795e04f2912db5"), ("2ff90bcac0894d7832bed1c869ab0c92cdac90652f1e402f26c7706a05d19807", "2252b8fe4d02bc05ef34cfea44d23cbd54ee92a84c07cc6ab991133ffc28ca17", "26d1998903b64c5eee3f993cd7819d1de1601c397cf0dc8cd36c8bda28c2814a", "0e69430dcae65248a696c395bb093dc398e970153f60803843ca3e00d0e7a011"), ("144d739e61750f17c86af203103e89a9264cbb293184d481c0fa67b176236534", "003949c115c6a179a229099ca87e3fdc066671bf8e3e30ce0a6876fd4174fc3e", "2616f2c0e5384e47a7b0886eb2b2a034cb95a40b0ef8e0dfced620d7d85a30f5", "0ac501920ae70753fe80fb47551d814b7e08cbca00e07ed884d60358bcca9c74"), ("0e68679dca11efacff1c481e987edfeabfcd53188744a449176673667d038031", "0fb48bb37b072c0e47eb1ed83f4f067c66db8146c313cf7caa86641f526cf0d9", "1dad04f57679d4907b918f9dfbbf44da13f89b1ae823456a6bd6102ba83068a5", "2031648978a028f69a7ba21d2c5dbf7f6060b285509d7c7f6ecef5f50d469214"), ("001a9277d657653483576eea7c8ce2e9c798bfa8bdff55ac7d1301edf378af07", "2492c6d267bee1fe24d0e93558d4341641edc6cc25f4bb2b97242bab89cf6448", "1dabcd7a77946b6408a5191b5521612edc71e6c9b933698e0d873d36b9122869", "0013901d550d857017cdb1af45b1aebfbbaf4dd1fec85856a8a1dcd4f7c0471f"), ("229fd3de640919393561cf94722f71189e5be73f73c23662ad58c62d010df39c", "2806456a49a12cf7c195593002cfb41fa976f844a4b39841550a8f60f0814910", "1d499ef922bf70757f0c1349277a2b4d6d620e2e86686d731dae62fee8ee03f5", "1ad7b975cd7bbc9ba33241213ec5d95d6e5f020b33c6bf2b2e6d419c3f2ed89d"), ("1fef6610535753f953f4ca2e97afaca3ac2b971643b14dbff6e6cd394bd6df0f", "2c593e0b397add108a4019c747257d78a94ad82e9d5587ec1608df3bfc197cb3", "1583fd654504cf2ea27b88d01c32175891fa4a72dbdaa18bc1cbfe00ede6f93f", "1bc8cef5517d4adf2a8ebe457c1ffdb581f61ac6927dacc34679354e68ca5fb1"), ("18f8b283ee4003d1f2293ace808ef7ce6646520f1d6d4e0d372acf9975166293", "126e03d1cc950082da9031e3173d0ca215826f5ae94f0e495b3ccce1ed39dcc8", "2bb7864897b49bdf1d21ec24fe3b1a155be24bb1ff129f6ed844619c52b5d631", "3011b4b1f6bfafb35afa23ee761dc5cc1448e1b86f4e8edddac7b6947c39efc2"), ("262f57a5c230b57c210faab937831c817ef35bd3f8a11ebca666b2684882d2e8", "275347d25bc93cf613e9a0ab8a0981196af7acc124d73b673e8209b574e67485", "15e8fdd4e2d4ab9259a7bc16b112570a37d8521c0238788d55d724f904fd1c78", "07f06367b3a91d40bab707fec3a900f5da5887b5069cfc9e87acdf51072ac3ef"), ("0fc6f142f8e991fb72399c0e06a9417d44d3839bff812210ea727a813862e72c", "10992922f92b3a5664555d2a70d56317bc5538bce110d9542ab4c93192d1c89d", "050ad145ae9562c978d55fe4c432f705e45071c70438ae4266d5605f725cf9f7", "1d5cd81c1cf34b6d2eb76ee6f026ba6d452b5d9e08babde22dad213d03fe5d84"), ("1d2baa96a248d1c4bb799f3a092aced7e7b84189f374f20831dca97cb30620c3", "0fc1ee796f0992d342a612ffab03c352621b3e13325b60786c68b11e6b5be094", "278e8e5b89b5836e2dd4a56b83cac46d759dc45ec55faa522cd5e3bcb4f60060", "043fe13c87cd0643373a6c45969fe15c869df3cfbbb5cdfb4794d6a043eb4391"), ("07be43cbe0b401f2487b4d73600b70a60a69e9349972ca5452566afe182cc063", "04139b1dd0e10c448cd95be8f6a9ed1592c44a2770e99f344c1eac2c26a7e557", "202b850f9366acdd6ab6e3f40b45defdcdf30633094ad38a4e67f890f3b8ecf0", "23a4bba839a731a13f41619e61905cb187c6ebd2aa356e47b20fb25a12c27ef2"), ("1970531f61d61cb1922679b4984739a7ba7f988062b3896b00e31f24f0252921", "229f66b6945902103f7acf784cd371395c92129e025cecae4a51214f54454546", "0eeaf5db30278d6a89a02828df342fe64dd0bfedede1bc955a1e495f941e15e4", "1843d41e7832432a6b0397124b1ea235a53e717d3dd4f7f20a809b0e18bb8afb"), ("15186b8974c2080bb3ae9d7bb662516fbb3546f11720901b9dbacbcb49441b89", "06de85db54fc81f186f49f3f4d99988187c151cdf76bf9b3f278ca54832f76fb", "2fa7d926dc9fa3361a62a3bd1c405a79b61e5b38137f7f3b397f48b3dcea19ab", "2a8da62f9ebf14e72d69b0f3959c93c6ce9139a0bec9d012f559eecd6157bb74"), ("0bca83ef1eeaacba786f7dc4d2bae29a0823b0cab0afca4faef8f5f06fc0a43b", "01ec8d0a712c9b3a1b3e248c8d5084c9a4dce7a3c57f262dde2f901c8e4e6b4d", "0120e8f24c67a1a63ff4973f140c65fa42fd89267bf1c4c2ea40e40ae3421b09", "03a7d8bd973340f44bc32ae03e3191e85c24d2322573bde2207661f5f19904ce"), ("0f2e4cc3a01bc9ae537032ac9e3b0eb6c2ee2dde721b05a8a3900738c2dfd788", "2ee72131e3459608b639fa4b4f4e8f747d7cb679f1e6fa62b239ec1f4d784096", "1a1721b49488b3ed0a14e8e4767c4d2bf1b9a1bab8ceddabc7db5a5184f7728a", "108ae784d38471a926726a2760dadf5dc0a81ab5ccb37d353d25603cdeeeff98"), ("0ed73075db97664bf7a4741ad867e5266bd789751843a343fe6b5811cdd2a98a", "09d77af4366f2c42508aae5d22a8b2430500221a71a67e98d131ac3aa35a6029", "013ae0eff0ebb958afeb7b1bd20d1a4b35a85dd7bae2b12e14df52f82f289a1e", "2392a834e14bd3d051d0bdeed8d77ada7f3464776864e23e54d1da692acc7286"), ("0683ae995125a9bb10ccec8eebe1c414f506092d49c0a34c2ef9d3970c568efe", "19b5f665e5ed127a6352cf3dc74fa6c3f723b174b9da82cfaa47f48a11561400", "2ffd56daf2965f9635e750504cf291ddc92288001d235be8b6cc63531cc0ea5f", "297e071cef7d1e56e4628a6a3a52524421c7c78d16024f4f13f78e2be7027de3"), ("156a1de979eccfcd51c3a5f06e2e6f4d0d5edfc4cf32e470c4118bee0039eb87", "26c6ccb4effb20409c93d1a44e901ecec157b916146c07d4f27dcc53124c3e51", "1f3e6ce47b08194437a2fa6cc9f804fcd699f982c20812543cf0d6b681ce795c", "2a0fc3b73ddfe4a24fa4b5a6e422b49364980e0067a4f43d0bb834b5f821f412"), ("0dd86d27125860b07f0508d94677eb5d0a8834b3d58a5fae91b89c31d7b748aa", "01863729ff3912444f5b307764953e78d60d6ec8ffc7a0979eb5e567cbf52a64", "2b5530c308ef4183aabb681c0439ee5dd7d1883fe6c36725fc132b7dc6e4eaae", "065b66dbebfa9ff4b5be08952e560a2f3a14aaf96de2e97b4cc18386bdd68c4e"), ("1cbdf58b5041b511ea4f10d90f999a5e602ad73df83a0a2b9634d8989850a703", "1d2aab9c4b2301a7d3b212a31325cc98558ade355587fc269f314b71d7cf496f", "11cad361747668f9d36f790a78d76af240ab74b7441ce9ed4e7f8373fd67c420", "1c34d1b812efab7393f5cf14223d31affb0f7272bc09490b4caf8379fd8d7635"), ("219220e0f782e72a76e47dba107c65a218cfa53c5494715f20ddcdd16544384b", "0abcadb413232e1c81de8877e7ecd9e85f411fa7e994b5fcac8b9513985db2aa", "09127d57b9eea20fd24af94aeee97f341feed02140ee74c3b5b93dc68c79fdb7", "2a81b9ce071fa4e520ca49c048c9f6b0e5f23b8a8dbff9d0ee0689e33c9add95"), ("1d6aa0674a9433db34d91a8af3e3dac802ae8dae7d0667ee10481ff6bd14d426", "29ff3317f4818b1733f7382dffae438292bde8ca5742813d876aa05baa4ad2ad", "27e6658e1bebfba26ae3742e3bf263f9d0369b7cd2ee9433ac42b2c9e6222788", "0ab580c2d4c88180f304a7640f48c311d4806041c5c2887c696152cf85f2f5a9"), ("0ccadbde0c51a55b02bed0cca3675e13ea7421da6a5f4bc0ffa198c520501c68", "29456481b8ebe57063ba6a5c3d566fa035cf0575e92d80e831dffe53f24670da", "1740c777ecf140cdb845f6c254cf9cc72f9bc4b4600f6da39ff9c4acadb459dc", "08cd1cf8d0d5317bd279bd6b1e55dec9eea72fd3e4697d2da38e35ca82059bba"), ("26adcab8f57f40b3598e45250e383fc711cb4aff684060be1038a8ba57fbaf12", "1065bf1c6b0cde530300fdb6f4e3bc9b093939b5cb772b60e63dd0ed8e5e3740", "012c2f33e2bf8db219111de90d67e734dfa7e858ff95ce77afc6a63fbbb21c64", "2d00acba96b90cf0b5457aba2669ae908c3ae097b975922e8ce425cc08c7abeb"), ("1c39d52967d260c1fc2917310b99d170dbc0487224e9a309cc354a6bf9456863", "1f4fa70e049182e1103f553ac4d4dc9328e08194c0d593b2eef9a5d0b55aeec2", "069cc341304f9002856fc4d8677511051113686fb7f8d8215e9f31b20ea6f021", "11b3403dd8a0e406c7e7dedc00fd7534cd505520eeaa80a0031a7866535d00b2"), ("0d840e1d9b6ed72571029ec61a07b710c8dcfbe8a12a62aa03d5812f15a02ec6", "05409b15fe342170ec4100f680beee22cd64a5f64bfc012526e6b6b3e6fd9691", "2c82bbbbef896fd7052d7dff51161278f129c16b10b71915759441fa772e87cf", "24b30d9c8604bd2a4a9196301c8d22e49e9f7c353f56a45e1753ded1b92ac7c6"), ("2d7d546660c67b784a3e3f14e6827397bbcdfdc8b228e2e18d1b10d7032e10b8", "15cb087c472959efdfde4798ed59270015e47a9cba1193c8ac3f3ec287cc64c6", "21c55019573d233621b1db8c0e11b0cf9d911c5d1e960459806b539269ef835e", "0f5a5021b421b88ace9b353e4ae03717c0ab6cbaacc68cc5f5a382106014d54c"), ("2b393916c52cb51964b30770af018e57ebe5a19c2592261b63474130db6ec41e", "108c1bd1258753917cd32bf7d3470e2be4fab9de44d116d6af3eb7864f8863fa", "0865fa7a56949491e67ab7675169976eedcb1629c2ce90893e2a694284773684", "168ae33b4c3281719b37e72f1106f717816c7a728d142b455f30743342edf22c"), ("1476c1827da835b85ef2d758770cad1cd66f0ba9be36eef15763b70e32a78a8d", "0033256f0134d8fea4708711ca842bd3c03b48e83b0ecd549dd0ef243d9e9b5f", "1fd29d1fed8df39b42d75289fcd6aa486eb714f3899a8c790ae03ced4668af15", "1aa3062219e7188eb83eaa6a99e506209a92e3ef4249d71d878a2e2aef4b058c"), ("099984d602b79eea47f40a9ee63cb6c36830b7e121f093324b5f731180a1a23c", "2e97b3d70e4fa5e0c3ca4d28dfc209c34ea6e7543368cc45b38193a073a13d12", "0db6a0dace05d9d7c306f5a0393e646cfbe799cf81ae359f3c6a724ba5d3e22f", "2c09d03474e43371f8de66c8a76f25bb2cb0e1e464b8a5e4a3c6c12cd0f59013"), ("2eaa0e6a68170c0ab44634b3130c3a0e34aefe51e0394a72b899dd725f901f17", "26cfc8c803e3c51de87a7de08488268a4dea608a1dc16efe1abe00e037bb3e70", "18cbe57d754e0e23630b9c82163a1fa583cd626d9b42f10141a4adc805449aa9", "223b3006a3aac0dc2ae7a4cb4b58e534838f32a77830a3187fdd58909127856d"), ("04d21c5af1270e31cc671af5778d4f50119a5defa9e757c98e0895abff53bc62", "1bd610ef0e2e273bca44c6a29013e19339b130345caa97ced123eb73e2f9287f", "270e3cb03bcdf6b6566169a679a9dcd1020c2fe8cea011cd6a08c311d3d96cdb", "015b0f4dabd30d68fa5d542b2080c13dc63fbcb51d570ca57c5b24d8d9d0bce3"), ("167df89c262fd0539893e530064e699a36e5a8a8753ca4c066cf67a73693f95a", "296c3766cccffa1e5927932bdf0cc49a73d47745dcc49a6dfe2e45238b5ed19d", "0d559253277d43f5e58547fa777dedbfac51957c6666b6d9db2cb3bc84f4067c", "02962765073b8e7e226475271609f4108ba9d827a9fb455c5b63a8f799df4cf7"), ("28fd6160b9335e777740d4ef383e2df7fea54176d16d5e0f7c7c055d25762818", "2f7a4c06a923440cca48479edacb7e932deee282f506abc625bc10cdc4884454", "2bcb18e7059cbd1d8b0277d5486d1a352c65bc874f6db89e6d439731267cc3a8", "21469ba684a327e72b0b9c0542729b4a311892cdae933ec8591b157a3608dff3"), ("0677a486e7ad71edde773b087963f32b70a8e0e00e49a67006ba6fd3ee0c0027", "0071e53e81f7999585952e47da2c6479e4e982b2ab5bace07c91de8217b71ac1", "2e993d6937249b1b2e90555546b8dfb4c6ec40cacf8dd0f2d9bc64877f7c5d8e", "19b29b029a0e3b641f9955c080ab392ca1ff922b4bc98b7d8ad0dacd379e48d4"), ("1f8c8fe322839582e32f0bb2e1c8acfc15e37909da1802dc4f8657e2ea8b0981", "00771b84e3a26ac90a9a198fb2afe9227faa549bf727390398e9c59cb2d8f8fa", "1aa4c692ea19c980624d3f6a83847a3a2f06c20b6c232dcfea7d9fe728577319", "226df532df2eb9994c176d3e9fbca179cb973d004426446b6f463968e97560c1"), ("02f349f2628cfa8d2dba3aafc63e87330971bcb5026508b798b537d29bbceb4e", "174af11ae6b24eb7d58a98157fde164a2f54da33cd3ee59a71e18e618835da49", "0dac9c5afd46604b71620b9d24e0eb3db5c9b6798535246e4ae89624e3aa51ed", "043a48404b9ea5a4250ea312e48f6e72a6aee273f70906a48f6f06fc35612804"), ("1529f9498716fa6e609c355190d63f25ea46685af7acd012507c1544f60e9c85", "14e0522863e0f2f57b03e74667fe8326f1e442b2cdd30c4556a3e76d6e973ab6", "231342e0e5256764e462f32611087a6568ed4a911693257735d1e85ea132089f", "2c3e8021564a2126baa5f4a262e894dd9b0008c84c625a09c2a0303e7789998f"), ("1baa7bab88a724bca32e15a4f89c9573d85cd8a8c4123586f2ed8464d9a90de7", "09b5daaab138b289d9751e748d912a8077f17856200e5691b3a4d08dd23e9795", "095f3909a0053789891dd2f4a5dc1fc123457a694f6dfaca8704cdb9ba0cf731", "2311a6ce4bb72a81c6df30555430cddb48d9f63e22f545a733ee063939a4b54d"), ("24802e2543447e09523c0553f0a6f75d1ff9c1d36f8bc203bf57d85eb0f0d572", "0ed4aa437aefcd5c5e2263e94ade6d0c8fd66a6ade9ee7756dd9c80464880c44", "0f81e9c178db7f41dd8aa0fe11088d76e39f13af5d480f0c3be10cee0a71c03b", "1a4979d3e5d36436b24e46ae10c446f2530643af4e1cf7ee3db5bafd755ae021"), ("1d81b0e1ff11b31c34384da3ced5fcad300e69109db7a9e9e7f8e0a0a25fa84e", "16921a1bd2153ba939db638f2c636478d3c45287b4f3b9d10274d6ed4370148f", "0401cdd28d8e1602fcc65a12f93f4504f4a937f537051072225f4ead8c40bebf", "24abd77379476d4ce563bb66d382d866ed5b43bab3fafef98522570a8d220964"), ("0d329db9f65a1a27c3f04250287852ae7dddb2c9c1957f0b4c3e46f33a19523f", "26b39cfb08abb5d8c73cdcd0b8a513ffcd8a1bad3a190c76a27200627c741aff", "17a59416d1cf221c57dbee964dd053b166026f76b3d8bd03606c8bfc1c6c37b1", "013d14f37b2d9858fe46c8651e1a971a89ca5ad91f33290af08b1f3a5ce0c9a6"), ("2c3ead376619c6c769d6dc4421bb992b587abad16845a0e33d7715fb0d9b2d5c", "287411b37058113cd149e50ecefd74cf62f39e5f74ff42dd22bac5a9efcdab5b", "0fae58d52bc7e1158bf4afa3491ab431a8eece2814a6e3ca7c17542b6d275cc2", "1f4f72cf0f2babd26dcc954078ebc129e633c0dccdeaa9304e029424fa1da498"), ("0871d9bf310a212ae7ed41658d0cf08a4aa22feba7c7505e1184a8282fe00a97", "2535b0ddde0aa5cdb4d9daa141a4a458908f31e2ac1fd9d6ff99273b97b44ca6", "04190cb30347ed9dcb81d4ef0e8e74ff1337c84f0fa5144ae29728b6d052244d", "2ae745d92d0c9fb8edf0e2cdda4e73d39febe5de3faedd56fe1a35d392082b2b"), ("07c2cb01b819942fdb8bb72c476a28087b8f1ec3434e252ece9dd8b5096394a3", "07514c0b981e7028659181ff451d8d2e7ee17e4cd8b2452887a0797c4a7b7bcb", "177b592d6256747dbcd543a50cf44b1c62245cc257c610cbeaa47c7076d5f056", "08619e330fecd74eb02d704e0a684277a01879e25a46b5b31f2aa43f2e2ad0bd"), ("2a7e0e638e019f4468e0cfef260fa543dcb476a71c87f89635271e83c43fb432", "1ab3c69ff59e473889dff6564a4fa496198513045b1fde6d503c9cc568440a6d", "2ca47b05a5986ef33d89adad3bd10c2e20c691e52e8285fd91f5c49f491c2e22", "1fb2493cc2c1aeaa45b3f90801c2aac27280d08ffd0a5f65e170b67d2491a65a"), ("21b16bafeb2794bd82278c906644cd6b6ec9dfcff6ac84fda218376ee0b19d09", "2ba017795b47c3d12da2198a0ee8d1a4f29aeb81aa63646a999c53aadd8cdc77", "14ca9146d6ea2e4e2941a0b728d36952447613ce853bc4b5c02d8a89cc84953f", "10f00ba6efe3aa95f772d2bd9525322da2545dd3e3e73901dfd2a2ce833b24c2"), ("1612f30aa781eff2dbe393220037e49afbb8c054d655580489938d2bc7e3fe37", "1e7b814e18b5cfd4858522c785a407e5515bbb549c641e79454a2285d8dfdee4", "28d9d9463d52ee548ea2fd2f51b7b5da58af849fb93d1dad898cca4f08ae2070", "015b6ecaf414e57e5ba8ec65e6f1d1721d7e2efaa1d7a6cb7c0f25781589c625"), ("260dde57f37b223bdc6543309c34d82210bdf27a4e084b93f3dcba29d251ff71", "09cb7737c505c94f3e8f4d5fe3c90a6b40b243388564c03d0a0d7594719c9097", "211f35fe714989e87d780bbf24eb3afc6fa90e82943460ed96e2f9ac0d7dece7", "0982fe6b00047bf31a9b3e39367dfedc3bf09296f3e2ff2199c74431446ea3e7"), ("2a674d36f10b250c175061875ced773124d65f7ef7c0ab51b15aab292050a4d9", "2e9157bbf853a40aad77a4b33d60f67517059882b1c0f88a0498ec78e112cc2b", "2d072c927d4e1ae4566fc45f9cf3be5c36f2e51a1e8b73441e182c14d39fa19a", "14a1e4bf5da58a86430d8ca305c86aab487a943e00c064fdfe74ed78a2b17352"), ("0a9ece47d064b72374dc0da627dc779913cdd0f7ad329f2cdb7a5baa6b2cc6f5", "155fae49526c376dc022441ba2e409cfcac53696bacb65b1c473be25b9d18425", "03c7932d25cbcbf340760f3a5a958089c12b7afabae9f4bbdf95d7c1d8e05e7a", "01d46ce9dbad0dca2f42a31eadc04c90291fde9766ccbc725d9117bf07fdb8bd"), ("2147f16702700de7b021b0ceb57aa8065256dd33f9243d470826af16cf99bce0", "05b95199c54d572e1bdb6860e22697405bd7811ceb3dc23905fd5bef800aaea2", "1af87be7afdc88a9cba9ebd595899b5a00749af872297b3bb24bdcf3c9f5bbb4", "2a37f18ded8b8e5a3d5c57fc12a8a97d9cc9dd3f280012a8ead64df9bcd52ff0"), ("03e5540d3b399ea7a7e526e8b4afde9498b284b4f653e3d43b10a9c0c9f0bb45", "2e48205754c0b04798e75990aa8be73fe90c14e393d4310178d25be8762d5555", "040c0b30c7bc14326857fad653e8ef1acfcd16cb4a3367f8fd2a6ce69641278d", "18b803089484c48c3a05982798c66215255d59eeb7fdc4f19b7018e2cb75e870"), ("1fdd85799c10e6f5a169146a71c4888c50310b3aeffa23de85425f6d06d59fa7", "1cd1f7c7d842846a7c3a09ed4810f0d05c571550d3aa4bb24ad22a8f3db6f252", "1b084d20acea28fe535a7590d4a6fa9b5f7e9c3ffa804f827e4eb5badef7c37f", "0c03a141f6845677c6646d5b609e8e86cd5e5119ac9a44a9f836e5598c98756c"), ("2e43802fa7d95f3571607443b761f4e174fc31fe22ae9892924bb360ddcc504a", "241fb7b0d754386067022ea8449a9320b640e2e24ac12ead1df0d52ffe46c40d", "168b7e1038687a191a9942768e6faa7cd41bc363be5f972c08f11885ce078991", "1a1c10f8aeb3f39abbf7d7822827b6b0fc5a9ce816d4754908630ef205483818"), ("2b143a6309a1fa940e9f5d751f6a874f30a86c8c253a054b088ebf618b699213", "0c937e1422f5de2b8bee6e73aa75ed35f73b2511f5c9165e5fc5d08042551460", "1b24eeff5517cb6867b731a5b1c91d48c4157e4cca0eabb39a6d0c67502eef28", "1a9a1e9e89a8e9c94af3ec66aba4c7e91cac5d96c1b702917c2319aa3e8d5209"), ("2aae01dbdc8cd4b8a20d9a8ffcd7589626dbe06c3f664828f90919fc88445f63", "1a63e92e7f45efa245b022619db61c91ce8eb0fd07fde8cbe63c548c5c9ff286", "14b0c8991e507db1d60fd9496a6555cf7006aae73ebc061fdff2fca76ad76b02", "2b7616ee5c7dfe8501edb168d9e6fc060f2d264b78cc64852a2e091cac608836"), ("1ef5da1325f431acf7886aa198b542acad9eb03203442b76b9c5d191adddc365", "2814e261e5efdb9865c2db255959f89c8f64c9afa6a6dd8199c24d8646a5dae8", "249fdeb1b93adb70f3802330de247498fc82ff1b136b8efc664e9918fab5a919", "2687edeae2150e0a3e55364dbf8ffe9793914dbb79c15e52be03ac8e8ca7ba28"), ("2d532105474fb3b4f1f7b9fc3421101ae66c88c684c36e364a91b3b5091fdf18", "191d5109c5a05f4edb6a42bd44ca5c43829ab6241b9e0e03c989c2022ef8ec43", "0e5fd2b52bb9fe806f8ec8b3ddcc467d48b0db78936d0641ee747df22f8ec381", "270db6dcfa2bb1eb6e028c6d1ed276031681584d01eb5100c8fb905f17eacc1f"), ("26577efff331a7d1dd41450ca7ee696658740694537090686d4bbb6cf945a230", "2d464fe8a583fc09e46fa1360e4c46b4c5923c74ca92a9c7430b297a76673f1b", "08068ad3b992830b215b5e97e95ac3c627791ff5a77831a25d022e642c924ef0", "0dca570e03c8201df16c2affba583e6ee27a8287819a7427ff77954ff6cfc100"), ("03892f6eef04733d5869893784ab12506b2e5454892d3762f6d8b6d7b3c24a5b", "0b2bfd37c139f6095ca04b9e73254a0263875e47527e18c4a989e22e8585a2ff", "2d41fe21176a184ad71171a6f6cecadcb8c4221b6df384859315b2078fabde06", "27ab1ce33623c88d6c4bd2f861da3d4520159a474f1ac3196372a7c41f3cc0cc"), ("14caf13777960820de3f0070a2e6f25d63dd8ddbbc30d4bce380782f2573e7d1", "14d42a5563fb7c0b7a6eab010970cd915d4e98ed80ae5767967b615346a247ef", "2785f8ea0dd991b271fb11cd1463e1535a2c0efb44c962a349ca109dc5c2e74d", "08ef432e4f0aca6ed0a117428a338659a6bdd2ce1c445066dc9419467de93d83"), ("29deb8be12e352e6bd77e009e51e8dbb2bfa3d586fafe36cebdf6f1e634317bd", "1907750af2932751ec6a30ccdee602c6e3197f00f86e0eda83076ef10048cf04", "003eca619e9bfa9efd5bd706f7ca15db35c1c31b085837d203a4a0dd8ea753a5", "0c47a9e550966a6cbeef4b8da282101ae1a20e9865c482e604946049dc534647"), ("12dd81a98cffb510b1d27e71e59644395272f28f51f2f9475820a13ba31273ea", "149d95d900768ed9966ede8bace315295ef2f464f5966a41c18cc8e2a4a385d8", "0d90b5c893274b67064e4fe6e0603bdaf1b3acd3f8226518aa1151ec6f5b657a", "1b67ac6ebfa12a224e0a1ddfd1f7a20c6498001814513c7a89e66e16394cc071"), ("2c03622a84f1a168522f367b1894b31e307d68546fccf37b5d818a71de547185", "0c4884be89350ccb6c034c270f6b2c431ead291f6b2515a97d01bd320e359fed", "2d78dd92a15381fd5dcb35da72ed4890cb136448ba36d618275818e92ebd8308", "054a4fb14253124a122cbb144e44265f2c24abae6c6f98ac91b943074d67b625"), ("26d17e240695669cbd641dbfe8c18edc0277d20e2c702f6708d45d5ba9591b39", "0bfdb16577b01c62a273d4b05058f24a2b678be05259d757b387dc070ba6f05b", "137a982f7cdfd519252c58e55681b957142675419e900046db9e141f37c8288d", "158cfe1593a4b3dc2ed2fa62c1c5f008816140a2506a06d3a2f045dfd66c1692"), ("21adeb2e68da952e5affae6db0d19b0cffeaf9add88f1cdcf349dc8add5c3b6d", "15ea0cd69a2b364a00d9dfd83ec0ed7da2c0077ae9eafa5fea24ad4cc41ece94", "2085ae9e3918f88666899d4ecb86ca6d0c3e1ce9e2e92863645166dba102ec0e", "287f390312032e60742018be77b368982fc5914f2d31c1b5a1d2d0cd318f1840"), ("2f2d921b3f59eead54342dda1bc0f549bed2d1e7dcd16f6b0b5a20cab56159c5", "25452d75be3c193774555dfc964c066790aeaa7f12b83ddaf935e6995484cef3", "090c58b84b5b47482005b633328c15f683e73c2e1b2524cea83571f5ab12b6c8", "2ea7435c6351945ebdaf5bfa1faca66e0c069c1f871bae592af96690c245e7a8"), ("08ee416ba694f134a58c61dccee9e01f1a2a4cf453803d73f629d6c38b2997e7", "044a742a1d0f48396833f8fe3e36e12d4816522735c0bbb894d64f8cc1d1b53c", "08de7a5f3128d0497d6f9472554fe9b4dd1ddc0b7f01597b8a6b9da17bf0c47f", "02c4ef5a2fa8bc28cd36201b6c68d1e2dbe5f71db084b7ce8c700c0e2b249f23"), ("0d23d6ce244e4692cb39191c5930c07ed0152d5dfcba33506d205fe7f59da960", "0506e7b1a6eece341fac6f6e0a1cf9b3ce9f62f7f254a12d95005480685a2241", "032f6553a0870870d9207a5a2fa3dccd5ca87867ef9e5e2d17648d501cc2b34b", "0b737b9ecfa4e4b16143d72b0524caedf0111bbc3ad34f0c7bb31981ad5a00f0"), ("06c0b7ebff15f7e5671da4369c9abe57577be55b70d61bda36ddaa80d4e15e18", "2e3c902250c1036f2d8ce8ad892fd74c92926fd52b57097d553daaa7f6fd1e17", "0e6882852f4b3751cd159066a1101dc31650cf8cb4cf10c9fab5c7fb8b4333dd", "1e98fa1d3e0069e5789496c878f60b451f0542fd82028a705dac15339b429149"), ("0ce39ee01b101427a79c4893f51645a45cd9de9a5ac3e12142144a86989a92a7", "11cada2a1a89cf522c9cb14c80c75808a99194ea259ac6a58d4c783e9f2102d1", "2ae323d642b1b4427f7c8427b4a333685b9f487e1185b8ca594e2c65e1701e45", "2cb66d55bd05b12ba2c99f8b09e801014f72d4a238a16574c4d5b3a9dc44ac9c"), ("020b2400816a758332fb5f4ad3b6f23804246dd0a3538639180c8c5534180fb3", "30476ba565c7322dd40ae1ab59586edcc66109f30ea58d16dcdf834a9bff87de", "0404b25d9b06b2390c72e73e85a9f38ef82fc3a27bed7838cf1eeda9f5fa7ebc", "17ef3fec90240dba54013c40653f344a0763d954847bef467761ca05404dc601"), ("09f6d5ec9aee16ed3241de1a4919cf4edc36fbb6ff865c659565d165fa8aadab", "182cfeda9d81b222d9f159d866b43cf8d14bbfc2ab0608b9d81bba18c173782a", "213238e45f1df51fd20e3914496d01f173c27689758f248afdb3f749e31ab722", "2c274167524e75873a429cd3ec21d87058733a140e7a7141591b2414dcfdd816"), ("037a4e601ff5aed2070d8f342d42ce76f5fafdce4a7b558f071d267fe8ab73e4", "1e5daece0846600c87e8400ee0e0b187d3dbeb8654bd28888b60518e0b75c4cf", "2de4a7a764dbb9ade3c53089df9da81babee1a63c6bcc0a92a4cb30fd2781a92", "11067b47315aa9dec95930f2eb8b8b001af04bffcf98cdf3907a64a40b1aa43f"), ("1ec4ec65ff29e61b96d86e4dea85d41c641c89a79e9e172c6687c0043649957a", "05356b19201f8e90ca27d944699de5c5c04a3cffc21525fd6e7b508d754f3bd9", "2b31b4e53de7123db03df09e32a1f2819e6f7eac56ca4be67f8ccec84ddffcd0", "2c1027c96e140c522c828555bc8a1f0c9a533cb02af0601be89c61523edfa280"), ("184a6a2901cc849473f88c7ef86759c3e3085ecbef057c244e3618735ab708d9", "227ddb5b85a0bbad98591416466ad514e187fde966beecafb2516f8adc63014c", "081214faa182aaaec489855a46e64db927c4b8236d025a8053c326b1be21a37a", "2777c05b1bc1d5c917c8b9894954f3b8c9297dca3a442c26de6497306b057ba2"), ("1deaee163d26a825782e5abe48fc2266dac094014cac51e8f53540881b52c006", "242d3aee9da2355cddbe4dd28ac10ec134c9a15f0f300ad7f170c8ded7e5dc73", "11bafdc515e83d03811d00d8df154630d362311929fd160b357fe7be03f782a0", "12fbf313cf9e1ca51c0844a230e81bab3453397ec88a251565750f30c3ce3ab0"), ("0a4dc3d825ec5631e67cf5cdd51867a90025307e36b43e64e021f88946c620f5", "052801174017d08044a351754fe2fbeafd74da4a5355d278a12af0b11f3cb51c", "1ad84b61996924ad923624786ed6bb4d9b58490c5b94d10e7ecb54336d4b6f50", "294613ec091174a520039910a133536908a0bac73d8cccb48958759e0e640c20"), ("1ce7065c0422f9ac3f3aada8aa761279d8bb60518a6cb8bef7239c0577b07485", "0a75341d7d9a912f864fc49c3f6d059e006200269bb2394ad708a0f1e5f6634b", "2ae8835e8dda2df84fb9a19ca04a5a9b6fe0ce98a2d173b6e25a34e3780aac22", "0f165c09c59c22761b1ae1b7c7b270497eafe0b3f651678969dab73514e6ec3f"), ("0a4c7d2b29fe27f2df2168a808224e2ec792c40679933b8046a3c5d76a06ae5d", "299447169a9aac6f93b32214b0a30f08321079fd8e237636968b8348d26cae04", "133c7889a8a7ec28daa0cb30d2741691277f3f878e082ac0991c670adefa4476", "1b9ec2b698828296b6a4d143a9231a2a1d3aa7cb0014c2fedfea6855033a3c3f"), ("11542db43d768b4cd1c8167ba98585b24b1a34ca5a6208e6386567789e384865", "137dbdade1ffa39bc7be532d2aeabb60381a8011a1ab399ef2ab2181d12bd01a", "02a7f42d63b01abea1576bcccc849f21094ea6a265de745eeea47f984745a73b", "1c9ec819609c2ff4a5811726e9c1969f3dede1f09ac3cbe15b589412e155eda1"), ("1b050746e8eafeeda2c30a6499e9e5a1eb73e03498fd5ed0d664822513ad5579", "25b907a51034bc351836a177b8cfde42911ed34cf54b7ab10144345c34348c13", "22c496e61eaf261083c637b19a4bb743ccd71626d632d8129eb68c33ac78cb6b", "1a76997106352a1b7a6f18fdcc8d3eba4ac464a75479182b9e0b593c9bd10823"), ("26fe01df06c7b3dc4926623a5c49ca0028f48a39e9455610e2b8f4f185b346f4", "1bae27f17bb42410a6df7d4d4530d094687f8631a33431acd6af1f24f22cf08b", "127fdabce6ed1ead6b4801fd7eea5dac711dd0c98e06f23a342182556c6fb4eb", "283336fe297d96312be0275d4ed7acae9c88c0439f8f374de84953410a6f370d"), ("21166f48b6238ce29add26ed2a595d0ff8be0b4d9617b6a83451e20330803c81", "18059d48065c8dd40ea964c393b96bf318561a57364369dd25febf3e56ebf70e", "142c0b64fccfdfddde086085e3b31c4cf70e237f1f73d1a1028f266ab6a82b20", "28d30dedeed37c94b83919ff0fe4e795372d21a5ab3ee740bf0e38449b7d55a4"), ("04fc00e91c78e44818afbb1be0cfdb9814bb65b69abd3eb0d00fe2918dc27c59", "01fee1c1ea2ec153a00f16798172ba2f203defea5055bd243267a23bfd5bac69", "005f57adcadb5a1fc58fb8be2c5f5be6f60fc2bbf79a22f98ae1758eb4930114", "1c4c5daf340ff17749e0ed9179efdeaf8aa414ab5feb710f0271e3b1b6c2b8c4"), ("0fd14214871cc20e9ef612a49b731759d78c148f55831e2b3278e44eae74023f", "120c356a0defd310e0c3cbab49f437d010382ea032966168bd423442dd3c42b3", "0a754764ea572cb6b4d220f7150f7ea8d7e02b9bdfb36210e229f420ea661bc3", "155976954707dba08fa103f12f3db647c8eb982c3cdd18d108747e06fd65babd"), ("1ec94ad2922f52f12d6dc54a0bf5ab093dd7500be974202824ad51988c6a6c89", "217d4d66891cad1ea8739efac1a54355ffca64584596a86be4d8c4dde168144a", "27367d0069c880011d30fadce0ae2ba0837bfb9d1d5341b1298bd8188a91c5fc", "12a5e3deb020b847b317c1b477cd6af50ac01d9c9011ef86154e87cfb74b9b58"), ("0f752377b2744c41515022d18b9894fdaca2207f341dd459702a00b70f9ebf61", "1e8ed6b18d26a56b79437559c23fff496abfc5a3ed9f36dfc0cab2c74fd87735", "223e56a0f2276fc46bbc93096b1af13507b94216a7d2eff2675dd77bcd047e74", "2b44371682c3b1d22ffe1e16aed77b8a539277fd51f88e8977d6aad8ffba05fd"), ("0be96c770a0f8a311001f2eb9b49295020bb5b7dac66bd71869f13f15b590896", "006c9e27db65056ca93f5e7ae55f42cb5819c1d3284b93fe43a655ec17270868", "0a582eb8edb273768fccc46ce6826b339544ce3cf6fbc46a10d77a3a31b36c77", "1f491e469c9ea32a4b5fcafcc0989e3ac468ba943b2b0d0254e15872d6966da0"), ("2a65e37a5ac3ffa3c2a2f7335f157ed38c987779aba51f2218bab60b4d60425b", "271933bf56e6ff303ee923c8796e5c6c0cf84b9ba86026f97e20cb044d97e649", "25c4dc10f76f15665b4a6f42bfc3e2f651a8e02031805c050b43c967415d15ab", "2c0b649c472fadc04a10d75cf4eaaca0fda59883e1232b3107234ac236d36b6e"), ("1a937a6de075bdc2ab01e754ecebe449e848db0fb9606b49ec7a7ef8c11f4461", "17707f5bdc8e8e0de230051409bc2eb4abcd283072ab286cbe7ce8d819155f86", "0be84021067a758ec7c36b98c3d81556e07c66c9f0591f8f9d4643bff81b15cf", "1dba6547dbd029480c70156746c03868af4dc87fb5738a64fc059035a6bcc971"), ("13e5bdd368a387362468bc17f0574ebfc3aa33db9e37e6035763f854c9ca7127", "22de101de45afceae56680c42a833a31207d20e75074a0010c3350d23d138b25", "236fe567132b4a64250915fe084c617c9a088fa2337a9e30b4726cc260066477", "25e30c3dafe720e878a5df2506de8831bbe6d8b845d1a8b57545f5eb1ea0aefc"), ("1e86bfc02ad6f05e348dd676bdb73bbbd552dcfeeaa6f3882f65c025422a694b", "0d8bf6ed11aa6ee6fd3b1a539d54060ec38865138b638baf0467c019ffeded2a", "165ed10cd1f7ea00d33d7537bf985a0be5a86a7be0be1aec6ded1f990fbc2796", "2f9021ad9a7386f9864288e4b3db3c094c31ad4bfcd6fb33941f7edffda10add"), ("034a27d82ce3a4bb3a60e056e0a3cafac367a44322296194f28acb2f502d40bd", "1b2d52cf3f5aa5a53a78d276838c6f9d0b01743556b8e427992c7f8c210e4845", "0d9300cb0bcb9d2f0a656ac08c438940f4b3d3a15bf8329366e9c80a0666834f", "00aca152bbb51c3f36200027d00e7f382a3e30da45b8d780b0357af9663a06fb"), ("0f575963f6eb27ad8601bd1c791d4db292cafea868d797592af1462ab5c012f7", "161cd6676bf8a541e279e917b29b37d4f65e7a481378dc916efba7d9e38bb175", "02f3bdd8dec6df4f3871e9e08a105423eb14b9eeea00ec5a7ff76a00415a811b", "26c626c4ca1da5c88ec0430e6e57742131c4686f50b90f920efa1f3179d63545"), ("104efcb140332823951eb16d3a94c65dacba8f263361196168a80971870183e7", "0a68d1e1775429b5642d80a8621509fbc6fa3cdffc7533ccd0e63fb7158cde55", "10f3982371ce5d43114894334bf6a8988f5c8ac425ac1f3d51f68da63120611e", "1e156e3dd62ccd48ba7f2a9612eef0805572f9b56ccf022ecf729d393a590b99"), ("0dd2896854486436d2edccdbc2ad90adb6ab35b3c1c07877849a8d57fd16472b", "035cfa70ad96ea05c84e90ecc10394df396ca337ecc39a0652d553793d39d65e", "0ab65f8703baf6c9ba5238a2dc5b9ea29ef3eace81521e91f03c615a3f39585b", "110ca43270431f982d29bc47b4caeddea997fbaaadf22a34e1a1cab8a263521f"), ("1430b0d390096c5a130693bb9991189b814efa40386efb5a1818e519af956c31", "082dc00f0c6c1822f08ac80bea0ef4935966dd290d5e069ebac95f96c7983c0c", "273d24453df1b05a0deca58c45ba552e30617218451cfe3de859a1564b51003a", "00558467af975e0e1b6b9b50a46978b6d727fb0f1f89229b211ebf95607414e9"), ("0aafd811746716b284e93fde1e158d98157f4c3d425c81091d4769722bfdd7e4", "024cf5e6203b07ece6c3873d1b20567dfd14a32f295b0e775ef317c17488b854", "1c10b0c2b5fa8e3bb08ca2825a7e342c4d813aa77804ca0f4f35660c39fc22a7", "23e885d46c1d8ef3c708ebb79471c2cb3320d832c4f79e12118b79d3024a33a8"), ("287e11f18d7805fca36a236824f478bd78200e01b230302970df73a6abe9b443", "0ad0a96643b0a17fa33baa21c7a599b36c9625b5307681625882ed1283b4287e", "07b5eb108aa56cbc3e5d149ca12bca857636b4e6f218ed05037db372bd831917", "13fcb24272f94f9ff9d168afc922afc32f7f2592505bf0c8443342f8a3b18d6d"), ("03e4137d7dfbbe4bf93d615ba7ad060a63e400253d6b479d73edb4d76fbaf906", "290135bd6c3212cada961210c243459f578caf64393e6826612b317b85cb9657", "1f69d808f4795f6d0d80304ee3999edb756077440248bc35c0c35235812354f5", "04aa9807a882b8991eb1ccb20aaa0403fa07f33a7e4ee2d0d6b3f7809c6b3850"), ("238a16e1cd70accc51c6b81dfcdfc182e448495f29d054c384b7d82ac9f3f5b0", "1bd24cf464eb1db683419ff3cc731cbb62a11ddaf079792b35dd423dc7463a80", "0690dee3b2005b0f2721858ffe42efd7342af8d37ad3553d1f0228e35ac1f44a", "2132873c453f081cfb7ce4895a287d3e3a955e132866479b015580c8362ead9b"), ("09168f7248d6774fe5614e325a99086ec825bb1473ebd224043702e83ecc2f4e", "0d83186e2adb1ad6b31165c2ea678bc41c7cc141ec3ffe946005d4f819f0c6f8", "0b7df330a46b9bade4e48732e63031d3f5c0043995cb7a4a3e9d0327ea37c57e", "2fd235068f7d9b5d739a57dc0de8e3fd4584b6b0260a88cba102e007db30bc2e"), ("0d93421990ad72c5dace19c6b3a6f04add348097a16d77c6b46ac69a1d6b90ff", "13852aed9c9951f17249c210e91adae0cd5073b53f26b2cc6b8e63025ad257eb", "1a202f8d478d57f885b5d882de59daa01bf79ea78e47e8b69ff04ab3ea63ff2d", "144d0379af9cfdb2e8671675c865c0bbada1930f9788a6f8b95a0e6fa05e5c6e"), ("21c9b68a7294444e313190eba5b008760db77ea1e0682244e1954450d4dcee30", "1d941032a5e718ecd809b3f565961709fad7c389ee92527090d9eac755edb48d", "1463d145e4ba6ef148921e85ba2df9f38cb8ae2d7581865ba262a0a39d0b04c2", "1b07b3007115c7add29b408c93004ee559b33cc75c3c0173c326740833f1a84a"), ("188ad4681c19b1865f24dc687637ef8990d5faccf8a44a2455f371f427dc8550", "1f980acb1f42cd57696f633d5430660f6eb9d645aa673ba81d4640a63b2b635f", "038b7e55629f24ed37fadfcede75af4ee4dc4a95f5e72e75d342264f73fa7e04", "21041e1dd9a805708eaf444d262553ea55bd4785d32a442b99731d78a5bd52f7"), ("2bbd5498a6dd9c6dbbe40437745c83d601c712bbe65dfb53ce09ad065200fd5e", "0cb48536dadf8aa646a22a5de2759c395faefbc43c2b2e4518d088584c408f56", "25c8c6679f3fa2e834bdcfc5fb0e72ed8f9cb3ab39c307e087683d9cdaebf53b", "0c3a3d7efd1658abb49778b71c88abd685db61932cd05b8659ea8b3f3843ac3f"), ("10bce5c9fd10ccd17a1683a40fb4af54d23570aea77325db39e7049a33374483", "17cb31f998e74b2cae49a4410dd31e46814b01dba2ee376a6dda5a81fac95326", "2d0561e69e315383d4da8edc431d9f1a2d3ef1b845c0cec77f302b7c75715e2a", "149a5296d5d44ec42da332224e14982fd21cb60ed963efe39d07124367f03c2b"), ("04de250199d144b1ae11173ec55255d394563eff9846b30899801cef2114cda8", "28ca10bcfa9c6da535632e40098c8f8576f93bda5f122ad818639486fbc6bd48", "2852ff98430d6dce29461ee4711eb74c6465c20a6c57d8e1c742137ccfd0810d", "2198c8f67455be94a148b306f40c5542572e83475a252b62be2bcabea3d691bc"), ("03b7cc9a81673e0b1620a83a808aa991a52ad07a5f539dad445b667763a80937", "29d8c5d7ff5338ef0ed659a45eb2d56218819b4225f5d16df5e90f5a6776899b", "022b9a6ec38f1c30659cc631a01a034bb70a47d0130afa7ace18c5cc9ac1621b", "0edf4a76d7a407dca8b09ff2469a58e40b2b59afd18ab81e0bca5563cb28f704"), ("02eb2c4144713063073a15d02e88a4b0cf6e7ebf455ba8b186795c938811606f", "20e372e0e701d39c50b2be29dfd7b9af37560ed2eb05aaa89f4f52d1a63b63b9", "2039287b5a5e0130a7bbcfc1cd01a21f6b38390ef2ef17cc1d5b97d2a865f667", "1a957246f41072400b1c37715c6948d874e0135979a37e80501594ed1cd95ecc"), ("0f4c3c2dd1452d578b46c5fd607a72a91623ffdf70d3cf44170de4ab47cac856", "27ab988900fd5041a7d19f3a82f8e104474b66d1d9f7bcf4bd2a9dd20f8cb67d", "0c2dbc808ee9f7155d8f215a903646512bd25adcbd57c8c390996fadb1082f8b", "1d62ae64b4a1222f51d9af793dd72cad87f5d23486bb6810347f4c4d63ebb82c"), ("0fa328369a9679cbe00d84f864f537a511625afbae9058a06e5c3150f451c65e", "067a40556fab1cb2eed79b3132c95cecfff1f8bc1896bdef9cd7e6a03c136ba5", "0ffb5b21c5fe0c7adc383a6315506492246a92ef3dde98857aa7f34949646eb6", "2524bbb43dd2b6ff4a28416477b14ee784a6562fdc055e95d0b1226741e810a2"), ("0072022131fbdf25322a7f754bd807a01fe2dcf9c2560055a7a00a195370c040", "241eeb3e4dee999d44699e0fe196ea8cc47c0221a311d34cd8112d3390a0adf6", "0e704745474c1b5e1e1304ca1c4e6494f5a2bfc81d909d4ef381f76c0de10d4c", "2bd16ac7d781c3b0825854ca00f37f3c83dee461d2811743e58519cbc7179803"), ("1f9b406e2643e46a066b5506366d3e93c04e3eff57eb2a4eec07c19fef1df0d1", "285ac89c38e9013d7282108444a959091f8d45729283faa787dd53bc3c3ee486", "2c7c618feb5609b9e6297714f3e994fffde9f5470513ad4687683a3a88ab8f63", "21e0227f11aa4900ba19b7d74206b179ee04c2225488c83adaad72cf934abbc8"), ("259f04246fa4ed0f9c1fccb4c3c10e20886d8b884cb1c9d1b1f89b7c588e6275", "3052bfc49ab418d8b47e27034be8568a9100b40fc8a301ada21cf38742e66c8c", "2411e2a22cf7b8dca93f6e98d702fd2cccc216104ed12463920bb7da525069be", "1faa12ffe124921e826cec6f8d94057e521d8d52d5dd1c38fb05371912c9548f"), ("2519292ea4c96e9041417b158373c5e4dec89753e6574e9949545985a2128328", "0996929b0d38f330ec2716508d38bfceed286a8ee58eaf64bd3017171dd3b8bf", "17ef346579f6e57bdd42ad6c639e2d4af2d5e8c66f05237c47c7ae397dffbf40", "22297d4e2890a666811aafad2b441101ab1c6fe9807dafe143a228ed3938c40a"), ("0bf92d9adf6b435844cda5d750ed282b107366c1861012cabc2715806397e982", "0702bcb5f92bd88042f26e7e4672c803aeb332e8b7fa9606600d42cb81592fa6", "25346a98244aff903b7aece124fcafc5c3c37d75ae27fcf2e8d887af758ba932", "1964e17576db4d7bcb79084e7e97e1d281585615e6d0e32b87fac27991ba7ad9"), ("129aa6b170459018fc21cbb3a6274fb9ec574f7ba08fa81b6f3da983ee4e62bd", "073c520d3c61afe81903aa2a1275ec75081b570d51c17f4e927127e46d4b9b63", "03a482b4af71b05ce7694cee1a78f61f87be9ac84dd5de3bcd4db10e2ead93df", "2f8a37099785990017450727bbb63da4dcb5eb3bdb699c52d90c55eb21f70fb6"), ("00cd6334a30333fefae2cb8a1ff5e264fff16d9aab243c79e06d9da85b2e6984", "26d563d97f0f96789d87ca97861375db020a680305b5d3b74d74c39e1de5e680", "0220359c810da088c79b11c6f3ff020e53db753b15bb9d30a070c5d2bc5d54c4", "18bfddc077f22f5c0a35a4d0351e2a12f95685eeba3d44435912126f36a06efe"), ("0f4bf3e6ac25e4bebfab641975828a0049f63adf54db1c6f73dc705a98886312", "10cdd43ac3d44b488076669c4b4334eb3d37c48694207881517532434b9469f0", "237444cdb6b57e2b2c5bbf07a01b9bed80756b1527352e52c0b2235215c3ee72", "205623a06cdd315250999d99a102bc61b7749be20a8684dc178b48dae8acdec7"), ("1c39d876d2ccf90df06ca1dd6c0a757f54bd385db92abff62a3ac4df8b197162", "21b1d16ca5dfcaaf27fd5ea1960d3070b4b54d457f8759c9bdb8b19cf8e930e7", "269810ba775ea70d8006b3eebb22ce060246d0641f740f5a3d688ac69a613d14", "0cc9c533fa6e0d2680dd2836df6af221fe447e45d15a50a1952285e374278882"), ("29908cd8d62401614dd824575ce78dca1f5a1cb5082b2536d27812cd76a8bbb0", "189e0dcf88e070c6deb5f78afcb459be3c2cb307b6400cbe6ab60241978b0921", "16d75bb409b751ad260914922f9545f1ce3c0ff794f397ae7d628163e2d9accf", "08097c43cc501610f6a0df74b2d08c56c4835cf1deadb4f0467eed10701e8704"), ("06398cfdae0f7441e1a91ea140bc1c35164831ba480a0486be4dfa787e65457b", "03bc6374728311eb6734978bfa25900e9f96ebd986743dbb77de1706860bc6e9", "04f5486bf3a9fe7586ba6501a5cff69b0ccbd432ac285eaa0facb2989c7496e4", "042df2e9772b61c66d7af91e08bf8f78dc81b53ab49085a392896b4c24cab5fb"), ("29547b07b1d070ca1643ff6feed081a84ebdfec310bd6f9b77d0c55905a26e91", "116add78abd0a0341d8f3c145593001df425523659b8e62a905ce792e6fc354d", "105834cc2872a79c25c96dc10ad253a9fcb0f4e5e536950c539f50915e954c2c", "2414fa3979fb5f08dc39d77854a637b5df2a2e227f67a033bbaef2d4ce456d40"), ("1c1de615a49e57466116d7f91170b8210a6fa653e8d9134f782b55c65741b7b3", "28ae3af7cdd56ebf1398ddce772b68306eece7e76836ec58873a70c9ea0c37c1", "2b0e1ece665b1b4418b0b1b47846846b16f7136814ef4951be5c97a8f101b628", "1e7b5cc8ad70091896451c4dddecb0054b2fe93dfe541ab304ca23dbb2ea303a"), ("0d30643c9413b6ec32164a838c957113429c434854ff18429cdf217d54a59d7e", "25cc5438a8b3fd8242c8dc164f7bc8e5a2b71a8f9780956b1d4cd3edd3d2e3b8", "2ea1bf49efe6d8bd54e1c9117af256496d645ce9ba9fec3af47167456436dbc8", "00ca3dfb6da68d31bd8430c636e013de765b41c280d0d4f917b83ae0b0803c0b"), ("022fb180959ed2112ee04a2a4419c880db1e0744ffadd36f6be3a9718d25e027", "2eede234d06babf0bff8ca633b40f27ff60056b9a404492c7c214b14c1135be4", "2a49a0661454a15d72a1d28c3f6a722f995ab2abd59ba58bb54d37d9c76ffd6b", "1b959ecb9ee37baf8829fe7f6c80e9d66d310f549cbc0f26b345ad7779c2ce8f"), ("1e29756627bf0df2881a7983652262447a251c1812b5d1c0e305a91bc8b871b3", "21a9478099d627e34f1e38060feb6ebde1ac7c1dc478646ce2d411d7268bfb6f", "0fa5852c91e9791aa227d983ff4a4cc20768d04ccd03f2af99823518af17df35", "0f5ad6423058b31faf4f9e6ffb714fa39ea2196fd82b5446dcffbca54beb9aa6"), ("20573abbf846e083e8f1693072f16a4c923f4d9ce9f113cc30c770ed80b52865", "2aab8d7737752fc09321b71af36bb663959b77aee69f677a24ebb55309427f8a", "2e7e6eda2c5ee510c7e7613ffdf5e123409e4c0fdd3300ba0c951af6b579cb21", "10711628594b199109408aeb35afc28b04944987c72fd50b4376aa81a7b50e26"), ("259f6866b8a134069828d59f84bd2d41dc83d3ff6e274ec268e0f118470da9fa", "0a6f6ef5ca6a199be1b13036b0f8444c4fc469e817c7a8a5968fb156efb19a73", "2252045741016201945f934a301069e125b49f8b7dab3bd0d3be02cb3207afaf", "1aa8ced42841416c08adbf71c9f89a46b16cca5587da12423b589744c4cf5e6f"), ("07aefcad19d9bc62e61cca4318ee867cdf625520b4c55e6ea4eab14a9ea39adf", "0e329eeefa75d28a9096e3a7dcac28f92e58784beabe7ac8487b83f41c2d0d7c", "07c1538e87158275cbb91ddd427c1ce5d276902522633cd7cfe559fea76252c7", "0906aba7a92a9f8abfc5c4a380de5e9532a44a8044c006e386c2b1b2fd96e0c3"), ("27b49867840f4265ad614082c2cc5ddf33b2662ea6f0be77a629424250e94147", "1d47553de3f87363ebd59f714de5451f52bab05e150dbf73000b89b975e8b19f", "06de87929a6b6e1de04bf63db3d6c3bc8f7c7f18a74b7374a7bd53fdc0c3dc9f", "2d323fb8fa67620580c942cbf8e5b2ffd5ccb81dcd3bc6477e6aecfc3f604a0e"), ("1d9e39bce58635cd549802f8888340f1cce1059a681266c92697051936a24e8f", "29929e4f4827bab5129cde944e9cb8782f5aeedbe34768c6d7fa1aa0fa1392a3", "02961596f4ee247e7125456d5ba709e170490c610c31bf98d9bd63deb1387f60", "2cba57e5bb09af732414400147a9d3861627b937cda415895be39414f48ecd91"), ("2344d960b3fb4b8ff73778613f7d501381a0930523d771b530024178cf870b93", "0bfdd33d04b76a9ffdb44a43fda3f1116d98de66ff727be6e74833c0e9712cb1", "0676d5913def24a8e3fb4b2f01b5fd68db1d1e31c9ece3935768db4433fb1a52", "1903b54e966ca69a9bfaf52f13387385dbfefa411f97997f8e13ead031f82389"), ("228ce3af11a8714b7d6a77c31c0a3091e1a2fc549f0cd7ac9e86911f3b794ef8", "25eb3c4592b7f1db3162479dbeef736a5299e39d3fe69bd0bde02c32091aecf2", "2f57c4f918a1d77c558c38e08456f9da6fa9666e6343200e519a20f61a269a51", "2b24e138df770e686cc4abcf27c41ed99a2871c87ec335ee112bd04d261413e7"), ("02e2089bc98917adb48d6b6d24f4137971ef38963dbb1a0059920616e33d37ab", "2cb26e10cce47d37492651793bb8370a9fa91a468cd6cba99dc471d4093a175b", "0eae421a06be3ab755b657f877b1c2485be40e371ae47e4776314fb7d461de82", "237e988a7d7355ec9209300604604e9b9a6e4e01c4d090ef4797b070e1eb4139"), ("20217de534f15f69a35a60f970db05ff083616b6c1eef7f1819a695096f820b2", "11e917564a7505ba53b700eb21f22975683e4e57e9529113df6310151dc47d03", "1255e5b1ecc13cc141e53295c344343fdde65795e8a5aeb2145d04aa137276e4", "197c85c22aac30f86599c76b2a467f1fa9f0bc91a0c3982c5f98c46bd09fa7ef"), ("0507673c3ae9cbf224c35badc930fa75d8baceb222cf27ad7deadb35d76dcfda", "02882b18d69c869e187113031de0b5a3571a900287f25f358d213b313c980251", "10dabd7c88bbedff7d711f9acad0d5fae0189a11fc3b4b899eadded19a82fd68", "2cdde55b1c6bb6c031d3908cfb17869f16dc58c0bc0da7430bbd709e3bc5fd75"), ("026e1f528ed5f06abdb9ad390a9412fcf894a4bfd8c5a2312162b3ba478ef782", "242c9cf85843d9904e63c9bcaece3b61ecd3666a0dca531de94b3d85516e0fb7", "2c73bb0bf1da2870992fd49f23155f267518ddc8524ec7cbde651c0ca159a12e", "24811c0aeecbe53fc24e92989b521a344a62914bb9d558e62945ffea106bf381"), ("28bda8d60b3eebe6e5aeb52f8a7a274cb6fbf271598a4988166129d88d3a0f44", "2c92f2c2daa6e5883590e87c87ad7d4cc56108548cbb8f0824382580a383f8e2", "19e981fe1e72d8d86eb76e2b0832bf57fb577b58fa8931bcafa886d5b3f8a34b", "2c1d7422a8566eda2f955733f6beed02f466dde37949f3f67a55fc4ecc5b26b5"), ("12b17a560bfb26808e86aac5d60560163ce86d937ff0ac9ab476cc93c414edcd", "1eba79f6e6db1e9ebb04eb172e283e18a97d4b208148dfb33fa4c9f72120f69a", "123d2af77a1334274e1a645b77acc5a26c99a1e9a5a4357818919d91af3b26bf", "2bf6553bb683fd8d85d7c66543aa684fac852b36b84bc77451231ec26c6367c8"), ("211ae04bf4bb518ae993da536d6157ccf06e706bf0184267ab33f85629d9f8d7", "0069f9abf54f5264840fbd43dbc5d16ecc34aa672c5a45a030c40358cb003380", "2bfd7da9f4d29cd0f290f798adbe972e7a0e0b1750f56d7cf387c927af1922bf", "1dcfa131d31bc989998468fbf46d6de377c81176105635d68745b0578346edc4"), ("015d8b8fe119cdd3efcb6de79a951abcea1b931fb3f18bb6296b5677ffa07260", "237fa8fdf0a6d733fef57c5b4070730c951e6c615f0dde88035da49d548e4f12", "3027d47752b7e6e2594d872f3c2c0e71dab8ab5a7bc430ea9eb06dfb4814d59e", "2f6d3035e806056c6b18e7f6a36ac32021ac8b774b34e7e493cc2cde8d77c3ca"), ("20c78f52597121048f07a5a7b2ffe3179474624a33a73e7dac7d36df5ff51d98", "25f88003f1328a0a3aa9313605cdce4de1deadb3d2cd72eab5fa006a8246f13a", "120a8164d05c0f30dd0a7a61ec7ead110e555da3c38719abcd2e4670c1fd4725", "163f7be43901958fbb8c82673c93150e6a9ed7442f7880c89757e48ad508a8e6"), ("03d98bd50c591e7b4e4f94a0f04abbbace456dbbc1189395b561b1952d4c9253", "193227427e85161e4711cdabad2292a8547066d690fd6c0c3c0a449c1c2c28e1", "27165ea1d1521f4f5963ee1d1e22f79a9b4a6645570a6e54cd2f7df4060a5888", "06a6bf2eb71fb279bb0d2fb377cbac0b5a71b487433fcd0a978f14dd5be7714a"), ("1cdca0a2f7eaffb7af7c4ec09840112f5022ec41511123e11e2669aab49af06f", "0da309bfd8688544475ec959fe260de9a2228d51b3c8ed3ae829434a303db5b7", "1f7fe6bbe947b79a79ab6f6a3fd5407114a52a69e05a7093b211d291e9ce623b", "19398bf651ce82d3443d757ac0aea7076b175695b564e5bb5b2a38971d2c276e"), ("1389ff8893c8ec7b77c4ffe9905a1bac3611cb19b46763b6b8bb1ec1cd8cd137", "13222f3b34cf1c67929f35f83b858a2fb26e9b3cfffb9570d9149fe0da23cd29", "1905de99dfc0f224ecdfebdf950d704933b2fcaf48b7cc511423449151ce524e", "27352a8d793653cb73f418024cad463733c6f95e218283346d5355435007a362"), ("0b84eaaeff45ec7f8d8b01145b2a198b143b86a22fd59abd32f364427c06a5eb", "25c28ef6945d35b20b6bfabf9b1494b7e263c435ed71b55c9e7e98b130d929a5", "284128a61d19622110f314548374f63cd15d0872d845d638b56e6cbb8a6b529b", "03e091d7e0ce11b18870a11f2b40bf41ae9eddcd4ee122747f2dee0f07924a64"), ("0a2430383521a0b21efd9d8e8a018bd39cf867635c745da0fdf4fc8dbd209874", "26b9acadc66aec1faf2e54fcd1a26438eff633dc25e2112cab7f8d891df23c5a", "173a9a7535a349c1cdd9daf0f2dbec628f75031a1849c0ecbe9099d576a0c821", "2662ed7c1657ca2f0e3e707aad93d75b576b383af99e1220f9a9e7eb4a518e58"), ("0d2948d9dc38507abcb9229994c41c3545a3d2c6f9d31ebbb452830e35f8f4d9", "2be543ff4d4bf12d9c2c079da6e38bcf9d27e7aca7cf00593a7227d8b96f2979", "28782863212f41b10532793f5d3abb630f81a24fefe6a83f0dccc3e6a2dcd849", "0d4340362cb9d62ed36a9b693f1e6a89ede56ff3e5af49eb43c5395eba77b6b3"), ("2024c7de61642308ff923ce72f7768a7e176a9d541e40878525d723e4c0a2993", "0e77c64c3fb0783ab6f1e824094dc672cc57430467cb3dac1a6f4a0a609071aa", "1af3af229c3b0e022a6e134fbe7f7ef80d5b43d7b9c0d6ad4f3c6870295256e6", "185aa69315d20655dcc0d23111b32356d62641c650cd008663c12a927ea0a9d7"), ("1e5f99d617fe8bfb048d2d84958986ae9b9345ba80fccdb1f57b04ef4acab3b1", "00f1af4ab89efb29a88d06d49a45f54b44b776d0b81e473163c715766de8da0a", "014c45a11c4ef1515b79508092329b10f9e560a2c0c8d2425eacac9710135ca0", "1e0d87d29d1e5f4b20e32a8cfc78bd985c68ce32a8b58b464ebc882cd7f4396c"), ("15228501d42f6699bae657f59ebaaef0855f83982cf5b61562d56e8147f33592", "06ecf45db1ebdd4d6d943ef040a908bb229c959157fc67f314abd65d3c8bdb28", "19cb3aca2aead04b9bbb54694a5ed301e440af53b96fc4ce3dc2752d4be4d6a9", "1530ad1312de172b10c09a72a2610f0c791b005247d838885b5ca08422987b10"), ("25d152d052a5e2be7ef7dd43a116e89e901749f79d84d08c56847c6d52ce978b", "05d85dbf4626f4b675a492ae3b3e5f565c405e9f70eb5054dbd64d78920a451b", "2589272a6186297daedfa7a48cc042c6c82ad0b5cff5ac7f0e4aab9bc6a73034", "17324323ce9b1760eba2a802577f57d967194778f73ee61d9d45408731df9c8e"), ("2493411bbe5ac55c1eafa09550b518dfa709a2cda65303342f64ef6eb01b292d", "02b83910de9f6a15e0fc65bdcedd4942bf3da567d2defe82fe0fe479a6b207cd", "07475aa64fa2bbe0dbbc001a6544ed6806c7f37866db4776547cef3f1566a164", "1113613552ffc7f247be2d46c830dc3586fd256b82a2727e6e03c4ec6e737de9"), ("091203721eb0bf3716ec37d229953da02cdce4835d372a3b11073035c031dd9b", "1b58be6b196e39a878548242a5a2aebd82afe76c554ac114fad5395233662cce", "0950ff6031d17f49f4023591479e1500dcbee6ace9f0ea8c8b1e5943e12444db", "10cb689c4b52d14972dbca43a2291a3137e4d1a10ebef8da078c73bd4a8af81d"), ("2e6e74cd57dc5bea8cfc702f7c91bfa589b55c07ea623440d46ab929e82eb005", "2923bbf7c0c52eedf6f80c519468fc2936fe59798bce15594ef5758aed399a58", "198b5bcde0906335a4d12a91408154046ebbf21cfa5b2989291fa4150e27b7d5", "06566940615258a0203767720cb9275007010b12e57c876c731984209bae63a1"), ("1eba63f28a9a0f2552e796dfe2239ca41cffdbaff858fcfb87f6fc20f091dafc", "1c2c4587e2bb418a8d2871e9fb827bda4547da72abe17ddea2818f6090982f5f", "074a610c4441b781595c7c6ddcfb3312f35369eaaacafc31e10599437201eea3", "0e0297be6275583efcff05336e98131fa9d69c7cf5062a24308d0e257590bd34"), ("25bfd6f483549d3e0ca094da511080a9a526dcb3da98122b07327c64c2770f47", "2844f5e5b4f3e426d7299c2c75cc31c7a916b1c61a5a93e74eb5d9ef21b09778", "255b8d136926da0b3af32355d1ff87976ccb67b648e861cc2cb0c2b11c1a4baf", "19c637786137d278e63036f6cdf08fcd1856109673bbfa4168da109bf7aa6dd8"), ("1dd072c011aad874d43d46c059165b4db393e328c8cfe8302909e81e26f2f9c2", "16d2ad9691fe96905968988c9ee34380d97c8bbc06b909400980b243ed8cb452", "0b1acdf4607595690cf4a1b5daff284077d85c224926b825cb3e45c614228c85", "1dcaa5d22397e07ff5370ef1c57378a675885759de03c528b8faaad7b5df4359"), ("21d76e196b012a7977852078fa79b3ee308fe14aaa4152a862259f1dcdb6e04e", "2dbd13404b4b1e0f0a15bc3c70175b5b5edecebab69b4635dab84206f8757b50", "128ece98232aeec6686fca0f355806775a8520286fe68584c6ab8ee0fb670a3a", "0f1bebac95e31366a2ed8c395b5795a3ef3881e56bc1beaa55291b9b2ee51192"), ("13cc60f77a5ddcc5b9d5b08e13893f1d8a82bbd27946ed3f4265daa9de58c69e", "2e814da520ab534f0cdb54149b319d2ae93f5b0960e36d3ff42471cbdc313975", "233c37e68e7a0877a38e3212ec90cce3ccd0087f5366f1bbf30ca56036c45ad5", "0656ad0ad9839fb83a24bbeddfdb89bec9c67c61b7c260117a34123b47630498"), ("211eeeba795259d377011e76fd855e40e5117d89f862aba7c288a9c5b01610a5", "08697ea485cd4cf6cd98bc3b5f6261d52a5430569dfcacf8e05f8153c93bfd01", "0c67ba8045a8fda5dcbf6e47fc09f48dc8cc556a65b13cf9f0201aaa84a09b19", "1d3025af762da638face706d7c3f9f966e0e699fd1822645e74a9639e105b746"), ("0c0cb4dd3afc72fa18f7995616fc5f797d946de399687882d39868e66742dc86", "20e29350fbb24097d31c6320c3724506ad561afc53b6dfb1f794b34a5dae72ab", "1954336e65cd13e310a539dcc3af8d5f4396e2e7a2f33881ef8762b6065e4a36", "1d73814fff55f32c05ce61a1684dbfc4374fbfd3b6d3c674082b82d9b81d5228"), ("2414551f91e61c74777fe267d62f6ac3a1f4ac0147aa7196155be5df55b8bc97", "05ac6d95ece2444ab610ca7eff607d1dabacafdb398054fb5e16a24a603b3e53", "0e0735d0d278ec8172dc56cd58a2dad2df4fa43c709181114cd499303ebb05f9", "1aa9324e16ef354ca0ac83306e8018fd189d439f3666942c89f71aa2e0429e22"), ("2b0f0666907c7f5b15917767c5554934b03ca1b6bcd3a0d41fdfc2617b506d5d", "2eb7be09a265d14a0645075c43192ad726e1b46450b7882826bf09aaf40c115d", "1bfe958d9a49156920cdae232c61285cd98b131ce2936df4688c3f28986048de", "23537c631bb8f518f84d323bc79f2357f60c305278982a8c690a52433f4d9854"), ("0ebc0cb2312322c33d47d480f3c5b04737f8dcd33fc4a654fef6d72108458ab7", "0f724985fcebe22d062858adf01422c89c0fa6ba6794749bfa9e67881a40b1d9", "1bf327fa4aab285562dc427b9b6ad095c3d5dff28b5bee3dc3f61f5b126ed284", "2a0cca74c33a230fad80a4cffd8eeadbdc7ed59c6926b4c4d9029375f307b788"), ("01e6f145f8450724169c5ed0a99fcc551ea26f7d3296a9d9875bf83dac7b4e63", "13e33cf0a623d3477fadbb7d59937a9e298126d5179851eb60ff9abd2ccdd306", "0615f770ea39a7a0f2c50cee4c6135c9e503d6ee88abd1db14502d812f89785b", "0adc567e2954fd749081f46281a34a78f754b206df605d666cbb730183ce8673"), ("26bd6adbd7eed3ef5cd34f5b59182d48570d2efcc88fa402cd3c719155a25633", "207001436da718a7de6ae6d1f181f2ac2f2b200140fdacdb12ac058efbd33bf1", "1d86edf38693c34c478aa88754bdf1b8aace9f585e2946359ca356e584b0fe33", "1c9a261448c9e95153577f06c69d1e1f217677291c7865860a8674789a2e98b5"), ("2fc01f19c39112abc013c61a982c4ca14d57597bbfb9571100e635c801e2e27d", "010364244daabd8c55625ebbf4690fc4fdfd8efbe44acc027470c4990921f6cf", "2c9a3329875588c8d3b907d7e5e9ac8d08ac5da9229446f5e0f3f965e7ef6e28", "21a5ba798e4ddfc9e8cd82db847a5f19cd792f980cc9cc20242f1fd56c976b85"), ("2b783e2a9e868649b6b62dbf5215d67a7256051c468b0b0ddec624a0341d2204", "1558148e0a137935807e9a3d0f3d1bf5b6ff1ba5e3537f95442911c90e11b7eb", "2b809e4c91b7f925b69217e947ef370cfa2fa3954172833bf341ec1c09656152", "281a56afd4d54ef14495e04cb9b9c3bf660a148dad33521ba7002b6bdf565190"), ("0f6482e488ac31f5acf1fc24382b117c4d05ede214946f4ad67c5434808fcdc8", "1c2eb3a3e3953ae2b0e18a9c2b1af22e25c045433ac13a6ad790d62aa2d8c122", "1861ef6463137afbc437c75b76f7704fcfd03c2b12c7e04bc1f687370e22abca", "246834dcb0a5667920b6aa2a134b5d78d00ca0ace4ee970160236e41bd0cdc86"), ("2c49236906352d0ef805afcfcca6bc8b7617cc514a460300f076774318fc8389", "1d836607ea2f315262d33b4dc1d1adf55c5428ba43076de77cc6a6303af6ad44", "11590b5992ba95b157cf81a43fd6406ed7aad2c29e8df7bfde165d165d5dc293", "16b249e3552d96a95db16897fdd3143b6c9c54030eda887ed411cb70173b47a0"), ("1ad85776b079bd3e23eba901286e565360f3fe5151c0236ffc1ea0680959c276", "16c80a947fa6151b970df3d6e9547a672cec65be3ed2475799a1ff1824ea7a8b", "243547b56440761a8abe9b6df1d4b32123535ad9e39f4ccf9d66fd399b70d03b", "205e9ef58821d2f16d800eb0e42f0060d2d39e3f28236134e2ffb5438bc52d1a"), ("085208d89697c0de8af98806166ae80d0664b5e62ef8567b158b7333a8bedf5b", "25d22761489ee1a15d367b2a6ae7f88915750fe44d808a7c8cdaa513be26077c", "04f57e1a0ebb233be6a4f6a0bcff1bee57df2efe4558a62ac48dbe4e11d24e64", "0beb1a232d13fb255b85cef6004dad36cdbde9aa4642972a156123d7ab110ab7"), ("0a65cbcb2874a2b7826f04b81ad877414991e06765fd5bbe3f1aa2b3ed1e111d", "1a049934cb91935fcd6bcd4b2a4e59efd56b2f4c30fa6e8b959842d2640a4c49", "07872acd0b8623b5ec5d50dd9b9e183e583540ee2c1e40974b9bcda814f1ff27", "1b54b9b2b94d9cf0b3752e1b6dee78deefd2a346fdbf113730efca15e39c1284"), ("0adfdee12b5490c8d217e77bf1fce6827b94b40a7442470c6ebf7ef665e79b8a", "2d004773c7648cea16fe76f2f74b5dbb8288b94584e53d775444ee3f08f002c2", "053a459ec10c38a82cff2a4304511174c0b11db40ad1afc1f6b8e2f71ad81705", "0b13b3f6773de176036abd253c077ba4c903f90a40522b3d2f29244e8866a25b"), ("18c680064ff27205664dd26d4832ec4cc70370ee7bc7f781d4e94315f1c0ed31", "30470a90515149c373a288a6469289199ed5aa49f0811f14e65a4c8042ac95cd", "11aba2aa5fc2aa2812aa8ec991d9ca1a2d84c604eb27dcd304ba4fd838a9d8c7", "2b5ea0c26915a1672de966c42b8ac8d70f9e7628a14d52ae4c739e217f98462f"), ("2b7527c5da4d76ab44112c47d1bd79a2b35e8f607c5af86e9ee208c90c192aa4", "05e0293eb7a99c91cf434756e6dd7df5754fd03ccd24a74cc50c6bf078b3fdcd", "211feaa689faeda8b825c392a31c08593ee6d8d3908fa61d0e36ace98fe0c4b6", "2dc446cea035d86fb801f4b5642de87329c3c96602eaf728173bd5d6baadebbd"), ("2c0c9feb759792966cbee70edd17a514a6de89e9be3da9aeb4f5fc880b107c61", "0846d4894d790280034ee7dd2f316e5fe5ccb8a81c34624893817abd50528bfb", "1bd4adef37fdb64d86bca0076fceacc355c41a9b5b5b8e1f39849b6345a17e50", "2da5decdeef9d517fbec7647a65dc46c8b5d0ce7a0a0467f0382be702b2c76c3"), ("2d71e73a76522c60a57ae8075fbefd07513873735b18f3243f3629876c498547", "0b39b4ffa51b7dd7d9653b8fd1c22e9cbb98c7df18ed2c012dee45b16cc70163", "1c7c8fe9df0b391f7b240ca1c30fd384718fb0f4ad5135b053953ae3aa24cc18", "06512c953a0b6449d31e0b5f7be8ec3aad1114fcc571faa1f417f0128fd705fc"), ("15a296f45fce56557c81c6d958025cd5157731ce1a7880b8c5bb4743d616c551", "276e50aabfbc2470acca7681a2e6e861c5e8fc7e3027bc92248c24bef8c7b651", "09d7123ca6f318358a9f8714afcfe153003f11cf5f8742fbfaa7035f927ce9f9", "1edab2e0e84aacd26508f6a8cd8b45ae604fed919f99d2c736eb9c1611b4477a"), ("1dbbb5ca103073a149278fa65efbb49392024f2c1739b5c35279d42407325d8f", "13e8aa924517e3cb68eb8d5135cc27135646aa8d2c84fcaa76dbdaf1cd58edaa", "2dc9cf3ac09939ef658c8d05ab986f7d556ed6e716648f2ab5de525fcdb5aa8e", "1a4e647ed4277441298f09b02c284b2df580f18112734e3f428b2ffad20a5a12"), ("0ddb5f9a248144c2aaf56480369a49b9742a20494df6fb5c074204c06215ab2c", "03d1ac8060aaf8479795be5fc07158805a84f0348bf8519f74808030b0bf1949", "0a470881048a80f9d67181979c54f8fa452a19170e1091a6cd80111714f8f1d9", "07404d1d36d2178d04324197606dc4001d3acd2bab3551dac436c15588031468"), ("101b6b6baf7136cf7924ba58f8a52d81f267cf6bb5a8be8ea3637841f249e9d5", "0f5167a2d5f5b786791f5d0b9b713d80c5c6267bf3b1f3b77e51229c89472625", "304ee790c9221a7b627fb5c9d1c545e14458b9847749cdf7f9ffb03dd921fc99", "07590ee8afd0e4250fa714c7ca87edbab18932b797fb4f9f68671cafc9a2caba"), ("0e0f37b7f7db7382164db3c7fef379fdc5bfdb5629a9f3a48fd0a7bae3f41bc9", "140de43880a990dfc96a4f379b498637f1e7c68b54d4a3ff70e5bca0609ca821", "1895f1b15ff3ea73cb86cbc91fb23e80c336968f47c8460344a9654f32d6ece9", "22492d3701d39ba19c44b48c500a9bdccb0d101d586b6bd950bcd65e883fb242"), ("1abe27856d899efb2c923da01d35da5361b26d496f4eef6e987b8675a04446b4", "0e1d204565e702eac6793e3f70f765989b75218f82e5ed94b01e8b957fdc457e", "077d055de95b2184a7adb96061f4d84d15c736a964bcbfa8699adf615653fe34", "100cc51c13b7906a886f1d7f940eefb9e003e26c3c28a53d59159f198bb59883"), ("1c15b7eb00c32bc2d0fb04f2d778a91b30bf04d6c4b194841a601220796490c0", "0e8cf497967b5c7c82a81c1916cb7b60e9714638368257c202f134fd6f5cd381", "2e54b2a61a843bf77e4f4efea1c13586f09ef89bff3a566e44cc172171330329", "087dce9f3a47b3cdca46122fce531b028618c53b071911fa7bae346ce73360b5"), ("2a8364bd16a4bafd98648412b9afefb52e00c8d8fbc6082d1ab7c70611c81f24", "013a762b0ccbcaa8724906a7f1ae4f21f0fb70d38c51829186ae9b27103facb9", "0f5410e789a6f507a4b80c6b2a54a204d72ffd935e2144c435af7b887a10dde4", "12778575da78e88bb4ceffe95eaae6d0fe851e61feb686a270a39e506a987316"), ("047fe14ff6f53221e6e9ad3eee94e6c5c211b20619c37d7ed285ca01f8a3f46e", "2849ba2a90c48eaccc33876691b508c934c529d798959ac8bcf36c19ce3bc353", "301bb6d49af027ccd58e5884bf6fa32710bfad8a388c56ab6f1a960699db3139", "0be69282799d122c264a906e955e72091bd1fb511ea2d9ed4b230ae5ab8938b2"), ("299b78909e08b815014ccec869969e06f7d2cee29606864d0c7d88062cb8dda4", "214893f33bebd31e7028908e67d07d8b3167fc8d3851277d574cf5dbc543d3be", "2e3520d66e35cf19f115153bc86f89b882c1ed931739ff7c97fd4bb0f7ec752e", "1fe23ed16301882245b70e2046cf1079b94d3e8bee06aae796585adf8a2c138d"), ("13f00a267c8126d6166ab2c974391de61f538a3627d95578a3169e3ee841ad64", "01c5117549046ca5447ec02a7d0bcda095eaef4c0705ee0e127e23e10baec355", "2cbb48d9d76945029cdcb053e8e168f0366e1ca6787540a159b49ca81488c503", "0383893ca617eccd0f3dc011a2d5f7c6ceb843488ca8b0a34e8ec249765eb5ef"), ("17b646ce7212e75b7291a0d9ac196b999e1bed34d96a82885abb67213b37258e", "21ccc747248e49df7de9b734b56d7ad4b82b96410d8f032e6ae19f0c6f6a6917", "03d1e21ba13419626a6e77d637711e7572867fec8c2496b4fd69d3e34d67fd7d", "03cd84e31059517eb13bc9b1ffc4588595f0b32f04c4ae7a31396d7b7e61adfb"), ("24cd21d53e3c09d9eed61e5c462d96de8d16f2f10cdde3457cae49676cdc6b53", "2db8fd1165bdbc71047db9b10e30427667fbb145bafddd990ac29d0ba8f8bf4f", "15bd293d4823800bd6201a44531a1fcc4b1c67c1906f512ba45ea153f5ce7c30", "2f34897560f3debc3d6de4cd815917da4b4639760bf036452b4493d42b0fcd4d"), ("22f8e2a0b199ab6194834f74e3cfae8e409ba634c3d854802587fbed43726d19", "12a38025d4ed1fec471ebab713837dcfdf5b48752c58afe86dd4659d21cbe717", "1aae9b8e0b35470de7845002b8e7b9b0ba77691dd8f7009992a6981dabb89a2a", "17760b767f1ac3c9a85ce9fe6ce67930e87868933814081ee1c2ff2a6ea674e3"), ("02a8c27872f9a344d7f0ec3cff186690490e6ea569c47e58c1bcbf0d6d801999", "235556c73ece130c30200c65b5a2ca5340280df9c0c53c3ff282757e65792cdf", "30538d73fa21a9bac2a0fe0e631f874d2ccda6670e629a82b5c34927441388a3", "098e09c3d921e20e816a42597ee4d34d218c050cd8cf2d1ae227ab6b21319aaa"), ("1c55c29f45c7cb6a4dde2dba2c91636c972d54bc91a0d1ba651aa3449013936e", "0828ffa9f546527829946a829da52f4050e67e47aa87d1e179807ac5afd9ee83", "16ea2d5dc8dd651f63d6c8d12d892ef99bc614b6ba58dbdb9eda7e8abd44382e", "00162d70f048df2d80e4806d5bdd5b547d8d8e776ee4ae8ff58b4ced52e8c0e2"), ("126b175af6a601c9d441fea67b3ddbad79551b2c1e6c61b4dfbc655151a042c4", "176c428e86d6a48173b80c4ac96663c90b61cd967c018aa769847aeb73b8c281", "186780ae1c28139946f149e00a42962a5a6d5aec3b0ceb4995b8a4d6c6f84d93", "2203a81e7b5d203e8bc7a62e62b8b9b4868a73ed8a1d61d0644360101646757a"), ("2062751db3837067775ee88a21c14fba4359803c35d8445ef98c34a25da33a31", "065b607069a1b1cd7ec8a42143a5a37b62c579e3d6989a555bdee0614e083308", "11a7f369cf93ddba1a776bccfdf0704b937843754f4b921182b61946013efdb5", "2b1cedb078108572fc287804765985aded03551786630c6d5b8cf4c750f5dab9"), ("25b625fc07e193bf4123e7682138faee8c7614cb9541a08d28c24fdde17b828b", "06993843992f74c70c139b1e7c41dae56faf727bab30861506117010e8ba2e8d", "249dcea688c3e7b2af89b0b463cd55a0aabb0e8dd95e4a80830604442ccac59c", "205503bd0119b6f8c1645707410041f6822fe46e18d5e113d3a7d60509be8881"), ("06e660fbaf345462f4d1d19f59612afb853e38df93f19cf283a3fa3aa3c1ace0", "19f74dba6af9cd2d8636fc970826cab61c1923864b555dad6c9947cd308bd44f", "19027df49660649d1952aae5c67f89d49bb6a50a4a33dc17c032ba63ecafd82d", "1e749d681044ed57bf240d04daa038494795e2eecaa62fec5a29dd26f236cf6a"), ("119edb5b0806cadc8963cc503a6b1e6da9136404956fe4ac4779b80b29c9ac0d", "073bc143f6a6ae7c97924bbf7b837b1535436285d34c5aa7cae105d998b55d13", "14c3539b88eefefa338797098c891b4e3f82cac6b4980fd3f4bf7a65e14c9b16", "0ee82ba10d1e0c9eaf53d8f9c5a8972241400201a774aee67c102b45ec75cf8a"), ("2984c5bb86269efec3f64c72209f6185b81b8fcea2edadebd21d016077696ffc", "02a89c77303fbe389acf30004212447e8afdc467c660f143984f70f609402594", "171d71fd8164d45b759a998b0057714c7511e9e9493c0877b676d6ab9af04eb6", "1d40aad7d9d5662b8af07bcc2207ebf609c194e4449b5f47ee664e3a2d2d4187"), ("1d4d9f43d611a23a7ee1ba231db786b4c5488227c495063bde883652151c503a", "1f58a8cd0e1e6097d9f2efe31410991ddea403fc0f2b6dfd9bcfdb98d9b2509b", "1d1c948b618d4cb6690d67c2880380513920376e5733fe7f4af5136035266167", "0b2db6b85f5fd487574913224a4dc08d314ec65986113e9e1709e0cbed75b9b5"), ("0d950bafc6fd327ea27ad133c41f29ef4a2bcdcd52f1ceee35ec65f46a1dc394", "2f204578a7e105ae3c4b21b6dcd14eabec6626f5b15a31bb4ac24685cd5b2069", "17e84ed82eaccda16a263d75c54b4114b21f1fb8261ffa6cd593f9d5e32529ac", "1a884c527a511476ec6f92b8d1508ae4b52f8fe23c71ea827bf8592f56406ccf"), ("188a2ad40abc47b00789de05bd16fc480a4276ee734e877fcf47dc2ea158fc28", "0486f435fa5e387ea7ffd125cc0a469d6da9a34c19d034b85b5a3290269b44a1", "2016864ed929bd8304b620d36b10501af71c9a12b65d0ec0eb5511c947949b86", "011c26ca414271343184994b3ba4e6be96eef90f7d6c765f3ed40b629ce08939"), ("255faaf838f461419e9417a6274aadd47e6d18962662a6789558c9c999eeb2a7", "178422de6e6a0ede7b239d93cae8fa240a5dabfcb87a17482b668413f4e8e70c", "2ad4d9bb035f9331dace97db681d52e5bb7532d2fa275fe303d7f31676b65446", "0a706bd27672709c5146ea2f4e2cc14e89365670286c7ef824fda45f32870b4e"), ("190bfed946712ce5e1d260f796661f6dc9219dee2977402eeedb7e99643c4c81", "24ff3ae976a48625d57eb69a98c68e5fcace30e315a7a723b623b3f946817666", "03467dfa4dd21d2f39c7210e1684f93f25fb096e5a2eb43dcd3ad37e1f5e909d", "1ae2d73a05ea02e90122b2d4cc361216f21ba720407fd659854f2cc3f4bacfe6"), ("21493a7909de8bb67365cd32cdf7f3a4ca5c79ddfdca1275a7693a9bc7934828", "1a30ae683db4e79ce04eb89c6550c3eecb8dfd570082bf6211bccf388266585a", "2fd90e0daa0351f5318f9a80a31aa70d07310c38f29ebc8f355ee334b9eec511", "1e6640128931cc6a1da9c67d49d889d7afd7fd3272bf120c410a58dd4fb25cab"), ("079e4d0f1a4853a5ce2ac813d8afa29662686b9dd52e7a08d409678294f9cf34", "0d38d25bcc1fe8dff9c5d628bb8f1abe059905306eb7f5b329ccab8d90d98c4f", "23d8c4c53e7eb8623f1c61165591293bd7827c0e2c5c81e4dea4a8619306e994", "20351fac514b3c0df3af604df27e77c0a79af88422b67b92e5c8f87b091414c2"), ("14c79ad1e1535833b878e86a8c2c74f688f1da277f0a7ea57584d5a417ce2482", "0f0c0bbe7b0a55055a116b5da4a315c474f2ea0e6613ef8d6aee45f5ba4036f8", "17145646149cc94f1e56d67da758163807653e83ed1133d5e6b7fcc0348acfec", "0353f7b1e974a0f00da15bf02a3321267d0660624cb710d588c4db67f2e93401"), ("2e0dc721a85fb55755f400e2251baf50ec03241de803608dd21af6acbd260bc7", "1c8862a152d3193c365741ef17bc9154d073a974733e5138f7f12455ec078168", "1aec9dd965d6f346a6c81ca3c750c2b7b09d230a3fd96ded1f665c8795ab3108", "1c790a8c3c374e8f02d0abc48f0024672cad7e962d81e3edaaaa3bc47d651b57"), ("254863cb7848a9fef01001e97ce9042ce55141eaa34082aed79d838b662006b3", "1aecede4737e5fb3c4a2c40d3834d7b760893a210b8491c31e2da9968f044182", "1105967c3513ba5523b8b22106f07e3f452596fa174ac31bd9c7e6629d48907c", "0ce66d4b5a89e884c20ec625e7f31042d0f4a3e9446b3f6a03d48188541e76b1"), ("04fec41df975aab121daf5a8dd38d86a13b5f0ea6a3c19164c0c28f585b9a990", "1f940539b0b28f14c3ac2e69bb069c0c3663a5701fcef70c7bbee252b9b95177", "19a202b9e3bfe9b580f53a78a59802bd033b287708b9b348263022f5ee50272f", "0e5487e0074897614e72e4b331cfd931ed948022389a4b6b7b360da71ad29d5a"), ("2e53a8f2ecf9476612428c6878b01cac758710cf7952629c5ef5743fd6382706", "15bf5128fa5661e35e637075526519788dfcb3b34e2cff18d42fc35d8c96fb7e", "1fe4d4fe72f7958d0bcab3fe92dcf747dc0d31537adf0f8c4e2db28d69672cca", "01c72bbc100d510095c6ca9dee4437d3d9bdc1ea12e37f5bcb7e8a8be2fc37ef"), ("1cd0deac6314e4a0ea6ec43ac2c6ce814d5148938ec6ab3a1c69a6a214fff0dd", "08837493a3575726d2c332a3383f659394ec6eccb470cdc7cf1d01786966d527", "289115ad88027ec529ec42502906f5c875eb40b7a2fe40bb4b7107f544f137aa", "285d463e5b9b213b371821a19a7a9584151b85e9c5d2cfe4511117d3665075dc"), ("13ab150b18e4dc9f116030341d3ce5fdf6222dff38c5c31366e0e79ee2fe8e1d", "2a841557c4fd379c4a93623b71cb2beb28136d702d97e132a65216ca658935fd", "0d504b800d4cfdbec0bc0f260aa55275d168a6751ee174076714d02e094779f5", "0c01a74f414a19755a08d03fc7055ec9bff9ddf0e2eab2ef220b0248da5fd480"), ("28271af91ef2eb01a0a1819e3d0f0893164ef457609c7dd53646b73fc66299da", "281775010d09e3735d9bd81c81ebfdf4226dc85e4333f1ada18cc8c0736a80b9", "01434026359bbdcd8c91d1f942e66569018965478751e55b342647bf07a1d017", "0ec246b60b33f1bbe37852f64f5fc22b7ab1f5acdfb2f951306bdafa20facc90"), ("0933bccc550a6aeeacdf6b01970e3be018781cba700fa6c7f98ab4b5c2a1b096", "29c73119df03ed07784cb0a6e70d29ebbde4417909b3408dbe7ed1389940da3a", "0ce2ef2b4d8c942afec3508d02de82905ec48ccd54c5a25bed3f92792f5122fc", "2ef2577a203fdd927714039286f742dea08b1803fb2ace5d5b3ac308e21ec6c6"), ("00f333b3c1394e1e16d3c46e5ec04ba682bec8530e68cea6682ee30421b69dee", "293310fa073ae59682d7113df98dc7557dfdc4526994f357a191355f3c1bbc5a", "0aa17aef3a211026532744a06591dc66852050a4d44a2eff51dc7bbb367ae70d", "2c9bac057353f976dcf136e297a3bace1e768db15f2880964ca11f7c6a50b8d5"), ("08cf72e7558d67d6d97cb4bb242b17f8d17f00185aa5b64442c5a717d3b53249", "095eac9bb571ae8f5dc78e21ee9e25ff26b37257af3ff26a05ae6e325f4000be", "273624d0d8513081530a76a10b9275fe6ad94b67e9c0947fbdbddec854c8e4ea", "1e04cf5722bc3700590d68a6231b53af8825941827e95cb9bf564a8ecb3ff604"), ("2dbe2ae176d86b844944d9954c5813f9e3a9a54c2328dfaa11cbd6232bf1b2ab", "259406956c140b27c3ba185430c9d9fa179638ee97360901697e3c29eb2682a9", "22e218687262e3e56bc8776be987a7ea3b73ec299749a2086df39701fc23e65a", "239262871276482130f8066b0403da9452ed61db93e3e900b91a4d88b66e9e60"), ("1e925d33bf544d8e8a5dcaf2330f57decb7309b9e9dcd25675c764a0c5d475af", "07d7710df1b4432c5bfcabc9ced7ab5e17074fc6690940b946c8176de04c2f9c", "29e339dc4471fe9cdf12b458df4d75d6bf02fcc7ac4c230eaaa0a2e99af0e4a9", "29b7cf9bb92799b01a9fb31b949dcbc7fddcd5d61ce45290848864b17737fcfd"), ("20371f7cf5f089c18d7e36f42d200700264ed670152e1760c5df10850e1c4e2d", "265693e5676f7bf06812e15a4455b51ab85f879806d998cc43753fb8896adf6f", "23cbde59e7ea81852cb9b8f40cc9db1bd8bc5d756494002b4146e70fc73d4efa", "2fc0952e39ba32fa8205c51651aca19afb7421f8b9608e8e0ea1580ee5fd0c5d"), ("0c34442a5a5aa28206fce161d49104304d4598973cbbcbc12e9700f12e76dbd2", "2c9c9e30baaab1fb13e6f638560255b0a9b3e4d7775315f6c7c63ef5f3e4f38f", "2f5bc3f40fb9dac55cb621c31b2874b4eb2321f1a10e5cc40ed9ac0554e643aa", "066b13e3de2f590db2ecbba2f98da6e927e9c2ddc18a6a096f6cfa102c5e4f28"), ("246e397f0d7d498a0301af0d83c595f79207fbe40865270b0c68679f06d1bcaa", "108f399bae284a37e98fdd5c6967f3b84b15520a331b88ef971cf2b7965b679d", "0e84a91d2896036cdf105b90f1f0f72713c31e764647be4e6b7801ddd8ae85ba", "26a5cab99a35e3d4b612f8899f78d8cd527a216e78c86441fba5ff0c040287aa"), ("1c1ed4e3acd3692c49edcc505cd9dbbb41dc4147700b90b32361c5a520be79b0", "012f8da6877d7b6af4cbba9d3db649ba7065a663da7d38b7dde0e20efc63d472", "0d7a77e6ee74cfa2bfe88d203e5317975a71d058ea062702c8a3134273ce23f5", "108179bfb92c04e8a372c86654c4c7e605173a742cef7d9ac4558cae2fe38248"), ("08412aae57fbdf48112c20f5c9f6f67a89effb1206d53172d5399b9565be17f2", "2608244d6a3a03bf1fc08d0041af7087546ab6172d0720f8b7f91d79b45d37c1", "19ddf99fd595cf057d834b6519ff9abfc42540e3011a6457bd9bbdd5455c9f9a", "11275546aeda716c1bec29903e1ebf46ccf95bfb7b2051c75c0b905b7f41e9e9"), ("1d5efca0f743094ca4da3e712251d251464c421cb463b6bee9d7c865b1a4e2d4", "2b961abd80ab321ec7027969f7d0812e09f10788a3d32b99b09fa81730ee79ff", "089ff44a168589a356226a818e78d556bc6b440ee1af3b76e3487bddf7845180", "0fb4c9f8ea826bb278c21498104447373eb3a6ede35d87d54f4c90e50920e531"), ("017af3b82f49b43c20e5b358e08fa02fd5e913d19a61395e08917df60b13d9a7", "201a13c5356e3aa7241a4966580d4ddc6b025d10048f02fbf2212e1d9b3f3c54", "218b44de00e94045ef04872c42e6fc61601692255dac93ea642d7e322143b757", "2fb61e6ba94dfa1a127d43eba0c7e911b183da38edb66f4687380beade05c3a2"), ("1200c064ec70c94f7ac1fd07a522a4a786c81a5fee440a80aba70fbd0d0adb53", "1fcce0ceade650d2b64a2ab814251e700f95612d371a05dc66178c95c2867cc6", "0b7a7049591d8abd667e9b0e27c1afb72dd374f47362056f437221c078c0e5aa", "29101a05a9eab3387c5cc08a7947b953e8d7f7e59b1e71417095609735e7a88d"), ("273dcbf3520061697e78bd49b9454e79e2f5cafd7370a11df8c97e47fbf6c2a2", "06d15f7a052211c5278f0ced6d17e47f7c44448d1ec1ae8b100036ada7bf2f36", "1eca1d4a0d536ac2bc557984ead4c5853c488373e07c3d19977603f71fc360f7", "25e10b36478b4d8a4b77d6fc371dd46fc847f0962f2114859152627b3b791db9"), ("26cf0e2e9f7c41b9f8abdffe423eefec5b16663547379d03430e8936d0462a01", "0014b911b2938208833f8809c7231be87c100473de54bedd407d3f4f7ff8ce28", "1546ac3339998ebfe57c698935ff62474d4ebdcf40f3ffd34b73fd9215f14d80", "110a63e9d946de923257efd8511839441eac4da72301082d1753fcd54b8a6f1f"), ("13eb63685bb88a03e58d98e7812b85478fe2f56bb562eec874d16b6d209eaad9", "234421ca4d05400fad1c024860c33fcb580b00f09bcfde54702f295ef1861f6f", "198a572dbd84475ea346e89bbb806926b26db41f24bbaf6ac73edc3d07a5bd88", "2c1a4f49e9d7821c1baeb57077d49eb0daf881cd1ac728069f5163a18f5aaeff"), ("1b7bb35558f89c0c5d8328e13b9f30404081fbb0789a10ab1951ec55c902872e", "1324cf7cf0f65607bed8dcaaf000ffba64f365e15a21d284d9dd2d4ca958349f", "00fceb31d3d1ac336fd6924c1db57e788ae22af957a2f62b11cada2acd39dab8", "2b1f0487f635e295d391302880066f9b69eadae7194b6e0e46b619e724724593"), ("23554f7c0c23a0b8eca87815153e2b8818635f24ee99e1a115e04400d1221adf", "0b3830ab3bd27c50cbbf5dcf0793075f594fdd0c1d94f149e27e51e8a7fe6757", "13e22a7e7eea48db1920af698b496ba465b2e7344b811a7212cd9f3c91866aa6", "044e31d7ff7c2b7032181df34212bb00ed2f4af1b298cad491bedba00b282237"), ("2ad9db6c1c9f9cc1e21b8922557686afe74f4d0db2a70dd1c3f0e11de805be1a", "17a6e9244eedc6950e4e020dcafc48c932e1e925890c63c8cd32f5148d562a1d", "12194ceff39584a6ec20d9b30630257a0e8e05e68104b4ed88920d13cda40557", "13fd8155079bf564fa101c8bf1a625991147cc1a5e3f123bd361923faf65cc1d"), ("2301ea6a86258fee257c1ab880040eedd904fe7ddaa36948686d1020fc813f6c", "2ea8b69df5c1c6e487cb6917e689f6c845f1b412a96afb75cc288c1954140d67", "26324547ebd05a2e1045f656bf226b4fd432be7b326ec52a444f169d45c6aeaa", "24ec21da269b4e2da7c194d3fc17cf79cba2d2da16c140237f8803fb25d6bf8b"), ("00aebffe4298a4ad2ffa0274322952a30c7b6d01ed637baf499a81de69f0ae05", "263ab149c52595949850ae020662281ffd91fe21c1ce47e98b5be9fd10522532", "1dd517f814ff6519bee9e2de135817d1e5f06ba28d57077d89800e74be64a73d", "1e5a0ddbe6b1a680ddd5667b463900ac646988731cbaec40602bda197c70f3da"), ("1ad4ff26958ec2f5e0e7a366d9f03f7020464dc5cee8b7befccae260fa6ff7ab", "157776b0b45635ebbac1d1fe39b4d354f63f7269e78ea6267b891910085bd664", "17c424dcf76b4ba7a5021d4707539c9ec5c80ba4efee6856a94490fc49dfa8fe", "15100cb94b6c3701bdec53313a27caf3499260ac5648054abf142d6c6c2873ac"), ("07acbbd4acfb80cac9e363cdd87a1c161aea5381417c1fc30d5a10dde381a4a5", "1595865d5a686b6deaba8e753bbe962f91c03fa53b7039dbdccc1cd246c36868", "06fd3a4be603f4063a3b516d7a148bd3063504b2479a4b94e200a9479b513dd6", "197f03b700be763b8d48c1c8fa852ccca8621e47f554d50af842577daff78120"), ("27fa956a9fe66368aad19790d1859ed515c6d1e9447b26f924f2f50947de1e7b", "0bca0482e85215b123bc853be3772a4c9179ef5036b360c0794061fdcee0cea7", "02cfc3008d47951bfaf0a0ebe103898f42142ff975e9990ea405606b406994b5", "1d287757a0ce47f28db74a063cfefd25e508a4c0c6e8aa862be3deb4ee0693ae"), ("17951c96ce6c03d5835c9ae28d9904697428054cfd6143535508b8f34f248d68", "25fad38c1009c5ae579a5964805837e64865008ff330c629b9f6ca19f3fd97a9", "1b5c74221ac080d5fe71a7a287a392fe1ccae845b59df27866a3ac4a46b6d6f4", "0a22fe1f4e02330ad2f65196948b4489b50f5ba7eadd46885aa1e5a5984a2107"), ("041c049a3286b14716486ece116c6dac8e38d795d8689baf3ea244e4c36ff18a", "2aa0a14edf94809827ff4489fc2f35612cd3932f417e80731926f0f3703f8828", "274d6aa625567d7bb0db693f2d753adbc582865b7d4fb1c694246fc034fcfda6", "187bab0d292c89807f989a65fe63187994017c1363f3d7dfcfd6806078108e17"), ("254e2b632083b6a0d3827ea231d5a39a05d6c87ed9efb26548b85b63a646d6af", "1d54e7583f72c18c4459c7821e012d55a62bbd133167ae6931f0b5bc7f82b4d1", "1139b6e7f76c6ed763997f0be24d0e153e9914ee46faaa1260a8eab5cf3364db", "0c85a93003cf6a82c3899500305c47c40d070009244eaec5268100aac22c0911"), ("1ce11c7dfa9c9f951de341710fb5ed9f944fb7a5f820835137ab75114f1f5d0e", "1e7edb149aff8cb8f3de62c3527dbb40066d1cd14588bd33522f9fabd8b011f1", "28e1d0bc701be4d8140cf0412315301c08642ce139cd347e582508f5f80590e0", "07cf1b2245fba1ad6130ffce797b16b1286cd1791143c8d10e2bcd3a3feab2ae"), ("2daccd8188c6adade4b823c1be8e7f2e0604573f56aa1b0d427a2652ee953e92", "2ff55e01b5b3135d262c4e3d4f302437bf26205d77e73ac0c8a5cab77018993f", "092aad8e537febc22fe701f73da41240f30a3ab9f452a522a546a9902e9f0349", "068b3cb60e5c4c14139cde4eaf0c6ab1dd63f677b9960143f0433541ab4191ef"), ("09a4e8154893e0ae0553afaf6a17f05ad608bcf3816bd8a898029832102f9d84", "0660a29432240383672172c6ecfd9f13f110c152c162e158dc8bbb9eaabdd36d", "1c9a094068b68b2853aa573e460647d51d099c8d54e011a843f0425b65bc678c", "144c68e4da6d2082768c00e4e51159c5d822472095a2cf39c3374ca9029d88c9"), ("1fdebb7d2048230a1732ed495b125a7915b647d40ff2b052818ce344a870c698", "167d2422835d9be9ce10af809b22217c6e8f82c66436585dd450e6779ca168dc", "00a210b0376c689d899e49a34e1a98882a4677e129d182df29cd45fba552e6d7", "083fde46fd2232db6a5ef643e109f78d3d15065942f1c3bedb6466325e381406"), ("0c082014e891c14ff79c0d689b0f0ce80605c1772d95d904999ef45915365b9f", "07946f24378de3c78802486d1cc2cb725253e95e68d60fc3eae5db6287e803d6", "1df780fba83f09028560e6ed2015e2337304cdc8101d8a1cbf72952125a64503", "0139a52325bae6e7330e5ebd95f43a3b9e2b71a632467ebc07d747752526ff3c"), ("038b97a2b06f1afa44544939bb2ef30976176f3cf8ef1246fbc61c17aab3f4d9", "072cee131a7625bede0b415e567cbfa7b208dea7d4ed98d9bbaf7b17d940d50e", "0581bd40bd2e52332ee6b0e682efddfa27b1de4a8633370be17f24f082aede28", "115c4766811e155d91420b20c74f2f13091f7ce17a40145f640ed1b90d8d18ab"), ("060451b69e2425ef5da122fcc9f20580d65e4b484a25161914cce5e0955740f9", "1d1d4656ceea673cd417716dbaf19c97ef19105dfd232fc06b20baf839a66616", "04943d5a1e3954d3472842e7768850a7ca5843c50ed0b6684a79e02149bede0e", "27391b89332cef40542da8af957e349e4fa7d5b2811b1ec8736e3bfad48de15c"), ("265081a988b900b750214fa3c03d6c19536c43cb90f5433883078cd09ef432d5", "1e635df0c6f5d57fb103bddb70c53d65f7e58b67e489521fc391abb0f7393af8", "1eef4eaa10a293eeaf2aaeca8aa40061166f27289f1b65a4d5b572ab2d5a574b", "1d797efa396a1dae704146f90b2620d69e9ddfcbf2199504de1c4e93fe706586"), ("0fc259ac55b15846ced19affd5c1c0b4fe81d46cbc0c4273bdc321bef3e6cc97", "26544460b1b702bc6d6b00d6776137ff2159805f9c219733c8c0fcac7937d340", "29fae3c63edcf06f0b2b2b85df6789d7720dbaaae42b710be70e5d58cb389665", "2d1ebd2bf0f24d103c28983a753115e6755317b18cb59b5dd76735edb381e894"), ("0f357d14e6f74dd8b68579ac622d2739432df774c5ac329d952063a152e69cce", "305a2cf029b43dcbed1b65b7f34980a44a17eb0fd1ba373b0b415d90a2ef3724", "006fe350a86d3717a15ad12a3339386d5effcfd7c13d6af91c0237785fdd47d4", "1b2ddec5a81ecd26703ce8dd3327c1f22ff0f38ec14aeb7f05ef859c0635912b"), ("034ab4550ff134a25e08e66ae0899f01160bfded03c2ef097811ee291786fc70", "241b7002127299e03d8d3ade54469bdd9a1e88b545158ba5b004b072aa1c98e5", "1488fc09da22888a053e00cd0f0f5c5c2e6c0ad023be0db71bbe1f1a65c0f9a1", "0445d6dce3cc8b415a06d01b5ffc7fd3b36d0501dfb47194ac21b59bbcfdbd7e"), ("14583b2d182415180d6335a0abafae5f3703e0969a479306946a4dcf06dfd5f2", "1a4d648ea097b7256710f6aa1dac915c9256bc714dda9690210fc6f9ca20d011", "0a6372ffeef56924d39c25c878d93e13cde07283e080eaf8c68dd9e1480a81e6", "0e32a08875c22b80002140151e0ea05aaa6c976ccf4a5d68c34f87aeb5109c8c"), ("10e600b1661fd99fd19b3ada489e82660aad5ae8eea5e61459e2cc51b34e3a13", "0def846b5e6fa3d2ef2490ed3eb2d1b576025791fded36ac03a420019d1e8bf8", "16ba4638bdbe792e26a035800f8573f7ed8cdb33a24ac455b9bfb8e5605b866f", "1096b7b1e2759c35e32e05973b714cdae4eda0f5f66510b7365e48628ef2be38"), ("07dcb3566f7c4e7512340d7893265fba9a1b00b8857a0f6e159df699045f5320", "19f25885af7e0d0b316e0c6f5cba093143c7356b03bbe4423aa228d795dc9a1f", "13278e2b2705426a3ef56ce7746ca5f3eb79f977c97dfd473977b0932dfcd8a9", "19e069b246f90e33bda434b615a5c63745735bf26df952876cb8ce3c082e4e12"), ("1747a621c86b735bb8b6cfc6e312233497855b2c38e6acffbf471231671108b6", "13f220bbe79f1d33e3dcddc28a11c5dbe8f2ab48f2b18d1a967c958f8bcc2e84", "19c5d2e03199c51042bf3d5eb400f3a233382fa4ef0e5f5ede7a4112480ee82e", "27e7c96491af30c3a3b45dd88f8ec3b37d626da83c853d84c92841f3b9012dfa"), ("0660b6db96031e3c22f6e83845a529badac647308a2781b48526495a2e37642c", "2cd39cfb2a84239efe1110d8ac8f3d98d236cce42e6802cbaab17de3642a068a", "1bf2c8e0a560637bda2e3f2533d6cb412ea70cf3c03751e439139696441077d1", "1bd4d023dfd7abf42fa5548c56006a76a536e9f202c8121182177b3a3aa45fb4"), ("03c4c27b0b0cfe7f9291933c88670a0adf085456e569f7a43eb36e9538515e3e", "0eb7c163a930569e76f5e911f5598d8968cc779ed1f14869dd5be03de612dcb7", "10e66c1bc85597dccb510437b2aae196db9fe05bef65120cb63c13e15e2e558a", "0aba70764ef1e5d8bb195dd12f79d34ffc32ee9b33f1db44e6a923ceab8347ef"), ("25198b928fc0fb008f7aa7a8f18771330955341a2442727e3b6b037e4f9b43b9", "20b244ae38673a76d3b19fbced8bea6ac30d9a383dfcb0b83a7737237fc0c216", "1f4090b5a2cbcb8cfa0c03fa9daab0096ac809bafc386632db01766a64d29704", "15e5e1bafd7c21cb419e724a4f11a89d44ab3cce059b40b4d9adec80b9cc8876"), ("17ff3644a5c7cf09f57db4a93b63a913f27f42d976f43a66899e24f311a339f3", "0760daf9e03d4a50b613dd98f0532b004dbbd73b7d947128e046f5e459359f0a", "289bf01c747f4c13dcf9857f4673d302c434049510da417d045a7283d39cf0d9", "03ef4874c18a09ba2bcee5cdc8b678d66ec44861612ad6268c2688013e170784"), ("2ccd7e408bf42ecd2dff149938f659a64fd0d4f46fa798316d2c554d189df704", "247cdce9285438e5d9fe069fc5f0dadd24cf02c4cd83027fc2aed2bf6e1fae5e", "0af4ffa574b4e0acfc354896ed916d6ee3bd716d08d0602341e018184d8312d5", "17e02275aa518c8d8099bb4ea41bf9e4fa48ba0fa1b9e3ea16ef04f0943a740f"), ("0be4b783396678a869306df2c120482b9b738489da0df749552faa9076740053", "1f31aca044d221c58040b658480a277ab25978f7150a25a8ed35e833557d9f6e", "2e1201b0691de155f6abc511b36d3d2c932fd210861c0125c9b5b8013675e690", "0f01da779aed82e3660d0ac0ae10f7767fbfe77fb229d3c01124c497096dbd0a"), ("21ff027a0be30cf71a4531a55c4bfbc837deb69f715172c253b3477dc509df8d", "1fe77c6527e0cad5b5ca26624a16918c9c319d822b036ddc174cd2934dbbdade", "146245cc10ae6e713f6d4d5bd54ec85d3c1c49f272b3ad9d995d0fb3a8535705", "12e3fff56eeab04602afbb1e5d2b61f9285ef8942263d974abcc07d9acc8e326"), ("08b1fb56f6d060adf4c7b89db2c050a7bf711031518eec59c631c4b6021684e5", "2aea85b5fa4ab1be2dd518f5d0b58c97ea3212bc53d407c20a658e5c7be023ec", "25e45df5329dd24853e2bbd24159b81f6727aa656d95c4cad5775f6fb2f38eb0", "1aed55d621f7473a697e8bcd367c1d6eab2cea85e572d7a4dd5d734a89693880"), ("2ab174a87145b8ee5ad66ab0bbe23ee3d4dd83ec3c1b386fb6e4e2ca04a96265", "0c8f53e1fa9380f52ef17e74378284a304e9361bb6ee2aea5e40873d70d7de6b", "0055c416ed68f8243e95a3760d0acd10cd1c18bd8bae33f57a0e7a3a2104b175", "1dda347a4bae99a4e18440ca879a5adabdd746ee53e44e0285f2d7f406c1fddd"), ("16481046c814edb99a33d3f60c648b415167fd440df157f064896e2f9a88f825", "277a785a0dbaacd1db6ed07882ac7e3e7bfb7ea93d5a72273bd86ca02bf3f017", "167eada70681d9d747f572491f983be8ea67e672a42fa5155d765a94a487cd75", "19167b4d338d4f088f7fd37dc5f0192bc6e38f93525ab12e6bd4d085431afd67"), ("0efc3d6236dd73c91541fa1e8980f9652a9e65308f338e6cd76677eb01a09482", "0d1355dadbbf36357ee32d23ba3137b9c1f56d2ac022746ea49c6b20fc818f71", "1ddb8f9705b8922b03e21f481d23499bc942beb6f94424742bd09ba8ca97324a", "25af00e0c2cde0509ba7e16d75caace24808ced8528fb46aacee435e273a3af6"), ("2316167f03d7b49c36a55fd74c1d2e727e07c77b3b47163c486a0c5598f8f6da", "0867ce8dd986511d0cf630d26b630ea75ed40aa3547b92745fc4ddba1997c1b3", "0c1f748ecb39f8622376aaea214f2dd01159ca9ac40d15f47c6eca8eababd8a5", "0261d1682864fab698ed8408894fe0160c167c9617a0ba25f43b06093aee51c9"), ("20857787f98230aa8dab66cd35a3cb36f9957c52b2a2615d9468cc807dcc7552", "2bbd5127174797ada6330c0b9e49dc2ac0c933278d376c7f4a53c11b6e438678", "0448cd0b57a21324c3d1dcafc835802ae216546234c2460cd0112e2e3a828b1e", "15f37631be42e0d93f6b2ee49983a299f1ea07658a9ee08c67746ec7bf4fb821"), ("1859f6403b945c422c5ce774bc653c71dcab33ee4af33bd97a284c83df66c8a0", "09ca1f90dc773c205111dd90b28c44cdbf85862d19c2b3f542e1ba666ed38b39", "2ba928855064c48c2fdbf1bcd3894a5495a828ba5663e4d20dc1934f73e05876", "0b773faf9eac950d998927f9c520fb9edf15d2e77bf60fcf826c736e3a0e94c2"), ("0c22498dd9d129e5423581aa3755f42b470025213c8306bda92f1c11109d6fb4", "303e8718cb49dbf9f9c0a7a40bd7392e703d166d859d7c4eb2e9f8efab37cbcb", "149c598bae8fa2b8914033cfd8d955b2771a45d5afbd9e8401d74cd422590b12", "03e09e31eb2389702f6acac9d51b74f181b7ec3373228d0f2d44e973b76e7b0d"), ("07f0d8b3d236eda33d6f22ae3bdce31c27f4ca676a9d303825cb75b5049f5574", "2a07673d9236b7df84035de4b8907f00206d06347a515cf3bce7d616420db281", "0be21f72c9c4b8ef3c77694e39629dde6c70112222d5c46237c40df20d719fb3", "24573180fcb86dff3a1844a063c84764e8f5a8d343be11f044fa57be88413377"), ("24aab0fd1d548a3a3545a2369386c142b76f4baa85e3baf0dfda449ebe6e554b", "0c9e270c6ae07ea1e313b1e13b28897cf76027cb3e76c2d87734fdaff8d5d83f", "0a80ed55c4c10cc75cad85cb0cda9a6eec18203dae94c77b30f51e7b2e3c80ad", "0cb8e794793e4bc8e827086d2bf7f679e0ac3bbbb065120792c14010280122d2"), ("25abd60ac53244508737ef486f0d9c179b319d01105b6b2452962ff8c50b62b7", "20fe6e456715da9eacc119e794bea1d6203600a194e5db95b37841477dbcd24e", "1e2ac6da0cd0193e2bb19a2faf63cdfc9d71e2b1865cd573878a08998fcbaa2e", "0ea9c849433a069dfe6a6553885192a1cccb42809a4188aed7da9158d8bd8857"), ("07dc8e6ea6b5e98832f8267495290e707912a5c3507e52231db3a3d6c6311918", "0884c09bac23a192f3d95519fcc1d66bfee39171047ad4eb57e2f9109c2fd470", "1caf31787457b9ccf47641244a7e299901b2e87b353765bc7002ef5aec669b69", "1f3e499c0cef0295c3823962cce6918a5fd95141612bca3446b15c11b9a3a9c2"), ("0681eeba9c751466edaba1049c27ee8799e6aa466f8e15a5fb019ece2a36b194", "12e04a99f4b41f9071227ce6f46d51e3b41374d79e0565eae2fe8cb5b0e1f91d", "1532467f41e3f7b610d123500070facf08755a6c57ad1c6e3652848417a3f50b", "0e63034992f0af1611c1d057eabc9efdf9be39a8355aa33df31feaa4dae92552"), ("2a96e658bdbaad7e5de60108375b95e5fd77829d2847afc8f91be83b307a2e82", "16615a2a9fe3d7e42e84acb24bc2dfa248754d39d9a14d88af835abd25eaf3de", "1f208d93446478b5c554af079bd776d797cdaedea7a09c72d44fb7af4db13e36", "056b596640251274aeb3eafac4670b36bdd013da0d93778b365a6c817657d7c7"), ("08477de16bc74aa6f48fe6035aa914640b358251945bbe63e853893fec6b6e39", "131a81abb161f25c3be0c82177495de1503a5fc0ed326b01fe4c318e655a0639", "2fa18ce4dce71149f47131fd1e93971be6ab34560c04ca91b9f2802f31fcd393", "21061c5e3748e104207efb5400680b53f5ef281cb6ae846b3260a4b0fae80647"), ("14ca37cbd335582e4c68bb40f56cfc2498c2f58caab53f47f1f3443d693a499b", "0f629b67e60841bc8c9efa0776b48a4fd9524faa6d327013c7732170bfd445f7", "19b9fbe1d98b7659c5d4a3ec9f19b33170bbd8b57a540bc503d36c7b0ae75d08", "2d422126217554d9e8b76b52401134d0e69e4b740b4b72232e6623f398d91f87"), ("17b53a492683890d60fa74f2f681ddcaaf005a1f8258c8b6960a182e49e5926a", "19a5023352716090cc055ced9b0fb1e86fddf96737974f5ffb1f96908ff9896e", "0477819ffe7fad2bd9e2d811c718ada0205cf3e10649c51b9e885d5cf0a1944d", "2b439cb1eaa0d9e31336acd05c636cf25967bbbec0a24381645e6167c91c4dac"), ("2e20f3b9b0cc906493b4ff36de5cbe39972e50f5d1d31e21fa93135cb19bec51", "04c36491c82ef818b6be4c64e9b21670b59bb5daaf14a6bb86db9573b569a2e2", "042600d4d87ca0a20fe980cdf94761d05ae94d68a6f557e2c6fe1547535942dd", "2fb778dcad7a33aea3c4e7d9bb802d33b07513c022cf423a3578ccf6641255ef"), ("1e282efab743a0c10e2ebdeaa2c22f87b46ce999220d3b7f7e13ee141695265d", "1dd3e1d2cd6864e7c415536c10a0f066666053949071756766e179ac03bbe223", "2202250d741b1d7ab04e643cfd936313abd92d766d6925257f8f0bc054573308", "23c1fffb56902b06a8575cf164a962703d64dd3b1d78fa338c4bfd70b19cc3f6"), ("1638fc34a80d8c225b6b010d63a2da2ef918c1b462b39e2e31a624afa3fb7197", "0086e2bef1cc6968408529065e8bb0131a7eb86b88d3e129ce679ae69547e25c", "17fb7336c8b1d30544e674203786b8a9ba3ccbedc6ebbed5a35061f035749713", "133354fd63e4d8daf8e312bc7e169c567b4948b807f4dcd41e1ec469e83c887e"), ("0e3240f46aae4e74bbaaf645a5ec1c94884f35eeac90d67ee8d80b86c1bfb006", "0f6cc6b813c8e9bb2db4b30d5f5867a191fe013e38aec7e50967eb0596112802", "1b90b5ec89b49005a61648ad73bcd01c0160179cd641bc317b0ca04bf784ae62", "2dce57b278d806ae617b60b34e3b786e4483e004d848f6d9ef7bcdf7bb1ccd79"), ("2a825f1a0331c813468f17c77715fba0016df11e6b0c603f215c155c9898108f", "0bd8c1006acc56be84313311d6a821c8c6a64ab43daf84f1e5a03e4c1022f89e", "0dcb06ad3c998808bc734bc8d993af95448904905d3d664b3d338ccfaba23ee0", "18724bc10db0516b7177ff3da0b8cab0ec487a1a0eb838bc55edaa51de49d243"), ("0a07bb648340a2bd3338f9b4304b8bf86af6bd06196fa38856a0c1f6b0ce9bb3", "2ed1e626185f1b7cb54bff79b0e12346a24a3156f576c5f263cbcd2e26625c04", "09e9e78f33e076c2032fc387da50355d3fe6114c83f83340c14593d467e2df9e", "094b486f2692e4ff71f2a3a35622f912698797837be62a29bb257df465cf3ff2"), ("2c9a38254d6abb7cb1425fd9c6e1184588ad9b9b533385f1392f3879d0639f1d", "07f5ddd213ed95fa892469664622a00f034f77980449c2dffd87ac4ddb808208", "2d870e3d638b17659d2e4f80c17d5f526d3cc588f018c58a2e8f0748676cba3c", "018eb50d4afec0eb7defead90446f1c0841069f2d84571500842f8d5f10deba1"), ("08750c98340b6f3de975873645f0d489bf43a427123d809b30a991b179bbe815", "0b82bbbea77b1f1d1033f6764c621686ca259e07131d0e5da553aa8e462634d9", "19913a629967203029a40fb6b31984b70817f9ffb564d182fe1f7f4527283812", "099609af9d33a6617e364334c6ca797cfa42137528cbed0fc357f308323524e4"), ("261ea1d00ee18d87638f3a213deda3d858e16275295a6d09ab56d41daac31b45", "1579deb6e8066446279dcbc2a0baf352fa77433768b58eb04ceb19412946b71a", "011100cfdac17fdf6037922fee5f73c8bf0056c425bb80ac9e72388fdcfc983e", "0c3ef8cc8a0b3652ce4e833c502cdce9599d8069bc029a485017903720a6d80c"), ("18f0066d481289e169033e38baba8c6b7e3055652e04396a79c05313ea66d4b6", "05bfd998d3e785f9f8c7d4b33c3df2c0c5a0fe99d62b49649ef26011dc5b5615", "02257a6b2a21e3ae079f2039bf1e8fd15227fd0fd3091077231f9ef8641860e2", "0a2addab3aad814f6f973039282999238525fa22b15a5cab8b942b587003b497"), ("29c451a1d1b54b6faf4983992a6a8e08b24053225bc95f335f707bc47743903e", "08495b91dfb280a4ecc8f1501851bf8c63cbd55298b79362b75e0632de34c20a", "1edca6615c6f16006effffc9199d8df6a0d5739294a94aab8ae63e169931fc03", "1be5bccf24c69e74817e96666a3da4ba47f9dc90996bfe9117d158500d1facae"), ("13ecf0998c5c9f94a34b90f47102c4080da4359cf7c1d2dffcde52c7805b4d0e", "15e7bf7a310f4a86bee0ef0d9ee3508251ffa69a20508f4d58625d211db5d6f0", "09b65c321f5740920f0a0c8e99cb726941e0af738b089e4bb0abd98fe91fe106", "2c22acc9c797440a21780cf1ca84e29dc0fa2efd75596ec564041e9d94774330"), ("2f3e490c15e7cf41273dfb689c30e26f1eeb771454eed37dd4badec774e56419", "1dd8f9e611c82c9704da92b44f97a3dbbc02eb15c04c7225833d8a91bbde07d0", "0e55adedfee251a090aa7535511be94bd0da19b853916a1079e631670f8dbac5", "1a87faf484d032f6de79db91975013c09a409c3afd162b3c05756d314de36d09"), ("2e73387abdf4f692e5862b78957837de06d9b64e64376ba7fcbe4750bcdb7a93", "1a0b2b8892501ce5909fb60d277d04818645a1709c6810aa6a68dddbb1418692", "1f756db841df77fff4404b58ffd3a4db027b872898498ff27fe6c5d81516d621", "0829121e46677dfa990233f313b3137319f8ef36dafe37161dc2a1811d289cdd"), ("260eb9c845aa8e3e8309e934dfb1e61dbd69c165592daf1e3a74ae5f14ea5571", "02bb02fdd305c7949107e223c99424a0ed17a8bc5f1f1138b3b5c93bfa8b443a", "2cef84c89457aaf61ceadd57d7e132e169a08e4e46c76dd89a47edfd91c15a03", "23404d64f6bd5706d942fb169213c5f5d3c95ab2c791d9fd9317dd9dd9a767f3"), ("2d9d088bfcdc885cfec4566fba3af00c11019bd92f857649ef4a9836c4047323", "143eb57559999b7f7729488822675fb620e2b29d42179c2027ad6112a8682244", "1ec456e62ee741a3995347e0b22e8af0681063694008a0867031a6c313935485", "2b453f685d838bcb56e8f18abe1235cd2b5e100cbc8760f617fe2e1daec0d324"), ("0867d625ec0a11270b0319ac9e7737f05523a441ac3693fdb7eec1d6affebdfb", "10f26cc3000b8b68027de173f84b04e5635b576348bf499265991b7d17cd3271", "1390c31be1790a3e71fbac4b6d4a98029024573babc08003af2dff478bded2e7", "02a22f8f7886640288c5f78edc2e86c45f7abfeaaff8b383840cfbee73e3d172"), ("027465d6e05c8efddd79603de64a5cc177e8026fb6fea4b404f19b26c3cf362b", "27df80ecca00f098b4a0bb39e9066cb604080530ba35a48c661424cfcafdfaba", "2c55ab15e1416046a1a8108b40c2e2aa7bd163882629b650ac8ae0e5f935d0c6", "1aba002c8277c717b3e9b5849518a85f7dae8d6f2cc87a87b5cf488071c11b73"), ("10a57a4fcbef94032c9a47b8c861802eae0d18fd7f9753138d0f9e6cf6f5c769", "21283201d1a5fa525f28cf5ad0f9eac59b3a407f6e9872df66a3bcb9afb88d44", "04cfd2f209baba3c49047d96a4d06810bee527efda0160154c4641e6db6c47ab", "08f96569fd921a26d5d5f6d772378b30c2e3458bab22401d66be837e04ede59b"), ("2cfbddeb05841d68436fc668c582fec429b0ccdf45b5eba58a3808ab36c0ea71", "11135942a695d5acd2d6d166a2dbe2c812d07320aea98e7b6a762c881e1a2eeb", "1aa73acaf2c2b41cea98a7babf15ed947e8fa84d00546f3ff8572c44ea816fb6", "2cbdf096106b14815092c44f49bc86c84bd52967db0fb842d1eb8987336de7e2"), ("189d3049b3eea6c79fff27033c5da45fb6c456288b1f9a642b74ce19af8fe34a", "04fa6f85b85f81fa56b0b529831e8ffce999e0cda6ebedf33ef4ac830669eba9", "2bb3672c9c137eb13509612a605e9ce60a12e891d248df08cc027c07e5feab70", "0eb6e46afe99aa00747cb87590981e278865ee6af5bd9924720d3a0df621ad29"), ("1883a737778915af4c6d58713ae8f0e4b5c40ae2e54249d1021909e87034c8f8", "3021844e6db048d18ebf201c0d2dc807b5c58dafd0cecaa04c9546bf74d691a0", "0ada405a3fa20599195800cc113006ad79c8f8f4fe786c3bc48c23ff337c2049", "227af936b75cf17f07352200e508b7a08d640500b2753170271378838037ae65"), ("12214bb1b73a683dab7be3792b4b20ce1aae09edba6527a573bb933e984adbf9", "28baf75a1f76adb8e7b9c1b9badcc65dae08e6fd1703b24b28a9175f0fc430e3", "2bc324ae2b2ab90f2cd11363dacf7f7369fdf7b5ec424bf03ac0e86676678e40", "0ceb3271446ea4c8b320a2467571f31452cec5b9e7c8d5402d0b2d38b2b7d6da"), ("2d2a7dce744114caef9f519946c56ee820c3063d680f5d7c157477518f32e7cc", "25c29eb0c24f1b6cfd1cebe27041fbbac001246d2b58b7d1b4cc606a97a3be5a", "12a5a30729fa81a4ffbe33e83610610aa2eb307f4f1ab82c4afa27226a114ff6", "2280af7d02d97cb7482df53124fb43b15c5a6d85d844c2f779baa41d867c29e5"), ("0a9d2f32857d55bdf01b514677586f1fe74590faa562acec8448738a848bd4a0", "005ca44dbf6e1219e48e936ded49df2eb50ebe85edc532a81141ead88ef4fe2d", "1177a694b7bb3cd720ea5f27726f2824d1843982b3b0577b7256678d312d96dd", "22204567080a2d7c268086af82e7d37c69769577b33a53ed21d066e5f656bd55"), ("0f5e0e7078531498b4aa60a61a244a1daa7342c908c0fd818d24e8c61c3145f7", "2deba8bc4dbe276b0e2be2a6c6eaf82b689a7c12f2c0f930ffd37e1299d1ad03", "0d20e2ccf6f35f9d6f2afdad724228745c6e67a9044065d68901106f3ee23c5c", "208e07ffa411acd296898ea78f15cbc8debd3db968b76c433727ff0178abf26d"), ("2b0e60e62f494ff9fc532f64c3e53596ba4aca64db53add7ecadc0deb9551c43", "17f3a9b25cea80cd7905a47368eae8ca7a8825e76363e87d4b403b54bc714d81", "2a2ac7d8a6c16cf211f6817077411fec927fcab7c384b8ee13c9abd58343f0e5", "15511a2632c854ba0f554ff416924aa72d89fa1450d02c8db13296281c602266"), ("1d96fabc52216df60191d7d3db05f6107711cf5740e024542d4c628829384f82", "0c5d1f23b3eb4ba121cece6422cc38c68580519958188009dbbe08943c3f14ef", "082dc812c11797dcd79ed7b912170b9fec69e1613b58a3ab25f1005f1285735c", "2a9c846d8af19961bc619e8b16d1c33db9256739841a386e9b98af312b308ca5"), ("2fe4ba1aa53c433cd860827d0b3b67b542c33652d0da54307f84295c527a49cc", "136354f2a270dd9ec976468e9b3c294b8eb3ef4380011de8e86401036a84bf3e", "0bea644314fecaed0a5d4890972f677d8400cdd3be606af66ed179ee67e76283", "1bc8d0d170d3cbdcabacbe2bd1ace780877fd9f1a6cc297c3f4686986081c7f1"), ("1dcc2069ba455f3f020e4d3090355855f0c914ac0a14408ddb85e22a7e857ef8", "23f7b510d032c07507ff9d01a102188c9348df4579dc45a07192175db9a6849a", "2d33b759e77c706c554fdc748aafd3d5c36e655323f0c12db14b60b69d817082", "2f3522d9c994e66f6ab58a37ec07abb0f2bc3b3a296c9d6e16ff20254103884f"), ("0837c49ae2bb9bd726f2d04be58c7d5cd2769ad516fd31bd87e9422783a9a2b0", "13622cdf412189a2424497425dcee455bfd7480df46d46974409031ca57e04b8", "2fcfd2372ca99591fa868345c2f93facc26c319fff836d569b8519013f3c9168", "276964516e3071099653a4181dafe91aaf88052ce0d81818fdda208760c26925"), ("1d385e8ad02ab04a193dc6539f00cfec87690f8c0fc593fb1f49a7930bfffa5e", "01453e0efe9025c56bed51422dccea9d216d59c8225446dc4467228169bf5127", "14374d86b2f159fa51042250c965b34fed01b1c9b9a1b2e4af1ec462d147365a", "0bc877d5bdb3accf26f5500ac5ef8d225569c3e3a62077b8eae22088b97544a6"), ("145e331af140ca9f5f2a5c654eefdb2a2513415e2fdf0c1cd0dbcb6c8038c987", "077071a81d8d655ddede48c0a58b2b9c29502826707376889239f493e50931d3", "1f482b83bd670d471a65588bc0baac6736b34abc3ad36eef64437a24bf548f1e", "23118926d9b4e597a0c0c933b9e7d42d053c17a005c32c2f21476801e3637667"), ("1ba376162346b717e21a960c760a3e3bb111741a414d576b97248fb169f21b63", "24d0840dfcac3f63294038b0f12f225938584d3d85836e6cf21a761dd6f6fdd2", "29190e2cd5d0ed1604fc8e63fbf0b3e5fbbb913198b5c78f87711f2738b1ba9a", "08af2cc286bd49ee16d80150b9e128f977a766c96218553d250e65960aa063f3"), ("202266f1b6d491ae729f957f67b8faab29883ade99a1292eea8bde575562209e", "0017c167814d8ec7570760c9b5b853e2d28da920e61d7dda9ce225b4821717b1", "2766b416839c2f04e551598e25eb2cc75a821c605fc56c52e973ee749f73e075", "0d80222780994efa4c71780fc155bc6d710700118fe8099a29ec901d2d123c52"), ("2da4c53069be46a86f06cb10d1f236868303179e34f4489b04ba03d0fa4182cb", "16cfb635caada0ea62c5316952acd40dff1b21b0abacba978baa5fa8df31f03f", "110386b1968a76ea31c464842c4cbf21f6d187876b52d0d71bdd658e22ecf8fe", "067783ecbe5f5e0289bd51d8d69d3a9d4d0e6830e5a4084ccc195bd6968f5727"), ("1b8dd37859ebe1f3f646112feffd032c36ae960e553d7d21b83db88bf58682b6", "1a634f368b09620ffd3dc132e5b1ee53224b51f97f93b098326510db618d72e4", "08d7b466b8a71db990e8609e9f8d39295f97e385ec0f3990ea4e0214a37f79d0", "13709cdf89d913190b5cd6df40d290c6158ac3dcd0e6ae60f1bed7b34e9e200b"), ("3017662f9a7007b54e9d01e3f4e59ff8d390bb0b1968ebb43ec0600a2eab1d32", "09e592b4dafcf3f21937f00cc9625901495c0bcdd4e93969df9ab25c26865288", "064e7fe83b4f7dbe2c1fb7efb1a46928b6b365f3e4616406c5d369c13ab2b490", "11b7ce018e1434da280eb519c0a67e955ea600d9ee6ed10080a1522fa30b9a79"), ("08fd5158053ca6c1b92500a964068bfae30222600c51ba5db3be521691e9e6e4", "2f0b271bc513d3c13917f1dcad5cfd625becb1a652e440bb73c7bf2712fbfeae", "1d22f33d2937152f664ecb6d3ca5e1138379c798b006cdfbad616bac6c40e49c", "21643fa442aa9d04e49e022b13894058cdeeb6c20fd174f2e0095e7a7674b00c"), ("2b4ebc50da1985e5124ca5e232ddb8ba879ecd3902afe6bd4b5dee10327f13ea", "14fd4e665c9460b0e134d26ab325b2e3c44f51fb9476d747c538a5b1d043905a", "291ef5676ad601b398f2031f20ef8ec6f321f8eebc5d55fc0a1965b1d9d619f5", "1c98c83b30fb14edcc95adb1d5c640ea2b8c693f1e2dec865947e0b747ee7eca"), ("1e339cacd1aceabb68d8c3ada14e92b609e17439056a5b2a58d519308500d0d0", "03fc2c583a0d517d1ba646fcf0dba2d33c806ac74c6df11a7cb6430773223dfb", "1cb4956ea892e46d409f6688f0cefb3645e87f4c3084d59369778c97864149fb", "2c273f9fe8a037da79927cdbb251a67904f1eb358af96d920d304e7cd999d79e"), ("2bd8698f7657928cb8ab622d70a8102ad52e9aa4ae410295bcf2d98a8e7eeee7", "0703ab1454f9febbb12206c27f2f02ea5810778c11c93eb1f6284d58f6af835a", "279905d4194b76432f490e1dee69b58116dd34f445dc7324c7c49ffc1d2a245f", "29bc7602123755bdc42f5b5b7545215f458c52afec3267951eedf1015c0568ce"), ("06826988d71a4b2d800457b69d36254699fe10a0456697822cac30564d54c29b", "212128c54e5126ce40f928cd367a47d8f20a6935fd56f945f35d577eb886123e", "1c617e1fc282739f121911e7ae4d8bca599017f8bac1da6f1a872ef749cd1a0e", "27d652dd4a46dd195c566791d177cee8732b215921af777da6ec7911ecc0879b"), ("22d343be14f2a540bbf6626f80902fedd984cf0ddc309861ea6eff49b261dab0", "29c7d8b0dc962d3e917b81eb754efb98325dbb558fbc70d0ea7d262b37d2be10", "09e65bc4d503b4c2bc6a2ed9f6a8fbf2426296f0533cd93db09ff0bd5215e06c", "1a18910d01295a294fe2a5c863ef74f8436ed2a7d55b7a256ecd00b30493c5b5"), ("2f346c60491c64d1b54bca7bad35da15d0ab3020f9ab005f560339e66e3d37d9", "2a72fab1f90ef54bd2bacec4ead5388c8a75b0ec2d5ba1a03a1e6f4d655c9ec8", "21319dfbaedb042f902604633c7355fa206c88372d69652e17400154cd73f65f", "107154039d788a881ac487c4a16d9fe7076107bca81048131490dc349a559af4"), ("06a89cc4970a362ad954e38440d460037097c540f28c983901397a67c584d02b", "24cd0b086be0f39dcd7481e4045749c5344b4ea8776a917546f8e67065ebf8ec", "134eff2866b37a4279c722ea3638fd0e918fd5d19b491d890f7392fdf60f332e", "051fc8d6fd049c3e1df9cb8bba428b4c9832c428a6f587c8153408cd5b17d70d"), ("1bca2d8f00b80b08f8c33483b1c97ffabe5916f31166fcfd7e64de44b7cacc81", "24dd9e8907814948b4d8d32359ce3662a1d9fd16cf7c618a04cd4b1b39891569", "0daa53f010e168ef60859644795b622f95628528bb92303a83f0529972f783f6", "27acee636d180de937316e54ba18c0cd161376c59ebfa29e3bbf88f8ea1d86bf"), ("2b0403c55a705a014f202eadd286add1b66c3628f895097fd4bb17bbe50e2a2a", "2d4806a7ce1aba5ae4b16a99c6814a4fc5596e2c04d48ea2dff0aa220bb8b755", "1664bdd674590ef21c9aff2e444036f4a364f59c77c6241cad5a662f8592349d", "2bfb7b0c1768cb04c69ea5f955ac2eae4befc153d40422b42abe30ed2458a455"), ("2a41ca251dbb8e7e1f08487c52744326032bafe81d32136a00c8060eea58b385", "1d5385f004654a3f695d2afaf5f2e6322f7e57ffddb27937cd5641b287475128", "24a58552f8d90a20c30eff9aec14b79f2fbe174bed458a07acef78efef676400", "085baf1a5325bd1ba6a2baee7873884383c42b0ab6b2c3785f39a50e52503d8a"), ("0070e49814cc52f2eab3e3d989a8c2014c448c64a404ecedd98a53baa9213ea8", "2d25cecdece5378d22aa513be5389c90e6b431ae07911ee9647316f1bb67922b", "09385320b6b4957bd6c0b2fa91c4807379ed5d6127332f449c16a69bee0f5857", "18a35f0c69e38eb5e70192e9d678873ec0d36aa40f2b615bbf01c57a2f8faf5d"), ("13847e358ff687bb46a1488b1ff72b1779e9d410194696fd125d7739205ec6fd", "16f78259e009163ae7ac6f0ffb4a0712216fcebb781715deb32130c0d347bf83", "2746218341b399f558fd5a56faa4127ef9fee6142037dc3d28dfa486bfa8c492", "2672dc17ad22a8cd3a96bb49073ec7eddbf42b285fba409d547bbeceeccc75ed"), ("27f38135dc1f218f312353bf343dadda232bd4b83cd973428d4d4575b69229b4", "26c396167602659b531eb8a914e60cfd49a2a8886fe9d2966e0438534215dece", "240c7b1eec95dddf8fb72a688ddd3f091021797920b20383dfbcf4a557e29d36", "0507ed9da962deead112a1861eada670ac0cd597eaa975094add24f2aaab3c05"), ("0a87e4717603633369f940ccb930ddd3e6909c1a2f82f3df3114d903cb007607", "00658abaca65862f4920885a7c7face8a7f7a8a05e1d0473903c93d091371afb", "25cc9636cd32a2816bee55347bce60a1949f3d04638b1220c72f10f0477d24e6", "2862a2b06d720cd9969c203c34fa7716be7eba8dffd846acbb5e81f78456ecab"), ("1fda6b682c326ddb5482c9e8cdef08f5a25f218e681e8466546ba75b1e4c9334", "03d774d4ea02b8ef5c80e54b73917e1c24bacbc096dc1f3fcfaee29b30675431", "2b55b82535ebd9b8df1aaaf44019ca65c9f1efc8e2298572117bd058a8af3270", "19a67c7e01fd1b36569a038a87828d179ee35e64c72b40c051e0796bb7151fd4"), ("050ac06ca77959dd0bb7cee38419d7685347ebc6401198b57e0988d61da39a81", "04a50d74368177febe3cb41c0959634e8aa2204e05b416250f21f8763b418f61", "24ec3b6da6abf51983f05122311715f132cc8f54322f2e4a160c6fc65eed0b48", "0059e595a0b6fd2e6790f26c7704025de7ca311a4b3545c0cf323592efd7f6d0"), ("12997fe8c84dda032f5cc6f9e1a7021a498bf26c4e55e32d37f96dd9a9076ecf", "0852a024be1a22008b3fafbbdfa9bc0f67f2ef9f237b8d81622091db6d0b38b1", "056cb730fe4524ac00f5a77caa7b4b80924dbdd29d8aebbda718e4caa894a078", "18e5ecb78a7269c47cb937b4bf5b67b9f842addc2f4114a19e0f496f322fc047"), ("1b1d623404e3676c55aab7f3c240e94b1341758a2d1996a379fe6e07366293c1", "1bf0660f2b209de26f447d9404e8c0fd85ff1d58888795acc50b82fc3247eb10", "1d3aec13ea5bf7490decb832a92ac28262206eb6ab0909260b0cbc996d5013ff", "0b6becb1f244a162b674787de1b19f9ce954b9ab29363dc83ab6b0ef8bb964d2"), ("00ec0b966de445efd0ab9f62ce7df8300b80d0de0f00da056c7c4f69c3318e2c", "15d5d172e3ba981849cd56760c21196def52c9c8f02583acb2e6c9c3a5606f8b", "13a34f8c4c362246df566aa7b6f31e12c436d040b446f1f8ad25ba0fd0a209bc", "0a0f6aee7b6f48e90bc2e9b8dcc8277d7b000f3269f0f6f1be2b099659e94cf1"), ("0e9df0f540b31e1b6a05da98aa855d93d43f8ee8f611898081eac24b78f6b538", "11e74c2f616dcebe00bc45c9c2cfbcb9b37c523014f705bd76324404fac74f8c", "169c66f872647ad0884ae0a4344237625f9516c92f2f2a46fe5742710c3e82ec", "03705fdd2b6803213fc8a11b3727191d2d3cbc6f9a06e61bbf16e7006ce283e0"), ("08ef977e0e4e0d8755a5e25e9ce0972fd9b3a8b668042f388d35d538d3bd3539", "0e1418c5dbc51eaddd6bacc12f74b3ae5da321da414ad24f024c7312b4787147", "0374d06b04917cc00cada81f25336e573a2a32040e81d8ecc3aa1a4ec230f4f3", "2c97ee48a961aa8ef9c835b3f2f95331304078506eeb4ff449e2c3bb68ee445b"), ("2e8ab0235ebf007695f021984115c536d687e69b2d7b16fececcb86c1d410221", "0a6ba5f54b34cc3b230fb9817c81ac51c623963cf0a4f94aff5c15e071e3e876", "0c796091476970163b503c5d141bc9795367418023d4341997b4b2b545d8327a", "2be58f278739196b93824e6e01fc7ed1a1c5fd1145e511bfcaa20a52ab00f9cd"), ("1c78f2ed8fb9d7e62433767f4f88b1902d6d0bb773792c6378052834c7b5a999", "0a883ffee9a2bdd3ec71a9140ccd80ddcdf02c0d5a0901c1ec7456178765ca5a", "14b1e662f7037a9eb38103230df614975f17dda50a110979a6498459fd5ad89c", "04d8ff1086f0a266e28eac286c068ac782d8e99bebf11ac6266858d7ea4bda47"), ("30348914c80de71532bd5eb496a78314ad544b5513a94486aa63adc1c5a4c5be", "1389553c03bd1ab5ed92a05da2ebd123644220276cde6640aef7fbb0ff45fc5a", "1f76b108d96ee82e0ff90ef7232c6bd819242614b5f085f45e163bcb84ba9696", "20440c14ec754f3b2a789ab16b1fae24b3b38f5a062ab819595e2058e235164e"), ("09abefcf89f204845aaafa7e94b444108eccafee0f002e175509814cbbcc4c04", "2baed3699301c7f9dc6ec545b578bfaa1f6b5f96b1a1f11576394c97fbf3be1f", "056c9647b983f9a72db9f2094edf69fe6894f191bdf7a51f9957446a4473beed", "298f43787b7e587d06edf94dd5fb5ca1e1ed5898f01c7556e7e723390070ffc9"), ("23420aa1f13f1727f7c5ad0ae11c54060b3dae6a8dccd796988537682307c784", "0171210c088b2c4d069ddf5f4b20681d24eadbcc2d77b1b29afb265fe0bfdf74", "1fcc0771d18c8e360498384c76384a8b61e4621d0c1af60fdb5c7a8b76a6a149", "2d273c217ea9d7d630c860dc97de08fc1107fa63c55bda7f0973fb289de0af18"), ("1a991054bdd68cdc707e68f9a6a26a83dce719f628dc4079c056615afc5b62ef", "1ba4517e6af7bf79618d39b58ee4e30d1bd5ed5e3567e8b4285ddeb3e398a942", "23532b063db4e49530dddf28ea4c29dc32ddd211bf1fec0308b1359b3135d877", "05bd2b5ef5143699418c0dc17490d35ec8f92e5fc54a4f5222a80fd5151b2e9f"), ("11eeecafc0f4d3675040d1eefe5b3839abbf7b490738d67df4cc92a6759894e4", "1e19575180896e344a62b66052355b81b6d707da4b83e7fdb0bb2dcd0eb876de", "045619fb620a157ab6e7913405e95416adcd0f5db4d9dad26d4286a5481f29e1", "28522febbb7c03e70608f1a19d7ab23893476998405b8ea036cfed2431cd6e06"), ("1ab5faafe5d3dc5df51a5e15a9793ac6a1e4d6d67b9affb08448a9ea0bd6d582", "021f09af0addfbd25383636054d465761a9a2a866a081709321743177d9673b0", "02c1eb16365a11e9802fadfc237b1c732702e7c9af43908661c96f67311564b1", "2cb2df872e9d50356fe55abaa763c92cbc090638d3814a6f84b19b6440ab5e02"), ("166c0c6063a0e5344412071e7b5a122db497e55f4c216ce64b75591b5d334a3b", "05b150adc5bb2568506cdde4d5d7518126344f63042b7ffcc14216f0560f3c54", "21f763b9395e26a7aaf2e4f9f656ffa4b3a44a894903014c8a0bb1361d3ff767", "26ef52962236ea0e96fc0ef455c9769ae9c5e7e55c786cc2caf9a2e51356c77d"), ("2d685d93de0d94ee07d3d3a11aa3e613fa0fa1e437e7c2beb4896cc2a74f8f44", "1e35ea9ae318d2d1d809e6582dfb55b29861de09d0a2e77a7a47848452007f9a", "26d4a85631feff6d68a623e79d8c9901184ea426e5e9b91868ba3db0d93212f1", "0973782a7dceff291bbfd2fa0272db39cdd00502df2e6e1092d081b4d41e37d9"), ("1cdb78a8b037a83b071ab8c783986b7b276fe45daec146e61eae3392d92c3216", "0c6fb9f958e16de04aa0e0bb040559de0a774d565ff82db572a6754e0e986ed9", "0df1007ab46ab59a7a627a4daa8a76ca2a72b0d51051c92f285a7e2dc4b1673a", "1903486483438aaeea0ff5b4711e806e22b52feec633de4f2b90af7f7cd6cb5b"), ("104f9b86867b7a6ae1be508a4c4675fc5414f0f0e1182509e00369763aa1a818", "06bd3b757e3c359106d93ff86e2f072ecae59f85bb06ccdb8736383a8591be38", "24c8cc037712a32dfc7467382451863b3a89e91c8f7434f5eddae0e033240570", "0cbea37f92e71dc63d97c76ce6399a11db75cb540f7a4ba546e2ad7f3d366864"), ("0e936f946b0b5fe8d8ce95290cfc08d3c97fb553a4f48495879ac14a3e7b1051", "25cee9d1ee18ad538b5f4ff31ddcdbca695fc936b4f9606b84a9b93ad2467d68", "29666064c79d8eaaf2dc1d3029c4eb332002db936ef2b68bb0c8c923e5db024f", "27c91c9f71fa095461b1a20b7eff1b653ec66d2333b0150a6a740f302a9f75b8"), ("16996578f2126e0914f1b8a415bcaf283de38900601a21fede2b999ac8d1c6e1", "21c4cd558885f9dd5c5b358a18e5450708971bbd0887a566da3ff80660ef26ac", "1c20f502ded2b84d4a34ca6eaf6264ee32b90361a0af26ec325f4a69484bc111", "078e89f616456b56f2c7214a2b9e58ef915a102e329e9181df3566604e9a6f4e"), ("2e46798b0a93a1c7ce49445b8cd1eff0093d93ef48efc4af2ebc0bb0ad9ae1a8", "113f6604363dbb9e854c1342998dc9f88ae492b4f647a9b281c62cc1809bc152", "0939e770176b2f7fb426f0ef26a255205b7d2f13d290b595e2d69900e51d07a7", "093aa21afbbbc24d4cdff2193d767d3b881a9a6f5a77b5f8ea131d3366bf1d1d"), ("130005b5eb6e424c1378067fcb0fbef4dc404432640f98ab3f828e9933888ba7", "2945679d73bf7d49bc98c088d8b232f96b8b7b1b382b49a7e53f337c402153d6", "191bac0d36b43e74b93cd99f443f291cbb0db8add8cedea720ae24c4eff250e9", "000e10718a0867841645aa80fed7ae177524dc02ba3ccf416c09b2dbcffabc84"), ("0ae3d135c79b66ba45490a7ec0e49aca96e92621f632a2f36af87686d42ca5f8", "0dc75f9aab1f9128139e2decb3ec2e83f712885a17b99e4dbf4289a8f09b3272", "1e0c1730dd4dbddc74df6e848773f56608e6cc2d5f32df775fd81204a9509730", "0b1f47ba0a14d70acc58956ae13efc1a7566c0d1afb1c7055e72c9a2f9c39e9f"), ("182104d42784357a410553b4e493542fb70f5342256888247cc3e5b9c0e208c7", "0d18a6c11c9e63b2cc04da4cfa757740c3f4d01fe28205a7550e38fb797c9509", "1f749bbd49e4da579c083b47b9dd501b3c6735788f1c5ba3609e7229b1af2152", "153d159feca8790a0c5507d151cb85f1336ee68969a8521daed14dd666836277"), ("304221c000c22fc5f6d223574999e9218fe717e82c776adfeafb57b2cdeb6971", "3050d6790c5bcd05771f544adf6dc4c3c47e6911f8c23c2936f2cb584554cedf", "1b2c3e7bd4103e1d0eb40d13ad479a201400985c7ea9918d2a77ef1dcf1c09b4", "17d61ee9d0853272c278cfa6173eb5da10d84d5485b49454f3d62522d95abd55"), ("24f7790692c3f3e9820edffd766bdee50c2302ebbf2fa3d8d79bb45d8041446d", "02f45bbbef5f3efa066f205c5bb6f321297145dde6a4bfa057345b2a41b97f9b", "100fe25217a4812c326f26e681790d774dc9bb2e1c7991aae060b23a881fe8e6", "0c6917476c1b463b1bde115c3de6ad4123d65402139e92b5137e68568dfed4e0"), ("2d7d13ace017b2967b4b0a19dbe35cc708b4815fdf7150c6069a14561eff70c3", "00549a4e5b868002ecc9d66f1dd4ccd98ef4b83f85854d7fa9f73d1c16995b80", "191510aa87b5a92f05fd46d57a2408806c7b5dff0bc5307aa6a30d23e7c2ed1d", "15bb76c133b683466413ff8928cca772a19811b1cf3eecb79fedf3133b921a9a"), ("10a7579c83bb5028a209edafc1329f03648c54bd82072d98b40940badad2be2a", "28959254dd2ff954e2408261935e066264f338aef7cc332305fbaebadf6a5a21", "19ad5deeb3a7f9735a263cc6f4431d8ce44fc98296a6941a9b434f28344866ce", "1dcabd89e04da7bfbd9536fdb7e05415d1e89220b49fb6ea1e2795b08799cc90"), ("0a2b17d8602c36ab00217fa7dc613e0186d6b87f400d8626945e14a19038f76c", "2eedcf5ad564d31956901989d1354cd563897829d49942c776a4731032943d27", "01969b38f81442f12c40b900bf682330af07221a5ba04e130a8ec0ffe8bafa71", "126e68a44075f7ccdfe9b4b3ea237262d7809a9e0e1200429e239d4f0fbe98f7"), ("1dd0fe7c999910e1e889fcabe6b9225c36f7ca3dbc0f93911bed6be94e75a06d", "04f9a0f93318d282dafc65907fdf809436967c6ea952de36b966e8e417ebc63b", "20b98e48f3e3035d353361958f77d1d322443a5bc25722c7f7dbdabbadee17f5", "284ac9f9c29f9b2c5dbcc24c8ea22f930780b572a0542d719b69ba4c5ec8a748"), ("24edd6c828dcead281b95ad596ed6724585875196445d91428c2b745418b5aab", "01031a04840e1ad8da41eb889b17837e96a7226f7a198e056d719ecb77887f7c", "1cc4c15705e3e281e7589176c8f064b9d1d147bc0d128c17f70c09750eec8d36", "16d4c84ab26613d53c0a31593f8e33d07f80ebd09fe4508a7d8bc8658f08e3dc"), ("2c8364ff3447d5c06833b8cce144ae0ebd47a065d83fae8fd51d338b62359d95", "00c7f2e74a4a827c355a1b2ba83791de33fdb95e2513048935f4fead6aa0e9f6", "1df1eb67e4a5cd1b47fe4ba1e9b55ac98e99059c473e4af4b70d26756cdc5387", "06055c5ce238ee1f2a0b417d00bab392513ce360275283e867a355d70128655f"), ("20100c57ecd548bc6e41a314257ac40855f79c09c4af96db06c2351ff665caaf", "2ea4eec6dfcffa4a349c789a4371e23e3236dad7f79169fff8c0748cbc5fc8eb", "26d637642042736b8f91bf32dec9c4e61541814eac8cf9fd7588ecc528db539e", "28e3c0c4fbdef1d268ff3ed00b392f27cf9f8d0998db3e6be0cbc5f829a7fc94"), ("02a4a253ca139e8830577655d13f3ce280ed21b1edf5f46ee69acb7249885d26", "0c810ddfc6d882297525a0913c2238cd7a5fe13280a5190dbdb57bc576f210e3", "0370ebd06d856ce379fe4a3ba51b307e0ac44bd30106d83585fcd29c47a2a3d4", "29e07022d3b77288f40940c2033dadb6286a909d0e9e8d7225b0717c148644b1"), ("2bf5267c0fd3ab63ad31a2f75aa10815b53cb20fe738440f648063a65b0aa812", "058de972b2407fd40f781816bf19d9c4cb5307772ccfe869849b38efeae0c25d", "0ef026e00503e7e24665585eb0fcfa482424897f7aaaccee745fdefe9c087839", "1b22fabe7aaf6428eb017bd1735a3c82a49fd4828c265e4db15615f58e1af2e2"), ("305aaa1ba32ec4977256760d4e9a8ad9e4ce512b7b1ecb3498e6681038f119af", "26a790aff88c384d565aed4e940d674621285db8493d9d6421ead3ad8dd1294c", "123f3f6c484d9637a54a56f50fcfdced767b4437c066e68817389cc67550242a", "1f49f5926d6564ccc7e401aa2fb2880d51e48b79999f996c570fef1dd4d80a4c"), ("0fd83924bebbbff885acce1527f4f2a4c00282c36d7451329797760359ceb106", "1501f2951be8d912379739e03c6faad8a48d272bf2bfd27de932e9c6e20d3877", "20497785762d7b2dfd982d6073d0ab62606d88a6fd6bceb831de87f6f51bcbb3", "2aed5d5c435e799c3d13ec13331a36b254d7c81dee4403ff46ed3443361b518c"), ("197214ce9ffbf68e17c80d05fcc0e9608fd6b156de67d6f5b90706f03c31d48b", "0172862b39ad27dc4d3904c93028ba56e9ffa77eb7e7c38255b1de269d309ab8", "277c5b9b86b55d0e3c77323e458459ebb7f144ff3320933b45f798d19fdbbc14", "29e0b9038f6ed38bb542a1648199e05c9230345b943548727004a26e37aa0032"), ("0d4cf2f2fa724db1022fefec6118158d401a974dba9ad5717215ed92d8d33189", "06ee568a1a817a4d02ea93ffcbaf70cb25245b2e9b381be60c55866e385beb54", "1d141fee60631b720610b9fa0f1b4c84d51514fb33949f39336a363dd3188a33", "0b17ff2fc69b712dc8d567f8706952b5ad1b96394827bb7456fc4f32aca2139d"), ("198b4a89acd3a475b4fd515f60d6450305f15a4cd17d11250df5e68510ca5408", "0110769154c94effc23ff912252ca97669c877e446aa677480c51edeb6cbe8f2", "14bf732a00ebda90edb161078cf601cd0d1d7d0691546e9c6ac9cd16f1d6d54d", "1d144cb397de3730c836304a0cd0cfad2e1096c2ed6ede464a44574d1c49bbdf"), ("215c69d0995297459a938265649575406702915a7117cfe6e7a9ea6cacd2f39a", "2f0e81ad5b09f847a0a0f70b6cfc3486d6038c1e917f09be04b040c1e287e37e", "02f299fd9da69c1075ecc54558e7502ec9ae367b439dcd63841506d55e6e8c21", "1cb785b6fdd34bbf4865767acecb6ace710864bf98f47dbc14069be017e4eeb5"), ("2453ed74e25bcce4a0124f994dbc1af23be1e7b1e4856f6f0c10954c7c1ca235", "1089b4831358084592701f558a2b4acf99c4b06c6060fadb18fa78ba500396ff", "0715088e9855de148459282e1cef7a7aec26d8fe066ec7f59e21a707dcb5242a", "0a6161678f52c8d6338b0bb28d9079f4e5f9edb226e3f986f6e3f755d16abaef"), ("0c3f4bcb996d56ba31f1f46a8b2a3a599b4125657d84aec9e2e7412f68ff032a", "1f105f429c8af8a5bbedf0598e893720563bce71bd9fc40524282b6207823321", "168126f3fb3ad6099c3e54105c46bd35728f93a0a53ab754d88136a7c612572b", "2ac8cbf92e4cf7a6e2e7fa347a17b1d8775ff68967014ba317107e15fef218a7"), ("22ac411d0f24e2bbf5f435b0292936649bb4c47ca25f2e2a1311cbafa44294e9", "0bd268cac8e2cf2cad25c8409d622ae263628e1e1ddb1bf329d30ec70d3b99d9", "0635f62e3ed6ee8b5a338b6636a4a708a8a2880ac684c397cde46603de310c86", "1c0eebcbd43a71836283be36878ba5153ffa982730153be2395eb3cc696c2e10"), ("10c89a5fa4f3f9e951a66829c9079cf055d1620b5b337dc3c4d5c0fa0b74e721", "2196b7429a57df014f76b8d848b0d014aaeb84eac92e9c1ef63fdf29e8df2acf", "292660fa1f3e9e18632fbd4602cfa4c46f8c56218c9408b0fdbce4312250f8ed", "02ce1811d2d602390dbc9b86c66a8bc74c57f48c6df1e961383143f8c7e9b7b9"), ("212b18a9288a7e9387ae49b2d0df18f791d1a8d6dc9e940750057acfc90eff50", "10ee34f70dbdfff66f99408c612ced9518859444272de0d662f3c6d8ca1b8a44", "01c01a31688f15f9d070a7e294a1451514246c24c594a89b2738dfc2fb8b66c9", "12da41b0cec0be8aa064eddf81436851a1d4c17c6517e237017c96b9b7c749be"), ("06cde36ffb8662caa7b60840ad6ebf955348a4ea6644b69d08ca39257fcb99a3", "132cf77d1d2b42359afb0844b907b100b4790f4162f1c8f88764eeb3f9324560", "287780e661f14b753277bce72de7016e21dd9f9994ecce5b00d358d01793b83b", "0f1c73c32cf17591aea045835455df217ae95cabe446b677c7827442d209633d"), ("2afbb555192ae95b82fa22a715aff0611f64ec5eb3ef2b8353e1d9c504aa5449", "255d89f98d9dc98f529814ad37735b4b8b5e03161162cb68d1933128c752502e", "29a469075730c4a8cb076f2d26c16c45fc2fa2883db1080c10684f472d85af48", "04e2aad19ed504ea3a98b512e7491e23f7859c651ba2d4be2cf26422a46cf102"), ("17ce12b6d685e4306fcd4117a2c49c6d91e284edd3f68bae228dff4672a03915", "2fd7448136dff102db28af549106d8288b32490dc680ed0ef650d1abb31df4c8", "224e0419e1a252919a8cf51beb6b66031570336c5bb0d0cb059794e6b9a0e56e", "24ea3b1c8adec02bdb0bdc2ba0f51ad20c726aee512fe17ebae1fd961b221241"), ("174b8237d90f55e9033793d7d600c23ede5f2698f337e0ddafbb30d096b1979f", "0b150742d754fa0b2426b36d16d3282207856155125db6c403a0e677d6e8144e", "19f9c0e3f7ac3b34917577564ef0cbcb63be3f7abfba1bcc73763193d41fd425", "2ac60b564a012f764878ceb4bbade105ee47dfffbf2efada4c14d340ae7c43da"), ("0b28d8231e60e698b4ac602871808f19a4e176437cf7f12df249817102b58d08", "1ecfdb3ee1b55bdbfb0a9fe0c2fa4ae6785e8f26b688d14cf5172237140a574a", "1566e50679ada4805e286ecf325f19ad5ee415b65612ed7dfcdfa776fd442860", "0eb06bdc6a5828ef59343de85314291916cab3e8b5865918ae9dd00ef10e0fe9"), ("13406406dca75ff72d5b5a8bf400aa52d7083cfc6fcacd0645c6bcaca30a14dd", "2f0e488db1aa9b82d69f9773aaffca28e3b5c52aaa1636c1f39a27e72b73b2e4", "24b9d8627589f69c65614901dcb4a8a32ddeb99f97959ae6e60866f5f7e017bc", "1ad73824b5eb0f28fe0d941256556c8375698bb06293524a823451614423a91f"), ("12779748872f7ff27d667feb86c24263872353b4fa16c0f8c243feecdb6057cf", "0f40fbded1171c5fd50a07acb95b1ca34e0653e4da795fd72af447862cfee194", "1bdbaae41adfe84c9a438a30b77d1ed10631f8d534b81b8a106f9f654e221563", "03c2045fb281ace02c1c79263821d1a2c0daf261ac34145396673b2bd03cb209"), ("0ff94bc2911069ffd65dce93b85576ac8cee69e3fa73377a3060d023793c0f8f", "03695474cd18f4d28b916bbf469f4d452999c03ea11529f6b5cab8975d574671", "019c3ae4a4b8bc45d9683e0f360aaf37dab402a9abbc8a8fdae4abee8d181ac2", "2799dfdb874766f72bdd07b370a95e5aec0347f33fa24afb7341eecbdf2d6af6"), ("1234d650279c54ecfbce598b4e613635dcf4a8c7f86aac7e14136e73c03f296b", "1adc628f1f9ae7a76d56ee583044ec2936b35bb42b7bb342d529d71143c95dbc", "09946f2fa34e851bcfa595cf9250074052dac67530d28a10a5e4db692b32c16d", "0b21ca0f31229d74bf9fce87866de93da6b0ab6b904da290bd5327fde0c5b219"), ("216c7a9d6d515b8bad1d68b3a1c74ac178226e1ee892d9fb502f4051000aceb6", "1e67ab3cf227e2ecf2640afcaf424ae0f552d433331f2dd396f636677748f781", "263629d27848238032cd537a0fbb6aa230924cfd7b316f54597c4ea7370a6616", "1b632c9d1d12016cb6ffad4c0224fe8f49dd2873430a02885f4a157b09af83d9"), ("0442141c7c07ce296054707b108ff3b4066d3207065d81ab37604d0c85c2792f", "248f1e2bf35089a6ef6f95bec6f5cc0ae794a8b3eb3cb92f7c9eaf29d1795fdb", "0ba2dbc77aeb025ed869ddf0c05d3f8635c3da47e028e485a403bdde8ee5d795", "2bbb40c602488299bb012c6e83d47030552faee2cab99291d6b749d1558eef34"), ("2907ffae43267f14d36a481ca80334e1752e90934f8f19bfb315da381d0ff199", "1365a90636a3096988a6eff07d9cbf4a9669bca5fcf38cdde57b916ae730c4c1", "089be64cdc165dde6e2c433488865db844878e9ba06060b388dff06f66d022b8", "05698311c09b316c4bdec67f6f977e62fff62f91e405fe0ad14cfb97d3d08d47"), ("2752c3fe56bae6bbcbeeb64ebbe19e2ba3fb97f7ee1303b9dee238b335d55252", "1bbe91f317d4a5c2edb6ebca0688456d4e2cd4c5b96ff572301d0c8fae04cc9c", "15a878f4616d4abdd15b8a3954378dd3590085d4b3388c17e3bb3aca7938c02f", "286ac243900e58c83fd8e7542e8edda594e5e887cdeb6c0991f0da4ab6628de3"), ("161c7808d652231d9b96e917065fb08f32d173f0b869402bb91c1d60a3355dcd", "195581ebdbf965fb433489068c0e95ad48abcbcc5f1dd874a6f7429c970bc700", "23f149fc5fe69f3462128dbd0ad546f83c4d42b7dd3a70d03258241b6bba4cc9", "1096fd8306838eb4f83d7d85524de22f28a58cc50ac1e654fa6c2c03ba2eb052"), ("13b8c6ce88f1e9723271678dc8680262ab810e0d7a9242d4f856f3f8d2f84e29", "0546514e044f5705792d9a382f66916abaf4bee4dc9069470f151095039415cf", "2f08244c565f3ee9c17e139fc163e9550f0acb218dccb1a6d7fd3ae323122d8b", "119eb2a927006db4248aa769bd99be1ffc5e455577f02f1917ca1537a681850c"), ("1cb61a37bbe5187055fef88483d07297499f423bc0204072a2f272a8fedf43fe", "304406c4b74f5ef9ac47571ce3ce88e407afd2f6bc2410a148809f14c673aabc", "0e0bbae4846a7947f66348c81cef94d8b503b155fe4c34e01c3222d2fac4f598", "277ff6174478841ede26b85a48f6fb531e1256bbf268484502b69de39c608b8b"), ("1b6fe7b1465c4e1065512da00d550555427bafb10b2b784a52105bc44ba07489", "0076eac0b03ced020d2c8169c243eab37c4c4072edcb9caf25abedab583f5d0b", "0a60e3afca2636efb2dffc34fc8248731f43bf36b0ecf4b7698a42e29d1c5ce5", "1f5cb5282870721e7ed0c5fa7a711477c9ac2b7537e273e3212fecebc668d566"), ("0c46c6a820cc2b51dfafd777e048941562288206a80be0ecdd565f3e4412fef7", "05e003d85e5a5de7da6607345a58996c77d8ac703692e2fb25b141322549cfa9", "2816b82cfe33fbddf168bb9759e61e3181fb6b29d2a0fd398133b605ef61f63e", "096a505a2d9ecc8fd6c2c927ca60174d321354063ea59471c861464c9d17f4ca"), ("2a177dbce3e7582ae55d05eb7ef068cd283d84c958b36858caf7d9ea461ae0e0", "061b30ec0d545c9eb1485b4c695a4e77726f47f84d3c5d4895afe0ea314aa8bb", "17d72cbdd27aad0e7e086c9bc9422ac561889fb87acd425c487db5e0578635cb", "0fb4408f59be81fcc02fb7f0c7a5dec7cd5c692e115ba8f6d3f5dc7e7efc1228"), ("1f2b63c69a885a6b4d88144ff0d7c7b55350a80aa5186e9ca9450052a3eb6c5f", "0b546d4330dae73feefaee1a26824246aaa630699024d71fa3adc6f62391e9c9", "29e199da7eb68781b15d60830b0a46ac6768b5e76f75a7764a4e7b90f8d67c9c", "2c1bdb03fbf5a9c59041fcc2d4bb4773ce85dda15706df8936d23de5fdcbfb46"), ("169d11c8acf3bdd23a30775347857eb2dc5659f4bd0a037a3b5072a1c99d2c7f", "0a0ffc1fc4fccd122dd320620d0fea3dbf1f1f1c4625c019ba2150997a2e5d71", "266143579506addab49cbdbaf66f1e61349ae64d161e26f83dc7a652bb61c327", "0d0c412aee8ce419a7d8f6a29ec18dce4297302dcbc5871aec821e480970f944"), ("08f282dca35f92ec00ff5b938d94c847e46d7c231124767bce5826f19d08cbb9", "21b0dd66b50d1df7ceb4a612879e140fe480bff4f5c8dd955c8a05f9b3b2071a", "2a331c9aa4ac6812156b46dba59b2f45634ff4aeff4e57ff22020b3123333aff", "12f397cd339908942d87bce01b89b1e1833e01fd9a9529d8a1e18c4d00f49491"), ("19c0fd66bedb581b0dfded2850139c0bc495b4c250ea5f294dec619d11824119", "1a8fcf490f91a487a28a41117faccea6658543a53845b5f2c96a160981f943b4", "1a679e3b7e3dce71ef9b6f285e8a28d9d5516b2f833b2435999a66a3be890e92", "0e2d832b89b79b69f7a6c259e165af8ed7040d00d40e5eec8eb40b6cc17c9e8f"), ("16d2c9fddffdc45bb32bb6b5345091722cad07b4e9601258b3343642e8d89601", "07d352a48b025d30def6c0c0d12c7a20e8dd2af08a095fab8608b0118340403e", "066944259256320d257d6034b7799fe0a74708640d967c84984ae969d848cfc6", "0e7d7746cf1ec33966ada668961b0e971b988ea3c18aab2b7c4d8b8a3e0f1a1a"), ("075601dd2ac40de2dc9572aa709ed834fea93932d2762c133bf555bc171468ab", "2faf898e48e1b6a2c5974aae65553619522b05b710fad2fa2d2d22c1f1d6b9f2", "0b46c8f67996aa12b16a4013e006eb0455aede60935cf0a1d16ef7e4447a519f", "20769ab285d853c0b8a479632195a65a0e69d4f0b9d7ffa14d87883d35381ce0"), ("088ab369540c244d033a32d7c31eaa18229ab85c63b82abc251ecd33cd04f22f", "1ef86dd25f5db416376acf4d3f8bc21ecec3361f2b036db6c9176c5fb996ee3c", "089e481a0bb5cb7a8ff08b0ea1a20aec948304d5c2b5b96e788b059a0ce0fb69", "2801ff4b641585137c812b88d337de9bf9e08cfb66397466c3266e10465305d6"), ("002d25d7615a3071b41dcd95ed13a2b769c7da8692bb7a69d839265e5fa712cf", "1df648ffc67e444db5712b2c87276eb8812462b30383bbbf5f6b160a95f1f351", "08027564a5a48bdc6cb0d080209b52c5a4b3ca5aa39eae3ccf685d560dd6c22f", "160f8dcf6ba154c7231a603ca748b7cffa6640c76df5ffec12b34a569f14bfbc"), ("175032f6f69bf5fc9f7ee0f161dcd39204d6908b1801b36f307045c3e90a128c", "1e9110100fc6f02bc7417233cbf55be38f6380d17761846691bb1ebf53407dec", "0dba25c6932ec20fec5689a5296bd1d989ef28f5ed5622be603db110b429d7b0", "15f6e56086289f815a7b840e47177a992d9ef9c8cf1f78f28328d75276d920c3"), ("0d9dc6466a549a25cf8d2e562e6324dbcd8e44379822bc42793f68dbe9f10d98", "0d2ffcf7313b7caa7cae082a0aff27864545c1169d070031815c880abc69f069", "11038d9fb2d2ea1d6cbb10f1fe3a5beec85daad5a85ad432e6072704fc67ddfe", "2c53977a5bfda9dabeed8623c0dc6fd2fb0ae36ea937276ae00b571eef7d62ad"), ("09eef48643e91816e287b9ca974a81d68b4222946acbcd56ca85d1604a818c74", "08d9cf181acbf8f980391388380168dd4feb21ee6f066ce4bf4dc2eadfe3824a", "20b9ce7372fa5900d1bd9b3628bdb7b716be0a0b9fe0f03d25a4544234108cc4", "24f391ec18a7d69910da668c07b7e014f29d1eed01a04d08a99c6e15813e2af2"), ("26bbc7f0d91eacd110aa3232013964f4458393969a2880d5fe58495ce8d04109", "073e9309d937d1057d666bf4417ef2732e28bb6d65d18b9bbe9f4d9cd2ee6403", "239e997c6b5e5647db7da4dc9a3cad370716bb882e72859c7ec32f32e5abf711", "151637487101f4d591c1cf3700921bf60e8d7a4cd11d245ee5d17895cc06556c"), ("2bc1ae1f86d20118ad70420d18f663f6c8df47355483a78f62ce7c8286367e00", "2df61b9d2bddb474758d2d5815ff36644d3fba4c601edf095346ce50c7e6d390", "2445f51f85c3ac7929f281003d2f8643df9621eb3f7411e9f28d48e686bcb21e", "0f998f9721186a66635f855bcc52c6fe64d6b63bba1ccd17c605e767c84d27ab"), ("271c14ac9f8cc22c1898fd3b1bce042c21a54d716f33ef9eedfdb947a5ddff6a", "0984fe88e2167d387d849d371cc428bf0dea359ca41c3d24378a2a525989be18", "0fc4198c0fda9718f7f10809d448ac4524d373c37e2f21824b2c9a47241f6114", "26b0ad2e0a14ad76a740088bc73f168f1e75b9b9fe16f53c0aee427a5abfa6ee"), ("2e269ffbd758a764e059d00e3a01d7f79f9b169c888d96b93735647ca5032a7f", "0b03b86196fe0cd717c7e66ce60fd9cb8146b82f8c699b470b3a749e287cf092", "173563cce9468a867589d04621bbda5a5c4bdd45bcd31326428757e8866a90b3", "0bce9f5e9ad80341acdee755c21ff61e8130e428935cf0b809e4f0d2e6c3b2bd"), ("28a021eeac3f6d6fbcb4287873d991c5158072707a2adb2c6d33e1fd7687add0", "11a4756004f636d02851c1aac0fbd9cde0df65b81f3d94ea89b330dae992fe8b", "09c58a51c95eccd4fd3a0f2fcb6b559811a1f44b0c37b198dbb2bea7e4978093", "057480ef0b3e15912f916ffc4e6c1998356a6a9978701771308d6686e9819384"), ("03953209b548301867386f4614017b8cd5bb8fa0029b7ca086b97860aa75fee6", "17367c315fec1f168f28254d52bb7896f16d006c08909295e285ffae64c44c82", "18b536b93a344e9861ca24d77f2b7a5543555a3420d44744370959aa373b4856", "12a5d87020a0b42bda2b17102684b2b8035424c132bfd6bdba6a38d6d8732608"), ("29b6f3683b384320ae4e78fe2a104f43eff47a23909f1ecd9106fb861214abfc", "010edb49548ed39f26e36c8b79335ce53ca8b3b7aad0e0216a2db198f041c0f7", "12ed22ff51d37030ba2cb225dad42216068e7318b25781bae90b5c7d1969134f", "1929c106b8b36738dbf14ee3f9e615a216f744b4c433190ce183872b2bd5ca6d"), ("05be48ecf55734ef08171f3e1f2497861c7286b7c3bf9718d015fdb33e985be0", "15c5eb6a9c09b1cbe0c702d1e34497365553aa8ebed0ccd4c76ea47368e820fa", "2612d146451aedf836fb501b550b1cba2724c1f36b713363b9d84ab386acd51c", "1c32453921b4c1bf5329f0e9081b963b7e3670df4d5b24c3f6088d65ba5984ee"), ("2669daa23dcf977e68d7aa3c6d7e2ddfd312da22a83b6e7a326ef44e70544979", "06c0dde5c1a80cbeb1d68f1c4d8d6adce49ade35b37d41588e34c352cc326bef", "059b8c2038e4378ac406c70cd911d907180d010dc7ede3e355e1cdf86f675c26", "06abc5afff20403223962c6928bd7cdd04138f6963e721b7087f70bad76af576"), ("131472ba794be805bc57a43c3b463cd51848e036ed9ea36ebea4652c4301c1d8", "02d016e7970d11ee99cfb87219ffab87c4813d2ad9f28c578eef3f792f9586a1", "2ce816bda71dc441110e9c9584c0f1677ed786fcc9138f880c1aa4a26e360cbd", "11bd3440039aff26fc9317cbdb477a61cd1f22d9ba028499e3abda105cb1a102"), ("2801b99df724cf513b1c34d686024dbdba5d31a8aefef0fc10c7c95ae7c54fe7", "2d31b946c3ae1e687f7e32254142ff8a5a8ba651f0afb646436301deb88b8e4c", "0729a9d0f0a596d112ef5c4f545d2b82254aefc25a03415e0d3dac7a822e76c1", "2b55073f226711af5115bee4afb56df4e169bf409d0a6e4b6914b27d2f0d6bfa"), ("2ca0c224e65014fad44a14f199b21f7377af1b265fecf7bde5bfac4c86004016", "0e97159ac2711da8a7d14aaaab2b2f36ffbfdd31637b0fd9738f3f9c8e8f29bf", "2447536cbd5fef551e20a12dc591a78d4757119c2bd79bc78e7148e94a9f953a", "14b923a246ac6be7f13af921ef0bfdb223eafecf9df740f14f43b70e4c1c0ed7"), ("16a1da33a4b5390005bd073a96988512bcd8fc03988eda27250fb41de561c93d", "306275934700c7a13793c77df4fef53265da0eca9e7c91f57c6511789aa9256b", "1a75a75bf5551f238c4700baddf37ebd088c5a06938322a0b7d25b8bbee38252", "11387f0dd99a1965cdb2018ef5fb9c67a8ff73ea702cd36142047e8f43fcde3a"), ("2add9d436a3933b8c50f3f4be7dcf56d2d980b801d8ac14df286dd02374eaea7", "1f0cca21411f6e464a31100957910fd1f67b436b3ed7bb184673625b3966630e", "2c06ca1b1fafbaae4291baf7e792f7d3c3e92882594c2357475d8c1e584712e6", "0f3db90353e15a5387bdf1a3f7d094b40ed8b5b713e4b5d59b1cdffc6aaa332c"), ("01d5368ab4498e42fdc14d6a2b53b6f8067c883e23e364ae2d6ac9f022b64e1e", "0015189d939890a7125380d838f48c89873c3161929620705578c22fad22d6e8", "02c776d9e8d9a48851d573ee93522d176b846ea45db4922f6a6977d4c7826d9a", "1daf28b34d62bc71c237652dabecf9830d1ebfbdde26f66c68fa7d1abcc0d7c5"), ("16f7d9932a8f9ffc95cb311955bef84a3fc442ed0c0ef312f3986e9e180c79a4", "1541b202b17e53ea18db958c60c160c9b96ca841ba08bb6d2ed2ba3aaebb4945", "09010986ef069dc62879935ae1a721878f5d8e64c8d39d4604bae83bc84a3d09", "1adfb5954163ff5ce0cb919bef55efc36838f7bc2cb90cddb7a6654006e6f768"), ("0a61f204c2fb90ca2ca71626735fd529496d53446742bab7d76a7ae43abb657c", "09374fb60f8c81509da2674902206dc267bc8c6af898de193c7b0944705518c9", "0b0fa7ed6c34b56ecf3ae7ed7d81c40cd3e22dcfc6e61544d532bf7ecc5d9b32", "01b3bd8a794c696a6a4e95173f6f0916c0f750c3bdca2619b12f86d4cf11efb1"), ("0e515048260426faa76defa7a0eeed282065623f325d3882080403cb7e1aea96", "300e86597124c6dc4a3a107ed288df63b93a1d9484bcd2f078a00e264e9a14ca", "2061627ba2fac5735488a7abdd408ed174372de71ec9ef4c292ef6955708648e", "2339cba44d1c40344e3f9100f95c44eb67205fee4cdd4ab22d4d71641d176c1d"), ("20470029ebe082f2e41a66fed308e2a330c21349d50c719ec48a04fe0d670c70", "0434a92711aca0dd7cc113d307300108c7a743e36f1df9e4d5c0df2197957224", "251e93c6648a4d00227240ed6ae8deae300d6901625da2320f2e57fa36063f8f", "13fd49e6024bfa89b4d4f8faa835d60d0fc7adb760773bfdc1fb7c21a0c82b75"), ("1ef55a91203afb43c7a2bc36762dfa3e126625a7094583dc65a5689bc19e7b49", "0e84859c1e73d86fe6b6357b30e9edede16c7bce08db94f563fba36ab0bd1c87", "1e33118f07823b4e3021f78942eb70b8388cff3513a96a9f9e59534f28659eb0", "09430ee0001c972df2c0ed82fed4dc90327e7a664b98108c93ac19cbf141d2e3"), ("030156cf4185a5076d4a114cde08be4ee2560127846fe6f5b4fc8787b06967bb", "2ff9fa3a92d30d6434f724eeef3cee5882cbe3d2a107598d0f01819e3701f4a9", "295dc24e370276471dec621c858cc4f128cd9eac5686fbf58f39eb284fa58ca1", "164ac81669067d0685b05f34c466217be061657b87f4febcf57399fe71c1b79b"), ("26e161bdb418c0743e2d505093b0c20a4c6061b2cc71953d48c0fb4fdda091c1", "253b27058cffb82684db1c60ec67696d8f96286b255529f5f5a3d6870ab20bcb", "20d98ee921219c9f35ec14f1ba10122b2c3c0e3554be384b559dc284913a3535", "005638e75b1298246b56c44bc75bb02fbf84b9f9fef9d79addc59a603dfcaa45"), ("297137d590c63c84d8a0e81bafe491059add4abc9dbd531dea414a266fd11c34", "1ac7538e6a5cb3a3d7096a008da9fd1004258732f233269608d6c1a89faf6f30", "27e6788f251d400e5e4e7aa63ab358422004e304ebf4d34af84f59e279fc763d", "1fc41a1824ac359fe2fcb52a31d2abdabcdcfd77aef07aee3885d69930457987"), ("1def4460d844699d3c2033f11adf115a58b8b139dbafee51697656d367fb34b8", "0fa719bcf44e643a147be50221db6e4b3e439fe526ba07d3ed65279b813000b9", "0792679d7be536ef4bab5a0366f64774a802056eed3754a4bcaaec7d0c42e941", "2ddb7070b8d36d8b3cea76fdf71fd71091273d38e09fc2ea357ad99d24f43710"), ("12881f83159ecbfa4ee7f98136095f8f2541fab4f9df02fc997e44218842020f", "2464dd9fe65dff1725d4ecd1684c1b7cf76e200cc25c51699401fce821506425", "1737db58e452668878579ef6aade7455b3b434c66fbf8059b219a96958707e54", "17e33eac44ed84af291189034a5e46070dca585af97eadcf0d8ae02fef9baa51"), ("16cac7329a33bae75b29771953e03a3f5ff176b890b8dfc372397bc18f461f5f", "1c52ca89404470fdcadd289a09a4543eda2774501d40053cc39e9c35e165254d", "0c4f645e6895d9057ba108124a778a4655cd8f0b05964e7eb2c563ce6a6c849f", "0f0a2794643ebea4f0460d30b2ad40464ef9d99ccce5b9328d4f91583ca39097"), ("0b7f355e982edefb9de9339e9f77d3acfeb82ed3ddbcc64eeb523aed77e1d577", "2c975dc0a5045fd9b17b19480c5bb9ece38cee8963feb85f3096fded7c3281d4", "004e34ec8411f9c3c4c44453ea5005338e4c4154f7f67391a2e1149d51a05546", "096f369b74bbcade4215535832e2c9a38214dab8bcc9bf1bda92a912a4dbe205"), ("085e99f3729a8acf2d648539163a9cdff450aacfd114422be5eebf73aa77ce11", "0aa75f659e299305c04351d1b948782779179c320b05ef6dac873779554f541a", "0f6610eef49c65dd04c43ac0a69fabcc2b406e27c5e01a0ee1ec02b6d219ff95", "20a44e1ee2dfa0be8d0e513c0aecc001a7b87c07677fd5301f67ecafb22cd661"), ("01c036209f0d7000a0ab07a8f6f03f2879dd1fc5112b4e2c2edc9ab1dd632905", "10ee73dab2cb888868a1c3ef257ac076be7be9582415f2ad8c8a89602545da94", "0b8dc08d167f7a45738571d3c2d7a0a8c6939c11c82c0101136f4d8f170b7d31", "2df11e46d16f579bd874532a77725f30f44c90209cab5121f2b1b02b52594915"), ("2a6330e81e605629f05d32463e4e3e42d2dc1034e5a31b36e3fc905ecbfe65f7", "2e6d2acd366506f0413e17975307e48da3439897690ec5f545672db67b386b6f", "19cb023015abe9162472c993d88439b64a49b368bd4e5495fe3667756e6eacc8", "17a2f7b29be48af11d660669506ed47b82dd6e710029cefd60b4a6293831fa80"), ("157e9dcae02e74a2decb1d369a019d95f2f017ab40c10428ef62d0a05233e452", "03dbfef7d9725c6404fecd3364267082028c84707bc6b8ddf73974374bded954", "1a96cca8844bc887920a9712c705865c9eb5f9ed5df384610abc9793d0f44613", "09423e3cb024046b71f3d1c58d5f488333c76bb1da99e45f5adf8bec88e48113"), ("2a6c0f5d98b21b391026b075e8dee21aa6a595c5f658604bffdab6e7e35e2212", "08c675086b1b62c8c4536a75e313ffc9afe4428ac06283607a74e3307cbdc147", "1a985788e1ff3b011412ee77578e918f84f7dc444c742cc90e785971039c67d4", "21cb6af740f684cd5d7aa9c813dc7a75c4110895fafcff1ec8e985c5c0e5886b"), ("0a020e19a16bd0cef9043c34f5dc25deb7838e9ea831ee370183d9299e2893f9", "074bdde57d691359a749483596b4a25b17a10dc07932c008aed51471adb895c7", "06fe884dcac5336f7347d21d668f116713b2cd07f84d6255dfcdfa5242af60e0", "147ea97f7293ada603e1f7297e5afbc7be375bc1c69467b025ad3a0b6fcbf155"), ("284a7e87066fc565c03ef1c67e85e901a270cb8d05abc626b3f50bc3e187e708", "1610d0fd3f94d860b710b68058ba91559b34bf74233db97c3b0497027ff21350", "076ad59f741d58a675eb7c0a8bfc618c2b1077059606c345161e67d8fff52a6c", "0bf9b4eeee4283cd4ef65900eab165c2e8608d06be043b3a034f2b412fc46a35"), ("1b5c09cef71b67fbf17ef55bf9a6d9c6cbc1dcbcdbf669f6cb67149ecbe8c0d3", "26282a50e329274e2af269bce12de9b670242435773c1563c5ac2d4ebc433e97", "0dbf46fbc74d967670c8721814f009628e2c722d02b20987827dbb918b230a45", "1c9b4a5a0c46c5d740e1209c5fd555832420f25560ec01802d0f2febde994cf3"), ("0de4d6d186be367a6550a538c30d199acd768f4f34961008f862f5cdbc40db60", "00aa4c657574d4defea84015daf103e0e527409fb782dfa15e2fa2525810e18a", "0065c6f3f5076b2963a12c9534597bebf1c4bb1fd11e11f8ad012841e0d34026", "12623f4535d162be27e1f5f8f628d302f5bc841483184a21d59466eaa58cd729"), ("2afa0731715d7b9d5514085f682b0703c581c04d803b250f1a7bebc4e622dc0a", "184c3620b0f4d690930cc856935f08507356d205a1cd486f43898de474c2a78c", "224fb25eecc53d9473cfb1c386ed1e1483cc42c63792c13c08ba563598fa3a53", "03c7a89f993b3c3cb3813eac1051419f427393a1b3271cbde7db3369953b4bd6"), ("2405e76cc10d16f65655b6adc1228c3a380a4ec69054f2456d5dded5fbebf71e", "2aa66ee2efd6df6077443a314a1378ae7f2f99b4906ee3ba52136c937a43beb2", "1f9f57ff4f404224468d80db6a0593ca320d211d462df16ac99d6054266c970b", "2e5b7a29152802e43733a373daa6c2ef029cbd1c94a3111cb8429876c81daf8c"), ("183219487c32637c3023cd46ed0451bd3c0e3088976cfd45b698a8413c095170", "2dd2ff56031165729c4b5069e757d07e1858af8e731cd40b93b99068f831ddf7", "1fe1959fe38d8234084cc89e079e5ed2395b865b4ba414f8248153411337c27c", "1ce50f26e165f9f439f07bace67736a31467a86fae523653aa6cdec034a519bd"), ("1bc613c664dc504663ea50f3896c76954356ba5746939181770de897f082b70d", "26c8cae8c2ad023f37c352ea12666d6074705ca31ecd3cd8a3c25bf29a33c011", "1567f4ee02f13aea7fe3506cd624a0203ea88158856461391ea958bf4ffa1df6", "264cf73b9ac7b0a5a012001458e96efc91861ef61419e3f28b1f31f17b02d526"), ("0f497d8b20faa044e399b0eadf6d653bef4a7eda493b5182b36920b22fb69227", "1e606197d0714f5ed93abbc1468660f7c68013c62da11b418e8773be6084d900", "0a76dddf1badccb547b5c09ef79469fba492359c444fa0e61f21e7782a9383d8", "00d2c8b6e5811c8ce629db19f6936cfba520ca01a7fae03ceceb92cc5580d5f5"), ("226ac4ee7c7cdbacb4af661e0a330177303781f8fa8475f82e4b8ec4b9b8fa9a", "204c398fe8fd744d8718c0a77500701de731ca454f3433c7c3d6eab97e28d9de", "27c3aa93a609a20cab1767bd1882cd6c4fe9e2a99e7670b996ede68b7656adc1", "2cc8424afb067c6942a53cc6bf0d5db3363d793e048a186fe646455ed2a08664"), ("02b43b81a974dc6861d7e150e174df8e2e631d8e40a8f118de13d451dfa9f231", "188d36778cd03cec4a402bdf12948d9605da06418c7ac227cf1ead9ddd50687a", "1d6ff6c5d7a51a912795749e4713abad00aea03bd75b75e85c1e0afee4e30c78", "03d71a667ff3320c37a783de7a0f377627961fc3b69678737020db433f1ccc9b"), ("21809068a1e15e0c142f314b5caa432eb291801cfa28f9c8c866d90f3c6974d9", "06b52483339a0a3bd90ee15735ae452d7121ca06ad2409fc8de84c0dc99cb185", "2dd5ac99ef6bde8467a6d2cd7a38994f2f850d64682244bf1ae14d8dcddfbc0e", "0e7b8002d42a0d303737f01447a93510a4fa4ec30a3e76eddf9547bb2ee1680f"), ("11aa1fd3f50fe19dd8530773b6ba3710161c44de94979bfacc057c35a9f7e3e7", "14d68938b35b5d2ba60dcae90519bcfddb4ed9128391c2b70e00318764df1057", "0e6bb6b3be285059484706edff07e89747306d62d8ce38e02572782e048f2f54", "26d850bcfb055068330a5146ae80d6d3d100723131d51a6a6bf6b26f0a0a01f9"), ("1bcdb77a4594bd0193cbc48ce0cad1bebbb1636b5fa6208529e3bfa3c0cb0e51", "1a12b9316984ef6e60b8505b6687ef24d4f943661437cc3df0deadc5cc0fda62", "06cfde2db39b1c73361ab345b1882c35064db6b016ea2d4910d806da99c03b30", "0175acea776e80a94c49cf8e79c648bd8cd1df44ac2899a45019c65b981f1df0"), ("088ec12e2fe68042fcda1d7bb809da2b9f3345ca84d44b44eea5f7c50c9c11ff", "0c2e08ce20088b0af697f874100c375f3d2cf5f5127e1d597a4474811e5e4db7", "1723f345c9b30ab65e9d75e1e9e6af4f06a114a0fe8f2b5b839b207513f19972", "1605f5eeb64652806730f10cdc8f16eeb17253f4ed8dd9e13b05cecbac776dba"), ("1f60da65a40c0631db2bf97512cdfdc822768bc20ff0254381002e37719aa237", "2f3a070cda2195332b8aa0e70760ee008ddc2d421c0f244522535ac4d948a199", "2019c6422c103df09ef358153c7257c75f913d32e468a6bfc91db4e6d672f2c2", "03afa0d1c9c8b3ff67b36b730f924c8da1ad88001137bd33a5d3831d1738681a"), ("1e93f42810660aacf707297b956edef718501dde23a192d46a523ce5ee7624dd", "231c6acb68639eb14c0e0a9798843164b05a75a15361e43828d5ce2aa5b0f21f", "077eff525827d48520165ff837fdfda29ee56d4a31d9e3d56dc28e0991983f85", "2a46e84b5c93d6a2e35f8b759ba4be99dd87ddc827d76a70b631c73d19efc5a6"), ("2a34c2412e8d40dfcf181237f8003c5c730b22f47e5c47aa36f2b849e0ac4c20", "236913d7f28c311c4c97e64f846de703786c9d53df1d248f1cad587e9cc8bf3d", "275e940b064b422e6767dda02cee5503911eb860395a7ce9713ae6618d35b6b6", "1dbedda228b42fd162e54e5314ef67e2146a0939f1d8db59ce4bb1f106b56912"), ("2ca1bd0b813731142ae7db4ca5911fe7b9a094786255a933d1b5c037e96b0627", "114789cc00027d5302623a14c4df2e4b2ee657b206b1da924ab1f6e01b2c8d01", "29993ef6b153ffc80b6303f329bfce2a564782e94b607a2bcdd54e80510db260", "1334b1995367857e55c9e9d0f931338c9d56c7fd8017a3dc7911b8ffb99ff196"), ("1633246658fa285791fd8c63f209a8012fa173db82417bbf7bc5057fa153ad03", "2a22b5463c8974d15751be139462e311156d1b302542e23a7df8e7ddb7ad2a60", "154e62eb828f41d0b1b299180cc0cb358ea194d4e35f8414d5d7300cf81bcb3e", "183d1df40ec76db6b1254d7f06cc62375f5a9be91864204938b0876779c94dba"), ("184faabdc45b8af44be02f437c175256873dbc4b011bbce783b4ec1ee3d927d9", "2ec0e4c308569a7659c2b8a5295f627fce5b15f16c0e11120c693a708a10d40a", "26e8fcd24fe16c7a815b5581356c18d9c47add0537234a6f300ef7ee0183ad9f", "2852d2e035b80c8898f1230aeb426ca0c55a204a847b5256d7f258142826f422"), ("25ac9f11b417a28d57c3bc4268768611b3b32dab10822435c4245b2a8afc2043", "19d49a333df026b9061cc3937f5af0c1804a72f5d0288f3a4ddd7c40659df3c3", "20d5a49103bc95053ecbad39b8c72c5f453ca52cc991358849c4efa435cbf426", "0339d7e889ba8010f63dd33f6a922a903bda8c50e7413f0f83f881dd4ac347aa"), ("2366b3d73b217c857007a9d92eb78ff0e053b372f881c1bc3334cd43e2e9d649", "0c2bfdb5490a20a4b7d4aaaf6f331297af77ee61cf0a5875bf03b2d4694c3675", "1e93fa3a6e965c3ee6eb4f7b9c509c745567a322846bcb3bafcad46c0ec691a9", "0d6f913ff02d2990b95f50c76bb240bebe6ff460a2901652f56ad1030f471960"), ("259606955f9a3105a48bc1f6f72fd242a00aefd8a0a17d6a10cd79a51b6ec527", "275368dab139de4dbd99c42b5b45f6a5c2daf1e2c688816d3d7ab4d9bac7a97b", "206007dfc311c7a690c5c23719110e71e1ae77e66b98dc4e61200fbfc722f601", "2e719c83a2cc21af8765a3ade3348ec6e6a970053134fe576ca3ab37d3228b02"), ("10cdd327e7019ff2b14462b6340aab272860f2c3b802daf6f1d31937690fb327", "20deca09b42fdeaf87d2c91cd23dac7d940fdbe7ed077dbdafe1ccbda0115049", "099bc8dc8cb7e4a82c854dc4e88fdaac39ef4ecf68fa6ece6e8689aef9a603e0", "0368f91edfe811370ee01f170583a7658a67c6b9564e94bfc23a758cacdaf5aa"), ("2e4bc607210a33cc1602d7ba76e6c43449b315deaa58d50b27b8964b10ccf4dc", "069360e64e8548ac86a5605a6fe31d291f335a3644e26fe9580e5d0bb40c3497", "0ccbf4f9c0cbf078defe9d2fc1bfa7cbee236fb3c60b6b398d3606886c00ebd3", "1ef3c44d79b497ead0d6af10dcd8788e7470fed4a7b453f9ea98dc41b8335796"), ("28ca7c01f937cd64de6600efe5a3f0a0c65803b567731d7033d2fa7e8d0cbdf2", "27f1b4ea00520b6d2fe6ad0cf24855ace89b74c187e0a2ab72b07c4506e01123", "286b0c12bf6922f602a0c3c5a4c41b5e784cb9177fc23d0f29d0ffb5bcf8875a", "01a97578a8ca4482b95b6edaab94cecf9070b553be6c148f70e13fd5f331a100"), ("2f839cfb848ec09880a6e530ac93dd54e958afc7b5db75caf2381d33b29ecefa", "133bf544f90ee281990b7577bbe2bce8f9f42d94fc21045999e074779ccb2cde", "0e2f806c56f4df2304fd9d35e244ef12ab1b4238ea2c94062c112e73ca8f131a", "080d272a2d86123de9d27ebfe285df1bcae8027e476182f19786574b6462beea"), ("0c4821a307d074f1b5e193e3e50672297fb35b7c4f30f23a9701b0683d09d50c", "2e95d84d12c605451a7cfbf4b927f8446f431aeb507faa8f9f9dfb23be5af8b2", "101dabf218fafc6e6b3fe36d76def9e27ba19471f221cf7b4ef7b657737f4c53", "2648190ea35b91ac1d9c97e2a58a5f8b4af0cd5a0bbb461d5ff9607ae54149dc"), ("2d68030e9d4b188c96a90044a31a04909f0cb721dacd76a20e3d432022ce3088", "1d7e762508ba6db11f809b87ffe71a469a0e2555a40dc52307d8c2564fcbd5ff", "236b3673fe0dd16ab936619b4cb80d4454f7ac18be3ed088af878f8ce726f7a9", "0f6a3749c7342db36e2d0916ccbb0fdaacfc135f0c9c37ce4beb56e351d19d83"), ("136767e331182b5af5a0adf5ec268acb07072e7148550820a34e908211381823", "027f5867f4d2182d3a9283db31e181e523f9af5de017c1d05f727b3b3abcef3c", "2452837ff4aa49eb0a1fb52e5090e2b897f8e4908a78d43171c5d20641bfe713", "0516f3e3afdc5af5aeeb6cc50e219b0356708ca3a65d0937cab0f7daa0e59a3b"), ("1135919fcfce3925922f3aa489f60531c56f6fde83b12d989e38bc9ed767ba8a", "04525b28d1142d7f9d44f40669f76a22d708020282be41ba07f08d7d26448edb", "26390edab69d9aaeb1f82bbd221687cf2013c076f06f53a38cd518310f6bcd36", "251b4564b85c27edd93942f6dbb3ba24b6f26c22b2a63856a4cdf4626558bcfc"), ("1063ea2d6ae9e9098c4661c8b6baa26bf96af9b313bfd99cacb03060b89d4b68", "0134ac459a67471c83781d7902fbf29a25eab61214d602414e27f3553b809dd7", "14d2533389f288eb253d0339d0a10a67ec9ae70839aab2619159b2d108cf7244", "13a904d45ad18d3c4e135de5dad14c5d21b7e7c3aaa42cb9381503ca82f05353"), ("19a4c46ed4dfc1dc5b2f7892b2e9d6b25a6abcc9a559bc3b0a33e09f0ca25cc6", "090cb5fe2df4e41f8ae2fca97c3ab1c3d98b87ec4209158d98983fde886ce7c4", "1fb50a5b5d56a2860e9d07d2da300254e98d9fa5092b0d4246b70f8c7cbcfe6e", "1064a209072c34dc29f3332559102fc56cb0c3ca93de49d2e8224a990cf89579"), ("27c2740d42d48ca8c9c20516cb7dce355e8057c6ed381c2657f83668d94c51f4", "01046c9fafe6515a90036c33e38ed7b1d14f7d7cba4ba0b7dd3aabbf1f1127d8", "05c65d9ec46f612dcbf03591970e85fe4e3e21027957071bffa59b825f765557", "2859c60b9ff8db08959a712184863160941bac05066f0bd6802eafbe2a297ae9"), ("1439380dca74675c7358f4737b95e9e449d3c253a437528d232440e8d25b6b29", "290136b4d9e47f614b1903a004f0d715416103784fc461ecc9d7119c72324eec", "19ebbe88afc367dd6db555e1dd2518b8817484f623d937e3fdf331e5b875f65e", "2075d41f7f121b5192e218556c62bad9a517100d2313d92b866fc9a141cf1a1e"), ("0edf03463ab9f96ce703b58dde5b55d7ab9d8cbb71fa12cb70d93261cd3ce726", "07fa9564dda3ad9b1c2afccd55b168df2479b57b14a467917947dcd9c25efaa2", "264e3d597b1e1e3f3fcfc1def5f94099959b7122e42076af68d44292abf0591b", "0c0b3f284312fa019eaef3d2dba9d47fee058c3d891c5f438b3580b3f1b8038e"), ("230002f8d547124e95589c93b9b925912f37d5b46b7b54a842d09ac4600e0614", "2df33512d32bdd96bcbe77419e734ed9d625c269562a808d19e4cd97e9128170", "01311b192f0eab87d8e7017d19422ead88df0ce64cd9b7de4f8fd6cba9c1a270", "0f6ceeb9c59c7cc3d708d163155b5e91d41e029bae001317d13d9badeae4cf08"), ("1ee45cace08546308dee4eba715570188e5c715706a46252aad198c5b94aa648", "2329b8f44991010c1904b5a4b1061a69ef9011d10ef3427bf50a6949e3f32131", "20b0d4354dbe3b4a608952db58e928ea553ba9da94aac5437003d1b45959a15e", "1fd6214303573ecd504772036c10ccc4d24b9043f2f690d1a9dd5ab5d0d03e15"), ("04242610cf819f9db23ffb1ec577fd0f14186100634c00fa38c336b78ac6f754", "08cc3b598263afd3f448c4f4be2c33a82d9ef786290da5e0d5d10f0f004b212b", "2606b6ad565ddd351b39349b66560032f439ecf818734d308f642bb3cc9682f8", "217b96c8b76e9e3ede35df15813eb698c3a5183021d1b0e21c10419a3f0f79a7"), ("038592148c0804e6a435f0a490971e4ecd5e2de1bfed25762a590ce7b5fd363d", "23b8a2538eb69d8742cb30fb22e71bf805be29e3570be026c5b8f3491dcb5ff4", "1aa21697608ae4688a12fd387ddf6da61cc24e71c5cb0cfee119906fc08f813e", "00c2ed5bd65b2ff94f208e4b17fa214cf04b73ae74406e407e424ac3ae114be3"), ("0e07923758b7afa2d32c1759fa715ea6b5583d6619dd98213e4ff680b094edc8", "19d5d071ce1778d526a3d9d7985a6103e5c1c4fefe0b5413018b0b2747f2cb6e", "2c27e51af5fa42fa650c9ecb41d0a15fd3de4f568a5c89ae941f60f132962082", "0a4d21b1a241bd2f5b4596eb3894aefb8cfec76701dc4ef38677990a84cd42e6"), ("06d9ac7b287ecc376755e38ab13607f63d82fc99a6dd2e0e730f211423e4619b", "2c3f1653e761326a5d3c651e7f898fec3e2a8091840e1864599cea5a256b0732", "0a5dfa783a620741b429f61f9738b542c7d82883c6cedac668e1423fd148d180", "102ac3fc37cd6a3b6cc577c35a829a8f07ece3263d6acb7fa51e62414f7ac60b"), ("29cd34f5bae0a803674d9d3db33243294664df4a6c89538e21f08cd04ae9299c", "0f4c5c25913ecfcfe3bce0e251f972d92757cc6209cb41a59a6bc94be4ffe21e", "2542f4313c1f8dc99679cc1dfd4ec73ed68559940daa3cb4f40cdf58ca8d75af", "1392bcb2917eed98ec78eafb71042642351c3eafb88f25f992c1591508982c45"), ("254781d54908b6db563293705bb7e8d854ca07f570c8215439724c87ce56d0a3", "23f39a9f8b414eeca85502012fe9f09ffd1250aa1e80bf86a7002a902ee29340", "2cd328391c7d8d091c4e78a14a5f4cd698712d6d7b5e1e0ec420b6d1a7a91088", "2b4ba5d8c0d6c6ae8377ead6a5bf48696ab9344a05ba161838e0b774d9bfe75c"), ("1b43bef489ecedf67371b8bca657929bdd712d51adfb054bd420344610629623", "290486369fd67337ef512af92cf53dce855d0260e36f7e6d6f2835467fea7eff", "247b368e89223b3ac836e6c4ee36b0c83d925594b180bf0adb511afe56330c69", "1b85991add434061a8e65cb7441eb1bd8ffa341d18d97226ffbeba9d0bc8a980"), ("177a14ddefb3fdb14c8198e2af989f8334e6e19fd822c0ee3aa100fdff55ff68", "0d099c432d8d837d4b745121ab2e62d3f591f241070af33ac8039ee4336212bb", "28a5818e761afd4b8308fed70bde74526740a141a0bed2fc6b3a149627fbef1d", "108eae514fac8d7c6a824241ffc39c41434093c03999d1c11a2bc6e974c4bb77"), ("00230e39e4a6417378ac0a76ac4bcd144f9445aa2791f4f225bc6a13130e9afb", "1f0ef10a8de237f7db53fa4d3793be51691b906f85a47599fdf4d1b8cf8cad6a", "2bc9cdc2f6eff2038004254d7f60e334cb2451ffee54926082854d93d2d627e7", "14f422c2e190b77c477c95e426015e818d822cedccaa30e4826dad2611d44f36"), ("0a606cc9bb9561e1c0fdbba65eb8864b69a3d66222ba7558c77e2848ed4d5e34", "15753adf3c8b802e525c8b36d3f4c0981d02b82a87abf1c03386d081d2449213", "128b517c6539d2b845d099b46f9651ac26450ea15adad53a7caa16d6b182a110", "1867c3d3e4a391a29def8bed0ea9a7676ee80049d6ca2d1ad84b45cf0e78200d"), ("1596b4059bc1ce32a2dcce0cb2f6156e9a9dc5be721c42648e6616e0f1672042", "09b16436996dbe653ddbb0a3a38de70e85081305aa3c198ca089cbf0185d2c0a", "0fc667f346280c9c1f4879ee099e808b480d2ebf34ba186eb2a336161d938a08", "16815df77b47ec80446373e31255764671af3934ced15e87104f8b6e12f6f25c"), ("301dcdf52c172d2561f784676618093f1ee6083e235f321075ca44bb96a010ce", "1f25c2d830e7e7bf575cf59085ec2afad62d5fe5d8e812217898f62f032f001c", "166ee4fbbd0e2aedd15f554f88bdb65c5d2a12d103ced42793245e1c6080a5f4", "283183e58be374dd81131021e611779d7ee65f7e5253411cea62c97779e135b9"), ("129c05b2fe8e6a9de8f2d24dd4942f05c8ccfec45dbd1c008165d5ac0b7ae0d5", "0e0d3fd0228b0a4a4ad5936714874a3798ce5c6221aecafbb5012878fe926cb7", "2e601fb4e05aa5b2bb3a7bde93e7fd1ef1d4d6e8959aa89512611f2286161bf7", "2c81835ac2eb1758cfa3e7dcf095afce777528fb5b8c8982e960d270487d3522"), ("0f8afbfa282253088a63c328b35d1273f1f75f0e022c2ad3a9010a6da8c491e8", "136de5f0549278686ec2ec88cdf9e1b6590af12f0bf2b0ae6589ae097ccf944f", "0e7f0bf29245d8db5f6608b54988bba56bf8d9bdb5e427f3ab09976728d51b98", "142a11a833a589f34da006277ccf0a864e425b604c74b1405b6ba773211b1a04"), ("069652329b2e8fb7aaffdc33efccaf473a1b0bd43e1237cc125faed81022f28f", "1f203f653f19d927ea1a1463f8fc70df25bdd4a18f4dd9b15dd879d1c02bdf34", "09d64362c65d28a9844ccbdaa66bbd08e1951bbaa7754c35a90279f487fd512f", "0a3d5c4ebf7af6253de538aae732ea6014e6a72868dd163cc17fac3b3ec2bd99"), ("0850a01c7bb397b98d43b4e65d0fb33f7b80de5d037d1dc96fad21678fec8f8a", "27be898ae3ec208277d9efa3eb60edb7a85d35663cc5e9265bf8ba06584b732d", "2a1003c1c1171aead3a64965ff4795de12c10af4cf93d9b477f15a57ff664dae", "02ff387e706c062602b31eccf08562d8defcd5c855eddcd807d73941cc437970"), ("1faacafca59039364a620ce2606d18ba686b90c2e1afbdfa30d92f1b0d67634b", "2728d7b69da1b5cd809c892b8130122cc4adf350455f7a67cede9de4ce441463", "0977eba1779813538551a9b04819796a0d4db5ca333c5fed7aca046e77c8da58", "0562f0dddf06d22fa979dec1c37ad4dc1da5d7778522251287c183ba23b01ef8"), ("2454774da1a08f8bbdf3675d2a1ffadf789814758cd0664765bc0e6c845347bd", "1360092a9428280f695c23a69970f0a7f0d14b01512b7cb1a67f67174deae462", "265450ca2e3d401408679e935425f645eccb28a1d819e7c23ee0eb14239cf21a", "2e563abdcfd466594b52ffb60c12384a3246164606591562a18c0ef9395eee04"), ("14032da62d78be1af28eca6e73679d4f932ea61696c32fc08010d9a8cebb5531", "305729cbf3553ebaf5cabc49fa12caf34325591f1a15ea7d68e78c5d24a9f235", "01135cbfa6f422c823a75af0d195bc575cc96503269917d56805f10f5e49ca41", "137c3a0730607e38ad773746341b99c93c46f7380adf4d373527e7de2d2ab4aa"), ("0e5b27c0fbb8c271e0c00f868df94a1fd84d9f1365631600d6f4f75ef4e15e0f", "2f82427ff65c4d204612aa45f8fdd80dffa085722fd911c6f63d1458d99735dd", "0b2202be9ca2f63d7ac9383387a6852e82edf1d5683a2a6c456853a3a44d5d69", "052d99b8e9a82c2c5e12cdf0f4cbfbd19ae0811c54f283ec42fd55a094c03fc3"), ("2f675b6c25630a96d4e5d210f72f77d761f330cddc47594e7bbea00ffc6940c8", "1b37c9fa4dead052588358fa083b5e2f63173ad7951b9c9297858540cee35e5d", "1ed401ec56d5b4f0ac60a68a053a9d2c7dc6a818020978eb93cb0978fd329484", "211eca43125d4176992c7944257590996a6c6667e8b1cb5b85deaf20229d5d0b"), ("1dff33a44a04be685472dac2b4224aa1d816036f57e31e361f7836e6d0df2860", "00f4ff9115aa093224b6583541f99f247c4ee30694a64dba060fb0fb77fe1235", "0f298802b5655922a777e3a4c33355be921af61faa1e1952e189cb3c187e7998", "106f4f16436d147d0814ea1bbf994ebacd50efe25225804735fdb015dfe0598f"), ("10f4d13e9c63ef3c79e56ca75c163b6eb253061547d045415e54bedf66ff7368", "1e98333b3b6b6dd5622e7a845390ab1beb50a8815001f0b0a6235c430637822f", "255028fd2e5bd57f9056f531bbf0ac4283de8438623859d7da54c6a44092326f", "1feb244fb8b1fc4d53e7ecae699d10028f80d46c60e5310b8cecd928421f0507"), ("159934e2adc0b56a318e47bd0e854ae0968a569e8ce86bb2e4e30d6957857627", "29eee77ae50adb676dd7b5abac946de59b73156e1b8bedc5797479f511f8c0fb", "0366dce0e35c80874d36b65614ce7c490ec251cb38e65271868e95d3437152ce", "285e278583d3302bfab99b7161c2999fc4eb831034afb4c3965593a07707efae"), ("2675b711cac581c91d28257e6625e325ea1067b857ad88c94e9380c4a57346e2", "08924b961cccd6e4b03e3eea6595e4ae43aafac753e2eb1805e08adce7f59804", "0d51d3a22d043d0e2695c1f907ef86ebc02c9bec8c520704dec7f3580765289d", "045bdaa1e557536fff786f8864c00d46ab0c2dee0cfd78635295fd5044b19627"), ("1b3143b8792a962f15ac8565483aff88b89126d6ad0c273887549dcef9eb91fa", "15619f8e1c7b668ff299b7719612098861c637a454c2334b1e9afa70fc7a721f", "05b8ec978df4bcc111253eae15b5b25f59c8147b42101a6dc1e04e3ba16d5f47", "14b9af33206ef0e9b79d0378d811744ab5ecc6934522ca797aae5cf4529277b6"), ("2f40fbad8856b998fbad9bb81e64db4b32def221fff01040ddb1178f746c4c29", "10ad22d963ff0a90d102cf21d54d8d11d32f712fd1b326a9532cfc5c519ee785", "0b03c1b05081258b9bf3f49a9dbd1762118824116c9b79c699c6b6a723a327c5", "1d75cc6739a05caf02c865a25fc2b4459d2791b83bf1c4823c5f2aad9b45491d"), ("0a202c7bf6a14b197628f6f0b216f8a36654b8a623123f2b0b3458f5b3476512", "19679ee4a3ad35fadb90274903141fba3108d11fb91b629be54ea754695d9c4c", "22bdbebae31f37f4fbd76c72d87568bbd8dd0292e67a2223256c6eb4a53368f9", "28c2a37c69009a8064b1403629f1e87e1fe43bfd97f03d7c60fea8918c96f51a"), ("12fb3448f59c597f39bb8b4bef56a58d5516e860efaab0446ee7e25ff7b39741", "1728ebf7abdb8ffe161bb4d9520e079e6269b5d839ed74ecc67dc4020dd584e9", "0f7b273242ac407ab01367f3b8163e57c26827d98daad524c1e40f971829174f", "1b84335e97f83e6b2a92c8def7b43e5c892f1af4b74edbaada24e7b50c5e0e00"), ("1542edd6b80f446602e1683f62f440610f7ffc038277fa0ea739ac94616635f4", "21a8683473a86ca2f0692235d471d32ca96fbbd7b3ff314c4fc9911d184c9f8c", "1ccd7253883cb57d6943b72b8659317f5870acbf036059966863b253356c61e3", "15ee0ecc24fb186d17ccd591fe3bab2e2bcc72b9ab39fe791cdc667ab860eea6"), ("0c59e7c88813683c46532fcf1b45950693cde4d287205b41ba2e82b542dd4460", "258ad414006fd4e9d73d4f9a37b9bae4cc4e5634560b817bd03688d67278ac7c", "2153f43d716ea62972c54cad9fe00a88024967bd0e9d52ab7df0f94b4ae82053", "1992ca449d6e7f14e1128b21ed23a69eae82871bf92758e9c455c10236f8c9be"), ("0481beb92b8c21398fd0454963035ed9900487595714e0ede93be2952cc3255d", "2bf04eacccdd3064a19c8a239e8d524aa365a5741528da7bf729af9ee139b5ba", "2dc9f8dec5ed238faf8532bde429d8d42c404ef6d3a38d83f9c484a95253a93e", "09ab34e2fda26245492834fb1b5550e591c9876de959c83582dec739bbcc9b55"), ("0ebceca710813fa7029a11ca7f90a7abcf236da525a53abb7c99cc3d312b504c", "0ceb5f547d2a45b58bd03fa72f3566b53dec4c3437786e72236df3b8eb1907eb", "007644bb3d4186789cf2fd3ba3b200fefc35f09011e0dc6f546fda51b38694b5", "254ad72936543902678722d11138f93c9763fd8bfbc635eea7ed83b469f1b6c5"), ("1e94dc20866a5565759e8d9a7d16c87b577648a28e7fb222dc8237b9eece92b4", "0067029b8cace45b2bba0558f677e53491b54792f4d7293e1c6817304aabec41", "26f0d2689f74bc3efe1562685c1444c1009c76fe9fea90823ef5e418c359d392", "0e2454d3d39c93ad9ea6e41ca9a28a880d7687869d904a1d95d5c02d1b08d069"), ("2166b12d5892bbb904007b74ba15abd1df2ad2478826504a8cf41cc3d0dce34a", "23475f89f16635cf453f989b20ff480bd754facc73388a00a8028fe1a7443e35", "02955ed7b359e6f927dee6014f7d17f727f2782fbbcd5705205c9699ba353da0", "2da6f0c020d023100bf357c6802d87fa1f5f0318bdea01705ad677496ede1a3d"), ("02a4c31fe4d5738acaaf99ad38511bd9e7311b1abcc54fae38fe4a7dd429277d", "2daca91042c3b41c4f1d569f637202db844a03293dfa55bb3a64d95460cf62df", "0ef4176612efc8139bb9613d7e7269fc68dc242bb83c3c414fb701e4afd30abf", "1ac68d0541d60741a3ec56286c1f562e0eddcacee8096739dab59430f38660fc"), ("2d9ea763e5f421ac290c6ef6ded48d320286dae45a02641e07dd39d50cf6b2e5", "0955241d910c543d7dac02af178f6c25096eb3d47611684e20fdafd417559f0e", "1b7c093a27679f845e4b37968bee8abc7349971829085f5b0afb11421f6677b8", "28a0f818a99d9f61ffa61fec5cc7a0ff3c3f6d8262d2e340ae8b92f6e6ce1b34"), ("2d10fc98232c0b0b36534c2a271b57e11c191185a7029269953e3fa027a47f9c", "22ddbeeef496eadc25d58901023ca916538b9a8bd80c7188d80093a33459d6a0", "0660b1c08262537b2c8f4881dcbe03013f1c7c63bd348058af1fe07e038cf040", "1845f446b68d6f353e97bcacb325ce341cba57c2047f6f3c26c71c5b5be9f7fa"), ("0513b7670ef198babff083634b8f4c49a86f0b4ad5daa7311bb289ea5fcb3397", "18a4cc3466d0df68f062000c78a0435e810dfa9efd165ff864c40780c5220b04", "084d5bdd652c717324886de2c67256632353048b20e4f38cd27df411aef33e33", "14e2ef6c04e8d7e23b81b4a9aad63c0abb5cb5a10ee00d561c4b59714ef57f0f"), ("17ab4b72c88638974fc825661ea1d7820a125a9ba64a9840b783416cad2f643f", "129bf9127c2c0177b9948a8d589c7bdf2c78a2eddc2a506f4e1a400abc53adab", "0979697c97c0be22c3ddc4696788b0d4985c221d4c0b5498dc466839715bfd2d", "137710bf06d89139a5d7e62f3bca2c00a3283d53209b30e20bf33e1d8b82cba2"), ("1fc21eaa041903975757512c654cd39b9bf771c61f083a9a2147d2e567fbf2b6", "0ac6e830f4bb989ca37f5f8e0e49e95c630e27116dfd07822d6405e4b5edeabd", "010a78494a3e2bbdf5cc7695e75c4d00d0a6a2b740896b79d0f31db6eb5ee365", "0ce0c4a584461db0028499c1f0ad3117a497fb9dacd609b8c807675c7c8bf357"), ("052d8107fb76dfd522dc724c0f172ae6985c2b891b850b9adb038a5a5f00b81d", "0f0e7b0c140534699d27501f42b03c5d7d43e273f00ca05fb343f83604887cd0", "1448189110481e128a450673f516cecd6f6868d4b825f574837cde109ea37833", "0df3684e0a08035786038e2384c26447ef243289ccc53a811d035c4341126c1b"), ("18ae6cb9bdaa766961e867f49c1675b9d19465564aaca804f6274c7bb916c3a1", "0d83265cd6947a9ba62228b581c9427d96423414c127a66b1e2ae5e2277b83b8", "1cf5991c17c43e9750e012fb7df214606265bd8c945da27cf027b01444258593", "3018591b680c58dd32044ecedc845d58d0893e964fe2cb8d1fa6e70d61763cfd"), ("0f69ae70c0397c0b0b6c5b153565d269a0152631bfede96234e14427c047b1f2", "0c9b4f03a9dc5214cf7b60de751bba4a87a0dd2b66993de8ef6596a28fdae67b", "0e8611c7e592ca8ca302c61cd0b65a1eb357b683e2118d4fa96310302db89703", "2c3d622f50ad59f201941a030e3d9bc8031930124e2177a7dc24395008ca1016"), ("14d619d751b3e2bf1f0041ea732027f91ac5a94ac4a6438d42c269b6d81f22ec", "1723886a4c72757dd066efe2bfe4aacf57a03760153242cdf727f4e2f8bb998c", "216820048c15a20680c3bed221a1106a3edb3ac2cba2eed021f80d75615ad786", "1ffface136981b011608e38b351af2654d59158328127895a1c801c62a19ed23"), ("0af15bb8acd142cb5800bceedaa3825f1cde407faf86005a56239773181de17a", "08ae0b6544d95f84ed4a839deb0370578cab7779fa224739daafbc205b0b2475", "16c3e7e76846de44e3f04a5572556004bf317235d3f0da16c5d3cf37db8fc4e4", "022e566b03fdd21fe976750a0f4f9a75788c21ee16c286057c9d215c535fc777"), ("1484fd7c752ad73aa9c0ce2a1f885c2f48b867f761da6ec4efbcb088491fb93d", "10cb5af3bfb63d5daca6a9192bd6b771f412ca56f0e8abd2381139ca97278faf", "0ba8eff37f4aefe687d4a5904a6d81d14578931055d97b3125daf2a6f03bd153", "1c2b5186c7bb1d7d2b781d5e1b639c5a20489207174f3836ddcbd47ffe1b0ab5"), ("058f17bd572bfb4f2ed59c9760f4a2def1c42c6f7da7a43217508139eb5ead76", "1e691661ac8105fd13709bc17b057025081a10ef3bdac2991c997714187bc858", "1a7ff6a25d0f66ba1a9f423e77693eb95bd5eaa1ac92aa0bc46ba2aba2d451bd", "2d5b496220c188e7a9e9a5da59bf1f54bd4ac89c4ec2866df063e73706359166"), ("22f56189241a31ed408c90283467d65b37a2a2d8feaec427b8624c0ea080ef38", "172be5bb0f9c461a8470f24c750129f2bdb6ee26e1dbf3708d21919dbe475f9f", "13625c36a0ac9a52f82a6006ce197c4393885ce442ace902723b13ec8d498693", "146256ffdd1f9eac6aec6e220a8801d3c8f0d9b9786dab0813e6d9979c2b7a7d"), ("01fcb72e82576427e2963cbfcd5abd51df9749bf882909baeae9636cc5b4e75e", "2a72dcf37432490b825fc977d38d89ce233319b11e7d5aae1b03c189ca060d98", "0430c0c94efee533c4f709b3fd0ef6d0d453027a15ae82d4a20365808ad8664a", "1ec6399ef334134c8c264ff7a4e975f517b606991287cf2f849143fbf4bf83b3"), ("04d65f30155f5fb6875613ddd1443b7ced463b1ba776b1173507d45cfdb1441f", "1178ec3815faf1f1ac3f960825c5dab713021f61af2315b3416809b15ef885a5", "15d0ab5ccdb7b98ed3ff213755f984de84bcaa216befcd3d7f5a71c12562ec45", "1fe5aa9f803c984d0bb48c73670ceaaf36778161139069e09230b4463996b0e3"), ("09cc898b1dd1e5afe972c6965ada4aebec8d2c3f5bcdc5f7673ff41d6a651896", "00812a5ed083b1dd7d6685a783772bf1d6b6ff859a09ad6f7d4478d2df51f6bb", "1d27d1ea9b9e0aa9b524405ec67374164cab38155f60a7364e29774c2df79e73", "29a24bad3055ff75696c5d8e696ac0d2717fca51a73d623cf8fb776e8d706c15"), ("09ee8c412dc609f9419f2b28b0fae4a1d81267f28317226019209b911d6abd1b", "234f50007342671f13723e706783beac960b50ed9e2f5ed9d3b337776d1d64df", "0a34b00792efde7c3b974cf1ef8f6dd6bd450601c15059678bdc3cc70ba802de", "1e1756e5bbe17e3576550002783f09eb3e493a106f39e0b5b374050316b5ba7f"), ("285ea820ddd5f27b76fff1b21385fed0dd7c259c20ede5ef2ba706f24af7eb67", "01dfa48aa81f5d904e24ae29b0c9c3e211ff9507a98dc157788def8c64dd813c", "26da0bc541c2ab38c4cdbbf596abcf02746ec48a4e2fa12712950b36bc02fef0", "27286e74616fa51b1f460907b3f92af85aed4bc52d3dd59059e341ad8c6167ed"), ("03d97ba70abdea9182b1536d8b5acbcb4c046d59b46b8d3c79cb64924aee3b45", "1eac85026e063e856864dabcd2c71f9732bbb240bf068a38841c04ae5c4c965a", "29b23e3f8db42f66b9ecd59859bf1123e236d91c44644afe3e383ec0222f2426", "106f958d8378c3594e442bb7dd2c0bca7bde4dc44e0fb285615dd42dbf1371b6"), ("2c383f1abf2d67c1001bb748d4d7230fa25845c9b5148691bfc840bee61c1c23", "0570efb5037999e4197e3409f15f239568e0e86cb82bd9c15e267b3349846ac1", "18e38884bb007a9b912be62f9fad4e3f9bdd5752ccca444da671b35220efa1bf", "27af94ddc44d7db7fe8e423b36f67f3f7b58cabef8d09809f8c3759ab84af69c"), ("0848c7c53b5a4252295ec10086a2d9e6226eb766c8d5accac3e0f2a16c8c6e7b", "082649d238aa7e5ddfdaa2d5c495f918fca601cd0c5a09f3e5f924d81c7cb73f", "2c7f5c292def89c73768995fb69721d12a90b604271d52083f072235ea7e3360", "215597f0583c05f471fd5706f21221b5ec39859f2fb45f7f4821044fe5a53fa7"), ("1faac5f78482e65cc749f3b05eb8e8fbaeab969def75b253723c8e5716da079b", "170fff5df4c268681f713e42cd41728bd1c3d8bec6a953a071ed6c3a534117af", "029f244d13d9e08b21bea8c8b7d6f612d20bf619f49bacec162c3a24e2017275", "06ea38c4202e2b7e008f1ce0c3d4c01915a45855942be4c9289ad0f7f5cee140"), ("0e9f4a9da74574a72e1f7a87c3f7fe04fa25ea73aa31742658775271bfe81376", "04777891721ef3f01d115efc3e16deb209e0f678f43de0fef52787712bb2a9ad", "077dad8b4f4bae5d8001c0b4fd00e988cb49dcb903dd87f1c6602c845f3216e5", "23e3ce2596eedda8dc35c6d346d4878c65cb10d025798fa4f8b9c83a2cb1ca6f"), ("08d211719d78121f16bcfce529738a1be5c0259d97ff190af5016ff64086b9c2", "2a682f288cdcb7864781b726650ed1144deabb819c0533c1eaaa250225cf0acd", "30582782160143173c9388c78737abc5c47a10e13a2e28e7d3dc34f59874363d", "2ab9c8634584b85d3015307e25f92e538f8e35df7ef3aa51b026b9b7cb01edcc"), ("11a575474b917f27ecfd900168ce243caa143fcf9246971908a9f3e32e9eb1a9", "24f00c97dd322cc6164c1077b0812de21708803abc70320156a556e8c0b06729", "2bc76028c45a89b7758fa44ea243a660b8a9688d25ca3fd3399cec67a3cab53e", "283cfba338142b85dede77dd8ea455ea6d188795a00783c9d3256bdd15f1e058"), ("0c3c5b00fdf0c7ecf5c9e09e70c6b515566a8e1288c4fa21ccacbbef2e12cb7a", "1cb4149d3b52c02d5661f58a2e2f70a9d4d275f8b97ba947121f182b34e03e72", "06839f06da743194ce48da468f4c0441a2b4df2c63a82e15f258027ed81763f9", "2c0b78c69f910afb6009c855e299175f2cca0ba8fd7842964a96d44d23eba98a"), ("15bbe367486fba1256be7aca60838f75c25d34bc20aac113d99803374b05e376", "053ec526d33ca82db6c0bbbc7afbff2ca10d581f9f790271cb43d3d5ee9c03e3", "27b82750bd571a0fc960f4e1c4e278f69ec50628767a0a4dcc186d16fb7139dd", "2ff48f125317573c2a6801a60da3ef56e26e4912299d087fb65f52efe4b7320c"), ("1ace43a621d89366aa127b4e89fe009d09a4344fccab5cc352c377b19669ff25", "1b4e9a2f300c64cf5bad923b8a0ac32b221072aae06504813037845c3a54435b", "1db4400381ee241c0b36a2556321544140612ed50a66d32aff754be4bb0912d1", "1b01d4ab48cc41f75ac2a24bc0a11e0989055e38e70c291661147d2f85616efb"), ("06c7ec1663c789543e5cb883187e32e6df391a2cdeb7fea99846b60dad940658", "06c3f197265812f65519ca32b9ec5a1ed2280294f80fb818a1937c32a6bee52e", "1abb4349722cf0ede6daeda3af24cf83cc617b8338b949780af461f38f05ed46", "0eba1d5306307e74cddd82fc5dfcb5646b4e7355d5d939f5eae2c593763232f4"), ("1fea16d03dfa6f00925b151e518567442a0ab4903a3dafcecf15deec7b7f9f7f", "2ede6f79bba7dbf312cb1461c0e3becbf4a711746e029b96c13f43da97d35ef5", "2726e4637b26c9366aa13e6f3097e2f4432a25b5b6c88e947db3ca5303f244d6", "00c6996f71af76d5db2df8341d2c729de83465473211ca47d0dc6b1c2922f84d"), ("2d3ec8b0c907f45f05beeb8ebe67d994ccca4fc88a113b12c4bea07acf9535bf", "15bc74bf4f486ba15d848419b659c89f1855ca0799c682f67c592337a7164dc7", "29843964143c1025d17e701f7f90618712b565616634c824d2089e32494f963f", "2aed8a610e1d85efe467f5825addd45b5d7ee74393237b363ee8621e138d9323"), ("24420f8cc101174465d10ba0eb7ddd6ac1abb02420b4abce5a0a1ac1eaee40f5", "1958aa37185fa4d45ba67c9cfe892bf360a03072a0dd14fbaef407f0832be26e", "2e7010655775c569848302ebd2ef5f3118faf5089bb69e3eef6c2918c79cb3c5", "02d99144fa3ea423cba6e2b81091bbfc6eafd14e1f3965127d6359105541d6e0"), ("2191e4e552cc4f022fbdd1da0e545b0aa754093093392366d43108a9d98fcba5", "17a01cb9e2832cdea9a3c269271d29de49901c72741a23627b42406271694297", "2e6a0fee6a7f60975f8d309adfa7321f6c63491e14603ab55b7288562c776c4e", "1eb8ea6253d7cc8f8051c506a4e3d3e04bc3cd99bce89f7408a4260b2a4eef9c"), ("0f0056684034f6e8afdb832e16d26d4c71c31db6a63f66abf5fc740b5217b1c7", "1a00b162310360764deac4c0df8c342506bc15113a97c9ad403351bb03578117", "0b2e94bd99f37fa8a1c5ad9672423a4bc09f272143769a964c9934ac40274af3", "195fbee73972a1b035d846a2e32e2955a349de3bcff52d7ab0d6ea6930387713"), ("1375bbc7bcc02ff5e9f7eee4501d03b1964c79b375e7b3e663e64538aab1ac01", "1c93e7643714e535891f9338a138960f983920e5ce101266e10a938becb07a6d", "22fd1deefee105b04e5b49bab49bc7dc8b08d68cd902ba5fa9aa423f96acb697", "2777054ded7347a1946fa7f1b31311884c60dc3ddca6d87e84c7e601410dc489"), ("143e57a512ae2ee22337b4445bfaeb26d0eaa14348ed4fd173b4ef2fb4ee3ea8", "0e234aa219652ab4ef025d60ea2f7cd8b6bc14c72a010e21afa8f0df8c815ff8", "0b7e333dfc5f207414f7707b0a4ba5f47bcce3999583dd26b0918e3dd9812779", "13fa0abc128f20ceadfa85e57803d1a66ef73dbd9840280c3d276c67ceed0289"), ("2cabd404ee3c5079503f992cfa108c948c3f208015ca346cf39e6ebb90650c00", "05ca69f816efeef44cf59aba3be8fac1a453f6b20f1ffc78650b5bdb90f82c31", "14128ea7fca8cb62f9d9ad6bad160ce0f246926d0cb801a8ef88fc881cd0be69", "2652613a5dd6c3183f96a5ad5ff4851261e07de3af1ad481a4026ec35e6f35c1"), ("2c7dc60538c790ec99ec0199af6a79d9bda7773d129c63dc31202eed255dcabb", "3054a53538362db99663b0eb7b9f2fbc384dbb40277ac4d6808dd0c6e6d30e39", "25cdbf3be8ad51d84d9c27874d7a10a3cd4a9d8fb2e576032e5f96aef6e56fa5", "2fd1b28c998f38438481c223c5d40fd92d9045832ea7c137d4bd45ccca07ae5e"), ("28001e9741679eea6048cdcaa0beec61f49b90336a80093746042c4a53e8e5e6", "22693e9097951ebb54adf92f8fa241bd52bae1e6e782d6630f991e54aa161194", "2f1cbcbedcc062529b06577358770eacaf726cd11a32565e9ed103ebe1dc68b6", "1d182991c0762b04219859eaa7ec19073340119894177e0c07c8aa57e1efa6a3"), ("07896f7c6f723ded7720c9e55b48ebf420a7f93272383b6f9d3a4a78a59fbe3f", "152df8e85464c88a01fed89c220ecd1bee5bbc1f98af689bed921d3bdac5f959", "1e055ad62f4e84ed4dd7ea78f6c88a61ffca36e68120116ed705c832895519ad", "122fa42ee2816a27bd26f74260034bfdf6d55700dff8519c182454f548433239"), ("05feefca8ee2a938d2ac98c28cc546be44af3c1c058084d0e2e638db2dfda055", "28b08de76b6330a9dcabc7933190569604e94cdda4d9b760c18a9f2e696f3f78", "01b665c4ec8b3d7d8cfab6d608ca6c4600cdd26b6d82641cfc4d00536d88211d", "261278522ff5af0c5bf391798bf2d8dc1454f3a9fad239617b83120f05ef7ca5"), ("1d11c210914d4ab87e32f9af1e555d762fd904d3ef79e3b6d3a9c980a33614b7", "0132a7770b46759dc5f860f3dd97a45370aebadfc39107ce449bcc89c2261323", "10e8b78d7d08c04beb4541714411a44ddc304f08f6fb58c81a233ff0cbb22149", "166118b0be523bb06e1ddfbe3b4813f048ac06439de458d013627dbefd617bfc"), ("05d5012d27177ec7252caaa8906961d14fa3dced24e350a3b64878c86c8414dc", "089ba301cd38f9b26bd4a1030f58f46f8078a5c82166ef4c3a0dae38f70b16bc", "28af8759edfbdc39438dd91f5558bffb8802a32009f170667556ce9bf52b3de1", "2c736275709e019f1689ba5ea82ab7e4fae39bef810bfde795a649761841e386"), ("2314fd8a7e2ecf18e7f3477dd814bd3cff995f25b43175a9f085dbaf9c9bc222", "1ba1940a2d88790547f0d6f713ed4c81f9e41ac26d345146cb232de2508e52ed", "2f8c3dfba4e356f0fea4b6b817e7741078388a3cfb536a2f883f5f11d0a354ab", "0b767e79cae583e772da09936fb2c96bd8aa69988c1a27c7e8721bff31389569"), ("2d54288e72491a99555c85adca2229efe8f3b84f34e4ef8d5fbba6c91156231a", "156ffd287cf4b80b5b99a3c811d5663fd7b14094056e9a238eee1df4f129ed24", "1bdba2f275ff6736ea42d12d37f51664e806618e2fac2f9d8d82d2a43a06d9dd", "0fadbaf9e8a01d0e3391666fc6ce5f0472956b06efb7850196d858c77c387864"), ("242e4a37111479d76fe88665da23f5b90858238f369bd73e38060c6b1faf92c4", "08f8bdd35e4f1f64f56fe00afb8eb4f97cfb11807a51c87a3f4111eea0d24ad7", "1084b02c4cc4195f8ad224e592c0b9bf0566ed9de55fdba745a4768a7ec9f901", "0e420f77a1daf0d72ae43793fefb1b2ba22cd2fb7faec28c33812ceed952de18"), ("07f20850932f2e78c08682341474f5639acf3ab6ae27ccb06c6a9d92a54ae575", "2091beb625b4ebde084165fa5e265a0e0a4066449d55ee7319db4c98362e1699", "2218f2313b6df859957970cb2d6640e994141387596e3e322327164983babc4b", "146d9a41656f97322c36ce42a8c076b8d3327aa7d4fd6a509931983b462df7c2"), ("0bc8bebad5942992e8ab8f9aa8cd15dfd48916e011f6f20b82c9c98763ef6146", "008f5194455705bb0422996498466873a24637d3ac5862f71b7da896fa04fd86", "22ba270c1377047a5c65c62f59e2cd3ef9afe9990db1ac8ad700616fa4158987", "2c36ce6c41616720352cead5b89acbc85fb9994789c7595bd482524ccfa05131"), ("07e995c0090e5b00b7650ac88bd58392e34afdfdfcaa9c035b34f32c6b69a0e8", "0b2d61183de8b7af0870543b09182271132b5a1c4b9af4c6fa6a9362b93a9885", "2013329812bb4ceea305a0c5bb95446efb0a2788dd7d3c1cd3b50f4907201392", "1794e755451f3255175c9741c4b30abd8a9754b8c55bc4964106a40a147cc175"), ("13561a0f752b2a71d35c68d49eb46ec74340c3d28b45352586f27670e2e8d442", "286ecfa43d959db9b7f5ee304652af556f15031769cf09656a13fa27380ec905", "1426c21c52442189f8a2295d4685efaf6943b375f19e01458c275a2c19606616", "297119056080d08a3ffc3c6c44e9fb9f8ce3af13e55fff09a94b14a94111055d"), ("222f92b452037667a24fe2e3003019d7b3ed01b9140d80cab8776642c82b2f36", "29d3e27b5e1e605797c00646e41a2ef95f41c79be0f558301cca462ff134df64", "2383c9299266b1dd4d85a285ddf5f53912217b1657c3e41ac7d41a5596c276c2", "0f0b5e1f5a8e4f3a14e7d07aae55ea287bc01c59eb3def6308c42d1bc238243f"), ("00e2c58dc9bf5e91691d65026c99cfa78a2a4d4fc44a78bd8dadc38f5cc0b788", "2dde168d4ff0424b88b67a79ea5073a6a1fb6fda75660080bf6327a0f6fb7206", "04866eb0ac7907103141b3e7f793b7d16183d545f6910cf9f54b6696726f697e", "21a05de8ec45a381c1d2595d6513ad37ca75ba9786f9bdc5bc931158e67d01f3"), ("0128f257f87865887dafeeb2a532cecb5d1e2e9405f324dd8cb2c8f8eefdf893", "2702a1349ea9afd17f7bbfe798cab60fb8fa1ad9b7453771cc4195c7d62ad7a5", "0b2b7dd9145061062355aef76b659c3c0517819b6bd7d270dccd3b263ccec43b", "234fc02fddf8b6dbe87ad49cf40824bc2cf0fa0dc0720e840c07d4f88fb3c4df"), ("26f7978f9e97cd78679640de0be660b106ea5061ae645faade506477b775dac9", "1d0103ee8e2e6bfa08333807e9186773d962773c5615f903a013f6191a7833a3", "09f42c331d8edeb7929828e7eff4fcd11d206b30928e877b9cbf577816ec5201", "235c235cd146af587007804ade8340fafb666fdc3a91d72f8b24960709c3aafc"), ("0f5b829d1e0ff084524aeb02d978db027086258a0cf78edb8cb8108028b62df9", "1f4e898e5ab1c4f8356e51fd0de1087e86e3471ac5007df77b9d72ba1ab5e427", "23506ba5f3e619a44e35b4f435479cdceacbc402f3145437bf9f86bc83e00534", "0b514e8077337c03cb41e385c928143fe5cea135940ba521fba0f6509a39877e"), ("1a18f857a647d54641c35d6effd540213eb1163b4ff3e4f7b90268ed888d6766", "293b39c4622a18ba54d7fcc00e20b27c93126354bd2355546de040458bb05580", "103eff4eef684c5f727ca5d9c6d19d8e5c81fff5bc23ee4580b81c135def466e", "299531bda19a15e5c0ce4eac6cc243ca78e2c4049776fadd50274bce7689049b"), ("024c45fb7cda29642d5e2e17a386bb27c853e91d35737b6d68c411c21b84ab7c", "2cf200bd387f86f76d405ad8b11e3e0d7e53168661b1c0ce3abfb973557aaec1", "02dd80550563b191ad35871c981c8ec2b42aa862d7c77f6944e05e69f6eac641", "11394145b1322dae1b85fa0a3b607c7832ae853adb4814411d368faad5e9f2fb"), ("2a961bb3ed9dd59ae5004a0ff56838a3829f8d477c7382ba7b3c7f8866d3c1db", "17167b81c8b0c4a2f78322b4b86de7c697f27bde97d953c7bfe11c2e498f14ea", "14175a44b802ea9856cbb48ac2ae6085521e64f6bc08f2fd5d40fb5590797a54", "09c4c7c7826549150bd7a73112a1e78d5c56bd009722131e6012045ac5516f49"), ("1509d6c4dfa5d7f8dcb7b747a412a31fefe0141f36561e0afa258d5f944b87b5", "268e054590e3687455d4b5f2e939b7dc08964b3d565d21fc3463674b707a3f5e", "27942130b5f3e4c1c4ed330b1ce1e5fcf317bde378904c736fd06e7a3a07bdb5", "18c264d468d974924843a16bcca75d5f439a1b9bc57d097c38c1499744acb84d"), ("25842add56c840f7983216ded7a4ea961b181506aa92e9a4e9949925863562ed", "17c88b265a7dea1346066b6cf1f47ffad8b8f19bec13d9f069b6d587dab9b4b7", "1abed3cbaca24b190dc0e51b674963bad059ddf4884ba769cca7005c205dbe52", "0f0708728f47a568d3227dddc9925c84d22db0d11bf9c59b262814d6ce532e2d"), ("2201046f6a857c7e513fd832c3371f8acc91320f3b1d12e3025db43374ee00c6", "1e8b102ec8a8d2dcf681810e0c69a7fb4694b6d74c738add178ef3a3d5ee4ae9", "092bf5361a4b646cf6b25ff9786a8c2ed6e928053d06802beee5829584a0e8c3", "0b26aaa9c9a9498378c01875e1b0f4fe13d21c77946fba51426b17c81592f0d7"), ("0f6bcfe04e6b5e6eec48b61bf39270572d354c6f0139873270c165eff395f40b", "2128bd0b1cc5549ebed88268270b166b9c4dd6a6930d56b6b23775e730bf4df5", "1749e3605ddfe15f6a9d2d98585a2329380fa793c93c48bee2b17c4c33d27602", "0f2c15e77ed58906d80c669b1c235098db8fa1e214219eff30a46b1c5d46dbd0"), ("2b613382104206b0701b79f969f42c0263531d803df8c3f99683be2f9d07e713", "2e37f8011f1ccff262b350bf70cb430b40690b1fc22ca50fae7429ae536d670c", "2c74cfe6267c5b9f8f5f4054ea7fb01bcaa59b08126b15b63249b06263630c51", "05bf303f9aacdc2565147a4ece046d3133f317d9ef72d82b959b7701a8c7d02c"), ("0cbb39961b95582dd6e918e56c49b9f6fd824d3541327cc330d9fd004dbc670b", "131a03cb1090d454b71efb71bef582c0e09ca2b90e10b677d3a9c69552d063eb", "184b9a2ad16f3113afa894730eee4e52c6c218c8babbc65095800aee9f028a6e", "0daf10dac0f0defb661a9a5b192c0a7e86c17837cee2c81dd3b34f4adeaf075e"), ("19a4c4aff78dde769e1abf4d072ee09d9978b9d6c9709ee0672c6521e8a2a733", "2c91ad835d9e5e2de3df45ade8b471af5dc6522480158704512fb1124afe42b6", "2ce063f342e3666ac3c6730d08903bba41707494ffddf89b8468951d47e98567", "1dbb53e4874cf935840f07cf2e3aed620da33316db788f60ab6ea4c5332d4dbc"), ("1c7b3ab64c830e2c2836b8ec6b97241a4f2f7b1b591cdf52d8be08463f3ec7ee", "1f95522509677bf45a4a6e2171871ead28751ae08ae8d391314c99d8f9bffd1c", "2badcf1bae9558a6b6403e9651db985cd1de9363cdbd3ea85543d61ed245dd87", "2a999b783bb861a403b4b35fee4d89bc6808bc5e2ece144223b9ca3a212fe616"), ("1746919c8970c0ca9e3da69ce7e53b5420eabb8dccdfaf6b8773660e6a0beb31", "0af011981317f990f90ae4e081e418a2fa1339e1d584bb4c3cb26eacfa4831d3", "0793edf8c3846197e7834e0cd3caa881e6aa180724e8ff2e9013138825946766", "201ffdcc3ae63851283d99bc2ebbbcec162aff9e3b6069220dbfd7d87753281a"), ("1ce6079d34fa194a6bea207f73ecc5b03a5525dc620d847a4b576b49ad58a771", "1cdc9c02e6b26892d63ef66eb8329dbd842fc1ebc7bb233235cfa0cca2fb9fb8", "18b0f976a7de55417188da57d31f336b9ae45a42937b571f2d37648849ae0a16", "1b0d0a2b7d7613ab5d7216cd4dffa95cbf75fe9a73abb45b3b106151c0dcb3a1"), ("26ed172b162819bc57ebc861e54f40b1581f4bf78125e0d51c77f7b9b1a14022", "1d63a8a9e6c7cfb24c8379c2adf8a1d295ecc8d767147dcd145b93835bf83d8f", "0a601c71e4e13ce2cc37ce3e5878a7b224473f0c497e1a84be671e9861b050c2", "0d588aea662c9a183b34e7ed28bc656090f86acee747a3c704659e3698db2ea2"), ("18865b65303358d1890bcac6c9017dad71c4fd9c56e858a71c51a1e6ebf1927b", "169e362238b8145a308505a5a4736f61ea3c44ea42cdb5cba89d9514a0c04acd", "25212fadca3a77dd57afd7f8db117e3bbc6c93361aa1483bd316e9caa489f512", "237e7de67560c8e1f06f0b8fe4ef7adc609918c996af018e1ddc77c4b89e510f"), ("2ab9c60072ebecdc5c055eb2841b76d9fcc33be8cb4133af9cc66c345b453a75", "2f2a712ce5b1a1b89956d0a848617a8d399fc57e2f04016ca63091cb87efba55", "2d58dfd844b18af3ec0bf5a968860d45b1d3751f30982160cd851bfe4153e880", "17c86a5fcbdb50777c7e01eb760b47e3bfb1925672bad63c6d19f60eb51829d9"), ("2f0ce9fd7dcffd81a109ede168d93ce27a67d7e8e931bf40260a90bf2319cc2a", "11700700a7ddc8c385625cb9befef6ef1a3f0d83d43e8c9fa52f8faa5e4489d6", "3050379b6e10d1a6407ecdecc2a55557154a397470ead59b1d5c75bd70c7fc09", "18ddcaa447228c2e33c04fa6070069829b362b77b80cc032b4691c033d05cbf1"), ("1a4e56612265a46b28fbbba3d48dd4c85564ec89eda77a6f71f375e5552b254a", "2b634974a145c0e60f192085e617c1747540dc7afebbbcb77bb0839b8216ba8f", "2a0ccde142fb5d3585f6167dd2a2657f9793f7ae3751b8e059a4523b1d992b86", "2571bfe19cbdddb798cf930ecedf687d951d614697799e54f744c122bc0a1780"), ("0d434ec8af36e9d4901bd628ac996f1b34d8c1ab2edf59862c2709832498cc29", "25efa8464e5b1e204e6ea4f34ffb0bbbc494a8aac178466ad97ea18c921ad8b6", "1966efb7e20199122611327cf6024d7c2c3e33e3133df52148493fbcca6c1458", "219d6c67807092798839e61da4737fef0d3dac064c7f1718046b07ad5062928f"), ("2b1851af21fe314bebdf9a2086cd52d5418e6b09c1659cd3e1215e6c8f27f2dc", "095c60a667949eeabff3563258a7dc1b5f6d4c305c0f114dacf492e0854b43cf", "26f70215a41be6297175b670a306c24133a1bf38f9fe0a17642f1c468d4bb79d", "1848e94549d00eccb89c9c6442fa8ccbf79c0bd4cedb72bbab4163933c6ade62"), ("227c523a08b8e01830201988249b21467365bda046fc9bc24a4862d9f9727bad", "04fd510f6dc6a0afd8521086951c5a20c24d7966172fbc3e5a4757fef657270a", "143b70d6aaa67ba84e5baf7ec14f56ddc4a5d1055498b1e8e39bdbdb38e007e5", "231d9b67704ddba4d698d55ad03e872374775cf497f6c5ff414800041f61617e"), ("22e2339737fcb1fdac6a5108c5490986f8d62b0b4fdb10929fb363f9e60729e6", "14c0f84a22f601d4485df55cafc3f6461af1aa708e0ae59fbaa6b47c23af4243", "11d27abc3f32b4c77bc83fc154f0db70407388ad632d398db4bd804bb763d328", "0c7245d2e0b51df478650687b36fdafd7776ca6d1d3dcc6293e4b692f45dcce0"), ("2ca75af3bbf8aa02847fd33d00ee3e5ea8e9afde6ddb376cbd5c48245f689247", "0b4d243ad199ab6431aef3c2a63b9f432e5905d92207b86745827d71b48e3e66", "0cd7e4ba2a0361a82312967244f8458200e19575e79aec90964a0ade614f8c3f", "134aa8a0eb652927e53cac2baf89d0583504446c4ba90da72b1a26a087449fee"), ("1784583ad190fbb438330cdea0484d5f332bd9e4ad3fa67a9696c2a57c19f585", "27eed9a63be09044687e4003402b61d3b6e491d06e70c655ca582c017929646d", "01b94294df604efe28e2c39efd27d35cff1d104a49d50706710c07227d076488", "23e84b16915d391f3012ce24169e84d03dd98eaad53bc97baac9db6c9917d184"), ("1b745c5fb31c6eca91a0c9344aa56d53f5283c07fbd86426b2d4221238bf5c16", "0045f3dc998dc9b1aa9f43f9ceec65f13195e6784a0d33a42e62c8358c683a2b", "07d1649bc965055460cc079d8937addb7a32d82610a481d5e1ccdf0cbac812c0", "2bdac02fae95b383649896e5d62bf08cfe2272681a494b6383ad25482507fa08"), ("16f490f3d94f1ea676afac6542929d634fc7ac2d4746256070615b1e1697bdc9", "1542a3714ec055fc89561be072212ab1460eb2522ae350a97de9268be1656288", "2a2a8c554f98b72105dbac57a327a31effcf579a94390942840216548cce2121", "09dd861eb528ef2dc6d49eab16bfe3f3dbb82f3aee312d8c31ed6b1649db550c"), ("1eb8b7dd6b43c78e86a73098b825faa0e924d26e8b61bf711b8a725c25ddc985", "2da95f8d0a4af6afd27415613c2edd8b0fe9e9bcf2dfd7ca52578efaf38740b3", "252089509ac78b41dcfd1ff1c58de1826254e14cc9422a5457517d6779bed2fe", "12cf34fbe689ea72409a81a9a22fd8948988c9edc543ed8c5ebdd594ca7eec04"), ("17fd0848ef737665be50173e1f39be91aa077e5ecf5cbe63f44a6467bf0c2990", "286f04b9f9d8435cd1dede58227a5d1192db333a9aac39d8397c96f099f13c06", "208fde3edf00a2635ca823bcf5f5adf2434ef00e9d204beb9c9801b017baea44", "17bbf2ad0fa0e092203851baef95c88c8e3bb0011f6a47f2f2c4d37b477658f7"), ("131f6db3e67bcf0c5e9bbf0e2621b2018dba4880b2f7967e7f56507aecd576e7", "2a6550ca845ea295d2e31075d6ad8750493794934769a8c2ce3d55aa5b5460b2", "0a00b40924e4a655a6ef7d9a8af80b727702c30493479fb54354d84409812709", "1b09e9c0ad65c39fd6cdd92c169889f5e1460e9ad4a4b0364148623fade5d4cf"), ("19f59a0b1cbdeb7d99df527acafdac6c03fd686235bcb4cd8c9b87d5e34d51db", "1a1eed58a93246a211bb95c83686505cf7b90cb1b091e8fc3331765f8e255615", "1f0594b5950f1d753f8c373a4cda325baec64d1f674985be7c89764a79d8553d", "0feb1b4db3895cd33ed68effb83e4d57842d6fb720e0ffd6ba7f2170feebe738"), ("08b8f217d97a86e0b58fed0a4f1b226de765cb848eec797ecda6bd6fa179004f", "304ffcff77ea9e29ef2d2348ce41f5265ef4cf34cf1fa067f527d96528c26a8f", "056e251865c9be694ea3da8d5a2eae528ff3c2cfeb5681e17ecbf1545a2cc174", "2969ce6fe2647bf35729c85af18f9c94d793ff3fc4bc4959e25731e6d3c4f35e"), ("1f69aec61e2d94c5d4c8a7a0eded0879cbe808f2df6dae1c809dc7c0608b81e8", "2f2364de0cc083ea874fac1e209170e8d60f8b96fa860415dcd6d9f776e59543", "287a299e21d1f19530a5bfbf0614283331a89a582f8cdc0646c553d7f6d75c7e", "0a3a926c64c92d0a3f133b1edaa54c05a582b56dda0d1232753302742b86d540"), ("2d1ccd590e82c1eac8e062562369a9bcb720493874bf7fb65ba694238b76e769", "2602e34bc0fd05e1a9096d5c653175e8a186b93b332052da28580b7e6c87143e", "0cbf85167645ffcb80eda8e9c52d1d8f6bfd6f2d90e5241124bdcd6aeaaa7ad4", "2727e79471b582969f8abd48c519c0a12eb0b82a59af8e6501aa6d711ae6165c"), ("18ec524ee2aa903d63db251c4bdc98dea44b875b3e264a2f832a45dbf1e50555", "00270f7aae6053ac994d830d26ec7888abf4455c035cf093656f81d8255eb80e", "271db171397c248638d92f0c43adefb1dff90b38032438dad5cc66241981ebb4", "224decc8e88c3f2dbd8f3d82dea63db9b56c7521971e988936bda001f40c95a7"), ("28864815c9dacaac7a2b6524d64abe8ee830fe287e2a069b94e512ffb8e142d1", "03eab87a049858842f5c47ab5431d891f0c79ab567c23df89bd8bbebd8fc39ff", "22495566dc35a168a7bbb766a423b85c3d1d84731757ee5bfd8dff477308488f", "0548ec29184ebdc75e0c8a1a30d650173f8ff7cb603a8f8f751cdca6cb51deae"), ("11ec25b4147ba5281efba14352f26bae024dd8b8e855269e8d4335144084ab8e", "23da51fa348e24a7946c70b29b8d08ed8140a3ddb7602c75ad601665270d0301", "1aaac54dd4cda568398a3f72198f5df758cd0dbfbccc3e57ccbd56cb931e75a8", "12938fa5a948542c1a3e62b68626cd1231d1353ab7dbbce510210b89c5cd87cb"), ("1c52b8259fefd76fc6767b76f177b843501c5d7cd31cfe8b703269860bdac57f", "1d2de2770bb6994107cf822f58085a08608a2079585dabe8570799c6a826225d", "07d7ebcee0c325aa813cff126702c9d70bd5d5b844008a6e672014e5dd3ba3d5", "09aa0717e525ed64b3d90b11356e5a666e4158b4c4acc1d0e4c251a4ad0303f2"), ("20ddd10248bf1e4ff3dc550f7a03f70f51a2a269791bb4af31db543a3cb722c9", "0775b00d84f13b59a16e81fc303b8260ff470e8eca6fcdb4bc94ef32c95c492c", "254739059b8286166bc174e993e85e7b35113081ea6ed4377ffc7e0cda308a58", "27ddfc61fc48991659d975301e486f0cbe035f8ed36428ca8d071819f6d7da4a"), ("23d2d9bf2000ef9dfaecff0aef9fd80bd4bafaa76c463bd83575132a8aa96cf0", "1dc4721820860cbd6a2f51a3fddca208c275120ae4f692d2159ba2a94e109eca", "2914dee9914cfd9fa11c40e58e8a1691735cfdedbd339ff868250096ef14b36e", "21dc322a8ef97c11ce7f25e1ea31600a4535772a2ef8dd28554e617de4d2125d"), ("19787fbcb839f4f1a6591e0c398168e653bfcf079be75ee6aa4872f948f776a7", "1d217dbe7bbba7dbf2f213efd3b9742255cf22c084a9b12b4a6d224a1a055a42", "2652049c3237d79f1e80a5394ee347c4fa3053e33fa88d52a89becadf38c2b5a", "18d645fcb3edbd68dd487f0fb09d0558f5309381c0def9ac7e443e0569200c26"), ("2961d97550c9056e5fd1f1e7577748aa1b0bf89b8dd08e61211e99a5a6887c91", "0a59e04dff4df127e7a6a70b5837cf037aece66f8a9c9395de0a118652c9b76b", "218cc760ed2b44935bf581076a5a64f320cb58aa9a1c33626f40d16f3cde47e9", "1271ed1d9bb8b1d0d85b4e32b9d8e1d81accb0dcf0d0c632705e18535171428f"), ("1f3bebdf85c7aec92924bbe45368438cb97d7bd7768c36152f3eecfe42ace67a", "0f8a8920534eb5b8a923170a2da17191c4fd8ee16e08a81cd545a047e86e343f", "1af9cbecab48fe9dbdd27a97a258eb194537713a3c47b635a146db573f4f1568", "0c7f14263e510b2381aaa25d7e8083e9de38a127edbf0f130841199270a53cab"), ("0a6bf8e1f4a6793fd3b7eca39aff46cf31f595d9ac7f31ea14cdb6dce4b57d85", "09cc0faf645f2312886cc02f3e214f11d029e574bd2c0b67425d3b5f4f78e5c9", "05abd4e02d66c4fbec259617d3f610859a554e28f3c4f4dcbf57f7c3258b479e", "032e14014c16f98eec2229eaf4be2f0954f3ce529f9d43e3f6faa5858603966d"), ("206ec05bfb5f45aef61c3d34a589102da94c835730432286ac0998675cb76023", "0c10b5839c236e3f2de0108c4ab2b251c7f803f1c630a24e16f387b473b4e967", "27857aacd82812e9d10cee01c42a4cd7f205d0319cfbcbf0c76808ec04aba97b", "25f74c4155308d4fa32954bbf117aa43edcb6d719858dea4fa0fc7596ba1293c"), ("22a1751be56cf61eef6033b85b53824ebcc8e69540188438ac5d7378c3ff93d8", "0f4330910a4117599540b404208df19fae0905337afa34d62475cb34aabdd78d", "04728f9a71895f66d94574860c4f8253e798b8d88b2e2b00b51e5965af90dbe8", "280d145182701191d63612e8ab27e44bcccd8c186020b0c0c737455e0b6257ba"), ("233019008ed05eea21ff77dea9158e1425987fe7f46ce5640773244611cb5957", "11da0082f6c0e30a929b354848fc12967a9efc8a41e343d0747c2d7d292fd1fc", "2ee1297d969f2afcf66d8b0ee512cd8b946a6820c3c8a0b4bab3fc9520ca0779", "11de8d3f1171c2658f6523818b0c3391479792fb07517ae8c502cce1ecbd8117"), ("21634aad0cb856f4cd01164c1921ece5afc38a40c8dafa5abacc44b62387bfe0", "0373f2122d062ba3685636ea5a6751f66889a53965ce584f8c985d0c44d34d38", "1f130896343a1e37a4dcf17484c71ce2d4ce552635c01aafd58d09be763693b6", "0e0b93738dd2e6e6ef0dc605e009e3f71cace2519d7469d8699349e74b6b95ee"), ("1bf95263579f1ab9418428b265064ef5a63030cd7394166641f07d06b98f6ccd", "0212f8d91d30c1a581f3e04157e03ed33597527686d587852d187b460c21116c", "074559539ab7114f6c82182aaafa92470f573f88a8fc3adf4eac58e6f070c08b", "06e304f7879387497cee474e3cde95ec47fef7820daa3a8e53dc4b4b68869973"), ("23495ac19bfb8addaaa09eb9e124adcc9774bc09b36234d08a21e20cf199ead0", "08819397c1a83f5a5acb98922a0a999206464590036fccfa9119c845abcb4529", "188077ae15d54e1fe1e579694007c6a2ec440e3be104dcb79b91261c944835f5", "220a52a32c1c0e76a40180e6b79b8e22bf967c714ce8b3db7e5264fcb9ac779a"), ("24f391bbd8544b9be14d115be29408c1712cff954960daaa184c91d58d4f62f2", "162fd4156281bfc0e3b23d73c4371aa82fda24d04a19c559f5bc2adbe0841839", "1fc84de4253c664031b5548fb885e8b2892b6d86e7e1bb4d5070ddcbf0e10de2", "236466be5c2f9720278089820e3f6a7e22a1e9ec01cac0dcc5dc8939fea8e7f3"), ("2621b4d373f7229b0306a9c9546d938a02a5f0743e13499f484acdbe6ca3a692", "2fe74c8a81709ba5f0c0b59590d5099335c0cb22a32fc64599b5b619b3da2b9b", "0600213da0a066350cc2e9d64d4d20d4f48b9b802fae75b92b2adce4c4b1ae66", "2568a6482ec3290e4228c38b30722fe5919ec44abb7d69395f542b258ef640a2"), ("17d36d9c7cb49b836209423f14ebda6b8e0662c1ec7b72dd91631c7b3318e3e4", "0b38f58aa06b61c30eb165fd3fb68a5f6b52b305c02a332e998dd4661403f9e0", "09d1d90a6a2ed0901872885f033801f096bc51e00c515aa4c8ff47693f3c98dc", "0e89ec8a2edae4b449c854864e52ae45168a87d6c0b3d6c5039e5242b24aedda"), ("041bbdcb7e93beceadeaf61bd8267e82db3f8443610ce11aff3b59056b4a8400", "0c893b273f6bcbab984e6dee365287d6c6dedd247e72d7f84336dee25f06d5a6", "2ecbc5b6e6bbb5565692388bcce76d36acac482790e08a6dceec03633b5b012e", "0df8b622280e4ad3f6cf4d0c305cd9fe176ce33bc2e9abd2b303770a2483697e"), ("15cf596e13b898b402b0899edb403a297fb02b8ca270dfca94197f4ca24b8a06", "05d93be14d73af6774c7ec94c097d76b4e604dfa73f885aed5187bde8c974163", "1cee385537b09db7bcb48c7e298a4abd77f9631cf266a024b82fdd95613ff68d", "1898c947e54e74adb6f1b5f464a6e51c70e5ea2bb1f108240413b0fb33c6ba59"), ("17f98bb3b80eb08be7814d3b5f083b61909dc33486afb067a85f7fc859e871fc", "1dc0f8e47273388485200d4a1aeb64df2106b81545a4c16d74a5b57aa5945271", "27f6a3cf3d2d5049db0573136b48ee900b5a642374f0f687ff23e89640392da7", "21ce576fafa28f677b28967b03887f4f3e78030526235afcd3cc043588027dff"), ("06961c42354b3934cda2331b42192d0ad8144e4b776188e38a26c013f0504a49", "0f1e3a81e68f6361937d6da333c73b0d5053bbfbeb4fd0480e43a747b618d15c", "086a76a8e030b427b5b1a9dbfc90abb47fd4f55c88d8ddccc6dbe29323191ff7", "1404501718d8911590305e61c9e6113ea46877c711e2fab3a53045233458fb7e"), ("23b4a31d7b011cf2329932d1a9d9576d82aaf5a34d0308dfe5f45b287a90e080", "11259eadfa45d3de8d6c4a9df70bce72b7e868579494c8a695400be9fcf61803", "176a9b73db7304096f244d711653bbd746823cca61b6be0ffe135c1ccc0d5c9c", "152b7eba7e7a0a7f47abd02386c42a16349a8d428de2ca71494673bf41d38328"), ("1129cecc5dbf9d0b285977c1ff6de65b7e4ce8d165277e7db843e64ebe82e06e", "0fcbbaf392c7cedfee793fcc152eded0a6cab4113b70e0af7d2ff89bb2203494", "0cf0b4ba6cc6b2b824314159ccd648a50c6a5f089025ea6a5bab5d44813c292d", "14a8b44e97c329ab2a90bda9a3fd65e78fd4356ba9df58c753c8cc650e3e75f5"), ("16628f6124be72abbff274b81a3a108242a1d37414c33247f623be0a55637a0b", "0c842a86115f36e243ea3ec2ea14987f06d97595938a288f799a52aee2d7870c", "250085d7486003cd9f322cd9a4039ab7b91a409e7a296911fce18e3419203bd3", "07ffe9f9434ac262efaaee2cbdc6e0e51401345d13ea77b8e6cd92fd69750678"), ("160ede86cefcb5349a502d5ffdaf1002687f913bfc16675bef24b56573fff1ab", "1189cd8778cddfa166fb677c25c51aee5e81dbc54db5d2e9223281b5f4d4f7db", "2c4a514d7a682681d003085d8e5044a332c65f00e5f93e9b2ad49959c2ea8ea7", "180e444778a90da2ccc25c5ea06dba7636aa05bfaa6613b4e8cfb8b1d1eed8ee"), ("19e879594447e0095db8e1b3dc48cdbc636c0d89c730f22420d1579bd060a847", "129ddc9fe72868d23b438638e8999be66acd506dfc4f0a336f29472208fb0444", "2f21386315ea11f5229ceec75e811e7e1214cc1416f5ad48112db96cdbb26ea3", "2af162072ec04c9ad56b98d04572053f20ce69f25cf6c0cd00970d985f2845ab"), ("2b3ec35814840e82b6cf288952edcfee8067e19e57e1e66f6d404cf3c1e9601c", "0a3266f7ea1eaa470d1c88e065e789e0d24347831b14f6b3b4cf87416f861bb8", "08ff4287e809a72426d3df0661c08dadf71e42846709af6f0585da68019730a4", "00f3f8fcfe903a08c4dd49c63ddceced9efd3bb5a66140225709ac1f93b00a28"), ("2a62befce7056e9955e59ac38b58ec886be905d4248272f48d1a80e892d035e1", "25d4321d2deda9162edd717dedb4aa476d5e8f51dd464f0c7c0811d6280162f0", "11d8fabad43be6ba2723f7701caa03b2f838b57461e65b8dc9a8e9d7da2650f8", "18b1ce0f1122b0ed6b1bf8da57adbba5a0305ad63b31fac8eaf4f8b1557ee59a"), ("203cc3c0af74096a9d49ae3cef53eb7cb3896035f725a1f381dbfa83988b5528", "01d0427908f12c67c94a8e81ce17f10dee4acda08db7b01a81b96a969ec38ec7", "2296bc4dfec5e5554a975956ac9738f2487cd97f74ddf8aba1351456f08e1ce5", "277f418cce5874832e719dbc22b94f9057566f0ede1a19b6058b7e39d725bbbb"), ("2b742d4cfc9612d2740604106b6fef6700589cdc6dc7f0e69eb6f5d15181cd05", "114ff098b5e77ec5524bd22307dfd0cc1571cebbc90606d656b6b726c8d5383d", "04439ddef77fdda4bbf7fa6bfb374fd0ce8d9232f80a49603f92e076625efbaa", "0fece2be798920bf409adb8e2159e045f29e4baaee1e810616599388b616998f"), ("257ed93299623a64ad66e96b9d570b9a6d18a42ad26cb58bac7f1b3d33833c5b", "114fb8caf46360c7aa3cd069f510d3c53034e7498c742ed5a07b2a595c912572", "017c1ec2b2e2d068d6cdc52185702a23f9c3cdf1e3282e6024e0b8357f88abac", "229cedd4a67ee89e6eb9b3fa0bb499f6ccec43a6eedf4a1a8fbe11a0e9607283"), ("25c632e134332663dbad3ac4c371593a9f406a17aba93b885257bec8c047d6a4", "30265f22e8c63cff7c89966469eacb11c57c31b1abc3546cdb83cbe2d4d21baa", "041a48d452c41b845f5053385fa9ea55999798fe66571589d76fb6f0445a991b", "17eb431aea716bdc32bc37514b37a4cef7e0d5ec47a3cdd8e58928983370b262"), ("06c470cbff93ed58810d709d29bf3ece44afc8303d92535e54938e3380c03924", "2a9f1dac3bcf333ea9b885c53163efa56b20a7bcb56827d0f8222b606a0aa58b", "010171ada4d7baf3e757e21004b885d43982b5339de2d1b173cc9d0881594543", "036cd7e06ee5fdd5e179e9f59df063401869708dc083d1c4d6c49f0cdc4a2665"), ("2815195935c80b48a4163c90f8b00c2fddb699dba6b47daf967e49df1b535127", "0843770693f039c3955dd53548ed99183884bd1c28e79dc93e96211db53e03ec", "2bf335c16bf5938e91afc8b17ec1d36dbac37afa0de93e61e0425d7f2b877e45", "271bd1932895b0a7b5f58cfe113c91bdb26ec5ab8e8af5eb00af3c90c970c814"), ("0b1548597bd04847a8271e04d2fa6e2ecb8477200f27c3392803fcfb2288f77d", "255c0652ce8227ce2e4b84f9a8d77665499f2491efbfe868ece955c5c788fa81", "2408a727eaf5dfaa20f50649926bd51ba5fc72d555ba7fa33c7421cbd5e2c8ce", "23e934def52b164cc2b1202b51971b75bc77a9fc420a10038d7961c8ed13edb6"), ("2f50e49755483fc43bfb97150b2f1983562e83622c2cfe7d578109401b16951b", "21bd412046b1dce5f7441ea6881b2a5d33339d9e2354ad21d7002c4dfd07d027", "263d5b194a8b84498e3c587dd0c77a650356aa3234574e3fc2b3193777529426", "1808a20706a024485903620015c4e7bd3262f30a32c35298fe1e8389f584f149"), ("08541bcdbf2f75ea6342fe631f65ab06ff2086d3640f87cfe8b680f8c939d9d2", "0e6e76e10d54cd1bf23a2620212106a1cb1fa93d23ba4c5ee38c2d7b3fd62880", "2b2b7ac5eea6ac89ebe6b8f189b140fb45dcbd9b576a1ac5879e4d092b8583c1", "11e4d8f1a469c782114b4f4e498086651c1c4cb3b679605013c728c33cf26ae1"), ("19133e81cdd9dffee27a1fe129ef37d132c076dfca892d2f23d402cc28b2bd8b", "2f86f3b3070ba0b2dd415820538c6d13caa45cba72f7d62d606cea2665a88f29", "0be22009a6fd3dcf1ff2380d021746c154f8f5adae692a05c319aecd988befe2", "18fcf99ea1f4540da0f360bfadb89851d7d0f131c23a92374a4c7216da85ef09"), ("25ca7a83374cb719c35e0f329e071015dced4f6439a43528957c07478fb13e63", "24632771d4bbd61f2567a7bb3f849b0d2b042d66dc8769e7454f63e9aa4aa166", "23ffc14da5aafe0be1c23bc54fbbd6d8b76b42319f24ca5bdc3782cf54ce0637", "1ac2b4a798874bde37e15503acd9a8203bf2a16f076738f705948c541b989fbc"), ("18bce8f9751d01bfa0f26c11345577c7332c566d2b8346004258f72b310aef6e", "2ad95e1e5988fc29aafb01d26c89d10f4aadb012b2c59d4281421127be883669", "293e4c034c44e20e7889eb985eed0bf74e127ed85b006b976ac8c95b2c88cd0a", "0c016584f008cca09b996dae35a62c537218d8dfe08dfb0eba19ccdf7d02af10"), ("02b7d65d695fe1e09678be4a0ded3391e655eab9de68dd8fed4dd03e64bd7da2", "2fd0d7c3988ab627eb9f1538d8ff00e2210cb82dc71707b566f68f0a29e43402", "1b2ab942826cb861ecdcc7cab0c91581ad4878b3c1740211b32f3d1c75cdf65c", "0905a675ce5f946852f8e8d94267f14438e961ce877c91baa5428e292193b836"), ("09c7a04630085fa9e387b238c834b4eb78991d151bc28362672ad2f5c7d23ced", "09d445b394d0a0382d240fcb40347f6d22330ebff6370c24ac6df8c43bc64e8c", "0c8659bdac50e98e67c67b7e27597bbb0d6cae08353b1f65a296393fb5eb281a", "1f2ffb31331010abdb8bf06914147e6ba6dffdfca74c7818c82409d756657109"), ("2185302901b02917349162ea480fd593a2f39551043d7690086b23bf273505c1", "08f71c312986354dfd900ea730fc8107843313874d5fcd1f870c95251aa6be2e", "0ab0f49a1f2d7a12ac25691f85c41665b6b7bf21015d63ed5aa52ba0ff184006", "21041ac0b6cfa3c764151e2968e9f648e2fef6cdf88885f4a43f34430e6091d0"), ("0ea52241ef4c299397f2c148a90668dc3e89c0c9008f9b4663c1e6cefd59ac64", "1caae973e3369b8db53c57161c0620f2267c3e51952ff97a47fc81cfd6de6d9d", "2105e8a23db2ef241b05358e7f3a9f13bad9d7567fdca4d8c866fa7d48c499a7", "2d2749cc192c9555ca33eb817e4abd903b77fda131f12d97faaeb610bb2355f7"), ("123aa2af89acbaee972bc7db644cbbe572d8becd7e2838a0508f9fe48460c347", "2675efb89759484c47b6b8e80166872fff458e456c4dcafef0034aab7241bc72", "24620f7bb9c9afd91049be4cb7f19f922e1391a6fe0cfcc1f35f1d5409174bef", "24f374022a3d3fd46cb658d1ff9543e19d3701dd3ef6890c0a1d0c0c698fc5f8"), ("13db4d10a69888fd4fc3755cc8982121468538b9a852d0db64bc19497dcfc305", "2c92f7aec7afb87e6d7480745e354bbe1c7d6711e0d58bde7d96fd04bf83f28b", "0a88190da816ea13230626b94bbf167a83b5d1019a938889ccf626adcb18c7f6", "0da1d73b5742f499706c07932b34c7949b23ef81bb136d6d5e4ae1c3873b3cdc"), ("169d5acd07de3626956a4582d32d2f2c15186b23308a4f5b8a22817a338e15ab", "1b37cdcdddcd6dfd895b77726aa160eaf371d54638d097721f7ec5553bb93970", "2b4e1981e9027afcec12c82e67848caf6b08aa208d5d3f81fd297a50dca7dac1", "27a492d90f04fa475939adadd708d10ab3d4a1a1367ac1bb20c0b54339019155"), ("2220933ef01f840ff91e1bc287db54917798af3bac9bbafc7ee4c9c5f8aa56cb", "2aef24bd746babc975128b701e772f558268af91cb35667aef85137df5e580fb", "05a0ddf918c47359bf95d18264247a0369c96c0cb08d89ec1ea690e615082475", "28680a6c4144a58f40bb7633432fa9764b6b4584b7e4d84181ad860eda6b7890"), ("1c1bb26ffdc6f20a02eed0ce5dca9025781b6212bdf97c24fcb916c324747b56", "27a82d7140a7cc928c8e4b147e274acb3527ae4919220e08f6eea9505f10d8ac", "14695e48e56d6f620e00952ca3aa1293e83d9a28997668d77fa6081d3f0226f8", "17419f9b40551485fba888701a1e92836d9a112252ac355265ae92b9a0ddf2a0"), ("1e10dba9a3b7b9059d00ca9c71b2e18c4095bf240dffd414c4ef14be3fcd802f", "10e428d4f33389f090e9613fda6c5159e034058b47a59eade9560d784e7f8395", "262c8463b0c35e4a27a8991af4d989e9f9259cd2f47a45e6f09f31a13d45d4e3", "1058838c51dc47a8bd9a4ef0dc22e035a20461e092ad13e883c639cb3b829d80"), ("1e2633c3a850c7a2daa54dc42b19a0928ddf25dae8aef4a36cd7cafdd0973bc1", "07b582373dc0566d8d3f66259f77bf5c8c67fdfa0c13947d15e119e09ed7a525", "1df15cc1020bcd5471ce790cee31f9caf16c69985b9031fd4c88959a4c4677d6", "24f576233eb908e044754d406b8c403e1a04b7ad21a8afc7de749ff9c5b887b0"), ("1649cec9fdab8ecb4a2870d209812b99b0267819113ffa476d14f7cfe015ea4d", "0870cdb4ce199bbe2897c69773f6db7c341907073c63089c7e1f15c0a80fcc77", "1b21a5dd18f604906dfb304050f525f46b750d8ca8ad60967202f8e18016bc67", "13db9c601de609263d5025f3de56c64de8a3bcff30bd854d0ec64cb013a5515f"), ("28903c66ddf91ec54207b4266cb7ed677b8fd8b7bdeb0fd0589a3df006d5d9ea", "29fa61918c28296ac10b4f8445c1b61730efc57a0cce478bdffb5a6dd9abc814", "11190025d1af12575f7a2d3ea4c3c55f25796656f81d7e761679932985de5fb1", "209985a2a941ca3facbaa39ebbe60101be8afbf07ab574dd20a190bfcf0c3e6e"), ("2df4e5c19ec23c4dde333108a64ef243a093d0eff5bb85e7135c1e5a82fa7c96", "0d04445cad2206a8d8825bed75f6486f850dbe7b79e7ab342c12790544228356", "08171e2dba18e0fa75387a4a3a20acadc412d45cd14afa89fb6b266d429e9f03", "255487522daa63c18259dd485c36ef4f7d92751a118c0507099366503336d790"), ("14fb1789cd0fb75ab0151bb58b23383d6c62211322216a6e2644f626812bb002", "0f04c1c844900a5aef73067c8f1a12e9ffd527bdf0188dd4467d02c029910f7e", "2fca86279d01c9a5b4203d0d7dbbe82c069ffff6cf856effed696cc2ab7871a8", "1164881cf4cacaddda3a7e171a57ad25d1e202b7525d58a0b6f6b7129d227e21"), ("1ea2e0b6222b6d299e241c90acaae21e8d836c627f97533ea7faab08bae9b527", "29fe92f38bea937a4c678e9f653175bff32d456476a0db3d13b4a9d7f8852f95", "28cd6b161bb439916ee8973462b428b87c409ee5172ba49516684bdff1f7d01a", "02c7cc229a4e369d585753ff5d4ebd859de5200b66732a3967cdd1b62b92175f"), ("2a46bec86eb1576e2ec50b7837fe46c45fcff62383364c2b93e7a19a32ed6bb1", "0e681999557114ad1b185fda7d3cb2c54082a7abcf98ae613e05ae5fdf945b0d", "20b76cc0e422a1aff38ab83f98c98ff08871ee040d7f8fe0262b986e9b0be74d", "1d87fede67b7eed8b82e4be885f842b9d48ba7d512a2cf1cb889d1968d0e92bf"), ("29d7c4b85760d7b1601022e32cfd2e99521a8799718c015cb7a5c5e823e0bd51", "1369bac9e9cc9fe92a27f29f27ee023a5ce020683362de67ba60376cfd10c481", "1fe9209bbcd09c549dce518ee5553886f82d8abad3525a58d0cc57e1f5976ac1", "28efdf359c17e76fb91d66eb62022c5e2a82dcc2144b27e71530e8b60c818503"), ("1521bd042f30329414dc5b620a366896ef976ed697a07f9e604a9652a88ec95d", "04103c79c95c612ff92ecb3c9102b8af7623eff0f86323756648bc18aa77273b", "153da1280ab8a502fa8cb0702c4ad0bb05c07ccebe4599b83e0b8a25580725e6", "0840d9a20586e12861258a90ce5ecf563cbd97a2cf9903bf1710ee001f502ec4"), ("012f58779b639d21b216884937faa1c35fc67188d53e194af52eb82e65873248", "2c15cfad3d50489d0dcdb414fc83579583666b546d3e92352094b905868f3a6e", "2f6fb057de1dadcba90844be6a532e9740b9d5fd0d7c126f32f921e93880a026", "1ee26b9606b1c2a93de02fccb2f5b16dc2358529bbc8db53653f142e0cdf39db"), ("22097f706a51f0e09712102664ef7fc0bf840c2033782ccdb9c0c1c0276d4ce1", "08a5bf03b3f7e12490a0e48c61322ce2163cc3eb2f6d24b88335794366eb3c6e", "13fc112a418ac98fbb4f9ffe5b89ddddddc055d3878dbd69814a9760d314e636", "169a9f6030fc946533cf2fdcc2b8399b6298cbbcb120e59eac9b2aba3f7f38e0"), ("296829d2f75d3404223826077d3124ee6c395bb9956032837787adc3728da67e", "238677bd646f8128e5b52735a69bf17b2bd0dcd3153273560f41116ec1241e7e", "1ed4534952fc387ff5adbc86d68b43f8dffc79683204d11d1b3233fed32d9a55", "0faed3ad9ae33dccabb4b6dcd93914a43167df717cc47d7ac2c81e0bb66579d0"), ("1a442471252cd962d94a9f6790ffdf238199630e0c03284cbfabb766df6f0cac", "0ec4ab7303cf95c05bc3d0760ff382db4989d21f15ee829563d0e5de0b7c0a1d", "1423489964ffd8acf3d6bc4e9e2e3c519b561dfa884e0ef653f727f11ea801d2", "0a933369ad927f615f1e6e2dcd741345808acef4c338cb9d2c6a15c743286f45"), ("0fe0f03532396ecd94a78842a14c71657afffc6881f64bb83153b53d72aa5331", "15689380ca72a4b0bb8040e8c23e6a557f79e950ef999f5eb1543019ed21534e", "1715a1c61ad0b063ea20da860950c3223ada58628eba9e35a700330de3ce5f87", "0ea4043ac1cc48960ace924027614d5ea001941d78ec831c089099f01adb23d0"), ("2ce308e3b6545522e5fb4bd0b396cd33e2f45719516b11043501d7ad6a83143a", "2c6f3c8603a05dfd2de8b79eb6287fb92e7d0528ccf36d9e0f2bbb4f42c6cdcf", "1c49c904b8b41e5f5b2be906115c26e59f4fb4d98b02e927adc9822508dcfd63", "0297664f7cf073ccff70801cdc15f8474913dc989dfdb84564f4c0643ea98337"), ("1077553b2313c707426f6e627e95cd8a0c4815238018e3ef25ba507e2656d4f3", "0f1eb610406463406fdf0ab319ffd2969c65c9f832148b321a263e30373cc3ce", "2121f7aba2f07418f6e6db1ff72ac7aa1283c38064cf42566b6eb612e5662591", "151a32451f07af26b427bd5f4cfffb7c30a6e8dc2bd6e7791636ea24490090f4"), ("062f2c06389c38d9612166edb5be2275c81e77ec219fe5cbaa321b0b6d8d61e4", "0469c53c677fa844d648bd95a4d88eaab08c930f5d0bd18f4dd6b4354c67b735", "0a3f418dada0ec4ba91a7a05902298fe6dd6620a0c5413bba9531abaa9012c8b", "1fe29139eb884e27c2bc39b961ddc6ec088a706b5f2654b0eb93fdb8f3fac402"), ("172d95934a9bb2eeaed40b17080c2c6a6c66ad07262d94b75d7267c890ce91d4", "0bbf10e94ab31899831bb26274e74c0e1e4baefb58bda6d76d970b14d5c47cea", "16b9391f40cf1de5b8154062a4c1330db658b3cb2f7e13695454fad0f4ec6e0b", "2432f6b95d23ddf34b875e635f2996d1ff832987c23365403c7015e2262d3724"), ("051f84c54eae5d2fb954d4ffdd4de82f9836534dd69c551637f2b8692c2a0a88", "2777265295d7dbf48a03996a1e665e71349cc7f8c059a8321b8ff960380e5f95", "04d25b1f45905454866f18842bb4e0d14ab42d2e05930534633d682d9bea86e2", "2949065aef23507d240f745f3ebdbb6e63398c706a0e0c0d3cf5dacfab8bf1c0"), ("25117a3172f3eda5bc82f3b921e8be7166816e6336e7f41529f74b7cdc755bba", "199cd8e82d8c7c0d8f4ea83ba0431371f147c52bd1a86170ece7fe3ae6188035", "154fe3e661cf78fa32d1657be1e2f42758c1a09cfa382d88c0c015b4a31d46ed", "254f88f7e9203875765c045cfd536ef6b8e9a9ed924dd2ccfe6e799aea3f3e13"), ("18bf8470e977f8b82d93c030bd6b500225d77fa19d7bfebdfbf47343aa062788", "235856f71580fad615290d99845943d7ea8c95f7569b8e670e166c4a0c7e4fb5", "05f4b613e4ec1e90538115733178b72059ff3cd76d81ad00bd0e64c4a1e5299d", "2699511c7d72e1e00bb5876f776009c66d94c2975b88a06b831aa14c1e0efaf8"), ("0010c33326e7ef25d69798938dbb8002d115a9109863d62d0a12b7ee552b254d", "051e6caa9aa1281238ebc61ccd6512f3d01e82381a388e9a20d90b56368094a8", "2d090cf4c21921ce05f057a8366a1da5382a1605e39cd566f9e691abb2bf3f0c", "27201fa2133233fe911c6bef579f49ec3851187edd97e16f2aec95ddbf0ecd2c"), ("045f581db0662ca7b1973f9e7ac39f6d9538d39707a9e8a3eb65dd92fc314ef4", "28baddb2238820455363c059b9220338e6a107e33716019c6f3c159212efeddc", "000d929b6671755d7bcf5c8a2dc5048cf227e7f7beb4392223380cf6eb108638", "2c1b5cd171a45011290afb02d0577d3441868192e4a7cb9d18d83751d47016b1"), ("0e70fb0c3f8ec69bfc07e62b682df0019ca8b25a5936f842892b1e973fd5db70", "26b9b0c59fbde973266998e0dd88fe42d37b011edef447dce03b010c19100e51", "2ec76d0067d8b95dcf5be33ae8c49e8b01f11d9c44c242b6e65eb6a863fbf7e3", "233f8f1a44ea885145fb9299328fd970bfcc854f3df76f2d3a61e555e0f86e7e"), ("18f983fa589fc88f1bc7529022222f63a4f4aa055232791781c44d493dd0ba0f", "099aea13876356fc62b780531a49b12868419f76a5580e454f3de0f8b3d3428b", "26a61b12c8178a928edf10ba956949967fbaeda6fb8dc0b735b17747dafa0b0f", "26422143e947883b106f2138100b4bfb402273e81b37db97dc623937cc5d59e7"), ("15c05a904ace52fab548589fd8322f42528ec3019e25cc5407f55eb1502f7d20", "016f665fb44ef1186a1a5c8c43e3ada99dd1eaa1c1e3f16ba64381b4f826772c", "1562463579c65b3bc42e1a146a263ff2e368808a6f2000344d5d1e0c55007f42", "219e5eeb9a60c524b2b834441e39e8989cc86d71dd914c0ef4ca1a4de28f2859"), ("28c6b5567fcda2ad1330c4992dc089555da610e15f125cba82096179e2ccd25d", "13668b6e0992fe47033af84a9c2c10b3f8854999ddc29d8feb69d94fc41cc548", "1956adb484d0dddd4e6c19c597d73c5bd66b4ef35fec9c9fe82524df5548b43e", "25ebccc495a291ffd9afacef2a87b1298620f1dfd602d599d6bdaf4c50f5cc19"), ("2b8398756984052b07eaedff645d75d59f48c04dd0e56ef7bcf1472be48289e0", "11eb0fe9158196ca4f6a9ad63116b8a57ac2130d3fb4ea48d22d45c0e362f64f", "1cebae465bbe0d1c6d85c1941d3d87099fe501cacd0f01a195dc278f8d23f740", "21e35bf1bc8edcd708a2fa3d624cf4cfa97d1126737e173f0a7f7784a2354e15"), ("26010bd4c7e1cae9ce072edaf6698c0ac5b7d56224e7ee1ef7f07db984281490", "0edb79aa59fd680b0b4333b6d86a59c84c4c1a9d1f192ff1c6b880d50d7764f2", "06620ebe8bd09d3af0636d63c01ca3ca12a737ed0b6e2d44f2ff18db86e2ade4", "0160f072f555e0143e3594a7bed61d0e98a9e57060a0337918c739b14b76f02f"), ("1ca1a5640e350692da1f8b1480bb9de1dae8d06f264725d72f2ef6445440b66d", "2b4b6c49b030130fc0758bd4a0083a834a16c0f22a22342bd3892683ec291e1b", "265eaea86c72e73b10f93b19737d36104bedde7ecf1ebbb39e49188122222109", "01917801aabce3983d94747d23f8ed7dc715b58291a8185eb1db5d0dcafabca8"), ("27767c1bf54690ac8e036b88fbff8a5e3e84935ba7fb50f01815c66d71831c03", "2ac43f0a098ac6a5dfe0723b1e54416039388e9cd9fe24380ebe982195454e74", "111ba6d03eba75e68302cdcb1830f9a38a4c5cae1c5f2ee8142a631ade4c918b", "0db30245dc36883d8493a13ac81adfcecc8d770eef9305c57c07bdf0dc64adb9"), ("264d6ef25dd93e88f15ca1a98b49a5f555cf9c193982a68d7c1478698ec5dc26", "2459b1fbc56f09c7b19eee5b8e61c216d9f147d51be90154193c6875a1295619", "012d8e31290da3ef2f3602fa7a3bf647fbc49885906e15d439238ac65ace7e02", "048c2fc936c9308d4e5adffab9b3ad978d9539e5a9d7fad1e5dc556a4e1d587c"), ("16f8c3e7ac5f7ba211f43705ad57fe983b281425c9dd145fbbf6126f19238b9e", "241583e31b5fa2cd2775773c2ba15e947d84279c5fa87dacfe9759c1cb3c46a3", "1394005b6dd72eddd77f8f64809b7353d5aed4f5e7675d7e4dd3e5336a21efc0", "0e4da1bfa86e675a88af6c68380e33adc59aeb4bb74f16f0b4102f1f6badb171"), ("1da36e13ca7da497b89f754e6d5c827f656fdda9dbcdea5cbc0845e721961739", "02274b9bd10d00716b4611350ae2d1dcf44ba89922ce62b423761d5ac03c005c", "0816c7f897b6c35a54e6032957ab7d9114a722d6162a350a5beeedb21e98e201", "2c2d09fd9b035549a4741d257805d4c943617abd7ee5ecd08af96d698c5160ba"), ("169ebdb0126924ed162eb75ae5e2bd48a61e6cfe64aeb118dc8fcdbc365386bb", "08a8117abfbb0638fc337485eea8fda0ea2d317c697fbcd0d046512caa40ca7e", "044c4013d3785a6d6ebf79372318ee70578e3ae02d915b8a964763aed79351e6", "28c471f7f4b96b4bf2ebe466ca000ad2e73f21f2992f3df4a35be96f8f09206f"), ("0babb453dd37183f538475cd877b9779b14d4ac94db45413a8c98d578ca1ba51", "2bd6e7236d0529c66aa2221f2d4c837d1945b867bbf23d6cea6e7d20c0cce2e0", "18d94a8024ab23a259a4256cb2e0ea1d8cd19777ee59e3b1b2cd63845f1476c8", "1af26b1e408ffc32e8986cb3ffdf0065289fc64dc65bd3c444c253048d248c99"), ("000c0991e628d83dacd6a8d5747752552a2f6bd53accb13fa30f4c5e4b4874e9", "0dc6a1ccdc036f8d271507b37c976c026dfe758217e7adb1997feca48002cacd", "2b6ab56fb82a043d371da137ecbaec114a56d146a46ec94c2ddece664116d69b", "1119bbbe68d6c5c8a85338111fda0d294d83e2279ecaf48871a202ed36856201"), ("28427da81e2bed223a282e1e11f70e7ad645fc47658ddfaac2458caa8dbc180d", "25d433ed0d150ce481decc5c8f3ce50b2758adc8f5f5048a3623c8cdb8e8a009", "18f627720e50fbc3a1403387a5164df3ec1d695851a7ac7ac215749d879daf75", "09803b1e5d489cd66cfd0504070c5c98b89fe2de2ae08ac633646f0bb6add33e"), ("0196e943b40b62354e7e21ab637e0d53f024fc98e8967f694cb83c3566ebf43f", "28f6362e4379840dd4b907aef2913a70b6ec62ccee8f41deae11a65a9386c38a", "1b03d4493c58af6fd962b1cd46ed05aa3d0f09e5e055f97fd63ecd0cbc7fb937", "202bb4c13ebfdbfadc6ca1f79fd428b8f5d6d1e5faeee5d917ccd35951e96f89"), ("27583bfdd1fd6ff7ab343ed6cd415298f3daf4e50f35f1ce681dee1d296213f4", "0eb972039fb5716b998bde84e915acd2267aab078a8ba2142fc5bff747747c19", "16e7de172befb4710308fa8c0f2bb605510e6d9e6f2bce3b2e423a5a9cdf4a91", "1e6e980a2fb01ee2cc390b7cee1fba9e37169e6dc92391f03cf32f27e228948a"), ("27d3dbf5b95feef34b1b6bac492cf62a58633940eb176c5d89831855bd2f6901", "228b9d6e35647d944bbb9b21b516e1e167f5a1a5128a66b761227d7ee3ea268d", "043f4dbf2c4987c463b9d0596820fbabb1c2c999996f8f85f52c81d36d40c54c", "18c13e9abb5c2576ccd97076e86b38f31b7d109cd8f9511550e9324cc4fbad7a"), ("2f8409e54f99339bbba59453c6ebd71cf4287e13bb84e19f2316a3d86534b127", "08da49b69d9e351aa39c5cfc7c2b3fb4af8c763ad9fc806a3142ebab54ae18c2", "092867403f0c5dab1b0959a17ab2e75bfb3e279606ac78c492307ce6b70970a4", "077e5afe064b988e6607da5a3b2b062a676bb0c645ec71210e2a91975ee78f92"), ("0f2b484215dedc843dbefdd7f781c8e142c0e74970fe82803301be93ea4e841c", "07e5279d331cf2ae995107e7c0aeee089fcb7238fb9b8e8aeea74749da373995", "013694e558d82e77dc21e63dba14b717d74b7d9e7ebd8b897cebed3d2e83fd3c", "2b76ce13b16e0dc5519a5dea8b7471c6cf22bbb1408783fb0a2deed5ea21a1cf"), ("2082cfe46f120e1958ee249039e474b2605348d6ee54d454d4ba7b045076eaad", "2ff2236bde3d7246a49b1ca0026b27d9776ba0046eeae6d76b1153ef1ece1512", "1caa621eb95d4854acfca426345855695feb5ff1a689395ffa5cc6a1a30875d5", "00f2b70bf10a22c95d8e8ff5441715881acb4317c1368bbaf4821bb850454389"), ("055d2bf7b057e95c1d46fce59ad4c743528b7c80e501cfab6a6c27d7209ca534", "29ee56e0c0c337ea0237c49a88c0e6ab2719efea0fe16ae698d1b087474980ab", "17d166bab9c2f680a4d05adf2a6b51144873b09fdac883c9a505b923e785f4ea", "244f4a898ffad885b73d4e0216b5bcdc50883532a0c9e28779e39dde4b49903f"), ("145b90c033178c58990ab6083ad06b901872117e275cf3574b800c16f28f13ad", "0f6fe7b8b600773ff0333eccffe32e4474d8f798c4bb57b4e8b6a2542e76d9d6", "009fa1afc092490665a45f0968bd54509a04dd3e1db53a1f189327ea17bcb4ff", "03d3053afdde19880d980aea01a318921daabbd9d013ab6718578dbb9be70752"), ("0b789d61c73af9aebda9d9d5786620259da78f31161be6e4762cd16f2c497de1", "03ce4b4fd4b09cda009c91ecb74aa80e8e21503cba8de593711460b2787d3608", "249870ed3341d1a83cfc7cdee8255d47a623cf2ff3238dc5e72b3c77c3eafed0", "1d9ac1efab40c5b7c435ad83578b8067fb8c3a142518d18339263ddb3b1ec1d7"), ("16abaed9a060a12c5c44015c75b103168bc85a72f442828cae8d2d955e5b4665", "032f51702c0cb8baef2269a1006b194d6fb5821131ee9d8beac534163a532bb2", "22dfacfb642744b7d8454c21ea3a4218d64149112bcb3952ae160562a3d4c001", "1a170982fe683e7d7c912c1739411056842863b4ca811d1d0ddcf724375690bd"), ("24aa2605e0c42287e140a893fc8e2a38ab493711a59ccead5ba318e454667496", "215f483291ebbd10b154ee51f42949b666612fa79920b078e1ebfefb631422f9", "2aabbe760e585ab1ab5d88b831b586236151e2263d1425f657f6258870783665", "0e9159bdba9e8a9693ec5c4e5021db4a2f3e9886dde142b45c6dac86d2101ed5"), ("0130450de0df506a98080a2d46fac58758c3bc68646cd34112f9608328269e53", "031d82a0b9b1acaba65abfab068acfd81d5486fc3e013c7aa667f35ef7c8aa05", "2138defd349a9a9ac1ee08ccf2008b40bb220baab9e5b5be551cd26df2ebd1c3", "29e01fa5fae48fa32bc02c9bdb8791d9aeeaa391c1cd718991717c44ccc580b7"), ("2b73b56a046577b11a21fa8bc6865078c90261aa2cd7a7c292cf5451b8f5d264", "1674692e84aa3bdd5b06d7c5f7a250d9f32b7752bd21c742e178e438b737e0e1", "23c32a8116fb82666680695646bd567974e7da91afbcf0bed73d64ef9d0ec3dd", "06bcdde08227e9e479a28ebefb309d4b328e7b8f9d25bb5e50a9b772933ee642"), ("24d2f732c00a906feca5a2302d5a27dd33788f37f75dac10f358f2ac7b73afea", "2801c6ee1a7577f2ede0a015b2589fa33364843ae9da901770dd75fd1c21861e", "095a9a28bb9f37b1b1b1a897efa0187436b11b74682305973e222d4c329b6fcb", "026066e498a8973b7354e981d4a05c5d39382fd9169970c3c44855e6a9c8e6a9"), ("0364a0982a1373f43c25b3738f08abf14001765a5fdf9c703a5527e45622acac", "226577a829ab6ef8bf3f3b999a3956d13ea479751d73824b5a759a7a04c14b2d", "0a5feebb8d21185cc92bcd93cde217af343a0a2e93b8d364193d34f2946df639", "0cc45d3220507d835cfdc3edc0bc4ae06718ba87de82c07dea732a671a78dc00"), ("054bc2612d0c69efe4716328b598d2bfbd5bb1ac21d70c5679813516eef04b6e", "1076f0856d404763210b6a423cf28ec42ae9467cc0dca490007bbf21535f154a", "1ee963d3c2837b87b8f39efe18de39af545694bc73d37ad6bf6180a9d3b3d71d", "2af776e7d0916dff8c2ce3d2b2c066ef6ae39d332f31955a8b854f4efc47b5e5"), ("05a84d4cdccc9fab5e9d862db799a3e1fe92607d0ed2cb2c9cdcee6bf3575022", "2b30ed07dbe331adeb45037c1143bb1bc375ca9f6c4cae629d097931cc831e25", "1e6a008d03b1dc8f09630d2d603ce7f8ed1826e6ac3e3d496ff23effc086a6bb", "2110a3f3900ccd837ffb8f3a6266c19d853e97c09deebace726410306e297f76"), ("11e0602a30bd0c822ef8e9c51fd384697d0d37eda14f8ead26916fb0580422de", "15b54f99a85e7200abe31ffd06cfef81d6111022b4097b0ebb445813ad4c5d73", "1b8630a1474329f6569e4470909bec56849158c9b22a15fdd0383a80767844dc", "15fab8cfaed1f35e9e642946a6045a8d7c8cec3a5d60d5d4b90347049745bfca"), ("08cf92a3a317c9b9f821245154e807067a9b5e7931819eceb85ac0138cc36bbc", "0d5ca6cc7a219f8eac4b517f7a310814ab8fe743cfdd4d8b0cbc1b3280eb9d46", "0e80a17cde5fc913008c72d80f9d0966f63b871748866eeac858a2d921a18881", "1b37b8c80584bf97704f9d7d40ebb2416f326171a7d7e221b69493a5e7a93151"), ("1a7cba1aa82917dc6398b214ce7324f9658dec04582276fbb52afe9b8a04783f", "10b2c08ca960e6aa1be1b2bbeedd49f6561922309588c65fffe4faf3d0b67384", "2d8d76acd59193607c8c96ee8fa95cff32a88d8553dbde788699332befc110f3", "11c4f7d691e12db8cdc26f70d1f0152392dee69f3b6e847f082feb12b9303610"), ("0d3f763f109a273813288ee2dbe3d2d8c6de4f10fcfd7bd9e5995470d75da39a", "128b3168eda45188eb8c50502354849be54af1f7e2a89a0e0010c711471918d2", "0a9223f816bdeda86125066408ba757570878d841946ed2837aaba990c4b912d", "1ee9c6dd7be21586dec18724378e2889cba30703a65c5662a87cdea2d983e622"), ("0a6b2a9744e8ead14c95e16db2b1cb21539a17af09bd9ed0341eb298214534f1", "26522012886a268b467b2045fb6f85fb6b3741c4c724cf13d02bcaaed4c86599", "139af0d113a9e8a426b96734e1389f59c597e25ee85948c725fcb896293d899b", "14933c42eb205e9c7891c2dc8607f73441a86614c7ee5d82d381777c6ab49c19"), ("1d21685b669c8eaa99fe58224111ca835fba96e363645b46d88b86cf3dcee0c7", "1e47776462e7cbbbde855bf52444c3211200706be54b76393af89521b4769398", "1226d9ca86b83a1c382fc9415b2ec0a2c52da7f5dd12d886c32600073556e6fb", "16e150e6647234833f13cfea0fda501ad0bcb6777dca381e3b543c6836e14ec1"), ("20ea28be3a3538f1534d2af0634a4c73159cf004c087e217d8ed43e308b1942e", "02d0e3489cb3d8dd9e1b0c2dfb619a0e8eb46d1af7de7a74407fd2240623eb6c", "1d0037aa7b166bd6784b8b3716f1b1ab1bae50c4777d11b2e59ce108b4d57ef2", "197bda8a400b5b25e02aa05c5adcaeb3e6294f2268da73a1066fc0ea5de44263"), ("2711482b83ef1ba6cb90b3b12cecd09c7e8d5b34438c3cad90ee414c5457dbb5", "2da014397f311ae1e778e6f4946ad902b7a72e63bd2d9aca9f28bf6964afc902", "219a2914ef27956dc63ca5e6a6e4e48cab22c527de9dd767f7a2476bc05cb4e1", "009a47e244198767c327095dafea62c960d4f16d8431c79d04210c242757197d"), ("2560259e8d7649bb4e31f8602fb06191f5c7cd13dfb12b4e996d172b2839c997", "01e9a85770abef6d50b567c6b663f2be9e70fbfa3d6671fa6173bbcb1d4e6647", "2aabe4dc339790899527655338d8c9ff82142c7183f375d4ff39f80a5c4ee1d2", "2465b67716a842af7c0853f007cf739aaa79c2181760e7b2532b0a387a0195cb"), ("00724ca6a3e193be532feff9bd2fe5e7678efbbeb7c5f05c2f5df61217266f3e", "20f2b786302d18e7e20795a2d7353ecf5ad4086075433f09241e3a5a77bbce3d", "235986e3d324e77879fd940f941e881eb62337c6346cc25c529dd4e908f9ba3d", "1f44b4bfcd3dd9fa02e4d663f3dc54717e843025f34ff63e046869fde48be947"), ("1046ae54d0ce958356efdeba8ed88cf7a79da5bf034e5e8cb95e11fb7cf163d8", "2f576b900c757affcbc6664923927f08c5ba1d111ccb639c0cd0b7990f1f7682", "0f5552354378fcede5ca030efbc72deb45a78dec2ddd1ede70124bd6c2d58dae", "074d57bf72c4e47bd2ed4b5d0a78a5e9b83f4e407910155b9f096eeb6e8c4de6"), ("2d6e589dc5789b7bf0304ac65d88e5873d4b2269b9a3f8ccc293a88afe9bb42c", "0f4d72a2287ed677c187cbaf3c31a047aa45e1810cc48fe5bf24b5e7de29602f", "2a1f8894da6d14034bab7d6b70234ca486c85056ca17d19db59f23a8e04f5311", "2e6218876c6208ea878baef47eb7d1de76138df79d8b48605e65e42372811649"), ("10ab00603d19fa23381fa48133de47052da6d9eacca8f9fd0cf53abd7a65ea3a", "2c9b6236556bbccfdabb0d3f8807e49e2b688f8b8b6156eb5325e3ec93d4edfd", "23ef76046b2eea04db3d5fe1d4693b8d36ac4d5640f06a1846bdd3ae7a79fa85", "17b9fd83195fe1b9af4bd690dc33257dc7295f904628f54e5d1fe55a2128d32b"), ("006c35d867ad9bd228b8fedccd1ec83fe6661e36d7337066c688e87a5f2130e7", "229f3ff6b78c0bcf5a8bd67be38b761169c28eae672bee5fcd2d92b020bd35a5", "2228fc4e82dbfcc277360dfe59bd2048b0441b5ff723253d4539348f1a012e91", "0ec1f906a2622a482953dc51cc7f3904aed10f2a50589c52324ae6a2f662bb0c"), ("2b555f209f2bfe2afafe2278d4acfd583a6b758bbfd5dc6ddd9d7ca5c08be984", "156234b0004078273247a1d49ee79f067ea7b64a6ac05eb484922a818a62e36b", "28ae4b666550d675793291ceac373ebd7d5fa0cac9a3e317aef6162f27d00245", "253c7e6c0dfafcd909aca19292d3613e6484a9472a53d96ec3c8c1654040d0d6"), ("1ed86ceafe349dd8cb3ba9680419e30f475b8ad0aa1bf1552f1a05f19c51d00a", "1cb9b0b256ca41af7fae72c4af50934b5e484be556dbb1fc3fd610987ddcc103", "1e9bc8b65516535e885ed02ce05c8070518d8feee188961e464793cb62163051", "2d856ebd10c8f6b5adb3ab671995ee399136f2814aa4990caf31f6ef3c4d56e3"), ("26792c5ba8db36b6dcb9445cd077e8d208d0bede2d334d24e291dc6d02678006", "1db2cc1f1676ad615e48bc1475ae394d96fb937c10af2e4c5753bad7c9d6e404", "1608ef04cbd1832ab6474d97a45a806631e922d424efaa6781e6ed7d8b74f0cf", "16a2570bb6123dc29e43d5164cb89966bdc0c9c5950071d8a7e18cdb16927135"), ("1f1276e4d8efab61469138955ccbd593f50c4aa76992407b07dc5da1bc7fe252", "1ad8511db06aaa6eaa8aecdaedd906075ab824178442e09b993d139d03765d3c", "05e6aa23ad917ea7d153547630980faf9d60db100de24f5cad514576b69853ad", "1c0b5185ec99124c6d38209eacbdeee0d26d2d5106683cb36e5b1f1a5f79a25c"), ("02c3cc64418a193f76ab0fd6a4b0403351cdb603f8d9734a93030b3a1c2cb612", "01f32e84b0d2ada487cf3c8f54b5828b177faa1c3a2ab793ea42ae53d2e92a30", "0ccb6a46614e99d7f5632ec01500d29680b0bd97fb400d1cbb446f773103d430", "2dbe8a6e8659cb22d70eb163077a6c1d5851117165d174536c462dd53f1b5f37"), ("253e7115f7fb20acb4cedd9d51c955c54e0b2ba6d039d4f3325307d243219678", "1ff2f1e394aaeaf27bbbf3711fe2c7fec6075b502956cda98e4b061384a794ba", "28ed7f63cc9272ba9a57393e72e7cc644375455642bf8eb03ff8fb701dfbf41f", "2b023fb6dde20a7d7163cada1df7c371fe44ec5c59936aef8679b1a38b2bf40c"), ("102acb1cb3276dac14e2e60c13459949632dff121be7793f9145e6e084c369aa", "03a1047ccb33312c5da6bbbcc4091654043c516ec16ef25fc78e70cd9a998e00", "138307fbdae8f71ea2cf511965cd720e38f13bb978539a7e11ddf8708f0d2242", "049be17ec8240c6aaba4230170c44addc4ed453ba7fcd2d81680de69e1327920"), ("2fddee96c8280136e99ca249c65e3f776401fbfeb437cd0bffa28f0ea6ca3a0b", "0ae2140aa4947cb76ca1c701bd0db1e04cfe092901be04c618a74dd2334861fb", "2b0958434b6a249113af7777aff7cbe58d52a6930d7cbdce9fcc3f14fc064ee9", "0d558c56224e924068d52a227943305b7ddb85803168d9a098b955b149f84e50"), ("0f8a6ec9166820a42b49e3a054765739462591c85c0792aa439722d983c95a1e", "10782b1b6e9633cef7f2cef77e15c234e8f5a4a711ef9d746901e9f779749768", "1fae5426b9a3491b2b8c67fcb914c2425a5df56d9313ebe945e00e3650021a4f", "03c45cc3d0f2e40486a358b5bcee60f603548fb2f7aa39c490c442ea3bfe2332"), ("1300471783ab2aafc1898141d16fe8be2aca6e4a549bf7da6fb69265781e7c93", "1cc085e87cf8b73fd9403d478b885eb16fa86428c590edf1d52ac1e38f78fdc7", "1f877a7ec458c9da6b7829b5df40c2cf63b5f75981057860970165fbdb3ea388", "081f74f7b661d3a7b85331b989d2ea8153a6150d7b86639c3b05c70cfb2f908c"), ("2a86f788d49029314c66719261533742490cae2f438b7a1d5071f5bc0cb49293", "16c8e808c12624918eaa5a3ff6616109834267ab93e2d734ad644da58ef2cae0", "2ab959fdc1223ca53da793e334eff2f2ab2ba69df8ec2399b1aa6c9f71cf1101", "2ed6e1986ad0e9e583f23ee3101ecb0631f480ff155c092602313b33afb4275b"), ("00e98095ac45beeb9cf279a3958eed018d91a65da329e0f5389b10b5cba190c5", "0b151474e20a855c1fb1cf8b31233fd5d70554e00e26d27d98360bad2e9cdb0a", "1b0a1d15908f95dbc2e922b34b34e823a4859ddd304e6297690745ad42cb4ee5", "24fc2b06f28be65683eb22a2c10a9f8d05c6c953dd27f2c5c2f4660ebcdf9ecd"), ("08ec42183f510c3e2a9e944853416f77b0eada0dff2d946624b99890ea33213e", "2c0800536f8f26032ab251cb9107c943cc8276f2674e985682128089f57edf26", "210e85269d865572e1239658d8396166ff94f5fdaace4f7180f3fc725103a5b6", "157a9d2d6011aaa01c018ce088377bd4226915dac9dc8b85d919bfa678667f57"), ("1b25d950dcc732de89995f87ae5e3ae708ab35fd1d9623f1248dd54886c278ef", "295b4d4ac7297d5acf2f620aa695ee289e953efaa983e5b85ef76b5004f0cce1", "27c4a0bf039ba2074aac5039e8b6700797ce755f17b220a4f8e078f7e5181a8e", "2f33837f4ac84c5e826c197a5aae1e2ae782795876354f9ee22d2c44a7b2b2dd"), ("2a78c14ed4fa90a4eb169ca6f3881397642d034a201e25e5349f6afc8466c359", "16167c0fb3da3003164b68e0c48a878ef8657954f5f2d9149529eb76ad3cc162", "04c41125fc77cb72d783bfaf84178b5e003493365205b5306aa688c7d28538ae", "0398e223b2e4e7481285fa51d07100bf37df9252aa9e15fd461586d87726f336"), ("30492d68570ac56998e83dc0e8c5d85eaa2db10b5a2583c0292cc59061fd47aa", "20f86ced8e10adf1a47bbc370482c3d2913b3503a99d3e44b17a31f73455b0a7", "2cf1d3cfb7638bc6313f4e712a53735baf2c46845f8271357a366561941fd594", "12d1c685d27a15f01d0904d2da63a8043b66568dff7b0fcb7f6834ed350d5d35"), ("2f47ce1847ec9476e2b64676593893162d9dcc8b73e027e9186a4bf1172a1e5c", "229fc81bc01e8e470e87bdf7490f2f89677038bf3a87966c7f7f15ce7cb875df", "2e7910d59d56e5965472f8050a2a257aa2ab1c2e136cb282514c01e7f171fe34", "232d5a75bed5db05b09a4e21162d00a23fa49801a9befaf27ea7ff867f039ae6"), ("0650e821e9fbc0455653de06c58c107ff65872a8bb8142a51770d3f73bbd2b54", "16f1a43ecb9ea56786cf69eaa9c9cfce12277b9f33fec83943911740030198b0", "204f2c222380024987df9ae34774ba265cbd61b98539b33a0656728372a53a18", "1b7c1be4b4365220947e1933a65ef23e4db3e3444995f194bd5e18ff4c7a0fd2"), ("1c2326afb8f5c2c96bbe1bd8056daf61ca670ad4ee0f8a82b28d61699f3d3ca2", "2cd920885b20883d47ea4fa5689e685d9f914d5953902b84300f1b4d4d5748be", "26e02bf889172fedeefc1fc2911f49caf21d9be8c51adc7fd72e9e45f2aa90ff", "293d23adbba0150e92ce15ba996debba7742886cf0512a6d3188eb48e7278038"), ("27b6a41586b76621ddc0becf3ba91ed02189dd39103d7c25681b0c8e0dd0cfa0", "1afd119133d2811d46895a3b4381e410bf445060092a71baf0ad86a99b747ec2", "151ce6bfc101d476bc69c32affbdf3f385fd42efd8ea17ae982d61b5e4f92df1", "06557253593982bb5a6d01a1a4e8974f92f1d977ebd321cd1963ba115b76c546"), ("12fbf98d328c90ab0946512e2b6dac3ae0ea678436c2c40388993528c9f178a3", "26bedcc694fcb6af858e755c0d69f6983c2e2f5220b98ca37cd356a9ded5e80d", "03d945ed9b5d0f463961fc4c5355b626db073b0e8cba85cf15679c03a1880aaa", "0e1d14c3ce8903021181657bfb99ae38fd36b126d89c353f807216e3e5881939"), ("0acb81e6c60eaa1daf6db136d094ad7260701262be7df537cf8b946fb85d5686", "1629199a0e6505a436e6bc5c061045c922e4266d15fb79b0196090accf636376", "2c5a779b03d7fc6c039e676f6ba65701611bb25af118ab1aec51443c5574fc19", "1fb11740252bf3d94d3d2d1cd05103a2b9f09c5bafa08595bac5dfc9e66123eb"), ("16bb1a1aca134a6c82b68d5a5b116cc5b80454d4ed0cfeba35dd28a4a6af51e1", "155ee12227d868306fcee7910b7bda5c8c453595a52d227e8932847e5ed7b080", "2f7775419b6b951f555a95867da6627ce055e65846fa56ab6b0da96262a09e29", "21bc3c8512db6fec17c99e9d88157f0de60bf8f1f388f7a88c9ce32b0cb1b3a7"), ("0628850ef83747cfc9df60e341c43adc4169c139fd35d930c332d55435d9aec7", "188880a8c40cc2510a0e76cfc0f24705730347344b09b2ba6396832ef422b654", "1fd33fee807cd5faa7947851e57f080df41b1ef098c26ccee48ab2495b581aeb", "08293e7faba432a688a2356b0b5f48485100d8fc83212ff9529137660fb3bbe5"), ("2b0d50fbe89105b66e6b370f0ae2fd522258a41387601113d8d5408d4b8a56e3", "1cb7a2284aefb1fcf5dfca63af9db43ffe720de5856203200a8f7e5e0e2db62c", "0e3d55641fd6a0af615f64617b83908e1a4dd277ce923973e60ea050e48134e9", "1b3d1484db1608dac8fede741865137d3e128bbbbea0e1159861806ff94d64d1"), ("225ff7f7bd730f563312807c7946dbb8a3202353191058b605caa02059d45fcf", "1574f91dd2650f63806df3bd3e8a3667bb34c3eba1bebea2552bf9b3be4898b9", "1e0cce2b9326dbc93f44ec72afc8a88e035488422ff8efe53038b02efbcd3f02", "2bb3660be5f85d9d61cab30e6a4b3b04fb4e29e9245c993676f6c8e3d07714a1"), ("1e8b73cfade326c8f042de65d968b26bca761de3a480109ac60f9591a7ee7fb5", "0f666bfe738bd20a6a890d9fbf8dd0356febee40ed3c90723e75f9e7ce88deac", "1ccc2463ad1addd5e5e0fc5584b5f3b3fc6f70128170db98b3f2647e414504b7", "19c2d3f0c589e37f7a63f61b97e8de1e00c92ddf07146cd7dd91995a24cee3e9"), ("123c6d954cbedb4de3d699455abf093b14d16d3b6852bcff2ecd077f15589e71", "237d3f1d84e3b6f0ee1d952787e76dd688b9930c4dbb0908c6df38a945b4c547", "112586831299fb3aeb39b7fdcee61f28c7317f95eeb02c766547b614b18d7393", "0aee091d5cf9f1abb801f215bd8e59583e91b3a0cf32dabaa08eec0073987c56"), ("28a6543297524f1a4dbdef1a4306834b466065e65a6ab1bd3259295293056a54", "178a182617a144a659a841091de25dbfb797bec7d23325a40b321b2c9df66367", "1b53d9898c014804a5098b76045b983e16535b721ae0a18f745c06748c2be9b3", "2cf2b408179e84580a4a00674c3e16b1ca26b1c23fdb63b1b055b9bc708a1d3e"), ("2fd71690aae10acc4592cecd4e9bbdb3e4c07553642b4b9de6c1aa452af2cec1", "2d62cb9a3606408a24a324cb015f075e4182e18334121ec4435bd0bf4cb4b358", "3041b8f8d5ec5ccc9a0996fc2952fd3aa900f32c9f67bfb894d78603cb1d2f06", "157ceefa2b6a8d5e4b044a7b56a9d6123c7596e4ee965330be14ecd6bad3f18f"), ("2dfc7037105e877fc21a3d0a3e1d0e1301ec0f77485eb87685746307edc4ce22", "2105001df820f4236e7a2472058bd603f66b048940f8af00eaed6080457d58de", "0a23ef2614001d156bcd406496b6fdc91b00afad87739b06d6662d36a3910db2", "170db2150ab459109ef76e14170fb64a5367d186af9caa57bfe93a37c1eb42d2"), ("1687de9b9ae7677eddb613b2d2425521958488bfc5b3746a7502d60425df7941", "0d3b60650434534f292c44f63abfaad896c984dbe4f327fda0f886ef9cbe591c", "2090a7e5402da8f5c1031255b7d1fb6770831c6fb063c1b9c93eed4db5b150cf", "27119b8fc34b02c76260fb4a6515f2e0f77fcd71c6431585d355ed4171a98166"), ("1dda8878d3b0bc142be931b20d98acea2d5b471ea8dcb1d029bfeb82f34b2886", "150b1b3617f5adb89497eac6a7a038ccdc0f2e2d81b4d60de214034e1e92e080", "2f65ffbe4a0571e72b1c2afae8bcbc02adb7c88d031575f1a4380e9dd3ee5b3a", "2bc63cf408da73fa30948b9882e1f3f45120db6ef37ea075d297e965f5c3b537"), ("24bd839954b5ca561d4f181e20c29eddd76ff1cb296cde40e20df5c0c71cceb5", "2c7affddae6992bb780261afdee7e9986e67f630a9ccf8f138c0ac3d87d92cad", "0393d03348aa16a9d9faf79c20f7752b0b0295fb9b1c8dbb50ebd502c87ccc7d", "0bc87eb7e0cdbf4000360216302eae2fb719426d21b614ee858d6f93e1a67e6f"), ("228052b2136fa60537764c9c9385441006f027805d6bb8a48bae911023fda83a", "21d043542ab9a3f07d4c2515b6ecd535447db20f8fd5ff9e6a71b9cae63d1a23", "228c73e2efee76768fc27071a91d80eecb166058eda411f815e3bfd43c71e070", "21f2af7ce7bda7068d0580320b6a8ee1f05b45aebef5029d8da941fbbbb1b09a"), ("06e63cad5d43a3337d13c21da7a295155c9fdf0c0ddbf454384c19d3baba2cda", "10c519f261e162d6aab1c7a082372bd38e6c61cf024be797f76653949891acc0", "1edddf2facfe5dfeaa996a5a6d8550be208d0ba5428327016e325749607fc923", "0aefb8ccee5d6fd9f3c25cde7d183ced7ce5aceedc70cd6350e0ddaa71950245"), ("240b5076d260e48406cd761cd6fcf7f409725cee102736fba9c4e37e4db4478f", "08417762f22e0eef87b0aec7f1988974cfe41efbc23a2e814269c23a14ee7448", "257c2a32b66dd0a31ba7ce1e2dd3dfa417d21bbcd297974a99b8eb2a368872b1", "0ca7497a73f3928827b76cb1b6a4821f0a865fd7233730080dae9af5e5436741"), ("12f96b20b0a07a7f83a25ce6c95372da3ccdb88b4b972787f367add2546dbfb6", "207c22824ca37921e3dfe9cab0174a50823559447a585d3273b04af6ead94658", "1cec68b702cbd0155d2c97a6ce1561cc3ea6d779329416bac301ffc8d6e6fd52", "0f77b6b3d72e205f6dbf47f12b0bddf4ea93c9e15644d5ce6c86c66d071b3308"), ("0982c6cd80fd2ca1d992fe70a058bd45229ff2f9ed3f196fec963d0cf55d01ca", "0794477d0f2c8f49008e28410ce2d8bc673cad73e4ffa94c1c85e4b5d1d1d5a9", "003535b0904af953aff5a51326e903bc4c7f971b4009ff654abce753b8eed951", "206cdd05c640079885dd00c38060ce353e39b01d90ed1b851f6103aa4fa1bd34"), ("0ca0e9ace427e5ffdd0b2d000c396c4e51c83fc41c24fbd3c41f94efd233963b", "0095eb5e2285b381946c47a4732d470743710737d67def52366236012d03a59a", "215836db65c0bf7af05e135e8219108d40de9a41909ca84ef6883128a87eca8f", "01864eea624e30cbaedc321c04cafa0cf14ee271b3a62b55d6d0f6feddeef76f"), ("1c1d87535fb1ef8f146ca9e71ca51151b4fffbbed4c82049992a8e04f8c4ac64", "1ef007e6df935f51b4a67f529893c8860717d2072f5fd0ce2292ede49dc0449d", "094f3a26d2aa8ec6d6e8bec6b6fd651c7775fea84fe136790f7f71330eb4d840", "2311e21f64c18c998d5bec39def2b97671fd82e0fa894f27c44000aa9afbdd4d"), ("2c4de0e14084e11025e18f32b9ef3df1243451693fa2c2f938012535e6f00d9d", "1e1f621193c5f76628a20119c88d80be6cbcf8fc743a260d9c8bb04b84933b39", "261dd89da3595202962aee5e94c28a54a14c505320ad447530e4aa1ecd9d6349", "24b702c9a034e9bd999dca15e5bd13c5c306bffa8883027bddb1670625aa4e25"), ("0f88e6e36002477bd78d681f8ee2609c5274ff0daa95ba81794c4c8f8194ee0e", "1e78402041110417eef4032245188a4996794db2a6b4b948711fca1c9a5c5304", "0de9f457204ec7dea3ceae6c701f3da63d89978c054059575a646104cf53e5d8", "11a035f13311da09fce48147057cdebd89938be18d1ffbd6378739f32fe02fa4"), ("1f4afdc7be706ebfb395403e5e6917ebf7c559ae617fe8fa783dd048c0c4fcdc", "080bcdbe10b7778df7ddb0b22f1b4dde6e34b45dff5301e1e0f01fe28fc4cb0b", "293da4524fa68a564068951cf03343686dee60d532e3b08687545ecef5fce8b7", "1570a97e9a450e7836333dfa916550e1019c0c5c752a5a4185a2fa74b0a488e9"), ("27b927558f5953f8f8487258ce89f396692e61898ecb352f5f7b87eb3b74c4a6", "01a60e3ff19a7f60cf30e6ccc6a4dfbe00a861389fb63704fb3fe581da6d6647", "1ebdd58d39a5d390a9bf28715a5e8a8495a0092595baf8d9e4ad326cfb9c8e52", "172ea719fb2d5bc4c51c4180e92f6fc08b4be682e135f5b0ddc90af21d2f5e3e"), ("2835ade57ddfcc6aa68cd61e39a2e61a2864a850d56fbdbc1c3592255454e4f1", "0ca18289160ef17e226aac8ee45093b5ac3ee9c6374f84bc911f01f0b03502d6", "28b9f716da736022fc0fb6448d63ab080dd992f70c3cbdd1f588595c76b9d93b", "0f003db75d14c82d815d0f405465ab3cdbb77c899c1382ce13f859bf688c9490"), ("14b42d17f989cd7ef3eb6b0129dc689f723367a2825ad3b42274a1e21f92c870", "26dcac94748978c1c35f03c84a4b91122b051d7e65dda355d144bc9d1ec2ac9a", "18134eab19d95ad3d260127ce660b7967caf03fccf40b3c3cde0a3eb7c2c3566", "00f02f670051e10d6aa18d7c42a90b97c902c5a5ed9c98e5c8107b8600cb1b22"), ("2e7b21221940c194a9797941fe15415b90137daa8d4e548f1fbc6cc970fde808", "22ac591782fd27e78e79e61547727a2e4484ef36244e1e38793869db3dd8860b", "2df14c371a38c236427e7c391e56e09bf90db2a597cffba2d802a38e4b3243bf", "136ca0ebcc51ee496ace4002d16a8b4317764c87938e02dacb0d80aa75699e45"), ("277c02ba4d14c36772bc1c2412a1856b90cdc6da0b93ae8bc370cbb0c847ccb5", "1175fc3b80ddd5f525b7ce52802c7556dc84f56dc334d4edda3eb757849a67d1", "2f1da7f1baa6049b2a2f7db3fe8d5a416974b26ff42276b967ae40ce374ba238", "142663765465aa86dec8438463bb7d5662211336b2b57be747c1afbcd52fa3e8"), ("0d475cae459a57511fa54153841425103164211f29dd754b2407995b96a61ac8", "1c3738d981415c33bef81e13c7a02c6eaa5c0f3a57d9e60f0a1db4e25ce34c4c", "11edc31d133ba21b564af818e1c3cc4cbbc20a8734903d3e5396fc2b02381f47", "2e37c5e28f0834606f6d3188068a1f7699757b1f3204da5f379466cf8202a6c1"), ("1e5a2369fbe11e9e5685abea5e207431234b944fba6fd3c9041b3f8604eea7d4", "27d2b9b9be1c72d3b0034106adbece3e8fcdecb4e2b2ecdfc502b46b26a987dc", "0cec48f7568ce549649563fe1da327be35b4b38f5f76aacf39fc2fa06eba310b", "24a18022f1c9fb3af70a16573a8006ac463803eaf8eeb295f47808a331fc14fc"), ("07c1533021fb3f3ce67959e65de5f6b5e4a2bd5ad3895452c35ff7c69f228f0b", "0e16ec2ddcae63764f768991d440ce0bdc8aa3f4632cc7f44c6b764670682258", "21464f068c008510d7ccaa8931f062fcab7e9bcbe6a905974771a8a4795346b4", "0d64daade62dbbbfee8a090fc22ffb88316b7130e1e34526688a4be6c6c9768f"), ("17c82728334891c0405134b5455189f11e4f13f7b6ed928f4d337f4c7b5000d5", "1cb9662378b5a5a7cb119bdb550b712150bbf56aa15fbd60073d268c92c3ac3b", "24e7b0a24926d3aaffd9937e09c75ac5c0d945e6029660c7c05f59b86161095a", "214601923f10006b6a26626ce9681ce390410ca7c053491f1e76a951ad3bd150"), ("124c534e3f4eb8cdbaf7c8f2f77195ca4c85da9f7442a8b87a9bd3c2cdccb68e", "1e0473ed722d513ce0f135ff51d2f1afc887a4bad88291785e473a2b612bb9a2", "18a4028ed5b8f7328c604eff2b54d87626b7ad32645bc72a3455be09bbb270e0", "1573b2328c9e26a3a4ae37adf1a41b1d0ac3f866730b742cb9bf4253ea67aed3"), ("15a3a26e67f7fc5acdaa6db84f5c214e6598cc60850651d34f21a6ae967cfa75", "187638c2f2f81a43a9d83100dfc59f23020d0780ee535ff036e60557862aa6bf", "2062e46b9f3220e44f2f3e56e1e5b3094c5c4366a545ad1458bf3bb725658970", "2fdb2a700a87d57791ee4cce585aa7cfdf10d6b99b644e059492f29fed682b73"), ("09d1306cbe94e4161a04a5a265c0b8dd430f4319ff53d804371233831bd96c18", "04d1cfc27f9d1856fad164e92ab17848893133b83cc416f22fa39dd3ddffc68d", "10c28ae35214ee27f67dad15865fff70b2034f43089af51c3937ee3164c8e530", "15d88d26c3ef90340e0fd6907d1f322551453cfdb4e5ccfa611607e23f999e83"), ("1c4d7832bda229f62374f09ef521b1c37cd2395d8efca9d656716026682a07ae", "0d6c3de20be70f48bf4446be01797306c11ab830e032059460855ee7d0808642", "303c8bffa7cd1f59c857c777be0cdb0a98f639fe178ae9de41b1a0612e35162d", "27222d54afb659a63c1ce6227509084db975c93a209e4311e9be10481c9c7ae9"), ("12881e4381a733c077cee5d07d1329650e8e1c31b8b790a286c22280bd2d42ef", "10aa687ba80c33fdaa9d68bb5dd5331f142563e74a63ae3e1271a8f411383e77", "12ef6c5e33cab33109d776771163bbc468916f295ed370358aad43d869a3fee6", "046c88e76d1f16efeb071a4967b61f6cef3b8703cb02dc679d1b516922e2fcfe"), ("1a860a93b344c567c960eeff4a736a566ec7b2205af6632f56199714511de922", "0e1f30946b363c67552c20ad5a30a81871fc69537c87d9b3ff40670c6a12f632", "01da5c2ce9bdb3b6b453e350f651c69bd641ca8beb586297d0d777e4651260a6", "169dcf96df74aa1d67c782a67f8a59b95d1894ee2de9244d865f3532f3fa5ef8"), ("205381c35654b02365b0333c97c7d53c881006558f30b2b0d02d5a46a9769c58", "2e5fd05f8b17d14de6d19e57e6c7a8b0832c9f7a177f8843a46318fa12e0e8fd", "2edfcd191cf0226a576f9efde1ae1bf6b48238aa2f5f0265d891d3e759d3dd21", "25e8ba8ac5e03f866d484278e8e736b2040d7b28da5c2890d976b112eced9011"), ("0b5eda6c42f83b07556b8e5673979e2a2ffbefda171b66e820078b89d5662602", "02f602a9479ac3661c8bd3f9b2493a49263fa55a9e05b5e3ab19bf1c6a12bf92", "17111e94ce7decb295bcaa2e6012e9c61f434723f62cfc641a1b8196567bfc43", "1aad524e2c72d3cd028fafa4570f7e0c700827d8fc811a407d482334c67aa98f"), ("1432f49e44675757fce36b70623d20f048c61d0ae80a465061e7d853dba984cb", "0972ae27224a4d669d4382c2f84ebfdd70fb17a11ec9fc09a6508a73d401c4c0", "11ae05bbf0ca2f3ca8d80845c26a5928f00708323501eb3e855a8fb3441fe471", "0668f647894e53afd104741f80dcf2f2baf9e0c312dbb61b9cf3bd556c3fa3c4"), ("2a52250cf083d3d9a610b77f8606844568b8b5b07d16aeafa1b93969c5ab0b87", "1bf49c4cef0054aef568856b861bfd7992d8df44e4da331e6d7326aedeb41ceb", "28d814e24009d58951438522b2e747c071713dd29540d7b4169feff37f3f7525", "2da30e0aa2323c2323e6d1844c5fe227a38dbe4f11d3b37dffb8c76140645056"), ("1c2b179f92cf310999b9c3abdc485b0cd3d3caa3953d589990579349dffb9900", "132f80c19d4190c46c89f07ae87a034f7e8df8ffd49e76ff9cbfb9ec63769f3c", "0a92b6b36726cbd1b0b02eff1b6be411841d29cd7eeacb8f4213483f3686cb3f", "1cb35af2d3484ebe0c1bddfdc916b45540af7174d032b1cbc8fcc0aa6e48e856"), ("1e91b0f4a7f682791cce2fa4e16b81dff065a3bb9a4c5fdf7435203d00ad5317", "07e11bec58a896183a6203074906ba189a640f561577ff0b86153c6bcab2ad20", "1a2157433e0cc4c6c924b6be013d6f88c54cfbc2dbe543ee0ca7acac4abf4d5e", "03288fef82a3548ca2582d68465747d160c0fd328d86f813fd9702beb7a0486a"), ("152263fcd3c56653522e2d217758c33bcc53c52944a5446908ba5991944ded08", "1c036d26c954cd0173b5a5750af31c0090c02f960aba1aceea0e1261f8a33b04", "1d09fe8d505c8bbbed7ca59c5419a17c2a52eeff7fe5dd1dcfe70ca613c40c26", "112c93cc34a1b0cf38b278ed9ddae7942c3eaee1876ebec331cd0d31bbe978d0"), ("1f77e3975523c1916d85f3713bfa4fa79539ce34f74292a908ef59d840cd0d06", "144b139c5d6073b658c0129710cf112eb707282e5d1712820ac727f6e2e81ec4", "26406b632a5724b4e5441f1cae7467e289d64dd2beb0140b289afdfdbe6db9a6", "16fa9b74728702887a8e9bcd445015973f27e60506c6a35bb749917345f39ead"), ("1e20791d0ea4c5a813ecfa6eb73872b48649ce4a564d397f54be644d8a940f46", "03e52613f6755dcbdcf3cd6d60cb0f10c2742aa94e98d932b3afbc80c40ed93c", "0707edc680045f957a83cd9870ad366cd979c928fdbf434ec7d3b3ac136d4598", "24dd86be1f7d1bbd6005d2739b9d41fb7b6126d5d186ba671c4ae72dd6389703"), ("04ebf5536a7284f2275cfa8e20c097c279a46a37c144770afa49237244fa07c1", "0749b46b67ac3df4ca612a1fe960b7479eb7137b2ea7f63bbff5cab7dca54a21", "1583171247247d9c993394ac4ec2ffb461b3745314fc22e76077f26fc916541b", "2fe92d539d257ea2ea89ac40da6fd90c36a63c6f65390499578c7eae65fcb6f9"), ("09058141fe9296817d1ab529160d9896a093d57f2049e3b70aa7a0298f6bccec", "052ddc3eeacc952ddd36a558e23e155902bd1fdff9f526dc662fe5fa93b54965", "1569013dc76d7ee099a68f53db4b8f474ebca1d69d69a5afd1e0e32b9e6baf14", "0d865bc757a89d8f9fb64737e5bbc9c6caa0ed5b2084c767973e0788ad1b5b02"), ("2f388ece9a82b90fe75cfafc7444cd54f6753a0bf8b74affdc582f287834d14c", "2d62e18a3ec5d46d3b4eb2407c4266480c00ceed8dfe04caceae8f5a0a2e1aca", "0421bd67402fb9f6afd6adbda7eb3ad667f81e5e347e5d2950d4ea8d301004d5", "22cc15ed7e90ac8488038f7add0e65c774ad4ffa280c1cc317c8d374ea834532"), ("2032fc97a0272219c89c7a6d9f92e2817a49641dd780a5ea6cb2d29415416936", "21c5e2c286967bff3275ec136c504b1583e091157dd2436dd3070eed0fb7f75b", "300cadf3d7377fdd53c7d6280451d874edb2a9a053cc93777daecc7c61bf0155", "0be94d672d19eaa7aa019c5160af836ea3ab1a7cc013b7a4a6253e67be81401e"), ("02acc876b0801e5bc339b52821c28f94b8214caec26310cf5aeaae1f2585dfd1", "0628ab4f7e5a98412931d9b986c23b71372cf470afa9cef5d374ca0000235902", "27e27543cef1cdc3829a9e6872266c633a7d199004497bef7af85dadf1243baf", "1cf61e650c2853c9b5c33e0d224d3b763c5ba52cc731cf03dbe869ba566ea34b"), ("0c0343ac25ad964305fe990a4273df973f5a543aa7d58303c041246d16acc29f", "2e6b942dae9b7cb9cdf8a58180da7ec7bb057fd1c7f2fc8a069d31b2fc736389", "1ee9878da2c264ff6c611f869ae0c3dee26b9598facf93c37b1b2fbdd458ab0b", "22159181403b012e758604063a5901f232a98fad8a1d32645489c1799f37d9ca"), ("039a3704db0755a5b0af7cf93e764f565d18d770851361a7b264ab5e4f47961a", "052874fa51e252a087b085b8cdfdfcd56fab5f030119b885a983da960bc24393", "0b42fa787b0c7b34c74d05b7e746ae153c95a66b8d1c3e27425f925e796c7b53", "1402dfd04b5dfe383cd6fa174a9779dbaa1125a1ec4d76291a6b295136235472"), ("2ed851e51f5a465f222519eaef438599d0af8d75b653706c6010de32c1345987", "2bc07a3d5cd70d32407f0f2038131a35a6d9379e212bbe4a7dcf0df3d031565a", "27acf2b1293f8d75963db544cd210c0aa3ec2643002462ed03a35882f38d4305", "0bf360ce946adda57933754ccc9d0ce6ac0c52c75a8e92743da32c05a108934e"), ("0a2f90c5c536d2867eb5873cec03d706195de5ef8598792782e014fc9de488d6", "15e0b5714c9e92d7a5a6eafffbf24fb522786ecd2d215157b35b3dd225b6618a", "1bd7ec393a6da80b5d3e8186aac2714b1b16be7c1a787fba7645de894edd986b", "13c66c8ab31077fe4bbcfc91327f073f20bc1d1f8d06f3d340c142d76677b89b"), ("0c22074f173f1da4fb22dd8a755a1e251ee7705b8c9a8486fcdf208699b79537", "0f668e22e45472e46d75d0778abf81207b28f22f64a56e2c3b9a68a42de72003", "0870beea1cba3e4058acb412385d0965c0a382b34012763f4d1233fbc915a69b", "1051b3bba7597e1349c3663f96db0d2154b367e445f4a6e8d7d4e8e16a421df4"), ("0aa91816a34901023d37f7ba989299fbc8fee9b0bf66f8d0341191bb52cd86c8", "1b9524e56da9ed61ceabe286696cc1d8a48aa5c51b0ba24a8be6ae2bbf4f2005", "2f13c920ee43d4bc96bea22bda17606e7b17e1c8903e0470f1ce3698ba470995", "1511c26a5df4724a98e58663e6c098890e5172b2839915468cc57f363b279696"), ("07878cae71c39ba4e65974c588e6687335933e6d95fff25be06859baaf79b4eb", "1eb2284ad148095298cac73d3e8c59e4bd38a7da9f8c4ea2f5d265be266011b9", "09a3eb86fc155ddf2831a01a32914918f3b03cd563967aa12a29a19a0a78fb4a", "00647fdf9812e221ad3459de2785392e29ebbc1e14e105ad39eae11b87af972f"), ("11134450390f411d1f4f79f84880d7a89252ec9e42365e84afe70c3b0de72b88", "2702801c886412f0141085e62cac024a53ba6f9748ceed3b6c1e3e93e8f181a8", "105ffffcf3663b59f531feb8b790d97ff5cf91c8fd21cbce4b8e0f7783e557ca", "24acdd2bb462f3ab8ac0e31580a0ee3eca0958b203359804c2954cbb4d5680b3"), ("2e35b73749397dd505eddb46fd0b1ee7c25b965b7986a063628ef88eb7922cf4", "19839f4d1011770f8415465f4c38bf34f8ce8a7ebd154a51c794e3b308343b8f", "2bf22294591947af57c4d85339bbaf805aac1a61792d0e53cf30a900036c00ed", "29a048fd0f0ff9740b4ba9e07e7c02d7e934e2f2a3c9f07225d7fb3503a07a41"), ("0e4c34282f3ccd6bc8ae46efe3e9a62de22647ccdd86124cf5271500296c002c", "29ec56446f6f0c5cd9174412f97613fac5fb7bc68e55d64334b929f95e19d230", "1f6ecafa56e9ad00f4ad8e584d3d42ddbab4a7f91c2efd3ed7c983728fc9575e", "0c6c17c3e91f0dfd24adb4a25b1ca2f86e9ab74bcbf5de8cb3a55dfbb3372a95"), ("150f297db9a2b82f25e808bd162eb01ff6fb0e83d95ae0f45f3111cccf02f391", "19b3ed5ecc29d3205a692c6c931e9aaba1f716ea95dae11937fce381dbd4396b", "2017a8f7a17481ca1facc964a0f9c6da78881a8071dfd8831bf1ba9295d9f303", "09ba1effee43976c1439ba34a04f928c1c8c68bebf9f2cafb96c4b56bacc4e7b"), ("2a13505f849c89690342883b8a01e7e37474f278f787e2c74683dd43a940125a", "07a560d668b71a255cdece3e1a12caacae0c0ef0a02a8e96009a9316ca25eb98", "11b606c1ef519ad44051fd5fd7a9dd7d1e213609fe2d3c7e5da215e0571823d1", "2fdbdfcac734829e44b8acde194580534417b8543ffe1e87859adeb4174ca5a5"), ("1203328cb2919fdadc49daa382a22dc0fd6d46b157bc4ebffc76869049637222", "0c8715b88eede2f0c1390c78a367279d1e859f10d9cebc2029f8b112dfe2d1ad", "139068754a097c4aca23da7a06847c406299e878e5096699b6a5af396abe354c", "04193f1311e05f41a273fac20c831d2ab65d7ee4f7ca6232fbe464b7f75d6cc1"), ("2ceb79ed4f7f8d48f7db86a686ae0a3491cb95af0174edbcfe6c071be5efd7df", "2e2ea0dff266fadfb6a57ca777e5f97de8eaec179f1f99fe05bc6460740979b4", "236043cb72e55019a0c43a71013f00cabbf5670e9cfe346559a4938d43e6855f", "2f78f77ebbd942b34f15c93e4e055e3f94a179cbb064664f3d2ab594dceb03f2"), ("29b473712bd6ac0d3df01b39da069b6a32f23d707b642dd547c7623ee3c3626e", "151f7ab21616e1de9112121b2059f9b1d1e7a43df5d4b6e1c8008098fdee3d8c", "29c5312d1b0741beaa70b6274d20119c235a379f0ab592015adad6d4d9e6e2e5", "154ad7150cb7485ca5e164fddff17f1154bff9b7faa050e8bd1cc73d216b1ac1"), ("04f6d30b1616b772b8287d395057fef05f2d664e2488dd50e2606706f222821d", "292eaba97dbdeff6890285e7618bbb011acd0249e3f27009991b685127762460", "0062088507f5104204bf67087e9db753f48d8bb2d03f31cad4191203d06ad4e2", "06fbb92a0609c0f6daa4df572e0e00c69d8a8514e119b87568c05dedd58b9ffb"), ("1f53942bfd69b01da675a1cea1021f8f623a5437cb4663fc77a8d062a0d33ac9", "183eaf6168aa4c4133d7a0efcc7458b2a3a213bf59c8db7f6da001432a5dae5f", "235b29f7dce83ba53a77ed527029659c6e596b019f6bcf6641e91f2376781680", "2ecc495b429c23dccae67d696c7658e4f01d4e5ad39e9c3439865147c32a0d8f"), ("11cbcd2717219b781d731e64f33a801e47fded433af0563c9257d97647eaf859", "11fc143ceb5b6ff1d8166dc04ddfca138cd28771ab2f8fca502e8209bc3137d5", "0517d3746d117878b2ba9e3ad1fde68e0f92cb57971fdb3e47da10aa27708c06", "0e8e6f994791396eee31cc19603bccfcae7c6aa414a91b5a9aa3e828bda4b865"), ("1ec93184259bf8ac78b5d94ac878ee05dc29a5d23924451147a7d671ffa30065", "2343993f10f9d518e12802985d89e2252b8499ca316b2e82d84d0c27570df519", "1c5e735b59bb200882f4ce2af6036d26549d95712775308acd521b1528935a16", "088516fd4099033e6acd45f645fc7ce31f7987558929036b973a4e18d31fc5c8"), ("258f46d82750db32571da34c959261752b4273eb0feb0d8c5cb2cff21c54ed85", "216e2581285bf3f38ee947556aafbb20e2f923579acfac3bc7455c6aedf62713", "0ee1343c25a826cf3fa2c7ea71546c51e35bf2da4177348277163a3187bfa45c", "149ab5706ee993d0cb23f8246cc7be9060e3c0564d2dce089ae7fc3f3a400c7e"), ("12594b37e276112f8ababc439b1f28b0fb74bbbb5db148ce608a747da83512d0", "0f6b995c3bb3c15d4d67c95287f56fcf0ae81a68edd7257eb731d8ce38664807", "19f74bb1884ff67e1afcd117200e62b7f3c249eeea4bea5bf8617ead0f8bb6ef", "189cabd3cf37a5a391cdb8a931f4a9257effeb7bc094afed61ded97bf98596b7"), ("1a12031f1cd94e3eace125df8d64a06a77de7ae499748e7f723d72913e20e6a2", "062288b23a3943973da13db8f6c3a2bb96c158a5ae19cfabc69a46f0977364ca", "24327b5af62fa4dc4650282e304155236efe20aad24347d0a2034ba8a984a8af", "14e1600a6b3e605318176a7e1aa734ffd3109368fd5608b2cd1186f83351c46b"), ("0cb6d19338edddacde020c3f07208549bd82732cb62f9d51c6cfa9c1d9bf0ded", "28ac67278dfa7c3af4c5ded62eeebd5df573e9f8298927ccddb94a7d30936bcb", "261bfc0b252aa58c43cf393970826149688933654270d39410952f0afb3f2c58", "05bea31180af877fdd0bde0424c619f52ff48b826bb81f075e70da67979a9b9e"), ("012ba7e6a665c49f99a66dbbca2ce373b1a9cf6ba51b81af8bda594f08591b13", "0ac3050cee80e07b3032d6a0aa9fe38e51ed7ea0043d6d9b48ff3850f61acc03", "192b5a3804df5ac6e64bbfdf2738c748be5110a4993cf9f209d6f9db90e0bba4", "0b467b69b1cdc617887e664e99606e283064e6503aed07389b5d777f8b1321f6"), ("2b7fbf704bb1aa135a2f765daa65f5a6c6856d42fcf8adbe6e1fe49e860f2bd8", "1fed35e638c1351e75eed6d766a35f271f6d5df2eb8ce59f2ebd8434547ed689", "1d26ac5dbebcb54a243ea58a414e9777d3e67eb3634bdc4e3b6a565d4fdb24ea", "2a3146e5663d5a10ffd7a07e6c22c85303e1262ad1e18db89d631a2750ed305f"), ("1d8fac91869c4504db28163c17f69ce47eee811f366b41bfa75704cd05685fb1", "14a0c4739755a0ce788d9e98c515c6ba4ca4d10835ad4f5264ae9791ec758664", "2035bd578a28c7a30987e5eb618245f7d7c4b5d7c3b3d98892396c24d2471a4a", "118e365c692cd75eee33d1d30b73ad378c4b887ffe91c7746e5606daa167a67b"), ("1a5018444f1a6d152a2c796458248381582f384c98f05c9d8900a4bc429b2c45", "076c40b6774b2b870e19993238c05becc5786406b64ab54b7544949a9ab107c1", "2b5998cbb7dba93ff3e48a5d7c021c0b4098d94c78abc7a5629fd8df1701ecb0", "1b032305225a40c795fd7f1de119a08a73cc676162e010366e2361d15824bd69"), ("141220e0d0c4af79d7f4a10e481f1923c616b59320000e56fd3abf325d0816b2", "1a6009c0aed454fe3c6a56723770e710ae35e7275cdea27163cbbf3385adb726", "092de773bafde489a343f77db5e7df4d1beb5b43bf275a30c24b4dd14666d379", "26e86275294f10ffc5a75a4c6292980dd690853835978b40baf4b4a4522768a6"), ("3014e86c1288f23878298f83deca9c72f0adb7fa4f497effaf526b00b7e97c67", "2f2de33e97ed86f088b4f0ac26daa87156a7e8c5bb307754c8fbb81d383cb26c", "11a979a3bc4a2c1977d37e25a9de89e0b8955c60e85317964e6e7c6459a674e0", "27393e0a7cf2b13204051e3548ca61170f327594561da39d0edf6af8b964f8bd"), ("23bf26b6daa8b20575f04b2b13ea1fc918d9ed5a582ef2bc3672be64a0068daf", "029194b77e6ec7bc81e449ae8cd87dfc1f674080af3a5e762301488bd78fd87d", "1c5270dd84f8bd9766a6c0cc032fc7d2484edc9fe2375e2640f34d595a1fda10", "0fecfcc14c7dea5e0654b1e40a6089c733e539534151e528d5caa84e9feb5b21"), ("037de28dafe202a1147d4210c2cdf0430de0fe6c5a005f2682d48b5de70db5c3", "0146e9bbd7e0575f67c120ba889e475ff644bcf0e64c02690e8f6af16627ee74", "1c74a8d3a85ffc8c7a5054255de0a6ca2aceb6eb6bf63c32e312a69f7744d6fa", "2c71341b00a17dbdc2e04abe0e8de3892e723fcf54ad790dd511a8e4b4779db2"), ("273a82637211d8376c64a83edb3e53cabc0fd38bf8b31dc38e02dc43c13876e6", "053a21ffbea1763c545b16800e63245dfa2b3fd95b883b28aac290d03aea3f7a", "0f22a17e1a0f095053673b46af25f99c41a7d6548219bdee578f0bc17f3ee25d", "27a46c743581ad3cc656ad7a10508f1e5ade6e9bf73d0cbf599f9401bf778361"), ("093767ab04947136d5b157bd6abab708663e59bc91ab5cbfff48f108f607e73f", "1d837160eec2a46984a02bf24d1350d7a9cd1bbb799dad0258827af8052789cf", "1290b58c6ef0e6941aa31bb6bfe44a3095f7557331d258b4ed3fe8d7784a3738", "0ea2c5ea00e4bc3868f6dadbf023917a8ef55038498cd611b22c7290ecadf88a"), ("256cc0a702fed3ff915dc433a195f9c27123f69cad1ed1d67f20851ee286aa6f", "0f6c14818ea0225b105ad66a3b3e6f9e74953c7ce70123c2d1930c9a14b73036", "0b2303ed608597ba64d7d9c0038e09c6de42320c3916f29fd415f96b1f17824f", "2667840c9112a00674701332471d966d6b4861717a8d422d92156de624ca750b"), ("0dfdf644ad1ec0a6da88be448827f2eb8922030bbac386485fb493cdd8020916", "2e5effcd36dd4483ec9e7d3d6f09e7b386edcac22627ed6e516e967806a8d4aa", "2c4e26240461eaf945546831c892aa16baa5ba37a72755564e68df7cc84de77e", "091776633c0f669b2d4ef79798f2a6cc549820d2871e98175c2743c81ed5258f"), ("22d62d384a0776fcfb0518d23cd251c9675dbb60b15c3f5ebdcd6cc55c2765c0", "16ea99003878bb7b68dc4cd35c81deb8807afa92bb11f11574e6eba83572a92f", "03b5adf86949cf4b2a9d15b5ea0a7165cdfae33d9c2b48e9ace0592a49b114fa", "0744b5eeb73ac1458e74ebed7789f3b273ceafdf0d55f01804abf37a034645b6"), ("276ff2fd792bb1c8162764ea055d91613bc7d90088f9888da62264281db170b7", "15ed7fc993c11d29e5b99670926d3f43a60df1301d1faac73cb75f6c7a895543", "108e76676028d50b1be58a67d2d10d586bacaa80d8b48974e53715804703f425", "0de06603f981adba12dc2d9827f92fd3096864a365360f965bf80416876f5da0"), ("2d7d686e77106daa8a400078e95ea118b2a99c20bc3bb8e9469cd6414c82475d", "2a0aa3e602b9b749ef5068884019f601ffb5a6af901df673fcc64a42a032e2ba", "11d1b01b6b17a4136427f230b88a171a10a8dc527fd440970d6494dce1ae2f97", "03734fa0bdeee634c02e1fed963856d98b2e8e9ad53d942a08a184977440b74a"), ("2eedbe581bc8195bb0839a6606ac27fa24547f6527c2385e4e033d78ffca7fb2", "21f532ba31f7b9848278d2d9e289801b0d4e0695b227fe9598ebb7780978253f", "0141db6b3d381a10a1597f79b81c3f8ee0da2c7dbcd7886ed9be3f7082f8b9c9", "18dc19a9dbd09424bb46a2b0cea4de828a6e6759fb838aa997722c0fa2dc52e6"), ("06098b24c994d93b98761ce32b26e9f13b81f1f7de25d2afaa4d5da266ee1641", "274c38a2288ca39c0b7557ce6af172353a3f191ae8baa56f886d5e8bed018417", "12afbd89f743aa93798a97244e3a1aabccb6b2a7fbf7d96557ddda4dd0a3218c", "2738e0b96357808f312f207f191960ff043234872e9cf92f883e5a527064feb2"), ("25b30fac2d4200a00003534bc7ed20b9ad47d7d99e8c6752ec2a1e22225eca9e", "277c18d93baeb2b7ca28ee27340e7722e58858a512513a2626b2183e69c868cd", "1631e81bd756f9c52dddfb6c626c3465de583b0a6c27103888e9919efdcbe80c", "1995d5b6817a2451ae74d3552ee0974e6a1ace74f41081ea795cc28fc035a150"), ("112d75d9bec76ced1da3ae37dcdfcb809ac1509611d312742caa8edc5e41fb72", "1bb6e4df09f13634f5940260f47dbf251c7243baba780a42e16d584dfe799400", "1a94d67a21a0a9c01705866f184256e1e140ab9a93fef20ee3ac2ee8986499aa", "151c8de9e514461cf3d6a8de9a18198a949a8dbfc6733703633c0db948e7bdb8"), ("0a356119b96057b489ad7e84268b2214875a469172fd4cc5b1a639d3d5159dce", "2da32c7acf242fdaefcd5d0c382a6d33e67d2408c689749c712d3ef25a6f4208", "234d38265ed573b2d52ecc16f3c6aeb428a832795f9ad8bcee068db3f982194c", "241dc0426bc78309067aa286a36a15cac47a4a7e05ab61a536b040cb25277a7d"), ("14f76cdd40eaf351c727b75168ee32b4b4b1d679f0ece88b0eb217c297d0331b", "005c2a85b3b4d5cdf1f3fbbe43907e7b077fcd311d9171d54ade82968769b4ec", "0c2a08f5e2e07014df84ee39d2a6f94ec4c150d777ca5e208c03dc854e219871", "1212a45db112b42e57f2e648566f82714ebd3be48d739276c839de78be5ed6da"), ("05d86acac2d82621db0ca3c5e51ee67beca9be7c977e51b9caec913ca89ffc17", "27727eeaecf76833c44f6f19bc232087d173e4d035293705678d81d4625abec7", "288093fabfb10dd2a8d10cc2aef5180331e0fc071be1e96adfca2749d657a47c", "0004ddd37e21676fa6e9154d060ee4d83c64f644a26cd266f5d15307df455247"), ("02841cb3900aeaeddc5dd2b79f5d5819df90aa1f56deb44e8df0ba0dca8d484f", "0dd156affa458e5f0682bc7755dacc687772270311ad529bbe5b3a253d3d9e8b", "0a4ce3ae1a9c92fe3559c7569d700626cfa186d76e4826ead43ebcb6e8e34590", "03b78f7e5e8e037d92fdeee4e6f10778d327081e820e17c9e7526641da4c0bf1"), ("1668c4be3177a7d9ecc3c4097bf772ff27db10e10128d6ed1fcef4e1507c5a1a", "18dbf7b39a3c9649a22eb780628455ff6776567f4f907c7ad0b3a0845efd3899", "20254f1793f63c3eb4c7c65dedb2a89b99d97ecf1bf2230285626deda885297f", "21d29ee67af7f2b69ff2d3f43eaa4070edb870af6940fad0fd89a43ca06d3616"), ("0f5c60db13784e05cca2a465edb2622c9f9efe5cebbeef4f28114df99878d426", "1d4f23b0e57aed1aca3e0ff8b1f7355eb1c88c807d8a495a4a21d22291415371", "0e58cedccc414ee39a2bb5d78abe24197ff9c5346f67419273b81aa0e82d32cf", "1461b0186ba7c2f99fcd109389f28ec33c85ec2f2c24a7a89cf50228537a942c"), ("06e6fbbb49e39905fed64f6917585cb3bbb7ab99086d327bd273f4c7e71eabeb", "2dcb38b699a1d9eaa550506b29ca0286cf140b9ec105a1a274bf0d1f55b647e2", "056b1d67fb86a834a2db2f855e5a46c4819b0d366fd8f378ddc283b458d65928", "06b5184bd8e798d74f4aba85925508b65df7d95e35870861c89d786e4d58cd84"), ("0b2dfbc6da2a06868edf38cd8b11ca222e0452bbd1624404e7ecc49adcc197b3", "29debfc06d462f6fef3e0e439db1121009f0493c00825f39cfdd53a7f93cf4be", "031edabb88141534521bc7c1af8764482087a26c956d938ff77969fe3d524ca9", "13b2728423c6acce820021d9f04db9bd83514f5b7bd90e461e4257a6d77a80d7"), ("0c61a6b214644b0e6f2e572ba68e67dfdfdd3d75516bbb63116a644db96abe38", "238f7e36a31a11a3b2d66ac9c83c93938201952495437975169c0707c951ab7c", "1f651911eb24eeb87dd553d8fbd6ead7426b46abbe77a1ba0fe121418c37a0b2", "1bc809875f515d3b795d039adc8b0e93b588be9e7eb0ea25e55168935062788c"), ("22816cca476694dd0aab68763e3086170606172fcb00ee14c250043ce647795c", "1fcde57450f1be0ecfa4c89c981fc7280cd83d462d693e77e7c7559d5ec2d0d0", "0a7c28cc1437003a42c7c9b522205b852014d47b78bd6c1f45d0715b8616b4fa", "1439145a4a4dd8c754bbdca19e04cd224b1264aa11f8cefdf9b5e80b12dc4de3"), ("2bd766c1d6b6c8f0eb78c29b7d93b6cb3fa42728182e38fbee2d4c708ab805a9", "04ee1bd634646669fbf68226cd4c0f776b75f57fec4e97193f2f558d635350fc", "0e11c35f9ef9bac8653f0cd410e96457d926b7f1787554259b824288b762b6fa", "080f1026661a6b5581fa6bdffc100ecd064a1a928ba29444b3d44d3ca716ee98"), ("0e19df4fa287dbadcf293b906e21b4944eae241f4dce5f241200b86e53c47761", "064c2c73d9d11329a1223fdc3256ad4926124c7050059d0bf96f8d187852dcff", "163069f1a0f9ac1a48883aaf87a83743cee5cfc8aa4b4eff9e24b11507a636ec", "1e478ba164ba997c3f0c80e2311a66df8e429880a9f2565d8d73abefbf420050"), ("2319c89b0e0464471b795e2a40d5d47c35800f9fa273491ac9f351de8ca00950", "2e80df0c46e590c8d5c12475b28b3acffc8a9c76f802691b76f1af81f0971c8f", "1163a40bbb8e757e7a88d7208a70eb01016fda9a0f8ab0bdc2bbd2ea4ba9613e", "29e099801f620d7ef99fa974ec69e6e2099e6827d82ff765759dbdca21513e07"), ("13ddd47c4fa4042f8bde7f5f4cb0e65e0985b52a9d0b121d569c3223328300ab", "297a8050442d78ac72ea0eca1226e0ebd843e48d220ce3c4854ae73f3ee4d2f3", "005757fd7f63bccf3c6a45d1e38adb25722baa8dd57c03a33e1d1ba83a68a28d", "163b72a48b03eb65041a69d341d532f7ed35eb69bb783791bd5a45b4f0c91cbd"), ("17122e9fbe12b1e9033eeb81b365b7c7851ba3afbf138c0d86f2565091688ae3", "255f7b2957144fdcfea36845adf71a94721cc7af931b921c412b2d627e17614c", "020efe00ccfe8ea82b858215de4740885e15f123ad7779df1eecf22a2b2593fa", "2df165b14f405c60a0fd45a05f603efec900ddef7c80e783641d8fa56093fff4"), ("0b18ce2d2657986bd36dc63ada66c09005c882ef129db39dee2a0ccba5782475", "10aca2b0f86d09643f3e64df55e522796f2e81a568e6c9df5fc178c4136ae1f5", "1d7498f4090b36824f7cd34ab0762df932cc1a40eaee3f2b6cf46de28d62b95d", "2a796de98485b2d3aee8aa82c610d97362c07b8bc3972aca0f3b4f9642296ff1"), ("2e250973efcfa968fdf3551220c29a2e14c87940b1854f6ad57a36f2c8a6fefb", "02ae0283d6e4340dfb80775025d8dd383b504bf525dbc7a4bcd756f82fe01f4b", "1bdfcc6189d8e51b1c552b482be13d24b61e2e7a194af4ab38d43d1eda66486e", "173d4e46dd64df15b88c78aae216908934ee60377ceac91db8762fad7fc89097"), ("23b956c8883a10b5ff9aca6d9efa8ea139d501bc0cac2869f4ccee0bc9bba258", "0a81df4e1209e2d14e4a36d72c71bb403e0a438e59834a704015f5cdf0f35fa2", "29372b52847f55818e6e04ecfa97df7fe9351ba5c4fd37fb48b8d5f81d061d95", "01abfca3a05b6fabe237160440c6ad8f2ed3c472b64a89e60e3ef3ffeb00d2d6"), ("29204e61fa7bf3e70458a578f5d57a5e82f53708cd3b8c781d1e6c3b83f90f91", "106246b2ab6deba46da8f1636c5f93df101e07d54d0767edcf06bf12c4e98536", "2486218a3417ac5fcea29728b0727546d3a2e74d3ac562c7ae9314902e0c4d31", "095d8f17a0182eb6aa8ebbb4cd78aaeea6a4ffca1ddfc189944023c6319dd681"), ("2c1bf7c6eaa53f5379defcfe9b1017365c2d2bd30f913776d9392f398fbadd93", "2574e13682b53c80f9f2aa9f46f1bd76f8d3ef1c02116c965346d501be83df35", "037453b85609ee9bd5cd14b95c76516788adefd1ec92ecd26ec903a6c64c3379", "1a4f9f025f0369fd9133070b377996085ea9d0df5872654e3bbbaaa632f8e259"), ("24209366ddb4ab4ab7cc0729367473d4a7db626b1bc301cafe22dc2925261aee", "2d155e0fa0b8c2af153c4a5bf79df6f6dfcafd000d80c4acc55008733a70541e", "13cacafa9b08ede8153c297b063d87a1e52292a07ffca968fffb8d024963539b", "1b11438b222cac3619ea2808bd76191581993c140653da74fdf19ba0c500532d"), ("1d6bd369280c982539576b9d175cb522e035dcfaee122fe661e527e84ecb9c0a", "130e1e8f7ecac3ea2dc5082bfb8621f7c88da90ff714ecb3e77402bb57b1c63f", "1e33215defd9d51af1e578bf01aa4be926c402749e48a6122deba6044c1e9bcd", "24517b2dc1eb89915e1f7d701990b68a4865d4ef3ab160d584314fdaed232da5"), ("12cbf642cdfada88db1e2f8815bcfb32d52dc4cd5d3d126999d2847087b8b9ec", "2812fde80ce997da2378c5568ba81d5d33da8031b27d40a9bfbcad2c43077974", "05d15cf7fe3202b0375183ffec5002c6c9aacb0888e7b4e2b31f44a39da46b84", "2056a0c87350757926a9fce6973b334ae03a4e9bc38ac35bb62840c7c32dd24c"), ("0ad7cf4b8f361262b1a157a55379ec736b0e2df289efd3207d9dab105663a9b0", "0aeb3b7f0d40880d4b357878ed0447434b6538026910d0d290c92dc3e61af56c", "040608d6544b658e2dcd9b09a8071aca3a6f5942db7dd6fddc6f1eca00356e52", "286a0ee8be27dd660d486f6355af2dbdc1cb33f067dc86c571ef1dfb9fd1aa8d"), ("2315a211e6bf6fffcebde53dea363e505afd54b49bae88a923799c537c28235f", "0bfcbf9d02597386cdefe25a91466528ea3d8f53169940a70e6811acd9889207", "2ba90dfecfe490cbefa556e16a6049049b1f423797511a1920cd9dceeaeb6ccf", "00957f00f368c37d1636618495ec499d33331a12128e52a881eaa8af3acec2dd"), ("046601d0f9e3259fb4166ef0da22094a74e679fc4c17140002aba1aacc719030", "156be1b04b544aa6d1e5bef372fb18bc5ced0289b25312cb7121c3aa26b28a1b", "0b25c058a3a6bee757188f52e89a9f8fc89990678b1b52172c498c5d7551477b", "1458e4b46e2f27640dea6ab8a648a7ff0d62fd2585d0cf635757685ab6a89231"), ("0f9a1c8d7bde262cc28426347ce58df43a713ef90ddf5036f5b08a635914510d", "0b51af9b6f5b261344f4649e4562189d70e6a91f3464a773ab11cf52c653ac6e", "1d0e5d33fbdffd58883c9c291021013161289df08d280d5eaa8d9205277d7aec", "141058449b4ec9cd53a3bce0cf97d929b931584db4ef207224ddf13e9a7cdc25"), ("10f7bb3ef192213cec49255d56f3550a91e898addbb814842d447a61b5bacb2f", "299d123d5473490cdb91d337f9035430bf92f68ef123e2ec134ba582ba5329d2", "2bc8cd28fc8e6b8a2333f428db29810bab240240414d8be8e427f5d84c6528c8", "2359ad03874beb5670833313058935e48443fe49e234521de4f7f176ca301bab"), ("2f974b3e9ec5bd919e6f8840cbaee7bf96eaed0852df668982ff7c864b61e6fe", "267f93671ced06a642a4b8f0ab6cb2d53003dc06a4d1f0df25e8cef51699884f", "1993e296725a36f569a62158a9c356fabfba965c6c38144f642d31574a3c8d16", "195f3adc0d5ad0b2a6f7ef68e4c44db5d7f5f9291744afa80a0a6006ad41b9b2"), ("153d3b33cc7ea9c7fa3ec3da305e8c5887c2c2e723cbe049557a05326eaed267", "1f35bd3e97b856c1e4d50b4977021f9e3766a60dac9dac56b413871327a64733", "2c546abacb07b2a126002e53c62c12580733035e5924ac636ee1666d4695e617", "018fe85a7a256a056cbc5b5f393f8322467892e7e5ab94178afd48adb086133f"), ("167e8ba64247fd0e19cc423affa9672d70d7be1bdfdb274235731eb036994b4a", "0919259342af65f17e2fc97c062545dc0b629233da8da5000512c8c47d038f37", "2ce9f591033780e35f87583be9706542ceab8004b5c94da40413acbd44110558", "2bb64b7b5ffb41c4056ef3fdbc0d843effb185cc3f5bc6cb5a52b4a7c815bd22"), ("1297416d42bd529bf3b1429d060fb2c3937b85fcad6cc9fc0264387ef94509a5", "2d09faa65707fa0777a38e0783f057acc51bd592c53ccbed4727156f515593c7", "092fe8abe102a3505b31f5644ea94eb0be5c05d3fa864215bddaf26abc22aab7", "266216761bb0fefa2e97186501cd7a15a20ed4fba0e0a6993c897b6db953b7e6"), ("291a4750c542b8d5394c1d6089fb52fffa092f18e7f45034ea370446878bf45c", "0927a0e9b083c1249fed65b4bdbb8ac322ebd0d37d27efdfbae3dad5602b0b62", "2be992ca7a4666d513e5b4098da27951ff7640d0edb28b4b9b1fbda3439a779e", "0fa2ad263d077fc187a2ad2bdf836714a623613714ff5cc4cda484d7dc98eafa"), ("2535352db8a203fb28399f5e7479e9ad425002c343bf58dec53a382bbca899fa", "137339f6d2d6573bb3c8086e8a1d7028a767a8307ded141c53aaeb52fae776c8", "1c2d62e17b6dd79702e5abad58e18c8379851fdedac792e189fd214bed5b97a2", "14de8b871d537946b746417201f6dd16df730f1eabb32f7f974d76d397cac5f6"), ("0616242a55f7fba486c96c588e90560de9bb54b6754b10587a72605a83bcd600", "158ec64f64b01b49cacf9d60392d9c29fc87e99e65a24c7ec7c5f9d77f7e3a24", "16bae06728294a199c93551526547f12c60aa4410fe33c6a06d54f62631daf64", "100739f891543a0fd4b5b8c738e4995e388779c5cbb06c7a0fb684d6d8bee532"), ("1864035d8ac663e0b8411ef41d998029b4a13749f8b1b562b2110dd76f6ead54", "17bfd47d7352c62eec4014c7c540824731214abe270bd82981873199a6f3501b", "0ec4ee125feb0a7c4b3e950547984b60afb5205c60b492657b1d9d1dc2cd9e16", "24690018d79d9dbd4b11393f4940ac7c9f263dd932613cc8b7112cb6f550e06e"), ("09bb1f43d87dd41e960dec0d5e68a339de7398310ffd56b9c5d03cd57c2f14f7", "255758250b7776b25758c787ba752205ccd1bd98d23287cf06597df66a3ec557", "211c7eda01a98fa9e2c5ad780c4a3e5495de2826dbd68f3492848e872d2dc29b", "104aafcc36c0967cd01319ed9d1842f344d1b2a6aac7a081b16768768ab45067"), ("15b2113ff36202c1ff78d90e26d68846e989eb6e470e1e1b4135f02959f173e9", "05e101a38beed11cfe6262850ee468360b95608a623c2d42149e2e46700a913e", "17d980a75073c9f5a8a0e5df1877a1ebe945bd890bb17949b3902c773cd0ce91", "18db710b5e5f52c2500bbe006c40108d28d30e8eade3a3bbac934e3c07ed80cb"), ("26dbdcd43bf9621384e49e276ad5edacd265bccfda793264b1ab9e5aba1932a2", "03a2899e0a51b65fff1052d6d28adbd653134341cba9375cef23fca63dd116a7", "2a6751236ebab475e53a94558dc873844e9a22b3431beb2ad9df5650a6f4839d", "1a08c363ba7fe2c26c13669a1a40ee4c33bae2d06ed474f87b2f0443ea7d9a0a"), ("22d8f7efdfdb0651df24c07b5c204cb7de73848f9d14a81c9f9d16bf5b54aab9", "2b17a48dcbc457e22591d94f0fb06b47cad119ec655fcb7e1c31f815634270c5", "173257ae727f7a524246e2618b74ec181583f4311797207fab7331370a7c8536", "0437927e65bf1a63bbdd2b3fbbb98f2cf86926477e7991133e240158224fc0be"), ("18054c530869dff73277debd1374c6796c43f9dc37e7855afda99df4db2992e4", "09ccbeb4d16faec7c217ada0e70ad90e7efcf5dacde82683041e5fa2bdea6eb8", "034038908a238871c955cdbd325dc0319d05b66fb43fcf7f963ebb6cf9127155", "202f6a84d0e133ecf0c071fe6e393df91b96cd8f15899c0a1577288cb1ea0f20"), ("024ec59a69dbcea93157735de7f1d704b12dc5d6ace039d9976126ab67e4bb89", "2afb2181f54d99fd40c80e5b55a322bd513b029eb873d0d8129ddb6d72de05a9", "2b7a6b8a2af002ad6d773cacc5dfb721e5978fdea14e78ecb4d942a682a149c4", "02b3cc591ea7cec5feda2b2b4cc54214addc7af54bbef17abdc23ab38b1340b8"), ("2b4a5f1a8f8dae618591b6b404ae68d81088e8a73b3f74e418e76b2435f9b54d", "0b99c2a8de60a36b77bc066ef11a63aa290a78fc94b14f9c3af1f8a2c32d9724", "1563850acd4eeed2a1e48a605a4554e7c2a9784ebf6ced3b6948844449825926", "20ff2303e0f02c9c6f6f7e3355be34bd175fc262012fdd4365abb94426ae1e99"), ("01261929e0fa0e95a2537c1000009c0832f1821bbdef3ef3e94dac14567e9112", "20c1252d817f0ca24003df7b249f8400b0191acfe2d45eb8a3dcdfbecc5f5828", "200bf9f8d5b3595f71457f5533a38c20954857b1fc598a8f32c35574e91b19ce", "14cb76a083d4281609e5e30525b169144e55a244114b802654d7fd80737e4ece"), ("1a64e31a5bdec1209fbb6057e6956c7f116ed07ac7b1832ac093d093748053b7", "230d3f198eb86762326cf7120ee09590c431890d085576c6d8b978da326d60c1", "1a0f78daf0cc6e39e65a3f19a2190b33cedaba7cde272663e81f8374c87337f5", "03388516a211deb3c29382403f8da6ebdd3885de6733011086660e52c62fe125"), ("025613ce2a8b7b9f9920470ed5fe5cbebaabbed76d5463e3d3010db7c6589c22", "07286adece1c6b61efcb609c5822d9af84201500f7aa6bfc4d4bd6676c94a9ed", "0e4adfad7fd29d7b4ff3668c4214b8899e396bbec0ef21132bf0d9c9bfbfdb1a", "250acf2f410ab6be14da36b612b5909529c0ff7662a36aae43484375a7de5f55"), ("17ab2bca17a1a13fcc7e9fae474620505fff227d7d6a592630b21e372bdbc42a", "1aaef316aca7d08589f5ed0e1abc7d52d31fa88a791c2ddc046d73438000b92f", "108979e4a68c23903b2947be9ee9171ca3d614d352f8d22d50bbe233f9463c6c", "19863b8e75bd544bee7aeb6db39e18cf6f9773a40837ec1a64ad04d1b459f3d6"), ("178a4956f46270499520d937b62b83dd35ebfef8655b5f2d82c6ab761f93940f", "0faf9dd56198722b0f4a8278e2f5fd37807152acc579c81c0423339171c4dbd4", "2705bc87140147245e4459383a375ddda521dfbfe14226bd08296ae0e5c0506d", "030ea95eb07da2073ea326e8f4c09c506e91e3670d4383cf22a60703221defee"), ("19cbf408e73c99418199f34eaf32272ea56d6a946b1ab2686a739c76faec3470", "06fabad258b23e8194eedf5111362474a2778918ea28fcf479d8ce873fa08303", "1ffdd6688dff0a1a18276198e6b226df1dc16aa04b383f26d955eab078a5451a", "277cac259b81dba9d482b8a8203c889c6830524b3cf65bbf24aa39d0aed260dd"), ("034d442ba8ebb7f1725d1a2edde5e8796221f771b0bbdd65c28d95b2c675ddae", "0bada02b77006d76973262b7f51add82679b5f402b1117e54124306ba1668860", "1c830c71cdf4b85fd315843696d75e4b69a71dd9fbbc303407988d902d22c2cb", "233528bc5c816314634f25c99cf53c13e04a005d76fd1c313c5f8b9f075d4c73"), ("13c8241b27760aa33d2d9862acafb9b26984dca41671259b7226a9dcbc40a357", "1d597601f4e66a89d718fbcfda6b88125af0647ff32c86a6aa88adef8fce204f", "065b7c046965e388d887074254228e67c694db4760c3350f0616946b83248804", "0c3efe0cf301c786cd3ee8fb4f82ebc1363313334d077256a8ee150cf3a1fcf6"), ("065e3167b6757b00dda49c3304f4479529c37f9f3f3204a547d3107a59c1668c", "1968bd4edc900106f2e22e0336c422cc5c610e78ec5793461fae5ab8bd9ecc1b", "174015de1f22d1a7d960fba3bd84ebd5e56e094b011812e4c02c7ca3501b930e", "2249c3c2af5fdf84523dd8c38830191a149694f3b09797671d78bedccb6f94f7"), ("120f5cd9535b105008134ddd93233046c262bcc8cffbba64dd3ae280264b9352", "2c2356a88eb441c351fa9eff5cf6371d48949bf90b36098b762a9f3a6962e663", "0a8c5e6865cb330bad370e3cbdac6e2ad585d00da68d93bedeb06a050c316d41", "2cbabcd3b14e97db5c73263d14a61d17e7a6fbfb3f244e3fcced75aee43b5595"), ("0060aff4025dd034f1bc45720e0f5b0d2d44f7c2338c6a25cb9d8c1120e2089a", "2d10a65033efbdfa3f296d3f9a8cef268294a79b951a5d6c63c475e6c1b0cb2f", "1b353ac3a4d584708728b4630774ae075e6ce77d7ed60ff422287f7b2cb7b8fd", "1aff901158b4754c55447aa69071d12c246660940a7901227b1f2796baa332e8"), ("132b2df0a05f2a69cdbcc78d6e061fbc169589f7ee25d187edc0289659878787", "0a8dbedda5293d0487a9335338496d97c8526b2840837af27850bd7728d75684", "24a247dc359910bfc295515c1fc11a98be441130e3850e4b22e39299566d940a", "14090a0e4ea8b8c6d1f794d251a42b5ffdb8c0d6b75ca0258736f2247fefce19"), ("11c50cf04edf7b6f8825b9cd38511381fa2457a96c264bbddbbc869c8747caac", "0f8a1dfb8e5af2da70eabfb0293704d16bccee63215fa931eba17b1294b76583", "278ff34becbd4395cf5fdd25806e35ff7418e42e7aa3b9df8c1e90ba1ff66334", "1c7a7751ba6fa8ed9276042d0939eaae45b07aa725a4e07a9b0f0625f0e13e7b"), ("0d5693a84275b4cad44b99d3f4aedce2e74b4e0330992ee94af1ec92ed28a43a", "2ddf3817d041ada5456cd2889f364c8190d25737ea177e5ee2d92a9579134c05", "2923c11f18aa13e713e2bf2ca310007a5f8f9b184d2651878c24382635664a7d", "2a7fd47fe19bd37dda7a892943fb70d87cfdb53360c03cfec1d2143f71e1991c"), ("1bc1544031f27f619596edc35fd569bce132a2dce754df36df181851685b6c05", "26706fc9314051b91862532cf98749be9e213b61d6a822c23d072261a00117f8", "16cdcec7c0294c644ed7fc782f937aba3fd565f47eca2ab20b1cda16106d6467", "0207e0b6d094ced19d26a6a29e6af0b0f6c1c71fd509638f628bd6edfbd0300c"), ("10c23b22ee14031f1b9ce3f8deab2feb090cf888ae619f814f9951076d76d498", "2afaf3010d6b07833e395cd83c5651992f73d412c9452283319f337d137f446b", "0151e020fe98a6300e90463cbcffe8eb0e9417bd5d20cfad23d056627f94cc7b", "1ca29d2924d14b144cb3cb62533e8aa440685e5de38df7950ed6aad966bdf971"), ("26000f86602e9ffb2aa2527be820a68016ad2f9ad1c6d68dd61c565d212844c2", "1994fa01388b13adc437d903822849fe5119df1d9e34854057d2ded92365aac1", "15b7ced7c0196e7509ef42bea9b92cefbdb80b2243398e4847853c71d4eb05d2", "0efac8205c79d77534175da526f258e946bdd223588dd33755f22d3bb7d38c75"), ("272e9037b5013475d234711472c6c2178a55ca2ba831c3ce03ba3e3398766e93", "227c51bfec30930b1972ff1735986917bd7dd43c1e9f84a56b0a2b21c6f006ec", "05d287fe04d4ab2f43f1d904f7c1d59a7dd1d4c56307c628fcea97e961cb2238", "0f459825d9829c2f2c86bf253c24e450c976a047f53ca959f06fbb645fedcee7"), ("1bafde7cfcb6fe01dae543f69a1e6dbeed1ee6555d123bb7ef930997df12719c", "252bc334a055576732116a21cd798c67468ca65540080c86c20cd0eb73a2cc9f", "1f114241c6c4b023979dee328f47a62a8724cbc18631a2024215533db5e2b538", "11ac9bc4bb55010a2b4fc35fe0d4fb914f33710accd25eccd40bfcd3c5194ef2"), ("0ae47c18dbb9fb4a98e227fd10f35126c3c8f9b2a0e28fb3ef9638753e3de544", "2d1e46eb7df538ed1ad88ecafab418648ae857059fe39dab001d9d80287aa715", "20aba8c3d701ca1079013666bfaa9b55e4568a5c93334eea9371852402467025", "12f9d5619041749e9d44189d31f407aa2a464b272bc01652d6baacee57ded342"), ("2c1ddffd1f33e6aa8b16485717e27ab1edcb9afd447198ca30b557f94590ee16", "1a7c503a92e1a9777d761a1c1a0ab3ec979f5d5ce77bea61fda23cf0ceb4ed54", "0d0eba43eafc4c58fef2e819275595ff4191736ef437a204b6ff8dafb8594e16", "2723b33e0dba9bd5ab1df20cbfdb91ad87899c03685c6f24a973c33c65477686"), ("227d0b9e0c92d963fa12d89dc9a583d60df6a60af537aaea4ff046dcdce8103f", "04295e417bc27030b04d97b48e206b26ba37edb1d7509c6e30670dc8bcdea695", "0b1a42f25594f43cd904ecf152a4ab5c89bd1862f393b882d996c159502f85fb", "15eff181aab355a55ccdacb4ab98a6dcdf44adb1db1b5c96a32bbf4f1f3ebbac"), ("189b3ccd4a95dd5a005400c1089508adc286ae6e50654a588e9b839381c2b4bb", "2c449fa517c599e723be1a761116bd0ecb3eb994397e443df80eaa0ca94c861c", "01c513c94ccda27f0f905c2e7d06d1f460a228f13ebb4a217c32cfcc289c4d44", "09f55e2d7b02beeb57afe4926be364721d87af304769d22b474da8cf548d4ea1"), ("0a0b5a70c9790ef21dc50735b1091f03d54e874bf0614b3487e468435ee824e1", "24f5d33c83440c2a4f254975b66cd5609f1097533b3f5a840728d32d5dedcc9e", "1954bf56e1e384ef7045d0b9dd72f12b8d867a43c8016fecdcd014bcc9f867a3", "2d7d4efa56cfe6035338bd6e8eee5ad7b9735ad0aa8bdb3fb25bb08e79d446ed"), ("14adc5a4b11ac43020d67cb77ac03a3589b84440d2c6685b6ea29e183127d8ba", "283034da485f8330cd51a1149afcf9dcb1dcebf19a9ef35514c35fcb1d2d6c50", "15131c7c7c73dfecda1805c5c56f36c6ce978725d5d3b5f01daf51f1ace94979", "0e1561e62d3e4895bd7ae058daa98f14cc1dbee1ec1006725e443a41eb98f2c8"), ("1811733918bdedd5bb8e6a79a2d68392aebff0363877049121b6224ffd7bbb70", "10713058ae2f40f9ef6e18e00fe612ce57193108e8d9df3cd18afc2e79e3c709", "1f73c49dcb07a5c0ca48a17a02e5709029c67e48178159d3283718da19e32011", "1fd1bface32b3e7e0022c5cded5c948876872c55e49602f0e741acb8291960e0"), ("1ecd64621c2bc6b14720acb913ac16abc22ed4a42f99b3d66fc37d5ac7747d03", "0b270bdedfee47c9ddace784c653d7fc0fb8473b60a5d53aace9925e6f2090c1", "2271319cb970cba485463a1cc4c4ef3688646aea59a5bc2c3043ed848bc445c9", "1ce168e22a3c16641e4e761082e8c3b4fa2dff6fb2d22692aed9206390cee9d3"), ("1d6b1df219e83b2cd2a1f53fbc459db098ee552ca6e7e6e96a6338576a8316fd", "1c84ad77b28ec77a78ba5da6e178eb655af519f3f2941e5e256769ed3ae2f2e5", "1c6662e8acc90989f2330f041409e7df822f0616dcb48b751c4344fa78cc03e1", "09d92eb6167e06f48ea52c4549dc80e75360d60a9e2d728bead5037377a71a1c"), ("0638924188e8a719dfdcb9c791a214c9abfaa8c6c59eba0ad386e188705e09cb", "2ef059d35bfb9d51fc0dc06a5022b7a575cb80685e8fc627a8fca902803839d6", "1f05c9ae11bcf0b8eed491feb9331a02fc0992e61b7365bbe04625cac58aaef9", "0d2f6b4b5088b2b807a5f15ab3689ea5323eafc8cbe9376de97ee5fddd4b8dd3"), ("2ed3887a5fcc290e9a6e5fa7b367efca9e26489ce11242c79d2933f0e85595dc", "2548638dc10253208fa3e6eda59bd1802d2f3734680a981a2792f61278656580", "227fe99834d4d8e6d8f63c7fe83087d729f72612633c22002812bcf49c8a2235", "13b7794987ce510f3d8f342bc40099b0bea028b224d67fd85660ddf4170a7877"), ("1c4e29474a539460f0f4dc027e78e2383bd23d69ea12728803d02d697b108407", "2739290d7f4e88d877f280a9d96d70a42dc7352c72f95ee86a858107c9acaeb3", "0577a2b805aecbb0247ecedddc297c8dcb5de0eed2fd4157fe2188a57c169399", "0026252afd81594f4715d85c5bade062dff5eeef74fa4b68c22608f1b6d67957"), ("2c40da4d6a5e3c1880d99052c63f4bc1c2f03bd8f2c916a1db2f7c3555e811ec", "25f8a845e6b370662993bdcb1f9a36b493b5a031b510e1475bc9f05cdccd6a14", "1c081db07342c4bd68efb70ca8cf2ad67d6ca4a203f0365593a2c6b814b64d6c", "164b5b24ff436501fe6bf7191e43ab192de72d5ea89baf323faaae210f1216d8"), ("02821c70e8cc967cd0dd2e68c5452f7722b182aef680dad03144889371dc848f", "2cf1e379ce5762f42bcbe12d165e16d6a9260549f9444351cb9192db2915cba8", "16820e48aa17b9caf12cbe12cf5430f3b25c35451a7dbcb1fbfb908b66a68946", "099228d5c19c1d0e1bcc16281e48d73b61140dae2d239d295af9368c89f3e07a"), ("0559cac208c0d697c52ea7c549ca76c1aa6ece2dab604a5ac8a251754bd471fc", "153bb79e5231d95684fcffd4e42f6d8453938bec13040a9a0e2c2e104639ceb1", "1ffcd6ea6c2b6d1ca03ac276605d3064c5529e66018ab871f4b0ad31590b2acb", "25286e84d566fa4967f5ca7f61f3ccabc7379a0f06c93c4560dc8b9169e5ee86"), ("125aece2bfefcfec5eb914a90fb2809b72d8b098cb0a00b5a3ad924306b148f9", "198f1adb0a657bb590f2fa0cb98036277714c40a417b7ea6925814ea317dc490", "1f01a4bfd938ced79363f6f3585fe9334f3ef6ebcdd041e506932692924dea14", "22f34628cde72a0a482adce78c1ab2eb8b1a79a77b3744b81495704afa0e2c15"), ("154894ab645f9fd586c0d6d1d35ea79c3d4e0dd1c0cbed2e7d8a1bac74c038ce", "01dc6b6b76b3ac07b21a3617a199a83eac429a25b87937fdedcc65755e7e1a53", "0807affec8c158f06c433bb49b0cf1b310c1ebd4e55c57058bdf49e0188ed4c7", "137fce0c371097f1fba1fecdb2028bca7bf34e16522fbf0cb12b44490bda45d8"), ("0f0043548a561c92ad11d4f7376743be7a68fd25a459b71dafbfae7d41ac749f", "129a1d88b7a215b878a98177aac840c89f2c9361eac3aee4ae31b29d7a59f0f7", "0a0e0757950e7156dbd3ca21f3a3393cdc4e9eb3ce9754414d9194ca97a22406", "137bc079381f8b4f20aafaf54177963b92b30be70ec300d887a50c6327f93592"), ("22f854aadbaec5e16a8fab2e69dc54ba68a4ea239bbc05b631e3ff8979316638", "1adb1780e9860539d05c529c54a3f44a9274f682202a5e6848a53429b720c0c0", "1be174fd1cb8f5aad846226d527fab24d3787d4a8f03d61928e9c102120b4ed0", "0c83c51399b93d1e22a43a570ed68ecb3df839f07a3f2a074e5b5f4632974192"), ("026c38555be34d6359f4acf12fde3582d2e27685fab1e9dfef463486d7b30ef4", "02a56e9b27ce707749bdbdae9d6fba1badaf633bf8f20b03c78702aece11dc35", "1e32fc80cb27e7fae26022da8a149b4a0c5f07964474750a75f7ecc2205768c0", "2aebc96bdce1ddd040159167d5acbdf396eb6503a491ddd808ac59edd9c16253"), ("1118281163a3079de552933481acec28548ae027a462db80f3fd3c356fa54cef", "0551596ee37f542fd6801fd4bbbbd7e91bee7ae0e13c08be78c73eb258c9504e", "2a73496b90794dc1c495c81f867234d182b57b1d5639e21e864ab9e1a4bd968d", "270ef32d81a30e6bf20eee2830a422ddd3a93a1ed5f754c23a26a7b6b22b21be"), ("0b5cdcc82fac61c8d15cfd9c6d9578fff88ecfd99d148f96e73d035b8bcd0e3f", "17082cededb149270500c06cf60b9f938e05470d7dbc094310a2b9ea5c522dd2", "1f2b395484a466174da3ca63e8c6e9f4c6d679df002ca857bc17939af39a3422", "1def1f86ce06582a10d07ef554c72fbd4ca5d13641bf630a4b73d5ab5a642291"), ("11fb6ea5ae8970e6e709677ab85d4faf733688ffbae13e36711607a2220c30b9", "2b9b4dafa0dfbedced30d64fb4c107eac5471774f2267934b0cf740b675cdddb", "071694f58641e802122543cebbfe1187703107fbb1b59dec5338711de1760ac8", "147812393e73af2eb29aa07cd4f13210d3cfb00ef43757c0d1afdc65acd85fc8"), ("100933894504b3f0bac4469ee52de2e20425c28e22d00bf997a09b4e554f8cf7", "2007446c5f5e006230dd60abf8258fc562a9fd0516e4ab846e94f1c55d9d3fe6", "1325e00f6afa88f5d92774f03c2e695547865a142a76f4b04ffe71f2391a8123", "2b541f69b228ca5d4a14ddfea56d91b0c051856c11be2c7b59fffcf6dbf840f5"), ("19aa660041bcc12d237f6347b68cda626ada5e9fd725b578bd3f3263bf3ea0f8", "24d90dece32603308d5d4ec7b8c35d289392487569aa10a6890647c2ba689266", "07925b8e3d46ca45c99ab47ba194f9c528a3390bf63a94c6ff56f32ae6b17164", "04c476d3629ae7d97044f7b02edef50db34f27ea937d0aa165b6ed2a6b141a3b"), ("1b1e8a234ab387f259fe97d6aa5594dba1ca59f3169001703afc0530c4959dc2", "277d2ac5a502eb289636a32ee8c199e7517aa5c996cbfbdefa7dc5456b0f7c3d", "0d310ca1660583405c85b3cde95f828b292434cef2a537e75dabcb102b0ebd10", "2f24ce5c1ae88a4aa0070d26050c4bdfc97503e9c5b9bd23e5c614933b6fabb7"), ("25c7e71a963d05fc34f9b7ebf3a817a4fa34d41e2ada8a74b0be274b15ed6608", "0d7d6f225aff246d956a0179db5a88613b9d110715f8e55866b70c918dd9701e", "16f85d351349fbbd070f3d3b88c7407fa1b6424c374dafce3f1f33dc896c3aa4", "2b6da2d5e1640d1ebc8219ff0daeb5188588bcb87ae8d3fb19d301ccad7fa101"), ("01600961164693c68df6622d637ee58f4b31351f2b406b749b85654a6125bede", "2ef874b71435e06c002f268dec9829f2b3fb2da587ff4caa89ca57379d3eb627", "23bcc4cdff1b0faaf240a5f62d75dc0c163b2e2cde15eea15777a074c04cc2cd", "1a0974e4d7275807ca06cf7b3cafa63371701d1122146106a6d4fa615da8b82e"), ("19a30b794d1c8185fdae65f9138507cc0b6c6c3819889bd3d8560471d8c589bd", "2295b81c1d8efd96e842c551564e6a3dc66f876471de218fc812dc67dd02a182", "26f01730065b5ff7a5a33467316786b066260677c5056dbf2f91409437c7660d", "1b85c24389976dedd79b01beca1fe834efd29f3cedeccd7faf83929c9c2890de"), ("2a5f1e34d5adbcfc4ddf4a6e88b52b78f66af337959cc0b30049f1e71fe7744d", "11996b01f4d23fd1bd8c3e25315a340b1c7454fec680062f9b62e1e20a271445", "213989f81853957b1496cf267fffad00356c2cc1248ab0ab6a00ec607150b8b7", "19257b68e8467bbceb5e0bdbfdf2389d0f037ffb87391dbb9dea25c9eac9289f"), ("2f79ee7f169dbb5566862d4c2af81f5a72f8189f0c5364c948da1c1f5e38ef01", "0ead43019e2a548adfa339c5ecab2c5305a9d22bc3f6c2a96a389654c294f473", "12e1d145600b2c21060006a02890f99d0dbe550a10e09077bdcc544bad15cbf0", "16ae416d3a4dc4bbf4f2557fcf495de709b401959804cb1758a11850d754e0ad"), ("0adad48060373aecf38013d301f6e05801ebb8215787fcc6ccd0a0257bed8a7a", "1c47ef2dc04d50b5b8a70e6b4c22358fb2c7b2860327bd25f1683f0125b33695", "1178c9c71e2b2a9d06abad690a8495a4f96634a496dfec105a0da53a1afaaf11", "02b23a9c2e4238211b50f400ac3323bbbbfdc3b19192c27707369daea76933a4"), ("1b9e65fd3f078374e45e40301e091546d5516d31ae2c46ab6e963b8bd6d8c5f3", "1e377673fd8256331f16b0665f6f645f928b6e06d7914e560e4d50cc6a3a8539", "11d71c2729ffde59e3834f10eecd8ec5833ddcc475286044731f5643942b6bed", "2538ea9bda42d46f49326299b2e562a7f1d601f9951bd222405c603f00d49389"), ("2bc910d2827839ff3dee03afa55badaf0711ed75cdcfc781f0bf7986dcd2bed2", "2b31ae046037f8881b6f96681e4bbe05ae87a497da12de055824a721d134e986", "20835e4ff024d6239fd35059ac76296d55095e85c30bfce55132a34f4aaee4d8", "0889791c6dbb1677375c5a04b0c7f34e83b3c8e36057e5eb62e03d70c79fa72f"), ("1e9a47d8cbf0cb5a11afeb96358299b51b18a90c99cceaf9896bf29037c756bf", "05086f6c837f260a9202ca37fc758947aec071f83c60db1a708389621760a412", "21b30f218eb6f0a6739a1c2831eb29418c4a485bc74a8d651965d8c77958ce88", "22903b4059c012352237296983193a1b9917bdccf9f7396c5c6dbd15b99b3333"), ("2defad88a8f641a75f4024b86644ece1688d05a2c9f633c5d1706c0a9671c381", "1545344caa3d63f11dfd8bc1c44be761f4f4622bc828283e55fcb06732ba13c9", "0cb446ff7dcefaf6406a32312a090ac35fa626dfb2989e2c3d871ee156fa6351", "22d34c141838a893aadcbacf52fa799b6dee81cd6511d22e2f7c5d5de38de8d2"), ("129e45b36447d037bfc1e35b131fc6af89045e803ead84f1c49d1aeb961adc12", "23a8d41ebdc2c2c39b76a4de02318c23272fe57c9dd62fb8fd2b8a80977c722c", "298f787d4064a3b7162354d0cadea034dffe94bb5b2263053704ed4749b826e2", "0be3bbe276216c20e2dcd39a47d70a9f5c8317cdcac717117498ff6c51274dc3"), ("061f14d9508709030545869ebc3a816cd0ba8da8a1357410a6c8c08454eb8e91", "26ffa0a0ee6a47dbecdf2c9557863a869db1f95351b6655650d6c90fdfdd1aab", "1a4778245192751daa1758f08e57d11fdadff85970b07c7d0c3dd24164ca19ea", "04d8e611fadddf93230b3fc6de6c458e1aa53469ffcdea8da0dd0e601aff259b"), ("17031f77f1ed767337b69e37619bb00f343a9895a3c6020a2726dba1daadbced", "0957343c2d129b91c91531baf7bfc7563a2f0bfcded27c86b14560d1b392fb93", "1ddfc5f14bbcd4c99913d198679cd253c30fef05bad8a6c45fd41aaa5ac90d61", "06f8ed7d0f2948bbab8b68406ec8f63772f122e112941e9644b5f25d3436ec91"), ("1dec35d2e06a193bbcf53de80623be2a4fe2599d381f6e81e980bac74b490db3", "2c36bac4b650a5eace262318eca285114089f97f747ae7be5e78bd3b60b8c5aa", "16dd5ad0e2bb7df4bfd45c21d90de0e36416a721ecac82f34da7bc9ee3043b54", "3050f43c066231f3ff5c89fdebf660847e97554d4517d77b5b36446d90c399a3"), ("190448758618871867d467b023bdafece65099b6c6513c8d4a54be6d08811178", "01b7140f712fbb2038aeb048152a2ca79687c1e6e746f3f485b098f97a985c37", "0ec63053cb2bf12dd5f32111bbb133a79fbedfcfff843dc2230ac82e75fbcb1e", "046f88877c03c287faffd5dd66edf4a6111ed7bcce74fc9b9ad13b9a8713740d"), ("1f9edecfcc609699081ac79b6920ea86999a431f6aa9129b666cc0ff150e00a4", "11cfeca83d05972c6c4f9fd7d8436053951523f1d15e7bac14deef23754a1350", "0bdd29acd99565cfd03689c2f095a72c8470d857793842fc5da2ab0e64eee043", "26044c8a69ca235edcba11e920f3a7cd14511c3efb032974eb8741876ff3c2cc"), ("25f07d872fc90da63df5ec28db16c293e4d1a5337339d2200c0f903552d82fff", "2392031995b5c13ce25c9c2c189dfbb17f254b5b0230fbe399f0fec0473498fe", "06ec2f4c70610c99e6db5cc2c8dddc177d5cf8699a873966241ac34c16d29d21", "1b1389e22960fed4ac0b60c03de731a2ffbb3a5cf6bd1eb18e64093f31d26137"), ("1a8f05f7945bec66f6317ac0c3d6c34ef1bd8783eb4f698b14d31bf16f442e9e", "26e178bb79f5427875703401e66bdf81205d272a44daf78d97c6d719242009bd", "068e9bc4b0e45a07b11dee80bf138323fd6b69c54f7b9539e79e61549627ffd1", "2968ae4c672e3ebfb3365c732bfac07bb34ad1981272fe8314730e7807bf3eca"), ("05ebfa22506d53065041cef7957427c869f5a5dba3520314a019b3258e562a4e", "033de377ed333048ad2d62ec38f174908ffb867cee41e97a535397ab2272c864", "1c61f99335de689a00a0bda285c4f2a8cb816b62efc8b9e9ae8259acc9947579", "2c3a993310ee7cd8d90e586780005e31a2bb33f43ca6bf40e1d6b9f6aae62366"), ("020cba3d419d6b96cbb6d00ed7f9e74c7cc26f5c866960e8f4f83f51514c8369", "2fc62cb63920ac6e903d1c11e146817c2046a21cbeb14a3058e4e29cd48f5119", "03a5932b482f827697317742c5fc15aec7791599c05efeafaa35ca3724ef5a5a", "06e3f807ab174f73c898908a2cea147393c9cdce91175c6422303cce15e2ac4d"), ("1109514a85cfe1cb63102ab9891b83298ffda4fea496aa6e723c5d0205ad3e8a", "15bdbcc85ca3d5c1c9ec8a73d48bab63dff16ecd6095e28885e0658117c5e704", "0a48de62776c636fcca8ef20badb83cee12b4e7d9e953ff3d007f550578d376d", "0b8f307509b1c15d538bfcf2c491a7333a8db929ca9da250538f959430f39e6b"), ("1810645358e7806235aa18225aa13b41410018b5b92ddf751ba604e167f140c3", "04a1407d2bf774bd294ab404e0d31ff2be4d33c403ea43b084a44bc136f19aca", "286249d9e8f1c37af16d550f6c2b7b9b6cf5eb267d76eef541bd0a1b9faf9714", "2020fccbcb6f6aecc6f0aa7cf030de3e8ad986180fc34e80505f413b33d5faf4"), ("13cca8ebc73604bc54ef5edc31beaa02a7c6192ab4f2b958b38c1b60abfb7b83", "2384ba53e4456c7ed36dd4be65acbb98a0aa38a065ed0a6a4203f0ef128f6632", "0448647b792950cb0cfa59723233d5c7e601e6284ca39235ee33e84d12a7dcaf", "2c49faaac1f090281d5f423368f808c5ff770da28a4e544b1defd524fc47a47f"), ("076d20278a2b2f1fbab69a614ca773ebe3f0d8812ac440db2a2bf2deaab14dfc", "15e0c730091616cb88bd71163db2d9a3f2efd11e21c56cfdda0580b792d1dd5c", "147804dd35bf24952a470599ea9511c6d38298e822fa4ac231858ce890ff22eb", "11441ee469cc0ed8367dd49bd6ef269c8cd9c7bceeac70109930e6af8600150b"), ("14884af1b1c183042cbdfb62c73412d6dd0d5f5c3e1a01c0bd9c01db66a01f53", "0dd8b02557434e30215ccd61b59ff4b13a0a0d48056072140dbec6485dbd2d96", "2a6a7eb2835f4a926ec748ee349e7dea8b19c56bf920a2930f6d7cd4d550ca65", "19c3a3dc73330181ed893a31fba35710e897ced00c1bf89401806a25fc44d166"), ("1a9f98f546eacde747f341dd77f9df750c4294eb2619352fddc1d74369107200", "0d1e1825927488410ad7bc1d6d4818ed12b41ad08e4670f097cf63d3c54a3187", "2a83ec07ed2f002a13b8e56683f55c3a6fab99b3cec004e45cc8ecc145323a7b", "0d2da7fed19dc98d8a188918513ca5b9b2c9da78b31840b9e3f035aff9a7602e"), ("0122af0a1879f9a1c71e236e95d00ebf49344e0269a7cee5382a7805eae8c590", "0d8483fa877406deb0e3cec608038d2c2bd1d24c3db60635a780127d3bd22b65", "2e21ca50419b079d43ce043bee12de04cf0c3b392346c1ac4fa57c1b57a3d708", "20e07bc5d2d15b770ebd73d02c340fa7f6e6c8a3d6626244ec76d15ea67d6686"), ("17ca8a4b08aad3587c440b86e8cf1b86fd7b23d3e75621f09297c4629bc069e4", "03b53e9180a1c52efd224836cbe8ea74d3a730a18b4b71a7a170c3d163e6f542", "06106d78c80a932b2725b820f822645a7b747c24952cd05fa81a8d6b57ef5882", "08b33a079027fca98fb43974b2b9f404dbaaec9189b437392875fdc144d89611"), ("170870dded2363c98e0eac0f26e71aebbf675f8ae757ba13fd592e19ea510579", "1c93b11317db4d11ae4512fadc7636e11e994328cf980c6b543b4783103a3bca", "210423377610bd41fd2d23d7442999727fb66fb295e8d8e19571d4c77771b085", "0e105eb9cb6fa97356e88d9a73d41a0f7aadb9db444b916f14bbdc143ec60dd5"), ("15701c2e06f31b5306503f3595c67bd57aad9b88c53265ed9d6dd3f88ea947d4", "2d7c1d0b89b4f76d2e1feb68eebee75fdfa2a0c0cf93069dcd1916f118a4e297", "22319cf860c282fd732085711d7757ed1ba44f877732b0c56b4eb160c348875a", "22cdc3ac745e993f3362a7551fefb321413ba1da4f79d1570a3da9bd84604fdc"), ("2250e5e7fb02bad0082dee9873271c96690652ac620403f72322e9ebfcab6fea", "13efa578b9dd1b2d1ee5eee8658bfff077a196b9a71c0500e9c5448beae9d761", "13abd59a1e0accec0a37a940dbcf4b879817db13fda75c5ef4373189da000dea", "2ee4c03a63a6044176cfd19dc013418fc09a8bae65bccdd72b2b1eac032f0c0b"), ("2db08ac2a282db8d173ab28b5982c984b75aca92ff7e5b000b74e6e1a67af725", "042549cd60973e0fa0a38526fdce132c5e89f17cd9612f09a66694a69faa0f32", "0ab0b2c669b59c00a51fece72c90bd6f07444a4c37aa08d1b462213c04ca5df3", "2f90007b1313898724aa8874d178ee3b7e7e559530f14b5553d6d8a8050686ad"), ("0e9dee0db1a30f6617e976af606b59f06561c7c6fc87eb3dac3a980ba78f2c42", "158f3a8ebe3951fd57b1b64703c2493e5cda524540aea3c01b1a1b2fd6dd3f3f", "153f4866278585313f7f558c7e76a6e6c2af9b07f457d1afdeca9c577bfca05a", "0e0f1c51ca7b035ad0448a334957c29a5104afa303d6b2d9a7b74944b32fc06e"), ("039848c1e32687ed4032441a8be017f5b4d554baadaeea9ba3546aa5c0a21188", "181929180540ece9fbddf5e4496e3e6c89120382d45fa926a00aaf6f3580beec", "2a8f8dc53ea6e8d2419c0894a4c6f5edeeef6e5ba8be942ff7b1127d4967bdfd", "08390dd118220639ea45899fd2c6d52493fe6e92a647428896ae5d58bfde367d"), ("0e085e6716108976b316f6d5f67f736d10a5242265a5bf85809911eec0e84904", "01030f11f85d591864a882c06bfe0619aa799310d7e101169136f88ea2ef7d03", "0c2803817c72a19b883f80f0727a088ebd729371f71ebdb20dba581b1f502de4", "0683d97df828faae9470107c1d4513d8ddcd11e071ee976069080020fbf4e1be"), ("017f9b847829d0e8d2210c8a4b4dfeb89b977f5b90e2dd0ffbc74d30298e1b35", "1d95529939629c8e4346e24c30e9767a33db322917f9433482bf6a0246328996", "1ec7fe373c7ed884fd3c381cd2b17d2de29832f9fa480d4b64a2d61286d41a3b", "14323844e3bbcf9fc5d4ef2409aa8be3daef7107f85801750dfdce6f80376273"), ("0dfb6d109fa9a9d9e7cdd576e3dc079f21ebe8d6a6584b540e531f3ea0c30d6a", "1ef0e5a92d1452c70c227f4c0f5f00ab0a6630ec2529b0865152ef6062cb8c5e", "17a9f0d19a0b81825d48d883ea1f83c5f32527ec0ce7f2174768a47cab7518e5", "1e25a9084544be7688c704a7e1bd70573e978d022e6e1a89fcd52c5a971f541e"), ("0c74e99601ad5a69adf34f640c0b1fcb689709ffc3be4d288afc03b9e6f590fd", "2778323be97a45c687c442f8a93ea9e11d9124e9385e9050c0891fe00c123373", "03d8dd8c9d65f1a0ee4d6af68584215d5d3f9b77dc46f01e1c8e77c89eaf2f64", "2e774002733bb1b5aabbce2e1f212f0b469cd9a7fec009afed39b1af4653cbd8"), ("24ccde5f51187faec5ec20585759a21a110f86fb543e4c100049b0c1c2747539", "206013b4869bb30220c2ef8cb1ac98d7d7882ee99354fce0d7f91ec49fb504c8", "2be905d133eb59c2f444d91330dfd1b5afb504ad21a3526bd239493c266d3803", "03cc7d5e256ec93785e4f3da651e04072069ed513b1aaffe7a3d48232ea2fcd9"), ("0a8a1d689efb66c2f6b9fffe1829f81208cb5ce654d346dd28253ad8b2c5d4db", "27df1fea8e0d4b9b981ea196b5de773ba1c42e52dedd7489485f71cd0d1c586d", "16e7bac4cf54524f26556a95405aecb479acf7ffa97ac147abf3d0549206ec25", "1fa9a0a3f5d0835f1f930c954e213a1c13de52550c6bb320e642ffe17737ce7b"), ("14527d70364a3bb77b780f617e6ad6a0dfd27fd8b852a27d09753cf8c7ca961c", "2dc592b18d0d12dd73a5c42d54e612dd5fde8cc50216e952309d1736b54f2499", "2ae7bc42645fcaff74a22c1d01eef338c531664795673a14376e0572fde7ff83", "04270b9ff68274ae55d725e56df2e7f0a9321edd2ff2aadbb95b449ef8b1b134"), ("14aec9eb74546c9c1eb68d34b854f52d91a7cdb05efd109ababe129b99ccd2a0", "21b0ed5885e553cee1f929c29f72e0ca89b46e33e399921618256cfe72b37c0b", "12b628fede3ee09d16e8173ad0f2bd537cd18e4e410708089fa650442b282573", "25398b1c999b5ac9b313984f4ec074e7d96c7b8967768633c6db5a61dd7045a5"), ("2905b0e48f07548b2f6e000de66ce5a44bf80dd2dcdc59187d6259c0b639615c", "0af00269ba83b6df1b8e3c6182320d7f0c94edab454be6cce072f9ab568146ff", "0ae12f3d5bcdd4d3602384e298d7c8560059ed6b3ddeeebe005c3cc79f7945a8", "09cfe19dac7f2c9a163d28845925acf9eff36933d12778d89aa5420e34c484b4"), ("1e12f82d35ec010e8467206a8418eedb505d2ddb109ac402c43268e7f4499159", "16bba34661d32f0f07855f0dbe7227708ec7f846b0cd0d3780b7d4392007e41c", "27760405a750005e0969bab9b08f723ae5b4fa969993661dc845f5589e85d839", "21c0a6c383d1ad4ce2e629a5d3c28286cf47f17a02d3f99c6f8845ea6a1529f6"), ("26f2ac27e7783e8b0377482f6d306d1f4aaf0079e9ad7ea2364f6ee055933dc4", "2d6c889fd9a1fcfdd99f2dfb844e0d20537df9349377849b732c677fe617016e", "25c998097a1192fe1553f4bc0e4f4500c8fd4e31f721728d8e02e4a37a6f662e", "1d061a45cb7083ba08ce2f8ab5d49ab985cd3fee9841feb845c187f3f802d0a9"), ("07ec3463ee96dc36d4d56dae01befe4b8e8be194f8f85cd1d52ef0fb0843749c", "140ea41c2be0a0d13d4785d8107596bdb4ec09aee2b9357dd3fae6166a41181d", "0a61e46da18248321e0002c97b0f68ba861e076d4528004a66046282b4136d4b", "222413288ee936b53f8e3b6fb16c7437bdec267d4b2396fa2d547a7da5b04d2d"), ("0a5cd4b8a8a72fe9a8db4313ab626a5b3b7d111bcadbcf1d1c43d0e79589e638", "128c19b094a7c09755785750e611e0b8b05d610d41b36d8190cec6984f00b7d0", "14b81bc40dd8e6330cb02cb360a556c57fea7ae26237c8f93244e53cb0626fe2", "2acd2017c0f25a95f36fbff402dd19df0c3ccfaa63e41ae92d9e3ce941926632"), ("250470e9b4a74cfe04eb75ec6237781250e633dfad535bcc2303e41350a5ceac", "231d57c0fdba4d8d164e7c0b7e99ed9062fa58bf1809055b42cfa49eabff3686", "0363b79fe31ba937cef11ff8398791f76c197320a887f4bc0a67730b1dbafc5a", "113c6b297586041035455b44c6c894b155ab9d565a1f6e22a032a4423f981ef3"), ("1236f3a54b10dd538068d1baab3c02a245c09115bb36ad68b0f796c1e3d98a41", "1483831cd9f1de07cd51f4c8b0ba701c7096a9f385402b2f8f517eba42cbdeb4", "0228f38a5cf5011f0dd97a6894c45697f932b9469ee6314b5397554d6ef31089", "085b2a906a68545d898a2c88003c15a93c6929096481043d23d2abcbcebb9b54"), ("0e466bba478054b71e42fd58646f187981f2490a66f2d197dac3feca65aab3d4", "2a8fe5d4d173de2e6f49812bd578624bd6dadb12198e6b360cf9a8a1dbd6ca00", "04c5e672728051b5617e4b0f309828b1a1b9bdb5be94424bea9c44d03aea3f06", "273b1afd05cca929a0f6390c7e54f2d0212817cefa54a368ffb5662fea6bbaee"), ("2d872da3dda364410c29a5755de540af81d5dd25c585d70a2538509a6f90e5b3", "1419ce59195272c6e97828e94c91a551ff5d8c8db1bd9884caa20afe612e9ec1", "11ee99ce66d4d9dcd75a76e1898c9b6287c411e56ecccc04cea5ad4ab003798c", "1c0def97051658e68b1f16902b7b91e2b74ec93645ae6b3dc62a8e94de88bfc1"), ("1f316425ec59ffed84c368370de25a988cb519a0ab1d642d7e0a77ba4ad23adb", "25909e5425b2ef452863e5a5fda375470f8d84f0a185b7f75dc293f87c670372", "20dc9e0949ad72fc82be891a3a47bb23ffb400de4ebe3493b68927ac6296d103", "27b877aab13cc1d52e48eb57aaa81081edb3fd2ef5c6a07d61530a3b57b17cb9"), ("00bfb89874abb370d777ff1d7bfeea41d49e845d5dda457da7070d27bbe504ba", "0a275135ccee2b162abf4aad80a8be7e7ed43643b56b86a2b9b8162b0cd2ee8a", "2ae2c482df1f23022b59349a2183963681619d2411bfcdb5157e64098ecdb5da", "2e6dfd5fdecdc52613402e106bc6264a9b3ec6745eb7eeaa4138b2e2398a9427"), ("1813fc7ba96e0a10fb68e9bdb31e191eded4c04f1a87d800e43a6973be4be2f4", "266b135a9c8510e63bb0c661f45cab4f36d462d4ae7d388f555b4e374ffc7fa8", "2aaace94332ac3a30b471e73ba9728f5ff61edbb5e3e9a1b5f9321d78bfdc2b8", "2772b15a6190113018afca32770d4c56a6aa348cb4c7bb4429fec0c19381ab1d"), ("2b70229c5f53526e29d7726feb920f670070f30999ba00310c74c36acb3e10cc", "1453eb341fb085b0c4cc4d67900d0747905aaa8ae98e5ad265da77279c0051c5", "1bb8cfaad19c06e5f787b05824337a564a1486fcc1d8d97e389f84efe6c9a8c5", "2746929f1e0141e73edb107ef8c7ff4a712d5c84e3a504096c367f16115208fc"), ("2dd40adf56640a8c16b59afbe827f7401b9254992369ff7b09e028e79d17d6a7", "1b1e9057787636e5d8c4bf6f7f6d671ded4c3cc1d577c3d6930089a69f70b1d4", "0936609433ddae8e90cfea3b6b5c75244f715ba712c5a6ad3d1e808d3f187db8", "12efc47ba3a8d28fbebd7c0d282a127af2385759816290fe6e970cb62bc72f1a"), ("16cd0da9e5ab729755964da259f29835dff5c5d6d3e3acacaf1cc4b27c1704e5", "1c5647ad71d51f6053764f4ddd9e57a43f1e8a7526545bfd661215cf75e8f478", "28e1edeb7856485f4fa9437000c0ae10ca218ae9bea28fa2aaead2f068776e9c", "0ddc064532e6a4cf18444853bfaf4f0a63fdd576b27fc87f3dbe32351c1bb298"), ("0ea693989a3148ea0eb446139016ff794dec2664c37e7f9edd607611529d3d9b", "0f8bd6818a0c114866c314dc74884a9e8e312f56a4ceccafd94421b681830dc3", "1c6d60638fd7ed2327d977798b3b04b3ef8634ada16f5e0f76cb8bf74c4f25d2", "1d8a7375e0f5398f09344a5548035d92a7be4b41d9aabe0db7992bc94e77d175"), ("2c9de124133db63d581a76d17b90e8e84890bedd87011fb8f8f1bd2c9cd97cd9", "0dab9ba8806475f32251cfbdc8724d4efc26d45b33da78952a520066d5716294", "2984e54b6f83db80512b009651dc1bcdea03a619094dea830e8d284d118d9061", "0ee8011159eb93ebcac471bdb19993511d2ea842c5a0495a6404df89d7f119d6"), ("02651030df292c1ad178a649ed5d78179066359c8c7cc6fb45b164694447751c", "187a30f05bb97d9c8ea7f35b2948eef77d003a00ef5bd92f96e9e542bf2390d8", "04c25f4f1fead14735ff6ca1090bb27f4970f0f7789d2d3ca381433a5fa0c175", "0621562b6778f6a30fefd710e96db8d9d0840c24328fa7205334774322ad9dc7"), ("1201087393b3dfe9a37fdf6a0a4d020f97dde057ba428e9c9da2eece78921dce", "2b371773debd3176ff1dcb787aa285985c870dce6cdbf2813258735ea32a30e4", "11a6d30798ab4f9449aa630e0767c45d310e90742dfecd594289ab6fc7d82129", "2d3c7f8ed1792ff31737e18b658b490d7806df82316711ce2b74f7a205a91b84"), ("2de18a24069a92ac3ffb757d0a35c7d4489151ad2ea6046bed6aa03f8bc74f67", "135b8eda843e5b6046dd100ec8c3c266f8118979e245847843827c69444d0fdf", "2910645cea93a84f62fe343b55ebf8d21667dfa0e17c139ddea11ae6ac213ab6", "1adbc2874bed0f71f5670c4bc79049bc98ddae59c3bbf5b206ac660a4fd1762b"), ("28fefe1c6ecc331cc03b9d9568454da1db0602f02b165f4e63ff37f4175cbb09", "1e6ad2147e07cf2581f4fe7ad280936f3c17d3a2c678804311e57487158c919b", "23eccbb996a01117dd7a9fe116815c9de6aa3e0bd50761cf9c8690a9cff43c7c", "03f9bdc6731531bffde22aee4bbe13838467745317923f307adde8a80b18796b"), ("2a8fb8e24bdd7dda33ba680fb0647115c3e512938c6c94e40c19e0124c400af2", "09f250da41f01910e7f3e25680e89e222dd3b7982aa3f92a21af1ed8886353df", "22d5ce41d490ab7d427068cd72666c7f22c3d08cdd2e5b4ede6623ccaba72b88", "055c07437fe9592da84fe808d518014cc28a3d65e5aaae761a9c950cd16f995f"), ("1da0a672a236d40012d9a13c9d2e9c53167cee3798be69c342a51c3ae1058b12", "093c17318e90e83591fe070b462fa332c0b876efd397df26bf55d58fa8819b24", "25d845c8fd48c2b68e0341d696cb0e5ba0ba4e169be4dd39adaa26a85b27889a", "041e66e857b838ae821870e08f36da209eaf7526e3c5eabf0311af8348013340"), ("2742000dcd4fb88a459c80f4ab965db47a08f8e5a10d3a0c76fc26319b2d0854", "17563c114cf843803aa4057e7eea3b06f5eb4ea4abb92a0c2932fd8790d63b3c", "167b508e8a17263836a8e5ba5daf71713147e6b5a5d1a942260f7da6e76b35fa", "27d80ba727f98e389eb160827eb96e6e5685034309a015f2ebf6e9f30c70849f"), ("046588be2a2b9f85d9f67ba6f9cfba45a0d7ec8a4a63ff38423a9fabf84cca49", "18a6bf9f4bffcd35c985803f8fcedff285b6585ee6f6a4f205928a14f21d657c", "2046b65c83e06a112c2f2b8514178242b3f4a13fb0a147ad95df1295e3a3f0f3", "0f0a67eafb593dac12c99c01ec527a316589949db030b92528092d355f379969"), ("1c29fd07a3b2a3a2be2fa72ce80e3dd95912f8e7ce46eef6457e3929ceffc880", "2852b1dc8a6f03c0e322feeaaf5821f5ea8b1686218a629228dae6c5c7cf2494", "1a16e0e5863e1ac1b404172452d05bc64cf92b8c4436249799142eb5c8857d48", "13fa5c239f5a4c1b2b379c46acbd1841e73c63e767a59982b6b0c5db7ca2cfff"), ("1d8ba582e9b0fa93bc6832c88b5a01c913a26da926e0195358dd0494ba728f27", "0fee7deed99ecb859ed4599e629e993698ae003ef4d1875daef94c7152a5f661", "15f8e930633f0e0199066777dbf1306dcbf5a328154f74da1872529feef154b9", "0d31a895bf0fcc3fd841affa6f161f5d6b55d9b328db66b25b7bea1f041d2449"), ("16b9fb9ca41b4602925e428e021bdb6f1a838dfa0dc9231e33bb3e3eafddc365", "13e79dff66057b4a6338debeee5bb735e80a955a4e83695a55f4c961440a5538", "0d793454e7760b9f55ce84c587230f7151aae6520c2cb1e832ff5133341806eb", "0362a5abda53bf2125189d7f726a910bc6aecf872c2e3777a521392fcbf45462"), ("0095c906c58c3a22cd93d9e193d2d5f38ed6d864e70389b94a96020d0146066c", "09ca05a9f2d2c4997ea580a8f3e82ff682da44cc2c9b4ea696c9fc8f7e9a25fa", "0b878029091b4c4abe5f928b5e7a372185ba7a4e2dbe13ba93fde6a4d610232c", "1ee65baed7b15fa17deb89fb3ddb1f2c804f8e48e25d086395d3f8965b97dba3"), ("050e05499051e93017055944af95a5bfbb12e52cb80f3be330de30a140fc9e7a", "2f717ec12c0beecc6371524c895834940d448ae576b39175248a1467078bf8ca", "218d533b744bcd5285f6362296180d00737ffcf54257d671dea9049f2508ce7f", "0b232b449f0cb8c6df3652cda93bbc49dc8ffb306ef85986f644dc7f7d7cc3de"), ("2d911671042c82d5321cab6c879bf95602e13add0a0d4592ecedcef242d06557", "15c896c2646f87a151cf4329472a583cb475ab9233af9727115db2f85f9dd1d3", "2a947af1234c9829c7726aee2c033478b3678ef53b16423d5485c1f63d990df2", "2c2446cc0b052bca0256be28bd48de4a99bdf035cd9654a6b59a98f58f335780"), ("1a58d4dc24d76edc38724c377cf423ffc95def22fb85e126d4b6f29ee43aa925", "29fb4a91eae001e3af017d8e9158529ce762f3ffe63f72445a8ee5213b0a2ffb", "0c1cedadc3be543895d062ff23201fc057938aae4381e5bf7d5b0c6b324df081", "09e9b493171ca86f8e29f17f8de4f0faaca6bfa302dc4071f3b8e468070c399e"), ("2591601f592b346920c5478b83f6e975217a7ae97ca4dc42b173cef0536b2be6", "06d43d2712e84ff0a269274a8c2aca0d56b3d83c0fac48b7fa6309032b120bff", "1731a3c751a0d4bfad2be5e903d7fd1b07838061017bc38174706969c086d0be", "17d8b2288ef2df5ba124a9246361cd6bda7cd21bfac1d48ec973bd4422012229"), ("11b75ee3081506096992ef2949e533f718b17255fd9c1b8ce03f7bc58aad2a88", "063c12eef35e6a7618aca09da7454578f92ceaa615a1e1054a32f53c609d0748", "09aa2d1a864e1f608a9294c05f253b0c919b5068e62fd28df690af234c081866", "1619e8b04a9bdb15922451ccfd9964d395cdd8ce4c0778c39d0f2a093af525e1"), ("22c245d90aa5ef0971d8ba5db1c629db8af9f0b76a4a119df6f68aba870c8dce", "0cac8f62bb495af18aae2e8f6b8bbbc685498a8a18b5340cbc45afcf14f364eb", "2b8775d8a584d69c3c4d0f2023c925f38c4dfc8b48b73ad3467bc8632b8e62c5", "134f4d3739f528a0ece7ea02932e3b548575b094433f076c69505afc638e770f"), ("04f245ed88c9c3dea856aeb32a8db39397b2b91209658100e6bbfcf1802e2352", "2233ca6644a8858376b53bb1432b6969f664c81696164a830b08e8441e103d54", "18d8130de89380b77ce74ecacc3a278111625cde514cab2f45df7e14c1484f9e", "1663305f101a75ec33bcfd989acc18c5e6b9cb4daff3923ced968661d63f1e8e"), ("1916a2fecd1bdf5fb6460b61216d1bfeb6b1697cd9dc8685b0b9a7a1ba0137ee", "191c27eea2c631143d105ddf300e8f8258b2499352709ed50cd789f45711a143", "1362276a0bc686444bc4965377e04673175e9e1f75274f7eff9eadc6fc210dc6", "2c8d795766ba9870e390f8168a6d08383deaeecf4209e4b08970fe34037cb6d3"), ("2854e3ac2ae4bdeec34d4b89b20cf0b9e0711403332c766f5100bf8cfdbf745a", "2ccb8801118d90cce1d1b3e4201b9bfe460460594c5943a12aa00ae2b065ce17", "22d7accf1974f90661ca0652ae6ee8441dda61fa6d0ba3f666b17e7a78424dbe", "22fc3e3622b72142c5add6b42873e45ca8adb7633f51a0ca018433a02c62b28c"), ("2ec23e697bd63ff6ebac4a2e8c71f01a4f421b2c18ea78e1ce40efcab903394c", "14100e44b1141e1b9bea3890cad381e2b2ff7e5efb3041e31c1b18accd1b1f50", "0ae7e30bbad982e31fa50cd56060df518a3cda065b8878a0a2081ea6d4e20190", "1e3a2060e23c7f7f34d9e69e93ffbfe99e1e3e78725c30a035b4c3d559163f2a"), ("18c3ac11d70fa8f21b6af9df30fa92de2cf2b08bf68b405b02baabf047fef004", "0f4b7001d28d1ed0f32aff9d57df5974d8d3d103dfffdb6deba8c33393d02830", "296c86669f51e45ba9e0cb3a83b8e41ebf9b90e2d7d4548bef0ff45cd0bf01f5", "0050b123d9f87079f6a6da3a0311781d6b9deff279cc78a6e6678515ac60d06f"), ("23acc45f0f6a0673f97eba30e32839757b7f977c0710f638d8ba400248f01d4d", "1f443b551a53bc6680e7abb69ed896642994b04a758723fb7c623e4d4716e06d", "1abbf2b0a4aaab4f0933bd59941470f4cf84ef9abeda44e60bd46fa9b3ca2a7b", "205c31b4284e04ce276e101e7cbe386ebab2d28b959abc85d3f233584bd18869"), ("1fb073e887b6dd29ff21bbc4bf01536ba90aabe3fdc4a07a53a810654dabb032", "13a84c34e636da82b7235173a03fc95cd13d431414b08951de8147b4c39cda47", "08904a448385f51b1482ac797f6439e7c9abb6ea816308bae2e626bc1ff5aeda", "2836210d1759541b6d8237201f0f06954517dba66497ca5d5e4529ac43e07fe5"), ("16b3aaa153562542b9a64af23f08a7d802560dd8c17b31802db81450d2dca3c7", "28fc67db5be971c1d0e35dc8d56ca95ab6175f55a750c38681f29a49c09b4ea6", "1e88c7de7d22f517631b50db73839489f9189726523de91eb3fd229e74cc25e8", "1887bb997658a050bcf89cea6cc043a65db36331c8a560f4c3a4590b41395f95"), ("045479bfd1fbc148a6fa2ac938966e50974cc4c36c2478b9292ca25d07f2a2aa", "22bd4f6024338c07e00b628f5a1857c6310980471baac3d5846c0fe0452ba403", "0a27c961b3c0e8b7962b47101ed83b9c340ed4e8c448c9e9d575cd888799fa93", "278a6973b31e064ab01034b9cb31bc2e2a0327823b000c717d77280bec119f61"), ("1a66bd14fb75dff8d889d3dfe6ce99299a28ce005e4075326aa403b7a3505b02", "2787a80230cf925de241604074e9389de30efc1f72959213f40fd9239d7fabd1", "2cd4d42a33f30aa897b09474c8ee66cab0dc8f9d96aef2951adefddf75a81954", "1f508649c6d9ef04a463aba6179cf9ef80d1d9301bb7a8044141593882bf55bc"), ("048ba95f59a19304d0fe774b452b6043bc9bfbc5c94c0b659596b5a7ed7d9e4d", "11ed8a8f64ce61a37523f0afe8d5830f0e4d1a9059fad9f62e18e7ccdb8dec8d", "04fad98119b8dec5ebb509b1af30cde9c914ce87b34919a1b34bfe4744486d46", "08ac00f5913ab0b7b95d4dcfb4ac4a52b9823dd574864b2bb3daff92784c30e1"), ("2c0a9e2f65bc4487f9006b23d7a7634bbbc27381a6901e263b31638c31211760", "25bf95a792cb87cf2b86a7e1889a730cf7e5075437902de16b0df16abf79183e", "29898a9ba4ac53db87460dad35cdb11c3960f25d36f327ab4f41c7eebb36abb5", "015a7238a37a55aa6b85bc8604c23c0d03ed95a2e83286ab607eaf21aab5f9c0"), ("1e5956ce10c38695eb6f552b603519482b48fe6c84258d58d6a293956fc22f0c", "2bb9aae3035b08412b131fb5d0c82f2293e6054f06700def7c6488875d0da4a9", "25e5f74ca488b66ee893e789aa7329e99b07393b0ef7a44839ad100232923b18", "1fc23790383ab3f9b030f4f20240ad574b2e97904fe2dfb52271c074da38700c"), ("18ac67cf8cdd4136896172984c1b1da96322ea908ffaf48005e237c3b5763382", "00f2b58b59947f86d85b9dfae656f2b139b067fd0d4ca3e0a67b3c4f69ef0d97", "1a38811c9d995b145a2b7dfe7638118d25fcae26620fc5e7b5521603e4ee5b26", "1c6025529cdd2ebfd8ef146068c9c42ff5595927b91897d16bc8824df4ff2332"), ("122f2d06d59d92f0e7398596314f14de0bb11d7cafc6ce3b56e5973ae5b20ca9", "0e46ed790cbc1f272b098bc425724e88d469b9efe78e6a957d4e943a585e2a44", "0fa3d65ee61609ef1cf328b93dc2a7503add066bef3c5f83104025f6b161d250", "02068fa526bdd26fc4e8bb02408f02f83fda86d9f50c0522b17f25e10cbc3218"), ("2954729eeefebc2729904a9e5de99a4dc47ea22876245c9386e9b23263d79380", "102f3aed91efb069e204c53c87282b4d97ef353ae662a80916a5ce6118bfa24f", "154ad458a9f87dcf1d8dcaffc3d689fb4da71103f73e09221336638819b4dc3c", "241b7c5989c2d33c5f2dbc6efadc50d2da255f19eb085c1ca1eb1df3f9e31283"), ("0703da120e25f6eddcfb5e86dbd31413e5f4dafdb5543ecbb29c79cbcfcbf42c", "28a93f6987ce99e6b2e4524ac6e1a239474b52246d8632150a89d083193fda2a", "1f9dccc106bf7ad9a496a846d34e6590828beaf935786d48947fb7b1e0356f33", "286ca2324d136b98ec1e59aada933b09d948879d6c0df2e7eb42ad4edaba236e"), ("2bb426f3f30a3073efd6c6a11e84c0fb54b7a616d9ab37363cf84e4a3d3a8478", "1f1cff2f2cdaf4f36030ba88a87739719b7e3b382afb12d26c6f823fb90c2ba2", "0ffe5546202c41d0afe63617f5b6ee8c7a750ceaffde8981bcada566bee3fdde", "0330947462a8844b202c02fb2b48e0283cef2f269ac846872306798655ce0e11"), ("169f76c9ba0d9ce151dc323e2af3068a719067d7c2f5e736cec812e103080ebb", "1dfc4834efcf10a1a7ecadc37eb402a710e5949adfdde4055b6be30855361257", "2e3ad2a82ccffcc13929aed3dd871470c0de9e929e0bea0b81999d18b85488ce", "2c2d900ca970580cc79e0d1cd92a5c83ca9657e6ab23ce791cef0ee0741c48e8"), ("03cc9b5362002bc1606c823f98d1602049e7601c0567c1dd38eea10230d454e0", "2af7b8ee9e26737352bfd90c9483dba5b1f7ad35a9430a42eff2b3540a18fa92", "2cc6a00a795cc6dc35c29635524abb7b2c09ba3afec91d16ac1d66eb323b7610", "0eb8f5f3d7ad485b1ab2a83dd7e6346bc1d4ab003f2d3eec14d6aaa420db0a5e"), ("066818a3c24c7c76772c025676267cdf17467a89016d99a0e8bcf2669a562e4c", "0e0e93e092c3831a04610afb5d21dd154620da101daffd4c7c4bb9e6c3df0389", "0f360163e56765a7602380238e03d1f8fee8424ccde8eead2f17870792a04a4e", "2dccb54072895d5e7cbbc2cbf259bbd99c0b7163c5bf999a83b7df37008a97ba"), ("0ed35e3d2a1ef25c244b2f7cb8251db40d65f2b5905bd727601e6e4736936f94", "0251dc6fac2dba40d6a231089036587aa79717e4870314ab73a687d96482b76d", "04f9e00ab5706af2f9dd3bf7de4522f57641f227ddc9b199fcc6faefaafd16b5", "2812fbf4a5deb94457433fa622c0696f9b52aad8fa8559f27228f50cf7ef9980"), ("1749a2d340f95dfabc4b9bdc4b51bd4ca3cc0021ebeed247f41d66bfe08ec647", "23c7d193d8565cae11804b5f95aa68bc530916feab63ed1774342f3f1db05abe", "1c25c7a2124e315312543592140b3a096465ae1e0d7f87bc39b670ed2f79785d", "0ace75fd498494adb990108e0a27bdce2c3892a6b641953794dfbd9eb1baf580"), ("2444785afb1bdfa15c31f7a632e8d040d713be0fb156d4d0fb90662ffbdfb62b", "076947a6e78269c4f3b22a4273eeb53f72337e80cc96705400ab382f8ab02b47", "2aeb7d4e5caf33fb1de6018062ad31e78a0a62fc6c2886f731db1552e825d12f", "294a0a128f8bed69d3c0db1b7de77fedffdfbb485f8dcf40bddffaf796a7146e"), ("141b9b45a43bec978ac3661052bcca2db40e9bd6f71597656ac4532ba8d688a1", "0168e2b72627ca957982ed6b349da5fd6bf5d6eeac38fd57781b5e680ff30442", "0a1df148cf26f683c4f2ae3d4989f32d2736482508dbf6764d340583cb9f78a2", "034bf363b26e903a1428fb2e7da799825f1beea8dde883fe538e9c2aebd78637"), ("15884feff713d1ab899eafecbd01be871df6e2d4e4e6adcbf36a4f4fbf96442a", "21e8c7547a005382fba6071868494ccbda941fb6bd79d6440e86f38f6ba57af3", "2f8d29a72655bf33746ee9c56f7c202fe9416e3ad762439c3d41b3beef896713", "269cae6e5b08873d2f9e32b927b35e4f35ae78af7581228f1afcb7097fb9e61e"), ("13a0280fd11a87b0220a204a3b7253348dfed88dd2980344f64c4caad76eea90", "018cb5f5d59d066e0c4cf3686303e9686825f80e412fb9b67c08558d8b2ce3e0", "18dfebaaf33ad00d077a6c32001a9f91f3f8d9a1833444e31e9eed94809c0e7e", "087fe849486a81c01d5811dcea60038fa9ce8c99248b14a982ed808dce18b7c8"), ("06455ede660ecb8210e84ed76659e0138f8320fa878e6e7f674f1a6933eb3e8e", "13b0e4fac63db63ad44288ec3ad62fc209b5a4ef9324ec141910de060f756cc0", "11c462308f09c75424743aa75c161257a9679b21a3fbe46a378b77f4f9ee6c65", "13fa5926b9675a6f9d1d4539cf6cc813eb529ec50f4c8accabb1e7773dac8353"), ("0d57d83a8b3ca3cd4541fd66e386ce2aade44646d43b5e65ed23d4b74a3c1638", "02a00c9f4a71b2b9d23b4322e5106d0b298f9fb1d09d81d7d77dd29a726c37d6", "1f578c20e14d1ac61207c2ebdf807dc919a19fe8fde1d82c76502e038f0982c5", "0a5eb7f811420f9c35697674020f6e164e1923df9708835152b6c0f2c88c3eec"), ("2dea6054100eba649dba42a66b1cf8f4663d5528df5cc460ba1ce28d6f568b31", "010484f8255a7e1649c5056c16379a9bc4c8382407f2a390727fb140d72668b1", "295a9c8879fe300dc8b85ef1785f448274630e23944d7ffe3ae5f44b2c5b2bc6", "054609804ad2553b2f718d596778a7f8eeffd7a28e4e47f6453522fdb442ccb3"), ("07e17b3ad73c8f2e21322df8c866976227d0542ff9e0545d798a9fb6d06076c1", "25769f78afd8d6703e11b51d7f4d5259c637d357a137a8fa9e76f6af7e6d83b3", "2834575b43d787f897d6b5c0397e84e1a7c591cc337d01410703c210cbe9aca2", "286b599bdbad91e9678c9aaad3ca98ee15d3389fb5e7a9acd541307b1ebecc24"), ("1b1a3b52e8bb62a4c6d781dcdc55446c407849b82b98830f8dab9ceb03e63cf1", "15ed449500a50a251382bb4ad05a144c969743e519110d8f8046c74ad73625ad", "248f01cb099391910b2625bd206ba1ea43c2c7d2c62988c4446f0ef691088481", "06ae4b5d90ddf4227ea4c1dd84265ee246c444e2b13749f92a6aad3d16d51b04"), ("213d7edfe12b5c60f306e9990549bb90d026ca798cb550e7615e368c152fd42c", "11c42517063e047fb9fb88402398d5bce6c78cffb63e463d0a4acff50921eb9d", "2fd3d0eecefa38d78c5c37abee843a771a018c2b34fec7f84692b7b8b0643e94", "263ae0fea1e01ee67af9e43c79de36c554030036cdb99e12176a484c0d945c3e"), ("0c1c95625aec43e9eef34c378c29e1922fe6624632527d014a0d25e422cc8854", "0fbf0a740a0eb78e6b2bdc484b874b2a47a57b1c3b1905fb217f535a55980b97", "0054ae1eb2faf84344d3514af4922edfd4b3203f55daa6c0975aef27b3a24485", "210754c701a0ca852d7c5276ff8b1719000e79375630754e8187e6b9153fd14a"), ("176eeea1f4ff1389df937ae0350905904463111099bb3df34468833eadfca287", "1d9105ebcf3e048993ab1fcbb046978dbcaac11e548304a3f14d69d098f55936", "10f1b72b1ffb266fef2abe2fd8d3a6124d3fa2297c2d3783298dbf952c9139f7", "26c84a2c63ffb12df0c1b5c8068e03ede8482a8aa58b8e013965b6b9aff67217"), ("16cf16b829bb74a345efe313c840a5667b31f5d7c701240e8b4de734f223cc0b", "0d23955b8640efa123dff64fe46eb549106ce8ea34bb61830af39d1ea041113a", "05737d0a735c31e5d1c3aa1db315c0ec79930f83256b601c9fc296b91a1d10e3", "0d3c01ea4e92ea1e26b2c7ac58c31a8bd3bcf6a4641b6598250a25d017070ac5"), ("06cec15e191cd5e1904573ad627005251c752edc8dcf5c94ba44047c8d2b91d7", "08d9654096c59f07d84a02bdfeb86c48c2635af2b03c50315ca9811cb5db4677", "09740dbf977b8a6f5372f1362cc7e85d0c617b115aedfae33dca6b1d81ae2e08", "11076f54807a50997a349a16108c4fb67fe9258a15a503c8e03e67ae24122add"), ("079c6bef79c9f8848fc143115914dc2b7587bb696da40a5e2d56bb012d94ad3f", "1ebede77cd20da28bf66ee19ed1114e0ef5eaeac68c1d3e922dddf589bd0717b", "2b3e37410993952143e5797093109904d8fc61d987beb39bdcd5b7dde7079038", "0c8f9aa9411f076b12734daeac92985d34f591ebf1712b7bbf5a045b6a7a565a"), ("1ee05a46a59beee77b7f9bfa4faff4840e35f3d51893b673d56146a580e55741", "1fd79adfb60c3ecf50390c4b80d69d5288102c7e4d506471d43c1c5cb545455f", "2bca8e095acfd4b7bd5d156fbf182c05833c6bd7d85db43ec2137ca0f57d90e9", "17b21e954746597ae1dbc198184f0cc9c0f4041f3e577d5aad68d0bc593de6c2"), ("18a748893928faf95db5627843800feb3c33f583fe25317569ee265e059886cf", "17470d927627c3e585dfb562a918b9bab8b7277101c6d9fc95c63fbf8a8a1533", "1da6f11a708bd632326c551c215e8cf8c2fcf0090bbf8d98fe098f9b9dddd780", "2a6b54b9c8da7ccaf6bfb8b239342ce9af7ff7c4707b09f93e46de1cdc51f35e"), ("2061295b0348a77a40bfea59f16b0d040c6d7f8d34d5def38c797d9327877ae7", "1fa48ba9166ebb6ba7469cbf0f5790a243c8f3f997dfaabec85a04b10b8c8146", "18fcc6dbc286b6dc5e676b862010c4ff6b2641a06c4cee1874f96d0f06f3ed9c", "211144beba173fdfc9ea3ded79a5931f7527bf204a06ff5cecb7bd495efed527"), ("2f7aef922a818eee1eadbec46ed338fdcc5b97584e9b232f76100b728adc453b", "1348d4c4d2527276bc432b12fba417d5841bed9b5ab0c9a20647598fb3b23c28", "23a21a6ee9b178a08e97a157d74a058e4dc7d300ab36fc5969ba78ca013076fa", "1355ed1b3a8d80ed88419c702cbc93461df98cc937c2d4227a92af9deb8accfb"), ("252e3ddd208906b14f25d65bd82cb2d38b9527ecd073a5593202354025d09ea9", "1f12e5694f8cf54288c6e80f8a7ede9bb5da5437fc9a7ad6e335e97c15559a50", "1085d94de223869cc61a7fe0d30e271fde3e376d7d5d05ceaae993fc06952faa", "01a24937d5ee646817adf52a5da2c25a9a76aba98a3715397447bb79731b14aa"), ("17e445411e05354c848f21f49681ebb7d9617ad1045bb5b4c3c249d82991568e", "115411424f92428112f0ce97dec43a902e0c644011a31887bbefd65a50798dcd", "07d31b6de785d5f2dcd4658133fcd751d84f4243cc2939773279bdbfcc39e055", "2667f8c2cd001885087f0de24be071a5c771d4c41dc7ee36e793842c2551ce39"), ("26074140c974349647ddc1110b1d35f25512cfcabacf290771f189358cfaaf62", "1fed62cf32532eac1b4e8d9ead0659cf9533f0d5deabe96b8891c36fea1dcd6d", "24ab37caf759cdf67e7e7af60492fa8b2b2f9ff794eff81318e7d6692fbe7e91", "134b2918d01d6577f5aec236667ad9ae77be5b13ee27dd933ff289d1f24cf26f"), ("12e8ecd6bddd92f33612b7f4937b33be551f0486d59ac3ebe22841587a8919cf", "06512ca98b099f9c785a6cc45a454791509f62b77fcf02bc75d447e574397a54", "1cfe3c6c5e81efd67b08578bf50000d937f40bbbe717b876571405cb1a7ff540", "03e1499297ef4a0de0452bac2182bca90d29627f56ae548a88c33fa033c4f286"), ("2211afd4cd35165c2bb83995cfc0a04ed8014fe691b57698bfbb569036453caa", "2e1bb4da96d53a917167e589f7ba9aa3baa85b371fe15ec3aa7e8d21659c1415", "0db849bc8a7b1e67ee5c250db5945a92b1f2f9cf06964a61d33d73ad80c1a248", "2868d116c4802074a8a1b117b2d4e24bd70ec41b380c46b206f7c187f6fe9135"), ("0ea7648dd48e5edde0c04b4f33539a3c10e860311c97bb2a850b40b79c18344d", "1144e65aef8dc8921f09056276991f86f90868c4135f551c95a4ab69ee4eb650", "18d758178ec846bc70f309afbb3abfea9dbc08cfc376662089e860edac735c13", "2f30522c5fb7a8c2bf004918b72e83e94395b403fdcd9bb063f5205fcb8edd19"), ("1065dfa387694b20fdadcd7f370c4fe82c5fc056d2413323fee27fe1f7e57338", "025befabb9c676caddfdc658a42555752f30ed78365cc2d8b66d8198e776613c", "0dd14857f4e0bca9dd4f7235e38b5b9a16982cfeaf5961675d2e021181a30066", "0d8638eecfe1e91a62ce627efb219cc73ce13c690901677863b96a7aa826b5ae"), ("2e9f002dfae1a815d0c1610030ee612f082a7d7a0894aec3e888ca9bfae6a8d0", "2301c886034f4fd571e1d439941a2ee5acb314c76da55bd7ef60d88298391f06", "2676f9031aba4fd679178f5016c4350567ef33bcbcd76962952619c7fb4d4c8d", "1a86cbcd5118bfb10e49f44074d2a14422d614c8a34d924ca78822f93f637909"), ("24a5de6c640bf70a5b365c06182760f205314824eedc5d9e4a4197587e47698b", "2ffade6b4f798338f53ceee5f2c88b203a03d43a6b77c204929464b97504d8a3", "0ddc99c3f37e775af6f3eafbbb5dd87284a92d9bf2b87bb2f78d5c911f22acc0", "2021a3d385bea4ede704e718817488d3856738769efd49b74d4bdf81a5ad6791"), ("2a04d384ea81d810d5985b84b6c8ff7e038be78f2485319a7e9403b43b48236a", "2e31367efd077c48e64bad8b5e457553fa06d0bdd0b7e39b85a9ff3993a0c199", "2795e54450c23cf21ab60475e838d425f02ee57a219c8f8b089d6ebd6037a7e8", "0f12c7d7a1f9a98317324430cc8f62f79e912519f9d3aa65235b66aa505e1b1a"), ("2b0c03bdc740a243cd905fcc82d2c24381fd5c5bf474aa51cb4c6190a71ad6de", "00ef95a04625e35ba9b6c06c17f90801edb646ee2cdd46bef01e8a89bc9ef41e", "02a464415fe96ee81bbf8d110925faf32f87bcd1719647cb5c083a49b3c29cff", "1c6e87948c8065ab2cfaf769337025c5aafae9277a499b1e13cdd84dab5d866a"), ("1792538726bc0f45f23f79e0e2fccf26621fee22d63e8756e03148a17b3d0f41", "08abade27a9a0940bd675bd4ba33ec2a5afdbb5de19b71c91ecf7976a4c41628", "073e0be5003f9af617ad4a2a696620273522bbc356a370c6541fa1d65f2f86e1", "11f9e60e06534f0253d0f26ea52799d25ecfd9fe581ef01c9399d20bacddaa5d"), ("14b9b9cc8f2be75fa9868adb9f9d1df68680f1bbfda540487b3c4b214ae971c5", "22f5a8b3e2bbc3950e0a31219c9542b2f42d6ceba9f81d9aa0c2b31b68f85eac", "038e07e16d1e3da396f5b3dc939adba06beadaa6f23b889960a200d1dc134ffb", "1e25294a8c9d3a7346d5dc749169729ca2b7993d3210edd892d32206a423dcfe"), ("106d4f382a6b3ec1d3c2c2bd6e255201f78c9f367d1f2b11ba2c2e6d6ec63a2e", "2554e7a3d905ec2df70939d18bfcc1bcbe0faa8b4432bf934106457e3f80e86e", "20d501e64d382318f011a3b6312008d41c25c11c40a30f60e6e6f7150c838468", "2cd02b39ed3a1dba91a8791819324c2b4aad664077407f3a4814b70932d06d42"), ("01a00292cf1abb044414e8027831bab020e77d8437682ea8274597f185818e72", "114169de515b46c61c6bfaadbf776547ebb3d59d6ed39af904fd8828617e58d7", "0af1b1d9cbdc9603dca7cd59e4925ae98d393f707b9fb5d6603d850c2cd1799c", "1300e979c704542b62bbb2d7952fffe864d207a19ef789134a2470bbc7b68c3c"), ("06d5b12e17607ea648a11da6243ba8aba70feaeedd25b3192bfe276f94bd6f1a", "2e4c338596548d6522e1df2cc161c86136fd9746bdb48d3f3f676554d7f9b9c8", "12a1462882191af96df627f5b446a39e8413be7a28ca5a88239810b2814d16b2", "1060563bd6fbd7774b375ed74cd4081695f05023b9bfce7fc1688e8026790bb3"), ("0a90b25a0860021ec640088a138ff858160ecce428a0c1f2f14eca6d0b22fbbf", "15ef2d00cfb92ea61fd9e1b02dba05e2a9efa625ae9f6f4c44618db4aa9460e8", "2350247858ee97d891b819206efe353fc5c23f571b5b23a53fd86f098fbc8006", "2f359a8223fb42a9aa1d9359276dbe3bc3975d60df250ab90026d6b2ea3f83a5"), ("2a41bd62dff3098f021286ca547266ae1efe59b4d7f260c3eb48195fe42d3423", "18124124bbc12277b7f7297d3b0136b6660ef6f2b707ebf7f0f158dfbae9b280", "278ffd0123bb89fc9c5e9b76c3c06f304cd7026186905f254aebdd926183a04d", "204dfe3a2f4a458723a6121b56943270304c7920664f96174d42ca6a098b64aa"), ("0c751ad39e9c608770b3b4a4d5ad8e80a5281226f4e1eaf79dfd8444d225c386", "16f6cd391f0bfd11ad1eba53a8a6a90988fb96a46deba06003f081499d9f4379", "00a9a2dd6ec1b86ee4a73c8060314f230b288078fa3307cc82aacebb0dc7c824", "2895d7bf43a3010c9e169bdb2efb4ce9d778bec46284652a1d368456c172c236"), ("0324fea7b77fa9efc0ec09df724c1e9117a23923d1566bc8ded090c765d899c2", "21678e9e609894d8589934cdd55a4ef619d4b0fcf85c19b63d3bc795b3ca3472", "0fe12c93d04c6e9da1efb1d3d94199643c7116c0f5466b1bf352cacccb8e2a6d", "29b1a4049bbfff8af9eb76b8f22a8562aeb075fb58a090eccc19fd516f1e4f53"), ("0f3508e6d184414776802916f0ea8b072015a4f87ca14f7b2cedb65e5b417c4d", "214f40b7389b3065c810c30c5313f66713335993571c7548e3db502aade90441", "2a0c2c13ebf9f68632cc9879598f2faf323faafa71ed0fc89512420219dd9a62", "0d22245993738a98f926c56d623e43b3de704318a78b9b46f1b468cedb4d0e3b"), ("29a88e67655136920d6e2916a5ea981bdd0b6219ec356553a1a66a2b4623b321", "0a0f2194694777a4178f7f6eb5eb6ad1edf23ff7b8b59835605d0e1a43fa4403", "012f348b905bba8532c5de99e39cfb2d2365829f1a143f0f637b2cef0d9fe130", "12bb0ac32fed8db321a78bb30f5243ea2536dc6b3df42439e7dadcfc51683d68"), ("19bccb337f7ae9c308d3f723967db4d1f28c265fc46e131ad4a49fa450cf34ef", "126f4b10987719dd4ea07e08c3b72631c088e402c6e9c980dfa3174a576b5513", "09e37dc0836c35406a7c25f995e365d2e7e6fc8dbe12c3afbbf65c32b70fed6f", "005b67aa892e4fdbb95c4880bcfb2ada860840855df9a1c20feeb51826c1d03f"), ("1c3af5d888d092a23e73fd2bd86bac190ba3d73b820dac0401bf00df491768fa", "0b4289d4d09e6feb16f82d455d8424dc72e3f14b1afd7b0ff04436bd29c5ea12", "273f454c983563366494b83678e824246211761ee93784c37755e7744707461f", "2182bf67ea0ee53a18d6b02dfd7a0ad64a27196ad56378eb6f8d2efb21af5167"), ("04bbaeffb29e54cc394abd9e006d2900bc2acde7fc227533d8777569699907c6", "2e55f396f43a409c77972d434f9d15d5a3760a7e87fb459519ddd250e6f0f403", "18d8956594176ad4461db2da4d2d7b71edffc6648d07a84060ed68a7defb96ea", "262aae47ebfba429ecb32a56cbfdcdf2eca046bd6d81a435afb09e3d0ee17f17"), ("2613fb06d70ed1ed0f8943661de314d693a4da7bca846db3ae31516268b361ce", "1602977227c7613f219baa6214412fd54b907238a3e7179185e7f80b3ea74d48", "292084de330b29deda6607208c7a2e945a8dd5bcaf621b0c1768a2322200f9de", "230d0f21f27cc4aaaf6e3163550d8ee2463eacac6a858009124aca9ed3d95fef"), ("05f4a3a1fb0f440566175f18001488cfd51766810b799ae17389e807234fa1d5", "13ead7cb648d9dbbf35a2ab80dc18b376985c22506402216571c32d986ee95f9", "0fa162ae6fb2fa27bb00af13e992a469298fd773f807f7285918ef3913d4e939", "1ba72c026d184f3ea82fb4cad4d116b5705c3203ea461fe3185f53738296edb9"), ("2416dc7e744b61b2644dd476ccb127cc9dc44dfd82aee4c2a0adfa89614e8963", "104bdd0eac966d92959308b2d76554647964f784bba5467ef5a36e623100086d", "12dc0df2837b7fe3a8860c6d0918e6c62335c76580f7f2d6734c241eabd01368", "1390daf28857bf775d3bf77e7681058a84d696cf04b7e74fb917486127e350b4"), ("0f0e5f2181ec8a9acdc7fbbf2e63ba621f2d7634dc30ca80dffe843eade6bcb9", "17812191cb1f9791173cc04198715ce0a69e71f163e602fdf698a68fa2877f79", "191925edf5c5c5fb5beae7f71c74339e02434eca16a374dff2e3499f8472215c", "03960fc529cf216ba9c01cead5eff84686a60cc0a00a5932635fc9481ade05f5"), ("0372806baac62bb24a4f911bfe8149b8471a7c8a43b9ea6df802f0538aaa82d8", "1934f5520222fc29c164b5d9e8e92b3437b9db914c9086508aaa863875b597c5", "0f9bfaf4ddbcdbce65e3dfe2bb83f75d5753dad878280cecff621161bbdeb504", "014af9ba70d8571706255c9408b6e16a5d5c84e0c14a2eeb02bd15f3c3ce3047"), ("077c64a8302273693f60c13a748dd6d10fd8d9da499c2826151ed3d52eeed7a0", "0ab1a517a8b399fa9794c64bd3a3384b045dda5ba9489df98d78f1e97425b6b9", "1632d3c7e483290f93ea92797f7575aa878d908d487dfe17cfcd98d88b6d093c", "261fef7cb7301af3f13570705ad60669abaa2e8c93500f5d5676798ed387320a"), ("2e6a8d4cf0dfa41d9497d0fa5606b874b0f3f034ad49d58fb16222e2cd10fc2d", "0d033d6afccd55b602869d919d7b50352e2fb5f9e59b9e845ee9a1326b8952ee", "139da3b67d206381dd79276b6385c13ffc5698e5df8ba08fd417d85a4b74b317", "2abf3ef8dade6a2722bd35814faa9d76b80d5396fddde72cfbe67f40397a66de"), ("13c5870f74cb029a5f18220d098d1f8034ed15d4b359924cce5c12d22e2243a5", "04dd30a51abeecdef4e8d3af70e9548f583699ba9ce2dd79145f931a1ae30cb2", "2e6942ec50648601fde7b937b6212e26967878fda70135f7e1af475ee97c5bb9", "22cb4f003b3eac6e6af640f7b1bdbc8894f1aa590d8f3b99eadedac745077f01"), ("098a9a70197862e803544ff4754881078a0b330d69df21db9acde816b147e6fe", "0071687de697ee4f432479ffb629052ddb77fd0e392bbfb37318f53160e41b9a", "03c2d3f74ff7eaf0f6cc44c57fe491c881e8a7a335a92873e00bad55cb9879dd", "0fd8af954341c68d248316673b0fe4bbc5e91d5691658351ff98050c31a7826c"), ("2e1acd36d650f7197ff7ea48c0cb1c9cd08ff42140685220ffde948cbc0463fd", "0bba234e905519da99ac2c8ba5f04e01ee7b8ec57cd685195efc101a9a2ce13a", "0b16005e7f7c11223ca039bb7ef1521b2d3af1937cf8bd7aaf89ab031e5af0d2", "27d48e090b93f6b562d50ba1286d5beaa2277a4bf2cf20dafe690e4c2a84a353"), ("0ed6728b29d9fe3f15ad49dec7cc1b608764b40b2caffbb977a903a5b1c3eda2", "072edeca2f68da97f4840c2f6b737062a3afd033654d95547e2bf43de522ca8c", "2e7d8c23ab0c938e4af461f68184dd1c47b3a75d6dc6629fe630a9b1105c4122", "1eef15adf181afa80eadadbad8f23981f492eecca26ad76d74ac1f902764559a"), ("0cad82b33d47bbd19d66c7f4f1639c9d5e16a2c81f9916285bdc855ef9dff914", "04211cb5fc6060b3a0c12faba2d9277cb574c39a9c818a2741ef225ac6002380", "1c0e1ae1660857a6d9c66b2bff8adc68e31fa19bbd7e50dea203abd3197c511c", "116d7d41a47ebf5e40872bc5e6947c511c82c6069c9a9cf19e136926ebca6228"), ("083972e7e4c0fb938ec0f21e33ca0aa85c20267fa30112c35eb182a04f264185", "12bf7459db0e68bb1e5a2101eb791a513591006138fd012f4f22cf4a382e70d6", "0479d03541111c70a68468af4e7d1239175886939b51b31d03277327847ff5b4", "080417b573dcf21c73ae25125f4ee0c90cd344c2fb64667fc491269decbf3ffb"), ("2e00dbce0d86f12bc15dbc397675d6cb7f336e277494f1f09e71254128bfbe16", "2eb935bc54209a3c8fc5ec64b2bc02375896243c84dd1745faaf3f1470ea12b5", "1bf146477ae32964ac63e4dbfe0a74c118922ece46afa9fdba1297ebb57b9ffe", "2d9fe2b45adcdb6f32c9462411c2a266b1d0d0ada7dd1ae007cea0c71c956f55"), ("11d78612f6132b4c9a0b6a6599ba1d6b208050523342354914d60396fba04a81", "12446ae694f58335e65a02245c005aee80ec4fef774d68bef80871d806597689", "06b11fb5bc4a28e1e0094f3fde9dfbd393cf40a45b5c9c2fda813ab1a7f0e253", "1ca96b4639bfed3d85427a65fa619fd2d5684661d6b8dec71b04f6b81559319d"), ("108cb6068b400d5c30a029a85930e1019dc1e6350055b51e96ca826747128348", "1d0b0a63ebf3e364b7140440fd5fac3b363f409896484ac367c8547b015186b5", "0ec3d300979aa06de83ca48105187b56f9397dd4ee2774b6a8081f6b902de373", "1e4de59ae533b121ba69439267741bd0dc1ea2fdfdb580fec217ee8c52a26680"), ("1d460641fe333540e3763ee041a4a54d556061868b2b1ca6a80b2b73d821939b", "18db0cf5b7a2ee7b46ee649fe1e8031d2613be36e2225fd76b75032c80e98df0", "19c9bfb600c7992c6c250be388231f7750d079ea603f7029e94ddcfb51411fac", "0a037abef10ba6a4e36727380ee8f04b6a4fd66ce355f9abb926016b5270e926"), ("07132e1c16c81a10f2dd4c651e43148425afda27cb9043351dbdd4c4ddebb832", "055b741121eb0cbfb156536e18666880f9c8e2b8b1d09c108567ab9c518ca9ee", "0a6d5fd1f4bc84267df61715c71b2786c48937b1a84ba9224ae4b0d320f0ec54", "26db2d90eec198f2611f31459cbc3f0b269eb72a4a31ec1662cbe764712d2a06"), ("1167a39cda48bb957f28804b00236fb73747a7f6b97eb3f08566a54947b975ff", "0b58c8b6897ace3e8541f9968a8aac28ee631188cd8d2958bd5411b49b3f4c22", "17887c0c6c9ac4d7d0899a048c24947c58a8f9838254f043c95a3beaf2992a5b", "14576c4f6a5eedb1e6975f1e8a00b95cd91a541e05a3beef3f5c48f9bd2958cd"), ("1cbd559c9977bc99d64d4fc3ce5834ad47c18098338da0ad533360f4ed9a7d15", "1c8d806afc2ab9a91375db8f5139fb2f638e069412853cbbcd5a4a51cd508ffa", "20da26503f231b64f919248deef22ea20efc90af699ad7fac56cc032db1c0358", "1745fcd9b70a71293ede52c3e5dfc3dda349090a38a570075622146bac3970e1"), ("20cd930e04f0d67cbc338764b7dfcfa48a2ec1f600c0edee13da55854863369e", "0a0288cf7d3423af6af9cc3998d2cefaeb0b39984776ec7b847dcac58cd10080", "11e7c4816c95f348832ae099b7d72c5d16eafb33103770af88bd1792b0781c7f", "1698dad8a7902ce6e86f6c951400ec113d0d859574fe961bc8019f22569909f4"), ("05e6a04673bf31d1fa1609ebc41a1aded5b0a13f56d72e46713ce42b822d418a", "26544a7219cf89ee79c64ccacfd0a5156d17c665b1effd9049546f61ad8b8976", "234a881aaea430a0cc1a5015ee56a0c7dd91391a0defa8dd234a25bc8828f04e", "2082d4a7459606dc0047eb7e53dc8a54cabcfda8bdacd02ad5cb01740d94304c"), ("0b510937d518d0243248444447db81ddc7ca0c03334169ea0a8016881d7d7517", "230480c8089069207ad0bbbaca91068a2283dc23627b28fdf615a76cb31c07a5", "2d27b1175997af579f46b4cc0e0d834bc74f29192f789c5c7fc0685ba50c38d3", "25fafb98f96c7494cd1f503a3faf35cfa76aaa29b6045023ba39710d0bb1bbb7"), ("1c64122dbf4f1aaf589459fd050691c9d0c3046b242ba09013efeddd3856ce92", "16b34d0f54132f1fe92540d618f8a925eedd54dd216505fa8b25fbf3c7e99a85", "08cbf7c8a2b684958aa002934d846a9816216ea6e0631c1b80b3fff077973351", "160218f1317eab0517f971b1dbd8c22df09eb04c9fbb284cfb11ea78a14ac450"), ("1306b401370d4f5883f6d9801151d6b59e5dcd6a4da47e23d0edb5f486e353d2", "054a75835f6989d419495599d764429f879d01ae5cd1308551a138f31895fe56", "021b47d3a1fdbed2775945a51711527b0a70444ff799b49523009d5967bddbf5", "05add8ac0ce1a916f558ae0f2f7f1cfa8392196aa42a384f29c7b251cb11d7ac"), ("2af6a0e7fd51e11b4050a0f56a2e750ba83ca559f01ef505fb2c7a684d422735", "2c752af9f0e119dd10cbe84ac1c84a6d405f60eaa38de238cf763967df579c2a", "0a306666b2c1791dd47784ea1286c03fb8e9ede1e888a2843fb33edff56aef0d", "04f96e29348293de7d9c125e3d0313193d85c69a233d64c251ce4591ce47c1f3"), ("2b24e67623b2400c78bc438e4e6de6e8f4c1433b56dd5c0f5d46b15b64bd8d83", "243fd6a70ef05a4fce38a99d5618f80316b140ddbaf6f60cf00b712ebb9b2a7a", "1be069532807d6bd2e13bd0e208259dde174536e6e0207e536b09fa148d0244e", "171f86b817117d262ab16e85c2efac4d4a9f34c76046536590bbd714b2c237c3"), ("1dfbe0587aa6f48d0afd44c0e85eedce6e4cbc3c9dde73888dfff725510b29a8", "1adcacc614598d2bd5f429f9fa02069336a319d8f77002d8f43fcb77e7a36e1c", "25cece3710af9f3372a6c1289df8b026003f1c0c0cc0c7a698c531590ebceac8", "144b9b91ea8d093def03879bca33895fbb44240f043c9ce555428ead060511e4"), ("2a086f6189f5bc5ad7700012208931f5bd9598d13653b5c25a7aae8265c4580e", "07bb9bf92a29dd002ee398bf232294cfdc050c0cf264958d7c9144ab2f62eb5d", "08dbc6e5304cc19620ee179151dd56955d21102c413dc3898d873b0f3322a8e7", "1bbee097f554b1ae5e6a5763006264a1c3f6a03db33a383a89869d39c002946c"), ("1dc735e3e754748be7a4109e76318da9232c44a7905c97511e6c67c4f0c53974", "24d0e5b8373f8935888afbdc6ba7a731567c0398e4b716149bf7cf982857b1af", "16115e8af2a965874d0dbba00892f282e229ed7a7115fb1ec2a6108adbde97c5", "2a402dbc93fea530a86cdbe4c5fa3c11410d8b62c0f123cf72c29e74de96e0cf"), ("11ed3e024e40c278681dfd9bb6888b3389129a363210c4b33b9b213aa8593db7", "1330c2b570349ea59ae774b4edc06c161fda4f8119e35837d8b3c5f3e86d7dc8", "0c5203d1f1327d02ac0316693a0db1aead5df0d7402609ea284ddbe67d220ae5", "1e737c4682baec074cf56922e4eaf3267cc315525f7b04cf918564116921802b"), ("07b0d08bc93718d036a3fd43d4047409f459cbf0a82b14bcb960bac395f52ced", "2829357f0e9a06a5b9ffa7acbf29ef94b34b9c979cd7e0c0cf3678fef0c9b583", "1ec73c1be1adc0ee29d6a5373b94d61d012af7133b8c026f85a628cabad42f34", "1ce33155a844189a372b2e9c3c86fd9ac41f9066cdb0e70784001865443f30bc"), ("165317f08d0391479543a65ac0d7854e521dde62e339d11de9a615fd76dc7202", "08cb1450fcea7acb8dfa5725891853810291ead13feac4b5c44a7fa6f441816a", "263c0d7c82ba2bf3f6a561cac444bdadbcd70aa758cf3c2309672791a9ff8df8", "198d6cf55f7900343aca8530f425bca2de703f6c9bf18e2f510039f89cb4fc6a"), ("1be40d484d08dea801ffd1d0f52aa9b3a4eb57a913e4cc107d32b54c99d68e02", "1ed5d40c35258697ca981669f547df74916b57b907636b365fcecd116ad41674", "00ffdad47431c2eed7955ebeea351eaa900d7577f5663c16b99b2e4bedb3404a", "02a267220b85feb02d5bf39d5e2f4b7f2158575adcb361bce6faa5811c0eaad4"), ("04153bf9c08f1ced1a71d36d4e5e2d2ee989959fc6b63d5c16f2920d3c14ccf3", "00bd46f79ae1554553417cae3ed66324144faa8004e2b8b0fdf818936114fefc", "0676be7f19856953204e1c5aa4a9042e18ac0776f68290701da5c2e4c373197b", "2a4a20f1fe1a81d397d3ba5f73c157efc72d2adb0db47a5c37cc4ba6770daa38"), ("2a45ddd2152be22f1f161e165651ca3f85e4f4f0434b037845f536668e84d90b", "23ffe915aea42ffdd21d5bb1ad462003e7a21c879c78ffee3e11b524ffb2c294", "2f060383a10761019f8df7aaafcad5505cef3026874cd7d2c39d3e1c2e0741c6", "0de9a6dab789aacf0169cbbbb1e8f0d9bd5f6451700e95e7f6f755f29a463dc6"), ("035068ada4c50ac23e7b9899b01d46fd64a46cc187695c1c928041bd5d12b3b0", "18b082a73bea12b37369e1f80e6e4caae35ae34ee018bbb184456f44a169da65", "1e9a85a011b7182b05b2ff0aa14ac1750bb9f4f700b5bc38a57d5fd31d8f0ba7", "122d1734fdfce4285a47fa3d1f75005a803b6a60e3b8599e7c39bc780a877e5a"), ("16333804ab87e0f3e4323585b8d34789b1aa70a0b614c582d6081ac768564a50", "1aede3e54cb40fb95e919be8edfec779d1c5f83446774dea64e458e70d8dcf61", "054996a68461cfb14dbc3de34e6766e633b100a659523e2895c9107113df9791", "1efeba164e1d32e2ccd661ae1e1f25c486be318e61bcb2ae52e95fce24e3aef6"), ("22c9f3425650b8df7c3b0f5ed824ac80d5a0355aa6ff3ff608bd634c5c77e135", "036541f46923ca46d006125ceaffeef86eef7818fb50c67389969441dc6f9ae3", "2596cc500e7f1f24a7080cf70cbff5bec530b1409505e9f63d3069a6c83e3f61", "17674a0771b46b16f50ae70386f6a80ce3712f7fd87fc958dbae3b2efdbdbf6f"), ("0a263e835aad9ac1c2cd88ead71cb0ddcfdc2863bc0699eb1cfcb5da29ac3e30", "2cc95171829170f5cb62c79974b5e2c855860ee7ec84fb9fdd49212490908073", "0c4f1065ead3c920cbeec18c4e9dacbbb7e8b7b1c272b2cf5601d20cc867dcd0", "2eccaa853e3e8a6707f3edcda2645b702772ac669745779898d676392af69636"), ("1a45562cc8ba5fb07ae1a936f0edeedec0ed4217d4ed8a5b077414640fddabde", "20af8af237c7f1c7bd4ed7cc15f3fdc2cf611f6eff71832a4111e97d397959c5", "233cd381de220795b688d10aa05d43167b280f36552e8617a6c9c9930e31f594", "1009a39ef139f151ed6b27a6e0972e37884a60ac5ee538f7198cb7bc583770c2"), ("0652c1b8fa839cbf82e787a2cc5cd2450b881779cbc1b230638d7c535255a9a4", "05c3f77666af5b2a6275cfd9578dcc957da01defd0be773fa995a364d615631a", "0eaf0eb60c64320e60d06fce945c58ed7db280409990eb200244687fd0069b7e", "25b99ac1f0e9e253865704f47a660f00a5b7e10f71862cb840b654ad0722c2e8"), ("1241cdb347fe0251101185e9f6609f6d19b30b80edccf60b09f0a62cff7d831c", "0c9215c1f3bec739cf17d4f10a15497ffa1b09e9548ce95f0ea613acdae35ae6", "1f831003bee9605700f8d270b8431e968fd1e42e5934787f28d95631ae873d1f", "0c9a2e8b38e82e08c0eca7b06b770b988327a031592da2fb764cac92c85f07f6"), ("0c0170486baf5d1779c2f63ab629c2eab1c7cb35b929bc629765c447525fb2d2", "27390db782936574535f11e66a39a20e7019c74644f8580830b68f7a3bea3110", "125d13def0bb0015e1a23549df7bc07dbcdda21a1732a2220ec6082650a1e092", "11708e5c291eb1475141fd8ba4b532705d3325c556864a073d3687e2113e195d"), ("126f0823a08d904055926a4855a9fd1b6fecca5c8191bfe67d28feaf0fe666b1", "27bdbb5678fc2ab5c3ad586804f14a50d0f8a3229ad3a2d215eb9052cd8b8bbf", "087821e4a5c050806820bcb8bec8aa8f5e6b7badbd992475250031b53fe8e3c6", "02f7ba72ebb4460d2adc76837dbefb1f75ad726e729a91736cb65a04ec8cb8f8"), ("02dfcc0c40dbe36293583d713cb2286740306e506fdb4f6597dd328743dc3867", "2abb301605f342ef4c5731d8f69b14296f4fb16b7857a2103df3b11004a69ff9", "1acebc08206467b9808a3fc5b1e653264f78558b25842deebfa98fdb3305fa62", "2d229e7bc4303339ce12f76cbe9318a9c8a76bfd2b4ce1d4cb467a257c444905"), ("086f9b9994bc7b30e4d4667e5151ff0af51aab256863802fb694df1b7c8316f4", "2a9278df93f20500b9a65e885ea5b7c4a89e6fdbece7ad176973933d18d50bdd", "2d7dd784611400050f2626f5a44f30879ada26eeb460cdf9c77a701a1d27578d", "02bd9730b77dff6577d0982fafca853aad1f6586b6a6c25f1a84b77a6fa68948"), ("1785d0e77d4ae605767b836f26ec04d0ecdc9679053967ed162bd66902931a80", "2b14ecfd3cf147006d43bacd7f78e0d70f542ad0be191d2f7778576191fdc7fd", "25facc5b9deeb89556abdae26e89ed02a88eabb8a44006063ba212558f17d2ad", "2e799db5ba1b180b6a8a54cf6707cc0f3e7a0c050185cf2b194e202b5eb7e46f"), ("0f6e3f33f3a8443ea5f2ab094676a72f0d269f40dacab65b82b694eeabfb90ae", "0e158e2781627561117bf91e44c67eb758a3faaf87313da48dea7306bb687d9f", "22aaae6535962f3969df02d0b41ceda2eb0636b68a7edac5243d14d58c1fd700", "1a4c8aeeb7f4da5f5de63dfc23981a3eb327630794a266da90260c818ed8a1de"), ("212cd9c224bf5e96aa36a4f37bec673b8e7c91fe477aee6684e35f994bfa3b41", "1df14f6dd4e65e1caccd10b757aa4f3693e2006cd054a69105af3394c136f864", "0205ae2ca9570b02e6e5ac8fcf415870a06f89df64df93ba47cbd23d13b7382e", "2d2e52d00aa9e3745d14f0575d02bf4deec88121252c3fe1166b1baf76395d6d"), ("262c4796ad85306fb556898582ffb7a528713bf870a0f3bee5cc5dab60f9fd4a", "2dc46dd8587b49c8af0c07de586be74ae6c68cab0d1c2916bf73d8f4524f2b14", "2e50ebede14cfe8d251a7682a36e014b5aa8653de5d244390761c25fc8087713", "23b8e33f64496a49c1943e8a07f9b7bf42a1fe81ae5cd8e2c581f1581cf0223e"), ("07c160c31450b45cfa1aa70f03d18e5f0075e7cb6003baad89f40f4570f15561", "2cb97d9ed6fe10114143728ea15eb5ff75238e25be8d55dfc9d7d6b040812a21", "0084395180478455e91b46226c224476ef35a70ab6fd222731bf2b88fcbc8c5a", "08b10329824b415dee343a94370c16746b4598236f3aa5992af8cce7c80dfa42"), ("1c0e65864d0ad601588542417e9befa5cc9badcf4b4e293f8180e3c085100dcd", "1557758443d234bd70e3b4adaad310cb8a80650238d97e24aa2fb69cba7a0394", "297fdc9730008f81e8b968be7a51b4ff650481211acd461d6dc513b5e05a7348", "2f610cd34fcbcfbc37d7dbccb928cec2c2136840d5fe78857a09ba9dfa6f5e44"), ("00f54b5a7c4b76ed8e528a59f3c5151338c5f5fd946c320510926c58a79ca2e3", "2bcd22852c248f99f9c12646889ea2527555faa30f30eb7a5f2584b7a7f187b8", "29bb2f59c82af2f4db9d2e7c1cfb3cf9e93d5b6315e30dc1420536a65471dec5", "2a9029ae8e91362fa0873ba89bd79c70fe77c3b6ee89a79b8c000929f33bad7a"), ("2981f241fbb69fde010f73e781cd2d34843938bb8e3d53b1be0079e53af696c2", "1748eba3d8ec690a0d32bcf6c361df906fb51844eb915b6fdb7f66b182a68e15", "18ccbccd3f6a3123fd5e6d86742186e531a50c5a045f80b1cb2b4b97959c8d4d", "2223573b25542988309b40b4d6d9ffcd40bbc47abc0a42cdda30afce089466e0"), ("1d78d42250bba97b20147c0d124040227f4a099f36f1bb49cac46290aae032e7", "18aa387f32d406fa9d03ba27a67e466f804754c43a74de762307d02b3add1b42", "1567bfe074a46e382fb957472842ab547be9b02e7ce74758ff975cb969061d5a", "1ad3db1547945925396efbca7bff3da0cd849478a6ec7f4534312374c5d4a5d8"), ("0fa54d091cc230c2824abbd1f52a80cace41bd494a3f31b80b9555766cf51c74", "0cfa39d08c8a4386e368263aa656acd118d121a38aa379d594baac9cf91a76e8", "2f6283899d08285dd409ec28d485f65c8b75d9d39650d2b45564278c840ecf8d", "1b3a93e4481c0a63455fb3d5d8f53fdaf4831a4756e69d60c6fb650616ee16b1"), ("1e23f709e474d214542aee600fedb48876cf9773abd1929f8eb4c222442c0bc3", "2ffebe334564506499d9dc6abaf1649ca230e781cc263a48ebd88719b41c8f96", "1925452526ea1a6bb9ebba8a2c59d52094f1eca4aed21b2a6ea63b564a2f0ef5", "1ceea7471acfe55fff4984923427cb6d706c2b1aeaf9762d0fda838c02557f83"), ("04189571034821163d3f0f4f6d155c65b31ca38ac4a45be1d066b6e5f71c8f38", "180eb431d3d69d3844504d27f0be45cd6e991ae48f35a893c44818636bb17720", "0c9d7331a6ac6162abbf879e557ea6ae8145ef4139a8cb1274351b16ea2393cd", "0867b42fc6db7d24ae6bb32ed47afb6e77840a6f2f686987d2d482187b5401a6"), ("085d7957d90184529913ac2ae8c3cf0e4ed667d90a14fdc16b0c7e727d38f3de", "27f123a72feff2469e773a15b37b09abbbc8f77b23bdaefea7fa0c47f5e4dd0f", "0ebc25eed51924869becd26bef7294f7ae21f53a572ad1fea44c5a856470fbd1", "0562cb2825f5f53d9b207080a194c728f333226edc10579bc7891269daf04783"), ("019b633ca2cc778436f290827d90a1bf3aa78ed35c26f7db03c6a557ca9bcf27", "0ffd96099f7553879bb24ea06b8011129bd73df33b582513b0a644b6c77cc3d6", "1d0588ac088ff612c5b06d4ba74454ed6dfa5a91e3304fc38c33efb3b33db2da", "1540c92fe00dec1d0da8de17f3bc9f3d20a2564fac1fa53bfbb142e5c486da4c"), ("04e4366ee46cdae0e073663a42715a5d836a457abc089a23f0ae2d477bb33ddc", "11485bccce08239c1aae6f8c2a01ccf6bb827cf5a6b80fd8dc35c18c0f14977e", "0891a578e0c45cf341f352cbaa75669cc0e0af3e8ec319bc4159d353f7986302", "01092d9810ade005aa1fcebb951e05c496ac707c0765249f36c24ba7c81f282f"), ("1ed82c40895a26539d596021c0dc4c2902e53cde6a7bc1d885b8d06f0e08c5fc", "0e38efd76973dd189aa66df0edcbceec9f258f6c55f9847a49967dbdaeab10e6", "2b92c80822ef0edddd77f7ae8689e66143b6b627845f59c395295fc483497f87", "0fb39e45d6826e4327b50a67ab0cfdaf9ba5eea9c87103b00582839f009b617e"), ("239666e8c62f9db3820fb25abccf614aa0b7fcdc6bcb2803afbcd696c525f05e", "05f6814a0a14719372cc675cf97a752b7b7c3237477a90f18f821247b2e8394e", "2d5058c78cc49162cfe6f5c31f35c9635cbf4d92f967cb518525b56fb1c748ba", "1127c44ea811624b82f43b1ee7e4eb90493d112e8d37266460231cfcad6805b1"), ("040f9b51b0a6a6959b1d76be0ee7f09024891db163e7842ca3106192e42cc60d", "0f95e9319f568bf8588306400021c14ad637419f36ead937afe27f9a953eef34", "255a15f61278e1471abaca0c9743e6465c2b7b4af9d9db75bc55e5b9e919a251", "1bb1466c813ea0b4b9575f0248a7a0602384069eec25a00bb20358a1134e4382"), ("171b67fd3c32528a7e2e784b1f7475cd1b6b4142ccc450b61ac79afdb5e084e9", "02393b75ada2c4f6c7b5a9b825eac3141598130ebb60ca21fa7c68e7eebd9267", "0bca5966e394a5ecb399693e6ef2479e10f2769ce270efd8d48bf35f657756c1", "085175c84ae8840cb4c6923fb0ce0b926956d0bb7dd606f38b55069dd14cff85"), ("23716dd6058c5451f1c082bfbed95e91cc35705f6dcc1250debff2caf344fb0d", "2934c27af072812c738a6bd6c9869ecd835a8929a1e6b88eaf41dadafffbc32b", "0516a43a9bb684879429253b3719ba2fbb3f0870e3b40624834b5f7f6a51aa9b", "11c352d225666c57bfe4e6ea22037f65883fc15190a50170f2d2511f8d67604e"), ("1162b1eddcbeacdaef385506ad6db7e0a9ec46c12cefa656c032a88013e90257", "064619814c0d4b598e84f0867e0d74df3df39219468198a11db579be7832760d", "23842d168c3761962c643e8dc3ba64ea4f3c324e6060127cd84ce1b77da63512", "0208b78b258816339f711f05d28b99db984b34d249593f6c74f2e9c83ce19643"), ("227df8f12a80cacc346c0fa39e4d3f1b81d069a4fd387cecf17dd63dd7124886", "10c1956d0197aa1494197a33846f94491ab28fcdc950c8b5c76af7f627e8605c", "04321eda1bfa676cc593f6f948d7e02de2333c3da281bfce49798a309e8b9d07", "0ba720b37749312d906bfbb7ec21eb09ee662cd73259dee8abd9c662bdc6f0a7"), ("0eba856ba845206e44800f64cce381f2fe94b5e9a67553256cec7e692e4b72a2", "0ae2c058ef7a6fb99c76f545453db692ac878ba37fb583ce2cae75feb716df5a", "075fb10fd8df867f0df88b0938292893968d178675fcd4f7ca944dddd030b6dc", "2f68d240cc779c5fe7ccc6942ed849ce5142a324dc4dced512a1d62312e5c348"), ("1f99c74b34fffc12031743938667846548b304028e347f0ed344829f7b26a1b0", "0f44d505eb01af3517ee5ec52624204903ed0dab405e9e7af23093064b460e5c", "270e675df849a025d69564360b8037a27f53ae80d757766adc598d8399e4357d", "2b871b3de06acf74a7cb7894519fb4149b875187edffa8c1d0eaa02c8dc36073"), ("02205c73eff45ca7291a23409e6fe423a5629e2317d6363736975a1273cc78df", "3022a98e444b4045424a87f6902ea4237a775ff99f4b16a8dfd2c215e33e279d", "0cf7a937e22694d8ae3f08c6909361c4d97e1e6f7c4bab60881d3f8bea712f39", "067e159a49cdc1f039b826fbef213d031611adea06a63633a9faa15576347473"), ("1567d276963d5a15f42fb8db88e192eca5cc9d389088885678ae75d301fd63c9", "1e22cd85982c5b7f4d4217e1f50e4485b8bfdff173678da1278e8f614059f774", "13e36f07f3901b784a518e822cba65b58b57720904254a490d95898cd1d287fc", "1dfdbc126b8831487f53a7694817ecaa5c6e59590ea0bf48215cfa6223981cea"), ("04042c43e6edc56f6356b95834062fe078339be5e8dec7072a9a3155b6e813b6", "156fb22047073525e4b1d4230daccfeb8db815d92b7dfeda649a20e82df0dd34", "235e3ca93e58493caf5e8d11703f6868bce30fd52b5b322bf5c1b86ad0c3d5c0", "278673a824df4b577d432de532709895af04ef83ec16f237246c683a31fb7be8"), ("1abecd2b334696099fe4cf6de1da016b8c210af97410de3a472dfb71df6669b8", "11d8542da1a2ee21d129613f0f76008498dced511d52633c0d005636bc561582", "1077ed015381c14cba6c087e2baa536f8acecd515421c0931a4f4cb69bb0230b", "08ecd845fcb69c2a5cb5fa0a34d2640b9ed5c98a7b3d4f8d104178df236a03a1"), ("1da73c765c00467ba4b82a6be14cca8e49a07ccce5b29c0d8c5f39f3a1010f46", "1ebf10c45be2fd1e6d1f5aa342a2eb0148dbd91c1b6368e7c245e92e7ef1454f", "0df40ede8babd94df93efd02f02d86acb59c9c3f7771b5578526527628d0f39b", "28f477f2c33ef0b5eeb828f547f35338883846c9ff2302d719df648085e12da1"), ("0cf6873812712a3509ec28086831a8d1443159903bc4ceb6bc2691b731f536fc", "10cf4e1729983c5e15cc20f4cdd661503d4a1e09ce27cb5bbf1d01cd2ecd41a9", "2c7e8343300dee6ece32a51df1e6dcc34fd3f980ee06321029e87642ba972aa5", "2188e06046b8b09c4bbfb9fce172d6d783f67a74a1fc37070bfecfd46b5b9772"), ("05503a9d6b8a07e179b54c5a3aa52296705c8028f6592e93b1f6383bc4ffcd14", "2d31009e5ad1c16b42ce809f5302f994a3976fde35811e1c27ddfd942b915e85", "1ed3cea6e885c72e049e98b251bf3d7bb23a0e6fcf8a1dfc38d5f1a5d6854cac", "11d0037a55155058144f99315a470ea286ca0c9f7da2521a3e246c27f75bf873"), ("212512b4a60d00e2f482caa8d1015167b8b5415476bda77c032b11c7fa9d76af", "15a3a7cfacaa23f32ee75463fce1c57d24151cd87b57612962a7ce210d4b8dd1", "2d35b074fa630be3a5751053cbeac236bc8511b85272f3af2d0f095aeae38700", "1681182783b63f771c7b250708ec3c8fa880b977133f16a22a39500b8966a73e"), ("14b9884432e32f996bafc0f11a9a7390f58a5bc0b16f20de098ce93d629382a6", "25073d513a654d94d475979c54987ed160347ca4a1f9a6d5d2a18ccf9108a138", "035ba60b60d1f71d4439ee2b4e1df332e05e96ef47e4e20ae748621d2d5d6633", "1550b50f4ffd45b2abd2259b6c4a3f0aa1823bada49ea4da379b256ea7935e45"), ("1530e0d4841210c96ed3ec8dd1833a3bd55c5a716b3d8aeda244a7056dbe652d", "152ab9de6813257a12097d2b07bd2f721fc356a2592812fdfe20a74b07550e21", "0c353b46704d48209ab0226da6214e30b2734ef4d203dfcfb348f3d48b6273d2", "2bedbc409ecddd1fe4a043dab869aafad6ed3db14268f68efa1cf086fcf7233f"), ("1b320b06c6d03066aa07fa36f7ea0be477be013c93cb191c2746846320ee8f0f", "1db89e6b22d2aa6746d3513cc3112c77967d81907d5cbb33f1a380ae76e1eb41", "14e03882de37e1d5382f186df99f5f397dd03aaf804c4b9a7ce1d0086f024e33", "068666db36625f141b5c8a22abf48dd1ee39fa43c0547580a878178113e7f43d"), ("0ff2ccb8e91396bbc5c8e33911965d17c0dbe202bcf931e081e55c0ecdd2fefc", "0d3c7c9bf184c4e968e4630bda047e61e7921b0fc18a7ebf8a8c32a8065104b1", "1511ded4323bfb88aac2e079a18bea76258528dc13a27367caa3fc8c4a7d1942", "01ea40c45fcdfb0af39560f2d7fac4179e73416400639d425f9c2a74527c5419"), ("29be2f396bc6be168380be832fa44af65a0b84536cb283e25f218ee6b267ad14", "14c33b835fe69c0e4b41ce9dcf15db1330b58713634659607755a15fc46dc600", "139086afc99f88f8001fc853cfb921afdebe15d213094edae63f7c633b689467", "253f30ba3083892410b96243871b6d737fac45aa25254d5cf4d9eb67cdc84f79"), ("0e2836fcf14bd5bb5172be5cd49cee577adb88f913d8a53c3dd292c3e401bbda", "055b71c1a3249905a75fa415c1b061429ebb5b5331df0d67c08414e926ee0328", "1f19840442db45851bfb04e942d33a041c0dd23a061131eb95a7bdd95594a027", "1556b2cba6b896ff0af807affc3c3db116bd86b9b0667b469eb7067330e303db"), ("2493b109d3eebc87616062a331f0c1b8a68cacae9357c305e2df989bcaf7d129", "129589e990951b38138088b77ca6236213128fc022323e2b9963d458b7c0339c", "08a92442dec2600de60c4193ef0f0f585957a70bfd4375942f44ecc31fa096f7", "2967711a1421386589cd165b288dc23195cb029d67dde5622ae6473d57842ebe"), ("12076e83b8740a15cb78a83de09bdb2320a0c08f3d72f48fd4b7e521aafe86df", "1b5a5a3f49d772fcbd2e6668c2cc03c556789a0f98ce6058e089a97c9c116263", "2ed806fcf826f4e2bacf11389754c4914e646188ffcc40b42f35dd450a20c2ab", "18c75c7e49e3f102eb192df2e7a5b1812c98d6bfcfa46cd51afc2ef2e0164eef"), ("200b120f37e6044998b7ca5144548c2f4dcf6a759e69bc70afd07be317275077", "1b293646e36ce30cd060abb2f22ecbcc708f782418f988e6a6cfbc18e59cd2b5", "002ee27d0160d05377aa84f0e622d64c696b75d6df2aed4278ad92a5306eae91", "28862c905678f47fe33e680078bd696ab85a5c2c2b0b61100c80a0dab423a066"), ("29a91f9dfa03f31071a899c079a2195d12c949e13f4ccaaea5ff18c8825cdee7", "020fcb982917fa398f30e7e6e905886d6374653cee85475b9dcd6671d2d49306", "2f6f7eac2d537442f8e65fc43361d414172cf712d9fc1020b38456f9a47d964b", "242672639c822b2de2657f12371b51a9f644e93c579e8074132ad5d103bd2cce"), ("107db2a77749e594ee752265146e9260ffdb63aa8f6514782492c218ae40b7d8", "0e78ec4438ca233ae2ba9b338f13ae7245188f3dbd06901bdda03310f8a395f6", "14c545dc2f81030f0b474a192fc16207c09ad0326d78ed2b83692b495cfc015f", "1049902b1975f1077f5cd81cceb6939f4aad9a9e6f4f520771a3c96e9068bce1"), ("03382a65e31cc4ce72d4a81fb7b576e9fe437dce6e3769cc2e1b85164ccac03d", "0cded0cfc8df8161455eea91d5644ebf3296e13dd1438ef070c6a6ee64f80c9e", "050fa920488e0c973bac5a7874d4a8fd0cecfebeb2a33635ac1b856f5f940418", "0f6da2ea0b707e02941a7878f8b73c1bb5b9cd9cdd19050b36a87bd4c41c5df2"), ("171d2f25228b312bb8046f8388aa46f410324ba570a1233bdbe2df4ad7a25711", "1505b42cb134360b1f483d6ff67c69358f6aab6571866f7e8e71f3684c35b8ce", "1bbecab8c020d80ab7d6745743aa3eb1b49c74b8fe5bbc1342176f5fe16fe927", "1e75d099da2c9b6f4451a2c12b91860413ef3f6cca343f0eec4b9543b22aeab7"), ("006ecbf9fd86e5b1566fa468e7c539ff090c94b3c82749dbc967fd2541e0b145", "028c3f0a725e4c80e355c54e9372194c81ea51f0335a737a28ec1e4928e145c2", "0a06842092815ca34a7da5bef55e00009bb5411f969101a96b607b8f7f0faed8", "034780b8bbc04faabd8ce3a7379421439ab239db80328ba6e2f50380a857198b"), ("0b79bd52c804f8cfc713304ce35fc2b47b95911d65c7205095b2b36ef828cb9c", "1741ab7650cdb05933888023ff412afc500009841082e7e0831093e3f7e8557b", "20ffef2d061c66861e7bd17996518619fb5e0eee54a49e5896e1851e1484ccaf", "23fab1d0f31c4a02419d298da48ca7980def4d8b9870184459afea1aae08bbc1"), ("1032fd53b25d6f52b0a94db114b1ce30a902b34eb4ac4507c29cf8b684f7b117", "1f5d873603ba95f5d32419f1b970dbe39b9e954dc0b9ca1cbb63c0b984021b7c", "1c1d0dc6714a15880dcd1a0e6af8fdbed89e67f43866edc1f1064e78e07b7207", "25d5c0bcb36715982d36b60c047fe63204441c7ff841ea70866d931bd96d579d"), ("079706d9a83810632bfa5a32ec79d52a73e2449057a30487d3f37ececb06c58f", "126c11a3dd8af94c47ac45639246c41bfe9d64158bcb44ba66a187195ce2a2e9", "071b796775ead995d8534a914e010281cdf608b17e4ac160270e1089b9e2e301", "0718965855b2006adbfd78c1ea8b66e4c26dcc5dfc84760245c50ba0534e89ab"), ("168b96b6b2bd6758b29750634e02fba489be9aa327a2ddd7bb45275ff1b0bdf9", "2731ab9f25042f53a7956c2d6165ae95c89f07d0cb269b2eff351e8224279064", "110c3f76ca013a8bdaff17730aa76ddfb1b28ca83791bb3dfb0f2cc5f74c392b", "01ee0cb511b34518f632d91fb01d56ddc329bcd2f7364a521d1af39c15a41ed3"), ("1fab6131f4333162180bda06046589bf79c6d8c63924a76bd4afdd84ec3b3728", "174cb8888b781dacaee5056388bb7f7f383cc7b16dfcb4c0d68d39f767a0c6aa", "0e91df525d6d454bb085168ce09afd5de5281452b160489a47bc9c4c574cad54", "22816de7cd73851398566046ebcc6ffea99925e933aba25870c779d45e4b5e99"), ("09eb159f1d776cac63691a6c131739a3361d77afda487ba27d8f0b08f7520182", "0178f7c746cc5f61709a48a089bce92b3a242c47238bedca332ea1f05cbcd60c", "052b6d1d4e4cef77851b20abce89bb89a8c63fa0a6d600134b7da3905f858d2d", "26b3c6526e21f95892b809ee7fdd1dca51f0ce8c1a7929c8ab54fb4c2a5dedeb"), ("2e1869af49d3e17f9e98bf350e15fa58b7dd071b64ad7b988f48bd071fb0de45", "16a30423904349a166a7ffb47410501f423da9c88dfaad1c8bf5c9e2d867fa3b", "115257b84e203b099bab0270b82ea711ba4d936d4243e48e5b44d0835bf0b545", "17b63efdcb8c2de3f2831ab5beae79bffee85ab48dffdd1feac64dc37d2e1126"), ("255c05a1510d40d05f9f0cc54dd3a9e77db25d8786f96d116ecd9a6f1a96e17d", "0aa58f5d494d4c1fe2ab41eba1019e4a6ed27a7524be86c517671715b467e471", "0facd16eec1d3d5428e3352297f1bf4b800c9e57808a8401d3288d6681ef736b", "15e285703f68cd111bcaea9a5d3825e235210f76a0e32f1853617118d57c231f"), ("2a20bdea7eb3786c43c5571cbec9a3fc218cbc33a1112b3f7c269f5559c42f96", "124ddc097c69fe5752c94b29c426874116682bb420f99ae53bbcc3a4a451d5e9", "1f6c9f69a32d47457e02ac6d275cae1db549b679df7afe5a108fda95e019a67d", "130d113ba03de44c26858ab91fc79be25ac20a9f7bb9513a381cf457564edc46"), ("2b8a040b68db06b2e9bc913e39c0591cc7712d73fc5cfada1a1967efa7c3e88e", "16ed475719176e9baf1cfd96ee9862c88b5709231e53fbeab4ce7e63600338be", "2ba59032c8d69155cd27049cd8546d992a32facd4b8cf1918e47cda24f34ca16", "17894736315159925dee221a21e7cb3fda83ede9ff26fc44b4c4f39536cdc14e"), ("20cc4b843596d436c036f64ba7b0e54909bafc43e8216d84fe7cf55d3605bd38", "1a5364a68b29ce0bab36bb13ecc83f4e8a927c393856277583b1454b011980f7", "2e83e4dcebe6e53f28dd7f27afd2ead7f63a07207788f33171935e2cbf9e55c7", "3013f0685736909637a3092cf26dec8c0bea161900119e1a800a16edae478232"), ("0408b3c120e3999969e19a7157585dc9348226e4c6a35458f2ead99bb21a364c", "093d4f730e0cabcf11d261fd03dac755d33dbf6fcf0472c5f851df31f5470288", "23ba2726942def563834a72efd4df2d41974ff539b5b39a23e54865db5e5ebe2", "2b5e08613c7999a31653405ec65ccb26ee9ea1f1de9d89f570b4b30eee41009e"), ("23fdbb23239e243e8df223cf4ba05e4d99224fe4cc053952f56249e73c7510a9", "0a0aafa75898f3c88389d235d128d93b1458aa9d7639189eab22ab73acd2b430", "23a85a7c39d5d72c416346d40daf612e556c49a2633caa8da73d3ff59b45d4f2", "075110d2d329599912fde7c193dc669bd5f02ff8b83ffc44f7175c5492b7f395"), ("07886cac05bf80977bea6149bd86616b506d9989745d46a695aad58f868990b6", "1b423c8a59fec7a3deb971d51aeaf4d7a51df8cc8dbf4c4b3eb5c9f408330f5c", "2e3082ed68c187ade268221d6c290f167c1ce3208a72c600778eecbd707f4f6d", "2bbd0f1f31343cb8a56cad48a4a93bc1ad58cbccdcc08e1b67a035a32051a824"), ("193b558335f3ef7d204ae158fb53a5fa9f14a792d09afecb3a236aa173e84de1", "1d4076eb6f1f4476971df7f84d55aa5d45342a6830a4ffb9be4a529622057590", "144a43bdbdb1cc5f057c87ec366b609d4231de9f3faefdc319f27d4c64aa491b", "0dc9a62c33e3aee4125a0bbf3bab604e03af9cddb69cba0389a6b51b09788f4a"), ("073fb69b398115311116392070a2ec32e3cc1f3150bef1c1e901d2b143047911", "1097e043d211e9dccb4b9ba7a0d9da30a45031c609036bf7a7d870ed0ac39f14", "1e3d1b663b01faab2c2ca206ece932a2620b82501c40626c783e1c7e277f0435", "072af3c1e650607a3e5879fe7e9ff6694c1a3f32bf2f6548e0dc87c0650613ca"), ("0d0a216d933d874c7a2d5b341816cc71becc435d233abc13e376126f110e8db3", "0fc661335e2f29e12021b3e703acb3a18d1ab18570c7000a35fc19fdc5ee746e", "1c5fe6e0da10556a598eee4cf205e4f81cdc80fe23e588995a14d0ffe890601b", "1fddc6df45bbb56850e3a459600e20be8810b130bf5325f6d1069cbf0736d1e4"), ("1f3088dbc99f330b3ac23970693dc57d95664bf15d76286f233e638a0e460d9d", "2719bd758b4774a0e83139549bd9b7d8c198e56a8e1a423c17b9796e03cf4ee8", "1442bbb51becb503d5147b1255c917bd2b609f26d1f32379410c159fb33bc27b", "265836f4cb64d389d5e4759ef675cbafdf4cd34f47245639691613973bb1d594"), ("0df585f23f34757624c0084a3ce7d9cf3116daf56079c768a5df17f053c992e0", "057106fd33f9ca35e8078e7fa9ed50bc3e01e8bfea7bf6230d8c9116e67d54e9", "00c4c47609d7162dbd14a6e4a09bc9c0b80e37bfcdb531c843f674e680ac24ec", "1e3e1ededd26599ad3bd379dbfe9354cc98fd02b68c9e7b8e9bcd47f297d8a19"), ("1518077f10c38c3f3b4e90cb55f79472a4ac39788340709b404de09733f5a2c1", "07af26f81ae3cf318572618c678d3f76deb0ee1670380f51fe3f2eb9ff20e023", "2de0f790189eaaa4b11b12cdd740a803c47dd3ea0f667e62bf65d717ba067a1f", "1e57ee6722c7ac29afed78f23c7aa76b0a3f23eb2fb98a87263456e9c5764303"), ("0bca409ca5ca37a3ca28c35b46313c9e24f1c02c449b0999c141fdc35300317a", "2447d695f073d04ef28815b6db019869a5dcd06ed7ddc78c47fae676a2610cb7", "2397962159bf85837a669e640cbd81b994861c2632286094135b2932d0ecfe82", "0a31115a1e268c5b1ab46154d70e57f4528592b6e12762a17ae4246cef3ade28"), ("16dcbdf5e6a595fa42ecf70f03b72dfbcf0ad4ee5e4b08c058daf2a6043e986b", "04885a4506f2055cefe444d94b2963f107339344114d70b0b21c6f7da5995301", "2790b7f846aafe795b2d9349f6198b5e31270f905032bc9c87f29501c5df50be", "1b9114d917b1d24b3ce76043a6ea4c253737e6d376a527043236786562fa1652"), ("261d936a50d43072e6dee746ea601aab65f3e2d0c6869399188a4274fbc494eb", "1e79f6417525f31e7c6133026e1bb0f6d0c9af3c4a763346d2e05340edb240e9", "123ed137fe499b8bdb7d3ccf845f281eeae46ec1e800d6f719bb3f9d759f9d77", "21df3005862d55abe43aaf46420435bc0d0e995022f849a41bda0eaddf11aac3"), ("2111b8474ec701c8410da1427ab90e97ea4ab0d673206d1a70a8567113f66a25", "132a1e5eedec56fd396f75cfb2cf407d57e46138bfcf2997c314d76a86adc2d2", "038de72f8c3b7436d5a2ecd1fef6c77d62d730f684de29ebc7a6393121f2f3ba", "2e881abb8348482a33409b255455a0ecb320775c5eaead6c88df9bb8dcbeeb73"), ("130ee35a5ed0a37c1a1d31d796789c56c5ce7e093de0a8e165cdc3367c1ba52a", "2eb28a9ef1bac0cb0d97addf358b5b5486c3e0677be19304e91f23925810f239", "21126f3be5b522965119061225784814759d1b3e67f06a3a560c47f1dacfa67b", "2736c0e9ce13c9c59055a4c8dd594f75c6906efe170c7bcb0fd627e6fea38fee"), ("1bf46aceb1d0a63dce5384cf732ae26bdba3a4ca5e7636e654c79300c7fab4a7", "2e6f880f27f11ede353ab9f2c64ac2cc285920014c5d68887f47446616421988", "1debe8b28fc99a8abef9ad77d7341488e2b5764b69a22fb8905f20494ce89b81", "03618f375e9990eac27baf118784cbd01650d7b80994e7ffab9cbe8fcf800be3"), ("210f339986dbd3cf1e0385b6d21216994197d8f633408479b467746db376bb39", "2b98aaace1d7da48f2f603114043eb2733e359eea4361e19fc08b8b2fd0d8e0e", "16eabcd2266bcf5ea5d56594acd2368d63d824364c5e6b547550ca187c998b2a", "21dc6bbc70e708bcf31ed272e8e61afd9af9fe8b4f15ee38fcecf65b3ae9c063"), ("1d47c1fc8d83b864bcb52e34ad96ce60a444ac5421f20a5b37e29d8bfdac165f", "2af7e9612795928200c54f7f8673e6b616c4db3a0cc54d5b74b69f373a31818f", "142c910856264b0792c854ed9ec4910d05a28d330baaa432c4a273ef2427bf3e", "1c9e809cffeb74c74cf0bf8492a951004e87ce1cc4ac9fa53dcc8dcf8560372e"), ("2851eb3df406a7d8250ddaf21300d3f478f81a341f335f67393023cbc1c21e6a", "0fd1c159eb5983516f52c8a557860d2309071560e40a37b3bcbe67f56a3ba1d6", "22ebe0ad0ff0b866617db810602861924982e2f2cc34e5e50117df926f90b942", "207595f0a9f0f562e18f16756601d172a7ad6c07ca259dd0ce3c8e1d3c5b9499"), ("1bb4ee55b2903a2acf2105e10a82a3ac863495ef063fe55d1112335c4c333d1e", "0faab44295dc231ef56f0e93ef90de4d7bb473644ccb0eb379c7cd53addc99de", "112eeed9a3fec1d41a380e869a464bb2dc27ef3099ea32c21c72514e1980ec96", "1295fb456d586ec12c330146758728ea47ab7b8e34639ec4794375d04edf5726"), ("045d4272d04028c54a89b55108119bbd6e3c0eabec7eb869598c6b73e3670fdc", "2f486ea3a3f62952d11c65c909c5dc69ecd9173db1c3a947579cb7ee5e822ef8", "2879e427a6521bf07325e161db8b002fed8a61f8068903416d0e27431f1fba33", "2cb7b8dfec024643af6ef28970f08cf70cf61458516cceb34155794299269724"), ("13f8196dada116a5deda8776c9b3614d8299c0379d013e453d3969d81752d813", "0d17ca117b8b37eaeb02393d845451840e13688b024a2e708826e842719445c0", "242d7492be506ffea8e5c172eaead4f52a5f68f704e45465f60b11a3cf56bfc3", "2f934959899d9ce621ce8517c17b8f875a909a06508d30db9ef284e53bee44cc"), ("2c354bb8be39f7ee443c300e4c3058399dcf0981e4eeee8627785904eb978d7b", "1fa12ce31d39c8f5a38c973772c2b1e9c06445a26dea84397a2625353d261667", "02fb168524de527972ac76ecbeb608f7aa4ba2e9df97cfd001d0b8dfda677c23", "228a5d39a894dfcacc7edbde3c4e00accd19b78e7f63915da11babac4f0657b6"), ("0b2bb986f7b06e371163b8a0b0e50a4c84bcb17cc69e68bf6a00099034480ba2", "0af51f158a10386dd8cd3271f6f2f35180b5866348c12291c68a612747fc66b7", "2a147fe16b345e0556d80df7a7d0db304a5b6586b7d3e01774158b208a5e19e8", "288ec96f17613437cf372f4354441559f3f0c2e8ee2fa785cb64b8a896bfa3ea"), ("19e8e7a6fe8ded757e9f18e3ddaed1de31bec686997336dfe8c9590531ff834f", "296f21dddd4fd6a645bdd3cdfd1aba8b888807c6ef0a6711f631403f1add1584", "146ce4711794203700f7902646a63c997be35654e825a9bb4489849a1385a978", "063f2c42dc0d0096843d0698fe5cf1ac9148be44b58447f7a251928ad5c0bbc5"), ("092878f0c45ca6b9c5017a0685af16b9423a52c488e425736b1c6746e175bba7", "20c3d51862baec7c26bc57656a53d4d6295b0662281f59a521db777a61321e8a", "25d25f7d89598a5c5d423d270a54e497372b8c284b09b86eb03eeba03efdc1ec", "2eb8c44d34af9f9461e4132929e002840951d11ddcb3e015d1326cfb2216f9c7"), ("07cd670854effa8109105041c5860ff9b69ad1b064c5d882e56e8cfe9009ba53", "0f0641cd42e2ffef8f1b57dca43aaed6707a03622ac66b27d8177914b7e485be", "0879515869a5a0c1bfe959182048a7af6a893df0b2710c1f926a3e143022440b", "2a3a5b07eeef9d34f11618791026566f0607370fd591ac016854b3dc01fff510"), ("26437ecd57512ae2ec095a4b587360f35c68ac189059257c7176b6d97a79ed4a", "16ff5971e8c55cea37ab89f04bd0746bf5cb3c1af5fbcc0e0f30768c1a8201f1", "2aaf075890e6542a1ffe1c66896ef29c54ffb0320a6196493e867bb27ffc56d9", "25e550f9d4bb099a2861b85656fadb96257dc2af224df8b23528742bcc1f958e"), ("0a744d8edb1605283a52a72b83b7af3c3762bf0aef96c7811091c2e468a48675", "14b7dc50df5fd2c8dd00bf0d67ec261388bca1e8f2bec6bb5f13e3a1a57395ba", "29eb35f7bb8217b4d95d2fc8ac52506428a6c413fc38b1e70d4b31aab5c98ba0", "28027f492f2bcf6a488542f59b93a182acd8d6a14ed6b6c1b8d88f66971d6309"), ("29fe16c8cd516bc99d237aa16a10ad5059a439854a81c30964802accea2cea0e", "1cb984f8dbe7953041511f108e41c3b116d7d8762a4e0855314bc2752388ab1e", "1a9e03498e4114a587da1e393c71dc1a0213afc1d0a3b4c587aa2e6b836392b6", "1ec6fce9590c5467939e6c6cb7dd10d8e204266990d874961059b6409af66406"), ("1dd9bf222b5b23e614cae39be473d7418ba5cc3fdd86e4da3648c90a190eed41", "27d0f858109bc41e36278b84b9c39dc48d23ed6ac6aa268c77ea3d9a44c78190", "0b4993b1ec793827b9bf22edb5167a34751cc54af94836689b4ec603ae7eb005", "10ef37980251e827ba79194f191be4fa80554f74bdcd44ea6f10308fab3b170d"), ("2d7e03f5964ec966e906d162a265abdba8e49d7091ca2c457c607f2b6abbd049", "120d81bf9b343aa7dac28bbaf342b0c037034a199336afe5d9e621038b88ee59", "14f853d7e415b675efcbda70c2944e5dfb11316ab62568652ffb296a5fd79900", "03f5b5d4cee579ef11260bea48404550a70e0b74999f219bf8578b137b4d0317"), ("07380ada50d56422c38cb660939d47ddf9c9055f25980c7291830a5a51c89ade", "09dcf2c01e5b44d2768c63cbbdb40074614c39505bdfd9abfa21a796f086c6c6", "23a89b1b584fc896fec51ce056ba0752c3ce8d53e7f4a153096142e7e61c50ab", "214cf1f89592b3321b5e3502a8c578b69eb49df4e93e042d17fff766b47ed821"), ("051219b88c3fca1028993c0cdd15cb2f25a266c932feaf2c22ff103e6f16e78a", "08a9e5af16be8a8c7aaa70582fd0018671ea57f38932d95ac3e80c5174d7a5cf", "1176ed5ef725f7d6d68c7dad724f5689e2c6ec554dcf2ef3274bdd8585949257", "127c15f2bf15248b8de0a3f9530759beb23ec5db534cc9a2b1d9215f5a831d1d"), ("15b24679d08da017fd3d9e67872c391ac96f5c6f4683b088e5e94dbff76ad5e2", "0c43f86fe56e27b397f316e0559d880666f166493eb62423549cf6c2d5b62a45", "0b3b358cc57f27b6c8f361864ab1cc3132c95400e1942090ed0dbb960c8554af", "238dc936253c534ba072948cc3739cee372eab1cdf34f736d5a59a7c635e1b96"), ("1387053f824f4371f0e10611fd97e4d96a6e9bdc238d6489f21d51bba28b1a00", "0166543f8df4d116a2ea89d1f072ca8801ed575c7546075f0197bc4247af33d4", "0523beeadafa7b1645a0efe82679879e22b09106d5ac4185a1bd024e8e0335e8", "1e74ad480f957696ad041eafda110a6c64ec06b791e9def2c4f1dcc1b0b6153f"), ("1e3f04850ea4aad4e99a7efb46202b08e1021a85788c4be9268334ec9ea7799d", "1c3c41173fb0fe676e41d3e5437c4712b4a806c7ae5d044df6ffeceafb5060bc", "1c0f314af58ecd5c8bacbfba95f37ddc04ebae1244da0a282b0d595520a197a1", "1d71f5231e725676cecae58ffdfd9bf091488c54a94b72c09df93157156e70a1"), ("14bf9341b858a53f541a8a9de4298e186c3fd225cacfabf813b24c8021daa8af", "0f713a86e6a8aa789f5cf0ba06e9329e08f1bf8ee42b122aa35c4774767507af", "244dbcd1262753f724a49cf6ce5c0408d96fbb73bed7e4463ef698831be6928b", "09464f5b3b28249b4b5f3db468e27d54c9c5763dda258fe2743eb54e10001b1b"), ("2c7b9cbf63547341830e7e1690ece9b4a0e45dcdbe128516a9c961b93f51d9d2", "0703f90069d4b00f8a2a01f939dd9448a42604076181946960b4f201a7d9993a", "126678322af05b9c035b0cf5d649e90f733b04ed30ae882f7a37d5e1d7206aa4", "09f7e907e5dd1923b54c444cd93e17605e55cf9452022759b2f8e46a3d2ea005"), ("123a31ba1f2fbe45685acaa927338403268e1e6ad1acee9be2c1a8f83b20653a", "106866a03547e26ae2fc6a917bb22e49397f6034cdb521853a8a57e96d31e55a", "1f7e0f4358f284b3a3e8cb980e22abada53ed0b9a135c2402529311941d9701a", "0a96b057f1327b96cb670e88ea2752830b4ee1d8be98abb63feff3b860b0c683"), ("2134304d85b6ec6c1fa929f9e4b517df1e47feed89f8ad28b94dae3784a2e906", "04ba172fefd0de582b9b41060c1b1a85bae79623564c9346fc4d288e77a0e085", "294f662ad530eb5fa99d08718662ad3eb743c3dd97c422252dd22480124d24f9", "1669391969224d4bb131a51b7afc64af8c1bdcfbe6b9a41afc139cfce177a4d2"), ("0ed18055dfdac730c5f40b386e924cea4843c964b2d1590955f5e9ec0a95b99b", "1c5b5716bd1e78c7039361c29225440124b1636dd9421ff178467a5ce23d1a05", "2e789e574dd75c5ced3812778cd95cbf40269c703b56d4f79d39c0f87ee5d62c", "19a23c91ab6535ab487b0633916f26b74271957a949da204e168680708d1af37"), ("23a958dcd8af50c64c8c131cf59698ae6f38409dc7166ab15c45ef1e19a57cff", "056413e5e2d8fe5b89018145f4ac801ea24daf3c6356a228940e76dae41272c9", "2afbc5e9348f80ad5e5cff20dddb878f9b1d0d58900a7cf697e2b866c8d3f501", "10816b4e6eb3fe2042d277febb208aff71f9cc66225b152904a0ec6c087cced9"), ("152dd933dc14a694391180ebc81e0561f01b4567ca64afecf4e35027bb28142e", "0f0bd2dd9ea983791e01ee9b429e6a873374a08195fc58cde201e4a4867d3b23", "1a1eb7967100b77ae753ce148083c84bb7aad21e41d4b346986f34762a6ef6ab", "0e97b6e78eea828287fd18c5692ca7f27acb9b12da247ad9258385cd8c0b9935"), ("20f88d6bb047e9cf5677c33a2a4ada54b7ef1b40bc02ad0a939215eb33f01d27", "13edad6df9585d7c05beab545f2acf572248e1cd5f7d61bacbfeb2e8d6c1a069", "290397d244e9f6e2df7c81ee7ebdd53da056b440fc229ae5d20f3d97c44eb471", "17029708857a173b05c122943d880d904e6da8d44dff784c84afa51f350f1d28"), ("07f0398877f76c4b02fa0ce541aac47ca795939407540c49908914a870674cbf", "17c895c2e8503fad886a49816f8316d6e257095e7238f3182f3d772fc4418d67", "14d451a6c9cf7855ceb50f2b9297e081b44abc1d3b045bb331756e72580b048a", "0204445eeffb38a3ecf3c9446a3473b10ebbe5024130674f8158b460e9dee238"), ("12143584cbf0816f52fce0703e62f502fc3deddda33a1eb9b07ea252386ed0b5", "13a028cb94e1e02b2d2a80e4825fce80507592f690b0e848856d519033c7a192", "01551bc69cc48cf3ffaa6bf44f1f91e91925ed1e1ac29976db84d99b833f91bf", "0414c872d961041e226972eb36dc317a70f10e7a3867c064fcfc5d416ea0110b"), ("302b5b8dd6dad029c2538db14d639fad1a81dbe5f3942b8e90508a07ff60260a", "23d6ced2840df1aa2435dbcaa80adf41aebaaa621eb5bfbb4ee2c1c4c62bdd3c", "19d38a9176c911f53288c08c493df976e76f7858d12146ce539f42502fc78a15", "02e8219458833cb895ddce13712bd9e7b2f978ee271b51056790fbe4bdaea5b4"), ("19792442d5ede6483e730ecf5838ce2152881de952f5e235d153fd13ae1c71b9", "200a1b09af9b6dc2d8d2ef1e36641293ca6013c68ccc872685aab12bb41bf258", "1b9e4d3ebb7ba3082c12c300bbe9cc89968982bf9f6e1edc01e2e7731a9ca2b8", "0ba0e91fb436f26cfd414a223539b062645fe2da44b2b3cd69d64d78835a1353"), ("232e1ec037c2ac2f3996339d20530118fea8de91e85aa20d143ca8d94b547087", "1292756b6bca45d3c13b105f8b3ef40c97b42ed8511cc37fab0cc921072ce58c", "1b64bceab9c602972a522fce90db3b48d47be3bca37771d6d04b9f6da2e897e4", "1ca4ea7f07882e18128667c549c20294d39319be0d1ed9dc3328dc492237b1cc"), ("10aa7ffd2670e9b0b9e95bfb536f8b3b54f6366cfb631d43acef63a43c21180f", "2f23b4ef5c7d0b00985f96da60bb8a482e5e74626358a4301fc42efecfe81934", "19dc45622ad802f6719eeb3ee8256b1f84e607e53f38ee47a2bbe7642bee3a49", "1b9be96d1664fbcfcaf79390f0fe24852984840c35f2b277b3f3500d1cc10526"), ("12594a086d97197bed0ea6a3780c3292d8877e887fdc294621f1895781f6033e", "13bb2e2fe1e684993588c96fbd7b5098e314c5c8803666d07d2abc528fa8a1fc", "15674684cb47462cbe36fad33ef619edb81c0db361c00b46028e92761d9266e9", "03850c60a560e29e2e15a72ae8e4b4b78fe9eff988d280325def19b0a458eac5"), ("0151a593c5db9f793d6fca745d58b454eecb71028f6e024393389537ee15314e", "2dc74a4cc22f2700931494c5536a3108bd3422ebcf4b8a13df86fa914b331aeb", "0b9cfe47d664f979d4152bf34154f78824182367d0ad3f86d32d97ad8f79b36e", "1c2fdb90d4b4331e1c24ec14a96233cbd718c86747803505fb2351f7dde3d1db"), ("2245c831ccab64cd8b75dd69ac66c6131282c013c45eac7fd42b7e817d4993cf", "1307f7fee1adb2d1a2a947bbce07017a09a07d9fde02fda2595c9f6bf168debe", "037e2c0ddc2d91676bc8ffa51c02d8187f18ef6ea9cd98408501b4fd6bf57c31", "258e5b7723bd1e1d8beb971c78993edc8d6bde3099bae0b6cbd938aca0fb2407"), ("0b1b8717df880a8b962d12d101a9037cc3de43c03b227fdf36f94c0cb07f799c", "2e787a082b553d33fdcf4e4a109d9031e9c23204bf39376acfe0b205be14a4dc", "23d17d65e5d1ffd3e2a38ea43c1e62e7809a74bf93ce5216f7229353eda59451", "09937e4fe39ea229fe2025c756e784bf6dc2326a0dd5086944f00588c98f054e"), ("2799411156f45041eb2ca297ea84cd502a645ed20284014f1f729743b8050ffd", "262429091a43c7443fd4931b24d64b4d5e1d30b56af8d810e3e85adf2e64dfb7", "1b9218186fb15e587b67940f60390fe4872ab1ca17a48500d8272f4e795a65cb", "21537727bba4633cd0f0b283d2a330559b1481c4a326586e6a4343682fba0242"), ("2fd0becefa05771bd4dff9b85973d589d04a71f7250e4e1a65c585331a1ff353", "1b8ad41e0b8aa727cccc7342305e9bddb7f634868efaa65dc6910439cb8c35d1", "0fff6f7841f9c3d7ebeed22a5c948e832481c8780cb7c8d4da378cd14793bd27", "2030aaecd18b9959d9586bdaf34a050d5d5874aa9c9159c06c8a32a33e2968ad"), ("0b25c85155a9dd24852feb30c8a6e576d88d41ceb369bfc4a1db47ed160afa5b", "2e0556b23ecc5d9272043659ce29fdde06cc415162064a31b3104bdd5f84402b", "2f7b0c6bece8cb6d488704d03d7bfe58e219599d98af3b1cf3b3080760ec3c4e", "170db936f106517aaccc2e97bf1250def955cd8260f5972019bfebc27f7afdb4"), ("01f412792d6670bae48cdfe450135550e76b5c047adae6291e96c0e870a276d8", "2fa3e1e8e0e19aa148d05879b68a921d36c98f92ddb69a3da6b0d38366a8ad67", "14a4b48f18f00fdf7330394f195d88f8e3c1559095603902452129a5815298ea", "10812755b13c1a286e7b94b87c3bce32a4c4635a646b7a4ea703d2bb58f381ab"), ("20096d676e122c3b7b4db0d4a33ce4fd43d453a77c5cb62285224ba41f57a2b3", "132624bd6afd41d028e6e39f23b9be265d98ee03ac5577612da4c42daed0fdcb", "25fa2c544e29b962c094256763025533701d8155ca41a67f0fdac9e0adf47de4", "254eb2b7bf877a60f22494b99786d627b59ed66adb3d1baa81ca82e58d7b1a57"), ("1548fe3762a094384084e66cb7c2dae997e797b521c358f6171a9779f1980447", "036b508897f9bb91a760005689a1b4d77405d2863fba9ede10dbe69faa69eb9c", "0a287ef0d10b08290a0902512f8f33cb90b0db409462f3ab007e7b680ebd8461", "2ea006d9494e1be5f28578c9a3ddadac041c0e33dc496993ddc284770e6edc09"), ("03c7805fe989d07dbc55d778dfd2cad8df4317bea35931833f8324824296f028", "10120621263dfea77b5e064b9f8629f177538741f12c13616061df2f69b2efae", "0b65b45acb712556e2291f238a12c80ad696e5dc40341a85875308e78080dea2", "2a57985c2f55202faa386ed91ffe5f4c2b3e7846d7d6202ab15d1ad2819dc416"), ("2db48a9de295c9b120e8e31ef5153d34eb9b2902d1e97517ec02d71e5dc3bd00", "0c7ba8a60a0421fb2574eb64904022d7e8c6dc99279796faed55d205c336898d", "2083a7a61970f519e91ff4f1847c43a0db662dfd1447f6df163f1e06d0808980", "2ec48f56d0df743b55f8417d094e777e27aeb02e74b480f0772c2d19dff269ec"), ("0b88bac39534a3c7e22ac111fc7b0d240144cf9d996d37a50b931328add8c8f2", "098e3b260f7f89ccae65f410b46f59b0be96b4a7358bfb9e6b2a17b2480d1edc", "2b3e53b4a77fb7fe75e27ad4d7eed6adf7def928cd28ff1f27116b32c4b11ab0", "07fd22849351f66ae7de4404c302f4a3156e04fa0f7fa31a835cbe0af149ebc8"), ("23b158764d4135dc79e4804bb719099876e24c1e6de02bbdd3e4776c2ca46d38", "14fba4374e737ca7a6ea7ca323a6396f1edb7cb9adb8516b3a7011157d73846e", "1183af5544ee84615629ba4e85af953717512a40c33fe2cf58c637b2a51f47c0", "087a2e1da4b02144b53ad1e73d439bf56c2b1fdfdf8a36e49c201dbedb81b05e"), ("18583d572115a4b2d32bb6e1820f8d04880bf098d532acaf6b37a520ac91fc8d", "26809a10ea03dc904655632f353c5f7b02c743c3cd585832f3a40fdf8787278b", "2d129dd1859e1f8cc1bd5d92b576cc5688cf5a2f265c7ce9b2830f3dcdd2cc49", "2b502426098cf655aa86bf5528ccc73f906ebbaf4f96b1fb21071ee2d634a4bd"), ("0473c1184087537d8358937ad05a4afbdd2dab4aa44a85f7a28ca3a372351647", "220e11b703909d2124f791836ee095dd2397ebed05087107e39ef4b4213336e3", "23292a837ccc497c5373ec3c28283e5ac0d27bdf0d86e13e06847555225dbb84", "1b0893c3a1bcb60fd49bd7896e3021f0a748c26a06350f2c59ec31a0350df06c"), ("15519cd35c95970ad1abf20de1fa03f68edd7e3b0b7a0076d3c3461c8423bc01", "251fd05888b483700bfbd02b9a5381d55420d56256f64399ab33a0a8a2af229c", "24063d425a14e8f6f1d169282beb608dec70b8896dca67164d04d615cd504c02", "019ce40bb3a70ad174347bde15faa88187a8bc6b1e4b757f34132d63dfd89f7e"), ("2c9adaa90baaca81b1e71d05380e36c16bccfea2a2b7d5effe6dd2372e18c7a3", "270e15957629ce1f08428dfdf91b6c964e5a588ac9289f96fa3e607947ee4966", "083bef0e046620d127bd43dea34c0c9e68b1fbb06bf40a4f0b53345f023686eb", "1eef4491c04fbed150d6a8533b800f9f769850ee517f992f9a9a58ac99437ea5"), ("2b552da124a092d83737c945011b609a423581ab0358d74832d43b02b9f16cb4", "1aa6e8138f8dc4210c023391cd397d9018555dcc034097305004c39ce9c5e637", "2add9e98a79bed785e099b10533e01666b83178863a13608a9a02b36029bf49d", "012a2263db71ce70f2cbcea757b2c161f0dbbf6fcaf49f8c044ff1816efb6d70"), ("057cba93519a72ac5d51efaf9b5625812150b715484b66ef3137b8ab6b2ff2e0", "19d82b641a6497f8188521b097626137553ae2850a5b58da1f2aa2bca7ecbef4", "103026fdaf49e3ab447ce0a3b38ff5c4d4b645215b8fc166fc682c4542d82788", "09c14ae23bd227a296f5675be4dcebef20229e733e238e666e5c0854fce25f6e"), ("02a420d281d009ff48cd855edeb9fd3b901198768391072807315c5211e3530e", "021b155543a20824aa5224e89affcbcceea248f35fa4f3f5147a79ab30189eed", "238d0c7ae17d979366b9d1be2deb9e6da61e29fa752a51902d11cb22d568b4f3", "0988be78b1e7b98c095d78e8c5ac07d74e1301cf4abce9d64aa8f16c919f3316"), ("1e7d1f0979d3533f7d0e8368639cd105830f758479cab2bacc573a146afa2449", "1e07f5f338830c87baa8c6d119b07561f994591276c16373951859923d7a21df", "0ddb7e275a720c2400a1fabaccd99c2591e5abfb160b79d55745d1133c8f850f", "060858b0b8cf5ec49de1ba41db7e9b9d4fcac869aecb297934822105fdda104b"), ("23dabd5013ee13c5bb53e3e94f85e9250f986183403e04268a0aee8ca7e6eefc", "08b5a3aee392561e318c5bf45fecac90c260c9a09a3f07475f9de83a9ced289f", "2193fb1d1d1886e252d11cd00594cf0f25ec9e482b2ed71b904e7e7416604c03", "264481ef53b532dbe3f02f54e4dc7b922f8b7b1b25c7250ea060ffab31ab8220"), ("20a89bdcef33dbf86e51fe861036c1ce688cc2adfa8954e115e1218690b79f6b", "06d4dad57cdd0782225047836c8347d48e55f1aafa8a1b06b579fb3edd98d268", "081b75865337d1781d25fe7c7cd4b9dfd1c011d00fcb3ea8ccb6f9affaa5c900", "13f924986af706436394a75ae20490f12f7e982ac74c182c8e83093459b35870"), ("194d58c449a52503a312dacab051de3fd7cbdb3bf9c3fb1cf1733eef953d2c77", "134d89bec4f606fbfcb48e6807cd4ebacb70da91ccb895833c6f814ed20e47cf", "287a1b4ac68efe6b69b0b7886731d7db0d8c1e4648efbe2e9c7f4441f468e271", "0ff1cc384d488613e3e78f0658a1d19bb74f91ee0511714285689a387fce20ff"), ("0ab28dc55c173c4b834718043ea62ac8a625d0ad9b92e503d7cc2d1e647ae16f", "1e597b8a7b128d5a0a2f37230c4fa6173e378bcf8740bbd4b8c8e33b0ec0e4c0", "257dc9a9503b4117b35f1ce746527989eac784a9a727094f20c6d458dc2658fa", "10758c10261af7869209818d869735dd326622bba60ffc94e6fbfe81e83d325f"), ("2c4ab7cd9f61a740313b4713b072180279de0350e2894fb60c190f88a6196a9a", "0b9a18b266bf11b913c3a2453980137db7a9a8b8548e5eb9ca6c66857c328f6d", "054dc7efc975b76a8f69eaf273f5f2c5431a447bb8fd60dd670c57595fb6d84b", "2dffe8a6769a726866a385d23868e6bc3a092a87ebbc1b2d400ae208711e7a2d"), ("200ea07c428a2b33de0d3427a95d92e757adfd02a502510f07d93b78fd6703e9", "2caf2b2115a746daeb1617a251f0c8518334d20239e2d2734af12e5746527fb6", "2d6f6318ce4f6645da3f5d496e9b4ba020ceffdfa21bbbf6f6a1ecc501905037", "00af222922b90823f954f988dbada30a3ad26811eab1f562bac75a8abea43760"), ("0d1dcbde3a87aaeb74635e1502e1e5a7ca92a8ae1fe9f95502cb07b24d9efb9e", "28b9c39dd8a119230467e084037832a42733562c59f6bc8295e5f70c478277b9", "17f46f5a3a3f20e5294882b8da8c161466b93f6141e89f8adf1100047cac7eae", "2bac174943d6e1d04701d4a9c5ddbffed010485a5c7f7dace026e520bfffc0d5"), ("27a01adb6ac688a23886849069be5594113e57b4b8740410233c3c5a78b4e278", "165704b66d555ef91baefb5a446fddb523f7e402f3c96a5dbf3636bb6e10d688", "1be12214257ef9440e52f71746ec66970cd9bcc508fdb8dc051d73f7e373b779", "1682cb974f64f562e8dfb8f785286a95b4725534f63474da26404925022c29da"), ("20d858b399374877d748177d81b92d27d11e53c81cd6629207ed5ce576bea866", "2cc878ccff1dc42737904aec69251f27dde5defc546e91ef394014552795cae3", "0850497ce71399581dee77f5c22a09e14caf40675dc86c2d6faa36b688c79ccc", "0619b77db742c8b29f5c96732be7a873725c06f84a9306b7c78f26440f341b56"), ("126e49c83280b2017c344cbe1af5821605fefbc74047e9793dcfc05d88d46054", "13eb6c875ebebb34a04aa0a8a7d940d9e0f04dfb007143a0ada14a34f3cb5714", "006285d685ac4c5f26d658e02c10d962530936f494fe8a166c039fc9616deea7", "279306afa89057ff68aa553978329d46978a6f64097be0bfbe01522afbee2f78"), ("2779537d6d0a0391d3ffa0b73ac02e5e9800d989586d69c3c8129f7955605281", "12506affd66958d9041d1a957b29ba405f97037339cde0a9ecdfb1d546f4e55f", "1f406f92132dc14cbb492cf76878fdc62536b62b6270ad87b50569bd9609876a", "0e66cac043156b18e75e8fe8a9cfeb0b3127509ff624f10cf4a0a113390a4408"), ("00c4d8d26cf8725aeea70fa65034d69668d113c4f83622fedd9479275132ffb5", "2ca5771cbb637d2cecccfa320f964d8ed2346d620b4ff7c16e894bb84fbd5793", "0fc1619fc0e53d832cd95a1e9478bf9f70637076203995a3a507b4d6a5878e5c", "1093fe3c63508613a856d37e60b0259d04ef4f66a63c6c16586cab4079461ef4"), ("17015128e6f2085abc347bc04f7c1d34ddeb6a7e1fdad028a8de3befd0916612", "24d90ac328267e32b63a45fff465e6b367988c9b4d0da369d0c473ba40dc65a5", "072456e1fdf14ef7ad22daf05801886d8f2688e086a64a87f296282c71f82321", "2ddf9adc6003fe1d0b1868b43618edbfa7b01d2c4151f5061704942cdb0397fd"), ("2f2708234df6d65777a17380e5d80f7c7be5206b29bb7708cb90ad8a133a37b3", "1ff358bed1b212f475cb3a581f433d1d1374775d6b25bcf452c46c1f61cc2d4c", "03811d5d351050c4239d1d32990dfa38e501a353553ecca28630282c013f7fff", "273fb6dfe86648592be5de30408d34a712ce869dbabac42aa811c7364caef95d"), ("1fd17544ca81dcb531270b97352bf7fec1237937279e0b5eb64ef884b923f2f2", "026764509d583348e07e620723e9f787ae0256a9edfab88b9ad236c373955102", "06a6087110f6c7954d55bd8998f6cf624aedc882d2185354ba48c50f6ee1c465", "15da56e958d9896144b247b188eff00f193cc96d6e896f273f5732b17c09563a"), ("19d3a69f28251bc6d961692bbf3367e895fbf76842f3c7a73305c5ca4a8513e1", "1b21821f4a69a8afe80ff5fc50e41221326e40a18d95b2d093a18a9ed9927699", "00f57dd49599c21b540f8470667f7ef714f31e344eb4c177a2dce8307ea26ead", "2321b091287a07b17f7445568d599455b34925e9d17571fcd03c8b6e3ca017ff"), ("275ca9b35159be0c4a2f0ed4932587471aaf44e4d7424a93808e62449f6555b8", "1871560df0881eb75da39103576ea86e8cbc1e352612784494da4a5760ad77fc", "027cb415876e5b32cb61ccfb74be92e8c2866a161fa3fe4f8b99fd8fa8a7222f", "0dfc31cf623f397b842f68dad32b252af1ee4cd4c91038fb43da818dbafa2cb9"), ("1d73b95d77c350cf54cbda7011c2a6962dbf586800bf6ec5d551bf2cbaa1e749", "1570489cdfd5524d875c6fd66d36dd92df79c9cfc5205c02db3c2643bbad336e", "0055cce179be2aa48ca4c801c556d07198a228e50651193636bd08ebe816e936", "18c3c8e60a88f4d62f17307e56a9d0f3397b803fbc59eb35031b39be66b77e87"), ("0cb59e38b3c280367b9fbb6762f3f9b541cd0e52fb2650fb4c706e80641752f7", "2f56dd635337680663719d8d82175afb219013dc01389f37e3edc3a434842ee1", "06f6ceb81a8e2db02ff84c54113098ba2d0ccd8e9444dd88e23cff31decae30c", "01fc0b28b83b4d5ff7aa9aeed91f19454d488a46c45822f880164f77435e2cee"), ("14543f9a754f9ca243734640d969bdb9edd09d4e7e8bc2e742c19815e56375f7", "00efe736e4ed73d3c6237969d80ecd40cbadf7ac445f95ff0d36af2a12cc1919", "0caf19bdee9a658e294cb1c483345edc307639a0bddaad29518ace8e1ce65fd5", "1e6f5d00879bc5a9c02254ca9a654b163ff1b9441ac63b0108594af6f0b62f89"), ("2385ef9b2bd8c0d0606d14079ddfd8f15fe974968e207a31dd1bb83edebf199c", "13effa5ca6cca18047272a6508c1ef6e1b17b82d736c2b615cdaf55f844eabc9", "1192befb66dd9c00d2718989cccbf5d287d7bd8adad478b46744646d59080ad5", "1a67a7e732a0f44b389bc0f68c3a10da168cdf2211494fc256f17896964ce5c8"), ("2f712484442515c37d04524bf48ccfb167b3810e96365abc878680645d076975", "1c548b2facdcf5e1a8fa365d39e12a470604944072c3f06d1f3965e3a69a44e5", "0e566ec3f43e6ef062d9d78aae6996f005a3ffb3bdff607abdeb0eed354afba0", "0db26afe333ae5aaa4c262c80beef2ba866b4dc163cf68008a3bda16cd705a7d"), ("2938dadd3f5701537ca3c6c176db7c507b082a5c55a68091defc51383957a2de", "1cd8ab85dacb0a4c0917c71858310c7c85e615ef24e93e8aba9e78a651f67d10", "2f4a5087e002ffe563ae74112a26e809aaf1f0177d9e479204fe8b77122c47f9", "1fa29a33d2e47abde41e2284c9668ff9710da7189b47bf688d91d1bb20e70227"), ("2f4f85ce76aea2b5deb59e1bde974ef10e04d965c109ab7cdc0aab9743ae9aa3", "2b2f8d71daa68b5f8fa0dfa42fdcdab3a13535b900410f1c332e4b679995c22a", "1c488c1771ba0549daa20b5f03d627f87b1db93a8c877e6d880a3f12ad842c9e", "1d15722cf9e8abafc414e34541978747e90d8007e24d295e99027f9c815bf7f1"), ("089c6d476df8a1a28d1c9188a3a578adcc2b02d31d7b5b9328fc3351a058ff60", "1ee7f69c8a81dfdf3cbbadab218f2ca011340febe8990f944392fa25077d828b", "1354db5f2c6a68a82d0d91fd59d358811e62b182b584eed156c8d4742e14ce41", "03cff65e4c85ad27bd318f17fbfc37b27ed74c5b1211ab2613ec7ced85cf8d91"), ("293be0b6f2cf6a03d3d4e3532df1eb1cd44f2b93b6139440783d10d292747c2c", "10bf5dccf30762a973430437544f36429135e902b62d67a717fc6a7dac6ba720", "0daaa3a63f9fd8f08d1d44d5f0262d70969b2cbdfd13502ef54845591b896736", "06c5edc1fd196b564ae8fa39015a6bab462898877aa20cbf63af0d688dda40c4"), ("24f378d3096be858ee0f1dbef4954e46c2591166158de8d020a9a5e7f2022e1c", "0adacec94fab44b4ec53dbbac466036f3e3060d0acf2ced6dc06606191985c96", "1ec6665a86288dd7db36578dc019d0debd43a0994aed86bf70385e7c8f8d4e62", "14c7d043fc11220d7fecb67a6778777d0aebef292d9b9e1066142cb1a730f311"), ("09e821cb307531be43c971bbbb12e60364787947021440c79ee2c4683130db74", "2ca9ba1cb1fd8747ffac73e502f04e4c72431402b3c0881fe7e5d4c206aa2c6c", "2818439626007a2fcac1d102ad1af2dccb3f391c6805dc6a99a283101f244f34", "01c3a15cf01faefe2dce6079319641347801409622518727cc9bc53b25966c47"), ("02a7e73b7317640164c83f861c9ca333f4f10ba7bab9b784d442d25d782a637f", "02331b8f551452bcb78ede8aed127da70306d8e3a4216a0fd33adce2f67522a1", "1444927f6139e633992b8dbe8c8d964fbc2695935d0856f340c71b4e07248b94", "20692b36412f03114688b660fc5ff79308a5dcb43c91e4ee4db57c1cfc918f80"), ("28c550421ca90fc1d2fe9a19f009432702e3355780f4822812524fc8afa7a683", "1b25e1ada67c73cf75d09f2950481403560767f85af5b3c83814faf2151fe0aa", "0e6b6dae64eff9e44ed5a6b6a3d8a00ba256e39dd8126a08a995c7c1b89b0820", "156cb2a7d86ed0043d6816f8b98bcd952b11ec5ca55886ed9fea446f0b937c95"), ("13dff2e996c6effdbd4b365b7b6cb67e105a6b7c959216171bcb2f043d83ae58", "088feb31e4f2c9b12b8893218c53db6b840999101d828b99d25f339404ff823d", "27b4c61c136e7ccd87ddb457cbb8029291f20e5c71aa1b5dda872a5f76c84ba9", "01ce9f56d01959b215100956b21a26f81db351fc67c3a35a812ecc83a6ef95ce"), ("00787a8842d4e582543d5c96656e4f8775a18a30f25cdd1f4ed9bb57211d2a05", "036fc79b7edbf59eb3c15b0ec65a0c9a32a939605fc5ea855789de559e7bc728", "04a1a423e3a218ba32553effdfd591fc6026ca74bae92892abfc85f54155fb06", "155bd68fbbc4401ec8821e3118bd4080bbd5fa51c6752f32e14472ea75ae48ca"), ("14f4afeff2bd101fb55ceae9cbf8cad747d4dbf01b15b166d4fb46bfb42aa11a", "0056c6686debfb277968bde2f623483aa44f4bb27ccd8c928b2b01adbe535209", "0253b16b1633ba6043c72c9a4f21ef7b8eb10575e26fc850fb8329235cef80cd", "2b09356b3907b03fdd59261486c70ea9b60e47631c538fcfcbb7aa45da40a935"), ("235a94d861b1abb3826d3c2689e93282fab73d6747db082c15ce5e569bc48693", "1a3bcd25234fb58ede3707477f5d091420bb0be4f5214fdce1ef38eaaba6f1d4", "12d77cf79067d13f1592913603d218df683c14be9f828a663ff93f54bb55e065", "28089fe049436f5f94156a3ff1df3a702f3cd9a0694ec36637b09038194df7b0"), ("2da7e690c686fab82cc358573042a1b6b61ea7aa60ee93169b6961f21e15172a", "01c7e680dddea0c103d1089854ce4a3d841198a5f522e2b499b2889abed884b4", "16ddbda996955dfc1562cd2ae9ccabf75310aa9d40d8711b079ab25d4f46fc3c", "18ac12f678fdd28f12418407dfa9b6d2fd5cee4ea9b9bdc74d7b6f99617cb5bc"), ("262767eba173a42573f81aa5c1af3b75e9ae1bce3d06764590ac119a32b23001", "19db02b835e8bbdc1b3add087a0b40bfca41cc3f6bb18df1708e294c73f86608", "0799a9d211adb573670bfb04d22f24b65ed3d1fae0be00de1882ab156a77ca32", "131057c36271b6495d5beb47bfcab988f2108dc37f7c2aa44c9ab590abf2ef44"), ("22ba51532dfb9f2ea9ac1003cba63a673636ffdfdaded54fda861ccca835cec8", "158fd95f86942b6b67104d20e0ef709540ebf17002de05a11107fb17f7d184bd", "04ac1db4343cbea32d4939fe5d453684eb488437c108da28881abdb269c883b6", "2a342d5b912e9340cabdaaa9f173c50cf26cc410f41629a92076d02229bc5231"), ("0a3a3c5ad3d8f97830791c9ac45e126abb6d4c4d2c60b1b5e1dd1d5b0f4f419d", "22949c7850f5ff422d7a417088c7b1d3deba946a99e9f3bb4622b9786656923a", "27b003a88bae482ca21bd93222ed06aeb9f6f4774bc9c6e0153a2c896f21491d", "1ee36aba67269cbd5988e01d6897d4a12ca3128b05a64e998277a563720f4400"), ("2b2aadd00f72a995b868588ccf0ab299bf85ab7019ef262e696760003147a00e", "2b07d02ed068fe7942ab5fdac49a5c8770de2a09e799b6ea0d099b1d0ac8de12", "162a2459a3ec55aad06e64c40b87663462ef21ba7cd17fe41aa5d2739fb803e5", "0561fa99075ff212db4086695658313bb30a771dc6c9b3b83c2fe456dbbb7545"), ("0f6a539405c5c8a718a9fd57685543c8ca7a6d7d703fbe5bc9f7c78fcd13050b", "133397ba07ff164c179e9f22bbe775edfecc3a50e7d2ee31a610b91ae569aa10", "0eb5a0092a8e0347cc0bff39fbd787aef669617733632d739a6a7b1938f80745", "1b2234f212eaa02b8eded04532f27d5d09b322a3d65a5c2e96f0064ba46c8484"), ("28dc868c7e8791a7f8f58f0498acac4fa827d774b48bef87726565320b8fb8f1", "2ea0816357ccc3f0383a70978395a97884aebe1c94d4e376d2aef1caab5ba938", "1d08bb6829a2f5d2dd395fc49f45a6847c980b9239f78e7874ba7bb23f25d70d", "0380926534990abec8473ae19bd000003453c04327d5e984ff5e2216fa8c3aab"), ("0fecd1b1f71a7a9c316ac961dc8fe78bc1853dd7002f04f0d4e01fc590cca394", "094919ea9277871c0b7f0484758bf2b286b6c20c10f57853c30d4b3380b3056c", "0e56f2e7afe6fa433f7cb9451c26d14ea61f22620cc0ac816984be11d6235788", "1c2265ee8c110f9b0fdd07e772e7311c263de258dde390f6f712360eca751ac8"), ("0335594cd9195481d8e80a4860ca7f988483141e371547b6992b9914a958c0e2", "19205c6c176fc8d68962409d30c2dc0b65d455abe69f3b298c1cec8a56e82074", "2f596087a7c015eda1f5c336dd006b01d06da0e615f38e6de81bd99261752da2", "2d33228d4244faac677a55d05747603c727052aa64522d190dcbe7c2c6702aeb"), ("181b5110d1a25354007cb30b3cefcec75e22cf3e2ea35f45fe9a78471329463b", "2042c99ede0aee551ddb0c0b59af59945123a148d903ea16af21e5350405f151", "18c5bfc7227b6defc5d456fde7d00141452df1e54b76340696f6724a5d1ef643", "20a49316c40c515b313d2778eb42cadf5b7eb30038a9a3129201acec44e8109a"), ("2554352d8cd4e1fab7bc6f1c8b62eb543a7af7601a9ccfec05aaaf385acdda50", "300a29e2b6e77d8726e66d6f7409055d2d8ed6863100b350c5ca7b079cf61c61", "0fcfc5bd1b8b0cb31bf2c1aee4d0c0caff71fa3c82b665ecd1ec689f5e8a7f53", "146d4b8c210a22ca451774e9a705c2a5b61d73a0dbb62d7045878e4e84494ae8"), ("1fed7b03f35c8359e0dbc7fc60a11e47381e1a0bd53ebc1033b00052df9e3491", "09b52d1ce3db463ffbf68ebddbf5e6489efe309c51564844b37eb3ed7078c26e", "07b1265846f139de61da13bdec20b51b387ab8707acfccfe880718f03f4eff6b", "268e9b7a2003b3a358eef803742398c88ce9f95f64ec6bec8251b1fedee9d79a"), ("2c39485ca6eeb2d689c6bebcc47a672ea0f9671e130840a39815a59d7965f1e8", "2b4aef5fc37453c2a91def2a24604cd31568168755691b0dbfe81bb9ab5a5f38", "188c2f3e7309151d5d1636a88692f21ac1b3eece4347c02ac20128c65ec624bb", "112da9aa055020a898eaca934003f903f8364b721c04a20cdf1bedb524d846a2"), ("2a8ad68c191f85f6487f78414d846a6d06a542d3fa5ff3e041b30038fd8e8297", "20248482d9d1309017ddbeaf0adadfaf09e53fc4522d725ffc0c8c77fbbc3f7f", "2f49771c815ee07a3a1edf7c1ac9d60789c20d6c4b6d5b20860f221ad5fef56c", "0482231fef993b9b5c2ed0b36508b7db77a94dce112e13829663ab2976324a3a"), ("13d0053d267559fb757f306dc90eff21a407634d1406c40bcf00181ad93384c1", "250a7a50c8cd6291f8d0d7409742c9408082b81bc33e770a527f438691eb85e9", "0a7466082a3fdec906f02e7953bbeb3fda81a7eb0f426a62705ce380d16ac16f", "0cf97d60c30cf705841b7025aba6800024c7874b103ac18854f792f60c4b7c91"), ("072dc282905a29ea33e74e19f199f615b24e587912d28fd5debbd2a064ab0bf1", "2e387ed762fb1e4e25649f8b2aac129363895ec9150b1c8630f2e6a6d6678d1e", "0f19b2d54c7a0b871dd60c4310290e57a58d61cc7f97b534b6f7cd0a09081f33", "2a61acd4ca8695b5f95a51e3ab82ce9ea647ad529bdc6e2eaa2359eef2aefca6"), ("1ec72321f06e3045dfef6f7667b05632a1ad30aae6c1e4880f0d8d99f31921bd", "00b7c55e0f578d640ae328b03a96a168ca96a783e9a8f200821fdaff256dd457", "22a8cd296bd11ad5d41a494ddc349931a5749d77cc79c8e518270ba152190987", "13186bf9567429f4f17eb73a1d654b6949c41e26931647df2974a0ee7a380be3"), ("24ef12435c6c4751065d4c410ca942a4ed81b0b7579783ec0ba11ea2b1aab519", "1cfc94b93bcec97df214a61eef759bcd646fd730737b3a9c797f5851e0f6cac5", "0a4f079fb935d6ab0b298141a0ffe424a3d1bf5dd354b894f6f8412512349d30", "06bfb0fc4fad840b593c9c96ff32186177aa211b7f9a81ad25b5cb11e6cab0a2"), ("21d0b3b29e00a285af70a434f148f02f21cfb23359b4d9544a08164e6f9b571d", "14d0a339c4f9749e62d237cd60e1f9d74258bb74d77846f3aa73b3e1be3cc57d", "2a0d18f3ca596fc447d33d90b66ebbde98f99db4d4a386c668c389c2024f6764", "2d1ae6b871c251295e6ecbe2f8cd3bd167dac9b23779f6303e2a8a10dbcb5969"), ("2c74a23c71dd3f70d4fcaf3cf459d4c2c6a128f6cc0d04ebabd3cd1aa5da377f", "08293f0495ed0de39a69c94441601f5be6ec4a45876f11ca634689d54ed101b5", "2b122ace34df6ebb64b046f5d146f138b49f5004694546a51870743217c48715", "22d6dd491ecd5d3bcb55a4fa888fec2c8ddcf45c81138cc3bbb6244a51d375ef"), ("241454185271da6e814e63e9badca1eaac2a21b396ee3d877aeae52be1757b1c", "305e12ca5c178f60f6160906eeaee74d0bf8d073a925406670601f4263ca4556", "202170386e90dca9dd4f84d7e246650d509656d127b32c15c2a05c13bd90fc98", "290a76f553ff5c52a216737f83d60c374d309b99c604f73a76353e8674f38c72"), ("21d8aa77130d56b6c4f482f6d3cb00089e51b5e0c8eebd0d27d03e4085a31080", "032c8311e8582345ab75df6a740d82816dac79cfcbbc476ecd5e12ee75e7507a", "2e8d83dc0fc5d78d73936ab75b566a19c4e0c2e0272dd43b7b5fe305238558ee", "0832f889c59c9df11bc01e768c1ddd8680ecb3f023b033d5cac64493aaf684cf"), ("186b08071e774f4df2c80187cf7ca973fa25296efae171fc4f6f9238025d650f", "1f8e273db823d0498058f3b5aa438c774b4fc21d0c9ed61e1cce03951a5eaf28", "1309af613ed7de454c7aa7fafc7e07ab52bcb94b5b86a1b3d409bfb1515cef0c", "1d684159e3d09c06f5748575bee829b08d74f87dcc8d664279625d7bea3ad462"), ("1267210495b551deb0f647631ec3a36441e401a2ef92916577808a478754fbcd", "2982c733df6c9f4f699ed8935e35ad7c3d9cb39b8a17a715e6af4af862f165a6", "2541bf4cd721507556ec77ebdbf9f398407822924b143242e1d923f2267a7fb5", "0126b2527d3f045408397bbdd3c9aeba0b846a18a541f6bbe81a538d51680f5a"), ("028a3bba3c4b6140b71e7622f47c1ecc01c15ba49b893301096046576e1e8fbe", "276e5b94864e7e3a347ff3b6d41f32796be1d829faaebef3293b4bcf059ef90f", "1b96e0082371a267c96457eac207fac5711d8396e10be286e2b0ad18aba32496", "067d02f9af53ff614103e2221f8ad435c83b16acc50ebcf64ee9740728220eb3"), ("212035b2f74c5e6aad1fcfca5250bbb0879402f0b8a384f5c9c492f62bfe36f4", "09f8b4a8f13a40965f9c250577acc05b1c1e8d06e4fa5f4e2393d082ae202605", "043301a0ae3263282818ed473740fa38489153f80332614cb5b0093a98010e1a", "16228356e6a3d77ecb7e82b9fb73cd98ba537738b8ae17ce44bf88a5f5999bf9"), ("21cdc683a62621d2ac7508e8f043ca361cf85a8850cd4e9099e8a146b86182f1", "1ba02cc02f8a02e5bb1da4201adbb70640643acb5bfd9f34b9eaa620ae87f962", "024507f422df4f2d2cbcca80c7bde248795f10361c3ea11d1d8e344d080a0634", "135597a0dd4dd01e3412a616cbaee408a94324c59a641f9b7312d9e4951c7e23"), ("09b4075de149acd8d91f90d399b38c334ae65697fc50118b8c9826a9b5f6a4e4", "1928f8ee32460f59c786086a0cb484f17e7abef57e8f1ff7fbb855425714550d", "0724b8074baf2c1bc16d68f793d8445ced5be8545a73f0a66b0c91f24c2b071d", "2523a83026d80287c9820716cd0bf0d0989779ba33895ef257852e0667f79c70"), ("2927dcee747e569235d9d6da43f8713c657b6d92ef18cc5a66cd5f6376d9ae65", "124934a28258deb760afb27ab4f36c4a6f7762a2203465d0f91364f2d0487f9b", "0efccf818551cfac1c3874ce78334fcf72379c1b8ef1f8bb971e25b3d414b7cb", "07f73535f45a668dab534ae22d707b959b800b5fb1a93876f072416b831de641"), ("25d64a08d739970ad16729d0b38eda6b61e5389a10217b266c2bee8f5eb39bec", "2dbd3438f799f07be3144744da0d20ea76b81f526fcc2e3eb139c8bbceba9383", "15e295682609d153f370e2be14c87af126925483ae1150665bf762bbbf8652ff", "06d52023e175d6903bb5c1f20454670beaa4c607e45fe94ecca8900c45bbf4bc"), ("0081b43fe31f34e34e6fe8df9b39adf72b73671879c6d7f6f7673b6b9f1e3200", "1106932f74d445232b0866eaf92fc8061cae3c446e8ba687985c6e1236e3b823", "273437c85b634855736535b60bb0fc16b8382e721d88422990383f21e6c2d9b4", "1fecfe21ba1801eb403602d905eaf8185cb4652993c78cc9a93eef123bb4fb0a"), ("1603134a68a7521e5566bdd9682f91b8eff26b0fa264d3093bac98eeba492054", "1d9dae6516813d8d47d64243a83b770df042170c5566d3a31389541deecd3067", "185da76580f7c69457398ebe3ff67ff7d94a1a584ad51d568220cfc2e9c36979", "01165ecf01efecb86832de31c90f681ae5ee0e83795d185e2cb4a11e38549372"), ("268f590bd8a4fb07bd7e9182f9356fe5b817845806ff280a85b25a7d318fedd2", "1286034e05f0c9a0549f7efa4f6b9801f1eb47027dadaa6884c5754a0458995d", "24d27633679a9af396d66b18f79b0621e9b52a4e88febda8f8e8386a788a9fe1", "1336fdc973ddc7f2c7b9d1baab67a1a7b3ddbc18d38ec38d69820e722e5669ad"), ("1dc6fd85992360e2bf39aceb5c328a28a85804da46c61012bcc462634494dfeb", "2c6e6f1b95e901906badea8d698485fdd5e90d64c17404e695434ed02f66bb17", "12bd5d4630c82de561c65dc19c76df665825750259b617826c76249daec06823", "0467c6e9cfaa616519e5ebdd4ba27d73348f92f53343921b27939ad09328c2fd"), ("0a6ded90de3f3396c60f8a3cb096b11a2c03c5dabc7e82512c5a5bc6814143af", "27a95fc62a5f069fa8e510e207d7632e9889a5e58281f80002709d96b0ca3858", "267c8f0ae584300b43a9e0adae222cfcd378c688b9dccdd3c02f1b2fa30fbb5d", "024b34081fcb3807eb86c7c06a39937910e98f8a810e772b5727c0351e02819b"), ("280e4a8a56f70fa324cd2b3142555e5f0564b87fbccafe8f5c72e40379c558a3", "1a4c3cb4a724ef645426c3d96a217b12c1271c994e4af3e7d040ba8eb0de0555", "276b9c314d0972ea1744cdf486d9c622b064c62b6ab37671b52dce5f73af848a", "19919f9351203536fc5975be96955aa30afb3de087c96c1b9d896682939c3ec4"), ("006ed7dba150c9fe9c249a8acdad25ebb984b8a43fe3148b3982ca5155643e05", "09908587ef49039077585cb6f30dc38e9f33f120d8d3e438a03efa4fb7e37b58", "2fedad922f4ce22a87c8c13850b7940b45455966826155a8790fbec20631df49", "2a65d894b981a24710011c4fd3ee53ccd8abadce6ee373fcf7c3d7575dc8efc0"), ("2e3fe2d270c8eebb3a234fb831c3bc016dad381a1b30d858b641f160107ccdf0", "079fa8cf1e39f15239a74eadfcc48893a1613a733ae24881081457e004e3291a", "08281eb16becef4492b180133b24a8c41db661be6da9b59f82bfca17d96e14ff", "1d92521d33e4a7d05e018efb57878cf7ef94ed17a0c667076a4588b99ab170ac"), ("0ace427d2970fb4a4fbde53b0f89a7555c6356efc68a3924d522029c1b0aaf02", "27fdc29d918386a875937cbf595a7cff29cbb8f6557dc2a39fd5f5ad85918608", "29f4e968566310d21b2f12a4a76cfb76b2247c4b65e710de49add996946de1f9", "046a82b864be156412b5fdb82e15c4dae9119113a0cf2693f8ccea050bd729a9"), ("2f86098d7efd32f239a72ca9dcee2f872c84a379f995222339292ee5637b22b9", "15b14d587a105c0713a2e98a584a2bc7875fca309fa86e079345ac343d45c72e", "14de120ac4372b4d952279cd2f3a886376bae60669165a72e6f08e8a334df26a", "03ebfca826e75cd4f2cf2eed1f6e105ae7d796065ba468562556042a3a54ee89"), ("2b04c06c4f980b4cb430126e2c77d51bf83425cc0fc9145bf348edcda5b996ed", "11c14c3eca088a3fbfde221e530a0c11563573d2141387d00ba5aeee90b02768", "1cd3f25460050ae554d84205a8247089b4e3ff8508d628e6ec97680da03caf04", "1d8ec4f4b49099784c8aedd73509e0848b26e417db60bc2c8ac5cf4e5b64c1d4"), ("083e85f11e3d5d41076d83734971f22dd87775198115b7a6a4302d89eca91255", "213cfc19e8f11a212ec1a57aef94f56523409290eb1cabb259a8ee0866adc45d", "2abee73ec30fcb7e2a5e9c1d5a1e6ff52fd1d623bcd796d2931aa535d5fe7a46", "116bd749dd52d9ee7eb1468ad362931e51e22bf3c33c95259c7a768c3390c33b"), ("2be3ac4cc93473f2072348656fb321e68673f10a1e9479e33fb6e5982c343f31", "13cc71e783847e1cfb4180704e3741272f58ebf9bfc708476ecee5e55fa6ee9e", "2b9076a6ffbffeb43e88a48383ec82e5fb455c5f0eadc3fa8162a606e98ff058", "147b4458bb788cb87e7b48e17f9779e23da900b4cf15a3e8737eb2a79e7b0c7e"), ("24fd1ae5ea721936f9b01ef2d261c382d51bd35aca7b6777b19720dbda343b72", "01bda381e3a30391f52bf55349eea5577356bd8722f45d177ecba2dca5cb3d39", "294dc9bc46aadeb6728890b807ca4668ea016c8b4903c84b5107feebbaaeaaff", "0450e94b9155a79f346f97c6faef55eca02c0aaaed48f31f7a74a35c7e368f32"), ("12aeaed6fd2299f45e744fc17504492f4e580b667803af15c3c891819cd2dc30", "2fa324fde12a8fa8b1230af2ba2f3bdf54835893082e3ba8c71bc3b740539ba4", "02e41532e06682f39b80d5c1bad251d136affc7f08dd9388913d8e09c4ea12d9", "1cf7ae51db8b10d6923d622800722801a96462c56d1c4de70e8be580fa5c9583"), ("0cf99f26ae69a69e2f2c1869f7930124f2445524f8dece86e4cb43b0d4f93186", "1f6eaa5929a919cc2c53429797ef4e8e8d6e1387a5eeb02f3dc2234314df967b", "0df8f14108bab71bebcce2f84d56d9bf1555e494180080c079887e4eab4fc082", "21047e7026375da74c1c75294bd1411b69779bbe973826b2db3402dc1b50c67f"), ("0b235832896107b0dded345cc41fa59d83349473b3c5f98b0c277bea1f16a35f", "23083deacb64c4ab881692060d95fd1806c6703fa33222ab029f2ce55253adb4", "2cc537a67e3c70f1815b77a797352b11f697c9727f9a14b5e2668109c7a1dd37", "2336ac4171beee91568f09aa04193a67e1d4adb9fe9d79f6e11d1a7bed97cbda"), ("2cf665befbd5de1ce4f1152524c1de959058fd7348ac849acdb145f50dc96f8a", "0f7e64712c8b147f74f1b2fc982ad6c1edb47c772d768b870d0ecf6e93fbbd03", "1dd609ecf2ee4e560f8df6278a8e8dfd28315612c2fe03aa55fdee56ec151587", "1984387ad5501986cb0e54e14db4fb01c496ce609a453e94a81cc7243580e2a4"), ("0848d416552ad795f0bbb453d411a0ea6aaa824fef193ffaed7e7b3083d55115", "0ad844b005a634d178bb5bc89ac883468d1de06cf15fdb2e68dc4147b94fc930", "2f6fb1486a834090bbc85edc1e64470c9f6cad65bf6d136a3d2b52a6200f4d6e", "17ef1dad860ed00472d3c9a82bdfd4e3f038868573b6975952caf3e326faeaf9"), ("141a7d93dd8a18fa8063e41c64e16efd15351adece8d2ea476456eb3e7add77c", "14889d7f1bd30064fc3cfc9162cb9cf0438c703c8f056dd527e3a102fb1f1a3f", "09e11c1eeec0d514b570908536ec9e2a22a7e9cb7d270773ab4d3c80c7e160a0", "27dce8472e8a052c2fdf0060223e30c8267dcc461158349e6420f6ee96db6380"), ("15244239e9e8ac75ce81f83cbdf17ea0a1661deb8bfa2b03134e79ad7af5dee1", "161b9d1a7baec31fc92e275987f676c59e781b72a6d0622c70db19ec65d4eaa5", "21e109e8ce4c7b9353b51e1b64750d94d3a900f9f113c12c9de3305235916e23", "14fe3018a8f626ae4f0d99ec6974d45de2c0c4b045cfb55819bd789a0c30978b"), ("049248865f0aecd45183ccac87b99bc90a17746771d551f84231612c4d53be12", "2d48db71c0ef9695e115e63f98894ef44382ded15d27bd2ec2519304b6787962", "1203d17384f2040c57644df6055e02916ec1c08f8b4a9fbcba43c5818ee374c2", "11be2cea5899015f727ff54df5ef5dc888346c33b40bf32220082c49246eb117"), ("0377eb4acd51d9dbd77300c67b5059f04a1ed26b3fff17cacc86ca1288434d3b", "24bd955f4095df8ab0d87e553330d7b35e33601c2f8d9f69b7368c2d7bc72e30", "15ddc767ead6eec7ed48caf5cd5fae7aa5a38a93f5680f664af740e803731794", "1005fd5d405ef68c62a30140ff8b69deed6bf5a16d4df4573c6c3fd17808c40e"), ("2c82712aa77795ca710cbdb81e0b986925620cabf00acbaef5b25b79b20ae561", "0b468e8804c3b704c57518ca3b06a22bb65963faefbc641dd1667f633b3152e1", "2658746c5dded4c8c82faeaaa43a163ad0a351972fd9a6b71635c1cb9e1ea017", "09b9646c714e0550fe0aa17148a6b485648334d1324f93bda61e882605148ff8"), ("27840381d7cd1b6df8fecc430ac50e30595375631dd7b46de12afd7ab4b915bf", "06d0a531c8f83376264af94db6c8e8dc9a978a68d2f7679ad7355220b769c5e1", "2d6906bbc162118b7e1163e7b89f5cd59dd99fcb96c43cc75340d4cb4b90cd62", "0761f89e7df875e96edd3fe514ce5cd61007fce610708d6e86ae5c15a9ad8de7"), ("29f06844d745c0601c923f800227722b400aab3dbac98bcf8f2ad3f4cc3d5b66", "0f24da77074f10153b7378c3c51648ded951da9c2fdbd685592ce8d0877e5fe0", "04a4ea1afcaa06d5337695481d6464d7e3242b2df953d8cb7e9edd69f1c4307c", "2cadf581dd867299964b226326694318509c01f723df80f06f32528e95ebd0b7"), ("0d9f703da37b04bb7ba054c84b333bfc9ec7fdfc7a8d6c9ca03e14d3df2bb9a3", "031d9ff7ac9d0c76fffccfc5ffd05135ccbd35f58fd11f370c66c217d2ab3fe1", "148da1518647a4baaeced44471974c090f0d1851de0af4b021b30105f15dde1f", "11a802e1d4021336e8a4e509af7bdfe07e353d63033ece2d4df0e7f6da6c9260"), ("13f1279e01172005b772939d950ad537fd26b8770dbbaf360ce57ad12b9df995", "274c9bc44b83273c429f7c7cb87679df51f007b2d1a4ac3353181adbfb946c62", "109a36249d9aef5b89613834da2a80f82ff3574a40baf090572de23547c6fafd", "010606d1277a789e86b22c04542ae9d88c8d36697ec03f3e398ddaf74b51200b"), ("077d2a982ff327b9522ab6959ec4a165d5b6b850b04e09bad9b46da215e8b585", "0970a5596c322265a7cfa0b3226f4e2f146e22207c6db2591764c1da14c1b283", "198380bfe89930ec4d8690f60e942af045efd2c633e235df816cad2fdd2f8c1b", "08f67826540b9020d8eeeccc40d3fcb8b6f62fae95b5113ca0a2216590d91800"), ("00fe6d6f282520fc51b9b038bc4f69aa97e785c068dfe353904a54f38a79082d", "257609807a951fada76029cb1ac7a5df4794d2f690d986466f0fc020e132e250", "0dccfe3571dbba73964e5995308a5aa7690f8e941e4ed2bde2a979b91d6b3740", "0f108821b7af9181c8042223f9ecdbba9aa46bbf280a715c219484ea80e07075"), ("1fea9483a6ff74fa64ccb1dbd64cafb3f4550c154477ce0d96314d54a303dfe1", "0dc9eb0fd1089a8c2027903631674eeb8028d570f7f9f6eaf8c4b98ff8a8744f", "1a0ffa813bd7740bb6e0a56a8b03dea3901c401b9c711e936fc46ea7b9ef7881", "21bff745466239d12838a143fb72ce141a7f21705c6fc22578595c44e19c4c0a"), ("1fcc10f13a736837d5cf30febfa780f04d0c275fa84020f277a309c14eaeff96", "28e304bc1b32e194815459dc70383ff59d176c85198299505e94d31be197add8", "0a39661b2a46aec34bf8e99d9e69317167261a6b0f9c04425b8915a855029c26", "01419bd6d62a7c757b4b6c90cd7b39df3514be37553620777897a280a462839f"), ("07a711d362535cdd584be160a709c87f4f124bf7181166c09abe4339211e8602", "2aed472e5a85ab355ffda745213859e286ba80144092f8b7ea49a2904bf80dfc", "2d2df7906d76b953919dd69dd300152adb56ec8ce3e6c9eed628e575fccae7b7", "1e9bc2d60617b8dc39b3cf95351c7ce068dedcf7dc3a31f0b7417f90e2264744"), ("0a7e173139c0934592943b8ab1407b6c3299f3f6ee3bfd88de9505ad852009f0", "05ead15ef40c3b3d88e310de2b839ed66ffb08bc47a1e864bc712ef537fe2316", "06460ccb070596ad7de76247ed48c0b2d8950846a6f02ff5d8ea7489e2143c3a", "175bce33dde4528df52be119bd6f44a00af574658424237fe51fe54ae2c4384b"), ("239c4f7ab2f2286bf3115f9deb2b3193a5790257ae09495f69929a212de17bdf", "0b3598655e0d8a7d592bde57362c8127a1d89ebe649da147027faa7d822203d4", "2c5a827596ff969f6c5b5a80f8612708fca797d1c62eefe77982d3c23d2bfd54", "11bce442807dbd05f4528e5ff248a6e303ea43a42df3c4bf2f3d0ff7363644a5"), ("20772af1f8625308bc8bed16967f5ad5254af104e08eb2459012a69d94c3bfed", "0d7ae2723c26067cd159cd428ea4016af4ca6538a3d8423566dc675920619130", "2f2d64df6d9ef639fbacda0bacecf1ee4b4c54a9aa5da9405ca87c5fb6db1fe8", "03a9ff6f0f60f3c016b4a8d08f0fc97841f2859301f33eae10cf1e60702f3108"), ("1d9d40f9098e452b94b0af3b157bf30e0f3cf6ad705d1757b3ae13aa4f307c21", "09a56486fe6363104df4d47a1ba427de41f42dc1e40f9eed864de639a0468954", "10d4863f9f34d0035ad4b945a114ecc9f17ac52385849e849a8a863884cd77c7", "0fdc91ecccea99d74dd418642a3383a0512b039a96a0858667cd1f22e08f9158"), ("0845d79aaa7c5a62f18321d4e990919e45601f5ce5257aa2aeeeba6b533a76f2", "15947e258fee762e13e02e7c7e5e38750bb39e8e5a06b04ff48461983752663d", "188eb5bc6b96440c359e85ad946eb86f9be1fb02a8089566b6fda83d410fac0b", "2d495f78e38ce428ca0cebc89a88f6ab83ca39142228cda7f36a72751768f09a"), ("03230ecd66eec74e6666209a112dd8b42a5a32b499cfdc267704df7714c4bb4a", "1c2bd4f148dcfd31d4557a6144271b1cc02171f8d3ec0acef49afa8b47279616", "2010f2584af7059a5726065b7f92157e1fb99b4f6e4d1bc5b6b04d39f335f9e9", "02a8b20f6fb788331660564804794913adc1e67338511b5b3487223ad20d2c28"), ("20480854deaa2c1555a6a8ba285d2f3297d3e51821079cec562b5f70cb62adf5", "1f2778766b5cd7101169d62d9218866dd0c39fc062f5e49d0bd6e2525d861097", "1f7e13280914c5c93a68a3ba84b3cccd0a7c1089ea2871e590a35b5f90711f27", "02fdfb99f4945ea7dbddd48dd4bca45d696dcf8c6d65aa0e740b10edb7e65a9e"), ("006c0451814e02678416459534f72abee52f2c20ddc1f788178c075dcae03605", "17e287b60393b68d3af254d182201228d9742c855b2999dacb266778073cad5a", "25eb2012e32cdde6c33a30a3327ee58e762675da3964e24ad8cb6823afac172d", "175405b7568333d9f422adde1f36a18a0a0e79ad655ab067b6857e73eab487f2"), ("1f9471e23cdef4c7d8b23f630c0d610db86203a6b674c0e787880afbd488f836", "13143e2cf9a84caa7c244d15ab9c5cae783e7a1966dab7f7eadcfd6fa93dc535", "3010419d08232179bf2ca7eb899551dec883983f6db4de275e6adf8b73c92161", "14e59934ef2706ff23985691a1fc892fbd9c5279af933c1cfed9a2030bf0e6b0"), ("27ce8aa8bb74ca84fae022515ca9020e7c27cc237d49f824de99a3354be6d835", "1762ce7a07b6b59be6f5f618c60c74edcc39f4ab7d79b952c3ce58fd4a8f1315", "2df25d1222811c61b921273f56facb1c9d95c593245a45fb12ab68f8047a6dad", "2e1f8b5ed740aca6971e0fb8b1ff8e9a9a3e8338e31ee7951ef40d8f6dd28a89"), ("066302821c975d251f5914e6ff4bb91ed66051981ccc31cae692e9d34e56429c", "13776a2161aad04484cdb5f0e3439a1f6af130a2093eae25ab3666856d885346", "28e3bae7f6072c77d0e49107cb3350d798771e444e34a77e7f252e374c760570", "030ba84cf40118c9cb76f2da93af4702f5adcfcca88bd9d55c89e948d5424bd5"), ("1c23985cef0a71505be7151e4f0ea19dfdbc228b23120bf108e099ab9cabbbca", "2880cf7d28847679743e3f3a285cd90df60afb917924c0e31a33abd6b6df4fdd", "2d2b49a915de36d7e3ddb150c1992fb743b3d0dceff7f10841b1c452a65fd834", "2c49fb9ac99148b7fd05c6c2d867baca0df5aeed8f50ea3080fe2ba3c54d7a95"), ("19f16b62bde973f0c97b5a3c198a4c8bd33804b0f826573c2db91062e0371cb9", "24f3f9a81fcedab79d6a79ec7d1738c7fae953f54f8b73a57d23ef33b6bc353e", "1fa8baa67f8746b330d43e0399358fb776157f0e7bbb45f85f81b79d3a52c648", "0606763511f22becea684ab69dd60862919cfcd7859b3a598fce7881736a874e"), ("179daf499bae7070b4aadf917c3d3bb52361a34c8300e1594483d961261bf491", "1ffd7bc01fd017458b30990adf30866356455c6acb4fc03aec5cda2aa1aa2270", "0e9cd8bf26334257b92c594025736a41617e5e6f07ec4794cebe0ab2959cac10", "05d486c51a8e28825e1fe5d5730085abeeb70783055a9723d2c8e69c1b1b3db6"), ("0dc9b5df5bd0c258392e0936796afc7cf436394662848ec6433b7b1c063b8655", "02cf5ad318a93a83f8fae012ab45ee380adb461a5a934cbb8d16a80017104c74", "138e2f9225755a5d36b34ab13a7eedd11a4156e5e03b85653f440bba9cad8239", "2b8307c2abf9ffe74dac3fb101e180502b0e6c4053526e3d48d3fc5ce03fb784"), ("2eb2ff254a37d944c5ed84f6d87ed2623caeda2eafa4ddbefc65703364825419", "157a5d56ff47c277380c7ec3ce9d0e979a54fd6495acc6e9e0b54166dba7ebc5", "219b54faf3fc89a15bb28b1f018f72e0570d916b1d08b0d7d481a7495604c58a", "02addffa834da8f7642fd09a7265f4ac7817df3f38c6a2d5a7adf8010d7c88a7"), ("2190f3d76493e5f914cb8f05206f44a192ce0eb5f8aeebcf4579d117e1122003", "09b3b965955c3d785085d0977aca4cda9ab3c949dab3ba4ca3576ca13d9e14f2", "2fc99142c305848f6cdb580257fc35f5cb6de00f1cffa412c44b907223dd896a", "0322c5cd96bcfc5fcc596c9906da270951340c349c2caa4039cd2d25f8548613"), ("173502828433f7336d517d6e3b7d2a5e41a83a51fac993f67b52550d2a1420ff", "1406314b727e8f3bd043c97b218cd143d362dff17809df4de373535de25ce524", "0b223ef13318c2a99090d85265652558e19ae90b2cb5494f947b86effa4f5787", "05451ac14a71ff71989354c5db868240d5b317819cc482aaec4a0403494e21b2"), ("22e4ce708f9079b96f4f865b4571eb65ecfa161686643c6c2dc003cea44ef887", "1d2819e11056bdb72a5266fa4b335d500ffd51834320b5e8ffb82673e201522d", "00966c2ecfe318ded5f589524f8b7afd988aa05a3e20b0566ae33893105267e9", "13507e9dbdabd5ff2a9d11a2fe97d5188673d41ca8dc57ca648ff8a211511384"), ("026a97ac23eb44fdd3f8c1c08884821624f02f9fbc2d0b0a032275a416d795ae", "105ab411fdb55e8b53dd3035f48b5b027e9a8044aea59bf317e35f805285daee", "1f4d8f0880d51c82c73196d350765732cb3de2806ea131762db3cf924dfb1b8a", "2ece436a0a6eb5cfe887ec539c589a37ebbcbac588ac2de9b4c0eb72f7ca89f1"), ("02f677f86d99a0e4d705b625d059a95f53eff6b2eb049676d15c33e57803c601", "0284628eff9b3bf2f34d9aa70e6a42c8a97cf8a8dc115c02a7a5874b0ac07992", "1bbd103ab776b943afc095d420b0b1052c89e92a89dc656ed86595ff819f0399", "25c00a5e743e17e863836d24f3c705d905c779660682242b132093830426a64f"), ("0de297f110d76cb54865f74fb5cc5a637edd697f70c8a79e26990ca520d46253", "220c635b063469baeab24cca5f0530c357a38727056fbbccb753a2417a5937d2", "2c2ca6cddb991587b410d3c47c6e90c27b26a5c625a9bb8916913e926c03d8ec", "02222c389458a281b6041e0acd00f692dd832d6fbbf3dbb0f861ba86cbee9f78"), ("11786abc2e24001ad01c7adc201ec271a5fffc18946b536abf0d0d2fb05173db", "0f275e7bad8e005fc8160165b13aba9c3f87c47a2bcdb960b59542fc15d09db0", "20f613a4cd57855514c9af7fdcf038468140f8952e4a2b3ed871801c670394d9", "158d2c443334231777a391e63156fd60beb149305313b1572ac1439e092f8f5a"), ("13f2f9b1e6177c16d02f882289b51caadfd451e2e6734ddbe19882ce4be688de", "0f626a050a7b8af253de93d66624ca36fa9f76fb286cc8e73b0082a05403af87", "293a64f4a134bee6327b8020131150b664e96e20df8c0080d525e3a66344ed9f", "298b339807e7f120a7a00a3220e652c86a13c7e998e481d773491030b0b10b49"), ("12fb98a0c11c60d09aaa10282fe631fc5f5791369dd5f363eff4ae0fa8056a04", "1313fa2c3cd85bfe10bf909f53efebc7ddfe81be51816595059d25097b56533d", "167105a6cdd1962dc30dcf8127af9f8337a4b829eaa4009e17b3fb5a31519c8d", "0869e89cb6ab9d91ebc97b0d3746573579e43217e2d9acf6fc7383aec72c6e91"), ("0f1f547989a3250bc0f0fbf9941e38dd65532c3644c4104c296177d87aac80ce", "0ea6a88d8e837f5489f97484efa546b82cd154fe3300d4617ef6b4dbc1d8ffcd", "118759c8fad090c55934c825ee3fac0893535cd043fdbcfc36705e3e926c2568", "178ad31305775034127bd21aab021b94ef4126b3cc2d9f9279c193fb35f097b8"), ("21a610605cb50724571a810e6ade2dfbf6d028918ea16d740f0f83f9445c4e3b", "2180f5773eb7d270d2af64cd02460b4efd3719617886def9c6a8b17f9ffd1acf", "0d84e3bfe6deaf1ce2e1ee8146dcfdbbd12944d6e0a1e8b2f60c5d11ec9826b1", "13aebb219d24555a36e04ab446d0dadb0913cf2300eb2050c5aa5df2ceb0f581"), ("149184ddabcb02c3f2cb86ce0fc5863b21e8d3a02f502cc90af4e5d81cb802a8", "2387e61070ea028269e14a8129c2caacca27244b9cac48694a4372a95708a31c", "19b4b3d1e7f39c599be22ff8c40ea80caea1109ab1bc8c032c4c9aa18aec8fc8", "17fe75406f3aca93d74cfa7cf4e2b90fb0ca344bbb20a07dc83fe5186159b10e"), ("2e4e056d588e05ca0353aa8781dcd4826d8710037edad4a8386c3ef3cc23493a", "2dd977fa84454a6b2f6daadac28386badf1f7d39dd3b7ce77f1d663ff8459515", "0cbb266bdf7ce93cd0fe75053c01bcbd765ade200f2c9c97488d43c5e5aa7166", "2155bddad93274c3cd16760af9d3a3b1203e1554186288590e0383a22b17a6aa"), ("0de1978ae4238b599e6ebe7fc5ebd705a9280814616b4cf996f1b88353d55531", "1824c957058ebde34193fd8153c7a43e0d88e178b4f509afa278eb0b328aec37", "26c5d81c64e087e6567348e305f1f29840ac54546b21fd2e4daba5d47a757379", "1ceaf904cf38d03808a29fa86e8cb9a1d6d16d3dd9505d101f15a3d07906399e"), ("2d480a7fcb8b0eef41f1546d577f00e7416f44612fac4a57a2b8bd0ef31b3d69", "16b976c7fae7fdb89b3ac5c1469ce8e3710f32b1933e6400d6a7c2492dc92d66", "1c1215a129118920981abf192bedfce6a48c19e43c5a34d53a5176a1441e1c17", "1e1768b05a964d42a9da5ff452a4a8fd285a7e4665c86afa0516ea8eab6e5b84"), ("1c1433a830b8cf406da8bc0f20d2c900bb974064a9e13ebd415f3957089a74d8", "2ff29ff5c85d2c462456940a66b0889c650cb33b8070e248db379b7dedf79e77", "08e8eb9d5f6ff978c6f61cfa7d1ac9e428a16004620b156e44082611afc0f53e", "19e39ac9f7a3ae9d4ea7e90e2354f828dd3b01e8757189cb242a243bbd53a546"), ("2667989a622eb2543376dbe22f0df69c4b4b5be0d91d3d1c6f9ad005e29d3d32", "0437e04982fb811e16f4e0eabbac143c530120180ea9d289d49cff7a39388451", "09f63beb80c73fdc92c094218c17c6201a47e60981ed97bc08681899db91c028", "2548e225174ff34ff9c4fa0779ca0016ce4459defbafad680f80af7433488986"), ("2f6d25965acc95ca1d6a35cbcdb309c70ee5afe3b9cf930286d695feb2d0565e", "036cd7b583d5dfbd2ec45472058a9f900bfb535438ba574033facc17c0b75cbc", "2a2ea4a96b5e318e85b460a5dd849b85bbc9822007733ec0c286ddbd55bb4eb9", "02dc2aa4a4f030923bffbda147538384facaaabbe34a372c067d6fa290dac9c6"), ("0c0ff06daacf82f874e71735d409147be53a789af4c2117d4a7c0da0ff8eb068", "054fa36bbaf1df5239a3d164d9b90f89f8f5f1b998312f4fb77048ff162e06ef", "19d6de90d4a133efeb42c082f0b8617f583488588b1f5e0a86180bd3a938e911", "15d6c370fce4898c593304be5841ade58a417a9a5922720d8e4a1f9679c44974"), ("09e54e5e00b8ac125cdf32a63a2fdeba07b787bb499507e1b82055f1aa99f80e", "2753c867acc23b059a962c5ebe97740422e606bd9c6681ae03a424f6f4a9f641", "0974f8fa9772bc7398e0e5729fc1f6435ddaaaebfba97a47f0f3d0726c14e1ef", "046d6c4b4b7ada6464ebe6629ba5fd194320a1c3584b431b086f1da8ac7ca0bc"), ("2d1e5b11e7988141de6eba7cff40cf7bd5e0c63740f5ee00ca98481460439af9", "06cc4afba814517ee81a270a8052716ffff913755321963286811ff13759f611", "1884e15f1c4aeca2c4eea6fa9266c6e30025b2fed63cbac3da528ac2c281467a", "1fc62f272c56567cfa91f66d77221b32ca461fe12bd8aabd4393a3e4be08b86a"), ("0a240965ff576bc7c19fcc484bd98bab8fb815c3c8472b7dcb1c0af51d2a3710", "0d9579691c7f6dc8bf1676f950f735a8db62e76e3c403454a2734ee13abdcbf6", "01a1a52145e4e920a899d3a2b05995e09a6bb7410a24e2e05fd2eaffd7b032ab", "1d832e64209e66a7f1c04445eaf0b05987776dab57f212b814fb3c36d2cd5390"), ("082bfcbe94cd31256378ea8dcc6028b382a858cd71e41f2ff840e9cf729111da", "2ac7db223cd6a53a0f01d15fe8d6fd876f90dfe256ea6f96a8fc10c5260fc415", "0ce6b1b56bdd5f4266b07dac650dc54a0e7d28fd11181e8a71fa84c188ac9d9a", "16012252f65611260eac9338ab1ec17730696b2c313700416298b0f3c27123e1"), ("253e7437ed2f80bf5e8cd11bcbeecb36fce7eafd0ef07ace264d29ac385e9264", "253f39cf67f7ecc3144f2784c5fc194b4da580732ad50d950241693352db922d", "1826bb3609a5a58c63ff7de80865f652e348dd1831f87374fa357f9eb4418a24", "0cf0761b265fb2d2eedf1374f6647edcb90155624b971e1f7ba28c6663134c9a"), ("09a610d79e7b61c2e61381df0f47bbd0ac8ba0b0b82646e7aa1eed671eae5685", "08e4a1e8d4b54591f015d8dc20543a12307e68fcd62c1e3324e51cabf70326eb", "0c742b7cdd7cbb7d637661b32475aa58ada71696fe2be5f35bb5f9915a88b170", "2cb1882783d1fca0678825af03c3fcd8b07cad6c0ecabb4bfa8d431d516c01f1"), ("15acec96eff15c10ec74393bead4c1ab2ed1feb18c3e14e6c1d03073e6e30692", "03f87aa773455206c386423128ab84a3be43267557a08ce61a6a05ba5035789b", "254e6c10688ff57f5d264b708bb2a31f1be4ee494c09d36fc1020d6a783047ec", "19ff9013243dcd50fe141550f7612fc19331b627cff0a8f693ea8b64648ed082"), ("153ddcec245180834c373903b8c52f939a45ac2578ca5ef1b25e04165dbd80a6", "2175ac9fcdc166f588a9f6f3e5dda6dfb47cacab74a9c499342613c35a297ee2", "108d419b9116ad6782e38c3cae64850ce361a63df7e6d073de55c650cc5a06ca", "29d2fb90a1d0d48adec7cdbd058fc1c00c9ae34dc80d5094e2f186c9fecf26c4"), ("1e121d4abcf520fbba8d4c7e703c9973f6a8b4645467a7c57a733f4f0b70da61", "2943510e02de05ad584821ac15d6623f80878a21e2fd56a7a9c1d1dec3455725", "18bca8a0347b23e75651bbb8b4712966a673764b76713e4e15508745af853d44", "1d22ac8f0a36ebdcab89aae60c1432f60bd18095c4ff8bb81403ff575ac0bb8a"), ("2cc6680b53d6d8616241d5e3181a38077dbea378d605458b8d86837b2a69ad67", "0a6736456bc1cac9589b896fa20d8316aa20f21234a8c74c6862d30b144aae24", "2ad966f9dc6d1eddcd5dc8a71b13fdd5b7b52441895c4f33122f171c4690ed6f", "16d2644c335b39f12a8cfbde72bc1ef71af0a72f6d2e72eb93e779712b964490"), ("15c268d7f38b5ea8d82de680b8bb96a468cd785943224e60a280944404bdd998", "16b0fced8e7a4c04cf8e519897d450ce8abeef25925668e7206b0ed3ba076c67", "28ef68c91bc1d4ec20e92ddb8b996b1775489f572b674dedb5af1a26225e543c", "160cde695781164dbafef578f4fc800002718adb58ddf47f61fc56f5e65b017c"), ("0c7b8142a83d49487e31fa6395f336509c2e05baa2d2e5a6ab74afaca4fee9b1", "2340f6a6d5234ea6368d4a012221a4ef3f5fbd945daf7c7929a1a5a002f55eca", "16af06e4aecafb70c18b636ee88ebdb25b8564d3c9fdd0316c3b13c434c1450e", "08b676ab0963d3bec07e0cfb1e953178996c0807ef947985199dfbe4c9e48092"), ("2d9d0175947a6d4b5611faccb1baef16aab62fbd5ed146a00c89577ef62ab894", "0e77d4242b52b0355c74265d23c0b0bc40d2d943f78eabfe44c1cce5b20027d4", "04915625d320069a3886f3418d3df92349b36321e799c6619173e0073c98ec2f", "229fc068e760b745851b97ce84b938b66377b6630fa755f8a95fb38e21c19785"), ("1f479f83c0c4b1c5adddaea9b2885d2db78d5087dec97cb963cab471dfb0b3f4", "00726269ffe91557051a1f00bdc88da247530ddd6267f6cf83679377a78a7adc", "152186f44d6a102e14d5f181368bb611b0cf073c63d76144458855be40df7f3c", "2ddadb58290e89763fa50e5e25e74d5e94e170d0af91697604849f8ff4238b84"), ("05c898dfa03d28fe2d28e2703c8e4907d8c9d80524215fe30b31cf3745273433", "13eeb01673afafe186344bd1f72f5d22c31ce477b1bd141623ad22f65782a41e", "15af2cd5a4b30df18c32e918b496d13dccbb6570ea144397ccc39008e1cf8a0a", "020a862c50eafed34613f6fbf0625349bccdf5dc2e054514a42eeee990d7d3cf"), ("24a9f0a12076ff5ddf16031ecf37e966dbd4130e452d565d87843d93e016fa2b", "02cc3fd4d826412f24153c71ba0905c483bc14ea6fd5d0d888cee0bd5f386526", "2e8162ef5e8b6203c36dfc6f85c18f71df52ac4c91711e7f0f0a59c55e69c993", "21f2aa0d122e54f5fe4085e313923f6e025f250b28b41b2606be7e85add0706b"), ("079ef027ddb1cc6897ce2c1695eb6cc3be694e2a0c86beb16422f94e8c09e854", "24b10cea2bda97377784d114194c5c2951decce9b9440154d60c01cb76243bfe", "0518e3af534d99db3d1786d84d7e1af06904328044c357087365e3705a6f5407", "11a75d196049c62f8eba3ac09f9a995a8b67edeb577940ad4094ac931f02b4b9"), ("1cfa97f51af0be7c8689f755625dd66d4e0c742e82614517faeda6e2471bac56", "139ee0b309557bfb0f27232a52a22561cece60cf1c67eceb4b325f5c6c97fe0e", "039228f7e13ebd2020897092d6c26fa39669552bbac78ef7fe492483abb535cb", "096d1a96c95a60955ae38d3f68f782b0e876aafe7407814b1eb2c6942c825cdd"), ("0905ee480260c8a3ef262827150896eb67fdb8328eeca375a285112c69c832ff", "0062b6a905090eb586c1a9f2ca8963af1e9b0b2c867151fe7dd0710fd0c3a67e", "153cdb52b1e8e17fd27d8e1e71d417fae05534fecdbfa2e79b77d600ed69389e", "087d349a7e4e5ada24bdaafe24d037ed14ed2ea2dbabcfee13e167d63b801905"), ("26dd3aa0b5197d5f1ddbef254c61982d8de218b91463064895c65887658b2243", "1f3c57706973a4d01a2395baa150589c0e519f08442fbacf5202126fab32b2b2", "2d737f28d969bb58821035e89657f56a7da83b662a69be553ef938ac4a1a7cc1", "249de7bea6eaceff58d6231400118bbe763604617a2a84cd91faa454a7253a43"), ("01d5c4f003bf6ec5f79d269cb4d3936d072076185b4a76321512dfef57b25414", "2d35918008d59e5dab518ed4a8ba38b2f7d2910cb838095481a2edb46ec00e8e", "16b9bebef45eb7873e5e9f1aa23041f65989b037be155efad6662e03f9198c62", "2e3d230a3080727ec05646f5d1b67bc8fb9134439c481ba30cd03f5383671862"), ("1fb116c75279ea9a429a090556a878d71d36da1542558bcef34147d18645cd04", "1366c918a524d048346e29b5eb5733c2be32415d1ad4e5a7b24523ee685d3b90", "26370df9d07a6a127061aceb57e8c33d88bcc434500b5e0f4f94ab64e600fb6f", "15e8d8e0b0cd15cbdfab203b35b429f07d38a2ddc1a6db62404b3ed330db18b3"), ("1822559c70329a2ff92a2096791c2d4c8de8752548cdde11f1b350c11862bdb3", "1cd989628f9a9de9877dbacaefe3adaf7e355c9a508de6bc076470d8f6c810c7", "263d30489b675d88645aa14517e5019d220c5600f232fa548754b56271b2dd42", "0d70900613038ec2a5d9b004c3747cb7558b8e57804e185dd592d9cd389c246a"), ("0babea8b9ee3392f3b345ffb24c101d3c00ac4fcd58025910c67afb953214452", "01c6d4dc695597657a02454f40edfe3cd44ff893e3fe29d502dc36493d1fbbd4", "1d30b3340408351095011c1cda2ab31472f30b7b68290b800b4da2a7ac963811", "15583d4c00f00d14a1b7caac586e63e36298c2ca10e1b14dff5d3a3ddb376939"), ("09d89ec55cc3726952f15a0af6c0a5e7f9a646ae33791b59dfd44f15ad17f974", "1aa65e041d3b27f999e0ed0dd02f5f23c991a30019bbfc8304e7b2834b95d16c", "2609647727bd91d2972b4ac7c31d9c17862ef1971eaff18b8dfeaf12ebc78e1c", "2e884e54522a26780a998d36b6bee4b0dc635b72fb9fa6263f1ff2f7368c81c3"), ("0b6c460a393b39a221366a4803e3ecff7be3f2d20a795e7574dd37f7657e6e24", "06d137b372150a92f56521cd9c240036e9f25a1ff8ea93cb07ebfa6e0416b88d", "1dac613bb65fdd61cdb296dfc9511543408af368ff5dd850b44e70cb934fe759", "21896d01c4e9de80ffd307706ac9ee17b6485be355534c2862e272860522189a"), ("0f41b9fd5b7a5eb104906cef6d380c90ad49ceb2dc9f535acf8c7784c9d6dd02", "04a383072c1bd13445e4e66d12b71876bdd1b30570219781a268984564acc6ca", "0a386897defcf71df0ec6e3ca56ce81ec16303ab6a9889fcbbb6b1ed82d2bbb8", "06189b056803d4f6f8769370db7d29b003361e090a1437512bfd21b5d71c07c4"), ("02b1073719bf642d0c754a83e5535525ef348b53e65bef1b3c26329a0e7230c8", "274d6eabd712a9f76f726699f89bc866b0030e2ac6bedabc54f8bd8bd3ddc0ed", "0b31ac1ee46836fa7db45c791dcf62edcb8c0a96e130470eb741a67285a88eb2", "12283086136485478e268b41b422d3620e354ca27cb5b7d14e71172d2fe884f2"), ("02ac3aa7a8e1694a0fe3e5ff2c445eaa56e20d2037dc0dff6270b345215fc2d9", "0898a59d018713821c4cfcabd7e84809b4c40ce218640885461372851f8aeaa5", "00d99d954a39fd780572e3818dceb757b4294a945b8e7a8b83e73c3e0f49435a", "1b6c61e3a486243fdd1ce3297343bffc984742280a4be017c937e9f87b18759f"), ("2e4fd1a96d1d72fc1df967bf2b121eb31b8b120b3e2573a8420f7fc27cd04cff", "1a16ba3f46f6b35c402e5d2433eeb0383ce3b66ee8b917b753beaa4536e5fcc1", "2d988db4cc3cd1c8682922dc471a3d6f8c530ed2c94c90b93426b67f881b320a", "212531c59529d1d8511404507a13a122106598f07caeada641d29de4ad6f2f48"), ("116388f7dfe561412ef8f58c6a308b8b4780bbd414bc18b681898fc33c9b8247", "0b5f857077c213b007620463f56bc66c2f19e1bedede00bd60fc587af48cc71f", "16b7ef8a40e66fcbd3fb667ad860d26b08b248ca2c75ef3733fc28d03c3311e5", "0f4c8e3b05432c25c64e685150676cca66692e1a3668d40a9bfb313dec48a746"), ("01ded191994f2d433e3715928872a01e0e40d6b9c2c28088c48e189ea32f1967", "12ca69a08646b7878044f658460c88cb83ac63617cb7ec7d07c6db973d5e7aef", "2f1e9d46333dc774745b14cced6f0cfbcdd1a815bc71ddee90402d6239c2cbe4", "067aed0350405957a17063aa3d3b110aa6f434ae010075a3f9e43899998ae7db"), ("25a4504b9b53d78a8d0747dafa23fec7824b40b4e23abbbc46e78ca86539f625", "131a7c602b094dc3f21bf7fb4a8fa9e79ed7e14bffa6cefd779df85e8631a32a", "18f9ddaa7a48243df7ae97df8968a37c09971a455680353dbc63f9409fd17586", "094c049b7d5744c88e530e91e479214c51979f7f08a85705465a455238db1b11"), ("1a1f32c50259b3864385d4b73aeafc38b00c34a08e76a95788e665de45eb79e0", "008b50adb3535b2d3380f189f46d194294427feb8c6256a06cf81e5be2a64ed6", "2546b5cf83092188a3c75afc379e3894187d27a9f9c23bff7bb9dd207bf8b4b0", "1f1b8ddbf776e93274c78c679a8d1ab2c48e5f559c9d5e9db9d0680e5f6e6d8c"), ("0385afd37ef64f95de4680240590f0ebe93456d4069ea9fcd0bab2b79e780258", "155af3ef25e1665a3db233d40de646431bea14301c5c1038cfe42c3231148566", "25c8f9a5ae8cb39eed7b5fc3cd6c0b86b85943430a61dbbb9e2d70e2e3a43532", "0b8b552e63d9002eb5e496828cf18cfaca3e8fc936119f5405892e631472a51c"), ("266aaae181d8f27600ab26485fe4d68977f74b43363e7cc7c1608ae63a6752b5", "08af8058ce257b954324a36d8bbddd88cdf71595fdc6a0e43a419c9be1163cc3", "01f13a6e950a9e016b385d43dcd369a3c36211efbdb60feb3f4b25235ca8fb3b", "14f0801eca99339e5e77f03ca7a50aeefa9f4ee958c77949ad0e0ff6cc1f2e89"), ("24dbb4d8a00c01df130472c146abc3a9224e55a219c736276d91bfef970fbbab", "16cc0b1969ec27c12b7ced09c8e034fdf70d9e936dd0846302a4bd4e4f9c41da", "1ee992f3e041195e252d07b5383df6bdf0ef936044ab14ab57db1913e0b6bc7a", "116cbf7f5a80d8f660824df0abf734d692d2d372bb254e4202e4a6198f330cc1"), ("09721d7a748437b8ad30cbc370de68e3fd602924534fd1032301bb270871a349", "0578df4a6817e14b6cc34febc97bc12ffb5b8198452d56bd60138be57d6717d1", "1acc30af2dec5cc0a682545c3767de794f40e26166a4cb8e070c0a1f6d10b094", "0be13ca0b415d551b84531d757eb27d76a13c2d066f2f9da9f48564bd70a9de0"), ("2471341d79c03e2a9fe46afc903adc0614a79469eb2d95176eeb3b2bd507b84a", "21c630f7bbf0c7b49bb4ef157f9842228cb6822eb79d04cf64ec7434b52f1cf8", "11e5e285ba67be019c56c13bb09b48a9d33271d1a84f1b4175d9e052bd2591f4", "18f4fb12943656f5f1ced0ad004d9acc55b917cec4540ac639c38b43f32ac862"), ("1f60b776083854a4e5052ebf4d812e4c76bfef58c10453477ea44af45daf2d62", "0df70a3b375df7ebdd31e72306c30e086de3549444fb4d872427980357690369", "2ca0da8fae1df8049522367ed496fd6bfa6c11b9fcf0f7ba2a970e8bb095d438", "0266128944b6f4ef738854e1c2380c79f8239651c491eed37fb71f655949693d"), ("286fa1f39ffba9d8918f0716c3c3e0f296ccce6d388a0a813909a85bec3f9b23", "0ad0c5d84215aafc4491bf34b8a9f190a8e9b00a8c4088330f1e0c15112ce5f2", "2257928feaab13e86d93d5c0b8c4fb4cf8971aba7e28f92aef141734d510b486", "00c197bbade90d960db456e1beaa9dd80d712cd7924e6e1a70a7ec9b62e25b0e"), ("0545c8c4d44313acd9b86db84ba1596c0d662ff3c562cd7365e04a42ab152113", "0c626f0e5242593188f107ec43dd10c3d887de406eaa23d572f3d966b8cad721", "1e6977a6315e4edc65fd3490d5c54979396e4660f45e3977e6bbb2790369155a", "1d5aefa3ecae9e22de6474f43cc13da0df77ce7f4821a5aa63afcd73bfa17fe8"), ("17275bf56e2ae6ca71b53a1d3ac1554ccead6fef0affa5fdd8f01d971c486170", "2ad025f40bb26364bc89c128c8b68c05f36568af08a9b3d2f0e0a7ec6d68082d", "0f3049ef0dd77f2f93a375a1030e1c94d4f94e81acd14f7c36c4a922b657abf0", "1fee5df70a27abe4611e19ee5360f2eac3fddf2203476c1eb4e27bcefd98971b"), ("196410fcb3431b6aefac1b5a46fe8a7726a4856e2104f33d3341ae6d72451c18", "28b65a97e0a19ba2f4697e4d7200ab228729073fcc7d9f302fe4c595377293f9", "24666b014e4cef13d2b2524fc617b25d9861c79b3a278462219a339aa7f4bf22", "2e831d94252991fb3dfc3cb802e7c7c21f0ca6eed22364de8a843c176674f8bf"), ("12786439dc8bb94eaca6a4c15440359f08353f494d63eaa0aa682f4f14416b52", "0c1d83be111feaf45374af1e0dc694115ffd41e54261ad00862509121804cf74", "1b02e5c23e3190921a87c3b0e8f152d5acfb3b5baa8d0ad88e540b2b88feac13", "0e68534fcee0ae0c7fe158cae3982e47772c9b45f7ced4692b3d009fb1082cc4"), ("2a95a1d98fb98de24df198b0e0285b32507f95eb61530965e06e5f4a6efa3d25", "1480570cc548762260d826846bed8c202eab259aa37c2c946c796f4fa255699e", "0a1ca4a3c33e0c3159613d3b019e6afcf5084a23a9a27919b3824001fef0384d", "088b12a0b20bc991e42ec0554087070854996602913bc068bcd1c123d84e877f"), ("1c26aa91e64521ffd2a00c56407f63273f0ca4ded4cda72abaaf76b55505e3a2", "06baf4485cda8e3e89e2b027b1f47175d49d4ce07eae6039bb8593976fbdae8d", "23a369d78c84e51bd773621d56b00629786a7dabf646515dc964ea892b0e128b", "2d6e4b6022fd4e33b1cff75706331b9bad5769636ed6077e8aa5e853de33446d"), ("16f5ab694c0d09c544b98326cbdb417c05bfd498c9af131c10527c94a2b8d5ed", "2de46aa9b4b767b7b8f00fa4e2eeaac8935ea0573a569eebd14bc14c32ab55bf", "168f75713baf48a2266b6c6ba94158dee7d5fcc5ecd07774a87a37c49213e47e", "122c069d28bf16e242bf29c9c86cce3db895114f3953ef873baf0888234c4ded"), ("227a5363b825a56bcc114fa09b0b564497d3ab9aaf4f31ad00595c5ec0fbd960", "29dbed2b688ff49ab9dd7e676211995a1cf564e3b646c8af7052b52f262ee467", "22ab72a879c00ee7b0850bf208222cf20d244ec3ded73c172fcdb4b94ecd3103", "2e7e18b8545455731d9af0553ef4dc96bc7a87b4ea98e0b50f9332ef0adda94b"), ("2c4d87af253f773c0bb9e9c8daac1084acdc3ddad19bbbfc4f86bbfe50a9aeb2", "2e777f43eecc1824262c0b626a8de795a3604b15883cd5e0175e6c0461e24200", "09cc56e21e519e0596d1b6ff8fbe1b218e340b1c03713d0b12b957e7e4af6703", "2ac022bca6a2b9a0e2538dc21119fc157711de072392642754c6774b310e0cb0"), ("000bf32bc99a7fef794d8b5b62e20dc601fb64a118b65ae143099677f5cdf428", "1265609963ecb58e9b2fe990cecb3e8790179582d8d8bd41dc9411511481511a", "19aecf067afe4779eb6a2e0a69fb2629761ca20b74bb5b0a478e0252a13f4681", "23fbc01ad7e06e8e2325f1308caa090ca36cf7b1a931ee31ee5413b323db3a1b"), ("1396b1a86bd85b0e92444039705626a5934b86888ca6cfc268e797051a3b9489", "223bcd6df6b1aa10c9cef005519abc0c91474ae5c6b330b1aca51eded921901d", "20f15188a00f06307d78b67c0390f2a9c131abbf62255654869117933071cdfb", "12685fc970151509eaf508101510bb557481584426455c578acc0f9c9e16fb8a"), ("217957a217ea103776a5238a97bfb8e20520fe2ef56ce02002c0071af56a0f05", "1757df2b80fd11a5f1a8352acfd57a0652f0c25cbebf307140d5fe97b0655f78", "276f7e63382743f8b1ee38e7aadebac61786f2c3bccba2aaee125522fe60aa88", "302bc3d2d37a4903ea0842a33afd0a4032edb9636d1cfcdde5a166464ea6e550"), ("300fae507c7959ac222f2ec781e5f606b826eca27d3dba7057fb0e656f72d88a", "127b63850a7fb56fd55a82f12882db2ef24a6ec821aef2506f4d1e57f1c49bbc", "006988ac2822d61ee6ae83e6a34fb07321b64a16dfc4c65244aef199a80538e3", "264fe71d4e1a8f79f93da5a1ed127b12aadad15a7a32a7b39ed7cf16b2aec22f"), ("12925f590732a2390e58f870d276c6d6f14afd8505a58ada69eb221b5fba5347", "2536d4676cc09fa34bb3e6444090f8c6a3ab5ea3a9d525edb0338de3c87ff2ad", "2ecc5ebe35c78fd15a43aaa7aefbcc57b129353e42dacbbebed38932ea1a96ee", "28a20f2eeee9babe320ccf96ddc018caa4ab561cf308c7a2b5afdf93aebcf940"), ("0cfc4d180840a717e4a5db5bb105ffa1a63de4afa7a10ade69ca05ed8d54b886", "1a1d919bead6f17064e99b3b791f4b16135b2a8ca20e2e460612863f5b6d3fe0", "11f4e3779043224e1cdbd3364b744a88830f275b0a4d86c7efff7ba8a1dc8556", "22671f3d4413b162db16c1b4f294cbcc327c804673da94fcda1e0173faab4062"), ("049d81ae632bfe1fde3646878ad9ac41b04f4d58d76643804fa35d94110317a3", "08f3d91c315b08b40731b1119d1596644023f36f4b75c71e6acd57c8613132ed", "14bf3bfd08e6327b22131fe1963c8802556c87fdeb42704070686bc636c32a95", "1a716d43d633b4900bd67b2bd392da993a78dcd0f87d1cd649471d8911c23365"), ("266a27b20e2a601bb0846b215108f3c96f75bb800f94a8d3dc3a508babfb2465", "1c516dc055717a39ab5d6135e2bf331928be55fc1553c8a498fc6fb4a38539a8", "0e434e91938073bdaa46e4f5f551db9f0c9d94675550418436089f7ca004ec5b", "13a764cdae597ce804fb88997182cc92c4f3ee604836ade724cc9d6d3fe5638a"), ("15c2a5dda70e0f21998794ba83eea828ce4d073ff9f84011cada71103cf480da", "1b08d6e0bd4cf5567b6d72272cfc4e34cbb38e509fc44a109b1f724dd40b8306", "00162c1ae07be78aa5cd538edb13c33235daacce795e72aa9b767ccdb4389335", "2ab988e2cfbefeca46f2159f49da8f531fcb0daeb27c36aaf12258eb8ea16a89"), ("0f71959038a3ecb9dbfb7b8848085b9a60f49d2355d17b13fc341936a32c1332", "10c136e8598e6502041b7e0a6df3bc3d8a2c9e1e6d97bfca53ffb9b9cbbb1dfa", "1ab3ccab9f1114530319f959a8119dd9b9374527a434c9048e2ac158217f37ff", "153bb33fefecb6a25e564a5f63b9fea3fead60aae4921b80703d13ce201df483"), ("1c158acb8302859200b790c6d1d3fdd628fcbc1b13968546d4a903ccab95b9d4", "21ff652bde9d0cc2c0eb9c304b936a4e3aa8de8c3be770f617e8624f97268eb8", "0b2db30fd7bc62e80757e7f510f5b6f04cfefbd2ae9fd6629bf87997b7bee3e3", "26e540603b616fe00c032b2b7521e27b6d3f18aafc2c02680c6c87eb05488dc3"), ("04ec9a5329ea6e433c99dfbab78cd316a181dde1836ec7f522d4c0937f2c5ae6", "1f03b3f409883418cec57b914d046f9baf5a6a2a3320904695a8a8361fd8f6d6", "200c8b530337978bb6f6a35800bf4c52b9295bcd6b15030975d07d8b4626ca82", "1825f366c4eacf1ce9f0f5ac79ea244013783c19af988ea6e28cabf511c3b543"), ("25360826dbc02a3d114e335ad5cbb9cec741b753eac297a711c3e331dec639d7", "26ad883e9f7e230fa8c42491601b1a8dd3062ee17cc293bd25cb729d29b099b9", "065b2c526582d493c14ad58c7ff93d97ca4fcfff82168d3d91d1f5f42245f097", "124df33e3e9c007ae780da4433c1a332c239f1ffc5f1fcf77b899a624b79d4c1"), ("1c3c4395c02fadf016d86430088704adf95afcb525aacea6dad5d33562151963", "2da839144017bf5a91be0375c87dd393e28525cea251a3358487895df938a90b", "1491af688968c74e8337e8f88f79c5e8bccb1da2ddd63896c0f62ff0a04de43f", "2aeaf7068c1539683022965eada1cc0dd8bce1f0345b2028b2ff72f64b485274"), ("20204b56887b5cdc5fce69454fcb37ae7fbe2e03f1c746c90ac9cd8896e5969d", "1b89b505b3f3a52cb79640c38b87bb333c8e8759aa256e64ed8fc14209ebce4a", "1cd77e2536a4adfe3c2f239ebeab4ed010db60e46693d547e86b117a7359fe51", "28e0fecde11d64912441e5a7ed476d3d79e117ae9049fa3f35dc40a4b37164fc"), ("27b61bc47ee8c1ce006441119527478c85de04c0697f0d2e2e155669b2e61a42", "07317a38590c614e78d7ad9556a4abf51f5d4f9e03990771a3620ed88b15594c", "1b148df914fa2cfd73030b1c980bceefe7d689071dcc9287162f9ce8bda6c972", "08eb8084108b651aa042a21b7a6474e06667d4392ff409cb88d1a97fdf37b8c8"), ("1d5cb678b3c52eaeaee8360835a689fed7ac0ca5ff5be5e5f3c2e935694b2046", "1e22581487936ddd56041aada686f72e9016df540dec4d37a540affafceda151", "14d7755e8c41c5ec49852c135f11eeff23bd05ca0f2fa4d8569d076106516114", "031a1645ed4bb881143b3e9587893a19098eb0f8f02e6894c127feb47738c279"), ("01b387cac1890fe29ea5388bb337d2c03232947d7a171edf4df1a8bd8df4862b", "2d60e025c1020cd8d2e60e61fb0d07727972bdb8780185e1e84b5512a40e3968", "1cd1a2e67f11281f7c73e96759033aa07936b39fb26b61f21d6f3c33cfb2ea96", "2ba348af79aea74691d757a563b3e5a43dad3cb6dfa2186d99ab4e4c8809c8c9"), ("1db52300723c4f0e1c463211ee006f5343209530ffdcc4a12ad1d7610dded4f4", "282ac43b6c533605648e48a18368a7596c541ed72fcecf0c81840a882e594b77", "085d7de5a408490cb5b84eea0d5d0c00f95b5c37c1c485550b890f07a8cfdb4a", "0c8aa1ac940be8f349e0f2317ace8790ac9f01dd3457ce8e34a3cd4184330051"), ("014b45f51c84e0577751c26f64f9337fb4b8a1aef52aeb441f191703eeb0bc45", "02af98da7c756a083a12fdc570b28ae2a3c82277488e4e3bc83ff374bf7f2c9d", "294635b2e453fa23685e3198204417b5937c9727685280c5847741df4b95acf7", "26c8b8a913f176ba48f0013cfc79663cb05354ee0eaa7cfec8f44ddf6ec6eb1b"), ("28233f80203187bcbe6c61c6b8dc332f343860f5f470e24603d80792302cb280", "27ca69155a4af1cc770ca15290d6c1ad9798918884541e2d9b2ce5b99de77bbd", "2f7979a2d38e5d8aea71df478ede35643f073d9d529c1edeb694db6ecd7a1df7", "244a79bbab5046c24977ba3c9a6ad81e5c5b1dbe091adffc9807ec12dcbf183e"), ("1cb8133e7cc26818070cb01f5cac3f53c9833bc95835639e5f6d0802cf01912f", "0e8fe63ce08c79d68b1c323cc43e54a8058037219cafb6ac45934b4e3258916e", "1d64b80f1438b43420bc53b03b742ffdcd8eeb26534906670893c88281b4ee0a", "16f38314857db4db72dd7aaae999fc50ac3b749a07de7f32716a917c7b882d2b"), ("2cec578a9902c77d96ad6c4448da1e8abf1b983c5f535755df24ccf93453d3fb", "05bb352785962a6c59492201a253c70781115c97a600468d12c34b0dc9e5b684", "2434cd58838647b54b65c27b21c3ee4f56f647e153d02dc4abb93a20283def6d", "1c2d2dfbc89aa36c8092a6bd87fafcca5edb9096ca417f2eaf1843822a9ca973"), ("11347135b9e0b00ff2d82e11df87442e7e4bf5fa8484c90f551486b0e0dcde19", "203b116d1c8a82a42b92ff253994b0865123ef616ec10daef9e405c7dfa4a573", "1790e04fc494150eff088cedce65068d7da952027baa0e6f6a4aa77d33a03022", "2f6ae4157c38e6e2f06a70d112a05f5aeacf98e3d54a7ced618eb364c6c3aea5"), ("0070b5158c1740817dd2591c0cd8ccb9994c5257842fc073dad220719cab1beb", "207cf71c99dfa97e3b742be6fe455ce64ab7439e6e23c8fdae5ecca4bbb53e60", "23c72865b1d9a9e845a41a68a3f6b39dd5e65534926e2238c2fc9a15988d23df", "156124b4a4ea45ed7beae35819a4af14ee6a927d331782e26c9444a252678143"), ("23fe918979009bad5d2e90870d7d23d7953bb934460dc80642df88770c1beb79", "1cf762437553880b648d1b330151084730de2aef73205aef46574d47dd5a966f", "1e2781350e4dbd29041ac1db7e87731a0a543a7c6129598b739eb561e0246b97", "04b84b892ee4adc67b55dd6c9f3be57c06b10f5b9fda0f3b44ed48dbc6907707"), ("24feb937d1a1e39617babe174587c1ff619f3da5826fe53a5395b137b54c6201", "0e0778d2d8b76c7af69daf804cb4c11ad097fb364e62f5a49beac97b8c042c80", "10ab77e5d68591b27df86081a474542f8656a9df4cce6be8eb8b801943806de2", "094ae30642382fa570bf25afc8b5ed3565016f55a673a21b389718ac3f553b8d"), ("04d09ddd494379d7fde14eeb8f2ac4d5aec680f10d9f24bb2a22398796594243", "1239f3c819824131180c0eedfa82c8b5994df61136d47ab5cb20bcf8a223afaa", "0ba729877a7efd455a36b0801fa593be8e1006a4b73a9cc1caf8af8001b170f6", "09979e5a59a7eaccb4fee2cef9c130bd29821d77c37a6662e407e38a3bff3d76"), ("255261805d87faea6a6984a5289e139962548325d05c30322f39cdabecb6125d", "2ce067022270418a984a0659dc9059a61747fcce6a2a383cb324abf43661b85e", "22f57216b18a602f0a7ce1d3801a5b2abfbad78550aea4424b8b5d4995d01af9", "0d722a3f3947563a7f3a150cda785701000ea8ee68fb3f6773e554491ae72e93"), ("040fa50bc5f370a878b14f31617a41e9c3bd6bb7a4736e928bcaf0e1013d9ef5", "020648549daf2aa3396f20e93b7b4cc95e6076b2900eb5568955b1fc3b2f5e71", "2cdc5abc0e4e85567b8bc6f6dfc326bb75f74e4f7252960cf4b9610f09e079f2", "0a0733362dc3dad64f4a88fb33d261dc4c4f6c459e3df33ff71e283062a32796"), ("0fea4382b1017cf3b3c853ce7d28718300b081b636a479bea6e4ed2a67b14686", "16e53e3421c17c861ec6de75c024b21cfb2e7099d98c87b958680adbb0fa68a1", "03c9327d305f6452a9bcac8bf9d4cb9d6fc392a5dd48b7083d60dcb917d9ced0", "2c9ff0fb64f360c255366382ae827a1836f354987acdcd668aca72efae23f1ac"), ("26a4d7a6613cc66279e9ad967055398ecedcf8f6132282630731b853024b6d84", "23d046041d1391a14a066735272256e1b9c940b34e726bd6b6c5fd30cd9d05e2", "1dbc378194852eef9c5c0e50f6abeeef3b6c79f45435d5524feb99f0113c9932", "0492c37f33157f464ad8e6a77d7b4e80716a0870b5991f697dc0822458e765ce"), ("2376f91f4068a876699d595a2433ec90b3a00f215faf53ee1ac8102bf5d7c0ff", "1f119b039ffdc0f46ac18d7d4cd2631fdb6d556d8ec177a2b9b2fc924241acfb", "1ca12c01cdb2284ce4e0b3b1ffbcd6be98acbb4e8bf5536437a7b7d0371d4a5a", "26fb78f4959dbf149c347e5d629c73c10c9f2143782a64a62342d28de0bdbd81"), ("1e26271622f320965111249f32b4f65c785a0894106b690370104e9f9576b186", "0f029fc7a8a1362b0bff52142a6f7c58dc268721e1c4fbce50e60ec8b2972b16", "2920c02dfa35c6cdd4677a200a1643b37ccfea880b5a5ab70bb0f239171489f6", "1a71ae1d4c6cd4e054f1be99d2d335357f2622bf0fec440b2e77ef809cf1575b"), ("2961a29986240a7e10140867c85d1b0a8c3899530bb44b3213aecd740825a025", "2a541348814ef445ff52f8738ca209e46bf3eff902a8d1bd5d03def6333740bc", "2e36db30c01e7b41eb2eddc203a1dd8f9fc01e235a0f769c252160474b69ffe0", "0ff1c1253df0db3b6eb8a4c19707d44ef7978215421c82d456a077f693473b23"), ("08eb74a72147d7134e1a1991ea758e0af2cbe772460ef1cf1e410e7bcdf80011", "2e3b20ae4a45b2fe6f0547b3ce106a29828ec4ae4a9b971c2be1a9fdb94d4218", "2f62c5aad3304fc681142a3d0034309a22455af198e657e54a3dc406bb2fa57d", "1b1fcd4e88d6b30b1b6b7b325e4cfcbd54b019343c1ebd3c37557c78d33ff161"), ("0a6aa26a7b7a191206c7d1874326ec03dd39ee3fda8f36b5e1197513bdd0ff0a", "14c196ba29047e3b99649ff89a9cd7dedcf7e44a8d95be42521ab1c27dd8e1fa", "2f06b06777d8cc2343cf2d96c76339acc1517591a6666159c33346e813072a7d", "29649af5e6b35883e2ff6724439743edd1182a845e6feb37d7b0e279d5e2cc5d"), ("0988ef04a090bcdd27dc09e64646709467c9b9029436a767fea31a1f265a8f4a", "14538cc5dcdacfa28d449ded0ed1c30d6a128d5fb4e573d72188f0ced2e22c85", "09280ec9d6fc6062e583b6975bd59b9ab45bc930bae4a10e9f7583ce358fe288", "1d38d6acfdcb3466cc26c978f70037cf50024ad96050866cfd92ce125e2319df"), ("2e396fe61fcc92419b37a61b52abc98022b92cace83523bf786f88a886298f5e", "04a0efd9232ba946f78bb4dab29b93fd0ffea13bbcbcf912590c45272bc39d1d", "07f7c15a13ba1470a2a2a79b7c8b8b80aed3696965f9013c66e0c12b4de97b8e", "14bb36771cbffb5a4f58978eb5e3a3ff2524e48b165726294c071c82e28a6e77"), ("0dd42d9b8255ce8e55e9088ca6a6237717b773cdf42b92feae143cffb5548135", "0b8c6fba9f8110ca29f9415a575f97b590c129f034c3ebc966cb28dfdf731986", "2b464bf450311e51df58fc2c8f6146bef5816a18fd6d347efa7b181c29d412d7", "0f495203ed5beeb4abc20ad748cd6a575c8c0362dcf671fc1ceec9e2672ceec0"), ("30027deb4bb205fa83850fdb97df4223fd1862e3a6aa1887d1036a285501a6f0", "14ecd78e76c43229f44a684bf81ecd1490e410419dad0db194659c1ee935d03c", "0b0ee47c884a565648c41f623fc3b9488a3c6a3308a8c8e47e35b77ebe34fb75", "2dd58c4122390b893df8e3eb84d1a17f56d1523afd31640e1e7c97d4ee779407"), ("2ede76c02f1521a1fe160f894749af572a009dfd49841bc4d3ac7cff829b4da9", "0122b3b80afc45f26c3701ed47ffd537639e889b38969a1927470e9953f228a2", "00d4e12f9363550a7bc7c1f04823b9bb201ecf85f17081017566addaa3c40023", "0422372a509eeb81d86728cb5f7151f77966014a03df74c8fa17528bbd45eebe"), ("1666d4a1c4911d55444d6e8f10df64a9fa93c0576f7468f8df327b1440cc40f4", "08cabfb694916ea8c62de9a46b005d281b2ff49566fb7b08e966de1985795ca4", "01fa7ca748f04cd5c1ac09ccbd3098d21f7930d9d3f98412c58cb38699aa28d6", "2eb48c5613fde2e4234f2a4f5279f4793741631487b1058223532f275679e4bd"), ("120d12c613b340f54f913bf185c402d11f872cd7a01a3409751fbbdabd469856", "0dd9c42133fefb448d90aad1986540c521d03278a79ea1060738af17b677fa2d", "0fcd3fe35f4326c6f6bd8a1959fabd0810d1f02f9aa1e0c1c9ec047346a41e51", "22792b72e2e57d52c75cea03029208cb912c7165afdc78d2aafc3b0513fd98bf"), ("23c563bb6fad3c4d7a7087ba036bcd313d742ccdc541bcbc87579a7ad6c8a4e2", "2d06caed568f49fa81d9225fbcbc048fd77e1f42b7220196e44ae015144f66d1", "14fd949d39e41c37d1db0af8d1eb942a8a55fe88019cbe137e19719524ad0c0b", "0025a75a0e7616647c86a11be37a8ef894e5452301407eaab481068c8f95a43a"), ("25d9c663177436d01fce3123376d1d9e5e268fb392b24911905c0bbb67326a08", "303b94fa6c7291f71ce547a1ce232512d0bf1cc09c0e7194f9dcea908b65fa98", "17d9d741608b6c0ad2c5092c0a194a0a4489fb07b4ddfc0f924b45bead4a1dba", "0c09150d0289d2ce6ed16d806a6478edc366988326de5ed4c00acce5e05f0f8d"), ("1df86d9f6e85b33db712b9ebaeed7802762edcc314ba5ff4d9950382b2c98ca0", "02f5a90b80357a4ffe95d50f0b7e24e682e2564d919e27948d5737f824eb3ac0", "1520cfcc80348a41aefa768d9fa00fd7f28fc7ae7e519656a1a251043354e67e", "0ba8c875ac1df4025ffc7217f382bbe92222bbc500af70f86e77aab54ce158a6"), ("0d4b11fdb69c6c111dfb4c139568e4565c9d46cdf84499c5ee11f75e80e8d568", "01d064b6b63303a215e568ae9561739d2318639ef7bc5f4bbbbf0ef06c4b4843", "178db5fcba77ca0ed7d0fce8aa844aa6890799cafc70758a0a71e4c97ec1d997", "0eb3c5a4baf8528a3b6a5178096c386de38aa2c5cd05145c57adee6666f77770"), ("2d89a56df2012de30cd495a02e200beca9519268d4a595c282bcb94c84f80aed", "1794079bcb4b76fc848cc7762357f8a34745a8754cdaee7bb2e5a44ee85978a1", "213bc832e533257a6243b642ed2140186c306656f411b6be298cbf0516ad3a1d", "28c55e66f60d10e4190df0aacad83aa1108ed7ab4b82739919701bfa83f91065"), ("1fe7c281b2c77fbd9bf2a1372d1f3ac0c4033cb2f075a74c1ece0406ff1280d5", "0203a84be313bb6e3c417e95d671b871a5f406361b54b2453f80540767b0fe46", "0503c03ca09801c7f36687fbbe6380078474e7f194560381035adff67abb79aa", "18f9e69c5803999d840b0dc04b04559e68c48d917f63cb24cf6c7d5185ff678b"), ("150b71535bdfbab78cbcc9b6e596e297b46c2643215076823b245dd7fb8db882", "1ff16b5816fad547158ac95aeaf735ea8a4e54afe7588301da39778765f6c944", "0dae7dec43d509972871c5b3a2baf98d2e5879d065127c08f8587a9157420299", "18c1612c4bf7b5b1ada93a67495e701cd86da042a175808df68a36ae2b255553"), ("1d959a71f8c39586ee1b7a88ed5cae4a6119a728f46cc3291ca86cc3142ddf58", "1e315a13070f82b1f2ef77d5b1f3cd8d93677edf7171ac8654192e21395f6092", "0d5c75d85f3a1326896447140b3303dec3a586e8a678947fcab43047912e730a", "020d11e27131eb021b680c8feaca7388d00036165006747394e78f01fbb6442b"), ("05b5657b4fea7b29aeb693b478f64e31bc4694e67debd0d1a8e3d76c2eb0a70a", "172e4aa1157dd7dc3b5465f2bc78dc5c825f1d162f7d4205cf56f42ea6004302", "26fc040d7c634fb1af1c2becd31bb4ffc4f8673e0f0594377311c5f4aa3c8283", "1c03d5f810e7f66ff4a991c84d431c5edac6ab7f9045a041659aa6a5d1056f8a"), ("2a96be515e8c910e6963bafaead06041acd46de6d6963653258a13ee8f91b900", "1aaef1ed0c315c471e959df9a9b5e4585971bf3537199178ccca9c66c984aee9", "17fe30207c4b5e8c63c5282c73fbe6949aae01ca8bf0f883775f90191435bf23", "199dc6f9a8959a3b3795a87ae1d86d1be71ff449dcd675b7cd5d02ae691b3a26"), ("1b1a83e53efd6aae4722f4f6a1eba34d4fc5a8366b39d1a53a6b082fd9bb220f", "0b7967b67e660256af0d62e258ea0f85b3944dd06e9d90eab5e61959d2ae7419", "2491fdbb44a7ae94640f86a6a49370323556d8a2f622aa3362f577b4c9dd3c13", "1fe4660c86ed74e43e7494f21117264cfbe0224a6343b10271cc01d3fdd4f853"), ("102d063b18ea12e58d578d5a3ae6d4e6f078a33ffdf3dc2312aa328b6f5daa96", "11e2ad3f4a9427dc0a7ad6cbdf6271e079cf67f5869086570ed8dd64b814a10d", "15f7344475bca956435b9b523ecc1f5d27315b2fcdc33a4277068e3390c28fb4", "08991f8e0ec1b881f9d56868294e949e13834aed2a792a3475edef3c7a46bd94"), ("0801b79562a2bdda67b8b0db504d6ecb882de2f07d8ddf93e6385f8146235031", "1101bb1218ea911b42ea28afbb4c58188b2148d7cb35d4e7b9274331bfa36e9f", "12f7f243a962dbe73a529ff51e1e0be29be922945341f96f1dd4e54989a30f1b", "0364e16f7eab91b64d3d985797b9cf837bd4eb0120d84e4589e1a124afa514f2"), ("006d48f732e4b5170eaef1f9ea21be1d25b0b508a9c4a1a371f9b7c6b0cb956b", "28551c4c936a76e9d438568837fa6faa5b697d60449250cc4257bf1d23acdf0d", "0cc80c4166dfc176ae59f5c89e81843495605e0c07c29abb5c43b4e60ddee72b", "1099d958145c4c02da2d9d9a8874580a219a80213db79d0fcbf42aed17d01c91"), ("2080d4aa3ed6d46887836a583e407b69a6489ff283453d37cefc9b5b502287b0", "27cf20306be41dc3a3bd0b4caf17895e74280e02a4ce3b8b0699efa17d985fac", "12da70d97d8f9ed1278ad0eaf787431177c30d44601b9e4a339341e9e375d4fd", "07df15daa96d0c235a7f0302d67efd1c7202818a3265254a573e291220fac904"), ("1e3351f4f19612f4c4c8bbfbafe4932b0aa063c79ff682cf815155d07789e276", "16fb4f6672138a71c705fd058bc27f510ee264a2ff279950cb54057d2de4cfa5", "161e6ddaf9b76c12c1b00ddee8e9d61b70ce96390a617c4933bc0a2cd924b3d2", "280056a1aa0ec05f32b3bdc1c9f460b2d151eefacb6d9412344c3ee44d9266ab"), ("1bf47147aceb3a1b08c1b86e729afaaf4b906a89d34557bb7201b4a6ecb4df60", "1d06a3dc80b150334378debaae2ae8170357c5353812396193e5333b12aef2ef", "0ca739cc903b416025cc2ab78e60936b237a78d2fc60e7ad35343965eb5aa094", "0abab46e2df8e1e96b897e9a8c8f0ef8c3b57fda5b00a71480f27d2245782a24"), ("116567c4090f8b6d073af493215e5bbc80f21bc18fe2b45228bcbd7c7a989383", "006fabc7187686ddc8bf403180556267f7a0b41eddc8abfb8e212d6c36a687dc", "2b9e2e949ab6f3060b32ccef42de266099ace78e9ebc56fcb44419595176aa61", "1543b1c6daf7b6d7900ad503e25dd23d30ad9b0a4ef7bb638f422e688aa26ef7"), ("0257713cd19bc351c6ef7c2de818fa27c1c6571e2da5cdfe3801bebc8781ef60", "1f8e6024a4b08bc2c31d63a5a6d090d12b5d328400596598bc10860d0021908b", "0eda756a4a3b728a35592452a1c16cc510b2272b5eb6c3e4ed9b37ec9b61e672", "1c15e31ec0bf1dc2b4d26a46fcd2cb5fc86e6763c85401d6eb2af495eceff220"), ("1de895ed2f57237e16f6ca08126a3c85527d13112f674d7fdc1f126dcc1898ea", "0b4b7e6fd7538ccd85417fe6b755fc853ae32af36f86fe2a99c416ae240cf0be", "1abeeea40c30223fac6e1cceabb909e41c3c42f023553d8c12a36a80c509cea4", "13f20d8f12c104b4a879f3a48198367dc4fa2255cd9c775327768f6abfa03a09"), ("261b1c7bb5f6bd821878aee7d802ec2e784b4078478b51e2c972469823589a74", "055af974c4491362a80fcba62e923160cb79e0f08a0888eb1d0137f58e15ea6d", "2b586ea130aa56c1e096ac19052677a3ac1ba029f049a3fd9c51c0f129a46efb", "10669c81f613f895e53a05cd01671991a53f4269b5a06ddbcf5ec4f398670d58"), ("29179fe4b65b157122e3ff32e727e8db6b67d05dfc9bf87c2b45f28587de156e", "00cdc91861b80a95925f115321f11c361283823c8f26c7135293346514d6a52f", "1d0525882f0b1d52b0e2169f36d6e29fc59dcc259406c6de7b8b6c81986c9fc8", "292c74aeaed267ff98ff283e13b70af967fc58ad1a01047eeba8bac1fd7cb588"), ("0bc178e2250c68a41cc5cc6e7672f7816e4198d8c489cb06e28585066e23915c", "0d7decb9232aa8d95745888abceaa48e3a70310f369f581358cb0eca1f1be227", "02ace0e6cf1a17cef8b29352fbafa9e8632d235b301ab6b01a87d16f67292656", "2639776a52e631fdbec39ee55c6bfba4eb31bea2d0f2a4ebb238fc315ced53db"), ("1916e448e45c03d0eeadcf87d843ad91759caae0b7c5ad8cab6e29effd167abc", "2e54920e406c5ed916dcada86fb1df8062047b948a59155353db0e2e9b6e77cb", "11816aa10e84ab734ea602aab58094ad30dd6538682c8be32e5b0b0c16ccea7c", "14b189a22a799d108ddeb4e3a01e11c6da41b89edf675c39680b2bdee1fcebba"), ("1533da13bffa6be28be457b58afbe0694e34b3005bb859fbef48ec83f9d1542e", "2c91c586dfd56eb056bf152cc45ddeb0fa46ae0529c76fb88e5bb7eac0db67ea", "1476ee3e6d849ccb6feee71b88be30dae59ef8aed0d47995014112cb6e368830", "0a896347fc86140e1340fc518d0132c266b55c5428e731a43b39e3b865e361b1"), ("14b88f2c16d124a2f35b8648c3ff34fd428b600acff35e0f52536a088cd03058", "020a2dc2a96d70eaa5df7ef99795fd66b2ef8c6a24ea162610e2266e7e7f37f1", "1f2f50eaa5ec5867efaf2ed4691706ee07e145ce2072bd9932eb04b77df5cf5a", "17b45e9cc335be15768d081f10e8fb764b6f942f55e5b46f14b4f6217a71aa22"), ("15522c84def6a8472c995a8a58e541c31d803fc291064538b6883af3a058d0b3", "21ddbf1cec8e5588e7d281849ce18d584fc7b538fdd37f2135fa4a1abc9535c4", "251e80e619cfb0cb864ffdd6ff095ca083adef7d43943638099c1e8a7a1a7c63", "02a04c7899876c2a014cb622fa7e8f56286e36d9309ec605591ec4615f376ee8"), ("3054fd5c0d0275682d84086e51c8f91ed5f82a8ef192145e41f5472f80d1f97c", "1eb1ac5f81236228283cc65ab7dfb839bc403627258e064a2e5f679e606a9c0c", "223d8f4a98e74c210e8bf91725f7861d330a0f636c7e5d8d33bc9f191d55b226", "18d1b5542d72451748851dc5b22fd4177db68d5222bc5ce80bbef52951619393"), ("130c79ffe30184aaf8c8543081f33fcf4f2d058142cf822656a23bcc0d31d61c", "0e66cc7a1bc04db29a96ffa68bca3f237a13c58cbd5fded7b25d0f5586646ba3", "28190e38e629696b678fb0bc1def68693642685aae672e00066544ea7acac271", "1ad81c4d332899122e3a5520284ee5f02774192a6755b7e92caa659adde701e9"), ("0c9218ab0451fd9e2b5d89e52ce5bbbc48df154edc7500e1a684f13751e3b439", "1ef44d74e07087451812e1501ad51440b7e80acd3f5e3c170046b8b36467654f", "303070d72a7836cfe3e82693505af243e1893de71d14491f4e0e179842e7aef7", "242df91876cc91906f79c2d968314ad0f6f61380462f054ee8913e52447d31fb"), ("180fe8238f36fb24406502b1b0fdc951facd1368c6ef142be74cb6c88c76e340", "1f47741362b6dd6245faf3ca785d96422c9f64492a1493518da29a1f6fef0d63", "0f620d536ead3649d91cb51156fb45aa0e22789d8185d74f06ea3045dbceb8a2", "10e4da3145d58bd2116c5d568152313a9369c4ec0410f63fa7cf2de9ce4bb77a"), ("10fe0326f372298ca9c6760f0b5e45c7989714406baad4e6f2766e589b49c989", "241d32455a98c2e34333241394a1699e32571e189b17a1d675c4cea65017d033", "26721e3206c52fff76eed177b0a10be3712eca0a824a05dffaa5580b5f61bee2", "2ffda240e1ded3fbd77457627d5e171900d6330bf8c0fc5927b955360beadc9a"), ("073b87494aa29afe93de335252082d1c638c5417819382176fb43be76a00cd26", "2b7c465292b76dcefb7b336a91789d2c4c78361c75b58ef10fad2393beee1e08", "2b02491d82be184f7a1f39011f3a4d8d8c93f9e0b62155b4b6d7eb5fa52e470c", "1437e3327591ee09624cd8f654be4a12a09afb4d5542850f093142707d9f6f52"), ("221be8b9cd2ce57909ec783ba2ae3d4f4d00e3bd8bc6235246f6de927c813b2c", "2305784e5520e1e650d33ed2917383add91ca9fd8cb1277dfc30405881c56b05", "198994914f4e01223acf0a7eff74c27671bfce1510aef31d2792362d9e027ead", "01a6b808c080ddf53ad9bec691e959f4f607a08134357cd75f7325c01de9dec6"), ("25fc158281aa18da984a1210305688c622f999cb0d6dbdd5e1d769897123ebbc", "20d7a99f5f10ae0bb946dd47af47ef372f3d2fc4afd8abd3c5f4e710a7d9135b", "05f66b0aeb2ff3aefae30f7c238268f9103626c1d95120949bbd0fa6a6292a6f", "0324d47c3ba2d9ba37638b8fc96dd3a59bf4c6ec8b964f7df52642e862d3acd8"), ("046f3c68ce29d0270ecbf3cb2ff5c21c48e919051e7e08678bc89aff2dad9b46", "227051118ac6e1c81bfa6a5039a00d51b5980ab5971d7426af1b31fd482733f7", "130782c0e886f8fff654a45447835cc35d6f6bc004d6fc247302c39237b9ee29", "21811896c0bc23c082b1dd2f4ae6cf166a64884d28ff9845b98c8ffca05edbc7"), ("14997dfe80eadde67b0a936b97be08e7be15b85af36454ffb3fac413c5868108", "13b9bbbd3c44dd774721b1dc0731b617f3803eb465fed3edc4bffe9937060806", "2efe2892be59f04c753306e3d263d9cc33bd4dbebf0acac95822b6bf457ccd36", "05c4f893a877da8ea9f69f8301bafd2cc53d362d4d569690d46d346a933afa3d"), ("092439fe8a71a8c9d92ba4b8798e2eccc0d3eb638c233d4080115dce3107a02a", "1f55f2e03f89bafbab0df2f103d00091f61afb740bee00640738befddf186783", "1f8ae4c593745d2b574866f8c3e7d94f01191a01a2983560a017dc33f0335860", "118eba9489fd9a23210e6db758d1ac92933067de28ef6810ad5c6b58072b730c"), ("0cf5409516d0a8213e9e6f5829b2c1b32df1e7134286132befd63ec23bd8ce85", "22e743ece994467c9a4d0b59ae89e9354e78553a2e26e75c0e9d9185ca1c02d0", "2d1d247471aa6ee098eba90f847f22c444ba3238d947858b9092e02b245d1147", "00fdc3d75d7ddaabfb3ca0c374c1c71811cd62e8d51fa6910718056da7618990"), ("2ff0fc67b8f53f8fe70f60611ce3e0718aaea3a633f8f55a4f15e8fd64819325", "1502b3ba1500e219b0c8bd5c10c27ea4a05f848c473a2c1807e7d8e1bcaa2da7", "0abf394973c0f8ea925869b5389c2127f3c93c68bc777733cdbb324e22e05abc", "1a486543598f3a8a536eb979f06ef00d7d229d1e0ff5cbec1b6256f3f5d473ff"), ("08e74cb5e7048b2514c370f8e1ca6387347ae47c5b0843f932d3e568cff764d6", "2b978abf6aef1daf05762e0194b91669f6d58ebd19295522f771bab41a262bbe", "1eccb6d442f35dfac7a0dc538e1fa8f5ca94bcba94a8d9045427c5019df3cd4c", "18b84ca776c1d60409ebc3852a99e6a0bb565f996f9987052aedac7de507c821"), ("13fd1c2f893fffc079e0d2341335d63974e7910c4440bc7f37bacccb942c12d1", "2a1f06652544e649dcbac34f01f534f7993d2180ca3343b8897a34dc8aa7e6e2", "16d8acbbb0806c8fb4bba9578753b8deaf21b66b275d5d14e85e5ce344292ea5", "1e2e705c6d02adfce24203af217a3e4a1f5438a18eb1cab4a58f11c185974006"), ("2bc05d06752b81ccb1cfa593b7e56a9f5d8d55425655a444ec3ebfe6de298601", "1fa84131034a7687e336dd21349a77a2607d346ab678ffbc11fd00561089628c", "15161b4a2796a4c23accea03f6d28d6b9f7b3b9aef282bf8c115babbbda0d4c6", "25f4269f4a01f6a79f13ef02a3d3b18904afb0436e5982fbd05a8447af9c5b28"), ("1a9142381ebaaa799998c0670064893ab947158350003505b614b9715ca341a9", "240693e183b24c3526a385d80b030bd77238a0c7ba99976f022fc37f06ac202f", "2cbc3574d21dd756ff75040d80867cc9cfc550bd91ed59ea5b50ec573b18f17a", "22d58c28d4c2e04e1ad7399b782a957045b83c35c322e8f1009f64bd4fa6056b"), ("186d0d62c6cf53fbec632f47d310209bc040cf83abd4f03c615d8e8c35c4968f", "15bb323061277f698b1dc4cf439ae86a45a099ed5dc86855fa7b55d24a8779f4", "2c46901487d3f6fed72b073b157c0104ce0f2a0c91b865e91bc5ddfe58ecaa26", "0890725885a0122bffcb5afc84ffcb76d2b4541f80688938f0b5503e0877c066"), ("217674a2b82aef90659ef26695c397bf5f510e1be41790c53979d37e9b5d0e3a", "0064727e3967268c5528d10d25616f9dbb5a0e52513d18633ffbe422bdd564db", "0431b3a2efd27d199d045cdfa54512d4eeb17714ad9ac6c13c4b144346f72350", "14a79fbd18a78580b52023e415f0b5b5919ebd0b222651e025c41f0abc19dc59"), ("14b10c8009c04617f5dd801cbc19c5af7baad61021fb7eff8cbb4c7111980b37", "00815062e8e467072801558d1febfb5233eb5eb3601dcdfcb47f42fe360d90a2", "2f3788960d1b20060a91f81e95f450199542e9ce4af336b41e3269949bbf61cc", "1da829b1ad6c3214c6e341759981f2f17618779e2d90e8df5bf1a75c432ce41e"), ("1beaf96c4c3a139bccbf8f745291f621bda98fe357e298b8690f49d414e198ce", "2334e50748153e11ed57ecdbeef56afad5eda1029cf3cd5ced31f69043ccba39", "15debb70a392791aaa4504cffd08d66ddcfa07da9460a94f605f5e98106bd5ff", "1f66803cd4f8d762457c1a1d0cf9fb1fe13bfdc038b2be099d6408ee4da3ca82"), ("10169cc18a27563d103850de8a923496b0d9c4ed499ef623fd2d9e04f7057d18", "0de0708f393870678b81a9787de55c027569e6a8387ce52166e2af0f107f28f2", "19c0bdcaf5f8f91a414fd4b407eae8effc6040050d34cb9d749fb6c88207fd1c", "0b306efb8195961a40eb5d1566f5a0e6c39a84625866977d2c5ac8d1b970b0f6"), ("16bac93cddf487bb91ed188cf81400b92ee13cbe08918cf5ca5f693b0ff4967f", "211d215c6cd49ceef85b42c99f464b146909ec37f216ba600de931290974bafb", "14c6c8c8f935eed952e73f5bf8c75f54fe00d065a67abbcf23c2d22f75b1c8bb", "03d3661f6f3ef25c8645ddbfd1301896e173db96baa935e37731f8a32f811fbe"), ("1752e0c6f517b0a5cd6968d59df0233ca4dfa5be4ab0527b92a3d68cff27b315", "1fda6f46b3507c72a5a9a5a1f80fdc1e0cc2492bd6f43dd6e773d2594582f277", "014e31f0ce612b16c1d24a0af79ae0bb2b35aceb6b44306fca916bbd7cc5a018", "140c33ed73accb55f5c22144d9f498756f10fa51aaaa0bd89ae05692f92dfe55"), ("2ce567f3af97ce414cbaceb84e01bbd2a6cf4500e6f54b22ce41655d9aa88a21", "162703a8c9ae7aaad7afdd4c1ee2a29be2f3db43194dcdc610d7532dfe221076", "044b769c954d144846bd40c5ca8d9ce672b822335abdfcb9dab172cfe375476a", "0f166bce5d5c0596484152188817b3e829b257bdb7dc89027332991c397a3fa3"), ("001387d89252a3adf0d4cffafec6ea8f10392383cb5ae77d5220dd943676e7ed", "15b9810b53866f3a4cae5423c0154453a1096e948ecb71b0ce9398bcaddc8633", "18124d7fd6aef9c14fadcf99ef1221cbc6ddff18cf4802170f513f8aacc6b015", "0b34f83ab70e19064c4ceec760f2a92c82bd3f17e8d6638c9547f38975ab26dd"), ("0166d005353c9bcc962975b5c4f5e3836df7ae1298422496272e54f6d6dec349", "0d7c6bba593784221c944444b4c44b77f72760fdfe5e19cb61697ecc8cca324e", "051b11655f8d903334e5cfdc0f58ab17e782873e514df51c3b7b0be1aa076da7", "1e06a46cabc2df39b47d6310842b4a03682db3a91948e10eaabc160974d15d91"), ("00433544b84646fd63e688164ff5db5b95fee4fffa0cf16396cde4b7e6939810", "11f02b6bf94eb525083f4d3fcd20ab8f1fc8661d523ea0a30056c9b9efd55a4a", "2bd775d357f9c0efe98c2c0d19ad93ac7c9d5eaeb5a37ca2cea6652c38f6aba1", "0a132c0849d6c6b0a80eb444a4ea838fb1e56716c1a63dd052a0a17fa4fde801"), ("265bd2c38a54c5614c08df2c29939dc94a518866b87520ef99b7e447a9f0d2e5", "2f7c4b5bdfd66d3b44fe27f482c3b72c05a89bdf0d8cbfa0ccbfe43a5d980da4", "28738db00ed26bcb91558525652bc542dee14bc5ab097552d9e5c964021f6b4a", "27764ec3c1fb21ce0623e5c53a86512bb72a30989f38b294df758e94af36d4b2"), ("0ecd1f8cc1dce775007d0330bd84b09f11d7cd085e28009b8c4a83f51b8af59c", "21c4ae8f21adbdfb392550938754b28802d44b5e4610351ec8e8d4548aeb6cdf", "1c601e94ce54fccbb84c21f56a281343af3b14d1a7dc256212bc165834aee04f", "189e057117eb78a7b0b004e83b6e50bf2d059c34b372329b05f7574b82bd972a"), ("189911718876ad2cd06b94d4cb8360013f28eba58d0b95e04c108457e791944b", "05310fdbd45da5dcf1d781c8841f7b0ac1df205ff0bb4f5ab24ace5cd3f6fed3", "1e4cd087be39e2166d6b6c2fcaeedc5a7c9da76001ff97b2f217b25c1964ea7d", "2d211faf1671fcca35a7027ee4fae42361d53c6561d593121a1166a639524a41"), ("1f1536093ac87174191169b053838a5dea13612831795599e4e0afa2414cf308", "212f288fad0a9b4fa60fce25db30d57817efd2afdbd9c957f22f7d9bd4a76b7c", "10afd997b71ea507f9849793aec5ccf51784997ae47392d9cae41ab75d1a033f", "14892ecbdc55c1da58e59850a5db2f3c3861269fabaac454f8a5d1d331e923c6"), ("2cb298d10cd95194d5bbc86238c19c7d65cb03d394f95dee2fb8e9c3714177e9", "1eef90af9aa8bf4b05fbf7869938b1d5697602a2045cb4aae972e865553848d6", "1a05153fcd1e549c435362f0a5c4799a5f0160bb376431a0560d8745e477fc1a", "283cbfd2d795a8cf63256cd384df12cabc4cada888dc860783284782f572ea5d"), ("0cdb6a2e85148bd68b49b201666fb5a6f73f4100561fe4bdc54956e812a58142", "117072ae79881308cd57baaf93b641f78802e78357b65266f5b62340fd7176ba", "1b1c194fd69ccfc6ba8bd0785d3cd75a8bd0e413625ab7512e141d7135109868", "25c46f8d1965b92a7a24d66e637cbb6ab6991d66b7c74c23389ea5c462a9d582"), ("0dd19062f86786bb8075880be1f7bf31cd04543a03c57922fd621630b0133dc3", "19792a159c1ca84824d830b6225f307995520282705af697dbe2e149f280c95c", "10f747a2f6ee7633de6ff1006f8141fe66e828638b18172e519bf33c669e58e5", "200fb9da6d5441064c726fecf1312f9ad94e0429e6963e16bbed7ff2b465e53e"), ("03389540e1e68b7cd8b5402451d7403044c99c4ee9f32fa8f386f4b150ae13a3", "2210d8c2f2996c74c919cc22fe7535b0846508547df2c2fbc7681b24c645a0fa", "2e3b4b2d14cfc8ba02b93a4c79057a685ec307b35a8a95784a47710f1b793367", "2e0fac96ac19ff49e85f7207fc53f8d3e35c0145b7233f960ee840725a2ba4a6"), ("19822f41bfd07a23fab6f003f911324ba593fdd8e079895e556532e598c6aa1c", "1f6dea87facfdcf210091705427863c3f4b1e3e1df8b25f4c04e5c07c42543b7", "231c47957ae41b7c2ec5e79857f86088c6a24a9e79be450386703cf4cab91621", "03f7dc93898f4269a2553a11572c49df2806942df92b268dd6d5419419843f8e"), ("246483d37fe9fdbbe60bf76cd45b530ae1244c45bee58aae608bac42cea0d1ed", "064f886990dcfc25da0181b283b7ec5625bf2004dbde7daf3320934d7f9c5809", "051fb6a319c25c25a24a2e0773f6733ab195934d5ec6461c180b0272ca6381f7", "0fc25fc79993a5e737a56f8852df90af460fe2bfa9fc2c635b9d6b145b5b913b"), ("02eeb695c3bc8d789c0337fddcbd3ea1f967b0890964573728b68fedcccccf99", "2b26e7b92f5cc2b823c9aa807086913315622629fee2fc17acd18ba1766e0486", "1643fc616e83313efb272bb743115346fd7e9ecd2c8a9a8bbf47357f273d7300", "1c05f0f9b7f60c4f459a7a7db296d4d736cecfcc82c352994cb4c4efcc0cc38d"), ("121296f44d5565a957a7f2f9d69972221a9a942051bfe55c8343fe0b651baecc", "2aa7c87e7d879ed042495c57e0167707ea7eeab8d674b6054d169476c25a1cc5", "1c65529c3e0567755621b6eb929e96c0bf04b839b3a3cf4e40bb380c13f6959a", "0b22bb00dc382668cd8ae76f544b6892378e5c2d914b51925359c221fcf778ed"), ("2fc3a17950e2abe51a2d5796f4d1b14ff1d2316e050ebdb7c8f49aaf440a9918", "2f07c7b9dd911337f417d01b8588e4bde38433321a4c165b16f8d8ac222a3423", "051c545e125b1f686129d969ccbec87e1b3d8a24a27d282a9416fa9b4b10814e", "141209257957293fc7bfec71d6799a41dd49ec4b2bc6b98ab284a340ff4cf546"), ("2690a1413ee7c69de0a00a55e02ea856a15b46efe673893cf66e20b40ddfd4c7", "0257b60a5c543c9c691b562fbc164db7a7b8424767e7731ba90b71250d633d4d", "1b9c83388b6ad63fd53cc2ae8b4bddc097f4f5a4f458b91d0a8b9614c65962bd", "0cde1d3ac0a69d3aea8270b05199add2f63606b3878aedcbe4d46af57ae37e72"), ("146a57455320fc26feecc4e3e9f8d6f3e7817c3d276f528ec99617e588963e69", "0cf773f399af00308150ac342dcac89d76bf4670ddcc853b0587d66d89394efb", "0ab11f5571898f3b1ce75b3dc45f7aa40d55365856030d6968101ebf11490519", "111f6204a27d92616d0b491fedbb25bf52fbf3fc5fbacee49fa1f63212c4b6c2"), ("1692a10a833ab2e713c4b250dcfc97b72ac2d9bc6b7cb6b30062b7ea65ce89d5", "05e6eac4157f7dd25612fc18c32473d98669f150e7f3c7276bb21bcb90fbaa55", "1ecd81efef224327289ddb94389d0fd002c8bbed0171e37ddba45bcbf6400eff", "129e7b9f7776d6cff9f625098fd9508bf98afc88d1418d5d53d6c7ed4c1db409"), ("12f1fc2e4760bf903a6ddbf9ff62c37a819663ec66cbff4b54f455dc193f5f9d", "1b70ea81cdcaecba1e7791a1c621cf14ff87f035ccb758ce67f80c3a8af06ebf", "004b7b35874129e3cafb881d6379be65e704e5d70d96c0303219a0f00ef21b89", "2abfbf8f107e35e2df7e4d2c5351e5d1284a6da5da8597448e3575569ba15ad3"), ("0b3348fad3952b40c905c82b6adf920218024016f781e28ce5f87f1f3462044d", "267163d712c773abd99909b08a8844e89ea87bf357a955492ff2ec7af5610322", "1fae6df1fb11d8ff32128f02f66bf180dc84a4b5e5be13164fa4b6ec200d821f", "1531e2e616ad78f94795c73447e58ce979e5d5e02a35c758aae1fb2a3e7070ab"), ("11b3ab7226cdebb096ed01a0f57af0e180cb076276f8d49508abfc3df297a3e5", "29f9ba09d4b2870bc24e32d8a3b7fcaf5d8cf5240cefe9430f6f25258d12c57f", "2a4e30b4f3c35475352f24e9fa436a885a5aece98a05a6150cf200d3e6c48a4f", "18540d1769487505958ecacf66577a359ab91fe7398f63c774bff5eea9d77d0b"), ("1683c5b7f306345c6cde99837ee5ebe5dc071f4b22923b3de53352d6b5be9d90", "256f7898ebdda14f49cdcfe9a853868bd10b74b74dd1431913c162f8bfc2a9a9", "004a959e077efa6c3d688ac91a3122f31e38916163916fcbdbbaf50b2a99fe9a", "10a11f8fc088448135672975409c628c385cce4e79df87ecfefd4d601b358dc2"), ("06639735f52bd995420bca9048ce99dda077e2f0bdfd5331145619a477d74a63", "05983167bd30cf39f808af88064607293553c89670f8544044c4f6bf0cbdf68e", "0027681084c09f0679a5d08afc5b6234465235b4720a5446bc8a53df51adb398", "1c9d9384041463ed4045377bac26408e5e9d0ca455242c6bf0264396bed47abc"), ("161876673cd5c57ac21ea0aab416769912c51b8042af1f3af3a6f7b5c6d1de2f", "0da808304e73a1a0097e456277cfd19ad4db688c470e707238b9ef6a85bd86fd", "2b13f006f7ac8f5ed3fe6e6cbbaabf8e86b83caea7d81176c1876628e9359e64", "087ac469530645abd21e421afcb5475d974d4d008543d273b28524d73349ed5f"), ("2f79fc7fd083c8e5ce2a6cae2d825e400eb34a55889322aec195fe4cef544509", "17d7c6b03109955dd30b24e7828bffc907dec54bc609e2187f34dd0ded12dd55", "062045fb66f89f6e56cce155f82391d8c72ac2969692a7dd49cb757fded33f51", "005ea1ba0a6d31dade24ee00c50056f011296d5a23d7c166b492246ae4a7fdc1"), ("2c13309e438303ad43afb1229b532e93c82cb696e557468359e276893d958adb", "2cf4950568bc29395b1ac14e683dc04fec573aaa288a4fa83e9df396d65d9fb1", "12514bda9411fbc9daa231d94dbab06071e921f4e2497eb7dc59fea1ee0a1b53", "253d1a865976d16be1bba9d8c2fe9a70694e82be6af662157ba56299be1aefa5"), ("1e35040cce67d952aef287ae521486c9c283e14f21f0dd031a0bed75dec4c9a8", "0b0b52bce244fbe854b5bb64ba1f8d41a51462ce3ae8dc74958997cd4b99899e", "0e8c1e6b7a668acd5c055a013804fea88544e18f2ba0a89ab98c8ec0ad5bfb43", "058f173175e0c40a4f8a1fe61004a31a17475f88dd8f9bd57c5022d265a004d3"), ("1210510aadab77bbb743c748bf741af420fad16b1eb2ca16e1ee8cd2095e60c2", "0cc2052f60ad8c195df3fc1d5f68706aa8689fdc0c705d60597d55dac9359c03", "2c13be084e139e9eca7718cd7d2f6ce691f32ed17354aadc08a265e357bb5ff8", "1d96b5464f6fc6bd5e40f8e098319aafd53c75aa0064a0e9518b2ab81d21d571"), ("08bfd051961c12005f776d7bab535da3ea5ba14fae5cb8cf701a7db2f8fe998b", "15c4852ceaeb08c40fa00dbb46eb9c57baea6af3214c7c66d07d960bbf6520fb", "24e52b5e98501a3764dc169f1b3421c32b5fa1e2d46989634dcf695796ca9094", "086d5547fbbc45b82fda3dd84de9628d910ad24cf16e5fe2613e45fac2a83e45"), ("2057773f9607701c9443b703ce76007b0d208948324d05a50fd0c37e5539b0ea", "2ffc42611d20f5d1340fc79d69c6ff5d0f5d3272fb8ad55910d15445e3004ce9", "169e397f2106eef4893b385dc3e83f702d02441f651807576d4eb3d8a1bf1576", "15471c9765cc1d18fe3f3bf66af3e70525b997cfcdac346973019825da71fba1"), ("059302ae1aa67d6cd4fa74c91fa87f38f7917232333d513073d597e3a42b1d3b", "24e7c189eda80eb9618cdd7e98f1ec5dd0b5b8899458a015ce32541b97687b05", "0379f6073cdfe1e6e446da7e78c354a541779e160ae133836b72816a56f00bd9", "2acfae3abdb95d21ed091e6c72fe4373ed006a650591c2d5a1d4aea22e334956"), ("252ff515e827654a35b372c7159684ad25c3ad794a419429650123a39aee51d4", "187ecf0746e46460fc0081267530b8572e69caa323ebad0c9f78f4cc3e20a3cd", "16678b6d3e3b4bb1b4cb762eaedc7c85d153fd9512b31040ca8b4541106cb5c4", "22fa67635b36906662236e4fd9ce695d78ebe668f74428f7d8df204a6d3144ef"), ("2a3d88a3629c1b6a93454773d1cdbfeab1fcb5aec4acdaea571af5bc91fa5150", "127de86f99da6647ece77bc28a803ffdb99a8969ed60ebb0d51041f517c1b283", "267612918ccfd1e1209fcb8effd8a2a6ffa3f8db081cd4142ab61726a700ceea", "2e8a52dbecd20642a862a74ce191ee90d8bf4a242684a829caf1045fa696db2c"), ("035cf93ce8ce5d564349453c922b67158e59fab814a8b27b64f736c31b2145ed", "22c24e7942dcd9dea06762eb9a24ebaa05cc4c02cd69f382899571a1215c5416", "1d0ea916c38f5d55fac615abc18602dc7694447bae74af7da5d5e8491b10058e", "1de373a57651f61351f8c700ecb375ad0846d4bf8b694c18f296573d44597144"), ("07664a5efd41ab7e9911d5ceb40a2aba5be10cd9aa0979bdf9389f0a67bb4d6d", "22b4e78497dbfe01f88c146f5632c5c70e03c768b1971a18a3cda8f39168babd", "21a8814ae9e7a0e1a657117f5815e00839075cc3e7e1ae30e196002a9946d33d", "2948071d12ba776f90d1625da2a708a45400f1af7747a8ea2282e7a7131e9942"), ("2fa7e5189e2d23ccd92e14c880372ac39e68e4644204341bb264dbe400e5f35c", "17aeac7a7a73a46318953b1bffeb1db915e7aa70562f9c8da684a8359d32c756", "12ab5be1b7c81dc26de5bd8dc1cba3cce2b111e9b153852fa7c2cf1b9130174f", "07f100f51550491d163f6eafc6f6d13572d267377ff8692b1225fafbd02994ae"), ("23f3cbabb365650590e2de8e1862e6a01aca401b2a534533f3ba53a8f9fe1f58", "18cad21b8537ef949e6d05783431f1bffc24d91a614e18a390e870b81a1603ee", "013f1984f8742b4a350f2409a75c933566319a42d77fb1708c74fababd92e854", "12b5d34661c004a578490adda08cfb0f1b008624f158073bf0b4815daba1c017"), ("06aaee26c95d9b378866516a9d42654393a6deb974487c1a87b14b6ba1bce039", "1b91902038ea0b8f3412675efb8c2e6811a76e14adb49347cc28b793aaa26488", "13c238db4b81c5f509d3ab129db1cc56028dba9d84e79826fc27fbdbd3d24115", "302377b22fcbfbe84f3f54fa45d69e3324d382dcc18ae6240f42cb9a3060c7f5"), ("18f49a5203a3f25d548bce3b15b32dded4d342e651c1bd163ca1bff34eebf28c", "0b040f0089ff032de3a512fc053ba6ff95af9bd038811220ffba19722617f181", "1a41956bf0799c0b85f0e31953a99d3a6c57ea538575bd3c530974ef71a1e1e3", "1d94bf8efd364cd4857445a5cfcb864388918d621e886598cf640c27fc048440"), ("203e3560756a87fc54363a44a5ad908a6ab356c5810e229bb251d4b0e6c3713b", "11a52f408e04bb7474c636d08c732f33e57f6fc1dcaa1e9cecc8ae44baba2e4b", "24e16cadab672a6c8ebe40de15269caaf35913c79e17774fd2b0158ebd6e8114", "1db4a26f6aa2a2c9708ffa98fa9a10c777a111dc3a60e6624654785740a98240"), ("0dbd0d6f4dd985748b871516e206a6f7e87fd89be8f3af52aa0fd0e125773abb", "29734f958a3d987f7fbbc77ed743874f9b3cea480ace10c2d70389467c521d16", "16848e6367c2f76b722de7b25f64e2919a1d30243e6719cfc6f29d7356b8fa19", "1248475b8a86ef02c146b8b5421a30d0c8f33dad06f11ebc84aaa565166531e1"), ("1b6dbb5c5cac3629b02201357d9ab53ca233a6ed52dd6f9f9d9cfc497866abe1", "2844b3e1536dbffaa855627234ad30daa21ca448a216f7d46e5f53f16422ff00", "16e66b424be699a6cd2209ff6642810437cb8576e3602554bb53854965a9659a", "1d1c4046575f78999972e65a6a8661ab324f7c2ceac5ea63248a1a34af4b057a"), ("00b0914df20dcabded77c405a2231c9f69de9302a0850b806bee06514fe3a75a", "15b964ca5984ebe6206cef4d78d2a38d376ea309baa0976b76e6f4d53d737bbc", "10195db33b5c4102cf33f744a041ae7dc281a72dffeed1a8453e8b2baa365644", "1e77bf826de75e44e27f2cc9a461c09e8e259a0a9e90a0c6f0ceb4a9ac95b669"), ("0e314b37ead6aff65806fcac50ac926975130af2038a4a7de3015a47831bc00c", "1a50dff5c9c9c2df47c7d0f811edc48564486426a73ced9a875d92226e7934ed", "0f75c98dfb3f4c3298bbe800f559a1fab01da97683fb04085c26398eda027757", "0779363146253898e7d9715f357a82ed9bd127f391fb1a47a29c503bd12c8db7"), ("2aaed240739517160def974056b27d6033351fc75ee095f1fe27abe2df5a7d37", "2df1ad0dcc7b44aa6428f0827ceec8ae917fee55a4e10bbdd6ba40d9b2021415", "23bb65a8c6a0d915f89c3687021935ca2fa7318422ef39ac23d1e8021eb2642e", "076bf63dc2072b46a60dea878e3ee1ffa70355e72159e21c874a71b52e21b5cc"), ("2067a2b9d81875e8d978185ac322e23091dca8fcd5477c550e85b9a6e3907e72", "1ab1c095ea74cd14e4e64b6adb9633ffc19ffff003ae3d9891df55c5df131faa", "0ca61c26752db48de9837a9e26fbabf343a010a935ce18d9353c922d5cb4b361", "0dce34ed09635d5f47610a216257df5c37f1cdd72e02c9c5a6cfc6213d198edd"), ("24f480f6004dbe4a3ff1834277e6e9ecb31bc22e50ff77ca8c646ced12f94ed5", "2fb6f3f79a0e86f896ed264f93f69387a37524e955d9c7ac693a617eb1c784d2", "024c20c51df56b7f41fd8e0e7c2f11b95c05d5b3a7045eb638b743f2f177f13e", "292b195347bfdaeb89b650a0f9f472a8fc4cec723e64b320d8ae3e2f7c299238"), ("252f5b0ae40c9cd6d972c367535e272eac109e00e4b4563ee25c5a94cbf03028", "053e71bb8ed6e7ca0aa0982b3b8f6ef2c4063917e473654b198e65c1f7131ad4", "1cfdbe1914ebe9f00337e31b17a51addc75af75945b1cc4379a489265949cfd8", "2a46cc031628fd255e523a3abc9e5cc7d1cf4461c5f0b1cb36bc2f40e70ffc05"), ("2278adec774a69222ae49dad260e1e572df8fe6f290800ec474ce116f6fff474", "1c349713ba751cbf018d3cadee1e72329267a5dc481afe5f60f54d0442e22c0b", "1736fbb5df61fab9820997f0395eec3eebeca9337cdcaa405a79301aea7bf16d", "303b09ebd210e8a25e3598c93017851b6b2f463f147d599007c643382560324e"), ("25697aa49a32156955e284d576dc0c4c67b13158dfb9a0dcec69d0dd4254effa", "0782744580acbc85d8ee0ba3994da7aba02b339134c92f50346180402e63b08c", "19890f3cccee1f9e6ec656577d0a104d2a45fb59d6e034884b5cd7d1505271f6", "23cc03021215cc812ae5f24f75a3d1c40c708fc9a2d1dcca92b57b62a382ad43"), ("1f7f30c9a46f9e878b5fb37c1607cf6631ff23cffaa89f7174c075c0d9491851", "0a6c144c00cc3dc495a07d2a39383e55db9f2446c91f6e79c4e3b00e8edee753", "0ad89748a5eeceae681204baaa53f6110b72249dc7a0a7e90cb284227a0d31c7", "2242e2e4aba908d3eecdb1324fb924a32ed96c02de51e4198967d358c440f523"), ("265739c4219d85cd56c546477e3613db4b92a8de411f11b48a5f39aff7013b2e", "125a8be9b981244550c6320e6c40f814a6b769edebc73656e23ab73795457a59", "07ba26dd26159df8f5d14cc5f5c72eeedef669a7b67a7917bdd5acc4d01df4c6", "12d7f5f443061fb5c17da22fc36033741a05764f7a47fc6dac14997cfd79dc40"), ("182f02473da4c1c8ff6858c2dbc279bb2961db8b7d98849091429a72e996eec2", "235bc87ce72c06b33bfdfa8f2f72d0827e6b567a9264f20e016a4792ed4de96f", "0457c8d728decf61d5a1c26763f5c35a2d629541a8bab0fd896af2b71e757933", "09168eaa057ac95f6f58527441e584b8ffcc4831165377bc8fe566ea1d9a940c"), ("1d8e7e9005d6e5afc80e822969473a9463165f3ed8da72ee4037c613d5b1909e", "1bb78c9bebd5611bf1833f65ddf5b3107a6d5896d678256d768c27b2afb497a3", "0d9be666ca174630e71eb500b49790c1956c79335cd4698da9f3d4f4661510d7", "232c5e9e6327bbde9163881d07c38505b1bd38b6c890418dab5bc1310f1e843f"), ("084e5e15b6ebf2b65ec64953fde2ee72d1cf142b7ca7137988b5e12f925f6134", "1e2681c956e85c91e0ba083d225889395abbab05baea7ef5e32fb1401da49fc5", "2f884e20cc94cab2bb0ac7f8d28004f51a8440f323c5b2a2727968fe5b99877c", "0b21fbee2132a26edfc517fd96b37571c6229b1b7b7a1265e2f96b9a81ee8382"), ("195d313553f205e30ba9c0bd4e5c5353e31979fde923b990b3eee0821ec81b20", "2f46eca4d4b16d84b27dd70390561a016977da0037f5aed799be832d052c7202", "178c3d76980dc5aeb867a9470c75ebc5e4e75571591a2452e68e41832489a1f0", "0f2b3c05495617b864e7dc268693157c885a5c3a0e653a48e2ab74bfb431c3a4"), ("2168e8b1718decd9faa74a39448eee7e4e4440684bf872d9fffad402969b51d0", "24930d3226c10e7c72f08bf3d584c309d0fcfdca71f2a86ba1e5554af2c22eec", "222a756cf088aaaba5948fb3649063f33144a455063b5dc08fc03e4256437bd3", "028b24ad7d4941643d44fe37e9e90b01b20e50c880beac3bce968aa017224676"), ("011f7e89ee5f3cc11da37df366b780bc06421b9e07db1a0d34c98e7b90624bb6", "16a6623038173d7f0275a11a3e23949540a4bb5d82ab5059c9e39677f8956778", "235eb7be3a7dd73415ba92390e9c2f0e3e9d1935257fe7b811c0df255083a5ff", "1c395076d8978f934edcbfd112036ad6be9964baf1165c5c9c6466e02e8cc44b"), ("2675fcf5731f1ea7753078cb9f573d4a967cf57a4084f53a95c81f44d6e4f6e9", "21dbbbdd2999d5c6f381207cd6f54540dfb2a923ec87f3de2a50f692e6747d9a", "21bacf5fbaa04cd4237ae44021adb0c92f465eb23ff3992b1f22f9c7d3cbdc6a", "2a55af3394cd044c30380eea2e47e30433ef5040bbe02f78503a78be694de8f1"), ("05353dff5abf3ccd93ae461fcdf05af6332373f82317686e98adddf11b36ca8b", "2726fcd87f7ae4355b1e46c4f0ed47c04bb5737a8228abef4dbb54ce5bae3ae6", "11936e37209b1c8c5185af8ed5f7dbdd1236a55d1733e563c10908808735baa7", "299723a99efb02ff2dd968450a37e896ae27357a5f2d76f8d119b260395dee2f"), ("07492138694c473d302cda1582058dd0ea13daa661fb83ac86eb89a530dc5306", "278514f4b68876e12fee4f42a379c478951c7dee22dd6015255923985f506024", "1da2e17b3d95b78abe94785552a2c1aaa5d4d7c7261848045d05c6c4e600ed3d", "209eb3454a67d424975b9c6afd7d62edca80697df8d7425d41c3d98a74c2e883"), ("27d388b578f594fd2b5756f8b83de25d3ee09471156a67c4abf5cd9535f8ed1c", "0ffa2ba863f0acee45440b61169d37f516a8f31a693d0a5fcbe073cf6b31a332", "1affc4125e039468f36230f56ea5998b1e27cec405946e8d23486d0c4fa475b9", "27a60cd3cf3e2a7f5d8321c9d4e965792b6d485f1a7be644a31f1945ea14ccef"), ("10505ac4a0d52cf48cfe3d32890f19b841448803079497014a9ee9aa7f647150", "13e846ff83e2481e97cfd7cf328291f972ebe0b8a2ac043d185edef8a28c5093", "2c739aeb0b3c787b2f4a9cb8c9ad72c48de0d5fbed6b149a7417db134d6cdb66", "06af22277079bc9af5454f0224316af059eda29742345793f90ce84f822d4460"), ("17be9ed84530cb51d71020b34634e58f021d23d7afd3a933b03f0fb90940b979", "1c7d95e64e165d5c41ee63ab101b0b4989aac8987973153dc0318c2b1f1895c2", "2d4a4f345ff47120df86cd466c0550bb794b650fa1c58788f574615e038afaca", "0e0f49280a1ab1faff420da1a668061372be730c00b7c2ff9b77c532e9b60636"), ("0a54608473acedf23e05d2090b98076bb60e22cc9a012728e3ec01817454a8a0", "08124cda2967db3aa5367650b6cef52e333ac9fe65d29e03918d76a07ed6af16", "0d8b044e92e47b49e4602fe69cb70a8d6808c74f13d69bce88b1fdd5516bead6", "218c806c1f3dfd2b269b4a32e75c8deeaa21e8a5e5792e733366ca0549357514"), ("19da20bf356473b50026953a560b4d23f3f15aeeb240f62f9c7336f18d04d044", "14e13013a8d0e65a867f0d86f6565557d6e35ee098715b42fc4638a061626692", "0f7f7179f00a41c2b9761bac458049fc12cd6c6cb3b36e086fcc74554f8c8e62", "278557157b77e950df28bd8cbe6f8e0149926d9638bb8b8c410f1f3a2e059a29"), ("26f9a75751d3b598c235587e75329f6a232e0783ac7c92263c202f4fd2d59a46", "3059e7f1fca86442ab58bf468e6662cf4ff9d2f9fbfa2a0f3fb11fb910d4047d", "06566e0fd2d9a2f2813fe1b5d5b6faa2d7d69dc0ccd6e47dbd8e758127f3f450", "295ba7c4c5485bfacc4fb3df1382d3c1f5dea56421a5f49876432ea5f6f75a43"), ("1d0621227c9e1d00813121713f94299c55a59f5670626370b9fc3868bd1feefc", "23417ae4e816eafcb45d5cc3e0276300d6cf6aedc36a9849a5a0aefebb828bc8", "2860c2f6340b0bf2fcb89e2de3dddc3c14bf4e7b082a736f9b9b95ff1cca197f", "197a4e661c5a38d1598834e8cdda06a200ca036215b6c3266a561d49d1258b97"), ("10875fb6dddcab71b92de2bd221288a82f741ac1be1ad6f0270fcd426d37bfb2", "15cf482c995edf1ee6fd9e18a9e5a1a593ce753421b0ecebd6a69433907516f2", "25777576ba7d42b9f0f43ba0f00826fa327fae0804a4ba03feff54c2d75ecd09", "106fa157f6c129e24b9c3953c9cfba2c6736679f0ef7d2d7f8c824c665f3d6e3"), ("01a4b5810fd4f4b5c4b5e92ffce1048a6a5ef6a17ab98ff72fb1ae6899c3f15c", "08208774ddcabdbedf205d54274fa10a3a1043b9b603fc384fb4f419973a3654", "0b383745bc77feef8394686e42b7c7ce6ff04f56c51f85d2cdfd362f10785add", "022bcb8d1b68bff4dde0969b3ae12f074afeaa5bb6ac986b900b71e7f8f9210c"), ("1a4812088a86db5f50dbdb7209e5e5a5b49846a67f1ccee188f3af6b1ca0047e", "1409c104ec7ebd13e466761ae8a1987cf039f8899eae6a23df7a0a0e0aa9ee87", "17e883e1b6e0c7053b634adf9449042874b69972400cd16145e2c794e9bd6753", "2ea61c002f9d6cdb7abaf440185c3664fe8ee563b554bb94d4d563472eb083a6"), ("17519e2d2e601d2379fd0a38563cb147ab3407f4542911cdca41bf4695cccb29", "1fd68fe0d898e63d565d714bb52e5d5923583d456f1b03ac5c9a7673e6d0e61f", "2985184d88190aa8451b916ba4a5dc0f20d8703cfc8ea63d589f2ccea7571601", "2ac1de1ed9ac0bb4ed9398974e7b5b3155d235cd2cfea11f7f73d255a34453ac"), ("21654c133d4ddb7a62dd1505b116aa039b2f8ce17655febdc67178fffb7b76ef", "04cd6f68c1eedc06c6b9900ccba6396ee591877e16f5b9b406432a3b8c29ab74", "27ec367441f167bbc30978a1a848a496e3d4b193a65b7606b4a2b144fd530da0", "1c7f0657921a824351bd645100525bd32de2b7aa0f8dc821179ae4cbe3f3ffb3"), ("03a22867b34cde7df4f4dca30aaecf126abbd6021c5fd418c02a37571f28dc9b", "281edfe9d8034dc45535309bc25956b5153d4f998c0981fb4e909a328f1ca3fb", "1a39cfc6d9d2f2e39d8458f7d8729236d73de9a779e7cbda48e139805b64a763", "2feb6fe07b217556f37917260199cea78469a083bac19aee9d5f4bb94082aeb2"), ("1b84f51dc55ba86a94d00e9204bd9d64abcb6eae63910c48ca021e583c698d7e", "17bf5725dac54f38f04e2e6c6da5170eb39b002d88146d8488d1903f00ab8dd6", "15af8d686b17671f0f8a43f2753dc3a06328130d8c8bbe654fca767485ff98d4", "057d69a8cd252942955fbb92b8d5bc9ee0f853823305a4379544714da1f9a8d8"), ("179e97974bf189f76d523e8b5e957c3d9cf012763c429597b708ef1b45f60b3f", "0a1a2838007fc4aab8204ad06b96b1ce82b27cc312f26bab3a6e27f49942c036", "2c9b7fc23111e87b702a62d11cdff5bce0051bbb32d8110aedaf4d9ec75f7853", "03f1ab497804017c61dac2c88b41236503dda517636c9292601b38c588d2ef9e"), ("1023ca59fc8a986cbfe860094e7508e84287fd50a23619bc6fdab2f2660c0c80", "0b057e4cf673449deaa77c41be00d429a1fa964b1aaee7ed82e73c1bfc81da29", "20ca751dd4c5949b3a8a8d2051e498f8b41c73cc2d0626f68159a0e756e2b66e", "14b783fd02bdc8fdf1ff7d1b560fe774eab7dff2a3ce9d90f1f25f1177ac42e1"), ("0525dfb6bf692b18e8c23143e3ac9212c8fa33bdff2e0190c66ad86474a5e986", "2e77dff0ca1dfce53c9027b4a7ae64980ec115840a48bb96767c2f6fa81e2861", "11db0b4e1f5c4db8c223edd75c545cff66c85a845c7c0ce69de0907bcf777a7c", "095c0cb69bc66ebf696d7b61db00a397879a5579852fbe72a9d8aae6680d3270"), ("20b406d9697718db678b5089913a10fdea4b9d2c35fb15d59f61f75e6dafe1ce", "2e30d451d0672a186194fb577226ab7aa6d1c4afc080fdefc302c55b6b759b77", "1250dfbaf11302ce9dfcb777e270ea9f314755f0d821769484eac3d469ee55d5", "05a107a96ad29325b1eb0e7a4be485a761c69067e8f761c249aad9fbe442f5d2"), ("14027a5578a0cca57d8feb0ef4b0bfecde349a4e53ad386c71b032c50b3fd9ec", "24b873b742652467164d65e3aa0dd2266750cff31608548c4909c4eeabd1e2a7", "076b8e1fdbc38ff0d8b8bdc493c6fcd2bc609a1920d9c5e1c443ce1a123a8268", "19c84d15223d77df1a735dd555337f5d72da5cd954a9d598ecc83b051737e03a"), ("2a819e9e469b42014deca810c93bb597181a27589cbab15e3b74be0731d485d1", "2c4c0939e117dff64273b615dc242eef994527dc52bb9d59269f10f3a03e93c1", "0171249691fbdd69d3a146708210cafa3df9466dd7dd3e61d0750f7b5e85f47d", "2a3d163003aa5b2970db38fc9c3c26f3c066470d1c0ff33662971f1355799031"), ("1f08c17879e7d548883795bf736dcfb3a244f07a67be7e14c1c857698861175a", "2782328d4bf61ecc3ed2d6e3cc3e7064d0054a5d8d51b6028e5db6000aea0cc2", "10833c9ec20940562ded1fb9bcd56546af48443c3ec2cf9f050bc151d5101567", "203b752040b2d011919663ec675ba0940ebecc6c84f2d1c69cef094a8a33270e"), ("0aea9657f3564e351bf6b778370efdc87b5674b6cd3f366d16dbfce490f7e80f", "2dd14724e08b1adb1fcdfc541c38061de0ae30692bd4d1975d688a0301c7d32b", "0af9e89d7ef6c36ed763863b6e9258f5ae25aa75bf341b8ba51df9de8f3bd791", "15d29ce84f92641452f7c40b09b018059bdd7faf75c25cc0b42c953ce0642037"), ("05e3b5c77934cf73318ffff267e0883f3142cf27547b20ae5766826c71d75e68", "098d312f18b0cf3a35385470823bca642475fccc362b68ea8fc1c64a00a8a385", "0afdb568aa0d34fccdfda6ea089bd919646708b61f03579109d0eb1105c55d99", "118543bfd8b7b039ad1daa8da0b293c3483786beecf279140ae3c0356d35f89e"), ("05599a09d2033d7ffca1421b5df4453c9a80034da9b61664094774c6c2c03be9", "270ab0922f849690ab5acc3971653a7e621f33248dae07f6a133725222576e09", "0c6c7277d500e8e7912ec4a54d205c44b67a405b4c8a82f0a22a7587ead33932", "21b4346c9177502f8fbc04e205e7f77f6579ada1fa277219caf611594a63c67c"), ("26dcea647baf239a97873728a3543eeec8058dacd60817701914f38f03974428", "169cfe29685c436128d9859fbe0d33b9a71937eceebcee0050475ff3618043a6", "075a014dbb3d7731bd2c72624a813729c85cabda19d10edaab7c55035ed596b6", "2e9e90da80f2be22c2cf379baa9d8c63e4274d610ef3675ed3e7e2e659b91c00"), ("04e81d3ed79c73e206238a14b2ed825d288bc45922990d9b99ce4148f17bda55", "0bf705ccb5e28bb9cbbd900db45db159e7f698eef901c2b71c3e2eb61693c810", "2f9020122a8419b14f2ba343e2f355a85cdae215c8c64f855abf7aff112f8d78", "02af03b3846da0327707f7b97d12e3418f76dc5a22f957de036ad3fe9db8ed28"), ("1d1c3f7ffc515a56761780bbc5452ccf333cf60511dee6d883b70514dff194c1", "0b0b14381dab571c0eedc49e612c121c5a85e69b6c626d52d0616757286a30bc", "20a6c3e1ec951a0678eacb039d6c2733cd2e3d10133b2fa372ca9a28e94f4d5e", "0d47e603ab8bcc6bc3702ceae551faf79913907811bb3390c4cf9e858934b1ac"), ("0cc8dd58e299a41954524d6a7937aa91cb9e8595529bcffcda901cbe7663606c", "276027487457312a91084e320d59afca52ee4795148541a4d4693094afdb0d69", "05cc9fa4beb9cd27a208ffc89422c6c5b5d51fa0ee65e5b71899e194021d0372", "26d614fd51bc79b01cde61c10031fce120fa4d76707bcc146bf41ab4b0a2c7e0"), ("24bf046bc7fa6439fdb9a84cc20d2f5dc958f61ee86c559a9ce3f47e8609da14", "1370faaeab03a62e1599c3a42c8133ac605db45d30a99e95a6a985ec4e287c4e", "28f77889267bf011fd2d807f228ad984dfffd7bb971d8796e428fcef7ce98824", "13431d728b4fb25de2fcd073cecc365f468edf8b92f8a9708c08e987e2007fd8"), ("19080272a8610e72a512a56c56667653ca4b4834782d4c9ab774b6996ce9c647", "0359471843fbaddc21edd223d2541746a70a204a7d9304b5cf966dd4eb278c21", "27994937b6c0e00f9faccf71ae06816f550f64c1bdbbeafd026d69b654618ffe", "153a08efaa70632de1bd0180501d105c8b84d4dd32025f50693bcf010d4f6cfe"), ("12ad7f44bdb35b1abb5d1af005714e51aa2153112da8f0588e78566330b1419e", "2be90d435b3bc0ee040e6940723c850ffeb0d43793fe1a1ae91929333434c088", "2d2b036b59982c7046700ebb09b04ced0b27a5a0b15622eb81e737b48c13d47d", "03d4be9b71789c96e24549c7ae97d443357ddb37b13d965e3b8f7c7e97b54d8c"), ("0f6d6a9eb75688d18c377f4236b2b1d9db04903a093d50768b21ec4d66908617", "06d685729e624e23fc70081dc29e218b1f03895ef623057988bd0baed1c3f37f", "26cf933ea85102d4d95f1528e3f282f1db4e842004cf3e0f405e63bff99ed1c8", "075df49e27af3bff995c0222ed793c97e6c7743d08fbaf7aea2397d2db664732"), ("0d57a0e937aab4c7b7411ddb0000fb34c8fab3dc08db04ce7b23b027ccf957f7", "1697e085fe5a75fc40bef6367da8648c952d1b6e7436c448de45132b8823131b", "0fffb7e06f57a5f32ef3f4fccf2eb13bb7ea63af665bb9bdd825f720167ceaac", "2e91fdc4f0295143c4d9827763587dcc8953033c480aa25d624bc9e41d9e81a4"), ("100ce26dc2e10834b15c7b4d6d8def378e17d460c00857ea9ba6b3c7f6acffbd", "173442c2a2200eded2c2ee5b1383b1ed46004018d93c6f50e47842068230ba30", "241e7226c195526859a7c5124f4c4fd18b9c1a3696e163934b417ca5583cf3b7", "2f1b419a2f579c3db631220cb04c0dbe7ad300568f9299d3b232e359f0e002c7"), ("26053d149424bdbfb81d1c7a63477c6a98250c92aafde2577886f7e85f5510f8", "2e6cbe4c728abd67544284bc6c58f644d4357f100a29cdbe71f0cb36e8aeda59", "152e8bf4787c3e3a8aaf0f6ad9088762a5d746ad9951a6cbcf9470cc3d695e73", "06e3548fcfeca9a20502183c9b37d9773ed62b0fe69d2b121503893c46849c36"), ("24c9b8635b0daaeeb987b0e10e4468c2da95333836a0af38c4161fe80a19254d", "01b5eb721d57403261a817b0ee6fa92046945169d516145e5d2c8d342bd9ed4c", "1aad9a79d97f54d1101779061aed4eca22010642db6fffe1cc23416dbf1c2815", "02dfdc901b950b841dac519585e088691b4d17aaef383b152b179bbedd49df50"), ("233ee27c4c29717a784e1a652119ac78e7bec08c6e0320769a99211af2291488", "29ad83560a1c1c1ce7acdcc218c23c16ed159745ba9426c66ad2de55cd4e58be", "14ab9aab61ba78d2fc4e088bc4f8819b9415de84255b57d52c61315177378b16", "2c9e545c7b360f7c6da285a34059bf51827f961a10d10589b549d8cf1036f6d1"), ("09adb88f353afdb19d460dbcb5cf5e505542865ff046da9613760c96da4dfec4", "291af3ea2cdc5d2fe1dd77ab0734e3939d4211812c530e5394af4ea82ad99948", "18ca3691e13e98cb7aec7558f15ac28af31e1f71db83454174693fee5f40f59a", "0457863923f3779ecff63332497e36f700f02d5944c74bd09a9f3356476a6cbb"), ("2ceada56019abd25894941cd8feb0071f5919b4a57c48b756b9712cf2cb9deb2", "137aeabf2788b8d0ba1f889f63fe693ce140dbc870ba53743684e37749f79673", "15580bdca33626f14cff0d58c82395d7757d4c7e48df99101052cc0678cfbdd7", "0536a5339356cd4fc2c2f0c2bc2b16554e96fe710f7127bd6babb881b9014c61"), ("2e096a197073ec6f0ae7bd71f96024ac4cf4f5e98502c347d2ad2c7c25f40e7f", "0959b61147e53c13c6689f22c5e7dd2bcfd6f0b86540fb1f0669029671886c2e", "182fc7c13c752a0b4e65548314f179cb3dbefa0559621162be1360a1cf9e122f", "127a06b554dd661908d2dbed70b853b4a050002e9ad8b6835c09b7d5dc8b1f71"), ("0e218701c7931848dee7dae9e143010a0f50829725e3378381eb8429b4b54e46", "0da8174fb2b1109a4ed63dba6fa1667c10cd5d9c75ab9dbc56e55cee596286bc", "016facf79ed23b43d4c327c7632c13c0df110ed50664b9e0c647e323a3c7370d", "1cd01c6809c8cb76489350c060d40f8d268ca6a8a9f2a5d3c409778175901f34"), ("2c5e06f9a0d962a42cf0e6301c0fcc052b82268fb9faf3255381c567933d7eea", "1e561c2d39c0a35b81ea1dbd4ecaaa3d0f701363fc6bec3cee680b0251d0df8d", "00b07ff4bd0c9620525a6c15dd1b1e717f3967a22e73a304be4004df57f8b0b2", "06df34c746fb51564cec5bb69f3a3c81794b54c72059636385dc82157cefb8cc"), ("2bb2b5ae6c392973ccab53c18758905d84b21d8af2bbca9d1bc36619950de121", "1a2245d3ebf5d058cf84cff1a835b32c728506f9f4fbc6e331c4b96e97cac96f", "2e797504b87d0fd39dcb396f8324225ca29177a1c94b06a3b78c02c3c7c2340a", "013a38fbe4256d31d13735c07c74a832e9ac7b8fc3287b16dffc0954f421226b"), ("1c0184e9616762ab509524722c6356872273758d82719d2ff4028d824f191ae8", "196d00c395879e69471c404b92c496233529be0b43782895ae67a4d148f4f5ac", "21d92245851f6e659048c19f0d5b9edcbb59b3437782682ce79e04db35af41c4", "1494021813728009b48a8a9ef385ba4795ed9b88b0a952c8a7a84f785b6b05a6"), ("14d45077aff390ea21d509878b927faae878ddf7b2581e889e8b5bbaa841f15a", "2804ce60e0202e17b95c20c9fa8c1e2537f8d550c60202ac259eb4296eab0244", "133051003c5bb161632915a6d9254360c95352327572bb6ce248e8c6b2575f5f", "116d718cb36c8734696959bcf759e23be286bdc38ed55278bf0133e364c7a0c3"), ("09da604f26714efac986ef3483bb2401c7032f5960596d88e406b9729ee0df55", "29668e1ed6f9add2b996cdd25121581faf4daaae4de2eecaccf3f658fd05ae33", "240bd9d38d699a1d9ee5b9306c16f8561be4087d68b8537d02691fd5285cbc5d", "2a7fe51b7f246e71caeb2391080eabc350ee917722c94b9a7b97f5b71c906309"), ("0853533d33d497cc99fdf2e055c16bfaa16d8a301d21c3e731d4f8002dda8927", "0b645f318bb972cc57e70fb66745bdeee63473a2c2367cb69f3c943e21722757", "0787c94e0de19fff2cd8206a4537cb92b90114c477e6bfd80dea2f1432fdfc1b", "104f068ab4b4861b41490f171e7211b291213c923d13fa9bba0ed540d63ce539"), ("123e6472fac89dcb22f39f4a23a1a06750afe82b979d6f1761b1601f8684c093", "23107114342ee18b4993df624ca11b618687a064f3c9816a7be9b6262d0f1ea4", "1f3c5b280a648e3f4c87fac3a8e671af504679480b4a82487e7ffd7c57d39110", "305462db383b326270ef5c51ada023548fd795eb04df743ca03cdcf30e75ac5b"), ("0d341d0b8ce20237e941b1597c444ecea7cecdd00b780957cbc97c8a7c072e85", "095ecb3d9ea439392d3bc857c4036ee51679844ed312847ad4feb61754cf4771", "1b890ba623a527a744a17bc7e870c437fde432dc5194ff634931255f5aa976ac", "216242b689c293979b9c9ce4ebd4d057c592897cfc5a67f4e16a0189a5046518"), ("1bba7f64831bad5d392f0b99e9f2ff80f796e324adffef596e7c764c23e33b91", "142a2d271e858e3019d0fb99e7ddc1c2021e5ef30333f57e227f65b51b727c71", "2cad9bae0e2ca522e5bd13542fcac186e4ab2be95a7fa22717ef7554312fffde", "1ff7dfc08e8becd6fe458e975624972e7e106987f92cc92e1baed134094ccaa1"), ("2e23f5bcbd20066255e10eea6b45afbb0cd9a028cd8fddabf53e20c01aceb619", "1d6c7eccd2f974fe0f88a1ccb8d3d96e5ffb652c3e55a600cea80ecaf1470207", "00755a9aa3c1780ba997e0897ff9902420c62e51206fbb810899e4dae6e0ea96", "267c828c5e271e81c54d019253c1358f04372f7366c3b26e58cce33c9b55df1f"), ("143ec279793b8b46fd7207cbb3bdcdd408b6831a07adb8a1d59bd5016b925c2e", "2c66e3769eb6acd24271579c01da18a0fd512dcd1a90397fed3a67b1e45fcf78", "238964b34d3347980d5f08fba0730e3c3eb5f52749e6049f349ed9a0e0eed6f1", "1d2a049f4439a80939965d84dbe0aa4f452efffd88f51cf9616ed20f0488fad1"), ("0ae15fa616f32a3522ff2d5bcbbd47fb1772ee6034815550a567e7807ade8fdf", "24720693c73708e48582c558c878a77adb643b142be8bd10d32ae650eb7df199", "128f1cf08ab2e46d4459fbccf4d302a01427aa861b0d5ee03b6d0d0586a21f02", "1d300c4ab61ae35c5769528be7080f97360a2ec7e210be00ee7aebba46d025c9"), ("174489996ae6a7a7f378a612cff4084ff4ee89b660477962f916d9b8508d6bcf", "10606804e08db52a68b150d1fba24ed0302040a8edd1261eef0408061c145254", "0fdb085895fe322e8745b278a9f43afb27e1a0c01ea0a63ffa1f10d8fa148d3e", "180456b06db250e12c313d384fc0074f4eb4a2c80e33352e400dae16b6fb6d41"), ("2ab2bfa8c585a9b62a4636189d226d500b9dd803baafc20ed15314107714784b", "02af18093d7641bc3b75c0385744346758d0382537654570a6a6eeabce890458", "057dba44bb925655d0dfeb2032322f2cb6c0967636f64329f5e72bb7106075b8", "240e91aa403b2ab401d4791c8b34c3d9db42f7fbd80aace3f3282ccaa0ee5d1e"), ("2245d10e34a6cf733fa432a6e36255dddc899508bb7286ee13874dc50dbb2aaf", "2ad855526c421be348c7a42b909654d2fcecf8cf7271508b7966206c15844eeb", "180efb23fdc19313450edb595aa0940c1b21626ee84c25fda40348aad4cd67bf", "15cb696e452e38ee3319c5062e38abea67dffb2fb1480211d9bc2a0faa336b42"), ("0c587036c21e3b8b98d97189a03286096b3a337011f24a1dcad5b0993fb08e8e", "082d824eef22dbdf5bb19b0f03ef9872c3fcbbf5969874584ac47b3b5560c26e", "0d6f9dba2643eec1aa824fd9bc9144aad60b961050c4a1b531313aff00eee197", "04ad2bcdea123369ecc40768427e3f0cf7faeb3f38643c8ae26320508ee8e7ae"), ("1daa8c9fbfc4ca6704ad792283e4c9394688fa91b57b3bb0bc79e98b66f499a6", "05d422b4e25d580385ef3d5aebb69a867a0f939b58017babb640ac3adb61b481", "18a8dc109aec78d045b979e4c84c9fc514d512198b26ff44a63b09071414aa6b", "01b315111df3cdcad8a298d7bf54fe60661f562e6549a6f725cee333071b7b7a"), ("1825b2ff38fa927f531d543924f660db11e3c0ca1f32be9d50831a6e268c5dad", "2500d5524fbc8166ed04264613d98027a7135448f69e4241ae98cb0eeec28844", "1d1277cb5b1d91d5f4673f43bb34e170986108b3b8323435d336743756cf8b91", "1dab386124a708fd5db4c822505108c5d3262b899336f0db93f9e169642f4f9a"), ("2797e09461d6f99a86dcb240472ccbcebffdea64fc349d9f477e405712a0e6a1", "262a4bd7ffe986a4e39e1da7fba18a111a4aa2a5972308aea4695feff78f5275", "16e767594eb5d82e733c52e7e21050e8c62f0783f08881c432001f9c74d1b0e5", "0c6ab179531a50e7f74a4b1ed80bdbf67c0f59184f556ba66058c3ea6b1917ad"), ("1034098897d7e83922d46ec3ace321c8022bb568b6bc9f5d36c01ba058d36cec", "21008db298288ac6d6c5edeed3df945424e5f75b35430950b433498256eacbfe", "2af24fc2c9c4650735871a802671e07a813d98b00f28ce68f7dcad8c3d5e3c45", "0b3c852fd66814d044b569aa356fad7c204e65f1ae67a6418dd19be6349aec3d"), ("046b4d3a92e06aa3261fe0e45c10245402bc4f5f4c732ec9067d879b15c2abda", "208345547490047b16f71d3797bd7dafc3c3d432e5869760a2bfe4a9168f0be2", "2d9bd63d026b30b576d6718519d39de359998c70449201db865a91854850dfbd", "250dd7cc8b6f8b64a2b77cba12abd0d50c54a50caa2d0a977006ccec75bcd0ea"), ("25ca72a32a2a21fe479b671e3d438b225b845591cd1e906c25f5a081c3bde651", "1973f0b97bb4adec27e20588e7ad2147b3018f65846025afb4de78edc54c26f9", "0daf71cc81d6676269349c78b2efb6fec3643eb8aaaff485a7b9618be03caeda", "11dc2d93ae253ae20846a208f22e2948f4334ec8450a306f90ad16ecfb7e02e6"), ("0556f3fc345cdfe2378b5c676c7141e34e4b89a9091d9f2968e8759ce4647496", "07625d22dd2083b18cd8033d85d8f28d38198f05bfbfbc3da949b4996c0c9bc5", "262dafd345771e36f9687d35289869e43ed55ecfc477a86c1b9711fac833ddd2", "0e6456f759cfb95bd7df7413646da774bd57a3a91eadee79b234992edc3ed4fe"), ("07eb74d39657e51317f6ec8541f3f0651bb25799348abf41d36aa48bb85d3c42", "0ea05e4ddbb2b284dde177d7c338dc762540ca3b471ae83b01419e3c54dc0189", "15ad1dfd11861ddcb36ba11dcfd7503a7c7f106dd60e47e2c3da13ff47b0b869", "0399f9de1aeaa6f740a577b89e4f6212fad2678277cc95aad20242254bcbaff1"), ("0a5965162e714deb8669100f1fa535a7fe20c5e459744b85afac271b50dbbd33", "157048b64ac29fe414dcafa913af05ac0070838d9635cfbe71dc813b18e41ba4", "2d1a1adebe735dcdcdf63e078335b0e29eb48eada66002a6d446a80fc8068b70", "1b877523e967dc29e39f33afe27e19cdc89bc846e15431e0c9d7781e845573f0"), ("21baebc78be68acf8eeab49e70bc7bde85f9f169dea95db12659d3e67a079e5c", "22c0d032f8ba754aa83b892c93d3336f64bf6c765e3a8102d03d3dfa00a2d76c", "10e2ec8b85cbc30ea1ffb261d557a6721c740b056c23fdf72bb592f01c25eb50", "10396c3420e6ddec472ceec5679bb2bee96723d4c5fe77d81f51170ba589cbac"), ("1b3571e4c040ebeb37abe17d08b55877cc13fda6fb300172a23f7a3618c73c99", "1f3e495e75b29a06d6ae7c99c38eb2dec2b0b413ae9fff6619ed7355d74cdca8", "03d858f95b1db98c6d119473b2a1312e8b3d151c6a339d0553ff903daea85aac", "2ba330cccf8439e85be991b81545bcb2fe60c2c29f38ee61c6e96cf93d3ce3a4"), ("24e4e9cde6a663572ebc4f850b45b353f5a2435854bb7becdc90953eb562f204", "12636c69f0d0a3a3561938154fbb0639e102c86038d13a2c5c6df667e1490b3c", "1c3d2530fc8ea03cd04b108fd7e236bc461d0b9fe43e758fd13a2f4ba5e0bb42", "066fcd370c27634e0b284c8b48fcda1e85fb3fa3a94aff3a003bf6f6a6db2892"), ("030eecd4303cf2ea6d1b5acd9816d2a05699c7caca2f33bd240577a70a1e336e", "1d273ff66d641d9c155c329300cc386af8f9b14a21b7b1db64e6ac0636981fb1", "16cfcaaa95b405490b905de4414bb7d77d6a0c79818169ab20003fec5bde16a9", "2abb00ef1ad32bcf4fc8d72240912397e9229d92a0d4de62391a6382c70db8c2"), ("085fdc38a0eff4ed20f39a490df28ce7425b966320bd033ea049b857c210a7ef", "097c016236247e153326db5d175013e00ac929a543c7a509f48ddbec5a83413c", "0b567832b18dc125ef31aad927d5dd799c0a5909dc06578a6227517b2fb9fe43", "224bc63c39ab01d03082243aa000ee669a8817aa1790738661c81ce8e8ffa846"), ("0484b107960595cf6614395f0c6ba3695f5e90bdbc395154da6d2140af4005d0", "236d570ceae83f2acbb375c0ce6c8c829e40d04a0e8cb59511cecbdc4ba2e7ee", "00adcf52bd0136a8a2f3d43d64c99ccad3302054854a5528cbb0e045387cf41c", "1f0e1f054c7a502fc800eb8c3ce09bee948e83eec8081b8d26f1462079800b2c"), ("1ecb0f66514c2032dbaf9d313318911f28c8bce696bd4792ce5e54cd81e8c4ef", "228396f6aea205f99e20779b7d62dc1f87aa8d9142524ff76984f4b6d5228726", "2c6c3aa1c919e12604d73a011972fc3eb7a3f5efcb26e67644088c1ec84d31f7", "0d0ca8374b8b2170fb7aa4e561e1ffec852ba72cc63c5ddff8c659e8936e4965"), ("1d8e4564b8aa358db090772b9f719f4cca5f8ababb80d1e60c07969f314ba2af", "216f947dd6ae49438132430801fa8934ea2d8f1c031bc7c30352bdc99e77661f", "21f7711c95fbc1a36827598370c2e15e5425e645d98bf325f8d5281b46de97dd", "0868d17ff4b6f40ee4f0d4b8d21b279b09ab1d9b60ce798fa82e949a83f38c7a"), ("0b42bc4aa352455cef9fffdc9a63c7aa92d3262350ed5dd549718f574e6499f1", "1883f244d312705aa1a40beb8b49cab4bf15e34966975ff9bbdf601760844a17", "1951e24c766be937865885933692dd6cba773dffd5f7594b3c3a66ea903860ed", "1ac76cb86e64a5406326e4b720922e72bd671e46e622a5451290b40d5d9410ec"), ("060083b23f38eba73bd684061ddf710b78b61801c2a8aa8601900bc8bdb081be", "285bfb289ba4e050f0bd231606280a812af0756eb3ca86f89770fadd14f16f0d", "1862d702e91fc0595d8601a6b1c47e8123982b5f9871f5899b048404a8c40e8e", "0077894b36e02fcfcedfe8b9c06524c249a81e750273fba42f20c7283bad15ed"), ("086f37f273774c1fb0df348fe63d297e2b5100d857cda5fcbefac6b1b4389430", "2f0cfed164839005c7ce28f1fcaa84188332b909503b174425ff78308dd3a8ee", "0c48ddcc9dcc9d6d9982cd15d7fadaa4538666f41cda8db8f824bd0838738847", "03788ea219dcb29d2c909cd4bd742f1473f9b13e1aa09763bc03164d1ed73a2d"), ("1801594521fa5155b2e914877cccf901f4c57f0ab28c32808a2d948cf6ad5c1a", "19135de8192035e23c9043e9ce7d786bc1781f7d8aea7d6bea5554f636bd2547", "1c90980d570642a7e32c96b16712d4fc6a524470a4a46272729b83af8784b918", "2294e3f1d0010e0e2dfe7436910c3e18cb4b360660202d8cc04c8b97f88e48fe"), ("0498ccbe8fe2f770fd342a1af36767a0539223c2f6b97a226c85f1d3319d280f", "291c4ddcaec9b273f7698bdee242adc96a77702574bfebed580cfd79dc35d092", "03ca3bc572dd426e7ec937d6cf46654de3fa2dfaee46e4c6433a53e936bcfd84", "1eda3f88c9b4201a85a9e3889f7d468673b729ab24894bfe593de071136357d0"), ("0fd6780b2e2942234ab40aa75a9c1a9a1439ea7ce4aa09c6a504b99cc78fe2d2", "22644cb4240322be3a018cd5d2cc1ecf583c69e316211c87bba26bc799345fe7", "1915d4f177e16138d6ab7a361912746795d357151429c9cafff710995b410e34", "1068ab2ccccdd9b30363c269b9830513ec8c698510fd23adfca3714bb4dbf783"), ("1365b751c99bfbb5a560a700638382f3240561dbeb54ad13605e6bd1181b965a", "23eabe257ab2c117731180d548b78b8c66061fb576f8f896155746f9cd0a233a", "1ab3896ab1fa86eadbac59b8220a94fca2ef34f6724d14e945647b80839ff930", "167ac453c9acfa6c7a7243991c8d3fc4dbaf801679ffe68c7291ef92e948c871"), ("0d8313a248082b91953978554400a106ae6694cf5a98d644d5033da79658cadf", "178b9e697c9258568656ea1b9ce6a01c72780b4bbdacf770418b1112d0c31c50", "21d91ec7952848daea62445b5542f380190ba8ae3bdc8312cd49efd6c8127c93", "040cb601a29ad3a9a2f028057300612aa905158093fb52ad261cd42176059aec"), ("00d7eae2aaef07cf35c453f1a237b105277a3c6293b6b8669cbdc77943734d5f", "07f50ed41f0ec3984d7b87a5d78022c044ed086a3bd4f405086e40d7e8573477", "2ffc5207099802e9764fc5e6fd968b1914c122304c27a9cd960fe5938ea229b2", "261d39765e8402b8df08f7272dac434300ebcb24b48bf7f9ff6284791fe8e34f"), ("06a81c41e2479ad7bdc224fdd332dae3da1b79c4c353783bae4e3ff8461cd347", "0168d505d329998017e1205f0cd5b4cd669cdc00e7eeef1bb1455dd1a96b7606", "09e297d429310c4ec9fde7ff990762e943c836b2bfa03867c2e78bad6445984c", "15afbb44d0ca3a4e0a7b39c9d3c21cbf03e9af06ee6ebf331de5b02c2d889815"), ("142762739f034ec05206e86e7982b500f275df1b0ddc55bfac21755b41ac4d23", "29a7ddbb73b9e6615dd0092f6b697bded466e347ba557319de396d96d1a514ba", "00a9edcb0cff9ddf0344269364d0cde36ffc16f622a2b3ce3a6413d2fe9cbe7b", "1d252e1092a60abce20ea83a967dde2bf290c2ca66687c313e688e112928a5a0"), ("016d15bf1c57718d0c8da12f742bfdeaa1590a8f329533b8b6eb9060fd3a7396", "283f317e67dd99c53109f5cf33157d8ae3b0a1c8fd0402937f846cfe085613a5", "1a5462652d2c2293b6b50d4d5b317a6362d0eb0a8a09e75434b80f85e92c057b", "2703a8636606ce1ed1d36a5bedb060709354d69f4f32f80b8dea5e74ad0d155e"), ("0b0f036460f4b8bb7f5756d368d30f6c7a21e907843ec83adbc5d0b8b45b298a", "006c839b3023530680305c4d40348b91917dc6330b0978728dd4aec626e092e0", "0bf22f3dc2c30d7cd879467e0f8f743a9d57a303f33531ca89cd2fbd8ecc31f9", "1ebecb882e7640daefd1008a5b263221e38c6f218a4acfaf3ae7f451321e4bb4"), ("245ddc40757db7a64d559779d6d7e656489fef5957b3cab608ee6463923ebf5b", "17a19c8db18d4152e47f483350713285a25e3f283c3e7a853d390a079b707f3c", "2345e88ecfd094a69c325c2fa030c6905458f731e1d4a13e16c7563df9736118", "1cd698c07958abde7346d252b561a7b921c89069251344aa7629317cb96b0e42"), ("0fcfa5a8ad50db7b9d9ecc81c6018f8392bf6efda11f6b45eea181906aebb676", "1bf6275ae5c8f179d9af06aa71758957a70f2747149b50cb6cd4f67dfa1b1aef", "27b5abd0d65ec6d216d5aae14192eb78f2e2b3e92f5075fbc53fc97e8fa23252", "1953430dbd0faa8b88c2cfd81426f7f6974efc5d62b3217b054968c9d5427052"), ("264432525ebc02e1dea083d5b314812e57fe50b548d49f0cba93ae0afd088281", "2bcff05612d4bd761b0deedf643c1a69096ace67caf597c8ce38c5f7682e7c73", "1258ac535c6bbeffd8aee6ba5ee09373b2b32060bc97dde14ce074639fd984a0", "284de1d25a1558ce60cfd5be9ecab514edba770283313b0ba0a98fa5e581e530"), ("03e8f26ab3bf15781543ff9f3d3fdac866b528ef77c50929579570c498221216", "0772e7997275c15487d5133337df1c8cb6482d22ed9f586a25a679b8656c50f8", "18a6b0dd2af882d68ba081f40fa602143eb4075172b7dbf1eaade9b87a047ef9", "13e9895946712813cdc0f4ada6db0ccc639f55464d1b6c301cf1c3da2b4ba818"), ("1f01900fa7beb25e0687f012b5f144fb418c5b53ae0bd7fcf643ad86d16dfd38", "2ec315ef447300358bbf5e3ba6ab57ee25f37c20d81ed38cc80e63ddf508bc37", "1da0d3707ddcfcd42541c6a2c5048a825854ca73d54ec0505115e8e005815630", "1ec88986a0685e02216e0d6381f359d60062806ded31f9159daa9227616a53db"), ("2a900a245f056d2f5d709460e0d9a734855e419eb4f3241e6651afdfdf5a9fe3", "2f6ab8768c45c723be92d7ed8717ccae6f961f123ab70f928aaf7fb4f71d54a4", "176a785f3c65305eb7c7b0a179d4c9884eddfd55e337f6f8403b0dd572ba0252", "12f8e9bb92305d824a5cda89c272012de7de6ee51cf29aaedb74bd407dab74bf"), ("2ec94be74f8f05d9f79ec0f4baa4ecede0ac93fafc918cfe407ca83e1a569a83", "2fd9d350de05491ce3a7900a2424e96165436c97d53e7c3c5a72b47fbd91f450", "1e2c28b4a0097c2fedde24c43972d365a894a4b9f0b34ef043d9f24314b1e375", "115334a51daed9cb254117a54625c15e93a90d68c50771015b8ca5a7b45081dd"), ("13f5511ad9f46cc30eb085ce1b810f51bc941d99bb7dda1781663185ea0bab05", "2408ec10bdc5672b3ae4f1bd0ef703ea8a43c58e305a612bcda89c96d8e2a649", "0158e55e3bd07be27650ee24c414578a5100a4bcff1c26ba58c187eabad2bbb6", "1a97e800da814b6ccfb15cefdd774da7706ba5f1546ad9dbdcae41f7faa9b376"), ("2b1e4e0a1a5e769008494f52b7e6bc8af72259fb4336cc9b989043a35a27938b", "0a1ecc9e9fd73efc8e0543a7f014ab825b0207f8c149058e351fdb2a269bb68e", "2c24f8147d48a4910d21df4c1243f10ba125b4bebc33d9771812c7b839048e14", "1f1fdc0576f415b4b8b6922bf2248d64560e8468a22178d8a883b8f6d74dd833"), ("25e0ede04a3d8562399f5d4eed0066d003ceec9546f4c942fd6bd5caf5c26d77", "011dfcaf7e9f19db87b51291dc693e0bf6fb9a775e563de142b8c7bba1dc0fe7", "0284c1d02cdc274c5dd7f0ade6aca25ad404628a03ea2c2c38278e16c3aa3d31", "25e8b309abf47bc8871d183589e5f6c3fd510ae7816b241ba2f6ca736a62bd1a"), ("2f0577b0d39a4aa4c8c8b014ec3b20c149784e9d5a98b47318a489b802c052a2", "01a47ffaa448d0f94dcc79f4b977961e8f3ebbf5a40ddfc87410862ccbcefacd", "0243e354cabd0dd03a51f48513da395424db36861efc13ba23df428dd034e4cd", "2e05d4a55b5e93cbcff8611fc9485f91337ba9745750f8152769b334c5000ed4"), ("169c26559274cc02f17fc9a38d680540d153269b8883e0e9959a57dfbeab2dc6", "061dbf4d19706fc7462b4e5f820c254e0d70ca587ac9526e36b8003790f6f546", "0705d94c699d406e31fbab066d5e1693424af8be50fa1f3eef4dd86a11229f2f", "19bd04fceac3a944afc65f7477c954c042cf5a48807a81b4ee781e085fc67070"), ("14dfb9a4e315bb3428799d15410d0ba3efa5024ea14917a521063b64d1203241", "26827f21d86cc321c7251f7986ddc9008025e4bf639a8921e4f9c339a42cebd3", "08e5f9b4daf66b74ee6f388138fd273862dfe5c89eb64726d8cf9e94b35f42ee", "116d66b09d1705dc0b92d4e91d6234315552b3967bbe2a4c37e595e3917c120e"), ("2829ab6f86057afd135287d2f54ad091a20399d980eb7b0c24fe2b0acf6bd3ef", "1ffabcb74f5304f389693744390af34a141cafe67c5dc7f2c048f882ecae11a1", "03d019be016248db97b5c5880c2afb44e9c810ca475ae6a5596b2772b3b9c471", "21a21e7f081efaec25ad81ca0cb778352de77ce525bcfd67da0c62456f3ad895"), ("2590de8a61b034318b35aa5d68438f8fb5cc8b5e8067935f658bbf7e32e819db", "2c7aa800bd508c145d3f1770d4e9876d79016e4f9a97be011b2363008579f5b1", "121be27bb57a4aecad0ef3d3053bb2abc62822fb61e43a871dccdd0abcd29ea3", "0c991a319ce88a65bf651e2198c7fb4b502ca8cb9bae5aa5fa2f210b7a09131f"), ("1786e7a633d599b6b5f7fe44494f099720cc8ed540b01a5c017b1d3de8b04f4e", "0d33927097fe56db1d681404cf6b1f9ed768d3205d70ac266a63bffa3a6a56f2", "14d8c3a585272fe1fb829f2553b10f9e132838ad52d0744278facb1e27574f19", "0c8098bc9373cc60b5213646d8a9235de14496bd7b823965eec59fb897096040"), ("25f0dc21d0e27c13a3aa1317a8757ad6d0669c3bf46545963596f8848bf49b2e", "1a39f5c29897fe5d755824edfb4d50e70a48b553f9b145799283989d03469678", "2d2dfe44f9239ee44cfe819817c1cf6307b73037b8d239edf5d98c38e16dddcf", "17eda5dfe6b8a5bc94cad364c2611e6204b7f071f59e4da6ca0be5ed06a83c66"), ("022ac262f0350635b3a7e5bdad429af26ae03edd5d1880019e141e9b9b48b060", "01c742593527ec715459ee00fe26b38ac21393771800eabbc8317b9f3f7ff683", "2746afb15f686916e2f7ac314aec38f58a4a60ccab4aa201c27ca30261bedd8e", "02c1dcb0812afe39fde9d77198731446070ce4c8515ceeb7b829c8a55a2a8042"), ("11e23e802035387428ed94a16a3879da87164b5e13cb6de0cf9a30c295daa930", "0d0e723c13594c1bca0765ddee7c1a9065a2142e199543913d969d2736434ee7", "116a6f2a067266bc8589c6a262a34cb4c4c22cc6d1f7cef92d3c35f50ccfe8f3", "01e46e20a5dfa569b8039e1e23f71ab4afb9f14b08d1999cc28f3d695239822e"), ("00be373fde67754a6d12f231721afe9f3dde4877fb77168e70f701ac2d24148e", "2d8b755b15567306e158e40af831183a72ffeeeefae5c6ffcf8b801bb24c2130", "123b6a547f90987bc76fa769cdb7a6ad9445686825dbc3d970d72839e1d332b3", "108f5e2aaf0bfa7548656ae2d4d758d4c61c5956fc8255abe8c878d123f29ac2"), ("1568e9e1bcf010a4511db0dde24c59cfcdaca8884f126ee065534ef6a2249ad2", "1b4915fc9ff8e6ef3d0a48639a84e417d3ba35047db2fd432aa7a86b7127ab59", "304c230f051f3e0559b2ff6563402cf57245442c7274fa0ea124a4aed82eb587", "02fcecb8314bf6060ba75edc58932f5dbb8d5433739c02aa486526a6e6620cbf"), ("191a5368bcc5d69f3c79ccfdc3f963e59692ffc4fcf8967d163017c54f77cbf2", "1666ea27593e620abf60e0c2409ee35d31de7fe1288d7117610e1c195fe67fea", "2bee597330d818e329dde1ec752e1c9bed8bb9bdf365b4619f9cfa074b14faaa", "067e428d8ed38ba2f6e1d0b8df596924e2195efa366565bf9095856236dba85b"), ("1b870cf72a542917811033c4e17c02f5985c90207f910c9c9f14585946f94205", "2ed0ced98e74ab0e29bbb11e4faa0145a00fd836f91f67adabe3a87dabc72bb4", "01583fd1e62d46bae50ca9353e281b0c206701027d72a8b39920dfed1c60a676", "06947b104a7e01001d56d0a3dd72fc92e8dfff726d32564c45107754b9401db4"), ("1d857952c9c8575f4a52afcd05f80fbc5baa51ca3837b5c0b78eb08007b685c9", "1bc2801c7473bc58f16fe526cdf4eb2c77f0e84f8abf707f010e9edbde6e4ce5", "0f6b9d53a94ff0bff8acd8b1956de3c3a4535bcc0e1e442c2d47722a9a7381ee", "0a72b564fae23bd85b9f184b0419b353bc4564cec886ba25a57a37bec86a3b8f"), ("000ea85341f4e916c81ba7b4d2cf43a9fc05f0df131030fbcd4b47a441e8fc1c", "130f9f4641d819bc29d7afa68c1192157503a67138c63d0ea82ffaa5921dd4bc", "1cf7f179ddd9bf5eff950a30a393e794c6babbf0adea047d66b8550100430eeb", "1757145b13b33584aa883db9101a50fdcfbf65b9bb265bb9a5193237da2118d9"), ("010d658b1b4f6c616c92795c2c0ae74f4ff2822b22e0a289272699cfcfb86efd", "278886405e1bfbfde033a02f6842cc7bc78181559d34e096c9da49ef1e914539", "240aa9cc914e07b178bddf33d2137a7235d216f8cfcdeae22f7e43cbec9265f6", "09edea3fdcdcf2c7bff5579ae74381816212ab9c267fedef230bc7a03457ef71"), ("1e00084ab3fc8cb00112429bfad06e999d49de64e45567b0d64752aa64573d39", "25ec2b6dfebae142c61e1761852fc47d99ed0f1bdbe3f7ef0a2d195d6fe7f462", "2f3cb1a7558dc10718daa7c9876abe31415cd7099e32f851b0848c8614a657f3", "15e2bc3d65e4ef678786be307f1ef17b226c341ae58b99d44a2b5fa28c4b9260"), ("2c358513159ec245cda01562ff284d44fbe69ad39ec08dc6106ae65ce7b0d60c", "021da0c1ff464c7e802b50b15fec4959a4e90e74b8b5fd8282050bae408b8d65", "0ffb1307a014fec25ab1fcb1ba7bb2fafc0aa5506beac1ecef22cbe194dc9b59", "22c2a7a3596080ddb2761d818181289d1fdd19f0da0111632e3afd9c4573f641"), ("2ab25268448d9d5d23be4706d763323e9bcee899c9bc492c1f88b405fbfdf97f", "26e8b4b37214390ea9f9d190f4f5f8b2518826076c2a1f0ecea57007e8e88bdf", "24897570ec65b69bc3cb7333b37f027b4a26a7e2e9e4a7fac4a73c3206cc23df", "15607cbf985cc6ae7d130320d11c63a975efa0e7ef264b04219c3abb32a74c57"), ("01ecbd7e16c975c0df62e8941b8ee0063718b4bf4773ff4ad64a38aaa665fd6e", "0492e53a3ce9d9fb5b7739ad2c4ec0fc0413d6e102e5dfa69b3a240750820205", "17abbc08e9776f6c07c21289e123a0117efdc4b2859bbb39a985747a4dd76aef", "2a6145ad7d187bfb9878d501df36cbc7214ddf1519d2a262171e25ddbe34a7a4"), ("216ce255c032b86659a3d5c54fce29eff4bb148e3df1492be9a79838f00a254b", "16e0f74e772250b96d308da07c4d2d83674b4a71e9eaae8f9470c161c6525db8", "2f2aa62f52e141bb22a4567d14c8c07890f65c1f79a0ea724d448c5a9219628c", "28f18c572e07c22f4603718ca8f4f54905f97782cbeb21172928b875324b5fd0"), ("244c40547fa2ba1ee25ab9f131563a0586337f0316d364884a70eeeb326f49fd", "2ede3deb493c3778bbdf192236591a269f1c0f8917d22d8caef1e651aa363396", "12e87d64863b604cf107ddbf0123ac3ec88def74035defa8a334d36f8d204f41", "1bdbd6bad0abacc84acf38f6d1bbce126013b7484b03ca51814fe0e122b0ae71"), ("16cad61bc86ff811205288df7b53f0cd0bd02f2f0188eea2911a7e23c2ec7159", "085cd3f683137a3781a31f99857647446071bd4d2f525e16e1df1310b638cd7f", "2299d71fb22ef55184e153ac388aec89e825852ea606454dae34271ec11fdc82", "09b4954b2f41da480db4c7ce4fa1b259f3ee8feb5fe88898fdf639a8c07365bb"), ("245d36ea1adea2c6e322b2ceca1d5fe675bcfb6fad11d782ab3172129a0936fe", "2119e18dc0ef616cfa707a395196808e36a1042e4d1f8ef8d2be63b925dc1ec1", "0364b27d7d03878771cb49175a4068be6c12b9645065bd1d5d698f814f306dc4", "2d4c31c392a06bfa596620b8ff0fdcf428c6dfb0d1c14aa13196761ac4766781"), ("11dbf5f4a7204e3c3e27ea368dc908d8e7565b3a631086af139ab1d5975fd332", "2c966a1d7ebe8a3961a81d695482ad505b4ab77417796933dd32679f8e405749", "094d3c133b54088d8e05993067717d6133191308bca285ff68d7af42d0919bdc", "2c2d497ca44ffcbe6bde6eeec7933e7c5dc9b0c9bd6b14aab33bd896db8166c5"), ("18905476f1936c7719c8e4415ac8b7dcb7b04e167cee793d1e1a1b6ed4efbb3a", "245ccb7710a2f2818381c32b0f7360a5b8f0a39a111d611ec3392d991094901f", "0c8f7f62df17aeada5dd2915c14385c6dfc78b971a3c83f0392806cc19631504", "117132abf7493a25e00b10d65dedb52f1d2d988be4a74bfb26f98a219ea8e0b0"), ("1b8298e90c271c5cd0db934f504fc18f4dc77a76b0e950fcf0685ac7f9fc35ca", "1f5348fd46ab109a03b9e8309fa6996d2256f5b97982af7e2d1d2504c3287dbb", "086d7157f0a2b056a2a1aee48f9eb12eb2b6ed5794306835481db711b3cf3917", "06f21f80567ab658e9e3097b3cebc53e5fb44647f81f707c6f7bd5f8880e6c85"), ("19651aadce2cd6928d1d0fcd580f4e243ca0f5f2427bf4a4cd603e0010f592c1", "05f9732d41cbe17c13c9731df9f8729f79bcb656a560da30b09ccbc82d7eb226", "27f49b10ea1dbc6648f92f458876c757f2f6cb8229b4f55f738f0f24a2341a74", "27f94b03e813b12a2841ef453504baf6badf010f177e9aa1f43071e58de3e4c0"), ("2aeda8638b3061a651d9c05245216944ff158e5bc5a82347cd150da73e4839ee", "2ff5391d392952d6a2539b5855bbc48d88f5ba9e5a5a06442a1cfadce51b1b00", "077830065ad5925c64cd2ff5112738de1e78c0ebd239bf79948070d27ee22960", "0546b06443315358dbfa7016bedf33dffe537ca5e8d46650008c65544d60d8c3"), ("095fcfae821100b25ef0a65b0d6b3aea07fa09ec23d05e3bf3a9e7381e40a20e", "00b630cb049a06216908f724dd4620b83f61e56aa011236ba277c0e5a1d464b8", "023d623460717e15b4048274554e348117e042f276d3499824e91f9d4e46b978", "16d42894083ff298934e95a1e0d7a9d211fc2569223b7fe72acdec2a4eff8394"), ("082e0c6dfeb2b5aa42af3f3956eb8a8a5b4b5ccac5d90291bf86fca90e5935fa", "2ce7230723f9f8b9563523010acf581d7be044ddb879ed09169ee5214d0b6da5", "12ffb6ac6036e4bcb0b93a2bded93ccb610ed90e8b5717c703b035b2db8f0a7a", "0ab65404588fcdd6e7ca12ab7d28a131dd2fd4043d75b9111e098dcd614db89b"), ("1ff05206757a92e9c618bf55c20d28a260e18f57358317c4cc3f9565ee6038e6", "1e7a2aa756b21e84700b46bc2c5c32a76f1358af2478f73b888f00a76a90dbb3", "111e5a8da37bc3bc3b0d213480f1f8b4d3af02033fa3e58a58bb8d6d546a3981", "163ae41a3f544b64f0f120bcad28cd6b4475334ea25ea4908e0c36488a3fb399"), ("1108715efff100cbdf63070d5d8423dcf04fe366ffdfdb70fb5a3bdb67b1bb17", "13d750ffc6eae2fd3dc0f4c522f874442f08d45a8b37bc328aeef0ff67a74e1a", "07a4636bf7f12bb22f93f61a4bf699e7a7ad29bbead0d6aaea4fa3fe2337c51d", "0c7d95eba09320a2e9d0871f7298b795325c212da43a175aa76d7b7e77b29146"), ("1c318de26c8ce87396d43c98f9bbe9c09aeb172a7baf014f7051c46ace2fef32", "1fb555bb7f861d27652c5eea6e61a2102483147885211ebbab628ba380daee93", "1d23d117e515073637cdf5cbefe0fffc737ef4f473b8eba71775a579a8ce946d", "14b098495072e5a916a3aafcdda8b665f0644489102c5f7042a1f74a5b3f5e99"), ("2c7cc6b3b91e295a68296a7ed910bc16d41402576b1589e27594bcc1db105a6e", "04a2d75a26074aa295f416422e35e6aa58efdf8d89e67893f93b9bfb9174e2b9", "2d703b598aa19bedd9cf1b1ec0977ef9da895d0dcd1a7087aa89306eb25fc2ad", "2318bd205aa248c52099f0d885f5c965ed758da45f75471e74146181b38297b7"), ("232e81ceffc8a2c79aaeaebe6a5b521f20543def45422db24263b5e2cfed65dd", "17f0e6a37b764795290105dafcccc780124c2289a11542b9833fc6ab7dd40b18", "14b0f045db50a8fdeff7288f67ebe3b4c83d0421955659f0ed78e7acc07a434e", "2311bdb14b42fb556404315debb7b80c80a4b4e65ba0c7d3110a9afb199e680c"), ("25d40b1c6189697e937ea242f96c15c6dca7dcf96a959f09acb77fa3cde23252", "136b5ea661774cf26a49abac6aad9275918c46b82d4ce5d10fd7cfb0758ded83", "2b1d0e07f48fef3d066cc358807095f4132f4ff762c8e62161cbf42afb98e0d7", "1d4f5d143bb6d98b4cf2c2b2d30c00013d07d97a170959b88ad1c3ad5ab137ea"), ("08a3af308f7eb3db48f4a55890c087d8a70a5a4b5b56cf3b6e720fc214b37da9", "2d0daaf6458ddfe9a56ea86badf32a298295af19bc72c6130a340b8d6778dce5", "147aac3d1d6739c1a751d7d0dabdb12ec53352099b0d257900e1f8459ed2b1e5", "0cfe2a0bbceb8f2b97eb2c929fe0a28801578df0bb9d5e248c6749695d6a505d"), ("27235e9cbf434915d1ade0725772b01db4f2dc76e91100c28650f308ebc2765c", "1ac1bbb3e7dfa54ca63530edf14675bfcbf33a2178899abdd5fc6da18ee19b30", "13b5ad667ce7b3e580d9d0c108af6d1700443ef35f64839ab5474c5c45f03ef6", "0cf7f020021137339370bfc16fdd3233c39d893ba1f2406e72c13b524afb91a5"), ("19bdc7793a16de189da2febf8ebf85b13bed59cbc27c3ac8c0b75268bada1408", "0cfd7a1a883700697c15ce0957ae4e4af94629a787e5868523c587e7a3d1a1f7", "272161dffc1f5e4bf1b1d68cd0563b2d9bd35d56bce6e665e810a14286ec650c", "2f4bc9e0896ced97bfbf6f07f6e4843de1e502888561516ee80345b50c610b65"), ("01fe2ad70c00566c4e723a6ddf0ba087aebeddf33b2eecf3568ee23f9e58c531", "1dd199346f995c266253010ad3eef9b5f02f1acb0515a92e310936bb7efa2d5c", "1f4a7996ae9a443fbc4d30e4be4280c462ac619425a704b8eafe29465c197314", "1e4c9eff8ec514ef3521b2f85c3f45de170747979f5268817028f2db0092c8b0"), ("076ba829c40b9c1f2fa7ed966bb552de5da9969834d608eccbd18d0e89dd59af", "12faa0eb884e0752ba7881203d8b2738583333694ec1c7517274d334f836a850", "2400c09c7425982f393884c63599ece6a6a9b491daa290315b7c30eea33674bc", "079d3c1310bba45d7e904049e6cbd40d2da3d987840803a0e375040dacf0f4a4"), ("2f4388ae3188084131f826391f2055c0b991fce571e584170328fa5bc9bdd701", "190fc5c50e7def89e23b0857fe35260e686c9d7c90a3d63c04bf197af0995f67", "0289836f4bf9bf57795b8a5bb0d383570c71949a5899fef5295318ac55c7a8cf", "2e2e2d6a6b9855c0b7e4449198f8d6cbdb58c2df5e955cc8f21adcf246c511c2"), ("203fcf77b765e5cef43dd45385a4177f928998f341a9df84ce98d89fc12c20da", "2c687300aaecfcc5b00bfcf71a602e73c6441a5350717318ff84db78b3969b9f", "0920919e05ceb42c83a6c7d8473e73273f771f56f4d6cfa08269747f2094e630", "19ae59e70062c750cb0a95260673e38ed8a123aa0e775f9d357b8f0193db91ec"), ("2ff5ec11cd9fa5a18620fcec695bf15269b754659eedeb47e2bc43f5a8d54b6a", "0abf5cf5c4298f2bf107fb03059bf1c2e871153a928cdfc4693f89dd34f17bb2", "2e43de1e3a806d880db3f9b82120b3218515665b2bde19191addee655035ee1a", "284f2e46702708679d44e0293b1da89ee5ccd66a4d54cece021d66e7012ff30a"), ("0f652e777b11ce6b6e4c0714331d956df7006dbf3d87b490d02b3945624ac9b2", "0a22d00cd6f86a57148c9bb9f1e77a6fffe8557c7024d2da282f392c3ebd05d0", "14562b8a3a1a303603d756e7e00b10dbe7d048dce1d2fafda03d6696c73b2264", "230303b1d62d0dde3ecdc0994b5e1e8034a59b9dd93086266e719f6922f6c499"), ("1daf0ce401962ed0c856a1b5926befab47404127942e9913931e3267ed506590", "2e4e703465010a37d0326ec2a47ee611fb40d1d60af9d8865600441ab3e34dfc", "1a4eb731155fad2fa5d4d7ee0fdff268fa7a8f5fefc516cd1b3bed2d05d2ca1c", "0f49e510b97adb75c4a41a45050501a61abc1f0e3fc1ec633479743ddbcbde12"), ("2002c4468ad4c9bf8d1891e3ca2b145d97892e797ee2ac10a3eb3212642500f1", "067fa5f1a4a9d3790d115138892188479296187721dac06865aa02ff1de60c34", "13fae97880d7aeece1adcc1f922afe19875df75d3dbafbcbd3f9c03bd2e96542", "00402dc2f34697488ad66e7f29e4cc021111c3a04dfc8a5efa1a67e1dbfb7044"), ("0bcbc45c2294618c92f469e5968cf38b29dbc0f38c93ed07c1235337e0ffaa3d", "2f95fa14e0d6df338becee50296cdb20d3934dfc8b5ef7d11215abcecc62f283", "278d526d481f0fde47d573e71ee06fcf2eb31b481649e64fc59a6e81b5a6f3ca", "014ba787d711f14b09fcc9bed9cae5293a1833d16e6ebcd982a4fbe3caf39ed0"), ("1533ec668bb7d7c7f88d76be6a0fba150ebf36e8ae38551c33bef73f29674c61", "053d8a7ddc1ec741f810f725fd0abb16614cf7d96ff2cf6ae716ec3347a71ca2", "2dc8cdc11cf4d4912a029c490e9c8cf6e6ddd0c4a97d3c3e62d967e0ab0d095f", "161f6f60b0290d3244becabfbfb0547b25c7ae9bfb1fac865321f78685da56c8"), ("12fa37d4b478faa81cc865d414d53dba02b041a5abfee5941566b37334c84988", "1bab76b9b42a6b06b5ac730c4f650a4144cec7180b2676e5ef14f60f2cfad4ec", "2b60b80eb9709091d8752f830f92bf7ed5f9d0cbd6293dec2f8b1fd127a629c4", "0f9534dcc4ce2ac4231ae8797a60817161fc7514aadb8bf867fbbd0b8ea2526d"), ("009f59a3c298af23c9a93828e82b3871877b5aa67059bea7e908aa29b029564a", "157e4da20f0735cd70a40058840709605820c1c5f26b7f840142dae062b42c5c", "03db197ad512a8bd8e911b16b79ba00c6b35ff5a4183b97e6acc0bbaa167231c", "13e1b80c0e864703e35031a4abb5b149d0630e3c7f53ca439a0aa37e70c38622"), ("0eea3a8c6db8c800cfe5619e2d46bce90c664a28bc6e0ff5305ab3575d2e3556", "1b6e2f571984bcb11809105104b1704cd59997be58c8356300bbfe2a200ccd44", "129b724fd771596eaddd58ccaafab488b75279fec6cc9478ee079ab741229b21", "0a19cd237225f2230f447eb77bc94cc0b788b95150bc4a8e3091c3c5e8ab6604"), ("1650bd14a6317cde339c644935af94454cb82adf9d2b23c81470fae57f3ca5ca", "01a2e9a0cd5fe82ef8a9fe40b72b359d3eb64881a9d2d77d685e183f980024b2", "07348e9d9fbe1c14df8a573e261ee6dea8cedcd6df2a49e606d607bf3ed957fc", "26f631ae6a865865b1c67b69026163cc90776b411d816018da3cb6d1cb5022d3"), ("2641c087fc721e3de8bf5995a1826f47e425a8d560452aa93e170a807eec5f52", "1d491ecbc40163e0f15711fc894d860313135ae9b84c8910bd951662b832306f", "01c87ad9e6ddaa827edd7ba83d26a7dd5a6048fe65d4665084da1efe9d1db60d", "03fbb632868f7cc6e063a2cdbae0c56f11ac9369e6694e1d13cd3baebc2f1b52"), ("255f95880b0181875d3ec84fc66343f51f09a7a496faf86fbae154636cf8fc15", "02ae8640a123d2b5eaaa03089980fdbe4746f657aa0b858acaca90e744062047", "14537eac62934347229f11597e4a0573b6da35d7921880b4a810856186dbeb8d", "161c45b9b2714e463ab3eca4cd59ed995b2920fc6e97f8d59070ab1b9c27fb1b"), ("2b85428ede2c58875300b1d86403c25c8e2313a2c2418896c118c0b30515e82d", "30104511a957273d421687d468be20d98fa57d95d06e1406c5240f484636e85f", "27959bc3add9b63458814833fab2b60751063c13bd319478a93b52ffff4d9c90", "2f18d3bff455fdfe07c4e1f74a76803e39640a4cdea6524778d3efbbc0ac2a80"), ("2e28f88f943b297b892032a404c314b18e9c7e5e654faf1fadc8a61ae70e12bc", "11216231caa54213605678a4c274d6903286b47edfa53df788ce8c4306e9ffbc", "0fb132bd8a3e913f98376dcb551591880573d73d422a962c1ae01361ca30167e", "04b2ea5a2089ac32f7138ab3cad455dcf82a74d89d8b4042712c146de82a0e05"), ("0df265c46262c1d5dc85a48c5376d8d8c1459dd97896457ff0b5709f477cd99e", "214e0ec66c12d5647547ccf97223830d97d38d30d35c017213fd676b57af4808", "23134196d63d76b2c4f0e0998f05a9fb1edf4711e054d15c2d65193d34ae2d3b", "262c9738df2069d81bf63bbde85daeb87d0fcc3ff27e81cc1aa93a0458d664ce"), ("1eba84a41edd97dbc8361bb7061c3b9eb507ceffdc88a2152f066dec07b3289d", "211c69315511b4ad7928555b50d950fb6fe2d62c0768625a19df7c873700b239", "2ce1ab97f400d6509c1e7309eee7a57b54bf1d066e8cc3cc464929e2661eb9c5", "1b8705f0f18b77fd5bccdac3e84ecce6cf925d3134c518581af68929acefc691"), ("088bb0a5afa8cfcaa7667564af80d86d6ee7ede500903d7c3b42b94c5d5e5339", "1404de81c4d061a82b1124cdbf999ed035530bc30ec3e1d2bde5d5d09496e927", "2a2c4cc3ef859f06335131a84c488e02d3ce2f15bfda3d2b003f81a366cf48fb", "10b871c3c03612217f6f3699b7132826627becf4b7bf6f18ddc2422e66128f77"), ("255f3695d921266213e40ff0931c0497bb863ebe8beb451f41bdab21fce3363a", "305101bb21aafe69cb42b39f684c9b80673f61b04d65b9a9c60e21c3b653ec4f", "0b58ddcbeecb32d08857877448640a1e6e91cb617d4694cd6ef3f6094ff43c61", "0ea537291ef0127b4b5686d049bc1f767d9dadb3bf3cd2cd419c777c46eebddb"), ("29d144141636292db1775083aee165a036982606241b71c639ac8f5db7977785", "02b9410f875392bcc48aad72f35af47a6ea05d16b97320ee59eb74042d19666e", "0597777f53761bf1559bec74c3c7c1892613ffb27cbe142eb826e9640b62474a", "298c4784400a5a8bee05134c705373be7d7eda387d30b9255d34afcf4dc5b5a9"), ("04b46e386a5fe4ce5323de2a320a6736b559c1039b41d84f8b313c22e9d576e6", "0cd698532b011cbadf89f6a9b32f5dcb3a4da13548e10aa94a17d6f27190ad5f", "08ddc334002b464bd727c7df8034dd7db6fab146fd9e1ca6cdbe2d1b04c6591c", "008965967e0f2bfc532af11a64c7f021db5cbc33d8848ab623cef687748780a9"), ("124d40be4a7afd5844f64d657b7fa9289dab0d51ff0c87116a37dbaa25c07a5d", "1f943d6d84c32bc7f033f8f147f853eafa6d8182e6bd1ed98f709877b63c40ea", "1f58f61378a1192a02424664e415990a495dc2a507e8e12fa5ddf96ddf2aa46e", "110a1d68e9c1d26af3964401e81d1a26be799ba206ac20ee90e94a79e3d40e13"), ("23c3d867e9049235bcf003f4c75c280143c101341bccadb4ac9615ed65ee5c97", "021ec71624b9567a94c75bce88829814fb2fa16a5807d8e135a7a7c9e4651e0e", "09703ab92542d6f819e88b2e21ec2c6e5fd0a766abaae5a8d077d98a8e81d9e1", "2972062e00b030dde5a75f9345361fc8bde098fdc986fc0e9018e01607a08b76"), ("0064872464abd7c716501ec95ef452e2311b0717bcb88dd7a38f38381374e051", "117c35b0b9830a30a695a06bd4d3a4c6398446f0053e25d57dbceae96b539a97", "0cc74ed34a5972bb3ac6159cca972a20899177eb8730f271f5d8b17d67944d36", "0cffed591d61a74f7d429b8de804e0f418595622b7d9f45ab1c97545f9f297b6"), ("0f1a2472c19876f4eee375aa54d31a425fc15dcd1905b71955cb18d94fe7974b", "2255bf703aabe9758ed81c345387d34c56ace7478980df3b6be518f9eba776dd", "2952e1f63e97b09655d1b768e764a2e6f0067b74a08329dbac3fd23b99503a7e", "23bd14d300f2e95715be94580d6f02dcd46dd6b3a04fc6f8c3f52cd8a11af350"), ("043f601279b3c93fab553a68b0d47483a9b9dc1965d45f9cb4f51103fdf59a8e", "2ce8615c321567fa36e1541801cc48bb8801b58cd09bb4b523f4f22902293138", "1fc13f825f3eb89dc6b2ee82aa7b2e6b7d52b9c6f4db9dfbccba4819a99ddcfa", "1809e1ad1f881715b837b0f2ef82aa289a6ad037b3c3593542f3cac18e120d03"), ("2015d7836acf100575d21a729bcf5b1f764dd3ca5583ef0ff6d573a6daf471c8", "0fd896fe49b2733b4551ae7b10f30b5e79da20ba7a4dbeb30db24e1f7187ee06", "0ffeaf1a2c47903a55580837b7113d8ff0b431259967cb5b31c0049111f41a08", "005f55a97ff3222074c0e8d863bf8ce99777d77c7e188721e94770461b500ab7"), ("3013540591e51cca20ad1d87cf4f56b3dcba11dcdc970f2585e4fe91931bc4ff", "003ae06d44b4fb3a6c0fe156fe62584787d48919bb1bf9d0ae015e81c2c2585e", "145237779568b5c5addce9b6f25d3a9439fe2e3e3eb629fc5a2ee318019048db", "118b9fed74f5001d388db7764a40dc84436359afcc2b822f1ed8da01871535ca"), ("19a70918da4ab864cc59ec081dcfef0da2633daf254d75a5088b039acde58c29", "25b466b801b3d32ee2490db401d415784d976e80e7d95a91622637a5287e217f", "013b7fbf2a47f8aa57779575c14a8865ebba8f12a843443e57acafebc663e0c7", "21cc372926b1f08982eae714939d282e4eb07c151a939fee8356629bb1c81331"), ("16c6885500cea80673100b54f695b857822ee69a7c520713e404836b28c72ca3", "1983ff9bbca4f54c9d92706d5f2ccae178fbf8d2e3820b26004c2cee5049e70c", "262666639fb62965d7c318615cb965db07948b08c542391bfb46386bb9a815fc", "2a726c0ddcf342bfd9c96d98002d968850b0ef8393f051a33db1b0843c03d1c4"), ("2c78ef5519ff611ae4d0a61681ab4f2e744fcf96e845de290ea53a35870d409b", "150b866218cb3c080e7e46ec329bc7b298d440c62b99e2de032217dc76481b75", "12bcfa8b9b54795da63990ada19e7a5ac456328b6a6026c6429846f36849e6d0", "0ca34fd8cbd5d6365c2dbacd3be6710a661eead4d5216f498ee04214fddc1b51"), ("08caaa4414cf6bf25ac09f5dd852c7aee7cec3b9837e612039ad5d04c3a08f87", "155b00b85e253b5145a0b4cd3973f55faaea2f656afbad4d0e065103bd825b35", "2fe64c8d0f992a49820607f9bc1d744166896b5cbd064e345577eff9853f8c16", "19582c21e4e148bd204d853a5d70584a640a1cdd9a3a7c3f7f4bcf91822592b2"), ("1d32cc904444055788df516b3a059ed5f8cf80cac36e517d5af12a510f5d57b8", "2384c722e201f29abf6b1fcbfcf3f93a26932a02e5fa343613ca63c41901e5e0", "223fd915a8b636a9dc2e7174ffb0f08c6eace1385bee68af63a87080dd5233dc", "11733a25c314a608db826caa025dfeeb6b6a03b5586f5fb6c4e8f678318b4b8d"), ("00323097d19c1458ab44c05b65c6bee99e8d59fba11317f5f3b6555292d22f48", "1b2f22e09be79dd8a7c65e54676f318f3aec8180f0ecf6ee8f8e7335951f14cc", "07954fbd4de545a09597a07b019db8755739b2d941e50391051c96340a1d1a3e", "2bb8a175c3d7f6dd3c183fa1af8dcfeda6152fdeb3e9f01e63270962cf6052ee"), ("2c69eecbd0fbcab708c6d345ebc4217867ce67d7082b2fbe0691dc3f4501c124", "2547ecf6c3617df29233f3974ce3e0fb5b0d2c246c11fc41d46fac1d551b0f18", "08c7302f0c6964111f62b7fbed2f47b2ae1e452b4bc1a4190134c94547d5070e", "1bee79401b5aead8f900e94abda507388a4958692be9b026400f98f066a14152"), ("0b7ae32342807166702408523ced6d8fe1ea96d9ad24dbd25cea7def633a35ff", "1df06e977b490baa949893caaa98b7646bf55cc80dfaafd08644b98e12f814fb", "26d2852c420e67ab30661537058cc0ca754559759d2d5b8593a4d3e480e42f08", "071ccdc67ab0bde3493cf2863ebe6068684fea380d3ca6f6ddab813f9d0bf905"), ("2946d28a930789af8158be678036705fd3d9d66f2d84730f83de87e394a7e57d", "0645b0044baa6b63ee574fcfdc4513b333dc439cc8c6ee6328c3d19e0c741925", "0055429998b69385c4111c5f1240939425d0bcbcbf830660c862362feb88e56b", "0e07844275aa4e6c1450617693b0dc001b1b328e6423c4e149d001bed78443c9"), ("23664611e6fcf1aee7afbd9bb222596050941dafaae85e2cdf684642c5a662f5", "10087ec037b6aa5e12ac9c5a82fee108cad75091711f37feac963a3690ab960e", "17ccaeac5273a496d1144d7766f05b0ad617789868c659939cee6a8614eb402f", "03b4f0d2a3b975441280a8d9b42b52a11809804eeee621d01d1966c58dca997d"), ("02443d20301ccf258023f7773ceae0272e97486a1df35e5b229247e128ca5ed6", "012b4c4eff220979cb98403beab32854a1d7b9f32a6657af60b8840ff9d307d5", "0258bab0363c7ce72113ff339b9995723a12dd303b3e19b7a5fe5694c62eded2", "00d11f2577303c08e0e8fb9b82ba3f8314c0216765acacb1e89de2423a8e78c7"), ("1d3143c8a7d46e27e797a083c2cb6a312ba39241086d88987df2bef3c4e1430e", "23b76a3ff51186c969c5429147362081399d5f4a148dd3369d7d8eadf60d1071", "2fe2510d9e8ecb489a61497b4704d08d5520bdb75c29644f49189321f91d7cb1", "04e6652bcbf8c4e83fd86d16b37704d8c1515663c95c121752d85a66ffdad4b2"), ("25225bdc682e2abc9dcf95952e6a2ed9b523672d36c81e97dacf4f0dee618aa2", "0ed9011f7d2693691e7f25faf46c3d323e8dc3e3fc8d98f3d35db208698e3ad5", "1c7302d8447849688a0af0cc605f5da231e003564bfad610e21880983877d5d5", "28868f1e1a0fa49c370f2fd617fc9ae1d1a1a7e1f4fb8be48fa781db07406232"), ("08c032486a9a6e68fef13698828431244c4d6ddbe0007f4a785a751855777a51", "1241879f023481cf1f958ad7cf9646dd617a4e795a20bb5aed0400a1214549df", "0921c4292c06a2bb35e33650bcb9bd59bb7f2b8807ee9d72e0408decff789be3", "2fcf9c3ce8efc9946aee92aedae37156b4fb9dcf57f4186abae9d6d10f2ad398"), ("065a95bd0170c1bcb036b092890afac85d55952dd3d3aaf978cb8a6622b6a791", "1cf4155670277393e2a7a4dd46c0daea2a0680792b29e9fcecc78e14aa8122ed", "01e8cf33b4aa084bc1d81481b5e6253af337663ec79bb62024e5e5232d2d54bd", "29b1a6f910b050db82b3a42fdfa238f0eb438c8ae2c50fb7d9e75411330c2de7"), ("17dfef29331432584cae28d37ca6d2b9fc29f2a02c179c92ee94bcc6045ec01b", "2dbd18c15330aa37094547235fadc70ea4d4faa4e6b14ab41ad7f6b039f728ca", "20fb4229c04e70a47b9e42a72fb880cf80518ab939e22a5a23836d204b70fa9d", "051fbee0064fde50824345bfa9a221ea0073d2e028434f9024adf11fc0dd6ab1"), ("16719e4b51dfcd0bdf73359526d4bb182255a2ff7c17638dc343c9a6bfb5acb9", "077a23304b0728ed186b50ebe90658282856918d4ddcb2389301e16ec608f159", "195629b485aa67764a05b60eb47988593606b72c124c0fdf5cf55c9fa702596f", "1275b78395a24e16b435b024368ae0d6dba9d63b3eae31d9773e66e367350dde"), ("1ee0d728c9afe31c7011160408c2a0636d6231515bb5f492b3d66a62d11602ec", "04ebb9973bfaf9149fed14c1588a753ec908f0268a4be3218bdb34df488c7821", "03ea204d2663d3c43a9ca132caba869916f3ada366af0aae3aca3ded6ae95f7c", "2e32cb6a1d18dd50730610c8d0373895373e4557c731aa4e5aaae257399f64f3"), ("07ef41c27d86bf96e6a08774c6de240024b1da9f2bda4d71aa99954506e95c88", "082583200076a71c8536f8bbcb7f42cb0231f4e00d0aaa646a1dcfd4147d6432", "2ddfe9b3dbb06071e8b1c0cd6631f6ab017eda418e759124f21e984887aff6da", "072a26d09cbae876bf06c9bb2089e08442a964efd70a06ca7e4ba0e44464b6d2"), ("0cdef8dd3e0238886ac70f3604dd07ea5858ae87becf1b5fd78ebdc1dcaf8c2f", "273f9aa95f6de640698698ff94fd63ffc275c4ee1a19ba1ccb30a945b2470e98", "09437079c73f0372895015592a34cdfd7db0d530faedbe0af142750381009e4e", "158c91133e212b5bb893f1f741d8f9cf6d68f073769f4215159b1866c57787c2"), ("08296d96f031120733be4f6c09541d26f89ca0821bd3d626289308eecf73f39f", "1ea3f02f1aafde5d032b9ead283ce2973bdbce6fc613b15e5c50b5ba2ce61ced", "2563166abadfc86169620745ba4add1a61f4822a0e1125a571f03dcef5b9ea6b", "0fcd400ce46ca73629dbb8b02b8ae7c8c6ad5e83acd3ccc52b9d5997c4c42c45"), ("1bafb8cdca02aaaa049a34fe9bc6b7aa1656c93a5709866802584f2452cd9c30", "13495b823ada6d6981df73205eaba0735d8bb5715e7a3fe937fbc434634dcfa2", "16689d747b617405ab86b8bb2dd1859c065161c438055239bffc5fb5b6f31d9c", "008645a2b153a8298a16a82d52f49e3fd57eb483ff97c96f96e030b240a3ebb2"), ("1c38b5fac893bc2f661e5aebb95a818d85b3e4370738fa18266c71f90fe15267", "1864c96770de417cd40c343765a40f99154389f114fd2e2357b81735f78729c1", "0ffbee2d3f1f2a0b8820a840ff1bd00160e9ed47241338b5cb11c257c20bc49d", "14ce4e36043431c8448780ccfb3465706348278faf0fbe6b2f9d9e44fea0c3a5"), ("11bfb7695ad1f1810694efd8b91b8af181ecf23dd114f40ee90a07841a2964e7", "1f6836024d56b5065133cdf0989edea9b655084b114bb78171a8fed6036f6c2f", "266c67b56c11cdb28ee9de10b91f36cf7d482c97e8398582fb2e6e059eef03ab", "0f150a8757c673e54a010f84327c3954ab0f7a4e9b345a3c23a9c977a9254a1c"), ("2f86d9ed4d3a7e1e1ea29191cd655e69c7b27e2c96d763676b757c351811743f", "0bc5191817ba173bbf83c3a5105adb455be0251f74e1dbfca959a034ef3575c1", "1a929e303e006aced8a1bea5f4bac0d0092f08ad5ed6b56958ddf9f3fb9f3a3d", "0578587e0b529ab3dac18bb1ce54ba1e6cb1aaf645f0e7f2d2c89362b7ead841"), ("1b588b1723de9060ad1e8671647ee4a8143f0a765334b26a1a0205d56fa6b883", "0d0fd966238353af781469cbfd2ac77f445825a2f686e5ac347f77b5132e0aeb", "044679289c2c0d869b28f10704f88c8365a01b044e0506442910eed6586b10ab", "0572a7c8e23388a8aa40a93e6b0116ad446a5a1f6d6ca004f8fd162f4184283e"), ("1e690c70fd922582667c1f6305349f08360da64dd8fb9b92646bacc7b7645064", "2dd5e473ab0e7ebdc34065b820bc8c117d1eb74e85fcf5ce8ef84a6cfeb24b02", "2ce7e4272e13c6a2a2b3d86603e5574c625f866e6e68d5b6c752bd038d4f539a", "26ea330cd1ef46a427ccf00ea05bf22e079a6ca9a4fda640d75519f9e9377a3a"), ("19bf375bc4391f69f09ab7d7e38a40164dbfe1d256474465e25e174594368476", "2f12816ce20553f832f757ca4bb8c5d29a1cd8569c4c99f52d91c2cb1356ceae", "26534cb1cd8dffba654b3915030063178798c28223cef748e212f1f5b52983ad", "29d136858f5fb93b55ad5c40d608ae92e64e6b6e6bbd6d7ace5d53d60d53c56f"), ("214741299812b7fafff2c43fb2b26e9d016dc7cec1d5439c72214f51e54d7a1e", "106f0aa5a47ee7c448a8c2681fd975645a736acc5d502b1df7cc2ee2343ff607", "1e2166bc1e5ae66f27d67bfab77beb6eeb22fcada5821f4c78b90d99d571f77a", "15ca3e19fc0fdca9e75de00549cca35bd7dd10efeced56aef93a90e8b6e16c69"), ("01bccd08a7d8f535d79e506e00817d83f2413fad87e95af62f592ef7ddfa2bda", "224ac6b3a3b1c8328bad4d7825cd2ec892ff7de90c17ad3a079bd96d068f4f5e", "18f8dae318c8beb7537eee652658c4b020d902d158f1234be30226ac0b337d3b", "067d1ef95222779696e23700299783c3a4072d4a85b9bef479273a551123638f"), ("11787380f457f628c5e692ea21ce1e39b779566db981cf447cb9ac584cc887eb", "0c073d26bac2d9786514be113be3a3f02874e5265ca53fd3c4a2bbb9a76c080f", "02e64d31c9de52109b4b05273ef420a343682281a182241ec6ef6c3b44cc075f", "0978678e264d067515fa7aacd0d0b5766afa3239a76b6f1d47a3dbfdf795d326"), ("0d88018f77d25161baaca4bbaaee591d74e282f5d6ac2e7bf587857e64c97ce3", "19cf9e9675526fee47368d54564178e5f6c5e48a147af43ab14b626df35e907a", "0b434e2240c0cf7ffc53fcfa18822be7734a54c30735a9b22d3b19b9c1ab1572", "103d15abb37b483e9085ee7f40f1a3639eabe23e6cf79175dd021fb88dea20ff"), ("021ab575f5dfd1965e9dd28d70a5ce093b5ac5e18b9bfa1cd27ef31db2fa3a90", "175b085c0679783caf4db7ae361709dd35ac16bdc295049217e5254cdf113206", "0123c551144315f83765feb9fcb812b3ed886d3b752cdd97da8feea47a1d37ab", "100656a6699ec1d3f17f331d67902d565e58159ef4655458cda9a18e805fd55a"), ("06d18e5068f63e1ec205dc26081f516aea3fb1083311073a0ae5b94318be3b49", "280881669de8be60d10cdd72b25504a43ca51e70c520ef25ad8cd6988fb082b4", "171214ca63a13192176247e0ac672ca6ad4ab279045e45aed97de0d46dab118e", "0ea5f40e28d060c009d6abc7ab6763a16ec949b85996bdaaf2d64e7625432800"), ("1ae1689b8545a5106e4e7ff54bb5e4dfb331e7ea6c40fa223698f1ca1845bb39", "07927093189fcc1b5223e0664c5a46fc141c7f5939b72483e8b1d99c894bc887", "2c0012ad1078b806d537b309ae0c0f6439353a177b3c307caf1f4ce146bf402d", "05de2a2bc03a1b37d73e1b4d6f171c94a2fe7f298294da7954d9c83f9df918bc"), ("04a8f13b1626ed85de08ec0b60a0716c0f88ea639311a9a4decdf8b00b802441", "0814e46ca3d2103feef9798fc075e36955b0599e68d7c6dda6a03ca126f877ed", "1005eb7bde864e44e7a76946e7e3cf628ae8b029f3c95dd9bf79955e916749c1", "24d2ca1477a9e804c437503e04f5e2d8cfc04b989ad993b906cc52ef6808667e"), ("1efa01344734f5e0ac2044598ea2ba2a6ce96d0943664e44425d357f7adb171b", "2effd52b63b6b4ef126d71e5b023ab5c0d2e7e6b83ff5c3711f47379042a80d3", "21224f5330651e2e930b9e956de807cb1998b5019bc11ae55da8b74e6437005b", "158c14fb753e6529b7fd0906a03cda2cf496c322134b3598f744a804f352e068"), ("1194830a57fb33303ed104ebb759812e5cb2e6f9e2efc1a5265009b15e8fc869", "2dba838e69898144f1a0f0e6acf2a369173801c7957c2f263bbc63d43755c7b3", "2fc747fa1d2cec71769044adaee57cbfe7e052f557e5d4cf93a1d819a1b04a8f", "10634f84f6a2bf80c20acdec6c6ccac3cf7a886f3e52e950d9940af63cbb45e6"), ("132451d6457299aab247d8ba5b0c112b6098c55745344735fda7bc915bb1be64", "255e976ae1db01b6caf998471a08b8ede05d2adcf2b1d7a62dc0874e4f9afcf3", "208c13b5d86d22a22c06611d82306bd0f9feaf606e99480c3ff14f3ab97858de", "19bfd75d736c5bf06af98f9099ed2223268bc2c40d860934c6f2535a8fc02404"), ("1e6ab20445281e38eb66902c70ddf972863b2fbf9763390338f429ad21007ec5", "10ed19c7aa143705810e57ce8589b7e41eb453834be0b451f595126dd7deeb68", "027e296505884a38d4e54154340057e519d389624f19a3cdf56fb80ceb941cd7", "2e165e33d7fa5bdcbd17445aefb9801eacc4126af7d3881a3abe79bfff06024a"), ("2793bf71310cebdc1af79b707e20064bf328f569e4b22e902be69cb21d268132", "291047467bf9e3e32170e071d94816c0120909c2c3dfc02100bcc7785de14b94", "1ab82e36d02032bc5d17f6dbbe69e6153b6ee09ef1237ccfdc0657c02214cbde", "09774cf813afd04ece61f909c75b9d335d1309d206e5d8508219f0c566bfb987"), ("2d1e51eba1f5d5a055b31b9066f1408c6c82d558a7714eb62d3d075a6641d3eb", "2c7d7ecd99b6006886d7644f439fd94f43301773894758cdd5c8b533e6edead3", "08cab41fdf2cedd083da1f5137c59e194e47a550f617acaa34a24d3861afc094", "076509e1df440ca39f4ab175393e1ea0a57a1c5a40cafcbe970625e109e17019"), ("05772d9af78b1c176fd25431aef27cbc2791c98aa66185270193cb7793806c48", "25c96a827a7553ed34b5ca2185ee726939b1c9d355ded922933fa66eb8808a3a", "28a16f50a3fb1b532a94069f29e4fa039a453bc5f56188364ab9d6a519958a82", "0dc1c58b1c7747c98d06284c3c820862932821386c9155284a1ab86d66832a64"), ("2c8a7dd9c6455c2f60aaef705362b31057505bf22c07029fb87396a4cf25af24", "0fc38c064647323ea2b9b1d6b60204e4b7cbd4534ff67d409e79ed3d9a40a35a", "074fc8f9f70014a83b40111ba16309cfd28f38757364a6177c96cfb3273f8024", "16d313c3eb61b0dbb3c49ca5df033505c44b589a34a4bbec50d0984e941890d8"), ("0106800fe71b010c0855d8fda035d300be31f047eaef7ff044376365f7ee65be", "13100e86bf1f1f4af31c83baf620bd5cc5d9bac84ca6ad5586576e316525d456", "1e9710e7847ad949a6562704f187f4272352cea549c52539f1a0e3e8c069e54e", "301153114a3ab77c5c589dab224a3a09b81920a812c0c5f9ebd20cc96a5fd852"), ("2e4f13b148ddb1e7b693e566961464f69e8a5d3cc9968e53f956b49af4c37575", "2dffac129d20456b7aed9a7a299986e9619312a209df5d5621bf44fd47cd5360", "0843aba91b681b3066db5ab183e274c7665b8c0f5bc8c35218d33bcafabdfcdb", "09d9c8f84d92b21e1eb907d3b3f41fef6b609bcd2f1e35711fbc1c46196be8fc"), ("2b6ab88713aa85d62521183d835da5d96e0a549a3543583422b6e5802ba22059", "2fa6065129641cea74de008eb2f398f7ab4b8fea7357ab91acc0cd0f08b8d036", "1dc1f723eb01440672bb700e5f03cb385538df70a9c2e9fb0b9586ff5078bd77", "27d99e9f895be0315e17177ba850f53d435bdff9f6c6d0218c234499ee5e45a1"), ("077152d5d60be8cdc44e1a27bea414d737bad3841f4e6db4c7f03dfa03a1567c", "2e1c788be78bb864ecd2baaf67b8921fa7c4e7cb8f123dadc52c0c612427f9ba", "0af0c0a05131f8ac09c399b42657c39c0d8e6d3ba8790a5bf76fa784f330e6c9", "1cf38a699517d704e8b4257324226053535f91d4891379f2ec198fae664a58e3"), ("29634fbff5de54581348b207e5560e566034f4436c0ea0408949ac5a6ed8265a", "283ab8c14af11a854c1d7f74b1177d45a9618b9246f4d8fea26134c5f9362787", "2208dfe2d257765e9f23dcb6b714e7bb42a31fe19a27de460577f5f4269ef329", "10f61fcdc5f2a2582c57c359facaec652a85eaca6133f200754015ff485ed183"), ("2a1081f8fd44f121d06a11c82005e9a6232b3a9d0332ba3a3583f56a9e818b34", "2525740b8a0b59ee17579fb0f257b803c2b1ab8a333c4072a43384bebb2ee2e9", "05eda9b37f1c9e252cea3d20bec9ce84fd8249b53958a7b120d652811e316e4f", "2e9419483b999e6a8220e66aa1ff63bc105a9fec5a6bbbe20495f67e95f73767"), ("242c64a650055b84489b4b1df0ce416448c4952db2e0d345f8f3ba323a509c04", "0a96b805a0fe70d88b971e758785307bb27822b8e22794985c43ed026c9e752a", "0de32e7a337626eaf1fc781cd8fc25af674c6cfedce8167af0803006f0972474", "3059b35f91cf5c5c17cc56dc9a23c7808cc752ee9f68d704232d8f077762c12c"), ("2714b43e3a9ab2ffc6ae7c818352eabfc83b718da239bdd6cdd4dc3d1392ec9d", "1eb50366acfeda96b8d9e1f88a4a9fd0429efa76da308def15475cdfbdb83792", "2ba349d56c5c8e7408b75a453947014e7b453695f632b06aabc313afca207942", "25678a0b04a5392c73287a26cb0166de07cea09888691390611ce4c333e38b2a"), ("3055261db7d75b7fce23d6fbf63adb9faa55d03302937e8080dea394fee78f01", "2f6a05aa8ff903321782696b18218c96963376dc3c6091da4104efe1b0d3a0ee", "0715853339446890c5622ecc2a5658a4dcd3e0e9949f4005a7d5853e33a05a8f", "025c1ed82257cf302b7e3a2f845d431d1533382ad3bc17983211a944181c3076"), ("0e8db22c52337ca31de7120023f131fa97474f80d172f3164234ea78d273e833", "0d442bab14747470c6cd3b17c26e550cd332684efecb8ec3d55ffb7686e41838", "0e69301fc37c4be174b27c1628cec80babefe3f7693ec5d3ed1ed5404e444c36", "050373be3c884694705034887429fb643b7912ba5db7ebe49bd1b95c02f20615"), ("2c9f741c45ca6485db9317219959e9dc9ea2f92cd73ff11e59147d9f28d219c9", "05110cd5d6958126aee5833c197b511d304bdb35e01ad2113e609563452342bd", "20674d5ae08b81e535330ea0ad62ce8038d82da377b807333cffc2aeb5d5d5d0", "012e742cfefe346bb5052fed1ad0a51ac74a69648b236edc48268117e630cdd7"), ("080709cb6c509318cb9d971a2bdc9d6e1b008d21096b7d42b3c21f0cd2a8cdd3", "10b47d3d691cd81607ebb4ea861c539b352a9293a1d04f98e930fb2f6663e6ba", "160e9885b7452d4eadb10f402ac5eac7950a6da83bcf7322e54bf5903e4fcf51", "1ab7a0267a5691dbb3d5bc47f885e62cf6afddd600c9915e40557137170eaf25"), ("09321557a69911b27e663433ef310612b61f5997ab045fe737f476c3b325e0fe", "2e969999bf7e1570300e347ba197e3ed9b4d33b7a87129299c871a12d2f26888", "18364fb0e9dee2529e91be3e25e839d43ef1364e6ca69d3645d07060606c3a61", "0387ae2db9990901dd1fff899b336ff71cd67366a2fbcdd1e4b66a243487ec88"), ("2a958134abd4fe3a3463ed268664e767daedb295dfa0cae6fc8ad4bf28a723c3", "258dce7d939b14e5cdb9984637040d94da0a30a78ff5db56a5092b9ebb20f6d3", "303213fa2f8c534d5349d436ecb7c7d7938b37fc51f55b4ce86a194f4e4e6421", "20870ce5070b36ae6c398e810c1be03ab6085894eb98e76234c38ef87af14790"), ("28ea16392b471cb3e0a7e31bf810a729443df723c7bee6e6e5a86685c22650fc", "0b3330f513653a1faa8119da7c28981bca396c860dc8daa67928f279810b2f80", "029764543caf18fca58d06e631481d5bf1a0285c47abb0e3e0193c825372e273", "076402a275b1aedf19d682d79e94a29097c8710d4ff905d0693a2d5cc150cac7"), ("28e0c96ad25ba6f626e832ad5acdf330fc3524d86abd9e41b2ec3fce8e1800f1", "18ea09d93b0dc05af5226767072e5ec853854f861d171ae64eadc9c07b76dc85", "17d53e344b6fe08c2bf45217b143d943465895e62430f2dfaece614016e60e9a", "04154f4ed60cf8aa22948e31c822e569ec8e00d8c7547c1c9de1be5180dbaaf7"), ("07eed79c64bb8630a314bd1413a113759cb7482a188da7c9e334dd707ba58caf", "1dca05d3c8dd34cf70eee1c6c66da4e741ad6a699c7acea19b7b666856fe6ba7", "115c1353d6587a4ad3d3801cf818f8f9109c1dc2ca2c709595fa26658f585c95", "2a593611af4b3f3a3c643f42cb96eee7b01007388f43bc40e39721f9d808fcdf"), ("239eea63c0a1c9cdd477fe1b4cf31453550445a410be6fadeb00eec5074b8692", "13848a71cc7b8fa8e00e1f2eae21d3071fd8f378064726c4ddd4abbff94ffde8", "083efd9af850091dd85f9c1de46cfbbff1b46ea1132bcfc5a5ee670eb1aa1475", "0b2302d886b3a585a8a3354ff1b9a8e4d6634bf72ecdc21bdc21efbbb6379e9c"), ("14baef370571b1b10bb7484161081599ef60344afc6d62a6914d4dce6fa4069a", "20bd3933c29d8595f56486df2de311eff5845df4cecf4e6d645b26cb3670928c", "1b91932c8af13d93bf8d2deb2c692d60b832ff10a6493d8a15ecf3334cce9b83", "0fa1e27d18bc8e72683e092bf8cf65f49558d01b6ba99918a868b98d17292938"), ("2f3fbdbb95e05806e18e7f6ddf13891637cd05208271d81a4d7e09a82be915fc", "2dfb5594130cfd3c036cd57fa17ee901645f6526285f92a9e11e8654a08f5ab5", "0e297b14fb3735be27d99fc72898d67f7f79ee9d345696956ad92accefe02c61", "0aaf6134482f398515a456633a5287eafa15dfc25a680c56bf5465244c97f120"), ("0ab1fe5ceda67917ebf8e92f93e6fa1607ee4340da59070af2d02f199a13b130", "11d197116b868d929b4b6ae0bd847839933f91ee6866b33d33911befc7d5e0e2", "295b019fe8cc484b17d356aafbdf63eef42136d2b259f85186f147f4f870fb11", "1e4735496324c7d5e3004926e2c714885def65713438d5a4014bb23d4e87b3a8"), ("1c306660952888d81f983d9926b29125abbd3bb68959dac24708ac07a92b7d09", "02882be790ac1c2da07554b83a314fdab6ebfe5be5d6472c455b750871e23d16", "0700398bd957a2834ac4922f5e4f6462a92e377be28e4c3cca6723d43668dec2", "149dcfc1830f627482cf08dd5b6c7e361ef6c4d139a04b249c4085994e0588d5"), ("150c7087ef73fcdec6cacb4f17cf5437fc4378d9ab52f076e66680a632f6240f", "1c02b1be3ab0458a5de099795573b66f1ba1e252430ded31b5816f62a1427686", "0815aef041e05c1417e108e0fbef0ffd73a06687173b4716ec6de8a2f26c9cd7", "2b44c719bcef3196953a061f654d15803231632fdb9d1e0fda90cd404db459ad"), ("2994959e1817180cb93b0c5ec8b430f06b56702f141a84c617f06e6db2a1a66e", "283c79acca894ab59c13490753c1cc685321175a99d9e22ca3822786c6727395", "00957e59a118b6fd852ca729565380d947b4c91a7b061a6dc7443e7bed3aad8f", "1efd836a580087b5b7897c687c2067fbc3e1b5705a32abbd3eb49d04d06428a6"), ("17381cb87d3f98f0cf2e489ac66c4c82c548222400bc268cfd79f64d829b09bc", "1a799d66f67c22d492ab28b74bddaddc2aaa6045c5eb5d0b6669ffbfc89bae49", "2184d6406aad1b2294687235cb92ced993e38b5261af915d2e1ce42865e9502b", "005294278573eb268c40344dbb8058415b61e49d806f53ef3035635c18e0440d"), ("0b169a6f2c1717111f8424e04cb6fcf0e5f0dd7bf4fb6ad469af73c5ff6a9832", "220a6561f18ceec42f503a68f22c055d21dd6ce7f34a5aeb1ca3fb1506931858", "1e274741bfba1d0e5ae2a608c1001200f6836a12c80982cd3504412ca609b1c1", "24672e88ee9104d8ba6f545b41010280d3a3291e1ae9b07d0eb23066e5979ad4"), ("2ba5d69b50e5ed5f76777b6a79d272b6ac559d02ec941ef1d522c48f6c0fb6ed", "295f0a557695582bf45d49efa10051aa0b27d524abdb93ea3771d06157559f7e", "1910241bddabc4c2e5ae7a59a09d8a644875f6ccf54a3a88e2439789f605cddc", "18adfc2527c5b695b97c32fb441964f3965bbca83f006a9bc234e53f585d7269"), ("21ad7cfe03d1f274312845f5c0fa78a7e8a777aac0dd3d13019a3412d7418633", "06e57735de6f93c69c1291dc3f0b202eb5bbd3dd9400b63a5bd4bc171196f281", "14aad8fd65274c8d9640f273d176c6f2044962e0c5a7e09dd2ce1d3bc1322ac1", "2bfc9cc95e2e2a4adddcaa7e522c9554fd1782536f0b5986a6f106030f441b96"), ("11f53e74b13251770e7797e5a101ae94fd9b941742e90715862058dc306be973", "2509478f8a22373d1ade5934ce0d82e0be2f76856cea803d091259f09cc67241", "1c128060d64304a0cf8feec9febd6ad18b0176d3698b1d6a1275ae63b72d3ef8", "275b2a80e0c84c4ee3bdf192f48261c91361af6c7bc091173a72e01e123ee652"), ("2daa6630360c7c11962a8fc9820cd4a89d350b580a2c5c1e5f19513942ad5ec5", "2616c0107811d9f5fecadf161a0d6a9ae38044e8ecf0ce4cd703c2bdb99d0541", "09ff98ec57c9b5d80eaead1192edd0b8d91e6bbdf1d439a4596c68e99343667c", "00902c5519ecf7bcea1e0cc81628eb4a5177cc407fa1c80dd8bed454f03e6ac5"), ("0f8893311b35dbcb23499a63f18c11ad686ad88085455629f5adb91e23a98daa", "13b012f90140e2cce461304862f642e0d52a6671ad81e47bfbcf6a246ca3ea66", "04869b14d5d2de55952e8c06b3246d416d18e55d105d2da56f51449286a4a843", "23e886fc01620a3c00906fdf869ad7dfa4059d6f7d362ebddf633b86d583d0d4"), ("10da51b548f271c4d0646f7821d270d4f88dd5ba065f38b3189d070812fe28b5", "1ac95872ca6f884d613ccd5cc21be3ed4875c9a830d4aec5b0031ac8a6946f8f", "0aeef215d71aa0813775dc3ebe174e1d04dc5b4482cd0f6a0b719dc213319928", "04b0349841f95af51837ab939a8288d44774d3749179f1d7d5880c388b19ec49"), ("0c66c453ec34bd3b719c0a02dfcc4f2ccebe0e018abf17930c79ecefb5e1600c", "1c12dc30558e31165187f7c38b1ae2bf5df6d54104d3b6d03ca1c003cd963cfe", "1705ecf9cdd812ed60f88747482ec6fc049e32e142d7b977eaa75bdae5be0170", "2b1652b50d53f8c2b2ef48a5f33172f3155f6c5369f7e43ddc7068233c568715"), ("10614fed29b987173df3b57c16b5df5336a5e52e5aebbeebac157129e9019378", "18385741a011026f112d0d4b24cd1e66ecf279f1a1b1f2e323c66aa823a3b230", "23117859ada5cdd8704b4bf918bf22672658f8ec3a2cd57a7646729d33db9de7", "1b7f92c84c0ff261679aa84d5b4c2e5be92d77d12f4139541515133810a5958a"), ("2c3d46a2a48635033b9b752fd7a770d014b19d473afc420f50d8609c81fc453f", "19080382a997ae5f576ac07f500a256b85542adc7a7b12cab35c7d1dfe4459ba", "2a80d9a2f821af43e8ff3ac0617ec7f65ba4826152b0e93460d4813941753839", "0ed06cda135d7584930411e90d97916374099b46fe62ac6ca8e6383ee6593fc7"), ("20b2d0997cdbe8736655d3a8a1b8c1542bb13a36ffa820bc670af1a317c1ba74", "297c19bff8058a8f0f43376f8eeb31a199293200ecb7aa6d53b0658e3c201908", "2e3616d3fd1a98baddf70d9e99f3fd069205ee611836d643e83651f35232334c", "1248c5ed46a67beb22c47a77e527ecb1df6fd6ea1e254b4c018b8a7e050b3b31"), ("2662e67a49d3bee306f746899b4d13275c34e6ac5f539ae666c878c03914f7ad", "28984c3c71fb108fcc7f5bbd61eb17e4005c73a26108fff864921054a0d21328", "258d6d5e6ff8219a026abfbc39952ff9b65ed0a9a2b51bb477f4d0a706081860", "265900db629c70dd2f6d9e3cd5c84eb83e8d62d59c9b1728bd9d0313952bf61a"), ("00fea33ea2fea2886ba1ef26a3b2db37f2ec15ae5ebb40b9d29e3027cb1a3571", "1412ac5011c119aa8cb48e4e4b654f1dbe3bd61c7b1af07ad8f27a1dd7add10b", "20c67996ac7e21ed3d02bc5eb28ca8ee4c45b477add853a73b5e86c9228f3d83", "1efa28c1e1d4ef722fb169566b4a403844ab767ce1c6d2671efe30888d9a30fe"), ("2ef2fd58641087803e888424cd68513d2f7438dcfd1e4af5fc7a9033feff269b", "1d0fc6a474c7ae59adf3b7419a93accb38bc0085bd14dd058675c05a61d7bc24", "0b59ff7cdad6efe6539f3b767a7e5d9ac62e79941ed0abe6687eb7e95e2befde", "13b26e23e57315dc04d8e12dc62761fd70285ace7bd64a4c405e153e0aec903d"), ("1eca8e081df710bb0b01f6fa22508ea008192183441ecfc6208349f1478353ad", "268d72a922a5564ad325670144b99055dc030ebbd144710dd0c2f479c36a2ecf", "19c5f2eaad41341538930d69b687ab8deceba62f60eb8e4af1e366a472159f3f", "24ec93eacbc0dc34a6bf338bfbcf7d568ae3e77426d1200f40f5515adcbbc7c2"), ("29379c7ede5a9d9833b4a5a5671e90a6b40d9a2d95fafc603b551f8f200f1e23", "05d615b1fd0f583b8f7638c8c088b45d1c236119f9216226651ecdf37c380f81", "1d58401456c146cc1215712114c7d630e9d577405dc32644cb12d355ef744ffe", "002372d83ad45b822b4782c779919108ebf63449443e42fd47f39527a15a2373"), ("1ab342fb963fdf702fc6af5405b7455528c54e4c8e51bdb8db895ed603ca0e11", "2a98e09ea18ace0afd3599a8babbc14f795cd3d47c523bba6cf63cf0bf31edd5", "1c07f832fcf832a7cfc59c9a79f7e93d9cdd257ff5a38c5c16aa4b9c41c5c71d", "10e7242eeab5d75e996f9fa0cb899e8023eec0c06af758830c736a42c7177c5e"), ("2071f709c1a3902bd83bbacc67be0d6c1541e2604c1efbb28b342622dc01c64c", "01e5f544a0c76179fc1d87f91219b61ce1b46cf47b0120a73c19ff7236b58f1a", "022db332f51c88b5885f510784404b657050ccb53cf8c93b9f614ca24cf26506", "1654d01c29eaa5605b8ff0da290dcab292e882dba4995ba10c7337b3eee5ac96"), ("1541aae68263c0994e569d810a08ebaf41d4f7ea7a5ea99e16c9a3f79094ae3e", "0a59e7c1ed52d04f4f1605164327144370d6974c2dbd359111c1d97431228399", "1f4c479af73262093df25d77862adc6ff763484ab5b524f6a25c0817405fca15", "22ef6d863cb06bab5519d59fdea14a259e6bff208496cdbd52c43b9827360423"), ("2ea990115d2bfe5304f3fcc98c2cc39d5c1d1731b39e260633f3249e6352721c", "1084218d1aa79986982cab8e7aa31ca507267f973518d1e40ea7f51d990ca9fc", "016fdff0b0f4b5e02d510d92ef33e157986e38ba8c12b3f2e67b3c5b859fc961", "0cfb1aa0e97d69df4774347b949a396b4d7655df78314beb81b96605deb74548"), ("2b6a97cf7d2f5040543604337c98a20fc6123045a9d284bce08203ec50cd914f", "1a5d523fe8c8557b9d95d29fc35dfaf5b91d511fe8d47b6ba8f7b5386e50d577", "155d1a1ecb2dd113628d6c2a44728375c265915a608b16ecd04eb85745a70dd7", "015d5061a3fdb6f7105e60aaafde1462d9849112dc62e491c2ba84e26095fc7b"), ("035e5a40e7b198dd5d25baccc13824747f3a1d8d75944426a0e56a2418ae74b1", "112e16bdfe2f704499408cc318d512b31c66d1594cf8a845d385551f57cce34c", "05a3b8a5654e03a783a61010da0db28fc445e4a53221b6628cbabcda6aaec4db", "273561ea35879561353bf8f58ab38310a657c1ad2b217d04197c313b4ef870c7"), ("1c17e391dd4763c972a4634aee8978cb20dff0d2af7ec1fe77909e67fba42b04", "206f25edf5accc237c7b95b1db98cc57ff7612fe93061c6287caa50f63e684d9", "2a07def6d986ac57af603b2c6d118b1437c33a8e268cc93e70dc363ef2e9f167", "19d3704e36b9f50e84e23bc83cc81a575ded5ea0ce3837a24e3b6003ef926ebf"), ("04f03bd45e65debe1f7333c83959e0eff5b2c84aad38c0bbb36a526327a580e4", "262b39e34b2f248f71eb32bd871d0456f4f07b2c4fc0b9dce7018747e2791459", "1e12d5e5d4f907fa66a9186dca6e2cab3aa1a6cb004a3322ee709ba357a822c7", "21905cb578360e9412f67f3ccbfdf70a53c55be48005777883ad4122f6e4155c"), ("0754855339362cf5d53d483ca8036741af3861e48bc740eb3f1ab8ad15b38811", "02689789e1bdcfca6e64e699e613deef001de5c224a1e8d0f1a0ea58eda1fcc9", "14e61ff1afc6bb2e1d72526688add656f94e4288ae8098b84c3efe2a9bea7858", "186d614275781635cbf04dfe2d3401d2fdf12b359c142c4191ff6d3b2fb8183a"), ("13338b800506695a10004b806e34b71e82a611fa50ade0f0042fae4bea2b7e5a", "2b9e02757850bb4b7cfdc5b5ece1ef04d0cdef640d726ce00076bed9dc87f453", "050bae7128fd94cc8a5252782a08b2d93177486abf81601547640b9e8366820f", "2fd998f92e049e3b5f5b3d803150bbc1e752fd35024e86fd9a7c4b5d07a64b25"), ("12a5152e703958592f540a15f9ea7c8f5656adeb5b6689ef3e6ac4f105ac0226", "29b62a0a587049c171b971922af22ef3687a6256f5116a31e4623ca3541d57bd", "16bf327401821681e067ef46ffe4d3ce445946209442645efabdc53b4c118536", "1cb149d08d69eb93d96e68b5db50fcad28e266dd8cc36fa0a6cf738f98863be0"), ("1c64aa0125b1ef1dea5d3432af478bdd20943c73175a5ca1515724a3458b1219", "1afc12cd7e85544483a90952df6a7721cf1b3ef7083ae1ff6192233405f71a85", "1587a504255e3ef760a4ccba83a169898272f3aec7eed4bf1f444add841db8ac", "2678877be81d1a2e5681169ceac3b64be6a0041c91ad6bce53735aa79205452a"), ("17e57efea926028089306d53ad931fc4ba881953ba2d266f1e565dbab3383dcc", "16a9dea0357853cb70f6729112361156e7213d47f924e667adfaa49b5577b8af", "1d54275f4e9910c6d114fe4e3e3a9e494ee3275ec9e4180df98d822269cf5157", "293c79ae238ae663515051ccfbde7e1e5d208b03c3c5818dbd457c0e7329a22e"), ("28259918190f2d635ed61ed6aca3580fdbb02455da2aaac6759509c95540188e", "2cc8f1676e5134db5d5abac7031987176358b00ad49f47672b4dc70f057010db", "1ae7ac6beb559cf060bf32ffe8e2aed7ea808daa426146045d6a17e8b95f8ecd", "20193875c7f20a32188fdd69f44d7ec89184524e76c3905ff0130c883a3d4e57"), ("0646560601d71261da6656484da4b8fdd839a4f1a76b7fb7bc5ae2c7faa72a9a", "221cb4ea44d6aed58e2eeef10a69256c358de739d3461899bdf6d0d7765f4345", "116c70f3cc55ca73bd9db581653c3695827d9525ce143c7be6590d3a983bf66c", "1a3406ab90f87b53e9b9cc068647a12dcc7068d71bbcfc5ad3878e833a0e848f"), ("2fa9580999f14f917bb5cef794041b1be8aee6fd8d37a9fa0a6ab4e7b05a5989", "0bbb8248db68112449fdc1b2132162df64e50b237c50d89bb84289de0e9d9d8d", "0661219e5bc754e3444833219ea674a3e0f3673247ea1368ddea03670a96a502", "04578fdbcab4acfb67ae1bdc57b630a36a2a4b7850058df174b45990c9531b67"), ("04b73cd8065ee3a9b1ac4d5dc6c3da0e92f8f430a0443db658db6af3f03cb74c", "0a47efb3ea7f7c0b8522e0602d21c92d5b3ad2cac0fac4b5597fb64c15854609", "0fc5b2938558ff0a21c0edd28db593ae913e1e120d9575d7d595382dcb5363ac", "27cc47432ba98adedd7db14803432c7163df446ec002d060fbda090ac67afbe3"), ("2043ae910c2f5f991893bde40d34ac2df93f381736995fb1e27f5ddc62cbe452", "0348f0038b3f8577f2f669333a44b7d02e64d507bca1329b97dc59dff872e0fb", "21b57e6e0f66bc89edc49f1749784373d16eb53ebc9f71b63e709d2d6736ac7b", "0f3d5e8da727164615da0afa8889b9dd4361e206f31bd7f1033ecff675d1015d"), ("018505c289e5da8178494700f5ab9c162b0f7a9e7850abb678f9998de5206722", "0e8670e36e6cad22fbbc77ee1724f8a60efda9bbd91f221c11f159127ffd1317", "2fcd73558676d47e142dfcee95475acc7635c82ced2c3263605432c7709dfe6f", "21099dc512e8d876bb01a6580c35403b47f01d5127bd11852fa62cd52fdf65e6"), ("15e82f44d0dcb1c258b2403aeb57f9fd2e5def95d650b1eca48b11454c266901", "00a659f7242c7f4e3acb4d0874296ae3a37c65aa290179607659ff76c6a9ce2e", "1df70d107f9b4a7b83091d38a19f17fe3d416dd6804f7c77fd505a96a78080b5", "268ae3cd69c95f8eb8081e926b29fbbeece80553b49f417abca1a6afa2bc8308"), ("18e6186117cb9e29536a54ef5e9b5396b44da388fee63f5f176fbf366bbdf18e", "07099a7490e12c0b504b5d1d0186c6a78043ef6bb7f96e245ee3d158bafb6e20", "26098ec61d9e90edbef9da8ead9e6a13c4db616902cd516bc94e5dfa7132e009", "109837e8644e89548c4cb0a2607497c1ea9238717979577e27bee84fd1d47d5e"), ("156760def3c1d807ace9e874da6a45a4eca4d4abd1ac995eb56207ee38157d0f", "28794a85a6cbbe02c55ca8868499502f9f2528e540f1d0754c533a38b743fefe", "1538069d6a50556a08ab8d9b5d560d296754822577278bd09d44de869c65de8e", "2dd59c1047556febe211a02a71aac22c123cb287103b2fb72a813ef9af8f5fd5"), ("1cf63f391a1efed97e7817035fe75108e12b05a4216cb89ae5847b5f4f428fe9", "2e69a2237525bd6cb5e7e64506a96845d30ae6f179aa54b4066c65e2ef5d3c13", "108ab9f6253a7f31e5793f21ae3da323a8e27a19163f03f15eb579f9178b2d72", "2a6debc049f02a6550501e7d95773b2d1def0fbd9b3ff2eb1d7ccd61d22e37a1"), ("2ac858438dea858d70fafc82b6d9c3f47b8b6a933fb6c78ff48f4f362c436143", "045ffafce0d6e0d9566d97d26cb2ada8f401d6c315ea7183b9d02c7134b31fc5", "1bb2cbcc9364672f545358cdef2f7b1c84e18f04840f9bbd49ffce5e9e376f65", "3002861c92d2d405e86153b93714f286e3f8105497c404fd531dcc27e76a09ca"), ("16a30cd2953f2503f1029b53bcb13502721f5d9df884609a6279d8acbf61b79e", "2f85bfd4addbe111e424b455cc1ffd393ef75f2f1bce21516f0b30f82c444ed3", "00b2bc4dbb888fe7636956bdd31382f4aadad91932cf4705395ef471da21df01", "0266422ba6de154767a4ebbdccde1a48ca1688210a7748606aa4f1d2cbc82277"), ("300a73401ddb951b5927e46fc06126cf38f2233079fbc0bf798c35ef2c130a3b", "0128493a24f6146bfa192229a88d5f1efc47a8458a3635c5b1da9473289e2f2d", "0b55d2f39f2be6dea9faeec4e038f383c49a7f1e87a4a36687fd52e79677563c", "2b396909346e55d0103bea379b587cc3a1f1cf51891418b644161e8ba7f2cdde"), ("08542d149862a0b6751fc9d8cd016a297b16b7002357017de93642bbcc6f27fe", "0bc0fa80cd2d201a619977982af49c935b7621f39c5f746bab7ee50e3bb1d082", "272ffcaff6d9f349f52bcc3ee4b1a82f9375f96ec40f32a0ebdbec5c2a8d5df9", "2950f95b004fe72033e729944164464733942fe4c082d3adc3494a11c71941d7"), ("0c567f46834a5cefd57deb34f3ae6b3181107631f5abe497b95c3eeb59ef5baa", "0140929fe8a81301d6d389209b5221b7e1024bab9d881ba6340ca1124bcb732c", "2e326399b2ba7d076a77c93f844b87c0ce573cd75818c4e75f3a5da8febeaf48", "00c984b5fbd5b815b7ec6a2a0888da95a3d25b12d4de5ada6bbd845d01ce4a54"), ("0b62e8005dfed93abc4a716d227b88f6f0bfa9d23ec0d6c1f5fc98c6264f70b6", "27115f51a3cbff24982d4470eea1cc7c07c195834e2d3b7349b96f6b36c813c3", "0b346bfd804cac028448105ae61ebf6ee1463fa61d1144710747823141cb3f97", "2442c3938e9e5c8ab9bc1c6f114b21f69bc26aa1bc14e4d12c465689c151b80e"), ("2ebb4a29e59b9858be59d3b83e39358c6361285c59e1bd0bd5152363b4577980", "2b9d2781783224735a1cd4f988181b51ce543906cbf287ddfb5fec5070eed850", "0a729f5da4e72983a31771f8f1c7258e5a2bade9727cd89e1b3d6f4d14e5f9b2", "213f7145e5c3b24b23e13ab6016c767bfb5368e59f3a4410efe91968ebdf3f48"), ("21332a5e3ba9bc33fa8cd8c3dda40e45ef93b43169a04bd08381a6ed49a6aabb", "03e3baab27735f5a732414d48096b4ef99b0dc18a5d2a0a54154dbd14e1f9914", "2c042fecd05d573de0202541b6502f717f663a767f914d9953d15a4ad1bede9e", "2dbe28df158c9e4bb976fa15218f218e58dd938fca0a35aa388c96fc74468ee4"), ("206fcc285b2405819ab7552ab4aaf0725e36aebeff74216cc4ea3afa1eefe484", "2bed216d077663b8979a44f064a126538258cb758558af6786f0909764863bbb", "15e36e0f0eb0ba965b996c12721c17c654449eec5dc23eab1bbd81a30a365a66", "0d4b18851535f7078a5a7c74c263f4fcdd588c4bed736b9cca9ae568c8649897"), ("109ab87db022e03fdb4144cfab132118c944af941d43ebefe8565cd433b2db70", "2c03463614674039728776cafac37abb6acda301c0d7fc67eff8bb08853c5db8", "2bf810efd61c401ddc02a330811b32f867ed7627a597d356fb94aae11f9aa634", "2bf00aee5059d490eb3d5ac504158e64572c87487a1f4c8d5f7abcbc3ef974a2"), ("161734ade4d6205406eedac22a95034feb00a386361dc905e077ad94283eee47", "2f49d8794bae2c8c4cc9cb669ee88edff4cf4519a5bc780d699fb39a048e59bf", "0b87f5623a0f6b6e59bc9fa6a020c4e265e331e6c2f7267896391d5f77345e86", "157fb9e6cd2b488729e75ab9f27d5dbc9024b371df3ad1c336f5d5f4b170bdda"), ("082a86fb7216286fcaa4f3a159b9ce44a6b158f48b78b2582072728fcf2e5494", "1189721dcaa94bb38c0fdd356f2f6e4f31bf240a009a5ca2d761fa46007ed97b", "244847d1a36918482677ed13855265d7f50a6159c934bd3b7df98a5fd6287c00", "0106026672662b6abf84dd82456bb607a02a690741ba66f50df65cb68853b559"), ("124fa3aa1c59116336729221b1ae5508d0c0c46afe16f53e8a958ca75d418326", "2520e1fe4b1677ccf381f42fc7e442faac4a23459fb73225e2456b0bca9da2b8", "0ca6a9f1fa2b5fcf5d614f5595d872c813864f754daf35ad6fa7d149aa97a091", "23720c1d2404b5ee5385f58a4d5525aa7cd185804ca6ab2580013af0f6bc33db"), ("1e8d8e6a8f3c06a278892034846212866c612bddf9b79096dbc9cb0da741a283", "2c6a457d70adfbc1e07ca926c426bca75d4795a27b870287da236fdb2b92eb78", "05427eb2106047b057254fbd26ad81f4a1658030ffc6e6d6f77e7377f4b64e8c", "1e5b38d1dd2b5343d1332bfd8e88b6cf6620092c6f57a7002f80c77a2fb5fd5b"), ("23775a4dbb30d83294ab8d1093429ce720f5ed53517f00445d20f4f0504500e4", "1e0f5f5f2ff3b9b021eb1f4204f56e7399f18d8ce5d1e00f6f2d6453178da4d3", "21f1df1b03a3476eb202ea622f29bb36c95012a85bda18e10c15bf383f31004a", "032f0b80accaf18402d662128f519ac67e7711e006d56f5af589d2932af2c0b5"), ("2f5a3843d22d3191c32d085386ff4eca1c9cd08e26f55171fbf856b0eb7bb2e3", "187bc61dd2277b87e4367b3fbff23207220753029da1a620c45241caf22cb1a9", "0e554b390d10358656040330f35cbd63ebe0ce18469e0d196c2614e1a8f10ac5", "1553395630a10d878d0c54032db6d46765f0f390b2b4ba940c826a9f94eb2b71"), ("129db1a01a05c0c91578e2aa6f0aa8e140211668a3213c000a129262a109e3a4", "141e9b00f5107a5af80b18631be5de8de997735d0bafeb20123178983e9ab13c", "305df51abf9d289f1b8ebfaa4df9deef2c48016698a816513d58c080df94ad88", "2014cd0549106328b7d965d38c0cea0846c43071fdbd4082232567e414d8e36a"), ("2c48f06bfe1236456dfd19e268364eba385b0855e8b1280f731fb48942074465", "1dd39ea252352b1d404b7ef38989b62a95ec65da4280f0569ffb80b4e80880ff", "2bad1cfe2f07eba0af4098d5de2da7597c3c3c4a2b2aba4b1781c983cd5cc0f9", "2c7f6d7843af7e70c8a661bb8b598a576db4587346bba132319ca37fafb4a100"), ("30446689b17f820e4f13fff1b5ac2b854ec3268d02f1b6d24f7c05da77f583e9", "2a761993c256c0553de834ed1161821f1f672d67bbfc6a81944a34ec826c1208", "1bf4dfabbbaf1432ecedc1d7f11d8248f244fe1ef723decb552e1dba109e2551", "110de077af76923ffdd8e860f48c3fe9c461b51c2669250def7f9055a56e5aeb"), ("303a79783a49a32cec0644c66900dbf7e180c071beab5eb9bcfd8834c2ff0b04", "1385f6037c501bafceead2d87bce95ff6112e5e2b990bab036f0ba9899764b41", "2c14dcf1a06f52d168ea7a22dbefd517acedcda29315f22a73d476b7ec5e7c61", "058c1342319c6a38a469ebdac7314e415b518799daab60180a0c9ed182b7ae04"), ("17dc102e2d15f08375b353256b0753aae01dbcb69d142e44ec546a1f647e3064", "21d69bd02d76d05eae070ec8d507fded94b9bad3ba701913e794a88297e93729", "0096f3b109186f841f7f0867f01730f2108fb7df55cc10c057ca966dba99dfa3", "2e624ddf79d2e4bed1be9262ddfe87524e4052c9a2c91475e45827311251db85"), ("1a32da99bb3fcd28e60f786a0061ac954109a1b1fe29ed6967b6efd52e2aa9da", "2f610d3a3a4261b96b1155ba88556d70e68a68b6488b0c3edad4d5e13eb9c0ac", "1df49d770c5792c7bcd761dd42b9a0f19ac9eae6112824d0a757c2f964bf4547", "1fdade3b73f0cd2a7f23f27ef32b4304f74fdf07f895cbd3523daaae870a962f"), ("0d8b45ee9f9debb5a0cd9cdbc16d25dcb9026d29422ae0d2fc6ca186cea8e39a", "0cfce2f1b9cf9edd5b54948a11b6c3102a5d96c111e687d157935cbad7faed49", "26129d3a85591897190e186512a6a882cfd09ab673b5c8501c82ff4c1a55b8f7", "1a59585dfb5caeca882b481086848eaeead14ceca736aabe015bc3056ce8c890"), ("134d305bd72c60148eba64601b5bbcc02c6a43f6a11bd5345bd4c0d27b364ccc", "12a94fdbaab74f5c18fd4e76f66d5cc766335f5e9b11a64b74ca935f14f58214", "24beb60862a9d1b007e68598a08eb8a3be8d1803a046936f09333e42ede3807d", "261fa81a816f5b2d48d561be3a8de18b714e9ad5938b38d3ad786d0c1570d050"), ("20d5274a61d1138f841a0e563e0467d5d05ecfcb37072c758eb4cdd30ed2ef1f", "04bf4259e8569a78684465169ee68c068f33e83e2b5ce5dc81ce51dd17e83e4b", "2b2956e7be0928b35211f761a824ea97286e4c7580047844db7a77ffc251ebe2", "10b99a7a19ab5e37be700f1a61444cef2cf048c02721ea7fec38a4ab4f806839"), ("20a068edbe8efaada34f5ac6c8fbbea08b02623b8fd20ae2f770be220fc7a749", "203f23b13e731b02f4f58a75eb11a44062dab1e4e5a1c35b07b81c2e847d73ee", "154880a3f8cf46f76a23677d95e472c3c6a179bc1aa9dbae7af70b17479f6296", "0a0563f6b74ee145552df4b123327dc0f9a345dce43196e18923bc1a80ec7da6"), ("21d5a184692817f1fde6aa26bfaa991d64cdaa613865df026565da8d802dc4d4", "2785bb9d33f814ba33b33b93bb190bac018229f4db037e24ce40fd812a51e5ec", "06de42c132bf41c4535a5530aca29233fe6098e254508b639aef9a4e916ef4b1", "05e3ca50126210b3edb4f0fc2d5c446c9118b2358bbc7478f03ede791be956b7"), ("12c717ea35efe47ed1a5d504d84ec28d24dee961eed3b9799236318813a32564", "1d4f43aeb8557ad4a18f14053192e0e367d736a550272de3b495e491861efcb3", "2705bdc3c23822f1ace3b4f24a2db84144a8edd5760c064aa9af90ac26f68f14", "15c659aa2a95c2cd29b10415e306115beaf38be5aa31c81b5077977d9255d3c7"), ("1410b93406b357671e7c151b8e6b686d31ccfcb1eee1bdb0636fd61d400d3ac1", "128ca69479e6db770d7380178131b41b7f83646da4425da680830c492c86236c", "2cacdd1598e885fe894693d4699efcf2778f0ecd87e3fe909c1e8712b9d6aed7", "0ce421a750fdb47ac549a737d3ab3459f92e9ccb78b4e6e328b60ed474d092cb"), ("0316b5cdaf9bcda4364ad808751e4297677f36bd9e58f1c7c4ee5fb289f17bd1", "162400fe39eab3980fe1b77c24d9d4eba3c727ab02de9256c5aaac85931904f6", "1b3254b2de6afef2a44801624919f292e599af7d609d0dcd91734cc7ca728932", "2c28812e51cc6a33e2552d6911b4db1d4ab531232de82ce2ed1d6809cd4485bb"), ("01c9ee859360b497121e3991aec2c7bb45e5f3061736a6a7b511f4e2f05c0536", "146e26974c6ba3319d5032f21bbdd0c11a19f9110ffa499af86265d450e43db1", "05403103f9fd061db0cbb09bccdf066bc9cb8555fc48cd4a3d316a794cb32863", "0573e7a15cffa798453bb9f2fff05eddde8d5288266cdd41ea6cac45b97daab2"), ("1d98192249e8f3ae2b773786fe3ce53e34b44ce9029dc3d5bc2bf877b505557f", "07fe450b50a12519b733b24ee718f8d6e098b98fe491a62730fecc0e90df0625", "299c3333ef1ad7cba72396d335a834be4049cf89c6248f75211681c59e3d6ad1", "2d1b4c1397353ed5c61494213a34a8afde5925a3f7016f8c74c21d4881444603"), ("0ff9c62c0b685e6ff6e8a51f1a6af33d4515eaedcf93d5e821b69f3952f5c50b", "1552dbef2ee2d871cbb47c1dc54c5fad48cdad3f0c088b1d9c6ae733f761be8d", "248e4301b0720c7d025bd0fd47f336a3216537d64aa2660f249edf5a92ed6254", "1dc5ce68ed8b13894cc711d67838df1fb3426ed06d8101ab2bc03e907e496943"), ("0eebea6d0ec694c91e6ad4f8dc8923e06c1c90a0b90f97158ec36f5511f95fb3", "119e45388b3f01c7021de5d8bb010e35c9ccf269de0e8571b1cb481a2997930e", "1e532ae7a4520457ee317ef2e35fc6346b662e98a85be3912c8a75dbdc338577", "1791cd651f28ffaa15e54bf1d58662f50d818f0f960ddfeb5897a1fc2e077523"), ("24984b34ac548ae71f1426fe0930cdc055a350b9294e7869cedea124c28c9ee2", "111824ff59d738e3383adaced40e8b599575c03e510382bfc84a272868264177", "215f00fc4446fce360747779e3e7ae962a9f01192494fe07bff2dafdcac327a4", "0e4202633215dafc5467da538627236d1c4ccbaae74551539079a73f53717763"), ("2bf7d52c521289f4e3be600b0efc00e802e3aaa39e18ac4402afb2c61ad0fb68", "160dbdfd60fd2aa438d8a80a8f7eeeefc71d11de75d95e438d4b898b80ebb206", "2265b4ef63e92f4afab4291bc217a396892b371aa5753fcdd8d305e3252e0c76", "2539970d2dd186b074117db3d7f9ab92ffa21f2e3905b41f704ca7b7567aaf64"), ("1ec0c49539076838db0f7a9b46c6a5c5baca8bae2b87082144d7db7f0e4546e7", "2948a5b1b3a34151b768a2a395a6f55c3d765817c2ac4db707b57f4cf3361870", "150652d4a88d8c39a1a44543bb61a17745bfe5cb1604904b9c194889ad08ec2d", "1c864cad1dd17544360ea95ccdad44f6a79d36bdf4cfa9f3605dd6566c9e731e"), ("0a41f6fbb891f80b76f88a390abe0dfc0de277cd68f26e33d6fe728fb0c0cef1", "0bd027c756676a145b189474c867292042251f05b1f7eeeda911e2d2c98d25ca", "2972119f4abb4e3700434d969c0046a4997413f36846a5f9042b6389e4f1d8c6", "13690e03988ac887c1323d174e17b735f4c9fa04bac58f0e671dee37d5f7bf67"), ("026acdb0316943b0e524f9158b48c5b792a6fefee6b013e673b10cc2de0b3764", "2b24e895d0a1cad601436d06f295ff6ab336a7b40eb1fd7da64c7fef82658ba0", "081c7b06185a11382463747dd138b57e2c2f87ff7f9dc2252352d7fe574a54af", "026248754d0471ab890f37dab5db531191dab0d818f72ce16b5cb62db4dd9015"), ("26c10c787ada39fbfa4fedd6c8a4bbeb361130c1ca7ebc3a3e0d231486b128be", "1c83fccf7297bf4b8be5aead9fc2154a415d676b2ccd3becbe0e7b5b486619a3", "09dbe5ec9e5443f7d0119da56a066c267e604aef601b04433d9ab516713ea985", "0039044c3e8f255fc49a46100aa64cd1045ec5a505550750acc00620f88c831a"), ("2ead0ad739c7587a92f478a4e9dae74eab81c95e0c51a16e999e0d26e742b422", "09f97962b296d344b922a135c162a8e5c08524fa43986f3cc47cef336cc4d14e", "217ff690052c3741904564c9424a35f28817dc16a0ffaed2a0529eeaa3fdaabc", "25c56a8fdc1c635baac9df2f430783273fdbc370f2eb4e640c3f526c1fc27236"), ("2405fff8bbbf54b387914b1c1a3b69019df298cfa69b4faadf1a46edf0b5afd4", "101ab8583f3be2cdf72c3447972da730f68eaf237e11c390c646a2edae47771c", "293e725bf4709038e118d9e7aca1f1518cd08dd1b44b4a439f7ee1e3d5033bc9", "10d0dc1b45a617d788b89bd88e1ee97be38a5abc1340eb40f978484520a71ea7"), ("023bff9ff57f12f069b39d2f15bfa89ccb2df52f0c047546468ce4df5e378d05", "235828df4a019fabe41dd76bf7c2370692960634a65440ae214ad58561736a9f", "0c97c1b9284cb966aaaa4f13e2457b632cd812655940c621ff5a249f7cea7acb", "0fd357a89f182fad45c3de0c18362c641188c74552d409351a44bc51d52045d1"), ("0a59f0c1482b9d093d30a3a468a5a657bebffc35ee2fa5ffcd98775de3fa52eb", "183b342f8970c3158161bed359a1547db78584460efaf382a659d03adc2cc2c5", "23b3d8c5ad3ccf3d6aef3772203e651ddfcf6f3b9ace19c0826c6913af2ce84d", "0f793e63b71b18f73c5b905ecc87be8559b5b76f2f4059931540cd5bb8d25e25"), ("03df5448bf46de4bb5c0cb1cffcb3211d4620e41974d7d53b3b666787c771e24", "0f82f52bb697e7bc4bf0b9be1570694e4441c78eacd3279afc9e4bbab3c8a485", "093eb0ae0354d8eabe451f580f694db61e2f9ae077c3b2677a655b030cf73710", "2cc4bc865a58dfa532ac278625b31ffcf1043ca99881df6394a57b995088fa61"), ("2539c05fccef552b29767ac4e3d9b94e11f4cbf7fc252a3ece4d0078948f317d", "132cf7df50e79e49c4eee832d102703f46032b6850cab50b2ae2fbfd8384851e", "1fb163338c3d91c6746c1ba803eb565da326eee7159c9a13bbe760c8a0948c5e", "1de13ee310e633769836659d8e04a94004d9841f5eff817b6b05365fefd16be1"), ("271491dfad2802b3513db900a03f9c773b735173ba29e8f32f6930552304ac9d", "141389f7e078b4ea45bdaf040938f38c839ec34f6a4bdf916813743ce8b3d202", "193f32a06f5259171cf06a25e2eef0fd608e697c4bb362af6371e6bcbf2c796f", "0145cc10309daefe0ee29a4f8eb10bafb012fa7da02ebc6626189b935c41ae97"), ("2517158119e51665e8c307cd89287b6a7102c2d835ffcf04520e641ca68109ef", "114893426905e21b26c3a59b4aa7b865b73f2bdaa3213b1a8ca794186f8fd007", "2e0c5dfb4fe8b3d70ca023c6b8ac4ce757ef5d50fc819d9078691c17afb5a6d8", "0046eb2fdf07eff0933e9ac03f95cf4f2bcf949975367ee3969af86fdbf31911"), ("04f8509a8c5cf3f26618f58dad224670182e2a1ac7aeab928e6d7388ae711275", "00c70283feb9cba5d6f19dff017391f04bd4177b6d5f4ea31ef487548f1bcece", "18a56699e750c05f25667b49ec74ceac5f55de3804868c43a03f34f1db203b9c", "09b6b730ae95274a87050b704f07732c9c7611c1eb421a9100e79d99757cc342"), ("263973ed243767a7639392f5ec371fade1a2253a91c33f2da77b2fe843c4db4a", "1e3f995b6951ed535a78934e434c146182631a9d019ae3be231e733fef153dae", "1ab2d7b00d39c86ad2c2bea75173e19bf163eb8bcd62119d777660308f722555", "267476c79becded6e609300ed9b1c957f7b9c675369b9ed0acb7907f1e770b78"), ("27ab9249f0c3c32473abfa6318589a4164e17aeae3f0b61aba3fd75da76d0b02", "1c9ef4291f6d8c7cf0a39a090c15abb12cb4ba43cbe400cb002092c4800fcc68", "16975d6fb35d4fee82d55c5ba55a6435c723739932f7dbc119e73c64fbb009b7", "19fdbd19ebba8ed4214d3ea83d5c8730941ce23200272e60c80148d30eb1c721"), ("0975783d3f9eb3d2764732d7938fdb08af626d483dbdfe6e9e4d74d18f34abe3", "24073d5f27f9237f975a902665b62e4fecf9f86ac511b4a1152f3fb43c358601", "0a8272ca0e5021dc3b6151a4a00a7b65d6021a081d53beeb49b3b4f79823f431", "2b91d4a5f11e07484057fd80f9d64db31c488826153ce0095b373b6e6b3bec49"), ("14854d34a2f850147700f7b98d2c2bd063f1dc942c3d3ada73f3e3b0a4154088", "24309408aab56b93197c63b490b7321a8313999d481204749b90246788508902", "1e51f13c71e3800130f656bca6f76960638bfa1a2f12af2dae2fe136a163b6f1", "1daeb9b299b4cadaa9d14e86d3e9fe4ebc93499e35e15805304cc1ef3114bcdd"), ("0e87f68806963defeee4635729552190bb94f9e861b82d6ee7c28a59d06171cf", "26e2de1a70aa9f725b7957319a31048d8aa48dea30a506355ba684fc54aad573", "1a1b0666ac1ec31cde7290d9adebd1b34fbcf709916ee092b35c2993cce7c143", "2da7173b1bf3d81a203c36c6c2b1a37dfa0e9f3adf20991d76a06cb0e804eb04"), ("078129a14e4d4206bc62dc7c680385d563d315017c07c0c59f26ee2a9651e533", "14997cb956647ba0be49b61bd0e7402c75845b188b047363404bc422c914f61a", "1ce2e41e483bf1d71c2ad0a9630b5d39209e766f1992a97ff2431f0b1550497c", "19a7f7afc4bb85348d07944f67baaa54baef66d9b0a01963a45ea346cc26a241"), ("19ea06d459e9927c2160056f41a0a5f280574ea0c56bc5caf2648dc0493ff6e0", "2bf32e89d16a68025e1f6a663b5588e381dffd010202b90e63c376f1e9f8deb6", "0e51a631e9e8efb057f0f66adde2abac169deb69f1e5c81e470b4a26ca9fd151", "02d10dc3bba0b8f58cd754f08c16dda0d22e05e49fc9951e421d175d9cbf0076"), ("1b49c88a855c839258aa0b12fd5228cff9ac0f81394c84700cec57e31ddab94e", "028ee54edf57d585fbdb8a92c52b6e0a93f6c1b06d058c14939fc92284cff0d5", "0260e99fe9a7338610b062f40509864e1dd4f503a14c3310232d82963c1bd39d", "1724ee75031950cd4d22f0c409b6573c5a210ddf0b9b4677decdd72b8c52ed36"), ("19a9c121dc2664d0ba2814b31f8700550672e2fc07795bb5fb2f19f2004cf1ed", "1488caffa49f606fdc2ac649fb3955114178f1ae17d02d193b4f12b7ce41c569", "26c73dcad2a953f23dd59f3b09d4a5e37cd40c3c8cdbd688736d2319af2d3986", "03b1c80eda5f8f25d611b017b8fed796c71d91d9e81239efea8ad21ec7a1b13f"), ("299dcfa9fd6737e886de9a1701515663c78c21ecfbb8791204101a7a5e0937b9", "091bc089c344ac7f5c6522cecc92ae41a534951ff65732e37f13784669c5c3f1", "11bc9e2ac687ca1cc3e143e7c7b68d7939057732aa686ac64724966bee063068", "2eb75303a10c6fc094fca2452f7879d8782f5448067ca9664a8cb52cd8728c20"), ("11d1f90f94b6e363e699d1672aeeedbbd3e1237742994ff1ea9e229381f59bcd", "1bb305bf68b8adf70ea7ff30fb13115fa941a100fa8f6deac7af409c84f02058", "2b69563048f57a38e1876e3d20d87299a6a1cc1fbe3e8c46405000229cb99588", "17e817039c0141bc55ad6259f6a06b1089abbbcb293c5608766839c25affacf1"), ("05e6a249757fcd5dc8e06c276e719cd12bd1ef746afa2a4fcae484c16a8784b1", "2094ae7b38862bebf452714ba9c19fb08d85ee5e6a17d8f506deceb87aaba41d", "2daac3b2878c6e0f43c1764cfca2fa3f00290e400371c0deb7e541bc0c9741f2", "1baa746a2441177525c3a28f48bd276ee9055099cb626a39aa4e5e2a3921dd52"), ("0aa177ea69cd36157789113efa62c0fdcbccdcb1d1bd357d907dbc8b2a186a89", "019d02a8432e8d464f29208dc8a3d670244f6c8ff4ce4d8af47093c375669f0e", "0d3bf52ce03696a9bac8b7bfcbef3f28e38cbd1d4a8fbeffbd3dca1f2835cbd1", "26a0fd50636d735971ab17cd4f13c01423d0375f8f885267be0dcd8a532868af"), ("02722e536ef6b4da3588b2967209a8e884faa858ecc2ea3ab4ef30d391e4ff36", "1245a13e5c93cf1d29d0d2719df7c878246454a2cddaa639c3bc5908f600dffa", "1c06ea5936dcd04759e6e6299eee50ee77111985295a7065e8fb6ce8b882c371", "13be3ada085a92e111b63899da758b77ae41227904a94db8f0168918a4ecb520"), ("12fb7aaeb9d596d7298e1c0e5f3fd36fc6c2e4574864cd2c7eded4a88bf297e8", "1a58a7a76b30440a8697ffe85917744680a97e9c888b8f31bc46d17cc3e2d3a1", "2b81b218da0bb555dbe4ff92f227fb9a6ac9535eec7f7e27a49b3f8b53ce7382", "075e8cda5a1642aeccb739e8ce92079f42926685153d63ac898f63b936340c38"), ("29cf194abdf54e47903baa178f2b119536b954eb5dce2011971ade3dc89e2ee1", "03abb665fa645a204adec27d73152e67c1cc33504fc5ed14bd3333bbe29f56c4", "0c8029af8662aa0affeb0e970f2910e0952f0cdb29b3bb74f104aef35c8b28b6", "08a2f6479f4c5195fa44b29554eb4da6aca0d6e2fd383b91d6e3f144daa85837"), ("0e27c012b04c3029395bd6a6a72a9bc84a1959d48c37240123cd8100fc949e72", "03538ea140291e1eed381a8e25265bf3f5eee7acc3e4cee3a9772496d4c0d421", "236e548f473101ed605d75f1221db024f68ce0a10a6f71d3278823db9e17382b", "207f67fbcae1c7910b9c2b772fe81986bb4e6877ff85a4f7689dc10d46040125"), ("25c5da35392d9664ca97c3ceaadef5f4298dc154ed33beeb06de58cf52d6ff08", "0868cf0378314f91c7f8cf8e67822372d14afb96a94f83ece91a4657a9391b0b", "190d847c550120c385b5e2e7cfb17a320bf64d7e9e9af807b944e05f871082fd", "1dc4fe6de5a2caa1190f794943dc29db0b831f3b80f62c507f8f14a2ffbfda26"), ("273423c7968adb964b65c03d20d60e04073368bb888c924215fbccbde4b657c5", "00ebd26ec0b9ee029a55553a7ea01fa77d55c7442fcc3551b058256425deff72", "033421ac955534bd8276316b78173ad47cd4c41fe8c4e9e3cb1a21727cdb808b", "0025206fb69cf4f641d839e77c56a139ac8e563fc1a9198f26775c971d160cf5"), ("2bba351f3bc9e258c5bfd3d1f3c94731e48842b50077dcb03bd5e66f271b67b1", "037d31bef5e5b6b53ef049283d04d26f4a952e0a91e8dd466a252b5b670933c2", "00cfbe8ccdf72ed6a479fbc6ed21358cd4070deb3262d9d903d5082dae0fd5b2", "1b8394b5cb0c05247d26de9b44eadca6f97153dc8194bb06df5a5a89a2c0515f"), ("0a0a9b180d27dead81d02bcb186a4f6496d531bcf4df4f5979dcbe0c05aacb30", "11477933f00d29f7359488a6e84d635152dad23b5b47cdd01119ba454384dbe5", "17309732faba45b3cad821dcd70c76573faa253eefb4f50afc4e0e9599f9613b", "0eedb7c2019455080a5387fd9fb542c7079e85595b8ba591129c5e55e7f5e8ed"), ("05798cc7fb1728da4c4f30ac5635b3e6fe98e5a6f78b92a38fd995896d00cc32", "181a5302e7a570694fc73b64b91abef2efea387a29ccd415b9fd941fff2201fb", "1d8a45de23b2f7c468acac114ec1d5e5b6274329ae3a11b400a2d6833d2c70bb", "1719dad43870915f82524699fb141163db0faac417037f96ba075ce4d5fef18a"), ("036e2711a07f2b510e7b500cf0f9b1993f7647c8e2167399ee57e96bae45b56e", "0533056dc015cf6e15e9a63e1f7bc521a781efa7c0e93c6d3339c2a358a4c727", "131ea20fa34c4007834122bd8aef12b6ac4b1524849da714c5e2bc2275c564e4", "28a810b8f23b511a22e087496a4747c3350cb76194f5d78cb1c71ecd973cc236"), ("1ec04d0d9f7464d1c005120ccee1fb9b2f160494c32839981c9bb7bd71e6fc1c", "201c62f535cc856d0aae2bb99a04cf22b46e1a7b4779dcce6aec5a8b09a239db", "26e30524a9b98165e902eda30f8bc38b99703f793ece5bcab243bdb1ce538b94", "04429d3040dbab23723c92a2785991eb8ab7a2b703c8cd4da78b67f1fed2d0ad"), ("26c1a28446da312419c50afe29e606f9724fb8bcc3d4edcec94ebb0e2ea7b20f", "20efe7983ba495cff08ef868473a2f8e24465a09fda0d6c30ee4e00ec8890197", "0ac74c12599dfd3ea4dd892160536e0e694684f281474aef3a3a786d44982cb4", "1931ac532bd71d16c0feeca2b7de3e3ba56e621b2da8855ce647cd9342e2a861"), ("0cec4c05cf1380cbf7806e470eb776db4ac6be4c49a7ed3891b514ff7d103ccd", "222dec88274e7f356415517761f464ccb84e069d8d6e2f9ece4de807ff1b4948", "09d9f7f22163959beca7411e3d42452bd1d7025f5a340b50e82fb3c280d06186", "085af68700c531f9e391f6bd678378b16b268c418bc51fe28838bb04273c4f4d"), ("0fc5796a96a58106ec0b7a33cbe428ff6a1b7c3eeb346015e179986f5e89d266", "2e18c00ce186204a8aae054c86141c573480a4ca661e46db7f4866bd9fb1fc3d", "10890e4a1123bb8fb0c4ed7f48bbeee82ff93ad3d1a1535dc8b132ce045cc757", "2177363268adc1e18b9ec91f61a352a2ab7e226d88548cb0f3fbcde32d740479"), ("214c3a964995ad3a7d0d2b10342a5861bb66460134261259e1c60749ebe711a8", "22ff9e456da64d11a85b4a7544cb6b521bc22df2e90da9bbf2e9b0bc380b774a", "0bd394db47984e7e3f2e64d2cfbf47ba3c214c58767e1792a5ab4eb6c9cf0954", "09fb145c62f67bfdde65d203b95805a4ba3ced8e788b6566b21ed75f9a9eb721"), ("1fbe5f51484853a91accb74e3956ae48589af38721b885021539864b6e0551ad", "2ad28950ca6ba7aad6e6d82895b7e343448d678e3d8add35c3402b9e64ce80cf", "27cdfabc9e3008951d4bb68339492c429c8a8b87a2f5f4f5b6a07d6067824149", "2412ac0f87d4bdddde393cdf7b49239162772f5d81adc3a739ade96ad16f53b9"), ("058542c783d668904384a4ece3c1bdd604c0a752f4d4a16f963c6e9f4e5d5e1f", "25f99e77d1a63e05eba5b53154dbee733ff3a5def1daac2c4effb492ee0d6f38", "2f4df5677a5a7c1369806c67f14a15a8f887a184fcc33317eba1d1224a8cf15b", "28bef572add7716ca0adc81dca6031f5aec2cd2cc0ef06e6dbbfa4017632e988"), ("252b6e4dbbe37e307fb2d8cb7934d1c9c93bbc6577a432cd16c54b6fea833e39", "2cc2fad3eaf29c40cdc4ddf67da48d7c2c599bbea689b74ef7694a96b011518e", "10fcbe91a688a4a3decff517c5876fef935df01d4118e667e3f839c3ba240ea5", "0257ab35167be7429a174eb6269f2be403fa2c3b9e0e7c335af335dd00d36bd5"), ("2f00efed2ea93ac51256d9e3774ec9456a641129dbbe0e218e9e16ee3157e4d4", "0110120d66e8c934aa75559db9c21d0dabeca93d6b27d659689a5854ffd02ea3", "249990986131db7d4522c7cd813062234f42ddf83a3c146a5e48cfce71e73d59", "04555d075e32f4ed4f6b3319b9a81d4b84452ea0ea910674bff91eb2586e25f3"), ("2eb99341f39966d21ed9f42b963f99c658838d854a5029abc0fb236b03dbf9a7", "269fa9d222b87e71eaacc80d5372faa2fc3506e6966db70bd38c3d364b679db5", "1256c38a68c347386755170e50aaf3f2503fd9a6c34bfe1a95b8ec08e81d3731", "10a395707e291037b37eaf103d8a33f617118acb78c1edda72cad9b27d7efea2"), ("2ded73b1172f7ed3babd0ae041041b7e8db5f20e3de61bad47fa467650821914", "2ee3d8d4fa8c7ef04cf2fcbf3b78d45c7ba424d6c65f03404dd65d6bcc99fa4f", "13d8efa689b980212d4cb2de5e3903e4459c4d12cfda83ec4beaff7ca893004a", "04634d001b98995bc836888ec7822e3b1010445a5ea44c7040995b296612f030"), ("0f2d37199df5ee83d0693fd7eaa4fd62e3455a026292082541eaf61b98127048", "0429b7488a560447dab233d25d1d7ca7ce9a10d05c2c27d0d333d7884e464310", "0abdafe04331d3df773bc013c37b7031bfa33303671d769c353d98be9a5a5d3a", "0ba849dcb5814ce7b714a97183b721d51e234811545682603ac3def881b89b8b"), ("21e8620d81a9a1e541e520de3571c9ea3eafc3ab1754608471aef02267afe2d9", "197f1d796b31c41bb100fbe89b6b791b057d1dadf55e9ade390c34e108e6a0c5", "0ef6bff0bce2f3dca3e27087c5397eaaa12c577b9c21bbdd2bc89cce87301a23", "2e33ca70f3123c7c570d7f5ded03a9a9682f434a097ec34bec8bd8ddfea4f342"), ("192cffe720964150a11fac413ca6435a4dd275cbd75947b06b1b7fcdde47b693", "1d1cb4f1c0bf47532b04cd316c1f2e22e5f95e1c5217c1639ec1166c4ecad12b", "0347c5ec654b77ebef029e763f9fb44914e701909bdcd804ee9cf6a2ea47a62e", "07086f307560c25e25e91920e386848f38129dcf14f24981d8dc8c4b4c611eac"), ("2f1d85dc065c5673645d5fb03d1705eaa3ee6bdd4ef38707577f881f2112a984", "196d32f0a7ba1acb4bf2d53be2140cf7fc36720bbded760c16268623ce53ada5", "098c5192accb17ab50cd9f85c1455356e514f9b8a085f595b689d99290068992", "2b0c392281ddc01195fd06d944ae3ca579843b79eee09aa06c44f20a6aa64bb5"), ("1499cfca31a1eda418d8fd9532717338a7ccff9af05d7d837e80fd7b13b28fba", "09763d012443e2b82b1af25164931b19784b201f4c39c265b32431d222a7a2d3", "2684a57a4b8dce777d4f0bab79f7c3f62cd190f7ce1fcf6c3d29642f2dd61772", "17c9421059806da005ba4c92ad5007d142d417603b1fcdf21d1995499d1d53c8"), ("15b5e059761c5e8b8286a77a9302a2d3947cdbf5d8cb24ccd232de67b96e6916", "19c561c66f24d317d6b7eec5282338b34ae6db2ad52fc1d4e11c436db5f19ee5", "26f8e75a0d9548f665c0f9aaa24f351963719b45c745411e8447764624342e22", "0eb5a3c08f8e4618af089c54a25300d10908af7dc8096164f71d66df42149ecb"), ("28c3ba5967dff5d81d2fd38e0d767dad64ec83c81ab437079471e659910437f0", "248942b9f25b5c421df9e2c7c4d32b4eba0faeba71f38fa8640a06940bf877db", "19e2862d742745aee93faf4be8e833fa233641427b603fe71a876c7cf1150cde", "2ee1472f4ca06a1f4fa03b6abf6658815a204cc43d42cb244a11f5f42bb8f28c"), ("29bc1fa095f436e8013b93a287e41d2b90e671bf3e49a3e1f676b7a7b08eafc2", "1604ecf7f339f9eaccfeca54543976c19306f420decc8e5e05312f70912b4147", "02e676ab9fe7b0a8effa9687cf926ae6568b3bab0081b36d3fa66391b329cd96", "0c4e5f1c308ee6125fb86e60d559eadfd795ff6d89ca428bd1e0494b974b7248"), ("00d18b31978989e9ee3f01872422d2b74840ddedc49d856d5c3c544a1ce8d8ce", "0d1c35283620f1442b4b2bd85833b5c6885b112b2840d08591eaee8985ffc055", "067dd8ad6280ca4e5e821be9495cfeff4f960eef5316c3744bc770504b580ca4", "2462b074d9895034f305e0633807f4d2b56564bab60742f8dc452f804a35163d"), ("107d8ef9ca5e649214e0101c256ad77b0982eb924dc2f0bef94db5efc121fdaf", "1f080d7a4544132b603cfb8b82d6498bfe642e400ca6b3bf62129ed11313ba06", "0789483f5c364a82d1fc6f95f3dc967d34b72d9a805a9e11e8d35b63e95a299c", "1eed885d9e06d8b0936c04b5af8e260855ddf1d58ed13a1cbf6b76ff4020b828"), ("16785c8dc4c8657b5f3f8f6afe92b2df9d833fc70fd71be1d5867cc6f59dddb0", "112ebefd129f36be4c0329e94ebb18e6dbb9fb8cd460af749fc54d3483138fa8", "1b2f0acdd6fa06c4bee8a47c6caea2a3e3734aae32debe6ed4c9f2c675e4ac05", "1f302790b34ee74c01c78e4d16d24cf660882470cce0f5047decbb0c00728ea7"), ("0dae18bae7a4e9a7c37c4ef8e117146bf358c9b86cea13276ab1fa8e5314abc9", "1a08f52aca1c8fca68126aeb3a83760f724db756b254f21efcf285d3affaf869", "053eb85232f971d90ce098defdc90f32370557aae8b0ca9a0e5ccbe6183244d3", "2beb188efdb7ba92cfce010de63680a5ae6b84c56adea3fc0e525d3b855a75cb"), ("04f007491510cf8b90142fe3e07090db94cffe2d3d178bc1c279ebb235c1d93c", "17cbdda223b84fc781bd2d518cbaf61762982f2488434c5fe0b80f3b854d42a0", "2bce3b6b55d427a491b16be1505767132a84494546d3b46470551e00f81f10af", "060415abea3d6277449a89d91daf3aa8f7e6439af41be1fa0353ec3d5c806da8"), ("0b81a417176ce56baf5128f400cc92abe839e1f7f753655d7573bf4fbe6a28fb", "2126aa3f0f2bb7de3ce8c78b520a3489006b5afa0958cc06ec53ae6c064d5861", "2e7bb1b432c32dac71325f80a732cdd5f0a901d25f2e23ac8ce45f64ef838dea", "024c846df976a610c443dd2c26cf029f8cc368e136eabc29e232992714db10aa"), ("043cd2bb64fbb8aad972d0896285c47e1417f07d2373959c231135a8721d37ec", "1182a51f7132b6207f89405bd3650c6dc34dc994becd8261d85b7cd9f2565890", "1d569b5470c4c99f52a6b4d4d8e05eb09a009317a6b0ca576ab64394e53367a0", "29601cf4fdab2965f802129be83cc4f139dd2913b371383ae99f2d6a3b391f6c"), ("07648e37d9a4912212e8cc7bba4b90535ce572943ee035e147595e1e5a877dde", "284037eebea8cb72c04afba197e2019843ec75bbd39f4a9d095c3e5221ad0e62", "253a076d40736b82f5cd2d477042346bdbd20746cd7ff4d2332a40fba50afcf8", "1d749cddfea7edf0f7d60f3e2bca9f59c6b80ae638eeef0f8071cdcd3e35340c"), ("11ae5ca31d170381cea1f808f140e13b8fa1749caa6449cb9e60ac884fc77438", "2c8234bac052712d23dfcc729f31673643c7e6cbac806dd9e67ad386db8fe0d2", "2d5cf73ac68336aab7dd1af53436a7201b284f3d3bbcf285451f93ed1938aa7b", "0908e63ddf8afd58c99d1c3fb32992d71f6c1bd873592b9834cbef4bb949ace3"), ("148a1581cc6c90fc57659f49bf484c1f726f8a58decea3f238f9dacedd7c6d58", "0fd2d953657b16c110bc1ba3ccee8316ab326a50ec94f2ee4f57268933f15bf2", "27e8b37b8cae2c1a93d6572c0f0aca9ba45470e225f4e92c668c7a1f84bc46e6", "120ba3f32dd31142fdb6995624d11e694ed142a83d25f0d71ec9a5245e71f041"), ("04bbde753fa72d6cf32a07a1d8d90a86f43eb722bf507ccd0d6173300cd277b8", "0fc3a2d794589042c4b58939b62aefbdcb65dab1538e9fbbf76f52c41a7e7825", "2eb4b38af876f460945e645da40fa54ac2dfa8306e21980e4a467088d864b931", "1acbdc5cc6fa0ba26f9b66b4380b89ea404f1377c2458509a963df711bc2e121"), ("0d803b62de2b1f8e5116fc1c7a7e3405bd765976c38a202f765d2ab000a33522", "2839f2abc84e77bc1f812eb88545da2029e2c4403eb8ad7c0cd0b11693a89845", "17babfb65b4c1d576de82ec6f2ec40a0a9ce04c46adcddab221db3c8c101ada4", "0c8f35bfd4bc3b9620b90038db355ca05cf2371313bcc77b1d543524b5acde9c"), ("2a15dcaced4ec4c6c7c1a72c411acddf55c379f77d84908294325ccc876c1131", "2165b6f7ddb08e2b081ad04b9cbd1a802764489d972249f11b6314d2c59931a7", "24dd8fd14459db087059bb83c02bd3e40367bd911e107c646dfca4aecdfce065", "0b2b78d49d2c38b722beebe1ef04de3f26c4f9a7fc1d73f512fbb98c1f48287e"), ("2a1e6d8ca7c9ef6ad2914c3cc8b4182d3c95531de65385bc29b51cd600820771", "190245b58a08cfc9aad4b18276a303fb144ab12e4564c90c04ee767837a4618d", "256b674d045fe25c506f81253a8f61492c9233547bb460f55e25ff6e5dd6cdf2", "06b5bcf584162be85242aed3c890b5ee3cfe125b18c4917a11ceb92fcab4e629"), ("194f620b978ff11219cd27256fdb716264134dc99483ff4687abf1934cf8ad78", "06c27bc5305742f02414bbded1c3a7483698450c22b9e8b55618f9f4c70f96cb", "293f16b835d9ad0a1fe28edb09c1d69004365ac43de5030964b99eff7e43a5f1", "00e5c292442558b27839965a05e74ccecd352eac42f7397e04fd260ececab083"), ("0820908d44669c318a114862a9eb9b2b6be48e947cd2c2c4379669028241deb1", "066275c463a1b0b02ad98d7f1d9c438fe3feb4cdb30aa5661dc96352c0ffeca2", "046e319d104578b42311a323b601e6f240f274b36ca5cc94f09ffdcce5008ebc", "0473aec7fde1ec2fe927a7f0de9ace19bd3dab87b9059c8056b082826d799796"), ("03f9714667fcc220cfec85551d027c61e8a72c6603f7f8419f51adfed9bcfde5", "021b9f14c353405eb286703417f86ddae8e926a8f3bc6dae1d01b4b07eafe4bc", "1f9aba0df29f88797731d5340c61b85e124d61d2bb80582f04d9e0999692d628", "094d2ecf0e4b606124c1bf8a66045a099bf29091fb64bd5ce1127fff72c70895"), ("09e23c1088695ff02e4a7e24013252450c9c8dca98debda5daf453702e49e45f", "1ba49333855e95c7962af031f1f23df8ea2fb499a834b38dd5f57734b859c81e", "1e744feedd77107df6992159a8a93e778533c74755f6d73a8f780c50cb044431", "06162c0c655e5f119fd74c9744fede2d43338cc30d5fb1c16ef2f2ed4fef05b0"), ("269fa46eec87a096278f7872e5cfa0dfa766c540ae0307d4886b42c38cd91b65", "2be707720f9a0f907fa0c7b8395701867e15b288250ac6a59bd97d6abc06ddb5", "18a6edb7f7772a7c00dad5a8c833edf7fccd616a0778813915dc516a5943a438", "1ac23f3a967d3802521b4a62cbc47e294663f88de7c845cffa93bb10a49dbd0d"), ("0c6a648fc4d306ae5360d44106086db3954a4fff023c4715909b44fa3e8116f6", "25fabcd68ef8e949ae0b5168d569f56f24a58e8e3ec70eb5a44ea7e876120695", "2b1d5fe0bbbe8f0a182442466b263391487d0ecde083b4672cb94ba9c32c0a00", "10b39678811f5285ce0954fba8be4ede6f2320f8ea684a7899cc74289401da1c"), ("137af94983d439585ca9e153205ca521545d96b125fae89c235d0291a5c960db", "1a9f844eda52c5a01eb2c90175e840b3d3dd69311b4457256ca812f6339bf374", "1183d877a472edf0a4f5c312ab7546295d2ba69bf9781d9b9e2f3017318d7a45", "01d0bb207e72bd6556594a5683ad39d51c9207030cfaa9dfd37b3bdea0267e09"), ("0f8e1ac8170e988a19320b6f237f7624d6c8b6745e7c9fa6e58864ff7afb6975", "15c9f0f25b53efd58a98d67a5f6bf6bb29e54874c5a222661bb37b2ea389bf70", "0ecd22a6cc2594193704fc58dba86748c680d2049d8fa33c305ed12ff1814622", "138bc3822cbca6c34479f62206e14788555ea882fe040e9e3d69c1171ab3d648"), ("21ac65cb27265c14235d94918fe453f7d93ff0f16ea65225ec5efee6b255bc1c", "1f8de352f80085d528e5e4ee0783c2577e74822fcb8a0483c4e5207437177a3d", "2a12aaf0a37003ec804b72980640669e4cb00895a1b5d492f1b2bfb73a642eb1", "1b62a9094a546c652b6ca401b2cc144650d1a8ed6ed458a4c1d26bce2b2f9f26"), ("0a456e303e2425f5fc73a512a27d7ffb9913e49e2345f3224406286a7543b7a0", "1a1ee13779651a6c9be7dfb340ba40511aded095d64dd1870457ba3cbff0397e", "0210188f800b3a8e9d1ac93548705ba15b308fc5328b1c0d52471ff784cda817", "234183e89c60fe4006ca479aff55f622b83a12f3807956d32f5d55cebcab3a97"), ("2eb9ee8048c6768d14ea2f2966972a26573f288aaa71f6954b8fdddeec6f4778", "1b93e2d7f36ea7aba93b98d053b92f75849c25a9e2c4a6a95ab938b6451f3bf8", "21a9e5bcaccab46920e53d734522d4414437e87fd16d6e8858c2db5886319fca", "23b341458e42150a865d8266c9b0abc2a2faaa1d92548834498d4a14440b32f4"), ("0fb6ad7d5c8e08b39c3a0389ae9804745e888d70dca6740352ca6fb88180e9e8", "193588fb523759c1eb04aaba91e2efa6fe06adf350a8b2f7dc5f4eb530c4b654", "1ba1dfa84231a99e4b9e83e7b4e54b6c5fd3751d4977e88d3c6ed6ff878eaf1a", "2cbc9dddab9b1986bf64c904206352b719acb88e1d945fabf18de0d4690e5fe4"), ("24fea9f9ad5abf517a3663bbadc3a6a6b16e14c79cbd4dc0251e26105db3b7f8", "17d02707588a110837ef8666b0bdcffecfee03e44f86d6f1cb4b9efd1dd57438", "1de4862f565569c3ca9c8c1cdcf7d8653a7fab58212dd0a5643da7ef791919e9", "00fa44e4b3801d783a6c586cb33b85c7f78b4d05c7c6fca61b710f44a6d22d7f"), ("102ad786529522e4719c257ec557e62a6a02ed6f1fd2ddae3426e4086234f2ee", "1b37ec71e12d4ac3107fcfbd6d122cce610bb64b1922df0db795a8723159783f", "1a1ce58aa483d85b8f9e937e138c2a4da6ec96f82db7e13912f0ccf2c10e911b", "10a4e82ba762f5c04cb64f2c960da5b43b28110a8c1da843b21a79bff7a36abc"), ("1f07f00d4175d0ed629c928859cd4997ea72dc29ac39f2217e943e6eb809eedb", "1da98ab2ec4d9c7b17579191aefbe75753b6f2f79feea67f82aaa7105e237e4b", "1e8fffbc00839c293cda22b7cc9871ff27ddb01694bcf4270a97d9c02287022c", "1036a3cac45cba7f5b94db476b3534382a6fd8faf0367577894dab35f91374a4"), ("16c07084eac0ff3c98f39e8eb2a728b7e05af479ef9e3cf49aaa101727b2113b", "1c5a75e5be775b2d8bde99c119f2fa25e13050376f14e17cf7a89c6bdd07c62a", "20e11b779e1a9fa60f0b41d65cfd432d24c6766d58e8c853b785b1e987b0b733", "1e538e7b6e4c2b81ddec326af50593273d82b13f1eff9e3d0403b0c2862bc2a6"), ("006a5418b136258abdcb539dc33ee5df3b8e0a8f6b321412b9b33fc684188a48", "2cf7348d12dec084f96246c09d4aff8d134dcf7180429d2657643fd45472279a", "26d44173fa492ca026197e2a6ff4c9e67baf090f90f65d72154084d12d85cc15", "05e62a756a62607b49303aede7f27d2e8f6c820e638ac31b1131775c0204b9fc"), ("1eefaddf8d5dcf59666df3c96fa15f614ab963c0e9f5860cefc4973c5f8ea294", "0c05fd3c1da6ac7a8fee759af0f665c7de2edb5760b3d64a6da08a84e8c7840a", "04d1eaef256943094fb36c65d1e490096449efae625f2725fecdc3059a4329e5", "244f559d222ae840bea52828f4e53036ab140bebbbb7b4142acadd7016403cc5"), ("21d94dae0dab11e2551e0cb5f51d9537d50fa0e94969735802da1f312a62cf65", "00868a642b4c35b5799ec01e7689e4516b5363f2de53c637f01b55e41313d9a5", "2f936516f21dbe1402a76b89d57766b8b05e81d39eeecfeb158c594dc46d93c4", "0639683d71b7d38c241df32775d1d105b9992125305492a7cac65be2bc9ace11"), ("18ee5832659d83f8a5cb16a82d3a0d98fae40d4e84f3f9063094f22b7931daba", "2abaccc1daaea4287619b53fa9f99f3b395beba5ab147ae2f52c4faa4d5a77a3", "165b77b25ac382c511e5e6018079493c0a7afc410c82157e481effaff46e7f01", "2a9e8cfe8c3a58c0a363763c07c6b4e28c89fdd4356577cd4c7c68eb35e973ff"), ("2d2453bf079027757d82c23692c1fd075f7cf6395c2ba5319db2a363b4e8673c", "1e5ceafaacff34e25487a528e33626afe9df8a67095d6d275f44029717afbedf", "2ad370e1c5a9fd7209e49ad1cf543d5bc30aa6b88a82e10b25f8e157e948e8cd", "26e67661f9ae94ffba8620ede6bf6c0686cb2bf0297925c883c7e18a0afb86e5"), ("0ec658bb2c532f56d7ee46ecf8118eb6eae8eca89fefe1485292863770bfc943", "23f35e7e20324f07ce9a0a403577e4027dbc415741be4213f4a00e3eb329e97a", "02380e34cd5c83470ff560f5973c6d528d7e4133c96f78b6927fc471af633660", "1e8330a950f3d039dd556ee6371354046c77901d2019dd5b0c275f9e8201a963"), ("26c98d4cf794da4d663792f4207087f48e6efc810c818abaeed56f315c0f3e7c", "2944ccd98a987f975593533421eaf526d536a8ee7d385039b5751e97dfdefa82", "099b8c2d1f26b285043bf2ad2b9de3993e357c2e839af0d7ce064eec0e887895", "286b68b45b11b6bbc986ca136e3967cf53e6bf6ce0a3ff436252919d58bfa4fa"), ("0a2f61ad3f10fd011409de147dde92d1437c826f4b7d24d4a77815855a677610", "0117ab855cc14632608a5a48656f6ae53d0e88960738977f03bdad89d0a2c1db", "2d381b9cea4f8bf2672e0edfbbb6b55b50465d5bda1ec57bf4e0d24ce8bcec43", "037bafb36d772cf94622e80a603f3eb119a2bd4d5ab13beeb35235db346fe440"), ("0bdf2c41292b3b9103dde2a58376956d02b9ab36be6e6db4a3f4c50bdef2553d", "1efcf21359c12851bb6ce7c805a3930f57674dfe05a207e6efae6113d3ff10e5", "054e17efad2e1daadf82a2763216bb0aea88fe5acd6072123efe2c8ec811b525", "2ccea9bbc790194eebce4abdd10348e2de463bfe52654e7167d8a8bed9e6a75e"), ("1d147b72028778286bc3f0a0f01afe226614c8079c775cc3f6a2247d84a9c241", "1629d6a36bf8919c226db5f76ff4745307b1c35963dc2080c808fae97e49a28d", "03b65ef42ee86db3f6b37b92afdb56006c05fa70e5d7a55e963ee7b67cd9a65d", "24d429e850a72de7158e028ac60664d90bddb8dba68db127b9327f1e109cdcb1"), ("2bc0ef079e88978afed28f28aa1ee3abe754936a807434cf9532672223496fa3", "1b6ff254f7bc2ceee19f9d8f889235e0687de9da704d382e34795e1985f00d01", "09f650785006c5eaedd5eda2c0d84d792511c9f6aecdb8817850deef13f241f4", "1f984fcd3659418bc5aea5a7d7b9f905f124d006abc3a3916472d04890f849ff"), ("2ce2ecd85845df3237f0cc520f607450da61b9fd505c29f096ce8e630d08325b", "0bfeec752d8720efdc21ecf25111c7252eb64a9dbd0703db5117c1610ea8f719", "12853a1c5a98e7fab4e59899fe0abfe8b8b62b0d857a5fc78d1c866f7d8e5a1c", "290935f4527b0d22ca499452b7e188dd9586a69b54e98e911710d37c272739a4"), ("28933603a8b4781d7ec7ac3c26ce14d9810583ad7388e622f397de1d0b618607", "1cdc4fe7917fcc5c38587093e1c763fd106d4754460f96c9cfd7dc72d89de0f3", "301eece079fb8256e0123a47fc3f3155a360e0f13211d0414db221bbd340a66d", "23c561e0b8c56faa71d723d8488816fc9fa03941ac5f5e566d5fcaab1db224ff"), ("229f5f4cdd3a777e03c1c57ca9d866593c54810f57a642292b3b1a91b98b7647", "01b609644076bc0d73a6cd47c75e9f36b5cdea17894450eea553cc4e67c6648b", "1ecab764b23683518d329c9b846883ffecc8bbbf000c051e160fc16ab2b29246", "06ccedb479227cbdd919375caf8bb30d5dc1f2fd3210f92afe54713673ef1227"), ("1b9850b5458977017d480cca90b5e22b1be9447128305e403f45fe2e605b76a8", "216ce7c4fba09d95cb7b95922750b344a2d8c8c5a80cfee1a4a11de90359fb8e", "15f138297040d976af436c88b68a7066a133c18b950b2cd10da0f1065d9ee056", "1e71b32bbb6a37aaecf74350e011b85806104285d850d2cd7732d0c4dbbf313d"), ("15260433c22d08dcd905f2170b352864b83279727fca1bc6b076a5f09167fbbb", "21c8d9e511b57abebf0fb7af21a2633fa1f9be6f0e617cb8c09792b135f27491", "0346f40a58ac0a8b4efd154171bdb4f3e4fc90d3bc202cc0cb933b37a28d66c2", "15eb087fc8391ca64629d512238eb17f4468cbbb1a7053d5edc0cd3e0dccaa28"), ("16c76560c1846f7768f14a74761857814452107beaa6617687fb4cbf825a18ea", "22bcd3467ed565d3a4f8ba4c8fc0bcbc9cbd215300d5b17ebc5c548ff290d005", "1a02b6555b9ab1cb6f86dd110da00315859a1a04b538afaf4c60bf5b63ce5140", "205e292cb2eae5994145861ce90b4ac2fe99749edcd6e4a298b31aff9390c66d"), ("1dc3405c6869b4be153c9d83a2ea711512a22bc6e8c19789e1e1c520b9226ca6", "0c3134faf2912ae69f63be6c0f94840bc429e01b1aab8cb3b041b0e565d91ae2", "2a41337b48061270ff4dad14ae087a29ff0f9f0db555965b17f2165f3fcc4419", "2cb2dc4e4b084767175b1a05aa1f75f67307cafe47de4239b6c2c12b8ddfbf18"), ("16bcdee1b7d72367bc5673177e94838379403ec27197c138fe4ccb08fe7567c1", "05b5a8a6e78e7e541ecf51dc2e6c8b27fbaa1b38b4eab5c644b0cb05f6b04bc4", "0f96d4d75e447dfff40821cdcdba2c439ac9b7ff2f483299f11b6d04a5643172", "043f22076c5440a82597caf7d6cf462232109dcbcda2b2f72a9a9907b50621c5"), ("19c234de3baedd09bbc65a1ea331f9cd3eeab41b1ae6730d11781148bb2f7689", "254622f30ce6a9fefb2417e0b917a9c60aeedfe15e10e5d62046b073290875e9", "272840459462b325e4c920c1765a39ee2b8aa0358f7e8bf439f62b0274a28556", "0f6b1c6c29c1984b4e76b6179113272794d1347380f962566a99603da4d256fa"), ("18a4b736b6c3995c3014e8b938e1c84c17256d7b4d60c7c9538cad043fa7f6d4", "2c2b963120e624b06121cb6efc7613f8f74c77169b2fd20be9e6cce7c71e0a43", "1382978d7461cdf75935966050819723595523fbb9bbef6e9dcf749e3f4441a5", "016c09fe6d503b3a6e0dcbf34e2d5d054569419705a8936aa36d457ae2aba6b7"), ("063a22744cdd86b9d11b7432c6e603a4fecb6fd56dc9bd6266eab89ffa1fd725", "171a303d1bfc9c5658be258512fd3844ba356e39cdfc2a4a7e6a353647b8f68e", "2e3a5f38c4f0a1d1ba83273d3d5a6e6015962f80e5ab834b8cd78379a96014e9", "2724f3c231270db66920d4f17f2089145261424773ef4c6e250ec0ee5dc80307"), ("29726057dc512235c3b413715038e32b90ce3c7c2ae430dea1274b979d1897c0", "20f00e4f9fcf8624091aa0ef4a7702c736b3af012d2cd9bf2a482b40cb103aab", "2d166fb309a18348dafc3fb2cbe527f2ec599d0544a1f46bc3c08ce2a42bbbd7", "141c3d67701719caaf3385da85ad86d959ab7687f8eb7bc9b48e74ef6e54c9d5"), ("195755889954fc0edf551fb291f29aeffd7f9d72495c3281ae97c15961fc9028", "0957beef2a33810d569c1198886ac31c762d8effc501c022fa89e46d8f344a31", "043cf9f1c9e0586e40daa11c5082221df0c5b164a680e2ef2eb751874c1df67a", "2a7c502d1a7d84a87d4453c8c234f62f4da1b1da814c261976d3627f3a086f43"), ("1c662d459a14e7620f1a6a4af581dc7e17aa207490841b8e75dea093c89fd116", "2fab515f8c44211c538cd079c1d321a39a663901dce47eb8f3fac6bf71c81c1c", "2577c848acc17b922e06fa3a9e96d00072d7cf13f995ba19db5fa29ffe5b5bd4", "2b481bb7a54fab6337f97bc5a40d5ee229bccbace657bf38ed367cde30067692"), ("1bd9fc7d3274c8f15bddfa60488081947d848b18711d99e377754b81a98a34e8", "0e63872e95d614691cb3e8dc6f5dd5de96cbe0cb04066c3364d910aabb8d82b2", "2a2b8157175edb5b8692d40680014a268a6f868a947017b472e4d71fb6d88c81", "1919d79c01b8ae6e9ea070992ae76a5596ff1259a28421b1e555703a7b79fddd"), ("06f582b8234e2c0294bc4dafdeea2cdb5f108d827d6546ce81f716f8e3c2cb6f", "23c2d91c7bb9422e0a403acaa8f98337f2d8f4d7fb3e689f6bf916f01eed4948", "1a20e02bdccbb63686925f5cf10c4679cb20ba09ffdcd843e766b9e72a6ba117", "1eeedaa69b60f22882382c3a8b32c59fe7a1629c3f8b14d8d2d650c047b4c1c5"), ("060e9549eed205f8823d488a57ccf49924f7ea31170e3488852a010ace50c513", "1596b6723db5849a53202c47f304883267624cd15f19d1424945e0ab03e66983", "216b4bedd1ad34d7043d6ca15f57a7881c34a6e694856bdfa3c17f985393a115", "28b862a3f85e347553537a44d45cc5527384ad87f37f4e4449da39d4280ef26d"), ("2a67b88526c38eeec9b7de6cd6e1704e8f4233dc6285490249d5a6beac509686", "24df45f30095f6500015e5f21824ff71d18caa9f52b1073a00c8953e9d3d11cc", "23422694355d55434c54bcde603526cce3a6de45fa7bcd081983c19a8470af81", "1a005642771a7fb18f879a240cba7c9650e9aa891ebf5c80ad497d990330b21f"), ("1ebfbe2ff373dc3651011a6005b972d03425be787767f8bb06934a8ebaa3951c", "1d5d47837cc77ddf67f784f9e3534bc912bb1dd5ef6de0cbfee0d74eafc252a8", "132c796bfc66fa1b348ac01cdc5b1d69250037ee28875031494efc80a2dc6ea0", "0ceec5f64a1d4cbc5973988b6cb0885575998d4eb20455376d3d64dd6320d074"), ("14a98e903141a7534678650927b73d4c53bd96ae438cdf0c2a5167175bf6cc42", "2d339954fb884b7ed6a7c42d60a969bd5992c8bf6796de7c2c86c00452138e52", "2251cd1ad913f05365dfd8f822231500abb451075685176b73a701170a0a224d", "1e3704f8f5b3aa6f9fd5ea1613f035ad10e3fe31256cd208d0146b2a240b37a8"), ("24937eb1075fccc55bb4261d8b09cdc033f51beaa445921c7ecbf48b3f62015c", "14fbcc30838ee55b410d9bfff3e199b9dc2e3c789182ce55e3ebb6bd23d8440b", "1c65dc31019d08b03a839dbb2fbf7cb18cfb9f2c04d1138d2ebdfe33e1ab1c45", "24e189266cbe7acc591490b620ef86207abfad570621069d6a4050f89203af3c"), ("2c926124b5c38d226925a26056f06dfcf8911707fcd57a907316376e92f67038", "0f634b9ee33161ff597c6e6c9da308557f1f76ab27629b6acf44c1a0a9507991", "2fd0fdbda8476c35d63826331c11e90aec028211867b2bdc5dc36fbd5918d159", "205b93b32f47a80d233cc2fe152699be156a937aea86924c618f50e10fe9fd1e"), ("2016f12f34d87f2166454af07d576e123cfbe55dd5c6bcfb9d9fcc70e3151fc9", "286cd09a0c992a7a40505b1bf2c35d6c54477bf99c55c321774fbf5c2a52b2e9", "258e0ecf1728e8907d816b00ad399de5211f78fe318828fb45ad29a834887fc5", "13d328fb4e7a10fe71df9dca09da235a06ce5de0614c6d189c94943463c61d5b"), ("0b2001207fcee8e745f14f6a394449695fbdbbd3c986eda44b9b5fb9827ae098", "245eefd0e3bfeb4d6b014558a8b82e1b91460645cb2f0ac23498564204a067dc", "06f7f4a004f77fc53fc76abd95cc0d744c27687b2cde97a62e631013ce08e9af", "12ac31a64a2ee60e3b3f04280dc398dc6fd5ecbcbdd877f29d401cfc81973164"), ("06dbf51c2353b7dd484aa33e7e6ba7f9da3774f56a5efbc5ac82e730e502d8c0", "2d3315fce99ec5bc0c04bad48ec72a15ce8952b61bd8ea2e9019d7df7d9d5090", "1d25cba04ed38b15f7defc989d8d98099c8e98aa52f0a727edb7a2f8d746d192", "0a71cc882ed6f3fca2a9f6e97cc1bdc8592d573f0eb0594bc92dd2e3a5f322c7"), ("1084ec61df9e5509b725ad6dd627d1e762ff0ce500f9438f7f58209e1fdf2141", "057275539e6ab53de38d9978e3881c087ddce9f03c48539b7a69183b6f746774", "1bfeb0e95be4f29168b7d1117ead4bfa2a2020b25fdea1b0c1524a833096a2ec", "020a8270d6b9c92b39d830982e7b8a5d97a072414c4bb3fe2f088815dd6c8348"), ("0437e156946bec89baada2713675db49fd4b17b25ef4d6ae4dd6e0716b41799d", "29ecbf0f9d54e6d774452929721e1c6c7f544f5b0edbf0c8bda056963ca31376", "0ef84b6b730757ad94b870739c76d5a557f0380c538fd47a8cc5515267b92030", "1682f3f16b74164c6cd58baa014f58d234d9eda352f69521534874f499ccd85a"), ("004868e9a99bbd21e0615a7bfcf3f150f7b1e78781503894f7817681efadd427", "2f1b08183a295f1a88d4c38bf830af05b7a96799e2da5960ec13505bfa648762", "1f848788737bf6ae92d4eb3b6f7a5eb0e121881285019b36b7d1911ae00c6f4e", "1bd030dba3aa4b35b94c0ab0cc7d4ecb91d39dbbb5641a4bde36b3ca36a8e812"), ("1f462e17872d2f93a62fee68d885aa869d427c55294149d165239686c28a5ce9", "2b93be6ff810e80c81a145387b8d7d9d28502b1cae903d02e8726aa0d161779c", "23ff4dd8dc19042fe9ee46940cf3aaa33dfccb16f94f9267c22f2ebc93c6e3d3", "03287650e04b350da96bd1c10802a172083809e61eee1eefaf53771fef698ad5"), ("27f8ee87c383f7c92a4212e806aa44a45daf5ddda83a6043e7f4cd8af225c5a2", "020171d0a45680a178ed0e38c7a8349f72e5a4283dec0b03bc94e13e2afdbe5f", "0035501633ce57a7c3719d008b721ff61e89e84d90b9a38f097e59574d080ce7", "0204edb05e800500111e8172371c4ab0f42027db974de89a4ad2c9668c47bb12"), ("0cbf62f51a5ba0aa215ca49ce5c9a2610f8ca4fc40d732a3615d27bbc18f549d", "170a2df925364120f7c3dcd485cb6819b61ad0887baac5a95f04a77a65162f0b", "2ebaeb24cc03e537b2e8f6c8031b62318ff7496ef56d99e7a47c5e8a940904c5", "212d09f49c291db8d5eca74cd307370e09cecc52709c1e93813ec6246941ec7b"), ("1e4e93b3322d19c119421f177aadc871c4b0eefe36d715933124ffae75a757fd", "24a08d99bb4cbd8519cb4200047ea279544887aeefb2c9fa0bb42cd3f2a61e8f", "1108f3e20f6e3665537cf1d42d44fe52a5213d084cb63708d71f05bed30b8f05", "2301d25965bcc33045e5fbd70cf5a111d4f3247f2ae2c48c7f51bf50be06c625"), ("2165fda03b39877db8d39876271124f99437031e2e1bacfb271e6e349e97dacf", "3003a569da8c7fd057222ebe6557fe60ff48fe151be302c363ce326743b1c5b9", "22df3c9111a734c206e1a07ef1aa0a79a95a25eefcc61e01a6aa6f03d9515803", "115c7ab8eb0120e6621f39305db419468785f08709d1c818f2b9c679507174bc"), ("0ef44c164e2115c569abcbb1ec212aca8187ee334db6c268ea66824ab2c5f079", "2b4238ef4e336f39886b20d147be78ad4ced3d8313bcef900512b937cfa5875f", "1ad1f8845dd115a0305e480b50eafd04f8335aafcd2f0c3164990eb5d96facc3", "139d3b52f927aa56742eaab3dde9ea4f612fc37fdc4fe18873c544d155829ea2"), ("2e541058ed9cce5e87fd883bdfcdc2c75a593124303ec3164a94c41c00ec4cfa", "2af142ef8e61af5ffaef4399208ab5e9016df8aac3e965501cce8cf432c06e39", "2c83a1805ad6e6c1745c774e88be777ec81cb8710b1650b5eee346da5748675c", "2cb135942ae9dfc3c04a3b29cbeeebddb32ee16baef27b1c11e97a14233ab18f"), ("2a543b3dac6ca5ad07fdaa1982bdfea6c3bee7be72f57ea1d2e59021224b2b8b", "0fe941037289a946c4a43452ac0e91c95bb099f6886f9184639c5a318f257ee4", "07b1a5a5307946520ac385880a0954d26d64e48f75789f0ab2f414261f7edad7", "1b24aebe1d5d9148423cb2db7891e24a7b9af98f8fb0840c0636a450ee91f622"), ("07047183703463b95120d63ad2a4415f8e87b36c18422bec3e52aa1274d2c31f", "0f14bd9c1099993c8258dc1dbc70826118ef1db7cadc4abf6d3e4c489676fa93", "21d45f3ce6e018d2567d2c7a28d500c106c7de58d7ad4631c196fe77970d3b0b", "08075b8147575b19b285b9e8f480265300fff16a0b879f1c4b4cbfd036a46621"), ("09df3ae3e440267719271485c3891ba1133acf14903f3f029d05ace824fe7b3f", "26b3728f9856f780e934daa0433cf0922bcc0106b19c40858a25d6581433b177", "1db2332c96ebab77bc5d5f8c5796a33fdee7dcf6c1a2fdf21fe347f09fda62c4", "2f5648fef89eec8d1c5098c49e6e46e3cd5dafd1c685e662d08036e31365c1a0"), ("28db760b8baccc3d4186f5eb8288aa6a6f311ea1b4a1f7532084d445dcc4ec2b", "0d1f6e090f64573253073938937f857f60ecd059a9a43af0173b975861d20ef7", "2da639051a3b9db032c01e296a66751c2f2748db63369ae1bdb490b995101428", "29632dec81034f53119832fa6cc4069d4e34fa70b9e732f6d1d33d6398981c1c"), ("243e03c60762e5867f6fa7bd2ba8ac305598b90522d3cb821389f5bd1b423fcd", "02db09919e9e2de4a639ebd21e35731f9e3b860a13248af7789a965d20986545", "24047927e10502c88e898e2874ca277e8ed7084cc3f3e422fdcc21b9a9162e25", "092b1a48fc86716a1b05fa5849f75cab119bcf15902206142e9c529eecdc4dc7"), ("2f6e9ca37d46bd2b38477037da6e6558d7aec008159f82682af6a63147f9756a", "262848868759b7124fcb5b46887845dc95f4186d4370c84d7bf59927dc5f4855", "00ff9536ddd6f138cf95c048d6e3893c3b61804209e88acf05592bcba680352c", "123be575347431ddeed5c4364f6f12ec026d38cfc3c48125647905965b0f0913"), ("0f474cad1ae109c99dfff36bd57c72e80801ced111a3a9735a09389d21605324", "10520b6da1dda4f10a58d0821c06ba23940169e9666ba8eb6cc983b17f90a301", "22284dd479a3bccc9295fe09b9e669445094ac8993ec1291edca120359bd7468", "2fbf7e19f5150f462950771d92313ed42fdc02de83eb79574977d1fcfdc5e060"), ("04ce1b4d49277adfe92a9cd1dc98212b574d9852fc83614c6522b533ad4aec6b", "18e3d17db8ee741596f7fd77863a262ca05da64c3e22dd6d3ad75bf34cc6410e", "290fb3d90d262aded0a32e91004b352250ef8fbec6d5c513d692e1280bddb6f7", "0707ca12f9f4a7958d092984ac4aec450c95abbb56b77a9df03e86618d142173"), ("0c69e4e87ca849d7c90fbc2c08e26a87c2f9de8d0dac25220b459f217023be7d", "07f47312c693b47745e4a3233602d6780c1994b88ffcc908e2f2e465da6c0c0a", "0b649f45c7c167c4a96f24a28195e6f37cda444100d03cc1b073986ee018b371", "0416f8cbbd262fa12fe97ca626a2e6f53b97e28e48c5e7ea34202320f31e311e"), ("0fa01f781617585f6ccec1b7f732c4ac8893f5ec153f17dee2b117ac1d3292e5", "0c01e9ca67ff267fa0f56022a4b198b0e1751c9904d7289dd7688cfe00cc96cd", "028c43bed1ce11c07017c60500ee324c554fa89d1591c46d11b9dcd9a608fe29", "2effb1db9e9f51cde833048d371a79d34a13a5efd9b2e25bba100578bbeb6cdf"), ("229139d32f960c8a64b3d7f4aadf9af13dcb42824996d448e8dbc3a3fa697c81", "104370b1a652b88088ca79fc7e1974998c757bc981f972f8c1072a3f9ce10d31", "08bc293f1c23d45715c8dedbb907806d84cb46bd8acf474b7eaa63f2dda84c0c", "0cf81ce00f34312bf9ca83fe4cf17ad56949ae1059bcaa6c13a48df44b40fe8d"), ("2c92c4cea980c84c970a1703a61e57f46028f04d8463fa1308a116cf5414420f", "06ce2ec482febf916c0af2b973f2d7e5333c86f43556065575e11d8355b800e7", "2a020950ca4fde429d3cd101cc809185b51e0f8886e5ee643deb5a50d451f4ad", "2dad18e1ce146c9488aa108115e08234a12952acea5985af007acdee6a58e5c6"), ("03d4280c74ea53877572bdb0a664bab306759265bb43ef7cf6a308fdb448f590", "24005a57b337cbb4d838f6346cbe1d43783d220137c4cd61e34b51d9710dd25d", "0901b33ca4f929f524d34eabfa27d502620c844458e466c087b94df8ef92c449", "217e6c80c8c6d441e64eb974c2c14ea4d944d601ccf580037b0330aeaffd6d00"), ("0184c296a818e7303041b9fbbd6ec95fee811c31e76c99aa123633ec88dd8256", "101c3e07fa0b036026395590fd1b15a62f334ed0b35e0565db188181fd7a77dd", "11a18407f4dba4c893758f6bd50b77ecee178815ca1592c82bde859c4eb4b374", "03bf31d5b9763af10959fcb381887726183eb8d6f3a0340bbf94e24b6056d059"), ("05433766e056bb23bee8405a3c4839277568d7ccae7fb46953dcdd82d190fe13", "2bab66e7f0a7297ad1f88258e1d970f886d741f49ed84b7c646347e4292271e2", "2406de17f73c08442b1be5168eeb5cf4e3c2f87cff3b676e03f2840373e1f0a8", "2b5e3209407a79d09eeb880673dfa0527c2c5f8965844ea826b34a13d84e069d"), ("0ac9845db400ba70c9657088a20774e4fdfac9c074993efaceea81016274e403", "0a8fafd33d38d8a8f12be9dbe7755cf6bfa9e19e68147405551c5c744c0b861e", "2791447927b76e30e267d324441adb856abd090b995fa7b150f2f5857373a40f", "28caa082f2dd7622dd3e6465838ae2f659cdceb20d824a93cfa32bcaedffb177"), ("1de52fa7c555dbc5d579ebba2dd8c16fb6ca186c27dd842c3a40a80f57f4479b", "1d4dc9c6a3d9549723838928063c79db6eef77df749fb3533cee587c299dcf85", "2692b78fc5018379543f95741c358bddac857947e8575a38763c312ea23bfa4b", "2588725673edf56f18e95693ac215dcdee30af72435149d84455dd20b1f66b31"), ("23157c6387daf80ef4e2fde3e3c0ceeb6e900f6f762ad32ac69fecbcf5dbd599", "2a45f98b3a8b895135ae2d7165d879d5f8c578a07b5c2d5b5e3165442288ebf3", "14165b959a0c450a28e69454366b68c6eb7504b89e7799d648a4cfad9da5d97c", "0a972c5642626ed86e46982c1ab45d13483263e2f0e4fb81da2ac1079778437f"), ("0a1bd050128f0c5e806d7e3a12128fb8290d27e01e2f48fe10dd1504da1f6495", "105bb02f8880e12abcf26a0606a963d6d2b7e8a0a0e1eb8f6a76ccd71ee995f4", "03f276f8fb232a4e0e62cca7fd449942dee9bf9644134ac10e3b248d061d0486", "03c7fe30ce1d7304941d435b2ff9517acfcac7f9b30244f6c3723b62202f8fd3"), ("0dedb747b9c2c9facd59fbf3fe78f6925095f7a8eb5ede841da6c8ba7b8a8ed7", "132d5fdbc9071bf168f35a77a263583c18f36018e42d822e59b5005e2f28c472", "23df03cea2faaf652118db44a3c6d077dcecd404e1a4a57a40483560a25640cb", "1795ed2e56dea929057b7c7c10b81c1fb338577f8ab252572d535581a5a14616"), ("1b6fa29aab51b3a3b9e613f7703139dfda9e57c07a3674f00968bb9ff1da55b5", "3058606b3688bd1897fe7cec05e44659012d87866fc17a4e4cd711f637738fa2", "23dc045ade3b4889bba5028f75ffd0bc0b66db711c741db57e6bd3741a647f89", "1c92dbec9aca316b943ac02da36ced9fefa577f9bce87da082039ef6629d64cc"), ("0e2a7ee490a9704fd640425089eacd442b42dcb9bd13e084f3f16b3ec62cc0ad", "0b439200eeb4fbfce182fab9afbb43691476553ca0a8382287d1e2974258b899", "2f8ee05602fc181dfaeeb0a34a3e3016b83e32d2b80a9b188b6e4cdafe71c869", "10679e9ebcdbcd2504d3cd3541f9c9fc2afe17d83e5b2243e359f057325fd713"), ("0d4a290c0c8733b25ce1060a800d2c1da7e51823ce19c04768fcaf306119f42e", "1effc2b9c8955b24799f947ae4e996ae436f261cc450dda5e90f9eb818f705b4", "12c55d676399d1db8cbdc8d81f686b8917c23cff84d65fd20490c411df5400f2", "0f930623dd8abb43f2bea80ad2b131c002ac73ee4fb962f1967bedef495fcd05"), ("29a8cc9a3f8f62ee24fb22590c560b1ede190f9b728fe53c41863534ed5a4083", "1774472f89795b38b3ddd53575c80eee91c7e88c11b0d22bc90aeb9d4fe5d57e", "21608ad84cc83719879635681391f34eb78e458e8c9daacd3fb330beb96a8cf1", "2ce42eb6ef857bbabd1dcdecdfde7ba586da7967191cb845329e3b9c007dd27a"), ("2a4cd0e9cf28d117129254e5932a4c16caab077c2e3ace55ece1d1f5b1e82f47", "2d1a14002e334469cdb9fc17e0dfc6ef9bad58ac74e85da5b38b84e61d236c15", "16f514c3582f403f6c07d95c82a4b31d04679691068647c5797023db7efa06a1", "034213d5758a151ae290c6020c3a6ed4524531a64adfd1674f8650ff5050dcb4"), ("1d4d97914144fbd6e44b74807fbb650d0e436ca89b3277c0d9475105167cdb96", "0f907c482a21ea6f8ac2efddd19b27ddf89496192faa3ebca83add263310c5b9", "1633ebd8debe113fdbfc6bbdd04e2775c88616467147eb1e86e1b7cb6c5e89ba", "2be05a001d0b53f9543da75027ca348cc4bdda2a85bd4c0d257f2c691cddbee1"), ("2277908676e26fd09173ea69d1b2dc67c2461d8ee2c1babaded13c1464fd527c", "1c300f22a317f59446565d06bff8e91dd2a5e7b37767035af120ed751013bb52", "07bb91f422c435bca983679864ef48f77fb8c715529b5084a8d48f5d22d6feac", "2b5ac8e78ca1b91e95397006cab7056f0b48933bee4624ef15083b82a2582ee0"), ("2af0ba7058bf57f868f8fc20f31c7d8c492d553fd5a0f647fad3a1410de8ff8b", "10616cbac62bf58921dfa5e2531774a1c44cf5fee9f07aca85691ceab16c492e", "0e715612c1bc59ebafc54f1323e10ebe05a374af6de51b9657fd8aedc3e44992", "08c6e01b3ab6d2daa55fc44db35721454c2d3db37e189c5baeb175d5db635579"), ("13217d638ff6a66eaf01adc11ca15a37c22a23c8a744b9639f5b2f992b01d8a4", "2dee2f6e19db1a29ad84973fe7f46241ea8d1efbfbe374649d637912f4912e77", "2fa8ddf001c12e5844e9c7d96926eac1e9a565ff340870e2305ae5e00b27a556", "2c5377a79c1770a57f18de7e544adf70199dc0f37c078b2155bd99dc7e50b833"), ("285cc41072b5c646bea4c7871fd512d64ba56e2b37ef4d2b2ffce3ec296bf619", "289fe098a1612b2cd2d5aa9ed48685fd6add0fa99a937b30cb03c7538731b59c", "100638ffa1e192aebbe95e38b67ea6b9eb19ea13a21450e465f2b0ead86181fe", "08f37dcfd7b539a46c4116c46ace9a70744d59d1d1f1aa6e37abafefa75c2429"), ("17e939688579106932cf245bb54465a37d310b9d5e2a09c1945626be823219a7", "1d080b494ddb6564b3835b2a5cd7c6e4e52317692855044be19df72aa7cfebd0", "0e0b69b76a4e042304e688b86e7976acaaa12a3c64125196a74302cecb4dec10", "033806b2f02e77fc78406e506c2bc501f2625672ca4bb124805f2a802cda423b"), ("0891282ab1ba280bde1f846a023be64247fe84b8e946334b21f8cd9bb3487ad2", "015e4d4fb57165fddc5f181ee5c4fbc775353134036543395f02df1c471de530", "07f8d166f96455f10da5f80aa03d2332581da6a56c8c5b5b8c3796ce38d0c7d3", "27d654933add050293329833bb1cc96828c46133b3bd89934faa84679d45a6e3"), ("1317d268d761f192a427726b0a79dce9d93ef1b81b16b615374730dcfdec633c", "1741108d6a3bfd7dbeabcc585b4b51a01be27d4dccb7366718a72fd02104f3be", "11e89c57882a13d8e8ec3afeea52fe12023262156b2742d9d16d22a04731481d", "08b202556c5fb7ac79952359540439f6b27dc79d701d16ae2d1b2ad570b8f6ae"), ("05a6759c1e84ccc42ad0454e9684325b98fdf72e196b03ad39168527b51327ec", "2880354df097a3a449bebcce4b7aedb2e61a6be0675286e94d7452622db662f2", "2e46a7c09108a140ec4f4c829aefff422aa43d43daef0bdaa08e8e6fa76870ab", "02e3d0948efa4664cee95bfef9f095d1edd6ada69a1ce61362966fae5512c5a0"), ("1f531c51952c75f5013b110f92e7dfceb93e8f2bec57218f9c8b56b3192d186c", "0fbd59d68302d2ba8b402155f22fe19e6fe0d15971a3f8344ac92c70a88de7c2", "22cfa10643889a7767229164944ed224b0b82dbf84d8206752fe78f2b5f308dc", "0c22b3c7e517a4e727c7fe7dd5019e99f05c0c331acfa38aa8d58fd297968ec3"), ("0755b97b8d263d48d286cf4232bfcbd104479b81d3db0b6ad348cec814fb6afa", "1be6eed5b759fedf0a26c3c5acd878352ddf67eac287eabd4162ac56fb637757", "0601c7862e91c33e7223cb38a8cd315a35f21b77edcac35ad2a5adaf33697d9d", "18d876d5e73fe1d5f651b93354bcf4a29ddde31569b7a2489f91f5cfea813783"), ("2354a2d5a9649f6dde86073b562e33faacf4f63eb11e6419100970f0dd4fa004", "1cbced8b8f744f87dccd9dc07e58f0852df5bcf1fa538ee48690ca1e607eff26", "2c1ed0994d10f2f92e5e40b3de9ce8aeba412c6ad39b5684469ad8a08d9d9518", "29f5afe12ad8f90ff1817258a341c2979ad1698bfd3156367238f1464e21ace0"), ("0bd019499a6db76344278ce44f55613bb160f79c640f8278f0bff114b9593a5a", "1a34e3a17e7bdf64c8bf8f650f1710fe8d2e43fae19da287399efeb89e63afdd", "19071da40b6b3597bfda7371dffb5f8572e47ba54b841f4cc6c81239e4eb4098", "1ec07361d17e78a43d10396dad484699d0fc293150cd19efb541b4cd2866205f"), ("1aaa3bfbf2ebf879ab59b32073eb08080bb4f9a84f8d783a54cf14f453b3a0f7", "1944fa9791797ce9d625401b7394416c1c8439b3afd60a4053496d3c54b27718", "0f25c317fbdd2f36cfaa72bde0fd8fa8120912b8de16113557ad991b92a2def7", "07a19351ab0fc90b07b385a0d96c6247dba3cad0774a096fd71b58317b697f32"), ("1ee7bd9df42de89232eb3386edfac5d6c527e7309ef9656bacdf036b9f667f21", "22aca23b03b3503ad9a32b499c0433ede98412ff8f39f5073079dfc5dcc23960", "218c83202f334bc83095c4b93fbc0d997df873e00e1093ef448098a94e0ee4dc", "1dd3435ea287139cc6f94316620d1d427fa4c3d1284f0ca0301492c1170e7bd0"), ("1df9836fd4a405aa69821723a68ee327d3dddcc3aff0b26214455b19b5e5bdf5", "2d155f673c32968825d160b29086f7bedd20e9bb4997701e587332e25b36afde", "0be8338e6eea2b5365eb47c549f4128f16d610378af2ac86ebfa0511fa4cd222", "037d010e0ca341a1246a58df224858571780af30ba43c845221ba5017c4db9d1"), ("28b2e465a7afe8468694560de607ed305a90cf772eb8f3fb72be8efd6a6b3e80", "25aac47cead821b0c29f88c20b096852278fb0e3bf8ebd47b32b0f194e5728e1", "2871f76f6b47f3a9ccdfd7928d3688de92db41dd73fb80d99d4b0282b66efb6d", "303dc2d7b37382a574595f3f5a376970c758e1268b499022f6deb02267e98dbf"), ("0db5d6f06b8dbad64bb198532677e0faf3d0bfd79c40abf394c1adaba023e0c9", "254bd9bdaa85c1144b47f58f49779f6ad6f23f465e767fcd1d9260d4b4b04b96", "0b2103e350e5ddd3efb6e9a05648f72fca8b55207a362796e8f78bffc9d335c9", "08ac7266a0d0d184964be4bfaa9671fddfb0190ddd9e006e2ff479406e932d86"), ("0a1284d11aad9bb7f4dfdc62323bc9d9dd9036c2b0d7acd3e15a9e107eb7f3c2", "0451c2c8f9595787c45cbd52dafff21fabbd290e947c1eb22167d7f6de0828cf", "2db47ec7d8d0cd503f9f96a1ed19f608daee07ecc1ec1946605388d9b8d84aa3", "0144a9b0ce2d25a64101df49250305797b6144b8c72384add577202ebb5943e2"), ("10b906f3b4f944461cb98ff5838cd5fa783d1fd43c1af4869549a148c464081a", "00934646fd0147216e9b4edd4678d321f5b3631fc7bc8d90da966a27a02d9926", "2ddf501ffa8f0f11b3a1263a8a783a7a92b18c9ce5648e9cd1fe393b4a6a555b", "29b9adcfc34ba158966e31562758f4fa59bea2868f33e786f481d53a1796fc82"), ("0fa90950dd89345ac2fff747189fdbb8d1e4362bef182e4e7663c50e791d27c3", "29d227a511ceb171a38a51cd4c7a11781482e58b8f8f2c27dafacf4bfd0bf144", "18a6c25e3c2df1932150924e5271f42985e546588aea8cee060813446528d8bc", "0d0c216981d4e15a3176e9eab5588476745cd1356aa4bcb0438eb01a941400a5"), ("265f476ded9b765236952f3da90e0d600987779c091cc780a242cd52ba7551ee", "090244fc6e02839e1010c9295028f3b6c7a8dd42a023437ee12fda4a34a34cff", "04b4a0c6531ba966b4a2d02048e20baafbb19dd5d6f4f3a0a0dca7909b92d3c3", "244a277f72e15e15c1dd825064e442921056687672fa42d963edb2d3b0e292ae"), ("252167b4813189907ec0eea476c0d554bfc9eedfd86254292a41219e053c9695", "28b7f97260b312d7543364aa49413ab4d5cb3448fa5b1348689d72ca04348c03", "2c57731ee9e7c217560fda24d951f0251dcdba19e94d6bd5b069465082f4c3a4", "12b29cdf382f44c24dc406751dbda5fc3de4b0f95570c72521aee414e53e4afe"), ("2cf96a165d5672ba3c32bc5d6a13404d1a6fe6c89d1a40a5621771c1eadeffc7", "163c2181a9ac233e8fe3e82ecede3b4dd3b422d0c01d39953fd2aa3728e16b31", "0f004e43fce3e4ede3db1946b0d554beab82aca261f556a46f01711074eb440c", "25ab6f1d582ed5a08bde993cdbbfd9d47d354c4168811ff8080ebc10234cabfa"), ("2c041f7af7f5ff790f267215203a80df410d25e07ba9e6b929a36da9c05ae312", "131798ad58ac31c86eefeba71e8887d0f8503dba96b404f26ba86c216a814103", "1ce014bac8760768c9b228b8ab90b0ed579ec8994e34ec1dce71696d3cb13dba", "202e52b18bf7aad3fce637c3f1031f6b590fff222d50bef29f554d0882eafa69"), ("27137468906f125b33813374e999ec0c1d114476f4c21affb35646705d7e7c58", "07e9c864189ff3925e6ef3a312015679cb9297f9aabb6637ea23835b40ab1d5f", "03c0097d587e4b865a27f3d5810bed7188657d66d07ba452a9e1105aff5de8b6", "1a11366c846be934bffb11701f2a0a5b5bfffbf30a41332854f828ca164a871b"), ("18cfb80d2e9de1d12d99230a1c4e2f48f46122322fe61e4463be08b2196dc9af", "2493775a9c7bf66f544ca77e5cef63b62b9abaf80f27b0c35051ef004f09982f", "2cbaebce799cfc797c9091db44d4a4e00cc7610f7107072f658b69cf187ae032", "283a722da7fe79a3f2e04168def4757d87dd5d5f8502b2be78aaf2f47ea01f14"), ("1bfb8455f33660f32f39c3795b765e9814fa6b95bfa42faf932434845f2bfb86", "07e6b9abb65176bbe5d3de715dfc2425c5b5cfc0ffcd5cf37e1b86c7c206fc5a", "244d2e9e4c15a8c7fe8072aadab0341431aba2b08ebb1c53203f805ade412a1a", "07c81178ca558fbdc792971f1cb8c46c8e9a49a223a92cbdc055ec00e60e4bb7"), ("0b8d5fc81845b4d922ada1c6479b6d509cb665772549db3721decb067c0ea9ed", "11324d9df9661badf14304ac3840b3e6dbb8441c9f1fc09cb0f00c5adb692ba5", "1b1f2a0070859cc1b3febb899ef67d137c60904a46c0dd20c60ebe7ec8aad094", "10263e8d7ed052b09273e4dc4f6bc86021297af681ee9aa1ac5aa8d1d4ee3507"), ("041fd1c64206a21c1d6339f13d270310f63238754735275cab50de1a4f51506e", "09bfe5492d3a30fd7f6b7cd4c5b9a8410e98aa51b1c2cc71717c5cca385acf82", "060463056a2be385308774f43aa9eb438b575a393eaa3b7dddb95a11935625d6", "005007b1a6af3b6b54741ba808edfa975427c278e7daf7b748089f978563e526"), ("1d2a94a116ac711efad74636208de70943ef64f22f44c38baa1acd9409a1516d", "0d3c7dc2e6edf4edc2083874a4cd978ec349e54ca2076917081cfbfd7f019211", "120671b89bd48cdbdab943b5f4302a1e0ca754c048d548e40cf72c215879d944", "17e35aaeb0353fad810540938b92b7d3c3ab1efbe2483bf53cff1681e3de5eb1"), ("03d1435efb4cb58d5de378c7cf293d37376062e3971fc71fae7d31d8d141509d", "2c2a9458b606f088a41e39c2f9730485fa4d7efca92dd2c475221a7ceb5ce48d", "1f04b5ec2257b5655b1767c55930336c3cba474a099336162161ac4320644cc3", "228ed7c8fbe4b9aa04fd5b3846a1c9e6e715a63c8cd53fcb1fe602bac9abab26"), ("2417a31fa8b88a6d1951f0703f6291d80e0d386ab145a2ede72a383e848c6344", "0a492427be3f1c84a9ac4c12c0c93459acd619b1f2bc8a662218307c8beb311e", "2e6505c6dae6ff7c1c67b0de34e4bd0ad34892695ec308f550d5f43bd29782db", "13971db1ab89173ff437e765e2365ffeb98cd16b8ec71d2d069a9d6f82d9a885"), ("17b1249a3dbf0746f44023f9273afb26359ac010f3a548d85a56795b043e4a0a", "10245b208fb127c85f2618789b724eec2f759c7a37320980d7fdec2b77fa1690", "1fda377b677a02ca95f55370242277d78d9940de968e442a9cd79849fc806f56", "13dbcc693f6749a42a6e5a20d2948a60f849d854d1e1fe20cf5a6fc8e36267f7"), ("0e10fde6701abfdcf1cc408ab1610d62ebeecc0f134433f4e95f63cdd3b289be", "27fd657796fd010c2a97d32c3c8065004053ec419ffcc10f2ce1110ac23760c7", "173fb75c79e99b4003bfd5e3cc2b5ded281bce5cd0d582a81d75f6e8d0cdf024", "28c63c4dcf7563bedd9d58d41edd4f90dc4e433e0ec02071f39c72c590c8dc3d"), ("2ab63eb19349a155e2d956383b7841d84d6c27bd7353a5a5b5a2e330d996cccf", "22119bf1d9bf0e51a80c09686190c786c44e7be5df0e0d3fdd8cc506f8eb87b9", "04511c959335635c9f4cd94591501e00bdce59b1840e7f4d91f9ce601a0a725f", "2642033f3207923eb3c7ee45776fb366d28554cde4b6111e0385a21de0ca96de"), ("0f84e2bc821ff52a9e8e0cc0445e8024acb3025f2a8980a7db2a5871f12cab52", "21922c12a237c036aa182d936bd9c0222c9310d6416e2135fd50aad95d5e6a58", "0fa67c050fe7ff1ed61451b4735dcc514e0d8d9a589ee41d8e1bf2de6b496d9d", "083e55c72fd3fed9ca77e6a011030e01973c7b6c5ad9b0aa54c4baa4e12a8a6a"), ("21571e526ae8be6f492979038cdad0b87362c2b29e2982d3d3d971289f9b2302", "1efeb5e3aee874a78444f47ff0c1969b4eae6ae62a72e1bb6d4968aab6186174", "060a0d895922a4cbf4b33d07c272d4bbc545626128a5a2e2c3fff1e368dac372", "2e5d9caa423bafaab5a4539a726990dbde50c9c1f13a4d89b4d33de9b069deb3"), ("1b9f86060e99354db6b5633c61b6e14da89b61d7ce98136cf36c792b82a0cca0", "299eae6c03bf53574e7333749679ced09d5befce5afc96c83cd9988d45f4ccf9", "116e60ea82a6ff08750774b165d83561b64ba481aa08a863506bfb7a50a35444", "186cc134cc2a951a23d5d59702e19bdc6d91725611e343b2a31023c75d5d0488"), ("19cc4401a6b915b0bb26eebcf46cdf94a6fdb6a1c4d53f082b938118e7fbe88f", "278e540be0bf65573b792b0d3b9069d43d52fd121c55b86d871a5c30ebd4f44c", "11d1140ad640ab99ad32d3651323ba28e3b0bd0e36b1c0c6065ffc972d32b2cc", "18bec15b1643ed124faefcbd24f47bcea9fe6095a8463e7a567d3c7e55af76a6"), ("0a7c153d6de938e7bf67092ed5d205768ffa21e2f08483a4ddf49579ab0f8935", "11538edb7d017f749c8f6f77d4041b581b49b06a26ec3e3431ea7696c40f66b9", "16425ab26a90702cda616cbadea4f04c9125cf5c514199c08c1e21d0bd151e36", "230141b589ff813819dd73c5aa0297427ab16a6994da9d5620caef125e3d198d"), ("1aeddafd809c004917c6f2e3c72a662797937005c75b13aa52bccb09ebbadafe", "132353f1b43108c0645c2144201c3891d93630d3ee087f0f506c9796379af0c4", "1e8f7342f51a1aa6b86b9ce4b8cd4b9c1c0050d07f809e389ecc35c9c7583b71", "2ba3a61901601e60cd763f7244cdec42461b360deae6c0b0fbf57b03475db75f"), ("0d9cff5fff12c9bc0204f0db26334fc2322fed12e60b543cf8657650cdeea356", "17b25f1927ac7174265c8790303e126abab4145e5a4ddd0e80bcd2b633820071", "10a62d829e5187dfaaba334ec3f2fd4cfb0f29e5dbb51e2f073f52288fbc00be", "0f2b60d0a8d84aaf66476a8819d5cc4bd74ca072c8fd0e6e387c4f74824e7237"), ("195c408f4bd6e01c3b76792ed1eec8780f5ad8fc06f4b44c24b8f74f3181bf39", "0b58fe6ab1f1c862c7a2f2eba7a13ab57a6e4b3e5efb6f9302a0153a62bc9b3d", "088d4410d285beff7d04ebbcd0583eca543bc25fe06ac51256eeb475e2da2663", "1b5bb1b395da511d2b8f0eac02179f176524fe8dcd7a3d5f8368dc5a170d83bc"), ("2d9c5f07381bb66719f95dc56a726e460d9b648f40e7a5abd287829c02ada0be", "075892d438edc3bf7e225d813e0e28834459cd0507228d903ee8d07a6b195880", "00d2f73166bac16b9c99310c4a66a371b9daa3974a6bd2e7bff0d2de5fc20187", "207998ce2cf95754f97dbfb62c97a2d65bd830bf76ff7f374b57cb05082bc788"), ("09fded8eb6bb9fabdab5bdd52750820e70d70284757fd1ac9778a2fd2ee426e7", "1ff3e6e5d252366326ea940f34cfd83d25cc25a9b29e8cc1bd48391306c67f9c", "2594967ad4b1ef97eafccf3930d894c585aa56693b12e2ca65cf4892eebc4b32", "0b7ffbd7336137600cbc03390fdbddb3c1173895b71ec828867f094c00d15eeb"), ("09756bbf84957b50ceba16acc957d15ad260f0ee4cc15935b7881c309ace4ef2", "2338a5631b83ae3f04463a853db619ec751b7c577efa218d06cb8a7fb85c21cf", "08683e54d2dde1deffe74a28cf25dbd1621e3d74aecb4a388ab5c8a7d0d53e3b", "014521a3f7fbda096e905a1d553ebd187563fb08a688b7cc351ab46b8ca90dc1"), ("027d5fc81b5b4677efeb2509a46a339f6c4e686420ccaf3f2ad0ea0945360f27", "2722c6ccf5fb62abc06f04aeacde3f3b5bd8c8f85406860f80c28968260339f5", "0314d401c6ccdd9f1dcbd02c2190fd552d6644d02b1e8ed313514c023edd1a3d", "0a6dbce3d26a3585dded1246650ecdc3a326863089338ddf6368ff10ca379ad0"), ("08abb5ea7ec356d85a86f2192c5aba6cc4acc06a0643db4a2ddb025b4584fb84", "30361b9661389f365b191210dd598ea48b80cc84ef84f2ceff44ca45cc2575b0", "27655f653a6e9b12be45feea8cf5df993c7184f5c0e43ec0e450230b32b5ef10", "108792ed45351a55c7dd94f048390bbf19aedc48dea0ad5fc4eeee5087b48bf9"), ("20d55584d9df2113651eef47be08a173fc8836428883c92bd6588b923e4cce79", "05460cd8f2704504550ba003e3947619eed7a63d675228d16f4aab560c40bc4d", "05fd8caff24249f3db12ea7181bbee11cebdc45d41a91ccb4168358f3caa88bc", "174e1897290a79af9e89add54f50e5f8b4abf24f592f91e19dc51edcd3101c1b"), ("2d0acb79f99a5e513f57067657df35624c1a659e441ca1b62c1c841b9fc657b7", "150ce8eaf0f90da8844245699915ac2d7215ac739b8387804ca3effd1e53060e", "1fe709ef3a7dd82d9541f4b1cb867fe3aea738620a175659b5daad02aa88e22b", "18e8a8b4a1160193c4d6b74236eee0c96d98158c4135fa4da87e74dafc1bf6ad"), ("1de3292edafa569fcd63eb5078ac66f1075e3db00c33c945003a33a333926b55", "0a0b6316fde9652e05dc8d0204bf41d99e9836049cc7d75b37dce228a44a38eb", "04e5fe28ce3d1c66feed9786919abbdf213f637a1299b2346adb76c44d2abeca", "278816ea983eea3d22e50ed14c364b1dfc48f90835f4afa585899a67bc8f8df5"), ("059055b59b490d022df86577efcbc6b3a8e9d9c48a91ba593a1e097f870bc8ca", "0d89150d947f30ef046d599dc67f57606ccedcf413932527e36b53275e976a3c", "0afdd64e43230dfb8705707d60d23ad7cb7b94569929744633bcfa43e8cd13fe", "24ceeb4ff706c60285c79ef657f9bf1b5692ac9989ae6169f4e1a3f64ff3a3c5"), ("1c28ba34ad30f32497aea25fe1eb2d461fdfee9f7f6755d895ff44674dd8fec4", "2e7d065d7174d589d3942eb3183db9a5f879a7c4e01501e4c37f0ab53a73574c", "2d51439eb4d29aac79763dfe25c65dfe7dbd28909fcc9bb906d7d8785a862095", "1992d4a6567ef667969458ca982fccb3e0f140c2ad59e5fdf66f12f82ab7f5b2"), ("188458d66da73b3c1ae2e46e6b2ae80f2dfbc17224d25066096a187c02a849e3", "1edb517c113234056d102e55993e6216b37597c96707acddfefd85f34423c4cd", "3013095057ff6bb04556c5561553c3ce75f4b591f68015ae3ea1769d08a8ff3c", "2ceeae33b87117a2c96a654723e6b67a8b4f267172adfc2bd53191d505875a55"), ("02179e1c1bcc7962ebdbe3cff3b2343ab569d7a2b128cbfaf1c12e16720d1445", "0ff144a7d0530b6672a5e61c9ba979da6466af5226d8f5d33f55fe940deeac67", "024e260c7146c5aecc201c03687d4bf5c7440a9a94f9186d950d1c8f094fd923", "273cc1811a51005e47ea242b8903cfc6525d52c6a01a9227b6e521aaa6bc8fb1"), ("1943001836a9f901d43c23572785752ed9308a47411a7ef5e47aa3e42f0a4fa8", "23dad167ed072167092928bb31731693f89cef8ac01c1b088f52bf4dde415f81", "19dacdadcb9deb4625f81418c9c1561158e61435988a8243004ad7938c271aeb", "035fa206989a82343cb1d83536c9744d8c2cc7809561a5e58215b85273580177"), ("1f2a4fc77ecc9be1db14b68f221ad9e6be6bb29f652a9ab40194479f987de2e8", "2a985a5b70a266aa5b8ef5d5db72ab0605474ebc6cbdc72c56e20c0eb47c5310", "201d6b22e1a14d34ea76800359fa470dfee7ca749540406a90f8ac9575467900", "1e6538be6cd5edc2c672240b01d8e0cd76197efe440b84232c06c99cafac1fb4"), ("2e4e21a895b2cd42a33c1ddc287fc79e8ebc127480b6d4a62491948e713b5242", "1bb29a40947d63ae9ff2d0a4229de71ef6240e4feebb6cb693d6c818b24ffe16", "215fa02d12e2e2ed13ca31f7964a67a952e52bba5b728ff5fbfdb7097f08ce24", "2de0f921ae55f82ecfc10273a2eaa5c41697d5e01e59a13361884ef5a3f97a60"), ("25d8048969e4b02878ab13f6fa8c7e408e290682606453f1d6b9d7029c2f4a48", "0285c686aac2d0ceed659d22019a0a8ad7d710845c4939e6c6caed2a115758a2", "230de4c4fb4e5257557c80581e722cdab2af0acf3de9ec4c9cd4e8c8f53c5e1e", "1af61d0bc15f7040b761b2642411691a3f801b9582beb30dedc09dd3d33cf4ce"), ("0f2acde1ce77d230cc99749c603027eae4d4219efdea3a2e8f54ee2f44fce114", "2517b4d0eb0206750570df2bfdb2b060ce24cbddc241054b9e37f827980642ef", "0c902e7a0ebd91ec7022b398dda46615738517df0dc3cd4ce3cd9f29f88cbe37", "1c548e66479f602d5e6e3f363c109a414615318a12da17049384776658b7d52e"), ("01b545a7195233f88c456aa93e033a8875cea02a3b9d7e2ada411054722729e3", "1e003f9cf8cdb3c2203065ac225d2c699889fdf514729b38fa1821ada25940dd", "22e178d2e4b49b42c6ef129e5428d3704f7baa05947b5ca6fe2efb45bf029bb5", "0894cb31424aba02167c9fbe995b0fc16bce238c8bd1db9bc261da858d6f506f"), ("12fdee31accb1d84641cde2f89c1a0a9f834609d5c4ffffa5f3eeb37250777f1", "2c1c16eb7858ca785961a95413ff249aa31cf2c08cb2d3046c209bed577f54da", "1a24a0e737f5d994a5ce191034b068afb55a5d927e9684b9a186fc8fefbab3a5", "21fb393bdc0dd8efa3a17844ac3e7c50233b00af932725693ecd05e624f8fee3"), ("03845325631d3fbb76b9880d1d15688d8ae309ae393119a6a37dcabcf70677d3", "183a42b21981019c8a7964df5bf8f5cb012b8760eb13a8271e03fd779c639efd", "1002dc0d494a84d800f024ed6ba83721ef19ad4ae1cf79f8c80c45c97c6e8584", "2b22e1720c30f6baf156583e48c4be0d6efd8d63b47abcbaad06d670a1d3b911"), ("2fb0c7b2d1b2389c81e27c501f79eaf87a403361f80ac726c4935b3b2b57a2b2", "2fc3b6a12f8b9d031caff4a0d12bbe5de6d5acf47e87e476a911b0400dc17c61", "02b447b91f4c00becea8f70ff23742080408599bd0ddbda80bf781b4ba45f7d5", "19cb38378be2df6f21e4765a67a34da2b8cf0a6fe0da68dd23fd78be7b49a49e"), ("2a752e0da900db534fc15ef2e58941100830a330ba83a655c31866afd6943228", "0f10bc1c48015f7bf229a5f4e6e68450c4a7864641723ab187c732dbed27eee3", "0711852269ab7609f5978329ddfcb0137c33ce5446dd5a29d08039eb3ede6ad0", "0e11697d3c75b2d6eb44e6272e50699dc48f10bda2fec7bc4153666b4ede2a2f"), ("2efee1fe3550f1b47e3f19bfdaf84eae69ce0085947c038980478841ee4c0621", "0bf3819555b1334e096f112ce8c5418b42fe1681240c7feb00d3fa668f7d9e62", "1a6b37f704220f47111d5e3f6c042428b0b7aceff84398387b50bd333aa2798b", "1435a4fdb20e9f5c7f0322e10e24c32e3c514cf619f23ade29c6f01ce8352a3c"), ("2e5200d2e8e59cc55578d82ebd0c4d9a6b11c99d2ddddbb9c2f7a009bedeaa0d", "0fe53a49ab5b9788c934fd4806743f3f1ed0e12a846286cf4fa989c820cae316", "28dbad0ae2ea650397d6a1a6472a8c0f36a6d09ec9e8a1c8a65f2710cc9e3894", "05624db4cbdd4dc97385314df764802dadc5c7bfec2f9e6e7fdb284d63961cae"), ("1d70c8c4414183772cadba7e5cd2594dc3fceee78373d34adc82b8f919d3cc5d", "2c4ed8b3031f1354701b343872a0dc57b9cf3f5a06a3a32cde8a881b4f7812bd", "0da76010f74aaf590e6adf4aba9b416a1183ca07212e184bde7d723ead1db0b9", "0fcd1ef8be7c5466de5f6db57163141e40e91903a6672cab528f2410551e315b"), ("005ec4226cc0273b35a67be314796e73458b772d71fca2e1f55f26d1e4746450", "0142ef6355a5d3b8126138780c30758167271600bc860e121e4d63e5401d3b47", "1f443b51eb2aca5a13fd73eb059f7a05cb511d6b5d659fa8ec28132ece27678b", "1d0ed9b0bfa4f9f2060aa77a798b7fd2f5f8e39c8470954079ab7e0e6e884a83"), ("267e3637de4961debe49cf86b67b1279638ff91810f2e59e879ee818bf90c73d", "23664ac1fa1e78379e746529ea3ff48650fb2fa7c0edaa6789e28dfbd78ba962", "2c7bc537fc7367f29c34b735f06f465ff2bb8951b8fc59f6a3abbd723cc97f3e", "190f496ff822c5d837a8e6f07b7a4bcfc262a2aa5c3471605280d18075602fa9"), ("0c656cac95332898dfc9d58b8a0ce38dc8cf1ab47fede2798560642b79d50c6e", "12dda0d2d794db17563c7b5d3b7cee4c2f235de7ab66dcbcb03f32363f4ca144", "28a1cb181ef858831ddd1273436d94a5eb35ca2e1d973c68768efe2d7c9445fe", "1c2e5ce05253f500887822b04351d27394b007a3c1171af9f28f36700fcecd33"), ("1890ecc623c7abb92b86ccb30ffe6a7e2c8b7edfea45206768c0c9f72c5f266f", "07c4384462bceb32f88031d339122e7feb8d104ecb30db9b9e791acfa39c636f", "2b3184fdf420f3e214d90f0ed05490620119744e6150524cf75427e1c4e92488", "02a73e76a009edbe33ac807acc9acf399929f77811b52df460497fe6cb55132c"), ("28129a7dd880baa37d83117cea6994e0c2c1bf627a570c3276629bc574fc953d", "04b0791bbbc383615b9cfccf5ec0407c0cc7cbe36dc1ea8fc5d217154e8d421a", "0309a1cef235fbf193f4f31308e435fcb4126073f0e9f9f19de278965eaafcff", "11d47bfe39ef2f144731936d68125aa35b0087b8e93828976ade04963bdb4c8a"), ("199eb3cfc3f85adb21725f4c169c823095d3eb1270d77b205bc88103325a38db", "0621aec6594deeb4ea1b6853c6311453893d77a4b487d59d1327f0fecb8d22ac", "012c5d1e697fd0d6bb2da5f25d4a7903ae74e2d5cac492d3c1514b630a7ffb95", "172b19c77045c8a0bdb19c2c3b44adc083698ced02f8fccda035c92f833feb10"), ("0cd1610b55f24fb5d12c5ad986e83bec0a8ec94872c8a7c337ba3f55139bd84f", "074e08f26b864e04d11cdb475c2fc47e63b1178a8d21a69c69123b101101cc69", "29a94c4b2b3ca4d130458231cd2369ae076beef930982f5079cef2c25ecbac71", "22e3b881fab68e8a1f33fb458121db0d4aa2fe79726ec15de5f72bb6018715fb"), ("0b5e9a31c100dc0744e1811592c527963388e7474a44a1649fe63dc1aea6174d", "23c265929fcd1399eb1aa0625afdde576eb0a84bd32c956f5e0de3898bd2327a", "110737cb35938f6197e19369244a86aa4bef95daa416a386fa261bfd11352e4c", "152f93eca19bed940d34608069dd8845a7aa96954bbc88c024cc1e6525bfdc44"), ("12b1db5adf18068f5b8257b6c6bbfa6edd28029b3eae1a149231fe09f73fe0a1", "02e28bdde72eb1fc51479b05ed53708e2591327fac29d31658c62a8dfba3c911", "028ada1467a8527062a3c67a85c55545dfa8c3ac1d5c9f9520caec11836d1fd0", "1fb5e085f280616db8d2dbdc18a246fa9b0cc056b5f59601f67e1a8a6ae29168"), ("1a23525f343017953d730e2302348460a1a8d1452b62ed88596a37a6b1728991", "2a34f24d9a30381fa18e88394b48b922249d886e3148d8fadee94a8dfcee16d4", "21acc707d6f494631ef839465ef92f2c223e98e3976f51bfbc5edc22fb746692", "2d8cca9be5a6d859460f65601e30189b8c25ba810dccbf73a520b068703d0f7a"), ("1ceee182b76b0685c7ff2019fcf928da3f2e70b801fb400aaeb9274518d8e2cc", "01b78386104ec047ba7dc12350f8e27a4e016353005a7644e469786919ec44a9", "2aed3878da1ff9591702bb858978e942a95d80f0dbbd39434b5096587facdc96", "2aa55dd79898e0e126850e0faccd39752900d7d3b90ad8e2c710fab831e94d1f"), ("1841fbd68c0db1f3ae86b94bee2d2286fa6a1948d22a1ac898c55672ab18c6c6", "0e6dbf4400198fd125023a9ce41a598370166b5f5d62bad77d3b50335a0f34bc", "0bec02cdec230b3a9987369caef3d7218b8140c05dcf38166eaa36924af33c9b", "15aaff9a0c1fbcdf748d49d6fdc25989dd5f81258b652093c68dffa69e9cb823"), ("1570daac04584c9b720fe1b0e3d656e1756c8d8f2508d12b63be7b6d54649bde", "1262f69739a45ddf6becc8e12e541373c7705e578a32ba641bdb2e1996d3d83d", "1d6d309fe5ae5febd7e0eca150fef0cb241fafd8684eec11bdab939830d26479", "223e1b62703efba2e4cd690bf614c1cb861e1201d205b9c4a4f31d7242521337"), ("18bbe4c8d90fe991495ba728bb208e4847abc6b7aa7322756b914cb915107b82", "14b9001ece380bd96a82a9c154a0d48f52209d79cd6a9d480456afa88030931a", "2d2eeb9438763629a7ca6846faa2339dc44dad91861b9edc14c76f77f5c9c893", "1ca540daca38de66cf5fbe75abb8777e258f04c90e1938c488d4a3ae41a41091"), ("1c2b2502cda06a2a0dc8abd5b98ea7e932cc2f82c769d4909fc48d3aa75bb15a", "225d0ab6f3abef9972efbb18ebcd756aa95583d9a4e647767ac9101bcb5fed28", "1c79322082e617440b04dde1e7d40e03bd4c40ffa29c84913d083183b0b3c0c7", "214a9ed748a53047c033c20be900c0b1864594da1d60bfb181a7d5ebe161cf35"), ("0cdeca1c947d7f5cb79774a99632e4675b3e20edc6313d37c1fdef4d9b7bb3f9", "04ce31afeb7d5331af1cc91d16db6ba3b7d3c9e9342ab11712c5cbfefae185f2", "20359f18f8d26fba2c07232d0abea974d38061d3d99cbb16c54d5a015e68dbd8", "2b21b35415f5a273fc49acb590902225baa95eadeb5146928f5ac457cc08bac2"), ("2794b0229c1d79c042944c8857c95635d9803ebb456b3f0bac27966a39155bef", "206e9582005f771f897b3f6e32af569ca19a7d0cbf206e215c2cd149bc71cdfb", "01787d806d318b15999fee14bd2b8e1b6374a5fcd7bdf3fb9702266658dea93c", "071b2c41b7c6fa12302b7af156b5ea7150a88e34376c10c67056cb200d9f003f"), ("1c1c1cb695afdd447eb900fe458c3e3fc0a4b38120913a222ac578c9752cbd60", "21d81040cb1e62aaccede46f4b4587472fc1d80994249e89ada0d57aec44abb2", "14a3643697bde978c6912abcaa1e90001afd6899d57c51fae9ee564e5dbfef0e", "1756b0be61e1964339fc7cc6ed5d3624db7ba7d3c9b0da6d35fe24b0a63adcfc"), ("2019ffd4d1b0b746c581037de8f5fbb85ecacb552f2722ae9058a3a05b291254", "1cb61a9a9961c968796e894c4860bf8942007033536d2cbd1b7fdbcd7f32a2a6", "2cab0dfe5c0444c9b0e3dffbee1f7cafe3966c058e8630037180234c0f69afb6", "29997a00897bbd11bb886a2ea708b175585c9408bff55908c3cebe7f4a7e2f34"), ("12eff8ec7c5bd19b5da992960269553199e75251a744d8c92c1b44552f320342", "0b1814f8c65ee926c2c16e9574b4413da997c95c848d35d7580ff59f36e3f264", "1382709efb901fc9455ce5baed45effd3dd134500ad4cf7fd2591a3f38e8685b", "30135d0e79e193553409914256b8c3605347b14fb2c72ef8b821aa9f561bbbf5"), ("0e660208af7032c3cbfcf38756e21c924ac7a689949ff94747ec14acffdcc1bc", "1355dba66d0672b3f0c9d6ccea810bfa7ae7e1e46396f1064404ae64be6d9a8a", "25e8d02979ae0a1fb5b97ffd80e8b944248ff28e9189712b44bd3aac5d783b39", "294aefd41383fabccdae83ec7ec41168dbaab42c80b3b979d7b28ffaf82e9649"), ("12c3e1b1c82dd428e7f7ff1b7bfba67762488450878a86427800c673b903545b", "13f44944becb6c22c7a93a31b9d01d8b01a30af83fabfeed6b46e34af1cefabc", "1e8b86df0235118505db13a85681b2f2106e8d0e2af06dc5b9a841fa7ee5141a", "159479b4ae77b3882bb7a3d660d42d3bb6dd3c1b30c05ca4e472f95e1840429c"), ("208ab6691c9c1a1d4937957f1c1bbd84ee6b546b5a45f5ef0ce8d01b89245b3b", "142c41ad29d5858a72f98ae07865cb2cb29feb79b854acbdb394cfa517a3dacf", "2472c7126b75c46dd89082dd1e372c6d09bd14579ac3dd2f138ea494628b8256", "2d1d3fa63cbbc449edc05bf6452940e41283aba90f2ae18d4846be5ff7273a66"), ("2db310fac6419fc27ad9a2c7f6f814382e8dccd6cb5efde75398fcea3447b8ab", "0425bccc9d657c12d41213dc698fbf2e5cc2d9e7912692cb55a7359408caa9ca", "303f57efa8e0b0fbc0a4ba9c358fb472b596f91bd3156e1d57f2afc962b8ccbf", "2fe20cb15bdb971d34bca1df796e3fa77f88691783f525583fae3d58d3386f44"), ("1c9d52d9bc75625ca8a06970cc8984219480ab15404f3ff1fbc857a86a45c110", "19ef1fc55cb31860e9316f5c4f5ec21faced58beb11cedaa2775f5d8ebd5846d", "13d6ceb901aeff55bd1fd27c42226f0a7812393ca5d47deb950a62a66ce15970", "1c13c0d84ea0b9ec9117522c8b8dc7f6cae32a4e7dc205ed6a0712ff4959edb8"), ("153afc5e453c2f6b6871c918802bebcd01c2414bfa0095688c2569998beb1b05", "0cbcd419a8cecfd1b2e653d8d6094d4bfa3e53132f018f3a9605fba3ac1b9af7", "2a350e86c7d3d03079681d029126b265cdabd3ededce9cd3e5428b07bb5533dc", "2f843ce9d1f44fcb9b95433e879fa81b2e54222c1642fe080ab74b1f3dca2a72"), ("190b3baab9efc70a39e52b06b260cbd84f2c80ef1929bf68f08a361c5dd5ef64", "091f15aa7984c63ead2bd5a494663950912691a99e124dd9d86976629c5175d2", "08d713b93838fd09e28559cdf430449adfce4158d22a00be2c13a85f2aa7b3cd", "183a3842ce2bb742bf6b09b47b78c16ceb2ed0154b4564bcc755ccbc5dc9868e"), ("2e3c8214d7d598eb0260a64b0dc969416798f444ff06d492b9901fa9ffd12b6a", "2c949470f6158d19f405e893106d02ca8d619858d2fa8fba48e26210df44ba91", "200ff9d34eae07fb48884d68a04b18a8dd961fbbf73d05707fa7ba34225c4a6a", "21c15dcf88cae47a5e9120835c7a1aa04849a4f9f7bfc6c76b471158b841933a"), ("1182b28a7dee49f70a6061ea5626cef4cdd99083417c3dae4bcca9c23ad36bfd", "24137db0bdc14e8a06db00a2f74945f4cdf2f538594afb18c2dff79e9dc43d8e", "045db222811217e0d3cb1e6084533706c4bf7a7b80400b4ee94578a529f7de7f", "202a354c57a609a87c4e3f5de3f779513131548823264ad33ea59f8c3b59708a"), ("284f0a133c334b06d4b5316ff734ec25590e0b7f99ad82b451e11144a2e5590e", "28a080847d552753a2334e79a1cbbf89c916c4caa7c941c9288629918b9f169c", "036356fa8cbc7c01adc3cfb8f6f9b5524737b1662130e445c327ac9b8f7d9abd", "08082131b013bf18432bbe52d8a1882238b974e973e727ea2009edabf6041e6d"), ("13ce354b325744f7c988a738943a0f8ba09bc2cb3fb585ac7ac522fb238dd117", "08cd853bd54263b8d2d6f4eab3b93ad8011a466f1d68c421bb174375cac93f1f", "04d63cf8a735155cffa3bbc29125dcc00596042ece92a950a2b3bd78b0c91d2f", "19dd8d134f8df11ca61281d5776ff771fc667a40aebd8d427efc7ba77d81ac38"), ("2da7fa988af9f9887e9a308e65ca13f6fcf30f3eecb509d33c5e385466e2ee27", "105297c524f8f3cfc428cb1bf529e7b558bb551b238114ddee4a0bb76481a0e7", "20e80520ad9d126268ec8bd3f60e743c956a55c5806e3019335d13a78092043e", "07f3ad3831cb344dd700ddbe06e6160de83836a2e3fc692e0d7c0cba1bb10f59"), ("2e2dfaaa9c641f22aba0e172ceec9e08469b978dd25a395faae66a9c31b12b9c", "14fe4e0341b3ca1cd369fa1a745a8541bdfd3e305acc14e2d1e951e430897fd1", "27619d6a72335e42ba0faf8687e046a7153c5929160372e7bd994ef5efb3a046", "169003594418e733ba5cb83046894fd7da3a3920b11aba3454eacadce4bf6111"), ("2b57ba124416261d4179a2d95809d7327e476bcb87211b18db7027f93359f5a9", "1bc4f424231dafeeb98dd3c1738f846370ac100cc4931a60e50c5f176e317b95", "16596df7eced392dc690262b5b1243bfc0356cd17b2af573d0aab45946f20440", "2f9ce0b276e010f504ead01aa6a7e7047653e3629ae9d566070c432cf3afa451"), ("1f04c3676b08330bdd2f44dfbe86f491a79464950504344a98ed8e4d4c8c1fce", "0516c29c6abd396b4b3b157aa0d7944a92a8c55ec9ce3809a2a67d5cabc6eddf", "0a63e50fc4b45971d4a7f4064990c2b3f54045a04e782b17845b4841ba3fac2c", "2ee8e7da953577c9f70c9c16b987c86a61b4dc85713ac31e570ac18e58688ef6"), ("12475411021de02e327517deaa2da16b9834fd9fc40aa3b33bffc3cac29685c9", "15d825a6e74b5d4a069f0f6c95f4a2f821b86de0729c9aeae3c1fb5de6e46327", "1a0abbcae93201d0d2b7af8399b331680111895da63ab2bbdf02731c2e551f1f", "20aab5df7613a32128a7f30dca75c52a52e250c4b105952cf22128d06c6a899d"), ("0e80b60333e78941a7dd5a9e18af5319201cf69e250aac69f59f99a68d6e4f27", "1bf441eab0d640bf85d24e581a118cb6199c5873a979cf6ba0fc596af96cf614", "0b06cf0611636149afe06b1948996146f69db7029a73ef40398eb0b7ae2af8c4", "2fcc921fb192f24c0ba9a11ee437b82c0dbfdd303ce9309b0ec03c6976bbc82c"), ("0b1e16e13882c638e69016a91032a3479c01c6b55ad080d5ab1837d241182321", "2a5acd6262baee3b745d8521b75141ba5ce4a97702d71bd946665a77db70c50e", "28e9b21f7595af878f9a0ea24f1973447ce0026efefdf4196cee199d8ac5088f", "1162a0fb92693571045615b72775deccadd7a552598a83b20ff3e04f6fc45864"), ("1fec97f8b07d1f0a2d3d67b39644be680bfae685a608e04debad4c5ebc87fecd", "1c5ca000cb8dc917d4fad208cd372c3c2610499039c6cb7f952d44b39d27fa1f", "0fc754dd7373749b6767f9f4d983535792162da74a8f604779dfa899b4df496b", "0549cca5882c526c0f62b3af12243b9069c9676677bdc574391c57372eb1381d"), ("11d48d0cf6553097b3302225a3437cf7c45ff261adbcab9874889581484f57d3", "032d477b1dac2bae509215f5cc2e66472cd32eaa74d87c2a1718acd5ba22cd69", "184841d1a314a58407e473a9d77e45d74a78359f72396db942cf654c32ed9f12", "2a4f341183c1f5003cb9b28e5c9db5edbc5238b75a3adf7170f015da7073a065"), ("0077e348feab270604dd8994938946d402d438548af18a73468a430dfa36d878", "2e7b5ac7fab7cfdef7153aad28131202b8c038ff57004baf9b50823c6b3389a1", "298a0e1a6be9a78cba95f809bd107fb1549511179ffda8813bc437d208105402", "03dd4f914064184d039db9dbe8efcf2b0a562bf0daba8b2b4472e2e1709c70e1"), ("1f160010ea34e52257660a99605461359189d650cc702f8ecbf53174194e3b01", "29f419debff13c5f18d4fb90092e500e241ae81ca0b98cfaa0026ff9d06cdead", "00480b2b14e2a575c870e84eaf8c227f275088f2ede8e58fee4949220b946722", "1bc9c044283585adcee02e39daf13122fab48ade8bb28a9d85a593b5fded74ce"), ("0558d23a087040976f45a0321a2696d18be54eb373370a7acf2b0840d1b8d07f", "2e7a4f02d732f62fd00ad4e781ea5af5a1e68fc8eccae06d9c518a99f87ffc92", "12616f3a9b034022af6dd87eb9e50702929c134505afcfe23793010ef6cac930", "2824e160a152af88287b04088349d7fc219cb0f0c399f52205b38e3b79750478"), ("08c68960877890bc6a5f4dc1babca57f6708e33c237c56dabc9bb50b59f503cc", "06faac44ef90ab530b004ff8d1a6aa20a5de726c4e564d8221f3aa1ffe529d2a", "295ccd8d4eaf2e5af665e8bddc3c2f73fcb36c67909395e7de822ad3f72c4b54", "144ccf871524363c24c58849e91a1747c729b3ced96009554a2275a556de1912"), ("003237c156010064b41821e3b66de81eaebb4cce3876b2dfa3a7eeb746900b7b", "15082225901d9823a997723bfa6130cdb9b921023bbad42e5e9559d48ebc16bd", "22484afe8d881acde36e0a777f996513e74713d97e3cc8a551a05e82dea3586e", "24eda4242d003797e1538f0d9438627b66624164f27b09c9e02d2a4677d49d37"), ("0af2589d6ac9a28651ca6b618bd64bbdf0715de4d2f50965b59a3e89a12ff32a", "12fd62cb74f369329c922c1fa783832fc0c2d286594b0459ffe0a2e15dd5621e", "0897a4bfbdaadc9995ad6074dddd6a3b0212ed71be8b1045a450465ff3a3460b", "0eb6431bb00ea0d33874e42120bb93d76441a123c6132d2969d7626bc3a3b1ba"), ("12ca291fc7748be2eb6a24aea9b3b065f17ac980958d900e07df07ff68fb0ae5", "0d344056c4f1ad9931836a9cc7dcc0f7c6dc0ead48e18243c5f2606083db7494", "1641ccc6d2de35d5e98572bea7e6c8bae5a389768c0b305ae24e1ec2142859e5", "0570b8a2602b6a30cf9fa870b7eaa36d309bc746366a88a11c22472aab81acb5"), ("01653cee28fef67357634dcbc77f2920525e5419a7ee0ce9ad1d2ffb6afd4f1a", "02f22d726d84b0a8b01516c93e371f228fcb83f1d6d933e465636ca78b622422", "2c9df4809b0e753a429cbe9b31d348c5fa65d4b1d81d459ff9e63faa38517a88", "2736953c078ce0ede0eee32d3b98fe6f7c66c8e37b9e916436a28a836921f532"), ("1e27fe22378555bee734863c3fcbd52d6cd5a88149ea001d3b72a2f704edd7e3", "0876d70c041c0e64bc88471234c2b05e41e446ce614163098b7fad4cd224ce6b", "047f82852d2b903cb4286f23336b9c093e185f5423041416030cffec35677a00", "0bdd5af7721b82e7f96275376a6fd9445a8c12c15bf27feff58ec90b46da5eb1"), ("27636c7f06536d81d76f5f4fdaa8d769d41996adacf2a5473d9bb75cfaec62fe", "28b2274bce86c03103f0a0f0cdb120b4cbbb91b8aff75aeba34725e605b44c0b", "2370b6e939fb0e7edd33eff110cfc9b3a9331d0c0ccd7c1984173a0233b1d7d5", "01cd58fae68fe38215bad4c2ee7722380adea84202c33bc902e3a157e775cf99"), ("2f7e9d6213aac5b8d7c76e2adfce82b8eb9d1eff1dabf4706b5a22ac9e78ade7", "01dae7b00b222eb3ab6c6c02753f171d4cd7e1ff34cee55a9b45f65bdb9090c0", "195db1dfca316720c039b6e01af1f93cff2f12b5c2bc6c3339ac907911c0afa2", "2e46c2f8a44715ec784ed43872bf4e291143cca1181d7c7db3f01de3f6937c00"), ("021c7c30f8ba191f760df8f3418189a7520365b0dfe0126c588d2a72e24006f4", "044743fab0313f557fced155886230b34fd9d855b437b3cac4ff6db9d55fb56c", "2c07701549d13c98eb16d583f8d17e21cdbb1289723d002b35a4fb89a4b4a3b6", "05b5394b77be8fde03ee782c1f5d6c537cd11eeb427655ecc64298d1843ae1ce"), ("1309020249d3a1f1eee5e08f792768d737db0de4bae4b8b2875ab4a5ad7a93d7", "176ed4befefbd7ad913097d1b2ec8a9c4c95c1465e86199ec33e05ed06716888", "0bfaacdca9bf81ba24c7d38c47a24d8846e5f95d71e0e44bc2f0e0b492182363", "2dcd8083c375f07821f5ec2cf38b61bb426131df9fc43cf8190ca1426c9ff0b3"), ("1e46733662c1d6006095d8697085834944066c8607275143c630d219b221c302", "07af5396c1de9407a40551fc09a36699178f3374655f6edde3070db56a37e435", "0d63f4700ec30233176432706857f0e2ebe927465a51efdf884f326595ebf546", "1ed988181f688c914c11be15d3c18cadcff7f8133193bf0d2ce333d55794ae79"), ("0474e236ae8ba8c736430901190da5eda431ff964364ed022aad68c7247c71f0", "2e7ec52a931cc1a323d973c818103e6c4a0895f7cbe64a8e91c462a91e0b7d35", "021f0285ed71db46cadd4fa07c4bac2e17fb107efb269a41457dc08b327b0f88", "0133630a41fb33c56782b0e9f2a29d9e2a36d1b954f730f7fbadbb235bdd8fe1"), ("15b6c486cbecfff80dbdd3e245c7cab9847d75f805470a26769798cee9412e6f", "13f1472db5c3492e607bb3ea8e612f3e30505a55abb6a2d6ba5c104ecb8a4f77", "2f487a968a09d7f15a1c70deaf3c3ed997e6e4b081be4ba085d17d73f6e3e198", "1672457136b1c1d7efbdba9e745474edf2854c6da18742ef77ec39612b50aa1c"), ("2cf68792b3472050d8500fa689e70fd88a97cce103e7d93f5cc7c05443e31ddd", "2c7b8ba250b3a3a70ea1757c5b751655d5eb3a2b74b639e5e4509991529c55c1", "10f7ca8db530459120ee8a6a6f43ff0615945b6551c7ca82896139c9323b8635", "1dc5a91a27bdb19f9a0229fdcd4ec141869ed6afaa49c2c18e0dbf120c6a7ca5"), ("0d70a7d0cc121c1d4a9ff4d3e95e87ced4579de932cd7237e582c7156288dd36", "003b59669d64ecb0f29643276d8763987a9e02ddce81210e92184ac644d12f98", "2ffca5d46c771019ab38606f355fc0d4d3244572d2e5b735dd367c373c2f2a6d", "0faa8d7ad6a094dfa2e7e19afa41e2d1cb518ec38c7a35c163989382d14f8d41"), ("058046e52fdde4de93b365787c794c62ba06b22aedc3bcb99e128f4cb84fac1e", "302d2601f736aaff90c8a2c44f19440a416f6261b29c4c34e871176281b7e8ad", "219437a3cd402b0184c00bb066318d48fffb836ff5eefd868bc03b2fc65722d1", "1e4891256c549c7f01fb4ecbd387c93bbf73f0ec7ada0dbafd8e82df34336d49"), ("0bc3a0bd34dda7c2e630ffc441f85e94b9e7f1f8c4f7466da0d8c1f68561a058", "1900f88afc0259519699c3629c10db0e79b6de62e4ed768ade44353a89beab18", "26e947a420ea6735825685875dd056ae525d01b5f406e5f5507f86df9f5a0fbd", "21fe295e135e47998af51b911a74060f6efe3549ce8b881cf4faec087bfc3857"), ("215c9c84855e06e67e5b0a3c5df8509f6dae75245a9dcdbe39538cd4a2fc068c", "1ac0c921678b392352a7d30e311adf00dc6d243837b6db60079241a1f3d9e933", "0ae23b8a7e293a2a4e37d353036647815fe30266ba9c9a62f61db230a6e5c72e", "1f596bf9e360464585846ef6543338c6c27917d761e4b90d8454017b753fc671"), ("1689a56dffceefb28b8c89b1318d7987950233a574edf2b621716456336b5223", "03cb2cc92a0647372c92b98c4af4ef409f21eb43cf012a519538cf081650c66f", "007fd41040f07f2ce4dd7d0e66a1718beec4f4f992b2036948b5955bd5c190af", "12141fd4d5dc3f6dd58ed90e82f3acb5dd85ce073100f939b0e0c608671d7f8a"), ("09dda4938da50bf928c99185bdeca753359fd026e1c8a8642b327beb713c09a9", "294f702ad5d753f0edc9c916d06c319038a0b35f859caac1bac6d09416f91895", "21e2f852b0184c68050f1f405fb7a1d391b621238db537e21c6eacc45ebeed4e", "067d3869ee5f43c2d7b905e9b6a3736c44fd22099ac92a1f63d88c7fab1ce2db"), ("11780a9bdab82d6b3c04bd658efc1b14de91b262a98e35404a2c3c36304ee94f", "214ecc2fd8c255fd63c45af5550e993ca595891be3165d4e45f6141e5146942e", "2fc66fa58098b5af1b9517f31a8fc9073665b523498b479ed79b49893ce901bc", "249a0c426bc38527008fe698134da191ee71788b6130440aecad51e6197d3397"), ("0794ad40aa964ddb8a539252a8a5a4076131a143bdce0c594244cdd746c5c388", "0b9f290a66a4d49b4b64ba6d9c4e85fae8f8ed06aa58edc9bc75b617db422370", "13fd6e66e45d4834d3041e91af71775c239a0d885c6d32fc0b57d2048f852f0f", "0987cb265a671ece00260576b9feadb8d70e3810cad6b12ef1a38c463423f4ff"), ("292cb022644f099221744bd10380e6f0d0d59d46467f4a8de55aa2656fd8bf47", "25d85137b51a46101256ca30af303895fecdcf0fb3b098b46ddd82a2c3212cbc", "0fcfbf040e5d531e986f71252c8f5cb7eeb27e3e9788f814a7260ddd0a2f2f64", "18fc44ffe2f00c7a2e23fe1df57a90fc4e1c289b82f720da99acd2275a844bd8"), ("2d914d26115e2c711f0cc0620680e9f259c24f87d691e21b30265a28c04cfa1c", "0c6979f403efc881e7277e95c0ceff1cfdecf0431cb542ae434e3e5ca2cfb073", "1de8e43a2119a8d7b2f63c6c951bc5b072cc717d95b63bba84d0459afa6ecb44", "086ef74ce2fb0d3a2232b08d3931c094082a6eecb2159ba2a69e7653682a8b3e"), ("1678c32ba7516bc7a3509ca66062d13b1425b1a4641b65a8e885e5a57d342a05", "118fea99d67facbeb8396349f4d0fbef3db444931ef67320bdf6bb0c6344c1bd", "269b1533cda0517f6ace5c9bd80a22e66971a7747bf7c1f4129ab31a8cc642cf", "156074b5bd37eac7cad025b973d0e698d85fae6c5f7593d315f18966135ab3cc"), ("2455fe91be423e3590e9d5abb1432fd416bba8998ea03488f0f23220d305579f", "1539ef9186eb9e09f98221ccc31eb33b6944babc6005e8b0e7b5d18fc26477a4", "13ca8a9989e8f95bb5cf51ef3571fb1ebc306ea6f535516bcc8d7e37f197065f", "1a8b3db9ecb9bb5bd535f29236985b6f6dec579de3f1244c76440798aad85a1a"), ("206cda7af3981fefcfcd2e34db64c37d267ff720a4ad71ce863fe14eb2d47d53", "2f8c60e1b0b788fbe3ab38424ddd96219f3aeba3627f6588ab751808ca5c1cd7", "10b5a1b8e6a3970e4ff37be515e9407bbc57045f16c9dba5a893dab12afb71bd", "0f1169bdb1c97bf743487237e11aa0dfd239c271aea3c3fe08ec96be2af8def8"), ("0237b60d60280d209d1f8073b481a8482e197430214426336be2804d92a92edd", "17eb01d4dcf17506b2f2c1f008ed82c6e6522ee4e910b42d542ba15fc264e563", "21b7a4ac1dd0e22f11ae4b74aa7aea24a07a77973b812f606d20a6c7a2314fd2", "1d5fe8930d9acb86d3a5b72bfe68d93aa79765d4b8e31bd70f150085f5160fac"), ("0afe4cf92596bbeeba79a50b370f2580541ab03534952d8fbba705f7812ebbe5", "146af4af21b3dd40788ae5412f39836e4b6fafe068cafa0e738989159deb9a41", "0392512c8f0ad2a6fa718c12a3b782c0d2848f5246a225b3c10cdc46187154d1", "209d9aee4503302c356895eadcdd86b9834c7c81a20297d0e6b725aa6e98e7d7"), ("2cb9efe1de29bcfe2da223f05321ca06916f62136cbe9302821a2c7c635db50d", "21bba62bf530fb9dd31c0598045c0e97c8e4fdf3b0197dcba6a8c5e583a5e31a", "05365a1f9695b3e88db33128599af592d9bdbe09ecb33ef3dd4100b56405c70d", "0ab393655ac9131412151cda501d0c26d8a163e763b45a81dc07505b7a862faa"), ("05b0346a4b1d26e4edfd1fd9840dfcc873ec9b289f62a1a0f217caf18e80b8d4", "2111f27873ed928fff48435bcbfbcb5e3169a8c5761ad1c0ec70fedb59f7ee7c", "2aa2c57d56e6a0a8fdc14da7ca4c9f8eac760d7dbd46a0c350980c93dd8cf4c4", "1535beb21cf8d11d43a36be74934991c007dfb26d6707e7cc899d2ad9559fb5c"), ("03f3cfa2ef860d25e64827772f31506cdbde6923643f5590d329a02cb5b39b4d", "1ada88adf31136991b93cce5057af3a735780770201bd81e784173e3ea3d68de", "1d5106edf140fcde8e4815e65773ed79d63ef0558713d70bd8a12180693b087d", "2680648543f807e3907748a17528d9e07794f35981106b72b4d299835e4e650b"), ("1adf5dad429c99e89055d2325e10d9a506193209218cdfc768b83a7aee2c2cd1", "1857c32d86599bdc5dcaa3f7d2f1856883bb666a60c329835d5166fff396b055", "155bee98e40b041f9de8da73a3afdbbcd5257fdab8a687c85453f0f968a9c59f", "2a7c2e8ed1e4a85349bf48b79a13562edf76787eb55481d430a257bf063739bb"), ("080d5b514bfb80dff24bddb34fc0be39bfbf7b9fccb01b77eb3990339990c9ea", "09fd2597f23d913f18ea1b03901a362894a2a42ce5265fb0cabacad8c1f9a541", "04c3a9ed213dd6e90cb984739c1fddbe85174f617909695801ceab1237e1a81e", "07ed66cc1dd22de550bdfb89c09ee838bbed2050649e0664c0715d5956f26b63"), ("23b125ecf5d274e714df21ed701cbf9cd9d648a658753dbcf0336ae94abf5821", "20be9b80815131afd1b33717ce3bb682b6abefc9557013dde15fa186151eb402", "0d263ece89541665f628a0dd356dc21739bced284c995eda82ceede669af102c", "1a176e965c0b912f2801bf1b446b93822f449a996fae995e551534298532eeaa"), ("18a90c9ca3927bd7b205c236c4a8712f871910738fd4bf2d8e3a381206e9ef14", "176fce5c2ff482588881f2355e310ea8a03d5bcad83f3f3d38cd727bef2748bd", "029993318e2c611d51d4150fb1ba7214cffd0ba31cc78b364bf414deed5adb7a", "1d60789b29d8442ce3ecaa97d28fea93f4cb31ee2aa27484247eacb704547b58"), ("2bd4c4243c7018c9efd8ac6b167744e37ed520ae84390674e309a443b716a3b4", "0bf2ea76feacb8594b04e1420e9b4f31d5068779df4d4d7552aeac7da6229b05", "194baa0b7123119d98f1d16909da677a4d569fcadecbf4b8ecc79c69006c1763", "1f01fcdff96e6ed482cbc8baebfb1b4d724fe9c60fd38d4bc8113121c92405a9"), ("24fd3eb6eea1552f994ec9007111ba88b932c6ee7023feef6ef6166bd29f1fd8", "0afa154c94bd724f50679a5218ab5a749d6c58a206a6d6b459a85b82067fa788", "0574295bc28e04443eac934b2133dddb7ea98898530949af97e103266727089e", "002170ff8c122df84ead17609764b402b7010a3d1bf98b8fc2ae9f6430fbcb15"), ("04fbdee458718b1ea42ab5a807b5f487a16a39c0978819ccf45c5875b736e7cf", "2413f0eb1fe16033d61202e298f3697f95e41db5296c0be670bf3d61dbaacbf6", "27cdf06280c819f30a45bf67eda4ab36fdf260bb4d462a23f1c37bda4a38126f", "020162e8606e4993d44128cce04cd46c1263f100bc767682d559d8cd7a19d792"), ("11736161cb5a78bb7f6841ce6f1f4b341b55fd47eb69d02cc664760b7df93c89", "0388051761ad2a5cecc18712db407a6a45f0da4a8fdb69d8cc563f448f88d109", "1b7746aa84a378ca082f38c55c4ff34c55d387a29262f98a2aa2111b754a639b", "00f7507859cde4a548a85c704c16a2fd6c00ece471e532fd5de94d76ea1f4525"), ("0e3cb03736c49815112ee06f82392416c059574017bc547662a7c96c6892b147", "026ab96a24a39daa02d3080f18e7bf52e46a4d3520630304bb6b2e3d46439e4a", "25e38cb83c1411c056b66d0fc5dbaa3eda1d90e8ac28b9bb3c7d6d1da1d519ee", "0c1560dd8dd92dcd940d3b9666ecf38e9466aa54bab0eea872d77a64ece6ac39"), ("256469872528afdc78e5c2966dc41ef4d80b0f5de97defb90965409eec2cc9f2", "10318504845ca204622504232aa621f6510d19697dfe98b493d3ba1bbd2523b1", "23ed40e04d71568afc2c0d7d703b4ee2ff8bcb0d0caf420352d015801667f5f5", "2719fe82059a2fba4d8fa96685ed527f2040de560e28698ee5b87456d3c855f7"), ("1eb77212a52ae4e8b1af85695bf7cb9ee5e31622223df289482444adb874036a", "27f4617bc1b6127900ed8df84d8301d7d307d2100ba2f65a2e42283e1c009148", "17631501cc7c3282c33606ff406a53f2926975920fc62bb68a0c5c9967aebf80", "0d7724aabfe143a308844db98f0c952da83a3ba8acd1f1795f654ec7f29b0125"), ("1546fa841046bb72420b91011016f24b760e267b277a882c15ef7cd46552da0a", "1b8b5059fd2bae9228b0df0f96b01dd4ed4c04b1870193da00ddb4299c25aab3", "096c454984265f5e56af2ceddcebb90afe31eb91be7e76aeebc9c73a4f38d11b", "27a846c13fbeb594b4e6415f8159bc91d02f34b693c091bc5e46901d3abb42ac"), ("14e0a21914b95c5deaf9de72854ce72e638fd176d9712d947e79cc6c55dac093", "257d7645a391ece3c911504f7b643e37717e1ceb2218f02b5cea9d96cbd629c9", "0ad62a77084336b802d5ed6e914e9c18168d011c5d77641a49a9c3d8e9983fee", "0f27e15f45edea88ad20432a5341868bb8128b6e86cef45f3e603f4921fb0f7c"), ("2bb85c1109dab61175c5a0b072374a4e9633ae4a153ce36486ba404880627585", "0eb718b9c98bfb0a081f86f5db9e22657e92e49ccfdf05cee509496ca78060d0", "2e15dfa8d897bf7ce0477d99d0d5a4153d122affb5356e0fefd7354e8194d97d", "04f2919e9fb22119fca51e22434b55713c019a928162d6290668acde4e54ba1d"), ("2488f1e4d68c1b8caf519a741bc233971b28fc32a2786c886c116dfb99027cc0", "2ce5be11981b11cb2e03cdc0be4a4a1ac6cada228c29f65a6065e794619c5463", "0aba6108fc2bb910b88e8b4618f765ebcf33afc5cc9d4aeab5f46bfbcf3d6484", "24f5d90b11db4be2100024a27acc020cae44fd65c069b059fd97e34b9ae6148b"), ("1225e324de805ae9d716c7f7d2519dbd0e662d59516d4e11223258fe4533dc06", "1c7f012bc80659ed7cf101ae734758e7009ad27a904bc4b7bde9dde4003bb0a0", "215fca4ff21554d35b62774436a91bccdc43e825ae50059fa4a5dd9f2da0692a", "18560d25532702e7f3362c917c637627704db18f64ccffec34b9d1eecaa849b5"), ("286a677c56af2a1cd10a4826b20cd12b1831aea96bab05371937e7fb982c1d87", "2172439ee5538aa2b5aa3bc93b6999fd3c3c0b6c249a8c4eedde517dd00a60b5", "23430d2243653fb621c1d0d9dfd56bae754be1d7674c65f022250befbb3baa9c", "0f144f59cb3617cb49c33386e3f891f2e40360766d744667053e99590cf7ceff"), ("0f4277dc9b8e2cb681e89cfdc9f06b2903005dfecdff49190df67e6ea6797dae", "06391d1e8bba08803c8fcfee47bb8661563aaed7cdfb678910a0ad6cb6e5726c", "150227e1bb7df714dd82ba31b789427c6d744aa51a3245fc6436cfe85578bad8", "0349a148ab16bec1cab6ee51722595a02660f6a98c3436326c57d737ee3d277b"), ("1852f0cfb42b802c62dfdbaac0737f591682e8a39ad2b46a74ab5c004d7404aa", "1864f2b066a1d2bd731f43131d3a049599077485782ffd2c304310d141fc27f4", "08de558c3eab200da5e568543ad02e714e48f42bbf2f57bf62829e51864f7e15", "0f28ff705c6bf8ebe0e24a6d2d30bcd045f79392fed581408331f882c1037a0e"), ("19507ea78453d2f90ef2dd4341f162a4fa79fd02006f80df230cb85ac5415d2f", "15583b2f0f0dbf153cb3a7ffd706be4d8fe3196dab99a7df5b9dcfe0f5429100", "108edf5f82b8d5ed0af2428778bea1005ad1cb04beab5ec726a4f74b6413576f", "0b2c9cf361ea067cbfba423405f1ef748706777974d5ed4b3db8bc880438fdbf"), ("03f181404cf027d8f06cebadbbd82da146ebc06fbace98ac5ba924eb2ad833e5", "0180eca469974bc0315e5022ad8b602c02128300a003cfc206a04df50d4569b6", "109ab01775ae95d333c7fe5645a3f5f0ba41eb8962b613f88903447f3eda8663", "25997304a28fb83198d2cb2a386f92c34515fd7c15983da876badcc01575876f"), ("04eeb466566234a727a0c1b0ee25efb40f6c895dfa1d371c6245f41dc097e3d5", "0bb608e281394ec21fac54368f1c6f01f1268b306923b07081c01bd46675ff31", "14efee613c8005e85de304cc8e8d2503875d0a93819eadcc3908a0e24a0b22ca", "1355effa853e0e523f3c460edffbf2aaf86cc3979555c645745c42fc8e129ead"), ("10730d0db8298c5c7f1bda39680d2b2aaa69eef18d630b9324070f791a573a13", "1ca8ef3eb6f5002e1df35953db1559b919da32e00e8340e16d317d07ababba6d", "0beec67f52e337f0b7b50739ab54571584dae910b9bedad7d1e29d2427d21cdf", "2a7b7571d3dce1a4bb079ea99a6792b8980356691b28fac2469a7158b367c8e4"), ("21ade18202bb3cac7c3cf4f14f935720c8c1a04b079d9e9e3e3b6c70d643510c", "0a85ee82bd9ee895b3ba7f3411761c0cd58fac98c62d68d0573c5b748e365314", "25030e30612b519883566a2dfd00f41cf2e5258207662064449534b936ad7703", "2aeb413fa55604c996fb0343d657c6bbad0b80b690d26dcb3fe11b50502d36c4"), ("1d2d3e6d6d8ec774cb254c7becf14ce8f626ecb9f3c8bca0f15e6fcfef7543f1", "0f61f95cf84ca8440f240ba7972f19cbce3b7bb975c628bda2708ba3024a4644", "2238940a000aeb20a01619e4e2f41aed4b4223944cad8857df20194afaa01021", "0370cd2891734666b946f7b1307082f64e49a9970bab9e981a30f30c3e1633e5"), ("0451348ee080dcda4dd66818f9588661a9cefd71ee649fe55ec330114b1edb23", "0037febe4f7e2cf0800070fc3c687b444bc6a1fbe22580f1dd3cf8b7bcd0e923", "0b397dc6e66ebb6dc72f169c6de1e6106b9be05c49bb934c1d810dd15190d179", "03bc7273718790c3b05619a86146cdce981617db0c13d557140088cd4dd58c6d"), ("29b5788b517a6d73adac367be2f9b697053875f12fb99c8a23f542bbfe5524a6", "08dbdbec53e47a5040ed00e5dd529a1135d6614470ad80a375a6a60505bf6a2e", "0218c2d8daffdf6d7f5240c782b7be6b575a3c82bd40ad7084665e55dfb51925", "1b301e05f2415b1d773543c01aa1974f2289cb0e48705ab2d9fb93b5aa9fc8d5"), ("234c702aed88888e03442353fbfd296ba6ff8bb700d3bdc76a03544df872ffd4", "1032484485ac8297d3270dcf449fb9b44944dfedf7e6f6b0f19468dd7ac35c5f", "190aaf4c8f048e572bf8de479e1305146fcf54bd0b4546d34cc45d10097cc89d", "1b8202164087980e284467fbc386d541e060641dd3f738c3b295bf26449b3b54"), ("2b56d5cb5f8c8298c2b9982a2b91d5b5038807e09c0aa899fb85c5c5e65ab4b7", "0925fe2b4528aaf1780b2b8f19725fa22b160c86e7d58203db042cf821ea56a8", "2e11550f7dfa2bd86f02ce4a7069e4631b6ebaad3eec01c0627044117657c11b", "0b45479c8a1439c174ee711556bc27549a21c0166962d974117ef248f5f1ee26"), ("24368111636a9e21e6feb3803f82059354ebe5a2875d444bbf2c621363df4f47", "0455fe178be2bf6c238cda046ba9ed1176791d6e78641af3f8f4aa5ec28b7ab5", "2416d8e23b73208be71294b3761b040c9ad56fba78afaff79363d79c680e91a5", "0794a0da9b2140d2c3f36526dbf1eb1d5c1fa30c3f1ce32451769fc8b8debd73"), ("1cfc9698b22642adf8ddbe4bf65081fa2f29aab30b622f28a814cf23582d1713", "258d5e1028528623a8206a39437a82d2e05b2cc9d46ffa86b5dd651401e54e72", "13e127d36a8690b66f5d486b8be11f0f3b57d9487a213c4be1be52cbef9b6333", "25054c1f128068c5fcf63bd5aa04fc4e44c62f3795eb0eba54e2a930f41a44df"), ("13ca5e0ce84d6e5782a75722e79b09395f2331745757b0ddf8780edb42a6d800", "0ae1d79b44354ba820ecc0a4c4942ffe46f3defc9b41c57c164110031e3427f1", "3015944f5b9d931286140ffc11f32416a871999dc0d85ca5ccf00e24c48f603b", "18e342f8ce82a25618597f62c3f994f2be9e57611be7fae373f24e6d216777a9"), ("070bea021b8bf0e0c8c380a104f158eb9cd7446ef11cb94c5b95fe0381b7c376", "105a833139dc1a2ab69f4e800680db5c4f593c739c44ff32e1d2d5e09a075a48", "2f1888dec898027fff78d1044ccf67afe11613eea159383f0864aefc0f116370", "0aac018b9f45bf0658492ce80b92cd3d2e2e35e8c074b233c8a503a7072e1520"), ("107c538c423223788b00ab8aa90daddf24f30c4f6a0f38ec5f037a20d85a0172", "30409eff6eff2a29fa47a3b407665e44db0acb4f9f5eec960a2164bf500d8f8a", "2f09a5444b708b2b9fae837fa911bffe9ab4963a4db03469f09e236b9f21a327", "05a4f81b70036b510e3ba98ea4545e3c830392c52f493bb4b1457e7d9da6c5bc"), ("2076d3dddf5648e240b9443e6dc4bc293cdb2f4355fb782c1bfc3c0e4fe235ef", "0b3a67be0b5769f076f046265350cb8fc3914bbc326de095b57c3b9ca867d78e", "2a7def8f1da56c49dd50ccbac1518b76f2e1360950641ef7a0e45fd1ead3fc22", "01b710740cb4e78cf96110d81c41b679555395f299ae594bffa963b5809ca622"), ("3014e0dbd3f5db74220e73f47d5cc11e7605ce427b44dcb0e5e37ac92bde27ae", "0753538a0f4254a44a97758b20d13e3f8f15747eee8eb0d4ae7464af5d25e03f", "0f8db6303b892132b91f4a2dd4496f7ba31b0f88dbce729ebefc9c344ecd3f6c", "1b759ec17bef40c6663dc4e4047d43406c1ebeaea04d37ec8c6c11e7f7743ea7"), ("1af80a5edd0a404f327b125fc498fc87f11657c557b95071e0e9d69a6b643e9d", "0336be3379386c74907bd2f9541b9701a5aa349ffe7e0ad83b53ced558c15d74", "1ad7a9a052a4b312414138f63461779494b32e81298df735eccaf6068b844f3a", "1b1a2a2fd848a0a1d47ef0582ff132178d448116a3ce94b6e2dbe8474e67ea74"), ("27ea76c2d6eaf94498f728ea9ee4d833478755539233a94b68d0500ee7a7d254", "043b18470f5a16934a602b0287e5608c586a54a34a6dffab6740c262678a042e", "0c53b66760c113999176a6c26ad842632c402b76524ac685ec6b33e83c1d1465", "0258a221889ca18f07ad19d6920003b69405e0406a619bfce13a702c963e7ce0"), ("0f387eeeee4f82c362e5102ac49d932bae4895a245ef209af0e2a9c99a23ab6b", "2295704f7ab8f65c86eb4262c47d7e165e88c4919c16989ea9526e0fdcbf0c26", "1b5c00f595c35b0cd6a1b6421b203759dbe47e3d3d132d551df874d1b94f6b31", "18865d7981e62a9456638617682ea5b64edd47bb79f9989b9f74787487e26a7d"), ("04eb72e22e0d3da79568131895ed5ce6ff0af0e72ad16f05b9b5b8c4ef64b6aa", "089cfc054972fe940533abab9f5524da4bc1104781919b7af6b450b50b9afa83", "0bbd3f802fdfa976664add7e8be96d53460214dee382d8813dc295feb1e022cc", "2a0e3d9d03b306fd5913f1d9a7035a115d0bb23533d186581301e69aaca8137d"), ("063bc700389d6a4434e839b330fe4a5279b9a94c4be80335cbe32f609dbe4854", "2d990067e6ccfbe03316c575419e837aa8a87d14df5980389c6b11bab76f96be", "1060861b82e0588f924ae69256851c96829e5da46a62defd2be0308f33c805bd", "2ec142c33a870833749c39389f12f11e8d9945d1da5c00c2ba8341c949f180ab"), ("0cc151d4268a2bb1f566265f6e2814dce3759b4b917eb6a41f1bda4ca703a3a0", "2e63f69882baa0fc2d952f290b0525a4cbd7ecfa7d7072a8d5f38ef436f51e24", "1a8b72768fb9ea24524380751f16d7195b96d028cf0f54cb8fed736e83d1ecf9", "2d48089af52d1089a0af25f05d869213e521eed1299a14fe42572948bbc5fbb9"), ("2ee2e441d376f5935a1e512ae55759e7e7638322f23bad7f70cb6c8427d64a7d", "237b39c8586ea8b319078f4c53562179da3d6a96561774ac7a7da5c17e49a28e", "07539cd9c068a126fa488f0f275ca152515e455d8396c4f69a96477506df547c", "0a9831efeaa2b5e558dada5272d30e27cd0b49bbc81d45182b6de40f83aee5d2"), ("1a95133bd6b10ddaf64d8d27deb2f3f611953f9ba9862b76eb7c296ea1d453fb", "06d6cdb717120fd1dce4fc1e086aa7de7d691314d0c38558ba478dd58d20e864", "0b950a5948ecb1f0d9bc6d85e5ffb8c974a04232fb344e2c307200fcf76717b1", "0751c2c90eae47f35fa6c0a663305221967243dd2ce389b5ec0d5a5c3dc4d57c"), ("299dd36bc2ddfc592181b7216a519a4056ee9bf133fa73d4238e137237da7682", "20d121c1cac665b5aada7b8851ae738592d43da36c67454390e44c6ad12bed57", "06ede83551bdd16592e9326b67fad9df8c96409859c7cec1f2e1c10db18235c0", "0ac2ecb244fcb8cf32e63533d7d0ccd09e29ba0ea3b8e1f6bc96446f60d7184f"), ("2eecfee6e836346a3311055ed2f57a07a4999dfdbde545c2e8532c9c9c45cf6b", "1c416bddcac770116ab1071d2d93030cebb50375809961327ea2866d00232651", "194f9a7f040b28362ff447c7a8b2a30d73f235f2da8bfb1966df4e5a6b7e90cc", "051934cced2d4fd6806c4a3537e04431ef96ae2969c9dbc602280c3f21946072"), ("2d2b73ab1fad7576787f951665e908d045d8ed8c19408615ac5c2595ffad06bf", "227f9c8c5cea416d92acd33181d73bb1319bc23ba6c1b9f66618fa06aafe05b7", "04814b6b938ce2db265f0a772216c4e8ef54f56d0779e424d9ce57f1d7e8c5d8", "1331c18a963f2b761b7b9314c19d5f4733dce31ae61681aab578d57cc9acbc8c"), ("28445bc3ce1714ff1b64fe2a34a920cabf57ac56d80984e345e83c215cac308f", "0efba71110ed59cf8438f74975b02da3769c408900efc1412a0db07d922f2403", "0d51b91b03567dfcbcef286b806b98b9dae686a145c252ad7861e3cf27d8f420", "00ae6aaf09f2a85d83f49fedca8c6f176bd0a3e8213b72cb302a60796bb8b7b9"), ("03ae25a923b34edd8d98538dffa7f1d834ec6b2a60e72f3c475e9424818a2f2e", "02e51b0ff60f0289d46460e497f40bce29eed48a31ce5e88af54af96347f988f", "04dfa4aadd0d21135b107574c7c21251c7b913a62d89724347b0666986ac7c69", "3019f7cbd52f2b79122c2cf3231d63acdf805adbdf26892f7b99ec3a466d69cd"), ("245394f9a35e78c2de795d697c6d8d125982c8708f9ccd0adaab92a3703d77e8", "23e2e375480e910c649dd025d9ec444265668964b62217bfa65853128637225d", "15d5883420fbb282426742c6a43be110bc7e8a22e9422774d95720b451277b7c", "1a8b2d0b0e2727720a57d2e79b95b344e1c8c84d9de353df6097b1b159ffcc97"), ("2c6eeeeabd4c8063f94cce534aa6514565debbdfc35fb6a38dd9a0eb18adf014", "07f8286f76345cd95b613b3745b53495cd58edc56cacce59fa2415f5032d7710", "184ca1da68a58dee97025083ed305ab3693c6b27a582511d5d4e1d26130bb137", "0d6e3a4c019f152aa6e74dcdb194e7351ff1d9ba529b597048b06b121bb848eb"), ("22f891712bb22c7175314de6dabe5225fd4eca3231158f069bb1de0345072570", "129b3a6ee7ed191e21623c9f032304da1618c4fbebaaba8ada5ee7853e322ac7", "02775a30ef4e9bdff04d615b5788fc33b368a8f8b9d0006656587d7f1b82e270", "164fddec4ee5574d6fcacb311c17ce0a6752aea7262e8582e6a5cb8f85c404fe"), ("2a31016074b2e13c13aa401f584a04b2602548452e02febb193047022fe2fb1c", "129828334d69ea0adfad4911379318b4e4dfec4d1be85c1d95654d0885b52e71", "25c899653593743f28be381f7c38e7d8c628062376d49bec91759610b505725b", "2d9ac7c720b51673118b1eaa7b8a782ab054c0811f223b805ff77eab881b695d"), ("1e4e3f114c9b7c99214d305c0f2d6b4dce15379a7d41e53782011aacb78fa7d5", "1c035f8675e6ffdf0692f7450e3a77609985521e4a8d6a0ab5d5696b1bcb7028", "22d90befe364d26b4f748429a57bbfe8dc2316038965cc07d4d6c1dfce712fcd", "035583afdc41352fbcc3c9f5b07fa4b4e960c44a689c7fc66b66a0bc00d62f87"), ("1201a71861686645e9dbde72e5fcdffbe751013a2aa6123b3e3077832b0d981e", "1c1ff2d65748721ef7d22af90f7155a46f3da08cff26d6f040909167a972f0d9", "06bd890a4111c25240d8ed06985859026f45c916508a9e739d1892f4ccff0857", "0be32c211893f5227a1ebcf080f58f5c1ce7264862ca3e37c8af15e700fd4b3c"), ("18959e17b720c6a9aa57d6d3f67b3f52e82257cf0849c7731a4e22bae39425ec", "1143df9305c79730548c56984134812775f402405dbad3ca851afe8a6dde7e24", "070f72bca68df10d2af07aaef315d333c180dab4770ec3827b5668b04eac2eaf", "2631ec53cd7bce4c22342dc92da991a6c1c3e9d037ce672f19c52375e60343eb"), ("23ac68d0b7b7085fb57b5f6ab89e4dbeec508e1721446d5166bcb843a7099329", "2e6bd8b0c2a90b17b1057b88bdbfa5eb09008bb4bb29d815871710f11608ad29", "21e294e4bc0a61a21a76f1e6fa0264cdc1178ae9019702a8ef85f8cb2ee241e1", "20b755d81495ef24f826932870f8f2b35142f6e90f6d1b1f0825b949ec31be2e"), ("1b34f0b44485347e0bb8ca43ef6d6dec55a2c2eaff302f791ab3e3365406f2bb", "2342309a1ebe432aa25a3eacce081921ad82e6adffe51203846ceedefca8af7d", "0f249c8f0ebcbdc1b97e466d9764129e910df03e5f76852e3ac741bf44980e0e", "001f4f79a592ec1d474fcd0ed0d24de06572fc854832d8b5385a0ccb10206cde"), ("039d5ede09b1714971cad2fb6e7b593d3e47dc52de96c9b2125beb3f69c60812", "05ca7e5f2b27e4f6262cabe77eb9f693c3df714e3b5ab1890e2407462cf38e2b", "06828aa8a83978c89b376729612371a7d4c0161419b3fd88479e69b1494f69c9", "18f7e5d71c9ca1a9853401a567a49854c5d7e2757dbe3328fbe17e8648022194"), ("220710d33d98550cd97d2cd31cf642e2b6c793985779827b112069c2b36d9504", "01c0952148327c23c2138040440f67619d036ffeebcc5f009f7f000ba64d7d18", "0bde99847094fff4e54da9311c3ce95ff2327edc01361794492d443d9d107e03", "0272a0546bf06daf37360030b13f264b34380c0a9d9a7ff86005c12a6c9c2439"), ("2513bb0bea02918890374992225478315b0731d739441d87099fd2c54e9be445", "2b34b3f2b0c6569c3cada876855543965729e30b198995241be3e935bf81bd87", "08a360558d4eaa42d103308baa9647b469b7130ed8f9b4cf9b17b67657e01f93", "2d21b6dd51848d3c4a1e85e231a46e7fd9e4f4e3361d3c6040c130b8601fc094"), ("2f68975b79fb54f14e41ae472e8f64e8be24c2201f9637c1aa026c01631c289d", "2b0dc66ee48efd9078fe309f7cb6d577cd8293bbda000fb8b55248feda99ae53", "28e160ba8567d85f35d6e2505ae4b2715cf500d65d99840020bc6ea89b418f7f", "2aca137b4d6819916728b98f47fe6a1ee3ad9fef149a04114542954c25866ccc"), ("03d4d50dac8254a311e148b1b1162860a8d586c758f732621e0bc979206d9d13", "10c7c9a22e85b1c51458c07c000b0adbc8a4650c5fbfb97a94d74f25056dee47", "2e337894ab75eefeb92f67ca204717af39f51f18e846668422a45f818a638bec", "077fe941bba10855e0c4366c1cd5d69f81c3cecbc1dfd03b73ea7095acfda13b"), ("2d24f132de3973a44aa24ea1dff7f316d1edd9ed95f89759175da7bf6f76e3ec", "125c5495fa42e0221ccf372b24f7d9a682e84b5947a651f3168e9a7156e3320b", "129d69aa89028d3af83b4cd6554009e8c8f7b157dd631cec7a1028dc07d9d6be", "2bfe13e5f8f2250f02f93a5e306e778a6a043f7429772d9b0f55f501ee0a21a6"), ("24bbd8115fb140ec7cca6dc62af0615dc150be4b2c0e1eab847dfbf286e0ecc3", "01ad6fc93da6282d37971d9e28615ec79f4cdf0b4ef8b97208837eeb5306b08e", "07ebb4f7797a658f5ade36ed6ed1d8f8c2de161e9d731d6b1acb44b91ec9794e", "23a02d425fe2c7788dac93bf33ab99b673a89a967ec3e844231d1cfbaa3baa20"), ("15fe0bc9a7357ea208a59cda783d16b4b44046f6e19f34be0b6efa03cc212029", "190a7327bf324776d184f256632dadba66f95e40e80348ac7540e59394ec58dd", "00c7b39aa0a848e710d9d30b2b5ac3c4fae1aa9eed8b2f66d41273edbdcee899", "0c54c9c601dbc4ff8f6122f3da42bb80cb830ebd672a485c1682263f2da0ecc1"), ("0bd552370d648f65bb0a47152a400561b60e87e2c23c6dad5e6772b2b34df4eb", "19799a976966cb86f0c824104a9c52e778365d50d2108491676152d58cf30b79", "231b902dc15e182ddf1ca9ece41e7c3bacf250d04d558ab6f735ab9b44e80b3b", "1a7aace0e792c32358dc64d626242c2dfcebe18bfe5a1c07bd252666cfd32606"), ("17da0178da167b746c8da9996c0cad7f2fd576a7e0ca3c46331d2572f4d893be", "124efdcad48cd960410e640b79df168025528dbfc3fcdf340239652fc0eea713", "2a8be0e14b4f53b4beeb07e2ac856fa0dde41f02a68ab295c5b6256e3d1bbb91", "05af5eeff62a56815e57046b6060a0afc8019569ec3329cb0a1973ea81e919b1"), ("16d3bd7cf0199b914477145288bb87d12a258a7abe51fd2b60fc71056d4328f2", "17a9e970e16bd82b1311a27b3ccbdb3283d6b7be1682f42f62438f5a3a4d2294", "23018836e3fcd46359332c78b06bb5a69627424ebf84db6f31ad89cbf2036703", "0062b8a9472aa8f0787504049122aca0559a046116d29f8dd6c4be62c3053b33"), ("1b8b3b13a61d04c2bb588b4a9ed940a603bd207d16e7b31f1c0fa4b718248f88", "29cfb853f9c7988c82d062ab1b87e5466a9cc308755d98983f7ed4635eb30870", "1747baac0bac2ef352bf27322631c44a4d1b2174d9a36e595a3fad02041e19e1", "1faa0d473d42db3b6186bd27badebccc0a745c178d9f6780fa5d1c0a51cfdfbf"), ("194caec9664017f02e2b3576f0c9a53d6fd3c33750c44b8f5432dfd61e687386", "11dcbc6ed226109243c45e5c8d7c57e3fdedc245fddc42f7b6a22abaa98340c8", "2c28b1736ca63b21d444ffba542f612b64dc5a1050d199a94f7f9edbda29e3de", "2a9125c407d63f02417681eb81ce400902129d6ff20673c863c90cb68f204d06"), ("0f35f5ef9a816b309e42746041c7ffad7a994f19ad0f04e16f44eea1a9c5f92a", "2b0c2fdf6c3f3ef96ba89b620b49ae05844ad6e54e3494fb6a257b23116405c4", "0271b28c85481ff4e3fbb6548e22eb1c16900165f6c6de94562566893777626c", "23717729fc4f56a812badbca3ab934157e14aa229fa1d911b8843229ae1eb5e3"), ("1688e1522d532f2b80dc3ea21b4a7c7a6f7c219105638426d6c56eec5007370a", "0c4afa8b80cd42d572e51a3fd04d86231fa3197e385e0bb75416ce3c98da40d3", "2d5e087d55a9594f4e84a3141e77fc3ea0fab4297ab73652006a7dc9ebdd40e4", "0e2ab6661679bfecad38efd9de6c90422cfc6ede2fd7a0cf1c25cc4e8a73482c"), ("03e74fca4f9378e7935c2e8a9d722bb24e1736cd7ef9a7626c8d609ce333680a", "2dbfcccebaf6b7372e6c4901549a1d4c93c092b3e0378de74faf706d2e73229a", "2c0bd5462516431cc67bf50be1d85ad5056ec4dc3e0e680f9da84aca9c84cf34", "01b6327db65ae7c0f4025ea45af34b11f038912e07d030f93af9278d61be7177"), ("0a43594415f835da388d25f86acfa1dbb763f2735f6142a0df1a831f90235ade", "086b9d3a5569b12eb0f46cb0a62542400019371fc3c72d49815c3512727c36f9", "21c6eea30e9353bb8a42056d2838c1746188c67f5e7a8e40c7dda274de2f8f18", "179146e90076859a68e0af2d2de90545f6e2aa6306d976838a41bc99f6b64f22"), ("1bd0575df1780cb8fa0a5123c58282daa9503e672b526d08ae412e0ac2f0a9c1", "190ecd178925ef6b7f0b31286441ef63b2125a7338d6096ae809727a41fc8942", "231eaf3f0349ee7570e85457cef590b18603b6644be72dc85f31b61230c1ecac", "2bef70d38bb008963b756b9eea149000905ebb38fed5abcfa22f11992916b8bc"), ("0f12e5de5628fb9cab92a6741e4a4ce210b38fe5b3be3c41578c2a641e9602e6", "00f8d7ebb01387e9a844a2f0abae3d3b9876d8c50b610c4e9624374bcbd929b3", "1b17770e071684eb952c1c74ff06b60580a5b24fef489dd985d9c00867518af5", "0ed6040b436ff1b15d88ae25a7437d82d4f02ee4d93eaa5967bc59734950dba4"), ("302cc9d13640ff23187e2a449e6f43bffd2800740c3ca14a044d26a3b93e1db7", "15014c9ed137573fb8850609d9059e7b37ac4b2ffd92a5aaa3c2adf7ea51a7f8", "1ad7bed0052031ea95c6209add04588e27716d6a129734799d8681310a9def89", "0abefe6b0bfd4fd1e9b32cf4c6ee8e1006edef2f58670cc2b41d3dd76dd13fe1"), ("2caec58d9782645ea6435f267dbbee54beeafbabb290ef055933ebf13ae434ac", "2ae1d75fa64b841c6cc083fee37696c5708d2ad33be6ceb63ffe9b4db232e758", "0dfbd40c213f4737562cf034af55e1cdb8d580283c4117f1a705c0f62c780d9b", "12d68b293b523d67c43f5fff15063bb2e4741726f6b9c175f2a8045c314969b9"), ("0a1e7fc18a54b856428a2b6355e6fc676008c3ac19dfb9c4d653d30675679089", "2aa67d21cb332c404e842c3d589ff41ea37f02d3cb380f59386fddfcc8481a27", "27fb0220bffcfade423750a7c626a9f5240214126bb7e9ed59bd4b42bbf1db9a", "2b67769fbea6f69528e12a907bdb6f20154827531b380a4320d1d8176c625616"), ("1f577ac3a56b1d6a8021ec956b290626bcaa8d7a3c32300e38e0bc05a6dbbd43", "13d60f465aa1c452fa99566a5cdf4532a8125f35a22c8797da38548eb7f4d660", "0a799955c5c42c7219f5a0c3690b8aaa7af76554df787f3ffa5536537d37c42b", "185a671243f809265bb39fcbde218180768df9647ff43e819daa09f69a99888c"), ("0080e1aa706ac1feaba5896feda4b8534851d467b1f9d410592b0bd337abd1a9", "1db0e7b06b615bf3497a1c494f2290853b8c0ddb29b664c660da10d001931221", "2de8f00cfde4244b17e32029db98110033987bd7ecf8b8ed659e6d284171810b", "13c91b7a6d69c3ce41fb1730a906311a18f5667d1c2f6279f56ba45feeb9cb60"), ("1a7821fb8ad339a8615c8439bf4114df1fb52f1b7a73d2b361db898753183fdf", "110bc733581a96692a1bdaca94b5fde5d66852fae529534f345db08435143c19", "1edf3198d765daedd749d54f4995d15372291a5d51b0d912791483f0034a3917", "1732fd23e621b6e635b16aaa66da639a49f52371b9902fe4a99402e72b9d463c"), ("1da69099388ac4bc8b8cc900777237c29ee6c2d9c6e2f9d345bcf81f0c411a02", "0817449eb570e2b5a78a68732ee8240449ffad9b7c2964a1df3068758f93f592", "1f516d1187d7b7334c6c20ec35f84d69963fcdc7be7c1d12c02dc1577fba08a7", "20248a5a5aec6dfac57856d4e0a1f43cf3d866747e1103bb03a33e3fe6f90d3b"), ("09b304f8451368fc49a9cd95dda0566320eee5797a823404f4ca350c07297fac", "1c7c6fe4048b498577bb4c967737f89405007da791facd65a1c99f2717dcc6e6", "2b184a88cfa8e85b771ebf9f330c232ac4d99742f410fde840ed888359f31b66", "15b2d6880652ba6bef40c33d8f022aa78fb273773699cbd84ffb936f9c87dc2a"), ("013b695f19d3313ad5cbe7e91cd99ec4bb24e69b88cae76219b9c4d6fb9a4113", "241818cc53557b861201cc0c248b0278fd048c22d231c8f19b13b115bd4ef8af", "2baba2a6c91c9e05954022a0ef38f4e396b705ebc3a5838718f1054ebef38229", "2eec19bfcfd0035e56512c27ab1dfe0c7f723dbb548f4e1a655112f997b31724"), ("07730c68afd85f589d4fce26498543e2b9024064af67b09c7cf85eb5149861de", "00b66806559cb499b28a5bf13fb58dc44d95a5a908fecc095e70178405122f07", "0ffa976720dc03c4b93ac635e536efe2a6943ec957df48895893b221f3ddfe67", "1bd6200cb5b012a9d242f751a41c730e58df9543d74538b4298ad532751ac117"), ("06380247230d4e457c1f8d871340490619b4180e1d506bd45f75ebc739f5344e", "0c544389fd162bdcad72123d39cc7f54df19e5318e6ae014a09fdcad71f4437a", "1e0453eb2da5a1b75e5eee847cf4278768cd17a76c474718c74bf044d8bcd5ee", "09b644b4843b3ad0929587bd3b3d110504beb5a2b16327bac6bd9b19213e1567"), ("07411810ce0a311dc4ebe3ce53925695bba2b9acaf9fb38a532cb7b5d788e148", "22502228602a845ba38d7febacc204eeb0ef11a3daff2f25a4d65c9da3e9f9d0", "0792ebfd1e54aa3cc68ce6bf534732a5522ee2b443292052408138f9ddf3e07b", "29c578ac65f2828a8ef2d25d37c5c612d9ecaab85287f9f490d3870760598866"), ("23ef1df66263d9a865e63311746eacea8b0302a68376b9e045df23ef69b9a2c4", "2507275b3ca6bb0da10352ee7312a92b2d01010caa3e98fd1cab4aba7357b369", "0d34021ffc272421aaf369bd93b22e750560e7a8ee00907603e4cf9871f28f59", "1bd9d7126c12d3820337bd04a9f2548e949fb5769cb1b7714a5fb78a9fb8e02b"), ("198a0583d50e83af084f2f32d8a50b88a51129b3650a8ccacb31c23c6f35075f", "052e7ae0d78b5b141b7215f5a423c450be1a10bc3a3b40a862732ab3a24596aa", "019b37950d98919b479565eb99e14a4146fd2ceb7609d2f7a6900edfa4f2d110", "1b3fa1336d658be48805f2ecab87320b8109a011dc68dce3c6f9fa9dc0d60b15"), ("1f272fcc303f0dd9ea676694af7f0d848e387be1842551d029770ba740b3997d", "1ca6f61d47aeb266c904cbdc2eeb77bf0b598efcf7c9b7b320334d31989372bc", "2734f974eea8cb2ca1c47a0a3170f34f8af2a695289fe8abb9468e7ac294a1d1", "0a83198cfba4d2978b359d89e5ca23cda0401eafd3032efa227a78c4385a956d"), ("10641d5332c7c04f8ab280cfa3b303a3186be7e8d84ba6e9d529491eed1d5b14", "00cbd821f8c514ed9d733e5f2a128be619517adca713c2673420eb1f891f5e7c", "2821b71063fc58c9d23798edf8ff59697e19004be96b7ca4386ce7e213e9252d", "2474363d17d985ee19650cf23c9e0b4380aceb98544571892dacc53e9d4b9dde"), ("171ddfd1a6fecf375157047fa8eaf42a4a2c257ccc98f50181df6fb322b9487e", "2c41976cad8311ecb0359af3f982d640e13ee3557dcd9d8519b0fb82f14849fc", "27bdb34c9a2b7059810bc51342a8a1ab618e786d02620fab3dc12663536bed7c", "1b6c182959eb2a3e683e4d012856d806f904eb0a04a1f80b3399fe8d8b19f1a3"), ("050f986860f549894dfdc0f395552971961b429d899993e8008a10eee8e7606c", "029e1acadd3fb8aee207aa30e2a3eff0d7034f3964db35fe324e81255aa447d9", "023981d0375375c65322cc244995943c242df2ce4dd18fbd2082b51e8982968f", "02f34b082da05497724a869bb6ac3dd7b703c082b5cb69b04b812667c737aae3"), ("1c0034b51eb7a8eefffae216b5787991e3f3d12248ec2918cd61888479904f48", "207bb27b88ef531a6bad336fc845e10fa7d79f9bf0be2cb383db890845459ccc", "2be6393339dd4a44f88f656d032b889add634b6289c7b8c518a1c087e0bb12ce", "0ec913e597e581ea7f588e6f9dab45e2ba47cdda0486d6e41731c4679491e0d4"), ("1917277de8455412f7d0aa0f126a9847965d770833c8d32645739de49e28af81", "241672ef737ee535aefd34b72d74fd42a169aea99519361dca97f832172fe046", "090f9526295adf6128d4e75883d4c03241e3554aac75b03aeffb3d918c36ccff", "14fe63ef916686292865847a05710f559e222664c71c33c8b489afecc63e9004"), ("0ea0072563b2cb59a037e482dbc1cf77a28de2568d5fd4898cfdfe7bb5213c2e", "14b8a782a070e161a4e99af0bb3c7da00814a0271353ce01c6635568ac448183", "1985de64434557a01264678a5cdf136db196407450b77007c21af68d8665afd9", "1b0be1b511a2a29a19bd5d789cdb1cddebeacc1cb1b25e773be601a0d6a41466"), ("2c81f3bb47b2f8c1bc3c805921061d30f840e85fd32db7bef65a89e1813e609b", "0a3ab2766278ce165d217197e2a266911f509999d39bb5a3db527b504f479390", "05171ac6bbb9c0f2d79491ac8d9fbc3b6ddbcac9531723f91242d01243614426", "11703440458d9eb92967eb35fe6c639c063e1f05109a1b8abeb1ea976a705868"), ("12f505ee3bf0e1b41b9c0da06e31ca0470fa60e4c6be8c625aa2ba2caf96cbef", "2e4014e1c99db9f6b522fd0b5736aff77f5c9beaaf1a48e2bddfdd7913a8926f", "01f267fc5b9f527652bc96410d85c26a36aa60921d09dcc53d436043ba4d2c33", "0e4ef8366c622a23d08fbee87d41b603f43c8da42bff12ff00a9b0d58907ce7d"), ("18482f54f8919367fa51273f56c3f5bba545db12c137f172b0b3c994f7312b4a", "0f3f1d420f938871e7a17a3fb9deffe66990106eaef8462d4932459a131fa27d", "0d608114674af96876cf6077828eeca2f5f4b84dab87c5d2e69c4e8c4d375454", "09727257b0ed05231f48fba071ed120849e527ad079ac344d3f15080d5737c80"), ("2877949c50382162ad40f46b8416cb751e8183b949398590de7e05a0092363ea", "1300e64cfe29381199b2afb1d04efcced37f426a0e316d43220c1e7ca2088a39", "16f325362ae5bc3f416fa63c62a9b670ef322b18ac543c1ff86730000e033b41", "1ec31b85aa94e0d610b7d431a7702895f68c2c9931312b5a1ee4069130245511"), ("01d98926199cfefdc1026623f2b2172fc413ecf63c23f42bfdef8315969c3d83", "29752d638c8f8761c65c3257f33d6e9d4043b73bde08587ae4bed2fd9d1509f3", "04e7c9b892eb68cda6cf0ad0eb64e6c961f6afecc5bffc926024d1d5ab24d737", "0e422a61b6ee432dfd6c2a85e8bc09eb06a80309f1ecea1a81e7bd98612f84f8"), ("11288927767b00b4a1e9dbd4a28417271ebed6f0e9b1d40688eb3ee16bd54868", "1ccd8fdd09704a40a78d9e9268e6c399dff17b312770bdf5ed50e1446b147430", "1c85082b3ac97bc398a5e7f383a77aa94cd4fafb593489fba2f3c8b3b0dca819", "05e66750a3d333b1b6d51df86154826ae86fbe1c9b4409a857ad8cf83bdd7ab6"), ("0411f333c68202376d13dd84ee9103cb387f0d46a8b1879871979f00e0bcffe5", "0ba53789bd811cdc514395ddc0ed3b4a4da0d252576e44a6ff8d4b0de3e4b2d2", "28da57ac8e33eb4e89a9626b416c09cea7c01b8f19994156def2aa151076eb98", "23c6d259bf5e21c8c2b0c8aa8319626b539f51dca65341d4fb0c5493a9632882"), ("28d86374bf5e26624cbe67f8bdbe3b8415d4a92c0e4c1a1f98dc664dd5f80dcd", "0adca389ac7b44ca3984800e122b449c96be8c891d2f84b49392eaa538830769", "2907a4ec07dda4c8276c5bb56123576a6a10d614cb2536920783c2aa72b45f76", "007abc81256f6485c561944524dd0f0590305a273325aa3f350c8df7ee43fcb6"), ("2c09268dd1b3bd94a357638084a7b386cb672d86f037b63d1c4fd2204ad7ca87", "1d57fa6ce9b0708aa580dfd3c4a5b8cec6b22d93603b5553046713529f65da70", "16913cc1034ff156650a07f7216c2a84930fb43f5f0747e2a573e459a840b351", "077469a31baed1e55bb1835406c52b10e346a8a859e0aacf85e5bcd4ade504e5"), ("238b23a9158fd61ba90ef79ace8ea9be7ee2e4bec47f8e17786f845065801fe7", "2a99dde9ca811dd4709a3dfc7b83f647abdceca6883be0495e542f07370a4f65", "00349dc423b1690a069eab04dc5d16ae22aa3c6ae00f0e9630fd69cc97065822", "296940a989328f8eef6801ac996f78c16ce0234001d9d37ca32b70be583c5329"), ("04f5af1d9c52e72668b02889617fdc75a0f6d98dc9923bc28cd9c1a50080a0e2", "2e698655863c8a02cba41150850243bdbfed3b32539a52996a7f9857958f3b4c", "1b1429cabc8203eafb33ee2e0119d8b29b2ca5e9bad12a8278d1dcad2d6e941b", "1640c8deae0840290692bafae34408533312356280534340bf87e5b5b65e9b91"), ("003e6bbaa6715cb27fd23507f7d57c6c91d291a20f1d4ca8648291ecfa7bd8a8", "0c42d5d39272eb14ff6c0390b090ba9f35d1601c86fde5f9fb07f2af298f8b51", "27289663fa7595013b4fb8c4c11e2953252c46dd722e2c9ad99c09cb8472b3e7", "179bf012250fe4681f4bb0e206a3586487e1fdaceebb88ac3944ca74ebad87fe"), ("197885d8568a1185245af3b31fc95573140987c15366fa3aaebf8f33d92318aa", "0e0a406b614e5f7faecb66ab7be6fdbee69cb3cd3e4c0dda88d22698341c4cb4", "00ec8c75698ed94331ef6274f732e8e5292df43d4c73f2cf64e0dbe758724126", "038975ac9a8da91eb3489edb22926215a4321b73ce3fa69b8f799029cb5ca192"), ("16b25a93bddc9ae66d1c0c4ae0c873870879f38e75f95300467faeecea3513c5", "08d5fcb52609ec3f830853720d3e7299a7befca9658ec494c6bb416248ad9637", "0a3596dd2c018508e0b5c44374c480d362e99c7f7096b7113558d13b63a21246", "1d998faf9c3f3119429f262760e92c8288d32bb6813fac141ef9723dd2b45e93"), ("05f0e6d1b16aba1e36e923bf15769895f3bee8e75ddf0c5a1e31ba8294479e05", "2673e83218a44cc64eef10ad36cd00eee4762b9a0b608e97b5a3c335b1bc8b52", "0b71d0f9341851dad897d5692e48ce917006af23d64230ac2e211b5c5750781f", "261d3a72460d09d2c099859a5a3d847bdd873c621d94326f250e2050e2cfb272"), ("1ab798f5ccaaa30159b95432411f7c0e41fb5eba54c5f782cd7489ae065945b2", "2590132771a96eb1a7dd5d37901a08896b01f88cc02a8e9ef52b3b355faeb7d8", "18d611d6ffd0007f788968aff6453e6156af14c78860eaf895da614c1d1d2391", "0edcff45f5a71263e9aacbfea0df091022062f06378ab3414f5ac2b4e5c4d730"), ("1967a4a2ca978548e95c4c01ac9e58f8a9c47fe5679e35fcb04e1fcc3f5d0949", "2008c149eddf3198ceeda3a0bad0e65d7684e99cefb2d20a534ac9078c7d838d", "2b0172846a6adf8d58c3cd66e17781f644b556ea44b5509b7f6c47a6fbab0a3e", "2b583144ac2c1b4f5f1397fa7545358b275b0a24a29d439b9d6f974d2f197c1e"), ("1365d9e65b21e43a6a5aae3dbee91aaa0baf8144bb5c5614d010f9a91f62bebc", "29ab394df2f49b2d942e8df6763aa8065213dc5eadb9251706b75e53a009aae7", "16c23cd320243e50fb7ea2b701005819ed79715696b6cf2872548073a01a3930", "009342237dcc305b968494e07a97c6d9c19b4b97b46954d0f5ff6e2f9a0eb463"), ("01431b6610247853b30d60357ea96cac119399cd998550e73ef432c47cb22e73", "249c0a21ea15bca9cff12c31a412ae7417d0bad42e14b7fbd8407a7a5edb5e50", "29ee61b9ede076b3acdfd80e5c0bbfd5dfcd96f1afa7f846358fd982eed1afba", "2d42a2ceb9d6682d58996eeb2a8e9f3ab522922218bcc2e8832bc45df75403a6"), ("2012f0bc4a0cc1f6bbb5d46d7d4284a3d55815c6d84eb6d1e8c887620cad424b", "24f6f7965052903cb7997e8d4bcb141cc4d778a4ab8d3d3f0b30e4d6660f645a", "11ab8519bb1308ac5d023f20bc216a0010641c01f139bf38e1d77d83c3586f90", "09d68d2d3de81104987748b2bb29f0153243fcf0dc195a707924e78c5bedce5d"), ("24bbeb4429deb9bd6c86eb5905a5a3bf3904d9b3cafadb4c09c74a68fa2831b7", "1ab286e0ed8bc5df6e2b96b65dcb53e1042afd35b783e31a25b97c6c5a42ee0f", "1334f7a755317c52c89b675a33dbcd19a42de80f80a741f23424bbb594612a38", "2c438123d807f5a1e128eb13b46b2c12f93e99adf54a7759d31d5c978c3e4640"), ("1bd8933b53b784bf2c2be2db8d87f1d164b42dc14db19b7b2bd978ce749c80c3", "0296195321993eb019673e09a87575b9562cc6ce564745c2219bfb6e588f1b9c", "0ea222e7108f676149a425d2ee8f06b0d2e64fca64ff495a2d7c7551a859fc8b", "0bf10e5cb4c1113e6e1b7257f5b5907839a9c5feaf5ffde10f2a4d73e5d14b05"), ("0042818c238fd1a3b4f9175f9fd05104a1377f1a7a1f3f86c2069da157e9c805", "257f8b9703680df386a3449334dfc80556d62e2fdee71b95c5589ee672620813", "1fa03a83e12be41904c36a63e271d1a220cf7ebe4b3f242edc3f23e9546c736f", "2f44780a0be5b4454f0da6e601af121f60fef7a010e2ba5a573604133674b880"), ("1c69d2e96e23f0ff7e1afa13e353677c0125f33f463ae24d55525011e7f70572", "1c65f57eb7a755b186f677b07f99a0e50f438d2173819f15ccd2512d42201ad9", "0a86973f202642c74242be8ba2f5c6d46dc5cb559504a0c50c3c4f7e9942d443", "02af0c6949e0e84bb7db96631a16107abfb9846d42f66e36e20de7bb153a361c"), ("12b21e9bc12e21b7b89b7134a5c254dc13b9703fbc1745a7b1bd067694c522c4", "218601246081ba441357bca2504eae0894ce976f7e657adb7b5d7771fbe9bd09", "070c6b4fb3957181f2e2744a4585297ff70fdd27f685bf4bde649fac1496c7df", "0529a08059b77f32b0a062a07f35f8438a576b0e6961ea01e2e5b36b226c8254"), ("1f95376d9e601d5c25f84ddaba7dd6f59b3516a218b8773dc7a68831c0b08fe9", "0f4e388f1beb2fabb3f041db1328b47f1b4f59ba652bf2ae3e1e1b48d8ee0196", "0ca964ada9d0aec7ce6ea43057147e3a5cca90a9658ffa0d41c55523ef744673", "2d94731a2ccd0113a7997af471c341fc0a68e5381628a3fba5d2908283705666"), ("2be484a00e7b1fbafb19d177cde0b7da79f15424f72683db8d98d48bed927eeb", "21c0d6a7a52cf99cb7be5bca74b496c7cca2e42a6923f23438d6a8dede52ed9f", "0fca63e3b088a964112777d1775488ab5520c784e6c4c6543c3a247d45aa4c92", "2840c64f506c3a1f785969621cbe73ea41a3d1c05da74d33074e75a81ac1d71c"), ("260cea4207ed05948757f228d18a24e6069e73c53532ad5f30b0997599ec84da", "16a4027e4659a718607258848a7f35bcfed4b9e6656dfd8cb3349d2be990a8de", "1cf057fb48f92dec62e1d44c746c7c6a2ed08bdc456874f659bdeff76a9f2551", "0345d3b0db368b115b36746d3897342b36ad80d8012aa6a87cd13cb0c909a65c"), ("1dd3c94870d872f346aff6d3dd6166a902d58b7c365f143bc47a0b99abf97afd", "17332a1a45364c3947aaae545cab5b3d8c7847b814850274ce5bca14209d05f5", "2fde4e1bc28bb1b64c41f55078396b96e5761facf52bb5a32b921727c3cbc0f4", "21c214fd1d50c2f32f4a5665ddbb9780db1faa9b13c16e0b204ec5c16ba04547"), ("122434544f9d462d4c4d092e295a0afda669a0fadf8d3efb33fe4946ad5e8adb", "1d5f9f171ecff8f23067ee163bbada6944bc97fa1b634195d89feebc2d175141", "02a22e4b9b6c9dd62df34ad9ad0e87e34e0c64cf3eda83eee4256533684e66b7", "2900bb02fed7194d19189a3147de4ce6728b0589a91ac77815874e84e868bb13"), ("299840c3dc08b4e7b59398856c752354f6b313c894334e0b35c2460891c55654", "2bb67fd54b1590cbcdbd87de3ccaa4dce74af3d305951048c0833e1da3404a33", "060f99e40af4fc3b945aab9937286844ca3aa603daaf6c02d612a3a4a7c5aeb0", "20752623b287f72bf0958d94d19dc77a56687ac0632de3f71c43a90a09899a3a"), ("20eeb43ff7557ab594cf7537e0569093a6776441ad9682571f38eeffdc9f7d4c", "00aa5d4370c7ddc02e05271818232b54316e5ad6ae9a268d53e4bcd9ab65f14a", "304b38db08d227311403fd66e8be0adc262f95a23ede479519e63e8203d27c90", "14ba717ffcba5df613d436b29ddd2a7e835c6263cd7989738f07c0f788fd3205"), ("1163572d8baebeb22a7042b7bce7014ff52fa2587ad8d61c21df476d8deef81d", "2856f6e7ee12fc477f8618ad7f1659bdcde8a8c47e6fa8e38685cfa2eedafc3f", "2b3ae8fbf33d6559506606a2b39cbc9030eb575c0e6823ee2cc3c06680df3218", "1cca3e01da53a46a2d94962615b9c960701ed88cfbabd32d243d4f05ad32b2f3"), ("2af40fc2e7bb3a2baaed4171aaa64d133b585276d0bb8302e667da66ea8db663", "0cdba4235f3d425538a987c3d8e76f2aa8c1152fa1061ec70dc3d3134a8cc4e9", "17dd160ffdf54cca7eb1886a8289075fa8d808008e80976e03f72ba85bc2bd55", "1d1daa391735866a25ab99f0f8a61d54eb289a46eb3d34f15f8febff62344969"), ("1958896c9d79bc797d3904bbfe96d8f9fc5da60288b90f778cb22acbb3f6a10c", "1c5ac2b1c44084c160707b2ee39ea78f86ea3da6fac36ece6b46e00ff4e86396", "17d0bff4ae24a800145030f9d22da7f83ddb3d351b0d662898ab4a76f99644d4", "02db9a9972368d485c8a1e200b9da179eecbcb5a21dd551b4f321c32604485af"), ("1ad8960c2940a53155eb87afb85ed8b2f5b075647bda4a87adae0682efee60cd", "1b622973c90c59e2dd212d42924a5cd003d7fe4361b61522d13c0db69cabebb8", "2e3d7da31ed495c2b44a436e24389fdf592775ad8906fa02044c0007840e8a14", "165094a8798c9e5fa2d50d0f13da83338534596440f9c6d4db66e224e4dac665"), ("1335ce2d276c4a409de08edc26081daca9b7e113e685e7d2fa92f268160b98ec", "2f158a8981c74f43af005012b6731c292a94048357f65c72c1de2639b4982a3c", "13fa30cd27449c2dea9b65fe2df595007281b90104fd3a4dfe4a0409e34937af", "0e700125c8fa498e7fca103edd28e5ce9602243acdc7b34933efe20e75f10604"), ("0d3d59aa5a1451fb77dd05545bbc22826405de1ce04cc8f33c3f4e8dc3723f95", "2293af9f61be35a38ae2540c2469eabd64694952dad24251386d7b41562f5978", "22dce8e2e466de70ba7e771ed2ac7775cf4ceeb3f7fbe891c0c08d20f336a37a", "25a48e7239015e86f4445fc73e593629d4d0e71a98d98a4f308154982039366d"), ("27e5b651f8ca773303866c43d402ff92524263eca977353e7e70849391ba4cb3", "22a74014c98993a4c31d44458942cb5dcf5e64551b27521f665be141ed2c5b58", "00e0b118fda14870ed8c90bf63bc4551d56e58b7fb75ced82ebe24de1d85e150", "0ff551cbc1eded071d94ad632f8d2246f5089d049df87cedbbeaa7e85a21b726"), ("1f7f3c1e2b6bb0bcb591726208a360d58a8e56c8de8f9eaf9f8cd20b04218115", "1d859cf7be67e23a69f9a666c2f508c9ebf52a5f5d1a8a4078866387db09f0c7", "050208a8e9766e4c14ae930f82dbf09e8b9abf05c422ef410c6ea004a021d2e4", "25114052626e1cae597b722d41b95a6a0a9ad02d76fbb9c531461c02ba54fe9d"), ("17ca03a316472ef1fa5e0ae5029373456a1962a8fde63c27c19120a4c9544537", "0a3a6e8e19f1b736bac2ef7cb9f6e07ff93d0cd83b5662653011899653190824", "08cb263cb512ebc9569b8b6e7ef24292d690a9c904a4d817a5f9b0addf298222", "05dc258996ff4a79d740d8ea59b721d77caf6ae64db087621010d20ea2f9b9c1"), ("1a4a96fc445f70c558e4013d6059a1967fccfdb14818b3f1db93778c211e1388", "06cac27719010769cfce8dc1233c56358fc5a20c4c3d17996b89721d7479683a", "15419df99485de554318688f67671a2eb5e573b3fc3021f2fa16bdd54961c948", "0c0a24af496a103acfdb85a3a09768ec3c75aa18a65bdaa3e94e5ea30c3d2639"), ("19288829d159e891a43c5f329b36f15b283f9316540ddddff2f672bc28c023e0", "29918fde815133831127d9161784647c4f15f1bb5e776d1dd1a7c2809c17ca39", "1740a40ff486624e67f081174d5e652fa00763a19c84510f1d9b8fa15536f0b6", "268d15e19e130b629aaaebcc63ad45d059ce7f0ea8958d3cb8931ab48d1ada4a"), ("0cacacf8eb426539e5f488c4d059677d873762834db4c9e9070f157a853b750b", "1f7b4f5bccb011b52374b734a164ec56fa223a296f9f528b91866ea45f77d130", "1c3ede5b19c22eac499976fbec5d68be0008d786a7437ad6c5ab93b0b59bb486", "1fd744368de2b9df55406b76a3c1d31308284bd5d5a145911277163e4272a842"), ("2d0834823413d5fd88594baedc883655a6c03ca9e4596a817305bf497412faf0", "17ac78ad051fa9338e95fc8530236c0eb8cf195f6f90b4bfb4de444d4dfd2e53", "0f8359baae11833927095341bd960e92da87c997db24e822b6d7ae51ce6993d3", "186294f0b0ae13f3c30526735429694edd71a6a967712c09324abd8d9b28e305"), ("27f22e0c2aa927657fc41462e7bfb076ea6d25d7d05f4aa18e32a5f671bb777a", "305f710053486b084648308d6c9225cfc59838c4e19dbe8108049107177e8198", "1efa09d66b43f0f5e77dc69ad7fe983b1821648175c4aeba0870b00f5b28c789", "19fedb90f438c1402fe00fd8df161f43d9b8fda3ee3d669bd722305282780680"), ("0c48b4bf5d59f68d93a8f3446ba6878155fa4bf51d02d3989ab09a3ba806397c", "118c7d067d898faa65634228e154473ddc021c3053ed8b160b5f83e9dc811cd9", "296058e4c42308e92cc829bab32e1362be28ffb86bdce5f308bbe201ae0045d2", "08e7637fdc2e79994703eb61d6540d5b0651b6f40dfe77ca9119767ae7734ed6"), ("24ba034db21cb0fd3c4d03a51b926028d23c90b7f831f6629fc1605d0203eeed", "10258e33212babcbf0760c9a694006eb1072820a376933ac03433c54c8a5574c", "185bcc5f65a64084e1d73e1ddfa7d564880322336ca103f2e4e02e12dc38d255", "047045d50ebd36c7d7cd825ae2f66e09636f283d2e82a5b7c9a3b0d253b5c077"), ("23958d979a792083f66ae7c1f822952d6d775cf4e60b75a519c89292a8d1c1ed", "2dc5feabc9ed910a7c3e1f69a91a5edb528f8ec22d20f4a5db6178a6e73303f9", "251c9d342cd9d7febd9dc2588211aa88406fe145d1618622f4ee262016e5d9a2", "0a89600daba1c2d17a116e8dd17304a47bbfc6f5667cedbb5e5788bc21c5cf3f"), ("24db7fc89595d0397783bce46ad2306450b75806aa91ee5bc478776cb50bec52", "02a66503409ba022ed25571c5153b85bb10ef8ec352110a9ccef868822fc1d20", "0d58dc87dc6d9e7c73c8640cc75755566f01305cef29b6b38a3829a00879fbc1", "2c09174ba1c341861acab1a583973e8c38bde72d4b729ae18f8d18cc8831ad70"), ("0c95640b49ddefb124b4d058d8bacc60350f3b390fb494d9308ce715767df815", "0a7c948b2a1ae279a20403fb5634265a03afbeebc2a1a9e33c244cdfccf223ac", "241e9f1a00121ef426ba482fae7850cd24085140c6ebf76bede9c0b21817e463", "1df9044b234e9d80eb35af6f631a6b051c60cb62000bf190731e48c8e4584fd9"), ("0b042b20a18e986ff1802d4807157c0792e0cd41e148cbd1a0d1071e123475ad", "106c574c582d29224f486f9251d8c4638ced0b3c9054aba349fa79a10d27a3e6", "1f1c18a815bd8a50e8e104023c8875876589a66c2f8675074b777ed328461734", "0a8f00c98205150762bfd8c6f2874d9e90a56afecaa3d588176a11487ff8487a"), ("20bb66010cc80252a45fb38437f70cb0cc25bdd6d5ed5e5acda8ae835124b51f", "0b6c8a6217061c052217d0a9c5c28abd24dd745006a4b38a8fe3719a2e6172f1", "22916501e4f2082544a12098af0e83e6d1fed9abd143f9656af059552876e7a7", "0c16b3d03700d4f8a31c35ed50131d1a6911d03119f129e8e0eea123d8a8e995"), ("0b4da3434bff55ffdb563dc1ec8996e104d7a4f7e75f055d29cd17a9f69789a9", "0b8df30a09e7a7149e818e314832e04627e03f770e93b0142d69dc855f801af3", "09d2f8b0d2d207bf4d49e1b1506c48570ce16a58b96f4b0d1827a266ea20de7f", "24b8b47a16f8674004a7d80810ac9cf42a54b0518efa3cebcc7aac3aef7d7280"), ("194c35921800a795cbb609af808e368a2c1deae1188c1d43fe2e1719946489d5", "23fc91392e18fc8882e7cbcca8535385bee0c82e1f66b476c02f71472722b44c", "235da7fff18456be550d4a4427f70a06e25e780c56ee34848ca1e8f3a08f54f7", "18f837c2dfb6de8bfc488fc4417874bedc999ccf75982e5524be4a686717e172"), ("0d09f5efd8d87436f6f0ac8694a7bab14e7e123bf88b1c36b88f0335098741ce", "2674fb566e0f79bd487ac414a4fb817b209787d5714bfcd9b52907f7add9d8d7", "2cc8e55744fd31037d20a05b879f59a301821a493098f14d8c729775cdb92832", "2dbddc44f37a4d397708632ad4eec139ee3a51da999474a4c8617b0eb11e20dd"), ("2e3f4f1716da07619ffec752be9355ab6488073c524100609e82815a8f9b246e", "0e18c14b2b0571943cfeb84d26bc3d827e977919cb07c8b2f3981e5b22129590", "17dc0786a2a21993dadcaa726bb035b3be6459976970efc82fd95fa068cda844", "1378295c74122a1f9fa3daafc4ac1b72938b7dd915ac6272694c697470b0e961"), ("1f38375ea0b97d34e451ed3b37910d09f1df659a042928135996de1b091bd95d", "27d9d63fde371bbd8d9830d07039e7b229eccd782c652f93c1cba40853ed1544", "05709a7f87913d61c22dc01683bc2d197d80065d9ff8c6b48ff411b707c207d4", "0ba1bc48ff21ac98e9fe2309f046936c23848bb4dc6e3615c7553ff775a3649b"), ("0f270fa1855ae1bad343aacae2c7f9fe1f8c88fb3591305fb8d2dd639a7f4d51", "30174c441764be07f9e170ac755927478f82099676f275251cbb08d5dd3651f8", "082b549082ed3448abe5e7d41068f92feacd03f3743b46539934c71ff66e39bf", "06e2e3eac58e5e0b95bbfdbcb5bd4cf96bce9ed9aa5cf376303c68eba569378c"), ("1bafafbe02f30e9ddc355a7e0629fef079e006d0dd8a7b2d7c33e8740e86da07", "29fd276f5e031599be87e2e1e098101a8c22c0336bd1b0c17ff32ce6221317cd", "01e69e63891803da65688df565059c2b24a02b59208fa490137ad24192e832ea", "2ae46d5839e9cf046e35cd1fb32db8f6744bf93887d5b05f983187735628701b"), ("26d76b11dcf0891336645e932cc97d93e5e9ee590b1e0350df813fed629c95f0", "174d9de52dda900da5cf319fc6bb61f00300a27a730f7ae3581569572bebcd09", "2fbdca403baef3d0508bf515fa874bfb97e79cbfc4c2ad2167c09aa958645fc8", "21c4a8f20968f64d08eddaad58993bbefa8f74f77d16ab7b8be1a45e268fa3ce"), ("030e3321e974dde93a8a8bac6aa0197c8b4b92b2e1c7f6b31bb97657577330b2", "2c3ce856b24ba8718bfb570940ea1b680d64840eaf5c076f6265bdd0e954b0ae", "1aaa0367e265b21db0e4c999c0f6af0c61b679aae80a4852266f30cd7245d6d8", "263b67e7e8df1b3de8c56bbf449cdfb0bf8150dc9b5080f1fe09a346342ac82a"), ("27addab18e4583222d84845d8fb759292f08de4839441f7c9f9b9c1b08749f6b", "2523d8fe113b0fc2ccd29f976fc4a5e72e0ce1c914a6a2b8a85d869332f15b4a", "0baa60070281894f0595d2dfcd2aaf8fb900b5efd9f0508b8b745763c7460d21", "14a497765b8b4540671ff2e70ec0c397286a68e145f9af821e7d2478273825d4"), ("25afdf79df9ebf25b0e6e334d0414a2f2be4edda2ec6bd36c7b0acbbb46cb946", "1d575507bf74c684bf775c254e0528aefea50e0ad7cd587b1ef98c865511a6a4", "27fa594f81816a120c0cdc334fdce7a1883679578b201e537a790f081ca23ff1", "0b95a49f4293a57caeaf5050d712a0441eea6354dca1c833ca5ee4dd206bb056"), ("21a7c70b79b78bc845b43de55d006b95f2530aebbfdf96c81d8fe46f9d6a316d", "16015c5af2877aacd551997776b61a44d7edcf74b1b9d147377d78ae4e38b37f", "240efd244081b38c7e0447a7719897dadebb840378b0f26936704374204385c9", "121602862666d19f228caf605195fe4e8720b94e0af71a5fbe89d221890a605c"), ("2140e5cc20c55da698a0935c588cc9d5f648544fb07768a7d6bf44bfc2cdb114", "218793246423754409398415563e55d5deb589318e6b251b1004d8c3f0c997e3", "23476a4e5ab7369998eca0c023eccd1832c05cee08a0259294bad63a112edf18", "271ed8cc61f6a563344eaf0b815e471e850fd66add3b02a57c8521647d842114"), ("1e81ff26537f9d5a8ecf5c0b63bd9a7fa8b531725456cc123ff2f198b86bb7fe", "234180a816571fda01ad1be5167cbba8988f2dc147763edfec13df7eda964a0f", "05b2b9e94733aed3e2423faf2baa35ff105bdb0f0971a616c785e5ac12c327b9", "002fdfa841c643409322a9cb66a326766d2be14acc598529039707badc15c768"), ("2aee7aa265a209e13f2dd914a58e19e46eaf8c2f8d8e55ade041d26de91eca32", "20fdd0b46b8c4fac61ea43f437ca91e7a49004f2cd82be5d498d79bda94185db", "07469e617943dd240f78552f4ec316a902e07325c3c110208828bc7914cb5129", "15e81e15b9dfabf9c620dabc780f6bf1c9af803800a7bb722190d72c16ac22ab"), ("13c972a7ead79261b3c701c4137ea8ff0d4f13491ff640c4105ceb083dcbb641", "262b00b5792e59e0b14ea9973fead5d51ca6d178cc9636884585d23ceecfbabf", "05d271e7fdce78820db6dc0194c7b1895d13593d64475b09508a16243e4f3b2d", "07e498ea269a0a938e45153d00f148db1fa409a1fcf625d13d01821d87f77070"), ("0292b50c540d3bfcb9cf6c38613381bfaa0b35126471ba2d7bf2b4305f766187", "15b87e1c62789b6ac0449fc6bd15c3634c225ea098fb0e08a66b213571783a61", "14d902c3420417282d73d4013014b8cb047dfa0cfbfcc9932c1d5ea9a8279c5c", "087e7cee58fc101ce715ad9ce6c252080fa265be071d8ab2f93d4fa9a97b0acb"), ("00091cf38ce9e44feb126c30791d24b60f71a0fecbd08537f8ddb7516101b853", "16dd4494962c4dd69cf43020905de1eaae3ca852cacefaf78a87a401f0dd900e", "0f87396abf82668bf082389b75aa33ee24126ddd103027cfb8e5dadb860ed538", "22e5973c38689ac298f4c021ae93d7638874a48ef53d3913cef02f216a50ec7d"), ("033f546f1df898390df81781be1a0528e61dcbcc056ac27d5b992abb4c966043", "165ac527e95fd2dd1fe7428697290303190f960eab3ad0045da253a24f6e4093", "173e0d79f49c2b0140032d473309dcba98658ab2bb26508eaedcbdfdca62a4da", "0402c1d2b4a454362c46c13b76c91c0c2cd0ed04521ee18fb667ea1a09d9f0ca"), ("28c4b5f8fd67449c71a6dfec2629a07a25e6aee65dfa9f8447cfddca306ce9e2", "26ddbcec85fa1d55628c3f6dd3ab7bb23f78e6d2a4213ce75dcdc12724c91141", "08b6ad434be599c06dda688adc63e306f704cbd407e567946df53de24504d03e", "216fa3d80ad7832749c290777e905058d68a1a5020192d74b7d44495eeed7d9d"), ("19e88bcb66a66be1e4ead39970776252e65209e391ebb793fbd6bf263626fddd", "14cd848f336fdeb30ca602b0665bcc396523816d674c234f5df149572f782330", "04e20f35ba229a32c9ae0dcb31a48470a7ccac074393208dd3c7fbe2cced66c5", "2b3b36519011aa5ed4f50e67d986f85846dd53b0964a8dc8c02e6c2719a46a8b"), ("0fc6b2d8dc49d2ecf1d144d77f0367da9079e7d0537c4aef64365e4489ad1e74", "1324e4a2429e0e3035ce0f8fd197d50e4f2fe0ae1e5fe0c888216727f0e754ee", "2b88320a14f8303d3110985f2a577942d03fa18b3c2573ece14850a628e07e0f", "2e7c8ad0aa5fa6b171b8af908a74c8353674dc6d48b5439f3153234d03d5ce73"), ("2943ddaf0b624aecc6598ee79894883610f61ce7708013604683ae3473040d53", "0909df968d01af08d3f5517a8ea40927ce54266700884e243408000f117fd9c6", "256f35d7c7a0e53d2f4b9231679a934e45447bab05cec297b057e1888614522b", "07c3e0b0ec60c03f98288f5e609fa727d6a79f6dcdd0e8fa67aba3654bae6bb6"), ("0dca508fd7743e501c3dd7289a12cbd3894782e46f61c55bc438d13d3bd75be2", "0f82e5be5ed14391818febaaf258d93046f5b37ff24728c49d18d672929a2a73", "12f90f5cbe8a6a08b4de03e836161a2751ad531d2c97a2f026a0228b69015dc3", "19fe1b871b2cc9c04e72eeb046a58a23df8b63499ed6ff5cac41e47bd3438acb"), ("2d3a865a409a11dbcc9d3702c16e5fdfa42d93bef1fd5d08cdedcac8825910da", "0eddc86548fda0fcef9738a0da4a9606fcec34c528c46d0eec87609f171d67c5", "1d174ea34dd6637e34ad8040ae27d3fc6b2b64c12e047dffdd4b8eea61e2bf62", "0c3266117b0c86bea9d47df2d3c4ccd2339189a4ea2254de6d4e30aadd816d9b"), ("09f75af4e56515e44b0fe9cd3fae52d91ce463d28d57dfa4db41e473812aad6f", "23e45e98d89e9ed1c4960af0013817ff1924a7caaa14ef74f8dbdd6a35e5b7d4", "2a09e545cd3fcc102b693ce5610ee55e7c33bcfb87401e0f1d0b21f61faf38fe", "2cff6c2cce25da8f7b37656e6d8c335a314f365be85a9e7e0f23d4bbe018a585"), ("247392be975909fc797611877d40615b653ec3b0bf77177098f61e713597a9d8", "06c4c89406c710e9fe4c67125c1a01eded87b3e74f5f93b5181857072a337365", "0d5e1ccf043d713f561657ffde1f391c8144b58d774fc3763283ea3b0096ae8b", "1116a525cccfa8ac5f222787d2da600c0214a70b838082948c81caebba55e958"), ("028643a502c3de1c3aed7df2a4d9233bf42817744dc4d319d33940dc58108807", "224577dbbc8dc9d9b4fec0d90e0c25d975cd2ddb3e292c1231b74bbd0e76512f", "163413eabf4ac265d3e1c3ecd564e4e6809ff094ec7b9d15f4c209e1ac933f2c", "1bac0a07ad73ba3a2483831c7606ba845ed65783e0f1b97ed63109e0f371dd8e"), ("1bc9ca3cf2ba26a365cab1232d9bb9d25077f61767713c20718ab4b24de70bf5", "03fd3a8f61b0a63f676f54efc2fc1455b1d51c1f3e6fc026e92b39876b85ebf1", "1718adc88b479c3a85ba115cc695e4552ffc12615afe516b6ceb6437583498e4", "2df948b9f52ecaba1997863549cabbf62f9e403b1308717ae9da41bab1bd1fff"), ("270f73070ab5a83df8818da099703198b4bc7e84f98f5be382e3e48a5c2a5665", "08883eee3fabe18b751f19f525e7da71d7a853b9caea81919eb7e0cf561ac75c", "1ab92c5464eb33ce0a4a05fd7a11af4cfe7af25d865f60b2580d431c463d0be5", "12d193cfa331a896ca7701b95202b20138a5ff03628a51952102dd1899b6f122"), ("1958d2a156e453de7323543ed6ae6aac82a19ee52207522151eb4c0c1cb38aa4", "25dc9299d696a54c0ef78ea1425677b6161519b461fd03c9b6458562b0a830e7", "1e606f08bc7c8308319bd30e876a8a2b8d71fe0fb73eeb55c78181721b8ff692", "0967235e3f1f4490de95238facd6cda1c39f33608283da53e5ad9528ae0f4f8c"), ("2af16e261e8f18554dd9737906bb533ef8385f5483579da8e6eaf8b4eec9b896", "1e7c82cd6d47c5ba9bb34e2ffb74a9eea461c154703a8ceb8b0cfe0e6accc7cb", "22e8795acedb9e6c25293558b9d16e615dca4113c121c19c79b1b77b3078e975", "2cc9e864be1c4a3f9c28660558f08266317969bd32f2d8503546e00009307e0b"), ("099df356b43248c57f7916e819d0bd9cfe35e144db3ee2c49287e126888ea12a", "22f409dad3075cc09fc234487a7ecf4da267599056b6f6581dcd45f6d651a00a", "0f942601f1085017c9089d30741a9047ed9768c7a8261aa366bdda6147320572", "2893a6abb850003b4e5ee6e95124108684d3fbc744d407ab4479ca9fceb92f21"), ("248af7aef26b1d4cf0efe25d202ce6a1ed03123e30371fdc48a969af69edaf53", "08fdaf764abbf19034b7c439643eac228d06d595695b9de72669c39786f3f59f", "0e2ea56c45d349c612d10590d5c21333e84c43976a54b0a7cffc5e184fa01eea", "1734f15017bf3b20df9de76d5392b98f8388f60f129f2aa0d129da12fd455da8"), ("2c7991aa687ce1162e0566b22591d26f0c4e39cb45968671d1fc258ce67478eb", "26bcf63198f03280be8e89d10e0a460d772e2c8c98a96b4e893c70ec0ed010d8", "12b7f14f99144328dedb85fa5bb7deef56788146a88f8cfb34fbd5b09d6b1379", "16ec3d19910bd4fd3c033ede34a010780d8cf11c6884871eba14d85ae804b5c7"), ("115ac9c0edd529af37179e4006c685f92f85c622acd838cd8a5031531c4ff125", "0211fafe6c77cd4278e7d5344d392571d6d1178108e0480ac3015660aa8f75b3", "169fd7a9711b1ff39ca9d0f8097243e97743336bc1ee5a4db43b053c34332fe9", "0f28e9af52e9e2faf2d497b7fab3e02880abac5608756a570d75f8df91dcf8a4"), ("12859ef2059b9b38940250777c125a0d12770c8a0a4d4611406f9e7780746b18", "0879d12990275b41aaca9339258a3ff25cb5f57e67d3a6dc6b05767be7531090", "1e82f8f04fa0f3825498c3cf45343426eb995e241356b0c889f8159616a14aa0", "0ab24945baaa9041919f1e02773f508ceda00e917e4f672e6e6ccde17345f5c2"), ("300b2465b098e132a92c3b12cca1a3642625a8dc56679ac213e250a4eb1c2baf", "032ed42bc6ddcf0cee296f737984e530d12abc35313d67307f7678beb177c3ac", "2b4bcabfa49fe5810bea3fde12469fa8d55214711a2ad9f30e5c8d9d63025411", "1a951cc46a557b4cba4b6621d0ba7d593d64fcf5eb2afb9eb748d16f39176914"), ("2bc2a5d6c7b8ee65e3f5a95faaf3ed0dc098113eeda59ae82fe8b7ee475b5fa3", "04d446c1e30d3678f71eef1fc7dff41133bdf7b379724d9779f24e9955c49a33", "28e001a3bce675ba397b76ba3d491597c57e15706bf29cd512fc2987580359ee", "0215b58f75bcf0e797edcb81dd24960e84613f4453c76eb7a0d6a89c44a56906"), ("1a1c638a868dd31c23c5ee83d22d1466a3440c23fe5fc79f96df0178b5912978", "107e6cba8baeea667390f0902a49fc27a6fd24e1be5d4d6169862165fa1011c7", "27f1effe60bb16bc56ac5381a7a55e066b691c7a0cbf5aa56f560a48e8d76423", "1cfe32f7fceca2a0a0d3c791025416f7cc39ff59cce4b7a1a688b9b9c761898a"), ("1284d5b190f14817e6f035ce02719342c137da1cf4568301d2feca7173bed076", "00f3b97a1aee4d7be03bc12dc28c0ab89d8f92fdf1b11222450c778c18164959", "102c0b96d9d40f02ef71c781f157fb4cdc34e6e1bdbdd71dab7bfb299973b621", "2c828f92cf5880ca1cc4dab87828d6c3122dd4bda3ef1ff26afb00ad67e4a69c"), ("0a3d67de90d3e740f3081798a105e8cf95189a709ddddd00cd7cb19483be127c", "277c3c1c38d2ab06292fcc55d14379fbaef6a789ea2dd96a990fe18c2c3c03e1", "2f78c975d4e36f6e569bca63e7df6f175c98757fd3785a501f42644193bff99e", "2daf25b902591028e03a037f2cf969669130c4c0b57e4be73f98cc9dac27861d"), ("0b72b2f59cf4ccef1fca188271e0ba27b5ca384fb6c7005e6881dfa39b9cac16", "21613d8427573a8e159c72c9e8e8903ca274657d1c950cc5b2e594402571e9a2", "2fc4ac0f7b0f8a67142d82ab58f3600fe7a72886f494bf48bbeccce432c84d65", "07bec1882c364cbcf42f09822d3add450ef151eaf3f65d85be7646cafd410b5e"), ("1624f198bb8b10399d56b70d5723753ef969fcb45b6866586f527bae7c161f16", "0e642ea27059ace573bc3ea88a7d0d957b9e9e7db3cae2b1d1ceb6fb4e791185", "11cfef39aafa7d18bbd6e2644d530b2cf6c5ba94c449087adafd1be3ff7dd96c", "29256aac00ecd822fa1f07d67bab03580edb686d26ee12ddc2686c9e181f201a"), ("24c26cb5467517af26c5963cc3425e696fa1611b52d8769ca929de6a8d1994c2", "13af88bc434f300c9729b58a6bbd00852774e906eb98c45b14afe79eb5562868", "11d6d6fe669d28cf627702c6963ca09e5ae8ad0568669a70caa819494bcc8bf6", "27a63f5bab506867f50f23513f8674ef659bd8a9ce52199ad986e8f62dedfcbf"), ("29a178487c166212b0702c8eec160736a9d9429a45ad590c50a719748e84f6fe", "0fbba3bba442936ffad617d8b7cfbf871503095d342bea6a85d16ae535e4d566", "040750d33a8f8b8f07386f78accbdc146e44dec18055da8eaf2a569301e82f5f", "152dc94014c9050c751e4624f6e68656fa0060e201bd85961c01ab1e43632ac2"), ("18be7222ec6a173dde2c4235bab608de2b70c3703ee5512263da13c9cb88502b", "2d9ac06872ad281372537a0203c589519a3775f9cd403219ba3638c8c75eb426", "03adfb0303a2a85fc88e67aff91301518c65ae57e51b8383eb88fcda6663499e", "0df4f04e824425ba5b40c5652dfa0a10e68952bd3b272eeb09d8c3f80d7cca44"), ("1b8799c0de3485a68b6e2d44dad910201b7f720f83d5401601435e63a36b75ee", "0092fa16e83ab546a676512d13a003d1c6d49a671a73fd0454215ff9231010e5", "068b8b49a96f0dd8d6999fea14eebe6e2d4b1b9b2adb599993551c3cac99dcc7", "022dc231bd331a5118e8958b6695caa78fd5a3d07cb441d6fde4332db961d6da"), ("2ca8f187f9c8c2be7e13ca092628b1ee23e39cb29fb1b53504737be10390a735", "151af564426ead2215aa0f13ae2fc320a96bab9b34a2f45818e5f36c1258648c", "09fe855800d747f236b837bb4aac5d7e941dca155363f217b4cbd8b95322ef9d", "042c8287cc46f524e262cb83b195511ff2f72c4a1a0983f870d993b2601788c2"), ("15fb2cd11857901672cbe7cbbc7d3549c542daf89c33390c821113bbf7ee4d97", "153b0fdfbdb9012f0d47959304a7362a0565f048c6bcb78c506e40237481d2d9", "112e30df05b3b9ef0dcb45cb58fddba5f2f39d650287344177a4e2897e54981a", "1caf331e307d68b43e005b2c3db57164e113f7bb7a600d3d5a2c8da0d7755391"), ("0e67df5ae030850711f24bf7ca697ff0137cffdca4107e4702b46757b3d7a179", "154e8b59431d22bdc9ee6597860d2b90bce4a282e1bdb6bd1dabbddf8bf36495", "0941129169d5f5160264c801faa09731b57c9b01ec8db19374fe73720d37cc37", "2909a72705f923e8172aa163c478f393db4fdf12aaff8f45d837a88d69ed94a3"), ("23ee46afea0a23042c0a55769793ed6d060d81f0cb99718bebf46e967fa155fc", "0aef48db6c3b0156a2265169b4f76e663c19d70be73df28df87feac36ffde892", "1ae4272011a6676109e0db2541e99d7744dfd54c7246b24442b0c101dc80bc94", "1b0c78617a04b588992468c50dd54c2014a8d08f23f7bc0f41a9230285a8d212"), ("1d0816c226a4241cc9ee1091169684e4b4d92e976d17bcba56f1453d74205517", "16fe66ebff7dc178635cf2a1b55445f4c52b0d612ce2afdd4e58fee00c28a86f", "23fe0353c14be27abe0b07d004244d0849b47f6a1b705bb24abbd62b6c8d96ce", "26a898c6a01bf5c9550ce28c51098572cb774c6669206c14bf249bee2fcfbf8a"), ("2c5232fc5504b030288b493a5252669bde1d25c8807ac9275726e59c141e3b2e", "2feb0a2595923c61d07fff521d306ef431e519e02412f0d44a806b1649c0ccd0", "101b4b4f6f0f45693579bd8b98c886eef5da2fb326582c78a6ca32f4d4745c00", "192cc2d595419318241fc4dc4666c15af45ea6440c816c6aad1897fd5df6b846"), ("29e0b5574c287cf7d8641d827e9d8159092097d63c3793bd2f6d214ba1256e91", "2993240b077e697cd9b7e5ae9e04e07dc67cc33d0e133e1f86010807923349d5", "1268502689122db2eafd533c92882afd217559b412deaff49b7758bf1680f8d4", "2096dbec3ab6a2fe67d9cc199b42e2b529513397bd9e37a5b087cfcbb7e8e494"), ("041226462c568fd3cd26a14d7f1565680e2df7dcbb0873edb982300859f23c50", "092358fd4b1d949f354b69325ec553dbb682095cfd7324b0eb91d5a5c7f4ae6a", "23d2d0c95e5069a983caad91ebf6ad7170106e21e4ff5c8b761063e31c91ad89", "208d6c3c71ef3d8f0717db60b7feb5c8f7a94abb51b53685ffadc23d8739cc2c"), ("1d90c13dcf23a161b727ed6da8e9c82689463c6e7ad576e75d83a34bb888f5ef", "214aac4ea98588ed0ea86b1e3f2bb8d1cd413dc8594519534a5a9d8dc10e5d28", "22d8089ce31b027f728948edcfb01d92a216d77c088f8c230eeb0f95a420f068", "08ea56fed7c706f084b358e5b696d6e51927177723f75108e8e5495f17bedf3a"), ("29d9e994483ed7422630fc1140b4a729a40b457e8184f6a441eec519bcef533c", "25d3d33f7435e202c076201fc4b4ae78d2aff053c7de5a8c4802cdd699b8eb6d", "2922bacfd5eccffbc2b900e8e446535d8b2acbd83cbb417cb3d3767724ed7ca9", "22ed77097fd400df8689da887ae2e9e2dc4a23c2433bda6b2959a2c11e7e4fe1"), ("29d7894d2cacbe492ed4907023dd55b4bc2cf69088128510c958f857c3a2b76c", "222f4c5e4ab140136297e730c4cd79efecd4cb924f1c60394f36fe335e064370", "2b9bed33d1e974185e8237120476ac15ad9a32396a7e629b5803db89bc4a73b2", "1f6432b81c1bd8c62f14305801edf57a274a7313e56f6d385d5532e92e277794"), ("1726816bd2bea8e154b9811fd6abdb80cdada5fdce060de04a1d169149d711d3", "1abc31bf4976432716ec4f3523d74f1fc89f456274fa3fe97bc9fbdf2fe53f37", "2e4fd3b2d70f57b124385c86e5435a8f8376f1b18547f85095f50367df15028e", "1fa46e148c2e0cb7f7a35b8c5a77e56c92f08fc3e7a4083913c8a4d388d6e9b6"), ("1374c6790a4e88e4d980f0b27ec0db5b849e56c2cd51ad413b5a4caa526131a7", "1200605369700a4981151500bd863afe3fd1327e5115aef4e574fdca7784f1e7", "14d54edad452add85d3e62b20505782b208fb0a3ef7c8d55c8a39d79438215fa", "161806e904d46d30294588e5333a9615bda11493b4f41252188abd163b1a238f"), ("25314d4f6360c318670d9a5cb2d844b826251f7029655e33e37f1ac893bd8f41", "176bb996752bf80ef68951b64c7f57d12b9e0a4bb920643184fa539ccf8aad90", "217568c8b583e5d2e97b2c5080f17d19158933ca0b3e83f8d14a01f95d7f56df", "0c2aca7d0c4a27f87463a96ee75d8ba567ee38f33479ddc28ea5e8f560d8e4b2"), ("069eab8b17c20ab9282577117d55fb3f440c216ee6e67437317731becee71cf4", "000e4aa8d611ced0c5aa8988f16e3976de65a7949f812c90cb9b81b111efca4e", "131f9a7eed12b50044e55102f196cdbf150c4baf0017f5a13794455262fe7912", "079b28e5bd0c96e2e2ed115de007d625a4543240c11b72f3c906fda8602abe8c"), ("299eb0d86a5a72884b17e650027ec19900304599d81a54ca16dd7ac6732e6224", "2633d9e3f9d36965d6207e6e339236e90c54ec2b5a384918bab7156970cf55bc", "204ae55154f3f623d72954bd3de82104f729db379d4d78279fbbde2c7b8c352a", "077ec247d7e9db415a284c24a390417a125d1db616398ba3716a981598c1ba49"), ("1c74acf0fbb86aff776263e9e3400328305a53cd4cb52b67cd84dd1cd0f45caa", "0ea8ef70628f138b80fbfc9f8994bf4ff556cda33d0674ce0edde96ae0718330", "01b7e1276d337dfb9be7cfc7fc7ba0223541683646d8f15c5733422b79674d19", "2121d1a5052b1470d8b634eb7f18abf73464d5ad6c71165187027feb8c9d30f2"), ("04dc114b3226f1576aa14e1d6c510035722e0100ba8102502b4f61d87b451f77", "18b10daad8b0eeb8d15ce8f8df8bd381047b31c7ab1396fc8cd1141972a78454", "2adbe49e191f3ddfccf2cfca62b1a225a9a7a9e6bf07a566a41e6f3a0fb22962", "21d33b49e5ded403e22b1a8b6fc59103c5950bf9d85936d758b3c45fc09d6427"), ("0ef2441ec8f7a89fca21ad68346876a98ab40a52a826d4cce2e4db6753b3414b", "2590492b1470eaeb6937e52c4015dcb43ff84f27664238878ee5394250084600", "0f0a27a3e4f12acde50c86c73caf607023ebaaa5fddd0482e0aa4bfea35b61dc", "180914ff812394494500a0fab4a4f973fbe06fb3e9f581ca10cc8f5ce4939054"), ("2515068a657c28c2e468322790fdb6597f6ebdc39a3ff9d6adb0530feaa60aa6", "24b47dff7efde24a6fee78d36dd31eaa9b1319a9e14255adfe9b974f24067579", "1dc5523f663ef3d00808d4bc75dd848edee043ae31005ce45732a40007abc53c", "101d564ba8fb920b474905312fa97cb1bc876d624ceefc2dbf90a79f02a1ee9a"), ("1bc48b43514bdca7e908130d6cf78d53f69c4bfabff7862a50565a71cfa136ca", "29ad13282536b4fac9a6b70bef0a19202afed3fa1074a236d15101bf5bde1137", "23c8f1d1c92d8cb13f95ef5fcefc208d0fe5d245530fed7c2433125f25b4af89", "248b0c7e5dfa3a78b198c33f697ab3fc5bbb19076658ca99bbb1179d7ac963c0"), ("12f937d6f732ce3bd69c7a2cdc0dfdc4b524075c2b004d38f4c080d044d1dede", "17eae06a206baf0cbcae7543028354c39dddb35765a901b7424a1d5172839d48", "16f10674ebc36293540986408da1a6d65b66b4b3af056f962cee7dff419cbb5a", "24a73d69e86a39bf304dcebe552b4eee360f5a0eb97b28cc17c5c93f1dfd5bf9"), ("2208a37a64d8e0bf937431657b66737490d24e56c0ced973849ea6e064b08aac", "208bcdd14d221607b98528b80901b71c8724893f9fa83ed7efe2be25a9689ee7", "0962b01fe5dffd8eb3bbb3deb9a74a46ce0c1898a939c2e39ebf45433907936d", "137acc4e1fdecee0cce5918e85a0bce7b4513b667c115a07e72c893c708f1305"), ("296fd80a2114e22122df0b8e7a26730da2786c89320f0b814fec28bc10d6de1e", "0fc15abc4dadc32a161a177bd6d4d9c59e54203a5b112922447354c0df236b40", "0ac263512b74ea684adc3c5572aaa8a5b85fa8df78a72b806ec14125a275a169", "19db79e99c0b71f535153af673a913e217e094dbb760043172d04e0f42d69c57"), ("20f7807c4699c0bcacf6319a6661d3387ca242b07be1a25387c30dfa1bd868eb", "2dffa0f4830c7b5b1a4c487c7472bbeb922784ae7916098b5b882acdc9749647", "156d0707815e8487e660949cffcf1a8d3004c1092482fd8834356da9a59f64e2", "1e1bc3185e849e17fa66cc4cc941954f1b9bfae05cd560d04c48b370bc87d3be"), ("1f5cc7c249cc745ab1cfef3f4cd6bd674a69ab9554dd225cf9999ab11f16f78e", "2525acf351079a5c432ca4805d9acb4f414ca3e1d77bb4e97acc3594ba442fe6", "26657fdfddc4366902641e863c14ed58e29880d2a7b70063bb1acfaef02263fb", "21292488ced6e8d15ae00ae255eb5a5cd23e54680f8a5294bb9018fb88c3a599"), ("1b17bda6361bbbb05c7983014ada56649c0f764c096afe98eb84ae46b0293ee2", "17e78befa9ad472097bbc16775b5afe6aa064f73e9a643bfd020dea10a3214df", "154e972ffc1c8965dac1417dfae286b9eee8088dcd54a1d93e4248e9c91524ed", "0e4a85d4ff3f82013ccbe723bfe6e030a926bdf6bb7ad00bc3db0e770a7a1f35"), ("0540c3d8d3120803414d01b71a447564f7c070da443dd44f69393fe646b6564d", "094b4651338353b50ccca8ff497e9b285bb1176dc4ed4c3deb820f78360552c6", "2b4f7a46d5c566362ee6aa2e75d28f5c5f662486e59ef5456664ec8773fab4ac", "2691f7cd13e9e7403643a886a03d187b17c246084d68c3938a3d5b8b3553eed0"), ("2e997ec57f6c0fbbcf0877f9ba8ac1c6ba6ddcbe86f937ca734791912fbdd8ce", "21b65f8ef1534ae14e7a275f4d6db3def07e52243e2e20dcdebcbd68904810ad", "292a571d7f874a76853dadec156a1ff4ccc9bc594bfb7204b8ba38747b72982b", "1747d7bfc90520cc9d4c916a89de2f49c60d9f393e56b123d14dfb3422ac56ad"), ("06cc3d24d8c2d39ad6782309a8fe9602269d5a1432f914c6f6d5705c441d3dba", "1feadb964cad0ccf3548eebbb314d6a97f619af58c048de5d449d563b7013d0e", "285278b553683e1acc78d6c7f3306c39b457fe6fa9529b8cd3439547932b6aaf", "122e1f1c73b14f6ef3f2fafd0a1cacd496df78b5b2787de32397bc10b3ffb660"), ("1cee51651c034ba87e3ebbbbc56daa06fb1f32061de771d1cb9cd59c3cdfce1f", "10be2b94900c496e40794b44bc66027b7494fa9fc967b333f5bc4585be9a2fb9", "0da4b91425f15c6d1f431074ad9ea2c061821fd2815c4ba43b9aca788cfd7a7c", "2c99186ac773862beb4e7d9793b342698ea081b0caf63b48650e1418ef139aff"), ("0044419b1aab40e98f3817d5b5b72b9af2b65eb03f7b32f948b6aff2c0503495", "2dcc2ba4e99a285ac10623797c6a6d1160dd4cc28b2877fd1cfb78391b13de68", "2b82d887e3fcc886032ec7767cc3f1247a95ec5f99e678f5de70815ac7a7b1a3", "2c8852596af442e2bbd4643813e6be96838ec396fdd437142d793961cb7e7cf4"), ("16b1279327f13794679107b571dfa54656b1ed7cca544fcf198bfd42ffee092e", "26c095562e70911f23579feab7e6c59bdc84d1e07c7e2e1c73e8ca0205e771be", "0a154d881d57b77f30b826877e6606080bd255326451b8d1f4c07a1424c6aa75", "263a7648a1dc750f1cca8e05935e2972b62d279f840df889886f4c8a59598e13"), ("26b8d8a741b33aa2e02b1958f3763dcac4a12436176b88bc382c34dc47cf3406", "2b1ae7a31401992d1deafdc196ef9dfc62b629c61514403ae140ee4d84967b2a", "2730d55287d0e7d9982a54277c991a5556ce6662eaafb1a38c8181cd50e5f58c", "1d7b7891cbb5e11d1d50d4046f98c93ac6f04189df58cf06984244b014218b05"), ("2c35060b8d868ed80d76b6517a080294d9800e1878efd78cf099d10ea2e4e4b7", "293f28d0960a7600f29c409d56cea2994f484386c529214555d3d1d96eeef719", "2cafa2cb44e34a9e22f31ca2fe1765e7f12641b30c03431ae43978552cab1587", "1d942238eea501a847b09c3f39448cf09504d07993916f5696c7f638dde359b6"), ("283057d0dbe5977e034aed032811b59cc86cb848eef19886fd6ef179620b5d29", "12ed3be0ea332900953b136ac9259cda2f2ed8608be16e02f6658cac5a32ab79", "305f3559b96f4ab908395f40d00b87447add6d45084dd31a93a0a7381acf9e65", "23a8a681c78164dcb7d2e96e43c974aec038dd0efcab247af35517f5047d5750"), ("08aa1dd50f1dcb3ba9c981c4164d6528dc0edd4c51aae08b353fb81c7c688b72", "2fd250fa123cabca46564512e468759c7f7d7012be7665813c4fa52723b9b51a", "17b0c6add5a636c4b16be1b6c20127db97b28767cf0334c117a0f1901b235465", "1ac3660e969ef7c01951ea0ccf07e1c1269ac2cc46998c92a44399865473e849"), ("27dd9121c857c45f56e9ed89115e34f1e8c2e1ffe6ea1adc84c497179b85288d", "2e05420e927204ddf309c1536b2646d9f3275954387c37751ccc38e2d20f37c9", "11451eeeb4fd31c0cc8522d956ffe2230cac221149e45027b100ae5fc4b2a4ce", "26f930a58161a71c3dc9a4a444498fa58844aae6c2ec1841db9a037d90e5465e"), ("1048b76888e2f66e238d798dfd6eefa0b51b84ecb0a99408b456767c4f842918", "2ad178c98f86643f9b8f5c1df9faf76a49a39afc9121d127a208b82c2a8fe090", "19060f0601b78a4924eef7928b286f69fa037397d2a08c6d5106f3ebf9fec323", "14cffe048e345dc1c70196f011bf7ad4b51ed666c53dd5e21353ea0f7e151683"), ("2920e882a8c2f090e898446da8c16c08c15d2987fd9de057eccc8daf0888c6ef", "0e2c2425efd0ae6310e823147ab047c8a95cde7e4b9d4b44530803e8036022bc", "0f1ab6954c0f373322cfb4155f9d3fb60ec156d5dab65ac4dff1a92d0fc6950c", "0d99646f1fb2214480502c0437b4a1b70e92a2ad5e5860b77c48e34eaff1d27a"), ("2947ee731c9d1e90cbd700fe053c09a19ecb3a247bf45f2d4b53c719e4f31762", "1decbaf4d26dae50fe010b2f256fc2c8a41eaebd9c770428b08d07e1d2b51693", "1aa28461dfa5af7f0190815f19dff9ca60121aaf096e1087daed96a6db9e6050", "06eb444a7d3f043536bfade83beb4b383fd52f75d587b0a588a102f48efc2b16"), ("08ef18d5e1780918eedd7dc7e672cbd72331aedd61fb4f88ad503292db3a80fd", "0dc58687fc42a7aaaeb0620929c1a5976267c9ae32a5f8ab6e891d5e31558bb0", "122b8b2d89e422c958e15a7bfb6e35c0ed248c667619851f85e12ab9dab1bcf1", "13b990bcc9f2bc3fbce61975baf8218a474d2eaef0a257f785991e312f619a3b"), ("02fa6098b375cb06e9fa3ad128ff1d666884294046f7d23131b0ae291653eb93", "1d4d2935c70abeed5c96d893b620e396b81f51095673a46f7d5c0907c1b6e343", "2ccbff4496308d10b2b26234b04223ba9dd6778a1029c237a198e129d47870f5", "04709da144ef3a0bd73383d682f332985d07504ab3800f5ebaa9ae5cf25a5a1b"), ("230c734a26e4c9a019d87ae7b3331dd11d13e32c1e0fc4e27537e4e50c59f9bb", "03266053364e52f8962a96d80877aee48c876f3bb1870034217ba6c81a427a60", "19e5a9c91a42a366093f45036b38f2f0f035f696ba78c04118b4324b1fba550f", "236bbc70fcac85efd8c815f40daf636524ae2b319f0320fc4a8e70d753837d72"), ("050cf8e9e4a1b6dc16308172a7b392af59ebc5af10377aea4e98bc39bc125a07", "287bbb2662e48485c26a92bd444c177bf7c8e71d715a6da56545fa43fa9c9bf3", "0a502c52f0b2ee8995b04db7990e0ad400f97e9f5da5c1bfc4d13f9ce82c8f18", "0fb250450516062143e9b764a75f6b83a78a36ba1905b549540bcab73b162f91"), ("3057fdd36609ab48daf652ae0fd28d9904d4e56be77ece83846ea29e70f5e256", "2b6624586cc4ae0ab074398e7c1b88630f1eeccdb5ec8fc5eb83efc669b29e23", "1bb01e99c3b6523a93146c3b4c9a511c5f0f157f04a7e427959a996b4d0b5751", "079380550cb1e767c9c24caeca0d864327cf6b394ea6718621fd4274643ab262"), ("05037b4cbbb0fce8fe7a43bfc69f0611db92e3248e9790bcbb335dc6b2f34eb3", "11d3ab826b88a53ca5f44aaa46889cc4a326489a861d5dca25ede44bb025220d", "1a9b4d9b2094f86bd5bcab9bcad80946455bbe94f3eb990acccef7560dc6a9b8", "012a72f8d387a2d60143f6eb660490f6064d846c6f17900a683e3bd4fef38f41"), ("12ed294ed5a2a6a4a0f6a2f227cc70a33d3f37146ccb0f96c6a3cc35c71ab0cb", "174948c58fe130aac5d02950278de3b0a54a17013c3ee39586856407da743ad6", "21e383ba51d43c16a87e134c224ad5f76d11fe168b42fc1955c8b0e0a7f7fbcd", "22a601da8866b13aa59bd158a6d11d60a75fd4c39736e73d1a3ff4dbd0f0886d"), ("152a9e65d79ea561dbc8b132cbc2174a641673f4d3167946aaa494b78865498a", "184d934666564c23c54086348eba3f5957c86d00441715da4d77326d6e3e8ecb", "1b0bf365de7ba4ca26be3c73ac85e4d974ad570713798a91e0c1bda865e728cf", "23d9b7ea0347ee3866bf24c4923eb0b83d33e3efef2299bcdc674899ac0d4738"), ("2ccfb320883a1be2b6327114f52a37e935ada71031e07dae3ec90b0326f5af6f", "2cbd48a4dc03e661b01ecc47bee3a62f0eedfbb9bb60b4beed2d865801b853f5", "013c06c9c7ae7d94be971ff0b2c25caa76e958de7fb6d30506db32fe44b08b79", "02343ea216cdd6b4505893fd9f96d5f218785cb7e6b8f34c69da498295da5f33"), ("1be14fc32d73c2a799e3edb81c922a0038498e8321ddcc8e8e93739bfc71c3f5", "131fb5752912343444f8a3cfbfa1e12926c87e3827b5398455570602b4e85d3b", "2f49ee4417fc95c92b1bc9e0a5a788bcf8790e889c621c859ba6abfcda0ebab8", "05fee8f53c9e63ca61ac31435a4b912d0a8e56e21654a23eb37b0492fde7d08d"), ("227bbd34fbc1242c0f94201f44c72560eba7f643b768eada24f23adaac7bef26", "1bb82f64619fefa997b2b2fd40faf616d7a058e7ba5fe18b1e13be62f20c970f", "2c17611fb3ed34f27e0ccd4f6d947b8cfcf54609c88f98a987e6b4bdb9e87484", "1782d8a7b5c74d639374e2bfb4c2d41e1e270bc2069dd5ab41ff2bd6e2a970ad"), ("04984e3060abd1be618fca3deb2ec3c167beeb548e1c92ba0c49efa609c578ea", "21f55448f3a6feb8fb3e4269d6228abd9c3961ac5fdddc9206c1e695eef6ab53", "2aa33f2f169e22b5bdf760756af673a4453a44e241024768e2e3bb688c4a26cb", "13bd6bf90afaa000711f6414f910fe6f75b6494a191e89cea72e2c1239875ad9"), ("0104d1ff2fa7b80f0ad8868cb1b7d0c33fcebb395aa77ea29d5a80cac4493411", "194670cd5a2ba7dfb5da81f44965c54942245550bff779c836b104bb1d0a6595", "245d4b59f1addee1df07b4ad63466c6691fa347c6997e022107694b950348b2d", "0d4d92730385b2b1ea96799ea088e141d2ed5dc74f0b5acf98e650d158208a9a"), ("16d6e535a3550acea39405482e340c258eab2bfbcd96e8f0ab9db150e5efcc3e", "122936858c48290ed7b44f92941abe008426c17ecd66fc736a39eebd058f0e07", "033ceea0bdb671ca02239539f0300b619bd007440c50ba919d9843feea043d46", "1a3d25c5ef956ebf95fa4c51b77d8e5b87838af1a1affad405ff37937d943a94"), ("0508048fde42e9a6c32ddc37011a87f9ce5dd87ac089d7559e09649b22954864", "13a3c1a72a904051b17ad0e2da97a68393c349e40b6670f56f4077a45d03e135", "07e40a58a41d931f610270e87ee493c0009105a114422b90dbcc6945183f88ed", "026f169ce21661dee57ffa51467e30ea0d932eeae04bde7dd3c39317b6f54777"), ("26a5874f29dfb300b259041c834cad0e9a17fdbbc0526045c8c109846f6ec90c", "145f9eb760d994f59d44143a20c14d1034c0402eb697cf3ecc6170baf835a15f", "100aa82121afc141c9fc7f924172b2b083c07293481b2ee730732a3386c3ff1b", "23334e828823eaeecbed73328501c262d9df713b724513c67d9c999ca47f13c0"), ("167e2595c7d20783fd34b1f6d937abae5079dfa80eca4a56f16bcf9113410fa7", "01f099c3b680d489cf9526acf6a21b66fa5357fedb7f919f72d9d90a03a4200b", "03a4f167e3d0c01222b52d9222a25929d7709ec7c5ebe8baf4ff79f5b5379891", "1402f658867d223e971e5f23d2d00823e0cccb6a7d9e7092003349b3163041f8"), ("16a921f7b3a752e0825b9cc835a8c69e076f10b9268e54877d32099fe100ce7f", "08349ee0c4fa4e8373a1a3bafca012454d1a3fdbfcc32c02db4276f4aa491df7", "27cfe9427af4486dc8f8be6eea8d7a3ce142771d53ccd925f9efc410076526fe", "2b9fe17726feea22eb99c3ab8deb0fd680df8184bc42d1e27bfac0faf019ddef"), ("281e94d0a778f34b205c0fb5a84c8708c3ec36f6ce6c31c3646f4b17fd325ba3", "148216880d155ed08872ed33a52a84fdfec06937ffd21c4d602b4a4867640355", "174ab80cf5a8e578913d6cfb6c2b7bfebad9506118f61e1577e30499413e7edb", "056b0c17f8144186811f58154cb98d0c437749ba755a7291429207d7a658d02c"), ("0f8795cf04122823a84f82945582a59ab493489b259b18ae0999ccd15ca929f8", "14b40afd516c3e7920f58e968c1eb910f1ec0f23f1e5029511706de321657a64", "140f8f59dfa95699cfac156123533e4dea314145e016b2c035cf27add0e76f73", "0926226be77c37c8a71a102ec018fe0a041715401a2522b19cf5ecbb9360e1b6"), ("206a6f2536662b1cf43001f76aade04d434e99305ab7227c0f3dcd381fcc0890", "2ed49d073b3a1d9fa65d93deb4df3a769223cfe5be56d01afac44276e304355a", "1e49becb6bf2168287537ed4b58ec05cab1f1403dd5700665b2c84323d6b1c74", "06a5bdd41e45d8a92eeaa3be77dd04ec9a040db4a77831802f1b3b58bdedf847"), ("2b698cf35cf329ca1a29af5cbbdcce53eb9810c57fbf27c48b4a51dfc5ce779a", "22a35250815913ee20431e3c7c63298f04c1a841e190f180783757ba7fb96120", "128148c228296ed1642d22e6c67fda27e9b7809d51baaad728f450827bfa93f4", "151ddc721d4c8d10011d5cf7b9e55b92e5036d30242433cff4f694c1d25c2ae3"), ("24a75c3b24e5911ab5a92cae0d532422f0d23a61c87273b0a41271009df6f54d", "02d5cd335a4d2dba033a1bfb698136451a79dc2a9abeb380d2ebd21a68e6abb3", "21d286cc27b60d2c49a7439423eead3afdbc408722f0b8ea552b4ed27f2c0836", "139a9d39cba538035b87e9fb583a544e72662ddc2c0a4140559c24e985154147"), ("200febddabf6ac69247f8f185815a19c272f58e3e918979cb5279a2746795a13", "219c28ba2dfc49c75ae7df51b1a4359ee3f7ff66dc0787c742ea5c347fc3c58c", "053cec689d21f2f19df6354c4fc25d26a63527ff145439ddb574ad50893673f0", "0496537b27bc3f6767ae239785a968f988bc28f4865e5a73b5d8fb497bbd11a9"), ("262dfde1ef4500b44cfcecefb68775714765ac29eb34426013ba6bf296bedbf9", "278251da2ec4f493b197b8511ee507a8305111d78a7d3b6247834c98d68ed435", "16610816d3ac08eba1220ea23ec736379bd7d36ff6fe686371011f1e2bd00561", "162c391e68a4afbb8709ca674c6d8a78a0032f102343044bd0c0f2595c913d10"), ("1cf71e935b1e5f8b8e8ec0e1b27cc799952ed3a14ea7f652185615e1c213490d", "2d68c6173723cab425a5f053ce99d847159273c9a7af22fd8a5585b3c4e3d820", "1668d1d5b68191a5e51a5316088d5e38ce198570467728062312954156e8e1b2", "19ef0cd2102ca28c891b743fd5db5da248594a5bf9fdfb4664525b3a6484880b"), ("02a79bfeedf52ffa6f8a361bc7a338c13d862530c9919dc1490b844f5ece9302", "15cb63b495fbd1043959513f507c2f663a8d71f221a2d6036de487f5e2c59da8", "2c57ef086409669375c0e711dee64710e23317aa9bd43961df185b51fd69ff19", "0eb9e89589540c044804ba1c809365c57310ead26b8a0e6a8fd916383ca4d7a8"), ("0b8de3591a637d02ce546f16d678bfe8d56ec3aeae683826ab93d581fbf3b59b", "1ded783e2923b84bd16da9150181f7593f9c6f5ee2a7fd0b890ed47938757324", "008e3a3406bc5e3e394e1115084ef1a3bf167845e58aabe826e0d41f3025611c", "00abeaa4ae96d0a82ce66a6bd5cf4457353d607c8d9724fb3bced7bc3ff8ba35"), ("24df4f5c36d6801051b482625c6f556627d077d323be092ce78f0c6d7ba447d8", "1e810a768f9ec8038b0e89701120a0fe4220a20f3a5921c7046afd9c1dae49f8", "0a4eb831aba81f95495779a23bdf7efa46e019d9a762d46a83180cbf00cfcd9e", "194e6c6ec31eb490dbca4a7f2fb5e2c62b4d5fd06f6bae3809da72a337028027"), ("2e528a17cfe82258b90b47f06cd4c45a4638cba602ebc11bda8fb6995b3e756c", "06159dcbc98766de86f644f98eac88c5c8bf4d0f4f33ad7122074c52e7db4f99", "1bb8799c9c02a4f6523e805c86ae3b2469ce697128cab5c47f028c869909a734", "12b93fa8ef79060dd359c2886a2a88a7dc1246826cd6eb7602271e23191dc488"), ("0b83079ed0185751c0f0f47cf3035e35ca77feb9d1a4c75a83faa6272376a3bd", "07d5bca931b8492d5ee94906e6d8bb3796be5b1c2d62771808cdbcae9d4f68e3", "03f3ce9de0663d2c04a97d1a5fa1f935020014b974303693f67ef3af9870d926", "2cc9740e010bdc782db27c2dd2e936335894163fa50de8412369d58a98c56471"), ("14a86a719b6c13ac5788fbfcfd74d8f55cd9b0acf8b8e19dcaf842a6dc2112bf", "274200e3387b61eb784ef826fde86de231b073fc375e70a607201a0626db6f8d", "1ca44febf610a01c5b03d65630ebb1cc34134983029ffca65100651f6f7ee4a1", "012ea43a2eee06504531a4db3282e32fb620e3f06a96cff4865fbc3a7005b3d5"), ("15e7d0f519a3a12611342c2856376a635f95f98065dfd919e0e2bc7349ce1815", "14af9d4a8fb698157ae8fa6d22c6bb6a23f8d923fb11bc9166e4df598c407d5d", "2093c227447dff0b1b94f218ebec2b7a18203af1b0d51a4d9bb159eff515a99c", "20437f7258e483a16a3b3f611cce88078091f6e2cb75529c4b4368c3b0671e3c"), ("08120dcc42409156ac5be27c260443f483728b654b731c2f624ae285bf0967ea", "0dec0ded74ba3efa7ec1a52278e56cc9b2172d3c0a14f81238e10f0dae3ccd58", "0df24c14daf661543869daf869b9e987794c5338c0312818e0959b7682b40a14", "006544eaac9fa2a61f2c8783dc4737bd3f4a4107510bd5657f700ab99108cb0c"), ("2ca7ef493682542095e459db7474c44098b987538baaa63df0fe8b7e04c35f55", "2422826079a8f3abe024504daeff5982546f79d38432c2be89efbfa0966c4c4b", "17154cdb654e51ceaf5cd5a3517e0f3db0d5c2864a5df992961e9992db16ea38", "0b3d7de2234b9492f00aea784399c0c419a12fbdaaddc6215f45eea024b40991"), ("2e1648262bed0fa71a0eadc805062e490f770f3871f9b85869cdb228f9ddf359", "2ee6f4a3a254168e292df35944e74136550197514eeb8a13f5a987c17c9e8b58", "1b6e3a721312a9a609a01892d08843b593da227fa03b68f4fb991a4f45c04c49", "0b78c3666fb95d5d5c7f043eb6013c7e2cacc329dd888e4b90d2f1bc8791fa94"), ("25a930f7e2b54bc75f7e17e288e8604f4c4bad4d61202f5466a4fbfbb3234870", "1bb813f50ae76743d71eb3c178d0d9b0d8849aff7d3881c34a48b532e672e964", "25e3a5f224e0ddbf39a5c03ab5449028971f5b4611c054514b19396c929ee67c", "1a73a693107036c6e8e456c424c6af1404cd7a74dc7e4b7cb5e34a3485a9f5d8"), ("0fcccce234671ee5bf13f1a6983627728e2146f4e26b08f29ab1c13d89e11526", "111c9c12526e0cb4eb572234f2da3b9022a752207e33895f40b20c57085f4130", "0d100054ce765878e0b09da8eeae15e7d28c0b14832f1836dd6e0ed2e7e40b39", "19182130f47deac91f256b050c99bb49223aa5bc27c34749a809a2fddad39f3c"), ("2a6da963bcea89d207a8e54f7dcb0db689b79c47b25a34d9e9ef1717e1ff901b", "064d9c1288d04c55d544b63ce199e12bdf745cd510649e1ba11f18676b967fc8", "157ff02d865ac6f8a5fc062dcbecf7c2c232079f6b846e08b9a463bd68835743", "3014e7463bc1be87daa8e33e56328f3fc68147e25345c03876012383bfdbf5c6"), ("08a644b333b62f4dad0005704a702159a07b0727b99df1629cb9d40c84200f30", "271908ddcd0899931bf2c7fa0e039ba73864663a44fab6dc6fc66f49bfffb521", "2a3a060249ff8e276e8de98b4253219609dbcab0372a7ce3264a0fada96ea5b4", "1ef7c4e33455e60818f37e81048b520be3d22ae0878a1028b30212e396932da2"), ("0d30087b0eed074628a9f9577455008c98da1971a71c02921fd6ac484a9270c4", "1ab07c3c0359cfbc76d6ce2f13c464e42495d5f6363fc1ea1f92cdc579dffda6", "1a56ee473167a07ea5c03aff5cd60fbf3632bd3746e03e623e42cc0cbaa9d620", "29e2a52e04c21d108c8d5016699150eea476ace5a363f8d79b9d2062f7758f51"), ("2e2b6229c899ab4695c6400cae20bcfed2e51da665337fceb0c0631248ca4563", "1e478313ef5a021edfe7ec08d6e8361ce3d3ef60b14754d56c404a2b623b9e34", "0204787eb981d9454f5ff0b9e615b1668ebf783a8e819ce40d780cf064994ec9", "0714d20afdac63162a1410b9308f29760d52585fa6f2bee4a68e376fdc8833ac"), ("16f240aa5c4259c805e844d97648e8438adce41444f78fa532ad55167438e695", "1a8e61cbc6269e67c578a72d602b5f861acb304431cf87f3a9021bb4817c5b90", "100bf39fdaf81d3af85a7f35ecdb1029bf23527c35e94cbb32b25a2c7dda8c33", "2e62f8137fc61492866642cb4e16b6945853301331325f73fa11c8ee46782bc3"), ("2d4e3634bfe5479fca59dc7b46512942f6cf3ac40d19b956caa17da77fc7c1c9", "2c82a3c937251de0387ab6529c59a85db17ae0f6f1d509ac85374a583ac9293a", "2fe8c4ac6daaff2c31476552d7c370b586a34126026865666ef087153d3f2244", "250f1eb104c3ebd53584b3ddc1488c4a032ff3da130392afc715128fb9b4b094"), ("11603e5b46b15e97ca420596bd501c286147403cc12ed27bd3c1876e1a323bb8", "06b3c1c365e816294144b2bf0245763cb9cf15fb28c4f7a3f039c09d4145c25d", "08d1d4893993ce94f0efe01010f4ebd2f3d8fcd83f35e1af8b3c4e48894be68b", "14172d0350110da14c3e314a90fb0937c9a558a37ad1923435723039a15682cd"), ("16fb595f020db92f841652e7541065b20699fb9fb9cb62201cbf4dee381b52d2", "0d2af885e017485b6d3ae21fe2ecde3f2adfed1626a92d45988cfb421002dc59", "123d89a2e215b1feb8dd0182ed501ff418db7408219556c8528f1cbf9b51fb99", "16ee502e156015bf6fbeabce8eaff4c2f06c8c1a0698daaaf9eefa3472b28c2b"), ("27e575571d32a0c41805a6ccdca381f740757c185b5754acbee24eee5ad6c1a5", "0d1d574eeb0c9069823dcd4e3a7413a1a15d3c8f104fe378531bda5898cd60d2", "2a586254056028fdd06c1c7035b2281cfc8f3127e69fb7d3237b43d6cb983dd4", "03984ca72f559300d030ea75e808dc44cffce0d3d1077286422e43777e4a4e9a"), ("2927a208ae868c1f926ac01a0107f96c918aaeaf07f15a9b6d6e1db694b0b971", "06dc162ebb5171fa3b6b450d1a6d6b2fdc87e3bfa01551dd953a430dde8629f7", "26eaa8a0c71ba9c0de6c93f40456a63bba863b51796636aff76ea7031ef2fbfc", "2c2f664502996fde88405c6b684defd7f71795488ed44c6024f95e937f01f6d4"), ("125caaaf74b62f6d68c581d8b0da92c06d394c3b5807e238cf7fe3827359f6e5", "0599de9a5849343cfd8526c06612d95bcfef4b69551530bc840e80ccf67d8eae", "0642b6ded9c481bcb205ba2fff1413b4f22a6d6814327b34d6ddd6c378c7fe59", "1ad6e80465e00befd3c443b9d6f7f88d940115a5b91c7035c7e262aa9224bea6"), ("2405d9f2ff8bbb9a0c9d39e16c552187d374728881d47c6a8f42eb24d8795d01", "26c117e62ca08539e83e9f929ea6da8a420174803e39e32420d6b2901212a909", "2a5658091d56e73fffbf42a089bff9f588fcb1fab3128f0177d576b19109dfc6", "005eb9564b96136fa7de7b61f3fe073675b963458361c6ebe89a4c73cff1746c"), ("062c7c4171af66bf1221e1a45cfc435c4ea08e6be2362d08fe0064683744ccbb", "29805b4245455cf076f05f4a9fc7cebb25a555475b1111c6cab72e0bdc52fdd7", "2b6ff6c9d3f3296887dc84db9b36b91c33c8e6cf7b44441d7274ad0fc2dc0a98", "302958c20f6078b35bbb192f012c8c6104093bcd4e33e78dfc8313cf0ad2fb1b"), ("2934f065f44031d59de168552366d4c28b506e8de824793dd298868e085cfd6b", "1c0a16ee087bd6586742833df87ad7c77b4d3919fa70d5c4c8fbed30e0122866", "0d371a21cf41f2324cfafa0abf61de74d7db01249bc9cec3e509442d8ee9e752", "29e99358d005c2a936e982fefe1f2cd821c5ce8494c2e39c24df51e2478326a2"), ("20013365dae0c8660470336fa676047279b740eb79c2998630cf84100fd66d2d", "015afd7eaf267696c678173b5fad7a93775047af0b918db717d7f001c1173fba", "1848de03387446aa4df4d532f86af68de4c999d8cba793d2e2acaea002d2773a", "1105b4630f7499528cb122ed41b48cb1874caa1ea2719d9e25ebdfb945124661"), ("223a8442b66fee267e7ffe87fedf74ebad12ab4824837373378a0b2ea53525ae", "264c9fd8c8ac709ef2369dd96920c1c97c8d964fbf2fc6c4c2a258a654ee0b0c", "2877bb3893ff9ee92b70975f56acf0b5d82b052ffa56535202f8b92c570cc9dd", "201c6b170be0fe376f02a5499cc7d3129fe20ffe4a6aec95b2ef43f28659a304"), ("275e1cd8d3aa021641c2c8a304b6d0fd51cfc7376e348adb6b0a7f2dc93ebac8", "2c9369643ed30a890cb60f49fe12d81c7b058aae73e95d69aea03c4bf8363e4d", "2b18abb62f3d92d5dbd356a39f99210f8abe2863a0d8f942cfdd69713473b9ee", "16b3bf95401ef3b1c3145ea29755c9606fe8cc862642e088b834609ef24bcd07"), ("1960fa4505f5e49f83334c845590692c33e9b7985050f8134d7e3528f9b12a01", "08f559a4db4f1a2d5e598e441b8a0c9c4cb381e750f77d628fa7d87ed4fb9159", "06110dd383db8a26d33fd5af67e23579d20fd3fb6a11d1519df71854bebafa44", "0f253abbc4d2fcd19f00b8f67d8909adfd27dfc44075e91715f152123cde897f"), ("1693f7e194a7c2348dadcbfd5867e7ace7be4751a02963e7c8b990226d757251", "069399d986d61b232d1069fc9e31268f946452bea20f6aa47e99f5d7bda8b6f2", "1a77e82d02d7cab1bd5838143a764cb99f5a85f555417cf20b4116a12bc5979a", "1f5201231dfef646e6cc81c7222924387a81554a59838f0daf22cd752c8b26fd"), ("22bc349c9a3fea701d91d9d775b157ac8127f2e07569bec34a9ff1523fa17e08", "1ad1e2a3c9e1b41b882ee21f785832733fa4ebb477167e383d982c33ea29d18c", "2e29f90dc37cc5985843f1c2902b8a2e04b8c4f7229db62e0b5f44d6465a941f", "0ba7942f2125f158a80ed6a0a3bf756f630f1b08bf67a038098a22cacaf87cbe"), ("285794c3d29998862be3a68d46d481db0bc776536e9d4e7e710d6c6bf3c67832", "1e9addc56fcd4e15780c02e81f9737d20f2db66439bcc2708fe355370f471382", "24f613c7f1f0040cf02450081bb0e327df6dce6341c9335104cf35ca65d53c8e", "0bbd5c3f922e98ac52094d410060333c29709ccda2318b5a7c63806a0e3b5ceb"), ("29a476491fd3513be28780e8fdf0eaa65f8b7e1132f1ec883a844727a0f98664", "1ffe76b0523e0cb4ec7af4595d0631224039d1a10930b9e75b6bb62ef9ef3d3b", "109df5fea1d5bf79d1f550b5776cd58d60c4f4318186bc55964301fcf8b549c5", "159945dfcadb903df2cdd25a430a02790a704f17a5c0af326a27b5836d462fac"), ("245084ab907459ef147b98b2d761777edf2c9d7213bb32e10b015f74460bf644", "12dd9e7fc61e8d4ddc6efa8b6bb49156fbc37eb594119df3490cd0694f5e9de2", "02bdc15e6387a9f065345ed513a50aecf3279bb98f0c5ac1412a981d4778ccd5", "11d26d9316a56d849fe78071d84a2814927cd4efd119635a2cd9fd035c420ee7"), ("25ace85c7f445132fb4a2410fef21aebcdb7b3e93bbb06847c8ff0a335948ae3", "0165d760cb04fb6e1c1919fa8fb4ebe1ddda6e7017c62cbba3f5af5910ff9ccd", "15756aea82c060a6cf45632c97cfd22e3ebb511b939fde535c81231280c866b0", "17e7ef57b82deeffd5ab6facee4c0ba79b482a5d2069eb19d96cea4863677497"), ("2bf76ce7b7c45527bab4fed3456be22b8a71bf8743718191d725b7cc0616aa70", "08172dcf1ba4256fb97dd14099be8f6d8b055742007f4d156057b406480e75a9", "1140158f5c0a23a1697c57262cbffd4ab5b5515eee7f4042a7e6aadd32b70d69", "145855fbd3b5c37051f397d877762ef56dad7198a387cf4ce31687f2be2b88bd"), ("0026816279efa0ee04baff19cdc2ba5dfdcee227ee677fe96780ea0fac059c56", "21a87bb121b34ee9a91726a63558cdcb1ebd955b6a5a78e9405fbf46e2c8d503", "2c64f3b98ea60a2aab3706386233208f29c86b925f3daf8b44b1a8ff6d0b2feb", "283a79e7cbc201dc9efc064be4dd3e2dc7ea0ae6fcd4ad09fa864d045d2d6893"), ("0b527f40df8dfab8a2619de374777af91170a6b22dad02dac24c42ac3207569f", "2501eeea7445fc10bba19178bbd04409f4c87282f6830090a8fe54eac910e81c", "225405cbb1504ed999a29fbabeae3b93d4fba05340e6fb1aea6bb0397cca4d25", "1c4c4d414fe648f1f4b006e56220a066b5b9de071f1ccce090ee207868f246bc"), ("18d084847e5f151289a8c3111aa31ecdb020b5a5fff3da6cc2eedbad1a9cc403", "2bbc0a882834a8627eb4e66b6d597f68bd866ec44b66fa1c6940661d6a88f49d", "01cbdfbccdcde2507d9672183d4a2118270961ff86c0fe0b0a15c59fcf0f36ae", "04932eaff56d5ab3d3b796de0e978995f6f4f4acb33c23e58de412191ce880d0"), ("1c240e7722b24535368f64168877eff42758659cc7fd4d6ee928ed50ac7a4ec6", "05b2e2e4cb6bc173ce9eb5dcaf7667d1d1f409ded765c28e8b8cb0fcdc101489", "12be3a9263dfaf418f0abeeabe8b5965c7152f6fcf9c7f61e1434482e1a2aaf8", "29b07645f9967b737c6da3c90e1981c6761718de6a835c99ce12a972e70e5779"), ("19e3611d78f285c19951ef063e618c731d2ebfb525b7c3185b964440ac73302a", "08eb86bfd233c2ef551bb8f0963d5f9c2b2a8a7487a858ae5894bb86f2693305", "274a794bb6df5f60394bf4736214cefb10019b7214efa3a6e017c4cd507d9cea", "1ab3d09d190a585fd313fc9df43ad639763694b6ae94b9ace705b3299355f45e"), ("01b6677afb0d22d87fc7a6cacb720191926d6cb7cbbf003d676b5da4ab9a5303", "20d001072b3306e8dbc84d4bcb326e6a33c812b88185f26675ac6a6764536a8c", "0bb6f520d44628ef0e85532afa669e89dd854d38deb7f87d4a0fee7a136e7e92", "00686349f9825f86ea2545df5e7afe5253ee78b8950ca3a379cdd8653501cf96"), ("08a383f11678f020bb7214e468734d6d8a6691ba8ef041eb4641c200fdca1c6d", "21fc87ab27509ff5f0cd3de280ca206015a00c094dd288b3ff6529665d203df3", "0c090876a495406890bd4a0a2ed5787189741b353e54b2bd1256a077c0591ba3", "231faa6daa0110b5e9bf6b5a7759ef61b85b8d81922fc67e8e0b2fdba25cabcc"), ("02364f091682fefa4265c5f31f7f0301ac33ef5359cf8ffa1539b0ccbb8cfa35", "06507ec541e16f044a2e623de71a662faf85bf0656b57fcdc7bcd980dafa4c71", "2b08990f29c6a327efcd480d36549593b6a109722cbf455fe1bece0ca9f18d6b", "2bb69c7db2125700163282fe5a4f46af85c7d9bc9d3af9a4766208a2b25785bd"), ("145f56ac277be99a731fb93e92e1769c0b38d78660116189df23ea1443424a9f", "257ce5fed51dc64076e4d0a76de963ebb1b3ab5e831b112fa073cd0211e5d596", "197a8e5821c96bf2133591f33c886d2ffae4766ab8d6751ff135d706dacbf952", "1e6a4f5732072342a153ed3cb571e9cdd3921555cc5a9733f29c638d1e3bb55c"), ("02c26ab30c85743659e39e906950e8cac28c64a2ae0de140c57fee997884031a", "18663501d8359ca2eb2f9f1ac2be77bcbcd716c7a8d88e2c0c8898ac8d71c03b", "0d814ed9e0b37bd687ae0c15ad01d3997f02cd49331cd73b9238fe0f7e702759", "0c59f670c2c1660d599baececbe1e9db6a102cb99ee191bb62e00cede7e832fa"), ("022c131a9d1e03f883df7f16d13c2818c46d4490c44bdf9813ed2d9ebb9701e6", "1d0f72eadd6904cb768901bb8053353db91e1a6c42f04a11af4bc47cbfa0df94", "102631dffebc1c47520d67285140a662251321d9ac129dd5e1d7024e8ed7cb53", "025b2ded4133402bb3efc725f313ebe11e775682d1e300276dca9a1b9251b8db"), ("093f9e591e33ae4d0a733264f806f957c4c2cd883f2040ddd460ad71f3d610e6", "196d16929033012a8bfad1b25effc3bf80f7f01e8628c8bf311db6b791c8d451", "2ccb2c9798a7b797805ed7ebce7aad230929f013240cfe86339ea24e4b5f3a7d", "01a9354c340b46a563007cdbedcd7d18fbc0703ac3f78dacfb9c657273fa1782"), ("1bff7b2aff3fa03ea5cc6f63e3cc0ea678eaad3d4d8786a5cd75ac151c4a87ca", "2a830d53c0e2903caf6128e618c3d6c7f1bb421500d5580ea1ca900b34899c28", "18339cb4902d822b08bbb562fdb81a1a243672895bd312bb154865a7035cd824", "2da6dafdcdade059f1d8c0c7f07dae420a73bd29921703b0879ce78f09e5dfd4"), ("2977c74dcad41cdc761e05a06dbf889291b42e08e146b37458e99c20e9bff514", "0167385d21f8f0c6fb3dfd024482dc6ec123f2f89b3adbc715afd6d4b29ef66f", "1ea5adc4550d5805f0c0277f8b930c3c902be9d9d3129b5fc0eb510fedd9f552", "0a20405975b78e52fdbf847d0234f2ace50b8f841d9f7f6e8c20e241aecd0e91"), ("039a74bec84304be4071f978147d1ddbfd55ce4ca30008aff8c76803fd31a461", "2f5a3e50eaad40cef208d25b5cf11ce920bb4b9633cff560e93e6351299959a8", "0da90550807290cfa1e16d2c31292c9de8effa99ca2a992926f2ce40dee89121", "2a4ae8c02734f03c307cec5a51d7ef52b73b0c8d3fe915b940b4a8464aa1526b"), ("108d94152fe3cc12c610e7c137c9af2d3f0dcce67db433185ee2515e64a8360a", "2e75a1c65f913d7cfcdde876ae9e4745d8bf06b26e181b9616f99ee95c8f5165", "1a88ad2499cbcf04f3645303f49ec822312620cfd1a47b55e4ce2a185ab19295", "1b599f2751459b5b807fa5e34e8d557e46cad9ede0b4d4a03fa142612b19ddce"), ("0e2070d90f6bd9f23168b9c20c9cd4734ae0efc530d931cd04ef62ee7e5da921", "1cdb0b4315a73de0dc9ab58a255a61fc35537b1f3b5ce552be3c4f338f3c9593", "0bc423443ada65378563f699b2e71da2f6cc704124d5ee738262800fd828ec01", "1dd6c1055285595196729700b477d4b378f73f469c6f8979a2c4f2c4776ee57b"), ("0e61b869475f255604901f93a69f492e66c2effaa429bcaa012be5313716a15d", "140ba0d5bd43766eea408ba2c11805c4b4f451e95a3efab72aa89490df658031", "0ad5ed5329f291b91327022338f79e8b4af204515759a05cd705a3f6b58fc8c1", "0236e6302af5da67c60f74b8982833e203ab6e9414479cd5afa9e6fb28ae5926"), ("1c1a0682591c3be3d03c47bc3ea13e4ef975b1edc589af4287bf63d83f76a94a", "2e9fd0e92ed48e8849e0e4b3b4eda64f8d76dd2e4615546638b6def3c13fca10", "2d4815f6d3b13b6dc49d1c4ea71ff64ab4fb49a6d999e7a49047f66fab410168", "292b8ff9ef8df89bc41c02dab5692c10e2be74e04674dbebe5ccc72d09a26847"), ("1d19f23e309e8ee36f3f90c73b8db7697f343a5e38a1af4ce4d2b2a1e3330dce", "0871da6e9da857795ca30b88ec6802a4854d793ca6155137fbc72050fc2ef341", "03acf5c14bd26ae38602bb6d4fab47426160e5205e45db86503c9f6237abc6b8", "1ad88b85a756129b6e16dcf30c7cd3a4413de2f086d1a0bccb7de00cdd444e8f"), ("05e1626a512bc5effc9289df42406e8dfe7e5e8adf3f687894e06cd1a69ec5cb", "09edf98270c1587efe9583204d460c30d1b2cb954558f33e765d5b9250b562ad", "1da6ff173b4492c147a16e13b68560c6375a428735d144eb9616498ec31022f7", "0f3f14e09e5802316fa405e605de2a2240a2c5a94da8f70125456ec4666a9ec9"), ("0d48e5ed91933bc6a163de86df625346d047bc87b2bd70b743eb1bdbb2ad0a51", "28b11c52a5ed3098142d31c603fcf40e67dfe56e6e04b4ef15b26f950c0ba1eb", "2520b1d8ab3b576cef726ea9b362b82cacfeba268e6e8f174ccc53c340e9485f", "0ca71349c59584cc813d9fba7f68236782fc9c7fdc928c895801b4fa9d42998a"), ("2b47228a0fe7dcd09a71b1ff5c21b87acaac814368210ec0e92effb3457f1380", "2da596c77cbc604aa76d1ad67dfa99595e780244a5ced4343aac4c7070003d18", "10800923773e6446f86de1089b87d28e4c551552b45a46ad91cb4787720ecf14", "16fd4d783deb865edba6c0856e73296fb644a61f656ce8b8d83fff6309694333"), ("024f2ac0fd9effaa943670211ece3f0fbee3f63ef26dd098c24773a145ba11b9", "09236be8daf3e94473d8cd08dc2f919acb76fe7df4fa553d82a9ce5d533e4162", "06b0eeeb9f4b8da59c2c0ee8816f2a19c82cd1ef8c8a9561990b6bc152bbdb51", "07caa59d8808cabf79d072ef067506a936f389cfbd7c7a7ffb024a216c270508"), ("160c63e5f139068fb8585f93c8bd47e0d3a1b183c88d6df8b6b6d52e7595aa71", "1e634493603c54a4210832b6b342e0ac77e3e98a45ac955cc73cac1db99e2c30", "0c50945d511ed323814f3bb1d343ccd36c267365ca08bcbb9f8e7bd4ce5a1c87", "0c96b9dd679f000dbd862321032fd1b3663230a3a6a626dcdf4192b9cce1efc5"), ("07c565865c2cd92b8110b604caf34ce71d237b020b5e2301a91ac73e57f470b6", "13f2f17651b4fcda8fdc027a7032a50e757fc904b402b181b91093c25f136635", "0e9d072da483ad527c4674ca0cc1b5dcd9a508bf305cb6a3ce8577311e6e64c1", "23bdbc5f5a3a57496f01cbe525d1b78b33d4b86106d05c6ed31639a91064fbae"), ("015c70d74688e9e19bf33585ad19a0ff90725828ffd25f8617098c026256b03b", "2aa96b22307d953193e58696d359b34530eac2eeb001112e4700c80a145e9375", "141fe62de0affc7db6ae5e8eea27338c937bc3a2790f92619fa0988ca0e072a2", "02c7d95972125d5b82e2bd7546b08befcb7f2a3e3e389c7e60796a148d0f73b0"), ("214cfbb4519db89fab8b71744a1fd6d67c6bdfe51f226ee3661e358434d5a8f6", "286476658424457bf5fa0d88aab51afbecb9713d6be8c72dae3e5e3b424da869", "1c93aac4b5b0018b40154094a7fb404d568f22b41fe170e1a2187d7587a18d1f", "227a9707b5a092e7b192490bc92ec43262a198186b812d3399717f1ec6d546cf"), ("166414eb3fd3a68fdb7be83a5b63e01ca999dcf3f16b5c3171902b7396a2c9b6", "062b3fd5317297435bccda6cadfb5227dbd5cd0471b41b429cea1979262431c1", "0b21e581ae625e1061c29ac4b8304ba5150c64b8dd8080981c08610f485c57fb", "0ed284a2baf1583e278e2a399d2de138c5473efa6562ea32b87e6d46e8afb1f9"), ("16587e74a16db4e6d4370aef441e13a0de08eadab8a43ec36f7a9b1640720936", "11604c9de0c59a64ba03586135466402b220913863341adec02c576893e8cdcd", "04439e20a75ecccd501cb288038efa38c5db12501bb987e020ea5f12a2b9f37e", "084c703c3854eea5ae66afbfe9f9573e53b3b9bad4f06eb9a95b73dbf86620dc"), ("299512dd46605f280d580c9fa60cf012b096823eaf4838c81962f5e85edfcae8", "1a81517ad075345e8cd62639992b3ef59da015d500462cef29b3e559d3f3019f", "106c515b3a60f3781847630e58a035e7439e7ad3f7ad12338eb3db502b779966", "2bda77e3b74d14335acec0fef945cd434569111e9fb9cf0605b5076897657602"), ("0ba002fc3764546445dcf61c1f69640b4dbf7432aa31aeaeb9b936ea1e7c553e", "14690dbb51a4c7a4a540ce25ccfbcb4d15084c910a1b291f6da0ce552fcf9a22", "1e88b774e94f42f896882e2aaffc95e8ccdef338949c116d3fa41da11e972bc3", "14683ee193b9c017123c7a9b845f0502af877e70333dcb529d55660dd7277308"), ("0a430d315a43109b0124347563d739c79d3d0052fea33f413a0bb7fb7e518e88", "29b1c44ae44230a0848bff0d5f0bb8cd4c1a2c5f05c98ee702dcc4d28399011e", "01390d022986c537b4dd1d5e094c2b4c2dd8098937f6869efcd239266c696f45", "09612908e0bf42b589d871a6b2e5ed80bd6f6d89f7d1368a92e189316e80ed6b"), ("1447eee95cc09c33b6f9fd0d3428849d728c2f53d20d2f4f8d2b706667e691dc", "0d78b5e1940769cfdd675cd0f2095c0dae34ad6eac54a943a1c418d8cd75c862", "19b6b4e293e807b9945ea8a03344873a84435179d01e0f366e8a85b2365d7a5c", "0b7ae756c661e85948bd09f3b9f5584de5868699def219a9f7e8bb542747ae07"), ("14345c1da6b956b7867fe001cc62f11704e11c58471adfb384c080dce2f4ef20", "0aa7a37e03324d64c6a350724d8fffc261457d28abfc78d697eac8fb1cec9fe9", "213062c9a9dbbb46d02fd968ea8930411d0ee9881c65333c02aadabd56c4159b", "2380a041b29580693111497c9ba504c21e4d4c6bf41ba3ca3e86652b3d5d2916"), ("24a0ca4f6046a2f5211d3579bf1160470d14e6af42672ce1376301e9beeb9d97", "0bcb6d4204a20f9a79cc27f7a268e33f38900e8c5f7078090208f5a726a2f505", "07db9b2357b59672676f5b914d3422832d33985a56160b2313970fdbf04fd529", "1e43471335ba522d770c9e31173865632061aa906653b10a39d847c627fa8fc4"), ("1ca38f3c566542a81b12033dcbdc217c370b4627e7038bc7988051885fb67192", "15de640dd869bd30911c8956476c51282090571fd0359a759483592c00858b6f", "2aa4270fbd033893607e2f2dbdcd368a2eb9cef093103b7bdf39590285b6fad2", "12ccf7def3ab39b57630eff6406f35b88e9b275662b8701b234fab71eef54e55"), ("0200ad6a61567fea12591dab96c0d93c8b507b5fe74bb5de61af3408d4aea272", "1b111d3f0fd55f79a65316adcc34eafd49ab68aa48383ec9f756379ff5f6ea6a", "2c152413c4b240d2b7ccbd0cca656d3b4463f6b70a0a884bba053bd2114442d7", "016a4eff9c1fb082534c416ef02aa3ef75d6d3234b8c4bda6fd36b6bd6d72154"), ("186c9e925395bea0e5b69090c75dba47d11d86e91da95c48898b27a863086f52", "1d7d6afb4bac5638f8d761bd61f6eb47bd87bb2bfc754f22b177b78e48c8f0a0", "2a86c9aee70b40249d9ee4ba75289ef7d70e179a53b648f8c4104e9b78d3287a", "21966e85c482711de932429ce4a39e7319211dae9cce66de9d8d61dba0e086e6"), ("148a9cd8223809663175f0aa6fbd49eb0f9c308607835a4d66d603d0b969e2c7", "21bd4c82597903c438a2874a431ce115fbe5d206f3cfce33182a6f6fc3d6e1aa", "21291f02b29476dcee0e60ffc76a69a49035ab52c5d490c9bf0913c8acf6cbd8", "0624563310c475d423b4ff99b1f2e0690132e16c334ffff6636c7188340b4808"), ("0394223f62a4a42db017ac7bfc4c7200c2ab04aecae846553fe9f16eb879d2fc", "2c381855593ff4efc17d99c8ef8b40a5f649c40980921d6731e8ee425c9a9c9b", "10a5b34722918fcc95775bc27362e119519886f23b307d48ce63527b75a8dba7", "26ee0a6fdc75884b30f1567886774bc32c3d1e0ba3bac37873a8d6e2bd4ec7a9"), ("28a92b4e3d487365ee2b7b9d22710d3ac1c0f5e4974d67b440573a22380e2a51", "2ce5d4bac80deb57d0f9f23361e880196cc394cf3f79634c1f18dc327da14641", "10760c15c012a1e98e1afad18a4f61c06e6df7ad66dc8ec7c126d6f6e3cc58fc", "0b2520c223dc24b4f7d18c934c6c2fd72569bc76c8b839a61114e6244905c543"), ("083fa23e7120a86b75ccf604f8c26fb843e4691366fde95eb08c9308a3f95124", "2e56721f8ab598318a2d430e5dc1b3808c191c8c7302eacda8571875704ff7cd", "22da57bc8721bbb5dc779ac4e4484b30a85ddcb63da5657622e358aa3649811b", "15339c8c32510a225f18faf93344921a52c0347123376b0528764135994c0032"), ("15eefca351180b8c4b9537a714463f9e36a7d8659e7913ddbc3fb25a96fd5f43", "09595205cbf4a7313d997aa156b4052c566359e84ade6e7493ddb3024cd95780", "1ef73ee9e8fab99253652cebd1dbb971ec9cd1e65704ebd523efca21b14a80cf", "045fa00986a055b9a5397a5b93754e3d468eb699e046465741b9e520732e4374"), ("0eb557bccf2267bafb5713614dae91d0525d36f499a93dce805f939f8bc1379a", "0f56bae3c785b7786f6bacfa14ea502971ca0db0a711ece4b57d90e1ae892b55", "010cc2e682374308d55f14d029f339a2912e691e733122e2b97bbeca8dfefbfd", "10552222fd12e2234120510bb9b9c44d723451807e61839083a6cebdd7e5557f"), ("2c7bbbd3f97cc59d44c81d75d1e9419bea43389acf642674ac2fdeac7909ab87", "24e0fa0affe2670f051fc67c1bd9238838d26d326e972ff46ccfef95ebf252b3", "2e2b4a5e9e33e5f2657bf14574f5c8a17d53c6c3975215c3b83a3d7c051d23c3", "141b50a7b75604e8433d79e6b6b521ca2a9dfa8517173134386feb417c0a5a2c"), ("0cff90ef26fc5f11ea025c030dba5267e46eee553655efe2fe00b4a0006932a8", "1441209a65f6bc950de5bdf5b652ac9e05169d2c83455e175c50d4c3cb1df577", "0ea04541133ee2b4b5c926c874029a196b65e027d8598bff74c5bbe8ece84818", "0a79efdf5341e2293787010312866586856ba8de0f933da369464c98f7f0cc72"), ("0e5a241a5f4f3b458799651c3fe7fd8b091665352e231ad9ae24a55bda74ebf8", "1cab9e98aae8ae8b511729c7a4a6ebcc330648cc8cd3508f044d72536407a0d3", "04c4b38a0f59eb0bfa3c8837cd8f53b769f17370f224283a06151e6e4c0d8fd9", "17ce766913da19fb4cf239fca4cafeac0e2fc03d89a22cd47b9565197a4cb350"), ("1554124ec1ea5213e3d86e872f895378015e96b2f13ec42edc9d0052a84655ed", "0a5a2bcebd7b00b4d7c3fbe3ca030601ac45a967fef3627df116f20dee702bb4", "130d8dac5b0ff57f0555c7dfcb76de4473c5d3c4e13afd5401949a4c9817098b", "089466b84e6c92b713ff245bceb14ec8fe5590fb209f864f69f5d04dad861062"), ("158c9ef71cee5f74c9107e9eb92aaf8a0f368f33f6206695c081b5c735242e58", "1c3b08dd2675691812a2fdc18783f607ef09b254d4db8f32f08ac717b6d4548b", "123a3363685020032dfe6f90be67c1bf7b56de0e28d1639726bd5091b03391e4", "218c7a54b240f476b9f9a4e5adf4f7726a0f062456107f315d48e1ed4ff3d876"), ("03a6348535e7b6a3c11e169366bdbd2954949e33783780a748e7b229ffc7d8ff", "2c613f064f3668b33ecefaca3a8bd2978ffdc31bf43fbb96352576b50023a7e1", "2657fadf0e4df93aaebbc27befa7362a6adcc4d28c7c4fe650f1557ba8090d1d", "1d15ec350eea71954f8b4c7e13552306935050d47d2ec3d05fa1b91dcd39da72"), ("0a9cece6a37f5fdc037ce3c8df421fce05d3e201e14e73d12ceea63f87da69a3", "051a124da50fa2d4dff05e63969d27bc32a3c80c1ccd36dd8a6fc44b2135f2d4", "14ccd391d8c4a9cebec6a98f610e4cc2286761557a5d1fa66b72e7d80919447e", "23d7cfcf49b3bf59bda44a9e4bc3ad4b38e2af8f19ced6fe570fd6ec99e8fb3f"), ("2b3beb2a84d0c4c815a970ab6db9469fb5fa3517387ed8c2b62ee080522b1628", "159abd8176c3944a6e11fa72556b16236731dc909876d5bffee46d465a6310f0", "3014d75dd8223064399282df31db250c01d38c54a1ff94e9fe272e38510bb072", "0f1a468542a2d14f4a98015e6cea8fc6bb16bfe8aa0d1f28f3c1b93a711fa2d8"), ("261776b3f7de80851cf3b1e7da4e2a01164d5a9eceef0344f388276b4bab6076", "0973e8bc82a8dcdff20cb4dd623a8d8c34c575c9bc1f0844d03b4f801587f730", "096c564ff7587b9f48da42dd9614c036f2b2fb5bd9e8e5573f368501e17a8c21", "21870a8505b4814519319117febcdb6f2de3a0553ea4d33228a42a714bcf7e25"), ("0cf968776d99d4a8dfd581e43c81c9c28ebddc0aeaaa8bdebf0cb0bba1076a9f", "008e95de1d360694f744b80b2e7277dbe8ef9ebcf7bdf30828e9a05715504fab", "04bb5a5a1374d19c913e0fd6fea1015188e73431dd931430aa81dd38a3798741", "289d844485ab53660c60b5eb463bbae496123718a88d9477ff6664bb4da4205c"), ("0208c871b96a63749d21bdf37d09c8ec3654d9ee91857a4c131b7e12fec5f06d", "22099f01375d48f4f4576f61209fe8a91c47141eabd961735b35dcc54a340cea", "092ce9a2103ab82a533f1b47528ed3d540f41ad6e8fe81f8b98e0aefff4f11a7", "2ec95a45c36ab5a640c1be30cf65416338b351da3e327613d7307f4d88a70662"), ("05cf7efcaad60b4eab07e135100301ebaa8e96dbaf5f624634979c537507093b", "19b35b416a6ee9de019f066142d699bc6452013bc3863cc4821228fb87f958d8", "221b6fdc0c4a3efd3926ff35b2d275c6961a0d6c04a24b23293d8dc81c07b03d", "29495200050dcab131e32766f8c78c5a6e71a40be991001885f29efd7ecfc68d"), ("2a9941094e9caf2a399e77f8555386ad5baa360876a25224c169bdfba204d3fd", "2b5b95908824613154a63d0c5dd53835bd870613dd8856d71ae27045f5fe78ad", "2a92482bb580aabe1421f93193c7688185b9c590a7659df3a77164bed1d1ee42", "1bb3cd4e832573bde1a345b3bdc92b619f5e78ba41e087040b476afca980f421"), ("12c227aa6d93b09db6257f63d16b302af1fca83da347df9ee7570c6f9ed1f424", "1e9e481210e31f4458f57d87e51e6732b24253e43788861419e1d12d67fff1f3", "1da4a8e0da1c4f55ca94b93a7f468ce14d4d581d593c5ad01654d3d1eecf523a", "10b9af9272fdf5035d15ba4d9b1649d23a56eb9ca4060b40977876547bc8f1af"), ("2937f0e18542bf735946707f23f18f5739f4a66836592cdb8bdfeae9f5136f66", "1684d1fcae58c4fa23c1cde19f27320d25b483bea3d27f4d4cf9cedadc7f7cc9", "1af293ca6112797ffd68410c8453099c7360e520aed30f51462295a05443cff3", "2732cfddf183afafe57d044d9f1240391e50d2ec61664fcab35517acb304b434"), ("10d8c03270179d30a337e4abf62894ad25ec22f81f08fd4fc8a440d7c6c00aed", "10af4f5756d92a300fe1252f941fd3cbfe710e30d6609ef2cdd993f62d4d62f9", "2c338936c435d6bb34d9a91f3b82067120b8ed8f69289b7df15c925b6d2bf0c3", "092d78c45e4414ebeb0a0e52d0b51529f9e2bbd36bb8b50e474c80c10c3136ae"), ("25d79a3cdd351313dc5b593b91c8a6c322605b576a827ca45fc948fbbfd15162", "0113b630b7d1881ffdb2cbd7393f88def44403b53160cee9ed7570157d31f92d", "1cca41146ba38c9d6154899871601123bfaf5b68b52949d00d1786ff2d7ff3d5", "0577fe0335b771b4c919b255487235a6f0214a4ced90d656b42df7d513f70f97"), ("132f6c22a3d56f722a2a4ca9c5c82d8c9f8662119887fede7e62894fcfd12475", "12e61243b9d7ab6c6bf44f724153e5b9d6035bc2f86d0f21af68a5b75ba4b765", "2cb746e6122d82ec934d2a8d203722d11b3d255cb9549a43ec9c1eb2c89f284a", "2013d83bbf569fa485c325d97a55dc263f58e6c50948e8851def85b77b085772"), ("27fb6a19e7ed339e306591c0531ebe5c1ad98c8e9196140abb469a03234f0601", "2c6577410dc948fa55e85785091f247b7fc3e647603d21feb5fb23767620e970", "131a1ef40aff5d5c19e6b71103240d6603f6cf8e5c106881aa798cb2eb4d4401", "25ff8b07e67bd984c57af0e55611c44e283ecf8b89c5c93f49d0e769df781124"), ("038da07023f39c4234b02d72757866498df9b19206e54ea167aff8b2a7f3bbd2", "156323c99ecc101267f82242a1f4367b455f3d568d7a467496773a4aaefbb738", "134a0a89f0e295e2cba6da255e75645a209618f5461166f2d176df5ca73840bc", "2f4eb4ccb7a21e0659ff885de5b48a2be82246614f9d13d18b7c37e9f3004456"), ("233abe981df3f8529a0fc8d3a201259f2ba58bf011a83b85f3972e549075a30f", "0da85686786bc424483a18b9f49a34163e88d7462ca94265be8c867fba731f06", "00cfc95089129d58a9c711085b2c66a084b1126b7a14fc57dac93da231e130d0", "00db8282e8d1e1f75d7baf6de1fd35c8c22072696b485eb530009a001e0488d8"), ("24686e6a6c944573a62f4acf0a820152b9a9297f986130e9078d2b2b15df701a", "287661ff918418f9104bc2eb22ec6ae79de6da0854238a73727239f495381df7", "089af1b010200d152281ff599385a8d53c2ddcfec741451c3a1a9ea774ece1ad", "02b2517e1d655ad3a5d5a9f3dec2ccf530ba86e735292e875a643043a9f085fe"), ("0f955096a5f97898994a8bc34c220cd472a5cfa7ce24d88d8dc5c87452811059", "115565fe5906f2fe27b34dbb2c55e2ae32ffd4bc251d39b6d2b6b69fdc92a8c5", "1dcb7567f3ff951cee39f5661d60de6c47525a70ef3037b84382cc3d63f2c4ec", "02fd8b3da7ad4105b23c24f2853c7b4104088f02330967bc064ddc456a2f3073"), ("0bbbe8369562486002eb4905747617dc988f4c9ef513886bad37e35fb39a3f2c", "1577560a61a26f90b0066b9970d5637c68aa68e1b5f568d564bb862495b1e2fe", "063c652b3764b361527da15ae03cccad78ea880dbff9c800d8009f92b83ab771", "15443fb2d4c2b64acbe6cd10306b62cb97e10323ee6721afe24a15bb2fb0b78f"), ("2ab351e32e3e730a248846dc01c320a78b46e507b2d782518383e60d9756f5bf", "2ecc9ebc6eee4600981b876672d23410d7960409c2bf5e70f78e28b836e6a34c", "13b4edf67b6a4ce0f97930921256f9fb84f70b5993854b6a441873f001682499", "11daabef060b1d14f69ecaf4f1d7a7daafba4fdd39fc54ecbaddb86080c60810"), ("11bfbf39ac8e2efce3de154e98a9a7a98c880eb17c62f51e3ca4158f0568df63", "163ab6d64fe463cba1df5fcc227a7ba1a74f95534cce6b91d6dcfa4cb1da321c", "2f9a6bb7c931cb9bae052e12f6abec0289ff4052d4f86f44177e02eeb9ce34f7", "06593ae0dd2326b7189adbf56eeb4efa68746377adf0a3302aeb9edec35c271c"), ("0b4c082a5721a639210b050f18a2bd8d6cbec80e10f1a189e484d08ebda135c1", "1a6e7dc43c39373a67ef146bf72f6196345acf682f9d656354866bd0dd8c7635", "1b56037056607aeed5dd24ce249ad1f4ce48fd4edebb6f7c1b6544984c22d103", "0a75ac47a27716fe3738f1786bb4e220971cc24273a2bde08994d1ca5e79222e"), ("020a5101c0a53dd68c5cb4281895b66e30f3ad20c869d6ac8584aace0df4398b", "0137707c1c0d2e0b546f2520516d383943024da102f1e9c17625fbf5dd650c0e", "2685ed2206b3370e40b0e0a5a4ddc9b5ba95a879fd3f7ba9787a243878e33be4", "2a60a9b65c6a4dda54fd1cb64cc5a73276a129ee400b258e8402f437ce1245ca"), ("249e7b2e6e52a519906e35c3132e852767558973dce9d3b0b9424f0a43457b48", "2ab4f2cbd9aa94de632b717db190ebddddba9e80aa02049cb933d6e0c0f56e69", "0c3df3430872bc277f06e45331736658723288e8285e889ca0c23584d7b9d764", "2644de51eb78fb3dca11e84d23c4d5ee803bdae273840e90137ea3c823de4850"), ("20153417256b4402d38d9df5836258fc4b67cb23e12fabf7db9857b6013bea3c", "207282df09b63cea957a10fed00b7f3ad62527eb007138c25b959199a8168d90", "08c8ef9cb42e28936fb0e1b3813a0bf6ceecc48c27041475f3da782ae0073792", "1bc5f5e6661668e20252471a3db64e579b0e709521cc36ae83b0ea7763fde228"), ("108daaee805d2dc7ab8f7b057fd900bacb0793485dccf9ba2f8e4268ac47b01f", "20162360d0baa10d1a4225cf2f97f55d194f763c9f85af3f9644949b63b41c80", "13e4db2227bb6bd9d90be4f96f8e91ac909aa5512ad2b23a45488babf04fc039", "22117210565f33b6d5e51d499cbb2fabef68d59efff279ac9ac33607b08bb6b3"), ("07c55b70c19b98d6724d8e922bd25a051ad2ef9d43603643eceb45bcfdb14d4a", "0a36896f0f12cbb073b42781a0ff18c39f0c736530d88c033e00bcd119b1d074", "2e1adaa317b99034098bdc0063d71c19e93c78e9c38c36d0fa63c3dc68f6e584", "19b0b97b1f1b6bc8280401938fbcac41655bae58227479b17943390c50144deb"), ("0164c10e277511781dd82cdc2368b4e383f6236208c5a60feef74c393fa7ad72", "2619da13cb1b92878e932ba222fbdde5271854ad2bf2b0ff7f23f62073cad4cf", "20074a32d82a26655feea13fbf986bc217281ce9fee392d60692e059b5bc4f56", "05c9babb213bab78b401933c0d4d760bdf7750c090ce7f5d870d1e6d1a7d764c"), ("01c741d135564126fdc863ec6dc5843512bd74ddab6c0a7d10a721d5cfc5153f", "083a6a8ec9ee5c683fc92d363a358de65648f0db9738499738319dab1c9aee81", "26d34d6ca5123b58bdd9b075cb1d721a589f08e8df091596a13504c9f91e79d6", "2b9b13533727600e4243dba3abb53e9763c36571c8bd562f6548e24c6a5350dc"), ("0852dd8efa9485a89471b79e55fc73c0b9e0dd113b41497d46d21a6de1120de4", "1ac1c7e84f9528b048a89b6897a7146d1e2428fd944e4268222b7a0ee4a0428b", "2583ac294e35c82425da91a3f4607efc90cbb9d37a64aa39d94ac5d0bddbb2f6", "14fa75d6079dc46bfe687a6a818061d04ae274d66c38b1d9d7859327e8b5ce31"), ("24f4744de8b9f5c2bb929c239ae27003d30c8e2a676ff69503791e398e86a67f", "11fb02192536eb9e15a108d5abc63c67366bdbc1d1039409b2dbfb1592cef213", "24a9efb21d2cb237764658b7d2a4528726f3e0843dcc5b5b4a3035dfdd1645f7", "0fbd5b494f930fb864952a2fd010a665cdc4db199113549e9d65201200f0b6ab"), ("27454f4df63e43cbc637bf0b30b8dfd47768d36eca0174080433be1b784933b1", "2a3de371d6619c537b901682f48cb0544a0f18d72372607859ddf9bff026a66a", "231afc10f0700efaf8f19b18f9d30300601ebfbae0a340c47ecb471565e824b9", "2f45cba9991c864abd5923f0c45a33d585a20191355dd8c2243dc657191d1e86"), ("17b13a4d2038cd4fe3bd6e15d554532e34f2ec6a5c6713f124377e5c1313667d", "03e172e268981b68573a344cc70af047712288c5e53c5d4dc4bea851f56c3e3e", "121078826e429be0761fd90635c6107f0e98fd08fa08a539d19addfef225e80c", "16ef29566d06fc0fbe734f0237dea3c2f4594e26b85fe5f73a516cf6390ea331"), ("1a0402728f7dd7cb42c09ebb54504ef1ced4e7848e37775e7c874e9b284de569", "18b62105adc3fdab4b4351242b16c74327e53d002cf302427d8c4708121b85c4", "101d87df63cc9f4adc0ba0974cdc6a14eba8588795527064c73bac05c081df0c", "283efbf3b9b092702fbfbb812baf7e59c0b9c08632480136100ae71920ce4d7f"), ("02f2ba95eda900fa68cb81b4d4b44072ebeb16b17eefa695f56f500c97b23394", "15c4538a4a0c2c06f93ea62e4126c7c736e700d92892290c1a5e0b83d2d8bbb3", "1ea0fa2d5d9c76f74445841cfd33fc043fe09b557154a10ae84475f57e466beb", "09aaf926653dfccd18cfde3681770309fee4a45f03f12e5f59cdd203f146fabb"), ("1660aac27eafd2e645d70e329f4a8deb9a61bb3492afeabe39c1b7147f8a6cb5", "264ac3820578637a5186c8c3fd5fdaab129a488a6ea53c0ec025c45973a97d5d", "2d667e489ee22a86fb10e3a2a7781ae15db780f949632235e9463c2f919a364b", "2d918775303d07abdcc80c67b263e76d604aee540c72e5d53f0d331ec1370182"), ("2bd26d2edf705c123a11a59e23bece73e3e46315ef563a32081142d9b4bdb596", "15123f840412f078e8903c2cf1f38e7354dc2ae708e4c7604b788c6cac5cd373", "009566ff4f51ca7a5a21ac44c400c3e287463d0ac1aee126f6d1eb73337ad56c", "06f2fc8bef084c5d98237bf162bc5cdf93412b2a0c92dd124659aab2cf533c45"), ("1a05d3f74e0ffbc92877838ec78ead957d96fe8a1d5ba6eb2daa8311a51943d2", "12b9d9100de5c4565ee76fc130fe0c7e8610128bd1ca02a237018cccc01915b3", "1e7ef0d7e9ee0140ca4ee4304b68e30a4be1c4913a367c3cae4f073afd8f6acc", "01795e4061d820fddf630eb329116d3a1cf2409e0f1f55c93b165d7576153758"), ("1ed7a448de15b88588c2489709d4b61d4e784cdbe14796e922ddf6c3ff8336f1", "199b6abd41b75e23c365f94350583c6e9da846ede6037f592d601f48d534145b", "206513ad1af8c935a09acd553cbf6dc972c8567d34c64c66cb3ffa3497dd3da3", "05d12840c877cbef9c071b16662e0847e3a4ff1d54f15652e6373033054f2ba3"), ("0cc271f38f97e3c7360b7202e6cce605e3f32b976217fa40fc5067b67373ddc9", "3023383d6dc1fd1826cea36b65b759c160705dac039f86f7e7bbe04e1b98c7ad", "12da46f2f22c9dc79a4bda7561e73cf743b8689ad4cf21ee5e889ccb1db81958", "14c24d8f8e115ca05ecf15385e4dac8224e928b05216a7a917c901fe8345db1c"), ("0ca0b4ca34e7450918201104ca96b275f73e0b7f6bf70b8fbbfcfeb333530293", "0f1972ba873f50d9be6bdb634024ea107beef3b4fd589d1d2af023de76211804", "0b0ea774c220a7f7ee5594360cfeca78c2492eea2637dff7215dd055e146cc30", "02e312c170033db08a531f68ef44fb7993c47e2737d6ec3b8d366f7fc0c57b8f"), ("1f37c21ab778a54f169a0be17730fb33bbbfe2416d6fcc2b5dd9427dbe97cfc9", "07e30a52ed87bd5abc94804d8918085cf6aea37484a694ecada6caf9797a9438", "06b2fddba1ff939216928aa31b3d34a75a97cf3b3710b1f275f4b3f0445545ac", "01ccfa90cbcc6ce14275c4afed12e5be54188ec63522e10a99435ff6b6cb118c"), ("2ae3ebad0f51889ce03a80939c84eab93ee0cef972f4210fdf2965ba22702ffd", "0ae65d52f542cd9b6be45b9de2dbba5d5d56cca9c79ec6edec14526e295b332c", "1ce34171791ed7d46a0db975dbcd5fbae2f07e0b8d0b9d2e6ec1ea09b916fe14", "15a2886f7ccaf500c9349e580add5ae20edc85e4664f3a37873c8c1db61fde55"), ("0d385cebd334268662030ba614967cd309c7b808c532ce1ffffd525b746970c8", "1d368d21b7e04afafe9c0bac1a62a7015e7f7a1f0dceadc6f5013b65335b28ce", "08ce7b0b8b04370560ff43efe87f3ad11c382a6f36afc293549f88fe7eb9d5e5", "2e283a4a31bf3fb2001deb5da7cb6eb951d1c4beb189f189761b5eead4d82758"), ("02a1cd5b8196391c59fe3f4ae95e2076adcc392b199ce76b041b58287c2a376c", "13b451d74542195573b1d535d6c1d7719ffc30a2f82cbc37330f2fe850d95928", "30183e47797968039040cb2951003cf39e0da99eea85cf446e023057cb8691a3", "0b6319ef8176bcb182601d57a5725571164c800a0610dec02d2bbcaed72be16b"), ("2b14b2edd6228889a2147c7639f12581ff5c178979ffe478c1d7d3575a018d46", "140b84b6f844e688ababafd873dd0dae5ca993ba2fbcb1a4319d2673c84a08bd", "0848b6a998298fe27e967e06ec87d548f77c945214b50f5fe4c443ab10ea6fcb", "2ee3ef47d88d13b05801ce1548e9960f30b983fe1d9fb9e8b9fd7842916d32c8"), ("28dbfa1b7bb1db4557b988136350696a92dfdaa27359441d81db3f00852cdb23", "1ecb43d3990758e692664e9f176b513e4ba5e012b250461cebf6c7932a70ff70", "2aedeb720f4a7523712d89503995b1b94271bcc9f63848fb58d2d51ee40c4f5a", "1fd560eaf42907c00ad2628ca2b6a73cf47b9e12292551b1c7fc94e082be49d1"), ("01c1ab4b44a038e0499d30fc6fa022ca137e0f44b45dfa98f3c214f1b680bc46", "1da768323d91ac7273246db058989ccdf3f6ea2e5c4ee8326b2028b9a6f86904", "2feedeaf6202c368fd0a0e6a2698281f24edd5b0eec781988d946773e39ec10b", "1cb782ebfc8871df94ba362b2dbfffa694b510f7c2dab126c7b5c06410525d8b"), ("0cc478353a9f0f9de299e9e8a1068a3811ade948214962678dd35cf2d03bfd63", "012be8432552080f2ae3caaec52b5af3b1c2897d81946533f8b060bc032f8a74", "26be4a72c9ae098947c8d9f142c47f545305bbaa05bdb77434e05aeeb27d861c", "0f281e6bcd28ce5b78c358f173ddd6e8d7855fedc33d318659ad2f31e4aa1018"), ("00d28b8cbe991e498d77e03f560ad803558d7b82079efaeea23623f2c1394ad6", "1439519163da8854383d1259ad4e8ee12ab4820130c00c6cf61b7f9d42d426da", "080074e664dfb33951bb7560d8c9db92de18ddb15733280dbaeac0a8375f4c25", "0713502f8146b6def52c63fc3196236cc6eebf317c46c6c25889dc86c1384764"), ("06cfacff795a2c3f96757c038319572df7eacb0ee5917ef586df9a98399febbd", "02ab0b2662626e85e852343ab8d5bd89e22eaa9ee1b99ec0ed7a308e54318e5f", "15ee4766dfc26169544f89d142b899068019b2a3a6ea952e6eec8f25468bf718", "03c23943e136c12f13980e66983d538700a493425e1dcbfb4edec7411bef1d85"), ("136129d4fefed382c56aad7eab5ab759749152fde798f973c44c79eddcbe046b", "227fc87bc05881dfb72cad4252f4ceeabb0d1663d30ec2761c99947f10053fe4", "042be93ab4930a3e04cc7d9b115bd1c543b8d66dac4a6a0fdfecedd429f1f025", "13548023d448af7832e6c37ab9cba258165e603eec91282bd174a4d198beee45"), ("25e64eddadc5da9649affcd1f3c6513cd21980541b387ac48423838e41cf71c9", "172b41601bc3e466709596cf86427befae22a73fde14b48719d51d22ccb02ee1", "24649ef4a1214e1b25b4ff491338c219c9dba2714824c952a3761f8772c20059", "116895ad8674699b8f2555188cfacd9acf83f816a0338c2b4117e62242ba9834"), ("047c55a608ce985a6a59759adee223367af0060421e0742d1af112f79b03de71", "1b72a29b590f9a7ac6ecf86389e98849553bfff0829792e65445cbe13a73bbc0", "2456fd6baa14fdc6adccc61327ff81fd0b6101e10b04b24d308668afe45e113b", "27ca5d3e417cc8fe1500bee9796442a10f9ced35f8a1d4ffee0240e9923ea148"), ("1fa03a4bda2395d6480deb5ab41cc943006f4eb2cef7b165db2459a5ee80849b", "25f96dff4d54908710c14b6095f65dcadf075ab92b45a6b927eb1dd498a437c6", "1ac505aca927fdc03c4f424863ce9ebd9ca0272ec2d65bcb6b9ea989f4563bb6", "04a59724366260819e58992795336ffc3f0025404106515cb678bc5708568602"), ("0e65e6f8601ac9be67e7306dca5919f3337f7e8fce2f0b33ea406f1738adf3d3", "14131547dada2299e00db8ed951e6aefb17e08cc891b305b5d37c7999474b7ec", "20bf4d5bc46c265cc8e3848ef9b8f53216a455a198e6ecabe0b1056733724134", "1da720e0075d339738beba0c094ca69534fbba31d2dc27b9eee0b673936a6ddf"), ("1dc1847125861e583db6757abb6256cfb6b690a7354b669539537764e28e9b27", "2e2a3ddddcc9dbe775c812666100beabefcafb2bfb6994cfe116a8220c90c960", "0829c6d1ac7f5e57a9204cbaf0273b581c683dcf1d03750433ec28b4f4b81b8a", "054a95adaea26300469cc0136349d233bfbbf357da257a59bdf48b6fdfc423d6"), ("23d5ae79f0a865c2851802490337f85a816bc466b9ef51aff042148d2eab6213", "2a3274f38b2e662f5a18baff2907d0e73831b48aaf122ff056e48b14b0988a1b", "06c0e45f13da960d878fb52b2e8ffa408c4032f0f51355d5d9fee9d66043dd12", "21d2d54125b9dbd9d6a84766b5c9f5a63800655ce36bff6db98668170ca329a3"), ("23a268785d3c6a7d50bb168d275295d239b2f19ec3dab6a71bdaa06f47add8d2", "2bba17eef9d77d29b40727ba339654dce2c2131c55603efedb7b2c0491a91cab", "1d6e698355bf0c885a6ce8e0b3bedd37e01c9869c616951cfeb84d4b6c76571f", "03a5f42b1f520d16942c9eaabdc5e6075d329dab1362339ffa424551b5812e0e"), ("030e1a3bf12ea5f96865ab5800ec828ce338f35ca78975813a843622433e2d20", "0be05a8df56936f62fdede553c83ffb483cd4c629cc9a25d067f4cf235893016", "1b38e4c3b5c4ca4c323bb146b7f26bf4b8e18314a5cfff48d6883b0e18bdd316", "0c84fb6395d58c9d9bff4d731bb1c4ec8443e503229eeb5ae813785fdb597052"), ("01465500a064fb4fdfc80b23c17bdea6e733ece380db2c34111ade46c3401928", "2eadabe3072a7cc9c59fee56e73ebbd56a1881926e7ec3a0717516347709a289", "005e5020a47426f81697e04d5b1c3b8db00a2d27409be7be319eb9e71138311a", "1145ea86fb7aff8e3b5405a0eac16991fad958940dfb53dedf589cd88cca8251"), ("29515ae66fb43b890f3d90d898db36b34ce05677bb38f47e1000c71e4784a29d", "1312de213535b92210d56ac127f046eae3fac4fdef563efc928d09570566f69e", "03c22e2737eb296c06555d83a110e2a71c0afeaa12c00d1238260916541fe4d5", "1cd2f49881e3a2370a33338c4e04d3e33233d2bd5b1fa930e022520ef3afc9fa"), ("0ceb670928c588ff356fb0916ad347ecab6de26d7c7b76bff7a9fbcb1565754a", "1764f4612369609f2a1c264764622d2234d99912f531f4ca8cfc67b03757a292", "2c25e91412e887fae63e6b2317cbff5455e97075c8c9b5d9dbc967ecb4458cca", "065aa3537eaee90598ed301d3039a1aeeeb46679915bd9945fb53e741c547b33"), ("08f95d3af530b3ad33f455d2b7e927deea1e13d21e69ddea4324a7511b18b1be", "2078c042a172d146f0c201328fd96c600fd8edc1aa4174d4f43ac1f897b7517b", "2f706c13d48e5f037fe72aba1c74770968bbad5b1e1b7d419c89396f76ba130c", "1d01f3e6dbc746cc7bd7be5b2fc3f81c275faae22d099e7b7761dabbc423c406"), ("1b1e427732c5a9a03eaa68335874b11fab7fefd9798706e55a9744d25be24379", "270a30998015b2609a401f46dc0a2107605a90c398616ef737e6c973cb1232cc", "15a6e32c522fb44d16355c3cb63b5a5429838813b9f0e2f8de2c75bd82902c54", "275673f945c6e2649c6e1cc8f280075de97df60176c45f38f1fd9745dc2b7071"), ("12cb07ffe7c73c1857eec11b504188210dadb963d12f33e4ad624a1c2ffed755", "3014e659522c2fb7ce94c8aa14607cb90c03a9a7ba4e345399c90069bf11457c", "1a1ccbdd6460a83c7d5b4eb6c4236cb5d301ffd069ae82f65ec1e38eae260e8e", "01d4f205dfc94f360caaae714b32cd769f61ee72990e406fbdd8e5bfb111dd1d"), ("0c7e4733efee393e92f471543a44f3895c09af449408590ec3b2bda47d6b1476", "1a6335ebe01d100bda569432b4bcd20dc0a28f5fc63b97d99190195c6f5388ab", "0876e03c31e802db9149b30f83d3a81b7d35a12beff5ccc38678bba61ab10c42", "2ad455b393e34b783c0787130a82f1a087a4da51de38ac57d746693ea5e63951"), ("07e798133895decd9d9a2fe2261a6a7278dde5f4d83667aaa5a80dd6f843f4de", "2f53cf705c7cbeca1e9b7a6fae4de2c2efa8eaaf0a2b436547afc7411eaf8596", "04b285e90c438f5197e70132c903e7b63e11984fc2316caaedd0ea9db8e24685", "1b5b20bf1d9095f8d18ae4a4e50e47dcc57ef87f15299eeb41f02c517a6b8612"), ("1bcc76ffc20cff8dd56f58b1ff00c13772f9a685f5059629af4a0cb2d216de3b", "09232bc9a44ac20f5326f877f080d35704ab4d46e44e4f0fa78846d6fff61840", "131e6cdadf8b157d0c3a3436e59b80362773c4753831679f5442fdf70c8e1ecb", "0891f722210e944162693b8671cfe93e68d0849dde6be2ca1aa8e790c4c30831"), ("11be6ec83c8bdb958c5a4e17d268fba279d6afcd6366977142f9ce157009f971", "1a8a6846b0538fe7483226b041bf8ae9743b46ed35663bf8cc6435ae0a8aab4d", "0cc349ccf34ee223c586b725c735fea4d23cb678c56d1ade2adf6dbc0298b1f8", "2c627a7645407a51e18104017445aeff608880809a41643442168f4e25c2bff9"), ("259a33bd5459401ef915d144b54c1d621b473f92d997a85442949ee20c67fddc", "07a6b4578f80365a11edb6fd0707fe72d091511302a2afeb6bb89177e956906c", "302d2ea89b308d4c1e7cbe4cd3af3030b2bed122c63e8808c5ea1cacda3518e4", "066b04522788a53cf5ddf7b1b46a85b7a477606834ac79fdb1de2e66e455b6ec"), ("0b1b9c19d4eb7e8b4981d37a71ab2da5184f70be0540763a7e02565387f8b745", "2c42a85762b3d02dd439299e88a4a3109210812dca6ee96c925e0a6f05cdf247", "0617de3b6ad6910041ec4140d6dbcd6283d14f9f41daa6a79e30a51bafbb4688", "093e405f78eb28af8dca829da6829edc475d41df9e85dbb263d1054f2209db75"), ("044f81988edffd8fe5717fdec2e5a6afc31cd175804833dfd4784219dc7e333a", "237233fe3ecc6496ae7d9bfbaee91a324a07e46d51ce90b4352256d924591630", "185e7ee440c7ae7a06ecf56caffb6744f3188abcd7affd885244c9969625ff35", "0a7504a55bd5f9a5ee14bca63a0af69441ebf32e2203b9b0775aa7e214248dff"), ("2e1c678df3cb309e9a0cb26ea1d6b1a925fb4beb6174b6d5c6345a8cc2b91b32", "2c2237fa88af37aa2069da538f2f0c878e50e13e065af1c0e10e02df2eadee9e", "238cd100a3223a887dc88884a7d6691f25ef640cbbd0b731e72e36875e9bc3d1", "1e0d145c6e3e785495ad2e15ce0b32cb772fb03e472bd043699811182cde6093"), ("129a70117b84897e9b34cc635b5f12d973af4eb5b9b1da6384cf4636e9d588b1", "2b3130cb2ff687c87807f962488ed28d927959ec5a2fb29adb4cc30205d320e5", "1a3fb1d987cde2d04c2f711e7da2ca3337bb31c8f5f2f5b5a7230030a264c43d", "0b67af335590d5c1722b6ccd8403879ba96e95425bd04e4db1fce63e7f22e5e8"), ("1353321a5dfa50e0a264579634c35713cebea84da3a11a9eeef0721628e68d7c", "2c19691ed74dff244a777125c84ad4512f941a78ecd3cd986a8cc35a1e454410", "2ff6af5cfab4fc73bfe98d91c329974cac2dbe084d704bc1e18620d3f2421618", "26e601b1ed115ccff3be3ced0b25621517914be95c1282df945ad91110582028"), ("0f5e4f010359758388dca7aac367f320cbd425adfbfaa87369207680cf7fc839", "0bebb713d8a444db48aa2ba72543fb94b4a977b3b5c57b07ca256156e8f992d4", "0138c0f63fc72fcf1352c71008e2fbe424cde405ae7725a7702a91fef5936216", "03ccf33439cd4ce64a7875d30e8abac1c61b01dbc32b5e9d2a124f514583aa65"), ("109da02a58c93696fc10eec0a975cdfd0f1897a610b23f8dac889c6dcf8552a4", "1b37b1e431d7a06dfcfddabb9539824fce54aa84dd0a557d1c433f177c188310", "1c7bb71c39f31b09366b342aedb0bf3d405d15febef783989032701ff22dcf16", "21d07487b5cab6ae8f0656dd8eb7c9e69fa4f84526695aa3fa38d0939760c2ce"), ("0902be6494105388b1b723638dcfe2bd1c13a73785564ebc399a80bee4b26ee0", "0a8186e74105346919e1361ba0998489629818d97b8751aaebbdd2de334abbd9", "0cbc6576e3e24de3ace7a60ec0a8ab38e399a4a6cb045edbfb70773dad914efc", "09ec9bbcf8ffb194584a6bce227c1d19d0b93acd84a18eb7410be61b77f0dee6"), ("037ed21c5d40b398b64c62bb3bba8ef56b21de53abf5ecb0da87c15e4afc301c", "0e104a19b4374b3d187b93f3457f46da1cb9fa7b70044c53c403f6155511fe73", "2fbca9f0ed43c5a2443e5bc34b8e0dcab8c7b6df3ac4cf5b951dea051837901d", "2c370a94c92ef79902321263fc21e56e9090bfee075564663f0570525ad481b4"), ("09abbeb66b1288ef6931a68c24ce5b7fd8a157d7448f48de30ea20c7eb7acd44", "0958879480b9244625b4011a352c5a37a984e3641cbeb863dec4059d05f0665b", "2cf41b953ece79bdf262ba2debe4213e028b57110980cb315d841aad84f1208f", "0662dc52a830c55cbdb54486e8d44183c525746b25b102970acea90ab2b987ed"), ("18a00fc9f66f96e6a96d8a133fe1c9154c05cae9774d367b7c0f791c45c2338b", "1ea0aa4cf391cc68ddc0b7a992915900d465c9a94fd5f47bd74e52f0ec05122d", "2c78e4d37b15881cc13239229cc728942465caff791d2e0110d4a0fb59da3622", "1fe2fab18e4ac8848045a3ffe7050fdd517b6568347f6ec3c917d100502edbe0"), ("138929a550b5a4aee826488f39770791fd07cc72b1a476db63576f8e23b17825", "040a77ec510115467a97f8330d77fbb6586e71b66e2245be6485dee73fa5be77", "2d7d3ed4ee1c8b68b65af0005c6fe30c314bfdda98f1a4a3a593c07fc30a779d", "0161ddb8d3c9fd3710bbec2ac6f0d350766edd7088b14b647e5499d967c56f7b"), ("2829d02bc875d45fd3d9b8177ff68d6f1bde44691476d2cb4917cc62d628deb1", "271ffca3eacf37b9babba8dba053c0de3344181ef12b39293d864e47c82cc52d", "2bcb0624f0bf9d4f76d2b3f576d1f87ce193fb0dd99470139cd1af09b55dd466", "26c7466e004030dd0bea7b6b429f4282d1be0f30b08d56d507b9e06636d67f5b"), ("00072fe72b846cb3a3697dda4b9b7467e6436bed41b6cf3d4f87415244fdfd96", "019a65ff4e91257b2588ae9854df9022900a1af5347fab9dca848135b5bd340a", "2c4b6d885b4b72ef80b3e241efddb528680a24aa6c58d3be8b19423e5f09987c", "25d19c3142ea40138ed6280febad6757781ae6eaf53186f795275f1548302075"), ("0aa300825c83cd51465e3c480cdd7ef1df4df219562ded2ac13ce72c00a96323", "11c49b18d53237b5da0a7625fc66fd80f64aa041a84da8a9532879bbf9d15943", "088fcb4d8a4bf5a323178a6fddf2d3812238e86368ad5351b9b25061d8ad8e08", "23844a82bea70757885e681edbc0771248d66307837e0f700af7b3884c2138b7"), ("0977770336964af3ae246d4895e04eafd113ccae32808027586b004bba53f7f8", "0e9fe8df8b95154b7d0d61d3617006fd771bb427d2a8783d6c66212887903760", "142e3f055c4b0026187f2e65ce32c4d160c105f314549b63c148e247cd9f347e", "0a7752dfc7f8d85938df967cffebb6189882a738ea116a855f0a381d6f6dcf5a"), ("0abc70f9f5ded20cfece4bda79633a557c55f04a59827ae839fef2ef1c54922d", "291b300fd4770b491ccf1945ba4f01f94996a6e5973dbcf5f2fbc956fe2c0025", "2c20c9b3334eb729194d24c26e5e73af14384b894bc36063eca4e8e6c8cd835d", "1becc873b85a95c12231b4ea7ae7e85c279d773e2917b93c11ef59b620982038"), ("20e608433febadf99ee9d4ac24cf428e6b2df645146ca23bc843c2f6167ce73c", "2edee076c6dbf6d79bd2a2eb3766a91abe06d649ee57fae22f4d4c73ce832c0c", "156847e0b07e59e9068a6681ae2da07d4c4c5947461af96b382434560cae6f56", "0c23753c8fa18331d111777f2620c88032304d05bc9dc612520ce4e6682f8db3"), ("05652877f88aea60c86dde2fab362eb830191f730c217c1e008ce4e12e79ec61", "244e4b4b8b29dbc166d4a38054ddfcd85886bfde5bd0163ee57eff6b76035b27", "1cd4b58aad1021e837efe5e7ff315f6475725a7104968275615e36d462700331", "2df5e712d7bdc2980b0eb6d7ba39b0cbb0bce3227254bdb19bc797fdf7aaf2e7"), ("0c4053f0602ba13ccc9488b0fffe5addc7ceb93aedd5abd06d1b638a7136512e", "253ff6ceacaf65a76848f2b5e85fa3c7273b5062a0f8dd67aa425a92dcd0eba5", "2ccae4a147e4a7bbce15c75dba5054843c3ece6b5067c8db2014bcdd06fd834f", "28906fb27580342259af4843bbdd6ee683b3f614be50aa5a6cb53a6a9c7a2db1"), ("211b2ad9f744704022530f62af3222b1baf494108a4094f097a7f8bfb1a5d954", "1392ddc5c662811de9fd408e1db883a576e20f53ee133c93d092256281cf3ef7", "1f3c1b298dd6b7076b9c94c2693702a70ca7ff6b64109dc0347280d6c8590a63", "1a3a172120fb7478816c45dae07e13552d1bb9772bc4eeb3e08de309658aa241"), ("15aa3aca6829e9705fef9755db561131d815d662dd38667d1d956842ede872ec", "0776db4080161047f079928b216100353a9dfbd20de7f6f9080b60b0fe72025a", "1ded9b4c2c46b5d1756e08c7f0beb8648f983a395d1fe322ab15d3cd157ca7e4", "237210ef557ad507f59ee316e9a181b9589f015d960b1f64ec104e39f5cf6237"), ("003f09fc78ccdd77babd7cd4c82f734d3f5cb8f1f8d9c4a83a7d92d3a300bf70", "1e1cd32ec4b686cb5e070ee191d05a8ff48a96c9fe68d0e8e2557c8dae251460", "01b4af057a056cd95082bd64b1d199d86a60cc5968035ac7f721dc4075b9c902", "027ce59ef9f209580db4991553d6b868dfdda97ce119d1decc89418c99995d24"), ("133b338b7a56c407157d3bd46e3e27eabe884fd54133de6abb7177775ed9f957", "237f721c917c48613adc2b0fca0bc4b03a34af27d7208c6723b9eb818ca3f1d3", "1c78e9cece23afb4853afb67566d9ac14f64815713c31e8f8193fe2813d999b5", "026861eb9512cb659aaa2e4788ef789a07e6f26b0c7cbd010e518a1cf737e5e0"), ("2b8b59db7a6161965cf781b3048172680918819ac0d3c2e9b8898e3195d0c683", "14a5c0e7e45cc25b01ac2e8acedd2931ff09ac99fca3948bf049dec3daf2fe6d", "2d6682cbc20665c0165cfcbcf53102ab02629207a2c10db002b8018b1b7160e9", "2be1884ffa6495592bb9c896fc1e9892bc745dadff2888833b31a07e0ee10082"), ("0071d2fcdc6ccea0234d06926f7d1cd401b84678f8bf8f728561a1efca53f4e1", "0f28ecb6526a905a3d95b3ad1452ca362d7ad1c0c3ba578894f383acd3e7c85f", "1019326142c8310d519d31929f663864ac7a57772ebd98676900415ae606f5e5", "0bd2b1b67d226dc71cbeb97ba9e27aa8c23cf2583c6a066b8dda377c29beb902"), ("271eda639a4abb64788038804916673b6a703bf52e75e260f05a2d6f93c7e21e", "29a69c9de8b0e8a43cda457f1e93fa61aff0f1af99e55cec7a0777093fd4c244", "2c473633dcdf4d45b0a28605188110581591f548d78811cf95372caa061317db", "25a4f1ae375682024b9cd6d31aeb7b7dad58380c226cb647d820198ab5b9f907"), ("059cc6a3fdcbc892dd72370e7e98bf1e3d046db35624163a259efa0cb14cc852", "0c94afd93225e4105b08fc6750e3fb0283bb44ad90ebd8f51a1d78640afa4997", "252043dd5af62e7436ed602692907f20eff3f7338359eaae88617d4dc030ed1a", "14728fbb60abb177ff9eb9d3a7d6dad8ea6322bb536557a9d359392e9e42dc76"), ("0b88e66da04c8b7e0c774fa31b34279d25ae46df924d06eeeccf3ea87a4e7069", "18d76ceef7b5d0e1f235c80a369b59aae71f56df156fa97368ab1af9bc705754", "1a3a74c6528bcdbb33c9b4b0562ee3d11672fe7a2f0209a318e971f849461e88", "16fec2936613db32f98159e8b925679d74bce165ecc521e6da11246e84577ade"), ("006da6a5604eb0af1985a05ca1135a484ead02f3bda04b3e1816d97d4c6d1f11", "0bf70237d75b388c07b86a7e21a768f377f56c44ea292cfbe5e4af9c9b0d7edd", "0774302ec49c3f13610f99a1f55ff825aa999b9214473387b35b9f668357dc48", "0f901cab1a67a7da246b0ea203fa3928f369bdde703385ea48a6929abca8f28d"), ("08f2e216b5241ad12c1699ab901d7f2cf7439fcd48eb6285c42389f575ad7f0f", "2eb710fd2da902b929c4d069bb6c3ffcb340956fbe32dab5e9195b58fe8c7468", "24904503053eef6a5da7c13741b2dc459cd7aef7011c0c40909af8c995154531", "2c78bc73093d21c6da09ef7ab9987b57c495441aab2dd3ba05aaa3b742f85166"), ("0499cc0d3672e418aeffe32140c64ae9b8526119cc1484dde2b2edc9461e99f9", "283d70c9e5d07718118afed877a5f113176aff47afd5189e9d9258ca1e3796b5", "033dd40cccf78ded6d7ed4de0bc82d9ceb2af632a487d036e5aa52c21d260df4", "21b302a1909c4e1fb275e35440fbbdf9e3bece2888a327361ca4c5116fec615e"), ("23fe6fa169e6c7c2e635ec17302ba6502a94ab6d5f74ab026889fed5f32bfba2", "179f81abcab48c668dca1bf74ff233650ebafc4535235d725252e1f8ded890bb", "0466f032b05e02b35218dafefd775962c3dbd8aa8fdb48a4b1232d0b2c3d9c79", "2304595238f2ca0172f746cd3565ea1c9fc2585cc2b99c9bf38d7c816648b56d"), ("18e4b3efcac1a1d780e726365281e69309d863dc2cdbb56e734e38a7460c994a", "1eaeb06f5b5ea0bd4a7194bcbadff6a6086d8c04ce7ffc601d18ff1946a70d83", "13e47ec6471649f5789f4a3d2ab6d75b91e4ed4de1fa0bd788d9e729c20ce194", "1e5cdf42dd7444a20a598b18ece84692090f34d2d888a887dfea9a3bac90fefd"), ("27c732767bcd45b35ca8d7b1568d5030952cc68eda4e153b603217cb85705cf9", "200ddcd2ba9f771a3b810a15e60260bac164d9bd7a1677671d89b68116773c0b", "15570afbc1b27ce83822cf8abbf87d600cf065e90ff0125de7ba393ad639055a", "2b658d339ab054fd8f4f92d0aa515f6fbf0e4814cb7aae4a913f87c192ef8df5"), ("0db248f74dfdf7b703193fc1f3f2961c30d1e7aa8bd185e9e9759f022cc27f44", "2395e207cf31b32533e82f3c8285222c046c369a0f78dea8685cc136e4034d67", "0c7c4313a7af611202a0eed628a70f243b7d9a9405fa70b71152ed6f9174c1f2", "1882def2dca28595a399618874680c997e797f9a440fd5d5c82d9af86c2677a9"), ("2cf6ab4ff20c7d721523e468e0e6806d3dac483188017dcabbb86796a8d9dc4e", "1dd12b695dc815feafff1d67a5085df0b644ca792fce15b0c2d824dca5dabd41", "29d4ff0d0ea61bfc1badefaa3645c2f6484acb72bd090f94d2e4ef5f8eb5c03b", "1d53cbc6038bc41e1cf2394d8af61108e407cd06ab5ba7c5043fea48a00a3820"), ("2e6381bed815ed110bc85abee052a9ecbe167e356b0b16ff040d34809e970eb4", "2367f5db3669fd9a651a66d6ca871c374ba9351c8c44742df883cf3c6af73bd1", "09f7b1e85d88887081adf716e907e81bec02d959ee318b3a7990bc0a3fca0175", "072f3d3db4fd2bc821d1cfb2bc3eaa705cfaf80b7fc1ac411f0b30b6643d812d"), ("2ebdec3efda795e7b7602efb8ba91d9284dc18f803c529507f0f899a29e79336", "1246e459904619d70373c09974afc88106bd35a92279e0e0318c16bea40f05a9", "0e071a8053500f7d3670b02001e36bdab851be71c721b6b8f175f30390907835", "0bf5d1950e9ba550b399673727deb2f6cd2a95509f3161042f35d16fc362ccd7"), ("11493dc62e4c1e50a47268bc6c96f4bf9af0e95940262f1e8e9443a6d7c6c327", "2d7512bcc979644b7255a7a4228f43f6a60df626d79dc0b75b373032bbe5c0d1", "2ee94b86ac5a8b2b1120e2a70e34198d5728939f04412b7557a459d1a1111499", "2c07e8b13351cb366da1a5cd9cc126c3e3838cbbc97ab86cc58102f94bab84bd"), ("194f378fba509b14ab0d3e64a9c4489b45701a87ac3b82f468af99b0b38ee8d7", "25f66315277d71629bf482752358624182d816c7778f8474117240c927e4fe80", "184b00ada3dc81e27e6efdec1f2bd89a9974e4592cfc210d594bdccc393e0f51", "1a5d1363f6f28d730a273bf75b5ea0ae9aa3912de64bd259080df0135e66e2bc"), ("0af9e9a06bf7aab910149bff670bfc04492610864f15efb3f52948b6a8cb76e5", "1a7ef1af0f2ec8f52804ce2967c18baf587f27d57315aa6b56f0e96c62f456de", "2c763fe2d5a967a5bae68390774180837ba6f6ab93fb30bf2f70b46ffe661723", "2fba473c8b76d55a1bcf8928041eec17b53a574525bec538ca3ec7ca28de6790"), ("0bad36b6b58238ad403eaa0d724f472ae9ee5f10e80f3aa1a6979de71392f2a2", "12261d2490200c3cc300c8db647c8c568a4c19947a612ca770ee4ee1bcc6968e", "1ee5cc5c36d2c5fca13cc03f7eee02e8bcde22dda34aa97c7daf81a43fa8da35", "2bd6aaad71a6d648bff80e670a8ef2eb1349db2bce4056477143daea8864323f"), ("09badf9e49c09d2da7a8ed3aeace58d1af6e53afc0fa61a080b857ce35a60344", "097c75ce437b2b7219ebd6c91a3dfda444aef00e6ef0e29db3e4988a7b5cfd0e", "27e68f2c338ec74567652ef29c21c9935cfa36d82e845c3a3a90b68d3e2184a7", "176182cf258fb7d2be9489357537a246cb1b6c37b5e62150939e7e3347f76472"), ("2cc6dc9889cfcbedc24956546fa2a20eab703008549f55039ee4e57bb2c480b9", "2909232f136eb8001f6069fc9ec0e26ab37fe62a71f2c364f8d2fa70eeb917a3", "03ae42dcc388a456271ab707c0a5093535604d514c6e708ec90dedf2cf986df6", "07bca03b3733385c351e1f77b16b38542cc68cae471bd184177445f3d8642975"), ("1c5a2360a9dcfe840e7de67fe3eb3e582feaae575ed75b7d94bc56727b2432a4", "27a28f6e772d3b153895741c76b32aef55b5e1a9e4e68395f374e1688fdfe889", "276b3b506ffb04ba3d44600cfae2bbdb7f624fb1e80393f0a4d39be8a308b8f5", "043e5bbefd3e1a3fc426c999c07cdeadb5d788b62709c5c47675ffeced4c7175"), ("1e6e95517f8e34fe923031140086f977d8d9f05f21d2e32bd3424610931fb122", "29efdbcf7f456033720723cdd9ad0c4c78c9645629d9268ccf6a1b42b020f103", "07d90904cb94950bb7c27cf8eece1e8a5c5bc961479294cbbac69b7bb26d9487", "1c598282ebf398144dc82b4e7796330ae7a04a9366250e687a0dd8f9aab27784"), ("0ce31b56558fdd110c60c6915133f9e60131b2e2214b6feb011916ac7ba0399d", "0bd6744e0909261a7598e4d3cb3f1b98289883e1c1497e06172b4884710faca4", "1288f24e1fe1683adf0ab9957b3e0a53a5e54ee33f26bdaa0c31fc20decd0586", "195984964a8608026cc1629327889823367dd66f8326c2da8fe60fe204181f29"), ("08b602c7ca5620aa2ab7962106a54132f9214d151a5265ef7b4690b8d38ab593", "2eb71af16e1eb92f48d14f5b223b6647caa78645200ecfb48ccca1e7caa2edac", "0173b0d08727aba1d8fbb42afe79e5691eccb1b35e09b222dd865ee1715c9f6b", "0819183752c0bd59d97da94da824e55a2f420ba3aac6af87aa97010decfd1198"), ("004362739aa8fad4946854daa7024267ad260c23a0eda2aacc527da1533699f6", "0ede3f6cd73266fd9d0ecba0f73ba0745474126ad1e2c194f99c3f46af40520b", "164a67b8796709aa3f8e61242fcf9ad8fa3e17f2d65ce0cca9c86282d82f7bed", "2359353850a6cb9f33a1a016b76c49fcdaa6da8b7a947f324fa79ce6034a74ee"), ("087316c7de99a9b65d009d2ead20121a52a170febf6d5ddaf241679c63ef0fb8", "1dc00280aecb4ba5981886f08a76b48149fa41565781f96ec38f7a8b37b70b3a", "0e9ea3822bb45a71adb3d270f023e63e34f3fd8a74d351dee52a852823e69e11", "0a92f05c07934c2020fc63cd5df8ff6e3a66242fddd8657605ef149cd69bcca0"), ("24d3db83967db5c84d66093e2a38a13d9ede5b5f80eb2bfe54b812024fdef1c9", "28167186d612c5dabfb7b1597da1a9d7b9e358d6bfaa95afb90e14057edb74a9", "19a2b0d640540b0336ad1b005773a6e094569b69d3bd3c9a541ad5d3ac208b40", "269da64ec85610a66ed2ce69b5abee74dda7c60d9c7db24dee6f67ecdc0bcf65"), ("20cd2ab0e9419b186e73b862cffc266bfe0f566783a163ba2ec758a163f91c5e", "1642a230e0e84a964f212cf9d530008dbe6e4f4cab743e8ecbec0c87fea51b53", "162a7f33a54b57ad19c1a9612944bae79d467a8036b31e1966c84ab5a6e24716", "29e099b8959e3d5364a7e5d714f09c8aaec23a53088c333c88ad9283532b4d89"), ("2d15b30f2e2d5da157d42668e95c16d6254eb94c80e33c1cc8e64a18c45e68e0", "1a6763e8d50e3e74db0c57f9a6bc227343c3f03c0c6de35abfce6aff4ffc34cb", "0baf7dfcc88d2c998be986d48bf166cd50925f41de51c3a07c851d00952da206", "25445cd36a55a8f5104c0247a985a5e8bc2163e20988637b5b379bf1646cbd51"), ("0423dec79f2fa90f96f6113c5a6585a6960681a8627a4923273dc1c2a6fc9e74", "03404744fbd17641d738c15be201f3bb57c92fd2519509ff028954d3d364a98e", "2074baeb073318143dfcfb616813c4d3ebc8bded171b1bcb821d05dea575d3f8", "07a61ea130da2dfaae40ec0c2aa299c7290d01f3af398e8c81083f4068b1f689"), ("2f58c3cfb2be62dff2e5c97defa1bbf5afb61f3751f000cbfd3c0740fff44503", "277124dda18f4a055383728fede27a083b10cc470ba8d154aab5d60e18af91d1", "06f52187ae4f51fc0ae39344e98b57f584242119a48bb17167be984ade4c4eef", "22c8f9fad21b9b45c23ce418c41994a13952e3a674cef5e7b200e799926587e7"), ("04a5e5775dbfc87fbd0d7a5c82bd7362e6d6d43fd202be6317e9081d28b579d3", "2df7052c77081694b4ffb66270e40a56843be23c1cab0f8298badea2148e3193", "1abc4904a0d2c204c4d352c8d027f129e00c481cdc97c6f02239c867373a7751", "1a0914e20c260aef39689a84db0510f91c3fd0c75704cad5142b5febb7eca607"), ("150138abfe76b26779318c88e4d05d888f634705b7aa927008edd3973410c98b", "23700d95ad11e0ec3227a40c52a52f44dd6c39d486b714362b5bcaa9f9fb8c30", "13354ae0f3141a9a4201dc407f477437f8591fa8f77705b9aaf28736122a7bbd", "1cda851277eb010dadefadb015242d11d59f1488cb6a2556591b591a3ed4b041"), ("06447d0f699c6a22db0b703cb7707f97705644af627d6bb05e91fc2ddb0cfd54", "0b165448c0054090d8172bc4a56b1c7eb9f88cd2253c483600c02333c0098986", "090146c0aeb701076ef74af4d0ecf21824077eb3d36000dc74e2dc387cc20c79", "2dd69d789e15a9d3309b28b6ae8a4a549f30326474d693b0c2478730cbfbb693"), ("05d57f03826e81c5c2af857e28b784db7f999f1a312ac51ffa9cb374637e8338", "15202dee4f9552f148be4d49bfbd28c03bc58a47b7016624d3208fdd6d07234a", "093dca3408533b781f1754aa4db1fcc5bac5f5ebe9a62da5a336d6bc7e8bfe00", "0629ca2d80db4137306879412b5d6690e5406e3060952694fadc8ad420e24df6"), ("0f45a9fad58fe276112361d225328ec9b88689803d11a9fb531f05cb73a1e597", "159e9b0ad500220760e8117c965aa320b4a0e0c7e566096413d5ba5518ff78ec", "1c7419f6e06035c5ce5282d948d7be1ec2e5daef0cf4c2eda88530250b7fc020", "0882477b5bea298b4e6cf1fb4bc6b2d058482b380a3208d2ef55af7e292db957"), ("2dd4f53eb2d2b5d1d924f3d4988fb8339bb80fc90e37106ba881bd3f7764bb92", "24957dfe824e27ca11bde878373705cc60091f89e303c32132c6d80516633b90", "2867e66eb9b9dc43b96a354fe40782d0ea7bc3dabbf23cc9c0bb0cb2c25cbd90", "1f9751ee9f566e5b06093b2073778c5f1299c78d6c53ef91af710a3d7bb140c7"), ("2143f7b460e4a59998bd9108330e9f8d55c1997c8bc3a14ff97b94cced47358b", "2465e092f79e4e39c62a96c8b793b65fdec08d317a2ad0615fe2d4e43f833834", "2534b8d7730dc4c1214c99f5f8bd79178deaaf6df46dfddf7a67e293e2ad6532", "1dead0df9e79dfff2eebfe52eeae4ce4863b33197ebcf2ed8ba2a2033d60038c"), ("0cb0186d6a3cff8cb373a00f5b0bdc0b5e886ebe03ec595e08023310a9cc6e0e", "242ab96ee5cd297acb83f969a9ac674acb9a3027cef7228e45b204a6cf8ebbc1", "288afda13e7c8525b4be1e6167b68e1fd383cb84567682cf779ab788e54b2e7f", "1b5beb7ad1d71c06b4175939d341068aedc038f30d143b4f01c85ad39cfecff4"), ("1c7646cd1276928f9f9d8a72bb5d3d0a0c8a0a93004edbecc74d4d755d63f761", "097c7e2d9b846aa3b0422f0c5073f62c3cc7729ec9f90f34e5143aec0cfe879d", "066320846410c742bb3726bbbeb988a8c8efe56e8cf2676346781cc2013d7bb1", "2573e80072247437c6bec8a95b07446b84448dc7dacc758cdc4cc728139677c4"), ("2ea71130ec2748a7282877c8f35762cfa54024e4057468d7472e8d65adfcf8d4", "07202ddc95d544fdffa10eeb7217820d0c2b42ed92655c381c6b2db0b9baa876", "2ca869f5527f18aa0a6e85b1830706e93de7c5d803d12ef89d1c91d7c3aacff0", "1f8c8f2b81f22edc546b448abdcc673984793dbe07590c91c6f1f5ed12ede731"), ("1353932d9d65ec810187befca7d0ba3f6b53442749d8bf6e9c33cfddb1ce6d37", "25b61709df25217b431bbc62f1096cdbac592f571567e51e2582ada4474b0fef", "0c3ef15cf3fe777835889a9b9126bf045e06ee88d107bed7d1a7b56dfd308673", "0258e31ad61a681b42b1aaa69eab8b41cff1fcac009871d160fb0533d40b5580"), ("2cddbe0610fc02ab4acd9339a9268f2e3e71788ba95df3ae0d70b8ebd0604368", "263595cfec1f71203a7bb00dbe8b015b7afa358995ab5709b8312ffa8ef7464a", "2af98abde9f63d3eadf50076f02f69cb317d868413407e5f1eca3a776609fbf5", "2f6a9e161822636a02ee7030b24bd08e5b2343a1de43e98d1dcdf74125206c58"), ("2c3367b3b575dbe8524fbf94bc7fc53b6048ea0edc295b0073497070643a276e", "056c083d9f7d0c6f81dd77c66e254428ca70ed726622596d158425c7c085ef18", "1b7b28bcf3bfee9a8f1ff7f4c2ba14a8a6b6b7404eec6c73aaa4802f28aaa7fd", "105d058c67dfa394f0add43801e6470129b342e64d74a32e886a31fafa6ceeb6"), ("178f80f62fd6c6d90b04ae0e9c6172539cda3332b1a1e4dac05951f2ca3bb670", "18ce129ea177a70ae7e75658620f85f025e0850affa102bae0e83d442af9f3b7", "24248f56b719d55874b562262bbf3d46f1fc5ae4f2be12a4e25061fe5d5bfbe4", "0abdf3d216166bbedd9fe57e3998a02bba38d734c16def2d51d20633283cf93a"), ("060e4fca1e6d048fe2525150a85336735f3ad00aa35f792d21d6cec78acf2ac7", "2d35d1acd793237a270e998668dc23072d3b0fc4ac7418aa92b333319d86b128", "18a9757a03bfa5803dde930ca1d09c1a920d152d2067b6953ac9192e70001cb0", "0ca4a124af6e8c8ca330be82439212eca2247c73a44599edc05d15983263c22d"), ("0cc2547e220366356677931355c23ba4e942ef95f3616d347538f1595e87bbde", "14d5e736dde04124cac37bd37a98e86c7904d024cd46edd2154c4b03a8c15434", "013b63aac5ed029f8aa071445b0db725da2dd50855767b3663d648738b429ca8", "16eb98ddf5e3c2d427ad7f740d46287889105fb7b38fa774029af0323503577a"), ("0b42ed36792d053c3d97754af544bc8c3ff2de88376a265d4c039b11f3398460", "03e3c160c46f7dcb1e7d26994a8e8eb9db0b909711f73da3420b4d24ee288a01", "20a660883e46b5a019bb5f2ae89d13f460400dd1758cb3ce89532b638e02b193", "201d58213b8f44c011f9e9423cdc620b7eca82095cb3cb1269cdd4e99d6f0e60"), ("1319df47a6153728fa9785bd1c4f1ea2e53121acfb13509b742c81bb0d78b00b", "06fe256a5bbf02ccc5630b5c9567b3cbece7dba5a091f80463ef4462d2a57d90", "13a9cd2152a944f95cafec957b9a992a47d85bd6d35d0f8816b5e66b22abfca5", "0e9b9b3b5aaef2e00e14348fb5dd3363d6e6d97cde099ffa970ba3ae4f3f2b28"), ("232e84ac394feca40c1ae85c4ff5a4bf335df7b0d2cf21526856858ecf2bbf76", "301b9ee0255cd3a4f2f8778b88186ebd0b0dcb3c570ed76a434ec49447c1843d", "099f8c8429f9f369869df29b069f09f6ccc676f8a89041ef91e6810a454070ea", "055da4946b75d1bef701d101e1f2a87ea16383e4eb608e173b6b24813eef9696"), ("14f89b20e9a20b9a35492f9c0b0cf72bc6b2746d092e97da17da63a307c79fcb", "2880e6dd579221356c07c990ddf8c21eeaa6bc49f250f00959a60adb38d53256", "0e56da3a3a11d9d30e41c2fd1228462993dd0a83871fabf41ccd4eb2f45971c6", "21fa1a94af3a8c286eec9e69c004fc497f0f4564e1e733955ce4a7e7117d2d94"), ("12a960c6403ab58c6988f414636a16f8bab4b8a8afd5b588b90139f59d277857", "00c173ca96cc112d5d6441ecf8db0eee6b0600e4375846358c8e38bb193ce538", "2d674003f1999f273c7da4840a87c807073d742d074e6384ba44b2cdacc8661d", "2a349ca5c95ce08ff65126d9598435d91d573f30961327673b93bfea57e1e157"), ("27ca988934f2c487ad9e2e574bc729ccea195e51e0220ed199a83faf86203f47", "04e62a1344bf66fb1f8da9b932756f9b8f1433f60c12531c70618c62f3a6a583", "29ea76589d1abf06bf0280c6bbb5a544a7746286a5b230a580764a0006fb2217", "1f905a6531a488b2862e68b4e51234a90cdf72b30ddfa4b3ef27b0a728bd2c54"), ("0e631cf96c93822762ff1297320d0caa8b4780fb3ebbecd68d64a0ac1e1dcc49", "106b6bda7fe262b1e3d33218dcec5c006623cee4c623463bfea7bf845be4b8c6", "2cae6a2230eadf72b2454a642946cec413aa342d85bfba4c54d9435050e5c3b2", "0e34272409cf03af4cf42a4d036480e62bc81fc43950878da9b9b98c539468ce"), ("02e5d59544f642cad29dbbdc3bfc5a33e6513e61eb789cd2f8e15a65b3dd1a09", "126685c9f72c3e9bd4fad734abb435413e8f88468121ae67c15e439c9f46e4c4", "01ba615731ba6fb4144a8f5e96256cd14e92f5803d976148707dc1951e9db858", "0f2d5cde7a2d8f55029ce1e5feacebeffb45e95ae33bfee6ddce93d58716bf99"), ("237a12d97328566b17a5e01ef116a725cac2d646bacb43df4e30ca3ea2214269", "184e3048fb89d51edcfededffa6967b9d357e601c8220f948b18caab275a785d", "1169740b9da2ef370f66cc5d729eb1db05ac89ea18f6a4ae49d059354da8f140", "076daabd740477e598ade0bb65bafdaf0af62a7c61eac40297a34db5a2a6009e"), ("03b1a415e56a87cd16900855f66a6e0afb92358fe388d9dc2a0245d08788945f", "119ad4eb31b052cb9beec357cb04fac95466400475132483bb82e43fe9b09820", "1b3ab7f048ff21f2f2b954639f3616d516e640685289277bfe6e5907f73c8c87", "2e43e4dee44a32697e7b0851917e0ad402009c3c011b440b1de54e17d7de93fb"), ("1c4a4dff5c944acc8dc245216c40b8f4d2cc2a3d9e022029b0b5abfbf4b33337", "1df80583ccb113d53769c1f22755a6b00dfcb5aab3d506c1fa3e9b5587a965ec", "22c302f09b9429de990351b9f50c544b1566f5c97b0040979dca2332cfaa7573", "2f4eaf738b8150c26b0323b7e9ce0c92f8d002fc460db335ca85279311867c38"), ("1d5e235859417c56a5a3029b8a0f562aaa77f3b33948a9357aa7fa4316fe9b2c", "1197c0bb9911e4c7eb4266a93f65eb186fc53ec7c7f9230bb0671453f2e4d2e2", "1bac77553cb9a26e916b236fc26017529299a84cc6d6d72575a819eae3c92f1d", "296b70fbcdad781ec3027f14f98918eb604d32f6b2c4101ff99084ddbc55b9d9"), ("234c3fd5388e285c172a5ba1ea4323b6b1f47f90806d1a756fb54021db2ab627", "03229da23fc771cccfcdac0a18a20036a41dbac8bc3684a7bb88ca906be337e8", "12fd923f1bfbd7a26eed106535a3fdcd66bc2bbd6518bc698ee99cfbde2401f3", "1a25b19552d6d6a503b7bcd684a6741e641e605e3d194a4182897df28f8218e7"), ("085a7f294b135ca42a6704aec711ad70cadd3d041f39619e78510b025ea452ec", "2d8d80b10c61089eacf6b03511ea892653147dede93221cde7af0a83d9f65942", "114c46207964f80e1d10182fd94864fbb40c7ab7efb8d8908dda8c694ed13de1", "0c5819a19b424bc1edac7d7e71a497da004abe3ec79cf5329674fa1b19bce5fd"), ("25c30b9de2fb2d98f7981de7d401bbaa8dc5842181e7d4921dbc07a913e61f23", "03411ef2e3664e684fbf59e5bc58ac1b7dcafd33feb2d81962d1a45f9c93b25e", "0899fcff256913ce8ac884fca558c78919c6c69e95a766c1fe7d1009cbceffac", "01e32e0ffecc7128e669335aaa5738139ee4552206b9ccda2b4a3aab3b5de8d4"), ("034c7f7c25a0ae59a85a3768bb283e3f9c2fab92f9b6d5838974c9684f5ca96e", "268ac84977298bfd7b5afefbeedf58bc0daad1704a73737fdaa0163e685ea7f7", "2378726fa80f14edc35abae246f104ee98736caa5ec7b639cbd07ed3059e9227", "2e7117a279dfd040bfc7a9d1ae6877841d9bcc2d1235af811170fb3791a16f15"), ("038e9d15a8a648900ea3a3522f0e3b1b19f812975fbabc2615a1609accf3262a", "2c3a9a721d7a6edad3517b5f52402845c5c04b9f179478acfcb3326085ac4dec", "2ca1d5d948b4534fac6a3cb2668b85f7222949cd5b2e0ae8ba96acd82c2507ba", "009032fd902da7b07a733faaba95d02fadeac04beba92b1ae649ee81dc5a8a0f"), ("24d8b6909ab422255a22919a4e16f6a0c0b3fd1b498dd2b61b04dfaeb4d319f3", "01563b7c018298b546888525c0991e3da573966dd99d34ee915408c00f9d506d", "1a7d850bf1328fcb680edcb2f4747c886d949e97bf85fd6b60aa4f65588d4dd3", "087607ab30afae1ee846f819ada3ae0facb558dcf7e2b143d5400b91abdb1790"), ("22863aceee15060d99165399540fc484f947db5c42595563ec4f1409ff11f313", "088a115656287a1e65f3587f46c82390712cca4b29d87adb47ac3682b458f3d4", "0c5017c3d12daf9a9251aeca71097a6f07c07f872f62dab4c9e431cbeb7cbbef", "2d3a558b36ac06aa1e9f8059df632a0b00938ffa8afd96567aa126a0c6195bac"), ("2440254119bc345afbe45fd9d9cdba8fd8743a22d475966fe9fa733dce0d2952", "0280d9257307a1f84fc0badd8eee163652386084267a01c0fb83e1f49f4ff34e", "15a47a69b7cc1b1e6cb07797cc819834b7c3774c1076e90f530583fbe32228c9", "22e038eedd76875492331e9bfc9ccdfa67f036621c40548aed72b40d45a82cc1"), ("15b5ac9ea4143f0f0f74dd2fc0e55a92364e00bdb1e75f656d21b5c055692fd7", "20e3937d1810cbf6974f3e1bad91395a427be21e4a707f76286f85d4d8a5afa1", "0dad441f37792a11240e0f9670b3c7b97c70f1ff3b328248dec4a4472553c740", "0db0fa31bff4085a2b92adc89c5738d1b153aca1824d111ccb4c5a7aef73d5ea"), ("1079508e3e34d0381e510932f600fda7a5c9d0ff4a0bde8485829a0e4decdcd5", "291335add0eb0fbe32288ba92471a5c661687308c03b505011af34f669a49652", "11a83c196ef4cbaf90f5b36744910e2ae555007f55e88419b9a6083df56c1ca4", "25464fc6affd0e56281938cc14adc631b65dc7f070f0fd0eb673391c0e3639a1"), ("2ca0ea10d1d5604e4e5f1646f84d1fed00a129390db98d3d10a873655c3e76be", "1b4a88601592fd12ff6f8b64cca8e0cd2174cf9ed4c6197a8f551bd1b2a717d9", "20888179253f625b58c270db659e75651f15741bea4963f5d9b8e8fb7f5f1f65", "2cabc10dabdadfaa0c8e91161cce361fd238ea7fcc9b6c6693622d6228f1651e"), ("1e46257d174b0ac3f0f0240b1885e90a65bec29cd7912633478d7bb1e51eaf71", "1e8899343ba3ac928559bdf989cd91ec67fd1c56db2d02681726e97d558d8991", "15fd9bc7022bc5d79a4802af8dc2f34b5c23a30d47547d4f96f16cc7da2abed7", "08cd2625340a230bf7cab761c44808d01d518137eb71f3190a5534d572fb938b"), ("219b1ea9f9eedb7722b0fa7bc2c74907581d012d9bd69f17e8ab5453dc8c18df", "28c4d4e928e04ed65ccab48068b021cb7b06d1431026aaf8df39407d24181873", "1470a672dfcd7aa02fcb49084fe2d45ca1587e4e3d451a6ae91d835d7f8263d3", "0362f5b54166ccd20a8d624f0522c7a7fa663838aee72775072f1f53db82f2ba"), ("184decc75ce16fc2547a63ada701ae946f6004880fe4bc6ad63b6a2da1468506", "0106e5c1bdc2b0f68cc223d1c39474f75fff0954d6926cf843b96dab2c3a95f2", "2a3a919b0196f88b5ac36081f07efafa5cd20bc920035f334c0112b4933a6979", "0510a4a0d9e3706026852229997b3561aab77fc87bb42dfe19b2d882d4a53328"), ("0caad9f7d510eaf9dd4af3de474bc95ad033358fece7dffe42da615ef5de4228", "29a58041978a8534b06702f08eb76a71348ca624a58e77754f5619c619e7a677", "120b2630611620e0d85176259dd51537ee82f819f8accca83ca9e3ba9bab8b3c", "02105d64f7074f107eac18b70e0ab38c6a6e7275f1d706d7495602c2589a701d"), ("254eece4f5cf71e007c96ed1eb0c8a55036a0a58e7d9b44023e76dcbbcccfc9e", "1f688f78450b7f2a1f9a37efd41848e6dedf49c55604e85e5fe01cfea33f05b1", "225456a7b20e6cfd5eaeb904fb9287e1c5a6ee74ae3c19291fc8cd900d9e802e", "2b61ba25b146fa91af1df442b9b6dc793db1b7c5d0391933a84b4b6da7d1c32c"), ("0d97e02ea5c9b5681718f8ca05ef17d33837368501b682c35b7ecba114935cb8", "2882bd35f20575ee081987c1d295f0c2fb1c1f91ba42c6f858e073bc15b36fdc", "2b3b83b490af049381b56c28eb83c586b4edffe72c91f991ac68bb7c4e3b9250", "218fe00661b44919d0c3240b4ce537f36bf9b922410d29b4e103a897c3e58a98"), ("02f79bf6ba26aa56a73d98e1159c92be87090cb3674aa74b49ece09d10e37462", "132936f4a2d98f246fa92972ca116976e25c7fc78e77c8058f2e6c9dfa868064", "2b1bb45adf0a63f4842a2bc3bdd3844b589526d18a643b7299455832f9455e7d", "09c32fa876cffcbc6cc7cc064012f661ab4a449a40a09ca5c12201c4fc80b111"), ("27bf289eb3fcbfc047a68799f6cec7c6c33e42137b0fbbad0c400ab2ea73911a", "2b53e9e9c15e5ea45602678011dea1c199fbcce67f6d2a7329bcdb73754a59cb", "08df65480547ff0d86da5044716b50ac1cd4d6b38704ccb0f1d3825dd7b95595", "19cdba865be0ebca029d4eee21fb2ad1f39b177e78e01ba2a5789ea0a75d6505"), ("16bdab6c52fac11eeb3382043dd70d84c07dd9cc891eeda7d49a5e87d3709cdb", "25f0ad6ab254e948548e3f761bb6b34ec84b7187a85cb360981e2a907fb17503", "10656cf1df907825f5fecc374b439a32a514efd45b118dee1202d8ddc9b0c27e", "0c53d5fa86a09092a13c2f5fd6eeb66f30de2d1fde4b650fcc13904c7abd3da0"), ("241334efe3068a690e497a27b847656c21918187c335b2e0023c6cee3f2723a3", "163c99254090eba5e0855048eba495531d2963a930e5ad75892f995c8d235088", "168bf64505602f9ed886ef824bf3646b08664f51605b60d0cb446bff7c74c749", "0f9256b67e96bd87c01084ca473bd2e9f576121547d54cdd1981f2c63e5e513d"), ("05096c5758514dd43fc2af24d4b6767822262a312f775cb7e42306bf5a140881", "28538d4afd97f7a170b63414a862095f8ad68427c6543008e439c1482a1f70df", "0a89d1a946627945227a339073c32cefe3e5b3f5702b2f3bfe069c5f00625c8c", "065863e77bdfe0211fc7b7c0e76a021d4e5484aeb4f21a16347c5f13a6b82df3"), ("25f019266bcb5de1a58c523e0c6eac1c190ab26653fbca8988d2831f8c5d407e", "17ff18f3fff859e679ae4b46371f6ca0a1cacca4de76241bfbf2b31f696ba9eb", "2af2350cfb7cd6f7aed73755a92a502f414c56d95429d3fba1474215eb4028d4", "2d25e7a39340845d721a03952f56a492331994818df84f202c155bd552dcda35"), ("2ff61d3512ed110fd2e6ada92ba1112782866be343e41f8a95f942e9f8037110", "2a4ba54f609a5b53f0a6c2c01d36812276835510cd0d93733603409e956a44a2", "1b50df1df18a88bb081def43325cd97168c62b37297376dc7d7582c117c01fbb", "0ab127d83a609d98902c6a5faf74d4c801d2dc123e6a662f4d55d92d3a7a0544"), ("2a034439bebcfc88ac0f4da4d9c0c03a21f6a843088b82c10ca5c2e5185d68c0", "2889aa41528426262893615f0bac71800c6967069f39bd2ef68801539d3ba94a", "2522970e741ff2fb938d6ef45e8eb5d2cde098923b73781370eed924dbeca5bd", "1bb3ff49edefe2705d10e2ece8dd4f14cefc11cb6de88e82cadfcd8dcf18efba"), ("1599b11a0764d194f6bad72c8edba77a31543105c609d1e7746fdef6aeef13f5", "127885eff97a7c3634130e5a700e4a0779db7ab8524b70e7f3df0346726e755b", "10fbc0f423542ab497858e3b46becc2825b58def33069e68ae873ad15efab309", "2856758755c228d44e7725ba4d2a84638cd9a3653ed42adbc8080f9dce825e2c"), ("2fe1c0b8ce42a86e3296be39e4074da827688ca20cc0ad18457b86c9fb3777c4", "1970ee0ba3993613ef7aef15ec530af890b91d5840bc74579e1b63c0ecfd6b21", "07e24441b4962adb1a9d5a8f8a3dda3bcf9e885dd75f84be578ae611ad942cd4", "1b7a1cad67c6d8d6166c817345cd3b98aacf4a8cee2a17159c48fdce80e0c5b5"), ("173618f91ec774a5ac0ee850a35519f437c1338fccbd67e4f2f78d38c1800c2b", "2cc459f6532b5e2b809bda151b1c76d7598fe249909fbfcc464066e7841ec327", "15324cf4560870f07c1c997c06905721aa983f9fa6ffc220066052ffa73f3b25", "008ae60ebff2c2d19ca4c3d99d981dc1868937c68e41b4d0d8c3f77be284fb5e"), ("0291a54e00b86ab3c7dec3787a8ec57d07aa6fbf54bad07d4c58a30a1f174d7c", "00e48c8d400fcaac0702559452d45a92538907f871671959652b05dd3b0ad38f", "2d7691f64a47954475e90e5c7fc2703c80b3daf3288e80c75c4b0d7493dab09d", "24442d6402387c608dc31436ba534e92c815f65a9cb88801d7a3e2b5f546aaa1"), ("277764786f952375f2eb54d5d5fcbf18d43df6fc0668f7dbf589b4cc85f5e06a", "098e3f15665f284bc1ad66f76cfc589b1d836f5d2483bb185c70de343cac7da8", "139f365a0e8c613d7022c4f77a0179b9b0502ddcae5988844595c5e43e51097d", "0a4f8c208493727c85ca6c53f3bf6660fc16cbf020e63345e473db66ce0faaba"), ("14e79fc3dca34e6c81f70d3d626c01bd997583c88d6aa3fed81bc3dd8f62b57b", "21388969ef1cab23adc461b1f91ead1ccbcff4fb5722b9c794c8f50c762d8810", "05a90244b72f05dc36d3e4f73fac1d1cf0cd9b37b3334227394525cb68183513", "26b1f34999386256b1c4e64657fee1449c17fc13cbc96001407ff5105ff98911"), ("30407f8c17f787fce1a7e54a2a848854a5621d6c89ca219d2910f51cf8edf3cd", "1f096c34c5a5854d5bbda99d9f5fd605ae1df3d7c56f1157bf0e15f153cdb8cb", "1b1a824d6e3a210bd2b00b7b4f01b9bd2c5df174e1f95abc273dce1d368b9bb0", "0ce38160e4de10f57d18de9b4291484e107e7ec36a1f7c95973eac1e2c523900"), ("2c87c9f348dcb9c84c26afeeffc02ab16a9cd90f6173083b880e85880c70b2f7", "17da85cc31c2fef6cf68ade38d0e838704b3620e522f1e963f07ea983c239fc7", "204ee33c0662f34b3a6564ebc5d56a4346b5107f17c65f778f29c7a3384c8622", "000e3e9f4a45277b9381a7cb8df0ee140bacf31d3a8ddb8cc9e91b32d4af1b5d"), ("125c0db591295b9b086485376eeff4f93d632a4b2479ef09b5ac23e41a36ef70", "049267c82469490bd26cf4406036e79be921b7c60eb20c777c0e28a2797e72ec", "2687a8475c50a6fdee94dcca970081cef1a4fb0d70644b5042f660de2f1c9f4f", "2c6195930fb4e0db28ddc5f1bd4e433a1203b322e6c9269316973281bd7f2d7c"), ("1da7ef9c4e270ee4356207d82ffdfd12a6c7e8dc4f04581d9af20055ccea96bb", "1d63b1f02838c935cae2253c315f080d946ba83cf0837f47c7b6bedeb0cd09d5", "22a331ebb10145a3763e12653de90a71c2f55942914f568dcde24049d8624593", "161691a3008abeccb8d27dcb6f8ef2469e565d917f9df6ff399e504f52758bc0"), ("0c028dbe6165e4163173b079ada83ba592dbc164e143466ddcbac958b5e7c949", "0ad23bd2d93fe75837476ffa7c334781845436168a3bdaf2887ffe06a91ec529", "18a8194de1e2b30b17e0c486cf4a189aec6307aee5453770dcb91817050b5eb0", "02f4e4c311e75f843f151ad028ce03a236a155d92185238e8c11f9befd59c2b7"), ("1dda1c46227d17da185bdf62f8976e245cafe8be3c081f707545b3efb142d9fa", "162dbc9faed75a42f22ce295cc96d12a65451d4bdf179fa7df4aa5470eec9f31", "15045b9ede230fd7d1cd8c0b59e0a75244147ecf8a5d4b79b8da15247376a994", "222d8158264dcf563f9642c3b3b136dc8909d155986a0c44d0445d5633775a8f"), ("1846bc0ad9e636e4aa1bb9061df445810beebba43b9fd63f46f2be98c3a6dbcb", "288538a4f93197f565eedec56991d0b74e5b079af4c9c7d43a18e291a6a3ecad", "0f10a2ea85eec0343a2ef623707a35368f9a90293377f04c6364a6ecdc9a1db4", "2cfd3f1689866fa1e20141acb3322b6be514270ef20e7096fded807c1fa6aacb"), ("000698a991043e7ce562d02af13e3316603f37bfe33413222b92602527ee855f", "0b1cb6c010bafcef0a4989a1b7d7e397196a6d02367fbc399fbdb0dab271eca5", "04fc0024df72f109f5c549b64aead2c0ab09de850eb34338b8a0cf1b4974f823", "003ac0d7122a07d517f321b556b0c16fdc36c0d163c06ae8d56b5bd72d868576"), ("20480d6b3ed56a82c4dff662a51ceb003c295c4be597cd02232cdb1c8605144e", "052a93229c15f78006c2f2a93e296eec60593b3a31e233bbbc02d45b223092c4", "03235cb663798d5f89b430878c145ca0510d881837a76c58e1ea889ba8ea08ce", "2d91895051030af55f37c6ab1f826fbbada59db997d5d91a42f3e71475a7ab83"), ("064ca6269193e4d63fe0f7087228c6b9a289b1e35d4b2ed8a02c824c1b04178a", "02a4b100f0f21e5c5465d353560391722b600f8ed1d3dc0d640b9a36d72108f3", "2d95a901c16f235cb5920b5785fe0b9c3e320c7afa7f2718d7afb6e12864bb2c", "2ac9ec27dbd863e04379d2d1e41c1c2d691a1b39b7e1bfd0ae7e880d705ccd15"), ("030bd57958718623f1226d9d9b78efa33d2ccdb8f7344833927162bed957aa4f", "1bbe340dd29ca6496daf04bbcc6e96ef413efe8b34fa2841cd8d9c09b15dcfbb", "278f7da5db756e25ed335f5966ee05bce4969d24eb84e140226c9e93e54c124b", "14883a40669f1b7d5b41d391b4cbcd012f1d2d8978a6422d1047ab0b439cd629"), ("11121ee98286bdee7a70291ab8384f0a0948d71820abaed02044ff3e75e0515c", "1311a9cb7b0453476a8aefce2275a1047917f11109352a2bead4fc676d1f56b4", "16f26268d61c4e64582dcafcd8a47c07bb4361f0cb54f8c7925ccb5b25715494", "0f52209cb48b5a40701b6c8d22df166f8b6f6d9f611bdeb6e744db40c94074cf"), ("2a0e37814fdd08f1fb005e8f8a429fa16738dcff9fb65e88ebeeacaa29d905c7", "015ffeb3f714a1526befa4a8e0086902e7c8b2398c001fa4994e30e238cccddb", "1b738fc2351000b46844d3b4762fb04e140e7a0fbfb8854e30020a8143b1a8af", "097952a9498c11f67049f69c21ec27abad1e977369c1e457aafdaff1060e480d"), ("0a6524a240b2be83f02a753e4542089fb2154ac7ff9c800d8bdb7394bb3dffa2", "10b226f65c9091b4bb82fe979b46e7adbfe639de8492c57d06e4014e7cf9a098", "2060ce58462b64b89df7a343d15f7382399575d906428b7653f67366cc02cc51", "0930f996d9b1eece39596705eeac63ded144b47777b9afa022f8c352c212f570"), ("210ebd44ed61f796bb8ea5b1c9681d1d033d93ac1440fd5d34112d3e316e8b70", "2325f5013dc1a964a98e70f2f02b2d550d66e0d53d38815a71c27652eccf908c", "15b9d124d0bfbc44aa0239104c59e4ec7abffd5c2a4632f68beba8aeb024ec7f", "232515dfe40ceef7a0be6cabee089ba1bd1077cdbb9d3845c85c9e344a7a52fc"), ("1795c550f00314debea674f036f4eb9ca834fb2771eaca917b1b8c762a940ced", "02eef30772e9d99d3189c1831f4334431ae7b904ad950dc39e88f413cf8d1fde", "185898af5ad89bc359bc56e9a1158873af47c6471bc6ae0a3314c571f59d0fda", "2f2a3d81730e406808d63e848ca0d4e033fc3b31dd79693d5777d068c2b2cfe2"), ("1aada52737dc361252e335a4227fa4c234d755458b97c62c25885702317ea8a6", "1b66dd81fa06b539f6e982056686bbe588b8cb0c9d7f6192ce798c52ee6f9fed", "22467a7ba0a725a424b3b9e2bd0b2808e9900d9eb981455400cd0b1589f3cb09", "13eeaa38ff04e40f93a2399259cd441d301aaaf14cee4b01c28259439e5b3def"), ("188003e92a5e7530b63318ff40eb670ffa722b968bd614f16d890e3295df66fb", "2e2c22615c39f6ee77e2b10673c3a1d5dc55b1549ee5dd0704dd659720e5c511", "0ad124a732167e69543019f59218c1e8535f21350ab078c3a26d48f44b3e6113", "0c41f505cbeadd0a31d7f5188ed1274b80b002fd8664fba401194ff3e1900451"), ("18fd7af166f7fd2fc559cd9c0ae8e1af65150370b2388ab363a5a4c5c4b5120b", "276e34b63988d60d24a2f95f1888762150d6156168b2a6313ae8ae5556b62476", "17a2eed2db691837a54e8a1f6fc65abddba599b216d1e4303dd34b464814c0b4", "0144df9794a5dec276c617854eb56566d20aaabb352a2f904e118f7830f307a0"), ("09667feed317a75f57ff7f1dfd9fd399332e2fd9533edfb88d4060f70e54f0fe", "2f544b7c3dce91cf2afaf8977e0689a46b127414ed31dae8d713d4dd9665c35c", "118074956cc57a92474ce397a35b2432b993e039bfe37e7a8826ecb06c2ce0a3", "0897d20227b23162665dbc5bc6977216fb9f07fa9e914d29e431b079aab9b10c"), ("21e23ad293a14e9e70268535d172bd2c23cd6f2ab9d429fd88bb361ba8a9c264", "12d79ff8f8f6d763016d5df7837c442be8ec9998b2de07ef2ff8fa288f98f262", "2251bb134428ae6c08851edfbd21461c963a4fbc96ee5ca1e14d6a103beea359", "0678d333ce6c9c234c7ecf24eecf3ecb2abf89b5f058e5952a6a699be4727232"), ("18ae0c2713aa09a8bbd366d0600d8add2a78e0c172e867dd301730e5ee54b2e7", "10da6cbe9577205c3d025a421275fe6725629074540a9b66a99c20b718a2f9c6", "24f904364d9f4c7367a1068a051c30c7dea4976c42df1a537dfade84c4b1a115", "0858f6a322ab97b6998850d14e75436311bc9716a5816a347658e58a5630ea57"), ("170b24db403b2f7574c7b1f61b25563f1a6eddd8e005291cefb3e8f580477960", "1410bb4a34930f68ba24a7bfd4f4dc0bf94cf7d9af7c7a059ae67e4cd21db16d", "0ab80d2d0b7f6398b316a215260342b5c3d3ea745019adcef3ea8ac3968c4336", "0a89a7430fa3caf2f30ecc274cbe7935f334e7404fc273bedd229e9a24d67825"), ("070e53fe167e865c74b0dd380c7d663d2e793fb0f822d656af39814590d28159", "13ccb64eedb693bcb97da7a20660e050ff6ae967acbe0120e9fae4f264e50b93", "10a25083ad7fb24cf803b988dffba2bdf06d16a61cfa87e4995b57bb5d4d101f", "26836dfcd97f96d1967368c45d1f162dd71b56921427398cb2aaa71448439e0c"), ("10789c949c3a0032b07f6d76e9e757f6baf0a201d704e38d749f8ae47eb4fb6b", "0e74915097c6412ad69740e4cd0c6b9742d5b643ccbaffc6fa80a2599f8e3899", "2b868e938eb1f6b0c55f5bf49933ee69e158ddfe910d8f70cfd450c4316f7bea", "2ae1124c11244ec4817f02fedc250b73734d67b67834ea2f3f4e4a37d1e5af5d"), ("13d4853b051168c458747bd01dbd388c646da8f38e6e96b6364047b09a47eb51", "2b4d9357cca2bfbf9b74abf56120c59274af40374c25985af6f7c7ab2f0749ea", "035d1cbcbc3aca9cb29d52767ecf1d6c9f3d714b0dff6f15ca06ad19de1779ec", "01d691e5a89d26706c21547f34ecc3b2c96c17f7dbb36770397ed69a702e064c"), ("062accd29aa79fb9989c5fd129870a5899ed1aa688092d42fc246923f5776ec4", "29e2ad1ef0ae5e3de30bb718bd425f64479e91a50f38c198b3c18c0ed8989261", "0d6633dcebbe21a2cea6b3b8e06b8dda4f8efc82e1f75cb5bec495c575c30412", "1d962c843b39d88ea220ec47502ebd0093ac1b7dfaedad01e40f5501af12c182"), ("1381db84f9f0fcf32d9427b859b83224acf5e7ba4607602342e101e453663f32", "2d3df0b9012d7497d1cad6c478d9732694263af5cbdac80040fe3daec4bfbb39", "168d2774841d42051c39d2f39412fecf4b60cb2b3bb19f3d41f4989f1241ca11", "00ab1b0a66e9a7e21cd8c27a82cb215a03f4cce3df36d7e258ea4abd9875d959"), ("1390be19c375e507af99cded47e7e694320e5b81c2c8b4aef464e43e02d7806d", "1c81e6f7250a5c1093c01a09b98294d552bce60b8b18f7dcc1e78ca070f15f61", "231c885177d5b6200426e13524a384da0157bf309b2a954bf08af27294f4a62b", "0be0c1c2801b5987b09a97a8a9f8512ab7fef98e521564ef12f96732b88d7f2e"), ("18f854f6328cf7eb950ba1044ce8ca7a866bedbe26375cb66a5019cd44471c7a", "0bb28f9f08e73771d2bfbde2f007efdfc7d085483b830a91d6cf833cad0e9fd5", "19a035ed250f940d443e340668893579f368884b1a481c85024fe61aa195b279", "20561663f51eeb9590d473606c1790b68391495a947100cd2a4854171d985c2b"), ("26449b0eb844a46bb40e7b62f1f4beb7a2773a690b9028ac382098ab0382aaf8", "12af0aebf50e167db901f46c46a3fa89847e3a7f6ceb5e4cd89d44c0abf02ce4", "0e8dfb154900dab8d64baceb0aa81c724388a9b7b2eb3671bf7359f95f9e0ceb", "14e865e751de83c6e054d42e5610f453a04f87fa90c4fd8833d2b1703edecded"), ("155404c4e799601a18dd5e7ed4e51b8d425bb25d5eb9cd9acba6038c756633b6", "1a7355be6fd0aaebf56e8b0a2dcd775a5e3c056e56ea660ae840ad576b5be938", "0102cd8635585b483da8525daee1a357e75e52461f8b8728dea5b298f0c401d1", "26ed247ff8c906f96e467539b04d0af2dd098d7f0e239ccf4190e6e2b565c7dd"), ("22a087e3bd88bb955a1fad7920fcf48e24a1ea487a1cd0547d77390829d9a0cd", "1bd38f089737f2ec1437c158e35cb5db201e7c00b7f2e6f6716aa8d190b28fed", "016551880b63e7d919eb8d8ab68b8423fc8e7fd4dfcf95040ecd60e1b6ebd29e", "03ccf4a644b06493d575de85fd5d57b6b54bf1c05b9ae65fb327f2a6cc57d781"), ("0fb768736931212a5c7ea2416cbaacf336c46b067761bc3ba95682ef1ef4df09", "2010ff856375e7402f0946eef18dd7da03e4b9c26d3de61a225f90b313326aa2", "0016cff816995660dab06ee6c5605a77b76087ec70ee9e818a3749605b9b9051", "18157486c4e06e5d5f8e9739821d6cecd96088069aec8eb08d862a5fdbd4d85b"), ("1cebf5eb613ebc58437db7978306e9b97657dd7980c4d98d8df9b2d54ebb5332", "2413380dea5f87e1697db62702f1aa9732be7465f3bcb4c6edc68fda698737cc", "0606f14d1ae10ee8f057577618d6e9d747a74c994c7522e37015e5eba1f741d3", "1b3ed4fdc52a155a4462ae48f466b5e16fd0c5e9efc9caade41db2c54de96154"), ("072c6e494e51821a13b4206815165617c7aa9e395d63163532a5cdb32c83ae82", "2fa24867b3924b6261f3bf99683056f8d7dd22a845bdf8928f836d9f0dedc05e", "138257325fc9121621e66cd513953bb82af28c4218cbcdbd027cae88c16572a0", "127f4ac842a050003e01bdf2946f4601a310cdb8d0cb210e02ec5476844b49e9"), ("1c9414c9e0ac8d4d7781e86d55b564a4009dc103f611c1b2887f1816df37bb4e", "07113e73516b13a82073340019ae906f395ab44673f9e01531d28bbfea387ce8", "081df8e165594cc70e9cd4a612b8b02909d8bcbe5704b104789bb771f671e6aa", "1a2659dc9ed1542a2976a772076ed8b04564fad0622cc0c0591a00fcc874f990"), ("16c9fee10b61fa9e30613e9f313ea5e05f4dcb2654525ffb5370d4868933a28f", "1b52c7ad7da7fbe62dbaa27ee2ae3b0c213ef2b7d5877080c6da83936d8e3326", "0a2cf0452841adacfb90787f90f6e936ebecb359a493aefa81e96d9beb7d5caa", "095d9ba56ccdd7061629fee89602c77cf83bc2c3c2f53ab694ddbf81afa28ae1"), ("16aa7230750ae438bcdd0a4f6706c5e21560e318129f2d21ee1a45c566b2bf21", "1840dca7f394f83c4f77b4f1b471a21ff57348418390a6af548c5ffc39a8565c", "094cf610aa17880758c9ea328895604d70070ace0440732c0702aa774d9b2893", "213e3421f717b7694e479291d3408f26fb1e3c186566e2c9e37a63e9da6c5fce"), ("2211e2b04c08104e6bbbba2e95714cde1394e6ee1133f311572c7be1352a3f95", "1e0dcab0e4b00e179bd28891478d7fca1a1ffaac0039e65982b8a0a065d5d3b2", "0b3560322bb97241db0728a6dbb70bd0433ee38f4e6f829ba5366d9411cb2ab8", "215eabb014a4793b1c2d7f73f6482bc3004a9f4cab99d2a9dd2f1d2ee8580487"), ("22b194b82774e64714bccc2532c1d8d1ced2a2bd5e3dbd4885e44089f8708333", "100419b9386060326d33b3857cfadf526708435b369f5ebdcc67aa62f2a56473", "16b17c44de3719c975a375074b74b94cc5438a188853df08d49818af75b40f30", "0d33275e4b56a6f863797d24536261318b4b4533876529a69e62528f80f204b5"), ("305c7fee14615ed648989d2700c035faa6ff3ab86fd810a8fc4c6310c7485fef", "1e7b8a2bbed079a94d50cf5c1c9841bbcbccd731b7307fdf659652c974733b16", "2fa9202959342b2f82c6dc302abd71f777e9428c2fab1feae0ac63f2ef85341c", "2bde97f400fb4e01b6e898bb68e26903e4fee5d3af9e1e15b17a9f0c237eaf3a"), ("15314cf1c50cf234d493025e3855efdc3a37d9a01c4d5c8b175b1d38ea38aa3b", "00affed2075713c65977b39a0ae3ea9fee776bdbff865cba150356064071efb8", "193891d0ea31681682a9dde8817d9a3526f3dd379dac5bf9253f5c34ec114344", "07c9bd737e1557c358e22793cb22919be528933a62cf96f4fff801ef55e70550"), ("118c693180fc1a7227e35594b2d2809e229417c71102b684000de3fd5c81355f", "2f274ef446d39c82faee0e2decc12184cf64714a1523c1235159d07be8f25194", "1291ee4900e7d89206864f700e7a19b49a5664770fea08e3ce7d8860ac7a1dbe", "24ae803b5454d96820e7ef22438ea6de3dc90a98d3a5f9b17328033ba8c7b788"), ("24928b616dca4b42727e85a352ff252c036be0198f3912a0b53c6a01594bc95d", "104a5a3e83f06ae798f822e7ef3a29756558059781c0ffc3d34c75559cdaef1f", "113e743caa0dc032bc22044e2f421f8eaaa314f6213033b3b16813e2539c297c", "1a65cbeea7cf79ff42bd020e05cd5f6192ac9d8b47832e36e5763e7e0145705d"), ("051fa7659d55ab51a405bbbd96be99de3200cf21655b64aa515599708632d2af", "08d73b48c40b82d1d21090dd5c2504584a925ef7bf7962b895f3ceba343d1429", "304544f33e493e49144626ad16d86f5cbfa433aa26147e5b8a0e56b229a8051e", "196a8e2ee0ef73e2e64f281a7c1032ecc06b33e65fd194a7b85f6955cc3f92f9"), ("09becaaa8c2ed95d8a84675dfb2a43b467e24b15dc27672c43ebeb004612a148", "28dcb0ebb23b3e316b633b7701a958bed917505e96ce03ea11083f200df734d6", "098e9d87b3538deccdbf9d341b6c596da85be5df25e7e4a7d0376e73cd8a1b25", "217e874fa5f33b2887fece7e37c9c218e9f396131dbfce1a5f7bf4ed817d0c21"), ("190285f215fac9af3ea28a10ace7e743dffbfc4d82a69a6571f63251f26f7102", "073e614a36a360c35cc76a4a8c23578a6cbf2fa55f069d261bf90a3091281cb7", "29db63442c3caab255e585aa7b40d2d7c738743cb4c8bc2afddeec612e427662", "0e6a58124a736b95475498f3b3f6a266f71e8f0beb2752817d49d367e979359c"), ("2f1fdb3cabc8391b905e6467ba959cfd75b3a44aa35849c1f63d0c7efe009659", "2f2a2139ee19b6778de55a6220cfa83d6ee0d5ef75e6ef242208ffe788d287ef", "05d0b3e1371074a7c3b9025c41f74b9b94f46b6b3ca290e795d0798cec358e21", "21f9672ca4de97c1ec1e9206e0141deb50e3548280458af05b525b48599b9ea1"), ("164fa52b6631a90dd6e9218211ef433529977ce58ce63e01115111d968ca0e5a", "2f1d8c30a30afbd6c2492f72efe2e33391a4f48d1234103df989614fd8f7fe3c", "2a9e2abb484326f50f89251114758b0d3af1ac7ecbdb1c37f564c281d810f79f", "156bd20abe1354d32557f15722ba821b1a49a3860cc0ee0b770715f01532f35f"), ("13b9625b9560c62b3b359d7ed200f6f0730684eca3726f966d27ac9eb61ccbe9", "248fd87a22c3c3da834ddadc7affce88eaf476c1efa65469db887cd75299f4b3", "221433125d748bffd8c471ed606c8277ae23182b9d89de3f328133c288f9feb1", "23d0cef64bee4ecb5d2e514f6040e53a69d5ebb3ab8c0dee232dea169abb7a76"), ("2931903a7dad352dcea0a5eac2267bb22f4da9ddcadfc46414c31d6edf63eda0", "2d906ee819241c56516b0316455166ee049ba03ca40dac1f02d3775b1f6d0211", "29a24ec436ba3da3c28ba69261601a1472e66b01820de4688d893b41bfb42783", "0c77c1aee73c4f441ad120281897afc80bb24848d9b18975a83ece71521ca3ff"), ("280eda693b1b6ce6e2754d32ef6dd7a1158230185675767bfffe14d53f6798ec", "17ed07ee336df9a94dcce20e66e49e510531bf040b2c0a727474577c014d453f", "1ebdfcd89755db526ccbb298a01353067d20fa11b16f69e1524e29995dfad2a4", "0e4b8b64c42171c995edc6ee73bb3dc655269b4698b064d3f1185e69bd19f488"), ("044481a9c0512e73d45579443a64439cde6f77253746223803575f642247343e", "206503a36ac84448e385a9d16e530a8824916d4f9736d2b67e209017d0a02a47", "2ba12678aaa43210ee9530857922bd4a52c4fb10f0224290bcddd42c5790438a", "2589d41d75943ab05fef25198a175431b14f49d0d553d64f92887999e04fe106"), ("0ad7f7cac9546a5f6d40bd696974f539d492c299989d9bbba4475ef7377e9132", "28339e42e6542828d5dd0babac57f0bd242afd0e39e11e0f0373ae36e2d0a6bc", "16bce55ee47b40cf6c9c48170ead593b9210398a9c8028c1ad368bcc372acc25", "2af86c448bd0ed5986b7bec21e2479ccfb334e923faf320c699c8aea80382e65"), ("1e158d95c6b8948896813562d3912c0496ee032727e40eee9024cf61c6dfc68d", "1444038c95edf752342b11685929eda606f5da2a88fd71df8741535294e79618", "0cff480cedd742a38a28916147d2a180409586012e79070c30a18e398186ca59", "0c8f2ee9ad2d7780c6702d7a319413ae523ebc18c6a606e82f67455150894a23"), ("242a9859f814e0ba198ed5facd6630a7b4260bccb35bf12567612c7d6a547334", "03827a53fc867e7aba43945cea5140a106cea2e462fcc52eee2c49d87bf654bb", "225c06ee2f5f490a0a1253cf06b4cde0f5b7db50ff4bafc23569700b697d6925", "15711643d9f1932823a19163042f95f7f180b508ea7fd78adc5cf643d93bf08e"), ("23697021449e9e90d018b9598714359d4089e8b301d2340ab7fec825f24e07ec", "0c417a1d03cca8fbd0d33e959a2f42b101476a2df2ed034acb68e28cfbb34f6b", "12cd974961063df2e8b0099b2625af7d61c4702844461f314455c8dd85abcdc4", "0ede3ff09383fbdf42209d87b3c62d24ee9feb9dbee9d763d488cf713434275a"), ("20bccd1f8f390069010dd76e37b9401050b862cf2fde8746225c2554e88c1f5a", "0fcfb34b9ab3012d3a554f1a9ad1fbd41e3fd4930eeb89dfbdb6d291dcb16bde", "2a43695d7dd3bd6774469aebccf77f3d01ca5d5ecc15bbee8e5819a4b4470245", "14a1c08bb817fb9881964b2c97d794c1ddc5a67742f41418b78d099b80396bcb"), ("283ee7dcf761af41070bfa9a613089d899bcd161be9ada6db24a2e48e2aeea14", "1ce6ae32e0727f1d1845c62fa3df7add01757c4d23157355d0ce618ccd3fc117", "0e5758eb0bbc0db2906a19a3f23abf0f8bbe5b750e96bdbd40791f30ebf943dc", "0299ce91cf84d42f4b21803c9a9098e75b365df172544e19908759ae5a0925c5"), ("30497ac562506f953b6ed17a01697ff9a4247c6dbd846e5ff6deefe645cd8672", "22b5c462bed30cc795d98a049544b05a3c25b38b4564644ad07f237b706ddad2", "050470e1ebad171d198ec3eebd134d46921c4364a8e192b719b2509a8d2628bd", "00ac955a7c3ced15ae9a0fc73bb6b472e09efff72cbc1167fd8e1569e0173b32"), ("0ae31d062efbb300802ea80509f15469c0a4ee814e04966babf6f4e9d576a728", "02b8b02f2cf9258bbffb0aea5a9b1fe52a970af13a842421c3f2bc78ed252f01", "120bba6089783e9399ccd0546a75bddaa28e2670b9832cd00d598e3f1f8a88a6", "19272f4c1f35d9e823a339493895c56490327bfc357f3b8f1d43f86a64f02d87"), ("2f86204bf9fca1b552769c3e1f9be756f00a6b5dbd6e470781943c38e8508a96", "183e251a9cbae6c8c513bad6d22f001998f8583ef4a989569c889f6a17be6132", "12417009082470866c5b344a1e23a3444c06ba62f801e0b773902d11cd5fd1dd", "09ec0968da5e4579316dbe863fd31b02e9705c127a453db990968c04223c46c5"), ("0a00bd5f8bd42959b1692c44eec872bf34d6bebe796cfc985911f92e2245ee71", "0fd083f7ae85a544d8df1aafc63c36d10e24431b6fbea80e571577be32a3979a", "060d423447d8cdc13fb2756eba3934699299a8a9cbcd53ca1fd09a7147e35e53", "132fb68facde8007bf163073d4231c375df2e9f551fd7fd5c4d6a833366f94f6"), ("0bc6c0d1d77faa44e2a7aeb22026afd0fd2017bdd6bb105f4d4559fc828880b3", "092fcd4e7bbaa8ef2b4fdd4a14edbbd8d4f6c111cb89d349c3cbab1f48584254", "2aadcb2f357772d0ececbb86c715a4e70be8aee64a2213752e56037b0a483871", "25c2af888cb86d93b7e0ff3f530a4846b2deca29d80f752244dad5cbfe544178"), ("01f7c99ba5367d5d40fd89d8ed977505b04220a146aa41ea12a7ca73d713691b", "0b475f87189ff73a54aaebd8f12cf6ff3a9ecda6c3f59c3bcc49b853e2e839fb", "1b184939cb6ac0431b145c72e160a3e43970ee7d4fb2df4a1a3fda230d285198", "10935b0bfd02d3c0b61e0831a51b5a2a3ad5b1e1c275b2ba3d9aecea1f173013"), ("0ebe04aae212997773112861263ad576eda74bf9186e37b4488e417d8f2b4065", "2cbd31e82e3666a774be358ff8ffdd6762e8600b6ee668b0e60075ec1591c6c7", "0064de3ba22f5f86aafc5cf3949b397e23b782056317ff31056aa3285a048eeb", "234b0fce9cb58755ca9aaff8132a1307eb81312d1140d35fa74c464dc2cf9fdf"), ("1b14ce055633d04c6385643b5f9b14fe93089e139e7f0947053db172361c2aa1", "13cfe7875ef4e6079f2e354ef934153ba90c35c984e3d59de7820db4c891cfee", "19c9d0c508b0663c81f7e176f2a9a33454ba74f81b26dcc56154adb530ab1f83", "2ce56eac86cb1fcb8c1e39cefa688cf79683ee4d7d621ca8cc6f48cc61a2ef05"), ("0c7ad1736497b9b0e36ae7beef9b03391acaaf61e47b232f061ecdf19b9a3d1f", "0590bd667c02ffd444984c09796d7ef9993d82f029ed21aa9cadac8e933d6dfe", "2378ecebf41d526dff7200e77f42d8158b0a9aedf527b205375a3b1d1e91ddde", "1ae5ce9cda38d8c083dfed2c03be89c389c52900c6650b234bdc8d59d604b529"), ("281ee3c934e135ab586ccd59e68e4acb682e367f116c2c6686bbfd5c7ab12a79", "1e71af2d32cb96fc1d466b8ec5c07f6a1ac41a39d5f74aff20bd85dfbf2a209d", "10a8cd6daca395e314ee786105b6ec754833962bb8007b9989049b871d06dceb", "018ab634e28b05f8276f1b609825b6c869b2c18c0cfe7789607cc4497ac7b823"), ("1308def68cfc380859a002b495d86871cb9ac92f7be63f8a2408d6dab1baf66d", "26eab507304aa0ad6061515261184a84fbc5f612f6dc9f1a2e86259ac1d69783", "1a9d61ec5c3bedb708e9be573d8dd43e5720b8917cb472d4d9f4517ed69db408", "091b5866748dfe879ff22916e74d0a1de8327447e6efac6d8dec1f7144c52e9b"), ("28ca8267f99c92382b6c1731a9c449175c47eb9309ccd22385a4a0cec3af61bd", "1806de132880bebf49801fd10f37fade319bb3724fec91e4b6d631719fb0f285", "2d403d487c52901af7e813fd5c4a62186775c79e471119ca119f6f0917724912", "06e926efc66b4328409c235c8bb87aef7ab1bc89f645dd54b221eb5df5e8360e"), ("266b02d9aaa831234a17e678a06e88f4a06d713e9456947eb2e47ef7a7a96efa", "24a07e5509e29c43b8dd13417ed5a817b39be913cd501113d01c45fb33a32c12", "17909e271076226c6e512f6f51a9e376a7b2d44f30f3da37a4858f4867e94732", "02c3ca12e4bc17d5d377834ad74301d4f365076da4575ffc9fefe278bc1150ef"), ("05ef31373e747403e56eba46b2b5bdb6efc75d81e60e74792b6b197bf476bfbf", "1d1dadff48af5f3b8d66957df2215154ff3874f2cb39146b7a528f3bcfc68bfa", "2e71709ca4236503a930d542478af79253510bb26043092c1ba75b7a3304c472", "1819cdc71579656c052ab358862e14dad5765010c0dc0c82ed034e0c4ab4e152"), ("195f93b4efee39dc745fa790a7178e765b4b05e322b1d72f0cf1c45078109c2f", "2ad791731c6e9ebe188da4fd9ae400967327bef864e3244bdeb64fde4a7eff6d", "285fd6177e9fb7fce1fda6fc760e81a8884cbcd1278d8f5458c01d9a1b094463", "2fe5cae050371eba6d1bc049e7e53fe0d86d3be4bb1a4daa9ffa6fa08c2203ac"), ("07010cc1e13d44ffd123a304f16480dbb597953b9d20f939cee3f6ae001e1ae7", "1af0fd21bb03cae76f6e37876e71c0cc0a688f639ae3a7b74900eb90cbeebab9", "265a21fbee5f61d68cd0dde30bd1d45f5d16b42ba9b1c451f623286ba47f7709", "056d0a86d0d44a6cab87e03392b77839fc8340ec6c43d08ff8288a7db938f57c"), ("08d098f5e2e2acccd3283ad3a8261b2545946e882e90e5710eac62e6886d8fca", "1a4e3f498c113c0dad34791afccfa236ea5f21253b3802e3beb09aa0e1a2c286", "2c2961957ad26d06df3ae33cb99a9ac5082cf942980a1f4a66189c58b2b79727", "2ca8f8ac4a22ebe519161f3e19d83e1354d20f00527995bea2465aaab02d6088"), ("09357ea47604d0c90a0b00e0b30e9333db0b91a974ba94632ebadba792b7cf9e", "018516eb6bcdd496a04c94a88afc0a2e1678c7d86cb82b6f712c19951cebb490", "02b9a703fbf4ab88faecf2026dc944514608bae1272da2a9560332bc8553b5c9", "1c1c5de9a5821edc9633550558f7121c771da470bf213ced780dc9cbda783382"), ("21003330eb5197bf720f1488430b5d4a30cd2384e0b48e44be802b471a469fc9", "28984c09544a3aa35fe591b61afaea090bccb86898abf6830d97a9c49fa18fdb", "0a54fb31f3a34f06ac90832cfe07c3d73f82c70b548fc3d3378892fa8512cdfd", "099d3b13d1dfcb4c4519eb2b560b20bbec0aada3b9b387d7ea176b252c97b8f5"), ("0d5f4b07e3ef3e24e4243314223540568f6172ac45d09e85e85a9066cca289c0", "15d809d4ed18597e4bdb1fe8ec3de7c8ef14d78824e2bb4496b9f1e0bbe47e7a", "1c45c8f73d32c7dd7274dee0172617224bd69a5c3963311d83128c02a3572788", "0fddfee02c6b1960240f02274d056347c861381713d47c3d27cdf5a9334f1e37"), ("222b839da685dd738fccb3dd143bc43b7467ce2ff32234d6f3663acf655fdcbe", "0acc3ce38d86c09eadfd47ed93afc17767780bc503851151a5eb23a0deed1862", "1458dd639224ecf9a9b015ecdb28c59e8658458a9b2f1c2ffdd4ce7d783bab00", "006651d1f4b1b5529b47661709c20989e3d6cd511a0e75e2294ccfcc9905e887"), ("1d204bbe2ce6cede88e10cd2207fe5784f6173323327a709cabc1dfa3ccd973c", "0cc0a025cd1198438e4c51d85686845000c1b5e6b2e31ed9b2952042b2d82843", "280b4e4059ec10aaa8b59c835f046fba2a1db8fcabbb93c3d27c80321a62ac3b", "02b26ac4c706b45b4a876b2e6b6fa58cdb6c4a3e1e653f76089e4fa24e2fe467"), ("15a26233931fe93267ff9d727bf0d4dc972d183d3eca73173b0d786d9b2bbe79", "0933ce90d67ca92288424850278a22b56a27ef75a71ceb2b149d1525dda12eb3", "10a54d785bd4889c00c3cdaed9797401f0edcc3b5ccd1ef5363ae7ad4f6b02a6", "27a7e4779f22ca268a1ac429b15292af1b2096a11f73032266c0e113849b847c"), ("16c405aad29c908cae9bcf00e3da98e3cb17c633eb9295df89c0328a09dd45a2", "220b6f2a061a6a6eb67b62e7b1fbbabcbe839aa216ce03d82fff409ffbffd87b", "16fa6ffc13c0a9d9c2d7058e8927ce0b9ddc3cd7a77f9e0636a11aabbb1b47d5", "20dda8bf9acb6795965152f76ad0ec7fe08beb39ad9f94660fd613c1cc501471"), ("2590280326f1925aac1a830578f783831d1a7fc6827192942185d7c84182c4ec", "2d9223a903f5e38a63c0774891b5958f8a5d8e97fcc9fc277c6dfd0ac9be0c2c", "2c0cb6460cb85bf8b16e776f789ba02877b97112d191f794bc8e72d80b90895f", "1f2a8104178acf3fa71e0c88adb178a9f2b6d8b2d7d9f60caec675b3141434c7"), ("1ac6006c2e9f57900cb7e542e65bd40b101b7de8638962c1e6d94dc8d200af74", "214fc5e806c13459fd1e4e60f97fe0140988842c1d81f9ced535b767486b7549", "01facfe8149fdbb1b296a7af43b9315bb1f336ade374467a7cdc95e06ea12a61", "1fc5affec60a630173f306fdfb0f519034cd8e3dc74e511578847587031c4758"), ("1cd4f34008ef630a796069b5935af12dbf4379972f9e0f3abbde6e04c3fb36c0", "205b9e3b2b00226cbde7a8ff902d73566d0efc2e4e2ac5d5ba4e9291b88ea322", "0649991dd26a5944a38cfb72c53af4b9ad798785b0cfc88f72813250c9ab8900", "0f69c3498a8f48ecd2cfa94797d63e7dc520870891bfa1f9f70df01d54c23649"), ("2edf5eded65f3df063361ced74d753039b509079acb619b3763c7f4d850ccb10", "1291bffeea3e83de036100766d2e36ea27c423383750fb2e8adc535b5b5e7066", "2ff2cf1cd8810c23460030aff740b19e7714b348aeaad26403ad0ee115ded6a5", "29f06e608c29214ad956ad64d631606998369cee292bdcf5ff6f1780506c122b"), ("1f1947cd4cf72d92ebf321e709945e0c77c820cc2bee5cd33dc862407dc5f9cb", "0817da2f8df98702c77528dda5a7240cfec354d041aba89e7cc17922f079e1a0", "0e5b4c64f2454446850f07c587d8a94da43c04baccd8a270bb3cc0d170571e1f", "0a0344d94ac78766ca2b1cd20d7e56979e16a0718f1d96121a1f1b10be75e490"), ("1912bc700d2793b32c2bf304513478cbdf5211bb067dc6a388eac9c8ca26ef65", "09e5aa99fc71be21a0f7404c806e2388491a49e45b1a460ab50611ab3f67a147", "15fc043d8b1e4b50f0fce67c2901b738c2a4a522c20c33ddec5e50e30bab8833", "2ea534c091239d130a95dca01000308a54b0a1361bd75590d882a92185f57cea"), ("0db6ef43b22d4e886b874d283f998fca17823d507f0b6106e8500fcbec49d852", "0798ff5614ba61fc49c0baa297bcc1f702f2a9e0f6a89ded68a5c5f4aec5adba", "22783e93ba2f4095950477c6666ea6054b93c303b8ee4f658b489e7dffa668e0", "28d3e505d956af0b7de3a943350586fad8d4095ebc308dcaa11361299da09ddc"), ("080bdb0256d3fc72b1640e3ff4d7e3d8bf61f9e053e7a5f3756d6f3122167af9", "1ced7a1a6fb18280dd7c8f7beb0c459fe1c4524758afcb5267df2fb9823d4e3c", "0aa2793c77a3b84747ffce2e1db5441d4675dcc565ac965a29466a6c6cbd3851", "2726b6dd507d69f9babbc6e5c758e774d551d133cae77ccf375cbe94751b2dfc"), ("2cf895f6c538264fc3725f0860ea53f80d0dce290952f2434585b68d77ab3df4", "05c4344177c72e8d494c8e8e8152f70b5e4da35b05e3d5cc8af976ad488b73d2", "28c29f89382998141fbeac9a72e10684d479e30cd4074141434630ff3e2aa329", "1edab568fa89aac55e7c721304dffd8b9e0d1d7611ce287f0fdbc597706f79dd"), ("1eb2a4532ebae42d4c641a005af123533355f6ce5fb46159901fc196133543c7", "1d9745d563b1e7aecacfb34ba7fd0c9c2b8dbd05141bcd4fe513b53ed5d4379b", "00cec84ce14a399a74d7261000eb3def6ff2ff6f650adfe6f54d7cdab28b14d7", "05dd30b3383a5e8b9bc131e7a71713605431541e0bbf4f1ba14e793b8f1f12f1"), ("2a9907d322a963b0898d6cc32903ff560e25f336f7a42490e90d67e28b7ce516", "0791f48c74aa7cf959318d04b17035a9b1e0014037367bbf6fc0fbfa920deac7", "08ef768b7f7846beb62a4383f6cb3bb5cb6cac2481e6c46b13c905ae6b3f931a", "1a95f758d1129c2abfd8f74d02721696a41f9e400f14655814d5177e83c88e76"), ("029a456dc11ce5e8cc2e89b33b06f427095bbd5e7bfa0deaa988281da24bb4dd", "1023cad299b334a3ec782d7a76317dd50da1bba570ae67941845cdd26fd4786a", "0b34d9f170560e700f14d4d42ebfc7bbd2edbd6b90fec3bda2954ad6b8224571", "20b9ababf88bbec45fae13fa3d31f0a2bcca82c180a01727d9494baa56a8e74e"), ("2336f4b8f8422ed31bdfb081f3a746ff61268c350dd9173798bc067eb109d47e", "2fa568e7d61d590c74c37f7cf86267669b634aed18ce56558e3b162f6c51dfc0", "1264661ed383927ca194c6a32b0744b6330a7454c939e63e13dc9a46ce385ec4", "28ec32b9a1e6c6b289ea0f827d60f4c5d7cc6723a9c6217aa4366f9fc93ee1bb"), ("29dd1920fdbca638074eb8a6597be9c7e4f35296b54e0e4150f7c35e77017aa4", "2308db167a764b4d573b76ff8abcbd6a06f9ed0a8e3f1a9f6244fceed64e66f0", "1bf7d3ce8bf9f690aba2d50d46f41a36aff64d586e93c5cd2471308be9a5d2f7", "06cf832d9cd0f9d6147ed18610674815008114a43911b7b08dd752cb0b4a5d5d"), ("1b42575d59e50543b89043371c508dc7521946f83ea03d7d1d7776288f662cdd", "15b99809d5ed3550b0fd7e0c75d59f01a13453ecc20a9c19910b31af68614868", "1cebecbe8c421b8a5e1fb269d60d9bd02ab1aa72070b84f462413f0c7044f99d", "03e5c3cabcdc9290070687164230bbc776658f683083a8186d8b897cb31ae7ee"), ("1805da3e68ec27a6ade379c77e3fef08091ab7e93f69d9d137580cc6b6a3095a", "0ed02fc8408c9d6f1a6b463d6630b359f25f38d388abd16e35c3d3aa49dfc31c", "2928d5fcfb24c4b153ec9de0e9c125c3c464ceda195ab04f9598768265d31668", "2ae89c7cb418d31371b2814a2429eb59659f7ccddf83b3241430d71cf750ea36"), ("10632928c9ee674af90d5e7f9cb1f221316669cd18f6cb13e2d97b3b3e9d4172", "1116c3bd2e903ce59ebd4571ec720e19aeafd3858de5a96c436e67f20ca994e5", "22e178116edc7ac972d04798577a273bb573964eee3a7e90c8422a5b9bfb3120", "056f0ce2570775b76edddf2100e9ae7c51d780a261d4c24bf1f6c2ef2beaaba9"), ("18e7991fb4862c9b958528679a8d38e2d605a16848be48af16dfd1660cdd2a98", "1d4e771272ddd0ea213b701c2106348585474e04b8e8844db4856c7bdf00bc5a", "27071d507a80fd281922a6bc688a74b4cbda3151db03febd50f43b02403f403b", "2a7049e23a32d8e2c6634493b69c1e042de8cd0a94ba34700e057b813ad92f95"), ("235c47accc6cdd60e80850f8d6f249f4721d8d59a12d551610cc2f48f1fee8d0", "2ccf0e2c03497d96b1ccd9abcd4b975a5cfe508811099ab0b65b48cd311effa3", "00dbd9a4d82b6168a198f3a0207819eb2c491fac21e6a4ca28b36db2abb8e652", "07c0c3a5edfca72ff0156ab1e4e9bab2dc9e58557c6c755ba5c019d61acbd02c"), ("1a458e20971486d783e17c6d1521cc79521ba76afc1276a08b83ca7f87f01094", "05cdf289ef06110bdea56a629012cd3e4d6f8b34c80348cf86ccd048a7969b63", "0a4f240df9559cf799407c414719ab386fcc7e87dd1e642f0fcba4068f22f6fd", "2352f24bfd571053d5ebaba38e9495a375a89f47b5f60bc05101a195661a51c1"), ("1422f62ed0b12bb965219c827a174eea62400973b3f21ba6cfa5fef6339e6cbf", "26a73f5bd0ba9216e39b59356f0f4e48daaf9b552f148035fee933092c4cabb9", "280d1c09701acccfb71125255f55d810872cb716983ff8b11189b1fe7793065d", "034a371e89c3507cdda863dab3fe669206f772ae3914922515d7bc974f15bd45"), ("0d813b17963d3b1f1415ad2ec39f75735f1d50f276b52517032ee9ff4fd09a06", "0b8e95b9b5ef6b50ef125e4efcbe6aae721aef78619c39df1c7a0b6aa946ed85", "05eef4afe0711fd972f911e9d7e6387f9a74fdf5fbc3ab22c425480d28fa4e85", "19911b11fdc35721a973c5e62c952b52ed29421f3ffd465fb7cd518e643a615b"), ("262885d3df56b92b08c2c9df171f9a6ebdd045cc046c57ac7dbdb5058c5f2c23", "0708aef06d421694a134642e5f9cf26d59cb40954806ef550a3c3af4e8f1a690", "19db4932dd1ceb3577534f8fa779b511c66999c10315eed1bd799942f53631f3", "2e87a7097e937a73ddad239e34f1fa068957c6de1c8326206d957ce7413e6c85"), ("0201db5db4bc54dc222ea11e46208e99f834fb77500853a86e52b4b0d43948a1", "066a6b3239cecd187da7a189dbaf11658affc01a276216407eed20e7f196b21d", "118887f1232bd41cb87f7f6d7cb8ed54b5883a65a9aebd2ef03d195b71da4295", "02c4eed1abec0fa4a12f4703d9f6c47624180349d01dc2d2b71ae6305b7ee5fe"), ("2c5c785033ed90a5133b6f78d0a621db5f193377ec0b9d04b0eb44928dab5775", "1416ca363e37059ffe74a48aed89b154ca0fcb922c1f41f4ee6be2fda28519e7", "1962d90511374d75bd90e306a28485477db59e1e0a375568016845c498fc7fe9", "29420c8eca7af0bbbac9768dde11c10ffc27e3653d8cc715f8d67d0d2d3917fd"), ("214d3cb03af3efce45ef3358069055c0a6371ac43e52736515bb45fede240101", "2e1a7354bd5b9a55788a380166bf68c888858b542b5ad68b90ed14a47afa6590", "1309e279db38e7764acf13c07a6e27c0f3315eabe2db7dd91cdeac387213e7a0", "14a69bb82bcc257e5751251a68d2f5b2ae4da19e3264982f320cfe29555665ca"), ("17078130712804570855aae0f019dcc3a338357fcab751307d669e97522d19d5", "231addb1d1841fe9f2dbe5b603b4e61a64f1964ec81f3c9343f9a663d700ed97", "2d669cfe15d8a1ad20974cbbc7aa25caa7b4f1c9ad980a16fd543763f911c4e6", "299043086bfad20f68d4be6ba283141f953b42f6e499fdacbb8499dd309e3f6c"), ("2ab94304cd171c08bde127377b3955b68316742c3a1a121178a5bdeb8ffdfc30", "09897e8b7da1c37841c6e3c147aab982edc61de9fce308d550962a340f574c90", "09e5caf3a004be492e23376c981a6c126addaee966eacb46c7e026f7f5322305", "08c95f65a51b3705c65433859c993c8bf07a9c2ea1054e6e912316dbd6c8ab9e"), ("05ed95c095fba4e0c9a66986607e36ba5077046ee4fd8509870cc9f1aecaac22", "0236bfbdc52c239a8290b08c83af357c53713516ee0af082eaa4b5a2b24a58a8", "111cd2089d43b0d20a3047970756388f86d8d1211e1e436474350150785c2270", "28e90bf28139c3df401c43b5b62e36074790c41281d44ea1e8096463d7cd46b9"), ("0fef736c3b54f885eb89e476be75f5ed0c190b805ea32e28427dc22c7f644bb0", "2ccd3f2ea0a336403ff33d89897d468679eb8653f818262642c889014bbf8024", "04d7b12c2536d1b62a73c1010987e1e68c3ec44e127e4ab892231f875211e89b", "1c18cf8ca3a1bc662e39c46c93a4eaf08f0fa8033a684b90e63d87a658252f86"), ("1b6eccd35fe31c07c8c1953842a538fcf5ccf47aa2b20580c0e10fb1cff6e502", "00f7025ddcb6bd715d69362fd0f27631f1007d16eab2f4a090bb2bae4cf229d5", "3016dc2d9300110e29d9cfedf7aa1c98591364dcd57be175fd2be82df23a8c74", "0671d2d6667a88ae2ed7d2ea8de11fe648464284a6376962b90b207a3e9a0f98"), ("0f0a13d775516cecf081427d46163e7af0ac7dcd2e759eab1251e64b0452f2b2", "222e9486703e6e60bc4079814ccdd553b3e8780659ede9b4a4d04310ddc9456c", "087194641106f68a618d60423c71037c0688e1f5fe34a7b60a8d44653128cea6", "06ec5fc83e0893bddaa2013afc2409e8c002a5be675083088dc77172f940c4ef"), ("1ac978234fd3d9ee474b9aabc88d9d67e04620d2b013d094c431846b8b8dbe55", "1d6410a8b911b588c971c865f28ea16657f27b2fce95c45c31386c7966a50b40", "0d1e4e994b91120c91a7a103ad87ebd4e6f01ed3feb24f5fefc6254915634900", "1b0354b786512df9ee9a7dbcfb3c7c0a0346f49e08c2d4734f10dd09d2fd488b"), ("2aef2c16e4d57aff628533c758f19b8a864e79f781a69da8d1bc2ca2cc175d12", "188977be57e646e6dca68dfe323778c6b8051a18ec4b49fc290dcc501f1d6a16", "12b162187db1eeee10520930cdc707fa480a959fcb8253d420ba45357bce948b", "2498cfa8206ceba9942cd115a0135c3179d5cb455ebb16103bf5fce9f1e81a6b"), ("0052e5501d90da37c9248647eff9a93d0066cc7ec7e4808cc5165c22bd1513d4", "056b74d58778fa20340019709c6e1f8e0827f3b4839d26f59342aee45e531cc0", "2282e33bd545cb2f4370e77250c9966e42319539e084b928911c987f5f8b1d96", "0f51c1b603cdfca062fc3baac01189a416b8b564309cff2434f992dda5adac03"), ("0293c65a753a2a3d35fada741f2e36d5aeff879273f275a5c36a63bee2f0b91a", "171c13b38c0c20a170a6e8873404adfbca56f15b05aeda65d87615b2e97c971a", "2fab13b852d8d1ac900e9e6fe9c5da020912f6b8d0d3bc6c8ab9afa682db1476", "1f162b56d1a1b13ca3d616e4fefcefd84e29be02fe4fde9cd745fbac1f6ede4f"), ("2b87b6cd4b823e81136e0342ada27b2f40d3715c5e102256fd3fa0c1a2b083c5", "0b98d811ee80e3d4ed8a09f17260886bb96ab4cd38df3f131dc80916592711a0", "28ad9192830a30d1465af94f6a7b813dd99dc4f298576bc1727c12742f01dc2c", "1f0411b7dfc656f2579adb82253a9737e6a02b2d454c79a8c48c96f1075424fb"), ("21f916be1735ae36eed4da3f763925e3afa191c1b313f2797b32275d830373b4", "2c162ad88867ed6b3a11b8e18f37a965be8f004c0fbd59671eeab784a54706cd", "028f6be50dd7c48dba95aa05dfb72c64b8e5b3827ae58b74756d02d5d6b4a430", "2e83ab7339e588345e4adbd63015370f584c0218aaba4639e3ff2d7c09f721ca"), ("1829eff1b7151fc1383745b263c173f41e4124d4cf4de36c1d5b2bdb82d70ce3", "1a46eb033ba9930f2450556da1058652c71f064c3e45bd24a214f19c616528c9", "1a6f3c55321086210aeead1d44dc073837c99d75dd55bffedfebb0f4a9aa95be", "06fef540fca3272d05d713149ae3ddda8dd9dea8fe220afbfe273ea5d2edc9ab"), ("15b0fbbcb4510678c10812a63b020ee4345cd717af590946fcc3ffbee262e4e7", "1e419c12be2931821a43c6a4a2dfe907a79c0a1d998cb37c4d9cff96c98700bd", "23c7535d267683a2630635f20c0c046aba2c14cd65f733a25959d0243aa577a5", "0577a4e036e3ad00dd46732c5268c53a3547b48aa758ae6a7ac22cc9d4a3c287"), ("2c7542fb41c744a3510663b78b29480da9cc123c87e12028ecafc6230ce9354f", "187b7e3da4a0aeea794a1ad9e03850cf7ddf4119efa7d0550311a5ba41af9ddb", "093a01687e1f73d4af56ea6a187c5e160acaa3ac71b2095507fc848e26d2f78e", "0b92b94cf92848a5e3aa42da4007539ea8c793ed7ea32320907f33b288f995d0"), ("02c756f4ee2ca5d5dc4ac0dc2d5e33356a59689f39ce72a5fcd988e9ce40a435", "181c920864413c0dd964e29d1d65c93c8c08372e88205912930df55a6997694e", "19f4cc5b68fffbf92a6433eae69152724e5f642b8afa9705d001bce942d454a3", "03c5c50316ea09d63fbffdaa2be68facebcfdddeb384e9e425aa8ebdea3ee948"), ("031e5206e78d4ec09f64170d5f3e93c6b89c63aa27349bd64a62d68f466bdb11", "0f213922993387eab0f65bff4a23df8f06ae5f085292b764c428dbdeb6f16c70", "146f236f1345447b94ccd9431ffe94727c592e7547c8470c5ba3048e1a95b1d1", "19e860e91c25386ee6b0a154e83f908e164eb97d3587610d22e0f0818e068d7e"), ("2218570c775a14eaf5ebbf09d085490cd59f2e362b88766c104ee5d078e360a6", "2071a10b787ee5f0bb56630e7c3f4324003d0b6751fe7dbaeee367060adae8f0", "068b1f085ca515fab02d300ee4585410376a72fb77aeac80e6d9c6ba8c30ea71", "1edab1198280572edbad0965f5d036281b824345c832e5b80fb82027581ef89c"), ("1b711ebec4b44ac3cc036435bc1ee60b0f472ce221336aaa6b3bd6a21ed6ff7b", "14f65b14b76da4531c378131905cec2792442ec6a8cd4b0dbf8ca514f5b1398e", "13744efa9dc0a41a2082a6a6f16a589349ad2d82ce39637569ee26e32574f38f", "26bf5a78d10e301d75bb63be2609636ff1dc9be3c66910d06221acb09917d196"), ("1e09e52260f8bda7f602d81f12ed0663d998e28f68c1ee77272e7160b21f7f2d", "2f596efa3a7a9300a2f88288d953e4d8459b1ecd0920a6f3471b92a51c987e61", "23fbbfb9d1c529fdbebc3321f0905c174060b2b803529c99d04abfd6330cd99d", "26fff55813534bcfb88c48bc8d748337544c3062fd3a7198299a83b8fe4c1477"), ("2c4594da8361ad9f1f2d659debc4dc39f6f2d307162cb6867aa634cf5e51a998", "30168f3fcd302a5ef6d7076cf343a91635fbb411305aca3e11e4a4ba254ff92d", "275c22705b35a787f8a8ff686efab20bafd08124217a87ad6d07c1bf6891ccd2", "2d525124fe19474611a90fe8d0089f9654dd3e256807529942ac01fffbb22f9b"), ("13599b3feef2b85d2265f722280e832cac9b91c6c14cb4ba652a8f852b21237d", "1df3dd1ba16930e42efca298b52954a10e59415bb1c3cf4f51d222874dc67fe8", "1002070de4c84dcff102552ba8d65876b3c23ab138c2116c1928c909364d47d1", "0cb478816b4c447eaa72e44f55e462ec7516b431ea2f0f8e8f82562f6a4b8853"), ("1eb476f8d867e52e0ad97ab40fdb0e5be80756fda064fd2567e70fea803ec1f3", "0f998bc934822d77dc7c7038f0f2cf7cb4153fbb6676fc1c33ad57ebbfcccf3d", "194172549676d5bb48ed7834ada659813809707dcf49e4e72f7a0159851fadbf", "17a8a73a5eb9d1e3e135ec20816b81b441890107659c112fa57dfab9c0cf1460"), ("02b71d570b2477b873bbcddb802a34a72ebb9794068bd44dff183f6677cb9191", "0cceba7136d23011670b46b101bfc81e5c157e4bd73411b064e8e9d2f5f7031f", "1d8ed603ec56585fb68197ed2d88c1efb0cc316380500cad1ad99dec1d5f2a05", "1f03537af960a6caeb4f09a7d9977fdcf1721977c4876629c58afce14267ed9e"), ("0a001d2d9cfbfaedc454c5df5b781ba03788bd9a1da0ad3cdb15e50e7fa83512", "12180235a8cdf8a46ea1bfbe9162b70c35c2a687437bc49b0ae892fe8a498086", "02869724bb80b7ac76b8f1532dddc628c8f2d9934177ca22034c1f9892492826", "0511b6de352cbd71a7a9b4ce9dfa0439b70a9fd9cffef7d533c9a989e957d79a"), ("0dd5a8c9b7b4d373a4f0ff4ccf046b33a02544aa07e02e1415e2788d22520004", "2a709b02690f8c2b320bac34285b5d6833150be89a7472d237fad6efa7358057", "2691b3283eaabce78e6223705489776dca757e8813fd5f0e6b195adad820b1f2", "0bf540b7c80a650981dda9af25aa5eddea0fb49158adecb3324a79fdcac3284c"), ("084a45033cffef336b3080b4e8827f5d6fc231ab09ceff31b3e5faa60a3fe3b2", "0f54c5820ddce998339689a5ffdce0b4b9f2b4359246e7e08c41c555a758dae9", "14e3ead65d5e221fa852f7c6e4abf762ddca2144992ed297e7333b9f5fef70d9", "2fb6a5dd519b5daea3196f97d05c9db443a22591c5020fcbefd81620f5b3a5af"), ("181fc5c66fb879ee5744d5951ea338d8a9e4ef84271c2f0fa5d672af4398fef9", "272c51f20fb7fd98ae95ae83130508abd1fa4b2f6df592d85a55395010ddcba6", "1f70491b4c62380522612bbd6296d264ce5a285ecb7f8d07f87ebb6ba08a350e", "26a76c13ec33b630be71abf839b711d36abcb575156a2141cac0f6aa53c46e5f"), ("1f32b116c68409b6a1ddb525eb8f7fa6ead4cc0e910bdea386a92a3cd19ae7a6", "13ca6ea57babb6a091d1fcf6251601461913f39bd298fb9f806f7025afeb3138", "27bbda695fb93cc0886e6a981b25cc8ec07aff8af7ac023bb0e0c8c9b2b7d19a", "2b4c55a7689ea3219179491305ed9d5fa50767844fb5742b486490b13e2f360e"), ("21b40c5f3cd8adcdba3f0d2eea1cf42e328440e40c5dbb6f68def699d11def3b", "28f014bd87c1eecbacac606b0ab4a9b24af1dfcfb14ebc8e9fab5f675604ea64", "0a49df2af6967d54559f944b972e1cd76d390389bffaebb19e5197402eca61e0", "1d679b73792165615219a2b009ea61e886eca9a7e5c7906e5daeeaa7899b0cdf"), ("015713ee709a92d9d7bc1867544712f6f4807c05c4d452935fbe2ff7ab02e52a", "07b49c72dd65bb6eb103ad5714ef734e2a87d116c24872a9414b7daf06dcedc8", "0a6135a9bf4fec3bbd2f8140711117443b4826ae57c3514ff1a9395b58a2f4d8", "19ffdbb3c086ffaa5527eff41654772d9453e8e0c35bca0e59a38515c6f155a0"), ("0d80c7e3292695808f1d989d5c89ab51b6e9e94cf720a59a5dc28de71adade7e", "2d42c22e72b1049adc6b5fa95be4c351508b674193ff713825583cc02bd6a9da", "2099ef761ed96ccd82cd27a41ecf0edfb73d141de5dd04a3cd43803d8a3a11e7", "05e9857e7a5d055ef3f6c6ad6cdea849699f61773625d793ccd0d746a2099407"), ("22043f95bc02232840c8ddd2c208a5e330ec06efa5c87b6294d62e6160a3a1e6", "1585b928aade93d6911ee69fe7517a0b78fb14365ff67565b2a069e534bf831f", "23a791e02f08cd5531a4210736de9c01e27a295a7c4035bcc5589f584bd412ce", "099a03d1883ad5157bdf8796d64cd011b47b258268485fc16bdd76f49c1bed45"), ("024e67fa59d20ff730c0be047e24178893c9df964a3ec9591a7a7ba1de22a044", "297719bfe2a4f951b12ef4009f5f240f0b5bf53cea18754cae87ac21ab2b43d4", "262fc699e2e343d985c5bce20dec8a3fa5fa0bbfb155655d9a9d9890402c45a3", "0eda10a2500a5b3ada5af495e3f8e968d684625c8d67e61688807ffd2b1d08ab"), ("18bd099058a9773f383ee99b5bc51c6fccad3affa058d687024a2d6e436ef72a", "17c14929faf52262182cf50aedb4a9a54ace27b516c127f33b8d6aae8483beb7", "1306c2cc79c7ed7c392567eecce57767fc92f3f962825e2237f272977f179754", "06a6daa36c682912c6c3b1378139df4964369d169db94c185092eb66d436d5b8"), ("0c758e3e0438ccc963fc7777fcf7acf72bcf2544844ae915d24886ebab15e907", "017729cb1bf1cb672e12ac207399400f0b7e121d4910b88b7879ca8b5e511dfb", "069c40926d57050bdf304a745c148b8b80a06d6ec98182214038f5f6c12d315b", "2850c9050aa5cd3af36e82045b8717e53a0ae259d51a6486c60dd6b70302941d"), ("1f28abac6cd406a30a6e1aace18bf1adcd3dbb7b2a9a378d62e5408b2f9f8ea4", "2f2ff70a2a8961cbccd80d945a50defbdad20f7362dd417f86bcae46ef1d2b97", "1110dff6c41de24fbb5c954ef06051f98291d370afceae3074fd3ff3269011f8", "2476cec45e2765df1c1bca33854b5c198434a499aea96cf0873476bf23b5f23e"), ("2e93e51c39a555fd8de17652f7eb0db60c974689375b0a0490e6d3bfdc1438f5", "00500275c337a1db7c8a18c4c5cfea9f9f29efe4f08c2d8844a97cc0e3aafade", "2721054fc5c62719432f9eab900269bd4734004b8788a11f878972ff825a154e", "04d90e4f9bbca5b1deda169f15491a1268c15376cfeea09369d53867e82411ec"), ("1ce6727fdc3c9c3e8a6488c64b116cebf13c4fe6996bf45521aa70c7fbe6cd93", "15ddb5a69a5b9f8b0d9762fa14e144b7226269d6df3b7fc14d6df73c4d520905", "22526389e2301a044ef01e4aa78895b93029c10493298e2d6185166b7a3492ff", "2c42beb68e4c8ff77dcb91a56f6c75444824fc09344acbfe1eb666620469b909"), ("25679116e7a9fc4a035edfe26230d51737844b9bf40203ca6f33e72e6c6abbc9", "0071f9d46019a4140d79a042d7e085813efa2fba413956740a4fc227b75cbd55", "121f749ceed8e359e0718da9867b79e6f011d6f62c70e338e3c017336098455a", "2e3f492e4fd462c96e63ed4178df71299bd8164951ae921473c4d10dd332ee5c"), ("12788372d972f862786ff4992af58c53b1fff15ad0e8c515f79280c7eba9edb9", "2c16ed5f27f4b1b7b79aeaa2f59f60093ed29f406cc8622fdfc0147a6a9bef48", "25d93024c7dca25b0a35b456c67ee01189ed1f6facf45ed3ef9fe8eb3752e479", "0bdf0cb69fbf62206bb5c84a056ea9656901b19df5d2f5d072e4aa286f37c6e1"), ("19643ab31a44b8bba193710c48c60d6d8605d88f9a557021b277b5efb281975a", "146333de1b3cba1494b1d3ad24c240713fd26eed1ee18ca6aaff7def052df26e", "1513e460804dfb74b554d5e71938b2566a758e5c9061476d4a90d405680cffdf", "0812449f122b6535739759b5e9da7190a0fd7c577c989ae6ab03a2c7140b0148"), ("28b4c97114a830056eb9e9f6de80bafc5ef4fd7ff2964611d811f8202f82dc70", "0bf023608e466724d2bc702bcdffc1973e9b3c1a020defa6435e53f4b3e379f9", "2fb0368481356a5fa9e2a1175bf2bd694481ec8bd3ebef6c56e593d3d799c65a", "0b5241ca439961c6be55666d1635f0320cd8930bb983a1c29aaf31f1ef9d1dfa"), ("2ad9f308a3f25b55a9b87cf0bb1e92d368af1249edd8268d8a4e302768a61525", "2bc2c12d62ee8c6f30fe5ff5e9ebf860a5ec3b68840c7d94d14168984c435a55", "06cd270dffad52cce1363d05d3594dd368d218dfb63ecfc7d81d7625edfb0b32", "0cba57f5df4fac7ab8a8dc67ff7966c9c41524b1b9548765e0b627115ce3aa1a"), ("1d4595dfb4c17a56b793047969d5130b6ec803a0a8943cfb924a30ba91bcf2ca", "1284314961e4dbb595df0643d784d6d8e8ecb9aed2d53e80de813186791011fc", "10eec2891e8e9a4ccd5f11516a16c5058dfdecdec2d6d21e68ef3bd5f4dfff71", "0adacfe979d2bb4282e0ff4882171299695e01b740edcc6fd462a905d0a2af13"), ("01f5a60b844b9e93bce71a3b042120939ce92cd288bdf54c65fcbecf84560b1b", "0279765d445a436c6e64b1a361c25be4ff2107151aff705f123f06f180d9556f", "2bd90faa0a0e337928e94421737694fcb2c4e6de363ff9af4d31b0a7f3852a50", "0384f69a5ba7326811bb1a4081ce0a3f3dd9db4a3a879a9f1426a7c84af0c450"), ("23bc56c19a0466f71489e9e9b6b4894c6afb03ac610950226e8ceb67da4ad473", "00875cc1228ab88f5760b6cec0e5ae81cef6ee5f184681ab4844f7aacefa7847", "233d1648e5a3f6e18b796f20d6ed29097245278a450f98f3c2eb86ffdf014de3", "1cd56ff5eed0263dacef77ba1bceb37d576ee11426258980feccfe9974bb2f6a"), ("0f4bcd8fabaf44d58020c2531eb1e5bdeec2157a2d48cb72c1351bb02f622a0c", "23f975ab20cc414c10c88136f63ed21095d6fa0140f0025be02e282da82896e1", "0bec1dc2e86f3fb9fa39d4b67828a83e838d4ce3469183310b78c51b97321b45", "2ec7a69f8dcc95ea6b0a9e5107c2be336dee55fae7d06891bb26020ce20ad7dd"), ("1d91455563a7d152df661242bbf288fe0aa1c979771e7dfe58e2eb6cd42fd3a4", "26b48c57b8681d6c0a488806da11ca4c0f84f1b489837f9190f501b9c3b5767b", "2215a50ad45296c7a05a72db572f56f017c91cd2baf7d2b03ebb9d02aa6bf7fa", "0ccc62b9839d721f969a65acf1922aee5d8fa149f7d89eb9e3c1ec02c7970ba4"), ("11204582448482737ac9230996aa9aad3b2a073d0bf5e20e035b6c2c9bf2ae3b", "212389883a3b8a8f822fff2b08c0d9abf7270e7353882ae312d5660d04d812ab", "09fc4596878f51be64ec860df191fa996cea078afb7c551e9048fa1e58886b82", "24793bdbdd2df37628522c095e408e86a58e95cdc514f153bf547a35396ad646"), ("2141cb82eebf2f5c2cee5a07cd598e90a8c3179afed47efee10e41084ef21b49", "0821969bbbc094790390ecceba5cf57e63b3f984d770eff0ef7643134974dacb", "178c2cadeb21e29df6c885829adcbc997b56021151f74368d19fc776cceaddc6", "166a683de3048ca9ec6d720502e5978a4f61497bc90f908f6494fd6eaa175e09"), ("29d39d458c4ed0e502c061bef124bc63a1704ddcf6674857ed511ef647780f61", "1775c056173eec8ff410ca02cd587c3a5e392669dd670f4a7c5cb9a96d8e38ae", "234449338254aee92f584158bccc96c2ad7b59442792aa34982a7cf83d07bdb6", "2f33693290dc0a9927b840a92fff47922911d63f56aae77fcbe551d1e90a9db9"), ("275c50629e8d947808c5875a177391f3251c0f3f3c477d44a07c95069c131110", "25d7b20fb626db922383041045dc52271e2f826db6d1058f2482ce2dda17a59d", "1db2b85a2b5fba595834a7adb5433708dbcf51b95af02b815e822cbcaebe8464", "277854783600decbed6b3ce2e5380447adb74c7517d5c5c15d2d08f62454198e"), ("22f44bb63fe734f596b84ad29f298f23b6bb676bfb49603affc7af84504f8da5", "2c7bcfe63c9abf8a2ed33765a3cb0ffdfbd7247733906db275b3abe82f148bb7", "09f3b382b0f49017338b8359bfe1f0ee0bfa3b6fd853f2fe066d6740e891f9dd", "2d2620de113514a8b0320d0face2c8efe60ef43ef3ab4eac4901ea690621c71b"), ("1d127d73f970a8da2cd603921103d0d9424097b3f59cfa757dad7156ee8b6ef9", "2e37ec4e3ae95b006d19fa3c3aa956afe39282c0a52c9237cba53e8d74f49fbb", "238dc6dc05c61178f7c0d4bc12c2193f3ce3373209476e78c38aa7dbdd16a6d7", "299d9390bc5f434de2eb83cf88f7554df9709d229b9e1810bf3e2d025268f955"), ("0d59f7075347f4277603de5b4b4e31d921cdf741ac51183f2700225705d6b8f5", "2b16b99541424303c5e39e863bcb711772d9fbfcaaba316b577dca38f519d671", "2f02c162ffdb3ddbf909ab0417f6ad3d57e93563a4568c94f8a6f9ad2bcd38ed", "212951a844df83b2962f344654db620308e89cb6f0336b2050b167798cb4b169"), ("00c881a79e3398184a235ae45dab8802afb2407beae8bd4d5ab3282cdae23560", "22f6fddab25ebf12adb1270d7830295fac36dc530e00bcd413b70a5c94a40532", "20b67d47325308e651795befc739e55dc5da03e0c3db781aa212ab8ab6753872", "2a7b9e5bbe07c53ad8f11cdb205443db1651f2184d78c10288dc34181b4105f8"), ("03b09bb8507cea796fb8a1c248b8e4279776aa7c2772025916ec90c8e5ae16aa", "07317d1301818b093d7f97938daa88b16a5ccff6e52ba6addf073b88c48deed5", "006ba31dd17a6b7e954f1c3d610b10a071304948ce9086a0ddfc6b2606cfade3", "00783b621b5071be10b8fb893cfa2867997d9a534708e56d156861d965197e6a"), ("1ddbc3cd830b7e5a7a3dcaafb1ee06a45d189590b485af436ab03a277e00f96b", "11d41c5396d2cd584bd09e816c50caa80b9efc6f4927b0fcc18c18fccbc61f69", "1cb5be7ac09595732da40f6a3d23b586c106d19e08c5795d585f9770c4bcb066", "083d9ff5087de9e98658775adcc7c8b773cd33455871b3316a66317acac546a5"), ("1db7ebbd63d8f2d8efd78c306bd37469ba4914463447ac9abd611e983043714c", "125a0084836041cff12da46c96b987621e613fa52354edc0b50db696ddc688eb", "2c400dd242a64a8329ace0f216c8fe7f3d2cb38a302cc971a350ac89c2d4859b", "2ffdfca5332ebbea3fc11c862ace4a3d7cb1374a9800d81f2b552ac8111dd95f"), ("01f5796d771b94999a6ee8c3d9afde28364502bcdf8b392ababb135ba8241ebd", "1b7091b93512c0526625063be0bb54552b89f93688fe19d25a1db8c8f8f0783f", "2419c1568e51aa5d95114dcc81c0cfefad6962740996da3678f3ed4decc571c0", "160405940fc2a441a058ef8f035f1ee36108905024a21623e2c74d6018d25224"), ("27fc794e5fe445ae63b98f220e21ea94f3dcbb41d6bbb7437a2b1961b63bbccb", "1370542bbda8beac354154b647378cf07bace55a580d144245d540c868cfdfb4", "2c25fbc63a3ff443302e5601fc29288087b6cece48ab317b01531916f701dcce", "253b41a6534a9d10412f4ef0fa4da629f149e28b772ad961abdff749dcd22c87"), ("09fc22e0cb7417025696bfca58623876d13bfd0c2cfc72942d34b13e77beb866", "24c4c9ff43aa98db2db9a5c8a9627b9f8eb15d31115cb98af1af79753f3c45df", "059e68319fc263da328244f3f9f244377b8ca2133dfd675ac7739b023849938a", "10bba9e467c1d9774b1d92d495677df2974ddac309f109c5d8827276cc2b7986"), ("27f9b4db281952e8ecd643265f0fcba5a9bf028083268a6693ed8ddbc8f0ef48", "00dfafc15871b46bbe2c7accf23c83a2e51b12c0d275f00d7f1889617ac80414", "2a22443e3d15d7ae141840dfe8de875585ddf12563be0b482f4c7e88ff12531f", "12a28a132fede66d76a7d801934a71b763f77b8d2ae4b1d3e1ee5f4c8ab50bac"), ("195c956b9cfde67c3ef002774711fc34b973e7e835a497c500f091e1c776f17f", "046f491a0949db24755fb680e860d8394f8effa1e5269dc025eb01a34f6cc717", "2077231add304e666f045ebd5d74ee26aa72b814bc5d03ac4e61f015b682ef8c", "1a6a84bf73e29bb686384cd4a06474b44e678f6d4c74799dab286ba8feba8d86"), ("00b60c176ec24e7a14414e454fdebec4d86278ecfaa39b004ca19a9b41e59b2c", "25c640f520a4cefc784e05e497f034e780e8cae36f1fa93cf8fc307dd672a605", "1abf498448f6f0274b5eaddb1049b22e87c163dfd8f3f5b18e0afdc5f2ece724", "2f2f4cb04c80b0a070e8265543468c0d1c7fb13fdf6ad07cf84daf16c65f6dde"), ("1162c8db422e6aa8ccbc0816a3c198a4bbdaaf6fd68d2a074806b776f5ec87f0", "1d8079653929bd78400e08ca264a01f8e615a5ca6f7231d527f75a46feb66c26", "1a7dd90f892358520ff93820d192aa9d39926e78d91262621aa94a9ec8f6b127", "0ce5a32f3c9a5b7851c52eb17f91cebde144f7e6ca7230fee41a7095005a5079"), ("056f99cc695c0ebecaf22a51148a0f837750aecae43815fb823f10bc0b381f49", "2c4b9146455b154275d180353d611f0e95a7dadc584b4278af71b677995c278b", "08ca76b0b6cccd572c8641c0b8c1b2152c3d2afe618a8ce516301af9fcf435f5", "2c015713bbbb759d28385a4a09ff2601b85583bbc86dcaa26686a06b8f8a5a2d"), ("01dc39916546e27b4638a34ee9b4c138920a0ee903d118ea24b7364f6ab7d541", "2ace01e5bc4f3c54146e36720d3dabb163b700fd6cad853ce016f7b7e6b47b43", "2ddc5365c23163bc7c72678b095c5ce8e2718f88d0c68b5abff98e66c1e21b23", "2fd6a3d2e9ddb0dfb11e394e6c4170a748aa5cd15c226a307a0768d65da6a589"), ("1313caced0fb8e085d9e4050a207bcb21bdcfacb6886044a04d4e9a3b70bfea9", "2232d17011202060dc820e170be81ae728d7e13590eac860ecfec7e29672f05e", "2162057551207d9a66bd801eadff1bf69fae173fe2e8ab55ec2774af919777a5", "0634a68de1fd7303a3b69fc5a00704adc2df0e53d3d2829c18c84e171b5edfe7"), ("25055ac23521102b2eaf78a898c2b7f91603312a0010b775e1f1f38505301977", "289a87574a78a89c48f973a43949b44a2b4b0bfaf6add25d0711b6bb3a7ad540", "0f993d45c82851a6c68aa0f5e30eff06dbbbda99b1f202e7f94901fa4c4394f8", "0066b59b8e4c069cd530825126ae2533bdba24a1a075f5f2eddfd5306ca11fec"), ("1e8455f99e58cdc4c67100f438736bf5a5aa4b917abdb2ee953c4bf5c99d5c75", "09b8cc480d7cf93733710cfa6ee0e4054aa40d064d52a7c35e4cadda0afee6bd", "0c7a93b6792861991ba778e688cac6b5da2775e31870129b80a050a0cc0690a3", "0ce15771567d530d245627db74d26919d9f90cd274725f6fa5a5a14d788b6983"), ("299475c56e04e1325b93c09db5d216773c78c7e99176b470490f77188c5d6a2c", "02fb4e57c0676ac13c2f73de93b0b6df1c9d578e233b99f5e0411d5abd389bdc", "0244f4b05d94137e6cf34c3fe402823ff4dcc55f8eb30b5f69a47c65e346d5e3", "14cfccd1ae2fcf32a37d34087552d9443e12fc9d07650527a5fba9d2d5e94329"), ("115b5b2cc663f6682a87dbe19e3a9609772f1353b5e9d7362238efd46bad8016", "1c11089237cac0a3f4a4c256056a3154231bc4d0a2eef69e9dc4eac9497a2352", "1a769206fb5e0b4338aa8187cd2bb96b602dd89e6415ea767abc31bba51e5026", "11b716ad414b10ff024e8269fcb23089b02642135368ed8601eb24228aa3d0f4"), ("0b7844414b6d3d13ee6be0eb842c39d99256468f69b9765a40cba9077281aa1d", "0ddacb2b8dcb23cb36f1c52f9097283624f432ac3a7d72d590a4b735537db53a", "28d3d03adc053329a94b16a7770b42b01891054ca4628b67153681f7b3bb1732", "15d207733ee079a7213efc739812b7648e0eaff6daec38759582ee27206ecfca"), ("02746a6766e157ce2254fa5ebbc41964b6c37f1d6154d96337a02a48207d23ab", "2361b8d952ab121570fd454681f9bf5b34e8fdfe02870bc5604e4fc89d000db4", "0ba90dede6e2acecd14189849d9cf0b919ea2fcc828dd15be96adb28ba5f2414", "0aec80222dc7acec3d0a84571d251a4334ba82e1dd215c2638e63007fa093ac5"), ("2deeaccccb97d3bb365061b65118459273beff8f16e8d86ab3b66680a4433f00", "05042e225ddef0ffcd27ce549cb346759b164df1b99acfffc8c6ce476e351efb", "1197c526afb874e464601db8d3d6784ad37d8ff00bb2f97e78692610fdab53bb", "19a25b1e8f94fb75dd872c49ff0e9a4051d9778290e2b1eca3a3baf24ddafba2"), ("284c220d010d74241f4b43f41c96e57085b41387e73bb07bf307b5dc6e50a3e2", "2028adbf1586cd702e91b8d29cd97251c6d52dfc023e33c057dc5e5515b0facd", "1fe2b881071c2bf3a123b33d8e9d1ceb0cc741aaa11dac116c7ad85fd3e46a14", "098fbb4de2f508a475e50f57bd3dee4f201016b97461a45ffbb103e17ee0767e"), ("068595c7ee71c717a5f3244c3bd7b6df7727c8ca0f5ca2994eb367d5c36a29bb", "17d336fcbe05955731befa2fe156d5b621b19a952f901aa9c34848e0b0133aff", "0d2a1e1e6c95fa8ad9c5166af594702644b04229a9331c179c2dd0a6db72a5c3", "04f2327e3b50e61f8f7a76a4d2448895773799a5987f251c7672e3bfab00671d"), ("03c20b3ae191078e19da31cc750b0c8aedb2b982d0b017f2b4e35d43f2a5efdf", "014cab373231f3f48526647415cb1d80ce34b26412a3e154831c75d85e993d78", "0c3aee8939120a6a0823669a36bacb5d1d200ad887659078727a8c6d0900693d", "21fd5faff446d1491e70fe79f953e54d6d8b22c9b11cf0d20deb56e50b0989b5"), ("0f5b65fc8954292d78754e6600f3cd227193251abf823bd287c3635048915115", "1c164bed22696dab46ccbf26fda2539ca7ac468725a2ea9c0781c516d0caa1d9", "0d2b4cb68a35f62403498c8f8154888da2191eacc2a9485e360154c906b8106b", "09aafd8d4fe7121025f52a430901b5e513333e47372d30224d5261407dc5b940"), ("086d7fd575746b301ae387e9fe9017a769c03d6f03c01730b907a33da0331e14", "25f9f47c3a7bbadd1db34f80b6e081b831d69313320c42aa8efff517306f2c31", "0f28ebb80dd3e180d5af23a0fd2af20bad447c46d621be15ef39dd4c518bee62", "058ccff9550262e63a1f6ec16d04316cf23e5ebabf2d216d44b09d131601f4fc"), ("04c7ee40488e56d910f27e34524f6c9eea0bf36b4f586e9f142b8841ee556080", "16340d05506c5315e60f241c367ffd354e099b3dda01a98c1140fd43c26c21b3", "1e09deca5abdcd493a21ac0dddb277148c1c3d8dfcc8d497e19b4787c2aa718b", "0e4c3fe502aeda55fb883e8f04216beb9b58a2202daeb0776f65e63d307ca3af"), ("2b7315ef2e9f4483d0905a63c513e6b0216c392487a40d6d581f8acd9dddea7b", "1ea8cbf8615d6bdb64787a8dc830903dd2b5fa3c8723b91f493ee809b3d9a0b9", "2b0d833c98aa7c0f7299cd1903039137b5f4a819dc9a6e5789a9499c5a31e67b", "1b5dcd2b5821d68c09721698de91e036bfbc6dca07005ff73e552de6bb6493c9"), ("00ecbd3435a1cd8a08edf1024ef703dea7613c62cecc9b189f86130ead822466", "2ca23cedf7d6afe8eef28dbcf6319826eed150c5217abc5a20ffd25b9e9fdfae", "02d64d3144dda436c0e29db98560152ce55b0e5975a1d2a16248c8fdf3cfd348", "0884c3e3fd1ba59d5139bc04ce1b82c42876fb86c87d1410046e3d57c3f7a53d"), ("19c9c429c6c93aac05cf4ab2ec411459cf334038b69642062df4df7b9506f384", "14686bc8a77a5dbd0272e4ee4feb3089ec694f63f40ee2fe4b3a470dc45afceb", "2e37e7566e524187856c980ef956b90dc0734ddd11e178138a848fe94a16395c", "1419f2035501893bce079229b5bd23e47ca7326a33982fabb3890d77de71190b"), ("0cd946549dd264ef62a0a0336dea0849c3e4a58d14b7b8ebe51a74410937ca2d", "1524f246b603c8a6b0d998d3499d57d24c79868905642cc21b529b913e0abd59", "043f36bbc8fc4770a4268d1cf825e7758ba6755535de882be2147a66b680825f", "0fc6e8f01b8e4b1642ebaa75587d83f344b25a88560db7de98b00fe06eaf8672"), ("12f0456774e103cea5d9b372f0fe2282bfc9786b57f64c1bf14a3d92b7f4dfe6", "05da46161dffee4f6628b345e1accb61d1a351a79967ba2cc71b6bc836bc1d56", "02b7c8441fdbeefc4e390101043f7b8f3849ec1d3ddf06c14f0a8f1e6a480be6", "1e33f13a361066e25dd9a97086b37ac38a11872ccff5de9892e4439168f77e01"), ("1d525051e852d8872b00215c3f845a65bed149f57c0909e05a7d18cbff06a7ca", "2a112032e5d1685b24a13bd90ea5232c556a1fd7b6a2f6ce7407775ccd0f4da5", "12a2bb34b21fdc697eb7eec36f5e08af2c69482f275cd32a266df0cfc7dfd611", "1114cebc5fa8908efc84c37a5d125bab3d26889a510b0a82932dd346be677960"), ("21fd7ef67171a9f788be877865b31d875b051bdaed738a98da3c6c5e54fc843e", "0ff7477b19546af2a45515822ca1e0ededd41c8bd72582243528647ea8a5f5c1", "07fb158f92aff3a1ce4be7c2f3197164820e0d6d901d9aaacb9b2b536bb175c2", "19761bee6d1de8f23d3e2835811618fde47521e7fe6a798bb4a9292b60539205"), ("0cffac9d0410c2510448aaa6f15494f79a31ae65a1324f9871032ff8278ff00c", "136c9c19244bba8d08dbe7a7a252ac305e6f86ea09fd355a4593c6c360cb2c68", "15ab24a88938110c3a719cc0bc195bb26cc54ab66e7fc7ea884a394b83313183", "273b9603985ea33ef6231229282181096b9d2909b835c7758f4ef12ba925d7f2"), ("29b08281c932133971c591f025601f2723f1bee41e6148e01d1c5d00dd74a57e", "12fac0377216ecd6332786f1cfa597b6e94ee2da565b8059a0b4c40b61043c92", "130e716664de1d2edccf853661046e05ed1c90e2f5b3837747e477c8b47e5456", "22a6f7c60027d8fd9b1d77203e4cca1e1d70ab8e91bdf9e82d07f23f68fc5e00"), ("2f98bfd680f0985f5e01c25a8027f20679579f83a636b45930c55dd2a7c6af60", "0f1f0278f59803f9542525e6a0ed936485f1214e94ed76ae0a1024f564c5179b", "2be419fc9c2ae1671ef2e15a200291f30b1f58b1ecd0491a331d9ee89ed1fe37", "2670f1dce225ba4b726bfb4c2047cb23ff63b6a1356d3f5b4b888f8945de2127"), ("29db1a48898a50836b8c5ef876b6c2564696c603aecfb4853fbfa80f04b9e3b3", "0bff0fbe91bcaa9b9385757b376ce98c91f88567fd853407274aac448546eb50", "247a13e0b3c18479767dd134f75bc0149c025715dfa2cb257e1b99badf048a37", "273132c9da4f6a981b9c231fc57fd797ef47aba4079eeeaf72928d4c6ef7498b"), ("0e371620f78a30e32f7a7b5fa64abd57214542a5d0fa40c2307ae48667c26866", "06ca6514531a3013ef1be06cff06f704caaf052b3b95b7dbd4418fbbdb0bcfd1", "146c8bbea6e7fd00ca75bfdcc9fcdb6ad07b9f8895bf3ef82ade19382436b4a9", "1036edec74d658e0bd31bb9755eb38436c0766635c5e07adf94a144df16d9b7e"), ("1f5adda802c6ddd1d07b0b694a783ee7792b5fea62c06c53929725f43ef91350", "2d9c0f3d72811c5d96370b2ae4b8a9e16c7f2bef8c5c025c8aad556c146c61e1", "1b48d25b5551d04228b48ff73c5ddcf79bfc650dddba27997cb84b383fd29463", "018d69d99f5ba9241b52fd9e7577acf370b0e8eeb1c1bf247d39ddf0b25948d7"), ("09843a0f9c03ea6c6bd8cbc787b68e6fd4cd426e396ca736ee7a4e87f3f8e595", "114cbe9f825de5316fd419edb11660a5e2312e5a7e74d58830d91133ec87a8c3", "2aea20bc9631fb12f90bd6c20597d654dadef072caec576cc15294610b659335", "166c53ba2bb51d36a37662ff6a79e44e4c043873be89fe34ef693651746df2bc"), ("18987a7cfe48d4d70c4e2af7293df2c0fe663cbb7b694bc7b06c1dc60314c0b6", "0858116d2dfdebd0ad461910bf6a1471585422a09d52222584829165030b1a33", "031a0837775d78ac841a9b513de543b32f53881937f256abb27a0583a27db6e0", "1091833d721611f7a11c5401753132df51dd132a99a0aa14609e18c2edbd01d2"), ("1ab73f3f68e3e7e5bd43e90d21464b60e7f53579ddcd4f777a0a061f7ded6014", "0c569fec927e6f8b378ff976dbff929b1f31d21fdf0427a411006be0f265a1e6", "13f47ed76de6b9e585d49f02e246d930ebe97fcdf3c1c7fffbe30c385d57d6e3", "16a195a6335032a2972e956c0e4432cbe80613fdab0edb45113373626e8a0c01"), ("149abb54d0d6c94b8538c75d02ba8b5eeb2a6b9de7b52c21b2d42560791d1c13", "099b2d39afb8b1ae7fb3ff916ee2e2e697251f5ddec4bf1035717d5916daffab", "1623c52819348d8fc2a604a509492bc69da5dc36701a17f69aaa703a87ded55c", "07c7c1bff904d1be147fb57f11745a93b0dae3c08670b85ac43777a5bdd5740d"), ("1b9418861dd1d846f423aaba7ea078796265dda787f998434f554a74c90e1e17", "03955083b0d6fb32b49e4d22c6bff6100ce5367b01fa7f90bb616100f41f5470", "0662930452facd6c486e6f2b4db65e49d24f6a25bc3266a3e910bf921cf9d35e", "0d92cadc9ce150212a37d479936a81ffd64bb184cd8a806acc4f30d7dcbd05f8"), ("21be909edd6c16fa37aca0db0b90a31ba6b964c2cd04e73ca802afbf93407999", "21b9e9ad42b0008ec7dbd083b791d0c4be7fe99e698714c51f6dced33d3c1747", "22b77ed6d626187b03b1e46c56d2c72ef5c838da6c14ad2f00e544643917f994", "12673632a81d627eaf16e290e0283be89caa912e46cc03306428585b2e47c500"), ("0f9c120970a949a3cccafc430996a6aa460d0dbdeb26583b4c0ab0e8327232a6", "00871cb63b063d3a3e7840055b342e0e57eedcaa0a9dcda70ba3fcb0e1faba6e", "05cdf53f35bc0a7342490fd4de3393c47776baa3ed87b8d486f5b0c401db051d", "2074b575e7ca6399267b585256d245dedaa95303c6718d6c6b658b65e2bca248"), ("1870a39b5e54e87438ab279170dccb246460c92aa3a35483f9883332ca2e56a0", "00fe8e5cf3fb40bd660e742197b8445370d078b56b1de78dd9ce5da4b501dbb5", "1711e7660165e58aacd51280a8fa57fd87fa55297d621d377163090fb058b9b2", "0eb2589e0bfddaadaac252e231311c3cd5f1f92623acec882f49714b6c27b010"), ("161087904341c85fb9ee14697201158ddf38a0d3d4c087190574eaa14c307c75", "09dd397304f55d32574356d25da37b913248cbb866fed9b8e4c3d46b3d658587", "1af5ab36fd828b7c93630a1d8326e9dc776dc1b0021ceb48beb37a005585324a", "276f96772845db5c6502b100e3516092b3fa352c55ada50b761eee5c845fbee8"), ("305c827e2796ff85e0d70b9cf5b1799036140c50aa369503d9e1a10919812a4b", "1188cde238c90f95f6e6daba5ac270baa63474a495745879ccc8639eedd9f7f7", "1e92ef0a047d76680b88dce27b88480bbd69217e2df17cbce9f9118f4ebe3953", "0f89a819cfd2a61fce47995107d0645a416c6a402ce3bc317f61522c79061603"), ("248ab281b2f40304766b8aa52992d093a6943803fd6a03303a1d8e397ccff6e2", "17ee20135bd8fe9e2ebb24b63a0ab7a1b921ad675681059fd7c82cab2dd200b9", "08a3d2eaa1f0b24e61220e062bc69d585592bd7c08f391f4fb15fe60a5d1d19d", "2c10139923698967dcc78c384e663c9c8dcd7d3157f093aa88df861cac4a5a6b"), ("099bfea6df3e17006ed492f0952061b24c6c1c7c54dfe0468777636552377467", "1c17c6849b0c3825a423599869f9572c2ade0a9c8a28f56d66d46c45c587042b", "049bad72ed036d07d8946b8e2032af8071a3035371845eb49cedf6478a08888b", "10d0c2577185cfcd36c62a40be624a7939ac9dd2e0f6851db0d300c4291a0709"), ("18d39b08041f29a220c10fd3ab1844ed4da720a5dc4cbe9468e5cba5b6244cc5", "282ffcdaa31d15a61bd2441650b9ea7ab43c4b74ee9e29dbbe9a82331d1ff34b", "18f9a23a52753d2736b9b075a7e61d62b0e916ef7b311d9bfd82c426dff8c7e4", "1202fb04cfc910994a24ff1c157d5aba8a88e3ca8b5998288ca5022679a8f315"), ("23bd2883ef6047717b8be9d139fedd9668ed2faa8122028b829f5ff188c41179", "15c18878d9d36b5406b28538d5e9be5c001575f5da4c6f87314fd7d9834bcbc0", "12bd34297241a5de8f306b9baf7a6c4965a8228acc6c57655b2ceeb50f4e5f0d", "11b29833256d01d69e7b799c058a8cd38c534216d259738e386081035f4bff1a"), ("0cb3454f85a70533df3e0fef124494a574b91326b0b02370daa991cb99bb6362", "0bef5f92758483e59718d6f9f32873ae5777a776e020dcdc75bad92bd9cd055e", "017c1fad7cfb577a109e08725d75837f4cfc1ea8923e9f74e27b6bba2b1aeb00", "1a1b31593911ed940c997acfb3034d1ff126c5219bdc8fd26f945685f194a48c"), ("13bcb47e8be5237048af7e14c706abc2d93da07536f3e1475eddaf730d500154", "1d7cfec80b3e38f05b5deb187050ddc1fbcf2150d06b813e16021f22a1c29fa1", "0c337dbc2c51fb12303eb8e7e4eccf8ffdf206dc831e50b21dcc1abc8459bb5e", "10e6f68d3fe53cea590e111c0326f571ec45899a0b461341738b3007120c0104"), ("0c2d20d57ecd4518042495a7e6c02e9a5d6cb931b8ee1ab84e6a936483192939", "23f63aa3e07aae4cce557ba71178dcd7cb4794e6a2e1343d69000e0d4a1e318f", "21fdc7e441624976d2dbe0e7802d11604937c8f5a31a38124205e5bb55dd9854", "0f2d3eb69147cca25e40a09309f6a9dfb048da7d5188e2ad3fcada86a953d675"), ("0f750d4004fe665eabcd7837692f0cd024e4349644c8218cbdfbc4d04b4db520", "2412e5ab2e71c473e913dab9d37b600fceb7881c31fa0821822b938d232635b8", "1118700f7f27bd5699fd41344d6d764a1351656188ca4c15376fcc09c7030bae", "07cb9066ab46629298a3d42e8ddbdb7399f47a77c9be6b11636b3ef4be4f05af"), ("0c5d26680c8d3f03305236d7fa3a1a51d86ec6dc757dcbf1844d5db9fc0260cd", "1a0995d98686cc6a941db88cba2847d63c8e1317ee68d1b51171ee7b2466b8e6", "0a9c09b7328c3619c25339e965fa2d962660aab4339e6b977e8f205d1547be7d", "0706a899717c93e84a7d82bbaa6e60781dbdb589bf30e2316109c77020041a78"), ("10d0f8e12418cf6302d7d38c7b63d0069311f089e5aa9ab60b0d2e8046822d08", "23466908bb7ec3a6667a449dac58db807be1f69576fabc3243e1d9c1f394d918", "01e62cc0994120afc5271d7308561110fdd3da305f724c2958c5fe4bbd0f4eae", "25a6ccd50c14bcdad0603b04d2a062d6b6efc5a909d7330ce63c85ec1904d270"), ("231641e696e0db286ff3987cf00004493b324bc6a9981c66b7de7146a29de763", "12c73e9114aea43d113b20e0dfe8b2b4f1c0cbe5fe5124a88b901292261516e8", "2da8c8f6fc83e8c7d89559d3809c9974578812d931bd91daaefb7d1f453a9022", "12c655811f6c92003b3ee3df00fc8a050895e0b65c58135ba07bbe974768fc5a"), ("02bed54e8305eaed0d2ca19490786dbd79b4dd76ccef15d806afb4060f38f598", "13819f96ecb42e1b68672cc8ef45eee0d6cc3f80d4a1a561f1551b5d11bdfbce", "080fb38d56a3cd22136c82bd56245d1ac4e9078f6230668fd98be5453a6a4c37", "2a1e007195dcdc865ab7ff9092b013b282a1810d2edd733e162de230d17f9ca3"), ("05083d87d6a2658943ea153a7da281082a4a1fd28315d2e28f5d2b6e8766df59", "223c4b12b74163820f864f913910bab3a96e52e542e70755d2adc79839a8c5be", "263a0e3439c4f3e6d6554a5ac41739f3b6a546e08d1964fdf17e2671e0d1b50d", "04a8a0b6c04576d01a40ebd9db4c2f5d1dcdc7c52d73ddee632aa94599a65a3c"), ("091d06a643334319aa81b6ab15dd0b48172be4202230fdb2d72e873cecd27097", "187ce6e85fa3f9c28de2e67cee5576d6894cb49f4db7837105a12add77372dad", "2f01b18b53d1a57839f8230281925b554116579934c17cf02271c93903921b32", "023ea99caa0d6d1ee2baa0e6f2933b347bd509ac26e6725b08d637ddb02fbb85"), ("233375ce57fe05b2826aa6b71ec9a2c00b7a16d443d1430658582ceb852c205a", "23fb2ae2c8b74b311d6408d0d08846909498f1c926e976d0279591ceb1fde79d", "2535cc8825be46114c3561837a319f884341200aca2b7c3b79e8f63f78819bd0", "0c634fe617ef11e3aa662304b398e5eea65af084009f04976fe7de77007114a5"), ("15a198c03d6af159612fdfab1af63e112860f37b2048ebdc8e51af3de711ad1a", "13c56cfd98aecbb10bd528f99e01f155e3c6483fb67ffda35a718dff0a1d33d4", "166a4f10f11157f61b697ec840770cb9d4516c99ba8544923c7ca62608dee895", "2227cfbc9a305b1bbc3db17f074651bf130af76fc4739f3cf5b1af1fc138b82b"), ("280015eb3ad4e6055efa6760467886331a41470a3f5ab52e5e6c1aae80482f8f", "20a8ce53ccf26c800e67d7e8420cfb1eccb582bcdbc173a61e14e194971150b1", "1f94ed83f504c69c5b80a3fc7a7f11bd8752837309ecc4d6ebe6141f778c41d4", "122f0a53a318a01e882383dca16e068f53c7ca97d1f94f86e601ffbd4f3c8b35"), ("098ac028f63d476c207eea63a43a7c88477dbef8e45b816701f08a6784adef9b", "145457de555e89229637ca4461024ee5dbaa2bc2a22fd7eb1cc498c772ae9ab5", "096f45054fb9ee747c09998038583ac5575786d3b1bf6b6bd0f2e7864d83a0fd", "2ab9a0532ed7976df9a0d5e5314df4756c69f5e0cdfff8b022ff36c0fbe8125f"), ("21e9dfafcccda1bdafbc37c009c22a85d0f141ab19e5789db2eefda608a243d3", "12a5858d5117f241f0a6d1a8689907f141827fc4d93df3924aa8bf9a22abc9e8", "15400885ecc92e63b4b061646e2cba566a6340f49a9b436e1109d175a6412455", "12bfec87f87bceea1f7c25bfb5b925c537248c2bc431fdcb1c50a30d820aa9f7"), ("07aefd81f9eeecfa90d6609587567de107159509f5b678c0750e9c1a17fa42be", "189eb83556317bb780226027375876b5f8fb518b257fbb1d8883e287728f2114", "082c26c8eb3ae4337315afe85c224f94f10b6399037d97c5cee0de0c363480fe", "0e247c38d22e6b294e15fd8f497652af379430dcc8f2bf878358bce9fe01b0b7"), ("275053c4980891dd235971b2b2c782c14d44be73aeda7904c788d572a4627000", "1744ff68f489e5dc09539cb37bcec1b8f2ee93c7ccea32592ead441b21c25301", "19bfc94808b6b1b36a65af524b36ab67cd46753324c441b496bd6290bf36a731", "03cbb62db938edc9ee63b80cc7d4154aea665b07fc3d6ecca2365a240ec7cdc8"), ("23cb1a7ac8d5b7aebd2f517211f6de8f7f192a26195ca671f5f5b382b505968c", "05b18fb7694c4295361e38b1a547a6dcbefc647e30c51ad5b34b321087849eb4", "1cb9ba1e50a27340752107439cc947a759a1e9f1b122ba585a46553430e6a2c4", "11c9612710f334c171372458fd6f8bfab904503d9f55b059d75118c6cefa987f"), ("10309c2023da7130d199e676b4cf1746de477ed41263c3627dba7c05b94fbbcf", "281f4def6a2c676f52e7304db803ebfab6dc16de4bd7d9073c7cf1c18c190cf2", "0347694b64e72c0ae183c0423876438ec3b1f2eb35ff7779b1ad1309c1cb465b", "10b7f4fb147be10410f1b6a5fe55d234d5f3771a39827cfe8092047e347a7608"), ("268bc98551fe968a947dbff3f6b6e4c6b92dddc378f3a5a3eada35a673df740c", "15bbecaaf93475fd7c38e5de7dd35d8ef94751a9aaa2c371733ce03b5553f9c1", "013ce2ae609d0115937aff1740858bbd9e9baec4e7096d1bab9fb11e0da85f74", "27f6fde9bda5742f90744ad0a18bb95def35b24858d15609d6c946f07613bc6f"), ("271f2ad276ea4a75785463bc1e42b34e24e1c6da82adc2c86c6533dad88f0eb1", "162644b5b5419d72e26f59db7f4f463b8bc7d6fa8fe20d04a41c759ef9e8e141", "053e1ed650bce5a59a1ddb2cb57d4a460f4263344c302589f4bb45bcf7b595a2", "10158cb4382797adb5d3c7a4a421b5b563aeafe16960e5077698cf783132122a"), ("2fa3190527a93b6eb4a53a66ae51f861bd2fe19d56bdcf56e92166ecd9ec7e01", "3025cff470f4fd4345cdd6b2daa7e71a0ed93a599e8d0468014d21575a0aae0d", "2a406cba1f53f2c37f04eaed39c7b9402ea8724d93a9de688219dd5535974506", "2851f2ecbe3237ca0a4ff3d4914d416b5251fda0c52c3ce5d3d54d9a88232834"), ("2535ebe384133746c7f6d6beb6427f8291ea00c64ac85348653b51c1dd71ad43", "101caef188d57ad6e0693b25eab9af6ac1a13074c645bd02fd99e9467db219a3", "16fd2dfb7eb5f2dd730e4cf080466a997c8a024e31ec4ca1a555b76eec8fc3a1", "0498d5fd4a875a75b2043191d295b158812bc31e649142a2dc3383a391b69fb2"), ("305f2f80af6d7eeda286754f58d0fbdce051229d137499d21d399743ddbc4ad0", "1b87d85d9b018abb9214f40f52fe18f94d3985605662b183da7f5e21cc5a008a", "2713bcf2bf5bab50b711cf5ec2723d2a4cfc9906a640d7d8d14d401b591735e8", "0722661e603392a6f3754151f1416cac6b4586cc3ed8b174e68488ca7a663411"), ("15140b5352ca3158cac9e9d416a45a1fdbfffc10bf1a24bdb4626415c3506a6f", "03ee4990f995c4d043f72d13e6de5e3510ac715aac918972295b46accb5eebe1", "0f3be718d79c8981114c73438c1efce8ebe62acede7ef391b48f107734795440", "0b35334ad9ce6bbc04315389ee8a5883abb29ae15413b6efeea2f476ec3a3beb"), ("27dc8b0e9255647f86a7d3ceaa5ee15afe8846ab040425cfcbbf690022fbd9a9", "2ba6564090734434eb967a2ac4abd7b433d81575962ce2e8538f950b7858aa25", "270709e0d0242861313112025f6a16ca66bad67f300ceedd413fa18286ccec4d", "12bde0c8fe52b63ca05b822c0cab2bedba872206b0be7cb2861b0b28b0528ada"), ("2bb1384e86dce5d44c42563be242687d2ceb0004f4bdef3c101b2b40fafca676", "0d7db5300791e2bbbfcc9869f28c95be3513906ee3b5e1a83dcacfd5bfaf1134", "2643fb65c6906302fc112f54732d8966d5700e88b7ddf116a5d8f80e40957335", "305a1b57170a6da9e907c0f1ce91743edfa3e0b183bb22707c131dfe009c68df"), ("1824abf7e593aa2384267b7618bac54c6ddadfed2f2696c71e559e4f993b7a03", "00e0ae270c17fbc6e33d1f902522bf084335737414980b25b4ed5af03dd36a4b", "1a62bb5a1f51d7980e984936979bc6d848902885a5a9049368ab7a4b0c5cef73", "1aedb4ffd56b51c1b01c9623a964673d9c4b27657312dd24f9a8d03875d0e7d5"), ("167cc44e2caaf5535700ba55663f401d575d5350e5fc9bbea2b99d312f4523b3", "1f01ad7575bf323030550b8ea276171e25a1d51f4f90fe09460aba01740814a3", "12bf013c779718bf2e613117c74276376424f4888f9800fa36abd0f2f67d9d14", "150c0ac745c311d4ae69a0257b24bf5bf3a54e713d93fe4eef44a2968262cac1"), ("0eb4b644cdb200b595bf415bec5a5035358152851fbe5b6a49de1d3cc0401cd5", "23a6bc1b48e2a1103558257db85280701f4ee404e82d5a4326e9985719542d3d", "155e693cf951af21dce91599dcc6826e2d5df620837e94243a5ddbcca64cbd4f", "1e1d03d833f40d505dc22fe24c61a7f2f2120469bd1603071f3762989aa61c49"), ("1dcba66852e22108477a84da9f53af808272018d733631359b5d54acccd4d742", "0c07d50c85ddf38c3719297b2014b54e893041bf001e61416fdaa8eea9cb7cea", "034ba570a07320b46a88821528d67cbc6a83e37f37ff98555edca0aafae1c2ff", "305626b7c7fd553ac47ee5cd0a2425877a1e661dd50d7445630e7d1242b93ae6"), ("1527f5b3761299ae089fbd02a56994e85f69864eb5c1ed5eb698a19b88ccfe5d", "17e0e3e9bcfb5101274b6d75886f9f7755653d998111df8b0b7e7d3e9c83db64", "1df24ea9c692d11c09450a91035ea4699a49c1e76aaf550e588f2b9c98a164c1", "00546720044f0294002f3e2ed54c593f02c601f1e5e8b448ae5fb658c53093ea"), ("1b8442850308d0f0ba36b1a71a8ecdd774a1c4bb88cea6473b83c7d878338a92", "21f62dfa267dfd5bf597e12ff5100fadaea9ef6cf35808995ed4873aae0c4e55", "2b2282e3afba03830982dc04762fa765116f786b2ba3f45e55019ed8e3102f83", "2946bc791c31470720f2242be9daa21537ee0a7f60ab3f3e1a78ffb0e4ed901a"), ("2ff96813b2b9c5b9c3a4ca28e6ddd6a258371f1bc020c355fafeb2018e8567bc", "0cbda5ffb1bdbd6b3ca34e0c1e30f457e28ee9ac837cd98617e23a8f3a5cf430", "086b2fcb55c304c0fbe69930f16d585d6c298ec8a9b2cf9ea16af1028842b802", "14f326deacb675960ec9526167ae7b45cb8d2640f630169dba69de7235a86097"), ("20ea862ded77d52cc2d99f00ec3a0243246f63dc516dcb0873fdc4e499cf1a05", "251f0167ff90d11e27cc23ff9d0599c24a1988846f31f40e288b1d58e67865d3", "1279555b53741a294485aac74ba092b6e24817b193c64ce6cec388b3d83ac0d0", "238003f0e4f7ecd7d1d5eee3668489759bb4bd6f8596d40ee0cb2a345e731416"), ("17bbc73feb5634e64799bf3624ba5d5a6fd8ce866da753a1275edf2b81413a1a", "0a0c00979571487bbf19d5353a2746b413df9faaf8f200670080aae5702f1e46", "1d7dbe7a4b9f06b063329c2355ec35287668995a17c4dc8388cf7a86a3933a86", "18b412926856d1db2e325bbb58c71bb2dde6a78533f64f27a3e1208398a6711b"), ("0f8f7c2f71c37365f52fd2febe1fb01fcf04e7625bfbc81fee855b245ddbb709", "25f21befe1c9d87e3e749935e16b602daf546dcc582ee25bfaea6a695d37bf31", "2876bdff58dc27e38efdd07dfef6ad446849384d33fe38bf24618f9c0a9d572e", "06886f0d35f86722ae7e5adc437d041270ec69aa2084d3775d49675411a052bb"), ("02d281d25745d3e6920eec62d74622f492b67e5fffb22342a7c243c89723e5ac", "2faa664c408fade60662c070539dcfff14b0a7f16b012eadfd6b53a6dce18255", "2368a360303177625f8af5d9a2005c245ec66519eaefc8608849a88786e53d7a", "0946d76de70667f3690ac5dd6ccdcebc9315d85abd312ad1babd2b62f31d849f"), ("14a267d26e014c35d2ad9ac344919c3b69a56d0c5cb23619164dac3910d76a01", "275bfbd8856ca0ee290e4d7f6246fa7764bde2995a16a8be64192fdc864f1aa0", "23f0e47787e3aaa8903e15f45ff27ad0c91be752fed424b075b7a3c3b0a97b93", "273e80c8d912eb91d2abbea8788886bdb6858044221d3249aa870f1ade8b620a"), ("23af9dfbe4df1a6e89e9988e8de36e7c4a0ab1fa261edad1ebb034b962c2c0f5", "203c342a9ada1f68d2db16da095a41e1b68451f701bde7f5fb9009ea96fb0ccf", "1772c17c8ee9d94bfff710a5c450c91bf7eeaa33873c4140a9055e116f5bdea6", "1f4e41f4d975a3860b948d94b8df3909674dde1c4bcadef156bda63d15eb0fe7"), ("0505883dd19e01514996393c3bf5937f0556c8405727b08b775f09ce1a87eb1a", "268df1e043ff8a22466de61e94ec6a5fd2f4775d5e98d5da9318effa75185732", "136efedcba3de42d5daf3e385e735b2a18815c385f05a5fbd19eef9c6452b7aa", "043a74414959ff3cfc2d058da76e22a69ef9ce2dcc2f29466c4882a46d5fa450"), ("2f57d994b3fc4163d08704d8fd27dd27ee2ebbdbca0973264a4e2379c350f877", "1a582a13fc8969fa95cb37c8c3e8a003fec8ec976a39c44d4695f2657352ddab", "114feb97b4017414b66378247184602e45006213ccfacc996ac6a39caf89cc95", "1af9ffe728b940548795ce2cafa28c272f7f5717df39f478d741b6dd57c1169c"), ("25f0e3f41fccea89770bc72ee75442de69277949605d554708640668f85a0812", "0048844865dcdd05e7210896d3cc9f16e512f738202546e2790444f50d76ceb2", "0d2062c0e483fe577f2312b838de9a3d32245788d80b4f31e6dfbb7622d479bf", "26b6a85266b9bd1d379b6464d4ce89fbce72a5261b085c0086710b4c9f977cb6"), ("0f8161030fbdfcb2e8a899456dc8093df7779e752206464862ee47c3fbb5ff96", "0718d14ca2536b80f204c864fb52bf1fe024d056cc05f3056c4257ed891589fd", "1bfd72fbcd3fd5e9965547bc0c8f38b2118407a6ff5660d364553aa68880d372", "1737ced67ca597bc9635a5ed6e36d73c850fa744ac83c8662fd04e14d3401fd5"), ("0a8aa384e8ff34c85dc0a51e6bdcac673d21b72a97a4ddbda854f33b30d62357", "15865e756d366c0674df2597e00427f3fe2e90c20c7554fe62b437e35e201080", "0e13e159e24dbd1080bf7cb63b920d4346f8f819e08c5a8921676f342911a9f2", "20d6ff7f60468a4a2679fc6132708c72a683dc69674c8ba07665691e9b44d2c6"), ("09d1708ecd7b181ed406a8c9865ab2726b1c21ab060287d7d852cf50aa86b2ea", "1467f187e6dc040c3a91696af7f56f88212b4ba529414803438805d321e525a6", "2ae1351015ad668cada344812036e7d3078c051265993f68eb45a2ccc21661fa", "0efda6d4152335f7a2ec4692d74adb9db5f2db4640337c6bc16bba08dbd12cd6"), ("2ca0aaf7512e71ea4279b63a886b809201f892bf0027551872e37fdc0f7c0334", "1404831e883c482bada841678c3a47b7b2bd7959d011cc068d5f72fb5f44bdc5", "0d5bec8363de72a4ee72b3f63c740eff483027669efa1ef1a22ae4fd6013da76", "29d7334a5442a06a62a5dd3304274a2fc0c68c5d5bab87a4e3cdb56f7d0ed358"), ("1fe5eea71456afaf6da5a9e196d0c67ae3a900a365c2795a479395cc545a7ded", "1d0e01ea300d1528788d82552691b79eb294af18e7a5dca2c1e1b634c2d3b857", "2683bec736e649eaa991eda23acd0b9fcf6738cc538cb93dff3f7146536ec8fb", "0c9319cb6cfd153a4623d7b9c6449f862fd86392915524e10e9f9e09e2e3b533"), ("2e0b5146813b081f3defad7a92dd334560f94a6023d25d99dc54d37356f862be", "093ee920a501d0a0128eac99df756c08cbea4f22bfef761dc74471ef6813b323", "28fe7f8ef57ea6ebce196e1a267ef13d05ac7a53b18966c5694aac1696432cea", "233b809692d008ef9730bb4158e256be590acbed294d3c4025fd3b4eeb53f266"), ("1e98105d72a43d5d28426f4d53fd130e3413e9023bd78b053f3c80b3031c4eaf", "139fa6132606f46b70f68bbf7435ae9f8526a73cfaea13965a62b2d4e70d6b9e", "27544c8bdc64e31f07544561907f001429ace38373dd56eaa4e5ad6e42cbda65", "17818b303f30eb8fbbf5257564aaa6e39ce3c18f45a36bbe585d4a4450a58abf"), ("24d01953f821e9424cd87ae8bebb1c02c866b6a4856dc688bca6124528720ee5", "1ab3b262cf6d84eaea97fe55b06984add90ee7773140f01eda05b629aea8403d", "1f931bd407d0f91e6f47d8b11bf0668b4208f1d790c43beecd4d4f2f0417dba4", "1325861d1b9d8d96ed416f5be99ad5d43869278c7e2644a1ecf14f0df96668f2"), ("17d8602ad189798c6d496a3f2a66496412de313cedbb76e47d78700e565c8f9b", "15bcc44ab957eb237aeb322fd9d89997e24304c038b39b05898f97f4dfa836e5", "249adec29a7c9808fb0a8e53dd5e942926e4df16a9250ce607b8307cdc67b381", "128c70ee63fa562b4ad6fd896e5cf5d0ae25503d6e36f711a95ae28daf507f60"), ("11ff8fd0d7ca548d465af7199f7ad08a62138f2cab10e1dd5b7d37c4085a5be0", "25516296decc6bb0c397bf29c04bad6570b316806843c91f44d0e937d2b5c581", "0be5c3bd994f2d0fb8cd5c2228cbd7a1473779e2c4c4c47f2895b5801781741a", "07a9ba30a642c08488de655e440b8a2a822eddde7cc33d9b12871ab4c95b9806"), ("2f82aa4385feafaad7ec9171861c4fc0ff0637edb276593ea2e466296f0ea838", "0dd80b8548092fac93afb10d05daa2dc4ee26ed1480c85ad10989cc70abd5b6d", "26cfa72c3014cff5d92f024539d8dbf1295732262964592d9bfdb8cd30304a90", "122f6ebf75905c0c119f822cdf8629b28f678df154be6ea8ffe0555ad13db4c4"), ("2ea5e7d7dec5da21f774237c561df0a50e02c8b4f8e9ec71eae51cc444cf70ca", "196c18d9065ff1f7a7f23bccf464f07a6df862e3af0a07d708e832e82e4138aa", "29059340c56c7192de3ef300a346ed4c6e4ad54fc24e0878b590a6dc9351e99a", "21231080a2e8aaccc55a68194fbec79407b59203f57ffab67582efcb5495ea36"), ("2cda8d06e2687cd0ae32af2beb3ea7ee9e7ecf7b62e476b154757b96b9e3dbeb", "3001b00e0b6463004974e78b7aaea47919d3f023a0e23d247a93373a44607d1c", "1eb38b5796ad7bd22cad492f49a4aa5e401ec84fb1ef4f6ef269071d3ec88f6f", "0d25abce44a504c89fdb1e4bb3364866694d43b749fd56b3409528da80262f9a"), ("00fcccf6f212ca81a9d79ac0a29edcc9797260d4e051f6f6e6ee61481fa13b7b", "0f2da2bdacbf3246bb44c12db3488a1c12f407a3de4db5a5f2a819eaea564a12", "2f7dd34f6d9e16bbdb99bf094e5d70da0fdb9dbfef092f15f3cd2f5b32bf69cc", "17a640a3a218642de9504a0880e0cb77dbf49dc32464674d57d9745e0819260c"), ("240fd4a7ef99cb50e481447feca65a44af421f0eb2e5086a2b832acb5c87881c", "17f2ca6df30edcf8b1f9e440d5061c4d49bc00f59c24104f0e67370c3747219a", "0108aa3a3b7f6ee3d693911735fc78db2d2c336a6e0a2195a4bf3fd3f7d3a190", "13a6adbc14c46a3a350d6d7b158a8d06fca40786c9e136f5930936f546f0353e"), ("0739894ae0d998abb09630c763b9174de5654ae9f592136ad364f39bdd261fb2", "1a35011d64f127c284605b52f9d968e4652bec512945aefb4107b948ce5daa96", "129b77e35ef28d995193ecde2ac56f9e7571f9ea5bab22c5d7bfcc07baf29d21", "1803118c54af306dc9d5bd2e60c3cd6636032a8541f7e05e24e8fba24685e528"), ("0b187334973c76bfb91ac060e47a24a896f1fcfd56f81adc6b9503979c79e90b", "1514f779c6235fb0b6833abcc512e6012a2c4f55a507a746efef60bc584c8a3d", "1a4b0d0720565c0d451e193ca6bf4c2dc1de857118788ffe3747b6361373a92b", "0c99fa6b5c9aa6885c7ba2f73bc618606fc556f13409cd9e898eace49d0288e7"), ("2b7c7a550fb0fc8bc722aba91b7271d33cc7ede20f96da11520535e9c65c4ebe", "22e3521205b822adbdc5b4950a19723166519e66763a9b76e18c3c897ccd0c67", "2f0c82a47dc096f2e9cfc9655ca2c62d237d77d84ef90672cc367e2de9889422", "030bc4a40289d14d1c7d9e2cb2bec4401ed4c488f6c5fceb7e756904999a074f"), ("2a1f57fe8a690ca930265278a4d96d7d93182fed4300bbe87ec56e2804872799", "14557aad06dff26e662e21ead237a4b718cf9d0b90738204f5f48763e3aa2044", "178f6cfe3026ba713c85bbab3ef271fc41e034ba4150161f0cde7f6058c6655a", "1eb8b98acb425f4a1530358e2144b25e136d69afc7cfd9cf3f7118705e171c71"), ("04ea6aee5f84bfd486630f9e41baf317bab3c216b44c43fa50e9aded638f17f5", "024a58dafbdcfbbdcc8a09aef4009d4e82eae5b5166d7634eccbb87f48c7210e", "052a534dda332ceb39cd0283b886e99cb3e146824b9f159c9192127c0799711c", "1f005263bef00598885bb0db7b5657ef1679c740b90c7f5a2210b9fef40202fb"), ("2c59370894626a9ed1d9c7627d5a2458d033fbe97a74f7c57c6475039651daed", "24aa426bf0b17940be847673a0c1d94cd87b723e433c7057b831dcbb374571ed", "2a2d50ac3b4cc6a1ba3db424664d650f38553b9674c30bfe95051a1e2f8f0941", "1bc6d593eb7f4b903fb709f547dc1affd7bfa14d7d919c3e78f85f714c252c8e"), ("1aba0e37b626b242a859bc9c55e9abafcad8faa7353e1c30d4a15e393b2865a1", "0eb09ed5d81b3cc00ac03bdbe2eec05c2774da62cdecd4eedfef4df95f24340e", "0fdfe7311a720e1fa30cb9ad33940e63d7841077dcd267bb7722022b1a39748f", "245959560385115de0433808f93bb86b12693d8db3ecaef7951673bf79e97d6b"), ("0b8d03d0a796af3a9bca0d915ed645de29b0b880111f8d5bba8e83c3c74571bf", "0ef307b4eac584fc45b0ad4727a248d60b9b0bbe7a1a38a3630d6a96d9482578", "0a860ff0727c49a97882573558ab3f299fdd1e1cadd5a26078f41165e6e0bc8e", "13f5205a3749423c788d4313a6fa362e2db1a338813dc6d7275cf730e1b26900"), ("2e64d98505a40837e4afcd323f04274e5ad9408cb0501a3f69b98b8a9035defd", "14848fd3afebe55656ff9e5cab5217363fb2340ad226687bec196be17b81dc37", "1d9c6c8f7d13a7136684c1fc23970554ddace28ff56ca99f2e9ebbf4c52b6e14", "01f29e809ab9ba803e60df0a50ba5b1ff34f87e7fca6957aabf5d8eb9f5317f2"), ("014c9443c3fec37e8ffdaea6d2bfd735d5b125fdc3bcc671bd310b3533070c9c", "160aacee7b5b2c844bea5b5339c3bea1c5ffebb0d2005fd644a7ceaed3e3071d", "25a9bde06ef18b6bda17715c1f88c784045474c17fbbe815d8f7c063f491409b", "2899a72589f07f71de97a12999969b3143055c89dbba2f80d7ecff03ead167fd"), ("20233b4c067f14cd6a61ef177e0c300bb6e2f21562a0dd7b840e66feb31336bb", "2a68284ff11c7d18cffa2e79c2d0824ae2851be4fc7c1a6acbf7f0d0678c35d3", "0890146a1e9f6be8939caf20f264587a2ce2fe400a3943b1200aee5883f5aefa", "29e1b64ef23f333b33fb8f75060ee5507f8c7c82fc456f88ae05958d36cd9c60"), ("0563dd357e4149b71b7498c81c88abb69e9109423baa90cdabc6cdc7e87c068a", "2a43c668921418f227063f02261cbee056d72555243689a03b6401724527dca7", "18ae69c4e4f09643bee8005e5a6692de5c155b2f1273fbd1f32e90cbb47090c1", "221a2f6d39aa627c617cf6f595291d14df8ae1c1f057fa20a6ffea0990b4ab3e"), ("2540f702bd4df350a13ebf69e728ef42c498ed6a6815e52ae75f57bfbced073e", "293046faf794c1fa8ec65ce8083e461797d032ce03244ddba712a992ccb709bf", "1f66d4e6c8fd55d55abd46c7d99b0fdd22513e0d0487e870e572a68b1ec60f5c", "29582bffe9df803d7e760dac7153486375901b835962898b05ab1c6c04fad976"), ("1cbf1f4afea424f45818390711961e5f76984b65fb43172f23a14c7e18dc28b5", "20f5ef8bfceca4bfbbd7dbfb41c5f5889356976cb61452b011c12f69bd9bef54", "2e672a947455975b4a860b664782faa1c9c03971bf6888332800a1f4902f4215", "23f801cc41cd66d868641408615d343a47f341e979ccf08445a747afaa11e646"), ("12e5cdcdda7d7f93cc6143728d3371f08d5ae7f03c04c2772978d2dd91284967", "1a5070d13687345325bf3a608300e7d17a1282acbd381dc7d777bcb0eb09883d", "2a87ad01d211740e74fe4a271bf640edb6d68398a78a34cedccb583f2752cd20", "24b599277375086112430b4403041a698fe20032305ffbdc5de797a20af5c4c4"), ("094a984a02602e1acc305eac3369644766bd7151855f398e6e5c363285ea268d", "1d20cd077db95acaf3b230ad39852319dbcf13ec06e65edf3c50d614c075f9b6", "2fbce1a851cb7ec465a9f7b390095493f618f817af72ddc2d026703c7f49fe65", "02a86623f47b74f3cc57d5fe05d7c040dea87ac00aecc6d6849df77bd9b3fa5e"), ("2677d19629e40f01c5b8873c3478db7bb276384577e0b55054aa2e2bd12faf49", "22ef6f5ca36caf4dbab4585d0a7df914dbed628aaefa741ed47b604b61ba8dab", "1f17a70bfcdef4f9cda21718b99e462694c8272ead7c7a78709f444b2640d3d3", "266691c81b4bf78dca0bc55d2b9e30013b6fff1f1e52f49e6a563a2129b1c9c4"), ("0833c981f50f59ca04d9c7a08888510138c3f9c3bf304429789c271b494f1295", "27e7b6c45a86c1e7539810299e4f4cd78c0b40c812a0af1d6d6d57998e8b6e09", "17e2d157fcb7282eb6e3456d20462575dffe2db46ee1b2df5d18d3985ea3c291", "04355761023ba088943f6def5aba10fd687f7dc0ac7c6a4db3733ad59be1f66d"), ("0342dd4be250ccc6356f29721e19fd6404abf97ab781a14960cd910d02e46230", "214ea554bbb7f81feb997a2694138eed01e035d1ad00ee86003623e7500e6d04", "075a9fef119eb1f279f1f502c1ce3f3d9a707621f27856b276115e3f31c1b067", "103a059de7323fe1af0ffa63cbd0cf81cd40383f8f184ccbe1f6731f5c5db5b5"), ("129c160cce39f30f5926c842c8d6b89d0e67c3df1bc34f164b65cbb5f655f2ba", "1c2eb54228c75398d1ca3f3d51ce80ef5e911807286fe7d5e11b8174fdc4cd75", "0633b5e1add41a1adbd2fbbbe70317ef12cd428f3d428ee62fe11a6f31902290", "2fe91b4dec20de539d5f528f5fb62f0ddf69a6d41d1fec4a9de8fa49c8619bcc"), ("19d856e6fa70e5da9827c4ba497e44285ce08108480c7a2dbee59ab3e1e7e503", "2fadc3cf65c5a2da16a2a5fc66c8745ae1b5aa444d3bd794939de6a921e26b41", "28d2a5b68284edce9864fc2114a9670559e9d353f8ca0a8a824b1167c04836ac", "15a0f299f5e35bc40e9b288c9130215438db14bc5487b3c5ca2987f9d187a314"), ("068f97dcdec9df770b2864b00c3c036f6af41d420018b40f8c89016d9dfe2963", "2844e5966711e55d8cca8fda37a656c0290410c50a3748fa2e9ca8071f7b0873", "2330780a07a1bf78269671b08bd874a07619fab8c7211cc721a7cfced6da7273", "02b7656e1b0f0a29873ae89cd92e40ba1ca6cd39f05fe45710a6124c0d8e7fd9"), ("190fbb551ce6e50a0875909d8ac011c0a0a83aac8b5c8db0202f09b1a919168a", "0c4a8b19abbae59ed1346607e2a59ff079e2ae8123e603aa63f5de8d1b5cd842", "243017d3c4eb30da42a66e986c6dba7e98376b0533423ff2ad36f6e27d20cdc2", "11b28335106422689465db4dab582310bceabdac141a95e46055e91d507f67f8"), ("05e30f5df887abfeaa14af74a806113fc03d173d18083e76fc75ed51dd3ddb25", "04d10bcb9a77e97abb7ac2ddbe13c79b53ce362bb62d3bd1f294d097c4ecc395", "089b9ebe14196c09ab4a5766f6d76aeafc533e10a14e09314c278e60433f0eef", "26927bc2ee339e24b44f901976980839ff542cba31dd7b4b049a58041572b94f"), ("14a08221815f8735f4b6060aadcdb6f8b02bd4a95e7621484ac4e1d153f3ce0b", "06b23061bbd4ae514645c8dd3700a9fc06a9eafd454ebc65a8e9d767aa42016a", "1d6a40c5066aa1056f52de78a6585eab0900ff28d8e090c41cd4249aa0c60fbc", "2fb69ac2c33654104c0cc3bffce3add6e90a05b3dc98e42f6d733789326149b1"), ("286c27dc9131d4ab7e2f7226b58141a48789742c84239345f186a33dee0be38d", "0933a58a1b8ea9ca3537c0826ead7832d12f7cdf373deb76abb8850e1fd70a82", "245a7e7b352e60e8e71d5b34632df552fa260e7e293e5cd7a931beb1cdb1a9fe", "1e54cee8ace5876574e23e91562c0ef0f9c40c24233776e77edb825bf3b46e25"), ("2164ac7b735c0431ba9a1efdecdf28ac46496bb7a1ef439d25e7b61de8690e53", "202d421b3a41a73b834c036794d6d78adcf6a8a76a8446338e6e06cf05098f8e", "23ae17ed075873ffb61fcad78b65c54320776a0e24fbe0a0ee8a322a38cff183", "1181bcc37c25c77ffea6031327647edf7620e2ab511b14055dfa883a309facfa"), ("2f7c9e35b7286813ca57882fcb8b27d570fa955cefe9bfb6f7cf6a9bc04744b9", "292c4a28c00c1d0ea691bf1e6f0a689c2dfb73427b7e6539b09a56d2ac5d0844", "2ca2e952450b592ed2cf4b30d92d5ccbc5b07ac1a64ae2a54da95850155ed719", "1a174876186f9b050c83cf4dad3374e2cf7d2f098406f24ba7abc6203c332f14"), ("0d0530d32ff9deb4ed4d872c3fdfa51b41bfd11ee8efb09dd00979c69fd648c5", "16699651fcd4949cc27e0185515877bf2d9b2fab2faf82777dd217bfac2eca1e", "0d2ddd8ac749d12c440908c4f68acc70b00d22f0326b5f92dd9781f59af322ad", "007a4bae829ef60c57077b70f917906717cd0e6ce7776fab5d4c542278b3ec0c"), ("163eb7ef234a097e63a1ecced7947d42b7d23bdb522ed77edd84d29071aa6248", "2d28be75d79d452c4fe55d62379be3204ed4b4066f610e0acc702b611a0d0bf1", "228fb45c200d403a71fd81438faab8c52f55d1d8bdf9562c9a2ce48e5cadb020", "2691916f5939d22c46aa4b3af5b2cc9c680dd3a4b3f7440b65a2d1f9d0fa931b"), ("283f4a70833ea6a26fffd0df11444df45977c431e37d165353fc9c6a4140223a", "0471c2689ccf512bdccd96deb28a21f43fd802250324211cb889dd7d903cf484", "156490de3b3385a41aa486e3f80c4a368cdc346a3af2a3ada8d129753c8b9c55", "106d42a9088125993f8c8f511a16b9c9d3aa73da0c1237065588109f684c2f50"), ("07cc7223a54b5329b25e260c6553b834bcb71a34990e10a4419717a7c99fd9a3", "2b918a0e32ac5a21f53a44d995aa3cb1859842f4ddfeb9f79dabb15a6c68c21e", "0480fb5178b6e3a5bec0416cb8b318839b2f64af9d711cb2133a1c72d939b422", "1436775fb5adf408b97fcb445dadb64b275bd3549a84d84b7fbd2bb77e542ec0"), ("21f5cc46a74f46a7cbfd80a2ab4ba2060e9c748785c09224251fded1809237db", "2fe24a01255f95d5045e3880b2d21e7d1e2f24270f9edc8cb5a0ca3dd6ad3d1f", "0558583068c45b9ea0c444a57f73f5fcd5edb8b8347e5e2894c7f51db60bed0a", "1395acfc4f97b675bb5ca2a73e744aab3f79bdba369321304b384b097a88633b"), ("1ee72674565d06772b6c5bc10122e38290bfd6e79790fb39108fe52f4887fac0", "2f4ed40974e3ef0882d4199632f4d9fc2de0886cf117c7d54e9973fd28c66c57", "0cd26f7c7a809d1c12fcc2970a737e8272491ac0a4a8f83a685e988a35f52dfd", "024a432e607b64acc8992fbae9aebc6064774ba8eccd52a1148ebb41ec12060c"), ("17fc98e5cd650a3abc03cc1694bbc171cd00b42ed9582abcd75b7bfec373d36a", "1fe6a07a5978e97054ea6effd218ae09b7c014bb033fa96800209c3bd04ee0d3", "079268eac1dacb24796d1c11d23af43d3055ca8e9c677f0d60ed95c57b81f010", "041458e9582f8db99a6c0fe2102ca0cab870293bc72e0eb687742a30a52d4479"), ("0ecfc3a30d66679ca4e2afb4215db02e909aeb735acf40adccb8b38e33c7f3e3", "0defe8064e89605bbd2d33e3546fab9ace0beaf1081df705ed7634e67543762a", "21b7e93e7e43952a8c1405751f3b6606685e46790acd2b452c873ef7b6546db8", "2e8a9a5eecb99916d34f976ce5df895f8f42ce27dbecd5bb974ce6d69e1c0499"), ("22dc188de508d59388f825a230c1ee8f2c192004fa986bbf8259253ce087707c", "15ce3d8214483013d438f8c2259e5b19944013bd2d898562d387b1255571cf3e", "236cc3579593c94fafe5a7e9e0a3a01261e974ead9802a2f0e5506ad05801f19", "0526caf253f71bc1b1e59119217d2815f2b2da6709998526be1f0e454a2b5359"), ("2d94a00cacd55ece5648205b74a84e575d7f0592843f602bcc95923298628050", "103445875a844cc6d0735d7d01f68d54c5d5afa4502295bfc0ab9cea2502b6df", "04ff701830e0261c965be78dd57f3fa7f76e2e6c684421589734b54716385a28", "21530eb291aeb889ec4757ab308f6f8bb6f4fb078ad6f35fd10e1c8c15de991d"), ("127bfaaf05f79ee870365bf25a867eb825a4ed4b9a0cccba54e9533b35f87297", "0fd668cd6331d23b13bd282912d67e9671e097db078be73731a27cda0fbd1ac6", "0bce5bcbdfa769b6c29291c078323cb1fd438218621ec74867bfd1c8b5a4deb8", "036ebbeb0cbbdd919e920624a5adb683735b30738ea004ca1253632871151ae3"), ("257a2e1895d3baf4b3649a4fe201517052e8c5d5f2bac31a326da19176f5c0ce", "205982f0ed5bae21d9f418d1f94e26c447f9cb1a928cd8eb04c4f24a5b3033fc", "1976adfac2e568b01302c5761afd963f5f93a009d8e0fda88d676e4ba21497f6", "087f2e27a53e68e38fb623f9ac33d27cdaa543f187588e9f0b3471c4ae967a61"), ("1f14d88a9644e83bcd134919a73141718760629669372d32a2ae11c4cde54407", "0b2fd3c7f6033ee3ce4706ce9c469049b4856d684bc01153af03d4b7755f4372", "09edc6cda9fe880ae5d7338b47482eae4289c4ee91b1abf4e9f7deb039ca7054", "2eec978c6ca04eee1268b0fa68bca63a6e5bd6b900564a0a49b1b894e877ce3c"), ("1881250c2ae30d16e51a2038551cd8a3dea924b3e3d4c0423d892b8cdf65317e", "1451b48fea57c6abdfc922104f403bb75a8bdd086c25f0235a652e8ec4cf850c", "2c5dc8165297d0e7d7d468e4c323461fe97bbb9e9b35614ff4c2275e53860200", "2a88c64aef1b875cafb73d73ff60238898e4b94c334623ab85c5f8797985ef2b"), ("1cb9fb4dc60a5cba91532f723855ff304a61d5287cd8d6bdeda567a6417740a5", "0083d710066004e7d49f06415385cda57966774fcfec5ff781a6c57ce4f6a2b5", "1461c2e8a36c38e211718b946cf19f780a97fe0a0f409489c1ecd2da32af4921", "18496ec2bcf30895655fad5b8ebba6f310fb815edc9ceb14359cebe3eb815570"), ("26e95f5dac55fc34020ad926764f55a75c71b076901b5afbace030261a7b5b30", "12c9e59fe0f018cd7529e7ad8d54f701b0b83d515e09518195a18150023106fc", "2ea916d27f4b610c71d7fb9d317fd7d44dacff3899b4f8138040367e24e2ec03", "06c6ef7325e835332283cc4ddc57588973345f5b4dabb207c662cc8e38c5c460"), ("0ac29fcce5dcc3156bdac2d044c40c062b79b0b45bbd3c1e49d41c587b6d75a5", "26c07b9faae0ffd4b247cc3c90c076a54740e00fbf855a3099f9a6af2b961574", "1c3a9b5068854343a5bc0e6f6d6c4faf5666a03b3982e351d661665c72a5005c", "1dd6d86ef047ad038c4a4f922d96d578d820fcf27848576668851b39c8496ca4"), ("0f474eb2123ff661c4edc3c814160c034d4d1b4d61b025e2bcb8e2dc8089e3c8", "16e33c0f3a0ab701850ae8f5e12f11eacafae539b068594edc9e83e3c3f8efd7", "199228227efe26a1a78a2e34029d6f214f7ea8c9ccbe45d727427bed85bbba25", "2951505a15ea73ee6fc4ff55c2a0cc61217673ae38c99e6f1a72fd0d5f36c5d2"), ("24767e78b90654ac164f8c80c779ec86e821466426b18e733a30a195760900af", "23f169a33becce5b1c6018c4111272ea7ebc240723c57ef163bf3416ee913a89", "0a89aa049d401f59c0a3b55f9f84f29417064e359316ef11fbaa399fc5e660e8", "1ebddba8723e62797837fafd6834de16583c2b200b6bdb6e6d53bc96a2a3a2c4"), ("0cfb03c3800830bef54279f2cecebc93726d2c358f475d85f3b2c210f7dd8b28", "2f27cc636c146e686329b7909a7019eeb99d18c9fdc4461d21022741085f4664", "1ddf5ba151ab49479b8367bc7ee4a0c4cad2ca49386635904d4da5c7a5e9ded9", "012e487463635c56696fe5a78a17045a86886fecc75e8e69113b64d6bf5c4b0e"), ("0020bae817443241004117eff41624f4a196ff414536930a225048c9c495ba80", "139a7068e1d04f8a1fb655d7c3e7a366be8141e65565601cbffd0ade829fbb99", "16d1efec45ba0db5fd8d2b0086d68e0daf40c711ac900da5981cde7b6f139803", "25cb4ff710a45ddc602bb5d53b65654b0d9c2c09fec7eecb5ceaa3c6484190f1"), ("07582ff14261cd6d7d03cb539b50492ca1df26189ef79b8f6ccdaf4d2fb60da7", "023a3bce520b42161303f58c9caa0b86ea89e51224f997b2629348c2d0d5ccb1", "14f09ed47db3a39e962c87edb965c35da0de4addb0fdd734c138e346ef8e5d7d", "2e7524f2d3eb62190ca6c94d06f7e3569d2c904b5a6d8628911435273736b0b1"), ("215d6de4218fb3479ba890e365aefbe09d50b5b14e9f5bdc2799dbe7a136edbd", "16c7f2bd7b683879e7b485fb32cfa84bb9b9f04305ad28e9a3b1e3d8fc57b69b", "05f2575a50a17cdf28e36235283f72e963d07d9ff91292e0709b2e94c6bb3e57", "0906f9b865ceafb9b5121665fcd0b83b299255a673a6826016e9eef31b7e501d"), ("1ce349242e4f803a9f2fb94c2c9e92d3fbfc0d767f44a187b649491778475585", "1954854c70274a3cd8781287da1ee821d31a4e0b7da6521909c327869fa98ef3", "2a10d27e9f815f6d722df48cff8a294162dfce4db10a4048634939a9975926c3", "0102422e23037a6d7e315463602965cad35419b0289e5c12a7afc85ca445a00d"), ("127d07f86200a0ee1bbc30274862aa2ad0fe2d1ca9bedec7fd1d3560cb3ee52e", "2f81f5c835907e9b3eee08605e251954a441169b225ddee09b9637e03726cfdc", "26cd9132ccc333fbebf0f8887e8a2ebefd39f01f65a60bb9683ca7d1a230f89a", "055f8eebb6be72d41175e98f9cba2a3bb5b181e1033c54c4a307bfc71e6b1604"), ("1985dacb016840e44a02915295c6ebbccec3a8e04567117903bf05a23cc693ab", "2e6255d73e56477090db49d3048355e36548611175ea702244968b2b1f2b77c6", "258e87b781947a99821e446b97acee0d0886e4240fbfdbaaee6876a7ed804f02", "2649c4fe6fc66bc545ef1a2e9903d2ad5c73f1bd54117053c6efd002f18df82a"), ("0c148d85876c9820ed3e5c80a950ffd64c09ffc59cc8a677e99536780c1405c3", "2235a7ea5109a7e2e1e59a7aa8218b9b3242d3f8e7bbca36a6c5fcc0ae2b7793", "0f7a615b46a603424e25548a050ee64cab96e95d6788e6cc643f11fb964e76c0", "09047d61c803f35d5aa494a6690f14f49a2ee8db77d7efea45b869a64521f91b"), ("1110f71b1f384ee0d49cd0fa6ef12a3636246e45aa22d721189ade53ff2d4b97", "065ab89d638e483763721e9786ae9ddadecc0f323b4e7cb766e2e7630ea5859b", "2c7b9f400054a76bb8a7e994dc48f8b3e797fc107349dc44240340442adf277f", "1609b2290a6e7628e21f0e9964b0a2e4f939fa7f414413311fec5bab7fca6914"), ("25ad3b339baec78c0459f22c18b8808ad66401801ce8538db70ab4a798268a8f", "00cdc47cc2048471287df57f2e30070927474f6cfe2ebd5921de062f11178543", "1aa24d887b643ed83a2523dbdad386bbacf7db992062b550ecf8f50ac7089b31", "09e38eace79264864a3244d21b8f46069b3b55acedaa0dfd81b372d5ae9cf038"), ("16938e026c0be4d93d10bf5bccdc23ac4da0d65fb4db125a7986625575d1d6dc", "0c8d8f487c05ba88ff203415c02746fd25f3eccd84d92abed77930480b5514af", "0e0a0a00b26c22befd8264fec6fe3eff1a2c3bd84903aad757df7b1bdc162ca3", "0c538671dc2f87ca2757d9e07a24e79f87f713f18d95562d0b26c685f341fca1"), ("10d949c1107853b7c8370b0a70a4bb16a4fb0383422756655c98af431ca0e4e2", "1af23f4d4674afa0f1fff6db80b66f46300a846a4cd401df7d3048dbe850b4d9", "139f9f14ef0f38f7d5e839043ac51da43ff29616666d1bb08bd743b7d59b5dc6", "221666f6f767dc22d75655259ed2e23176fcf2e830edf9452d6a50e11c9cf66e"), ("056e6c07b307f2b0f87f312ca71d8abea3cb601b7b78d49e886f6a0eb1ead2f7", "05f5a868a07642118c184f686fab55d8ec8ccba3e961ecfd6bb94809adfe6874", "04390ee547b43e5cf8c22c5e832dd21469e68c9a611c163f8ef016fbcaa282a4", "1c0e6f881bd4ed376ac059e3899ec7e8aff2fa54646f205630e146d4c66a24c3"), ("06a269d289ae35e7e81051da10af0a004bee0f0115537f20e344974c522c20bd", "25b685130f3f83346d8f0fad855cd019bc6bc53a51d8fade4f981cb369a1cca2", "2b343da855f265c0ae022eb6cc24935ffea43c14c6f8a5a3020b5b5c82eceee4", "0cd31c3c9545510baba95cf2ad47a423a24aa41afc710f8caf9a8970e213172f"), ("2274bc5ce913e80e997da91b24c8d49bb583b2898a02d38c45a44ddb56ea9e72", "2db88ba346cba3ccb0db2eac602f543cb43134e43398dae53c76cdac75eac2ff", "0e6ee9e6a25d0ff5998b735bdf74725f3c0e7174b1158cc71e544a9437b6f11b", "079091ff53e81bb3f403dca82d346907c2e11a3b971ce03e9f56e6589adcb905"), ("12a8d162689b1c4e40f05dceda43bd56a0bac5d89bddd640c7004bd8ede83db4", "24715bcdbfb658b312d0535670001e2cbf8ca5ef50a7e9b1b5b5b0c373d45933", "29e2092339548c57e74df5c89cd4f8a41f67ed5e6c67c86e41d1e503241fcd76", "0e9d8ae0123b5ae7e4db994c3c290b048c4c7187ff6da32b8804a13be9879747"), ("159a3271c7f7936be0b2dfa3e93aed503dbc9a76fe4e90cec99d91c311ea1e2d", "01e2e1077c581f3279fa0abe33295dde5f016e6cb3a11bb5433b6e524de717a6", "11de0f52668ab0e868ea35fc823ec45bffa337d770b8d4784e8e23c7fe4f66e2", "0a87651accf434893445eda341a5b89bd3c5b21b2e0f8d45fd26c9d211da4e14"), ("0b66c8ad76a517c29492c04c59bdcf8171519a8cfc39958bbea94f1c80dc83cc", "2898cb26c8947eb20f264cabc7f57468f0465ccb3d221fde327d18531b8c75ad", "0d8889cc90090317360d21958091d4d2c7763c6a772890a480ec66825a7c37f3", "2ca342f8cf8c9da25686d24727f690354682b013ceb43d54297946c45a0f6226"), ("0cf432e498919f9be5ab1fa969f900fea1ada01794042c6fb86534fe8eec93c3", "2ef30e9ab22bb0f1b3727dd36b9d3dc3b4c82c0d5612a26618718ff708585671", "29177721633a9e471868327b06813f2c1d88e9bfad907527e26654ba40a4fb00", "2d236d00155a63bba55f7db3aa20d0aa8b39cfdb3f268876d681835c49bb014b"), ("1d01a895cb5980511feeabf9b68b937711b19379fdb9073e3539c912e00740ce", "0ccd223686cee183d6698e3d8c7668d070213227b31d0dde67204ec073828e9a", "1da18fe9c1d2a44b69698cf2dd0ee165f283396afc59c84240d5e27c6b789dc6", "1ffac74fc550b7df0379a844c8cbed2ad834a9f44af91e2c9d244c25b4e42565"), ("22999826cfafa69a5a7af70b288a5c9bca9add82e949bec48a1a4275d59a7cc2", "20b7ceb39c98654d1f46ff61b2ecf2d2a9865b9c896661be240baccbd13aa0f6", "2ee7b0085cdd0e7b86865da015dda453cd25a45c4fabd699010a5125a030eaf2", "2affcaf019c297416250221c88feabe83aaa5c3f8d6042ea5687b3c94207e719"), ("060e904aa4c86a2051fd3d1aa2892d96a4794fc4c15286f31fd708624fc5bb94", "274798615b6e3df5cf243f448450b86d6a81dff609055e25fd63ae3d42fe202e", "18840e588a2d3462bf0c8ca4993bcede5735d582017c9825a508f5c88723c6e4", "1a1bbcbff7373cc94170ca050d7a03fcfdecf43a8c8183e71b1254a5761076d5"), ("2711c94957c0bf48ce54cea50eb166f5b1e4bd5cc903be1e915047e4af256b7d", "2fa98fd150594c6d3390210a766c7f6670cba8d788040746c28747b0623c6064", "099952412aa70f066b870b10f01e297c41498e362eb9656ac9ad1e48cfc6719a", "09d5b0844d88b96294402c0ebcaaee472061afd31d7a439bc88ade74c40ee8e1"), ("17cb34391dd91bb78e221ce6b8a0fe4d40ea7472fc63dcb9db56579722fca997", "193724ef8c553a01cac4d1bf9d347e6b83fd7ec1bef2b5367aab3231673ef567", "101e7e9fd41728165d0d7a6e8c28504fe0395ce8134466d82c8e851ea2d0eca6", "0f5e9c54f3ce4e7097d9cccc6e518bbd7c69e302829622b9aece9344807f1d12"), ("14b034f794b90f1b231b6269749f6babf666da183e70ec5b98c9cb98a17cb5cf", "2ac9a14fccfcca068f378c45280d796d506ebd63d1bb9c941be2ce0d2fdfdc0c", "0d1ad11550cc028e1de0773358beac0faeb27d05e82b53771f896b3ada2422a2", "0ae4e4b6b6a0b09bbdbd213821ce5c08a8d1060976c270c40cebdfb4d12e7776"), ("2776c3a2ea9d9e79da949c6ec89e77c4a95b29035df0b5d9f6d9cd9d2b75a771", "1b2fe64045903b32e2976b9060ea01e6e039200268cfff385b8521ff57d52707", "0dce3f9fa02585fc4840684232e17a04c886f7ff40c40bbcc75da552fee93aa1", "2df8a1a0647ff3c1aca51d8722a2af03e66f58163c28d7aa5e924aa2dbbc8ab6"), ("1ddff0eb580f496e375bfe09d41324224c109847ec25aaf724c4c2bc5e1d40db", "2117c80f5d11494363ef794f689e8e04bc355d17c866cf45523feb0ce77a5f77", "07b2a538b9eec587e1dd67799b27b004cb82adb477d48dc894c77f902d248210", "11d3f9c0f181d272285123b8435566e3ba3660a56ea658cb24f1e5fc1ca1f02e"), ("06d1bdb4f094ca34e5eb584cadbe1a78eec006f07397346fd726a12a33bf8959", "12c0ba6f526d19a706614367a1cfcee2fa36f7386d0ce3697ccf33cc766e91e1", "2b41abaf3e4673c2d7616f41b7e7e5219b54a7ae76976d981f2d41c620ec0375", "08644365d699a8bd4c7116f1594bd8cd0928c37cd6e9f7bb52e921b38b98a5b5"), ("03472ae89a99e9ab4a9b48590bf5ab383fa6243ffce7c34388db42792a29011e", "19ec6eeb5b255d579141af272a623a82f92a1909dd41af664416908727da32e2", "293e31f6f06394ee85fe6b0a4be6eb5b4ea025de7be82ee09fab27963e4d1eeb", "2da0f93e3fec4eadf3eb293d005722cb19d58ff92ef13ec63da52227ca203287"), ("1d431f6f6edd9656c37a8a7ddd47aa92e38bdbf2cc019b54cb2436cfa605975a", "0875e84ce619bfa71eb5fad086d90367b90916ed7099bf05ed379e96d1672bf1", "0f3a2f291b870acd8efff5cd144caa60f6b325f4cfc89986ce9505eac1283bac", "222a048cdc50c17b0bc1d0b6b2f32f1c18a22d313cd7cc49d30b01aa650884d7"), ("2c286bc3ba59d897bfc965062b59b98173638e0dcb43c74b6f1ecda9522c925c", "08af43cf02ed3e50eb2c3de248d1cd91de2f5e4c15571188a5e9a7dd62675ea3", "22e5a351d113aac6bd8ac97c9892eba09ec06decf306897ba8a3b1581c63f72a", "2d137999fdf678608758740ffff43fa6c663de2c2ea582129b40f25a7afaebe8"), ("21f8fded05341e4f01a4ea4f5de52bc8f7d449340a00d57d837d564231653ebc", "037f6d131ebd297bc30eabd075749e8594e741c255d41a6b790d38cc876dba8f", "3051754c12e2af7a88f5341c503d6cc69c23bf8edc36c50abbbd1c309fb4d36f", "0034d94fa9a43db7ed2b8e2a6b89a37a426e53ff76a215533c9f79dab011bc75"), ("13ab1e5fb3fb862b24b7fe3c0d2e4c08f52b3ae50d332825e6562e953697a895", "12c6fb643c7a480e8920fee59e4dee613b2b5a7e0d2256393bf7e9d5dce5210d", "0b56a8af64e43aa5222b99a6bf2a9ae39b62897eca8e022e4cc5b3fb099d0f95", "2fcc09a41186dcf5b66c82e36b5e2f3b8f4348b24bb5ae07401a2f8054932000"), ("2c4ddd40b540aface37f4c351cefce020877c90e525de801cb6f8912c77eeeac", "2dd7345fad0e78cc04b5289357d220ad7418b33fbebce35a60d4c5867496f241", "13902862e6f0da3e86a2cfbc1f543f72ed8f44a4e38d440f7c8d2f61bdab28f9", "1f38e1fa78c7d80ed5db5999d5687c2301545c6b10fb96992c05dc58e9e13970"), ("3021a33accce5961567f334a9d46357bdc5b02b32fbd883b0b5085c3a5057464", "2430fc6a8ad47b23ead3d47dede84a4e4c649081f12fb0663099a47a8a006b5d", "0db3e621c8e9eaf893aa045267be255fa3c57bc2eed34eac0bdb05ff54684f8b", "25210de035dbba7c2678e51b643e82413d1fcf0d9396948663f9c71b271c8620"), ("273f313fd6e5f7b9b2c189c704e3befdc869aef3dbfbff6d9e56f3a563620976", "15546a16a48850dd264b55d4164179587969ef46c3be9d496e4ad9633c820da7", "1123516c06f61f28e5a39c73fd43038f45f8f40337e5f55b886eec5a011ae6ec", "2e6cbf5e1da593739cc1d9956b02ee53adc145ebc5dc389fb45b6735e8de620f"), ("280a501fcbf70d658c41f8f0c22ed761b3fd2cbb5c173ba9e9151216d386d5fb", "048fd9d7082331a76ab6bc89bd8e5fa7f8622e960ac97d6827de1431177aa06a", "122d7c7afc3f4f23d66ccd13d19dfbc29c6ef39cb192f74c6fdcbb98918aeec4", "294c4bed8c03349f28155f64bfc3c08c56b38c1fd850fde352702be08e24b285"), ("1175dfa474fe2e71e7d83412a7100747c1c67b14de8592541a19871f8dc02832", "0034200addf1e1cf0e3fa704681c5e640abfee3a071140dca199876f0f7d5d6f", "133bb75d7ea125d62b069921b53b360f1c3f28338963ee72ba81b196b7aca305", "20b6eed3ed35c157fad3bba582694a4d01905c4a2977a6b2539cc830b36f8f83"), ("120aa8c20a1d08721621faefec25f435aea0b8547f6d23b05f7178620715a80f", "16cbc9c6fa8759874e6755e6528282cd84ee7afbd247548454eb016e4a95797f", "1f914f51fa2629b359a3ae4a8207701734aee8124848722b71823fc382e2dfd2", "2a4fdd84f41863037b26197bf8f63aae001b81dd5d77762d1225d8ef9956dddd"), ("11261c314364fa633a884b78a08a128aba31b29b8dfeb072df3075e94390aac7", "223d7510cc8ed6071af02aee009cf3843c57f3dabea29213f44c9d14cace8be8", "23db140650fae35323c6981d5fbad03772a4e2b284d1550e807a9c6da069fbfb", "0a410376cdf52d325316dc937ba03b376991601b6e280e793bb1070a0d552f4f"), ("122dad912c99eb33af68a9e135bb1928a3a04f7f9ef732daafeab79fbb8ff2a6", "2c6ecbda4bcf0b4e7e3c82e588ad8d3a7863abd2cd03c4c21e1716cb92cfecd4", "0cf0ac025829441a358d5e34c76933785167d0d0a181f22c04e87549aa97f3e7", "06f29b456052ce9115592dc64fc4d0e0ef3070b0a84c2936e3fcdec487eae076"), ("109ae0cb6c558a8c26b679b10226aac9bb9c7be7f8653668ae9d1c520833f814", "287f43a0009eeb99a8cfafbf3e43cb94378eb1fe91eb3cf79878f8024f6df388", "16e12f342fdaab23ba966ddc401c4f8f0619b7f17a18d191b38d59612a7a7bfb", "070df8196ae56359967a876bfd997d27b2ed13742e7abed73209b2bcf11556b5"), ("0c4840ca4fae72004b896fbe436351ff8c4f682683d5459aca37b4eb251262e2", "0c0d5c1bea17ff05a4d52031af15be57828f29e4c02f7d687a75f54b2837e7bd", "04a9729167f372a778926b7a4c1ff624fbe1c81153270cd7025f13699710c74a", "024b5c0e39efacb8c9b3e67441bf527da86c4501482e7f5e686667d6e9f9f9ea"), ("176e6d3cfcd6a19394f8ff40bb1ff740a53a69383fe1abf94364e2784ddb9fed", "18ca6f33bb96cf015523f02b4177beeb1c5abda2afbd088b6d507e3a0e43a1e1", "0a053c383fd937f4eef973b00e4618b9af9646d729a0cb31f895ff63f5290a0b", "1d8fb993e621d557b934f82d80df9e911c082a86855e8fb260249fcc44426ede"), ("1472ed8360f6c76058abf903a4b7fd31daede5afeb39f26c7b2c6cffd59c1699", "084b609cdb2b1c4aeea1b88d32a0689a71fda68e4d98576f78eec6a47fa53678", "12b0b0a3d6124f36d2b73f2d91d057403a8acf47a49eed57c4f486cdd88fe148", "1598d6bba9fab87ec4a95099e95e29ebd946b6610d4f7659524d5d2e185108fc"), ("1a0f8d83cf703fad2a4119ef7e2541f7877e097c3a96516d920c67f712ab8300", "065b11687b7f821a66e8d747ddcef9ce8574450d548eb32bae410631665b5606", "21d44a3c8aa5093daeeeafa8939fa21d400ef45c887777b1b671334fe1d6a70b", "2c3ddda4cced9226fd1551623ae4a94410fc3d4d08770bbefe377f1ecc092b6e"), ("03dcd90a1e320018bb0177698337f40ee6462b5e21c6daf3f2bfb8a1c0e83324", "303addf156807f73a633b7fda2a7a896006dd775c295cdc32b8a2a6e4d0f802a", "08f79d4d9b3aab7d83e669d635970ce804a67463e46be622a3d2f62271899269", "27e3ce9a1c77a13ebe5898d0b00db19760fb4774c3cf61b88fa96dbf5f8d55d1"), ("1855ee17f838b8ae9cab9fcc24f54f78c5e3eeffb68e6997531d37aaadefe64c", "0739c4df97539e739c1ac81566df18ef18fcb1049e5d677ac5c0c7d5f0ca64c7", "04662c7feb5056009b782dc5af38a4ba968d603952fbdfb3a7714864e0b45027", "16ca30324a83808077fe45f0679456f86187f4acd56322d9da72a90a8cad96c7"), ("1ea899d8e0f4110a1a782dc4c7feb046edf45e5008487dd7e05047b30ff4e117", "22fb38830e9e55a3f193dc40f8ad9887f87e9709a6a6a46ba59f8045c5573a85", "0ec8eb58dde01688368c56a645e10988f6dcfd968f8242cf6dd92e4907c3d537", "2247d7129d0842b119cd387cd224e22d7dbdfab53c3459a32a489bedac54d41a"), ("1455a802be5f6eabce19ef1260ca7730f8be12e283f6f62eb1f0fd8ab0ffa48d", "2f51bd7f10790508674dc474a853c6b450ca9f729b61e58b9b088125589245e0", "0536615a74f901508f42e0558404409daf04ac9d70667b2d3e1397702fa96736", "02afcbf01780bdc1cf4da213e64e91c34fbfa667990e67a110a0389dd72df68a"), ("0b8e2221c8cf0134305f3d17e7532539713fc99b6501cf8be908f34c1a40de97", "01556b12c5f234ecd5f3ff6acb3ced0cdab4291135e879a7326b3425457365f1", "0b7df75316afe8c566b400df38fa63c0da7cd9d3098af40842a975b59e316e7c", "299d19d7a232f3687777bc84360a0d8e63851b727699d7cb7218150ea5ed5124"), ("04d8c6ebf26e22662d1cb9dd67a152803ba9d8ed773423bd0e41626683baf084", "0d3533a3c8025877ed9ebf16b4261c2cf8ff4515a21a704238336382257e6d9a", "0ca3d86b0801bf9a4073eb5efbe44aaadd51bd23987e7890d3fb492cf80186d4", "0fb3d2a09713879d123513a9c21c2f0af90032ffe3d42e26c9a229bbed6fad40"), ("243683a8c291f2a50ebfa0646eaa7f239803c7c2db36f1727449df739e359847", "1a9352c9ac818f7740bb87ce88eded350d395d5ac48745063c540610c3523d99", "264e00d2627fe9485a132a842faaaf7f10e2d4a3ef8c4c5495e1a23733968e5d", "245cfe723a1449a51d99ec7335d05d9e562e1b94346e239debacecdfef8b8675"), ("033bbf0d2d6c54227eac85654dac6abb467fa338f6d0ab627267a22e7aa7f423", "18812bc5367001b3d9d0fde83e81779ef8e46d6e939d05b71e7a7472552b3227", "0da6cd22a5038304d95cf30ebba618c2740f826c85c92e2d2caca09fec2eabda", "090e36b412f297e4591f246b8a38074c8181bb3730b0b5d852a0156d662344b7"), ("1329945d4387f7c99d4d6b18b5a20594c3319acc799f480c80a41f144a449949", "0cd4fcb3dd2521aedf19b14ed6625fa31d227989489d414bc88edb363b401861", "280e39043f85aab20be2faf59e7453550c07e4ada8855cb24241967e266ecb50", "200513e484b376b894f199cfcf59560dc16b7ac7e5ea0b7f794382b103a142a4"), ("1dc7a91fa1fa2b870f6fe7a89e2e7e50989becfc214e950d97977b87cc9f1b9f", "09a4a32a54602629ea280c6662f361f248da349084c4c31a7963ae34e80bfbf5", "2835ac145f6e3302ce940eb44560ca9264ab9d4f35865119be8631928941d896", "19f050894a68deeb0f628ac1f75ea211e2c3d01a1dc7037686b790e7f7fbe3c5"), ("0a03032348d0e211437aa2f762084a2a7309526be33372ab75149d202fdbb5b2", "0f1ad538f29f82f2a528d4debf4407f08243436e44eb2d2780642f2346a244c7", "1572160485fd25d10c9fd7f2fdbbca2968af7ce6015d4e0716e01b144ff7ae5e", "26170619aa9654ada96d29bf2a82806646ba742e62bd02667406a83d4eb05ff9"), ("135e993862eaae906ef136fbd4793f58e28074ddb751c1ea1ee8286daadd02b7", "212f97b2ea71b2cfff378e960128bc899fefe8c35c36b78473c963545de6ef59", "22bb45ebbaf9681c860655b0fb415289b073d1db6b8c25adea0fb1cfd56d6f92", "22c89b53340a72b5acb5e241b04c5f47b8a64bd4e90f1bd5d9f034bcbb80cea4"), ("0c222a6539437f41d813ea88f4d67a08908bec58079b63f0bd68979f83e93f71", "1d416f2ef789f189755e04eaca689d437894b66c41c47e5f5907cb30295f5209", "08078344f8fbbe2a43b614cf260b802af565d001c808bea29e819842c5429703", "0646fc0fde0b849b98d42abe90e862154786ec41118bd6d5587eddc304fba5a1"), ("203ab504b2047103e1e7b4786ae9024b01e857c7f92badfa55a419f13c0043a1", "0a9d5bd0e2fca51423f6c9f9b4a77ee2d94c33a43599b02f9310b3090604fc56", "01dd6220c1939913a91e5e62c154319d4f34d293aa8c7f169083295a9f624a47", "1fc8cfa9624423acd2114bb1dc952b518e5c67271e08d70ff9a7815b7bed419e"), ("2f29edaf80e970a90c3a653b5e5f5d81b142a7337e51e8ab06fa7276e6c70e78", "09a15e18f01baf3227b8e2e634e5d8aa39813f6416fefc5ac8027d0c886b59ac", "25b6c011b630798de387cde5a0647ab38fc2d14c68745a46bd94cbc3c3b35738", "100a8f6ba86b4b0c53dde9ef6c8a8d755f960c72189b4e48e17664a933a7f201"), ("000f778e16d76cfd2c4d1388c8ec189cfaafa1c7d1cac09a691fdb02f474a2d6", "0d1cdb35b12b0ab30ca329ed12201cb3625ea3f9dfa206f42adf75f37817e3d3", "06290b08ef411351bca098f89586273dbf189cc691d14d5d541eeee95df8e6e3", "1fb985acc4418c62941f7e76c4681e11a5078fa8ada26ff7bd0d40a735ee3bb4"), ("2b9e679a10dab0e5cf8bfa7cc147848d6861dec5fb0de6e488c72503b6b57982", "06d46fa16ae798539d21b5478f7393df2efafccbf499265f0e928f9c3437354a", "29580c0c761b7ce3ff5224e485e62fbd72d71a4c1e6638a3f753c6ba00c27dde", "1c0b2fa7424019adf488de0af481ade6a4b29753df9b91ca7dd692aa6daeba5a"), ("109b021e1b0e8116bab7e20a219573837ba26bc77e17bf92252bdcdea77def8d", "272999ce50e4006c2119aa987db00764958aa879d61651bb32d8db59de4298a9", "15fd0cebb885ef99ec1368ef4e02d21a90ed4c846bbec2cdbaf86aee0aae20d0", "2b1277506253c5d8a3acb3a841ae3f9308b8a8aa32377eea696ee97bd32f2d28"), ("28739d9b0b4b4fafb219cc4cb4a993171dc9117c1baa1632c3da4845848d6303", "3017b56b2bf9bb75d72f9a8ab22fcd9e5b7e1c95935a1804d67fc86351aa6e4c", "2a125b3f9c454734855098959d3fb49054936a11b5ed42e2f7d487b17fe630b5", "00463bf1a10b582f65c90b8ec5224815f964751689c0b76190fa82b914847b5f"), ("02062d01e621998e4681fe6a8e66217a08f0174dcf030eda4d779f581f5309a6", "24f9621b3bb57a8c51b90725279ab416e9e69933ab8af37f406b50b2b240914e", "0247f3d7f318042081a39b6336fa6761b2d922be6cb5be7b2e7c5bc290ff6c7b", "0ea97b8b44efccf65b6d1976f90694261c706d9702cf8743dab65aee71547163"), ("09bf024705b1159582648f42d19d033818dec3d3497e4fb35d7cd6b14850fdb0", "2bfc00c6ff3e1dab02e267e3a2c64374ebe59b8dc87fd40d208887cfce815d2a", "2655b02d9f38a8667464d4d5572ff2239f90ac19ccbe907c4fb8196a5e18d512", "2214c7182ec5b63c006a5f16352f2367c4e783463e484e0bbd64beba3c1a7551"), ("0d008baba5a3a128c528215523df78a039667e7ebe426da52b56f359afc5e8c3", "13ec5ca710ba1f1e710c07ac93ae7dea877a990ac4cbc2ca8a35c7455ac5341d", "1242aac7afdbcf901f5f16156b37a9d012e8b95a8a0a8aad4f8b13ea5b9b833b", "1859e9ffe1d9ee6c372a8c68318b3536b6e89c99674a641a00dec93fc8aa6e95"), ("1b4483514a490bc622894ac9a01245f6791a739af5f49c464d41894b0c41daa6", "04cb3619d59a3aab1c234435d027f3d5ad4aae1a1dfb14b8e79764c734dff3a8", "2078c468eccf6ad844b36750df4dab5d90e7ce65230ce6fd61642d893b425349", "2a918bd9ee4bc7fb7f84bdd64ce33e938a50350581ca18e4d6fadd611b72fa66"), ("11ca0b59ff4dbc2e2ddf5e5f73e8d26193549322551be3b7b8251735a3b89af4", "19dd80eaef7ff30fc3d97bd82ce5ed3dba2306c68514da94a3e6979b94aabc73", "1f6f0ea11719bc6ac6d93910293de8fad82657a949bc80acd6e3983d0bc58611", "1c41ec1e84d98021f802d87aef6229f9b7d3adff885e68fd8b3c5827f1aecc9f"), ("15b3c7340aafc09f7f8a05652de1ae5adf461a9116980cce63425dd585825855", "0c3a1a1fe78ed47e9b1e769a9419d38c6939103b9c01e7889e7806b6af5d7763", "043160d36cfa30e1e00d9f24388d2402fb53be363d9ca015c6f562e01726fc63", "15b5678d8879fec7b8692d48724ab68b154020680a4f6ecdb1b21333afc2162e"), ("0e44ac9aeee007f6bc0cc471ed6070cd19463d954d6d21a6f0760ae4212d4350", "08385fcb1e0715359abc635eb3fa54c365a8f45fad3977fc7ea8feda7265240d", "2a0c5194fc11238d7a78407ca5d419f05cbd16a6940ca0a5b51e86a9945957c9", "12e58f02a3864a26a32aeff7e1d693805b8cac188c13f646d85f89bd13e40311"), ("2a668b332bbd59fb87ef97b26cc4c7776161219f3d9f9dfe11bd39bb3bda1b5d", "297aa429d00021981f9449433c59955b15eba78917bb402df687c4fac04314e7", "1ca99e9d00a44d06ecb29a2b8b4b4c06e1d111ed0a7692cddc671735bf47ec90", "216c09675d06b12466f2a92dd0d96616567def41c36dc5341d22146cd7174da7"), ("115cd7dd158d20cc5eb6a94e6a1182dd23a5e6819f3d97fd4b504a4056b91693", "0a92671aadbc9da283f35f6f04e938b9b303215080a8f6baf47eef61690e4c11", "24a88990cb2852a6a34a609c60bb7ff31c8f6bc82142e468c4c3d4b1c7b06f52", "2408884bac69f6a4536696d8dc69e4bb32d9035b5f65df9afe2e62b722d9ae9d"), ("0800e05a637d60497a1ed4dcb4b0b72dbcd7636cfe4ccd366b4f91fe67341e23", "1a0fb009d421a5835515fd5eab22cf0c20427948b3c2ef9f6a77d3198a301a32", "2016e188def9082a22d6269a19f613b79db8a33f2351f84d720742dc47912df2", "22e15ecc13289ce12f3286b2511f4b9f5830a4953c2c16e4919f5f40c996db87"), ("17aab248e9e6ec3e0629112de383a59c1a564a596a75bdb758093f8710dc3f5a", "1b6791d672868c2dbb4da77b4db265f468a6b1dcf2aa45361e7e1581dbe6495c", "1fdfd2c6b56e304ab2eb4b762a5199e4cb013097e54e5c421b59c099b4db5700", "1f5d733f9b3346d65a9fcc0defeddf63fae7ff8e25b09ccabe50e69c52004dde"), ("0171de577dd33dfba21ae90371456dd9f5dc758fc9cb44c371eae01e10238e36", "019b46438f6cae8cc9bba6fe5ee70d75023dc37c7e599e6d0a5106ab4adbb63d", "189d0545eb17599509f1265194f599e9ce8ce7c30e7c012ed04a8512ea0f5f8f", "02570318e0fad89f81dc77cd469febaabfb60038ec454f2f5213d2a69f48761c"), ("1e6b65f2584c98eb8973cb01347e08ff00d16f4fe9ecd3e72e8fe320b193e366", "15d74f908f269ea44461e0b6a8d51876d4e44f9e90f5a44620d5f6372452f7c4", "2a81029d60dcba15180c732eefdcec0e3575d17cab3b7b3f3342c4869ab0ba53", "090cbbfeb3dd9193b68596579fa934594ffbf03123e225ce273d16a7d1e6ffba"), ("02c2cd511cc347b2a788495f549fe953a99a5deec745bd45b5df4cc8575adb84", "0a5ec899cfed70fdca9d338b5f95f15725d2fae1c5e90556cdba49a5c7ef34dc", "295a26307ec4ec6b80b8e5a3cd502dc046818e8cc21e579f69bc8e2db032b712", "1f23d884ebf783d63f3892770910262605cae5ee187dda4e0982d051650e8404"), ("05eb21b465751d76c522304ee18b86b7af91fcb38563046e65a27b94f41be6ba", "2e5194d8102128b544d92b40b1c5c374e34e1742f74e45cdc3c0701a1b2f0910", "2e7413b034fbaf6d7470271c719ed4941c2bcdc7570ede54c7692ef968c2116f", "2def7c63f7dbe80495f982bdf65e0c04bf71c7d3a2a3947a8de49b83d86ad9f3"), ("22dd8165d011fac132b266f17fc003529feab377d269a19b794ea809938a6308", "1cfaadd9e24e3aa247c703b49175f4b21c33a46ed9d572f73160484cf4558baf", "00e31a3fb20b69582b1d4c614ec48de413aaed79934bb1a5d668c88e81e957ad", "10cdffc4017f83e4523665adb44cb767941fa19190a602a91c1924c703537df5"), ("199f0f68513171a6c7b6feef02778c914eeb09664182cdcc5a7b92e0b0cfc369", "2660e7d72f33deb5680ab0580ab7bfceb9691ff5c3bdb4ef358f4a148140a2ce", "2c7123d574c7cc8dd6f4a00b6d37897c449d731278515e0cdccb505d2c01f8d5", "0fa0cdcee021e214c5a51de1cb9ca0cdfd8f0400d5863db8f3fa15358926051f"), ("2f60da48d1cc79148bc8576d3c717f91facc8d2b51c38d4b3486b9ba108bb312", "269faa57ec86f3aeb076fe5008b54597576329ae921312aa33496d3095a812ce", "1980a211c602b8ac27266a56632bf1bd426168161a91e0fcf3253f598ac15499", "084041705027123e49f0b619d047f2028335edf4446325381cb645cf4d458b59"), ("12fe10dbc082eef792b2cce0ea163119dd016de1e4a02722c417c5848939694c", "2ec89ad583d14a15955367eb0eaf81c7df29afb4d2aa1927c41dc4ab9e1bf3f0", "244f47048e7bc83a6d8033d4a3b9230f26f81770178d94e8cd2e10cc0297d1c0", "08627dc52f4e376847492ba490c683c49ff6f5dfd80da21bc64231f98e940b1a"), ("17c869bff69ea447c6143268b232663de5ffd153a362fe9f78f4a0e3e911e526", "09e77db443d3ad0e31d8b4fd168db6620e6b2b7095fe3e6d8fedf826fe724341", "1a80096df260dc646f3d30c2d247275a9a238e9123c1a8c49e64a0f926301259", "2f9c19e00d27b848815ef81a6189d5aececd6ffd999405fd53754013590e337d"), ("011518b3369b4c43b65c982f7305c30f83f28f3e612b84c7e0ffaf363e73501f", "0eef4e67bebdbe9d863fc63584cac7e0c0af775a2375dce7242258b1e0548a3c", "20b5f528a5dcbdc402c6d003321a210bd8fc5507d340dfba23fd7c5b25d9823e", "1c35cadfc21f893a0e9d6ae90a6561ae2582ce1ed9b8b493129c2298c8b231f4"), ("0835c76d978f8c9df5f4afac87bd0054c9b65b207f584d70d29d0632cad58054", "2e0b03938c2d63fd1c9a72652f7df92defaf3942397f8dcb1e97d594e3130f5d", "2b77d107f966d04e3cbe37a598673ebb8dd226b2f8b18d3042cbebb3c24f5e18", "105931ca6f612e8b19255a5b268ea54b3a188e80e691b7c0fb0e8f79e8514d39"), ("0534a596b593fdccec28693b8aa28ed51b8b12a5f3e3c681a4922e6e64f854dd", "08109a346d0003a2e99671cd779c38d2eb8108912217cb3853a5e69d29347a1a", "112a275e77ee540726bdd3f7c345f821af8ae5b1bd4801053f607065f3fe3b37", "2d9405ea6f956371a9174341f5e721f3de75a909740d30ea8caf1e04d12d2549"), ("1dce635e40d7a640c115d815436e51300ac0df8e43f3d069a49037d98f019ac4", "240ea8324ca2f898ea641d979738e8edb0ba5f5736f41a3e53f0fdd42e721895", "07a8829593fc1223f24724ad3b4f3cef15596948681bd7bb83a6a172d15f2f3b", "1a16096b7bdad5ea98314efe4366919918c2ec1f55cedb27637a263620d12625"), ("19983e8df47611b7054cbb84d7f77b862599559fde739699c29fd9d25e234212", "29218236d5abe379dbaf2a61701308b7f081eb577a445b8751ecc254b6c70b3f", "1a99aacb41d5c831b1783dc15c62a1794c40306cfc6f95c4ed0fdebbfd09bf1b", "08d01f45d2ad5e79e1e4b843609349da6121a3c8b494ba47aa2e4dc023dac818"), ("26ccfbf0d7ee99439d2b87e833d09f47efe82ba7554e9436913a71f027e9b796", "144f5105e1cc0537b41a5d4893d2fea7ccbb3dc4dbb2f4c058894d0f88f995ff", "25d8258082839a611b1793c96e3aae0b101b5a60139bb9b1c53efe0c4b6e6768", "09e835d05237d3f9bc566f5dc8ce74ef51bcb7a224318fd514a0c7c24ff2a29d"), ("0e498ba4d3ba5551cb70ac87048eb467bea6f58385abb9554bcb35df4d9a516f", "23735f5abacf4f60feee871b8ca6d95734985aa0f3104066b4a5a938876aba67", "0ae46d45a6e96161f31db4208f013971bfa9bbe03a137903a57c8a993e1e78b5", "0d4c49ca20ecae7456f426f9f4b25f292fcec5d4e2a3aa16132f51d8af6483a9"), ("0a046f6fb7a045c99130293dbf46cd31c96b1d5e53f8ee5f0f9c9f6a26c72a9c", "01b9d8157b337d1c721c82e83d0bcfaf1dc55b382124e360a7e517a94ef99b80", "030b55ae9b256eaa6919dffc5c6096ab7e0daa6db2ea90d4288d10c6e3017961", "1c4e40eabce6caf783df941d48e27ec38b80579811846a5df2a87154e6b70c7f"), ("0fd721d614f077d498da234233ea06db620a36b565b71470887fa47a69bed5ab", "173cecae46028b9d2a0e979b043549b34b1dd25a8aa52d3892eb9173e150ee7d", "0dbdc2ad2d321fb0ebaf0200f9326bdf0595f1441a7b252d1d942294c364d7f3", "2db4f1f673fa35a50a23c87ce54c54e1df4065f707df7e1e1a2826631f5a6ef3"), ("09bfc08d3eb8c89a49b74528a47726222463094ac50d82f702ffd8a16c9068d6", "25173b2cca17197a8e226f0d98b089d766705feb6a70ae7e035d49f98d329f35", "0a6fe5890c4b37bb552a9e40b290c2590ef309e58107a7f351aa60945edfd3ee", "1d4f9634bb28e93211e8000099f0cb2cf248f1ad9deb15d5c74eb969c8cde11a"), ("02b270def8f5c40082d20977da2cc17c234f3264c0ba19c6e7b849db38462091", "1898852f26c2b6704d7077f4353aefb21c3426f52459518f53a5b84efe576df5", "18b218eab078d0ef50feccfac63564b30dd0d17b5a58c8536c1b11fcded6e7cd", "1339d2b966d7be998be230ce6d12fd281c0a77050dedab2e4dbe2e6d124c7550"), ("080feb73fa106649d5096a097b63cc11c37f7aa82051f27b00d81fffb0708d65", "1a051216037e11c7637dc571be1632c2b0d26135121960636c72bce613437c75", "21868b7e0223920ea3e74094c10f9397cc25a6ae4d36bd026a064ad582e42f1c", "0a7187f8b3e4950f9a9f8f591622894c6219d722e6ab8b11ea33f85a532da260"), ("2ea8b3f73a9f7a8b04897ecc6f22100c7537e8c03c4c1725d41a28cb010f6f1b", "10322f8e2ff9feccbbac5536d2353e0d2f0b86fb6e29a982708c788a4b6128b0", "2a88e4a0c5d9092ea2cb799e8d555e5800e349a3a57b168b0ac2495504dbbcb0", "0d72ae6d800ac9e12eda77ede6befb3111dcd5d07b2a309fb5ef86b85b805997"), ("0a9b4ed6954f2fe696393131667110466bf8651a00c2f28b03f63d06a67c6e51", "1edefaea41c34b7fc17c74d0c1482e5624ae3d10a947b264588e9186c7691d5d", "2027a3e0424cde12442a64385d211b12bd16ace2efeca80f9df0c14e67cf4a8b", "11479c8dc5b5dd59c5dcf43ffb5b871149760cb0d666bb15bf6a992fdda314a4"), ("2dd087e2b870d7d04e1120a292b1a737a07f0cf598a247b1a37be7130f41c94c", "2b2a1d2179ddcbf199aa3be17e59cb3993564db00c8acb894fe2a4107e60c084", "2c4d2c5eb91ea2964d3c265206a99b9f91e6b4bd82348b67a42a177cccb80fdb", "1365b3708cf5f8fe2bfa2fdf387ac30cecd4826555a1d81f9b47405629876cfb"), ("1a34b6893a68b89b7ea01c29a9f0df3e5dbcd4092bd82a4d5300df584e296ea6", "139affe3ae8f578753d77df823aa939fc1e9eb011c7fd5e47b1ad9ccd18f2081", "2ae3280bb8eb2a93d3039f7a3737b5a097374d87ee91afb7f00297f9e2cb2ec2", "2af198bcc24469245419eaded2aff19c37193cbc3bf01fb0c13de8a0ccc00186"), ("1257892aadfc8146725b411ac5667e1da7c89e717a752747ef53ef2e8bc9af1a", "070a4fb2411d4dd5572b6bf44c48883178e9669d2696bd96d59ae1e7de0888bd", "06153a5e71df3961d32215f6a46f1955ce9e97f1a89e684f95dd1b4c1f42a32d", "1ff904500308fb6a0671739e66fdc6a479361282c01c209d44f8e9e6d969ad5f"), ("0ff62b247d36b2a945717de354f0afc43e67087f133239d80548933405e2956b", "21952e76185b054f9c3b29ec4c2c01d938fc696ed4d2a5d9674c9c7149653046", "1fd1a9b7b6b4181ea64c3ba8d3e3352c76ab68a77e16f40944abd5496c860732", "071d9ae5de003d6ce107e67ae1fc16f21639409d715610778ef18b6a7c43cc7e"), ("25b4ea33054aa4d445b9a7adaa6990da864fe720ad2ca7979ddea65ff23428d6", "0161705cf0e26356c54e72b4380cef8b578124bfa373b17f3fa45402d1c19824", "2f7c9f7a23853d4680c301c858b3ab04f726896eb85047a2dde6507be154faf1", "1f414b3e989495b33c7642ba9099ea54db3b4b5d786efed54660cfb6e00853d2"), ("1b207b7b269fc8c28482a721eeb8e745ddb4006c8536a1c63db86a9048260c8c", "06deb3bff7b87198a76c9e6deb088726325c25bd905215858e13d758fe8bed2b", "037bc10199d2c3098072ac8ae9098d63af809a0cd0766ce8b3b3466e26f584a3", "1df59e9699387aa73f232798bb8b66e5ba2a3fc6834f96b806bc34786b8d0d54"), ("29d010e1c3db47df2b8293760976320c4246bd14883cffcf56311cb87cb18088", "048a2262533303b0d205f86dc0d94f0bd3fe02c5ee5ed0abd3866d4f298647ff", "2cbf86ef976b2bb8e6c58cb9c24784f12e905bd164ca35f33c3a9c89086ebcca", "22b3d16c2a707291a73aeac9a1feabde39dd5c0bd1ba4ce49266282991277121"), ("0a3a767fddf84a3c1e2a94fbe69e5e9f51b5e0a4f098bf97564978619003b25c", "2dd7ad8fee28d7ea0a0f5de18aa56da38ceb8a7ee83abd1a2d92e4a75d20dc8b", "1faa6617becbd8964560d11f203c5ddf8ce2ff09fbc1bf80e3635386d6ce03cf", "0e45b000ff40172aec9610f273ab0fb9fcbe53642f875edf61d885c453b2e92e"), ("2c346faf9d1d8a0953dfe10a8a6d6026345d184a56925962e667e0c1d150cbe2", "1f7829a19a597a84903c4895fd1b7cdc1a2feb21767e718465a73684cfaf95c7", "09276a5ad943453eb19bdb70444731131d8745c2fd1d0b8c6caa59f38afc2297", "04ec4aaf7c4c7c4024dcf83751245158d4ea36e357e5811aeb2079fc277fa2de"), ("0280e3fccb77dac9f7ef98a3e2f6deb07b0fe640282f67107fd0208168a17e82", "1f1505dbfc4eab49bbe713f61c6743877d65cbf0673b12e35f87c02a09716c53", "0de6535f50b01a7699a8a81273885e3db680781c14cd85342586dbdf90d9a697", "24d1ded57143a8aac5e337a054e70ed659f436ee7e6aaf13ba538c82909c6d4a"), ("1a595d88b5a9609cbff19ee9c128fc750cdcbfbbf826795bb0548f16bd01bcde", "1c6c46729a632d7937fe8164679d9c6c2ed49c59f76e9561302db70c17f9d74c", "1b8bcfb08fe8f71c3d7987388b86f1e196598e067448d75b5f2f43022eab6c5f", "071215c094bc7676a42a9516fab40328fedd692a7ddc3567c2c046c06b181a97"), ("1479bdea921e4e4bfba0fa8ab99f8bd41eccb3dbc94896370685f486c5ab66ae", "1ef9d28008972fa2b81ba65683c20dbfa561a7938ac1b8e18298425162d271de", "25f4cde63f4565c9184f772bb62ffea6be33fae9ba1b2d60ec72cfa071b1b275", "02eb9097988081a13e59a223830ddfe0ae9e4a96bb6ad35ee3a55379e3c67552"), ("115b0f10346f97bfb8d42687ef986e6cfb8577b94c5cc5371b6dbaae5bc3b4dd", "0ba416ca06a5dc4decc5ec32d431314ffb26f1aeb46b69c22c87b4a2ad555636", "1745ae942fac1a593baaf1c7fbdbbc0bd001f9ec31f45783bbb9ce896e70ef52", "1749706ae619ab80659d2c6efae3f142fa4ba1da77f945d3930340ba358e1946"), ("21e6de8e12e02e42cf85b4815d66c8fce0b67977c442b9b24f7e00a33e16b66a", "18fdc167ef118dadbbd5395e52d11d7bf1513e082117c34e61530537182062ab", "1ce09908d5c38d0be20bf42aa6f5cbbee0b94448cd5073d2147bf95a29e6a8f6", "0397e67f55d8ba4f70524d3688186b1b891d417c3d0649219c458a987f19b909"), ("2ef4a6b53d581214413fd0c22d6246b61f13656fb45ba6988cfff6616b2e24a7", "1e1ae20f4b04d5d27737b0bc2cbc6b9449bb1988357c377d4b377cb1bf904e06", "26db41b89314a3db35b1df337701f6322d6e99732853ce0d9e3daec6f1501464", "2646dbb47a28cbd297ccfdc4be863e9b6e285074c57fb1c2a33e1a2c854b76c6"), ("2637ba436466c22f98e23e853f581fb6ca3595f07be9e86750ff8d10f774f666", "1d3e5a43ab74f2cf101800f58f925a0d94736bc72a08d32ada84abea728d2eef", "1bc2c267c63ecf9d9bd1e482fb493dcf50650baef47def22763ef84efc956267", "04e6793101907d3285b4353ecaafab65d64340fcc89c5eaed9d3a4b3b17c944d"), ("15c654ce36f511d7e58b5df52434d1865d942805ca9c0d24b3276742e2c2ea5e", "2ff9864c4b454dcb9721d70b8d28d8cb793bdb6b0155bd2b6d30bace6c687d40", "2c1a25ffad08f814c5dfbd5a961a05a7e9182a6e32ca71a43c1930251debb37c", "2ca987e6aef4fcfd3638fd6e15a11c70608925bcb99438fe72bef08257e28347"), ("0fbfd53642edc3f9bf2328c99b3c7882e1d5e7147265344d372a6877ed17e7a1", "068af044b6ef8f19a7e08727425b070e2448ff83bad4bb06e46990ed7186497d", "199fa8f19d35e955dff4d1739a8f1f771c259ef22a9b609501ebcf77b409a132", "0009e77f85c3370b2e1bd755e81e3946d7647b5f559e22430d66c32699add40a"), ("2d87b1642a4900780ef8328647c475c9812986d40f27814c06387a808f45065b", "069c02eed9e215982784ad2de475a28d8fd6f3a7ca6f27a4117f520d45f32a1e", "196e1b7590d980b47778fe829c505e27d79cf7b3c3037175e8c015248d87572c", "2dde5df06d0181d25f6ef3b43fbbf786fb757e4dbcc7b4324ba77902586061d9"), ("2a941a02280ef1318066a90bca4cfd867ca88dc22430ec75c76b5d90e083f2cf", "23a3892975fdb0f30594d44d9765ccb75f10d577a5cd8f4e9540f22ddf66d351", "248c14e02ac72f21a57be833eeafa08fd644cc00adb8c12b84673517ef05d7ed", "19c0a263a4057a3d39df372b5ef44eba88550fd0665368eb1f90a5dc23181ed3"), ("006dc1926f6dac4848f97c6a7ee3b3d2fa364911cab171b31a9b7f07b4a93255", "00deb5b36b09d6fcb215352e0fabfde1d563f5b044d941ee3427ab1d127a8767", "129d08fe6e632428c4528016e494db6c2b4431f8744951cdaaaa38c31c36b647", "2ec2bde1a23eaedf5832ac423b6368868e80effddb3f83a7182fa71dfd7d267a"), ("25a39b24fd3c71eb119fe093a2c0ccb55da773676985ab3e484ab6fed5907e77", "0d5dcd6d53571aa87e6546738701c97861843e5a9d58efff75c00239a0cf92e3", "26cd78070e9eb85012754311130a6d4376ae232b9e458ba167165281c167d1cd", "2c703795a368186ec596fa7ed50dddee3afad7e58ca4a835ae3f9a6f56e49511"), ("16d8e10c4f04ee20bb1752f22ae64ece2ffa17cd5cd2338c0d0d1dac992772d3", "2377a4b879327715df1158c9673cb5d70904d4172767f3848f7a51d196e2a057", "2e03a292c3435db397ffb01393aa2ac0bfb2cd7301d83e50825b9181c48b8ec9", "2f7674f62337292b7b401b1865fcd376637cf8c919e7fe6410075db176c01190"), ("008b48c3e2d5b5c55e68c6ce33aa22d1e524bfa0ca05b9dff2c2193bf63cabf0", "07d3a945079ee2aa96a708c293f4b2872f1795210970292c889ab6fd6fa407a3", "1dc8003c2f890f52986d0b8118334b1b471762286c0ee7bbeffa2d366cc7bf54", "20942755f2d4680280946900d1967e1850b1e10758bfbf663238364edb13fcd7"), ("2658f5111e4f5c5bfd98610efd3c3427df2cbb7700f8944b4c92ce3e0950117e", "164e81b27f18cae66a5b589d73d5d4d2037e7301457b07c2fe10842f86e2336a", "19c9ebe730402b208165b3a40bec3afba8059f0c9ca400675fdeca36a8d7a42d", "14dbbdda15400987938942f698bf87a447aff997825347a8906842f1fa6bdfc6"), ("1986e7e6653b925233b2b2b8d61957642abf681335bf9310a85d3acdc4566f43", "210ae7a6f50df30d6ce4b21a30b98a1ea20c5f0a5d909f96fcd0d2a2700c4b3b", "2c26b04f056c4cff62891479f9d9368ccc110470c1662ae63ce32e114d26f658", "08120e12c202e6b6aaeb8bb7031533105ecd814cc0819b86077d579cb2de617c"), ("07cb871b87682833e7db8e58a0dead6429e036ac63facfb4456e690cfb47519d", "11dfe0b00c3fa9b282cd75e534ca7f3d8b514451e693a1b44e1f8c134ba36cde", "23144638e47533d892e77fe8c69a7e05b73910b1eb5e196d208b11c8ece7895a", "2f3c4c9bd5f990dc6d93d9424d458affa261585fc8cdac4605b5344d1f864d4e"), ("1bf1bec4af8ba7a367b0092f4ee721466f02b7c6cdd264c3a5f6a0563cde1808", "28ccfba7ceae68c24ed0175ffec258e9bdedf81f65338134f22b1431c7b4d2a8", "172af54fc315b69a23c9bdc6721c4ac637bc69b80be5ae941c2f256187434934", "2103b439ef45bc45f3fce4024cdfb84989f0609d88f0346fa4ac576b9162785a"), ("2e9b875847c6cde276747fa4589fc4e12f2101fad7a470126463afc596d9bd5f", "15fcd7bfbb1f2a8207b17106b31407ce7018264b40dd611d0c7f8da35078476c", "0b8d5b2cd5e05cbf53d09f0409160407ae05ff67e029e4c63ab300ccf2a88844", "27312b919e11d62c8b1e08ed4ecf17db6e4a8501b61d6303faa30a86e93bb8ce"), ("1a037453de56b10aee48dc6b8e401d947fab97eb98b0fe3f310ec2e5c5973c07", "07d17b8e24960c7fb9b2806dcdbd4ac91ee1eeb7af7464bc31527c9654647f03", "2b6bfde51004dc1b13ec61286b3b7f8d20a64b565017476b8cbc84423de4f5fe", "090f0ce659d7f4ce346f676b0a9220690843f8baef3398457156f33594f4f16b"), ("2f582bc1cbceb2277849c2566395590e3bb9439a7c2742cee017e7e3597813a3", "1f75a2492e96c29cf3a60b9aa94d728bc4ed77270baa7274a89f8afee3356b20", "26107a576ceffe3f801de62710c951bd770d78dfd78638d4a08e9fabf1c293c3", "01906e9db3be549cc0a78ccfe11ca96adcd9ddf048de1cd068ef49dd7abe2898"), ("021200d19b0c82b1eb568da81d4e6cd6024700fe9d554eab119f752415fd5fb9", "11dca800cdee68722056716c72b23d68e5e7ec22dea75abdd6ddd17015675d0c", "0701dada7702a2bb84f5bd07263592bf77d1fafcd99327d2592cdbb1a0390afa", "07602120e13dbe8be2443ba5625e2bd0232838a543cca80fb8de82f596ec5c3a"), ("19bc980e7c564dfac20455cee99c2c8b4a73c6472607fdd2442f17616e425d5f", "0e47efa71ce302556d844abf02ecaccf1f06f1e3c95321b93a1f333b23029588", "0b65e5edf5a10b8cded7a741eef35f98ed5b42bbfce491573d0eea46824903aa", "03b04728c2ad668bc2c7785ef4a927d202b5e88714ce1678e62c6f08a36fdbf0"), ("01b000495a9771b1cfdba0da654707206b42e75816b9a9d6d36d8866dfe6db2e", "1a957745cc76acb4307fb569464500e06cf850aad89f085936cdf42184d4c75f", "29ddc96ea5317e22c48d934465186765adff032b4797f7670d058f2ce7f881fa", "1be804fe813a5e3a3c2c9071b62419a119f709e904cb15fb9cf141d7717dbc90"), ("1d4a0be73263e52b6255c3af5072b456f47c1663d213e0a59dc2b2383e5f4a57", "2050cfe0b0eddbc9ba5c06be577953d9477eeffea1a7e20a5d7adf7034c45857", "1aad01ba27796195d2239f41fd1dfd0c6fce422c32ce448f674266c7c8951a41", "206cb51cbd0cb208874764f291cea7c293a50095ff81945c1c294fde9148509f"), ("0899118b8b4b5130eba3bd21ad6bdd378b7e512176cbca9aef16cc7002c614bf", "07450c956606537996fde4a92e7c87480a2f17e434321a564cdcda3e341ee555", "06d329b75c4c5e8001594f46ee0146558a98b91cdc378cf4f59f928971072a2b", "129572f51e210740df3ec3c520d0b3e6d7d3247e2566c393b7755edc5d8635fe"), ("0be2c71cea9793e30d95969cfe68d10a10cb345176ae96845b72d4a067b1036b", "0abac063e231bfbe7fd3a1268572bcff900846a7d656b1cb8127b6e55c1a1bb9", "22c0c2872ece58fcc23482aa2331798753bf714f666e1e5a896a36af1625b0fb", "001135f2792be3db7ab639da20008a25ece8805f6e0562388f92b8f1fdc3c2cd"), ("0840e26a71a6d9bb6e303354d059c42a7d4c278a037b1ac050d72e0d3d285c9a", "162e371f66ba7c3dddedaf41256211ed39fe38b31d48f2721cab39efb40fc9b4", "25aad2a44f8b58d6354d9cb5148c4a5f989b4dc9225935fcc3847d1a5a6d738c", "2c4c1f243dd581daab332257969856be48f8e0bc0f0c020b01fd6d5564f70d9e"), ("1de0019140f10abfad29e008810269e417863dce6928342687eb1b2f8136fb8f", "2636e6063d602dfb13447a509948beaabe3994341c2ff6d9f2044ac870310d71", "06146540c8f63a0092508dcf96d98fd1fafc82aefe68d8d317359f7d750699bf", "0a8cff832ec539f6a902306822e1a00ba937cea8bd314a64faf78e2460726bcb"), ("06838b269abe5cd950c9ac15d2904f66f53488e3588316af2c1163aa08403803", "2aa8d302bee742c2061b83ccd70092ede5f33bcbd831577b07cca2a4bb3bf888", "1c05cf4fabc543e961797c8b24cb3ef9878b0ef1e8c9f1ee0b2307e3df628402", "00fadf07af7ce9fe084eb01a8be091201775f0311eb74a289f3b2c4a04cf0f2c"), ("1a7b2ce1b9030cfe4c6376427b8764952436550eddb4539b7e181ef94ea7e8aa", "23ec55988e06d55af646756f1e03bc39804c156dd1aa180e4b41ff32a077c948", "0d96f92c892b27f268c65d6350b6364d60fe2046a2469cbb442e3ec7692a88c0", "2edf9a832bbd0e4d49799abba7947654a07988c61d8ef059d0bb4a151e1e0cb4"), ("11ad195803543dd9a361a767a5f29647d4717dbea0f020b21ef86cba9a549f45", "021f85fcc2d036eef8cb6e6eec232999cd883dec9b0c729bcd6e2f14845c2f29", "14b102ec2c05d47f778e057ec674f47412c1717765d5275e0bd92fca7d2909c8", "20aae8b3aa460c23e42322db30c418061fbf606aca9a6faaef26f738354c016e"), ("20d4e1bc8369b73f4bb0942014f4d6557081a8d3e6451ac8195c037684e73142", "1e5bd1eafe69d828d512f28b69c4e4e908847b000ce97b5fade8b02455842d62", "2b90f3f50bf353ff455d7a46e986c059a63a6b3816f2e0c84d68cf548941c372", "182a0a324a6909ef89a417826c7cb457ae9258c2327d17e4df58f984765258dc"), ("23635f9d7c4e2da2e6e999e79f1b48f475fdd57dc4956bc0ba5fca6c16542fe2", "1cd60a4108e2a426bc742a9feed413261c7c7275c585831b49fd1a83b4b69e8f", "1cd36f4655ebb5d5162b7e4c8e1838c2c425cae3057bccd741c33613156e5476", "0ee7f73b1fc2cd7167f1005e3edd6177a1c8e86b28e08b19157512dc4a1b2595"), ("267ab97988c1c48b337b1feb4438bd5b46774755edc1eaa6f169f77ff0b81f22", "2f899a60ad4d50dedb5209333a1c894205bdc2399950452c1d4e19ad45525d82", "0fbe87b6c37b1755b491b03320baa1bf99722598b3f283027ce63dbcc5970841", "1c04e154f6d286e5eb3e1934c8d356adf6f4117e4297e8b5041fe02ae725c412"), ("0930683e1a73361b53134a49f64c5ff8e816cbd2fe87a0e2d15b11b3e346aa56", "2528c95f61c1446718c8e7966386dc93de45ffb82ca902cd3b3463296b369269", "0f971981d272c894914dcb927278ed8facbb3f1b6b29ff10c9ea21a3c046e5d8", "202c0edff1f651318fe495085eabc5828e55e544416202fbfa29e0073cef253f"), ("207b90ad88b0713352badf9c4737ca624c7422fa42b2a65ebf3b6524272d8b8a", "221f8e22cac99c473ca44ae06da349a2c441243e8299fe521d828b2f5cd6ae93", "03282e0b4cfbd3469bfb01f534c27e09a453502bb74d39538290a373d7977e9e", "1b1c57c286ea0106eace84efb99403d048e03b6688f977db373ad13537b5dc97"), ("290b33d60c1f94fdf35b1955fd6df9a469d962dc34ce2c977340cb833024d3ab", "0351bc372b266ea08d6128187ff830d386517696a54a26f5a0a3c7024b37f3cb", "218cad5c39b3c7106c4dd398aa1810948fb0cfc0929cbe879d11ec80e5456d88", "237172b43740879e96be2b96b63e4510979cf11666043935f2782d1177a56759"), ("035956102abce8853c444d66b5fce778e88d6f1ebbdf1bdb125754debb737397", "212b0711437d19744da660d2a59371faa296ed5e92660108a23c686b529a3f0a", "29f349f3d5b29d45e2dad2c88c729858d8b7ef0f93d30a9b4187b86b8b4a563c", "1915786c5af27a9919aa0dd138649463181ec83b9790856c64c40b240d788664"), ("24e2a48a6975863ab96acc370eda0fbff21bfb2cb7bfd3868fcdd0e72a56898c", "1ff02b8e673c73224b232c69188b8931940505d6be3cff4d7290225f55a2e677", "044ce8b2f0660ecf5d2ee599d504dfab53acf2eaa69265e837474c13857d3f28", "11a5e8eb2bc635decf29eabf87f6a050452b263b43c4a675b6534e6a69bd048f"), ("00eb994aea749f44fa9fbc332f54592e1bf1f98966278076fb4b3b836dc7bbf7", "2e0ab611de94cdb345e06433e577ae4c2057f0d177af9203358ac48154047cc4", "1361e529281eb1b82e8bbc719f51db4128cfca06e4d5787905f4b375d3511cb4", "0e99097aec0b1d0e5985a5b1afa2e208b8bcf81a8d9692c736b5dda53c844815"), ("056e4cb2dc67d1b8c03f8a7fd6d3792d9e8e7f3dee4460572abb0e48ab6a6707", "29558d4f5694d63095bbff2c77354607465ce8d3ac1d033cd6d25957e09ab930", "220f38abb07c1879579103a51473a6bd2fd98b0a2836e08b8c64e1cc5c09290e", "081b2cf2543618dd4b941943bbfe155180659a3936afc485b509bd6877324b67"), ("2e3380cdc5b02458f295b044b2e1bf5c5180a63ffd9727be59667381ee1c4682", "09690c8901406b60523253bc1d32f00a1c3a5aa2023d8d3cc1fbc4afe2a023a8", "287a7917cfb02cff1cedaad4d02bbf22e77eb45f14d99bd163d1a788c18abc91", "08b1876b640115fd6b1782305464ad54b63c1545e55294c35e8b615cef4bc07d"), ("2b8ae1f94faaa40c8e7e5585057b93f64c2cf04cee8083414cb274da4207859b", "26e2cf9b54838257a591646f1b24d94527aec708cc5a610a7c0b3aee67d5d7b1", "2cc73ddbad3a3713ce35d8a72e8647cc69349f3da4fc6e7e7e7ac8d126e218ff", "12e8474b41a2f874d26b4cf8d41927066b2116d695971b222b026028dab16441"), ("22fbbcbde2b641700197c8c3ece92b4c2994435e853bf6c97c50adbba0d5c5a8", "118c6ded6fa5edc2b154e8c856768f37f183692191e2bba58c552d13ad57c1a0", "12a6810ed93d90502f21b171caab0029ae45cda3ba146d8ca4244f9ccefff9b0", "147c4b7d9437258b77803c34afaea6329cd9c10e39153ebe9eba4fd8ace0132e"), ("058ba29f1385ede731994893724a9c8779ce996fd6715e7e1e85b4520ad2e050", "09c3c430e05a05d8283359f70566082076d7855e22b74511918ebe094e523086", "1e21cb8c2a28b8007e0eca9d7adedb255e1134d3ea19015042b0bb7a2724a497", "1055e110f02b7a39feb26ab8b1bacd64234175d691fcfe486bf4fd9f2725d424"), ("2bbf8011ff8adb7ace2b80ebdf34f5c6ce5ec0922ddf48f3d0ec5d3736aed235", "221ad5196db9fb4125b78ee9523aecd383623128c40af5b5a774c8e00c45b2e7", "0692e76d066de51d3453bb79c27bbbfdb96734b3bd1b5d0a96317392131f63ed", "06edb8b29e65e920d53fdf36883af4a61d762aac911c084ffbe9382b78dd362a"), ("1bb8c6645c14efd4e51852d688aacfafd1655da3230f639dcc4f46801988fc63", "0d0d0944b97eab4670867f5f7a7374a5a64519853456e792a030fbee1b0a7dfd", "15662267d12851023053324fe4d1e683d93c9e728de4eb4e952eb4237130ceed", "03b6eeb124b556d32b5ca5148a906ad0cdc2160feb48ccf3a5630b67f62b04a9"), ("27d1f57a6eeea52b3aa6f1afb08a8e3286e1d345d9cac7480aab85d186a58065", "2d04879724120f999e31799e164f963b1a61460eacedc1ecaa2782dc27549c20", "12a7248ec607b6fb61e4a8c1deaeadc8376232b2ff9c53d96f0e2a8f46ad6f6f", "296f88091776219f346cca5379855b3f8dde600eb3071048e4a98bf41a173626"), ("2bf0160a654c1f653638f3504741c9928ed106a2d72a40e734e78ffa4d56cdc7", "11f7c3b53a0738cee4c58ab55e8eee0afcda0310fea096102e721cae179fefeb", "28e886eeb8910375f784216aefa36104dd86cd7a5cfb0da95b64e961c1b2b0cd", "23ed766e8f9402c8c0d032d220af3f07d6be393526e01ea0eb689056f87bf5da"), ("09802fa3cf24c5e24318fcf4db00251e5d4ade0a7369dec2ec4caf505bd7324b", "2cee616ce0701f1e8d7d4a2a8d2d8ade10ccea04e492dca985d3979fa8e12cbb", "1a8de08051971d75ce174007e18d18893884711800c92e541d379f97bd95f593", "1934fe2196471f22c2e9ea8efe5e2ba7d4c44404ea218bdc5278afab4b525b93"), ("1f3c09f069979714e99242061f90a3592a7393b1a0f797e4388cd71d0f3cc937", "0ec13f1f2c2942bf9c58c084f32259fb70cfd15a6c04eb85a744c222d549636d", "2cb0d285c38313184dac2a134c5f240c38b7384ae81dac700d103a1c9a6812b4", "0c5d2d1f34e5f374fc91a2d0c53db28621993a6db52a696b67da3580bd53e196"), ("18eefcb13b308d29b6e473b099a34378401b0377bab7131078584d87b3af2356", "2bb775bd75fadbd50ff855b898de7c680c74ed549a45397749488925b8af6979", "22a023023556d1d511d988c967c085406d9f48044a92208fe30e1e0977591826", "0c23fcaa3aa7d68d25b883aeb17b82ad17f728d0dbe61b3791b5d64529f645cb"), ("1b7fd94fa73ab063699dfc65434104f873e46c8afefe8386d335ba474ce71681", "294dd1f6ab0ac0e4cb14b228a11a3b638b7f001cdcb6ae9b06c0d8968953797e", "2cfcfd82d3bd209b7b3333c5429239668232dcc7e0f396a4c81be640de36b3ce", "0a4fa4d5f8604e07a3beca04fb86a54d0030b8f26d37cbce257eeb232a83ded2"), ("2d686d50e416efd8dd4c052a62c59a06e8796b856d6571a54123dcbc47e773dd", "2f9cf8c365a9509ed4bc89fc22996c93ad9cb2208a98de8622ab60acc6fe241f", "1f8172f00e1202ab0e51b15115a906ace6f3db97aef9ae75cbc8662a56610e05", "1d97008e352d98778eb91fb9fab997486db054be1122d74bdfc94e54aaa7eaf0"), ("19d69fe62767752126b19e416d5a04b08e9633626e0d8a719922ed4300e056f5", "046f99f58498a353edb58332eb6ad2559cdbf40762f301ddb48243ef9bd7f978", "0714a40d85f8dd9b26abf41cf8ecc856ddb290c4f3abade4c4c4ae0936f46428", "13af76dcd63af12428b29515be0f3acc4a17895756599bfa587f1aaffb443e05"), ("1d8978f2b4218a6869f3f9cf3b982afab9a52fe1e253a457a48272e3cf77d993", "29c42f3678be7c15645ff2b7009df211ba1098ed4bad9599466ab5abffdf60f8", "173e01f3cea17c71f9f958288c252d856def8aa588abbe4ee3a7caa213a11263", "1f2dbef0778ae894b09f272e796fcbdc53865d6c9246610ded58a72fa03bd7d7"), ("2cdf205989d22d9dbd554b4f08bfd351284c6a5233fc7db500ac3bf2e928a6d7", "12ec6384e0421b52f51ccbb54fc3ab4856a11a76438944f38ae65144c2729240", "0ee17d3edaeb4101888d51e478c52e99c74df358b1c54b9270a6402ea1c11358", "2febbf53e9ade183eee27d7985677dbfc98ec1094ddd30a53e1ce05f179eb1db"), ("2d3da4447451ae86514d258440e13b6c0c25773a2a44fabfe5b7c8d940003933", "17123c75904bcaeed45cd0b5115df9b3109991ed5996cc18380f7f61d61da90f", "038e9deb90750d3aa2689a6025227dd2c6ccee3f4c0d512483431ca9ede3b58f", "2914286b615442786c411b86c441349b5d3daf6cd8c2e26744cc9f39db452dee"), ("052a5ef1e0c998e86bedbec979cc5117e71afdd86a35642eaee1dc2e96c646be", "1dd3317c5a396b6511484ec6f2c8d4e747018e4bb586f712e9ab25178348346f", "2579f54e51991539701c9fe2490ce4de58b394bc765d8d5ee2c08caaf4f28661", "15ffc57a705948d1b5772b5e4afc5d1ec8cbb590f09c0f1f42f5251da02149bb"), ("0b416228b623e52dc8260df85e6aeaad566ca43410de31c30aae1b75d8f18966", "0f7a2c22381650f02e345104df98843f2eed8d936cfdb3d8b12e645991dbfceb", "0ca17223e21601f115c4ba10bb4c4fc35a22743899d9be179a857808fad20c0d", "1526a7653b8fdbcd3b89d74d6790550e3a2fdb83dce8fbe3033f6b1db60e339a"), ("04a62d85b5e77fb3c4713d604e8daa064db18231a65f670ec45778d119c83f2f", "0cf3d92d93517384a8f00e97355fe5c333a52ef3e19f328eab93d797a122229f", "0e722333089ff211c1d09b99d8f1154425c86dd113652c3face25fc3467662ab", "0c48cbcda872dba174dd27914bcba5fa56d633b389da18d423c1a1954fd73060"), ("2846197ec019a5b5dafeb38b459f8ffd1eec5f7360cd75850190cd44f73468c2", "1fd00fefa694d159ff66d3bc0248453fc30d1b48898d34d773894909f37ccd51", "23eb5d1000579ed276d788b9d205e7c495aa754019d08f6c1f819bbd15345ef3", "1be498f25b5d4ae8df55099db89b7be100b942ffa6b33fee6c436e7093018a0a"), ("273adbd625ccf730172a4f54eddc8abcbaf617878e4c07c97bb2a033410592b8", "16b6a2b0fe1628dad094d61d2e005dd17750692144afcd43dae3a2e94b2cd8d1", "0978d9007c9dc70f560bf9122b06af57ce79642ff88ab2af78a14d5e83180dd5", "1e5cb1363f858435546dd4dd3e88eb0b31275ade86729cd0d3f629a90ce2d620"), ("04178c91a5f2805f97da4a880396863629623f16826f6f76a7f21e2fb48aebf9", "1023e26937626495eb7e92a653f3dcf90fa45ebc7245fabcc4b84be5837d14e6", "0154ae9a8649429f3b1124f9fa83b31d6cbfa225e7f4945ffbb8ec0122c5dd48", "035125052bc0713099cbef03fb5d726ec6c288552c75f414ef422d45edb88d95"), ("0b8f0d80a3a50062f6d2f084d40d94be92bc953f643f16153dfc1e467f6406bc", "297d8346e84712a0e407542c706ca74dfe372efd65ffd32625a6352ba5f150e9", "0fb0a22e7e2210aedb9e46b3133d277bd97a3557a1cdcd4b3fd74e1e8e8aff31", "21d61d832feb8e231f7f8d60404c943ae1286ded6f23ec8e809bf2cac81e6279"), ("08741dd17dabda79d3a82498d3fef5aca6a0f3f6cc0c80429dc78baae4239069", "02d72a23e7295e8cdc74b381b2189c7864d732b83b552fc0c7842f42eaebed7e", "19e74e46e09206c1c124b9e1e110365841cf1c1d96b97cc3daf28dca0f055437", "2ee7789dfd0a0145036e3db1ef6208b874316cb6d90d6613c645d74d6a0afeac"), ("10d010d51f02e745936487095b0219b8543f2edb73f910e44c6d446073a85143", "1ee8f18016c93bb2e43253dbfb2a0cce17d3a3600e14f69e78d4a793a8a225ef", "2bfe7e7248295f566021f8c2850955a6628e360c9b846f04fda41bc42f4d27f4", "1cfcfcd458ac909306adeb93e97e18ad947eafa9d194de50541dff7a98607d1a"), ("0171dfce8aca819437079721f4d14e6f135dd387c143c3228a814b1def69bfc2", "17835a25f365185d2167ab4ecf19ddf605095670b471a34f7cd96c8cc806af1e", "16a7ae441085dd0a5d7f0bdd9dec3c4b2223a9a51a4b058b04fa2872828aa3b9", "138f6f52c00cc8ab4527d41e71b61d1c7d60f0940caaf3aa095c6e44688b63a8"), ("1e0b767beac877f056bc72969f91fd052ea256ff50970f575b0f19af24aa41e3", "2b4ffe7d3d40011e6b1d087d2582ddbc3ec4ab05b04ada492f8c21ea298b62a2", "20e00abc5fca9ab45036df38f0baaf041a7780363f114bcaa6985404f6d6c51e", "2571b3796abb6ea48c20cf127e6c9819f0b07b642aa4c5bcbe1ca395907ce87d"), ("09ca8652ece7b0dfa7f8ee6c3dd159eca7815191a0be05ec06e883dcf7e41e9b", "2ffe04f8a52fe07ad6588196d32bcf29e5a386a53df43948dd78fc7c26b9b6fd", "2e1feb59651452c8266ba802288cf309b82d7be5f4ef319857274fe44ba2504c", "24c2575717ba8bb21f884b88c2f64fd698719db401e78977167a9f259c71a2be"), ("2de9a868767130870b551a52f3bb0f356c4cee1ad4d302d80fa78abdc2bdff42", "0037c8dac805423af7ffb933dc2e3b0f52de137aebf3816f74b07f5709a7b358", "12be5942ba46999414ae1f8d32c23488e5c084e313e643ae76bc74ca303042f2", "1f9050ab95ea80cf64d7192e664b4155fda940d5b221af10b27ab7b6dcd394a0"), ("2b503d52d281ecef15f9b5d713b319807fdacbffcbb23512e8a05e3ddc3a611b", "153fd4484f726c5b8ab8e09db512b66134bed95633e30246bb9f36f99d15b294", "09fc48e2d4fff2cffd734f329293e6c4783e51ede50ce3cdc13a08fb9ed496bc", "1eff78b5df882624cabf4fd98d5747275b78a0597953b7288b14c508bc07b1e7"), ("1d95f89fc9e30851ca67f94cefd5d906a17abeaa737feffb0797fd908a96be2a", "1baa0a35df01d0cc400afb074d8f73c6ddfc9e7441cf0179437d4487982e191a", "0fd79537bba2ad09f241deaf8f2779d8e63a0fb357f9258fd61b6c88eb606d16", "00cd1cadabd43f56e662858c93e8cd9c2af6f397f58eb3c1f3fc87f3b44aa46c"), ("1976e871ffb6bf99c1d70bbc01d801d97601c57228b7260556a581c3bc7e939a", "1beaa878838ac6a860c557929c1d727fbc04ab452b4b93eecbdbfbe3a9b243dd", "12c943d74e71b7671bf2b0d8f5a0995212cfb6348b163f9002aec68d72836df3", "15d2d82c8d78c47c20f3aa17293c7784483e7e508e35db183dae0d09fb76ee45"), ("0833b98d43e7f3eab5634ab1ace0aa70239773c6a934c25e43805b0af0c4c60f", "088ccb142356d20b3792fb05247deeb0055f737107652c4183c9df90e3a91f7c", "2d92363128bfa479c13a24a9c4f55ffab734ee9a3b017f0de141a5ac5edab78f", "235f6261176f42e8ed42232057ddceb0c4adc7295437dc07607cf1ccc52c7160"), ("083055ffb3dd8763de1eee374b11c1fb957161fb2482bdf79ed14b93c3a570a3", "151e9a861fc63ea411d983a66fbe0375952f2f42a46c62d5ff0ac505280de758", "24083be38bf3ec22493de68884d1f6d51fd638f82cb1be166eb9c84da56c0077", "0afbf07ab97b76dad4042d88c4b1876eb5da41069d49059fb314a608ca238b26"), ("1ee5f45a9ca6afdcc37e2e8956cae00ee12a5b4ef1866b26f1b28d6339331c7e", "2a9f3aa0aa185c1cf692246f0416b87314e86ecbc1915c0190d7135d260abf8e", "0737b672b0aaa075ea64ffe2211b4a651f8ababfa267004c919626b6a532943e", "030621ad5a259eb00b2b0ddb0844fb6455e827e6c39562df9f677f228f6479ea"), ("2eca9a28ce4a740d621687bcb093d9f183a04f7a0f031c879d98a8c1ae810e41", "1be196fbec80e0beaed63282ad45e16d62232a5446ead0fb45275b0d9cdb273d", "22b57e93d9ae4494efa44f83454260e626fe86448ef3c14ec0ed0954fe9400ac", "100ddb07b00cbacd64dc0d5cbd74be5737e6afbc5dd5ec18f6062b368e6700ea"), ("2c2e03cfead293ac25c923c9fabfa5e83fd3011c7a884c4a6544e7cc85637147", "1ba02930707033cfa4373c6fc47277f7b44037ba83250cc6038df1dea3f09b1a", "0bf88e4eb7ada54487c74d7ffd85a352f1b0ca6d23b2d4247b3d06349ed68253", "11caadac25eb18a80702ca57b945f3e29cf32f6bb4f408c8bd95a299fc465e2b"), ("1418bdc417a87a3cd9f2a46563a8119f5143a395f1dbb74d9ea091665e39dbd5", "0dd9e24001f954fd135ecf0555cf03c3ab25cfbc9f8b2d608f0ac90978a278f0", "0674447a433148bee6c56b7b757e3041ad35520467625adba3b7328e4cda9867", "18d0f72e886229dfa8ae98e892cff8b6fa31936bdc35ed393bee0948bf99c7c5"), ("0a0286dc49c92f180ca0df514cd25af60483b6ab38007d41e1101ac669a19750", "244b7947c56f898346b41a07c44c6feeb4a823c5a7443d25130f7b9210b30913", "09eac26383add9feb2c8b1391766d53e494cd38267edba794e52893ed6d012f0", "06c5dde5f8c52bb897340e51da0760c124b215c3e4fa6598e17d438bf04d033c"), ("0784c137e223ff82be2d425923a534784d6d333daca9ef1eac9a9a45a7aa6261", "28e09cd10a2334db97364a1e12458d4ab7cb324ed3e0fe5c7d4130250c1a75c3", "1b80a4039b5716494543fab2387003297373ff399b96a8134b4267d4be619919", "0fa51d34e474f4de8f108b936ff6adbdf7688ef09449ed5cbe46e448db68bb2e"), ("1856ebeba1abba61822fdc3cfe91da0cf0526b247d913212b557b578b152e152", "08181ae8e8954e831ebc56027acf84757c2a31049df2b9b8741c102d8bd866a3", "0a4626a1194a7029d5ec4b7c6a080ec7bf2cafb6c325861f4b57083ad2b7369c", "033e83500180a97e8befea6c2a785fc8141f097c124fc6cbdff736c77c90392e"), ("03046bd68be510842319dcf8efe40662b3ab89bc87a88d20b8056c5f4a5725dd", "2870dcba38d605363721c20bfc086fa5b58eb9839ab94f7afe3b3240bb030fa1", "224f7aa3df87838673185408e98190e5625f472d0c10f94ffeb6229e4534c0eb", "0df884ae7027ba16b342bb6b5cfd57169fd22f5d59b604b23c4b9f1abef733ff"), ("22d8128da56c4bd9c6590ce2d6681aa1ae8874045852d859fa289ca964f0a936", "224e07bc78c48f780c7d56e182b4767eebc169c09789a09ea69397099808d8bf", "1acfafde2e96db3a5a6c268ec9db0d7694bb641bdc2c27eeb34547e719897e2e", "0350978f57102537eac99a473c7a866bc3690da3fb850984755e83aa862422bf"), ("13c5e77ff01b9acbfcbdb18fd10ed405efc7a187de1dc37178a0ee93645c458a", "0a3f0d9773cb10fa6ed1df89a8c9a0ffc46e68d3d475ce5cea8e53f91533b0b2", "2350c1d6fd8312c6a2311a4e2a2791db48ae62bf4b2551ff2bbf45c0fa92a52d", "2e5635591f9a5c859259d51f57b2f5ecc03822a8ef50be234f683696adca7bec"), ("22c1cd6921dfe814404c7d3ebc255227c730e0188caf563f80bdc5c2a6554b22", "08aaec832e62840a34aa91c3fb6b405bd1d1b8f89d0b1d5f0b3c010413a80e5a", "0d1e5def9482f040b2416ad6ecd4ac5c9d2e51421591daf7330b482bc26291b6", "2c6860308f4d02a933cd7148fa18100c180f49f588f17d866350b8ab8a1a2958"), ("1abee053917581a422b8d641b84aecb87b1caa0ae238e086e174e3c26a4ca231", "0ebb1827ade506770621fcaa208337d609f9ea447473d862c6caa6c7de7a2293", "1e6a54894a838bd2ce636ad0c16ece61952c6fb8e1a36a81ab8f2e753647d209", "27d820dbc13f4159ed28d5df0544e1538c3bf5c2e7f7f18d5ed0327fcd8e0830"), ("0d5c37dfce5429487f2146a31cc869506d8bb147b1ae6fa4e8a41280cfbca2b7", "0dd97ed810ea24ec5fb39e381be0fe0f2ed075bf204b04ab202043b9e69bb7cd", "2a9f10838e2a7ae99a5b00c702240585dadcc3de5e00efca40b3c53667de28aa", "2b326226a80af8c184dfb144ab25279b2051a86b0421059fbb85861f11f96310"), ("0ca43727c85f8d39d071f61c1dd835666e275742e71224bf24b800aef972f1e6", "28b260960d6d6416c5b3ee4d29bffc59055f3659bf4e8c6861987c35c8f92dbc", "1c7b800180db5abdc68636b5d369a8c7874b962533bc66385f42d98610d9f536", "0368342273b5cd25dbcebc55fba38b7c2f6f3789d53bd8be83e5124b55b9cf9c"), ("1d38d49018fd2079ead839c2e92b7b950cb1e00df201d9ff13c8fd5982bbf9a0", "2de404fdf9611ccab60801afe026f2655c4518498b44aa62f1646cc509cd6f37", "0e9afad5ede64cac61b2007d8853342ef0e723e65e29fa99db29c1ce44a64331", "08c945b0a548fb44e08e30a8bf7751eaa297621490a2f3d02b5c0094d0fcdeaf"), ("2d9d7c0f2a1907ddb9d8acf8bde37728ee0bbad34e4b89d016381fdcd3961989", "2f70ed6ec3945e70f87ed3b034f593009a190a6dedce0140d1dfef20ad974035", "2b5351cefa64692a07320a63ca594f9b40ee4fad5e296c3cf79c9a455a09f4df", "264530702258bc3539e0425e84c0a11a7c2c09bda006e6c4652a7a1eda9a2579"), ("1ef90d270d2363c18ee82393e0b9e540f4f31db8a1f10caf32f4e94c8e11a4ec", "2a82a9fea9cf742c5daffa2cc7535366d2990c2324d7994635926903143e6884", "2870abdfd1d8422683b76fe7ee4284bc8ff54b44cd92ff4fa818c0105de85214", "2e07bcb08c95e58adfe2cd7b7a2e4c15df5c56bcd8db9237d580fbc9d37610de"), ("1956068d9ffdc23479b2676fb9326fe0dbe467f5885bb0ccf06359efd7a6c1af", "122d9d9209ab1a3da64678f993c1525b3b779bbb2b8266fd23c3fe100051a37b", "2cede760b67bae27f7ccbed02b8d3a23173f2e4387d88b762573c92de28e6621", "257f2cb4d2567e75cd91cce534093958122a7765785259dd39e087f97d61a309"), ("06065bd818183ee891adc292babe6456305705a35c4639ed8fb3e6f2b9fd8284", "03c598d315a632421bc980126c0dd85376114264120eb7f1751bb3eb3d3a78c3", "02d9d4450823d95426c82dbc97f62f2338a86ea7ac6734ec75dd759547ac3018", "23b4332225eb4d85edeef69eaa39a98659383e6ac1fda1b2d4be84cf5a7c65c7"), ("050342c35a2df3d0025ee6d02e4b4e66517a693cb7ee6edbefaccd8753addf2f", "10f67348e2b4d904a0e01471ecd1d252f61f6f9859893718bc36c5eb2ac7c1e8", "0ccd56387ef6e9862d07dcc2429c824cceacbd2f061bed4b5a3503e083945377", "0d45298838e1beb197cbc4e73ad17f326943972f71298beaf6f2d4b1434cdd1a"), ("0288f0a10096390d55d06fbdca53844110d6e3008e15b644cba6f6c69b606191", "1d8eec4c1f86073444e9c1c8dac6df8ce7f6189572bbfe1dc1b702991cc1e63f", "064b7b14dfabeae1106b433673a2f4ab6599b9262f65fb1b5dfec11320cd4200", "1f188669c83f295dded844c66b075df4d10253aca5f215b5d45695343041a2b7"), ("144b0e66eec1c48655af3c1cf4a960cc4799e4ae40164dec19c262b3941278fe", "12e7e411d98997d872baafecec2a5b8702c9b828b1017d9b7ac2f67b948c4165", "23770ba4f952e3834e695ec9a1a5db83dfd95ca913cbedb86af3062f1b5e7b61", "26153e8331282b65a1f17243628c1528179acb13fd73b1111a087cb4442ed76d"), ("0103f54f5ba60e9a748819347497f47c639b59a8575574dc522de92640c55655", "0609955d1df91f5d88ddeba11bf8523d912dacd2d4ed8b6c74b935d6ca9f0120", "11fef517f94b705ce8632b29d8bb2205fad2e9be198bbd602f64d1fae923ec15", "2263efb5fe967c9b5a7a8522aa0f1fa65b2756299230c849c771bba72cfe0213"), ("05b3e230401c843e6d42734d7b58eb5952908072a466a76f654330f920db6674", "01c9e7958052a54383887e404affa51414674c87ab447cd990d7afc10e0fd4eb", "0c8a5551f8de15f007860591109ed63cbf83c4a69446e66ff9366131b1bb88b1", "241772bf3d6130e4912f2edf95fbc229b10bedd43061d2a3c6c4f9e389381858"), ("067c5a71527b27c212c46c440887f51693b6fd0505ab4938050a7ccab1738e7e", "1e783b299a34b20a034458201682669083cf412bec5c7839a4968eed938d68eb", "1b152e8bccf8515be050c59cc8a93bbb191ed181dcae347b0eda1375a3a6cecf", "293208ad71bfa8214167553b160f4a6c26ee996fa96097a6b399877bc9c0c2fb"), ("0361a9dbe4180d641e40a3e8f3a7ff31b2a263615b018bdc0ee270cae78a7525", "0cd7d123d0de169f2bfafc8fce4053633939c17511a4f67b6c7df3102322bcca", "0616e3bc21b5bdd59aa43a18e692f8fd9f7dbcbaeed1f16cace3dea3d726b48a", "25e6214c00d7805fd32f680a1df83a4aef437136c58bfd9ac10ea9bfbb8608c8"), ("1d286a07d8f33efe1a42f2d5682b0a6c80eaa421210d2b14c84e2827032c319e", "0e31762bdfd04dd152941fffee11b8caa12d1fa7852e02c6a240af068108c900", "03d35fd0094835a7f636aaeec0519e38c7e0a3b43f1f75867c56fb5247e2d919", "2c2f6b55bd762a3f74213f9ac7546cea2b4b1b6855712a29d2714654a20708ad"), ("2568ece3e28ec3296d280d225177a24e2095912b7a18ac0555f88f754a6080a9", "0dd4dfa6e84ba1c7d2d5fed72deac13922ad3b3d94d4f076f4744669e5c6a65f", "1e12e2a512e3bc9faca931a31ced4a797e5cceaddcd006c2aced996de81c5baf", "1c26b07931322d78b9eab0862e1195335a6979c68565b586018475f6f41a3815"), ("1ee9a49a3da97160fd8932ed463f0090d238fdedc7f265c71485ff47de6c4e09", "11f521d012689b18a16ec1334249e651d4100f562e1abdb4e664fc5042d3e582", "0802b357a9e80a0fee8dfbb5b9d7c3225789a36e15361cd15cb9e1aa62a6958f", "1b274105ab9d170f1464a492b5ee2dfcf87ffe41f487e215f9dcf7fb0c1a3175"), ("26f8b9df00a24564261565786b9134f577bc22b0ef8a8fd3e23c04fbdc286eba", "1217a2f072db96645a18261524c5e3a8cf33c3ca4d0561745f4a586263aae9f4", "298d57386a4d5b91c9c58dc19609c667a68b206c410ddec1db7a311a0598e7ba", "1d2f8e5728e77431a69b3c8aaaad4faca15bd15ecc00888689a34b53f978b03e"), ("080d681e25a7e8add2f57b30d2e83b00371d5e8db3bd4a5a21b962d9ce358cb6", "09ed96e685620d3e1ff209e316d38fddbdf29e00d9fbb0e0a54260c4fbe2f064", "2ee17eb6f1c53c63a39bb60407d54f8cd1d2382ba08e5ec8e645383555f3d8fb", "2de0f44f5bba2fcfb2153161dcd60051cc37abad8f2d956df2be1d3c200c3368"), ("2eca3c8d4ed300a9a635c752b708d0638707a574cbc912f7327fd4e48f9590d0", "0824753e91e1fc84dac78df1acdd02b8d068fa5ee6ba8b804839c7e1d00223a9", "07bf7755e28aa198f2ad01c3acac12fd8fb3b5323a2e244561b6969817f91aa1", "0f60ab8b68e4680360917e489a2d03417f3d1ce754f6f0c5b49fd5cb27a41685"), ("029974f16116f171281f002588f91d5cddb6855b6f900cccdf3f696e5446dfee", "28c2624e0634dab3d78f34c11347b814e538a59f70fcadd4a26a1cf196c052c1", "2509fc78b08be81ce7fbdf1d2068a87d8102c2f030b6d0881c0ae81c95d2dda8", "2d263d3b461db1467c42228291577b653b2e2a8068d2cb686f6a9598cd2b2efb"), ("0efd4df5ca323ae2227cb6881a3d860333de56df7ffd64cfa6714ba8adbd53d0", "09cb79c3c78e71fb4a42ea72a2d9397082c87d0728a9a85122b2ca133223d347", "25352951021d87377e17f86309b7af157174b267da712dbb08dd22b01c041234", "1694d9999b7af8774d5e8be5c95bfd2674fe83878e9c36c2dea4c55593447758"), ("229b9db84d27be198bdf3170101a416f99bd10d148d7b780145c0af8e063ffaf", "034808311812200f62f7ea31b2152f583de997fdbb6c113cad7c384bd6d5f809", "26b5d16c702d3e0908cc76a51d311d8faa98b72a8a81739f937b3fecfea3b8d1", "286ff998bf1c9e951c0633a4dad3f9b0e86192861972cbd1059ecf1ef6c8a660"), ("27fd2e9b68fd4ee64726bfce7472074f85db3d3dd4e70e6ac85c69b65a5c5421", "11f7a93809f876509f777b1c5711cf46e5e219f4ef489e41e378b8b82f37b4b7", "2109844f00054ad2e695ebc8e9a37f4654b7da543000da4b8cf8a073dfa2646a", "19ddf2b414fc208e974cefca520ce15e928cb73d15d30d0b1ab2f22d76a0065e"), ("0591bcce52c293728d29fd2c1c88fc9cb2c497137b89a6b450965495e8f1c891", "14fd73d4f80693b112d576ca72c90ce03d59714cf69746231cafe508dc27decf", "248e3b40d6e754cef879563ba5cfb5cdee525455785c48e650a626f0d13d3b87", "0a48b9a961393f7014e8153bc6a8fc3a5559323e0e0bb9fa76d67cb065734a14"), ("24d7c80bbea682ed4b106a2bbc26924daf7c550b96841f9052589babb2facf22", "0dc6cdccb70181ceb9fab356007af0e10376e7f8db961828edf2b7a48b8a6ceb", "165a061c974042a347d38999068be4e378e53dcafb84943cbd645a8b6489a66e", "1d969106f4efdcc83597fe0d436634e6a0c8d6480916cdc0c0556b4aae530c84"), ("26bdecd2896f35654a2c8ff193103b2d5966c3e7ac388757f11dbc99bf26a412", "13bc35c9a686f806f27f2ba9660f65a67bd504d26626ede052e52751d78f11b3", "2d74a4a40babb418561694f0fffef3d9556e0d0578b0733b77e8d394f2a1f1cb", "271ddcf40f3fb6b6d45fdb54d32282a910ad9597e0c76e82a6e21bece796cf0b"), ("0e7de45842f7240583cf42bcc6ab0b0af5ac3c655be1b3d2497d0165f3ebdb91", "1b8c7c64f648ea0172de2e0c900a471da18b85331b514167b35284c92135fff8", "2baca5ea0c158eda537803ce83c7415686aa64b89467c0ab42626592331e4016", "15ca70ac6771793675ed0761c40e319496fc051caa1665f6745c99cf56472482"), ("2b02ea51b4d367eeeb68080aafd8ddba200832b05eabb6ffd70c6820e52bb693", "1762435bd72fa4b9e5100bcbddd330f0226557f750286b58deb5d7d177ea1116", "00a691e1363df465ce6b37ca16d081102c960cef7cf7d5a1e9b2d3e953ae99a8", "0aebb6d0d70012b806bf47ea0913b4497ed75fd113ee1d251c5ccdcd1af25c24"), ("083f89650d2ab809857cccf26955b0bd7e0ff71765e4390ade97099f87c19fe5", "0c60305a316dac178335e3c534e7e1ac78fffdd24f30094fc9155c39e7fb15d1", "21e27e1b1d9c0a01386ff3b6c5d5e9c6d0da7df569bb96182da086afd54a6241", "002637fbfbc82532e2a463252360496968b73196ba95360ab0e6a8d2660358aa"), ("1ab3815c29dee192cf0f8527fb67ca1dfdcb28931f07b6ac46cb33e502f67efb", "0b0d6709cff259853b7608c1eb8c138483c51879472b2988c463c81e7b05009f", "0242c5f77cae49d2d27d1955050c733a6d9c79c64cd3d574d94406dc1b889bb8", "248b2f75d93b270d11681f511f34a3cb924fddfc12c2cdbb0110885f4d1ae908"), ("1dfe8c3d53733acd6773dcd298944cbe1ac948d8b965b505b749fec7e172cf46", "1323ea5438913d6813290591a12d7bf955c52ee3a7f2f12f20084cbfd3b8f1c5", "03cc8ec2b4cddf1e8b6c5c24e58c1802d96b0764cb7591b45ad030bf0813c57c", "0dd04ed12eaf155f7aa92e4e279f3e5495916a950bc739030dfa83a0af51ffb9"), ("228d69e47b2ffabf95a05b2a15bde2c31acc814389ce44210486e4731989f7e3", "0766f24697a5ae1c92eb979dddb0d18bb8935d2fe1d4d7f73a5a4617d6fb949f", "19104f064e1506c458dc2b71bf951b51e5d0797649fef186938e464d8bd3bc37", "03559ad08e581c05452b3a70fbc6a2bac6ee993b6f57590fd95b52bf27a7d149"), ("202debfa72a37baaec1e93ce99fb92c4c6ce46a5d2281b98646e95a48b3c22ce", "00fe008108ce2716c76da5a3fa91f80ea4c5f9fefb1e7138aa22cbdfd434f924", "0c3e383943fcb58775b7d48ff0c5a87804fb04403b047ead26530657fea24f09", "2fe5efd7936c8c9be5481f464781ba37db566a8e6cf51ad3b59db1ff40445c49"), ("0f67c9ddc3ad0aac72e5c8a9fab5a78d0afaf37adb4c3339bfc6719442aa35bc", "0f7765cb086ec3c16e11dadaacdb63f4b046e5b1bee66098ea0e235c3e7a733c", "2fb0d38442071ddf3b5574d4af450e75f672f71bfc71e88aa261eab4528a51df", "0a204e333fc03e45ad390004745874bd3c324fb48c3dc9517738e9d77aa993f9"), ("1c2c263861e09aa201056e20a32869b2b69d6388e581f1b249110d7a97d0dd74", "16cac9512f7c991939db2cd70f39c7c01e3434e56333031bd08baac000778fee", "2e3476a4ef12a57f437c619039f9c4ac5bdb678ef5d2b10ee82d9eace8821700", "1546622c013093a6e2711712abae91a824079373b2c71eb68a32c48bb75b4309"), ("2f5d82885b314a6633c3c8e6127147f38706fc1c2dd311eeb87caf2e1eed5bf4", "1afef5db982abea8e5c18b0550aa0c760f993084cacee55535a4423500a927f3", "2e460c66cc16574b31e978aca915b3fa79cd6bc35b238369a25c0f2cad73cab0", "2e6651d96adb673e77dddfdf272909caf83d4991710d29385a9864d32be2cd9d"), ("28c5d09e78cbfef1453ee0a3ab97c130d2bb014d9521a2a079dfe6adbad9cd27", "247f8cc9fe720a514e3b464f3401c92db156c4e82624f472e3f008715fb1def0", "246e8a2107bb374c41fee328b51f28fe020995ab97d1b64c0f0b9e83417f6b0d", "181ea8be2447da637d1fb99850eabf5151c593370a4a7230d7a51308acec3022"), ("0a09080833df1377d5c94f607bc53e47ce9063b2b8f312e88890a94974344e8e", "29410a105611451f3505c5111b65e7ed315da244c987f9a838d3ccda64059a90", "0c97391e7913511d932abf7f649b77391ba01d0b04f09a44f9b340b10c9cdbe4", "2fe03f97231f7292689ab0170b03be2c12a6425933aa10c1f70f2e540562c897"), ("115a0c42f45ae5ef73cc3ab8bbea165c80ad9173ae6613b35f79183867b62964", "300b8a5c3b7f7cbaf7043cf6daf67345080a134f234aa52d60ded4587c30cf74", "0636f18e3e9ade2174fcb7fc39b7994902aafbb99a2953c985d89c1884154856", "071352287da88aeaf1a8bfb8fa3532b18c8097e27bf30d5ffe9941415d75fad6"), ("207b80beed40a8a298e1b1cb8903493b9ae41dac74e61e42f107788b8b2ea5bf", "2cd2fe46371135a8ce5079319255e05a6b3ac767488fb1f46efef1451fd7df65", "1c36da5e8e6246bab5cc0ed5d6a3052976bfb9e60f240a284b9bca1cadf887fc", "2d20323e69cc0f19857d42e1666c023ebdcc16b6f0aaf5f1becc6262c8ee444d"), ("1ba047fa6481592fe4b24cbd614284af66efbd04ea2393d62aad7697558a6454", "0f1443272128ed9690c14b3178ca86aad5081fc22e6497cb76f81730625b973a", "0682dd3a577891c8420489dc0818f4ed9c866f069dedc9eca0a5e3346c804675", "1640910f33adf537b5230d38d817f29045ec0339ec3f9d3903cc12859ac02ef5"), ("0237bd4b7405c233a34536f86ac192f592f989f85442fa8fed1e9205c9508a5e", "1065c92fcaca289648843d2e37691f76dd2924fa2af3102f4e2eceb09e76d566", "18b8bee999462fb5a651408f6f686975df7342e52ba4e9a8f98f5012e0343158", "0bd7638317c4007944552494444ea7775d42ac854076512d11525b425655492f"), ("1776fa321bb50226bbc94bcf3977275411182dd5bd1d44164b92b93a36cfe422", "056a840d1d69c147a320ea9bc3055f7938a2e525b72b50b5c014d2bcb0cb0397", "0e04e24391decbb29cfd42d98cb024a195f2a9c79768067df44801c32b0ea53b", "08ff2d94d15cfeb6fa84f30c84df634792222827d357f53494af9c66b8efe853"), ("28a63b1ce373cb5a56ef1f780cdb3be55a15114dc9e82b711ea8c9bd2bf1c6f2", "19b547e272f851508318afe2f61153969a50d6f3a6b7d4714207334e08c68591", "2104ebac4bff2ded2cd12747ecafa112c56cda553fe2a2d649eb56d5aaf4eeed", "2aa917dd77005e32c2ccc6827d9bf6360fed80d6775c53cca8933a5477202e0a"), ("25c26d08afb61a692a7f34f2111205fbcb4b60111470c17012d774ee43b26c20", "03e55d444aa911de7eda52cba45cab8178cd34695a06aadebfa652eabfef7e2f", "0b1f63c3331bc9b8020ed10d7eb3c8f8e0c2e1d2bfc61deb5c039db5559c74d2", "13f47ca4c9297fc9374851066ccfde51efd3b89d167837cfc11baa1084533d06"), ("251494660acf079896c2c218ce4ec81f3ed4c5c9c432147d438c6e8a984c061b", "08b5e2420da76a65f0172ea0a02408c268e5dd8b6f0d4591efdf60000aab4ba3", "11b974cc9e647e5590c7d54ad668e8a9351ac9c7717f7c0398e589c0ba9a0dac", "0766b5c44484869475a209a28d02d2c93dc83002aa2c2783aa8126c7afc01d18"), ("15c1c165cd441fa38903c6ce9914ecf28c168f7df61e1d54b8039cf4c266edbd", "1079f3172c1fbb8f0d4dab977b6ff70aec3e626b3c9de92796dc1af994949077", "2f686b8b8397200abd5a1c4582b2ac30af0aab35081cc8914d8a061479c64a85", "1cb857be6fd1319d21e861256bd7afd2d19c59914e8c8de788514f265f86e81f"), ("05b3a19e610d083e516db5bd76b028762e6debd07d38076a3dc2073022667822", "2c60209ea4843ad9b989c75d4a6ff8b04478055d466f945e8757589c7354b967", "0bd52a46146419d7afe78a9d40319bfd88586b2ce0384289d635ad6664cde15a", "11d62af07d3209385ee17ec959adbcbce74a543d2af59252e8d0b2cf6186839b"), ("06270944a53e1e20cd90baf47e147bc2f5b5c4ed4218ce28ba3243257dc722ab", "0f5261d69d031012b5b103867cda42b83d3c18bd760fc40dea4eb020358af399", "0feec776b2468bc347bef5f83c697d6ab579df1d47b51515dd0d349fd72c2f4e", "20b373921b37ae79ffb1c32c732dafc742d258622dbffe3748c31aec8dc7a58f"), ("1a8dc5eb95de7b449dc30007034e32e1bbacf5c26b7b561916cbc45a6c0d767f", "2a6ec3c63ba0f62cd95b7046b4412957a409b91e1e09a63f2e5fd5c8bda73627", "03c802686388d5bc318f7542e35efb2a12d8d16bbbf9475d369e267cbe8094ed", "143b38250db7b9b77b4493cf0cd9604ab349595c640a35637fa6d18160e2bac1"), ("21553cccf594bf041124793bee60b5dc75dccc951a55f784b157be6f25e58355", "177cf489fc1607433f974d917e80d08912cce85f869b2f06067cc7119861602d", "15c0790c470de989ba9f41ef52a931804566f82d742c089c7466245684f8f527", "212b48ce0541c1e924de191d10252f906fac661c801ee880cbb6b903386d5ba9"), ("17636e8cf59e9e998425970455a30551b144302ebd8f2489329095cd9d496b24", "1b0419adb4599b920f4106713f1724690d01b9e8d57bb89048555faf20872817", "2bfb4d588b1ed881a3b78ced8f1d8fd1ff3be4ca7d8beed6616deee50f7e7696", "1e39ebe49bdc67d4f7d3063689e87abf13545f6a2d09bc4e05a206d834fe0659"), ("2e686a822f13c803b9976c669b8bb66590567d6f611be784a055950e1471c23f", "1c9b03f871d82515b4ff507f9b64a575489c3d26d8aa19c0de016c013d2cdfa5", "04dbee0d4ae514c1e81c64ede96fcd924f6e8cf7f3fec6e18b761ce6b4441f6d", "24ad8b2ceaaac772b3965bf7e0a972abf2986afc117b6eeaa12703b53fcd4b02"), ("29a62667f2a78350bfe43c337c7a6db87c66da641070c155ec852a325e018645", "0bc9ca65d5369b27994f55f44c01ca09bb754c8431fd7558e9fcb7a895c5a5c4", "2cbfc975aa5c39a274f58449e39c6d4c5ecb4bee94138d18cedb7e1a902d6a0a", "18d45060e5a4b1e6fe8b44811a74351c2e5e3939e78d2ba29aa6a6528c2f377f"), ("0d45fbdc4d3802dd6ba7a32f0f43952e941b85eb1133ce0765df485c34379972", "2c12cc82b0fd5247e47bb30805c1d9fe126fe173522c83f6d835c506e1c242e1", "08fb0b37c8e4c6fd474a56080ecb3a31f52eddb06cd0543c12a802a8258b3475", "22904aebac3304ad05515046030bb36b2c8cd3b5507f8c28e384d19c3fc30247"), ("081415dabf1fa71b8883f8da746d18fcc59feb6a18cfafa797d20a08f5eed3df", "03cb01b192de79a16110ecd280b0b78a47cfb78c7a72c1ff69e4c5464f5aef46", "17704e919bfbf18bc8dcbee91d17e6fb1d2dbd0110f3c976e928f5f423a197b9", "091f55ca183b1fe8d2a79288e355c102769d0c176334a493ded32bd7dfe3c43b"), ("305a8ac04e2d15e6acade28db522db0499af42a32f74d9174212c13639e77790", "0ed52ab678a2331b6e97667af8beeb2ba681a79b0554a98de8c6c170db7aeed9", "275b68154deee40b9b1e385ee34a21b135e29da72da51abcff57825ddf44df5b", "03ff935371694d5959076eec2484a3bfc121f09eaf89f16178b7bd51f3bad73d"), ("0c8b65d05ba8c0862b12c8909ed46d5fafc1fea28e47e7a234ba89f060634daf", "217d0206211b777ede1b20c99a39997a6927a89e3f135c724be5ed3e882641b3", "193a8ce6534506d8eaa868eb2ec7065820e77fc4aee2868aba0218c4d9763670", "2a736021a40fa721182b8f35ce15ffe10a2b5763ed09f38294ad7e4837b9f78c"), ("01d541fc30dc08a2bf097d7dbc80e3b44d85dbb46d72afda91d604ee25f21d23", "009437a90d3c5f15baf7bb1a9b4aa1c457caf08388723e1a3a2ec6794fc00a98", "1cb1a2740adf12bf74a3103d45e8c121fa4104a5ce3de7e1d36a3df83bca26c8", "0c3b628576cf0a7edd3fabb9b102cdaabc67a624e98bade5815a8f22eaa06c1b"), ("2e163255bba81ef8beaec33478807115fb15974a5f561a12b3cd0f7e4c146280", "106ccfae5234eedb6b62044c454d1a81c551ee49d6b75a0d49c6a3e711f5194b", "096f5e694639e7ebb79128d848df48cb94f30210d107fcf5eade8b665c478bda", "099c11da82e433d2aaf5782b0b051876033e8425c699b02e24918bb421cae2f7"), ("137512adb0eec72b6634abe9f4145e56a521027d97f9c42c2b2dfe37ad58cd98", "1f0ed4db12d4a652b0474f18d3a67eac07ff64dbd9904d03855c9fc9ffe4e69a", "0da03f79b839df2dee4018f8909cca4226f6bd3a606aeb65c4d3ece8de0d059e", "0f47a75b353821ad1f63bc3bb08adcaba5ff441e4f03d9415319ff755dd229d2"), ("04cd2c85c27485d3f9e4d694acf16798381c1e474ee818839521bf316b2a651f", "297f57dafea405d68d44f88e74cf5b328c1df89a33ac02bb38c673906df54df3", "12e055c1bab2083ded43f6166576f1b939890476d34d9e87445378502f94b1ab", "2be0bdf7eb30aa6a8c6870ab8a3ba0285693887f4f7d11e85293a4103e8fee71"), ("14a615d24e04836c2169c26746932cf71f9bd7942d729167346421f4ce1f2df5", "2079a1afdcb2502a6db6aff0ff430ecb4b8cc2377fbeed58ace59480ca54108e", "16e3c3125dbe0ae79145ec91e7a38e3fc9642454d64605fb361d30878ae47b20", "10685804f3e4cd25a7f9db07d8ef021990862c659879adb4e1bfd6ca2614145a"), ("01bcf1fa167d8be5a91b625ac7b2c2bccfa9fc9c47f33abf78482e80d0b0912f", "16d452a8bbb81464106d6e89b2cc4a54f83877c84ddc724efa9f8da10548672e", "12bbf44294628e97527dbee5b9dfd9529c540dd027590434db8c14f20e1f5141", "018b8bf1ba3675807c3c897c7697087f852a99340069ac9a65f3ef6b684a3cd7"), ("18939875eab2e4445d4da4743e43aa3a80b4d8b2602b774537fba94f711c29ea", "1ac11cb9f9314c0a7ebea55617d2cdef9f1ee8ef8d8a347c779787f3384c0053", "1c56d8be528b72bda3808c2e9513419990653af0fc35d3cfbcb9f1a4e4116f06", "10aaeef7227266f4e6a9362ac67a4274d35d4a5176d65c06a7be1ec7f12f8873"), ("25164dbb92cafdf9601ac0f57819f919dda2080b51b4989fa330379c45dbd811", "04ee8153ddb78819c937a69088808d15a49113051f29e56e6368b83185c02c7b", "1775308451c8c5e6ba3f44a97ec894c5899ba688f4af3f07de422d93e22c9291", "19048dd04d002a79423dc95e4e1b4db5f2683495e4cd2958f930d9bb8b7f6f5f"), ("099e5e053b00cc8c129e4f272c8e1fc8a05a754763b60899e8da39abb5bc4fdc", "0506938ef9965b4054b03ab52792264f1532467c2ce2a5c351e5eb3b5b70c7b8", "2ad2887e43e57f70d700b97c048f190b3696abe61fbf037f5a06bbaf846d6b4a", "29303fe7242825ea9a2a8f49fa2a3c50784eacc7d3d5f85f7c46fd44662776d1"), ("087aa04aa0ea816481ee5d6d7d74178f3817bc40c018972afa7cb0fa37e22dd2", "216e1dc483e8118c61dc6e35aea9129ea59ac37bcccc0f4bb4690d71fe23e60c", "21b03ab07b22b061db4760a9c3aebb39f0c50c022a2b7541210143cdd42f2bab", "135bce50d4a1f1a416c88a6e18f5da3eda37d73ffba595080e4943a0fde2c969"), ("18b8d1f651df83d06ce94c80b533ba0385e8e064bc1fbba7754634d8481960e1", "13ab051acb6a30d05af54614d2eea5dd1b13b1c9d45a800ccefd960687b0c09b", "1bb20e3d79c748911c607ff02849ba747c41dfbb48b99fc934bd5698df38a6fd", "2261ca4f663fdbf4eab09314ab5a01401a4b3478bc4817f9b12b247b8ad2665b"), ("070a1497764df9cb419e486eef9cfc7012c6a00f7e14c641a894f688529119a1", "0beb4ca221dda9ebfca29244cd6d1f5b48d29df369ed2a3b108a3c48ed33253e", "2f5c26139ad6e9b0c602982cc102e8257fc06644790d2c3f3f2fd2ef790d0b7b", "20aaa05fc2b7843f643af6797a278f5962e8cb5f518de814f306e96202165c50"), ("2f4236765f1cac3dad07361bba89961f93b08c5485e2d83743d98f2a7c98cb01", "1dbc3f3aa3d28bd3ab1c2d7dc5d2ec9f9f0eec83700860444ce7ce823464641d", "0558908e95ab65ec2dfe798361aa0cc93410ff2cb9464518284ec3c012cd57b9", "10b42a049b2e0ff8da8a802d1d40f4ed296ba1d1ffbda9e4b5223d1a022da0be"), ("001caeb72b3338cb0c836101a421da1102271871bd6c53e00acb27f9eef784de", "095aafdc3b04230973a94b3eea054f209c59a5614f7a14287165d9d4dc64e4b1", "2ac8ce6121f7094b090005ff37b4125cadd21086121071f8e8ed391347b47e84", "2e379f971dc7ea1cf7af4e0246359f8b96df3d6e725dc8aed649262f8da05f87"), ("044dde4d7190b1c1078238a8108d01c1620a6346727ec3c106a1edc57bb59863", "289c8a3ebc4320f2786625b163376e459cf3cf4cfd09b5524d39a7ad0aae651b", "1a3afe3291fe15f585352816b4ba44bd0c9676f7ac1311f028657f8caf3bf816", "0f0206bea67f51bb7b26f5a5fa1b034253ea822f83810f2491100e2a4a0179c1"), ("18a6649f31cad712d10bdf580153c1b1aef575df3b6515d66e9b7d9a3036a37a", "0303ffd1592d8e0ddcdd6616814c85e0e160e76fa53b57d161ed77ba1d88fea7", "0cb596fbd244e745639a7f7464e45375512f2ef68ff86d62fbc6f72eac751269", "1ae4b916ed5ec085edd60f7fd02dc2368556c02fa0defb44cdfa5141a1806e5c"), ("2aaad126162e5a82a6a3a53597b7d3a96774675bfd847fd854614b700c60d1a4", "224436574929d9a4ecc15cc45d176997e8ea4160e093ca1718e1e68fbb7ad16b", "2766c347eda54c624e4d11b08a454f80c4bbd5c2467fc957e467bef4a9277ada", "1e891eea4d6db846727d377c51768781dbcc238b0a1f2c8d79e76f038de7b369"), ("1d1736bfdcdc77894e28f90cef4d950aa0c817cbffacdd57c81d529ac1e0bb3c", "2721fb45677911a421640c065b14b6b3f3b764baf9aa2ea47674178753658fb4", "24d9229a9904883193a3bebeb2ef074a0fcfd69da427aac9c55b1e4a65acdc56", "299e913cda4b88de2b7845ba286391a8a501d565eab53fc804189ef5d97b068c"), ("0c7c24ac324746b9c02a6c9ca1a9d1f69e2fb9cf7f5fb46a5c05e6eeb3ec47f3", "2a0ec3b05081d484be30211c509136017ceb19b1ca64808f79902d990ed62273", "302e9b74fa33dd121e402eacb3dae7348d09b267616ec38d5a9f9906603f8f1e", "240c93453c357949653eb84be658a837ba67244b7102ac25127911c4eebe847a"), ("0311b5b749938d75a9ff5efa8dde87e9c4b8cd095223cc355e19844c53ee100b", "2ef741ddb3fa2d44eb5177c6f78dbded69fb2ac741c58b8517353b6f04ed2352", "2ed586478918e8d64b6224349edcd8d0afe09ba4d8a8b446134a5a3e4f4ac966", "0981f6bec88281f1f3947d9ae9d5042568b217df29ce3aeb38a85077c3e8f854"), ("0611bf5e103b1506d49ed0d4298e7bbea8c814cd0b9a4c7c7198370c68ddf180", "102dc9a3463f842a02eaf2fc71ed127826a40a66573a1d4865d3929250e6f2d0", "015a0b1c68cbc9973fb226d41af05534b54c7ff24039fe8693c9cdc2e6e7c374", "246ff5f1ef5ca473c14c8c151bab897be9e63a48fdc87df367ac6769def44390"), ("117b312435fbc3ef0e85eb7897ebb724d9b8d2d5ae49bc65af06663b5b863d58", "1c12ad1a90628d22f03bd75068aed575173fb36560bbc5767124fd1f065255dd", "20f273b4a9c8d5fbba9373d1a6b833fee9fd3e0bf3380ccd853769b50294ba19", "280b27409779e5949e4b4dbe29f62e79868570e9b4b93bda6ce5570c4d4a638c"), ("1f0c9a78505c7c4d4ac80582424c702fffe973d27efbe3ea9442a53f15713bca", "13da278a12cfce92f40f0db371b6d8a57801cdf19060e7037a648d8b77af1ff8", "13ce612d4c1565ac11b008feb535eaad9f4c7fbb69d59c94048a18734dff20cd", "1b4473fb6c85d6468106a4e4fcfc9d7ff0cbd6246c4d13eba2f232926b59617a"), ("2d30307da5f8c6a5ceb345d0ba7f029cd58c884df2a97b6dcdd252d960f0537a", "1a90ec1e1a7a09f6f2e4ffafcf588df13d4d45edda5dd02f5404fd75c1a10c50", "1400ad67844dd159eda5cc68f1e5039710d2da1b72247329c3255189848b5c93", "243a201ebea3c7a112fb8a40749ebdb1cd95648f5350111f7ea00e67804ab094"), ("17bab036742baa4693d22a1ed4a7f654f910a97baee226ef1c44672a47367976", "1110516987a3681a5c89d8d6fe76c9d5707a665e5d4531b5720ced25fe163f40", "1b8d8f2f8ee294ec00178f5c4f81efa6764d18e9fb160d4dd91aab9e35983c83", "2bb02dc35c6b239ce0e036e6479654c478e681223f7943b985265ff80d0bde08"), ("053d6c53acfda0c37fab357089a7094828cd1175e700f838c8b740e60471c0b3", "2b420d91f016993bd7ed42c40708f173ee895d39a3db482dfa7ae5960a0fafc9", "0d740f8d6f4cc19c1cf669cc218dc266f15a5fd82b4ed15eed77eda75b48038a", "212c31a31f70217698c89a368401b00ddad4b36aff3dafde9f8f53e37d42027d"), ("0d62fe815d19b10868bb166e9ae996976862d646a27c369a7be11d8928124e89", "05badacd5448f01583c898920b7589244b948d390556adfb28441328ce33f725", "297ca23c304c36a4275cf28568de75bf95a31a686c0519c60b94008803f77f75", "011b43f7500e8fc2671ecec88bb5788cd1ff7755863b06c01e7ae35dbf179317"), ("0d100562909d3bb9051dbc545808543e20cebc109b7468ed2b038c2ff08b8de6", "2a3575001cff0c7f493dd7e36fc016f42d5d26aee8cf003764662c96f5867654", "1cc727503dfdf3312e5a23758346e433b623224222b4d0c6c467ff0a1579d516", "053c627285cfb6adc45ab9596cb1bc0c3f0a9296d5684b7ce5db28e2908c38f0"), ("05c831b7769ff041cd5c0f5b2fcecbadd79f4576f1ecce45f74474734b303694", "21149a05046ae41509e3c2c6e23a98f950d417e5d8fcdd64063f4728d8ef1b72", "05116f0da014f24678cb55f98cfd53362b4df88364be823735c88f53c14c4412", "24910e1e37547c8384cd79290572ec8bf2b00b9d3633fd04b60125e7a975c1e9"), ("2f5945eb760a64b8146664cc3f4550fab75c1b2eb037eea0ec1cfddcd5b2287d", "0d9ff9538288020dd6402b81cf23de9e40743a22b70bea69fc234bbe47c39184", "1e692743678469307a85567c324f67b0cc86830d6bde3a5fc1410c83fed301c5", "25f84129368171420d3383bede5e7e7ac8b6667bdd1c7a9e2e92290aca6dbae2"), ("29429478c017c5005c6f36e50a4516c73fef35d39b0cff320b952b6016044897", "005c21d9defd2cd5e56a4c699b202bacfe6b491d657551ee9c011d5f7435ded5", "09f6b2faed50f817ba49abbe7abfa090e423660e6492d309ffbd806ad1b6acd1", "128f0d59f6cac8bb4989f4d0bcafc15aaeeefd1eb176b60c9a6aa3157e7d3415"), ("0e5be82c881c7107bb0ecc596dbe005fe453d3952763281137cd25c2895514a6", "1b531e3118b500a424883d47b254f375c2571f7f4c23ba7bd847a28f1e8489a2", "0f40c21131cabb52462d49cabf5415cf57430893bbb2161eea6669de57115c85", "239e1cc8b81c5ad523ee88bd6c721baba10e46759d0a07011c7f32a89610ac6b"), ("2be4c1eb0df9aa5bafcab0ef4e4616c12e4835b161d57fba24fbde623150f9a5", "22e58e83fde7b1c4ff3dd6fde877810a267bd0d04c67769e885dec239b208482", "06a04c7f957047ba62c6d617c86601fde6fd4b4ad517a2a5bdfc2236fdf518b2", "11280a6abfb2fceca0cbb5700137efaab6c144d015947fdfca8a3f4a673a9d73"), ("10fe8df15dee383b86422346658105223fb60b3748a9257cb2c2391b66c710f5", "0a40dfb1a6a91820b2539ac70a6f9e9274c3b7a72a3e728f5208ba73d3908c52", "0775e20e8b8140800a3ecd1f07ed18566f5f091d711b5447e84fb775fcb4a931", "2dc94d41b3beebc8176c6bfa2313ee7799599eac05cecf100a6df6e4ba8220c6"), ("13808c9e1f7264e130447c414c84c6ee7d57667ec19f5e2fcb925ac0f0d2aee7", "1cab45df51d0d41c15bc153d0a2efa67f04e308c037034fdd47dd79e30e6896c", "2c4daf38941419c0fbd3b4a4fff9b5699e0d41d31d4441b2d802d70e20cb5a4c", "2abb7b9cae52453e888af81e33038c5d8e0489d4df71102d096f4ec5c4d77075"), ("22fa43365b9f6c0649ab2ea54424b4843882c8218f7308483e448ba93b60bb38", "1386fe63e4b491a614609aebef69e7b016a2ee739d492c1fedbc25263bbe9e67", "09844f9336b927f96b3bd75538849ea0cdc2e761afba02f6b3d3e8dc1f822a5a", "129e2f970a6d9e59baa632cd21ebbf39a5fa817124fa11bfa9b84b9478c73878"), ("0f946f3753e0835bfdcb89de5f37bb752ec6d14bc41157b3683e7c3746bb0d86", "2fe2176a55391af810081de3eb85460c58321f554ece8edb34abdbde3eda1ce2", "1289906749a70513f1306e75bfeecbf0bab58e0959868dd7221f9d9909cd3fdb", "120394288fe886cb26707bf3cf6d224b9b5bffe492434bfb07e0f88881ccffb8"), ("288ac3b902955bf1b3ca58c31d36b26aa166b00f53f4cf6f1ab8bcd3eb9215f5", "2d468866e4d6c86365dd5c4c980a3fc4fb2f43e8f33f0a4e32c585f3de9aa7e0", "0f5b17cf2c947b9fa50f9a16c58d5239cf511ce357b3b78ff56b878ed9d27bef", "1dbf7cbab2b88655c47632e48972afbd82345bbc51135a8a1819fc7a10a2aac8"), ("17703a472afb6a54d537b3d76e2e28cf6ad8f5193f8e95a5a184dbe9258901a6", "13519f6e747548cb605750422569349e8490c735ebc6a83fc29a73f4028d656c", "1b921d2c910bf5dc32a8401b6b76a1627ee9d19b65a888603b43a80bf2ce7b78", "05a080c3537eb8d4f0e19c75ed5f5ec0a88d876f67d3ce2a9acf6e1f1682b523"), ("23b72dc97a66f8e4bd60b419d79208c22a5b0a07f95d63c1330336698314f7d3", "0969a1e8f42b23b291a7a2844e8ef33d24376a2a26c427036b274080a967ea0c", "068d284b4c68a92ba1e9f34bf050af4503a8ead82ce047bb7bec466a6dde6ecf", "2a2600ecda57f7c570c1bc073b8b13cb70d316c3828708fc30f96531baa132e5"), ("2c97967b0e87475944d506e2c13df829934596947babeb0788807a6decb57fa0", "295a80238e052f88572124b11027d6c65e66740f61f3166201337411795e42c2", "1528d3eb3685d02407c496a65bd15535cc70cda67b99aff9041b01bba65d26d7", "10c6e52f34a7e59c6323cae13f8f5e6bd90cd5cd3bfc9bedf53af066d17a4ce2"), ("1cb13ee61efdf43df86826fc649fb08aaf664c8c708ce907f644f839e628e8a7", "0cc3e376d607a49758aca02201791dac6c209934cb4856bcf1ab579d11fdc521", "194af25c8311aae5dab9cf97f939df1100bee5651913621dd9895aac1a0ba28a", "16083e894b31274645d14f29d21e73739183df32c2855e41ce2f182a9f7431fe"), ("0a6981941f1c58334563fcc32eb74311725c3f7dc8269ed91706c92f56b67cea", "140158f4b6465a3b92ccabed53162a3e1751b123513ace7edceda1389bd75b8c", "1b43038a16fcb7c0c90820d2d1f56fed66fd0e29726d2ea3d80ff55f840489d5", "2054fce0de6c13c141fa4862f8f5d7f7c7aad2136f1d381d1590ad32447a2bb1"), ("2c99c3be5aa8866428156e713e2d77a70d89229c33e1c3a6161c88a580a69eee", "16e6181aa4047bd6cddbbf7792b3f19df72439d32911f717436f647a2f270608", "256f89caa68b05d5bd7be1ee2a6859493dee9660a1973a17354993038dd9c043", "066177cc229b09e6ab22910badaa29ad6d9c9a6a38b0606ba26f3da70b76ffb5"), ("228f622d19f8d4b5ea11b9e0fb0a44b1ff35614d7db4e35c2ec66d295232898d", "2cef680a69f8169c4a78f6eaa0b42df9661e79da4dfe891960844f5ecbb48c31", "2c76d8d97929f2fc3dc1e9e1bd74baa4870ed77a3314f28d4dc598f8d28af16c", "111832ba0c14988dfcb404d80a0de0bc4f90f94f5e4e21ed476230ba5bf72539"), ("16b406455a9554abc2c44dc1d02accab307d5fc6526707b8aed62c9154a774e6", "06194c7186bea291b760fac85052b518090d72dca40d5e0728aa2547b87bd977", "22ecbdc9376574e9fff3ed8c5dfee83a98c7cd0e0b1fa603b3bc7ebfc184bc9d", "0eb35f4fa24a271d955641b1c2fa34bdc4423d16287dedc71eb44ba7a5c27778"), ("28239b5f11570cc64f62d4f4833c7d4330a3cbfed1d59c6bf15df422b33e5178", "059a9a161e55ce207725e4703623e42ce759859146d0a9714a96cf056bd4a302", "030c43a397497105753ba88f0c1ac48666898a59e8566ab427cfbd26e0c9c4ff", "0ca0a760caa53fe9e921612f0d355ae993988c7d4992eaaa45d3d8d57a6ce917"), ("299c1c8eeba3536ee7103117991cc88e37026ab5ca603a5a202f0d8507ef8a5d", "136ebe8782985b7cb368e294bda15223062d6a8fb5e095dda9b0e2aae5e2550a", "28b7d1a5018ccbda8220f0fbf75fb89403d2e597103fa9293f03206360c50cc5", "1df2cee86780e09bc600b1abed3c152afac617c35139f0a0b6ec8f33cc65decb"), ("09648c7e9ceeb9e102c96adc8c7f7279c03b382adf8b3251af9e5ef810c58ff7", "0f9ac812b30ac7901dfe2fe9e1e6221a16ef9ffd7cec01fdb5d468fb867e86f8", "09b789cfe8b0e76eed19b34997462445db1ae648755784128ec8e65b64462e89", "0ea2cd7c0bc457c23b82e3a695ef209d58ef318d826e25cbbe49a3bd0f72a75c"), ("1262bcef7ee2f4b9835fb01a9e122b9055d37c4b7e8c9d28c1d45c8e581451b1", "1da47a5d28ae9c3893d6fa8872fa9415951694ca613c1215211607d5d8925973", "0ba0a535a794fbd7715c37c6989a886ac52d31b77762520d505f7067d4970dc5", "2ef01888baa8b9c074c0f0d39bd872127ebac4eab8c11eaac381f375ab49ce83"), ("165c133df980ab90ba4d7d4f54efe2e3b28a2be9f79c3e3feb2cb10a374bad0f", "16a318d10c3abd0235c4240cfb7e41b4f08a133d9137d086906d69816b7d0242", "13352aba0daad7cb14843ff4dc53cf31a9a165e501409a4c212822164abe7329", "21f066e08e57031aeda5ff7aa56db643c44895c16c93c9f8146760491c21a7b7"), ("1e19621e0b12ed006edee85bf6020d8c579e492f5b979b8db41f295aed9c4e81", "13da718d77d9efa364744729d44c8b6ea0d4f9fc8d57542e4e062ed5a8de4c9f", "0a8a04413c6ae0fded19c4dab3a6a8cfb1beecb66baf890f691d0067256dfcf9", "1e0028f34433db8076fcaac88d0ee305b3c37a2c343ae04bec38427172353e90"), ("25eef7582d63dc4a0286351e71c98111d64f1f18553634a8f24fe4cbc87b50b0", "0dfca2a4f65d9c041f3bfc915d9d4142f4f61f29712cc850f1001db513078441", "2fa4cfa29341614eaaabe782d296f1173fc7dd75d343df67bf12ead89792daf7", "1f5ff76cc0fad16aa8d44c0716636210d944fc4969de390f7583f9b4e998d220"), ("041ef823834a8dd7290e6b71c6c4e6db820f484363f341fd0fbe3bef4bd928f5", "079df08541dcf4941d9f4d610618f47781f481a12b2e12f207824336130a6d16", "0c7038850fcc50501490c9a6fed822d23851ebca819b23d45ca422c14b050b92", "2eaa16bf98f93f0e9be086a1a3c490aa548f781e58fe4d18f3118565168fbfb4"), ("01471f7de91fd8b5bffad80245cbc0c115bf7b2d28c0af57d9b0e447e600bdc2", "2af49efa24220c72cc9a9d75322854aef9d75c19ec14bbb213ee6e294fce9251", "097468ec5f171eda7289138a599e725305ba978ba49576150731b42166dd51b1", "20c231858f512f3081a2b414a5f1d88cbae5c4aba64cbf39a794f02ded030d75"), ("0e373904909824738ae1aa83c28a77788dc434a25f959e5ce3718fa431ccc585", "0f431ed68f39a7cbfc24d791f1622508a4944f47fbf70ad6f3e51b5774d6ff13", "09d1636b20524c3e22818ba98d0e3ecb082253375e1c7ac91ef93de2bd7ed218", "1d409e122f48b67443c5f9aba5605ff3e71aa59b6118e6fee786b5eb0f741fdc"), ("1e5fa172b8d1df940c7067a884b92753e5e4f5777dd7f64e6b71d8b446077879", "244acff016d2ddeb1433785ac71f9931d6a613f1f1a600e23b35c90bad487235", "3052ec8d8bca1f681a2346d099cbb755a5af58537577c698c66542441810301f", "257e2b4b0a2f46fa616304964408a582f5411c37f67d267619c5b1b631eb0f3d"), ("289f7787456e0ee7edbb586baa0a80997b96655189b5dd619bf07617e70aa4c3", "303b566725faf47852a2f335df77b857071ba03dd6df862c717cb88aed5cbe8c", "24d89b967b6cf2feaa173782a049c17a26e8db62151979bfde889a3416622208", "1e70851142428240771856ffe85c9f2e6435922747d38940bb9f3f84c991349b"), ("0e710c69de9257304d34e768725a23af27d5bf8742687cd8735860c36c47a1ea", "23019de2deaca7d05e782f22f0c76f7416054e0d722cf536cf7f3171472e0b97", "16268156d9b940b1f94a35bff41475e593aaec902f1871ecb42e502d450e1a52", "22ba0b849d043bae89194ba6741858b6f1bea6e91a14377d18b2ebd9f56483b1"), ("1ec7a62197124751f417863d0d53ce3af90b3f4b4c669188a5c39ca17116780a", "2d966b0951173a8bd215526eba45922dbcf6bb50d82f862156f0e2b66c39740e", "086ebcc8d410339afa0abdd6934437f67e8550d9ebd96dc404d1a8dff30bafba", "2ae0f64e1aa85986fd1238590f5a1aaf6c19ab01055dcdf8be36451759eca475"), ("266cb2484ca2cc963001582c03aa3c97ae462c553f34ecf197612ff6266e4182", "0d16340b0e73a1d3939ae4711e3d0de658f4c1c2541dc2f11339ed996b5c49de", "0140833df71b86faf3e8824216855d82b90685d9d2013df39b67d0df3a434392", "20f7d32fca89d089903fe642529e4a23e66fb62b0fc0629dfe7f28cebf107d1a"), ("24e2bf654226244e7325ae65c5ee7bf07bb0e46ff8b954a1688d0d6c6882253b", "2405fe48ca776aa3bdc84a58ff16b9742eadcaf90a1eebb20c711fef99469b24", "14c6f8ee8d6c1905fb0fe1155de6aa59f115da49356e73d65c9fdb392ea0f3fd", "1301eed23c925f0b7384fdd2d938a193f9a283423dd9ef7726ad9bbc756e153f"), ("07fc5ba122b7b40d64e2e7c67797a63b71ae3951d41dc2e358fe5d37bd604379", "2a7835c532662dded7a2ab86e2278b1d4385cdd8b8eb79424d95d04e7614c44f", "28a321d728b724026b5ebfc82ec10a6470146a8be8911b66a17c3eed2fc3fdb5", "161dafe8555a5e43d27bec4ea5cbe3a84864a5bc7a3ad1648881dd0adab5a16e"), ("0d2d6c361d9ddf9b21eb3c290ffb2ccd959a5b9e9245078507e3f01de59f633e", "12e0b7b06ef276717e75511b02db79990da2942f18b3b2c8646087165569e2ac", "169ae8306a1af295678efdd3ad7372c3d05052fdf94ded5fced051bff374a4a4", "105d4f00b736b608dacd4ae5b07437ff70f4d374dc73181d08aa4ef6ac5cae8e"), ("0e925b55796ac4f09e4eb194fa86be9f0453eb1ffe9ec933d4c7fd0252dc2b7e", "1f7da3503af45a72ccc56bf4a5979848fd877801b4b839deddec4f6d8ea0591d", "29db61180ef9dfe248137e87092255dd44ba21a51c9e2b0183704917fac42c74", "0b1be258a65da77cbe4da9e47abf007c13c3b7f678337e3dd5e65be26d2bb9d8"), ("0bd7faa063f64b5250d19cc5eacab9c4e236f8813b9c6f7abc516b90b6525591", "08ff04d7e6bde21d6d834333a2c495df58d979cb1186f538cab232664763c69f", "00b9043ee2cb640c3acf403185953c6a917b39e73727d7f105a12f661794fdf8", "219ce00c1b45bafc35e2dbb957264c344804bf3e793f3e61ef35bf82a446a64a"), ("00cac289d107b21ae705bfd6fbed1c389ceb868147d2e81db32f1e7fe1bd19ed", "15806b84abf719cd6ff6ef5ee2d5b2e29a000506306febb48a9b39ba858f48dd", "222b176ff74c2425a87b954bd2a84d8ac64380ef77669972b612bfe668547cb9", "23d2f8b04da01fac4e805756de9cb8ca0afdc151d1b42d54fb7f22d3df653f82"), ("025258a69abc16f4de5215c5657ed5645c161a553b4bf4626ea7cfe8d45c134c", "00a1df27d6a3e82c46a3a6e80a203f7d40a1ce587fdd74234cbd8e1a97441bf4", "2a31bffc87dbfc844a278d420a2ec563f6b614152b102db2744b23252c6b5839", "047895d58d328aadbf9beddaf426263c51d1eb4d862951d49643d787994c3ba4"), ("255dff912a6e7c0b483cf21d0de72afcfa515f66233242604a9aa4eaebec01e5", "10fcd729b91a0469f76da38d861b57f81c4c054b0f2fa790aa9ae9e35e25f068", "2a8040f1880e2c71be91a4ad6637a8e6f88da3e0a3906b64f3c3a74dbc21c08d", "1a1e490395f7c7dd86c065e03dcf95264f0b8b1be4752305e0051757e271597b"), ("09a2fe3d67affd8ef8a2cb83322244fb47d1832ece5b2cd53ea30c9310034e2f", "1ddeff94224cb500bfe6a97ab311df1eef3d0716c90c8cfd03ad839e15050524", "0b0ec592944d49e7e9f6a34b764fb50251132b904987f6bce1e2d9840118bff4", "1af5b8b406f3df27d7cc5f8f6473c2ab934aa959ffe9e4b5c927f2bfa1366f97"), ("2b83f66dfaf6163c3a83c3291efb56fec19e0abe595db6a1b6113cfa60817b99", "21b348b5b39aac75dc03d8c6a8561cd31511177d0063fcb009417e9a185077bf", "1e66e844edb9272ea6ee8ffdaec5cc0fd033f20f77b9692eecaf276b19411222", "0467568338e8e0af5f226471f529896a868c31a8dc47d1c65430652a4da4299e"), ("21fb6ee8c83e8f614757f401cc707b20f96d62743b0dcec46cb3007fbd716fb3", "085372c59abf0cb86c1d58ebbaec076c5b92e9a7a74a0b624bfeac5303473f00", "00b3c154eed28a9e9de571dcc2dc905a91d2bc560fa42d7eea872bc1b0ad951e", "17c8f5a0810fe28573fc80b4c897ef8b384e105feddfacd1901a1172e21358ed"), ("0a36f8126b328c34c3fb5e2deac02b3865fb4599f5796e268921b88a8d332c4c", "14a4c4e9756daec3dfc39d62dee84f3946bec98fe53cef0ee350fe5c67a5830f", "2637e1c389052133a6fe50a46b89733b5bc74e289a0a389bd93fe1796b435f66", "0912e64011097a29633d3f356035136f00e688dda56ba43559539714485c690b"), ("17a3639a1f6cae6c8214a3ae77391916e5864c63c6cfac37a14b00030281d984", "2283086f2e867604bc4f4f89fb74175a8bacd15eae6cec59636172cd4a207387", "25009a4a99caa76ae449b1ce21eb819209f7850b0cf6772554d61153b9ddd731", "2f84c540df19cbbd3ed2cc1bd40e638e4d3c58940d3cf969eb01895992b34b47"), ("1de6292491ab3cdc78a7738c6af68b7919163f5faa47390a95df68dacc784d55", "2abf74ddda97c62ee326e74d4a244bd0f97005dfe3426d9dca94eae98eb2be04", "239938343bfaa98d6e3f9b4781cdc9125c15d708218f2a83e413bfdc367aa9b3", "21fc050130fda2f0b2475dda49cd9fce3c06c8bcbc5d4055eea693cecc85716b"), ("027a904d0d08de1dd3425fea1398d0095a5ec982b0c1483c0d1ed35f49118612", "19b786fc25e310c559507138e6b0e174034625d4eac17790fb7a6318ac0c3e7f", "1ece2146688a70b2be838fe6a45d3a77c0490cb3ffb1af5f7e6353daf5070f95", "304ac74b738dee93b156b8604e67ccaedbdec01a562daac0412be7b8d064d38e"), ("2216fe3fda94ba92a9c41ac9b71d6c2f3367b15c4e625a539de1f1fa75ffce7a", "1a247d3e4745f010c1ee43669ad7e5129251184de3aa90819f4c465f49bb393a", "260cad7ec470563bcabc156314d4d2e32776c831dfe4a75d20fbe97aac7a8e4b", "1c0663e85df5162e3f44e7e016df0ec35f765d445257c86cac159e5606894791"), ("07116988ffa59b86c17696972ff0910b85333740a5c040197a7de7a2ef6cfeb4", "2be916b76d2ba7a555444ba49ad616130189f45ab9eccd3e26c9432478d47e9d", "26391978b407248c5858f1723e34faee4ed19d1589b6d0b5c52baa1122b60d4e", "04dd425fb096bde6365cabb0aa0e377770db3f7d3e50ce5baab57ae8060854d5"), ("2fdde5bf353368604ce9d163ba1a16a86a2b03a05e77ff76063cadef67ca508e", "002d55241ae4a8f33a3be27cb70f5cf2358170a2221505f3ff2677be879305f6", "17be67b0473b89e385102174a15880b10f8489e34c0cddad37eb52b7156bdc44", "131b1c61a75f39f242e5ad0205e354dfe9786eeb9589a9facfd901c9a00074ee"), ("1457f68ee90269da8eec1e448e2cb3cf5348e726beca24649ee6cf3f6b64b8a1", "1f5276dd19b7a3e3e7eea5115cc3235a0c76dea577b6cfd12c131c84c5c0f567", "00916ea659c2c3405484110b1b8ea5c736b899da4df98c7cb22aa3b1e290271a", "185e0f4f38502a6231e1c2761d4a321c980f828335b8f3e88697b8d981dc6766"), ("248c5bad93cf30f9995126c82ff32adbd7f913ad18b36cb86c70fad6d0990aee", "231017226640f3c23c66036025975e9501a9982e5aff4c49c82ffd23973b228b", "29d9e3fd16ac4023f42b00260d4ef71a6d0247777e78e7390db45ea975013c08", "245fd82efafb6a10837eb3193a7b567e2f876283453349e79e0f187043835bac"), ("06647fcf956e8fb53c62e6be3d90085397db9e996b4acda8e9c1cb5eeb12af19", "2778fff9d4d4809300de41877d46fd472af906cb175186fd42df1463908591b3", "2e834fb3722c970a610571c438e517ff65e72c77eb9d2f1c107ee1c5e1b370b1", "01d8febeaaa587b66b7444615abf6a783a1757395b8a4158ddc165b23898f612"), ("099f287df7a2b1d0c47c5537adad3e3a4afeb67141b734a03a7b6e74135631a4", "25f5b6e1f49e426b0bf578ffc8f5d17425925a34e887e03e5c9e48b55d6b7ca4", "1c2976cddf35a369078c5d6fbc40fa111b46e0e9c834d46459a8768b3bab48d5", "02095a717bd4daf4c24b9ab4635e2925ad7a6bcd8255108eb84158084eef38ce"), ("0b7d7c49bc1aac839477ea2b8496bfeb262f2299a62473ba50867599373d69aa", "0e060a182cd7b53be6c0fe55e81962890d5153bd801a068399349524205398be", "05b72e9827b2a7f6e34cc3f6e165e9b6448d4b1fbadcf96114cc5677ae1a5ecd", "1f9c73308a10dbd852648c3c4c960907cfda03e89879b9f416b6af4dc878e54e"), ("0b71afa68fce55e0bd80a35e0d29f1c1cfadec05490beea90492a2b13e178bec", "193795613dd235707cd949d7c5e42f07091eb0bf7714898543e6387ff969ac43", "142290add85d35a3364ada477dc842c8ee37eb62b2a9e01621c855fa0a32b6bd", "26fa316214691e3cdc5e21a6992062af26d1c001a17351bc0a940a6be80ac728"), ("11093acfd09f39e99711eff010c7477c7b129136fec866981ab01150892158e8", "2aa5776e7788bd5e8f56e71ed56370a3778b069da9de1548ebe9f53bc63a1f33", "129c53660b2be842d0ab34140ee275c2a02be2a8f359d676f2b8bae49c5dadfb", "2d6b3d13bfce845258444cb1a4900d3b5d1d6a4c53e20376d9ca6e0ea0a17d7e"), ("10b4d7c07ed64a2e1b1392af9d11f81364f93f2fd2fdcedd9e48df6d3bd4988a", "2da3db4be9a1ff15b4ea751c3a1f4bdacffbaab01d147433322ba66b591670f9", "294ce351530262413b25b7d4e7dd43db57c5d6188d106408fed881795f6d69ab", "2632cdc918a10bf3e68f23f0d93b7276c27af49408ecdaceb2683c69e1eb7454"), ("12634d32fc691b316c445682da3ba5faea9981ff48b0cf4ad294a611a66c6205", "0a73bdb6943c8c0abbb86cb2159f2bccc80963bca885925a65ef9b92d781a9db", "10d912800e131ba281e2f1288710717d56d0e4e7b268af1f9b764d40691fc29a", "139d20b0dbbd70a0298902f57c459699dffeb9d81bb86b1b34a5949071b81cbb"), ("0e7a6d5958288328573d2a086d8f8050b636c0f70bddef65b598d35007fece39", "18a56723b3f9f266874a064e66b7c92ebe35d172238b897bc8d3866fcede1636", "08c65351d630e4f19be6d4174c4d072602dfb3fe69eba889dc95bf56e5b068c7", "0fcb72915cc7c58f9ccbd2c3339a3e20850d0b73425f352175581e759bfea992"), ("08b9ca7ed249451a6d9886f36fa890af997edf39abce420aa12e7c6755f0faf8", "0b8837e963932839b27d38ba4a613ba6425163ab9294a1520ee2b151d4727dcf", "1872a92a8bdb2abb345a72edabc72fd7463e3dacaa0dfd4507b9d0373a859efd", "13d0d1e163838fcc51c53f6081d7005e89e6013c65231ed164e820613699be7a"), ("1efd5fa4001200189e47e3947d90f01a892de3cacaf270388ebfb5526f7ee8f1", "08886df1d87e7b467b77232097a2eb614a2c7fffaf211f3f2bdbff15a2f70081", "22d61fda858a1fcd8b3e2ac7dcbc8d2ef676a92951bc1461b25fd6939010f3e2", "0c7eadcbc8c546962edcaa70b474daae6104154a7704a7ae7dd39ccdda94e04e"), ("22a31f2ae1da6d7dae6fefbc606e34189ff41550284a519f1f9e750a01358210", "0b6e8f8acc109e23b81ebde74ebb534d38b4868d79f9705aee8e93ab6e761009", "2e042dd06a51907d9bdac015dfb5b077ec4fc5981e127858e72a01ec722f3b2b", "0466b1413ac15e75d43950a57f9da8cb2e39277f71e6bf864cccc40ea51dd5f1"), ("2d840a85135d9a1c9927ac59e3e3abdd8ddc140de4a6f35636c8fff907865329", "13bc3afcc49f328789bf1dd0bcffe2e69a53942e39a333d9a90e768b1666f552", "247a43a6cf23684b31de5e55da10ba52a117f46039930e9d8be26f394c66016c", "250606b70d175343628315241b88f91e66cefe61305555e72b4192ffa0edf1ed"), ("2b8faf0bbe4f51dfe15f052b322af96bf192291cefbac63ac1362a56089f81af", "29d6f8292cdbc99fae459ca4a2b1679125555370e664358b07d37ff848042197", "22b44ffabc85868de66e9a07b3c3b7336b9a1beb15f6d13cf7b8078567b8f0f5", "17c6e086277063f9907292398f0eee4a7ff141703235f6c6599a13cdb2679a5b"), ("2e00f3a00e68c81a6b8199b06e076bc3d0c7815ce0d918d6d108e1ac53957367", "178f46cc961bca87f978e1dac1a19a5a170f17358eb446c8feb58d710bc02aff", "1ca69086c5c6770241af706ee00087c55cbeef5d3f643319a3a1d97be9101cf9", "2969ff947e7f9a30f66a9015f705ccd7b0c834f353f513aea23e10bd875a04e1"), ("304405063113d33abc7ba8e486bbab26a8fa6387cc1f0459556aac8d4ad3a11f", "09a0cc93ce79310b3aa67cd01dbd265ffa6f9463730a48cf20a6f7186af3136d", "2085cded473090951bdc3e48618b6e69b637142e349428dd7351b0d262ea2f64", "0636c66904fe1972190428c56c1b7e8acd2a74fa731905b1da6db3f2d7699dad"), ("1eb2b800514efb25e80c97353f1d464ababcaccffd87ca3251879de4ea728c34", "2f62b26f89a5d91af0ef8be55955d877c9440aee2fa27445e4ba064faeb8db05", "2a56e2deae17eb927d37614f49a47cc2c4dac600c33c2d76ced483835e348402", "0e5edcf6faeb17edd21453e4f83cdbe357fb4f85812b3d6a3c0524af36b561b2"), ("08d530a31af2c3b8ab9bfa0dd1f89fe10c7484247ebd7cd909103c05b9af3ad8", "2770713dd99457e005ea7efd90aeeabce7c540216f4305bcee9a774d082eb0ba", "0b800d5933319dc4293f98ffca143af1f75eae359dd037c6bda35a2f8f580da5", "22eef39a05ddb53e08e746f903293bc137d8ae20a6b246d56acbdb33c2ab2f9f"), ("17dde8cade310f4fcd24d3e0c75e5ab1182a32fa720131acb3d2c35505a4d77f", "2d6fc6ed7cc1f03aa3598bc6d7b677c7118e04c352e8c58e0a48e385f5655071", "0bf3a81e63065c65fc64e7737363dfa47ab04e9d3ede2248be72e9c6d7a94218", "0e7f13724456e58934d45f0258995b1cc934a352d02703f0cd0226486f5b4812"), ("032c40dd1077a3676a3910fb13d2e30c26bd1a618204e9025666e89c83c2784c", "1ef1bfaa6c65695ef4e012b7a568c7886e2aa8d540520550f8e928494f7f38b3", "14284ef8af628466f7b3a4899ae3eef2d39901544fdc27ecdb8af6ec12eed1b1", "0f307d29ae2e8b6a082c5d683dbae8aa9e804febdcdd399a1570ff6d25774662"), ("1b429f77b5614677ac08d643da4b13b240e3a8bee2dd28b5f703416ef91da396", "2f3378aba0158cf50602ecb97106829a30ca2b73cf2091fa7b782114ee1baa15", "2593f5235029c9380eb4399c751033e1113f749cd610e4b37c12d400f89a6d41", "19e8008c3e02457d32fac6d982ecaf28b7b008910c4af28f669e8a32343918cf"), ("22a85d204258c7d30fb18a3040befb4f683c7097f303157a86f6c50b8450e28c", "2505ddf31acdba4ee38e4de2ffbb75565528af256755bdbb452910a96c5ba2ae", "132c87718794a6b4de3f62a016053070b7daed4b66964fc9df32cd6b219cb324", "04948d6809622debadb6622bfc238a68a6a28a9752f435921230b17377ed9770"), ("08ddf812859020b04c8e2d490674859e6e36eac408e5f7b67d443ad56d122a6b", "109b545ac3e0f8d35f4de0524b990a90dc0d879246dfc85bb22553573ed471de", "035d0d4ec58c3e73ce0e0b80d1dd631842ce1ef796ee64082e6e5737f26ba5b7", "2bc7c5eb811731910c6fff388f2c2d4435591c16bc05db17325275fb0ad7a972"), ("0c8f729edd49d7a6eb62acdeb4baf435b2b47975f5030bae4d087c35c721610a", "04e2a0e6494f186fde5afc6e792787c13937decfb3d584da10901d76ed1639ec", "0144bfa9979afc111399b4aa18375ce5bad557c4366553a52a482fc79cb2f44d", "2b020b24becbfbd9ea5ce8ae89bcef5c316cc2ff0ed52143f66e6d462e76e2a9"), ("061f387a47aed8e85f6e24b2c385afdb188cc00068e9373d34ff64dd99d0b50e", "195832e9f7058abb24a7e88eb172f18053edf636aec841a48059bc9e6918f00d", "1c3825ba4d337948ccee9da75fbca66f144d089dd88a27bf7c59f27ad4a0df06", "1fd082cb3808625cfbc4985baf29045266f6cb23e30f2af8a9e6c3252b5c5f16"), ("20e32348d697763ffd208e5703c4a0e665bc980cecc62b7192d3e966f6bb2e57", "27bb209360463641f31be9432615ca9f4590756dc9f6f31cf7267d8b57d6ade0", "2a7e03c6a9e497e3a1e0c51d7b9e522e03f817c52b9ff8a13188b038dec47bd5", "0459e57dcd7f547f07669e5cb1c29c000cc1ab12d324e1afc7da7b34825c26d3"), ("25dec4c0483968753777a3c2107e815f92559cd7a3d6be86b7208b44fcb9f533", "07ab6ed44935062c4cc3ba7f1cd85c7a3f45a1d342f73d2932dc191b32a97a5a", "2ec135ae4382ffe26f76b777e0334fb58c26c71975dc7dfa3ff1978ed314fd29", "0e44fb3e42ee625f4aabb3d48582b6ef29c0e6afa03f39fa393541c00e7b35ab"), ("00303d1debc3cfa032095bc6e43fea1e0d232cce2e11752e67e7477916601191", "1e1971572878bb0e28bdf748ee57ac7c13e25ead13d51a871d5a34f4f8323363", "01e84debf0c58077d0edafcb9053bbaf30725332de72f61baa4cc8de96c25274", "300451aa972ed0e6c56ea374a64398601d878bb883fa6e057dbb124d1e86b154"), ("0ac8230c14bb2b1337daf228e5ac4157c435382bdee9a7121dbc2d5c7986d8c6", "26dc172484d9b813ec2e99e64b20911bbab056c7f90aec0258c1fd5f5f9ca3f1", "1c89fcaed646c22d0a28d848c3092bc842242d32cc4f6b4a2173a0df76589d73", "2a709302558df97012c5f9a670c51884408a62b6ed465330e0bda7929291e357"), ("13e6478e1ab167085aff914b44adcc30e3d38e39e75d0dc74d36e7e60fd112b0", "01daa96136643c1b1fdd4bd739ab27dfa302fdd4d40813f0ff5732bc4ab564e8", "15ef3631f1ebfd7b4f48aa3ab92e06656180f599853dc0c8e4e6fa2757ca347a", "06a180b25cd775b26220c757895fb97a91a97ef61765f1a12e04d080243a7155"), ("1df2990412a6f036e632d54f0d2e38da1e5baa3fdfe50759e98f618953c5b4c6", "2180276382a3f90b5ac66057c3b16cb92921e690d2ad5290dd37712ce25979e2", "29621b8fec22cbb5339462ea1fc8be068cd93f753f8006ab445b6d5b532b5ca6", "106bcb6e67b179abb9163ef1a36b1c6d20f4abee8036bf999cbc7f9c137bc1a4"), ("080acbcea5b0d4936ecc784669e0840c0dab67a0d6674a158637c3211176e7c8", "275c5201d64a23c92b376f8c795f5d06f594876cd6c9c4da2bf17df1beac668d", "2193ccb12a2fe45d5913a89d090de747c4fbf085370a938a0046a7582d9b9984", "0fa4751ba1ed9fead424fe68f1a3b1695a27deecc5a8471d7f291e0560e98102"), ("24708045ff67a7b42c0ca5255a1e6ef980ab2458211c37df1425897517810994", "13504a5e45093108cfb7b3c2c110d677cc4f1a6075b65477736a8165de364fa5", "0b9feb01128e12e9e9407d5edcc75fd64603549c316455e30804a262e2d37b15", "256f5f1c96791e544cdf9500d86e745cd860ef8e10445b3a2a05e83685720d1d"), ("2b278aefe8e75b53cfcdb4bb0da3276e886ced6ff2bdcf221962ecaeb049a155", "0c9eef92a5085c0f600818edc463de884a3eef9ede5b5dad450442d91af086ae", "2ceacfca3987d72ce815d99e5c081b7893b6ddd09de43069c6361be55cc50711", "267f48eed51b87bf6a63838c1385dddc95027825f7c87686f1b45335fcf94894"), ("28102d0c8f73777a30c583f559a93e4dfbc963edb905a37a4e77a7127184fcb1", "2a8f277b2f232b2de788e1ce5749b44afa5e03f021a50447f56ebe3f1f56fbe0", "25c8a49714232a42fb004da3a34c36d8cbd6c9c8bcc24a0e195689093f398545", "1416f38aa0e7017ebb19e29de4db9daec13fa24178977710a84866d4f192bbbf"), ("1c6815e52b41110b16d2a9a2f3d332a3ad3707a6448bba2d51d2b8ac3796f164", "1b4f9e0666251d61e24d63c97746874e7874cfaf41645af15d7b30f2fd8afe57", "1338ef4907d41f90bdd4eabba82eb81bdd72f30281e9fdfd1597685f7a8942a1", "150f59aa86370d8deb69ec56d42548854a5c32ba545c34da048c8afe3ffe8719"), ("0c492c4d42c28fa9f8ef0da1d21921d3128e4ed2eb7e5ce5c35e3043e56e7b3c", "2513f07282c853923a69fa6077d8a5901694462890734897870c473578e1c25a", "054555c5bdbfa7906db1739e3f5cfafff51a81277db85b4cdb124be3ca76800f", "05290de5821bcc05af30d14994bc4f4a24f38e16c3fcf81354de92481ed01458"), ("11e6cefe4a97ab494338a5ba8e718c9d53231d2a59def1702aaccbca0f7ff1aa", "14529e99a61d81babb0d3ae6a6a86d24ece040a6d6644032bb536acecc3e114b", "11f75cde35418dc6ddacf273abaa864686de8469c1a2bb0a6c255b699e945889", "26c88632373435684ad8fd425b04b66a85271a423ddff78e7a7a953bdf2d8d4f"), ("2d1670ce1288119b51f533737075ad48d1c5dd770c0feb83b4e2fcddaa85aaf3", "1748903015885f09b4ce8514f2fe72ca3c283b6c16ea8a2ee841e639f1d1a0d7", "295a3f1b84af0372e74261fac890c49693d610b59fbf965f46c00fe4fab0032d", "099510d7a0522d3a326f977cde16a891b824c75496194c41bb4f956cebd43b5c"), ("249f94c8bdab1558b7aaeeb5c2f5782052b56d67530c85518da045135a70a65c", "09968f16b582f2a85350c39352bc370f00e3e2c17b8adb8156635cd63c3fc3fd", "0aad2ec55edbe5abb04526d23980550b60ccb02f12497cc080a9986be4d75e65", "1d70d0abb93cf49bac5476780612e05c69ea3fc6d6fb0d97433a825006e1beac"), ("27f8b5e668b1807e939332caa00d5c774d22b842452c4c352474e9d529500b14", "24d1b1ab2ca4e46ca8f4f5b1dcc0b539cb2b47221dbc20942a2934bf7bea42a7", "1b1ebea29f8e3d9119ea75a4b288553faf50e5fd3d5da658d08d56095017991a", "1fcaa57c02f8041a98781a65b4b749d5cf608219a2c1d8f7e5fb9538544fdd50"), ("2ba69619a96f8f01606ed16a0149300a6b32e5c75cc5d96ec20d1f9fc5943390", "1d26ccaecb781ce8367ee9efa6d1e24a434a71c8118ca86d7a28120f4af9cba8", "2716a8525c7bb6eac4fd2e0515e930d93ecdfadc9afe514c8ebabe5f37c1b400", "1caa7dfc7c666ece5ef969e1c36fdbac9b36172aa068cd80ec05f9583b2c9705"), ("204f3734736b231124ba846a97cf53b678c6ca07fe118e802425aea761ac9c97", "22f77922ca1a538b490f7fb0effd95978bb3fc45270b12d5fe233f5fb0c96fea", "2788ca2214e502cb9264d63495a1dae40bbd5b057ebfa849766222280a52ef9d", "1004c9a851a28cffcbec1e58384e82f9356a4dc275022ee371d2ab0131702473"), ("043ec60c2563bb07f9e1164eb24d4f96f5ed04aedb71689b9f15e3c393b381c6", "1d7e875452fc9444607b0645d6c8d06700c62c1f5191b97f15e6da3812d69422", "0d1c7cb8133fab3021f5c69c4cd8caa6e4555d55558d4dcbca38dd20cae1d365", "22d83b8f2900c95f3298b85241c663c954741d1bf6d1d039d17362e14d3d816d"), ("060bc916c96b0ff1741bdffa9e1271efe3b1aa945ff220e1f29372ee5bae9a29", "2db13887a06664ade2cd95f1def5e1300e2277c49b602f2b624c5f69a253e756", "2d256e010b9cc0c09e82a985cc37f437891578889b6ea0b362cb1d6175fac71a", "2fa2f87b5799a7f3e3d575b0c19f45a07ca6f526ddadac731b9a94f708fa116f"), ("2c06adc9f13ae1720b7a4577b9d414e81e568acf6eb14c08ff8c702ebfd21935", "06b5e44acbdd7a5c6f90165152153fc9833a91cfd38c5f9b17d7b2d8ce53b22b", "167c190936ddd14ab26be00d4f392480f5d107fc9c552d9f9b6f5401c4153170", "14ba60e29ab7f0a24ab6a03624aeaaf0f30b15d497f4bfd181cb1f687bbc80c6"), ("095bc919abf175502ca97790320bedcb53f7cfdc6d6e007949e8cc1c4b06a5a7", "0517641a1353cdfc6c335c474e9a44497d2b740b6e83c7a18f8954053f809690", "18f4622577030fbbe93f7003e2e890f2be7ed6f501724b4156fd8e6652c8196a", "2137ba86a951bdb7c0cd948c2d7e0fd85641ff6d427f861da0ba4e85991bb138"), ("0cb595d1aef419d193d4f283f19844cbc42ddf76ebc056ffee65edaf6257c408", "2106d955c4e88f6a939cc043b33e9c75dd85df2154c2a0efbf68adb400a1b005", "050f7f7a69fda00d24310f032bf283e9b7caf912fb5a16bcdb1b31bef7d25ccf", "02b5b01e5d95640664d179d1fa1fdc29c756a654f3ef36dded6d91c182a60c6e"), ("1e8a1b2849da25c11a9cdf57422666dd5b976eeb4107f3bed3dd40867f43ac5d", "0d9b34d7bafca3c113c34c0e6eef41d8f487a4056c8e68287cbb8361f3d25382", "2c32ebbbaa9e2fe9b294a9d630ab579bd62ec759446fc8d5151d090e3aae4920", "1075dda8130673df345f6219bf7de3630e0dc3f3160c94539dbc140976d19a37"), ("2563d8bfb0852f4c5813d8ddc90e0208358cbf95f4e01df154ab0d85e6eb6115", "2449303536694c7be59b11609d825316adc7a683cef521952832f4a234d6d549", "2e76314282cd9a7f3fe8ab91c80047e6446c071a7ffdcc8d09c47c8a93fa9e97", "253a9f837bea1ca0beb04c1625e0ac12bea8e9f3ff178bab5435fa8e9402e4a6"), ("096052f5c890929b7f8f235312656a66e8ba58e757e632755223e12b43f0b16a", "1aaa963fe1a8312d320dd2ed77e055784dfb25d32ca2c567762b576560632974", "1826fd6a2e78f669dccfa8b2c46f2e1d3f69c924fe805b19f1c424ba8b881a9f", "1b1c1eff07e1aac068a2a64c72e83f4c51538ecda1f67f174f6451e8cc23a0c5"), ("1371a67e002601ae0d42c62331d5d16326c6fd218a513101d1cbdf8d86ca0e4a", "0d17c8531c4be0bc74ca7a7a8b41b42dd2f1b2be1263db92595f4e2ade1785fb", "1d3dcb7c519e354945d668ab07d508fd6689e83625c2899bda0399dfe17befc4", "2d484fd5960e28a4975d2b91acaf3e7246a7e77b7887ab423a3e6edbcd30df67"), ("2bb2a0920c367325c9a137cd9915fe237ca9d06f3e9d0eae186504657be325ba", "06a9353eb328694a96c37215bc7d37bebc177710420ebdf6af44555039e7e4be", "2377c6245d1329b7a39f5ad110b5c54b1d515adbd4d2039ff2da660e04711653", "0b2b8b4ee1b43532d3d882c02105003ba4e7ec5f6a4287ced8031c6cae38dcda"), ("1219cf9ac791e00fdab74f462ff93d7a1ace769319485971f498a9b16c63257a", "2f64fc4be8a0a6fcc357c11b6650b504eec64630a29aab41c67d7910cda48fe5", "2be442177841981558c860553a8326da71e96ef78352cc8c01f188cc32ec1a5c", "0c1352aee4f964310da79f3e189a77067d94f1044edcbbcd950cc7d8e3c785c7"), ("0d84e0ed2f5afff928a5cbd8b3f7502ca74c6eaf8a73bc3fb4e7d82ce791ad72", "2c81819d90f2eec6d180d19776aaf339493a85be566235c6cbae8c8092666b46", "18e40f767b93ac192753b4ea15408c09834d7fc0486e26ee76a8cd89a6ce4dbf", "083a1064ebc930a8f67bd4aa8704cc75b24631fdd75b54ac74e22af5cfb1fcb5"), ("292a2716bab0fce827754d5fcf9f110f645abfd4e444aa9b32c9d0d2e1a51238", "07cd2a1b53681a20cf89dc9f32ac9a2629732b86c898fbd07d7fa5af2f0b84e4", "1c1d89808060832d66fc178af484a291019cbd3e371e184bb2fa920443c59d59", "20a67a1e777655077394879f10f6e78b4d729a1530ac42289e96ff59cfa165fb"), ("2d686d03c6d38e7b867795c2100113f22b4814f863d180e3ea1d4a191347cdbc", "257b521681c769ebb56524a523a4f4733d0edc7e66622161f484f17cfbee58c5", "249dbafc16d4e85e29cc5a04cdfc2a4097d6cf170d10eab3e82837a09949fc0d", "0e3edf0894550812d1e3edb5f020962fb1128b37bf70f595aeac2fa91ad89fe4"), ("2e264cb463157a20c06804d45bd2c36826131b81f7ada06e1d5cfa43205ea44d", "2c302bfe421fc06a8ad0f99f128ab90c0228e974082010c34e913d0f519a1fe0", "1beaffef08f42cf96d4724fa622d874aa3462caf9068f7251fc93b2dd5a44c23", "2093ee9277c54a84672a504c5bdd0815b5f62431e85ba992e1c230097ff0243d"), ("22170f33f33f1b4993b87d6129932f12d71c00a195c2e584a07bc87edf2be673", "284adafe0ba797f444ee9f5a00baab59d81694178c57500436c853c5fb77b340", "214fae3decb5d216ba6c4959d3bdd10237a31ed499bdb87b2ce5f8137f2f8536", "0579513f79af03f3e99a6230b5738be47219490aab8e18d42fabab4faa280b50"), ("222ed19e8e47adeafb0f4aaa6e95fbf712769dfbff15ca07b42f1a19312f65d2", "03a3bade8f86e287410e5c5826bfcbbe6f5108e8d5f87c455f3bd437f3fe9f74", "0a400734bff2ff8b48280041f1eeb9c360524df31d48d6b204b36604b3736ff3", "25b24d39bbbb4ef5843adf8b4289bbf7e576012aeef52a611c0c1bf60e512751"), ("2749a290e5d5a9523dfd1153f0f18c741f39578305edf54fa8d98799c5a0f386", "16e77fd3bf4f9aa64421f3457ef00f603cbe2422e74dc073a6728d825fdd8d7b", "0f790fb5398311ff1fecede9ffe57744f5769460912ba14265a8a60f3b06e41e", "1f6bb5b623936cf6e17a732c225cdcb1cb54ebbbbd2da380c833c9b405d22997"), ("2d8f2dd8de1f42f7486cfd3e5e02a54dcc9e85d0a267b145853bec9c2069ab39", "128b3b23db855cc53ce75114d6eac67712eccd034b26d7f37e0b52339b076d9b", "212b3d9ad0016ee81b8cc1e6e93e7d02f317b4d057957f642f5b890b4a807150", "017f904d0ea8a2f3111269b7146b850cd78f9191e6b50488e7b78b583a35d29a"), ("2eee715e7f23fb64a846298c5959c664f932802e601d4733309a88a18c7aba26", "1a3615d3c3a153f60b34630c77bfa1da2c9d8a1d0f5b67feb5da7438749e5a8e", "2c806b0397eb15ffd19acce5fa3c47cb90bccb69027823f4caed61445f23ef93", "1d26cecd7145d6378ae885509223c2ccfa64a5eb22d1c14695d76723615a8ea9"), ("24ace1c1d81aed18175c53d2bf30406c31322ef1c7e8f33cdeb41dc5bb1292b2", "2bf16b11dc56c274c10a1ba6cd50d41d53cd32c229f56d23f3a5a0234990541c", "1808ee3c7ad7aaa8acd94cb7c3c8bd1a9d66cc3173ece0a6d212b1258cdce0a9", "29c3fea8afe3ab69d5aad7fa56196407f521932722401816b5a71de3204695c9"), ("11fa39b237d35aaaccaeb342b5c8965d4a62029b4eb96472ac58d955406355d6", "12ad51b905a395f9621a2f92bcb79b18f5bab2595e5093706fa10cadfef55379", "27224fea752c51bca58b8b569a39b5cced41c0158b6fbc3d6c66216b197e59eb", "2f6c99dca64045252ef83fa1adb4d54dafaec121101dc4b832f06853366bd579"), ("1f5502d0f72c503805d0df529762e1cdb81fae3af46f10505de4067135e9ca4c", "0c4247de0cb53f63f405516436365cd1f41ce69d8716c01bee72bbe2dc4c36c2", "2addc7b1168d496b03edfa56af09255eabe67537e06df4c27943a7efc57eb988", "2e82f9fe318e34f1dd7d181729119b38385965e2f13c89f716124a33182bf285"), ("0f9fef6e9aebbfa922a79aa8bbc8729bf1269c5996bdff67e88e0d35f4e9f472", "29f999592a4523ffed61c17fa77d38e4d3a5e8b6f9c47ad963a5b0b900726450", "16bbb2c9c22278cfcfab2b3aeee73bc5bfbc0435ebe1c65ad458dfc0c56885fe", "114192911570e9d2b60f9f6c0bcce19f13fb000fc598aa1452d146966a24e7e5"), ("0caeee755f455a135b49a9f37fa4cb587657c4f7b9cd099cf2a2795a6f1f3885", "1ba51dbeabcb5f5a0ecc2d6bcf9908e746600635162a0dc8d49a57c87f22d40b", "0e56c3ea822ec04fa77c58cb28bf149d42ec14a000244cda7d660d3065ef15d8", "01da9933d68e1f643910b253d8737edbffbfb321fad52f3a7b81d2874613219f"), ("134295c9e35a57a93dd433477c87364ae9ae46e072aa6622420a4b0b6c56a485", "2423d7afff2f002b651f54ca0bebf0df80bd6ef896c69733f076fa65f21ff434", "1871bf6d806522698732c96901c4136ebb181f7de9c81c1c57d27011751de708", "16f45d50f466008b8b958ef8f5664fb5bf65d837710054693a66853ef6a2cf63"), ("1262e42d953eb044cecddd300526cafbe3963a567acaaee226efe84fe21bfdff", "1f4f66e702fdf9a3f920474b04aa836fc919424238b860c244d9fb2027e095ef", "0a221f9a1134f9bb86e9b93ad466d9b1208e735a229a91c0f12aadb36d2efbfd", "1022ad2bd7a07bba550364ab48428d59d3575537241dca5a777620436893eb16"), ("0ce8fcdfa76906a826c416f0442469907ff7b0174f3956f41fad0c5ecc89c286", "0d684b9a215979e4c783e1c53fbe674c6e2a98a9862bdce4bf6150c0b42e876f", "0c2f7defdc11d98c3d1ad5b63c08e7a0ff7817f730ae1622dc4b8f05af8d3bda", "1d6dc0af54aa0bd83f03712eed1945989effab4b948a61ea2f00f88462733dd7"), ("06660ea52d1bc7a830e7e0b0833eee05a516af90d8bc3cd43d294f164c1092cc", "1b8f6de812529e38d3cb0d6a1df20f423b0f06b5c4af1b4e7ebcbc34f71344f4", "232e377a6fec94412d9b7aff5ca41a3b257a864400b28c8c60a25c6ddfa64b99", "1a9f49b2b7e3f305263d22d27b430be92229b7f3321ff2156df0b4a2af0ab79e"), ("2d96a8af3574de3c160ac0f19a385e904a31227336fb35392d39e227012126c1", "0257f911b06630572bc4b72040cea9bd97536210b01aedfd9ec1cf27d5bfdda0", "1dcd0d04ddcd9b92b34b149208a4d9dcbbef367026b07720d8b1b6596b1f866a", "1fc80fef6085d90f71b426838bd0c40bfad46f334c50ea79fbcb28fd641edb65"), ("03c5dfa2727b87d8560346b353fcbd76e51e100cb4b2f1fa4f568c6ce46593da", "0d2889c3527e7a5492945cc76ac4862a2e199d07316dbf7987ced4af38d357b8", "27ce1bb27d205edd85c7a1da194110bf3206913353fa8c21684be2363288177f", "218851e851955cea0e6169b722ec7b8cff98e0f8d75f11c651b4c251a093dbc7"), ("050d7ee254927a46588796d75dd77d15d5455035776bee24cef4ee5bec5f7a43", "11a93f4401efbd91eeba54f5c1055ab9deaa8047553c584872e38ef86c658847", "066994f87ecd7ff328b9ea6804194bb8524b483b9cd23078b2ef8e2af3cac5d2", "0aba9e46b91f4e8b7f287a822ed06519496812f9a36a6bda4c1a1d8b0e3520c6"), ("0a9a78f703f2c039b4708e23486fc33cd1f34c7d66046e15184d20bc8f325766", "1e05e5ed3ad64ecb65a85f5ffd82e277bdbccf368510fffbd6625e1ecd082f1d", "2dda0d460115e94f887345609435a65ef8c74a8b7e2c84bc37951d97739614c8", "209ec3669be1bb2c493ed6e7a559ce4d0a557a7d271c50c27a49f88328dc37ea"), ("04c39e7abaaba87e6dc3a42c750b178946eb665f0d7004fcd45965ef06fbd5db", "13d3405d36fae7467872f5e63232a680a5c8c2eb688182ec2966fb0ad457650b", "1f529d4ddd0313412d175f8ca49c10bca0362ac3a9a8304ac831beac344e19c6", "112e21bf31a087a380e56f961c9c70aff1bdcdf3cef242596c74055c6fee793b"), ("2029c0c9f42cd3aee9675a53409e98dc9bb3f93e3a8e957baa488bd8e46ce1b4", "297dc93535a1fa600888501a1eac4515ea20c6742279078854b77cf2b3b8be98", "151ac90809dd70848e0fdc75a6399eecca073cc10fdae05b7f826466b0c990d1", "2cf3ee64604a3e01dadfdd9704f37c3b6b81f5dbd9f19f2997a9138de5fcd81b"), ("107a6c2f200234296821cf8b53dc4a6527b55b40b9fef7e45a94aea9e75bd759", "079d694f0b58e6d20674f163903a6197c54f9b7b6976edaaf017326e6707a233", "085c08c736af0f1ca79f9c1529b48a528bc77c5e0d90e4c9fc51d3b6cb7d2fa2", "1535a22d5bc82d8dfe2ca53e34119a7e99cda3b815af139fd698572ad8ef6526"), ("1ae5034df9d27f673f6a97bfb45379dfab552abfcccdbdbcc5f04f87c260138a", "22e74fab4be39fdb68b59dbd1cf56b01ea09ec580c5e77be5da50765ec9f5b63", "12bcb0fdde1bb35543a01dfe4019dab831374e8c958ba80a697b1cc6db1ef1fd", "1482a0fb0cadd35a54fea6357acc235a4f01f51233270210c2337d4e1bc48a25"), ("2e465f977ab97b84bcd4c75b296c6774c60473b4ec6fd38f6d0b0966da93957a", "2cb9db54a67089191875d635807e5ca924f20a6e544cc81a4be877b25fd8ec04", "07fa791044920d6332eaebdfa43d1ed584898bb02d91fde1955993ed295b44b0", "0109e0ddc179e156f89487f1404b3f504647ba25fca22eb848b2be6a7ba3b29d"), ("1bc1c14bbbdf71138fc163ed05cd7e4c5d1c64b3d5b84059efe0a52629c94a5e", "0f9b3818243f9e6c06b7d449f5cfdd9d7de78d037dccb9cf11e1fb4379a42297", "1afc71c43023d4a7af470c7bd53c57f899eb99ed445431ff8d68e6343abb44cf", "064a130efaacbb317e734b4d7d3d8dfc135bb379b64aca1fad1ff54a60e426c6"), ("24bd8837456bbedb3a8a2b2652c30c7881c74a9e5672eddcffa44b53bab554fa", "1a85dabf4310b4250aa351aefac750fa5e90c44f1c4298819b686c7b4ef35edb", "0b99d0adf4f9e62dd170a53a1f40797a2c5dbb9a30a3a6ba4a306470b9c1190a", "2ff806f4b63bd8cdc718b884a070ab1a7bb29d93126752371b3f0821d9355ec1"), ("10c0967f0ed408a662da48d9c92d784696e174c286979139b00e87b8501c349f", "25c65ec8ee3a5eccbebf571a1ed8b3181200f75b73964e4d50cc23428409bc9e", "229f2e12ed38cf5bf76aca32386feffac7c3acd3813b52ac61e55c7e6795e3c7", "262f28bd2ab66d2eee74059002127757c28d431b23b41cbc7b46afc042083fa4"), ("216a72e5a954f737ab1d11ab265352f7f57f2177206093529be777434701d253", "1277b052dbd4565c23c0ba15f314d036d1ea2488685b4222e6dd326c497a9959", "225d7e73cb5faa54e9e4ff77616bfc5240800df9b23e6ca61484bf6eaf93d59e", "27f7e51733ec20421ca8cff42f98bc34bbc172d1eb12b7f44c7dc401f083c485"), ("2a6588bc237bb129753ba28ffefaaf2f3f24363d98a59bdec519c532bbe6dd28", "2c2e2bc73298d5cae35c51909d91cff4a210c025ed8c915ee4e504cf8e982356", "0a0ab889156c896a04efe48c14bc651fe88873a831ce79e8d4382113628a3dc9", "17be811818a8ccf030684051c8afc6431f9f8721e0675919f9735b22e4ed80f4"), ("1b876cd24f96067a408c2e6978e2850b295d3f0d693f44628d14e5b2e3ec1b98", "3008df72e3282c6d879e0a46346c91625e65b6900c08254f52e0845dc52ab451", "240dac9444c8bc9eb1a52ab42dde3ffd8d5f0cbf0bfc67c3ca21ff0d77e47a2c", "0a08f811a712716a6bbf58c9e9135be96687f9e3a1ce72cc198e5982ac43a754"), ("01805b7c091c3d6fb5447b2f1398a7cf106e8c26e0dd3de9a4c511256b30e559", "217d82c66247bb0563f2095a1a42db4df42c6df7be582b0b68bc3a059fa9dce8", "06600161790c0b314ba3c5f07f588bee978fe3989b4622aa83820be3a0dde403", "011a6d49dcfe17cffb72ad990b71ce45f54b5c03e58be5bc77f44960062a3309"), ("25c5a78a2741311c915a5e58c4503aa77836658e018bfb50c6343ef00f7be5c3", "184418311b6ece774be254c3ed9f9c3aa9e9f3901ddfee02c362073a1678e1bd", "2e1cd715703ea09caae6d3a847d88714af4925bebeb0b692202eaad7a4d79af7", "1e7f91c0a99ce624941dde0c524f22716760ddcd15e954ada608a464cb6574a4"), ("2e072f614178a5aced25a6d74c114ac9c7ce0b80a87a573fc30bcc7b301f97c0", "04e7ce3325770d025a8cb83f842776ae91ab1a50e2e7105f0585455adf23cdcd", "0541d516cf3045286ff02808e0f4e97bcebf194fc303c69c5da89839865a64ab", "1449f2f5de12f64fb0afb8005517080e92566b2fb9b5ec320159e5640cbfc5c8"), ("23bc9a4ebad040fcff3640e46a23772dc454fd7668eabad9ed186748a16fc711", "21687a7607b29beaa7b2f066f293f8e7bb86f40b376c7f7ce63e7b23ef211c2f", "2545e008d71438cf55f4c3cf3ea5056b3ec72b1c913cbb89edd1dacd7119a388", "0076ed33cd7b62f412eac014f2041c4ed4cb9f84d352a86f0a66a008fa82f027"), ("1f944f7eb0d684de8a978f84e811e6a76b1f20e394629a05b509196f8a0f5b8b", "170ad36565ce196b73fa224711e7eef278c54bd98dc44aedee10c7caea8dfb4b", "04abc843b9e7044135a7076bde570f13e1103b6fa63265145da42e309fd039c5", "24e366305b5a70727205f99a69d86294681accc966f0eef0f0439bc2c4ff2b9d"), ("0717357ebc40e9483c2bb57740d9085dc143faecbab60b19ff35dd9871f9e0f2", "06e692c1952623a5d62cd83e25f92f6f74c081806226c5bb030f82e7b5d69387", "149f6eb06952f04d335ecac9783f7a0f3df096b657f433a6f59fd14de542557f", "27b97e57774e5c7608c66e0801da56ef6eeab5a777579103c12eb01a999a2957"), ("2f73fbd314334db8b24f511cecd10fc55893ad114411773aac3a3d81110faf0a", "2cda5cd1125b280a18e964fa7bd4976799f749adf750c954722cb3319a82f14e", "1e580d7e4d93133ae4e05684318cd43d5d160181843822b54119da2409c5996a", "1d6dd279577290101b510af4c3132e4885ff796ddfc2179d6d17d16dcc3e750c"), ("2817635a73d68dcefdb3d5a8da1118497a2a638dbb87f877d69362b793f6a9e3", "22bcf5ef01588e8ff5cbf9221b9f90e697a1dcbb49aac0d420d91c591da8953b", "213555291a6ce7bdde330fd5de745991f4b834e6314bf5d21da46436ac3f18d7", "065aa96e091f9f4940ec79fc4300156e97b910cbb713b8ef37a3f3f10037b6ef"), ("2e3e1aa9d79f1a0d54b61d2c1aba8a8500ccdfb5b6a4e1a547cafc7c029e2e58", "23bcc433cbf9bbb09372ed1f5057384f5bc03d00f55244567aab06e340c5d570", "1bb26598eebf0fa803e7624296ef0e2f36d042993b4358fd89887b9bca406ef0", "01c122871cc7034785c7d09e2956ef5d7565435bf3432f335c6c1f0058bdf020"), ("286d95ac5e4d741e3b9e258e8378262fc45acc17b3291046072ebabca1e32a48", "1387ef186c911ba8584cb366708dd6a2e9c792ebebb8ccfee78fd7fe38007f3e", "29695167defac35c3977e326765fd60847cc6878cefe7a875e52cc407a39e7a4", "16f9a6276484b8a6fbbdb2771fdb5b0d803e8bb81d36c56d8a08090c2df7cb68"), ("038e80bf0c08fdb8839c5ee11f5a480a20f8cee09d51affa6dd9a28d9aab7031", "010c2ba8be336dbd56f6c6acdb8c4aaafdfb41da78b640f08530e7ef6e65d71a", "0d34ecc7c6b08191f08c582ac36b73137095e45f3633c7d85a6ba5c7bab37655", "29f2ad1481772b526d9a20d90da68835cfec923f0d009a5d16eeac2ea4fb6180"), ("2c6378daa0b1442c8b4d883eaa783df640cd8db135bca665a3c1aba36abb214b", "07c24d3e184e9ba2ccd62e162168349fab347ba971023a66df7c90b1dd42b422", "04d30410ef99333072e106063b570ab84ecd497819ca771ded009768fb1edadf", "01131334efbb8f716c35084731f5d04e5da7d7e5c54f2e75fc95f7988ff8baa7"), ("2a00904be8d77342ae1488baef60e2d76c1048f11374afa651fe0ebdabb7c4f4", "0bef42f9d2df9defa49ed252eeb0856b08a563eae3b247f68e1549d585f53ca1", "2e7a09948a409086888e06441666a9932cbb08e67f28047a8f509823163d427b", "0a064948e65ca37d1dba63213947e2dd314fee7f0bcd2ac067b59ba009be128b"), ("212f53f039a35bc7f96f2ed24a5bf0cfa57c703064f17cf5f41d693e9a12149d", "2c0d54468186ccd6b765e44e47e931f8ef66c35d39e946589643c3f1225b325b", "07d8e32fc71c373dc7f11c0ac1184c695872209c4e3a18bf1085eb8de7694675", "040d845bcd2a03c070ed8e21dddc04de4687945b794df85532e95ae4d20c89d9"), ("13772d679aea7d9fe2e9829d7c07451ab98ecb1b949e783113bf8c622a8502dc", "1d3b3416290989b622d4fd9dbc8cf23146842322a08c325e981fa034509bc961", "208138d7cd92dc453deb531f166d0e51fa5e99b9fc2222a024e1e07c8c1424c2", "11e97876ff59b0b8b3968b5b6791afc05c36e7ef23d681965d502965bfc271d4"), ("019482cda57a8a67a53597c8dfc930f043ca84e5ff59c35424bfd58b7e3b78bc", "2385b996f03ac649450d9311ce56010ddf604c314d4ed314ee82e268ed2b6443", "21e7dc3ca8e9fb1a230a2d68cbf12f12e462c3d1e753b170f44dfd903dc6e49c", "08d661a52cf7ec0897e8c0c9a618cf18581aa55e8fcd313518a462f0cf4324e3"), ("0af80a7db94dbeb9fcae6422202c6b33e8df1b7159d01e2108493831e057fbb7", "174e9d9f5fb1ef00a70f433fce6d24eb1c8561c437d7d3f6334aab8990c984b5", "18123382b8fcaca8c69ba32a15e45f6b01bfe149068bb45ec701e3b38877e422", "0d641923dc22b215008cb28f924e0b6f74d2719b352fd82edd018a2407e7b856"), ("0b952802f428dbae6a0511a825e74680c362980cccb315a12d49afa0ae6a6b91", "030690c6fc771c79f8b878f95de7911238044797a48c738e5d2bd9c793c0d5fc", "245fe1146dd83d383b3a4c3a80728d0de950a482b3f919bb7a45291179af0871", "2e2a1cc6bb298348ee6d91a3b44718c54897e5d7f7192bff59b806e6b7c57d25"), ("10ea4362759ed2bde3e68b9f65cb8a2f07501bbbfef91ced96d8c4e5709967fd", "170c92961e089cce5f7eaac1eea5c35939f32dbbbdfaf093e3d39266f78f0229", "069d229a980edd8ee51637f47f4ec7e797a3f4206e347943ac0babcbf1fe1c57", "0cdcdebd12b86f9d3e6d365cc086fd22f94d58391213ebc4fbe2326d45d6d86c"), ("2042ce1fa82d5e7958cd7707a35de0a890eef9ecfd50c23db4d3060b43b7d40e", "1e3d6a5f2bbb789f29eb112df22962fe777090e634b2a30aafcbc9802d1311f8", "1ca53251d2a3daf86b95770383f6d09d01bc9f358549a9b7eae75d13fc1a5f8a", "26e4271c53810337b831521eef466c001c30457aee80ca50cf706e0701e62099"), ("0fa04c465d8e3ade39e32a415cdb51e64bc8977e6cd668c0b1aa617f275b5e1b", "2c8a296d97463a0cf03220718ea283d7ae92a6fc2a4ab8635b19251ec6c2d553", "02d8f5e5c492fdb52e6a3f2cc07f15e6108c3e668f7577516e59be41a7ef40f0", "00a5c95d467d9ddcc03d8903d703f7a6ca8463bb6d05e49c0892624a1e94e6e6"), ("226c6576ce08a90d35bded6325a4aa06d06a0b6e2b7a8e61f929bc1300cd921f", "291b5cefb80b9e02d34b6b7c740f503e0eb212e23295e2754b5ecf9a31fddf1b", "2ff3c1868873cedc52bf695910582aa10fa0a095bf1442652d8dda2a5394452e", "028da423ce34527fba91c792bf614ce07597afe0b2d40fa520684d869f90545b"), ("1ec601c78eb1176c6563e661697c1e1ca9929b9bdc427b2ecf08840a19699dce", "25c81e2af4cd2b34dbae5eda595019fc23d83a5b1ad131c29b4c8953c9ea7086", "023afaa53f34d83acc32af3ce30d3d1c991ef9a4a134c5e311c57eddb4e02de3", "0bbc94ba4a92b82e4ea6cba2907db67bc76a790beecd095f0ea45e79b09c5738"), ("24b42bd8c4f22b844328344b82a49415b9c40dd6b482d55f5284c7e14728c81a", "162cc77ae1120e42d03ef72238ce02366f32973ba2c5d7d320386a3bb2645d1b", "0182ec01309943daf32f807b30844ec569b6eb2fc5b4715c17374f10137ab189", "240fd018ba5c3ddf0e3375f939371685c49cd210d7119ad7fa6ecb0e5a8a2d10"), ("0dae7d131b06a8c359f0c57816e992f39bd4ee642ad5514e1150ed42cd84cfc9", "2a25f0ad8915e67f144bd8544cbcad3c907fc15eab1b00e0e68c6db3cc0bec4e", "1aff455f5f6e3783a60f2816c502030d80d7533ae6176cfcb7ada9baf389391b", "2b38a428748ac1b8687405504dfef490fa5f73e67192da16c1fd6c9874882e2e"), ("25002f8be3dc3d4a08ad963786530e2fea2d85299970bcabf98c716d4181d48e", "1a675e260657901adeb15655dc38f235e5489dbac689a8694def57ed27b05bfe", "02d7d7dc05655ce51770197ce7ec13a04a41fec151e9df3a196aa67673846ff8", "22b603fdb88a8257628fb4e6211e3622a5e1d2fcf8ee3d4287e79860e6e2c969"), ("097f87ca76936722463c83e8446dea977b63dabfc24ba6c84c9f772e91588856", "0c7d9508568683faad346daebea49be606f6994fca90a26225af1393d5e76cf1", "18a9f7a1312b26dfe104efc0c22e8764f6a727ecd74bbcb5e23f9840f0fffdfb", "0827d4597fb25901e042a6c0a4f6386fc8e619c1980dc0d715ad6b86b672bea7"), ("1627828d3e0f46d7bf1f2ea89e279420f6ec2ea2aee695fa06497b340325a0c5", "1845e0a8f6779f86fed623e4e2f2913b162bff05537d0f5206e71097890b36d9", "18223cea83cc07644b88f7aab926de276352ff0655fee2bfc4546831329badb8", "0b9b9d88ca475c2b6da797df2dfb8f211d961ea05d06253a0f3fb5aad8d28a12"), ("13b199c5a1187938738789ad6f4a48b2fad7a3c0676e9aa7818754d52de7c72c", "19bb9bc2df06226f167ee3637e7199c8060dbd2d7d542c69d5f90c21fddf399f", "18dab8f8f2753e26d3d64c097f4cde03a90d80f24698323ad2175152761373d3", "230493fcf7b756869a910f2ef9d1ae6c4152903fe083eb17b11bbd71789f60e4"), ("07942770bd8ee039de8dd002f941e18f7493771cf75c8810522375b6f518355f", "11b2024419fb0b1ff24805c20222a9a58fec99ec0442b48de9b475fca9ed253e", "22b610837d7cc1dbecba00e75cb7b0de12db7ee7ccf771bb0391292d24929e66", "019f3aeb17b1ba965c36c21e702ec0fa8f24e1e237f35c3b45d037120f3032f9"), ("0e5458854d0a362a8a6ffb6a67a4e0fd56244ca59b29f1b814671c3fbd2df205", "1681057e67cedfb5c01e0a3a0381ccc39b9690999cccc4a576a76ec33fd57a61", "0d3d414438264177caca32ed138532a2617588a7f2a97cb16beaa772e278856f", "082ae6cfdb9f131ff4edf6abb0bf5069b0ce09897760466a472dbe8ffe3bc3ed"), ("088ce681aef52b983119d7b0bc5575d96d069636f9d9e791c03b4050a487e536", "091e9a4196f9801f10d46093c551590cd89cabbe9383b786fb289880d1551205", "20aa3d60494e307dd1a5f5142b382dcc26843f43a1428113a051cb3f41df6588", "2109ee1dd6938020d6eb41ecd2b48713448db4e849d85b9b8254db2366d9f7b3"), ("1e42c321aa32b54d2de987ea8dbbcfe4828052489f0263909a49ad11e00c8b10", "2cc1c013a567e8fb2d403cd7de431945c25de47655fbf8e53c4403667ba88305", "1a9064cf935a2df659b75348afe6d3c6192f502eb691442128fb04f49e5cabb9", "0afae925bacd3ca1f2bfbbc550c4b8a8938b6e2643c9ec9813c40156a17cab4b"), ("1d8214732be99f5762d6bf6c7566d6c38b3ebe5becffa69e82a65e1272f7cac3", "07ddf6e1b70ea9d12f2b478dae5606b34c086ad053260432e5f0eb349f954191", "2bd85619a9f69e26f3c3114d122133404bf82a8d84de2ffa4333bd4649c52683", "0e0991552ff29f784691137482629b39a34570cc5f99ff8d417f5f6ef7a5358c"), ("2c4571f991c692524a2afd87fd6e219ec81064103dbf1fea40268443f351a31b", "0a0808dec27e3c89e75824899dcc5aa46c6903c044c4af10322ca3878d46913d", "2201a04f0c176ef64b10a1327ca623cd105bc3191e31e8713c7d1d971771b1ba", "03b801e7f3bc915cd9c471a6da280a57b149906e1401b78e8bd9f6898ddb11ab"), ("04504c965ef66cdb56cb12cf50fdd9f458c40f0cc98a8e679efa6ccac9ee9711", "30086e35b8bb3417a03b86b21b0357217b78697fd40ec80a7735ef9412723b6d", "067b59b10db02afe0daf7e07d2afb42ddb53be4c77fd1d1f217052458cec764f", "2530f8f30f7acb70ec942ab40298809a79964e9457ca53ef79ca0cb39ed75107"), ("25d57d733fb181483843fff6bed999fcd9d6572f699045c793af026cb46b2909", "22b2dde35fc5a9da1dc403f65e17d95fe065ae399a4621613e1e310cf415c812", "2fc46b5f88fdfd4fec2a0aa7134d2bd82cf3ed44732b94978cb44564aaf9d69a", "25e9a6ff584c0eee67adbe56bddb26b6bc2f09a8c82cdf041ea331fd259bfe86"), ("07df3189ce835a1c93e1220f28855d2aab5ae8d8e27eb2f8d1440c756ea77058", "278c75f426182338db0da8d1afc352d8181e32e22107e94d2d83dacc493fec31", "2e0a0c6d6e362a4a3e0dd82abcc5d162c440e2858558dd0a15bf3000845a5b08", "047512ac264d6cb18633715b76a7af08f13b7ec3e92306c6f655c81aae0ccadc"), ("0f40c12711f5c4391be187fa3b934f012fecbf39297cd500cd7ee26fa8c219cb", "0572e8ce923e2856790e06c86ee572767228de1974f3c105310cf788d748c7e9", "2cb646d85c1081659fa074c2683c72f292610a14ed3333fed9820ce300af101b", "3010cdc6ee2a83e0b7af7f26934934880e5db6c23277bf0c00d25038ce9c84ee"), ("17fea77d137731e8d43fa2c205ec853a4be78603ec79adcd63eb92fdb73a14a1", "26d0cb00f4ffa59004c8cbc0e87198d08b51a716d77501f1cdb4488b76898956", "0fd6b02ffe2ffb0641cdc3aa2263e62ad0ff318826cc6844cbfd9331064625b5", "093adb9dfb1527e71160880472e2fe403bd4b8400cedfcf4406a989e87caf8fa"), ("1279570b07370410fe7fd63b33a86032d95df113b51c0f3961755876ffc50725", "140698d850be462c0128166b428f12aea7dc9977c1488eca9dac906f856ce418", "233ff06a4c386e10bdb5a7406a3ceecbdeeb2c5f67ccf959115d7bd89f9a2569", "220ac2279071edb155a9e0bbf90b9104041a92809455e6b1fa58faf9817377b2"), ("197db1fd6162092d2eebdae8883c8cb461113713012d31bf71644b4cd6bddcfc", "1ffbe3d86848f14a1e9ecaabd7aded452221a98168b22465f287b59c10004aa1", "2b2f37e118d959b4c103477982e2b1b80452a5bdffc4ac1da64925fe16dfa382", "21851044bdbf21dc250e7685eee6a824c6b860f81699ca10fd720afc4aa71673"), ("2b7c8946b53c5e72eb46901ee09e0e2c83e3aec2813aee0025156d907c4fdff4", "25437ac46c6269b68d559c225d6ea886b2de1e3617a466dfc9722c457e6f0388", "03ee12fdec46a25f7798b0267108ebad9fde67c2375716a694623b4908925b42", "086a019c9420e1b28d19fab02e5fe23fc941901cd186feae53a3e0e7044728a6"), ("0c68ada0666d88054a9fd5cc13a45d81f2d6c4e230eb665bfe797c39fd647bdf", "0f9411fa5ee3253f5f3eb05a3d9fc2eb1ee7727e1cdaf4db169b7ab716a08e13", "0df82f47b51718a26926467957e8ffded588232927d69c0bd3259415995ee43c", "23f6c357e9d2b27ba913f5a54760866adfda14bd18c7692e93f2965014841efb"), ("0ee532a9fe0ff119e1e44e0cb39d8f1017cc8cd5c600d48c2b95e4baa1e5121e", "005a05269959b125cbcc76258d1948eacf52ca2b65c5791629e60d6c6e515ca8", "07f62a677fc95a0cc4b5f0437a8352866475f3eb23d7a11efda9ca7ac4d3e62f", "0f6c33dcc103fe40e434e00df68a15d1e797f3f62b80bfec543cecfdbd1ad693"), ("0be90c003c34240c72d0a665eb67e35c324a448be0044b8d81e93624ad4b93ec", "2204015a587ccade75f7f238cdf6b0bc1ba28900f29ca593b9d462397c1acc0a", "27159ebc14609ec9db6fe79d9c53752da5772caf827e86737b464da3a977c997", "141aa85a6076217693db992cd524037d46a327ac4d734642bc1322a73ede32cd"), ("184a25a33da57a894dedfde582cd62a2839a58a0fe94b0d9afe4ca564d14c746", "24858d82a50b5e5118bb326c508404780604cda421a92cf93772c65787ba1710", "2892f6d0e2df53e0c4cfe338cf8426d297c8addd79f0764bd9bbca22838ac8fa", "2facc1e99b0b34f79478e2532128e69eff4098787854206bddddbf5b6a9ac24f"), ("0a6ff331310b9e5df7c04e31ae39c6cbac4525e610a4b3ee4f2fe376954fa351", "1d37946777fe39b2ef6a219918b23d67d0b84a1762780ba0dadb1c74f5b03706", "1389ee8b6ca86f0d9e6dde16691fe9fe0e964a0be634b7f23ea8fa452e4be21a", "2da7a52031b3ad01db5712a211b24d91b39d861b3a912c5877d1b6b9384e17ff"), ("2b9d8d4fd307e5a0a0255143dd553422fc484b3f2f25c3b2bb79c38eb19c66f8", "043bb55c59f7d31cf0fbfcd6948b06ae897d683b1a972f3f037aabcbe7bec434", "1d8187d97fc2e261c68db41d6ef962800a07ae2d27c5baa919ae48a0fdb9be5e", "03bb025a642e960fe633f29272f080ed0e9140fe62e90c3d8115ff310743cca0"), ("0e8189bb26e367184f5e2a55379c7ac08b1e2323648a7b6937535ac728fc34be", "2b8b44aa4cef99a6034259acaed0fe17954478de442c68fd8a0ac2c360074cc8", "2ab01756e072c1df5c5fb21d4db96bbc586d4e20027d79c781d03ac6bcf8f487", "17416fcd0e78458973526a26b30217bf35bcf26dc6f6e1230845eb1bbdd287a8"), ("04b0ab3fd786454ef3569e56412db65afcdb902e7ca0cd31a7d38768ac4d8d5b", "0affb4b6d77d5d8f8cb191a8258d464e472fccb52ee4a6af02f85b3eecf663bc", "19f5d49f4db431d762532b0ed794f9e232803cbf272366fe69abcca8530ffdf2", "26c5d1a5690ac249ebb25704e99a5481da49411891bd19d0f10e5bfa4e6daadf"), ("1fa3f89829c310cb5ab32f3c6ee68739b9eabfc86a87d36aa216bf294f8a743e", "0518c8354f3ea0cf0838292cb1807f1a883d4c258908b62fa8b5af3c739828df", "11cc49adba626d388a87a57d0597d57ac4092053250657c4c2ae1bd6268fceb9", "1e322d611c696ebc53d93ad54580419785ff97b6e0019c7a8508a705319e4f57"), ("135fdbfb9b16dbabfaf0c9ac584b556fb6175518a5d429ff1abd0737fd9bc24e", "11429bb30875075fe829cc0687cc201011da69c75afb037ae048c8c05b6a2f8e", "01db889900e8c74affbd893be2f1ed073a3e173ba0a36a94b63cb91bbfb617c7", "0329f4f7125ef83d8ca9827a41cca650a51ac9051f2ee225691e4e8f9eef0588"), ("2ef34efee459da5daaac22b6c4e7b84f65f6064f47284e5f4de13a98cee7cb88", "29058cd7d94fd8f74ee550b29a6b4613974e8c094e88cc43635fe567cc994536", "0d896cf69219a525524b7d64483b00538f78d69c6a64d41c67a2b05b9a8ac724", "03093bc89da632665a9758533cbf373c3102b4a7940824f04a56228d50379ecd"), ("18fb0145f87a73a3326745a5be73ff44e02a3f87fe5a58472249198c6c37b9d7", "00ab0132c412976bfb8c28c3a2e0c6aa19d3aac9108eb32674d44eb6a81f17d5", "12481dd3cdb2a56f096cdcd5f08a8ae7376a48d51ab72672d253295fe082e929", "1659a0d59d59710d01e541ef8cbf54b1ab4c3f8b91a3ed43a21876aa2a611108"), ("126b2e1b9d8e699855359804898575cb8ea9cb883cdf220b00fc1091f2f92ded", "2c0372b3dd2dc890f8f30a1dd8234b0dd2e6e01befafdadc50d0cc84f5297f7c", "1f1133726e6441be6b97730bfb58363ab8f8fa3a539f2d61a513f58e284474e5", "04b302a6a857b61b32bd15782ebecd8e765ebd39a165e42329bc653dc8335efd"), ("2b9df9e01a54ab249bae63e2e94f975289c2f4de033b5f24eb168b6097d8f7b3", "0dcdee35db57e1ac8ecab498c1b33a83e9ce3fd593693028419bc9729813da82", "045b7d9fd8dcd8cad8205f3a73e7c50f2edc3f344ee3c942053a3e1fd28fe55e", "050b691eed6719edbd847c9472af17a9d189792fa8696c5a0687ac39e8dd194d"), ("13c4c978dd490a4b407368f9dd3cf13d3b251c44a0d7d31db44cb9d0eebbdbf7", "0525a426dcf713b62dfa1a2a926ebd8e520cabc8f72def2399279deeeb992e15", "2f4fbc339ca48828d6984db8886a2a03022ebc39c3cf7dc92d5ac5b16af4619f", "2ae88924564f8212fea8367c1a33076cc5651fbb1f9ede0ddf6796d99baf1669"), ("100f6ba71215206c8bba6145cbb3e61673d5687e57b46ce069aa45b540f82343", "1be595d1580c001967c0a81f4eafdf510d219f659637cbc3198491e6fcae6e49", "1d89d8a83b152cd13c14aa370754d830a257dc30b9c8affa4c8f49315354d90b", "1edc5abf72dadc3d00eeecf566496309e6f18cd77cb37dfed3f32e92d379850a"), ("10d57f5e3e481cfc78d69bde5d6b6147112ae435910132fcd7033ac694122b3d", "1db53478decd6d2f2409496b04d8f760ed43139b5db05c8e149dd2cec8d1bf72", "172b0f897da1182993108fb84f5d253dc8817bc38ce616df633bed01bf545501", "1cd95118f67efc06a39affd2ba1a3b7063eec90cf214610e9e426ea9af3ed886"), ("1efb978ce19c1e686fb73fc5835e4427b3db3a82e959dceb1f156aa5bf45978d", "0ae1b24ae16983bc0535a03284723350956130adac358ffee278f6c9463564fc", "0eb7b61527da7ff9be25f62e87308b401232f8c377ecc2fb402e6cb49816dce4", "0a04c2e56b4541c2ac994ee27ef69de04d62119e870bb45ce9d19fde30d7bd2f"), ("0fc9569ac35d9237d6f251941a7ed6b52ee79b9496e3736bdd09f9ef881cb9f9", "0238fa84a948729c8f06e2db2359e5ae610252fce956edb327ac21ebe0a59c3a", "305b532799a196891e630469a00724673f8e767f3c6997d15969e9ccdfec0633", "2798de6f3b893baad0c031bddb9b427b7f04c2308e6a518151ea6a797cf09523"), ("086579b580758dcd340cb7d0c1675e63a9daf7bca72137c5a41bbe2e6a2178da", "08fee320f310e278523b75e735a61fa563628bc8167d78775a57318361d49947", "20466cd8b64f835659bea5505885f9f32721d67015df99c7b32b7b1e8fe76a8d", "1c6681eaa62a43674349c5dff7dc3bca04db502108733498fe17b633e53d30d3"), ("280c4f775c55f22f1a34a264c6a1477f1d6e09da22163fd5aa3bc3bfce4f2680", "30204e83ea2627dfe795c282157479d2f97c02575c5a39fcb6a2b91430c46b14", "248afb56f8d4ff86a9ab1b7c14bbd56d66a63447eb5acbc71e84dfef2e3a4d3e", "2c551138452a433c7b3a9e24d6598f02870246c0024aa59fbac1a5df8336da0d"), ("0d42bf2cc84c6bcbecad1b93fa872f6425b02523c8efdb151e054e1c9b2c4d0b", "031b78759913bf32a781c4b0822b6c59fd897794158b70edc727200181b39f96", "0f7f0c65357b8bdff1b2a9cb7e272095f1053916821caf7b6e1bd0024fafbc14", "17236a9d7e0c849c9bca50b8b5b0d5031eb4ebece5acba54cad5bb5cfa47429b"), ("0eea7d05a521e35895be7d528005785fe35b79d3c470767ba8c1e37a2f3fcb97", "2c4159894d9f815e20a4f4c768ee1b514480e323ce2d7a6be653835b488042de", "2fd17656b24939fc4f765f0c409ffe49a0512997f3fc17614a8f6904e5c28439", "216cfbf7655d4309913cc3f773d11a2daf3c93a5fbfdb3036a532a7e4f6a31e5"), ("0ebd27f39d18cd617801dcc93cd3c91938f4ceda6898275b2b20fc1ed2bf016b", "2aea7586468e0544776b330b8cf78bc83fc40a7f8ba5b18a150e44649014bfe8", "15aaac05eeb4d6840a614fd7846634a1c4627733a93cd0c632d75c8d732ada7f", "19171b889a92e9addcc9b9bbcd5360049a154cd2bb52293374c8dab07d3c54c9"), ("197647f9fafa94d3a375f2784a024c65e24c65273bad61ff28b9b323ef06fe6d", "0145ca88f5618efd4420e12099978c9e7fbd08e0913dd5182b96eb7bfe162872", "1d1e1e4f04239d4526dc348e48956e3509cfca0912982860bec62674828b994a", "0a2553de67e0a024e7a7fcfea959a354d27a73e7b6a93b5919ec6f7bf6fc30b1"), ("0cda8af7aa50233cc503c7f8f3b5b7356442cc5ec2bf9cd91cc696ba0e0ed5a1", "1e71f355a13305143c0d2ecbc909635a1e1219358acef3727304646bef9cf441", "07c64f7206f348decd316587b7f5fb0c9fb48a4b798a56958bd1fe0aa98bfdbc", "2a97645a40148ebdd836e2976949d9f7e89b507dc2f381252f90158278a071f0"), ("0a30b8b9e93f6c1229e4f465a23ce7952b0bf520908d6d9906f436747dd5f1c6", "0f93f24f9189bbe82d3b6fc718863c0f37c3286c4ce043d2d35cc7f9c1a4e8e3", "0643b3c7daefd6e49b8c23b78d098742dbd240ec0151acb9e49bc6f1280b69fd", "172aec43da03fde63e47f9219eabab796d7dee2ecec01d66e0d60c20a05f8d40"), ("26ce14340c084cf501e8ba789e6173d53ea1133b15782e7e81ad34887b6bb546", "0c373f5e34f665890a64522263da709758c42cd2bc80ec149a663dad14b961cd", "08624c4f0b1000f9b7f3d8d804bbcbb243f5c4e9048fac205e7ae369618336bb", "079b17e0a6ee07e43c2e031a8df0d9491e489ccca07c9e919ce4a9fe51a18af6"), ("1ca35fa08d0817ab7696cb721b02a6d9bfa4244c330abdb2dd40819788dbf0d7", "134777607e6ba101bf3ce190620a9927dcea9a4e3245a9c83014cd927723c8bc", "098c02e554f548895670fb6f2f26eb8379f42eb9440d2aa09602e3dd915d5d56", "0381cdfad9f2f1252f807bade64507cd7f8ed8b2184018d43de7e20d75d77a31"), ("22d3435e3c77b6cd83a78d8985077d4ffb6adbcfccb94a1a71278641f982bc00", "0f3fbd055ba5c18d4c3bf6ef7170048b5cc222890a5a5dd666f5be6c53b8ee96", "282f6bf0dd0c099cc4fc69df78db874a3d2a99e32f5c9f45eba5cc218526520e", "1b8d65095beddee4027ee117053935f8e14af1a7a80ce90a5bfe8cb7493a8dc0"), ("17863b6d76a799433422482c395f304989bf21fb000c9fc200ab44dd83515954", "2d726ae080c0f0b8bd202567ea9e64d7045474ad8bfa916632bc5ebf2bbd2607", "2db8048221768e556841d1ca87aed96febe4093a3d0878368caf74e205e547f1", "271e95374f8c576ec46455a1f991082d8dfade424f3f3e10df96012ab6b5999b"), ("256504efa278fc55b8d241dbf0134ae90f061309b21cbbc9720c05ef55db722f", "0e339c593634296ad3a420059d44e707f9e359bec5a2d1f42b00622fb82caf1d", "1e0322312eb0222959a1a859cc6f6db4b0348c2b4aab95f6858bbfe7969b64e7", "20b2804e35ae9ba5f1f2150b30bb5af81e947536a4f1afaed1de93f6b4de762d"), ("1f5d66263c760adecefe0a6901a2cf1b8af2f4aa63f43e7f2f278b606f28d742", "18c4c264a91571560977d2b6bd1e3ea8b6a3ae3574f61fcf4ec008c8f92ca4ed", "203e23fad471fcbd58fecbfe0f7c84263ab22bd48089c07d1db8228fe9b3c719", "22adf32069b89f5719a9f673ca83a3f6fe474412ab044ccb2e84535e06192e62"), ("039909a11e80adb318ea1769e8de223754bc9c264b638a35ba8d842aa8328bb3", "0edfc3f26dc6d4e927597b7ea4ee3b919bdbea9be6868ed57a99bcf8345dccfc", "0ebca8945fd8d9e0e498480b30325f00434e2d16a4efffab4efd21e5a41408bc", "0d787c296250ada36c54a95953ef102da211ee4a56ba670efd9ba1773faf3aaf"), ("2797cd18b7f5306cbdac4d71bb8c6cff3a54dd883a2cca792948eb8a2e8d370a", "014a85d35cc3f840ee416f360c0a332aeab6ae273cc0d362c0c4ca6c1e56577e", "09e0389ad14de6bf4818fef9d014eab48f16f6247028dfb536e9da8148b2f3a1", "20659645ebd5e241f476876d1244c1bd606621f7c0021fa7b312d91f7c82aa71"), ("06e51d0b2a90950f097c16eecb5fd98f7d097fabe0a8f13f284f113251a1f709", "27ab3b8921c798408a50a90059deffc29b00ae07ae613a3ef7c3e7406eae4757", "175bd5aa8ca0e81469b27ebdf5b5aa7db1d6197e2460c227b168789047e4e6ff", "116d561d6248b6f5661ff346140bc2e1e832447cffeb7b673445521538584385"), ("1f52e3575503d06b7d4c7fb7e6929050db081f6cfc81d5c0a0ace3b675546eed", "0faf58c955f5203b75c84e6f55700db3bd0ccfc8caa60308636932129de2e98c", "2bd3af9aa5487d6ff22f2d49246624ab67c55c2654fcd867719ac8a38a62834d", "021dabfb428a5f9fa39ff4ab7f09defbdf27d029802c0a59d57f734d6bf46219"), ("2ef1f7c37e30fa1cef73237612e49e5fea02c380706556bea5d590b37537e95c", "29e4fb313332c9ec15cca550bf4bde318c530db977a65852ca7fd0e8998e705a", "0646451a39110fa3694631e7da3941eee281f1f9bc3b55a0004ca5a8b8255e64", "2a8de0f7e5e7c67f56378c9e826b95ce00a5cec8e56927fca074ef1d2802fe03"), ("0ea03eddea8ece89b61b2256fe051665c3b83943f196eee4f799e50220ed7eb1", "11655b8116e8ac7c8dd27453bc22e1c8a30eca194ea21cd55bf4ad59d2c606e7", "06db6256991e3214ba228013d80a304a357af9404d6e51a706c59ef1f7d1e355", "096087eb7119030f62802c43acb865bb72389e5d40c40237452b16abc8193fdd"), ("2b07f8f279a351b2c62179f6cb0483eec8e3d03fab9a4856240a1335b3b33b5a", "097e8b4530e67b29025c3b71ef8c60f3f5d79d2a7a7307b98b4e6b1517b1fd32", "1d636dfecb2a93a28172cd75d6e6de34f44ce06aa15cbf3822a0ac5636c6a8d4", "04f1035db80218be253766f96448e4f2040ea427b67ae1a6d1db16453d1c983d"), ("01a5c73d0f4f99561d31008baa44ec987ff85ea1d936b5bc2141b622dd6d42a3", "129cdeeeec28fe00764bedaa7c74c10c7067add4dacdcc4c578008ee153dabd6", "1541ef6ad4b634fcc53cea1e2ede04b40a818899708472e7b4ad55f4f373d014", "063b51416f50565e460d6c4b967047d747e21a01a6b94e051a120693db139236"), ("2f7607f5fb15a4f1eb59c48c8bcd6647720a548b41a3889a0f8ccd6b78c47b83", "0f982fb758d31fceb98bf86b10381784edf66b7e0a037caf4f4dc24e3ac1132c", "2ff27bdad22b5fe759c1265e9ad6446fe7946e8994099b6ea10dc3c72f693b8d", "14df196d73a80ce5d9b5f19a2aec03d7113c0f5e2527952d5a3022eb0ebaede1"), ("0ff575ff87e7c3227e3503b670cb160f896829c778b36da18ed46ff14c3a12ec", "229251996a25f69a6b07f99d6c66595d42178acd774fa353fb67ce6353fcc770", "2db4b3d63c75eef8c4c101e2bdfe6982a923eb360905a1c49e474f127eca184c", "12c967aa60b4fd975c003014da64bf4f3df093b55151a829a82c970dd6836133"), ("27d8a82db00866db82c31a1877dc5f3f6814e5332d093dd8b903ddad282dba70", "04ff61ba37bbf9efd85a1c678a6813c103eaa2553ee8df96b7c9e5afd677b3c8", "0af76ab1bcaaf514c24bc4365fbd5e1e07ceafa27de8e4e89870f6ba9d5543bb", "07c261582c5d4a60e9c698b621e9901a2415993817bef86a8c832cc46afbb5b9"), ("2663d7a4a69e8273c0d30a9ec510a5e419f070fb2f4e02521c2911bb4314b919", "1dfb956d440c99f4cbef83055e709e03044493ecafcf9051f307b40ad1aba936", "104e68659bfcd25167299eda6092a07496d8d1f94f6921e452820c1b0593f1c7", "2f8a111377add603c3920f828d08475860d53d0c3c012ff333c6e61b8884a4bf"), ("17cb43981540f8340ef7a559b1da0ca87e851d1fe675b6bd9caef87f2bc17041", "29500e7d5a9c69b633bdbfc1756ce99b445b7dc948e5f3f415991c681d3bacad", "216023709e353a1354e58ea0d0a00907c056bdaa4d83609631d8cca12c09ffe1", "026ee4261d7109dbcc647c7d2b75aeae85bf7ac46c594c4b700e6923d4bc0396"), ("2367a50d4232d035075f4fe93ac61f6d07f06fc5b992eb85598e08457b07bb12", "24c8c19590611871322b6a938a15dafc1c3c57ad056e11fb91f89fa32411177f", "06b68dfe08b8a7fd49b58b4b2c4872e6e40d1173d25ce59219b5522cc8449843", "1d103f5c0dff1e5d3587c3dfd07bdf2644ca542a397ca91b5f2c95ee3a3d8817"), ("027714cfc1fe5dca86b7740312a5e11d7322d62acfba076a8c69d52dbeb4db20", "1c670540b0ae611838d720586a891e70dcd8877a1e24c508513c1afaab068309", "2ef9054586bf70d55c5ed54296421c1ba9a78d520a416f61b1ba6426c8ee78be", "24699b462bf4f542df304c15d81235d4f053c4d47b5bb5708594b41fc1bc12ac"), ("23ce5ac9f4e0c4cbf252bc3d57c2c92e44b43f75c8a8448038008a117840ffd6", "2a174d29bc1ba837c509d45ce68ecd8a8ead666afcdb5bda0e59b0bed68b25b4", "1cc88eba53bfeccb8b604fc547af9f6ee80bba7997242aec1cbe0b75ed1c2124", "0263a69b44a2bf32bdf670ae6d0b7115b513a427ee93585b49565ed89c5216a4"), ("28b6a91e0098d84ffb23c218e8860c52451937c4b8175c2c1ad62a18be6910d7", "0e41e36c639166324d1c8425e501cbe1c28ec0424b3969354e540f4117665e6e", "165304fe35670f5ecfacbc2997e3b5a5c0ef4cecf701e346597012e7d6d13298", "10875cd9903663e81eb6dd33c37b407567b8412ddf3bf3d97ad45ea4b1d649a6"), ("1ab921c3a14535125bb4a26269f549d8a2c9abc301bce769e9d486ef0d205b41", "0d85c3a974a4a1c39a5b78fbd25b7a2f2698ee8d717594a5892ce3187c18bcc8", "185fa7df2e69b67416b65cd1015b1f9c5635d3ebce7e269cea7c890ac8111663", "16a01317d67587603e11239b4d1827d2ff0f39a8d3405ed48db99b93d8822312"), ("0dc1433da5d3c8b89fe5870dbc75c25395665fc7a850691374d35ffcee12961b", "0a1db83f93a8214e29f7b6379ed7bad5ba22ad901522fbde00c65096d3d78fdd", "228268d24f0d4f38e38dd8f8ed2ac91de6ccf36515ff4b6ae4c5fcd73795dad7", "23a8d91aeda1431f5308e796b24ff603fbab799319eb67c558d0b67b6921a0e8"), ("27deedc909cfa87174049d70a969d99fa2091bfd49ea1481f027e373af5b930b", "0ab16337c7f3e2c378c42d171e9c5e904cb29eebf3d0153220636fc564a11b1a", "270cd2027cade28150a21150e3880af07bc2c4969d111ddefe494be8695a9029", "12392c82db7b598dc37818966e875d6eed815ee54b845dd1a0a33c9716bd3016"), ("2d776cf71f5d207043a2b5cf2d33251112b9e2e7038112e0e2f683a388fe7450", "2f3248133bbfe5509c222f4dbafba456f604f4545ee4f8cd9aa320f79b406511", "24acb7a766b4f039b2f4d731becdde0341bbca07459d2f3e9964c55e0e32ac18", "19d045d6ef789bde35249c096167f57c4583e2405a9702c69d48bd286c17e873"), ("1ada004906b7cbc3ce3699d95a08bbb6f1501332a372a90e7be7d221afc7fafc", "2cbba0a09dcbd842da8bbee7637102bd657159da479001e541b387f0d9bad087", "236ddc6cb1211ce44889b217030b5a0afdd66c0a5267a2b257dbe5a0b0c1d6c7", "12acb9207c8411c68c6eed42b5c0d87e1a1dfaadff0c0eaa5542a64cde08a747"), ("0ae174e6d8a00e66cdd1f32d1ab79b329b8d4e1009bfb2c0cf4beaa7ed366f48", "06887f610c6c37f99292a09ab486be322c1682360d1ed049f21320996c7f7cfe", "262b63b3e5f2d6049277d665a5bde0bcbe4b6799eeac5a13fef4008881d1e0b9", "19420d06a40afb9678bdfcc992ef994144db5fd7349c42c1545f64b615aedba1"), ("1123b9382ed227766b58756f306dda3ae54f8d55b3d08d3e874ce958e84393a2", "29437ba35ac9b6e7431a4d4ba5f24826dcb112e9c89c6ec72465fc5e1907a893", "0c4b68eafe70c754153f9e14bb08ed58c59b6b855b1897c20563d554931cade0", "219240ac14737605d012f9b9b1739281570ed860acbebb7ed7a374387ac25c99"), ("18932a6c9b112d3a94c6f0535f54e6ad63fe187454a8dd9452f76c66ad60027d", "1dba4e9a852130a85433eb42e995c29bdb4dd89ba95337dcf57f852d12ede159", "160b173f3879ae4bd73dca7bacb9ceccaec781d5572fee908b8cd44385898c2a", "1f55c56027512943f601f22897979e9852bdda5f2e3db42c65c1577660b1f546"), ("0793ebf4bd3e93c71112627f985aaa73920c2cd81c6d3f269f01032763808ca9", "22b36dc63ec71251e11afab0ef5532cfc016e80dd4fac455376b2e005d4fec3a", "0da2312bc9a8d786e28308a323520003a859016f98b11dab66ca6887bb37166f", "1837ac28887310f96517cc3a89b4a4232d83cd229e653bcc55223e8dd86cb5e3"), ("0c107d12e9fc84bf197d8f38ff18e6f74be7b15b7824b0f515822f2208a3e945", "14b060dbcdf34f4dbb665d2d0ecc400a7b4cfab4618f76d6168b3a82b8fb87d9", "19ef9d973b25e9905743d408c795fadc851443b45ac990ec397e92577ebccd84", "2193d45c383751fe0ced7b6546d0d874c701cdc2cb427500c71204a851f58a1a"), ("2c30a854d21fe77be04428672bc8fe7283987c7a28c1621a0f86105a29b8928a", "08fdb2f54b171cf2af97ce04053121732c84f3a894c8b717e1c49bca06400497", "274376195acf635db34d8d4517bc9a7ef0ae511d4345d044df4bdaab1d45848f", "0b41a7fb30e7c9c4a845703c357ff2c1dd4f923c1e57e34a8b35e9adc84aa49c"), ("195bb7d78196ac710744c5195f8b2991fea11d4be695f4fa8630ab71e6164e36", "1360d3024f52d5f3ccabdd589f5de4948cac236c5c57ae94b9e8bed0342e7094", "06fcd92587c7df1a9defc672f87f8e704777c0649d858972a66e79977a2db4b8", "2b0960d2d56c88c7f8977a2d0b3411c19037453b3d1af17b0439d88466717dc1"), ("1ad34008c6f8f1c9dc86dfbc678f367b9f540bcd025f6af133cffa04a039ced2", "11ac0467a0454d1deef0531fa8d1f61663fc4ff2d102cf1928e749f214fb0ad7", "0b14db4c67eb9ec968668e02ca9b25bd3ac045af5a10e583fb378541bc09cb70", "2a148f07af6eccf17b6e3df977a6e0a303c8e4f1a57d1142c228b4e8cf53342d"), ("11209dcf466f1558aa90a7656f324b0890948fdb55165eabda2bf383721f5520", "2b1df08f16559faefa215c46cbe7acf94ff2342dfb2ce04085cf582ed2c81e57", "008ed48e3ec7967191231c0e424630c5f915c82f42922a171b86d7fa5e84a679", "15b26e5a311cdae9a07f674d0c287172a7aeaab67f490893854b61e828a8e93c"), ("2802397ab405cdb83910e44e7320d101897d0dbe06827347144f082b0eb6576e", "099ec5387049196f78971fd3a54add75db46b1b52840ccf05a29997ff176249b", "09d77ca297ce95869666284676dd98f0ad091d754ef2a1ff5e0060f343b521b5", "1e39a28cbb790568a519c1dd2ba08d6a58c3afc1b01ae78c69c71b6b80459601"), ("0f49f71c1e49cb93fe2ed512b0059a11ccdf4e1a785adbf7e185e9e4f880ff18", "26c628b789f64b90ef42318d89fe9987ca80c9815eeb84b459594b7cac477931", "1892890fb0891a56444954aec8ac43f13c941787885ef2f4a01f65a163bb0831", "2ffe5590d3efb433aaa87ba22dd4098c912ff7409c7c0d571199c1bf80181f53"), ("13dcf080a657cdf1e3985d768de39fdcbdaca799a5dffafbae86c3d8aea1206d", "0a43867a40b1d6c2e6e2b7a9ca11aa4ff8311f720c7b981579a1b7e7b06fd4ac", "2f106c9d14064282405a565e77ed097635381a1d1fbdb942a565261f3def3d84", "0b4d6a3ff4108948aa7745f1afc02c6e4c3475de37083fd008e35b3bd1891086"), ("0b54bb1294ca682f52a590e3d7c5afb91b5aeeac59a4d859fae7657551493a1d", "1e018994c4e1c30600233b4120e1728b1f018c8caa4b9f98c686511513df78c5", "2576c303d0d4e753ad11a1f1cc8447018a5c6c88e08397544e03b4b0479d4076", "1800ec5a0f2c791a1c53413d0b17242476e18e532d25d4acfba5a91bb4e7f334"), ("0546ed5d3d3bb16edce73ffc6eeef59f0362ee7df1b05aa0c476c24c0b7723a4", "2ef5081c42d2467014a8255634a48ef741fd5a168296b911bf270befb55a161a", "27a366a43e51ceb624ae2f97036c8f2c7b4f490ae11fb04397e867e8688f0aa9", "076e90d29fe3aec64f9d5de26fe6a84992552b67d185163612d6efb708ad059f"), ("1c4a926a35f131ddb2562b63ed4b72a190c8c2a288ad4594b3b090a7ed7616b5", "29c6352e1f93e566a4c033c3245844342819a5f29e662f8e7f2b075c0eba2d16", "009cceba974e639af5996f4e69f64a109fc5f9e27dedcf32ab3847d42888a22b", "2608d276b986b7fbbc9008e0efae1a4302c15dd1b0f0fdf463b00b368372d7dd"), ("0056f08a7ddcb3b0d3b4db2e21164bf51525ef28821778eeff8ba49c3acaa2df", "03eddf0c5b9cc90c3bc6442df81138d4e9f20a896dfa839a5df49bb1d46e7a16", "23af484936d56e647f37d8653d6bd7cf50b05496fa12e43d26909949d5c93aeb", "1f4c2f3bb07fb7ac94e572615aff060bc882c0b3aadd6fea94fdc1540247bb2f"), ("0bdeed106edfcf03f7dc28fa4b6d64f378adffed7c261893132c413c60b79e78", "2e79363dc28e7d7afd6e88f509aa389018a52517bd14871a70c9dbb7e5251ee8", "17f91d5aa56b68c32ff437fa334dea796dce502e100a540efefcffe8a11df4e8", "1421ddbaab0a3aba409b8774d12eebaa923fd0e90121056aee748f96da5541a7"), ("0d21ddbb23a397f55f9f88f7e9ece9d6657f15197f074aec31281eb11714ec91", "23eb593f206ea7930b32b375301c5624010367a6af5bbf638d38a0d6f67141a9", "18636832b1518ec9234ddb48cedff451335e97ad2d3ae06dedb228885cb4883f", "29e6e08a8cecaf2f4a09f118c87b7e0f497f1897053971539db04aa6139a2fbd"), ("11f944760e0261e55922809e9e7d58a1316124545086723528a7f9b6e4e389ca", "02b1790c39681a3906306222afa7b0e3e1eaa1efb4f72fd5266ebd5b22a8f41a", "296c8836eb44b27a5a1c5ef12ba287ad9b55ec8d6ebc0842ba990ea50d365bee", "119de2b720f0a40bb992583be3ccb8631155eb118e9cc202f46b78aa5d750037"), ("141331054f59c94aa29caaa6319c1515da79529e129910e6cb5678e848baeb17", "1166f6f3db53ae9afa9764c72323b62c545933aa266587b010a98451c8181b40", "1f11a6cecb5b0d7c121091dfb0451abce463799be4a416b7aa0af31f47bdceeb", "13dcc941651ee9295022a6ac24ff8b3359846abfe182fed12e3198cd2fe7a8bc"), ("13573fa2f9a7916cb72f8d8f2cf0b001e76c0196db0e4b099f9db988d5fe869c", "2a70bf045ce44e9d9c271d07fb5796a25e5ec42060ebf25ababbc4cfc198669e", "2e94f30c6d962f475ad3331831baf58d3633fa8f4bdb4a27353c7ee4547ddb87", "275627110fa0aaf6105b2fcdde1d66696a890fdba4b028c1a4228b2a2488d646"), ("03a9ffbc8d05649577abc7bfaf9a8f20aff9ff04f7b722a5dbd491afb3df0650", "2511bd11486324e114bbec48baed0e031dcd90a5a530a844218c27575d19f9b5", "259f953a752da7d935ad6794a51202541c7a29cb0a735dc91eb789c032b9616f", "1fe96861abc3e5bb7dfc0ff4e29493106943332165f45b186e6f0f8586ace5b9"), ("12f7c98e7b7e1c808191bfbb53dd18fc6d2b4f2bef808fd2865e28a7601820a5", "0fe14eb8afb0844c4ef2b9fff5c7ec7a068d1de3077d6264d48f69fa85fe6ca6", "179fb367f33ba6526df69dbc18ff7961ec83ec940ed8feb7c05592c6fd097a7d", "1b474ac6a9551b66c6557bb415db727065c92506c6a8f4702c935b7c33c701cf"), ("283951861d9c012e36e25de76cfbc150300d27d66d323eb2b270d9d0b57fbff9", "1d174bde2081b9af200bd07b2f8597fc6565f395ae0c596989bc1c13d75fd467", "1cd1f1dc5304587036304ff4d4d2c3ca641780afe77f52be03f2e3b0d2759492", "23503c5a73999e0699eb3391b322a5403c8843bd1342cf829f02db211edf8c9c"), ("0cdc3696da8ce737c5ccc724e327c755af864afe782f92302ee90a8209bdee01", "0b34cb62c1823a0196c3059753a83d52a99c4cb820e8d265e61accd0fd91c96f", "1adb306a27c33d64cfd93506dd4f7cfa3f85f4316a172a27162ba339fa0757e2", "0bda2149b28faa3ad8792c93beeb245323c8df7c3c26b1dce2a0274ea4399815"), ("1e0285383f2adeec20fc2a01cded09971a2607ca9b1bed94e3315268fd9c1ddc", "2655940037d4b756f8a0b7ed814e5aba339e27ecce47384efe5b135aaeb13bbd", "10e90d5c7758a6169982b1dfe231d0d6d860f94e1109c345b791ccb7bdd586dd", "0fa825da93ec9512ba69fa39fb0563d39e2323d58ba9ff9c88cf547a034b9483"), ("0361bf42526a09ac9adc25ae552735b079fea7e7d6b5e3c0621bc0f0b8bcfbce", "278437360f8852617518eda76dcfb73556f2766ae7b5fa77ea86659317fd9ba8", "2672da1356a6910e7ddfebc1bf4be1ed8dea7dc92cf7afb88f5b63f841388a92", "1987205b68bd5a2b2d916139d0cbb3891017e3c0389a5301f3770b7fdbe92585"), ("0705bfb8dd364855c1108d0e41c68afd514e65219f922265f316e681ce99b3d1", "16f8f764246c522a2c5e0a00185ef6dcf6250a8d35d09f07f6ba4a7044da4b4f", "15fa23fb60aaca178f2bdbed6dfc508613e3ce2c0a142a3fb52878f8232645a6", "0849a1bb2321707794916d22721771f80ffd3aa0496626dd4f0e80bb18d1f893"), ("1b943a8a7c316aa544a56f9e1123d70951350a22a8f6ab1597c25ae9652c3dfa", "238fc4c97dc5b7d9915f11ba7f0512af85b5f19b34d06fb880d0cc8845d7575d", "014bb92fb988e58f05ddcde5aa0b5c0b1f46a39c2fc09c221c330fc4a79302ef", "05dc35e971e4194c04ff12f6609f41365831a3ff68b2a98dda00673fda1bab56"), ("007aecc2ebae6d8050b3cede13c3cfbc1afef63980f1661b312ff42b22029875", "1ebdbaba0a4986c9724e5adb3a2fcbc4f5025cb74d4a2627d7a59d7d985d70a2", "2e343a29324e92e03d5420d241a2af06aad665ae4aed887e947326d69b5ad5ea", "2926a6d222bb70e2071a498c50939816c15675b3ddad4cfab0ae071700d471d4"), ("2b47f0c957259ba4e756f0487fabf6fbbbbef92ee2cc5e539242fb1c26980364", "0c68119d05796a75da966cdae814d9c425238d42951af1e761a78e3a20892739", "170a3b304465f97c680454017f155e3e85a0adc4f143fdd052985a81b8e59360", "0480eceb97b7cfcefbdf50e8a456c9784d15d89ae0b0c6493e7caa2ffadc45a4"), ("27843fcb084b91b576dbbe409cb17324b4b3a47659cb5756a12a7d78dd6ed18a", "2deb03538c218cee2485d49d06ebb3e54bbcf5a8d2bcee8d77182fd8a7c01f84", "1948a740b3a25a2a44246eee109c9c5deb8d8a9fdd2123ae0c4a4880fdef87a3", "17345c57c4f4a2106cca98f85dfbba092899a04c683e52c92c646569ff791968"), ("0ceb0b5a2140cf5e3222ea01f9b4833c76eac7750ed2e0cf04847bff2b09b68d", "1c5286713bde79a13219c515449d633b30b2db6bfe32337804ccfddf6c7216e1", "239a7f924587931728bc95413c63d9009c88ca19b302c51be26e2be0191650ec", "02235281b4c0079c48aa6cec690ae42c649c81c179e07b299d3c12671979cb3f"), ("120ef88ebd7944b71234eb6ae3830aff37d65945ddc950d1fcc2e70a775a5379", "1e1540226b4a109adc31603907f3371ed6d5fb5f732eaf7835aca2ee0f7d920a", "2ad77c89db393dad87bd82186f8789cf028603e3b8c2bf51ec89458245fb0be3", "05a0ca7056e47ed4b4c8c278a3b308e028b13423a2c9efe436f339c1e8e76fd3"), ("25a6f8dc586b97e7426bd690ff5def383a1ee0d79bc22a06c7730599561c9fde", "212ca71ed832af44fa870abddb967e931864935a3f806436983446978c798b05", "09aee97908ac98a095b4207fbee197cc539eefcb542a4e7f1125ea4a1441bbe1", "2152cbc9d9edb2602e3d53771dbb7238c0479c51fc02c9113aae7a68a4c34805"), ("2d7338531be97df84c64c7a4097434ed095eb8e4d86da9be9e198cc339760ca9", "1d446e4c6d3ca9f19992d6f3a2a2800d508c1776bfc72cc0238e8bfdc1e48bff", "0c718117397eabcd6d31ceebb9545c16e4e95768af88016f453dcb1e32e41297", "031a698f8cc578bf543bf591c4cb6e5c25fef0cd1dab1dcb56c1dfaa0250338f"), ("174c700a256d463b1b826c749056814eaac9e12608a3f71d5e4caa47b4f85b1d", "2b99e4ded531d84e60766fe5925060b90ef17d8770fda0ce4afb691672011f08", "255919732a8e7fd73e14b8d07fc779193cd22a1420683915e7c78826cebb7b39", "0dd28b97ba143e80b68f3383bdbf1e32d5be93a2ec90c8b87187cba1433eedef"), ("0924dd5adc2a36bf510adcfefbe8f08372129849174717564ca970f98082cee9", "212b3a1e734bd48ad73d6bd0e2a15de50f4138eda5ed5b63639c42a8ec8cac31", "28ef0b27662e241a98d0e547437224993633d581122f7953a9aadc7414b1a9de", "04ea3bc1c936bd0efc16330a3eae6a59ae6ad1f20f965c6a2db1015772a9cc05"), ("032d22fce3889e44b57cf8401eff9f11fceb05a098d3adc8479219cf741c5928", "2bfa35de4e8df8a43578b21fa10e445b6226cbd805f5f1e9906499253cf07ea7", "14da031882dd4d2c7b2771ae67db26bc8992bc284f88ada729b0656ca2afaa57", "256b386fdf90b229251d78acdd81c679ba02711fe05396e89faa88aaaf15a4b6"), ("24269f1252c15590227732dd5d9fe2142632c2e689f1c52a4f2aa08fb0b70389", "0eced4bea693650a820f76d554524bfb2681185eb5f78ae0449715eaac12dd41", "28cd84418422efb0c1e7b0526ce130609832dd49a3f507d75239dc876c9a9ac5", "0af5d28b3d010586cc0d448852a966d334176c6ad70d6befa0524f282c6af270"), ("2132152803568743206e795b7ddea41afb74c2c7006dca3dc372357ec65267a8", "1c0aeb1869006aa48b09f7c4f4f70c176f4ea1cde6f4d87546d516d4030a16a6", "15c2c0be1f489ff17eb352c274d5624f52f4b7d2cac121ac59c309324a11dc9c", "2b336c12d235fba5e944818f0817c7c7dbb547d0ea32a721f94115a070895d22"), ("217aa9bdeedf41a3987fbecc4746dca3bf677f6c0ccd4c592b2971bf96f9156a", "12d4a1ba99cf3abece578ee263c41a3d62ea2f3945a665a7c5cf3f5df8525e7c", "136d3dde04feeb3813a6569d2086760272327598b4200fc75f410d9dcc15a79f", "103e1f40d035fe7c83b241e7e0aba2fbb0b816535a4f8f0c4331677e210350a6"), ("282ae891effec78c954cdbead116f9936c899c9586a1e10ac90d6e7d35852a0f", "17c21c47f6770185f8fdab2b4cad2362222697458bdb06e1de1af34a3b847a60", "12863ad24d2d29f5586a4dfb96e25f98bee6eddd3e6653e740332ef71792cddd", "23213c2016e98ac86ac0c482fe4c9eb26508c6a3d3d7ea71adc2862d978380ff"), ("1cc4b71f8f71a5aef4bcf071268961a7460e914ac08f4a1c1d234968aebad767", "1e3f8abb04249abef8da175fba649ad268bb54db271db8e84e698be6cb0d0f88", "24b062efcaf4d8b4be9dd1e8cdb8f123be0ea23aa7e3555e0e66e139f6443a78", "140d5f0a3c98a5ca59917683c55effff2f9e5c4ee4da877629e8765cf2808fb5"), ("29980a3c4e8ab989b43b7fd4b3f63b9a38b75cea75908c900523be69114da23a", "0aa8946984c41c6ff0d789c730c0d886a087ada17f5609356c6197740fecddbc", "0748f04b1af62c610c643d9fa774c5ba6b6bb11fbf54eeeb2bf353af899ad0ca", "0de990f6f308c7ea309152e805574f575542780ca2e9e4984868d85e354d0fe6"), ("2345019a04680f1ad5d8503f182e3952d4262f453452f0b4a4630f26cb8bad4a", "2c86d99ac4ba20e58400500d7fde077915190ad39a0b329b253e55def993c696", "10835dd4650e1fc952eb90fdeb201cf5e873efd147154611c046eb63e99f592b", "0f0dc052549f739f99980a03f569c1a9f25ba474f63f017ddaa4982c399c25d8"), ("0197e0a9e8e8fa8a63d1599d7e9ea656bc2b7168f7d04cb38f492767c15cc2b4", "064497fceb8a45bf843b738c90d9419f2a918cc85cd67cf9b74dcdefd6cfb30c", "19b0948ef76601eb8b7c71838ec810d52c47d4e5cb6c1283997631f9b486debd", "003e34223d8caa136aaab223fee780fa59350e04efa2a84ad83ef473459edcb4"), ("1480637d5e9b6ced50c62ab208bb3f6a7b7ac8f5dcef5506d836cdf495b3b28e", "0ffc4f2cd3b5e56bae1c281bc5cadb797df9928a458d9fbb5e8f11c72fcdaea8", "107ba0ca7092a97103edf0c7ca032b878e4c39074db20fc98213f961e8e90d1b", "1d0b9f4c528b1f94d515744838082ea6e107caebcecc00932299c3b2e447ff07"), ("1ae1585c542d4435ca22b8ea1d370c479b7b13c9f0eaa5c719a287179f9c5b17", "08f42148926fea0001ca47f3c64ff00d974a630f6d41c1ae1b0f46a73e6d8ead", "226b526a0dd4ceebbce67f27795a2dd514b277ac1c2d51b57d629e67a823208c", "294527df7b87a709319dc1d4314eb9e5ded0d347b399bcc612ebcfa81f566a6d"), ("192bb3a9be093852858d58e157d87655268775d826fef89cf118c71fbc2a409e", "2edf9941c6c2f5cb0fc320f1d8fc68794815f5c6bead0f1b96fb8163fdb0eab5", "04f35d5ce2751382ebda1ef76005226efbb0d467ea5cb468a3266d269e22d8ec", "248281f8f4536fbf5f8ab2150e48d1c920abd1c6891d4d24d1e19bba8a33df29"), ("14446cf454fb164ee8d7eefa161912de027e885ba7212ac8dec880a07eb714e3", "2d93eda2c0950c02f8053e94ca845c1581f82baf869196806d35e3f3c0517f4f", "17b432a61385fbc80ac9cc1590e7d6d16696cc7368fcd750ae49e552bf607a38", "2125660171f1a880a9ba7c1c54561335d71ab236dbf7b9764dc58023a0a826be"), ("0aa14b1fb13ee15d797227d0ab8be1e878ce3bb93c2b9429b68f4d00525bd4ec", "245000e3c382e7172b5dcc0166e63fe60dca0f223341f1009b34cb263a5490ff", "1c5c41a249d28105eb01dd95bc33023b48dac66679f5827f061a975c7a05eaf0", "076e207ea2aaf5ee046b92b65bead6c2c7905318318782c928ca4a9bebd438d6"), ("1897a6e0e9afe67aa455f9bb2a69bed33147801259cc23f9faba3215e814759b", "009edd37cf0504411b05fd6cbf60a544f2a60d60910ca8cbd45b36709e9dd53f", "2e11a9439f63530b05ac20fe3cd178f96674c8f2677f628a6a1a403a03ffb99c", "08afaef775cbe7d67f47aab4b85703ddfadb1fe24f44d40c32dcc420e7311822"), ("24179496f7c9e59151c6916cf4edf3a446a1bb0ce55b914f5bad0cf072c25825", "1ff1e63e791450521f0d64e036bba754109ee2054ff3e71f34f47ca7a33a4429", "2adf2b66819a9e77422e9e8f8bc1c2ca0cc2ab2c75d4fb733f76c903a3a07c1c", "2ae66d42956af6f41ddaaeec26cdad8e25dff229548eeae94274d3fd11f52518"), ("251796d0bd5ac0624f867c9cf35ef1c82cd7a190094313b1ddfdcdfd75dbabee", "0a4773d1ac1fd3495cc68db93776b10f4d1ce3b3d896838a1228b339d47bfe4b", "03b451f70a8ca8afea6e2acf29cc6f709c8a4a10ac53a1514c1220ea9c3f34f6", "1ae791644453667fcac5aab7c65b123adec04c10612f74954245c5776c119360"), ("0f206b4909657a533a547dba82a5945c7fd9bb1b5394e8a3aef07a3cfe66113b", "055ef3acafb7ea8301400d01e54b7d3edcd76ab30d0bbb63e7fe9a965d9f977b", "275e791de00bda320dd7092df4b5d74d927f541f9e2c64d2ed28bddb98d37fd4", "03fb49c874dff3072aebd25402126089608cff701be29d9779d05f3d7ef354b7"), ("06a49177c3d4379b7be86a4f8a54c918e1b3b84f9d203caf8695082e8482f409", "1b69c49670d8f5fc712c735b3effc3fc30010f92ebdd86269b63cdbf72726984", "294358a93d4143570332be01ad308823b89ecc04bbbf93c3f4ad76e40cf89417", "2ae14f528ba880571441706d7751824c1985c9bc9c32a834f7417d9cf712eecd"), ("0e6cf8eb854430219e49b8b0331f26139aeada68ca8bb2a956b520f4820a55e9", "128986768b9eb91bfb81e6a95cb32b642c780209eba35bb944a151136d5a0ba0", "1efb8b54866f8b770c7cbc6d9788e8b28a7edcdfa8deb0c2baa92c156279ab5c", "232354b58f7ecf2b55e0e6df8827c4de0d995777039d36bf05128d34fc553296"), ("1d29a7ba83a21b5a5f247fd298243f7c065f2c03414203a34db7662b5b169155", "15dde554ae550509d6be9b233416c4f63fa1a35df15069165c84e185b206f81c", "0dfb3098a06a76eedbfaf419970a0483bb848ba8df137ecdfadb6824136ca92f", "0f380d45211242a3f987eb1de665715d63fbedce4fb052851d92aa9deaa1aa8a"), ("1ad37e968937cd80f56e1b9f28d9f15d0dce992e3931f806e3fc73609240d9fc", "1ceeab82c3a98c0a36f317dbf0f84097bf4ea34a9b6f1a56186821db8cf56d4b", "117df8b59a9505384f085337da3aed33893d758106ef81fc7c0d0c60b4edaf18", "08b2a2b64de171be063f8404e033382206c0a2d503d0f0a195e2073dcd43467c"), ("1165383965fb026e5722dbcf0a3bf2e10e3ccebf997b0c2cbdb5a409db7cf21f", "02b721fda4eb1579e815825e4496290ed564a4d3048999113e3c610aa3280b95", "0e620594a6ac8794c634aad1d1f36bab6c68a142ed2506972f00a59a4a3822d1", "2d95b87e040f0950a190daa5633454bea8d48ba53cf9496499671302f54152a1"), ("26724f025b764d3d4466ed88ea55c68218cd751b4da11d30772f8f0a2f2748e7", "13a7aec1007b8adb2d34845aaa03d3449c3dbb75c91bc88d4fc95e8eda0b93b7", "07305afdb372ba5076dfa6757f637238b87d58e9acfea7c5412270f2ff05d634", "12610b26672f5caad15b3a9c91e66d43f291f0b534ffbbf3c12f64b375120628"), ("2b0a5e3919da8b0d43cd393fe18bc4d5292acba8e69a93977a62111a0379398f", "07427dc5af7675a8309de2dcb9460b857fd0829d5ac02b4dc863f79894c381fc", "091d3437a3c567dfffe168ee741272b40d69029a6456cedfab4bfd9cf5fa6a45", "1c0ba910c86c132e1c709769090ab61ae1b7070c7d9c28205ad70ea6dfb43a86"), ("1b3c431f9618713b556775f7454440451e588b6fb0be156e75e5ae654d68d70a", "1e38e201a59f8d1037bbcf25bcf60ee02712bc1858dab8f50c664f55ca646ebc", "0729f066b4361fc4d14b8eb49795b9d30671e4fc6f9c3bd371a9349981bd0e07", "2ee15be59f31a59db5391ee0996e3c6629bc822f1e7cc356ed1f25b699ea8ced"), ("08f82eb75bb032174b5385ca8d52e8807a39e40199ceed24fa622b3859f508b9", "18e4d879a52e4a820df7d455dad1cdc0bb7d2eddc02a787c5fb7117e7f61a94f", "037b27130f58cd8217db43014fc240e3d2adea7ea5b4657ffca91c3263e1dcf6", "270bcc5854b4a9a3f60e4cc8fbdbc5e0fde24f3e2c16c5f882a07432d64c4b55"), ("2aab237af5f6476697917600d8699ea24225ecba8c4a4e0a3a4dd18adf115e7a", "2c049ee8eefd263b30c1d8a13cf844d3cbed45ee4ecc47a8c7f848321cb2235e", "1e3388da891934eedfdb7da604acd19e951cd3df0bb98d38b0d81812749e5838", "233cc9da371edd0f9555663eea524af18e9a59e050a323dcf9d20d44edab46bb"), ("13f1ddf7b5616ac391e9a7f9e7a73eb90e57625cff72d68115b5b3afca151a1b", "1b4d1d57d1b62b8daaa2b7aac237045be95f2dc478ead24c05ef5b9cdecc5220", "0a73458c9b29732c50543b0711209571461f5fa8345409a018edf011019d97f4", "2be90d9d43017d7e047cdc382f8b78d76098cba3a7c0e9883d0a81d77160b668"), ("250305b46849a4bd0d69769a21e5770ab8809cfe8b49d40e25dd04eb43fa7814", "066ad8109cede8be58848f4239c5834016d6c2611c1b0da85d60a2ccb3971a63", "1375b3f7f2bfddace5a49853654dcfa87e7c1c6562d6356c725e246a32af9eb1", "1f01c7b05654a28298a90ad49e25c0a54539e8d05c26c38ef12c13070005bbea"), ("09dcf3a70a0bc4a6f00e7787ba3b129c7b8e6fd37b13dbfcf34a1bcd8b5e2c6a", "2f770cdcf87fefd635b0e8e7ccefd2d91dd926e393429dcf846aafcbc69c8bed", "251df50d6fac938b4f9627f30102bb030a4b12616806e8fa7324cc4cb45a4ba4", "0da13be573ac14b37ccee35ed623cdd7606aee7ba1cdbd2c163303db3f60a80b"), ("25bf5043074279d13a295c5a36442bdfeb8fc6795c1c5e951f705347a205898d", "250e6acd10bdb1361a50658668091e53f748f772b3c4cb6bd921a88362e3e1e3", "09953e1df6adadf1849a0b266a0e0b0d2735d94b49f39f77e66f5ce2265cc465", "0900cde06a9ac389758b4505f0328311a0856d9d8834ba54668eb375b75519d6"), ("11fccb91f92c57caa9baaf1339068985778da18ce9816fbf91408aa1d605ab8f", "12c7c2f46458fb00679e2e5c30d52804bf50208cc4bba29b46d8f0dc2c93c874", "00acee7b8489b77911e3f67b0e5e73b2131ca94fc7331af958aeb54e31cc680d", "0027337af1a10368539d14a48af695f2d09d47be3c99717b212823875287bf15"), ("15b967f0cb40174b1891032ee4175ec2b7b06b29467540bd856d52596aaaf6ef", "15df6a2c3d5950bc47e0ec74c9e6fae00f59314a3f158a2555e1d14903ff6e9b", "0f5d2a3b14faf75fba0dd049acd6bb4abea16b0571114a936fc5112f80cd4e0a", "284f34b3bfaf7544ee049278e10af4a721b0ba31888f0d705306d96d0485fdcb"), ("1533a365843c0c18974d628450dbc3a566a16fb899c3a270e8f53eedca1693d1", "035146ce5093892d1dd53a2a7043979a95f3af0e2a56102722c19c4ba83df7ce", "205042eb0d6f39104ab7c1e8ee45b12cc127dded51b7b5349860107bf763f653", "25579719c9a8da2f4eb7dc5fdc443b3f9b2a2c41dda367b1598a1a9b6ad00bf8"), ("213fcf84f99d1207c00dd4851105e7a29b0a8f31cd3abb73ea39e43a8dc8e058", "0f926a4a965c99945ea49b3a6a5334c7e83f91237912946a119714126a6e1848", "02e1dc85c5ed611c226b78b22ca7ceb25c235cd6f91d7061e9c704d67989467f", "143bcaf747444be0b029fb7585322480ad318d5bca3067da414bc035f2379d87"), ("049e13eb01a4af9f84d24d4bd9cd9b54358ae701e1cc4fd55ece5b16a0cfe6c2", "1d526de47b981f4525dcc2dd753f7e4b78be2240ff637af0238f74d392943eaf", "0dfa3bc0918e07269fc14695faa3cfb9dacc0500ea1d7fec45933ed9c214f32c", "1fad428626f34db0eb68d8e38cab77e728ec3a2941659fbd317931788f305b81"), ("120f8e99fea2be0f96b27c3750e8f8d5cb1dfa1d8448ff54b8a7ed0e89197b2a", "0dec7d55b3433dc4214e2bc8a7296587e052ea7db3a05e7582890a521e1a8095", "02bce264fc62c5cd67306a7693d46ab24d95a3bf1c3c5a2d09b6288f9460c135", "2614c4a105b604a47c6b2aebaf96c16426cfc074bbe098288bed31b5497a3867"), ("08b667845805b0dd44e476a98efb903a66ad4bce79e61c4307c6843d20e8fed0", "2d12c995a850e31ca7a75da7bf24151d0b5887f36b63b84c8dca4debe51f605e", "26c21b70727dffe46737fd00a31876ce6303d004946148c11ef01bce21b1bff4", "17b287128484381b96aa7186d44baf66c9606ddaa4237adfea4c49d2b4ce26c2"), ("1f6433b1b4f348246a08f146a69f5a22ee59ad40938f306e59605ca1462f4232", "03254f1be4f6d41f390b45076af79f8ddd3adc1e1f8ef085f8111ae5fa0cd1ce", "104db1ea0b9e2535f4147a3b72f29f037436cf8b18b75f06d9187f5673b0e726", "2b650127d5845e98517465567a83d01abca93d3d46a68d7dd2e8decde2275b1b"), ("28d5712b9c79167623150627c4f64b968c2dce33d8247b80d2b703841b8fda35", "21e907c96ed67dd1a27f9cf4b7954bbc87d01ab28c817e33ffca57d52c44eeab", "11d0d6441f6ca250ebda74a2b3413759572d5182301e1c234497ebfc42965d62", "2872877e092eb2636e414293fce7f3d962cb289efb07ce79f8fd6def3e867511"), ("19214152653b3e864bc44e75f2923d286970abf68e83c08ea1f72b3d6601a437", "11479fd4d1bd9066c35015990b2e5bc844a5c2fa5b92b2c816bcd6b026b64658", "0f6efd87c97cebbb3aa1ccdc711a5d68ba68bab3bbd5d5d20137d3ea324b5dbe", "19a3f04d846fca9408e281f060cfe34246140b0e0fd75c6c4f831ec747417aff"), ("2ffd780acd138d4608e1809896f58a621435ff75e536bd1ac0c49dd2de9f3511", "181e7f95efd037f30d978aa288e13ea9c90897b80ccd212f58312c639ced0b9b", "1c575987cf1c1b7a8cdbeaca67851a81582690a662bd1b3c92e6cc1e9fe5d656", "267cb89c8a50147950a8ab762c57ccae16402db5d5bd4040cc4f1cfd24bfe6d7"), ("000fd79fe81d8cbb0a7bc06c572b5d5708d047afc94df6de8d2bededd4fe3709", "09f7fe6062057c630f6f9c6de7909fdee0ea682df22ee424471d4febdecb7a94", "0cd6d5f5716623c708f9ceac115e5cb5fd86983f56d8efca2ddad6b54161dcd6", "2a9d182cd734cca49d47025fa3f49c95127c8b9b315050103c1011b144c55ba7"), ("182dbf3c10130a9aba7c499a103b3a5ec58f87cfd23d7405aa85df240eef0b78", "25a42137b6e62864605799b8f9f589d9efe01cb7e8aa27145e2d2eb0e6fe13d5", "114ca287f2f4d33c1ff615bc0e0de869c7cdd510d9ff45e35ee0def90e6442de", "1b0babc5e2bd08540b1ac020621e5e1707b452fc6441119780f2ebe63d96f03f"), ("0216163e00ee21cfa364b3a554a05411b905336fbc1937caf1cf24325d731c55", "25f87a694b2ecdf94efe8e5766bd7ce8e2bad4c1709de97666c36407a7c71481", "20b91557dcdae7e8bd35ec54f00a0e612f97e3577107db9d1669c21def868cd2", "23773a0f1e51ba8be55a0886a5ea1bf9bb4a58386410728ec5bc42392a66dc7b"), ("25a3f012f1dbc840e1737bd7f84b9ba566af6b035fb55a8b833f9c9459c3618e", "163e25040283c182919e73a620a286385ff0e35174cfb49a8ee41f504e3968fe", "0a29e5fb172a109f947f85a939df93a3eb2911738669ba3aca1daaf1ade4c436", "2b22ca164cb9f113c59ba4513987cfb79324fbd9958165aeaabf73f92e1f6caa"), ("169746af3586a2ac73c869134ce02e6ccb1225b4a414feb59965c31aa825d637", "2c466db86fecbef7346f12ca7407ec0a206fac97faa38b8533c02a3098bd02cf", "1228ea6b10bcdbf463da36e9721af40dc7f7eb59eae00c1f6e80fb0d22b896f4", "04a06b774988d552525b83b43e5661f79162ede5429f5b453486fb3092d537a0"), ("105d6b055d45c44a1dc4be50e3430fa299c05b25d680db1bd6fb63b2e6772fa2", "23e55d3b9f94f65fb66173d79aa89072369c61c5feec882b36f98b42ac3fca04", "0ea97dc5a02791a9899ba767f41ca0cf1d53868d9f53a214c4cec7312e1aabe4", "1eb31fba1fc73705f304d5bca87d714d47d573c815fd15f1fd30a4e2229a9e7c"), ("028bd2b8ca093e50cb455bde4dc35a7707b0a325f746d24acbbf2b3875a92c56", "013c1bf5c79be876d2d0d5875f19eb432fe6608d163ccf0105b7822f02bbe787", "141b06e4beabc212494f84cbe4dae6f8ab2cfc5dcd007890df95ff9676321c86", "2e7eae74e53f5c42cf651e9d879c9c2b2533b5d11c30d8ae56a777f4283a5ab0"), ("253546bf778d4865f02464a99a9e8181c3a52a3ea2f65eb176f3c11d7d8b5165", "22b52989765723e87ddbc6a3f9f8d34ba15f306ca18fc554e3df1b9835ce0f5e", "27c72c7641d3044f66fc44eef82150d4196a3323b876d43cf2c89bf1aa267b8f", "117ea6af214a226eeb72fe82c851f75b6cfae3da390fadda0fd9a2e5e71803ec"), ("02cf677ca3aa9dcf33189add2a6184aa48d6b1dc372567c75d343751ec8f8a4b", "12b88e1d1e96ef176f9e971ca86c3ddefa3102d0c0e973ad219294382f3bd615", "29519e1fb720e8794a9eccbaa810ed33ea777171dbd073dcaa24adb07221fdd7", "1e31e1111d5d485074c471cfa57b7b491bc95702f6b7bc2c622fd471f886d485"), ("0f07cac00571ce27a551ebe8f915ff127639db9ba56817d06fa1e0e164d5b507", "2cdd474e2590e9d6d5c9c70ca93cce8342d3ec690aca059fd8d8ad5cf9cc026c", "2279ae3c39312e2db4794823c4fbd902ba6aa90db57b8d6e6063c436af03895a", "1d201d4503d6e5fbfa1548bbf2f8fc2e58069b47a9fc5dfc1e998143ba9296f5"), ("1db6049ea461225d1c1da28d0f1a500e47fa070e2dacbf54a7d3e1e40975a0f4", "29413812f84e1c6a0a17e6c5aea20efca47c04d33c55c9272209c863a59d3551", "28654a62f26d4d84fec2ca7ca458912e7fad4689f4b0e5cd880743d581d6f1c9", "04aa01a90bd02357577a2d8ff87a017ddca6084ae98f974417f49ac73aa67f15"), ("2916467f658c98d356cb6cc6b5958e6128f16697ed610ce78021a91e2a476979", "0478b8478a67bd111b548ad232919ec95cbb53ab3a3697cf4e106cd447d53c7d", "2ee1af59cfc20435f0bc29da32cbd38b94eb802be7bf481b75d9239ed2438b81", "060a983f59ced14e1bb37e802f13b7249b57e499c303bedca398b7f9fb31ff14"), ("12d54f5ef1aef5d25149816f6388ec4e6bdd9761fc6ad9576c92fb1e9878cda0", "17b8c9ed43fcaec98c3dd5e9f649e52469368caffb22c0dbceb76fd15d571ed9", "125e91cd4d8b1dd030c26ac27105321b859035ddaea379ad5b2be7934e740fe0", "05a03f05e78fd8444fc143e598f20dee2c1bfc70215c34be6ecc8ceeb136aec3"), ("2df7da2d597e356865a26b2a7d0a3634be680f75c621e2f289f56b36ded86fc0", "133de95cf12843395fa99969bde3d313f8708f01163c06305448a14951bd3899", "082ab969ff86c6d9ad280e8ededefa285795720525eeb6ff330d7c32c6577a33", "2fe6d371d4b5f46992b49c25d6f0e9ce24442c2bf2cdaba2ca11514760ef5b56"), ("208910fde78c9367100e55c3fc13a31d34409218cd4acd1d4b62ddc593e669f2", "12f6a47be2b4bb180609bf587bdf1679385c44edc75eb32d8d6e25f45dd506e0", "303f2ce2cebd21e0e645bf81354539896a467eb7f8a19e491e99382dc448a960", "0a3f5f554781fc24d1499223b17859f3cb9b834bb3b33e5aa0cd517e83e53fe8"), ("056cf901963097c89e497e52f9fb94e1e247bb74e401b4e0520e290ea1dc0de6", "0587e8a2dbce898380df38183bff0f51b13d22f905dfa305ff7c4e03c1cdbc36", "0513bee4674f9567544c0fd768677fd98b012dffbcc8ba323845b0e240d94f38", "1f76a525c0128792ab605a3f5ca1f006baddc24338af5d48bc5b128f75571b61"), ("21c4bdf1b1537e97683649f9a07977bbd10fbf28971f6daed1d1815edb01497e", "12f54693fa87d8ea264d25111ec70e8aebd3f414c256ac51e92668e30d445a77", "1d5b9b6ceb6bf645773520aeacfd768e5cfc4a06ed8504dbc9bb17207d24a33a", "0f26acdfc996ffc2f66592d6a54d42d979d2ba0ae18d3ed322823c2af97c5e48"), ("17fe4dcc3d806237a1fed808d75dc12d09fdf318ddebe7c0acfed31091281166", "28893e121f9e3ff3bf80925d1df01fa5dc1dbe730dbd186a33b1c3443c9bee12", "17b95bc7dfd52936d8f6f9c6bed4f6e38ad45138956307b51369adb8afca6b17", "286e42d140bd16a7dd8519caa1416e08cf28e29e67bce802d2da525e331ab3c8"), ("162c6bbbb5a5a62cf3bdf418d6badfded1add350d6b75e7d391cfea94b41e12f", "2716ad160eb35a3f3e011bf3b9841c5892e2a88754d00556db943b59e5604cd5", "13dd5e132b56789e86c9165f1c86eb017012071d757e0bc895a20842484c420a", "1d073b7ed01b529adca095760cfab6a298a264fd00c848beb2e348980f9b7add"), ("29b3a068755e7aefac66b92c9c136450b553ee6dda6c48673ea5fe75c4e41333", "2bbaad20abb9f597a72c4da8c2b0f5622f2e770739e60f5a76e5b5bfb0347b15", "0bae8467db67c1860b0e361d2cf8154095c750c028d9c28837723ff654d221f4", "2402f3a03f0e0a12da5eac0203747f0e9b83704268f9652b022e5f99d49abb1b"), ("1bcddeccf4e73c3ad67c0173bee09f645e6ba08f6f04c7bc5f37eed062055bb3", "1bed42cc39174024d853a5fa72e8c73a5cd1c68f1a20d63aa03b1b1eefebed12", "1c24f049cecd39c9704eb29eb7e9f7884465346521910f42ee5e499809d2ae34", "29624042e9684f9c2f58b0becdf1654bc44ef62859b60310e939cd6cff6f7f58"), ("268f92cdb228059238637a794a908cf6ae15d489fb8b81b6472270d375b9ff28", "13defccef11ffeaf3b2803fa28f40ceefd796b4ef770b31919bfb5864f97e0d0", "1558ca34170089a209b2f2d5393f1c36d14275a5c0bcb4f80d59f1572ceb296b", "001d6c4000d826a2c9a52a221e3c223e91bb5301bc7bcdac419cde5e8f57ae5d"), ("2be3ff4cfc8686519652286f105a2bc121111ecadd42d031eaf7b8d31d8b016c", "008e4974a851bd587d65f18625ab1a18f8c2d7de3fb924e35de5c537cc20e2fc", "077300ab3bf2d05f47ae7a1e72fc377687a2d6703025ad1e36faa581adcff24e", "0144e0e63237faf49aed1188b7185bf9db88391b43bdc4b062ac62378b5678f7"), ("17f62fbb6336ce3ccbd700bfb3395602460017e66ad8b8ffaab3879fa6057a7d", "1e3e6f0f4f952e2043f546b33376c61e752a31be239bf65315d921f6a7036029", "2daf2157bc7da858e980a3b35ab810de73706aca5143029c1c19bbb90e3e0423", "2d83091dd772cf11774bc6496e0cc45c4c319c7c4f5ef169f002db354ece4546"), ("14727c8f8a398b51e851a0e4d618e91a4ffbb01a0d00872d7bed5534e5f8b8a2", "22a6b85671eb79ad5cfa6c1f164b7656b6c5e72ae9087ce9166a0a501afc5fec", "0ee9bf114c9d028f58934726388ed35f89d9875aa1cd4fd7ca33e9d33b141748", "069ade0d870829256a5ef14d38731f9c76f49cf769775d41d12ac0a8ceb5bc5a"), ("0eb8aed3e072d3b48a31f9896ea522834951744c48acea7d7cac66c349645cae", "0a95cf38da4e466841da7470214041f3f91157a4447608ce031d92c60fa79e2d", "19ad59b62aea066dccccf12d4b4704676844be3531271f166322f2a1d36b0bb1", "013c1f8e623ccd83c7b34f82e85c4ecdf6028cc4733a1f44af7273f8c63dabea"), ("046687160b44342a268b14e60389becee06e53bb25c8252786508c6a5e647b66", "0ff9b3043ed69177459882f15d7cdfc587e87d3e7c429514676a42a91c19f38a", "095ce2bdd25d123b16b6c3912f89cecbe387b36e61bffc7a2d8eb3d7bba40ce1", "114d714f71c076186086b7342208aa275f108a3d4214bb4f419cd7624462407b"), ("11bd9375dc9a4c90116a1f80b9a726f2a00d55dc778c96a77a4e4ba16f411b5b", "11d976a93647aa6024f03a3b3fe0e062bc524034c6462d7cdc07bd17fceeac2d", "1f5e2a83f2820b1a695bbfacddf0010dfa224c2aa1fadac55cd3e3c39914349f", "1bd248464ce41f6e4f3402445b7ff858b97d17879a08daba8010288f6583a1fd"), ("2f4e17243c9a8baef2474c176823716fb70c941a775b9037a2399b16d4c88214", "26e0514420240a0a747af133d784b397d1e6f8ea867e31bc6fac0a8ca8abf78e", "193c4afd293b1f6b93f58261e0af7fe03efa0eebb6453ad0d40ca50c65a790e3", "29f6269f0bf0bfcc0a6b775c7c1e5c5617cf14e91a6f36d540d617fa2b73a8ad"), ("15fa28e68d7d344b382b0a854a61820269e1e7b7861b8d9679137bd871f347a0", "0cdf26c42b7eaaad25ce2da57a93545c8ceea1f691606cadd6311d01f3fe782f", "1c74f893bce3f230a4231eaf9effa9b34807565c32801bd1d8bb60581a4ce38d", "04388c506ce74cdc8ad8345f19da29900a854ba46702c37decc9cd1260f82cc6"), ("0326ecf9f46dd79441c8d81baabb371f6c351fbc874c0420c332da40509c4d24", "00cb02ae5ca5d7693f8105b3a4d3de61a845e405be4d77a42d7ff40a6ebf26cf", "2cb85d8569c43660d8d3d16262dfad8ba30d5c40c8e0031a18ca89722ff09151", "1d1f9af37b81ca27f11e81519f5e67e90659861e8aa6d1e0bf3f1c6d474b407a"), ("1888c27eab7cf84ae7fc4972d16b6c5ec0ec85ef6853a206a608199a8f78ab87", "0e7dbfe60117682ce171ccf191a8129f80775e75a12c41fb698b9ee39a8b6e23", "2e88b14c63cdd7620aeaddadf45d5fbd9b592541228636c7670745d14fa235b8", "1f15b7de6647984601ff0bec338ec179eb5833c68f03cc17decb99958000f136"), ("218aff75f7b1f95342991f6957473b18410f87acc8ea7354d17851ef85c2bdbe", "260e7bb10df0acea1e1b983ab23257ee7e9c70ec45bc0b0289c9370615bd6f34", "18799a71101c3c87cecf56e8d26b611229c9d22de09e974365683b8b0ad8e90a", "10d9186e53ebb8565eb7748f40f041f4bf4c7a7f3e38529d7a12c0f45e560d0b"), ("03ca59c56d17777f983ebbbf04a453f499ee0dffe770ad31b1b40fb223a015fc", "11b502c0813444a16944e1c5f3f90fea2f3fc5adb2aede5f58fb0864b694e950", "2ea04ef2607a7543e65d7d2c46908a222f53eb3e62b52d2a61984a2d8c722466", "14428b07b3d7f0b5aa608fdcbb4e4eb52cd5e1bae74ac5e38b24962056439adf"), ("1fba49109a779f2791aecb55ae6dd657ad38dca7a46686fc48394206cdaa8154", "2f9914b6ed2beb2adec65288aa4b448b3d9253640651936b9a2578930ffa5f10", "0668e5384be8eb2e3eaebd40325566a8dd4d2d4a66f1bf03c4d25c4af8249f3d", "29a13fbe48f27eb2c74565f88692b41480d34f216892d6218e1938fca0bf7ae9"), ("0287b9c5e6c9f199a3b2d814d5fafa96160ea5758192d381b63c0448251c4a46", "2764ded753a310a7917bbbaec114bb40f4070e8d5c98e69d2f19922734f5fb87", "208054fa1b19c195b6e84ff3845a46a685c40e6dc222d04f9d711682073b01f4", "10c1c6aa7836e2e7eb34701476b560453d176bfb32cde2010319c4a493409e83"), ("2b20ea8b2a2216899a3236be296101356d8dce649fb559496b5f444ff56ef5f6", "0128b6657ff09adb9606e8ec11a198fa3f90cb06edc59d8eca0d6d311b4d143c", "0e546e1c7a89b16194a1ce30f4c890b68efc5bf066ed2efcc3121223aa2e946e", "00c009a0c89887f7de36e247a91d1449d75b09549316c26fe262f15c4be2f2a5"), ("1895a4c11d23f7542ded97993264ba3be81067820e0453a5a0f8b482e9ad47f0", "05324e74c2c2d04e64de984e8b4229abd915d2b7630959867527bbe3be134d8d", "1d3b5f69551ddaeb0c6c520b60dd23be236d25305237898f15b80fb91c48e112", "229e347c9f80e8281c59bf61a2e9bd307b46d004d3f2ecf4e6afc29901132fd1"), ("10bafb5bdac9e116fbaaa9d51a08a4d7631629472821b333b5cb0e06276dea8d", "28a50633779989e460f12bfdbae435e509d297788051830367b370becce11a16", "0a591f82206c67debc36d2cfbbc77ba27893545c664c9bf1015119890ff2bf68", "2c75d0d6795acb839ea1362902e4ad6aefb501ccfbfd6dcfa1404891d2ba19ea"), ("0389b681b00c94e4a1155c7e67b8f83c310003ca5bfb397aa68b23d233d15843", "021dc3a40e3e316df763df828ae60a5649ffdddc9ff120d95d8b4037ad82cf33", "280a925c796222242b57cf1c395ef633375b9625dceeade34e41ca3c98db7e89", "1d11ce9f43512bdbf1ad7d6a6e91d141df6774952f8a859642e5e21970f50f20"), ("26e0695ab0e8659cd2736c96181ef2df6af1a83427a70039ec7b17ae16b8b4fc", "040619ea47561282744bd3a6aefd1ec71d1f5ddfa46d953a30503b4dd7adfbaf", "06350bb50d4a786ac4a6a2a0ce53fb954cee031abcadf7b17ea6d4092a08cc08", "13f566d491d2f21e74797ef02f8af71c6c0f3091483c6abe84bfb966ed7a94cb"), ("289abb92565a3993b049a2c48597cf9e09c452c6e8d6775256df1403c177c4f1", "0de157762811cb14617e94cf1f7be599967d8925584a03bcbe1b649ef23532e0", "201ab338f38ee42ce71ff67a3981b033d9976b41004b7a96193850e0fc386d02", "13a7a9841bfbe1590768aa069ed008fc119d4480b41b066515480146f20554af"), ("1573fb793e3663daa093d58b6efb4aa016832e064e3758ead74b11cbd8751481", "09ee8a4b7630efc49dc0e134d26e6b9b9fd98a0dd0644297a523b6c9ea35ad89", "01912e9787af2c4d96672fb338ddb901eca5163461c3a14fec468f202222f59c", "1426a70849db06f0273d351d446be93d1b94e8ecd9d0f5e62026804abdfba296"), ("0abb88b98a920533cdf973d03ea0c16e796f22c4e5193fd611704a48eb8ef081", "0a9ef94302bbb55277c71f5a15ac1e1031f786fc9cbbb1a696c26d8261814eaf", "1ad968b2c85b1ac304ee2799cd585e1eb93348f12c36165af47551e0505f0611", "10f313280943e3f5a61f5f3109214df75efeb4e019ccc6d9f0023b57e1287cb7"), ("2b075e8aac1ba785ddc622fbc274b4ff46e12f44e74fae1cf987064a45055616", "171e8b1653210157fa985e72ede042361736dabe63cfd55c8064c93e69498ade", "21478cd0c7c8d6afb092e41effb74688acb984a833b708a5200dfd6689ea58e3", "1e33f59a223d28a21b9c724eaba25aabd55be274616b4f5ee792e9c3c64d5c21"), ("15593f55bf3000f4f9d5937b4b77414d15e4ee0e0349c58fff3c51a4eb8ba19f", "087fdfc915ee6629d6feb52d907082930b70bd391e2f1d9bc1c261b182cc7416", "0907531cbb926ed99425e99ee91238b3107cda53d17a1a30cb03fdeff2256a05", "06e2b7ad92b28ffbc025d0f7215b649a2a0bd73de00b8bb8e84ae914c624911b"), ("2ca032efc844483cd3ebe5ff43eb056dc427248254981051533ec2629c4f2731", "287db946668a052adaa7718fcfdab2c819a2d455202deaa0693fb035e629f546", "13c0401362fb0db824bcb0301c44c2f571f1d27f2b13663b310425cce3cb256e", "0303fefcf3773adbe5b0cf5f49b08ab40f808602279b4bf03eae4e5498aa5355"), ("0b67b02ece80cfbb0dfa9154ba5f5b75556e6dbe0f7ee4c8517c91fd95cda390", "2bc1bc3cc5a83ca1713dd65bfcdf0c30961043e4a89e6f43a088ddb2bc7bf2a9", "1d8e16a351545406dcb36219ac380e5bfe7a65aab4f9a7b2174f23860c6110e2", "008cb9e468a8dad4feb6bc8da7268406ba715a855b4fcb9cebb48f23c9c3b179"), ("27e3e3e11af858d5254fe37d6433228b67948ed7ebff5226ce44f477d32a64be", "0d6e8110682f7f06d6eadfd01ece2a1b9de42327c80355321416a633a99c89c8", "0497f71eb95e629b858c9f69d33341363bbc21350d938ebd076fa24f55c04c8d", "00f5a99425e64b708991f5cdb02dd3e42d96b944b44a217f49114ac6c49a5b46"), ("1c65216a6b3a258ef71a1f1195fe72e19c20721270a860e8db757981d7149270", "040d67dc882d2d017c68cd66b9bd50159bba91636b7941a708e7b8bdcfbebe85", "02934b86df9acd1cd2dd05686dfdf926f49261805a90fd1996e367774d34b9de", "01d6017f301d5d3df8b77f1d272cb9d1bad83d348738ba96d9733a432113e7bf"), ("1493cc3d2802c68892f7358cbe0b4df71a9fd7b80a2d16dc52fd49e16ab9d0ab", "1acac31418a96846992825bc7827c45421f7e6f3ac0403b183699ceee1b6b2a2", "0885dfc9f66014cb383644bc2b03b665590d216639a11281fd728b255a2d685a", "0e1d5f9c2329e9d0848dc0db77a357078198161d5377368411efacc2d404bc37"), ("01f9b01115ab5b34be155f0b0cb7105b3f456413c8a162a3454015ba5bed032f", "095caa499f10e28e4597f6ae0c0bfdd9aa65869d6b28dada99fea6f7bc8405a1", "222821be2212dd1b85a63cd4dba1fcf23572adcb37c19a789a8a10fa498d4ebb", "0630363ac69b0b2ddde76578291a35c76bf467580b772e156c2801e0fce744a7"), ("2e7eeb42d6c68e0082c30a718969c0097fcd48c40dbdfc115b75b7817de277cf", "03fa693be59e205250c6d50909525d3c9976c47f8f5a9787435799cbb4c8c2e3", "210b9943f1daad863c157820d64485115c7f40c08d28f7cafd4a595f5224fc37", "1f0bdff1f3b48ab336d13edc562b7680b12e8eb92fd3ea62931ae3c653a4a91b"), ("04a33995b5d7d1c336a5d9cd7f8f3397238aee8bc88e79ffd6e61d50a17f6d6b", "0a80e69b3c127a081e70d8a5692fed834af514b8105fb24b17f5b9f4ac8baaf6", "0ef5428f515c5db72664884457976ab06a4b05d377c1cf3c136a4ba2fdae41f5", "126d1f735baea4a2d5ce40ead17c517038eab4d881ea9fa6d756f2bb271d2625"), ("043048dce66699c3af8e0890c27a92f72cfcdc56a27c587603ee2f1c679159c1", "169a60f9c64232b04da259999696c865d7861d67e41595819ea3fff18eccc551", "1993ec2d04d63de390c5410f004f1518fc1c581b5bfdacd984816ab1c1b68b7e", "167394802b2b3c9023de200561ca736d218762e43e381208214486ce1d29ff99"), ("1c34e02f13b0f23a5233ab1d05db3225d2fd730b25f382b07ccd7aaf65d00625", "2399e8a66895a035e1e6ef816427128bf43d0188ed8ea2a678d807bd3f1e015f", "1975d7ed54932dbe6272bc947704314481fb765ad50ff90240447e7ce4a53f87", "02fe2d7392aae1f1f617e371ff3747ac989ec8df3af303c1683f3846e12cb66f"), ("1739809a5792fba5658764076af360db3fef6a1fdc2b074a9a029ec0261d2d55", "124bb2e49ae62e5cf9aec7c0dfab4379cdc7d9a2a665fac95955a61a54b39e23", "27d82eb594ac0d1f6b3eae2187064d3fc277a1d7507d5db96935f5dff9dcc50e", "0599e6b03012b890e3115900155bbcb3125937e985e773acbe258e162119ba03"), ("173510f67ebdaf5dbdb2158671d6c2ae1bea6a829730a75195617fb75b01ebba", "16600374e63e17ed1dd670fa1d3f6852181b9beb1571916e00b6da033a08f60c", "11b42204078c66ceef8e924009b280302825e99fd811639ac00901f5c851a334", "2174813aaf279dd5fc1c031038511a3748d124b0468ce89d303e42a8db6a07e4"), ("046e9bf984ad12c51a7f8ccf67885a7fc05da8611a03b794138620bf47bd766e", "15912d2026a5bc16637998368f09dfda05beea980ca52baf845ac8a3e5e9acf9", "1714dd7ebe7828c572fc7cbb07007015bfc3599bda79185ca0030da3193b3ad1", "0c4d4966bf7813f07e9a630487469f69a1e3fce3f61b32daac3882b597d4e516"), ("1eb2ba03f2b26224f9069caae70f1eec1f047930e3ee03e45b976b2a360f5bec", "03fb5ad443de265260e7aa107602bba3cd842d14e49b64e36cc086ca381f1d7c", "22c629a3803790a63516bee9aa8c87f4803039548957bdcebfe4bf908ecd6da2", "3015caceff8aa47adf1b5f726375f125e5abae75786da1cc35580b66ae3862ff"), ("03ae86b47c43c2d36bd6ae9c75575485fd613bed5dc5667358d5deaf62bc29ef", "0cd544d7f8045f2d8c3e01e9766faba576e77a5860f1d6062ee281a22775a180", "1c835520395c0b743beca27d0e5d9fd6b7b469288467e3cc60e26e3ef325cfbc", "00a60fdf63c7d4c50939edd8c36f61e8defdce5df0c4c7351f0ebefce9f756c2"), ("087a6d71f2e8a798b99ee108ed2c15e20a2f6650fe340ecc4261faf5efa757bb", "1d7200104ca62ebbde039b4757c3874066b2a7181d2818faeb95cecc7e8daa50", "2b7bb05a5dfc24b54183db2bbc9ad594d2120ab59df4f6d85c24fe776e995f06", "0630d5a53a89a195122f6fdb3d5f7fc3dbaea75499008dc9696ec2967d68aa5a"), ("29f324f09053301b3631385f09baba158d9e4702e37b6f21d26ac3469f2dce52", "2a89b700331343c4e242dccff2ebd6c8feac79a44ef6129e0842f9dab078b256", "1f12d68ce6f26cbd836ebaec75d072524612c3baba5e4a9cb3be5784c200bade", "2f2b3d078e1c3b38d2db27f298d32bc53171c21bbf44d0e2a6f5f7de5506a292"), ("2c4112b33a97d4f51839db3a0c676077e61a06d60cf4cfd22b4883e7326e4ea1", "229f67d528676455f80bd948f3d6fe012ff1ce90366006e87adfe1769a8e1dad", "2efadd8d06aa7520ed8fd93ceb2b1b2df2bd629a1435c40d1381a4144e404492", "262abfe0e33b91ef0f3ad69e8a9c57135d7688cdc34ddd81e5abf6b70bcd8b45"), ("17e99ceeae4311bb0a924bbec953308ec8b451c68fa095dc3eec388352de4556", "18f5a05677ca943a868b60eef01b477f9e93afa0de9291c8a7d2242759c53134", "08c4865466643ff976d270f8189dc5640f17733f26ab002bfb4f96379b79365d", "2869c342dca6eb0125a23f96229fdbc34f02829f0210422840e074b55de07216"), ("1abd8110715aca1a443906d2c02016e31a75a3c914af05cf749c049f9493eeea", "05faa11763ccc3ce9a462388d155a5f5190f40309668fdeb7f8d43b30eddebb1", "1c8350f9697a8780cd23daf409eabdab16abcbe1a149ec4fae8fb66bd068b93f", "1b0be3e0abd6a0943da8054dd2eac8540c8497e3ef0527501bf0cd7d33dd4ec2"), ("0a4d1ce4b1c50c0ce5aaa1dba4265fedc625b4bbfe42e5499b612368f0158844", "2a2b0fb15c409fe5f93f6d9d01ada923b1e899ac4d00e873660d82a7fccdef99", "1e5f5d3f6af9c01c078fd24e3ea3943ad71ef26c55bfe24deef880776ef27428", "02cea453c340a5b283cedc93a03ca5bce7bb62398a2e513ac4beafbd7969eba0"), ("044c22a9098bb95917d6a6cea1afb32ef8f0f218567a7a31b2adcb9edc93d1b8", "0172bc9912cf3fdee080a9915a7224c9f9847d99a374af69481432f182632fbd", "187e02105186a294ebf5e46431bca497f37973287a087954da2a609b3a841f47", "20b04b33f2d62f093d40d093dd16f25d150e9a961be0d34fc0e99e0e24eae83b"), ("1f62a06f824b2a955cafb88ab73a5210a8032ce54e649daf15a41d06bbf1ec2a", "2b66be0ce7f896c9dbcd2bde75ed9b411f54b2ea6bc6e0642754990f20bf1b60", "11367c61dc1a0e352f6a17b67e971d7fddb9a8c47ef6631b91fc36b2c3398cdd", "08f560ff71f86f2ecd40edcb9893c3d913b0e48989cd519b92d579c603760ae8"), ("0483f7baa2cfadeef530e927514e9499a83d7c624e589e1a4fc1060b96971ebc", "09d5e1c23eb6fbec38376262a088789b92755a90a6ff7523fa8217637aa17a68", "02f4c3a45971bfe1c22845e30d280280af50dffe7756d982a2c8417c232df2e3", "03d9f5ec3b799bf4e27cd4414b73bdf657f9f5faa711a37c759d1fde2509790f"), ("05dade55aa039225400e642a5bb4a036b3b7be2b32dbe2801860bc0da72bfbe9", "0dfefdea85219faa93ba87af42849a1742d5e10329f32556893cc4e045f38ca8", "27f157ba0368b46e9beafeddbd08fb53478083f0a68fa020ed546053a3915194", "274e80e7727f018cf84b4f4f86d40ffd49aa3089c5c45a787ba7f8c97f5aee31"), ("2176215609de1f70c7566e0bbefde919f4b30e517b3682d885e7aba9a4edd8e4", "1453d252f73da6a001773744fbc51bc985a6e31b0d6fc4a8a71b238dbb75d90a", "1e94b045f41f14cc990c7db7c2cf42baed3b6b0285d8c24da9e2b6a6200f8452", "161b41aa23a69e367c69d2fda2683b5771d2804e6ec2953a51f55950f6262d8f"), ("1dd803a82e3502549693a4695919c28c6fba2bbe3c18bfc1fedef03e170c193e", "2a14f706cd01b3fae7363ccb03fae6c8203aeea7855df58e700fba70febeb64b", "018e0a9856e7d1993be2cf045838c619114c86f10091b88995a7eefb27b13c07", "12ea4960a0bcfa9a7af089a381dc37b23e2f2ebde69821c311e098b68d873f17"), ("2c89fbf585ad2538bab56e224f534afef500c05b94a3df840c3f1b7e7d6f08a8", "0e3829aa8003491240147afd9e42a2465e4e38a1c013279608c743801d8b1056", "0711c07301e354c1e5e688df2aaf92c90344c53c3572d65b52613d3f5c6b9929", "0c3f598da9ce1e50ad0b95948f1a6ed7726801e0037e56ccc1f151555c319bb1"), ("2b3f511233fbfd8c0de25ae2cb1ac445266f2b65273b8c9bfd8110dc05ef5c2c", "06c06077e22768e106030968cb5ea1ebf33c13f70650b9fa8175f730f49be5c7", "1d12ccfa9afc8d96d30068a0d3eb34384d2ded8b6ecf1d51075a2c4e3dee5e50", "24ce438ba5db791c68e95c8cfd84021298c0c4a6cd9d876454ac88eedffd9d64"), ("2e8f2ea6b04ce3dfcc62b81c992d1ba0150949619b3c99be3686351a402f5ff3", "2434bd692deab26c7dcc47efd9eaed435536ee30536bfd711bdaed43f249c6c6", "24d9fde474d861463c96e64a7309f7aca1c940fc0b57ee468b8c449958c770cc", "1ae5b82d41df1324add967c5cd99a81804f429ebd1f2a245ea6d48cdbc8b09b6"), ("0bafb3231437a563aa782aac1bae4cb5333a562b7ced643f3d60be042ea2d486", "1ae96dfd6763e66e6974b7a342ca843a9c82db85b95e0ba85d640baa543525c7", "2e31a2935a32e0cc4facae84dbff18c1af1e6ec19abd12e885778ae992f660f2", "1f7c0732ee836135cf74fca0f60ca4b31b8ef7b5e356048d325a84ea7368d126"), ("0d164c44422c0afe5e6343fb4c52535229854a1b5559963cc5e8ef2eb8152e03", "1abd1fa4ff30a5ed78c6f6055e52503c0ad5a74dca42f9e9103796ea6b899365", "0599502df472208bdae557052e874ddeccdb3ecbe61b1ba30e128c89c9851480", "24ea37d09ea36ce633713b6efc37578624eb51019c4c1b46afa819a32103c37c"), ("232d32b4482a23cf261061bc5b6cc44a90a6222fc564490571b6c464e6a497b7", "01bac11ce524a60c3c2885399e2126708b28a52e0ee4e9a4834326b2500ddec6", "25355a6466403a505686819b0d449cdf8840ef14d160e396a24fa39fb7c54976", "2874705cdc21434e326a4caa93b5652a2eeee994b564ca08bda1c286ae12ed21"), ("06fc169330caf4b74d7ee863f1fddc311f06ef57716202f2cf67b297a2f5cc66", "103b3ed7b8d89fb5a62ccaf701346cc0d724fb38a0681b51ee79215b490d3cf9", "1fd2b826a177363da378cfc0c3f41514de3032722a6fbf1251736bdc0b0ce13e", "0a18e716548272a0acc5b9c0a580c6e81a5a827131e18d3069fed0cd80122c32"), ("1b4f903dd94bc6c4e32189311d2a3404c73f560b868f6423183c8080a60d2345", "0bfe2265be35cc824f235dcb1cd09902a3f3d401787093b64e6977c8f1ac8b12", "2bce8c1ba5e927af03120d89b0f5967b5482f7a45d6477c130dad7ab9aa0e237", "208179fe6528da47c1959b72a92aea17a4c02c92e9c74185a66030d8d83e4c0a"), ("071b6c29b8edf6aee4fb2cf79469a9bda367dfbd580cbd7c95101cfe254c9be4", "1d26f1b18c007e0f5bb0e4abda8b32aaf12d0193ed1c7f061eff6689ab6e0b03", "08f0a93f18da4dbc45b291ee0423da4214d01d87687536645605258b90c3b0e0", "04b4a39aa92ced981ee97d89659d7dfec46a1a941e4d6f1ed97feea41ae02786"), ("29481608f334d5f40e38d755254b74851e60b252a245196c78648198efccc4c8", "288b6d9be594e3171c8e21996e5bd32f1f865c857c715547866d972dd80c15a1", "15df7bb2aecc3376dc9c4807ee7bdf68817970743f36c6f57447d6abfc8536df", "25933c586f7cd6b0c04ad9abfbd34fce26919c4f04f91ccc82f02e9834afe431"), ("2453482cf4b7adec48bbd887cea035da60225ed2fcfa6953c3f618776b34d181", "2e44a7c30ad46199c6eaa87cae87e11999175d2aa43be9393af729d391dec0e7", "26767090f1de359e5f2453762e1cbd518b4ef1b8fd9d01cb63a0eb1304f29521", "2c27eddf6aac599c903b22e08c949124dbf9e32d28045668ae8c97a24554d5cd"), ("0f0de72691e394a2f6051f1fdeeefbbdf12c2f2e660a0d2fbdaf841c43c4b802", "2a96459d0160c73b2897de38d4988923ea82d8c701a4b2f548ea21af05992df2", "2e8c1048aae3f8f920c0e5a6adc4fd2918dab02069916af594b1e48b7e6263df", "066a23db8308d7e871dd04e5608940f2d11ddffdd4b138a4d622b60f3d5a26ae"), ("2f7085a0bff1f1caf863a72a07d46a5ed7fbf15ab774e6dcf74068b8088a8eb5", "27f9887e9c6d31a99e7b17976fe1f26da6dad8aa7f1106a13338d11e6d43d209", "1702877bbf4b6680b1a8f6ebb392222c4ff5ae45e3ba899c5782508f2734ca3d", "08499372dc8e5369fa06c78d1abffd3208101bd043d4445abb376221927138a5"), ("2f9df29a6fc464bcaffd9377d0dbbf2aeaca41bad101a970304010fb9433ac5c", "2805919962ea3c3281c9ae6626f6331f750a53c68efb3f8bbf1354fe14096407", "05ba7161f2f4108db2fb5729df1a9721bd7f67325ae2ddd923f0787ef9d610b4", "165afdc991e245a7ee4cc67b38b1a8c3c40f849fe5a26628909638326e9cbe87"), ("28dc9ccec3ad19c416c8bae38ca09f2c4a30df4a0f8287b5c8c34e67f204651b", "092f4db7bc36ac3af9a16a5ec14691daf8afe9ca31189cb322cb627936337775", "2554a4705b4123f7b78d0c3b113b2ddc20dff7ec09c5c37db5501ed419952cb9", "152a0d77a8ccd48d138a83c3bd6cc525b805c8baf1d68f9d691fe2e2f5e74aa2"), ("239a2889696cf936eff104f73b73b229739fa0d32718165143961e8cb253bf55", "01f5ab0ccf669c4f4e7221c3af33cf1c514fefbe74d15ab227e2e96780d759e4", "2752e1e1e4a3667302d3b36a85ffc49003e045297084465fc5e84b27c698888c", "0c65fe47c0c99d24b3b0623c504d03c2da2e6416cc27044295bb3e7f76450791"), ("054e6900ebf64dbd03a48eced62e8eaa5efb3edc6b8e0122fe4fe671a713482d", "0764a26d8a805b8e4ecbc89833fb290783e1197cc120c49c40c4d8bd08d4f673", "274a7cde27eed1d7e4f00099ce14630fc49a58db4f4abe0489dad66633c3a917", "1896c3e3606169b8a3cccd5bab3234b55baeec31d6b062a75e13b37519dba02f"), ("23fb857070b7b7eb314efa43e972cc828663a0877e2b370f33b4105a5004d9e2", "2e24d25c4129a0e7682e7126e5f6960596d6e9db2a9738ae9eb36575cd5536fb", "2f55cca2b25feeeab6202702d9cdd05f0e11c5e69c24eecf51ff1dae322740f6", "09c2d3c61c193db6ad8a089e77a0d3d57029f66a414764b55c773bcb388450da"), ("101c6f6663f8af1c4acc14fbb2f3e05f7589172d905fed56daec93971c2873f2", "2b08f1b1cc71ac391680b8c7411cacc4b0fcc4b01cfaa899adadc9231b8a8b8b", "25922cf7eb88507bd3f184ea5c4af40dcf164dc4cfb442b5bee71b854eb70e34", "090873c28fa0f88c095e3e5cd01220971b5f92aff53263036d24bb650f011354"), ("25386dfa31d6e3808475d326364b9a0837ed62d6dc96e3ae4eddb177c0873109", "283bb2f5f7f89606da5ac9bc1befcbd9aae3d49a91e1bede9911bc4b307a1dd3", "214009fc833a4d27e99b5bf2f639831a4dc553b1307018c758afcabf3ba1e6cb", "1d4befe73d2c6fe71e1d91a3dd031af378f88e57a14087f5b536efc1f30bd0ad"), ("0290860178f26d36e9d3093213ecd2b6eacfb979fecb011f907dd04b19b7f703", "252cca08ff74cf7516da6a114de6195025d0a2a8b7d7e73254d3f2fcc00206e2", "0dd8097d2537146769cbe0fa3600b205b8c1076c8fc10a34404298702a5b95f8", "21de2cef11491863e995a1ce4daff2f2be47e4a5b0225a4dffc4ed8a94125c7e"), ("0f54d3549b3f607fe3dd759c7d8039d4b6f20264508b3a698fd817a9f96ec09d", "1ee2d7b84682832a09bf6f3aec477bda002bea287ffc4aa367531bf262e93076", "232c6d2a9de77cbd05b1e15f90b3a0a0a083ead68850e792f45b40b51f6f79e8", "217067530b8ce2816169b6a3b6de7de151eb0844b295c3d88e81d0eec9825910"), ("15dd696ec0c2abbd0a7217d731cb78e241d3221c91995cb84dd5f88d208adbff", "2a371cd4e55ffc09395ebbbfedb68420978fb91e5d4450d3f1be89a4763af0e4", "12a06774d6ba511ee5629bc19acc797704ce8294ae04b832a81551820fa8d8ec", "0f5412bafe0f901dc098421562f4d7b69e0debf76efaf985341dbdce92eede65"), ("260dc1146f2c1f619c45b214f17939adfd7e196b584f1713a0eff97c5ded99b3", "2236b063b7c2a70786aa57a0cc658ff17e8850e469535460de362a47324c5e0d", "0764aa4a1b02d959222c4b775911c9b59462af39b669e97bf988b86a38a22faa", "0167e4acfac15b9b74f2b203aa0fb4732e804c2d167afd001297ba76350df979"), ("04e15a3924c4965e33ae24e9229c2d6a9e7236ab09e422db287f8fb62e2f2482", "09d7153e4972d6671bb1446f284f58ee1c1f7e41dbfb55d7007969378d250488", "20800bfb6c545f9a9179e6ebfa7bc0678e60c17e0906cc1df3a4f2f878bac3dd", "2b557da6c6544cb639208fceddcaeb92ef825591717c4fff18ed8baf593515f2"), ("2b9ac01195e654bbe3275204df54f5ee50ed84f616095ac936eb1446c78b4476", "04859fd80e6ba702603acfabc5e7282521827068f2a6566e520abf31616b816d", "0208b371badbfc0bbcd34716b8ed46faee8116187d76eaf3784ef4901301b934", "031c90494fbac25153c4e2413021e3adc5d0b36a9d475f76bcb56b0a9c0c0ecf"), ("1b4ffe7e21ab2a3719156e1c4cd41fd40d9c02a731723bba130ce5233ea9ecfc", "021e40c136a6bef0785bcec411842e88f698b98af5c553a60c874ba126dcd97c", "285c154b35f60597bc61324024cb0070459fce708b5e035fd21d9839e94ef1f9", "124f008589389e132e1712f9961fd93705bfd28df2c0941fff3ae4cf65432097"), ("0cc5097c279bf4281ab8aa16bfc1940c3c495706f84e143c66a630c70f40e2fd", "0bfd1af0ec91b68237719c2a0d3c23754e240ecb31294f6b5767c2587d6b13c3", "304aec02348a3ca171321e3d32fbfc77c201944d6d2010ecadbadec81df442e1", "0ea79b37a521e1d2eaa029aa3109ceaf2530cc20f1ee6c1376b54656444bbe53"), ("126b9e125e84b807197e7a427135813c080193cffc2aee50b1e5accd615e5b2a", "095608f8dbf062acca3972c748460f5afca029c5a441ac566863c9462276263f", "15d02873fb42e86932690512984840c3fa56ad039e9c7be657ed2aafccd5ac89", "2d2e04c386668fe97dc19d715b0308e0a444be9789bcca225baa60a68419d70d"), ("2c1da28c9676bb2a8d940f1b4485e90030bad43719520bcad047f06883430b97", "2baa1b98118dfc6d0d9ebf40384091d7a62237d6081ade35a66be448a7a8c766", "288a5372ad2abcaba5611c04c1a889aa2fa06829b0b32b29070dc1d1ff1bdeca", "0d7e588005fb382d7f4d832e83c4a02911f65970772d8bdaebd3f9937a73ef04"), ("2c41c9937d12addc19a33d68ed6fc3bfbd92bce0681325aef16827b2d8dbba1e", "2347be786669e0e8ea3eb43cc19b365f82e9656c59682ea9cdb400cfc35f5853", "0197ad8a01909376fbfeab2701cdcc50e65e7126f6c6b10ee898a031b848336d", "1e0c5057e678f47a8d11a553d636b9b5eb971e7b8a91a409356498e21a14e446"), ("2c056ea82571e17348595d2b8939f15b325214633f53fc7479d3013f3a9e75c9", "114b100489a2b3283f1a39b4c90acc1c8e7afdb271e43d7271c7dcc55dc75aa1", "13f392253d54c74c8ce946764c0564ccdf9c52a0aa41d0958610e25e5929601a", "0fbc601f028a88a0c989ef617a22c1ef9f3b2510389b92fa3b12bc6fd31c2f3d"), ("2c7094ba458c484d3d9a8c2265590e52cee2a0abbc20b430ea8b3d5d7cd885bc", "07875c7f7c8ad1bab16e674044998f988033561bfe3431c9011cd3456fb1bd66", "1b917f2f6cc5142d2711a1fb925f5f5b4eccdc52bb80370cbed97fa395d91828", "14dca376674027838b40a61f881cc143feda98efa9ce6f40257fef7079d60a43"), ("11d59332e754222db47ef579ffd38de2bc0d46d473dd25f6dcd97c557d840c8c", "23ca1e16a7386ffbcedfb646fd776565361412592e562646cd19c466f9712d1b", "1f79487deb2dcc24707385bfe190698e4fc07bea46f204226b50bdd13ae0ce77", "25c8b496a8c6982871f51276758ab81d2e7cd8437cbbb1360d98468b2118d9bc"), ("0a924c8128932317ee7b0f932bbfd4b7c9ce8b6850a126f8d4c3ea8ec2fc1b7a", "1512933cbeb4d2173f3208e9c18ebcab1aa0451c7c8092550922fd68b7b33cc8", "13878da595790d90b192326904a176a552e71c150db49b50fd313a25e85ff5dd", "27ac085e9f080c30e91f6d25817f0cb04796ffde4e44162791a89a5a63df1780"), ("16290636e4b5a493dede2c3076ae4f49364acf0c2adb54e42abf66877f80e1b4", "147f43fd563ddf4e7fcdb1f9ea2bb69e209ab630b3ab12ec6a1546aa22a15406", "16385ecf3bf593165e5488bc9c706aac10c55d22c2c4565dddc41d4555984152", "1c61d3bea274fb403d6908604c49bbb6f363d6141d800d9ab0975078a571b844"), ("118921b1855aa25a5cb4aa531fa7382c3ad7d8b516ae36d8cdae636860fa82ae", "1493aeeb85ea650a6250a60116a03c165b53195e338d97fee51fa6999469db2e", "0e158032260bed7c8b1b145f60a3410f0904f8593e8004c6dad721b4ecc37d75", "16fa11a5ccc8c55c33480ed1d357d6aa4260c890882d5d553370637526f1f94d"), ("2f6ce635563b553361eb6a3b4583b674363ba7d68c13e6be2a68bb5a48ce2505", "0841e79c9652861a6f70a868ff6d30f5b7e420e26c4bd311368a78cf1270eb7c", "1d48ce2b491031fc485a117f69891967d35129c3ee26db9cf0a3875aa8ade1cc", "019b987bd937477f60a3b6530d8a2bd8755d3ab3e329bb9b2b324be3eff43d2b"), ("0af28038e02ca4044b4ab9a76eb9dcee880b74970a2a81e77119a77b2bfaa5b4", "0556119ead69b41fc76286d087028c1ccd7cbac6bc9d3f10773cf270f623703d", "28c39a02ecebf499083bd60bc522e33377eb7c3ee897210885f2caec8b9be147", "2ece1fcc5b0e3b3c77c6cc152229d4c7962ff58bf4e98cc2419e1b4b907d216a"), ("018803a4d97b8d85aa5f20a2f0079e52ef6ebbb6e4e0b0b0bf6cf37b650f2024", "264ef6ea3533f60d62c1284b6539eb919655c4579ea7b8cef057ac2302923f72", "28295534d66b716f8bc8545652e3e6271cd44c3dbfa7d98713a092c602b09243", "05d4d36af36d0f0f5a0be8a98ce51ec098d8fc08e421e4b36e5e74b25946ab55"), ("185af58db4be1b04167eb30dd082647844e7a892c55bc4b97455f90cb6eb7583", "2c9b7e86c262ad783bed149af4aa2ffa7114f5332217aa2a2b9f6b349a8bb548", "2c57feb9e6adab1b555527bbd69624afdbc93eafcafbb3332f7fa82adc0e8880", "2fdbd999310f565e9a3218f47f1756fa22cab2460fe02d0dcb02d7324fad60d1"), ("08246e08237ba60006029fa9f4e27f1d010e30ef0ba3aa4482a042a1fbc33f35", "27d04493598064088224b6d72863d140ea0843baf3a0909b2c02fbc62b9515e9", "1481bcf5b6ddc93cec16de04c4d14baebc30d7391010726c576230d3e4d7a222", "29a263af35fb529d7481538d7063607663d6929452eb9f3251f0fad8918ac866"), ("01b48d13933dcc9d7feb454c65dd9015116b6ead682f6fcdec5b95d806755d0c", "100c637314252b971070d83a89d33043a9e766084bcc414624743af70a3898d3", "2e1be5b579a88df2528096ae7226cdc82fe463c10a181a42157b07d61c1332d5", "28455cb8bbfedc5b59102eb7f44be7a9dd3f2e377e42710a85a1a29d1c4c60c6"), ("04b9011245876cfb9a055c5e94854f1ba578ec3af89fc913814418f249b8a6e8", "2187a542c536368a760adf2bc7726aa49d773be6ae5e1e9d71d69671c0daa9c6", "17c62f08738bc1652904b0281e97465ac365dc709da4189dd902198103be8ad0", "0a4264f25aa89ceb8fd1a6122a6f1e0ac1ff0593685f5a1f14cd2f53c0ba6a00"), ("0187ecbd6aed9366f8954c226df64cbb66633bbf602d6d864edc242207430fc3", "1f26cb1925a0830fc9a178c3e8525d3e20b5f346def90025016aba665a9d126a", "0f4b197b62fdda2c7ac0d51ce3196d8b539ec2ac9a0c35af6dd2aa6ab3f769f1", "2cebb8a41605325ff9eb5770114fabc78a897580e872025ccd350cdb1c3dd285"), ("24f1b6a30aa8372d4fb57cfc649c11aa8b336b378fd8058732f43237007a15ef", "0a97486276196d8075dc0f9f32866494ae2dbd2eb21010e62b754d6687a51d7d", "214cb251a0e763c03b9c7c2c9f180fc22a2f952e5c5da4769824d0f4421a5488", "2c54c8986aa6391397384baba6575812ef4022a5440fc6717cc319a48a270aeb"), ("1579fd452aba2e14a257dfdf20f505d033d31d7a3e1a2ae804ab3c9381a87d85", "00bf8b1fb1810cc314df982372671bc01ad828fe8d6c2bffaedaaf1612873dbf", "0b7888c64156d61cc253747ddaa9396750aad9fcdd4f849b4b89d45796d615eb", "06fa0bb3d378be0c34836513e5b17845c1fc2fa8da002f7da6cddc61ff7a74a6"), ("300ac84fabd83c0ccb98b8aafda911354e227a00b98534765ac9b38566e9d032", "00e3d28efc4f96450633449a32d5c10d39c75f131e1f249d2d6a14026aece5f3", "148f3b20c7eb50199412aef5cd4b2b702ca950a845e753c3f077783e41b4bbad", "0a42c608f92651b3c44587e9bd91a5bf2ae05c782959dce69ac0dddea6af0412"), ("01a60444d59595a881502d5e23362bddca69083f0abc1e19dcae2ce98273407f", "0d393af4a60486e64e6a70d755974a1aeee63b78c5bb615da3292d9413b206b3", "2bf89a6fd50f59640ed99cb5f7caf253364adc87330454999f47b15da1c084be", "01f96613e8bad1c89f3dfbc2a7e3768e8379e438b079b58962b341d650d5ee38"), ("211cc57bd3f4413ccc84eaeeaa376ebcd31e33c618f82544ecd0b3bfb697b980", "063a48c5995a47b991f5a6c4931bcf50cf4cb2223591486457d6cbe87a47a560", "0b132880146e91ff4f15157c1a913cd3b32962d6e57df8be43541919852b2fab", "2d906632ed93748dca89b188ec4c9a0b04381e12273b805248ff84af64190f32"), ("304389cf5c450d573c4189992933f377d9fbf58af788ca783c14a09a4fa8dd83", "1107d9970695b66a19675f9392cf544f2ccc17f5640ad8b375e21f9d3f7e972b", "24d66444aee8a120c1c4d6164d40229c2975f2884451b82798b3215bb8da7f22", "11a5531734abbaaeb8c2c4918b22812319f0c497f04fd57ce07ce071ec1f3d8a"), ("05f5a8910e09117b9cd0d446dfe3474b6d3fd66b5ebed0555693cbe36245f929", "16931d7f96f98b27a06b8d1df46b78e1362a82278de9b4afba9c2e7fd71d223b", "066803d16d6ffdc9028dec6757824543553cdd66319e1465f6f63cae805e556b", "2e0ae55b69d05ab92ebf343b8651b5f75d2542bda9febd6607652eefc98e51c4"), ("0d8d9e1c34d602f85cfc2d0fced9afbf112946d1947337b52c6410073c4635d5", "2436cec364fa49ef2f577471ef03d8b4bd6ce85e9b86dcad535076e72991c02e", "0983469a10053fc62cdf9f9dcc380f3989ccc4a0d68f74ff74df8322e5636888", "17c9718e7d78049070980b5fa3caeae3104ba4c7462770a795000fb93b0ecccd"), ("0132f1087b1e8e620148b62aa450fd1356b7250a3b630427b8cbe2118e8e0304", "0d670e9a26286dba520bed5722310986dd3a39cd9fd61ce14a634c10bc766a3f", "2e57b9640b4d1b48b0cc2f4e345534fd221e56cd273fb761ac8b324c02fb53cd", "2c7bfa9b86b3f7493da61b587fc1dac1a87c3d0dc865de3a803b0b0145117a87"), ("0fd727487c56b9468aa4245b8070f71f9a183e10592c4064c5fea1dc38b1ccd9", "1d7b6b4a7966eac063f1af42ee305a466fe85fd2c96f49c5ca0f531dc6ced6fd", "2442e376c7939cfc17087aedf0c9900c27ca09dcdeb3832d6b8db259bff1ca77", "1dd958f8d7cfd70c5123eb511e16962b045daeef6f85fe25438dd329f3fb63f8"), ("240dd09036b2ddd70a5e1a5d2043b0fe8d65146a16fbcc2ecdbd6a394974dd4e", "1ff4348ddee68562fa84a3acbaeae72b8463b862a727802835f2a8592ef8ae20", "213a577d23fae165715342c35d71ef813b0b5e42f08cb5afc3ae4daf09a97385", "1c10525d3914a8a20e2cd26f1748e610fdada205045aa1c7f76dcc27a9863382"), ("24d918cc54d7b91c5f983324f502050a5ad4ddf0005de0ba5daef69395f91077", "2401d66f9468ac12fd215b545a3ec3d605594d7f2804a53482ec8a3bf8d588cc", "23f10909e624da936ae8d699110a0e70b419d3f599752a4e3c0ecd816c9b2dd3", "03d765bd0f9d9a405cb0dc4b551db5a75ac3672920280c8de3ae6042f704470b"), ("154e98f6fd72d89f74e9841817ba26e7986f87655d72f6c3201557b0ad2436d9", "14487a80382a892814cf0b21507c3905ff90f00f29ec69e7064b9ff0e5249c2c", "2aed8ab963d1d45e3441f38369f7a3f6200d7ece2cbb1df985c2341e7a312de9", "023376d0c9b1f67b8612f686837d6f30ca968aa2e08a1e34b878c8b403e8fd63"), ("19a2e0f1891885a6994ef62ee1b24ca566a1a3de85486008cbf6f813ed67b774", "19be12802c6e2a55ab7633c1f2abacf632ea07d09c48161f5a90a8a023b03d12", "2d6c3773adda41af21d262e111993a0ee6d39db9cd2e3729c39f3c307052a167", "15b3590cdbd83d7f7f213cbb2dc143c43a407b1974cd5e43f4745949074e2e3b"), ("0496a434fa2141269a3f36abb44bf260d87bead10a0f97a94c98405b4ef2db18", "1329f821bff8a8726c5ca79107e02208f6ed019cfdf66b686329ce041caa2126", "148609844f1f937c144cc621e22aacd9ffea8c371653fa08b2fd8b186ad65c2a", "2ef97671e06d359b9f6ebf83d1506878a82c53ab4773765c78658c15338562e5"), ("0310800c5f7e7743a6953456c90c499539d89d6a82a4b2c3095be42335fe70ed", "126786ca6adbf09b592e25bcc5f17ca885419d7b81a2c0bf4a3632e12768cb02", "01d87d93975c42a7c26f4346f65ff8c5cd901fecb983800b9a8c17773f6c5f5b", "2de4d217543797566bce0196c7f6932720bfaa1eafd6f7f03d17ce580c11327e"), ("05d0a9a3d0fd7c82a5c2cd0748073ce684722ce9813897024b5904ef0a6c74e2", "2d82a9f7afbbef5f94ec5ab7b86896ed5e8294744d5ce41ff3816e24bd6c8cf4", "12f6b8321de5c045d5a78d56396d082236e9d8a2a8e921ff0cb38e5d03997744", "2dfa20da594a75bf51640d3e577483abad10078e9dece9010414c11c4e088977"), ("16eb6e80d84767f210ce050f6fbdaf7f6da99a5cb40fdc5db76841c0c806fdc3", "1496e281d40b8e9372d2654d365ed5488e39fad1db2049eb15cadc380c50e5aa", "1ea6faf9a28b02674c2a1b3ebf17a193ef2a700a0f8b2c1608044fe6218aa604", "2772b6f138429bed7cf31ce56c191a3ee67552b9df229704aba2a77a178466e0"), ("24ea8a722cc664d0dfa35a97d405fa45d4bb97bfcf7d2247db353843b6462a4b", "0d5d6f44a065c92f73f428541e4d664dc745146235566a60fd8308a0d701c2ea", "085e948af24ade18a8e80515f94b7eca45a8c21a43036f9a01afad3d3b7cddbe", "2a64ec2121ab87a12307ab9577df565cd005f32b0f5c6e7c6389ec58672c85fb"), ("25b3bd886a3a1d6bc3587a2b7e0c0ffb5ca7640d5fb20077c81bc11fdf149ba9", "15d7fa8167fbcc6f132695ce331541693c05e76d16ef9ff5a5a8a650867afc45", "25ecffaa0f8feeff6b12e2f41e8954b45b7a88bc573c3c19f6c78f8fdcf0da0c", "2079985ce68a58cc661412fb486c272561aa93d18dd869139b4a92519048da74"), ("036893b03254b3c4abe66cdb863c6406ced430a679c51d29b949d58cd5f9cbfe", "0c13072abe8179f97b858bf87a13dfe82cd3e12759ff513fe4307a5d31a6c476", "23e2c298b3ef6c4c98e2afa9d59e0f89f6865297dc55a25549c528afd9fd29a5", "268b65f68ee51ab8f6afc8bfd3b44a685da60cf198300b982445592bf419ba0b"), ("248fbd3acc153fbe6e6788c19e70666b0878acb7e019916a9837b26231685570", "0db8b7dc4ef01d2efe260f5b3486c41a70a976e27279722ba2d2ee76f90c89e9", "280c4d32a4170588b2887ec18a9c2ce19d1cb8069aa6f0232362de562f76fe9d", "1c4ff7ee29130d55b532e6abe7edfc93d441586aca5a5a65ceb91468d50e4c21"), ("2d0419beb5caf4c526d26a0653382495aac83704b78f77c1b641e95dbe813be0", "2633b758c274f918c0ba6b762edc4d537983cddc418d8d334a76e89a611a04b7", "13f7db4161ddce28d9bf4235e8fb5c5913cfcd2fc69f513d150a2520e91f0d42", "04084b3294cef5fd37da480ca65af1fb3c06a1518edf1441a84d1b3c09c266ef"), ("0408d480ee5b29030d27e778975629e1c71d07447c2bb53008fa02de50b6e166", "09120938b71197f995047d5d5c9ca26aca6272b4055d527cb8e98212e34f2f7b", "2d0d44413cc4b807aef2afd32435e363ac368d89eb5ba00fe258b06f30abf87d", "2294af11838b84f843f149f6e4f9c332b9a50930b5f2b0b8fd830b00a1372981"), ("05956b7a4ab75f7415fec7eedca8da1fcc5ca5636165700b625635d626baa21c", "16164ad2938fd1eca20548d1606d7e1ff8ef88199231c8943e077591e659e054", "0353ddec55050f50d66edd834afc77fc69cd687d4fca99cd5f4ad2ca79db92e9", "074d651a2774f245544cf98f4ad3de89ca9391447ea89c606ddc5175aa2daa29"), ("0338bd1be9fbe5a60f8cabe7b20f7a87a8f736cedc95c8f7605e96f5197cfd56", "05ff761930b8a58b91d48db3b3d970f25d07cc493b3757056134e2085a2cd99a", "1312a0a449bb91e678117d765356ef03d566240c85862b66bf4b9a34219bbfab", "1e5facac44fe5eccdeecf0c9d8827d2011f46f2404f83773e35289df2e306675"), ("2c3f959a44d1a08f37ea5fe365535da6b9b61890f5017ea8ed69c2593151fb74", "14c708c831a6bd60515b065346934b38e7b1d41611070cd47a19da188ddee8ba", "1098d3939c9ff65b0fa3a7cc9aa88400f5d611d35ec936856e8381f76d4a63e3", "0cf16f00cfe1611e9084f2ccf2b424e43390a0edbaa0abb2e6857c402d99a5bd"), ("14678d5659f7e978f7f1600db6fe7b2d26f638d16cda561e778b09400b651e7d", "0a0c52615e68a9af54dd3e6d022f17c9e66f54a3ae2e773f9a65139865a691f1", "197d3a38292fabb903d950bd2fa77122344c031316d227ac70a2a641fcaf61a6", "1000fd100f3c175bf9b6f1686962394a7e40d6fcd172c7630c76986407dfd154"), ("10dd15ae206967d9f13e91734d0f87001e409812f67ba4b574dfd97a243819ee", "1bd8e8ee88eeb9043be969e4274812d967700638a226f199786055698673d5f0", "30518a3d56a60a5b271149cd791de4af25c73c83033938ba1a73a59ea7fa94d3", "04adf0b69e485d04844736efdc7b2f2353b125badfee4660abb55e6a7a02710d"), ("3030ead480f0bdfa65207d54f9fd6fe27fce78e85fc920e100785e4ab8f6c1da", "1274ae0ed50079251ed8d28e933328cf06d2d609002430c70fc1bdcc77fce421", "1bac8523ea6d0b922bb43065c4cb91c3e11e3a317e9408f54df000265c10a1e3", "0f37efcc8f04ea1c576e4f5ee055294c20989b4fdfce4bd37e80ddf6b98df66f"), ("06d6c92e3e648ce8abaa7a718fb9d34ac696c7bf30877ae275c43292a87a1736", "0536d4864f255d2606295f04d352a6efae58d02eafe40f939dd214959ad3d107", "2189599a53e55a6e7edefaba09ea43e746fb21ef4826f1963d2b3273fa89afbc", "0b1ec6ba89b257b142b09d5301ec8d9e69899e058cf879bc8813131aa827c1e4"), ("2cf6f7ca01c9e19cda80b319c6ad3c0a97810e8bf74ce9efa4254ced6b75c8e6", "214253f9841d23d4c9436621512dffbd7674d39928d7fa5934297e6e63427e2f", "14c94b7fa1d5d65895e7a77c6d0238497b02f9d56fb47b4642c8086746dd4bdc", "2137387bcfbbd9b598fd4b76496cb4aa387c811bc644df7df03304555079e8e4"), ("0e1e9677fcc9f6aabf517e0909bc51897eebcfdbc9514763b1ed6ec927cb8f68", "034902d68363cb7bcafe6897d7afbc192f09adfc66907156b0940afaff774648", "04545b0c6f6d9c158b3c1e4d44eb56ef58ee52184c68617892bd0ce63577b572", "1f0a34fca4b2fec017ef7883bfda563b7a7f0b98cbaf16c4dc432156178d2b1e"), ("002268d340695b59d9dc4582e712dd98aed595e95844a86cc3a39ccec025e104", "19b1edc301fe2f90620ef04901e6ce28ba520f0c7aa4aa31a710c76284d679d4", "011c810eb5b3170403446fceac89bac9206c615b3ba6a4f3b740325e36d59e80", "30182ef8af4befa5b8b6cc6bd6b8a0f772d99efdb290d0d3c08537dfae429edd"), ("13a58eadc043a105c2d42bd4e53d3f1fa27943965b1c21f713c0c5ab2bf2fe5c", "056d41b5cd30cd192045e39d680b1b8e321ebc8610a8182f47db56c2440f23ac", "01528832939ac37405d329ab9c8956b8afa58e795e54783f38f0b27f898d0819", "12b98c56160ac1fdb3a735d07aa74f5ade4b1740b66e30eeab615b35d5d4b432"), ("07a8ab67926a303a24e84eb217250c7f690b1421df80bac0986ec4f416e79996", "07a2eedd68c5a922a36634062aebce63126dfb789b09e64a4894a4b24ce19f36", "117e399a628fe4bd1650821bb52568b8cf3507455dcbd17a3f59c41410fdc9e4", "1f8f47ac25a6c2b3a7fa266d905e78180dac487da62ce2163266152185d0eb0d"), ("253cef86abfb0d6120f554ebf2d29f0e42d6f911d097077c5270f81f5691befc", "139e862203b647490f448aebb452c726cd658f26f68c4abb9562d9f0ce99001c", "0c8649b844842069ed750e7e5d713e1dfff179b107cf45b7473dfb39fa2a5aa9", "1bb4364c2548a44d59b0e5a765e12bf96e9b585bf3d5832651351ffe91849914"), ("0f392e9576606662683dc4ce92fea1bc5aa64ca89a944a29e67f5e6c0ac4a452", "0923af786e11a2bc757ee565d791d85a4e3c6e9570d7484c5dbf850e71ac7ad1", "0f588fd9aadad2e4bc464054a0746d574639bcc3687066dfa0466491a42c19cb", "26074606afa1701d5c551dd4688e9f4f82b479e1870087ae79aa60546c030e3a"), ("1ddde261782a5b8b682492626bc93d4bc4f7c78c910c14750b1f12e63934ce3c", "21dd69d6e8e192e897e488dbe9192e18bdd872d684387841eadc6a43ebcc6f28", "20c41839481c7c916a6fd16fdbaf2cb8cd9fa0876fd2e81ab0b5ab640e548ec5", "06b46383e843467d41ad395def21c1b9a3478808b1034d600b5866e7227cfe70"), ("24307b01413dd201ef2c6e9be24935687a998c5a38bcc39e2eb82b1cf81f875f", "187e22c6f8831a513ac2ed46ed65a61851bbf53d9d2cb0c04f70b1d51ff059ce", "047c323b1dc2a0acc9d8fa2f25591031f8e346144cf60f5a4b9e59daf9309364", "01b9f08448d8a37dcffe392a10d440c04d6e3b5b0f958793f08f4479bcd73d89"), ("215ebb7a3b281f75cc24442106c20649e0e6685a89f810d35c593b635998f44d", "03f2da157a7e67e55f3e0f5940271c1d51fda54c74e47aa1b7d508d79219a268", "2e7c3da65706c2a4d13072ef3c8def433f4720f39957c2d141ebece7ab46398b", "20adbb433936095ecb3324da3b7e6ed6c53c5652c3714b4c8788d2e73de94229"), ("17ce5d95255df0ff4e9441c84cb48f3bc63708e6bae21d10ba414d16ca4902e2", "3058cf9d4169be40181f840a22f6cd70bc1799d707352c38276bbd13a0300209", "197fa0e5edf506e40db2dd04369d14da6d92c4682a9c3e8028f4b5ecf14059a3", "1bdc22dd8a41a13c0ab02684099aac3c13f66060140aab06443a9351bd2c16cd"), ("0cdedf7bcdcfcbde2bd53b8437328addf98ab8aad0068283ce5685ec4887938e", "09c11450ef981dc4233009d3b70b1824c03073ed9d3215d689b4cf56083286ed", "1498081d1328b7305afbc201eb41c254f742599bec46a4d7d97dff494d702470", "2adedd442341fd82e3cc03d89872316f7fa5a8d72eb5db7ba4d18e81ebba54fb"), ("0fb761390a9f1c6d8adda2e2aa73e1d19e75207b1d8d7a0f332a189917cdbb39", "22781397b402d832df2bebb20097974d17a5885c7bd459e70e14988aff7fdedf", "1dd61b82abfb92711cb10f02597a60e458fc981cad051196bdcbe3b35093a5d1", "2d71225a3936be14571737de189c0bf6dfbc73b75eb93dee05db2d203a4530ba"), ("05090c3e0e61bc27beba920b6da6cb3e92c871f7d9c7ba40d170eae91ed8fb0f", "005efe906fe4005894d998c910b0af17a98749643e27c7508a3bab3571c6fe06", "05880111a429b834fa39ce6c67da89a54d2563cad3e87d6a44bb4e2e8b356ebd", "05fb37fbca75a60307215352c4d1bdd68bc2e6de35a911ac7010e0c2cb2f855e"), ("1701e9616e332901ee4bd9eaf5002789e33b2dac5a4e3d0df50142090de278a9", "024e7eea3b3be792c7969bcf03866ea5a89a117926b5af64d51150db0b08d0be", "12d25e136573002645b416041d247b8aaea00bd1bc51ddfa5026915228c140ee", "20ce9cba4f368744ead060e09e41c29cd70864d8db1bac92b30063a1b643c6e2"), ("0144dab83ba6b831faabb96385f48cac5a41f3af422f9613a48eb989bfa98b84", "2580e9b28f42d408808d0988a9bee51df93d243600dc974ce8f0ad40b3f5c1de", "265e839ccca96652b303ce681f9649b2a438d29c0f2cab6531bb79ade1f64c5a", "0178b0765582eb8b176c9af0dcd84fe421dd01802fe7a476bb0bb5b29a9a784b"), ("144855f01ae240ff2196a89bba7b2e422c4706ed4c3124ca66c8bf3dd5b64362", "2b85fc16a62e584eeca122a0b580207c569e86e4b23ea72957d67f4d49e78241", "1378ab30115028587bac22339930e1eaa933cd424adef2b98e6b310dc4c3e2da", "2cd9d2b1e2b9ef4e50f906237ed21357aef47892ce1df388200828f33f999b3f"), ("158e2da1b8a8c65ac836476f81b2c86d923ed20fa4bec2851d8913c08a9395ed", "02bbd4b7f2f28a3bf8fda362cc0be9c15409d77d3af03f41babcc5fec5170039", "1a731a3e465a98fa9c8af07db9e159687ae81e77d8824b4ba1890035b655e778", "027bf9401de9d0c344e5dea35d66b00dabbe340d6784f01b3753806c15bb166f"), ("02168e07f903976d4662f05215a442510b6745f9587ad208f54db14fb2d0d2ee", "23b7d2dbbc11e571725e0f5f5f3a3a9cc30e464ba58eb0613422be05d2c65ef7", "17128b8e8e41999c48cbaa7cdadef9b7c0ff601f21a0e11e8b990d4034ff7282", "293dd1aae581059094203a2d4c74d4b0cbdb331dc3de6deb3ec293d23e0f4c33"), ("0ac54dcdcfe2f5fb5d9fc9cc1a2dd48df20051035b045f661d73ae0b50a366ed", "1942438f457fdb10a346d18eb0d44fa599d73762cb4cb148850eba4f8a95f042", "1bb68867f2cf01d102b943fbb6e4a2a6e77e785953aa5ae24ff003fd987b3ca6", "0dc581ededc1f5b1ee2725348442ffb0ba064125b04ff31b2f345fc6464ed69d"), ("0b5bed59c53470fffdd4ac338d807e247f8a9143f0946064c53305c30c92836e", "219be42e3efcf7dedf279f01970589b2a7416b20b6c0b8ab6003899bcac08e23", "06bf41bf700f17994417917fff6c3de3559b0d691fb9e2b502b22a89b667b1d2", "06ff0da609e22abe25cc3bbd6cbf04172145c2a411d246c5daa38f0a360619e1"), ("289df81c017d877f520ce3d3661fd7050ad32c8ab4d93aeea011695bd4fb274b", "01aa566ddac8cccd521b4548fc4b1b127211fe05f5a9cc01daa87c8c3ce5630c", "0a1c90ca0f56772850b70eefa783b3dc3bc286b4891a2abfe0670f5048ba1a06", "1b581b5f6a41d830cb121d632e1e1cf6fe648d4c31cc552fff79abe9a78962c6"), ("23bc3433b8693648940f061680b9e7518f970be8662c4a94e1c78d6df2dae79a", "0f245f23e61aefe4f555574f7118d9e217a3af4fed267c36c8b5ae28951e6172", "0c51df0f516fd901495b7a2f650ce3f5d9e08af3c2d29e2bfb0bbefcb1524545", "038853bd5c15eddebab707d95150e01fb9e26ffe7f33ef96f9dbcc278ec4a270"), ("05cea319ca164452164d9072d0159960447033f75f6e1ade6f5570187af03b41", "041ace9cbe0fc89238c3cf60da3d80be3675e1f0c17670fe2ddebce170a0a57f", "0bca8c7f67563b9f181aefac9c39f51d4f38142b7371469bf5b6a85c117f6b64", "00767bf577624ee5cdf5535e7ef865ef11e41b304cf3d86087e66baea8e518e7"), ("16350fc28648143a52d6afdf8136d072968d538f6d4dd8da82ed295266f2e57a", "1a25dcda8b67d17f99816c88e24dd599625f271597498cf80e5074b6cd00f93a", "2d28534c09c03d17e4ea2ce99b6cf67d8ee26dc0b97e8465c35a29de3187c4db", "22eb7efc6dddd606022a3bb345d6db1fb808c9d4f590981504165685a529a8a8"), ("14b0d52e2d9a4d5d13fafe58a3bd59aa81ba340213a3ad9cf1d1a826958f7130", "218654d912ab0e81e168b28ed4abf1766a792323e41ab693aa625bafb763f957", "0030387fb9abc87223d687d03a56708047a5bde22f11ec62bfe8898d246349ca", "2b51aa8e2b850759a0254eecde129bba6fc961953a84ab9105ac9a95b071de1b"), ("121106c617680186d9e1618621f06fdbb395c176db704da8f6cece2053cfb853", "17db139f53366366f3d1f4b9eaf2d98ade014d94f7cfbf69373d25c8f7c67801", "0729dc737cea0932ca087eeff1a2ad06cac9c6f93edb3a97aa033132713e07cb", "0b83c8c97db959e6412261b8bc1a0c0145d6f8b9b76804f7f2948c6166fda281"), ("25d4e77d50362f350c4a90701d18b10380792856762050baec74d335e09b7516", "255b2c9e6f6daf3681bc7c1e4cd66ca0603fcf64112cbefada6b663e99f924c8", "2f5b331dbe6497a00c03b056f13ac377a6adf1344ef0fbe9c769c08fff91c1ac", "0ac9a2a7ed921f2fb8a0c4f2b30e562734a207187ec4fdf6d7c5a2daccfb07d8"), ("1bed70d9092a651daf1aedcc76ef037b1f83beadc218512becada0375cbc5669", "1a3f0e48a38d41c390d1fda514dcf9af27fb98856ccbc4c997f18ccdc1509113", "1eefc11c09a0986ac178245b1292b2ac03f2fe0192b0e55c48ab702243277a06", "0f38751949bec05601e5c8a10c85f1f334f56f2a908b91eeadad3b99a424095c"), ("2ea41d7402de42a2adb1355d46055b45f0ee2833537b459aae6b25bb5f374fb8", "015187d8a060f6113cc6558b4183b861b64965d1ef3ae83fdd9221db0b50dbdf", "2d419b91d1bf8e68689aa05314debbac1758e70e348ef29a3d2f9281ab69e7d2", "2c7ccc7d1926266905780786b3af69366f9977103854b411ddecbd65fb299460"), ("109698c1eb8ca08b58c7c712d043c21b7bbf241b22a387ad9a32d85e4e96e9cd", "0327fffe7f6da201feff1ec593a1ae10d8fa718b9ceeb9c447187ab6cf4a1166", "2b938b14b420088263eb2c7db5866d035d1cca0f3a07ed9d529f737ced25b9ce", "143c0e8f37611f9b83737d1b101a06b21d396367d134aa4fbb87c890c98a9801"), ("0e3018fbc6e1ccdef4a107db4c2dc104831a20ae756fc2ba0057e0fbc9796417", "1be462b10ea661958ef8541f3d2062f82b206aec25bc3ff87cf18b587ecc0e4e", "0d7155e26ef6216f7123e1d9b877de85c883c4a67050e8f77b7aeae338f32a3e", "2057e5f6e1dfcc0643361bb87d010d740ad623804d13e0978855e1a772a504e3"), ("0400c1919c162322a8b72d351fa1c34cba60999f8f1927febfaec74f49ace552", "1ef7427d2db9825d2b0ad8c128a946bc069e64648c1301e9912bf236e527e1d3", "012a3018860a798a8a4363f47dec9a2a7aca19dc7898c0aa62c09b65bd595bcf", "10d75f6abcb57dd46f4972f274427c890d4d833b621a1df8e6744cb367399ba0"), ("1c7f2d9ffb3e4bf1365b18e878f6ac1873bd201a4ff3b58ecef848c4aa296444", "12ddac201ca123c92db4ba5ec5957399a54334259ba7a047ab652d9f4890b9d3", "28e189af88eabefa0507a607d6ceac9b8f00fb02e15781b4a9825393afd72b94", "08519ba563c9fb5b05b2e19958302152e86479a31a08cee8999795dbf562a819"), ("27b653726e5e748bf7a3289634cc344bb6c4ae59ba08ea2c1c5bf3fa46320f3e", "29ddc4742276f61c497581417c05ca66a1971af1d636025be1bf5e3213cf7cfb", "2323dbaa73f3067ca845d5f0f2afc320845988b6d4e39d86b00a05f74ef78fd6", "2023a2a00831b283b3137da18e82707e0bb0cfef21cb09c53059b3d3f6265408"), ("095f6ff23b8a737e42900043f7c34de38bd71abdba8ed4dc3b52511a0723630c", "1368f659fdb6d96745ed5a91a06e93cbd683daf071a197bcd4a731f2812eae70", "1e92bcfa9e8f9f9f90d0cd7e55f7719715c316d367de67ca8384ddfb98031dc5", "09498f255b96f8db26625ec83e8e9ffedb03ecad38fbfc1cde6476c43ffbbd09"), ("0853c6a464cf45ff073f99f27228e32950e332e7416a88c37114c97e975bbe03", "07940f8667d57b3156fd7fcd1bf4827ff124adb53633ea070e6b06fe03d478db", "085f01806b8c9a1ae6af43a1ed60f28802c8f322b46010fc1252aae3284c228f", "1ab48abaa827e747e3139c152fc141b5b9495be77a0980404520fb987d0d2d4d"), ("112c2615a3e4e8dd3862000535cc2affa02f44b10bb36ada166f488494e811ab", "19d5e09fe2e01643fcd9eceb8f4a3bbee3117a4f2871b26c9c2a46888bcc6ae9", "0ca1f12af53503f631b5f44de7a8ac9d024a218153ad8b3d8dffd644ca85870e", "1f77c133b0ba509bd491f5d53a59b1d14d13eaf5876b781b6d3fe81b845cd014"), ("0eb05be39c4cd8c2613de4146db4f30f9e262c05b9c5cbf777b9e1cff2ea5fc2", "1f369584531e8661f87cdce8233ffe911cb8be21866dea8722e5ef6436f49175", "03acddcb672ffb8225d67b9d9cb304ad1ae78f20a685dc2a0bca42f6d3450b50", "052d088e544961b7f925a8ae37ef51aa7fbc83ad00aa5962477f5cadc753403d"), ("0ac6411f86497de2b95aa15359e746719c094f61c44c5c82194e32f7e6418485", "08f796db649483331d3ee46cbf2c8553573032ed76310e3fbfa4d6c4e1aee388", "0193ca12064bce53f498c3a0f9fd34e5b1f8b0415916774d09cd718479763e96", "0d30a10a0d57e92e83b4aa5b7df46f0d7e03967809eb58be06a19bf540437340"), ("155520310a17f3d94acd241d3d4f525a696419983bdc5de946a5a9ade61df693", "0c958d5c673405da3846f66f9470b9f840857fab3e95d99ad43e48c54156d105", "146daa40d5442b65f1ce81d287c0e97cb8b570be232a1fa2fbb32ba06e99e945", "19810833339d38f430f4193e62807744d5f3142a282add4d1f4ee718e2658edd"), ("188c3ff35d535aa07137973ed06b72536acefc84b1c1cb845bbb1164d991a2b9", "19163813cb2c518073e2f46b486c13454e0762951f4690124b505cf0535cd719", "142999f28f51d17ad0a0877ca52c3d8c31693911f124e3567ccff1f813f536c4", "031ebc17ee355f62942d4308b4ae6d9f397ccc6c45acbdf31138f4c41b0c6fda"), ("2c95128ae47a849e96c8d577053de8b85cabfd18d6ed2db391dcba10769ffb2e", "0e1216282b5126eba4729fdcdf7f1f4e7ee775801d771b6c8cbd9dacd6e52b57", "0d4aefe7950323c0db89ff365650989e6d56da5a46d498f87519114dbfd14e7d", "005c3f96240a161d33fe196c4d84ef337be5ca05b73d59024e6f6e9a13898a53"), ("29d98f7282700d486b1579fafcbe26746376d95839f99bd15a7eacc4391173b1", "183024aaef64227e5f1f340e4a2f63be7858b61ce6da6ec05ff6a610118060fb", "17d17a2f0867c853796dcb2fc6c561e611e52013e8ba2191c9e69f936b1411c1", "08484a7f9a6d0c6315abfe4d165edb1c7a6e683b57e340d72d159a93e7412d8e"), ("01ed020f292db6e3441c7282095c476a40fd6c857363b5ef192ee013e910c3d3", "3039ec09f90d588920ee1546a6180ef6f74a3b1f77ad932a0a78bb2b48bd2344", "1a60690bac0abf76affad5def19a36b25c013101a236379ed89f78338dbdcba2", "2076c9b71c2cb2c8fe7171dc5dd00cdbda5a46baf76a339a568cfcae915b58d5"), ("2371df4d7e7cdd9e09804fda76a31f9c16a5e4b97803abad929406a14d0abe47", "20d59ed00243c668e7823cacdf85bf672c478d838f2bf8f4f3c14c7712587fb9", "19ef98f68d355662c5482462f43ad1a1bb1a72b61f715e267bd195d742b7961d", "04135cca72fed02f0c152dfff79baf7483c8fcc3f89cbd732e2de37046c7b1e7"), ("24953dcc8007372e14581f844e32a412adc92d328f04c9b50c7df858a2acf9ef", "1eff6d2b4c428b098fa85b3996fbae43651357a76aedac73073457a1144158f6", "24259a5f9e02db5106cc798422190ac6e1891dfd303ac94f9371b2657a96bbbd", "2d4adafb3c25c5a489c00d8095af7049576302cc00500aeca1a8c17aca413d74"), ("114f9b10f7d97757ce7ff3a253cae185c34b19cfbfd6499834b96b349a8951b1", "0ccc71776f49c43006fd0c5ae9ed40550367d6fe99a8cebd71a1cbb2b85b5c1a", "1fbc2b8cc47f80c26ca58ea7b64e7760812fb25dfbd3b454000b81b753045e3c", "1050917a4a2a21ed910ee7875076ed6e7bf84bdc36095f0f7c10d66029acd8ac"), ("000c1d27f87549650697d12122edf3886e99d034c287950c4ead6fc9c6de5ab8", "0af5ed9748778935eb8681bc87ef9a8b36d35d0541ff31681cf5a118731290d0", "2ee8ce1b82568684c533c07a9ea828f3e9e1ff6726a88237488a171cac40e60d", "2d0bb65c8529f1017f68294ac533583ffc2a19909e4ef33296e12b6e6c4adf06"), ("261727b48ae96714145acfbbad1d980c7bf1e1f69ab2cb481b92a32201dbe233", "0770bc9b8476fdebedef6981918fc90aec10c1cc47d7f2e3a13a61d5104c3c13", "20274492e34e1edaed406c3f83ae149cbefdd22b4ce3a1846496bd2eaaecf6f0", "266db47b69ab6605ff9bbb23ac642139556b32c42962bd9c83a245a430bd431c"), ("124b4d778b4a3162503ba7f498c55274982aa2db95235cfd831469aa7ce97866", "0f2a593286fc45748e789185e84798d76e3f248e89011f49ce1a2879622d5dbe", "2459c74fff14f13108c82b02ba85454c57d31ef07199bc67ee4e4ca753f947d4", "293fc2a3be7cedf03bf74e55e48c822eda5b9a4c8f7a9693c09daf0bfa984716"), ("1cf13a356fd6d982ad733e994d4ecbccee5550b45e6dfac76551f59713b6c732", "1898da48d98a9176904272b3f325b01b22e98331a5dc24682dea8d78f0cc2e08", "1e8e5e6656b03d3be9d92af04fc3cb24d8b523a497af9eab00d606b61d3f88b7", "2cd6ccc27a693e98bf1c187adf0f98b4457c7637b03443b55138fa6abeceaacf"), ("2b6e7c531620aff1971a9107e431d450a8cfbec0f3611e661517ea8aedbb84fc", "06dbbab0418f534990f7d1f002e136e53d92f3dab8ca27d56edb27ad674298e0", "125c202abf0366b0d67b1b07d719d0d0d252a4b928236cf296ecfe2bc047d4bf", "2d8b58d7d7dcb7528f588ff9352432bc890da1c1729e4c04139cea9d340f2829"), ("08d22d64dde9c1525a169f6e2978f4514521a2e982dcb363b84c5f4c0af3b47a", "0511030bdbcef79b2b9c6314f6a0dd9c9cedee0922a2ed0c28694baef96de07e", "2466b9fdb1cb3a484c8e0c07a07d5deccc32ba375b9ecafdef3275b1e2d649f9", "0c6c977d0c6f104c670b901c540edeb4ecf6d3c875eff6de3d872de4efd20db5"), ("04b9c5a2b43cb73eb49f4c3058afcbf45cc5449c9a546efab599cdeb8ef4cbb8", "149f0bf48c5e113a042e51b414861a086b26366a478be680edda9b2e1a20b0d2", "0faff086fbcf3b2cd14c4489deb339d01fecd2e34a2e096561b6898bac177806", "04f86b0be9af44bdadfcb223c85440a39f11ee71ca55fa75dac0058ad0fe5693"), ("02fb129e9d5c55deada56342f978437beaf16d43c5368eec1009b7ced059b169", "206a9bca025a97d81bacd0fd5967ea94f8e518da2f86a1c2270b4a8626b6663b", "0cf5e9aaf0954c5e51fdbd0ba65010c35260d82277c6c463686999782e32d9c1", "1aacbca1d66efd8fe3bbe7a0f11269360d12538290bfa13891b6e8b12315434b"), ("0aef92a5f783bd95d2a89a7fe91983d75d940aee3e7979f96af21e1209d22667", "127ae29a63dd9b94f9e0fecc83fc72b94f8727f9f26b987ad105fb9673102561", "1e96fee1536ea363c16f31221ed9160403a8ca62812e85b44a20c1f5e60626c5", "0cf9f0569d053bd4858bcbceb17bd7fd2018d1642827828a2c1955800789d531"), ("0b386e18d9af4797520eef201faf611eae63ce91c8093661fdac73378c16ab6b", "0c0882452f78889cd02e69136780fe1b3b3b37a6f8b96c766d0097b1597a3ebc", "223c21d1a1db0bf9ffc7ab315065faad1c7a906355e0b20d60b24954e4292432", "2d86dca8a3a9bbf17435c5367608d65aaff22d18aac10af77da09cd8cbd9b4a5"), ("0895e737700c6863a6552a7d3fb5cf3b1776b425bb19e33da56199dd02a95cee", "1f814ab1d826f59ab5b52c38bbe2a7add92bea20ad9fce86562284057511cf3a", "011c0a538daa7fefa92a3a444c1e1a38129a7ec84002ab0555639d951d544dd3", "06ea8170d6a1b100c0ac15a2ca5cb9cf3bd187c516cda588a070d60029499b16"), ("0e5681bffaff8d0b9113d96687d15351f41a08f81e51c1166fd346f7e3a6f6fe", "2a966cb163133400e0cadacc66b2e49ec2aec3731f087eeedc8b812606d0f73c", "1ad1e459a52e57d5c5bda03a76bc012f3702d3dc05baf7dd5efa3ac2693cd658", "0fc050198275e17d4de92fa1ca26a1421eca375598bbb1c0b63b40338ffeb2b2"), ("0325a1afa0dea4a95bd3d2e513a7e4771e3549be929b99f91094f71175963a89", "1ec38f4bd359957cc1842c4de6885f9b471c7e0a49e5c42e5d591ebb574b936e", "2f4a799d0bc33caef109c1365c1390d37ba1bb804fbee08e26392f3a37089ac8", "17b76832e4daa36326de30caf7dbab4af273dce3bc9e680e4b91c010c006546c"), ("161497cceb9179e459bc17ea0ba255e564f25018514ce6825a5939de6dc25ba4", "170dd69bbf94f6b2f800510043f830fd9d07d31422e1572f5756aaa28a4c916a", "013bd9294792c31ba4b1c00199a83b0604a48c9d7e9b0788940870f4dc67188b", "0f25e3a958c24a8d6cc5434b55f7c4fbd016a2c2313e16062c21561ebbb21b8d"), ("24bdebace4a7a02f9d644213a9a4d87ff54bf31e9c6a5f6db1596cc3ce4b5080", "12f999ff2f64f4db3ef9c711acb3988c92afb79c13ce4f30d581ef6c80258115", "2350321fa5b04d22a910a17f7949bf85c27300ffb31747d26774c04767ec93f6", "087fd151bc9ef056bf598b9ec279302a0cc4eb251b5bcebce8f8c3be2c6a7773"), ("169793aac350366c15d426d0bbf6c6aa03b987a444c34b223f4cb09d0ce4aaae", "1a4177ca3bd960e0b6fd8650eb73bf0a4a6a6d2b13970d69b5d7a5d52dcb1521", "25629f35d5b2271d421cc0aeb8b8a09f4482fcacd59560e69764fe68bcf01c91", "0ae9fb47f7bcf3cdf979b86c55930f8b23d8d39e044716c79d42d445fbd92e41"), ("1fe865b0de8291efcf61dabdcd1e791f7581f0c2eb9af80a897db668a617329d", "150df973526018298081250ffbf912533ffcc06716d0271e4f3e787e35a11ee9", "0954534a8fdd0b513a82437882d538e68f5f07adf2d556943055f3375fce8b76", "018167796c565a9c66fc3a654ce99ad004fda42fc10daf02df2762a0a50248b5"), ("271bd8d58ded9bb0e1b23124e28ef1430519f8d88e8425bbea37eae6d036517f", "30119c36f179522fc3aed951be9b0a44da3eb5ba97ff0d617900cfd68e09bbbc", "053121b425edc943a244df3d9b462f29d08e228a58599a7dc244b991a50b11e8", "05ac7632c7598985a9941b7e09ed18104fc1b2bc27618940c5d939661859ccb8"), ("1a2d5f3323b465da35c95e48759c986c0106fe61e539a8edf0748b3a1f039835", "0f5211fe82df08c68c7ffb16a353b3a4e908d9f7f5c381530e74c68cb07fa398", "138b2edc7919d01f0e502f6106e0a52e7a5688dbde25db0c7f3b513b2738cb30", "1b245fc3a1b7603d3995028589c1b08a729d20c513023541f643ace2d9628697"), ("098f2dfa9955cd9d28d46f078d356fdf60b065167e14fb67048dc35a62a40025", "10df55da15ea91bdbf73422142084787db270033e6fe167a248b8497017e4f25", "007876868951814f49f7aa93f1ee8694bdc61cab552741ce5714c5000b2f9664", "05701d819b7f700eddaea595815d5872d1cb2a6c95838c960b9b60527b74e040"), ("2cfffa05a7957c2c258c859940a75497ca59f0b9d60e1c21e2b4bfe3087402e6", "29419f44c598362bd5c81cb816b3a3bb78bf781190beaf9b41b9f528729fd02a", "2f0846a12ef57fe4fb4a7a07c81735bf2e061cee7b775c114c75fb271b12f936", "0300e8d446f103285144e825f5d7c438175c31d65cd4d14e6f150942b7ef0da2"), ("01c66c2b946ea3faa041ebcac52f4e232c7a00cbcb8fd9b2e756994d95e13545", "0ddd130cc4a58e6799e542d7bd81ff02344f9bf42079351a2702244460097799", "0118b70e77607cdf216aed4f14d2a1212a7df37e657812751e10ef545163f18d", "1baf3078683f93740f06b40c32236bdab531bdfa3c901d254e265394ab3cef38"), ("1354597ed2da77496919efd386060579a73e136417ffef5116b0815fd7f45ae7", "2c3b87813607575369da4c0a6517ce574d85c62a6ca9f96aa36cf72060b33a3d", "1e84032e536ab6cdaced4262448e161fa1c551478965a8f76983d03b07508c43", "2dc3b595891011bf8dc7e15e2e9fad438eaa8af6761b7e76494129981ee818f7"), ("2bdf272d61740c2bc7ec9ed102365ed144dfcb3ac473f10dd970cfcc4d5dae86", "2e85dfb65fbc0d58b074e5d4450e08a16664e0d20c596d4c979c9a60e93ad82f", "21b186801ab75721094c4cdd3619ffd46fc7ae202d6d079fcb41a52a880ab8b3", "302d1c7d4bb14ac491741693686e9cfc8551289f34cfab4fd38a5a35e4d44df6"), ("29008b431b1928ba9749afca4524321363a55ee1a3969afd8e2ba138df73b6a9", "197a5de553afb4eb5b1b6c3f2afe52c6d993bae3e91a62c055b93004763e7fb4", "117dbdf7b00141dbc588792f90481c3b5119f6a80072978ca6893881145d964a", "119be455110aae79878ad7e1906ebddfccc1e9ef3f0e25f4b94efcad1ae0a9d3"), ("17ceec803529804181b1e334af59d7f587863cb1a97539b62598cda93e38b309", "22311c3ed7e0fd8b284f759df94fb4085293e357e8ffc14f05513bf7d9b911bd", "135b33b34d80d502e344a5f18d2b16305b8689c0d492448d57ba5b054b72dcdb", "1b942c3dee471653c52c15ec8e2943074c6550830cfd8c6f668774dc8beee317"), ("09f65b9cd4a0f030374ee1409369394998b6754c3b2b15f01705a1d2a8c920e3", "18cb299b87e1bbec047e405feb823e055791d32e946c1a9ce9838511456002da", "1647f5bcaf400cb837061088fb1eee2dab30e432e453c797c85bbbfbb2a8f38d", "098788647de63c62e23e54f53ba0a19fb514ee9b6ac47c72d99448298a6021e9"), ("1b3d7a16cc5a898d7154177aca378692b587149d74e2867e43d914d14527ee44", "0a4df117982da940feaf9a00ab53f9ac5a872a27d79c1ee89cb5530d5f54b4fe", "09de1bf159d04792d10fc8e4327c6791fad71cee5f3b8b1f6fbbc2ad13f33615", "12c10301b4b948ca338182384986b5ff1475bcec833353a46bf2471daacb793e"), ("2f86a90849f72143a440a4a9432a13b5ad0de5eb45e48b49279cfb4f8218034a", "24345374091004009047264054ac2048305eb218dd4941838b3f6372c3a4277d", "2badc41ddceffc58c38444fea062de705fb0df0243af88954c8c3cd6904e9943", "0672883744a2fadb123c26ecfa7119dc4ccbae6ffdb58fb5f2c2546a2aaaa718"), ("1c1aa6b8b3da18ac20ec9d9fca07dc4fd92a494ed3425fb034ab050a3d622ceb", "29ab1064db8d27f906c5a7cc023a35993d84fdcbfae526180495e877eab9c1ba", "22752a604ea77b51addd1270bf76f99388b4a114525e5d1eae1b9e2cf8f4e5e6", "1c9a04ae9c3dbe97d0e51606e20059d7cdc4e3d64f02ad9d46b2902c21736862"), ("140a14d1dfb9dd81a66cea131fd72b69319dd646bf7ecd3c652d07f0f64a9fb1", "1f3f56b398f4e853782ee03cc31702fb6a0969604294fab38ba7a1c2d45be2e5", "12d9a68623d7d7fbb546aef08cc79dcf45e538bca680af4e65e24d164c46b04d", "298e7ccb98e7b989b529c6f44621cc1cd2435552b230f0db28f069e1acd4b913"), ("028a36afc8769fc0dfa8afb576b0449615d915e214a4cb933e3a8cf899a62990", "2b448f23969348a32d0ccbcb325bd64445e22e2224c9912a637678cd753759a9", "00a50be7587355b875995b7b7b50fd5eaa7a4725feb233750fd6529e579cb813", "2380d719c71c58ced4435c1309dbeea21fa3a431261719964d712e99035bcef5"), ("02ba58e343ce03d5a40846114f0f227b4771f240aebfd214a73aa8441f5e7504", "173fc2e0444ed67ec43551315b9e7146809b002b3bcdf6d0713f5f24f4476c95", "252fd81afd8e5be0ad5057ebf6eee027d01274a4a9e6f0f4c1420734bf299ffe", "2b259e8e1cbc05505e2c5c0dee695a8ed8a072c088fb3d0c0a7434a91a42c902"), ("2becfde4f8cb7e8fcb879446b620f2362db4f5619017b36b45b244006a073948", "11c7bc5ac3c7feb347e45576489d36b2f12df90b28e3700fd3a0944123502d7b", "1dc3bbc9d41485f7719b1c4cc233ef0979f7612bd1745cf4d8a0abc611a1ad6f", "1409d81fe835ccdb6492e60e04831feb46ff7369a06fedf7ac865d4af44f0999"), ("09e592afe692f7ca4f7afef4fd81fee1f266c02a7bedf0cb25ce1d034c6f95b0", "0bec5298e834c14beefc18379603109f55ae335b4fe877c864e377a6ce8ec9b5", "262519a26e7fb664acca1003271ce21450339b4c151cc86a74aaeed18fcd4bc2", "1bfc5d789228a4bb2faa6d1ebecad603016c9455082ed9d401ca468970cdcf6e"), ("2eddd0b2ac1f27a45ab6a1f6ce8bb6aea0ef1e3a2af86e20d12c6d7eb499113b", "2349a86bfc8701c974c071e18986d9f212c5cc2e781747c11ab53decd8e1f4e1", "0026e22d94ebd4fbbcae9d0b87f2ae2dd4c2312c01c14f223a90671e6a38543a", "21ea384b4c00f1ca40f707aadd4fe152d6f1b4e1d1faba762f7c8bdde1f74956"), ("2b169970c37c3f018f4ef69805cbb1290a82b0b11990b117a941b0eb9ec79623", "19697cf64b61281d8215a1bcdc4c5701fb99389334052d22caf8dfec4f6d1302", "2d2681000b55f8019a98b3e9b8ede1a9146bdb6214dea673bd05161034f1d236", "02460cc30666eb8008116344eb254c56f6e93a4855143280682f00c570bc917b"), ("0ea14fb34408a6516213c08fc55b02d4990caa96bddc14dff11f1da475e5da6d", "010ff603e957ac73a826d9a113bf87a1ab3daf1f15e348d1b7748cd7af392be4", "1af74b0f58145313e4d226711ce9a17cd825b7271f97f8cca731d13fad1bf0f5", "2b604e1720690f912c1bc2444705368a9070404ab07f0097f09b7b9bc44d74a9"), ("0518658ed045a11698cd9e57a735937c445ad5808503b6227a6539e4a9f8f31c", "277ea9b483950d12a9cf4468a3396297808b837ad91adaa8fe710020f5201678", "12f1f0f7c1ba19c3bafe5ddbe9775c172d2a674800a02ed66a971161b80633ae", "02cc04506bab442d529503b1979ba2b06b7dc2f74b63cb670eb1df0c756cba58"), ("205fe27784cfd372804ac8684f4c370cf39fff9abbf640ecdc30767bf6e028c6", "2ca82c0ed931a086a3964e070975ce3fa390b9f2d05dfebcad577b69c5eca3ce", "1ce21b63af964f061d60b9484db7997b69ca95d2b858e574c70a960884062a43", "1e8f7c8f1286f22cfb385739c588644698c45133532619aee2096acd476c91eb"), ("2f572309923a3af85610dd2a94cfaa171ac5ac00c39b0e55dc6311dd371dcdd5", "00fd0246ae99d06575e14b57dfb72b5ce4062ecad7bf22c4c96c95be2b9d0364", "23eb3a60a7fca832931d155a71b38815456295b58e0c04712aedce80980a8784", "2aa52945c887fdd0724983f13db1a4b534434513814c4b0ab16414bae0c54c25"), ("04c1eed1ff8934e34a6c9a53bbac8a54087931789c58a30409376e1f08a2975d", "1dc81c9185b9ae54765aed91ae7ba38cd494529c2d373d7ec766cce9893f5a40", "03f22d06cc377bded3648befb09c7b9baddad636c84dd5dadd30113716caee6b", "05a963104affcb8c6a7b90dfc1cb51bdabfaa68faa5f0fb213fb99f74792ff22"), ("02cb959cecfebff948f0e3ed0faf8516581431e2bdff9fd872e8a6ae94b7f03c", "119313ac9d0f47bf0b3bbf8837b0f4fc94678f3d1aa7e121dd95589c829422e0", "0e7d38dc63c6478c4ea5baead37534c919281310f288f6ac8913594fa0387a32", "205aaadea3042b7db214240c2dc86bf0c91a04d6c785c97a0b3a8464db967446"), ("0ba4f2995605234a62a5a9253afb1abc0ecf51c6434011f03219adb4b209fba7", "2dcce9c99cb473b3739bef3e81f4c05a56c4e4017df40885c7a86d97afdcaa05", "000ec9316906631b41f31f072bdf8ba18d3ef98cea66df5e75f4e315e2890fe7", "0e5f4fc516eb7a1117a485c3a41c8a959210504241b3868ab5374523524dd533"), ("11c3e72caf9b5a8a5b51098c78d992d66cf138b3ef479956c90019e8ba7236c1", "1371307ad6beafe30ab612b871b8077c6a3cf134c0140ed0683e979295e22bd1", "1d24cc454e9ce1a323adf8e2f3be1c9a871eff2d10016f2b09bf79f0b18754fa", "1f4faf7340bd4d9bacf0c3fb1c042e372400e8bb19dd048df894a8c50bac2920"), ("070e88edde94290368c82e18ac42c921e816f2b5ca48d44b8bc316c8dc8d608c", "1a0bf5bd4f1456d6e47083087d46c7bb21c931f23a9a1d4e7fcea39bda2ff068", "057c9f3b342beb0d2145cddbe7e5f762228e9f720273d4f98656e929fac91bf8", "12e1e1e25d4b0044cf2cea60f3e7a287a8c0490b2d420bd5d9d2f5ca3f3dd83d"), ("22342831128d70dc371873a8995cb9dab90a24d229152790b7d8061f024e5123", "2ee083e429a2c025c4d58262a06b7be663daf8a46bc1851230a5345d81bfc60e", "24dc9653ce19aa77a9f0ad40ebfac61782a199e3c85efbe0a1a6bea0a68f4adc", "07b56d0b9bfb7652f5ba5ebe3a75e75e289bec2611268a59a92be68a8dd327ec"), ("0233f5248dd039192d5aa628031a34a0c69b7c5c7809fc203834292b80807a18", "09d89ac8f9c4b34e07ef4b8ce4517dd392a0801f4ae7e5d7da508b31cae5534b", "17d2f902773f76f4ef7156c099870e5761f30a9a07ea1befa4d23e3f9497a962", "0f281fe97eca8dd791a5ee02dfbe3825256cf7345fd2ae1409b92b0593c414e0"), ("2bcb3d31216ecff49319b744683a55774cca6e5257caca20a5cbd69c39214c29", "08c84cef86fd5a49a0cf6a1ff88e81e97b013914b7f8613b981d1384a3849e20", "259a595cc5430e1f7fb80f332e39f52b02a2decfb20a997dc4878529e1c91a32", "23f2d08da14eb68b9d143cc7d2897ce8bc5981d91b4b15dcb6127e8c06825e02"), ("2683100e60c876f127a08ca08ae07109464df040248638870aca71cf61d71cea", "24288721cd8d256a77c07c65fe2af237a72870e04e507e0d29ec32c100627ce8", "18facd3d474aa3d28a866120ecf020663e78c6bc38091b9377f13bf4af1afda6", "01d172b4753f3f3e3ca43db31e40c2c2e5be88dd25c95bc80ed2ecbfd5162c71"), ("05e828d8e4c740963025b684b5a5fedabc5bed6c75ae6d6dcc3a48953664362b", "086a7c3e13cb695b83d7d4de51001ea68bb148bd828323e720cb3af5178e6475", "1c1b44b4f025a84da87e1951766cf5764a432f20f83cccd82ce094e7d35146fa", "0db4456a2c6a09f6eb3662830627b253f179b60134783f197a979b7cb2d7e1cd"), ("16f0bd1a56935e432f0cc353328d59e5d585725be8981f2ee58f4c0c562820fe", "024d5891f11b3a067cc07ca43517fb53ff9bc662ca1347ac323cb0940d200942", "10a4725178bbb16853cc297d60d94dab8522e4aecb87f261f0c59be83265ffb3", "12f2fcaf72547f26f96738410e5a70cad13b573a6301be6543dbc04bc0b45866"), ("239ccc77cbf008fada2926945127db4722c474972a20dbdb3bdceda25c630c1c", "229dc9a0858fe133c9385dcbe7ad93523d2977e83c75391df10d4b2b24f46ca7", "09c212c57e4d8168e4f88e5ec7b2008997d628112e9f1c8f97cfd19a52defce8", "05e5967d66dee5d4e248bb9df01745b933d38d59cac69bc323c71761a168e564"), ("1ee549556e1419dae1fa7a1a7c5ba72a5d8f34e181d7283c657b9b3376ce5f5b", "1671ec8678bf37d0a10c92ff4586541178c4856eab2c662b6811a0782c4e7296", "21f9b5d815fc8a2f2a55de6ffd6ec15b50842210f97eae00211d9f1a25694c0a", "0bfbbf709a5653cdd6e765610b57df29345dc05c5b3abad2854c349863fa7ea9"), ("07895f2409fa2ce846d2a5d62efe55b7bc3dcceabeb503f87a32b3c803c736c2", "2b6aa51fe55aa54dcc0b95efe0be8c069fd53b58ca4b9b6fa45e574c7c28fe19", "02debfa18122a19fc43047161d6e150765528a2d2a2f43b859de8b9e796b6746", "1b2a64681e26ecc85f6d49902674d21e79a11a9b9e850c332112fe555ef79f13"), ("2554e13a6475d5014b74e3389633b640907ff59093fa3502bdc4c46cb1a19bc7", "18afb3b081a0fbaafb3edd5dbf39ae2befad28536e5ec06460ac0da1e9231a6b", "09716b567e1f645efe273a7f0714e0b6e2aad20875120c418f8a447f0227e319", "300919b9c77ef2b5f91dbef06264465316d4d9ccf8431a70ef79b7716a8386fd"), ("24295c118e7779b38220e907f2e995223b51954e63ec2d22a8ba03d8fd431fe3", "0f528f4f075c1cf9ebec0cfb41df29185a88383d630c1f5042a2dfa573558273", "2e4455544c257aae126581d75d22d49a6d28e2d27fc1845d8a694eba67d6b40b", "0afe790ccda75a6397edd699f03e97d9f7301eb89aeb5a99744ff1e9e9c4484f"), ("07b75de8ea9dcefa26191edfe400241c55a4265e550c5518bb600bbdc2ac684e", "1549473177c6112a02bd0bbf033f423c954738103a5aa9c3778a0189fa828809", "081225e28f3c18e137e6be9d5af762db9080b4ab388e071ccdc5df8bff5cfcb7", "0e4809f6ae9c4ee08d97d31f1db1529097484e6312d35e11272d7a252d090123"), ("238fa46ed282f5ebf1f40efa9fce305800714ac24abb1e489dd175d9dbc8997d", "2f37e19274139f9f97d35e7faf7b6caf8f21199afacd958176319a06887d3719", "2fc0adffc93712814598fc504a074ec0d3312625e7e31ef3aa922e354bf9f34c", "1b93d804deb538b4e6b0ae44c56e87f1b7b4b72881ad690ce5544c00ba95aa10"), ("1ccf181d983895a7aab0e2c22a340d955fafbc8c88d11bd78546688e98b7389b", "24dd0ef7068964beb3ca7d410b9c9f6ecb751f6a9d75bf10c3b809d187d565a0", "0eba5ca65c5ca78490a7fe41464d7817c735593bbca0a6e98e3cab17c5957af0", "125a020ac67c078b90263e974cc34bef22ff8e99e1264eed00b3a19c586d4ace"), ("22558cd726fd10dddbc829a4828b0ed6a11e3dcef3f2913263fc721c57333b7d", "30212bb8661c1d7e23afd4974585622b5bbd1f97ffe3fd042ca31893eae69227", "2903d213477ad6c64c3f078f1837594586395e261d5d6e9330391e0005e8677e", "1984011b725344f966baa412e8d7bf3755568499f1e3b302a513122a78b19878"), ("0b4dcf0dddff4fbbe57811f5f14f524d4301c0879fb1043b81f1df80527a8722", "2fc6da08ca360798a78104969656173b9fa2ed13ecfb4aa0acfd582fabf7d8c9", "00bfca0eb8acf5f97ad7fa1328395b48a58229e8e74171b636a59f13c3a6427b", "2d2d3440e18a46548d5bd76097942bff40f1e5798344d0f6d4e2328b71f90173"), ("26c48e3f475b7a2cf4fbb404407247b3c55af4556d4e86e3b3580977564bf278", "1808ec4f0974d8279c6c08ef77a24b54c0ddbabf407c21985369040db97c959f", "19e6904f855c87213ab472e923a50fe7d303f21f2c0f3d1e1f1f351153082b43", "0a4bd23ad69d3ac08c2bc0375e12053de2cd62cd096de48b758f5862095fabca"), ("2412c84cdc88ad34bcaa1bae6af4d8519c65abb8b0123c12e1b080863fcaea03", "272870a3be27165035fcaef402fa24c4dda60a58800ef6928d45bb7761e02f48", "29993f1b0a8b8eba2c97fb35fae27fd0446d85ed13ccc618fb81b188c06953ae", "13dd755ab5d7b3f1d6d01f7e55cf94ae20da08878dbb51f0664608db3698cf46"), ("124d2db8b7e209b4a21c2e4ca0591ead7fab05cda46e6ad44443b8425d21a6aa", "0ffba9bf49895284b35d997d088fb85124a495c8b38c6e7eed9645226197d328", "2bc39e8fd4f3b4ca01ab57db3ee1550438e465defe0019e0e60968262727a818", "0d14618e73690fbd38d677d9522eaa1f6fbe5e074015cec28738c33de2559ac8"), ("1a5b922c94cbbad2749fea47f95c393fc023f0333a76555f8522216875ea96d5", "24b8ea4fa483b5dfe289389017a0dfa7c5cba26d45b50d0922ced69a5210769e", "2bb67d8025a7a42a685f84a4d9e20615c2e3218def044cea6765757b5f2f5239", "12abc99a169016682545adfa442200d2d045438b2c9e3be52ebdc1e4bee570c3"), ("1d3c4f58fe28e207762efeb97dd9bd5f272a2bbddf5d3832b454080499ec490c", "02eacdbd7c2f6339d5a58c42db5c182bea4500924b83d9938d24f5c3f5f085cb", "157309d20482019d7bee7597dfe556d0c288fe8bef65dc1334ffff1130cb7eb2", "27bbef802de56224ebddf21cf8339f338c2c65519996ee06e267b0c2e4c493a6"), ("0ae7bf5175bfc23b8fe8bc58c7c32173ab410f1df20cc80456d1998fe190eecf", "01de01bb4132f3fffe7f9227a1162ce9ffc2ecec9e4e7fc4eabef5ce911a9e92", "21f208eeae553d6489bb74a46fcc83fd4806726cdd48c6aa81c340b241d22a17", "08da7bb02a24c48433876ce7824988eb282002a5421d74e8eebd5cb9f3df6fbd"), ("0722592759430e6b04c040fd97249ee1229c88f8f61d1d0ef8ce811d335916cc", "0ba653b1501dc4e3e0da696c3b1de638592414e40de9a8ff8a94d9be4695b50b", "2f66096cd4248a7050547985de1be83ef96aecae4a9cdb59ebe529e8fa597bc0", "13e86253407d0440c5f9b6bd64b15348c35546cfa30171515628aa5ce5b72a22"), ("0137f8331775ef7878144d048f196b13a8db51b057e576626d7a1c7614ba6409", "1ec4400f701dbd080566c386a2c57376eed707acf803f73bb4c548dced70c747", "1afdfac922df863560081b4f57205590acd5e76e8227060960c1d631effbdae0", "0c3660973a84b11914918db2946be4c0f9160343614a109b933231024f0008e8"), ("2bcb35ca78bf775a4b43e485d13a20d5739683fc0dbf1472dd1726abc7c75dd6", "099b9a632f64262367afa46e5b938fb5310dcddfe046d9b59400702a8739789d", "0a163119b5277d68cba381a76efa2e1a25a8b8587f07c9475ede1c9b59b6483d", "273d79e123e34358e7faa51c2b52ddb5f287b9b02a9858346efcd64e2b6973e7"), ("17b4c3a8bae44a230929ba31c00dbadebcd1a38bb30e67772e7d1923ac868d2d", "1661db9d1d0b77b9058a4faa08214f5517eefc6c151f6118a96ec401a1f0aca0", "1c44e36371f2c24fa5529b69f040b7e6e7c3f348123e6a2481eea617856d1493", "08aba498bfcc104cc9b1850e248d624e1ffccc976bf34b0498ec8ad8e54f108c"), ("2c7106f99958aea0ebe34ae074ce86f4e695f5da8f387618b2df35db99d9ef6a", "1f20ac8860212d077d4f41d564acfa3b62b2aa148b670c28c097388e2e0406fa", "2fdd5f009ff096a90a9e0020f61649e3ad29816f4b8349c04cd06a52889adb60", "2f26473ae36c86e20ab3a838b50dd499373e41f5d66705771e0d27e307dbdefa"), ("2192cf701b74058d0a07507004a7cd8dfb417f6aa145e66194da16ad760beca1", "04de3f8c4b43c8c6e071902a95f1fe12d607111828c20ffb2a1fb3b37cdf059d", "0388d0014e0fa416aa11fcad6f89f309aeb05598994a627644b4be55cb28e674", "2d8a569edbdeef6fedaeb3350fa977be177935965d0d04bccf676fc1b4a98992"), ("16c2e33beeaf0e1fa1911ca359594f7c0d3cc9ca8755ab0b9fd5757b4d917d0b", "08b401348de3e30af2c755ae297f5ff0c178510ed23693064c9088c09f3e0308", "304ccf60c3897b79f433d077a70f2edc4e8ec96d07b4e7ce01ca3845e18a1257", "22cafdea0454a9c2379b97bcaab55ae3a93ed812fe0410cdf604918e7cc97276"), ("177fc2a5e69b2f167239e5cf8e674a421513dc2af32ea6b2c2ad3924f69f443a", "2a97672a362af60b63863aeaa172b548d65de7d0fb387789cd0b99325b47114a", "1c9c1e4ba4146a208ca1d2adad9d6fd9fef6b447432b996f7424143fbc1e5b5b", "0212fb60a54e73091bbdc1f297bae7ef6eea5fd55ae0c5751b481f7f1737d8ce"), ("0e047d6dbca35adc9621b000cc0fca73c281a5bcccf145502fcbc7e76c7633e0", "14af847df350b0e17725723cf0abb95db7fcdcb994cd8cffb48679cebb18cb29", "249ccec36a5921999df87dec723adb45e22eeafb3d944165791b8f05010103fb", "02cb9f4ead95c651f2197a09b4a374488c74691a6dbb2344e56a8febfd6ab85f"), ("083374ad5c4a27ccc88518b600e694452bb8691e446b2284b5dec9ec24878d7a", "1fba3b8d0715abf9f678b7a91e8f7df1b08be1c1922fc880d77ec0650fef79e0", "05702545d488fc3e64f6fc5af5a7665787ba9f7c474c668671a86ea2002a0d88", "03f33b266c056dbcb77b369a515c174bc331ac8e4e17a3284fdf7ed91565c228"), ("111bc1d0563d911e0ced2bfab3d56889c8c56f5c681017046643749ac4421083", "01f5fc1a798c8ac4ec49bfc7e61646e02bcda7b9e199f7b175ecee19993ebc72", "006fae5e44646537b54565fdd58de14ccaa0a1fee8c39a36708c1f4048334024", "0dfa831ae4da271bd06e3714783e9ca3909322b9de7caecf09b2305cb295172c"), ("0b6ee199ac14f197962acfc76d837e38c3bb73a70e655b72cb16cd15a093deac", "059217cd785e1df87c9de61ce95d20e3c239497eb8c357c029533879cb7dde40", "13b2448a0a480ca58be1bb0d4918ec43886f581fb244808e4a56766493b03b95", "0e94ca0603b78834d9da85969438261331a80d75fcf9ac6d172b16a80cb69532"), ("2f43a4218ce271429b5c52e060d435c49c12b07a7cabf0f047ba20039924f78e", "2d9d9e60b412cd8e8c3d9d95d5e552b3ee7f908f492670810e397957f6b86480", "0ccf93e94754b3d7ca40cd0767f693d103248202f2a8be9ba312eb8d023a739c", "2b9a9cdfd1b3cea762e87d0e8ae85cad54a18537742d94949d3e22d8de0b792b"), ("0a8a4011e13fd810c73819cd71f941d4da3661070549a979150d2688e96fbdf0", "1f4a2349746d30c530ed876ccbc83cbced0a793152e43deb076141bea0b34595", "16d9b98edceaca0e01110b2379caa006c10531c23862333d824bcb5f12e0f5eb", "2d4be3228578575ead965ee68f12815f9d0a3c4165e482741262595a7fc3b9ef"), ("002fd679a72ef2f77207e343cac79a66a5f51699efb4569de8307fe6d04c9a9c", "12aa604a3704cd6bbb119ce6f9836194fb78569c6c25e66a29f580d6a61d31d3", "0b2471247ed9f4fd42f88eea99451819e51bba2432675175335ce57d2f8423b5", "14a6a27df3453ca1d755f75b9cc29ebab879f57659f583d014c71cb2f58c86a0"), ("26748f25f162739ffc863f6490d557937dab8849f757ad7b1de41e131dde0850", "05cb9a0aa26068826008619e9e7da198bf30664157ab54eefed8d6b89aa36dc9", "1df0fef4ebdeaf0fc5e03b08ba3d653e29396fc0a8a58737aa66f0a6dc4ea227", "06b29fca6edefd720054454df6d71eb200fd4ba0bd0631cb5488db41c7a079c4"), ("1fe8f9a970509d9c19d786e21c92d2787bb1627b2be5530e52aed2b6bae47a10", "102d85bc5ea7aeffa7ab53e3b577dcdec205eac9fb25cd18437fa9a438515926", "07e204526fb3f734cc23e3c7697a8eb518fb30c63a0b29db1f3e3718588b28eb", "21e889e4904d04268698e716b0f6b481a35ea8d905892515ac0574346ae7c3d7"), ("25f28bcf27b5c55a5c125b6d8a64cdf6c57650cf0b7b6a1bdcae4313a705be16", "2548c609ab66ecada74491b17df0c42dccb11522fc1c8730104bf01935488db5", "0f7729f60b2f788c8cbf55dd5f92acad3e863268556d28d8c2a9a92075672029", "184444843eaa506e7bdb5ec24395d86f8844fdeecbbc5e4e47faa90ac81264c3"), ("21f5cee93d154b1a57a2afa5af6277745babc95d7f152a54e7413d38ef69281d", "1d97ceabec90011c3b8035551a1b420c506b94d8ea0cb84c329dba606ad7dfd3", "20d68188c0ff50f701c98c92476a391c188bf0dea8979bcd0a75e193cd2d6d0f", "225f3091d6cc3b0549540d40699e7a02f14d859e4be864523e10953dfcd0f566"), ("0399f1e0be970d23a3d34297b979dd8f9396ba7e267ec0246ebd9672813fd5ff", "1ee8220b84fe2b595eec47100c5415413062f395d36bee736464dfa2c97cf36a", "16338e73a2c4fbc5bcf9ebf9fb8bf14190c02f0636451a81d25f94e057fc6a0f", "010f36340523ce808a1917371fa8cf25e4d07a156f1cd943f1dfecc828d6e33d"), ("2643164d8d404973bbb48f77b51e04f03db2810741fcf2d5f5be007707f6cf33", "21dec34d4609a054b3224fcdd7562fc0f3e6ed99f9749e4d4b41232c4476d341", "25eb7504b1973db5c3bc1c41a22220d6dcd4d784686d968d0dfb52b9cd918f8c", "24efb40212677c3bf099f3e90d7af953b368c7034c1ba9028b13f21c9aa8aae0"), ("2d1df1265a57ea7617b97944bbc4a2edf86497f156b91a3e5e1baafe3b6ec3d3", "0ad91a5350a3170bc3deb754fb34b73536f38088f49e61ead537472503acd91e", "06e894c25680dbc3fdbba2ec08155820c42464962e3400d37674d78cecf74b49", "2247b2b975f30f72e5b23e25a44c02da0a1f9289abb66bf323d2367c15edf340"), ("15238d6bf608f725fc22bbc8f1e6be967efb7a5c9d9e4dfc566063238c9a16e4", "0ad7dfbda4b499e64cd37f6b19036160884eecaf956a5bca905cb2ca2c23923a", "0ee140a01270f582cb66ed2b1ccae378ff395dbe98f1e54bce04880fc8425eaa", "16217f55ad1352bb3f16adf1c31cfc192dd27eecb300aea2d7aeb58d0de34285"), ("1f16162873605305d8d9a83a4d9348a6031debcd038acbeb8681a671c36de42b", "01d03428e20424228cab6f6b06e4e1e622d3c76f82fdc9607d097e3b74e480bb", "23b2bbac3082c273a1efa38c232987669248663a92ba57de5cfe028df310b990", "220a17751d0a815b458bce4f31b662ae3c65a3db217bac8bf6065e53d79612e5"), ("05bef4c2da4d9109a1ef01943a6448785811037530e94bef3a5c3129e4bcacb9", "191b3bb7af9bda2d3f86cd7f0d1f001bcfa65267b9e31f6b42dac8f34159332b", "266154a71ebcbcdb9847923c1c822031a371732938969c5cc83d3eb8f950bd06", "2b49a1ea10337b41fd0f72ab8996b74f32b74a1866398215ed85fb0e8d9dc86d"), ("0a3514268603290d0ff14b09d2328cc5c14e9817b239fa312961b21bc37451cd", "271bf1fb50769145c6637464096beb0ca3e6193695ab2241e3e82941b4df47a5", "25d0a2bdb2c927669852a8080ee8ab1580da4939e8486b792f17a56c08b84dfa", "273168fdbf4029511a065831f41e9435b93586f588400f090834d6f9db2761c9"), ("2866caed4e69bf69438a036e5285282bd434c0d9aee2048cdfde0877e91f2a5b", "2fb77ae5a2f6a8f50fee080eaf18d872e73e452024e7bec79a38fa54b335d475", "21af42fdad52de7146add173d66f117d4a42d9d05e67cf1c639303ffa9ded7c3", "0962e8563c67c80930c836ae156bbcb9315a55f82e5704829c465148d8dd74de"), ("2a341671ef42e180e0431afe9f210b8023cb0b53dabc0b02f38392d2691d9ea8", "206919ee38016d51b781bcd779209d2fae9c1d403c113321e6e63c265f520cd5", "18aa981f211475e185cff11f23ac8462dfabf55f495c59dcbd5e683735ec09a0", "216da6eb327c091abb37b883cb9fb354e01447c60aa8223dfdb347bcee325669"), ("23c84f9f6c02e734887d469946db76b06385e3347db5c1b9078d563896072dc9", "0512438bc6e1f1a0d36ec6d4b35067d85e108bf52b298937ae6a0312774d2ea9", "1ae4b1dfcd50e8286fd1beab1705ef2fcbdd796f46bfc042c6b88037d3415243", "0ed8798e6f098776eead7a81d96dc08fa047562a75150bb03296f72ba37fc9ae"), ("083cafee3916435160effdd2ae6aa3304c9a7a2179f402bdce93a2ca02b83e9d", "00607c2875dce92a36b7b1b681692bfa7125a2c091a8414c7fda01b17af074de", "1ee59f0739d7338c76839c6003f17aa4963a911e94944963643e7adc70824281", "21aac30676714d55d81e028507c4991d2cfcaf797bfc325b14d0a8f2acc69932"), ("0b7a3c19782eb4ccb5731d4d776b098501d33094756334996606d56993e36fec", "1bcb7b5a0de9d9e22faa65724e8ff5379550f40118a9ae83462eef68e8bfad47", "10ffff3c405ee90b7d9b87bc839d2cd1582a9c7d41b41f27c54fb280b7bc02a4", "0e7ed9a95eec9cc587981f8701f17f4a5044390e6b6a97e88ed3f5b17a78208a"), ("1d296bf28b0db7e0d61bb8b5706ff27497d4c3ca2cae6d78468b96912b35c315", "05e467ba7ae15f385a952fcb37086e36a49da76245f1aa5a68a1d02618547931", "049bc2c5a6f5298d8682bbce55ccb81f3e3d49c688ef569627098baa587fe4aa", "1dc915d1099509083b516d5c01255906963f2b40e98058c486ca46101d87f4b0"), ("095ce0b84fa31f943b3bfdbc71ba00a60a66fdbbe330b6213142244bed65287a", "293e0d82052a4bd8c987942a4ea55179355100485830ff7f1a94522a8b9b7d28", "1b9c5a41a4b5e9807a2f7f89888582cf76ab7e0fd7870d7acdd3b2f1d1c48f5e", "1306790576404567c2e58ca2e452b2caad3c5f2a2938b8531e022389c851f8fb"), ("2d2fde9e1b777cb16b5306dbab9c58bca4e03de85f0f134def12b51ec2ad66c7", "058ee9eefcef3e5de74a18e0b1eb879b0f795f325d13990e6ed6b7d05d2693ea", "15d4dbdc225dea4f69a96df88e76e9721f06d8689fc81daaca875fade874f7c0", "05c99c0026fcac926701d2455a7579fb32feacdd283338ced4d641a4f0276b52"), ("15199c7816add55ae89a0d5e4f4534a8f3b6ecb84eb78a55f70ed8ad87c9b3e7", "18f137bc6ff0ebd14a6fbd76bf7720666b4d43b705b70b9eb7763c78a6ae1a50", "2fee8896665db464e166f602731cb0c7519beb0de1637b10ee06f27f91ebab3e", "11fa20c2053e1b45c1a3c7eb3513e9b4a2a2fe930819411d2ca0b15a31c1fa51"), ("068e9c35557c8e689510a24188f58555f4d76b76c555a314aef99716c084963e", "24d2f1950eebd98048c8a42eaf9ea51bb773a4ae48996838a2c5ec42d8d007d9", "2d2f7e7acc627bcef4c75e4bd8a8df98318285ad2ac4a93f6a7c7e9182a9227b", "2492191d51296a44b904f82e374496303481a8644f12be897d90861dfb557e52"), ("0908214e55a85a2d8b4e65fefa1e7a295d85265a23e6e27ba4a63873d2a2f4f0", "2b4cf0b17b996b36f23628f67f0028fa25c0394d0a486b4045a9a09b1860ec99", "05c23bdfb95eb484e5a9cb04d0651e614bd4cdd09343a1f103a0375c92f222a0", "0c3448198457f6dfc3c191778bbf89d748cf67bc69d39f021ddcecd127ee9efc"), ("1dbcba8da4257b1d290f631fc681bab127feca402784fc21cc603ffa8b72a859", "0bfd2b62c806596265a6a95341362cacd88000f664ea57557ab2e52b3980dd41", "155a500ddc86996b061297ee3b11f61648226c4c8ae5e1ae56fbc4cd664b48f5", "1693b8c79ee8f34cb710833714d07aaf3bf136e0bfff48eeb9ff021123c8d90c"), ("2b29d51c444cb9d96aa4b3a0b1de4fcfedc38dce23c77dd41da94d29777396d9", "0cb686cc3a7cdfa460fef7b68cf6dc654680310c34ae908abd1937fff18bc285", "266dafb2dccaef1de4c792cd6acdd1976718fcc0c84df37e5a08a26f45a6ec25", "00e61325ed61e6cf98e091589348dc31febb9546904b367ddb2df864f62beb74"), ("14033647c5e7acde451b5dddf4d7461705677683ae6f942506e24c5928c8aa82", "2994396f7918045e088bd3363a129c19c72b5ef3c90f52e505e0a5cfb10c4e42", "1a181cc988b3eb1a6e1ad271d4c4e0a76d26c4afc949aa830517fdd08503066b", "2825cd64e68652b4643ec61a708f2256b6cca996845488e4966d068b7f7785cf"), ("2476b121fd1ab1b47a5e25f9a3c05f8d66e0c7d75c837f3f2493ad9ce74a49de", "208df64bedadeccb850a6245ea889443ab3736bec1f450b79d6f064227f01cf8", "2bac5b1470a7cc11795c58f83e891f64a39264496a42e78d79d7c05cbd609e0f", "2a547923d846914eff42c1033131ad099a16e116b20c02a52e5fa640ef830f78"), ("025c9a490a94fbc45ba1dbde0d678c6a3d556b9d53f1d7c1199d15372d9a4464", "17bec4e791eaa8b5fcaf99602ef04de418a1fbf350df76dd8dfe4f5f7c6dc2a0", "1676effa1c5b001f1c089696bdf97b32a9bb1518ba6bf0ff5dc9ce5dfa928d3e", "0e676fd322d1d9acf1ffea6bd1df103400feee5268fe181ef99b810b92c6c844"), ("1d6e35bac40278791362c2e4ef6aca118de2ef4cb6cc9975fe9b32e8c8dc61d2", "04b5a89a367a537b00e0123791365498bd0825e46c35a20a9c6784c9b3705486", "21534710046d98b6f4d9b39b849d615e4e36a05f1923053c9cde3adccf7ce3d3", "07a6eecdc0cc7f90642e23ce9c0d7f3c6699ef10e50f7e83c6a3d98e3cb807c9"), ("1e5d458133bc7ee3225668b7bbdc6125ac314423a51c52a0108aa64ec09cf8ef", "075fd7560e08119739e84e9508bc23884b24ca324706f3d4a7cce85e67bccbfb", "08c0d6c7ef95204235e85f94beea51e6e8e2aae07cae5ceed3a45277beac6b9a", "0f98c907a402acb67ef3c748a77f975c4f105e78695c0cc29fc0ca1d26c05566"), ("1cca6fdee6eb00efd67c45c8adddd0729f7acba601b77c213b286b451a28e0c0", "2dde1018d292c9b8112a4e99c12ee0f05f1b857365bad06eb4633da813e91741", "03b90f5298d7e5d21f9abf634fbbdad3e76c643f8591f6dfbd9aab13baafc934", "29b4275cfed961eba86eb3801d6a7ef02dfd71671ee7a55ea1a28b4557bd5756"), ("0efbb785dc203becf1868b7a32e5d21a89be5e249a520287a8cbf90ecf085b9d", "02f77d7d01da9ab41d3d6dd6ff03a025ed826305bc56be27d40a191c75699580", "15aeb9057e1c7df6d4acf91f70d8c1795e1437357e81d87aae0e0f14f4ac2f75", "19677c651a4a96e8286ace7f7e20725895981038c33636e2e92c1c86fd8f1322"), ("186a0cfa3c3fc6c663aad7de4585b5eb7b80bc5c949839eb2d5e9dc182eedeae", "208d003ce254e9f1a4053a271b5334bad3e190c8e1d659eb14a0016298c6ad4b", "08dcf9b8d03516b3e5d2575e6642e450823a00a504a5c349fa56a94490421003", "2a822e9844c3ad67950bfd048a9a4dfb3fc20153c5ad3e9040f15a5ad30ef920"), ("1e2557a10e58e0e5276fa78300fd6f43f3bb08f9e2946692170d8393345f5e54", "01de20d38466563e37ccb95b247efbd8f0a2e277a228a17d02daeb030a7fc770", "1011fd54dfb7f18de7f5d34351427298da32bfb4ba0fefda0fd0ddaec6152152", "0bdd2342736e1fa87fee8e46ccb6c30a11a1bb5ee1b33725b30991d09786fc4e"), ("1eb5c6b2861f2f923c4431ab92b4b8ee2f3a749d64f1b07b926131aa52e5ab93", "1e65c757a44bfe1ab5a76093232be904c7108ccb062b2b70a99505c377b191c5", "284e7b026ffcb00c657517844ab96cdf50b94b422b5dcd4493b31dd57dcf8abb", "1b7707be5cd652f7b70fd7cbb95bfa26acb54de8307197b27f12c44180c35048"), ("1fef04638e10edc4e91e656b4fe627e000e77c2a1915408f32e38c8e8e6fa727", "3039d1b6f6c851173fc9edb994a3621b138b6c4f5f2c84aa0981fc6d9b760622", "1dc5bdd589b53019308c2baf17414dfc185acf60dea92fa53c0373a99de5eee7", "21e5190d335ef540f8ad331b8654b50eedd6c9355b05a920a42214af569443bf"), ("036e18b5c9ff3bc7309a072509b4727bbe0f45d5b94c43ee7d71e5dee1e9ecef", "128d478e0152b4cbc914d09a71d7d16499d1e0306c968b039a6038b0e0543b75", "1418f6da607f85afb285c2b110305621750829856885c1c1d63908811ca5929a", "2046a8cacb5930646bdda1dce2355a3f4826aa53803347d39154afce63cc31ca"), ("063e4ec18ef63323b6578e8d1d342f68ee1835890504db29e402aa1402990b25", "0c23eac00cbf375879c4a3ddcd4119eba860387a8e0b50e708d4ce9e2a133e63", "2add2f0b8ceba1fbc1d876747aebbf29712c7d760a2a74fb04007d589d795682", "00f63867a5a1abb59d2977eeb296cebf6e4cee3fbc0cedcdf9ab6b94074390ed"), ("0d1eac8d9b96fff0a21119bc79970142fb8fe86e6009e5eea20d724bf6ddc2a6", "244e8ce33cf17626bc0d548a012e944a6e0483563ae11174227bd55655e6a69f", "1beb364016233d5dee9eb9faab647087b630e2a1d3bae2db6d2a7372a6b97905", "28a3b6e82b92a35afadacc0fb1548f033efd7eeba409c903be4ea98c598a3aba"), ("037f5a561997e07583e06e1d02ba0d78bcbaefeceb394b9445e853d3bb8bd8fe", "0dc2cda1e3ce8418ad1253ab260f04dcfd4a14d2362f4abad549ef85108dd22d", "04c7a0b6b03c0186c356b6c907509af821d64fff09ddbaba2a4b01c7794c6800", "0993adc4ac3469cc0c987196d32223a1a9d8d6b93d6de3191e1c109fd64955c6"), ("0711fc408c25e41f4a00898df0fc9ffea0163e366d9948c4f28c1e8a5587e7c5", "0e7527bf85b79061a32956481dcc1b2b88fea73977eb2d7239743ea421a206c3", "2f8718930d37261ae3be8b17ab93deb3e0a33153a0add19d8c9843d7cc4bf97f", "1092cb0d3fbd7ddae8b8c403343c6c127e0e5e47ad94d916bb73704bae7b9211"), ("2b54d86197544ca2c61a44e012d098ecba46bbba1d73b5d6cf2aa86452fb9e71", "0691c1960ef40160b3e0974e9eb2536246a0164d3ac8592c6ce9cb9b22197bcb", "1544b25273f19cebedc1b94a786f1e342b94d5d5e5e46038d6e80cec39bdba22", "1878a69c963edf5facb8ed8e8afeeb7c881bb82d955ea2ec47cd16462eb6c784"), ("11cae84d49b8e263c7c1762ee6c4eff6cf413ddcfaece153fef57b4e45e2f945", "2d7e0093e8e97447908e2e8debf45dc6379a8738cd14eec6748916a4bf9efb4c", "2bae7d800aa54b2a44806cbfa99d3ea47660905b90c631a20f3a40a0aa351ca0", "233abf33654bfff5116ab919d7d36757ed3dfd7748f0f6a6d630ee9825940930"), ("2eb17bb976230945955ce8f4b2ece5b9d79c878836049a9aeeda695a439fcd8d", "2d7c094b07fb14d3d5304566fa39987a598d9dea2b5c74b11eeb56aac9d639d8", "153c9d287626b66e00be4f8fde8f4c1150379b85584f403ba0969ef9a022edf2", "1e0e5bb99429c9ddd103fb2616d6731c56af7411d78417f2acf0dcb5f7712606"), ("1ec75a23fea7be878b37387117a2df46b520dbe26481413e83aff35237f737ff", "1ed7f3b44e1d59f8f13de4c0ed709a111ad59b8572cad951cc92edeec3998611", "020e165c1d0756d34b7d118b6788cc3b13115bffb58060089777d933ecb4418d", "0823e87203ae5da203f40483f407f9e6f0f45fbe9e97619056dda333882652c4"), ("2b72311d692b02bde17deb459d35c89b397f5a66d5b42db8571b76ff3fa10a9e", "2775b3ffa187b59939166421ed1d9efb83cd4d6e6c115d9157a7df12e4bddc04", "1ed2d63736d56a4980df5d6fa1ea48e37c94e43977a12498aea6b10b4f64ec0c", "24c4dde614ea808dc88bbccc8c92deb69ba81b2f725f9398b1e0f9026f2b4fd1"), ("113b8d4cc4959d8a5a82a16645ca24f77bb4c9f4dccd22136bf497d4865a73fc", "2f8fa0c95dfe0c3229f1a9e3ac0be894288c76a6332dc406f7e69bcdb6f5fcdb", "1d9b2a197ef64eb560b4e5e50bac76f6670f4e3cd7d9f2ea4345670bacc4693a", "17e3ea6ea809e56f6c2cada542c177b3e0e3d48339208e183865379b8aa8c1bb"), ("138565bd43d26f58c54faa31e848746d2b4939a632f5ecd0b46b9a527df6854e", "1c28bcb964f7f2057b5c702cc49f4d0b655386828bfee4615d411d53410626b1", "27a539f3a76f72f0432b7e2dc7d8f21adfea2a477d7cba031eadf2b723355317", "00d0ece3bd587a0219b46d3b076027a5811a8b2bdbf599de36c717c003bd063b"), ("24745f722e08f4c8f9ebea28174f5661c9ec7f74366b9cce264d17e77b5f1fa1", "0441fd161db793463a142ed3fe9c1a39d3e6506d1a0b4ddad9a5cdcfb9181a95", "1f1c72b2cd06fedf0b37a08b19b2689b6ae9e055e787d35ad7c80f5f1029576c", "0442fe4ee40310f5f9e635f4f25dd8fd7ebfc89b24f2768cb56697154d73fdce"), ("0aceaf82cf7cccb1cb31367de6d85c905b664f9d52f98404641dac325aa65686", "01c0a44fd76686ed088519bc01cfc6359460cf802af5b463953669f32efc7396", "02e406f1e4cbe749d8dffaff17f66768008859ea4c12f654426f2e65a84a583f", "1ad6221d45c473645786f99833c7cbbd6020fd0df49bab93e675d8af84d8f36d"), ("0327517ac86525c4c39ff97d6c0287d482bfdc75ad597f55a2508e32d65e5359", "2b905ccadfb1777533ceba23f58a91c62fc6511e8e46dae342d4e81747ddb412", "0309df28e7fd28a5004e91ed99882a7e596170eb5be2e1c1f3a2b6100a5e2c90", "060caf8f70d031d5ee4f8fc4f45db33e6d2cc829b39acfc05e44cf7e7bc910e8"), ("2ef08c79712ec8068df4e984e8b0bebea928c99df1676800fdd9a97bcbbc436c", "06dcca7a439a744de7f105c26519d3bd5162c2f2b1ee388ebf562c480a06e345", "0211b7893f3473cf7d4fde5b151ca98d474903b1ee8a6ee256fd30360bbdca47", "2e9da303b80d986c83f67c203fd31cc8913ca85902cb892d28fe9701c990a447"), ("100dd78a8c5e383c946642537d4678962da2e468aa0cad823be2cc6f9e5f8216", "04473038ad2b791db2c12097d18cb373ba2626b276dbf15506c3b98896087767", "07590b4450cef4ba1cc07597c1addc60af1be996bd28a60592714d023fe56a27", "23e4a55fa2631a359b23d8191bd0afa1b76ad393335be2f3c86c0816fe44f9c8"), ("0327028d0e01192003eed0b6376afd9d19eb233b904578b5b98376429e36b362", "10b7e65cfc730f7a6f3ac2366f115a7e388ff177852cac2d16748e2615482c78", "025d98292e2948b1ef5de2709f099a25574907d5c33db8b8af1bb9caf7614e7a", "10a5eb38ba1a18cc0468b06d3e96b1e9a7c607cbb511285d4d0dd89a4b5897fe"), ("09e88978b998f11bc9b63c7c3f21f273ce107f55471a6be578c2518091d89d8b", "0c87971955e012b96c630408049a762f4645167ce26e84cc74892859a39ed6dd", "20be54a06e69e8a83be234be97c15228ef56c10442e3c89ec2acb6a5b05bc200", "081ff67dce7757e3bf34cdeac9ddba21e768bc3522583a98f06c36073b63eef5"), ("0a7820506b8612eae3a9c5a9f176de2cc3af0db757a373616241c95e7a6f4a09", "24e354a9e647b5541226aaa7652955cdd684dff7eba75b96a4cde48021881aec", "093edab5e011614fbedbdfec8f0bc82dda5384fbd4132adefc07563de002c947", "242989a5a0767c6b89812ac861bfc8ea7c6a46120f096ff63c4083c656959567"), ("171cee1bcfcfc4277bf0b07ddb5b76ca2f57b5148af3ffd8d2a19c57c1b474ce", "03010f969ebb6817af9faa72b41c2b980d7e3b0774efa9508f9a3a043ed9a47c", "07b0cfa36427bed25d1c610960200202162e0c504be6e82c10f9cbc113eff4eb", "29e2996acc7d7636f104f409951a85b8ad03c559738bfadcab3d7a7a7ed077f2"), ("16673421498d52d18dcedb0ab60601f714f45ff031b425787ff8c823bba55f4a", "09b03d6e643fe9ce166fb4523ac5c664dd0a2c56cdcc693f9c293cc7e407c3f5", "00adc392d2068a344e2db7312342af74849868656cd63edcc97d74951bdb0c2f", "0204185079c88a87fe424fefa836a6329cd1bd29f010704126b658551f82abec"), ("2eaac19f397b27c3c6a1f99c2aa161cb74843a8182ef1fe722a6cfb2c5e254c6", "216baa6db48e1ff07e6051cb74bc87bfb0215b213461b0c48aa8d5d30858df3e", "130f703b6e5a534472a65164d3f5163d85e525303d3931322315acfe5c9618b1", "0a225daac16a1200784fb4aba648b69dfcb3eb09c4f89da68c2dd7bcd2f27609"), ("14bebdcb711b7a17410b775aa0016775c1b4a60ae973d9c3461f91dfb6f75166", "0a103e05b6070a5e3fde383ffc2bbdb9fc16249a1126da2536b96a527b09db01", "0c78c2b547498b678eeeec5f4f19b97e0784828e04ae2c4332504df352dd1ae2", "10239a9f761f97c19ace235a107f9d69568ab40a2c1a45c10aa9362931de583e"), ("1daea747a4cc26647d9ba70b6a6d5a04887f1e0647f536fdb3b5f94cfb08f515", "23e3d3e5fa77c9e746410110a68983c8e73571f7d78442d3fe865d1b6df60ef1", "1e20ddaad6120d03612c755483af8f5d255385b947df7b19b235042db1ad0a8e", "2f13455d69ab78cc168bf621221cfe046d3bca188a1f811ae02f104e1d5af96e"), ("15ca0a82db0fd454f70e1848568c0ab10556a44ba44b91242d29a39d683b5f41", "11b2e0107907c73f13fce6571faf966b7c479efee37760c467c0f043830b5499", "1e27672263fe17e7dd8559f72cd95093de270b736a82169fdec9b996930a80cc", "038cc799b82a724639822c61ecc7f89d7484fa5de146363e2affb3da005780da"), ("0a578ea5a84fa998fd7b5a900d566dfb84528423296d053bbb8c25ff34db2c39", "28fc14d2c39a5491403a7b3cda793ee3b00acfdc86a8e9207127b939d76db8c3", "0e81e7b62c8912245e6382a3e2576fc8f2644924812df483e30bc7b91c970f18", "128375a14a465220f7e1bfc118f2f211e3953aaa38adab9569f53d280f364f94"), ("2d7364f084a7c62dcc854aa7e807ede0fdcf06434a661a3532907493471d4474", "08a29390fcd1f639994ea874b65261b82b2dec9c5c7b404dd523ea3b836dfc3e", "1e9cf1ec4066ea9dcfa9ad9cf361ea2049ae75f34bc1ee9b8ac043f991fc5f8e", "1ac30010a99f44829b48f8ab6991457f8a3322cf77d322bb661943668ac6d34f"), ("1cb3fb9125a1f552a39fb6ae663fe56743cda9faddc9d12a0797e3ffc17b77a4", "2f6c73eddbe8e5be1b37b2868f05f7bc27ab06c549687970f18f6e68f2bf3066", "1d7db52329daca266e1325be1c0fd81f54066ddae346ad6cd241b03fab51457d", "17ddf0c9eca6834a1084078bb0acbb63471cc7dd40913b6ee2e50cfa5633d861"), ("29d7ebf0e52c875395993706d5dfac57a25190181cdcc50e24395ba8c60a090b", "013f940569afe25247360b37f5ce2e9216940273f851b9cbdaeddcdaffeb73ca", "26f02f9bc161fb281b6391386a139491cc96be27aeada8aa64cc635ef9a52cac", "0fb40c22a714ec8c33a53b6be7f0a29b5423d66ec5597111e3520d1d3802c036"), ("279d5fecaffbf7839d55d6b6ece9999d1906567a93c1ff6e149f59cfd6ae3713", "0fa2753176f5f25e2f733bfc632852320fb5d6aeb47a9f0deb03b07c49b7a129", "106aa5f8f6b1932313406d2e6ec2ce8470f9321c4854a08fa587ba31fb893ad5", "220fb25416833c23587563f0a19eaea799ed609349a35f7a3d0bf5a1d4ad87fa"), ("2814025ec652442065d33194b842c6f2f049b68fc476b6fffdf02e46e731449a", "204248dc4ae9c1bbc47a0b757ffaa72a77d5f4d808d7af5ee36c3a851bb086dd", "2ab19910fd82c7f1d7d2f76e3e8bc8f60fc1c97a1fde101104a16c6a6a7f17a3", "1dd46bcd6228059114f18ee88d2accda354c810d2411b6ba5a8b8d3165218558"), ("21e5c4a6fbe913f3e865b61539408ebe78afe327f77a407896a6aaeaa8150ac9", "161936f2fd2a0a92eec169596e2e91a4f528d1384f5446c0fe1a87915e42dbe5", "0dae5ff1cb48165c9655feeeed8ae0063336e74e597f70ef23e5d64f68981da5", "04fdbde95c6ef985f2fc2ede64edf223f686ab30b8ea33a259ef0a44f21553dc"), ("2b781309136d19946932a785a7d78ce73cd90d0369b57eda08f25bacc7440aae", "23d65973829b557cd06f39b75f118e044d8ed26bd0f1d14642df76b4ad97b917", "1aafdab05dd6a59e0d383e9ce57d2b32d18fa7c0bfb255770677ed328f92a831", "14a3d51ebbf881357c884b82f3ff4e61eb126df3b1c38423a4183c00f316a241"), ("1e25f5074a517278d63158a224fa29d3f7656fcdeeb43d1e83214b875cd97f1b", "2f89f17b7ed1821eff0ac354775ce56a71d4f29e8205a01a40c30d8cef8729a3", "1b135bbc251f74d889cd0c611dbf38359c4b122f2587db1689d9256578684e52", "26e4dfcb9fe5543bafe806e6b059b0b5fe4c735e7be4ba71b608bc335af414b9"), ("2ed179654407e6cc29f91310e32d7efccf209c4e7421d036b6c68e2a8985235b", "241f888518b1a5cc5705e971e059e4aaaf3f00e29bd3440ee6d1f2b9bf9131a4", "039d93c2d5e90542dcff4ffc601fe0c73e0e1c4297986c44abcfb7f3720cedb1", "03eef9337a8234d036b02f7bfa228f76301a2267bdab9434583df1547d4ddb3d"), ("24f4980db9829c50fe287dd260ed846788269b871e015d97fa5affd335915f6d", "213aeb5d8dbeb65239b53d94b91fee4be42d95801d19eae18990e74665af06ad", "0c76bb8249d1bf3308463734fe3a306bad8f6fd46d2e7487e3b4591e435d2844", "1323ad44d5b625cdc56fca29a5caebf1bb5a2749cfd151d3d801297dd756ef6b"), ("075d4ba13bd28927614dc5920fcd60f0ce8295e25bd8b985d1a7343e4b4f4527", "1ad34f69cca42affdd41d37651fa871d4bdf50745f05e54763868526c860e17a", "0629472666d2468b013a25c6f0bb65f67f544dfca9fd8ae37be51f063291654c", "2187e64ee68be029eae0eecb6a55617109d79bb5b39be2873f1af523a1aae04f"), ("091f9a6ae91845bec7c5200900fdcc16cc27d6b03cb94979a5f7cf961accece5", "11e84002313cc015b1cd686bde0bf749247ebee862152f18bd0b631fcf941f30", "08f4536027bc868fece30764f0e040710dccab2996ef6af697084c5bd521f141", "0b7d18cfda7ead5126e7d3c33bb284c8f9b6cb0bd1cd4a1661dcada0be4191b0"), ("2830a025df31449e4fd3f94f25930db868220283d0f7230484ca738fa06f9439", "1263723b8653d9ba9ed6e0f6f1861cef08a2c665d6178fcaecf871395287bb35", "218e7b1da24489c7e877a21d2b1c513ff6ed9805a2e1418f2311082e2741f785", "1aff764387fdd4fd4a8cb15e4dfa27c320d73b1a9c63891229378c0867ca2b02"), ("1512b75d8942e6740e3f533b5b0dc2f3f9bd6db2d60e95e0ca172012bd3f1ac2", "0bceff69987668a0f7b72b6caefc610b415d3a6ed07371133fe64256d0887137", "08b0f9a2573aedc0f41010695ff67c9591df0492eba0585f5fd05f3838ffa32d", "0603b0c306be0ee13d277919f45370f2247430f43c8e25cf3e4ddc94d25f43f1"), ("26c684bdeff31636e542d6b7bc48e28470ed38941ab8a020fa222ef6d0c70b94", "18eeeee3545c709107ec254aff55637f81d6b867e10d9d131e5a4b7eeefb7fb8", "2a36301283386c9a0867861981f174eba66ce0d8adcc4951d7189a4cc26df031", "2691c116f3770d9e52c598ed0515bc44ee7f8c4252c6067ec7600029d94ea943"), ("174576aff87284ad3e0f8450ce06f317307c10c92be05f809d0ae3a6561385ff", "05fe11f70ea9b4829aa7370cfb866a3f68adbb64231c9b5af2c9e98304784ccc", "065e327cedb1c6f658709d524aa9f3de6b959507fe83f5d2698e65c74b846ebe", "22540631c5fe87f5f8e642c5fd5c9a01597984e6e60cd404ed65e3023c8cb828"), ("000b03ed050cbb95b688afb2d23fc4eb2b7fb670e4696a5f126bb6b78f277f28", "09db01ea90649a27f70727d5c2ef557b58e2870dc77d623501fe4c6ddb6e0420", "21a3539895a79b26ac04e72e99ed20219c7ecb8269a547cbfadf018c76a827f1", "04dde9848871a5037d12244116df70ec0c40a0fb65485f6037257d3a991d6507"), ("187c452555bfc8e96589c7f7ed52b59c965b3c404b0024d83d9b68c451fa745f", "00fc3871fd0b22484a09cbcfd93e7c28adf92eacf974b8e9a6303e82a11d7b2d", "0bc0e13e587fd00d3ae76b28ced1edacc0cc186fd8732fa963f7ce088a867782", "1288bcfab1e1b60d08be58ac04ce5dd079e4b0d6cd8510e6fe8986f9138b1591"), ("06db87a9e4777b753bc3927e1f9ebb8ab26837f14be4d50356c82b9cd2f7d6c7", "2556cd3bb1cdca6e3ee0d15c0df61a6c7dfdc734ff46d1b1c2efdbaa93e32518", "2c47790ad490069d9aa95f5988170f7a8b015b5eb8c339efdecc90292322e68c", "1669b65636b68a68e3e409d5090a7e45f0b61d926c8393208a8bf20ed23a9298"), ("00f0f73cd1caa397e99872b6affc319833f3cb86a2e49489307dd62534c3fe70", "20475954308bd4616718b1a8c6c3b36f28d7f2e0b03b523f4c1119a986228728", "272de637e9316831ebfeee95a92f59180e2e735f8ade646cf50539a524267a64", "2b19dec4a944ce603ab32c72494924cf75e7c58e12f703870e3a916fc94f3588"), ("1440f4bcee88e4fe0d6172b160a4a9a6e0a2f64e3646aa8fb581a413024027bb", "221b00eba23d876326d5a8c6543dababbc264ea434970c6a050ae5830ba51e54", "1cb6ba61162625f57a19c994a1ef64403ec135ed517f236b5917e48443983a2f", "283b7cf1b57e0dffddf0b42d68f151d5d1504d51a5cf6c1e469b07a7284cd797"), ("1f47fccfa82792b2bd59417f820129cfba03bb4594ae15e0a14811f043b15804", "2a2faa819f46bf04becd94bcac3ac9bb9403ce6c4eef69af86883b4857356a13", "158c9765de3c861cb18e5ed389c7f2b3687bd314fa1e03a54b7f1c391de736b2", "0e9b033f25b69beb3cf7aa19a18a4505c1f7b68cc5c8890935583b088a8be6ca"), ("2612a2ca75d26240ddb881b4d4d8e1b5c4d41bc7d83b882b9edda057ac621b61", "207898353e950d7bda2a08f81acaaecd259f753cefe98793a17a47ef6deb2418", "053009533759dff8c42ae80ddfb78e285bbb17fa326ca4206c2838df129c3df0", "0cc93c6b3b8908b0470d85de2908fb70c9f2177d2d8d3296808621aae202a9ff"), ("25fc6bb789b6f57573f152821ea7d136811e27e5869753830c4a9c323a22e832", "0d57e1c1da5a8898f55d147ba146b08a260212004b2316c1a2c9fbe029eaa143", "2ae42318b74a624163531428b8e118eced1bd835331703b687734f0b33b7d161", "17898be93f1401a788390be9a363ff83929b88939ccd0f5c4ab993debccf0534"), ("2a174724e94a2e5c64295fe66179c01449fc9692278c6b234025c91f1e9cda49", "1bb1fc567e4a02ff3b3f9d29db551fa488f5609666c2e2d29730fe8ccbea627e", "0eea1bab65f5e07f2bc03c95db153ded34da7e7af990965b53f48f2ee34feb4c", "216922bf1e52a859424265d718abf702d1387b484abf7b807958b14a1d9e4774"), ("2e196f2e8d764018f82b2a7dafa6d8120d650cde9495bb69a542286a6eba91d5", "029f7dda4cc24c6dde9cbde979a7636110fbfb9fbf98d57f270ff37b86915c31", "2f139645ffc010a3d08ef013ab512c6b1daa7dd994303ded5b074febaa4d775f", "0dd51311ee4270b5cdbaaf33d933b9cbbd880521bca3b454fe9bdf67c7bda544"), ("151c44056bd041a4cdd8a9fb8c54ed06af9151936d2f758359152ce2af16e640", "264f939e9227880cf107cfb41250c95eea37fa45802f9be709a6cf987169f89e", "1250cc440c10e6012098cb5f7c7d855a77c1518b513091afd78bd83ab95695b6", "0bc4c9759f9ba7af3393ee655cbf01e565d17f6af7b1c664847022c90fff81ef"), ("245fd86c8c1b07b2311ec16a22d4a7c9eaf5e660217d42d52ed81eae045a26fc", "0cc2a5d7f3239cf4c36b48221525cbae42e268439b7b0c48ced16014f983a224", "15e988cbf7080dd7a8bec71d0c9473a0484fd4fc7a1ec73d8de8141413958f68", "0756cb329efcd7146d2369ed24f6a441ccd8b50fa767b5c1f9212ed5fe11330a"), ("25c9eb51e95f6055dc9d5545567ba4ac286d84943a89b54cbf21649853545a9c", "272343901502ff470e4d38e92010f7e3b7aa337ff999f003d838a733413f542d", "0682fad993024579975c8520f281881c541936dbfad1f839eaedf095d440b22f", "2179cda10226634033226f151537f3ffc466648dcbb11dbe40ee86bb072308ac"), ("1ab148ee442d317be7c7ba34afea599f6ec56df87305ba3454398eae7b3f4300", "05fc4600d8cf7828265be5ac4553a8ad2be50134cbfbc15f510efa5f97a2f8f3", "0387fca2984be29445dfbd43aaaea88c02fb200ebdfead294e2572909ce37977", "301f18e5fdb7ad220084c0aae293a558232498d0d4e29034fab21f8cd8f3cc35"), ("28eabb66d1a8913630dcda9955e095dd1f794ebf8857a8e94958b4ba885648cd", "0499027c053bcf9c175d1002fa1a0ea8d4dd7207accc2b8efd0faf430e8a300c", "2b6efc9bcf963e7a075362fd3c86e7f357055b2a51edd38f8843f98d01b2440d", "0567fc800ab1f67e4522ba906d702e8214f03d7adeb81f15d30d1fe76e1cbd2b"), ("141643ff46c936a59ef4627918abdb8b2297822d22083862f51b5c3bc76323e0", "05463f08db7a0f6112c39775d3fbd2047bc92a9270724fef5dfe523958f3580b", "1843761c856992dd806a7d8d21ef9a69c66d4ed4cbe46646febf669c0b820304", "0df3270c47adc6cf3a31a0fdfbf3b163627b7b1f5d57a62c514892965003f957"), ("17ddd89c5e91e8e2e5eca3ab1adf82c308fd1df24081ac64685e1d99ed2179a6", "147bf9e1b386e5a797b32050735113253fe7de33de797f085c05de68dba55818", "119e1c70469a868f4b0feea7bfc27a2aada2ec54ef2c31a035156ca2078f2de2", "03d985fb8447776ad9d0299a87b6b93fece19a06e2bd7d9b09c1254f7b0e89ab"), ("2543341526b798bc92ec4af441105efcef24fc64f3d268c65377291ba32e17ee", "2305af12b553f74da4230547142d9b6c203bccda5bbf14c83fb594f51ca9e484", "0674a746847bf4a07dfde010a372eb6050e33cbf65ed7881d27487f67449dfa7", "1d22691e8292b452d3aaccf98db641778464ecb51cd1e69ef9823f31d1e44172"), ("0b9391b6fa6cecd88fb3abf2e6a2926371e9cfcb89ba5db1b1d24e9460743dbc", "2f4d030d8be368444739e3da50bf16f6a9b6d67d2ccd29cfe0e83737de07b966", "07cee3ca9ec9c0dbcdf04d4cbb79d41770eae0f987914e38cef81c949785a9e4", "0a44f8aa52f5d46ebdba28e10668f16cf9ca013eff314795309de68758cbf9cc"), ("2b8ada7e58da8319a33de50640d9aff8251a45f44cef20a6781a7350e77e8c2f", "16f48607a6e4ed2d36d81630c344725777930bd37a6fda3fbe10a1b07b26905e", "2b2a542a9c3aaad77fe8210683bff18a22feaa3f78b7f9b8d2c4d976be5c7c74", "195ebe53a37a48f5e38d9a136e7db94ee1c35b7be1609f02fd26ff7c981c1ace"), ("18c9645e2454b7d12e612098a7c0d211a13083f8aee2b21fb81126fa7479c72d", "150b98086a4d1f994574febd51608911361bd605fcc7112da25574428a563732", "2ed3c32199b36c84ecf683c1cca0183ae2f577d1834b430ee102a309e64bab7f", "224317b9c2be874306c26ef03926a6827252755204db8228427a900b063d2eb5"), ("29c8adb352540cc472a7422ee6922cdc39f0d3f45be3c35a80e9d5493207a138", "1d115cb5c93cbad2d0f67cc53e6ff244f0fe6dbffec12ff798f8470ddbf7e2b5", "041c4988b4692d7418acd6f3617e45383ac337a5699002d166153bffe65e1140", "1478850c186fba7c42192e2802c74455b72bc8e88eaa9610c46611ac7837a13d"), ("29302edadca71ccc14e2f5ceab9ddd8f26c22cd5b3529fbaf3a973096a893af3", "22920ba5dece7a13c85745896817c99be92c953b030c783c324b94d8249ae984", "18518d3ec2e7a17953d995b6adfb4c733f641ab4ed9706285cff3dc6b9b50e71", "054f859ef8aa6d8d8c02eb21627a35f63c07c69f74b40e17b017a6e1f004d24b"), ("15f2f2109a74f49453876fcbd4d99ff63bad6dff11c1bdc375e1d5068f3e15a5", "2c6476d0ed12c0c3d90df4ebcdc6dc1da05f2812621d69beca24e77bb7f52435", "09eac322748c06a0a3f9cc09f3b1244609e5bd2d21b2356b0c44e2b46ab0341a", "25c45de5861a1244d19b50d58c9972c62b0be8dca5766f6ba2d4c057378ca490"), ("219183ac518de62c84ab68ab6e54d48b1c5baf607ebad58c3150f9f30ca3de2a", "304ebe3c4d25963f957d063bdfb4b1a8ee7c432d585718ce793604e8cf4d18ae", "043adbc0ad84d288eccfae589882c7076ffe96d2a14ca08e3063f19104e43d49", "2a05f1f8b05d6ee66f22256b5e6fb64471f45fa1f2a2d0b6ea01d90d317bd8ae"), ("16dd3e58e0eb64167a998a9c85bd214c6195441512aa8615fb3929f59952a35b", "2c51f097faeaab67c0f364a0bbe22caec0661eb2649ed03696280d1d95ec37d9", "0220e7d2ed90d51066b4fdfd0ba611eecdd8d8382f614ba72002461a1023105b", "17409b8df5964f50f0cafa98c0d05287a3ce06a1034b74bd49569c41f82aa53e"), ("22d2fd3746332442dd3aef1dea0f3265c1d1aeac5d7ab158d6bd952d9694540e", "2c38ecc9b8dcd6b75eeb1d088ad6a8ab2219b9d80508c39d623e38bd51c40dba", "1644e6b2731268f2768a521187e995b48f691f643be16b246960680833002b61", "151c8c2fc31a8ee42a503dbfa1d8788e6c208f3fb8e25bff42f141ca61cbd194"), ("0f7d05b31ce5af5c432bff63bf4be5b0a14d4576c2f63b854d3776fb89898f85", "19c4715b1745fa99b41989a3ec2557a51fa26dff3e7a0851381bf99afbbeb4fe", "014a3ae8dde85ad8d2276c0a5322b45877d56830cfa18fdd38ba8c19ee403448", "0f4e23f6ae2035a60d5eb2f52f84caeb023d2184af287b7f1dd4e94c2f8d9da9"), ("29e02debca02ae12243d49bf31ee61cc6f2ebecb46c6a0ec8e804d7524a7a90c", "18d7cd47bebb97c0e5e2f4bb8dc2447dd79ef895a0b059f77f1a13ba19dbc497", "0ebb9a96808bb6d99edf300d2ef68124d5c05e50b814044acab66c467cbe238e", "09c65c76fde7fc68189041cd4d64d75c60b42f05a73ccd4526c23c9b3f9f65a0"), ("21489b9d2c6a17de2521734ea1daf2a576ff2c319895e129678f41a1952ade72", "15a5996fd703f95a986b99fc5b8b5a842ec085449ec3da1d00b175da1fd86b59", "168323b3bbe1a5ead4e3e596a763a78484ba6faf9a71398f33fdf88809c3482c", "2c753c0b51d6ee6c826b2bd795f5ee80a1d7020ae947324795c6573de4c743bc"), ("174d48c9b1ebcedc99abbb884c1ab50575596c4c5621c018b7b3471f49f118e0", "218bacefd21d681713c87b2af48df831447dfc8e5f276d6ff6fe475facbfe89f", "1974c3b833043f410dca47a3cb3a6d78f1edb8efc6cc5e73189e1c00f6a05ff1", "177000ad84ad9bab002707a44a3e3d7d7144bda52573a60b0ef3b8c151ad7dcc"), ("1e163d710227d92f5322458664908738bcc7c9f13f5aec8e824516cdfffb6045", "05aa05f055167eeaa674b8c81750d0b374ec88da2e6f656ed2aefabaa2766f06", "2b71b04716c58960e4c3ac9007de32a809bb2ecbb0b5ae189c7217ef943a6a80", "168501f4c10c5811dcae91ed9de21c30d034a7924359bf6a0ecf98b5220efd24"), ("02287224457d6756a6fa1d379bf6a3f4ad1308d4cc6d68429afedcac7e67b692", "224b569644514681ef4782b559156ca048e8587561b99c97f20f0344dd85a49a", "1029fd5b4f37571a038a90bb4ffbfef3bc11a3d57b868732f6c140d676f4c18f", "066d7b98795dc8f5dffcbc2cf30bbc0f378e33c9de649378ae5f9eb385a11533"), ("1011cc85df45032eb6ea9298d1d8958128039fc9a309a382ce54ab743972b026", "0306681896f65756022b8c99cd6917e166165c0c4eaa40ea6128b8de029636b7", "1156a749c0974e554065fd870ec903184d5f555f664da2443aee6afa927c13a5", "25844eb9c8ec7b7586b0c1e50c26b238774044c5a86a8841e8fcc9ab0fbf5921"), ("2fbdffc31ba03e5707f290ae86b75f3d7d449120fa86a77718cad42f0452dc87", "0aa825143b4634181aa33687e43cb3cac75574361546e52e627cad2c2b85c775", "0c492e5b1bc47bf5f5af7961fe0a85319fc52d48297f6567aed8375ed5ab3b82", "04eddb8143b2cb010b91363833f56de0bfd143a073abdcdb456aa71ea94785a9"), ("251115d4d9098581aa5973ba0bc4b50400c6948812692fb9d0fc28bbcbbd0942", "0127717f37f07a255223fa456988790508b33e19c1d66ef6f9509be405a3ca73", "18bd14b24b02ec0854757fb05734502e34f36ab8cd93fe2ba42b935a2b825e3d", "264eb21e10c72d66597b3403bd846be70335996f56f58881b946e424d37ec611"), ("2c729aef7ab2a70e7599ef8e4f81440254eee93a6facb5a6f5f6e974fdfdaf2e", "2ba20ed6c8bf3406dfbbba6951e18f73a09e2a6d95303c9e2fce256010177eb4", "01615a6dfb40fc820a0f7f64c6e87fe5e89a0a520e0f5f79e109078a7c26147c", "04d2e04dc3f38b4cb12c682f4c086c3c9e7da0ad49f46e5a7060d39a366582b2"), ("1669bf7c1ab091bed6459e0777f67e06a0832086f9bf26c705108eea6046369a", "2dc78a30ce68421ccf53ee3d8435e675f1bc408c939d6463549534b0f601b495", "2bcc4dfea597434290a3f8463cb926e7880baa1b71b3d7e0f403752f62f44b47", "15d7fd1f042264a3b0c3af1f7f9577069f74d65061024316e0dd37aec56adf2f"), ("1daae9f963176cb35d1ca269e13d13ac2eeecb6022358d97200fa33d5efca6b5", "0925f94f2a844d9fe9e39a27179ee72c9cf4b8097e92d119241e807878f6fb95", "192437af86060baebefd644fd5474f6959a44ef17a7e42929faf1a82280fea76", "1b950ecee9de5822b2e10745278b2267d0833c9309347c0fd6d259ef9a6730be"), ("12dbace59db882d0dea6a25110666f8d70026febe39b9e7bb034cdeb74acd9ad", "076a9408ec91805d758ac571f6c47aac5f28f244d416297d873c4280e04c4af2", "2aecce09397fd509390b5b76e26dd42be4372b08f8281f78b6de76c6b8e2c808", "1f951b141892ecc861e4188efcdc215598321d555bf116e06f74cf81b2dcd5bc"), ("1e5567c747dc923f010b5bbb2f133192557ab8e17e83ed0ba1ed574ff9753572", "1fad6f8445adee70e55edb88f49e6932ee53e78401970fa50759cfd9c9275a42", "180b8e125da0d0004492e1f53b73e966c31a7e358ae244b543a0de30635044f4", "2b92169502c2f4cf87137ddc0f6503873444268c2e93319a3a1be3264e26cf12"), ("1daa2f7e2dce71e65ad1ea311e613624c29658b67f86b4e0f8526fc1c8fd9fc4", "1ef780291694c63516ff1c5517ecffdcbee76912a780ca3391b02a897e06c709", "07c4159cd94f72db9a31430c3c7c2d637a5c1e1ed3079e57596aa45f092dabae", "2427efc9dd821477c41a3c54203e6289fbb6f6966fb67f1867b954b4b6f8d48b"), ("2c646ec220e0aeecb0f512d3706509eda07476dcf0a91164154bae80a08ef379", "288e4f89c82b62c2ecb9144d8bada6b906628fb0c9951ee6fa3d76c09fa0f8f1", "1ae78f1cd59e2182d32e195d2efc8af338eaed008577c22239f89f4f638d83a4", "14b9b070f52e97bf35bfc2c74c06e7639715a61442a37dc3b9c44f69ad6d5f74"), ("0c5242440429bde4c120d3a2a93212f19993134bc9fe65d68b7987eb1c3d7598", "04edb82d9bcae7e9181ecd774eccd4fb8ecabee2ec2ff2eadb6885351bfba620", "1abb1d12dc006f5588dff8117149a303ce6850c5d5912ae41d7d980f2d5680ea", "09e33700b0961e2d164a7e22abcc5bb9235881fc163ae3c9d61a0a018ac212dd"), ("29d9950e6c1b1a4269d29d61b3f95bb815f8b7606d655c71f8987a5d55948dee", "1006847861cab6123374403ef1596121033f19470941c2fe6280048f68573d99", "2ef501fb4578cb109ce1d5ddeefdfbb1cdd94f4884dcabc5a7423bb83be83e31", "03cad07018989d87f213a6764e929175626285fcda117c24c514363706e59a49"), ("1c7b34f4552e29630ae0df9d79c374877632c624526024856e24693dc079f474", "10cc3ab02e066fbbac98d32bd2752a1a22781322021ff0703b90e1c990b42743", "0b13ff5bf2ed093059b3645da7883c338a47d8319a8f99dfdffbb9e6508782a2", "046dba437982b146a41b376c502011239501140f97e5c158d16fd62f170eb644"), ("2de0052eb7c33385eb4d1d1c6ade5c89d66f6e2e925807600de2a40db768521b", "2c7ff9eaa92f501d8d7bbcdeff7261eec4013c24215b75f928faec3f7a01e246", "1b28b798b536405b968cb918de76b3e9d610e68ed4b02bd955fc242e04796abb", "158d4aa570a1339e92375d782d9568c2c5cb8e2432eb861e6ecea0f7c42d8025"), ("2d7da73c724b99d72afdfe68a0a19557f2eeef3d5295d79f2beda70e27a9f40c", "2ed8d907159aeeb2772a571e96d0fa0201cabc10b9ba8fe063d8289387918441", "28f41b593a6a150cbe35ab0b4c799ae284aa276e21b5d7f527c54313d4a0564a", "1abf6411af3a81720d8003070bb2869572ccb1aa972eed36cc0683af9a48b656"), ("0e8e274ddd363bb4041854780896fd9a3e859b3e0261e83d76b9a4f145aa242e", "109b65b2bee49ebd00ee703aec2bf0a00aaa0bfc14509f879259fa6012184464", "23db4639b3a66bb4503ecc972923d85b76ffa378b1a68e75d3537beec8767f3f", "227d1533e03297b2c37275ef4cb52e4ff97f87d4c077ffb3f51e4f143b0d3cb5"), ("1d6aecab10ab7801d2d0bfbc97428e01835afd300ba332e258837ac4d7652395", "1cc72497fc3ba07429053ff5c61b3d6a0794c041ff526dfdcc08167b75a3fcf8", "1faab4450547ade1aeb8607803ff56eaac5367267403bfa1497d6fbd75227094", "1fe54d3dfbdd3b5e91bd6c3c6b09f5937f67656d39b9a930fa4a33a04395e541"), ("2936a06d3a8baf195f64c8a95c7a1ca100b59b6c46d06a46d7f669d36c77b488", "0b8e4805693fdd0bc18baeae67fd2084b064b3e988f54005e62ba377b429ccff", "08c2c6fc2fa25bfcf59f33ee1be19bdc22238cffd08fe31683664745262938c3", "2032966493845912611523991051ad32d5f36cab629e70076759cb8d78cab180"), ("1ff9c8ba7958c35a0e6562fc4549ce08c4d7f943302ae0dd48589bf74294f860", "017d11af7d11a3e9e8bb8d9e1852a2e4fa4f80edb9bfbdc4f10f997d34c32fb9", "1b80d7c71eaa193f037492eedebd46485897128678d2782b6f4a474d3761db4d", "259724b41758f9d662aa170b87c6c66b5cbd1f7882a02091287f5ba6aafe58ca"), ("106100a28bc58029fdaaf0a9f8cbd508064f64eacc178713265ac6987552a98b", "2e25dc8899fa719dbb87d95d990fe34e5c5ec601bf2843701388695cc4fd9048", "202f8e87e402342de50048d5803b078acc581de5768ff0e962f83ed7a74ac3cf", "169e09aaa8c59d29ef88284060efa1f6552a5b163a82e6e1c577608a99a8a70f"), ("1adc789abec432881bc0be5e174e5d9fc0688584fae005fea87336b6443bbc25", "2a672ce6d6cc8ecd5a9d034fefbe9f480f3bba4b0b01543b02aef1671aed6b9f", "1029792fa6dfc0196db349f3276f6dfaecff13ed4b54bb13fc50e8a2891a05c2", "22c370de58a6854a7c999e7af04487b4fe2be9fb55a12555928a6ab31298d170"), ("2cfdbaad03e7018a65bfb93aa3889f4f477eac832e75bb033fcb0f818c56f067", "246e07e181cab3d0e802094b43323be1267b17c033104f70a203e73aa73dd04d", "145d07893e4fd88175da471e29a40e48e53cc5ff838ca616ab6b9004caabfc53", "1bdf519cff34f6d32783a7e9d2d45923a2d4e12bcaa629d6b7b105d08bf7f151"), ("2fd0b746c9b1e30406ef7ac4a071c4f7c2526a2e308a31c59caee6617e1c5e67", "05760b1e978c4b754812094573de21f32a9106368e3ee24869d526f89f5b83d2", "22bc5672f3800400e7ba8c2a0c1439819b1bd1cf5b6ff24fc854db9ae397cc15", "1e417eb03f5b428e03544b3ada656679b41a77dfa9c8808a36e4754c0c72e32d"), ("0af1cff6da65cedaf8c5ac64a910be6532b3000333d1f88994daafb86f4d69a7", "282407f625ca06f20feca0409b61284324e5ec3623a4ff4da6bd5ba950e0a505", "21fc57281d0c0de25ff76a62cc3994fde98f7581e2016f9459536084e34fa230", "287b64d58362450ba751cb1c2aec73c4c1a38e3001d569a15aa7ce6cd04d2b45"), ("1aee89db96d108479a334c2204b6cf57fc9ad317a2dd37acaec7af527a3302cd", "3017c993646824b80f90bd5eaf230ecc4211d04702f05f4f9d16fc352808db6f", "2016b37dfbaafa0a5f203a48db877e05926232747463cc9f7c7e8ea723ebac6a", "1abf0fe9434a873071e3643e10a6841d26e6b27858f7615d41296a40f89030bc"), ("2e9fc93cc538c0f48b4ac41e5f2b12f32b47f108016d9651a5a714e56f4d27a5", "174b354b631cd0d3c543ec816b39e17688adb1cdb38295c683c02c84040e8f64", "2e81ddb1a9e83e820a9317134cbc350400afd7a63595e47c91db50704f13f86b", "2179f4736f5fc346d2733830048377f75327c04a0fcc68a1f62d0ff9abd3eca8"), ("0f78d27dac64dcbc9030dc207bcc3a27f3651cbb6f5a718b68477c45e7f8db2d", "199272204c9c0a6e0eeb88747aa2308ef7c725425da6cf66c34d5123d5c4dc8b", "16a1be1b472e5b28135ff6fc91fabe265a052fa7a372bea23e69c7918c9a8355", "1714960ffdf0aad11743ad455d525f53a1aa33deb58840445fa1803044b4feaf"), ("03544d3daabd887d4421b0a1b11508227ae87d4a03526d8c52fb2a3af2f15406", "0d533644c21aeab8a36b1517a028f0d395d0b1009ee7e0759ae4c5e0323afc68", "1f3bcfe63be6d01522a7a370c1e9700e8d2165eedc1c367315bace337f1115df", "0dd4830a9ffcc282fe8d92f7816da2e30bc0e7398a2c18ee2028d113b36fb9b4"), ("120254dcfad8ac10a84d4521cf13014e8a59321b8ec7f31633d6ab3219d36ee4", "144ac9ce3ddc7be7db8e1266f0482ba8af29c67684ff5cd18385201bc21a7503", "26bf3c4d269e7663c0cf49d454f76a92f092876943d072f5e5756b30bdd6166b", "1382a440f36c386876f87dd6be1698974054474fd1f4b5fea417d1944e64c41d"), ("06ed543a3f021760229fb74a7632819fc84d1f881badafcf8eaaa42e30bcd7f0", "08d581b2788dad053762adab3e872a9d12367f9cad7b1e9dc393c99371b4757c", "1df365181e76733f470d09d14482570f5902af3282f2889b2b67a356ee577c06", "23d4c144f88021efc9ed39e36ec7510479b49479dec82a6cadf241550b65e1da"), ("2bcce4c5e82b873ce4db7cea8769a3e826190c766abbbd9c2b0d17aaf116b41e", "0d7a22a51eb8e408b61acdd9dc5762c80de080162a040e853474c2dcc6a329b5", "18ca11d8650581b0fe65ee74d63bd361f20b90b29e6912639b02a88fd351f4d3", "0186e9fd2d9378b9bb9bd0b57f96bc8bafe8b1fea7239ae7d8e6d0669d9e6325"), ("266f8b99c0a02cd543e1e1b6ab3f00d3ac5c20d8e1ed4298fdcb4abea5ae2c8a", "1eba4df370c466176e3ce7810c8acfad76294485ad4f8404dd7bef4ac3057619", "0258c285b990f641abc25a029fcc11c29f4fca405424ed9cfd8658561f85f0c7", "09b4cb6b948e1598da1b93aaf09dd24829e6e8ae9c520aad32ee8a2f51298c8d"), ("1712b2b49c1edac584ffc68ef39a45313d60d53ef2be04b08425595e58edcfed", "0c761f2261a66352db8e3b1ba1c94ccc7c16cdf5bd99d64a163877b398698f3d", "093c7f53ffdf005c89b80085445952792b582ac7bfe99b63f5d50a9ad3cb68ee", "0c2bf24d6d4ff36127278dae78e66af580840b688cb64ee78c5f06bf87f22c0c"), ("20776ccdaa3ab6f12a8b7f5d30e4e09ac0be6d4e233462d26bf8180c0995c9f6", "2f3071eae24ef004883a1a95359a3779a6c751a9492bc33db223b42bec37935a", "194449107c87b84c19b6c0ec2f3da4f990cf0bd5f27683eb5139e13e092e64c0", "22ac7a1c4f04ed2386cac2032d7da76414e12462bbf8284a16dee43165a23b72"), ("178a838dd5a281270fe7aec3250fc9631049d330ce3d2ef301802e466d203662", "03b87b5182bafedfadebb499c3deb7c79604411e65d6bf437e3e093855e4d0d6", "04c39e75a2422f5171ae437d450fed8f79d71e34cc9df6db0730933c4da4edeb", "0324e10b36306e42d195c8e600bbdb6d380ce5d48d6b0e91a97299d97e0f7cbf"), ("2464ce098e8c52e36ef5975f0853dc9fa07652a51948e93266c488433f53b24d", "2743f23c674650909d6f61ee2ffdf2446534a273a4caaba9dd9e048bb3fcd216", "09982731afa914636c0ed0ebd44006fddd1f9da1f2184f1bcfca5b273b9a975e", "018129d91653c36d128c27eb345d978a1826c4bc4bfcad77764b9923d2bc7aef"), ("1e96d2d91ce53893a7c39faaa37a0e54ef43ef8d38fed49fee433c34d74a3b31", "0e0939d2e5405664957b06a1acb231ad8869b5b63bd63b50eb4a1ade1ee5badf", "29bb88ebd3e570b4343ef214455e295b0153132767b58ffed6e247f131ad223f", "01674d47a7424e340d7b426ba0901e546ea1e2f64c7221a82e70aadc80de6b2c"), ("12eca7b00791fe0c37ab5a490129749301c0d676a84f8de6160e4ef1c0b1ea89", "294ee72a524f500e76ddde14baaaf24efd99ae38e10064a881f71be4563c8f63", "2d761162a301cbf0aecd9290afb9b2887bebc483d689410f2191ff2268ef07f8", "2fd84fa1202ff198de1f4020190ec4cb0f288f3935a1581e1844b40f41592b61"), ("0b8376cd717263202b6b492f4db04fde7a327037c9aa3ef4a3b255f4219718cb", "065e6a0703f316b3567f68ce20259a2e04d832c9b33435ceb34d21f92c3cef2a", "15244038de59965db6d018e113e68fcf53d1c240ff193727e20dfd8b31e8f2c1", "17c5e3cad6fda27173883b8e3062df7df1a46408a22e8affd63cce934b2415d0"), ("275ae1779c7d114846e377d82aab0792412383f494a0d2234d1705430627b0b6", "244988c45a1d919089279ed52c1a67c170409b8e911ce7c0049c424e6942bb66", "14ad1d144d01556567e7cee17beff164188e3cca8f0f8e50dcec7e97765da584", "1776e2c8c5bbb47444b797dfcbd58e66132132edc79380cb84b2d5419b884cc9"), ("0d12e388c79b23b28a611e147235052e9ddeb9a497640706d56aa0e4819fd9b7", "004d9012078da775bc6e1be24c0b59e57d6519d7f9ce2316d7c5f81519854dcc", "0134bc4c1d69a6dfe1ac69dffdc5850f8e56ebc0dfafb0935cf82294dc913976", "197219b8744b783f3d55066fc7d05daf7a76699dc9b84f6b89581961e98a176e"), ("139ebb6b63e2d98e15a2f93df13a596d05a490031d85c0fadbaa39efa0bd6e8e", "104eee67fe5803a064e5f552f2ca727e47098cc93c7f5956df106b950d1f5018", "1907af10eaf169552c44cb059c3b46e200d2afbd2faecb3c839ab5319f9b7d10", "09266f81901d111ebd785e55b1c1bf5a206bc4794e2b719576f7047d1f785f6d"), ("2b54124eab33ceebacdd1478020a489643dd68f0d6a98a758f1c1e2b6bed4631", "2c9aaa9e286ec251c698ff69a5c8121dee3d9c6b938c948d843ae03a8e9bd11b", "17d32cd348df7419ff469346e29646b5169d3a9af2921fd5c20cba81308f5a42", "0998187cf27214fee37d9028de2da34cc9ac1b0bc468ed84e949b519c2df66cc"), ("285260306e3ad1937f61d22d9bcc5361103673e44589d98a1232c2991ff54a4f", "0438f4859cbd4430bd09cb2faa63a5015f1af6ecf3048894e56b2675c3ee77f6", "0e5bf0fbed794d06943c5e623e30f9e194c1b051d386625cb9b96672858d89a2", "1b79760d76aabd4e7b78c4d4ec66f303429ecb760b4d7c7345ef4e1d9130fa2b"), ("1a9779dd6c79297ce8c9ceda5c1810d3af649ed202db8ca14766c78221ace38d", "1e616722120274c6469488c456839d2f9f94fc80cd783caa25ddd9055b137651", "1b66dbb25607ec999de3e88c842873641c3452cc7ec4dac628a115c88fd6265b", "24d01101ac1352ddbfe5899212311d0764ef3f7d861f931b55d469f10a51f096"), ("24d86d4a583c746865699d714c6c69ed4ed6259f8f75664291d9bb8c180d5c18", "175db8acbd71df7a70d76910f8102035f400f39708d030ac09728fe23f343ab3", "08b6ee6b193eb653848083331805de268bdfc08f61071639ee187d4adf4b9d42", "1730f03d3d5d7d8fb91f6d46b65b4b00536c1b4382efe51c248d468430a0709b"), ("07eeed8caca8fd56d1c85ecbfc449b9e2c8efa8cd4b2ffe2f661953967da3271", "07fcca9cf5e6af66088c6fa8ef0a8abc4868854632015a6f4c1ed9d4421d682c", "1ba5f00d8d42dc2abb092fca71fc5d473eb08da5a2867b237f3f4261dbda0c21", "0d450f0312cb67461ab371420b7d30d9f73ece232de5902cccbd7a407388de6d"), ("13689bd56ee867b944b059e82351de2113e7f6c27b7bace7562c354ea315dc08", "1bdf45e1248fdb7a8c2354b048b81b233585e5b99418b46f0e5192e631cd7e74", "19347e4f07f60badc7ae1b3d418fedea9dbdbcae1f420617ffd1b7bc45131e48", "0365da35575c4f992009700d283443ab940dae7a01218ab948a91ae760199d33"), ("20f172acf327d2eccaaac29edd86cb20012ea7875b08255ad4e222c742412e6b", "185c8fd0b02034949c8821e43f3395cf5489b6f8b6fbfe3f29d69685f06b935b", "0e99568fa7bb0f1b710528eddcebbceda309d4de3c550eaff2d9f8c9d4b37b81", "0e4dba618c6740637a4f28dab5509a9260af19d8189e40ec6b7f5617a1337ea4"), ("047b1b277ff8f9683d1d39dbcaa2d452c91dbd2ed1f7cfb1bb399396ab62e1fd", "25dcacf6905982659c0bea6087326447a75eb4d5c49fc6a02a254b4a671f1efd", "00d1ff6db36626d3302cc1cf52978989d38499f8cc92538a82ad3dc4e8d1beb7", "0a942179b5664e45c79dba834fafb1606764a8829ee7820987c884eb044930b9"), ("247c90df82d7ef0cc015f0b1672980c77685dfe30c9a08562a4099901d98ee99", "1b475650c6aedbd70ed55873865e3527a0258bfb26147dbefbe572224b6d1786", "2276e33f7e67a75d871b9a76e7b4a42d410b6a9039dad9a018f737f5b8605236", "118cd213083204f840231cdde6e7bcc1d54cc949a04c9a8ce0d0e787a6009b7e"), ("06bc129c28834a6667bbe4d1cf4227074154b7cd73ec868f76c7a00e217c8ec3", "1e917282787bfd20d69f73ce92ade8dad85eaf96371e9c1d8ac0c897bd70a662", "10564f77ffe28ab309846c999eba4b4962313f857b2135b7247a8a09b76131fc", "0facec573f280e6f4bf8cf1f99c1837a346b50a5ea2969983a3a72d3c2a85fb4"), ("03f8580576d59f2f237392149a966446ffef53bd81d52643a9e0e1c5ed08ee97", "1ccde4fafa8509c88b106672fb6a1f5ec696d9b9a06e6f5cac52cd1f47feafc3", "04c6e4da6ec67d6721d140cbd33820d6c1fd574c5e529a4cf9a4cfa7303a3c99", "1e6abc53544e54e7d465e9a85911b23fe4feb0d63541c5f75f698d43907a5fe5"), ("2556220822dc42e907350e7b3fdef1e61ba667ee1b886a3094403b2b94644e44", "214c44fe5ddaede28a3fb2459c292d4b575a8d0fc23c09c159fb7f2866d46c1b", "124150b1ffcd4f59197669018c8f169bef6d43e728307d7bfe77b2704d630c3f", "113a444e7d3bfdd42f8932289a430d721c28d30ab22ff93508e8fc7ba185bfd1"), ("0efb07aab9b2b7735f679e28f4f3a2bdd9bfe00d0c56d963aa9720bdd54199a0", "297929b496075f5fc5babfff7123c3787026a3428889c8042a414eafee02eb7d", "0c05ad5a2a8d59928c207e2314b2b1240ac302a1459b02c7b20d200d7ddef3f2", "1524863c8df172e19217af9c14ebb01e6efe7e7b2b505ba39147453d277523af"), ("0fce96bb2891d49fce8599c897b5949576630b59a6a803d2b1e49e0391f7d385", "10251fc12c95da300ea519528c013fdcc0165207ddc31b1b5e706acf07b42adb", "193abe6be08336da59bc4ea25590d37f0a362121b31390437e7b016d827b823d", "20ae8a61da58d4e7324d1b22575b7a2d35841039d424dfec9632a2d3fdcb92aa"), ("13e19d8047b492760f4909a5331f0d2025b576f000a313ae792b523f030714f7", "0a60163aab4dc1aa732bcd4942b2f31063c6c658de4091136c7b9fe359e5d9b5", "117c3efae981ab56f8ca8d9f8e9b8b9afdba690afc832b8eed6108b12b264ba3", "2636e9173bcf7f331bbd9f827beee8da873c727423f29cbbc5ffdbf0ae65bb4b"), ("270282cf608b587baee75951f3746860d29525ab97552a5ca406446c7f80e03c", "0e01dbbf7dd4d15d5560b4601acbcb64fe73d8ff011b91b0b790f59198c56225", "0bf1050a7568b789aa3864f892a89b5a362e1789c11cf036dc2c67c5bfb2f291", "27daec33e2bc79cd2589aae31087aab4afda8829982a66e156708d133223f2f6"), ("1227fb82f747c9a706fb88beb4247a64ff3335c0c71cdb2f7c4b08c03e65f31c", "1f42b665ce3fe2e7eef94cb62b15e0bda9f733514219aadf9fbbe493f95cf9ac", "023a02b02a47fa181b12ea427ef4e8613c7153c658e310f9537a78086df1cabf", "2ea914dd15f12e5933563de375611a8a95a9603bb95935ae3e9ebdb83a1a072b"), ("16d045e4f1efe13add98078362d67f5f9805d95b539f17f77ce2894d569ec198", "26027e7652b21cebcf7cd96959d2d1694b153fe869c76a0a131c22eca5a1fdc9", "0a4eac4a6bd6c405e1dcf2496b119e9fe5a6fa5eadbb40bbc7a5b9fe9d422177", "0bd2b32e862195706c31c9b5d84cdbc1588738a48a585171345f27fcd6b32a68"), ("23a9aa361e16453104d6d79c176c73311c9eecb61c1e8b692935c914148bfb02", "01d418772da2dfbf046fd598ad9062f50d8400753ddebd88049f98b760a833a0", "1661893f9c10e225a7aaf99db0195847dce713629f6cb8bf898e86292aa53d1b", "190511f2688cec7cdd8557e7ad743487af1e7b566c55dfaf3774c1c06daceef9"), ("0d11c8d084db40311b6916ccac458b123bacd0c7c6a2586e12f6e4ad43f79b5f", "130b883107141af55e2676cf5de7b46489b2c621fac1a1aef730bf58be78d186", "15e35eb9577d852933ad73394c1afaed3e207d3f000c0b2089eabaf4285fdbc4", "13810fab13517890ede85e9ce256a3828f5f7ffde91bcee9b04be1e6893390a0"), ("0ea2ddc12ddc01b6a3468c922f0d56c6e18a44759001808d635ef5fc9dcf4204", "2b73fb7a1ba3e8e2604960551f526c49dcd60b5417cf86b20e81d502f4264c5e", "225fcab4d53b35b96830a7a15d28aa9087fc095684130bd88e0f9a1236700e2c", "1aaeb98d1ba77e2676555b1fc5d8a712d178dc0331f3daad052d7fe7faf3d44a"), ("0c370abf09d8f040e45b66e69861793de08e424b569d23b429c5d31033fbe224", "1d7e0081358cb517ae2b58b8f2177018008bf0215ac8bf34ea719c950aba01f7", "247126ede04151ce5a9dabc3dbe2148ee0988c24ec19561a2a79e1aab3dcc83f", "22f42f9b8ce747318c70e316204e8d2f9dccf2f87479c19d8ed2c307ad52668b"), ("2697b0cb11556e0c290a7bde762a0cd4f7bebf7cda55d0f9fd865423ea21aad7", "106c22aeb21068b0b2b1e7e77345dddc797de0adf6c87fd0905603721c515555", "0dd7eace104a429bdf693aeeb02aea4fa653f8a107bd8e1045a6570f96cac0f5", "283faaf5557794df9801e79f3375e5a60861c455dc06243463a78304a1eafb25"), ("1449af0d46c3501eae44b998beff20658a07537b659cfd13dd81c844b21390b0", "05c57b1b037e7f0eb16dc25ed7f53f69d1640808f8ea641817bb69e9138638d0", "157a542655e2bfe89bfd219f3a1dd1b9f0ac3cff5f42029827091e36f0250f46", "0214451cf029d9e9f0adaa74d2a4b447c11fcad50b83dc3cbb090953c056f2de"), ("2ab6496bc5dc6b95d05c8bc58e978f7d37d6dcc132b6ef57c098bee9924ca807", "1383a92366dd22fb4d3259884e9f3ad8694284c4230f9bea91e52f2278265967", "2ab853591542aa66fe431e420c40c704b914e6c61970bc9caa642861eabe9a3f", "257eb64dc512284cc1b297d045b49d0812f404a7b681bae9ba67bfa29ee6f634"), ("2482a614445bdf27deb3c01ba9cc59113ce9fff4accd50ed851324b1190d77a5", "13dcedf878dacb7c147767936f43c3b29fae36b08d3b48d09f55f372956a3fdf", "1d4997661f09bb8126c0fc35f49cbd72099572cb21436226ea4b3226725387ff", "010a5ea6cb93a0ab5c26dcd57ff89c6725405a69c925ca782eea5110684165d9"), ("13cc49a9345c2443dcca32fafb9f450d793e58246918e7cfed50c0bc9a69271c", "2f45e0b1a582ab3c29fd98559b5f390cf480e1d17d80ee86e478c732771ae8be", "08f27e0367a7206e03c17a6d624e0bb506f54ab13868d655a91461f68b7d7991", "22453270cf59a611ce24c26803d739ff90d059b72257baa2ad4c18bca7c8274a"), ("2943bd17e2154e76831592877ec73d2014f4d645b0e027c5eee251fbb1878e6f", "0b13c0e158947444be177abfa98380c7d3bd5738877ba582be5a47ad9664e6e1", "0418892c9ce884299bfb361043c4d44c986446c8e7552c144f2f3a8200989788", "19f494b85ec80859f196cdf622f08302ac90cfae98cb2e957eb792a3fe9b18b7"), ("2d763a447a0fd1f26533d2588969502d18bdd00c55a5e81f7b00b6041d8cffef", "2771abf3b34f8053c3edbfc87a54d30409a5c91ba94ef42dfda9ec6a677c021c", "0f4c3324f1593939bf7da6f14fe93cfd104c5f879b936ec42f5dc1c8721aac22", "2bd7bc5dd62ce7804142fc1ba67cc2a0242b0e5e20095da90a1c2c0683ded870"), ("268cf16015ad38e1f7e2689c712e8b8f61ddd509d32e251633992312a2633b3e", "0f41bedb594620bd69e34e0a9344001f01d90d483963d93f69f8eff32cba739d", "13cc42f6a4cd15905085aa94305f7d26edc1b0049a07af954fcc04de026b5847", "0f3c4620d97975a5ddada7ac83474ab8b4ebe8170af3d17791f9b595e996f6b2"), ("13fd9be4018707eed4e30ac2c176151b4f9b1ecc16d7eddb20a9d01711f2269f", "2ed015d81352881de9846dcf7bc0ba49bb568ab12975edb3946a429ed5bc5736", "112352afb85a5181de9984c3df394988a5598a973a2069c2fd506e864e5e8f96", "0a04ba58546c845e3e3508d04c5d1ea5d1d4a2b196bc0865528e32b29a184f20"), ("0035daa2c21764c3309cb04d21eac99cc10ecf0079793a2a23edc7fce515e901", "1e8fb9dfa62f79418010b749208c08ed678b240fad292c938b98de1d3b0eba97", "26491606f31eda492e1255bcd0259cbcdacb2fd2322dedd03757ebc7fa23749c", "1012a9b6ce68affecd23542e19557299c4da97ea790ad88a3c32dfd0a0714bc4"), ("07a0bd679f464ae5e2bb71d476069c1b8d5ecb45a43b734037a581a4acaf90a9", "0c6c9754ad384bfc57df4460231fb41b0777dddfe37d7a83a8af29433beac8b8", "17777395a9d8e8e6518b3470f9dffda92e5b3cc3bf5311e8939f30d98933a018", "008353b5ed81b0a06d8d898a307ee37bc90d84977d386096d9e82528d0b53982"), ("1153948227d1d09dd1de2b49f98d84f28d2dd05881cb38d91b363d4aeeebff30", "2518d202ae0ca1fb1e464d2567fc49100590e5832df17e5a1958b403994297d1", "0c9e9998661c9680359114cf94381eefdfc7b69d072f87a84b58036b0681f5f5", "275d5c3e6140f055d754fe1dd6d531140a84ca142c60381e8989e46387371507"), ("1e4d810ebdb3105a1b75d672d058ce5c58e78994ed5f901f4f967a69a45007d2", "0eb1f2e5ab547aa9ad407ddcea69c0a317ee0d612bc4cb8424be77eaa102a296", "05f422b2fd081abc44343385f5386a60df3f868c891f98ddf3be66c2d33ed745", "28a31b20290425419e754257f11e4b9212f97966a8a208deb8bfdc449f8182cb"), ("04159d0d9479c3c80ac2f07ddd8e4b92c4a19f2893a64ab79da6f97b0bd125ce", "11c475e2e7e8d61bdd9b6bbea204a96be39718fda6c85e967acdc09304d5bedd", "26ac104774a53d586f51fe380159f366fb6a0f981f9129a367874a9767b7f077", "1363493196ac0905dbf0448baa8d406a0a504ea86647b2a81292252dae6ebb12"), ("30127186edc6a160f8a2d07cb7f0a34f594ae972525694aa6db1a93cd6fe04d1", "1cd4604fd6e05e108d2946a1a94c3f7c5548a7f84741cc2a1427fdfbaa088941", "17f467b949acbfbc62be5055940b97a86ea2398be9e94f0b62a45f4766a15f75", "0877f566f6d7dbc538e95f601ecb1fcc187faed3c6d05f162d553728806d7d8e"), ("1ca807b4f5b2f5f0522e43876da1f8fb6327f4cb3cf65426246809b4994e2f70", "1da45e226685e537661a12ff8cc6e0e81b9b4e12f45059d46bd3afe8ad1f4793", "11020a20aaba15a7b8896e4851d966712ef141bb875043c25d716df626a6c0f5", "10af3f3715ce8589873c2464130205a5abe3c788d44970c17e8572cdfd79348e"), ("1e0be579d24ef5fbe2a536df97b07160d6e760b919736554c4d17eeb8042391d", "22096cab7eb1cc8caff7abcc5bf6448b700da1f0716093ad5d0db4312de6251c", "09ee5099ecc0cf93d2fdce27ea40df5cfac4e94056b408170a398d3665791192", "04e2a422d1857d18050d4c40d0546feeaf5ee6cee3bd21e8fbcc4f13aaf52d42"), ("2d23c33d9d6e3c2400d3d9d0444beab5d4ec5f63e4bfa32e40ca953fdae91f3d", "305b421616e446ebf47bab13f46290e02c8bbe1635fdaaa437c2259cb6a6b1f9", "1983f04e4d2e1e165bf62c33edac945d44641207fa8bcad579065b4668b3fbe7", "2fd0d73ae4011af1d0a5afce302d37779b219005d0f477387be377606801a65d"), ("0a30e9d35d7865833d11a4315858af16801f4209b935536ed161317b483e3d30", "0caab3781a21b7a9bf9c11198cadfca30bd606a666b873d9881875149136670d", "204c0918377bba6492220ed8cacbad080e6a0c79794dcc308fcc14fc05ea84b1", "03688948d0d9bfab08f431976f68de014b40982e69aabd2ecc4348ce8c4d4a98"), ("1745bf6ac62fdb030e07ef34589aa4aef53d0f5a3127b1797b81cb6c3f2b2a0b", "2c51d75f8cceb62b30f35b3ec7ae2b987e2fc1435e10b375d290a421db761234", "2d87cf5ba52542984cfef009ef24bd5b6bc45224d93f38b3c2da135b7fd2f96e", "2c57e9bbfd66a8fa4353832b58c0dc2bef661a8deaaafd25d88ca30d8a5f97c4"), ("2ce2a222387b005ba62a412105a7073dfc54976d182d5850ed04e01f7716dfa8", "0a9745b34d3ae3bc0bb1f38548b4cca8c85a274f1d122f2dfdc9a58510f824e8", "05dc680a8460039c3f4726e6bbf38bb4b3bd1a80263a18151abc0781e3350f7b", "1a5c5bcdf2b9ee280faedc974538f497ed43939448f24542c3099855dbf6dc31"), ("27e60a5a96492435da252d12841111f98c999d15996097983789a2e11d5ccc79", "1689c5b4c024f37262548db0d94ac3f26de532c82ac5602bb1c090fbdaa01116", "29d4ed329a7f7305edbbe4bcbaaf40462b20186a653b4f90a3db8b52c28b5c29", "2bbc0ce831082b196b3378bba8566098a20df447ff822960b5df5eb81637752f"), ("1d508e99f59d313f8022849f9fa3c634939fba756c76c45a098be092034d1dcf", "263f2d187402db967f9ea1beb274b6145a3f30005c979f20e32aae14ea8cfc93", "1ff00e99b391ec90f3dba19b27c180c0488a1b354e3e1e389d7d6fd08c789fe1", "0c3eed4d18eb77f0c2dcf25a07af89f01a8d29d0d0255c39d4f751d3137f2ecc"), ("278be23ea9369bd91ed26b4499014efe33092c864156038d053b1ec5b089c267", "01c2f026002913a4c3c915f9c87d7f6a902b42746baf2fc8ce458b0098391698", "014be102c7acac9f49e10082afae128d4dfce4305f0eb49a899fb21bb24c73b9", "19f74beb17c9811c691cd21015be1f5c5c69470cd4012e7ecfaf00e03624ba92"), ("28d7bcf63d295d4a62abc027e3dd0c4bcd5725d908ac99917b27bf29a79face8", "22db3dc81f750e405e5da3ce787fb3d4beadcaa5b9e10ac7e6e0186558b04af5", "017089d36a8d27931c47b7a4c9a751f493a385f6d03d3f618bf1718f7fc9754a", "2849175b82f9dae834b488bbcc445a776e868bdafef7937d1a1a2b9354ea6a92"), ("19d9f23eaee82cc4e5da696cf81317c1d3c761419a5efc65acad0f5acf09e7b3", "0c874946eb398b80206da35f4b80232693a576d9aff3835bc306571c8ecd828d", "26c6d2d8ad14bc7f201558862204a64a6fe7def593e391df307d821c3d8891f9", "120e4e1c579e74c5a24726d13ae4305dfa42ac549152258d77a02408f710a69c"), ("1e3ff6ec705206baa64b4f7ff98f6c6a90c3699a1b2f4acd0f2916903e2c792c", "05ca60e7525b49327fac5fedf19257535b9c1da878fea56b59e34b9b78b479c6", "065faaf6537ccd6e817c8b5328971a43733ba879c054ac81977c78e7b49553b0", "019227474d86a7cccdccadf6db82b3091bac76362a34b3522857ef02956471d9"), ("2b263a6298a73b382b90d0ea3420fa176c2eae29629b9a02e64cdddf6899d330", "2c93166a26e9baca0f3cd8f2106f6246d90d8a4917ea7f0015084f1cfabe91cd", "1a8dc06cf7b686cd9635453489d8e0d6d5f1ce902765941d6c3714199e270d9e", "1f968d6cec2de22f584575b7b19d6ef094ca628c87462a41e8d19910c4d6b4ff"), ("0bb9b42702b789c28bb5926d04e66fd578d8c51d2dde0ed29add9089eb780ca3", "04f8b12e087fbf8fc9104c2a2cee89ca079107c45dce3fe91da747fefedea3d0", "166707ff6696ac496fa59ab55e7f0fb9f6cadff2d0374bc531c07e55ff6ff5fd", "134082e22989bfa0b14ef2c2d7bf6ae496506559f4bb6deae7c9b1000b98ab63"), ("11f4adbcc323af9e5ba88229fbb66bc1e0f3679ff8c1329fd9d1585f81c204da", "2a1235831f24bf759086e19703bdc8aa1d3526422d524b57aa20794587a8ca32", "2a7667cb0ec1287cf6887e44297eb8920881c207fd9d3eaa5f725f94ba3d4fc1", "05f7d022c2116b74733263fb00c72f923219ac2ff336e6b59569726cd66f84b6"), ("245a62b59cda9d8a3bd6302a766778f4f47b43b97e37fe57abfe278c377ccedc", "0f369148da5eac1b420c279815c3070faa50487e099489c0f7c39ac7f5b2fdbf", "140fbe8d531f14beaf62f84dc67b8b11e3e0d7ed2a16f4760eda1db9d29c6e96", "0cfd97d22831134fd2193b727beef2683d226938075b1df729625fbc604f1955"), ("1949922570fb6a593e4e5b8d46a61aa07ea5dc6f7686c10d7a3f026761186ed6", "1daa0afab76710d2edf2b5898bbaaf36038f9c9fa0ea5c7dbc2a811f6c1c706b", "2dc7a594d26086051616b88a7e7cc895a7365845e2b735aaf0479452fa133c59", "2aaa6edfaec776b3924aec2d5f6fc1c2227b40b03ea74966e7a372275d44a447"), ("1263c76b6b8803bee40a9066d6540421b6760b3f4f1fe6c3fe29c38b2707df3e", "2be5a796984cbb72506dda57968f48a8bd07b2f7d494e3f04ddccc74c3f92c42", "0211bad2935b5f1df8314bc3deaa26d609cfb830d8d804c56a7018ca7795ab38", "2bc9c57d3168830c8e2f732c3310a6a61ea18743d5da0bfa89e65173891916b3"), ("253ea46b28e67b898454daf3e5a529d8f562e9f54dd558c63d8032dbd607d5ab", "2d1fe0e0973c1769881ad4aa1a4e2da1376caa363a7893ca7cac24e3ef3e6276", "2d793b8e77f7662f58a8eea6dbb2706544b28362d4f56b001cea1eec87fa0cbc", "2dad59c9bcb2136dda3f7b8cf554c673f3aafdddb38c88484902e13999e51077"), ("04f24dbe93a312965d56634958ed214f58294d2ca034bb1f4d3dce3ea7a635dd", "17e25994af653bb5bfb8ad4774cf4ff860574f5cd581360e6d6dc701c2d56e6c", "0681d51af6b6706945569f099e17a1477cb30519bc292f3cf8213d456f9d6e90", "256f80e70dbcb766e354cc29c293da5b16f233d57745820414d46d6e85ae78ce"), ("093aa06e1b7f04a671685bfa910d69d5edceed9dcbc5824db5ab35f1b7a5522b", "0a19cc35bccf26ba3095a5ed1ffa63226ef90c6ee496e453b9025e74a5b1407e", "16c8300d506590ab8ecc94cd64a13cb8612c3287f5891dbd5ca31b363d7bc31c", "17e28aed0127cb3ef660f77af34211724ffdf75166860f7ed033a7c6357a7a4c"), ("005bba11ddf24ebbca3e0abf38593a251410addc18d8c7571e86c527b2621797", "0ba80e6e7d226ad2c9c0b65850f5c2971cf86784e9bd81e360f8ff02fd9b4cc0", "1df7df2cd22b9109dbfd322e5be66bd4164a8170e50446bf864184ed131d0b79", "14cd588816de20abe64702bfcd23a7ecf1ad112d1277402dbb2beb36f93ef8dd"), ("1c0912790ffd53428a36fc51e36e0e74cc74ee7c18386374dee6cb1f30896996", "070ad62c9141c436c7719c2fa4c219056b830c34ff90b19666a27f5475b264fd", "135a4856e180536efed3b7ae61b537e1506b7f287232c4d72d350051c5c0e5f0", "1e9156003c3915f3cc8a67c2a7be783f7a4bd2174d6c48329345fbed1d5f1c8c"), ("1399a3b6bec09eccc89abbe46eb6feaae6aafe3229bc63c8577df41ffdf583bb", "2346139f3a12bee26f6dd5512546c2fda8a0fbe8993b46b84114a80cf3140d1b", "07c0c48147c6b95a40cde4b6d03aebf8f3b44c6ee58f502d76785d52d9703bb4", "24d3a08bd9dc8954749edee48219eb7e861473bc30c9cfdf9c9e529b16c26e61"), ("0680aaa1777b30dc694ae1cfc2d6fedf42df64a7c662d68d36fbb431ce15fafe", "1f8c0a9359c3f00231b616f9fc24883f9513271509c53da847222e15d41dd741", "09f1f95c9e62e2bd956086ac5bcd499c4e26d4ec875763535a957513b60222a5", "2211b79e1e8150b53013aae2c4e46f2618e18cd282c0732fa85a49f4104fced3"), ("130fe64aab8d085026fbd8f24f3fc08d05d014d4a2bdab2614c3bf6ecb8b3d56", "108957d7797a0c30217166b7a81aa028c782c8f2fe0627da798c23c63ddfec96", "2fbcbe8d3e28d2379617853e26e141215587d2a6d8d3e3c27230545cd0e9acee", "1b2554c5424e7d0c0fa3f82b5714f7c4f33f0de729c6f5b4628695fcc087700b"), ("00613b224a70202b939e43abb419945b0a8e4b43be5a681077b829dcbec5f450", "03d6285570d166483817144a9d25595c25a870619cffddcb5b7695b511a42323", "0417a4fa3ad550657b3ae4e99f5a47f3dd9a477a2b78b22718a800ecb8ae3a3c", "1703202372735ae1f21560d9d4d930412a41e28bbd236bee9a76af1ab46b6e59"), ("1a8fce53dc6145fa615aab5025fcda51188ff557ac4dddab283383c2ca253821", "1cefb77d344b9465ad04a556ff00f1c01a75bf79553fa7630278bec08e0b1873", "1f41859ad95d32376c001caca9affd6c3f89d00e5a990039742a405c33727d35", "0b10d4e2317c53bd7f547c546ced61d8283676fc3fdbac6d223e0adb914072a9"), ("02a7235d08540ab38b34458fbecaca36fefe09b8ddf1b6f4169027dd89288012", "11c6055cbac201e0f323de273315c6ff2e40662167a28d9cda22988cdbad3937", "156599eb2462d9de1eaf3e687c7384d36911dbdee9f8cb45ee477def5daa331c", "0775ce7594816a7b5547f19fd25752e2d6b46778cd6f9f141ffc0f7a4b5ac234"), ("29188383cca6d99ffc7f0a66870cff8135a9e3dcaabebbbe8d68ae92c4b5cafa", "21a43fcfc5ba30f77ba997d9f25e59200e7b8671140a767ff1df8a705706a30d", "1e685d6dda33abb225484d9534d0e32734e900a90b8475e64b81ffccdce27f3b", "1bcc82ecd461ca2f4c5f3d81e5fbad9f68ed245247695cdaa8335364d78534cd"), ("26b44a6e26f6e0be53a8935bd560f3022bd75bd5a0be6f2b8c941b6c36baffd3", "1314ac8d8f359805d1e50b3be2885b5eb21cfc406af63465663c9c705f8913f8", "1917a514ae8e5a387d41405aa6b28ce806962304daadf084ff5abac904814b38", "0c10c69c763172a9de583ff8ac13f25f7adf9d39624aae95e44336333db17682"), ("269c801b5bd63a54e405921d2aacbaaea305e835a908b8b842f98ac037e0fe89", "0d48f754484a655a7681dbae0ee16232280b4a6b917609859b4a7682aacc80e8", "2a6f255555678479a63107fd2a1a1803faa2c03b2577fedd1c326d723ae79b12", "0a0af50de0b62bb4e55f05159fa06e9341e6e7bd92fbba2eeb056c53b910f1e9"), ("22cf1a9e0a680df0e3b508aa110aeca6270c6fbb4bad9658cc373a00798a015a", "0583f649cdb953080cd1dc888b4f07b3698974566a132b84510df4b3000bbb7a", "0341d57a3f411f6b96537b4f00eb3d0802de8096cef5b14fdaffd9a5fb86f640", "226ce7d9b6d9a85c40bc2339142ca1865630beb1dae307a294596b7ed687d42d"), ("05d867d3360bc9af630eb8aefaf94fc38e5f180e16c55126bcac5368feea78f4", "09a83593fe5c63e08866c96051d9c4dc0b0f81237dde89f1bdeac841b49cc8af", "21cecebf7778bbdda791b4a928f5a8679b66a8e2990b8912aa9d19f31b92c479", "1074659167cd16ad847a489fea6103e588416773484dea16beffb96ef7446186"), ("151abb4d908c9f7386d38bb388e8cb08e67e15613f9b79cf2a416d263b8a69ec", "2ed25363a3632074835a3eb9257a8d2addb59defaf2c766f08c5ec615f1391a9", "2d025b88b5e5745f4680402aeae0825e0af6b2b05fa98b9bbd04c9559f1c97ae", "15603139b9c56f9609655e0c7346b9678d75bc59f9512c9feb4dba31cf7e1e6b"), ("185b8280659576fa6f9cbfba6b61c9d20683249a18daa173d96e154f2ddbbfa8", "1aaf5e349aff15a68b5edd2da6a08fa45c450188d306e78cab52fbd6ce463b4b", "1a76cc0442b582cd3d2479d449e0b9c40465b34d1675afbb4b56a9981360953f", "087bd5b6e29c281cee89d17a5d6fc5be14b921503017abdc45c7287db140c5fc"), ("08935ee3779dc44a080fa7cb0babacb505058338f3a0a431070fcf3bfdca1668", "064e26224e1d28d0199ffb96de726eb8ab6f5bdb207ffac923b9bb18cdacce83", "2710b97a4c66cdce5dbc52f40f0cfb30a82055e59d39839dc49dce894d5bfccc", "16a06c27106d514e4363a71129c7b583581384561b27c854b3692961ef665ebc"), ("085cf4288aca574e5b1458f96567c7f415da252418108da408e41743cd3a4d08", "20110307b0f3b94bd7feca077173ca8787e128cae7ebd0f3ac94cfe534d20b93", "2ce5d8f185815366e6465628589119f5e72ad88d3ce056602e26817b7b412b16", "19a95447e2fd4af91cb9013b40eff8681abad8ee5342afd4094b705114b49d87"), ("24b078079baadd19eeabe72abfb80ff1e2e102838a84de3ce0cedf366185309a", "03b4ca60fea06186ecd85adb2f4543e1a5c51f7013efb7ba8fb38e3345a31ec5", "0c46c96b39fd015eb270cfb19cc4398468ec103789c0d72deb353764deeb964c", "2354b0b089a06d6a68e573b4880471676e97db05e917e618f558a978b2338fe7"), ("260758e773501e716508e369ddedad56e373e4edcb8ceefb1306bca8134b0967", "144e87dc4b5afc2062546571964d664dd3555e621344faa228239dc638f0337e", "084c40045f0d16b0926f0296ceb79a1c98407c41a1568e280769de1e2b362845", "1e669be9a04fb22d13d695ae59ee6eda5114248bb64e1e996da3b87d471f3dda"), ("23b422e23c14d25c6f05f866eebf8e4697f7d4155e91ed5264cf2882776ec20b", "293645ddb40c7c4b05fce1bf1fe3922ca1270d0234677e4271a25ec5a624da8b", "296937f9343b981d0937ba253004803972184e87d60a576d4eddfd8ba284b975", "1393a12774c4eb5cae11a797bcb7e45eb3a91ae9fa49c9fe0235b54e4edb330b"), ("054eceda0cb3b8d7d75fcbed893712617aa7d225283839fee1af0ea74ea34b14", "2ba527c9ab811994f3e46a720ec9267ae879fa672de0d9ff47193ab0d1b20bbf", "0fb355e12a7c64ba5856e34e6959eb361399fe5be989d432af7d74d9959715ae", "2bc1a2a7481aeceaa5196ff9320e96baff0564b26cb76f94e922fee4a09b8f92"), ("0337b4d5bf6bd3b22c4fd2b2b50449a588daff62c6a6beda6020f97e8c7e5494", "1d7488a33f778ff925dd207eb67502c30893cce08b8a1238cc8b4bca743c4848", "06f2d736e35f9c51d3ec32d9423df8cea336bf9f1e5f3d43f90be71feef6c944", "12b8187e5db2474e52c1a0bdbe563e344cc917086eb9739b44a7699e51233cd1"), ("06f6e6512c9ce34c0fd6f3e2a2c4f0487addbbd274ef478a2b10d10272ccc1bd", "1dcb7a745ab24eb0e5f5710c84c40aaa4ba65a7100e07448c58c64c12eaecb21", "065e230ce020be9d2b4b3161467eb7f87d234f589718cca59614d187ebcbe166", "01d0bf9932d205a28967008bd7792df014f0dff31c58c411d1661531f12a7d4c"), ("2cdea315f498f16a68c0c1e5091e69faeb952611c760f1b49f4cfdf5d54e1cc2", "21013375e36af4675f10463fcd10a8b38959a7eddf6520cf788c22e168344610", "01092c72d1915d658d0b386e82361dd2185d88fc44322dbcb601b92e6d344d60", "0e2b8960b53518a433fc01920acf66b2b49d727168e326aa3bd18ed2b114b95d"), ("1dc2db638816fed63679c3ab95666b944ccc25ddb6dba042dfa7387140e96fc6", "291ca1a080fc09a282b4d5b72acd1082373a84cb03bc60b1adcff13b15879400", "15484b1fbea4b74dcb3de952a84fb5c603f5f1767346f10b0329d0e3dd702ace", "0b34cef5dee7623c1e0d37a7e4855378fcc177f53812acee7fa778ef713dc91e"), ("05f13f06b708780a1fb47aa872e37949cebd4fe34d8c72efcf85b6f89ccc01f1", "058197e040fefdd26f09f60d36a69bb21232593177755c0c020e43b43ca35768", "166116f81d1b68a3cfa25abcd93bf14a8a4369f3ed3f988d8378c6dc9131a616", "14a630886b4d67e515cde2ce05405217926e1a37b97792a6dce73c94cfe8aac7"), ("1d0191b858b2f295969f4413782aadf3dbb085947e2a462021ac01c3929c8ebf", "2723dd18adf4b854bfc789a6426ca15fc24ac5d54db6fd69b036126e1b1b6d88", "14039762ed1eec0b8b64fab4d7104d5673979ef8ad89c00fc349d2fdc7d97a58", "16defb6305e961d38d3438595323d03d3c7b1867e728287e3c1d425223fb1e73"), ("0550290cda5f4f1e1835ef6dc9302fc64cfbaa66375ee59cb92ac939fc9b027f", "1d81d20e9d24eda41aeed1d1efb4903af3fec8d78c09bf52dfc1ab4114621cca", "219eb4de58269b0303ffc7c2504436617e9035b37678370fe9351a132ce108e3", "11f4a134dc00f93f934fa914a8e0330ca379e57ffef1a25c7ab8a840054a0194"), ("2a16aedfd2b113341d871dbc24b4d04edef59b72974bd2f935c16acb94a5c047", "124a1835bce3a4ce0710118174a881102b810c50e1279f0279b9ae9461ff5b4b", "0c82492eee2f75ae99d8e5f2bc164ec15c414409c6e78046e3445a7f1ae904d3", "07fc1e1aed231c32237580e06a3ac6ef8839dafe99973442f1bb7844308821a5"), ("2822c1bfac678f43eadc1f0d2c83a604e39d4cc7d3f79837d74e888c0ae70282", "05b1d3090f6b3c5f01bbc5f2bdfaf8e5a71ca6d9d5ee178eaa5fbc7a8f11cbe8", "06ecda811c2e30624069cad9700abfdc98b64abdfc12cdde053385e3b83dcba7", "106875235981a92ed8bca7d0916e52e8fd3f625a9fc8a2f97f51e688dbc55c08"), ("2a039898798c425115016da42b07b2589394069fb7bee19ecb90626dfe3e3158", "224727e0642e05b0664ee9758efeb7b4a4ffd8acdf824a02e5c0ecc6a4adfaf3", "00fd1e24b389b332c788db379ad152302f7a50775d5c9a7cef93fd56fcb2cbdb", "0fcc074cc99fc1e142cf8a71a4e6ee6c70609c62663ea40f6143a40a9f5e4c9e"), ("052dcd35a85352af924d18ae7274fe4f88eedf9ad159561d0e15e50de779104c", "21205cb9e904b422b0e6ac76cbe49693974eebc3ed40fe998112f0a8295b9e79", "24d3012442ec95a2f35665aad39f1793090bf5751b29048f34f5c974144aafde", "09f51cacdeacaf94854cf9542af4d0c550b379bb558d8e17d6d6bd42df0cd159"), ("29b621936cb8179ff0ac4a8cb168451e67c2e10fc3df121a10588ef4250eb707", "2f06ffb7c852872269cb3b81b862f3be8e217ad37fd613fd4acb8fe696340272", "176f702062682aeead46f6c3743917430b81448ae3a4ff6700d6465b74f815e3", "141f85daeb9fa10fd69a5474718eb8a5e03b769c6733202d5d88998d1574ddc1"), ("152f046a2824cc736bf718e35ec39f53e3549d2b08016e6cb07107510a478efa", "161a0a83aa77e88316e857bd5e46766c82ff92b55f92f516fcf6f862dcd4cad1", "26c5cfeee05a5b4d72182e1420b08614f58241e8d30d99d5cde56cc1cc9d04ce", "25fbdc877898b690957be0f205fa9267e2aab48b344fd94e5107b2ff07c5dabf"), ("0cee7d319fb731943ad1908a1a83208bf5719f7259e2a5a38d4baab33fb8aa06", "1ecaf3b34d4e9300aa73eb3c6ace1e0c4f505259f19255c4fa1a8e7a570acb9d", "08befc8d9786a080631a179696f8e569e39859c19ac9b54ec889712e778751ee", "2b1ec70806ebb7b245f7a76f7d741641828a33998451e29981507b3288bd89a8"), ("265bfe7c01c574d2864fb2c44af9901ab031f347f137bb75408a0d5ba274ab63", "22f11071f0da0c4b66cb2f81a161cfd3428d960741a69c224a75f0467aa6402d", "0dcb60c4c89522a25abf96a1f086ecbb0bd272c155bfcfd2d50633c912027f8d", "1c3f71fc04fac846e765ce1afbfb7ac593245bc0b66490ee6462e9bf29020065"), ("2e2775bed66e74b64ad8cf5a88f5a4aca1e1a83376853818455eca7253b58431", "24012883e8cb2c470e057c64727a1d3c5dacfa07a8df8926d70d474f0e8c78fc", "288fd60fd3116460fe886687bb7951cdae592afe25db880eae8c7ae9da7c20da", "18d579f8f7ed1d1559c07afb61cfc14baeead2c4e3e31bea771fff701af47986"), ("2d68a75f246a70a48c10fd7226b9a206e2e3e88776108f5d58a9bac52d1492bf", "2bdfb22fcdf29bd1d3c0c2b38bbf0a4e8b194c465ece479e11371ee2e6749cde", "0a91660128775ce4affd79d1e7ebf12b1da04e6cffa298db5bdf59d66f8afe54", "2c6fe14b34382a46e2589a131cc7097b4e28335ee40d5d447f4bbbe5a100d8d5"), ("29c2615464e992012ef21d8173ede9b7cb40d5c55e5be5966f66b08497f90c84", "02fa825c4718c1e1b34f9f7fccd580ede93c3ab9a991a4fe6012e5016aa06d4c", "10414c5bf61a0cc6990884907b886e48930df32441f4a4d413e504bf335f6b42", "0096a3b79ea4f198d67dd5466892a929262a89a935506d055984e14528f59bff"), ("0cd1aeba4f4a6742f66295c173aa47de43f3b9741e2a5e434c91771806180ce2", "0be1b12ef768f4809cb21c95397c42d39ffa74c79a45ea4e72fc84e522f1f6af", "1133adc6819dd7a8cd8eb774bd11adeeab0d511ab85f40f5acf21a6e2e1ff6f7", "0cf080a6f7a488b3b0c6ec3b5f83373ad2655aa750d03c4683ab76bf0acfffd3"), ("1401ae618d7ba54bbf2d22513459c41bbae15268e3b49a32393cabecc6cbb894", "0b322f7fea68d7d7ae10e7254ce33c4c516f79fe1b96d5e712922457bd13e351", "2ae41bdfb87fc0a444c970cb3968379da32cf7fb95c0eb3a40ee6cf6388c05a0", "0fa2c83b1de2604280218ccf136bc898b29058b79692806464ebb21bc97a0cc2"), ("1d6f97cc1a193da65e1e989323d42eb91809fc3cfcda54c29bf1a5b0f675267a", "23efbf823bf85ce54c1de10d17446daca5c7919534fe68817225ad48d8ae4790", "1bc8c0026b86951c4a59877bccdc17837565e8590bc2ca5e21c6079643fc3b8d", "161cf18089db5549a5a92b1686fcff52e39c44125652c52cbcb2ab1f92ed9e22"), ("1e2f96525084196bc38de7a01ec6c25b103e5870009c337d975f316c0b3f6d1a", "1a8f5b7e6fe2790c7ef2e6f5ecb57defc07e07f609a7eb9ae3f3e3b902306fa0", "1a58a049148db397028497bed527cc299b0c34d41710a05769df8156ae497089", "2e2b556aaba918afd1194f233d91d8ba5ab07375ed2b7397a43d2753071609cd"), ("10f02ad4739c614a6939909ecb921fab58f0fff2a43c18594b2a8862e1786900", "25aec7c8e37e5efd75235774f4dd6e97aad14708f10d2215fcc17d89d2209529", "0cabffec228092d0e706c6ed7ab403d724ef790df4045338ed0776db71c89285", "064571c380449dfe22aae33f39bb760c27432aa510988189ae03e6acdb5ad901"), ("0918b5d828fb04bc929bc6e49ca493dc3def2c4314bf429a088b112c50693970", "28ebca70a24c1926c426e5c7126450aedf17c850dea02011d82e34866dca2ced", "024c50f159506ff3f74cd93b39a80291105725a1301f2f9f259c67a387c0149b", "0c19245dce5c661a034c71c7be7383980827432a82c06260d2ce62ad0ab2d402"), ("11bb190f397b070f41b65a9555ec754d844dba011a5f3accce366c62f6396da8", "06b5c5817f91329804ea0a1fe6ad80a7fe24f339bb73fa0b55e4f036e53d2ead", "00ddbc7196c5a047388c336c233d6ce345ecee5d182a75777ef44c95e0762cfa", "278c48769fce1e34dce2d0e725e153d5e0c910c9858616e551a93f07e30037fb"), ("2010fcd1c01661313cca3fa9d1f8bd4255e22373a9e3adc3c76a22c772233639", "0bfffb777ecfccfd6e39dc46a3930b8738bc78bb35cf77b27f2a36a5c65101fd", "18067e50fb13ef4d04e980f66b673916b27b2feb661f9b4e7a55d3f83f353cfd", "1a6df9a706390a9e15528d1e920874ce5b2cd7b46837ab9a150985e89764d9e2"), ("26fac2397c1937b652be84dbb267e72fb11e95b50ace6484e2b16ee7debc694b", "1d05c9aaf44cd5c8155ffda4bae2699a283c5ead81c62c0a131f57ab413529f6", "0f4f21cb674b8c29e681214bb7ee18b4977fd4e106619c271010f86d92c5e982", "1c0258a294554c8b7b6c16a9fb83ccb6a300a5d678646cde54ae758bb907e2dd"), ("0c527facef5872956ec5710c81c4664fb2fc1277fda013d49161f08b4365d149", "10c3d1b139a77c1d63c294b6c1f9abeda056f81b1a05f9a59889e66c40ff4337", "22f248f933b7f32c921c3019942bb6a931859b4a11e704cae82aa6f630bc66c2", "2c988edcc3e400ed18dbe97a1f9bc25f60a9df88a5fd37b0d70b726fa01c662e"), ("10142d88beaa105c8eef6ee0430ab4451a6eca78ed82948d6f4eed50c7f1d6dc", "218f14064ba4ef5c60ff88b4231863788383d634c5fae3a53d493d02a5cd7086", "01f418b3071acdfdba3fd377922b05ce4d9da38d32178492d16233b4cf2857fa", "1bc01507efd074927931cd280caf5032d12b9fc2e7fc34670007aca87181806a"), ("07e6e86f40589034b14830b10b6f9da84d8a897ff5e76c9f36954d23fc7c47a2", "1cc8f248d28afff77a9195a62583c5eb1c6e0971fcac8823c0b606b8ede043b8", "01eb42bd7105e80389c20e2ccd868948d5af8f1e775c9851737a06f41c1e6e3f", "0ee4fa0486b7cd42bd94fffec9e4b693ba8c15737b3667b418ef3b98f0cccb51"), ("2a3315b2af25ece2c59e05af80709705ab42d7dfa7f11b8ed52155ba1ba4241e", "0a70d539c0af7e85cbc5b1f14370cc618d73e7034435c14ed757ec9ecade0540", "029b49067f1ab00eb72e779186dca1d923bb0f89d9375192ba943fe3c3c92b6b", "08ddd907cafe90d48ebb2d3f72a7ea14851aeeb046100e24b857ec59b2b32265"), ("08d6a7765640b222c749858b83ada06a2891df41e62c5f3e5a1764f9c02bcbfb", "004bcec3cfbf4bc628e7856dd743b64464e361f7a0a796da995ac3fdf8c8d2b8", "1668a530b8ce58488607a41ddcde4447c05a93a303cfb27f5b0f0a47a8395fd4", "141767ffa6a203c5d2c50d3eb2ffa293f88ad45f3725bf16c3237cefa8f0eca0"), ("2f57692561fedbaa597e3e0c73ee5cd0d8654fcd21dbb2194a72c3714d9e8fc7", "13bf80cbacec893c0257f84a2ac8de5a6ad5ab34298460e66f813a5f140c9c93", "25bc070c6c312d1c7255dff0e454d116a58b7515ee6c2077935d869258b5b615", "200a7c2551e1cb504d8f66081c27099a10ea21d548de749fa31d05e42d9fa672"), ("0ccbd607ecc0aa2241813c7476312d182212ae1d5e33785c7fb037067c671477", "1f15676f03aa12f5d08049a87e062a626100a05b01755f6415107501e67d3528", "186dd6c6658ece9044e6e06fd0678f31babd06acee9ea839dd6536821750ba9e", "006e69e0de58fc300472f1698c51b4fdebc82f270c926b22153db871e6bfa8b8"), ("07cdb7aac4b28113d5b6511586b508c0d8ca316ab93da841f65256f22cedf5fb", "17fde2806f12c2652fdc715e293777caa56aa8408083aaadc4e9f62b0d142888", "1fcc035e0ff1964ac01a12806b4f3282f0beb2a61716e0e22a510fb7d9716cf4", "0b6c0711cc99bdfaf0cb9b24b471111daccac426973563df4461919fb5862f2d"), ("1335c9258c05d82ff45946d8152f2a8c79eb4aa7c5138b14fdfbedd799634476", "27a121ff665e66c7dbb2c5ff78d01ba94bea7e55b9b43dccaaa64175e5a467d4", "0a6a2f7b9b12bf008c51e37dcf174b6b4165f833046800b6796629df208c078a", "0c6d22a01fed2902494887efcd64641c5f27840f8bb22b76fb56c8bba65e7882"), ("1f0c505d673ff635d213503afee85963bc78943c69da513c1f236a179360b5de", "113fbc37008bab1aea34698efc7ebeef869ab54905a47c823c85fed288fc3b95", "1159109197b8c94b84f184c276c06c8efc9a3cddf28b0fcef5a9538c92d705d6", "2013417021f959cdef667f4084a2fd3bad3de590ca6fd180b65db98b9833605f"), ("06ff0e42e8ce8a9a3d2527b8886d5c2f957c0be49658c366bc3b41bb19d7a819", "04891e1c12bf4db8776fcc99a4b6aee505655deba4faea5418f75fac47769ddf", "1e2a6b31bd7a770237ea4871463e14c291d527bb4495c0463cfed5d8e678e3a4", "305e3a3df151f3c174efd7957a4b0dc9e883b4865f036e5d14f7c1d356faeb61"), ("07d5551f36cc30697716fe8bcf40eeeaad694fdc303cc800225a531d9d128ece", "2e583bd3a001ec26c6f82a170ff81c47c7164f929089cb5447b701691e62c1ca", "1824df5208c6649aef875dacdcf0b6dc87f66ebbf72adea13ea02de2b9e7e700", "102798c728e2807dde7c27de27b75df5f5e7e49345f7608c2cbcae537cf263fa"), ("2713c1e62d0d8a8db7136cb166e8270fdb4fef6b0c4ddacaf348c391d6ec63c6", "0258703a42be7cae58ad1265248233bd3b34e631832273a82f56e4de5df35ed1", "1863480c817008e974d6c430cca3284768277062e8d5747d28f77273b3a451f0", "2b5c989c94bc190e6c841128e8606309b7da3e71b35964ef7d9267627aecd96d"), ("01f35a973cddc5fe60186517264b699e2dad6289637f1004f59201016c92a895", "1c7188cb327f1c18d7930623bf6a617400d2c71a895dd5bbb2273a578c4a1b35", "154e98d7cb2feeb826ad0b8ab0bf20ef75b79657f0a14ca06f255c6651565915", "05a9a94c8a26eec29875e094a14175fd689b6c72c75974b3dc68c451ed8d4687"), ("05c781de4c54ae68ed6edaf38886bf781ca81ff548f3a737ca4dd8cdf15db2ee", "01a57e2d03281bfc603212793f0e0b959f6261e3ae6e70a79bbf5f9cf653a65f", "20d61e3ecd76683ce1f25d4893c6c8fdfa55ae5015cdf3c745ac2b31309e0b01", "1ab62c6ba4368bf3408652755bb1eeca39aabcdf9372cf503d116705cb939fea"), ("06308c290afd18f0161e08492751d809618dfbb161fb0eb4a5006d5f6fcc201d", "08ecbe29f77e109b284426f7d05643a7ffad1577ef4eee3e873c9ea7261b9818", "14febf2a83a934a3d53771f245bf52045009ef2b5696df4ef91aec8fbad60123", "252ca41b5e051de1a3dec9af920599c54906ffa859bde66398ac1f582931017d"), ("05e9f871505bcecf945507894427c88f1e7e8327eafdfd18f66e0c3bbd355d4f", "0a37d1d619ace14b285ac0d3edfefe30456e2f2d1379554945cfc12499626804", "30227bd300d07e21a463038bc56b977768fa4405b9e64de7bab1565d54955bcd", "146a41fa5574c5531bc1adc59ff6c7269e57a8111c9f83fa9f29ee983fe8e40f"), ("27a87b89d9601123a0fbf0e823dce720ffe61038c53c45e64e8adc2326add206", "1abe2ce517b316e94e0c15b8be62099cc1d4ac8fc9a51d3531466b176ecef053", "0a5413f618f6d6d114cef292b8b204c4b38d5e3a6f4d1f77cd825454f0ec7aaa", "28515a906411f8df8556dea4625e9ffafe37c1386afac1672aa00bbc5ac68185"), ("2a7891f3126e9a0bb33cd20d9edefb9e8dab79292d8f598f804aecc936618887", "2e1007be7649ab309b4392f3ff85d0e1c276b8c87c7f3e215cceae4ed0d38666", "016e662d9b08a394f41d000866c3abc7beb11b83b6488f3e91276832d773dacf", "300c73b126e89ff34b733fb55e266e2c774391de981b31dcd85bf0ba802cea0b"), ("229bbc601bb27fe22dd4900fa5373ad75594030b41b5adef3108b942a9a67725", "2f2e843b27a448dee2017abb50de648cc2a6cb01b7907db11ca689200976045e", "19be1405aee1d67670916e205f839b5cefacf4591b43df983bf6622681b56b26", "017d3a0b1a5500fd333227ad30ab144d079d705729a28cad49b23e1db8f0c04f"), ("1adfa5faf055a40780363526d21dfa280c0dce79b07c34cbefdf83abeea574b4", "057aba117772b65744fb208518b16eed1df806a85168d041c3b168f870ff2a6b", "19c91bb6a8e1c0463992575937ca27f08af1e14c1cc9d075e243ee21f18d1498", "16d33b2fe4533cb91244f2960bf08930d73a4ca18b045463c338c127924cba95"), ("02d345da771062e841282c1f1982315b73f2827025f77feaf1cf53a5c9686064", "248c0de54438ef4e6462322ee209284398687f3115bcf451ffc0b423e826c616", "060a9c4e50effc9b65b96a7bd1829114692ba6182f4e6f3ef1fcc2e242a3fbfc", "2bc83236b47ef16353128752d0bf7fe1210a25ac51b2c720bf9cc8f5cf40d667"), ("113528d78ecfca4bf5cd4cf0cb9cafd97bfd879b0f07dc89dc06371de4b60ab0", "0ff701cda337d1511e7a7d4bb723104701fd301182a9d6e2f35ba67f470fa839", "14c46767f31101e3957e2ada1294d8ef99d3035325177dc2e090dc9fa6c347b0", "238d439639a70b270e7c376a8b236ed6337dbc14f31feb91cdd1949f05321434"), ("2edec728ecfcef40a0798783b4fedd017ba43b5f45164752eb9e5c09aadd03d8", "0638501dd6aa1febdaf9cfc61e7f772749dda3dfdbb1e3c97cdf799ea6139fc7", "12fb7ba059b222637ff6560befce6987a7382098057de055e865c54b6d93671b", "2d9d6e42cb1e4915c782a3bc5b5486ada1a949348725bf37c211f3e40064f825"), ("2d2f2573328d790f24a76917cae76aa8cc653f86a1fccc09f37ba0cd67ac0784", "0af2c5a50d4e15aac114f8306afaf3960913785c43e97e84a454ea9777e039bc", "23a26c7631521a07e081d1ddc0b707aa111273728faec17e40fa2f2d7845e0b8", "07d355766ad03814690d4e73c5d53465eee422c4ca31aaefc243d68ad720266d"), ("2763afb78f25a90a4171b6f87198b3f7a3261a99cf214fc7b0e42cba74183b56", "06757ca36f83069dacc0f1330c140402ca61f39cd66a15b7cb3263c4af4815c9", "1f3da100e6fc1dc188f3ceaaab46556fd4bb7555e79e15644384d93dcd0dc019", "2b1c76d2a337479654d9fdb463838aef92cdfc34ee630fd4bc3bf09110357c35"), ("200a421314564369769c3f339d2c2f76b8b007e4703e016d8ab9a01944cc1276", "10bbde57b79def1cc10ba888f0485bcd6e84673d538517cf365ef8fa61d94226", "0c92c8c50ba3c0e5ea15944bd9b0c87036a3ebd7ae3cf9fa0d41b7b4561c5421", "11a5fea6926cfe0f264fe460529e23b23837b1485084b0a45dc239895dcf0708"), ("200d84bc867bae56844629158f3f49fb2b1e6c5ad3c93276cccb7f5af8d5a3ea", "1c72c2f1fed3c54e2cecec4f59ba62b98eacfe7dc0ecdc186dde94c76476a23e", "1904a7370592ee1928fa5c4849ddde3b76b6cf63670754388160febc6abf77f5", "2ba1f30dadd891ce7f7f1dd8b4461e0f41673bcbcc2b4b14f2a42e02b7bbab8c"), ("04dfb097d55d06d123c9db65a634fbf6d0d72b4e5a5e9737a7de586a6693e11b", "2bf5a80ee55a4c7d197a59503544a2cb13c54ece138f944747c235f3362799e9", "0688ffeccb8a329e169b7342ea43f891b472eeab6e1d03e46533dea39339d283", "1ece27c58cd3e8e535859a8d45f448cc8a382c58cd7885f6442830b691c9f3b6"), ("241a57bcb7e82205be30f54fd085aa82d7c91ce65626943a01ca024400e41adf", "02f76b9168e8246157a1e5355190d8f06ebb97d478ba073bd3758a45a3f72219", "235c862ec563315179b4b39ba0601a9382176b43c13159d6a38eaa67658f35ff", "2f89a2d30a50f339f4b3d45a4e2ae810fc25354fa95b4be48e9a1425e40a19f8"), ("1e2b0c449c2b3fa0cd90a7284a1db1ced23af7fae1da02ea4c8a42e1a5d1c88f", "00ca6a6aad02593567ff3d763ef9b997199372d7715c1ccdb8f8c781947bab33", "1522a5f176e15e99da3c74197f850f6fe259a714f0bddc0db56dd22f2c889461", "0292b4428e0c6cb53705d0f73cb848e4de737f1cfffa3b05a2de0b53e3ab3f52"), ("2a4366e772918a9b0b7fd194eef04beb02f100f4b84e06a412aa9a1967d95c13", "0c8cc3cc588a07d6912343cbc31ba49f416b8a9f02e9d308040508310de5d5a7", "22045df19fda6623be7f0d0ab60e3429fe5d4793a492a3f0f256164232b47d01", "06d361c935341374fd4d143e4d68b341b4402aefa84884f068e5e887105bf8d3"), ("2c15205fa61a90b0b305e460d9ee6d2cdc344f677052678aa050c8cc1cc6b7a9", "0907be70a920cbc75861f909a5df9dd1bdd6c138e301a5bbe317513ccf7c2ab1", "0a116e580f18b345e35db8073e33d61bc0828c14aa03495e59fa4811628433b5", "00ed9a37a2503c0310e8a09eb7abb040066515a79ac9442962734f710c734800"), ("1a9b7ad4054401e43120183cb99bce616c5eb801b38dfc5987c09056aa1be609", "0e26e40aee606dca22322bfbce155c154f3ec3d8d1430ee6b16ebe40a47389e9", "28cdc48318e3a610060632598d26dae5bc9586ed0307ceda690b6987b54792e0", "0266367ef5d2eeb196e356a3f4a375e0aefa763608c08e5e869d135977987287"), ("1a46a2a9ee618f663ad2b746ffeff6e890aead400101296d0dfb4a9819ea583a", "2b0c26c461653599da22c38e6a6441e421ed18114496697a61aab6a993895108", "227a56625450bc095b982cac343b339417d7dad727f1ba235dee3ead71a2b0c0", "1b772893e7f5b347d6d9d72f0e6b8a10ab1e0cb52df093c56a73b053b006fcca"), ("16e433ff33c80652eeb2849e4a6bd7a746fa17f05bdf1b923c34d5bfb3402a2d", "085b859ee080f7e7372e0d9b15f4a018e597bdcb5fd4d8dd21a95f1adae4324d", "1f094688762bd3ac84bf7bdf4a34976535c6c9bd6603a10674bc6ea815d4104b", "12d26a9d936c26f0efca18e66cfffe83c68badf5758cb894a6dba5a607bce6cf"), ("2c70af206738da2b391aeb6c7f624ab2c8f2d554572a251ceb0db2836f1e1deb", "123a1068fc9a91577f6ca1838950b6166ee37defb82d783544411e3494417782", "239ae970c81dd53294e585d833825438b3656209e65de2f316d2a70ffa79208d", "2eaf5fd06d1cff7048bed16202d70392489e6de0d32b0262276fd9a470ad92ba"), ("219353c1833a36ad983f34c20fdddb9dcdac0af04daa51bc2bb616585fae4181", "0538f08351b9fef444b22f7f31dac9918f3e21651b49538f26d40288549fb624", "00d2c0c2fa272ec19a02ea432f92aba96dad6b833445f00d46650d337f80991a", "1523e37f8eb219635a189996186a3bcedf1747ae8a5f55b6eb92ec286df87486"), ("07e7d811fa59383b1b0e4a125ec45ffa4e9a55b84acf9b2559af53693ba99bc9", "28cd763af3436802552b0603a63733448e2c818d06d5432e5438d3eb80e7435e", "1e5aca0693ced6f9ea4eaa80b51ac53f1d62d239d66589d8a933bd46213a85fb", "1db7ffed038ff1c06e90658d860c285a97b9a534118c920721e7fa9170a19d3d"), ("0753272d961798d339819db8a715838ed818eda27670621ce6533e6393ed615f", "01166d0da197571ae3c28618cd3c3ca49c75b425e9577012203cc3f602c58f64", "13a4f61e557dcf566e24582e340fde9c9d98a6fe05d43197173c8ab70552949f", "0173d10de1a64d0a3dbff110611d6d2f71fc5937992d8b8cb39639507dc5f3c0"), ("1264e737b74053c7cf76c53a5c2817b9d04456f15be67662f3453a38cff0ffb6", "14152ede1954447872bc423b34fe12dd0a5e76c240cc0d6841e97fdff7b8d100", "1a4c8e3abeb8c1391bf93e8e3d246fc9599bbb2f4b40014408d7b28de71a9354", "15d7072539b96c9733d118c4664f8481e0d1927e132b5eda9bdd096614f505c7"), ("1c2d34843d52e8730dc9bc7980430b813670e508bcc30556e07929a72b2a382d", "2b7ed920cb976d472883fb9cfb2b3126229b60522f9335fdc465cf55ff3a00e1", "00c3f28ae0e3dd6918ef025b0d94b6a374bb43f7a6557e5b3194bd3ac61ff70b", "27af633a10fd41e8da17591d76fdc3ffcf326e8e2cd495ed6cd4a0ac6732b8bc"), ("0d18e4a6e254a5d8a18bb39e453516d779bacc227ba32f5e6551691b93f30962", "2d94601b093d0dbbbdd9ff26f82ce48798571d246fa0aee6eeadb0415c343ba6", "077c6d9590a957a384ccfc0454387d1f0e057b11b0935e14b2db0970460a0eec", "04e99db3a6b225c70c20d145aa0b273ab23f964e02e0d79ce7cab3025b2440dc"), ("25dd1e2f3e24911c3b84215352431165376ec8e6f9e1b8e2f734ddd45a4799cf", "027b749b5a0442cdd904a3ab093d74e2b53a4ad4a22ba510d74d253d4214976b", "2530fb71251cda36993157834524045e7b020522a2ffbe4e49dcedb5a878a3f0", "0d2ada4104126ccc22f8b3b4517a560bcaa700bd0d0fc9fbe6224d027c1aebaf"), ("2077eef98c6cb15bf1f591cf01cf76dfb6d2133d04fb5850dc959936e75bc4c7", "167493e4d611b0c612c3510c71b83a66ba3cfbd755eed081ee921c6add071d27", "2cf5ce82f39a4cbad36ee9578f73926c5f009440e8b449c257b437259ee17a76", "24bb180bc0ede155b1bf0175106dd01d5eb21d782d12edc78a07275499d92187"), ("03f8d19df90bbca7ecfff651914d0a3778c5bf83b289005de25618179d318d15", "02322731be72ca1947473b7063edc0aac9319650a4b6811710326a0deb1a9fd9", "1a6b8cec338135141462d40a60f2e8b0665e6fe71e5af90954c515bd595bd152", "1a8f75482e5a59581b75de5b33aa48c3e16cee79a135e7a4c202326a4a0e3023"), ("2ffb00521744f5d106a591c92859cecae903a157e6dae6f1e93488eba0925398", "2435b1c1b364f2af52865cab4e34fb34068d73f3f656887a04ca6e6e52cbad01", "2200dfc82206269f0ce672011a284a08e9a5945c81611ca8a047f8394576bb33", "2099ea08ba1e38e834954ce929bc9461cda2261e64808b55e692e2ca43aa3dd5"), ("281e77db1df93697d84a01766fdea9ea4c2465537236c5b41c75226d20d0333f", "163f66e957ec4b965a0df467a7725a2b3231399dfecbd8afbc5d02973f6971c0", "1324e64b6c58c6680a9900ec8f63260189efff92a2a2bb2dd257abb06b066a84", "26a7b1a23a9526fd1f7e016cc7b929bb3f3bf1248d7dbc709d1189c9b58074a2"), ("0b60871cfc4c66fe4aacc4fdd338505ad89f0ae788468843d7c50c1134d02565", "2c8d33b66cb8475d69295b05609ec9f1a35c6bc81826d776bed63ecc3dedb711", "15df621a968ed134e4118f83e56950a5d661d8d43bbc73e6813d8f5e786f6ef5", "08db7479ba349efa6b85969038392dc5c20b09a0b0008686827922fb32a07c65"), ("0a553937cac5afe7b67dc830f4a176ae5fd124d9db2cc60f6fc939f45a482e9e", "1c3fad4bc11f8a9871572c67c2c2957355a3d4cce43080aa6d1147a40da89af4", "2e88d84ebe679634105829bcbfe0385a269f27821b3449fcb50cc4362f09c3d1", "182ca17d4866a5fb6e1f5437ca0e7ed0964e6c7af3b9a1220b4d31c69757e2f7"), ("2d3c2a7ee876bc410e85273f721135ebd7f72756f4c597cd96e9c1bb7fc8b1bb", "050e5c18e3349e94653e1b8b4c109f50dd15399214eefc7b9134ed5f7076a36f", "15e0d9943d68442e063dda69b418cd49ec517585a0ae504543f98c62f66f37e1", "122aa4c8139bb1bda8d3684efd96b670836fb64d3bad1e4847359d76e47db970"), ("17721a771fb48a4b11e04793e923dc39d50c10172aabeee205108d797d04d242", "251fb82ee988a4d5b1be75517bdfc57c1f9014b8b3acf12e965c5584c332210b", "08126ae05a656578d2c9ae4327fe599eb4e908a38a7dc2a36970889bcdea4313", "0827faf59e741a542a64cde4235de53771c9a8ea40be688b7d363c30c80723cf"), ("024d2ef286c392ff4b399aac2d388be828b4049579965ee26ee8346b14964312", "1504fe57ea489528c62b34b26d96dd2d02773a77b9449b61dfcc680321d2642a", "0556c573da53e96b24f56b4f8feaa7689fed2e8c3edff40387a77363b82b6c8a", "29559bb9e53dff4ae844c3049f25fcb3e958f75195ec3771563695ba1c333599"), ("1c62d2792b1f6865ecc22ccd6c6402f3f7b9159ccb82be672bfc846adc10fa3c", "0c2cf7b524a23adc5502c235054a45849757c66fb31d282439b3384aea2216c2", "172eebee9095a007cc729349414644f60ccfe10b51a99dcd333a982d211ae24e", "28a7a2511b1f348909be80d48c938b7d117a20122748f7fb950d61cf2616cf37"), ("289f620b4a54056ae9ccbcf369046f3231fc26b61c053cf428a7450985d2f5e1", "0cbfaf62b0aa1fd433bbe8851330147b6fb088ed54504235ea2490a9226968dc", "18300725db3dcd8111182b1f82bf3e96b01bf36d36bf935527bc50e03e7ac236", "1634ef36d6b7713212e7bbdd384fdfbb2556daa62ca57a9519e68d49a4c5b064"), ("291dce10feb350bd9ad8be66ded269c988d75d747dea580356c81463cf779902", "263ad07e50d1b5709f9022445d802b13ab06559b1999a828523e492af2fe2e3d", "1996b568ae59f5baa786b06025e5f3bad525069606f3858d9569a4ca8862d271", "19e0f2e569baa17ddd6cac9f44e436df7c5d02e73a1e3425294573ae38264c9f"), ("30169f099b4e2b53a4315779831285359ef314fb782fc98f78b5bdc8f126a67e", "003f5d78a0a7d0d6f52d10e2099390c7aeefafaddc2734a94e0313e8d7cd0799", "0ae4c152c404c696e9ad702181a2e169784aa8766d9ee57082ac00e299bed798", "028a7b8a6299cb226db92cf324ca3e95b998d328d22fb48608a8fdde96a08d89"), ("03324cd35887e6f0d76391cea94815f63825624a4ae90402eff07ba1d94f71e3", "22b4012e5b47f183287d317cc4adc6770fd0b817fd102c10119d6becd4b2877b", "2733295a6d6faab9cd39b950138ff2566bcf17939f929fa3783b123a19962b94", "15c73a2509226cd562e2f46185636de36aebd0c19b807374eae87a1a3d1611b9"), ("012840e7a1c13b5f350afd9c83cb886dae44bc216102a1769e12d31c11052773", "12d036a343856765984cd34f0857ddaf601354b290d13ca59beb80279817d4e6", "1831f67e38abfc0b69179ade8afecda4459f2ac0de73a0fb5c508e7a89406e40", "129f2d549b42abf79b298f213a8fb51eae8df3ba55180337dc248c2e2dbfb611"), ("03716e749452d40656a579c144b0b8109c4048c921ddf7fc78ae4076d82830ae", "0b310201d18e60dcbcbdd9190c117c2bfff8d2ff0d96e9d8dd91fe07a9327e07", "1fc5130a027de05c4f647551fa5a21551aa61fe96a7f49181bba53a44c91b772", "2fe5f5202533451c03af912a64b2b4db8ec60765dbcbca0eb2b41a101eb3a655"), ("1d316d2628ba8cd03f03ef0416484c78909070bbb22787077a94a697dbc7d891", "29c14ca751a21841cc29ffa25dadd7d7c4a14c0c6f0f6650896a5124e08f403c", "13d84ec37a381638508f0c4d29765ff154282de39d29693b7ae42678b9c59171", "24f1b62c8c6c1257d4018b53999444c16dc7d304e0ad31d2be34157955d11d50"), ("1b7f6a300f0d68086fa9a4c7e39a5c1c29fd633029161f079b793f7e91131aad", "0ce29309a139aa847ffbba8aa2b928eccba8b14c0dc19ec986e3f0b45d5e2f69", "2bac5a4924ee83c11a67ccbd7aa4f6d97b09fc258b9093bed54ca2a68f249e82", "26d22bf2faf67a730c9322d313dc833287a8627a9eb72dba1de20c45d2a1c484"), ("16a17634fcfacbc7dd88ffccf0ba5d564c50a5e4f86156e1a68db575d297d0b0", "0ba7bb110644baaa06db2d8c5f1ee9169afeb3115c466d7fad3109dcac18b456", "16d61b4bbc42a76c02b694e8dba08326764fa3c2963a0f3633fe576d0bc042ae", "0832174b11df1da9716fab8f85c231847bcb505ac37074bb2a78f29d4eb9e80f"), ("16d08d2f6d6a4083c80a3e3b27d169aa4eec6d6f2112acecb52532d90bc9c83f", "2d5e647456f1f0560cdc14363d2c36a97c5f496d0cf46357c945e06510b94aa4", "0b9dd8721cb243065feb02bc61e98bb20bb9f74d509c2fbe4b85751880e12f46", "03137525986d47059633edb0f6f057fbe08c918c7ff5c505fc4ca0aea6be818c"), ("2db893c38880a507327238bf852d816a2aa0a96b3ec292467dbe096a7313abcb", "0049e9d4b5b0790e879feb477efe018880760ed17233d771378e678401a04ab6", "15f5477a04d17028cbe197d39284d535c513515d19407543e6a0412242ad57ef", "26c4c05cc7f94be0a47c54dfc5853501704fcee67b00f99507d9b3050ea23ca7"), ("2eef2451d737b4999c763a839eee3f4fa9b5093dc2f597e84e3535530934f2e0", "2a7fa352610306394f43a2b5aae61ebd52c6c14eb3d36a3f58f53ebcd7ba8f75", "0a02e40dcd0088e9b40a71cd9942d16a79daec9f01f8e413806b9428f6c7e55f", "1bf2e4fee24371f87ef5a6f16ae172dcffa7fb5b1e5e6f5b84329afa807daebd"), ("1678577882228da091a3ca53c386cc9efb62038dc544975337f19c6f30762c3a", "12cd551c8cd6acf0b4880bb6afcbfa3ede02a766de7e613440add277b5c901b3", "2ba5319ec3a0e91f3cc8166ba354f16cff5ea8be476f55841de915cf17900043", "2b588120ccc9d54ad1aa3031d8d712728b490edd9ce1810c65970dc471499cde"), ("0e31275c7c7dd933d462373f339af23143b746db9a96899d44aed562a90b1902", "03d0c1f49e7a40f179255d438a6b5044d4b711afae4ec7d93a3b7d29af89daea", "2c634c99c1481c08e7271b3f3fbf512ccca91f421e2317a73ac1898713174b05", "2e9bd8d28712f958c7cec1c62e9b88efc17fcd9a770b7dd40ba9cec6c505fad5"), ("1e8ff725b4402345b1798b8832299d84621241939329324eb48ad94d0eafa6c0", "004c2703dc35307786294e723740d09e9a1932ebb9a3992b6166f9a6e3e722b4", "067935f8370926184e4d7d384a7de8abeb6168ba412ac777300aa049fd1e3162", "1e500a2daee34a4b8335d424fd4f9fa1c1fdeb8e71053134c66db12d44645aee"), ("1f34e440c2dd5990cc8cf958e3d850ee3d812232e06a12a3eeb854f77a4b7f8a", "0281b4ecf5e148bb4f8d3f3b90cdf3199f844fdafb7dea082dd8e4a0e4c26902", "1ebc22d1b18167be85a59b0d46f23f8b231cc3c5d59fea5e49d87f041b838f46", "0c9a99ebbaa0ce3e17912bf70bfd635e2ab38b4aceb5bb2c2b540223bab88ea3"), ("0b5d3bd55d728dac6e4f01cf5e8c922a9ea2a89e6195ad2b42f17acc1bf076e5", "2910a168a98f572105855c01153217ca37221a37a6d5cc2ded33869aeacd4d75", "2edc68cca03eeb975f766aaf3ef41541982fb1898b06040d38e361d30d38cd23", "1804e00f4e24ae723a9888b8dc00987f184e3c7bc509d25a6049a46347608faa"), ("065f238d68f9e453d65e766a657cdb0debc80888ea2742c1fb154833524e3568", "2e3daa87bd6bc30a80bcc5d252ee5b6bc075bd376ed568aa9f9cf85fd3c60379", "14d58b626b33a3c011a01f2686fce7a3d17ecb0374ff44a6dcfe33060209ab18", "15e57d7ea82008213b9a3c06a3fe4a1cb9c636ad6ae33cf43e4254cb398aea52"), ("21193aff7eb1dedb915fd2ee495e87272f121871c0fb34526788539a3cafa7f3", "2b02a6d084dde083f64cf2d61287bd8425a48f555b4acfc7c79dccf5ee0cc185", "29a7dc9a25f3caa01ebf9c5a4f9a5f4321b42a9d84ebd61d147ac2304dc58564", "081cf4930c62aed474dcafd726a5d4bc2e764ff1937bdef3b50f3c07d101d473"), ("22e56b453b854cbc2f6a8a1de25cc204b2e9b998a1c38604e1cb68b06caabf27", "171f385a89dc9cb70412abae94f032340e089dfd974fdf39f031f1365bb3ba32", "05cd474a37eeabdc3b83305139511281af865f39868aad98e24217482c3e547b", "05673c1c95c36b34d7fb3dd31af75b99b74adc20f14fdbb572830c026c0dd0d8"), ("04f944f43548948dedfd31374d8b5aebbe6af2b7bb9735953d340347e13b31d3", "286b95d6c054f45249454c31744613b82942cd896afe5ac9211c40de536ee6f0", "04eef8dd965a07f8e1ef6f54751596bfefa2bf33447da3b8a39f64db4727c348", "2f6ca52bf8135bb5a246119526813bd6778056bf0a4f982a62a422defa04301d"), ("2c8d935e2a5d8aa252f38565013fcc7c28e52cfd60af62a9c25f0b4f0ecb821a", "2758ee918255471be8bd2f095e5d5e42d94c7178dd574e32e983628c55d6c5f2", "0a5de27b520879bd889eee397fdce4dc82acf926301048aedc147fcde01e48b3", "22ae59908f3bb6714637ffbd8b8800fed82982bb6fac271b1f44121f6ea45b83"), ("2375024e2fb1e934c83ee703ade5621a8cb1cc9d9e9d3231bab56a67538c181c", "0e0fe85fdf8f97f73cbda7fcb1fb2f80ad726af77fd6b3a36925f52d6c21cb9a", "2bdc62d68771cc4040ce741e3d6ca271b173965adc931d5efb2504cb3e7a8b33", "004e5f6bdddba54fb5b331dd59098006fa968184841953a71ba8219174f63ddc"), ("261aa9921c6b7013a3c5470a785ac1570bf66963734c9debf04a22833d7dc175", "2c11c926aba85875d398f3c80e5f90103b7dd5d99e8aedbb8132ea4f19740b51", "16d627148837c4d3a196a7d2637d250973bd4f1cdf682c8140dd78472303a9e5", "145815e22adae4a14e84f437752b796f78f5d8f1418c9ffc257118d6fe4b5722"), ("2a88c343fc9d7ad7e2ab86451a406c06aa27da67e06a2beb61bb3a42fc874449", "281cd5245f0a1b87ac03dbaf16563a4e369fccad60333a071ca07fc44bcc61de", "0a188fe7392d449f05c4629b089eb92ade8fb213a509f1c1963f6b8c7a794f79", "26f2343e9ecaf2a87ed46d087a8517d5c67bf36164cf98688ef987d3f065e798"), ("122d1dee4b5cae2da923a298f960170bdfc2e0a3b7ac6a70357e9f783b51c260", "2dee365333a1f3b2026a27988d41353b9183ac6974f92ca534f701d5ce14ff0c", "15b77e0f24fe0833a7c5d8f6d4304146956ced48e30960f8ed8495c989b73f48", "25537f27c2303c17bfa2bc8f5d32dd64880fa670e0da6601cd1b2ef329092da5"), ("2e974b20a316fd0ad3765878916be0263823edc337ff65be64af0f26bf6c9fa5", "1777aff3aec5f55b34d2000045235a935341d68f7988d8620a4e6cff335ddc3d", "1be0607fe8ba2e2ede8a4287e10cf277269c11a2a00713323f2803513fddde3e", "2892db6bf2df7b8e3cdfb78eb6a83f5e5a470094b6b990c20dcf3511ca3978d7"), ("20526c5d5ce3fcb28b6068ce2af64395e4a9e49aeebe7fe45175c5d6feda4df1", "1ce23693541e273d55f62e0a3243f09bf87f69f58fb4ff704dc3d3a6a30cb8cf", "2f01d73f21d777628a7533a79585317a84bf1201bd37e2a52b38b5677c3c1918", "210fde33880ac0d46141e5ba1d85ba19546819e539b3a60ba1a873a41888fd4f"), ("09a6e7514209eec505d4926d4c8b140c74c827e837e4467b7d8a3c7ec650da48", "29c14e596f48f9135e8686334d4dc24350871373923ed9b0c4ce9e69ebda49ad", "19feaa0658de95c006b49b9446084a447698a5d2a25aaa93cfeb992308a62206", "0fde078609c15052d30876ad63efc629b37febb949f68106f876ab164485d7ff"), ("0e6c337ba396928b81ccdea80db849141bab4f52f37a3746b884653e107c39eb", "26d35d64ea7ecf26f22ecd8fa65b9f208bfed5737d2a29b6fa75c5c5793379a8", "157a25064d0a14e972105f9df82589ab9552b00cf8669177d775149fc83bf2be", "1464f9f2e04ca5df89cd451e3a04ae666216f29d67482e5f11b1efddd35a54ff"), ("1d8555aef0bffdfb4a45fc3ac0cea8729f3e33f2a4cef68bf42e8529c177b773", "0bde4f7ae1a096d8482db3df1852574d4da10e101407068b9e6e4f65c597253c", "0c73516a776aed7f0865acd76363b2b546e7e7da4323fab18b5a16b8654b3038", "1957c5df6f96f6c7be8ecebde23df1d5d423d1bea84faceb37afe9185172e442"), ("12fbe791a5dbb36dd4ca71e19cc7f65bee2b673fbd4c4af399df5ddf4e591cca", "14dadc89d9a35cafb74809a33b2f5bdec47204477f31740fb5c8685f3a358ba8", "1cfba0439fc2f74569df5ec19f3fde3f054cf605aae0514ff07d0f28e12b8d3d", "1c7f8e265d9826983d7587d4372e5f41e6f535ca98b5997683aa8d1cd7c5e80f"), ("1fe85ec43345ce181a8c1baad2a0d6b4580c8ddd149e9fa65d36877e386f7071", "14d228f0266f9df5e97f2d2c80bacd6ed5b2b80a7a8168b56474f969a89a856e", "235f2e6b89f8e9afbf3e3b7019b02629f922f6351fbef61ca08fe7356d179191", "03fc57bc7aa4989cddd980b647222ea454559f39540ca0165bc1a4d5b9fefd38"), ("0897f684330e1bf85b335f19697a149f7f93d7c470798fc7235a6b3816983bd2", "203980ee57bd9ed6de04ac229ae9f6577e774b17986c862dfe54063af7a7bf7c", "2ad8588268be0bc8fb805a872eb0d238661457b07169b020e1d97cc0af73023b", "0ef810049b7587cae5fba842cea7dc780f86fb4d29ab4e1f24f4ef5426d3a229"), ("0643e8aea2b119792eb5a777fa841311cfb706e1043df5b80fa159a81356be01", "0e6c5c6dcd189c36c3dbe600bbebd6737831bb055879db553ed0031de752318c", "1a2212a1d58a3e7e95f0bf83641f12c45f65c7a7f98da0c52986272607088226", "25f3a1294898a5287d9b4702518514798651db008ddca852c03c69261472303c"), ("1b5ac00709861306b509ab74596dbd713a94623c2e2a7dae9e6d0876df05eeee", "19b9d358fce13e6c9386d0ebcaf2974d7adde3e50a4cdafa805d2492573cc622", "164b3620004824fad8a3ec97a62ba2347a9e61d5f136f43382326152cef1a2b0", "2c7f1a9454515f9ad8818968db563b65a650ab7a9d4a380d95f4b72d261bace4"), ("2d4d83073b890a91a0ff2bfd879b09b6dcbf1749dd7a38f18a8998f1213f8d2a", "23f0f96956924136acab119e0d4a0beadc7ba05bc52413f8a2032f6511a6764d", "01d9ad669e0e6ffe05ee05640c095a2d10a923a5ef54bb911dd634c0b92c06d9", "1c9443627dda8593f16b81470251cc2c62288bd5d1be96ffed93f16dfde5f514"), ("15fbd7b9d330a93c6389f0fadbba34dca445c5761762316ea731e35ca14520bd", "238e49d0da5216bc6e2550418d27be768fdd569cfcada086a685f806b76532df", "04486afd455f5cc2598065999ef5fd77054a65a912e503b3749492de9aa7ce5b", "17b4817eb0393e28424e157ff559d26c7491ca1f251984fdd4d082b21d2caa1f"), ("2adb17429c186a46a3aef40ff8ec0b25750235f11556225c3b47d21ac082709a", "03a060abbee8197ba1eef6435d857f0fb4f59d9001eff5d70557370dab0e9b0b", "2b83f3e00ed3b894dfd136638f63a59e90fce7f806732ff5a270f05b1092c878", "177187e5530fdeef119073f3180355ec5a89924c94f714cbacf6c8fa67d74e22"), ("2bf27259f67faea7cdf869dde399ed1a31f867d7fcdde73d81a4bb865c4b1116", "16d78a41c5140e76e56c9d83ac474314321a1c7ad465d35293015916d929e671", "2fcf7f55f7a2c1e56d2276c21b2b7c3f6ac193b330f8612fd842a70a007b0790", "27533ff11e9839ca4e3fbe193a306b519fab2da613963ef0a14f4754bef88215"), ("2d3569578709c6d06f665733c5592e4d0024888077a90f4a0e5e24cc15b885b5", "02b6d35fe3c0f359ab63829261eb2593d1ecfd4e442edb268d031aac48569003", "217156123c559385e38135f9a8ea99f5d967cd69c13240ab0420161cb3f74156", "14ee3b5e7f9c70e64407c09edbe6e999f15a59c3c4291ef846526763b754fc9e"), ("29509efc28a60fd0b7fe68f718d928fe79a6761cd2f80d88b2e401c1e3de1fc7", "1353983345fa16e25f34b6b239eb410db6326949c4dfa8d42cf874a35acb65cd", "22edcc5896584c3519bac23700a82433842f5d16a764d6b8ff57c7eb045e58ae", "27ce0390dbff7a98174062a8a22b16a49886ce5910ff3fbd0a16d1050bf30698"), ("1a4fb8e4004745bbcddaa0ac22fa15c7fda35d042996bab993fea3a66dd97c0f", "0376cea9c64b21b4bfa41beda349d0b38b6891b76879a579662f34dd0c9f7211", "05bf850e9d5dd7490496fa964b6573082660026eabcd4aff0bc00b0a75041340", "0dfef3ded8367aa9d23aaed3f59c9faae61d6e1869627d1dd13dc3565c75f589"), ("0389fe2a204e1322ca30d6351e92ded32a925ffc614bb8938027b4cb844c0b49", "2cd8dbce2ea19ba6ae0fd43034a2c20912289ccf7d3db6ef0086198d3bc320a2", "2051e7e31caacd304ee264369951e117e5d521cf813a53bc2e15c8f6e267f3e9", "0d39400f8908ea0869be9ab9c659ef2c818d9fe3713b873d34554a0588922a37"), ("2eaf57754d87dbc002794a10e94e2372765cae26938bbd8e5d727eba366fb4d5", "13875e46fdb520f1f69a760aebc3e151bbc615ce83a1754797f7b6db73590492", "18f99e3587231bda34ecbabc89b430d6f8182738e2bd55423e7e68594ca7c467", "28b2eac47f36c9a55cf70a8742047b728cbc53400bce4d49ba3b48b403830b1c"), ("1e8dd46036c5ef8587c5cb545e179ef6ad797b2c9178fe98d0d0267ccb0be0ef", "20d728ad9fd378416acf9cbbc25e2d916bae56fa4548f38791c5bfead5269e29", "1619849e560add14a4b25bdbadd6109a264657f24cfdb9b1ef20c01e668ae8d8", "07da1ff20b88b6a63737103b8f3f4d5d17476f0876817fd56ad606e7566f1196"), ("2a438fcd06542e598e3219d776288a8c147c2770cf82e9521de24fce277e187e", "22ab7ad4d233109af5abb6f233e974b7566f443dbdbd0f2d7f505fa5b273c18c", "2e17cd6ecb635a4c56c17d3d3e805f5f31dfbb78c75cb5cc66eab7dd7d01a18d", "1768c47d65030204a4890e1d4892639549b83575d8f6b93be9e706a2a54efec4"), ("2aac548f8c18f64de6a8fd05060b2f7c2ace6bcf32fb6193ca5c6dc61a4d36c7", "16955067d7fc776f159e977669ca27c4027ae3bbf4f2f263386636db3c371006", "2975d333833251b682aeb3559188fb3f9783394e53cfd31ff0ac403dba461ec8", "1f4e83c10d85521c8aad5437c50ea810b676c3bb7417b4d34461fef080ba5994"), ("2baca9c7fe7a51b8c80198b78f323192331a48e31ee8ba3e3648aefdddf5572b", "1a3610f04d98bf83c6ebad299e25f65330739da6f6695d856c55965676a25ef4", "1de7271016bf3202b414483e99350991688159ebcaa11d30de164d17de23d33b", "08a61d7da98064c7e1b9edabe6672d7e64af334c40d1313133744edcc42e8c97"), ("0f14f9fad37ff69716eb2f786394d061be0c76035ed86298ef6f42d882a8058b", "2c0b27875cf32c6339ce50cba532bcf930ca4cc6c16df5b60ecb83ef5e53924d", "10197b52d74689a78fcdfac616f1605d06504c8ca7d8cb6f4e6322f72aec57d6", "02a88218edf09d2fcd8f82feeb50b3e3e38ab7d8bfecd8bb8f1b4650178b98f9"), ("1aea143802d750f833bf3688fcaed682f2921a2722ca38743b1643063efb05df", "23f501e4201b99c48ff8bc0bb4ce1f4e0bf2d58273b92da3a148589aa9f71241", "144a84a87875756a03ce3f9e0895fc05052693228a3719a7fa131da03189a4e9", "05c191ceb7ea4b4fbf93406711ea5e8e300617a69f2052419cb61e0980d2d635"), ("1baf777ed98f92a323ec67d4472245c13cacaba728aaaa73d726061260afdbb0", "27095ab179ed3253ddeffd83d13811924c67c318be94d90b6e72a17799bd4ac5", "11b463df324be029590f03d0ab8b5571939346c3225d50a9b3424ed66bcc4e44", "09b4d4b72f51ad367644f1eea96a09204a0926334c6907ba060c728374f74834"), ("0009ad0a5818c40ba3690a759184a9031b6f12bc9962a4c6d0c0d24dc064af3b", "027ea9d6ea7f990b58086c31c1cf44f75797a1dd725f3791a3edf67ce598edc5", "10fe2fa5685fa93ea7e5039a3d67e2507296e4abe00b3e17895278c071f0a7c5", "1dd0aaa58b79590ec3f7025988b3669c525cee4ccb0f98e8f067323775bbadce"), ("087f693a2553f4603e85ac78fba4bb0da17fa325223f018c0a07a9c1096eb9ed", "256b9f624980ecc66d7a0b8ed01a4e439be98b3b36fff971d2add2304fa1293b", "0ce46d7c3a483370ee69aff372b7fc7f374b6925676459afa67d43d7fd5c5c62", "24375d1017f01007c4bb618790bfea2ba1a9c72ad90058d5b94ec96a4e87335a"), ("2fe0b4c7a52da9be80343da70cff2666056f3707a7e30b0ffa551c257a663dd0", "0fc9211b8feccf3d1b75c818d2095caab78411224ad7c65508dc8722c009951e", "19c36cb5a482563713d9c3f39e6ec105b6534379203a81b6888f0d6a4f4ac323", "172ccd5beaaacc51843d66585e28f856f1ca9ea769c42a8bf64293bdf81acf46"), ("15e16582ae386fee513ddbadfbdbe4875797887cefe3e5fdc74dfafd74db75db", "1e5e01b8f7bd4e150a5b11e062310559b589c5af0c8f0808585ed7d9d8e89c74", "1ea9d322fb7bac164822e25928e427d7273f0cd2ebaf1c888f57b26aad35a1d4", "1ead3ef7864f5e54455311ac205fc0c9635fc5660dbf6290529df0e066c3673f"), ("07b66aef222aa747f37e3c2914a7c13910c5f051ddc56a37e58591317c4790f0", "1283de77e7ba90f13afaa82700f3f4809f3887a48f55723e727ea7933cc3f96c", "023ae7d43b80de6ef6467bf1ec76ebeaabc00fb381ac3579b30998eaac143084", "0cca8ee7dc55a3f3f9c4d54c0f71e2a257ab12976c425a1d7b6e1f03f4a9bab3"), ("2953eeda7120bf2d4d5a783852e963f7aa68ff0f2c41da0097d53dfa607ca84d", "2f0e85f87b2bdc2c47f464d041d024b052203990373f0f36ab7431a61e54dc31", "212f7fcc1e8ab5b113836eb552ed4ce7f8cf3f8dd87a340d00bcd1d0d1bcc371", "2cac378b95ba8042e9639f87428f9f397b2a69ce1736b02f6cd851da4ccd20f8"), ("262f9c0dbdc3815476efaf4e2d96de0de725ded7f3a6983e3027c6768c53f92b", "0a660ae2c30e3e1a8e9bbf84b5cdb913d85959e5ef02b2ea766606dc5b3e7f9d", "2b45644151dde5c1d689625a30749cc220277434ae88bd506c93416c500dbe87", "2dacfd9bfc1d9386bffd633c73edc0f676a92b95a5514598a1cb6645830904ec"), ("0e93c02b59b6389e2f97e0433089ea7da8a47c598c704c699eb4907ad13bf4db", "12f7608ccc5ab04e703adc11f53e37540a6c256026161d5cc90105a4364b02de", "2f10cc46b9b08963b718c9573e9416d44452b28637a932a253486ee395bf831d", "22a27eb5790644e2666954885827fc852a19e974029123efddfa34b0ef24b012"), ("1c0ff496597f23d2dd3ec7c5b7197d36f8d5856d39466a4810b4e5b1b852d474", "2082ab973005753494918fe69495f7979bca21aac64d0bf156e8e73d74d8d24a", "1f9a91c604f7896eed05cf8c18a869aade67955a69a6f2a7f337e0dd8bd7cd42", "2f1390b3ab8598cd0211adefe8b8cbf73ce0fe25f6dc65d288ac51b84f4e17f2"), ("1e6cb1163c685c9930afb92b1db52f906e0108ec7aef651dcc60a191127eadd0", "29524aeaaae87b5395ccf4bd82b12bec3490566938dfee7bae42980d68a390d8", "20cdfa64fab674d092cd03e1acda334b12c4c5c39445740363caf48cc5c8b9bc", "0aea6bca0c0f103edb49a6411fe9bcd334f66bf73911d1cb5f7ce1b916adc02f"), ("0ff40ea9a06d1b4711e4b8a0366bad4c474adcb5b3013d30555013b2bf29f085", "02cbd9d4f91d91fb88fd36ddbcd12ab44166cc0b419b6bd6e3eb3311192f63b4", "2e0537ee6efdeed9382c05a3dbac73bca291052d157ee84d43d2e75a3a9deb74", "273a0962426659c2ad73aef4b9da35ea79843046073a2704ed710d3a71e1337c"), ("2732e7f1bf1695b2d379085ab463fc2e91d4952a2890afb2d49a382f7f0b6a98", "162fee44dc294ef67f782709c1f46546d5ba83ba1dc6a4a522245e442157a90f", "2ccd11914de37d5d747c1d78fc28dd763e2e7859df184495458e7b1fd79a24bf", "28d5b84f9dad9d19e24783eac6045eb97754c196121ae9d0b136c552799e45f6"), ("059dd5d774697b4066bcd58857595b3a4255c34f91b2bf1158af55bfe5841cbf", "0a5cbdf359940cf6e9903e730e48e29d65336d8ac40af129bc4bfe7d5f2edec5", "0248d43c79f11c04688ba96bf84a07e69f299a0155c7d8c4ab729930b1152189", "0f5fb08e282529be2424de51f9d5eecfae1f22d9dea524d704519171611371dd"), ("1b24b2659d009c357ac54ffb51e8757444dd1354762f2f33571dee8e63deff13", "1ff12963e01f8148fd9d68cee65631805f35104b416b443a4d59e619af1b4381", "092a7a0c915d74dd738f948467e157dd9ee9c81d3619c937ade52cd8d07b8d2d", "10dd8fa256c5cc977cca055c9526e92e93e46e72bf1e352a94da1bd1f27659ae"), ("16b753c1b95aa94157e8910cb684bbf5e40c24c93c8f209096a3af4f9b07fe69", "16173fc857fb5eef45425fcb34efe5f1501cbb71ca25aa3e2c9f3548346fee43", "1f0066774214879be0382ede94659b8cfe46197f26792ccf977b8ed7c79fce24", "065999d19c7f182de4f429b125edea1acf7f21361fc88ca45954676b3cc4c0a3"), ("2733751ec3d786012d03d434574603322d00354a37d2af08a4df181f54223479", "2602affb4c888154ff554b9ce0e6ca3509a84a95a784a8e455a147e6b3aceff9", "0f5697f92706c0c6b29703369688e1ed1aa00b8b49cb9c224501710941dd0051", "0ffd0387cb65890e6aa217bb4b489dcb78994500f1569f20e265f5bb553e7238"), ("2347aece4209e2325b7ce8b831e58759bf3f8434077c7eafd9af29fcd39b9d7e", "2a4b78c9fb5a10cc380025dcae728b8a1282ced9aab6db2f002c2103bfb55c8e", "0983e5fae80e343b3aa0b6697095d1ac7bc000cd8242f4de3db9025be5058ac3", "02d8edf217175b30adb99c35ed34baa8231963c4ecbbec07ca84715ba5647597"), ("19b7014bbb2e1a122271d6ae41ffe36ff96d032a28f6d861939186a2f9b7ba80", "21084baa29e99a384bdd5181766f7af3b7646f6c618547a999f82e45e44400d0", "202700ea1b02c741ad4f9709cc87f9d9cf2766568c26fd6dbe88059a7e60cfe0", "0ec08b3591d688936c76ee69dc1b7a7a3756ca0ca42896639e2361d201df84e4"), ("2dbebf61180beebe1fc26da98f86f280be6d5b8c96f7f650e0e6611c98dddd15", "2c3391f260aa1e962da1f645614057eadc7abfaea8a714a93466485834f3b9e8", "260fdbc588c0aadee5a618a4f508bc73063b7c14ee3fc9f15e35610290406430", "24e3d4e93af74fc84ce7df6ecd1a604f50708d86120e9dd5975a7c5cf04af114"), ("27bc675e5d0d10e51a8201e796e18bbee4e39188d8a2d0925395dcb4ef60b0d6", "09aad029cf55d0bf6049aeaa30aaa90e47f3ef231da6e72e84da46fb06b49e58", "2c02d426a838e1053fbb162fabe29447ecd58cc5b0f38dfec1f591f1347accaf", "1572cecc34628481375c165ae6fa5fe3ae6a5e60b10e569f3b449d9abc1b2985"), ("193ff80ccc75e912513b7afba38ab89fcfe37dfb887de9c3f81cf44eb9299e90", "1045e51c75dea5d9654d107667e69694fbc995e304f64e2f353341cf4342f140", "2b3629e7b4eb36b69f1c3ef94b4da97a869a1d9b88246e07799380a135f69957", "0600189f5592d77d13a632de91838e5c858ee99114efdb1d5c1da4b75cac03a1"), ("039400c423f584b2614e159c60c0af7d561498ccac9af865f83571e7f7560047", "12beab59cf1ff9bafee6530e0a54456a3afc5a041a7ebd7c283801a080988312", "01cec932de9a07720bad76f74f0b322729d245c00edfb5ba5a0e23ae1f385013", "2049ddc56db6bce37a4c3a18edc0543c1a86c748d58a313d0ce3eb3e720253bb"), ("08721c7ddfcccea068faa3e65c9e7a39594a56d9aee6daf6509e9e8596235ea1", "2888e09bac8bf9a6d8e18b50058a7723e08d781503a494844b4524209e1f70b3", "00e7ac8b4f9e58b823d88b17b74fe8bfd9bfc8a12e4594f2ab124b412f71ead7", "16cd8987554df0a629611e7051653d723c69ec523a3ebe85df59d50bd33234e3"), ("23ca48bf500c5ea9a38ad4696f84c22136e240a53e3af4ee36d29ac41e59f659", "2083e76886b3506e93f626bb87d9ba31a5478d0423c47b17d78b847951bbdffb", "0be961d4207684afe60692ac9a5f3e157365912d0948798b49dba217cf556bfa", "1cc9bda8fca0c89dea470c0db5da1334d5e161655f60a0cde724b6d214a33676"), ("2f8881bc718dc36f9e949fc0bdf6451de2fc7257b11849ba3e5d485ab2ba7b57", "17a13ed65d8276a02e3350170e6c7359c981fef4acb6474173d7a34e220c27cf", "27ad77a6c54de58c05a0445e4e1c3a64a211897a15a8f6d8c02ee592f51a7a5d", "26f818eec3c4fba60f668212f7d99f704f3ed2c72ca0582b1d3bc0f0b6262a97"), ("2234ba7241ccddbfa706404f264b5073edff3538c32ac75cb11df03e7c795be9", "1793120835510ca8700193b2d27ab18aa53027daf6ac3c4cae17e08ec97669e6", "164c12f1be3af2e8d66a6c823213989dd723aa7d6821d72dea8aa132cd3f9afe", "208f2656dc64ebbdc544e239dbad432709e79e3b3dd733f7cb930341e409a1bc"), ("2e73405af5a1bca3ca6c6b6d7a32aac98f8de97745dccaf2f43f768461427ae1", "258edfadd1a23716a076b8c3a925279d6ba8ca3c879417357cc27c49bb293f6d", "15eeb398704c52cefcd4af8bb8e342b93fef78b716df39fa485470a096b2cb3e", "18336bf330a342a408df24d34a541f6ef6b7ca75c573055f27a5410e04232113"), ("24a729ebc77fab30343f9f47769e5a4745e7202ccbf8fa73537cee1dc7a9bb1f", "1fd753880635c69999548cff4574065e85d660c04fa9675183dbc93ecdbcfd17", "29050080d8c3ac2478f5f09df0779e7646d096256bb4984d32d50af3754896c7", "115c25694961d6d6af5e099031bde5fc8c6c8429a9089accaea44741fa8d647b"), ("288cb67f7c5d6d58b42785ff8c86aa637ec6266ece57107e32717be32ce9850f", "2e200c0f0725495eea55951cc5f42af6404149d0ff07e88c6f00db22cd7b40ca", "267391598a1d99f3c0ea4044799f70124913349ca53fd9395e212bc39d784914", "0ae137d247455da36f18c66f3dca29337ac901be4ceb51ec1269b85600077cf5"), ("13431a3510224f3df4bed57a9f90e5fe942e9826490e42d42269001acd754c99", "28c862efc3a1924904e7f7815995b4235e009a7a20ae752d742823ca86edff15", "103bf9eec3a0c2f8600cba5aa504bdd4d2acd7b85539ea0ad2dcdf508ecf364f", "269296ff853b55f28448fc382677e3f767102dfff84afb7eed81a04c4653f008"), ("21942c62d503acf74cb08f9fe6cab988ae551e265b4af74fbcfdd6e10ab13b2c", "020930edcf8ae91b1b15b6565ec82244ccb05b1fa26a5e59dbbf08ff496e104b", "2348a6e7486f6bba8529e20acb1ff5feb1ae4d53f638a0e3700a6920b56ab134", "0de810cb65ff2600a4c93e51d2c10deb5a8a83fc5dd54cf7c62cb6994a1d5fee"), ("1448acf7995b9d5342688d860bd86b252d447a11e29472bd1fdd68eccdf94e1e", "2af05d1fd5710e7d79a0afd808af6d72cb81ee29cbfdbdeeba98c899f2707a5a", "16aaf81e2b27c9ba2ce8c2cde05548a5da38c11d6b13e379f272b98eefe89b31", "22b5f2936bab77739e44bb41c285ccee1c8f03023589ce72fce5a699848eabd3"), ("080e111d83f5651ea6e27bbb95765541b0f056cbe2a01839869c76bfc48b2054", "24c5ab42bfda38f052e07bae569b591cb29879a673c1e8080ff5c97f579b2e8f", "1cfb7e0144e5e3a3eddf234eac1acee23288eb2ccf8abd6d33c8b1ba0694870c", "28b30131bb83f2da67f1f7b4264fd09250a34f8e29b80f655b3f5c407cb3d744"), ("1b7149fcb3cd29dc8b8bff3ad9a5ddc0cf16db7e1a9d694112291acba634bcff", "1773f5eb89d6f95d26b41d00d4e5095bff47f51c4ac8705a1a7afa659879065f", "125a3dd4cd3fc92ef3188a2b21df83609bf3d210fa096b0557c5b2d3a30b8d51", "15b702d0d8ff131f0f748edea001662113f2eab8e49d02c07c5c3ceba1eee8e5"), ("1b3833cbed1609567afb7b365ab19fb2552d7f07073e0d20787931338d026e53", "1131c2cee492c233c7864a70a1c61ff0867a0a398d2f8ca3e2c6a9a4ae9a4a74", "0b911b967e27236306666d0c994aa91f937ac129d8158ea38214e5ce38ffb87a", "0aacaa54942ff2d5d2816206d5b6870cb1eeb39903dbff1c238f4871e9a4379d"), ("187c4c9f8a8f73306b049333f4656ab78f026fe9e84133c4a4d68061eacf22ed", "1a3544fe76331cf61d319498a9c01e5a792370d6006200841d9b7a086848c58f", "0d0b771f6ab048891d2833e53caa161c25554d00b08406db276a683840923566", "137f96967c5cf14231da7d11aade877e44d49db75c0a698f31223a64d694c5bd"), ("0d06fdeb32d656736070b93d514f74bbe9d018752272cd03c0a0d1da90f43671", "13df59fbe91a433b6a8bbea5cb9c271dd7d0d170c42397f58a857fd695bc364c", "2741c8ae1921e2f71c7f26c5d709c698dacf235ffa999a279d66b8974793149a", "26e13496f6e001926f7c083e5e9043ef26accac72ae97b5508f4fa4c075c970c"), ("2d17e15516eea5072e38c583475d77039ac38187a83ae963996a97ac20743334", "2b16f044a9a8dd6ebc17321601d1e7dc09f87df0b43ef0d70c43389a5d017ca1", "2acfb9ca0d06ee4e5b4427320d41133318ccb2e3304c361a746d2dbd6751b0db", "187cfb2e38a0280ac684d8dc0e1f98070bb9187622f69199576be8032d04a0f1"), ("11f124684bbdcf00b808608b24c5ca4514a7f35a6a78dfe467cb3404201d4222", "273a4ae5221f6f5c26d4d21e53755153a080fee47f5a24b1c8a5da270598d4af", "305167503c51c8cbf01be12e2bbf9b7474eee36b8bbd3341342a1e928c306309", "14e8444f20e8355ea0c059d84da9d623cf500cd2f5af9813eff35a4a2ec41b58"), ("2fff604be7adb26b47a6ac2d01bda1227adca142c2033cee59a695e123a9b3d1", "0d4e2774ca0ad6010d7ece0d9777c8b2fa03448a0a3a1329be1f9c450ed43d27", "05a4f479c871a519bbc4f72138c0fd84e95de77e1a9ec0581268de3b144c541e", "298aba3a54e41a9e937103c48932083a3d3c07ff340a2471009fbfa1a2b2ffb8"), ("1337533ffd8388a11d493db78684d3a5363b8d85ac53dd9a08c5c162d9ca6e93", "21de422c379ddc9425809421ab8359ff8c6b765e8878d58caf1bd1d86d4d8b46", "2a4193b5957923db615a23152e8ce79909baf0ff4a57d05907f7a01e84a1cf03", "2f8df51cd65cb5cc3258b2330955e7a4b04d84af431bd6287ec608e688f72317"), ("29df579607ee6418f2e9d733fd88d45d037f31e15c1030b697d4722c698a2803", "22e1b2a5b9cf38d4eabc5275ea1bf98ffa9e93eb69008390916b59ed7f63f3bf", "078d640da4a7d4431083378e69d31f44fff2fbdd289919454896821fca1ecde4", "2d12c8ad7b9fb3fb2615ef20d7120e6927e25b3ae669bfabcb444c5a22b9c46b"), ("080ec449f4078f5f3ed797d928be9dc256afce7eb93121d2b431e8a60cd20fe4", "07ad868f57983684f2c684c3662ed79992fecf65c192db6513a5edf7f8d643f7", "1a8ccf07fd5116ad02878a213167f3ef4ab7b76698b61410df85208cde3ca819", "1c4034dbbc4b568beb63c78b3855a4ee7b6da8b8229cefc799efdbc5467b3650"), ("0765bcfb3dab03eec8b8cd4524ff49f183ca2f7d3abb134d1f2aad4bd298465e", "2b7065f73fb451134ba692293fd12a4ddb56e019ba51a6e80f64f7832a4648fc", "3060527f30b487285c45171dfa8c29df8ef037b05dfe0815af4325721729e1d0", "2560c115fb2ca99cce01e9c59c176e27a515594671d2f801a7471aa197d0fb3e"), ("2fd67826829cf34b3250dc6c5d34f960e598472552a8b6cd32ce5b511fc3b66d", "053f5a85d7f8bb04ab8abca8d4a7495ee9663c4e1950067da6a34af43e337f4e", "2d8591b3bf8c3a444c8d4d3687512f816bb15f851ab80edb72e8883a442cc399", "1662ddb8213d10ba2a8402d1ebb7d0f9ba91142fc05f90363fd84314f8b9e29d"), ("1c25f0cef1967c3a31a93840c814ca5716b5600158c8e96c8fc20a38ecbc7b72", "0b0d6e31478719b23ade125944b1eb58aa7e256fc990c55b036d4acf8cbeec5c", "22f1c7dc753d20ea9cfe2b0453564ad18c1ff0420f847a03ec63b2b40c37ad56", "2a0a382fe4bbbbc01b369449f8dac7e47bb2316f9a14dd3726a2ef577832ffe6"), ("2acd6ce22890eb02df34734307b2b2fafb35831ce3768ec24a425060f361d592", "19a88aef5e7e4ce47627b6dfba787eb3eb960ae271cf4da54771e8983ea9e5dc", "0f7eca4553322ddccf74ceab15f57871d04da554e1e26bff5c7757c349a0be5f", "2a4dffa9e3cc649147ee6ce22cbe2b6d7fccd7d0de8cb321d5c9f1eef2499612"), ("18bbf218f6cb619e416cb6961b12d356ce858a5e42bd961bf8e94b9db3063040", "130573a9e77e981d836e8f896c3dc28a4ef60f63b0fe3ac5d85be52a0191f98d", "0f5fedd62af8905ae1425192285b6f790247ecaf449800ccc9db26a74835495b", "028c7e24fd8b88f02c5a3ddde205e92e28c9296f63cf9e0185441467c6f10f18"), ("2dcc1cd62df91d340a99a3a801d88a11e0649439990cd2f2bb1ca1b9cc6d3122", "305de3ac539fa6f68fcd091f9f5471f7034718296a089d7419d289b7cb857c82", "18f291957b39526419b41f7d8098902e6b5d40d35dbcdbe24b30f4e2c64f3723", "04f6dddaa8daafb5fd3f9d430ec8533ec3c1b64966051d5f9ab22fea3016d9a7"), ("01c9fd453a88a70587d413c1c69d583e925433b0f613c20092328508c62ee3ed", "28038394a95f0e8dfe0979982438502fab093e3b7bad0296f80f39b2c02fe211", "054cdd2b6136d703c9a83238d5a2077d7a29d1c5e15f1940bb61f2d52021ad2f", "0f0219035116b6fd7023335dc8fcb38bece00b6b49705161007001cfd164086f"), ("1a8f18cf8ecf446c4019b7872f8ae5faa7860b5affef44eedecbc3bb691bbef1", "1f903ee7a81be7a01d66d2de6dc3156496ab8566d1f76885e51fa1403879c1f3", "04d513ff45d1da036b703ad0b40f7f2abd0a983d721530deab7392ce452b3764", "0b6eb746da50bf296487bf580a47c5ced6b25a3d76a52dd6a65e6293d424a168"), ("1228eb1a105f7528bd484a4b44c8d767eb860a3d16b456b3dbeab09023e8ab05", "09e1c48535925397a8dc5ef921fd78212a6af5a28e8b0fe8eaa34accab00a38a", "2cfe8b2dcf805b585f7edc2df1bb8b0da016ebdddfe2f8b77f3f5d6895d1187a", "2fcadaae07c651221e144b1f20bf5105ea5a5e790487ab649b2b802a9f68cec2"), ("104d66ee13a18015237e60b33c3fb5c1a1767230c81ce4a02c7c072e0de2be4c", "0a94ec471a9f38264a39cec775a2d4dfc2712c23b53d123fdc4278bcf0484873", "1c04268d356105400051c07191642c1685ca3715ab81e21b92a085dc5c0aacd9", "2489d7a23247733f1439f174f6c630fc06b1d2909bbe6393550c7b75af227235"), ("091a36a112d7ae5986d20d7161760c626335708f30049070512122148377190f", "1b5db97ba4e496d3711093881f74302de4edc0103657791aa2a1681acb035b3a", "0857d3bfdb03615ac208e3553ee378997a89ab2864b1714825badcf10518693a", "247e7ecb7639ede7b0072ff99ce6ebfa2bf80a6bc23241c7c9c4f382dbcc9ff0"), ("29d44ec2a43021b666320d1524afa769b25903f915cafc68d3d2dd6f93f590fc", "0c02940c70c66ee113bbbb1de5412d5eaa511fcdcc5391fd6554975a88fedb50", "13daf7fe4210040110df77b7e91137a9c50f44da67dd644f1f70d35fc2999a81", "0d7441b90769a94dc9afa9aabfb6a7113e5d47b5d3d8cf84aea4a99ed7d4adde"), ("175f065667735612b6355d9c2e2142fdffdec3508779408cd445855a5b2157f1", "1aca8d5f48a4ce14d0907a76c6c8688272a94d750cc3142c579b56d52d2cc982", "2b272f99a0fe1ce6c81369f37b0e16585560345397ff3bd5c6f81eb93b78bd29", "075a39ddee4497392f2d5ff04287a6281d281b46032834209de429518a437f20"), ("168d1da7ef455a62f312fb4ea65f8e57ee24c0df563fb851827e1883770bebe8", "202268e30f551393a37e2df343a7cd24393fce71fa49457d5936c3ea41ee8bf5", "26d5058606d2c398655791dd5997b47e1c51570ed9e92e009459297e608de249", "20893e5358040925ee3fa51db2ab16fba59e8f848ff0d4d59a7dfb516d3ec25f"), ("2d86c546d6091e603d1d849f81d34cf77a8b68ef9644922562f69e7a06ab7d17", "1c286d6cbcb085b7549bfdfd2861b41b30391d99cd6b27738a432b484f30c445", "2c7d717d056541a3119d8dbc552542dbdd27d35c7c949310ebcb2b6dc4559c76", "26c12afcb5e798647cd0dd35ca380c6c9df6fb26f755343c419ea32581e4574a"), ("03628fe87b5303d797801e0797f753c2ab7be83a00cd77a103cab97072f29b53", "19b03ac969f2e2ed1385a5d6685d930bd0e8bc1e3937ebd42106105fef2e1dca", "0cb576287d81fbdc061a9b27a6c36443e82ef589feb5352d5a7140dd5266a5ac", "0da4eb83242b54bb0bd15ae9b9da01169d36abfe6702daeafb5686592e11abc7"), ("2485b17605c7a566f821478552502dc820f8a9df02dbdf03ae356ffe21a71041", "0e5d11e1241f77f191a38fbcbb9c56703aec6a9141f83da33cdc5b2387e06d84", "10f3bfcdee7dca388c743777c6d8ad5c15314771bfe94568117449ecef575a8e", "2a7026cd82c89f09d76ba2637aac4efdb399af1f702a4aa6916224ab394fc236"), ("01f12876b946830bf3f9eb09d800f82fb5e3981df1a320d98ef55c73d664b312", "28dfbb23162ce54613cc0ae04432ad50d7acd174f49c9cf355423fa20280e8f6", "2b2f78af67128cb04a3ff4a8e7211a3d147a0cafa7757a42c5ec3cf70424f74a", "1ef7733965100969146461fd4e6686fa8b2bc476bc843cdfad0d2168498b6d9c"), ("13e0b775b224c559f9e85e4b6ae06f6adf78f6f9521c8be57409a6082e73ece6", "277564a80099ee28392ff4ba361088151275dd6a53e9a333c5391c37fd856816", "121727ab5d3186399facc97bb5b2f15ff9f019a6b79e97d984485bf98d7161eb", "2d6c545141bb0c1b2aa92b3170d6c5c8a4e8881a54a7b729aec186ed72211277"), ("25a6124782fd1b87132bc0c08397abcda45479225530364450d6a20f3bffb8a4", "301086f99dd82da30b29027a5c3989c0619ebfc6b2be2afa6830a6a6a787371a", "1ab670208cded83f66418b49776e40d09af33c14e32e4fa662132a0ad1cea143", "1bb8aec559e0ad53b81d92ac5b098ccbd671c4fc7d444a221b32f98369180e85"), ("26b8f1502ae45a1d391a77ac7bcab974c8f4b04b258cd780bdef7ce7543a430c", "12f458d1def658a1b77fb5a6a8218550b892b491f4ecb4562a5a663a87426376", "2d53d0ff69beec7ec47f647370e978e4bcac8deed8ac85e56f785e4ef74bb905", "13c2ae15aa8bd23f967e7a963b92dca46695c55b8500da3a8fd1bcacf59983ef"), ("148a232145e734386d1806c8737c68bacd7c8301ca8feb5bd8fdc8d64043dd60", "10decdf86402669ed8956eaa51c8056bbd225502b71c92323f2d08a0ae34e2c6", "1cc11881fc469a726b73970cfd5f05d1ab4ff6e0a33214241942a4ab2f30c687", "2ed254518b6d62085c8376795d67a15cb8a8e338667c33c608102ff6a2955fe2"), ("2490beae31ee147f538f8929bd80d02b9fc39ae4bc12ceeed9d7c6772671864e", "10e31ed81c4847d21d35401010f5d987f129abd5f45c5258e04d0cacc584c5ca", "1260e2ab2ba5004c29b0fd6900ad7cb048173ad8629890898f8b42d69e9ae773", "003e7722c4b27c97a44c3d50d77ec243a530a24ab748c5b07901c0b6960af884"), ("0d6bda2eab38ab974134da1818b10e45b2950f4e5fba92b721f279c3fbe30153", "0b75c3db558529fa07614dbc4d829cdbdeea634766371693070b3bf9ecca477a", "2c09ad623580caeb0747a343d349de1cf1116e8f4c5e55ebc34e1372a86e64bf", "0bc53fa17b26ac4d4a120dd6de4d8aef5971323d551448ce785fd0554288574a"), ("0bf0c38aeffdc4de1ce12231243dd3f182b940218e7908c2075d046a769ab48c", "12a3f1265451f87ab9ade1770c48c55add7a2c9589140bf262a733a76127a752", "2baf6f3a42080f0f4ffb70ca8a2ca7962ce38e23441576079a592684dd663350", "037ffff91530ba2b598f5594446673acc1b1a7193bbd68fdd75782d99e46ebf7"), ("11a94f14f228b0214a9662776f94eec5a874d180c7940376f13f7d9d7c307cd9", "2bc99160ff1590af9722604c7ba2de879cd6429b654fd22065fdef2a2a0dcf68", "049abad4fedbcb4c25683729f93486f930565d928e132a5269afd1e711d5bea4", "07fa5081e60d924eb2498d87771eae8d8bd10b27c906b8e6dfdd48be92c4efaa"), ("0977096dfd66b515804eb0c89875107ff687379d68f4fd0d0522d22714ccfce1", "080f622e81940d40381f21deb9f60d3b44c5f87ef1d15b1abb057cbe19ec12a9", "26d712d43d4a31b36c4217b47ceb52dab681f6d03b006ff39219d55d6f509107", "26e77a8bd562a52cb910ee0cf95e2c9a02623e203ab22fab891008180cbdbab1"), ("2111a4e1e5fee702a7f3e5b33e3bc89f25e51b36d987aa7f8c367b7af5e6a84a", "1e415869ae51c7be834a8003b00af67ab6a7a8f300fc82336d54ba11f4baac62", "0192f85c19a1f70443dd58bdb20fb7556a6dc14d9c924cf9c38125b9c9cbe35b", "2e327f579bb521d2b65a32ea6bd0384ee172c22e38829a3dd8e26912ae4a4e11"), ("0b90c38fed080e130bebde954208c3a52ef97036f7495e6b077e0728bfe8ae1a", "246cd3f31b9073402649266c8fe8f323f22ea9ff5eb335b23742d71eab6eb854", "1d6008e60956ee04ba10017f84048839f8db30649c3d2253fb24193474868c74", "28cb048df558c1e868053142c65a7eaff28e7ab8e3676e6614b8c7c7ad75de6d"), ("1f4f360b3b0251830251bb18629d425cab71237f4685a658d06d45007a70c84c", "033edc3907af5da2581196751a1400429dd103ef3278bd2459081e7af043a498", "2f6adbd489f8a6f0908a8f5c4b575a38ace4bbd21b60af9222fd7662326770ce", "2cf315a371210cbe3b5d9c39c5480ec612f7e74d344662f157609f3ac4a9c930"), ("193dde3d46f135c2e86e2759985ff0e8a3719a72fc2aa9bee14cf63f502b80af", "1e3ed56e81c3ace1259605e3fcd9bab88590f38aacda6bf2512befa2ccad41a0", "2215a07c76bd443bd4cb8d8a5625a14301fb1a7f9723fe511ff79f315d4fc022", "2c30e0628242f846cea4bc48c9ea31b1849e3e57e78fd1d1a320ab331c623596"), ("301610833b5bcc4934ca7758fd05e41c0f3c6622acc83005b252494b7986f73d", "1799aff0039897c4d43a4be24715b1b9ada86f70996e656411b99414591b0a6a", "07b16f9eb4040951a5fe5d5cbc83c9eef00fe7365952766affeeeb7196b6c33f", "0208e6e13340272eef50b79ca38b067b6e841b8f185412d21cf6fa45b69234ec"), ("2095b0684c44dcd2f51859a3dfc2674435579f7af3a86a4509063014eb4efc1b", "281a607a29821835048bd1788171a6fa72c0ee8b661cc4082f46405a0549d79a", "1e6845bed5b321cd660acd4d07b4221ed547d7f318d2141255e0faf25650fdbb", "27ce322068014ed9c51a1dfe7b692997e2ff3ab6d407da6f98857e34604665c2"), ("1cee294a0b33979950764017ab42412eb823f6768625433900ff57d2c42bd69f", "159c894eccc5d95d801be571c088b8aa31d977f40113c632f44b21ba55a0a537", "005e08e0637c886d3ec2ae0707989cb7d39ba968701ca59f9537f2aa5ea4d8ed", "06e1506eb7c77199ec01a3eccdeae7471c24179686b1635a2cfb537fdc41978d"), ("1859cad8837030c0108ecbe48cac89c9823567920bfdc827afcf3dfabc0438fb", "1784445d18ac43d8d7ab16bbaea9217c4ed36ae9ffcbfaae0d1976cf5e67c20d", "0aa4750c1cf7a629d2a80c3f139054914a46aee1164cdf9fbca389457a1504c9", "1bab009652c9013057f51a5f21f943905ad2e5fdaa07fb483e88d9e2a6c34529"), ("1219cacb4bdd60d0910f17e21bf580eeb926f931ed74c98d6e84a31ed4b5f770", "01b6fb89ba113b3c83647e5145c5adb07cf3ca69c43526f777ff2c8e05d63d9c", "09a2a45ace02dede804c692a854e1aeb1586f6755833791982d5751b3570a032", "29b5f1309f8160639767d47ed83f91a8c12edebcffa5e3d24b8c5b5f7ddeb956"), ("30281ec0d1782d7a433a463de420322726a114ee0cdaceb369848540e7e6195e", "1f5246bcf8072b0aaf1e21f51f65a5198e379b83e406bc71b8906fc3b27aca30", "2c3c63147cc4e144ea09569fc617c335edde7a6f821a6bc293e1c45bc036c92c", "1b2b980d5620efe4958b6e53446f88afefb738749e722ba90e6ea8c5831c98a5"), ("05e221fb1a6d1faea09ea09269f2ec4a5ae348282a7d9519f3d09920fe2dfffb", "21eaf2a62e38f52944ef7ccdfc6e90487e3f7ffa0c8a03a8a7aa70297b49385c", "21892bdf4892b4297d1fab5e599a6915051f02626c94b0b12eb2fdba176cc53f", "29704f2838ebc8923d4350231dc42e9dbe290d23460b3ee8a0ba749ec7b61d0d"), ("26a9b97d107d0ad51680740ff4bade815e2dc61bcb649cefc72dc69738147c76", "1d388dd9b9ee3a06c090645ee2970ef4c98ca7632c66e2579a55429dbbca7723", "2c6a7b19c0ff98aa5ebf87e840a789b3ebb9ed711dbe1f86e94b14f5e0d4f013", "1e7e683dbd12fd1f4b0a1e60afa2597689f1e7f11482231ee48ac749149d8c7c"), ("0864c4c66f72372ce43394b9f2313c26ca7ec9b2af07042268de63cf702e1b4e", "2c185b87751d84c169f80b4d8d944a19aa4f4e3f5f4af69f59f8e12400705b19", "0eb0255d19694b4e5fe1df1c55a67f7085df670dc75e3381bd91bb4061740508", "2309d38e6cb428bf3a883c132da19065ab15267577ce740981066be205d6a8bf"), ("2e324663b64bc10c489ef125d1b8added0a731003ff374220a67fccfd49a5291", "2fa4d44e8ef3d32352538aacebd5ec189bcfbab22767ed5b670812b828b02e78", "2bc40693a38626190d7b49fb147e2dc1ca7c5d8c4c61c26ead08cf185f0c4bf7", "17993f39bc2a5cc83790490f181dff8bf2053a90f7131e5faab17e26b8318f95"), ("24d31041490cc394fadc4bfb52abf22b65a1a92d1501d1b0e4990ffb8cd4459f", "13aa2ee39605ad6050ba4f6766a0a5e2892f093801fb782c73b4a10c244dd896", "0738cc614c4c1d6623de492ee3ea89df08df70c684ac8e98b62e486ba876a159", "14184fa609d9d924d7dc2d9f0981728729e191b1b5121f8b0a26ffc78263b47b"), ("0748d4cb38227baa67fe86fa06c4d808d3ef07f063e4bfec2ecfab8e2dcb23dd", "0be1924935eae2f743b7ca9d14f1320b4ccd9777a6580825e34fbf3e6dde9236", "0ee343be5b4f41b05107dcc7be24411cd72fbb467f47337f56951648a8a81d7e", "068c5ae18fbdc8e9a9d4d6c3b79515f7ed1bf8e047cb33056c6feb40417ecc84"), ("1351dbb18455d919d9e2695cca719d05d1279ba5e657d5f16d1fa353c6f1f31f", "0871d7230f784341c4fbcf233aa9fc05c35244381956f39d9130f05b5ca981e3", "12d6180c3f3b573c0ea668eafe71f8b436515e4a704266d5df5538b6ee4f081d", "19e97f1131cc28a3ec4899395f57e90c64da84c9de6696e26dc96a3f570b9c91"), ("20d0e56f8b4bf6f53fc55a99f6dd4e698a13793072396f7c0f725ec4247b1fb7", "044de82f36f6a68ba1dcf777432d2d3767cc267d65ebdd8e761db30aab66b391", "0e6ed1c38e29eff7019cd65c61ba9fcb760079726e70bd5befddc952ee1d2f74", "28ce419af5454524e56e85a73847d3656c6a21fad7fae38b893251ff2aa4f208"), ("0cbd01dd6f55ab53236116e2073b43240d0a898fced4fede419d5a54576c2e03", "11444c209af68cb7066d2ce0e8644f08ec2879d39634b356c79f27f565a180c7", "1fa307dc4b945a81f512b48ffde0214d09c1f9111b9daa909123ced496a0eacd", "2e7ebebd1817b5601a5abda036984838e6da781d087a6cebb7a188de06c42956"), ("197ff4d510bd3e3968e7ac6ad8f737d5beb7e48fba74c6f08f84f35a2faa151d", "0e14926c4f6cbead3aeadc3a891e939b7e2ccc4de68a8273d1449492405e0541", "18bde5575a831ccfda4b71bcb5f330e95a7afec9bb67b0180939fbc05ed95e7e", "1ba1d1d13e0738782114ca3de7f3b0c644bb081ee0f188349462dfbdef4a0360"), ("11d8864fb90deec8dc9b4304a8343567d998c14fd37db5e3bc3eb8f706fda102", "0717d947728e5ff73916f0273bd9edfb14bab5e50701817fddf6ab235a1864fe", "0dddcc7bd3713f217778149d8e777042e8ee90e8e963b48bb146cdae092a0135", "2087c137f2c5c7227ff29c355cc17693e9c5f8d5e7b13855481913e36d23146e"), ("24a1545966a4ada1960de644333b5d1e155a1b23ae751718e4aa32c01a70df44", "0caba3ab919dbf1ff36c143cce0b1f603d10db637023e82f508de616b822a915", "186814df125c1931b1952efaeb1b1533c7ed512cd71e592985df5c68d4657356", "277fc3d43271643673c4d36b8ca9ce7051d3c831e363e5ba72722e1b27096366"), ("00521f2a0797e02c5bd90f649e3f71b5ec8607724582a5d47c28aa5a25d26d91", "0b5ce765c523028ff39fc2cf261451abdb7e0de01d4429d7f7eb187e7ae6318b", "0608709d28148d600ffaf186f5109fbdbaad17ccd8a36584f15bfd87315097e7", "1a4035d09d12b3ada78bbafdb96ce3f9db971c6676943af6222efd426c1e16a2"), ("26c9cecf867cb0973faaf7a63bf83b2a0677ec23363d742953c528b8bfe7696d", "1fc352e7e2a6172341ae845c6032e55dddc612f92e4219730c91f6fd89916bbe", "066af8585bc0bb4f0306a4c92c9d34082fb09264ec7996f56e03e20c97c15c22", "183c355822d477a0cda0c2d3ebb40ae0b968b6dcc63bc1ef0e9cfdf9d2fa3390"), ("22453e1f7d9586a4ed9f390f57d0dccf75aa24b7a5486ec9a4f76e06e07f801b", "1077edcfbcdbeef5c390831f7efbbd01e545257121a77399ad5f6acf0cfe8b70", "09bb4dd7224acd0eb0d75810f77a5c72f6100253039a6e99c5836d36e448d0bf", "04fe928c5804061bc1ff516f3c2e9664015610533f0023fe7614756874984e5a"), ("229c6e9ee1d41e1207051cc06ba870d4cbdcf63c090ea8e02d85405a7d5ee579", "14d6b0eebc86f780d0f5f609094affdf22c18e6f0a1dd0dd9fbb2c12bda93854", "2ed038e4350768dd0ce50a3cf1af566c435a9b56a5f165c752c84b1f002f4307", "1273f665710fb585838c4dd809e51ccd9743dfd96799781a8d370b4791676559"), ("2aefe72b49c2b2e4a31031f7f5f9ed0407fd0cc749380170767dfe786dc4bcad", "2469b5cf3ae99ed24ae61bfa07a69ab7e425e04d73555e6c2070f75ecee310ca", "21982b9f43c11a57bba46e598749d64eab56d8c2ecdcf5caa35714a5dbb590f1", "2b9e69297dfd665eb1ef464a1013c102c88c239818d96315fd5479996fd60552"), ("097a0cd8b49ecfb6d56a785ddbd1a0e15d8c42d11af34b4105a0cea5a6ae1c06", "0710fc38b23d16c072bd04fc940d174d2585b723ce4d75d77b9d1d7116ab1451", "2631f5d79dbba5df999b3a10bbe77179d891c441e1ccad9331e7f274d9cf86a3", "031614839605486c81f119730401bd24970bab1df5411836c2d3370a49e7130d"), ("11242f350e4899eaa7d0efa325006889ed7824b1dd2800d768d403d344e45849", "021ac7d54efa6ce98317979092b8b1fad76dceed6a8af08142545b2a47b94bac", "11279be8f7f2c75742e8bec8d692bb894f28ceba872f6380906bb4cfcc43c05a", "21a3fd2af0e57723c9a3413c0797ed37d7bba0c32809a1d5a60115da0b6a3c82"), ("11fb4889e4335a3558d1db45334a6317d4e8963b3520d305da67da24d49ba279", "2677f094da3f07f9354994af41c5b919367688934b9d72d2e5167f5e75ee7929", "152df1479810e2b7566161ed0df566e5d10d27cc5a67a0504cda52544dc01fc2", "09e59fbb9ffa8fe16fef7334e2c6773cb3000e7d42a555f29730d79c65c46ed5"), ("1af6b2ac16a11ede6b6a3c7823266ff355746ce381cd15f8fa0da10adf07dd7f", "20ed68fd852a082d59949a3c66d0818e09fd389fca1bc9b829686fb66e8b8e42", "28a6371fbcb0b23ef11c514a7c27decee925297887cdc9cb2d96703c4156dca2", "17bde4ee6ad6f76df40b86938761b290be6f30d38826b430fc0aa84ea11b12e9"), ("2e82e4c3de2ec45af0902f723be6f8a817cf0e6a629260291bbc2b7e1b2a6696", "1d44c2d25c572f961284c09d6f62e205d0fc9b5fd86c15c4ac8417b05617e228", "29ab73bf95b87d17be82c3db4a76f78161eba37bda364547ce5d51feec968b0b", "26d2e312dfde7250cf396df66c4a2f7851ade6248a8212dd7b11491fc30b9e93"), ("14cba736af467088d8de131885ca574c120bd9e41ea7804902da8fc93e6c09b3", "1af62bc46c99605823b1058204eec3b4bd26b2b6e888fa59384d2dcf4ddeccf8", "119a576aeb995303c6ea3477288393cf7be46ac96289cd0f4220f242f0f25bcb", "198cf7e1295f53ab2dcfc8527899a9c9b9375d5bf0a67d30fb8a6c9172dd2bc9"), ("2ef4c9df6a9a35439c66514f210f52762a87dc0aa3f56a331e95940a0bf2c14a", "18466aa72b23a6a47de5a2d715c4293a23e3daede96afba00d2e46d6556d9767", "27b5880c1f88f888a541b5f4e1b8e867bcac9f2ecf8b74e8bbfb8899205b3198", "04429e1b1341f011317895328dd996e0af87b8a4d974613413750254f9f9255f"), ("12d539204b34a9989c7dfd937890128f9f95db0733d84a0a16135da59d954c73", "209487df5f260dc68538c7536b610365c2638bb2b1c4cabc743b79c1aaafbebf", "20e1e2dfab61f6a2ae90c554a34c81895872ec0927736b5ce73dfac9cf367282", "188499bb6447089742deb92d5c167667f2883c58571acefa2c2ca0f8375f4146"), ("2fc720ec970b9408fd69df4717c96568ad3ebb98de60c0bd86524ab4b1edd4d5", "00d1231d229763aef45d3b4d5e2f6d52fde293581d6fa177049c1432dad32c86", "25514cdc2280e865a333d95450d03c889089387530934f3b03b9107bce0c43e0", "2e8ae45f44a75aba1e65421708f295bcf5c854c43fc2b72c34a1da46c65fbbf9"), ("1139303a38487ee8e65854b1f7d55accedaa1f0a874ec1391cf9bf903fb7a6e6", "1542f5669d5ed9b2079f79c16fdf387bbe9918ca490ce20d9e306b6e4455c327", "10c2d2846f651d624a428195145e14ac79afe033dcbce60598863d33f0691d1f", "1e182354c2d071c3290a6f8b99ccef8935646fa9b017d25fbf80cbb4e26d3c30"), ("2bdb6d3011ad00776edb2896956753365e96d22d1084ea3fcacd91f775aae467", "1f49c6add83429cddfe4ba13998270b031e73fc8c7978afb8e3178cfe08a6cd9", "29ccac319962f205e9b908808a9c0436c8f2ef63b4816d407b0f08abc69c8979", "0e899a35269f2fa0a1cb577d3c1238937abb98324cabae073f994199ba191968"), ("0885f27dd0a28ff3ceb209b6b88c33b66f351115981d0c964fd5b0faf77e6b16", "09ad42ac9e4d5d70fe277023fa2c6aca364df4b0b7b6080539775ad1c8e9ddf6", "226c93fc28e4595cf1acec4e580005cf3ba775856a9a617f1ed7d94b03eb3106", "1e7f30bf5fca8dc01a7b618c3f02cd643074397c9f25978e5b37696fc448f1e1"), ("167a60972487b832a98ae390c6d9438282fd8195fca9776149818a128f49c125", "1e96a3ebf258374f02a59de7dd83d6d5a54bfae5af8689094e07c691ddc17611", "17d150055e43e80ec171733d4306b705c4c2614588edd391a713cbad5687e3b1", "21802f184e18d02e4dc6f75077aa6a5885e66b0643824afe460ccd9b188bb94d"), ("16f08965354a993b88f9e45c0bc126674dc3ea99d2d4569c18289ce9f5a9324a", "0ed937a282637e6b17400ef30578f0bfe7794719a0b198773b42ce741a71daf5", "2b82c4f01c4fb643c1d882a51c1d8cc800b845f70d731f22963b19a9c1537ced", "14cde1796c5322886bd25d83581ff9554f0632479c5650e1e90c840322db3b45"), ("2b059ca79067f2c76ec4085dbb47cbe934ab1e7ed11a794d1ce300aac2b42b8d", "094633e1ea1d1fecc9702ee5d4f5fb24d27b22dd6b4b56743dbedd3308a32686", "254e353400f0fbf51294577762272acc52484378c1d3db69d49f588fccb4c691", "10d43187de435f996062be050e42f47150f7d59d4b1644d6fdb7f31d7780312a"), ("18de32644034a56a4c2ad5e0ca619ac899b689f1e3cf8d451901fa806ad59315", "060d304c75e3d4d8cb3c11e501815fd5c087cfd8f157c3fabb65192f9bbbfc0e", "13f7a94ba09a5ea2c757c2fe86e7c855405dd00d936756cef289502b9b8b445b", "20ea7ccdf8e651abcb63e47db9be6b2c99e5e767e2daa45cc954ff197231560a"), ("075ff15e54c3c077d5787683eafd35784ca55474a45302ae3224d8ec3541ed06", "112ff61ee38a5c683c9c0f7d47ef00a24653ee276453ddc00063a45b6149922e", "2461bed99137f29dd7115dde5e32db8d9fb5fa164d0119778424c3fd3a51c740", "0011bff3209bf2f371d7cda6db0c982cf8a4d5d8231e8bbc5654fe0bafb04130"), ("255cb80ebbf60d757d0f41897caaf581f9da28bbccb791db2be8f0c84fa4b9ee", "1edd8dc099ea07cb38bc5baf25a17898bc2729acf30cccd41acc6a31a894b7fd", "219adf7e3b861495d9f17081658fe9c0c6c6803cacc1de5c01d77bb3c7dcc1f5", "26b809ebf6226c303f6a7694e486dd6e15b37cef6dcee0a190e22922594c1d60"), ("190d7868401023b6f25c6d79305d938f10bee6d9c7cfbde3bb469a78604105b9", "201d5adc3649b224d363f864adfa65e570ebf8ecd0cf200a96aebf948cc1a8f1", "225f87f32c1b25adac0937cc5922e59920ae5b671d7e40233a06c858feabc924", "1666fe96ff56a0f2330024ea2433d30f3cc180e6a59e0a6518e34fc666f7a0ed"), ("09c0d5ffbd05c161015582834f6f2cc0e3e00e379ad172827dcdadca74449e38", "198760a3690667de22b0314897a1088ff251eea027ff3cb65d119d746ce5bd94", "2f6c9ac9fdb6da9677aca6ed3d675c3b9b677783372cbda3fbc434afe14a4a79", "289334c668b00e4d9f3818851f05e9e8128e75e19f8201c32cdfa3ac53e761ae"), ("1adfd599ee7dc12fafb6e1b7b2c37063a14384ed1141e6b4c245e2292641edc8", "1a1b943a7a7356a60e8303c31b3ba46a6b4c0721df2018b6fef626e2d20ffaf0", "27dc78d91422fffc09e4dd8507d02f1a28ecf63cd9e0bd339915a7287097bf83", "1d16bb59b4c2ddd9cc758b0843ac4064c991b87f6f0881d6d1b8d3bcde56b7fc"), ("0a0da2a95b770f0a158cd105c88176d163bd85e188797b95f6445ad54467cdaf", "06480edc5b0b2339b1f06459e4c52f9a9d2c69b014f211c119f39e063198b3c8", "080ee987a73523528e3869a9bd04e5326de664e7e76dde3333db240cd98ad08a", "2768f569f5c4484651fd2d10310a12aa0ed4e96fe895f65d2386cd469c5b2a19"), ("01664bd7d40b94c154e94e520aeaf656482c570c9aeb36731c08ebe1988074f2", "1d8937be57c474e0b4c2197b74ad72e316c6146e95591206b5b4c71a0079166e", "2e67b3305623065c03269afa819f11b114118e3f2a16818c12bf22c063413c53", "0f703b0136c897a600f942d06db79ca05caefa4c9a98b19fbf8fbaa5571f8210"), ("0e0dd3d832815e16db80594bac7b8b43f9fe8dfbe97c8409c076ed849aa11df6", "257d7768c9b606f72b2810099b4a82e479e540a64fde336c510749f3a00cf4c2", "145c4aae6f9edc0f4bbdfbe4fbb0d9e3cebb3e5c9d96787654c935eea6f38ec8", "03b5ad0ff7e3bd5cc07879435e60e46a644f42a877de339dc47c4d1695f86d8c"), ("009992506e78303a770a0a1857eaa4fd31bd973e9529f73db504dbf18f280209", "2bb60ff40eee5fb1c8d52cce2f7960fbd28fe5d998fdfc8cf78a20c3bdf9a787", "163b4ff93b8df24efd849f4c1d8ba1a21a1b2dcb4f1282172a62db87f0083839", "2b5c98930a6215cb7ec3078bca547b16a5bf877c71fe2763b5ab77f4587bcfb3"), ("076b43ccb65069b8e0f8fd8f49d7f595eaf41944b224d5b660a764a6a9dd5cea", "159a7391533c5ac465f8707449664efb0741fcaceb1207be9d8ad1a4290b2f5d", "25af558bf1e7e3405b03cfceebc7f9c892ea5713f680ae30f318358475acf660", "0eb324019bd3bc8c809d8bb4582951f746c1d996e2b7bfadf357b3837a27cbb1"), ("2511f0e24c9a97546563621fac5e284f0b84d8316fec72587aa0ee08afc43d85", "280187fee7cb2bdce7600be55a486435da3c26fd275cb4cb7292440400b36314", "137f91617f2879f15b8806ed75196113095b6baa82dce0b1ffd91d9f450de617", "2280165a6738d03cca64e45aaa34c3ea940a5ea813d5e0dfb633b45f68454e55"), ("26a930b4dde54b90f2a7bac105bbf66c26048b8453e9705a7f500c7887446e08", "0d2c1663dfb5b76e658684a3ee63a12783b2fedb858b5b4e862d15672f0272ce", "2749d7ef60561475fc444557c5e24814bddd318c2ed937763445443adb5e6cd5", "14244a751f663712ad61843064dc6b3a876f9e5346e365b3916afb74254b1afb"), ("10ca02996cbc1d0dd7a8efdbb5fe52e12a34378d915d7420e2e801b5fa1b31f7", "0bb688a933fd518e15bf712db19cf3b889d00b505d83809a98a08f4610d191d9", "08c80293585eaa2ac41b2f6830675316aa480fdfe72904200e844cd9eb9a32e9", "22c810c3c354bae6319762d305b89e1c3f1a0023bdeba37dd9e43255d61e2680"), ("0cfc05bb979dc3572df2dcc337744f060e31c1d9da79f81bcaf227db74cc3f61", "2ea673c94e48d22553977349acf999087211791fdebf1bcc1d0ec8abbd7625d9", "21d0ea38beea7df3c32e3a20984db67e70d130b34115af0273228b2f8c3ac709", "04f13ad282589b0f110c19923ec734969bc81f9022025d1a814ea09f0dff7eb8"), ("1afd2f1a4205cb6b7a180924ec5a3a2692a9c799535f20e6d43fd5ba8a68cf70", "27826a194d3e598a8659037ced215392e9e249d8dbbc0d960f3f59877103c384", "1c3bd6c3ee31aaec3837f1378fefa49a4fc082bedea60aa1145beb762cc64d59", "24e59dd324874e5830934eb5a34b3c391062ea102eaf7d61ded4794b281641f1"), ("2b89ce585b790181fdb9de04285393497f282c62d2889104ab7fedbf5a1b7ccd", "24eb7de6cbdf32306a20003a85212571cf818941353093be8de9aaac5ea1b61e", "2c645260c8ddb29225c3d5b54bbb173f6b1f4f0940f780da8ab0748b7f763597", "22ca9288c70223c88517e101c04674882c3183914453fb11034875d9df7179fc"), ("0c1e838a27a3008a4cd1d391e0d0f49257dceb781f71aa532c369698e59cbcd9", "1f9e15ccf60f238d3128d3f48f99c63eb9ae014b7b955f7fd31b4c7bf7bf7ffc", "2849754e78ac2c9e245abab173fb04cfd7ada0901715a927065c4dd3b0d73327", "1eed29b63cc2fad9d456785908ddec79ff2445dd6b6e3e9228aae00685994258"), ("30441f3596a9e1416fdd58088da009fdb37a4945a449ec1acf51826c087a838c", "097ba49b408dafc35c614fe68f05aee94ab7d6cb11d41f8ed12eb03741b00783", "231c1999e6d4d7f8f26898b9cd6736e093d6fdeff643dc502ec5ccaa4973d700", "2af629cfe433174d1261330d928ee1fd47932c6f31e198bf60decaa56f86d986"), ("09cda701036ea6593efe643ad20be01c5a18345f2c541b0d05f26985e110621c", "175281106b59f6b725c11e8a3f3fb9a8efc3d1b5b4969dcf800e64c5de037081", "2cadacb29a3a0e8daf77725e4902b3633515c098ac33112306674ba56f28643b", "0e36fd2c43fa19ba466b58f1514f3134ab90fe3f9fbe4a62d0efdc6eb850bbfe"), ("005a9ea434c32df23aee0eff27be4950ed0ab834696d04e849120a967e6ceeca", "09842317e3aaf3fec92513c0c9de87c420879983e7515dc5d93e0c99444566b5", "2844098469cfa37d9bfd189ed229b99a1ef11424bf67f3b1c1d45396157ea568", "27a6b985f65f2a7aae515269e0317e23effeab01c33ebabf8bc377aa6756b1d2"), ("08f33b7665c089542b4397d135c2b0dbc97a8c9a11e6493a92ba3a1b6162aa7d", "1cb0e06d13bd0eb6d06c4ab31f985d50ab3f795b286682de361f35ea5e836662", "0324ed17859618d65aea72d82ac28301684e5eb3c6d7f58550c19fa2e29841bf", "203264d83540b1b32ffdb02b81cddaba365a12324409e55a25988dc481229da8"), ("1fd978f5c19972412847d4ffad41080fcfe452f4342cf6d35659f2e74a67ecc3", "068adbeb8c769af5c67e942a316ed9be7f016b29b3f463571bf996df72281db3", "0fbe2e08aa1e948a01eb08eee708d368d1ecf12b459a77435350c65de6d63e02", "1b14951df3ab40a96d7bdcf541bc79db13b6df4a28b62193eceefd086027888c"), ("216d02082d916e9802b8516cf65e5989619214fe7510e1830d2f710ede522a04", "1ef6f2150bc861311f0cff9fb67f3e97f0dc63e6dc1667ab71fa72d9d1f2ac50", "1ecaeddadbac38e4bbe2f5ec676236d6a2affd1a9fcf47a69f666e92e26849f7", "10804e0419e55448573f9d0a96967432087a07f20c3387f875c27132df0592e2"), ("00aeb827ac4095130b751b65c4d78e75589720cb92a216a97732b55b5ca7f62c", "20b5e2629a6f580b75592f414a0bc2e378b94cda6df3b4f92440b4fa00c5860d", "0ee27f47a11e9864170c1e15cbd33c0c1a852e4f85a8614e23ac361a61a7869e", "1c94b93741eebc17ff38a2d23de333afbb6a5aebfcdf1d21b52e762cc71587a1"), ("0dbf1fbcb1422c63f5c47d6082291c05e477e010bedfcf16675c734cc5563fe6", "072733f37be96cf6d8a43f69c8b9d0419eddc651eef736d996c300527a4164c3", "25b2f61a07cfeac2d4219cf714139a15a47a6951841dd6b14bdec802e25d14ad", "24bb04d92c8a6d21ae3053ca1c051c2091ecc417252cabc2602efa93ffebbe7f"), ("099502ca20606c50b8a227c4cf09f434792db89b2670fb0eff5221b7ccea78e0", "09ae00ae13b8a707171500cb5a548d2aee6e9b168155a615e1162f00e5455fa6", "12b26e7a48c8cf4ec296b85b84609be33901d17d581fda4e1afd4ef0c2bc0206", "25063e2c487a9a9f5da9efe9dbecd875dee5b5d0ce83fbf851db9d18cfd37039"), ("2f63bf91c1cd68c306b00729537d38337b8d66af04ec40789f9a6c0215a35c72", "14a016521540a60de51db8127f91d090eaf668d9d7330a84f52575a7788e5498", "1f49857d8d74a3dc8afd4ef57563f1c0743f661b4d7b36f8674be3f722aa9de3", "1f1e03ab036c82b5125502181254aee1a0fc9c08abbda09c58139d35d7d3a77c"), ("144a183c3d4fe124c5784bf65adf4bd445ce94d254691fea259101478f8cfbec", "009e64d6ea7a73d2832a5e6e358ff2e944292099f8ed867c8ff436601f5684b9", "0546c5997afb615de97e2cec57c77b44c816a6e6598947c6add523bb2859163d", "107d11cf6a7ecb1b35ce51196005d3a91a44c256293d30bedcf9de8763e601c6"), ("12add423c906d5b29ef9c2c7d9b8c57f26fb32902ccb87d1a18194522ca1e105", "2adda61055816e0ed16e9f3cbbb66cce350da35162197a7436d2859bd5698f09", "1824305e06058daa27ce7de66d598374681d840aa10602d4b2adaa36153a089c", "0f41d52d055a94ccc1308946012fcfc8e398784180982d0cae3d4b55c5cbbe6b"), ("14bd62ccee6ae5154af0bb916e455d840e3eafdbb5e4b53da8b3250303a6fa0b", "27d30f575f426d6649145878abc65e8ab34b6a6016fb3d4a2b251470205408b0", "21f5f956176ba59215f7e1f86dea03dfa612c08d90b7838fef7475dabe38847b", "18bab88aea0fbf69154d247651cf17ea66f2fa11f6597421760a5fe90172d53e"), ("2c2f1cfe459768a2b6443660f6397c679a12d512e867eb823c903b706c9a7ed3", "12f45f3857fbc653d336865fef2dbd7ccc4e775a68a4aecce6758cd76c2ca5a2", "2b66ef78202c833f2705930c7af9e5e00fbc924246380e59b1640f441a35409b", "226d533643e017928618ed18c08fb27c35aed4831de9fe011dc29f1e9e4e1eea"), ("108fcb3757f36652c64e2fed7f3160a514c13327fb5d1a9e78a7372959df7807", "0bb35a0ed3e1f9a04774a76227cd1067a7d33488148017919e95186f75a84a62", "0bac9a9b0424716c70ecf1b079b1fe0b0180780bd46c3c0d544e1bde40da2445", "2facdbdc63be4f49702d80e874177aad6c939227c46fb54bb6404e51c3950ac3"), ("1f4626a427a8af160db80fac1e82725cfe20d657aef169d6192ddd848abeed34", "1f29eda631a55fa41799a4b59f951bf21517f5d9bea96ca4874ff49048b91acb", "268c8c2b638550aabacd3f21c8b1fa6997402abc7bf3df1fae793bd76723fdd7", "09746726aad4311de8529645bb44e28b396c9e9764ac5a709104167d83a1990a"), ("162f3d22b2c79d7c5a8999f38cda501174a0eee3a5de1bbccee816e539cec98a", "06ac134837fc713c2254d57d6a1c615fb58bd2269221079c858d7b520ee5b01d", "1cc555d6a5c2e3c068ab14c54e8ccc4897168e6fd8ed8b2a0305f844d6b480a9", "02e65fd39f0ca6d80fcd7cd561021331c298072cdd18f9eaa60b1e42f3de0d27"), ("1cde75f7deb8ac1fac612e153b087453536279c901c78a3812cfd528ca404ab6", "0bae9b43417db5511404fb402822555bc7409670adc3b345b13f4a01974d60d9", "1e67be53071d0f880430e508a5b6d8aa546a9635c419195d6805665e52ff0c45", "16d371c5c5adb075f0a5732342f23af60e4a0fcbecce705c4564d4fd0d9947c8"), ("0ca3cb6c66376cd4005b3ec802f0b93ea56ecca424db385e0f293e8e701902b0", "24bf6e1e0d92ed9f928175f9b03dc96c463e988eadeecade05d282d44594dcf7", "0f8106c8f48deee0ff67975d7d125355550b6efd0baebd53dd75d2415856ba85", "1cc7bcc57a7517d47a2f4a456c7b9c9a5e1cd27dfcfc19bd063281c872abbb47"), ("29850e08e3381d4fe653f3cc1057fc2796ed1e85a24de9d317594623469952e2", "2527a863e825a60c06a38b12962f326c7dc2b4cb4782c34d32002ce74e88f9e2", "1f2a8f781210fe767c30a44b1a431bc074b7cbef4e4629ee9174f3002ae38185", "0993916fd85369e3235822da56bc2bf6bc73b173fe73ef800c59135a1612b9fa"), ("224e7a80b775a65e685ff129d58ae46debf6e999b469b16765ce7a4149728974", "02e0bc13dbaa079c9e651da0711074272b00b3c3f65692b55b2876079a067857", "0e3761f3bc30bf437115bc87b06024f1ec6e3055f6d273b4a6e9d21031727fe7", "2836f584b0ab78f223e454e125d8e7a0e62cbce9c78da571d70b14b33e799b78"), ("257236a9bc38aea6f641ca373871179fee1cb75babf85bbf4fae67b69c81e5d2", "011de723978d3fddef0a5d806840f8fbfd87949fd8a76f7268fbfe2f67387230", "0eaa8cbe0d8b296aa3f7006ca932ffdb5ce05880b6ca652c847a83b79a89a5ed", "19f7fe6d3fb49c50f58efd70e10a795178fcdf1cf1cdf3de16875b9cb4244c6f"), ("0894346bad502683569b9d378a73efe6b16d186ec87011875159fd552be9c21a", "1ebf156eddd1989b68b98042be52d1f27fe7366abb6c4726804c3c8a2876bee2", "22dd5886b6c9b761cd1948b057b2edfb24cd704996599ddb93d84574551c9b16", "2690dba6690ee7eca78f972fcedbc02969aa562a09ef234a5d1d2d077fa7dc5a"), ("29b9fe2e245db1163c97333c3183dd88ffe16052c4362f5fb17aace1fd184cee", "08dfad3a8c56fddf062603fc627c4cdbe9970f8b2f606ae299bb4a63cd694547", "0fff62c9ef62756b11e5fa71337848fbdfa971f714d40c696a2a63103e952bea", "07431f47d3967655189e510709fc7180050bc6ba5bff705c89b4bc2c87400ea0"), ("05d4b58b5bc474d22490b8f971f39fdb6f8796771e1fc24b631365d51efff44d", "2f33ef329978760952d81b74fa58483ae59f54e9a3ece9cac86e96213dbbe488", "1017580731d60d6f0410e1a9c58e84eba1b23b88dd7cbca7abe0d64e74d4a2e0", "0b58b0197f3fde99aa3da6b2cf72d891ea3d209b51b96f43ea9f0e4c86c4a7f7"), ("28cb5ea387b9f5faabaf55428b7d8100c0646bafbf08708dbc8a13bf668609cd", "27bdc5da92aaa89d1d8b19f7efa56225ffb94100d6f5fb0559ad6ba65eb344b3", "260732b7536740aa577ef527889c97ed92298af5b92e42343cb4f7015d58de47", "272a65771639831d350b52ac2e9660bdb71a0ea497c2d3b15a5f640323507673"), ("2cf50a60c4228700462ea0b99c6bbb3d487621b290373df11864022e01cdcd44", "028c45392e9e681c11fb5cf9aa73b96c1518580700d990cebc3b4d2ea132928b", "03fd24e88fcdcb8f51e095dbb5119b4520de8c178cd7b26e9527a233122dfc54", "2370984cdaf20076b791e1c77a77e949ab468aea779ff4442b7fe94a549a592e"), ("0d0026620f2a1ab327b261d639d59a2d5f744a803534434e6f1e701e17448f3c", "076f091c4d8ce4266d824576f1cbb107f0f1c776b38f72005ce71eae29f28c58", "0c63c1b463ebfd7a2a5813d2d4e306cd81cacc16dae1a2be6671ee893baf5231", "1ee3a52ec26e8f04dcf4400279166cc439f7eb6291ee911636869e71cd203984"), ("0afb3473f9a1f546055d710b930e72a8673ea49c12a45028bdddd30b9b5ce13d", "26e0d872ab51d8efc70ef20fb1b828e09f5ad9a3bd11260cf115b7baf933087a", "010722d004f9808443910e7f4b3f38ea6e807489e1062227a635511ebe2060be", "0ffbc4d9bd77d4a819b883f81332f572ec7e643c702f669d89aca0f6298ddca0"), ("1aa89976f790e94972dee12757f11ede48dfee70558441d5566588f9b27b9e5d", "01980d703618c743f8548341fbc84e19c686c53750b37283e96b6fdbf5c6e529", "0476d583eb1fb9172e506a8f0205d8b806501431477bde94f0ba38c91f6c5536", "059e204b830cd437a70aaec1617f47d7b3bfd6485ca9f02be2b4a65bb09f9920"), ("1d60baee8a72606f76fd1e9ce66f5b305db259a2295e748d3a8f798b386f346e", "136787f20ea19792b7714c1f7b4b8d5344ac8e3531cc16905a05042372fb5b09", "1d065bdf9e6cba5560d26781fb4a666abc5d09b79e4c04c564d2548159ce8104", "0d11774fda94f9a7c381a1cc4d6bdbf7df8efc00e0b5dc11a0f72f9f20e982ee"), ("0490dc631ec8a25cc461d1f68a0a1058db8b202a8d82868ef7da70e9593bcbcf", "076ff04197d992b71d409db99b054a77e3da821948402d32e80490d4e5882f49", "1d1fdb42d622f2b0f716189de6484371225cb78eae36d556efad5e3ad254dc19", "080fc693027d4889da55ec886e271df5c01ae7eb0c98e6bea654cb23241c1792"), ("193a56d4ca6df17af6eb83bcb002367329d493f9aec2838d0e9ab966134ef57b", "183df846c0e18a105047f945170c2b1a41fa14af2fbd4176ab03e68e9e42b11c", "027a4847fb5570356a0fdd0b1dce885e62824f22f45d913cb892b476af0dce87", "06d95125e71a123de10dbcb4cc1d9f8974f48ee098125ab0dcb3c23dc89c75fe"), ("293400aa7fd4579a8ab630b27448991ccd6a5added89068e7fbcca25a546efa8", "27f536f82c308275bf704eb72a7ed22ecde15254dae125208343dc84fbacbdc3", "12739113bf482e2f26be96e0981c2cf5b0766bf70d6ed3ffed7c171b3a8bc43b", "2a32437de6d4e9015e113c71e15d6619013763dd26b69b99c2c5bfea2178909e"), ("1c0648034fc21a4bced3838c85d32a08cb0cbab7b53eb6e8c444e88e03396ea4", "17ae74b204b8a5b2496d9b99cfd38e55d731ee6696a7040dd06786e0a52dceb7", "056750f29fd58e4b3c5f734f4159a99ebacb6c8f7f96b599b8e6bae6946bbdc9", "29498d7624c74ba7e96ccdb19f7f43c96733e1805e9999720294fd05b297c8cd"), ("1531c38fbb26efc667b5d6926d2120ab4802302a970756d9a6c7e1a9ff6486a6", "2acc6743daffe2d2bb22cad6a316ba6f0a20355f738f0d89b6f47ab2d86645b2", "047bffc0409054564d4cc8459a6336217315c3e59bf9b7e8346ec85ee4b63f92", "109cdd200352f0178b3cd736e5acfc42ac4e9b56c32b4b7ffd1af7dd0bf91674"), ("1c25127b29c560c0cbc7662e15a6b1dbf5a373796dee9b7e2d46da9d02a3b359", "01e4d3da4c6db452b2d88f20e9e2f719a5d76855b98d10ba7027ba9e029c1caf", "0933d08f8779626ca54c8782820f477bbd9285df1ecea2d1ea74e46a93d270e5", "0a1f390a2977c486cae19ad4f8ecaeda7a7b7d145bc46a03c49566356133b66a"), ("0177713439c598fedd4f1974f702ea6fbf867587cf9dd792b700a0e4a281525c", "28cc7a0a06ca95df6556f9b0c5b2bf60d5dba6e366852002708c9c972f4dd64d", "17d6f9691b38622b7f60958cc2d4b574a4a57e113edaa30cdaf22aa62172f214", "245ae4d4913b4708567c37d18316141a8d7e8c862a87ecb22af3c17f65a984ad"), ("022b142134b1c850cd584867056f373b23f41cbb7f8977b08af1c07123627b1d", "222a9d6862970fdb0c64ff3cb82cf61c7331d9b96a8e61e4154d7fb2317f5a7c", "24d010b2733d2dcde00749519eba426733721acdf94d7b598e0e3d46f315474a", "00392fb01acc6cc17748765ce88c73830bbf0143855da15eec07c403f052fd26"), ("164af751641818129d9b1640c43eb55071b8dc2ad6fa7f97d745f3e4603fa772", "08be56dd79500baa29fafea836ad5f122a1b66c6b3775835d80cb31c8a5aacc7", "02985ea900b2474b7aa505d2f8629126130ec866c18619032a3292aba5251c43", "0be7c41b5a9a84921f53ac1e3a8e27d6bf44c9f570f7163826122ea92c780bad"), ("0d398f237d8c4b3ee9a0094e9c7b4d9f34c3aa0b67b0fd71707b92461b197c58", "17bc92eaa9adab7b28f2483cb71251d6d449e87e0b07fc842ece45885a60d9ea", "05d29258597b04aba7ddd096d2402525acffa4e5fdb53e11dd522744216c74d4", "262fe62402907e90192e0c10ea650363bd8f7e66c034b3ad0c33e205cf03da44"), ("083b0f003a78af5776e698d88a3364395be4993535793fe8c27fe312bdf336bf", "0e42748cf75d0a1e31039c0d7f76f577c1fbf514a55c83e607471e379fff45dd", "123965972e3555c6aafe45c317d5a11fdd63f82557ae0498db1663e10cbe1204", "1cde26476676ec46a3775a44cec125d1e3174a67309ef4d93cd27a5cd05f5ac0"), ("0ac8d7d9db6c0b98fc817c76a1dd71b16da1661ab775b36baa30509edf8a7a4b", "0f5e950f2c658a08e02318bf6bb3955f32f2dd7b1b0ad10d2fe4a667de07d685", "030dc66651b61a7a72ec88b69084e68acb3bc54aee5f3ecea82ae75dfda01e84", "1c13c8fb8704600731b4cce2a44b42a36f506ca1a56f215c2e969ec425c89c0a"), ("2afa2f6b2e808fe9b0a1e204679ca6526ca62bba068d63933312663bce6514c9", "04a279bfcdefbb4eaa51f725bdc84ed58f9a087a495bf7671829884de13e1b4d", "00477111a1e3fa01384cd38042c11efb5d9082448cc8df591a8573c71bd4ceea", "185f3afd6bc18280568b21a416dde1f89be0c6fe7a7286567670fe3a34b631d9"), ("1f6e84099ab4ca0959bc54c869fc50a69ec9efe2d770534883a56ecbd6a2e369", "26586feb4633c70966b77e2e678edf4ac0487c54a76582216d6ba3df467426fd", "1ea226c275b25aeeb53f7665630ee8c6980955e38e3c4bce2979e2db2026a3fb", "1b012127bd3615e3990218113914677d04a641aecb29e9139a9c68964865cd65"), ("0333a0b05f8ba605008be03a3c0aabb7371ed3d416fb95b5e5cdba0c1bd00745", "0c0bfc1c10fec895f8980fca0ce636e4bc868aabea27755e3f6519463dcc4754", "2d57d9e91950bf19a36561ea92996ecb063030e16ae345363d71d91822db164d", "2f475c2651dea59440af60ff3e0357d379dc5c9017927baa0a92cc197e60000a"), ("1dab4711f990edb5181e39a04b44b688b0ed437c0639408eda94e0cb061b8880", "052f93e6fbabba32692d74b98dffb31fd746ccb5014f58e13b6be4315eed3c5e", "044dba070d34137a5304172f99be31483b9fa68a98da0eaa313d7227ece54146", "0db13e7379b9d95b8335a96f821c78a5981b8e50345c458ee55d178aa2a1410f"), ("2d8cca4a359d6f890c0e555f1ee969bc47cf5d9314fc1577375aa0a0cf35120a", "0162edc4ee7840c5b309745fd93788b39c7c5407778655bd384c87dd72e5e778", "2d77fc468c39511d1868715b67d244c44143eef78b70262fd91f24a9104f2e0c", "1f5dbdd00ed0e4f52b455df83e07ec2ea2f81a3f0cf03b7c9744b961db03dd77"), ("0b113a42946937b613d679f5b5e819b4033a358b59d42ac718b8334cde5ea98c", "1c982883787d82116aefe7e3c772e592ed4d979f92348de455d2b7adbd0d2502", "13dd893d566848546cbd8c252c08e250ceea48c87b9bf1aa0a0b09f2fd264ebb", "0db2700885100e78586f441b83fefe1798d0fb7e19ec5e7903e655218edf1de3"), ("0797d5c0d2db440325b96588bfd71cd2e9c705e5dd9067d7f9c3caef065f043a", "17b810aed7d4095d4d894cb4a79bcde6349611e88b5cf02a2cc9b1ecbc505588", "0e713255649037954392c4ce8d0e5a1d9d6ba2c26973208f56ff4dff998357ca", "03d537100b53732585f980cd32d389d5c4249917b3f1a29a97d29ea1aa6543d0"), ("2fc7fb848250a588571ebf7ef942921e486193e974c3cc273a560ae30f23f44d", "169cea958c55c20a496076353544cd8f5c0d6a1ed419ed905dcae71ee87f45ee", "2e2e1f11793e4888dacaccf9643ada0d0280e06c8d6ea38214f26bf94ffd851b", "281077c226d361adab4fa420f037de3a785c04acd619eff0df49cedb4baf06d4"), ("1a70547c7df9465603927ad9ed7d70e67a5521f6a5265828944583f8418ed5b6", "0361ff8e48a22f3dfbf789b2431db2434fe6c0a7becb0379f82281bfa4103f07", "19278e23f43a268a69393b9a984c8adf1fa2c59e671165738f1a7ec2e1c711c7", "06f0b60aa9f852ea439cf8650564592234689e976cf25ee28e45cebe29c0d99b"), ("0a082b337eed1701670b38ba125b60810bb4de5ef260b672d2425130efae44d8", "0e9dbb2115a4e734b6d9cfc932c4c071ca148df822c5be1e1e28f7570a34b40b", "0022be95ab27d11dbd636c972dc1479036cc45cce4fa409a6c8a164fbd8de412", "2ea9ab0202b394936d4fbfc2dbd4a8001674fba4c0c430e5c3d747cf28217975"), ("24ffa81798f19bd8011a62f06d9cb107f91749460a408f4ef2c5aaa3093193eb", "0cc43e542d62ae46b2850d881d592ffe362222747702b7e502209ee96b0e4bf6", "1def7c92691ff4c24920bd1b1d0c99e9dafffb33c428df87e5e23abd1f31d8ab", "25ee0b28d3c5c3f83e229ee67a4dcc6b792e229062e591fb5ed3a1d08cb86d1c"), ("0589df607ffd549a3cfd72b6cfef21ac7a74fa7f338683d5b40465acbe15b9b7", "02d3e375651961f943330e8ea0fe29e89ccbc265e57051c76ce063395f7a7b11", "0a8371bbb7739655f5b5d9d31469c1d11dd9146ea81beb05e218835e01bacdf7", "142adcda92180a7c06d1c59c0096b9dad690f43fe236710e7afbf1623deac4fa"), ("23634bb11adc65bf78aa924405ab9c7e27ce89e36918df634bd18aaba6a50422", "2f00c5a026b69de5ff5dfb0e2b81ec50f65a56fefeb5d2829ad1291692bf5be3", "01cc50efd806d9263373b7bb66fd62c982c351e95726dfb9f185652d9676495d", "05d5c5e3b6664f5a5d3312272fb286499ba57c8d96b5973ce9c5989f5ca3d2df"), ("1d3aa9aa7c917fc9029f3ff2dd93fed66e66ab206ce96d427b9db4e57d3fec43", "09ef291478c762a40363223a7689fc917f46cf5eac6319c5d42c533a3787c6c3", "19314d717dbff08e53561484f7d3bb10837b3e956b7f8a9470ac5a8692e9578f", "1a6b879fdf8eb14687b54b16d5b6294a4b3e6c45363ca53fd70fba7ff9b79fc9"), ("2807560dcbfe4fc9c8d42047c5beca9cf1db53a0717bcae1fe61f86a8e5e0dd4", "22df5de3d6ac847b00fda5511ccd8f2daa61acb04d6fb59f693f39f17d26063b", "0d7c223e184737788c93dffe86f6ebebe3d3f4d3347a0b3dfbc1925b5621c758", "062deda6aeace4573b1b22bcf0abd93b0eda7b7d37c0802aa5cc34ece233f3be"), ("1eb6caccdf207a7a37eeb92a9328f40d07b4e218db5834fd05ae0eec5cfd4ee5", "167c7dd7efddbf971e6b37a9131490a4792b904ce525ccdf7f516c71a083184d", "2b5361cc9b090650604294ce6b516703cabb4e535ab3f6ba9830209cdd3b7450", "21dde9a49497f016b81c4e998da9e76ec5b9f49e588d925b02e038e379c80542"), ("1899102f8fc4a07e6229e7552264aa02b57de0eb74105a0ef4bb567c2c2f6dc2", "189738bdc31b597aa8767cd08c0d740c80e374c67831daf1ac025b5907daf00e", "005976c339ecf97efbbd42353fa57e468aa150150e09c571ca67476156d1fd49", "13c5c01733431197e044fdc3d98f981eeb7b9fad0c4bff67daadb5e5fffd5560"), ("217a71ac3e95cd127c051a873fa5013ead897061db336cbec34ad6d6790415d3", "1f719c3bccad2af6a16dd8766f78ff1aab15323201417e87f161cca92f0b843c", "217dc323a389679897614172699aac5b007df1cd240b9b5bddc54ef357000044", "0491f88d37f94bcfc704c3b762f5e706d0fa74cddbbe5b35b763b89abd0edf36"), ("206d2d9db157fa498b38476608d3b849689cc81baf2f25d85f0a0156f6ddfdb5", "15da8da555db34de1a224d4626520925bb406073215fc20b9fa0e3d67719a53f", "1e526362030ccf0e102bbd325d898f85fe1fc28f8b416235630bc708e087e094", "2ffcb4f55a222069c2731cd1bf06ea98a8c94349dafd81281e7fe1a1b37fde1c"), ("2d6b6781bc890d9a1ecef778b682283302c506f421ec019f3e1e00f574bfb19d", "2d94061dabb7d77eb562e7f8d53caf8a2ee6c8dc1fcee172428ae34c6606d0b8", "1daa7742c9dc370aa39ab24b701ac94f059fa457e3ea17f29f10ed4ac469d82b", "06e58e26b77e95bf050195ad3d1f88c7eb48e28b0324d851c29606a1592e916a"), ("03f03765bebe70ceb6ba5828c8ef1a5d3c1015876eb9a3cc0c36dbb4bcf4b7fc", "2e0b80e86af2873dd63f092a932f291762202746ced22e3963a50bb9f9226da8", "12cb2137c74420a30775c5028c3c1544c3c4456162d6d175016c2b0c46f1059f", "15437553bf417f3fe8ac910fc7b6630d7c87c9840f3f1f05a56d77d0438eea09"), ("1f25d7ee325457f2de556f7b725cb45f0c93586984ceffa2ab66c02de9381d45", "21836e95d6ad30a088b4c45d55d6761273f47180acba34b3fb0fc6dc6492412a", "1106de90b82bc4c57ec87094da6fd14e46880cead6d628b7250c4a3d094bb926", "0b0a58f64b7aee7bf5ad2addb4058d41fdb7124d4069a41bb64a1e061ff70efe"), ("278e60a92955f23b47687ac3e1da53a81fd3808a32dee3c5b0b2cefc44009bbd", "049c867e6632731e048c8b73e042c68b236478e248fcf0f189c6d2990b47d797", "207954ea20ba00a8654c728789670737bbcf97344435c196ba6495d1f16b1104", "0032fd65d97ec2e6649c2f0b5c4fef1d93cebd4c879ec1fffa017a7aa1c2ab9f"), ("125e14a2e30f9bd123e36c207fe2eb3742a912a8f1376f30c4c0d1f3926b64c6", "2647ce9f012fa7b18d14fc9e92a015764a70e41dbe20c0aa209a5acae4dbe883", "2c31ea0fddf984bedb15f9d5287cbe935b322faac186594966300beaa2e14c99", "1ca2f19db4abc46282108aa0f556120de05103318f4e3d11f000d8e1fde8bf50"), ("0681e5c196efebefb69ad3edd21ae9fdd58ac51acfb5152dff9a83b64637728c", "20896b7f0126d898a36b914c521392768c37efcd9a83f4a142605d60813e3a7e", "251ee9a5310ba6e07f2afe73e2066e0cd2c9dfb9e27232daeae2c12ec97be299", "0bc6242fb9bdd17af6134cd083a2c4224e50fc83997fdb369ea0a690ec9c8187"), ("04fbc04ed68a00f1b81c4d36b8fb377ddb2d3dce597b81bc43a926c801f30464", "1dc131ad5d19b2ffe75ea1e5df6d83f11e0a848ad578d242ef891f35e15e3aca", "035d71fd2ffefd68fbd5588d7dea91b9801629cb66c923c4d52955e6b80915b3", "171b72ab190e2061e663dc15cab00e67c755dc5d4b2b0c03943d96648a6be1d1"), ("219987a0bf63452b12cfeb0bc57bf50b85fe53f00037f3861faf4ec872d83a21", "1cfca434205185124766aa6f93a0e55d13c31920a22f0c934d46339f7c2e08bc", "0a644939dd2083556427709fe716cb164849e9ada2f61dfb5f303515fd7f2590", "1d83577121a55937ac2a699bf0f8ff84fef40811931c28097e372f0feeca5d88"), ("1f46af7da0ee6cf84f0d93a77ce903e5d6a08a274d6e8c1b755bc4430d7faf20", "19a12b7584572739d46d53d764120187d87a8563ae52547fe444f897a433384b", "0b44c696377e9de3a3522a17c2efc599319abf4314914b01a1f50d697c572e44", "241c58ee4880e3cc86c1680aca7db2f533bfa5b1170b2fc11ea49bbbce78a3b0"), ("26488c029e0d382120305c85340cceb67cb9cf7b20449760a23beab0df2f6c80", "27b8ffd53b5bf398dd5ad8771d2a51e253c967f4b55980b4dcd337aefd3372d6", "17a9bac8f422c9b6afcf03dab5e09e9eff4fafc4e98943813c6b842a060032f8", "1d061c70543b4f14d38041c3cc7d397ce6b7cf5caee6dfd3f4cac1f7b42d0139"), ("29a9c15364d26e7a4a1d01228bbdd7eddb5d42d5061892a16b3a428d958cb8ee", "1b58f6ead3ccc48dc1d90a3b05189e111e4444913b5bb037d1532372c5c4acfa", "07c0c2db18565a325294bb996b696f8bb83e0cc2da01c787634a19bd00b6b310", "043c0011dc0e79c9d1c09ef9579ae6e02b5ad386ecf585fd06b2fd1951fcf3f7"), ("0eb7381f70e60a1aa4f40c56ce388813719fcdd731d337ca8c1d3a106b1c208f", "2269b575939c1570b2c6e35e6b81493d10e11b88d54ba21179d0b10383a785fa", "1fd5d1635261f114cde7080dd939640d305ceeaad012becdc2e462a4802f5c9c", "00a1beedb98c752eba874b1b213e2a53eb464a17cc0a17997d2a91592cc8c415"), ("0a5889be20795e2c61ea4c3654f84b54bee9cbca5b5100e1b42ba76cb4ec0770", "0ab8c9a7b4cdab15fed92f82811806518196bc78ea061d81b91f716840cef4a1", "120e02d006ed088ff23cf21089602e11a52d73a3e52a38da8b0582c6c36b0eb7", "141fcb55ef860297c42cad2a1f557df45273115f3330b3e1afb15ae06cad6b50"), ("0ef07a81712e15cec1ba3066e91cea49b568d19cf3b03787c1a8939922aae92f", "0d9748a50d5b2b59c494efdc181373dc735047549e4774349e05623b8eb8cb52", "0ad9a03d370eaa670687ccd991b8bfee7e495605699bb5ddbde89505502ff654", "12abfee9af344ac73981cf5a942f9944b8dcf0408a8332e34e6bec7017488261"), ("0c451a5468a0608955c49b406d2db5a7b64fb62d9c3abc82ab7a09f7d3c58ece", "006c26e87e510533381ad45192ad30495f0e19f2508892bfdac36e901c677439", "0b6ee496557c9518642b3571233d3e14e4538b4b4cbd87d300ebfc0e2f4769aa", "02b383c65fe0599f274288bf00b228cdc5443f4896c0a5f8d074210f9d756979"), ("1047a9071bd2205a691b3c243e747543b46622974b1befac747806085962f254", "236e05443a691f8cc5b3a6c4ca9d7f0cffe608fa108217e58bb0c083f0f994d0", "2c742d41520c7d38052a6dd1de662a693010aa0d5856e3012ff175156d68d6e9", "2ed030ba52ac9429862c9794b55445eb7cc730c0fba7c68df10fabb817767c79"), ("17d952bf49e0ae6af3f9cbe769ed2afdf5ea83fb1310568ba202fec86c405e27", "2251af0c1317574c71f8064e7d75b6340fdc343172add9b5a49f08cf5a983fee", "05a5400e20759900873741bcf732410ae833f6e45e070de30b1849e305665ba4", "1fe10ab2f6a531dfb8bb586a0f5f3432ffaae4f344780ae2851f284db3b02cfa"), ("0d6df9412824bb6d42b6b293e61b7d7a0eac74a699fbe1ace3f8f8122a98f43d", "20572d1d2e3182de85e72b6fca715da6a54a9e1ea6599c9f7a731eb5f81a38a8", "12aaee8a899b76e0cdab19342772e9dd594966beb554af53590519faeacd0759", "0b14f09b3a8dcbbcd133c238cdf38dad0af2b3a4afb0339801362e223067959e"), ("21353b6b963270ba1bdf7628848d31f0906e7bca79858f2c9c905e3cd6642ab0", "0f925557a13ab32c086c637624bf592c097daa0cb50a3b2f0e70d53f1030b788", "19916ea55242b7d067c3aa8da5b42fe4495fbe91015fdfe00f972d2a5454ca3b", "1b4e5f9ac099af4894889a9f241dbf6aea99a706d127afe24274b5d97de2c70b"), ("05e65406189c5356a3e1648796be390f855f5be2ae64fdb15d317b6dd1b5cc9b", "0dba864ffa97133b5d0e61026e62d3b913af163b868ce056f30fa213614a0701", "1ba08ceba0cc3187a15b3dcc5b6febbe49e8d6c169f6f24a4011f7e05e9630cd", "23dc914ca48f0bd1c21cdce968c26973bb66cd4212d3673fdad4ab95ec1b3238"), ("016490914069c5156bc55bb3ad2f83e66389dd2b0325e166394b0eaf3f89c37d", "06155483011c51e6bbd8622131f34d89da51cea33546c5eb5c8f2b2e58fda74a", "2b88ea7ecda21ca2f3aa0b5a0efd6c1aaf83efa77e27b9d2e2b7e1f6af2c155f", "12c61bfc9bb243516b7e71080bf70df486ada134f2142b2e29738c943db115bb"), ("1e5e8d327448460bad4f2f2cd4d2ac57e605859945803469caba9e3fb905fee1", "099a2ac19d2075555a6d72f047a650a230488805ef264ef4fed9d05f94eaf0c1", "1cf8cc78c3ea72f09b88632665627e4586001bd7fd27635d42104d4836b02136", "2376ee558b5f72d663e4aac1e13857776267beb0d45a1cf002e65fa1ee699723"), ("1a2d32c2cac49fe18be0222f06c50faba489b29857ceb11585a206b72610b754", "1587ecb5b2293436e9e7217b26053f58e74b6b0c686c2082345baa215ee8842f", "0b276d5046acd603ab567fc1709ebc148d4f422aa6a22906584018da73d692d4", "275dbd8e3c576e47f3f2345d38c31097dab5feb941bb449c124c543dffcba0b1"), ("0833a536672bfe94f9f0c86668a1a7d1961add2297f5eb05cc59c6a805e2c3a3", "03352d2ad6aa49514bdea951d25ccf829befc35ea3816d1f64ff8484a1a5c7aa", "0192dfb8f187d65d0546d4c03a47cb0713f5123570d7e980aa9c3975f0d83477", "21056caefa5fc8849881da03aeed33d4bfb933260010bf3a4996ac5e8f284a8e"), ("0b55aca141a7a40e88d600ff1a2a12d582287565073eb424d13bfb2f662a5324", "2daa07fe5014f899474d2bceb7319144611e8a7a5c237ee8d62ff46c1bebffea", "1b8021cab28aa393cd12727dd19df2d2c567c3f56d89b8afe77524403f46f416", "207319059ea74585ef45b2912ae6c4617d94d63f4ccd4c3d6e9f0fd563850d58"), ("19b30de9da60548ff8e295c588454405a9ab3b65b676a43f4930286d21bb8337", "031ecc8529378951c405e889077cd79baf1cf1520a034ca65adbf02e28b98767", "1126635b9c0c0898cc21bd0158f7c4ac45330829287c9ac6bd8fe7b60b3feb2a", "0ffcb5ed356a61d7b98926e6799eac7b8ef33119f040b54942e2e7a9eb4d8135"), ("1d575d26f1963aac8915d1ab0a645dc9b47b6ff9ce38348d13734d2778d43cae", "09c71cc6b5cdb509388fb0a2d38e0634ba0345db0d561f068274a33d2f00a3bb", "08615d7290cdfb739c81d7499f1ff5c3b186c2879aa9c78c26b278ec3bd46d3f", "13af84784943404c955c9c78186861adb320c82e7a6f1a6c1c98e7fd53d540e4"), ("19be49663f67d888e7851076d156e585ee06fc8deb4d5077f43870043e8381ac", "0bf484b9a9a366bf9f7d73f80b5e35b9af61e2321846d700adbab4713f731764", "08c3d3f9c8208444365b4970cbe68d63541fe3a565d35b44c6c140bd36f724e6", "154d5d39d45b74f17c560872d76654fba6125eb9b89a92803ecbbd3bb8c957a3"), ("163cea3bae7f30ca959ea777b2d73670fcca5b063bcc66aa412fe0122dd0427f", "1de6a7c7ae4bef35735bd70a5a37ae82aa2e39749e296939513862b82dba0e3a", "156e1e5eb0b133276ad70883ef93f59cd0f5c377e7153672e7bbdf924348a807", "0ae8e16147f833d6cd8a95fc321c122636fa2ca935ac7aa21d4f4b183a5daaec"), ("0462096605cc282b86bda7d1fbc196f0d295bbd088010727de52918a0ebc54c2", "0bb483a2bbd0511d3800be2fb4c6dd081dad4d34459297d95e1f231688ec3775", "0793ca169751321be71de163726b4e41bffb969c29d786d5d86568ad0f1206c4", "2b851ae3e225f52f292290e713f341242524348c098c204e608e4ea53519f853"), ("225891f073a268e6e36e8b706ed963e56f2cad2cf528788505c48c89b2872a29", "2d0ee0492bab421e5f3eedb88e0896484f5be3973ce1273c1c285077bcd1dda9", "2d9f7e8c240ce0fd3e6d36cf90376a4f45cae8531e386c8d78bb686f78f73c49", "08ae9b9d9852cab2ab7a5346bea7f5440108d5e5653eaf8301aa3f7cf85f3907"), ("09a97451cd34964a4b6b0d41fb1f9588a14b5b8c7b6101d3f6daa6301d3e3e2f", "16abb8e00a98f35d9a9f3eeaae4160243c35700604cb79b73a0d1101e5b9d46a", "10707e5d1d8c3a38d44f7c59ae3b10d62c90bff5a2013d5d795df5ee0a8fa8f4", "24d7fb1844b7540ca79351e8a3dcc72ad1bc6d6c74ee8e8efb48e277a7f3accb"), ("0faf87fea9037c0db68346975a2e9f38b5fd23219647935dcf34e0392bb410ba", "21a218e402915577925936770c061753e1b466b819ca98e828e30a4593808ccd", "053be4267b723ea58bc4c0c2f7097ea38f11f731c4600e5a28d21ef021e616f0", "1c47a86b034cf8a64584b2aed141442fd104dabb76b7364ec5a8e8d4b3e3162a"), ("09e2d607c565c23be2555b79aa24da85c5e5ae3cc0fdbb3bbdf8a2e083990029", "17228fa4d751f24fdf654a7b65fa811088e6b521acff876abd5f3338ec075dc5", "0c32ae4b5660cbf1b8ee80dc2c09c79278622dd9d8fd3578e606866c740f5a5a", "1bd4a825268456d4a0167d47392fb258e70868f18a9cab8f4f965d7854ddd4b1"), ("1cca67483ec043d83cf4442ae81fd65f6113c6c2159615aa9ccbd27b8b4fe99f", "239620a6496251b0705700c17df30d023bf6ccffef89e19a1d6e442358f370a1", "18bd4756ce8cea36f35c1a6c96ac5ee759c5a4390cece3d99b04803ea14e9e54", "061f13ab5fc538aabca88c101986da44166ed5c56f0945a624d7e8a02940eb75"), ("0fc5c800b7b80151fa5720ddfc24dd9971956e2c08805a6c24583eb56518f708", "14168faf5d962c9c9642ce67c54dd22d24c8e65a64383ac286aaebbbc52072ed", "210a86dea3e0de93c56d9d0b5fb1fe2a0ae80431a61c00d4242295e599fa7cc2", "08b18c593f2432485028a6d8fa74ee4de4f7b8a7e46b0a3050401beee9136e8d"), ("0f6128e12b52bf912653dbda87a015cd49789d90738c65020fd0c2c21d04324f", "2d6026dbad829687c4feb0e64b0e29cedaa70b00695033c5e124d94b0bd8bc24", "1936a07489fadd8cef53c0be18e81c69ea4a6382132fbca6f2203436902bc9af", "0c9a0b87e8f29b0bef0c3be8f912949ef712208a9378d4c02d4024aa6acc82bd"), ("16f4df7a24302d99ef2ee1d49d1c6f0123d8462afd41f120668ffc0ab32c1545", "15c22ff9d5b64be2ee23fb7248cddfcf8b81d0e49fe82328755c9ac68919efb1", "2c0173ce3816f3be7ec180f1f2c72b78bf04974972d160db703dbee74087b5ef", "157c59d764bda3a4d68be3c74e7efc93416d25139a55e45d470c60253111b9b9"), ("2bd1a43d345fd49bc73f625a304b956e35441e7d3db3f14c4d0628322f36a039", "1aaaaba3c3fe07f08d75b1f02d1e120172cd1eb2086d0423f91a90dfcb38da3d", "1a7756bc5e40115cc976b9e03d935147d2044266f3a1420e8bd488fd9aa0d327", "0d33502bc89b0625bfeac5174d3918b6183507e7e74c1806be801635439ade6d"), ("221b758f07a502bf4a9991491d207a5d107cb7fb6116555ff48e069075ab4890", "1649bcfee6b1d3df3e77f482890ccd37de12ff282ede41dc66184624fc29861c", "1dcf802cd2b612c876572f84089a1547b42cc039949a6bc14f2564bc27dd8072", "0d359fb868e1f17e26012b346cc47a21def5b28a01b376bb7a0e12217a11e95a"), ("2e24bb12ae097bb93dea9236843c3d06a1bfcb16d99def9da97bce0c03254e4b", "058ec539d639fdb9b07d538b896bcecc82dde3dbba64e5ed41008a42fc253cff", "2508f5128bad70bb470c5f055e46ae9dd0206628127dd28ac928f3c6a223a1a6", "19d02f76beacff8be93f095e848b40d21bf218110d078e96a26506512b2ec141"), ("015da98248984a2881afa907adc1032c596b2e64f5bd65dfc2768e7b513ef472", "08618efe4635ee3036169d04e29002d1bf3bd5c5e3a71df811c2db9d53241738", "157c1f50251609215e2364507c8e79125bfef6950948b510002da1e67cabe8e9", "100dff45f41b2cbbf639ca5b87d703978cf4c57700c0a540fdc347e39858745a"), ("0fa1a88a2957bd00cae9a57693a83dc0c008c570ca88163fdc0922ffc01bd802", "2493d66ed5ec8dc124a4d904056a69e04f8ea0ea537b40c6801510ba5ce8060f", "1d4c585e4d97926807dd2850afb4060f93b3615b15aaf9883d045c111aba4c97", "0ad1bb3bf0a3226f702384bc8aaeda843d79f42fadbf516aa83bad4f859691a3"), ("1f7112d551f2af8c6e39329c069623807c1299d1fb49decf6e0dc0d0fbfe1fc2", "0399a38a578b14f4858d06fa65961bff554e31c4b4d0b49647bad0c6e614f3c3", "1e1ae9744abd72bac87e995e0bef191194f61810c3f454ba07e1d2d9c407bf0c", "1ae047e29d891f010ff48c48112001ef59a55113fbcb18131fe3c44c003ae363"), ("1b1a98caaa37c67a7b6aba45ae95dcc1110a72745db30c72e6e6f26b0a7054e1", "038beef9aeecfa0e150a380bb4a955df4689660917244fd4c469bfa822774421", "0caa4195a3fd3160204102e5c0621987daa89f31e03a34148e1ecaeb7fc84b1f", "2f497b3d8d004ea18b6f54a8222f99d644285e35bb6a107b7fe3dbcd1fbf4ee5"), ("0dae4468647eedff5d00577ff2f5d753989b5e7abb5cf3610f97435241d563f1", "1e9059b0bf1ec1f3c7510b68c811a9080dba7129e54ee8aee37f7691a27b7ee5", "1224ffabd4387244db3a70c569483159037668a75cac10a0a8b89f9bfbf8a7d7", "0199db0d4affd18705d43bbc4fdbebf50a75fbe070b0bb638af3bb1a6a6e385d"), ("0dc3916542a39d65e571d30c857889dc19b54847d7076bf4ffc48120dbcd157c", "05d3c7193c7a3465daa27204c6ca1e2f556ae90f11103b0a1e5bcbcffe8a2ac7", "04d0aaba7835ffa1e4e611cfc1e2c05eef05ae07aaa4cdc9e88b3f5904fc97b9", "0035bbba997b24d32ab4e21dc0560ecd0facc872e47a405e82d0a78e47a2170d"), ("1032d26c9f0410c0e3be1f5336076ac2713be8e3dbc3f5b9e655df2a618fa165", "0deff57e2727dd795ddc83bc717323a5b9e1303a221758c83c0c90799686d51f", "30123fca5b5910a2b060a6374975893658950b4d2202c420d74d5d8ec03899ab", "20e8e2b9169e0d29e106ce6a591ebd16ae5c1b72352e9a4f05a94d5da311051c"), ("1e917b64b4fba491565a12e512a049882810090c6b85b1088b7bc4e180d2c9ee", "16f6f5f669e0fa3e03bdb95148a271426a5b943ef7c4f968d5c2adab3c017796", "19339e50b9f1520cc5835bb5f11382836e8d608a7c3226f462e3c11a37d39b26", "074f777b151a54accdc871940dea04598affcc0d198271d699f024f9b47b15e0"), ("082ae719f7495832a30729cbb988b9a38103c8bb6120505ee97044f75cb10356", "25dc562abe17b81518bedee78a2905b6e32da76d216dfd3533edd5257d501481", "0f067bea42ee31aa387dec6129198bbaa938df3e525d88be146cc86007f2ae24", "0b2ce2811b62494420cd7b6823e7ee37517b04fa8495708b537100ccd7f6e494"), ("00800edc750503d4c04cae23f73601719b50eb66eaaa9325c9a5a7493f48fe12", "2332a376930a22e65b7e9979a20af1a5388ff6b0c1735c7d6377713a839d7940", "1f00de14fcf3829725a3de06be3579b10f2769cb202607d1564d57fbb6167062", "025aca6ac3143022f67602419ba9694a07cb7594fca49ed31d2997008a536940"), ("2bd59d184ede228ac369a43400ab3974497b8a9cac4f0d4bf70f1408033bd6dd", "105b191b432c0a30a47e95bed71f0690a860a96e1c87e39cd8e06fdfe3bba00b", "0c4f67c8fc02c204883d941bb0d262dc1aa6a8171a1836c463478b56190f8c32", "0797a3fe00bbdb18d7fc5cab4a209f5535007402522452a7179835c37752308c"), ("273fdc904f43a53a6137d9cac870e7195150572d21262a77b6ec9c016174e564", "21df5ebc23547533be5d67e057b9cd9ceddfd010d09c8253a94fa213b79eb297", "08d139056e83bd46769c1ad6af7bd6831dd94fd07b6ef3f2528c93077dacf4e3", "046a33d3bd3b80fe070a95485022f428d7b44efb12d6e840ce6e6b2f27880f12"), ("25a5a8af52e68db412328418e9dc332b14f6edfa7a33000f3ace78787425da09", "214c8c2f6080fb2f27aa3dd6dccc95dfe6674fa8af44ecc7cc79c78b59bc64d5", "189923f176a4f1e8538ad7d9de9f45c3fb3febdea61228398ff9713b86484a79", "237a33fae846d6a4e904760cc062fcbcb57fb63399207494f989bd970d50e4da"), ("08a23a32064d97fd99d4aae51096cd72d4ba921b947ab1b17e103d64f8db2456", "06fc1aeb96487df1f69999a1dbe65243af949bd5afe8853a0ac7afb2aa0e9fcd", "2f938b3f72798180b9c36aee74e290db9a090d83b917d88ffba84327de36c50b", "1b186e54f3ee51f7c32851a9291df75ddb25496b19174ae3d4ff316c2e0fd585"), ("1bd305e80b35a34ff0801293d46e130679d2e95775bb2b89b507ff0db6e3ba98", "1ca0a984862cb77f71ffceedb32597012d90fadee571675460db952de5f6f70c", "1b437cc9d6dbb53cdb63e7cbf4483c8cc53d3a02b78726a0ae0d5e793defaed5", "107b9a1c61ee914e1db1b8d6f5980e658ec583c01b2f4bcba8ac3f21e974e8d0"), ("10074bd81b410a300ce913f7d747e7eeb1b7b014f553048e36fae82b712ba8f7", "0bede88ea7d369d4c814eb707c11d9dde1cfb3bbd438a4e4f7ad70f1d5e3d44a", "2203e24450bc63032d9bdab195fc551831288b30b9f3189e63f7b7d49f0ba780", "0b0daaadf82966d877a9d18c27f75fd94068c0d93cb31907b76351cdffe2e1c1"), ("22aa8439ef4262022280e29ddc5dfc979ec544c531a13e2a72b7aadd2feadef3", "06e46cf4e1acdec5fb6c176345a7825c23454abd54e51c98ff200c1995813dd8", "0b2e7b8e230a50d8496a1318ef93bf20d58290b3b66478dd36f77144c9bff6c6", "27cc18b57181b715fd71e50eeee4b53a17d0aed612e79bcf8f2cb80cc96eb63f"), ("074730d5256aeb21829ce009ee692819dbca48907f5f5ac0563e5e0172fa156c", "24cb3de5b5496bf09e4e4933d635a1289eed20eb53fb8bcb3e07359670ad933d", "072120bf61fe173b3ecc6bfe77ad6dc28bf416110189e6a8340f65d72cbb9090", "29c67ddbca4e1272043420e2694528447fbb1b73353d485366a270b570f3fa1e"), ("206d7650d9fe6c091155a73a13a9418b62199af15a62eccee33075cd7b791330", "0d76652cdd2d82d30c975b991263c2d6b887de387be17a09a8e0165b8ec24b33", "1b64b25ffd08b3075f9356a66067b5cad6cca28b4cdea02e8c7e04e591031760", "10d39dcab4944cd867ef5c42ce66f3175ab7abbcc6f8f2dd26c8b94471f28c94"), ("0f2703a8ce58ba6cbe0ad50c36c1bd8baf63c0db811f1d2ce2fdd2c70641b923", "0af3913ec3cb1a9524558a63f4e3cf7ec96240d9dd8f30b020c6bbe1517f4b24", "01d96f38fc0fd3c78d364de12b59aa0bb44fceb2935731baf3a8177c4c629f32", "28e7a7ea711b5e9d3fa2603c11be3b3f6aa7dfade04b09c298f661862ad93b29"), ("0f54455e141c840e0b1bfc606e3cc7570915a2c42fe43c4fe44434d062349c9c", "259fc3a4dc04cd1801c5990164e05a92b981934f233313688237dbd30e266a79", "014d55335f07b6268ed798a05ac108821d14aabb619d8a06bae075dac99d1cca", "2b9b0aff55a7e9efc27798ec9b4147a49652ad9f2850b3f353d4a8d0939ce780"), ("0812ca63566dd97a9abefd5f8068cc1132e7d636ee328ea937b2234eb3a55476", "2247315ff222f95e8391a5b5acd2e08ae49f209a4a8bce7e1e249d6042b4c653", "0949da0ed7f6684be90fae7510f9182a6e27d9f7237b361ef34900d1f5b5da40", "11a2498ca9d927ba12ee25d3f95a075ee262bfcba8150aedcf9d153458041d16"), ("225f3a3a8f2578ca20a8abbfe23563dfb5bd5aa5dcfa730abd2e6f1276c5d7f1", "098a2067ce44fdf3e3ca8127215de5ec3aa36d10f274aff22d711c5a2ae5c520", "150d8cad073da3bd51177e83f0d4acbd895f5875a0e3b4d0a54dc787062d20ba", "2792756226874cfcb6f735b92ab87888252744b248fdc8a1a462cae9ae054553"), ("0a0bc20a776871f4d6b19825dc823ce2a63bcb58e3105ca283a553fc571ca6e1", "1d27ba409c979653a9df3edb5be8235b0b772c1cbaf1af81944c116c9ba0c3e8", "2809b00c4e03afcbacfcb20393f4c9bc3dd051646e39240d97c4f6e2a6f42e54", "0874310d37db2bcc20f1753aa36ee4f622c556ec5ed6353836413d17edf8193a"), ("2f77f3e7f314de3597ee8f939188c1014b14a041a1186c95396466093318825d", "1a22c9a4c68b6bdf50817530b62c7b44541a624243860ef20484b8b5ed909aa9", "25f6da0ee4aa573063203bc8352eb6da86c29ee08b61cc7aacdcb71a041114af", "08baea1115c1af6ed5b65cf92f2b4da6088dd2a7df53cc5cd4436a3d5c2c4f6b"), ("15ba8fa459208197aae1f685c625ce9b3e8017db6b1f2c69fcbdd68decd8c745", "0e499607bcba2ecd75ce0da7d8461d5b3d851cc22d8df57fd26c17f1e5737ecc", "0992c6a7b4dc9de6817e306d0ac636cc2ba8ca7236ac0e750173f8b29c5af12b", "06399dce70b85f0dbd677ab54077d5e9ac45f1b9a1c356e6aa0bf8a41d24ad3c"), ("0e50e6527d583d67fb053b57c84a9013a0f10d5c71cf5bd4285ba66f4c757558", "28660c340e41b51cf8c0cacde81f3ddb26d9d02d51c0886dcecb496d9f87aaa8", "12c7eb54171c3143f9f302710d48b8efff62ba968851baf94c45afe50594e015", "0153b82f45e21ce0065bd2753900c960bcc3713bc24a0d3645d28c048599fae8"), ("0f99534d6e485ab0f18aba7aa65cdb5049b340705caaa1a5ca48608f5df97b61", "1b2afffe42ffafee116a8015364cab329c8d1c7fdc872f1532a011c393826ce9", "180505cb297e2c6cafa6b0eeb968a3e7e7d80e6a9ff4b72c913bb947289d76d6", "10c2645fbc50f7457f6db086a9ca696688060d810ec91190aad142fe1b34b3ac"), ("2e556f8cbc4983cb668ce806e38d03b41cf784910fdf194362ce2d4234bca889", "104f42b521e5c52c3dc026b95e5ce407019b99202138f0b2f2dbda0066bb3d4f", "0da33c12320307327f3ecea6dac6881c18c7b7134761262ba4a056a243fec5cd", "2f58a9d45e93ce17a6afdd172d2075087637a1c0187a1ec2821a0d5f89faeb25"), ("023c6b8443131d1a78bc44ef5f7252ce57689b5c990cc83663d7eac6f21b9927", "22c7b4d7699118c6a24fbd182cab3218945434da77bd5efa658bb643fbedb3c9", "0997a50830abd07bf4004f5fe64754a8f6ba4bb525d68b3e2b03a08e1891a438", "1fc8bea5ba357d9a1d9844231d3f273409ac23b0bed851589bf141aae01790f8"), ("081c2f058e0df5ce8cbef2bc5f40b3c570eb3ea0395b6a921883f5c2763274eb", "0e87080c1cf83b05ba1bd455311eb79c4fad6279f721510484ae8d824c92f784", "22c3bf396e504f40e22987b531d2f566ff23bc535bd4ef310b0d240b6db05730", "1d311212926119cbba21e89006240e0f32bc16254f8b19b2e9ba906a8e660b2a"), ("0eb6af5a8b8b71f9de8d892b8081776c787a6cd92e63a3dbc5e87558f89a0214", "259e4aabf96ecf1a721b9fa9fbe1b8dbed9fa321c780e4842fdcee59d506f863", "2c5ceef0c663295f903607851c2654f5783d2e667aa22515d78e67c05a36f1b2", "03c9480e80ba99fbd3c1f499918bda46f1a5d3e4963800e17064f2a27f66afa2"), ("18fbc86c0062f08105fdd4c4b978e9c5d0490ef1701cfc85616de5f221f4df1a", "1ced4589305b7ca17c84bfa547e9cda29dc93eefd1317e893770447dcd903a08", "252ce4abe7c7485363db08bd2725f457ce9294498916a483b9e21ca89eaf9a51", "01fc77d8cd3b15a7c54ec331e10a69c7cce60bf2291d4407ab8c05ac839d5f9a"), ("2f7e310e8e8c622afe5f547093a8b8af14b4d1e22caf3d31a5a593bdb9f8a499", "21e53f41c11fc9f8dfba89275c15d11b4ee205dc325650d45e74245cee07bdd4", "2e6b9e625fea18e06c0a1bc62acbf00dc92d132fef3c99bbecb59153b9e26b51", "0a914a8f4f7fff29ec9d29c445591abe62df03ddbc38e4afbb3ded30a5378fa3"), ("2bad9b3adb26d008773334926d2b15d1cd544f8db72d07bcef9ab37e6a25ac18", "1122001ad1c9ed7a06dbf0839112f7d0aa5bab53d80b3fedbef64eb6961b8258", "0bf0b34d26a814b39cc7791c212a940d0574636b65057f6c87ab04d52e4258ca", "2bd0fbf6583232aa1868228079e3ead0ee1d8801cc82d3de23bb2e35d54b433e"), ("121589ae08be11f2287c269589ac8ba7e9bcd716906d6bb682335c35fd36790a", "19bb7e6c43da1a5f7b662c28433ea950f457bc62a1bb22dcc97077d6a90c2f2e", "2bd3779b5e60012c58d06366e3c3e9e597e42c84b473a8928bd3b3f6225cbc7f", "023ce9f10db429fb33c20c46bd79d79189d271f764d24cebdcdcb2ec490c9cb4"), ("0e358d1f1c0c72b53cbcfee0b51b403ad6ecb0c8d9e0b580c7c1ac9cffb6a9cc", "2cb301a3ea094750698ca0531fd2e03eab15936e42406019f02e6ebd0f71f250", "0539f043897d348c3f91af1d630ca14cfec12226d27c9e3a91919c46f638f5c0", "2fefb8d479f73ebfe58e8d3c4deb78d6cbb16abeeb9e5bd3e576cb9ea2d6fa17"), ("164fbff064bca133d831ee379be3af9a05f00af07ae23b436927c5b193a71127", "084c2aebbfc895292bb3677574e8a5a563a169fc53b24e29e7489a52b94ac85f", "15165b64799da41e3624e0768318fa615ca5b69b3a814b32c87520c67a76d4fc", "243e72289117a7006b05955ac7e9cfd347f6f4611c055204df037df9e8cdda3c"), ("08a4ee5bce4f3160e56e7395303fa1df7a65a436fca95568f622f0c3be7391df", "00ed3e00f1e4dd3dea1eaf04d2b6d4ebd8907b4185baebbc50d789c37ff0c07b", "289e8c9e46437e9c1b323461506c651af58f9c2a827d7636b4a23e3593b40a26", "25906375d51f553976a842939f5fd4e3eed6a3a0ba06aab84b4d7d58adc910a5"), ("0cc9ed6780ff7c6af67e71debe4f5d72b87282f408135a729d82ebf0a0affe62", "008d80bdb3e0d4d70cf1fcc82050c66549adb26b9c44ceefd7f6213e621fa6e7", "2df0dd36dfaa8b4f0f1e7b42c245bc74f2ff4ce40b5a41084e6b486b8869e66f", "1a8499796777c3b0200ffd37ae7c5c0e87c9581c7f812c3d3047b7b5dec3564b"), ("24d6ab8b3debfd3d3373f3c017e3b84febcdab37d7fc597227bd96b992c76ccb", "1b8143d80070e698f186fd03f94785c5ce526797e37d8f724f71e5ec5870bc40", "0502c3a897a9abba5d3934c6d737251047842477b424b97604f449492a7c754d", "2e293ab2691ff2dffa65111582a33a9db5057bff7403b4644b71d50779abf3c2"), ("14f463663a3b5273b5fc7a8f56bbdda823cea6bcec7bfde54d10fcfea225d9e6", "15a7af7a81d11e64cbd8b5853da3f95070fa2f308ff0cc894e4bb16d9c383894", "15ae29c7206eb3c7aceedec7834ab9bc31d4507f3b711a6b40679b94eda1b129", "289e1b9ff2c4c34b87c8aa472121ed26c52a2209a6a7426f5377762c0efd1264"), ("13f8a336ca14891484c9535124d8515b0ef6d305887ff3ba385c0655211e3299", "0d0de95754055d287951f62da0291f92f6facc5374b35eede07b76b7ca11bb12", "184a3857ccaba4e24d9dec706b2ef843f5de565410da68872ff94fe33c1d930d", "0d50479b1409375f0fd0b6dab62996250caafcd31b32176668477de33103f971"), ("2a18047287d008a1ba55507218362852a625dfcf767b714a03357f034e3b8483", "1cef288c8ef9d4e360dc6a3bb9a52026efd78adda8f2fa6b94b9b43ebb544d8b", "13bcc1a33b4712ece3cf38160826ebb4da6c4dd9389cc58d7cdc350dc70b4a0b", "29cd64b6a971bd6e0f1b1627bb807cdc50fc1ead7e24f03cb4ba5bb8e90b261b"), ("0c911d6f1f3c39376dce89dd74a2ba09d784ca27ae80233ebfa357d440682c3f", "17752f48051497246bf14d2fcf12b5494f58b6d0666e43238668818a4f135325", "05ba3dc11f54841e446f7332bd188af4858d8264d61860f7ebf3ba4c6120a42a", "055e60cb8cbf74f4abca4736c7fbf67bea3ad4bba2bc8885b52a8ad3c05fcac5"), ("2b4b8bc98b2114751068ae9b4908f5b5883e0941b2900b1dfd7c8190735d0116", "1dc642ae72a9c1edd0ecbb7826636fafb560069ac056e9150bea38e0ae4518de", "0df9d1e7f333f59613fdfb716dcc68a4c0dd34df4603bd1b7cfd7332d68c9394", "03ac688cc4129dda2ba4858b831841c3dd8a1036452636c37bbaad0f9be287ee"), ("139e745283415c96e4638cd5f090b4fbe23106c277902188cd15d46b64af567e", "09ec42427faee0311ebf02538af05740d83a9335d516430724cea9e2c5547e8c", "1316dd9f964c0c8588c1bdfa09fcac1359a6c0882b7a9481a205522b4146f32c", "2aa9c61ad3146da7cec4675d403c115fa301503c64a1252d7b868def7d449794"), ("158687bd21afd634a749b922a6839f32443a11f5ba384392289b5702cf3a03c9", "268308f7219b4d95cc7628693702e8c7601308ffe51b3af1b3f4b47a1f06b076", "1b96758da436ad44e6bc90812d9fddacbb4bb6639015df548b2e0d4fd459dbf2", "0085ceb2bf5304d06b78643bc9a6ca6b482e9605eca2a0bc43f240ec8cc8fe96"), ("0a212b82204824bec5a8133f0796bdf315166697a9ed3eb8c3463521170cc05b", "212a9ea60822ce7730dd043850a9b76f59bd63d8a5a59c102dc2b3cc382751d4", "2269daa5170770de8cf759cddfdb7f40869070b974426d6836d2e287f17cb60f", "1d598850792c433cc6c2c940d139e7d2e70f7f12f65b8d077b7cfdbfa9419d2c"), ("22e547c402d570958ad4dcceb42067d9cbc21e782eb2ddd1972066ce4c399014", "051557af758ac80ca2138a04e59bf47e90d14e23848b8b4843704c34486830ae", "2ab00635dbb97db5e4563535ec34729b51606ba6c0ba521b0183ba2047ff5d3b", "2c8d33a241d6e0651c69e9ea43c6259e22577be8e01a0ba550f442fefc9828c8"), ("0fc28e77b46e31e52b13f45f13888873f99ef891708f22baf504cfa80a885360", "08b541c05557ba16060ec55c7834f646ccb1cd57b88a33f509706dbcf1a14ae7", "2976fe1d75d0a93eb892575e64d15ab3e994fd58998a86014f647b5aca56e9bf", "16a83254a899cfc3728aeebb53f5c752062eb207a3ec56c25d68fc36e701d9de"), ("0fc928fc8d41b0ecfa49a8749a3aa3721c9adbb7baafccb024f93e00247f7999", "29aadcaa9257facddde7963df8e0db9891be24d10e7e3b564f813c098e2e24aa", "002594caab6eb7ed646ced31203b9048e45a4d51e8e986ffd69bb9bae1f080e7", "0f8161994516f926a6d57b54a4350f4a512f0dc54313e7643d81be547debff43"), ("174743974ba7de0bc8bceb10b8bee8f63797b11add4c1261b3d1794375cb4efd", "2cfb1857f45f65921f8b4f90e3bc663575f7fb0fddabd5a374bc2974162e9c05", "1eaca7b816c88d4c19ab484e448e4426ba60730320e71a4fec921d5a59f2f060", "0a5d753643ef0172aa52b0a0892c99ca16486f64dd3eae8302f386141c0dfae4"), ("262ce61d86a73f99bd18088d85068c3dae04670074f27d497e47999c07cf8638", "08c88258de8e1ff39949129cf13e53b73b3c2c1f22968bd099ef2a666713ee8a", "2eee7729be1077fb54225e13336de93253cdb081d0876d312fd66f60203e7059", "0d704e55f3c1c63ab72bcc4be799ec63975b5b9f4b01005ea3037b67b49ae1fc"), ("08539fa4e1d52bfab8402e7d8c1591f916d44466eba08410973c54e964778285", "1e08952ee1a22ec2d09b29a2a32e5b40e89f03b72569df327c714727c3c452d4", "158f67ad0f672003de46fc5713a546bed459b103c91f0e95b151a62f3c8707fa", "146cedc4df254ef74d018144c13555c82e33148566eac3f6ba4bcff3b0ea1238"), ("1d01a4059c9eb1b5c0da499315c69f76dc40a0fb85c807e7c375e74d9a071174", "0f34d44cb9f9f88b9cb5325bed1737e34e19ca98ed7d6be12ed904b4d2c3608f", "11fd446bc5812fdf1d792336f836569a77aba7c2503bfbc656160844b4c9f38f", "05bb51bc413ea35a8e69182beae2994181afcea03d38ecd809af2d80a9e1499b"), ("12e02d5a1f0d207adf429df36743788eae3d43ed699fc3357bfd9d5c008e04c4", "1fee898bc220955e41486d319e99ef5c619a0be43b9378f21d85b42d5907a289", "059eb95ad55910dee52120df68b3b98c2c8df989dd28ee2a9edfa9207594a645", "209fad2473b69b84ba49b11045bc3e311428510d58a7fbecd0cd3364042a01be"), ("2655d263d2d3b4fda0a94bb4860716b8847095ddcb822737b91ce20efbea3ffc", "1528ab170c5a3ae5c9eca47b1cb51e229e34bb9aa8a4bd722cc13905faaa8a9a", "135dba3ba8e59564d45a14737f31832230080da09efdd67db3c6696be493d036", "2a819b1b448d2ceb7362b8875efc40f243d00bd492e137cf5365625be41b418a"), ("1a3a945eec02423ce9232a9ba2a6598a5057d7e2fb72d835121288d896e13569", "060844dbe0ac8856a73e584d634b79651fb580977b59356c37f4e02eba2e56e2", "0a4478aed95fa678cf53f14b3761ee25a90d2f3cf473db9bcfc846d7ef46ed25", "09a39047797b838d2917d436b99612e8243a0d72151e3550e14def981851f067"), ("20b142494801f62851f7117d33b69d2059c45a72d4f5789bf07006ef83815035", "0582dd171472ca8e45fa05f2885014cfb75faf6faddd9df8d58de3c8c22a0536", "29969fbdbba8fc0ac2bef4aa4b91eb6c87d9936c85925c4e60b8263284ce2fab", "03010342fab7396de48ad5a4395971cd75d4822f7d35d768e9bd4d6a8b39bfc0"), ("25c2b3a7d453b214538324158f6d0a23d6c5998d59678f16dce57f076ba1821c", "0f2350f4bf5713532cbc6317a8c9d859559091a2f448f38115ebf2e6dbaa73e5", "19dd43b7e8d3ce6bbd2213fd026b197064a39255e2b752b45875df1e3f2843ec", "0b7444482fad3e077deba08b17fb204148cc5b597927a452b51bfb4e8f334b88"), ("2ef5f47cfced9320cea9c59d6d1f2525271646340001faedfce07cf81c472744", "03761cf4b009539bf49a7f55bb7ddce89e615e2b753d2ff73add482aeee2674f", "049b5f52a896c1281aec816d297508714e19ab3fa025848dc7465b7fec3cca3d", "0bdf17b09ed1edeb7df6cc6d9046f33fbda90eb84b66f1fce5760a59cc304774"), ("20353c4c7306a9b36ef8fa4ca8526fe32b9c24cb85f221afa0483acb45a5ba03", "2d1b26d3ae18d40ebbf96861d90f6de69ad6a92569f76867edc2efab73b66aca", "06d120c158c55efc73a8221c687cadfb0d94c44155c988b42181321affa46908", "2686dbe17efa68ebf383db66f952fa4f72e6e2312bb75d729ecfa35e7c1d754e"), ("1a1c3ec0b60b1499784a9c7024b8a7c1ec5fb1383f206671a63f13d4f553c0bb", "0420e0bfa240da15db2c969a9bc0577c0c80d3a5d3a35b44077bcdb42b83cdac", "082c432c0ad9401bc46a5cfd3f9c7cfcd8114b95df82bb4038d8642c20846c3c", "0b76b05f973f0237e7f422d0814bcb4089ef965fa4d594dbb2a2e5e66ecf0c2c"), ("23a6e6ac4de4494a99cdf3bd0506fe60ee4462bb0ecee64174e4d8cc1802248c", "1831b596d3f68d61971190ff6dc1fc537e152f424688a1b45e7c8bd633dc007d", "039ce4d21047576661da5a35a934e25fea7f6251a7b466d19b38f3f698e9c9e4", "2d1aeb65fde0a15710223d8ee12278e160788e02ecfde2907b2153baffee7a26"), ("13ce6aa3c3c35f1fdd47b7cc7c06b2dbc0a4fbc1df4ddd608c8c64efb0012319", "0224db1bcc58ea8219698cd3033ab210588140d8fb2a3e246ee34cae9222d639", "112f9adc4cb922102700a19939e203ee780a45e6488bb3bb031373f0e927a4d4", "1a9ad5f05fb0ed6363ad49359cd51549858d9f50ece301664d825f52e55dbf38"), ("21fbfa710ca04888375e1d130f8cc44f3474f51a3298301d165ee4a02c166a9e", "10a6c98fc319ad7b0fb2d903005829f438d522fc8143fee06f78236f9ef3bca9", "2708d1b63a0fce988db0bdaa1a24ceec5fb85dd12dae8bec59c8a4201a3dcb66", "0988c85461a3cf600993da8ce0ed9c6eb04b48627542d6fd25bed3e62bbb3aff"), ("23d61fe4e19de304cf96a121fa37dd3cc24fbfa1423b34203641234b1cc47a6e", "0be39cedb1be1b23325c7571061014856e0e48b10021999f9bb9ae857cb0e35d", "1e7717abce4bb08a13998cf75467ee1bef687b75338e080b80fd9924132b38a0", "266e619b6ad851593f58e72d4d52633843318e5192916a65b6cc4a8ebbdd2370"), ("270f25962cc8551b0a8d8514641c948c1ac8c3b3ad6e0ce48f4048e05c5758e2", "23fc3c9bd210d3335a62625565f86fbbd360693d4927d73a5b1ea647abd1d6d0", "0dc05f9f1b68f99b91c2e96a69a3a0f304d913c69fd31363fe95169c6ca2540c", "27b7fd9a617a8296eb887ebcbd50422b2f21c499888f2ad4c2bbbdb77d3572f4"), ("158f1ae7c515607a03d85e2ebec5ac06a64338e445681533adc7876bd4d987b3", "2362191d2a4e215c6958831be2f75c678a02e5bb248377fc6c9e4be89833f528", "0fef77c862ae14b02a401e34d2fbd4d808cb3f9089e3bc249269cf8b85232517", "1d7e3335ef8366d8a2191b6b769dff65a7e1924d8c0a96160813321ac4d6ab38"), ("20a235b66178dc9f23bd171ffe61f53493abfaef60cda66295106ab605951da4", "1c28e280b75d0c50c537f65b7c846e7c0f81265596e955003193c36926ed38cb", "02f5f07f1ffd3bdb6bb08d8d2f9b681ff8ff9ab7fdd6d70e0a58c083bb7affb5", "10d389cdf0be9f1a8160fac4e69ef87b79c7ba7be8554c010f96d3b36e6ae2dc"), ("2f0d75270970535ada2996b928943cd2cc23299904d8aedc5fdd3892cede2bf3", "00eddd3a66b04156cb5b4ead0458595cdf664baf1ac58924761f8c2370e275d9", "141cc7cebea5098236a41b24ba385437a89361ce983d5f5b4366a0a5c2ca7e45", "1d4aa490cc1550bd25bc4284e5a7323332087481be0fa4dbf000262c29253954"), ("06681f4a05d3653ab05b434bcbfb8ebb3fd364b460018746600a3142775156d5", "179e6f50c5b26402823f2b998fd6c49cfc1f5ffd94f8bc998ec05eff33a420f4", "24887159395751abfbe11a6a4204a32c2b79d719aa03686fd1c82a061ff8f77f", "07b025e6fa5f4b24c1cef89b1debbdf1f3dab876445b53ee10f2f50959ca1177"), ("1626e0d4a4edf14ddc3d97bcab3cec92d27aa5b16415b1608d3b2ba95850af9b", "1bd74dfba42640f8c01a4ee7606f7f46c13aa7f957d7df8caf64a719ee94a43f", "2b0a3299c6dc3c8b0c7a44b9ea3488895ce771763b11ffdbe472fc0c6e1f9dae", "0e17b98c6ec2a40c7932f01120783a46e34883e5e5fbfea3461c6654a82c7911"), ("04cacf1d8f2da8d32dc839911944c4b593bdb8d7a47170df5f313de405d6dcac", "2157a0c493a251c93585e34c53e2402c49d03007f7478dc8b4eb6de1d38dd4ca", "0030dc0b2197ff9b7cc8f8af86a5d1fbd9a0f7d7b03bde63b530fe322fa2e144", "1ce3ad301caf06d210ff7692dc81b7e1aceade496aa2157928ed2e9d58d25926"), ("1026c9aafd4299e8bc5694cd7252443d13bde07c686551b22d55d9e3af219a51", "19dbb32ede8bba03c9bdb9669f2d76e87a6c3f3c444506d5bb8d0873a7ee51a3", "2a097e205f1c05ebe9326c58f88402f43a5731087ff84bc003aa773a682b15d6", "1fbb2baff962002b4f5e1e2d02a0957bc003adece78a23505528f719d60aaf3d"), ("2f9e613d306f8a115ae1b61292aaf4821e15f1465745a6b6fa38062dd7e0c5ff", "144123d2bbacb9b73367faaf393b026aa13c45e630d1bdbdf1e88aeff4a2235f", "1a82336da54baab591b9bdd65f344bb5c80db52b11160474befd8e796bc0ac68", "0b2b58982a01de129217b1a470ce24083ce1f98d33349dfe4e471ed617ef249b"), ("21939043508325c02ccdc9e811201f00c4033bd712cce6b34d23f866ec62dc30", "2c73531ec267e2bccbb2967ed65e7866197d311dc9ec4c45dcec099558461de1", "2f19da964b27d1b7b89071b236d694667b112239a13f49a91c128792a5c26344", "0d169bf1e097701866bade3638992c6480f5173f2c63f9843e41f37b70c7122e"), ("2f11b0466ec167f1e25e181ce8cd5bbd2f828cea067277d3764c4d8c4d8f9938", "00477a624d71454252b2c2ccda1ba9137aa63ccd55b351859ffac13ac638278f", "284974a195369974c4c035e81eb7b3f1d07d988e78ebba2b58b489a6e0edb990", "196fd8b078f423e19c909f008455152d962260f4c7b9b18056bd0272661ccbc0"), ("0fe7c266abeb663cc53a1b5ea1660466594f0ee132c090b80719616619ee873d", "2f0b4a8c05565f5bda47d9d1d95fb342d202658e24226af95af064b46b3ce49f", "020582c8ade71275fb57d886946942fa97428a0fabf1a023d2d5870ad9fa559c", "237e1e6a2d18f74b60f34bbbba3fa5d2b3c7ca3005aac4bfccda4ed149f79268"), ("2f1a65eb1cca1899fb7567d1f425a0a8226300e0330e85607f03dfbb862469e4", "0aa4120c1758a11ec01c6ab0fa189f0548ffeb2d325f3e339b474ccfc9d52265", "2cc9b9f978261d870634b77b1206da90500c83b551fedef11c3dd0ddac932041", "1f6de3d4b2c64257fc25abd49360f07940bcd58bd1a4e7907901aae8e71b1991"), ("1ec7ad7e9aa7afa06e8cc78e50dd651d2fbb916f7ba4cabe7a1da5849cbc57b2", "1d3883b02d390c66324e2a5cb837e6bfa79e4896b34bc6c89cfd9e5024695731", "289cf24dccff33640e7b6a0815fb0135d7ff0b6ce4a3183ef74349f0e472c19f", "25bbbc7a6d9e0874c74238c618a50840dc4ee335036e29e478fefd43639e097c"), ("2dc462f9a6a7e138c0be3f99cc973a425dbd7637b6203a6895b4540db08ba14b", "17b15899158f11e2e5a6ef92461681b6dbd2eb3a1010cc1112285d75d63d2411", "2f32996fa874f168df90d6d9e6bc3c094db2add1ed2ff5c682e6ca15fee6e6ab", "12467b70a9d0477b6b085b5f60f6d9974568c471d058e00e3a6b93048db43618"), ("0bc1e91a4691aed4f12a31a333468b9790ef20072109568fc77f274609a05537", "28709275b594f4d6397186fdfb7746c973a80a0cfdd4168043ff9ace6e697fda", "10469b97867eb8caa1fe70f5b2775c7fd2ee31a79a122f34010de261acab002d", "08a825c755c755a23b22e7f149ef65d3fb2db392a2d25772c38d06297e4ddc7e"), ("0b64003e63f73776579c3fbcce7024adcff026b064cffed9199b8b3bd0721007", "27a70dd00665500925f8a04ccb54699273d0afffbed9000886b5279186bac99b", "21db081b1916b4fa5da6c8098a46ae86d923985693af8e32b1b2cbd11eb8eac8", "11c608d7dae8002de999db707329fe154cfb222e034a4a3a041ede54eebffa50"), ("1d8b1275d0cdcd965e4cb2d7328aaa4a39e3143c1f6caea534765930e8e22d53", "1b414732d6793073c27b4186b240059446b451afba3803cbf29472aa8543ef3a", "15d1a79ca9412119849e280ac3e21bd8d3aaff3f934388ef4bb4e7e0f383fab3", "01af14c3c7704829600fdbe70ef6e53e2567a1da81433dcfeebaeca0aaa79a11"), ("261e93de62a4efbb43f9c329ae400f74449185236730a822b3f11628eaecfb1c", "22941bc12c0530f45b523c36f529880d42e3ccd90ad1dc3efcaa31c15acac755", "03a6ce6928a25fc09bfbfaeedfa686293064660935356521b4d3e1c52e7e24f5", "16a5be556834527dbe234b280f19471f8f685f7f5aad623e9efcbdaa0029a1ac"), ("271186afbaa6f45065ebb600b3473e666917dd568e665bd3d773b81f3084bc72", "054ec990c739f6d80e3e381fab4a0adcebb89103f22ea59c36f926b56f84ed89", "23dc6bf8a2a16f36242c2c78592f79a0bc2cd43c872921ad43aee7ac9a1c7b86", "20f1ef4cd0801d34bd778417eed0cbdd153b25c29162aa142abab479bb041237"), ("266db6d2c4e5a5a3ce948971528fa597648779944a4d86c394ca8500e9f3dcc1", "0728c6d6774d1c5c79aad2370923ab3afdf475b3b046bc886c62580bbcc2a1b3", "0c6e5fb1a04b037453f279355c2708b5354fb23eecdb4318c3add7aca415d3ac", "2bdb9b55e973288bc849e52f683e6cd158dcecb4dab015b102190838a10206b4"), ("24374af60368279f255abcce03e2a7c2cf3d8cdc7ef0e4b4585406f9cca0bff2", "1a00c2ac8b27c102b88e301032113753dd97e832968e12e444dd2a1a0f7ff6ac", "07b81bbf3f0f7b713fab14a409ca3393bfaeca591ef46b680e637db5a0491a45", "0eddd77b70b1eb965a900fbe35fb508d0fff1ccf9cfc761726c460124e6cee67"), ("16822cfc5b098e715768f512796dcfc86c5a088da653ddc5644798eb4cdd14aa", "2037e2d879b2d9fa966e56351fcd286ebaf61b2fa73311f68aa382a2e64fde7f", "1bb101ce4014f51933b44bce4beb4dfffaf9a092eb2e187fcba831b5c7150359", "1d6f76b39a7fdb86cbf236546e1391d186bb5f5be0720b1c66163ca0367c2f63"), ("12d706cf041f575ef640eecdcac60c88e7f0c94c9d99b7671fc94b83f3c07159", "1a61aef4187d75c0a2c437620d9b92dbec514365d15a2920d8e630ea7f8b8e28", "04778ea83c7a61be5695c49f6ddd55b9b2f6f61b3dfd82a361bd3121a08bdd42", "0b155aba9c19600df5e25d586f3b64fc71a1db24817575118599731947efeaf3"), ("179e25a68956607e872affb5915f88c9766613e1cab240b149fce82959e7bb8a", "15b2140bc40cd55c1ff43932a01fd88ea5f4134f8a740c030067105969e6c0b5", "0b26da09e8d4f98462862ab2f83bb12b7a3c7c8fed6463f09c01e9fbb9a50ef0", "2f894c1c1dff3951f26cd4d1789de33fd6791715142b16bb800b88cea97ba317"), ("26abe2b404175a3a1a3fb33777525917846c711699b15d527a000b58c559bf6e", "1835333923c9bb518a97e3d0913131c4672876fbdb3832e3fb9692059a29d53b", "1b84d1ff922b67e323643cbaa003efdd4d2c4f1c7742f239d54baafe995a8dbe", "15f610a00aba490195320ce6845fdfeff118ccc6bee08965d54ec081f0bc0745"), ("0ade1a63b66dd68603fb576102d64b83b621c064c5daa616e7efe3dc8285627a", "1048084d8fc2d598d0d86b85c2f5e7aa5ab9fad7ffab5ae39b36f70c4723c35e", "0868798f00a914933705da8b7e42f18f42316e76c320aa2d8928f5b7209990fc", "14a9c38142c600fdf1b6c78212591253fa0c601f8a435f5c0b5d9dd43982db3b"), ("145997b29dabfa7dfa2de8a4662032098e0602808a4aa0983c27325a1e301b5f", "07641b1dd538d687ca49fade96cbbd092f75ff32194ef93e3b14594ea56c87bf", "0c3a41e55068e993ab35c44caeed1711042b190c82677a2339ab26c62a3677f3", "12ab8b7b927d7e1c3da64db1e170319f1b4d445370ad3d01e41cef75fca01fac"), ("1fe0046c7113dd209014630eb47e51d3e50243059fee86245b6968f63cb92869", "06c4fad437fd950ec6fa1ae001962146ec044ba14cb3ebabc65510b1b85f2bc9", "11734c9878509385b7fe6cc38af5cd40a97b78a0aeb66ff3954094ef4dce562b", "1a845e2a3ae8ba3bd0f48e733aa5bda2fc1f6036e5ea0e811469c3473721b194"), ("0108c8da244ff3dc75cab2ab4a3d2fdff04eb281d64f454b1167862beea5f0ce", "1e2ae8b80d6c674d5f0460f840ebde8d0931d704cdc7d737949c09591d985e51", "04ce6370a2706e1a0c0a4f3f4b90d8481af4f226cbf74eac1806289217a80b7d", "1f5ed79779dcd56b9d5c49f78aab25a6c4ac94c7280f932fdc3e9960265aeec4"), ("2a988fb6f8cd5302fb65a5f305137f6386fa2d1a54d1ce798142720165d52e92", "2746391643b9617d47a673f54dbbaa15bfb0bafa29c801fc293a2fd4fb146311", "113b2155934e9335c960f8c14575e8ddce0e6c06349fdab9b85f695b064516e5", "1b81b73e2bffbaa2495b01b42cabfea4cc3be589ee94be80b157ee302de8f220"), ("1364f0e8eff566fad8556510f51b7bf6750fcdb19eb54f5a233c45f630509474", "11889ef05252a1ea3a0ac1357cddb7b00141aec9bf46f6a1af38823153989375", "01f54252373a748f8349a40f2c1ffb2b598ff83fbfba084c96fd0eaba07bb96e", "15db20e08ca7dbda0672929356aa8e5a5d0c9fd72cf4413876dbfc511013e543"), ("30426d4d61281c84413a92c836d4908df4d9d8d2f15651c0fabec13613a5c423", "13b237576317f8770665f29df658544b9b0eccd5e6d82769867f1488e353b60a", "20ad43d26bfe3492e1a15232dcbbb5f089270b00d407c271ac9ffb3a463a72e4", "042fdbf0d5e639306e7c37ec41d8fdf6d25b71157726f823166cf4441acacede"), ("121c51b43db65f36b792bcd5222c73199c7c413a2fb2f60876477d9d7ce9303c", "03c2285f08c48048cccb453d49876215f3239cfb4da055cce5f317d99e325af5", "2fee563fdcc24eef6938237b0ae7c26aaa2a08d63c28f0f24a3624999df079cf", "075d0c5651400074600d2606d7d25f73b44d57e552ca0935273afa2575b1a815"), ("208b62e9b172869d75912a66952567dd20b577af49dd5ce0321860a23c7d25fc", "132dd5334a68f09dd237f9fab4a69b844d1dffbd724dcedeb9e216bc86d7c282", "2ad288f2f6295c2eec5a1993f5bb13cf6460140232ff93359d3d7297b977879d", "2446e6f3b1aabf6fcbf5c5891c62243c9906c1908cf26c888a5d2bbd73a67945"), ("2ba306fe01b00f0427bb872c611bf22de896679815b38bc11cd5a4b1e35f60be", "10b27a37edec3fccf1460a9cc0af38a95980c9f092a7d8afcd9d06748e65ae6d", "1b3fcb1e3668f5b2263855bbb9a1c05fc47045c00f7d3ddad352c74fbd65a122", "17ca5a384e2957dc02ef4c16a0054de0d6b595cf953c851e55c290e15d5a788e"), ("0b36d67aaa06e588fab40755c8f874c8102de8b17e478874a4c01dc6049e4b2f", "0728f2a180a5f0654ce1b4e873b31a7c014d7d82309e3b4778690182c8b80887", "2dda8a2bca5e802dd6f796a369fbc7fe960cb3b29b72b8cc9cc0b897e24d8aea", "261709d835aa1a3b3d59376604c72b725e57d6d59a4361305843dc9d8bd29298"), ("049887af23c465477b8dbeba36e202bcb10d4cd08d86c47b19c6eaa40386c54d", "276a467d43c9051fbf4bddd0aefa9bbf229cb3deda01eea40435865abba86b04", "247952b9186c932c9508f2e5142384ea150ad1fe89a95f14b5184f41e46f38c8", "10fc19b5ec1868823199074d54d55b18c6a690beb8c8879fb864097475248ff1"), ("2e932ceca46c777cb5e4dfd0cc5a185433b94cbe34e196e26950c0c4931d53e8", "147443bed93ca2c2f6b010869935142ec074f7bf227e36ceb07250dd36a0f84a", "010f9473d2be9b67e215cb9f25da40d78ba5c97020e0d0d50dea1ca46a0ad488", "2f5e0d92a77f91ac82d1b8d86e936c07475f5115189df4ce6a3c0d6b9f327fb0"), ("20e494e98ae0b45233f52f6498001dd716006c733614d3f35dd4e18929a5135f", "111d9dbf5f3c074037d825f96cb599615c4e9f4d4a0d64c3e65c65a3c5bcd8db", "04338429621e3cb9ee74cb09ce11a61eaa239531702053ff1557103c152a6e8b", "10597953d877e19fb56d57235eeba1789b9de28f04d8584c4b87c1c9e8f40627"), ("0e3bee3f459ddc6e7f9d0c6f50f26013c1c3933cf8de7e9723fbd8b22c70b683", "29578e51ce3e9b64cdb062541c7bb80c3705f1301192801b4088b39eb197e15e", "15dafd84d233b2b9efce458e4b07b633eee490f3463e80b44dba7beeb6ca1268", "1b511c05605238cbbaa45b9637cb6f306f76532f79bfe8e545caae3015523118"), ("2ba3c47e3f3570237f4c6c811274b3210a7d0baaf0d80c34b533503735d806e9", "2b151ab770cc46e862694aa489ee03506c5a281ece1a7d7db74c0c8cac0e5c12", "1bed06b3f9e7adcc9d6ca2cdce981aac11a119e9bf35a02f56133dbc5fe61b1a", "0de281036dcac2782b58a47c9cf148b66234a4eecbd5ac593f79cf55ed3ec019"), ("0cc1e4df27bf4a41e45d3cda876492e7e0ffc5fa6859e122028e09765b2db872", "1f387b31814a7bb5dd2ba4c6f0619ce253bc611095a36361061233c5897adb51", "136804b2f121ab1878f94170bc596d7269f9ccbd845c9840ac237d28f6d08596", "2301170e03c4e95a38cd2bcf589e93a8211676490c8b242f4eb67f2c915cbf8d"), ("023fd42843228874424624ad9f6512289620c280ca96557ae2adea597d3373ce", "06825dfbf3879df67abd0ddf7230b6eda70ff4a88bac9b96c28b17a7c7c3746f", "02b177f86c8bf1b9397d40bcfae556818b006f3dedbe20601aa7feb55fd43873", "1ab06ddbb2bf2221225a819c1c1f09e47c2e71604c6586e807325bddd4103898"), ("0d5cf8f2b55607e9f925294d1fe178a51c08a693ad83fc4ff2f3f80bc0d9d3ff", "2751c2331065e114e6fb4c869846cd54bcb2de6172edd6b360397349eb9b9003", "07f05b69ee87a5b4c6ef460d67b27a37a9a9946208b91e9c9d51c1bc6ba28435", "2bf7b06ca756b92b0286760c6bf34792c1634f0b98c8343f28f6621cd06f064f"), ("0a08f48762144060566f80bb7d9d37617b4ffd1ac8c9e782ef9c36345de0307f", "1be0b92f4afbf20c0eacad8a72ae2b623ccf8c26c4dd3d7a4f261b57f46343dd", "10ec65888548f72fd2a22f2e55f4c656db772ddb25889082be77289c1bc1dcc6", "0c73fff36f058c39e48d60668f4bdc0b197ce4271222acbc57e65e77ca39fcd1"), ("0bb34971d1422dd02f261cfcf80da65558bc243c937e1b1ddd341b23eb1cbd2d", "142f7a3eecd490e5e476e130083151f52fc83ab29d11c5e5710a872449a1e34d", "160f27253d0b71a5facf573e7bc12714615d220d9fbb56e3e9e726f156b9d417", "2922bed0106602330ae8f3318aedc1156a10ae6f15b5b9b735e238e783d7279e"), ("11e89053887340c771e1e729b26f0b2767a682e5f01f45b37cfff2a43034d6fa", "0d53345e3db7218322b3ab56036dba00ec98904bc26d54d7a3a6ca5c859f0030", "0d4c4e43c8303173f233efcde56d2c0adbce03f0c5d22aeb34286bd213052bd1", "0bf9150f9c5d96fe086c4a0423aba14f91148a9657c49900e86d50359433dd88"), ("016fe75bfce109a4289162c9c0927d9ae6aaab48f80dee7ee8588b7098d36437", "03eedca04980e6d83f781e7d71e3ad809b8ca06e264bb16f99effde0966c2443", "21cbba71e2bb2320d01d35e228707451cbac2cdaf1f655982f5965970c6c6575", "27d4f5c173e686c4498afce704580fb4c17ea309ee5410550a18778987a0e043"), ("2a188ae45420b0a74fe951929e20b2fc48d381be8632bb201067954e29702141", "2d804fa90aee5d8ae30a4fcb645aae6c8b4280bea1e3d21db36715a644e632fb", "1224dd57bdb1c58d59c6dbc4e9c7c2fd107b0ee098d6a8673a32f611ede7837d", "1fcb5361fbc73e5e447ddefa6f93a778e064a46d2cab49955314cdc33b58ad2a"), ("2a9655e54d3824d4e5f9d07fadd3e5abca818943a51de9aca676a5b621ce4ac1", "0a257870880523fb170a1d149fe97aa80b0eeff018f63d7c58efff686c557925", "25a2eae1caca42ac7a266f25a477830f55aa3657a5ec205963e4963a353a6d7a", "09a3092e4a3e8ed1aeaf9a687a817ab62c197883651d93292001373fd30a7c5a"), ("047a03b3960ddb03ae0df41756ebe5c3575fc0d83a3c075621a659a9267f8054", "159650279703d53a813ed4611f265c9eb001c70f3f1150e1bd763fd77f62a58e", "10cd1925479d7e67e38de9b3d8cdef83d6b72046582527038dbffb5cf3f51b58", "1b753106f244d0c8a3c08b17a1c7beda90304afbda7563453a8f8dac98187ac0"), ("2ce35ac50f65b4ce7cec6f618ec14fe6207a9eebc434531618880f68e1853dc7", "100c77d336f83e9f650429179d0f61842bd167fb50ea0cd09c0cc4b8cfdec55e", "0fe40c815fb526d063886e8d49b487c50f3382e86dce701e9c22431e57c34e9b", "21a4dab3c6c2d7a8d2e3b2cbf5970d3f375973714b946f3446e9c76aab9d6d96"), ("0daa074912d63242cac6e97976984e3d0464b8289d0b4773177a5f3f53acc726", "1b56d0af1c1c51cb1876bc65f447d511521fbcbc2cd568ea7fa61563873ad2b9", "0f53a41539f12054aaff2e3808c744b868d61b72509050cfde3f072a70644c68", "2be8d93e78ef32f4e99dcd5a8cbd035aa3c97822d0f39074e751bb97a53acfb0"), ("2ca6cf5aea0ee5656d43081362ea0595f969d7dffa31d2d5bcd4e69d6d5c320a", "1bd9fc1587bc240d128ea18fb11dd60402fc5dc535e780670bd25c975e7412ca", "1a2288d91d25d6d01f0f90abcac5555023147c1e8bd695691897417e57d8054a", "10b63e823e549b2835e0ccf85a9b176f78999ec778db8496a060225b97af5e88"), ("09ae3b53c93d8a6b0e672a6217681b0ce3f6578ccca98e79c5057bfe06a53aa8", "28c08be88a5702da7d6a3056ff4194687b48803ceb8772336b081c4205ad4fc2", "1512ad482fbcb58cf678fd3b478c115a370e3f62c343103c36c67379e7786f1f", "14efcc67de2532e7d2f0284d32cc31fe7e97f8f2cf4e4cc4b97c21c55383b53c"), ("1fd2a65ddba7b4f3d1a81f65b6a74dc7d6b0ba9bf26ca7362ef5849a06a4ea6a", "2d39f3c0d6912326cf819af3dcee42d1827a1960965dfd5b2c6345a9e5d370d1", "24fbf675d09a186ae939c6f68e423865a96f70affdc48b540dcdce2a52427678", "14aea2880bf0150d6b69e4d3c55b3f7830ed26dd51e9277edee330639c466b4a"), ("1c326f9cb58b6b06a41f23316cdd3a517ab1ae4302b92093ab53d21f84e04768", "141527ef0146c2e184ccd0b410c428b9dc0ad5e1c4fabefd12ca49214bc4c0dc", "17fd02108870300d6b1b433edcbae406a99c2ed85cfc447c98c96a18df5ba609", "2aa21d0c0cf1acb6005629f8378b7aa342d7f4fc3429d29347878a8a9789c4ba"), ("1d57c70d4a93290664611bf4569f819fd234003e0d77745228b434378ce4c93f", "2f2067c351ea2fb5e65d3dfb0a5e6eea8fba0d3513eed267f88163e9091d4831", "12f39ad48aea449b507a3ede5d78a04f48c7318c5e327a28129dc31fff137df1", "2ee302a509d16dbf4d1548045a8693d2a81335f968e302bb07d77ba6e8453b1f"), ("2f33b123ac7e9be096b7007315cfafaa9094d703b9a287560680d8a315f25f2a", "0d49c186bcf09168fa3434534300d28108e27d0a342bf1e631d3efa42634e580", "15970ba68d3aee544b5930b3efcd34758f38719df3fce1a3813de8d3ae0ab0f2", "07ac6a718d5d6308d996172ed3026b899778866629306619dbe86119347bfb13"), ("022517e0ccd13d0977a4c96600d1ab0382c1e45b2e33c4d2753da39308ac475d", "254e55f206ffd61aadf4ff892183c9aad0a92965393f21896ca5eab2e95ef9cc", "0e267b3e6eab3de94050a7a4382c592bac079ce046687bd1a52f66bc238a3406", "18cd4ec268dc0f76900b744030e4d033b2d2c819c4a2a9a3e7ef098cfdd8258c"), ("10098c409d8ecb00e5907a2659b63778efd643a3f75c96ef21d8b877c8ad2f72", "0d46fcff1aa8e3df0b70a8e86e940e8d55f093826edd7b61aeb03f65567b5de1", "0b3c8028b6f217c2a51e92992d4cf17d21413825f221670b356c72d1bcf5a68c", "257705187ac7eed2b58a828b7f661792388f9216e84f7863923855e39e72ebcc"), ("2d2cb474fce0c1e0449c3f9378142d44176feeb64ceeebf6c28e2e8c7f205d05", "282fbf9fba0404865df6a128faa6913cd1bde2edb2366607656e3a83694494f1", "20b4fc0359c80c10703c8e36cf4efd17488e3640ea1fff6b2c359a0aa56f8c7c", "0398deb5161d35361ba258248ac1788089351f06c18afd5f37cca805552e7211"), ("0aa1b14dec455b30c3cb2d82b9b0a75740fcebc199c1f977f057a78021d350fe", "189d8a86752622fc96807dd060b32d377ad89523d9d90d5acdba5ab8a70d8e1b", "1b5b52e0f84a0e21b78e704e8626ddde28a2ce9a682dbdb0404ce628afce25c3", "1057bd83df7404c8b0cb223d4403168847eee671e37d5056dce64d4666a1f1db"), ("0653ce28f79c8cd61d5f4be0f9121d75ac3bd86b9426e688ee6ba412cbe791e0", "0233eda27f69cabcff550649cd4c5dd458b3c943ec188db772e50f163e90f4db", "0e4f7dd94dbee7c9a3e61a690882db087fb20487390f445f6b177084c8cea3bb", "24b4cd9b55ba0b39955870da504d9c7045be1d1fcbb9d53214c93e0567c3afca"), ("15161290993a25562d24ce476bcd7f082ad1b5dfcf0927bd5461016d476c4ff8", "19473d746b25732979a708532481e56f738c7f37ab97f3e76c443e7cf39dea09", "1fd13a09fdb4924385459913a9261ec69267aa8232491acbbe7abda15507e3f7", "0239f62db0517efeca34924da0c4853f51219aae60acc7b6c948ca1c63908cca"), ("15dc054258ed35f6a6f8d1eb371e1d1697dbc0758bdeed2c33bccaf605dd517d", "195e6e98d432356e58c31556488c3601a7fd893404f7fe2e231443e130163e2a", "144d8a51550768be03fd683982e9d474bf5078d7f9a5e96444a3f13a78bfc6f0", "285eb3f9e43b8c82903ebc827e31d1cca58672df0dec84377aa32539cab8e9b8"), ("0f958728bf7957fcd54c8a32c46517a07cb697d91c0ed324cd5ab0ca1a8e51da", "21c2706dc985a97bf9018c0c5a34471b0318957efece9bff5985c93106c1a484", "007d4124cbaad7913f65404a27f3934ad9f694a3e9438ae43205c916d6464fe3", "25980f32d9ebc1c1dccff80c0a0b8efc42b9c87231f83152609e912a891c73fc"), ("041df8d7e9d033a79173aa9291550804338b23e888b4c0f3521ad93f8afdb13b", "212e6b52b94fed15a2ccbd9b778ab60d812c650b8df73bc2ccaf78515b4c49a6", "156bfd870d57ea1b6035395ec495c723672f127c6f89fad89d4f437d088c4e3b", "29ab2144eed91dbe8ae80b67a19afc33a057ba00ce11a6567250805aee1e9f18"), ("1a1af0ef60745de89a8e03a388b515f16cc04fe1b7a414ccac8e112fddc6eccc", "202a296f21347aebd66131e3b621a6de5f3e3e235cdbb7ff6460a752135f4f4a", "126bad30bff51cb424ad316219e1833ab542bae9f32c5cb80f37406b47552bb3", "20bae06f6c9cba00e13738e3c4127d74fada16434f8b58f1715ed364d9ff9e70"), ("081efaff4bc1005e564247b33179c8907fcb1adc819d94cd07929e9f9fd51440", "28519fe989d8655e6100063153462727b0fd9ed90da3f2b8cae02a1631518193", "082c5906b9ecd5290febd7f1f1e149ff5e34cf33ad30d8cd48cb28ec2424ebe6", "2a251989d5bf865086bc864970f34e947cccf128cd46e4523303c73bd0ad7c78"), ("188a21ab1ecfb58de176fc1c6bb83a800839c29fd88ebfebfbc618f151c0d2e0", "1dc0a17448c1bc83d4b58db9ac86ac1a173b8c55aab36735e1658a4766ca5e35", "2bbb85819dcb80b383b604098e9bc6ca3bc56aaf5ca0d738dc30993811ccf8bb", "1e53b59a5ac338d3a494c7dbef7783998a6d146fe6e9d9d18b4888182b380a31"), ("273c6d1ace31e8c0d7cdf390e70c80a1764445d90e9b5b08e89b609a591a5a0b", "0683e67eaa0af3a8a61410dd28d692cf60ce8ef4f91f6e8f516f8a809daa10bf", "2436691e24778c8b08624a31b437f3848126c3c1c6e09fbd8301038526145e29", "026f955944d287e6d03e2251ada79cab6dbe47ef83eff30986799e61a287e869"), ("18a5e0e632aa3227951b2cb69825b5503226c7a50a800e6703047e727262e1f4", "01dc68562e8387d51bf88eeef2f0a111f99580285aed22924d559cc966e2cf10", "0e02ddece055c2a5bff52e0ab130aa0bb8990fd511a4b06bf4444b12b71a46fa", "2d8133c3975144fcc94475771056136dea60a083a7b480f6ab8d48956aaa77ff"), ("0e4d51496a3f7e884947dda203bbbc79e0bc01a8f8ba82df0996f152df9afe55", "01c7a470835ad5937a3a22ecee0794b505d2d266355892452e347bd3031d3468", "17084c16e1c385a6e6365d26218db75591ca451555e021be433cf9028742aff5", "1c4beb2101874038c4102d9b9f6f12f66353ce2988ed9ba4fef489a2c43cba29"), ("2a2e11fcf843ec24e1e605cefcc4e1559f1f2ba46501bf6234bc4c9caea5fd8e", "099c77536f6972d893f454f37e393d3136bce420c9c8cd6877e315d59243465f", "1ac04ccb211afe06abda289174b948c5c50f646a600c3fe1c4290194a1f66d9d", "22cab59b2fca8b341de03c7f7ccb4e5290079eae7b13403e0066a83100f5ef6f"), ("09e07ad928b83c937c3398fbb97b140689b13b661b00c2cea129f2a3ded24b92", "27a7a686a82f034c08f55489ba74bdef6a6c0f6fe1eb0997ab9118237d28ee28", "1664fd3d9e82c984e733bb64820c1d5d31ec90b7b822393cf06311ce86e784db", "16b61a925f7ed621c664110bc198896f459dfd367d960ad86062c6b6762708d2"), ("186e4bda21c69cb8dfbc06a57140825a46e14bcd3d6a4712973e0f99078bc534", "1b67cfbc9aef9e55e933833da59421097f01cde6c4d83d89218c3e87d309b2dd", "1a580dc778c85d5d2fe85a8fed73575ac0c879fd1df45309a813f71da9dd8d26", "238db318f10e57f831ef53417304536feb8392458fb762b82b45911fd20d3e43"), ("0b957f1b5b9dc380550b5df059b69261887b22808e8aac26c337936a0f0cf0a8", "05097f50dbaa0fbaf839db23c76837e02f1c9bbea15f25faeb43d8b1a3765e2f", "16464aae2922b953fa83ff615c0aa173ce64b2182f6172f82a955b8149e8a22a", "2b56bf2e8287c53fa3447097052b90030c8f58a9e0b5f61392c14d967ba6fdf9"), ("1c0d3ddccf5fb23e03162d4b35993bd3ff19582d55f6a4d71296fc443786fbe1", "151000cc7efe85d6b79d88482cc9d8ba4973e7d9937e0c26a4d7860b97da1a44", "13fb91329960f334e75e3c88bb5f4cc8032e8e3572cb841a5554d32ee52d8bcd", "2522ae95763e8f5285742ac00618e8313049baae88b325ded705d676d8fd26ba"), ("20accf6ecf96f9805ad05d03b1a49a60ed61fbc5b26e9faed7bc1c46ccde372a", "2fe78553de54dd74144223cbdd2313eb0e21ce9c8227230bd562123a43b5afc0", "10f66d597e5d700bd4e729c9535200396fda8668a35f25f04d04e17ec542da92", "09d79c8762b2727fdb2a519aff3765d1a1147fc0b807f39dddf405d02a13e02b"), ("0b63e4e1cb0438997c0198ed2b54834aac5cb34828c04413d4fc93df17248137", "0748fd40cc343690012d8f19b53276c3595065e0c48ae2bd63079ab83d958136", "2709b4f72003437071939cbe0e687dc5bb9aec9edccc6e1a321c3a27054572f2", "2b332799a50ee5c72b5dac1c7ddc26858cd5974e43b74f04d0fbd9009aa6edd3"), ("1bfb8a1f7af532ede881583283db543c2cfa005bab1f61b66f1b7d420ce8afdd", "0ae46b8c4b6c703023ffe9d03e84a092c70e1e05f87b13cf4c17c356bbd63796", "1ea568eb699392c876bebedf668cdb5b120c45e989c3c5fc80d2e4ffb7af4cb0", "1fd17b745d073ce4157a15f458cbb96e2b36a11e70b023d4cfe5196c68bc7efd"), ("1f24660394671c7bd92425504411bd4e4ef1ae38d1667cd0c4cc06b74e3f325f", "1011edc87a06e0f9cd071d4611668c5ca27c308ccee76dc2267fc33ee790c544", "10b6f24842d172566d9117afe86db2485b22035f54bd05d3e96ce68cdbfd2b97", "143744b289ac8437c67acfa579e4bced1d97172602e2a3ba95d0d10796f032cf"), ("26500d8bd04a3344398637631be26ab73bebeb1777779382ceb0af3da4a8ff6c", "150e4f731b1fb25cfaf79400361b7dc714ec4e7ae3812f721e702ec8df3b7a5b", "14194ae719af2119f796b75e2dfe01ce0b8c950f2f6db3d915c6c6296c65800c", "255ac1e354a2860d80a9c9d8b26cc4bac36ebe7c26fa1329fd3457eca8009e8a"), ("1658bf77272bde5cc65f64c12d30a0b338d83f6bdc35bd796749e4d08f21cc58", "151d5eb4d8a7af21128ebeffc973dacd78292e630bc6a0183a18a0b750985c74", "1144e969c45104206e1038d70cad08f412fdd44e2b53af7150ffee0964eb8073", "1fd45ff8712bf371c528421363f4abc0e3a65b86b6f08c3fd7ffb7dc2d01a8d9"), ("2f1434488a5ddd99336a8f088b6ee473b8cb4224862daab2edf7bdc2927001bb", "0348a8f673d2ac65c6aaa478fe1db8ff1ccca796e0a75bca600ee67dadb1d8ff", "2d1cdc9df51af1539d2ec22ebaa8aed0e9d41b7c3cb141df0fe235d261cf09a7", "1fab7acbc8477fa3b4cce64705b91555b2ad21ba94739c004de4a26497312c14"), ("238abc30e41450ce66b48927e88ef457761a09e0bf77be961fc84273d926eae3", "05d3be194d8aa34f789549675b94c873771c48b4ebeb766a6098f7a0bf1fe867", "16a07aaa7ed657e3b89299313a49fdd15f8fd26a92d70a33048180f9a18b00d5", "077597f6c7d8ef0eea47767e2f2cbd87832b55307b598f89f634ddeb5a296c09"), ("23d33d6b02b0a33ec668665babf0d953328b50abf2a7fddbddad8e9cff90a434", "064cd3e001e2b885fbd3630c6ca3ba9bd56a511b617ef92ac5d6af7496f5bfa8", "1fdf9117bd763198601506394f20b7f913aec0402167609678c29f04dd849a13", "1930e74436e1fde17ad10e2c0ec394daf776cb97a9dac0a3812568f15b61cf34"), ("094b7bd0d302360ebbb732a194de984fbc85b42bc5eb5321bf38baafeb26d882", "00bda086d089846380f9a3a2a811d03941e430830924b784feeff38de36fad01", "01447baa2d0ed52f926c13b701d198bd9d482a62d888ca4a845c011b48b09a2c", "11bdd124254757b660c416d87e6f3e6edbad4b29ecfd460830d9112962e96a10"), ("1ac959b70033cb0ed3a23af2678d202c548b1afe7a77ae7bfced855d79bd0f00", "2ed72e08be780f1b783758ed8904fb74a9f0309055b563a9675c92300b1ce5e0", "1110283172c8497d2787b8623860d41551acf296b7309bbe078c7c6e200e4624", "2c325004b41ffc64c9e602d00fee6c133e2020c0e12e26723b6daca4477c9741"), ("045068428a363fdd90acd79aea3ca2050917d712b508028d09aed7379d076f42", "1847463baaa6df0f221929ddf4a934ad0546cba99717b53b7e12db73921bf54f", "071ebd2ca346c6e668ddfcae09a190e61db2dc4a18595f5479ec68cfd06f9c2f", "2cf09b915316f96cf35478a50eee4564028f2b52eee7d6c9ce1651b69a9ff09e"), ("146f4c7bec6552481cea48187739463ec2e3c8f3d16dab86527f39795d60a1cf", "165feb7e4ccb6fa15532f315e2cb4cb44bff35ee2985e0c480ef312b8eb3727b", "10401f7229c5c9537f62c066ac9373a5d238cd97c34fa8ca49b741b343423d1f", "124b9cc5cd5f647552da3131c9b1877ecb84f575a2fe8c8489f2831b9b4199f9"), ("0b520d1180df38f7e0239b9e4336ea484271ae9c891c58d6dd032975c6d9ed54", "07e4d27fc75b0746fc8436fdd947a9dac5bfd5776dd43b9f0172f1ea69dc0ab0", "057515aa2844838b92e8da57e0fcda435e194fdeaecaf0d4cf57b64ec1456ff5", "1b4329750c1e4ca27078d5069656afcbc63a67791e822741d71c1b77e050d67b"), ("07913a889bb58bf99357ea8943789ed78e472eff6a2a79c721fc5f644a959eaf", "084f0a34c3d67b9e23125a551112dc2f010183dc3f1f9efcd822ecef44b07151", "27c121834407bfd402a2123d72949726cf4d6685411263b3f89ece8a319be0c4", "270088a2896df02355f3df7672f09fbfbd16b399c0242cd96fd5dff47f47284b"), ("1b6063ee942de1a3e4534f2c20c2fabcccaf4321991ffd5ccb606fa9a814f79e", "2e30122714756542d2a525e4ae2c1dfe0684b877365d0935f40d90f5026e5ebf", "137bd66133c49d5994ccab397c8374f20c82b956b4072233f2de6f735166285a", "0b3d2fcc9bb93bdc5f2430250ec6dca484554a4661e409ce8b60225274938ba4"), ("0e6f96f0fd611d9d3ba990397297a5089aa7492961483934d755a11be5cc4f11", "1bdc952e4dfa9f611f331408eae11c77e7b8408ffda2707ab64f34ecba8e2345", "2b84ea91b9a97dff007dea895fc43be0413eccc95d34b42684ad5145f7e11d61", "054895c8fd612a9c878d5b1f0823e4976603dd8fa4818e6370c554174a89f406"), ("0e29aa613aaa573e8ce9fb9251d6cb824db8d0af3ffafee350d281b7371c206e", "0ae0d02a48195c82cef220e94a413aa983dab037657bab47aceb49aaf401d5bb", "2a3d21bae61af729922d056a74afba1874756d3c94ada255adab9fcd7735066b", "141b86cd99e342e8fc20cf547028090cdfb86d33b4929e33a2ea3ea56a5fb032"), ("1b3b68effc8e76e97e4c39c8704a534717b00d397f8c87e48f7b3f04ae4ddd08", "1acb577c4274b6bfe753d7f04ca7bd9c515648a85513a87972faf8e4cd268daa", "299ac7272e3adb023ff5b68d7af0632a660cfc47c42816b070982d8fcb7e6978", "1727294a3d34a9c48148e961be3a7fe265d929531a6a41b82fcc3f914e5f1eec"), ("1045563e4500c768686e00d230ed01a4b3a7e3ed449d12ef5d11f2576d90a6d6", "024449381e841964f91d654b125387f63f74efcf9b8e1f59d88f0aaf2fab9b08", "0e03bf7b9603c5ad96b8a638ef8d5b86708f736ed1a891fea3f4bf3e378da559", "2cc1074cde41b66734a70ed25b2b887ba49cf70e93c537aab65e63a4e16adb83"), ("01dfe8bce0fd70f7b00378b489f6ffc709b3c39f20571282a7538ea4183024af", "1954d2e76a899aec157a591879217a777fcc0d7fbd4f723d667ad5e925dfe2fb", "2a4b481fcff5c927378e8c60f47b4864855204552d394bf1eec78750878c7fdb", "11a89fc6eb430cf73cc844883f3a2e4389e12508d14493e39362e7c3f91fe3a7"), ("2d9379ce5d330c9778f9b5c9be8c1dbf2071b4e0e4a49f9ed65b8d50c8badb2d", "2380d405f1642ec6835288b028674c721b6ad3759d56dcc4ab893620e5f4de54", "0ecf0a23034a69ae00a1155fb1c51657cd1c34abbb6aa8893be2dcd3d1c4c271", "01c54d862b5308536ee226982ffbc0d264d94312cbe7baded1b48a32138847b0"), ("096c3ea80c30cb5622d9b4ba0cd25312d0f5fa484357a65c263a2c37c3b86735", "06ff363f29eff97a26707df12562ecda709b01ff41135bb1c0a9e57e4d2a3ed5", "0f920cfa49ef9675d8f40312e211d21bbda0df542c8a23caee581465442eb545", "2cafb6c9307495b4ebf257bd181d926754bb0c059f490a754cd5c3cc33d7f354"), ("170abbef1f08bbb48c07e70b248f87fa4201810beead29e3fb51c495ec8f81a3", "0c05e35e75f1bed542409f9424221e23d61fde77a6d3e264d8e911c968632867", "09b2bc53455b3320bf3378bd2e46d0e8b634783e4d93148dbffe26fe7ab38996", "080a8393bf7cd35d12c588c4ab33fb872e99d6c00c924d81a9a93dc2e61b3f94"), ("1b2f693f4fafbcda00f0cd5c96aa3f86bc9af53c5920a344147ba1b49114e701", "2abc8bdf06ef4667a0f93a38205282ce4b81882ae7daa05ffe2c7e24722c0144", "19318c027e8d7b0a8c4267f8e8d46e38482229a39f425caadaaecb74e0ec07d3", "094f8dacfe1c893ebeb8ede20cd3ec9b4b61093018ef87b6e329962c94b36c4c"), ("1decfea0356a9ea3bca2235c4bb8acc859bf64977679133e50d02722741036bf", "2e61a4164ce68a7007de602429c7e3306013a2c1fcf0b14e947b0a2996348f72", "1cf48bebd9d45673fe1f44443b26f9d0f21f64ada9c5c308cd93c843df48cbcc", "0ab3e492e8506e14db1cb882dc3aa471293535b7c54e3aafba9a29e1696943f6"), ("2f5b6b1da1c09f38389e20de4dfd45b5da5494f4ad5bf0374bf5cf7434a8692b", "1299145eccbe773c16ae55e985684ad2ed6874a9af21a24f32c220226e21867d", "28e09cf951fd205036ff0a2a4e030ad6d159a63c45c34af9e23ad306e3dc940d", "00cb8ab0e937dc3ccac3b9b81e6e2db217ade41432511410031a886d56d5101f"), ("1e81231261469a5d5348d689ba3056f69a82c525183ae2522f07df80acc781f6", "06ca08f2e106a40a58bbe4049d04c3ba94a7091986731985314c039a032d60c4", "0d79724dba8c84f42d366daa1afb2acb193c65e83823a7e2608a8c092957a82b", "0649efcd44be120c0fb5166a86184eefc8d2b84b768711fa8859677ded255c7a"), ("1bc6ba4f70477436222e7bc3bd74ee7eee43e067992b553d86e6eb375474176d", "16b75c2789aa26af1f43c954c6e4ff75955f886de45e0cc13f66e3753da4a972", "173054fa1fb842bf135ef69a88905085a50f84d64fbe6077fc7dfc16007cbcc7", "08dba87071de35cbcff7343f27a0a93cee37510154cf780ffc5e42adf4eed0c7"), ("08f1e7cf03771eaf57d9dc6db266b083b6c6d2efdba078ccbd319ec69dc1470b", "11587362d70fef8f3bee412272fe43303270c4a38e32b4a6413438c0c6641467", "054dfa797d30cf87384fb854e5ba90688558f57e077b716eb6772c59af0456b3", "2e3a2d0281281a905d23a2b3ecbc8fa486586271b1c88bb34e71785aacbdb572"), ("11bf2726ce9d9c1fe2e151078d49d8010f28329dabe243bed563348213b55a6b", "1f3fcd1d7711a7eff37ef355872fa73dd023d437f3aa0a9da5cff00dbf7ec48b", "0963b99b5fca566a101ab987bc6aef386925511a3f3407e67143f80cd494332a", "05c67675079e23ec1e0a36642be38e3d7c162035d1693467ff90c955f6a5ab53"), ("012682b8397430a6b16c3919a6b08cb0c967e213018fd49c7413839e877c5a7d", "2c9d11b6151fdb22b0f7653811cd2cdd2bc886cefe64070c8758963c19e94a56", "1b024b59b2d6abf9b4fc0afceb077409ac6188d493a6d11f4422d1a214b43b0e", "1801c9cbd74be5f323242f52e81ddc3854a37533e565a6b121df3b1e7193ea73"), ("0e7edd9de6ef755391232c18f169b11c6851c6afdbaf808ab9063fa08968d8fd", "2fdf572b1000ab5f10444cd38e6cea44495815ac8e9f2230a0c19e4aa56cbb3f", "12492da004612cd6be483f95580da54ca9eb6ff5e7a12afadb407ec386a69a40", "100c539f26777209b2cec4b8a34f2a02a95fe6412ec412fed4d19a110ee5a53b"), ("1cf57e2ec38790dd49a9d4646f796d051f63c5c63965aed94244e8670b415926", "2646e27454992efb55b1490c53ee8612ba67f7b811ce1a119500a0fe6148d465", "2316d735f7447af4e765dd82eda9532ca68a61dfd683153393f930b5dfc35fd5", "25149063f965a2664c8cec770f4847869f7ab48ba9075075ebe5406259720e59"), ("0f127d4fb0af7f430cc17ff2107e21b5be901c20caf2aa50c04cfc3a6103a845", "0c850f6e7a655139186d0332f6fb18b506735940a3b49f8411f358491afc7e5e", "259d339b8baf6e9b2043b5cea588ea443b702960840e841cb8012b03a88fa655", "25ed11d63b3e9ed648997bfe75db95dd158e0ee64dcadd495f6b04512ce9d25c"), ("1773bd6a91802999b9de8165c9c78fe771cfa9af8aa0db4210787519e1ebe427", "210533e82aac370d13d9a7527a904bba43c9a538a7aabe444d222dca40c06acb", "07eeddf38a4bd1a2ad3d46b6347c8f33e23100b968f77740f5a5597b364671a1", "0e10b5064273831fbb7f2592dbbc69e798420d23d8b1eb0bab833a6b962bf5f3"), ("2bea7a04caf22e97e0db684cb1448bec34f776923c16ec7a7615efabe347e8a4", "2f78b6860c483e4e33de998450fc87f79767c6979dd3fadb1f68d926932e73f5", "22ebd64132e25210f32cd83f48a9035ee0e08af3ff24e0d797190190fe3fcc36", "1f053eac6208af662d623a55d8f37c914a9e2cbca164b410b62cc71d792a9f9d"), ("107496893d68fd01de9eddef3b9d41f92f59cd33f26d85c132b4773b34bd58c4", "218cee9469ba938be612a55e74cbf49fd395feec04dac6465f43d9466b6bf9a9", "21da5d14c7c181b6d5081e60e20fb54b7e4b2505c3706502933ba43eb5f1d4ec", "18df0287f243891d01d40c706068d5e8c5b79ccdd5d4904089822b36df07e136"), ("2cb2e3319aeba6ab102de47a37bce88264ce6b5496e5046679ce2534a8f28f1b", "01ffedc8fdf49bbb42ae0d6f3b882e13dd7c5fc3f53c2888f5190cf578208d24", "2808df5d65653920aac5424310dd2f6e189693bad18876ae2c08be5304a4d197", "12b0ce986684484975c5841bf9c495acf21097c23437d1c3b0460d34f2ba3e3d"), ("04b136f0206671a753a90e0089d0c2ccbdc04bd9659171447b7411f78641ed8e", "272a6629866deeba22bb4980d4a53e8b8448d974a51c64b7f2d6372dd0ec2457", "2855686c4c4912323cefc08b80438252efb96e7b107d07a7fae4cb07b0ade189", "1f21d09bcbb8fbd7907b85592213d5da0917dac8539d23686dcb24b5ebb7c1d4"), ("18c58588a98010a30b1073165cd6685f81df418b1417da7c847744a9d53a7507", "27f25ee2ebb355b20f3e5af9ca89a63b72e777f41a7e4e10c33ffd10945ee2fa", "03bddf2a4741bced4ab7de3302b31fb9913aa5f2081e616a7eb243613a66e0ef", "2bd99dde8be892f787b83a99c6f2610a5f5e96a9945248123e47076fa9d5dccf"), ("1c93e4d3aeb639f66ad9f5a13c1f36b92dfcd5c863d2b7426908b08658404da8", "28d361090cf54bf5b4c72b8a72e5ba9d63d9f1776e4cc0d4ed47c7752fedf6ea", "2c8d5beebad476e8bdedbd2cb05f31ead43578f660a6cc7428eff7dc3af99555", "1551ef640ab2be20ea053456dcdaa01b77611357a7e81306708e8ef7ac395d63"), ("0b41fd0a8d61eba2a83fde8a23322dbb12623b0009f22e3925cddeb4f6fc0a0c", "216bca6a1e728911c79008123e8aae73466272697dd39daf2b6bfdc461a5a475", "2f8493012512d830b6eb3cbb01493f65efa6a656fb0bc6ab66006a4728bab108", "08408748ba4d95171f2ec0b574f25ccdd1d304ea0d3da7b0889a02bd57fb7743"), ("2f853c0c6d6a87578142e3feceb05f27b6adaa9642c996ee6d5aa9d7675679f1", "18b1995dc8549e38c14ea25e148c51ae58af7eb9b453482fff7587971fc1892e", "0c2aa976128326ec1b60fbe32fb8315d8f3e669b07a19714303cc63e5bb1c238", "07db05d4dc87a477ca44a76dbec2565e1a2f40585d96c12c286f07cb4fb488ee"), ("2ed9783bbffab23da958e86c94a4d245c0dbc1949a5bf035f0a39dfcb8efb2b4", "2288a386d325111aba5300d82716baf417db4a7667c1c9b3e2161aa3479b058e", "1734d4e9ac36c902fb29c19cc3c2dda1e5f9b2308c1093246281a89cda46273e", "178f19dde50305ac8d976715fcadc65f3e214493cba0c8562b7915327d92c58e"), ("174345d3453bdc7aeae05da7d7238b219f77df5436f29b7ddc879093a7f7f2fa", "15eac3499d05c94c054e53fe82e3185bed4abb0d9133efe183b1f3ce2ddbce07", "217e183d4ff545cad13fff7a967906bf528433c5acc7a653052bcf269fe43ff0", "012f52be770d8b8851d6a9f65b5c43332494c13304013a063038aba79e33efba"), ("29bae5e89f82ed2644a902944dcc7235e3cca0e99c6f98f2ca60b58550690f25", "29f67c501001fb278cf094174d5a4b69242eb189ebe52b7fb04d68c7659ab87e", "28750bb8542f7fc657093c4f3a1d72920f245258e04361d8b210ae17ef5326c4", "01a9d56e7f61e3614e27f11d29734f108392b77af3bc1815aa8ee55a8de519fb"), ("252adda30b481b1f8c1b06fb85567994a2295be20e24751647de157fb08809c6", "1de36672a3db2a0eb7af5c54c0f0aae0eefe730d1822292f75f756e9f122919a", "0f1febdf3af04fa4f7e40b6a21f4131e77c94c5fb578a8e5c1fccbe232ae4b95", "1dd006e3f37a50a2c2f24babdf01a0735eaa7bf818d54a50acecd23873acd82c"), ("02b641bf8da8a2b2f862415065bd8cfcb191792a10737b042c96a23432ee91f5", "115747c6315b111adf3e57f309bc658eebaa40a6f7905f41479619f89e1b73d6", "29339c24df0c11678b1b4f27fa4b54256b80bca17137f402bf597a106cf2b049", "03110bb946f8ff0af812aedfa0cb251bd055161fde4088d93a4c279e28892953"), ("0a9e0646a71f75b94f0adf5b8a28205adbdba35392e23a12522457fd4bf59a2c", "21eeb2419037c04163eda16224514c00863e9e61f11d61bb7d6bca31b4e3b32d", "1a078fe1606af966e3766dd69d8251e4e13a1fff08a2c03579043cb34901299c", "038cab3484cab688e63343a9912bde85d82fa59c01b23eae873c9a4688eea5b7"), ("13c3135fad42d849cf734245517656f590c7ef1b63df0165bdddfee1d1fc3889", "175ea265d630ac44042802ae6b449dd32838992e5de434395a981df029045046", "2b60f1db4b177e188e6d2bd391ac693b7f4e6e90fa6d53d9f8ed3721824745fe", "1e61517aeed7c31b55fb2809f2be06f2b13c23f90a4736329cbadac2888ab5c3"), ("0ea1a3d3558674ead9b9ee6a08969a310499dc10abdd518c8b6eeec729219905", "0b5f5859cfd43f198c44e16215f0ec4ca6fd0fe2967b67beeac837c09a30c842", "1f62579e49dcb93f78b3fd2cb59148fa69b11aeb986d440478f7664381aac37a", "2202ea4e1391267baab35c017772f214f4ae7848f2bbde3a99a1763d8e624117"), ("0c1fdea46b0f5d6701e8d535acf1cf573ae3dafe831102fa0e8bef577f454d63", "0cc6bebc12e592aca2dc64b0268207573792fcec77b617a84556b4ce53def952", "212d090a5dff1fc58c27c1c8cafa245de8c545cd0e85fe87a4da5f6d24c0152e", "0a3bd72153c162777404c71bd8af4926abb39f639d2e3f805f139c5d519d894f"), ("2cfb11f04c1523d9fc28298d00ad203ca60222de9526d4f0f92eb9f945a26edf", "176bb9d5792a032dd63792b19a67f544cea07364af8442b0b07ac544b6648bb5", "21d0df3f3c250ea625e4d120f0a28699dc95a707549e907cb2ef13acffaac301", "10f2dbed9ec74efd25c96403cd94b34ac12c7693efae7737192c84f6b5dc6ff1"), ("1c7d35e062e669a9d88c56ea18f721daae9f53847d8976e8226986bf8710f663", "0c17978b88aae0bc255ed2ba9e283ea88468f7f335219242ad9722dfd73c0a34", "1953ef9321a608a3925c2eb48347257c7c9b199fbd7381f4711bba928f14936f", "03e03883bbff725c3f947ff50e7ce245cde33c3e13ab107bddce8d4744f1bee6"), ("2d7eb03f18b5769df8d08793857984e6c29b34153259df83e5e315391733979b", "1cb336c6135b8caece7c797b1344984e296e9481b094749931a1e5af9fa2c9fe", "2332293280fc5a1d7c09e31bebeed968fd5680b1eb47ef5733fa1f41d9dbed46", "1a0a854232f3afe162f07c2b6dad06363f8da64f3e4808d04d9a83713e5db302"), ("2d3c7c464f66686b66e78bd0f88e3a43644f5d777c42d37181de388ad11cccef", "25fdffdb6a2f67aefaf52336c41a2adcdbd4ef22c7645a1acd2b7cff3c1cfc02", "0b6c6c2316298afba32e9912d2efa661ea7eeeeafe3af8ba29e50ad55e213d66", "305373ce7016d725b1a64439abc6af9aec7e40c64eb3fca01fda2ec4194cd20b"), ("12297acd3eb163b020f914619210c9ccca3f094346931b53e489e588c0c3eb1b", "19c72fbaa4fd313b731a8d47c51652eb1432940b95e3405f52ced95ee7911bee", "0aeebf1570ed6e2df5c4649b83a490d3911bc72d1b478d96b01b7de8a24e0330", "1779ef6ec38d66cf85a8c4b12a915478946ba8dcc34fcb021cde8aa6c1fbad6c"), ("1270c5ae615244b12104941232bb163566f892f53cd38d86bafacbd16cf6d0b6", "1dc6a7a6b08239fe1b4624ae48fd97db36ac3fd04addc04afa89dc9c904b7cb6", "1c051ca82269823c9995c3b98fd5686b8ffa0b2936c0124631cc3c2a90f1e38b", "056d8ed43d75998832d3fc5debb445b16cc0216501414fa080ff6490f194df3a"), ("2efa1f3aeb2096fc895ea12a541d826ba63a32d87c2acdbc98201b58dd962d52", "2fdcca5da43ac3f004865b92a9748dfc601c2dcef8fb4eec6681867870f64978", "15fe0ef21cc413e04fc79fb992f86389ef2156e94877a8f8554ad4d59ddfb8a0", "1de741a283e64d8587bd14f5b355cf27d1cf94be554cb616918fe92f8c683f9d"), ("2dd20828270e7e4266feb3533b642b2fa29accb2e5cb5e90a62b2621b7418c77", "2fc4f1d9a00f395d893b12a7304fa271c109d736186e417c0c93c3e66b9fd844", "02fa182d9c388068d40802fb0fe960438dc30d2446824e205662e9612533c772", "14209626b27fdbb1d721b57b56ab5165f4c2967eab52702d0cad8f1e465badc1"), ("09f2ec6d1513490228521f49593ddde5e9bb89aa16708c784d43c9ffa917bcca", "13396a096f0dd7e613dd190a2cc0b6f5d1150d3e68607450361beefb84979d32", "106e42d6abe47ca516c60db698b12a99337a6557b0e5d7fe70d47cc63ea0ea32", "1a9ed6b612bdf5aeaa18c6c453363e95e2082df7b3a6a4085b68719842d1d60a"), ("1ac1365c9451a8456f4abb8b0021b02edf809114978b8e80da77f8c93eb76048", "21d00acdf9d37730ecf44387a85041e18a3f060710245a6a528734035d2632bb", "20fa4a3fa6692664dfaccb9cd2c0c9a24c69999de6f231958b60d32b0f2481f4", "0ecc1777187eb70474506e20c4ab7a105b85f3b97086614b81d977c53da46c7f"), ("05583c0c168afc6249a339a575369ec824504c2e53f85c4a816f6c2cc2b2c77d", "1d0abf050f79952728c77e9688f9481a0ed5a10b7f0d6e85e16bcdd61eb96b42", "0217111c72b8c18311e253546bd924c109de585f4749f43efc80e2b7f16e13bf", "0af7e206f7729443e758d685b6ee9ff820056c5eb16b9492264cea8176968844"), ("1b6504865faded705f7aa5432620f564bb1120bfa7c10cb4f2053ac8cf73d0d9", "19d034e6cbd1772bf33405dabd9ff383d83f009c56ee330c9ecc839aca922eff", "00d1d2829cd091f60d43a1256c4c59d649618b5ee50da85cb55fd0395c64535e", "23f5cadd6138631ad760f6d1168f8e1baa902773622376ca7f0a8d38bb1cc367"), ("0810db9e686bc357120384f7cc3befa3e014f7bc4f2e72ebd76ed89591aff436", "1d7dc0cbad78d0592c618773c454dcc3dcab0d8f07d574c4ed4eecf77fe0fab1", "1af303c6525c637fec8d9fcc4184a112f65b1c8d5735ac809446d5875f574e5c", "02c355c18ff38886285ecd6c3a6e2cc3b92c3c6e2795cc4482cd992fc67473fd"), ("2a907b01f07fb0c7fd9d45f25df744ad3c60ff9ae8e8e9ba134e55b3d84f6c0a", "0b973faafd3936ec39f2d1f29b490156b8e54336440557bdc83504d200430a4d", "208c17baa8a4bd32c260c6a0a8f8f7d909485d4eb79b902cd6aa712c8b751e65", "24518bb100dd6987adc4e5d4b3b6d049395d6d9217e6d3a4f62065e7a0e73b24"), ("255f96acf9c0bd3b69565d21c61cde91cebe9e16666ffd33de6bc2aa951c8717", "2dfc63caf721ccbd74e3deaef8db813f2f9501019cc62f34d21315642e8770d2", "079d7461f9e2ae64d8f4780bd147676a41eb4a77a2090e622ba7cd72871dabc2", "13d2184ee9554b8b83a787d6b77ae7130f467398ce9d1144ad91d30a4c26072f"), ("05f24f6257430cb281a72492915cc5db1528b601501c920f5d386289775daa54", "30183d211c9ff96d4beb075dada7a8086ee547c0b8e21b5d708d36fb53529346", "0cd9f4af91a153c48529e6ce2dc216674e414f1cf2c5a377f4366789dbb9533a", "2659f9366f577025a7e02c52c6170d59feb72d64bdee3d1f287f81012a69c003"), ("2265936636965cdd28334398c8b7c85777793f5da26d6f694be095f20f016904", "015f723ed3606cd7996e731c0e17f6ce2b5a7df8552e6849047577205afc6434", "1e684bd10783e73103a69798405cf79e5a5efd8a17cf1406c11fc48afe44f3cf", "26156570539a661d6bd16f1606a84a6330b42a97bffd4b77ef10d9670d590f2e"), ("27b596053a64028b8d3cae93d653f87a2929a29786e4db8f4d58cec016b4a353", "0968cc673972f69a2428ec67522bb244d2fae209377559107f4e9f749071690b", "1169ca259ec336cf4b66025332fc7d569bb90399c7ca0a9e72f54465c2c76142", "1a6ae9be7ba0e0b2b390dd0d62ac4ef8c64ca49ab7ff98c95aec092f969acac6"), ("055806005d4fa75bac632ccf519f26ebb6db39f28b80cf1e604d3f538cf23741", "0bc1eeecffea6f315cbd4de22183f7590209dca29a38b81d21a306b31018d741", "062b027785946e631333fd412bdce0526860b2eeb2dd3d1c9885aeb29ad2f2be", "1b43cd90475f8a5245313a144feee08e9a9828315b69238aa865118269c3a3c5"), ("046e1ba3c2a9a9c40c6224eae166c4db52f0b699f1d7810a48cbee9c01a3b402", "20432734fb2e478168b345c1fdef02621fccbb2909e9a9e0fe2c9769ba908224", "1bc6be3f36c8f00ea100749098537cd89d3a8f6e7232c8f6a75d1528a7ca6c0d", "2364e60bd4e4e8b946bc3edca81b8659dad556e76201e3a33db9c833b1a11215"), ("0551a657851267d2e575a827a5a16b16fd7ca51f36543343e1fbd5ac7d7cc5f6", "10797406446b2501e72479ed85cb2da24cb4ad1779346c0087116486b400d821", "09f92ff9b497c8c95b67d67d543972336ba8e8ef1b9a40b84ed62581e0593850", "146c51bc5b6a35e2674dd881caf91d77f5eeb60fbf8a7d7d17c72ad31bf43912"), ("2f15bf1473222f37dbb56fc903f083cdca92f1ede2483cfbd153028d503a30b7", "26f700284a70caabf390a27eaf1f878fb21ef42b37217591057e6284f8a985c6", "11cfd75696407b1a4befaf130beb62124739473c55ef23418d44cb2b1bf565b5", "024ac83196c2092d6de15cfd16b06e69748614c7bd3f9b11108d84d11026f499"), ("23a2a271e35c1fd8fd75a32ead971bb8a48d9d4a5159f598d23cde63348891cb", "0205cd737f5a26cfdee2eab24b8327b9ecaaf3c31476386768bb32c6f07559e7", "1036f34fa3d5b45381fce34f2d937778395efd98c06b493e801f8c6a35d0cec9", "20fbcfae437c23c1f4bf5b737bb136d59e3e6fdb958c8f375653fdb1f809478f"), ("04119befb9748e95afeeb73bf8b2811d007f0e7c864071d1c8a235026a5ba33e", "1ba1e0993270a4804818fbb5fb34f1a461711b0fb82ec030cacd29cd69cc1df3", "2c540a61e8cdfa390034e0588dc15c41a9e3a71e456c02e1f7f50ae2dc0902ac", "29b15b2854529367a88ae050d732a04e294ed66b313d25c884d78c55614492b7"), ("1284ed023e66272b9f8ae43038529c6dc0b2b1dab7d9c3409f4d20c66fdc55bc", "09574cd023311a55cf9c0d83868294a527e88306737c83099c3b25fdd1beeca9", "2968233ebd2937e96298f18c7e7666b44f275f6b816a75c57bdb536ce20dc310", "14773747a70c11c5f8422c03d450b6609f106fdd7750f67ebe5defde44a53129"), ("1c8518f7f92f8258c7b6dc00908c9d7406566b888701d385906d8ec93868ec00", "0c31b4336485a3743fe150b205f98adc530ee6c9552bf127f4e91d4f61bbf13f", "0d3a9f6f0682a4961b1ebeb47862b2ce2139ec1493e1fa9501e1b50d6b52e4d1", "1ae961b75cacbf8b31f955dbbccfbcdfaf031996ea695684b934734fd70305d3"), ("27940f0ce073f1ae1cda64c5328b49b07ed467081a462b6887aa338ec97020f4", "0d5b3f504c20866b243e7fbeaf764e1e64c2b71e4f432f79e40ec7e933912af2", "17a784439fcb0062771ff8e923f3831a8588ba51e49eb8009f7aee262ba1703f", "03e230a05cc4bb18c819bccdc473793b7d3643efe71b68fb4ed407711112f62e"), ("22aedcd1de6705e11a5333bc6d7cea45db9cc317d316f8fa2cedcda9d8796b78", "20becf453ea961f11408ba719f19bae06d0669c2540560f7b35f670921e21198", "0301fd7346cc34c3479afcc515db2ecaf148f83e3858e090e64879f8cbd7f591", "041166f26ffeb293dbfd13253724d50cbdd07f423fd6a3731bbc6c00f05c67cf"), ("05ea7a4f53765d4570bc2588913f9aaf5e44057d77042cea5ab7959de4b122c9", "208d64c98231f0d922999cadc0c0d852e2e7ea30ff2674cb1430737bae0c6ba9", "13f966c9f11826c364b5f2825749668eceae3f6ebabdfbe0370f9d7868da32ef", "0dc1edb2b731744ef347d1a9a0affe48ae73ed21196d7b61b67f57e7a7e3d803"), ("1326fcffe644e028336f05cee66d764d954c0bb427f6a55adc60a854673f201f", "2604c5c88fefb4ede6dab9815653dc6a950e2987b8d55ae6397b2848c2634a5e", "0527836cd3b2afc6bec6339810ba79776e3c56d9e55fcd54e87fe6c4a1a53066", "0caa9438258d1c965b98f36d2a9c85dd327817f773c118774f14b7d35b0517ed"), ("2182589148133a7f832bec74bcee17f385680b5643bcfe049c2e8a4eda002ddd", "2cd819daffef73b0f487c85dcbc84d8f1e57308748da70f4f4db43a3f5624f4a", "30549690d8f4bccdd22db236e89b16da63b13ecbbf69d186b05ede26ec3bdfa2", "192cccac0ba8b0eb3a07f4071fd742d138b142fd07689ea1fbde67c41ad60f98"), ("26cf7955fc1de50428b6a35579f1e7884e601b30f11984065aa4143016e68a4a", "0201b3f8f7e72d53daf8316c7e1f773749e18abb6f91616c474ca292245cb15e", "177965b3a8544765919e60c8f74d6a5ba89dd79171467fa9e3eb3a52c267f5a7", "245a2d4c298df9a290bd5a909d4bb94b4af04bf8cf95022f9b568b18157b3803"), ("1b2d2bd6584f7ab36a0280ee2708232de7c6730544b1d053c3153b360d4b30b6", "1bb500b0e42e2eb101362dc296c3c93ed192e80853016e815d8be701ce00043b", "12c9ca51deb0ed73dc97b3a9a6af30f384b1bcee9925205dd952cf7e8cb194b9", "2c41b000349ef53be52280d9dab09196cec3fbaca3d773af326fed47aabf4a72"), ("2b73f26e44c878ca5684e5c5d219c63fecd94e8c7effbb6c695aac1d95d160ca", "280b4ea974dc9f38eb3a7b3a29e6955712e81f4f5e84e97e0691e4e478baee18", "1229a04ea13190086ce7c03e54dc8183e73809d565cb5b17e89bde1167ab5e87", "0578c9fe75b222da69b3ed21bd259a123b4a467396179b15088f6e53f8125d67"), ("08319bd26b4de1255f05851df7f6e93a657e64bb5b55ad4dab2ce0352efdcd1e", "0c22f87fcc752c2ab73019489cf93c1aedb2a5840fdad35bdaafff9606b0606c", "2f1ecd0af0b8c5e59d97f8e372945ca67fb0c7e3aa348ada479b86f8239338f3", "1fac817335242ce88391d85dc03274c2c5d9567fd53596fca1b1f27b1f870914"), ("2712c739825834742c2d22663535bb86a55149be2c2405f70492bd568d53c98f", "1351c28739f3be99ab8cb342da2ec8a2d94b583cf9808076066bc28cab1ffa8b", "2365a91994330ad44d7056e3dbaae8c15442f3ad5636ff0d22d21f1790f4d153", "1e1c5e53597fba73f070f802f75c6851423acf60451d48976e6c5fc088d09032"), ("27d68b553a19560bae089a7d7ade3652246fbe520b1be3d80211b58ce2bda561", "19ad2c17f6aa8db295994ffbb0a9ffbec9088179e7085e13047ed730c5e7805f", "2487bc0c0693973b0d19836ec3ce26273b034a012de0fac3cf8e33319c07ef28", "0253bb2010b0310fbfa6ba7d66d67922b1f1749e67deaa1b2e138ba0ad04617b"), ("2252ac29fbe08dea33ccb2e9d2bdb4e8cad6c5ab3e112eeecc54a982169dbce9", "22bb11aff2cff16945fc826cf5967a5cbf2eb90af0ab641b3a4b8caa0bb997c1", "2ff22c1606ee580feb9bfd27baeb80c43be895d05a0970f76e798350ec3c3dfe", "05bb7596398d17db3eeb27af0b9ce1e30ef098386ecd3d6c8a2f3256e2368c73"), ("1636822df3b8224ef2eb7217e569d2d763e7ff36dd806d383e1211d7faba750f", "06bc8ac394f54d9b497c5a46872ad59a1433c7e74cd4c811ee9abf6aa657c304", "2b2e9f9df78e6a85560c454578d9fa13bbc5573312d021024f3b32bd7596bbdf", "1d11e9055c3ff085d7fd6c854dac0706747318934f53ad368f02eb5e2949a62c"), ("2ec82d4a11a44f768f7f46711965871292e4385433fe3f78e1d4a95c7fdd5512", "211e6528e763ea63042a6d69d0a335ecb584a9dc3558a7adbf31a154abea5118", "19a5a8a5dd9240615e4450b5a7221fd91fa2d1e8457c3feb769b754e7e83c91f", "03d0bf293e4ab2cfea3c97b640bb942ad66346a17969934e3ad56e2cb251a630"), ("19d5719a5e342f5ddab067f03fea78118d4594425324bc411e33ccd0f92662c5", "005adad9d43a71b895883efbe8ea917bd37ed83625c8b65bc82e69eaf7fcd131", "14a189c461061e6e2ef62c47bd9612346c45e62c285eb0567b851285ab681a9c", "0037f89523c78e39cc923e23776c0bd3aa06293a2b205ac9f704dc2b444e5356"), ("243b520bc335b0db246988903d6e046c6b8ba1caf5e8edeb54c47e54b4ab74d3", "19e1eda21da9b77e9dc689901dd0bddfc57d0280c56ff236b1c02522e8e8c0fc", "034ab4a86865f8081cf486a5830ca048265f78fd08c21e45078f97317a38643b", "02ecebd7f5cd6c74eae4408c2bf1aa397e1fc052af254cf2c0b68614b9cc7016"), ("18651bb9acba6855bf858d2097ce1908c19ee98129f85141daddf6475854177d", "1fc3e646197493734c56cb013f5f93a2803417060f0159190e5626049bf9c10f", "007b74ed25bd0229ad8e2eb9468b3e959aa0a4d500abfdfd083661486e486d06", "069abb5da12f039afe934abad4257bb543a59ae55950060af719eebed7ce76d4"), ("141aa0b89804e1eec5341fe8c5f35b28e2da34368d2301f4bc9ddf02ec10aaad", "0b7dfc5819951464482758a1c52ba73ae9fc3838d805e979f5a009c938de52ad", "2226a4cfd9ceb8ed72447142298d1c304c973ec5a18327cf998203359c73ea6a", "2c76b8e37b79a31a1aa78ca9e491941dc9c259cebd0a634a624df2892f0410a1"), ("1918db015d19dbce3b6936f21ff1699fa53c100266276b08cc2a55a902121990", "1dd93cc2f31c0b141764969549a93f9a8aeb2f4e41ec44bf79129c448a27d8a2", "1d5cba528a5656af80533102a4f4af0a97e7292a971cd42ed95db7dff036b91b", "0f04f9b6ab1e1e8447070d1d4d7b1415346f34290a50ca328f6429523a94124d"), ("248d85ca47577b650828f6d2eb3ee638b68cb84e4dd5043266873d0280c5abf1", "17913ff706b598273efe935dd2d15a56616e0e0291cc2d4f610f6729b676f422", "119ceaa264c142555712b555c5c1d2a0547b80376c5ef10bb726531a2fa2e90f", "027e3cbf289ba6a3e38f5b1b705704ef116ad560b984d0634130300a75224a3b"), ("24a52c4a4c439131e5318f7429dcba48bf02c5e57461be67303c13e3cb11338e", "16b89e56e20c4f653104d2fadcc2da861849e31711756a7b60d4f79ca1356168", "1683065560fe2f19a45aa84c627c3e832850d0328823758a4e313ec965014ca3", "213f17f401e90bfe62c0f79fad59b42a5325856b133023fbb1ec62e9096065d0"), ("0123a7d2101f19f8c5ebd19f9d11e37f4c431b275860c8807903dd0554cb111d", "22d43f6b4ef602f0d2cf8271325a5b75455f765b96fbeb908a7f8d0b83f27014", "24412cfca438a8cfc70e46b0f284a131ef5ea42f64ff4e9c79426f2ef939b9c6", "2120c601dd42e54545e0d17efface5fbe27a0b8f4af30defee62839f4d2189e1"), ("2adc209c597e297285d69c5933190f079af226d21e990c2d890d7899c024dae5", "28671ca4a48a95881b91180a36d35ff626788a94d5a78b192035886a0d437f3c", "2f00baa70a4950bd693a019e9e7583b6ca2329cd9a1911c3283bef5795f20626", "1c914bb93df445c213f18c5e888f7384f4687e8f29b4cfe4da2acd156095b1d8"), ("261be3a31d916309b0efb0649d18b0576bf26f16d7e31f14e6c4f23fee6a8def", "10138b1a975b234987b770f68a4dc836e99eeaadba984c901f323cc602cb5248", "0a13be660df00ff641610867e61a0939b18800ae75a8ec96d3bdd5c5ce56fb5d", "0c3e25ac6d7e7280d7de7eacd048b6fb066b643fc8b4f2f138374f5b69138856"), ("2f032774396e7a9cff4eaef2af8eebd2ef20603530434eb344a235e96d847b52", "0f37ce3e5af32a34cb7a5872880cda570e19817a4667b0c9436dffb28fe526fc", "13ac60579fd268889f4b4c25ca6dc008b1f0b86bf8e1588c24cfdb57de6be34e", "2c6c5abe5e75831aa45a5cfda0a055910aca55b1f1a7d3d1303d283f06153ec5"), ("22452aa34b1954c8e0cd665bb363eb20063aa6b57457bd701c632f87e2d838b8", "0eae57499ad4dc88f4999a539584773bbb749864aa7ae5dcc8718b71a856c832", "0d55758ca463641c845d0e4b9997a6507fb7c3df73c3d40a24f6a5bfa40ec32f", "07d9b76846575dce4272d4a3ddb333ca980a414db87dfe36e9711e98168e5a4f"), ("29eed8e7dfc7551efa574881547c2787ab8a62add4262a0b25fa180fa1e0aa14", "25ae251cdb9219fe270040a6beda5b06cb9f68724465572994730837057b47f0", "18c0bbd8d5728b07033dc7a53c9671315bce07dcaabc546b49de0be58c722b4a", "13ade6dfb96ff7ba62cc723da484cc7d2033a54d7ac5e76604daa7d9537ac9d9"), ("2789a76a57d5cde6ebea7eb54bbb570b9dda7c79c1c55eb1595f209a6092bbab", "2e32e4f091e5e66c457f45cebccea2fffe3ade09dd4f49d8dba45ca85e269da1", "2dc5438de52332d37c2b8c9babeff38b5d3f2c70f60f664f3252c14827ed456b", "1dd981fe4bc0c6597fa57ed7232a6c52f3494e60114c6a1a8e51b4c4c6b65640"), ("0849a93ac5a635af50b75fcd9ab29167175dbb1955b60ba571fb0f28f00a0fcd", "1bbb3f495ab63db908eee5b41929a3687f310b9160281f3d48c92b36b0698f44", "2556ec384824a2af08f969bbeab05abdfe93c563a568018d1ce238ffb2cf631b", "258f60b92b977ff266e80a5dfa15dfea8ea60017df1023d7c03d8b3e7446165e"), ("2a057f35aa3beb1f15a3279e459c80e0d9fefc30b64af0030fa6b18b34eba081", "21fbba6ffdbd63915f9538347870486aede61d961d455ec8ef1bd606e1c393fb", "2c6fb5d25cf2ace6af95d39a79d4459980578eeada058588ff9aeb08d0a2e2b2", "1eec56495695f8873579b8db92c255963130a0b01f7975ff76d6753fa8f39636"), ("1910bb600901c86d15a3e0064069506b20007b3b14ec2553ab2cbb8040c1e95e", "1fde1182c13fa9b79058cf1a658b1224114e199000ee36454655b50e46c92323", "03a71a5d51fb56b8d98c49f60aa10111e343c174c6caa3f35196e8768a9e0fcc", "2a892a0b92858003b4506e08d3386c14ca20069842a18fdaa04ab616ac593db7"), ("1b28324cac0912d5eabfbb4ab78a3c0f814206a2cb1235461c685d050935edf2", "1d7e634cf1499b10482f7e67b6a71a051e42be64538a1636ec51e78ba4b51f7f", "207dd09c8c63298f96bc64559ef3b58fe953d61c47fe6f1addb0195e31e9b7ef", "00ed6584dc1bbe69b76330f95159490b91e2ea31f69c01d652a50381043c76bc"), ("1dca0ad79c1b6da517dc378ff4c5c76c5cec6dcf9e73821ddd1a6f42cbed8af1", "08dd9472c04fe63cdc60bd21ecda8bc0d430ba1d1b468af958764c5bfe5ca014", "2340a5bb92f1008d473e59a428c1fdb03a221894ff70c20999be2fd7bf1421f0", "1c4f7fea3588f3abdf91cbd37159c29c39f7959fae98e4250d725fb24cbba75f"), ("2f34b91216b04832cd8cc4eae01d7c5f7d30089589635e07be6ffde836633293", "25ba6f3408b4ccbb62d5c584218192d390ff1e0831cc75b9d47df971cfcb280e", "035793d17ad5d3b20c089c1f4c7969f42ef4c62bcb0f7401eabebbb4fbeeeeb3", "13582a29a509395deb4ed3e46e45e83210d74552dd7198128bb9bb772bdc3a6b"), ("0b48c293ea55585da61235ed4b1560663903685012a97d4be57efb110c369319", "22b13488b401b160275e027e7e3825ad245283969134dbd5473f70df17152708", "07da2a7a1010aa00e590b89a2ebc4e485ca4aea940efd59b1138d68fbfa85d2f", "19bcbf9c09771f90dc6b3d8727937ef90677cf3eed1beb29c9ff3119782f2faa"), ("25e325b762ad4b00d3077a99c1b479ac25eea29267e671f267c46ffb2b662fee", "11eb3902ba031cddb3a94718bdd79521614d7f9f5da209e7786a9d675d36dfab", "1911207b5269cd8f21a3479bdb9731380ce37d6b0666e8c5a0eb9eec764d9965", "2abb15938edece3759f68ffcbb9b1667e21b523778861be8c1edaa12cd08d65b"), ("0d74bed07c3247a09030d6b55075b8f31c282b368da89ca164bbf3fb5049e7df", "2a0ae76346f65b9103028c7b490f647b7c0eee8952d46bee1e67c0a4cb16add4", "0be56608b0a9420dd2d3f364a1c33d5ae89b59adb4301ee5704fcfa714b4a673", "0aa2bd3b8a8278b9f44cd9430bec4e44044b8bcf06e5dc278ca967081eec4fa3"), ("085cc135a5364e4ccc6e1e1f5d16cf45fd7f2f84ece8f27fb0a5a2f43b37a183", "168f83141b4adb8ef9ea1729cf74fe9f943cc8b3cd9243cd7a1bfc41c7ddf0a9", "13170e9a4388522c9a1d16501f7e0496dd9cc984d01c8a57bdad808a9886aff5", "30371c7ec06e1adbba7e25e0c157c2a553abe4b914686520beda1455dc432ca6"), ("003cc48aad03179236bc45203348d12f76f26b527614e389df77f961ba317d98", "2634ab907cdfa12f4b8e886eee201cc9debb0f4b4cdcd4a5e7dfdc82770533ab", "0c5da03d27d7fa56bcc8c95df764c8fa7efa7fefb32cb9998549a5af33bcabff", "29ff1712eead65aa24d04dce4cd42f0332745e9ad369ffa03dd78f847bdebc91"), ("1128e5e6609f09990b4b565a1417884acf91a40f07d042a2f32ed8fe4decd609", "032b54cd8385511076e49b5e6158bb7cb4bc9f7c7baacda2e767b6256974a676", "1a7941d4f02f1c78d53b404a72316ad9e46ef3ffbe2354d899b9ab5088376ccd", "2b24b99159435e4a08dcc62982702fa194b966d77bb9b5518f647095ebcc567b"), ("018b0e040cd846c743a8d3a78f700cc874220601efcfbac276d2b720cc65d8fa", "2831d91331fd169f752f0e333ab9da616a62acbb6e6d4a04cae43ce12d308298", "027177037e271cb02de296171998bb29b66cbd3fac8721e0cdb52c589b87536c", "224f82e25d086e521f2f7e34bd0b7c5926009c69d28c131ca235987bce34f56c"), ("2f2a107a0c948f9e092fd86d64deade544182fff443129cd569413df48d0dd33", "16509e67e4500c43314a97231d715f52c35398dc6d3aa4d42f162147b2832b9f", "1e360b1ee79d50bc2ee5c130fa9a5709d11e577e2eeff641e039eda1af872b5d", "01373846b09e432a309b04c072f5666601202a90ff208ca3220c718c50242d4b"), ("2e287fbcf4e4be8381c242dbabddc3e1d4e9a566779a0e365fb6f99c0e780f9b", "21f9d18fea70f67f2535cbed5833037556b0321e442d61b24a5ea9c6b8b05413", "175b2c235dd05a414fed9c9556043b01154a4598ad037f8cb269aa1644e55357", "212cf777d9591e82edc9fe6cf3635b2ad87f0cbf3483104d250ed9516e04ce25"), ("05e3acdd9adee69510093a935ffe46c205562aa6507ae098587ff323c6691d39", "0bc379bc1bfd598863aa06989306c760735740d5c8a22842b29375c43b98ae70", "19fc09dc2201549ba81f7a60769cc162a034fc17b10db6380b2d204c061849aa", "0d5d724ff7f682dab2252ce205a48e20a70916bfd7509d6e8d528e320c2812a6"), ("292448b59574e7126a954dd27a7be0c4abd8cdcba35510ec25b7819d9fad7f2e", "038a57caf69bf725444273e27127bb9ab085cf9d5a4dd4c73f8141b3ec3b21db", "10a9264f2395aff3d45fe808c1adc77e700574c37b66eccf125e9e5901dffb7e", "2865992353b8517747069675572bfc66a906a572c28f5818a3f009d066017ce4"), ("201ca5d9d966db5421b7199638254db36d69d730d528a903fe4b6dda3995855a", "2457b959b804fb3a27707c7a1f670f7704e995b8c0949cbf5773050c98b23083", "1a9dd6aee81318076d4d020a571b6cc665dc79a2f0739052e05215b1b8085b43", "12cd0234c76e8cd5f3328e4c964784b028de10005de7b1772f24d4819dfb1875"), ("1ee16cbb403b88e59ae678c0ba64c887bb4bea729e3ca432c04141f2fed6f1ab", "0ffcf223f4378ab6167bc57ebf87411feb457ecc22a2a9102a06ffb040da3e10", "0ad502a8081dfaef7ab1c99b7566a8350b8c734bc5036a6a0534831b2a5a3ee1", "0c145d6ba4286f62bfa29b3d04a5412db7d05baf598f127b6c87054094f11b89"), ("2d6d6e2737652345b9aa78583fa9f7e585ba77d078ba41a0076975ed846689f0", "14d4f184aa54ccabd7dbe018e9039c0dd475cece13d7b12cfb9fbcf642e538cd", "0b1df4088bbc9bc4829133b0511a27aed9a155f35682c1b55e5e6eedb0a9029b", "26d479d0e10c7493452852ced5873c09c205a2bbaa6655f5a3e0027c2d5a8399"), ("04781a348c5a0422748447970fc0208b16b97628001a92ae33ad4da580443bc2", "2ba544f98ddada90ef241201a74c581e1d409eb632cb7f3aaf5c673d2b9a5bf8", "0f5fd4aabf252612b72fe5ef07595847974dd47f87443d9dd22a940a361c0930", "2af272056b3e81fd49577e5c2c2988e5b7ab6dd850ab7837e08c156a2f5c73d2"), ("0887f3f4c5c681de5b605b99e7785038f4b9652c9e4039ff92fe80975ac3a36c", "090096f4c2dd1fcabbd483f3a49fe043f4dd68c896028c75b23c8afaa2f20f40", "2c3b3dba2faddd82647c80610caa71acc47c82dbc7713c294e1454416af47985", "29a7ac13d480f558483164fcc8b5a2c730fbb692093d72a88bcb2a1e016a17fe"), ("1669afc180366dca0a64da44d1bee4ab8f78a67513417eacfdc236680525ef39", "0d5ce1799a7eec4a57f2f05853dc8e5b9e0379794d8c29e8a0cb075802badbc7", "03743edd2a66e1dbadae8c8db571e60ad0a38abab7c79bced6ed9a97c8e02e24", "136d95c9b1b3db37a06b8c34ee2247cb2a117718b43b7ab2cce4e78512a6d66b"), ("08318bd63c7081e96a2f9d323256dd9b2e69d73bfac146c08d32cbc91b15033e", "1255a6e3731b3585200615735036e45434d0aaaacf39de1d7973c2a2d5d8c0bf", "119aa0779aafdf5e76cc0885721f3436172d867e5be406642c981283264fa980", "2127def82b56273ea1c9b7b9cd43da329767db13109c008afbc55ad65718e39b"), ("297ed59b67a0b8df411b96a91c49d446bd17746238eacb276a0fc87fe29e8b0b", "28f180f672cb09595450134569a84fd6b3fe6baa69f8b5addfcd2f550d7ccfc7", "036e9a1d689e479fe35d1a919fc67d224f9bef6d117ed22c267d2ea2a844b0de", "0821e5c164c38b83f31f3bb1cd405928b02d596b4b41e35b1b0006bcaba5d858"), ("131c989d7c040712fc604065f48d7721156f3af7c54b459b7fb17e3d5023a888", "19e392d5ed51e7dd592ab95ed7736726e349daf14e1a201cabab0e9b0abce1de", "1f8f4214972d08f60ec41ef8f03de9c83b05f72b60fcdf86dcc9a64589c5b6b7", "1bcbe4da1c27d31a1220a154cb6876391f953bf82acbc05b0677fcd505df7d65"), ("0ab1f3f38558fa978305344a7cee02a1396fe8c9538521f09fe1cc7bd2284f73", "1f2f10a81c64caeb9fb51c1fe3214afc896ab59fa6120644b694e801b245e574", "12372b657dd451864b81be1d9e99c56a3cd94a455d1c5b6f9e0c3a27c6c63a13", "080c1467c0bbd324ca89a0f55460f9d8aca3f05df954424fa0e5761c5c912595"), ("19db7fec741cd270480a3fc061b36f49ac9e7abf7b57f6f5ee6ad076a21d03e4", "000c9d5459ca3c70f68e3d8c680e4d813f889125144dcf3b59ae22b1d7cb95b2", "1a01e43ed08037e0d5f78eb459c089c56002b40ebde248477253e36fc2b97f90", "05ad3dabe4b3fa4ed5bf3737977a86b4f8a8649c314e375c8987f9f4080cb3d3"), ("011deecb04bfeeaa924c0c2866325ae9013c3d5a2abc14b348425d86c4db5a86", "29ae29351cdef70b036ac430b80da9783b10f67cbfbbd9956e97d9a83d28e6c9", "05f9e97e83be3c84c5aa0b62d1c7bf688eac9f458019b9334811c07197150eb7", "1a4f211bbaf47a45a78b569fe9ac2179a40e562932cfe1f81e12a0c5c134273c"), ("20a1fe13ada6b791ca31e08fb5597012a75937e37cac812abc97b726f544c9c5", "03635e241c1c6a580164a41c838b295c2fb041d29857a1a96f84baac0d0ece65", "2d6b400eeca43de9794af80c49252bf5ae9e363811b1fda6a00d9bcc5a79890b", "135a776d2c899ffc8aba2651966ee6da11a2f79b09bbbabf61d0639707312563"), ("0e0552245e53e48499f582502a1d46ba8e61544c92c13c47eaa3f2236cfede53", "002f46f5ea06bac01b8f04a91677f3ddd75b895e79b17beaca1ca00bb7584bd7", "24d53c877bc868436ac072266c7463652f9f1ec41ebf7966f291b8b83f19d9e1", "0ccde3a45e4ac49deae4c0a57225667ef33ec73c509461f6bae0234df47c592a"), ("15b1ddc3cc449c46aac456067a8660d10dd2a8b4d1cebb912e4c708eb964a57c", "3053829bb443427ec7a31cb827d1e14f74403b5a747c7166ed1e8ccaccd92893", "1009912b2466f8072262fa239c63af9f8bfd37221862908707845c4f3d20c35d", "0ff8ba6686ea9b70d9c8205b933c532e14d1ffcb83db1331101a6e7b92d989f4"), ("30473f0d93ff31c5aefe7521539edc43d7959abb048ad0ac35a24c03683aaffd", "1fb7ad832d04c0ba88b9c98431a410e269572598546d92680e2b7c5a9aa0a02b", "10aebb4ed7c6e5038a5f0eba4548efc35b3ce03055c66ef227b12cce4d471c78", "0c136c8a8a5067e538bba8b1e3cf8e4f3eb5daac8d14b200b2d883dbced55d3c"), ("06b36a62d04a15fcc63edb7e2652017a1a3e411a0b45eba406608cf6f1fdc935", "2b07a9d63cc12ede7e5da6def59190b10482dc6f5b1c4a8ed17524273157e889", "0f7f626775ad26b17c5c89341d7bb942cfdbf47caecfb98bcf535c9375d6474d", "23b328437e14bac66951a5af571d9711a29660c6845470473a0dc5292f0d24a3"), ("2102a0ab745b63a790c7a7c56dc2e99d5fe7ac5fe9e7460a978c6d8c0b7ff2a3", "20283bbf2a7136ce52a2717f426e5551c8c888fee19bff9c92d9e4d3d683a4ab", "0c0b0a3d345b5dc4b82265ab5f9b9960a66e8fcc17be2b6dc697b5fc43ecefd1", "0ee965bd5748b83620e93f3b30c7f43e30accf95a92b649cb801acf7bb8bb7f1"), ("0f693e2ed65c619140f6bf030854e670e8d85aa6f5c95e26e7c5238c7b2c2cd5", "043330ba8bee593dd7b17dd4dc2a8245c9f01f85b2ae51685e581c727d71ec64", "1ff7d951cf7a19a7d987ae182975719ca2e5101e2f278e9e94c1d21068fba34d", "14bb8829e7004815bc86dc9ff636ac7e9e527f601620c897c7f75c20e1c584f4"), ("19601f1177ccaf801965d76c979d2f27bbc72f0a28245ec95bde3fee0af30ce5", "0948e29114139f0bb50b7d8e4dfae925ac9e573fbc1c992ecdff258cd22936e1", "0c714a8e023a5e6c81aef7b4ed71b37996caf9d08c8bd16be76200124c85605b", "0dce09e1bccc34c421fabb4bc2aca5e27ff3edc3b12e83b40048e3a0be707622"), ("0d59743b93594e877d44fa195834ffc5de67e368158ba4c4c8d5ccf75d0fdef6", "0acf7850b5ebaab5bafa23e9462c173706d1836cfe04e9c93c9ecd9977ba9203", "0a77fc159a2589e3649b0f42bf2673b76539ca8f868597116a16029bc7487549", "1191a69db6b6c7a915554df733932425908ae85859b7cd5a25f5aab9c15f4b5b"), ("1dd0b0278bb97c555cca342d31393dc3a46beaa56beb6a868cef87852ffc99f9", "276fc2a5b2371c19fb984b2a8a5ff710a9d44aa3563a458f82261541c16a50ff", "2bc97a46af0f6cb425d2d12639241a349b9f24dc5687eb32741dbbbd18ef1b84", "0e450aa00333b0ae00e259e5664d93d4aa2d2d7ae1359ff8d008bc33383b604f"), ("10635c7be12973fe8ab25bc10d523d7647e24c5718fe844c5327185be30f6969", "1c15746282c01adc95d90eed56c89babf940dcd91008a8b16129cfaa0cf33b4c", "00e3ba2b088aa3e8187eb70d26d1feaeb1c41e6d1e5fa8a4ef76552d8c4ba47c", "24b4149ec18510cdb9d7fa4d6eaf931d25288226d1bd47b7459d3a93e0b3788c"), ("23c21341ac199388a551e41d67d0fb21fed91be45901b055e14fe16b981c4275", "158740233932f861164f4789202ff44f8f0b12f63dc1e77edc40575e2f7e492d", "0d341ff1300ab269b2accf2140e26ef53e9eb38ce02a4a266a4cc96607627608", "08016c4021bf26c520581d0ea15e8e8de5a6fddbb14230adae6bafc0b57bf65d"), ("01d483a6c3a00cfa860406975532a68420e9494e8b9acaefe6f0a6a9f3a5abad", "1b1ae9e04af8774a3aa380291e7cdaad8a14228f9bd1352f2aa80d2a4eea6678", "247cb6b6766ed60a701f7ae5753b5796107e665bbd42f1aea3bf21431ec382a7", "18850b3833f78829f59e71a966870dbf0d895e3388add94304ccac5244edd1fa"), ("26332822f53c39ccbcc1df85b88b9586b1739225e4de94388c12a4b5784c16e1", "00d4820562cde75313f305bca313d1649327fd3a0b3a85b7ed6ca0d5ad92212c", "0f5af9064d405d305a637ccf7414c20e2eea0da495704916aa19f4e270a931c6", "299d72cdb5ed28baf2eeae7b241d96d9619b439dda874a3b796e328f1863e98f"), ("1a8cc8bf52d202399690e6518829b617c86ccf305f91dab3504ba687d50d80df", "19bc09611ff3c78914672cf5aef0f5ac57b1fc7c612ce5edaf13349832d70ea8", "1636cda683c0c29538e097783cdf94b0f42e9948f9d9f7e5dfb4fd159e5af704", "0e6efe9126b498d18c75ce17c34e540f1a4f6a541cbc109673f43db1ab5ef49e"), ("1bf0592ad3208cc740f8d00028a9b1e274e5e69427c1a93836db7986e122a42b", "00ff4f6cfbe138b7a3ffb7121fdb7594b04333ff66b3bf044464921234479396", "0d0fbfd016f655622e08a349f586310c475e42b0185b09c68c7991110712957d", "156e4592086640c28e588b74951d35dca14e5889065f4472ea6bd76fbc251014"), ("100c10d844aebe3a6e76473d0b49f9b67680cebd9899fbb127b255fe5278fb62", "2a779638d7fff5baaf19be47181f0e396c0d662a3ab66a2ed896ab6291760a3d", "0fefdd51d2c421b2130e732e626e9babe0b76e10359eb885e17cd191ec474dec", "11bb4826ede19d27b47533921c00abd524f8e0f5818108c7d8d2be44292be05b"), ("1793952f02d3f297a095aec62cab363291395374845cc72143aee5a04c5847a4", "13dcf71544f315928e0a325e2a0b6239663c82c6b8ff67e4ceea7a656a5696f6", "08932bf26bd784baa5302348f5ec83e917c4f8f5ec486eae9ca47493d4099f96", "28629b739be079a9a0706299dfd01b97de7f3e813a4264c2d3ed4a1fbd7ebbfc"), ("0abed62549c6fd2f01bb092255f1861300b7ae54ae538f9d35a76971110a8f1a", "2b38fbf93eb7a30b506f70cc3e0af6dfedf547bfc31603f5cd9300974be2c3b2", "28739a6c783091043333297ecdab7d4e2df9417477a856aa18c56eeb19f6fbb7", "3009401748f0f2bb76299d522c3a037ccbdbe8d84d4aac7ae937b70fd611ce1f"), ("0abe279e45126cb861d07f48169875316c007058b12ce36557fd9440e1ab7e50", "17c98e5bc4b161c77bdd23ac668e337a1105a5e2a6848b32e99cc153020d3578", "16289c17cd21a5f82587d4603bc019271d18860cac51653403e3e3af9766cfe6", "10b963633fd20f757586ab906d55f48ba6a4a49de49e0709767002a560ce173e"), ("2c5f13aff43ed1b98199e2e7ffa9b72ec5caffef78a4976e4d53a1b6b6428b1c", "05877fce5c7c851916d2890b987b325b6141cf7802f3bc3ebfea08895c82a84d", "1e8d3631107f228cdc173912e8977f885a04418ecce14d93f91f7d814cb1cc71", "1e5c6af60437c9bb77a3394b8f1eb292931d9a6cc6435d4b495259d16fa8cc23"), ("1268fda0ad63481c0e7c9726894e5d9a6475090ccff9c750becae1ff80c7630c", "2c13db90a41a5ca3b819aff7190b4ffc8fb8cec1d3ada56109fcf37f369a2720", "1e84691c65fbc7ef893ebbfe02ce21d018ebf06212f1931575f7343a0c662085", "1f5781a3c5abedffba658fd941f5fe2d609cf010b85d611d58aff7f18f987e62"), ("2635fdb23bb74d4881a52b8f49ab6c3abb06d2e408e53936aa400781ba35e29c", "2ab97f4ab5b7ed612c29ada46d4cffd8fe8a1aa478e384409febe8ea643c17ad", "18459960cab99083472c0262649b9399d40651fe9d785e93c61cad586d8d17bd", "11255fe1a996d9d9a85b0f3bfe28903215e124dfa3014f0bb9c1d13f26c28dd4"), ("1bc3401f82b2f69f0b54f9faadcb7c4aae50e36940d2f12065fbe9f4b5fc5bca", "25bdd4074cfd0b38078a6c1956aa5c534353972dc250db6b10a0b127841b6811", "160a59cfdf51795f814d655957805adaf1958ab5de13d14772db221db430c0ac", "300971a9493332634951983a7eebc29b02a1d8cbace32572c347465a2f855f60"), ("0f7d0a264239069bd9ecde4fc3c3961f918193477ecf8c7d541ff67477852898", "0d283df851b4421458659740246b17961331bca85d8303159c9bebf3bab79491", "03dad8ff77f055f0a4b37cf3a9289e996f2c48673b03cdd7400a3f4a9b865355", "28806289662fa5c77d112b1224bcd25cf8140061526e00851593771170b3273c"), ("2dfe5e3b91f614add0d692c3b3426c2f66644730250e734ed884c6532ecfd791", "27c92bec89a1868d149dd43cb31444bcbae04e34bcede35a466b29968b5a9a9f", "17c78538c70bfd19201696b247f8a43ed6cc4779dd790c9df1ffca234b03e3ef", "2bf8ccab2c7710d175eaeb810e9a029cb7542ff29cd5c9296b93d3368810fc9c"), ("1259e084ab69936abeb5c9869444dc4e2fdfcdd999144448dba670ba7c664d13", "020a1b04b1ce5a37c29553ea16fc678cf742ef88a46336e3a083d99d572922b5", "1bb8b79b6973b87826733121c0136929ae64fd34c5c218fa6625b6cf8f961a58", "1fa46b1d53a634bcd95448843de37558ca870b3a3258e0834b5030f8cfcddd8c"), ("0bcaf4bf86a996acb276972c855fd3c0ca493fe6bade53b77da7248e58022d9b", "20c7b7668a3d5e2fb3d31a4dda9e8ae132ed2cd5db0202889721484c39e77c38", "19dbd5f530cc976d8f3fd8e604586a416c6ce04d898cbe7fa63c49add09a5d1b", "197e08bb18ff10cf708b1987cd7d5992f794e81356520540be56b205f6e6530d"), ("0eb92804e426d4cff52c3530aa64275c6e5bb652774996d4dd99e6b73e4a8346", "24f6c88b2caabdabc641edfaa6d1fe0d486f0fac8123cd54eaf96799a7fddf1a", "097d90e6b54c8995914c0626f94d6aff200388f274975d855613627a9fbb0a70", "263ab90c5770b7045c6740b87e2f981a5230af7203ee26c10975885261f56684"), ("2e7ebec05e3f408deabdfa1bf75dabb87c568bfc496f5956cef60741a49a42ba", "1f32d386e52d4bf08538a327f9e2b569ae5dc51405d007aa52e20bf26e98809e", "105c0817c2743dd74d6e00f07953dd690afa0ee695564939aff30e81979efc1c", "2b66878b21d638edb3581eb72de93653ec124a1f74958745bf5f4db02308d542"), ("257c8bfd47cbe607091de53ca600860bc86859f69c34601d9a1893b8066e1b21", "15dfc935b44c75f7bad55fe3f1878a4f7a78dcc7c9db42bfeed92e3999309114", "1959ef4625e943b7c8c1a2aebd7c89ee776c3f0e846ecfaf8f707fdf6e5e8d80", "2f445f18741b8b38c651841e2bb505675e84e1d5d0862b09e8b25ca565c2b4da"), ("191d22e4e9d3954005f66db2012ef2cd9a91bed12055e52f60e58ef955f1b3b9", "0f9d768c541e481a2a9ec629d0063520e9be796abd51a6e90a0e09f8cd604a16", "2428722c483ff3ec89063dedfff1a1a66f256d739baf14c900e22ecf92d68dc1", "0444e9f06185fadc02ec4d60edb6cd293ca39be512fdf22b7c7808a3ca7fb7ce"), ("1bba98ca093e60fd4a7feab6587098f96d65fdd23049660fdc8487534211764b", "0713a212db036bb560321566301d49cf07ee40224bebb3dbca301e3322c5d507", "21a683d96cf125cee245fe7c124b00515ace4bd4d342a136c7a2e3b4f03b8e0f", "2769e37896219f98cdf2d88e68a4b5b1b103c1be8d4da304baf3e45a1d2e0427"), ("057b0b6937cc33ac3688fa5f885ef03b4b2a98fd2f49ec97781ae172c9444f3b", "08289ccdb8b913b271ae7f3273e9417ae2afa9a939c1747836dcbbaa0e22fdde", "28730da6cadfb42fb71563678cb98fd8c214b204ae21d562d3ff04188e382528", "2f3261dfa5f2f0c8da5a8815b083b7c925a90b9cb407bc0fd111927b1351fd80"), ("1ca7815b20ebc1c8611962cd8e03d9dc2ad8f6b63f4acb2ba1fb35ea3057d76f", "1eb9be8001b50ed499fcfa5185ff242d660b60d62a31333c30cf3d6a4401f490", "065464deb21315b77ee4748a33cbd06319f6ef641ae179b38771756d1b49fac6", "0f1c79ef58531a0c8fe99df0febe480ee91e606534aa766de8f0988a6f861b2d"), ("208d12bf4999e1278830a0c37dc7edeed3af07b11baf90c0e00582879707b984", "099a34ca0cbcfda9c9be616bfb18142abc2c6149c3d8c58bff0369a055dc4721", "09a287a11e27aa4e3242924e440e7646cb4f0f07fe2ae82a1fd38f6ec85662ec", "1c6f1e2dd545f47cbd1fedecbd852d1696df6f98dc0ec810151dd96d793e4265"), ("1b7cac2d88fbbca10ce630106a3508e7ac80daf76053e98b0beec6e68f835a65", "14c158dea76f9896b2848f034bd9dcfafb400af83b5901a5ca0f212102da583a", "12b9a885cd7a58b7d24e0eabe695e1339c40dd400bf2e2238b3fb054fc9fe39a", "1895a787e30f809c70425516e98dca1ba2832d51a4d48fb9f84afb43142bc0cd"), ("168a60ecfa6875d5469befbfc7488ca0b8201be3bc327894692f666eb07479fe", "01f366102cd535f7df1f470ddfbfaddf62d4b5ca9b1622a84f8f60d77391986e", "1640c0107a9323871247bc31a15840be60823a3c62d936e24e92ab806d53e45c", "26ff3bddd5ac6b8a9532efc05207a3b2b16e15decc71bd8ac78e61703aff5e90"), ("2b698add6006e414aac0a47e61ce95314122662b37477940ea7aaf8a15ff920f", "143937eb326b0da2a245c750486fbb75fc7792c07fabef4320f0c2889355ac0c", "0029346177623c52928be2fe8d052f4279692bd489a3259f3a3fb3adbc0149ae", "12e6c5e6028d99c6e287c15061cce9f9ba7d02df9030feeef3979fb5945cadb0"), ("104da034bff668db1e179722f8e84514eb5044f1125aa65ce09e3d9e75ec3a4d", "20b46aec8eb88a769ce2ca29a2ad6f5624a9ea4c49c601dd9b1c7e98d15ae340", "18b389337a657b8dac858afde01290e702c69952d542c7bcfe33caaca2b342cc", "1468d2bfa2d128facdc7e1ad8b48db8d5c2432e0b12ddd150a7c17f6f65872fb"), ("278447a5534d236d13de4d50b40ed2462417ab5f7a315c0659d7e63702c148cc", "2b4147b4e807a8f083ee0d451b1fc4ef2db39e7a5315374d23adbb1c58f7a403", "24896c30dbaf3f1ded193aa0e27bc9162a28a7721db7c7b26e659b79a4ec37a7", "27d8fa05d39cf72679ee9b418990112ad506060ba9a37322e080e4b97254a917"), ("2d4145527edbd322fddd770ebfedd9d3271116ec4f8e034e8d76f4d94851f732", "14a0d447db17b3c595c23a791e4a510381c380eae869b9be92b71840d09a1053", "131e326e25f9fe36490d7eef970ad8169b0d7392ae3980f7d4708bc0b5e138fa", "24ca90907fbcbd09692450aac283e2d8e8719414806dc8188357f8a820760d37"), ("2a5c440af6c5296ec66dab51319f2fd54cae7e3945393a87d963a3b7ce6e0986", "0709e1a01f69fcbd5b99b3394d0df90cf704e951122514957774692dd52ae2be", "0ad8f650b00d1307817fa7b0eb2dfe066b44e34bf1b0cd36b382a4e7d26fc99c", "02ef2e1a9042c3f0ce2730ebb54fadda395f21315173f59d096ffb6ec8fdcfcd"), ("0bd08e53af9a589ff9ea5bc5ef1915625779bb87a8c6cce3f1492cd60273fd06", "1b22fa5bdda6ba1297442ee36d8215e53a7c6d31b84c2bea7574be091e7576f3", "2e1af32b72a2e28a3c8abdf9cba78ca1858ac4fc2153c72452a2acc1960ad73c", "1a92ae3c6568145c19359e5fd1d478fe4cbab05a9eb376575c503546b198c6da"), ("2cfc436da217bbbf71620ff4509e20eea6c7e18e4d636dd01a4615ce5e8befe8", "023885be13ba968f4c64541842dfafca1dac3df18cca48a4271049ab797f062d", "03a346ff303961aed7d70e9c68ff88152f369b8a7332ed493e2c83fd40f819ca", "1ed62cd7d5f7c791bef82e823d8895a367db225147eac94fb7cefce368841ebe"), ("2792532a1cd4e77daedbdb51759cd81f55bdd11f2363e1f80f877c685d167991", "090ffa8030aecca874fbea756b90f0d4fe7413b5cad621fdcb8d67244825f806", "20cd336df628be88d34859ec9d47cd4c07bb6c733eb6e0b4a69567e28b8676f8", "1e97f03fdad6b9dcd021c8bd17d55667f23e348c23404e5f0058449507cf785e"), ("046f0604af4bfc15b63ae12f8a60c632fb3e4b076dbf29a5b7c5ac0ec909585b", "06d92297cbfd59ed2c8f18710556d61d87f24de461f1c9258499cad5e83e4bd8", "2b708310e11e3005e935b8500d6b192db37c59693bf6fbbe454d9066d56bc099", "2d343e61ca91ce9f74cf8ce44117bd7b116b669479711f51a5729745a3b69359"), ("261a28fc7aa8cbc9eada9a31931f9fec7f290fcbd3859ca0cc9621426acc3e9c", "1a729b79a20f6bd2700ffe1789f0e7ae144dff2aa14aad862f95a33461a6b405", "10182ebc4de648ff70dc9783a97bef64affa649d899327468332e449afab163d", "1f500f38f9ef7cecc4fea9c4b4c276beb067d74272720daef1fa343c6c9950e2"), ("02dda3cb702ffb04e04109ea6534b79a7b68bd12f9298e2b1983ad6098295c82", "1c2680fef143678903b56cd21b89d5ae7abfa6bbd977bec2044dbbc8d0dd89f1", "2fcc351c90ed4da704cc4bb74c38147ae56b93636cdcba68fd9e1c6b0a869522", "1780ccdd786cef37536040c9ee7c75c35fcc4c534a1b49ad58c6fbbd4e5d1f48"), ("0ea9181e79c25549740aa06f633e9fb82383d2127944e4dce4bc8771f98676e8", "19ac6ea9393254aa00e6723cc6899515a5829074513d461b7d43a0b67b28284b", "284da35c491cf73fbb3eb77328baa46117734264e4f1728068cdfb71190a20c2", "167d0a04c35f54e06f2de538e5b7c193087a50295d3236f063d0c3bf67370849"), ("1159459271c6b180f116462dc7577bb6d88316a3af77a1319b93ce01b2957ca8", "17f1f785adfa42524e9f99b83da8f648247b848bc282891f5efde3857d41e2c5", "0539291d044765bc6c7d1b0a93fd43a67333fc6a1ddb7091c5fd29350f2c0b13", "24802ce87be6f9136800de14b77b5015d2919bde46cdd23b0a4b7105ced76278"), ("1313a0f61c9189b95794829795cd7037959641422d8c13f3462e30c73f030540", "1960347a8fca006d325bacb21b0e8692deebd555c6cc47e8da9292be64ac28b3", "062377bf42b686b8c5fe67bca8c96645edaa725511b7c4ddd7cb0b479a974fb4", "15b8b58351075acd0bc878fc3cd2999e16b480e04421662c47c121ac3a59d4dc"), ("2dad2ff72f72322d11cb5822c6c30347cef9b66e2f1f35f333252acc62559a3e", "0ad2b33c90f7091544b449075965029f9b0bf16255f1ebdd7c8c6590d7c10df6", "0851de215ef6c778aefa60357c5bbc3d81ed9a8780f9827189acf2ee4c67d2b8", "02a1490bcd112f4640c9909e61e7a7a13c2bd476f94a15a23eca1be2ba85a4b2"), ("2630961c94a181747f4c127693e78c37e666b80f0347f02c516058865e6f96b3", "2b527c11acb46230233d7ec7e7e109c60928c39b499e5c9c12b8cd3467123bb5", "13567e7fe925ecdf783b1509932f57f04e62d23ef284888d500b60074783a8aa", "0c0beb8e4695fdb428c303cd9a77d475ca310acb861a7de48fea45d727c80d05"), ("133e0094b28d9fbb2185a32685385a6b1b6005616917c785cf2ecd08de933a1b", "12fd34510481485a038f2d5fcb50885ebd4c3da55901413c88684bbb053c49a8", "2c76f1fe6ce18d6b86839764dad3d66742f5083e05ef6e7aaf64866c68bad728", "156fbce3c3a11f4e706a5ccc764f567deae718bc67b90020f22d57108364bb1a"), ("068e9ff0c5b5a7f5b37d20789a392090e3dce60294253268178a10129303dbf9", "1c8b9b7013a1342cbda6ede5033eb426906ba32f2923db97ae57c3505315c4f0", "1d25cc96fed3e6dcab52ba237493200c5830991191cd6b6122cea32aac7fe975", "197f530f0fad822f67134b90bfa68f92e8cec31af31d1f46909df8a87c6606ba"), ("0b9ec16622c778d6c5e704677919427c12e49cc5e0fd46ee54b38d0e336fecec", "305fb8b177a858f15d0ecf8f4287e8550131f93d3b22170f916890f4aef44552", "2239c3e50a91f3ed955f72061d23253e086adc0cc8994273ec5afa1492d1c46a", "06bc96057c25448898e10c3aaa73052b65384fc38e1348352f0fb20a64107129"), ("1dfa3a4a3ddb1ae6a935f3a81083a541a7632569f29c1913e1c197b73f6cc4f9", "029ae3dae1350bd72de82191db50805689f16e0f1394b20c60f1915069decca2", "147ff5af6f10807a89e82bdce6897de7ad9e6a06de68bc69a6831e622065a002", "2863ec6c97fb1b705e5462bc6c08d4e8ff003e95808c1c4718f2e6beee8fe68a"), ("16be928bf5f58d7e61036a2139102792d92d247389925f4e54aaad74d2ec364d", "223b8536cc552598d13512c70ef8b4eecc2e7bca0389403dc431f2e647b8ced4", "1cb924f5c72da8ee24c7b2129fdc1cc4fa10692a9ec4039750f4ce1d56482519", "0d1a17d1cd820e051258bfe3f2524ce9513b5e7aad7946d352e104a7a144afff"), ("0eb4f1cf3a15b24dc18687b7a2cc90e948175b12c0a4722bc1e86e54fe960e1a", "1a05c99f74a61005c9544a22cbf614f9e34b551d7389c7696d60290034af5274", "13ab5030f785fe61ac35ba1ac555da8d10cad8b5138a145ac3e4a8ec06f5fe9a", "256e6327d5517607bdbdd542e8bb0f48e3973aac348386ee2784e832bc9092b0"), ("22fef48476167aae6c661db92c19db220c0be9b881077bd7d83975d244b4d74b", "1bff11ce0d95d49d8fa2f466373c620ae238afae8d5a2a3700fafc85b3abaaf9", "0e66ce5a4364b8a6ab13ad4ace7bde20beb90659853e5fe9dc6f1431a9c31507", "002cf7ce75e90b887378a7a732c6b574cc1bf14bcfdad58e2734e831e3557125"), ("218b3869649b4aa00a2714faa94f533b630a638c00e1f4a739166bf25fc45648", "2420cf83ca459c04899dbc58fedf690b4ddb0155c40186c10b498c5f25950a29", "1986a42dfa159e607bed4abef6a95aff8a868cd72d6e7cd5fabe833c3c032dac", "0e8cc32f3537c7c2ecbb7f1dbe284bc8266ec37d17e4f73c909a0b5bd6713562"), ("2b6988d8ef20fde98f5f8091438e920fd22622407d8f9dd1ac3c93112ae7f4d1", "0fe526ad68843bf3fc0b46bec66015e15d081d2536c21c72d874b06dd828e8bb", "1ac49caea4a56eb077aa85f5a16bea88de7b8f528c7b2bfd6df4666149687f09", "04c75109748281eeb445e718f9949683f9076a90ac2ca03e5d9dda8c4b952ccb"), ("2815b93d55f0beb4cdffe5b568cdf595aeaf45826948a9b979fecf0ac2a53d82", "076cdba24951657853217a2efa40600596d6057baf0abf065d50760c6ffe41fe", "2fa4f2bdf2d9c9d929eb79c9a0e05568e9e44ecdd71dd78cc9e4e922776e763e", "135e6ad1839462e5cd46bcb304f1a95ce0613a2e589e3d8e0ce111859cca13d4"), ("29df49df8c07f03fafc62f9157874c79daa2c40899b2212eacb0fce9e49be4ad", "05ff69173de21b0d93346355130d38c24e8f238ab24f7d002c5ee32670e4a90a", "0d82046f31f1981ae903199e9bfdb9159cee5611a0b96957282b12d33bdb7913", "2feee71a4e88b22d037c7a389d0cde5135a04aa8a7e4927f0136ae16cfd187b7"), ("0d08352df84d75c216bee24fadb0e1e02c8877d1b4439a43926b3c3c32ca351a", "21635c15b708b463fafff02522f965bc88d85baf3a82c7242101a9a33c058d63", "17a91ffc45a18d2d516b75f739e6eea57f2546470002fac274d2e963ab1ea323", "2517d41ac007ff98e8d72db2b3830596c3e4cdab578489e4bf3b160f793cc73b"), ("127ace68ce841d77b5d68eadaa3886798a757e65612bf220346df66fbf632b3b", "0ca810238867f99b1a3a594184a3a30f76733ec0196c4a899f5786c74536b95f", "02e9b6ae74dce4d069ae4e47c14e832242940a830ecf94a6f2d26c1108bbeb4b", "05166f8863a3beae166c257fd628a275fe22c5cc130c53a97a751011d31ba950"), ("252260b4c6a7bfcc04d149a10249f6f3ffeaea853a6d7cb5bc26a031059a4784", "183b6af9197b67277f08f9479bd1914c6c26f61a0a7b769fbae0f35050c87d6f", "238e0a7882f1e68601a56473075183852c97002c112fc63cd4a42b2b16d3c766", "08130fa29827baf41109ca29a459e5c724f5c5cb2be97a6581e101198de28ce1"), ("2c1dbd9951d9c72696c0ec9da7e9910f7618804a41a394fb07fe04302e7f1102", "2bacb497922fb274ea4d06eae4814a2e2153c002a25803cabb8639639e4136b7", "17f98bf715ade1f144a5be2312c42755a2ac4394adf431a9ff9b8a9138618614", "1bf75782e37f62e4f41ac6d0f65bd5360a21f527ab3a800d85eacfc40b3f0c3e"), ("0c086ccc8c29aa75dbb4b8a48365df6be0bfe11dc873acf924a4d21141a9b067", "0ef42e7e27c63ef3faa39c040dc58c5707e9345a4ce1f3b6301ded40cbe509d0", "05ad6868ee6e9525e5539e49c8f26d2635ec1385394b807a205bfb8eb82cfdb6", "2e34872333856de01dccd59cc97b9562a24c0ce7873d37c14018c8c4dfbe155f"), ("1258371bd330131314e58faf79caeb4ce004d3d5d7a8d73d2e54bb7eb0e6e4ed", "0af105deaa583504b87e386dfdac3aace0791be89b3ec45dc4b786debddb8df9", "1fc5574eefaee4cbb2495af3763b04f7746faeefd50ddb6f76848cec35fe3a0b", "0e8ebf9fb8f049c13274999800c4ff3c621d0718b8d3044062538834fb294ae8"), ("0e51724afbfa6f1252f3f607539bd8026a36070683f6b4f25e954892ebefebe5", "1076e139b49ceba3ad8ce6f9450ed064582b508c647aef950709f4c503eb9eff", "2a36742f2ecfa4b0432d5bf4e6ecdf7d084748655e656e8b4acb13f689ed51b9", "1d799319906acd746d94157cf55068fb70c0f3894599ec36de638d776c58e31e"), ("0b699197f20ca21657ade5416eef868d983211e2047e2aabe984cced1a780ca5", "2a37c6e6f25f766cc1e2b4ed436abe86ca75e764f25f80cc7782cb454dae8268", "1da7fc59981d3cf6091eb3d2c4cf926c080d2e94f01527b4ddb96eb19be872d1", "220e0d2e91617aacc7fee0454c1a1361aac89d56b24f20dd01afa471d22ded3f"), ("08f55cd7e79fb7caf70166f0688a3c8732c0efdeaaff9b4c29b77a4cf7595c1b", "2a7603565d877f0e5452bc3e9224b95177a798408fdd160eea909116c285f27e", "0d118b87b860d149fb345fc355e3a2a1ae664f85caf78ec4209d22c86440bca8", "17744b90f387a2653740dd0d012cf257ca985d4125f4464ce24f0c8e103521e7"), ("0c44e64658d82b9c40ed8b01d683c356318f7db1f6bd9c87fb8c521cd2aa0dd3", "08e95422f3ebafe1467c1ef8e5c9ea8b684f47d989f7d12cec5de5b336462e5d", "1f8053536d8cf1378dc0a6b02497a8b4cdc5137db70a36d68260bec9ad14ee52", "2b7cede0bd8ee14df19bc6f730d42c7092f9e6175487de711a2b3255a9dc2e71"), ("28e7206b9e0dd2f40bcdce5e44cf0316ae120868c0ab3b10c4249d9671acf614", "022854ba41e98e8b1dbf593ca04ccafa50fd6e5765e1f2fc65444ff06760e409", "152cec8d64f2e7120a77d8a2cf565f92e5975623647c7e148180062b61e9e84f", "2ae2791b639e81ce59618549410180947d4c40cdbd693a1e8a17a6760fd477b3"), ("2ef23646b0443720d8c8bb9f78c66177f71542b566168dea13df2ad9f660dc2a", "27d77e5918bddb8b69ed8aac0fae8df9af58ed3376e13b5e4e1fdee3b662db39", "201b9dd343711af203757bc8c45350cbffb2b3940aa9fe0c0c1baa1043013906", "11a5d73abd7e17bb4aed037367eaadf601ccf6f8ad6f725ceae73e7bfc881abf"), ("0737379e94ff3f753e8246de8c67a53ea493ee361fd54f5ea86fdd3069f9c3fa", "115bd7eb2dc948cc04e43040be601f91eb55b29572640ad577e5de90b070fedd", "1632e571a33716cc3c6de97043404073eee9f6dee6c9f2067f015d2751ed652f", "09cc471cbafe13b56d9cb2fb41d2185e4eaabdc012da127b7b43941405b413f1"), ("20e1bbbc6cf20e96af832d0e975def4628d2c3ad2903cef0991675a8d63744ce", "1d93061b42982aa5c443f21ed794cd02b079887d9e368142e4cd0c326a92d513", "2365d79351f938f707a14e21f2d00d6dc14be6e34157b3acfd74b39f7513c003", "267eba5ce7a59c318545298db48313672591e306ce1dc70a8479b177ebf5bc27"), ("19ba7548edfe15303725f521d7efef8df2bc96310205b0bfa0523961db89eba0", "2edcd25404df2030a85bbc0b2bd098a58f9ecc645c8a108a189cbceca1dd7c41", "26bfc84f22929320cc9c7e3c02a70d3305207a3e029e80dad742aaedb84b85a4", "105bb112323ec74cbda54535a21f188178a6f9955e5df43fe354aeb7bc398e1a"), ("0e3803e7520944266777a1c23347eb5f15ba0e41442cfec28a3bda6b02bd69bd", "0087ef6356dcc1768cf9a28480faadd3989994c504d335c352f62d44791e273a", "1e95034b8b94207f5f600ba0f3f762e84b1f027b53b2dc356999726b9029a3c1", "261d60e06833cf9924070b07b2b27eefe18d3ecb66fff27d5ed6740c8a2040ba"), ("02dbcb40e2f021c666bb75ef509f5543c7275b2a6b61d5a157022ca0b0bd60dd", "1ca7e79c4233f8cdd7d4b8c1bb0a6a14db02ea459b73ca49b960ce8c421f8024", "1cb1444d2d39c64cbb08a15338c2533bebac89b478ec316bea7d4ab314be02d1", "20ab026f89e6b6b041b51e6a14b89ccb32855e865d9a0e42915c63106eb4cbb4"), ("2001f405e6009a5726d0f68c3daf453558ad9e697882f2314112a88d3d5c52dc", "094345dd2bc314c497ab5377fb7907dd1df703899131d8dfff25c378b9b71715", "0315355949c1ec160e0e21845e6245f1a5aa45e71e057f187eabcab0385cd5bc", "29613b154b8ac503edff35191b208b12f8d0d4c52995dca789b400aa3a559c80"), ("248f814bf11384187c9b569aee4d7bce8527ccf57619caa70674b5423e3d88d9", "1244f88d5d9a8c3bf1603f0b2da7c43c19c46bf4dfeda0a1c6b99ea3e54f167a", "146b199624761ffe6086a8e3c7f212d049b9de20f4f09574cad7bf478c1c4882", "1da7f0a564c228342bfa26144ec86b81b970799881ce313c29c25cd4574112d6"), ("08e1baee5a865d6b154e18a286501e9d215f6070ce68fa9f0531ed79d6904ab3", "0ddd1452740b361dfba24fbf23224d5a462f95ad433ff9fd32ac2e478bfb9030", "12fd4a980690cf3876075d51f48d15a6789622575d1c2ba566dd7e215f7064c8", "25e8434bce5a8baeeba6224af9afc7fcaabbcb02b7bd524aa33d0e5b08a8c558"), ("09871bf90dad7dadd77620fda4493c6b2a3a9ac4fe1c7ea4d3361da3842e8350", "296ab1b208d4bb4fb7463c9088b8ba6c114852f0686e54efcb363ce0e631301e", "2a87a288f2eba8e607958f1790c5d41ea44b31875125b3dbcea69f4c5fa4e987", "0d8fd1841e59d615da7e20a79e6588d547ba4807f12825d0b2e08883d0471cf8"), ("2d3430f3bbeb213415ef99f831bb354093cc2c026172462e0c6bd75baaf84531", "15c5c216f1d03bd50905487cc62c7bfd216b346cb3cb6ab42a8a2ff86ca0ac55", "070bc9b153b7031e895d3257f1df179940a19a3c39ffebd5c29474aca507c936", "10d4ae9039b73abd4b6f9913ed24ec3de592c7ede9db4a4105c3d86b2f45f13a"), ("123af2bd0d38f91dc7837419f8ea3de62da916c2cc1a083a151318a8b3d5520c", "16d6d5b88cda1bfd6dd995518116507ef57fe97bd79627eb3457ecd3319a0479", "257b2b244bb2064bd0d9bbb798628fec2e93bfd7877cc7d6faaac5033c2df1f5", "0b6ea6353ec32f9ae7f11a727529d6f200e3790e1e4444d10d2051938edc0ce1"), ("253c33f3aa41b6d3101356ad31ae3561d848a673c56ef0725bc6cd2c34eebdfe", "20dae97d3658043a15cdf1c4d3b676e74a55920cd0fa9ac5995b925f5e2498e6", "08610360f2b062dfb23a310607b66e554dd4d8db0a44654d1b291a76d49b6513", "010425af77fd8d62741e97be8cd530f634a5b5478854570125992cd459ddd338"), ("070fc655f03a60473bfa333a0e312b4614051d6be56eb53137ec5c7c5ee7d25d", "2ce51b462d7ec732f04fa7f43de126bbbbccb5d9dbb3d0793a964cf15b691d67", "1cd736cb2ea5d0571514c8f06223a9ba01650f7270be7a8e975ff6ef822971ad", "15e999b26e902eaf80a255335782cf491ca651a69eb563d3f7a74f61e267545d"), ("2f185652b23192d6da2faee892e2f0e2a52f7523802e50e9a1afb02e9d222d4c", "2b17cd4d3417efdfd21dedd60c2db4b0369b93fb429d8920461807f90718de00", "030bf75494cc748f961ec2c9c56bf9dcf5acd9616cc8fe8f0ff50f17af76b1dd", "21eaa9fba60d64102581ad49fe1d2a35dc8a3482fb625504724d9f1f3286847b"), ("1cd2005de3232d23ec78766f3b69f6fb97356c648417adc60d801652d71149d6", "27abc9ba864585a124d2d5e205d7643ae751ecd88b61b7d18237dc418d609af5", "0c61a0dde80d0e9e67534e8a8b29c64bc41c7e490b7542d8b061ae081fcdc625", "10e674e301f9342e888b9f29df74c6c06c2b14d7f765782513d74b8984d8019e"), ("2e52bc62c5f01844c3a385568b642b4ea6803684e2e4c2441d9b6552c72d5cca", "04ec103f74254d746d831abce0102a42b82d7da30b594b86114e66c54daa0544", "023af25dff7ec418bb0004b06ecf1e81a1880504ee1e34fcc1636d06d5d4a3d1", "1f73f49fd12971976d1b12e404d496169412813fddf06db6719f031d2ede0ca6"), ("18374847e9da4e252aa699c3887999d2613ad1ad26a4a70a2444e51adf7ea421", "1f4c72c655334469856a0f12dfb137d69de31602b98af5e8d8c3943324d91709", "2fc3a1edce44f0e70ef45b16c8cd89a9f0cca567f3370a223aef5e12fd4b0fed", "18b1f48f6c4ef7928aa32d1df108f29981abf301ff482edcf44a342cf29d397f"), ("1e33a13cb9f28bab2c4fb79a40a46f0a38db754f24bd8b5626f817234a508ab9", "027ac0a61fc25299bf5132610094b69ab92d9b76455fc16066e221d5d1b4bf93", "2fb27b0282f52f44c4cd95bbcdf9b6b6dded9885ffda760105c32cca40975844", "282201ee1e9f94366a2c06880f5d4798d865f3fba18e2f3716c379d3270fc428"), ("22c64fb0a47cee4084c51c79b34e3562d968f7a458f69d2be380774a827f59fc", "0899e965f3185e8c6c53ab08f8feadb9c53eb9df56217fbfe6fe8f08a7065057", "0aaaa318507fcd5ef0b8da84916f56d2a3dc7a1462d502667e194e55ff3acf8e", "138d4fd8f14a12f7ebccbde54b11bf08a410dd6abad23b29c5bfa1ade0370855"), ("208ef824922865deab8e601c721cfcf46517390c7b947bc582d68e9a80c1e374", "21b64e05d48ff5b3f2fbfdd9aceda4e1c7eaf78876871d300654c2adc216f667", "0f48039ae5c170141130eb7cf605f8665ea0e47c0eafab80e3c4856852558131", "15b48826c896f503aa636778e34cf843bd9dfbe91a682332b3ce97a7499d0f8e"), ("1bcd763f779874385c5365495c3ea944475a107758b4f3d69d09b63f0f3b126b", "26fe55b31f5b39133c086383e06944acbda83dd180078066fbf64f382048fc56", "09c8533deb5ccb8b1b8239333cf007bb2f1683e555d7ebf8e522a08cde607a81", "0aa24494c8eceae70614ab65b318d94752be628e984c2c70c5ab35bb7ffe8662"), ("0bfaf4c04cf66ba153149885404606894d346a03407242879b70532a943bd77e", "189e367ecd6a81ae8efd69266a0cbdc18d50fd8e4796e348261526571dcda066", "1f5308e7f7c259213d750f3259f2a30a7696f8d840730ad19c9d4046ef637a5b", "24c3fba238f509c6772841e7960686d7af26dc54597720fbac042f3a3578e198"), ("0d16c6b103aeb0fc1b3c33ebb67ab2a166a026143fc045a13d464ad9f5ff421f", "2375635be4f58c0804f3ce90d4133e0b0eb2e8a1bae8578085f85251618e207a", "1a7809bd0f6bea73e52e10aeed3584bff722626acf0ffe14de1c56aa6df0126f", "11d8da05d0cce19d68677632a4e2a628ff642881ea8d0f4b782da2bb2c80eaaa"), ("21774917e6c236e3aa789549d76dda3e76c626a7481623624b74ff9396894530", "29c5d6b4d137947987bdd3cd2c0bfe7da85f7da9468fb13bea3be76c95194d5b", "2e1f0e5cfb2457638d6e26218af260af17f3fc25e4a42d1d95c8db6a67b0c652", "2183dfe697d6516c919622fd1dce4f8fb183bbc78538cccb2306fd1b8dc72011"), ("153f6b9619daa328c1d5c46172954908f027dc9869654b8b6a80aaff5b51f261", "00df196c156abf7e1f6990c4c6c59bc378d01de7d7a6b0c9da8f21568cdd06fd", "11a505fd39f90df66e8731afeaa1bdbaad00be3d078114de68be675a3e0f3f95", "08391e2fa664cec098e48b22d3712ac12ae5557018ed1485255be5309e91dfb4"), ("2c95fa4149d9280bdacf2325ffde9763296b78a4f869ff5304e68d7f1e0df19f", "15764161dba251ddc28120a7cc158d22ce3cf8fbeed320ca89372258954d5e6b", "170d4c2432b2638ae84bcea9add1b7e8d0a20559e6988ac5df41dc4dae646ca0", "294de4ee417b64ae2ef91afd036adc9d5d827e212513b66a7cd90ba5d6f112d5"), ("0c083dcf6ec8e1bd1d89b4a24f3ded8b36cd12bb51dd2198e21a6d280378685d", "2316c4c3f66e6510c9dc1ed6bba0d8cc0ab9dcb7d78322058f75449be01b7305", "1b74302158d9b86a933c0ba3255d3ea709f32f53cf1252b2f9e1a575028b2ddb", "0fbe6d4cb1495aad9c9354f0ca5266bec1cf062234241497fcef13904192db48"), ("2edb3efa57235a5e1fab72e89c9256e73605f32fb1d111ef2297bf63be87f118", "0e4989dfcfc4b40011485b95cb1c1ec6b39dd12d9dc191d7d2a1eaa664def5ff", "0014a7ccfbd489d0be591b7dab1865aaaf52c7cda076cf62563173749d93a68a", "294d1f24d23a6dc88b45559cf04238424ffb342672db39b050bf34dfa49152a0"), ("0823b07b38cde0c5ae09650634d18107c856375999614b6f2fededfe2a09f289", "1b114d8dd094a57fb7561f9242effa0d7d5a9cee9cf5edf784412aa2a5f3eefd", "0381444be15ff593590f86b13cc460a3805c3c9b608dc4bcac77f7438082b604", "123426dd9d5d147150aeeda2c122bd25db6d4d7ac77b28a814486a05428bcd02"), ("18d169924620160b2fb82168fdfe3ad086e15788b25131f54170374b18388fd2", "0fa6a2cf42014816b83fb9fd39f65758cf30677b4337bb6974185839c54d2804", "1a75b6856aaa983be38c98e377852b4b0fef2f834db3abd9cda23b3868bc2f27", "1bb7ed309159346d29b26c552c1916197af591df249b4d8020cf4f32e5467854"), ("29aa979ccc8292ada2247dc35b0f3439b694ebb8fb7188155aa74bc673b2474b", "2344e7020e21d50f163c973a649995569d64efe911236bac8c57dfbab43cb155", "1bc77505db755c4d531893cc958a1ade3ea47a54d91a490bab278cf4db87bbdf", "103f17ff65e6bf3b60bee5a467af80ea7c11c1aab75c6a1d74fe7cfeca608856"), ("0683da619adb488e0276ba39da9942d8562e2e00447b7e9b0e02bbe4daae6394", "1d8861ea846b84a48d7ab1e4fa4f2641cd5cedbaafb202d061d46f84e694f42f", "1c37af67ba353cea086b00ffb617b26ce4315689b92c224e0f76f1a120a3f6ab", "167e5266cae9ce67d95526c4fd3a57a195274b4fc240fb3de53e55a7b1adc09c"), ("0f6a9c71e24c16660388b9b1b3c442aa0bede0d893a540f3c109091e8de6b0f3", "2a6f23b90fe2e5d3e5974ba6cfedb9c90cd3064a27b558d50366c630c8af7939", "2dab520083d5a2ac669afc9ca5ec3ce779ac1b8defc268f8b559333c9448bc77", "2bee13bc49e694e4236c1b1510b66ccc3d03a1a558d5c7e9f6ee78392a8a424d"), ("0b80ff3c123e6a2819a3c1c28367362280d649adc18b1f5dd78beaea9655448e", "1e9cdebad2bd5597011b04a29978bc709a1cb34f3a913a1c86f9a1db7f8475ec", "21aef5fc95a6767dd7b44926693adc9bf53fcb5a35fcaf34616cd445dc61a602", "0fc7202e05b1ef8d86be082a4c86ced4fb3429109f2f2860313d9c3a079d1680"), ("2c5be9aaf7f4b0624682e1a7a8c30b06d9ac8b4c44edd053a7a8fb620f3c5a8d", "29358df4cbe25203252d05594f59e91926edc930883b05920d53b0a2aa79f884", "2bbeab994afc6ebaa0398a06e82c7e777f1bbc9a85b2c275eee0c9a6d941015c", "08a19f38d98c1a2e89eee2a620091b3e0f91d68e7b18d35aeed08b6ba9ff4595"), ("2c31e4f80ade664df1556dc7ce024003692246f0297bba7aac9ccca5dc96c4ed", "246f7b59a810f266341a4f8957a824b0a6992ce534f02b92aca8436c902cde5c", "1d9e7fc980ebf6f9464ee9d0049d8de613ecb0c3030078005f1d5a470e8fad92", "27069af70b7329809b6c73d563f3abdc8404283fbe4569cc9c7b6917f9bdc1a9"), ("2ec559d337898260d09cff11b0b9b4ea03a2c8f4f6c573f3f445a4a14c8860a5", "07599bcb07458c618bc8df03d71e0785bc52156dc31c2dd092555d4a5e9e1a90", "1764e90a3dd14a5fc952bb26160bd70559ffac9aeabf18e615905375947efb5c", "0ca9652effe8a149415d54588faf072d5637ae060ce2e1e7c56c7593f010621c"), ("153bd6a2cfbd099cd02d6bac4b8bc17a2e6419247f9c8138692202149d8759d6", "03d097da62bf0a3aaa93467c85a4dfb07c2048d2760ee5df660426c17ec692da", "2dbdcc77545a2b2cafb293e093ce39459ed5cf57ef9f5858d249d86d51a1debb", "23bbbd3a572f299032539fc5906c54ff027c5360dbb28d1d0ce8fa137341bb99"), ("169758bfaabdf02ea095567c39c655b29cbfeefc94a5fd30e79ead6b2ff929b7", "2113a954842cf5e9beb3d4cbd4658df1174a6ef00b255e8ed036c785ddb0b7d6", "1c7209217008088d579a196b3518f6addaf61c082546ab9ef29f84e873fcf431", "1faa97421ee7205dc94f16391e5c33013fb3619e1ab92021e734f0fdc5b6aa72"), ("08f21bdb64521de0bf14e385c9f7f0d1523eb17cbf73fc0de7dcdfba9d284073", "11262b70e48ac524958f76750403526be50c393ff7a9374acb00802a9bca560e", "16c334f058491515685695a83e584c837fdf957f67e1489ae495c85d38ed019c", "14e6ca4184c7ca92ae3d05c98e38eafe9e2fc6acc5453d00c7c018045877b90e"), ("1ad21deabd4151d07567d7fde4bb3c82787f10d67e56088c6e507851c5f2ca5b", "223bf14227cc4e91bc44aca6650cb4ce63a2184ef3d5b04a5abb97c446cd5ad0", "1ef9a61e8743f2865f4953d35b2793468146558c79aecdef2dbae66763c3413b", "2a5f664e913f0dccde364690ce92fab02d81e9b98b43da30c378bbde4f097fdf"), ("144a2f898f5ce5c6416b9de57849306a1f81069bbc4dac9dd0711a6dda342708", "14aa203d99554de6a0137af9f2a06b7728fbd996f118aabc580d1d2d1ab75780", "125d7e05699afbe8407baedea4ea526ac60bf9bd302d170d39fe9c90fbc3130d", "01ce0b3d30072b13f3c056f12f1600db640965378956bc1346bc2f4a5f611753"), ("2646d3ec167eeffecd945239ef77100e601552c9ffb1eb3defa0debd12460111", "1db9e2fa7ff002fa29fb23a3203fb4e2822ef249eb0cf923a58aa7784ae84266", "0b4723317dd9121a2f833864373f01d8ca7b5de16cec65b0cc595088422eab01", "146e38f21aad9261473f03e5b7a4c66a1244c1a52276497672074175ed0937e1"), ("0ee7e7e4b88cedd49168314304ed6b4c8b6a3cb580fb83e9a5458fcd4a66067f", "142f32072351ef8f803b632663ec256628721eaaa845cf7494b230f0483e0d78", "2ffa505ba1a2f6cc8e5e7e17e89221132ecd760a46191ab61b30fc55e78f0ac1", "2a6be0f7c76e7086e15f38a65fe6175faa2a54227738c9e86af70f8fc04a89f5"), ("1a17d001f4b25ae163c01d72fe4b02cef7e65356bd3b83d09717a2aca56660fa", "018f0378a710a10149db83447169788f0718ceb4e560c83ba062d854d933bd64", "045990aed44565841537644dac1acde5d9729c10df60730a45ca4574c96dd280", "1924ce45985f855a2eff14ef56555b6d1a4a98e7b4bc7005ab0fbf3179b4f8a3"), ("129ac1cec60602cac78ff5644502b6979462349e1b5ed6c1b10d5ae2519e0e2a", "19f5247cfdff824cdf16b931115a054836bcd18a0c4d0d9b28e08e6cc0454357", "0538c650356d07b1f9bb08c4564f5d979f66347374a43310b00c3c223d454111", "282a26753a286bec40e4c20d49e4e38adb39fd83fb799851eeb25ef1217e2deb"), ("00813d34ca01c401393ffb214693df88cd8dae9a66c4e59f2f252404e805a88a", "210eff0cf5d209498124de4dfea9496b249cda0844c97b7daee9e0556e3fc254", "16c35dd8b06b384c95060ca9a44d196c87aa3fbfa632698268bfc685dac77942", "08003b227221730d76e832e89d3d0dc60719c5729401990e650e10867f310f88"), ("1d7b88f57e0970511283e9519b7cf2c6ed0d69d537360ec48e08cbe381af939d", "093ad63193f9969f1130ace88d8d8dd4ce9cd0e1f6f6e4bb9e051576cde0424c", "2bf7fbcb25ce28aa85324af1a484fd9a8c4bd5a73a7956c69378dec5bb195e1a", "3027e198b3f950f946ed12035482f5cbd09f1f88d8d109921a95a47b0774168c"), ("13af39942396ef3725b7cfd0be9aa7536ff3cc3c2a5c187f22281dd71584f046", "2c7a5f0ed4519841f98e19d9e60a803598b54b85949f2430dd1adf2078870cd9", "28080f5a07b954a12423a2121ad1bb544063e2f262b9324ffb25189973eeef6a", "02648f307d889865a7a970eb44704c56307f9ddcce3b852199ff4db6f4767e4e"), ("06353147e1a3c8341e234ebb3dbcbb475a6f08e19195a5522ea040e2ff512517", "2443107e6ddef4af795faf7f0afd66f36b3acd54c6ac7c9dafb745571cffd0f9", "29cde5a5b8add6c7b61d5dfc33e7eb8a8958474a8e02cfd2007d8a09e43a305a", "2c010df246c8175ead37f58a4e244412ce0a889baf8aa17dbd9ffc3616c2a8ef"), ("2244ec7d54a095808ad9f883215cdebc17437c8785f1d17a063deebee31a183a", "00d27e4335435beaccac0dc545419a22ff90a8f3b628787ec2b66c1b8bbdcc17", "24b36420302a98adfa168d33c4fcd2cefb8bfddf06b14231cf63ed1db38093b5", "1819373195c9d2e6929fc38dcb427921405a7c4e3a058253792a1bae359552a7"), ("11143406c91a9d6a04de8c2c4021180ff865038699c4278a77c8852577b6d8a6", "02d89fa71252ce378c8cdd0ec98982f233306eb3de93aa07592f37ba4ff3fdd3", "0a5ee3e3c6f171a093d9a99f8c770c45fc54b6010e544d4db9b6b02c20891948", "1c36d1d46a96aed6c66f628cf9b808b3a22f185c1a43257de26ca5507fcfb4e7"), ("22f18095b361d6d8413834d15948738ff1b2f47632983a2409fceec030428a7d", "26b523e1bd9ee7eb0fbea6f30cbf8797a048649b4b310627eda4a1193b71eca1", "1255bd8bd79fb80b2ad6dc9a2a17f62c1692fcc1d433c21c332e7a3d9a97a9c4", "1bab4d99bf1db5544b8f1137862dd8d78d5267e8a8f7e2a8bd9c712513326ae1"), ("28c479bae7809008b1e6ad18832270fc6405a80ff3ece621de426f13d2f86a66", "05fab78807fdaffc3019ad06cab5a1eeef3f6510f83e893fd61a3bacc2a8372a", "1b96285d34bc7365a85338165a991b78889a8a28404898e7226588c1bfb00410", "24a3f27cac176d076a8f800176935e8e2617b3db5a0f0f6b486c98d7cd4824ae"), ("304d44eabb020d7c9e546c3535612b489726ac8164c30e0a9c8171b451160265", "216ca13c26b7c77f2f1fb6bbed09007fcf5a628424a074f6f162be06d47ad603", "2484f7079a3579a261ebc93c96ce0b85f492e353ec6a4d29f811d7335c215da2", "02e0ce6a970ccc4567f1e72d685b36f4c6a2175a917788e0feed5f5582f71e53"), ("258c679faaf26ec1e05ff5c2f8e99fc6ecd4d99c4fca25a911b658cb5755da01", "1f5bfd99dca97bb1ce89e3d705df34fc74657334ba2f37503d276776c7581979", "1b84f3fa9af9d2243d785dc954175611631eb293b811f67f3d3d503692dcf30a", "045d88a01e4d30d3295499bfb975f618b39d67f038375d2a228e1aafbe780f81"), ("08edbb2c3b2b0a04b0323971c5fb40ba6f77c3367dda2b6b20a4e1535033bdf8", "1648d1dfc994aaebafcf5a7ff359990156985a315e269a23a8723fbd269f70c7", "22e786eda4845f140cedea436da3acdbbf3036fb83ebf93693e689fc66c3a11e", "210449bf7fe653b493f9762b4f83073bfb074592a75e91fc09328484f96fa9a2"), ("104b2752f4cb05b63c805a1ee1c14d72926d030f2bd89e4b39994d9c998db081", "22149a6b61ab6aeb7cb645aafcccb51a3640d6b3652f0d5a1442daecdf1aa777", "2f5a9a65dfb5625241e348146f57a3f46b64aa327694d7dac746e9d38569e64b", "0e460d2a2b1706fe570dc6de7f6f907f0d62757820d7ae90d271add8be8c0403"), ("27ba9da9059dd42e4c02aa986c756fc6793879cf8e4af2ff6350fed8e0419e51", "157874585cfefd6dac715c7f3c841b9e5debcca57fbc1c574d629d97c5c2e303", "15d11e963482a38b9301fe76f7733f23b0183ac66c06568a11c0749824a44ca2", "05dd1781fb7296012ea6294d6c289896272ca56c72ba962a3eda5a22b2b21fad"), ("29d9566fa563b39ef9d714b9f4ec19b05f8c442b4d5cc15e522b9764e2e8c4e9", "1a97469cc1ba5f6018708b5062b56dc0101d56c48f7fa5dec4b8208d68ebec27", "16f95bbf58b70d6a1251b61b9b686c0139fc81413f87e379d428d5ebfc9f1ffd", "1e43c1855b9cbb0f873c9da587fa4b3b8b49d8865fc0fc75f6f9d93e072a7f64"), ("07dcd326efa9ee1a81161027cfc0a1ca5fdd23895497024f9e51cc5d16115ff8", "15aac859aa6bab80c4c5da8b7799216c2edba7a61e57e5af599e69269813a015", "108935011028c9b5e536afb395802073645f03cf858fbb3376e9779499b35719", "2478e9936b8143a0da4e247c80135b9c28b906a73400aef730586a4f5daf6874"), ("2f03bf76b6355a31331e6fe88ce9138eb01ff1e13b46db22b9768073b2ee042e", "19073ef6e73b80bda9257bd78bd47cbd7e43c9cf0cbcaf1236350efeb9052566", "2712ab6957ded00b058597dc311112728467694a25b3052213e3530d142ec26a", "0e2df4136dab102b5b97a99b1cedc18996020c6c6a79fc484cd89bf85ca6de0d"), ("1b0d43614a6a14c9d3d462f07a7a25efd11a089c02b835ec454d4862f05fe4b6", "2406f3fb32c388947d127015a7e8abdf52a10cad175fd6fe9665ba51c6acba92", "26512c946941543999c8bf5f8d1c22b313e1311742563e788a59283579a44a59", "1d43b7af6b20b268c6c64a8dacaa15112fb2c4e86ca838b6354acfbf67421cf1"), ("13ac6b38f9395ab403bc7e1b6c5b801b684776f2bf4077dd8f541b9fde955d9d", "0fda2c393534a513f7a594aeab1614a954a43f422a8635511982bde768b209fa", "047c3a79ff050072e84db6bfc99e023ce61cbe7dfee41b0631a6a8e093f34288", "2a3ad3bb942f8fc280d2ac9e1a3a0135215b4df8c3ec6d406a6d67a18af07626"), ("1bba19b484ad4c7f721dee99e0dc7ee6b0b14584500867ec08860ef6e0c67897", "059d161f8a786f1f2422e07f9d9c5a467f1412aa4a85a8c48b5e937f453d2780", "138ae1b8885ed0b928c10f9075e97bcc93b8bafdeb67e9523f5a10a6394fe6f9", "29a15afe0d92d2f348557ae02926dfa8d53a5f74ec4ddfc1f0572728bbed0c10"), ("0e94028093cfcd9062a331293caca1d16dbdbad1d00378b369a4c15ddfa9f714", "16ba88f70208c85b9489807372f40ea8761237b06907030792da3f968080acb3", "17d03e154ccebee5ef108d99cca9b10d89bdade2fc76d6b25038f4fb9e9aec3c", "2b585ff4a70f48b8aa462557159ecfad8f1c3146310790a0531c8ddeda95321d"), ("0a0daafd6da714623169b2203923ea6f94dd57f94c2a540e510bc5864c506681", "033dd5bc97cf387e73016e10ea854e32ca2c170948756498a621a38649c1386f", "04fe2a4ea9549601b95d0a3ea2dced7e50876f1439f4c886d499b4e338659f04", "1cdb40c759a6ca6e671a8ac48af35c7e1a94ba0ef7e768f51365ce73b3877cfa"), ("0f9d40f7079277dc67a94c350ab653f5646f0c0f50c402fff8aa8c02a75821de", "1ba85f549869c58c484e5b50524078c98a10ec9edad90f2145312424d71cd8e3", "0eb8e3a49d159b1b171f96d86a2f4cbb98ae4e167a295d20227becb2561a3d9c", "2ca47448b3f0a912cc848752a3632471e6b4c35607d80e98026530c4cb122c85"), ("059784ea1ce127379578c285f6740adeeadffec88acaab17cd90436efaed632c", "1fc5b3d6a33057570ce474ef08a78982ae27510e0642b19cc4547a561c51e8a5", "0fa12541e78fa6702dcc8d41b5e71e129614c3fae4a655900843716f0932916a", "053eed9b0f66fda8a1f5705aa0b98a609bb6159a3826d706fe74d63456c3ce00"), ("08f95f6bd65046f52b36b5e683c0b3b1b95d8bffaea6078335cfb270db37c0f9", "0dd9d57ede633fa019dbe8ad0e5bf4e13402fed594d3dd59214b63504686e278", "2b9d5b9f799a17191305f0fc243c2f0089e677ca564970356e9ada2b1292d1cc", "28ea9d8b81d7c892cb4df5268502d629e0b4a40c6646cb852f333ebd6dc5a67b"), ("09e4ce65cd36efa307fc45763bd4f5d8b00a4181e233e9f4248d39d0ad9eff2b", "0a30b479cc3712240c102bdbd8f1a49f389e47f644e9aa545710a0ecfe1ee032", "169b8c5f9297f4caa5bce7c52ef079dff043e121933efe5edbc675155927d9be", "27997f19a4c0068764b45e9b7bda0832480e0bbb5ccb5e13f9ea62e19f46ff8c"), ("0ab0716c2f69390f184adf4a6559b08e4fe8c2a032430b0474697f1eccec9bdc", "20fae4ae636d442ac4fa6a2b4f7a81b2f070021758de5ca926c7859e20688cea", "1032372d4d1996af3a32d5987fb29a0af3cf39552e6da8426b222585eeee7f4e", "157aa56532042b4d9c806284f5e072c8742dce8f72b9d26f3842fdf89b9803f0"), ("044ef07bec5336d5f2b59ff3ad5f7f76feb5c2846e4c1efe75e572e8a4394e3f", "2d45ca06b4e43f964e044865b655bbf4a09ad74b807eafc1f4a02e9705095421", "1b1270e2ff7f74b74a8c9ff8ec34a5ccb4c2d74791d3c4f8770862c2f94b8fe6", "1497ed8541770e98e3eb5c9d2ae00001613193647238d9d0b486477df8e0935a"), ("155c833386881bf61879c855d0d17b7bce1972f19fbfee0ef43d7e930c5f2ac9", "2fffc6cd23abcfceb6fbc96ed1aab9caa7c4a636e48bf10a328d7e6885737109", "2985551567c0f5f566694075ce3e4559050eac974a6f9fb86fce0583e58acf28", "007b2506fdbf2c50a2726f049ca20a7451a3053d429957ca141740829e523061"), ("2fd02f5f82a895c6bb623958bbec2c4bf77207d27a30664cf4fabf3206f7412e", "29f6cb8e29e65f05fca4a947d8bf8f274992e8e26ddac8d295fe082211120c81", "1dce90ab7869864d616f405c956ad94b1bf1f9cdd14b799ee52d4a80bcb7e331", "1e4d174a8bae4d926b15809aabc70bf8a0d018d72cf61c5e7c9abc3c4e5672b1"), ("29d190648e9744bcab91cab4e1afad5f044d07a61d31dc19e788ba56f134846e", "1491f53e74d92d71b6db0e04afcf591dc7a8f93a4c402bd05d3aeb5775ece4ff", "0ab94f731ac31d8908de700d7966479fc133bf0a321b70f9957885e12fb353f2", "0c94f7f27bf1b235e26aae9eecfc24d13dcc4186d9498b96619d946290ef108b"), ("1de42264f486bdad61325ec37eafc7a9fb3aa75615d02bc6ee085859cb5b257b", "23aeb4cf5038a8634214889ebe91a6ebd6c18305d608f119e3e07cc06123817a", "2b1d5fb86bbacb140e28758daacef5dff5c219e169065148f426a66aa8aea5c8", "06d2d7bcf7dcaf2d25fef0c1a40300e3f736cbacc757a32df545c5f15bc80aaf"), ("1a26efd0d3aff226a88d7b6b8e7885feb5287cd4e1df18f81ee35e4abdf2c7a3", "16f5fcf0eca96de57a7eafabdb34fe7d007271807cd542ad00323484c5058704", "15f15572a02cb90fa82a6f28eb4ec784d3eb7fe8599578587085e16c429c1799", "003f8698e8fefb0079e5698b8ced3c9c049cfa4b38de324b4374eb286431fe1e"), ("27858f5a406fa18a9e55981d5f1501ec7b243ec4d544f9c341738816deb5eaa3", "22a3a2a1996c67d0c0cd779096691f4471243c66302d29f670b8467eb4e2ba9a", "0b2a39e11cca0c6872c2dc4ec59ec55a2ea05be82da14e113d97ac86aa45720b", "2ff26ef0eae478a3d2f6061c19a191e82816ff74fe32248a8fed47c78dfa6966"), ("074a87534f14d93940e92848b0d6663ae3861a1cfc5d3b2cd6db9ed07d604c71", "212cf50de258005613f1ec5e7844c52e116ed36cd821d21f8cec48ae1a4d5d9b", "1c84cff45fdf070ce378f4d9149a0ea2b187c9e57090cba699af95b809fe4152", "20067fc1873e987cc2b57289d22b8e275c348489ce20cc1116ce4f4deb9da588"), ("3031fa5b9e9f29106e98856b9f60020eaf5bd2b032b8979ab07c7205bf00a535", "2d58a4e15e5a439819053f68ce748186a6922c1ed01074d2dcdfe205a0461880", "2dc73747f6b01865cd390208388c846ab1328977359060b760c18345d5180497", "1b6da32ef5bc5ac29520f4f802d7ebf0c19049c4b87a92c12f5ad742153f6503"), ("2abbf304a731f3332b2ccbe65a93c9dc41bea283a63a66354154a9339743bb1d", "0c6356a628e95408c87fe50480b13196ff343e9ec2c3819b9747e7204c553413", "1bff98a12ca74da39cd61fa6a2b470a1db06b95ae326669b108e2185d1bc27ed", "2daf167fc352697dd90cce9b5c9a834c58a874ff92c70285c0e6b55bab622ae5"), ("22bf52563ccf0167029de6101593ba3bfe6013eed4f495730872781d7ef6c57d", "189d5af0c1ce23ef316c7737668141572c66c7fb4e990fbf684b4c19fd1d5f86", "195e60a02ed19c9ff96cdaaebc5cbb68dbb919058405e034e44f6567f8cec4ad", "219509b190c2a7436079d43f25461d49c6b454831b577e2f83c2c49fcf7c11e5"), ("17abc460e611a54f517755a0f6059494e4c668cc02b96bdb3736830fcc267f5d", "0af958ede4e7e08303652631e1da39f4d7a02b9d574ff03b074bc93e29ce5ab7", "2ba83775f03a38f29163feba04fa640e2baa9cff9ddc70eefad089a761fb1bde", "129bb8447f71c262acc750bcd86359604f04a8ee00eb10ea0bf5d4e5a813d053"), ("07e4b541a45ad170471ee05431abae68604ad82126dd55b9f7121e9fc49496d8", "0c693d156d84b21d128b527412bdb0fb0203e2a37a1c77d0be20ca070ac40d1e", "0556fc4b9376ccccaf12317361be3d3a873fc14a7db086e2a5a8826dfa28b7a2", "21a9da1d7cd1fe394a7844bf108f39b09f19351af410069250c1b99a1e5f81b7"), ("0ec4646d8ef96dcd2d0d176e86d00ba5cf2d79b3ee89ac13137a5a28969c87c4", "10b3210e9408e017d8ea3e46d371a74b6d7a813d86b35e856b37c11b7d6e0c41", "287579ee7b2389b187469846d140cee406493e1e81b5363b42bc072d0c2965fe", "242078c4e151876a2d141471caf645c3fb3c19c4a56a4d5dcd689e1f691d7684"), ("270a64f48609179e09a2354b1ffe5deadae1f81dfe783f1d64b1b48e17199493", "0c2b9f85fc099fb811ddf4d7c26bcf955dc98bf153b5ba298728f9d29ebfa421", "0652d5fb5377d40b3afac534a99d4af1d269594dfd1fbd62fd5dbea02a1be474", "22e33d5d244ec98d7d3269cb9851765438a86a6094f9f39915ab027f047cfc07"), ("0f0c9c85057cbf092d731a528e2bfdc28f3c6200234e1d8f54d45404614da72e", "1e3f53d88fb1b6354d095b2bfce92c423ed92605de250de5151601c89ca568dd", "25ed007b77b00b2838d7e6b0443cf90988fd9654675156ab568168a6b677a416", "24c4de8007fe910699093a1be73f390a4656ab5573179f87dfeb1663da71a232"), ("00e113490ab52c98f4a687c31d9cd92b85f33e2db02141f24ea39fd066e2fd29", "0090f64bcbd608e18701ff48a8fe6c096fabc575c53f61fac241699b3fcf0e3e", "0fe7a71f28274c915345e54ab2b7ece64631a1dc0d4e610d806ac82fba161c4c", "15b93d0bce85e73b6f6731609a407cd07cda53effc2636449058c4ae111d007d"), ("1853162591c1377d8e96583e7021aa8c161e475f9be7dcfffa425e3726062d7a", "2a0530a96e2f4dcf5bec78723530cd51d823634d3fe5498c25c4a01ff9538485", "0a2775b50edd54e93f321b18fdad8beecd564f3642bf381778221a2e57dc2aca", "0899c7c12610af01f1984fcf1e1a89fa24d25dfc2ecdb9350675ed429fec58c9"), ("25fe9fcb805523b3cfeecc222d56cf88c95ec7b1bef84dfba5d98dec71dc9f5e", "14a4a0e6fd9f7e008c6a9bd82b2fc6745eaa1456386b8195d38ce7bc6f127b5c", "1be1397fc92099ab5e2da5aa63a49b50e2272bffbe438ef8c11bef6a160a0806", "1ece1daca169ef07aa5552079191f24705ed365b1344e965cb07491c2167b7ea"), ("2f060310f76725593c5732045318abb75b7419a71972274e020cb86ad2460592", "07ce6ea2333ba1edb4a12cfebc3a4c90aade37bee89e3ab796a147215fd35a5b", "09fa85a679d0b4ab0e9e334e70c447fca80d8a164b3812ae35f3ea59dd350428", "06d43575fb143e096a8ff3a60bb442221d2519e9db0e2b7d9625d4e2688c4142"), ("23c882a5ba87c5ad3c2d3f1bdbbc9fb1a3f7fad6fdaf5c52a199ed922a189eb9", "1edd6d91c0d0759ee608cd6d7abb977295e383ad4a5ad82c876efb8bc6ef2db1", "1147b3227a5347f06a6bb57bee3a1c70894567af53758022835489e255e46c46", "240de62624a28ff365a2d606ce66d07058954fc397867110fbf602b2ba647bf4"), ("224fe82a40eeec46101f63a4fc8c3c4848be43f1c4c8afa003d361935b54310a", "24ece9d168a54eb066d680f3fe77a868515190a66c9bfac2a46a565f7472515f", "19fb7e409cfcb6a3509815f589bef45919bf194fbef98cede490b25653df5225", "08dc29ecf12378292b05527a323720a656c576ea0ee060e3b778c533c9d1e3e5"), ("06f661e70f8483c9e478e44e9bc1db180dc739dbfbddd7564e7ea5decd399bce", "0f3ed3f1b584390ca62244e2b2549b75c4b9c6013bcc81e3a56f6da5dd017c80", "145f92bb005cacde3fe9d80c5ba4108f89a09d4918ec80d9a6112b04d98b5807", "287f85efff453bda6017393dbb68e5ecadcf6e1e1f29dec196e204f142fa9e19"), ("172e2d19dfbdbe2f121a773a7ef3fe8a4979263afa9c23dae4f3c870a295e417", "2f650bec428aa4e3d432f5df3965ea9556b1cae69e5526b30940fd4db0beba33", "01c670a912e8718fcd502c003cf6a0ad589b5a5ecf06e8d0758fc5e06e2c466a", "11c020c781e037a7c44cb5e141505d2af3b6aafd4f394110eaab74d7bf719e35"), ("1232d5b03938fe08f15ab63ebc1c56fa6f88472d18155bfff3929735ed268799", "088dec12c450975268b2856ea71f6968832a183a1023e30962b2a73ff9ecdb7d", "2703cf59fa59e13049cb61e86f06b52bc3781187b3373db425ba6f35de776604", "01b074fd82bce2c2f42d923672ca17aaf1aa1f66e152751a53a8ae0735b6bba9"), ("0f08149b97b4cac01237172de91d8701f9e009c62c047757fbb13b68a140513b", "01f2601459f54cffbae940a5860692f43e15ebeb16416ff5cf2f33172c23bcf9", "2b057fa384f7615589b92f79161e8845e11d9b08b5b27439058563d9ba70ce31", "161f348cce21efe7b154192a754de6a27aff25d21e61baec2c5d9829467ab704"), ("2e319df83189384b45e5f4d530130daba04f16c22709ea1ac5f1d66c78593c83", "1db61aa54611eddf8378567e11eb78b2258f9f09b07ebccb32c48f28e037114d", "168a0d6ce24fe85784c066a0efea8cc2a818e3d34562a456fab802463a745f85", "156129a4966ee8b4af366cf8a30968fcae860cdaff733269b166b8d7db0acc4b"), ("0036056fb11eeda47166c0e3853f72d4fc76f38f055994ce53a5547d64b5db0c", "2d55dbd4e609f8b81bc274e2f467ee1c07df60ec2569166085f458a311d08308", "29965a605e08e02c564813ae757e1be179c2849b469d6a6f4511dda75bed0f0f", "1efd8bdc50d4e489f0a6872e255ac9d582659fa38b5c411c5961da0ab9a1f8aa"), ("2949f24083596ce54abfa2529e54c532ac82be1717b9fbaaadc6082efc1b7821", "1155a6aff4cfd409825323b05dad6a24a80cba0807a7613fb08089c5a38350c2", "20a79253eb25fb32650c96ceddaafa16f2d6ee4c6999c4c99e87e12fea79a1b7", "23213c9a60d92c33f575fd1aeb7ed50eaa16c982ba5570a33819e502c35c4956"), ("1b5a276b623d2cc1f0dac4de70fbfe5d1de1cdac046af3a5d6a31263fcd13fea", "03e3bd25716880f29e08cc8584de60bc04c8273c40093dd5cd478e7721fad86c", "0131c7270e1883e9c0f0aeec219907fdf63c95ea2169d90f419a4ccdac20799f", "29b9bab785e0181ba0abe4f30837ea30ecf26741d14789ab140724ec583dc83d"), ("0b3d17d47d31f42eaeeb8845b227b15bf5dee78006436d8d497da5b82fa69696", "2fc43bed4e79ef640ceff919a21067d9a281ebc36a5659f163c678f66ec4c196", "2cc660403b925798484bb37df558a7f250d621c3d3a5272e3de2b84af810640b", "1e9ef78ce6139eac9e0841f6368792d59186a881e903f1517f55a381b18d205c"), ("02e2c2ec6281dfda5828ebf61e760c1624dc4798bf79326b015ce1bdf7786a44", "09c71e182be401f26ff7f3894622a966444423fb57f39d7f22dce05f01a1f209", "16691ad986a6e3093154f3ce646f0fb355e57b2119a5ed6165c7e119e1bb954f", "253a74db5295e701cf626e2f24251d2c94e54744422c38b4084a51a254b9dfa6"), ("0825b649d136050fd1120aa88994f199cc7821075a930f63c2e30adfa84e6617", "2ee08ff74d6bd342558562a8b7d3ea78bb07ceeb32411ee12d59e2c775906194", "041b8007e5e8d28616d6590a13cff1b4bc30e98491246078c9eb871974da64cd", "05c6ad9717dd17846e4678c1501026a699088b4ddde7acf69c6c7d8ca25132da"), ("090ab4001f47ed564462c48b41709f72df43c0707f6d32dfa11554875e119909", "25dae05066e4dc03cef7125f9b0ea61da9a937b0bdc2bd5dcd58712e71fb651c", "241918c31a2a9f976d6b4a2d99d405c7b19a520ef5355e769844bbe8e60cf401", "0867967c0b51df3cc25718d8afa5a4f641b6e7b15e9cc90268c09933ad89a157"), ("05fae1dc99ca45667d5f4f7e62b7b21de9d7c8904e9ee82d12e0f57eab087918", "2d449438fb59f6bc7e0433d49e32e79f1b9f2f8bd45544f9bfd2122eb1f50406", "29da8894bd7978aecf21d8a9710a9ecc20c671e4e13252993322f7e4456fd7d3", "21df917f4ad2243592253ba72923ad435a9b3bb47f91a89278d8dc08f2fbebbc"), ("2f95516edba935328fb5872a90fb4b99ebf53a61ad1d7abe5a53070b2754a176", "0fabaacad2201b38b5d5cb7e1fd6b1c7789b6039dcc3cf59910c02870adf38b5", "1dda3aab6679c4444b22f49a91dcf80f871dad6e574e365ac76eceff007d83d4", "10478b12099b81ce614c8f845cfe5140d8bd9c5ad12b0515c9463f765cb535b0"), ("28c4ea8a047bae2495e85c8ce14d1a2ce646f08c953da69a95cb48404bd81038", "2aa7f4f101980311a992b32cf3ff1172e5d7060e7a8ec51af6ebf1844d8f4d48", "2052cc5a12bacafd63116d5d00cefbadd64be5954872cca54a9a83d617e1dc5e", "01018d1019014cab897cdb3b984226d07f036bfda4cd74325bd270e465a16d30"), ("2f2f96c1f770a47a52e9da43d14c16ba93f6ddb46b21c64cf2a2cfa3ebe2183e", "19ecb4fbeae8490eeae86348c0f7c0d911cc510cb157270e1e7d943b3d1eb15c", "0f8bb6670f6fc7b793ea6bf077f9b96fffb4a80935e251eac374763b17f62496", "2526ab5b7575f0838b1f3776de4c79598aed8453b003297f468ee156b39f529c"), ("0ac0863d9e54a69291bbca46792a310bd1526b84b918ec3693b30d228964f983", "0c1f47fe777a611509d37e65b356e0937420047a8cb5169b06ae04e05f7800bc", "2e7f3a4be4987b5f1769640752f49cc23da1b102dad51bf6a59d8748a59db695", "262cb95d7120ba0267d1855eacd02de2e392fb921a622c02e2da34427845df57"), ("0e4ce43106807695308b122eaf9e864329c322e07debf06ccca67dcefb8910f8", "02d2043cd5dd016635a88f23d750ca60721d05d4ec963a51aba0c39b0d5dfb93", "11fd2e530a3e86b3dc22314e44ba777de326e54128539ef93e8711c444f0370d", "2368588d885c116949cb35b764a6a8ea2203b96ce8112c3394f666caf0557c1b"), ("1a988c8536bd62fd1c264e61f5e8b32a0c23a35e23b7c4a766f3ac6fafd8b604", "1c0f609ee9fbb25b52699b8313568b5a1ee1370a2c9f31380144d1dfb2580724", "27555d06fe415e84c1e4fdb778de98f82a78daf2ea83a4eb4b7bbc492bad41a3", "0ee62d038025bdff228a158b953a99c766b3bad08224e99bcd473ac2e26cde01"), ("1b8e1962b8f9b568726aaf6602fe161f05aa7715f6ccd0592f835970f15cf4d4", "1c2ad1e74387aea922a497613279d2e2b61872a425253b4bb3fd76257dfc030d", "08299c905408e8139bfe8c640fb3f27494a391d2db338ad7611b61feba5b21d9", "13c3b8bf981e8d843ab6e95b3adbc6e97c159204effa4befbdac9c5136e5dca9"), ("031737995116997aeff946113c6f381d056a0c35157f9c0adc296564a4329d43", "151c8eb6606b9f6a28ed4f955a5e9d70cd097a1768b1464209e90df98399e4d6", "08c4f0f847d16df7a389b54716877d74202e55f14798e69d61513ad5e893012d", "0c29384cf2970fe2bfd1abf292f39126d0bf4e2a4fb9efcb2b7491ab059f4d52"), ("2cc32dd5993b4adf7981712f080d9812174e43ecda0400767e9616fe6e30b63d", "1934738f164903d0c67f5bb0c24f7071d4036f089b60eeb7b901f5cbfdfb2a38", "2aa44108efc68a3088988d36732c16b33ddb736f5d24dc0d3faf35feacf1f571", "07802a5fbc0582836fad6f65606ce7204c405d4653658c660a0c31a8a725a3c3"), ("1b3d31f6224a5edd8acb1b5d3528f95bf324e0c6061b5ec1c980cbb4d331f7fa", "16d8d94c1824f0c191c1ca852285fd014fd67423633f80005afa975f8bd9f386", "2054ad550da60cb31d24b43cf2354a6fb06a0b1279c146146525475fb8f74540", "26c4ef48670cc1d6d9d0a8e1c9b0063e25117f65a89593af582b24713a645dad"), ("028d796faee23ea264505ca35f53e0b2f939b72f302367bd99788b77d0738174", "2bd0dcab14b2f6ffad6ea68499e60a2e40c7f50d235d71021d827c531b71eb00", "1be7c9198583f96b7c111a5ce28ae3a793a7118ba4faaacb1822cd6d20ecd1f2", "26caf67d7012bc6cd7e44810bf44e79559150700004591c1cb3c545e0f5b7fb7"), ("09013188735c9ad683da78602dd982bfc1a4cbf91095d78e319958934e66c71b", "0fbec565f7c0ed88f7c8525c266652cc77a3dd406abbec50443445f0ad356ccd", "212d6853fc569631277e0c03924923deea7f114b9fd633fab0043abbcde0defb", "2ae3f99d1a9e6e1bde96d572b0f32ceb432e21fd96ce7ff63e170e83f9a186a8"), ("137d092d976c6ac1430d4cc20abe1fe603f8a8c579938afdd825b3824cfd2140", "0490eb18a4977dcf115e9c5d90c731e01e16459012bd4412b3926073567e317f", "2b5275648750d83b7219f07474e61b18043f1f0ce735ba891bcf5a957bad7571", "178c822ace22eb618fa85227f5ceb4d04200163cd4337e8b189fad89a6a4d4ec"), ("1cd2b767f2add76c440643684c8e59c2cd28e9919a7d60298b0fe116f2644c74", "2012ed75b2072e02c87ab1c9a01f979feb05c0844a7bab9c9aba74b723dda8ea", "24b15925227711420240b59e6254b068e9a84993d9fcd9b3ee622cc3afd9451a", "0c378c94bead70d187550448364b7f3d899cdddf8ddd8cf25332a23a96c42b9a"), ("227a7fdc081447f5ac07e461f13d0c0cc97f5ac95949c5b2cafd2425abe9b838", "194b566af53d06e691554d525e5e5c688d343367b19fb985b905c8ab1880cd23", "2278b7ec221b273469e8f3e8190b6c38836f683ade9a3e3d919f7900844ea316", "18ae27987b36e90e772263f18889f8b65a4fcaceb20e21380459c83d3fafe3b1"), ("05a1f6756e5aa675da10cafbf400f8031e641f77c6e7c25616b0d60c1d6163cf", "16cf81700470d9c172a1cf8b8ba7f59a253397df9ad02b61724405b4f52b8ab2", "0e2b81cce83de25a557807983d4123af9007c271e463e95ec9b8e5d5cdcdc66d", "09aa2a64d0fc7d7dae30ee2240b8caa6cabba4628c48d2114384dee72764e200"), ("272487e97a1a093c3c0fbebd1aff1f85af5e135f4d36ec0821be93b279119ab0", "0ad6189c34bf32aafd61ef70cf15251962b0fcbb22dd26ec114b836d33ccc6db", "12f0eb7edb6b7ee163703574a56ea0ac1c874d17847f384008ddf96ef30098fa", "29e38491a80c707105f4f56727fc95cd7b77e6192e07f9514abb95433b434c02"), ("18646ffc35733778958f54eebeb0212ce66605d016b43551884d3a565e1ba2a6", "1351312b2f8b2f51a75fa92f1afcd5f80143738a69e1bcac14cfe1482a1fc043", "1648f1a3d4e24991f4d6764308dc90c9c33cf37447171d087544b9e72a65bea7", "0287d76a11aada59f186998dfe42b8d9d082f2cfd8f849976f41465b7f80050c"), ("07783b6ae62541d3ea395caa2fb90f189bbd040c0fec9535a0bd4c8e0c7ed81a", "0df94d880fb5fa6804380c00bfc93a3ecc12e5bd76bcf2efebb6254e01afaddd", "0d7d976c37b51439614e4cddf2a6d4bcde72cfc531af44e560c6d6dfed0b0bd5", "24c94e2257718c3fcd4d2f7b057ff36bc16b3f86cd397b5a31d80fe912810288"), ("09f7416f5eb8ea57093b3a8cfd7a9e00713150b462f536bf2a76bfc136fa11db", "095c726fcc91fbf680f407c41a2bafa194701a2ef40272fb89711c34f1da35cf", "188fd1a3f84dc0c31b26c07ab164563bc66d904176f9d4e2175372954986cc19", "195d2dd2d13e0a5bb86b380f677f83a83cb56fd9555c13aa22cb9f27259b893d"), ("019f04081ee5858e9ec7443a9b7443d7bcc2a4a29cd11cea68b513ef06c78301", "0a83e50dbc8694422d5ac9b3895a65929a66cf836bd1ab83adf6804151d6426d", "06e85edf4c09cd7004ee976a9e559d4cb4c9bcac7c84a921959fdec581f259ca", "24af73d79d9c4e6f6fe39707a68d3e5997ff5a6f80f255881e455bbe19f6eadf"), ("21e29c467ac6cd8e7d719bc34ddbc5e59ccdbd1f78fb13522101aaaf09d46d45", "094df2771b50b7301a0123d7489b4304b0cf16b3966649e8cea779ba990e0295", "27839040d37258545582ee52d891677a24e4a78a717f9318e23439b3294460a8", "01da493e2a67db368b2e1ae4cceed0b82f21cef119481f069a03817531c4d407"), ("0f0847a9cdca274daeef16491861c70b9b677ede68901bde1750e71479594e32", "19a029ec96faa18c80d5e318762b021a462520970098491ffb8a81b62d4186aa", "06e7789bac6f538fb5b67688e081e9d63cce26fd2f022a2ee129b93a67696067", "2b4a60b02897a66c30cb21018e2154e5c90dd97b9622b320484c34f372b3678b"), ("2348f44f377bae5901e8ac2de79fa55287821974caf10547d745f6c8527a5c67", "2df895c3808c2be75aef5b91536e40365e010e339ce76a69c722cd23d44c0ccf", "0a8964c22dbf1ed80b209df3ee85a4d2c60c2aef82a63cb260fbcdc7c6107fbe", "124b85c29135e20fe9278b35b456f82d85e27c9184f2a613fb94a8c6909a2a59"), ("113da361c1c6fdba4ea32088c543faf1a84cbabaa00b3735ac6bc5ac82281b66", "0bc761ec3ced197a512c1e39b82b00493343b443969084a6e4a2e9e13cca8dca", "0713675d86a07d6a8ea9648a2bc44598a3db0366ecc3e311b7d8bcb770de9246", "04ca01add03058af83aae4c42b1b1e0bedd6cd7978e53f6ccda09c1aca539598"), ("1bc0372489081e94f3d832ddf30fe70cfd4331a7548795e45b38583aef026d90", "2e18bebc37bbb7dd2a80376c242101a96170be04e66f4bc6f8e3d156ddea5b69", "2c074651e281d682e01513a89385d9d14999b05a3ebd611f731803a4f2dae337", "17c82dabf3c259a0726b146e1b92af02d0568f5a5bf8ca688298edfc9648a7ee"), ("2ae8f6624dddafdd24d079660c366286b8ebc3a61aee6e4a5b49ba608ab536ba", "112932d5fa92bef782847e7bdc1cbfcadd4bb42bbb4c4326066d3248108327ed", "1849d721f70cc3d2575d5a5d6b6c4c1c33fa2a78b631279725d6114a94a1665a", "29dfe745fb6e99cc3c707151c4294bddad87fc6a2065351a623cf0058662c684"), ("004381a85abc7ca404e2ad7ee8b69cb7f613e767586e4c1ac5a03a09f3648526", "0c89f4882e63660fd0c7cdad99191698d5299e9ec22f6e91fd5feb0e4038327a", "1df5fd67deb2e7713764d9c722d804f1363f7163ddc19869592f5b80c2032190", "18acfe7de00eb29c1700e75a158906b8ad0d20570eef02cda4de2af81a346053"), ("27b3e7e9e5be768c9bf7a70d6de37e510d0e5e58c881d0ef8f1396e00de6aed0", "0803ca48224832e9f4de5d0b745bf1a92d3afad7ece585ab2e1e377691b5db82", "2a4e7fa4fbd9e42f05dcac93f0250ff330ce357a3c26ef025085802f5810a370", "05dc46112b66b222fa5a03a80c995ce97f6e1f2ed00d870c390f405ffe0f499c"), ("1f49e2bc970e7beb084ed17c51632535e141436f3e914fd38d49c413e606e6a6", "2048708159fce88e5781afbdedce3308e36419f7de4530e7f14dc4cc10d1871c", "25eb6da9b2dc16f9e69fa4faf6da80dd03babdf9088714ba2cf64bb42b21fefb", "0d341a728f965a80a1a66caab1b8cb8d120a159b4f6185ea56790aa7d68ee3bd"), ("0a43765dc95124d7d799879fb3825037503ca8267b52ebe58877fd5f59f92f8d", "27d834003a315a57b09b7a3de0ba04c5ab9333fabb5055ee2e379f3c8e58ffac", "0d0a75461062805c17455233cce4cf11fd7480edc2d9ee5ecbc09c2ac24d5203", "1f0b8d14e03373b31d0e6e1094760d8b4e0dca59a655a434d1de107875ccf77c"), ("12ca302d9783539b6771ebccd924425989cae3b4f62889e4bb28f51ff6b13610", "200693e3f997cbf0d0091cde5a9e0735e50994b7999f12dc7cf335e1cfbc9f82", "19b2660612a4dfec6e4900f27e3171e20599d32ed47e33e504bad2b43bc8723a", "0e08bafb225455e49284daaef7472601dc9a9d584713a9e630b0b40b94566a24"), ("2efae16bb2f6be49673d085a766626458a3f771487b063eac656daeaee651e93", "1eff9d2ba3784041f124dec03e209d4dfef0a80698f3ac61de965d363c739c55", "16804e41722859c4f4b3128670b7451fa101e0de133ee2d2fed5eb5fa09cb905", "204456afca2f30c7147f4ba37e9daac08f9677ffc09ce3460e10909b0c7141a6"), ("140a144550076a94ca8b50ef482e693709d7033a9cd8b97aee120bf6a1fa1d0b", "18960ada92e0a74b3a07b04058f6fd2f792805d7ab17e1339ed616e054b553cc", "0e1c3a5d752406a04247de00f99670c103a84ec74f4fd7bfa461373cd9422148", "1ed2a36560aa34d95cf1f140e6d6e9c6783038ef080bd12995282f5fa52f85ae"), ("28af284603bef2cf3a9bb0ca7ee368767023a3a19fa9999d1ff3a4c212b7aae6", "1f7d46749677398c555d087e08ecebe1f18129ebe9930b45343878a74c06b4f8", "098b076fa9367401d717cf1d734123decabfcde71f8f278896f9eb550501b467", "2f27450d11b9fe47d52a8058a52072ab4b8c901e1960a6d139d0585efa4d67d2"), ("2d4f7c9abcba1f0e87d619698aeaf2378aaae3861e1081bbc83fe4d4af87e0b4", "1df4b87ee48b025d5e3a12aace106d20491a44b33dcd72f4a2d82b7c3d46b9a9", "27833ba098f2a9879ef82ada23ccef6372327651ac11d7ebdff78493580804f2", "0e93f3b3a46b093036728b0ec3ae6325b47feb2c1f1c10a7432f41834e84ef16"), ("01980ec5aa5c7cf5f9ff9eb4004eaa564c19f84fa4a3a78ff36933a9d5100aba", "2fbb344bacc6c1c0219944a561708a64726e121eaebc7e69eb2bd6d426a33830", "23c9bfc883150d139711d0120d5e970f0c7baf7dff9e1482454feb4c14329700", "2d0b8a0d5f5c1d106ae4d6ea49a994f58cf606740954b6c6bdc59531d3491163"), ("0ec29a559cf7a238f715b973c165ab41dfadd93046c17c065d004364d22d6e8c", "219bf72f24856e86fc15336ceb9e0a5c8722f61bc62cfe864fe2e2e32985149d", "176c4c762abbb69b132e8eda2607607e1e94e554295ea7b553360f761cfc686e", "0d1ce5d39de763eea40fa0c4b538d72a8f9f9c7eb56c9f31253262ddd3d80f9c"), ("2502d727cff198bf380e6c3f6da33ac779d3286e4b40fa27c6bcbe350c88dc97", "14f2646efc17479fa0246dc7fe54ed8d35a44c62c24815cb4215222c3df012f1", "294dd5d0d6a20653e7b873c151677dd1722f04ea67dc47330198dfbe69144a60", "29cd4e667d767098dae68670e2b2770d686167dee590c3260333415dbac80408"), ("25513c9f40a1913bfb87a6b05354351fd4bc7b5fef9aacbe9b10da26494e705b", "10db9e16757dffa28c7e3fd90e69ccddba523403310b98c70a72ec154fff4a1d", "29d5d7e6344e3744456d89eecbed31d3f44386b6e4bae05d6d0bc99c3ef7ffb1", "2c6e5e4a1de1b8ae3d1362f4ad0712edf693dda296b2e12ec92366499a0e2302"), ("0a2b53c94fb7c792e56fb02598984eefef50272bc0f25681d9ffda3fce8aed3b", "2383ab7b8a2493bd2d05bd948f9ad180f080f934c55c0cb4456a6a90d11d0d4d", "1f21df27aff7b7d4153ed806797894b948ff53c7793ee7872cde374f90cc0391", "2a1f71b1fdc3381d1a095d4f389f29073b15152497b5be117775106bbea3fb42"), ("13329be9009ffa320528272e808ee82c9cb69b6b16d6d7b294b06fcfacd5beda", "0d4527ec777d083597aaa8607d68a6e5a5cc7e775fedd9ae0860ab822530a7e5", "1604a219b8ff25f17de67f338c56eab763de84cd5c21570a7f0304251a7b2da9", "03fb690750298604ac7d95927455624268fa821f94dc7e75cf17f490470eda91"), ("29db83267a5241b9f00b8485456d375e515c37b03e276699790a0663f8f268a1", "2b520a8d3929d50d1471aa4827c76bd88a2d4b0826fa06c5d84719a83ea9c2c5", "0aec98fb59e5e5aa294c0ad0e66cc7729881743b8539dd41e2df4ef6dc4980a5", "2ef4a8fe84f2b3937843da7fcd03b6badbf131ed6407f3a4002aff60015f5ec1"), ("236ff440b7ba5772265eb375a528e540f646e29b125686a13395680d9f455833", "2b73c1aae8a7058569de99c371cb1013c01568cec731c9bdfd257162f178ad14", "2e0520227803e4b680b0fe135a955c6e95585b3177520fdfb1eed3afca953059", "0f0e6b6080ca2acb44c16ce121117e54ac453db9572f5931e107bde0ebec3837"), ("20a5c7d5d2663c598ae398c1add12bd6a5d798beace8a3100848c7bd4503ab03", "1fb928c9354e44579d5cfffbf638e7f3cbfc22d33387992e71aa0c4273a14541", "0bbd670ce26071392e47077af83fc08a33854900d04cd4053d2cfa463f3708b4", "213d02e33609eea6ae7ea3031fda80f4f2554f5984b4705960cef8eac66672c8"), ("198ae0dfb50b38efbe3cf98346962eb70c79f089d293f5e43f34efd605ef57b6", "1c849edd66d69087bba14fc07c80a2dc1bbf6553552d784b731ff6c15fd14c1d", "035733ec2073f901c0690c9e46f6341dc342afcd0025ed587d77dcde985ce25a", "2cfdacde6c3a57177f67fe142443e932ef32ffc4c37f8da4cdf9ded497d2366b"), ("1df1a1521eb1eb340f2bf69eb5ca0183c30a4d457917d4a8b610416f4fe92840", "284fe003ef875c6564f292f263f6fd14c31a9bc3249690068ada2e87cbfc8412", "1fd16ba90067cb8f28bab3171b9dd1d104c7535f9169c31b610c3ece5e150a25", "02031dee7078ea58689f74a7186e011ccdb27143e08c5bc8ef21ed6bfaf48b03"), ("1fe783bb17f5d87dbfd63dcad803e4039fd416ab1a3824467519b7d2ad91e926", "07fc348e6adccf6f7c9591a0f36e32d8e395884c7d55bfcf5f8354ee09df9167", "1a069a712fd32013d65f4664b6f8738224be9a440e73358119e5a8ef3ef2a1ab", "2818bc17e38f720102517d1b608f2b3ef4d63359938dd3bf095e46f80c332785"), ("1d5c10f741897781c094d2aa386741e415862edbe6948993f29ffa068e946be3", "15b9222a02b6e4efbb3666c978c26af36985299daebe9c14dec540b3976050eb", "02265d45e8f6e544eea8f9e9f10a2dd25820be5c469d41241515dbca02971035", "21751012f708fa3edf9a1cb7fe03d3d463df6fed0ba3c95be4e0571f42c203ef"), ("284d63d0456e9fd3b990c0d55ed8fd7bd750974c1a993bd21c80d0a4d7a6cd47", "180bd0dd0a44e55c535b6212e5e8b81ad5c8f11e9f9dd21eeb251a997c804116", "2d164160fca99835c290ce45eb46f9e51eac08c75c9057238c0b670f9b49c01d", "1307f0c4c66c23b5f87c46c8f04d95ccbe322ccdaa2286e5b97f036aa717d6e2"), ("170aa3e42dd3b05526a584ddc4d96b2eaa133cf4d537e18d139403da31bb55f2", "163b04a59f7cc2a8f24bf4e2aa717164c05d65201e21879991456e2d76686bb7", "2b3b12fd95f23ad14850807fab8afcfa371e8762a492884f533c6a100b77e337", "047b3d97176fbb39d15f83847595bdc285e574494ae23659de0eafda337b89c0"), ("0b4b33ede5e875415e1c7c794de36e2af8bd73dfdf07fe973e52857fbf2ba52a", "26f57b62ee88652bdec09a2751e77479fc07ede76b854864d6afcd4d0083e9a6", "0c544fe7745817fd9c8fb8c30915b57ba61b31bdf2bfba0157c2da3b34fcfaa7", "2802c6c1ccf682647850a5cde0e42248e949f7ff97a663a3078b9eb038c54bee"), ("1a9f1c1e517caf1b678f046e605fad532ae9e1113f41746969358658641615c5", "24eacdbe1a11c3fca35bfda1ce29beeba35dfd8abfe46f1fff0a510b48c584f9", "082b0edead39cb9122e121305916c58f40d76d880e0533eb6a93544b844f2650", "0b499a0c8b9b76742b4f958944ac7524a83ae6623713edaa9161aa402507bb98"), ("0cee7663f8b7e19ad1580794e2679b2dfcebfc427353bd5e265c6a7146a495a2", "29a0b3cd7d15d93cb01c118cbb53837b691938eae15c7aaec7bbbd9f258c9260", "27b042a616698975f75e1c348adc638757429bbdadf49e00b1bb1c930bfaaa06", "1057a7cef744571e6c3d2bcbfca727eacdd0476fdfb914dec5e48456df09cd02"), ("1d8654d9993b3f502bd84da5dc11ee3c11fbd2c1ab1feeb3902c29a4c3f73340", "0d8ce4a4ab1cefe28e981fcbdbbf9f4273f7c4969ebdf8b424041b5efd3025d8", "13f383662d0f76a071562bc824c90374ee2adde857f4dbe058ad20febc8f827c", "0adfc184caaaf3b9245fc3afbda86f5728a34891c2c1dfd66408059e3385afa5"), ("28caa5ba55dc292baeab01bd1bc42c7682b8dbe77ee09c7944e78d56aba087fb", "180f02a933b255d7d8fba00763285431356d619ac7d610d8540a30fe827c2026", "0ab33b7285c518d4ad499470f7a50c16ec10f56aefc974f77cdb39cc1e516152", "16dc4fdfc98e03b7db642c01b81fffdbad5a880169ac7a0c519100910cb43383"), ("1da4ff3b85f7d60b1f0d1663a40f2c1dd871805cff5cc5b6ec3f9ec3da724365", "08f6cac89c35daa452bafb837be925d6307095227e93ef90da96c3d41471f7a7", "2fa91d888f04001471c15e8c9d4915c1c76efb6adf61a4034147c0cfbbe6bbad", "218bbc2be9080a2934f7a6e9f3fd65f42c396fc952abc6042379aba243e8c610"), ("24d7ae09f127b32f138be6a516476d0b8ef471ea6972280f8a2f3749d7b6bca7", "063525764580c38a5322e82014bf4b839cdc7535df03bea018af103d06ee14e5", "0eb1620f5300346d66b2a84b347860c5c270e537dff2346fec3112ecf513bdee", "26ed293ac9e9649d337ef52fc5d53e3ad5bdec38217da75823a2139890d7aeed"), ("07994a06d2745de598027d89f505e79ed2dada5092cc8c00242a4508e5f60ade", "1ee1f56bdb1e43a492360b2322f461ec5f576e30249613aef5f615d6eba2992c", "254527cec8930d684b98c776ae8c007cf7159e149009fd8fb7581eb75367ec2a", "1173969723b72bb600e368cf18906700e44ea73f075058cf861c5341709a0941"), ("29a19705d46af0bddc36d3395fc2fbec89dd0558d90a307df6dcf069c9a5780c", "12ad7f125a66f94d82e4d39de40adabf6246712bbfdf19f1ea171fca072689d8", "1193078135b228a9c01a56fb2234629c58d882c1c0c8ebd0ba1052a2c33caf3e", "14aa01857ed7035881c6cb473d8ab98689a774b442fd15d560d998ec2c24a5dd"), ("2d45b56d4940cb806e52f7321aee36c1c0ae0818d7dc0c031bad7235daa35a74", "139b3798755cfb94f76a1f603fbcbaa93df893c4574a9015f3969c959b2c2279", "1ba91b163932f3c167367d97bd40195b1b418d0c2f6d603864c08f02210905ef", "1c40ab3731339dea9d39c7729c7c38de4730d947ec82529bafba32da87c15639"), ("245ea51e847c1903167e1896e37b3bef51368532d1a23595cdd253390cb06937", "17dee4cdb9e0b18d43979cc060c7e5db3ea69e166f7fc7e0a8f8dca561cfa493", "2d46c6e58f28e95525a64e540cf81bcefc86fd4d3c2420bc7c4f2bdbfeeec194", "12ec1642d1f5fea97c5477d1db83c79e61fe86c935763c482f1aae0bff950ca7"), ("00402bf3acb493438aaa421f9942dc04f7321f5e30fa16c1aa10051517e966d9", "03b48813d142a2927efd07e13935b134f4cf3e37c3e65d900e801d0935d5bb3e", "1fb59676627a311deb8456dc189250d1a31b1a639e351ae1a8fe9db16255662f", "17b1782176aedbab9f5e9a17cac8193ffc17468ab58caaa4e43fe6f172efcebc"), ("08441e9fe0d97dbe0517acc0ade79259975bfd1f4766f4fbce72a544d7c360ec", "0ef6d6c4f1e10114df6655da0f357f32ced9e65b0de024ae121e78747e10677b", "1672825d6b123620c8ef35d808ca5daf0ac208e608d4b8d1546b1627b50980c7", "1c6310242ceda5295d27b31df35975e12b25a3ff18b2d2f61a8cacb3ac22f719"), ("12093ba983aeb0b8853689d147bebe63e95e22e797bec592924f3b58fb620e2e", "16aa4768272f385a5ad7bf38d332bf17e05e0587c194462d2cc8cdce505e1eb8", "07545087482766b183a07378249b71e2ffdcca23a8ee61119e789f5fa386afdd", "2e5e069876a9a0a01f0ef2de1491fa5cd6766ec61f561bc58e86d512f0488cff"), ("2b87979f2035b7a7effa45bba29c39fe10a1ef3b1601f22a366772531ce2cc20", "043993820be85b32b4d8bf8e012044f6d538aa4c1e8365102d54ccd8173594d2", "00a6ca2a051e123c41a7304298605889ebd79eb9e81f562313671e414bd75c79", "0a607cebd97742f5262a2cf236d6eda7658049643844b350059e2f8c16809ac0"), ("2bcdfa316ce5f2a427ebd1f2efbf2e71729db47cba0508a502855cb557840f4d", "0469b23eae821c73bdd42c8608bc7b4d216d63d93230ac962740ba921457a249", "01400064d50f1060ccdb9c834ba2fcbcdd5398c104f84817004d671a39b436dd", "1a3decdedf5bcaa3b9c71f333907563e1c30ce2572b895ba713179de0eaf574a"), ("18e51009413e81ef66ae669bb52531a16feb7543863eed34384c0fe35cef9111", "0bdb964d8a63cd69518b1265ea4a047abf1c2c96d7a766956e6b2174798d38f8", "1e7d1e0a10977c99b7b2d9f6154b5482373f21deef3b9bcc59e839912f3ead01", "0f8a3256951c04af229bd95bc8715db6b0817ea28d6840052c7bd8ad018a3caf"), ("27040c1e67e683c26eec0d88c5d2d4cbe42ea89a03607caf8d7fc6224eefc941", "051b2837fb60fbf0bb819f8692007114ec5f90b23856e7c07175bde6f628710d", "25df751a82387c42bc1d81acbeafa6ac6f0a0d0eb8a969558ab9af5fabe0f6b5", "0a647f77366ebc8158c42f068d99069b38bd497173afefe709c1cf55799af2c6"), ("2ca39e1ce796fdbcc264d4061c7e4b6c0a648cb9d91f17ec62832e77d6a79a64", "2772089ea408cc4f903cf017b320c778d324eec3010d12c478c1469251ad3b11", "2e3e6538406298eb89d1a14fea8b22cba504a269ae3a41e68f0d4bf21dcfa56e", "239e911fca3416c44bf36e9adc0dcdbf5668defd87156fa851e9f0f82f7b27b1"), ("0480477bb073cf9d9a1a6a01ac3c7df002e78799dd80889439e67a9f7686ac6c", "2db63ccaf8527aed97d4386fb8f101427315c3298dafa1b37d90821f2c2c5bf7", "0dc3063a48ca4995d570dce845012d894f51c723f7399cb68a11a624448f3572", "21ff67250a62c359230b60ce95dbe543eadf1afae82147528410f67b6c816da0"), ("27c63376573d9e0ef43b2f1fde553a09066663914b2d61528e9c354632e9737d", "26152ef18f24cd6b90ebcda74f5b3fd4ac5097c09d3360982348894a1d289567", "1732bb0ecf5cacc37f0aee5001b7178b6944d071d394245214aee369dc6e285f", "110df070bce130e8b7df35df04444955594f43457069f89666999d53f121ea0e"), ("2b7c69fae362db14427f1200814765f432f28a25d4f287587c8f58470fb67d6a", "22f41463bcad2841cfd07faf3f65c92f452527efd6aa20fd123017e12195917b", "226c4db3fb79e115a4f52534a28ee24c5237bf440447abcc742827efbef47a27", "040921869cdfc76183db03dc14ee915bbac1e6eb99e66876ad0c326c5f6e3006"), ("006a3630fccf93b19b0dcf518cbf008d69bff0c7d1d5650634f39d8d7ad82264", "250e9a9b92c4e0a8482f301315bf9cd9f7ba2969f2d98463f2965bcc89d0447a", "2adda6befbd4fb5045f121219fec9dfb5a864eaa7d371fda7f2ad0489743e98a", "29a7339944e2d2834bea4505fa7c67d02194e6595e900ea0a9e185752805cdbe"), ("2a05d8f4bed6aadfe5c9f94a34ca95bc44de85e9276a1beaab67c2e301e28296", "207b7d772b84ff3a898050e1eaf44bba0d9d7e6fac9a666e3b70ed6e3ff8e377", "24c8a87797aac7e4cd08bcf5df781be83f1724b86f85b28573490a00898e2d7c", "1ae09ca24f8af8a8ad4683a13aed038bffdfc6a0a20c003b03b9561b1bc25585"), ("1cb8003110d3733b99d4a72fde627451f418735f8cbe9a4ec4ea8c4c8a690c3d", "052553da809ea98b8a81fa36878f78a8f9512fa5f35ff55f7b7b109a56661102", "2b81dd9ada6f465909838b6c8062397dcb44265042fdb9a16cd8ade400fe7c79", "0bb076f443c5f5c7555317b457aef0a26b1d53c20cb423c5ffbe6f9f14dc8773"), ("112bd2aec8593ee9f4585e610359d37a7afd7868b7aac8e15ca912cd743486e4", "2062c775b157afce8f500adef801dc089b129f54af2e2eb1860e57d5eae4824a", "0efd53012920d4569ea1bc0027f0408c8556a0ad235208a72c435964ea807e62", "252008ea5f7ce79f47c9e34e10943ff787b1775c6c848faed4f93268930fcc58"), ("2bd6093553a3894b1f53dc166357393ed23ba11edb59b3bc9e59187ee347bad2", "2681f1c68da6b59060e42d62e4cc450c90f2c15a73667183596f5c623a005f93", "0d91c5ff8c400e2f40a96601ca1fab57ca13a9d66ef4104f5d94e6d7dbf9ffc2", "2e4c761b8b9f50af3f71420add2759efbf5547d5c4e5b797f9bb025301124404"), ("2420489ed8299982606be275c5fc91e36e52d9f44eb49bf9536991128840f78b", "297d2ce86b1be692c3b869ce6e0faf7c4dbda68443dd4d88468aa86533c66d62", "14fb011fdb0007df639e8d59243633648d57169a937f323b942bb07a50aa7f79", "0f8e3bafe4ce0db1b2d487db6b1a7f957c5c60fb6d1e68cb90f47f2ea4362c0d"), ("077d9d47eaa9863238acda0d05a79af9f6962592f02b331a51daa8bf8d0f24ed", "0cc50c4dfebc19494d2f73c8d4365c45387b6caeca5037dfa03ff8f986a58732", "13842fb6aea859914fa8d03e08a64708b338913bcccf68da3a957ff665674c94", "110e06a11589ab7cc48b8e40b2b180be3dc5def2392ea0e04edbdbd10267ee89"), ("2bf308df5128eb91513fd88380938858a73be5af8c9adf19556ad54d3671b793", "10394d3ab10784d6f242d53da437e401b5cff8d7aa6a22d7a28087d93c3ca6b1", "26861f876cb677a56e3ed6403264319f697c44c878106a6dc9a2ab125401a317", "06ab3bf1564ea610b5e0c435014c9b6053535edd2eaa2044bd954d4e5c613b86"), ("1af115923290f0a078e093258b63e92447b811caed6dee6a22d2c542588226d0", "055d7d4420e3e8ed85842a000e414531eb1806bfdcb87df8738a0e6aa905b370", "039238aa90115578478887a7ec02feb1ffad49990832ac1d2a70ac307cb9f644", "2cfb8577004325e9bd5449108e8c35de2e40c08590e16cec22fd948f4266aefd"), ("2414c615a7c20fa7afdbca264557bc7846c5ffe3cc869b316675cf650ab8dd93", "17017a2519604fde111d680b1b48f1aef9d2bd65ef20ea5962ec9a0c4fecf883", "29fe869bedde709ba7a9e808520edc2e1d1480559a7db530020550035f65ef20", "0647725d88c5d010f66849d3a27024db5d69acaf3a8479c89f039b4b01d582e7"), ("171bf5f2c5deaa1156a5e3e6b0c9297585cc2bd0771a6dc23f24cf3ccfd26a2f", "205a0cf31a46369866977a45b01ff427d5deaeffea39f85ca6b81247f765caeb", "005744b7bf9fde4cf66936fd96a3541e3c27dd03a591d4eafc7515ea429b8a3f", "131ba9ba4b03c2d0b1055288dbc17f53748ca98cef588e8e9b82037bfff85d88"), ("274c73686a16b05d23ed70a551df1d37bd1bd57eec54cf580e73d8497efc7b4c", "1320d351087e44819693eed86fe3d10637ec7ba0b5693fcd1cf8133061ae770e", "0d6cb38f1f28d25d181a5e0d3308755d00e1de2aef7bfb6bdbd2972360a708d6", "0881471dcdc77d66bb0054f0796ad0bdcf1d9cb28e5e2f1bb6299c308591afed"), ("0bb57b48b29f90f66e23733eefc62c0cc9e9395d4df3e745bf2d22b07566eb2e", "28e8121b08306c92ff352d8089592c9c537aee61cbe6a5614a9a82867e9b10c5", "19a091bf52db108382a659fee0c36c627ffaa3ef53b4c79b638da4c85e55bb37", "2c040a41ec3f58a69675674e32dbfb776ebbb7bdaddaa2d82a7090323a347679"), ("1317f3b14b30ce95b4d4ac47f024d05d8599c05cef6054b60267a7b4062b8127", "120667e5ef3191478748051cabdb1b9e4144a27221ec11beb36babab669403b8", "1c54eee825256ca4b919b67e4fa0c11f13fcab081aa7ebcf07a99e42e14fbd43", "08fad3a67ab67caac8ccf6df3587cd93515fac054df711af5d6ee61da275a67c"), ("016bea27254fb5fd2ec64fadf239479155a2b1912024d7fc059fee463840197d", "04809fc62c88dd7288966ed1bc340c54bc7c2815d70ec872b20ae0348d7c877d", "1a4eb47330eed6472c73dc15817a2c5cb48a821e9adc3eb7525504d768a736cf", "15eac0244e3a21480be195dfaef412df8f4ac7d2347de27d6f269b619c13b868"), ("17812573bd60ea2ae52ae58b9b1bd492d213c5c0a08270d90e5e939a2c53afe6", "00350bb565a6c29bd2704923b01ce7df16bca42ef41cf5e6212bc20cbae3435a", "2d168eb4187fa54a016c0ba8b70dc144de652aa54b30958ecc34db3471ee5603", "1acbe44c4e36686c83f2b2cc0d7a3266e705d09fa9e9414d22d03d6672f5192f"), ("0da5cbf71c85dfcc6df1d3eda31b8713e423b7266c2981c85f46b156f8caf4fc", "1027da5c7bde57749b7d960266c322dd578ef0bbeb35fb638d3ce1611da37597", "2e7e7671ef680d64beab05d282474c75ed429a4d1e726b92d29e885187400d49", "135f5aeed3a7475b3e4f95a472994dd0ad85834ce57827ce03558e4a85b67d29"), ("2c47fbab6084f098eccf6399db4c6e6f300f9dd5083fd2f7eb0fabb0deabfd42", "2c49a41e8ff19696c24e349514f184117a98f1dbd055e1e3f5d0e3f6b1ccf3d1", "0f04d58b8a54af791c1abe2bf012c770e5da0b7d048bfc740a137bbeca2e01de", "2ecb3500a532f409ee3879ebd2d5d5fb133e957e9a0b28d27dfd8adce3e7aa45"), ("00581f223892f3584761b0d78f4562f97236a7f51bdfbf35a925c2ec5578f710", "2677dda8ac5227166c14ec6defd1d8c1c04a78dba53c0b8e29833aa05670447d", "0c20997a0478dfbad8d21387b35f1825c19e9af5e9fe30b0efe422671ef3067d", "111a2835e5bc7dc0948527bfeff1f7bd9615bcc1997ca5e0894de62c04ba5e46"), ("12bd34e3e98ea5ebb3b08ef08f40dc65d4e95c05bfe20c963d595f001262e75a", "0b2a58374fd4e701979957762fc3371aba171eaac2cc9e11381da8c7d53e87c0", "1cae0713ad2013e4367ad28e7ec3d02d01d1c2a8bbcc8f3fee9f588606af09c7", "120e9039753a9168e268e583b0e64a9aed3bffda866eae8f99b63b89b24d9cac"), ("20a52b3efa9177c882065669b5446776af70a0e37555bd2a881d9aa031515635", "06f506de38bc7658f28d823ff3a2d17ee10483149e366ff6796fb3b7f1b2dfe4", "00ffcf7e9a119038bd086896e52cf41e877cc88a11072672c547c4f622f2b548", "26be071f4eb22485c7a47c1a584c4d449191702b024e5e3c732d8be42a1368b0"), ("2ef6c77d315fd6ecfb1887a26d52981c5ea4a9206730ef36c9386c654a16757a", "020e8cee4d9e6787c60ee261eb04f56a85dfd0357c04acaf4e24074d758d3020", "156ee52587c17a6551616ac20aa5c48e9bb164ba4b5cb63849110a83711a5655", "0f2023d63593c7238ea6b66f7789fdf7c885f7163862786135cd9c92f9cec870"), ("0a1531b1baebfed23891c5d0fe77563530ed8c564f86cfad6059367f11721846", "2345b8542d93b6b09bfcce4d2cedb10b24dca7bfccda35326b8ffd1c07f73b4e", "0c2e701c471fc5c331307a192bb6a6ed60107d83c399ea95987ca9c90dd3d982", "20435255e3515caa9bc4d79c30736a97db0de85e6905d782b74ae930c18c118a"), ("1045fafea1d986d6a18f27d898ee963ffd1b2d9bd464c580293717605b6124b7", "1a14603e598dfc10d61fc34d5a273b2ce9be3fa6b47dee10ef8341b36c473c46", "252d9a1b85d0a9a3fb951875032b39deeb6ff3f79b0d15498aa561942630bc12", "06766e10e14fc107c25e7baebc7ab6af0947933f360d2c646a640f52360a52bc"), ("114a07675807d23096eded39a7a49afa3276d89d4acf4c80486a7c39d40b3178", "1f4bee9ebfceb4040e2c268333935e06bcda2a4bfa96254c8f81a0bc262be79c", "24896519f5388bcd2443b42f893eab695c8fa448a7390f4baf8cdc6be600af18", "04dd819423614ade0636292b3b3472e8c26a4a777299333d1a1568db509188fe"), ("198460d2301e025b09547e06c82edf5217a56b2897ec9792083eaab9150f0697", "2d94e11a831920291811fc932ddddef7889f6676354cc8f739fa90e55a001f8f", "259f5e346c7979e534eedbc34c562c782b4da6763795c3336559eeeeb14e6186", "1804ff14fa85e6e57f2aabcac0f97c4f0d0ac4be3170a51964372e0f984fecdd"), ("0c1066b251716c4fba1379dc8a332599667f55a1a0d49c719a6afdfd8f30f518", "17305a07c67a88965c2f04652b1e939898fa701e6518f82c0c289df5e7586ae0", "0889f8f3d217f0f55226571b297d6b454ab887b9430dad93c620d365039c8fbf", "1e276983c81cf4274505fea2c8f80038b19524e15350b762fc45afa0e1cdc88a"), ("2e4657a9ec5bafb401fb890cf9b9f7dcb611908a58d6d6f7792a8f7726fea243", "2d4a0a4d5f5b2189139c4e4257109ee60450c38f0c77c8960cc1d2e900f02d20", "0a6c1ce04b6ad042f195cf6721445217b8ab25bcaa0475852229cb84c1016c74", "180dbdaa672ed224e5ed34ee32a4f307acdd8b49a4f9267827ef78737e0d1196"), ("2f7621115deeb2d5a53ece3a27ffde6a7de87ba4e599846c0aa2b4cee9a43376", "14c039ffe6b43de077de05177ebc5c573a224ce12ee8ed83111bc052c6c23c28", "26cf98d1af89a4b386eabb78b81e755aed993be7f784a4eec4451f31d054c03b", "15442b5d9446983015d201d1b8ecc50d858edab6ce730d569b09dac68ee80bf4"), ("25e3876d1e26630a5df4744da69f67e0e4eab361f09491b5e820c70ac4656be6", "1993a39b8f65086d362ce2c043a71d232919dfe80cc27aada2d873931589ea85", "2db31268d732328893b570212e97a7ffc8d48ba6439169930773e72e5dad7a7f", "12dd075fd559b0cd1f60058dea0348196bd518c33528eda82f8a89057cf29d30"), ("28e76b8c29cf31375225458d41739f27bd251b770a7fbac9391d5ebb2c3a0448", "178d88708c58cd79afb7c951dbbc5ad4735ac165fb5bba1d182d0a3b84925232", "0c35bd17e96339ba1b4ff1743a58ba5abad0ed1956267facd14375bfea1749fa", "2e6c4007f9c60c683bcc840c3ce5884b2b26fef8dee7970c2da27bfa339d8657"), ("0b9d3947429bb36f22fa0424863c7c6913b497ae56c60359bf7c9d6a9a0f69ec", "1f9c930f2fc3c1beda3a57461d1f47b6b516ffb96e2ff1a7c5ff053da970cf36", "07d3f356b78ae61c6141580f8e65af38bc5331dda115fbc117c922287409454a", "20856c6921037364728a9521e4625878a98220e1a787133e808ca48b4ab7edf1"), ("23d95d73f93747df16852eaf78529022bba6dd04a245c8a3ccc0fce390c9d773", "2841dc052bad501dc99af4c12498e1b292660a524442140a3c8abb6908c5fd1b", "042c7b28325f155b51f4cb1eba3178a9bd6205d87c45a140309340e12d1d0276", "24da7b788ec2ef8e3cf884c22515a2a9964f462db2f71133ed3ef1700becd830"), ("1b74eef07e59e31da43a8ad795007fbd90de4e4100cf8b29ac8d33c58182f1f3", "2edfe7abda44a2f456a4151d9a1b963c34a404900e9e0221318e054cbf00a2a5", "1ddc30251cec6973cd5220b62b31004e46e0a0b3aa324ccce88fd1f232803894", "00b7ee8636854d2b9fdfdb49502c6506914f37a0016b3c7a2f61fbe9edb1826b"), ("0f23a1f2df53fca0bd679de5421ba5692b57a17a119feb8b0263d9fcedfc35eb", "195125b12dc554048a42516a89325a64e870325cac06a9dbaacaecff04f77ffb", "24445bea449bdb3da893232d0ea26f9da120481a3ab06b6a6d037104799c1d5a", "1cdddf02a8041caabccb0a8500a000298e2ecac3a32456fffa07be7980f37403"), ("00d48fcc3fc0dbfb381ead2f4c71d649a54ba211ced126e2cec02fc4cdab4f45", "0092b8827f3a343ae1201bea2bd473614a762ccfeb675b227683fa6b56b99219", "18ba5505b09d963bc0841a3220aa5e0abb96996302fa50606261765866c27780", "162775255dcbe88a57fd86d69821e819ea17372d25be24d10e9317ccbf933334"), ("0bd754f8c80968b52de742595a3f2e47ea3afac5a37eb0044a461b3b5abe7c56", "02f9ff462aa03061a70a62f2bdb33740e3985b126eab918a6967557b32fe6716", "0446bed3624741c66a86260048833c5f1e347f8a59e00170da5c5abdf2848adb", "0ca08942e2e252a4f5e135504631eedb55e14a5595dabafd1619fa9e9f49b531"), ("06fc720ea2b4b4f44cfff4a993b0a9a056544cfcbf103e29b331c44a903d2670", "1976eeee115c15c887bb05f105e12491f8481de643f52b4551e78444ddb0cd72", "01d7c55b91c176b317222804effa5b3c4e2d27b4c6413811583397a0f8f0a2bb", "077048ce5201af227b229076f6192ff1634dc63c4bbd59fb8fd80717e3abc671"), ("0dcefd9c4766c208fcec3cf59e9f250472a998e92c6d1137c53ab49615b09edb", "042978be257f32f6f524b5c5c8330dc742c3d337710f8ae4b977e9abb8968203", "1fe96cafff5a3654eb2dbe53fec32695e2e966865dc487bc96a248258be31088", "1a0720b4c232ca341dc0133a895b188c1fec7f4a6d523ad9e515db932b0d780c"), ("124cf0e5286041d8477771be7c224553d52e034cb70609b2650f48d1a3e69ef3", "0608edb02e8b53595d4c8971aeb2d8a50caeeda0815726567ec5042451559218", "24e86693bc7c6bf7a161ff39d6bbb89b454f513a60cf94ae6e4c16a95f2f42f0", "08d0bb4ab288e251d7c085d78767f0d2717a24cc5ee071181b6de654b4b92b87"), ("22367911f54ce858bcb6f8b64f5cce29b70a5ce791661036bdeda455691baa57", "1d0423a219f5493e15a82d4176844cd9cb1062dc69c3662b2b72c16f95ad9ee2", "253d2e37aa298b323c0b52b3fd39cc95fe4484ce7d8c9e71c343f520b8b32ee7", "178921c910eba4ff89f8eef931613e5685e7c8a61a1c7953d432ea7e240a6dbe"), ("18c71a66e6927a8d554e01badf8b235149bfce1e0742b33f5c597b8740fcf69e", "102303cae3c5aead59d319eaa4e70c50869ff2d7b72e1c4874fe72c54c118e1a", "0a6093fe5ee5f89582522845cf057268b9abf387dde4c3b2cd999a4fb116049d", "2b27da0b7b6363e491861b73b7bb1fdf48c9b49acfa435aec9319b2ed1317618"), ("12aea7722210591eb5a42aadbab8b7d28a0a286c933038ce1459ed716af5a698", "206cce286d7370f732b4aa64264a533e522fc1330acb4c2be27bbd2f3367cc21", "18ed8007314816231ef348d6e5e1fd48fd89aa598f6a138a7e8c6a59f49262dc", "0d3803f6fbf17f7e247d84255569c9a28273c8b022778d170894e23122d85419"), ("142cbc26a37a006cad145f7dd54a9af9a73c68656db91d79676752fdd273769a", "1d449aca03acc2b0dd77ee700334b727d10c9b6370cde319bf42996220447a00", "26bac2d6ceea94dea59b87db854da780f3177c013fa489396c5326802d0e7798", "12eff4ff2da7c134feea22a082ae9b3d61cb6e9b18ff10b56d19e6f382e05181"), ("2725060d3ede5378e3a57f1f14e7e027541ac0bf2cfc2071e67c43228eb28e62", "1f5513afd2c38e684c19d51ab4c3de824f7da44cf906417c038f10ed760379fe", "1f569cb91b91a320ab7369efd86382c4f89e0accbfacf35c25016c966529e624", "12296022cc0cb88825d6c0ed4db20e2a100aa6166fe5bfb61b06ff075011f16b"), ("2112ec25813f6001b1dda9c7a8443d598a6a515105c06a4d7d288cd920981f64", "2cfa09f779112fa9837b4f0cc077b280692548301c040cdbbd035189c9a768c1", "260b81da33038484d5b6c0d9f4005a3bb8f9828111d322b14f2a40a78fdcb77f", "25a2031e1b00e804128a79f17e475cb71043b7dc8e51e503829e213d5fc93d58"), ("24a6929e8a89054dd52c8da9c9355e02a6f080401fb42145fa493b655ba8690f", "0a4341ab3b769f7f9d2e21edf8231b3f650a930476ca3159c57eb820b5ff98cc", "02b33dc72786eeab6dc0999ea7e7c4ece46d6a27bfa3b73fe836607df182d888", "0e26f1d092d51f88c16b2688fd80144f128ce025cc28c1f77f0cca96eacc97e7"), ("276e6fa737f448507055084fe25715951ff5503620c94ff7dfc903017a05391e", "287b3ead8745cf31f0f38e121ee606f85d18af44de28f308c20384cbba229433", "22df39a59b0f59b8feb83b75b43db767b49e1e651a6eee00e8690d9ee8d0b0d5", "09daf281ecc25153b3c539ca1df5e77458e16384ce92b14d8b2639bcc889669b"), ("2fbda5de07ac246deced55186115c73bd99b75549c362fc03f257810874e853b", "0b85b607728e3453e91c5f9317efacc132be252fe972c58bdc092e9590b4b71d", "21ff4af13cce272e89a33f7bd2ace8e7f4979ff254402d9046c10d21a0fc1027", "0c9a61fe21b73b76a19ac8c6bceff88cdfc17dc542cddc60b3bcce8b42371358"), ("1c6463805013051f1fcb781e3827ddde740769ae34b843a05d72713101b87b61", "0f3cdeb13f2156aa3c3f0952f5c712dfed73d37f08f496505f618186fc419f11", "17cf1a74a643e8ac8530eb1efdbd32c8d1de8d95f898bd9f1b99f3d14ab0cc2e", "227e06af41e079d4e9f1afcbc016331ceb2ed94bac95b198109430f0b1a50f86"), ("0814fa033fba85f50b553350d0231727cbabade94d78df4cfe851b21bfca3e57", "1b87a43bbc1aecc992d0c62b72dfb41d320185f61408c19b6768da80623e3480", "241c141bb7fb201f777e5322f0e218cf15e3e3134ae9259f4ecac653340d2a9d", "1cd3b3fb6fec69ec9ca9bed1e2a32f531b44b7a644a27caa59cec31288fab318"), ("1ec85dfc87930c12358ba0386326eaf1279d87d8c86f3aaea85c579e9737e1ab", "2956f97c866bf0509818ec122544ed28a252ac9449cf149c507a5069ec34f922", "02dbc7306079a857dc2619f4717d174bbb1b6c06e3b370f4703de1b5f76df5da", "2056f3c92e023838ba189ee25b052d7ddaa45a36fdad4655c54b36994809f319"), ("1af3f8db8365fc35cce2d839abcf15a52bf0761026a98291b3873b509b3fb48f", "25c93dc2274fd8b12cb74d66469e8e74318ef33d32c5f686d2c5427f9e41c543", "2a71bba5d8c46b1b9dfd280b5d6f04670fbbcb0ca6650b641518d0eb7d7623d2", "04a24a2e607a942637196d03ae19e619254b5e93446612a833cd8e856032c537"), ("0dd6cf0666cc8a984eddee01efb26df63a3bd071c9b676ac22536b0a6ebb5f28", "1a42edc08b9a8c1d48bcbb38f84b97451069da77820ab742531bdfafa639b810", "2f8a588395937f18e1aafd79c421e366c09386c30b857a38b17bcde36898a5d6", "1acaf3c3daba7852a8990b2836e2af86c6e6893562efa5d9896520935626a0d8"), ("09e7692393f70caf22a1db8f7a6e8c6e049aa7f6bbd974a3d0a629bda9c27313", "259efbfbca13eb3041f3cedbb915b95fc54d2ad12cc2a766693ef6cf10693867", "1d05057bf68d8f2efa742660cab4f5da0d2c6bdba87d1c7918a49f2e3c02a311", "120aee7c79f306f594987fd546c5b8d77a05cc81b81ce8b80a7750dccc5a51c3"), ("14aa62220adc24400fe16ca7d07cbfc64b25d9069b8b4fce510c9025a8309591", "0818fa3a843c7b87a9a831f38cdcf4c2809ad612961d5e84ec48e97866768c28", "01cb2ba5cbb7f19b0ff2d61be13f9ba43b225cbfc6b68b0aace82e075e4b147a", "170ab22354c5c30ac7077ba4007536ae3dd3c09a0cbdbfa337cd589450d82af5"), ("0ca77887675d5cbd4f08a0a90e753cb5796485d6484d7d7bfe718882e218f52e", "1a13e8e4e30a4c5f5037725a4465aaa56f742af01847263f8bec57715a2b725a", "213532cac4950433d3ed19908ebe0fbca2a1b350fae567d9e5ab40a2f4bd57f9", "1bad3845f2a30402a4bc752874ec72c4ab9757a3f587f64b6ec35b737de26336"), ("112486d714cf91b08a114a9d49fa0146ed7034881335908e20d4fc2397b5c776", "04a4a69ce0891cedf3876d2e39d0c9229b5db2fb1b0b1a3aa03c98c2f5c314a8", "2631523253926bd6affc2b05414e9265b6027f9927faa104df1106971a4942a1", "1515ad1732b9d661e83fd7572a4116bd90d5e230e0744781f44033f5933230a4"), ("2c7c3ca5c6bb3f99a689c8cd2803efa6a4209977aca7650a006eccd657ca0001", "2b768614f77cd0002b3b94037e37bbc8907edd74178585b79681a750947e6e0b", "0d7f74e2eba93830dbe75b916ce29af8bd11e5000300dbf4f4e43145c757e412", "0ac67bfc1339f8a24ba67f2cac37fc858a5aefeabf0450f23181adc26b8be727"), ("0aeac0d97d82735f55f5b191f7aa4ccc396e8dd60cddcaa78e6ca64f4047fd2f", "150a54367500a3b84f89f9a69a6b0be59f9320911190a0a441b9d33da9b9b634", "30131068baebbaa9224a896992509a601648e625922694196e0c0e8bd62c423e", "102dd244f44a15027d26fcf8ea4bcdc8a009e3dc13dc78d4da54425b20270df9"), ("037727baa25d621ee740647d9ea0611926d7e0b52e158a6e6226d704a124c645", "1bcafd4f08fef07de579edaeae6d08873f21a840af6c19baf66ebe2b6a317bce", "2ad2e3631160ba21ebd23c7063ba45d765f823e25b9a290bd341ea3c27a47b95", "174d92ab4857b862b0fbc88243e628c08ce903949279a64091204793849d15f9"), ("220d6ad6c6e6faf884bf81f432aab6f5c1afb9b738769d9b972ab414fed0d992", "2780173a60716c65bb3f852389fc0d35dd6d42c5fa845b725270ac189b44659e", "0f9cc1cf9aded0d54805ee2c91bd509a1dbb70d79cb04b5a0ee0c3295e2377fb", "2a8fad684a800c6b5a817157c738459197323422549e2470aebed7c1a8ff0350"), ("1899b7121241ab4c653d6001daa86939733aecf2ae3cb846582476973b5624c4", "08452a0e0a5ab44929acfee809249f36ce8f3ceaa875b3051ec2b648f5064d40", "0cf9f7bffbb98104bf59bbe89283431a20a3a05d5666201deb2d2623651fc2b9", "23fd30c052d3bc3ccd4e84d5e6344573c9fc0d84eae7c5973e070f4ca0bca5f8"), ("1e571f93d742610e5fb5dd48b6d555b7ca6e8c9fc3209ff6001fb149a90416b2", "0b2e0509b76087baf900a019674c1a1136d0d4d363d950b35d0ad62f60a97b9b", "29ad9662243532c74d1b52732352228e767ea6b0f1b6506a8b39e4bea71c009f", "1b57aa6f64eb901d7d6b006d8662854089d5856fb4ca25a59b366e6501a27af8"), ("22598755c9a0e6ab6a7420ca91c54de5389d9aa393f0dd0e420ae9304fb40eeb", "16ad4882e77f2de46eea27794e7cad2abd2d62e074d4573adfd4425def4e7276", "0a259ffb8c9b682f7af5977b28b7445d382e4dae4f9c2775eb0ca486ba0f5f8b", "2e19a8c486f63e4d6fb4ea638a11a40bdc77a8b0a0b368bd763b243e5152af93"), ("216e261e0ea3dd7065843256224e75bac65a006a27a0e2371fd065b5152909a8", "264a6247dd3b291a673888dd7230b5eeb5db1fdbaf688228b083629bd33099b0", "2735dada45fc3f98211a0bbe40cc3c7e9cac3bf38efd64968462b29a6be548b1", "17a7c3ff6b22edbf2b8e53e442785db1bde5504d4a6c716b7d009328962b9c4d"), ("1fa828fdd8285081a73654fe8b0bbe9f253caa7034a5d10c0799051040b7e0a9", "05a84cbb8683ec73a28fa5e092f1781e72d9fc02c6761eb4a1b8f73288721319", "0507fb1e4be280da1a23b135517f03447cc7b01d4ed2d478c88018ac94b2a770", "19268c27c19d30e2d31e79e5d3a225ce83dd920d74a7291021cbc74aa0f82741"), ("0e0f6c0be59c90e4099e30ed719854a7ba5dcb052f53da679b5483f19aa8762b", "269c1e9d66472e04cd78d5b8d4060c4b2d1ac1252ed1ab6baad43680e7184a26", "1986a8c0a8b284e8065ada533647c87c889eb18596fe12b245b2366b17395cfd", "24f239f0396ed67f863a539fd2289fd12ef8aeaf0b46ea24ce8dc4e7eaf07782"), ("0c9717bf4d028e94a2224859503c5ee10acec2eca71541fa73a097c28f9471d2", "1a6a461d23c68e107c576c8829338ef7256ee8b960f8709f18e7e5781dcbeff4", "2a53dcbfeeb8ca8961bd9c7174f2a9095d5654a37d783a400419113129790caa", "26be978dcfa322bc8c3dc50db9567a2dfe8b4f0f53bfa956662044f2ca73fd4e"), ("1c1ba29fdb53106cef2153648ca20542c988c0e13c3b816aeac8d6ad70cce503", "243ebebe01529a5262a424fd01c3bcfcfe4ce97d7d6a1635d45769cdad71168b", "08dfbb529b7329a9fe43d8be4db402f964c8d6781eefea5fc0fc03d0cdbcb756", "2b3d728bc31a5ff782ef3415d8a3f38151c501a6a61802c6b8d9105d33fb95ed"), ("07f443522c37f74ebf2c7a138bcfa64399d89d8881ab95fd6f730bbe86746cdb", "1b16ec6a6ad583b1741b758012b9dd79354bbe73c53282253064428fecfa33af", "1e6474bc4691e5e819cb6cd6166792f2b4363aaa7936dc296a4d4d3393ab2eef", "16017c8bdbd8d4eb489a06113104b91a7c72e0094682998957105c92f8baf492"), ("032ad8a48297501a26d86a5e380931232ffd2235044e9affa5c4d062201b6eac", "2f9bc58d0ab565e973ff96240ad28e22dbd3c156a9d51df6d40f73c285aa59ab", "11de9f805e2db9be9bdf88c709b7f1e325180047600a8e719da84e60713a0536", "0b20ea6b1562492cf283dbbe3eaace1dd543730d6392de5910dab9f46f1ff24d"), ("04346a0f285f1561eaac4f4d81a4e69821db6f22858ae612dfb71b2ef653a261", "0ee59f7e3d0691c1c768123f70fefe6830572ef0eb738c64dc8e0b9659cf0ff9", "1473628686a463f71a079d8750e7d98db0e8f51a6bf130752c2b388d1efaf686", "199a9d93fea0c90072cb98828b57d2a5fbf647170f88690c3b2b556e6f32de20"), ("2391ed7d1d1d433c8296de62dd3688aed15458fd81e1168191a9cc8d273c2a3e", "2f809d1ae511554c746ec878ea8e89cff2e3f8df4658422ccc0cae4f1a3b0fe5", "25f43fbb64a7846102bd1c1fecb6992798a1abb800a342b29dfae5066a5381b9", "0feef448460f276a14d9dd40c987cf33e3753ec6d4e7025ab7cd2dd1f28f0c4f"), ("24881730b1b01899851442757eb511cd402030d9e621a3d73d17e0d628079bda", "25886a8d62dfeef9b47a5221fe4e70d0d73d91450e6c2e02f790a06ff84f4a89", "037b5779281173df9b9e1fdaa7b18d843d60275b1f911608d7a30f4f486804d7", "079a2295b3adb2b2e346ddcb1a0387f535c3f240d9da387cb47b125fae5496ad"), ("1251d472b3d2c1c1291e93beef1e8fc63d55c50387edcd1388d1a72fbc926a97", "0acada3f571c508633c9a3240badf1082a940d83991359ca69708c69ee6ee79f", "0bb733e338f9876ec7f733105e70c4f102ceac7476ccc99bbc45b0e05230525d", "0a57611483468b28edca842c5cd17ec85b551123ca349bd6787cff1b5b386cc6"), ("20c696ce6e7f45271a7f3fbdc7fb98810244e2809b966d45f9d5337e93ed044a", "057d42d235fe606443c2ccdf7ef72c259e5ae72aae30ea54f7468e327bdf86f8", "0dcdc43818ad7fe1bc25737a0a6ad923d66513d1c8d7f4b25346cacdd467cb17", "2f4012c17a0382dfad11ea8e875f8cc3dfeb5e5890d92c7f4035f9968477814d"), ("2a476006108002260b3fe28471b91a79dff45a80d674e6c0562d582bd88b0b07", "2c41cf5e392512b67dde2532cde8ee909561143666dc503b893cb5aae804eaab", "2b27d157f195b5e80a76d26cbdfce0ee72d18fa1fb46d118963134b34510fadc", "1210c81b24c3941182e0e50fca0a03b5f9b5e3c5ca3e1373a4c8cfbf12d49712"), ("200362b1d75dd3d8994dcfdce4c40222cbd6714673c30774eb9d505f2a286f4b", "206a1228386664180fe48702cbcb4eed5c75d5c926f63e19ec194fa57df66c64", "1c2937052c18779234c6f8e1f6b3f7b5cda057541ec40e19dcbf149836bbb61c", "2562a53fa610be7870dafd0a3db869144aabe5a3eacc46cdf200679c0cd86335"), ("256a9de24d2afccde76d8c7f18a7ce9b208df8044bbd8970487ed75b9ff1ba0d", "06c6a5a3d18da0e7474093afa33e5906c30cc3ff0df1ce9c7629d51f25b1d83d", "1fc24e9840aa72df3caae28326d6c0239a5188427a5bdb3aef2b323f8bebc696", "26437e077cd6fb9ac6f1c8787a4b851cbc8dfcb5e721e7bc528a23f02fd2a28e"), ("2b5bc692e1d3728ceb3ecd9d80596bfc3fddccd670b1cc300d2f54a92956062b", "0f5d8200e68720e5cc4a7c06af39b4dfdb10c3aed786449eb3c746de18d31190", "172b5dd97bea0651d5092ba1042a481a16507fb939c958850d5109e6c5f0ad1e", "1bdda363e84989168a3b3ece389ea8b38f4ed8bd36eb127093d0d0e6d650ac23"), ("077c449fcdce5d4449f3b457e4ccf222e44bd4e426eda25ae500dcf9e5d875f0", "1a68f80280bd0eead001651c918c19f19fffdaf940202e71cee8758d214a2694", "2b9a7befe149ad24bc5028d449b61a86115393d3701cbacb24d3c958e4485cf8", "157915fe42060574c83f89e58422b39c88522852d19f92c47c251dedbd7e9aab"), ("0eba0374cb4fd26fa5a26af551447153900381df7444505e2a946224bde5c657", "1285064df0984a1b1e58daa63b46953a01331f56140fbd3a816c672c6df69284", "1f13e1bab28b9fc4a9a863335b7d3b97a002b1ecf594a60b2c625c4b6c46decf", "2ece51a619685ef924238d70176ae40da6c355d31c39ecc4aeb3665fa1ad5511"), ("0e198b1c9d22cb38f17afb4de7bc73485c361466508f6f5570aaef57f65595cd", "06d7539c9fa1beae200f73d759b5d939a99e7900be828ae0490f7577a441a98b", "1dd64b9cff22a7cb986e01c7fdbba931a2b1879dc26f8fa4cbc2b06f3e85237b", "2fb9aa4c186459bdcc53e09dbbd53270510b4420b3942a6e9c758908409ded65"), ("1aacef9d8a62b7453d389f7667889b2dae84af35b3321b6c042dbcb392a3de9b", "18de13e65264a0058a9ff7253103bbec29b08334475e12f1b1cfd7dff1245d1d", "1a7b2707a799717fed9804f4ab891242bd75d41d0fc58800c3676eafa64bd07e", "237b127ca55a6309778fad9655379a85354a595c8f0ae7bd793f10e973d00859"), ("27d5fd41033019bbb1b56d9ddad6f36de8b5d721b70a885e2fe5d0f3a5e40627", "1b0c3fa8bafbabef39ed11ec20b8b57c46c28ea361e80734c6fbdc4f785bac37", "0714bcc793d9f30dfda969db1530c1d39dab3cc9ec3a2ecd0bd5cb3ab6bc08c4", "1ee7813c2b5e1d34d55ac5eaaacad838ead954879dede080fd3b41d1cdd91096"), ("142466d9e0c90df4a0e0e55d237ece6b42c5871909270f727a24899306765c91", "0c6c1a10fc6df26c3055fd6eaf2604ca325df2a28e6a96b443ce88e49b7e98de", "2f40e76de60b99f74f0335e3e7260d87e4f0dfc54609cece1241130d50bada14", "2f78a43cd9d980a2fd869d63123f090aa9c9e1583fb3e1f4b64123e0ad48a36e"), ("21312cdbf6954040012fada081c9ce7b53d241e80d97476a284a010b2849f0ac", "2a574bd025eb74e8b916f548df143cf227ce76891d8ad1f2c19cd97beb4a64e4", "0c12934f5cfe21f991354b48e0786a1c01e8d8f0fa3e65ce75c14443ea38d454", "2f002b3f2642c64934f03c787dcdc18c8d6e2fbacacd5e6e03f7c0abfd5c723e"), ("055810eee5ed2f851eed1deecea6ad0cc4b3bbcc6d89bd9dab599181a4f3a04b", "01eae660c18ab534b64fee97fc15bc3c0cb60d97e417fc906c03ad0243ba4738", "2443e32ac8930f2a16d39c56d107e8e9b1f7ae8c8f04d080f2826c142f46a5fa", "1ba7b1fbdc3b35b421de05a5fad42375046ef7380f3f0d75dc73ae7b27bb3acd"), ("13e37d16979bfe0160fa75fbc6378893d4da5f3e8cc5077dadfc2865abc516bc", "2c9a8c3a2cd89b42629b319eb32765b3829f5abfc6f9049729175769e28807df", "19384659ce9f876942e6657c453b221d330863fdd7a6fce3a493fac105aae04e", "0438236074fd6011cd966063c85bd0b4056043acff4a8a533dc4d68b90d8de0f"), ("1767380467e9393264087f1302e07d2e4ab4f07fb06ecfb25caf3308a5d7502c", "209bbc8ea3faf558908cbdb3e2bb2127b6281ed1e83692f8b85b6ece0e36de6a", "07ce67e40262e5edd2eeff2b7dea49a99f4330c0e0e9e9998209f95c0c6a1641", "01ade7da4a2a9ff578fd8fd442046854852aba080f8147969bd8ed0e19c602af"), ("2b6c34bd0d93fd37edca40383768ef7317247e58b3275924174b1f63b3256483", "07cf84926634de16403af9783ac5bed1fe66cf1dfcaa8b0a7f1194c6777803c4", "25fec49ec3b17048fb567666630e772225d6a0578ba0406e3f39e773ac18778a", "0653316287ffc693b872a0037287949fdc19e83562627ffb7a9eb02a7b46e5c7"), ("27894ff09e298bbd13c23d3e535526377cf845aec573d8d25f0b5c5503a942e7", "02cc920ed01189b41262f2b0b946f027d51dbc302103e544626e7cae90b55805", "28f14c12d7dd2dd4a23f5fc90dae4944f64596f362448694c707240fef98ea13", "1b9422a359554769dafa3e1727645465eea8d128f10c99cc0bb3b55434f7977c"), ("045414c3478f2b39903034c44a35877944eb4d42ad62f4eef6f00362ec52d8f1", "0df102658f7a12445eb7623eebbc437a1a56939299f24be696b2930b82836419", "140063889338416a172e61a1bf14e81b487c4b38d50d8f793c1f6c96fcf5616a", "2ab03bd28bc9bcbb2f1095e8783f3bb57e5df244a43e5d9ce6ea89bd7ebfa096"), ("27953ebf977ab4e06e0d760297b48befd293904c957ea3f74898feb0fcf03e7a", "1b02329d4e81b7507fc7962bc50066e065dbced6edc9b350513581d862083e2e", "2e25e21bb0934a17b7cc5002727258d26895dae47030696bb4bbbccdccb04820", "2f29d440b2abd8c489d6da698bb0bbb66fe0d179fe7a853e1ed70ce4eedb078d"), ("2af9c497632a39199d0f512b6e7a3da04c0eb7439b903a46845380a98caa5a5b", "0764cf4e17a8bcff6bb17bf344c48af5e0713e2bb86a1e8d93d1711906966222", "04308e9028ee4e6eaf0201c33a2979127badf531f205d192c46408157201aa29", "0a1d9ea621eafbdc01bb3bc3c7f6bd8c5b697d03d56fbe5b5aabfa8517500357"), ("0568cd768b61eeba7a98434c803654e39889794cca6b47832aab622f6c56e8e8", "16f1f1d8dda297d686896f616ae59a48192adb13140d75aa238b43c44f0d7bff", "15eb65597000035844c9fc4fcde9fec14595840a56ed2d7bd7fbc5a724a83696", "05e30b60b01ccbc9e4f2a48b306d9ceddf4a4d79c22ce0f5d10c3469518fbac3"), ("28c86d58062ed8b1c45ce2f8dea87866e5e7b983a398d4b8b9ca211826466e0e", "2e5dc9aa107f51023008d459ad94f82ec483be54bfc5533d4b5f79f9999bb32d", "2fdf4557c23d2550a3f0f859a0ac9c37e404712316a0bc050792080fa3037188", "0725d16e3d76bb20fed77389d2b80e31fc6dd54b53a4749f31201bc3b3662708"), ("220248903607192b076acf3cde679fdd1f200300100460565a2f02d188048635", "1b3c8e1cc074beda416161f12ea37435b4ffd7e0bcde2a1bb9741fb51c05f4cf", "03008c05d1c214bea52cec1871de773cc1daad77539b22d366c65e13244e7f1f", "1001f594c2a0b701f2b0e5d05d307703d1cb0354338f0b4db0ca5f6ab321a130"), ("15dab5cd06fd53efb4e0e2d22f04e196c2b0b5a8a5b59e85ec53d6287e3bc89b", "1f6fc8b1632d84f5178a7ccd1ccb35bec31e610d86db3d4735588b76ba987c3a", "16f324e769920c76124279526cc83162ef76619abe90afdb2749780ef463f89a", "052a27b9521236ea9f9ae1a626f9ad80c91635c47b7a25a622d3e791aeba593f"), ("0e7938f84169f534bfaebdad4f5a250941ccd7f6bfd83ea72e24f155dc248ce2", "24f98cc59cae015106b5d4abab5e28b959383fe3c8dbc2dda82b0b94b1d690e4", "1b8ad9a715ae6ea2262fa971026597b8edd12ec85655b964f194f8842eeb461e", "08be0170cab8f8f5768fb328bcb3876767a43c9ecc8ebd929b7870137d5e58b7"), ("1fc0bf103d397ad90fcf5d29371f19ecaf8048d624bad402a2002c9e7d70fb46", "148b61f1d732e9d231551c82a54f520e502e0b6ec14d23fb40b10e18a11d782d", "3043239f88514ac3274c03e760e8e6e74393606d381db92dc54657e919ef46e5", "21fc08076d9857eda01548ecdbc4d270de803c551d0c7e42ed0fa0089c1ebc6d"), ("274f92ba9cf8356e91fbbc881c6af0838ce49252f093ad96653d42a157fd1651", "2c8962c74ed53ada4307b8d436c1949bcd79c4bbdc49020815dae684c3d2afe8", "01d2a2411aea3700a5c8f64bab2689f95b7919199c49800facf05972528955da", "284962e87c449ad639e7c68527c0e7d134005fc9c93fc07d9e482a05b8485d7e"), ("01a3ce9a8921319575d541cc9d7bdea09a2fca2f29db0acd3b8c2f06a073378f", "1e5116e3d7f0bba8b951f921558490aff51732361b25acc15c36f563b019a9f5", "2789eb2a582723267ffb0349e9d69093d557864a1ee093b4358e80b837ee5dd5", "1447faa11b1d191cc0c8ebe1c2aa4e8eae1d4700fa279af9385d0d8d16334daf"), ("04827627320b4dca13803b7b965b326cb6ebb94451de9cedc7eee29577575f6d", "00538b0148c400a82bf80608ee5d98a4d9e4ca071731906928b551038b2a8284", "2a63a0165c14a5033cb00661a65a86137c6fa27912c85279325609e1bae55899", "1617dae94262a3f37178634194ad3fbf1be5d92fe6680fdffc3e8fc8e282ee77"), ("0293d64fcf0cac3da6a05cc661c8cdb4b20a2eb746e197f200d006384395e8b9", "256998d91fc91956f02eade63256e9acc1f8d7fdc0a5242e8c2b5ce2c5319e0c", "20cc0bf2f858d8395849cb22cc919c1b185e228eaa69b276dabc9346a1556c69", "0ffcfc97c85f70d76e6c75547d90b035baf6e13a817fbadd1beb68a1c0cca590"), ("2e684e56b0c345d3c9fb80d2b7a6d603d6841c657d4f7ec8bbee123d92d535ae", "03ee93236b3f40ff01771e4f1eb51d318af13f4994a49c3261a39047c2538576", "0e0442b6334e282ca48203aa0d4d9afef471eb687eb75edda26ddfa9d84099fb", "0868cf650949d37146b8859770c12214b5fc6542db6dc86ca28b6867a28a24a1"), ("2b0224c7618b78d480c5b3a8f916f557b189297b9434b067e5d44e1625eabe93", "097aae6923ba3dcefe259e6145d8fcf72546c1861a9866226011080034f9652a", "2ac8b2db7163b8f4eb00f0778fcb2ca0e0eb6a43a5ae30090ce4d013a2a9af02", "2170c9c93f6af01467aa4a7c2512d99d4253e41b06e77861d26ef20217c59548"), ("28046d7815113619d33aebe1be4d6183a07c1654690f92398532a45407b79f08", "2f5a81f55a2ab07fcfe09f539bb080f8949b7cc875ac7b2b72ef8befdf6aabcd", "03135f5bbcbc0aa4dd42dc1f03e701b1791178bb1b63d1aab5fa200d620123ad", "17501c7f309378f990e4196eb545c8c9edc97c66f3c612fd39aa4941c2d8f07a"), ("095ba0f8b3da904989ee35fd504d631e24c6d33afc1006f1cb33cd11cdd1b033", "1fac7c169486d445770fd0bf98db638c9fa1312a79572f59e323fa34bd2e5473", "177dadbc433e8cc5d1be19d46b59dfdedac09c8727077c3c624af17e6502e967", "1452b25fcc28f7f4a254b6da6151d2c8d4677a38572f74f02050a52c1eab3f28"), ("2925d1a59ba4349811554d088a83df82bd07cf5b9faeac19d52caa7c6f443539", "102a8713a195b01d9a166ab43620f7620e3fc0c8da276991adeebdaa02067ee4", "27f98f27886732b8376403596a7596d2eb30371b7b53539d0b4af4eec61d7d02", "17849fcf56c633514ae758f43918835ef8fddefd62c4dd830b196cb86f136b97"), ("1934bb3b3d26c43ceec04011d35707fa99c7e5547d189848288dae3f9d5de2aa", "292527d54d26913e1ae823b454d7eee364a9b292b3a33ec5608dbda952e500f2", "034860d8528c892216a404324d9c81befc17c1a18ce2a719490811a002024f49", "255ee8f6d6207e602ddd8914cf253600c6a1cca7972b1d7db49096e77c2e06cd"), ("157eb41635dcb19e27b6bea36a62c075a71d9bb7b2e8a0dfa87e25934621083a", "086623a793b418d64d6f17866d2593c1932beb9653f8f0ee6c7b65ff4ffd76ba", "0f5dfc24693f63c8b68ac87ba8810aa316fb030c2ab09772b355611a8346ab95", "24d53a119cba3e26e0c59dc7523fe41420e13c93c37234daf1c2a3fe41fcba04"), ("285425c256c95cec720a6cc88509af2933066a30bc45dafa4391386e8c11ed14", "1a480e79dfbfd974c1a965c9fb605b77d2e52f6b42d026e394356f785ec03d2d", "1855b52a65cc0cde5e9276bd38e42d88dca6acb9ee28b73aba871031f6124587", "1cf89dc2a20f49abc810c98fd54ba030517da57393dbc16fe76897d2565e581a"), ("2feab83e48fd15286898d6df07da320161b97863e07cce321471e137804f6459", "19f2ac3c7ff4f2d3f0a9bb941523f601095da90e12d649258b05732100a1b08f", "1b60b376fc73ef683c551eda5319ff402a176cbd679c8d28d1a9f83d4c158cf4", "183d6f169d10172c96db4a0cd429ce6941a7c1f439239120506d879eee39dac5"), ("256b7d875e5e1016ce2e4cfcc8026af78e4885160175c7e1da46649eed150ed8", "09e11283fdb4d785dc141ef3cc72ea9fbe6d9eda3e07e3339d5d79223d9621e1", "26e2c86bc701ac322024557380445cddbb20425e36cb5220840c9fbbc172c13e", "11cf6a5f8682bc2eebcf6633b0472efda7697021a580ded8bd94ed152b62147a"), ("223110f8ab3a4ec1d22ce696071adf85bb8ef653d32cc17a195c90272b6a9247", "21942f7e5f377eb5de36bde98bffb4e6007d878f41b0745a1920dfa462ad9c8a", "1f5275ebc7bcff9f86fa5948855b2f4c4dede2d304187865e30a3a8c96145d6f", "2d89f9a4781e4c3365fc6517f001f7e6f4086587b5ad76302bb36256354e1370"), ("168806b50ed88647ce95845f4c316714548c546e85ece8b13d54eb0114354c1e", "2f52e52a1fd78e7f652d3afe8db234af4b95bdf33f5ab9f664f470a728c8ab29", "169a1690de908351c30f6e87061a1994dac9e99a2339f36dd3760231d70e7a19", "29b1a1ab87466969a494b469b1557132b12d25ff484b55442a52d79540cec8da"), ("256e93e02e234fc34d2088c5ecd93cf7f7f0d7bbc7d95a6ce4f88b4f37c9541b", "1b8bcbc6bdc96e4c0b0cfd23001797fcb14b3a45da58265a059ed6a88dd11972", "14f192fa6b5a2c4e775773e6a8c5aeb3e2ca40c4e6aebcbb01c3c6bd80399ee8", "03a599f20f9cea3b5aa757eb3e7c713a1415d9f153613daf9e4c6ccd55616b73"), ("08e745a6f608e2289b1d2679edc1fa6377f3d6c30b74fd600507ab5c5a8aa911", "2da3f16771262d8870162968ec0d48ff21dfc11a29cc2e88f2ca8683878c02ea", "1a2f74bb142cb14077f3f2679c803eb8058451402dc70ca20475e9bab56ab512", "1d29a93995a6accdd32908b93d930696e6dafd851f658d1feb836b7e2f65bd07"), ("19c4e152136540d5cd29637fdbbda4a599b20b561da58454d7e742fb99cd2f4a", "06e39e300fe5ba2fca7d6932584b3b7bafddc26320b67f174f0507ce68674978", "146af567b25247a66b84ea66603052865fb5b6eb4632bc0d61921da5441f8929", "26416535fc4f9e41df0aa923b593cd1d88f37d1fdbc40e36fb929c58fa37471a"), ("054084fe4ffda73a20db4dcb073925675acc2908b5da65ba899a1515c2c3bf7e", "2d1bb8addd978d30119babacac6c18da9114fba7d5e6d5ef71c273577feb4c8c", "2530ad190a2627f6017093011ed1d8e9f797816c56d6b3f67a0cd0d0b657ea47", "0b3f8410973e803d0db37908e02d47fed5063735fa75fb8ec209c80e93007d79"), ("26be0ec6f77645aa8047754307e2ebf8e0666069fb7c58f5ac79ed45303a9cf1", "0863c90a0d4e35c2c09fce96e1d6a297cb22b48ffe8c6542b314569cb34c4015", "02342d18018f5a3aae748e289a1e5568cafb7a5151c5d23c6f9cdc1ab8f270b5", "1904a0a6d386b838afc89258d74984d7ba8e32567a23b857e5539352a3f81698"), ("2ad1b2b4792b3534fb6e8e13989bdaa6caa2ce5caafaba07901f5cdecccff90e", "2420402d47054734309b8b88b10a0140ab03e26e9b828b1e2f3ae35f92db8b08", "1f9873f86292e5113cfa4221e2ce56f6f4de09001f6b61c41d1a6f98722f5661", "16b9e82136868e63a49c5d8549e445f8dbb1fcd317b4331168d92140dfd0868e"), ("28efcef321a572899eca1d5ef2cd639219305cc0241e8beda8fef614d601fe5f", "2376b1543a08638bef8f769977c433a586acd038b9457c868cda43a66e987ea0", "292fac9520ba3eb16a37f11cf3836b3bca014a08fea6221c71bfd02caf5abe3f", "17375be35ef4b50d587393c2810a53a77cbfe1d9e7e3e740e22ccb71ef207d2d"), ("15b9b5125ee4526263d7ff007fdb565f1fa81743c1c031058428be320d2bd101", "2d11ec924a6ae81441eb18b93f2da18032e2c9bbd5070a0b1ceddcb3911e4b45", "07f525e79030e1529e44f18b10fa932043cc255ec8239aa64c8807535f39fd6b", "112b44b71ede6f5b30789e6e9f6b30ec2d4efa1d0f51945dc55e4498e02eca8b"), ("271d03adad34ff1ff43d485ba83efcaf83ee12a6a107f3a4e6cb57bbd6db5a82", "14d8ba6bcc17e851eeb30402e4512d953a28c3a38baae6fdb2607791150c0714", "091ee0305b76cb0f5f29dd1a773eb5ee3594e0a7ac3e8c17ecb8803af7c0c240", "1ef3a0006dc0e15a35c987dbbfa3108b1d68ec3c2820ebf490047040f3664b0d"), ("277f0bee279b4507e27c1a9eba5dd5462eb8560febf1ffede2afa51eb180a2b2", "19094c6dfcca8bc9f7f1422a40b643339a342259887101dfb3f2a0a8a1017956", "294a9445c0258c9bfb38b00e5a74a741bac7caecbb3c7623457f83d7ea8aec79", "1f931ae7d36985e8c60b3bbe4390172a2010bc669e5b79b4c09ca64ff10ce9ef"), ("28ff40451707ad92966ed83f72390a830a408dababd0e4b50ca2d5d86b73be0d", "21fdb224e44b4aaf3ce54811e4ff410a064cada1f964d33108a26d51ba7730cc", "18cb920ed7f4cdafd8cac3dc326df43504f4096479ae0d1e7b5f033e29ec2b76", "05f948470b9873642b45d17c9ede1b0d53fc91a289a9a74064e2e6d2ef133f7a"), ("016f4f99cc6d7c7c673018fc626072fb8953e0779d1e8320b2703746ced22c5d", "005f4d722f3329336a08c51a714057d73859eae23e87e9760223bb5cc9829d1c", "1116166a2f85a2c9f52f6570a6407e0fb52ade58c076e95adf4d193da35e5a4d", "17f900383074ac07e5c0e3f95584adcf04c06c619b95d781398c4dc7b9740e49"), ("28b83465a5f4f088f9444daf949a20d771ef671e6fd0909f4d56520b70d7791d", "262486a30fbd43ddf339ad65b3a2f9de144073b8ff8ad670bd2a8e8de8e42288", "1ddeb290362da24bce4186c0fdeb379e31994bd1718132a39d245c042000e6ef", "25e1c27f9ec3dd5f7a09304d40c02b0793e474ca62bd40172c91be78fb4951cd"), ("1c22176e4aa5fa08bb8dd78d5e2228ef45dbf975e577c6cbfe87e2272c840ad7", "09a28f3172362d8c1fb5764103815be08e7fc73f00cdc4652ffbd26ece802157", "0f38e5c2a35d2c4d6c874d93aae08b88f086fc155c2df4486dfd81701fb84e13", "1eb41c99a650b28a52674a28a034c7fa94a828ee783c50f10bdb82f684bb901e"), ("0c42c34d7640040a50096843fc03afa7fb079ef6c016f91286029d9327965153", "145ea15aab2dffdec4e865d0f29d5ca5b7ce27547ca184f01055d533f6df49be", "0cea53ecaf53f7be150041678a3e2cc8736090e7e24b4c6d4cd69e1b1fbf15d9", "2f7da8ea0f7df2be82b1cd1e56c78446eb7cdd7401fbb7bef22dded781b826b7"), ("2a52685d85f8dba0e7ed489ed4e2af111c17e15c592bb91e5be7b50478a4bb58", "2bd3a7d677500694bde689fb10743c411773420634a822d4d951c3209c82a1e7", "15169ca19e7b76a0e8f5419062e5555d8fbcdcb9de2a374bc43e0db420b75fdb", "192db45e462a98d1cb70ef95f939d029b6f0aa472487f0ede1b653e8efd3aced"), ("115ebbae02b35a8d9908d2c5348810993ea036a40f7fa83ce5ee150c3005fc22", "283f70b97fa9c90ddeea50cf882af8150e70d254ac1c0a8eb10a69e6c248efef", "1ced752b1ceb0ebaca47b022709c65bc6c5bf5b32508dd6ea3066982afdb233f", "0b351c006c2022f560acbc4c200a7ee531e4e95fc515ed9d7c6fdad228a5c002"), ("06fa30feddef263da9bcb7878d6fd34b59ddaabcfd235f0f5fcffc742ab278ce", "27120df4df92caee1a5b6f6df281ee1d975c1988f7557409153148b91f9bfdb9", "1a04b9c84c49ca7e51bea503c376b0dff71c6223bbe486686503c7eb78e95c07", "13d199f52717a210ab48fb7a33a5ddd66ffccc460f759f2b31a30db7c1239b56"), ("1bd9a31ccc31b62501eb86f6bb7df970e4255313da4ee626eeb20601e1797d4f", "19b841c16c179c328f6a74785c13136b30bfc9847fb2f01547e766d9f1a2e48a", "1ad4572a759ba55f99368c7a92155f37cfadc33c823205aab0fecff66dac6a48", "0db1aa486f6a619fc74d9422a0082acadfb89209bfc75df2ce308e50fc9d3b3d"), ("0371544fd7c572026936637c1f1446f6e828e18af3867cada258978dfa750443", "24e7a91ed25e26b497b3695f7a074e3b5e417019c10eceba4224a2f3444e3762", "1828b92c5a451efe8a9c5abbf4112dc2e5df6db4d5f4d30267a66177e7d9ad54", "1f4c45c15117acf36b49851579f92b76e76b8a54a1d640c662e80b76678a4396"), ("1642ef02418c51e37fafa60ee497de90757d050390638c8dcfa8d617b40f9b30", "2926e513b8a74135053049f129c2f7be7f52660a783a5b57fe1072694f720ac5", "02c043bec494e0bae27cc4be00dc26b23199e41e0cd288989f77ae18fc029a80", "0897bef63079d61ed97f9b1a496314e8df6f85d12cc503443dc71d66633b411e"), ("286fe07f4aea61a5f8aa27fc0719e8d93c637341494bb00a11ae657d97f2b984", "2717adac632248e254426f9c7ab351a88e4d8edf289d809ef2bcc8bb0908ce72", "05574917cac2b093021a85cb0975faef680667e1f10128431f4817c4bd9f6243", "18d5ba70b95bc17276608d015b17cdc61add3b1704557995c89c7ae63e2ce543"), ("1964d2589074ab74307edb62fb83fa67475dcc2bfb69312b7e8ee34f90f6fe35", "203415fd47ccbc406747b6d4076f48d53085d71423bf279c3ae065ce10574a20", "179da5d88f8954d32f59bf762566e1e74d9e783d7d6fb58e1f2f8b2c2e2bde76", "2c76a86d93ca5af09c7f22ec9651a4b152f0dd08287b11b1e4c74ae50ba99d6a"), ("1bc8f5a0e385c6d32867f5a60c84564cb33870f3ec0c6b46a632512238d54eac", "2acb231c699213f269f2577534b4c22f1e5e69426537c1e9f62fdd32af3246f4", "237d69cd51c6db7be7b926341de5ce82f44584e654f2b5fe25bd299ff06844d2", "1b7daf1d6efb341f4085e885d38f1140fa0e7fd3922e61a3bc646a5f2e4f22fc"), ("288792dd3e548bed02933eec2b70f67304405c3961834df4e59e7f30d0060958", "15b438d6d2202a0d37ca2376916e46842b6e3ac109d601c851e90825121a82d2", "2c328c57c5b2c08538574fbac6de4c463af753970e68f72485897d962fddb4fc", "24ec2d18d879636ec4a02130b4c178b384ed76118d39f31bff1c45c958da6f62"), ("28bdd68a6b8fff25e69ace95d16b8417ffdc98b851cdf652d15c2f59944a76f2", "1e2f4583cd5394cf959d5649975bc19a0f35a05613727e6734219b4499db63be", "18100e2e80a38556e2b7a973abcdc4cbb44ea69eb3581f143fdcfc69ca4046fc", "09e504503a36a9b7efc3883076ced4a27b354fc0fd4dbd82b116e0898b53522d"), ("1456ae88fb022ffc4bc75c91c4acf937a845913d6c81dc04ba258b3b4ef9e8d2", "1b55b02282033a6bbcc67948768bb2a04eea065c6102031d04608081a4a9a9b3", "0887f6296f2e1d5586539f3d0df678a7441641c24d8e043a7d9c131fabcf04e0", "0f481cfe8a0152194334de6c14fb6744f7fbd80a6fe9b35bf790a2ae88f25fae"), ("0e1811bb8411f8ecf0eb6f6daf8bb4b458845d50d94ab7e932795c900504701d", "064f32169245c2633df773a810254aff6ebe8d019ca299fd9cf5e0eea7727f06", "0e3abf584447df903a7070c53a80821f4c5ee3e8813e207351b82841551a43b5", "29955c47aec782a57d906df38af153c8a5fcff5123b2f1b2a00afefdde794e4f"), ("2887b53c932809d6f6d7e147f4676b70fd4fd3894b34e87a8849509300f49d91", "022b06221c7b8c2a7b3e5458cb3872aeded0046d6aedf86815f153bdb4d908c1", "0cdcbd77ebcaeaa52db1ffefee94cff8629205f34d9106842863d10a92d41386", "1f721365da0580a2e8baabc664eeab124bdcd908d6921ad6556551617b3058c7"), ("27aaaa1bacd25d3ad7b54952c95eed033d47dc3ebab43228b6f3652a792fc441", "05bab59f6729ce35cd5fb8d5f0e83d95e8ba3b69ff941b5039b218b658b417a3", "2bd78049fa551753d4671bd8eb1e468e7765009e26c72ad50618f2252675b42b", "17ff1452c0f1e2e1af94cf7dd2751170dbfc84267f88caec861e8084ed52ce69"), ("1fd8bdc3d29eeb3bb72f39c66e7d9ff77449ad0dce805c28681a4838301914f3", "1b0083ba4330e5a667f741a3cf7ad63f713077f56c6647760ca897157f8fafed", "025705b0f749e3f5c6af6fec0fb8dd470a1c960ca26d96d4bfeb6ba901b8be3d", "21705667d6dca87123ffa207fcb3a49c429e6f48e171615f6a22503d3ee0ade2"), ("1d3c0b6c563a0e07c45dc61d1a34b6b25bc841180e99b5df88b9d4c1bb0626c8", "0be468da7401026a93e0f3e7469f24871795f7b5f7c53a8c378904ebd0a271e2", "0a603ca52b8937d6bf82ee22a3a8ca8d4a274e0578316a7f08eb4edbe8beb892", "04f14698a17e9ea32bc7074eeffdd6a6d15b53b3cffd1ae9a594967244f30042"), ("1b0c6501087e56b2617cccc36213e76d0ee4a8335abcc51e9568873b78915fa9", "0e39585e4e4ea375a331819062b890a7aee9c8132974ad8cda874fddc0051842", "1980d0618a7ea26629b7b18086a66fe1572717e168a3d9160d92f2f55f1be6d7", "031fceb8a641827bb08edb72af941f80492413e20a3fe04581f2be31b6d269fb"), ("241109685b8928d9b6250b84c933f6acc123128ed0eec6decac1b56f27153b98", "0c7085753c01461306c2686df029a3823ea5227b48dfb64edb0f572b86ba44d6", "196268f2855dd64d7e79bb329c07a15ad05e9d5c3f772e5bfbcfe3297d2c26da", "252040dffe3cbe89eabc2dcf7ad7ee25e754cc219449d9ceacfddb717fae72e6"), ("1716b0e4333d25048db8693d96336aeff38429c3d8957bc9fdf59d24cef5ce66", "04e8283baff15ef90fde386781e5e0999d4777a45bf4bced09ee7bccd2254e63", "0c2bb6b9f113c3dca2b821d3e783172bfec7037f0952556ee71f950d928af653", "00c3cb6c4c38539c00a40cea7ca85c98a23e39d951351b2a209fb9f00f4fbc4e"), ("16749e1dca1d74a56cd81050c5f0150e706751aedd9f278c084a008b3c0a5218", "215692ffb3926b0fa38ceed37cda08a199c3724b51212a5ab37c9029b31be81d", "2e1c3293a6e923ed8d5a2a4c8e70f1562664b79bf905c66f28b5c97b7d29fa5c", "2976af9dc595b850247e152be1cea12baa3c7578b2444e1257e9aded5d7bf0e9"), ("02b0fd2026d48318055cf52f74c9ce4d5d5eba4f1ac1b9f02c151199cec8f5ba", "0218234883444981a88d23a78bf30e375042b669308aa415b8d4d9acc9007460", "16f72037c8513cad0d357052aeeee62f5b4c7f3a41b21d6d5d30869fc7d7fda2", "26770cf566302ee4f0f9ff3b435a99b73529dcb0f1d04bd469f528f472b8b37a"), ("0c8808baaa44021df1fc96d288abe6bcb26da4f99697fde13bedc41cc1dbba5f", "0234b78f56879952784fa452985cf6e1635174e57ec9bbff88db043056a680fb", "1f8b5eb60dac8d306dcd4c559d17602ce9dd32555e22fc8b2e5ee89618f32436", "1fc9e3d000e2395543227e9f2d81e145da3b667c74386885f79cc7da06db84f0"), ("110961f9e96085e44abdd128bc0cb76eb03b8868f4676b73bbce67ebc3599c75", "0433ece31c35b2b69347d651f522f0637f354d9201d44de465aafcf8c18acf47", "185c256bc2f5dff1317f869f1918127908359c8a8066f367f40a2beebf8e9432", "1ee0748d2539926717df05c1ca600eb562238aac2f4a3162a54211f20c8a892a"), ("2c8510f92f92bcc106fb9ddc8df8efa0bb38f6fbf3ff4093c23e738ccf743143", "04c6b210c51fd45a4d61911a91cc10b489b53f9d98f95fd9ebb5a3fd87d0cff7", "20b7dc36d9532cfeb9fd54d5ff5a6004619da0d8d49e269e9449bc07aef7cf30", "206505301a2ace1744d22b7a2901eba6c4e5727073cd021c52e2e1c7c0b8f063"), ("1a7297d6826a654ab2124cdc3ba0b2e79c4258762a8c30c214a60635a4dd8fd7", "209b9d9f5fd13ed41595b414cad28cbb18ae6d542949d54194b12ec6f397efbe", "0e52db61fb139750f0dec9fa0c63e35bc07ad554d1a231e481fb5fb026b491f7", "19c9677e98ff61a43eef74b1b440feb80590558ccfd0fd56813c4b6244e41e49"), ("069b8289567b3e72bab9e05a224956f3a01488d1613115af463b7b12ec53caae", "27f2278f4fb5bdb192db6c6936187e66a742693abc8e2cebb0c3c40dca3f66c8", "215b7402d57b0725420717f176f67a1e293cbaf1b14eaac6302558861a132817", "2707f1fbf669b71127202acceb6e4388bee2da0789623b9051d69a65c4db93c5"), ("27698ac5ccdbf1d2d056d558e5da9467ef1e42619797766aa8ab134b91a1da60", "2431e5aaa97eec1c996a07fe3b8bcd70e591c64fe38a8651aa6ac6c6dbb9e8f7", "1c70885c4ab7820ac172209b839d6f91c0ff7c697af57ecf577a7d2cecdffb4b", "305c53bedfcb5c7c53503084cd28395e587d404b2b304a6620c0e383f92ec4ea"), ("00f96e082267ce23e9203783ed02e4278e6bc425c259bca714e3246570ce5006", "2be81b53c0c9404c8042031bce1b61c27991433482871916e256c14d8c18eaf3", "1eb74fa9597655157642ecc152a86dafe12647b3619217741497139b07a7855b", "1c73cbb54fcb94a978aa89d9c0ee87c7d1d5c3eaab533099062467a7dd9b765d"), ("1556f5d0e4a7cf69721eaa08729f2165652bcfa75ce15326bac32ebdcff82ecc", "06c0aa1c777fd7c6ce42b4b461de839734cde77868646571f4c52a16716fefdb", "2cca1f354728a0004af7d7540c29d80682e62b8f27c2d2363a0b4f2251659b67", "23eb91c1ee9fcdace861631c63ea843541c62d02fae7b331beec037838ac352f"), ("03791dfdc3beb7d93bdd4c69ee17f2ee81d48edda6339b9c3dd4a27a81231cfc", "17e6d15740c353e4a737039d4beacc7a34f996257a09581dc056df0e423a4b51", "10212fab387e8ab6c93c1930ad2cfaa76601fd9d8b1c45e75edec6ede5ed1f26", "0e89da5d6da5196a6c874d660994eebadcb88149b9608b4d93c5dda8a1203968"), ("20f8bf3c72cd05e1d99974f416d6bfa6bb95200d2a479fbcef1d0ca5a50baec5", "2e7c07f1f3046e204987b977ebcdce31186e21325f434134732c1eb359a004a5", "02052e80691cc5b802e21c3286c8719a0b0e26da923a1dd578207fe24af96a20", "1d111d3ea091cd56313cd9b8be41f0af6462a6aba9e020cd3ba5862d9ebc288a"), ("14d90ab108eb0f96c66d2448f0c4c477564689f2aed79c4f73bd3aec0d318443", "1b8cbe3a502ab851be0b60e53cee889d3f6d6d15718fcdb54635a6029c39ab4b", "033113d91bdc71f80e5c7384beab0fd8568ef17b57c57ca84b30a7d099276731", "043ce0012aa8bfec98de342db7dbd40a1d9d81f94af7a296c954c77f7a03469f"), ("00692902700f5faf2b70dd73b30a242b5c0ed1898d6e8294415584c706aeef0b", "1aa72aa87e061cdcb5ac1a1c93ad2da5cdbabe587a7dff4f50085edecfbe6b33", "0c54cdd3581ced4faadca7c5ef552c8f8fdf0cea242dc1a7cbc6c63ad2ec1dcc", "0b9a184fe33941a6f0a62fa7ceea0091b0e1ffce0f0ce7fb76715b55d20fae11"), ("0458bd6ff747006aab5dab86e4c0204bd2fb973e24aa4179332dec6ad0f3576e", "108d8a40716e3b2a7af0a057702e41d93270854720effa6a8bbcf736be9479c3", "0b36b95d5d0436a9adf2c96a20b611aacc39e1c5f5e5df3a5d30fae0d4b7b1e0", "04648cab36f145ab9731c7c89d460a1bda7f2f8938d1fde65bdf814e88fa192e"), ("15fd8045277b47847f0994e500f2459e258783fef2881e0f12f4feda1ea4084e", "03641cc0789ace0a75c35f2677ef121e7b17f254f0b518331ddaa6e52dcbb4fa", "0fcc0b78adcc9356f9eac3f4b73c77f2875b804e876e80d494c38b3eb82c5ed8", "1dce116f073a855e065b8f1e0430ac3d273deb165ded23c6290d653de6fcb8b5"), ("0b19077a5fac59ed65e94ac14b5310c510193f2381e6666ed1e9bbdc3760c834", "16f2f39f6383bc12c6062919bd8bf5e086305780a1d7c8ece3f3e565759dc7a0", "00144f2355b4154f40945c32977c8f9688f5ba773839e6e77539556185f5e01c", "0c91203c58cbaf66129e39e08a71ae205d11cf94bcaf92b1991cd57f63fc868b"), ("0c5d973b6448a3b48a1a15823f56ae0d12d1cf8cbe1fe3fa70f00d80c82e4e38", "215a259c0887f3bd3f60eeb046a73106eed8375348887eac1bf85647b01b6c2e", "2cde64402f0343eb1642010f8d0988d241b9055423cf10fa0ccb15d408c94cd2", "05f5ee793e7fe7f7eba88bfffba582d48bc57400be7f5994cd59a4851feb9cc2"), ("1830c89cbc82673b25f261821a84f7ce7ae0124121070796b6ab4fcb0e318802", "103d04d7185b16bf12acb39ea11c1766e6c4ab73e22337eef15b5121328f8cc3", "0209bfe6a6c0b3dc90680ec4c3412c1b3b7381eb2630d2bf15755e24a457909e", "0cada50cd175f437a730149c3d376bb2fe318cb11dfbdeb6d8e20b5fbe9b6b95"), ("0addd63c069fa80917fcf1531203bca23fe35adc33a6eee94713f59e07c2f13f", "1c53d7ea3e69a64b098aabbff1460d5be2af721727f43beade78bc4cdd8946e3", "2055011ef7f1c6b990027c4f6f943269eb5f7d075334976ea8c89ec707a55122", "1cfebb1a6c94c3785d8ae79aa4ce6705d7b9e640d1235ed60f000e1807c81ad5"), ("24e0ada99e3c5c566dfae5cc633c6111850d4035ca09feacedaceff7a070e95f", "10760796a7c8ec733b82062b18cfc5973332ec76506b0271b557064b9819ecfc", "21777596d19dcdf401e380bc103fd255998c7cd7203de88df3e5b97e554ea024", "00315869bbfa12ae8bfb5bac97309039f88e8bce9bd49ec1a3e72bbe13bdb79a"), ("208f0f8c527ef783fb76c894c87da33c5138b2b84bd6f6f0b807d6ebe16c8dae", "2e56acab314027645fa06590184c90d5d7e2dffe8d01850d39cffd384b242767", "1163ab939ac86762c89448cc0d7289a1db304974c4eabb3a40bb77a32e174335", "2a7cb7d88db3532fe3dd5044e33e5dd06aaf15affccac6b4a4ac475d8b98bac3"), ("0cc69e9c054bdd482284601c19ca0603ca12514f7afa2fceda88ec20d72ec457", "1690c92d965498c10ad04c013121ccdfe95431be04b4233cbe88075e78e9061f", "1b366715e09a7a41b6bdbabdf65935651809d9761a4c79f4344b213eaff98260", "2462a8139676956bc4e3066a08f15eb7aea4c1014f90fabd386ce184684beba5"), ("119d861cae444ca0ae5e954fe758170ed1981e69fe2f3a4a7650d592e68ba619", "275525533a3be1ab72357cd87dad4502400e4fdd754ad2245299bde8713c3593", "0d0197dc11fac4c15d69d617c7dec7620096692b0fd79777724089f9537d5007", "1f90cf7944301888abd1ab25bed34d44daf425e07d6fdbf263a70c9f96ce0dfe"), ("2edb8fcafa0c0497e8ef59163ebad4a761b3cf113bbe3a9c9d88cff7814a89bd", "2aefff27d933dba6862d9ded3309e4855f1688411e349074e6d8d600ca2016ee", "28f38bdc854343c805422f09ee7fa9ce189889c28f056f73939c58b8305498fd", "09ee048df104e62a280e9ea17aff20535e84ddf7618252aaa45b12ea86f0243a"), ("085e92eb4b6ff8ebd8079f909e39be2408765da6d1d1f056a5afd1ca6647d74c", "2b8ecdf0d5f4ed96ea51b30c5e065b2bef5efc685bfce605fc4b040a437e6883", "1aaab102f4931b64f4820e367019fcd79cae840ef9b5c067405bb84d496ed07a", "16ccad1fcdcd953e42ab4a32bd99b104fbcae9859e4e5dd7814cd127b4191c0b"), ("03e588f85d3ebdd7cd881d1fd9c5cdc8423cc3e55960bcec427eaa232ac5f4ec", "13c9c3a4971e55ba3a748176f06992b5a3c9c4b7eaca32d99ee9e52a0ef09e69", "1686dba5385d4986644600dccdffd5d88465d8b0a2dded41dd8640b6e6878073", "2756cecb201032e3499e5121b54ad296d0624ebc9e6b9515e67aa79acfb8bf9b"), ("26f2a5764491c0e4f234e6f1056d2d02ff1d23e8f6d5de571fcc659f81acec1b", "136e81091ffbdcbacab512225f5cecdba18a190f23283fb99e0506b2798bfc9d", "0a326a0e82c2e8e47abdb5bca0649df2b7801315857595497db620e9cd64ee08", "14b307ff8781e959e042df160214c52aa9a652c2b7891738a784808c8395010a"), ("1c1a67ffdf9e734ffe3603a2ff1dfe2cf3f507077f8237593c4f0d6fdf73b0b0", "1eaf9cfa0141572e7e756391b1de0ab8b40356763d9a962cc6debf485efa35bb", "150fdbe1bf2ef8b200488b83fbaf11c67112c7a561f0426b2fae85adedfcffdc", "2b07a74277df9d944d14ffd96b6023ab39a777b9cbcb6a6f121239852b92f3fa"), ("2221051441b9d03d80ee838763dce03a9a38bfd2797cf804e865aa45058d0fd7", "1bc87d1fa77b564822650183b540aa04ed3842a9474c44082a4c91bb126605db", "0c4cc83abb18f65a55837fa9b6dc549f18692d233924b73d29660caa06fa1991", "0cdb94cd85450a650f5091be7bbf88ccd2d029c58f750d45ac5e20c0482f901a"), ("0d26a20ea2128e82a5b2be4c36c3cf4e918904133c96fb9806a7baeb28c6a405", "271634e49ed369139be8b7ff4ac02de1ba10a9cd9f524fedf7d8376540ab1709", "1289ee25de58cdca912e456f9fabc1693a10877eea9380cf08c6ab24f310eef3", "251eb37eb8ef5454873bc5533b823577563a71e85f3e40efe451fd65ad0fe407"), ("13f443f3537e30c1e5abfbb0d722f79645169188094a9e04679ff3dbb2a69abc", "10b7911ab70cbfe1fb6b8932cfb24830a415e02a2a8e2a2c4a62fcc3f8be6d6a", "07f971ef35501d83500eaf028ff7a2d7b6280572665bcda71f1769bf1ec57d32", "297b2c651c448d52805da4884a25ccc1d55a806bb803268554d223b6abff2250"), ("0b8cbabfc21f844565d6f90b3d821de664c35e02c6dd846799f3976b1e40d6f1", "0c71d772cb224d5e1c733dba810117c883b47e576f7f3148f2dbe892262f0b82", "1152a3d5d5fba3634fcc17bc6455af6861b0183c75865a1122029e7a09f15dc5", "1f5532ff89be1a67734f8a0f0d186c80716a1f2fc3e6ed53e3f806b682800a3d"), ("0c0ebabb021f963b6c89abd240c03c6186076e4d08c675cd09ce1532a2841fdc", "2a683ee90c00b3bb13ff99adecc7d1463ab9ad49ab06cbe7df5d8dcf5deca633", "1752711c03e83d788c1a7b12d8c8c8402518b979042ffaf595dc59a82423522e", "2c1b36199ac15414f91d1574b5112d521641dd7daf73be356b8b01351b573df6"), ("0b9668568e992fd34e918d80ecd3ab9daed23fd3d13150cbb10ee018e1eaeae9", "17c98047171b4ebc138428edd18f34b9f0ce079ea123378f17266f0aecbc4dd8", "1307978b1f84d48f7e5820f11cd7d9a0f175955555d1ba5e1c93f5c61b37d858", "1258adf3855fdc5ad47822c66d6ca923034ba03f7c9270ae1c2adf201858d9ea"), ("20d33c52c6a8ed350865e1b14ec72a9a2f56bfc3778d44084abf106ed329ad60", "20e1b62fd8ce45304ebee90fbaf40e919777cbb03b04c7b7075e897f558dc7b3", "12a2b85899e0aecf300a4b4ca80e987fbf602a03528300834cdcf3c746e3c036", "225da1ff78468eaccf51a545485c25e220eb1dc1ecf2de203f4bef066135c5cd"), ("1df844f744ae96851fba170c91c5ca55d714b2e6e2fcbe40165cc9b63655ddbe", "193d55d6ff51f01d3f187d595ecd4ec15aa5337fc7eedaf739bfd1e10cab62da", "2c06bcadddd473b075ebcf0f50c3897c77ac08be49044f5b61692b491de14d5f", "1fb5b725cd82f38654b9500042780015d0af2bc217130fbe1bf4d808b302d9cb"), ("20da8e15fa8096a670a8347c43a6260ffc6757105c9ee0e75d2f87b905aeb93a", "0eed1094b7e3c74bbe4543576fcc08ba9de48463558ecad4754438ef16868612", "173f348e578ec7ecdce31118865e8b761a8dca02ebe5b1896c40b0fa2b3b055f", "268e87e0a6392e3f6452b447d089f28d81d7dee250a5ad8ca626c70e4ea30425"), ("0b46795eb70d82ab2e459bf88aa0b2ec3016dcca4097418773b07abeb9017048", "2195dc97f542afd60e088822c2581824320aeda5fff96c7364c29c38fbab65ba", "1fc90ff292cc7d28142be666d3e0a25fdb290e238c6df329feee61427ddf8d48", "1b41d4d62347a0a57d6a346fa90365b3db409ef41b3aec76bb6fc00a0a98fc8c"), ("0263ee07115871b10d6ce7b8d06651f1a4cd11b52ec10ee689956827d20365bf", "233e91a8c5a73ff98617f94d23ca9717041131b70f4dd70846ea750de5a5be67", "00c339b2841cb4d71ce70cc2e0c31a716dd7bc6527263971e1060c84100ae484", "3034f8946a103956e52d08d0e8f1581740d044670fd41c2fe5b36ce4f1f016f4"), ("1f744b8581dd8af129eabcfcbc7640e8525ad17867ed8054286873eb835b5407", "07694ca4a922427a9cb1ef3c53e9c5425a686785783229fee28ff73bc3e78203", "0731530ea7d562c3dd7abff85e6a1bfed5caee771230aa8a70c977b7b3be4b2b", "2c27e56941d76cb6677b8dd2989c3bbf8614251f4ec859e1c50fabcbc06fcdad"), ("0d464e4b1346b74a1299cab3f98fb66ef838a47c522d49ec3614b0b4e897f3ff", "131cafb5b8a17b82ab52053b6176bf163208ffb4d757d609a9a204751fb1263d", "130a2e8d0c5e905f377b2939ee35c3c4477b81be52c2b57eedd206709f533784", "184e01eb2175317264d44ef35c9fbe199d1f267f679b1cac495889ea93b6fca2"), ("0b2b5de96a7b0f985cc6d0600d31a091d2bab6cfe5f9c49a2d3911548f8029d7", "1670e47b428c6a6edb373df36549c6a858f639ffb072f93ac303a75757743186", "221b3297e871c492202224b767e0ede7917b20c03b29ec1b79e415171f03711f", "043396329094c71bff289443f6af413005630a2a6ef48b4601202d853547aa91"), ("0e3ee943552bdbb1dfdab8ab9de433a7ae5c306a984f53f3386d64e432d26267", "282c1ee57cf4cdd6e1c4118a746293d67f7f49229b95870737051e68ffddc710", "051a5bd89d0110153aa657bee4505579028ccd146c3e50587796f460aac43586", "16885be76079728c4bc939d0cd10db16050e3bed59f7d020a701d86256af49c9"), ("22304c46e9d4a449b4ecc8c7aff436ae9f9621207ae629343e3aacaa95ba1816", "06b015b993efdb4446484cbc5004c06654e08d9f0221161fa3c15d2ef470bc98", "15bbf98db55d9e8eb2ae7db6448746a8bd52733e18415faa9f1bbd872b778da1", "1120b62e342008b74792e47f4d7b89337021bb6188ff7b1a4400d90c88d4c254"), ("2a843f269501fe0f4bce75610534e0540001f96b087927e4946e734b2f2437e6", "08f3f1ac2865595fe10cc6904bdfdecb4c634e3a43ea4553badf17b8bf112f50", "03919db7333f52eeb7cd5ceab96a5b9807d1a5daf87cee770815e3b9d8cd5a0d", "2266511e7e0658ef9a8f43b97ef966947fcf996d3692c3fed26451841a493ca9"), ("026dfe1bc6f28779a031e3612a018e000901747cde06f4f152515aa3b98f179e", "1ca78f4615dedf5049147a57ad737c63241e3ff7c517dde27d21bfb88c2b0f47", "2527693fcf3a6a320d43c0a309d38150ef674176bc08aba238aa0be9590b2ba3", "2074f3ac6993c5b577db1f5b1e4dc3751e2c93ef05a7319287017f33058f3c42"), ("252f8c64080dd35b055666204b80e077ed10e68d375c568b03c14e9d06b55dea", "035074b4e09a6d85e2a7e21e2f995f9a2fb083aab93615f67f3df22e0b0de13f", "117decc634898a68134120609c9042cf0384e096985f3f406407ad37d02d74db", "14968c3a84d60fe4303e36f0abb2f87126ef2af791807df992437eef740de062"), ("034292d9cfca3e09cacf9ba5cdcb8a1c013c0dff513e93cec90cabc9395d3d0a", "0bcce5a223c7550e804bcee4875529702eda3faf4e0600981f5dee17164c727a", "26fe32a8fd0c3a5b914559365f4c3e307abf98a996e98028da378361d1a2728c", "138ebc102029698a1ea79ac1d9e54428b6abd70500e36bbf2a30978602a89e29"), ("1fe4fc3791aaa9641a14b871c11c4178ba47e29a25aa000b77ea1c116e8d1084", "1db4e3830efcff18e50a4108987b050eb7646dc146c8b2c8632a4a109d328d15", "056f1871ea8a99b16619fe1547f176a3874a437a08ad88ecac93b918fbb7a371", "021782da75cdcefdcb493b05a029065496a56bae9bae54ce64b89d52bbed9e57"), ("2ddc3460471c63e5103c1890ba3fa95ad9d5b21d6d5433901f5acd606c972e9f", "2ca537917d19345cb97a92466c4dbf95a1985aa33fb42ca220384af66f9b97ff", "0beb685cc9c47c445571d008e8906e1f63cf5c12b425c4ee55ed689bd700581b", "0e9b6ace10d42fe3bde8275abe1a95bc9c5e8d24041676f03053ff82f39d2e29"), ("1f4a212a4cf844f0e4d93962991baea2c1defef6b5258e0b82bcde4fcd564ab0", "035d0f351fd56ffd1328ba9173ee5155336d6fa540c60f85f6d05ade31c8e2ba", "07804196d0140df9ff0dc4523b9ee3635bbdf4161b8ff8b95224eca3245079f6", "2f06725698f1a35eb55e4ece944b79069a3828ee36e2f5c760db5db4c7dceb85"), ("19d0eb7aed78e39bbf1a989a83d84070dc1b091385053525c6ca7a55d1a12957", "02b0edd101e95de31173e1ff48d7965fa5f9daafca67a2f819dfb50fbf1244aa", "2a4f6265ab4b3785830080c14492f44d3cd775cbb3279bdacfeba276256e97ac", "304dfa3e6f40b228fb95831637af2d379633ce582e3b2eb3d6f2f4d27a2af7cb"), ("2a241bc348181bbef112578edfd5e0db15af035c4441caec45a22dffbffe8e8f", "18e117597f3276347993ae5e1503fd39631991c95e89e592d6335e0be4c9f066", "24c8ab78075b4b214415cadfc11fb95c817cea2ee98e48b2176b47e5bb54dd3d", "000a0d5a2aaee53d5ec14b97658e64b62d050482c9f51195f7ddc12a8e2f2667"), ("07c5b8ec57d95886633b7aa07dced499f017d85c0707eee5c88aa1e0d4420965", "20661717e6e6ddd09a92e6585a06cbe7cc51b1f41d35c567dbf07e0bc9fc0cf0", "12762773f99fd08794f1e312a82948405933dd0d28d58ba3f431e0c6b6c84137", "145245c87ece88c50c4b141770dbd4579125219064cb2257e72b260c4a261fca"), ("2c1970072bd4b102610b227e764d7acdc2512f110a768ab05521fa212dfc43ad", "04554c9ff8c549c320e201aa004d42c7e1263d11ad8cd31323f6520fb67d7215", "0d68de107eb364bad8ee3bd71940f378afa08d3923a08a855479f3e425bec5b2", "01b19c252546da2f607369d692754b30404e83cda37ef1667ee8fc8d82d1affe"), ("288f596f525e5a4fd6b22c30af2f5f5e4086793538241b6531517eab0840e61a", "1e60c7b208188e10e47b24d64ed180fec0590511fc941f00e311b47f3b1d5d71", "1ef7305b68fd8c806547d00d73c414147e15a7a0284582542dca93d891f1a9a2", "07d9bbeb99b47b638602a9baad12f33682fe62b1fd34ae655dfa1131c0cfa9c0"), ("08e7053a106bcda72d5c7a641152d7ec830fde48008f8cdaa2e3f9056eef4929", "1ebbceb151fc00a58f95c0991f659850ff137664bf7d1f839bcc9e9aef444ad5", "0caaf0deb0a5bf67b3579fe31491c7372d66e7af2c6c46235f0de6d50836d387", "2d3493f2be3363df2311c795c4c40f935c9569a6438d063ee07e9ea0be61fac7"), ("0c7539dad8585f4a9467cd5f0fd30d0bc5e6c1ed95ac10bd3f27f676ce4af217", "0cd6af98f44e7475e02e0e7f536438707eccc2c8eceb36d9d223e178e6ceb625", "0acb90107dea9566715ea85e2e0c93a497d887f274c6fc1717aec5d1b475fd4c", "2eb38fabaf52b8c75dccc3287b6940c1c182919ff07956adcaeffeb125ae75d9"), ("1dab21be1e7de92412b3ed07392ffd3c69f75ed3871059849fa71649c26d3d94", "16708418fad178aedeee03bc1a10cf162aae70fe8790c42f8f07ded02c8895bb", "24f488bdd394b281ccebdbd34244d7c983eb2e02ebc739cfd8cae06b462c8906", "16766b803eec249ec43ad8cbcae9cb50d39b89f37e45fa1311a6822929d1ec90"), ("06cd9b4e8b5a9f1d963c5b5f7982e396d247cf36c5bac15fd91b05da1afa248a", "01a689e4904081c6d78709aaec630f25886d8b2c3f4179c7edbe2865373e0b02", "1f66d9c1dc9572378c2455a36ca6fa168698462f8f5eec08463518ad4caa982d", "1f77df8ddc181f723a7d060e7bff95d61a2097c6f9ca2308ee18aefaf716f8d3"), ("0ca031f66f4a01147b699f6935f035b2ef19da4fc2cc5312ad8c10f8845edddc", "237c8d5b407ef3f7f9aae3a8848d4ca7d75c2c2e7c8fd6e77d374b2a4f445cb3", "161a7aaec08ba12161b5050ebeacdbe6b2fa719920e5443ffc3f7d381a2c57bd", "2d4c875060b11dc1f111510362ee816cca1cd25fdb00254ff990cfaadcf83818"), ("053da2beea265095c752e7699fb603beb6bb7e988dbdd76f58c3052d665e054c", "057e6aefaf78f54caa34bd220bdffc2da1ca0f813a79787805439bf169134471", "06e860bd1a55bc91d679d9baf2cb60184016a134eeffea3a6f41bfd3561aba78", "1aa004bba729b8c0e11d3515682389cac688f2fd3f2c33b3d5cc1503d91d3d4d"), ("061e563583dec93978bdaf13274918257ab80bdd102eb8a6cfb074d0c89d6955", "0c0c5e7a9544eab91c4c74a26fb21ca2d5a762947e2fc25f57b2772ca00f9968", "25b59bccfd2740852bec538680350796880689f3ed83bd2b0ee033f9d90f25fc", "276be0920ce81b1dfcbcb9dbae64d32a62028a3ff82419b8220d913d1ca4f56a"), ("04963dc8713be846e8b5d1b2817a8cf2e3d182a66b8112dec13712ec8931c79e", "031836fb9ce12852686a1955c4d148612f88a4e54ef21781f63eac1e11e92d6d", "00f683ebed0e36a04a1ec2e4800f34ba3e0fad57ccf36c3bdf32aaca6eafc09c", "1f6770b901636b52bb7ccf2ba8aebf33134aaee0d796911d16bccdbd3da28780"), ("2cb658cf5d89d77c47dc21f463a67a144cf434b0732ea48118d3c37e16794fd3", "2d64c641945114eaf0c335550b60cbb27aad8d130d86576cbccf09c98b52cf9c", "1ae1eb199de1d9c2759b47f6b83a607703fa8b978823426cf8b6bad1076075cf", "03e1b51001b225d7db1f7cc94386b786dc56f240490904d01a6699dc38cd1da9"), ("26d180b465f6a95b0b6ae95f6421222eb2de33097c76821ea368840f627901ff", "127ade8f69b27a32f90b47624adbce508c7e8885dbcce24a249fc9a5eafb493d", "09f4539e48bcdbcb0fa9a5ce50d7049854d3fe2ad97501e8f5b74f962a1ffe4c", "23abcb7019329ecbd58fdb30029d038c1ae41ac54e1ab0cfa1b1f19985ed9860"), ("25233fa6ddf28d14291f0255a2224d542c0291825a15ea385ad30f98a7a4e51c", "2c1465c3901f7ae12a44508def6c48231c4dfaa07a6d4d45860e61975ea08971", "2ec6709eea811e201026f4e762ebbc826c3506de636cd2a3802bc376f745957a", "2e06f897c79fc7609fe0b310a1be7c4b1cafc93f6fa9a8cbd25c4b6f9d4ba54c"), ("17eabb28d5535016c0f7ee5c91642581cdfc9238316abe7f0ef90e0aadb87e21", "0904c56e33e9e5d314eddd4d2ea6f68ddf03320f6485d55dd21841c345302a3d", "1eb7b56bb806ab3aefaf73f7b297ec78931c53b69f67b4857015e3899164c08d", "20a2f32ce731c7385b2b7e8b5588ff2ff92b237739cd4f474d01591d1a35a69f"), ("1ce00cbf231a0c694acaed78e2d139264314daee83639d274a1bdbcbd83bfd98", "1748562628f378632d9b75a176e349f268e51be1a4279154c83c42a043f58c85", "19d4162884aa861b1689d06620e277da718dd6b2ca18451555844d19b6bea21d", "2c17ea85000200a60d755f5078dd52e70e8a702c877844d1f1cbf1109aabba5a"), ("2576ad48d2ed11216c555d27b6aa11ec865f0fc5db6851895c54d51d4e1dc087", "28b56a598e1750edd961eed9cd2b1cbd72ed6937951a440c7a7e0d4c85f2e1b1", "0514d65c205511eb032c972fc924053af97c53d6d7bce02b88aa2425b1ab580e", "226d364b513103efe90aadddaf2453ac76ce9397dfc248fe646401f30d86ebe9"), ("1c22c53d5c5ff456448d2f4e9edb6f67e273b159261c30d46f18ab52af0e51eb", "1ae8417362967ea02d28fda96bab3c195a20ea5db2c51dc14f8e208a83876263", "0aba23680057549aaf989e9cb3462e637a0de780535f4d1f63b43265fc5a390c", "3054f49e9a29791b9f86776a2c746ebdc05352ed9933762836450f150988a467"), ("1239f81d0b63dfd00d5e39bd181b2920ff139c968d89124d92c34ce600c154ce", "04936b0c9f2d2d62b29bda27ceae43c6dea7aeeb83d1c473f7174c4437c19703", "2ec408aa493869c289802bb879db10615a48edffafae19ad0fb4a5b95159fc88", "03be9b6282e8a2e2681af7b7c1697e3fa486fb90510d7975e8663c548fe7d89a"), ("2928cc507175af22aaa6157ec2feb12af9f27c532d9be3adc3ed1d98124738e8", "1e981c395d97d5de2ff637f9c48b30c48dba6118191efc92a8f898ec7d49bff2", "1df9f13dfb01b94b1347a76764e4548d76f44762c2f78efa5cde39081e6a3c77", "2c2a46964b02a36cd853006ad3d4a37e1f4689679f8b66d2ca1bf4b1d170c6cf"), ("194c969bdfccc35eae91159e923721553875027191c904bcdff56f80c7ca947f", "02e5cc9768c55b5f6eaa3b58c4553f12c784d688886cc023984b7481a9c812af", "028a97c7de90e55b6fec9168c540e276eee57fed9d752843eca93abe7b350c38", "200763e7bee12ab10d12a970fdad815cd250959be74f271303fff30c1a0c67ed"), ("2dfecf1999560b5f3f240c54566136b609c018cec1aa44223384292f43b4ca93", "1db11d1b38ec27bead93ac2f1045d6b829c2c3215add31f7cf7541bd9fe880ff", "1391e541d2f9038d5b9aa1872263f6c58029493e4ce588818d6ac258dc29f4b6", "1967a1387caa074513f6866a8b6b27af8b0f6f28f0534d6f4ccd2cd8d84782c4"), ("06da199c67bd7d21e0388f6dfa60771336d45c146b4966764ac0547ec7d85aa3", "246eb9a75ea86d3ca70d25f6c975aba8dc0dd9297476b5f46551e20c9aefbfa2", "1052229f75c7f5e187215aee96d905d5645c7c6ef92626b875eb5b39fd55061b", "2f5c3cca7b94babd79c03980fb28229d1cf9316542ba9d9aff98310e6218967e"), ("21e6ab525a8af9527c4d8575d40753221636088c99bfa92fd8a2690804fa6956", "27c1058b12a82557645e805139df1499186ab7b17ffc6355babffa92f100f5aa", "0ee0742a61abded993b8b05a2c20822e3c66027cf5d55d14476f40fa31f357d6", "0cb84bf914675acf5ecd3d0bbd9d28bce2998035468c9c2f6aa92a810e3496c5"), ("06cb99bb6b4b156b88bcaaf6600d23c0766ae63582c54d4ebfcece950bc16f0a", "0f34452b725f2d6dd6776b42b7331be2ccfed2fd01ce0a64e6af02270dd13bab", "00fb6a75db9a271f32a0c2d8cbb1b52e74fc0d7c6187f864556b79c16e1762cf", "2de494a69724f37d0c7e15fb843190980876526802fbd4c3f1fc32ef076ae7d1"), ("0158fa8fd14131f4bc3487c3f1ba9ecea194322239cef430f3a7c032880f15b4", "11bbe04a5c6f17f429acc9323be52866a5abf550ae8f72be8668bef732684515", "009588be0f8698474d89a14233af97275a3cffdd31ea208c5e71e59e0025dce6", "1f2fdf9df8c08722974ef5a4d535e7ddd606e6c31ac08a0b2dac4ca111374e9a"), ("25830f18688a2cf461fe3efb7a2d04024edd9a5d16d412ad50c7ad611d1aef8e", "093795d0488b806050b4ab79f07cf5790700febe351992be37c5de5503bf5759", "0ed895b3dfe67158e69c77199c518e63562c7b3d94ad75692b723bf3c1eb5119", "2d7f4d1247ee4f56d844adaf44e5c6eea8b431f4371c652396d07c93e28a40e4"), ("07c3c9495751e9a84c65307c32a3be223b7375f71a215d5f4618a8a8e68e306f", "04f1c6f042d77bbcca1aaa014f7589975ad89c27dc8a5f89978fa088acbea3e6", "018017da04cb7ef81985975479316d5799552b8e1600a99a981a59929133b0d3", "2d23c747b2f67584ded16d8d1be366bdf522a5310933fdc55bb560dbb75aa631"), ("0a389c6b043112a4869b6218f0ee79b414b8d0a14eba9ffa100c43473dfa4696", "02ea072139eefe156831ad9215bb1e41ed14fb4a6bf908fa1bd7264536425962", "186141a21838d8c1dd51350b17c3d7f83c65d223735b6eec34b31ed1e8947f69", "07159cf67ddeb02e7ff443aa2dcfd2f7b7acfd955cce8112e8541a63f72644aa"), ("2af47c2ab99f5ba0ec696aecb12ce7c6c40e9392a2d4ea849492e3b796a888fb", "02a50f42dc316f61893d601f2b363e0fdb9835ba51f990473db32ffe0dc9b670", "176a9869c8af8810c2e2863963a06bc0d0f4bc003a822377faabf2bb66e2cecb", "2141cd67919f2bc88ab381736367cefeed51f1529da19bc706b1d62fd4dcfb10"), ("16aa119160b588b9dd6df884c537ef413256eca93aa23118ee0e2eb7ccee10a9", "0789a88054f7ffcc27a623af9baeeda9016a91191388bffadc7311bc32dbf016", "1b9a53cc955e77d96b138b85d152166945c131505441212cdc017dfeb886949f", "21fbe0a3dd59e33b54a9d0db8b19fcf96539e6754ab414e01b0936c8ab0fd060"), ("059bcee76201f08b423a7d58b23f8811c0fff65df9275ff2bdca3ae04e41b883", "01cc8d0f4828081f982f914fb4d9ab91d71e7939044b2012597ac815de487f9b", "30217dfce24e1e776cbbc3e4100e271f8ad64590c79a00d5caa0e5a0050b02ee", "1ca33fab6160eb24370ca28bd9781fe5cadbcfaa3b4da4e88d478ce55ad07ecf"), ("03b6856d20fce3518c023b7063618d749ec41c8937d2c1903dc1f842e33dd2a1", "085ef85f0a62704178de4db1db924543f3615b2cae9c4a17d25c65ccd0349224", "054e23ae1ef2edd207f25d86d8a07cde35749e12d20e6cbb63945fd7246e1b6e", "2ebf892f89bc88e48832df9a81352e62211405336ed22c5de698ee5c694fcac5"), ("0a9329d196674bae97cc4ca8aede41492d26b84aa693d5c4bbeeea67e0c15e4d", "1ed4ac4d3a164729eea913b114f8611d50dc264ac01cb9859d678da9125da102", "1452d1127ad64e85b4ed50a62e604675d0a30fc53d8f91beb0605dfcab6c36cd", "30261a31d09c2e470c30b2c840cfba93e1a77d193cc7fb2dafdfef6f2eef5c7c"), ("1d10f554cfd5dbde4d5e80aed9f4a699bb44e5b74addee6662756b7172327b5a", "03e376dfbd7b410338d9323c32cc673172bca160efc19433fda18706d0252d92", "0b7ebef731fa2f5391b3677ae750fd356a3f6bc68f186858e79d04bb7b941d3a", "2f50913feff5c3be471f9e0dfcbe066bdc32c3f66e7cd6ec265f459529aa4268"), ("2b7187ccad11ba93bcd1cb405f58cf94305dce9de440cdc2477fcca77aeee315", "27d22e299e0b0b7955364920227ddd01e730882fcffbf827cae05cd54606d07a", "01311467edd0bf170ece03af60d54adccc005e6a8800bd9ddd184a03b525f674", "25e743bf8816c186536e733b00e1e4bb0c3eb5afca7af57434f351164eaa90a7"), ("09ee4709a65f81a13d2d91f34642eafc2f0d4bd870c3c120f538062754923b99", "18b2d5dd4b7699b292e1067bd8cfe4cedcbd23995bc2257ced020fd650ffedef", "2362a1fa791ddd406900eb96bdcaa43f51855cc8f8c9a0bf256146b3a7a590f7", "1bebbac0ec5722d199af0052dce6885a44eee436b5f60f4ce3be3be5573a8aa5"), ("24ee16aaef52d229c20cee06d974d8a0fcd84452b751f064bcb2872a94a659ca", "2368a754253fa9810441cc899308b0ccda2953328323a4e3d1a3c62c41f8d01b", "225c3610ed33a9a3a7d88e0ac1fb3b3085418470fdadfa494cfbdc67f9c0669c", "25f72fb5614b7388c4eb62ac2474a2fbc96e1cdb66fcd23aab014073e2e8a950"), ("16eacced0f9638df894f31bc79095a6b1f37aa63b659d5c32aa8e69f7d11ee43", "0c27048ecb6aa48f3f24922d8ae3a5c4b33a9fe290cd0333985ea572e4166be0", "111ac3ba60c7e03510171e5a35eac319dcf14b527316f647bd4e9f81fdb4980e", "1075247a959d099ab57fd801151ac8c2410c8e1896ec04a98723ebb0bab90f6e"), ("1c0078c55f85b58a2926b658cd9c8adc290bd00ad97676adea9e296606ddf876", "186eb4ffe5548ca40805588e5f15a520bb466ca003379541611a240025cde780", "2a5afff6f474bdb6f51ce59001e61687418df51a8d2274873881837daa186f22", "206611d8f7f7083e00fb5593d011a72cbe3ff6319767a2b9d38e31ac193cffb4")] # StaticGroupMerkleRoot is the root of the Merkle tree constructed from the StaticGroupKeys above # only identity commitments are used for the Merkle tree construction # the root is created locally, using createMembershipList proc from waku_rln_relay_utils module, and the result is hardcoded in here - StaticGroupMerkleRoot* = "25caa6e82a7476394b0ad5bfbca174a0a842479e70eaaeee14fa8096e49072ca" + StaticGroupMerkleRoot* = "1e534adab58f7d300aaeecae57a25e0a0b18c368a09f720280da92b288950901" const EpochUnitSeconds* = float64(10) # the rln-relay epoch length in seconds const MaxClockGapSeconds* = 20.0 # the maximum clock difference between peers in seconds From 7b5c36b1c67f1efa1bb11d490a6ea33b8cefece9 Mon Sep 17 00:00:00 2001 From: NagyZoltanPeter <113987313+NagyZoltanPeter@users.noreply.github.com> Date: Thu, 5 Oct 2023 14:00:09 +0200 Subject: [PATCH 070/274] feat: /admin rest api endpoint (#2094) /admin rest api implementation and tests * open api doc * Add rest admin test to all tests * Enrich /admin get peers interface, group protocols by peers in response --- apps/wakunode2/app.nim | 4 + tests/all_tests_waku.nim | 3 +- tests/wakunode_rest/test_all.nim | 3 +- tests/wakunode_rest/test_rest_admin.nim | 96 +++++++++++++++++ waku/waku_api/jsonrpc/admin/handlers.nim | 19 +--- waku/waku_api/rest/admin/client.nim | 62 +++++++++++ waku/waku_api/rest/admin/handlers.nim | 113 +++++++++++++++++++ waku/waku_api/rest/admin/openapi.yaml | 74 +++++++++++++ waku/waku_api/rest/admin/types.nim | 132 +++++++++++++++++++++++ waku/waku_core.nim | 6 +- waku/waku_core/multiaddrstr.nim | 27 +++++ 11 files changed, 517 insertions(+), 22 deletions(-) create mode 100644 tests/wakunode_rest/test_rest_admin.nim create mode 100644 waku/waku_api/rest/admin/client.nim create mode 100644 waku/waku_api/rest/admin/handlers.nim create mode 100644 waku/waku_api/rest/admin/openapi.yaml create mode 100644 waku/waku_api/rest/admin/types.nim create mode 100644 waku/waku_core/multiaddrstr.nim diff --git a/apps/wakunode2/app.nim b/apps/wakunode2/app.nim index 3b458cc917..97dbec7475 100644 --- a/apps/wakunode2/app.nim +++ b/apps/wakunode2/app.nim @@ -38,6 +38,7 @@ import ../../waku/waku_api/rest/lightpush/handlers as rest_lightpush_api, ../../waku/waku_api/rest/store/handlers as rest_store_api, ../../waku/waku_api/rest/health/handlers as rest_health_api, + ../../waku/waku_api/rest/admin/handlers as rest_admin_api, ../../waku/waku_api/jsonrpc/admin/handlers as rpc_admin_api, ../../waku/waku_api/jsonrpc/debug/handlers as rpc_debug_api, ../../waku/waku_api/jsonrpc/filter/handlers as rpc_filter_api, @@ -567,6 +568,9 @@ proc startApp*(app: App): Future[AppResult[void]] {.async.} = proc startRestServer(app: App, address: ValidIpAddress, port: Port, conf: WakuNodeConf): AppResult[RestServerRef] = let server = ? newRestHttpServer(address, port) + ## Admin REST API + installAdminApiHandlers(server.router, app.node) + ## Debug REST API installDebugApiHandlers(server.router, app.node) diff --git a/tests/all_tests_waku.nim b/tests/all_tests_waku.nim index 2922817700..c527d7f63e 100644 --- a/tests/all_tests_waku.nim +++ b/tests/all_tests_waku.nim @@ -99,7 +99,8 @@ import ./wakunode_rest/test_rest_store, ./wakunode_rest/test_rest_filter, ./wakunode_rest/test_rest_legacy_filter, - ./wakunode_rest/test_rest_lightpush + ./wakunode_rest/test_rest_lightpush, + ./wakunode_rest/test_rest_admin import ./waku_rln_relay/test_waku_rln_relay, diff --git a/tests/wakunode_rest/test_all.nim b/tests/wakunode_rest/test_all.nim index 5c568820aa..620ae8a708 100644 --- a/tests/wakunode_rest/test_all.nim +++ b/tests/wakunode_rest/test_all.nim @@ -9,4 +9,5 @@ import ./test_rest_relay_serdes, ./test_rest_relay, ./test_rest_serdes, - ./test_rest_store + ./test_rest_store, + ./test_rest_admin diff --git a/tests/wakunode_rest/test_rest_admin.nim b/tests/wakunode_rest/test_rest_admin.nim new file mode 100644 index 0000000000..42aea1b173 --- /dev/null +++ b/tests/wakunode_rest/test_rest_admin.nim @@ -0,0 +1,96 @@ +{.used.} + +import + std/sequtils, + stew/shims/net, + testutils/unittests, + presto, presto/client as presto_client, + libp2p/crypto/crypto + +import + ../../waku/waku_core, + ../../waku/waku_node, + ../../waku/node/peer_manager, + ../../waku/waku_api/rest/server, + ../../waku/waku_api/rest/client, + ../../waku/waku_api/rest/responses, + ../../waku/waku_api/rest/admin/types, + ../../waku/waku_api/rest/admin/handlers as admin_api, + ../../waku/waku_api/rest/admin/client as admin_api_client, + ../../waku/waku_relay, + ../testlib/wakucore, + ../testlib/wakunode, + ../testlib/testasync + +suite "Waku v2 Rest API - Admin": + var node1 {.threadvar.}: WakuNode + var node2 {.threadvar.}: WakuNode + var node3 {.threadvar.}: WakuNode + var peerInfo2 {.threadvar.}: RemotePeerInfo + var peerInfo3 {.threadvar.}: RemotePeerInfo + var restServer {.threadvar.}: RestServerRef + var client{.threadvar.}: RestClientRef + + asyncSetup: + node1 = newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("127.0.0.1"), Port(60600)) + node2 = newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("127.0.0.1"), Port(60602)) + peerInfo2 = node2.switch.peerInfo + node3 = newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("127.0.0.1"), Port(60604)) + peerInfo3 = node3.switch.peerInfo + + await allFutures(node1.start(), node2.start(), node3.start()) + await allFutures(node1.mountRelay(), node2.mountRelay(), node3.mountRelay()) + + let restPort = Port(58011) + let restAddress = ValidIpAddress.init("127.0.0.1") + restServer = RestServerRef.init(restAddress, restPort).tryGet() + + installAdminApiHandlers(restServer.router, node1) + + restServer.start() + + client = newRestHttpClient(initTAddress(restAddress, restPort)) + + asyncTearDown: + await restServer.stop() + await restServer.closeWait() + await allFutures(node1.stop(), node2.stop(), node3.stop()) + + asyncTest "Set and get remote peers": + # Connect to nodes 2 and 3 using the Admin API + let postRes = await client.postPeers(@[constructMultiaddrStr(peerInfo2), + constructMultiaddrStr(peerInfo3)]) + + check: + postRes.status == 200 + + # Verify that newly connected peers are being managed + let getRes = await client.getPeers() + + check: + getRes.status == 200 + $getRes.contentType == $MIMETYPE_JSON + getRes.data.len() == 2 + # Check peer 2 + getRes.data.anyIt(it.protocols.find(WakuRelayCodec) >= 0 and + it.multiaddr == constructMultiaddrStr(peerInfo2)) + # Check peer 3 + getRes.data.anyIt(it.protocols.find(WakuRelayCodec) >= 0 and + it.multiaddr == constructMultiaddrStr(peerInfo3)) + + asyncTest "Set wrong peer": + let nonExistentPeer = "/ip4/0.0.0.0/tcp/10000/p2p/16Uiu2HAm6HZZr7aToTvEBPpiys4UxajCTU97zj5v7RNR2gbniy1D" + let postRes = await client.postPeers(@[nonExistentPeer]) + + check: + postRes.status == 400 + $postRes.contentType == $MIMETYPE_TEXT + postRes.data == "Failed to connect to peer at index: 0 - " & nonExistentPeer + + # Verify that newly connected peers are being managed + let getRes = await client.getPeers() + + check: + getRes.status == 200 + $getRes.contentType == $MIMETYPE_JSON + getRes.data.len() == 0 diff --git a/waku/waku_api/jsonrpc/admin/handlers.nim b/waku/waku_api/jsonrpc/admin/handlers.nim index c89fb05de0..599a725af7 100644 --- a/waku/waku_api/jsonrpc/admin/handlers.nim +++ b/waku/waku_api/jsonrpc/admin/handlers.nim @@ -14,30 +14,13 @@ import ../../../waku_relay, ../../../waku_node, ../../../node/peer_manager, + ../../../waku_core, ./types logScope: topics = "waku node jsonrpc admin_api" - - -proc constructMultiaddrStr*(wireaddr: MultiAddress, peerId: PeerId): string = - # Constructs a multiaddress with both wire address and p2p identity - $wireaddr & "/p2p/" & $peerId - -proc constructMultiaddrStr*(peerInfo: PeerInfo): string = - # Constructs a multiaddress with both location (wire) address and p2p identity - if peerInfo.listenAddrs.len == 0: - return "" - constructMultiaddrStr(peerInfo.listenAddrs[0], peerInfo.peerId) - -proc constructMultiaddrStr*(remotePeerInfo: RemotePeerInfo): string = - # Constructs a multiaddress with both location (wire) address and p2p identity - if remotePeerInfo.addrs.len == 0: - return "" - constructMultiaddrStr(remotePeerInfo.addrs[0], remotePeerInfo.peerId) - proc installAdminApiHandlers*(node: WakuNode, rpcsrv: RpcServer) = rpcsrv.rpc("post_waku_v2_admin_v1_peers") do (peers: seq[string]) -> bool: diff --git a/waku/waku_api/rest/admin/client.nim b/waku/waku_api/rest/admin/client.nim new file mode 100644 index 0000000000..9980cadae8 --- /dev/null +++ b/waku/waku_api/rest/admin/client.nim @@ -0,0 +1,62 @@ +when (NimMajor, NimMinor) < (1, 4): + {.push raises: [Defect].} +else: + {.push raises: [].} + +import + chronicles, + json_serialization, + json_serialization/std/options, + presto/[route, client], + stew/byteutils + +import + ../serdes, + ../responses, + ./types + +export types + + +logScope: + topics = "waku node rest admin api" + +proc decodeBytes*(t: typedesc[seq[WakuPeer]], data: openArray[byte], + contentType: Opt[ContentTypeData]): RestResult[seq[WakuPeer]] = + if MediaType.init($contentType) != MIMETYPE_JSON: + error "Unsupported response contentType value", contentType = contentType + return err("Unsupported response contentType") + + let decoded = decodeFromJsonBytes(seq[WakuPeer], data).valueOr: + return err("Invalid response from server, could not decode.") + + return ok(decoded) + +proc decodeBytes*(t: typedesc[string], value: openArray[byte], + contentType: Opt[ContentTypeData]): RestResult[string] = + if MediaType.init($contentType) != MIMETYPE_TEXT: + error "Unsupported contentType value", contentType = contentType + return err("Unsupported contentType") + + var res: string + if len(value) > 0: + res = newString(len(value)) + copyMem(addr res[0], unsafeAddr value[0], len(value)) + return ok(res) + +proc encodeBytes*(value: seq[string], + contentType: string): RestResult[seq[byte]] = + if MediaType.init(contentType) != MIMETYPE_JSON: + error "Unsupported contentType value", contentType = contentType + return err("Unsupported contentType") + + let encoded = ?encodeIntoJsonBytes(value) + return ok(encoded) + +proc getPeers*(): + RestResponse[seq[WakuPeer]] + {.rest, endpoint: "/admin/v1/peers", meth: HttpMethod.MethodGet.} + +proc postPeers*(body: seq[string]): + RestResponse[string] + {.rest, endpoint: "/admin/v1/peers", meth: HttpMethod.MethodPost.} diff --git a/waku/waku_api/rest/admin/handlers.nim b/waku/waku_api/rest/admin/handlers.nim new file mode 100644 index 0000000000..ec295fe3ae --- /dev/null +++ b/waku/waku_api/rest/admin/handlers.nim @@ -0,0 +1,113 @@ +when (NimMajor, NimMinor) < (1, 4): + {.push raises: [Defect].} +else: + {.push raises: [].} + +import + std/strformat, + std/sequtils, + stew/byteutils, + chronicles, + json_serialization, + presto/route, + libp2p/[peerinfo, switch] + +import + ../../../waku_core, + ../../../waku_store, + ../../../waku_filter, + ../../../waku_relay, + ../../../waku_node, + ../../../node/peer_manager, + ../responses, + ../serdes, + ./types + +export types + +logScope: + topics = "waku node rest admin api" + +const ROUTE_ADMIN_V1_PEERS* = "/admin/v1/peers" + +type PeerProtocolTuple = tuple[multiaddr: string, protocol: string, connected: bool] + +func decodeRequestBody[T](contentBody: Option[ContentBody]) : Result[T, RestApiResponse] = + if contentBody.isNone(): + return err(RestApiResponse.badRequest("Missing content body")) + + let reqBodyContentType = MediaType.init($contentBody.get().contentType) + if reqBodyContentType != MIMETYPE_JSON: + return err(RestApiResponse.badRequest("Wrong Content-Type, expected application/json")) + + let reqBodyData = contentBody.get().data + + let requestResult = decodeFromJsonBytes(T, reqBodyData) + if requestResult.isErr(): + return err(RestApiResponse.badRequest("Invalid content body, could not decode. " & + $requestResult.error)) + + return ok(requestResult.get()) + +proc tuplesToWakuPeers(peers: var WakuPeers, peersTup: seq[PeerProtocolTuple]) = + for peer in peersTup: + peers.add(peer.multiaddr, peer.protocol, peer.connected) + + +proc installAdminV1GetPeersHandler(router: var RestRouter, node: WakuNode) = + router.api(MethodGet, ROUTE_ADMIN_V1_PEERS) do () -> RestApiResponse: + var peers: WakuPeers = @[] + + if not node.wakuRelay.isNil(): + # Map managed peers to WakuPeers and add to return list + let relayPeers = node.peerManager + .peerStore.peers(WakuRelayCodec) + .mapIt(( + multiaddr: constructMultiaddrStr(it), + protocol: WakuRelayCodec, + connected: it.connectedness == Connectedness.Connected) + ) + tuplesToWakuPeers(peers, relayPeers) + + if not node.wakuFilterLegacy.isNil(): + # Map WakuFilter peers to WakuPeers and add to return list + let filterPeers = node.peerManager.peerStore.peers(WakuLegacyFilterCodec) + .mapIt((multiaddr: constructMultiaddrStr(it), + protocol: WakuLegacyFilterCodec, + connected: it.connectedness == Connectedness.Connected)) + tuplesToWakuPeers(peers, filterPeers) + + if not node.wakuStore.isNil(): + # Map WakuStore peers to WakuPeers and add to return list + let storePeers = node.peerManager.peerStore + .peers(WakuStoreCodec) + .mapIt((multiaddr: constructMultiaddrStr(it), + protocol: WakuStoreCodec, + connected: it.connectedness == Connectedness.Connected)) + tuplesToWakuPeers(peers, storePeers) + + let resp = RestApiResponse.jsonResponse(peers, status=Http200) + if resp.isErr(): + error "An error ocurred while building the json respose: ", error=resp.error + return RestApiResponse.internalServerError(fmt("An error ocurred while building the json respose: {resp.error}")) + + return resp.get() + +proc installAdminV1PostPeersHandler(router: var RestRouter, node: WakuNode) = + router.api(MethodPost, ROUTE_ADMIN_V1_PEERS) do (contentBody: Option[ContentBody]) -> RestApiResponse: + + let peers: seq[string] = decodeRequestBody[seq[string]](contentBody).valueOr: + return RestApiResponse.badRequest(fmt("Failed to decode request: {error}")) + + for i, peer in peers: + let peerInfo = parsePeerInfo(peer).valueOr: + return RestApiResponse.badRequest(fmt("Couldn't parse remote peer info: {error}")) + + if not (await node.peerManager.connectRelay(peerInfo, source="rest")): + return RestApiResponse.badRequest(fmt("Failed to connect to peer at index: {i} - {peer}")) + + return RestApiResponse.ok() + +proc installAdminApiHandlers*(router: var RestRouter, node: WakuNode) = + installAdminV1GetPeersHandler(router, node) + installAdminV1PostPeersHandler(router, node) diff --git a/waku/waku_api/rest/admin/openapi.yaml b/waku/waku_api/rest/admin/openapi.yaml new file mode 100644 index 0000000000..2ce64e46c6 --- /dev/null +++ b/waku/waku_api/rest/admin/openapi.yaml @@ -0,0 +1,74 @@ +openapi: 3.0.3 +info: + title: Waku V2 node REST API + version: 1.0.0 + contact: + name: VAC Team + url: https://forum.vac.dev/ + +tags: + - name: admin + description: Admin REST API for WakuV2 node + +paths: + /admin/v1/peers: + get: + summary: Get connected peers info + description: Retrieve information about connected peers. + operationId: getPeerInfo + tags: + - admin + responses: + '200': + description: Information about a Waku v2 node. + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/WakuPeer' + '5XX': + description: Unexpected error. + post: + summary: Adds new peer(s) to connect with + description: Adds new peer(s) to connect with. + operationId: postPeerInfo + tags: + - admin + requestBody: + content: + application/json: + schema: + type: array + items: + type: string + responses: + '200': + description: Ok + '400': + description: Cannot connect to one or more peers. + '5XX': + description: Unexpected error. + +components: + schemas: + WakuPeer: + type: object + required: + - multiaddr + - protocols + properties: + multiaddr: + type: string + protocols: + type: array + items: + type: object + required: + - protocol + - connected + properties: + protocol: + type: string + connected: + type: boolean diff --git a/waku/waku_api/rest/admin/types.nim b/waku/waku_api/rest/admin/types.nim new file mode 100644 index 0000000000..ab6b8f22c0 --- /dev/null +++ b/waku/waku_api/rest/admin/types.nim @@ -0,0 +1,132 @@ +when (NimMajor, NimMinor) < (1, 4): + {.push raises: [Defect].} +else: + {.push raises: [].} + +import + chronicles, + json_serialization, + json_serialization/std/options, + json_serialization/lexer +import + ../serdes + +#### Types + +type + ProtocolState* = object + protocol*: string + connected*: bool + +type + WakuPeer* = object + multiaddr*: string + protocols*: seq[ProtocolState] + +type WakuPeers* = seq[WakuPeer] + +#### Serialization and deserialization + +proc writeValue*(writer: var JsonWriter[RestJson], value: ProtocolState) + {.raises: [IOError].} = + writer.beginRecord() + writer.writeField("protocol", value.protocol) + writer.writeField("connected", value.connected) + writer.endRecord() + +proc writeValue*(writer: var JsonWriter[RestJson], value: WakuPeer) + {.raises: [IOError].} = + writer.beginRecord() + writer.writeField("multiaddr", value.multiaddr) + writer.writeField("protocols", value.protocols) + writer.endRecord() + +proc readValue*(reader: var JsonReader[RestJson], value: var ProtocolState) + {.gcsafe, raises: [SerializationError, IOError].} = + var + protocol: Option[string] + connected: Option[bool] + + for fieldName in readObjectFields(reader): + case fieldName + of "protocol": + if protocol.isSome(): + reader.raiseUnexpectedField("Multiple `protocol` fields found", "ProtocolState") + protocol = some(reader.readValue(string)) + of "connected": + if connected.isSome(): + reader.raiseUnexpectedField("Multiple `connected` fields found", "ProtocolState") + connected = some(reader.readValue(bool)) + else: + unrecognizedFieldWarning() + + if connected.isNone(): + reader.raiseUnexpectedValue("Field `connected` is missing") + + if protocol.isNone(): + reader.raiseUnexpectedValue("Field `protocol` is missing") + + value = ProtocolState( + protocol: protocol.get(), + connected: connected.get() + ) + +proc readValue*(reader: var JsonReader[RestJson], value: var WakuPeer) + {.gcsafe, raises: [SerializationError, IOError].} = + var + multiaddr: Option[string] + protocols: Option[seq[ProtocolState]] + + for fieldName in readObjectFields(reader): + case fieldName + of "multiaddr": + if multiaddr.isSome(): + reader.raiseUnexpectedField("Multiple `multiaddr` fields found", "WakuPeer") + multiaddr = some(reader.readValue(string)) + of "protocols": + if protocols.isSome(): + reader.raiseUnexpectedField("Multiple `protocols` fields found", "WakuPeer") + protocols = some(reader.readValue(seq[ProtocolState])) + else: + unrecognizedFieldWarning() + + if multiaddr.isNone(): + reader.raiseUnexpectedValue("Field `multiaddr` is missing") + + if protocols.isNone(): + reader.raiseUnexpectedValue("Field `protocols` are missing") + + value = WakuPeer( + multiaddr: multiaddr.get(), + protocols: protocols.get() + ) + +## Utility for populating WakuPeers and ProtocolState +func `==`*(a, b: ProtocolState): bool {.inline.} = + return a.protocol == b.protocol + +func `==`*(a: ProtocolState, b: string): bool {.inline.} = + return a.protocol == b + +func `==`*(a, b: WakuPeer): bool {.inline.} = + return a.multiaddr == b.multiaddr + +proc add*(peers: var WakuPeers, multiaddr: string, protocol: string, connected: bool) = + var + peer: WakuPeer = WakuPeer( + multiaddr: multiaddr, + protocols: @[ProtocolState( + protocol: protocol, + connected: connected + )] + ) + let idx = peers.find(peer) + + if idx < 0: + peers.add(peer) + else: + peers[idx].protocols.add(ProtocolState( + protocol: protocol, + connected: connected + )) + diff --git a/waku/waku_core.nim b/waku/waku_core.nim index ac68e4df0d..4491047e3a 100644 --- a/waku/waku_core.nim +++ b/waku/waku_core.nim @@ -3,11 +3,13 @@ import ./waku_core/time, ./waku_core/message, ./waku_core/peers, - ./waku_core/subscription + ./waku_core/subscription, + ./waku_core/multiaddrstr export topics, time, message, peers, - subscription + subscription, + multiaddrstr diff --git a/waku/waku_core/multiaddrstr.nim b/waku/waku_core/multiaddrstr.nim new file mode 100644 index 0000000000..0d568519cc --- /dev/null +++ b/waku/waku_core/multiaddrstr.nim @@ -0,0 +1,27 @@ +when (NimMajor, NimMinor) < (1, 4): + {.push raises: [Defect].} +else: + {.push raises: [].} + +import + libp2p/[peerinfo, switch] + +import + ./peers + +proc constructMultiaddrStr*(wireaddr: MultiAddress, peerId: PeerId): string = + # Constructs a multiaddress with both wire address and p2p identity + return $wireaddr & "/p2p/" & $peerId + +proc constructMultiaddrStr*(peerInfo: PeerInfo): string = + # Constructs a multiaddress with both location (wire) address and p2p identity + if peerInfo.listenAddrs.len == 0: + return "" + return constructMultiaddrStr(peerInfo.listenAddrs[0], peerInfo.peerId) + +proc constructMultiaddrStr*(remotePeerInfo: RemotePeerInfo): string = + # Constructs a multiaddress with both location (wire) address and p2p identity + if remotePeerInfo.addrs.len == 0: + return "" + return constructMultiaddrStr(remotePeerInfo.addrs[0], remotePeerInfo.peerId) + From a47dc9e6630b7b97f381343174f037c672fd2986 Mon Sep 17 00:00:00 2001 From: Simon-Pierre Vivier Date: Thu, 5 Oct 2023 08:37:05 -0400 Subject: [PATCH 071/274] fix: cluster id & sharding terminology (#2104) --- tests/test_waku_discv5.nim | 30 ++-- tests/test_waku_enr.nim | 88 +++++------ tests/waku_core/test_namespaced_topics.nim | 12 +- tests/waku_core/test_sharding.nim | 2 +- waku/waku_core/topics/pubsub_topic.nim | 24 +-- waku/waku_core/topics/sharding.nim | 10 +- waku/waku_discv5.nim | 22 +-- waku/waku_enr/sharding.nim | 176 +++++++++------------ 8 files changed, 172 insertions(+), 192 deletions(-) diff --git a/tests/test_waku_discv5.nim b/tests/test_waku_discv5.nim index dd9e4fd046..bebdb5fe37 100644 --- a/tests/test_waku_discv5.nim +++ b/tests/test_waku_discv5.nim @@ -276,7 +276,7 @@ procSuite "Waku Discovery v5": # Cleanup await allFutures(node1.stop(), node2.stop(), node3.stop(), node4.stop()) - asyncTest "get relayShards from topics": + asyncTest "get shards from topics": ## Given let mixedTopics = @["/waku/2/thisisatest", "/waku/2/rs/0/2", "/waku/2/rs/0/8"] let shardedTopics = @["/waku/2/rs/0/2", "/waku/2/rs/0/4", "/waku/2/rs/0/8"] @@ -284,7 +284,7 @@ procSuite "Waku Discovery v5": let gibberish = @["aedyttydcb/uioasduyio", "jhdfsjhlsdfjhk/sadjhk", "khfsd/hjfdsgjh/dfs"] let empty: seq[string] = @[] - let relayShards = RelayShards.init(0, @[uint16(2), uint16(4), uint16(8)]).expect("Valid Shards") + let shardsTopics = RelayShards.init(0, @[uint16(2), uint16(4), uint16(8)]).expect("Valid shardIds") ## When @@ -298,7 +298,7 @@ procSuite "Waku Discovery v5": assert mixedRes.isErr(), $mixedRes.value assert shardedRes.isOk(), shardedRes.error assert shardedRes.value.isSome() - assert shardedRes.value.get() == relayShards, $shardedRes.value.get() + assert shardedRes.value.get() == shardsTopics, $shardedRes.value.get() assert namedRes.isOk(), namedRes.error assert namedRes.value.isNone(), $namedRes.value assert gibberishRes.isErr(), $gibberishRes.value @@ -313,13 +313,13 @@ procSuite "Waku Discovery v5": enrPrivKey = generatesecp256k1key() let - shardCluster: uint16 = 21 - shardIndices: seq[uint16] = @[1u16, 2u16, 5u16, 7u16, 9u16, 11u16] + clusterId: uint16 = 21 + shardIds: seq[uint16] = @[1u16, 2u16, 5u16, 7u16, 9u16, 11u16] - let shards = RelayShards.init(shardCluster, shardIndices).expect("Valid Shards") + let shardsTopics = RelayShards.init(clusterId, shardIds).expect("Valid shardIds") var builder = EnrBuilder.init(enrPrivKey, seqNum = enrSeqNum) - require builder.withWakuRelaySharding(shards).isOk() + require builder.withWakuRelaySharding(shardsTopics).isOk() let recordRes = builder.build() require recordRes.isOk() @@ -331,13 +331,13 @@ procSuite "Waku Discovery v5": enrPrivKey = generatesecp256k1key() let - shardCluster: uint16 = 22 - shardIndices: seq[uint16] = @[2u16, 4u16, 5u16, 8u16, 10u16, 12u16] + clusterId: uint16 = 22 + shardIds: seq[uint16] = @[2u16, 4u16, 5u16, 8u16, 10u16, 12u16] - let shards = RelayShards.init(shardCluster, shardIndices).expect("Valid Shards") + let shardsTopics = RelayShards.init(clusterId, shardIds).expect("Valid shardIds") var builder = EnrBuilder.init(enrPrivKey, seqNum = enrSeqNum) - require builder.withWakuRelaySharding(shards).isOk() + require builder.withWakuRelaySharding(shardsTopics).isOk() let recordRes = builder.build() require recordRes.isOk() @@ -349,13 +349,13 @@ procSuite "Waku Discovery v5": enrPrivKey = generatesecp256k1key() let - shardCluster: uint16 = 22 - shardIndices: seq[uint16] = @[1u16, 3u16, 6u16, 7u16, 9u16, 11u16] + clusterId: uint16 = 22 + shardIds: seq[uint16] = @[1u16, 3u16, 6u16, 7u16, 9u16, 11u16] - let shards = RelayShards.init(shardCluster, shardIndices).expect("Valid Shards") + let shardsTopics = RelayShards.init(clusterId, shardIds).expect("Valid shardIds") var builder = EnrBuilder.init(enrPrivKey, seqNum = enrSeqNum) - require builder.withWakuRelaySharding(shards).isOk() + require builder.withWakuRelaySharding(shardsTopics).isOk() let recordRes = builder.build() require recordRes.isOk() diff --git a/tests/test_waku_enr.nim b/tests/test_waku_enr.nim index aebd4e5eff..848fb64ea1 100644 --- a/tests/test_waku_enr.nim +++ b/tests/test_waku_enr.nim @@ -255,71 +255,71 @@ suite "Waku ENR - Multiaddresses": suite "Waku ENR - Relay static sharding": - test "new relay shards field with single invalid index": + test "new relay shards object with single invalid shard id": ## Given let - shardCluster: uint16 = 22 - shardIndex: uint16 = 1024 + clusterId: uint16 = 22 + shard: uint16 = 1024 ## When - let res = RelayShards.init(shardCluster, shardIndex) + let shardsTopics = RelayShards.init(clusterId, shard) ## Then - assert res.isErr(), $res.get() + assert shardsTopics.isErr(), $shardsTopics.get() - test "new relay shards field with single invalid index in list": + test "new relay shards object with single invalid shard id in list": ## Given let - shardCluster: uint16 = 22 - shardIndices: seq[uint16] = @[1u16, 1u16, 2u16, 3u16, 5u16, 8u16, 1024u16] + clusterId: uint16 = 22 + shardIds: seq[uint16] = @[1u16, 1u16, 2u16, 3u16, 5u16, 8u16, 1024u16] ## When - let res = RelayShards.init(shardCluster, shardIndices) + let shardsTopics = RelayShards.init(clusterId, shardIds) ## Then - assert res.isErr(), $res.get() + assert shardsTopics.isErr(), $shardsTopics.get() - test "new relay shards field with single valid index": + test "new relay shards object with single valid shard id": ## Given let - shardCluster: uint16 = 22 - shardIndex: uint16 = 1 + clusterId: uint16 = 22 + shardId: uint16 = 1 - let topic = NsPubsubTopic.staticSharding(shardCluster, shardIndex) + let topic = NsPubsubTopic.staticSharding(clusterId, shardId) ## When - let shards = RelayShards.init(shardCluster, shardIndex).expect("Valid Shards") + let shardsTopics = RelayShards.init(clusterId, shardId).expect("Valid Shards") ## Then check: - shards.cluster == shardCluster - shards.indices == @[1u16] + shardsTopics.clusterId == clusterId + shardsTopics.shardIds == @[1u16] - let topics = shards.topics.mapIt($it) + let topics = shardsTopics.topics.mapIt($it) check: topics == @[$topic] check: - shards.contains(shardCluster, shardIndex) - not shards.contains(shardCluster, 33u16) - not shards.contains(20u16, 33u16) + shardsTopics.contains(clusterId, shardId) + not shardsTopics.contains(clusterId, 33u16) + not shardsTopics.contains(20u16, 33u16) - shards.contains(topic) - shards.contains("/waku/2/rs/22/1") + shardsTopics.contains(topic) + shardsTopics.contains("/waku/2/rs/22/1") - test "new relay shards field with repeated but valid indices": + test "new relay shards object with repeated but valid shard ids": ## Given let - shardCluster: uint16 = 22 - shardIndices: seq[uint16] = @[1u16, 2u16, 2u16, 3u16, 3u16, 3u16] + clusterId: uint16 = 22 + shardIds: seq[uint16] = @[1u16, 2u16, 2u16, 3u16, 3u16, 3u16] ## When - let shards = RelayShards.init(shardCluster, shardIndices).expect("Valid Shards") + let shardsTopics = RelayShards.init(clusterId, shardIds).expect("Valid Shards") ## Then check: - shards.cluster == shardCluster - shards.indices == @[1u16, 2u16, 3u16] + shardsTopics.clusterId == clusterId + shardsTopics.shardIds == @[1u16, 2u16, 3u16] test "cannot decode relay shards from record if not present": ## Given @@ -338,21 +338,21 @@ suite "Waku ENR - Relay static sharding": ## Then check fieldOpt.isNone() - test "encode and decode record with relay shards field (EnrBuilder ext - indices list)": + test "encode and decode record with relay shards field (EnrBuilder ext - shardIds list)": ## Given let enrSeqNum = 1u64 enrPrivKey = generatesecp256k1key() let - shardCluster: uint16 = 22 - shardIndices: seq[uint16] = @[1u16, 1u16, 2u16, 3u16, 5u16, 8u16] + clusterId: uint16 = 22 + shardIds: seq[uint16] = @[1u16, 1u16, 2u16, 3u16, 5u16, 8u16] - let shards = RelayShards.init(shardCluster, shardIndices).expect("Valid Shards") + let shardsTopics = RelayShards.init(clusterId, shardIds).expect("Valid Shards") ## When var builder = EnrBuilder.init(enrPrivKey, seqNum = enrSeqNum) - require builder.withWakuRelaySharding(shards).isOk() + require builder.withWakuRelaySharding(shardsTopics).isOk() let recordRes = builder.build() @@ -366,7 +366,7 @@ suite "Waku ENR - Relay static sharding": let shardsOpt = typedRecord.value.relaySharding check: shardsOpt.isSome() - shardsOpt.get() == shards + shardsOpt.get() == shardsTopics test "encode and decode record with relay shards field (EnrBuilder ext - bit vector)": ## Given @@ -374,10 +374,10 @@ suite "Waku ENR - Relay static sharding": enrSeqNum = 1u64 enrPrivKey = generatesecp256k1key() - let shards = RelayShards.init(33, toSeq(0u16 ..< 64u16)).expect("Valid Shards") + let shardsTopics = RelayShards.init(33, toSeq(0u16 ..< 64u16)).expect("Valid Shards") var builder = EnrBuilder.init(enrPrivKey, seqNum = enrSeqNum) - require builder.withWakuRelaySharding(shards).isOk() + require builder.withWakuRelaySharding(shardsTopics).isOk() let recordRes = builder.build() require recordRes.isOk() @@ -393,22 +393,22 @@ suite "Waku ENR - Relay static sharding": ## Then check: shardsOpt.isSome() - shardsOpt.get() == shards + shardsOpt.get() == shardsTopics - test "decode record with relay shards indices list and bit vector fields": + test "decode record with relay shards shard list and bit vector fields": ## Given let enrSeqNum = 1u64 enrPrivKey = generatesecp256k1key() let - shardsIndicesList = RelayShards.init(22, @[1u16, 1u16, 2u16, 3u16, 5u16, 8u16]).expect("Valid Shards") - shardsBitVector = RelayShards.init(33, @[13u16, 24u16, 37u16, 61u16, 98u16, 159u16]).expect("Valid Shards") + relayShardsIndicesList = RelayShards.init(22, @[1u16, 1u16, 2u16, 3u16, 5u16, 8u16]).expect("Valid Shards") + relayShardsBitVector = RelayShards.init(33, @[13u16, 24u16, 37u16, 61u16, 98u16, 159u16]).expect("Valid Shards") var builder = EnrBuilder.init(enrPrivKey, seqNum = enrSeqNum) - require builder.withWakuRelayShardingIndicesList(shardsIndicesList).isOk() - require builder.withWakuRelayShardingBitVector(shardsBitVector).isOk() + require builder.withWakuRelayShardingIndicesList(relayShardsIndicesList).isOk() + require builder.withWakuRelayShardingBitVector(relayShardsBitVector).isOk() let recordRes = builder.build() require recordRes.isOk() @@ -424,4 +424,4 @@ suite "Waku ENR - Relay static sharding": ## Then check: shardsOpt.isSome() - shardsOpt.get() == shardsIndicesList + shardsOpt.get() == relayShardsIndicesList diff --git a/tests/waku_core/test_namespaced_topics.nim b/tests/waku_core/test_namespaced_topics.nim index cf4ac34755..91f9b02507 100644 --- a/tests/waku_core/test_namespaced_topics.nim +++ b/tests/waku_core/test_namespaced_topics.nim @@ -151,7 +151,7 @@ suite "Waku Message - Pub-sub topics namespacing": test "Stringify static sharding pub-sub topic": ## Given - var ns = NsPubsubTopic.staticSharding(cluster=0, shard=2) + var ns = NsPubsubTopic.staticSharding(clusterId=0, shardId=2) ## When let topic = $ns @@ -186,8 +186,8 @@ suite "Waku Message - Pub-sub topics namespacing": let ns = nsRes.get() check: - ns.cluster == 16 - ns.shard == 42 + ns.clusterId == 16 + ns.shardId == 42 test "Parse pub-sub topic string - Invalid string: invalid protocol version": ## Given @@ -202,7 +202,7 @@ suite "Waku Message - Pub-sub topics namespacing": check: err.kind == ParsingErrorKind.InvalidFormat - test "Parse static sharding pub-sub topic string - Invalid string: empty shard value": + test "Parse static sharding pub-sub topic string - Invalid string: empty cluster id value": ## Given let topic = "/waku/2/rs//02" @@ -214,9 +214,9 @@ suite "Waku Message - Pub-sub topics namespacing": let err = ns.tryError() check: err.kind == ParsingErrorKind.MissingPart - err.part == "shard_cluster_index" + err.part == "cluster_id" - test "Parse static sharding pub-sub topic string - Invalid string: cluster value": + test "Parse static sharding pub-sub topic string - Invalid string: cluster id value": ## Given let topic = "/waku/2/rs/xx/77" diff --git a/tests/waku_core/test_sharding.nim b/tests/waku_core/test_sharding.nim index e67cb89d47..ea385f5dbb 100644 --- a/tests/waku_core/test_sharding.nim +++ b/tests/waku_core/test_sharding.nim @@ -109,7 +109,7 @@ suite "Waku Sharding": ## Then check: - pubsub == NsPubsubTopic.staticSharding(ClusterIndex, 3) + pubsub == NsPubsubTopic.staticSharding(ClusterId, 3) test "Shard Choice Simulation": ## Given diff --git a/waku/waku_core/topics/pubsub_topic.nim b/waku/waku_core/topics/pubsub_topic.nim index bdfb5e319f..cd146ad7e4 100644 --- a/waku/waku_core/topics/pubsub_topic.nim +++ b/waku/waku_core/topics/pubsub_topic.nim @@ -35,16 +35,16 @@ type NsPubsubTopic* = object case kind*: NsPubsubTopicKind of NsPubsubTopicKind.StaticSharding: - cluster*: uint16 - shard*: uint16 + clusterId*: uint16 + shardId*: uint16 of NsPubsubTopicKind.NamedSharding: name*: string -proc staticSharding*(T: type NsPubsubTopic, cluster, shard: uint16): T = +proc staticSharding*(T: type NsPubsubTopic, clusterId, shardId: uint16): T = NsPubsubTopic( kind: NsPubsubTopicKind.StaticSharding, - cluster: cluster, - shard: shard + clusterId: clusterId, + shardId: shardId ) proc named*(T: type NsPubsubTopic, name: string): T = @@ -63,7 +63,7 @@ proc `$`*(topic: NsPubsubTopic): string = of NsPubsubTopicKind.NamedSharding: "/waku/2/" & topic.name of NsPubsubTopicKind.StaticSharding: - "/waku/2/rs/" & $topic.cluster & "/" & $topic.shard + "/waku/2/rs/" & $topic.clusterId & "/" & $topic.shardId # Deserialization @@ -83,15 +83,15 @@ proc parseStaticSharding*(T: type NsPubsubTopic, topic: PubsubTopic|string): Par let clusterPart = parts[0] if clusterPart.len == 0: - return err(ParsingError.missingPart("shard_cluster_index")) - let cluster = ?Base10.decode(uint16, clusterPart).mapErr(proc(err: auto): auto = ParsingError.invalidFormat($err)) + return err(ParsingError.missingPart("cluster_id")) + let clusterId = ?Base10.decode(uint16, clusterPart).mapErr(proc(err: auto): auto = ParsingError.invalidFormat($err)) let shardPart = parts[1] if shardPart.len == 0: return err(ParsingError.missingPart("shard_number")) - let shard = ?Base10.decode(uint16, shardPart).mapErr(proc(err: auto): auto = ParsingError.invalidFormat($err)) + let shardId = ?Base10.decode(uint16, shardPart).mapErr(proc(err: auto): auto = ParsingError.invalidFormat($err)) - ok(NsPubsubTopic.staticSharding(cluster, shard)) + ok(NsPubsubTopic.staticSharding(clusterId, shardId)) proc parseNamedSharding*(T: type NsPubsubTopic, topic: PubsubTopic|string): ParsingResult[NsPubsubTopic] = if not topic.startsWith(Waku2PubsubTopicPrefix): @@ -123,10 +123,10 @@ proc `==`*[T: NsPubsubTopic](x, y: T): bool = if x.kind != NsPubsubTopicKind.StaticSharding: return false - if x.cluster != y.cluster: + if x.clusterId != y.clusterId: return false - if x.shard != y.shard: + if x.shardId != y.shardId: return false of NsPubsubTopicKind.NamedSharding: if x.kind != NsPubsubTopicKind.NamedSharding: diff --git a/waku/waku_core/topics/sharding.nim b/waku/waku_core/topics/sharding.nim index f616f54b72..ed4eef560f 100644 --- a/waku/waku_core/topics/sharding.nim +++ b/waku/waku_core/topics/sharding.nim @@ -19,8 +19,8 @@ import ./content_topic, ./pubsub_topic -## For indices allocation and other magic numbers refer to RFC 51 -const ClusterIndex* = 1 +## For indices allocation and other magic numbers refer to RFC 64 +const ClusterId* = 1 const GenerationZeroShardsCount* = 8 proc getGenZeroShard*(topic: NsContentTopic, count: int): NsPubsubTopic = @@ -34,7 +34,7 @@ proc getGenZeroShard*(topic: NsContentTopic, count: int): NsPubsubTopic = # This is equilavent to modulo shard count but faster let shard = hashValue and uint64((count - 1)) - NsPubsubTopic.staticSharding(ClusterIndex, uint16(shard)) + NsPubsubTopic.staticSharding(ClusterId, uint16(shard)) proc getShard*(topic: NsContentTopic): Result[NsPubsubTopic, string] = ## Compute the (pubsub topic) shard to use for this content topic. @@ -128,9 +128,9 @@ proc parseSharding*(pubsubTopic: Option[PubsubTopic], contentTopics: ContentTopi var list = newSeq[(NsPubsubTopic, float64)](shardCount) for (shard, weight) in shardsNWeights: - let pubsub = NsPubsubTopic.staticSharding(ClusterIndex, uint16(shard)) + let pubsub = NsPubsubTopic.staticSharding(ClusterId, uint16(shard)) - let clusterBytes = toBytesBE(uint16(ClusterIndex)) + let clusterBytes = toBytesBE(uint16(ClusterId)) let shardBytes = toBytesBE(uint16(shard)) let bytes = toBytes(topic.application) & toBytes(topic.version) & @clusterBytes & @shardBytes let hash = sha256.digest(bytes) diff --git a/waku/waku_discv5.nim b/waku/waku_discv5.nim index c02371dbbf..6a9fe094f8 100644 --- a/waku/waku_discv5.nim +++ b/waku/waku_discv5.nim @@ -70,7 +70,7 @@ proc shardingPredicate*(record: Record): Option[WakuDiscv5Predicate] = debug "peer filtering updated" let predicate = proc(record: waku_enr.Record): bool = - nodeShard.indices.anyIt(record.containsShard(nodeShard.cluster, it)) + nodeShard.shardIds.anyIt(record.containsShard(nodeShard.clusterId, it)) return some(predicate) @@ -150,7 +150,7 @@ proc new*(T: type WakuDiscoveryV5, if res.isErr(): debug "building ENR with relay sharding failed", reason = res.error else: - debug "building ENR with relay sharding information", cluster = $relayShard.get().cluster(), shards = $relayShard.get().indices() + debug "building ENR with relay sharding information", clusterId = $relayShard.get().clusterId(), shards = $relayShard.get().shardIds() builder.build().expect("Record within size limits") @@ -190,18 +190,18 @@ proc updateENRShards(wd: WakuDiscoveryV5, if add and currentShardsOp.isSome(): let currentShard = currentShardsOp.get() - if currentShard.cluster != newShard.cluster: - return err("ENR are limited to one shard cluster") + if currentShard.clusterId != newShard.clusterId: + return err("ENR are limited to one clusterId id") - ?RelayShards.init(currentShard.cluster, currentShard.indices & newShard.indices) + ?RelayShards.init(currentShard.clusterId, currentShard.shardIds & newShard.shardIds) elif not add and currentShardsOp.isSome(): let currentShard = currentShardsOp.get() - if currentShard.cluster != newShard.cluster: - return err("ENR are limited to one shard cluster") + if currentShard.clusterId != newShard.clusterId: + return err("ENR are limited to one clusterId id") - let currentSet = toHashSet(currentShard.indices) - let newSet = toHashSet(newShard.indices) + let currentSet = toHashSet(currentShard.shardIds) + let newSet = toHashSet(newShard.shardIds) let indices = toSeq(currentSet - newSet) @@ -215,12 +215,12 @@ proc updateENRShards(wd: WakuDiscoveryV5, return ok() - ?RelayShards.init(currentShard.cluster, indices) + ?RelayShards.init(currentShard.clusterId, indices) elif add and currentShardsOp.isNone(): newShard else: return ok() let (field, value) = - if resultShard.indices.len >= ShardingIndicesListMaxLength: + if resultShard.shardIds.len >= ShardingIndicesListMaxLength: (ShardingBitVectorEnrField, resultShard.toBitVector()) else: let listRes = resultShard.toIndicesList() diff --git a/waku/waku_enr/sharding.nim b/waku/waku_enr/sharding.nim index 17954803c9..7b5c9f6a8a 100644 --- a/waku/waku_enr/sharding.nim +++ b/waku/waku_enr/sharding.nim @@ -18,7 +18,6 @@ import logScope: topics = "waku enr sharding" - const MaxShardIndex: uint16 = 1023 const @@ -26,48 +25,45 @@ const ShardingIndicesListMaxLength* = 64 ShardingBitVectorEnrField* = "rsv" - type RelayShards* = object - cluster: uint16 - indices: seq[uint16] - + clusterId: uint16 + shardIds: seq[uint16] -func cluster*(rs: RelayShards): uint16 = - rs.cluster +func clusterId*(rs: RelayShards): uint16 = + rs.clusterId -func indices*(rs: RelayShards): seq[uint16] = - rs.indices +func shardIds*(rs: RelayShards): seq[uint16] = + rs.shardIds func topics*(rs: RelayShards): seq[NsPubsubTopic] = - rs.indices.mapIt(NsPubsubTopic.staticSharding(rs.cluster, it)) + rs.shardIds.mapIt(NsPubsubTopic.staticSharding(rs.clusterId, it)) +func init*(T: type RelayShards, clusterId, shardId: uint16): Result[T, string] = + if shardId > MaxShardIndex: + return err("invalid shard Id") -func init*(T: type RelayShards, cluster, index: uint16): Result[T, string] = - if index > MaxShardIndex: - return err("invalid index") + ok(RelayShards(clusterId: clusterId, shardIds: @[shardId])) - ok(RelayShards(cluster: cluster, indices: @[index])) +func init*(T: type RelayShards, clusterId: uint16, shardIds: varargs[uint16]): Result[T, string] = + if toSeq(shardIds).anyIt(it > MaxShardIndex): + return err("invalid shard") -func init*(T: type RelayShards, cluster: uint16, indices: varargs[uint16]): Result[T, string] = - if toSeq(indices).anyIt(it > MaxShardIndex): - return err("invalid index") + let indicesSeq = deduplicate(@shardIds) + if shardIds.len < 1: + return err("invalid shard count") - let indicesSeq = deduplicate(@indices) - if indices.len < 1: - return err("invalid index count") + ok(RelayShards(clusterId: clusterId, shardIds: indicesSeq)) - ok(RelayShards(cluster: cluster, indices: indicesSeq)) +func init*(T: type RelayShards, clusterId: uint16, shardIds: seq[uint16]): Result[T, string] = + if shardIds.anyIt(it > MaxShardIndex): + return err("invalid shard") -func init*(T: type RelayShards, cluster: uint16, indices: seq[uint16]): Result[T, string] = - if indices.anyIt(it > MaxShardIndex): - return err("invalid index") + let indicesSeq = deduplicate(shardIds) + if shardIds.len < 1: + return err("invalid shard count") - let indicesSeq = deduplicate(indices) - if indices.len < 1: - return err("invalid index count") - - ok(RelayShards(cluster: cluster, indices: indicesSeq)) + ok(RelayShards(clusterId: clusterId, shardIds: indicesSeq)) func topicsToRelayShards*(topics: seq[string]): Result[Option[RelayShards], string] = if topics.len < 1: @@ -83,23 +79,23 @@ func topicsToRelayShards*(topics: seq[string]): Result[Option[RelayShards], stri return ok(none(RelayShards)) if parsedTopicsRes.anyIt(it.get().kind == NsPubsubTopicKind.NamedSharding): - return err("use named topics OR sharded ones not both.") + return err("use named (/waku/2/*) OR static (/waku/2/rs/*/*) shards not both.") - if parsedTopicsRes.anyIt(it.get().cluster != parsedTopicsRes[0].get().cluster): - return err("use sharded topics within the same cluster.") + if parsedTopicsRes.anyIt(it.get().clusterId != parsedTopicsRes[0].get().clusterId): + return err("use shards with the same cluster Id.") - let relayShard = ?RelayShards.init(parsedTopicsRes[0].get().cluster, parsedTopicsRes.mapIt(it.get().shard)) + let relayShard = ?RelayShards.init(parsedTopicsRes[0].get().clusterId, parsedTopicsRes.mapIt(it.get().shardId)) return ok(some(relayShard)) -func contains*(rs: RelayShards, cluster, index: uint16): bool = - rs.cluster == cluster and rs.indices.contains(index) +func contains*(rs: RelayShards, clusterId, shardId: uint16): bool = + rs.clusterId == clusterId and rs.shardIds.contains(shardId) func contains*(rs: RelayShards, topic: NsPubsubTopic): bool = if topic.kind != NsPubsubTopicKind.StaticSharding: return false - rs.contains(topic.cluster, topic.shard) + rs.contains(topic.clusterId, topic.shardId) func contains*(rs: RelayShards, topic: PubsubTopic|string): bool = let parseRes = NsPubsubTopic.parse(topic) @@ -108,19 +104,18 @@ func contains*(rs: RelayShards, topic: PubsubTopic|string): bool = rs.contains(parseRes.value) - # ENR builder extension func toIndicesList*(rs: RelayShards): EnrResult[seq[byte]] = - if rs.indices.len > high(uint8).int: - return err("indices list too long") + if rs.shardIds.len > high(uint8).int: + return err("shards list too long") var res: seq[byte] - res.add(rs.cluster.toBytesBE()) + res.add(rs.clusterId.toBytesBE()) - res.add(rs.indices.len.uint8) - for index in rs.indices: - res.add(index.toBytesBE()) + res.add(rs.shardIds.len.uint8) + for shardId in rs.shardIds: + res.add(shardId.toBytesBE()) ok(res) @@ -128,30 +123,30 @@ func fromIndicesList(buf: seq[byte]): Result[RelayShards, string] = if buf.len < 3: return err("insufficient data: expected at least 3 bytes, got " & $buf.len & " bytes") - let cluster = uint16.fromBytesBE(buf[0..1]) + let clusterId = uint16.fromBytesBE(buf[0..1]) let length = int(buf[2]) if buf.len != 3 + 2 * length: return err("invalid data: `length` field is " & $length & " but " & $buf.len & " bytes were provided") - var indices: seq[uint16] + var shardIds: seq[uint16] for i in 0..= ShardingIndicesListMaxLength: + if rs.shardIds.len >= ShardingIndicesListMaxLength: builder.withWakuRelayShardingBitVector(rs) else: builder.withWakuRelayShardingIndicesList(rs) @@ -193,79 +187,65 @@ func withWakuRelaySharding*(builder: var EnrBuilder, rs: RelayShards): EnrResult func withShardedTopics*(builder: var EnrBuilder, topics: seq[string]): Result[void, string] = - let relayShardsRes = topicsToRelayShards(topics) - let relayShardOp = - if relayShardsRes.isErr(): - return err("building ENR with relay sharding failed: " & - $relayShardsRes.error) - else: relayShardsRes.get() - - if relayShardOp.isNone(): - return ok() + let relayShardOp = topicsToRelayShards(topics).valueOr: + return err("building ENR with relay sharding failed: " & $error) - let res = builder.withWakuRelaySharding(relayShardOp.get()) + let relayShard = relayShardOp.valueOr: + return ok() - if res.isErr(): - return err($res.error) + builder.withWakuRelaySharding(relayShard).isOkOr: + return err($error) return ok() # ENR record accessors (e.g., Record, TypedRecord, etc.) proc relayShardingIndicesList*(record: TypedRecord): Option[RelayShards] = - let field = record.tryGet(ShardingIndicesListEnrField, seq[byte]) - if field.isNone(): + let field = record.tryGet(ShardingIndicesListEnrField, seq[byte]).valueOr: return none(RelayShards) - let indexList = fromIndicesList(field.get()) - if indexList.isErr(): - debug "invalid sharding indices list", error = indexList.error + let indexList = fromIndicesList(field).valueOr: + debug "invalid shards list", error = error return none(RelayShards) - some(indexList.value) + some(indexList) proc relayShardingBitVector*(record: TypedRecord): Option[RelayShards] = - let field = record.tryGet(ShardingBitVectorEnrField, seq[byte]) - if field.isNone(): + let field = record.tryGet(ShardingBitVectorEnrField, seq[byte]).valueOr: return none(RelayShards) - let bitVector = fromBitVector(field.get()) - if bitVector.isErr(): - debug "invalid sharding bit vector", error = bitVector.error + let bitVector = fromBitVector(field).valueOr: + debug "invalid shards bit vector", error = error return none(RelayShards) - some(bitVector.value) + some(bitVector) proc relaySharding*(record: TypedRecord): Option[RelayShards] = - let indexList = record.relayShardingIndicesList() - if indexList.isSome(): - return indexList - - record.relayShardingBitVector() + let indexList = record.relayShardingIndicesList().valueOr: + return record.relayShardingBitVector() + return some(indexList) ## Utils -proc containsShard*(r: Record, cluster, index: uint16): bool = - if index > MaxShardIndex: +proc containsShard*(r: Record, clusterId, shardId: uint16): bool = + if shardId > MaxShardIndex: return false - let recordRes = r.toTyped() - if recordRes.isErr(): - debug "invalid ENR record", error = recordRes.error + let record = r.toTyped().valueOr: + debug "invalid ENR record", error = error return false - let rs = recordRes.value.relaySharding() - if rs.isNone(): + let rs = record.relaySharding().valueOr: return false - rs.get().contains(cluster, index) + rs.contains(clusterId, shardId) proc containsShard*(r: Record, topic: NsPubsubTopic): bool = if topic.kind != NsPubsubTopicKind.StaticSharding: return false - containsShard(r, topic.cluster, topic.shard) + containsShard(r, topic.clusterId, topic.shardId) proc containsShard*(r: Record, topic: PubsubTopic|string): bool = let parseRes = NsPubsubTopic.parse(topic) From 12e8b1227722dc6445011396574a200415ada629 Mon Sep 17 00:00:00 2001 From: Sergei Tikhomirov Date: Thu, 5 Oct 2023 15:04:57 +0200 Subject: [PATCH 072/274] docs: Clarify running instructions (#2038) refer to Waku README for bootstrap info --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index 99b253e965..8e6984545e 100644 --- a/README.md +++ b/README.md @@ -26,9 +26,14 @@ The standard developer tools, including a C compiler, GNU Make, Bash, and Git. M # You'll run `make update` after each `git pull` in the future to keep those submodules updated. make wakunode2 +# Run with DNS bootstrapping +./build/wakunode2 --dns-discovery --dns-discovery-url=DNS_BOOTSTRAP_NODE_URL + # See available command line options ./build/wakunode2 --help ``` +To join the network, you need to know the address of at least one bootstrap node. +Please refer to the [Waku README](https://github.com/waku-org/nwaku/blob/master/waku/README.md) for more information. For more on how to run `wakunode2`, refer to: - [Run using binaries](https://docs.waku.org/guides/run-nwaku-node#download-the-binary) From 71cfbbca6fd02d298f647ec5afce116fa3d90f3e Mon Sep 17 00:00:00 2001 From: Ivan FB <128452529+Ivansete-status@users.noreply.github.com> Date: Thu, 5 Oct 2023 18:23:19 +0200 Subject: [PATCH 073/274] postgres_driver.nim: rename table's name from "messages" to "message" (#2110) --- .../postgres_driver/postgres_driver.nim | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/waku/waku_archive/driver/postgres_driver/postgres_driver.nim b/waku/waku_archive/driver/postgres_driver/postgres_driver.nim index 775b348778..c0a2289688 100644 --- a/waku/waku_archive/driver/postgres_driver/postgres_driver.nim +++ b/waku/waku_archive/driver/postgres_driver/postgres_driver.nim @@ -21,10 +21,10 @@ type PostgresDriver* = ref object of ArchiveDriver connPool: PgAsyncPool proc dropTableQuery(): string = - "DROP TABLE messages" + "DROP TABLE message" proc createTableQuery(): string = - "CREATE TABLE IF NOT EXISTS messages (" & + "CREATE TABLE IF NOT EXISTS message (" & " pubsubTopic VARCHAR NOT NULL," & " contentTopic VARCHAR NOT NULL," & " payload VARCHAR," & @@ -37,7 +37,7 @@ proc createTableQuery(): string = proc insertRow(): string = # TODO: get the sql queries from a file - """INSERT INTO messages (id, storedAt, contentTopic, payload, pubsubTopic, + """INSERT INTO message (id, storedAt, contentTopic, payload, pubsubTopic, version, timestamp) VALUES ($1, $2, $3, $4, $5, $6, $7);""" const MaxNumConns = 5 #TODO: we may need to set that from app args (maybe?) @@ -142,11 +142,11 @@ proc toArchiveRow(r: Row): ArchiveDriverResult[ArchiveRow] = method getAllMessages*(s: PostgresDriver): Future[ArchiveDriverResult[seq[ArchiveRow]]] {.async.} = - ## Retrieve all messages from the store. + ## Retrieve all message from the store. let rowsRes = await s.connPool.query("""SELECT storedAt, contentTopic, payload, pubsubTopic, version, timestamp, - id FROM messages ORDER BY storedAt ASC""", + id FROM message ORDER BY storedAt ASC""", newSeq[string](0)) if rowsRes.isErr(): @@ -172,7 +172,7 @@ method getMessages*(s: PostgresDriver, ascendingOrder = true): Future[ArchiveDriverResult[seq[ArchiveRow]]] {.async.} = var query = """SELECT storedAt, contentTopic, payload, - pubsubTopic, version, timestamp, id FROM messages""" + pubsubTopic, version, timestamp, id FROM message""" var statements: seq[string] var args: seq[string] @@ -257,7 +257,7 @@ proc getInt(s: PostgresDriver, method getMessagesCount*(s: PostgresDriver): Future[ArchiveDriverResult[int64]] {.async.} = - let intRes = await s.getInt("SELECT COUNT(1) FROM messages") + let intRes = await s.getInt("SELECT COUNT(1) FROM message") if intRes.isErr(): return err("error in getMessagesCount: " & intRes.error) @@ -266,7 +266,7 @@ method getMessagesCount*(s: PostgresDriver): method getOldestMessageTimestamp*(s: PostgresDriver): Future[ArchiveDriverResult[Timestamp]] {.async.} = - let intRes = await s.getInt("SELECT MIN(storedAt) FROM messages") + let intRes = await s.getInt("SELECT MIN(storedAt) FROM message") if intRes.isErr(): return err("error in getOldestMessageTimestamp: " & intRes.error) @@ -275,7 +275,7 @@ method getOldestMessageTimestamp*(s: PostgresDriver): method getNewestMessageTimestamp*(s: PostgresDriver): Future[ArchiveDriverResult[Timestamp]] {.async.} = - let intRes = await s.getInt("SELECT MAX(storedAt) FROM messages") + let intRes = await s.getInt("SELECT MAX(storedAt) FROM message") if intRes.isErr(): return err("error in getNewestMessageTimestamp: " & intRes.error) @@ -287,7 +287,7 @@ method deleteMessagesOlderThanTimestamp*( Future[ArchiveDriverResult[void]] {.async.} = let execRes = await s.connPool.exec( - "DELETE FROM messages WHERE storedAt < " & $ts) + "DELETE FROM message WHERE storedAt < " & $ts) if execRes.isErr(): return err("error in deleteMessagesOlderThanTimestamp: " & execRes.error) @@ -299,9 +299,9 @@ method deleteOldestMessagesNotWithinLimit*( Future[ArchiveDriverResult[void]] {.async.} = let execRes = await s.connPool.exec( - """DELETE FROM messages WHERE id NOT IN + """DELETE FROM message WHERE id NOT IN ( - SELECT id FROM messages ORDER BY storedAt DESC LIMIT ? + SELECT id FROM message ORDER BY storedAt DESC LIMIT ? );""", @[$limit]) if execRes.isErr(): From a0033dff52b9ffd3756d1c84062536c7f0c43b5d Mon Sep 17 00:00:00 2001 From: Alvaro Revuelta Date: Fri, 6 Oct 2023 10:36:00 +0200 Subject: [PATCH 074/274] Revert "postgres_driver.nim: rename table's name from "messages" to "message" (#2110)" (#2115) This reverts commit 71cfbbca6fd02d298f647ec5afce116fa3d90f3e. --- .../postgres_driver/postgres_driver.nim | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/waku/waku_archive/driver/postgres_driver/postgres_driver.nim b/waku/waku_archive/driver/postgres_driver/postgres_driver.nim index c0a2289688..775b348778 100644 --- a/waku/waku_archive/driver/postgres_driver/postgres_driver.nim +++ b/waku/waku_archive/driver/postgres_driver/postgres_driver.nim @@ -21,10 +21,10 @@ type PostgresDriver* = ref object of ArchiveDriver connPool: PgAsyncPool proc dropTableQuery(): string = - "DROP TABLE message" + "DROP TABLE messages" proc createTableQuery(): string = - "CREATE TABLE IF NOT EXISTS message (" & + "CREATE TABLE IF NOT EXISTS messages (" & " pubsubTopic VARCHAR NOT NULL," & " contentTopic VARCHAR NOT NULL," & " payload VARCHAR," & @@ -37,7 +37,7 @@ proc createTableQuery(): string = proc insertRow(): string = # TODO: get the sql queries from a file - """INSERT INTO message (id, storedAt, contentTopic, payload, pubsubTopic, + """INSERT INTO messages (id, storedAt, contentTopic, payload, pubsubTopic, version, timestamp) VALUES ($1, $2, $3, $4, $5, $6, $7);""" const MaxNumConns = 5 #TODO: we may need to set that from app args (maybe?) @@ -142,11 +142,11 @@ proc toArchiveRow(r: Row): ArchiveDriverResult[ArchiveRow] = method getAllMessages*(s: PostgresDriver): Future[ArchiveDriverResult[seq[ArchiveRow]]] {.async.} = - ## Retrieve all message from the store. + ## Retrieve all messages from the store. let rowsRes = await s.connPool.query("""SELECT storedAt, contentTopic, payload, pubsubTopic, version, timestamp, - id FROM message ORDER BY storedAt ASC""", + id FROM messages ORDER BY storedAt ASC""", newSeq[string](0)) if rowsRes.isErr(): @@ -172,7 +172,7 @@ method getMessages*(s: PostgresDriver, ascendingOrder = true): Future[ArchiveDriverResult[seq[ArchiveRow]]] {.async.} = var query = """SELECT storedAt, contentTopic, payload, - pubsubTopic, version, timestamp, id FROM message""" + pubsubTopic, version, timestamp, id FROM messages""" var statements: seq[string] var args: seq[string] @@ -257,7 +257,7 @@ proc getInt(s: PostgresDriver, method getMessagesCount*(s: PostgresDriver): Future[ArchiveDriverResult[int64]] {.async.} = - let intRes = await s.getInt("SELECT COUNT(1) FROM message") + let intRes = await s.getInt("SELECT COUNT(1) FROM messages") if intRes.isErr(): return err("error in getMessagesCount: " & intRes.error) @@ -266,7 +266,7 @@ method getMessagesCount*(s: PostgresDriver): method getOldestMessageTimestamp*(s: PostgresDriver): Future[ArchiveDriverResult[Timestamp]] {.async.} = - let intRes = await s.getInt("SELECT MIN(storedAt) FROM message") + let intRes = await s.getInt("SELECT MIN(storedAt) FROM messages") if intRes.isErr(): return err("error in getOldestMessageTimestamp: " & intRes.error) @@ -275,7 +275,7 @@ method getOldestMessageTimestamp*(s: PostgresDriver): method getNewestMessageTimestamp*(s: PostgresDriver): Future[ArchiveDriverResult[Timestamp]] {.async.} = - let intRes = await s.getInt("SELECT MAX(storedAt) FROM message") + let intRes = await s.getInt("SELECT MAX(storedAt) FROM messages") if intRes.isErr(): return err("error in getNewestMessageTimestamp: " & intRes.error) @@ -287,7 +287,7 @@ method deleteMessagesOlderThanTimestamp*( Future[ArchiveDriverResult[void]] {.async.} = let execRes = await s.connPool.exec( - "DELETE FROM message WHERE storedAt < " & $ts) + "DELETE FROM messages WHERE storedAt < " & $ts) if execRes.isErr(): return err("error in deleteMessagesOlderThanTimestamp: " & execRes.error) @@ -299,9 +299,9 @@ method deleteOldestMessagesNotWithinLimit*( Future[ArchiveDriverResult[void]] {.async.} = let execRes = await s.connPool.exec( - """DELETE FROM message WHERE id NOT IN + """DELETE FROM messages WHERE id NOT IN ( - SELECT id FROM message ORDER BY storedAt DESC LIMIT ? + SELECT id FROM messages ORDER BY storedAt DESC LIMIT ? );""", @[$limit]) if execRes.isErr(): From 06bc433a8003eda324bdca1e0978d528b9df33ca Mon Sep 17 00:00:00 2001 From: Abhimanyu Date: Mon, 9 Oct 2023 13:06:40 +0200 Subject: [PATCH 075/274] fix: sqlite limited delete query bug (#2111) --- waku/waku_archive/driver/sqlite_driver/queries.nim | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/waku/waku_archive/driver/sqlite_driver/queries.nim b/waku/waku_archive/driver/sqlite_driver/queries.nim index 2e218d97d5..27ab4de618 100644 --- a/waku/waku_archive/driver/sqlite_driver/queries.nim +++ b/waku/waku_archive/driver/sqlite_driver/queries.nim @@ -181,9 +181,9 @@ proc deleteMessagesOlderThanTimestamp*(db: SqliteDatabase, ts: int64): ## Delete oldest messages not within limit proc deleteOldestMessagesNotWithinLimitQuery(table: string, limit: int): SqlQueryStr = - "DELETE FROM " & table & " WHERE id NOT IN (" & - " SELECT id FROM " & table & - " ORDER BY storedAt DESC" & + "DELETE FROM " & table & " WHERE (storedAt, id, pubsubTopic) NOT IN (" & + " SELECT storedAt, id, pubsubTopic FROM " & table & + " ORDER BY storedAt DESC, id DESC" & " LIMIT " & $limit & ");" From 2c5eb427d7a15cafbee50fd7b97a39be6e6347ce Mon Sep 17 00:00:00 2001 From: Sergei Tikhomirov Date: Mon, 9 Oct 2023 16:38:23 +0200 Subject: [PATCH 076/274] fix: return erring response if lightpush request is invalid (#2083) fixes #1641 --- tests/test_waku_lightpush.nim | 39 ++++++++++++++++- waku/waku_lightpush/protocol.nim | 75 ++++++++++++++++---------------- 2 files changed, 74 insertions(+), 40 deletions(-) diff --git a/tests/test_waku_lightpush.nim b/tests/test_waku_lightpush.nim index 9aa8df52f9..de125ac974 100644 --- a/tests/test_waku_lightpush.nim +++ b/tests/test_waku_lightpush.nim @@ -1,6 +1,8 @@ {.used.} import + std/options, + std/strscans, testutils/unittests, chronicles, chronos, @@ -10,10 +12,11 @@ import ../../waku/waku_core, ../../waku/waku_lightpush, ../../waku/waku_lightpush/client, + ../../waku/waku_lightpush/protocol_metrics, + ../../waku/waku_lightpush/rpc, ./testlib/common, ./testlib/wakucore - proc newTestWakuLightpushNode(switch: Switch, handler: PushMessageHandler): Future[WakuLightPush] {.async.} = let peerManager = PeerManager.new(switch) @@ -115,4 +118,36 @@ suite "Waku Lightpush": requestError == error ## Cleanup - await allFutures(clientSwitch.stop(), serverSwitch.stop()) \ No newline at end of file + await allFutures(clientSwitch.stop(), serverSwitch.stop()) + + asyncTest "incorrectly encoded request should return an erring response": + ## Setup + let + serverSwitch = newTestSwitch() + handler = proc(peer: PeerId, pubsubTopic: PubsubTopic, message: WakuMessage): Future[WakuLightPushResult[void]] {.async.} = + ## this handler will never be called: request must fail earlier + return ok() + server = await newTestWakuLightpushNode(serverSwitch, handler) + + ## Given + let + fakeBuffer = @[byte(42)] + fakePeerId = PeerId.init(PrivateKey.random(ECDSA, (newRng())[]).tryGet()).tryGet() + + ## When + let + pushRpcResponse = await server.handleRequest(fakePeerId, fakeBuffer) + requestId = pushRpcResponse.requestId + + ## Then + check: + requestId == "" + pushRpcResponse.response.isSome() + + let resp = pushRpcResponse.response.get() + + check: + resp.isSuccess == false + resp.info.isSome() + ## the error message should start with decodeRpcFailure + scanf(resp.info.get(), decodeRpcFailure) diff --git a/waku/waku_lightpush/protocol.nim b/waku/waku_lightpush/protocol.nim index 65a7b7685a..615c2fb69c 100644 --- a/waku/waku_lightpush/protocol.nim +++ b/waku/waku_lightpush/protocol.nim @@ -35,47 +35,46 @@ type peerManager*: PeerManager pushHandler*: PushMessageHandler -proc initProtocolHandler*(wl: WakuLightPush) = - proc handle(conn: Connection, proto: string) {.async, gcsafe, closure.} = - let buffer = await conn.readLp(MaxRpcSize.int) - let reqDecodeRes = PushRPC.decode(buffer) - if reqDecodeRes.isErr(): - error "failed to decode rpc" - waku_lightpush_errors.inc(labelValues = [decodeRpcFailure]) - return - - let req = reqDecodeRes.get() - if req.request.isNone(): - error "invalid lightpush rpc received", error=emptyRequestBodyFailure - waku_lightpush_errors.inc(labelValues = [emptyRequestBodyFailure]) - return +proc handleRequest*(wl: WakuLightPush, peerId: PeerId, buffer: seq[byte]): Future[PushRPC] {.async.} = + let reqDecodeRes = PushRPC.decode(buffer) + var + isSuccess = false + pushResponseInfo = "" + requestId = "" + + if reqDecodeRes.isErr(): + pushResponseInfo = decodeRpcFailure & ": " & $reqDecodeRes.error + elif reqDecodeRes.get().request.isNone(): + pushResponseInfo = emptyRequestBodyFailure + else: + let pushRpcRequest = reqDecodeRes.get(); + + requestId = pushRpcRequest.requestId - waku_lightpush_messages.inc(labelValues = ["PushRequest"]) let - pubSubTopic = req.request.get().pubSubTopic - message = req.request.get().message - debug "push request", peerId=conn.peerId, requestId=req.requestId, pubsubTopic=pubsubTopic - - var response: PushResponse - var handleRes: WakuLightPushResult[void] - try: - handleRes = await wl.pushHandler(conn.peerId, pubsubTopic, message) - except Exception: - response = PushResponse(is_success: false, info: some(getCurrentExceptionMsg())) - waku_lightpush_errors.inc(labelValues = [messagePushFailure]) - error "pushed message handling failed", error= getCurrentExceptionMsg() - - - if handleRes.isOk(): - response = PushResponse(is_success: true, info: some("OK")) - else: - response = PushResponse(is_success: false, info: some(handleRes.error)) - waku_lightpush_errors.inc(labelValues = [messagePushFailure]) - error "pushed message handling failed", error=handleRes.error - - let rpc = PushRPC(requestId: req.requestId, response: some(response)) - await conn.writeLp(rpc.encode().buffer) + request = pushRpcRequest.request + pubSubTopic = request.get().pubSubTopic + message = request.get().message + waku_lightpush_messages.inc(labelValues = ["PushRequest"]) + debug "push request", peerId=peerId, requestId=requestId, pubsubTopic=pubsubTopic + + let handleRes = await wl.pushHandler(peerId, pubsubTopic, message) + isSuccess = handleRes.isOk() + pushResponseInfo = (if isSuccess: "OK" else: handleRes.error) + + if not isSuccess: + waku_lightpush_errors.inc(labelValues = [pushResponseInfo]) + error "failed to push message", error=pushResponseInfo + let response = PushResponse(isSuccess: isSuccess, info: some(pushResponseInfo)) + let rpc = PushRPC(requestId: requestId, response: some(response)) + return rpc + +proc initProtocolHandler*(wl: WakuLightPush) = + proc handle(conn: Connection, proto: string) {.async.} = + let buffer = await conn.readLp(MaxRpcSize.int) + let rpc = await handleRequest(wl, conn.peerId, buffer) + await conn.writeLp(rpc.encode().buffer) wl.handler = handle wl.codec = WakuLightPushCodec From 25d6e52e3804d15f9b61bc4cc6dd448540c072a1 Mon Sep 17 00:00:00 2001 From: Abhimanyu Date: Tue, 10 Oct 2023 11:59:09 +0200 Subject: [PATCH 077/274] chore: added size based retention policy (#2098) * chore: added size based retention policy * chore: post review code - size based retention policy * chore: review integrated, size retention updated, vacuuming in capacity retention * chore: typo fixed * chore: review integrated * chore: external config updated to support newly added retention policy --- apps/wakunode2/external_config.nim | 2 +- docs/operators/how-to/configure-store.md | 3 +- tests/waku_archive/test_retention_policy.nim | 74 ++++++++++++++-- waku/common/databases/db_sqlite.nim | 3 +- waku/waku_archive/driver.nim | 10 +++ waku/waku_archive/driver/builder.nim | 1 + .../driver/queue_driver/queue_driver.nim | 14 ++- .../driver/sqlite_driver/sqlite_driver.nim | 13 +++ .../waku_archive/retention_policy/builder.nim | 37 +++++++- .../retention_policy_capacity.nim | 6 ++ .../retention_policy_size.nim | 85 +++++++++++++++++++ 11 files changed, 238 insertions(+), 10 deletions(-) create mode 100644 waku/waku_archive/retention_policy/retention_policy_size.nim diff --git a/apps/wakunode2/external_config.nim b/apps/wakunode2/external_config.nim index 3c604dafe1..ac0c5cd309 100644 --- a/apps/wakunode2/external_config.nim +++ b/apps/wakunode2/external_config.nim @@ -223,7 +223,7 @@ type name: "storenode" }: string storeMessageRetentionPolicy* {. - desc: "Message store retention policy. Time retention policy: 'time:'. Capacity retention policy: 'capacity:'. Set to 'none' to disable.", + desc: "Message store retention policy. Time retention policy: 'time:'. Capacity retention policy: 'capacity:'. Size retention policy: 'size:'. Set to 'none' to disable.", defaultValue: "time:" & $2.days.seconds, name: "store-message-retention-policy" }: string diff --git a/docs/operators/how-to/configure-store.md b/docs/operators/how-to/configure-store.md index c00140d85c..d340ce9057 100644 --- a/docs/operators/how-to/configure-store.md +++ b/docs/operators/how-to/configure-store.md @@ -31,9 +31,10 @@ If the waku store node is enabled (the `--store` option is set to `true`) the no There is a set of configuration options to customize the waku store protocol's message store. These are the most relevant: -* `--store-message-retention-policy`: This option controls the retention policy i.e., how long certain messages will be persisted. Two different retention policies are supported: +* `--store-message-retention-policy`: This option controls the retention policy i.e., how long certain messages will be persisted. Three different retention policies are supported: + The time retention policy,`time:` (e.g., `time:14400`) + The capacity retention policy,`capacity:` (e.g, `capacity:25000`) + + The size retention policy,`size:` (e.g, `size:25Gb`) + To disable the retention policy, explicitly, set this option to to `""`, an empty string. * `--store-message-db-url`: The message store database url option controls the message storage engine. This option follows the [_SQLAlchemy_ database URL format](https://docs.sqlalchemy.org/en/14/core/engines.html#database-urls). diff --git a/tests/waku_archive/test_retention_policy.nim b/tests/waku_archive/test_retention_policy.nim index e08455d275..0927a15e80 100644 --- a/tests/waku_archive/test_retention_policy.nim +++ b/tests/waku_archive/test_retention_policy.nim @@ -1,7 +1,7 @@ {.used.} import - std/sequtils, + std/[sequtils,times], stew/results, testutils/unittests, chronos @@ -12,6 +12,7 @@ import ../../../waku/waku_archive/driver/sqlite_driver, ../../../waku/waku_archive/retention_policy, ../../../waku/waku_archive/retention_policy/retention_policy_capacity, + ../../../waku/waku_archive/retention_policy/retention_policy_size, ../testlib/common, ../testlib/wakucore @@ -30,18 +31,21 @@ suite "Waku Archive - Retention policy": ## Given let capacity = 100 - excess = 65 + excess = 60 let driver = newTestArchiveDriver() let retentionPolicy: RetentionPolicy = CapacityRetentionPolicy.init(capacity=capacity) + var putFutures = newSeq[Future[ArchiveDriverResult[void]]]() ## When for i in 1..capacity+excess: let msg = fakeWakuMessage(payload= @[byte i], contentTopic=DefaultContentTopic, ts=Timestamp(i)) + putFutures.add(driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)) + + discard waitFor allFinished(putFutures) - require (waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() - require (waitFor retentionPolicy.execute(driver)).isOk() + require (waitFor retentionPolicy.execute(driver)).isOk() ## Then let numMessages = (waitFor driver.getMessagesCount()).tryGet() @@ -49,7 +53,66 @@ suite "Waku Archive - Retention policy": # Expected number of messages is 120 because # (capacity = 100) + (half of the overflow window = 15) + (5 messages added after after the last delete) # the window size changes when changing `const maxStoreOverflow = 1.3 in sqlite_store - numMessages == 120 + numMessages == 115 + + ## Cleanup + (waitFor driver.close()).expect("driver to close") + + test "size retention policy - windowed message deletion": + ## Given + let + # in megabytes + sizeLimit:float = 0.05 + excess = 325 + + let driver = newTestArchiveDriver() + + let retentionPolicy: RetentionPolicy = SizeRetentionPolicy.init(size=sizeLimit) + var putFutures = newSeq[Future[ArchiveDriverResult[void]]]() + + # variables to check the db size + var pageSize = (waitFor driver.getPagesSize()).tryGet() + var pageCount = (waitFor driver.getPagesCount()).tryGet() + var sizeDB = float(pageCount * pageSize) / (1024.0 * 1024.0) + + # make sure that the db is empty to before test begins + let storedMsg = (waitFor driver.getAllMessages()).tryGet() + # if there are messages in db, empty them + if storedMsg.len > 0: + let now = getNanosecondTime(getTime().toUnixFloat()) + require (waitFor driver.deleteMessagesOlderThanTimestamp(ts=now)).isOk() + require (waitFor driver.performVacuum()).isOk() + + ## When + + # create a number of messages so that the size of the DB overshoots + for i in 1..excess: + let msg = fakeWakuMessage(payload= @[byte i], contentTopic=DefaultContentTopic, ts=Timestamp(i)) + putFutures.add(driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)) + + # waitFor is used to synchronously wait for the futures to complete. + discard waitFor allFinished(putFutures) + + ## Then + # calculate the current database size + pageSize = (waitFor driver.getPagesSize()).tryGet() + pageCount = (waitFor driver.getPagesCount()).tryGet() + sizeDB = float(pageCount * pageSize) / (1024.0 * 1024.0) + + # execute policy provided the current db size oveflows + require (sizeDB >= sizeLimit) + require (waitFor retentionPolicy.execute(driver)).isOk() + + # update the current db size + pageSize = (waitFor driver.getPagesSize()).tryGet() + pageCount = (waitFor driver.getPagesCount()).tryGet() + sizeDB = float(pageCount * pageSize) / (1024.0 * 1024.0) + + check: + # size of the database is used to check if the storage limit has been preserved + # check the current database size with the limitSize provided by the user + # it should be lower + sizeDB <= sizeLimit ## Cleanup (waitFor driver.close()).expect("driver to close") @@ -90,3 +153,4 @@ suite "Waku Archive - Retention policy": ## Cleanup (waitFor driver.close()).expect("driver to close") + diff --git a/waku/common/databases/db_sqlite.nim b/waku/common/databases/db_sqlite.nim index 48eeaa361f..837cf3ab86 100644 --- a/waku/common/databases/db_sqlite.nim +++ b/waku/common/databases/db_sqlite.nim @@ -484,4 +484,5 @@ proc performSqliteVacuum*(db: SqliteDatabase): DatabaseResult[void] = if resVacuum.isErr(): return err("failed to execute vacuum: " & resVacuum.error) - debug "finished sqlite database vacuuming" \ No newline at end of file + debug "finished sqlite database vacuuming" + ok() diff --git a/waku/waku_archive/driver.nim b/waku/waku_archive/driver.nim index c3f2accd16..64c6b3318a 100644 --- a/waku/waku_archive/driver.nim +++ b/waku/waku_archive/driver.nim @@ -45,6 +45,15 @@ method getMessages*(driver: ArchiveDriver, method getMessagesCount*(driver: ArchiveDriver): Future[ArchiveDriverResult[int64]] {.base, async.} = discard +method getPagesCount*(driver: ArchiveDriver): + Future[ArchiveDriverResult[int64]] {.base, async.} = discard + +method getPagesSize*(driver: ArchiveDriver): + Future[ArchiveDriverResult[int64]] {.base, async.} = discard + +method performVacuum*(driver: ArchiveDriver): + Future[ArchiveDriverResult[void]] {.base, async.} = discard + method getOldestMessageTimestamp*(driver: ArchiveDriver): Future[ArchiveDriverResult[Timestamp]] {.base, async.} = discard @@ -61,3 +70,4 @@ method deleteOldestMessagesNotWithinLimit*(driver: ArchiveDriver, method close*(driver: ArchiveDriver): Future[ArchiveDriverResult[void]] {.base, async.} = discard + diff --git a/waku/waku_archive/driver/builder.nim b/waku/waku_archive/driver/builder.nim index 2db18515bc..7fdd05baa0 100644 --- a/waku/waku_archive/driver/builder.nim +++ b/waku/waku_archive/driver/builder.nim @@ -104,3 +104,4 @@ proc new*(T: type ArchiveDriver, debug "setting up in-memory waku archive driver" let driver = QueueDriver.new() # Defaults to a capacity of 25.000 messages return ok(driver) + diff --git a/waku/waku_archive/driver/queue_driver/queue_driver.nim b/waku/waku_archive/driver/queue_driver/queue_driver.nim index 9a8b54f852..cce7d895bf 100644 --- a/waku/waku_archive/driver/queue_driver/queue_driver.nim +++ b/waku/waku_archive/driver/queue_driver/queue_driver.nim @@ -280,6 +280,18 @@ method getMessagesCount*(driver: QueueDriver): Future[ArchiveDriverResult[int64]] {.async} = return ok(int64(driver.len())) +method getPagesCount*(driver: QueueDriver): + Future[ArchiveDriverResult[int64]] {.async} = + return ok(int64(driver.len())) + +method getPagesSize*(driver: QueueDriver): + Future[ArchiveDriverResult[int64]] {.async} = + return ok(int64(driver.len())) + +method performVacuum*(driver: QueueDriver): + Future[ArchiveDriverResult[void]] {.async.} = + return err("interface method not implemented") + method getOldestMessageTimestamp*(driver: QueueDriver): Future[ArchiveDriverResult[Timestamp]] {.async.} = return driver.first().map(proc(msg: IndexedWakuMessage): Timestamp = msg.index.receiverTime) @@ -302,4 +314,4 @@ method deleteOldestMessagesNotWithinLimit*(driver: QueueDriver, method close*(driver: QueueDriver): Future[ArchiveDriverResult[void]] {.async.} = - return ok() \ No newline at end of file + return ok() diff --git a/waku/waku_archive/driver/sqlite_driver/sqlite_driver.nim b/waku/waku_archive/driver/sqlite_driver/sqlite_driver.nim index 8746838a97..53da379b1a 100644 --- a/waku/waku_archive/driver/sqlite_driver/sqlite_driver.nim +++ b/waku/waku_archive/driver/sqlite_driver/sqlite_driver.nim @@ -109,6 +109,18 @@ method getMessagesCount*(s: SqliteDriver): Future[ArchiveDriverResult[int64]] {.async.} = return s.db.getMessageCount() +method getPagesCount*(s: SqliteDriver): + Future[ArchiveDriverResult[int64]] {.async.} = + return s.db.getPageCount() + +method getPagesSize*(s: SqliteDriver): + Future[ArchiveDriverResult[int64]] {.async.} = + return s.db.getPageSize() + +method performVacuum*(s: SqliteDriver): + Future[ArchiveDriverResult[void]] {.async.} = + return s.db.performSqliteVacuum() + method getOldestMessageTimestamp*(s: SqliteDriver): Future[ArchiveDriverResult[Timestamp]] {.async.} = return s.db.selectOldestReceiverTimestamp() @@ -135,3 +147,4 @@ method close*(s: SqliteDriver): # Close connection s.db.close() return ok() + diff --git a/waku/waku_archive/retention_policy/builder.nim b/waku/waku_archive/retention_policy/builder.nim index 3cb84d7974..2c4b3cf12a 100644 --- a/waku/waku_archive/retention_policy/builder.nim +++ b/waku/waku_archive/retention_policy/builder.nim @@ -11,7 +11,8 @@ import import ../retention_policy, ./retention_policy_time, - ./retention_policy_capacity + ./retention_policy_capacity, + ./retention_policy_size proc new*(T: type RetentionPolicy, retPolicy: string): @@ -51,5 +52,39 @@ proc new*(T: type RetentionPolicy, let retPolicy: RetentionPolicy = CapacityRetentionPolicy.init(retentionCapacity) return ok(some(retPolicy)) + elif policy == "size": + var retentionSize: string + retentionSize = policyArgs + + # captures the size unit such as Gb or Mb + let sizeUnit = retentionSize.substr(retentionSize.len-2) + # captures the string type number data of the size provided + let sizeQuantityStr = retentionSize.substr(0,retentionSize.len-3) + # to hold the numeric value data of size + var sizeQuantity: float + + if sizeUnit in ["gb", "Gb", "GB", "gB"]: + # parse the actual value into integer type var + try: + sizeQuantity = parseFloat(sizeQuantityStr) + except ValueError: + return err("invalid size retention policy argument: " & getCurrentExceptionMsg()) + # Gb data is converted into Mb for uniform processing + sizeQuantity = sizeQuantity * 1024 + elif sizeUnit in ["mb", "Mb", "MB", "mB"]: + try: + sizeQuantity = parseFloat(sizeQuantityStr) + except ValueError: + return err("invalid size retention policy argument") + else: + return err ("""invalid size retention value unit: expected "Mb" or "Gb" but got """ & sizeUnit ) + + if sizeQuantity <= 0: + return err("invalid size retention policy argument: a non-zero value is required") + + let retPolicy: RetentionPolicy = SizeRetentionPolicy.init(sizeQuantity) + return ok(some(retPolicy)) + else: return err("unknown retention policy") + diff --git a/waku/waku_archive/retention_policy/retention_policy_capacity.nim b/waku/waku_archive/retention_policy/retention_policy_capacity.nim index 72b243301e..73430c597f 100644 --- a/waku/waku_archive/retention_policy/retention_policy_capacity.nim +++ b/waku/waku_archive/retention_policy/retention_policy_capacity.nim @@ -75,4 +75,10 @@ method execute*(p: CapacityRetentionPolicy, if res.isErr(): return err("deleting oldest messages failed: " & res.error) + # vacuum to get the deleted pages defragments to save storage space + # this will resize the database size + let resVaccum = await driver.performVacuum() + if resVaccum.isErr(): + return err("vacuumming failed: " & resVaccum.error) + return ok() diff --git a/waku/waku_archive/retention_policy/retention_policy_size.nim b/waku/waku_archive/retention_policy/retention_policy_size.nim new file mode 100644 index 0000000000..30c5858c1f --- /dev/null +++ b/waku/waku_archive/retention_policy/retention_policy_size.nim @@ -0,0 +1,85 @@ +when (NimMajor, NimMinor) < (1, 4): + {.push raises: [Defect].} +else: + {.push raises: [].} + +import + std/times, + stew/results, + chronicles, + chronos, + os +import + ../driver, + ../retention_policy + +logScope: + topics = "waku archive retention_policy" + +# default size is 30 Gb +const DefaultRetentionSize*: float = 30_720 + +# to remove 20% of the outdated data from database +const DeleteLimit = 0.80 + +type + # SizeRetentionPolicy implements auto delete as follows: + # - sizeLimit is the size in megabytes (Mbs) the database can grow upto + # to reduce the size of the databases, remove the rows/number-of-messages + # DeleteLimit is the total number of messages to delete beyond this limit + # when the database size crosses the sizeLimit, then only a fraction of messages are kept, + # rest of the outdated message are deleted using deleteOldestMessagesNotWithinLimit(), + # upon deletion process the fragmented space is retrieve back using Vacuum process. + SizeRetentionPolicy* = ref object of RetentionPolicy + sizeLimit: float + +proc init*(T: type SizeRetentionPolicy, size=DefaultRetentionSize): T = + SizeRetentionPolicy( + sizeLimit: size + ) + +method execute*(p: SizeRetentionPolicy, + driver: ArchiveDriver): + Future[RetentionPolicyResult[void]] {.async.} = + ## when db size overshoots the database limit, shread 20% of outdated messages + + # get page size of database + let pageSizeRes = await driver.getPagesSize() + let pageSize: int64 = int64(pageSizeRes.valueOr(0) div 1024) + + if pageSize == 0: + return err("failed to get Page size: " & pageSizeRes.error) + + # keep deleting until the current db size falls within size limit + while true: + # to get the size of the database, pageCount and PageSize is required + # get page count in "messages" database + let pageCount = (await driver.getPagesCount()).valueOr: + return err("failed to get Pages count: " & $error) + + # database size in megabytes (Mb) + let totalSizeOfDB: float = float(pageSize * pageCount)/1024.0 + + if totalSizeOfDB < p.sizeLimit: + break + + # to shread/delete messsges, get the total row/message count + let numMessagesRes = await driver.getMessagesCount() + if numMessagesRes.isErr(): + return err("failed to get messages count: " & numMessagesRes.error) + let numMessages = numMessagesRes.value + + # 80% of the total messages are to be kept, delete others + let pageDeleteWindow = int(float(numMessages) * DeleteLimit) + + let res = await driver.deleteOldestMessagesNotWithinLimit(limit=pageDeleteWindow) + if res.isErr(): + return err("deleting oldest messages failed: " & res.error) + + # vacuum to get the deleted pages defragments to save storage space + # this will resize the database size + let resVaccum = await driver.performVacuum() + if resVaccum.isErr(): + return err("vacuumming failed: " & resVaccum.error) + + return ok() From d5c3ade5e21eafe17ca1c3b6e43e0563df923beb Mon Sep 17 00:00:00 2001 From: Alvaro Revuelta Date: Wed, 11 Oct 2023 08:58:45 +0200 Subject: [PATCH 078/274] feat: add new metadata protocol (#2062) --- apps/wakunode2/external_config.nim | 5 ++ apps/wakunode2/internal_config.nim | 11 +-- tests/test_peer_manager.nim | 44 ++++++++++ tests/test_waku_metadata.nim | 50 ++++++++++++ tests/test_waku_protobufs.nim | 45 +++++++++++ tests/testlib/wakunode.nim | 10 ++- waku/node/config.nim | 3 + waku/node/peer_manager/peer_manager.nim | 52 +++++++++++- waku/node/waku_node.nim | 12 ++- waku/waku_metadata.nim | 10 +++ waku/waku_metadata/protocol.nim | 103 ++++++++++++++++++++++++ waku/waku_metadata/rpc.nim | 76 +++++++++++++++++ 12 files changed, 408 insertions(+), 13 deletions(-) create mode 100644 tests/test_waku_metadata.nim create mode 100644 tests/test_waku_protobufs.nim create mode 100644 waku/waku_metadata.nim create mode 100644 waku/waku_metadata/protocol.nim create mode 100644 waku/waku_metadata/rpc.nim diff --git a/apps/wakunode2/external_config.nim b/apps/wakunode2/external_config.nim index ac0c5cd309..0ec5c1fb03 100644 --- a/apps/wakunode2/external_config.nim +++ b/apps/wakunode2/external_config.nim @@ -54,6 +54,11 @@ type name: "log-format" .}: logging.LogFormat ## General node config + clusterId* {. + desc: "Cluster id that the node is running in. Node in a different cluster id is disconnected." + defaultValue: 0 + name: "cluster-id" }: uint32 + agentString* {. defaultValue: "nwaku", desc: "Node agent string which is used as identifier in network" diff --git a/apps/wakunode2/internal_config.nim b/apps/wakunode2/internal_config.nim index a5de21eee0..06fc659bbd 100644 --- a/apps/wakunode2/internal_config.nim +++ b/apps/wakunode2/internal_config.nim @@ -22,12 +22,12 @@ proc validateExtMultiAddrs*(vals: seq[string]): return ok(multiaddrs) proc dnsResolve*(domain: string, conf: WakuNodeConf): Future[Result[string, string]] {.async} = - + # Use conf's DNS servers var nameServers: seq[TransportAddress] for ip in conf.dnsAddrsNameServers: nameServers.add(initTAddress(ip, Port(53))) # Assume all servers use port 53 - + let dnsResolver = DnsResolver.new(nameServers) # Resolve domain IP @@ -93,18 +93,19 @@ proc networkConfiguration*(conf: WakuNodeConf, if dns4DomainName.isSome() and extIp.isNone(): try: let dnsRes = waitFor dnsResolve(conf.dns4DomainName, conf) - + if dnsRes.isErr(): return err($dnsRes.error) # Pass error down the stack - + extIp = some(ValidIpAddress.init(dnsRes.get())) except CatchableError: return err("Could not update extIp to resolved DNS IP: " & getCurrentExceptionMsg()) - + # Wrap in none because NetConfig does not have a default constructor # TODO: We could change bindIp in NetConfig to be something less restrictive # than ValidIpAddress, which doesn't allow default construction let netConfigRes = NetConfig.init( + clusterId = conf.clusterId, bindIp = conf.listenAddress, bindPort = Port(uint16(conf.tcpPort) + conf.portsShift), extIp = extIp, diff --git a/tests/test_peer_manager.nim b/tests/test_peer_manager.nim index cbd6d7ac2d..b3ef488d82 100644 --- a/tests/test_peer_manager.nim +++ b/tests/test_peer_manager.nim @@ -26,6 +26,7 @@ import ../../waku/waku_filter, ../../waku/waku_lightpush, ../../waku/waku_peer_exchange, + ../../waku/waku_metadata, ./testlib/common, ./testlib/testutils, ./testlib/wakucore, @@ -38,6 +39,8 @@ procSuite "Peer Manager": await allFutures(nodes.mapIt(it.start())) let connOk = await nodes[0].peerManager.connectRelay(nodes[1].peerInfo.toRemotePeerInfo()) + await sleepAsync(chronos.milliseconds(500)) + check: connOk == true nodes[0].peerManager.peerStore.peers().anyIt(it.peerId == nodes[1].peerInfo.peerId) @@ -53,6 +56,8 @@ procSuite "Peer Manager": # Dial node2 from node1 let conn = await nodes[0].peerManager.dialPeer(nodes[1].peerInfo.toRemotePeerInfo(), WakuLegacyFilterCodec) + await sleepAsync(chronos.milliseconds(500)) + # Check connection check: conn.isSome() @@ -145,6 +150,7 @@ procSuite "Peer Manager": let nonExistentPeer = nonExistentPeerRes.value require: (await nodes[0].peerManager.connectRelay(nonExistentPeer)) == false + await sleepAsync(chronos.milliseconds(500)) check: # Cannot connect to node2 @@ -153,6 +159,8 @@ procSuite "Peer Manager": # Successful connection require: (await nodes[0].peerManager.connectRelay(nodes[1].peerInfo.toRemotePeerInfo())) == true + await sleepAsync(chronos.milliseconds(500)) + check: # Currently connected to node2 nodes[0].peerManager.peerStore.connectedness(nodes[1].peerInfo.peerId) == Connected @@ -229,6 +237,8 @@ procSuite "Peer Manager": require: (await node1.peerManager.connectRelay(peerInfo2.toRemotePeerInfo())) == true + await sleepAsync(chronos.milliseconds(500)) + check: # Currently connected to node2 node1.peerManager.peerStore.peers().len == 1 @@ -257,6 +267,36 @@ procSuite "Peer Manager": await allFutures([node1.stop(), node2.stop(), node3.stop()]) + asyncTest "Peer manager drops conections to peers on different networks": + let clusterId1 = 1.uint32 + let clusterId2 = 2.uint32 + + let + # different network + node1 = newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0), clusterId = clusterId1) + + # same network + node2 = newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0), clusterId = clusterId2) + node3 = newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0), clusterId = clusterId2) + + # Start nodes + await allFutures([node1.start(), node2.start(), node3.start()]) + + # 1->2 (fails) + let conn1 = await node1.peerManager.dialPeer(node2.switch.peerInfo.toRemotePeerInfo(), WakuMetadataCodec) + + # 1->3 (fails) + let conn2 = await node1.peerManager.dialPeer(node3.switch.peerInfo.toRemotePeerInfo(), WakuMetadataCodec) + + # 2->3 (succeeds) + let conn3 = await node2.peerManager.dialPeer(node3.switch.peerInfo.toRemotePeerInfo(), WakuMetadataCodec) + + check: + conn1.isNone + conn2.isNone + conn3.isSome + + # TODO: nwaku/issues/1377 xasyncTest "Peer manager support multiple protocol IDs when reconnecting to peers": let @@ -370,6 +410,8 @@ procSuite "Peer Manager": (await nodes[2].peerManager.connectRelay(peerInfos[0])) == true (await nodes[3].peerManager.connectRelay(peerInfos[0])) == true + await sleepAsync(chronos.milliseconds(500)) + check: # Peerstore track all three peers nodes[0].peerManager.peerStore.peers().len == 3 @@ -749,6 +791,7 @@ procSuite "Peer Manager": # 2 in connections discard await nodes[1].peerManager.connectRelay(pInfos[0]) discard await nodes[2].peerManager.connectRelay(pInfos[0]) + await sleepAsync(chronos.milliseconds(500)) # but one is pruned check nodes[0].peerManager.switch.connManager.getConnections().len == 1 @@ -756,6 +799,7 @@ procSuite "Peer Manager": # 2 out connections discard await nodes[0].peerManager.connectRelay(pInfos[3]) discard await nodes[0].peerManager.connectRelay(pInfos[4]) + await sleepAsync(chronos.milliseconds(500)) # they are also prunned check nodes[0].peerManager.switch.connManager.getConnections().len == 1 diff --git a/tests/test_waku_metadata.nim b/tests/test_waku_metadata.nim new file mode 100644 index 0000000000..687ef73444 --- /dev/null +++ b/tests/test_waku_metadata.nim @@ -0,0 +1,50 @@ +{.used.} + +import + std/[options, sequtils, tables], + testutils/unittests, + chronos, + chronicles, + stew/shims/net, + libp2p/switch, + libp2p/peerId, + libp2p/crypto/crypto, + libp2p/multistream, + libp2p/muxers/muxer, + eth/keys, + eth/p2p/discoveryv5/enr +import + ../../waku/waku_node, + ../../waku/node/peer_manager, + ../../waku/waku_discv5, + ../../waku/waku_metadata, + ./testlib/wakucore, + ./testlib/wakunode + + +procSuite "Waku Metadata Protocol": + + # TODO: Add tests with shards when ready + asyncTest "request() returns the supported metadata of the peer": + let clusterId = 10.uint32 + let + node1 = newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0), clusterId = clusterId) + node2 = newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0), clusterId = clusterId) + + # Start nodes + await allFutures([node1.start(), node2.start()]) + + # Create connection + let connOpt = await node2.peerManager.dialPeer(node1.switch.peerInfo.toRemotePeerInfo(), WakuMetadataCodec) + require: + connOpt.isSome + + # Request metadata + let response1 = await node2.wakuMetadata.request(connOpt.get()) + + # Check the response or dont even continue + require: + response1.isOk + + check: + response1.get().clusterId.get() == clusterId diff --git a/tests/test_waku_protobufs.nim b/tests/test_waku_protobufs.nim new file mode 100644 index 0000000000..b06eee847e --- /dev/null +++ b/tests/test_waku_protobufs.nim @@ -0,0 +1,45 @@ +{.used.} + +import + std/[options, sequtils, tables], + testutils/unittests, + chronos, + chronicles +import + ../../waku/waku_metadata, + ../../waku/waku_metadata/rpc, + ./testlib/wakucore, + ./testlib/wakunode + + +procSuite "Waku Protobufs": + # TODO: Missing test coverage in many encode/decode protobuf functions + + test "WakuMetadataResponse": + let res = WakuMetadataResponse( + clusterId: some(7), + shards: @[10, 23, 33], + ) + + let buffer = res.encode() + + let decodedBuff = WakuMetadataResponse.decode(buffer.buffer) + check: + decodedBuff.isOk() + decodedBuff.get().clusterId.get() == res.clusterId.get() + decodedBuff.get().shards == res.shards + + test "WakuMetadataRequest": + let req = WakuMetadataRequest( + clusterId: some(5), + shards: @[100, 2, 0], + ) + + let buffer = req.encode() + + let decodedBuff = WakuMetadataRequest.decode(buffer.buffer) + check: + decodedBuff.isOk() + decodedBuff.get().clusterId.get() == req.clusterId.get() + decodedBuff.get().shards == req.shards + diff --git a/tests/testlib/wakunode.nim b/tests/testlib/wakunode.nim index 5920d3fcad..4e3b3cf7e4 100644 --- a/tests/testlib/wakunode.nim +++ b/tests/testlib/wakunode.nim @@ -54,20 +54,21 @@ proc newTestWakuNode*(nodeKey: crypto.PrivateKey, dns4DomainName = none(string), discv5UdpPort = none(Port), agentString = none(string), + clusterId: uint32 = 0.uint32, peerStoreCapacity = none(int)): WakuNode = - + var resolvedExtIp = extIp - # Update extPort to default value if it's missing and there's an extIp or a DNS domain + # Update extPort to default value if it's missing and there's an extIp or a DNS domain let extPort = if (extIp.isSome() or dns4DomainName.isSome()) and extPort.isNone(): some(Port(60000)) else: extPort - + if dns4DomainName.isSome() and extIp.isNone(): let conf = defaultTestWakuNodeConf() - # If there's an error resolving the IP, an exception is thrown and test fails + # If there's an error resolving the IP, an exception is thrown and test fails let dnsRes = waitFor dnsResolve(dns4DomainName.get(), conf) if dnsRes.isErr(): raise newException(Defect, $dnsRes.error) @@ -76,6 +77,7 @@ proc newTestWakuNode*(nodeKey: crypto.PrivateKey, let netConfigRes = NetConfig.init( bindIp = bindIp, + clusterId = clusterId, bindPort = bindPort, extIp = resolvedExtIp, extPort = extPort, diff --git a/waku/node/config.nim b/waku/node/config.nim index b1817904dd..71cfaf8bc1 100644 --- a/waku/node/config.nim +++ b/waku/node/config.nim @@ -16,6 +16,7 @@ import type NetConfig* = object hostAddress*: MultiAddress + clusterId*: uint32 wsHostAddress*: Option[MultiAddress] hostExtAddress*: Option[MultiAddress] wsExtAddress*: Option[MultiAddress] @@ -69,6 +70,7 @@ proc init*(T: type NetConfig, wssEnabled: bool = false, dns4DomainName = none(string), discv5UdpPort = none(Port), + clusterId: uint32 = 0, wakuFlags = none(CapabilitiesBitfield)): NetConfigResult = ## Initialize and validate waku node network configuration @@ -137,6 +139,7 @@ proc init*(T: type NetConfig, ok(NetConfig( hostAddress: hostAddress, + clusterId: clusterId, wsHostAddress: wsHostAddress, hostExtAddress: hostExtAddress, wsExtAddress: wsExtAddress, diff --git a/waku/node/peer_manager/peer_manager.nim b/waku/node/peer_manager/peer_manager.nim index a705ed450f..009d0879e8 100644 --- a/waku/node/peer_manager/peer_manager.nim +++ b/waku/node/peer_manager/peer_manager.nim @@ -17,6 +17,7 @@ import ../../waku_core, ../../waku_relay, ../../waku_enr/sharding, + ../../waku_metadata, ./peer_store/peer_storage, ./waku_peer_store @@ -66,6 +67,7 @@ type PeerManager* = ref object of RootObj switch*: Switch peerStore*: PeerStore + wakuMetadata*: WakuMetadata initialBackoffInSec*: int backoffFactor*: int maxFailedAttempts*: int @@ -138,7 +140,7 @@ proc addPeer*(pm: PeerManager, remotePeerInfo: RemotePeerInfo, origin = UnknownO # Add peer to storage. Entry will subsequently be updated with connectedness information if not pm.storage.isNil: - pm.storage.insertOrReplace(remotePeerInfo.peerId, pm.peerStore.get(remotePeerInfo.peerId), NotConnected) + pm.storage.insertOrReplace(remotePeerInfo.peerId, remotePeerInfo, NotConnected) # Connects to a given node. Note that this function uses `connect` and # does not provide a protocol. Streams for relay (gossipsub) are created @@ -231,6 +233,7 @@ proc dialPeer(pm: PeerManager, proc loadFromStorage(pm: PeerManager) = debug "loading peers from storage" # Load peers from storage, if available + var amount = 0 proc onData(peerId: PeerID, remotePeerInfo: RemotePeerInfo, connectedness: Connectedness, disconnectTime: int64) = trace "loading peer", peerId=peerId, connectedness=connectedness @@ -250,12 +253,15 @@ proc loadFromStorage(pm: PeerManager) = pm.peerStore[DisconnectBook][peerId] = disconnectTime pm.peerStore[SourceBook][peerId] = remotePeerInfo.origin + amount.inc() + let res = pm.storage.getAll(onData) if res.isErr: warn "failed to load peers from storage", err = res.error waku_peers_errors.inc(labelValues = ["storage_load_failure"]) - else: - debug "successfully queried peer storage" + return + + debug "successfully queried peer storage", amount = amount proc canBeConnected*(pm: PeerManager, peerId: PeerId): bool = @@ -315,6 +321,44 @@ proc onPeerEvent(pm: PeerManager, peerId: PeerId, event: PeerEvent) {.async.} = direction = if event.initiator: Outbound else: Inbound connectedness = Connected + var clusterOk = false + var reason = "" + # To prevent metadata protocol from breaking prev nodes, by now we only + # disconnect if the clusterid is specified. + if not pm.wakuMetadata.isNil() and pm.wakuMetadata.clusterId != 0: + block wakuMetadata: + var conn: Connection + try: + conn = await pm.switch.dial(peerId, WakuMetadataCodec) + except CatchableError: + reason = "waku metadata codec not supported" + break wakuMetadata + + # request metadata from connecting peer + let metadata = (await pm.wakuMetadata.request(conn)).valueOr: + reason = "failed waku metadata codec request" + break wakuMetadata + + # does not report any clusterId + let clusterId = metadata.clusterId.valueOr: + reason = "empty clusterId reported" + break wakuMetadata + + # drop it if it doesnt match our network id + if pm.wakuMetadata.clusterId != clusterId: + reason = "different clusterId reported: " & $pm.wakuMetadata.clusterId & " vs " & $clusterId + break wakuMetadata + + # reaching here means the clusterId matches + clusterOk = true + + if not pm.wakuMetadata.isNil() and pm.wakuMetadata.clusterId != 0 and not clusterOk: + info "disconnecting from peer", peerId=peerId, reason=reason + asyncSpawn(pm.switch.disconnect(peerId)) + pm.peerStore.delete(peerId) + + # TODO: Take action depending on the supported shards as reported by metadata + let ip = pm.getPeerIp(peerId) if ip.isSome: pm.ipTable.mgetOrPut(ip.get, newSeq[PeerId]()).add(peerId) @@ -346,6 +390,7 @@ proc onPeerEvent(pm: PeerManager, peerId: PeerId, event: PeerEvent) {.async.} = proc new*(T: type PeerManager, switch: Switch, + wakuMetadata: WakuMetadata = nil, maxRelayPeers: Option[int] = none(int), storage: PeerStorage = nil, initialBackoffInSec = InitialBackoffInSec, @@ -388,6 +433,7 @@ proc new*(T: type PeerManager, let outRelayPeersTarget = max(maxRelayPeersValue div 3, 10) let pm = PeerManager(switch: switch, + wakuMetadata: wakuMetadata, peerStore: switch.peerStore, storage: storage, initialBackoffInSec: initialBackoffInSec, diff --git a/waku/node/waku_node.nim b/waku/node/waku_node.nim index eb04d15f02..83207024e1 100644 --- a/waku/node/waku_node.nim +++ b/waku/node/waku_node.nim @@ -35,6 +35,7 @@ import ../waku_filter_v2, ../waku_filter_v2/client as filter_client, ../waku_lightpush, + ../waku_metadata, ../waku_lightpush/client as lightpush_client, ../waku_enr, ../waku_dnsdisc, @@ -95,6 +96,7 @@ type wakuLightPush*: WakuLightPush wakuLightpushClient*: WakuLightPushClient wakuPeerExchange*: WakuPeerExchange + wakuMetadata*: WakuMetadata enr*: enr.Record libp2pPing*: Ping rng*: ref rand.HmacDrbgContext @@ -143,7 +145,7 @@ proc new*(T: type WakuNode, let queue = newAsyncEventQueue[SubscriptionEvent](30) - return WakuNode( + let node = WakuNode( peerManager: peerManager, switch: switch, rng: rng, @@ -152,6 +154,14 @@ proc new*(T: type WakuNode, topicSubscriptionQueue: queue ) + # mount metadata protocol + let metadata = WakuMetadata.new(netConfig.clusterId) + node.switch.mount(metadata, protocolMatcher(WakuMetadataCodec)) + node.wakuMetadata = metadata + peerManager.wakuMetadata = metadata + + return node + proc peerInfo*(node: WakuNode): PeerInfo = node.switch.peerInfo diff --git a/waku/waku_metadata.nim b/waku/waku_metadata.nim new file mode 100644 index 0000000000..efa9b4234b --- /dev/null +++ b/waku/waku_metadata.nim @@ -0,0 +1,10 @@ +when (NimMajor, NimMinor) < (1, 4): + {.push raises: [Defect].} +else: + {.push raises: [].} + +import + ./waku_metadata/protocol + +export + protocol diff --git a/waku/waku_metadata/protocol.nim b/waku/waku_metadata/protocol.nim new file mode 100644 index 0000000000..a8b5ae227b --- /dev/null +++ b/waku/waku_metadata/protocol.nim @@ -0,0 +1,103 @@ +when (NimMajor, NimMinor) < (1, 4): + {.push raises: [Defect].} +else: + {.push raises: [].} + +import + std/[options, sequtils, random], + stew/results, + chronicles, + chronos, + metrics, + libp2p/protocols/protocol, + libp2p/stream/connection, + libp2p/crypto/crypto, + eth/p2p/discoveryv5/enr +import + ../common/nimchronos, + ../waku_core, + ./rpc + +logScope: + topics = "waku metadata" + +const WakuMetadataCodec* = "/vac/waku/metadata/1.0.0" +const RpcResponseMaxBytes* = 1024 + +type + WakuMetadata* = ref object of LPProtocol + clusterId*: uint32 + shards*: seq[uint32] + +proc respond(m: WakuMetadata, conn: Connection): Future[Result[void, string]] {.async, gcsafe.} = + try: + await conn.writeLP(WakuMetadataResponse( + clusterId: some(m.clusterId), + shards: m.shards + ).encode().buffer) + except CatchableError as exc: + return err(exc.msg) + + return ok() + +proc request*(m: WakuMetadata, conn: Connection): Future[Result[WakuMetadataResponse, string]] {.async, gcsafe.} = + var buffer: seq[byte] + var error: string + try: + await conn.writeLP(WakuMetadataRequest( + clusterId: some(m.clusterId), + shards: m.shards, + ).encode().buffer) + buffer = await conn.readLp(RpcResponseMaxBytes) + except CatchableError as exc: + error = $exc.msg + finally: + # close, no more data is expected + await conn.closeWithEof() + + if error.len > 0: + return err("write/read failed: " & error) + + let decodedBuff = WakuMetadataResponse.decode(buffer) + if decodedBuff.isErr(): + return err("decode failed: " & $decodedBuff.error) + + echo decodedBuff.get().clusterId + return ok(decodedBuff.get()) + +proc initProtocolHandler*(m: WakuMetadata) = + proc handle(conn: Connection, proto: string) {.async, gcsafe, closure.} = + var buffer: seq[byte] + try: + buffer = await conn.readLp(RpcResponseMaxBytes) + except CatchableError as exc: + return + + let decBuf = WakuMetadataResponse.decode(buffer) + if decBuf.isErr(): + return + + let response = decBuf.get() + debug "Received WakuMetadata request", + remoteClusterId=response.clusterId, + remoteShards=response.shards, + localClusterId=m.clusterId, + localShards=m.shards + + discard await m.respond(conn) + + # close, no data is expected + await conn.closeWithEof() + + m.handler = handle + m.codec = WakuMetadataCodec + +proc new*(T: type WakuMetadata, clusterId: uint32): T = + let m = WakuMetadata( + clusterId: clusterId, + # TODO: must be updated real time + shards: @[], + ) + m.initProtocolHandler() + info "Created WakuMetadata protocol", clusterId=clusterId + return m diff --git a/waku/waku_metadata/rpc.nim b/waku/waku_metadata/rpc.nim new file mode 100644 index 0000000000..dd6034d814 --- /dev/null +++ b/waku/waku_metadata/rpc.nim @@ -0,0 +1,76 @@ +when (NimMajor, NimMinor) < (1, 4): + {.push raises: [Defect].} +else: + {.push raises: [].} + +import + std/options + +import + ../common/protobuf + +type + WakuMetadataRequest* = object + clusterId*: Option[uint32] + shards*: seq[uint32] + +type + WakuMetadataResponse* = object + clusterId*: Option[uint32] + shards*: seq[uint32] + +proc encode*(rpc: WakuMetadataRequest): ProtoBuffer = + var pb = initProtoBuffer() + + pb.write3(1, rpc.clusterId) + + for shard in rpc.shards: + pb.write3(2, shard) + pb.finish3() + + pb + +proc decode*(T: type WakuMetadataRequest, buffer: seq[byte]): ProtoResult[T] = + let pb = initProtoBuffer(buffer) + var rpc = WakuMetadataRequest() + + var clusterId: uint64 + if not ?pb.getField(1, clusterId): + rpc.clusterId = none(uint32) + else: + rpc.clusterId = some(clusterId.uint32) + + var shards: seq[uint64] + if ?pb.getRepeatedField(2, shards): + for shard in shards: + rpc.shards.add(shard.uint32) + + ok(rpc) + +proc encode*(rpc: WakuMetadataResponse): ProtoBuffer = + var pb = initProtoBuffer() + + pb.write3(1, rpc.clusterId) + + for shard in rpc.shards: + pb.write3(2, shard) + pb.finish3() + + pb + +proc decode*(T: type WakuMetadataResponse, buffer: seq[byte]): ProtoResult[T] = + let pb = initProtoBuffer(buffer) + var rpc = WakuMetadataResponse() + + var clusterId: uint64 + if not ?pb.getField(1, clusterId): + rpc.clusterId = none(uint32) + else: + rpc.clusterId = some(clusterId.uint32) + + var shards: seq[uint64] + if ?pb.getRepeatedField(2, shards): + for shard in shards: + rpc.shards.add(shard.uint32) + + ok(rpc) From 1bba18349225c1499695171f2611a08c57950dca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lex=20Cabeza=20Romero?= Date: Thu, 12 Oct 2023 20:59:21 +0200 Subject: [PATCH 079/274] test(waku-filter): Subscribe tests batch (1/4) (#2034) * Implement waku filter client subscribe tests. * Remove legacy filter tests. * Fix constant for max criteria per subscription limit. --- tests/all_tests_waku.nim | 1 - tests/node/test_wakunode_filter.nim | 109 ++ tests/testlib/futures.nim | 8 + tests/waku_filter_v2/test_waku_client.nim | 969 ++++++++++++++++-- tests/waku_filter_v2/test_waku_filter.nim | 370 ------- ...client_utils.nim => waku_filter_utils.nim} | 11 + waku/waku_filter_v2/protocol.nim | 2 +- 7 files changed, 1033 insertions(+), 437 deletions(-) create mode 100644 tests/node/test_wakunode_filter.nim create mode 100644 tests/testlib/futures.nim delete mode 100644 tests/waku_filter_v2/test_waku_filter.nim rename tests/waku_filter_v2/{client_utils.nim => waku_filter_utils.nim} (64%) diff --git a/tests/all_tests_waku.nim b/tests/all_tests_waku.nim index c527d7f63e..7bd5ca0dfb 100644 --- a/tests/all_tests_waku.nim +++ b/tests/all_tests_waku.nim @@ -48,7 +48,6 @@ import # Waku filter test suite import ./waku_filter_v2/test_waku_client, - ./waku_filter_v2/test_waku_filter, ./waku_filter_v2/test_waku_filter_protocol import diff --git a/tests/node/test_wakunode_filter.nim b/tests/node/test_wakunode_filter.nim new file mode 100644 index 0000000000..0b918ac0d6 --- /dev/null +++ b/tests/node/test_wakunode_filter.nim @@ -0,0 +1,109 @@ +{.used.} + +import + std/[options, tables, sequtils], + stew/shims/net as stewNet, + testutils/unittests, + chronos, + chronicles, + os, + libp2p/peerstore, + libp2p/crypto/crypto + +import + ../../../waku/waku_core, + ../../../waku/node/peer_manager, + ../../../waku/node/waku_node, + ../../../waku/waku_filter_v2, + ../../../waku/waku_filter_v2/client, + ../../../waku/waku_filter_v2/subscriptions, + ../testlib/common, + ../testlib/wakucore, + ../testlib/wakunode, + ../testlib/testasync, + ../testlib/futures + +let FUTURE_TIMEOUT = 1.seconds + +suite "Full Node - Waku Filter - End to End": + var client {.threadvar.}: WakuNode + var clientPeerId {.threadvar.}: PeerId + var server {.threadvar.}: WakuNode + var serverRemotePeerInfo {.threadvar.}: RemotePeerInfo + var pubsubTopic {.threadvar.}: PubsubTopicy + var contentTopic {.threadvar.}: ContentTopic + var contentTopicSeq {.threadvar.}: seq[ContentTopic] + var pushHandlerFuture {.threadvar.}: Future[(string, WakuMessage)] + var messagePushHandler {.threadvar.}: FilterPushHandler + + asyncSetup: + pushHandlerFuture = newFuture[(string, WakuMessage)]() + messagePushHandler = proc( + pubsubTopic: PubsubTopic, message: WakuMessage + ): Future[void] {.async, closure, gcsafe.} = + pushHandlerFuture.complete((pubsubTopic, message)) + + pubsubTopic = DefaultPubsubTopic + contentTopic = DefaultContentTopic + contentTopicSeq = @[DefaultContentTopic] + + let + serverKey = generateSecp256k1Key() + clientKey = generateSecp256k1Key() + + server = newTestWakuNode(serverKey, ValidIpAddress.init("0.0.0.0"), Port(0)) + client = newTestWakuNode(clientKey, ValidIpAddress.init("0.0.0.0"), Port(0)) + + waitFor allFutures(server.start(), client.start()) + + waitFor server.mountFilter() + waitFor client.mountFilterClient() + + client.wakuFilterClient.registerPushHandler(messagePushHandler) + serverRemotePeerInfo = server.peerInfo.toRemotePeerInfo() + clientPeerId = client.peerInfo.toRemotePeerInfo().peerId + + asyncTeardown: + waitFor allFutures(client.stop(), server.stop()) + + asyncTest "Full Client Node to Full Service Node Subscription": + # When a full client node subscribes to a full service node + let subscribeResponse = await client.filterSubscribe( + some(pubsubTopic), contentTopicSeq, serverRemotePeerInfo + ) + + # Then the subscription is successful + check: + subscribeResponse.isOk() + server.wakuFilter.subscriptions.len == 1 + server.wakuFilter.subscriptions.hasKey(clientPeerId) + + # When sending a message to the subscribed content topic + let msg1 = fakeWakuMessage(contentTopic=contentTopic) + await server.filterHandleMessage(pubsubTopic, msg1) + + # Then the message is pushed to the client + require await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) + let (pushedMsgPubsubTopic1, pushedMsg1) = pushHandlerFuture.read() + check: + pushedMsgPubsubTopic1 == pubsubTopic + pushedMsg1 == msg1 + + # When unsubscribing from the subscription + let unsubscribeResponse = await client.filterUnsubscribe( + some(pubsubTopic), contentTopicSeq, serverRemotePeerInfo + ) + + # Then the unsubscription is successful + check: + unsubscribeResponse.isOk() + server.wakuFilter.subscriptions.len == 0 + + # When sending a message to the previously subscribed content topic + pushHandlerFuture = newPushHandlerFuture() # Clear previous future + let msg2 = fakeWakuMessage(contentTopic=contentTopic) + await server.filterHandleMessage(pubsubTopic, msg2) + + # Then the message is not pushed to the client + check: + not await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) diff --git a/tests/testlib/futures.nim b/tests/testlib/futures.nim new file mode 100644 index 0000000000..8981516e4b --- /dev/null +++ b/tests/testlib/futures.nim @@ -0,0 +1,8 @@ +import + chronicles, + chronos + +import ../../../waku/waku_core/message + +proc newPushHandlerFuture*(): Future[(string, WakuMessage)] = + newFuture[(string, WakuMessage)]() diff --git a/tests/waku_filter_v2/test_waku_client.nim b/tests/waku_filter_v2/test_waku_client.nim index f4cae3ed84..0ef88235db 100644 --- a/tests/waku_filter_v2/test_waku_client.nim +++ b/tests/waku_filter_v2/test_waku_client.nim @@ -1,95 +1,934 @@ {.used.} import - std/[options,tables], + std/[options, tables, sequtils], testutils/unittests, - chronos + chronos, + chronicles, + os, + libp2p/peerstore import - ../../waku/node/peer_manager, - ../../waku/waku_filter_v2, - ../../waku/waku_filter_v2/client, - ../../waku/waku_core, + ../../../waku/node/peer_manager, + ../../../waku/waku_filter_v2, + ../../../waku/waku_filter_v2/client, + ../../../waku/waku_filter_v2/subscriptions, + ../../../waku/waku_core, + ../testlib/common, ../testlib/wakucore, ../testlib/testasync, - ./client_utils.nim + ../testlib/testutils, + ../testlib/futures, + ./waku_filter_utils.nim -suite "Waku Filter": - suite "Subscriber Ping": +let FUTURE_TIMEOUT = 1.seconds + +suite "Waku Filter - End to End": + suite "MessagePushHandler - Void": var serverSwitch {.threadvar.}: Switch var clientSwitch {.threadvar.}: Switch var wakuFilter {.threadvar.}: WakuFilter var wakuFilterClient {.threadvar.}: WakuFilterClient var serverRemotePeerInfo {.threadvar.}: RemotePeerInfo var pubsubTopic {.threadvar.}: PubsubTopic - var contentTopics {.threadvar.}: seq[ContentTopic] + var contentTopic {.threadvar.}: ContentTopic + var contentTopicSeq {.threadvar.}: seq[ContentTopic] + var clientPeerId {.threadvar.}: PeerId + var messagePushHandler {.threadvar.}: FilterPushHandler + var pushHandlerFuture {.threadvar.}: Future[(string, WakuMessage)] asyncSetup: + pushHandlerFuture = newPushHandlerFuture() + messagePushHandler = proc( + pubsubTopic: PubsubTopic, message: WakuMessage + ) {.async, closure, gcsafe.} = + pushHandlerFuture.complete((pubsubTopic, message)) pubsubTopic = DefaultPubsubTopic - contentTopics = @[DefaultContentTopic] + contentTopic = DefaultContentTopic + contentTopicSeq = @[DefaultContentTopic] serverSwitch = newStandardSwitch() clientSwitch = newStandardSwitch() wakuFilter = await newTestWakuFilter(serverSwitch) wakuFilterClient = await newTestWakuFilterClient(clientSwitch) await allFutures(serverSwitch.start(), clientSwitch.start()) + wakuFilterClient.registerPushHandler(messagePushHandler) serverRemotePeerInfo = serverSwitch.peerInfo.toRemotePeerInfo() + clientPeerId = clientSwitch.peerInfo.toRemotePeerInfo().peerId + + asyncTeardown: + await allFutures(wakuFilter.stop(), wakuFilterClient.stop(), serverSwitch.stop(), clientSwitch.stop()) + + suite "Subscriber Ping": + asyncTest "Active Subscription Identification": + # Given + let + subscribeResponse = await wakuFilterClient.subscribe( + serverRemotePeerInfo, pubsubTopic, contentTopicSeq + ) + assert subscribeResponse.isOk(), $subscribeResponse.error + require: + wakuFilter.subscriptions.hasKey(clientPeerId) + + # When + let subscribedPingResponse = await wakuFilterClient.ping(serverRemotePeerInfo) + + # Then + check: + subscribedPingResponse.isOk() + wakuFilter.subscriptions.hasKey(clientPeerId) + + asyncTest "No Active Subscription Identification": + # When + let unsubscribedPingResponse = await wakuFilterClient.ping(serverRemotePeerInfo) + + # Then + check: + unsubscribedPingResponse.isErr() # Not subscribed + unsubscribedPingResponse.error().kind == FilterSubscribeErrorKind.NOT_FOUND + + asyncTest "After Unsubscription": + # Given + let + subscribeResponse = await wakuFilterClient.subscribe( + serverRemotePeerInfo, pubsubTopic, contentTopicSeq + ) + + require: + subscribeResponse.isOk() + wakuFilter.subscriptions.hasKey(clientPeerId) + + # When + let unsubscribeResponse = await wakuFilterClient.unsubscribe( + serverRemotePeerInfo, pubsubTopic, contentTopicSeq + ) + assert unsubscribeResponse.isOk(), $unsubscribeResponse.error + require: + unsubscribeResponse.isOk() + not wakuFilter.subscriptions.hasKey(clientPeerId) + + let unsubscribedPingResponse = await wakuFilterClient.ping(serverRemotePeerInfo) + + # Then + check: + unsubscribedPingResponse.isErr() # Not subscribed + unsubscribedPingResponse.error().kind == FilterSubscribeErrorKind.NOT_FOUND + + suite "Subscribe": + asyncTest "Server remote peer info doesn't match an online server": + # Given an offline service node + let offlineServerSwitch = newStandardSwitch() + let offlineWakuFilter = await newTestWakuFilter(offlineServerSwitch) + let offlineServerRemotePeerInfo = offlineServerSwitch.peerInfo.toRemotePeerInfo() + + # When subscribing to the offline service node + let subscribeResponse = await wakuFilterClient.subscribe( + offlineServerRemotePeerInfo, pubsubTopic, contentTopicSeq + ) + + # Then the subscription is not successful + check: + subscribeResponse.isErr() # Not subscribed + subscribeResponse.error().kind == FilterSubscribeErrorKind.PEER_DIAL_FAILURE + + asyncTest "PubSub Topic with Single Content Topic": + # Given + let nonExistentContentTopic = "non-existent-content-topic" + + # When subscribing to a content topic + let subscribeResponse = await wakuFilterClient.subscribe( + serverRemotePeerInfo, pubsubTopic, contentTopicSeq + ) + + # Then the subscription is successful + check: + subscribeResponse.isOk() + wakuFilter.subscriptions.len == 1 + wakuFilter.subscriptions.hasKey(clientPeerId) + wakuFilter.getSubscribedContentTopics(clientPeerId) == contentTopicSeq + + # When sending a message to the subscribed content topic + let msg1 = fakeWakuMessage(contentTopic=contentTopic) + await wakuFilter.handleMessage(pubsubTopic, msg1) + + # Then the message is pushed to the client + require await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) + let (pushedMsgPubsubTopic, pushedMsg) = pushHandlerFuture.read() + check: + pushedMsgPubsubTopic == pubsubTopic + pushedMsg == msg1 + + # When sending a message to a non-subscribed content topic (before unsubscription) + pushHandlerFuture = newPushHandlerFuture() # Clear previous future + let msg2 = fakeWakuMessage(contentTopic=nonExistentContentTopic) + await wakuFilter.handleMessage(pubsubTopic, msg2) + + # Then the message is not pushed to the client + check: + not await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) + + # Given a valid unsubscription to an existing subscription + let unsubscribeResponse = await wakuFilterClient.unsubscribe( + serverRemotePeerInfo, pubsubTopic, contentTopicSeq + ) + require: + unsubscribeResponse.isOk() + wakuFilter.subscriptions.len == 0 + + # When sending a message to the previously unsubscribed content topic + pushHandlerFuture = newPushHandlerFuture() # Clear previous future + let msg3 = fakeWakuMessage(contentTopic=contentTopic) + await wakuFilter.handleMessage(pubsubTopic, msg3) + + # Then the message is not pushed to the client + check: + not await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) + + # When sending a message to a non-subscribed content topic (after unsubscription) + pushHandlerFuture = newPushHandlerFuture() # Clear previous future + let msg4 = fakeWakuMessage(contentTopic=nonExistentContentTopic) + await wakuFilter.handleMessage(pubsubTopic, msg4) + + # Then the message is not pushed to the client + check: + not await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) + + asyncTest "PubSub Topic with Multiple Content Topics": + # Given + let nonExistentContentTopic = "non-existent-content-topic" + let otherContentTopic = "other-content-topic" + let contentTopicsSeq = @[contentTopic, otherContentTopic] + + # Given a valid subscription to multiple content topics + let subscribeResponse = await wakuFilterClient.subscribe( + serverRemotePeerInfo, pubsubTopic, contentTopicsSeq + ) + require: + subscribeResponse.isOk() + wakuFilter.subscriptions.len == 1 + wakuFilter.subscriptions.hasKey(clientPeerId) + wakuFilter.getSubscribedContentTopics(clientPeerId) == contentTopicsSeq + + # When sending a message to the one of the subscribed content topics + let msg1 = fakeWakuMessage(contentTopic=contentTopic) + await wakuFilter.handleMessage(pubsubTopic, msg1) + + # Then the message is pushed to the client + require await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) + let (pushedMsgPubsubTopic1, pushedMsg1) = pushHandlerFuture.read() + check: + pushedMsgPubsubTopic1 == pubsubTopic + pushedMsg1 == msg1 + + # When sending a message to the other subscribed content topic + pushHandlerFuture = newPushHandlerFuture() # Clear previous future + let msg2 = fakeWakuMessage(contentTopic=otherContentTopic) + await wakuFilter.handleMessage(pubsubTopic, msg2) + + # Then the message is pushed to the client + require await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) + let (pushedMsgPubsubTopic2, pushedMsg2) = pushHandlerFuture.read() + check: + pushedMsgPubsubTopic2 == pubsubTopic + pushedMsg2 == msg2 + + # When sending a message to a non-subscribed content topic (before unsubscription) + pushHandlerFuture = newPushHandlerFuture() # Clear previous future + let msg3 = fakeWakuMessage(contentTopic=nonExistentContentTopic) + await wakuFilter.handleMessage(pubsubTopic, msg3) + + # Then the message is not pushed to the client + check: + not await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) + + # Given a valid unsubscription to an existing subscription + let unsubscribeResponse = await wakuFilterClient.unsubscribe( + serverRemotePeerInfo, pubsubTopic, contentTopicsSeq + ) + require: + unsubscribeResponse.isOk() + wakuFilter.subscriptions.len == 0 + + # When sending a message to the previously unsubscribed content topic + pushHandlerFuture = newPushHandlerFuture() # Clear previous future + let msg4 = fakeWakuMessage(contentTopic=contentTopic) + await wakuFilter.handleMessage(pubsubTopic, msg4) + + # Then the message is not pushed to the client + check: + not await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) + + # When sending a message to the other previously unsubscribed content topic + pushHandlerFuture = newPushHandlerFuture() # Clear previous future + let msg5 = fakeWakuMessage(contentTopic=otherContentTopic) + await wakuFilter.handleMessage(pubsubTopic, msg5) + + # Then the message is not pushed to the client + check: + not await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) + + # When sending a message to a non-subscribed content topic (after unsubscription) + pushHandlerFuture = newPushHandlerFuture() # Clear previous future + let msg6 = fakeWakuMessage(contentTopic=nonExistentContentTopic) + await wakuFilter.handleMessage(pubsubTopic, msg6) + + # Then the message is not pushed to the client + check: + not await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) + + asyncTest "Different PubSub Topics with Different Content Topics, Unsubscribe One By One": + # Given + let otherPubsubTopic = "other-pubsub-topic" + let otherContentTopic = "other-content-topic" + let otherContentTopicSeq = @[otherContentTopic] + + # When subscribing to a pubsub topic + let subscribeResponse1 = await wakuFilterClient.subscribe( + serverRemotePeerInfo, pubsubTopic, contentTopicSeq + ) + + # Then the subscription is successful + check: + subscribeResponse1.isOk() + wakuFilter.subscriptions.len == 1 + wakuFilter.subscriptions.hasKey(clientPeerId) + wakuFilter.getSubscribedContentTopics(clientPeerId) == contentTopicSeq + + # When subscribing to a different pubsub topic + let subscribeResponse2 = await wakuFilterClient.subscribe( + serverRemotePeerInfo, otherPubsubTopic, otherContentTopicSeq + ) + + # Then the subscription is successful + check: + subscribeResponse2.isOk() + wakuFilter.subscriptions.len == 1 + wakuFilter.subscriptions.hasKey(clientPeerId) + wakuFilter.getSubscribedContentTopics(clientPeerId) == contentTopicSeq & otherContentTopicSeq + + # When sending a message to one of the subscribed content topics + let msg1 = fakeWakuMessage(contentTopic=contentTopic) + await wakuFilter.handleMessage(pubsubTopic, msg1) + + # Then the message is pushed to the client + require await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) + let (pushedMsgPubsubTopic1, pushedMsg1) = pushHandlerFuture.read() + check: + pushedMsgPubsubTopic1 == pubsubTopic + pushedMsg1 == msg1 + + # When sending a message to the other subscribed content topic + pushHandlerFuture = newPushHandlerFuture() # Clear previous future + let msg2 = fakeWakuMessage(contentTopic=otherContentTopic) + await wakuFilter.handleMessage(otherPubsubTopic, msg2) + + # Then the message is pushed to the client + require await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) + let (pushedMsgPubsubTopic2, pushedMsg2) = pushHandlerFuture.read() + check: + pushedMsgPubsubTopic2 == otherPubsubTopic + pushedMsg2 == msg2 + + # When sending a message to a non-subscribed content topic (before unsubscription) + pushHandlerFuture = newPushHandlerFuture() # Clear previous future + let msg3 = fakeWakuMessage(contentTopic="non-existent-content-topic") + await wakuFilter.handleMessage(pubsubTopic, msg3) + + # Then + check: + not await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) + + # When unsubscribing from one of the subscriptions + let unsubscribeResponse1 = await wakuFilterClient.unsubscribe( + serverRemotePeerInfo, pubsubTopic, contentTopicSeq + ) + + # Then the unsubscription is successful + check: + unsubscribeResponse1.isOk() + wakuFilter.subscriptions.len == 1 + wakuFilter.subscriptions.hasKey(clientPeerId) + wakuFilter.getSubscribedContentTopics(clientPeerId) == otherContentTopicSeq + + # When sending a message to the previously subscribed content topic + pushHandlerFuture = newPushHandlerFuture() # Clear previous future + let msg4 = fakeWakuMessage(contentTopic=contentTopic) + await wakuFilter.handleMessage(pubsubTopic, msg4) + + # Then the message is not pushed to the client + check: + not await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) + + # When sending a message to the still subscribed content topic + pushHandlerFuture = newPushHandlerFuture() # Clear previous future + let msg5 = fakeWakuMessage(contentTopic=otherContentTopic) + await wakuFilter.handleMessage(otherPubsubTopic, msg5) + + # Then the message is pushed to the client + require await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) + let (pushedMsgPubsubTopic3, pushedMsg3) = pushHandlerFuture.read() + check: + pushedMsgPubsubTopic3 == otherPubsubTopic + pushedMsg3 == msg5 + + # When unsubscribing from the other subscription + let unsubscribeResponse2 = await wakuFilterClient.unsubscribe( + serverRemotePeerInfo, otherPubsubTopic, otherContentTopicSeq + ) + + # Then the unsubscription is successful + check: + unsubscribeResponse2.isOk() + wakuFilter.subscriptions.len == 0 + + # When sending a message to the previously unsubscribed content topic + pushHandlerFuture = newPushHandlerFuture() # Clear previous future + let msg6 = fakeWakuMessage(contentTopic=contentTopic) + await wakuFilter.handleMessage(pubsubTopic, msg6) + + # Then the message is not pushed to the client + check: + not await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) + + asyncTest "Different PubSub Topics with Different Content Topics, Unsubscribe All": + # Given + let otherPubsubTopic = "other-pubsub-topic" + let otherContentTopic = "other-content-topic" + let otherContentTopicSeq = @[otherContentTopic] + + # When subscribing to a content topic + let subscribeResponse1 = await wakuFilterClient.subscribe( + serverRemotePeerInfo, pubsubTopic, contentTopicSeq + ) + + # Then + check: + subscribeResponse1.isOk() + wakuFilter.subscriptions.len == 1 + wakuFilter.subscriptions.hasKey(clientPeerId) + wakuFilter.getSubscribedContentTopics(clientPeerId) == contentTopicSeq + + # When subscribing to a different content topic + let subscribeResponse2 = await wakuFilterClient.subscribe( + serverRemotePeerInfo, otherPubsubTopic, otherContentTopicSeq + ) + + # Then + check: + subscribeResponse2.isOk() + wakuFilter.subscriptions.len == 1 + wakuFilter.subscriptions.hasKey(clientPeerId) + wakuFilter.getSubscribedContentTopics(clientPeerId) == contentTopicSeq & otherContentTopicSeq + + # When sending a message to one of the subscribed content topics + let msg1 = fakeWakuMessage(contentTopic=contentTopic) + await wakuFilter.handleMessage(pubsubTopic, msg1) + + # Then the message is pushed to the client + require await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) + let (pushedMsgPubsubTopic1, pushedMsg1) = pushHandlerFuture.read() + check: + pushedMsgPubsubTopic1 == pubsubTopic + pushedMsg1 == msg1 + + # When sending a message to the other subscribed content topic + pushHandlerFuture = newPushHandlerFuture() # Clear previous future + let msg2 = fakeWakuMessage(contentTopic=otherContentTopic) + await wakuFilter.handleMessage(otherPubsubTopic, msg2) + + # Then the message is pushed to the client + require await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) + let (pushedMsgPubsubTopic2, pushedMsg2) = pushHandlerFuture.read() + check: + pushedMsgPubsubTopic2 == otherPubsubTopic + pushedMsg2 == msg2 + + # When sending a message to a non-subscribed content topic (before unsubscription) + pushHandlerFuture = newPushHandlerFuture() # Clear previous future + let msg3 = fakeWakuMessage(contentTopic="non-existent-content-topic") + await wakuFilter.handleMessage(pubsubTopic, msg3) + + # Then + check: + not await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) + + # When unsubscribing from one of the subscriptions + let unsubscribeResponse = await wakuFilterClient.unsubscribeAll(serverRemotePeerInfo) + + # Then the unsubscription is successful + check: + unsubscribeResponse.isOk() + wakuFilter.subscriptions.len == 0 + + # When sending a message the previously subscribed content topics + pushHandlerFuture = newPushHandlerFuture() # Clear previous future + let msg4 = fakeWakuMessage(contentTopic=contentTopic) + let msg5 = fakeWakuMessage(contentTopic=otherContentTopic) + await wakuFilter.handleMessage(pubsubTopic, msg4) + await wakuFilter.handleMessage(otherPubsubTopic, msg5) + + # Then the messages are not pushed to the client + check: + not await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) + + asyncTest "Different PubSub Topics with Same Content Topics, Unsubscribe Selectively": + # Given + let otherPubsubTopic = "other-pubsub-topic" + let otherContentTopic1 = "other-content-topic1" + let otherContentTopic2 = "other-content-topic2" + let contentTopicsSeq1 = @[contentTopic, otherContentTopic1] + let contentTopicsSeq2 = @[contentTopic, otherContentTopic2] + + # When subscribing to a pubsub topic + let subscribeResponse1 = await wakuFilterClient.subscribe( + serverRemotePeerInfo, pubsubTopic, contentTopicsSeq1 + ) + # Then the subscription is successful + check: + subscribeResponse1.isOk() + wakuFilter.subscriptions.len == 1 + wakuFilter.subscriptions.hasKey(clientPeerId) + wakuFilter.getSubscribedContentTopics(clientPeerId) == contentTopicsSeq1 + + # When subscribing to a different pubsub topic + let subscribeResponse2 = await wakuFilterClient.subscribe( + serverRemotePeerInfo, otherPubsubTopic, contentTopicsSeq2 + ) + + # Then the subscription is successful + check: + subscribeResponse2.isOk() + wakuFilter.subscriptions.len == 1 + wakuFilter.subscriptions.hasKey(clientPeerId) + wakuFilter.getSubscribedContentTopics(clientPeerId) == contentTopicsSeq1 & contentTopicsSeq2 + + # When sending a message to (pubsubTopic, contentTopic) + let msg1 = fakeWakuMessage(contentTopic=contentTopic) + await wakuFilter.handleMessage(pubsubTopic, msg1) + + # Then the message is pushed to the client + require await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) + let (pushedMsgPubsubTopic1, pushedMsg1) = pushHandlerFuture.read() + check: + pushedMsgPubsubTopic1 == pubsubTopic + pushedMsg1 == msg1 + + # When sending a message to (pubsubTopic, otherContentTopic1) + pushHandlerFuture = newPushHandlerFuture() # Clear previous future + let msg2 = fakeWakuMessage(contentTopic=otherContentTopic1) + await wakuFilter.handleMessage(pubsubTopic, msg2) + + # Then the message is pushed to the client + require await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) + let (pushedMsgPubsubTopic2, pushedMsg2) = pushHandlerFuture.read() + check: + pushedMsgPubsubTopic2 == pubsubTopic + pushedMsg2 == msg2 + + # When sending a message to (otherPubsubTopic, contentTopic) + pushHandlerFuture = newPushHandlerFuture() # Clear previous future + let msg3 = fakeWakuMessage(contentTopic=contentTopic) + await wakuFilter.handleMessage(otherPubsubTopic, msg3) + + # Then the message is pushed to the client + require await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) + let (pushedMsgPubsubTopic3, pushedMsg3) = pushHandlerFuture.read() + check: + pushedMsgPubsubTopic3 == otherPubsubTopic + pushedMsg3 == msg3 + + # When sending a message to (otherPubsubTopic, otherContentTopic2) + pushHandlerFuture = newPushHandlerFuture() # Clear previous future + let msg4 = fakeWakuMessage(contentTopic=otherContentTopic2) + await wakuFilter.handleMessage(otherPubsubTopic, msg4) + + # Then the message is pushed to the client + require await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) + let (pushedMsgPubsubTopic4, pushedMsg4) = pushHandlerFuture.read() + check: + pushedMsgPubsubTopic4 == otherPubsubTopic + pushedMsg4 == msg4 + + # When selectively unsubscribing from (pubsubTopic, otherContentTopic1) and (otherPubsubTopic, contentTopic) + let unsubscribeResponse1 = await wakuFilterClient.unsubscribe( + serverRemotePeerInfo, pubsubTopic, @[otherContentTopic1] + ) + let unsubscribeResponse2 = await wakuFilterClient.unsubscribe( + serverRemotePeerInfo, otherPubsubTopic, @[contentTopic] + ) + + # Then the unsubscription is successful + check: + unsubscribeResponse1.isOk() + unsubscribeResponse2.isOk() + wakuFilter.subscriptions.len == 1 + wakuFilter.subscriptions.hasKey(clientPeerId) + wakuFilter.getSubscribedContentTopics(clientPeerId) == @[contentTopic, otherContentTopic2] + + # When sending a message to (pubsubTopic, contentTopic) + pushHandlerFuture = newPushHandlerFuture() # Clear previous future + let msg5 = fakeWakuMessage(contentTopic=contentTopic) + await wakuFilter.handleMessage(pubsubTopic, msg5) + + # Then the message is pushed to the client + require await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) + let (pushedMsgPubsubTopic5, pushedMsg5) = pushHandlerFuture.read() + check: + pushedMsgPubsubTopic5 == pubsubTopic + pushedMsg5 == msg5 + + # When sending a message to (otherPubsubTopic, otherContentTopic2) + pushHandlerFuture = newPushHandlerFuture() # Clear previous future + let msg6 = fakeWakuMessage(contentTopic=otherContentTopic2) + await wakuFilter.handleMessage(otherPubsubTopic, msg6) + + # Then the message is pushed to the client + require await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) + let (pushedMsgPubsubTopic6, pushedMsg6) = pushHandlerFuture.read() + check: + pushedMsgPubsubTopic6 == otherPubsubTopic + pushedMsg6 == msg6 + + # When sending a message to (pubsubTopic, otherContentTopic1) and (otherPubsubTopic, contentTopic) + pushHandlerFuture = newPushHandlerFuture() # Clear previous future + let msg7 = fakeWakuMessage(contentTopic=otherContentTopic1) + await wakuFilter.handleMessage(pubsubTopic, msg7) + let msg8 = fakeWakuMessage(contentTopic=contentTopic) + await wakuFilter.handleMessage(otherPubsubTopic, msg8) + + # Then the messages are not pushed to the client + check: + not await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) + + asyncTest "Max Topic Size": + # Given a topic list of 30 topics + var topicSeq: seq[string] = toSeq(0.. 0: + let takeNumber = min(topicSeq.len, MaxContentTopicsPerRequest) + let topicSeqBatch = topicSeq[0..= MaxCriteriaPerSubscription: + if peerSubscription.len() + filterCriteria.len() > MaxCriteriaPerSubscription: return err(FilterSubscribeError.serviceUnavailable("peer has reached maximum number of filter criteria")) peerSubscription.incl(filterCriteria) From ce5fb3401da4365c0dc8ae4428f34d3a5ecac1a5 Mon Sep 17 00:00:00 2001 From: gabrielmer <101006718+gabrielmer@users.noreply.github.com> Date: Fri, 13 Oct 2023 11:45:18 +0300 Subject: [PATCH 080/274] chore: remove js-node tests as release candidate dependencies (#2123) --- .github/workflows/pre-release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pre-release.yml b/.github/workflows/pre-release.yml index 13859983c1..fb6156e255 100644 --- a/.github/workflows/pre-release.yml +++ b/.github/workflows/pre-release.yml @@ -114,7 +114,7 @@ jobs: create-release-candidate: runs-on: ubuntu-latest - needs: [ tag-name, build-and-publish, js-waku-node, js-waku-node-optional ] + needs: [ tag-name, build-and-publish ] steps: - name: Checkout code uses: actions/checkout@v3 From a5b1cfd0244c1715b732438281b21d4aa0e5f3e1 Mon Sep 17 00:00:00 2001 From: gabrielmer <101006718+gabrielmer@users.noreply.github.com> Date: Tue, 17 Oct 2023 12:53:41 +0300 Subject: [PATCH 081/274] fix: consider WS extMultiAddrs before publishing host address (#2122) --- tests/test_waku_netconfig.nim | 23 +++++++++++++++++++++++ waku/node/config.nim | 15 +++++++++++++-- 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/tests/test_waku_netconfig.nim b/tests/test_waku_netconfig.nim index 5ecbd258f8..0c02afab13 100644 --- a/tests/test_waku_netconfig.nim +++ b/tests/test_waku_netconfig.nim @@ -338,3 +338,26 @@ suite "Waku NetConfig": check: netConfig.enrMultiaddrs.contains(dns4TcpEndPoint(dns4DomainName, extPort)) + asyncTest "wsHostAddress is not announced if a WS address is provided in extMultiAddrs": + + let + conf = defaultTestWakuNodeConf() + extAddIp = ValidIpAddress.init("1.2.3.4") + extAddPort = Port(1234) + wssEnabled = false + extMultiAddrs = @[(ip4TcpEndPoint(extAddIp, extAddPort) & wsFlag(wssEnabled))] + + let netConfigRes = NetConfig.init( + bindIp = conf.listenAddress, + bindPort = conf.tcpPort, + extMultiAddrs = extMultiAddrs + ) + + assert netConfigRes.isOk(), $netConfigRes.error + + let netConfig = netConfigRes.get() + + check: + netConfig.announcedAddresses.len == 2 # Bind address + extAddress + netConfig.announcedAddresses[1] == extMultiAddrs[0] + diff --git a/waku/node/config.nim b/waku/node/config.nim index 71cfaf8bc1..f90aaff1d6 100644 --- a/waku/node/config.nim +++ b/waku/node/config.nim @@ -7,7 +7,7 @@ import std/[options, sequtils, strutils], stew/results, stew/shims/net, - libp2p/multiaddress + libp2p/[multiaddress, multicodec] import ../../waku/waku_core/peers import @@ -59,6 +59,16 @@ proc formatListenAddress(inputMultiAdd: MultiAddress): MultiAddress = # If MultiAddress contains "0.0.0.0", replace it for "127.0.0.1" return MultiAddress.init(inputStr.replace("0.0.0.0", "127.0.0.1")).get() +proc isWsAddress(ma: MultiAddress): bool = + let + isWs = ma.contains(multiCodec("ws")).get() + isWss = ma.contains(multiCodec("wss")).get() + + return isWs or isWss + +proc containsWsAddress(extMultiAddrs: seq[MultiAddress]): bool = + return extMultiAddrs.filterIt( it.isWsAddress() ).len > 0 + proc init*(T: type NetConfig, bindIp: ValidIpAddress, bindPort: Port, @@ -126,7 +136,8 @@ proc init*(T: type NetConfig, if wsExtAddress.isSome(): announcedAddresses.add(wsExtAddress.get()) - elif wsHostAddress.isSome(): + elif wsHostAddress.isSome() and not containsWsAddress(extMultiAddrs): + # Only publish wsHostAddress if a WS address is not set in extMultiAddrs announcedAddresses.add(wsHostAddress.get()) let From 5277d122d0455fea4e4b68c080d9d320ddcd2622 Mon Sep 17 00:00:00 2001 From: NagyZoltanPeter <113987313+NagyZoltanPeter@users.noreply.github.com> Date: Wed, 18 Oct 2023 11:47:47 +0200 Subject: [PATCH 082/274] Fix wrong install of filter rest api - now installed when using filter client mode and filter client protocol is mounted correctly (#2133) --- apps/wakunode2/app.nim | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/apps/wakunode2/app.nim b/apps/wakunode2/app.nim index 97dbec7475..f103acb17f 100644 --- a/apps/wakunode2/app.nim +++ b/apps/wakunode2/app.nim @@ -473,9 +473,12 @@ proc setupProtocols(node: WakuNode, if conf.filternode != "": let filterNode = parsePeerInfo(conf.filternode) if filterNode.isOk(): - await node.mountFilterClient() - node.peerManager.addServicePeer(filterNode.value, WakuLegacyFilterCodec) - node.peerManager.addServicePeer(filterNode.value, WakuFilterSubscribeCodec) + try: + await node.mountFilterClient() + node.peerManager.addServicePeer(filterNode.value, WakuLegacyFilterCodec) + node.peerManager.addServicePeer(filterNode.value, WakuFilterSubscribeCodec) + except CatchableError: + return err("failed to mount waku filter client protocol: " & getCurrentExceptionMsg()) else: return err("failed to set node waku filter peer: " & filterNode.error) @@ -595,7 +598,10 @@ proc startRestServer(app: App, address: ValidIpAddress, port: Port, conf: WakuNo installRelayApiHandlers(server.router, app.node, cache) ## Filter REST API - if conf.filter: + if conf.filternode != "" and + app.node.wakuFilterClient != nil and + app.node.wakuFilterClientLegacy != nil: + let legacyFilterCache = rest_legacy_filter_api.MessageCache.init() rest_legacy_filter_api.installLegacyFilterRestApiHandlers(server.router, app.node, legacyFilterCache) @@ -606,7 +612,9 @@ proc startRestServer(app: App, address: ValidIpAddress, port: Port, conf: WakuNo installStoreApiHandlers(server.router, app.node) ## Light push API - rest_lightpush_api.installLightPushRequestHandler(server.router, app.node) + if conf.lightpushnode != "" and + app.node.wakuLightpushClient != nil: + rest_lightpush_api.installLightPushRequestHandler(server.router, app.node) server.start() info "Starting REST HTTP server", url = "http://" & $address & ":" & $port & "/" From 86af8fba050b0525210b2a5063eccf40a5e728b9 Mon Sep 17 00:00:00 2001 From: gabrielmer <101006718+gabrielmer@users.noreply.github.com> Date: Wed, 18 Oct 2023 17:39:53 +0300 Subject: [PATCH 083/274] chore(release): update changelog for v0.21.0 release (#2128) --- CHANGELOG.md | 80 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index bdbff70c34..ceb66d14e7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,83 @@ +## v0.21.0 (2023-10-18) + +> Note: This is the last release supporting the `--topic` option. It is being deprecated in favor of a more specific options `--pubsub-topic` & `--content-topic` + +## What's Changed + +Release highlights: +* Implemented a req/resp [protocol](https://rfc.vac.dev/spec/66/) that provides information about the node's medatadata +* Added REST APIs for Filter v2 and Lightpush protocols' services +* Ported /admin endpoint to REST +* Added a size-based retention policy for the user to set a limit for SQLite storage used + +### Features + +- add new metadata protocol ([#2062](https://github.com/waku-org/nwaku/issues/2062)) ([d5c3ade5](https://github.com/waku-org/nwaku/commit/d5c3ade5)) +- /admin rest api endpoint ([#2094](https://github.com/waku-org/nwaku/issues/2094)) ([7b5c36b1](https://github.com/waku-org/nwaku/commit/7b5c36b1)) +- **coverage:** Add simple coverage ([#2067](https://github.com/waku-org/nwaku/issues/2067)) ([d864db3f](https://github.com/waku-org/nwaku/commit/d864db3f)) +- added RELAY openapi definitions ([#2081](https://github.com/waku-org/nwaku/issues/2081)) ([56dbe2a7](https://github.com/waku-org/nwaku/commit/56dbe2a7)) +- **wakucanary:** add latency measurement using ping protocol ([#2074](https://github.com/waku-org/nwaku/issues/2074)) ([6cb9a8da](https://github.com/waku-org/nwaku/commit/6cb9a8da)) +- Autosharding API for RELAY subscriptions ([#1983](https://github.com/waku-org/nwaku/issues/1983)) ([1763b1ef](https://github.com/waku-org/nwaku/commit/1763b1ef)) +- **networkmonitor:** add ping latencies, optimize reconnections ([#2068](https://github.com/waku-org/nwaku/issues/2068)) ([ed473545](https://github.com/waku-org/nwaku/commit/ed473545)) +- peer manager can filter peers by shard ([#2063](https://github.com/waku-org/nwaku/issues/2063)) ([0d9e9fbd](https://github.com/waku-org/nwaku/commit/0d9e9fbd)) +- lightpush rest api ([#2052](https://github.com/waku-org/nwaku/issues/2052)) ([02a814bd](https://github.com/waku-org/nwaku/commit/02a814bd)) +- HTTP REST API: Filter support v2 ([#1890](https://github.com/waku-org/nwaku/issues/1890)) ([dac072f8](https://github.com/waku-org/nwaku/commit/dac072f8)) + +### Bug Fixes + +- fix wrong install of filter rest api ([#2133](https://github.com/waku-org/nwaku/issues/2133)) ([5277d122](https://github.com/waku-org/nwaku/commit/5277d122)) +- consider WS extMultiAddrs before publishing host address ([#2122](https://github.com/waku-org/nwaku/issues/2122)) ([a5b1cfd0](https://github.com/waku-org/nwaku/commit/a5b1cfd0)) +- return erring response if lightpush request is invalid ([#2083](https://github.com/waku-org/nwaku/issues/2083)) ([2c5eb427](https://github.com/waku-org/nwaku/commit/2c5eb427)) +- sqlite limited delete query bug ([#2111](https://github.com/waku-org/nwaku/issues/2111)) ([06bc433a](https://github.com/waku-org/nwaku/commit/06bc433a)) +- cluster id & sharding terminology ([#2104](https://github.com/waku-org/nwaku/issues/2104)) ([a47dc9e6](https://github.com/waku-org/nwaku/commit/a47dc9e6)) +- **ci:** update the dependency list in pre-release WF ([#2088](https://github.com/waku-org/nwaku/issues/2088)) ([e85f05b0](https://github.com/waku-org/nwaku/commit/e85f05b0)) +- **ci:** fix name of discord notify method ([aaf10e08](https://github.com/waku-org/nwaku/commit/aaf10e08)) +- update wakuv2 fleet DNS discovery enrtree ([89854a96](https://github.com/waku-org/nwaku/commit/89854a96)) +- libwaku.nim: unsubscribe -> unsubscribeAll to make it build properly ([#2082](https://github.com/waku-org/nwaku/issues/2082)) ([3264a4f5](https://github.com/waku-org/nwaku/commit/3264a4f5)) +- **archive:** dburl check ([#2071](https://github.com/waku-org/nwaku/issues/2071)) ([a27d005f](https://github.com/waku-org/nwaku/commit/a27d005f)) +- filter discv5 bootstrap nodes by shards ([#2073](https://github.com/waku-org/nwaku/issues/2073)) ([d178105d](https://github.com/waku-org/nwaku/commit/d178105d)) +- **rln-relay:** segfault when no params except rln-relay are passed in ([#2047](https://github.com/waku-org/nwaku/issues/2047)) ([45fe2d3b](https://github.com/waku-org/nwaku/commit/45fe2d3b)) +- **sqlite:** Properly set user_version to 7 so that the migration procedure is not started ([#2031](https://github.com/waku-org/nwaku/issues/2031)) ([aa3e1a66](https://github.com/waku-org/nwaku/commit/aa3e1a66)) + +### Changes + +- remove js-node tests as release candidate dependencies ([#2123](https://github.com/waku-org/nwaku/issues/2123)) ([ce5fb340](https://github.com/waku-org/nwaku/commit/ce5fb340)) +- added size based retention policy ([#2098](https://github.com/waku-org/nwaku/issues/2098)) ([25d6e52e](https://github.com/waku-org/nwaku/commit/25d6e52e)) +- Clarify running instructions ([#2038](https://github.com/waku-org/nwaku/issues/2038)) ([12e8b122](https://github.com/waku-org/nwaku/commit/12e8b122)) +- **rln:** add more hardcoded memberhips to static group ([#2108](https://github.com/waku-org/nwaku/issues/2108)) ([1042cacd](https://github.com/waku-org/nwaku/commit/1042cacd)) +- Revert lightpush error handling to allow zero peer publish again succeed ([#2099](https://github.com/waku-org/nwaku/issues/2099)) ([f05528d4](https://github.com/waku-org/nwaku/commit/f05528d4)) +- adding NetConfig test suite ([#2091](https://github.com/waku-org/nwaku/issues/2091)) ([23b49ca5](https://github.com/waku-org/nwaku/commit/23b49ca5)) +- **cbindings:** Adding cpp example that integrates the 'libwaku' ([#2079](https://github.com/waku-org/nwaku/issues/2079)) ([8455b8dd](https://github.com/waku-org/nwaku/commit/8455b8dd)) +- **networkmonitor:** refactor setConnectedPeersMetrics, make it partially concurrent, add version ([#2080](https://github.com/waku-org/nwaku/issues/2080)) ([c5aa9704](https://github.com/waku-org/nwaku/commit/c5aa9704)) +- resolving DNS IP and publishing it when no extIp is provided ([#2030](https://github.com/waku-org/nwaku/issues/2030)) ([7797b2cd](https://github.com/waku-org/nwaku/commit/7797b2cd)) +- Adding -d:postgres flag when creating a Docker image for release and PRs ([#2076](https://github.com/waku-org/nwaku/issues/2076)) ([7a376f59](https://github.com/waku-org/nwaku/commit/7a376f59)) +- Moved external APIs out of node ([#2069](https://github.com/waku-org/nwaku/issues/2069)) ([3e72e830](https://github.com/waku-org/nwaku/commit/3e72e830)) +- bump nim-libp2p, nim-toml-serialization, nim-unicodedb, nim-unittest2, nim-websock, nim-zlib, & nimbus-build-system ([#2065](https://github.com/waku-org/nwaku/issues/2065)) ([dc25057a](https://github.com/waku-org/nwaku/commit/dc25057a)) +- **ci:** add js-waku as a dependency for pre-release createion ([#2022](https://github.com/waku-org/nwaku/issues/2022)) ([28b04000](https://github.com/waku-org/nwaku/commit/28b04000)) +- Updating nim-chronicles, nim-chronos, nim-presto, nimcrypto, nim-libp2p, and nim-nat-transversal ([#2043](https://github.com/waku-org/nwaku/issues/2043)) ([f617cd97](https://github.com/waku-org/nwaku/commit/f617cd97)) +- **cbindings:** Thread-safe communication between the main thread and the Waku Thread ([#1978](https://github.com/waku-org/nwaku/issues/1978)) ([72f90663](https://github.com/waku-org/nwaku/commit/72f90663)) +- **rln-relay:** logs, updated submodule, leaves_set metric ([#2024](https://github.com/waku-org/nwaku/issues/2024)) ([2e515a06](https://github.com/waku-org/nwaku/commit/2e515a06)) +- **release:** update changelog for v0.20.0 release ([#2026](https://github.com/waku-org/nwaku/issues/2026)) ([9085b1b3](https://github.com/waku-org/nwaku/commit/9085b1b3)) +- **postgres:** not loading the libpq library by default & better user feedback ([#2028](https://github.com/waku-org/nwaku/issues/2028)) ([e8602021](https://github.com/waku-org/nwaku/commit/e8602021)) +- move SubscriptionManager under waku_core ([#2025](https://github.com/waku-org/nwaku/issues/2025)) ([563b2b20](https://github.com/waku-org/nwaku/commit/563b2b20)) +- **README:** List possible WSL Issue ([#1995](https://github.com/waku-org/nwaku/issues/1995)) ([ebe715e9](https://github.com/waku-org/nwaku/commit/ebe715e9)) +- **ci:** add js-waku test to pre-release workflow ([#2017](https://github.com/waku-org/nwaku/issues/2017)) ([e8776fd6](https://github.com/waku-org/nwaku/commit/e8776fd6)) + +This release supports the following [libp2p protocols](https://docs.libp2p.io/concepts/protocols/): +| Protocol | Spec status | Protocol id | +| ---: | :---: | :--- | +| [`11/WAKU2-RELAY`](https://rfc.vac.dev/spec/11/) | `stable` | `/vac/waku/relay/2.0.0` | +| [`12/WAKU2-FILTER`](https://rfc.vac.dev/spec/12/) | `draft` | `/vac/waku/filter/2.0.0-beta1`
`/vac/waku/filter-subscribe/2.0.0-beta1`
`/vac/waku/filter-push/2.0.0-beta1` | +| [`13/WAKU2-STORE`](https://rfc.vac.dev/spec/13/) | `draft` | `/vac/waku/store/2.0.0-beta4` | +| [`19/WAKU2-LIGHTPUSH`](https://rfc.vac.dev/spec/19/) | `draft` | `/vac/waku/lightpush/2.0.0-beta1` | + +The Waku v1 implementation has been removed from this repository and can be found in a separate [Waku Legacy](https://github.com/waku-org/waku-legacy) repository. + +## Upgrade instructions + +* Note that the `--topic` CLI option is being deprecated in favor of a more specific options `--pubsub-topic` & `--content-topic`. This is the last release supporting the `--topic` option. +* The size-based retention policy has been tested with SQLite storage and is still on validation phases for Postgres + ## 2023-09-14 v0.20.0 > Note: IP address 0.0.0.0 is no longer advertised by a node From 459331e3a6c72a711003700e4c89f5d834e677e5 Mon Sep 17 00:00:00 2001 From: gabrielmer <101006718+gabrielmer@users.noreply.github.com> Date: Thu, 19 Oct 2023 10:52:56 +0300 Subject: [PATCH 084/274] chore: adding postgres flag to manual docker job instructions (#2139) --- docs/contributors/release-process.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/contributors/release-process.md b/docs/contributors/release-process.md index 162aafdc29..795ab816c3 100644 --- a/docs/contributors/release-process.md +++ b/docs/contributors/release-process.md @@ -76,7 +76,7 @@ Ensure all items in this list are ticked: > - `MAKE_TARGET`: `wakunode2` > - `IMAGE_TAG`: the release tag (e.g. `v0.16.0`) > - `IMAGE_NAME`: `wakuorg/nwaku` - > - `NIMFLAGS`: `--colors:off -d:disableMarchNative -d:chronicles_colors:none` + > - `NIMFLAGS`: `--colors:off -d:disableMarchNative -d:chronicles_colors:none -d:postgres` > - `GIT_REF` the release tag (e.g. `v0.16.0`) 3. Deploy the release to appropriate fleets: - Inform clients From 1669f710ce8f48d1b7fb06ca98433f2b25a44e6d Mon Sep 17 00:00:00 2001 From: Abhimanyu Date: Thu, 19 Oct 2023 11:59:17 +0200 Subject: [PATCH 085/274] feat: amending computeDigest func. + related test cases (#2132) * feat: amending computeDigest func. + related test cases * minor fixes * minor fixes v1: testcase saga continues --------- Co-authored-by: Vaclav Pavlin --- tests/waku_archive/test_driver_postgres.nim | 12 ++-- .../test_driver_postgres_query.nim | 62 +++++++++---------- .../test_driver_queue_pagination.nim | 4 +- .../waku_archive/test_driver_queue_query.nim | 56 ++++++++--------- tests/waku_archive/test_driver_sqlite.nim | 2 +- .../waku_archive/test_driver_sqlite_query.nim | 56 ++++++++--------- tests/waku_archive/test_retention_policy.nim | 6 +- tests/waku_archive/test_waku_archive.nim | 6 +- tests/waku_store/test_wakunode_store.nim | 4 +- tests/wakunode_jsonrpc/test_jsonrpc_store.nim | 2 +- tests/wakunode_rest/test_rest_store.nim | 2 +- waku/waku_archive/archive.nim | 2 +- waku/waku_archive/common.nim | 6 +- .../driver/queue_driver/index.nim | 2 +- waku/waku_store/client.nim | 2 +- 15 files changed, 113 insertions(+), 111 deletions(-) diff --git a/tests/waku_archive/test_driver_postgres.nim b/tests/waku_archive/test_driver_postgres.nim index d0e8d7d196..149c43aa05 100644 --- a/tests/waku_archive/test_driver_postgres.nim +++ b/tests/waku_archive/test_driver_postgres.nim @@ -19,7 +19,7 @@ proc computeTestCursor(pubsubTopic: PubsubTopic, pubsubTopic: pubsubTopic, senderTime: message.timestamp, storeTime: message.timestamp, - digest: computeDigest(message) + digest: computeDigest(message, pubsubTopic) ) suite "Postgres driver": @@ -78,7 +78,7 @@ suite "Postgres driver": let msg = fakeWakuMessage(contentTopic=contentTopic) - let computedDigest = computeDigest(msg) + let computedDigest = computeDigest(msg, DefaultPubsubTopic) let putRes = await driver.put(DefaultPubsubTopic, msg, computedDigest, msg.timestamp) assert putRes.isOk(), putRes.error @@ -113,12 +113,12 @@ suite "Postgres driver": let msg1 = fakeWakuMessage(contentTopic=contentTopic1) - var putRes = await driver.put(pubsubTopic1, msg1, computeDigest(msg1), msg1.timestamp) + var putRes = await driver.put(pubsubTopic1, msg1, computeDigest(msg1,pubsubTopic1), msg1.timestamp) assert putRes.isOk(), putRes.error let msg2 = fakeWakuMessage(contentTopic=contentTopic2) - putRes = await driver.put(pubsubTopic2, msg2, computeDigest(msg2), msg2.timestamp) + putRes = await driver.put(pubsubTopic2, msg2, computeDigest(msg2, pubsubTopic2), msg2.timestamp) assert putRes.isOk(), putRes.error let countMessagesRes = await driver.getMessagesCount() @@ -197,9 +197,9 @@ suite "Postgres driver": let msg2 = fakeWakuMessage(ts = now) var putRes = await driver.put(DefaultPubsubTopic, - msg1, computeDigest(msg1), msg1.timestamp) + msg1, computeDigest(msg1, DefaultPubsubTopic), msg1.timestamp) assert putRes.isOk(), putRes.error putRes = await driver.put(DefaultPubsubTopic, - msg2, computeDigest(msg2), msg2.timestamp) + msg2, computeDigest(msg2, DefaultPubsubTopic), msg2.timestamp) require not putRes.isOk() diff --git a/tests/waku_archive/test_driver_postgres_query.nim b/tests/waku_archive/test_driver_postgres_query.nim index cbc1d16d91..ea174eab05 100644 --- a/tests/waku_archive/test_driver_postgres_query.nim +++ b/tests/waku_archive/test_driver_postgres_query.nim @@ -37,7 +37,7 @@ proc computeTestCursor(pubsubTopic: PubsubTopic, message: WakuMessage): ArchiveC pubsubTopic: pubsubTopic, senderTime: message.timestamp, storeTime: message.timestamp, - digest: computeDigest(message) + digest: computeDigest(message, pubsubTopic) ) suite "Postgres driver - query by content topic": @@ -65,7 +65,7 @@ suite "Postgres driver - query by content topic": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -107,7 +107,7 @@ suite "Postgres driver - query by content topic": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -150,7 +150,7 @@ suite "Postgres driver - query by content topic": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -195,7 +195,7 @@ suite "Postgres driver - query by content topic": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -233,7 +233,7 @@ suite "Postgres driver - query by content topic": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -260,7 +260,7 @@ suite "Postgres driver - query by content topic": for t in 0..<40: let msg = fakeWakuMessage(@[byte t], DefaultContentTopic, ts=ts(t)) - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -306,7 +306,7 @@ suite "Postgres driver - query by pubsub topic": for row in messages: let (topic, msg) = row - require (await driver.put(topic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(topic, msg, computeDigest(msg, topic), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -351,7 +351,7 @@ suite "Postgres driver - query by pubsub topic": for row in messages: let (topic, msg) = row - require (await driver.put(topic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(topic, msg, computeDigest(msg, topic), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -396,7 +396,7 @@ suite "Postgres driver - query by pubsub topic": for row in messages: let (topic, msg) = row - require (await driver.put(topic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(topic, msg, computeDigest(msg, topic), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -443,7 +443,7 @@ suite "Postgres driver - query by cursor": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp)).isOk() let cursor = computeTestCursor(DefaultPubsubTopic, expected[4]) @@ -488,7 +488,7 @@ suite "Postgres driver - query by cursor": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp)).isOk() let cursor = computeTestCursor(DefaultPubsubTopic, expected[4]) @@ -531,7 +531,7 @@ suite "Postgres driver - query by cursor": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp)).isOk() let cursor = computeTestCursor(DefaultPubsubTopic, expected[4]) @@ -575,7 +575,7 @@ suite "Postgres driver - query by cursor": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp)).isOk() let cursor = computeTestCursor(DefaultPubsubTopic, expected[6]) @@ -626,7 +626,7 @@ suite "Postgres driver - query by cursor": for row in messages: let (topic, msg) = row - require (await driver.put(topic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(topic, msg, computeDigest(msg, topic), msg.timestamp)).isOk() let cursor = computeTestCursor(expected[5][0], expected[5][1]) @@ -678,7 +678,7 @@ suite "Postgres driver - query by cursor": for row in messages: let (topic, msg) = row - require (await driver.put(topic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(topic, msg, computeDigest(msg, topic), msg.timestamp)).isOk() let cursor = computeTestCursor(expected[6][0], expected[6][1]) @@ -726,7 +726,7 @@ suite "Postgres driver - query by time range": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -768,7 +768,7 @@ suite "Postgres driver - query by time range": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -816,7 +816,7 @@ suite "Postgres driver - query by time range": for row in messages: let (topic, msg) = row - require (await driver.put(topic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(topic, msg, computeDigest(msg, topic), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -861,7 +861,7 @@ suite "Postgres driver - query by time range": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -904,7 +904,7 @@ suite "Postgres driver - query by time range": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -949,7 +949,7 @@ suite "Postgres driver - query by time range": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -994,7 +994,7 @@ suite "Postgres driver - query by time range": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp)).isOk() let cursor = computeTestCursor(DefaultPubsubTopic, expected[3]) @@ -1042,7 +1042,7 @@ suite "Postgres driver - query by time range": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp)).isOk() let cursor = computeTestCursor(DefaultPubsubTopic, expected[6]) @@ -1093,7 +1093,7 @@ suite "Postgres driver - query by time range": for row in messages: let (topic, msg) = row - require (await driver.put(topic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(topic, msg, computeDigest(msg, topic), msg.timestamp)).isOk() let cursor = computeTestCursor(DefaultPubsubTopic, expected[1][1]) @@ -1147,7 +1147,7 @@ suite "Postgres driver - query by time range": for row in messages: let (topic, msg) = row - require (await driver.put(topic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(topic, msg, computeDigest(msg, topic), msg.timestamp)).isOk() let cursor = computeTestCursor(expected[7][0], expected[7][1]) @@ -1201,7 +1201,7 @@ suite "Postgres driver - query by time range": for row in messages: let (topic, msg) = row - require (await driver.put(topic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(topic, msg, computeDigest(msg, topic), msg.timestamp)).isOk() let cursor = computeTestCursor(expected[1][0], expected[1][1]) @@ -1256,7 +1256,7 @@ suite "Postgres driver - query by time range": for row in messages: let (topic, msg) = row - require (await driver.put(topic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(topic, msg, computeDigest(msg, topic), msg.timestamp)).isOk() let cursor = computeTestCursor(expected[1][0], expected[1][1]) @@ -1306,7 +1306,7 @@ suite "Postgres driver - retention policy": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp)).isOk() var res = await driver.getOldestMessageTimestamp() assert res.isOk(), res.error @@ -1341,7 +1341,7 @@ suite "Postgres driver - retention policy": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp)).isOk() var res = await driver.getMessagesCount() assert res.isOk(), res.error @@ -1378,7 +1378,7 @@ suite "Postgres driver - retention policy": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp)).isOk() var res = await driver.getMessagesCount() assert res.isOk(), res.error diff --git a/tests/waku_archive/test_driver_queue_pagination.nim b/tests/waku_archive/test_driver_queue_pagination.nim index bca6940286..e073c1f451 100644 --- a/tests/waku_archive/test_driver_queue_pagination.nim +++ b/tests/waku_archive/test_driver_queue_pagination.nim @@ -156,7 +156,7 @@ procSuite "Queue driver - pagination": pubsubTopic: DefaultPubsubTopic, senderTime: msg.timestamp, storeTime: msg.timestamp, - digest: computeDigest(msg) + digest: computeDigest(msg, DefaultPubsubTopic) ).toIndex() let @@ -337,7 +337,7 @@ procSuite "Queue driver - pagination": pubsubTopic: DefaultPubsubTopic, senderTime: msg.timestamp, storeTime: msg.timestamp, - digest: computeDigest(msg) + digest: computeDigest(msg, DefaultPubsubTopic) ).toIndex() let diff --git a/tests/waku_archive/test_driver_queue_query.nim b/tests/waku_archive/test_driver_queue_query.nim index 5f25d6d9ae..1d7294c2fc 100644 --- a/tests/waku_archive/test_driver_queue_query.nim +++ b/tests/waku_archive/test_driver_queue_query.nim @@ -29,7 +29,7 @@ proc computeTestCursor(pubsubTopic: PubsubTopic, message: WakuMessage): ArchiveC pubsubTopic: pubsubTopic, senderTime: message.timestamp, storeTime: message.timestamp, - digest: computeDigest(message) + digest: computeDigest(message, pubsubTopic) ) @@ -58,7 +58,7 @@ suite "Queue driver - query by content topic": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp) + let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp) require retFut.isOk() ## When @@ -102,7 +102,7 @@ suite "Queue driver - query by content topic": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp) + let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp) require retFut.isOk() ## When @@ -147,7 +147,7 @@ suite "Queue driver - query by content topic": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp) + let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp) require retFut.isOk() ## When @@ -194,7 +194,7 @@ suite "Queue driver - query by content topic": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp) + let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp) require retFut.isOk() ## When @@ -234,7 +234,7 @@ suite "Queue driver - query by content topic": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp) + let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp) require retFut.isOk() ## When @@ -263,7 +263,7 @@ suite "Queue driver - query by content topic": for t in 0..<40: let msg = fakeWakuMessage(@[byte t], DefaultContentTopic, ts=ts(t)) - let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp) + let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp) require retFut.isOk() ## When @@ -312,7 +312,7 @@ suite "SQLite driver - query by pubsub topic": for row in messages: let (topic, msg) = row - let retFut = waitFor driver.put(topic, msg, computeDigest(msg), msg.timestamp) + let retFut = waitFor driver.put(topic, msg, computeDigest(msg, topic), msg.timestamp) require retFut.isOk() ## When @@ -359,7 +359,7 @@ suite "SQLite driver - query by pubsub topic": for row in messages: let (topic, msg) = row - let retFut = waitFor driver.put(topic, msg, computeDigest(msg), msg.timestamp) + let retFut = waitFor driver.put(topic, msg, computeDigest(msg, topic), msg.timestamp) require retFut.isOk() ## When @@ -406,7 +406,7 @@ suite "SQLite driver - query by pubsub topic": for row in messages: let (topic, msg) = row - let retFut = waitFor driver.put(topic, msg, computeDigest(msg), msg.timestamp) + let retFut = waitFor driver.put(topic, msg, computeDigest(msg, topic), msg.timestamp) require retFut.isOk() ## When @@ -456,7 +456,7 @@ suite "Queue driver - query by cursor": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp) + let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp) require retFut.isOk() let cursor = computeTestCursor(DefaultPubsubTopic, expected[4]) @@ -503,7 +503,7 @@ suite "Queue driver - query by cursor": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp) + let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp) require retFut.isOk() let cursor = computeTestCursor(DefaultPubsubTopic, expected[4]) @@ -548,7 +548,7 @@ suite "Queue driver - query by cursor": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp) + let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp) require retFut.isOk() let cursor = computeTestCursor(DefaultPubsubTopic, expected[4]) @@ -594,7 +594,7 @@ suite "Queue driver - query by cursor": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp) + let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp) require retFut.isOk() let cursor = computeTestCursor(DefaultPubsubTopic, expected[6]) @@ -647,7 +647,7 @@ suite "Queue driver - query by cursor": for row in messages: let (topic, msg) = row - let retFut = waitFor driver.put(topic, msg, computeDigest(msg), msg.timestamp) + let retFut = waitFor driver.put(topic, msg, computeDigest(msg, topic), msg.timestamp) require retFut.isOk() let cursor = computeTestCursor(expected[5][0], expected[5][1]) @@ -701,7 +701,7 @@ suite "Queue driver - query by cursor": for row in messages: let (topic, msg) = row - let retFut = waitFor driver.put(topic, msg, computeDigest(msg), msg.timestamp) + let retFut = waitFor driver.put(topic, msg, computeDigest(msg, topic), msg.timestamp) require retFut.isOk() let cursor = computeTestCursor(expected[6][0], expected[6][1]) @@ -752,7 +752,7 @@ suite "Queue driver - query by time range": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp) + let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp) require retFut.isOk() ## When @@ -796,7 +796,7 @@ suite "Queue driver - query by time range": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp) + let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp) require retFut.isOk() ## When @@ -846,7 +846,7 @@ suite "Queue driver - query by time range": for row in messages: let (topic, msg) = row - let retFut = waitFor driver.put(topic, msg, computeDigest(msg), msg.timestamp) + let retFut = waitFor driver.put(topic, msg, computeDigest(msg, topic), msg.timestamp) require retFut.isOk() ## When @@ -893,7 +893,7 @@ suite "Queue driver - query by time range": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp) + let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp) require retFut.isOk() ## When @@ -938,7 +938,7 @@ suite "Queue driver - query by time range": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp) + let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp) require retFut.isOk() ## When @@ -985,7 +985,7 @@ suite "Queue driver - query by time range": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp) + let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp) require retFut.isOk() ## When @@ -1032,7 +1032,7 @@ suite "Queue driver - query by time range": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp) + let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp) require retFut.isOk() let cursor = computeTestCursor(DefaultPubsubTopic, expected[3]) @@ -1082,7 +1082,7 @@ suite "Queue driver - query by time range": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp) + let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp) require retFut.isOk() let cursor = computeTestCursor(DefaultPubsubTopic, expected[6]) @@ -1135,7 +1135,7 @@ suite "Queue driver - query by time range": for row in messages: let (topic, msg) = row - let retFut = waitFor driver.put(topic, msg, computeDigest(msg), msg.timestamp) + let retFut = waitFor driver.put(topic, msg, computeDigest(msg, topic), msg.timestamp) require retFut.isOk() let cursor = computeTestCursor(DefaultPubsubTopic, expected[1][1]) @@ -1191,7 +1191,7 @@ suite "Queue driver - query by time range": for row in messages: let (topic, msg) = row - let retFut = waitFor driver.put(topic, msg, computeDigest(msg), msg.timestamp) + let retFut = waitFor driver.put(topic, msg, computeDigest(msg, topic), msg.timestamp) require retFut.isOk() let cursor = computeTestCursor(expected[7][0], expected[7][1]) @@ -1247,7 +1247,7 @@ suite "Queue driver - query by time range": for row in messages: let (topic, msg) = row - let retFut = waitFor driver.put(topic, msg, computeDigest(msg), msg.timestamp) + let retFut = waitFor driver.put(topic, msg, computeDigest(msg, topic), msg.timestamp) require retFut.isOk() let cursor = computeTestCursor(expected[1][0], expected[1][1]) @@ -1304,7 +1304,7 @@ suite "Queue driver - query by time range": for row in messages: let (topic, msg) = row - let retFut = waitFor driver.put(topic, msg, computeDigest(msg), msg.timestamp) + let retFut = waitFor driver.put(topic, msg, computeDigest(msg, topic), msg.timestamp) require retFut.isOk() let cursor = computeTestCursor(expected[1][0], expected[1][1]) diff --git a/tests/waku_archive/test_driver_sqlite.nim b/tests/waku_archive/test_driver_sqlite.nim index 7c1bd2e1b7..0fae560e03 100644 --- a/tests/waku_archive/test_driver_sqlite.nim +++ b/tests/waku_archive/test_driver_sqlite.nim @@ -50,7 +50,7 @@ suite "SQLite driver": let msg = fakeWakuMessage(contentTopic=contentTopic) ## When - let putRes = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp) + let putRes = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp) ## Then check: diff --git a/tests/waku_archive/test_driver_sqlite_query.nim b/tests/waku_archive/test_driver_sqlite_query.nim index 9cf21cfca7..2ed20f0fac 100644 --- a/tests/waku_archive/test_driver_sqlite_query.nim +++ b/tests/waku_archive/test_driver_sqlite_query.nim @@ -33,7 +33,7 @@ proc computeTestCursor(pubsubTopic: PubsubTopic, message: WakuMessage): ArchiveC pubsubTopic: pubsubTopic, senderTime: message.timestamp, storeTime: message.timestamp, - digest: computeDigest(message) + digest: computeDigest(message, pubsubTopic) ) @@ -62,7 +62,7 @@ suite "SQLite driver - query by content topic": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -105,7 +105,7 @@ suite "SQLite driver - query by content topic": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -149,7 +149,7 @@ suite "SQLite driver - query by content topic": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -195,7 +195,7 @@ suite "SQLite driver - query by content topic": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -234,7 +234,7 @@ suite "SQLite driver - query by content topic": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -262,7 +262,7 @@ suite "SQLite driver - query by content topic": for t in 0..<40: let msg = fakeWakuMessage(@[byte t], DefaultContentTopic, ts=ts(t)) - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -310,7 +310,7 @@ suite "SQLite driver - query by pubsub topic": for row in messages: let (topic, msg) = row - require (await driver.put(topic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(topic, msg, computeDigest(msg, topic), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -356,7 +356,7 @@ suite "SQLite driver - query by pubsub topic": for row in messages: let (topic, msg) = row - require (await driver.put(topic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(topic, msg, computeDigest(msg, topic), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -402,7 +402,7 @@ suite "SQLite driver - query by pubsub topic": for row in messages: let (topic, msg) = row - require (await driver.put(topic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(topic, msg, computeDigest(msg, topic), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -451,7 +451,7 @@ suite "SQLite driver - query by cursor": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp)).isOk() let cursor = computeTestCursor(DefaultPubsubTopic, expected[4]) @@ -497,7 +497,7 @@ suite "SQLite driver - query by cursor": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp)).isOk() let cursor = computeTestCursor(DefaultPubsubTopic, expected[4]) @@ -541,7 +541,7 @@ suite "SQLite driver - query by cursor": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp)).isOk() let cursor = computeTestCursor(DefaultPubsubTopic, expected[4]) @@ -586,7 +586,7 @@ suite "SQLite driver - query by cursor": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp)).isOk() let cursor = computeTestCursor(DefaultPubsubTopic, expected[6]) @@ -638,7 +638,7 @@ suite "SQLite driver - query by cursor": for row in messages: let (topic, msg) = row - require (await driver.put(topic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(topic, msg, computeDigest(msg, topic), msg.timestamp)).isOk() let cursor = computeTestCursor(expected[5][0], expected[5][1]) @@ -691,7 +691,7 @@ suite "SQLite driver - query by cursor": for row in messages: let (topic, msg) = row - require (await driver.put(topic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(topic, msg, computeDigest(msg, topic), msg.timestamp)).isOk() let cursor = computeTestCursor(expected[6][0], expected[6][1]) @@ -741,7 +741,7 @@ suite "SQLite driver - query by time range": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -784,7 +784,7 @@ suite "SQLite driver - query by time range": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -833,7 +833,7 @@ suite "SQLite driver - query by time range": for row in messages: let (topic, msg) = row - require (await driver.put(topic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(topic, msg, computeDigest(msg, topic), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -879,7 +879,7 @@ suite "SQLite driver - query by time range": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -923,7 +923,7 @@ suite "SQLite driver - query by time range": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -969,7 +969,7 @@ suite "SQLite driver - query by time range": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -1015,7 +1015,7 @@ suite "SQLite driver - query by time range": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp)).isOk() let cursor = computeTestCursor(DefaultPubsubTopic, expected[3]) @@ -1064,7 +1064,7 @@ suite "SQLite driver - query by time range": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp)).isOk() let cursor = computeTestCursor(DefaultPubsubTopic, expected[6]) @@ -1116,7 +1116,7 @@ suite "SQLite driver - query by time range": for row in messages: let (topic, msg) = row - require (await driver.put(topic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(topic, msg, computeDigest(msg, topic), msg.timestamp)).isOk() let cursor = computeTestCursor(DefaultPubsubTopic, expected[1][1]) @@ -1171,7 +1171,7 @@ suite "SQLite driver - query by time range": for row in messages: let (topic, msg) = row - require (await driver.put(topic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(topic, msg, computeDigest(msg, topic), msg.timestamp)).isOk() let cursor = computeTestCursor(expected[7][0], expected[7][1]) @@ -1226,7 +1226,7 @@ suite "SQLite driver - query by time range": for row in messages: let (topic, msg) = row - require (await driver.put(topic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(topic, msg, computeDigest(msg, topic), msg.timestamp)).isOk() let cursor = computeTestCursor(expected[1][0], expected[1][1]) @@ -1282,7 +1282,7 @@ suite "SQLite driver - query by time range": for row in messages: let (topic, msg) = row - require (await driver.put(topic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(topic, msg, computeDigest(msg, topic), msg.timestamp)).isOk() let cursor = computeTestCursor(expected[1][0], expected[1][1]) diff --git a/tests/waku_archive/test_retention_policy.nim b/tests/waku_archive/test_retention_policy.nim index 0927a15e80..1e6bab4614 100644 --- a/tests/waku_archive/test_retention_policy.nim +++ b/tests/waku_archive/test_retention_policy.nim @@ -41,7 +41,7 @@ suite "Waku Archive - Retention policy": ## When for i in 1..capacity+excess: let msg = fakeWakuMessage(payload= @[byte i], contentTopic=DefaultContentTopic, ts=Timestamp(i)) - putFutures.add(driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)) + putFutures.add(driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp)) discard waitFor allFinished(putFutures) @@ -88,7 +88,7 @@ suite "Waku Archive - Retention policy": # create a number of messages so that the size of the DB overshoots for i in 1..excess: let msg = fakeWakuMessage(payload= @[byte i], contentTopic=DefaultContentTopic, ts=Timestamp(i)) - putFutures.add(driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)) + putFutures.add(driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp)) # waitFor is used to synchronously wait for the futures to complete. discard waitFor allFinished(putFutures) @@ -139,7 +139,7 @@ suite "Waku Archive - Retention policy": ## When for msg in messages: - require (waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp)).isOk() require (waitFor retentionPolicy.execute(driver)).isOk() ## Then diff --git a/tests/waku_archive/test_waku_archive.nim b/tests/waku_archive/test_waku_archive.nim index dcac1484b4..681c93c061 100644 --- a/tests/waku_archive/test_waku_archive.nim +++ b/tests/waku_archive/test_waku_archive.nim @@ -30,7 +30,7 @@ proc computeTestCursor(pubsubTopic: PubsubTopic, message: WakuMessage): ArchiveC pubsubTopic: pubsubTopic, senderTime: message.timestamp, storeTime: message.timestamp, - digest: computeDigest(message) + digest: computeDigest(message, pubsubTopic) ) @@ -152,7 +152,7 @@ procSuite "Waku Archive - find messages": archive = newTestWakuArchive(driver) for msg in msgListA: - require (waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp)).isOk() archive @@ -446,7 +446,7 @@ procSuite "Waku Archive - find messages": ] for msg in msgList: - require (waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp)).isOk() ## Given let req = ArchiveQuery(contentTopics: @[DefaultContentTopic]) diff --git a/tests/waku_store/test_wakunode_store.nim b/tests/waku_store/test_wakunode_store.nim index 117a1cc93b..9fbe234bd3 100644 --- a/tests/waku_store/test_wakunode_store.nim +++ b/tests/waku_store/test_wakunode_store.nim @@ -34,7 +34,7 @@ proc computeTestCursor(pubsubTopic: PubsubTopic, message: WakuMessage): HistoryC pubsubTopic: pubsubTopic, senderTime: message.timestamp, storeTime: message.timestamp, - digest: waku_archive.computeDigest(message) + digest: waku_archive.computeDigest(message, pubsubTopic) ) procSuite "WakuNode - Store": @@ -57,7 +57,7 @@ procSuite "WakuNode - Store": let driver = newTestArchiveDriver() for msg in msgListA: - let msg_digest = waku_archive.computeDigest(msg) + let msg_digest = waku_archive.computeDigest(msg, DefaultPubsubTopic) require (waitFor driver.put(DefaultPubsubTopic, msg, msg_digest, msg.timestamp)).isOk() driver diff --git a/tests/wakunode_jsonrpc/test_jsonrpc_store.nim b/tests/wakunode_jsonrpc/test_jsonrpc_store.nim index de04f83f0a..7c3865d2f7 100644 --- a/tests/wakunode_jsonrpc/test_jsonrpc_store.nim +++ b/tests/wakunode_jsonrpc/test_jsonrpc_store.nim @@ -24,7 +24,7 @@ import proc put(store: ArchiveDriver, pubsubTopic: PubsubTopic, message: WakuMessage): Future[Result[void, string]] = let - digest = waku_archive.computeDigest(message) + digest = waku_archive.computeDigest(message, pubsubTopic) receivedTime = if message.timestamp > 0: message.timestamp else: getNanosecondTime(getTime().toUnixFloat()) diff --git a/tests/wakunode_rest/test_rest_store.nim b/tests/wakunode_rest/test_rest_store.nim index 8e61e2fd1c..cf1109ff92 100644 --- a/tests/wakunode_rest/test_rest_store.nim +++ b/tests/wakunode_rest/test_rest_store.nim @@ -32,7 +32,7 @@ logScope: proc put(store: ArchiveDriver, pubsubTopic: PubsubTopic, message: WakuMessage): Future[Result[void, string]] = let - digest = waku_archive.computeDigest(message) + digest = waku_archive.computeDigest(message, pubsubTopic) receivedTime = if message.timestamp > 0: message.timestamp else: getNanosecondTime(getTime().toUnixFloat()) diff --git a/waku/waku_archive/archive.nim b/waku/waku_archive/archive.nim index b6e8aad3fa..8d236caf7e 100644 --- a/waku/waku_archive/archive.nim +++ b/waku/waku_archive/archive.nim @@ -100,7 +100,7 @@ proc handleMessage*(w: WakuArchive, block: let - msgDigest = computeDigest(msg) + msgDigest = computeDigest(msg, pubsubTopic) msgReceivedTime = if msg.timestamp > 0: msg.timestamp else: getNanosecondTime(getTime().toUnixFloat()) diff --git a/waku/waku_archive/common.nim b/waku/waku_archive/common.nim index 29d2bfd220..ae5bd92616 100644 --- a/waku/waku_archive/common.nim +++ b/waku/waku_archive/common.nim @@ -18,13 +18,15 @@ import type MessageDigest* = MDigest[256] -proc computeDigest*(msg: WakuMessage): MessageDigest = +proc computeDigest*(msg: WakuMessage, pubSubTopic: string): MessageDigest = var ctx: sha256 ctx.init() defer: ctx.clear() - ctx.update(msg.contentTopic.toBytes()) + ctx.update(pubSubTopic.toBytes()) ctx.update(msg.payload) + ctx.update(msg.contentTopic.toBytes()) + ctx.update(msg.meta) # Computes the hash return ctx.finish() diff --git a/waku/waku_archive/driver/queue_driver/index.nim b/waku/waku_archive/driver/queue_driver/index.nim index c36d7ce1ff..e04e0246de 100644 --- a/waku/waku_archive/driver/queue_driver/index.nim +++ b/waku/waku_archive/driver/queue_driver/index.nim @@ -21,7 +21,7 @@ type Index* = object proc compute*(T: type Index, msg: WakuMessage, receivedTime: Timestamp, pubsubTopic: PubsubTopic): T = ## Takes a WakuMessage with received timestamp and returns its Index. let - digest = computeDigest(msg) + digest = computeDigest(msg, pubsubTopic) senderTime = msg.timestamp Index( diff --git a/waku/waku_store/client.nim b/waku/waku_store/client.nim index 74f51fe7a2..1c3ec5a41e 100644 --- a/waku/waku_store/client.nim +++ b/waku/waku_store/client.nim @@ -153,7 +153,7 @@ when defined(waku_exp_store_resume): proc put(store: ArchiveDriver, pubsubTopic: PubsubTopic, message: WakuMessage): Result[void, string] = let - digest = waku_archive.computeDigest(message) + digest = waku_archive.computeDigest(message, pubsubTopic) receivedTime = if message.timestamp > 0: message.timestamp else: getNanosecondTime(getTime().toUnixFloat()) From 1e8f577104fc2dd03fcd3238542fd19948183075 Mon Sep 17 00:00:00 2001 From: Ivan FB <128452529+Ivansete-status@users.noreply.github.com> Date: Mon, 23 Oct 2023 08:37:28 +0200 Subject: [PATCH 086/274] chore(cbindings): avoid using global var in libwaku.nim (#2118) * libwaku: Avoid global variable and changing callback signature * Better signature for the callback. Two new parameters have been added: one aimed to allow passing the caller result code; the other param is to pass an optional userData pointer that might need to be linked locally with the Context object. For example, this is needed in Rust to make the passed closures live as long as the Context. * waku_example.c: adaptation to the latest changes * libwaku.h: removing 'waku_set_user_data' function * libwaku.nim: renaming parameter in WakuCallBack (isOk -> callerRet) --- examples/cbindings/waku_example.c | 77 ++++++++----- library/libwaku.h | 66 ++++++++---- library/libwaku.nim | 161 +++++++++++++++++++--------- library/waku_thread/waku_thread.nim | 14 +-- 4 files changed, 213 insertions(+), 105 deletions(-) diff --git a/examples/cbindings/waku_example.c b/examples/cbindings/waku_example.c index b58dbc9a61..ec1b8f9d32 100644 --- a/examples/cbindings/waku_example.c +++ b/examples/cbindings/waku_example.c @@ -30,6 +30,12 @@ struct ConfigNode { char peers[2048]; }; +// libwaku Context +void* ctx; + +// For the case of C language we don't need to store a particular userData +void* userData = NULL; + // Arguments parsing static char doc[] = "\nC example that shows how to use the waku library."; static char args_doc[] = ""; @@ -78,8 +84,18 @@ static error_t parse_opt(int key, char *arg, struct argp_state *state) { static struct argp argp = { options, parse_opt, args_doc, doc, 0, 0, 0 }; +void event_handler(int callerRet, const char* msg, size_t len) { + if (callerRet == RET_ERR) { + printf("Error: %s\n", msg); + exit(1); + } + else if (callerRet == RET_OK) { + printf("Receiving message %s\n", msg); + } +} + char* contentTopic = NULL; -void handle_content_topic(const char* msg, size_t len) { +void handle_content_topic(int callerRet, const char* msg, size_t len) { if (contentTopic != NULL) { free(contentTopic); } @@ -89,7 +105,7 @@ void handle_content_topic(const char* msg, size_t len) { } char* publishResponse = NULL; -void handle_publish_ok(const char* msg, size_t len) { +void handle_publish_ok(int callerRet, const char* msg, size_t len) { printf("Publish Ok: %s %lu\n", msg, len); if (publishResponse != NULL) { @@ -100,22 +116,19 @@ void handle_publish_ok(const char* msg, size_t len) { strcpy(publishResponse, msg); } -void handle_error(const char* msg, size_t len) { - printf("Error: %s\n", msg); - exit(1); -} - #define MAX_MSG_SIZE 65535 void publish_message(char* pubsubTopic, const char* msg) { char jsonWakuMsg[MAX_MSG_SIZE]; char *msgPayload = b64_encode(msg, strlen(msg)); - WAKU_CALL( waku_content_topic("appName", + WAKU_CALL( waku_content_topic(RET_OK, + "appName", 1, "contentTopicName", "encoding", - handle_content_topic) ); + handle_content_topic, + userData) ); snprintf(jsonWakuMsg, MAX_MSG_SIZE, @@ -124,10 +137,12 @@ void publish_message(char* pubsubTopic, const char* msg) { free(msgPayload); - WAKU_CALL( waku_relay_publish(pubsubTopic, + WAKU_CALL( waku_relay_publish(&ctx, + pubsubTopic, jsonWakuMsg, 10000 /*timeout ms*/, - handle_error) ); + event_handler, + userData) ); printf("waku relay response [%s]\n", publishResponse); } @@ -137,15 +152,11 @@ void show_help_and_exit() { exit(1); } -void event_handler(const char* msg, size_t len) { - printf("Receiving message %s\n", msg); -} - -void print_default_pubsub_topic(const char* msg, size_t len) { +void print_default_pubsub_topic(int callerRet, const char* msg, size_t len) { printf("Default pubsub topic: %s\n", msg); } -void print_waku_version(const char* msg, size_t len) { +void print_waku_version(int callerRet, const char* msg, size_t len) { printf("Git Version: %s\n", msg); } @@ -186,8 +197,10 @@ void handle_user_input() { char pubsubTopic[128]; scanf("%127s", pubsubTopic); - WAKU_CALL( waku_relay_subscribe(pubsubTopic, - handle_error) ); + WAKU_CALL( waku_relay_subscribe(&ctx, + pubsubTopic, + event_handler, + userData) ); printf("The subscription went well\n"); show_main_menu(); @@ -199,7 +212,7 @@ void handle_user_input() { printf("e.g.: /ip4/127.0.0.1/tcp/60001/p2p/16Uiu2HAmVFXtAfSj4EiR7mL2KvL4EE2wztuQgUSBoj2Jx2KeXFLN\n"); char peerAddr[512]; scanf("%511s", peerAddr); - WAKU_CALL(waku_connect(peerAddr, 10000 /* timeoutMs */, handle_error)); + WAKU_CALL(waku_connect(&ctx, peerAddr, 10000 /* timeoutMs */, event_handler, userData)); show_main_menu(); break; @@ -239,6 +252,8 @@ int main(int argc, char** argv) { show_help_and_exit(); } + ctx = waku_init(event_handler, userData); + char jsonConfig[1024]; snprintf(jsonConfig, 1024, "{ \ \"host\": \"%s\", \ @@ -250,25 +265,29 @@ int main(int argc, char** argv) { cfgNode.key, cfgNode.relay ? "true":"false"); - WAKU_CALL( waku_default_pubsub_topic(print_default_pubsub_topic) ); - WAKU_CALL( waku_version(print_waku_version) ); + WAKU_CALL( waku_default_pubsub_topic(&ctx, print_default_pubsub_topic, userData) ); + WAKU_CALL( waku_version(&ctx, print_waku_version, userData) ); printf("Bind addr: %s:%u\n", cfgNode.host, cfgNode.port); printf("Waku Relay enabled: %s\n", cfgNode.relay == 1 ? "YES": "NO"); - WAKU_CALL( waku_new(jsonConfig, handle_error) ); + WAKU_CALL( waku_new(&ctx, jsonConfig, event_handler, userData) ); - waku_set_event_callback(event_handler); - waku_start(); + waku_set_event_callback(event_handler, userData); + waku_start(&ctx, event_handler, userData); printf("Establishing connection with: %s\n", cfgNode.peers); - WAKU_CALL( waku_connect(cfgNode.peers, + WAKU_CALL( waku_connect(&ctx, + cfgNode.peers, 10000 /* timeoutMs */, - handle_error) ); + event_handler, + userData) ); - WAKU_CALL( waku_relay_subscribe("/waku/2/default-waku/proto", - handle_error) ); + WAKU_CALL( waku_relay_subscribe(&ctx, + "/waku/2/default-waku/proto", + event_handler, + userData) ); show_main_menu(); while(1) { handle_user_input(); diff --git a/library/libwaku.h b/library/libwaku.h index d2fe5cd1e4..bbd7f35155 100644 --- a/library/libwaku.h +++ b/library/libwaku.h @@ -15,45 +15,73 @@ extern "C" { #endif -typedef void (*WakuCallBack) (const char* msg, size_t len_0); +typedef void (*WakuCallBack) (int callerRet, const char* msg, size_t len); + +// Initializes the waku library and returns a pointer to the Context. +void* waku_init(WakuCallBack callback, + void* userData); // Creates a new instance of the waku node. // Sets up the waku node from the given configuration. -int waku_new(const char* configJson, WakuCallBack onErrCb); +int waku_new(void* ctx, + const char* configJson, + WakuCallBack callback, + void* userData); -void waku_start(void); +int waku_start(void* ctx, + WakuCallBack callback, + void* userData); -void waku_stop(void); +int waku_stop(void* ctx, + WakuCallBack callback, + void* userData); -int waku_version(WakuCallBack onOkCb); +int waku_version(void* ctx, + WakuCallBack callback, + void* userData); -void waku_set_event_callback(WakuCallBack callback); +void waku_set_event_callback(WakuCallBack callback, + void* userData); -int waku_content_topic(const char* appName, +int waku_content_topic(void* ctx, + const char* appName, unsigned int appVersion, const char* contentTopicName, const char* encoding, - WakuCallBack onOkCb); + WakuCallBack callback, + void* userData); -int waku_pubsub_topic(const char* topicName, - WakuCallBack onOkCb); +int waku_pubsub_topic(void* ctx, + const char* topicName, + WakuCallBack callback, + void* userData); -int waku_default_pubsub_topic(WakuCallBack onOkCb); +int waku_default_pubsub_topic(void* ctx, + WakuCallBack callback, + void* userData); -int waku_relay_publish(const char* pubSubTopic, +int waku_relay_publish(void* ctx, + const char* pubSubTopic, const char* jsonWakuMessage, unsigned int timeoutMs, - WakuCallBack onErrCb); + WakuCallBack callback, + void* userData); -int waku_relay_subscribe(const char* pubSubTopic, - WakuCallBack onErrCb); +int waku_relay_subscribe(void* ctx, + const char* pubSubTopic, + WakuCallBack callback, + void* userData); -int waku_relay_unsubscribe(const char* pubSubTopic, - WakuCallBack onErrCb); +int waku_relay_unsubscribe(void* ctx, + const char* pubSubTopic, + WakuCallBack callback, + void* userData); -int waku_connect(const char* peerMultiAddr, +int waku_connect(void* ctx, + const char* peerMultiAddr, unsigned int timeoutMs, - WakuCallBack onErrCb); + WakuCallBack callback, + void* userData); #ifdef __cplusplus } diff --git a/library/libwaku.nim b/library/libwaku.nim index 1757de7210..9f6449d535 100644 --- a/library/libwaku.nim +++ b/library/libwaku.nim @@ -4,8 +4,7 @@ {.passc: "-fPIC".} import - std/[json,sequtils,times,strformat,options,atomics,strutils], - strutils + std/[json,sequtils,times,strformat,options,atomics,strutils] import chronicles, chronos @@ -34,7 +33,9 @@ const RET_ERR: cint = 1 const RET_MISSING_CALLBACK: cint = 2 type - WakuCallBack* = proc(msg: ptr cchar, len: csize_t) {.cdecl, gcsafe.} + WakuCallBack* = proc(callerRet: cint, + msg: ptr cchar, + len: csize_t) {.cdecl, gcsafe.} ### End of exported types ################################################################################ @@ -51,10 +52,11 @@ proc relayEventCallback(pubsubTopic: PubsubTopic, if not isNil(extEventCallback): try: let event = $JsonMessageEvent.new(pubsubTopic, msg) - extEventCallback(unsafeAddr event[0], cast[csize_t](len(event))) + extEventCallback(RET_OK, unsafeAddr event[0], cast[csize_t](len(event))) except Exception,CatchableError: - error "Exception when calling 'eventCallBack': " & - getCurrentExceptionMsg() + let msg = "Exception when calling 'eventCallBack': " & + getCurrentExceptionMsg() + extEventCallback(RET_ERR, unsafeAddr msg[0], cast[csize_t](len(msg))) else: error "extEventCallback is nil" @@ -64,53 +66,72 @@ proc relayEventCallback(pubsubTopic: PubsubTopic, ################################################################################ ### Exported procs -proc waku_new(configJson: cstring, - onErrCb: WakuCallback): cint - {.dynlib, exportc, cdecl.} = - # Creates a new instance of the WakuNode. - # Notice that the ConfigNode type is also exported and available for users. - - if isNil(onErrCb): - return RET_MISSING_CALLBACK +proc waku_init(callback: WakuCallback): pointer {.dynlib, exportc, cdecl.} = + ## Initializes the waku library. ## Create the Waku thread that will keep waiting for req from the main thread. - waku_thread.createWakuThread().isOkOr: + var ctx = waku_thread.createWakuThread().valueOr: let msg = "Error in createWakuThread: " & $error - onErrCb(unsafeAddr msg[0], cast[csize_t](len(msg))) - return RET_ERR + callback(RET_ERR, unsafeAddr msg[0], cast[csize_t](len(msg))) + return nil + + return ctx + +proc waku_new(ctx: ptr ptr Context, + configJson: cstring, + callback: WakuCallback, + userData: pointer): cint + {.dynlib, exportc, cdecl.} = + ## Creates a new instance of the WakuNode. + ## Notice that the ConfigNode type is also exported and available for users. + + ctx[][].userData = userData + + if isNil(callback): + return RET_MISSING_CALLBACK let sendReqRes = waku_thread.sendRequestToWakuThread( + ctx[], RequestType.LIFECYCLE, NodeLifecycleRequest.createShared( NodeLifecycleMsgType.CREATE_NODE, configJson)) if sendReqRes.isErr(): let msg = $sendReqRes.error - onErrCb(unsafeAddr msg[0], cast[csize_t](len(msg))) + callback(RET_ERR, unsafeAddr msg[0], cast[csize_t](len(msg))) return RET_ERR return RET_OK -proc waku_version(onOkCb: WakuCallBack): cint {.dynlib, exportc.} = - if isNil(onOkCb): +proc waku_version(ctx: ptr ptr Context, + callback: WakuCallBack, + userData: pointer): cint {.dynlib, exportc.} = + + ctx[][].userData = userData + + if isNil(callback): return RET_MISSING_CALLBACK - onOkCb(cast[ptr cchar](WakuNodeVersionString), - cast[csize_t](len(WakuNodeVersionString))) + callback(RET_OK, cast[ptr cchar](WakuNodeVersionString), + cast[csize_t](len(WakuNodeVersionString))) return RET_OK proc waku_set_event_callback(callback: WakuCallBack) {.dynlib, exportc.} = extEventCallback = callback -proc waku_content_topic(appName: cstring, +proc waku_content_topic(ctx: ptr ptr Context, + appName: cstring, appVersion: cuint, contentTopicName: cstring, encoding: cstring, - onOkCb: WakuCallBack): cint {.dynlib, exportc.} = + callback: WakuCallBack, + userData: pointer): cint {.dynlib, exportc.} = # https://rfc.vac.dev/spec/36/#extern-char-waku_content_topicchar-applicationname-unsigned-int-applicationversion-char-contenttopicname-char-encoding - if isNil(onOkCb): + ctx[][].userData = userData + + if isNil(callback): return RET_MISSING_CALLBACK let appStr = appName.alloc() @@ -118,7 +139,7 @@ proc waku_content_topic(appName: cstring, let encodingStr = encoding.alloc() let contentTopic = fmt"/{$appStr}/{appVersion}/{$ctnStr}/{$encodingStr}" - onOkCb(unsafeAddr contentTopic[0], cast[csize_t](len(contentTopic))) + callback(RET_OK, unsafeAddr contentTopic[0], cast[csize_t](len(contentTopic))) deallocShared(appStr) deallocShared(ctnStr) @@ -126,40 +147,53 @@ proc waku_content_topic(appName: cstring, return RET_OK -proc waku_pubsub_topic(topicName: cstring, - onOkCb: WakuCallBack): cint {.dynlib, exportc, cdecl.} = - if isNil(onOkCb): +proc waku_pubsub_topic(ctx: ptr ptr Context, + topicName: cstring, + callback: WakuCallBack, + userData: pointer): cint {.dynlib, exportc, cdecl.} = + # https://rfc.vac.dev/spec/36/#extern-char-waku_pubsub_topicchar-name-char-encoding + + ctx[][].userData = userData + + if isNil(callback): return RET_MISSING_CALLBACK let topicNameStr = topicName.alloc() - # https://rfc.vac.dev/spec/36/#extern-char-waku_pubsub_topicchar-name-char-encoding let outPubsubTopic = fmt"/waku/2/{$topicNameStr}" - onOkCb(unsafeAddr outPubsubTopic[0], cast[csize_t](len(outPubsubTopic))) + callback(RET_OK, unsafeAddr outPubsubTopic[0], cast[csize_t](len(outPubsubTopic))) deallocShared(topicNameStr) return RET_OK -proc waku_default_pubsub_topic(onOkCb: WakuCallBack): cint {.dynlib, exportc.} = +proc waku_default_pubsub_topic(ctx: ptr ptr Context, + callback: WakuCallBack, + userData: pointer): cint {.dynlib, exportc.} = # https://rfc.vac.dev/spec/36/#extern-char-waku_default_pubsub_topic - if isNil(onOkCb): + + ctx[][].userData = userData + + if isNil(callback): return RET_MISSING_CALLBACK - onOkCb(cast[ptr cchar](DefaultPubsubTopic), - cast[csize_t](len(DefaultPubsubTopic))) + callback(RET_OK, cast[ptr cchar](DefaultPubsubTopic), cast[csize_t](len(DefaultPubsubTopic))) return RET_OK -proc waku_relay_publish(pubSubTopic: cstring, +proc waku_relay_publish(ctx: ptr ptr Context, + pubSubTopic: cstring, jsonWakuMessage: cstring, timeoutMs: cuint, - onErrCb: WakuCallBack): cint + callback: WakuCallBack, + userData: pointer): cint {.dynlib, exportc, cdecl.} = # https://rfc.vac.dev/spec/36/#extern-char-waku_relay_publishchar-messagejson-char-pubsubtopic-int-timeoutms - if isNil(onErrCb): + ctx[][].userData = userData + + if isNil(callback): return RET_MISSING_CALLBACK let jwm = jsonWakuMessage.alloc() @@ -169,7 +203,7 @@ proc waku_relay_publish(pubSubTopic: cstring, except JsonParsingError: deallocShared(jwm) let msg = fmt"Error parsing json message: {getCurrentExceptionMsg()}" - onErrCb(unsafeAddr msg[0], cast[csize_t](len(msg))) + callback(RET_ERR, unsafeAddr msg[0], cast[csize_t](len(msg))) return RET_ERR deallocShared(jwm) @@ -190,7 +224,7 @@ proc waku_relay_publish(pubSubTopic: cstring, ) except KeyError: let msg = fmt"Problem building the WakuMessage: {getCurrentExceptionMsg()}" - onErrCb(unsafeAddr msg[0], cast[csize_t](len(msg))) + callback(RET_ERR, unsafeAddr msg[0], cast[csize_t](len(msg))) return RET_ERR let pst = pubSubTopic.alloc() @@ -201,6 +235,7 @@ proc waku_relay_publish(pubSubTopic: cstring, $pst let sendReqRes = waku_thread.sendRequestToWakuThread( + ctx[], RequestType.RELAY, RelayRequest.createShared(RelayMsgType.PUBLISH, PubsubTopic($pst), @@ -210,31 +245,47 @@ proc waku_relay_publish(pubSubTopic: cstring, if sendReqRes.isErr(): let msg = $sendReqRes.error - onErrCb(unsafeAddr msg[0], cast[csize_t](len(msg))) + callback(RET_ERR, unsafeAddr msg[0], cast[csize_t](len(msg))) return RET_ERR return RET_OK -proc waku_start() {.dynlib, exportc.} = +proc waku_start(ctx: ptr ptr Context, + callback: WakuCallBack, + userData: pointer): cint {.dynlib, exportc.} = + + ctx[][].userData = userData + ## TODO: handle the error discard waku_thread.sendRequestToWakuThread( + ctx[], RequestType.LIFECYCLE, NodeLifecycleRequest.createShared( NodeLifecycleMsgType.START_NODE)) -proc waku_stop() {.dynlib, exportc.} = +proc waku_stop(ctx: ptr ptr Context, + callback: WakuCallBack, + userData: pointer): cint {.dynlib, exportc.} = + ctx[][].userData = userData + ## TODO: handle the error discard waku_thread.sendRequestToWakuThread( + ctx[], RequestType.LIFECYCLE, NodeLifecycleRequest.createShared( NodeLifecycleMsgType.STOP_NODE)) proc waku_relay_subscribe( + ctx: ptr ptr Context, pubSubTopic: cstring, - onErrCb: WakuCallBack): cint + callback: WakuCallBack, + userData: pointer): cint {.dynlib, exportc.} = + ctx[][].userData = userData + let pst = pubSubTopic.alloc() let sendReqRes = waku_thread.sendRequestToWakuThread( + ctx[], RequestType.RELAY, RelayRequest.createShared(RelayMsgType.SUBSCRIBE, PubsubTopic($pst), @@ -243,19 +294,24 @@ proc waku_relay_subscribe( if sendReqRes.isErr(): let msg = $sendReqRes.error - onErrCb(unsafeAddr msg[0], cast[csize_t](len(msg))) + callback(RET_ERR, unsafeAddr msg[0], cast[csize_t](len(msg))) return RET_ERR return RET_OK proc waku_relay_unsubscribe( + ctx: ptr ptr Context, pubSubTopic: cstring, - onErrCb: WakuCallBack): cint + callback: WakuCallBack, + userData: pointer): cint {.dynlib, exportc.} = + ctx[][].userData = userData + let pst = pubSubTopic.alloc() let sendReqRes = waku_thread.sendRequestToWakuThread( + ctx[], RequestType.RELAY, RelayRequest.createShared(RelayMsgType.SUBSCRIBE, PubsubTopic($pst), @@ -264,17 +320,22 @@ proc waku_relay_unsubscribe( if sendReqRes.isErr(): let msg = $sendReqRes.error - onErrCb(unsafeAddr msg[0], cast[csize_t](len(msg))) + callback(RET_ERR, unsafeAddr msg[0], cast[csize_t](len(msg))) return RET_ERR return RET_OK -proc waku_connect(peerMultiAddr: cstring, +proc waku_connect(ctx: ptr ptr Context, + peerMultiAddr: cstring, timeoutMs: cuint, - onErrCb: WakuCallBack): cint + callback: WakuCallBack, + userData: pointer): cint {.dynlib, exportc.} = + ctx[][].userData = userData + let connRes = waku_thread.sendRequestToWakuThread( + ctx[], RequestType.PEER_MANAGER, PeerManagementRequest.createShared( PeerManagementMsgType.CONNECT_TO, @@ -282,7 +343,7 @@ proc waku_connect(peerMultiAddr: cstring, chronos.milliseconds(timeoutMs))) if connRes.isErr(): let msg = $connRes.error - onErrCb(unsafeAddr msg[0], cast[csize_t](len(msg))) + callback(RET_ERR, unsafeAddr msg[0], cast[csize_t](len(msg))) return RET_ERR return RET_OK diff --git a/library/waku_thread/waku_thread.nim b/library/waku_thread/waku_thread.nim index a2965e4dd2..807fb1fe72 100644 --- a/library/waku_thread/waku_thread.nim +++ b/library/waku_thread/waku_thread.nim @@ -25,8 +25,7 @@ type reqSignal: ThreadSignalPtr respChannel: ChannelSPSCSingle[ptr InterThreadResponse] respSignal: ThreadSignalPtr - -var ctx {.threadvar.}: ptr Context + userData*: pointer # To control when the thread is running var running: Atomic[bool] @@ -70,13 +69,13 @@ proc run(ctx: ptr Context) {.thread.} = tearDownForeignThreadGc() -proc createWakuThread*(): Result[void, string] = +proc createWakuThread*(): Result[ptr Context, string] = ## This proc is called from the main thread and it creates ## the Waku working thread. waku_init() - ctx = createShared(Context, 1) + var ctx = createShared(Context, 1) ctx.reqSignal = ThreadSignalPtr.new().valueOr: return err("couldn't create reqSignal ThreadSignalPtr") ctx.respSignal = ThreadSignalPtr.new().valueOr: @@ -92,16 +91,17 @@ proc createWakuThread*(): Result[void, string] = return err("failed to create the Waku thread: " & getCurrentExceptionMsg()) - return ok() + return ok(ctx) -proc stopWakuNodeThread*() = +proc stopWakuNodeThread*(ctx: ptr Context) = running.store(false) joinThread(ctx.thread) discard ctx.reqSignal.close() discard ctx.respSignal.close() freeShared(ctx) -proc sendRequestToWakuThread*(reqType: RequestType, +proc sendRequestToWakuThread*(ctx: ptr Context, + reqType: RequestType, reqContent: pointer): Result[string, string] = let req = InterThreadRequest.createShared(reqType, reqContent) From 817a7b2e68cdd4e702bb2638531f55f063da6647 Mon Sep 17 00:00:00 2001 From: gabrielmer <101006718+gabrielmer@users.noreply.github.com> Date: Mon, 23 Oct 2023 21:35:43 +0300 Subject: [PATCH 087/274] chore: bumping nim-libp2p to include WSS fix (#2150) --- vendor/nim-libp2p | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/nim-libp2p b/vendor/nim-libp2p index b2eac7ecbd..fc4e9a8bb8 160000 --- a/vendor/nim-libp2p +++ b/vendor/nim-libp2p @@ -1 +1 @@ -Subproject commit b2eac7ecbdb695b0b7033f2069b03a63d28aee2b +Subproject commit fc4e9a8bb869428618ee37c6525e670859cfdaf3 From 9cd8c73d273bdfc95e6bcf870cd94030690f2630 Mon Sep 17 00:00:00 2001 From: Abhimanyu Date: Tue, 24 Oct 2023 12:19:52 +0200 Subject: [PATCH 088/274] feat: messageHash attribute added in SQLite + testcase (#2142) * feat: messageHash attaribute added in SQLite + testcase * Update tests/waku_archive/test_driver_sqlite_query.nim Co-authored-by: Ivan FB <128452529+Ivansete-status@users.noreply.github.com> --------- Co-authored-by: Ivan FB <128452529+Ivansete-status@users.noreply.github.com> --- tests/waku_archive/test_driver_postgres.nim | 2 +- tests/waku_archive/test_driver_sqlite.nim | 2 +- .../waku_archive/test_driver_sqlite_query.nim | 44 +++++++++++++++++++ tests/waku_archive/test_retention_policy.nim | 2 +- waku/waku_archive/archive.nim | 2 +- waku/waku_archive/driver.nim | 2 +- .../postgres_driver/postgres_driver.nim | 1 + .../driver/queue_driver/queue_driver.nim | 2 +- .../driver/sqlite_driver/queries.nim | 25 ++++++----- .../driver/sqlite_driver/sqlite_driver.nim | 1 + 10 files changed, 67 insertions(+), 16 deletions(-) diff --git a/tests/waku_archive/test_driver_postgres.nim b/tests/waku_archive/test_driver_postgres.nim index 149c43aa05..f64925dcbc 100644 --- a/tests/waku_archive/test_driver_postgres.nim +++ b/tests/waku_archive/test_driver_postgres.nim @@ -87,7 +87,7 @@ suite "Postgres driver": require: storedMsg.len == 1 storedMsg.all do (item: auto) -> bool: - let (pubsubTopic, actualMsg, digest, storeTimestamp) = item + let (pubsubTopic, actualMsg, digest, messageHash, storeTimestamp) = item actualMsg.contentTopic == contentTopic and pubsubTopic == DefaultPubsubTopic and toHex(computedDigest.data) == toHex(digest) and diff --git a/tests/waku_archive/test_driver_sqlite.nim b/tests/waku_archive/test_driver_sqlite.nim index 0fae560e03..24699826e2 100644 --- a/tests/waku_archive/test_driver_sqlite.nim +++ b/tests/waku_archive/test_driver_sqlite.nim @@ -60,7 +60,7 @@ suite "SQLite driver": check: storedMsg.len == 1 storedMsg.all do (item: auto) -> bool: - let (pubsubTopic, msg, digest, storeTimestamp) = item + let (pubsubTopic, msg, digest, messageHash, storeTimestamp) = item msg.contentTopic == contentTopic and pubsubTopic == DefaultPubsubTopic diff --git a/tests/waku_archive/test_driver_sqlite_query.nim b/tests/waku_archive/test_driver_sqlite_query.nim index 2ed20f0fac..7b3c224a05 100644 --- a/tests/waku_archive/test_driver_sqlite_query.nim +++ b/tests/waku_archive/test_driver_sqlite_query.nim @@ -423,6 +423,50 @@ suite "SQLite driver - query by pubsub topic": ## Cleanup (await driver.close()).expect("driver to close") + + asyncTest "pubSubTopic messageHash match": + ## Given + const pubsubTopic1 = "test-pubsub-topic1" + const pubsubTopic2 = "test-pubsub-topic2" + # take 2 variables to hold the message hashes + var msgHash1: seq[byte] + var msgHash2: seq[byte] + + let driver = newTestSqliteDriver() + var putFutures = newSeq[Future[ArchiveDriverResult[void]]]() + + let msg1 = fakeWakuMessage(contentTopic=DefaultContentTopic, ts=Timestamp(1)) + putFutures.add(driver.put(pubsubTopic1, msg1, computeDigest(msg1, pubsubTopic1), msg1.timestamp)) + + let msg2 = fakeWakuMessage(contentTopic=DefaultContentTopic, ts=Timestamp(2)) + putFutures.add(driver.put(pubsubTopic2, msg2, computeDigest(msg2, pubsubTopic2), msg2.timestamp)) + + discard waitFor allFinished(putFutures) + + # get the messages from the database + let storedMsg = (waitFor driver.getAllMessages()).tryGet() + + check: + # there needs to be two messages + storedMsg.len > 0 + storedMsg.len == 2 + + # get the individual messages and message hash values + @[storedMsg[0]].all do (item1: auto) -> bool: + let (gotPubsubTopic1, gotMsg1, digest1, messageHash1, timestamp1) = item1 + msgHash1 = messageHash1 + true + + @[storedMsg[1]].all do (item2: auto) -> bool: + let (gotPubsubTopic2, gotMsg2, digest2, messageHash2, timestamp2) = item2 + msgHash2 = messageHash2 + true + + # compare of the messge hashes, given the context, they should be different + msgHash1 != msgHash2 + + ## Cleanup + (await driver.close()).expect("driver to close") suite "SQLite driver - query by cursor": diff --git a/tests/waku_archive/test_retention_policy.nim b/tests/waku_archive/test_retention_policy.nim index 1e6bab4614..f844b24fc2 100644 --- a/tests/waku_archive/test_retention_policy.nim +++ b/tests/waku_archive/test_retention_policy.nim @@ -147,7 +147,7 @@ suite "Waku Archive - Retention policy": check: storedMsg.len == capacity storedMsg.all do (item: auto) -> bool: - let (pubsubTopic, msg, digest, storeTimestamp) = item + let (pubsubTopic, msg, digest, messageHash, storeTimestamp) = item msg.contentTopic == contentTopic and pubsubTopic == DefaultPubsubTopic diff --git a/waku/waku_archive/archive.nim b/waku/waku_archive/archive.nim index 8d236caf7e..b8f3e2777f 100644 --- a/waku/waku_archive/archive.nim +++ b/waku/waku_archive/archive.nim @@ -163,7 +163,7 @@ proc findMessages*(w: WakuArchive, query: ArchiveQuery): Future[ArchiveResult] { ## Build last message cursor ## The cursor is built from the last message INCLUDED in the response ## (i.e. the second last message in the rows list) - let (pubsubTopic, message, digest, storeTimestamp) = rows[^2] + let (pubsubTopic, message, digest, messageHash, storeTimestamp) = rows[^2] # TODO: Improve coherence of MessageDigest type let messageDigest = block: diff --git a/waku/waku_archive/driver.nim b/waku/waku_archive/driver.nim index 64c6b3318a..ed3e848859 100644 --- a/waku/waku_archive/driver.nim +++ b/waku/waku_archive/driver.nim @@ -18,7 +18,7 @@ type ArchiveDriver* = ref object of RootObj OnErrHandler* = proc(errMsg: string) {.gcsafe, closure.} -type ArchiveRow* = (PubsubTopic, WakuMessage, seq[byte], Timestamp) +type ArchiveRow* = (PubsubTopic, WakuMessage, seq[byte], seq[byte], Timestamp) # ArchiveDriver interface diff --git a/waku/waku_archive/driver/postgres_driver/postgres_driver.nim b/waku/waku_archive/driver/postgres_driver/postgres_driver.nim index 775b348778..90d56a5c0e 100644 --- a/waku/waku_archive/driver/postgres_driver/postgres_driver.nim +++ b/waku/waku_archive/driver/postgres_driver/postgres_driver.nim @@ -138,6 +138,7 @@ proc toArchiveRow(r: Row): ArchiveDriverResult[ArchiveRow] = return ok((pubSubTopic, wakuMessage, @(digest.toOpenArrayByte(0, digest.high)), + @(digest.toOpenArrayByte(0, digest.high)), storedAt)) method getAllMessages*(s: PostgresDriver): diff --git a/waku/waku_archive/driver/queue_driver/queue_driver.nim b/waku/waku_archive/driver/queue_driver/queue_driver.nim index cce7d895bf..31cc259620 100644 --- a/waku/waku_archive/driver/queue_driver/queue_driver.nim +++ b/waku/waku_archive/driver/queue_driver/queue_driver.nim @@ -138,7 +138,7 @@ proc getPage(driver: QueueDriver, numberOfItems += 1 - outSeq.add((key.pubsubTopic, data.msg, @(key.digest.data), key.receiverTime)) + outSeq.add((key.pubsubTopic, data.msg, @(key.digest.data), @(key.digest.data), key.receiverTime)) currentEntry = if forward: w.next() else: w.prev() diff --git a/waku/waku_archive/driver/sqlite_driver/queries.nim b/waku/waku_archive/driver/sqlite_driver/queries.nim index 27ab4de618..de0f513c10 100644 --- a/waku/waku_archive/driver/sqlite_driver/queries.nim +++ b/waku/waku_archive/driver/sqlite_driver/queries.nim @@ -71,8 +71,9 @@ proc createTableQuery(table: string): SqlQueryStr = " version INTEGER NOT NULL," & " timestamp INTEGER NOT NULL," & " id BLOB," & + " messageHash BLOB NOT NULL,"& " storedAt INTEGER NOT NULL," & - " CONSTRAINT messageIndex PRIMARY KEY (storedAt, id, pubsubTopic)" & + " CONSTRAINT messageIndex PRIMARY KEY (storedAt, messageHash)" & ") WITHOUT ROWID;" proc createTable*(db: SqliteDatabase): DatabaseResult[void] = @@ -102,11 +103,11 @@ proc createHistoryQueryIndex*(db: SqliteDatabase): DatabaseResult[void] = ## Insert message -type InsertMessageParams* = (seq[byte], Timestamp, seq[byte], seq[byte], seq[byte], int64, Timestamp) +type InsertMessageParams* = (seq[byte], seq[byte], Timestamp, seq[byte], seq[byte], seq[byte], int64, Timestamp) proc insertMessageQuery(table: string): SqlQueryStr = - "INSERT INTO " & table & "(id, storedAt, contentTopic, payload, pubsubTopic, version, timestamp)" & - " VALUES (?, ?, ?, ?, ?, ?, ?);" + "INSERT INTO " & table & "(id, messageHash, storedAt, contentTopic, payload, pubsubTopic, version, timestamp)" & + " VALUES (?, ?, ?, ?, ?, ?, ?, ?);" proc prepareInsertMessageStmt*(db: SqliteDatabase): SqliteStmt[InsertMessageParams, void] = let query = insertMessageQuery(DbTable) @@ -197,24 +198,26 @@ proc deleteOldestMessagesNotWithinLimit*(db: SqliteDatabase, limit: int): ## Select all messages proc selectAllMessagesQuery(table: string): SqlQueryStr = - "SELECT storedAt, contentTopic, payload, pubsubTopic, version, timestamp, id" & + "SELECT storedAt, contentTopic, payload, pubsubTopic, version, timestamp, id, messageHash" & " FROM " & table & " ORDER BY storedAt ASC" proc selectAllMessages*(db: SqliteDatabase): DatabaseResult[seq[(PubsubTopic, WakuMessage, seq[byte], + seq[byte], Timestamp)]] = ## Retrieve all messages from the store. - var rows: seq[(PubsubTopic, WakuMessage, seq[byte], Timestamp)] + var rows: seq[(PubsubTopic, WakuMessage, seq[byte], seq[byte], Timestamp)] proc queryRowCallback(s: ptr sqlite3_stmt) = let pubsubTopic = queryRowPubsubTopicCallback(s, pubsubTopicCol=3) wakuMessage = queryRowWakuMessageCallback(s, contentTopicCol=1, payloadCol=2, versionCol=4, senderTimestampCol=5) digest = queryRowDigestCallback(s, digestCol=6) + messageHash = queryRowDigestCallback(s, digestCol=7) storedAt = queryRowReceiverTimestampCallback(s, storedAtCol=0) - rows.add((pubsubTopic, wakuMessage, digest, storedAt)) + rows.add((pubsubTopic, wakuMessage, digest, messageHash, storedAt)) let query = selectAllMessagesQuery(DbTable) let res = db.query(query, queryRowCallback) @@ -280,7 +283,7 @@ proc selectMessagesWithLimitQuery(table: string, where: Option[string], limit: u var query: string - query = "SELECT storedAt, contentTopic, payload, pubsubTopic, version, timestamp, id" + query = "SELECT storedAt, contentTopic, payload, pubsubTopic, version, timestamp, id, messageHash" query &= " FROM " & table if where.isSome(): @@ -361,18 +364,20 @@ proc selectMessagesByHistoryQueryWithLimit*(db: SqliteDatabase, DatabaseResult[seq[(PubsubTopic, WakuMessage, seq[byte], + seq[byte], Timestamp)]] = - var messages: seq[(PubsubTopic, WakuMessage, seq[byte], Timestamp)] = @[] + var messages: seq[(PubsubTopic, WakuMessage, seq[byte], seq[byte], Timestamp)] = @[] proc queryRowCallback(s: ptr sqlite3_stmt) = let pubsubTopic = queryRowPubsubTopicCallback(s, pubsubTopicCol=3) message = queryRowWakuMessageCallback(s, contentTopicCol=1, payloadCol=2, versionCol=4, senderTimestampCol=5) digest = queryRowDigestCallback(s, digestCol=6) + messageHash = queryRowDigestCallback(s, digestCol=7) storedAt = queryRowReceiverTimestampCallback(s, storedAtCol=0) - messages.add((pubsubTopic, message, digest, storedAt)) + messages.add((pubsubTopic, message, digest, messageHash, storedAt)) let query = block: let where = whereClause(cursor, pubsubTopic, contentTopic, startTime, endTime, ascending) diff --git a/waku/waku_archive/driver/sqlite_driver/sqlite_driver.nim b/waku/waku_archive/driver/sqlite_driver/sqlite_driver.nim index 53da379b1a..6d1830ed9f 100644 --- a/waku/waku_archive/driver/sqlite_driver/sqlite_driver.nim +++ b/waku/waku_archive/driver/sqlite_driver/sqlite_driver.nim @@ -66,6 +66,7 @@ method put*(s: SqliteDriver, ## Inserts a message into the store let res = s.insertStmt.exec(( @(digest.data), # id + @(digest.data), # messageHash receivedTime, # storedAt toBytes(message.contentTopic), # contentTopic message.payload, # payload From 13aeebe46fcaf1155b4818e73a895e68edc62688 Mon Sep 17 00:00:00 2001 From: Abhimanyu Date: Tue, 24 Oct 2023 16:05:39 +0200 Subject: [PATCH 089/274] Revert "feat: messageHash attribute added in SQLite + testcase (#2142)" (#2154) This reverts commit 9cd8c73d273bdfc95e6bcf870cd94030690f2630. --- tests/waku_archive/test_driver_postgres.nim | 2 +- tests/waku_archive/test_driver_sqlite.nim | 2 +- .../waku_archive/test_driver_sqlite_query.nim | 44 ------------------- tests/waku_archive/test_retention_policy.nim | 2 +- waku/waku_archive/archive.nim | 2 +- waku/waku_archive/driver.nim | 2 +- .../postgres_driver/postgres_driver.nim | 1 - .../driver/queue_driver/queue_driver.nim | 2 +- .../driver/sqlite_driver/queries.nim | 25 +++++------ .../driver/sqlite_driver/sqlite_driver.nim | 1 - 10 files changed, 16 insertions(+), 67 deletions(-) diff --git a/tests/waku_archive/test_driver_postgres.nim b/tests/waku_archive/test_driver_postgres.nim index f64925dcbc..149c43aa05 100644 --- a/tests/waku_archive/test_driver_postgres.nim +++ b/tests/waku_archive/test_driver_postgres.nim @@ -87,7 +87,7 @@ suite "Postgres driver": require: storedMsg.len == 1 storedMsg.all do (item: auto) -> bool: - let (pubsubTopic, actualMsg, digest, messageHash, storeTimestamp) = item + let (pubsubTopic, actualMsg, digest, storeTimestamp) = item actualMsg.contentTopic == contentTopic and pubsubTopic == DefaultPubsubTopic and toHex(computedDigest.data) == toHex(digest) and diff --git a/tests/waku_archive/test_driver_sqlite.nim b/tests/waku_archive/test_driver_sqlite.nim index 24699826e2..0fae560e03 100644 --- a/tests/waku_archive/test_driver_sqlite.nim +++ b/tests/waku_archive/test_driver_sqlite.nim @@ -60,7 +60,7 @@ suite "SQLite driver": check: storedMsg.len == 1 storedMsg.all do (item: auto) -> bool: - let (pubsubTopic, msg, digest, messageHash, storeTimestamp) = item + let (pubsubTopic, msg, digest, storeTimestamp) = item msg.contentTopic == contentTopic and pubsubTopic == DefaultPubsubTopic diff --git a/tests/waku_archive/test_driver_sqlite_query.nim b/tests/waku_archive/test_driver_sqlite_query.nim index 7b3c224a05..2ed20f0fac 100644 --- a/tests/waku_archive/test_driver_sqlite_query.nim +++ b/tests/waku_archive/test_driver_sqlite_query.nim @@ -423,50 +423,6 @@ suite "SQLite driver - query by pubsub topic": ## Cleanup (await driver.close()).expect("driver to close") - - asyncTest "pubSubTopic messageHash match": - ## Given - const pubsubTopic1 = "test-pubsub-topic1" - const pubsubTopic2 = "test-pubsub-topic2" - # take 2 variables to hold the message hashes - var msgHash1: seq[byte] - var msgHash2: seq[byte] - - let driver = newTestSqliteDriver() - var putFutures = newSeq[Future[ArchiveDriverResult[void]]]() - - let msg1 = fakeWakuMessage(contentTopic=DefaultContentTopic, ts=Timestamp(1)) - putFutures.add(driver.put(pubsubTopic1, msg1, computeDigest(msg1, pubsubTopic1), msg1.timestamp)) - - let msg2 = fakeWakuMessage(contentTopic=DefaultContentTopic, ts=Timestamp(2)) - putFutures.add(driver.put(pubsubTopic2, msg2, computeDigest(msg2, pubsubTopic2), msg2.timestamp)) - - discard waitFor allFinished(putFutures) - - # get the messages from the database - let storedMsg = (waitFor driver.getAllMessages()).tryGet() - - check: - # there needs to be two messages - storedMsg.len > 0 - storedMsg.len == 2 - - # get the individual messages and message hash values - @[storedMsg[0]].all do (item1: auto) -> bool: - let (gotPubsubTopic1, gotMsg1, digest1, messageHash1, timestamp1) = item1 - msgHash1 = messageHash1 - true - - @[storedMsg[1]].all do (item2: auto) -> bool: - let (gotPubsubTopic2, gotMsg2, digest2, messageHash2, timestamp2) = item2 - msgHash2 = messageHash2 - true - - # compare of the messge hashes, given the context, they should be different - msgHash1 != msgHash2 - - ## Cleanup - (await driver.close()).expect("driver to close") suite "SQLite driver - query by cursor": diff --git a/tests/waku_archive/test_retention_policy.nim b/tests/waku_archive/test_retention_policy.nim index f844b24fc2..1e6bab4614 100644 --- a/tests/waku_archive/test_retention_policy.nim +++ b/tests/waku_archive/test_retention_policy.nim @@ -147,7 +147,7 @@ suite "Waku Archive - Retention policy": check: storedMsg.len == capacity storedMsg.all do (item: auto) -> bool: - let (pubsubTopic, msg, digest, messageHash, storeTimestamp) = item + let (pubsubTopic, msg, digest, storeTimestamp) = item msg.contentTopic == contentTopic and pubsubTopic == DefaultPubsubTopic diff --git a/waku/waku_archive/archive.nim b/waku/waku_archive/archive.nim index b8f3e2777f..8d236caf7e 100644 --- a/waku/waku_archive/archive.nim +++ b/waku/waku_archive/archive.nim @@ -163,7 +163,7 @@ proc findMessages*(w: WakuArchive, query: ArchiveQuery): Future[ArchiveResult] { ## Build last message cursor ## The cursor is built from the last message INCLUDED in the response ## (i.e. the second last message in the rows list) - let (pubsubTopic, message, digest, messageHash, storeTimestamp) = rows[^2] + let (pubsubTopic, message, digest, storeTimestamp) = rows[^2] # TODO: Improve coherence of MessageDigest type let messageDigest = block: diff --git a/waku/waku_archive/driver.nim b/waku/waku_archive/driver.nim index ed3e848859..64c6b3318a 100644 --- a/waku/waku_archive/driver.nim +++ b/waku/waku_archive/driver.nim @@ -18,7 +18,7 @@ type ArchiveDriver* = ref object of RootObj OnErrHandler* = proc(errMsg: string) {.gcsafe, closure.} -type ArchiveRow* = (PubsubTopic, WakuMessage, seq[byte], seq[byte], Timestamp) +type ArchiveRow* = (PubsubTopic, WakuMessage, seq[byte], Timestamp) # ArchiveDriver interface diff --git a/waku/waku_archive/driver/postgres_driver/postgres_driver.nim b/waku/waku_archive/driver/postgres_driver/postgres_driver.nim index 90d56a5c0e..775b348778 100644 --- a/waku/waku_archive/driver/postgres_driver/postgres_driver.nim +++ b/waku/waku_archive/driver/postgres_driver/postgres_driver.nim @@ -138,7 +138,6 @@ proc toArchiveRow(r: Row): ArchiveDriverResult[ArchiveRow] = return ok((pubSubTopic, wakuMessage, @(digest.toOpenArrayByte(0, digest.high)), - @(digest.toOpenArrayByte(0, digest.high)), storedAt)) method getAllMessages*(s: PostgresDriver): diff --git a/waku/waku_archive/driver/queue_driver/queue_driver.nim b/waku/waku_archive/driver/queue_driver/queue_driver.nim index 31cc259620..cce7d895bf 100644 --- a/waku/waku_archive/driver/queue_driver/queue_driver.nim +++ b/waku/waku_archive/driver/queue_driver/queue_driver.nim @@ -138,7 +138,7 @@ proc getPage(driver: QueueDriver, numberOfItems += 1 - outSeq.add((key.pubsubTopic, data.msg, @(key.digest.data), @(key.digest.data), key.receiverTime)) + outSeq.add((key.pubsubTopic, data.msg, @(key.digest.data), key.receiverTime)) currentEntry = if forward: w.next() else: w.prev() diff --git a/waku/waku_archive/driver/sqlite_driver/queries.nim b/waku/waku_archive/driver/sqlite_driver/queries.nim index de0f513c10..27ab4de618 100644 --- a/waku/waku_archive/driver/sqlite_driver/queries.nim +++ b/waku/waku_archive/driver/sqlite_driver/queries.nim @@ -71,9 +71,8 @@ proc createTableQuery(table: string): SqlQueryStr = " version INTEGER NOT NULL," & " timestamp INTEGER NOT NULL," & " id BLOB," & - " messageHash BLOB NOT NULL,"& " storedAt INTEGER NOT NULL," & - " CONSTRAINT messageIndex PRIMARY KEY (storedAt, messageHash)" & + " CONSTRAINT messageIndex PRIMARY KEY (storedAt, id, pubsubTopic)" & ") WITHOUT ROWID;" proc createTable*(db: SqliteDatabase): DatabaseResult[void] = @@ -103,11 +102,11 @@ proc createHistoryQueryIndex*(db: SqliteDatabase): DatabaseResult[void] = ## Insert message -type InsertMessageParams* = (seq[byte], seq[byte], Timestamp, seq[byte], seq[byte], seq[byte], int64, Timestamp) +type InsertMessageParams* = (seq[byte], Timestamp, seq[byte], seq[byte], seq[byte], int64, Timestamp) proc insertMessageQuery(table: string): SqlQueryStr = - "INSERT INTO " & table & "(id, messageHash, storedAt, contentTopic, payload, pubsubTopic, version, timestamp)" & - " VALUES (?, ?, ?, ?, ?, ?, ?, ?);" + "INSERT INTO " & table & "(id, storedAt, contentTopic, payload, pubsubTopic, version, timestamp)" & + " VALUES (?, ?, ?, ?, ?, ?, ?);" proc prepareInsertMessageStmt*(db: SqliteDatabase): SqliteStmt[InsertMessageParams, void] = let query = insertMessageQuery(DbTable) @@ -198,26 +197,24 @@ proc deleteOldestMessagesNotWithinLimit*(db: SqliteDatabase, limit: int): ## Select all messages proc selectAllMessagesQuery(table: string): SqlQueryStr = - "SELECT storedAt, contentTopic, payload, pubsubTopic, version, timestamp, id, messageHash" & + "SELECT storedAt, contentTopic, payload, pubsubTopic, version, timestamp, id" & " FROM " & table & " ORDER BY storedAt ASC" proc selectAllMessages*(db: SqliteDatabase): DatabaseResult[seq[(PubsubTopic, WakuMessage, seq[byte], - seq[byte], Timestamp)]] = ## Retrieve all messages from the store. - var rows: seq[(PubsubTopic, WakuMessage, seq[byte], seq[byte], Timestamp)] + var rows: seq[(PubsubTopic, WakuMessage, seq[byte], Timestamp)] proc queryRowCallback(s: ptr sqlite3_stmt) = let pubsubTopic = queryRowPubsubTopicCallback(s, pubsubTopicCol=3) wakuMessage = queryRowWakuMessageCallback(s, contentTopicCol=1, payloadCol=2, versionCol=4, senderTimestampCol=5) digest = queryRowDigestCallback(s, digestCol=6) - messageHash = queryRowDigestCallback(s, digestCol=7) storedAt = queryRowReceiverTimestampCallback(s, storedAtCol=0) - rows.add((pubsubTopic, wakuMessage, digest, messageHash, storedAt)) + rows.add((pubsubTopic, wakuMessage, digest, storedAt)) let query = selectAllMessagesQuery(DbTable) let res = db.query(query, queryRowCallback) @@ -283,7 +280,7 @@ proc selectMessagesWithLimitQuery(table: string, where: Option[string], limit: u var query: string - query = "SELECT storedAt, contentTopic, payload, pubsubTopic, version, timestamp, id, messageHash" + query = "SELECT storedAt, contentTopic, payload, pubsubTopic, version, timestamp, id" query &= " FROM " & table if where.isSome(): @@ -364,20 +361,18 @@ proc selectMessagesByHistoryQueryWithLimit*(db: SqliteDatabase, DatabaseResult[seq[(PubsubTopic, WakuMessage, seq[byte], - seq[byte], Timestamp)]] = - var messages: seq[(PubsubTopic, WakuMessage, seq[byte], seq[byte], Timestamp)] = @[] + var messages: seq[(PubsubTopic, WakuMessage, seq[byte], Timestamp)] = @[] proc queryRowCallback(s: ptr sqlite3_stmt) = let pubsubTopic = queryRowPubsubTopicCallback(s, pubsubTopicCol=3) message = queryRowWakuMessageCallback(s, contentTopicCol=1, payloadCol=2, versionCol=4, senderTimestampCol=5) digest = queryRowDigestCallback(s, digestCol=6) - messageHash = queryRowDigestCallback(s, digestCol=7) storedAt = queryRowReceiverTimestampCallback(s, storedAtCol=0) - messages.add((pubsubTopic, message, digest, messageHash, storedAt)) + messages.add((pubsubTopic, message, digest, storedAt)) let query = block: let where = whereClause(cursor, pubsubTopic, contentTopic, startTime, endTime, ascending) diff --git a/waku/waku_archive/driver/sqlite_driver/sqlite_driver.nim b/waku/waku_archive/driver/sqlite_driver/sqlite_driver.nim index 6d1830ed9f..53da379b1a 100644 --- a/waku/waku_archive/driver/sqlite_driver/sqlite_driver.nim +++ b/waku/waku_archive/driver/sqlite_driver/sqlite_driver.nim @@ -66,7 +66,6 @@ method put*(s: SqliteDriver, ## Inserts a message into the store let res = s.insertStmt.exec(( @(digest.data), # id - @(digest.data), # messageHash receivedTime, # storedAt toBytes(message.contentTopic), # contentTopic message.payload, # payload From 944dfdaa9914572dd0bc3ed475c3ba0449495146 Mon Sep 17 00:00:00 2001 From: gabrielmer <101006718+gabrielmer@users.noreply.github.com> Date: Tue, 24 Oct 2023 18:39:25 +0300 Subject: [PATCH 090/274] chore: adding ext-multiaddr-only CLI flag (#2141) --- apps/wakunode2/external_config.nim | 5 +++ apps/wakunode2/internal_config.nim | 1 + tests/test_waku_netconfig.nim | 54 +++++++++++++++++++++++++++--- waku/node/config.nim | 24 +++++++------ 4 files changed, 68 insertions(+), 16 deletions(-) diff --git a/apps/wakunode2/external_config.nim b/apps/wakunode2/external_config.nim index 0ec5c1fb03..f18c4b159e 100644 --- a/apps/wakunode2/external_config.nim +++ b/apps/wakunode2/external_config.nim @@ -92,6 +92,11 @@ type desc: "External multiaddresses to advertise to the network. Argument may be repeated." name: "ext-multiaddr" }: seq[string] + extMultiAddrsOnly* {. + desc: "Only announce external multiaddresses", + defaultValue: false, + name: "ext-multiaddr-only" }: bool + maxConnections* {. desc: "Maximum allowed number of libp2p connections." defaultValue: 50 diff --git a/apps/wakunode2/internal_config.nim b/apps/wakunode2/internal_config.nim index 06fc659bbd..0eec05bb4e 100644 --- a/apps/wakunode2/internal_config.nim +++ b/apps/wakunode2/internal_config.nim @@ -111,6 +111,7 @@ proc networkConfiguration*(conf: WakuNodeConf, extIp = extIp, extPort = extPort, extMultiAddrs = extMultiAddrs, + extMultiAddrsOnly = conf.extMultiAddrsOnly, wsBindPort = Port(uint16(conf.websocketPort) + conf.portsShift), wsEnabled = conf.websocketSupport, wssEnabled = conf.websocketSecureSupport, diff --git a/tests/test_waku_netconfig.nim b/tests/test_waku_netconfig.nim index 0c02afab13..713bdcefb5 100644 --- a/tests/test_waku_netconfig.nim +++ b/tests/test_waku_netconfig.nim @@ -338,26 +338,70 @@ suite "Waku NetConfig": check: netConfig.enrMultiaddrs.contains(dns4TcpEndPoint(dns4DomainName, extPort)) - asyncTest "wsHostAddress is not announced if a WS address is provided in extMultiAddrs": + asyncTest "wsHostAddress is not announced if a WS/WSS address is provided in extMultiAddrs": - let + var conf = defaultTestWakuNodeConf() extAddIp = ValidIpAddress.init("1.2.3.4") extAddPort = Port(1234) + wsEnabled = true wssEnabled = false extMultiAddrs = @[(ip4TcpEndPoint(extAddIp, extAddPort) & wsFlag(wssEnabled))] - let netConfigRes = NetConfig.init( + var netConfigRes = NetConfig.init( bindIp = conf.listenAddress, bindPort = conf.tcpPort, - extMultiAddrs = extMultiAddrs + extMultiAddrs = extMultiAddrs, + wsEnabled = wsEnabled ) assert netConfigRes.isOk(), $netConfigRes.error - let netConfig = netConfigRes.get() + var netConfig = netConfigRes.get() + + check: + netConfig.announcedAddresses.len == 2 # Bind address + extAddress + netConfig.announcedAddresses[1] == extMultiAddrs[0] + + # Now same test for WSS external address + wssEnabled = true + extMultiAddrs = @[(ip4TcpEndPoint(extAddIp, extAddPort) & wsFlag(wssEnabled))] + + netConfigRes = NetConfig.init( + bindIp = conf.listenAddress, + bindPort = conf.tcpPort, + extMultiAddrs = extMultiAddrs, + wssEnabled = wssEnabled + ) + + assert netConfigRes.isOk(), $netConfigRes.error + + netConfig = netConfigRes.get() check: netConfig.announcedAddresses.len == 2 # Bind address + extAddress netConfig.announcedAddresses[1] == extMultiAddrs[0] + asyncTest "Only extMultiAddrs are published when enabling extMultiAddrsOnly flag": + + let + conf = defaultTestWakuNodeConf() + extAddIp = ValidIpAddress.init("1.2.3.4") + extAddPort = Port(1234) + extMultiAddrs = @[ip4TcpEndPoint(extAddIp, extAddPort)] + + let netConfigRes = NetConfig.init( + bindIp = conf.listenAddress, + bindPort = conf.tcpPort, + extMultiAddrs = extMultiAddrs, + extMultiAddrsOnly = true + ) + + assert netConfigRes.isOk(), $netConfigRes.error + + let netConfig = netConfigRes.get() + + check: + netConfig.announcedAddresses.len == 1 # ExtAddress + netConfig.announcedAddresses[0] == extMultiAddrs[0] + diff --git a/waku/node/config.nim b/waku/node/config.nim index f90aaff1d6..46af0e326a 100644 --- a/waku/node/config.nim +++ b/waku/node/config.nim @@ -75,6 +75,7 @@ proc init*(T: type NetConfig, extIp = none(ValidIpAddress), extPort = none(Port), extMultiAddrs = newSeq[MultiAddress](), + extMultiAddrsOnly: bool = false, wsBindPort: Port = Port(8000), wsEnabled: bool = false, wssEnabled: bool = false, @@ -125,21 +126,22 @@ proc init*(T: type NetConfig, var announcedAddresses = newSeq[MultiAddress]() - if hostExtAddress.isSome(): - announcedAddresses.add(hostExtAddress.get()) - else: - announcedAddresses.add(formatListenAddress(hostAddress)) # We always have at least a bind address for the host - + if not extMultiAddrsOnly: + if hostExtAddress.isSome(): + announcedAddresses.add(hostExtAddress.get()) + else: + announcedAddresses.add(formatListenAddress(hostAddress)) # We always have at least a bind address for the host + + if wsExtAddress.isSome(): + announcedAddresses.add(wsExtAddress.get()) + elif wsHostAddress.isSome() and not containsWsAddress(extMultiAddrs): + # Only publish wsHostAddress if a WS address is not set in extMultiAddrs + announcedAddresses.add(wsHostAddress.get()) + # External multiaddrs that the operator may have configured if extMultiAddrs.len > 0: announcedAddresses.add(extMultiAddrs) - if wsExtAddress.isSome(): - announcedAddresses.add(wsExtAddress.get()) - elif wsHostAddress.isSome() and not containsWsAddress(extMultiAddrs): - # Only publish wsHostAddress if a WS address is not set in extMultiAddrs - announcedAddresses.add(wsHostAddress.get()) - let # enrMultiaddrs are just addresses which cannot be represented in ENR, as described in # https://rfc.vac.dev/spec/31/#many-connection-types From 7f91ac76ccbf4c9361411a3611f7e6b901eb9c86 Mon Sep 17 00:00:00 2001 From: Ivan FB <128452529+Ivansete-status@users.noreply.github.com> Date: Wed, 25 Oct 2023 17:53:00 +0200 Subject: [PATCH 091/274] Extend temporary pr images validity to 30 days (#2158) --- .github/workflows/container-image.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/container-image.yml b/.github/workflows/container-image.yml index d8de9e2542..b5953f2635 100644 --- a/.github/workflows/container-image.yml +++ b/.github/workflows/container-image.yml @@ -59,7 +59,7 @@ jobs: echo "commit_hash=$(git rev-parse HEAD)" >> $GITHUB_OUTPUT docker login -u ${QUAY_USER} -p ${QUAY_PASSWORD} quay.io - docker build -t ${IMAGE} -f docker/binaries/Dockerfile.bn.amd64 --label quay.expires-after=7d . + docker build -t ${IMAGE} -f docker/binaries/Dockerfile.bn.amd64 --label quay.expires-after=30d . docker push ${IMAGE} env: QUAY_PASSWORD: ${{ secrets.QUAY_PASSWORD }} From b109a5831481ae5c4d3db3f78c7db0b8ab1922a3 Mon Sep 17 00:00:00 2001 From: gabrielmer <101006718+gabrielmer@users.noreply.github.com> Date: Thu, 26 Oct 2023 10:54:51 +0300 Subject: [PATCH 092/274] chore(release): update changelog for v0.21.1 release (#2155) --- CHANGELOG.md | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ceb66d14e7..d1d9a7b7d8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,26 @@ +## v0.21.1 (2023-10-25) + +This patch release addresses the following issues: +- WSS connections being suddenly terminated under rare conditions +- Ability for the user to control announced multiaddresses + +### Changes + +- adding ext-multiaddr-only CLI flag ([#2141](https://github.com/waku-org/nwaku/issues/2141)) ([e2dfc2ed](https://github.com/waku-org/nwaku/commit/e2dfc2ed)) +- bumping nim-libp2p to include WSS fix ([#2150](https://github.com/waku-org/nwaku/issues/2150)) ([18b5149a](https://github.com/waku-org/nwaku/commit/18b5149a)) + +This is a patch release that is fully backwards-compatible with release `v0.21.0`. + +It supports the same [libp2p protocols](https://docs.libp2p.io/concepts/protocols/): +| Protocol | Spec status | Protocol id | +| ---: | :---: | :--- | +| [`11/WAKU2-RELAY`](https://rfc.vac.dev/spec/11/) | `stable` | `/vac/waku/relay/2.0.0` | +| [`12/WAKU2-FILTER`](https://rfc.vac.dev/spec/12/) | `draft` | `/vac/waku/filter/2.0.0-beta1`
`/vac/waku/filter-subscribe/2.0.0-beta1`
`/vac/waku/filter-push/2.0.0-beta1` | +| [`13/WAKU2-STORE`](https://rfc.vac.dev/spec/13/) | `draft` | `/vac/waku/store/2.0.0-beta4` | +| [`19/WAKU2-LIGHTPUSH`](https://rfc.vac.dev/spec/19/) | `draft` | `/vac/waku/lightpush/2.0.0-beta1` | + +The Waku v1 implementation has been removed from this repository and can be found in a separate [Waku Legacy](https://github.com/waku-org/waku-legacy) repository. + ## v0.21.0 (2023-10-18) > Note: This is the last release supporting the `--topic` option. It is being deprecated in favor of a more specific options `--pubsub-topic` & `--content-topic` From 3be6163639d4141a6ee51ae8f8e83635f541f783 Mon Sep 17 00:00:00 2001 From: gabrielmer <101006718+gabrielmer@users.noreply.github.com> Date: Thu, 26 Oct 2023 11:59:44 +0300 Subject: [PATCH 093/274] fix: updating v0.21.1 release date in changelog (#2160) --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d1d9a7b7d8..467c9aac25 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -## v0.21.1 (2023-10-25) +## v0.21.1 (2023-10-26) This patch release addresses the following issues: - WSS connections being suddenly terminated under rare conditions From f7b9afc26f566c38ce03f9d248942dc87e65979c Mon Sep 17 00:00:00 2001 From: gabrielmer <101006718+gabrielmer@users.noreply.github.com> Date: Fri, 27 Oct 2023 10:11:47 +0300 Subject: [PATCH 094/274] feat: implementing port 0 support (#2125) --- apps/wakunode2/app.nim | 121 ++++++++++++++++++++--------- apps/wakunode2/internal_config.nim | 48 +++++++++++- apps/wakunode2/wakunode2.nim | 2 +- tests/wakunode2/test_app.nim | 48 +++++++++++- waku/node/config.nim | 2 +- waku/node/waku_node.nim | 33 ++++++-- 6 files changed, 203 insertions(+), 51 deletions(-) diff --git a/apps/wakunode2/app.nim b/apps/wakunode2/app.nim index f103acb17f..6d8a847996 100644 --- a/apps/wakunode2/app.nim +++ b/apps/wakunode2/app.nim @@ -8,6 +8,8 @@ import stew/results, chronicles, chronos, + libp2p/wire, + libp2p/multicodec, libp2p/crypto/crypto, libp2p/nameresolving/dnsresolver, libp2p/protocols/pubsub/gossipsub, @@ -117,39 +119,8 @@ proc init*(T: type App, rng: ref HmacDrbgContext, conf: WakuNodeConf): T = quit(QuitFailure) else: netConfigRes.get() - var enrBuilder = EnrBuilder.init(key) + let recordRes = enrConfiguration(conf, netConfig, key) - enrBuilder.withIpAddressAndPorts( - netConfig.enrIp, - netConfig.enrPort, - netConfig.discv5UdpPort - ) - - if netConfig.wakuFlags.isSome(): - enrBuilder.withWakuCapabilities(netConfig.wakuFlags.get()) - - enrBuilder.withMultiaddrs(netConfig.enrMultiaddrs) - - let topics = - if conf.pubsubTopics.len > 0 or conf.contentTopics.len > 0: - let shardsRes = conf.contentTopics.mapIt(getShard(it)) - for res in shardsRes: - if res.isErr(): - error "failed to shard content topic", error=res.error - quit(QuitFailure) - - let shards = shardsRes.mapIt(it.get()) - - conf.pubsubTopics & shards - else: - conf.topics - - let addShardedTopics = enrBuilder.withShardedTopics(topics) - if addShardedTopics.isErr(): - error "failed to add sharded topics to ENR", error=addShardedTopics.error - quit(QuitFailure) - - let recordRes = enrBuilder.build() let record = if recordRes.isErr(): error "failed to create record", error=recordRes.error @@ -329,6 +300,72 @@ proc setupWakuApp*(app: var App): AppResult[void] = ok() +proc getPorts(listenAddrs: seq[MultiAddress]): + AppResult[tuple[tcpPort, websocketPort: Option[Port]]] = + + var tcpPort, websocketPort = none(Port) + + for a in listenAddrs: + if a.isWsAddress(): + if websocketPort.isNone(): + let wsAddress = initTAddress(a).valueOr: + return err("getPorts wsAddr error:" & $error) + websocketPort = some(wsAddress.port) + elif tcpPort.isNone(): + let tcpAddress = initTAddress(a).valueOr: + return err("getPorts tcpAddr error:" & $error) + tcpPort = some(tcpAddress.port) + + return ok((tcpPort: tcpPort, websocketPort: websocketPort)) + +proc updateNetConfig(app: var App): AppResult[void] = + + var conf = app.conf + let (tcpPort, websocketPort) = getPorts(app.node.switch.peerInfo.listenAddrs).valueOr: + return err("Could not retrieve ports " & error) + + if tcpPort.isSome(): + conf.tcpPort = tcpPort.get() + + if websocketPort.isSome(): + conf.websocketPort = websocketPort.get() + + # Rebuild NetConfig with bound port values + let netConf = networkConfiguration(conf, clientId).valueOr: + return err("Could not update NetConfig: " & error) + + app.netConf = netConf + + return ok() + +proc updateEnr(app: var App): AppResult[void] = + + let record = enrConfiguration(app.conf, app.netConf, app.key).valueOr: + return err(error) + + app.record = record + app.node.enr = record + + if app.conf.discv5Discovery: + app.wakuDiscV5 = some(app.setupDiscoveryV5()) + + return ok() + +proc updateApp(app: var App): AppResult[void] = + + if app.conf.tcpPort == Port(0) or app.conf.websocketPort == Port(0): + + updateNetConfig(app).isOkOr: + return err("error calling updateNetConfig: " & $error) + + updateEnr(app).isOkOr: + return err("error calling updateEnr: " & $error) + + app.node.announcedAddresses = app.netConf.announcedAddresses + + printNodeNetworkInfo(app.node) + + return ok() ## Mount protocols @@ -548,7 +585,18 @@ proc startNode(node: WakuNode, conf: WakuNodeConf, return ok() -proc startApp*(app: App): Future[AppResult[void]] {.async.} = +proc startApp*(app: var App): AppResult[void] = + + try: + (waitFor startNode(app.node,app.conf,app.dynamicBootstrapNodes)).isOkOr: + return err(error) + except CatchableError: + return err("exception starting node: " & getCurrentExceptionMsg()) + + # Update app data that is set dynamically on node start + app.updateApp().isOkOr: + return err("Error in updateApp: " & $error) + if app.wakuDiscv5.isSome(): let wakuDiscv5 = app.wakuDiscv5.get() @@ -559,11 +607,8 @@ proc startApp*(app: App): Future[AppResult[void]] {.async.} = asyncSpawn wakuDiscv5.searchLoop(app.node.peerManager) asyncSpawn wakuDiscv5.subscriptionsListener(app.node.topicSubscriptionQueue) - return await startNode( - app.node, - app.conf, - app.dynamicBootstrapNodes - ) + return ok() + ## Monitoring and external interfaces diff --git a/apps/wakunode2/internal_config.nim b/apps/wakunode2/internal_config.nim index 0eec05bb4e..39826fdfef 100644 --- a/apps/wakunode2/internal_config.nim +++ b/apps/wakunode2/internal_config.nim @@ -4,15 +4,61 @@ import libp2p/crypto/crypto, libp2p/multiaddress, libp2p/nameresolving/dnsresolver, - std/options, + std/[options, sequtils], stew/results, stew/shims/net import ../../waku/common/utils/nat, ../../waku/node/config, ../../waku/waku_enr/capabilities, + ../../waku/waku_enr, + ../../waku/waku_core, ./external_config +proc enrConfiguration*(conf: WakuNodeConf, netConfig: NetConfig, key: crypto.PrivateKey): + Result[enr.Record, string] = + + var enrBuilder = EnrBuilder.init(key) + + enrBuilder.withIpAddressAndPorts( + netConfig.enrIp, + netConfig.enrPort, + netConfig.discv5UdpPort + ) + + if netConfig.wakuFlags.isSome(): + enrBuilder.withWakuCapabilities(netConfig.wakuFlags.get()) + + enrBuilder.withMultiaddrs(netConfig.enrMultiaddrs) + + let topics = + if conf.pubsubTopics.len > 0 or conf.contentTopics.len > 0: + let shardsRes = conf.contentTopics.mapIt(getShard(it)) + for res in shardsRes: + if res.isErr(): + error "failed to shard content topic", error=res.error + return err($res.error) + + let shards = shardsRes.mapIt(it.get()) + + conf.pubsubTopics & shards + else: + conf.topics + + let addShardedTopics = enrBuilder.withShardedTopics(topics) + if addShardedTopics.isErr(): + error "failed to add sharded topics to ENR", error=addShardedTopics.error + return err($addShardedTopics.error) + + let recordRes = enrBuilder.build() + let record = + if recordRes.isErr(): + error "failed to create record", error=recordRes.error + return err($recordRes.error) + else: recordRes.get() + + return ok(record) + proc validateExtMultiAddrs*(vals: seq[string]): Result[seq[MultiAddress], string] = var multiaddrs: seq[MultiAddress] diff --git a/apps/wakunode2/wakunode2.nim b/apps/wakunode2/wakunode2.nim index 30a281f332..cf05b5d675 100644 --- a/apps/wakunode2/wakunode2.nim +++ b/apps/wakunode2/wakunode2.nim @@ -87,7 +87,7 @@ when isMainModule: debug "5/7 Starting node and mounted protocols" - let res6 = waitFor wakunode2.startApp() + let res6 = wakunode2.startApp() if res6.isErr(): error "5/7 Starting node and protocols failed", error=res6.error quit(QuitFailure) diff --git a/tests/wakunode2/test_app.nim b/tests/wakunode2/test_app.nim index fe2c735c18..f87d264f8f 100644 --- a/tests/wakunode2/test_app.nim +++ b/tests/wakunode2/test_app.nim @@ -12,7 +12,9 @@ import import ../testlib/common, ../testlib/wakucore, - ../testlib/wakunode, + ../testlib/wakunode + +include ../../apps/wakunode2/app suite "Wakunode2 - App": @@ -27,7 +29,7 @@ suite "Wakunode2 - App": ## Then check: - version == app.git_version + version == git_version suite "Wakunode2 - App initialization": test "peer persistence setup should be successfully mounted": @@ -53,7 +55,7 @@ suite "Wakunode2 - App initialization": require wakunode2.setupDyamicBootstrapNodes().isOk() require wakunode2.setupWakuApp().isOk() require isOk(waitFor wakunode2.setupAndMountProtocols()) - require isOk(waitFor wakunode2.startApp()) + require isOk(wakunode2.startApp()) require wakunode2.setupMonitoringAndExternalInterfaces().isOk() ## Then @@ -67,3 +69,43 @@ suite "Wakunode2 - App initialization": ## Cleanup waitFor wakunode2.stop() + + test "app properly handles dynamic port configuration": + ## Given + var conf = defaultTestWakuNodeConf() + conf.tcpPort = Port(0) + + ## When + var wakunode2 = App.init(rng(), conf) + require wakunode2.setupPeerPersistence().isOk() + require wakunode2.setupDyamicBootstrapNodes().isOk() + require wakunode2.setupWakuApp().isOk() + require isOk(waitFor wakunode2.setupAndMountProtocols()) + require isOk(wakunode2.startApp()) + require wakunode2.setupMonitoringAndExternalInterfaces().isOk() + + ## Then + let + node = wakunode2.node + typedNodeEnr = node.enr.toTypedRecord() + typedAppEnr = wakunode2.record.toTypedRecord() + + assert typedNodeEnr.isOk(), $typedNodeEnr.error + assert typedAppEnr.isOk(), $typedAppEnr.error + + check: + # App started properly + not node.isNil() + node.wakuArchive.isNil() + node.wakuStore.isNil() + not node.wakuStoreClient.isNil() + not node.rendezvous.isNil() + + # DS structures are updated with dynamic ports + wakunode2.netConf.bindPort != Port(0) + wakunode2.netConf.enrPort.get() != Port(0) + typedNodeEnr.get().tcp.get() != 0 + typedAppEnr.get().tcp.get() != 0 + + ## Cleanup + waitFor wakunode2.stop() diff --git a/waku/node/config.nim b/waku/node/config.nim index 46af0e326a..f53d67134f 100644 --- a/waku/node/config.nim +++ b/waku/node/config.nim @@ -59,7 +59,7 @@ proc formatListenAddress(inputMultiAdd: MultiAddress): MultiAddress = # If MultiAddress contains "0.0.0.0", replace it for "127.0.0.1" return MultiAddress.init(inputStr.replace("0.0.0.0", "127.0.0.1")).get() -proc isWsAddress(ma: MultiAddress): bool = +proc isWsAddress*(ma: MultiAddress): bool = let isWs = ma.contains(multiCodec("ws")).get() isWss = ma.contains(multiCodec("wss")).get() diff --git a/waku/node/waku_node.nim b/waku/node/waku_node.nim index 83207024e1..fc512b1786 100644 --- a/waku/node/waku_node.nim +++ b/waku/node/waku_node.nim @@ -1073,17 +1073,19 @@ proc mountRendezvous*(node: WakuNode) {.async, raises: [Defect, LPError].} = node.switch.mount(node.rendezvous) +proc isBindIpWithZeroPort(inputMultiAdd: MultiAddress): bool = + let inputStr = $inputMultiAdd + if inputStr.contains("0.0.0.0/tcp/0") or inputStr.contains("127.0.0.1/tcp/0"): + return true -proc start*(node: WakuNode) {.async.} = - ## Starts a created Waku Node and - ## all its mounted protocols. - - waku_version.set(1, labelValues=[git_version]) - info "Starting Waku node", version=git_version + return false +proc printNodeNetworkInfo*(node: WakuNode): void = let peerInfo = node.switch.peerInfo - info "PeerInfo", peerId = peerInfo.peerId, addrs = peerInfo.addrs var listenStr = "" + + info "PeerInfo", peerId = peerInfo.peerId, addrs = peerInfo.addrs + for address in node.announcedAddresses: var fulladdr = "[" & $address & "/p2p/" & $peerInfo.peerId & "]" listenStr &= fulladdr @@ -1092,6 +1094,23 @@ proc start*(node: WakuNode) {.async.} = info "Listening on", full = listenStr info "DNS: discoverable ENR ", enr = node.enr.toUri() +proc start*(node: WakuNode) {.async.} = + ## Starts a created Waku Node and + ## all its mounted protocols. + + waku_version.set(1, labelValues=[git_version]) + info "Starting Waku node", version=git_version + + var zeroPortPresent = false + for address in node.announcedAddresses: + if isBindIpWithZeroPort(address): + zeroPortPresent = true + + if not zeroPortPresent: + printNodeNetworkInfo(node) + else: + info "Listening port is dynamically allocated, address and ENR generation postponed" + # Perform relay-specific startup tasks TODO: this should be rethought if not node.wakuRelay.isNil(): await node.startRelay() From b8bcb1e74bd9e9907196a96a458bc752a6a1e5af Mon Sep 17 00:00:00 2001 From: NagyZoltanPeter <113987313+NagyZoltanPeter@users.noreply.github.com> Date: Fri, 27 Oct 2023 16:31:57 +0200 Subject: [PATCH 095/274] Pull new version of nim-presto that implements RestServer' new error handler callback (#2144) Added rest request error handler to capture calls on not installed endpoints better, more descriptive error message returned. --- apps/wakunode2/app.nim | 35 ++++++++++++++++++++++++++++++++++- vendor/nim-presto | 2 +- waku/waku_api/rest/server.nim | 12 ++++++++---- 3 files changed, 43 insertions(+), 6 deletions(-) diff --git a/apps/wakunode2/app.nim b/apps/wakunode2/app.nim index 6d8a847996..bb37b9e1c5 100644 --- a/apps/wakunode2/app.nim +++ b/apps/wakunode2/app.nim @@ -614,7 +614,33 @@ proc startApp*(app: var App): AppResult[void] = ## Monitoring and external interfaces proc startRestServer(app: App, address: ValidIpAddress, port: Port, conf: WakuNodeConf): AppResult[RestServerRef] = - let server = ? newRestHttpServer(address, port) + + # Used to register api endpoints that are not currently installed as keys, + # values are holding error messages to be returned to the client + var notInstalledTab: Table[string, string] = initTable[string, string]() + + proc requestErrorHandler(error: RestRequestError, + request: HttpRequestRef): + Future[HttpResponseRef] {.async.} = + case error + of RestRequestError.Invalid: + return await request.respond(Http400, "Invalid request", HttpTable.init()) + of RestRequestError.NotFound: + let rootPath = request.rawPath.split("/")[1] + if notInstalledTab.hasKey(rootPath): + return await request.respond(Http404, notInstalledTab[rootPath], HttpTable.init()) + else: + return await request.respond(Http400, "Bad request initiated. Invalid path or method used.", HttpTable.init()) + of RestRequestError.InvalidContentBody: + return await request.respond(Http400, "Invalid content body", HttpTable.init()) + of RestRequestError.InvalidContentType: + return await request.respond(Http400, "Invalid content type", HttpTable.init()) + of RestRequestError.Unexpected: + return defaultResponse() + + return defaultResponse() + + let server = ? newRestHttpServer(address, port, requestErrorHandler = requestErrorHandler) ## Admin REST API installAdminApiHandlers(server.router, app.node) @@ -641,6 +667,8 @@ proc startRestServer(app: App, address: ValidIpAddress, port: Port, conf: WakuNo app.node.subscribe((kind: ContentSub, topic: contentTopic), some(autoHandler)) installRelayApiHandlers(server.router, app.node, cache) + else: + notInstalledTab["relay"] = "/relay endpoints are not available. Please check your configuration: --relay" ## Filter REST API if conf.filternode != "" and @@ -652,6 +680,9 @@ proc startRestServer(app: App, address: ValidIpAddress, port: Port, conf: WakuNo let filterCache = rest_filter_api.MessageCache.init() rest_filter_api.installFilterRestApiHandlers(server.router, app.node, filterCache) + else: + notInstalledTab["filter"] = "/filter endpoints are not available. Please check your configuration: --filternode" + ## Store REST API installStoreApiHandlers(server.router, app.node) @@ -660,6 +691,8 @@ proc startRestServer(app: App, address: ValidIpAddress, port: Port, conf: WakuNo if conf.lightpushnode != "" and app.node.wakuLightpushClient != nil: rest_lightpush_api.installLightPushRequestHandler(server.router, app.node) + else: + notInstalledTab["lightpush"] = "/lightpush endpoints are not available. Please check your configuration: --lightpushnode" server.start() info "Starting REST HTTP server", url = "http://" & $address & ":" & $port & "/" diff --git a/vendor/nim-presto b/vendor/nim-presto index 2ae448ff5b..81250a419b 160000 --- a/vendor/nim-presto +++ b/vendor/nim-presto @@ -1 +1 @@ -Subproject commit 2ae448ff5b0808c8f562c6f0a70bbd7a05407a37 +Subproject commit 81250a419bc097a9e93f2ab69de60543eee07138 diff --git a/waku/waku_api/rest/server.nim b/waku/waku_api/rest/server.nim index 430472b686..f25f29ce90 100644 --- a/waku/waku_api/rest/server.nim +++ b/waku/waku_api/rest/server.nim @@ -59,7 +59,8 @@ proc getRouter(allowedOrigin: Option[string]): RestRouter = proc init*(T: type RestServerRef, ip: ValidIpAddress, port: Port, allowedOrigin=none(string), - conf=RestServerConf.default()): RestServerResult[T] = + conf=RestServerConf.default(), + requestErrorHandler: RestRequestErrorHandler = nil): RestServerResult[T] = let address = initTAddress(ip, port) let serverFlags = { HttpServerFlags.QueryCommaSeparatedArray, @@ -82,7 +83,8 @@ proc init*(T: type RestServerRef, serverFlags = serverFlags, httpHeadersTimeout = headersTimeout, maxHeadersSize = maxHeadersSize, - maxRequestBodySize = maxRequestBodySize + maxRequestBodySize = maxRequestBodySize, + requestErrorHandler = requestErrorHandler ) except CatchableError: return err(getCurrentExceptionMsg()) @@ -92,5 +94,7 @@ proc init*(T: type RestServerRef, proc newRestHttpServer*(ip: ValidIpAddress, port: Port, allowedOrigin=none(string), - conf=RestServerConf.default()): RestServerResult[RestServerRef] = - RestServerRef.init(ip, port, allowedOrigin, conf) + conf=RestServerConf.default(), + requestErrorHandler: RestRequestErrorHandler = nil): + RestServerResult[RestServerRef] = + RestServerRef.init(ip, port, allowedOrigin, conf, requestErrorHandler) From 7ca516a5f83ed3961f1a8c64b20d1d8d9bb2a36f Mon Sep 17 00:00:00 2001 From: Simon-Pierre Vivier Date: Fri, 27 Oct 2023 15:43:54 -0400 Subject: [PATCH 096/274] feat: REST APIs discovery handlers (#2109) --- apps/wakunode2/app.nim | 30 ++++- tests/wakunode_rest/test_rest_store.nim | 2 +- waku/waku_api/cache_handlers.nim | 23 ---- waku/waku_api/handlers.nim | 50 ++++++++ waku/waku_api/jsonrpc/relay/handlers.nim | 2 +- waku/waku_api/rest/filter/handlers.nim | 146 ++++++++++++++-------- waku/waku_api/rest/lightpush/handlers.nim | 39 ++++-- waku/waku_api/rest/relay/handlers.nim | 2 +- waku/waku_api/rest/store/handlers.nim | 46 +++---- 9 files changed, 223 insertions(+), 117 deletions(-) delete mode 100644 waku/waku_api/cache_handlers.nim create mode 100644 waku/waku_api/handlers.nim diff --git a/apps/wakunode2/app.nim b/apps/wakunode2/app.nim index bb37b9e1c5..4170039cfc 100644 --- a/apps/wakunode2/app.nim +++ b/apps/wakunode2/app.nim @@ -31,7 +31,7 @@ import ../../waku/node/peer_manager/peer_store/waku_peer_storage, ../../waku/node/peer_manager/peer_store/migrations as peer_store_sqlite_migrations, ../../waku/waku_api/message_cache, - ../../waku/waku_api/cache_handlers, + ../../waku/waku_api/handlers, ../../waku/waku_api/rest/server, ../../waku/waku_api/rest/debug/handlers as rest_debug_api, ../../waku/waku_api/rest/relay/handlers as rest_relay_api, @@ -679,18 +679,38 @@ proc startRestServer(app: App, address: ValidIpAddress, port: Port, conf: WakuNo rest_legacy_filter_api.installLegacyFilterRestApiHandlers(server.router, app.node, legacyFilterCache) let filterCache = rest_filter_api.MessageCache.init() - rest_filter_api.installFilterRestApiHandlers(server.router, app.node, filterCache) + + let filterDiscoHandler = + if app.wakuDiscv5.isSome(): + some(defaultDiscoveryHandler(app.wakuDiscv5.get(), Filter)) + else: none(DiscoveryHandler) + + rest_filter_api.installFilterRestApiHandlers( + server.router, + app.node, + filterCache, + filterDiscoHandler, + ) else: notInstalledTab["filter"] = "/filter endpoints are not available. Please check your configuration: --filternode" - ## Store REST API - installStoreApiHandlers(server.router, app.node) + let storeDiscoHandler = + if app.wakuDiscv5.isSome(): + some(defaultDiscoveryHandler(app.wakuDiscv5.get(), Store)) + else: none(DiscoveryHandler) + + installStoreApiHandlers(server.router, app.node, storeDiscoHandler) ## Light push API if conf.lightpushnode != "" and app.node.wakuLightpushClient != nil: - rest_lightpush_api.installLightPushRequestHandler(server.router, app.node) + let lightDiscoHandler = + if app.wakuDiscv5.isSome(): + some(defaultDiscoveryHandler(app.wakuDiscv5.get(), Lightpush)) + else: none(DiscoveryHandler) + + rest_lightpush_api.installLightPushRequestHandler(server.router, app.node, lightDiscoHandler) else: notInstalledTab["lightpush"] = "/lightpush endpoints are not available. Please check your configuration: --lightpushnode" diff --git a/tests/wakunode_rest/test_rest_store.nim b/tests/wakunode_rest/test_rest_store.nim index cf1109ff92..ee64a873ed 100644 --- a/tests/wakunode_rest/test_rest_store.nim +++ b/tests/wakunode_rest/test_rest_store.nim @@ -513,7 +513,7 @@ procSuite "Waku v2 Rest API - Store": response.status == 412 $response.contentType == $MIMETYPE_TEXT response.data.messages.len == 0 - response.data.error_message.get == "Missing known store-peer node" + response.data.error_message.get == NoPeerNoDiscError.errobj.message # Now add the storenode from "config" node.peerManager.addServicePeer(remotePeerInfo, diff --git a/waku/waku_api/cache_handlers.nim b/waku/waku_api/cache_handlers.nim deleted file mode 100644 index c378505764..0000000000 --- a/waku/waku_api/cache_handlers.nim +++ /dev/null @@ -1,23 +0,0 @@ -when (NimMajor, NimMinor) < (1, 4): - {.push raises: [Defect].} -else: - {.push raises: [].} - -import - chronos, - chronicles -import - ../waku_relay, - ../waku_core, - ./message_cache - -##### Message handler - -proc messageCacheHandler*(cache: MessageCache[string]): WakuRelayHandler = - return proc(pubsubTopic: string, msg: WakuMessage): Future[void] {.async, closure.} = - cache.addMessage(PubSubTopic(pubsubTopic), msg) - -proc autoMessageCacheHandler*(cache: MessageCache[string]): WakuRelayHandler = - return proc(pubsubTopic: string, msg: WakuMessage): Future[void] {.async, closure.} = - if cache.isSubscribed(msg.contentTopic): - cache.addMessage(msg.contentTopic, msg) \ No newline at end of file diff --git a/waku/waku_api/handlers.nim b/waku/waku_api/handlers.nim new file mode 100644 index 0000000000..075c5959b2 --- /dev/null +++ b/waku/waku_api/handlers.nim @@ -0,0 +1,50 @@ +when (NimMajor, NimMinor) < (1, 4): + {.push raises: [Defect].} +else: + {.push raises: [].} + +import + chronos, + chronicles, + std/[options, sequtils], + stew/results +import + ../waku_discv5, + ../waku_relay, + ../waku_core, + ./message_cache + +### Discovery + +type DiscoveryHandler* = proc(): Future[Result[Option[RemotePeerInfo], string]] {.async, closure.} + +proc defaultDiscoveryHandler*(discv5: WakuDiscoveryV5, cap: Capabilities): DiscoveryHandler = + proc(): Future[Result[Option[RemotePeerInfo], string]] {.async, closure.} = + #Discv5 is already filtering peers by shards no need to pass a predicate. + let findPeers = discv5.findRandomPeers() + + if not await findPeers.withTimeout(60.seconds): + return err("discovery process timed out!") + + var peers = findPeers.read() + + peers.keepItIf(it.supportsCapability(cap)) + + if peers.len == 0: + return ok(none(RemotePeerInfo)) + + let remotePeerInfo = peers[0].toRemotePeerInfo().valueOr: + return err($error) + + return ok(some(remotePeerInfo)) + +### Message Cache + +proc messageCacheHandler*(cache: MessageCache[string]): WakuRelayHandler = + return proc(pubsubTopic: string, msg: WakuMessage): Future[void] {.async, closure.} = + cache.addMessage(PubSubTopic(pubsubTopic), msg) + +proc autoMessageCacheHandler*(cache: MessageCache[string]): WakuRelayHandler = + return proc(pubsubTopic: string, msg: WakuMessage): Future[void] {.async, closure.} = + if cache.isSubscribed(msg.contentTopic): + cache.addMessage(msg.contentTopic, msg) \ No newline at end of file diff --git a/waku/waku_api/jsonrpc/relay/handlers.nim b/waku/waku_api/jsonrpc/relay/handlers.nim index c52369abf5..6801a69de7 100644 --- a/waku/waku_api/jsonrpc/relay/handlers.nim +++ b/waku/waku_api/jsonrpc/relay/handlers.nim @@ -17,7 +17,7 @@ import ../../../waku_rln_relay/rln/wrappers, ../../../waku_node, ../../message_cache, - ../../cache_handlers, + ../../handlers, ../message from std/times import getTime diff --git a/waku/waku_api/rest/filter/handlers.nim b/waku/waku_api/rest/filter/handlers.nim index 32527f3864..a3dda79c14 100644 --- a/waku/waku_api/rest/filter/handlers.nim +++ b/waku/waku_api/rest/filter/handlers.nim @@ -21,6 +21,7 @@ import ../../../waku_filter_v2/client as filter_protocol_client, ../../../waku_filter_v2/common as filter_protocol_type, ../../message_cache, + ../../handlers, ../serdes, ../responses, ./types @@ -145,11 +146,18 @@ proc makeRestResponse(requestId: string, protocolClientRes: filter_protocol_type return resp.get() -proc filterPostPutSubscriptionRequestHandler(node: WakuNode, - contentBody: Option[ContentBody], - cache: MessageCache): - Future[RestApiResponse] - {.async.} = +const NoPeerNoDiscoError = FilterSubscribeError.serviceUnavailable( + "No suitable service peer & no discovery method") + +const NoPeerNoneFoundError = FilterSubscribeError.serviceUnavailable( + "No suitable service peer & none discovered") + +proc filterPostPutSubscriptionRequestHandler( + node: WakuNode, + contentBody: Option[ContentBody], + cache: MessageCache, + discHandler: Option[DiscoveryHandler] = none(DiscoveryHandler), + ): Future[RestApiResponse] {.async.} = ## handles any filter subscription requests, adds or modifies. let decodedBody = decodeRequestBody[FilterSubscribeRequest](contentBody) @@ -159,14 +167,17 @@ proc filterPostPutSubscriptionRequestHandler(node: WakuNode, let req: FilterSubscribeRequest = decodedBody.value() - let peerOpt = node.peerManager.selectPeer(WakuFilterSubscribeCodec) + let peer = node.peerManager.selectPeer(WakuFilterSubscribeCodec).valueOr: + let handler = discHandler.valueOr: + return makeRestResponse(req.requestId, NoPeerNoDiscoError) + + let peerOp = (await handler()).valueOr: + return RestApiResponse.internalServerError($error) - if peerOpt.isNone(): - return makeRestResponse(req.requestId, FilterSubscribeError.serviceUnavailable("No suitable peers")) + peerOp.valueOr: + return makeRestResponse(req.requestId, NoPeerNoneFoundError) - let subFut = node.filterSubscribe(req.pubsubTopic, - req.contentFilters, - peerOpt.get()) + let subFut = node.filterSubscribe(req.pubsubTopic, req.contentFilters, peer) if not await subFut.withTimeout(futTimeoutForSubscriptionProcessing): error "Failed to subscribe to contentFilters do to timeout!" @@ -178,29 +189,36 @@ proc filterPostPutSubscriptionRequestHandler(node: WakuNode, return makeRestResponse(req.requestId, subFut.read()) -proc installFilterPostSubscriptionsHandler(router: var RestRouter, - node: WakuNode, - cache: MessageCache) = +proc installFilterPostSubscriptionsHandler( + router: var RestRouter, + node: WakuNode, + cache: MessageCache, + discHandler: Option[DiscoveryHandler] = none(DiscoveryHandler), + ) = router.api(MethodPost, ROUTE_FILTER_SUBSCRIPTIONS) do (contentBody: Option[ContentBody]) -> RestApiResponse: ## Subscribes a node to a list of contentTopics of a pubsubTopic debug "post", ROUTE_FILTER_SUBSCRIPTIONS, contentBody - let response = await filterPostPutSubscriptionRequestHandler(node, contentBody, cache) - return response + return await filterPostPutSubscriptionRequestHandler(node, contentBody, cache, discHandler) -proc installFilterPutSubscriptionsHandler(router: var RestRouter, - node: WakuNode, - cache: MessageCache) = +proc installFilterPutSubscriptionsHandler( + router: var RestRouter, + node: WakuNode, + cache: MessageCache, + discHandler: Option[DiscoveryHandler] = none(DiscoveryHandler), + ) = router.api(MethodPut, ROUTE_FILTER_SUBSCRIPTIONS) do (contentBody: Option[ContentBody]) -> RestApiResponse: ## Modifies a subscribtion of a node to a list of contentTopics of a pubsubTopic debug "put", ROUTE_FILTER_SUBSCRIPTIONS, contentBody - let response = await filterPostPutSubscriptionRequestHandler(node, contentBody, cache) - return response + return await filterPostPutSubscriptionRequestHandler(node, contentBody, cache, discHandler) -proc installFilterDeleteSubscriptionsHandler(router: var RestRouter, - node: WakuNode, - cache: MessageCache) = +proc installFilterDeleteSubscriptionsHandler( + router: var RestRouter, + node: WakuNode, + cache: MessageCache, + discHandler: Option[DiscoveryHandler] = none(DiscoveryHandler), + ) = router.api(MethodDelete, ROUTE_FILTER_SUBSCRIPTIONS) do (contentBody: Option[ContentBody]) -> RestApiResponse: ## Subscribes a node to a list of contentTopics of a PubSub topic debug "delete", ROUTE_FILTER_SUBSCRIPTIONS, contentBody @@ -213,13 +231,18 @@ proc installFilterDeleteSubscriptionsHandler(router: var RestRouter, let req: FilterUnsubscribeRequest = decodedBody.value() - let peerOpt = node.peerManager.selectPeer(WakuFilterSubscribeCodec) + let peer = node.peerManager.selectPeer(WakuFilterSubscribeCodec).valueOr: + let handler = discHandler.valueOr: + return makeRestResponse(req.requestId, NoPeerNoDiscoError) - if peerOpt.isNone(): - return makeRestResponse(req.requestId, - FilterSubscribeError.serviceUnavailable("No suitable peers")) + let peerOp = (await handler()).valueOr: + return RestApiResponse.internalServerError($error) + + peerOp.valueOr: + return makeRestResponse(req.requestId, NoPeerNoneFoundError) + + let unsubFut = node.filterUnsubscribe(req.pubsubTopic, req.contentFilters, peer) - let unsubFut = node.filterUnsubscribe(req.pubsubTopic, req.contentFilters, peerOpt.get()) if not await unsubFut.withTimeout(futTimeoutForSubscriptionProcessing): error "Failed to unsubscribe from contentFilters due to timeout!" return makeRestResponse(req.requestId, @@ -233,9 +256,12 @@ proc installFilterDeleteSubscriptionsHandler(router: var RestRouter, # Successfully unsubscribed from all requested contentTopics return makeRestResponse(req.requestId, unsubFut.read()) -proc installFilterDeleteAllSubscriptionsHandler(router: var RestRouter, - node: WakuNode, - cache: MessageCache) = +proc installFilterDeleteAllSubscriptionsHandler( + router: var RestRouter, + node: WakuNode, + cache: MessageCache, + discHandler: Option[DiscoveryHandler] = none(DiscoveryHandler), + ) = router.api(MethodDelete, ROUTE_FILTER_ALL_SUBSCRIPTIONS) do (contentBody: Option[ContentBody]) -> RestApiResponse: ## Subscribes a node to a list of contentTopics of a PubSub topic debug "delete", ROUTE_FILTER_ALL_SUBSCRIPTIONS, contentBody @@ -248,13 +274,18 @@ proc installFilterDeleteAllSubscriptionsHandler(router: var RestRouter, let req: FilterUnsubscribeAllRequest = decodedBody.value() - let peerOpt = node.peerManager.selectPeer(WakuFilterSubscribeCodec) + let peer = node.peerManager.selectPeer(WakuFilterSubscribeCodec).valueOr: + let handler = discHandler.valueOr: + return makeRestResponse(req.requestId, NoPeerNoDiscoError) - if peerOpt.isNone(): - return makeRestResponse(req.requestId, - FilterSubscribeError.serviceUnavailable("No suitable peers")) + let peerOp = (await handler()).valueOr: + return RestApiResponse.internalServerError($error) + + peerOp.valueOr: + return makeRestResponse(req.requestId, NoPeerNoneFoundError) - let unsubFut = node.filterUnsubscribeAll(peerOpt.get()) + let unsubFut = node.filterUnsubscribeAll(peer) + if not await unsubFut.withTimeout(futTimeoutForSubscriptionProcessing): error "Failed to unsubscribe from contentFilters due to timeout!" return makeRestResponse(req.requestId, @@ -268,18 +299,26 @@ proc installFilterDeleteAllSubscriptionsHandler(router: var RestRouter, const ROUTE_FILTER_SUBSCRIBER_PING* = "/filter/v2/subscriptions/{requestId}" -proc installFilterPingSubscriberHandler(router: var RestRouter, - node: WakuNode) = +proc installFilterPingSubscriberHandler( + router: var RestRouter, + node: WakuNode, + discHandler: Option[DiscoveryHandler] = none(DiscoveryHandler), + ) = router.api(MethodGet, ROUTE_FILTER_SUBSCRIBER_PING) do (requestId: string) -> RestApiResponse: ## Checks if a node has valid subscription or not. debug "get", ROUTE_FILTER_SUBSCRIBER_PING, requestId - let peerOpt = node.peerManager.selectPeer(WakuFilterSubscribeCodec) - if peerOpt.isNone(): - return makeRestResponse(requestId.get(), - FilterSubscribeError.serviceUnavailable("No suitable remote filter peers")) + let peer = node.peerManager.selectPeer(WakuFilterSubscribeCodec).valueOr: + let handler = discHandler.valueOr: + return makeRestResponse(requestId.get(), NoPeerNoDiscoError) + + let peerOp = (await handler()).valueOr: + return RestApiResponse.internalServerError($error) + + peerOp.valueOr: + return makeRestResponse(requestId.get(), NoPeerNoneFoundError) - let pingFutRes = node.wakuFilterClient.ping(peerOpt.get()) + let pingFutRes = node.wakuFilterClient.ping(peer) if not await pingFutRes.withTimeout(futTimeoutForSubscriptionProcessing): error "Failed to ping filter service peer due to timeout!" @@ -325,12 +364,15 @@ proc installFilterGetMessagesHandler(router: var RestRouter, return resp.get() -proc installFilterRestApiHandlers*(router: var RestRouter, - node: WakuNode, - cache: MessageCache) = - installFilterPingSubscriberHandler(router, node) - installFilterPostSubscriptionsHandler(router, node, cache) - installFilterPutSubscriptionsHandler(router, node, cache) - installFilterDeleteSubscriptionsHandler(router, node, cache) - installFilterDeleteAllSubscriptionsHandler(router, node, cache) +proc installFilterRestApiHandlers*( + router: var RestRouter, + node: WakuNode, + cache: MessageCache, + discHandler: Option[DiscoveryHandler] = none(DiscoveryHandler), + ) = + installFilterPingSubscriberHandler(router, node, discHandler) + installFilterPostSubscriptionsHandler(router, node, cache, discHandler) + installFilterPutSubscriptionsHandler(router, node, cache, discHandler) + installFilterDeleteSubscriptionsHandler(router, node, cache, discHandler) + installFilterDeleteAllSubscriptionsHandler(router, node, cache, discHandler) installFilterGetMessagesHandler(router, node, cache) diff --git a/waku/waku_api/rest/lightpush/handlers.nim b/waku/waku_api/rest/lightpush/handlers.nim index 7bbf22f6d8..c7da0ebe38 100644 --- a/waku/waku_api/rest/lightpush/handlers.nim +++ b/waku/waku_api/rest/lightpush/handlers.nim @@ -18,6 +18,7 @@ import ../../waku/node/peer_manager, ../../../waku_node, ../../waku/waku_lightpush, + ../../handlers, ../serdes, ../responses, ./types @@ -29,6 +30,12 @@ logScope: const futTimeoutForPushRequestProcessing* = 5.seconds +const NoPeerNoDiscoError = RestApiResponse.serviceUnavailable( + "No suitable service peer & no discovery method") + +const NoPeerNoneFoundError = RestApiResponse.serviceUnavailable( + "No suitable service peer & none discovered") + #### Request handlers const ROUTE_LIGHTPUSH* = "/lightpush/v1/message" @@ -50,8 +57,11 @@ func decodeRequestBody[T](contentBody: Option[ContentBody]) : Result[T, RestApiR return ok(requestResult.get()) -proc installLightPushRequestHandler*(router: var RestRouter, - node: WakuNode) = +proc installLightPushRequestHandler*( + router: var RestRouter, + node: WakuNode, + discHandler: Option[DiscoveryHandler] = none(DiscoveryHandler), + ) = router.api(MethodPost, ROUTE_LIGHTPUSH) do (contentBody: Option[ContentBody]) -> RestApiResponse: ## Send a request to push a waku message @@ -63,24 +73,29 @@ proc installLightPushRequestHandler*(router: var RestRouter, return decodedBody.error() let req: PushRequest = decodedBody.value() - let msg = req.message.toWakuMessage() - - if msg.isErr(): + + let msg = req.message.toWakuMessage().valueOr: return RestApiResponse.badRequest("Invalid message: {msg.error}") - let peerOpt = node.peerManager.selectPeer(WakuLightPushCodec) - if peerOpt.isNone(): - return RestApiResponse.serviceUnavailable("No suitable remote lightpush peers") + let peer = node.peerManager.selectPeer(WakuLightPushCodec).valueOr: + let handler = discHandler.valueOr: + return NoPeerNoDiscoError + + let peerOp = (await handler()).valueOr: + return RestApiResponse.internalServerError($error) + + peerOp.valueOr: + return NoPeerNoneFoundError - let subFut = node.lightpushPublish(req.pubsubTopic, - msg.value(), - peerOpt.get()) + let subFut = node.lightpushPublish(req.pubsubTopic, msg, peer) if not await subFut.withTimeout(futTimeoutForPushRequestProcessing): error "Failed to request a message push due to timeout!" return RestApiResponse.serviceUnavailable("Push request timed out") if subFut.value().isErr(): - return RestApiResponse.serviceUnavailable(fmt("Failed to request a message push: {subFut.value().error}")) + return RestApiResponse.serviceUnavailable( + fmt("Failed to request a message push: {subFut.value().error}") + ) return RestApiResponse.ok() diff --git a/waku/waku_api/rest/relay/handlers.nim b/waku/waku_api/rest/relay/handlers.nim index 72631a2272..9713b15e7e 100644 --- a/waku/waku_api/rest/relay/handlers.nim +++ b/waku/waku_api/rest/relay/handlers.nim @@ -17,7 +17,7 @@ import ../../../waku_rln_relay, ../../../node/waku_node, ../../message_cache, - ../../cache_handlers, + ../../handlers, ../serdes, ../responses, ./types diff --git a/waku/waku_api/rest/store/handlers.nim b/waku/waku_api/rest/store/handlers.nim index 58b31f4fb7..de1ae34c13 100644 --- a/waku/waku_api/rest/store/handlers.nim +++ b/waku/waku_api/rest/store/handlers.nim @@ -15,6 +15,7 @@ import ../../../waku_store/common, ../../../waku_node, ../../../node/peer_manager, + ../../handlers, ../responses, ../serdes, ./types @@ -26,6 +27,9 @@ logScope: const futTimeout* = 5.seconds # Max time to wait for futures +const NoPeerNoDiscError* = RestApiResponse.preconditionFailed( + "No suitable service peer & no discovery method") + # Queries the store-node with the query parameters and # returns a RestApiResponse that is sent back to the api client. proc performHistoryQuery(selfNode: WakuNode, @@ -182,10 +186,12 @@ proc toOpt(self: Option[Result[string, cstring]]): Option[string] = if self.isSome() and self.get().value != "": return some(self.get().value) - # Subscribes the rest handler to attend "/store/v1/messages" requests -proc installStoreV1Handler(router: var RestRouter, - node: WakuNode) = +proc installStoreApiHandlers*( + router: var RestRouter, + node: WakuNode, + discHandler: Option[DiscoveryHandler] = none(DiscoveryHandler), + ) = # Handles the store-query request according to the passed parameters router.api(MethodGet, @@ -209,18 +215,20 @@ proc installStoreV1Handler(router: var RestRouter, # /store/v1/messages?peerAddr=%2Fip4%2F127.0.0.1%2Ftcp%2F60001%2Fp2p%2F16Uiu2HAmVFXtAfSj4EiR7mL2KvL4EE2wztuQgUSBoj2Jx2KeXFLN\&pubsubTopic=my-waku-topic # Parse the peer address parameter - var parsedPeerAddr = parseUrlPeerAddr(peerAddr.toOpt()) - if not parsedPeerAddr.isOk(): - return RestApiResponse.badRequest(parsedPeerAddr.error) - - var peerOpt = none(RemotePeerInfo) - if parsedPeerAddr.value.isSome(): - peerOpt = parsedPeerAddr.value - else: - # The user didn't specify any store peer address. - peerOpt = node.peerManager.selectPeer(WakuStoreCodec) - if peerOpt.isNone(): - return RestApiResponse.preconditionFailed("Missing known store-peer node") + let parsedPeerAddr = parseUrlPeerAddr(peerAddr.toOpt()).valueOr: + return RestApiResponse.badRequest(error) + + let peerAddr = parsedPeerAddr.valueOr: + node.peerManager.selectPeer(WakuStoreCodec).valueOr: + let handler = discHandler.valueOr: + return NoPeerNoDiscError + + let peerOp = (await handler()).valueOr: + return RestApiResponse.internalServerError($error) + + peerOp.valueOr: + return RestApiResponse.preconditionFailed( + "No suitable service peer & none discovered") # Parse the rest of the parameters and create a HistoryQuery let histQuery = createHistoryQuery( @@ -238,10 +246,4 @@ proc installStoreV1Handler(router: var RestRouter, if not histQuery.isOk(): return RestApiResponse.badRequest(histQuery.error) - return await node.performHistoryQuery(histQuery.value, - peerOpt.get()) - -# Registers the Api Handlers -proc installStoreApiHandlers*(router: var RestRouter, - node: WakuNode) = - installStoreV1Handler(router, node) + return await node.performHistoryQuery(histQuery.value, peerAddr) \ No newline at end of file From cc01bb075ceb678b7f76734d955d8d0642953597 Mon Sep 17 00:00:00 2001 From: gabrielmer <101006718+gabrielmer@users.noreply.github.com> Date: Mon, 30 Oct 2023 13:26:28 +0200 Subject: [PATCH 097/274] chore: adding patch release instructions to release doc (#2157) --- docs/contributors/release-process.md | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/docs/contributors/release-process.md b/docs/contributors/release-process.md index 795ab816c3..ebcf47e604 100644 --- a/docs/contributors/release-process.md +++ b/docs/contributors/release-process.md @@ -71,7 +71,7 @@ Ensure all items in this list are ticked: ### After the release 1. Announce the release on Twitter, Discord and other channels. -2. Deploy the release image to [Dockerhub](https://hub.docker.com/layers/wakuorg/nwaku/a5f8b9/images/sha256-88691a8f82bd6a4242fa99053a65b7fc4762b23a2b4e879d0f8b578c798a0e09?context=explore) by triggering [the manual Jenkins deployment job](https://ci.infra.status.im/job/nim-waku/job/manual/build). +2. Deploy the release image to [Dockerhub](https://hub.docker.com/r/wakuorg/nwaku) by triggering [the manual Jenkins deployment job](https://ci.infra.status.im/job/nim-waku/job/docker-manual/). > Ensure the following build parameters are set: > - `MAKE_TARGET`: `wakunode2` > - `IMAGE_TAG`: the release tag (e.g. `v0.16.0`) @@ -87,3 +87,24 @@ Ensure all items in this list are ticked: - Deploy release to the `wakuv2.prod` fleet from [Jenkins](https://ci.infra.status.im/job/nim-waku/job/deploy-wakuv2-prod/). - Ensure that nodes successfully start up and monitor health using [Grafana](https://grafana.infra.status.im/d/qrp_ZCTGz/nim-waku-v2?orgId=1) and [Kibana](https://kibana.infra.status.im/goto/a7728e70-eb26-11ec-81d1-210eb3022c76). - If necessary, revert by deploying the previous release. Download logs and open a bug report issue. + +### Performing a patch release + +1. Cherry-pick the relevant commits from master to the release branch + + ``` + git cherry-pick + ``` + +2. Create a release-candidate tag with the same name as release and `-rc.N` suffix + +3. Update `CHANGELOG.md`. From the release branch, use the helper Make target after having cherry-picked the commits. + + ``` + make release-notes + ``` + Create a new branch and raise a PR with the changelog updates to master. + +4. Once the release-candidate has been validated and changelog PR got merged, cherry-pick the changelog update from master to the release branch. Create a final release tag and push it. + +5. Create a [Github release](https://github.com/waku-org/nwaku/releases) from the release tag and follow the same post-release process as usual. From 282c2e8107c4d7bb0f336db2b8ea74cf76af9774 Mon Sep 17 00:00:00 2001 From: Ivan FB <128452529+Ivansete-status@users.noreply.github.com> Date: Mon, 30 Oct 2023 15:16:49 +0100 Subject: [PATCH 098/274] chore: Minor Postgres optimizations (#2166) * postgres_healthcheck: validate once per minute instead of 30 sec * postgres_driver.nim: change MaxNumCons from 5 to 50 * postgres_driver.nim: split connPool into writeConPool and readConPool This aims to avoid clashes in insert and select queries because the inserts and selects can happen concurrently in relay and store events, respectively. --- .../postgres_driver/postgres_driver.nim | 52 ++++++++++++------- .../postgres_driver/postgres_healthcheck.nim | 2 +- 2 files changed, 34 insertions(+), 20 deletions(-) diff --git a/waku/waku_archive/driver/postgres_driver/postgres_driver.nim b/waku/waku_archive/driver/postgres_driver/postgres_driver.nim index 775b348778..80c1bd8c23 100644 --- a/waku/waku_archive/driver/postgres_driver/postgres_driver.nim +++ b/waku/waku_archive/driver/postgres_driver/postgres_driver.nim @@ -18,7 +18,9 @@ import export postgres_driver type PostgresDriver* = ref object of ArchiveDriver - connPool: PgAsyncPool + ## Establish a separate pools for read/write operations + writeConnPool: PgAsyncPool + readConnPool: PgAsyncPool proc dropTableQuery(): string = "DROP TABLE messages" @@ -40,7 +42,7 @@ proc insertRow(): string = """INSERT INTO messages (id, storedAt, contentTopic, payload, pubsubTopic, version, timestamp) VALUES ($1, $2, $3, $4, $5, $6, $7);""" -const MaxNumConns = 5 #TODO: we may need to set that from app args (maybe?) +const MaxNumConns = 50 #TODO: we may need to set that from app args (maybe?) proc new*(T: type PostgresDriver, dbUrl: string, @@ -48,21 +50,25 @@ proc new*(T: type PostgresDriver, onErrAction: OnErrHandler = nil): ArchiveDriverResult[T] = - let connPoolRes = PgAsyncPool.new(dbUrl, maxConnections) - if connPoolRes.isErr(): - return err("error creating PgAsyncPool: " & connPoolRes.error) + let readConnPool = PgAsyncPool.new(dbUrl, maxConnections).valueOr: + return err("error creating read conn pool PgAsyncPool") - let connPool = connPoolRes.get() + let writeConnPool = PgAsyncPool.new(dbUrl, maxConnections).valueOr: + return err("error creating write conn pool PgAsyncPool") if not isNil(onErrAction): - asyncSpawn checkConnectivity(connPool, onErrAction) + asyncSpawn checkConnectivity(readConnPool, onErrAction) - return ok(PostgresDriver(connPool: connPool)) + if not isNil(onErrAction): + asyncSpawn checkConnectivity(writeConnPool, onErrAction) + + return ok(PostgresDriver(writeConnPool: writeConnPool, + readConnPool: readConnPool)) proc createMessageTable*(s: PostgresDriver): Future[ArchiveDriverResult[void]] {.async.} = - let execRes = await s.connPool.exec(createTableQuery()) + let execRes = await s.writeConnPool.exec(createTableQuery()) if execRes.isErr(): return err("error in createMessageTable: " & execRes.error) @@ -71,7 +77,7 @@ proc createMessageTable*(s: PostgresDriver): proc deleteMessageTable*(s: PostgresDriver): Future[ArchiveDriverResult[void]] {.async.} = - let execRes = await s.connPool.exec(dropTableQuery()) + let execRes = await s.writeConnPool.exec(dropTableQuery()) if execRes.isErr(): return err("error in deleteMessageTable: " & execRes.error) @@ -97,7 +103,7 @@ method put*(s: PostgresDriver, receivedTime: Timestamp): Future[ArchiveDriverResult[void]] {.async.} = - let ret = await s.connPool.runStmt(insertRow(), + let ret = await s.writeConnPool.runStmt(insertRow(), @[toHex(digest.data), $receivedTime, message.contentTopic, @@ -144,7 +150,7 @@ method getAllMessages*(s: PostgresDriver): Future[ArchiveDriverResult[seq[ArchiveRow]]] {.async.} = ## Retrieve all messages from the store. - let rowsRes = await s.connPool.query("""SELECT storedAt, contentTopic, + let rowsRes = await s.readConnPool.query("""SELECT storedAt, contentTopic, payload, pubsubTopic, version, timestamp, id FROM messages ORDER BY storedAt ASC""", newSeq[string](0)) @@ -214,7 +220,7 @@ method getMessages*(s: PostgresDriver, query &= " LIMIT ?" args.add($maxPageSize) - let rowsRes = await s.connPool.query(query, args) + let rowsRes = await s.readConnPool.query(query, args) if rowsRes.isErr(): return err("failed to run query: " & rowsRes.error) @@ -233,7 +239,7 @@ proc getInt(s: PostgresDriver, Future[ArchiveDriverResult[int64]] {.async.} = # Performs a query that is expected to return a single numeric value (int64) - let rowsRes = await s.connPool.query(query) + let rowsRes = await s.readConnPool.query(query) if rowsRes.isErr(): return err("failed in getRow: " & rowsRes.error) @@ -286,7 +292,7 @@ method deleteMessagesOlderThanTimestamp*( ts: Timestamp): Future[ArchiveDriverResult[void]] {.async.} = - let execRes = await s.connPool.exec( + let execRes = await s.writeConnPool.exec( "DELETE FROM messages WHERE storedAt < " & $ts) if execRes.isErr(): return err("error in deleteMessagesOlderThanTimestamp: " & execRes.error) @@ -298,7 +304,7 @@ method deleteOldestMessagesNotWithinLimit*( limit: int): Future[ArchiveDriverResult[void]] {.async.} = - let execRes = await s.connPool.exec( + let execRes = await s.writeConnPool.exec( """DELETE FROM messages WHERE id NOT IN ( SELECT id FROM messages ORDER BY storedAt DESC LIMIT ? @@ -312,8 +318,16 @@ method deleteOldestMessagesNotWithinLimit*( method close*(s: PostgresDriver): Future[ArchiveDriverResult[void]] {.async.} = ## Close the database connection - let result = await s.connPool.close() - return result + let writeCloseRes = await s.writeConnPool.close() + let readCloseRes = await s.readConnPool.close() + + writeCloseRes.isOkOr: + return err("error closing write pool: " & $error) + + readCloseRes.isOkOr: + return err("error closing read pool: " & $error) + + return ok() proc sleep*(s: PostgresDriver, seconds: int): Future[ArchiveDriverResult[void]] {.async.} = @@ -322,7 +336,7 @@ proc sleep*(s: PostgresDriver, seconds: int): # database for the amount of seconds given as a parameter. try: let params = @[$seconds] - let sleepRes = await s.connPool.query("SELECT pg_sleep(?)", params) + let sleepRes = await s.writeConnPool.query("SELECT pg_sleep(?)", params) if sleepRes.isErr(): return err("error in postgres_driver sleep: " & sleepRes.error) except DbError: diff --git a/waku/waku_archive/driver/postgres_driver/postgres_healthcheck.nim b/waku/waku_archive/driver/postgres_driver/postgres_healthcheck.nim index 2b0c0b230f..d419cd46aa 100644 --- a/waku/waku_archive/driver/postgres_driver/postgres_healthcheck.nim +++ b/waku/waku_archive/driver/postgres_driver/postgres_healthcheck.nim @@ -12,7 +12,7 @@ import ## Simple query to validate that the postgres is working and attending requests const HealthCheckQuery = "SELECT version();" -const CheckConnectivityInterval = 30.seconds +const CheckConnectivityInterval = 60.seconds const MaxNumTrials = 20 const TrialInterval = 1.seconds From f0f69b323533f8294bae14ab5f3578f7199988ac Mon Sep 17 00:00:00 2001 From: Alvaro Revuelta Date: Mon, 30 Oct 2023 16:17:39 +0100 Subject: [PATCH 099/274] chore(networking): lower dhigh to limit amplification factor (#2168) --- waku/waku_relay/protocol.nim | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/waku/waku_relay/protocol.nim b/waku/waku_relay/protocol.nim index 15562983c9..7709e2aba8 100644 --- a/waku/waku_relay/protocol.nim +++ b/waku/waku_relay/protocol.nim @@ -72,7 +72,7 @@ const GossipsubParameters = GossipSubParams( d: 6, dLow: 4, - dHigh: 12, + dHigh: 8, dScore: 6, dOut: 3, dLazy: 6, @@ -174,8 +174,8 @@ proc new*(T: type WakuRelay, switch: Switch): WakuRelayResult[T] = return ok(w) -proc addValidator*(w: WakuRelay, - topic: varargs[string], +proc addValidator*(w: WakuRelay, + topic: varargs[string], handler: WakuValidatorHandler) {.gcsafe.} = for t in topic: w.wakuValidators.mgetOrPut(t, @[]).add(handler) @@ -196,7 +196,7 @@ proc subscribedTopics*(w: WakuRelay): seq[PubsubTopic] = proc generateOrderedValidator*(w: WakuRelay): auto {.gcsafe.} = # rejects messages that are not WakuMessage - let wrappedValidator = proc(pubsubTopic: string, + let wrappedValidator = proc(pubsubTopic: string, message: messages.Message): Future[ValidationResult] {.async.} = # can be optimized by checking if the message is a WakuMessage without allocating memory # see nim-libp2p protobuf library @@ -245,7 +245,7 @@ proc subscribe*(w: WakuRelay, pubsubTopic: PubsubTopic, handler: WakuRelayHandle proc unsubscribeAll*(w: WakuRelay, pubsubTopic: PubsubTopic) = ## Unsubscribe all handlers on this pubsub topic - + debug "unsubscribe all", pubsubTopic=pubsubTopic procCall GossipSub(w).unsubscribeAll(pubsubTopic) @@ -253,7 +253,7 @@ proc unsubscribeAll*(w: WakuRelay, pubsubTopic: PubsubTopic) = proc unsubscribe*(w: WakuRelay, pubsubTopic: PubsubTopic, handler: TopicHandler) = ## Unsubscribe this handler on this pubsub topic - + debug "unsubscribe", pubsubTopic=pubsubTopic procCall GossipSub(w).unsubscribe(pubsubTopic, handler) From 250e8b983cfc65f021bea0d833ff05f22325925a Mon Sep 17 00:00:00 2001 From: Alvaro Revuelta Date: Mon, 30 Oct 2023 16:19:49 +0100 Subject: [PATCH 100/274] fix(rest): fix bug in rest api when sending rln message (#2169) --- waku/waku_api/rest/relay/handlers.nim | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/waku/waku_api/rest/relay/handlers.nim b/waku/waku_api/rest/relay/handlers.nim index 9713b15e7e..d0f4e72e9b 100644 --- a/waku/waku_api/rest/relay/handlers.nim +++ b/waku/waku_api/rest/relay/handlers.nim @@ -175,7 +175,7 @@ proc installRelayApiHandlers*(router: var RestRouter, node: WakuNode, cache: Mes # if we reach here its either a non-RLN message or a RLN message with a valid proof debug "Publishing message", pubSubTopic=pubSubTopic, rln=defined(rln) - if not (waitFor node.publish(some(pubSubTopic), resMessage.value).withTimeout(futTimeout)): + if not (waitFor node.publish(some(pubSubTopic), message).withTimeout(futTimeout)): error "Failed to publish message to topic", pubSubTopic=pubSubTopic return RestApiResponse.internalServerError("Failed to publish: timedout") @@ -309,4 +309,4 @@ proc installRelayApiHandlers*(router: var RestRouter, node: WakuNode, cache: Mes error "Failed to publish message to topic", contentTopic=message.contentTopic return RestApiResponse.internalServerError("Failed to publish: timedout") - return RestApiResponse.ok() \ No newline at end of file + return RestApiResponse.ok() From bcf8e9630d498f2116d09d4ef9a4f525499cacdd Mon Sep 17 00:00:00 2001 From: Simon-Pierre Vivier Date: Mon, 30 Oct 2023 16:58:15 -0400 Subject: [PATCH 101/274] feat: metadata protocol shard subscription (#2149) --- tests/test_waku_metadata.nim | 8 +- waku/node/waku_node.nim | 4 +- waku/waku_metadata/protocol.nim | 125 +++++++++++++++++++++----------- 3 files changed, 90 insertions(+), 47 deletions(-) diff --git a/tests/test_waku_metadata.nim b/tests/test_waku_metadata.nim index 687ef73444..e96edb3034 100644 --- a/tests/test_waku_metadata.nim +++ b/tests/test_waku_metadata.nim @@ -15,6 +15,7 @@ import eth/p2p/discoveryv5/enr import ../../waku/waku_node, + ../../waku/waku_core/topics, ../../waku/node/peer_manager, ../../waku/waku_discv5, ../../waku/waku_metadata, @@ -23,8 +24,6 @@ import procSuite "Waku Metadata Protocol": - - # TODO: Add tests with shards when ready asyncTest "request() returns the supported metadata of the peer": let clusterId = 10.uint32 let @@ -34,6 +33,9 @@ procSuite "Waku Metadata Protocol": # Start nodes await allFutures([node1.start(), node2.start()]) + node1.topicSubscriptionQueue.emit((kind: PubsubSub, topic: "/waku/2/rs/10/7")) + node1.topicSubscriptionQueue.emit((kind: PubsubSub, topic: "/waku/2/rs/10/6")) + # Create connection let connOpt = await node2.peerManager.dialPeer(node1.switch.peerInfo.toRemotePeerInfo(), WakuMetadataCodec) require: @@ -48,3 +50,5 @@ procSuite "Waku Metadata Protocol": check: response1.get().clusterId.get() == clusterId + response1.get().shards == @[uint32(6), uint32(7)] + \ No newline at end of file diff --git a/waku/node/waku_node.nim b/waku/node/waku_node.nim index fc512b1786..f649813478 100644 --- a/waku/node/waku_node.nim +++ b/waku/node/waku_node.nim @@ -155,7 +155,7 @@ proc new*(T: type WakuNode, ) # mount metadata protocol - let metadata = WakuMetadata.new(netConfig.clusterId) + let metadata = WakuMetadata.new(netConfig.clusterId, queue) node.switch.mount(metadata, protocolMatcher(WakuMetadataCodec)) node.wakuMetadata = metadata peerManager.wakuMetadata = metadata @@ -1127,6 +1127,8 @@ proc start*(node: WakuNode) {.async.} = node.started = true + node.wakuMetadata.start() + info "Node started successfully" proc stop*(node: WakuNode) {.async.} = diff --git a/waku/waku_metadata/protocol.nim b/waku/waku_metadata/protocol.nim index a8b5ae227b..eefcf5b829 100644 --- a/waku/waku_metadata/protocol.nim +++ b/waku/waku_metadata/protocol.nim @@ -4,7 +4,7 @@ else: {.push raises: [].} import - std/[options, sequtils, random], + std/[options, sequtils, random, sets], stew/results, chronicles, chronos, @@ -27,57 +27,56 @@ const RpcResponseMaxBytes* = 1024 type WakuMetadata* = ref object of LPProtocol clusterId*: uint32 - shards*: seq[uint32] + shards*: HashSet[uint32] + topicSubscriptionQueue: AsyncEventQueue[SubscriptionEvent] proc respond(m: WakuMetadata, conn: Connection): Future[Result[void, string]] {.async, gcsafe.} = - try: - await conn.writeLP(WakuMetadataResponse( - clusterId: some(m.clusterId), - shards: m.shards - ).encode().buffer) - except CatchableError as exc: - return err(exc.msg) + let response = WakuMetadataResponse( + clusterId: some(m.clusterId), + shards: toSeq(m.shards) + ) + + let res = catch: await conn.writeLP(response.encode().buffer) + if res.isErr(): + return err(res.error.msg) return ok() proc request*(m: WakuMetadata, conn: Connection): Future[Result[WakuMetadataResponse, string]] {.async, gcsafe.} = - var buffer: seq[byte] - var error: string - try: - await conn.writeLP(WakuMetadataRequest( - clusterId: some(m.clusterId), - shards: m.shards, - ).encode().buffer) - buffer = await conn.readLp(RpcResponseMaxBytes) - except CatchableError as exc: - error = $exc.msg - finally: - # close, no more data is expected - await conn.closeWithEof() + let request = WakuMetadataRequest(clusterId: some(m.clusterId), shards: toSeq(m.shards)) + + let writeRes = catch: await conn.writeLP(request.encode().buffer) + let readRes = catch: await conn.readLp(RpcResponseMaxBytes) + + # close no watter what + let closeRes = catch: await conn.closeWithEof() + if closeRes.isErr(): + return err("close failed: " & closeRes.error.msg) - if error.len > 0: - return err("write/read failed: " & error) + if writeRes.isErr(): + return err("write failed: " & writeRes.error.msg) - let decodedBuff = WakuMetadataResponse.decode(buffer) - if decodedBuff.isErr(): - return err("decode failed: " & $decodedBuff.error) + let buffer = + if readRes.isErr(): + return err("read failed: " & readRes.error.msg) + else: readRes.get() - echo decodedBuff.get().clusterId - return ok(decodedBuff.get()) + let response = WakuMetadataResponse.decode(buffer).valueOr: + return err("decode failed: " & $error) + + return ok(response) proc initProtocolHandler*(m: WakuMetadata) = proc handle(conn: Connection, proto: string) {.async, gcsafe, closure.} = - var buffer: seq[byte] - try: - buffer = await conn.readLp(RpcResponseMaxBytes) - except CatchableError as exc: + let res = catch: await conn.readLp(RpcResponseMaxBytes) + let buffer = res.valueOr: + error "Connection reading error", error=error.msg return - let decBuf = WakuMetadataResponse.decode(buffer) - if decBuf.isErr(): + let response = WakuMetadataResponse.decode(buffer).valueOr: + error "Response decoding error", error=error return - let response = decBuf.get() debug "Received WakuMetadata request", remoteClusterId=response.clusterId, remoteShards=response.shards, @@ -92,12 +91,50 @@ proc initProtocolHandler*(m: WakuMetadata) = m.handler = handle m.codec = WakuMetadataCodec -proc new*(T: type WakuMetadata, clusterId: uint32): T = - let m = WakuMetadata( - clusterId: clusterId, - # TODO: must be updated real time - shards: @[], - ) - m.initProtocolHandler() +proc new*(T: type WakuMetadata, + clusterId: uint32, + queue: AsyncEventQueue[SubscriptionEvent], + ): T = + let wm = WakuMetadata(clusterId: clusterId, topicSubscriptionQueue: queue) + + wm.initProtocolHandler() + info "Created WakuMetadata protocol", clusterId=clusterId - return m + + return wm + +proc subscriptionsListener(wm: WakuMetadata) {.async.} = + ## Listen for pubsub topics subscriptions changes + + let key = wm.topicSubscriptionQueue.register() + + while wm.started: + let events = await wm.topicSubscriptionQueue.waitEvents(key) + + for event in events: + let parsedTopic = NsPubsubTopic.parse(event.topic).valueOr: + continue + + if parsedTopic.kind != NsPubsubTopicKind.StaticSharding: + continue + + if parsedTopic.clusterId != wm.clusterId: + continue + + case event.kind: + of PubsubSub: + wm.shards.incl(parsedTopic.shardId) + of PubsubUnsub: + wm.shards.excl(parsedTopic.shardId) + else: + continue + + wm.topicSubscriptionQueue.unregister(key) + +proc start*(wm: WakuMetadata) = + wm.started = true + + asyncSpawn wm.subscriptionsListener() + +proc stop*(wm: WakuMetadata) = + wm.started = false \ No newline at end of file From 2b4ca4d0ff5ccae3f6713d84708496f7c14c5228 Mon Sep 17 00:00:00 2001 From: Ivan FB <128452529+Ivansete-status@users.noreply.github.com> Date: Tue, 31 Oct 2023 14:46:46 +0100 Subject: [PATCH 102/274] chore: Optimize postgres - use of rowCallback approach (#2171) * db_postgres, postgres_driver: better performance by using callback. There were a bunch of milliseconds being lost due to multiple-row processing. This commit aims to have the minimum possible row process time. * pgasyncpool: clarifying logic around pool conn management. * db_postgres: removing duplicate code and more searchable proc names. --- waku/common/databases/db_postgres/dbconn.nim | 47 +++-- .../databases/db_postgres/pgasyncpool.nim | 79 ++++---- .../postgres_driver/postgres_driver.nim | 173 ++++++++++-------- .../postgres_driver/postgres_healthcheck.nim | 4 +- 4 files changed, 160 insertions(+), 143 deletions(-) diff --git a/waku/common/databases/db_postgres/dbconn.nim b/waku/common/databases/db_postgres/dbconn.nim index 43464120d8..ce9e54c2b8 100644 --- a/waku/common/databases/db_postgres/dbconn.nim +++ b/waku/common/databases/db_postgres/dbconn.nim @@ -9,6 +9,8 @@ import include db_postgres +type DataProc* = proc(result: ptr PGresult) {.closure, gcsafe.} + ## Connection management proc check*(db: DbConn): Result[void, string] = @@ -43,11 +45,11 @@ proc open*(connString: string): ok(conn) -proc rows*(db: DbConn, - query: SqlQuery, - args: seq[string]): - Future[Result[seq[Row], string]] {.async.} = - ## Runs the SQL getting results. +proc sendQuery(db: DbConn, + query: SqlQuery, + args: seq[string]): + Future[Result[void, string]] {.async.} = + ## This proc can be used directly for queries that don't retrieve values back. if db.status != CONNECTION_OK: let checkRes = db.check() @@ -71,7 +73,13 @@ proc rows*(db: DbConn, return err("failed pqsendQuery: unknown reason") - var ret = newSeq[Row](0) + return ok() + +proc waitQueryToFinish(db: DbConn, + rowCallback: DataProc = nil): + Future[Result[void, string]] {.async.} = + ## The 'rowCallback' param is != nil when the underlying query wants to retrieve results (SELECT.) + ## For other queries, like "INSERT", 'rowCallback' should be nil. while true: @@ -84,22 +92,33 @@ proc rows*(db: DbConn, return err("failed pqconsumeInput: unknown reason") if db.pqisBusy() == 1: - await sleepAsync(0.milliseconds) # Do not block the async runtime + await sleepAsync(timer.milliseconds(0)) # Do not block the async runtime continue - var pqResult = db.pqgetResult() + let pqResult = db.pqgetResult() if pqResult == nil: # Check if its a real error or just end of results let checkRes = db.check() if checkRes.isErr(): return err("error in rows: " & checkRes.error) - return ok(ret) # reached the end of the results + return ok() # reached the end of the results - var cols = pqResult.pqnfields() - var row = cols.newRow() - for i in 0'i32 .. pqResult.pqNtuples() - 1: - pqResult.setRow(row, i, cols) # puts the value in the row - ret.add(row) + if not rowCallback.isNil(): + rowCallback(pqResult) pqclear(pqResult) + +proc dbConnQuery*(db: DbConn, + query: SqlQuery, + args: seq[string], + rowCallback: DataProc): + Future[Result[void, string]] {.async, gcsafe.} = + + (await db.sendQuery(query, args)).isOkOr: + return err("error in dbConnQuery calling sendQuery: " & $error) + + (await db.waitQueryToFinish(rowCallback)).isOkOr: + return err("error in dbConnQuery calling waitQueryToFinish: " & $error) + + return ok() diff --git a/waku/common/databases/db_postgres/pgasyncpool.nim b/waku/common/databases/db_postgres/pgasyncpool.nim index 2e5fa4e079..0757c31f34 100644 --- a/waku/common/databases/db_postgres/pgasyncpool.nim +++ b/waku/common/databases/db_postgres/pgasyncpool.nim @@ -8,15 +8,11 @@ else: import std/[sequtils,nre, strformat], stew/results, - chronicles, chronos import ./dbconn, ../common -logScope: - topics = "postgres asyncpool" - type PgAsyncPoolState {.pure.} = enum Closed, Live, @@ -107,6 +103,16 @@ proc close*(pool: PgAsyncPool): return ok() +proc getFirstFreeConnIndex(pool: PgAsyncPool): + DatabaseResult[int] = + for index in 0.. Date: Tue, 31 Oct 2023 17:42:53 +0100 Subject: [PATCH 103/274] fix(ci): fix Docker tag for latest and release jobs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Jakub Sokołowski --- ci/Jenkinsfile.release | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/ci/Jenkinsfile.release b/ci/Jenkinsfile.release index 9a2a8afefd..5301477da2 100644 --- a/ci/Jenkinsfile.release +++ b/ci/Jenkinsfile.release @@ -104,12 +104,9 @@ pipeline { } // pipeline def getDefaultImageTag() { - if (env.JOB_BASE_NAME) { - return env.JOB_BASE_NAME - } switch (env.JOB_BASE_NAME) { case 'docker-latest': return 'latest' case 'docker-release': return 'stable' - default: return '' + default: return env.JOB_BASE_NAME } } From fa467e2462ac21c3ecb2de7d4218cec444d6620f Mon Sep 17 00:00:00 2001 From: Ivan FB <128452529+Ivansete-status@users.noreply.github.com> Date: Wed, 1 Nov 2023 11:30:53 +0100 Subject: [PATCH 104/274] fix: lightpush rest (#2176) * rest/lightpush/handlers.nim: enhance feedback in case of error. * lightpush/openapi.yaml: fix typo in pubsubTopic field. --- waku/waku_api/rest/lightpush/handlers.nim | 4 ++-- waku/waku_api/rest/lightpush/openapi.yaml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/waku/waku_api/rest/lightpush/handlers.nim b/waku/waku_api/rest/lightpush/handlers.nim index c7da0ebe38..222267cfbc 100644 --- a/waku/waku_api/rest/lightpush/handlers.nim +++ b/waku/waku_api/rest/lightpush/handlers.nim @@ -75,14 +75,14 @@ proc installLightPushRequestHandler*( let req: PushRequest = decodedBody.value() let msg = req.message.toWakuMessage().valueOr: - return RestApiResponse.badRequest("Invalid message: {msg.error}") + return RestApiResponse.badRequest("Invalid message: " & $error) let peer = node.peerManager.selectPeer(WakuLightPushCodec).valueOr: let handler = discHandler.valueOr: return NoPeerNoDiscoError let peerOp = (await handler()).valueOr: - return RestApiResponse.internalServerError($error) + return RestApiResponse.internalServerError("No value in peerOp: " & $error) peerOp.valueOr: return NoPeerNoneFoundError diff --git a/waku/waku_api/rest/lightpush/openapi.yaml b/waku/waku_api/rest/lightpush/openapi.yaml index 2327936dd3..e9e8162b72 100644 --- a/waku/waku_api/rest/lightpush/openapi.yaml +++ b/waku/waku_api/rest/lightpush/openapi.yaml @@ -76,7 +76,7 @@ components: PushRequest: type: object properties: - pusbsubTopic: + pubsubTopic: $ref: '#/components/schemas/PubsubTopic' message: $ref: '#/components/schemas/WakuMessage' From b9563ae0b58a9c0371a35d9dc01ce8ebfd93f80d Mon Sep 17 00:00:00 2001 From: gabrielmer <101006718+gabrielmer@users.noreply.github.com> Date: Mon, 6 Nov 2023 13:30:34 +0200 Subject: [PATCH 105/274] chore: upgrade dependencies v0.22 (#2185) --- .../requests/protocols/relay_request.nim | 3 ++- vendor/nim-chronicles | 2 +- vendor/nim-chronos | 2 +- vendor/nim-confutils | 2 +- vendor/nim-eth | 2 +- vendor/nim-http-utils | 2 +- vendor/nim-presto | 2 +- vendor/nim-regex | 2 +- vendor/nim-serialization | 2 +- vendor/nim-stint | 2 +- vendor/nim-unicodedb | 2 +- vendor/nim-unittest2 | 2 +- vendor/nim-web3 | 2 +- vendor/nimbus-build-system | 2 +- vendor/nimcrypto | 2 +- waku/common/logging.nim | 19 ++++--------------- 16 files changed, 20 insertions(+), 30 deletions(-) diff --git a/library/waku_thread/inter_thread_communication/requests/protocols/relay_request.nim b/library/waku_thread/inter_thread_communication/requests/protocols/relay_request.nim index 3315348bde..be0684bd15 100644 --- a/library/waku_thread/inter_thread_communication/requests/protocols/relay_request.nim +++ b/library/waku_thread/inter_thread_communication/requests/protocols/relay_request.nim @@ -96,7 +96,8 @@ proc process*(self: ptr RelayRequest, case self.operation: of SUBSCRIBE: - node.wakuRelay.subscribe($self.pubsubTopic, self.relayEventCallback) + # TO DO: properly perform 'subscribe' + discard node.wakuRelay.subscribe($self.pubsubTopic, self.relayEventCallback) of UNSUBSCRIBE: # TODO: properly perform 'unsubscribe' diff --git a/vendor/nim-chronicles b/vendor/nim-chronicles index 1922045dba..d1d34b9490 160000 --- a/vendor/nim-chronicles +++ b/vendor/nim-chronicles @@ -1 +1 @@ -Subproject commit 1922045dbaa34c2fae86a32dda0e2ac56f1cf435 +Subproject commit d1d34b9490f99fa2052ffcff2bcf0edaf42d1bdd diff --git a/vendor/nim-chronos b/vendor/nim-chronos index 2e8551b0d9..be2edab3ac 160000 --- a/vendor/nim-chronos +++ b/vendor/nim-chronos @@ -1 +1 @@ -Subproject commit 2e8551b0d973cfbebfab3be7f3329e11b9049007 +Subproject commit be2edab3ac101da03a70cbf52bc3f3d972b35d91 diff --git a/vendor/nim-confutils b/vendor/nim-confutils index 674c9e4c8e..7568f1b7c3 160000 --- a/vendor/nim-confutils +++ b/vendor/nim-confutils @@ -1 +1 @@ -Subproject commit 674c9e4c8e0cad2b7193cc9a59c12d39a397750f +Subproject commit 7568f1b7c3142d8e87c1f3dd42924238926affbe diff --git a/vendor/nim-eth b/vendor/nim-eth index ac680ed79b..700360fde2 160000 --- a/vendor/nim-eth +++ b/vendor/nim-eth @@ -1 +1 @@ -Subproject commit ac680ed79bf9e4e78ca14a001eb7f78acdf7b07d +Subproject commit 700360fde2cf91c0c6d66af42851ee21c947e23a diff --git a/vendor/nim-http-utils b/vendor/nim-http-utils index 87b7cbf032..4a46dcc4c0 160000 --- a/vendor/nim-http-utils +++ b/vendor/nim-http-utils @@ -1 +1 @@ -Subproject commit 87b7cbf032c90b9e6b446081f4a647e950362cec +Subproject commit 4a46dcc4c0c6c4a53715602d4cfd47a032ab8582 diff --git a/vendor/nim-presto b/vendor/nim-presto index 81250a419b..5ca16485e4 160000 --- a/vendor/nim-presto +++ b/vendor/nim-presto @@ -1 +1 @@ -Subproject commit 81250a419bc097a9e93f2ab69de60543eee07138 +Subproject commit 5ca16485e4d74e531d50d289ebc0f869d9e6352b diff --git a/vendor/nim-regex b/vendor/nim-regex index f080b198e2..577c4ec3b2 160000 --- a/vendor/nim-regex +++ b/vendor/nim-regex @@ -1 +1 @@ -Subproject commit f080b198e21dc013551ade831bb0338871e03bc5 +Subproject commit 577c4ec3b235c5fd2653a9c86cbc4a576cfc0869 diff --git a/vendor/nim-serialization b/vendor/nim-serialization index 4bdbc29e54..543b2f3dd0 160000 --- a/vendor/nim-serialization +++ b/vendor/nim-serialization @@ -1 +1 @@ -Subproject commit 4bdbc29e54fe54049950e352bb969aab97173b35 +Subproject commit 543b2f3dd0724f7cf631feba6c2a3ec438f3d230 diff --git a/vendor/nim-stint b/vendor/nim-stint index 54e24cae41..711cda4456 160000 --- a/vendor/nim-stint +++ b/vendor/nim-stint @@ -1 +1 @@ -Subproject commit 54e24cae415b1bed39a987ecd08c19a34f740972 +Subproject commit 711cda4456c32d3ba3c6c4524135b3453dffeb9c diff --git a/vendor/nim-unicodedb b/vendor/nim-unicodedb index b055310c08..04a154eee0 160000 --- a/vendor/nim-unicodedb +++ b/vendor/nim-unicodedb @@ -1 +1 @@ -Subproject commit b055310c08db8f879057b4fec15c8301ee93bb2a +Subproject commit 04a154eee0b8a2ad313e24ba46a4e5b4e0b9036f diff --git a/vendor/nim-unittest2 b/vendor/nim-unittest2 index 2300fa9924..91973dfa38 160000 --- a/vendor/nim-unittest2 +++ b/vendor/nim-unittest2 @@ -1 +1 @@ -Subproject commit 2300fa9924a76e6c96bc4ea79d043e3a0f27120c +Subproject commit 91973dfa3823a8b423abdce59ac19de0a17ef9c1 diff --git a/vendor/nim-web3 b/vendor/nim-web3 index 70f22351c4..428b931e7c 160000 --- a/vendor/nim-web3 +++ b/vendor/nim-web3 @@ -1 +1 @@ -Subproject commit 70f22351c44b849a321b78b94dc0f9cd4ac9a5e1 +Subproject commit 428b931e7c4f1284b4272bc2c11fca2bd70991cd diff --git a/vendor/nimbus-build-system b/vendor/nimbus-build-system index 81ce5fc752..6cdd14282b 160000 --- a/vendor/nimbus-build-system +++ b/vendor/nimbus-build-system @@ -1 +1 @@ -Subproject commit 81ce5fc7521e400ceababde59b4a90fe7da8919d +Subproject commit 6cdd14282b7c813c2ae4b9a9d749c3ff5ce1b54a diff --git a/vendor/nimcrypto b/vendor/nimcrypto index 1c8d6e3caf..a079df9242 160000 --- a/vendor/nimcrypto +++ b/vendor/nimcrypto @@ -1 +1 @@ -Subproject commit 1c8d6e3caf3abc572136ae9a1da81730c4eb4288 +Subproject commit a079df92424968d46a6ac258299ce9380aa153f2 diff --git a/waku/common/logging.nim b/waku/common/logging.nim index 669a2ee948..b8385a930b 100644 --- a/waku/common/logging.nim +++ b/waku/common/logging.nim @@ -6,28 +6,17 @@ import chronicles/log_output, chronicles/topics_registry +export chronicles.LogLevel when (NimMajor, NimMinor) < (1, 4): {.push raises: [Defect].} else: {.push raises: [].} - type - LogLevel* = enum - TRACE, DEBUG, INFO, NOTICE, WARN, ERROR, FATAL - LogFormat* = enum TEXT, JSON -converter toChroniclesLogLevel(level: LogLevel): chronicles.LogLevel = - ## Map logging log levels to the corresponding nim-chronicles' log level - try: - parseEnum[chronicles.LogLevel]($level) - except CatchableError: - chronicles.LogLevel.NONE - - ## Utils proc stripAnsi(v: string): string = @@ -82,12 +71,12 @@ proc setupLogLevel*(level: LogLevel) = topics_registry.setLogLevel(level) proc setupLogFormat*(format: LogFormat, color=true) = - proc noOutputWriter(logLevel: chronicles.LogLevel, msg: LogOutputStr) = discard + proc noOutputWriter(logLevel: LogLevel, msg: LogOutputStr) = discard - proc stdoutOutputWriter(logLevel: chronicles.LogLevel, msg: LogOutputStr) = + proc stdoutOutputWriter(logLevel: LogLevel, msg: LogOutputStr) = writeAndFlush(io.stdout, msg) - proc stdoutNoColorOutputWriter(logLevel: chronicles.LogLevel, msg: LogOutputStr) = + proc stdoutNoColorOutputWriter(logLevel: LogLevel, msg: LogOutputStr) = writeAndFlush(io.stdout, stripAnsi(msg)) From 200a11da09b5acc2f11de5d9a6253637ae1a365a Mon Sep 17 00:00:00 2001 From: Simon-Pierre Vivier Date: Mon, 6 Nov 2023 07:31:36 -0500 Subject: [PATCH 106/274] feat(discv5): filter out peers without any listed capability (#2186) --- tests/test_waku_discv5.nim | 3 +++ waku/waku_discv5.nim | 24 +++++++++--------------- 2 files changed, 12 insertions(+), 15 deletions(-) diff --git a/tests/test_waku_discv5.nim b/tests/test_waku_discv5.nim index bebdb5fe37..9a7a49a90d 100644 --- a/tests/test_waku_discv5.nim +++ b/tests/test_waku_discv5.nim @@ -320,6 +320,7 @@ procSuite "Waku Discovery v5": var builder = EnrBuilder.init(enrPrivKey, seqNum = enrSeqNum) require builder.withWakuRelaySharding(shardsTopics).isOk() + builder.withWakuCapabilities(Relay) let recordRes = builder.build() require recordRes.isOk() @@ -338,6 +339,7 @@ procSuite "Waku Discovery v5": var builder = EnrBuilder.init(enrPrivKey, seqNum = enrSeqNum) require builder.withWakuRelaySharding(shardsTopics).isOk() + builder.withWakuCapabilities(Relay) let recordRes = builder.build() require recordRes.isOk() @@ -356,6 +358,7 @@ procSuite "Waku Discovery v5": var builder = EnrBuilder.init(enrPrivKey, seqNum = enrSeqNum) require builder.withWakuRelaySharding(shardsTopics).isOk() + builder.withWakuCapabilities(Relay) let recordRes = builder.build() require recordRes.isOk() diff --git a/waku/waku_discv5.nim b/waku/waku_discv5.nim index 6a9fe094f8..8456cab428 100644 --- a/waku/waku_discv5.nim +++ b/waku/waku_discv5.nim @@ -52,25 +52,19 @@ type WakuDiscoveryV5* = ref object proc shardingPredicate*(record: Record): Option[WakuDiscv5Predicate] = ## Filter peers based on relay sharding information + let typedRecord = record.toTyped().valueOr: + debug "peer filtering failed", reason=error + return none(WakuDiscv5Predicate) - let typeRecordRes = record.toTyped() - let typedRecord = - if typeRecordRes.isErr(): - debug "peer filtering failed", reason= $typeRecordRes.error - return none(WakuDiscv5Predicate) - else: typeRecordRes.get() - - let nodeShardOp = typedRecord.relaySharding() - let nodeShard = - if nodeShardOp.isNone(): - debug "no relay sharding information, peer filtering disabled" - return none(WakuDiscv5Predicate) - else: nodeShardOp.get() - + let nodeShard = typedRecord.relaySharding().valueOr: + debug "no relay sharding information, peer filtering disabled" + return none(WakuDiscv5Predicate) + debug "peer filtering updated" let predicate = proc(record: waku_enr.Record): bool = - nodeShard.shardIds.anyIt(record.containsShard(nodeShard.clusterId, it)) + record.getCapabilities().len > 0 and #RFC 31 requirement + nodeShard.shardIds.anyIt(record.containsShard(nodeShard.clusterId, it)) #RFC 64 guideline return some(predicate) From b3de04057e2e7de2973b5c21f987c7a2284ad3ba Mon Sep 17 00:00:00 2001 From: Alvaro Revuelta Date: Tue, 7 Nov 2023 10:56:22 +0100 Subject: [PATCH 107/274] Add REST API Docs (#2177) --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 8e6984545e..fc054e64f0 100644 --- a/README.md +++ b/README.md @@ -82,3 +82,7 @@ For bug reports, please [tag your issue with the `bug` label](https://github.com If you believe the reported issue requires critical attention, please [use the `critical` label](https://github.com/waku-org/nwaku/issues/new?labels=critical,bug) to assist with triaging. To get help, or participate in the conversation, join the [Waku Discord](https://discord.waku.org/) server. + +### Docs + +* [REST API Documentation](https://waku-org.github.io/waku-rest-api/) From d0a93e7c66f71c82a40404cf7b1a8d45bd942936 Mon Sep 17 00:00:00 2001 From: gabrielmer <101006718+gabrielmer@users.noreply.github.com> Date: Tue, 7 Nov 2023 14:17:31 +0200 Subject: [PATCH 108/274] chore(release): update changelog for v0.21.2 release (#2188) --- CHANGELOG.md | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 467c9aac25..b90458dcac 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,24 @@ +## v0.21.2 (2023-11-07) + +This patch release addresses the following issue: +- Inability to send RLN messages through the REST API + +### Bug Fixes + +- **rest:** fix bug in rest api when sending rln message ([#2169](https://github.com/waku-org/nwaku/issues/2169)) ([33decd7a](https://github.com/waku-org/nwaku/commit/33decd7a)) + +This is a patch release that is fully backwards-compatible with release `v0.21.0` and `v0.21.1`. + +It supports the same [libp2p protocols](https://docs.libp2p.io/concepts/protocols/): +| Protocol | Spec status | Protocol id | +| ---: | :---: | :--- | +| [`11/WAKU2-RELAY`](https://rfc.vac.dev/spec/11/) | `stable` | `/vac/waku/relay/2.0.0` | +| [`12/WAKU2-FILTER`](https://rfc.vac.dev/spec/12/) | `draft` | `/vac/waku/filter/2.0.0-beta1`
`/vac/waku/filter-subscribe/2.0.0-beta1`
`/vac/waku/filter-push/2.0.0-beta1` | +| [`13/WAKU2-STORE`](https://rfc.vac.dev/spec/13/) | `draft` | `/vac/waku/store/2.0.0-beta4` | +| [`19/WAKU2-LIGHTPUSH`](https://rfc.vac.dev/spec/19/) | `draft` | `/vac/waku/lightpush/2.0.0-beta1` | + +The Waku v1 implementation has been removed from this repository and can be found in a separate [Waku Legacy](https://github.com/waku-org/waku-legacy) repository. + ## v0.21.1 (2023-10-26) This patch release addresses the following issues: From 6da1aeec5370bb1c116509e770178cca2662b69c Mon Sep 17 00:00:00 2001 From: Ivan FB <128452529+Ivansete-status@users.noreply.github.com> Date: Tue, 7 Nov 2023 13:38:37 +0100 Subject: [PATCH 109/274] chore: Optimize postgres - prepared statements in select (#2182) * db_postgres: use prepared statements on most freq select queries * db_postgres/dbconn.nim adding better feedback in case of query error * dbconn: use of isOkOr * pgasyncpool: refactor to reduce code (valueOr, catch:) --- tests/waku_archive/test_driver_postgres.nim | 2 + waku/common/databases/db_postgres/dbconn.nim | 97 +++++++-- .../databases/db_postgres/pgasyncpool.nim | 106 +++++----- .../postgres_driver/postgres_driver.nim | 189 ++++++++++++++++-- 4 files changed, 310 insertions(+), 84 deletions(-) diff --git a/tests/waku_archive/test_driver_postgres.nim b/tests/waku_archive/test_driver_postgres.nim index 149c43aa05..18afd74e7a 100644 --- a/tests/waku_archive/test_driver_postgres.nim +++ b/tests/waku_archive/test_driver_postgres.nim @@ -203,3 +203,5 @@ suite "Postgres driver": putRes = await driver.put(DefaultPubsubTopic, msg2, computeDigest(msg2, DefaultPubsubTopic), msg2.timestamp) require not putRes.isOk() + + (await driver.close()).expect("driver to close") diff --git a/waku/common/databases/db_postgres/dbconn.nim b/waku/common/databases/db_postgres/dbconn.nim index ce9e54c2b8..57d4a1b86e 100644 --- a/waku/common/databases/db_postgres/dbconn.nim +++ b/waku/common/databases/db_postgres/dbconn.nim @@ -4,6 +4,7 @@ else: {.push raises: [ValueError,DbError].} import + std/[times, strutils, strformat], stew/results, chronos @@ -52,9 +53,8 @@ proc sendQuery(db: DbConn, ## This proc can be used directly for queries that don't retrieve values back. if db.status != CONNECTION_OK: - let checkRes = db.check() - if checkRes.isErr(): - return err("failed to connect to database: " & checkRes.error) + db.check().isOkOr: + return err("failed to connect to database: " & $error) return err("unknown reason") @@ -67,40 +67,85 @@ proc sendQuery(db: DbConn, let success = db.pqsendQuery(cstring(wellFormedQuery)) if success != 1: - let checkRes = db.check() - if checkRes.isErr(): - return err("failed pqsendQuery: " & checkRes.error) + db.check().isOkOr: + return err("failed pqsendQuery: " & $error) return err("failed pqsendQuery: unknown reason") return ok() +proc sendQueryPrepared( + db: DbConn, + stmtName: string, + paramValues: openArray[string], + paramLengths: openArray[int32], + paramFormats: openArray[int32]): + Result[void, string] = + ## This proc can be used directly for queries that don't retrieve values back. + + if paramValues.len != paramLengths.len or paramValues.len != paramFormats.len or + paramLengths.len != paramFormats.len: + let lengthsErrMsg = $paramValues.len & " " & $paramLengths.len & " " & $paramFormats.len + return err("lengths discrepancies in sendQueryPrepared: " & $lengthsErrMsg) + + if db.status != CONNECTION_OK: + db.check().isOkOr: + return err("failed to connect to database: " & $error) + + return err("unknown reason") + + var cstrArrayParams = allocCStringArray(paramValues) + defer: deallocCStringArray(cstrArrayParams) + + let nParams = cast[int32](paramValues.len) + + const ResultFormat = 0 ## 0 for text format, 1 for binary format. + + let success = db.pqsendQueryPrepared(stmtName, + nParams, + cstrArrayParams, + unsafeAddr paramLengths[0], + unsafeAddr paramFormats[0], + ResultFormat) + if success != 1: + db.check().isOkOr: + return err("failed pqsendQueryPrepared: " & $error) + + return err("failed pqsendQueryPrepared: unknown reason") + + return ok() + proc waitQueryToFinish(db: DbConn, rowCallback: DataProc = nil): Future[Result[void, string]] {.async.} = ## The 'rowCallback' param is != nil when the underlying query wants to retrieve results (SELECT.) ## For other queries, like "INSERT", 'rowCallback' should be nil. - while true: - + while db.pqisBusy() == 1: + ## TODO: Enhance performance in concurrent queries. + ## The connection keeps busy for quite a long time when performing intense concurrect queries. + ## For example, a given query can last 11 milliseconds within from the database point of view + ## but, on the other hand, the connection remains in "db.pqisBusy() == 1" for 100ms more. + ## I think this is because `nwaku` is single-threaded and it has to handle many connections (20) + ## simultaneously. Therefore, there is an underlying resource sharing (cpu) that makes this + ## to happen. Notice that the _Postgres_ database spawns one process per each connection. let success = db.pqconsumeInput() + if success != 1: - let checkRes = db.check() - if checkRes.isErr(): - return err("failed pqconsumeInput: " & checkRes.error) + db.check().isOkOr: + return err("failed pqconsumeInput: " & $error) return err("failed pqconsumeInput: unknown reason") - if db.pqisBusy() == 1: - await sleepAsync(timer.milliseconds(0)) # Do not block the async runtime - continue + await sleepAsync(timer.milliseconds(0)) # Do not block the async runtime + ## Now retrieve the result + while true: let pqResult = db.pqgetResult() + if pqResult == nil: - # Check if its a real error or just end of results - let checkRes = db.check() - if checkRes.isErr(): - return err("error in rows: " & checkRes.error) + db.check().isOkOr: + return err("error in query: " & $error) return ok() # reached the end of the results @@ -122,3 +167,19 @@ proc dbConnQuery*(db: DbConn, return err("error in dbConnQuery calling waitQueryToFinish: " & $error) return ok() + +proc dbConnQueryPrepared*(db: DbConn, + stmtName: string, + paramValues: seq[string], + paramLengths: seq[int32], + paramFormats: seq[int32], + rowCallback: DataProc): + Future[Result[void, string]] {.async, gcsafe.} = + + db.sendQueryPrepared(stmtName, paramValues , paramLengths, paramFormats).isOkOr: + return err("error in dbConnQueryPrepared calling sendQuery: " & $error) + + (await db.waitQueryToFinish(rowCallback)).isOkOr: + return err("error in dbConnQueryPrepared calling waitQueryToFinish: " & $error) + + return ok() diff --git a/waku/common/databases/db_postgres/pgasyncpool.nim b/waku/common/databases/db_postgres/pgasyncpool.nim index 0757c31f34..b38589f6eb 100644 --- a/waku/common/databases/db_postgres/pgasyncpool.nim +++ b/waku/common/databases/db_postgres/pgasyncpool.nim @@ -6,7 +6,7 @@ else: {.push raises: [].} import - std/[sequtils,nre, strformat], + std/[sequtils,nre,strformat,sets], stew/results, chronos import @@ -21,9 +21,9 @@ type PgAsyncPoolState {.pure.} = enum type PgDbConn = object dbConn: DbConn - busy: bool open: bool - insertStmt: SqlPrepared + busy: bool + preparedStmts: HashSet[string] ## [stmtName's] type # Database connection pool @@ -90,9 +90,10 @@ proc close*(pool: PgAsyncPool): if pool.conns[i].busy: continue - pool.conns[i].dbConn.close() - pool.conns[i].busy = false - pool.conns[i].open = false + if pool.conns[i].open: + pool.conns[i].dbConn.close() + pool.conns[i].busy = false + pool.conns[i].open = false for i in 0..= $3 AND + storedAt <= $4 + ORDER BY storedAt ASC LIMIT $5;""" + +const SelectNoCursorDescStmtName = "SelectWithoutCursorDesc" +const SelectNoCursorDescStmtDef = + """SELECT storedAt, contentTopic, payload, pubsubTopic, version, timestamp, id FROM messages + WHERE contentTopic IN ($1) AND + pubsubTopic = $2 AND + storedAt >= $3 AND + storedAt <= $4 + ORDER BY storedAt DESC LIMIT $5;""" + +const SelectWithCursorDescStmtName = "SelectWithCursorDesc" +const SelectWithCursorDescStmtDef = + """SELECT storedAt, contentTopic, payload, pubsubTopic, version, timestamp, id FROM messages + WHERE contentTopic IN ($1) AND + pubsubTopic = $2 AND + (storedAt, id) < ($3,$4) AND + storedAt >= $5 AND + storedAt <= $6 + ORDER BY storedAt DESC LIMIT $7;""" + +const SelectWithCursorAscStmtName = "SelectWithCursorAsc" +const SelectWithCursorAscStmtDef = + """SELECT storedAt, contentTopic, payload, pubsubTopic, version, timestamp, id FROM messages + WHERE contentTopic IN ($1) AND + pubsubTopic = $2 AND + (storedAt, id) > ($3,$4) AND + storedAt >= $5 AND + storedAt <= $6 + ORDER BY storedAt ASC LIMIT $7;""" + const MaxNumConns = 50 #TODO: we may need to set that from app args (maybe?) proc new*(T: type PostgresDriver, @@ -150,15 +189,31 @@ method put*(s: PostgresDriver, receivedTime: Timestamp): Future[ArchiveDriverResult[void]] {.async.} = - let ret = await s.writeConnPool.runStmt(insertRow(), - @[toHex(digest.data), - $receivedTime, - message.contentTopic, - toHex(message.payload), + let digest = toHex(digest.data) + let rxTime = $receivedTime + let contentTopic = message.contentTopic + let payload = toHex(message.payload) + let version = $message.version + let timestamp = $message.timestamp + + return await s.writeConnPool.runStmt(InsertRowStmtName, + InsertRowStmtDefinition, + @[digest, + rxTime, + contentTopic, + payload, pubsubTopic, - $message.version, - $message.timestamp]) - return ret + version, + timestamp], + @[int32(digest.len), + int32(rxTime.len), + int32(contentTopic.len), + int32(payload.len), + int32(pubsubTopic.len), + int32(version.len), + int32(timestamp.len)], + @[int32(0), int32(0), int32(0), int32(0), + int32(0), int32(0), int32(0)]) method getAllMessages*(s: PostgresDriver): Future[ArchiveDriverResult[seq[ArchiveRow]]] {.async.} = @@ -178,7 +233,7 @@ method getAllMessages*(s: PostgresDriver): return ok(rows) -method getMessages*(s: PostgresDriver, +proc getMessagesArbitraryQuery(s: PostgresDriver, contentTopic: seq[ContentTopic] = @[], pubsubTopic = none(PubsubTopic), cursor = none(ArchiveCursor), @@ -187,9 +242,9 @@ method getMessages*(s: PostgresDriver, maxPageSize = DefaultPageSize, ascendingOrder = true): Future[ArchiveDriverResult[seq[ArchiveRow]]] {.async.} = + ## This proc allows to handle atypical queries. We don't use prepared statements for those. - var query = """SELECT storedAt, contentTopic, payload, - pubsubTopic, version, timestamp, id FROM messages""" + var query = """SELECT storedAt, contentTopic, payload, pubsubTopic, version, timestamp, id FROM messages""" var statements: seq[string] var args: seq[string] @@ -240,6 +295,114 @@ method getMessages*(s: PostgresDriver, return ok(rows) +proc getMessagesPreparedStmt(s: PostgresDriver, + contentTopic: string, + pubsubTopic: PubsubTopic, + cursor = none(ArchiveCursor), + startTime: Timestamp, + endTime: Timestamp, + maxPageSize = DefaultPageSize, + ascOrder = true): + Future[ArchiveDriverResult[seq[ArchiveRow]]] {.async.} = + + ## This proc aims to run the most typical queries in a more performant way, i.e. by means of + ## prepared statements. + ## + ## contentTopic - string with list of conten topics. e.g: "'ctopic1','ctopic2','ctopic3'" + + var rows: seq[(PubsubTopic, WakuMessage, seq[byte], Timestamp)] + proc rowCallback(pqResult: ptr PGresult) = + rowCallbackImpl(pqResult, rows) + + let startTimeStr = $startTime + let endTimeStr = $endTime + let limit = $maxPageSize + + if cursor.isSome(): + var stmtName = if ascOrder: SelectWithCursorAscStmtName else: SelectWithCursorDescStmtName + var stmtDef = if ascOrder: SelectWithCursorAscStmtDef else: SelectWithCursorDescStmtDef + + let digest = toHex(cursor.get().digest.data) + let storeTime = $cursor.get().storeTime + + (await s.readConnPool.runStmt( + stmtName, + stmtDef, + @[contentTopic, + pubsubTopic, + storeTime, + digest, + startTimeStr, + endTimeStr, + limit], + @[int32(contentTopic.len), + int32(pubsubTopic.len), + int32(storeTime.len), + int32(digest.len), + int32(startTimeStr.len), + int32(endTimeStr.len), + int32(limit.len)], + @[int32(0), int32(0), int32(0), int32(0), + int32(0), int32(0), int32(0)], + rowCallback) + ).isOkOr: + return err("failed to run query with cursor: " & $error) + + else: + var stmtName = if ascOrder: SelectNoCursorAscStmtName else: SelectNoCursorDescStmtName + var stmtDef = if ascOrder: SelectNoCursorAscStmtDef else: SelectNoCursorDescStmtDef + (await s.readConnPool.runStmt(stmtName, + stmtDef, + @[contentTopic, + pubsubTopic, + startTimeStr, + endTimeStr, + limit], + @[int32(contentTopic.len), + int32(pubsubTopic.len), + int32(startTimeStr.len), + int32(endTimeStr.len), + int32(limit.len)], + @[int32(0), int32(0), int32(0), int32(0), int32(0)], + rowCallback) + ).isOkOr: + return err("failed to run query without cursor: " & $error) + + return ok(rows) + +method getMessages*(s: PostgresDriver, + contentTopicSeq: seq[ContentTopic] = @[], + pubsubTopic = none(PubsubTopic), + cursor = none(ArchiveCursor), + startTime = none(Timestamp), + endTime = none(Timestamp), + maxPageSize = DefaultPageSize, + ascendingOrder = true): + Future[ArchiveDriverResult[seq[ArchiveRow]]] {.async.} = + + if contentTopicSeq.len > 0 and + pubsubTopic.isSome() and + startTime.isSome() and + endTime.isSome(): + + ## Considered the most common query. Therefore, we use prepared statements to optimize it. + return await s.getMessagesPreparedStmt(contentTopicSeq.join(","), + PubsubTopic(pubsubTopic.get()), + cursor, + startTime.get(), + endTime.get(), + maxPageSize, + ascendingOrder) + else: + ## We will run atypical query. In this case we don't use prepared statemets + return await s.getMessagesArbitraryQuery(contentTopicSeq, + pubsubTopic, + cursor, + startTime, + endTime, + maxPageSize, + ascendingOrder) + proc getInt(s: PostgresDriver, query: string): Future[ArchiveDriverResult[int64]] {.async.} = From d7ef3ca192a9eba960a02a8ea7c50b0f8c17cc88 Mon Sep 17 00:00:00 2001 From: Abhimanyu Date: Wed, 8 Nov 2023 01:41:23 +0100 Subject: [PATCH 110/274] Revert "feat: amending computeDigest func. + related test cases (#2132)" (#2180) This reverts commit 1669f710ce8f48d1b7fb06ca98433f2b25a44e6d. --- tests/waku_archive/test_driver_postgres.nim | 12 ++-- .../test_driver_postgres_query.nim | 62 +++++++++---------- .../test_driver_queue_pagination.nim | 4 +- .../waku_archive/test_driver_queue_query.nim | 56 ++++++++--------- tests/waku_archive/test_driver_sqlite.nim | 2 +- .../waku_archive/test_driver_sqlite_query.nim | 56 ++++++++--------- tests/waku_archive/test_retention_policy.nim | 6 +- tests/waku_archive/test_waku_archive.nim | 6 +- tests/waku_store/test_wakunode_store.nim | 4 +- tests/wakunode_jsonrpc/test_jsonrpc_store.nim | 2 +- tests/wakunode_rest/test_rest_store.nim | 2 +- waku/waku_archive/archive.nim | 2 +- waku/waku_archive/common.nim | 6 +- .../driver/queue_driver/index.nim | 2 +- waku/waku_store/client.nim | 2 +- 15 files changed, 111 insertions(+), 113 deletions(-) diff --git a/tests/waku_archive/test_driver_postgres.nim b/tests/waku_archive/test_driver_postgres.nim index 18afd74e7a..4709d4588f 100644 --- a/tests/waku_archive/test_driver_postgres.nim +++ b/tests/waku_archive/test_driver_postgres.nim @@ -19,7 +19,7 @@ proc computeTestCursor(pubsubTopic: PubsubTopic, pubsubTopic: pubsubTopic, senderTime: message.timestamp, storeTime: message.timestamp, - digest: computeDigest(message, pubsubTopic) + digest: computeDigest(message) ) suite "Postgres driver": @@ -78,7 +78,7 @@ suite "Postgres driver": let msg = fakeWakuMessage(contentTopic=contentTopic) - let computedDigest = computeDigest(msg, DefaultPubsubTopic) + let computedDigest = computeDigest(msg) let putRes = await driver.put(DefaultPubsubTopic, msg, computedDigest, msg.timestamp) assert putRes.isOk(), putRes.error @@ -113,12 +113,12 @@ suite "Postgres driver": let msg1 = fakeWakuMessage(contentTopic=contentTopic1) - var putRes = await driver.put(pubsubTopic1, msg1, computeDigest(msg1,pubsubTopic1), msg1.timestamp) + var putRes = await driver.put(pubsubTopic1, msg1, computeDigest(msg1), msg1.timestamp) assert putRes.isOk(), putRes.error let msg2 = fakeWakuMessage(contentTopic=contentTopic2) - putRes = await driver.put(pubsubTopic2, msg2, computeDigest(msg2, pubsubTopic2), msg2.timestamp) + putRes = await driver.put(pubsubTopic2, msg2, computeDigest(msg2), msg2.timestamp) assert putRes.isOk(), putRes.error let countMessagesRes = await driver.getMessagesCount() @@ -197,11 +197,11 @@ suite "Postgres driver": let msg2 = fakeWakuMessage(ts = now) var putRes = await driver.put(DefaultPubsubTopic, - msg1, computeDigest(msg1, DefaultPubsubTopic), msg1.timestamp) + msg1, computeDigest(msg1), msg1.timestamp) assert putRes.isOk(), putRes.error putRes = await driver.put(DefaultPubsubTopic, - msg2, computeDigest(msg2, DefaultPubsubTopic), msg2.timestamp) + msg2, computeDigest(msg2), msg2.timestamp) require not putRes.isOk() (await driver.close()).expect("driver to close") diff --git a/tests/waku_archive/test_driver_postgres_query.nim b/tests/waku_archive/test_driver_postgres_query.nim index ea174eab05..cbc1d16d91 100644 --- a/tests/waku_archive/test_driver_postgres_query.nim +++ b/tests/waku_archive/test_driver_postgres_query.nim @@ -37,7 +37,7 @@ proc computeTestCursor(pubsubTopic: PubsubTopic, message: WakuMessage): ArchiveC pubsubTopic: pubsubTopic, senderTime: message.timestamp, storeTime: message.timestamp, - digest: computeDigest(message, pubsubTopic) + digest: computeDigest(message) ) suite "Postgres driver - query by content topic": @@ -65,7 +65,7 @@ suite "Postgres driver - query by content topic": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -107,7 +107,7 @@ suite "Postgres driver - query by content topic": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -150,7 +150,7 @@ suite "Postgres driver - query by content topic": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -195,7 +195,7 @@ suite "Postgres driver - query by content topic": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -233,7 +233,7 @@ suite "Postgres driver - query by content topic": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -260,7 +260,7 @@ suite "Postgres driver - query by content topic": for t in 0..<40: let msg = fakeWakuMessage(@[byte t], DefaultContentTopic, ts=ts(t)) - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -306,7 +306,7 @@ suite "Postgres driver - query by pubsub topic": for row in messages: let (topic, msg) = row - require (await driver.put(topic, msg, computeDigest(msg, topic), msg.timestamp)).isOk() + require (await driver.put(topic, msg, computeDigest(msg), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -351,7 +351,7 @@ suite "Postgres driver - query by pubsub topic": for row in messages: let (topic, msg) = row - require (await driver.put(topic, msg, computeDigest(msg, topic), msg.timestamp)).isOk() + require (await driver.put(topic, msg, computeDigest(msg), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -396,7 +396,7 @@ suite "Postgres driver - query by pubsub topic": for row in messages: let (topic, msg) = row - require (await driver.put(topic, msg, computeDigest(msg, topic), msg.timestamp)).isOk() + require (await driver.put(topic, msg, computeDigest(msg), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -443,7 +443,7 @@ suite "Postgres driver - query by cursor": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() let cursor = computeTestCursor(DefaultPubsubTopic, expected[4]) @@ -488,7 +488,7 @@ suite "Postgres driver - query by cursor": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() let cursor = computeTestCursor(DefaultPubsubTopic, expected[4]) @@ -531,7 +531,7 @@ suite "Postgres driver - query by cursor": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() let cursor = computeTestCursor(DefaultPubsubTopic, expected[4]) @@ -575,7 +575,7 @@ suite "Postgres driver - query by cursor": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() let cursor = computeTestCursor(DefaultPubsubTopic, expected[6]) @@ -626,7 +626,7 @@ suite "Postgres driver - query by cursor": for row in messages: let (topic, msg) = row - require (await driver.put(topic, msg, computeDigest(msg, topic), msg.timestamp)).isOk() + require (await driver.put(topic, msg, computeDigest(msg), msg.timestamp)).isOk() let cursor = computeTestCursor(expected[5][0], expected[5][1]) @@ -678,7 +678,7 @@ suite "Postgres driver - query by cursor": for row in messages: let (topic, msg) = row - require (await driver.put(topic, msg, computeDigest(msg, topic), msg.timestamp)).isOk() + require (await driver.put(topic, msg, computeDigest(msg), msg.timestamp)).isOk() let cursor = computeTestCursor(expected[6][0], expected[6][1]) @@ -726,7 +726,7 @@ suite "Postgres driver - query by time range": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -768,7 +768,7 @@ suite "Postgres driver - query by time range": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -816,7 +816,7 @@ suite "Postgres driver - query by time range": for row in messages: let (topic, msg) = row - require (await driver.put(topic, msg, computeDigest(msg, topic), msg.timestamp)).isOk() + require (await driver.put(topic, msg, computeDigest(msg), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -861,7 +861,7 @@ suite "Postgres driver - query by time range": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -904,7 +904,7 @@ suite "Postgres driver - query by time range": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -949,7 +949,7 @@ suite "Postgres driver - query by time range": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -994,7 +994,7 @@ suite "Postgres driver - query by time range": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() let cursor = computeTestCursor(DefaultPubsubTopic, expected[3]) @@ -1042,7 +1042,7 @@ suite "Postgres driver - query by time range": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() let cursor = computeTestCursor(DefaultPubsubTopic, expected[6]) @@ -1093,7 +1093,7 @@ suite "Postgres driver - query by time range": for row in messages: let (topic, msg) = row - require (await driver.put(topic, msg, computeDigest(msg, topic), msg.timestamp)).isOk() + require (await driver.put(topic, msg, computeDigest(msg), msg.timestamp)).isOk() let cursor = computeTestCursor(DefaultPubsubTopic, expected[1][1]) @@ -1147,7 +1147,7 @@ suite "Postgres driver - query by time range": for row in messages: let (topic, msg) = row - require (await driver.put(topic, msg, computeDigest(msg, topic), msg.timestamp)).isOk() + require (await driver.put(topic, msg, computeDigest(msg), msg.timestamp)).isOk() let cursor = computeTestCursor(expected[7][0], expected[7][1]) @@ -1201,7 +1201,7 @@ suite "Postgres driver - query by time range": for row in messages: let (topic, msg) = row - require (await driver.put(topic, msg, computeDigest(msg, topic), msg.timestamp)).isOk() + require (await driver.put(topic, msg, computeDigest(msg), msg.timestamp)).isOk() let cursor = computeTestCursor(expected[1][0], expected[1][1]) @@ -1256,7 +1256,7 @@ suite "Postgres driver - query by time range": for row in messages: let (topic, msg) = row - require (await driver.put(topic, msg, computeDigest(msg, topic), msg.timestamp)).isOk() + require (await driver.put(topic, msg, computeDigest(msg), msg.timestamp)).isOk() let cursor = computeTestCursor(expected[1][0], expected[1][1]) @@ -1306,7 +1306,7 @@ suite "Postgres driver - retention policy": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() var res = await driver.getOldestMessageTimestamp() assert res.isOk(), res.error @@ -1341,7 +1341,7 @@ suite "Postgres driver - retention policy": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() var res = await driver.getMessagesCount() assert res.isOk(), res.error @@ -1378,7 +1378,7 @@ suite "Postgres driver - retention policy": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() var res = await driver.getMessagesCount() assert res.isOk(), res.error diff --git a/tests/waku_archive/test_driver_queue_pagination.nim b/tests/waku_archive/test_driver_queue_pagination.nim index e073c1f451..bca6940286 100644 --- a/tests/waku_archive/test_driver_queue_pagination.nim +++ b/tests/waku_archive/test_driver_queue_pagination.nim @@ -156,7 +156,7 @@ procSuite "Queue driver - pagination": pubsubTopic: DefaultPubsubTopic, senderTime: msg.timestamp, storeTime: msg.timestamp, - digest: computeDigest(msg, DefaultPubsubTopic) + digest: computeDigest(msg) ).toIndex() let @@ -337,7 +337,7 @@ procSuite "Queue driver - pagination": pubsubTopic: DefaultPubsubTopic, senderTime: msg.timestamp, storeTime: msg.timestamp, - digest: computeDigest(msg, DefaultPubsubTopic) + digest: computeDigest(msg) ).toIndex() let diff --git a/tests/waku_archive/test_driver_queue_query.nim b/tests/waku_archive/test_driver_queue_query.nim index 1d7294c2fc..5f25d6d9ae 100644 --- a/tests/waku_archive/test_driver_queue_query.nim +++ b/tests/waku_archive/test_driver_queue_query.nim @@ -29,7 +29,7 @@ proc computeTestCursor(pubsubTopic: PubsubTopic, message: WakuMessage): ArchiveC pubsubTopic: pubsubTopic, senderTime: message.timestamp, storeTime: message.timestamp, - digest: computeDigest(message, pubsubTopic) + digest: computeDigest(message) ) @@ -58,7 +58,7 @@ suite "Queue driver - query by content topic": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp) + let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp) require retFut.isOk() ## When @@ -102,7 +102,7 @@ suite "Queue driver - query by content topic": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp) + let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp) require retFut.isOk() ## When @@ -147,7 +147,7 @@ suite "Queue driver - query by content topic": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp) + let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp) require retFut.isOk() ## When @@ -194,7 +194,7 @@ suite "Queue driver - query by content topic": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp) + let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp) require retFut.isOk() ## When @@ -234,7 +234,7 @@ suite "Queue driver - query by content topic": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp) + let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp) require retFut.isOk() ## When @@ -263,7 +263,7 @@ suite "Queue driver - query by content topic": for t in 0..<40: let msg = fakeWakuMessage(@[byte t], DefaultContentTopic, ts=ts(t)) - let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp) + let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp) require retFut.isOk() ## When @@ -312,7 +312,7 @@ suite "SQLite driver - query by pubsub topic": for row in messages: let (topic, msg) = row - let retFut = waitFor driver.put(topic, msg, computeDigest(msg, topic), msg.timestamp) + let retFut = waitFor driver.put(topic, msg, computeDigest(msg), msg.timestamp) require retFut.isOk() ## When @@ -359,7 +359,7 @@ suite "SQLite driver - query by pubsub topic": for row in messages: let (topic, msg) = row - let retFut = waitFor driver.put(topic, msg, computeDigest(msg, topic), msg.timestamp) + let retFut = waitFor driver.put(topic, msg, computeDigest(msg), msg.timestamp) require retFut.isOk() ## When @@ -406,7 +406,7 @@ suite "SQLite driver - query by pubsub topic": for row in messages: let (topic, msg) = row - let retFut = waitFor driver.put(topic, msg, computeDigest(msg, topic), msg.timestamp) + let retFut = waitFor driver.put(topic, msg, computeDigest(msg), msg.timestamp) require retFut.isOk() ## When @@ -456,7 +456,7 @@ suite "Queue driver - query by cursor": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp) + let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp) require retFut.isOk() let cursor = computeTestCursor(DefaultPubsubTopic, expected[4]) @@ -503,7 +503,7 @@ suite "Queue driver - query by cursor": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp) + let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp) require retFut.isOk() let cursor = computeTestCursor(DefaultPubsubTopic, expected[4]) @@ -548,7 +548,7 @@ suite "Queue driver - query by cursor": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp) + let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp) require retFut.isOk() let cursor = computeTestCursor(DefaultPubsubTopic, expected[4]) @@ -594,7 +594,7 @@ suite "Queue driver - query by cursor": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp) + let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp) require retFut.isOk() let cursor = computeTestCursor(DefaultPubsubTopic, expected[6]) @@ -647,7 +647,7 @@ suite "Queue driver - query by cursor": for row in messages: let (topic, msg) = row - let retFut = waitFor driver.put(topic, msg, computeDigest(msg, topic), msg.timestamp) + let retFut = waitFor driver.put(topic, msg, computeDigest(msg), msg.timestamp) require retFut.isOk() let cursor = computeTestCursor(expected[5][0], expected[5][1]) @@ -701,7 +701,7 @@ suite "Queue driver - query by cursor": for row in messages: let (topic, msg) = row - let retFut = waitFor driver.put(topic, msg, computeDigest(msg, topic), msg.timestamp) + let retFut = waitFor driver.put(topic, msg, computeDigest(msg), msg.timestamp) require retFut.isOk() let cursor = computeTestCursor(expected[6][0], expected[6][1]) @@ -752,7 +752,7 @@ suite "Queue driver - query by time range": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp) + let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp) require retFut.isOk() ## When @@ -796,7 +796,7 @@ suite "Queue driver - query by time range": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp) + let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp) require retFut.isOk() ## When @@ -846,7 +846,7 @@ suite "Queue driver - query by time range": for row in messages: let (topic, msg) = row - let retFut = waitFor driver.put(topic, msg, computeDigest(msg, topic), msg.timestamp) + let retFut = waitFor driver.put(topic, msg, computeDigest(msg), msg.timestamp) require retFut.isOk() ## When @@ -893,7 +893,7 @@ suite "Queue driver - query by time range": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp) + let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp) require retFut.isOk() ## When @@ -938,7 +938,7 @@ suite "Queue driver - query by time range": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp) + let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp) require retFut.isOk() ## When @@ -985,7 +985,7 @@ suite "Queue driver - query by time range": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp) + let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp) require retFut.isOk() ## When @@ -1032,7 +1032,7 @@ suite "Queue driver - query by time range": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp) + let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp) require retFut.isOk() let cursor = computeTestCursor(DefaultPubsubTopic, expected[3]) @@ -1082,7 +1082,7 @@ suite "Queue driver - query by time range": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp) + let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp) require retFut.isOk() let cursor = computeTestCursor(DefaultPubsubTopic, expected[6]) @@ -1135,7 +1135,7 @@ suite "Queue driver - query by time range": for row in messages: let (topic, msg) = row - let retFut = waitFor driver.put(topic, msg, computeDigest(msg, topic), msg.timestamp) + let retFut = waitFor driver.put(topic, msg, computeDigest(msg), msg.timestamp) require retFut.isOk() let cursor = computeTestCursor(DefaultPubsubTopic, expected[1][1]) @@ -1191,7 +1191,7 @@ suite "Queue driver - query by time range": for row in messages: let (topic, msg) = row - let retFut = waitFor driver.put(topic, msg, computeDigest(msg, topic), msg.timestamp) + let retFut = waitFor driver.put(topic, msg, computeDigest(msg), msg.timestamp) require retFut.isOk() let cursor = computeTestCursor(expected[7][0], expected[7][1]) @@ -1247,7 +1247,7 @@ suite "Queue driver - query by time range": for row in messages: let (topic, msg) = row - let retFut = waitFor driver.put(topic, msg, computeDigest(msg, topic), msg.timestamp) + let retFut = waitFor driver.put(topic, msg, computeDigest(msg), msg.timestamp) require retFut.isOk() let cursor = computeTestCursor(expected[1][0], expected[1][1]) @@ -1304,7 +1304,7 @@ suite "Queue driver - query by time range": for row in messages: let (topic, msg) = row - let retFut = waitFor driver.put(topic, msg, computeDigest(msg, topic), msg.timestamp) + let retFut = waitFor driver.put(topic, msg, computeDigest(msg), msg.timestamp) require retFut.isOk() let cursor = computeTestCursor(expected[1][0], expected[1][1]) diff --git a/tests/waku_archive/test_driver_sqlite.nim b/tests/waku_archive/test_driver_sqlite.nim index 0fae560e03..7c1bd2e1b7 100644 --- a/tests/waku_archive/test_driver_sqlite.nim +++ b/tests/waku_archive/test_driver_sqlite.nim @@ -50,7 +50,7 @@ suite "SQLite driver": let msg = fakeWakuMessage(contentTopic=contentTopic) ## When - let putRes = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp) + let putRes = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp) ## Then check: diff --git a/tests/waku_archive/test_driver_sqlite_query.nim b/tests/waku_archive/test_driver_sqlite_query.nim index 2ed20f0fac..9cf21cfca7 100644 --- a/tests/waku_archive/test_driver_sqlite_query.nim +++ b/tests/waku_archive/test_driver_sqlite_query.nim @@ -33,7 +33,7 @@ proc computeTestCursor(pubsubTopic: PubsubTopic, message: WakuMessage): ArchiveC pubsubTopic: pubsubTopic, senderTime: message.timestamp, storeTime: message.timestamp, - digest: computeDigest(message, pubsubTopic) + digest: computeDigest(message) ) @@ -62,7 +62,7 @@ suite "SQLite driver - query by content topic": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -105,7 +105,7 @@ suite "SQLite driver - query by content topic": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -149,7 +149,7 @@ suite "SQLite driver - query by content topic": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -195,7 +195,7 @@ suite "SQLite driver - query by content topic": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -234,7 +234,7 @@ suite "SQLite driver - query by content topic": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -262,7 +262,7 @@ suite "SQLite driver - query by content topic": for t in 0..<40: let msg = fakeWakuMessage(@[byte t], DefaultContentTopic, ts=ts(t)) - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -310,7 +310,7 @@ suite "SQLite driver - query by pubsub topic": for row in messages: let (topic, msg) = row - require (await driver.put(topic, msg, computeDigest(msg, topic), msg.timestamp)).isOk() + require (await driver.put(topic, msg, computeDigest(msg), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -356,7 +356,7 @@ suite "SQLite driver - query by pubsub topic": for row in messages: let (topic, msg) = row - require (await driver.put(topic, msg, computeDigest(msg, topic), msg.timestamp)).isOk() + require (await driver.put(topic, msg, computeDigest(msg), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -402,7 +402,7 @@ suite "SQLite driver - query by pubsub topic": for row in messages: let (topic, msg) = row - require (await driver.put(topic, msg, computeDigest(msg, topic), msg.timestamp)).isOk() + require (await driver.put(topic, msg, computeDigest(msg), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -451,7 +451,7 @@ suite "SQLite driver - query by cursor": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() let cursor = computeTestCursor(DefaultPubsubTopic, expected[4]) @@ -497,7 +497,7 @@ suite "SQLite driver - query by cursor": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() let cursor = computeTestCursor(DefaultPubsubTopic, expected[4]) @@ -541,7 +541,7 @@ suite "SQLite driver - query by cursor": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() let cursor = computeTestCursor(DefaultPubsubTopic, expected[4]) @@ -586,7 +586,7 @@ suite "SQLite driver - query by cursor": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() let cursor = computeTestCursor(DefaultPubsubTopic, expected[6]) @@ -638,7 +638,7 @@ suite "SQLite driver - query by cursor": for row in messages: let (topic, msg) = row - require (await driver.put(topic, msg, computeDigest(msg, topic), msg.timestamp)).isOk() + require (await driver.put(topic, msg, computeDigest(msg), msg.timestamp)).isOk() let cursor = computeTestCursor(expected[5][0], expected[5][1]) @@ -691,7 +691,7 @@ suite "SQLite driver - query by cursor": for row in messages: let (topic, msg) = row - require (await driver.put(topic, msg, computeDigest(msg, topic), msg.timestamp)).isOk() + require (await driver.put(topic, msg, computeDigest(msg), msg.timestamp)).isOk() let cursor = computeTestCursor(expected[6][0], expected[6][1]) @@ -741,7 +741,7 @@ suite "SQLite driver - query by time range": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -784,7 +784,7 @@ suite "SQLite driver - query by time range": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -833,7 +833,7 @@ suite "SQLite driver - query by time range": for row in messages: let (topic, msg) = row - require (await driver.put(topic, msg, computeDigest(msg, topic), msg.timestamp)).isOk() + require (await driver.put(topic, msg, computeDigest(msg), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -879,7 +879,7 @@ suite "SQLite driver - query by time range": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -923,7 +923,7 @@ suite "SQLite driver - query by time range": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -969,7 +969,7 @@ suite "SQLite driver - query by time range": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -1015,7 +1015,7 @@ suite "SQLite driver - query by time range": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() let cursor = computeTestCursor(DefaultPubsubTopic, expected[3]) @@ -1064,7 +1064,7 @@ suite "SQLite driver - query by time range": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() let cursor = computeTestCursor(DefaultPubsubTopic, expected[6]) @@ -1116,7 +1116,7 @@ suite "SQLite driver - query by time range": for row in messages: let (topic, msg) = row - require (await driver.put(topic, msg, computeDigest(msg, topic), msg.timestamp)).isOk() + require (await driver.put(topic, msg, computeDigest(msg), msg.timestamp)).isOk() let cursor = computeTestCursor(DefaultPubsubTopic, expected[1][1]) @@ -1171,7 +1171,7 @@ suite "SQLite driver - query by time range": for row in messages: let (topic, msg) = row - require (await driver.put(topic, msg, computeDigest(msg, topic), msg.timestamp)).isOk() + require (await driver.put(topic, msg, computeDigest(msg), msg.timestamp)).isOk() let cursor = computeTestCursor(expected[7][0], expected[7][1]) @@ -1226,7 +1226,7 @@ suite "SQLite driver - query by time range": for row in messages: let (topic, msg) = row - require (await driver.put(topic, msg, computeDigest(msg, topic), msg.timestamp)).isOk() + require (await driver.put(topic, msg, computeDigest(msg), msg.timestamp)).isOk() let cursor = computeTestCursor(expected[1][0], expected[1][1]) @@ -1282,7 +1282,7 @@ suite "SQLite driver - query by time range": for row in messages: let (topic, msg) = row - require (await driver.put(topic, msg, computeDigest(msg, topic), msg.timestamp)).isOk() + require (await driver.put(topic, msg, computeDigest(msg), msg.timestamp)).isOk() let cursor = computeTestCursor(expected[1][0], expected[1][1]) diff --git a/tests/waku_archive/test_retention_policy.nim b/tests/waku_archive/test_retention_policy.nim index 1e6bab4614..0927a15e80 100644 --- a/tests/waku_archive/test_retention_policy.nim +++ b/tests/waku_archive/test_retention_policy.nim @@ -41,7 +41,7 @@ suite "Waku Archive - Retention policy": ## When for i in 1..capacity+excess: let msg = fakeWakuMessage(payload= @[byte i], contentTopic=DefaultContentTopic, ts=Timestamp(i)) - putFutures.add(driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp)) + putFutures.add(driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)) discard waitFor allFinished(putFutures) @@ -88,7 +88,7 @@ suite "Waku Archive - Retention policy": # create a number of messages so that the size of the DB overshoots for i in 1..excess: let msg = fakeWakuMessage(payload= @[byte i], contentTopic=DefaultContentTopic, ts=Timestamp(i)) - putFutures.add(driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp)) + putFutures.add(driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)) # waitFor is used to synchronously wait for the futures to complete. discard waitFor allFinished(putFutures) @@ -139,7 +139,7 @@ suite "Waku Archive - Retention policy": ## When for msg in messages: - require (waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp)).isOk() + require (waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() require (waitFor retentionPolicy.execute(driver)).isOk() ## Then diff --git a/tests/waku_archive/test_waku_archive.nim b/tests/waku_archive/test_waku_archive.nim index 681c93c061..dcac1484b4 100644 --- a/tests/waku_archive/test_waku_archive.nim +++ b/tests/waku_archive/test_waku_archive.nim @@ -30,7 +30,7 @@ proc computeTestCursor(pubsubTopic: PubsubTopic, message: WakuMessage): ArchiveC pubsubTopic: pubsubTopic, senderTime: message.timestamp, storeTime: message.timestamp, - digest: computeDigest(message, pubsubTopic) + digest: computeDigest(message) ) @@ -152,7 +152,7 @@ procSuite "Waku Archive - find messages": archive = newTestWakuArchive(driver) for msg in msgListA: - require (waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp)).isOk() + require (waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() archive @@ -446,7 +446,7 @@ procSuite "Waku Archive - find messages": ] for msg in msgList: - require (waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg, DefaultPubsubTopic), msg.timestamp)).isOk() + require (waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() ## Given let req = ArchiveQuery(contentTopics: @[DefaultContentTopic]) diff --git a/tests/waku_store/test_wakunode_store.nim b/tests/waku_store/test_wakunode_store.nim index 9fbe234bd3..117a1cc93b 100644 --- a/tests/waku_store/test_wakunode_store.nim +++ b/tests/waku_store/test_wakunode_store.nim @@ -34,7 +34,7 @@ proc computeTestCursor(pubsubTopic: PubsubTopic, message: WakuMessage): HistoryC pubsubTopic: pubsubTopic, senderTime: message.timestamp, storeTime: message.timestamp, - digest: waku_archive.computeDigest(message, pubsubTopic) + digest: waku_archive.computeDigest(message) ) procSuite "WakuNode - Store": @@ -57,7 +57,7 @@ procSuite "WakuNode - Store": let driver = newTestArchiveDriver() for msg in msgListA: - let msg_digest = waku_archive.computeDigest(msg, DefaultPubsubTopic) + let msg_digest = waku_archive.computeDigest(msg) require (waitFor driver.put(DefaultPubsubTopic, msg, msg_digest, msg.timestamp)).isOk() driver diff --git a/tests/wakunode_jsonrpc/test_jsonrpc_store.nim b/tests/wakunode_jsonrpc/test_jsonrpc_store.nim index 7c3865d2f7..de04f83f0a 100644 --- a/tests/wakunode_jsonrpc/test_jsonrpc_store.nim +++ b/tests/wakunode_jsonrpc/test_jsonrpc_store.nim @@ -24,7 +24,7 @@ import proc put(store: ArchiveDriver, pubsubTopic: PubsubTopic, message: WakuMessage): Future[Result[void, string]] = let - digest = waku_archive.computeDigest(message, pubsubTopic) + digest = waku_archive.computeDigest(message) receivedTime = if message.timestamp > 0: message.timestamp else: getNanosecondTime(getTime().toUnixFloat()) diff --git a/tests/wakunode_rest/test_rest_store.nim b/tests/wakunode_rest/test_rest_store.nim index ee64a873ed..64ad5c31e7 100644 --- a/tests/wakunode_rest/test_rest_store.nim +++ b/tests/wakunode_rest/test_rest_store.nim @@ -32,7 +32,7 @@ logScope: proc put(store: ArchiveDriver, pubsubTopic: PubsubTopic, message: WakuMessage): Future[Result[void, string]] = let - digest = waku_archive.computeDigest(message, pubsubTopic) + digest = waku_archive.computeDigest(message) receivedTime = if message.timestamp > 0: message.timestamp else: getNanosecondTime(getTime().toUnixFloat()) diff --git a/waku/waku_archive/archive.nim b/waku/waku_archive/archive.nim index 8d236caf7e..b6e8aad3fa 100644 --- a/waku/waku_archive/archive.nim +++ b/waku/waku_archive/archive.nim @@ -100,7 +100,7 @@ proc handleMessage*(w: WakuArchive, block: let - msgDigest = computeDigest(msg, pubsubTopic) + msgDigest = computeDigest(msg) msgReceivedTime = if msg.timestamp > 0: msg.timestamp else: getNanosecondTime(getTime().toUnixFloat()) diff --git a/waku/waku_archive/common.nim b/waku/waku_archive/common.nim index ae5bd92616..29d2bfd220 100644 --- a/waku/waku_archive/common.nim +++ b/waku/waku_archive/common.nim @@ -18,15 +18,13 @@ import type MessageDigest* = MDigest[256] -proc computeDigest*(msg: WakuMessage, pubSubTopic: string): MessageDigest = +proc computeDigest*(msg: WakuMessage): MessageDigest = var ctx: sha256 ctx.init() defer: ctx.clear() - ctx.update(pubSubTopic.toBytes()) - ctx.update(msg.payload) ctx.update(msg.contentTopic.toBytes()) - ctx.update(msg.meta) + ctx.update(msg.payload) # Computes the hash return ctx.finish() diff --git a/waku/waku_archive/driver/queue_driver/index.nim b/waku/waku_archive/driver/queue_driver/index.nim index e04e0246de..c36d7ce1ff 100644 --- a/waku/waku_archive/driver/queue_driver/index.nim +++ b/waku/waku_archive/driver/queue_driver/index.nim @@ -21,7 +21,7 @@ type Index* = object proc compute*(T: type Index, msg: WakuMessage, receivedTime: Timestamp, pubsubTopic: PubsubTopic): T = ## Takes a WakuMessage with received timestamp and returns its Index. let - digest = computeDigest(msg, pubsubTopic) + digest = computeDigest(msg) senderTime = msg.timestamp Index( diff --git a/waku/waku_store/client.nim b/waku/waku_store/client.nim index 1c3ec5a41e..74f51fe7a2 100644 --- a/waku/waku_store/client.nim +++ b/waku/waku_store/client.nim @@ -153,7 +153,7 @@ when defined(waku_exp_store_resume): proc put(store: ArchiveDriver, pubsubTopic: PubsubTopic, message: WakuMessage): Result[void, string] = let - digest = waku_archive.computeDigest(message, pubsubTopic) + digest = waku_archive.computeDigest(message) receivedTime = if message.timestamp > 0: message.timestamp else: getNanosecondTime(getTime().toUnixFloat()) From ea6200dd0cc104970bcfdc23089f7c3e3a6ac816 Mon Sep 17 00:00:00 2001 From: Anton Iakimov Date: Wed, 8 Nov 2023 13:54:55 +0100 Subject: [PATCH 111/274] ci: fix runtime available log level (#2191) Closes: https://github.com/waku-org/nwaku/issues/2107 --- ci/Jenkinsfile.prs | 2 ++ ci/Jenkinsfile.release | 9 +++++---- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/ci/Jenkinsfile.prs b/ci/Jenkinsfile.prs index fccb94d24c..958665a696 100644 --- a/ci/Jenkinsfile.prs +++ b/ci/Jenkinsfile.prs @@ -1,3 +1,5 @@ +#!/usr/bin/env groovy + library 'status-jenkins-lib@v1.6.0' pipeline { diff --git a/ci/Jenkinsfile.release b/ci/Jenkinsfile.release index 5301477da2..483afceae6 100644 --- a/ci/Jenkinsfile.release +++ b/ci/Jenkinsfile.release @@ -42,9 +42,10 @@ pipeline { '-d:postgres', ].join(' ') ) - string( - name: "LOG_LEVEL", - description: "Chronicles log level (default: TRACE)", + choice( + name: "LOWEST_LOG_LEVEL_ALLOWED", + choces: ['TRACE', 'DEGUG', 'INFO', 'NOTICE', 'WARN', 'ERROR', 'FATAL'], + description: "Defines the log level, which will be available at runtime (Chronicles log level)", ) booleanParam( name: 'DEBUG', @@ -61,7 +62,7 @@ pipeline { "--label=commit='${env.GIT_COMMIT.take(8)}' " + "--build-arg=MAKE_TARGET='${params.MAKE_TARGET}' " + "--build-arg=NIMFLAGS='${params.NIMFLAGS}' " + - (params.LOG_LEVEL != null ? "--build-arg=LOG_LEVEL='${params.LOG_LEVEL}' ": "") + + "--build-arg=LOG_LEVEL='${params.LOWEST_LOG_LEVEL_ALLOWED}' " + "--target=${params.DEBUG ? "debug" : "prod"} ." ) } } From 6dd2806359ba5351e419f480073c91e04a029ad5 Mon Sep 17 00:00:00 2001 From: Anton Iakimov Date: Wed, 8 Nov 2023 16:52:53 +0100 Subject: [PATCH 112/274] fix: typo --- ci/Jenkinsfile.release | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/Jenkinsfile.release b/ci/Jenkinsfile.release index 483afceae6..add5544379 100644 --- a/ci/Jenkinsfile.release +++ b/ci/Jenkinsfile.release @@ -44,7 +44,7 @@ pipeline { ) choice( name: "LOWEST_LOG_LEVEL_ALLOWED", - choces: ['TRACE', 'DEGUG', 'INFO', 'NOTICE', 'WARN', 'ERROR', 'FATAL'], + choices: ['TRACE', 'DEGUG', 'INFO', 'NOTICE', 'WARN', 'ERROR', 'FATAL'], description: "Defines the log level, which will be available at runtime (Chronicles log level)", ) booleanParam( From 3498a84600119572d8bb074a1853bf70ac5f160e Mon Sep 17 00:00:00 2001 From: Aaryamann Challani <43716372+rymnc@users.noreply.github.com> Date: Thu, 9 Nov 2023 15:18:39 +0530 Subject: [PATCH 113/274] feat: rln-keystore-generator is now a subcommand (#2189) --- apps/wakunode2/external_config.nim | 805 +++++++++--------- apps/wakunode2/wakunode2.nim | 140 +-- tests/testlib/wakunode.nim | 1 + .../external_config.nim | 79 -- tools/rln_keystore_generator/nim.cfg | 3 - .../rln_keystore_generator.nim | 18 +- 6 files changed, 493 insertions(+), 553 deletions(-) delete mode 100644 tools/rln_keystore_generator/external_config.nim delete mode 100644 tools/rln_keystore_generator/nim.cfg diff --git a/apps/wakunode2/external_config.nim b/apps/wakunode2/external_config.nim index f18c4b159e..384cb1922e 100644 --- a/apps/wakunode2/external_config.nim +++ b/apps/wakunode2/external_config.nim @@ -30,18 +30,16 @@ type ProtectedTopic* = object topic*: string key*: secp256k1.SkPublicKey +type StartUpCommand* = enum + noCommand # default, runs waku + generateRlnKeystore # generates a new RLN keystore + type WakuNodeConf* = object configFile* {. desc: "Loads configuration from a TOML file (cmd-line parameters take precedence)" name: "config-file" }: Option[InputFile] - ## Application-level configuration - protectedTopics* {. - desc: "Topics and its public key to be used for message validation, topic:pubkey. Argument may be repeated." - defaultValue: newSeq[ProtectedTopic](0) - name: "protected-topic" .}: seq[ProtectedTopic] - ## Log configuration logLevel* {. desc: "Sets the log level for process. Supported levels: TRACE, DEBUG, INFO, NOTICE, WARN, ERROR or FATAL", @@ -53,409 +51,432 @@ type defaultValue: logging.LogFormat.TEXT, name: "log-format" .}: logging.LogFormat - ## General node config - clusterId* {. - desc: "Cluster id that the node is running in. Node in a different cluster id is disconnected." - defaultValue: 0 - name: "cluster-id" }: uint32 - - agentString* {. - defaultValue: "nwaku", - desc: "Node agent string which is used as identifier in network" - name: "agent-string" .}: string - - nodekey* {. - desc: "P2P node private key as 64 char hex string.", - name: "nodekey" }: Option[PrivateKey] - - listenAddress* {. - defaultValue: defaultListenAddress() - desc: "Listening address for LibP2P (and Discovery v5, if enabled) traffic." - name: "listen-address"}: ValidIpAddress - - tcpPort* {. - desc: "TCP listening port." - defaultValue: 60000 - name: "tcp-port" }: Port - - portsShift* {. - desc: "Add a shift to all port numbers." - defaultValue: 0 - name: "ports-shift" }: uint16 - - nat* {. - desc: "Specify method to use for determining public address. " & - "Must be one of: any, none, upnp, pmp, extip:." - defaultValue: "any" }: string - - extMultiAddrs* {. - desc: "External multiaddresses to advertise to the network. Argument may be repeated." - name: "ext-multiaddr" }: seq[string] - - extMultiAddrsOnly* {. - desc: "Only announce external multiaddresses", - defaultValue: false, - name: "ext-multiaddr-only" }: bool - - maxConnections* {. - desc: "Maximum allowed number of libp2p connections." - defaultValue: 50 - name: "max-connections" }: uint16 - - maxRelayPeers* {. - desc: "Maximum allowed number of relay peers." - name: "max-relay-peers" }: Option[int] - - peerStoreCapacity* {. - desc: "Maximum stored peers in the peerstore." - name: "peer-store-capacity" }: Option[int] - - peerPersistence* {. - desc: "Enable peer persistence.", - defaultValue: false, - name: "peer-persistence" }: bool - - ## DNS addrs config - - dnsAddrs* {. - desc: "Enable resolution of `dnsaddr`, `dns4` or `dns6` multiaddrs" - defaultValue: true - name: "dns-addrs" }: bool - - dnsAddrsNameServers* {. - desc: "DNS name server IPs to query for DNS multiaddrs resolution. Argument may be repeated." - defaultValue: @[ValidIpAddress.init("1.1.1.1"), ValidIpAddress.init("1.0.0.1")] - name: "dns-addrs-name-server" }: seq[ValidIpAddress] - - dns4DomainName* {. - desc: "The domain name resolving to the node's public IPv4 address", - defaultValue: "" - name: "dns4-domain-name" }: string - - ## Relay config - - relay* {. - desc: "Enable relay protocol: true|false", - defaultValue: true - name: "relay" }: bool - - relayPeerExchange* {. - desc: "Enable gossipsub peer exchange in relay protocol: true|false", - defaultValue: false - name: "relay-peer-exchange" }: bool - - rlnRelay* {. - desc: "Enable spam protection through rln-relay: true|false", - defaultValue: false - name: "rln-relay" }: bool - rlnRelayCredPath* {. desc: "The path for peristing rln-relay credential", - defaultValue: "" + defaultValue: "", name: "rln-relay-cred-path" }: string - rlnRelayCredIndex* {. - desc: "the index of the onchain commitment to use", - name: "rln-relay-membership-index" }: Option[uint] - - rlnRelayDynamic* {. - desc: "Enable waku-rln-relay with on-chain dynamic group management: true|false", - defaultValue: false - name: "rln-relay-dynamic" }: bool - - rlnRelayIdKey* {. - desc: "Rln relay identity secret key as a Hex string", - defaultValue: "" - name: "rln-relay-id-key" }: string - - rlnRelayIdCommitmentKey* {. - desc: "Rln relay identity commitment key as a Hex string", - defaultValue: "" - name: "rln-relay-id-commitment-key" }: string - rlnRelayEthClientAddress* {. desc: "WebSocket address of an Ethereum testnet client e.g., ws://localhost:8540/", - defaultValue: "ws://localhost:8540/" + defaultValue: "ws://localhost:8540/", name: "rln-relay-eth-client-address" }: string rlnRelayEthContractAddress* {. desc: "Address of membership contract on an Ethereum testnet", - defaultValue: "" + defaultValue: "", name: "rln-relay-eth-contract-address" }: string rlnRelayCredPassword* {. desc: "Password for encrypting RLN credentials", - defaultValue: "" + defaultValue: "", name: "rln-relay-cred-password" }: string - rlnRelayTreePath* {. - desc: "Path to the RLN merkle tree sled db (https://github.com/spacejam/sled)", - defaultValue: "" - name: "rln-relay-tree-path" }: string - - rlnRelayBandwidthThreshold* {. - desc: "Message rate in bytes/sec after which verification of proofs should happen", - defaultValue: 0 # to maintain backwards compatibility - name: "rln-relay-bandwidth-threshold" }: int - - staticnodes* {. - desc: "Peer multiaddr to directly connect with. Argument may be repeated." - name: "staticnode" }: seq[string] - - keepAlive* {. - desc: "Enable keep-alive for idle connections: true|false", - defaultValue: false - name: "keep-alive" }: bool - - topics* {. - desc: "Default topic to subscribe to. Argument may be repeated. Deprecated! Please use pubsub-topic and/or content-topic instead." - defaultValue: @["/waku/2/default-waku/proto"] - name: "topic" .}: seq[string] - - pubsubTopics* {. - desc: "Default pubsub topic to subscribe to. Argument may be repeated." - name: "pubsub-topic" .}: seq[string] - - contentTopics* {. - desc: "Default content topic to subscribe to. Argument may be repeated." - name: "content-topic" .}: seq[string] - - ## Store and message store config - - store* {. - desc: "Enable/disable waku store protocol", - defaultValue: false, - name: "store" }: bool - - storenode* {. - desc: "Peer multiaddress to query for storage", + rlnRelayEthPrivateKey* {. + desc: "Private key for broadcasting transactions", defaultValue: "", - name: "storenode" }: string - - storeMessageRetentionPolicy* {. - desc: "Message store retention policy. Time retention policy: 'time:'. Capacity retention policy: 'capacity:'. Size retention policy: 'size:'. Set to 'none' to disable.", - defaultValue: "time:" & $2.days.seconds, - name: "store-message-retention-policy" }: string - - storeMessageDbUrl* {. - desc: "The database connection URL for peristent storage.", - defaultValue: "sqlite://store.sqlite3", - name: "store-message-db-url" }: string - - storeMessageDbVacuum* {. - desc: "Enable database vacuuming at start. Only supported by SQLite database engine.", - defaultValue: false, - name: "store-message-db-vacuum" }: bool - - storeMessageDbMigration* {. - desc: "Enable database migration at start.", - defaultValue: true, - name: "store-message-db-migration" }: bool - - ## Filter config - - filter* {. - desc: "Enable filter protocol: true|false", - defaultValue: false - name: "filter" }: bool - - filternode* {. - desc: "Peer multiaddr to request content filtering of messages.", - defaultValue: "" - name: "filternode" }: string - - filterTimeout* {. - desc: "Timeout for filter node in seconds.", - defaultValue: 14400 # 4 hours - name: "filter-timeout" }: int64 - - ## Lightpush config - - lightpush* {. - desc: "Enable lightpush protocol: true|false", - defaultValue: false - name: "lightpush" }: bool - - lightpushnode* {. - desc: "Peer multiaddr to request lightpush of published messages.", - defaultValue: "" - name: "lightpushnode" }: string - - ## JSON-RPC config - - rpc* {. - desc: "Enable Waku JSON-RPC server: true|false", - defaultValue: true - name: "rpc" }: bool - - rpcAddress* {. - desc: "Listening address of the JSON-RPC server.", - defaultValue: ValidIpAddress.init("127.0.0.1") - name: "rpc-address" }: ValidIpAddress - - rpcPort* {. - desc: "Listening port of the JSON-RPC server.", - defaultValue: 8545 - name: "rpc-port" }: uint16 - - rpcAdmin* {. - desc: "Enable access to JSON-RPC Admin API: true|false", - defaultValue: false - name: "rpc-admin" }: bool - - rpcPrivate* {. - desc: "Enable access to JSON-RPC Private API: true|false", - defaultValue: false - name: "rpc-private" }: bool - - ## REST HTTP config - - rest* {. - desc: "Enable Waku REST HTTP server: true|false", - defaultValue: false - name: "rest" }: bool - - restAddress* {. - desc: "Listening address of the REST HTTP server.", - defaultValue: ValidIpAddress.init("127.0.0.1") - name: "rest-address" }: ValidIpAddress - - restPort* {. - desc: "Listening port of the REST HTTP server.", - defaultValue: 8645 - name: "rest-port" }: uint16 - - restRelayCacheCapacity* {. - desc: "Capacity of the Relay REST API message cache.", - defaultValue: 30 - name: "rest-relay-cache-capacity" }: uint32 - - restAdmin* {. - desc: "Enable access to REST HTTP Admin API: true|false", - defaultValue: false - name: "rest-admin" }: bool - - restPrivate* {. - desc: "Enable access to REST HTTP Private API: true|false", - defaultValue: false - name: "rest-private" }: bool - - ## Metrics config - - metricsServer* {. - desc: "Enable the metrics server: true|false" - defaultValue: false - name: "metrics-server" }: bool - - metricsServerAddress* {. - desc: "Listening address of the metrics server." - defaultValue: ValidIpAddress.init("127.0.0.1") - name: "metrics-server-address" }: ValidIpAddress - - metricsServerPort* {. - desc: "Listening HTTP port of the metrics server." - defaultValue: 8008 - name: "metrics-server-port" }: uint16 - - metricsLogging* {. - desc: "Enable metrics logging: true|false" - defaultValue: true - name: "metrics-logging" }: bool - - ## DNS discovery config - - dnsDiscovery* {. - desc: "Enable discovering nodes via DNS" - defaultValue: false - name: "dns-discovery" }: bool - - dnsDiscoveryUrl* {. - desc: "URL for DNS node list in format 'enrtree://@'", - defaultValue: "" - name: "dns-discovery-url" }: string - - dnsDiscoveryNameServers* {. - desc: "DNS name server IPs to query. Argument may be repeated." - defaultValue: @[ValidIpAddress.init("1.1.1.1"), ValidIpAddress.init("1.0.0.1")] - name: "dns-discovery-name-server" }: seq[ValidIpAddress] - - ## Discovery v5 config - - discv5Discovery* {. - desc: "Enable discovering nodes via Node Discovery v5" - defaultValue: false - name: "discv5-discovery" }: bool - - discv5UdpPort* {. - desc: "Listening UDP port for Node Discovery v5." - defaultValue: 9000 - name: "discv5-udp-port" }: Port - - discv5BootstrapNodes* {. - desc: "Text-encoded ENR for bootstrap node. Used when connecting to the network. Argument may be repeated." - name: "discv5-bootstrap-node" }: seq[string] - - discv5EnrAutoUpdate* {. - desc: "Discovery can automatically update its ENR with the IP address " & - "and UDP port as seen by other nodes it communicates with. " & - "This option allows to enable/disable this functionality" - defaultValue: false - name: "discv5-enr-auto-update" .}: bool - - discv5TableIpLimit* {. - hidden - desc: "Maximum amount of nodes with the same IP in discv5 routing tables" - defaultValue: 10 - name: "discv5-table-ip-limit" .}: uint - - discv5BucketIpLimit* {. - hidden - desc: "Maximum amount of nodes with the same IP in discv5 routing table buckets" - defaultValue: 2 - name: "discv5-bucket-ip-limit" .}: uint - - discv5BitsPerHop* {. - hidden - desc: "Kademlia's b variable, increase for less hops per lookup" - defaultValue: 1 - name: "discv5-bits-per-hop" .}: int - - ## waku peer exchange config - peerExchange* {. - desc: "Enable waku peer exchange protocol (responder side): true|false", - defaultValue: false - name: "peer-exchange" }: bool - - peerExchangeNode* {. - desc: "Peer multiaddr to send peer exchange requests to. (enables peer exchange protocol requester side)", - defaultValue: "" - name: "peer-exchange-node" }: string - - ## websocket config - websocketSupport* {. - desc: "Enable websocket: true|false", - defaultValue: false - name: "websocket-support"}: bool - - websocketPort* {. - desc: "WebSocket listening port." - defaultValue: 8000 - name: "websocket-port" }: Port - - websocketSecureSupport* {. - desc: "Enable secure websocket: true|false", - defaultValue: false - name: "websocket-secure-support"}: bool - - websocketSecureKeyPath* {. - desc: "Secure websocket key path: '/path/to/key.txt' ", - defaultValue: "" - name: "websocket-secure-key-path"}: string - - websocketSecureCertPath* {. - desc: "Secure websocket Certificate path: '/path/to/cert.txt' ", - defaultValue: "" - name: "websocket-secure-cert-path"}: string + name: "rln-relay-eth-private-key" }: string + + case cmd* {. + command + defaultValue: noCommand }: StartUpCommand + + of generateRlnKeystore: + execute* {. + desc: "Runs the registration function on-chain. By default, a dry-run will occur", + defaultValue: false, + name: "execute" .}: bool + + + of noCommand: + ## Application-level configuration + protectedTopics* {. + desc: "Topics and its public key to be used for message validation, topic:pubkey. Argument may be repeated." + defaultValue: newSeq[ProtectedTopic](0) + name: "protected-topic" .}: seq[ProtectedTopic] + + ## General node config + clusterId* {. + desc: "Cluster id that the node is running in. Node in a different cluster id is disconnected." + defaultValue: 0 + name: "cluster-id" }: uint32 + + agentString* {. + defaultValue: "nwaku", + desc: "Node agent string which is used as identifier in network" + name: "agent-string" .}: string + + nodekey* {. + desc: "P2P node private key as 64 char hex string.", + name: "nodekey" }: Option[PrivateKey] + + listenAddress* {. + defaultValue: defaultListenAddress() + desc: "Listening address for LibP2P (and Discovery v5, if enabled) traffic." + name: "listen-address"}: ValidIpAddress + + tcpPort* {. + desc: "TCP listening port." + defaultValue: 60000 + name: "tcp-port" }: Port + + portsShift* {. + desc: "Add a shift to all port numbers." + defaultValue: 0 + name: "ports-shift" }: uint16 + + nat* {. + desc: "Specify method to use for determining public address. " & + "Must be one of: any, none, upnp, pmp, extip:." + defaultValue: "any" }: string + + extMultiAddrs* {. + desc: "External multiaddresses to advertise to the network. Argument may be repeated." + name: "ext-multiaddr" }: seq[string] + + extMultiAddrsOnly* {. + desc: "Only announce external multiaddresses", + defaultValue: false, + name: "ext-multiaddr-only" }: bool + + maxConnections* {. + desc: "Maximum allowed number of libp2p connections." + defaultValue: 50 + name: "max-connections" }: uint16 + + maxRelayPeers* {. + desc: "Maximum allowed number of relay peers." + name: "max-relay-peers" }: Option[int] + + peerStoreCapacity* {. + desc: "Maximum stored peers in the peerstore." + name: "peer-store-capacity" }: Option[int] + + peerPersistence* {. + desc: "Enable peer persistence.", + defaultValue: false, + name: "peer-persistence" }: bool + + ## DNS addrs config + + dnsAddrs* {. + desc: "Enable resolution of `dnsaddr`, `dns4` or `dns6` multiaddrs" + defaultValue: true + name: "dns-addrs" }: bool + + dnsAddrsNameServers* {. + desc: "DNS name server IPs to query for DNS multiaddrs resolution. Argument may be repeated." + defaultValue: @[ValidIpAddress.init("1.1.1.1"), ValidIpAddress.init("1.0.0.1")] + name: "dns-addrs-name-server" }: seq[ValidIpAddress] + + dns4DomainName* {. + desc: "The domain name resolving to the node's public IPv4 address", + defaultValue: "" + name: "dns4-domain-name" }: string + + ## Relay config + + relay* {. + desc: "Enable relay protocol: true|false", + defaultValue: true + name: "relay" }: bool + + relayPeerExchange* {. + desc: "Enable gossipsub peer exchange in relay protocol: true|false", + defaultValue: false + name: "relay-peer-exchange" }: bool + + rlnRelay* {. + desc: "Enable spam protection through rln-relay: true|false", + defaultValue: false + name: "rln-relay" }: bool + + rlnRelayCredIndex* {. + desc: "the index of the onchain commitment to use", + name: "rln-relay-membership-index" }: Option[uint] + + rlnRelayDynamic* {. + desc: "Enable waku-rln-relay with on-chain dynamic group management: true|false", + defaultValue: false + name: "rln-relay-dynamic" }: bool + + rlnRelayIdKey* {. + desc: "Rln relay identity secret key as a Hex string", + defaultValue: "" + name: "rln-relay-id-key" }: string + + rlnRelayIdCommitmentKey* {. + desc: "Rln relay identity commitment key as a Hex string", + defaultValue: "" + name: "rln-relay-id-commitment-key" }: string + + rlnRelayTreePath* {. + desc: "Path to the RLN merkle tree sled db (https://github.com/spacejam/sled)", + defaultValue: "" + name: "rln-relay-tree-path" }: string + + rlnRelayBandwidthThreshold* {. + desc: "Message rate in bytes/sec after which verification of proofs should happen", + defaultValue: 0 # to maintain backwards compatibility + name: "rln-relay-bandwidth-threshold" }: int + + staticnodes* {. + desc: "Peer multiaddr to directly connect with. Argument may be repeated." + name: "staticnode" }: seq[string] + + keepAlive* {. + desc: "Enable keep-alive for idle connections: true|false", + defaultValue: false + name: "keep-alive" }: bool + + topics* {. + desc: "Default topic to subscribe to. Argument may be repeated. Deprecated! Please use pubsub-topic and/or content-topic instead." + defaultValue: @["/waku/2/default-waku/proto"] + name: "topic" .}: seq[string] + + pubsubTopics* {. + desc: "Default pubsub topic to subscribe to. Argument may be repeated." + name: "pubsub-topic" .}: seq[string] + + contentTopics* {. + desc: "Default content topic to subscribe to. Argument may be repeated." + name: "content-topic" .}: seq[string] + + ## Store and message store config + + store* {. + desc: "Enable/disable waku store protocol", + defaultValue: false, + name: "store" }: bool + + storenode* {. + desc: "Peer multiaddress to query for storage", + defaultValue: "", + name: "storenode" }: string + + storeMessageRetentionPolicy* {. + desc: "Message store retention policy. Time retention policy: 'time:'. Capacity retention policy: 'capacity:'. Size retention policy: 'size:'. Set to 'none' to disable.", + defaultValue: "time:" & $2.days.seconds, + name: "store-message-retention-policy" }: string + + storeMessageDbUrl* {. + desc: "The database connection URL for peristent storage.", + defaultValue: "sqlite://store.sqlite3", + name: "store-message-db-url" }: string + + storeMessageDbVacuum* {. + desc: "Enable database vacuuming at start. Only supported by SQLite database engine.", + defaultValue: false, + name: "store-message-db-vacuum" }: bool + + storeMessageDbMigration* {. + desc: "Enable database migration at start.", + defaultValue: true, + name: "store-message-db-migration" }: bool + + ## Filter config + + filter* {. + desc: "Enable filter protocol: true|false", + defaultValue: false + name: "filter" }: bool + + filternode* {. + desc: "Peer multiaddr to request content filtering of messages.", + defaultValue: "" + name: "filternode" }: string + + filterTimeout* {. + desc: "Timeout for filter node in seconds.", + defaultValue: 14400 # 4 hours + name: "filter-timeout" }: int64 + + ## Lightpush config + + lightpush* {. + desc: "Enable lightpush protocol: true|false", + defaultValue: false + name: "lightpush" }: bool + + lightpushnode* {. + desc: "Peer multiaddr to request lightpush of published messages.", + defaultValue: "" + name: "lightpushnode" }: string + + ## JSON-RPC config + + rpc* {. + desc: "Enable Waku JSON-RPC server: true|false", + defaultValue: true + name: "rpc" }: bool + + rpcAddress* {. + desc: "Listening address of the JSON-RPC server.", + defaultValue: ValidIpAddress.init("127.0.0.1") + name: "rpc-address" }: ValidIpAddress + + rpcPort* {. + desc: "Listening port of the JSON-RPC server.", + defaultValue: 8545 + name: "rpc-port" }: uint16 + + rpcAdmin* {. + desc: "Enable access to JSON-RPC Admin API: true|false", + defaultValue: false + name: "rpc-admin" }: bool + + rpcPrivate* {. + desc: "Enable access to JSON-RPC Private API: true|false", + defaultValue: false + name: "rpc-private" }: bool + + ## REST HTTP config + + rest* {. + desc: "Enable Waku REST HTTP server: true|false", + defaultValue: false + name: "rest" }: bool + + restAddress* {. + desc: "Listening address of the REST HTTP server.", + defaultValue: ValidIpAddress.init("127.0.0.1") + name: "rest-address" }: ValidIpAddress + + restPort* {. + desc: "Listening port of the REST HTTP server.", + defaultValue: 8645 + name: "rest-port" }: uint16 + + restRelayCacheCapacity* {. + desc: "Capacity of the Relay REST API message cache.", + defaultValue: 30 + name: "rest-relay-cache-capacity" }: uint32 + + restAdmin* {. + desc: "Enable access to REST HTTP Admin API: true|false", + defaultValue: false + name: "rest-admin" }: bool + + restPrivate* {. + desc: "Enable access to REST HTTP Private API: true|false", + defaultValue: false + name: "rest-private" }: bool + + ## Metrics config + + metricsServer* {. + desc: "Enable the metrics server: true|false" + defaultValue: false + name: "metrics-server" }: bool + + metricsServerAddress* {. + desc: "Listening address of the metrics server." + defaultValue: ValidIpAddress.init("127.0.0.1") + name: "metrics-server-address" }: ValidIpAddress + + metricsServerPort* {. + desc: "Listening HTTP port of the metrics server." + defaultValue: 8008 + name: "metrics-server-port" }: uint16 + + metricsLogging* {. + desc: "Enable metrics logging: true|false" + defaultValue: true + name: "metrics-logging" }: bool + + ## DNS discovery config + + dnsDiscovery* {. + desc: "Enable discovering nodes via DNS" + defaultValue: false + name: "dns-discovery" }: bool + + dnsDiscoveryUrl* {. + desc: "URL for DNS node list in format 'enrtree://@'", + defaultValue: "" + name: "dns-discovery-url" }: string + + dnsDiscoveryNameServers* {. + desc: "DNS name server IPs to query. Argument may be repeated." + defaultValue: @[ValidIpAddress.init("1.1.1.1"), ValidIpAddress.init("1.0.0.1")] + name: "dns-discovery-name-server" }: seq[ValidIpAddress] + + ## Discovery v5 config + + discv5Discovery* {. + desc: "Enable discovering nodes via Node Discovery v5" + defaultValue: false + name: "discv5-discovery" }: bool + + discv5UdpPort* {. + desc: "Listening UDP port for Node Discovery v5." + defaultValue: 9000 + name: "discv5-udp-port" }: Port + + discv5BootstrapNodes* {. + desc: "Text-encoded ENR for bootstrap node. Used when connecting to the network. Argument may be repeated." + name: "discv5-bootstrap-node" }: seq[string] + + discv5EnrAutoUpdate* {. + desc: "Discovery can automatically update its ENR with the IP address " & + "and UDP port as seen by other nodes it communicates with. " & + "This option allows to enable/disable this functionality" + defaultValue: false + name: "discv5-enr-auto-update" .}: bool + + discv5TableIpLimit* {. + hidden + desc: "Maximum amount of nodes with the same IP in discv5 routing tables" + defaultValue: 10 + name: "discv5-table-ip-limit" .}: uint + + discv5BucketIpLimit* {. + hidden + desc: "Maximum amount of nodes with the same IP in discv5 routing table buckets" + defaultValue: 2 + name: "discv5-bucket-ip-limit" .}: uint + + discv5BitsPerHop* {. + hidden + desc: "Kademlia's b variable, increase for less hops per lookup" + defaultValue: 1 + name: "discv5-bits-per-hop" .}: int + + ## waku peer exchange config + peerExchange* {. + desc: "Enable waku peer exchange protocol (responder side): true|false", + defaultValue: false + name: "peer-exchange" }: bool + + peerExchangeNode* {. + desc: "Peer multiaddr to send peer exchange requests to. (enables peer exchange protocol requester side)", + defaultValue: "" + name: "peer-exchange-node" }: string + + ## websocket config + websocketSupport* {. + desc: "Enable websocket: true|false", + defaultValue: false + name: "websocket-support"}: bool + + websocketPort* {. + desc: "WebSocket listening port." + defaultValue: 8000 + name: "websocket-port" }: Port + + websocketSecureSupport* {. + desc: "Enable secure websocket: true|false", + defaultValue: false + name: "websocket-secure-support"}: bool + + websocketSecureKeyPath* {. + desc: "Secure websocket key path: '/path/to/key.txt' ", + defaultValue: "" + name: "websocket-secure-key-path"}: string + + websocketSecureCertPath* {. + desc: "Secure websocket Certificate path: '/path/to/cert.txt' ", + defaultValue: "" + name: "websocket-secure-cert-path"}: string ## Parsing diff --git a/apps/wakunode2/wakunode2.nim b/apps/wakunode2/wakunode2.nim index cf05b5d675..b1612c763b 100644 --- a/apps/wakunode2/wakunode2.nim +++ b/apps/wakunode2/wakunode2.nim @@ -13,6 +13,7 @@ import system/ansi_c, libp2p/crypto/crypto import + ../../tools/rln_keystore_generator/rln_keystore_generator, ../../waku/common/logging, ./external_config, ./app @@ -49,96 +50,99 @@ when isMainModule: logging.setupLogLevel(conf.logLevel) logging.setupLogFormat(conf.logFormat, color) + case conf.cmd: + of generateRlnKeystore: + doRlnKeystoreGenerator(conf) + of noCommand: + var wakunode2 = App.init(rng, conf) - var wakunode2 = App.init(rng, conf) + ############## + # Node setup # + ############## - ############## - # Node setup # - ############## + debug "1/7 Setting up storage" - debug "1/7 Setting up storage" - - ## Peer persistence - let res1 = wakunode2.setupPeerPersistence() - if res1.isErr(): - error "1/7 Setting up storage failed", error=res1.error - quit(QuitFailure) + ## Peer persistence + let res1 = wakunode2.setupPeerPersistence() + if res1.isErr(): + error "1/7 Setting up storage failed", error=res1.error + quit(QuitFailure) - debug "2/7 Retrieve dynamic bootstrap nodes" + debug "2/7 Retrieve dynamic bootstrap nodes" - let res3 = wakunode2.setupDyamicBootstrapNodes() - if res3.isErr(): - error "2/7 Retrieving dynamic bootstrap nodes failed", error=res3.error - quit(QuitFailure) + let res3 = wakunode2.setupDyamicBootstrapNodes() + if res3.isErr(): + error "2/7 Retrieving dynamic bootstrap nodes failed", error=res3.error + quit(QuitFailure) - debug "3/7 Initializing node" + debug "3/7 Initializing node" - let res4 = wakunode2.setupWakuApp() - if res4.isErr(): - error "3/7 Initializing node failed", error=res4.error - quit(QuitFailure) + let res4 = wakunode2.setupWakuApp() + if res4.isErr(): + error "3/7 Initializing node failed", error=res4.error + quit(QuitFailure) - debug "4/7 Mounting protocols" + debug "4/7 Mounting protocols" - let res5 = waitFor wakunode2.setupAndMountProtocols() - if res5.isErr(): - error "4/7 Mounting protocols failed", error=res5.error - quit(QuitFailure) + let res5 = waitFor wakunode2.setupAndMountProtocols() + if res5.isErr(): + error "4/7 Mounting protocols failed", error=res5.error + quit(QuitFailure) - debug "5/7 Starting node and mounted protocols" + debug "5/7 Starting node and mounted protocols" - let res6 = wakunode2.startApp() - if res6.isErr(): - error "5/7 Starting node and protocols failed", error=res6.error - quit(QuitFailure) + let res6 = wakunode2.startApp() + if res6.isErr(): + error "5/7 Starting node and protocols failed", error=res6.error + quit(QuitFailure) - debug "6/7 Starting monitoring and external interfaces" + debug "6/7 Starting monitoring and external interfaces" - let res7 = wakunode2.setupMonitoringAndExternalInterfaces() - if res7.isErr(): - error "6/7 Starting monitoring and external interfaces failed", error=res7.error - quit(QuitFailure) + let res7 = wakunode2.setupMonitoringAndExternalInterfaces() + if res7.isErr(): + error "6/7 Starting monitoring and external interfaces failed", error=res7.error + quit(QuitFailure) - debug "7/7 Setting up shutdown hooks" - ## Setup shutdown hooks for this process. - ## Stop node gracefully on shutdown. + debug "7/7 Setting up shutdown hooks" + ## Setup shutdown hooks for this process. + ## Stop node gracefully on shutdown. - proc asyncStopper(node: App) {.async.} = - await node.stop() - quit(QuitSuccess) + proc asyncStopper(node: App) {.async.} = + await node.stop() + quit(QuitSuccess) - # Handle Ctrl-C SIGINT - proc handleCtrlC() {.noconv.} = - when defined(windows): - # workaround for https://github.com/nim-lang/Nim/issues/4057 - setupForeignThreadGc() - notice "Shutting down after receiving SIGINT" - asyncSpawn asyncStopper(wakunode2) + # Handle Ctrl-C SIGINT + proc handleCtrlC() {.noconv.} = + when defined(windows): + # workaround for https://github.com/nim-lang/Nim/issues/4057 + setupForeignThreadGc() + notice "Shutting down after receiving SIGINT" + asyncSpawn asyncStopper(wakunode2) - setControlCHook(handleCtrlC) + setControlCHook(handleCtrlC) - # Handle SIGTERM - when defined(posix): - proc handleSigterm(signal: cint) {.noconv.} = - notice "Shutting down after receiving SIGTERM" - asyncSpawn asyncStopper(wakunode2) + # Handle SIGTERM + when defined(posix): + proc handleSigterm(signal: cint) {.noconv.} = + notice "Shutting down after receiving SIGTERM" + asyncSpawn asyncStopper(wakunode2) - c_signal(ansi_c.SIGTERM, handleSigterm) + c_signal(ansi_c.SIGTERM, handleSigterm) - # Handle SIGSEGV - when defined(posix): - proc handleSigsegv(signal: cint) {.noconv.} = - # Require --debugger:native - fatal "Shutting down after receiving SIGSEGV", stacktrace=getBacktrace() + # Handle SIGSEGV + when defined(posix): + proc handleSigsegv(signal: cint) {.noconv.} = + # Require --debugger:native + fatal "Shutting down after receiving SIGSEGV", stacktrace=getBacktrace() - # Not available in -d:release mode - writeStackTrace() + # Not available in -d:release mode + writeStackTrace() - waitFor wakunode2.stop() - quit(QuitFailure) + waitFor wakunode2.stop() + quit(QuitFailure) - c_signal(ansi_c.SIGSEGV, handleSigsegv) + c_signal(ansi_c.SIGSEGV, handleSigsegv) - info "Node setup complete" + info "Node setup complete" - runForever() + runForever() diff --git a/tests/testlib/wakunode.nim b/tests/testlib/wakunode.nim index 4e3b3cf7e4..1ba6a0f819 100644 --- a/tests/testlib/wakunode.nim +++ b/tests/testlib/wakunode.nim @@ -22,6 +22,7 @@ import proc defaultTestWakuNodeConf*(): WakuNodeConf = WakuNodeConf( + cmd: noCommand, tcpPort: Port(60000), websocketPort: Port(8000), listenAddress: ValidIpAddress.init("0.0.0.0"), diff --git a/tools/rln_keystore_generator/external_config.nim b/tools/rln_keystore_generator/external_config.nim deleted file mode 100644 index 6c05f3bfe1..0000000000 --- a/tools/rln_keystore_generator/external_config.nim +++ /dev/null @@ -1,79 +0,0 @@ -when (NimMajor, NimMinor) < (1, 4): - {.push raises: [Defect].} -else: - {.push raises: [].} - -import - stew/results, - chronos, - confutils, - confutils/defs, - confutils/toml/defs as confTomlDefs, - confutils/toml/std/net as confTomlNet, - libp2p/crypto/crypto, - libp2p/crypto/secp, - libp2p/multiaddress, - secp256k1 -import - ../../waku/common/confutils/envvar/defs as confEnvvarDefs, - ../../waku/common/confutils/envvar/std/net as confEnvvarNet - -export - confTomlDefs, - confTomlNet, - confEnvvarDefs, - confEnvvarNet - -type - RlnKeystoreGeneratorConf* = object - configFile* {. - desc: "Loads configuration from a TOML file (cmd-line parameters take precedence)", - name: "config-file" }: Option[InputFile] - - execute* {. - desc: "Runs the registration function on-chain. By default, a dry-run will occur", - defaultValue: false, - name: "execute" .}: bool - - ## General node config - rlnRelayCredPath* {. - desc: "The path for peristing rln-relay credential", - defaultValue: "", - name: "rln-relay-cred-path" }: string - - rlnRelayEthClientAddress* {. - desc: "WebSocket address of an Ethereum testnet client e.g., ws://localhost:8540/", - defaultValue: "ws://localhost:8540/", - name: "rln-relay-eth-client-address" }: string - - rlnRelayEthContractAddress* {. - desc: "Address of membership contract on an Ethereum testnet", - defaultValue: "", - name: "rln-relay-eth-contract-address" }: string - - rlnRelayCredPassword* {. - desc: "Password for encrypting RLN credentials", - defaultValue: "", - name: "rln-relay-cred-password" }: string - - rlnRelayEthPrivateKey* {. - desc: "Private key for broadcasting transactions", - defaultValue: "", - name: "rln-relay-eth-private-key" }: string - -proc loadConfig*(T: type RlnKeystoreGeneratorConf): Result[T, string] = - try: - let conf = RlnKeystoreGeneratorConf.load() - if conf.rlnRelayCredPath == "": - return err("--rln-relay-cred-path must be set") - if conf.rlnRelayEthContractAddress == "": - return err("--rln-relay-eth-contract-address must be set") - if conf.rlnRelayCredPassword == "": - return err("--rln-relay-cred-password must be set") - if conf.rlnRelayEthPrivateKey == "": - return err("--rln-relay-eth-private-key must be set") - ok(conf) - except CatchableError: - err(getCurrentExceptionMsg()) - except Exception: - err(getCurrentExceptionMsg()) diff --git a/tools/rln_keystore_generator/nim.cfg b/tools/rln_keystore_generator/nim.cfg deleted file mode 100644 index f3bae15902..0000000000 --- a/tools/rln_keystore_generator/nim.cfg +++ /dev/null @@ -1,3 +0,0 @@ --d:chronicles_line_numbers --d:chronicles_runtime_filtering=on -#-d:"chronicles_enabled_topics=GossipSub:TRACE,WakuRelay:TRACE" diff --git a/tools/rln_keystore_generator/rln_keystore_generator.nim b/tools/rln_keystore_generator/rln_keystore_generator.nim index d6aa901320..ff413d8b29 100644 --- a/tools/rln_keystore_generator/rln_keystore_generator.nim +++ b/tools/rln_keystore_generator/rln_keystore_generator.nim @@ -13,21 +13,13 @@ import ../../waku/waku_rln_relay/rln, ../../waku/waku_rln_relay/conversion_utils, ../../waku/waku_rln_relay/group_manager/on_chain, - ./external_config + ../../apps/wakunode2/external_config logScope: topics = "rln_keystore_generator" -when isMainModule: - {.pop.} +proc doRlnKeystoreGenerator*(conf: WakuNodeConf) = # 1. load configuration - let confRes = RlnKeystoreGeneratorConf.loadConfig() - if confRes.isErr(): - error "failure while loading the configuration", error=confRes.error - quit(1) - - let conf = confRes.get() - trace "configuration", conf = $conf # 2. initialize rlnInstance @@ -102,5 +94,9 @@ when isMainModule: info "credentials persisted", path = conf.rlnRelayCredPath - waitFor groupManager.stop() + try: + waitFor groupManager.stop() + except CatchableError: + error "failure while stopping OnchainGroupManager", error=getCurrentExceptionMsg() + quit(0) # 0 because we already registered on-chain quit(0) From f74474b45270c9f57f36abdbd99746e9af709f0d Mon Sep 17 00:00:00 2001 From: gabrielmer <101006718+gabrielmer@users.noreply.github.com> Date: Thu, 9 Nov 2023 16:07:29 +0200 Subject: [PATCH 114/274] chore(release): update changelog for v0.21.3 release (#2208) --- CHANGELOG.md | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b90458dcac..5b5db7859e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,24 @@ +## v0.21.3 (2023-11-09) + +This patch release adds the following feature: +- Adding generateRlnKeystore subcommand for RLN membership generation + +### Features + +- rln-keystore-generator is now a subcommand ([#2189](https://github.com/waku-org/nwaku/issues/2189)) ([1e919177](https://github.com/waku-org/nwaku/commit/1e919177)) + +This is a patch release that is fully backwards-compatible with release `v0.21.0`, `v0.21.1` and `v0.21.2`. + +It supports the same [libp2p protocols](https://docs.libp2p.io/concepts/protocols/): +| Protocol | Spec status | Protocol id | +| ---: | :---: | :--- | +| [`11/WAKU2-RELAY`](https://rfc.vac.dev/spec/11/) | `stable` | `/vac/waku/relay/2.0.0` | +| [`12/WAKU2-FILTER`](https://rfc.vac.dev/spec/12/) | `draft` | `/vac/waku/filter/2.0.0-beta1`
`/vac/waku/filter-subscribe/2.0.0-beta1`
`/vac/waku/filter-push/2.0.0-beta1` | +| [`13/WAKU2-STORE`](https://rfc.vac.dev/spec/13/) | `draft` | `/vac/waku/store/2.0.0-beta4` | +| [`19/WAKU2-LIGHTPUSH`](https://rfc.vac.dev/spec/19/) | `draft` | `/vac/waku/lightpush/2.0.0-beta1` | + +The Waku v1 implementation has been removed from this repository and can be found in a separate [Waku Legacy](https://github.com/waku-org/waku-legacy) repository. + ## v0.21.2 (2023-11-07) This patch release addresses the following issue: From a0ef3c2fbf7fa7fa63b5c07821d0db63444b1510 Mon Sep 17 00:00:00 2001 From: Hanno Cornelius <68783915+jm-clius@users.noreply.github.com> Date: Fri, 10 Nov 2023 13:43:59 +0000 Subject: [PATCH 115/274] docs: rewrite for clarity, update screenshots (#2206) * docs: rewrite for clarity, update screenshots * docs: be less cavalier about private key, other improvements * docs: missed some spots * docs: move private key warning to beginning --- ...f-running-on-chain-spam-protected-chat2.md | 133 +++++++++--------- 1 file changed, 65 insertions(+), 68 deletions(-) diff --git a/docs/tutorial/pre-requisites-of-running-on-chain-spam-protected-chat2.md b/docs/tutorial/pre-requisites-of-running-on-chain-spam-protected-chat2.md index fd712e7f96..b302d27cca 100644 --- a/docs/tutorial/pre-requisites-of-running-on-chain-spam-protected-chat2.md +++ b/docs/tutorial/pre-requisites-of-running-on-chain-spam-protected-chat2.md @@ -1,14 +1,18 @@ -In this tutotial you will learn how to: -1. Create Sepolia Ethereum Account and obtain its private key. -2. Obtain Sepolia Ethers from faucet. -3. Set up a hosted node on Sepolia Testnet using Infura. +In this tutorial you will learn how to: +1. Create a Sepolia Ethereum account and obtain its private key. +2. Obtain Sepolia ETH from faucet. +3. Access a node on the Sepolia testnet using Infura. -If you already have an Ethereum account with sufficient ethers on the Sepolia testnet then you can skip the first two sections. -## Creating Sepolia Ethereum Account and obtaining its private key +## 1. Create a Sepolia Ethereum account and obtain its private key +> _**WARNING:**_ The private key is used elsewhere by Waku RLN registration tools to assist with membership registration in the Sepolia test network. +> We strongly recommend that you create an account only for this purpose. +> NEVER expose a private key that controls any valuable assets or funds. 1. Download and install Metamask. [https://metamask.io/download/](https://metamask.io/download/) -2. Create a new wallet and save your secret recovery key. + If you already have Metamask installed, go to step 3. + If you encounter any issues during the Metamask setup process, please refer to the [official Metamask support page](https://support.metamask.io/hc/en-us). +2. Create a new wallet and save your secret recovery phrase. ![](https://i.imgur.com/HEOI0kp.jpg) @@ -16,96 +20,89 @@ If you already have an Ethereum account with sufficient ethers on the Sepolia te ![](https://i.imgur.com/zFduIV8.jpg) -4. You should already see an account created. As you can see on top right, it should be pointing to Ethereum mainnet. +4. By default, Metamask connects to the Ethereum Mainnet (dropdown menu in the top right corner). ![](https://i.imgur.com/gk3TWUd.jpg) -5. You can use the same account for different networks. For Waku we need to connect to the Sepolia test network. -6. You can switch to a test network by clicking on the drop down menu. Select Sepolia test network for Waku: + To publish messages to the Waku Network, you need to connect to the Sepolia test network. +5. Switch to the Sepolia test network by selecting it from the dropdown menu. Ensure "Show test networks" is enabled. - ![](https://i.imgur.com/kbuup6y.jpg) + ![image](https://github.com/waku-org/nwaku/assets/68783915/670778eb-8bf0-42a6-8dd7-1dedfabeeb37) -7. Click on Show/hide test networks. -8. Enable “Show Test Networks". + The same account can be used with different networks. Note that the ETH balance is different for each network (each has its own native token). - ![](https://i.imgur.com/02x7iSX.jpg) - - ![](https://i.imgur.com/UFsoRHR.jpg) + ![image](https://github.com/waku-org/nwaku/assets/68783915/0a5aa3a7-359c-4f4b-bd12-bad7c4844b34) -9. Close the settings and now you should see the test networks in the drop down on the top right. +6. To view the private key for this account, click on the three dots next to the account name and select "Account Details". - ![](https://i.imgur.com/leSYt4z.jpg) + ![image](https://github.com/waku-org/nwaku/assets/68783915/83fffa23-4a3b-46f9-a492-9748bfd47cff) -10. Switch to Sepolia Test Network. -11. You can see that the same account can be used with different networks. But note that the ETH balance on different networks are different and are different tokens. + Select "Show Private Key". - ![](https://i.imgur.com/Y7YkuEe.jpg) + ![image](https://github.com/waku-org/nwaku/assets/68783915/3a513389-2df1-4e32-86da-a1794126cdac) -12. Now to export your private key for the account, if needed, please click on the three dots beside the account. + Enter your Metamask password and click "Confirm" - ![](https://i.imgur.com/9BlBmhT.jpg) + ![image](https://github.com/waku-org/nwaku/assets/68783915/ffbac631-b933-4292-a2c6-dc445bff153c) -13. Click on Account Details. -14. Click on Export Private Key. - - ![](https://i.imgur.com/7g6SyuX.jpg) + You will be shown the private key. -15. Enter your Metamask password when prompted. - - ![](https://i.imgur.com/VOojHY5.jpg) - -16. You will be shown the private key. Copy it as needed. - -Obtain Sepolia Ethers from faucet ---- - -1. Ethers on Sepolia test networks can be obtained from different faucets. -2. One of the faucets is as follows: - 1. [https://sepoliafaucet.com//](https://sepoliafaucet.com/) - (NOTE: We have not tested the security of these faucets so please feel free to do your own research or obtain Sepolia ethers from other faucets if needed.) -3. Please follow the instructions on the webpages of these faucets. -4. A lot of faucets limit the Sepolia ETH to 0.05 ETH/day. -5. To obtain more eth, you can do some POW mining. One of those POW faucet is: - [https://sepolia-faucet.pk910.de/](https://sepolia-faucet.pk910.de/) -6. Enter your Eth account address, accept Captcha and start mining. - - ![](https://i.imgur.com/IvHNsei.jpg) +## 2. Obtain Sepolia ETH from faucet + +Sepolia ETH can be obtained from different faucets. +Three popular examples include: + + 1. [sepoliafaucet.com](https://sepoliafaucet.com/) (requires an Alchemy account) + 2. [Infura Sepolia faucet](https://www.infura.io/faucet/sepolia) (requires an Infura account) + 3. [Sepolia POW faucet](https://sepolia-faucet.pk910.de/) + +> _**NOTE:**_ This list is provided for convenience. We do not necessarily recommend or guarantee the security of any of these options. -7. You can see the estimated Sepolia ETH mined per hour. Each session is restricted to a few hours. +Many faucets limit the amount of Sepolia ETH you can obtain per day. +We include instructions for [sepolia-faucet.pk910.de](https://sepolia-faucet.pk910.de/) as an example: + +1. Enter your Sepolia Ethereum account public address, solve the Captcha and start mining. - ![](https://i.imgur.com/qTWwyNr.jpg) + ![image](https://github.com/waku-org/nwaku/assets/68783915/8bf2eece-956c-4449-ac4c-a7b9f4641c99) -8. When you exceed the hour limit of the session, then the mining will be stopped. -9. Alternatively, stop the mining when mined enough sepolia ether. -10. Do not forget to claim your sepolia ether. +2. Keep the browser tab open for a while. You can see the estimated Sepolia ETH mined per hour. - ![](https://i.imgur.com/cGCSexB.jpg) + ![image](https://github.com/waku-org/nwaku/assets/68783915/fac1c6cb-b72f-47b1-a358-4ce41224a688) + + Each session is limited to a few hours. +3. When you've mined enough Sepolia ETH (minimum of 0.05 Sepolia ETH), click on "Stop Mining" and claim your reward. + ![image](https://github.com/waku-org/nwaku/assets/68783915/9ace2824-9030-4507-9b5f-50354bb99127) -Setting up a hosted node on Sepolia Testnet using Infura ---- +## 3. Access a node on the Sepolia testnet using Infura -(Note: Infura provides a simple straight-forward way of setting up endpoints for interaction with the Ethereum chain and the Waku RLN smart contract without having to run a dedicated Ethereum node. Setting up infura is not mandatory. Operators concerned with the centralized aspect introduced by infura can setup their own node.) +> _**NOTE:**_ Infura provides a simple way of setting up endpoints for interaction with the Ethereum chain and the Waku RLN smart contract without having to run a dedicated Ethereum node. +> Setting up Infura is not mandatory. Operators concerned with the centralized aspect introduced by Infura should use their own node. -1. Sign up to infura if you do not have an account already. [https://infura.io/register](https://infura.io/register) +1. Sign up for Infura if you do not have an account already. [https://infura.io/register](https://infura.io/register) ![](https://i.imgur.com/SyLaG6s.jpg) -2. After registering and verifying the account, create a new project using Ethereum and give it a name. - - ![](https://i.imgur.com/fJbNqwd.jpg) + Follow the instructions to register and verify the account. + +2. Click on "Create a new API key". + + ![image](https://github.com/waku-org/nwaku/assets/68783915/3cf1d537-9f73-4a6a-b1ef-bbac148bac47) + +4. Select "Web 3 API", give your API key a descriptive name and click on "Create". + + ![image](https://github.com/waku-org/nwaku/assets/68783915/f8c6c6b0-e55e-4681-8524-08303db11b9f) -3. After creating the project, you will be presented with a dashboard like follows. Note that your Project Id and secret will be different. + You will be presented with a dashboard for the newly created key. - ![](imgs/infura-dashboard-mainnet.png) + ![image](https://github.com/waku-org/nwaku/assets/68783915/54c7c2da-f512-4c48-b5bb-ff86cae021c6) -4. Select Sepolia network in Endpoints. +4. Select "Sepolia" in the dropdown menu for Ethereum. - ![](https://i.imgur.com/RgmH7C1.png) + ![image](https://github.com/waku-org/nwaku/assets/68783915/945bf11e-15f6-48a9-9378-f7d39f73b02c) -5. You can find the endpoints for the hosted node using https and wss. The wss endpoint is the relevant one for connecting the waku node to the RLN contract on Sepolia network. Like follows: + Both Https and WebSockets endpoints are available. Waku requires the WebSockets endpoint. - ![](https://i.imgur.com/xqbOcOH.png) + ![image](https://github.com/waku-org/nwaku/assets/68783915/adb2bac0-8f86-47d0-92cc-33d23f02aeb3) -6. You can change security settings or view usage options as required in the dashboard. -7. Congratulations, you are now ready to use the Infura node. +5. Copy this address (starting with `wss://sepolia.infura`) as needed when setting up your Waku node. From 2cb0989a28e3b4e4e4f495f8cf05f88173fe6d81 Mon Sep 17 00:00:00 2001 From: Vaclav Pavlin Date: Fri, 10 Nov 2023 15:25:07 +0100 Subject: [PATCH 116/274] fix(rest): properly check if rln is used (#2205) * fix(rest): properly check if rln is used * fix(apis): fix remaining usage of defined(rln) --- waku/waku_api/jsonrpc/relay/handlers.nim | 4 ++-- waku/waku_api/rest/relay/handlers.nim | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/waku/waku_api/jsonrpc/relay/handlers.nim b/waku/waku_api/jsonrpc/relay/handlers.nim index 6801a69de7..3ff62a6036 100644 --- a/waku/waku_api/jsonrpc/relay/handlers.nim +++ b/waku/waku_api/jsonrpc/relay/handlers.nim @@ -118,7 +118,7 @@ proc installRelayApiHandlers*(node: WakuNode, server: RpcServer, cache: MessageC raise newException(ValueError, "Failed to publish: unknown RLN proof validation result") # if we reach here its either a non-RLN message or a RLN message with a valid proof - debug "Publishing message", pubSubTopic=pubsubTopic, rln=defined(rln) + debug "Publishing message", pubSubTopic=pubsubTopic, rln=not node.wakuRlnRelay.isNil() let publishFut = node.publish(some(pubsubTopic), message) if not await publishFut.withTimeout(futTimeout): raise newException(ValueError, "Failed to publish: timed out") @@ -217,7 +217,7 @@ proc installRelayApiHandlers*(node: WakuNode, server: RpcServer, cache: MessageC raise newException(ValueError, "Failed to publish: unknown RLN proof validation result") # if we reach here its either a non-RLN message or a RLN message with a valid proof - debug "Publishing message", contentTopic=message.contentTopic, rln=defined(rln) + debug "Publishing message", contentTopic=message.contentTopic, rln=not node.wakuRlnRelay.isNil() let publishFut = node.publish(none(PubsubTopic), message) if not await publishFut.withTimeout(futTimeout): raise newException(ValueError, "Failed to publish: timed out") diff --git a/waku/waku_api/rest/relay/handlers.nim b/waku/waku_api/rest/relay/handlers.nim index d0f4e72e9b..0033aa8349 100644 --- a/waku/waku_api/rest/relay/handlers.nim +++ b/waku/waku_api/rest/relay/handlers.nim @@ -174,7 +174,7 @@ proc installRelayApiHandlers*(router: var RestRouter, node: WakuNode, cache: Mes return RestApiResponse.internalServerError("Failed to publish: unknown RLN proof validation result") # if we reach here its either a non-RLN message or a RLN message with a valid proof - debug "Publishing message", pubSubTopic=pubSubTopic, rln=defined(rln) + debug "Publishing message", pubSubTopic=pubSubTopic, rln=not node.wakuRlnRelay.isNil() if not (waitFor node.publish(some(pubSubTopic), message).withTimeout(futTimeout)): error "Failed to publish message to topic", pubSubTopic=pubSubTopic return RestApiResponse.internalServerError("Failed to publish: timedout") @@ -304,7 +304,7 @@ proc installRelayApiHandlers*(router: var RestRouter, node: WakuNode, cache: Mes return RestApiResponse.internalServerError("Failed to publish: unknown RLN proof validation result") # if we reach here its either a non-RLN message or a RLN message with a valid proof - debug "Publishing message", contentTopic=message.contentTopic, rln=defined(rln) + debug "Publishing message", contentTopic=message.contentTopic, rln=not node.wakuRlnRelay.isNil() if not (waitFor node.publish(none(PubSubTopic), message).withTimeout(futTimeout)): error "Failed to publish message to topic", contentTopic=message.contentTopic return RestApiResponse.internalServerError("Failed to publish: timedout") From 6d81e3841afea2ae20969e26ecf9a4b64bbb4d1d Mon Sep 17 00:00:00 2001 From: NagyZoltanPeter <113987313+NagyZoltanPeter@users.noreply.github.com> Date: Tue, 14 Nov 2023 16:59:53 +0100 Subject: [PATCH 117/274] chore: Allow text/plain content type descriptor for json formatted content body (#2209) * Allow text/plain content type descriptor for json formatted content body. Refactored duplicated encode/decode functions for rest api * Fix relay endpoint decodings of content bodies to accept text/plain * Added support for content body decoder for checking media type if additional parameters are present * Fix wrong usage of ContentTypeData - appeared only for tests --- waku/waku_api/rest/admin/client.nim | 31 +------ waku/waku_api/rest/admin/handlers.nim | 18 +---- waku/waku_api/rest/debug/client.nim | 24 +----- waku/waku_api/rest/filter/client.nim | 52 ++---------- waku/waku_api/rest/filter/handlers.nim | 28 ++----- waku/waku_api/rest/filter/legacy_client.nim | 42 ++-------- waku/waku_api/rest/filter/legacy_handlers.nim | 18 +---- waku/waku_api/rest/health/client.nim | 15 +--- waku/waku_api/rest/lightpush/client.nim | 19 +---- waku/waku_api/rest/lightpush/handlers.nim | 20 +---- waku/waku_api/rest/relay/client.nim | 35 +------- waku/waku_api/rest/relay/handlers.nim | 81 ++++--------------- waku/waku_api/rest/rest_serdes.nim | 79 ++++++++++++++++++ waku/waku_api/rest/serdes.nim | 5 +- 14 files changed, 131 insertions(+), 336 deletions(-) create mode 100644 waku/waku_api/rest/rest_serdes.nim diff --git a/waku/waku_api/rest/admin/client.nim b/waku/waku_api/rest/admin/client.nim index 9980cadae8..7c0ee8a663 100644 --- a/waku/waku_api/rest/admin/client.nim +++ b/waku/waku_api/rest/admin/client.nim @@ -13,6 +13,7 @@ import import ../serdes, ../responses, + ../rest_serdes, ./types export types @@ -21,37 +22,9 @@ export types logScope: topics = "waku node rest admin api" -proc decodeBytes*(t: typedesc[seq[WakuPeer]], data: openArray[byte], - contentType: Opt[ContentTypeData]): RestResult[seq[WakuPeer]] = - if MediaType.init($contentType) != MIMETYPE_JSON: - error "Unsupported response contentType value", contentType = contentType - return err("Unsupported response contentType") - - let decoded = decodeFromJsonBytes(seq[WakuPeer], data).valueOr: - return err("Invalid response from server, could not decode.") - - return ok(decoded) - -proc decodeBytes*(t: typedesc[string], value: openArray[byte], - contentType: Opt[ContentTypeData]): RestResult[string] = - if MediaType.init($contentType) != MIMETYPE_TEXT: - error "Unsupported contentType value", contentType = contentType - return err("Unsupported contentType") - - var res: string - if len(value) > 0: - res = newString(len(value)) - copyMem(addr res[0], unsafeAddr value[0], len(value)) - return ok(res) - proc encodeBytes*(value: seq[string], contentType: string): RestResult[seq[byte]] = - if MediaType.init(contentType) != MIMETYPE_JSON: - error "Unsupported contentType value", contentType = contentType - return err("Unsupported contentType") - - let encoded = ?encodeIntoJsonBytes(value) - return ok(encoded) + return encodeBytesOf(value, contentType) proc getPeers*(): RestResponse[seq[WakuPeer]] diff --git a/waku/waku_api/rest/admin/handlers.nim b/waku/waku_api/rest/admin/handlers.nim index ec295fe3ae..4e47b47baf 100644 --- a/waku/waku_api/rest/admin/handlers.nim +++ b/waku/waku_api/rest/admin/handlers.nim @@ -21,6 +21,7 @@ import ../../../node/peer_manager, ../responses, ../serdes, + ../rest_serdes, ./types export types @@ -32,23 +33,6 @@ const ROUTE_ADMIN_V1_PEERS* = "/admin/v1/peers" type PeerProtocolTuple = tuple[multiaddr: string, protocol: string, connected: bool] -func decodeRequestBody[T](contentBody: Option[ContentBody]) : Result[T, RestApiResponse] = - if contentBody.isNone(): - return err(RestApiResponse.badRequest("Missing content body")) - - let reqBodyContentType = MediaType.init($contentBody.get().contentType) - if reqBodyContentType != MIMETYPE_JSON: - return err(RestApiResponse.badRequest("Wrong Content-Type, expected application/json")) - - let reqBodyData = contentBody.get().data - - let requestResult = decodeFromJsonBytes(T, reqBodyData) - if requestResult.isErr(): - return err(RestApiResponse.badRequest("Invalid content body, could not decode. " & - $requestResult.error)) - - return ok(requestResult.get()) - proc tuplesToWakuPeers(peers: var WakuPeers, peersTup: seq[PeerProtocolTuple]) = for peer in peersTup: peers.add(peer.multiaddr, peer.protocol, peer.connected) diff --git a/waku/waku_api/rest/debug/client.nim b/waku/waku_api/rest/debug/client.nim index 03a31341bc..f086fd351b 100644 --- a/waku/waku_api/rest/debug/client.nim +++ b/waku/waku_api/rest/debug/client.nim @@ -11,6 +11,7 @@ import import ../serdes, ../responses, + ../rest_serdes, ./types export types @@ -19,31 +20,8 @@ export types logScope: topics = "waku node rest debug_api" - -proc decodeBytes*(t: typedesc[DebugWakuInfo], data: openArray[byte], - contentType: Opt[ContentTypeData]): RestResult[DebugWakuInfo] = - if MediaType.init($contentType) != MIMETYPE_JSON: - error "Unsupported respose contentType value", contentType = contentType - return err("Unsupported response contentType") - - let decoded = ?decodeFromJsonBytes(DebugWakuInfo, data) - return ok(decoded) - # TODO: Check how we can use a constant to set the method endpoint (improve "rest" pragma under nim-presto) proc debugInfoV1*(): RestResponse[DebugWakuInfo] {.rest, endpoint: "/debug/v1/info", meth: HttpMethod.MethodGet.} - -proc decodeBytes*(t: typedesc[string], value: openArray[byte], - contentType: Opt[ContentTypeData]): RestResult[string] = - if MediaType.init($contentType) != MIMETYPE_TEXT: - error "Unsupported contentType value", contentType = contentType - return err("Unsupported contentType") - - var res: string - if len(value) > 0: - res = newString(len(value)) - copyMem(addr res[0], unsafeAddr value[0], len(value)) - return ok(res) - # TODO: Check how we can use a constant to set the method endpoint (improve "rest" pragma under nim-presto) proc debugVersionV1*(): RestResponse[string] {.rest, endpoint: "/debug/v1/version", meth: HttpMethod.MethodGet.} diff --git a/waku/waku_api/rest/filter/client.nim b/waku/waku_api/rest/filter/client.nim index f4d8fd2622..e16a39ada2 100644 --- a/waku/waku_api/rest/filter/client.nim +++ b/waku/waku_api/rest/filter/client.nim @@ -16,6 +16,7 @@ import ../../../waku_core, ../serdes, ../responses, + ../rest_serdes, ./types export types @@ -25,52 +26,19 @@ logScope: proc encodeBytes*(value: FilterSubscribeRequest, contentType: string): RestResult[seq[byte]] = - if MediaType.init(contentType) != MIMETYPE_JSON: - error "Unsupported contentType value", contentType = contentType - return err("Unsupported contentType") - - let encoded = ?encodeIntoJsonBytes(value) - return ok(encoded) + return encodeBytesOf(value, contentType) proc encodeBytes*(value: FilterSubscriberPing, contentType: string): RestResult[seq[byte]] = - if MediaType.init(contentType) != MIMETYPE_JSON: - error "Unsupported contentType value", contentType = contentType - return err("Unsupported contentType") - - let encoded = ?encodeIntoJsonBytes(value) - return ok(encoded) + return encodeBytesOf(value, contentType) proc encodeBytes*(value: FilterUnsubscribeRequest, contentType: string): RestResult[seq[byte]] = - if MediaType.init(contentType) != MIMETYPE_JSON: - error "Unsupported contentType value", contentType = contentType - return err("Unsupported contentType") - - let encoded = ?encodeIntoJsonBytes(value) - return ok(encoded) + return encodeBytesOf(value, contentType) proc encodeBytes*(value: FilterUnsubscribeAllRequest, contentType: string): RestResult[seq[byte]] = - if MediaType.init(contentType) != MIMETYPE_JSON: - error "Unsupported contentType value", contentType = contentType - return err("Unsupported contentType") - - let encoded = ?encodeIntoJsonBytes(value) - return ok(encoded) - -proc decodeBytes*(t: typedesc[FilterSubscriptionResponse], - value: openarray[byte], - contentType: Opt[ContentTypeData]): - - RestResult[FilterSubscriptionResponse] = - - if MediaType.init($contentType) != MIMETYPE_JSON: - error "Unsupported contentType value", contentType = contentType - return err("Unsupported contentType") - - let decoded = ?decodeFromJsonBytes(FilterSubscriptionResponse, value) - return ok(decoded) + return encodeBytesOf(value, contentType) proc filterSubscriberPing*(requestId: string): RestResponse[FilterSubscriptionResponse] @@ -92,16 +60,6 @@ proc filterDeleteAllSubscriptions*(body: FilterUnsubscribeAllRequest): RestResponse[FilterSubscriptionResponse] {.rest, endpoint: "/filter/v2/subscriptions/all", meth: HttpMethod.MethodDelete.} -proc decodeBytes*(t: typedesc[FilterGetMessagesResponse], - data: openArray[byte], - contentType: Opt[ContentTypeData]): RestResult[FilterGetMessagesResponse] = - if MediaType.init($contentType) != MIMETYPE_JSON: - error "Unsupported response contentType value", contentType = contentType - return err("Unsupported response contentType") - - let decoded = ?decodeFromJsonBytes(FilterGetMessagesResponse, data) - return ok(decoded) - proc filterGetMessagesV1*(contentTopic: string): RestResponse[FilterGetMessagesResponse] {.rest, endpoint: "/filter/v2/messages/{contentTopic}", meth: HttpMethod.MethodGet.} diff --git a/waku/waku_api/rest/filter/handlers.nim b/waku/waku_api/rest/filter/handlers.nim index a3dda79c14..3b72d1b2d5 100644 --- a/waku/waku_api/rest/filter/handlers.nim +++ b/waku/waku_api/rest/filter/handlers.nim @@ -24,6 +24,7 @@ import ../../handlers, ../serdes, ../responses, + ../rest_serdes, ./types export types @@ -44,23 +45,6 @@ const filterMessageCacheDefaultCapacity* = 30 type MessageCache* = message_cache.MessageCache[ContentTopic] -func decodeRequestBody[T](contentBody: Option[ContentBody]) : Result[T, RestApiResponse] = - if contentBody.isNone(): - return err(RestApiResponse.badRequest("Missing content body")) - - let reqBodyContentType = MediaType.init($contentBody.get().contentType) - if reqBodyContentType != MIMETYPE_JSON: - return err(RestApiResponse.badRequest("Wrong Content-Type, expected application/json")) - - let reqBodyData = contentBody.get().data - - let requestResult = decodeFromJsonBytes(T, reqBodyData) - if requestResult.isErr(): - return err(RestApiResponse.badRequest("Invalid content body, could not decode. " & - $requestResult.error)) - - return ok(requestResult.get()) - proc getErrorCause(err: filter_protocol_type.FilterSubscribeError): string = ## Retrieve proper error cause of FilterSubscribeError - due stringify make some parts of text double @@ -169,7 +153,7 @@ proc filterPostPutSubscriptionRequestHandler( let peer = node.peerManager.selectPeer(WakuFilterSubscribeCodec).valueOr: let handler = discHandler.valueOr: - return makeRestResponse(req.requestId, NoPeerNoDiscoError) + return makeRestResponse(req.requestId, NoPeerNoDiscoError) let peerOp = (await handler()).valueOr: return RestApiResponse.internalServerError($error) @@ -233,7 +217,7 @@ proc installFilterDeleteSubscriptionsHandler( let peer = node.peerManager.selectPeer(WakuFilterSubscribeCodec).valueOr: let handler = discHandler.valueOr: - return makeRestResponse(req.requestId, NoPeerNoDiscoError) + return makeRestResponse(req.requestId, NoPeerNoDiscoError) let peerOp = (await handler()).valueOr: return RestApiResponse.internalServerError($error) @@ -276,7 +260,7 @@ proc installFilterDeleteAllSubscriptionsHandler( let peer = node.peerManager.selectPeer(WakuFilterSubscribeCodec).valueOr: let handler = discHandler.valueOr: - return makeRestResponse(req.requestId, NoPeerNoDiscoError) + return makeRestResponse(req.requestId, NoPeerNoDiscoError) let peerOp = (await handler()).valueOr: return RestApiResponse.internalServerError($error) @@ -285,7 +269,7 @@ proc installFilterDeleteAllSubscriptionsHandler( return makeRestResponse(req.requestId, NoPeerNoneFoundError) let unsubFut = node.filterUnsubscribeAll(peer) - + if not await unsubFut.withTimeout(futTimeoutForSubscriptionProcessing): error "Failed to unsubscribe from contentFilters due to timeout!" return makeRestResponse(req.requestId, @@ -310,7 +294,7 @@ proc installFilterPingSubscriberHandler( let peer = node.peerManager.selectPeer(WakuFilterSubscribeCodec).valueOr: let handler = discHandler.valueOr: - return makeRestResponse(requestId.get(), NoPeerNoDiscoError) + return makeRestResponse(requestId.get(), NoPeerNoDiscoError) let peerOp = (await handler()).valueOr: return RestApiResponse.internalServerError($error) diff --git a/waku/waku_api/rest/filter/legacy_client.nim b/waku/waku_api/rest/filter/legacy_client.nim index 9434dd6e03..b8d7168e44 100644 --- a/waku/waku_api/rest/filter/legacy_client.nim +++ b/waku/waku_api/rest/filter/legacy_client.nim @@ -14,6 +14,7 @@ import ../../../waku_core, ../serdes, ../responses, + ../rest_serdes, ./types export types @@ -23,46 +24,19 @@ logScope: proc encodeBytes*(value: FilterLegacySubscribeRequest, contentType: string): RestResult[seq[byte]] = - if MediaType.init(contentType) != MIMETYPE_JSON: - error "Unsupported contentType value", contentType = contentType - return err("Unsupported contentType") - - let encoded = ?encodeIntoJsonBytes(value) - return ok(encoded) - -proc decodeBytes*(t: typedesc[string], value: openarray[byte], - contentType: Opt[ContentTypeData]): RestResult[string] = - if MediaType.init($contentType) != MIMETYPE_TEXT: - error "Unsupported contentType value", contentType = contentType - return err("Unsupported contentType") - - var res: string - if len(value) > 0: - res = newString(len(value)) - copyMem(addr res[0], unsafeAddr value[0], len(value)) - return ok(res) + return encodeBytesOf(value, contentType) # TODO: Check how we can use a constant to set the method endpoint (improve "rest" pragma under nim-presto) -proc filterPostSubscriptionsV1*(body: FilterLegacySubscribeRequest): - RestResponse[string] +proc filterPostSubscriptionsV1*(body: FilterLegacySubscribeRequest): + RestResponse[string] {.rest, endpoint: "/filter/v1/subscriptions", meth: HttpMethod.MethodPost.} # TODO: Check how we can use a constant to set the method endpoint (improve "rest" pragma under nim-presto) -proc filterDeleteSubscriptionsV1*(body: FilterLegacySubscribeRequest): - RestResponse[string] +proc filterDeleteSubscriptionsV1*(body: FilterLegacySubscribeRequest): + RestResponse[string] {.rest, endpoint: "/filter/v1/subscriptions", meth: HttpMethod.MethodDelete.} -proc decodeBytes*(t: typedesc[FilterGetMessagesResponse], - data: openArray[byte], - contentType: Opt[ContentTypeData]): RestResult[FilterGetMessagesResponse] = - if MediaType.init($contentType) != MIMETYPE_JSON: - error "Unsupported response contentType value", contentType = contentType - return err("Unsupported response contentType") - - let decoded = ?decodeFromJsonBytes(FilterGetMessagesResponse, data) - return ok(decoded) - # TODO: Check how we can use a constant to set the method endpoint (improve "rest" pragma under nim-presto) -proc filterGetMessagesV1*(contentTopic: string): - RestResponse[FilterGetMessagesResponse] +proc filterGetMessagesV1*(contentTopic: string): + RestResponse[FilterGetMessagesResponse] {.rest, endpoint: "/filter/v1/messages/{contentTopic}", meth: HttpMethod.MethodGet.} diff --git a/waku/waku_api/rest/filter/legacy_handlers.nim b/waku/waku_api/rest/filter/legacy_handlers.nim index 09de827fcb..86d51f0351 100644 --- a/waku/waku_api/rest/filter/legacy_handlers.nim +++ b/waku/waku_api/rest/filter/legacy_handlers.nim @@ -20,6 +20,7 @@ import ../../message_cache, ../serdes, ../responses, + ../rest_serdes, ./types export types @@ -38,23 +39,6 @@ const filterMessageCacheDefaultCapacity* = 30 type MessageCache* = message_cache.MessageCache[ContentTopic] -func decodeRequestBody[T](contentBody: Option[ContentBody]) : Result[T, RestApiResponse] = - if contentBody.isNone(): - return err(RestApiResponse.badRequest("Missing content body")) - - let reqBodyContentType = MediaType.init($contentBody.get().contentType) - if reqBodyContentType != MIMETYPE_JSON: - return err(RestApiResponse.badRequest("Wrong Content-Type, expected application/json")) - - let reqBodyData = contentBody.get().data - - let requestResult = decodeFromJsonBytes(T, reqBodyData) - if requestResult.isErr(): - return err(RestApiResponse.badRequest("Invalid content body, could not decode. " & - $requestResult.error)) - - return ok(requestResult.get()) - proc installFilterV1PostSubscriptionsV1Handler*(router: var RestRouter, node: WakuNode, cache: MessageCache) = diff --git a/waku/waku_api/rest/health/client.nim b/waku/waku_api/rest/health/client.nim index c1a0ccfe66..309af9803e 100644 --- a/waku/waku_api/rest/health/client.nim +++ b/waku/waku_api/rest/health/client.nim @@ -10,21 +10,10 @@ import presto/[route, client] import ../serdes, - ../responses + ../responses, + ../rest_serdes logScope: topics = "waku node rest health_api" -proc decodeBytes*(t: typedesc[string], value: openArray[byte], - contentType: Opt[ContentTypeData]): RestResult[string] = - if MediaType.init($contentType) != MIMETYPE_TEXT: - error "Unsupported contentType value", contentType = contentType - return err("Unsupported contentType") - - var res: string - if len(value) > 0: - res = newString(len(value)) - copyMem(addr res[0], unsafeAddr value[0], len(value)) - return ok(res) - proc healthCheck*(): RestResponse[string] {.rest, endpoint: "/health", meth: HttpMethod.MethodGet.} diff --git a/waku/waku_api/rest/lightpush/client.nim b/waku/waku_api/rest/lightpush/client.nim index 96caa818ee..9a49fbd04a 100644 --- a/waku/waku_api/rest/lightpush/client.nim +++ b/waku/waku_api/rest/lightpush/client.nim @@ -16,6 +16,7 @@ import ../../../waku_core, ../serdes, ../responses, + ../rest_serdes, ./types export types @@ -25,24 +26,8 @@ logScope: proc encodeBytes*(value: PushRequest, contentType: string): RestResult[seq[byte]] = - if MediaType.init(contentType) != MIMETYPE_JSON: - error "Unsupported contentType value", contentType = contentType - return err("Unsupported contentType") + return encodeBytesOf(value, contentType) - let encoded = ?encodeIntoJsonBytes(value) - return ok(encoded) - -proc decodeBytes*(t: typedesc[string], value: openarray[byte], - contentType: Opt[ContentTypeData]): RestResult[string] = - if MediaType.init($contentType) != MIMETYPE_TEXT: - error "Unsupported contentType value", contentType = contentType - return err("Unsupported contentType") - - var res: string - if len(value) > 0: - res = newString(len(value)) - copyMem(addr res[0], unsafeAddr value[0], len(value)) - return ok(res) proc sendPushRequest*(body: PushRequest): RestResponse[string] diff --git a/waku/waku_api/rest/lightpush/handlers.nim b/waku/waku_api/rest/lightpush/handlers.nim index 222267cfbc..df0ae9869c 100644 --- a/waku/waku_api/rest/lightpush/handlers.nim +++ b/waku/waku_api/rest/lightpush/handlers.nim @@ -21,6 +21,7 @@ import ../../handlers, ../serdes, ../responses, + ../rest_serdes, ./types export types @@ -40,23 +41,6 @@ const NoPeerNoneFoundError = RestApiResponse.serviceUnavailable( const ROUTE_LIGHTPUSH* = "/lightpush/v1/message" -func decodeRequestBody[T](contentBody: Option[ContentBody]) : Result[T, RestApiResponse] = - if contentBody.isNone(): - return err(RestApiResponse.badRequest("Missing content body")) - - let reqBodyContentType = MediaType.init($contentBody.get().contentType) - if reqBodyContentType != MIMETYPE_JSON: - return err(RestApiResponse.badRequest("Wrong Content-Type, expected application/json")) - - let reqBodyData = contentBody.get().data - - let requestResult = decodeFromJsonBytes(T, reqBodyData) - if requestResult.isErr(): - return err(RestApiResponse.badRequest("Invalid content body, could not decode. " & - $requestResult.error)) - - return ok(requestResult.get()) - proc installLightPushRequestHandler*( router: var RestRouter, node: WakuNode, @@ -73,7 +57,7 @@ proc installLightPushRequestHandler*( return decodedBody.error() let req: PushRequest = decodedBody.value() - + let msg = req.message.toWakuMessage().valueOr: return RestApiResponse.badRequest("Invalid message: " & $error) diff --git a/waku/waku_api/rest/relay/client.nim b/waku/waku_api/rest/relay/client.nim index 65f12e19d6..4b84210b2e 100644 --- a/waku/waku_api/rest/relay/client.nim +++ b/waku/waku_api/rest/relay/client.nim @@ -14,6 +14,7 @@ import ../../../waku_core, ../serdes, ../responses, + ../rest_serdes, ./types export types @@ -25,24 +26,7 @@ logScope: proc encodeBytes*(value: seq[PubSubTopic], contentType: string): RestResult[seq[byte]] = - if MediaType.init(contentType) != MIMETYPE_JSON: - error "Unsupported contentType value", contentType = contentType - return err("Unsupported contentType") - - let encoded = ?encodeIntoJsonBytes(value) - return ok(encoded) - -proc decodeBytes*(t: typedesc[string], value: openarray[byte], - contentType: Opt[ContentTypeData]): RestResult[string] = - if MediaType.init($contentType) != MIMETYPE_TEXT: - error "Unsupported contentType value", contentType = contentType - return err("Unsupported contentType") - - var res: string - if len(value) > 0: - res = newString(len(value)) - copyMem(addr res[0], unsafeAddr value[0], len(value)) - return ok(res) + return encodeBytesOf(value, contentType) # TODO: Check how we can use a constant to set the method endpoint (improve "rest" pragma under nim-presto) proc relayPostSubscriptionsV1*(body: seq[PubsubTopic]): RestResponse[string] {.rest, endpoint: "/relay/v1/subscriptions", meth: HttpMethod.MethodPost.} @@ -52,22 +36,9 @@ proc relayPostAutoSubscriptionsV1*(body: seq[ContentTopic]): RestResponse[string proc relayDeleteSubscriptionsV1*(body: seq[PubsubTopic]): RestResponse[string] {.rest, endpoint: "/relay/v1/subscriptions", meth: HttpMethod.MethodDelete.} proc relayDeleteAutoSubscriptionsV1*(body: seq[ContentTopic]): RestResponse[string] {.rest, endpoint: "/relay/v1/auto/subscriptions", meth: HttpMethod.MethodDelete.} -proc decodeBytes*(t: typedesc[RelayGetMessagesResponse], data: openArray[byte], contentType: Opt[ContentTypeData]): RestResult[RelayGetMessagesResponse] = - if MediaType.init($contentType) != MIMETYPE_JSON: - error "Unsupported respose contentType value", contentType = contentType - return err("Unsupported response contentType") - - let decoded = ?decodeFromJsonBytes(RelayGetMessagesResponse, data) - return ok(decoded) - proc encodeBytes*(value: RelayPostMessagesRequest, contentType: string): RestResult[seq[byte]] = - if MediaType.init(contentType) != MIMETYPE_JSON: - error "Unsupported contentType value", contentType = contentType - return err("Unsupported contentType") - - let encoded = ?encodeIntoJsonBytes(value) - return ok(encoded) + return encodeBytesOf(value, contentType) # TODO: Check how we can use a constant to set the method endpoint (improve "rest" pragma under nim-presto) proc relayGetMessagesV1*(pubsubTopic: string): RestResponse[RelayGetMessagesResponse] {.rest, endpoint: "/relay/v1/messages/{pubsubTopic}", meth: HttpMethod.MethodGet.} diff --git a/waku/waku_api/rest/relay/handlers.nim b/waku/waku_api/rest/relay/handlers.nim index 0033aa8349..7a755cceb4 100644 --- a/waku/waku_api/rest/relay/handlers.nim +++ b/waku/waku_api/rest/relay/handlers.nim @@ -20,6 +20,7 @@ import ../../handlers, ../serdes, ../responses, + ../rest_serdes, ./types from std/times import getTime @@ -55,16 +56,8 @@ proc installRelayApiHandlers*(router: var RestRouter, node: WakuNode, cache: Mes if contentBody.isNone(): return RestApiResponse.badRequest() - let reqBodyContentType = MediaType.init($contentBody.get().contentType) - if reqBodyContentType != MIMETYPE_JSON: - return RestApiResponse.badRequest() - - let reqBodyData = contentBody.get().data - let reqResult = decodeFromJsonBytes(seq[PubsubTopic], reqBodyData) - if reqResult.isErr(): - return RestApiResponse.badRequest() - - let req: seq[PubsubTopic] = reqResult.get() + let req: seq[PubsubTopic] = decodeRequestBody[seq[PubsubTopic]](contentBody).valueOr: + return error # Only subscribe to topics for which we have no subscribed topic handlers yet let newTopics = req.filterIt(not cache.isSubscribed(it)) @@ -83,16 +76,8 @@ proc installRelayApiHandlers*(router: var RestRouter, node: WakuNode, cache: Mes if contentBody.isNone(): return RestApiResponse.badRequest() - let reqBodyContentType = MediaType.init($contentBody.get().contentType) - if reqBodyContentType != MIMETYPE_JSON: - return RestApiResponse.badRequest() - - let reqBodyData = contentBody.get().data - let reqResult = decodeFromJsonBytes(seq[PubsubTopic], reqBodyData) - if reqResult.isErr(): - return RestApiResponse.badRequest() - - let req: seq[PubsubTopic] = reqResult.get() + let req: seq[PubsubTopic] = decodeRequestBody[seq[PubsubTopic]](contentBody).valueOr: + return error # Unsubscribe all handlers from requested topics for pubsubTopic in req: @@ -139,21 +124,12 @@ proc installRelayApiHandlers*(router: var RestRouter, node: WakuNode, cache: Mes if contentBody.isNone(): return RestApiResponse.badRequest() - let reqBodyContentType = MediaType.init($contentBody.get().contentType) - if reqBodyContentType != MIMETYPE_JSON: - return RestApiResponse.badRequest() - - let reqBodyData = contentBody.get().data - let reqResult = decodeFromJsonBytes(RelayPostMessagesRequest, reqBodyData) - if reqResult.isErr(): - return RestApiResponse.badRequest() + let reqWakuMessage: RelayWakuMessage = decodeRequestBody[RelayWakuMessage](contentBody).valueOr: + return error - let resMessage = reqResult.value.toWakuMessage(version = 0) - if resMessage.isErr(): + var message: WakuMessage = reqWakuMessage.toWakuMessage(version = 0).valueOr: return RestApiResponse.badRequest() - var message = resMessage.get() - # if RLN is mounted, append the proof to the message if not node.wakuRlnRelay.isNil(): # append the proof to the message @@ -191,16 +167,8 @@ proc installRelayApiHandlers*(router: var RestRouter, node: WakuNode, cache: Mes if contentBody.isNone(): return RestApiResponse.badRequest() - let reqBodyContentType = MediaType.init($contentBody.get().contentType) - if reqBodyContentType != MIMETYPE_JSON: - return RestApiResponse.badRequest() - - let reqBodyData = contentBody.get().data - let reqResult = decodeFromJsonBytes(seq[ContentTopic], reqBodyData) - if reqResult.isErr(): - return RestApiResponse.badRequest() - - let req: seq[ContentTopic] = reqResult.get() + let req: seq[ContentTopic] = decodeRequestBody[seq[ContentTopic]](contentBody).valueOr: + return error # Only subscribe to topics for which we have no subscribed topic handlers yet let newTopics = req.filterIt(not cache.isSubscribed(it)) @@ -219,16 +187,8 @@ proc installRelayApiHandlers*(router: var RestRouter, node: WakuNode, cache: Mes if contentBody.isNone(): return RestApiResponse.badRequest() - let reqBodyContentType = MediaType.init($contentBody.get().contentType) - if reqBodyContentType != MIMETYPE_JSON: - return RestApiResponse.badRequest() - - let reqBodyData = contentBody.get().data - let reqResult = decodeFromJsonBytes(seq[ContentTopic], reqBodyData) - if reqResult.isErr(): - return RestApiResponse.badRequest() - - let req: seq[ContentTopic] = reqResult.get() + let req: seq[ContentTopic] = decodeRequestBody[seq[ContentTopic]](contentBody).valueOr: + return error # Unsubscribe all handlers from requested topics for contentTopic in req: @@ -266,24 +226,15 @@ proc installRelayApiHandlers*(router: var RestRouter, node: WakuNode, cache: Mes if contentBody.isNone(): return RestApiResponse.badRequest() - let reqBodyContentType = MediaType.init($contentBody.get().contentType) - if reqBodyContentType != MIMETYPE_JSON: - return RestApiResponse.badRequest() - - let reqBodyData = contentBody.get().data - let reqResult = decodeFromJsonBytes(RelayPostMessagesRequest, reqBodyData) - if reqResult.isErr(): - return RestApiResponse.badRequest() + let req: RelayWakuMessage = decodeRequestBody[RelayWakuMessage](contentBody).valueOr: + return error - if reqResult.value.contentTopic.isNone(): + if req.contentTopic.isNone(): return RestApiResponse.badRequest() - let resMessage = reqResult.value.toWakuMessage(version = 0) - if resMessage.isErr(): + var message: WakuMessage = req.toWakuMessage(version = 0).valueOr: return RestApiResponse.badRequest() - var message = resMessage.get() - # if RLN is mounted, append the proof to the message if not node.wakuRlnRelay.isNil(): # append the proof to the message diff --git a/waku/waku_api/rest/rest_serdes.nim b/waku/waku_api/rest/rest_serdes.nim new file mode 100644 index 0000000000..b9251a14d4 --- /dev/null +++ b/waku/waku_api/rest/rest_serdes.nim @@ -0,0 +1,79 @@ +when (NimMajor, NimMinor) < (1, 4): + {.push raises: [Defect].} +else: + {.push raises: [].} + +import + std/typetraits, + std/os, + stew/results, + chronicles, + serialization, + json_serialization, + json_serialization/std/options, + json_serialization/std/net, + json_serialization/std/sets, + presto/common + +import + ./serdes, + ./responses + +logScope: + topics = "waku node rest" + +proc encodeBytesOf*[T](value: T, + contentType: string): RestResult[seq[byte]]= + let reqContentType = MediaType.init(contentType) + + if reqContentType != MIMETYPE_JSON: + error "Unsupported contentType value", contentType = contentType, typ = value.type.name + return err("Unsupported contentType") + + let encoded = ?encodeIntoJsonBytes(value) + return ok(encoded) + +func decodeRequestBody*[T](contentBody: Option[ContentBody]) : Result[T, RestApiResponse] = + if contentBody.isNone(): + return err(RestApiResponse.badRequest("Missing content body")) + + let reqBodyContentType = contentBody.get().contentType.mediaType + + if reqBodyContentType != MIMETYPE_JSON and reqBodyContentType != MIMETYPE_TEXT: + return err(RestApiResponse.badRequest("Wrong Content-Type, expected application/json or text/plain")) + + let reqBodyData = contentBody.get().data + + let requestResult = decodeFromJsonBytes(T, reqBodyData) + if requestResult.isErr(): + return err(RestApiResponse.badRequest("Invalid content body, could not decode. " & + $requestResult.error)) + + return ok(requestResult.get()) + +proc decodeBytes*(t: typedesc[string], value: openarray[byte], + contentType: Opt[ContentTypeData]): RestResult[string] = + if MediaType.init($contentType) != MIMETYPE_TEXT: + error "Unsupported contentType value", contentType = contentType + return err("Unsupported contentType") + + var res: string + if len(value) > 0: + res = newString(len(value)) + copyMem(addr res[0], unsafeAddr value[0], len(value)) + return ok(res) + +proc decodeBytes*[T](t: typedesc[T], + data: openArray[byte], + contentType: Opt[ContentTypeData]): RestResult[T] = + + let reqContentType = contentType.valueOr(): + error "Unsupported response, missing contentType value" + return err("Unsupported response, missing contentType") + + if reqContentType.mediaType != MIMETYPE_JSON and reqContentType.mediaType != MIMETYPE_TEXT: + error "Unsupported response contentType value", contentType = contentType + return err("Unsupported response contentType") + + let decoded = ?decodeFromJsonBytes(T, data) + return ok(decoded) diff --git a/waku/waku_api/rest/serdes.nim b/waku/waku_api/rest/serdes.nim index f87c157c05..57541e60ce 100644 --- a/waku/waku_api/rest/serdes.nim +++ b/waku/waku_api/rest/serdes.nim @@ -3,7 +3,7 @@ when (NimMajor, NimMinor) < (1, 4): else: {.push raises: [].} -import +import std/typetraits, stew/results, stew/byteutils, @@ -15,7 +15,8 @@ import json_serialization/std/sets, presto/common -logScope: + +logScope: topics = "waku node rest" Json.createFlavor RestJson From 85265e6c61f8cbf8364ea4eb7688cd2052e0f8b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lex=20Cabeza=20Romero?= Date: Wed, 15 Nov 2023 10:26:01 +0100 Subject: [PATCH 118/274] test(waku-filter): Unsubscribe tests (#2085) * Implement unsubscribe waku filter tests. * test(waku-filter): Unsubscribe all, payloads and security tests (#2095) * Implement waku node filter Security and Privacy tests (#2096) --- tests/node/test_wakunode_filter.nim | 110 +- tests/testlib/sequtils.nim | 2 + tests/waku_filter_v2/test_data.nim | 70 ++ tests/waku_filter_v2/test_waku_client.nim | 1225 ++++++++++++++++++++- waku/waku_filter_v2/protocol.nim | 6 +- waku/waku_filter_v2/subscriptions.nim | 8 + 6 files changed, 1403 insertions(+), 18 deletions(-) create mode 100644 tests/testlib/sequtils.nim create mode 100644 tests/waku_filter_v2/test_data.nim diff --git a/tests/node/test_wakunode_filter.nim b/tests/node/test_wakunode_filter.nim index 0b918ac0d6..5890ab2088 100644 --- a/tests/node/test_wakunode_filter.nim +++ b/tests/node/test_wakunode_filter.nim @@ -25,12 +25,12 @@ import let FUTURE_TIMEOUT = 1.seconds -suite "Full Node - Waku Filter - End to End": +suite "Waku Filter - End to End": var client {.threadvar.}: WakuNode var clientPeerId {.threadvar.}: PeerId var server {.threadvar.}: WakuNode var serverRemotePeerInfo {.threadvar.}: RemotePeerInfo - var pubsubTopic {.threadvar.}: PubsubTopicy + var pubsubTopic {.threadvar.}: PubsubTopic var contentTopic {.threadvar.}: ContentTopic var contentTopicSeq {.threadvar.}: seq[ContentTopic] var pushHandlerFuture {.threadvar.}: Future[(string, WakuMessage)] @@ -66,8 +66,8 @@ suite "Full Node - Waku Filter - End to End": asyncTeardown: waitFor allFutures(client.stop(), server.stop()) - asyncTest "Full Client Node to Full Service Node Subscription": - # When a full client node subscribes to a full service node + asyncTest "Client Node receives Push from Server Node, via Filter": + # When a client node subscribes to a filter node let subscribeResponse = await client.filterSubscribe( some(pubsubTopic), contentTopicSeq, serverRemotePeerInfo ) @@ -107,3 +107,105 @@ suite "Full Node - Waku Filter - End to End": # Then the message is not pushed to the client check: not await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) + + asyncTest "Client Node can't receive Push from Server Node, via Relay": + # Given the server node has Relay enabled + await server.mountRelay() + + # And valid filter subscription + let subscribeResponse = await client.filterSubscribe( + some(pubsubTopic), contentTopicSeq, serverRemotePeerInfo + ) + require: + subscribeResponse.isOk() + server.wakuFilter.subscriptions.len == 1 + + # When a server node gets a Relay message + let msg1 = fakeWakuMessage(contentTopic=contentTopic) + await server.publish(some(pubsubTopic), msg1) + + # Then the message is not sent to the client's filter push handler + check (not await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT)) + + asyncTest "Client Node can't subscribe to Server Node without Filter": + # Given a server node with Relay without Filter + let + serverKey = generateSecp256k1Key() + server = newTestWakuNode(serverKey, ValidIpAddress.init("0.0.0.0"), Port(0)) + + waitFor server.start() + waitFor server.mountRelay() + + let serverRemotePeerInfo = server.peerInfo.toRemotePeerInfo() + + # When a client node subscribes to the server node + let subscribeResponse = await client.filterSubscribe( + some(pubsubTopic), contentTopicSeq, serverRemotePeerInfo + ) + + # Then the subscription is successful + check (not subscribeResponse.isOk()) + + xasyncTest "Filter Client Node can receive messages after subscribing and restarting, via Filter": + # Given a valid filter subscription + let subscribeResponse = await client.filterSubscribe( + some(pubsubTopic), contentTopicSeq, serverRemotePeerInfo + ) + require: + subscribeResponse.isOk() + server.wakuFilter.subscriptions.len == 1 + + # And the client node reboots + waitFor client.stop() + waitFor client.start() + client.mountFilterClient() + + # When a message is sent to the subscribed content topic, via Filter; without refreshing the subscription + let msg = fakeWakuMessage(contentTopic=contentTopic) + await server.filterHandleMessage(pubsubTopic, msg) + + # Then the message is pushed to the client + check await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) + let (pushedMsgPubsubTopic, pushedMsg) = pushHandlerFuture.read() + check: + pushedMsgPubsubTopic == pubsubTopic + pushedMsg == msg + + asyncTest "Filter Client Node can't receive messages after subscribing and restarting, via Relay": # Given the server node has Relay enabled + await server.mountRelay() + + # Given a valid filter subscription + let subscribeResponse = await client.filterSubscribe( + some(pubsubTopic), contentTopicSeq, serverRemotePeerInfo + ) + require: + subscribeResponse.isOk() + server.wakuFilter.subscriptions.len == 1 + + # And the client node reboots + waitFor client.stop() + waitFor client.start() + client.mountFilterClient() + + # When a message is sent to the subscribed content topic, via Relay + let msg = fakeWakuMessage(contentTopic=contentTopic) + await server.publish(some(pubsubTopic), msg) + + # Then the message is not sent to the client's filter push handler + check (not await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT)) + + # Given the client refreshes the subscription + let subscribeResponse2 = await client.filterSubscribe( + some(pubsubTopic), contentTopicSeq, serverRemotePeerInfo + ) + check: + subscribeResponse2.isOk() + server.wakuFilter.subscriptions.len == 1 + + # When a message is sent to the subscribed content topic, via Relay + pushHandlerFuture = newPushHandlerFuture() + let msg2 = fakeWakuMessage(contentTopic=contentTopic) + await server.publish(some(pubsubTopic), msg2) + + # Then the message is not sent to the client's filter push handler + check (not await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT)) diff --git a/tests/testlib/sequtils.nim b/tests/testlib/sequtils.nim new file mode 100644 index 0000000000..5fd3d414f7 --- /dev/null +++ b/tests/testlib/sequtils.nim @@ -0,0 +1,2 @@ +proc toString*(bytes: seq[byte]): string = + cast[string](bytes) diff --git a/tests/waku_filter_v2/test_data.nim b/tests/waku_filter_v2/test_data.nim new file mode 100644 index 0000000000..bc3ccb78e0 --- /dev/null +++ b/tests/waku_filter_v2/test_data.nim @@ -0,0 +1,70 @@ +import + std/json + +const + ALPHABETIC* = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" + ALPHANUMERIC* = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" + ALPHANUMERIC_SPECIAL* = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()_+-=[]{}|;':\\\",./<>?`~" + EMOJI* = "😀 😃 😄 😁 😆 😅 🤣 😂 🙂 🙃 😉 😊 😇 🥰 😍 🤩 😘 😗 😚 😙" + CODE* = "def main():\n\tprint('Hello, world!')" + QUERY* = """ + SELECT + u.id, + u.name, + u.email, + u.created_at, + u.updated_at, + ( + SELECT + COUNT(*) + FROM + posts p + WHERE + p.user_id = u.id + ) AS post_count + FROM + users u + WHERE + u.id = 1 + """ + TEXT_SMALL* = "Lorem ipsum dolor sit amet, consectetur adipiscing elit." + TEXT_LARGE* = """ + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras gravida vulputate semper. Proin + eleifend varius cursus. Morbi lacinia posuere quam sit amet pretium. Sed non metus fermentum, + venenatis nisl id, vestibulum eros. Quisque non lorem sit amet lectus faucibus elementum eu + sit amet odio. Mauris tortor justo, malesuada quis volutpat vitae, tristique at nisl. Proin + eleifend eu arcu ac sodales. In efficitur ipsum urna, ut viverra turpis sodales ut. Phasellus + nec tortor eu urna suscipit euismod eget vel ligula. Phasellus vestibulum sollicitudin tellus, + ac sodales tellus tempor id. Curabitur sed congue velit. + """ + +proc getSampleJsonDictionary*(): JsonNode = + %*{ + "shapes": [ + { + "type": "circle", + "radius": 10 + }, + { + "type": "square", + "side": 10 + } + ], + "colours": [ + "red", + "green", + "blue" + ] + } + +proc getSampleJsonList*(): JsonNode = + %*[ + { + "type": "cat", + "name": "Salem" + }, + { + "type": "dog", + "name": "Oberon" + }, + ] diff --git a/tests/waku_filter_v2/test_waku_client.nim b/tests/waku_filter_v2/test_waku_client.nim index 0ef88235db..9187638921 100644 --- a/tests/waku_filter_v2/test_waku_client.nim +++ b/tests/waku_filter_v2/test_waku_client.nim @@ -1,25 +1,42 @@ {.used.} import - std/[options, tables, sequtils], + std/[ + options, + tables, + sequtils, + strutils, + json + ], testutils/unittests, + stew/[ + results, + byteutils + ], chronos, chronicles, os, libp2p/peerstore import - ../../../waku/node/peer_manager, - ../../../waku/waku_filter_v2, - ../../../waku/waku_filter_v2/client, - ../../../waku/waku_filter_v2/subscriptions, - ../../../waku/waku_core, - ../testlib/common, - ../testlib/wakucore, - ../testlib/testasync, - ../testlib/testutils, - ../testlib/futures, - ./waku_filter_utils.nim + ../../../waku/[ + node/peer_manager, + waku_core + ], + ../../../waku/waku_filter_v2/[ + client, + subscriptions + ], + ../testlib/[ + common, + wakucore, + testasync, + testutils, + futures, + sequtils + ], + ./waku_filter_utils.nim, + ./test_data.nim let FUTURE_TIMEOUT = 1.seconds @@ -46,7 +63,7 @@ suite "Waku Filter - End to End": pubsubTopic = DefaultPubsubTopic contentTopic = DefaultContentTopic - contentTopicSeq = @[DefaultContentTopic] + contentTopicSeq = @[contentTopic] serverSwitch = newStandardSwitch() clientSwitch = newStandardSwitch() wakuFilter = await newTestWakuFilter(serverSwitch) @@ -132,6 +149,17 @@ suite "Waku Filter - End to End": subscribeResponse.isErr() # Not subscribed subscribeResponse.error().kind == FilterSubscribeErrorKind.PEER_DIAL_FAILURE + asyncTest "Subscribing to an empty content topic": + # When subscribing to an empty content topic + let subscribeResponse = await wakuFilterClient.subscribe( + serverRemotePeerInfo, pubsubTopic, @[] + ) + + # Then the subscription is not successful + check: + subscribeResponse.isErr() # Not subscribed + subscribeResponse.error().kind == FilterSubscribeErrorKind.BAD_REQUEST + asyncTest "PubSub Topic with Single Content Topic": # Given let nonExistentContentTopic = "non-existent-content-topic" @@ -777,6 +805,1177 @@ suite "Waku Filter - End to End": pushedMsgPubsubTopic2 == pubsubTopic pushedMsg2 == msg2 + suite "Unsubscribe": + + ### + # One PubSub Topic + ### + + asyncTest "PubSub Topic with Single Content Topic": + # Given a valid subscription + let subscribeResponse = await wakuFilterClient.subscribe( + serverRemotePeerInfo, pubsubTopic, contentTopicSeq + ) + require: + subscribeResponse.isOk() + wakuFilter.subscriptions.len == 1 + wakuFilter.subscriptions.hasKey(clientPeerId) + wakuFilter.getSubscribedContentTopics(clientPeerId) == contentTopicSeq + + # When unsubscribing from the subscription + let unsubscribeResponse = await wakuFilterClient.unsubscribe( + serverRemotePeerInfo, pubsubTopic, contentTopicSeq + ) + + # Then the unsubscription is successful + check: + unsubscribeResponse.isOk() + wakuFilter.subscriptions.len == 0 + + asyncTest "After refreshing a subscription with Single Content Topic": + # Given a valid subscription + let subscribeResponse1 = await wakuFilterClient.subscribe( + serverRemotePeerInfo, pubsubTopic, contentTopicSeq + ) + require: + subscribeResponse1.isOk() + wakuFilter.subscriptions.len == 1 + wakuFilter.subscriptions.hasKey(clientPeerId) + wakuFilter.getSubscribedContentTopics(clientPeerId) == contentTopicSeq + + # When refreshing the subscription + let subscribeResponse2 = await wakuFilterClient.subscribe( + serverRemotePeerInfo, pubsubTopic, contentTopicSeq + ) + + # Then the subscription is successful + check: + subscribeResponse2.isOk() + wakuFilter.subscriptions.len == 1 + wakuFilter.subscriptions.hasKey(clientPeerId) + wakuFilter.getSubscribedContentTopics(clientPeerId) == contentTopicSeq + + # When unsubscribing from the subscription + let unsubscribeResponse = await wakuFilterClient.unsubscribe( + serverRemotePeerInfo, pubsubTopic, contentTopicSeq + ) + + # Then the unsubscription is successful + check: + unsubscribeResponse.isOk() + wakuFilter.subscriptions.len == 0 + + asyncTest "PubSub Topic with Multiple Content Topics, One By One": + # Given a valid subscription + let multipleContentTopicSeq = @[contentTopic, "other-content-topic"] + let subscribeResponse = await wakuFilterClient.subscribe( + serverRemotePeerInfo, pubsubTopic, multipleContentTopicSeq + ) + require: + subscribeResponse.isOk() + wakuFilter.subscriptions.len == 1 + wakuFilter.subscriptions.hasKey(clientPeerId) + wakuFilter.getSubscribedContentTopics(clientPeerId) == multipleContentTopicSeq + + # When unsubscribing from one of the content topics + let unsubscribeResponse1 = await wakuFilterClient.unsubscribe( + serverRemotePeerInfo, pubsubTopic, @[contentTopic] + ) + + # Then the unsubscription is successful + check: + unsubscribeResponse1.isOk() + wakuFilter.subscriptions.len == 1 + wakuFilter.subscriptions.hasKey(clientPeerId) + wakuFilter.getSubscribedContentTopics(clientPeerId) == @["other-content-topic"] + + # When unsubscribing from the other content topic + let unsubscribeResponse = await wakuFilterClient.unsubscribe( + serverRemotePeerInfo, pubsubTopic, @["other-content-topic"] + ) + + # Then the unsubscription is successful + check: + unsubscribeResponse.isOk() + wakuFilter.subscriptions.len == 0 + + asyncTest "PubSub Topic with Multiple Content Topics, All At Once": + # Given a valid subscription + let multipleContentTopicSeq = @[contentTopic, "other-content-topic"] + let subscribeResponse = await wakuFilterClient.subscribe( + serverRemotePeerInfo, pubsubTopic, multipleContentTopicSeq + ) + require: + subscribeResponse.isOk() + wakuFilter.subscriptions.len == 1 + wakuFilter.subscriptions.hasKey(clientPeerId) + wakuFilter.getSubscribedContentTopics(clientPeerId) == multipleContentTopicSeq + + # When unsubscribing from all content topics + let unsubscribeResponse = await wakuFilterClient.unsubscribe( + serverRemotePeerInfo, pubsubTopic, multipleContentTopicSeq + ) + + # Then the unsubscription is successful + check: + unsubscribeResponse.isOk() + wakuFilter.subscriptions.len == 0 + + asyncTest "After refreshing a complete subscription with Multiple Content Topics, One By One": + # Given a valid subscription + let multipleContentTopicSeq = @[contentTopic, "other-content-topic"] + let subscribeResponse1 = await wakuFilterClient.subscribe( + serverRemotePeerInfo, pubsubTopic, multipleContentTopicSeq + ) + require: + subscribeResponse1.isOk() + wakuFilter.subscriptions.len == 1 + wakuFilter.subscriptions.hasKey(clientPeerId) + wakuFilter.getSubscribedContentTopics(clientPeerId) == multipleContentTopicSeq + + # And a successful complete refresh of the subscription + let subscribeResponse2 = await wakuFilterClient.subscribe( + serverRemotePeerInfo, pubsubTopic, multipleContentTopicSeq + ) + + require: + subscribeResponse2.isOk() + wakuFilter.subscriptions.len == 1 + wakuFilter.subscriptions.hasKey(clientPeerId) + wakuFilter.getSubscribedContentTopics(clientPeerId) == multipleContentTopicSeq + + # When unsubscribing from one of the content topics + let unsubscribeResponse1 = await wakuFilterClient.unsubscribe( + serverRemotePeerInfo, pubsubTopic, @[contentTopic] + ) + + # Then the unsubscription is successful + check: + unsubscribeResponse1.isOk() + wakuFilter.subscriptions.len == 1 + wakuFilter.subscriptions.hasKey(clientPeerId) + wakuFilter.getSubscribedContentTopics(clientPeerId) == @["other-content-topic"] + + # When unsubscribing from the other content topic + let unsubscribeResponse2 = await wakuFilterClient.unsubscribe( + serverRemotePeerInfo, pubsubTopic, @["other-content-topic"] + ) + + # Then the unsubscription is successful + check: + unsubscribeResponse2.isOk() + wakuFilter.subscriptions.len == 0 + + asyncTest "After refreshing a complete subscription with Multiple Content Topics, All At Once": + # Given a valid subscription + let multipleContentTopicSeq = @[contentTopic, "other-content-topic"] + let subscribeResponse1 = await wakuFilterClient.subscribe( + serverRemotePeerInfo, pubsubTopic, multipleContentTopicSeq + ) + require: + subscribeResponse1.isOk() + wakuFilter.subscriptions.len == 1 + wakuFilter.subscriptions.hasKey(clientPeerId) + wakuFilter.getSubscribedContentTopics(clientPeerId) == multipleContentTopicSeq + + # And a successful complete refresh of the subscription + let subscribeResponse2 = await wakuFilterClient.subscribe( + serverRemotePeerInfo, pubsubTopic, multipleContentTopicSeq + ) + + require: + subscribeResponse2.isOk() + wakuFilter.subscriptions.len == 1 + wakuFilter.subscriptions.hasKey(clientPeerId) + wakuFilter.getSubscribedContentTopics(clientPeerId) == multipleContentTopicSeq + + # When unsubscribing from all content topics + let unsubscribeResponse = await wakuFilterClient.unsubscribe( + serverRemotePeerInfo, pubsubTopic, multipleContentTopicSeq + ) + + # Then the unsubscription is successful + check: + unsubscribeResponse.isOk() + wakuFilter.subscriptions.len == 0 + + asyncTest "After refreshing a partial subscription with Multiple Content Topics, One By One": + # Given a valid subscription + let multipleContentTopicSeq = @[contentTopic, "other-content-topic"] + let subscribeResponse1 = await wakuFilterClient.subscribe( + serverRemotePeerInfo, pubsubTopic, multipleContentTopicSeq + ) + require: + subscribeResponse1.isOk() + wakuFilter.subscriptions.len == 1 + wakuFilter.subscriptions.hasKey(clientPeerId) + wakuFilter.getSubscribedContentTopics(clientPeerId) == multipleContentTopicSeq + + # Unsubscribing from one content topic + let unsubscribeResponse1 = await wakuFilterClient.unsubscribe( + serverRemotePeerInfo, pubsubTopic, @[contentTopic] + ) + require: + unsubscribeResponse1.isOk() + wakuFilter.subscriptions.len == 1 + wakuFilter.subscriptions.hasKey(clientPeerId) + wakuFilter.getSubscribedContentTopics(clientPeerId) == @["other-content-topic"] + + # And a successful refresh of the partial subscription + let subscribeResponse2 = await wakuFilterClient.subscribe( + serverRemotePeerInfo, pubsubTopic, multipleContentTopicSeq + ) + require: + subscribeResponse2.isOk() + wakuFilter.subscriptions.len == 1 + wakuFilter.subscriptions.hasKey(clientPeerId) + wakuFilter.getSubscribedContentTopics(clientPeerId) == multipleContentTopicSeq + + # When unsubscribing from one of the content topics + let unsubscribeResponse2 = await wakuFilterClient.unsubscribe( + serverRemotePeerInfo, pubsubTopic, @[contentTopic] + ) + + # Then the unsubscription is successful + check: + unsubscribeResponse2.isOk() + wakuFilter.subscriptions.len == 1 + wakuFilter.subscriptions.hasKey(clientPeerId) + wakuFilter.getSubscribedContentTopics(clientPeerId) == @["other-content-topic"] + + # When unsubscribing from the other content topic + let unsubscribeResponse3 = await wakuFilterClient.unsubscribe( + serverRemotePeerInfo, pubsubTopic, @["other-content-topic"] + ) + + # Then the unsubscription is successful + check: + unsubscribeResponse3.isOk() + wakuFilter.subscriptions.len == 0 + + asyncTest "After refreshing a partial subscription with Multiple Content Topics, All At Once": + # Given a valid subscription + let multipleContentTopicSeq = @[contentTopic, "other-content-topic"] + let subscribeResponse1 = await wakuFilterClient.subscribe( + serverRemotePeerInfo, pubsubTopic, multipleContentTopicSeq + ) + require: + subscribeResponse1.isOk() + wakuFilter.subscriptions.len == 1 + wakuFilter.subscriptions.hasKey(clientPeerId) + wakuFilter.getSubscribedContentTopics(clientPeerId) == multipleContentTopicSeq + + # Unsubscribing from one content topic + let unsubscribeResponse1 = await wakuFilterClient.unsubscribe( + serverRemotePeerInfo, pubsubTopic, @[contentTopic] + ) + require: + unsubscribeResponse1.isOk() + wakuFilter.subscriptions.len == 1 + wakuFilter.subscriptions.hasKey(clientPeerId) + wakuFilter.getSubscribedContentTopics(clientPeerId) == @["other-content-topic"] + + # And a successful refresh of the partial subscription + let subscribeResponse2 = await wakuFilterClient.subscribe( + serverRemotePeerInfo, pubsubTopic, multipleContentTopicSeq + ) + require: + subscribeResponse2.isOk() + wakuFilter.subscriptions.len == 1 + wakuFilter.subscriptions.hasKey(clientPeerId) + wakuFilter.getSubscribedContentTopics(clientPeerId) == multipleContentTopicSeq + + # When unsubscribing from all content topics + let unsubscribeResponse2 = await wakuFilterClient.unsubscribe( + serverRemotePeerInfo, pubsubTopic, multipleContentTopicSeq + ) + + # Then the unsubscription is successful + check: + unsubscribeResponse2.isOk() + wakuFilter.subscriptions.len == 0 + + ### + # Multiple PubSub Topics + ### + + asyncTest "Different PubSub Topics with Single (Same) Content Topic": + # Given two valid subscriptions with the same content topic + let + subscribeResponse1 = await wakuFilterClient.subscribe( + serverRemotePeerInfo, pubsubTopic, contentTopicSeq + ) + subscribeResponse2 = await wakuFilterClient.subscribe( + serverRemotePeerInfo, "other-pubsub-topic", contentTopicSeq + ) + + # TODO: CHECK IF THIS MAKES SENSE + require: + subscribeResponse1.isOk() + subscribeResponse2.isOk() + wakuFilter.subscriptions.len == 1 + wakuFilter.subscriptions.hasKey(clientPeerId) + wakuFilter.getSubscribedContentTopics(clientPeerId).len == 2 + + # When unsubscribing from one of the subscriptions + let unsubscribeResponse1 = await wakuFilterClient.unsubscribe( + serverRemotePeerInfo, pubsubTopic, contentTopicSeq + ) + + # Then the unsubscription is successful + check: + unsubscribeResponse1.isOk() + wakuFilter.subscriptions.len == 1 + wakuFilter.subscriptions.hasKey(clientPeerId) + wakuFilter.getSubscribedContentTopics(clientPeerId).len == 1 + + # When unsubscribing from the other subscription + let unsubscribeResponse2 = await wakuFilterClient.unsubscribe( + serverRemotePeerInfo, "other-pubsub-topic", contentTopicSeq + ) + + # Then the unsubscription is successful + check: + unsubscribeResponse2.isOk() + wakuFilter.subscriptions.len == 0 + + asyncTest "Different PubSub Topics with Multiple (Same) Content Topics, One By One": + # Given two valid subscriptions with the same content topics + let + multipleContentTopicSeq = @[contentTopic, "other-content-topic"] + subscribeResponse1 = await wakuFilterClient.subscribe( + serverRemotePeerInfo, pubsubTopic, multipleContentTopicSeq + ) + subscribeResponse2 = await wakuFilterClient.subscribe( + serverRemotePeerInfo, "other-pubsub-topic", multipleContentTopicSeq + ) + + require: + subscribeResponse1.isOk() + subscribeResponse2.isOk() + wakuFilter.subscriptions.len == 1 + wakuFilter.subscriptions.hasKey(clientPeerId) + wakuFilter.getSubscribedContentTopics(clientPeerId).len == 4 + + # When unsubscribing from one of the subscriptions + let unsubscribeResponse1 = await wakuFilterClient.unsubscribe( + serverRemotePeerInfo, pubsubTopic, @[contentTopic] + ) + + # Then the unsubscription is successful + check: + unsubscribeResponse1.isOk() + wakuFilter.subscriptions.len == 1 + wakuFilter.subscriptions.hasKey(clientPeerId) + wakuFilter.getSubscribedContentTopics(clientPeerId).len == 3 + + # When unsubscribing from another of the subscriptions + let unsubscribeResponse2 = await wakuFilterClient.unsubscribe( + serverRemotePeerInfo, "other-pubsub-topic", @["other-content-topic"] + ) + + # Then the unsubscription is successful + check: + unsubscribeResponse1.isOk() + wakuFilter.subscriptions.len == 1 + wakuFilter.subscriptions.hasKey(clientPeerId) + wakuFilter.getSubscribedContentTopics(clientPeerId).len == 2 + + # When unsubscribing from another of the subscriptions + let unsubscribeResponse3 = await wakuFilterClient.unsubscribe( + serverRemotePeerInfo, pubsubTopic, @["other-content-topic"] + ) + + # Then the unsubscription is successful + check: + unsubscribeResponse1.isOk() + wakuFilter.subscriptions.len == 1 + wakuFilter.subscriptions.hasKey(clientPeerId) + wakuFilter.getSubscribedContentTopics(clientPeerId).len == 1 + + # When unsubscribing from the last subscription + let unsubscribeResponse4 = await wakuFilterClient.unsubscribe( + serverRemotePeerInfo, "other-pubsub-topic", @[contentTopic] + ) + + # Then the unsubscription is successful + check: + unsubscribeResponse1.isOk() + wakuFilter.subscriptions.len == 0 + + asyncTest "Different PubSub Topics with Multiple (Same) Content Topics, All At Once": + # Given two valid subscriptions with the same content topics + let + multipleContentTopicSeq = @[contentTopic, "other-content-topic"] + subscribeResponse1 = await wakuFilterClient.subscribe( + serverRemotePeerInfo, pubsubTopic, multipleContentTopicSeq + ) + subscribeResponse2 = await wakuFilterClient.subscribe( + serverRemotePeerInfo, "other-pubsub-topic", multipleContentTopicSeq + ) + + # TODO: CHECK IF THIS MAKES SENSE + require: + subscribeResponse1.isOk() + subscribeResponse2.isOk() + wakuFilter.subscriptions.len == 1 + wakuFilter.subscriptions.hasKey(clientPeerId) + wakuFilter.getSubscribedContentTopics(clientPeerId).len == 4 + + # When unsubscribing from one of the subscriptions + let unsubscribeResponse1 = await wakuFilterClient.unsubscribe( + serverRemotePeerInfo, pubsubTopic, multipleContentTopicSeq + ) + + # Then the unsubscription is successful + check: + unsubscribeResponse1.isOk() + wakuFilter.subscriptions.len == 1 + wakuFilter.subscriptions.hasKey(clientPeerId) + wakuFilter.getSubscribedContentTopics(clientPeerId).len == 2 + + # When unsubscribing from the other subscription + let unsubscribeResponse2 = await wakuFilterClient.unsubscribe( + serverRemotePeerInfo, "other-pubsub-topic", multipleContentTopicSeq + ) + + # Then the unsubscription is successful + check: + unsubscribeResponse2.isOk() + wakuFilter.subscriptions.len == 0 + + asyncTest "After refreshing a complete subscription with different PubSub Topics and Single (Same) Content Topic": + # Given two valid subscriptions with the same content topic + let + subscribeResponse1 = await wakuFilterClient.subscribe( + serverRemotePeerInfo, pubsubTopic, contentTopicSeq + ) + subscribeResponse2 = await wakuFilterClient.subscribe( + serverRemotePeerInfo, "other-pubsub-topic", contentTopicSeq + ) + + # TODO: CHECK IF THIS MAKES SENSE + require: + subscribeResponse1.isOk() + subscribeResponse2.isOk() + wakuFilter.subscriptions.len == 1 + wakuFilter.subscriptions.hasKey(clientPeerId) + wakuFilter.getSubscribedContentTopics(clientPeerId).len == 2 + + # And a successful complete refresh of the subscription + let + subscribeResponse3 = await wakuFilterClient.subscribe( + serverRemotePeerInfo, pubsubTopic, contentTopicSeq + ) + subscribeResponse4 = await wakuFilterClient.subscribe( + serverRemotePeerInfo, "other-pubsub-topic", contentTopicSeq + ) + + require: + subscribeResponse3.isOk() + subscribeResponse4.isOk() + wakuFilter.subscriptions.len == 1 + wakuFilter.subscriptions.hasKey(clientPeerId) + wakuFilter.getSubscribedContentTopics(clientPeerId).len == 2 + + # When unsubscribing from one of the subscriptions + let unsubscribeResponse1 = await wakuFilterClient.unsubscribe( + serverRemotePeerInfo, pubsubTopic, contentTopicSeq + ) + + # Then the unsubscription is successful + check: + unsubscribeResponse1.isOk() + wakuFilter.subscriptions.len == 1 + wakuFilter.subscriptions.hasKey(clientPeerId) + wakuFilter.getSubscribedContentTopics(clientPeerId).len == 1 + + # When unsubscribing from the other subscription + let unsubscribeResponse2 = await wakuFilterClient.unsubscribe( + serverRemotePeerInfo, "other-pubsub-topic", contentTopicSeq + ) + + # Then the unsubscription is successful + check: + unsubscribeResponse2.isOk() + wakuFilter.subscriptions.len == 0 + + asyncTest "After refreshing a complete subscription with different PubSub Topics and Multiple (Same) Content Topics, One By One": + # Given two valid subscriptions with the same content topics + let + multipleContentTopicSeq = @[contentTopic, "other-content-topic"] + subscribeResponse1 = await wakuFilterClient.subscribe( + serverRemotePeerInfo, pubsubTopic, multipleContentTopicSeq + ) + subscribeResponse2 = await wakuFilterClient.subscribe( + serverRemotePeerInfo, "other-pubsub-topic", multipleContentTopicSeq + ) + + # TODO: CHECK IF THIS MAKES SENSE + require: + subscribeResponse1.isOk() + subscribeResponse2.isOk() + wakuFilter.subscriptions.len == 1 + wakuFilter.subscriptions.hasKey(clientPeerId) + wakuFilter.getSubscribedContentTopics(clientPeerId).len == 4 + + # And a successful complete refresh of the subscription + let + subscribeResponse3 = await wakuFilterClient.subscribe( + serverRemotePeerInfo, pubsubTopic, multipleContentTopicSeq + ) + subscribeResponse4 = await wakuFilterClient.subscribe( + serverRemotePeerInfo, "other-pubsub-topic", multipleContentTopicSeq + ) + + require: + subscribeResponse3.isOk() + subscribeResponse4.isOk() + wakuFilter.subscriptions.len == 1 + wakuFilter.subscriptions.hasKey(clientPeerId) + wakuFilter.getSubscribedContentTopics(clientPeerId).len == 4 + + # When unsubscribing from one of the subscriptions + let unsubscribeResponse1 = await wakuFilterClient.unsubscribe( + serverRemotePeerInfo, pubsubTopic, @[contentTopic] + ) + + # Then the unsubscription is successful + check: + unsubscribeResponse1.isOk() + wakuFilter.subscriptions.len == 1 + wakuFilter.subscriptions.hasKey(clientPeerId) + wakuFilter.getSubscribedContentTopics(clientPeerId).len == 3 + + # When unsubscribing from another of the subscriptions + let unsubscribeResponse2 = await wakuFilterClient.unsubscribe( + serverRemotePeerInfo, "other-pubsub-topic", @["other-content-topic"] + ) + + # Then the unsubscription is successful + check: + unsubscribeResponse1.isOk() + wakuFilter.subscriptions.len == 1 + wakuFilter.subscriptions.hasKey(clientPeerId) + wakuFilter.getSubscribedContentTopics(clientPeerId).len == 2 + + # When unsubscribing from another of the subscriptions + let unsubscribeResponse3 = await wakuFilterClient.unsubscribe( + serverRemotePeerInfo, pubsubTopic, @["other-content-topic"] + ) + + # Then the unsubscription is successful + check: + unsubscribeResponse1.isOk() + wakuFilter.subscriptions.len == 1 + wakuFilter.subscriptions.hasKey(clientPeerId) + wakuFilter.getSubscribedContentTopics(clientPeerId).len == 1 + + # When unsubscribing from the last subscription + let unsubscribeResponse4 = await wakuFilterClient.unsubscribe( + serverRemotePeerInfo, "other-pubsub-topic", @[contentTopic] + ) + + # Then the unsubscription is successful + check: + unsubscribeResponse1.isOk() + wakuFilter.subscriptions.len == 0 + + asyncTest "After refreshing a complete subscription with different PubSub Topics and Multiple (Same) Content Topics, All At Once": + # Given two valid subscriptions with the same content topics + let + multipleContentTopicSeq = @[contentTopic, "other-content-topic"] + subscribeResponse1 = await wakuFilterClient.subscribe( + serverRemotePeerInfo, pubsubTopic, multipleContentTopicSeq + ) + subscribeResponse2 = await wakuFilterClient.subscribe( + serverRemotePeerInfo, "other-pubsub-topic", multipleContentTopicSeq + ) + + # TODO: CHECK IF THIS MAKES SENSE + require: + subscribeResponse1.isOk() + subscribeResponse2.isOk() + wakuFilter.subscriptions.len == 1 + wakuFilter.subscriptions.hasKey(clientPeerId) + wakuFilter.getSubscribedContentTopics(clientPeerId).len == 4 + + # And a successful complete refresh of the subscription + let + subscribeResponse3 = await wakuFilterClient.subscribe( + serverRemotePeerInfo, pubsubTopic, multipleContentTopicSeq + ) + subscribeResponse4 = await wakuFilterClient.subscribe( + serverRemotePeerInfo, "other-pubsub-topic", multipleContentTopicSeq + ) + + require: + subscribeResponse3.isOk() + subscribeResponse4.isOk() + wakuFilter.subscriptions.len == 1 + wakuFilter.subscriptions.hasKey(clientPeerId) + wakuFilter.getSubscribedContentTopics(clientPeerId).len == 4 + + # When unsubscribing from one of the subscriptions + let unsubscribeResponse1 = await wakuFilterClient.unsubscribe( + serverRemotePeerInfo, pubsubTopic, multipleContentTopicSeq + ) + + # Then the unsubscription is successful + check: + unsubscribeResponse1.isOk() + wakuFilter.subscriptions.len == 1 + wakuFilter.subscriptions.hasKey(clientPeerId) + wakuFilter.getSubscribedContentTopics(clientPeerId).len == 2 + + # When unsubscribing from the other subscription + let unsubscribeResponse2 = await wakuFilterClient.unsubscribe( + serverRemotePeerInfo, "other-pubsub-topic", multipleContentTopicSeq + ) + + # Then the unsubscription is successful + check: + unsubscribeResponse2.isOk() + wakuFilter.subscriptions.len == 0 + + asyncTest "After refreshing a partial subscription with different PubSub Topics and Multiple (Same) Content Topics, One By One": + # Given two valid subscriptions with the same content topics + let + multipleContentTopicSeq = contentTopicSeq & @["other-content-topic"] + subscribeResponse1 = await wakuFilterClient.subscribe( + serverRemotePeerInfo, pubsubTopic, multipleContentTopicSeq + ) + subscribeResponse2 = await wakuFilterClient.subscribe( + serverRemotePeerInfo, "other-pubsub-topic", multipleContentTopicSeq + ) + + # TODO: CHECK IF THIS MAKES SENSE + require: + subscribeResponse1.isOk() + subscribeResponse2.isOk() + wakuFilter.subscriptions.len == 1 + wakuFilter.subscriptions.hasKey(clientPeerId) + wakuFilter.getSubscribedContentTopics(clientPeerId).len == 4 + + # Unsubscribing from one of the content topics of each subscription + let + unsubscribeResponse1 = await wakuFilterClient.unsubscribe( + serverRemotePeerInfo, pubsubTopic, @[contentTopic] + ) + unsubscribeResponse2 = await wakuFilterClient.unsubscribe( + serverRemotePeerInfo, "other-pubsub-topic", @["other-content-topic"] + ) + + require: + unsubscribeResponse1.isOk() + unsubscribeResponse2.isOk() + wakuFilter.subscriptions.len == 1 + wakuFilter.subscriptions.hasKey(clientPeerId) + wakuFilter.getSubscribedContentTopics(clientPeerId).len == 2 + + # And a successful refresh of the partial subscription + let + refreshSubscriptionResponse1 = await wakuFilterClient.subscribe( + serverRemotePeerInfo, pubsubTopic, multipleContentTopicSeq + ) + refreshSubscriptionResponse2 = await wakuFilterClient.subscribe( + serverRemotePeerInfo, "other-pubsub-topic", multipleContentTopicSeq + ) + + require: + refreshSubscriptionResponse1.isOk() + refreshSubscriptionResponse2.isOk() + wakuFilter.subscriptions.len == 1 + wakuFilter.subscriptions.hasKey(clientPeerId) + wakuFilter.getSubscribedContentTopics(clientPeerId).len == 4 + + # When unsubscribing from one of the subscriptions + let unsubscribeResponse3 = await wakuFilterClient.unsubscribe( + serverRemotePeerInfo, pubsubTopic, @[contentTopic] + ) + + # Then the unsubscription is successful + check: + unsubscribeResponse3.isOk() + wakuFilter.subscriptions.len == 1 + wakuFilter.subscriptions.hasKey(clientPeerId) + wakuFilter.getSubscribedContentTopics(clientPeerId).len == 3 + + # When unsubscribing from another of the subscriptions + let unsubscribeResponse4 = await wakuFilterClient.unsubscribe( + serverRemotePeerInfo, "other-pubsub-topic", @["other-content-topic"] + ) + + # Then the unsubscription is successful + check: + unsubscribeResponse4.isOk() + wakuFilter.subscriptions.len == 1 + wakuFilter.subscriptions.hasKey(clientPeerId) + wakuFilter.getSubscribedContentTopics(clientPeerId).len == 2 + + # When unsubscribing from another of the subscriptions + let unsubscribeResponse5 = await wakuFilterClient.unsubscribe( + serverRemotePeerInfo, pubsubTopic, @["other-content-topic"] + ) + + # Then the unsubscription is successful + check: + unsubscribeResponse5.isOk() + wakuFilter.subscriptions.len == 1 + wakuFilter.subscriptions.hasKey(clientPeerId) + wakuFilter.getSubscribedContentTopics(clientPeerId).len == 1 + + # When unsubscribing from the last subscription + let unsubscribeResponse6 = await wakuFilterClient.unsubscribe( + serverRemotePeerInfo, "other-pubsub-topic", @[contentTopic] + ) + + # Then the unsubscription is successful + check: + unsubscribeResponse6.isOk() + wakuFilter.subscriptions.len == 0 + + asyncTest "After refreshing a partial subscription with different PubSub Topics and Multiple (Same) Content Topics, All At Once": + # Given two valid subscriptions with the same content topics + let + multipleContentTopicSeq = contentTopicSeq & @["other-content-topic"] + subscribeResponse1 = await wakuFilterClient.subscribe( + serverRemotePeerInfo, pubsubTopic, multipleContentTopicSeq + ) + subscribeResponse2 = await wakuFilterClient.subscribe( + serverRemotePeerInfo, "other-pubsub-topic", multipleContentTopicSeq + ) + + # TODO: CHECK IF THIS MAKES SENSE + require: + subscribeResponse1.isOk() + subscribeResponse2.isOk() + wakuFilter.subscriptions.len == 1 + wakuFilter.subscriptions.hasKey(clientPeerId) + wakuFilter.getSubscribedContentTopics(clientPeerId).len == 4 + + # Unsubscribing from one of the content topics of each subscription + let + unsubscribeResponse1 = await wakuFilterClient.unsubscribe( + serverRemotePeerInfo, pubsubTopic, @[contentTopic] + ) + unsubscribeResponse2 = await wakuFilterClient.unsubscribe( + serverRemotePeerInfo, "other-pubsub-topic", @["other-content-topic"] + ) + + require: + unsubscribeResponse1.isOk() + unsubscribeResponse2.isOk() + wakuFilter.subscriptions.len == 1 + wakuFilter.subscriptions.hasKey(clientPeerId) + wakuFilter.getSubscribedContentTopics(clientPeerId).len == 2 + + # And a successful refresh of the partial subscription + let + refreshSubscriptionResponse1 = await wakuFilterClient.subscribe( + serverRemotePeerInfo, pubsubTopic, multipleContentTopicSeq + ) + refreshSubscriptionResponse2 = await wakuFilterClient.subscribe( + serverRemotePeerInfo, "other-pubsub-topic", multipleContentTopicSeq + ) + + require: + refreshSubscriptionResponse1.isOk() + refreshSubscriptionResponse2.isOk() + wakuFilter.subscriptions.len == 1 + wakuFilter.subscriptions.hasKey(clientPeerId) + wakuFilter.getSubscribedContentTopics(clientPeerId).len == 4 + + # When unsubscribing from one of the subscriptions + let unsubscribeResponse3 = await wakuFilterClient.unsubscribe( + serverRemotePeerInfo, pubsubTopic, multipleContentTopicSeq + ) + + # Then the unsubscription is successful + check: + unsubscribeResponse3.isOk() + wakuFilter.subscriptions.len == 1 + wakuFilter.subscriptions.hasKey(clientPeerId) + wakuFilter.getSubscribedContentTopics(clientPeerId).len == 2 + + # When unsubscribing from the other subscription + let unsubscribeResponse4 = await wakuFilterClient.unsubscribe( + serverRemotePeerInfo, "other-pubsub-topic", multipleContentTopicSeq + ) + + # Then the unsubscription is successful + check: + unsubscribeResponse4.isOk() + wakuFilter.subscriptions.len == 0 + + asyncTest "Without existing subscription": + # When unsubscribing from a non-existent subscription + let unsubscribeResponse = await wakuFilterClient.unsubscribe( + serverRemotePeerInfo, pubsubTopic, contentTopicSeq + ) + + # Then the unsubscription is not successful + check: + unsubscribeResponse.isErr() # Not subscribed + unsubscribeResponse.error().kind == FilterSubscribeErrorKind.NOT_FOUND + + asyncTest "With non existent pubsub topic": + # Given a valid subscription + let subscribeResponse = await wakuFilterClient.subscribe( + serverRemotePeerInfo, "pubsub-topic", contentTopicSeq + ) + require: + subscribeResponse.isOk() + wakuFilter.subscriptions.len == 1 + wakuFilter.subscriptions.hasKey(clientPeerId) + + # When unsubscribing from a pubsub topic that does not exist + let unsubscribeResponse = await wakuFilterClient.unsubscribe( + serverRemotePeerInfo, "non-existent-pubsub-topic", contentTopicSeq + ) + + # Then the unsubscription is not successful + check: + unsubscribeResponse.isErr() # Not subscribed + unsubscribeResponse.error().kind == FilterSubscribeErrorKind.NOT_FOUND + + asyncTest "With non existent content topic": + # Given a valid subscription + let subscribeResponse = await wakuFilterClient.subscribe( + serverRemotePeerInfo, pubsubTopic, contentTopicSeq + ) + require: + subscribeResponse.isOk() + wakuFilter.subscriptions.len == 1 + wakuFilter.subscriptions.hasKey(clientPeerId) + + # When unsubscribing from a content topic that does not exist + let unsubscribeResponse = await wakuFilterClient.unsubscribe( + serverRemotePeerInfo, pubsubTopic, @["non-existent-content-topic"] + ) + + # Then the unsubscription is not successful + check: + unsubscribeResponse.isErr() # Not subscribed + unsubscribeResponse.error().kind == FilterSubscribeErrorKind.NOT_FOUND + + asyncTest "Empty content topic": + # Given a valid subscription + let subscribeResponse = await wakuFilterClient.subscribe( + serverRemotePeerInfo, pubsubTopic, contentTopicSeq + ) + require: + subscribeResponse.isOk() + wakuFilter.subscriptions.len == 1 + wakuFilter.subscriptions.hasKey(clientPeerId) + + # When unsubscribing from an empty content topic + let unsubscribeResponse = await wakuFilterClient.unsubscribe( + serverRemotePeerInfo, pubsubTopic, @[] + ) + + # Then the unsubscription is not successful + check: + unsubscribeResponse.isErr() # Not subscribed + unsubscribeResponse.error().kind == FilterSubscribeErrorKind.BAD_REQUEST + + suite "Unsubscribe All": + asyncTest "Unsubscribe from All Topics, One PubSub Topic": + # Given a valid subscription + let subscribeResponse = await wakuFilterClient.subscribe( + serverRemotePeerInfo, pubsubTopic, contentTopicSeq + ) + require: + subscribeResponse.isOk() + wakuFilter.subscriptions.len == 1 + wakuFilter.subscriptions.hasKey(clientPeerId) + + # When unsubscribing from all topics + let unsubscribeResponse = await wakuFilterClient.unsubscribeAll( + serverRemotePeerInfo + ) + + # Then the unsubscription is successful + check: + unsubscribeResponse.isOk() + wakuFilter.subscriptions.len == 0 + + asyncTest "Unsubscribe from All Topics, Multiple PubSub Topics": + # Given a valid subscription + let subscribeResponse1 = await wakuFilterClient.subscribe( + serverRemotePeerInfo, pubsubTopic, contentTopicSeq + ) + let subscribeResponse2 = await wakuFilterClient.subscribe( + serverRemotePeerInfo, "other-pubsub-topic", contentTopicSeq + ) + require: + subscribeResponse1.isOk() + subscribeResponse2.isOk() + wakuFilter.subscriptions.len == 1 + wakuFilter.subscriptions.hasKey(clientPeerId) + + # When unsubscribing from all topics + let unsubscribeResponse = await wakuFilterClient.unsubscribeAll( + serverRemotePeerInfo + ) + + # Then the unsubscription is successful + check: + unsubscribeResponse.isOk() + wakuFilter.subscriptions.len == 0 + + asyncTest "Unsubscribe from All Topics from a non-subscribed Service": + # Given the client is not subscribed to a service + require: + wakuFilter.subscriptions.len == 0 + + # When unsubscribing from all topics for that client + let unsubscribeResponse = await wakuFilterClient.unsubscribeAll( + serverRemotePeerInfo + ) + + # Then the unsubscription is not successful + check: + unsubscribeResponse.isErr() # Not subscribed + unsubscribeResponse.error().kind == FilterSubscribeErrorKind.NOT_FOUND + + suite "Filter-Push": + asyncTest "Valid Payloads": + # Given a valid subscription + let subscribeResponse = await wakuFilterClient.subscribe( + serverRemotePeerInfo, pubsubTopic, contentTopicSeq + ) + require: + subscribeResponse.isOk() + wakuFilter.subscriptions.len == 1 + wakuFilter.subscriptions.hasKey(clientPeerId) + + # And some extra payloads + let + JSON_DICTIONARY = getSampleJsonDictionary() + JSON_LIST = getSampleJsonList() + + # And some valid messages + let + msg1 = fakeWakuMessage(contentTopic=contentTopic, payload=ALPHABETIC) + msg2 = fakeWakuMessage(contentTopic=contentTopic, payload=ALPHANUMERIC) + msg3 = fakeWakuMessage(contentTopic=contentTopic, payload=ALPHANUMERIC_SPECIAL) + msg4 = fakeWakuMessage(contentTopic=contentTopic, payload=EMOJI) + msg5 = fakeWakuMessage(contentTopic=contentTopic, payload=CODE) + msg6 = fakeWakuMessage(contentTopic=contentTopic, payload=QUERY) + msg7 = fakeWakuMessage(contentTopic=contentTopic, payload= $JSON_DICTIONARY) + msg8 = fakeWakuMessage(contentTopic=contentTopic, payload= $JSON_LIST) + msg9 = fakeWakuMessage(contentTopic=contentTopic, payload=TEXT_SMALL) + msg10 = fakeWakuMessage(contentTopic=contentTopic, payload=TEXT_LARGE) + + # When sending the alphabetic message + await wakuFilter.handleMessage(pubsubTopic, msg1) + + # Then the message is pushed to the client + require await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) + let (pushedMsgPubsubTopic1, pushedMsg1) = pushHandlerFuture.read() + + check: + pushedMsgPubsubTopic1 == pubsubTopic + pushedMsg1 == msg1 + msg1.payload.toString() == ALPHABETIC + + # When sending the alphanumeric message + pushHandlerFuture = newPushHandlerFuture() # Clear previous future + await wakuFilter.handleMessage(pubsubTopic, msg2) + + # Then the message is pushed to the client + require await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) + let (pushedMsgPubsubTopic2, pushedMsg2) = pushHandlerFuture.read() + check: + pushedMsgPubsubTopic2 == pubsubTopic + pushedMsg2 == msg2 + msg2.payload.toString() == ALPHANUMERIC + + # When sending the alphanumeric special message + pushHandlerFuture = newPushHandlerFuture() # Clear previous future + await wakuFilter.handleMessage(pubsubTopic, msg3) + + # Then the message is pushed to the client + require await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) + let (pushedMsgPubsubTopic3, pushedMsg3) = pushHandlerFuture.read() + check: + pushedMsgPubsubTopic3 == pubsubTopic + pushedMsg3 == msg3 + msg3.payload.toString() == ALPHANUMERIC_SPECIAL + + # When sending the emoji message + pushHandlerFuture = newPushHandlerFuture() # Clear previous future + await wakuFilter.handleMessage(pubsubTopic, msg4) + + # Then the message is pushed to the client + require await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) + let (pushedMsgPubsubTopic4, pushedMsg4) = pushHandlerFuture.read() + check: + pushedMsgPubsubTopic4 == pubsubTopic + pushedMsg4 == msg4 + msg4.payload.toString() == EMOJI + + # When sending the code message + pushHandlerFuture = newPushHandlerFuture() # Clear previous future + await wakuFilter.handleMessage(pubsubTopic, msg5) + + # Then the message is pushed to the client + require await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) + let (pushedMsgPubsubTopic5, pushedMsg5) = pushHandlerFuture.read() + check: + pushedMsgPubsubTopic5 == pubsubTopic + pushedMsg5 == msg5 + msg5.payload.toString() == CODE + + # When sending the query message + pushHandlerFuture = newPushHandlerFuture() # Clear previous future + await wakuFilter.handleMessage(pubsubTopic, msg6) + + # Then the message is pushed to the client + require await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) + let (pushedMsgPubsubTopic6, pushedMsg6) = pushHandlerFuture.read() + check: + pushedMsgPubsubTopic6 == pubsubTopic + pushedMsg6 == msg6 + msg6.payload.toString() == QUERY + + # When sending the table message + pushHandlerFuture = newPushHandlerFuture() # Clear previous future + await wakuFilter.handleMessage(pubsubTopic, msg7) + + # Then the message is pushed to the client + require await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) + let (pushedMsgPubsubTopic7, pushedMsg7) = pushHandlerFuture.read() + check: + pushedMsgPubsubTopic7 == pubsubTopic + pushedMsg7 == msg7 + msg7.payload.toString() == $JSON_DICTIONARY + + # When sending the list message + pushHandlerFuture = newPushHandlerFuture() # Clear previous future + await wakuFilter.handleMessage(pubsubTopic, msg8) + + # Then the message is pushed to the client + require await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) + let (pushedMsgPubsubTopic8, pushedMsg8) = pushHandlerFuture.read() + check: + pushedMsgPubsubTopic8 == pubsubTopic + pushedMsg8 == msg8 + msg8.payload.toString() == $JSON_LIST + + # When sending the small text message + pushHandlerFuture = newPushHandlerFuture() # Clear previous future + await wakuFilter.handleMessage(pubsubTopic, msg9) + + # Then the message is pushed to the client + require await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) + let (pushedMsgPubsubTopic9, pushedMsg9) = pushHandlerFuture.read() + check: + pushedMsgPubsubTopic9 == pubsubTopic + pushedMsg9 == msg9 + msg9.payload.toString() == TEXT_SMALL + + # When sending the large text message + pushHandlerFuture = newPushHandlerFuture() # Clear previous future + await wakuFilter.handleMessage(pubsubTopic, msg10) + + # Then the message is pushed to the client + require await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) + let (pushedMsgPubsubTopic10, pushedMsg10) = pushHandlerFuture.read() + check: + pushedMsgPubsubTopic10 == pubsubTopic + pushedMsg10 == msg10 + msg10.payload.toString() == TEXT_LARGE + + suite "Security and Privacy": + asyncTest "Filter Client can receive messages after Client and Server reboot": + # Given a clean client and server + require: + wakuFilter.subscriptions.len == 0 + + # When subscribing to a topic + let subscribeResponse = await wakuFilterClient.subscribe( + serverRemotePeerInfo, pubsubTopic, contentTopicSeq + ) + + # Then the subscription is successful + check: + subscribeResponse.isOk() + wakuFilter.subscriptions.len == 1 + wakuFilter.subscriptions.hasKey(clientPeerId) + + # When both are stopped and started + waitFor allFutures(wakuFilter.stop(), wakuFilterClient.stop()) + waitFor allFutures(wakuFilter.start(), wakuFilterClient.start()) + + # Then the suscription is maintained + check: + wakuFilter.subscriptions.len == 1 + + # When sending a message to the subscription + let msg1 = fakeWakuMessage(contentTopic=contentTopic) + await wakuFilter.handleMessage(pubsubTopic, msg1) + + # Then the message is pushed to the client + require await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) + let (pushedMsgPubsubTopic, pushedMsg) = pushHandlerFuture.read() + check: + pushedMsgPubsubTopic == pubsubTopic + pushedMsg == msg1 + + # When refreshing the subscription after reboot + let refreshSubscriptionResponse = await wakuFilterClient.subscribe( + serverRemotePeerInfo, pubsubTopic, contentTopicSeq + ) + + # Then the refreshment is successful + check: + refreshSubscriptionResponse.isOk() + wakuFilter.subscriptions.len == 1 + wakuFilter.subscriptions.hasKey(clientPeerId) + + # When sending a message to the refreshed subscription + pushHandlerFuture = newPushHandlerFuture() # Clear previous future + let msg2 = fakeWakuMessage(contentTopic=contentTopic) + await wakuFilter.handleMessage(pubsubTopic, msg2) + + # Then the message is pushed to the client + require await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) + let (pushedMsgPubsubTopic2, pushedMsg2) = pushHandlerFuture.read() + check: + pushedMsgPubsubTopic2 == pubsubTopic + pushedMsg2 == msg2 + + asyncTest "Filter Client can receive messages after subscribing and stopping without unsubscribing": + # Given a valid subscription + let subscribeResponse = await wakuFilterClient.subscribe( + serverRemotePeerInfo, pubsubTopic, contentTopicSeq + ) + require: + subscribeResponse.isOk() + wakuFilter.subscriptions.len == 1 + wakuFilter.subscriptions.hasKey(clientPeerId) + + # When the client is stopped + await wakuFilterClient.stop() + + # Then the subscription is not removed + check: + wakuFilter.subscriptions.len == 1 + wakuFilter.subscriptions.hasKey(clientPeerId) + + # When the server receives a message + let msg = fakeWakuMessage(contentTopic=contentTopic) + await wakuFilter.handleMessage(pubsubTopic, msg) + + # Then the client receives the message + require await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) + let (pushedMsgPubsubTopic, pushedMsg) = pushHandlerFuture.read() + check: + pushedMsgPubsubTopic == pubsubTopic + pushedMsg == msg + suite "MessagePushHandler - Msg List": var serverSwitch {.threadvar.}: Switch var clientSwitch {.threadvar.}: Switch diff --git a/waku/waku_filter_v2/protocol.nim b/waku/waku_filter_v2/protocol.nim index 3b9e607b52..5a505960b2 100644 --- a/waku/waku_filter_v2/protocol.nim +++ b/waku/waku_filter_v2/protocol.nim @@ -86,7 +86,11 @@ proc unsubscribe(wf: WakuFilter, peerId: PeerID, pubsubTopic: Option[PubsubTopic return err(FilterSubscribeError.notFound()) var peerSubscription = wf.subscriptions.mgetOrPut(peerId, initHashSet[FilterCriterion]()) - # TODO: consider error response if filter criteria does not exist + + if not peerSubscription.containsAny(filterCriteria): + debug "unsubscribing peer is not subscribed to any of the content topics in this pubsub topic", peerId=peerId, pubsubTopic=pubsubTopic.get(), contentTopics=contentTopics + return err(FilterSubscribeError.notFound()) + peerSubscription.excl(filterCriteria) if peerSubscription.len() == 0: diff --git a/waku/waku_filter_v2/subscriptions.nim b/waku/waku_filter_v2/subscriptions.nim index 68ae9e4d45..bd248f54cd 100644 --- a/waku/waku_filter_v2/subscriptions.nim +++ b/waku/waku_filter_v2/subscriptions.nim @@ -43,3 +43,11 @@ proc removePeers*(subscriptions: var FilterSubscriptions, peerIds: seq[PeerID]) ## Remove all subscriptions for a given list of peers for peerId in peerIds: subscriptions.removePeer(peerId) + +proc containsAny*(criteria: FilterCriteria, otherCriteria: FilterCriteria): bool = + ## Check if a given pubsub topic is contained in a set of filter criteria + ## TODO: Better way to achieve this? + for criterion in otherCriteria: + if criterion in criteria: + return true + false From 9c4fdac68e86ac1c914729248dbad84c89301e97 Mon Sep 17 00:00:00 2001 From: gabrielmer <101006718+gabrielmer@users.noreply.github.com> Date: Wed, 15 Nov 2023 15:26:40 +0200 Subject: [PATCH 119/274] chore(release): update changelog for v0.22.0 release (#2216) --- CHANGELOG.md | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5b5db7859e..3f923f2308 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,67 @@ +## v0.22.0 (2023-11-15) + +> Note: The `--topic` option is now deprecated in favor of a more specific options `--pubsub-topic` & `--content-topic` + +> Note: The `--ext-multiaddr-only` CLI flag was introduced for cases in which the user wants to manually set their announced addresses + +## What's Changed + +Release highlights: +* simplified the process of generating RLN credentials through the new `generateRlnKeystore` subcommand +* added support for configuration of port 0 in order to bind to kernel selected ports +* shards are now automatically updated in metadata protocol when supported shards change on runtime +* introduced `messageHash` attribute to SQLite which will later replace the `id` attribute + +### Features + +- rln-keystore-generator is now a subcommand ([#2189](https://github.com/waku-org/nwaku/issues/2189)) ([3498a846](https://github.com/waku-org/nwaku/commit/3498a846)) +- amending computeDigest func. + related test cases ([#2132](https://github.com/waku-org/nwaku/issues/2132))" ([#2180](https://github.com/waku-org/nwaku/issues/2180)) ([d7ef3ca1](https://github.com/waku-org/nwaku/commit/d7ef3ca1)) +- **discv5:** filter out peers without any listed capability ([#2186](https://github.com/waku-org/nwaku/issues/2186)) ([200a11da](https://github.com/waku-org/nwaku/commit/200a11da)) +- metadata protocol shard subscription ([#2149](https://github.com/waku-org/nwaku/issues/2149)) ([bcf8e963](https://github.com/waku-org/nwaku/commit/bcf8e963)) +- REST APIs discovery handlers ([#2109](https://github.com/waku-org/nwaku/issues/2109)) ([7ca516a5](https://github.com/waku-org/nwaku/commit/7ca516a5)) +- implementing port 0 support ([#2125](https://github.com/waku-org/nwaku/issues/2125)) ([f7b9afc2](https://github.com/waku-org/nwaku/commit/f7b9afc2)) +- messageHash attribute added in SQLite + testcase ([#2142](https://github.com/waku-org/nwaku/issues/2142))" ([#2154](https://github.com/waku-org/nwaku/issues/2154)) ([13aeebe4](https://github.com/waku-org/nwaku/commit/13aeebe4)) +- messageHash attribute added in SQLite + testcase ([#2142](https://github.com/waku-org/nwaku/issues/2142)) ([9cd8c73d](https://github.com/waku-org/nwaku/commit/9cd8c73d)) +- amending computeDigest func. + related test cases ([#2132](https://github.com/waku-org/nwaku/issues/2132)) ([1669f710](https://github.com/waku-org/nwaku/commit/1669f710)) + +### Bug Fixes + +- typo ([6dd28063](https://github.com/waku-org/nwaku/commit/6dd28063)) +- lightpush rest ([#2176](https://github.com/waku-org/nwaku/issues/2176)) ([fa467e24](https://github.com/waku-org/nwaku/commit/fa467e24)) +- **ci:** fix Docker tag for latest and release jobs ([52759faa](https://github.com/waku-org/nwaku/commit/52759faa)) +- **rest:** fix bug in rest api when sending rln message ([#2169](https://github.com/waku-org/nwaku/issues/2169)) ([250e8b98](https://github.com/waku-org/nwaku/commit/250e8b98)) +- updating v0.21.1 release date in changelog ([#2160](https://github.com/waku-org/nwaku/issues/2160)) ([3be61636](https://github.com/waku-org/nwaku/commit/3be61636)) + +### Changes + +- Optimize postgres - prepared statements in select ([#2182](https://github.com/waku-org/nwaku/issues/2182)) ([6da1aeec](https://github.com/waku-org/nwaku/commit/6da1aeec)) +- **release:** update changelog for v0.21.2 release ([#2188](https://github.com/waku-org/nwaku/issues/2188)) ([d0a93e7c](https://github.com/waku-org/nwaku/commit/d0a93e7c)) +- upgrade dependencies v0.22 ([#2185](https://github.com/waku-org/nwaku/issues/2185)) ([b9563ae0](https://github.com/waku-org/nwaku/commit/b9563ae0)) +- Optimize postgres - use of rowCallback approach ([#2171](https://github.com/waku-org/nwaku/issues/2171)) ([2b4ca4d0](https://github.com/waku-org/nwaku/commit/2b4ca4d0)) +- **networking:** lower dhigh to limit amplification factor ([#2168](https://github.com/waku-org/nwaku/issues/2168)) ([f0f69b32](https://github.com/waku-org/nwaku/commit/f0f69b32)) +- Minor Postgres optimizations ([#2166](https://github.com/waku-org/nwaku/issues/2166)) ([282c2e81](https://github.com/waku-org/nwaku/commit/282c2e81)) +- adding patch release instructions to release doc ([#2157](https://github.com/waku-org/nwaku/issues/2157)) ([cc01bb07](https://github.com/waku-org/nwaku/commit/cc01bb07)) +- **release:** update changelog for v0.21.1 release ([#2155](https://github.com/waku-org/nwaku/issues/2155)) ([b109a583](https://github.com/waku-org/nwaku/commit/b109a583)) +- adding ext-multiaddr-only CLI flag ([#2141](https://github.com/waku-org/nwaku/issues/2141)) ([944dfdaa](https://github.com/waku-org/nwaku/commit/944dfdaa)) +- bumping nim-libp2p to include WSS fix ([#2150](https://github.com/waku-org/nwaku/issues/2150)) ([817a7b2e](https://github.com/waku-org/nwaku/commit/817a7b2e)) +- **cbindings:** avoid using global var in libwaku.nim ([#2118](https://github.com/waku-org/nwaku/issues/2118)) ([1e8f5771](https://github.com/waku-org/nwaku/commit/1e8f5771)) +- adding postgres flag to manual docker job instructions ([#2139](https://github.com/waku-org/nwaku/issues/2139)) ([459331e3](https://github.com/waku-org/nwaku/commit/459331e3)) + +This release supports the following [libp2p protocols](https://docs.libp2p.io/concepts/protocols/): +| Protocol | Spec status | Protocol id | +| ---: | :---: | :--- | +| [`11/WAKU2-RELAY`](https://rfc.vac.dev/spec/11/) | `stable` | `/vac/waku/relay/2.0.0` | +| [`12/WAKU2-FILTER`](https://rfc.vac.dev/spec/12/) | `draft` | `/vac/waku/filter/2.0.0-beta1`
`/vac/waku/filter-subscribe/2.0.0-beta1`
`/vac/waku/filter-push/2.0.0-beta1` | +| [`13/WAKU2-STORE`](https://rfc.vac.dev/spec/13/) | `draft` | `/vac/waku/store/2.0.0-beta4` | +| [`19/WAKU2-LIGHTPUSH`](https://rfc.vac.dev/spec/19/) | `draft` | `/vac/waku/lightpush/2.0.0-beta1` | +| [`66/WAKU2-METADATA`](https://rfc.vac.dev/spec/66/) | `raw` | `/vac/waku/metadata/1.0.0` | + +The Waku v1 implementation has been removed from this repository and can be found in a separate [Waku Legacy](https://github.com/waku-org/waku-legacy) repository. + +## Upgrade instructions + +* Note that the `--topic` CLI option is now deprecated in favor of a more specific options `--pubsub-topic` & `--content-topic`. + ## v0.21.3 (2023-11-09) This patch release adds the following feature: From f5f431382bb0e99f3dae68bec72e91ccf8ada177 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lex=20Cabeza=20Romero?= Date: Wed, 15 Nov 2023 16:11:36 +0100 Subject: [PATCH 120/274] test(waku-relay): Relay (#2101) * Implement message id tests. * Implement relay tests. * Update import paths to use test_all. --- tests/all_tests_waku.nim | 11 +- .../test_data.nim => resources/payloads.nim} | 7 + tests/testlib/futures.nim | 3 + tests/waku_filter_v2/test_all.nim | 3 +- tests/waku_filter_v2/test_waku_client.nim | 2 +- tests/waku_relay/crypto_utils.nim | 47 + tests/waku_relay/test_all.nim | 4 +- tests/waku_relay/test_message_id.nim | 37 + tests/waku_relay/test_protocol.nim | 1301 +++++++++++++++++ tests/waku_relay/test_waku_relay.nim | 22 +- tests/waku_relay/utils.nim | 29 + waku/waku_relay/protocol.nim | 6 +- 12 files changed, 1439 insertions(+), 33 deletions(-) rename tests/{waku_filter_v2/test_data.nim => resources/payloads.nim} (91%) create mode 100644 tests/waku_relay/crypto_utils.nim create mode 100644 tests/waku_relay/test_message_id.nim create mode 100644 tests/waku_relay/test_protocol.nim create mode 100644 tests/waku_relay/utils.nim diff --git a/tests/all_tests_waku.nim b/tests/all_tests_waku.nim index 7bd5ca0dfb..97039c1ecf 100644 --- a/tests/all_tests_waku.nim +++ b/tests/all_tests_waku.nim @@ -40,15 +40,10 @@ when defined(waku_exp_store_resume): import ./waku_store/test_resume -# Waku relay test suite -import - ./waku_relay/test_waku_relay, - ./waku_relay/test_wakunode_relay +import + ./waku_relay/test_all + ./waku_filter_v2/test_all -# Waku filter test suite -import - ./waku_filter_v2/test_waku_client, - ./waku_filter_v2/test_waku_filter_protocol import # Waku v2 tests diff --git a/tests/waku_filter_v2/test_data.nim b/tests/resources/payloads.nim similarity index 91% rename from tests/waku_filter_v2/test_data.nim rename to tests/resources/payloads.nim index bc3ccb78e0..d2f74e9f11 100644 --- a/tests/waku_filter_v2/test_data.nim +++ b/tests/resources/payloads.nim @@ -68,3 +68,10 @@ proc getSampleJsonList*(): JsonNode = "name": "Oberon" }, ] + + +proc getByteSequence*(bytesNumber: int): seq[byte] = + result = newSeq[byte](bytesNumber) + for i in 0 ..< bytesNumber: + result[i] = cast[byte](i mod 256) + return result diff --git a/tests/testlib/futures.nim b/tests/testlib/futures.nim index 8981516e4b..ffed6a5db2 100644 --- a/tests/testlib/futures.nim +++ b/tests/testlib/futures.nim @@ -6,3 +6,6 @@ import ../../../waku/waku_core/message proc newPushHandlerFuture*(): Future[(string, WakuMessage)] = newFuture[(string, WakuMessage)]() + +proc newBoolFuture*(): Future[bool] = + newFuture[bool]() diff --git a/tests/waku_filter_v2/test_all.nim b/tests/waku_filter_v2/test_all.nim index b3856d1b7e..a91b8ba4bc 100644 --- a/tests/waku_filter_v2/test_all.nim +++ b/tests/waku_filter_v2/test_all.nim @@ -2,5 +2,4 @@ import ./test_waku_client, - ./test_waku_filter_protocol, - ./test_waku_filter + ./test_waku_filter_protocol diff --git a/tests/waku_filter_v2/test_waku_client.nim b/tests/waku_filter_v2/test_waku_client.nim index 9187638921..218764ff33 100644 --- a/tests/waku_filter_v2/test_waku_client.nim +++ b/tests/waku_filter_v2/test_waku_client.nim @@ -36,7 +36,7 @@ import sequtils ], ./waku_filter_utils.nim, - ./test_data.nim + ../resources/payloads.nim let FUTURE_TIMEOUT = 1.seconds diff --git a/tests/waku_relay/crypto_utils.nim b/tests/waku_relay/crypto_utils.nim new file mode 100644 index 0000000000..73347dfb5f --- /dev/null +++ b/tests/waku_relay/crypto_utils.nim @@ -0,0 +1,47 @@ +# Source: nimcrypto/examples/cfb.nim + + +import nimcrypto + + +proc cfbEncode*(key: string, iv: string, data: string): seq[byte] = + var context: CFB[aes256] + var pKey: array[aes256.sizeKey, byte] + var pIv: array[aes256.sizeBlock, byte] + var pData = newSeq[byte](len(data)) + var encodedData = newSeq[byte](len(data)) + + copyMem(addr pData[0], unsafeAddr data[0], len(data)) + # WARNING! Do not use 0 byte padding in applications, this is done as example. + copyMem(addr pKey[0], unsafeAddr key[0], len(key)) + copyMem(addr pIv[0], unsafeAddr iv[0], len(iv)) + + # Initialization of CFB[aes256] context with encryption key + context.init(pKey, pIv) + # Encryption process + context.encrypt(pData, encodedData) + # Clear context of CFB[aes256] + context.clear() + + return encodedData + + +proc cfbDecode*(key: string, iv: string, encodedData: seq[byte]): seq[byte] = + var context: CFB[aes256] + var pKey: array[aes256.sizeKey, byte] + var pIv: array[aes256.sizeBlock, byte] + var decodedData = newSeq[byte](len(encodedData)) + + # copyMem(addr _data[0], addr data[0], len(data)) + # WARNING! Do not use 0 byte padding in applications, this is done as example. + copyMem(addr pKey[0], unsafeAddr key[0], len(key)) + copyMem(addr pIv[0], unsafeAddr iv[0], len(iv)) + + # Initialization of CFB[aes256] context with encryption key + context.init(pKey, pIv) + # Decryption process + context.decrypt(encodedData, decodedData) + # Clear context of CFB[aes256] + context.clear() + + return decodedData diff --git a/tests/waku_relay/test_all.nim b/tests/waku_relay/test_all.nim index 9131aeb5ee..a615f0e4e6 100644 --- a/tests/waku_relay/test_all.nim +++ b/tests/waku_relay/test_all.nim @@ -2,4 +2,6 @@ import ./test_waku_relay, - ./test_wakunode_relay + ./test_wakunode_relay, + ./test_message_id, + ./test_protocol diff --git a/tests/waku_relay/test_message_id.nim b/tests/waku_relay/test_message_id.nim new file mode 100644 index 0000000000..7cf3d4402f --- /dev/null +++ b/tests/waku_relay/test_message_id.nim @@ -0,0 +1,37 @@ +import + unittest, + stew/shims/net, + stew/[results, byteutils] + +import + stew/results, + nimcrypto/sha2, + libp2p/protocols/pubsub/rpc/messages, + ../../../waku/waku_relay/message_id, + ../testlib/sequtils + + +suite "Message ID Provider": + test "Non-empty string": + let message = Message(data: "Hello, world!".toBytes()) + let result = defaultMessageIdProvider(message) + let expected = MDigest[256].fromHex("315f5bdb76d078c43b8ac0064e4a0164612b1fce77c869345bfc94c75894edd3") + check: + result.isOk() + result.get() == expected.data + + test "Empty string": + let message = Message(data: "".toBytes()) + let result = defaultMessageIdProvider(message) + let expected = MDigest[256].fromHex("E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855") + check: + result.isOk() + result.get() == expected.data + + test "Empty array": + let message = Message(data: @[]) + let result = defaultMessageIdProvider(message) + let expected = MDigest[256].fromHex("E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855") + check: + result.isOk() + result.get() == expected.data diff --git a/tests/waku_relay/test_protocol.nim b/tests/waku_relay/test_protocol.nim new file mode 100644 index 0000000000..17c8d902c3 --- /dev/null +++ b/tests/waku_relay/test_protocol.nim @@ -0,0 +1,1301 @@ +{.used.} + +import + std/[options, sequtils, strutils], + stew/shims/net as stewNet, + testutils/unittests, + chronicles, + chronos, + libp2p/protocols/pubsub/[ + pubsub, + gossipsub + ], + libp2p/[ + multihash, + stream/connection, + switch + ], + ./crypto_utils, + std/json + +import + ../../../waku/[ + node/peer_manager, + waku_relay/protocol, + waku_relay, + waku_core + ], + ../testlib/[ + wakucore, + testasync, + testutils, + futures, + sequtils + ], + ./utils, + ../resources/payloads + + +suite "Waku Relay": + var messageSeq {.threadvar.}: seq[(PubsubTopic, WakuMessage)] + var handlerFuture {.threadvar.}: Future[(PubsubTopic, WakuMessage)] + var simpleFutureHandler {.threadvar.}: WakuRelayHandler + var switch {.threadvar.}: Switch + var peerManager {.threadvar.}: PeerManager + var node {.threadvar.}: WakuRelay + var remotePeerInfo {.threadvar.}: RemotePeerInfo + var peerId {.threadvar.}: PeerId + var contentTopic {.threadvar.}: ContentTopic + var pubsubTopic {.threadvar.}: PubsubTopic + var pubsubTopicSeq {.threadvar.}: seq[PubsubTopic] + var testMessage {.threadvar.}: string + var wakuMessage {.threadvar.}: WakuMessage + + asyncSetup: + messageSeq = @[] + handlerFuture = newPushHandlerFuture() + simpleFutureHandler = proc( + topic: PubsubTopic, msg: WakuMessage + ): Future[void] {.async, closure, gcsafe.} = + messageSeq.add((topic, msg)) + handlerFuture.complete((topic, msg)) + + switch = newTestSwitch() + peerManager = PeerManager.new(switch) + node = await newTestWakuRelay(switch) + + testMessage = "test-message" + contentTopic = DefaultContentTopic + pubsubTopic = DefaultPubsubTopic + pubsubTopicSeq = @[pubsubTopic] + wakuMessage = fakeWakuMessage(testMessage, pubsubTopic) + + await allFutures(switch.start(), node.start()) + + remotePeerInfo = switch.peerInfo.toRemotePeerInfo() + peerId = remotePeerInfo.peerId + + asyncTeardown: + await allFutures(switch.stop(), node.stop()) + + suite "Subscribe": + asyncTest "Publish without Subscription": + # When publishing a message without being subscribed + discard await node.publish(pubsubTopic, wakuMessage) + + # Then the message is not published + check: + not await handlerFuture.withTimeout(3.seconds) + + asyncTest "Publish with Subscription (Network Size: 1)": + # When subscribing to a Pubsub Topic + discard node.subscribe(pubsubTopic, simpleFutureHandler) + + # Then the node is subscribed + check: + node.isSubscribed(pubsubTopic) + node.subscribedTopics == pubsubTopicSeq + + # When publishing a message + discard await node.publish(pubsubTopic, wakuMessage) + + # Then the message is published + assert (await handlerFuture.withTimeout(3.seconds)) + let (topic, msg) = handlerFuture.read() + check: + topic == pubsubTopic + msg == wakuMessage + + asyncTest "Pubsub Topic Subscription (Network Size: 2, only one subscribed)": + # Given a second node connected to the first one + let + otherSwitch = newTestSwitch() + otherNode = await newTestWakuRelay(otherSwitch) + + await allFutures(otherSwitch.start(), otherNode.start()) + let otherRemotePeerInfo = otherSwitch.peerInfo.toRemotePeerInfo() + check await peerManager.connectRelay(otherRemotePeerInfo) + + var otherHandlerFuture = newPushHandlerFuture() + proc otherSimpleFutureHandler(topic: PubsubTopic, message: WakuMessage) {.async, gcsafe.} = + otherHandlerFuture.complete((topic, message)) + + # When subscribing the second node to the Pubsub Topic + discard otherNode.subscribe(pubsubTopic, otherSimpleFutureHandler) + + # Then the second node is subscribed, but not the first one + check: + not node.isSubscribed(pubsubTopic) + node.subscribedTopics != pubsubTopicSeq + otherNode.isSubscribed(pubsubTopic) + otherNode.subscribedTopics == pubsubTopicSeq + + await sleepAsync(500.millis) + + # When publishing a message in the subscribed node + let fromOtherWakuMessage = fakeWakuMessage("fromOther") + discard await otherNode.publish(pubsubTopic, fromOtherWakuMessage) + + # Then the message is published only in the subscribed node + check: + not await handlerFuture.withTimeout(3.seconds) + await otherHandlerFuture.withTimeout(3.seconds) + + let (otherTopic1, otherMessage1) = otherHandlerFuture.read() + check: + otherTopic1 == pubsubTopic + otherMessage1 == fromOtherWakuMessage + + # When publishing a message in the other node + handlerFuture = newPushHandlerFuture() + otherHandlerFuture = newPushHandlerFuture() + let fromNodeWakuMessage = fakeWakuMessage("fromNode") + discard await node.publish(pubsubTopic, fromNodeWakuMessage) + + # Then the message is published only in the subscribed node + check: + not await handlerFuture.withTimeout(3.seconds) + await otherHandlerFuture.withTimeout(3.seconds) + + let (otherTopic2, otherMessage2) = otherHandlerFuture.read() + check: + otherTopic2 == pubsubTopic + otherMessage2 == fromNodeWakuMessage + + # Finally stop the other node + await allFutures(otherSwitch.stop(), otherNode.stop()) + + asyncTest "Pubsub Topic Subscription (Network Size: 2, both subscribed to same pubsub topic)": + # Given a second node connected to the first one + let + otherSwitch = newTestSwitch() + otherNode = await newTestWakuRelay(otherSwitch) + + await allFutures(otherSwitch.start(), otherNode.start()) + let otherRemotePeerInfo = otherSwitch.peerInfo.toRemotePeerInfo() + check await peerManager.connectRelay(otherRemotePeerInfo) + + var otherHandlerFuture = newPushHandlerFuture() + proc otherSimpleFutureHandler(topic: PubsubTopic, message: WakuMessage) {.async, gcsafe.} = + otherHandlerFuture.complete((topic, message)) + + # When subscribing both nodes to the same Pubsub Topic + discard node.subscribe(pubsubTopic, simpleFutureHandler) + discard otherNode.subscribe(pubsubTopic, otherSimpleFutureHandler) + + # Then both nodes are subscribed + check: + node.isSubscribed(pubsubTopic) + node.subscribedTopics == pubsubTopicSeq + otherNode.isSubscribed(pubsubTopic) + otherNode.subscribedTopics == pubsubTopicSeq + + await sleepAsync(500.millis) + + # When publishing a message in node + let fromOtherWakuMessage = fakeWakuMessage("fromOther") + discard await node.publish(pubsubTopic, fromOtherWakuMessage) + + # Then the message is published in both nodes + check: + await handlerFuture.withTimeout(3.seconds) + await otherHandlerFuture.withTimeout(3.seconds) + + let + (topic1, message1) = handlerFuture.read() + (otherTopic1, otherMessage1) = otherHandlerFuture.read() + check: + topic1 == pubsubTopic + message1 == fromOtherWakuMessage + otherTopic1 == pubsubTopic + otherMessage1 == fromOtherWakuMessage + + # When publishing a message in the other node + handlerFuture = newPushHandlerFuture() + otherHandlerFuture = newPushHandlerFuture() + let fromNodeWakuMessage = fakeWakuMessage("fromNode") + discard await node.publish(pubsubTopic, fromNodeWakuMessage) + discard await otherNode.publish(pubsubTopic, fromNodeWakuMessage) + + # Then the message is published in both nodes + check: + await handlerFuture.withTimeout(3.seconds) + await otherHandlerFuture.withTimeout(3.seconds) + + let + (topic2, message2) = handlerFuture.read() + (otherTopic2, otherMessage2) = otherHandlerFuture.read() + check: + topic2 == pubsubTopic + message2 == fromNodeWakuMessage + otherTopic2 == pubsubTopic + otherMessage2 == fromNodeWakuMessage + + # Finally stop the other node + await allFutures(otherSwitch.stop(), otherNode.stop()) + + asyncTest "Refreshing subscription": + # Given a subscribed node + node.subscribe(pubsubTopic, simpleFutureHandler) + check: + node.isSubscribed(pubsubTopic) + node.subscribedTopics == pubsubTopicSeq + let otherWakuMessage = fakeWakuMessage("fromOther") + discard await node.publish(pubsubTopic, otherWakuMessage) + check: + messageSeq == @[(pubsubTopic, otherWakuMessage)] + + # Given the subscription is refreshed + var otherHandlerFuture = newPushHandlerFuture() + proc otherSimpleFutureHandler(topic: PubsubTopic, message: WakuMessage) {.async, gcsafe.} = + otherHandlerFuture.complete((topic, message)) + node.subscribe(pubsubTopic, otherSimpleFutureHandler) + check: + node.isSubscribed(pubsubTopic) + node.subscribedTopics == pubsubTopicSeq + messageSeq == @[(pubsubTopic, otherWakuMessage)] + + # When publishing a message with the refreshed subscription + handlerFuture = newPushHandlerFuture() + discard await node.publish(pubsubTopic, wakuMessage) + + # Then the message is published + check (await handlerFuture.withTimeout(3.seconds)) + let (topic, msg) = handlerFuture.read() + check: + topic == pubsubTopic + msg == wakuMessage + messageSeq == @[(pubsubTopic, otherWakuMessage), (pubsubTopic, wakuMessage)] + + asyncTest "With additional validator": + # Given a simple validator + var validatorFuture = newBoolFuture() + let len4Validator = proc( + pubsubTopic: string, message: WakuMessage + ): Future[ValidationResult] {.async.} = + if message.payload.len() == 8: + validatorFuture.complete(true) + return ValidationResult.Accept + else: + validatorFuture.complete(false) + return ValidationResult.Reject + + # And a second node connected to the first one + let + otherSwitch = newTestSwitch() + otherNode = await newTestWakuRelay(otherSwitch) + + await allFutures(otherSwitch.start(), otherNode.start()) + let otherRemotePeerInfo = otherSwitch.peerInfo.toRemotePeerInfo() + check await peerManager.connectRelay(otherRemotePeerInfo) + + var otherHandlerFuture = newPushHandlerFuture() + proc otherSimpleFutureHandler(topic: PubsubTopic, message: WakuMessage) {.async, gcsafe.} = + otherHandlerFuture.complete((topic, message)) + + otherNode.addValidator(pubsubTopic, len4Validator) + otherNode.subscribe(pubsubTopic, otherSimpleFutureHandler) + await sleepAsync(500.millis) + check: + otherNode.isSubscribed(pubsubTopic) + + # Given a subscribed node with a validator + node.addValidator(pubsubTopic, len4Validator) + node.subscribe(pubsubTopic, simpleFutureHandler) + await sleepAsync(500.millis) + check: + node.isSubscribed(pubsubTopic) + node.subscribedTopics == pubsubTopicSeq + otherNode.isSubscribed(pubsubTopic) + otherNode.subscribedTopics == pubsubTopicSeq + + # When publishing a message that doesn't match the validator + discard await node.publish(pubsubTopic, wakuMessage) + + # Then the validator is ran in the other node, and fails + # Not run in the self node + check: + await validatorFuture.withTimeout(3.seconds) + validatorFuture.read() == false + + # And the message is published in the self node, but not in the other node, + # because it doesn't pass the validator check. + check: + await handlerFuture.withTimeout(3.seconds) + not await otherHandlerFuture.withTimeout(3.seconds) + let (topic1, msg1) = handlerFuture.read() + # let (otherTopic1, otherMsg1) = otherHandlerFuture.read() + check: + topic1 == pubsubTopic + msg1 == wakuMessage + # otherTopic1 == pubsubTopic + # otherMsg1 == wakuMessage + + # When publishing a message that matches the validator + handlerFuture = newPushHandlerFuture() + otherHandlerFuture = newPushHandlerFuture() + validatorFuture = newBoolFuture() + let wakuMessage2 = fakeWakuMessage("12345678", pubsubTopic) + discard await node.publish(pubsubTopic, wakuMessage2) + + # Then the validator is ran in the other node, and succeeds + # Not run in the self node + check: + await validatorFuture.withTimeout(3.seconds) + validatorFuture.read() == true + + # And the message is published in both nodes + check: + await handlerFuture.withTimeout(3.seconds) + await otherHandlerFuture.withTimeout(3.seconds) + let (topic2, msg2) = handlerFuture.read() + let (otherTopic2, otherMsg2) = otherHandlerFuture.read() + check: + topic2 == pubsubTopic + msg2 == wakuMessage2 + otherTopic2 == pubsubTopic + otherMsg2 == wakuMessage2 + + # Finally stop the other node + await allFutures(otherSwitch.stop(), otherNode.stop()) + + asyncTest "Max Topic Size": + # NOT FOUND + discard + + asyncTest "Max subscriptions": + # NOT FOUND + discard + + asyncTest "Message encryption/decryption": + # Given a second node connected to the first one, both subscribed to the same Pubsub Topic + let + otherSwitch = newTestSwitch() + otherNode = await newTestWakuRelay(otherSwitch) + + await allFutures(otherSwitch.start(), otherNode.start()) + let otherRemotePeerInfo = otherSwitch.peerInfo.toRemotePeerInfo() + check await peerManager.connectRelay(otherRemotePeerInfo) + + var otherHandlerFuture = newPushHandlerFuture() + proc otherSimpleFutureHandler(topic: PubsubTopic, message: WakuMessage) {.async, gcsafe.} = + otherHandlerFuture.complete((topic, message)) + + discard node.subscribe(pubsubTopic, simpleFutureHandler) + discard otherNode.subscribe(pubsubTopic, otherSimpleFutureHandler) + check: + node.isSubscribed(pubsubTopic) + node.subscribedTopics == pubsubTopicSeq + otherNode.isSubscribed(pubsubTopic) + otherNode.subscribedTopics == pubsubTopicSeq + + await sleepAsync(500.millis) + + # Given some crypto info + var key = "My fancy key" + var data = "Hello, Crypto!" + var iv = "0123456789ABCDEF" + + # When publishing an encrypted message + let encodedText = cfbEncode(key, iv, data) + let encodedWakuMessage = fakeWakuMessage(encodedText, pubsubTopic) + discard await node.publish(pubsubTopic, encodedWakuMessage) + + # Then the message is published in both nodes + check: + await handlerFuture.withTimeout(3.seconds) + await otherHandlerFuture.withTimeout(3.seconds) + let (topic1, msg1) = handlerFuture.read() + let (otherTopic1, otherMsg1) = otherHandlerFuture.read() + check: + topic1 == pubsubTopic + msg1 == encodedWakuMessage + otherTopic1 == pubsubTopic + otherMsg1 == encodedWakuMessage + + # When decoding the message + let + decodedText = cfbDecode(key, iv, msg1.payload) + otherDecodedText = cfbDecode(key, iv, otherMsg1.payload) + + # Then the message is decrypted in both nodes + check: + decodedText.toString() == data + otherDecodedText.toString() == data + + # Finally stop the other node + await allFutures(otherSwitch.stop(), otherNode.stop()) + + asyncTest "How multiple interconnected nodes work": + # Given two other pubsub topics + let + pubsubTopicB = "pubsub-topic-b" + pubsubTopicC = "pubsub-topic-c" + + # Given two other nodes connected to the first one + let + otherSwitch = newTestSwitch() + otherPeerManager = PeerManager.new(otherSwitch) + otherNode = await newTestWakuRelay(otherSwitch) + anotherSwitch = newTestSwitch() + anotherPeerManager = PeerManager.new(anotherSwitch) + anotherNode = await newTestWakuRelay(anotherSwitch) + + await allFutures(otherSwitch.start(), otherNode.start(), anotherSwitch.start(), anotherNode.start()) + + let + otherRemotePeerInfo = otherSwitch.peerInfo.toRemotePeerInfo() + otherPeerId = otherRemotePeerInfo.peerId + anotherRemotePeerInfo = anotherSwitch.peerInfo.toRemotePeerInfo() + anotherPeerId = anotherRemotePeerInfo.peerId + + check: + await peerManager.connectRelay(otherRemotePeerInfo) + await peerManager.connectRelay(anotherRemotePeerInfo) + + # Given the first node is subscribed to two pubsub topics + var handlerFuture2 = newPushHandlerFuture() + proc simpleFutureHandler2(topic: PubsubTopic, message: WakuMessage) {.async, gcsafe.} = + handlerFuture2.complete((topic, message)) + + discard node.subscribe(pubsubTopic, simpleFutureHandler) + discard node.subscribe(pubsubTopicB, simpleFutureHandler2) + + # Given the other nodes are subscribed to two pubsub topics + var otherHandlerFuture1 = newPushHandlerFuture() + proc otherSimpleFutureHandler1(topic: PubsubTopic, message: WakuMessage) {.async, gcsafe.} = + otherHandlerFuture1.complete((topic, message)) + + var otherHandlerFuture2 = newPushHandlerFuture() + proc otherSimpleFutureHandler2(topic: PubsubTopic, message: WakuMessage) {.async, gcsafe.} = + otherHandlerFuture2.complete((topic, message)) + + var anotherHandlerFuture1 = newPushHandlerFuture() + proc anotherSimpleFutureHandler1(topic: PubsubTopic, message: WakuMessage) {.async, gcsafe.} = + anotherHandlerFuture1.complete((topic, message)) + + var anotherHandlerFuture2 = newPushHandlerFuture() + proc anotherSimpleFutureHandler2(topic: PubsubTopic, message: WakuMessage) {.async, gcsafe.} = + anotherHandlerFuture2.complete((topic, message)) + + discard otherNode.subscribe(pubsubTopic, otherSimpleFutureHandler1) + discard otherNode.subscribe(pubsubTopicC, otherSimpleFutureHandler2) + discard anotherNode.subscribe(pubsubTopicB, anotherSimpleFutureHandler1) + discard anotherNode.subscribe(pubsubTopicC, anotherSimpleFutureHandler2) + await sleepAsync(500.millis) + + # When publishing a message in node for each of the pubsub topics + let + fromNodeWakuMessage1 = fakeWakuMessage("fromNode1") + fromNodeWakuMessage2 = fakeWakuMessage("fromNode2") + fromNodeWakuMessage3 = fakeWakuMessage("fromNode3") + + discard await node.publish(pubsubTopic, fromNodeWakuMessage1) + discard await node.publish(pubsubTopicB, fromNodeWakuMessage2) + discard await node.publish(pubsubTopicC, fromNodeWakuMessage3) + + # Then the messages are published in all nodes (because it's published in the center node) + # Center meaning that all other nodes are connected to this one + check: + await handlerFuture.withTimeout(3.seconds) + await handlerFuture2.withTimeout(3.seconds) + await otherHandlerFuture1.withTimeout(3.seconds) + await otherHandlerFuture2.withTimeout(3.seconds) + await anotherHandlerFuture1.withTimeout(3.seconds) + await anotherHandlerFuture2.withTimeout(3.seconds) + + let + (topic1, msg1) = handlerFuture.read() + (topic2, msg2) = handlerFuture2.read() + (otherTopic1, otherMsg1) = otherHandlerFuture1.read() + (otherTopic2, otherMsg2) = otherHandlerFuture2.read() + (anotherTopic1, anotherMsg1) = anotherHandlerFuture1.read() + (anotherTopic2, anotherMsg2) = anotherHandlerFuture2.read() + + check: + topic1 == pubsubTopic + msg1 == fromNodeWakuMessage1 + topic2 == pubsubTopicB + msg2 == fromNodeWakuMessage2 + otherTopic1 == pubsubTopic + otherMsg1 == fromNodeWakuMessage1 + otherTopic2 == pubsubTopicC + otherMsg2 == fromNodeWakuMessage3 + anotherTopic1 == pubsubTopicB + anotherMsg1 == fromNodeWakuMessage2 + anotherTopic2 == pubsubTopicC + anotherMsg2 == fromNodeWakuMessage3 + + # Given anotherNode is completely disconnected from the first one + await anotherPeerManager.switch.disconnect(peerId) + await peerManager.switch.disconnect(anotherPeerId) + check: + not anotherPeerManager.switch.isConnected(peerId) + not peerManager.switch.isConnected(anotherPeerId) + + # When publishing a message in node for each of the pubsub topics + handlerFuture = newPushHandlerFuture() + handlerFuture2 = newPushHandlerFuture() + otherHandlerFuture1 = newPushHandlerFuture() + otherHandlerFuture2 = newPushHandlerFuture() + anotherHandlerFuture1 = newPushHandlerFuture() + anotherHandlerFuture2 = newPushHandlerFuture() + + let + fromNodeWakuMessage4 = fakeWakuMessage("fromNode4") + fromNodeWakuMessage5 = fakeWakuMessage("fromNode5") + fromNodeWakuMessage6 = fakeWakuMessage("fromNode6") + + discard await node.publish(pubsubTopic, fromNodeWakuMessage4) + discard await node.publish(pubsubTopicB, fromNodeWakuMessage5) + discard await node.publish(pubsubTopicC, fromNodeWakuMessage6) + + # Then the message is published in node and otherNode, + # but not in anotherNode because it is not connected anymore + check: + await handlerFuture.withTimeout(3.seconds) + await handlerFuture2.withTimeout(3.seconds) + await otherHandlerFuture1.withTimeout(3.seconds) + await otherHandlerFuture2.withTimeout(3.seconds) + not await anotherHandlerFuture1.withTimeout(3.seconds) + not await anotherHandlerFuture2.withTimeout(3.seconds) + + let + (topic3, msg3) = handlerFuture.read() + (topic4, msg4) = handlerFuture2.read() + (otherTopic3, otherMsg3) = otherHandlerFuture1.read() + (otherTopic4, otherMsg4) = otherHandlerFuture2.read() + + check: + topic3 == pubsubTopic + msg3 == fromNodeWakuMessage4 + topic4 == pubsubTopicB + msg4 == fromNodeWakuMessage5 + otherTopic3 == pubsubTopic + otherMsg3 == fromNodeWakuMessage4 + otherTopic4 == pubsubTopicC + otherMsg4 == fromNodeWakuMessage6 + + # When publishing a message in anotherNode for each of the pubsub topics + handlerFuture = newPushHandlerFuture() + handlerFuture2 = newPushHandlerFuture() + otherHandlerFuture1 = newPushHandlerFuture() + otherHandlerFuture2 = newPushHandlerFuture() + anotherHandlerFuture1 = newPushHandlerFuture() + anotherHandlerFuture2 = newPushHandlerFuture() + + let + fromAnotherNodeWakuMessage1 = fakeWakuMessage("fromAnotherNode1") + fromAnotherNodeWakuMessage2 = fakeWakuMessage("fromAnotherNode2") + fromAnotherNodeWakuMessage3 = fakeWakuMessage("fromAnotherNode3") + + discard await anotherNode.publish(pubsubTopic, fromAnotherNodeWakuMessage1) + discard await anotherNode.publish(pubsubTopicB, fromAnotherNodeWakuMessage2) + discard await anotherNode.publish(pubsubTopicC, fromAnotherNodeWakuMessage3) + + # Then the messages are only published in anotherNode because it's disconnected from + # the rest of the network + check: + not await handlerFuture.withTimeout(3.seconds) + not await handlerFuture2.withTimeout(3.seconds) + not await otherHandlerFuture1.withTimeout(3.seconds) + not await otherHandlerFuture2.withTimeout(3.seconds) + await anotherHandlerFuture1.withTimeout(3.seconds) + await anotherHandlerFuture2.withTimeout(3.seconds) + + let + (anotherTopic3, anotherMsg3) = anotherHandlerFuture1.read() + (anotherTopic4, anotherMsg4) = anotherHandlerFuture2.read() + + check: + anotherTopic3 == pubsubTopicB + anotherMsg3 == fromAnotherNodeWakuMessage2 + anotherTopic4 == pubsubTopicC + anotherMsg4 == fromAnotherNodeWakuMessage3 + + # When publishing a message in otherNode for each of the pubsub topics + handlerFuture = newPushHandlerFuture() + handlerFuture2 = newPushHandlerFuture() + otherHandlerFuture1 = newPushHandlerFuture() + otherHandlerFuture2 = newPushHandlerFuture() + anotherHandlerFuture1 = newPushHandlerFuture() + anotherHandlerFuture2 = newPushHandlerFuture() + + let + fromOtherNodeWakuMessage1 = fakeWakuMessage("fromOtherNode1") + fromOtherNodeWakuMessage2 = fakeWakuMessage("fromOtherNode2") + fromOtherNodeWakuMessage3 = fakeWakuMessage("fromOtherNode3") + + discard await otherNode.publish(pubsubTopic, fromOtherNodeWakuMessage1) + discard await otherNode.publish(pubsubTopicB, fromOtherNodeWakuMessage2) + discard await otherNode.publish(pubsubTopicC, fromOtherNodeWakuMessage3) + + # Then the messages are only published in otherNode and node, but not in anotherNode + # because it's disconnected from the rest of the network + check: + await handlerFuture.withTimeout(3.seconds) + await handlerFuture2.withTimeout(3.seconds) + await otherHandlerFuture1.withTimeout(3.seconds) + await otherHandlerFuture2.withTimeout(3.seconds) + not await anotherHandlerFuture1.withTimeout(3.seconds) + not await anotherHandlerFuture2.withTimeout(3.seconds) + + let + (topic5, msg5) = handlerFuture.read() + (topic6, msg6) = handlerFuture2.read() + (otherTopic5, otherMsg5) = otherHandlerFuture1.read() + (otherTopic6, otherMsg6) = otherHandlerFuture2.read() + + check: + topic5 == pubsubTopic + msg5 == fromOtherNodeWakuMessage1 + topic6 == pubsubTopicB + msg6 == fromOtherNodeWakuMessage2 + otherTopic5 == pubsubTopic + otherMsg5 == fromOtherNodeWakuMessage1 + otherTopic6 == pubsubTopicC + otherMsg6 == fromOtherNodeWakuMessage3 + + # Given anotherNode is reconnected, but to otherNode + check await anotherPeerManager.connectRelay(otherRemotePeerInfo) + check: + anotherPeerManager.switch.isConnected(otherPeerId) + otherPeerManager.switch.isConnected(anotherPeerId) + + # When publishing a message in anotherNode for each of the pubsub topics + handlerFuture = newPushHandlerFuture() + handlerFuture2 = newPushHandlerFuture() + otherHandlerFuture1 = newPushHandlerFuture() + otherHandlerFuture2 = newPushHandlerFuture() + anotherHandlerFuture1 = newPushHandlerFuture() + anotherHandlerFuture2 = newPushHandlerFuture() + + let + fromAnotherNodeWakuMessage4 = fakeWakuMessage("fromAnotherNode4") + fromAnotherNodeWakuMessage5 = fakeWakuMessage("fromAnotherNode5") + fromAnotherNodeWakuMessage6 = fakeWakuMessage("fromAnotherNode6") + + discard await anotherNode.publish(pubsubTopic, fromAnotherNodeWakuMessage4) + discard await anotherNode.publish(pubsubTopicB, fromAnotherNodeWakuMessage5) + discard await anotherNode.publish(pubsubTopicC, fromAnotherNodeWakuMessage6) + + # Then the messages are published in all nodes except in node's B topic, because + # even if they're connected like so AnotherNode <-> OtherNode <-> Node, + # otherNode doesn't broadcast B topic messages because it's not subscribed to it + check: + await handlerFuture.withTimeout(3.seconds) + not await handlerFuture2.withTimeout(3.seconds) + await otherHandlerFuture1.withTimeout(3.seconds) + await otherHandlerFuture2.withTimeout(3.seconds) + await anotherHandlerFuture1.withTimeout(3.seconds) + await anotherHandlerFuture2.withTimeout(3.seconds) + + let + (topic7, msg7) = handlerFuture.read() + (otherTopic7, otherMsg7) = otherHandlerFuture1.read() + (otherTopic8, otherMsg8) = otherHandlerFuture2.read() + (anotherTopic7, anotherMsg7) = anotherHandlerFuture1.read() + (anotherTopic8, anotherMsg8) = anotherHandlerFuture2.read() + + check: + topic7 == pubsubTopic + msg7 == fromAnotherNodeWakuMessage4 + otherTopic7 == pubsubTopic + otherMsg7 == fromAnotherNodeWakuMessage4 + otherTopic8 == pubsubTopicC + otherMsg8 == fromAnotherNodeWakuMessage6 + anotherTopic7 == pubsubTopicB + anotherMsg7 == fromAnotherNodeWakuMessage5 + anotherTopic8 == pubsubTopicC + anotherMsg8 == fromAnotherNodeWakuMessage6 + + # Finally stop the other nodes + await allFutures(otherSwitch.stop(), otherNode.stop(), anotherSwitch.stop(), anotherNode.stop()) + + suite "Unsubscribe": + asyncTest "Without Subscription": + # Given an external topic handler + let + otherSwitch = newTestSwitch() + otherNode = await newTestWakuRelay(otherSwitch) + await allFutures(otherSwitch.start(), otherNode.start()) + let otherTopicHandler: TopicHandler = otherNode.subscribe(pubsubTopic, simpleFutureHandler) + + # Given a node without a subscription + check: + node.subscribedTopics == [] + + # When unsubscribing from a pubsub topic from an unsubscribed topic handler + node.unsubscribe(pubsubTopic, otherTopicHandler) + + # Then the node is still not subscribed + check: + node.subscribedTopics == [] + + # Finally stop the other node + await allFutures(otherSwitch.stop(), otherNode.stop()) + + asyncTest "Single Node with Single Pubsub Topic": + # Given a node subscribed to a pubsub topic + let topicHandler = node.subscribe(pubsubTopic, simpleFutureHandler) + check node.subscribedTopics == pubsubTopicSeq + + # When unsubscribing from the pubsub topic + node.unsubscribe(pubsubTopic, topicHandler) + + # Then the node is not subscribed anymore + check node.subscribedTopics == [] + + asyncTest "Single Node with Multiple Pubsub Topics": + # Given other pubsub topic + let pubsubTopicB = "pubsub-topic-b" + + # Given a node subscribed to multiple pubsub topics + let + topicHandler = node.subscribe(pubsubTopic, simpleFutureHandler) + topicHandlerB = node.subscribe(pubsubTopicB, simpleFutureHandler) + check node.subscribedTopics == @[pubsubTopic, pubsubTopicB] + + # When unsubscribing from one of the pubsub topics + node.unsubscribe(pubsubTopic, topicHandler) + + # Then the node is still subscribed to the other pubsub topic + check node.subscribedTopics == @[pubsubTopicB] + + # When unsubscribing from the other pubsub topic + node.unsubscribe(pubsubTopicB, topicHandlerB) + + # Then the node is not subscribed anymore + check node.subscribedTopics == [] + + suite "Unsubscribe All": + asyncTest "Without subscriptions": + # Given a node without subscriptions + check node.subscribedTopics == [] + + # When unsubscribing from all pubsub topics + node.unsubscribeAll(pubsubTopic) + + # Then the node is still not subscribed + check node.subscribedTopics == [] + + asyncTest "Single Node with Single Pubsub Topic": + # Given a node subscribed to a pubsub topic + node.subscribe(pubsubTopic, simpleFutureHandler) + check node.subscribedTopics == pubsubTopicSeq + + # When unsubscribing from all pubsub topics + node.unsubscribeAll(pubsubTopic) + + # Then the node is not subscribed anymore + check node.subscribedTopics == [] + + asyncTest "Single Node with Multiple Pubsub Topics": + # Given other pubsub topic + let pubsubTopicB = "pubsub-topic-b" + + # Given a node subscribed to multiple pubsub topics + discard node.subscribe(pubsubTopic, simpleFutureHandler) + discard node.subscribe(pubsubTopic, simpleFutureHandler) + discard node.subscribe(pubsubTopicB, simpleFutureHandler) + + check node.subscribedTopics == @[pubsubTopic, pubsubTopicB] + + # When unsubscribing all handlers from pubsubTopic + node.unsubscribeAll(pubsubTopic) + + # Then the node doesn't have pubsubTopic handlers + check node.subscribedTopics == @[pubsubTopicB] + + # When unsubscribing all handlers from pubsubTopicB + node.unsubscribeAll(pubsubTopicB) + + # Then the node is not subscribed to anything + check node.subscribedTopics == [] + + suite "Send & Retrieve Messages": + asyncTest "Valid Payload Types": + # Given a second node connected to the first one + let + otherSwitch = newTestSwitch() + otherNode = await newTestWakuRelay(otherSwitch) + + await allFutures(otherSwitch.start(), otherNode.start()) + let otherRemotePeerInfo = otherSwitch.peerInfo.toRemotePeerInfo() + check await peerManager.connectRelay(otherRemotePeerInfo) + + # Given both are subscribed to the same pubsub topic + var otherHandlerFuture = newPushHandlerFuture() + proc otherSimpleFutureHandler(topic: PubsubTopic, message: WakuMessage) {.async, gcsafe.} = + otherHandlerFuture.complete((topic, message)) + + discard otherNode.subscribe(pubsubTopic, otherSimpleFutureHandler) + discard node.subscribe(pubsubTopic, simpleFutureHandler) + check: + node.subscribedTopics == pubsubTopicSeq + otherNode.subscribedTopics == pubsubTopicSeq + + await sleepAsync(500.millis) + + # Given some payloads + let + JSON_DICTIONARY = getSampleJsonDictionary() + JSON_LIST = getSampleJsonList() + + # Given some valid messages + let + msg1 = fakeWakuMessage(contentTopic=contentTopic, payload=ALPHABETIC) + msg2 = fakeWakuMessage(contentTopic=contentTopic, payload=ALPHANUMERIC) + msg3 = fakeWakuMessage(contentTopic=contentTopic, payload=ALPHANUMERIC_SPECIAL) + msg4 = fakeWakuMessage(contentTopic=contentTopic, payload=EMOJI) + msg5 = fakeWakuMessage(contentTopic=contentTopic, payload=CODE) + msg6 = fakeWakuMessage(contentTopic=contentTopic, payload=QUERY) + msg7 = fakeWakuMessage(contentTopic=contentTopic, payload=($JSON_DICTIONARY)) + msg8 = fakeWakuMessage(contentTopic=contentTopic, payload=($JSON_LIST)) + msg9 = fakeWakuMessage(contentTopic=contentTopic, payload=TEXT_SMALL) + msg10 = fakeWakuMessage(contentTopic=contentTopic, payload=TEXT_LARGE) + + # When sending the alphabetic message + discard await node.publish(pubsubTopic, msg1) + + # Then the message is received in both nodes + check: + await handlerFuture.withTimeout(3.seconds) + await otherHandlerFuture.withTimeout(3.seconds) + (pubsubTopic, msg1) == handlerFuture.read() + (pubsubTopic, msg1) == otherHandlerFuture.read() + + # When sending the alphanumeric message + handlerFuture = newPushHandlerFuture() + otherHandlerFuture = newPushHandlerFuture() + discard await node.publish(pubsubTopic, msg2) + + # Then the message is received in both nodes + check: + await handlerFuture.withTimeout(3.seconds) + await otherHandlerFuture.withTimeout(3.seconds) + (pubsubTopic, msg2) == handlerFuture.read() + (pubsubTopic, msg2) == otherHandlerFuture.read() + + # When sending the alphanumeric special message + handlerFuture = newPushHandlerFuture() + otherHandlerFuture = newPushHandlerFuture() + discard await node.publish(pubsubTopic, msg3) + + # Then the message is received in both nodes + check: + await handlerFuture.withTimeout(3.seconds) + await otherHandlerFuture.withTimeout(3.seconds) + (pubsubTopic, msg3) == handlerFuture.read() + (pubsubTopic, msg3) == otherHandlerFuture.read() + + # When sending the emoji message + handlerFuture = newPushHandlerFuture() + otherHandlerFuture = newPushHandlerFuture() + discard await node.publish(pubsubTopic, msg4) + + # Then the message is received in both nodes + check: + await handlerFuture.withTimeout(3.seconds) + await otherHandlerFuture.withTimeout(3.seconds) + (pubsubTopic, msg4) == handlerFuture.read() + (pubsubTopic, msg4) == otherHandlerFuture.read() + + # When sending the code message + handlerFuture = newPushHandlerFuture() + otherHandlerFuture = newPushHandlerFuture() + discard await node.publish(pubsubTopic, msg5) + + # Then the message is received in both nodes + check: + await handlerFuture.withTimeout(3.seconds) + await otherHandlerFuture.withTimeout(3.seconds) + (pubsubTopic, msg5) == handlerFuture.read() + (pubsubTopic, msg5) == otherHandlerFuture.read() + + # When sending the query message + handlerFuture = newPushHandlerFuture() + otherHandlerFuture = newPushHandlerFuture() + discard await node.publish(pubsubTopic, msg6) + + # Then the message is received in both nodes + check: + await handlerFuture.withTimeout(3.seconds) + await otherHandlerFuture.withTimeout(3.seconds) + (pubsubTopic, msg6) == handlerFuture.read() + (pubsubTopic, msg6) == otherHandlerFuture.read() + + # When sending the JSON dictionary message + handlerFuture = newPushHandlerFuture() + otherHandlerFuture = newPushHandlerFuture() + discard await node.publish(pubsubTopic, msg7) + + # Then the message is received in both nodes + check: + await handlerFuture.withTimeout(3.seconds) + await otherHandlerFuture.withTimeout(3.seconds) + (pubsubTopic, msg7) == handlerFuture.read() + (pubsubTopic, msg7) == otherHandlerFuture.read() + + # When sending the JSON list message + handlerFuture = newPushHandlerFuture() + otherHandlerFuture = newPushHandlerFuture() + discard await node.publish(pubsubTopic, msg8) + + # Then the message is received in both nodes + check: + await handlerFuture.withTimeout(3.seconds) + await otherHandlerFuture.withTimeout(3.seconds) + (pubsubTopic, msg8) == handlerFuture.read() + (pubsubTopic, msg8) == otherHandlerFuture.read() + + # When sending the small text message + handlerFuture = newPushHandlerFuture() + otherHandlerFuture = newPushHandlerFuture() + discard await node.publish(pubsubTopic, msg9) + + # Then the message is received in both nodes + check: + await handlerFuture.withTimeout(3.seconds) + await otherHandlerFuture.withTimeout(3.seconds) + (pubsubTopic, msg9) == handlerFuture.read() + (pubsubTopic, msg9) == otherHandlerFuture.read() + + # When sending the large text message + handlerFuture = newPushHandlerFuture() + otherHandlerFuture = newPushHandlerFuture() + discard await node.publish(pubsubTopic, msg10) + + # Then the message is received in both nodes + check: + await handlerFuture.withTimeout(3.seconds) + await otherHandlerFuture.withTimeout(3.seconds) + (pubsubTopic, msg10) == handlerFuture.read() + (pubsubTopic, msg10) == otherHandlerFuture.read() + + # Finally stop the other node + await allFutures(otherSwitch.stop(), otherNode.stop()) + + asyncTest "Valid Payload Sizes": + # Given a second node connected to the first one + let + otherSwitch = newTestSwitch() + otherNode = await newTestWakuRelay(otherSwitch) + + await allFutures(otherSwitch.start(), otherNode.start()) + let otherRemotePeerInfo = otherSwitch.peerInfo.toRemotePeerInfo() + check await peerManager.connectRelay(otherRemotePeerInfo) + + # Given both are subscribed to the same pubsub topic + var otherHandlerFuture = newPushHandlerFuture() + proc otherSimpleFutureHandler(topic: PubsubTopic, message: WakuMessage) {.async, gcsafe.} = + otherHandlerFuture.complete((topic, message)) + + discard otherNode.subscribe(pubsubTopic, otherSimpleFutureHandler) + discard node.subscribe(pubsubTopic, simpleFutureHandler) + check: + node.subscribedTopics == pubsubTopicSeq + otherNode.subscribedTopics == pubsubTopicSeq + + await sleepAsync(500.millis) + + # Given some valid payloads + let + msg1 = fakeWakuMessage(contentTopic=contentTopic, payload=getByteSequence(1024)) # 1KiB + msg2 = fakeWakuMessage(contentTopic=contentTopic, payload=getByteSequence(10*1024)) # 10KiB + msg3 = fakeWakuMessage(contentTopic=contentTopic, payload=getByteSequence(100*1024)) # 100KiB + msg4 = fakeWakuMessage(contentTopic=contentTopic, payload=getByteSequence(1023*1024)) # 1MiB - 1B -> Max Size (Inclusive Limit) + msg5 = fakeWakuMessage(contentTopic=contentTopic, payload=getByteSequence(1024*1024)) # 1MiB -> Max Size (Exclusive Limit) + msg6 = fakeWakuMessage(contentTopic=contentTopic, payload=getByteSequence(1025*1024)) # 1MiB + 1B -> Out of Max Size + + # When sending the 1KiB message + handlerFuture = newPushHandlerFuture() + otherHandlerFuture = newPushHandlerFuture() + discard await node.publish(pubsubTopic, msg1) + + # Then the message is received in both nodes + check: + await handlerFuture.withTimeout(3.seconds) + await otherHandlerFuture.withTimeout(3.seconds) + (pubsubTopic, msg1) == handlerFuture.read() + (pubsubTopic, msg1) == otherHandlerFuture.read() + + # When sending the 10KiB message + handlerFuture = newPushHandlerFuture() + otherHandlerFuture = newPushHandlerFuture() + discard await node.publish(pubsubTopic, msg2) + + # Then the message is received in both nodes + check: + await handlerFuture.withTimeout(3.seconds) + await otherHandlerFuture.withTimeout(3.seconds) + (pubsubTopic, msg2) == handlerFuture.read() + (pubsubTopic, msg2) == otherHandlerFuture.read() + + # When sending the 100KiB message + handlerFuture = newPushHandlerFuture() + otherHandlerFuture = newPushHandlerFuture() + discard await node.publish(pubsubTopic, msg3) + + # Then the message is received in both nodes + check: + await handlerFuture.withTimeout(3.seconds) + await otherHandlerFuture.withTimeout(3.seconds) + (pubsubTopic, msg3) == handlerFuture.read() + (pubsubTopic, msg3) == otherHandlerFuture.read() + + # When sending the 1023KiB message + handlerFuture = newPushHandlerFuture() + otherHandlerFuture = newPushHandlerFuture() + discard await node.publish(pubsubTopic, msg4) + + # Then the message is received in both nodes + check: + await handlerFuture.withTimeout(3.seconds) + await otherHandlerFuture.withTimeout(3.seconds) + (pubsubTopic, msg4) == handlerFuture.read() + (pubsubTopic, msg4) == otherHandlerFuture.read() + + # When sending the 1024KiB message + handlerFuture = newPushHandlerFuture() + otherHandlerFuture = newPushHandlerFuture() + discard await node.publish(pubsubTopic, msg5) + + # Then the message is received in self, because there's no checking, but not in other node + check: + await handlerFuture.withTimeout(3.seconds) + not await otherHandlerFuture.withTimeout(3.seconds) + (pubsubTopic, msg5) == handlerFuture.read() + + # When sending the 1025KiB message + handlerFuture = newPushHandlerFuture() + otherHandlerFuture = newPushHandlerFuture() + discard await node.publish(pubsubTopic, msg6) + + # Then the message is received in self, because there's no checking, but not in other node + check: + await handlerFuture.withTimeout(3.seconds) + not await otherHandlerFuture.withTimeout(3.seconds) + (pubsubTopic, msg6) == handlerFuture.read() + + # Finally stop the other node + await allFutures(otherSwitch.stop(), otherNode.stop()) + + asyncTest "Multiple messages at once": + # Given a second node connected to the first one + let + otherSwitch = newTestSwitch() + otherNode = await newTestWakuRelay(otherSwitch) + + await allFutures(otherSwitch.start(), otherNode.start()) + let otherRemotePeerInfo = otherSwitch.peerInfo.toRemotePeerInfo() + check await peerManager.connectRelay(otherRemotePeerInfo) + + # Given both are subscribed to the same pubsub topic + # Create a different handler than the default to include messages in a seq + var thisHandlerFuture = newPushHandlerFuture() + var thisMessageSeq: seq[(PubsubTopic, WakuMessage)] = @[] + proc thisSimpleFutureHandler(topic: PubsubTopic, message: WakuMessage) {.async, gcsafe.} = + thisMessageSeq.add((topic, message)) + thisHandlerFuture.complete((topic, message)) + + var otherHandlerFuture = newPushHandlerFuture() + var otherMessageSeq: seq[(PubsubTopic, WakuMessage)] = @[] + proc otherSimpleFutureHandler(topic: PubsubTopic, message: WakuMessage) {.async, gcsafe.} = + otherMessageSeq.add((topic, message)) + otherHandlerFuture.complete((topic, message)) + + discard node.subscribe(pubsubTopic, thisSimpleFutureHandler) + discard otherNode.subscribe(pubsubTopic, otherSimpleFutureHandler) + check: + node.subscribedTopics == pubsubTopicSeq + otherNode.subscribedTopics == pubsubTopicSeq + await sleepAsync(500.millis) + + # When sending multiple messages from node + let + msg1 = fakeWakuMessage("msg1", pubsubTopic) + msg2 = fakeWakuMessage("msg2", pubsubTopic) + msg3 = fakeWakuMessage("msg3", pubsubTopic) + msg4 = fakeWakuMessage("msg4", pubsubTopic) + + discard await node.publish(pubsubTopic, msg1) + check await thisHandlerFuture.withTimeout(3.seconds) + check await otherHandlerFuture.withTimeout(3.seconds) + thisHandlerFuture = newPushHandlerFuture() + otherHandlerFuture = newPushHandlerFuture() + discard await node.publish(pubsubTopic, msg2) + check await thisHandlerFuture.withTimeout(3.seconds) + check await otherHandlerFuture.withTimeout(3.seconds) + thisHandlerFuture = newPushHandlerFuture() + otherHandlerFuture = newPushHandlerFuture() + discard await node.publish(pubsubTopic, msg3) + check await thisHandlerFuture.withTimeout(3.seconds) + check await otherHandlerFuture.withTimeout(3.seconds) + thisHandlerFuture = newPushHandlerFuture() + otherHandlerFuture = newPushHandlerFuture() + discard await node.publish(pubsubTopic, msg4) + + check: + await thisHandlerFuture.withTimeout(3.seconds) + thisMessageSeq == @[ + (pubsubTopic, msg1), + (pubsubTopic, msg2), + (pubsubTopic, msg3), + (pubsubTopic, msg4) + ] + await otherHandlerFuture.withTimeout(3.seconds) + otherMessageSeq == @[ + (pubsubTopic, msg1), + (pubsubTopic, msg2), + (pubsubTopic, msg3), + (pubsubTopic, msg4) + ] + + # Finally stop the other node + await allFutures(otherSwitch.stop(), otherNode.stop()) + + suite "Security and Privacy": + asyncTest "Relay can receive messages after reboot and reconnect": + # Given a second node connected to the first one + let + otherSwitch = newTestSwitch() + otherPeerManager = PeerManager.new(otherSwitch) + otherNode = await newTestWakuRelay(otherSwitch) + + await allFutures(otherSwitch.start(), otherNode.start()) + let + otherRemotePeerInfo = otherSwitch.peerInfo.toRemotePeerInfo() + otherPeerId = otherRemotePeerInfo.peerId + + check await peerManager.connectRelay(otherRemotePeerInfo) + + # Given both are subscribed to the same pubsub topic + var otherHandlerFuture = newPushHandlerFuture() + proc otherSimpleFutureHandler(topic: PubsubTopic, message: WakuMessage) {.async, gcsafe.} = + otherHandlerFuture.complete((topic, message)) + + discard otherNode.subscribe(pubsubTopic, otherSimpleFutureHandler) + discard node.subscribe(pubsubTopic, simpleFutureHandler) + check: + node.subscribedTopics == pubsubTopicSeq + otherNode.subscribedTopics == pubsubTopicSeq + await sleepAsync(500.millis) + + # Given other node is stopped and restarted + await allFutures(otherSwitch.stop(), otherNode.stop()) + await allFutures(otherSwitch.start(), otherNode.start()) + # FIXME: Once stopped and started, nodes are not considered connected, nor do they reconnect after running connectRelay, as below + # check await otherPeerManager.connectRelay(otherRemotePeerInfo) + + # When sending a message from node + let msg1 = fakeWakuMessage(testMessage, pubsubTopic) + discard await node.publish(pubsubTopic, msg1) + + # Then the message is received in both nodes + check: + await handlerFuture.withTimeout(3.seconds) + await otherHandlerFuture.withTimeout(3.seconds) + (pubsubTopic, msg1) == handlerFuture.read() + (pubsubTopic, msg1) == otherHandlerFuture.read() + + # When sending a message from other node + handlerFuture = newPushHandlerFuture() + otherHandlerFuture = newPushHandlerFuture() + let msg2 = fakeWakuMessage(testMessage, pubsubTopic) + discard await otherNode.publish(pubsubTopic, msg2) + + # Then the message is received in both nodes + check: + await handlerFuture.withTimeout(3.seconds) + await otherHandlerFuture.withTimeout(3.seconds) + (pubsubTopic, msg2) == handlerFuture.read() + (pubsubTopic, msg2) == otherHandlerFuture.read() + + # Given node is stopped and restarted + await allFutures(switch.stop(), node.stop()) + await allFutures(switch.start(), node.start()) + + # When sending a message from node + handlerFuture = newPushHandlerFuture() + otherHandlerFuture = newPushHandlerFuture() + let msg3 = fakeWakuMessage(testMessage, pubsubTopic) + discard await node.publish(pubsubTopic, msg3) + + # Then the message is received in both nodes + check: + await handlerFuture.withTimeout(3.seconds) + await otherHandlerFuture.withTimeout(3.seconds) + (pubsubTopic, msg3) == handlerFuture.read() + (pubsubTopic, msg3) == otherHandlerFuture.read() + + # When sending a message from other node + handlerFuture = newPushHandlerFuture() + otherHandlerFuture = newPushHandlerFuture() + let msg4 = fakeWakuMessage(testMessage, pubsubTopic) + discard await otherNode.publish(pubsubTopic, msg4) + + # Then the message is received in both nodes + check: + await handlerFuture.withTimeout(3.seconds) + await otherHandlerFuture.withTimeout(3.seconds) + (pubsubTopic, msg4) == handlerFuture.read() + (pubsubTopic, msg4) == otherHandlerFuture.read() + + # Finally stop the other node + await allFutures(otherSwitch.stop(), otherNode.stop()) + + xasyncTest "Relay can receive messages after subscribing and stopping without unsubscribing": + # Given a second node connected to the first one + let + otherSwitch = newTestSwitch() + otherPeerManager = PeerManager.new(otherSwitch) + otherNode = await newTestWakuRelay(otherSwitch) + + await allFutures(otherSwitch.start(), otherNode.start()) + let + otherRemotePeerInfo = otherSwitch.peerInfo.toRemotePeerInfo() + otherPeerId = otherRemotePeerInfo.peerId + + check await peerManager.connectRelay(otherRemotePeerInfo) + + # Given both are subscribed to the same pubsub topic + var otherHandlerFuture = newPushHandlerFuture() + proc otherSimpleFutureHandler(topic: PubsubTopic, message: WakuMessage) {.async, gcsafe.} = + otherHandlerFuture.complete((topic, message)) + + discard otherNode.subscribe(pubsubTopic, otherSimpleFutureHandler) + discard node.subscribe(pubsubTopic, simpleFutureHandler) + check: + node.subscribedTopics == pubsubTopicSeq + otherNode.subscribedTopics == pubsubTopicSeq + + await sleepAsync(500.millis) + + # FIXME: Inconsistent behaviour with Filter protocol. + # Given other node is stopped without unsubscribing + await allFutures(otherSwitch.stop(), otherNode.stop()) + + # When sending a message from node + let msg1 = fakeWakuMessage(testMessage, pubsubTopic) + discard await node.publish(pubsubTopic, msg1) + + # Then the message is received in both nodes + check: + await handlerFuture.withTimeout(3.seconds) + await otherHandlerFuture.withTimeout(3.seconds) + (pubsubTopic, msg1) == handlerFuture.read() + (pubsubTopic, msg1) == otherHandlerFuture.read() + + # When sending a message from other node + handlerFuture = newPushHandlerFuture() + otherHandlerFuture = newPushHandlerFuture() + let msg2 = fakeWakuMessage(testMessage, pubsubTopic) + discard await otherNode.publish(pubsubTopic, msg2) + + # Then the message is received in both nodes + check: + await handlerFuture.withTimeout(3.seconds) + await otherHandlerFuture.withTimeout(3.seconds) + (pubsubTopic, msg2) == handlerFuture.read() + (pubsubTopic, msg2) == otherHandlerFuture.read() diff --git a/tests/waku_relay/test_waku_relay.nim b/tests/waku_relay/test_waku_relay.nim index 62e094bd1e..53e3ec8039 100644 --- a/tests/waku_relay/test_waku_relay.nim +++ b/tests/waku_relay/test_waku_relay.nim @@ -8,30 +8,14 @@ import chronos, libp2p/protocols/pubsub/pubsub, libp2p/protocols/pubsub/rpc/messages + import ../../../waku/node/peer_manager, ../../../waku/waku_core, ../../../waku/waku_relay, ../testlib/common, - ../testlib/wakucore - - -proc noopRawHandler(): WakuRelayHandler = - var handler: WakuRelayHandler - handler = proc(topic: PubsubTopic, msg: WakuMessage): Future[void] {.async, gcsafe.} = discard - handler - - -proc newTestWakuRelay(switch = newTestSwitch()): Future[WakuRelay] {.async.} = - let proto = WakuRelay.new(switch).tryGet() - await proto.start() - - let protocolMatcher = proc(proto: string): bool {.gcsafe.} = - return proto.startsWith(WakuRelayCodec) - - switch.mount(proto, protocolMatcher) - - return proto + ../testlib/wakucore, + ./utils suite "Waku Relay": diff --git a/tests/waku_relay/utils.nim b/tests/waku_relay/utils.nim new file mode 100644 index 0000000000..bb394ada22 --- /dev/null +++ b/tests/waku_relay/utils.nim @@ -0,0 +1,29 @@ +{.used.} + +import + std/[strutils], + stew/shims/net as stewNet, + chronos + +import + ../../../waku/waku_relay, + ../../../waku/waku_core, + ../testlib/wakucore + + +proc noopRawHandler*(): WakuRelayHandler = + var handler: WakuRelayHandler + handler = proc(topic: PubsubTopic, msg: WakuMessage): Future[void] {.async, gcsafe.} = discard + handler + + +proc newTestWakuRelay*(switch = newTestSwitch()): Future[WakuRelay] {.async.} = + let proto = WakuRelay.new(switch).tryGet() + await proto.start() + + let protocolMatcher = proc(proto: string): bool {.gcsafe.} = + return proto.startsWith(WakuRelayCodec) + + switch.mount(proto, protocolMatcher) + + return proto diff --git a/waku/waku_relay/protocol.nim b/waku/waku_relay/protocol.nim index 7709e2aba8..c99f87a56b 100644 --- a/waku/waku_relay/protocol.nim +++ b/waku/waku_relay/protocol.nim @@ -217,7 +217,7 @@ proc generateOrderedValidator*(w: WakuRelay): auto {.gcsafe.} = proc subscribe*(w: WakuRelay, pubsubTopic: PubsubTopic, handler: WakuRelayHandler): TopicHandler = debug "subscribe", pubsubTopic=pubsubTopic - # we need to wrap the handler since gossipsub doesnt understand WakuMessage + # We need to wrap the handler since gossipsub doesnt understand WakuMessage let wrappedHandler = proc(pubsubTopic: string, data: seq[byte]): Future[void] {.gcsafe, raises: [].} = let decMsg = WakuMessage.decode(data) @@ -230,7 +230,9 @@ proc subscribe*(w: WakuRelay, pubsubTopic: PubsubTopic, handler: WakuRelayHandle else: return handler(pubsubTopic, decMsg.get()) - # add the ordered validator to the topic + # Add the ordered validator to the topic + # This assumes that if `w.validatorInserted.hasKey(pubSubTopic) is true`, it contains the ordered validator. + # Otherwise this might lead to unintended behaviour. if not w.validatorInserted.hasKey(pubSubTopic): procCall GossipSub(w).addValidator(pubSubTopic, w.generateOrderedValidator()) w.validatorInserted[pubSubTopic] = true From bd25191a744623ae821a9465f3dc0cb16ccf9d1a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lex=20Cabeza=20Romero?= Date: Wed, 15 Nov 2023 16:15:38 +0100 Subject: [PATCH 121/274] test(relay-filter): cleanup (#2138) * Fix some tests. * Clean legacy tests. * Fix imports. --- tests/all_tests_waku.nim | 2 +- tests/testlib/futures.nim | 4 +- tests/waku_filter_v2/test_waku_client.nim | 766 +++++++++++---------- tests/waku_filter_v2/waku_filter_utils.nim | 27 +- tests/waku_relay/test_all.nim | 5 +- tests/waku_relay/test_message_id.nim | 12 +- tests/waku_relay/test_protocol.nim | 232 +++---- tests/waku_relay/test_waku_relay.nim | 211 ------ 8 files changed, 541 insertions(+), 718 deletions(-) delete mode 100644 tests/waku_relay/test_waku_relay.nim diff --git a/tests/all_tests_waku.nim b/tests/all_tests_waku.nim index 97039c1ecf..35e9f41a60 100644 --- a/tests/all_tests_waku.nim +++ b/tests/all_tests_waku.nim @@ -41,7 +41,7 @@ when defined(waku_exp_store_resume): import - ./waku_relay/test_all + ./waku_relay/test_all, ./waku_filter_v2/test_all diff --git a/tests/testlib/futures.nim b/tests/testlib/futures.nim index ffed6a5db2..f55114ea7e 100644 --- a/tests/testlib/futures.nim +++ b/tests/testlib/futures.nim @@ -1,9 +1,11 @@ import - chronicles, chronos import ../../../waku/waku_core/message + +let FUTURE_TIMEOUT* = 1.seconds + proc newPushHandlerFuture*(): Future[(string, WakuMessage)] = newFuture[(string, WakuMessage)]() diff --git a/tests/waku_filter_v2/test_waku_client.nim b/tests/waku_filter_v2/test_waku_client.nim index 218764ff33..ed02b65c64 100644 --- a/tests/waku_filter_v2/test_waku_client.nim +++ b/tests/waku_filter_v2/test_waku_client.nim @@ -24,21 +24,21 @@ import waku_core ], ../../../waku/waku_filter_v2/[ + common, client, - subscriptions + subscriptions, + protocol ], ../testlib/[ - common, - wakucore, - testasync, - testutils, - futures, + wakucore, + testasync, + testutils, + futures, sequtils ], - ./waku_filter_utils.nim, - ../resources/payloads.nim + ./waku_filter_utils, + ../resources/payloads -let FUTURE_TIMEOUT = 1.seconds suite "Waku Filter - End to End": suite "MessagePushHandler - Void": @@ -52,13 +52,16 @@ suite "Waku Filter - End to End": var contentTopicSeq {.threadvar.}: seq[ContentTopic] var clientPeerId {.threadvar.}: PeerId var messagePushHandler {.threadvar.}: FilterPushHandler - var pushHandlerFuture {.threadvar.}: Future[(string, WakuMessage)] + var msgSeq {.threadvar.}: seq[(PubsubTopic, WakuMessage)] + var pushHandlerFuture {.threadvar.}: Future[(PubsubTopic, WakuMessage)] asyncSetup: + msgSeq = @[] pushHandlerFuture = newPushHandlerFuture() messagePushHandler = proc( pubsubTopic: PubsubTopic, message: WakuMessage - ) {.async, closure, gcsafe.} = + ): Future[void] {.async, closure, gcsafe.} = + msgSeq.add((pubsubTopic, message)) pushHandlerFuture.complete((pubsubTopic, message)) pubsubTopic = DefaultPubsubTopic @@ -85,15 +88,14 @@ suite "Waku Filter - End to End": serverRemotePeerInfo, pubsubTopic, contentTopicSeq ) assert subscribeResponse.isOk(), $subscribeResponse.error - require: - wakuFilter.subscriptions.hasKey(clientPeerId) + check wakuFilter.subscriptions.hasKey(clientPeerId) # When let subscribedPingResponse = await wakuFilterClient.ping(serverRemotePeerInfo) # Then + assert subscribedPingResponse.isOk(), $subscribedPingResponse.error check: - subscribedPingResponse.isOk() wakuFilter.subscriptions.hasKey(clientPeerId) asyncTest "No Active Subscription Identification": @@ -112,18 +114,15 @@ suite "Waku Filter - End to End": serverRemotePeerInfo, pubsubTopic, contentTopicSeq ) - require: - subscribeResponse.isOk() - wakuFilter.subscriptions.hasKey(clientPeerId) + assert subscribeResponse.isOk(), $subscribeResponse.error + check wakuFilter.subscriptions.hasKey(clientPeerId) # When let unsubscribeResponse = await wakuFilterClient.unsubscribe( serverRemotePeerInfo, pubsubTopic, contentTopicSeq ) assert unsubscribeResponse.isOk(), $unsubscribeResponse.error - require: - unsubscribeResponse.isOk() - not wakuFilter.subscriptions.hasKey(clientPeerId) + check not wakuFilter.subscriptions.hasKey(clientPeerId) let unsubscribedPingResponse = await wakuFilterClient.ping(serverRemotePeerInfo) @@ -136,7 +135,6 @@ suite "Waku Filter - End to End": asyncTest "Server remote peer info doesn't match an online server": # Given an offline service node let offlineServerSwitch = newStandardSwitch() - let offlineWakuFilter = await newTestWakuFilter(offlineServerSwitch) let offlineServerRemotePeerInfo = offlineServerSwitch.peerInfo.toRemotePeerInfo() # When subscribing to the offline service node @@ -170,8 +168,8 @@ suite "Waku Filter - End to End": ) # Then the subscription is successful + assert subscribeResponse.isOk(), $subscribeResponse.error check: - subscribeResponse.isOk() wakuFilter.subscriptions.len == 1 wakuFilter.subscriptions.hasKey(clientPeerId) wakuFilter.getSubscribedContentTopics(clientPeerId) == contentTopicSeq @@ -181,7 +179,7 @@ suite "Waku Filter - End to End": await wakuFilter.handleMessage(pubsubTopic, msg1) # Then the message is pushed to the client - require await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) + check await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) let (pushedMsgPubsubTopic, pushedMsg) = pushHandlerFuture.read() check: pushedMsgPubsubTopic == pubsubTopic @@ -200,8 +198,8 @@ suite "Waku Filter - End to End": let unsubscribeResponse = await wakuFilterClient.unsubscribe( serverRemotePeerInfo, pubsubTopic, contentTopicSeq ) - require: - unsubscribeResponse.isOk() + assert unsubscribeResponse.isOk(), $unsubscribeResponse.error + check: wakuFilter.subscriptions.len == 0 # When sending a message to the previously unsubscribed content topic @@ -232,8 +230,8 @@ suite "Waku Filter - End to End": let subscribeResponse = await wakuFilterClient.subscribe( serverRemotePeerInfo, pubsubTopic, contentTopicsSeq ) - require: - subscribeResponse.isOk() + assert subscribeResponse.isOk(), $subscribeResponse.error + check: wakuFilter.subscriptions.len == 1 wakuFilter.subscriptions.hasKey(clientPeerId) wakuFilter.getSubscribedContentTopics(clientPeerId) == contentTopicsSeq @@ -243,7 +241,7 @@ suite "Waku Filter - End to End": await wakuFilter.handleMessage(pubsubTopic, msg1) # Then the message is pushed to the client - require await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) + check await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) let (pushedMsgPubsubTopic1, pushedMsg1) = pushHandlerFuture.read() check: pushedMsgPubsubTopic1 == pubsubTopic @@ -255,7 +253,7 @@ suite "Waku Filter - End to End": await wakuFilter.handleMessage(pubsubTopic, msg2) # Then the message is pushed to the client - require await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) + check await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) let (pushedMsgPubsubTopic2, pushedMsg2) = pushHandlerFuture.read() check: pushedMsgPubsubTopic2 == pubsubTopic @@ -274,9 +272,8 @@ suite "Waku Filter - End to End": let unsubscribeResponse = await wakuFilterClient.unsubscribe( serverRemotePeerInfo, pubsubTopic, contentTopicsSeq ) - require: - unsubscribeResponse.isOk() - wakuFilter.subscriptions.len == 0 + assert unsubscribeResponse.isOk(), $unsubscribeResponse.error + check wakuFilter.subscriptions.len == 0 # When sending a message to the previously unsubscribed content topic pushHandlerFuture = newPushHandlerFuture() # Clear previous future @@ -317,8 +314,8 @@ suite "Waku Filter - End to End": ) # Then the subscription is successful + assert subscribeResponse1.isOk(), $subscribeResponse1.error check: - subscribeResponse1.isOk() wakuFilter.subscriptions.len == 1 wakuFilter.subscriptions.hasKey(clientPeerId) wakuFilter.getSubscribedContentTopics(clientPeerId) == contentTopicSeq @@ -329,8 +326,8 @@ suite "Waku Filter - End to End": ) # Then the subscription is successful + assert subscribeResponse2.isOk(), $subscribeResponse2.error check: - subscribeResponse2.isOk() wakuFilter.subscriptions.len == 1 wakuFilter.subscriptions.hasKey(clientPeerId) wakuFilter.getSubscribedContentTopics(clientPeerId) == contentTopicSeq & otherContentTopicSeq @@ -340,7 +337,7 @@ suite "Waku Filter - End to End": await wakuFilter.handleMessage(pubsubTopic, msg1) # Then the message is pushed to the client - require await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) + check await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) let (pushedMsgPubsubTopic1, pushedMsg1) = pushHandlerFuture.read() check: pushedMsgPubsubTopic1 == pubsubTopic @@ -352,7 +349,7 @@ suite "Waku Filter - End to End": await wakuFilter.handleMessage(otherPubsubTopic, msg2) # Then the message is pushed to the client - require await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) + check await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) let (pushedMsgPubsubTopic2, pushedMsg2) = pushHandlerFuture.read() check: pushedMsgPubsubTopic2 == otherPubsubTopic @@ -373,8 +370,8 @@ suite "Waku Filter - End to End": ) # Then the unsubscription is successful + assert unsubscribeResponse1.isOk(), $unsubscribeResponse1.error check: - unsubscribeResponse1.isOk() wakuFilter.subscriptions.len == 1 wakuFilter.subscriptions.hasKey(clientPeerId) wakuFilter.getSubscribedContentTopics(clientPeerId) == otherContentTopicSeq @@ -394,7 +391,7 @@ suite "Waku Filter - End to End": await wakuFilter.handleMessage(otherPubsubTopic, msg5) # Then the message is pushed to the client - require await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) + check await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) let (pushedMsgPubsubTopic3, pushedMsg3) = pushHandlerFuture.read() check: pushedMsgPubsubTopic3 == otherPubsubTopic @@ -406,8 +403,8 @@ suite "Waku Filter - End to End": ) # Then the unsubscription is successful + assert unsubscribeResponse2.isOk(), $unsubscribeResponse2.error check: - unsubscribeResponse2.isOk() wakuFilter.subscriptions.len == 0 # When sending a message to the previously unsubscribed content topic @@ -431,8 +428,8 @@ suite "Waku Filter - End to End": ) # Then + assert subscribeResponse1.isOk(), $subscribeResponse1.error check: - subscribeResponse1.isOk() wakuFilter.subscriptions.len == 1 wakuFilter.subscriptions.hasKey(clientPeerId) wakuFilter.getSubscribedContentTopics(clientPeerId) == contentTopicSeq @@ -443,8 +440,8 @@ suite "Waku Filter - End to End": ) # Then + assert subscribeResponse2.isOk(), $subscribeResponse2.error check: - subscribeResponse2.isOk() wakuFilter.subscriptions.len == 1 wakuFilter.subscriptions.hasKey(clientPeerId) wakuFilter.getSubscribedContentTopics(clientPeerId) == contentTopicSeq & otherContentTopicSeq @@ -454,7 +451,7 @@ suite "Waku Filter - End to End": await wakuFilter.handleMessage(pubsubTopic, msg1) # Then the message is pushed to the client - require await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) + check await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) let (pushedMsgPubsubTopic1, pushedMsg1) = pushHandlerFuture.read() check: pushedMsgPubsubTopic1 == pubsubTopic @@ -466,7 +463,7 @@ suite "Waku Filter - End to End": await wakuFilter.handleMessage(otherPubsubTopic, msg2) # Then the message is pushed to the client - require await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) + check await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) let (pushedMsgPubsubTopic2, pushedMsg2) = pushHandlerFuture.read() check: pushedMsgPubsubTopic2 == otherPubsubTopic @@ -485,8 +482,8 @@ suite "Waku Filter - End to End": let unsubscribeResponse = await wakuFilterClient.unsubscribeAll(serverRemotePeerInfo) # Then the unsubscription is successful + assert unsubscribeResponse.isOk(), $unsubscribeResponse.error check: - unsubscribeResponse.isOk() wakuFilter.subscriptions.len == 0 # When sending a message the previously subscribed content topics @@ -514,8 +511,8 @@ suite "Waku Filter - End to End": ) # Then the subscription is successful + assert subscribeResponse1.isOk(), $subscribeResponse1.error check: - subscribeResponse1.isOk() wakuFilter.subscriptions.len == 1 wakuFilter.subscriptions.hasKey(clientPeerId) wakuFilter.getSubscribedContentTopics(clientPeerId) == contentTopicsSeq1 @@ -526,8 +523,8 @@ suite "Waku Filter - End to End": ) # Then the subscription is successful + assert subscribeResponse2.isOk(), $subscribeResponse2.error check: - subscribeResponse2.isOk() wakuFilter.subscriptions.len == 1 wakuFilter.subscriptions.hasKey(clientPeerId) wakuFilter.getSubscribedContentTopics(clientPeerId) == contentTopicsSeq1 & contentTopicsSeq2 @@ -537,7 +534,7 @@ suite "Waku Filter - End to End": await wakuFilter.handleMessage(pubsubTopic, msg1) # Then the message is pushed to the client - require await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) + check await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) let (pushedMsgPubsubTopic1, pushedMsg1) = pushHandlerFuture.read() check: pushedMsgPubsubTopic1 == pubsubTopic @@ -549,7 +546,7 @@ suite "Waku Filter - End to End": await wakuFilter.handleMessage(pubsubTopic, msg2) # Then the message is pushed to the client - require await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) + check await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) let (pushedMsgPubsubTopic2, pushedMsg2) = pushHandlerFuture.read() check: pushedMsgPubsubTopic2 == pubsubTopic @@ -561,7 +558,7 @@ suite "Waku Filter - End to End": await wakuFilter.handleMessage(otherPubsubTopic, msg3) # Then the message is pushed to the client - require await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) + check await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) let (pushedMsgPubsubTopic3, pushedMsg3) = pushHandlerFuture.read() check: pushedMsgPubsubTopic3 == otherPubsubTopic @@ -573,7 +570,7 @@ suite "Waku Filter - End to End": await wakuFilter.handleMessage(otherPubsubTopic, msg4) # Then the message is pushed to the client - require await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) + check await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) let (pushedMsgPubsubTopic4, pushedMsg4) = pushHandlerFuture.read() check: pushedMsgPubsubTopic4 == otherPubsubTopic @@ -588,9 +585,9 @@ suite "Waku Filter - End to End": ) # Then the unsubscription is successful + assert unsubscribeResponse1.isOk(), $unsubscribeResponse1.error + assert unsubscribeResponse2.isOk(), $unsubscribeResponse2.error check: - unsubscribeResponse1.isOk() - unsubscribeResponse2.isOk() wakuFilter.subscriptions.len == 1 wakuFilter.subscriptions.hasKey(clientPeerId) wakuFilter.getSubscribedContentTopics(clientPeerId) == @[contentTopic, otherContentTopic2] @@ -601,7 +598,7 @@ suite "Waku Filter - End to End": await wakuFilter.handleMessage(pubsubTopic, msg5) # Then the message is pushed to the client - require await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) + check await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) let (pushedMsgPubsubTopic5, pushedMsg5) = pushHandlerFuture.read() check: pushedMsgPubsubTopic5 == pubsubTopic @@ -613,7 +610,7 @@ suite "Waku Filter - End to End": await wakuFilter.handleMessage(otherPubsubTopic, msg6) # Then the message is pushed to the client - require await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) + check await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) let (pushedMsgPubsubTopic6, pushedMsg6) = pushHandlerFuture.read() check: pushedMsgPubsubTopic6 == otherPubsubTopic @@ -640,8 +637,8 @@ suite "Waku Filter - End to End": ) # Then the subscription is successful - require: - subscribeResponse1.isOk() + assert subscribeResponse1.isOk(), $subscribeResponse1.error + check: wakuFilter.subscriptions.len == 1 wakuFilter.subscriptions.hasKey(clientPeerId) wakuFilter.getSubscribedContentTopics(clientPeerId).len == 30 @@ -652,8 +649,8 @@ suite "Waku Filter - End to End": ) # Then the subscription is successful + assert subscribeResponse2.isOk(), $subscribeResponse2.error check: - subscribeResponse2.isOk() wakuFilter.subscriptions.len == 1 wakuFilter.subscriptions.hasKey(clientPeerId) wakuFilter.getSubscribedContentTopics(clientPeerId).len == 30 @@ -726,9 +723,8 @@ suite "Waku Filter - End to End": await standardSwitch.start() let subscribeResponse = await wakuFilterClient.subscribe( serverRemotePeerInfo, pubsubTopic, contentTopicSeq - ) - require: - subscribeResponse.isOk() + ) + assert subscribeResponse.isOk(), $subscribeResponse.error # Then the service node should have MaxTotalSubscriptions subscriptions check: @@ -758,8 +754,8 @@ suite "Waku Filter - End to End": let subscribeResponse1 = await wakuFilterClient.subscribe( serverRemotePeerInfo, pubsubTopic, contentTopicSeq ) - require: - subscribeResponse1.isOk() + assert subscribeResponse1.isOk(), $subscribeResponse1.error + check: wakuFilter.subscriptions.len == 1 wakuFilter.subscriptions.hasKey(clientPeerId) wakuFilter.getSubscribedContentTopics(clientPeerId) == contentTopicSeq @@ -770,8 +766,8 @@ suite "Waku Filter - End to End": ) # Then the subscription is successful + assert subscriptionResponse2.isOk(), $subscriptionResponse2.error check: - subscriptionResponse2.isOk() wakuFilter2.subscriptions.len == 1 wakuFilter2.subscriptions.hasKey(clientPeerId) wakuFilter2.getSubscribedContentTopics(clientPeerId) == contentTopicSeq @@ -787,7 +783,7 @@ suite "Waku Filter - End to End": await wakuFilter.handleMessage(pubsubTopic, msg1) # Then the message is pushed to the client - require await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) + check await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) let (pushedMsgPubsubTopic1, pushedMsg1) = pushHandlerFuture.read() check: pushedMsgPubsubTopic1 == pubsubTopic @@ -799,12 +795,129 @@ suite "Waku Filter - End to End": await wakuFilter2.handleMessage(pubsubTopic, msg2) # Then the message is pushed to the client - require await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) + check await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) let (pushedMsgPubsubTopic2, pushedMsg2) = pushHandlerFuture.read() check: pushedMsgPubsubTopic2 == pubsubTopic pushedMsg2 == msg2 + asyncTest "Refreshing Subscription": + # Given a valid subscription + let subscribeResponse1 = await wakuFilterClient.subscribe( + serverRemotePeerInfo, pubsubTopic, contentTopicSeq + ) + assert subscribeResponse1.isOk(), $subscribeResponse1.error + check: + wakuFilter.subscriptions.len == 1 + wakuFilter.subscriptions.hasKey(clientPeerId) + wakuFilter.getSubscribedContentTopics(clientPeerId) == contentTopicSeq + + # When refreshing the subscription + let subscribeResponse2 = await wakuFilterClient.subscribe( + serverRemotePeerInfo, pubsubTopic, contentTopicSeq + ) + + # Then the subscription is successful + assert subscribeResponse2.isOk(), $subscribeResponse2.error + check: + wakuFilter.subscriptions.len == 1 + wakuFilter.subscriptions.hasKey(clientPeerId) + wakuFilter.getSubscribedContentTopics(clientPeerId) == contentTopicSeq + + # When sending a message to the refreshed subscription + let msg1 = fakeWakuMessage(contentTopic=contentTopic) + await wakuFilter.handleMessage(pubsubTopic, msg1) + + # Then the message is pushed to the client + check await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) + let (pushedMsgPubsubTopic1, pushedMsg1) = pushHandlerFuture.read() + check: + pushedMsgPubsubTopic1 == pubsubTopic + pushedMsg1 == msg1 + + # And the message is not duplicated + check: + msgSeq.len == 1 + msgSeq[0][0] == pubsubTopic + msgSeq[0][1] == msg1 + + asyncTest "Overlapping Topic Subscription": + # Given a set of overlapping subscriptions + let + subscribeResponse1 = await wakuFilterClient.subscribe( + serverRemotePeerInfo, pubsubTopic, contentTopicSeq + ) + subscribeResponse2 = await wakuFilterClient.subscribe( + serverRemotePeerInfo, pubsubTopic, @["other-content-topic"] + ) + subscribeResponse3 = await wakuFilterClient.subscribe( + serverRemotePeerInfo, "other-pubsub-topic", contentTopicSeq + ) + assert subscribeResponse1.isOk(), $subscribeResponse1.error + assert subscribeResponse2.isOk(), $subscribeResponse2.error + assert subscribeResponse3.isOk(), $subscribeResponse3.error + check: + wakuFilter.subscriptions.hasKey(clientPeerId) + + # When sending a message to the overlapping subscription 1 + let msg1 = fakeWakuMessage(contentTopic=contentTopic) + await wakuFilter.handleMessage(pubsubTopic, msg1) + + # Then the message is pushed to the client + check await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) + let (pushedMsgPubsubTopic1, pushedMsg1) = pushHandlerFuture.read() + check: + pushedMsgPubsubTopic1 == pubsubTopic + pushedMsg1 == msg1 + + # And the message is not duplicated + check: + msgSeq.len == 1 + msgSeq[0][0] == pubsubTopic + msgSeq[0][1] == msg1 + + # When sending a message to the overlapping subscription 2 + pushHandlerFuture = newPushHandlerFuture() # Clear previous future + check (not await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT)) # Check there're no duplicate messages + pushHandlerFuture = newPushHandlerFuture() # Reset future due to timeout + + let msg2 = fakeWakuMessage(contentTopic="other-content-topic") + await wakuFilter.handleMessage(pubsubTopic, msg2) + + # Then the message is pushed to the client + check await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) + let (pushedMsgPubsubTopic2, pushedMsg2) = pushHandlerFuture.read() + check: + pushedMsgPubsubTopic2 == pubsubTopic + pushedMsg2 == msg2 + + # And the message is not duplicated + check: + msgSeq.len == 2 + msgSeq[1][0] == pubsubTopic + msgSeq[1][1] == msg2 + + # When sending a message to the overlapping subscription 3 + pushHandlerFuture = newPushHandlerFuture() # Clear previous future + check (not await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT)) # Check there're no duplicate messages + pushHandlerFuture = newPushHandlerFuture() # Reset future due to timeout + + let msg3 = fakeWakuMessage(contentTopic=contentTopic) + await wakuFilter.handleMessage("other-pubsub-topic", msg3) + + # Then the message is pushed to the client + check await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) + let (pushedMsgPubsubTopic3, pushedMsg3) = pushHandlerFuture.read() + check: + pushedMsgPubsubTopic3 == "other-pubsub-topic" + pushedMsg3 == msg3 + + # And the message is not duplicated + check: + msgSeq.len == 3 + msgSeq[2][0] == "other-pubsub-topic" + msgSeq[2][1] == msg3 + suite "Unsubscribe": ### @@ -816,8 +929,8 @@ suite "Waku Filter - End to End": let subscribeResponse = await wakuFilterClient.subscribe( serverRemotePeerInfo, pubsubTopic, contentTopicSeq ) - require: - subscribeResponse.isOk() + assert subscribeResponse.isOk(), $subscribeResponse.error + check: wakuFilter.subscriptions.len == 1 wakuFilter.subscriptions.hasKey(clientPeerId) wakuFilter.getSubscribedContentTopics(clientPeerId) == contentTopicSeq @@ -828,8 +941,8 @@ suite "Waku Filter - End to End": ) # Then the unsubscription is successful + assert unsubscribeResponse.isOk(), $unsubscribeResponse.error check: - unsubscribeResponse.isOk() wakuFilter.subscriptions.len == 0 asyncTest "After refreshing a subscription with Single Content Topic": @@ -837,8 +950,8 @@ suite "Waku Filter - End to End": let subscribeResponse1 = await wakuFilterClient.subscribe( serverRemotePeerInfo, pubsubTopic, contentTopicSeq ) - require: - subscribeResponse1.isOk() + assert subscribeResponse1.isOk(), $subscribeResponse1.error + check: wakuFilter.subscriptions.len == 1 wakuFilter.subscriptions.hasKey(clientPeerId) wakuFilter.getSubscribedContentTopics(clientPeerId) == contentTopicSeq @@ -849,8 +962,8 @@ suite "Waku Filter - End to End": ) # Then the subscription is successful + assert subscribeResponse2.isOk(), $subscribeResponse2.error check: - subscribeResponse2.isOk() wakuFilter.subscriptions.len == 1 wakuFilter.subscriptions.hasKey(clientPeerId) wakuFilter.getSubscribedContentTopics(clientPeerId) == contentTopicSeq @@ -861,8 +974,8 @@ suite "Waku Filter - End to End": ) # Then the unsubscription is successful + assert unsubscribeResponse.isOk(), $unsubscribeResponse.error check: - unsubscribeResponse.isOk() wakuFilter.subscriptions.len == 0 asyncTest "PubSub Topic with Multiple Content Topics, One By One": @@ -871,8 +984,8 @@ suite "Waku Filter - End to End": let subscribeResponse = await wakuFilterClient.subscribe( serverRemotePeerInfo, pubsubTopic, multipleContentTopicSeq ) - require: - subscribeResponse.isOk() + assert subscribeResponse.isOk(), $subscribeResponse.error + check: wakuFilter.subscriptions.len == 1 wakuFilter.subscriptions.hasKey(clientPeerId) wakuFilter.getSubscribedContentTopics(clientPeerId) == multipleContentTopicSeq @@ -883,8 +996,8 @@ suite "Waku Filter - End to End": ) # Then the unsubscription is successful + assert unsubscribeResponse1.isOk(), $unsubscribeResponse1.error check: - unsubscribeResponse1.isOk() wakuFilter.subscriptions.len == 1 wakuFilter.subscriptions.hasKey(clientPeerId) wakuFilter.getSubscribedContentTopics(clientPeerId) == @["other-content-topic"] @@ -895,8 +1008,8 @@ suite "Waku Filter - End to End": ) # Then the unsubscription is successful + assert unsubscribeResponse.isOk(), $unsubscribeResponse.error check: - unsubscribeResponse.isOk() wakuFilter.subscriptions.len == 0 asyncTest "PubSub Topic with Multiple Content Topics, All At Once": @@ -905,8 +1018,8 @@ suite "Waku Filter - End to End": let subscribeResponse = await wakuFilterClient.subscribe( serverRemotePeerInfo, pubsubTopic, multipleContentTopicSeq ) - require: - subscribeResponse.isOk() + assert subscribeResponse.isOk(), $subscribeResponse.error + check: wakuFilter.subscriptions.len == 1 wakuFilter.subscriptions.hasKey(clientPeerId) wakuFilter.getSubscribedContentTopics(clientPeerId) == multipleContentTopicSeq @@ -917,8 +1030,8 @@ suite "Waku Filter - End to End": ) # Then the unsubscription is successful + assert unsubscribeResponse.isOk(), $unsubscribeResponse.error check: - unsubscribeResponse.isOk() wakuFilter.subscriptions.len == 0 asyncTest "After refreshing a complete subscription with Multiple Content Topics, One By One": @@ -927,8 +1040,8 @@ suite "Waku Filter - End to End": let subscribeResponse1 = await wakuFilterClient.subscribe( serverRemotePeerInfo, pubsubTopic, multipleContentTopicSeq ) - require: - subscribeResponse1.isOk() + assert subscribeResponse1.isOk(), $subscribeResponse1.error + check: wakuFilter.subscriptions.len == 1 wakuFilter.subscriptions.hasKey(clientPeerId) wakuFilter.getSubscribedContentTopics(clientPeerId) == multipleContentTopicSeq @@ -938,8 +1051,8 @@ suite "Waku Filter - End to End": serverRemotePeerInfo, pubsubTopic, multipleContentTopicSeq ) - require: - subscribeResponse2.isOk() + assert subscribeResponse2.isOk(), $subscribeResponse2.error + check: wakuFilter.subscriptions.len == 1 wakuFilter.subscriptions.hasKey(clientPeerId) wakuFilter.getSubscribedContentTopics(clientPeerId) == multipleContentTopicSeq @@ -950,8 +1063,8 @@ suite "Waku Filter - End to End": ) # Then the unsubscription is successful + assert unsubscribeResponse1.isOk(), $unsubscribeResponse1.error check: - unsubscribeResponse1.isOk() wakuFilter.subscriptions.len == 1 wakuFilter.subscriptions.hasKey(clientPeerId) wakuFilter.getSubscribedContentTopics(clientPeerId) == @["other-content-topic"] @@ -962,8 +1075,8 @@ suite "Waku Filter - End to End": ) # Then the unsubscription is successful + assert unsubscribeResponse2.isOk(), $unsubscribeResponse2.error check: - unsubscribeResponse2.isOk() wakuFilter.subscriptions.len == 0 asyncTest "After refreshing a complete subscription with Multiple Content Topics, All At Once": @@ -972,8 +1085,8 @@ suite "Waku Filter - End to End": let subscribeResponse1 = await wakuFilterClient.subscribe( serverRemotePeerInfo, pubsubTopic, multipleContentTopicSeq ) - require: - subscribeResponse1.isOk() + assert subscribeResponse1.isOk(), $subscribeResponse1.error + check: wakuFilter.subscriptions.len == 1 wakuFilter.subscriptions.hasKey(clientPeerId) wakuFilter.getSubscribedContentTopics(clientPeerId) == multipleContentTopicSeq @@ -983,8 +1096,8 @@ suite "Waku Filter - End to End": serverRemotePeerInfo, pubsubTopic, multipleContentTopicSeq ) - require: - subscribeResponse2.isOk() + assert subscribeResponse2.isOk(), $subscribeResponse2.error + check: wakuFilter.subscriptions.len == 1 wakuFilter.subscriptions.hasKey(clientPeerId) wakuFilter.getSubscribedContentTopics(clientPeerId) == multipleContentTopicSeq @@ -995,8 +1108,8 @@ suite "Waku Filter - End to End": ) # Then the unsubscription is successful + assert unsubscribeResponse.isOk(), $unsubscribeResponse.error check: - unsubscribeResponse.isOk() wakuFilter.subscriptions.len == 0 asyncTest "After refreshing a partial subscription with Multiple Content Topics, One By One": @@ -1005,8 +1118,8 @@ suite "Waku Filter - End to End": let subscribeResponse1 = await wakuFilterClient.subscribe( serverRemotePeerInfo, pubsubTopic, multipleContentTopicSeq ) - require: - subscribeResponse1.isOk() + assert subscribeResponse1.isOk(), $subscribeResponse1.error + check: wakuFilter.subscriptions.len == 1 wakuFilter.subscriptions.hasKey(clientPeerId) wakuFilter.getSubscribedContentTopics(clientPeerId) == multipleContentTopicSeq @@ -1015,8 +1128,8 @@ suite "Waku Filter - End to End": let unsubscribeResponse1 = await wakuFilterClient.unsubscribe( serverRemotePeerInfo, pubsubTopic, @[contentTopic] ) - require: - unsubscribeResponse1.isOk() + assert unsubscribeResponse1.isOk(), $unsubscribeResponse1.error + check: wakuFilter.subscriptions.len == 1 wakuFilter.subscriptions.hasKey(clientPeerId) wakuFilter.getSubscribedContentTopics(clientPeerId) == @["other-content-topic"] @@ -1025,8 +1138,8 @@ suite "Waku Filter - End to End": let subscribeResponse2 = await wakuFilterClient.subscribe( serverRemotePeerInfo, pubsubTopic, multipleContentTopicSeq ) - require: - subscribeResponse2.isOk() + assert subscribeResponse2.isOk(), $subscribeResponse2.error + check: wakuFilter.subscriptions.len == 1 wakuFilter.subscriptions.hasKey(clientPeerId) wakuFilter.getSubscribedContentTopics(clientPeerId) == multipleContentTopicSeq @@ -1037,8 +1150,8 @@ suite "Waku Filter - End to End": ) # Then the unsubscription is successful + assert unsubscribeResponse2.isOk(), $unsubscribeResponse2.error check: - unsubscribeResponse2.isOk() wakuFilter.subscriptions.len == 1 wakuFilter.subscriptions.hasKey(clientPeerId) wakuFilter.getSubscribedContentTopics(clientPeerId) == @["other-content-topic"] @@ -1049,8 +1162,8 @@ suite "Waku Filter - End to End": ) # Then the unsubscription is successful + assert unsubscribeResponse3.isOk(), $unsubscribeResponse3.error check: - unsubscribeResponse3.isOk() wakuFilter.subscriptions.len == 0 asyncTest "After refreshing a partial subscription with Multiple Content Topics, All At Once": @@ -1059,8 +1172,8 @@ suite "Waku Filter - End to End": let subscribeResponse1 = await wakuFilterClient.subscribe( serverRemotePeerInfo, pubsubTopic, multipleContentTopicSeq ) - require: - subscribeResponse1.isOk() + assert subscribeResponse1.isOk(), $subscribeResponse1.error + check: wakuFilter.subscriptions.len == 1 wakuFilter.subscriptions.hasKey(clientPeerId) wakuFilter.getSubscribedContentTopics(clientPeerId) == multipleContentTopicSeq @@ -1069,8 +1182,8 @@ suite "Waku Filter - End to End": let unsubscribeResponse1 = await wakuFilterClient.unsubscribe( serverRemotePeerInfo, pubsubTopic, @[contentTopic] ) - require: - unsubscribeResponse1.isOk() + assert unsubscribeResponse1.isOk(), $unsubscribeResponse1.error + check: wakuFilter.subscriptions.len == 1 wakuFilter.subscriptions.hasKey(clientPeerId) wakuFilter.getSubscribedContentTopics(clientPeerId) == @["other-content-topic"] @@ -1079,8 +1192,8 @@ suite "Waku Filter - End to End": let subscribeResponse2 = await wakuFilterClient.subscribe( serverRemotePeerInfo, pubsubTopic, multipleContentTopicSeq ) - require: - subscribeResponse2.isOk() + assert subscribeResponse2.isOk(), $subscribeResponse2.error + check: wakuFilter.subscriptions.len == 1 wakuFilter.subscriptions.hasKey(clientPeerId) wakuFilter.getSubscribedContentTopics(clientPeerId) == multipleContentTopicSeq @@ -1091,8 +1204,8 @@ suite "Waku Filter - End to End": ) # Then the unsubscription is successful + assert unsubscribeResponse2.isOk(), $unsubscribeResponse2.error check: - unsubscribeResponse2.isOk() wakuFilter.subscriptions.len == 0 ### @@ -1109,10 +1222,9 @@ suite "Waku Filter - End to End": serverRemotePeerInfo, "other-pubsub-topic", contentTopicSeq ) - # TODO: CHECK IF THIS MAKES SENSE - require: - subscribeResponse1.isOk() - subscribeResponse2.isOk() + assert subscribeResponse1.isOk(), $subscribeResponse1.error + assert subscribeResponse2.isOk(), $subscribeResponse2.error + check: wakuFilter.subscriptions.len == 1 wakuFilter.subscriptions.hasKey(clientPeerId) wakuFilter.getSubscribedContentTopics(clientPeerId).len == 2 @@ -1123,8 +1235,8 @@ suite "Waku Filter - End to End": ) # Then the unsubscription is successful + assert unsubscribeResponse1.isOk(), $unsubscribeResponse1.error check: - unsubscribeResponse1.isOk() wakuFilter.subscriptions.len == 1 wakuFilter.subscriptions.hasKey(clientPeerId) wakuFilter.getSubscribedContentTopics(clientPeerId).len == 1 @@ -1135,8 +1247,8 @@ suite "Waku Filter - End to End": ) # Then the unsubscription is successful + assert unsubscribeResponse2.isOk(), $unsubscribeResponse2.error check: - unsubscribeResponse2.isOk() wakuFilter.subscriptions.len == 0 asyncTest "Different PubSub Topics with Multiple (Same) Content Topics, One By One": @@ -1150,9 +1262,9 @@ suite "Waku Filter - End to End": serverRemotePeerInfo, "other-pubsub-topic", multipleContentTopicSeq ) - require: - subscribeResponse1.isOk() - subscribeResponse2.isOk() + assert subscribeResponse1.isOk(), $subscribeResponse1.error + assert subscribeResponse2.isOk(), $subscribeResponse2.error + check: wakuFilter.subscriptions.len == 1 wakuFilter.subscriptions.hasKey(clientPeerId) wakuFilter.getSubscribedContentTopics(clientPeerId).len == 4 @@ -1163,8 +1275,8 @@ suite "Waku Filter - End to End": ) # Then the unsubscription is successful + assert unsubscribeResponse1.isOk(), $unsubscribeResponse1.error check: - unsubscribeResponse1.isOk() wakuFilter.subscriptions.len == 1 wakuFilter.subscriptions.hasKey(clientPeerId) wakuFilter.getSubscribedContentTopics(clientPeerId).len == 3 @@ -1175,8 +1287,8 @@ suite "Waku Filter - End to End": ) # Then the unsubscription is successful + assert unsubscribeResponse2.isOk(), $unsubscribeResponse2.error check: - unsubscribeResponse1.isOk() wakuFilter.subscriptions.len == 1 wakuFilter.subscriptions.hasKey(clientPeerId) wakuFilter.getSubscribedContentTopics(clientPeerId).len == 2 @@ -1187,8 +1299,8 @@ suite "Waku Filter - End to End": ) # Then the unsubscription is successful + assert unsubscribeResponse3.isOk(), $unsubscribeResponse3.error check: - unsubscribeResponse1.isOk() wakuFilter.subscriptions.len == 1 wakuFilter.subscriptions.hasKey(clientPeerId) wakuFilter.getSubscribedContentTopics(clientPeerId).len == 1 @@ -1199,8 +1311,8 @@ suite "Waku Filter - End to End": ) # Then the unsubscription is successful + assert unsubscribeResponse4.isOk(), $unsubscribeResponse4.error check: - unsubscribeResponse1.isOk() wakuFilter.subscriptions.len == 0 asyncTest "Different PubSub Topics with Multiple (Same) Content Topics, All At Once": @@ -1214,10 +1326,9 @@ suite "Waku Filter - End to End": serverRemotePeerInfo, "other-pubsub-topic", multipleContentTopicSeq ) - # TODO: CHECK IF THIS MAKES SENSE - require: - subscribeResponse1.isOk() - subscribeResponse2.isOk() + assert subscribeResponse1.isOk(), $subscribeResponse1.error + assert subscribeResponse2.isOk(), $subscribeResponse2.error + check: wakuFilter.subscriptions.len == 1 wakuFilter.subscriptions.hasKey(clientPeerId) wakuFilter.getSubscribedContentTopics(clientPeerId).len == 4 @@ -1228,8 +1339,8 @@ suite "Waku Filter - End to End": ) # Then the unsubscription is successful + assert unsubscribeResponse1.isOk(), $unsubscribeResponse1.error check: - unsubscribeResponse1.isOk() wakuFilter.subscriptions.len == 1 wakuFilter.subscriptions.hasKey(clientPeerId) wakuFilter.getSubscribedContentTopics(clientPeerId).len == 2 @@ -1240,8 +1351,8 @@ suite "Waku Filter - End to End": ) # Then the unsubscription is successful + assert unsubscribeResponse2.isOk(), $unsubscribeResponse2.error check: - unsubscribeResponse2.isOk() wakuFilter.subscriptions.len == 0 asyncTest "After refreshing a complete subscription with different PubSub Topics and Single (Same) Content Topic": @@ -1254,10 +1365,9 @@ suite "Waku Filter - End to End": serverRemotePeerInfo, "other-pubsub-topic", contentTopicSeq ) - # TODO: CHECK IF THIS MAKES SENSE - require: - subscribeResponse1.isOk() - subscribeResponse2.isOk() + assert subscribeResponse1.isOk(), $subscribeResponse1.error + assert subscribeResponse2.isOk(), $subscribeResponse2.error + check: wakuFilter.subscriptions.len == 1 wakuFilter.subscriptions.hasKey(clientPeerId) wakuFilter.getSubscribedContentTopics(clientPeerId).len == 2 @@ -1271,9 +1381,9 @@ suite "Waku Filter - End to End": serverRemotePeerInfo, "other-pubsub-topic", contentTopicSeq ) - require: - subscribeResponse3.isOk() - subscribeResponse4.isOk() + assert subscribeResponse3.isOk(), $subscribeResponse3.error + assert subscribeResponse4.isOk(), $subscribeResponse4.error + check: wakuFilter.subscriptions.len == 1 wakuFilter.subscriptions.hasKey(clientPeerId) wakuFilter.getSubscribedContentTopics(clientPeerId).len == 2 @@ -1284,8 +1394,8 @@ suite "Waku Filter - End to End": ) # Then the unsubscription is successful + assert unsubscribeResponse1.isOk(), $unsubscribeResponse1.error check: - unsubscribeResponse1.isOk() wakuFilter.subscriptions.len == 1 wakuFilter.subscriptions.hasKey(clientPeerId) wakuFilter.getSubscribedContentTopics(clientPeerId).len == 1 @@ -1296,8 +1406,8 @@ suite "Waku Filter - End to End": ) # Then the unsubscription is successful + assert unsubscribeResponse2.isOk(), $unsubscribeResponse2.error check: - unsubscribeResponse2.isOk() wakuFilter.subscriptions.len == 0 asyncTest "After refreshing a complete subscription with different PubSub Topics and Multiple (Same) Content Topics, One By One": @@ -1311,10 +1421,9 @@ suite "Waku Filter - End to End": serverRemotePeerInfo, "other-pubsub-topic", multipleContentTopicSeq ) - # TODO: CHECK IF THIS MAKES SENSE - require: - subscribeResponse1.isOk() - subscribeResponse2.isOk() + assert subscribeResponse1.isOk(), $subscribeResponse1.error + assert subscribeResponse2.isOk(), $subscribeResponse2.error + check: wakuFilter.subscriptions.len == 1 wakuFilter.subscriptions.hasKey(clientPeerId) wakuFilter.getSubscribedContentTopics(clientPeerId).len == 4 @@ -1328,9 +1437,9 @@ suite "Waku Filter - End to End": serverRemotePeerInfo, "other-pubsub-topic", multipleContentTopicSeq ) - require: - subscribeResponse3.isOk() - subscribeResponse4.isOk() + assert subscribeResponse3.isOk(), $subscribeResponse3.error + assert subscribeResponse4.isOk(), $subscribeResponse4.error + check: wakuFilter.subscriptions.len == 1 wakuFilter.subscriptions.hasKey(clientPeerId) wakuFilter.getSubscribedContentTopics(clientPeerId).len == 4 @@ -1341,8 +1450,8 @@ suite "Waku Filter - End to End": ) # Then the unsubscription is successful + assert unsubscribeResponse1.isOk(), $unsubscribeResponse1.error check: - unsubscribeResponse1.isOk() wakuFilter.subscriptions.len == 1 wakuFilter.subscriptions.hasKey(clientPeerId) wakuFilter.getSubscribedContentTopics(clientPeerId).len == 3 @@ -1353,8 +1462,8 @@ suite "Waku Filter - End to End": ) # Then the unsubscription is successful + assert unsubscribeResponse2.isOk(), $unsubscribeResponse2.error check: - unsubscribeResponse1.isOk() wakuFilter.subscriptions.len == 1 wakuFilter.subscriptions.hasKey(clientPeerId) wakuFilter.getSubscribedContentTopics(clientPeerId).len == 2 @@ -1365,8 +1474,8 @@ suite "Waku Filter - End to End": ) # Then the unsubscription is successful + assert unsubscribeResponse3.isOk(), $unsubscribeResponse3.error check: - unsubscribeResponse1.isOk() wakuFilter.subscriptions.len == 1 wakuFilter.subscriptions.hasKey(clientPeerId) wakuFilter.getSubscribedContentTopics(clientPeerId).len == 1 @@ -1377,8 +1486,8 @@ suite "Waku Filter - End to End": ) # Then the unsubscription is successful + assert unsubscribeResponse4.isOk(), $unsubscribeResponse4.error check: - unsubscribeResponse1.isOk() wakuFilter.subscriptions.len == 0 asyncTest "After refreshing a complete subscription with different PubSub Topics and Multiple (Same) Content Topics, All At Once": @@ -1392,10 +1501,9 @@ suite "Waku Filter - End to End": serverRemotePeerInfo, "other-pubsub-topic", multipleContentTopicSeq ) - # TODO: CHECK IF THIS MAKES SENSE - require: - subscribeResponse1.isOk() - subscribeResponse2.isOk() + assert subscribeResponse1.isOk(), $subscribeResponse1.error + assert subscribeResponse2.isOk(), $subscribeResponse2.error + check: wakuFilter.subscriptions.len == 1 wakuFilter.subscriptions.hasKey(clientPeerId) wakuFilter.getSubscribedContentTopics(clientPeerId).len == 4 @@ -1409,9 +1517,9 @@ suite "Waku Filter - End to End": serverRemotePeerInfo, "other-pubsub-topic", multipleContentTopicSeq ) - require: - subscribeResponse3.isOk() - subscribeResponse4.isOk() + assert subscribeResponse3.isOk(), $subscribeResponse3.error + assert subscribeResponse4.isOk(), $subscribeResponse4.error + check: wakuFilter.subscriptions.len == 1 wakuFilter.subscriptions.hasKey(clientPeerId) wakuFilter.getSubscribedContentTopics(clientPeerId).len == 4 @@ -1422,8 +1530,8 @@ suite "Waku Filter - End to End": ) # Then the unsubscription is successful + assert unsubscribeResponse1.isOk(), $unsubscribeResponse1.error check: - unsubscribeResponse1.isOk() wakuFilter.subscriptions.len == 1 wakuFilter.subscriptions.hasKey(clientPeerId) wakuFilter.getSubscribedContentTopics(clientPeerId).len == 2 @@ -1434,8 +1542,8 @@ suite "Waku Filter - End to End": ) # Then the unsubscription is successful + assert unsubscribeResponse2.isOk(), $unsubscribeResponse2.error check: - unsubscribeResponse2.isOk() wakuFilter.subscriptions.len == 0 asyncTest "After refreshing a partial subscription with different PubSub Topics and Multiple (Same) Content Topics, One By One": @@ -1449,10 +1557,9 @@ suite "Waku Filter - End to End": serverRemotePeerInfo, "other-pubsub-topic", multipleContentTopicSeq ) - # TODO: CHECK IF THIS MAKES SENSE - require: - subscribeResponse1.isOk() - subscribeResponse2.isOk() + assert subscribeResponse1.isOk(), $subscribeResponse1.error + assert subscribeResponse2.isOk(), $subscribeResponse2.error + check: wakuFilter.subscriptions.len == 1 wakuFilter.subscriptions.hasKey(clientPeerId) wakuFilter.getSubscribedContentTopics(clientPeerId).len == 4 @@ -1466,9 +1573,9 @@ suite "Waku Filter - End to End": serverRemotePeerInfo, "other-pubsub-topic", @["other-content-topic"] ) - require: - unsubscribeResponse1.isOk() - unsubscribeResponse2.isOk() + assert unsubscribeResponse1.isOk(), $unsubscribeResponse1.error + assert unsubscribeResponse2.isOk(), $unsubscribeResponse2.error + check: wakuFilter.subscriptions.len == 1 wakuFilter.subscriptions.hasKey(clientPeerId) wakuFilter.getSubscribedContentTopics(clientPeerId).len == 2 @@ -1482,9 +1589,9 @@ suite "Waku Filter - End to End": serverRemotePeerInfo, "other-pubsub-topic", multipleContentTopicSeq ) - require: - refreshSubscriptionResponse1.isOk() - refreshSubscriptionResponse2.isOk() + assert refreshSubscriptionResponse1.isOk(), $refreshSubscriptionResponse1.error + assert refreshSubscriptionResponse2.isOk(), $refreshSubscriptionResponse2.error + check: wakuFilter.subscriptions.len == 1 wakuFilter.subscriptions.hasKey(clientPeerId) wakuFilter.getSubscribedContentTopics(clientPeerId).len == 4 @@ -1495,8 +1602,8 @@ suite "Waku Filter - End to End": ) # Then the unsubscription is successful + assert unsubscribeResponse3.isOk(), $unsubscribeResponse3.error check: - unsubscribeResponse3.isOk() wakuFilter.subscriptions.len == 1 wakuFilter.subscriptions.hasKey(clientPeerId) wakuFilter.getSubscribedContentTopics(clientPeerId).len == 3 @@ -1507,8 +1614,8 @@ suite "Waku Filter - End to End": ) # Then the unsubscription is successful + assert unsubscribeResponse4.isOk(), $unsubscribeResponse4.error check: - unsubscribeResponse4.isOk() wakuFilter.subscriptions.len == 1 wakuFilter.subscriptions.hasKey(clientPeerId) wakuFilter.getSubscribedContentTopics(clientPeerId).len == 2 @@ -1519,8 +1626,8 @@ suite "Waku Filter - End to End": ) # Then the unsubscription is successful + assert unsubscribeResponse5.isOk(), $unsubscribeResponse5.error check: - unsubscribeResponse5.isOk() wakuFilter.subscriptions.len == 1 wakuFilter.subscriptions.hasKey(clientPeerId) wakuFilter.getSubscribedContentTopics(clientPeerId).len == 1 @@ -1531,8 +1638,8 @@ suite "Waku Filter - End to End": ) # Then the unsubscription is successful + assert unsubscribeResponse6.isOk(), $unsubscribeResponse6.error check: - unsubscribeResponse6.isOk() wakuFilter.subscriptions.len == 0 asyncTest "After refreshing a partial subscription with different PubSub Topics and Multiple (Same) Content Topics, All At Once": @@ -1546,10 +1653,9 @@ suite "Waku Filter - End to End": serverRemotePeerInfo, "other-pubsub-topic", multipleContentTopicSeq ) - # TODO: CHECK IF THIS MAKES SENSE - require: - subscribeResponse1.isOk() - subscribeResponse2.isOk() + assert subscribeResponse1.isOk(), $subscribeResponse1.error + assert subscribeResponse2.isOk(), $subscribeResponse2.error + check: wakuFilter.subscriptions.len == 1 wakuFilter.subscriptions.hasKey(clientPeerId) wakuFilter.getSubscribedContentTopics(clientPeerId).len == 4 @@ -1563,9 +1669,9 @@ suite "Waku Filter - End to End": serverRemotePeerInfo, "other-pubsub-topic", @["other-content-topic"] ) - require: - unsubscribeResponse1.isOk() - unsubscribeResponse2.isOk() + assert unsubscribeResponse1.isOk(), $unsubscribeResponse1.error + assert unsubscribeResponse2.isOk(), $unsubscribeResponse2.error + check: wakuFilter.subscriptions.len == 1 wakuFilter.subscriptions.hasKey(clientPeerId) wakuFilter.getSubscribedContentTopics(clientPeerId).len == 2 @@ -1579,9 +1685,9 @@ suite "Waku Filter - End to End": serverRemotePeerInfo, "other-pubsub-topic", multipleContentTopicSeq ) - require: - refreshSubscriptionResponse1.isOk() - refreshSubscriptionResponse2.isOk() + assert refreshSubscriptionResponse1.isOk(), $refreshSubscriptionResponse1.error + assert refreshSubscriptionResponse2.isOk(), $refreshSubscriptionResponse2.error + check: wakuFilter.subscriptions.len == 1 wakuFilter.subscriptions.hasKey(clientPeerId) wakuFilter.getSubscribedContentTopics(clientPeerId).len == 4 @@ -1592,8 +1698,8 @@ suite "Waku Filter - End to End": ) # Then the unsubscription is successful + assert unsubscribeResponse3.isOk(), $unsubscribeResponse3.error check: - unsubscribeResponse3.isOk() wakuFilter.subscriptions.len == 1 wakuFilter.subscriptions.hasKey(clientPeerId) wakuFilter.getSubscribedContentTopics(clientPeerId).len == 2 @@ -1604,8 +1710,8 @@ suite "Waku Filter - End to End": ) # Then the unsubscription is successful + assert unsubscribeResponse4.isOk(), $unsubscribeResponse4.error check: - unsubscribeResponse4.isOk() wakuFilter.subscriptions.len == 0 asyncTest "Without existing subscription": @@ -1624,8 +1730,8 @@ suite "Waku Filter - End to End": let subscribeResponse = await wakuFilterClient.subscribe( serverRemotePeerInfo, "pubsub-topic", contentTopicSeq ) - require: - subscribeResponse.isOk() + assert subscribeResponse.isOk(), $subscribeResponse.error + check: wakuFilter.subscriptions.len == 1 wakuFilter.subscriptions.hasKey(clientPeerId) @@ -1644,8 +1750,8 @@ suite "Waku Filter - End to End": let subscribeResponse = await wakuFilterClient.subscribe( serverRemotePeerInfo, pubsubTopic, contentTopicSeq ) - require: - subscribeResponse.isOk() + assert subscribeResponse.isOk(), $subscribeResponse.error + check: wakuFilter.subscriptions.len == 1 wakuFilter.subscriptions.hasKey(clientPeerId) @@ -1664,8 +1770,8 @@ suite "Waku Filter - End to End": let subscribeResponse = await wakuFilterClient.subscribe( serverRemotePeerInfo, pubsubTopic, contentTopicSeq ) - require: - subscribeResponse.isOk() + assert subscribeResponse.isOk(), $subscribeResponse.error + check: wakuFilter.subscriptions.len == 1 wakuFilter.subscriptions.hasKey(clientPeerId) @@ -1685,8 +1791,8 @@ suite "Waku Filter - End to End": let subscribeResponse = await wakuFilterClient.subscribe( serverRemotePeerInfo, pubsubTopic, contentTopicSeq ) - require: - subscribeResponse.isOk() + assert subscribeResponse.isOk(), $subscribeResponse.error + check: wakuFilter.subscriptions.len == 1 wakuFilter.subscriptions.hasKey(clientPeerId) @@ -1696,8 +1802,8 @@ suite "Waku Filter - End to End": ) # Then the unsubscription is successful + assert unsubscribeResponse.isOk(), $unsubscribeResponse.error check: - unsubscribeResponse.isOk() wakuFilter.subscriptions.len == 0 asyncTest "Unsubscribe from All Topics, Multiple PubSub Topics": @@ -1708,9 +1814,9 @@ suite "Waku Filter - End to End": let subscribeResponse2 = await wakuFilterClient.subscribe( serverRemotePeerInfo, "other-pubsub-topic", contentTopicSeq ) - require: - subscribeResponse1.isOk() - subscribeResponse2.isOk() + assert subscribeResponse1.isOk(), $subscribeResponse1.error + assert subscribeResponse2.isOk(), $subscribeResponse2.error + check: wakuFilter.subscriptions.len == 1 wakuFilter.subscriptions.hasKey(clientPeerId) @@ -1720,13 +1826,13 @@ suite "Waku Filter - End to End": ) # Then the unsubscription is successful + assert unsubscribeResponse.isOk(), $unsubscribeResponse.error check: - unsubscribeResponse.isOk() wakuFilter.subscriptions.len == 0 asyncTest "Unsubscribe from All Topics from a non-subscribed Service": # Given the client is not subscribed to a service - require: + check: wakuFilter.subscriptions.len == 0 # When unsubscribing from all topics for that client @@ -1740,13 +1846,13 @@ suite "Waku Filter - End to End": unsubscribeResponse.error().kind == FilterSubscribeErrorKind.NOT_FOUND suite "Filter-Push": - asyncTest "Valid Payloads": + asyncTest "Valid Payload Types": # Given a valid subscription let subscribeResponse = await wakuFilterClient.subscribe( serverRemotePeerInfo, pubsubTopic, contentTopicSeq ) - require: - subscribeResponse.isOk() + assert subscribeResponse.isOk(), $subscribeResponse.error + check: wakuFilter.subscriptions.len == 1 wakuFilter.subscriptions.hasKey(clientPeerId) @@ -1772,7 +1878,7 @@ suite "Waku Filter - End to End": await wakuFilter.handleMessage(pubsubTopic, msg1) # Then the message is pushed to the client - require await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) + check await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) let (pushedMsgPubsubTopic1, pushedMsg1) = pushHandlerFuture.read() check: @@ -1785,7 +1891,7 @@ suite "Waku Filter - End to End": await wakuFilter.handleMessage(pubsubTopic, msg2) # Then the message is pushed to the client - require await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) + check await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) let (pushedMsgPubsubTopic2, pushedMsg2) = pushHandlerFuture.read() check: pushedMsgPubsubTopic2 == pubsubTopic @@ -1797,7 +1903,7 @@ suite "Waku Filter - End to End": await wakuFilter.handleMessage(pubsubTopic, msg3) # Then the message is pushed to the client - require await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) + check await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) let (pushedMsgPubsubTopic3, pushedMsg3) = pushHandlerFuture.read() check: pushedMsgPubsubTopic3 == pubsubTopic @@ -1809,7 +1915,7 @@ suite "Waku Filter - End to End": await wakuFilter.handleMessage(pubsubTopic, msg4) # Then the message is pushed to the client - require await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) + check await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) let (pushedMsgPubsubTopic4, pushedMsg4) = pushHandlerFuture.read() check: pushedMsgPubsubTopic4 == pubsubTopic @@ -1821,7 +1927,7 @@ suite "Waku Filter - End to End": await wakuFilter.handleMessage(pubsubTopic, msg5) # Then the message is pushed to the client - require await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) + check await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) let (pushedMsgPubsubTopic5, pushedMsg5) = pushHandlerFuture.read() check: pushedMsgPubsubTopic5 == pubsubTopic @@ -1833,7 +1939,7 @@ suite "Waku Filter - End to End": await wakuFilter.handleMessage(pubsubTopic, msg6) # Then the message is pushed to the client - require await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) + check await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) let (pushedMsgPubsubTopic6, pushedMsg6) = pushHandlerFuture.read() check: pushedMsgPubsubTopic6 == pubsubTopic @@ -1845,7 +1951,7 @@ suite "Waku Filter - End to End": await wakuFilter.handleMessage(pubsubTopic, msg7) # Then the message is pushed to the client - require await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) + check await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) let (pushedMsgPubsubTopic7, pushedMsg7) = pushHandlerFuture.read() check: pushedMsgPubsubTopic7 == pubsubTopic @@ -1857,7 +1963,7 @@ suite "Waku Filter - End to End": await wakuFilter.handleMessage(pubsubTopic, msg8) # Then the message is pushed to the client - require await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) + check await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) let (pushedMsgPubsubTopic8, pushedMsg8) = pushHandlerFuture.read() check: pushedMsgPubsubTopic8 == pubsubTopic @@ -1869,7 +1975,7 @@ suite "Waku Filter - End to End": await wakuFilter.handleMessage(pubsubTopic, msg9) # Then the message is pushed to the client - require await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) + check await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) let (pushedMsgPubsubTopic9, pushedMsg9) = pushHandlerFuture.read() check: pushedMsgPubsubTopic9 == pubsubTopic @@ -1881,17 +1987,93 @@ suite "Waku Filter - End to End": await wakuFilter.handleMessage(pubsubTopic, msg10) # Then the message is pushed to the client - require await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) + check await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) let (pushedMsgPubsubTopic10, pushedMsg10) = pushHandlerFuture.read() check: pushedMsgPubsubTopic10 == pubsubTopic pushedMsg10 == msg10 msg10.payload.toString() == TEXT_LARGE + asyncTest "Valid Payload Sizes": + # Given a valid subscription + let subscribeResponse = await wakuFilterClient.subscribe( + serverRemotePeerInfo, pubsubTopic, contentTopicSeq + ) + assert subscribeResponse.isOk(), $subscribeResponse.error + check: + wakuFilter.subscriptions.len == 1 + wakuFilter.subscriptions.hasKey(clientPeerId) + + # Given some valid payloads + let + msg1 = fakeWakuMessage(contentTopic=contentTopic, payload=getByteSequence(1024)) # 1KiB + msg2 = fakeWakuMessage(contentTopic=contentTopic, payload=getByteSequence(10*1024)) # 10KiB + msg3 = fakeWakuMessage(contentTopic=contentTopic, payload=getByteSequence(100*1024)) # 100KiB + msg4 = fakeWakuMessage(contentTopic=contentTopic, payload=getByteSequence(3*1024*1024 + 1023*1024 + 968)) # 4MiB - 56B -> Max Size (Inclusive Limit) + msg5 = fakeWakuMessage(contentTopic=contentTopic, payload=getByteSequence(3*1024*1024 + 1023*1024 + 969)) # 4MiB - 55B -> Max Size (Exclusive Limit) + msg6 = fakeWakuMessage(contentTopic=contentTopic, payload=getByteSequence(3*1024*1024 + 1023*1024 + 970)) # 4MiB - 54B -> Out of Max Size + + # When sending the 1KiB message + await wakuFilter.handleMessage(pubsubTopic, msg1) + + # Then the message is pushed to the client + check await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) + let (pushedMsgPubsubTopic1, pushedMsg1) = pushHandlerFuture.read() + check: + pushedMsgPubsubTopic1 == pubsubTopic + pushedMsg1 == msg1 + + # When sending the 10KiB message + pushHandlerFuture = newPushHandlerFuture() # Clear previous future + await wakuFilter.handleMessage(pubsubTopic, msg2) + + # Then the message is pushed to the client + check await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) + let (pushedMsgPubsubTopic2, pushedMsg2) = pushHandlerFuture.read() + check: + pushedMsgPubsubTopic2 == pubsubTopic + pushedMsg2 == msg2 + + # When sending the 100KiB message + pushHandlerFuture = newPushHandlerFuture() # Clear previous future + await wakuFilter.handleMessage(pubsubTopic, msg3) + + # Then the message is pushed to the client + check await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) + let (pushedMsgPubsubTopic3, pushedMsg3) = pushHandlerFuture.read() + check: + pushedMsgPubsubTopic3 == pubsubTopic + pushedMsg3 == msg3 + + # When sending the 4MiB - 56B message + pushHandlerFuture = newPushHandlerFuture() # Clear previous future + await wakuFilter.handleMessage(pubsubTopic, msg4) + + # Then the message is pushed to the client + check await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) + let (pushedMsgPubsubTopic4, pushedMsg4) = pushHandlerFuture.read() + check: + pushedMsgPubsubTopic4 == pubsubTopic + pushedMsg4 == msg4 + + # When sending the 4MiB - 55B message + pushHandlerFuture = newPushHandlerFuture() # Clear previous future + await wakuFilter.handleMessage(pubsubTopic, msg5) + + # Then the message is not pushed to the client + check not await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) + + # When sending the 4MiB - 54B message + pushHandlerFuture = newPushHandlerFuture() # Clear previous future + await wakuFilter.handleMessage(pubsubTopic, msg6) + + # Then the message is not pushed to the client + check not await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) + suite "Security and Privacy": asyncTest "Filter Client can receive messages after Client and Server reboot": # Given a clean client and server - require: + check: wakuFilter.subscriptions.len == 0 # When subscribing to a topic @@ -1900,8 +2082,8 @@ suite "Waku Filter - End to End": ) # Then the subscription is successful + assert subscribeResponse.isOk(), $subscribeResponse.error check: - subscribeResponse.isOk() wakuFilter.subscriptions.len == 1 wakuFilter.subscriptions.hasKey(clientPeerId) @@ -1918,7 +2100,7 @@ suite "Waku Filter - End to End": await wakuFilter.handleMessage(pubsubTopic, msg1) # Then the message is pushed to the client - require await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) + check await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) let (pushedMsgPubsubTopic, pushedMsg) = pushHandlerFuture.read() check: pushedMsgPubsubTopic == pubsubTopic @@ -1930,8 +2112,8 @@ suite "Waku Filter - End to End": ) # Then the refreshment is successful + assert refreshSubscriptionResponse.isOk(), $refreshSubscriptionResponse.error check: - refreshSubscriptionResponse.isOk() wakuFilter.subscriptions.len == 1 wakuFilter.subscriptions.hasKey(clientPeerId) @@ -1941,7 +2123,7 @@ suite "Waku Filter - End to End": await wakuFilter.handleMessage(pubsubTopic, msg2) # Then the message is pushed to the client - require await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) + check await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) let (pushedMsgPubsubTopic2, pushedMsg2) = pushHandlerFuture.read() check: pushedMsgPubsubTopic2 == pubsubTopic @@ -1952,8 +2134,8 @@ suite "Waku Filter - End to End": let subscribeResponse = await wakuFilterClient.subscribe( serverRemotePeerInfo, pubsubTopic, contentTopicSeq ) - require: - subscribeResponse.isOk() + assert subscribeResponse.isOk(), $subscribeResponse.error + check: wakuFilter.subscriptions.len == 1 wakuFilter.subscriptions.hasKey(clientPeerId) @@ -1970,164 +2152,8 @@ suite "Waku Filter - End to End": await wakuFilter.handleMessage(pubsubTopic, msg) # Then the client receives the message - require await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) + check await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) let (pushedMsgPubsubTopic, pushedMsg) = pushHandlerFuture.read() check: pushedMsgPubsubTopic == pubsubTopic pushedMsg == msg - - suite "MessagePushHandler - Msg List": - var serverSwitch {.threadvar.}: Switch - var clientSwitch {.threadvar.}: Switch - var wakuFilter {.threadvar.}: WakuFilter - var wakuFilterClient {.threadvar.}: WakuFilterClient - var serverRemotePeerInfo {.threadvar.}: RemotePeerInfo - var pubsubTopic {.threadvar.}: PubsubTopic - var contentTopic {.threadvar.}: ContentTopic - var contentTopicSeq {.threadvar.}: seq[ContentTopic] - var clientPeerId {.threadvar.}: PeerId - var msgList {.threadvar.}: seq[(PubsubTopic, WakuMessage)] - var pushHandlerFuture {.threadvar.}: Future[(string, WakuMessage)] - - asyncSetup: - pushHandlerFuture = newPushHandlerFuture() - msgList = @[] - let messagePushHandler: FilterPushHandler = proc( - pubsubTopic: PubsubTopic, message: WakuMessage - ): Future[void] {.async, closure, gcsafe.} = - msgList.add((pubsubTopic, message)) - pushHandlerFuture.complete((pubsubTopic, message)) - - pubsubTopic = DefaultPubsubTopic - contentTopic = DefaultContentTopic - contentTopicSeq = @[DefaultContentTopic] - serverSwitch = newStandardSwitch() - clientSwitch = newStandardSwitch() - wakuFilter = await newTestWakuFilter(serverSwitch) - wakuFilterClient = await newTestWakuFilterClient(clientSwitch) - wakuFilterClient.registerPushHandler(messagePushHandler) - - await allFutures(serverSwitch.start(), clientSwitch.start()) - serverRemotePeerInfo = serverSwitch.peerInfo.toRemotePeerInfo() - clientPeerId = clientSwitch.peerInfo.toRemotePeerInfo().peerId - - asyncTeardown: - await allFutures(wakuFilter.stop(), wakuFilterClient.stop(), serverSwitch.stop(), clientSwitch.stop()) - - suite "Subscribe": - asyncTest "Refreshing Subscription": - # Given a valid subscription - let subscribeResponse1 = await wakuFilterClient.subscribe( - serverRemotePeerInfo, pubsubTopic, contentTopicSeq - ) - require: - subscribeResponse1.isOk() - wakuFilter.subscriptions.len == 1 - wakuFilter.subscriptions.hasKey(clientPeerId) - wakuFilter.getSubscribedContentTopics(clientPeerId) == contentTopicSeq - - # When refreshing the subscription - let subscribeResponse2 = await wakuFilterClient.subscribe( - serverRemotePeerInfo, pubsubTopic, contentTopicSeq - ) - - # Then the subscription is successful - check: - subscribeResponse2.isOk() - wakuFilter.subscriptions.len == 1 - wakuFilter.subscriptions.hasKey(clientPeerId) - wakuFilter.getSubscribedContentTopics(clientPeerId) == contentTopicSeq - - # When sending a message to the refreshed subscription - let msg1 = fakeWakuMessage(contentTopic=contentTopic) - await wakuFilter.handleMessage(pubsubTopic, msg1) - - # Then the message is pushed to the client - require await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) - let (pushedMsgPubsubTopic1, pushedMsg1) = pushHandlerFuture.read() - check: - pushedMsgPubsubTopic1 == pubsubTopic - pushedMsg1 == msg1 - - # And the message is not duplicated - check: - msgList.len == 1 - msgList[0][0] == pubsubTopic - msgList[0][1] == msg1 - - asyncTest "Overlapping Topic Subscription": - # Given a set of overlapping subscriptions - let - subscribeResponse1 = await wakuFilterClient.subscribe( - serverRemotePeerInfo, pubsubTopic, contentTopicSeq - ) - subscribeResponse2 = await wakuFilterClient.subscribe( - serverRemotePeerInfo, pubsubTopic, @["other-content-topic"] - ) - subscribeResponse3 = await wakuFilterClient.subscribe( - serverRemotePeerInfo, "other-pubsub-topic", contentTopicSeq - ) - require: - subscribeResponse1.isOk() - subscribeResponse2.isOk() - subscribeResponse3.isOk() - wakuFilter.subscriptions.hasKey(clientPeerId) - - # When sending a message to the overlapping subscription 1 - let msg1 = fakeWakuMessage(contentTopic=contentTopic) - await wakuFilter.handleMessage(pubsubTopic, msg1) - - # Then the message is pushed to the client - require await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) - let (pushedMsgPubsubTopic1, pushedMsg1) = pushHandlerFuture.read() - check: - pushedMsgPubsubTopic1 == pubsubTopic - pushedMsg1 == msg1 - - # And the message is not duplicated - check: - msgList.len == 1 - msgList[0][0] == pubsubTopic - msgList[0][1] == msg1 - - # When sending a message to the overlapping subscription 2 - pushHandlerFuture = newPushHandlerFuture() # Clear previous future - require (not await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT)) # Check there're no duplicate messages - pushHandlerFuture = newPushHandlerFuture() # Reset future due to timeout - - let msg2 = fakeWakuMessage(contentTopic="other-content-topic") - await wakuFilter.handleMessage(pubsubTopic, msg2) - - # Then the message is pushed to the client - require await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) - let (pushedMsgPubsubTopic2, pushedMsg2) = pushHandlerFuture.read() - check: - pushedMsgPubsubTopic2 == pubsubTopic - pushedMsg2 == msg2 - - # And the message is not duplicated - check: - msgList.len == 2 - msgList[1][0] == pubsubTopic - msgList[1][1] == msg2 - - # When sending a message to the overlapping subscription 3 - pushHandlerFuture = newPushHandlerFuture() # Clear previous future - require (not await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT)) # Check there're no duplicate messages - pushHandlerFuture = newPushHandlerFuture() # Reset future due to timeout - - let msg3 = fakeWakuMessage(contentTopic=contentTopic) - await wakuFilter.handleMessage("other-pubsub-topic", msg3) - - # Then the message is pushed to the client - require await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) - let (pushedMsgPubsubTopic3, pushedMsg3) = pushHandlerFuture.read() - check: - pushedMsgPubsubTopic3 == "other-pubsub-topic" - pushedMsg3 == msg3 - - # And the message is not duplicated - check: - msgList.len == 3 - msgList[2][0] == "other-pubsub-topic" - msgList[2][1] == msg3 diff --git a/tests/waku_filter_v2/waku_filter_utils.nim b/tests/waku_filter_v2/waku_filter_utils.nim index f578435cb4..70d2368bcf 100644 --- a/tests/waku_filter_v2/waku_filter_utils.nim +++ b/tests/waku_filter_v2/waku_filter_utils.nim @@ -1,19 +1,24 @@ import - std/[options,tables], - std/[sequtils,sets,strutils], - testutils/unittests, + std/[ + options, + tables, + sets + ], chronos, chronicles import - ../../../waku/node/peer_manager, - ../../../waku/waku_filter_v2, - ../../../waku/waku_filter_v2/client, - ../../../waku/waku_filter_v2/subscriptions, - ../../../waku/waku_filter_v2/rpc, - ../../../waku/waku_core, - ../testlib/common, - ../testlib/wakucore + ../../../waku/[ + node/peer_manager, + waku_filter_v2, + waku_filter_v2/client, + waku_core + ], + ../testlib/[ + common, + wakucore + ] + proc newTestWakuFilter*(switch: Switch): Future[WakuFilter] {.async.} = let diff --git a/tests/waku_relay/test_all.nim b/tests/waku_relay/test_all.nim index a615f0e4e6..4957a73522 100644 --- a/tests/waku_relay/test_all.nim +++ b/tests/waku_relay/test_all.nim @@ -1,7 +1,6 @@ {.used.} import - ./test_waku_relay, - ./test_wakunode_relay, ./test_message_id, - ./test_protocol + ./test_protocol, + ./test_wakunode_relay diff --git a/tests/waku_relay/test_message_id.nim b/tests/waku_relay/test_message_id.nim index 7cf3d4402f..2c2b690260 100644 --- a/tests/waku_relay/test_message_id.nim +++ b/tests/waku_relay/test_message_id.nim @@ -1,12 +1,14 @@ import unittest, - stew/shims/net, - stew/[results, byteutils] + stew/[ + shims/net, + results, + byteutils + ], + nimcrypto/sha2, + libp2p/protocols/pubsub/rpc/messages import - stew/results, - nimcrypto/sha2, - libp2p/protocols/pubsub/rpc/messages, ../../../waku/waku_relay/message_id, ../testlib/sequtils diff --git a/tests/waku_relay/test_protocol.nim b/tests/waku_relay/test_protocol.nim index 17c8d902c3..3d226a947d 100644 --- a/tests/waku_relay/test_protocol.nim +++ b/tests/waku_relay/test_protocol.nim @@ -40,11 +40,14 @@ suite "Waku Relay": var messageSeq {.threadvar.}: seq[(PubsubTopic, WakuMessage)] var handlerFuture {.threadvar.}: Future[(PubsubTopic, WakuMessage)] var simpleFutureHandler {.threadvar.}: WakuRelayHandler + var switch {.threadvar.}: Switch var peerManager {.threadvar.}: PeerManager var node {.threadvar.}: WakuRelay + var remotePeerInfo {.threadvar.}: RemotePeerInfo var peerId {.threadvar.}: PeerId + var contentTopic {.threadvar.}: ContentTopic var pubsubTopic {.threadvar.}: PubsubTopic var pubsubTopicSeq {.threadvar.}: seq[PubsubTopic] @@ -85,7 +88,7 @@ suite "Waku Relay": # Then the message is not published check: - not await handlerFuture.withTimeout(3.seconds) + not await handlerFuture.withTimeout(FUTURE_TIMEOUT) asyncTest "Publish with Subscription (Network Size: 1)": # When subscribing to a Pubsub Topic @@ -100,7 +103,7 @@ suite "Waku Relay": discard await node.publish(pubsubTopic, wakuMessage) # Then the message is published - assert (await handlerFuture.withTimeout(3.seconds)) + assert (await handlerFuture.withTimeout(FUTURE_TIMEOUT)) let (topic, msg) = handlerFuture.read() check: topic == pubsubTopic @@ -138,8 +141,8 @@ suite "Waku Relay": # Then the message is published only in the subscribed node check: - not await handlerFuture.withTimeout(3.seconds) - await otherHandlerFuture.withTimeout(3.seconds) + not await handlerFuture.withTimeout(FUTURE_TIMEOUT) + await otherHandlerFuture.withTimeout(FUTURE_TIMEOUT) let (otherTopic1, otherMessage1) = otherHandlerFuture.read() check: @@ -154,8 +157,8 @@ suite "Waku Relay": # Then the message is published only in the subscribed node check: - not await handlerFuture.withTimeout(3.seconds) - await otherHandlerFuture.withTimeout(3.seconds) + not await handlerFuture.withTimeout(FUTURE_TIMEOUT) + await otherHandlerFuture.withTimeout(FUTURE_TIMEOUT) let (otherTopic2, otherMessage2) = otherHandlerFuture.read() check: @@ -198,8 +201,8 @@ suite "Waku Relay": # Then the message is published in both nodes check: - await handlerFuture.withTimeout(3.seconds) - await otherHandlerFuture.withTimeout(3.seconds) + await handlerFuture.withTimeout(FUTURE_TIMEOUT) + await otherHandlerFuture.withTimeout(FUTURE_TIMEOUT) let (topic1, message1) = handlerFuture.read() @@ -219,8 +222,8 @@ suite "Waku Relay": # Then the message is published in both nodes check: - await handlerFuture.withTimeout(3.seconds) - await otherHandlerFuture.withTimeout(3.seconds) + await handlerFuture.withTimeout(FUTURE_TIMEOUT) + await otherHandlerFuture.withTimeout(FUTURE_TIMEOUT) let (topic2, message2) = handlerFuture.read() @@ -260,7 +263,7 @@ suite "Waku Relay": discard await node.publish(pubsubTopic, wakuMessage) # Then the message is published - check (await handlerFuture.withTimeout(3.seconds)) + check (await handlerFuture.withTimeout(FUTURE_TIMEOUT)) let (topic, msg) = handlerFuture.read() check: topic == pubsubTopic @@ -315,14 +318,14 @@ suite "Waku Relay": # Then the validator is ran in the other node, and fails # Not run in the self node check: - await validatorFuture.withTimeout(3.seconds) + await validatorFuture.withTimeout(FUTURE_TIMEOUT) validatorFuture.read() == false # And the message is published in the self node, but not in the other node, # because it doesn't pass the validator check. check: - await handlerFuture.withTimeout(3.seconds) - not await otherHandlerFuture.withTimeout(3.seconds) + await handlerFuture.withTimeout(FUTURE_TIMEOUT) + not await otherHandlerFuture.withTimeout(FUTURE_TIMEOUT) let (topic1, msg1) = handlerFuture.read() # let (otherTopic1, otherMsg1) = otherHandlerFuture.read() check: @@ -341,13 +344,13 @@ suite "Waku Relay": # Then the validator is ran in the other node, and succeeds # Not run in the self node check: - await validatorFuture.withTimeout(3.seconds) + await validatorFuture.withTimeout(FUTURE_TIMEOUT) validatorFuture.read() == true # And the message is published in both nodes check: - await handlerFuture.withTimeout(3.seconds) - await otherHandlerFuture.withTimeout(3.seconds) + await handlerFuture.withTimeout(FUTURE_TIMEOUT) + await otherHandlerFuture.withTimeout(FUTURE_TIMEOUT) let (topic2, msg2) = handlerFuture.read() let (otherTopic2, otherMsg2) = otherHandlerFuture.read() check: @@ -403,8 +406,8 @@ suite "Waku Relay": # Then the message is published in both nodes check: - await handlerFuture.withTimeout(3.seconds) - await otherHandlerFuture.withTimeout(3.seconds) + await handlerFuture.withTimeout(FUTURE_TIMEOUT) + await otherHandlerFuture.withTimeout(FUTURE_TIMEOUT) let (topic1, msg1) = handlerFuture.read() let (otherTopic1, otherMsg1) = otherHandlerFuture.read() check: @@ -497,12 +500,12 @@ suite "Waku Relay": # Then the messages are published in all nodes (because it's published in the center node) # Center meaning that all other nodes are connected to this one check: - await handlerFuture.withTimeout(3.seconds) - await handlerFuture2.withTimeout(3.seconds) - await otherHandlerFuture1.withTimeout(3.seconds) - await otherHandlerFuture2.withTimeout(3.seconds) - await anotherHandlerFuture1.withTimeout(3.seconds) - await anotherHandlerFuture2.withTimeout(3.seconds) + await handlerFuture.withTimeout(FUTURE_TIMEOUT) + await handlerFuture2.withTimeout(FUTURE_TIMEOUT) + await otherHandlerFuture1.withTimeout(FUTURE_TIMEOUT) + await otherHandlerFuture2.withTimeout(FUTURE_TIMEOUT) + await anotherHandlerFuture1.withTimeout(FUTURE_TIMEOUT) + await anotherHandlerFuture2.withTimeout(FUTURE_TIMEOUT) let (topic1, msg1) = handlerFuture.read() @@ -553,12 +556,12 @@ suite "Waku Relay": # Then the message is published in node and otherNode, # but not in anotherNode because it is not connected anymore check: - await handlerFuture.withTimeout(3.seconds) - await handlerFuture2.withTimeout(3.seconds) - await otherHandlerFuture1.withTimeout(3.seconds) - await otherHandlerFuture2.withTimeout(3.seconds) - not await anotherHandlerFuture1.withTimeout(3.seconds) - not await anotherHandlerFuture2.withTimeout(3.seconds) + await handlerFuture.withTimeout(FUTURE_TIMEOUT) + await handlerFuture2.withTimeout(FUTURE_TIMEOUT) + await otherHandlerFuture1.withTimeout(FUTURE_TIMEOUT) + await otherHandlerFuture2.withTimeout(FUTURE_TIMEOUT) + not await anotherHandlerFuture1.withTimeout(FUTURE_TIMEOUT) + not await anotherHandlerFuture2.withTimeout(FUTURE_TIMEOUT) let (topic3, msg3) = handlerFuture.read() @@ -596,12 +599,12 @@ suite "Waku Relay": # Then the messages are only published in anotherNode because it's disconnected from # the rest of the network check: - not await handlerFuture.withTimeout(3.seconds) - not await handlerFuture2.withTimeout(3.seconds) - not await otherHandlerFuture1.withTimeout(3.seconds) - not await otherHandlerFuture2.withTimeout(3.seconds) - await anotherHandlerFuture1.withTimeout(3.seconds) - await anotherHandlerFuture2.withTimeout(3.seconds) + not await handlerFuture.withTimeout(FUTURE_TIMEOUT) + not await handlerFuture2.withTimeout(FUTURE_TIMEOUT) + not await otherHandlerFuture1.withTimeout(FUTURE_TIMEOUT) + not await otherHandlerFuture2.withTimeout(FUTURE_TIMEOUT) + await anotherHandlerFuture1.withTimeout(FUTURE_TIMEOUT) + await anotherHandlerFuture2.withTimeout(FUTURE_TIMEOUT) let (anotherTopic3, anotherMsg3) = anotherHandlerFuture1.read() @@ -633,12 +636,12 @@ suite "Waku Relay": # Then the messages are only published in otherNode and node, but not in anotherNode # because it's disconnected from the rest of the network check: - await handlerFuture.withTimeout(3.seconds) - await handlerFuture2.withTimeout(3.seconds) - await otherHandlerFuture1.withTimeout(3.seconds) - await otherHandlerFuture2.withTimeout(3.seconds) - not await anotherHandlerFuture1.withTimeout(3.seconds) - not await anotherHandlerFuture2.withTimeout(3.seconds) + await handlerFuture.withTimeout(FUTURE_TIMEOUT) + await handlerFuture2.withTimeout(FUTURE_TIMEOUT) + await otherHandlerFuture1.withTimeout(FUTURE_TIMEOUT) + await otherHandlerFuture2.withTimeout(FUTURE_TIMEOUT) + not await anotherHandlerFuture1.withTimeout(FUTURE_TIMEOUT) + not await anotherHandlerFuture2.withTimeout(FUTURE_TIMEOUT) let (topic5, msg5) = handlerFuture.read() @@ -683,12 +686,12 @@ suite "Waku Relay": # even if they're connected like so AnotherNode <-> OtherNode <-> Node, # otherNode doesn't broadcast B topic messages because it's not subscribed to it check: - await handlerFuture.withTimeout(3.seconds) - not await handlerFuture2.withTimeout(3.seconds) - await otherHandlerFuture1.withTimeout(3.seconds) - await otherHandlerFuture2.withTimeout(3.seconds) - await anotherHandlerFuture1.withTimeout(3.seconds) - await anotherHandlerFuture2.withTimeout(3.seconds) + await handlerFuture.withTimeout(FUTURE_TIMEOUT) + not await handlerFuture2.withTimeout(FUTURE_TIMEOUT) + await otherHandlerFuture1.withTimeout(FUTURE_TIMEOUT) + await otherHandlerFuture2.withTimeout(FUTURE_TIMEOUT) + await anotherHandlerFuture1.withTimeout(FUTURE_TIMEOUT) + await anotherHandlerFuture2.withTimeout(FUTURE_TIMEOUT) let (topic7, msg7) = handlerFuture.read() @@ -860,8 +863,8 @@ suite "Waku Relay": # Then the message is received in both nodes check: - await handlerFuture.withTimeout(3.seconds) - await otherHandlerFuture.withTimeout(3.seconds) + await handlerFuture.withTimeout(FUTURE_TIMEOUT) + await otherHandlerFuture.withTimeout(FUTURE_TIMEOUT) (pubsubTopic, msg1) == handlerFuture.read() (pubsubTopic, msg1) == otherHandlerFuture.read() @@ -872,8 +875,8 @@ suite "Waku Relay": # Then the message is received in both nodes check: - await handlerFuture.withTimeout(3.seconds) - await otherHandlerFuture.withTimeout(3.seconds) + await handlerFuture.withTimeout(FUTURE_TIMEOUT) + await otherHandlerFuture.withTimeout(FUTURE_TIMEOUT) (pubsubTopic, msg2) == handlerFuture.read() (pubsubTopic, msg2) == otherHandlerFuture.read() @@ -884,8 +887,8 @@ suite "Waku Relay": # Then the message is received in both nodes check: - await handlerFuture.withTimeout(3.seconds) - await otherHandlerFuture.withTimeout(3.seconds) + await handlerFuture.withTimeout(FUTURE_TIMEOUT) + await otherHandlerFuture.withTimeout(FUTURE_TIMEOUT) (pubsubTopic, msg3) == handlerFuture.read() (pubsubTopic, msg3) == otherHandlerFuture.read() @@ -896,8 +899,8 @@ suite "Waku Relay": # Then the message is received in both nodes check: - await handlerFuture.withTimeout(3.seconds) - await otherHandlerFuture.withTimeout(3.seconds) + await handlerFuture.withTimeout(FUTURE_TIMEOUT) + await otherHandlerFuture.withTimeout(FUTURE_TIMEOUT) (pubsubTopic, msg4) == handlerFuture.read() (pubsubTopic, msg4) == otherHandlerFuture.read() @@ -908,8 +911,8 @@ suite "Waku Relay": # Then the message is received in both nodes check: - await handlerFuture.withTimeout(3.seconds) - await otherHandlerFuture.withTimeout(3.seconds) + await handlerFuture.withTimeout(FUTURE_TIMEOUT) + await otherHandlerFuture.withTimeout(FUTURE_TIMEOUT) (pubsubTopic, msg5) == handlerFuture.read() (pubsubTopic, msg5) == otherHandlerFuture.read() @@ -920,8 +923,8 @@ suite "Waku Relay": # Then the message is received in both nodes check: - await handlerFuture.withTimeout(3.seconds) - await otherHandlerFuture.withTimeout(3.seconds) + await handlerFuture.withTimeout(FUTURE_TIMEOUT) + await otherHandlerFuture.withTimeout(FUTURE_TIMEOUT) (pubsubTopic, msg6) == handlerFuture.read() (pubsubTopic, msg6) == otherHandlerFuture.read() @@ -932,8 +935,8 @@ suite "Waku Relay": # Then the message is received in both nodes check: - await handlerFuture.withTimeout(3.seconds) - await otherHandlerFuture.withTimeout(3.seconds) + await handlerFuture.withTimeout(FUTURE_TIMEOUT) + await otherHandlerFuture.withTimeout(FUTURE_TIMEOUT) (pubsubTopic, msg7) == handlerFuture.read() (pubsubTopic, msg7) == otherHandlerFuture.read() @@ -944,8 +947,8 @@ suite "Waku Relay": # Then the message is received in both nodes check: - await handlerFuture.withTimeout(3.seconds) - await otherHandlerFuture.withTimeout(3.seconds) + await handlerFuture.withTimeout(FUTURE_TIMEOUT) + await otherHandlerFuture.withTimeout(FUTURE_TIMEOUT) (pubsubTopic, msg8) == handlerFuture.read() (pubsubTopic, msg8) == otherHandlerFuture.read() @@ -956,8 +959,8 @@ suite "Waku Relay": # Then the message is received in both nodes check: - await handlerFuture.withTimeout(3.seconds) - await otherHandlerFuture.withTimeout(3.seconds) + await handlerFuture.withTimeout(FUTURE_TIMEOUT) + await otherHandlerFuture.withTimeout(FUTURE_TIMEOUT) (pubsubTopic, msg9) == handlerFuture.read() (pubsubTopic, msg9) == otherHandlerFuture.read() @@ -968,8 +971,8 @@ suite "Waku Relay": # Then the message is received in both nodes check: - await handlerFuture.withTimeout(3.seconds) - await otherHandlerFuture.withTimeout(3.seconds) + await handlerFuture.withTimeout(FUTURE_TIMEOUT) + await otherHandlerFuture.withTimeout(FUTURE_TIMEOUT) (pubsubTopic, msg10) == handlerFuture.read() (pubsubTopic, msg10) == otherHandlerFuture.read() @@ -1004,10 +1007,10 @@ suite "Waku Relay": msg1 = fakeWakuMessage(contentTopic=contentTopic, payload=getByteSequence(1024)) # 1KiB msg2 = fakeWakuMessage(contentTopic=contentTopic, payload=getByteSequence(10*1024)) # 10KiB msg3 = fakeWakuMessage(contentTopic=contentTopic, payload=getByteSequence(100*1024)) # 100KiB - msg4 = fakeWakuMessage(contentTopic=contentTopic, payload=getByteSequence(1023*1024)) # 1MiB - 1B -> Max Size (Inclusive Limit) - msg5 = fakeWakuMessage(contentTopic=contentTopic, payload=getByteSequence(1024*1024)) # 1MiB -> Max Size (Exclusive Limit) - msg6 = fakeWakuMessage(contentTopic=contentTopic, payload=getByteSequence(1025*1024)) # 1MiB + 1B -> Out of Max Size - + msg4 = fakeWakuMessage(contentTopic=contentTopic, payload=getByteSequence(1024*1024 - 1)) # 1MiB - 1B -> Max Size (Inclusive Limit) + msg5 = fakeWakuMessage(contentTopic=contentTopic, payload=getByteSequence(1024*1024)) # 1MiB -> Max Size (Exclusive Limit) + msg6 = fakeWakuMessage(contentTopic=contentTopic, payload=getByteSequence(1024*1024 + 1)) # 1MiB + 1B -> Out of Max Size + # When sending the 1KiB message handlerFuture = newPushHandlerFuture() otherHandlerFuture = newPushHandlerFuture() @@ -1015,11 +1018,11 @@ suite "Waku Relay": # Then the message is received in both nodes check: - await handlerFuture.withTimeout(3.seconds) - await otherHandlerFuture.withTimeout(3.seconds) + await handlerFuture.withTimeout(FUTURE_TIMEOUT) + await otherHandlerFuture.withTimeout(FUTURE_TIMEOUT) (pubsubTopic, msg1) == handlerFuture.read() (pubsubTopic, msg1) == otherHandlerFuture.read() - + # When sending the 10KiB message handlerFuture = newPushHandlerFuture() otherHandlerFuture = newPushHandlerFuture() @@ -1027,23 +1030,23 @@ suite "Waku Relay": # Then the message is received in both nodes check: - await handlerFuture.withTimeout(3.seconds) - await otherHandlerFuture.withTimeout(3.seconds) + await handlerFuture.withTimeout(FUTURE_TIMEOUT) + await otherHandlerFuture.withTimeout(FUTURE_TIMEOUT) (pubsubTopic, msg2) == handlerFuture.read() (pubsubTopic, msg2) == otherHandlerFuture.read() - + # When sending the 100KiB message handlerFuture = newPushHandlerFuture() otherHandlerFuture = newPushHandlerFuture() discard await node.publish(pubsubTopic, msg3) - + # Then the message is received in both nodes check: - await handlerFuture.withTimeout(3.seconds) - await otherHandlerFuture.withTimeout(3.seconds) + await handlerFuture.withTimeout(FUTURE_TIMEOUT) + await otherHandlerFuture.withTimeout(FUTURE_TIMEOUT) (pubsubTopic, msg3) == handlerFuture.read() (pubsubTopic, msg3) == otherHandlerFuture.read() - + # When sending the 1023KiB message handlerFuture = newPushHandlerFuture() otherHandlerFuture = newPushHandlerFuture() @@ -1051,8 +1054,8 @@ suite "Waku Relay": # Then the message is received in both nodes check: - await handlerFuture.withTimeout(3.seconds) - await otherHandlerFuture.withTimeout(3.seconds) + await handlerFuture.withTimeout(FUTURE_TIMEOUT) + await otherHandlerFuture.withTimeout(FUTURE_TIMEOUT) (pubsubTopic, msg4) == handlerFuture.read() (pubsubTopic, msg4) == otherHandlerFuture.read() @@ -1063,8 +1066,8 @@ suite "Waku Relay": # Then the message is received in self, because there's no checking, but not in other node check: - await handlerFuture.withTimeout(3.seconds) - not await otherHandlerFuture.withTimeout(3.seconds) + await handlerFuture.withTimeout(FUTURE_TIMEOUT) + not await otherHandlerFuture.withTimeout(FUTURE_TIMEOUT) (pubsubTopic, msg5) == handlerFuture.read() # When sending the 1025KiB message @@ -1074,8 +1077,8 @@ suite "Waku Relay": # Then the message is received in self, because there's no checking, but not in other node check: - await handlerFuture.withTimeout(3.seconds) - not await otherHandlerFuture.withTimeout(3.seconds) + await handlerFuture.withTimeout(FUTURE_TIMEOUT) + not await otherHandlerFuture.withTimeout(FUTURE_TIMEOUT) (pubsubTopic, msg6) == handlerFuture.read() # Finally stop the other node @@ -1120,31 +1123,31 @@ suite "Waku Relay": msg4 = fakeWakuMessage("msg4", pubsubTopic) discard await node.publish(pubsubTopic, msg1) - check await thisHandlerFuture.withTimeout(3.seconds) - check await otherHandlerFuture.withTimeout(3.seconds) + check await thisHandlerFuture.withTimeout(FUTURE_TIMEOUT) + check await otherHandlerFuture.withTimeout(FUTURE_TIMEOUT) thisHandlerFuture = newPushHandlerFuture() otherHandlerFuture = newPushHandlerFuture() discard await node.publish(pubsubTopic, msg2) - check await thisHandlerFuture.withTimeout(3.seconds) - check await otherHandlerFuture.withTimeout(3.seconds) + check await thisHandlerFuture.withTimeout(FUTURE_TIMEOUT) + check await otherHandlerFuture.withTimeout(FUTURE_TIMEOUT) thisHandlerFuture = newPushHandlerFuture() otherHandlerFuture = newPushHandlerFuture() discard await node.publish(pubsubTopic, msg3) - check await thisHandlerFuture.withTimeout(3.seconds) - check await otherHandlerFuture.withTimeout(3.seconds) + check await thisHandlerFuture.withTimeout(FUTURE_TIMEOUT) + check await otherHandlerFuture.withTimeout(FUTURE_TIMEOUT) thisHandlerFuture = newPushHandlerFuture() otherHandlerFuture = newPushHandlerFuture() discard await node.publish(pubsubTopic, msg4) check: - await thisHandlerFuture.withTimeout(3.seconds) + await thisHandlerFuture.withTimeout(FUTURE_TIMEOUT) thisMessageSeq == @[ (pubsubTopic, msg1), (pubsubTopic, msg2), (pubsubTopic, msg3), (pubsubTopic, msg4) ] - await otherHandlerFuture.withTimeout(3.seconds) + await otherHandlerFuture.withTimeout(FUTURE_TIMEOUT) otherMessageSeq == @[ (pubsubTopic, msg1), (pubsubTopic, msg2), @@ -1194,8 +1197,8 @@ suite "Waku Relay": # Then the message is received in both nodes check: - await handlerFuture.withTimeout(3.seconds) - await otherHandlerFuture.withTimeout(3.seconds) + await handlerFuture.withTimeout(FUTURE_TIMEOUT) + await otherHandlerFuture.withTimeout(FUTURE_TIMEOUT) (pubsubTopic, msg1) == handlerFuture.read() (pubsubTopic, msg1) == otherHandlerFuture.read() @@ -1207,8 +1210,8 @@ suite "Waku Relay": # Then the message is received in both nodes check: - await handlerFuture.withTimeout(3.seconds) - await otherHandlerFuture.withTimeout(3.seconds) + await handlerFuture.withTimeout(FUTURE_TIMEOUT) + await otherHandlerFuture.withTimeout(FUTURE_TIMEOUT) (pubsubTopic, msg2) == handlerFuture.read() (pubsubTopic, msg2) == otherHandlerFuture.read() @@ -1224,8 +1227,8 @@ suite "Waku Relay": # Then the message is received in both nodes check: - await handlerFuture.withTimeout(3.seconds) - await otherHandlerFuture.withTimeout(3.seconds) + await handlerFuture.withTimeout(FUTURE_TIMEOUT) + await otherHandlerFuture.withTimeout(FUTURE_TIMEOUT) (pubsubTopic, msg3) == handlerFuture.read() (pubsubTopic, msg3) == otherHandlerFuture.read() @@ -1237,15 +1240,15 @@ suite "Waku Relay": # Then the message is received in both nodes check: - await handlerFuture.withTimeout(3.seconds) - await otherHandlerFuture.withTimeout(3.seconds) + await handlerFuture.withTimeout(FUTURE_TIMEOUT) + await otherHandlerFuture.withTimeout(FUTURE_TIMEOUT) (pubsubTopic, msg4) == handlerFuture.read() (pubsubTopic, msg4) == otherHandlerFuture.read() # Finally stop the other node await allFutures(otherSwitch.stop(), otherNode.stop()) - xasyncTest "Relay can receive messages after subscribing and stopping without unsubscribing": + asyncTest "Relay can't receive messages after subscribing and stopping without unsubscribing": # Given a second node connected to the first one let otherSwitch = newTestSwitch() @@ -1272,7 +1275,6 @@ suite "Waku Relay": await sleepAsync(500.millis) - # FIXME: Inconsistent behaviour with Filter protocol. # Given other node is stopped without unsubscribing await allFutures(otherSwitch.stop(), otherNode.stop()) @@ -1280,22 +1282,20 @@ suite "Waku Relay": let msg1 = fakeWakuMessage(testMessage, pubsubTopic) discard await node.publish(pubsubTopic, msg1) - # Then the message is received in both nodes + # Then the message is not received in any node check: - await handlerFuture.withTimeout(3.seconds) - await otherHandlerFuture.withTimeout(3.seconds) + await handlerFuture.withTimeout(FUTURE_TIMEOUT) + not await otherHandlerFuture.withTimeout(FUTURE_TIMEOUT) (pubsubTopic, msg1) == handlerFuture.read() - (pubsubTopic, msg1) == otherHandlerFuture.read() - + # When sending a message from other node handlerFuture = newPushHandlerFuture() otherHandlerFuture = newPushHandlerFuture() let msg2 = fakeWakuMessage(testMessage, pubsubTopic) discard await otherNode.publish(pubsubTopic, msg2) - + # Then the message is received in both nodes check: - await handlerFuture.withTimeout(3.seconds) - await otherHandlerFuture.withTimeout(3.seconds) - (pubsubTopic, msg2) == handlerFuture.read() + not await handlerFuture.withTimeout(FUTURE_TIMEOUT) + await otherHandlerFuture.withTimeout(FUTURE_TIMEOUT) (pubsubTopic, msg2) == otherHandlerFuture.read() diff --git a/tests/waku_relay/test_waku_relay.nim b/tests/waku_relay/test_waku_relay.nim deleted file mode 100644 index 53e3ec8039..0000000000 --- a/tests/waku_relay/test_waku_relay.nim +++ /dev/null @@ -1,211 +0,0 @@ -{.used.} - -import - std/[options, sequtils, strutils], - stew/shims/net as stewNet, - testutils/unittests, - chronicles, - chronos, - libp2p/protocols/pubsub/pubsub, - libp2p/protocols/pubsub/rpc/messages - -import - ../../../waku/node/peer_manager, - ../../../waku/waku_core, - ../../../waku/waku_relay, - ../testlib/common, - ../testlib/wakucore, - ./utils - - -suite "Waku Relay": - - asyncTest "subscribe and add handler to topics": - ## Setup - let nodeA = await newTestWakuRelay() - - ## Given - let - networkA = "test-network1" - networkB = "test-network2" - - ## when - discard nodeA.subscribe(networkA, noopRawHandler()) - discard nodeA.subscribe(networkB, noopRawHandler()) - - ## Then - check: - nodeA.isSubscribed(networkA) - nodeA.isSubscribed(networkB) - - let subscribedTopics = toSeq(nodeA.subscribedTopics) - check: - subscribedTopics.len == 2 - subscribedTopics.contains(networkA) - subscribedTopics.contains(networkB) - - ## Cleanup - await nodeA.stop() - - asyncTest "unsubscribe all handlers from topic": - ## Setup - let nodeA = await newTestWakuRelay() - - ## Given - let - networkA = "test-network1" - networkB = "test-network2" - networkC = "test-network3" - - discard nodeA.subscribe(networkA, noopRawHandler()) - discard nodeA.subscribe(networkB, noopRawHandler()) - discard nodeA.subscribe(networkC, noopRawHandler()) - - let topics = toSeq(nodeA.subscribedTopics) - require: - topics.len == 3 - topics.contains(networkA) - topics.contains(networkB) - topics.contains(networkC) - - ## When - nodeA.unsubscribeAll(networkA) - - ## Then - check: - nodeA.isSubscribed(networkB) - nodeA.isSubscribed(networkC) - not nodeA.isSubscribed(networkA) - - let subscribedTopics = toSeq(nodeA.subscribedTopics) - check: - subscribedTopics.len == 2 - subscribedTopics.contains(networkB) - subscribedTopics.contains(networkC) - not subscribedTopics.contains(networkA) - - ## Cleanup - await nodeA.stop() - - asyncTest "publish a message into a topic": - ## Setup - let - srcSwitch = newTestSwitch() - srcPeerManager = PeerManager.new(srcSwitch) - srcNode = await newTestWakuRelay(srcSwitch) - dstSwitch = newTestSwitch() - dstPeerManager = PeerManager.new(dstSwitch) - dstNode = await newTestWakuRelay(dstSwitch) - - await allFutures(srcSwitch.start(), dstSwitch.start()) - - let dstPeerInfo = dstPeerManager.switch.peerInfo.toRemotePeerInfo() - let connOk = await srcPeerManager.connectRelay(dstPeerInfo) - require: - connOk == true - - ## Given - let networkTopic = "test-network1" - let message = fakeWakuMessage() - - # Self subscription (triggerSelf = true) - let srcSubsFut = newFuture[(PubsubTopic, WakuMessage)]() - proc srcSubsHandler(topic: PubsubTopic, message: WakuMessage) {.async, gcsafe.} = - srcSubsFut.complete((topic, message)) - - discard srcNode.subscribe(networkTopic, srcSubsHandler) - - # Subscription - let dstSubsFut = newFuture[(PubsubTopic, WakuMessage)]() - proc dstSubsHandler(topic: PubsubTopic, message: WakuMessage) {.async, gcsafe.} = - dstSubsFut.complete((topic, message)) - - discard dstNode.subscribe(networkTopic, dstSubsHandler) - - await sleepAsync(500.millis) - - ## When - discard await srcNode.publish(networkTopic, message) - - ## Then - require: - await srcSubsFut.withTimeout(5.seconds) - await dstSubsFut.withTimeout(5.seconds) - - let (srcTopic, srcMsg) = srcSubsFut.read() - check: - srcTopic == networkTopic - srcMsg == message - - let (dstTopic, dstMsg) = dstSubsFut.read() - check: - dstTopic == networkTopic - dstMsg == message - - ## Cleanup - await allFutures(srcSwitch.stop(), dstSwitch.stop()) - - asyncTest "content topic validator as a message subscription filter": - ## Setup - let - srcSwitch = newTestSwitch() - srcPeerManager = PeerManager.new(srcSwitch) - srcNode = await newTestWakuRelay(srcSwitch) - dstSwitch = newTestSwitch() - dstPeerManager = PeerManager.new(dstSwitch) - dstNode = await newTestWakuRelay(dstSwitch) - - await allFutures(srcSwitch.start(), dstSwitch.start()) - - let dstPeerInfo = dstPeerManager.switch.peerInfo.toRemotePeerInfo() - let connOk = await srcPeerManager.connectRelay(dstPeerInfo) - require: - connOk == true - - ## Given - let networkTopic = "test-network1" - let contentTopic = "test-content1" - - let message = fakeWakuMessage(contentTopic=contentTopic) - let messages = @[ - fakeWakuMessage(contentTopic="any"), - fakeWakuMessage(contentTopic="any"), - fakeWakuMessage(contentTopic="any"), - message, - fakeWakuMessage(contentTopic="any"), - ] - - # Subscription - let dstSubsFut = newFuture[(PubsubTopic, WakuMessage)]() - proc dstSubsHandler(topic: PubsubTopic, message: WakuMessage) {.async, gcsafe.} = - dstSubsFut.complete((topic, message)) - - discard dstNode.subscribe(networkTopic, dstSubsHandler) - - await sleepAsync(500.millis) - - # Validator - proc validator(topic: PubsubTopic, msg: WakuMessage): Future[ValidationResult] {.async.} = - # only relay messages with contentTopic1 - if msg.contentTopic != contentTopic: - return ValidationResult.Reject - - return ValidationResult.Accept - - dstNode.addValidator(networkTopic, validator) - - ## When - for msg in messages: - discard await srcNode.publish(networkTopic, msg) - - ## Then - require: - await dstSubsFut.withTimeout(5.seconds) - - let (dstTopic, dstMsg) = dstSubsFut.read() - check: - dstTopic == networkTopic - dstMsg == message - - ## Cleanup - await allFutures(srcSwitch.stop(), dstSwitch.stop()) From a5da1fc494faae038805942799b0997f27fcf58e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lex=20Cabeza=20Romero?= Date: Wed, 15 Nov 2023 18:10:10 +0100 Subject: [PATCH 122/274] fix(tests): Compilation failure fix (#2222) * Add missing required keywords. --- tests/node/test_wakunode_filter.nim | 41 ++++++++++++++++++----------- tests/waku_relay/test_protocol.nim | 10 +++---- 2 files changed, 31 insertions(+), 20 deletions(-) diff --git a/tests/node/test_wakunode_filter.nim b/tests/node/test_wakunode_filter.nim index 5890ab2088..8577a0fa75 100644 --- a/tests/node/test_wakunode_filter.nim +++ b/tests/node/test_wakunode_filter.nim @@ -1,27 +1,38 @@ {.used.} import - std/[options, tables, sequtils], + std/[ + options, + tables, + sequtils + ], stew/shims/net as stewNet, testutils/unittests, chronos, chronicles, os, - libp2p/peerstore, - libp2p/crypto/crypto + libp2p/[ + peerstore, + crypto/crypto + ] import - ../../../waku/waku_core, - ../../../waku/node/peer_manager, - ../../../waku/node/waku_node, - ../../../waku/waku_filter_v2, - ../../../waku/waku_filter_v2/client, - ../../../waku/waku_filter_v2/subscriptions, - ../testlib/common, - ../testlib/wakucore, - ../testlib/wakunode, - ../testlib/testasync, - ../testlib/futures + ../../../waku/[ + waku_core, + node/peer_manager, + node/waku_node, + waku_filter_v2, + waku_filter_v2/client, + waku_filter_v2/subscriptions + ], + ../testlib/[ + common, + wakucore, + wakunode, + testasync, + futures, + testutils + ] let FUTURE_TIMEOUT = 1.seconds @@ -185,7 +196,7 @@ suite "Waku Filter - End to End": # And the client node reboots waitFor client.stop() waitFor client.start() - client.mountFilterClient() + discard client.mountFilterClient() # When a message is sent to the subscribed content topic, via Relay let msg = fakeWakuMessage(contentTopic=contentTopic) diff --git a/tests/waku_relay/test_protocol.nim b/tests/waku_relay/test_protocol.nim index 3d226a947d..e641a4196b 100644 --- a/tests/waku_relay/test_protocol.nim +++ b/tests/waku_relay/test_protocol.nim @@ -239,7 +239,7 @@ suite "Waku Relay": asyncTest "Refreshing subscription": # Given a subscribed node - node.subscribe(pubsubTopic, simpleFutureHandler) + discard node.subscribe(pubsubTopic, simpleFutureHandler) check: node.isSubscribed(pubsubTopic) node.subscribedTopics == pubsubTopicSeq @@ -252,7 +252,7 @@ suite "Waku Relay": var otherHandlerFuture = newPushHandlerFuture() proc otherSimpleFutureHandler(topic: PubsubTopic, message: WakuMessage) {.async, gcsafe.} = otherHandlerFuture.complete((topic, message)) - node.subscribe(pubsubTopic, otherSimpleFutureHandler) + discard node.subscribe(pubsubTopic, otherSimpleFutureHandler) check: node.isSubscribed(pubsubTopic) node.subscribedTopics == pubsubTopicSeq @@ -297,14 +297,14 @@ suite "Waku Relay": otherHandlerFuture.complete((topic, message)) otherNode.addValidator(pubsubTopic, len4Validator) - otherNode.subscribe(pubsubTopic, otherSimpleFutureHandler) + discard otherNode.subscribe(pubsubTopic, otherSimpleFutureHandler) await sleepAsync(500.millis) check: otherNode.isSubscribed(pubsubTopic) # Given a subscribed node with a validator node.addValidator(pubsubTopic, len4Validator) - node.subscribe(pubsubTopic, simpleFutureHandler) + discard node.subscribe(pubsubTopic, simpleFutureHandler) await sleepAsync(500.millis) check: node.isSubscribed(pubsubTopic) @@ -784,7 +784,7 @@ suite "Waku Relay": asyncTest "Single Node with Single Pubsub Topic": # Given a node subscribed to a pubsub topic - node.subscribe(pubsubTopic, simpleFutureHandler) + discard node.subscribe(pubsubTopic, simpleFutureHandler) check node.subscribedTopics == pubsubTopicSeq # When unsubscribing from all pubsub topics From c9e869fb2904af372760b38181a8716602e2adeb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lex=20Cabeza=20Romero?= Date: Thu, 16 Nov 2023 16:18:50 +0100 Subject: [PATCH 123/274] fix(relay): Failing protocol tests (#2224) * Fix failing relay protocol tests. --- tests/waku_relay/test_protocol.nim | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/tests/waku_relay/test_protocol.nim b/tests/waku_relay/test_protocol.nim index e641a4196b..0230930460 100644 --- a/tests/waku_relay/test_protocol.nim +++ b/tests/waku_relay/test_protocol.nim @@ -1007,9 +1007,10 @@ suite "Waku Relay": msg1 = fakeWakuMessage(contentTopic=contentTopic, payload=getByteSequence(1024)) # 1KiB msg2 = fakeWakuMessage(contentTopic=contentTopic, payload=getByteSequence(10*1024)) # 10KiB msg3 = fakeWakuMessage(contentTopic=contentTopic, payload=getByteSequence(100*1024)) # 100KiB - msg4 = fakeWakuMessage(contentTopic=contentTopic, payload=getByteSequence(1024*1024 - 1)) # 1MiB - 1B -> Max Size (Inclusive Limit) - msg5 = fakeWakuMessage(contentTopic=contentTopic, payload=getByteSequence(1024*1024)) # 1MiB -> Max Size (Exclusive Limit) - msg6 = fakeWakuMessage(contentTopic=contentTopic, payload=getByteSequence(1024*1024 + 1)) # 1MiB + 1B -> Out of Max Size + msg4 = fakeWakuMessage(contentTopic=contentTopic, payload=getByteSequence(1023*1024 + 933)) # 1MiB - 91B -> Max Size (Inclusive Limit) + msg5 = fakeWakuMessage(contentTopic=contentTopic, payload=getByteSequence(1023*1024 + 934)) # 1MiB - 90B -> Max Size (Exclusive Limit) + msg6 = fakeWakuMessage(contentTopic=contentTopic, payload=getByteSequence(1024*1024)) # 1MiB -> Out of Max Size + # When sending the 1KiB message handlerFuture = newPushHandlerFuture() @@ -1047,7 +1048,7 @@ suite "Waku Relay": (pubsubTopic, msg3) == handlerFuture.read() (pubsubTopic, msg3) == otherHandlerFuture.read() - # When sending the 1023KiB message + # When sending the 1023KiB + 933B message handlerFuture = newPushHandlerFuture() otherHandlerFuture = newPushHandlerFuture() discard await node.publish(pubsubTopic, msg4) @@ -1059,7 +1060,7 @@ suite "Waku Relay": (pubsubTopic, msg4) == handlerFuture.read() (pubsubTopic, msg4) == otherHandlerFuture.read() - # When sending the 1024KiB message + # When sending the 1023KiB + 934B message handlerFuture = newPushHandlerFuture() otherHandlerFuture = newPushHandlerFuture() discard await node.publish(pubsubTopic, msg5) @@ -1070,7 +1071,7 @@ suite "Waku Relay": not await otherHandlerFuture.withTimeout(FUTURE_TIMEOUT) (pubsubTopic, msg5) == handlerFuture.read() - # When sending the 1025KiB message + # When sending the 1MiB handlerFuture = newPushHandlerFuture() otherHandlerFuture = newPushHandlerFuture() discard await node.publish(pubsubTopic, msg6) @@ -1159,7 +1160,7 @@ suite "Waku Relay": await allFutures(otherSwitch.stop(), otherNode.stop()) suite "Security and Privacy": - asyncTest "Relay can receive messages after reboot and reconnect": + xasyncTest "Relay can receive messages after reboot and reconnect": # Given a second node connected to the first one let otherSwitch = newTestSwitch() From ef8ffbdbd0f62510794d2cadb3dba0ac1c90caba Mon Sep 17 00:00:00 2001 From: gabrielmer <101006718+gabrielmer@users.noreply.github.com> Date: Thu, 16 Nov 2023 18:15:27 +0200 Subject: [PATCH 124/274] chore: decoupling announced and listen addresses (#2203) --- waku/node/waku_node.nim | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/waku/node/waku_node.nim b/waku/node/waku_node.nim index f649813478..d26829a40d 100644 --- a/waku/node/waku_node.nim +++ b/waku/node/waku_node.nim @@ -21,6 +21,7 @@ import libp2p/protocols/connectivity/autonat/service, libp2p/protocols/rendezvous, libp2p/builders, + libp2p/transports/transport, libp2p/transports/tcptransport, libp2p/transports/wstransport import @@ -1082,16 +1083,29 @@ proc isBindIpWithZeroPort(inputMultiAdd: MultiAddress): bool = proc printNodeNetworkInfo*(node: WakuNode): void = let peerInfo = node.switch.peerInfo + var announcedStr = "" var listenStr = "" + var localIp = "" + + try: + localIp = $getPrimaryIPAddr() + except Exception as e: + warn "Could not retrieve localIp", msg=e.msg info "PeerInfo", peerId = peerInfo.peerId, addrs = peerInfo.addrs for address in node.announcedAddresses: var fulladdr = "[" & $address & "/p2p/" & $peerInfo.peerId & "]" - listenStr &= fulladdr + announcedStr &= fulladdr + + for transport in node.switch.transports: + for address in transport.addrs: + var fulladdr = "[" & $address & "/p2p/" & $peerInfo.peerId & "]" + listenStr &= fulladdr ## XXX: this should be /ip4..., / stripped? - info "Listening on", full = listenStr + info "Listening on", full = listenStr, localIp = localIp + info "Announcing addresses", full = announcedStr info "DNS: discoverable ENR ", enr = node.enr.toUri() proc start*(node: WakuNode) {.async.} = @@ -1106,11 +1120,6 @@ proc start*(node: WakuNode) {.async.} = if isBindIpWithZeroPort(address): zeroPortPresent = true - if not zeroPortPresent: - printNodeNetworkInfo(node) - else: - info "Listening port is dynamically allocated, address and ENR generation postponed" - # Perform relay-specific startup tasks TODO: this should be rethought if not node.wakuRelay.isNil(): await node.startRelay() @@ -1129,6 +1138,11 @@ proc start*(node: WakuNode) {.async.} = node.wakuMetadata.start() + if not zeroPortPresent: + printNodeNetworkInfo(node) + else: + info "Listening port is dynamically allocated, address and ENR generation postponed" + info "Node started successfully" proc stop*(node: WakuNode) {.async.} = From 13fb7c2f74a1405aea79e54812aa73f37c1705af Mon Sep 17 00:00:00 2001 From: Ivan FB <128452529+Ivansete-status@users.noreply.github.com> Date: Mon, 20 Nov 2023 23:25:55 +0100 Subject: [PATCH 125/274] group_manager.nim more except detail when cant connect eth client (#2195) --- waku/waku_rln_relay/group_manager/on_chain/group_manager.nim | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/waku/waku_rln_relay/group_manager/on_chain/group_manager.nim b/waku/waku_rln_relay/group_manager/on_chain/group_manager.nim index 3420882efd..2cfaf1b749 100644 --- a/waku/waku_rln_relay/group_manager/on_chain/group_manager.nim +++ b/waku/waku_rln_relay/group_manager/on_chain/group_manager.nim @@ -403,7 +403,8 @@ method init*(g: OnchainGroupManager): Future[void] {.async.} = try: ethRpc = await newWeb3(g.ethClientUrl) except CatchableError: - raise newException(ValueError, "could not connect to the Ethereum client") + let errMsg = "could not connect to the Ethereum client: " & getCurrentExceptionMsg() + raise newException(ValueError, errMsg) # Set the chain id let chainId = await ethRpc.provider.eth_chainId() From 9ff441ab477e75826af84cc839101bc901c54e61 Mon Sep 17 00:00:00 2001 From: Abhimanyu Date: Tue, 21 Nov 2023 11:27:50 +0100 Subject: [PATCH 126/274] chore: removing automatic vacuuming from retention policy code (#2228) * retention policy and testcase updated * removing dead code * review updated code --- tests/waku_archive/test_retention_policy.nim | 26 ++++----- .../retention_policy_capacity.nim | 18 ++---- .../retention_policy_size.nim | 55 ++++++++----------- 3 files changed, 40 insertions(+), 59 deletions(-) diff --git a/tests/waku_archive/test_retention_policy.nim b/tests/waku_archive/test_retention_policy.nim index 0927a15e80..2aa3866323 100644 --- a/tests/waku_archive/test_retention_policy.nim +++ b/tests/waku_archive/test_retention_policy.nim @@ -70,11 +70,6 @@ suite "Waku Archive - Retention policy": let retentionPolicy: RetentionPolicy = SizeRetentionPolicy.init(size=sizeLimit) var putFutures = newSeq[Future[ArchiveDriverResult[void]]]() - # variables to check the db size - var pageSize = (waitFor driver.getPagesSize()).tryGet() - var pageCount = (waitFor driver.getPagesCount()).tryGet() - var sizeDB = float(pageCount * pageSize) / (1024.0 * 1024.0) - # make sure that the db is empty to before test begins let storedMsg = (waitFor driver.getAllMessages()).tryGet() # if there are messages in db, empty them @@ -95,24 +90,27 @@ suite "Waku Archive - Retention policy": ## Then # calculate the current database size - pageSize = (waitFor driver.getPagesSize()).tryGet() - pageCount = (waitFor driver.getPagesCount()).tryGet() - sizeDB = float(pageCount * pageSize) / (1024.0 * 1024.0) + let pageSize = (waitFor driver.getPagesSize()).tryGet() + let pageCount = (waitFor driver.getPagesCount()).tryGet() + let sizeDB = float(pageCount * pageSize) / (1024.0 * 1024.0) + + # NOTE: since vacuumin is done manually, this needs to be revisited if vacuuming done automatically + + # get the rows count pre-deletion + let rowsCountBeforeDeletion = (waitFor driver.getMessagesCount()).tryGet() - # execute policy provided the current db size oveflows + # execute policy provided the current db size oveflows, results in rows deletion require (sizeDB >= sizeLimit) require (waitFor retentionPolicy.execute(driver)).isOk() - # update the current db size - pageSize = (waitFor driver.getPagesSize()).tryGet() - pageCount = (waitFor driver.getPagesCount()).tryGet() - sizeDB = float(pageCount * pageSize) / (1024.0 * 1024.0) + # get the number or rows from DB + let rowCountAfterDeletion = (waitFor driver.getMessagesCount()).tryGet() check: # size of the database is used to check if the storage limit has been preserved # check the current database size with the limitSize provided by the user # it should be lower - sizeDB <= sizeLimit + rowCountAfterDeletion <= rowsCountBeforeDeletion ## Cleanup (waitFor driver.close()).expect("driver to close") diff --git a/waku/waku_archive/retention_policy/retention_policy_capacity.nim b/waku/waku_archive/retention_policy/retention_policy_capacity.nim index 73430c597f..bb1d146cf1 100644 --- a/waku/waku_archive/retention_policy/retention_policy_capacity.nim +++ b/waku/waku_archive/retention_policy/retention_policy_capacity.nim @@ -62,23 +62,13 @@ method execute*(p: CapacityRetentionPolicy, driver: ArchiveDriver): Future[RetentionPolicyResult[void]] {.async.} = - let numMessagesRes = await driver.getMessagesCount() - if numMessagesRes.isErr(): - return err("failed to get messages count: " & numMessagesRes.error) - - let numMessages = numMessagesRes.value + let numMessages = (await driver.getMessagesCount()).valueOr: + return err("failed to get messages count: " & error) if numMessages < p.totalCapacity: return ok() - let res = await driver.deleteOldestMessagesNotWithinLimit(limit=p.capacity + p.deleteWindow) - if res.isErr(): - return err("deleting oldest messages failed: " & res.error) - - # vacuum to get the deleted pages defragments to save storage space - # this will resize the database size - let resVaccum = await driver.performVacuum() - if resVaccum.isErr(): - return err("vacuumming failed: " & resVaccum.error) + (await driver.deleteOldestMessagesNotWithinLimit(limit=p.capacity + p.deleteWindow)).isOkOr: + return err("deleting oldest messages failed: " & error) return ok() diff --git a/waku/waku_archive/retention_policy/retention_policy_size.nim b/waku/waku_archive/retention_policy/retention_policy_size.nim index 30c5858c1f..8d645083bd 100644 --- a/waku/waku_archive/retention_policy/retention_policy_size.nim +++ b/waku/waku_archive/retention_policy/retention_policy_size.nim @@ -50,36 +50,29 @@ method execute*(p: SizeRetentionPolicy, if pageSize == 0: return err("failed to get Page size: " & pageSizeRes.error) - # keep deleting until the current db size falls within size limit - while true: - # to get the size of the database, pageCount and PageSize is required - # get page count in "messages" database - let pageCount = (await driver.getPagesCount()).valueOr: - return err("failed to get Pages count: " & $error) - - # database size in megabytes (Mb) - let totalSizeOfDB: float = float(pageSize * pageCount)/1024.0 - - if totalSizeOfDB < p.sizeLimit: - break - - # to shread/delete messsges, get the total row/message count - let numMessagesRes = await driver.getMessagesCount() - if numMessagesRes.isErr(): - return err("failed to get messages count: " & numMessagesRes.error) - let numMessages = numMessagesRes.value - - # 80% of the total messages are to be kept, delete others - let pageDeleteWindow = int(float(numMessages) * DeleteLimit) - - let res = await driver.deleteOldestMessagesNotWithinLimit(limit=pageDeleteWindow) - if res.isErr(): - return err("deleting oldest messages failed: " & res.error) - - # vacuum to get the deleted pages defragments to save storage space - # this will resize the database size - let resVaccum = await driver.performVacuum() - if resVaccum.isErr(): - return err("vacuumming failed: " & resVaccum.error) + # to get the size of the database, pageCount and PageSize is required + # get page count in "messages" database + let pageCount = (await driver.getPagesCount()).valueOr: + return err("failed to get Pages count: " & $error) + + # database size in megabytes (Mb) + let totalSizeOfDB: float = float(pageSize * pageCount)/1024.0 + + if totalSizeOfDB < p.sizeLimit: + return ok() + + # to shread/delete messsges, get the total row/message count + let numMessages = (await driver.getMessagesCount()).valueOr: + return err("failed to get messages count: " & error) + + # NOTE: Using SQLite vacuuming is done manually, we delete a percentage of rows + # if vacumming is done automatically then we aim to check DB size periodially for efficient + # retention policy implementation. + + # 80% of the total messages are to be kept, delete others + let pageDeleteWindow = int(float(numMessages) * DeleteLimit) + + (await driver.deleteOldestMessagesNotWithinLimit(limit=pageDeleteWindow)).isOkOr: + return err("deleting oldest messages failed: " & error) return ok() From 8c5666d2000b6d1fea508df1199c3d272fcc7951 Mon Sep 17 00:00:00 2001 From: Aaryamann Challani <43716372+rymnc@users.noreply.github.com> Date: Tue, 21 Nov 2023 16:43:15 +0300 Subject: [PATCH 127/274] chore: update docs for rln-keystore-generator (#2210) --- Makefile | 4 ---- docs/tutorial/rln-keystore-generator.md | 6 +++--- waku.nimble | 4 ---- 3 files changed, 3 insertions(+), 11 deletions(-) diff --git a/Makefile b/Makefile index 97d96adbed..dfc0b6f439 100644 --- a/Makefile +++ b/Makefile @@ -178,10 +178,6 @@ chat2: | build deps librln echo -e $(BUILD_MSG) "build/$@" && \ $(ENV_SCRIPT) nim chat2 $(NIM_PARAMS) waku.nims -rln-keystore-generator: | build deps librln - echo -e $(BUILD_MSG) "build/$@" && \ - $(ENV_SCRIPT) nim rln_keystore_generator $(NIM_PARAMS) waku.nims - rln-db-inspector: | build deps librln echo -e $(BUILD_MSG) "build/$@" && \ $(ENV_SCRIPT) nim rln_db_inspector $(NIM_PARAMS) waku.nims diff --git a/docs/tutorial/rln-keystore-generator.md b/docs/tutorial/rln-keystore-generator.md index 869babf365..a9643ffb5f 100644 --- a/docs/tutorial/rln-keystore-generator.md +++ b/docs/tutorial/rln-keystore-generator.md @@ -13,7 +13,7 @@ It is meant to be used to generate and persist a set of valid RLN credentials to 1. First, we compile the binary ```bash - make -j12 rln-keystore-generator + make -j16 wakunode2 ``` This command will fetch the rln static library and link it automatically. @@ -31,7 +31,7 @@ It is meant to be used to generate and persist a set of valid RLN credentials to 3. Dry run the command to ensure better degree of execution ```bash - ./build/rln_keystore_generator \ + ./build/wakunode2 generateRlnKeystore \ --rln-relay-eth-client-address:$RPC_URL \ --rln-relay-eth-private-key:$PRIVATE_KEY \ --rln-relay-eth-contract-address:$RLN_CONTRACT_ADDRESS \ @@ -43,7 +43,7 @@ It is meant to be used to generate and persist a set of valid RLN credentials to 4. Run the keystore generator with the onchain registration ```bash - ./build/rln_keystore_generator \ + ./build/wakunode2 generateRlnKeystore \ --rln-relay-eth-client-address:$RPC_URL \ --rln-relay-eth-private-key:$PRIVATE_KEY \ --rln-relay-eth-contract-address:$RLN_CONTRACT_ADDRESS \ diff --git a/waku.nimble b/waku.nimble index 528eef74e0..f9337fceb4 100644 --- a/waku.nimble +++ b/waku.nimble @@ -70,10 +70,6 @@ task networkmonitor, "Build network monitor tool": let name = "networkmonitor" buildBinary name, "apps/networkmonitor/" -task rln_keystore_generator, "Build the rln keystore generator": - let name = "rln_keystore_generator" - buildBinary name, "tools/rln_keystore_generator/" - task rln_db_inspector, "Build the rln db inspector": let name = "rln_db_inspector" buildBinary name, "tools/rln_db_inspector/" From c973b8506922a1924abe5ad03d130ab36928c44d Mon Sep 17 00:00:00 2001 From: Ivan FB <128452529+Ivansete-status@users.noreply.github.com> Date: Tue, 21 Nov 2023 14:54:45 +0100 Subject: [PATCH 128/274] peer_manager.nim: better feedback if can't dial peer with WakuMetadataCodec (#2230) --- waku/node/peer_manager/peer_manager.nim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/waku/node/peer_manager/peer_manager.nim b/waku/node/peer_manager/peer_manager.nim index 009d0879e8..9bfd892cda 100644 --- a/waku/node/peer_manager/peer_manager.nim +++ b/waku/node/peer_manager/peer_manager.nim @@ -331,7 +331,7 @@ proc onPeerEvent(pm: PeerManager, peerId: PeerId, event: PeerEvent) {.async.} = try: conn = await pm.switch.dial(peerId, WakuMetadataCodec) except CatchableError: - reason = "waku metadata codec not supported" + reason = "waku metadata codec not supported: " & getCurrentExceptionMsg() break wakuMetadata # request metadata from connecting peer From 51f36099d572661a53818cb2ff85264a1e5c4b23 Mon Sep 17 00:00:00 2001 From: Alvaro Revuelta Date: Tue, 21 Nov 2023 19:24:31 +0100 Subject: [PATCH 129/274] fix(rln): error in api when rate limit (#2212) --- waku/waku_api/jsonrpc/relay/handlers.nim | 22 +++++++++++----------- waku/waku_api/rest/relay/handlers.nim | 4 ++-- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/waku/waku_api/jsonrpc/relay/handlers.nim b/waku/waku_api/jsonrpc/relay/handlers.nim index 3ff62a6036..15205f3bc8 100644 --- a/waku/waku_api/jsonrpc/relay/handlers.nim +++ b/waku/waku_api/jsonrpc/relay/handlers.nim @@ -36,7 +36,7 @@ proc installRelayApiHandlers*(node: WakuNode, server: RpcServer, cache: MessageC server.rpc("post_waku_v2_relay_v1_subscriptions") do (pubsubTopics: seq[PubsubTopic]) -> bool: if pubsubTopics.len == 0: raise newException(ValueError, "No pubsub topic provided") - + ## Subscribes a node to a list of PubSub topics debug "post_waku_v2_relay_v1_subscriptions" @@ -55,7 +55,7 @@ proc installRelayApiHandlers*(node: WakuNode, server: RpcServer, cache: MessageC server.rpc("delete_waku_v2_relay_v1_subscriptions") do (pubsubTopics: seq[PubsubTopic]) -> bool: if pubsubTopics.len == 0: raise newException(ValueError, "No pubsub topic provided") - + ## Unsubscribes a node from a list of PubSub topics debug "delete_waku_v2_relay_v1_subscriptions" @@ -74,7 +74,7 @@ proc installRelayApiHandlers*(node: WakuNode, server: RpcServer, cache: MessageC server.rpc("post_waku_v2_relay_v1_message") do (pubsubTopic: PubsubTopic, msg: WakuMessageRPC) -> bool: if pubsubTopic == "": raise newException(ValueError, "Empty pubsub topic") - + ## Publishes a WakuMessage to a PubSub topic debug "post_waku_v2_relay_v1_message", pubsubTopic=pubsubTopic @@ -107,7 +107,7 @@ proc installRelayApiHandlers*(node: WakuNode, server: RpcServer, cache: MessageC if not success: raise newException(ValueError, "Failed to publish: error appending RLN proof to message") # validate the message before sending it - let result = node.wakuRlnRelay.validateMessage(message) + let result = node.wakuRlnRelay.validateMessageAndUpdateLog(message) if result == MessageValidationResult.Invalid: raise newException(ValueError, "Failed to publish: invalid RLN proof") elif result == MessageValidationResult.Spam: @@ -128,7 +128,7 @@ proc installRelayApiHandlers*(node: WakuNode, server: RpcServer, cache: MessageC server.rpc("get_waku_v2_relay_v1_messages") do (pubsubTopic: PubsubTopic) -> seq[WakuMessageRPC]: if pubsubTopic == "": raise newException(ValueError, "Empty pubsub topic") - + ## Returns all WakuMessages received on a PubSub topic since the ## last time this method was called debug "get_waku_v2_relay_v1_messages", topic=pubsubTopic @@ -144,7 +144,7 @@ proc installRelayApiHandlers*(node: WakuNode, server: RpcServer, cache: MessageC server.rpc("post_waku_v2_relay_v1_auto_subscriptions") do (contentTopics: seq[ContentTopic]) -> bool: if contentTopics.len == 0: raise newException(ValueError, "No content topic provided") - + ## Subscribes a node to a list of Content topics debug "post_waku_v2_relay_v1_auto_subscriptions" @@ -163,7 +163,7 @@ proc installRelayApiHandlers*(node: WakuNode, server: RpcServer, cache: MessageC server.rpc("delete_waku_v2_relay_v1_auto_subscriptions") do (contentTopics: seq[ContentTopic]) -> bool: if contentTopics.len == 0: raise newException(ValueError, "No content topic provided") - + ## Unsubscribes a node from a list of Content topics debug "delete_waku_v2_relay_v1_auto_subscriptions" @@ -197,7 +197,7 @@ proc installRelayApiHandlers*(node: WakuNode, server: RpcServer, cache: MessageC timestamp: msg.timestamp.get(Timestamp(0)), ephemeral: msg.ephemeral.get(false) ) - + # if RLN is mounted, append the proof to the message if not node.wakuRlnRelay.isNil(): # append the proof to the message @@ -206,7 +206,7 @@ proc installRelayApiHandlers*(node: WakuNode, server: RpcServer, cache: MessageC if not success: raise newException(ValueError, "Failed to publish: error appending RLN proof to message") # validate the message before sending it - let result = node.wakuRlnRelay.validateMessage(message) + let result = node.wakuRlnRelay.validateMessageAndUpdateLog(message) if result == MessageValidationResult.Invalid: raise newException(ValueError, "Failed to publish: invalid RLN proof") elif result == MessageValidationResult.Spam: @@ -227,7 +227,7 @@ proc installRelayApiHandlers*(node: WakuNode, server: RpcServer, cache: MessageC server.rpc("get_waku_v2_relay_v1_auto_messages") do (contentTopic: ContentTopic) -> seq[WakuMessageRPC]: if contentTopic == "": raise newException(ValueError, "Empty content topic") - + ## Returns all WakuMessages received on a Content topic since the ## last time this method was called debug "get_waku_v2_relay_v1_auto_messages", topic=contentTopic @@ -236,4 +236,4 @@ proc installRelayApiHandlers*(node: WakuNode, server: RpcServer, cache: MessageC if msgRes.isErr(): raise newException(ValueError, "Not subscribed to content topic: " & contentTopic) - return msgRes.value.map(toWakuMessageRPC) \ No newline at end of file + return msgRes.value.map(toWakuMessageRPC) diff --git a/waku/waku_api/rest/relay/handlers.nim b/waku/waku_api/rest/relay/handlers.nim index 7a755cceb4..999c5c7f1d 100644 --- a/waku/waku_api/rest/relay/handlers.nim +++ b/waku/waku_api/rest/relay/handlers.nim @@ -139,7 +139,7 @@ proc installRelayApiHandlers*(router: var RestRouter, node: WakuNode, cache: Mes return RestApiResponse.internalServerError("Failed to publish: error appending RLN proof to message") # validate the message before sending it - let result = node.wakuRlnRelay.validateMessage(message) + let result = node.wakuRlnRelay.validateMessageAndUpdateLog(message) if result == MessageValidationResult.Invalid: return RestApiResponse.internalServerError("Failed to publish: invalid RLN proof") elif result == MessageValidationResult.Spam: @@ -244,7 +244,7 @@ proc installRelayApiHandlers*(router: var RestRouter, node: WakuNode, cache: Mes return RestApiResponse.internalServerError("Failed to publish: error appending RLN proof to message") # validate the message before sending it - let result = node.wakuRlnRelay.validateMessage(message) + let result = node.wakuRlnRelay.validateMessageAndUpdateLog(message) if result == MessageValidationResult.Invalid: return RestApiResponse.internalServerError("Failed to publish: invalid RLN proof") elif result == MessageValidationResult.Spam: From 897f487978bc9b7332415ab1f3166d03b0c1830c Mon Sep 17 00:00:00 2001 From: Simon-Pierre Vivier Date: Tue, 21 Nov 2023 15:15:39 -0500 Subject: [PATCH 130/274] chore: mics. improvements to cluster id and shards setup (#2187) --- apps/wakunode2/app.nim | 69 +++++++--- examples/publisher.nim | 33 ++--- examples/subscriber.nim | 33 ++--- tests/test_peer_manager.nim | 32 ++++- tests/test_waku_discv5.nim | 47 ++++--- tests/test_waku_peer_exchange.nim | 13 +- tests/testlib/wakunode.nim | 52 ++++---- tests/wakunode2/test_app.nim | 24 +++- waku/node/waku_node.nim | 30 +++-- waku/waku_discv5.nim | 206 +++++++++++------------------- waku/waku_metadata/protocol.nim | 19 ++- 11 files changed, 298 insertions(+), 260 deletions(-) diff --git a/apps/wakunode2/app.nim b/apps/wakunode2/app.nim index 4170039cfc..85e8a3b4d1 100644 --- a/apps/wakunode2/app.nim +++ b/apps/wakunode2/app.nim @@ -127,6 +127,21 @@ proc init*(T: type App, rng: ref HmacDrbgContext, conf: WakuNodeConf): T = quit(QuitFailure) else: recordRes.get() + # Check the ENR sharding info for matching config cluster id + if conf.clusterId != 0: + let res = record.toTyped() + if res.isErr(): + error "ENR setup failed", error = $res.get() + quit(QuitFailure) + + let relayShard = res.get().relaySharding().valueOr: + error "no sharding info" + quit(QuitFailure) + + if conf.clusterId != relayShard.clusterId: + error "cluster id mismatch" + quit(QuitFailure) + App( version: git_version, conf: conf, @@ -234,7 +249,13 @@ proc setupDiscoveryV5*(app: App): WakuDiscoveryV5 = autoupdateRecord: app.conf.discv5EnrAutoUpdate, ) - WakuDiscoveryV5.new(app.rng, discv5Conf, some(app.record)) + WakuDiscoveryV5.new( + app.rng, + discv5Conf, + some(app.record), + some(app.node.peerManager), + app.node.topicSubscriptionQueue, + ) ## Init waku node instance @@ -286,11 +307,6 @@ proc initNode(conf: WakuNodeConf, ok(node) proc setupWakuApp*(app: var App): AppResult[void] = - - ## Discv5 - if app.conf.discv5Discovery: - app.wakuDiscV5 = some(app.setupDiscoveryV5()) - ## Waku node let initNodeRes = initNode(app.conf, app.netConf, app.rng, app.key, app.record, app.peerStore, app.dynamicBootstrapNodes) if initNodeRes.isErr(): @@ -298,6 +314,10 @@ proc setupWakuApp*(app: var App): AppResult[void] = app.node = initNodeRes.get() + ## Discv5 + if app.conf.discv5Discovery: + app.wakuDiscV5 = some(app.setupDiscoveryV5()) + ok() proc getPorts(listenAddrs: seq[MultiAddress]): @@ -341,7 +361,17 @@ proc updateNetConfig(app: var App): AppResult[void] = proc updateEnr(app: var App): AppResult[void] = let record = enrConfiguration(app.conf, app.netConf, app.key).valueOr: - return err(error) + return err("ENR setup failed: " & error) + + if app.conf.clusterId != 0: + let tRecord = record.toTyped().valueOr: + return err("ENR setup failed: " & $error) + + let relayShard = tRecord.relaySharding().valueOr: + return err("ENR setup failed: no sharding info") + + if app.conf.clusterId != relayShard.clusterId: + return err("ENR setup failed: cluster id mismatch") app.record = record app.node.enr = record @@ -377,6 +407,9 @@ proc setupProtocols(node: WakuNode, ## Optionally include persistent message storage. ## No protocols are started yet. + node.mountMetadata(conf.clusterId).isOkOr: + return err("failed to mount waku metadata protocol: " & error) + # Mount relay on all nodes var peerExchangeHandler = none(RoutingRecordsHandler) if conf.relayPeerExchange: @@ -587,11 +620,12 @@ proc startNode(node: WakuNode, conf: WakuNodeConf, proc startApp*(app: var App): AppResult[void] = - try: - (waitFor startNode(app.node,app.conf,app.dynamicBootstrapNodes)).isOkOr: - return err(error) - except CatchableError: - return err("exception starting node: " & getCurrentExceptionMsg()) + let nodeRes = catch: (waitFor startNode(app.node,app.conf,app.dynamicBootstrapNodes)) + if nodeRes.isErr(): + return err("exception starting node: " & nodeRes.error.msg) + + nodeRes.get().isOkOr: + return err("exception starting node: " & error) # Update app data that is set dynamically on node start app.updateApp().isOkOr: @@ -599,13 +633,12 @@ proc startApp*(app: var App): AppResult[void] = if app.wakuDiscv5.isSome(): let wakuDiscv5 = app.wakuDiscv5.get() + let catchRes = catch: (waitFor wakuDiscv5.start()) + let startRes = catchRes.valueOr: + return err("failed to start waku discovery v5: " & catchRes.error.msg) - let res = wakuDiscv5.start() - if res.isErr(): - return err("failed to start waku discovery v5: " & $res.error) - - asyncSpawn wakuDiscv5.searchLoop(app.node.peerManager) - asyncSpawn wakuDiscv5.subscriptionsListener(app.node.topicSubscriptionQueue) + startRes.isOkOr: + return err("failed to start waku discovery v5: " & error) return ok() diff --git a/examples/publisher.nim b/examples/publisher.nim index da18d4e7e1..df82867956 100644 --- a/examples/publisher.nim +++ b/examples/publisher.nim @@ -51,31 +51,32 @@ proc setupAndPublish(rng: ref HmacDrbgContext) {.async.} = var bootstrapNodeEnr: enr.Record discard bootstrapNodeEnr.fromURI(bootstrapNode) + let discv5Conf = WakuDiscoveryV5Config( + discv5Config: none(DiscoveryConfig), + address: ip, + port: Port(discv5Port), + privateKey: keys.PrivateKey(nodeKey.skkey), + bootstrapRecords: @[bootstrapNodeEnr], + autoupdateRecord: true, + ) + # assumes behind a firewall, so not care about being discoverable let wakuDiscv5 = WakuDiscoveryV5.new( - extIp= none(ValidIpAddress), - extTcpPort = none(Port), - extUdpPort = none(Port), - bindIP = ip, - discv5UdpPort = Port(discv5Port), - bootstrapEnrs = @[bootstrapNodeEnr], - privateKey = keys.PrivateKey(nodeKey.skkey), - flags = flags, - rng = node.rng, - topics = @[], - ) + node.rng, + discv5Conf, + some(node.enr), + some(node.peerManager), + node.topicSubscriptionQueue, + ) await node.start() await node.mountRelay() node.peerManager.start() - let discv5Res = wakuDiscv5.start() - if discv5Res.isErr(): - error "failed to start discv5", error= discv5Res.error + (await wakuDiscv5.start()).isOkOr: + error "failed to start discv5", error = error quit(1) - asyncSpawn wakuDiscv5.searchLoop(node.peerManager) - # wait for a minimum of peers to be connected, otherwise messages wont be gossiped while true: let numConnectedPeers = node.peerManager.peerStore[ConnectionBook].book.values().countIt(it == Connected) diff --git a/examples/subscriber.nim b/examples/subscriber.nim index 946b4809bf..85cf69a128 100644 --- a/examples/subscriber.nim +++ b/examples/subscriber.nim @@ -46,31 +46,32 @@ proc setupAndSubscribe(rng: ref HmacDrbgContext) {.async.} = var bootstrapNodeEnr: enr.Record discard bootstrapNodeEnr.fromURI(bootstrapNode) + let discv5Conf = WakuDiscoveryV5Config( + discv5Config: none(DiscoveryConfig), + address: ip, + port: Port(discv5Port), + privateKey: keys.PrivateKey(nodeKey.skkey), + bootstrapRecords: @[bootstrapNodeEnr], + autoupdateRecord: true, + ) + # assumes behind a firewall, so not care about being discoverable let wakuDiscv5 = WakuDiscoveryV5.new( - extIp= none(ValidIpAddress), - extTcpPort = none(Port), - extUdpPort = none(Port), - bindIP = ip, - discv5UdpPort = Port(discv5Port), - bootstrapEnrs = @[bootstrapNodeEnr], - privateKey = keys.PrivateKey(nodeKey.skkey), - flags = flags, - rng = node.rng, - topics = @[], - ) + node.rng, + discv5Conf, + some(node.enr), + some(node.peerManager), + node.topicSubscriptionQueue, + ) await node.start() await node.mountRelay() node.peerManager.start() - let discv5Res = wakuDiscv5.start() - if discv5Res.isErr(): - error "failed to start discv5", error = discv5Res.error + (await wakuDiscv5.start()).isOkOr: + error "failed to start discv5", error = error quit(1) - asyncSpawn wakuDiscv5.searchLoop(node.peerManager) - # wait for a minimum of peers to be connected, otherwise messages wont be gossiped while true: let numConnectedPeers = node.peerManager.peerStore[ConnectionBook].book.values().countIt(it == Connected) diff --git a/tests/test_peer_manager.nim b/tests/test_peer_manager.nim index b3ef488d82..8576f2725a 100644 --- a/tests/test_peer_manager.nim +++ b/tests/test_peer_manager.nim @@ -268,16 +268,38 @@ procSuite "Peer Manager": await allFutures([node1.stop(), node2.stop(), node3.stop()]) asyncTest "Peer manager drops conections to peers on different networks": - let clusterId1 = 1.uint32 - let clusterId2 = 2.uint32 + let clusterId3 = 3.uint32 + let clusterId4 = 4.uint32 let # different network - node1 = newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0), clusterId = clusterId1) + node1 = newTestWakuNode( + generateSecp256k1Key(), + ValidIpAddress.init("0.0.0.0"), + Port(0), + clusterId = clusterId3, + topics = @["/waku/2/rs/3/0"], + ) # same network - node2 = newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0), clusterId = clusterId2) - node3 = newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0), clusterId = clusterId2) + node2 = newTestWakuNode( + generateSecp256k1Key(), + ValidIpAddress.init("0.0.0.0"), + Port(0), + clusterId = clusterId4, + topics = @["/waku/2/rs/4/0"], + ) + node3 = newTestWakuNode( + generateSecp256k1Key(), + ValidIpAddress.init("0.0.0.0"), + Port(0), + clusterId = clusterId4, + topics = @["/waku/2/rs/4/0"], + ) + + discard node1.mountMetadata(clusterId3) + discard node2.mountMetadata(clusterId4) + discard node3.mountMetadata(clusterId4) # Start nodes await allFutures([node1.start(), node2.start(), node3.start()]) diff --git a/tests/test_waku_discv5.nim b/tests/test_waku_discv5.nim index 9a7a49a90d..dbf18d4a1d 100644 --- a/tests/test_waku_discv5.nim +++ b/tests/test_waku_discv5.nim @@ -34,10 +34,13 @@ proc newTestEnrRecord(privKey: libp2p_keys.PrivateKey, builder.build().tryGet() -proc newTestDiscv5(privKey: libp2p_keys.PrivateKey, - bindIp: string, tcpPort: uint16, udpPort: uint16, - record: waku_enr.Record, - bootstrapRecords = newSeq[waku_enr.Record]()): WakuDiscoveryV5 = +proc newTestDiscv5( + privKey: libp2p_keys.PrivateKey, + bindIp: string, tcpPort: uint16, udpPort: uint16, + record: waku_enr.Record, + bootstrapRecords = newSeq[waku_enr.Record](), + queue = newAsyncEventQueue[SubscriptionEvent](30), + ): WakuDiscoveryV5 = let config = WakuDiscoveryV5Config( privateKey: eth_keys.PrivateKey(privKey.skkey), address: ValidIpAddress.init(bindIp), @@ -45,7 +48,12 @@ proc newTestDiscv5(privKey: libp2p_keys.PrivateKey, bootstrapRecords: bootstrapRecords, ) - let discv5 = WakuDiscoveryV5.new(rng(), config, some(record)) + let discv5 = WakuDiscoveryV5.new( + rng = rng(), + conf = config, + record = some(record), + queue = queue, + ) return discv5 @@ -122,13 +130,13 @@ procSuite "Waku Discovery v5": bootstrapRecords = @[record1, record2] ) - let res1 = node1.start() + let res1 = await node1.start() assert res1.isOk(), res1.error - let res2 = node2.start() + let res2 = await node2.start() assert res2.isOk(), res2.error - let res3 = node3.start() + let res3 = await node3.start() assert res3.isOk(), res3.error ## When @@ -240,16 +248,16 @@ procSuite "Waku Discovery v5": ) # Start nodes' discoveryV5 protocols - let res1 = node1.start() + let res1 = await node1.start() assert res1.isOk(), res1.error - let res2 = node2.start() + let res2 = await node2.start() assert res2.isOk(), res2.error - let res3 = node3.start() + let res3 = await node3.start() assert res3.isOk(), res3.error - let res4 = node4.start() + let res4 = await node4.start() assert res4.isOk(), res4.error ## Given @@ -401,22 +409,20 @@ procSuite "Waku Discovery v5": udpPort = udpPort, ) + let queue = newAsyncEventQueue[SubscriptionEvent](30) + let node = newTestDiscv5( privKey = privKey, bindIp = bindIp, tcpPort = tcpPort, udpPort = udpPort, - record = record + record = record, + queue = queue, ) - let res = node.start() + let res = await node.start() assert res.isOk(), res.error - let queue = newAsyncEventQueue[SubscriptionEvent](0) - - ## When - asyncSpawn node.subscriptionsListener(queue) - ## Then queue.emit((kind: PubsubSub, topic: shard1)) queue.emit((kind: PubsubSub, topic: shard2)) @@ -442,14 +448,13 @@ procSuite "Waku Discovery v5": queue.emit((kind: PubsubUnsub, topic: shard1)) queue.emit((kind: PubsubUnsub, topic: shard2)) - queue.emit((kind: PubsubUnsub, topic: shard3)) await sleepAsync(1.seconds) check: node.protocol.localNode.record.containsShard(shard1) == false node.protocol.localNode.record.containsShard(shard2) == false - node.protocol.localNode.record.containsShard(shard3) == false + node.protocol.localNode.record.containsShard(shard3) == true ## Cleanup await node.stop() diff --git a/tests/test_waku_peer_exchange.nim b/tests/test_waku_peer_exchange.nim index f08949d1c9..d4159dd8f5 100644 --- a/tests/test_waku_peer_exchange.nim +++ b/tests/test_waku_peer_exchange.nim @@ -131,7 +131,8 @@ procSuite "Waku Peer Exchange": let disc1 = WakuDiscoveryV5.new( node1.rng, conf1, - some(node1.enr) + some(node1.enr), + some(node1.peerManager), ) let conf2 = WakuDiscoveryV5Config( @@ -146,17 +147,15 @@ procSuite "Waku Peer Exchange": let disc2 = WakuDiscoveryV5.new( node2.rng, conf2, - some(node2.enr) + some(node2.enr), + some(node2.peerManager), ) - await allFutures(node1.start(), node2.start(), node3.start()) - let resultDisc1StartRes = disc1.start() + let resultDisc1StartRes = await disc1.start() assert resultDisc1StartRes.isOk(), resultDisc1StartRes.error - let resultDisc2StartRes = disc2.start() + let resultDisc2StartRes = await disc2.start() assert resultDisc2StartRes.isOk(), resultDisc2StartRes.error - asyncSpawn disc1.searchLoop(node1.peerManager) - asyncSpawn disc2.searchLoop(node2.peerManager) ## When var attempts = 10 diff --git a/tests/testlib/wakunode.nim b/tests/testlib/wakunode.nim index 1ba6a0f819..f614b272b5 100644 --- a/tests/testlib/wakunode.nim +++ b/tests/testlib/wakunode.nim @@ -32,7 +32,7 @@ proc defaultTestWakuNodeConf*(): WakuNodeConf = dnsAddrsNameServers: @[ValidIpAddress.init("1.1.1.1"), ValidIpAddress.init("1.0.0.1")], nat: "any", maxConnections: 50, - topics: @["/waku/2/default-waku/proto"], + topics: @[], relay: true ) @@ -55,28 +55,27 @@ proc newTestWakuNode*(nodeKey: crypto.PrivateKey, dns4DomainName = none(string), discv5UdpPort = none(Port), agentString = none(string), - clusterId: uint32 = 0.uint32, + clusterId: uint32 = 2.uint32, + topics: seq[string] = @["/waku/2/rs/2/0"], peerStoreCapacity = none(int)): WakuNode = var resolvedExtIp = extIp # Update extPort to default value if it's missing and there's an extIp or a DNS domain - let extPort = if (extIp.isSome() or dns4DomainName.isSome()) and - extPort.isNone(): - some(Port(60000)) - else: - extPort + let extPort = + if (extIp.isSome() or dns4DomainName.isSome()) and extPort.isNone(): some(Port(60000)) + else: extPort + + let conf = defaultTestWakuNodeConf() if dns4DomainName.isSome() and extIp.isNone(): - let conf = defaultTestWakuNodeConf() # If there's an error resolving the IP, an exception is thrown and test fails - let dnsRes = waitFor dnsResolve(dns4DomainName.get(), conf) - if dnsRes.isErr(): - raise newException(Defect, $dnsRes.error) - else: - resolvedExtIp = some(ValidIpAddress.init(dnsRes.get())) + let dns = (waitFor dnsResolve(dns4DomainName.get(), conf)).valueOr: + raise newException(Defect, error) + + resolvedExtIp = some(ValidIpAddress.init(dns)) - let netConfigRes = NetConfig.init( + let netConf = NetConfig.init( bindIp = bindIp, clusterId = clusterId, bindPort = bindPort, @@ -89,36 +88,33 @@ proc newTestWakuNode*(nodeKey: crypto.PrivateKey, wakuFlags = wakuFlags, dns4DomainName = dns4DomainName, discv5UdpPort = discv5UdpPort, - ) - let netConf = - if netConfigRes.isErr(): - raise newException(Defect, "Invalid network configuration: " & $netConfigRes.error) - else: - netConfigRes.get() + ).valueOr: + raise newException(Defect, "Invalid network configuration: " & error) var enrBuilder = EnrBuilder.init(nodeKey) + enrBuilder.withShardedTopics(topics).isOkOr: + raise newException(Defect, "Invalid record: " & error) + enrBuilder.withIpAddressAndPorts( ipAddr = netConf.enrIp, tcpPort = netConf.enrPort, udpPort = netConf.discv5UdpPort, ) + + enrBuilder.withMultiaddrs(netConf.enrMultiaddrs) + if netConf.wakuFlags.isSome(): enrBuilder.withWakuCapabilities(netConf.wakuFlags.get()) - enrBuilder.withMultiaddrs(netConf.enrMultiaddrs) - let recordRes = enrBuilder.build() - let record = - if recordRes.isErr(): - raise newException(Defect, "Invalid record: " & $recordRes.error) - else: - recordRes.get() + let record = enrBuilder.build().valueOr: + raise newException(Defect, "Invalid record: " & $error) var builder = WakuNodeBuilder.init() builder.withRng(rng()) builder.withNodeKey(nodeKey) builder.withRecord(record) - builder.withNetworkConfiguration(netConfigRes.get()) + builder.withNetworkConfiguration(netConf) builder.withPeerStorage(peerStorage, capacity = peerStoreCapacity) builder.withSwitchConfiguration( maxConnections = some(maxConnections), diff --git a/tests/wakunode2/test_app.nim b/tests/wakunode2/test_app.nim index f87d264f8f..71fcd009d1 100644 --- a/tests/wakunode2/test_app.nim +++ b/tests/wakunode2/test_app.nim @@ -51,12 +51,24 @@ suite "Wakunode2 - App initialization": ## When var wakunode2 = App.init(rng(), conf) - require wakunode2.setupPeerPersistence().isOk() - require wakunode2.setupDyamicBootstrapNodes().isOk() - require wakunode2.setupWakuApp().isOk() - require isOk(waitFor wakunode2.setupAndMountProtocols()) - require isOk(wakunode2.startApp()) - require wakunode2.setupMonitoringAndExternalInterfaces().isOk() + + let persRes = wakunode2.setupPeerPersistence() + assert persRes.isOk(), persRes.error + + let bootRes = wakunode2.setupDyamicBootstrapNodes() + assert bootRes.isOk(), bootRes.error + + let setupRes = wakunode2.setupWakuApp() + assert setupRes.isOk(), setupRes.error + + let mountRes = waitFor wakunode2.setupAndMountProtocols() + assert mountRes.isOk(), mountRes.error + + let startRes = wakunode2.startApp() + assert startRes.isOk(), startRes.error + + let monitorRes = wakunode2.setupMonitoringAndExternalInterfaces() + assert monitorRes.isOk(), monitorRes.error ## Then let node = wakunode2.node diff --git a/waku/node/waku_node.nim b/waku/node/waku_node.nim index d26829a40d..51362e50d2 100644 --- a/waku/node/waku_node.nim +++ b/waku/node/waku_node.nim @@ -155,12 +155,6 @@ proc new*(T: type WakuNode, topicSubscriptionQueue: queue ) - # mount metadata protocol - let metadata = WakuMetadata.new(netConfig.clusterId, queue) - node.switch.mount(metadata, protocolMatcher(WakuMetadataCodec)) - node.wakuMetadata = metadata - peerManager.wakuMetadata = metadata - return node proc peerInfo*(node: WakuNode): PeerInfo = @@ -189,6 +183,22 @@ proc connectToNodes*(node: WakuNode, nodes: seq[RemotePeerInfo] | seq[string], s # NOTE Connects to the node without a give protocol, which automatically creates streams for relay await peer_manager.connectToNodes(node.peerManager, nodes, source=source) +## Waku Metadata + +proc mountMetadata*(node: WakuNode, clusterId: uint32): Result[void, string] = + if not node.wakuMetadata.isNil(): + return err("Waku metadata already mounted, skipping") + + let metadata = WakuMetadata.new(clusterId, node.enr, node.topicSubscriptionQueue) + + node.wakuMetadata = metadata + node.peerManager.wakuMetadata = metadata + + let catchRes = catch: node.switch.mount(node.wakuMetadata, protocolMatcher(WakuMetadataCodec)) + if catchRes.isErr(): + return err(catchRes.error.msg) + + return ok() ## Waku relay @@ -1124,6 +1134,9 @@ proc start*(node: WakuNode) {.async.} = if not node.wakuRelay.isNil(): await node.startRelay() + if not node.wakuMetadata.isNil(): + node.wakuMetadata.start() + ## The switch uses this mapper to update peer info addrs ## with announced addrs after start let addressMapper = @@ -1136,8 +1149,6 @@ proc start*(node: WakuNode) {.async.} = node.started = true - node.wakuMetadata.start() - if not zeroPortPresent: printNodeNetworkInfo(node) else: @@ -1149,6 +1160,9 @@ proc stop*(node: WakuNode) {.async.} = if not node.wakuRelay.isNil(): await node.wakuRelay.stop() + if not node.wakuMetadata.isNil(): + node.wakuMetadata.stop() + await node.switch.stop() node.peerManager.stop() diff --git a/waku/waku_discv5.nim b/waku/waku_discv5.nim index 8456cab428..cb1216f772 100644 --- a/waku/waku_discv5.nim +++ b/waku/waku_discv5.nim @@ -49,6 +49,8 @@ type WakuDiscoveryV5* = ref object protocol*: protocol.Protocol listening*: bool predicate: Option[WakuDiscv5Predicate] + peerManager: Option[PeerManager] + topicSubscriptionQueue: AsyncEventQueue[SubscriptionEvent] proc shardingPredicate*(record: Record): Option[WakuDiscv5Predicate] = ## Filter peers based on relay sharding information @@ -72,7 +74,9 @@ proc new*( T: type WakuDiscoveryV5, rng: ref HmacDrbgContext, conf: WakuDiscoveryV5Config, - record: Option[waku_enr.Record] + record: Option[waku_enr.Record], + peerManager: Option[PeerManager] = none(PeerManager), + queue: AsyncEventQueue[SubscriptionEvent] = newAsyncEventQueue[SubscriptionEvent](30), ): T = let shardPredOp = if record.isSome(): shardingPredicate(record.get()) @@ -101,82 +105,26 @@ proc new*( enrUdpPort = none(Port), ) - WakuDiscoveryV5(conf: conf, protocol: protocol, listening: false, predicate: shardPredOp) - -proc new*(T: type WakuDiscoveryV5, - extIp: Option[ValidIpAddress], - extTcpPort: Option[Port], - extUdpPort: Option[Port], - bindIP: ValidIpAddress, - discv5UdpPort: Port, - bootstrapEnrs = newSeq[enr.Record](), - enrAutoUpdate = false, - privateKey: eth_keys.PrivateKey, - flags: CapabilitiesBitfield, - multiaddrs = newSeq[MultiAddress](), - rng: ref HmacDrbgContext, - topics: seq[string], - discv5Config: protocol.DiscoveryConfig = protocol.defaultDiscoveryConfig - ): T {. - deprecated: "use the config and record proc variant instead".}= - - let relayShardsRes = topicsToRelayShards(topics) - - let relayShard = - if relayShardsRes.isErr(): - debug "pubsub topic parsing error", reason = relayShardsRes.error - none(RelayShards) - else: relayShardsRes.get() - - let record = block: - var builder = EnrBuilder.init(privateKey) - builder.withIpAddressAndPorts( - ipAddr = extIp, - tcpPort = extTcpPort, - udpPort = extUdpPort, - ) - builder.withWakuCapabilities(flags) - builder.withMultiaddrs(multiaddrs) - - if relayShard.isSome(): - let res = builder.withWakuRelaySharding(relayShard.get()) - - if res.isErr(): - debug "building ENR with relay sharding failed", reason = res.error - else: - debug "building ENR with relay sharding information", clusterId = $relayShard.get().clusterId(), shards = $relayShard.get().shardIds() - - builder.build().expect("Record within size limits") - - let conf = WakuDiscoveryV5Config( - discv5Config: some(discv5Config), - address: bindIP, - port: discv5UdpPort, - privateKey: privateKey, - bootstrapRecords: bootstrapEnrs, - autoupdateRecord: enrAutoUpdate, - ) - - WakuDiscoveryV5.new(rng, conf, some(record)) + WakuDiscoveryV5( + conf: conf, + protocol: protocol, + listening: false, + predicate: shardPredOp, + peerManager: peerManager, + topicSubscriptionQueue: queue, + ) proc updateENRShards(wd: WakuDiscoveryV5, newTopics: seq[PubsubTopic], add: bool): Result[void, string] = ## Add or remove shards from the Discv5 ENR + let newShardOp = topicsToRelayShards(newTopics).valueOr: + return err("ENR update failed: " & error) + + let newShard = newShardOp.valueOr: + return ok() - let newShardOp = ?topicsToRelayShards(newTopics) - - let newShard = - if newShardOp.isSome(): - newShardOp.get() - else: - return ok() - - let typedRecordRes = wd.protocol.localNode.record.toTyped() - let typedRecord = - if typedRecordRes.isErr(): - return err($typedRecordRes.error) - else: - typedRecordRes.get() + let typedRecord = wd.protocol.localNode.record.toTyped().valueOr: + return err("ENR update failed: " & $error) let currentShardsOp = typedRecord.relaySharding() @@ -185,14 +133,16 @@ proc updateENRShards(wd: WakuDiscoveryV5, let currentShard = currentShardsOp.get() if currentShard.clusterId != newShard.clusterId: - return err("ENR are limited to one clusterId id") + return err("ENR update failed: clusterId id mismatch") + + RelayShards.init(currentShard.clusterId, currentShard.shardIds & newShard.shardIds).valueOr: + return err("ENR update failed: " & error) - ?RelayShards.init(currentShard.clusterId, currentShard.shardIds & newShard.shardIds) elif not add and currentShardsOp.isSome(): let currentShard = currentShardsOp.get() if currentShard.clusterId != newShard.clusterId: - return err("ENR are limited to one clusterId id") + return err("ENR update failed: clusterId id mismatch") let currentSet = toHashSet(currentShard.shardIds) let newSet = toHashSet(newShard.shardIds) @@ -200,16 +150,11 @@ proc updateENRShards(wd: WakuDiscoveryV5, let indices = toSeq(currentSet - newSet) if indices.len == 0: - # Can't create RelayShard with no indices so update then return - let (field, value) = (ShardingIndicesListEnrField, newSeq[byte](3)) - - let res = wd.protocol.updateRecord([(field, value)]) - if res.isErr(): - return err($res.error) + return err("ENR update failed: cannot remove all shards") - return ok() + RelayShards.init(currentShard.clusterId, indices).valueOr: + return err("ENR update failed: " & error) - ?RelayShards.init(currentShard.clusterId, indices) elif add and currentShardsOp.isNone(): newShard else: return ok() @@ -217,18 +162,13 @@ proc updateENRShards(wd: WakuDiscoveryV5, if resultShard.shardIds.len >= ShardingIndicesListMaxLength: (ShardingBitVectorEnrField, resultShard.toBitVector()) else: - let listRes = resultShard.toIndicesList() - let list = - if listRes.isErr(): - return err($listRes.error) - else: - listRes.get() + let list = resultShard.toIndicesList().valueOr: + return err("ENR update failed: " & $error) (ShardingIndicesListEnrField, list) - let res = wd.protocol.updateRecord([(field, value)]) - if res.isErr(): - return err($res.error) + wd.protocol.updateRecord([(field, value)]).isOkOr: + return err("ENR update failed: " & $error) return ok() @@ -246,10 +186,12 @@ proc findRandomPeers*(wd: WakuDiscoveryV5, overridePred = none(WakuDiscv5Predica return discoveredRecords -#TODO abstract away PeerManager -proc searchLoop*(wd: WakuDiscoveryV5, peerManager: PeerManager) {.async.} = +proc searchLoop(wd: WakuDiscoveryV5) {.async.} = ## Continuously add newly discovered nodes + let peerManager = wd.peerManager.valueOr: + return + info "Starting discovery v5 search" while wd.listening: @@ -267,7 +209,41 @@ proc searchLoop*(wd: WakuDiscoveryV5, peerManager: PeerManager) {.async.} = # Also, give some time to dial the discovered nodes and update stats, etc. await sleepAsync(5.seconds) -proc start*(wd: WakuDiscoveryV5): Result[void, string] = +proc subscriptionsListener(wd: WakuDiscoveryV5) {.async.} = + ## Listen for pubsub topics subscriptions changes + + let key = wd.topicSubscriptionQueue.register() + + while wd.listening: + let events = await wd.topicSubscriptionQueue.waitEvents(key) + + # Since we don't know the events we will receive we have to anticipate. + + let subs = events.filterIt(it.kind == PubsubSub).mapIt(it.topic) + let unsubs = events.filterIt(it.kind == PubsubUnsub).mapIt(it.topic) + + if subs.len == 0 and unsubs.len == 0: + continue + + let unsubRes = wd.updateENRShards(unsubs, false) + let subRes = wd.updateENRShards(subs, true) + + if subRes.isErr(): + debug "ENR shard addition failed", reason= $subRes.error + + if unsubRes.isErr(): + debug "ENR shard removal failed", reason= $unsubRes.error + + if subRes.isErr() and unsubRes.isErr(): + continue + + debug "ENR updated successfully" + + wd.predicate = shardingPredicate(wd.protocol.localNode.record) + + wd.topicSubscriptionQueue.unregister(key) + +proc start*(wd: WakuDiscoveryV5): Future[Result[void, string]] {.async.} = if wd.listening: return err("already listening") @@ -284,6 +260,9 @@ proc start*(wd: WakuDiscoveryV5): Result[void, string] = trace "start discv5 service" wd.protocol.start() + asyncSpawn wd.searchLoop() + asyncSpawn wd.subscriptionsListener() + debug "Successfully started discovery v5 service" info "Discv5: discoverable ENR ", enr = wd.protocol.localNode.record.toUri() @@ -301,43 +280,6 @@ proc stop*(wd: WakuDiscoveryV5): Future[void] {.async.} = debug "Successfully stopped discovery v5 service" -proc subscriptionsListener*( - wd: WakuDiscoveryV5, - topicSubscriptionQueue: AsyncEventQueue[SubscriptionEvent] - ) {.async.} = - ## Listen for pubsub topics subscriptions changes - - let key = topicSubscriptionQueue.register() - - while wd.listening: - let events = await topicSubscriptionQueue.waitEvents(key) - - # Since we don't know the events we will receive we have to anticipate. - - let subs = events.filterIt(it.kind == PubsubSub).mapIt(it.topic) - let unsubs = events.filterIt(it.kind == PubsubUnsub).mapIt(it.topic) - - if subs.len == 0 and unsubs.len == 0: - continue - - let unsubRes = wd.updateENRShards(unsubs, false) - let subRes = wd.updateENRShards(subs, true) - - if subRes.isErr(): - debug "ENR shard addition failed", reason= $subRes.error - - if unsubRes.isErr(): - debug "ENR shard removal failed", reason= $unsubRes.error - - if subRes.isErr() and unsubRes.isErr(): - continue - - debug "ENR updated successfully" - - wd.predicate = shardingPredicate(wd.protocol.localNode.record) - - topicSubscriptionQueue.unregister(key) - ## Helper functions proc parseBootstrapAddress(address: string): Result[enr.Record, cstring] = diff --git a/waku/waku_metadata/protocol.nim b/waku/waku_metadata/protocol.nim index eefcf5b829..78573650a3 100644 --- a/waku/waku_metadata/protocol.nim +++ b/waku/waku_metadata/protocol.nim @@ -4,7 +4,7 @@ else: {.push raises: [].} import - std/[options, sequtils, random, sets], + std/[options, sequtils, sets], stew/results, chronicles, chronos, @@ -15,7 +15,9 @@ import eth/p2p/discoveryv5/enr import ../common/nimchronos, + ../common/enr, ../waku_core, + ../waku_enr, ./rpc logScope: @@ -93,13 +95,24 @@ proc initProtocolHandler*(m: WakuMetadata) = proc new*(T: type WakuMetadata, clusterId: uint32, + enr: Record, queue: AsyncEventQueue[SubscriptionEvent], ): T = - let wm = WakuMetadata(clusterId: clusterId, topicSubscriptionQueue: queue) + var (cluster, shards) = (clusterId, initHashSet[uint32]()) + + let enrRes = enr.toTyped() + if enrRes.isOk(): + let shardingRes = enrRes.get().relaySharding() + if shardingRes.isSome(): + let relayShard = shardingRes.get() + cluster = uint32(relayShard.clusterId) + shards = toHashSet(relayShard.shardIds.mapIt(uint32(it))) + + let wm = WakuMetadata(clusterId: cluster, shards: shards, topicSubscriptionQueue: queue) wm.initProtocolHandler() - info "Created WakuMetadata protocol", clusterId=clusterId + info "Created WakuMetadata protocol", clusterId=cluster return wm From c48accb513f1197ea78513b0d9e0b625878c06b8 Mon Sep 17 00:00:00 2001 From: Ivan FB <128452529+Ivansete-status@users.noreply.github.com> Date: Wed, 22 Nov 2023 09:32:39 +0100 Subject: [PATCH 131/274] waku_store: better response when the store is requested with wrong cursor (#2231) --- tests/waku_store/test_wakunode_store.nim | 41 ++++++++++++++++++++++++ waku/node/waku_node.nim | 4 +++ waku/waku_store/common.nim | 17 +++++++++- 3 files changed, 61 insertions(+), 1 deletion(-) diff --git a/tests/waku_store/test_wakunode_store.nim b/tests/waku_store/test_wakunode_store.nim index 117a1cc93b..2eff88e227 100644 --- a/tests/waku_store/test_wakunode_store.nim +++ b/tests/waku_store/test_wakunode_store.nim @@ -259,3 +259,44 @@ procSuite "WakuNode - Store": ## Cleanup waitFor allFutures(client.stop(), server.stop(), filterSource.stop()) + + test "history query should return INVALID_CURSOR if the cursor has empty data in the request": + ## Setup + let + serverKey = generateSecp256k1Key() + server = newTestWakuNode(serverKey, ValidIpAddress.init("0.0.0.0"), Port(0)) + clientKey = generateSecp256k1Key() + client = newTestWakuNode(clientKey, ValidIpAddress.init("0.0.0.0"), Port(0)) + + waitFor allFutures(client.start(), server.start()) + + let mountArchiveRes = server.mountArchive(archiveA) + assert mountArchiveRes.isOk(), mountArchiveRes.error + + waitFor server.mountStore() + + client.mountStoreClient() + + ## Forcing a bad cursor with empty digest data + var data: array[32, byte] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] + let cursor = HistoryCursor( + pubsubTopic: "pubsubTopic", + senderTime: now(), + storeTime: now(), + digest: waku_archive.MessageDigest(data: data) + ) + + ## Given + let req = HistoryQuery(contentTopics: @[DefaultContentTopic], cursor: some(cursor)) + let serverPeer = server.peerInfo.toRemotePeerInfo() + + ## When + let queryRes = waitFor client.query(req, peer=serverPeer) + + ## Then + check not queryRes.isOk() + + check queryRes.error == "BAD_REQUEST: invalid cursor" + + # Cleanup + waitFor allFutures(client.stop(), server.stop()) diff --git a/waku/node/waku_node.nim b/waku/node/waku_node.nim index 51362e50d2..e09d1a27a0 100644 --- a/waku/node/waku_node.nim +++ b/waku/node/waku_node.nim @@ -816,6 +816,10 @@ proc mountStore*(node: WakuNode) {.async, raises: [Defect, LPError].} = # TODO: Review this handler logic. Maybe, move it to the appplication code let queryHandler: HistoryQueryHandler = proc(request: HistoryQuery): Future[HistoryResult] {.async.} = + if request.cursor.isSome(): + request.cursor.get().checkHistCursor().isOkOr: + return err(error) + let request = request.toArchiveQuery() let response = await node.wakuArchive.findMessages(request) return response.toHistoryResult() diff --git a/waku/waku_store/common.nim b/waku/waku_store/common.nim index edd86ea4b1..0af324ccc2 100644 --- a/waku/waku_store/common.nim +++ b/waku/waku_store/common.nim @@ -4,7 +4,7 @@ else: {.push raises: [].} import - std/options, + std/[options,sequtils], stew/results, stew/byteutils, nimcrypto/sha2 @@ -99,3 +99,18 @@ proc `$`*(err: HistoryError): string = "SERVICE_UNAVAILABLE" of HistoryErrorKind.UNKNOWN: "UNKNOWN" + +proc checkHistCursor*(self: HistoryCursor): Result[void, HistoryError] = + if self.pubsubTopic.len == 0: + return err(HistoryError(kind: BAD_REQUEST, + cause: "empty pubsubTopic")) + if self.senderTime == 0: + return err(HistoryError(kind: BAD_REQUEST, + cause: "invalid senderTime")) + if self.storeTime == 0: + return err(HistoryError(kind: BAD_REQUEST, + cause: "invalid storeTime")) + if self.digest.data.all(proc (x: byte): bool = x == 0): + return err(HistoryError(kind: BAD_REQUEST, + cause: "empty digest")) + return ok() From 59ee3c69c8fb1733bda2875d1c2b771e2b87b02d Mon Sep 17 00:00:00 2001 From: gabrielmer <101006718+gabrielmer@users.noreply.github.com> Date: Wed, 22 Nov 2023 10:56:23 +0200 Subject: [PATCH 132/274] chore(REST): returning lightpush support and updated filter protocol (#2219) --- waku/waku_api/rest/admin/handlers.nim | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/waku/waku_api/rest/admin/handlers.nim b/waku/waku_api/rest/admin/handlers.nim index 4e47b47baf..bf4b5ebed4 100644 --- a/waku/waku_api/rest/admin/handlers.nim +++ b/waku/waku_api/rest/admin/handlers.nim @@ -16,6 +16,8 @@ import ../../../waku_core, ../../../waku_store, ../../../waku_filter, + ../../../waku_filter_v2, + ../../../waku_lightpush, ../../../waku_relay, ../../../waku_node, ../../../node/peer_manager, @@ -61,6 +63,14 @@ proc installAdminV1GetPeersHandler(router: var RestRouter, node: WakuNode) = connected: it.connectedness == Connectedness.Connected)) tuplesToWakuPeers(peers, filterPeers) + if not node.wakuFilter.isNil(): + # Map WakuFilter peers to WakuPeers and add to return list + let filterV2Peers = node.peerManager.peerStore.peers(WakuFilterSubscribeCodec) + .mapIt((multiaddr: constructMultiaddrStr(it), + protocol: WakuFilterSubscribeCodec, + connected: it.connectedness == Connectedness.Connected)) + tuplesToWakuPeers(peers, filterV2Peers) + if not node.wakuStore.isNil(): # Map WakuStore peers to WakuPeers and add to return list let storePeers = node.peerManager.peerStore @@ -70,6 +80,15 @@ proc installAdminV1GetPeersHandler(router: var RestRouter, node: WakuNode) = connected: it.connectedness == Connectedness.Connected)) tuplesToWakuPeers(peers, storePeers) + if not node.wakuLightPush.isNil(): + # Map WakuStore peers to WakuPeers and add to return list + let lightpushPeers = node.peerManager.peerStore + .peers(WakuLightPushCodec) + .mapIt((multiaddr: constructMultiaddrStr(it), + protocol: WakuLightPushCodec, + connected: it.connectedness == Connectedness.Connected)) + tuplesToWakuPeers(peers, lightpushPeers) + let resp = RestApiResponse.jsonResponse(peers, status=Http200) if resp.isErr(): error "An error ocurred while building the json respose: ", error=resp.error From a22ee60494df3b27fb9f2ddc679de4d037cfa6ea Mon Sep 17 00:00:00 2001 From: Abhimanyu Date: Wed, 22 Nov 2023 15:23:43 +0100 Subject: [PATCH 133/274] chore: deterministic message hash algorithm updated (#2233) * deterministic hash algorithm updated + testcases * updated code review --- tests/waku_core/test_message_digest.nim | 37 +++++++++++++++++-------- waku/waku_core/message/digest.nim | 2 ++ 2 files changed, 27 insertions(+), 12 deletions(-) diff --git a/tests/waku_core/test_message_digest.nim b/tests/waku_core/test_message_digest.nim index ba0a31e0a5..673d4adbf1 100644 --- a/tests/waku_core/test_message_digest.nim +++ b/tests/waku_core/test_message_digest.nim @@ -3,6 +3,7 @@ import std/sequtils, stew/byteutils, + stew/endians2, testutils/unittests import ../../../waku/waku_core, @@ -17,15 +18,17 @@ suite "Waku Message - Deterministic hashing": ## waku_message.payload = 0x010203045445535405060708 ## waku_message.content_topic = 0x2f77616b752f322f64656661756c742d636f6e74656e742f70726f746f ## waku_message.meta = + ## waku_message.ts = 0x175789bfa23f8400 ## - ## message_hash = 0x87619d05e563521d9126749b45bd4cc2430df0607e77e23572d874ed9c1aaa62 + ## message_hash = 0xa2554498b31f5bcdfcbf7fa58ad1c2d45f0254f3f8110a85588ec3cf10720fd8 ## Given let pubsubTopic = DefaultPubsubTopic # /waku/2/default-waku/proto let message = fakeWakuMessage( contentTopic = DefaultContentTopic, # /waku/2/default-content/proto payload = "\x01\x02\x03\x04TEST\x05\x06\x07\x08".toBytes(), - meta = newSeq[byte]() + meta = newSeq[byte](), + ts = getNanosecondTime(1681964442) # Apr 20 2023 04:20:42 ) ## When @@ -37,7 +40,8 @@ suite "Waku Message - Deterministic hashing": byteutils.toHex(message.contentTopic.toBytes()) == "2f77616b752f322f64656661756c742d636f6e74656e742f70726f746f" byteutils.toHex(message.payload) == "010203045445535405060708" byteutils.toHex(message.meta) == "" - messageHash.toHex() == "87619d05e563521d9126749b45bd4cc2430df0607e77e23572d874ed9c1aaa62" + byteutils.toHex(toBytesBE(uint64(message.timestamp))) == "175789bfa23f8400" + messageHash.toHex() == "a2554498b31f5bcdfcbf7fa58ad1c2d45f0254f3f8110a85588ec3cf10720fd8" test "digest computation - meta field (12 bytes)": ## Test vector: @@ -46,15 +50,17 @@ suite "Waku Message - Deterministic hashing": ## waku_message.payload = 0x010203045445535405060708 ## waku_message.content_topic = 0x2f77616b752f322f64656661756c742d636f6e74656e742f70726f746f ## waku_message.meta = 0x73757065722d736563726574 + ## waku_message.ts = 0x175789bfa23f8400 ## - ## message_hash = 0x4fdde1099c9f77f6dae8147b6b3179aba1fc8e14a7bf35203fc253ee479f135f + ## message_hash = 0x64cce733fed134e83da02b02c6f689814872b1a0ac97ea56b76095c3c72bfe05 ## Given let pubsubTopic = DefaultPubsubTopic # /waku/2/default-waku/proto let message = fakeWakuMessage( contentTopic = DefaultContentTopic, # /waku/2/default-content/proto payload = "\x01\x02\x03\x04TEST\x05\x06\x07\x08".toBytes(), - meta = "\x73\x75\x70\x65\x72\x2d\x73\x65\x63\x72\x65\x74".toBytes() + meta = "\x73\x75\x70\x65\x72\x2d\x73\x65\x63\x72\x65\x74".toBytes(), + ts = getNanosecondTime(1681964442) # Apr 20 2023 04:20:42 ) ## When @@ -66,7 +72,8 @@ suite "Waku Message - Deterministic hashing": byteutils.toHex(message.contentTopic.toBytes()) == "2f77616b752f322f64656661756c742d636f6e74656e742f70726f746f" byteutils.toHex(message.payload) == "010203045445535405060708" byteutils.toHex(message.meta) == "73757065722d736563726574" - messageHash.toHex() == "4fdde1099c9f77f6dae8147b6b3179aba1fc8e14a7bf35203fc253ee479f135f" + byteutils.toHex(toBytesBE(uint64(message.timestamp))) == "175789bfa23f8400" + messageHash.toHex() == "64cce733fed134e83da02b02c6f689814872b1a0ac97ea56b76095c3c72bfe05" test "digest computation - meta field (64 bytes)": ## Test vector: @@ -75,15 +82,17 @@ suite "Waku Message - Deterministic hashing": ## waku_message.payload = 0x010203045445535405060708 ## waku_message.content_topic = 0x2f77616b752f322f64656661756c742d636f6e74656e742f70726f746f ## waku_message.meta = 0x000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f + ## waku_message.ts = 0x175789bfa23f8400 ## - ## message_hash = 0xc32ed3b51f0c432be1c7f50880110e1a1a60f6067cd8193ca946909efe1b26ad + ## message_hash = 0x7158b6498753313368b9af8f6e0a0a05104f68f972981da42a43bc53fb0c1b27" ## Given let pubsubTopic = DefaultPubsubTopic # /waku/2/default-waku/proto let message = fakeWakuMessage( contentTopic = DefaultContentTopic, # /waku/2/default-content/proto payload = "\x01\x02\x03\x04TEST\x05\x06\x07\x08".toBytes(), - meta = toSeq(0.byte..63.byte) + meta = toSeq(0.byte..63.byte), + ts = getNanosecondTime(1681964442) # Apr 20 2023 04:20:42 ) ## When @@ -95,7 +104,8 @@ suite "Waku Message - Deterministic hashing": byteutils.toHex(message.contentTopic.toBytes()) == "2f77616b752f322f64656661756c742d636f6e74656e742f70726f746f" byteutils.toHex(message.payload) == "010203045445535405060708" byteutils.toHex(message.meta) == "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f" - messageHash.toHex() == "c32ed3b51f0c432be1c7f50880110e1a1a60f6067cd8193ca946909efe1b26ad" + byteutils.toHex(toBytesBE(uint64(message.timestamp))) == "175789bfa23f8400" + messageHash.toHex() == "7158b6498753313368b9af8f6e0a0a05104f68f972981da42a43bc53fb0c1b27" test "digest computation - zero length payload": ## Test vector: @@ -104,15 +114,17 @@ suite "Waku Message - Deterministic hashing": ## waku_message.payload = [] ## waku_message.content_topic = 0x2f77616b752f322f64656661756c742d636f6e74656e742f70726f746f ## waku_message.meta = 0x73757065722d736563726574 + ## waku_message.ts = 0x175789bfa23f8400 ## - ## message_hash = 0xe1a9596237dbe2cc8aaf4b838c46a7052df6bc0d42ba214b998a8bfdbe8487d6 + ## message_hash = 0x483ea950cb63f9b9d6926b262bb36194d3f40a0463ce8446228350bd44e96de4 ## Given let pubsubTopic = DefaultPubsubTopic # /waku/2/default-waku/proto let message = fakeWakuMessage( contentTopic = DefaultContentTopic, # /waku/2/default-content/proto payload = newSeq[byte](), - meta = "\x73\x75\x70\x65\x72\x2d\x73\x65\x63\x72\x65\x74".toBytes() + meta = "\x73\x75\x70\x65\x72\x2d\x73\x65\x63\x72\x65\x74".toBytes(), + ts = getNanosecondTime(1681964442) # Apr 20 2023 04:20:42 ) ## When @@ -120,8 +132,9 @@ suite "Waku Message - Deterministic hashing": ## Then check: - messageHash.toHex() == "e1a9596237dbe2cc8aaf4b838c46a7052df6bc0d42ba214b998a8bfdbe8487d6" + messageHash.toHex() == "483ea950cb63f9b9d6926b262bb36194d3f40a0463ce8446228350bd44e96de4" + test "waku message - check meta size is enforced": # create message with meta size > 64 bytes (invalid) let message = fakeWakuMessage( diff --git a/waku/waku_core/message/digest.nim b/waku/waku_core/message/digest.nim index 602ff213f9..9db0542e18 100644 --- a/waku/waku_core/message/digest.nim +++ b/waku/waku_core/message/digest.nim @@ -7,6 +7,7 @@ else: import std/sequtils, stew/byteutils, + stew/endians2, nimcrypto/sha2 import ../topics, @@ -35,5 +36,6 @@ proc digest*(pubsubTopic: PubsubTopic, msg: WakuMessage): WakuMessageDigest = ctx.update(msg.payload) ctx.update(msg.contentTopic.toBytes()) ctx.update(msg.meta) + ctx.update(toBytesBE(uint64(msg.timestamp))) return ctx.finish() # Computes the hash From aeb77a3e7595b5ca6f5db15c78503c1c0e01ee5b Mon Sep 17 00:00:00 2001 From: Abhimanyu Date: Wed, 22 Nov 2023 17:32:56 +0100 Subject: [PATCH 134/274] feat: Add new DB column `messageHash` (#2202) * feat: added DB column messageHash * feat: minor change * feat: minor merge conflict fix * Update test_resume.nim * Update test_resume.nim * randomblob() func used to populate attribute * PRIMARY key updated - SQLite and Postgres --- .../00008_updatePrimaryKey_add_col.up.sql | 28 +++++++++ tests/waku_archive/test_driver_postgres.nim | 11 ++-- .../test_driver_postgres_query.nim | 63 ++++++++++--------- .../waku_archive/test_driver_queue_query.nim | 55 ++++++++-------- tests/waku_archive/test_driver_sqlite.nim | 2 +- .../waku_archive/test_driver_sqlite_query.nim | 55 ++++++++-------- tests/waku_archive/test_retention_policy.nim | 8 ++- tests/waku_archive/test_waku_archive.nim | 5 +- tests/waku_core/test_message_digest.nim | 8 +-- tests/waku_store/test_resume.nim | 12 ++-- tests/waku_store/test_wakunode_store.nim | 4 +- tests/wakunode_jsonrpc/test_jsonrpc_store.nim | 4 +- tests/wakunode_rest/test_rest_store.nim | 4 +- waku/node/waku_node.nim | 4 +- waku/waku_archive/archive.nim | 6 +- waku/waku_archive/driver.nim | 1 + .../postgres_driver/postgres_driver.nim | 13 ++-- .../driver/queue_driver/queue_driver.nim | 1 + .../driver/sqlite_driver/migrations.nim | 2 +- .../driver/sqlite_driver/queries.nim | 10 +-- .../driver/sqlite_driver/sqlite_driver.nim | 3 + waku/waku_core/message/digest.nim | 7 +-- waku/waku_filter_v2/protocol.nim | 6 +- waku/waku_store/client.nim | 4 +- 24 files changed, 187 insertions(+), 129 deletions(-) create mode 100644 migrations/message_store/00008_updatePrimaryKey_add_col.up.sql diff --git a/migrations/message_store/00008_updatePrimaryKey_add_col.up.sql b/migrations/message_store/00008_updatePrimaryKey_add_col.up.sql new file mode 100644 index 0000000000..f933d08496 --- /dev/null +++ b/migrations/message_store/00008_updatePrimaryKey_add_col.up.sql @@ -0,0 +1,28 @@ +ALTER TABLE message RENAME TO message_backup; + +CREATE TABLE IF NOT EXISTS message ( + pubsubTopic BLOB NOT NULL, + contentTopic BLOB NOT NULL, + payload BLOB, + version INTEGER NOT NULL, + timestamp INTEGER NOT NULL, + id BLOB, + messageHash BLOB, -- Newly added, this will be populated with a counter value + storedAt INTEGER NOT NULL, + CONSTRAINT messageIndex PRIMARY KEY (messageHash) +) WITHOUT ROWID; + + +INSERT INTO message(pubsubTopic, contentTopic, payload, version, timestamp, id, messageHash, storedAt) +SELECT + mb.pubsubTopic, + mb.contentTopic, + mb.payload, + mb.version, + mb.timestamp, + mb.id, + randomblob(32), -- to populate 32-byte random blob + mb.storedAt +FROM message_backup AS mb; + +DROP TABLE message_backup; \ No newline at end of file diff --git a/tests/waku_archive/test_driver_postgres.nim b/tests/waku_archive/test_driver_postgres.nim index 4709d4588f..90dbf7eeb2 100644 --- a/tests/waku_archive/test_driver_postgres.nim +++ b/tests/waku_archive/test_driver_postgres.nim @@ -8,6 +8,7 @@ import ../../../waku/waku_archive, ../../../waku/waku_archive/driver/postgres_driver, ../../../waku/waku_core, + ../../../waku/waku_core/message/digest, ../testlib/wakucore proc now():int64 = getTime().toUnix() @@ -80,7 +81,7 @@ suite "Postgres driver": let computedDigest = computeDigest(msg) - let putRes = await driver.put(DefaultPubsubTopic, msg, computedDigest, msg.timestamp) + let putRes = await driver.put(DefaultPubsubTopic, msg, computedDigest, computeMessageHash(DefaultPubsubTopic, msg), msg.timestamp) assert putRes.isOk(), putRes.error let storedMsg = (await driver.getAllMessages()).tryGet() @@ -113,12 +114,12 @@ suite "Postgres driver": let msg1 = fakeWakuMessage(contentTopic=contentTopic1) - var putRes = await driver.put(pubsubTopic1, msg1, computeDigest(msg1), msg1.timestamp) + var putRes = await driver.put(pubsubTopic1, msg1, computeDigest(msg1), computeMessageHash(pubsubTopic1, msg1), msg1.timestamp) assert putRes.isOk(), putRes.error let msg2 = fakeWakuMessage(contentTopic=contentTopic2) - putRes = await driver.put(pubsubTopic2, msg2, computeDigest(msg2), msg2.timestamp) + putRes = await driver.put(pubsubTopic2, msg2, computeDigest(msg2), computeMessageHash(pubsubTopic2, msg2), msg2.timestamp) assert putRes.isOk(), putRes.error let countMessagesRes = await driver.getMessagesCount() @@ -197,11 +198,11 @@ suite "Postgres driver": let msg2 = fakeWakuMessage(ts = now) var putRes = await driver.put(DefaultPubsubTopic, - msg1, computeDigest(msg1), msg1.timestamp) + msg1, computeDigest(msg1), computeMessageHash(DefaultPubsubTopic, msg1), msg1.timestamp) assert putRes.isOk(), putRes.error putRes = await driver.put(DefaultPubsubTopic, - msg2, computeDigest(msg2), msg2.timestamp) + msg2, computeDigest(msg2), computeMessageHash(DefaultPubsubTopic, msg2), msg2.timestamp) require not putRes.isOk() (await driver.close()).expect("driver to close") diff --git a/tests/waku_archive/test_driver_postgres_query.nim b/tests/waku_archive/test_driver_postgres_query.nim index cbc1d16d91..f93c7be483 100644 --- a/tests/waku_archive/test_driver_postgres_query.nim +++ b/tests/waku_archive/test_driver_postgres_query.nim @@ -9,12 +9,15 @@ import ../../../waku/waku_archive, ../../../waku/waku_archive/driver/postgres_driver, ../../../waku/waku_core, + ../../../waku/waku_core/message/digest, ../testlib/common, ../testlib/wakucore + logScope: topics = "test archive postgres driver" + ## This whole file is copied from the 'test_driver_sqlite_query.nim' file ## and it tests the same use cases but using the postgres driver. @@ -65,7 +68,7 @@ suite "Postgres driver - query by content topic": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), computeMessageHash(DefaultPubsubTopic, msg), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -107,7 +110,7 @@ suite "Postgres driver - query by content topic": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), computeMessageHash(DefaultPubsubTopic, msg), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -150,7 +153,7 @@ suite "Postgres driver - query by content topic": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), computeMessageHash(DefaultPubsubTopic, msg), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -195,7 +198,7 @@ suite "Postgres driver - query by content topic": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), computeMessageHash(DefaultPubsubTopic, msg), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -233,7 +236,7 @@ suite "Postgres driver - query by content topic": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), computeMessageHash(DefaultPubsubTopic, msg), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -260,7 +263,7 @@ suite "Postgres driver - query by content topic": for t in 0..<40: let msg = fakeWakuMessage(@[byte t], DefaultContentTopic, ts=ts(t)) - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), computeMessageHash(DefaultPubsubTopic, msg), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -306,7 +309,7 @@ suite "Postgres driver - query by pubsub topic": for row in messages: let (topic, msg) = row - require (await driver.put(topic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(topic, msg, computeDigest(msg), computeMessageHash(topic, msg), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -351,7 +354,7 @@ suite "Postgres driver - query by pubsub topic": for row in messages: let (topic, msg) = row - require (await driver.put(topic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(topic, msg, computeDigest(msg), computeMessageHash(topic, msg), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -396,7 +399,7 @@ suite "Postgres driver - query by pubsub topic": for row in messages: let (topic, msg) = row - require (await driver.put(topic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(topic, msg, computeDigest(msg), computeMessageHash(topic, msg), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -443,7 +446,7 @@ suite "Postgres driver - query by cursor": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), computeMessageHash(DefaultPubsubTopic, msg), msg.timestamp)).isOk() let cursor = computeTestCursor(DefaultPubsubTopic, expected[4]) @@ -488,7 +491,7 @@ suite "Postgres driver - query by cursor": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), computeMessageHash(DefaultPubsubTopic, msg), msg.timestamp)).isOk() let cursor = computeTestCursor(DefaultPubsubTopic, expected[4]) @@ -531,7 +534,7 @@ suite "Postgres driver - query by cursor": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), computeMessageHash(DefaultPubsubTopic, msg), msg.timestamp)).isOk() let cursor = computeTestCursor(DefaultPubsubTopic, expected[4]) @@ -575,7 +578,7 @@ suite "Postgres driver - query by cursor": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), computeMessageHash(DefaultPubsubTopic, msg), msg.timestamp)).isOk() let cursor = computeTestCursor(DefaultPubsubTopic, expected[6]) @@ -626,7 +629,7 @@ suite "Postgres driver - query by cursor": for row in messages: let (topic, msg) = row - require (await driver.put(topic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(topic, msg, computeDigest(msg), computeMessageHash(topic, msg), msg.timestamp)).isOk() let cursor = computeTestCursor(expected[5][0], expected[5][1]) @@ -678,7 +681,7 @@ suite "Postgres driver - query by cursor": for row in messages: let (topic, msg) = row - require (await driver.put(topic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(topic, msg, computeDigest(msg), computeMessageHash(topic, msg), msg.timestamp)).isOk() let cursor = computeTestCursor(expected[6][0], expected[6][1]) @@ -726,7 +729,7 @@ suite "Postgres driver - query by time range": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), computeMessageHash(DefaultPubsubTopic, msg), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -768,7 +771,7 @@ suite "Postgres driver - query by time range": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), computeMessageHash(DefaultPubsubTopic, msg), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -816,7 +819,7 @@ suite "Postgres driver - query by time range": for row in messages: let (topic, msg) = row - require (await driver.put(topic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(topic, msg, computeDigest(msg), computeMessageHash(topic, msg), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -861,7 +864,7 @@ suite "Postgres driver - query by time range": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), computeMessageHash(DefaultPubsubTopic, msg), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -904,7 +907,7 @@ suite "Postgres driver - query by time range": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), computeMessageHash(DefaultPubsubTopic, msg), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -949,7 +952,7 @@ suite "Postgres driver - query by time range": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), computeMessageHash(DefaultPubsubTopic, msg), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -994,7 +997,7 @@ suite "Postgres driver - query by time range": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), computeMessageHash(DefaultPubsubTopic, msg), msg.timestamp)).isOk() let cursor = computeTestCursor(DefaultPubsubTopic, expected[3]) @@ -1042,7 +1045,7 @@ suite "Postgres driver - query by time range": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), computeMessageHash(DefaultPubsubTopic, msg), msg.timestamp)).isOk() let cursor = computeTestCursor(DefaultPubsubTopic, expected[6]) @@ -1093,7 +1096,7 @@ suite "Postgres driver - query by time range": for row in messages: let (topic, msg) = row - require (await driver.put(topic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(topic, msg, computeDigest(msg), computeMessageHash(topic, msg), msg.timestamp)).isOk() let cursor = computeTestCursor(DefaultPubsubTopic, expected[1][1]) @@ -1147,7 +1150,7 @@ suite "Postgres driver - query by time range": for row in messages: let (topic, msg) = row - require (await driver.put(topic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(topic, msg, computeDigest(msg), computeMessageHash(topic, msg), msg.timestamp)).isOk() let cursor = computeTestCursor(expected[7][0], expected[7][1]) @@ -1201,7 +1204,7 @@ suite "Postgres driver - query by time range": for row in messages: let (topic, msg) = row - require (await driver.put(topic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(topic, msg, computeDigest(msg), computeMessageHash(topic, msg), msg.timestamp)).isOk() let cursor = computeTestCursor(expected[1][0], expected[1][1]) @@ -1256,7 +1259,7 @@ suite "Postgres driver - query by time range": for row in messages: let (topic, msg) = row - require (await driver.put(topic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(topic, msg, computeDigest(msg), computeMessageHash(topic, msg), msg.timestamp)).isOk() let cursor = computeTestCursor(expected[1][0], expected[1][1]) @@ -1306,7 +1309,7 @@ suite "Postgres driver - retention policy": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), computeMessageHash(DefaultPubsubTopic, msg), msg.timestamp)).isOk() var res = await driver.getOldestMessageTimestamp() assert res.isOk(), res.error @@ -1341,7 +1344,7 @@ suite "Postgres driver - retention policy": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), computeMessageHash(DefaultPubsubTopic, msg), msg.timestamp)).isOk() var res = await driver.getMessagesCount() assert res.isOk(), res.error @@ -1378,7 +1381,7 @@ suite "Postgres driver - retention policy": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), computeMessageHash(DefaultPubsubTopic, msg), msg.timestamp)).isOk() var res = await driver.getMessagesCount() assert res.isOk(), res.error diff --git a/tests/waku_archive/test_driver_queue_query.nim b/tests/waku_archive/test_driver_queue_query.nim index 5f25d6d9ae..31e25422ef 100644 --- a/tests/waku_archive/test_driver_queue_query.nim +++ b/tests/waku_archive/test_driver_queue_query.nim @@ -9,6 +9,7 @@ import ../../../waku/waku_archive, ../../../waku/waku_archive/driver/queue_driver, ../../../waku/waku_core, + ../../../waku/waku_core/message/digest, ../testlib/common, ../testlib/wakucore @@ -58,7 +59,7 @@ suite "Queue driver - query by content topic": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp) + let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg), computeMessageHash(DefaultPubsubTopic, msg), msg.timestamp) require retFut.isOk() ## When @@ -102,7 +103,7 @@ suite "Queue driver - query by content topic": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp) + let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg), computeMessageHash(DefaultPubsubTopic, msg), msg.timestamp) require retFut.isOk() ## When @@ -147,7 +148,7 @@ suite "Queue driver - query by content topic": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp) + let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg), computeMessageHash(DefaultPubsubTopic, msg), msg.timestamp) require retFut.isOk() ## When @@ -194,7 +195,7 @@ suite "Queue driver - query by content topic": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp) + let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg), computeMessageHash(DefaultPubsubTopic, msg), msg.timestamp) require retFut.isOk() ## When @@ -234,7 +235,7 @@ suite "Queue driver - query by content topic": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp) + let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg), computeMessageHash(DefaultPubsubTopic, msg), msg.timestamp) require retFut.isOk() ## When @@ -263,7 +264,7 @@ suite "Queue driver - query by content topic": for t in 0..<40: let msg = fakeWakuMessage(@[byte t], DefaultContentTopic, ts=ts(t)) - let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp) + let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg), computeMessageHash(DefaultPubsubTopic, msg), msg.timestamp) require retFut.isOk() ## When @@ -312,7 +313,7 @@ suite "SQLite driver - query by pubsub topic": for row in messages: let (topic, msg) = row - let retFut = waitFor driver.put(topic, msg, computeDigest(msg), msg.timestamp) + let retFut = waitFor driver.put(topic, msg, computeDigest(msg), computeMessageHash(topic, msg), msg.timestamp) require retFut.isOk() ## When @@ -359,7 +360,7 @@ suite "SQLite driver - query by pubsub topic": for row in messages: let (topic, msg) = row - let retFut = waitFor driver.put(topic, msg, computeDigest(msg), msg.timestamp) + let retFut = waitFor driver.put(topic, msg, computeDigest(msg), computeMessageHash(topic, msg), msg.timestamp) require retFut.isOk() ## When @@ -406,7 +407,7 @@ suite "SQLite driver - query by pubsub topic": for row in messages: let (topic, msg) = row - let retFut = waitFor driver.put(topic, msg, computeDigest(msg), msg.timestamp) + let retFut = waitFor driver.put(topic, msg, computeDigest(msg), computeMessageHash(topic, msg), msg.timestamp) require retFut.isOk() ## When @@ -456,7 +457,7 @@ suite "Queue driver - query by cursor": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp) + let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg), computeMessageHash(DefaultPubsubTopic, msg), msg.timestamp) require retFut.isOk() let cursor = computeTestCursor(DefaultPubsubTopic, expected[4]) @@ -503,7 +504,7 @@ suite "Queue driver - query by cursor": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp) + let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg), computeMessageHash(DefaultPubsubTopic, msg), msg.timestamp) require retFut.isOk() let cursor = computeTestCursor(DefaultPubsubTopic, expected[4]) @@ -548,7 +549,7 @@ suite "Queue driver - query by cursor": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp) + let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg), computeMessageHash(DefaultPubsubTopic, msg), msg.timestamp) require retFut.isOk() let cursor = computeTestCursor(DefaultPubsubTopic, expected[4]) @@ -594,7 +595,7 @@ suite "Queue driver - query by cursor": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp) + let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg), computeMessageHash(DefaultPubsubTopic, msg), msg.timestamp) require retFut.isOk() let cursor = computeTestCursor(DefaultPubsubTopic, expected[6]) @@ -647,7 +648,7 @@ suite "Queue driver - query by cursor": for row in messages: let (topic, msg) = row - let retFut = waitFor driver.put(topic, msg, computeDigest(msg), msg.timestamp) + let retFut = waitFor driver.put(topic, msg, computeDigest(msg), computeMessageHash(topic, msg), msg.timestamp) require retFut.isOk() let cursor = computeTestCursor(expected[5][0], expected[5][1]) @@ -701,7 +702,7 @@ suite "Queue driver - query by cursor": for row in messages: let (topic, msg) = row - let retFut = waitFor driver.put(topic, msg, computeDigest(msg), msg.timestamp) + let retFut = waitFor driver.put(topic, msg, computeDigest(msg), computeMessageHash(topic, msg), msg.timestamp) require retFut.isOk() let cursor = computeTestCursor(expected[6][0], expected[6][1]) @@ -752,7 +753,7 @@ suite "Queue driver - query by time range": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp) + let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg), computeMessageHash(DefaultPubsubTopic, msg), msg.timestamp) require retFut.isOk() ## When @@ -796,7 +797,7 @@ suite "Queue driver - query by time range": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp) + let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg),computeMessageHash(DefaultPubsubTopic, msg), msg.timestamp) require retFut.isOk() ## When @@ -846,7 +847,7 @@ suite "Queue driver - query by time range": for row in messages: let (topic, msg) = row - let retFut = waitFor driver.put(topic, msg, computeDigest(msg), msg.timestamp) + let retFut = waitFor driver.put(topic, msg, computeDigest(msg), computeMessageHash(topic, msg), msg.timestamp) require retFut.isOk() ## When @@ -893,7 +894,7 @@ suite "Queue driver - query by time range": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp) + let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg), computeMessageHash(DefaultPubsubTopic, msg), msg.timestamp) require retFut.isOk() ## When @@ -938,7 +939,7 @@ suite "Queue driver - query by time range": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp) + let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg), computeMessageHash(DefaultPubsubTopic, msg), msg.timestamp) require retFut.isOk() ## When @@ -985,7 +986,7 @@ suite "Queue driver - query by time range": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp) + let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg), computeMessageHash(DefaultPubsubTopic, msg), msg.timestamp) require retFut.isOk() ## When @@ -1032,7 +1033,7 @@ suite "Queue driver - query by time range": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp) + let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg), computeMessageHash(DefaultPubsubTopic, msg), msg.timestamp) require retFut.isOk() let cursor = computeTestCursor(DefaultPubsubTopic, expected[3]) @@ -1082,7 +1083,7 @@ suite "Queue driver - query by time range": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp) + let retFut = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg), computeMessageHash(DefaultPubsubTopic, msg), msg.timestamp) require retFut.isOk() let cursor = computeTestCursor(DefaultPubsubTopic, expected[6]) @@ -1135,7 +1136,7 @@ suite "Queue driver - query by time range": for row in messages: let (topic, msg) = row - let retFut = waitFor driver.put(topic, msg, computeDigest(msg), msg.timestamp) + let retFut = waitFor driver.put(topic, msg, computeDigest(msg), computeMessageHash(topic, msg), msg.timestamp) require retFut.isOk() let cursor = computeTestCursor(DefaultPubsubTopic, expected[1][1]) @@ -1191,7 +1192,7 @@ suite "Queue driver - query by time range": for row in messages: let (topic, msg) = row - let retFut = waitFor driver.put(topic, msg, computeDigest(msg), msg.timestamp) + let retFut = waitFor driver.put(topic, msg, computeDigest(msg), computeMessageHash(topic, msg), msg.timestamp) require retFut.isOk() let cursor = computeTestCursor(expected[7][0], expected[7][1]) @@ -1247,7 +1248,7 @@ suite "Queue driver - query by time range": for row in messages: let (topic, msg) = row - let retFut = waitFor driver.put(topic, msg, computeDigest(msg), msg.timestamp) + let retFut = waitFor driver.put(topic, msg, computeDigest(msg), computeMessageHash(topic, msg), msg.timestamp) require retFut.isOk() let cursor = computeTestCursor(expected[1][0], expected[1][1]) @@ -1304,7 +1305,7 @@ suite "Queue driver - query by time range": for row in messages: let (topic, msg) = row - let retFut = waitFor driver.put(topic, msg, computeDigest(msg), msg.timestamp) + let retFut = waitFor driver.put(topic, msg, computeDigest(msg), computeMessageHash(topic, msg), msg.timestamp) require retFut.isOk() let cursor = computeTestCursor(expected[1][0], expected[1][1]) diff --git a/tests/waku_archive/test_driver_sqlite.nim b/tests/waku_archive/test_driver_sqlite.nim index 7c1bd2e1b7..342f995653 100644 --- a/tests/waku_archive/test_driver_sqlite.nim +++ b/tests/waku_archive/test_driver_sqlite.nim @@ -50,7 +50,7 @@ suite "SQLite driver": let msg = fakeWakuMessage(contentTopic=contentTopic) ## When - let putRes = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp) + let putRes = waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg), computeMessageHash(DefaultPubsubTopic, msg), msg.timestamp) ## Then check: diff --git a/tests/waku_archive/test_driver_sqlite_query.nim b/tests/waku_archive/test_driver_sqlite_query.nim index 9cf21cfca7..d63ec7c75c 100644 --- a/tests/waku_archive/test_driver_sqlite_query.nim +++ b/tests/waku_archive/test_driver_sqlite_query.nim @@ -10,6 +10,7 @@ import ../../../waku/waku_archive, ../../../waku/waku_archive/driver/sqlite_driver, ../../../waku/waku_core, + ../../../waku/waku_core/message/digest, ../testlib/common, ../testlib/wakucore @@ -62,7 +63,7 @@ suite "SQLite driver - query by content topic": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), computeMessageHash(DefaultPubsubTopic, msg), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -105,7 +106,7 @@ suite "SQLite driver - query by content topic": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), computeMessageHash(DefaultPubsubTopic, msg), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -149,7 +150,7 @@ suite "SQLite driver - query by content topic": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), computeMessageHash(DefaultPubsubTopic, msg), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -195,7 +196,7 @@ suite "SQLite driver - query by content topic": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), computeMessageHash(DefaultPubsubTopic, msg), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -234,7 +235,7 @@ suite "SQLite driver - query by content topic": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), computeMessageHash(DefaultPubsubTopic, msg), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -262,7 +263,7 @@ suite "SQLite driver - query by content topic": for t in 0..<40: let msg = fakeWakuMessage(@[byte t], DefaultContentTopic, ts=ts(t)) - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), computeMessageHash(DefaultPubsubTopic, msg), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -310,7 +311,7 @@ suite "SQLite driver - query by pubsub topic": for row in messages: let (topic, msg) = row - require (await driver.put(topic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(topic, msg, computeDigest(msg), computeMessageHash(topic, msg), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -356,7 +357,7 @@ suite "SQLite driver - query by pubsub topic": for row in messages: let (topic, msg) = row - require (await driver.put(topic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(topic, msg, computeDigest(msg), computeMessageHash(topic, msg), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -402,7 +403,7 @@ suite "SQLite driver - query by pubsub topic": for row in messages: let (topic, msg) = row - require (await driver.put(topic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(topic, msg, computeDigest(msg), computeMessageHash(topic, msg), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -451,7 +452,7 @@ suite "SQLite driver - query by cursor": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), computeMessageHash(DefaultPubsubTopic, msg), msg.timestamp)).isOk() let cursor = computeTestCursor(DefaultPubsubTopic, expected[4]) @@ -497,7 +498,7 @@ suite "SQLite driver - query by cursor": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), computeMessageHash(DefaultPubsubTopic, msg), msg.timestamp)).isOk() let cursor = computeTestCursor(DefaultPubsubTopic, expected[4]) @@ -541,7 +542,7 @@ suite "SQLite driver - query by cursor": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), computeMessageHash(DefaultPubsubTopic, msg), msg.timestamp)).isOk() let cursor = computeTestCursor(DefaultPubsubTopic, expected[4]) @@ -586,7 +587,7 @@ suite "SQLite driver - query by cursor": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), computeMessageHash(DefaultPubsubTopic, msg), msg.timestamp)).isOk() let cursor = computeTestCursor(DefaultPubsubTopic, expected[6]) @@ -638,7 +639,7 @@ suite "SQLite driver - query by cursor": for row in messages: let (topic, msg) = row - require (await driver.put(topic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(topic, msg, computeDigest(msg), computeMessageHash(topic, msg), msg.timestamp)).isOk() let cursor = computeTestCursor(expected[5][0], expected[5][1]) @@ -691,7 +692,7 @@ suite "SQLite driver - query by cursor": for row in messages: let (topic, msg) = row - require (await driver.put(topic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(topic, msg, computeDigest(msg), computeMessageHash(topic, msg), msg.timestamp)).isOk() let cursor = computeTestCursor(expected[6][0], expected[6][1]) @@ -741,7 +742,7 @@ suite "SQLite driver - query by time range": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), computeMessageHash(DefaultPubsubTopic, msg), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -784,7 +785,7 @@ suite "SQLite driver - query by time range": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), computeMessageHash(DefaultPubsubTopic, msg), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -833,7 +834,7 @@ suite "SQLite driver - query by time range": for row in messages: let (topic, msg) = row - require (await driver.put(topic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(topic, msg, computeDigest(msg), computeMessageHash(topic, msg), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -879,7 +880,7 @@ suite "SQLite driver - query by time range": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), computeMessageHash(DefaultPubsubTopic, msg), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -923,7 +924,7 @@ suite "SQLite driver - query by time range": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), computeMessageHash(DefaultPubsubTopic, msg), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -969,7 +970,7 @@ suite "SQLite driver - query by time range": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), computeMessageHash(DefaultPubsubTopic, msg), msg.timestamp)).isOk() ## When let res = await driver.getMessages( @@ -1015,7 +1016,7 @@ suite "SQLite driver - query by time range": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), computeMessageHash(DefaultPubsubTopic, msg), msg.timestamp)).isOk() let cursor = computeTestCursor(DefaultPubsubTopic, expected[3]) @@ -1064,7 +1065,7 @@ suite "SQLite driver - query by time range": debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) for msg in messages: - require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), computeMessageHash(DefaultPubsubTopic, msg), msg.timestamp)).isOk() let cursor = computeTestCursor(DefaultPubsubTopic, expected[6]) @@ -1116,7 +1117,7 @@ suite "SQLite driver - query by time range": for row in messages: let (topic, msg) = row - require (await driver.put(topic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(topic, msg, computeDigest(msg), computeMessageHash(topic, msg), msg.timestamp)).isOk() let cursor = computeTestCursor(DefaultPubsubTopic, expected[1][1]) @@ -1171,7 +1172,7 @@ suite "SQLite driver - query by time range": for row in messages: let (topic, msg) = row - require (await driver.put(topic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(topic, msg, computeDigest(msg), computeMessageHash(topic, msg), msg.timestamp)).isOk() let cursor = computeTestCursor(expected[7][0], expected[7][1]) @@ -1226,7 +1227,7 @@ suite "SQLite driver - query by time range": for row in messages: let (topic, msg) = row - require (await driver.put(topic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(topic, msg, computeDigest(msg), computeMessageHash(topic, msg), msg.timestamp)).isOk() let cursor = computeTestCursor(expected[1][0], expected[1][1]) @@ -1282,7 +1283,7 @@ suite "SQLite driver - query by time range": for row in messages: let (topic, msg) = row - require (await driver.put(topic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (await driver.put(topic, msg, computeDigest(msg), computeMessageHash(topic, msg), msg.timestamp)).isOk() let cursor = computeTestCursor(expected[1][0], expected[1][1]) diff --git a/tests/waku_archive/test_retention_policy.nim b/tests/waku_archive/test_retention_policy.nim index 2aa3866323..fbbcca4218 100644 --- a/tests/waku_archive/test_retention_policy.nim +++ b/tests/waku_archive/test_retention_policy.nim @@ -8,6 +8,7 @@ import import ../../../waku/common/databases/db_sqlite, ../../../waku/waku_core, + ../../../waku/waku_core/message/digest, ../../../waku/waku_archive, ../../../waku/waku_archive/driver/sqlite_driver, ../../../waku/waku_archive/retention_policy, @@ -41,7 +42,7 @@ suite "Waku Archive - Retention policy": ## When for i in 1..capacity+excess: let msg = fakeWakuMessage(payload= @[byte i], contentTopic=DefaultContentTopic, ts=Timestamp(i)) - putFutures.add(driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)) + putFutures.add(driver.put(DefaultPubsubTopic, msg, computeDigest(msg), computeMessageHash(DefaultPubsubTopic, msg), msg.timestamp)) discard waitFor allFinished(putFutures) @@ -79,11 +80,12 @@ suite "Waku Archive - Retention policy": require (waitFor driver.performVacuum()).isOk() ## When + ## # create a number of messages so that the size of the DB overshoots for i in 1..excess: let msg = fakeWakuMessage(payload= @[byte i], contentTopic=DefaultContentTopic, ts=Timestamp(i)) - putFutures.add(driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)) + putFutures.add(driver.put(DefaultPubsubTopic, msg, computeDigest(msg), computeMessageHash(DefaultPubsubTopic, msg), msg.timestamp)) # waitFor is used to synchronously wait for the futures to complete. discard waitFor allFinished(putFutures) @@ -137,7 +139,7 @@ suite "Waku Archive - Retention policy": ## When for msg in messages: - require (waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg), computeMessageHash(DefaultPubsubTopic, msg), msg.timestamp)).isOk() require (waitFor retentionPolicy.execute(driver)).isOk() ## Then diff --git a/tests/waku_archive/test_waku_archive.nim b/tests/waku_archive/test_waku_archive.nim index dcac1484b4..eb9c4e3410 100644 --- a/tests/waku_archive/test_waku_archive.nim +++ b/tests/waku_archive/test_waku_archive.nim @@ -9,6 +9,7 @@ import import ../../../waku/common/databases/db_sqlite, ../../../waku/waku_core, + ../../../waku/waku_core/message/digest, ../../../waku/waku_archive/driver/sqlite_driver, ../../../waku/waku_archive, ../testlib/common, @@ -152,7 +153,7 @@ procSuite "Waku Archive - find messages": archive = newTestWakuArchive(driver) for msg in msgListA: - require (waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg), computeMessageHash(DefaultPubsubTopic, msg), msg.timestamp)).isOk() archive @@ -446,7 +447,7 @@ procSuite "Waku Archive - find messages": ] for msg in msgList: - require (waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp)).isOk() + require (waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg), computeMessageHash(DefaultPubsubTopic, msg), msg.timestamp)).isOk() ## Given let req = ArchiveQuery(contentTopics: @[DefaultContentTopic]) diff --git a/tests/waku_core/test_message_digest.nim b/tests/waku_core/test_message_digest.nim index 673d4adbf1..64f6696984 100644 --- a/tests/waku_core/test_message_digest.nim +++ b/tests/waku_core/test_message_digest.nim @@ -32,7 +32,7 @@ suite "Waku Message - Deterministic hashing": ) ## When - let messageHash = digest(pubsubTopic, message) + let messageHash = computeMessageHash(pubsubTopic, message) ## Then check: @@ -64,7 +64,7 @@ suite "Waku Message - Deterministic hashing": ) ## When - let messageHash = digest(pubsubTopic, message) + let messageHash = computeMessageHash(pubsubTopic, message) ## Then check: @@ -96,7 +96,7 @@ suite "Waku Message - Deterministic hashing": ) ## When - let messageHash = digest(pubsubTopic, message) + let messageHash = computeMessageHash(pubsubTopic, message) ## Then check: @@ -128,7 +128,7 @@ suite "Waku Message - Deterministic hashing": ) ## When - let messageHash = digest(pubsubTopic, message) + let messageHash = computeMessageHash(pubsubTopic, message) ## Then check: diff --git a/tests/waku_store/test_resume.nim b/tests/waku_store/test_resume.nim index ea918ce3c3..d858158a45 100644 --- a/tests/waku_store/test_resume.nim +++ b/tests/waku_store/test_resume.nim @@ -8,9 +8,11 @@ import libp2p/crypto/crypto import ../../waku/common/databases/db_sqlite, - ../../waku/node/message_store/sqlite_store, + ../../waku/waku_archive/driver, + ../../waku/waku_archive/driver/sqlite_driver/sqlite_driver, ../../waku/node/peer_manager, ../../waku/waku_core, + ../../waku/waku_core/message/digest, ../../waku/waku_store, ./testlib/common, ./testlib/switch @@ -19,12 +21,12 @@ import proc newTestDatabase(): SqliteDatabase = SqliteDatabase.new("memory:").tryGet() -proc newTestArchiveDriver(): ArchiveDriver = +proc newTestArchiveDriver(): ArchiveDriverResult = let database = SqliteDatabase.new(":memory:").tryGet() SqliteDriver.init(database).tryGet() -proc newTestWakuStore(switch: Switch, store=newTestMessageStore()): Future[WakuStore] {.async.} = +proc newTestWakuStore(switch: Switch, store: MessageStore = nil): Future[WakuStore] {.async.} = let peerManager = PeerManager.new(switch) proto = WakuStore.init(peerManager, rng, store) @@ -58,7 +60,7 @@ procSuite "Waku Store - resume store": ] for msg in msgList: - require store.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp).isOk() + require store.put(DefaultPubsubTopic, msg, computeDigest(msg), computeMessageHash(DefaultPubsubTopic, msg), msg.timestamp).isOk() store @@ -76,7 +78,7 @@ procSuite "Waku Store - resume store": ] for msg in msgList2: - require store.put(DefaultPubsubTopic, msg, computeDigest(msg), msg.timestamp).isOk() + require store.put(DefaultPubsubTopic, msg, computeDigest(msg), computeMessageHash(DefaultPubsubTopic, msg), msg.timestamp).isOk() store diff --git a/tests/waku_store/test_wakunode_store.nim b/tests/waku_store/test_wakunode_store.nim index 2eff88e227..ae489fc6a4 100644 --- a/tests/waku_store/test_wakunode_store.nim +++ b/tests/waku_store/test_wakunode_store.nim @@ -15,6 +15,7 @@ import import ../../../waku/common/databases/db_sqlite, ../../../waku/waku_core, + ../../../waku/waku_core/message/digest, ../../../waku/node/peer_manager, ../../../waku/waku_archive, ../../../waku/waku_archive/driver/sqlite_driver, @@ -58,7 +59,8 @@ procSuite "WakuNode - Store": for msg in msgListA: let msg_digest = waku_archive.computeDigest(msg) - require (waitFor driver.put(DefaultPubsubTopic, msg, msg_digest, msg.timestamp)).isOk() + let msg_hash = computeMessageHash(DefaultPubsubTopic, msg) + require (waitFor driver.put(DefaultPubsubTopic, msg, msg_digest, msg_hash, msg.timestamp)).isOk() driver diff --git a/tests/wakunode_jsonrpc/test_jsonrpc_store.nim b/tests/wakunode_jsonrpc/test_jsonrpc_store.nim index de04f83f0a..fe22f8ac18 100644 --- a/tests/wakunode_jsonrpc/test_jsonrpc_store.nim +++ b/tests/wakunode_jsonrpc/test_jsonrpc_store.nim @@ -9,6 +9,7 @@ import json_rpc/[rpcserver, rpcclient] import ../../../waku/waku_core, + ../../../waku/waku_core/message/digest, ../../../waku/node/peer_manager, ../../../waku/waku_node, ../../../waku/waku_api/jsonrpc/store/handlers as store_api, @@ -25,10 +26,11 @@ import proc put(store: ArchiveDriver, pubsubTopic: PubsubTopic, message: WakuMessage): Future[Result[void, string]] = let digest = waku_archive.computeDigest(message) + msgHash = computeMessageHash(pubsubTopic, message) receivedTime = if message.timestamp > 0: message.timestamp else: getNanosecondTime(getTime().toUnixFloat()) - store.put(pubsubTopic, message, digest, receivedTime) + store.put(pubsubTopic, message, digest, msgHash, receivedTime) procSuite "Waku v2 JSON-RPC API - Store": diff --git a/tests/wakunode_rest/test_rest_store.nim b/tests/wakunode_rest/test_rest_store.nim index 64ad5c31e7..ef8fc745d2 100644 --- a/tests/wakunode_rest/test_rest_store.nim +++ b/tests/wakunode_rest/test_rest_store.nim @@ -10,6 +10,7 @@ import libp2p/crypto/crypto import ../../../waku/waku_core/message, + ../../../waku/waku_core/message/digest, ../../../waku/waku_core/topics, ../../../waku/waku_core/time, ../../../waku/waku_node, @@ -33,10 +34,11 @@ logScope: proc put(store: ArchiveDriver, pubsubTopic: PubsubTopic, message: WakuMessage): Future[Result[void, string]] = let digest = waku_archive.computeDigest(message) + msgHash = computeMessageHash(pubsubTopic, message) receivedTime = if message.timestamp > 0: message.timestamp else: getNanosecondTime(getTime().toUnixFloat()) - store.put(pubsubTopic, message, digest, receivedTime) + store.put(pubsubTopic, message, digest, msgHash, receivedTime) # Creates a new WakuNode proc testWakuNode(): WakuNode = diff --git a/waku/node/waku_node.nim b/waku/node/waku_node.nim index e09d1a27a0..82f72f8e5a 100644 --- a/waku/node/waku_node.nim +++ b/waku/node/waku_node.nim @@ -210,7 +210,7 @@ proc registerRelayDefaultHandler(node: WakuNode, topic: PubsubTopic) = trace "waku.relay received", peerId=node.peerId, pubsubTopic=topic, - hash=topic.digest(msg).to0xHex(), + hash=topic.computeMessageHash(msg).to0xHex(), receivedTime=getNowInNanosecondTime(), payloadSizeBytes=msg.payload.len @@ -339,7 +339,7 @@ proc publish*( trace "waku.relay published", peerId=node.peerId, pubsubTopic=pubsubTopic, - hash=pubsubTopic.digest(message).to0xHex(), + hash=pubsubTopic.computeMessageHash(message).to0xHex(), publishTime=getNowInNanosecondTime() proc startRelay*(node: WakuNode) {.async.} = diff --git a/waku/waku_archive/archive.nim b/waku/waku_archive/archive.nim index b6e8aad3fa..fef44efb02 100644 --- a/waku/waku_archive/archive.nim +++ b/waku/waku_archive/archive.nim @@ -18,6 +18,7 @@ import ./retention_policy/retention_policy_capacity, ./retention_policy/retention_policy_time, ../waku_core, + ../waku_core/message/digest, ./common, ./archive_metrics @@ -101,12 +102,13 @@ proc handleMessage*(w: WakuArchive, block: let msgDigest = computeDigest(msg) + msgHash = computeMessageHash(pubsubTopic, msg) msgReceivedTime = if msg.timestamp > 0: msg.timestamp else: getNanosecondTime(getTime().toUnixFloat()) - trace "handling message", pubsubTopic=pubsubTopic, contentTopic=msg.contentTopic, timestamp=msg.timestamp, digest=msgDigest + trace "handling message", pubsubTopic=pubsubTopic, contentTopic=msg.contentTopic, timestamp=msg.timestamp, digest=msgDigest, messageHash=msgHash - let putRes = await w.driver.put(pubsubTopic, msg, msgDigest, msgReceivedTime) + let putRes = await w.driver.put(pubsubTopic, msg, msgDigest, msgHash, msgReceivedTime) if putRes.isErr(): error "failed to insert message", err=putRes.error waku_archive_errors.inc(labelValues = [insertFailure]) diff --git a/waku/waku_archive/driver.nim b/waku/waku_archive/driver.nim index 64c6b3318a..38cffb372f 100644 --- a/waku/waku_archive/driver.nim +++ b/waku/waku_archive/driver.nim @@ -26,6 +26,7 @@ method put*(driver: ArchiveDriver, pubsubTopic: PubsubTopic, message: WakuMessage, digest: MessageDigest, + messageHash: WakuMessageHash, receivedTime: Timestamp): Future[ArchiveDriverResult[void]] {.base, async.} = discard diff --git a/waku/waku_archive/driver/postgres_driver/postgres_driver.nim b/waku/waku_archive/driver/postgres_driver/postgres_driver.nim index 9ecc1bd3b9..e41f85b77c 100644 --- a/waku/waku_archive/driver/postgres_driver/postgres_driver.nim +++ b/waku/waku_archive/driver/postgres_driver/postgres_driver.nim @@ -35,15 +35,16 @@ proc createTableQuery(): string = " version INTEGER NOT NULL," & " timestamp BIGINT NOT NULL," & " id VARCHAR NOT NULL," & + " messageHash VARCHAR NOT NULL," & " storedAt BIGINT NOT NULL," & - " CONSTRAINT messageIndex PRIMARY KEY (storedAt, id, pubsubTopic)" & + " CONSTRAINT messageIndex PRIMARY KEY (messageHash)" & ");" const InsertRowStmtName = "InsertRow" const InsertRowStmtDefinition = # TODO: get the sql queries from a file - """INSERT INTO messages (id, storedAt, contentTopic, payload, pubsubTopic, - version, timestamp) VALUES ($1, $2, $3, $4, $5, $6, $7);""" + """INSERT INTO messages (id, messageHash, storedAt, contentTopic, payload, pubsubTopic, + version, timestamp) VALUES ($1, $2, $3, $4, $5, $6, $7, $8);""" const SelectNoCursorAscStmtName = "SelectWithoutCursorAsc" const SelectNoCursorAscStmtDef = @@ -186,10 +187,12 @@ method put*(s: PostgresDriver, pubsubTopic: PubsubTopic, message: WakuMessage, digest: MessageDigest, + messageHash: WakuMessageHash, receivedTime: Timestamp): Future[ArchiveDriverResult[void]] {.async.} = let digest = toHex(digest.data) + let messageHash = toHex(messageHash) let rxTime = $receivedTime let contentTopic = message.contentTopic let payload = toHex(message.payload) @@ -199,6 +202,7 @@ method put*(s: PostgresDriver, return await s.writeConnPool.runStmt(InsertRowStmtName, InsertRowStmtDefinition, @[digest, + messageHash, rxTime, contentTopic, payload, @@ -206,6 +210,7 @@ method put*(s: PostgresDriver, version, timestamp], @[int32(digest.len), + int32(messageHash.len), int32(rxTime.len), int32(contentTopic.len), int32(payload.len), @@ -213,7 +218,7 @@ method put*(s: PostgresDriver, int32(version.len), int32(timestamp.len)], @[int32(0), int32(0), int32(0), int32(0), - int32(0), int32(0), int32(0)]) + int32(0), int32(0), int32(0), int32(0)]) method getAllMessages*(s: PostgresDriver): Future[ArchiveDriverResult[seq[ArchiveRow]]] {.async.} = diff --git a/waku/waku_archive/driver/queue_driver/queue_driver.nim b/waku/waku_archive/driver/queue_driver/queue_driver.nim index cce7d895bf..948521ccbb 100644 --- a/waku/waku_archive/driver/queue_driver/queue_driver.nim +++ b/waku/waku_archive/driver/queue_driver/queue_driver.nim @@ -228,6 +228,7 @@ method put*(driver: QueueDriver, pubsubTopic: PubsubTopic, message: WakuMessage, digest: MessageDigest, + messageHash: WakuMessageHash, receivedTime: Timestamp): Future[ArchiveDriverResult[void]] {.async.} = let index = Index(pubsubTopic: pubsubTopic, senderTime: message.timestamp, receiverTime: receivedTime, digest: digest) diff --git a/waku/waku_archive/driver/sqlite_driver/migrations.nim b/waku/waku_archive/driver/sqlite_driver/migrations.nim index 0aa925fda1..4f7fea7bde 100644 --- a/waku/waku_archive/driver/sqlite_driver/migrations.nim +++ b/waku/waku_archive/driver/sqlite_driver/migrations.nim @@ -14,7 +14,7 @@ logScope: topics = "waku archive migration" -const SchemaVersion* = 7 # increase this when there is an update in the database schema +const SchemaVersion* = 8 # increase this when there is an update in the database schema template projectRoot: string = currentSourcePath.rsplit(DirSep, 1)[0] / ".." / ".." / ".." / ".." const MessageStoreMigrationPath: string = projectRoot / "migrations" / "message_store" diff --git a/waku/waku_archive/driver/sqlite_driver/queries.nim b/waku/waku_archive/driver/sqlite_driver/queries.nim index 27ab4de618..e03246c5eb 100644 --- a/waku/waku_archive/driver/sqlite_driver/queries.nim +++ b/waku/waku_archive/driver/sqlite_driver/queries.nim @@ -71,8 +71,9 @@ proc createTableQuery(table: string): SqlQueryStr = " version INTEGER NOT NULL," & " timestamp INTEGER NOT NULL," & " id BLOB," & + " messageHash BLOB," & " storedAt INTEGER NOT NULL," & - " CONSTRAINT messageIndex PRIMARY KEY (storedAt, id, pubsubTopic)" & + " CONSTRAINT messageIndex PRIMARY KEY (messageHash)" & ") WITHOUT ROWID;" proc createTable*(db: SqliteDatabase): DatabaseResult[void] = @@ -102,17 +103,16 @@ proc createHistoryQueryIndex*(db: SqliteDatabase): DatabaseResult[void] = ## Insert message -type InsertMessageParams* = (seq[byte], Timestamp, seq[byte], seq[byte], seq[byte], int64, Timestamp) +type InsertMessageParams* = (seq[byte], seq[byte], Timestamp, seq[byte], seq[byte], seq[byte], int64, Timestamp) proc insertMessageQuery(table: string): SqlQueryStr = - "INSERT INTO " & table & "(id, storedAt, contentTopic, payload, pubsubTopic, version, timestamp)" & - " VALUES (?, ?, ?, ?, ?, ?, ?);" + "INSERT INTO " & table & "(id, messageHash, storedAt, contentTopic, payload, pubsubTopic, version, timestamp)" & + " VALUES (?, ?, ?, ?, ?, ?, ?, ?);" proc prepareInsertMessageStmt*(db: SqliteDatabase): SqliteStmt[InsertMessageParams, void] = let query = insertMessageQuery(DbTable) db.prepareStmt(query, InsertMessageParams, void).expect("this is a valid statement") - ## Count table messages proc countMessagesQuery(table: string): SqlQueryStr = diff --git a/waku/waku_archive/driver/sqlite_driver/sqlite_driver.nim b/waku/waku_archive/driver/sqlite_driver/sqlite_driver.nim index 53da379b1a..a6039d4ece 100644 --- a/waku/waku_archive/driver/sqlite_driver/sqlite_driver.nim +++ b/waku/waku_archive/driver/sqlite_driver/sqlite_driver.nim @@ -13,6 +13,7 @@ import import ../../../common/databases/db_sqlite, ../../../waku_core, + ../../../waku_core/message/digest, ../../common, ../../driver, ./cursor, @@ -61,11 +62,13 @@ method put*(s: SqliteDriver, pubsubTopic: PubsubTopic, message: WakuMessage, digest: MessageDigest, + messageHash: WakuMessageHash, receivedTime: Timestamp): Future[ArchiveDriverResult[void]] {.async.} = ## Inserts a message into the store let res = s.insertStmt.exec(( @(digest.data), # id + @(messageHash), # messageHash receivedTime, # storedAt toBytes(message.contentTopic), # contentTopic message.payload, # payload diff --git a/waku/waku_core/message/digest.nim b/waku/waku_core/message/digest.nim index 9db0542e18..953be4f880 100644 --- a/waku/waku_core/message/digest.nim +++ b/waku/waku_core/message/digest.nim @@ -17,17 +17,16 @@ import ## 14/WAKU2-MESSAGE: Deterministic message hashing ## https://rfc.vac.dev/spec/14/#deterministic-message-hashing -type WakuMessageDigest* = array[32, byte] +type WakuMessageHash* = array[32, byte] -converter toBytesArray*(digest: MDigest[256]): WakuMessageDigest = +converter toBytesArray*(digest: MDigest[256]): WakuMessageHash = digest.data converter toBytes*(digest: MDigest[256]): seq[byte] = toSeq(digest.data) - -proc digest*(pubsubTopic: PubsubTopic, msg: WakuMessage): WakuMessageDigest = +proc computeMessageHash*(pubsubTopic: PubsubTopic, msg: WakuMessage): WakuMessageHash = var ctx: sha256 ctx.init() defer: ctx.clear() diff --git a/waku/waku_filter_v2/protocol.nim b/waku/waku_filter_v2/protocol.nim index 5a505960b2..3af3943365 100644 --- a/waku/waku_filter_v2/protocol.nim +++ b/waku/waku_filter_v2/protocol.nim @@ -163,7 +163,7 @@ proc pushToPeer(wf: WakuFilter, peer: PeerId, buffer: seq[byte]) {.async.} = await conn.get().writeLp(buffer) proc pushToPeers(wf: WakuFilter, peers: seq[PeerId], messagePush: MessagePush) {.async.} = - debug "pushing message to subscribed peers", pubsubTopic=messagePush.pubsubTopic, contentTopic=messagePush.wakuMessage.contentTopic, peers=peers, hash=messagePush.pubsubTopic.digest(messagePush.wakuMessage).to0xHex() + debug "pushing message to subscribed peers", pubsubTopic=messagePush.pubsubTopic, contentTopic=messagePush.wakuMessage.contentTopic, peers=peers, hash=messagePush.pubsubTopic.computeMessageHash(messagePush.wakuMessage).to0xHex() let bufferToPublish = messagePush.encode().buffer @@ -210,10 +210,10 @@ proc handleMessage*(wf: WakuFilter, pubsubTopic: PubsubTopic, message: WakuMessa wakuMessage: message) if not await wf.pushToPeers(subscribedPeers, messagePush).withTimeout(MessagePushTimeout): - debug "timed out pushing message to peers", pubsubTopic=pubsubTopic, contentTopic=message.contentTopic, hash=pubsubTopic.digest(message).to0xHex() + debug "timed out pushing message to peers", pubsubTopic=pubsubTopic, contentTopic=message.contentTopic, hash=pubsubTopic.computeMessageHash(message).to0xHex() waku_filter_errors.inc(labelValues = [pushTimeoutFailure]) else: - debug "pushed message succesfully to all subscribers", pubsubTopic=pubsubTopic, contentTopic=message.contentTopic, hash=pubsubTopic.digest(message).to0xHex() + debug "pushed message succesfully to all subscribers", pubsubTopic=pubsubTopic, contentTopic=message.contentTopic, hash=pubsubTopic.computeMessageHash(message).to0xHex() let diff --git a/waku/waku_store/client.nim b/waku/waku_store/client.nim index 74f51fe7a2..735c01cf57 100644 --- a/waku/waku_store/client.nim +++ b/waku/waku_store/client.nim @@ -21,6 +21,7 @@ import when defined(waku_exp_store_resume): import std/[sequtils, times] import ../waku_archive + import ../waku_core/message/digest logScope: @@ -154,10 +155,11 @@ when defined(waku_exp_store_resume): proc put(store: ArchiveDriver, pubsubTopic: PubsubTopic, message: WakuMessage): Result[void, string] = let digest = waku_archive.computeDigest(message) + messageHash = computeMessageHash(pubsubTopic, message) receivedTime = if message.timestamp > 0: message.timestamp else: getNanosecondTime(getTime().toUnixFloat()) - store.put(pubsubTopic, message, digest, receivedTime) + store.put(pubsubTopic, message, digest, messageHash, receivedTime) proc resume*(w: WakuStoreClient, peerList = none(seq[RemotePeerInfo]), From 110de90ff69250791a82a07fe2c5cf0f81c7abe3 Mon Sep 17 00:00:00 2001 From: Prem Chaitanya Prathi Date: Fri, 24 Nov 2023 14:43:20 +0530 Subject: [PATCH 135/274] fix: admin REST API to be enabled only if config is set (#2218) --- apps/wakunode2/app.nim | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/wakunode2/app.nim b/apps/wakunode2/app.nim index 85e8a3b4d1..d5dc71d87a 100644 --- a/apps/wakunode2/app.nim +++ b/apps/wakunode2/app.nim @@ -674,9 +674,9 @@ proc startRestServer(app: App, address: ValidIpAddress, port: Port, conf: WakuNo return defaultResponse() let server = ? newRestHttpServer(address, port, requestErrorHandler = requestErrorHandler) - ## Admin REST API - installAdminApiHandlers(server.router, app.node) + if conf.restAdmin: + installAdminApiHandlers(server.router, app.node) ## Debug REST API installDebugApiHandlers(server.router, app.node) From a1ed517f9c45b68747cb1982c2f8b364dc7758a7 Mon Sep 17 00:00:00 2001 From: Abhimanyu Date: Fri, 24 Nov 2023 15:43:47 +0100 Subject: [PATCH 136/274] fix: extended Postgres code to support retention policy + refactoring (#2244) * updated Postgres retention policy code + refactoring * Update waku/waku_archive/driver/postgres_driver/postgres_driver.nim Co-authored-by: Simon-Pierre Vivier * updated code review changes * data unit fixed, processing everything in bytes now --------- Co-authored-by: Simon-Pierre Vivier --- tests/waku_archive/test_retention_policy.nim | 10 +++---- waku/common/databases/db_sqlite.nim | 14 ++++++++++ waku/waku_archive/driver.nim | 3 +++ .../postgres_driver/postgres_driver.nim | 9 +++++++ .../driver/queue_driver/queue_driver.nim | 4 +++ .../driver/sqlite_driver/sqlite_driver.nim | 4 +++ .../waku_archive/retention_policy/builder.nim | 15 ++++++----- .../retention_policy_size.nim | 27 +++++++------------ 8 files changed, 56 insertions(+), 30 deletions(-) diff --git a/tests/waku_archive/test_retention_policy.nim b/tests/waku_archive/test_retention_policy.nim index fbbcca4218..ff039adef9 100644 --- a/tests/waku_archive/test_retention_policy.nim +++ b/tests/waku_archive/test_retention_policy.nim @@ -62,8 +62,8 @@ suite "Waku Archive - Retention policy": test "size retention policy - windowed message deletion": ## Given let - # in megabytes - sizeLimit:float = 0.05 + # in bytes + sizeLimit:int64 = 52428 excess = 325 let driver = newTestArchiveDriver() @@ -92,9 +92,7 @@ suite "Waku Archive - Retention policy": ## Then # calculate the current database size - let pageSize = (waitFor driver.getPagesSize()).tryGet() - let pageCount = (waitFor driver.getPagesCount()).tryGet() - let sizeDB = float(pageCount * pageSize) / (1024.0 * 1024.0) + let sizeDB = int64((waitFor driver.getDatabaseSize()).tryGet()) # NOTE: since vacuumin is done manually, this needs to be revisited if vacuuming done automatically @@ -105,7 +103,7 @@ suite "Waku Archive - Retention policy": require (sizeDB >= sizeLimit) require (waitFor retentionPolicy.execute(driver)).isOk() - # get the number or rows from DB + # get the number or rows from database let rowCountAfterDeletion = (waitFor driver.getMessagesCount()).tryGet() check: diff --git a/waku/common/databases/db_sqlite.nim b/waku/common/databases/db_sqlite.nim index 837cf3ab86..f30fbdbd61 100644 --- a/waku/common/databases/db_sqlite.nim +++ b/waku/common/databases/db_sqlite.nim @@ -295,6 +295,20 @@ proc getPageCount*(db: SqliteDatabase): DatabaseResult[int64] = return ok(count) +proc getDatabaseSize*(db: SqliteDatabase): DatabaseResult[int64] = + # get the database page size in bytes + var pageSize: int64 = ?db.getPageSize() + + if pageSize == 0: + return err("failed to get page size ") + + # get the database page count + let pageCount = ?db.getPageCount() + + let databaseSize = (pageSize * pageCount) + + return ok(databaseSize) + proc gatherSqlitePageStats*(db: SqliteDatabase): DatabaseResult[(int64, int64, int64)] = let diff --git a/waku/waku_archive/driver.nim b/waku/waku_archive/driver.nim index 38cffb372f..d6cccd6721 100644 --- a/waku/waku_archive/driver.nim +++ b/waku/waku_archive/driver.nim @@ -52,6 +52,9 @@ method getPagesCount*(driver: ArchiveDriver): method getPagesSize*(driver: ArchiveDriver): Future[ArchiveDriverResult[int64]] {.base, async.} = discard +method getDatabaseSize*(driver: ArchiveDriver): + Future[ArchiveDriverResult[int64]] {.base, async.} = discard + method performVacuum*(driver: ArchiveDriver): Future[ArchiveDriverResult[void]] {.base, async.} = discard diff --git a/waku/waku_archive/driver/postgres_driver/postgres_driver.nim b/waku/waku_archive/driver/postgres_driver/postgres_driver.nim index e41f85b77c..11f7793816 100644 --- a/waku/waku_archive/driver/postgres_driver/postgres_driver.nim +++ b/waku/waku_archive/driver/postgres_driver/postgres_driver.nim @@ -434,6 +434,15 @@ proc getInt(s: PostgresDriver, return ok(retInt) +method getDatabaseSize*(s: PostgresDriver): + Future[ArchiveDriverResult[int64]] {.async.} = + + let intRes = (await s.getInt("SELECT pg_database_size(current_database())")).valueOr: + return err("error in getDatabaseSize: " & error) + + let databaseSize: int64 = int64(intRes) + return ok(databaseSize) + method getMessagesCount*(s: PostgresDriver): Future[ArchiveDriverResult[int64]] {.async.} = diff --git a/waku/waku_archive/driver/queue_driver/queue_driver.nim b/waku/waku_archive/driver/queue_driver/queue_driver.nim index 948521ccbb..9fd266e6d8 100644 --- a/waku/waku_archive/driver/queue_driver/queue_driver.nim +++ b/waku/waku_archive/driver/queue_driver/queue_driver.nim @@ -289,6 +289,10 @@ method getPagesSize*(driver: QueueDriver): Future[ArchiveDriverResult[int64]] {.async} = return ok(int64(driver.len())) +method getDatabasesSize*(driver: QueueDriver): + Future[ArchiveDriverResult[int64]] {.async} = + return ok(int64(driver.len())) + method performVacuum*(driver: QueueDriver): Future[ArchiveDriverResult[void]] {.async.} = return err("interface method not implemented") diff --git a/waku/waku_archive/driver/sqlite_driver/sqlite_driver.nim b/waku/waku_archive/driver/sqlite_driver/sqlite_driver.nim index a6039d4ece..1d0cbc5bc5 100644 --- a/waku/waku_archive/driver/sqlite_driver/sqlite_driver.nim +++ b/waku/waku_archive/driver/sqlite_driver/sqlite_driver.nim @@ -120,6 +120,10 @@ method getPagesSize*(s: SqliteDriver): Future[ArchiveDriverResult[int64]] {.async.} = return s.db.getPageSize() +method getDatabaseSize*(s: SqliteDriver): + Future[ArchiveDriverResult[int64]] {.async.} = + return s.db.getDatabaseSize() + method performVacuum*(s: SqliteDriver): Future[ArchiveDriverResult[void]] {.async.} = return s.db.performSqliteVacuum() diff --git a/waku/waku_archive/retention_policy/builder.nim b/waku/waku_archive/retention_policy/builder.nim index 2c4b3cf12a..0588eb4bbc 100644 --- a/waku/waku_archive/retention_policy/builder.nim +++ b/waku/waku_archive/retention_policy/builder.nim @@ -56,24 +56,27 @@ proc new*(T: type RetentionPolicy, var retentionSize: string retentionSize = policyArgs - # captures the size unit such as Gb or Mb + # captures the size unit such as GB or MB let sizeUnit = retentionSize.substr(retentionSize.len-2) # captures the string type number data of the size provided let sizeQuantityStr = retentionSize.substr(0,retentionSize.len-3) # to hold the numeric value data of size - var sizeQuantity: float + var inptSizeQuantity: float + var sizeQuantity: int64 if sizeUnit in ["gb", "Gb", "GB", "gB"]: # parse the actual value into integer type var try: - sizeQuantity = parseFloat(sizeQuantityStr) + inptSizeQuantity = parseFloat(sizeQuantityStr) except ValueError: return err("invalid size retention policy argument: " & getCurrentExceptionMsg()) - # Gb data is converted into Mb for uniform processing - sizeQuantity = sizeQuantity * 1024 + # GB data is converted into bytes for uniform processing + sizeQuantity = int64(inptSizeQuantity * 1024.0 * 1024.0 * 1024.0) elif sizeUnit in ["mb", "Mb", "MB", "mB"]: try: - sizeQuantity = parseFloat(sizeQuantityStr) + inptSizeQuantity = parseFloat(sizeQuantityStr) + # MB data is converted into bytes for uniform processing + sizeQuantity = int64(inptSizeQuantity * 1024.0 * 1024.0) except ValueError: return err("invalid size retention policy argument") else: diff --git a/waku/waku_archive/retention_policy/retention_policy_size.nim b/waku/waku_archive/retention_policy/retention_policy_size.nim index 8d645083bd..8b512230b2 100644 --- a/waku/waku_archive/retention_policy/retention_policy_size.nim +++ b/waku/waku_archive/retention_policy/retention_policy_size.nim @@ -16,22 +16,22 @@ import logScope: topics = "waku archive retention_policy" -# default size is 30 Gb -const DefaultRetentionSize*: float = 30_720 +# default size is 30 GiB or 32212254720.0 in bytes +const DefaultRetentionSize*: int64 = 32212254720 # to remove 20% of the outdated data from database const DeleteLimit = 0.80 type # SizeRetentionPolicy implements auto delete as follows: - # - sizeLimit is the size in megabytes (Mbs) the database can grow upto + # - sizeLimit is the size in bytes the database can grow upto # to reduce the size of the databases, remove the rows/number-of-messages # DeleteLimit is the total number of messages to delete beyond this limit # when the database size crosses the sizeLimit, then only a fraction of messages are kept, # rest of the outdated message are deleted using deleteOldestMessagesNotWithinLimit(), # upon deletion process the fragmented space is retrieve back using Vacuum process. SizeRetentionPolicy* = ref object of RetentionPolicy - sizeLimit: float + sizeLimit: int64 proc init*(T: type SizeRetentionPolicy, size=DefaultRetentionSize): T = SizeRetentionPolicy( @@ -42,21 +42,12 @@ method execute*(p: SizeRetentionPolicy, driver: ArchiveDriver): Future[RetentionPolicyResult[void]] {.async.} = ## when db size overshoots the database limit, shread 20% of outdated messages + # get size of database + let dbSize = (await driver.getDatabaseSize()).valueOr: + return err("failed to get database size: " & $error) - # get page size of database - let pageSizeRes = await driver.getPagesSize() - let pageSize: int64 = int64(pageSizeRes.valueOr(0) div 1024) - - if pageSize == 0: - return err("failed to get Page size: " & pageSizeRes.error) - - # to get the size of the database, pageCount and PageSize is required - # get page count in "messages" database - let pageCount = (await driver.getPagesCount()).valueOr: - return err("failed to get Pages count: " & $error) - - # database size in megabytes (Mb) - let totalSizeOfDB: float = float(pageSize * pageCount)/1024.0 + # database size in bytes + let totalSizeOfDB: int64 = int64(dbSize) if totalSizeOfDB < p.sizeLimit: return ok() From b31c182325b380c1cbf2f0f6356736e9f7310996 Mon Sep 17 00:00:00 2001 From: Ivan FB <128452529+Ivansete-status@users.noreply.github.com> Date: Fri, 24 Nov 2023 16:21:22 +0100 Subject: [PATCH 137/274] chore: postres driver allow setting the max number of connection from a parameter (#2246) * postres driver: allow setting the max number of connections from a parameter --- apps/wakunode2/app.nim | 1 + apps/wakunode2/external_config.nim | 5 +++++ waku/waku_archive/driver/builder.nim | 8 ++++++-- .../driver/postgres_driver/postgres_driver.nim | 11 +++++++---- 4 files changed, 19 insertions(+), 6 deletions(-) diff --git a/apps/wakunode2/app.nim b/apps/wakunode2/app.nim index d5dc71d87a..3a2d156bf0 100644 --- a/apps/wakunode2/app.nim +++ b/apps/wakunode2/app.nim @@ -491,6 +491,7 @@ proc setupProtocols(node: WakuNode, let archiveDriverRes = ArchiveDriver.new(conf.storeMessageDbUrl, conf.storeMessageDbVacuum, conf.storeMessageDbMigration, + conf.storeMaxNumDbConnections, onErrAction) if archiveDriverRes.isErr(): return err("failed to setup archive driver: " & archiveDriverRes.error) diff --git a/apps/wakunode2/external_config.nim b/apps/wakunode2/external_config.nim index 384cb1922e..5598077d9d 100644 --- a/apps/wakunode2/external_config.nim +++ b/apps/wakunode2/external_config.nim @@ -273,6 +273,11 @@ type defaultValue: true, name: "store-message-db-migration" }: bool + storeMaxNumDbConnections* {. + desc: "Maximum number of simultaneous Postgres connections.", + defaultValue: 50, + name: "store-max-num-db-connections" }: int + ## Filter config filter* {. diff --git a/waku/waku_archive/driver/builder.nim b/waku/waku_archive/driver/builder.nim index 7fdd05baa0..976769c875 100644 --- a/waku/waku_archive/driver/builder.nim +++ b/waku/waku_archive/driver/builder.nim @@ -28,12 +28,14 @@ proc new*(T: type ArchiveDriver, url: string, vacuum: bool, migrate: bool, + maxNumConn: int, onErrAction: OnErrHandler): Result[T, string] = ## url - string that defines the database ## vacuum - if true, a cleanup operation will be applied to the database ## migrate - if true, the database schema will be updated - ## onErrAction - called if, e.g., the connection with db got lost forever + ## maxNumConn - defines the maximum number of connections to handle simultaneously (Postgres) + ## onErrAction - called if, e.g., the connection with db got lost let dbUrlValidationRes = dburl.validateDbUrl(url) if dbUrlValidationRes.isErr(): @@ -81,7 +83,9 @@ proc new*(T: type ArchiveDriver, of "postgres": when defined(postgres): - let res = PostgresDriver.new(dbUrl = url, onErrAction = onErrAction) + let res = PostgresDriver.new(dbUrl = url, + maxConnections = maxNumConn, + onErrAction = onErrAction) if res.isErr(): return err("failed to init postgres archive driver: " & res.error) diff --git a/waku/waku_archive/driver/postgres_driver/postgres_driver.nim b/waku/waku_archive/driver/postgres_driver/postgres_driver.nim index 11f7793816..351ed1a2be 100644 --- a/waku/waku_archive/driver/postgres_driver/postgres_driver.nim +++ b/waku/waku_archive/driver/postgres_driver/postgres_driver.nim @@ -84,18 +84,21 @@ const SelectWithCursorAscStmtDef = storedAt <= $6 ORDER BY storedAt ASC LIMIT $7;""" -const MaxNumConns = 50 #TODO: we may need to set that from app args (maybe?) +const DefaultMaxNumConns = 50 proc new*(T: type PostgresDriver, dbUrl: string, - maxConnections: int = MaxNumConns, + maxConnections = DefaultMaxNumConns, onErrAction: OnErrHandler = nil): ArchiveDriverResult[T] = - let readConnPool = PgAsyncPool.new(dbUrl, maxConnections).valueOr: + ## Very simplistic split of max connections + let maxNumConnOnEachPool = int(maxConnections / 2) + + let readConnPool = PgAsyncPool.new(dbUrl, maxNumConnOnEachPool).valueOr: return err("error creating read conn pool PgAsyncPool") - let writeConnPool = PgAsyncPool.new(dbUrl, maxConnections).valueOr: + let writeConnPool = PgAsyncPool.new(dbUrl, maxNumConnOnEachPool).valueOr: return err("error creating write conn pool PgAsyncPool") if not isNil(onErrAction): From c301e880c83cfc89771e5371d34373f3a278f230 Mon Sep 17 00:00:00 2001 From: Simon-Pierre Vivier Date: Mon, 27 Nov 2023 08:08:58 -0500 Subject: [PATCH 138/274] chore: refactoring peer storage (#2243) --- tests/test_peer_storage.nim | 67 ++++--- waku/node/peer_manager/peer_manager.nim | 56 +++--- .../peer_manager/peer_store/peer_storage.nim | 18 +- .../peer_store/waku_peer_storage.nim | 163 +++++++++--------- 4 files changed, 156 insertions(+), 148 deletions(-) diff --git a/tests/test_peer_storage.nim b/tests/test_peer_storage.nim index f6d268b46f..a9150b6ab0 100644 --- a/tests/test_peer_storage.nim +++ b/tests/test_peer_storage.nim @@ -1,12 +1,15 @@ {.used.} import + std/options, testutils/unittests, + eth/p2p/discoveryv5/enr, libp2p/crypto/crypto import ../../waku/common/databases/db_sqlite, ../../waku/node/peer_manager/peer_manager, ../../waku/node/peer_manager/peer_store/waku_peer_storage, + ../../waku/waku_enr, ./testlib/wakucore @@ -19,14 +22,22 @@ suite "Peer Storage": # Test Peer peerLoc = MultiAddress.init("/ip4/127.0.0.1/tcp/0").tryGet() - peerKey = generateEcdsaKey() + peerKey = generateSecp256k1Key() peer = PeerInfo.new(peerKey, @[peerLoc]) peerProto = "/waku/2/default-waku/codec" connectedness = Connectedness.CanConnect disconn = 999999 - stored = RemotePeerInfo( + topics = @["/waku/2/rs/2/0", "/waku/2/rs/2/1"] + + # Create ENR + var enrBuilder = EnrBuilder.init(peerKey) + enrBuilder.withShardedTopics(topics).expect("Valid topics") + let record = enrBuilder.build().expect("Valid record") + + let stored = RemotePeerInfo( peerId: peer.peerId, addrs: @[peerLoc], + enr: some(record), protocols: @[peerProto], publicKey: peerKey.getPublicKey().tryGet(), connectedness: connectedness, @@ -36,72 +47,52 @@ suite "Peer Storage": # Test insert and retrieve - require storage.put(peer.peerId, stored, connectedness, disconn).isOk + require storage.put(stored).isOk var responseCount = 0 - # Fetched variables from callback - var resPeerId: PeerId + # Fetched variable from callback var resStoredInfo: RemotePeerInfo - var resConnectedness: Connectedness - var resDisconnect: int64 - proc data(peerId: PeerID, storedInfo: RemotePeerInfo, - connectedness: Connectedness, disconnectTime: int64) {.raises: [Defect].} = + proc data(storedInfo: RemotePeerInfo) = responseCount += 1 - - # Note: cannot use `check` within `{.raises: [Defect].}` block - # @TODO: /Nim/lib/pure/unittest.nim(577, 16) Error: can raise an unlisted exception: Exception - # These flags are checked outside this block. - resPeerId = peerId resStoredInfo = storedInfo - resConnectedness = connectedness - resDisconnect = disconnectTime let res = storage.getAll(data) check: res.isErr == false responseCount == 1 - resPeerId == peer.peerId resStoredInfo.peerId == peer.peerId resStoredInfo.addrs == @[peerLoc] resStoredInfo.protocols == @[peerProto] resStoredInfo.publicKey == peerKey.getPublicKey().tryGet() - # TODO: For compatibility, we don't store connectedness and disconnectTime - #resStoredInfo.connectedness == connectedness - #resStoredInfo.disconnectTime == disconn - resConnectedness == Connectedness.CanConnect - resDisconnect == disconn + resStoredInfo.connectedness == connectedness + resStoredInfo.disconnectTime == disconn + + assert resStoredInfo.enr.isSome(), "The ENR info wasn't properly stored" + check: resStoredInfo.enr.get() == record # Test replace and retrieve (update an existing entry) - require storage.put(peer.peerId, stored, Connectedness.CannotConnect, disconn + 10).isOk + stored.connectedness = CannotConnect + stored.disconnectTime = disconn + 10 + stored.enr = none(Record) + require storage.put(stored).isOk responseCount = 0 - proc replacedData(peerId: PeerID, storedInfo: RemotePeerInfo, - connectedness: Connectedness, disconnectTime: int64) {.raises: [Defect].} = + proc replacedData(storedInfo: RemotePeerInfo) = responseCount += 1 - - # Note: cannot use `check` within `{.raises: [Defect].}` block - # @TODO: /Nim/lib/pure/unittest.nim(577, 16) Error: can raise an unlisted exception: Exception - # These flags are checked outside this block. - resPeerId = peerId resStoredInfo = storedInfo - resConnectedness = connectedness - resDisconnect = disconnectTime let repRes = storage.getAll(replacedData) check: repRes.isErr == false responseCount == 1 - resPeerId == peer.peerId resStoredInfo.peerId == peer.peerId resStoredInfo.addrs == @[peerLoc] resStoredInfo.protocols == @[peerProto] resStoredInfo.publicKey == peerKey.getPublicKey().tryGet() - # TODO: For compatibility, we don't store connectedness and disconnectTime - #resStoredInfo.connectedness == connectedness - #resStoredInfo.disconnectTime == disconn - resConnectedness == Connectedness.CannotConnect - resDisconnect == disconn + 10 + resStoredInfo.connectedness == Connectedness.CannotConnect + resStoredInfo.disconnectTime == disconn + 10 + resStoredInfo.enr.isNone() diff --git a/waku/node/peer_manager/peer_manager.nim b/waku/node/peer_manager/peer_manager.nim index 9bfd892cda..69db53eed5 100644 --- a/waku/node/peer_manager/peer_manager.nim +++ b/waku/node/peer_manager/peer_manager.nim @@ -101,19 +101,15 @@ proc calculateBackoff(initialBackoffInSec: int, # Helper functions # #################### -proc insertOrReplace(ps: PeerStorage, - peerId: PeerID, - remotePeerInfo: RemotePeerInfo, - connectedness: Connectedness, - disconnectTime: int64 = 0) = - # Insert peer entry into persistent storage, or replace existing entry with updated info - let res = ps.put(peerId, remotePeerInfo, connectedness, disconnectTime) - if res.isErr: - warn "failed to store peers", err = res.error +proc insertOrReplace(ps: PeerStorage, remotePeerInfo: RemotePeerInfo) = + ## Insert peer entry into persistent storage, or replace existing entry with updated info + ps.put(remotePeerInfo).isOkOr: + warn "failed to store peers", err = error waku_peers_errors.inc(labelValues = ["storage_failure"]) + return proc addPeer*(pm: PeerManager, remotePeerInfo: RemotePeerInfo, origin = UnknownOrigin) = - # Adds peer to manager for the specified protocol + ## Adds peer to manager for the specified protocol if remotePeerInfo.peerId == pm.switch.peerInfo.peerId: # Do not attempt to manage our unmanageable self @@ -140,7 +136,9 @@ proc addPeer*(pm: PeerManager, remotePeerInfo: RemotePeerInfo, origin = UnknownO # Add peer to storage. Entry will subsequently be updated with connectedness information if not pm.storage.isNil: - pm.storage.insertOrReplace(remotePeerInfo.peerId, remotePeerInfo, NotConnected) + remotePeerInfo.connectedness = NotConnected + + pm.storage.insertOrReplace(remotePeerInfo) # Connects to a given node. Note that this function uses `connect` and # does not provide a protocol. Streams for relay (gossipsub) are created @@ -231,16 +229,26 @@ proc dialPeer(pm: PeerManager, return none(Connection) proc loadFromStorage(pm: PeerManager) = + ## Load peers from storage, if available + debug "loading peers from storage" - # Load peers from storage, if available + var amount = 0 - proc onData(peerId: PeerID, remotePeerInfo: RemotePeerInfo, connectedness: Connectedness, disconnectTime: int64) = - trace "loading peer", peerId=peerId, connectedness=connectedness - if peerId == pm.switch.peerInfo.peerId: + proc onData(remotePeerInfo: RemotePeerInfo) = + let peerId = remotePeerInfo.peerId + + if pm.switch.peerInfo.peerId == peerId: # Do not manage self return + trace "loading peer", + peerId = peerId, + address = remotePeerInfo.addrs, + protocols = remotePeerInfo.protocols, + agent = remotePeerInfo.agent, + version = remotePeerInfo.protoVersion + # nim-libp2p books pm.peerStore[AddressBook][peerId] = remotePeerInfo.addrs pm.peerStore[ProtoBook][peerId] = remotePeerInfo.protocols @@ -250,18 +258,20 @@ proc loadFromStorage(pm: PeerManager) = # custom books pm.peerStore[ConnectionBook][peerId] = NotConnected # Reset connectedness state - pm.peerStore[DisconnectBook][peerId] = disconnectTime + pm.peerStore[DisconnectBook][peerId] = remotePeerInfo.disconnectTime pm.peerStore[SourceBook][peerId] = remotePeerInfo.origin + + if remotePeerInfo.enr.isSome(): + pm.peerStore[ENRBook][peerId] = remotePeerInfo.enr.get() amount.inc() - let res = pm.storage.getAll(onData) - if res.isErr: - warn "failed to load peers from storage", err = res.error + pm.storage.getAll(onData).isOkOr: + warn "loading peers from storage failed", err = error waku_peers_errors.inc(labelValues = ["storage_load_failure"]) return - debug "successfully queried peer storage", amount = amount + debug "recovered peers from storage", amount = amount proc canBeConnected*(pm: PeerManager, peerId: PeerId): bool = @@ -385,8 +395,12 @@ proc onPeerEvent(pm: PeerManager, peerId: PeerId, event: PeerEvent) {.async.} = pm.peerStore[ConnectionBook][peerId] = connectedness pm.peerStore[DirectionBook][peerId] = direction + if not pm.storage.isNil: - pm.storage.insertOrReplace(peerId, pm.peerStore.get(peerId), connectedness, getTime().toUnix) + var remotePeerInfo = pm.peerStore.get(peerId) + remotePeerInfo.disconnectTime = getTime().toUnix + + pm.storage.insertOrReplace(remotePeerInfo) proc new*(T: type PeerManager, switch: Switch, diff --git a/waku/node/peer_manager/peer_store/peer_storage.nim b/waku/node/peer_manager/peer_store/peer_storage.nim index dcb456b2fe..5f5a37c126 100644 --- a/waku/node/peer_manager/peer_store/peer_storage.nim +++ b/waku/node/peer_manager/peer_store/peer_storage.nim @@ -18,14 +18,14 @@ type PeerStorageResult*[T] = Result[T, string] - DataProc* = proc(peerId: PeerID, remotePeerInfo: RemotePeerInfo, - connectedness: Connectedness, disconnectTime: int64) {.closure, raises: [Defect].} + DataProc* = proc(remotePeerInfo: RemotePeerInfo) {.closure, raises: [Defect].} # PeerStorage interface -method put*(db: PeerStorage, - peerId: PeerID, - remotePeerInfo: RemotePeerInfo, - connectedness: Connectedness, - disconnectTime: int64): PeerStorageResult[void] {.base.} = discard - -method getAll*(db: PeerStorage, onData: DataProc): PeerStorageResult[bool] {.base.} = discard +method put*( + db: PeerStorage, + remotePeerInfo: RemotePeerInfo + ): PeerStorageResult[void] {.base.} = + return err("Unimplemented") + +method getAll*(db: PeerStorage, onData: DataProc): PeerStorageResult[void] {.base.} = + return err("Unimplemented") diff --git a/waku/node/peer_manager/peer_store/waku_peer_storage.nim b/waku/node/peer_manager/peer_store/waku_peer_storage.nim index 4f97773805..8609f165c9 100644 --- a/waku/node/peer_manager/peer_store/waku_peer_storage.nim +++ b/waku/node/peer_manager/peer_store/waku_peer_storage.nim @@ -5,13 +5,13 @@ else: import - std/sets, + std/[sets, options], stew/results, sqlite3_abi, + eth/p2p/discoveryv5/enr, libp2p/protobuf/minprotobuf import ../../../common/databases/db_sqlite, - ../../../common/databases/common, ../../../waku_core, ../waku_peer_store, ./peer_storage @@ -21,17 +21,20 @@ export db_sqlite type WakuPeerStorage* = ref object of PeerStorage database*: SqliteDatabase - replaceStmt: SqliteStmt[(seq[byte], seq[byte], int32, int64), void] + replaceStmt: SqliteStmt[(seq[byte], seq[byte]), void] ########################## # Protobuf Serialisation # ########################## -proc init*(T: type RemotePeerInfo, buffer: seq[byte]): ProtoResult[T] = +proc decode*(T: type RemotePeerInfo, buffer: seq[byte]): ProtoResult[T] = var multiaddrSeq: seq[MultiAddress] protoSeq: seq[string] storedInfo = RemotePeerInfo() + rlpBytes: seq[byte] + connectedness: uint32 + disconnectTime: uint64 var pb = initProtoBuffer(buffer) @@ -39,11 +42,20 @@ proc init*(T: type RemotePeerInfo, buffer: seq[byte]): ProtoResult[T] = discard ? pb.getRepeatedField(2, multiaddrSeq) discard ? pb.getRepeatedField(3, protoSeq) discard ? pb.getField(4, storedInfo.publicKey) - - # TODO: Store the rest of parameters such as connectedness and disconnectTime + discard ? pb.getField(5, connectedness) + discard ? pb.getField(6, disconnectTime) + let hasENR = ? pb.getField(7, rlpBytes) storedInfo.addrs = multiaddrSeq storedInfo.protocols = protoSeq + storedInfo.connectedness = Connectedness(connectedness) + storedInfo.disconnectTime = int64(disconnectTime) + + if hasENR: + var record: Record + + if record.fromBytes(rlpBytes): + storedInfo.enr = some(record) ok(storedInfo) @@ -58,113 +70,104 @@ proc encode*(remotePeerInfo: RemotePeerInfo): PeerStorageResult[ProtoBuffer] = for proto in remotePeerInfo.protocols.items: pb.write(3, proto) - try: - pb.write(4, remotePeerInfo.publicKey) - except ResultError[CryptoError] as e: - return err("Failed to encode public key") + let catchRes = catch: pb.write(4, remotePeerInfo.publicKey) + if catchRes.isErr(): + return err("Enncoding public key failed: " & catchRes.error.msg) + + pb.write(5, uint32(ord(remotePeerInfo.connectedness))) + + pb.write(6, uint64(remotePeerInfo.disconnectTime)) + + if remotePeerInfo.enr.isSome(): + pb.write(7, remotePeerInfo.enr.get().raw) - ok(pb) + return ok(pb) ########################## # Storage implementation # ########################## proc new*(T: type WakuPeerStorage, db: SqliteDatabase): PeerStorageResult[T] = - ## Misconfiguration can lead to nil DB + # Misconfiguration can lead to nil DB if db.isNil(): return err("db not initialized") - ## Create the "Peer" table - ## It contains: - ## - peer id as primary key, stored as a blob - ## - stored info (serialised protobuf), stored as a blob - ## - last known enumerated connectedness state, stored as an integer - ## - disconnect time in epoch seconds, if applicable - - # TODO: connectedness and disconnectTime are now stored in the storedInfo type - let - createStmt = db.prepareStmt(""" - CREATE TABLE IF NOT EXISTS Peer ( - peerId BLOB PRIMARY KEY, - storedInfo BLOB, - connectedness INTEGER, - disconnectTime INTEGER - ) WITHOUT ROWID; - """, NoParams, void).expect("this is a valid statement") - - let res = createStmt.exec(()) - if res.isErr: + # Create the "Peer" table + # It contains: + # - peer id as primary key, stored as a blob + # - stored info (serialised protobuf), stored as a blob + let createStmt = db.prepareStmt( + """ + CREATE TABLE IF NOT EXISTS Peer ( + peerId BLOB PRIMARY KEY, + storedInfo BLOB + ) WITHOUT ROWID; + """, + NoParams, + void + ).expect("Valid statement") + + createStmt.exec(()).isOkOr: return err("failed to exec") # We dispose of this prepared statement here, as we never use it again createStmt.dispose() - ## Reusable prepared statements - let - replaceStmt = db.prepareStmt( - "REPLACE INTO Peer (peerId, storedInfo, connectedness, disconnectTime) VALUES (?, ?, ?, ?);", - (seq[byte], seq[byte], int32, int64), - void - ).expect("this is a valid statement") + # Reusable prepared statements + let replaceStmt = db.prepareStmt( + "REPLACE INTO Peer (peerId, storedInfo) VALUES (?, ?);", + (seq[byte], seq[byte]), + void + ).expect("Valid statement") - ## General initialization + # General initialization + let ps = WakuPeerStorage(database: db, replaceStmt: replaceStmt) - ok(WakuPeerStorage(database: db, - replaceStmt: replaceStmt)) - - -method put*(db: WakuPeerStorage, - peerId: PeerID, - remotePeerInfo: RemotePeerInfo, - connectedness: Connectedness, - disconnectTime: int64): PeerStorageResult[void] = + return ok(ps) +method put*( + db: WakuPeerStorage, + remotePeerInfo: RemotePeerInfo + ): PeerStorageResult[void] = ## Adds a peer to storage or replaces existing entry if it already exists - let encoded = remotePeerInfo.encode() - - if encoded.isErr: - return err("failed to encode: " & encoded.error()) + + let encoded = remotePeerInfo.encode().valueOr: + return err("peer info encoding failed: " & error) - let res = db.replaceStmt.exec((peerId.data, encoded.get().buffer, int32(ord(connectedness)), disconnectTime)) - if res.isErr: - return err("failed") + db.replaceStmt.exec((remotePeerInfo.peerId.data, encoded.buffer)).isOkOr: + return err("DB operation failed: " & error) - ok() + return ok() -method getAll*(db: WakuPeerStorage, onData: peer_storage.DataProc): PeerStorageResult[bool] = +method getAll*( + db: WakuPeerStorage, + onData: peer_storage.DataProc + ): PeerStorageResult[void] = ## Retrieves all peers from storage - var gotPeers = false - - proc peer(s: ptr sqlite3_stmt) {.raises: [Defect, LPError, ResultError[ProtoError]].} = - gotPeers = true + + proc peer(s: ptr sqlite3_stmt) {.raises: [ResultError[ProtoError]].} = let - # Peer ID - pId = cast[ptr UncheckedArray[byte]](sqlite3_column_blob(s, 0)) - pIdL = sqlite3_column_bytes(s, 0) - peerId = PeerID.init(@(toOpenArray(pId, 0, pIdL - 1))).tryGet() # Stored Info sTo = cast[ptr UncheckedArray[byte]](sqlite3_column_blob(s, 1)) sToL = sqlite3_column_bytes(s, 1) - storedInfo = RemotePeerInfo.init(@(toOpenArray(sTo, 0, sToL - 1))).tryGet() - # Connectedness - connectedness = Connectedness(sqlite3_column_int(s, 2)) - # DisconnectTime - disconnectTime = sqlite3_column_int64(s, 3) + storedInfo = RemotePeerInfo.decode(@(toOpenArray(sTo, 0, sToL - 1))).tryGet() + + onData(storedInfo) - onData(peerId, storedInfo, connectedness, disconnectTime) + let catchRes = catch: db.database.query("SELECT peerId, storedInfo FROM Peer", peer) - var queryResult: DatabaseResult[bool] - try: - queryResult = db.database.query("SELECT peerId, storedInfo, connectedness, disconnectTime FROM Peer", peer) - except LPError, ResultError[ProtoError]: - return err("failed to extract peer from query result") + let queryRes = + if catchRes.isErr(): + return err("failed to extract peer from query result: " & catchRes.error.msg) + else: catchRes.get() - if queryResult.isErr: - return err("failed") + if queryRes.isErr(): + return err("peer storage query failed: " & queryRes.error) - ok gotPeers + return ok() proc close*(db: WakuPeerStorage) = ## Closes the database. + db.replaceStmt.dispose() db.database.close() From 38e100e923a864a055d87145f5a393235955e936 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lex=20Cabeza=20Romero?= Date: Mon, 27 Nov 2023 18:33:27 +0100 Subject: [PATCH 139/274] chore(store-archive): Remove duplicated code (#2234) * Refactor utility functions for store and archive test. --- tests/common/test_sqlite_migrations.nim | 8 +- tests/node/test_wakunode_filter.nim | 2 - tests/waku_archive/archive_utils.nim | 56 +++++++++++ tests/waku_archive/test_driver_sqlite.nim | 13 +-- .../waku_archive/test_driver_sqlite_query.nim | 99 ++++++++----------- tests/waku_archive/test_retention_policy.nim | 15 +-- tests/waku_archive/test_waku_archive.nim | 82 ++++++--------- tests/waku_filter_v2/test_waku_client.nim | 2 +- tests/waku_relay/test_protocol.nim | 1 - tests/waku_store/store_utils.nim | 42 ++++++++ tests/waku_store/test_resume.nim | 28 +----- tests/waku_store/test_waku_store.nim | 32 +++--- tests/waku_store/test_wakunode_store.nim | 21 ++-- 13 files changed, 205 insertions(+), 196 deletions(-) create mode 100644 tests/waku_archive/archive_utils.nim create mode 100644 tests/waku_store/store_utils.nim diff --git a/tests/common/test_sqlite_migrations.nim b/tests/common/test_sqlite_migrations.nim index 5b165bf05a..9e673d14e8 100644 --- a/tests/common/test_sqlite_migrations.nim +++ b/tests/common/test_sqlite_migrations.nim @@ -5,12 +5,10 @@ import stew/results, testutils/unittests import - ../../waku/common/databases/db_sqlite {.all.} + ../../waku/common/databases/db_sqlite {.all.}, + ../waku_archive/archive_utils -proc newTestDatabase(): SqliteDatabase = - SqliteDatabase.new(":memory:").tryGet() - template sourceDir: string = currentSourcePath.rsplit(DirSep, 1)[0] @@ -18,7 +16,7 @@ suite "SQLite - migrations": test "set and get user version": ## Given - let database = newTestDatabase() + let database = newSqliteDatabase() ## When let setRes = database.setUserVersion(5) diff --git a/tests/node/test_wakunode_filter.nim b/tests/node/test_wakunode_filter.nim index 8577a0fa75..2c32c98102 100644 --- a/tests/node/test_wakunode_filter.nim +++ b/tests/node/test_wakunode_filter.nim @@ -34,8 +34,6 @@ import testutils ] -let FUTURE_TIMEOUT = 1.seconds - suite "Waku Filter - End to End": var client {.threadvar.}: WakuNode var clientPeerId {.threadvar.}: PeerId diff --git a/tests/waku_archive/archive_utils.nim b/tests/waku_archive/archive_utils.nim new file mode 100644 index 0000000000..a5baafdb60 --- /dev/null +++ b/tests/waku_archive/archive_utils.nim @@ -0,0 +1,56 @@ +{.used.} + +import + std/options, + chronos, + chronicles, + libp2p/crypto/crypto + +import + ../../../waku/[ + node/peer_manager, + waku_core, + waku_archive, + waku_archive/common, + waku_archive/driver/sqlite_driver, + common/databases/db_sqlite, + waku_store + ], + ../testlib/[ + common, + wakucore + ] + + +proc newSqliteDatabase*(): SqliteDatabase = + SqliteDatabase.new(":memory:").tryGet() + + +proc newSqliteArchiveDriver*(): ArchiveDriver = + let database = newSqliteDatabase() + SqliteDriver.new(database).tryGet() + + +proc newWakuArchive*(driver: ArchiveDriver): WakuArchive = + WakuArchive.new(driver).get() + + +proc computeArchiveCursor*(pubsubTopic: PubsubTopic, message: WakuMessage): ArchiveCursor = + ArchiveCursor( + pubsubTopic: pubsubTopic, + senderTime: message.timestamp, + storeTime: message.timestamp, + digest: waku_archive.computeDigest(message) + ) + + +proc newArchiveDriverWithMessages*(pubsubTopic: PubSubTopic, msgList: seq[WakuMessage]): ArchiveDriver = + let driver = newSqliteArchiveDriver() + + for msg in msgList: + let + msgDigest = waku_archive.computeDigest(msg) + msgHash = computeMessageHash(pubsubTopic, msg) + discard waitFor driver.put(pubsubTopic, msg, msgDigest, msgHash, msg.timestamp) + + return driver diff --git a/tests/waku_archive/test_driver_sqlite.nim b/tests/waku_archive/test_driver_sqlite.nim index 342f995653..3a4d78d64a 100644 --- a/tests/waku_archive/test_driver_sqlite.nim +++ b/tests/waku_archive/test_driver_sqlite.nim @@ -9,23 +9,16 @@ import ../../../waku/waku_archive, ../../../waku/waku_archive/driver/sqlite_driver, ../../../waku/waku_core, + ../waku_archive/archive_utils, ../testlib/common, ../testlib/wakucore -proc newTestDatabase(): SqliteDatabase = - SqliteDatabase.new(":memory:").tryGet() - -proc newTestSqliteDriver(): ArchiveDriver = - let db = newTestDatabase() - SqliteDriver.new(db).tryGet() - - suite "SQLite driver": test "init driver and database": ## Given - let database = newTestDatabase() + let database = newSqliteDatabase() ## When let driverRes = SqliteDriver.new(database) @@ -45,7 +38,7 @@ suite "SQLite driver": ## Given const contentTopic = "test-content-topic" - let driver = newTestSqliteDriver() + let driver = newSqliteArchiveDriver() let msg = fakeWakuMessage(contentTopic=contentTopic) diff --git a/tests/waku_archive/test_driver_sqlite_query.nim b/tests/waku_archive/test_driver_sqlite_query.nim index d63ec7c75c..e201932768 100644 --- a/tests/waku_archive/test_driver_sqlite_query.nim +++ b/tests/waku_archive/test_driver_sqlite_query.nim @@ -5,6 +5,7 @@ import testutils/unittests, chronos, chronicles + import ../../../waku/common/databases/db_sqlite, ../../../waku/waku_archive, @@ -12,7 +13,9 @@ import ../../../waku/waku_core, ../../../waku/waku_core/message/digest, ../testlib/common, - ../testlib/wakucore + ../testlib/wakucore, + ../waku_archive/archive_utils + logScope: topics = "test archive _driver" @@ -22,29 +25,13 @@ logScope: common.randomize() -proc newTestDatabase(): SqliteDatabase = - SqliteDatabase.new(":memory:").tryGet() - -proc newTestSqliteDriver(): ArchiveDriver = - let db = newTestDatabase() - SqliteDriver.new(db).tryGet() - -proc computeTestCursor(pubsubTopic: PubsubTopic, message: WakuMessage): ArchiveCursor = - ArchiveCursor( - pubsubTopic: pubsubTopic, - senderTime: message.timestamp, - storeTime: message.timestamp, - digest: computeDigest(message) - ) - - suite "SQLite driver - query by content topic": asyncTest "no content topic": ## Given const contentTopic = "test-content-topic" - let driver = newTestSqliteDriver() + let driver = newSqliteArchiveDriver() let expected = @[ fakeWakuMessage(@[byte 0], contentTopic=DefaultContentTopic, ts=ts(00)), @@ -86,7 +73,7 @@ suite "SQLite driver - query by content topic": ## Given const contentTopic = "test-content-topic" - let driver = newTestSqliteDriver() + let driver = newSqliteArchiveDriver() let expected = @[ fakeWakuMessage(@[byte 0], ts=ts(00)), @@ -130,7 +117,7 @@ suite "SQLite driver - query by content topic": ## Given const contentTopic = "test-content-topic" - let driver = newTestSqliteDriver() + let driver = newSqliteArchiveDriver() let expected = @[ fakeWakuMessage(@[byte 0], ts=ts(00)), @@ -176,7 +163,7 @@ suite "SQLite driver - query by content topic": const contentTopic2 = "test-content-topic-2" const contentTopic3 = "test-content-topic-3" - let driver = newTestSqliteDriver() + let driver = newSqliteArchiveDriver() let expected = @[ fakeWakuMessage(@[byte 0], ts=ts(00)), @@ -220,7 +207,7 @@ suite "SQLite driver - query by content topic": ## Given const contentTopic = "test-content-topic" - let driver = newTestSqliteDriver() + let driver = newSqliteArchiveDriver() let expected = @[ fakeWakuMessage(@[byte 0], contentTopic=DefaultContentTopic, ts=ts(00)), @@ -259,7 +246,7 @@ suite "SQLite driver - query by content topic": ## Given const pageSize: uint = 50 - let driver = newTestSqliteDriver() + let driver = newSqliteArchiveDriver() for t in 0..<40: let msg = fakeWakuMessage(@[byte t], DefaultContentTopic, ts=ts(t)) @@ -291,7 +278,7 @@ suite "SQLite driver - query by pubsub topic": const contentTopic = "test-content-topic" const pubsubTopic = "test-pubsub-topic" - let driver = newTestSqliteDriver() + let driver = newSqliteArchiveDriver() let expected = @[ (DefaultPubsubTopic, fakeWakuMessage(@[byte 0], ts=ts(00))), @@ -337,7 +324,7 @@ suite "SQLite driver - query by pubsub topic": const contentTopic = "test-content-topic" const pubsubTopic = "test-pubsub-topic" - let driver = newTestSqliteDriver() + let driver = newSqliteArchiveDriver() let expected = @[ (DefaultPubsubTopic, fakeWakuMessage(@[byte 0], ts=ts(00))), @@ -382,7 +369,7 @@ suite "SQLite driver - query by pubsub topic": const contentTopic = "test-content-topic" const pubsubTopic = "test-pubsub-topic" - let driver = newTestSqliteDriver() + let driver = newSqliteArchiveDriver() let expected = @[ (DefaultPubsubTopic, fakeWakuMessage(@[byte 0], ts=ts(00))), @@ -432,7 +419,7 @@ suite "SQLite driver - query by cursor": ## Given const contentTopic = "test-content-topic" - let driver = newTestSqliteDriver() + let driver = newSqliteArchiveDriver() let expected = @[ fakeWakuMessage(@[byte 0], ts=ts(00)), @@ -454,7 +441,7 @@ suite "SQLite driver - query by cursor": for msg in messages: require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), computeMessageHash(DefaultPubsubTopic, msg), msg.timestamp)).isOk() - let cursor = computeTestCursor(DefaultPubsubTopic, expected[4]) + let cursor = computeArchiveCursor(DefaultPubsubTopic, expected[4]) ## When let res = await driver.getMessages( @@ -478,7 +465,7 @@ suite "SQLite driver - query by cursor": ## Given const contentTopic = "test-content-topic" - let driver = newTestSqliteDriver() + let driver = newSqliteArchiveDriver() let expected = @[ fakeWakuMessage(@[byte 0], ts=ts(00)), @@ -500,7 +487,7 @@ suite "SQLite driver - query by cursor": for msg in messages: require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), computeMessageHash(DefaultPubsubTopic, msg), msg.timestamp)).isOk() - let cursor = computeTestCursor(DefaultPubsubTopic, expected[4]) + let cursor = computeArchiveCursor(DefaultPubsubTopic, expected[4]) ## When let res = await driver.getMessages( @@ -524,7 +511,7 @@ suite "SQLite driver - query by cursor": ## Given const contentTopic = "test-content-topic" - let driver = newTestSqliteDriver() + let driver = newSqliteArchiveDriver() let expected = @[ fakeWakuMessage(@[byte 0], ts=ts(00)), @@ -544,7 +531,7 @@ suite "SQLite driver - query by cursor": for msg in messages: require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), computeMessageHash(DefaultPubsubTopic, msg), msg.timestamp)).isOk() - let cursor = computeTestCursor(DefaultPubsubTopic, expected[4]) + let cursor = computeArchiveCursor(DefaultPubsubTopic, expected[4]) ## When let res = await driver.getMessages( @@ -569,7 +556,7 @@ suite "SQLite driver - query by cursor": ## Given const contentTopic = "test-content-topic" - let driver = newTestSqliteDriver() + let driver = newSqliteArchiveDriver() let expected = @[ fakeWakuMessage(@[byte 0], ts=ts(00)), @@ -589,7 +576,7 @@ suite "SQLite driver - query by cursor": for msg in messages: require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), computeMessageHash(DefaultPubsubTopic, msg), msg.timestamp)).isOk() - let cursor = computeTestCursor(DefaultPubsubTopic, expected[6]) + let cursor = computeArchiveCursor(DefaultPubsubTopic, expected[6]) ## When let res = await driver.getMessages( @@ -615,7 +602,7 @@ suite "SQLite driver - query by cursor": const contentTopic = "test-content-topic" const pubsubTopic = "test-pubsub-topic" - let driver = newTestSqliteDriver() + let driver = newSqliteArchiveDriver() let timeOrigin = now() let expected = @[ @@ -641,7 +628,7 @@ suite "SQLite driver - query by cursor": let (topic, msg) = row require (await driver.put(topic, msg, computeDigest(msg), computeMessageHash(topic, msg), msg.timestamp)).isOk() - let cursor = computeTestCursor(expected[5][0], expected[5][1]) + let cursor = computeArchiveCursor(expected[5][0], expected[5][1]) ## When let res = await driver.getMessages( @@ -668,7 +655,7 @@ suite "SQLite driver - query by cursor": const contentTopic = "test-content-topic" const pubsubTopic = "test-pubsub-topic" - let driver = newTestSqliteDriver() + let driver = newSqliteArchiveDriver() let timeOrigin = now() let expected = @[ @@ -694,7 +681,7 @@ suite "SQLite driver - query by cursor": let (topic, msg) = row require (await driver.put(topic, msg, computeDigest(msg), computeMessageHash(topic, msg), msg.timestamp)).isOk() - let cursor = computeTestCursor(expected[6][0], expected[6][1]) + let cursor = computeArchiveCursor(expected[6][0], expected[6][1]) ## When let res = await driver.getMessages( @@ -723,7 +710,7 @@ suite "SQLite driver - query by time range": ## Given const contentTopic = "test-content-topic" - let driver = newTestSqliteDriver() + let driver = newSqliteArchiveDriver() let timeOrigin = now() let expected = @[ @@ -766,7 +753,7 @@ suite "SQLite driver - query by time range": ## Given const contentTopic = "test-content-topic" - let driver = newTestSqliteDriver() + let driver = newSqliteArchiveDriver() let timeOrigin = now() let expected = @[ @@ -810,7 +797,7 @@ suite "SQLite driver - query by time range": const contentTopic = "test-content-topic" const pubsubTopic = "test-pubsub-topic" - let driver = newTestSqliteDriver() + let driver = newSqliteArchiveDriver() let timeOrigin = now() let expected = @[ @@ -860,7 +847,7 @@ suite "SQLite driver - query by time range": ## Given const contentTopic = "test-content-topic" - let driver = newTestSqliteDriver() + let driver = newSqliteArchiveDriver() let timeOrigin = now() let expected = @[ @@ -905,7 +892,7 @@ suite "SQLite driver - query by time range": ## Given const contentTopic = "test-content-topic" - let driver = newTestSqliteDriver() + let driver = newSqliteArchiveDriver() let timeOrigin = now() let expected = @[ @@ -948,7 +935,7 @@ suite "SQLite driver - query by time range": ## Given const contentTopic = "test-content-topic" - let driver = newTestSqliteDriver() + let driver = newSqliteArchiveDriver() let timeOrigin = now() let expected = @[ @@ -994,7 +981,7 @@ suite "SQLite driver - query by time range": ## Given const contentTopic = "test-content-topic" - let driver = newTestSqliteDriver() + let driver = newSqliteArchiveDriver() let timeOrigin = now() let expected = @[ @@ -1018,7 +1005,7 @@ suite "SQLite driver - query by time range": for msg in messages: require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), computeMessageHash(DefaultPubsubTopic, msg), msg.timestamp)).isOk() - let cursor = computeTestCursor(DefaultPubsubTopic, expected[3]) + let cursor = computeArchiveCursor(DefaultPubsubTopic, expected[3]) ## When let res = await driver.getMessages( @@ -1043,7 +1030,7 @@ suite "SQLite driver - query by time range": ## Given const contentTopic = "test-content-topic" - let driver = newTestSqliteDriver() + let driver = newSqliteArchiveDriver() let timeOrigin = now() let expected = @[ @@ -1067,7 +1054,7 @@ suite "SQLite driver - query by time range": for msg in messages: require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), computeMessageHash(DefaultPubsubTopic, msg), msg.timestamp)).isOk() - let cursor = computeTestCursor(DefaultPubsubTopic, expected[6]) + let cursor = computeArchiveCursor(DefaultPubsubTopic, expected[6]) ## When let res = await driver.getMessages( @@ -1093,7 +1080,7 @@ suite "SQLite driver - query by time range": const contentTopic = "test-content-topic" const pubsubTopic = "test-pubsub-topic" - let driver = newTestSqliteDriver() + let driver = newSqliteArchiveDriver() let timeOrigin = now() let expected = @[ @@ -1119,7 +1106,7 @@ suite "SQLite driver - query by time range": let (topic, msg) = row require (await driver.put(topic, msg, computeDigest(msg), computeMessageHash(topic, msg), msg.timestamp)).isOk() - let cursor = computeTestCursor(DefaultPubsubTopic, expected[1][1]) + let cursor = computeArchiveCursor(DefaultPubsubTopic, expected[1][1]) ## When let res = await driver.getMessages( @@ -1148,7 +1135,7 @@ suite "SQLite driver - query by time range": const contentTopic = "test-content-topic" const pubsubTopic = "test-pubsub-topic" - let driver = newTestSqliteDriver() + let driver = newSqliteArchiveDriver() let timeOrigin = now() let expected = @[ @@ -1174,7 +1161,7 @@ suite "SQLite driver - query by time range": let (topic, msg) = row require (await driver.put(topic, msg, computeDigest(msg), computeMessageHash(topic, msg), msg.timestamp)).isOk() - let cursor = computeTestCursor(expected[7][0], expected[7][1]) + let cursor = computeArchiveCursor(expected[7][0], expected[7][1]) ## When let res = await driver.getMessages( @@ -1203,7 +1190,7 @@ suite "SQLite driver - query by time range": const contentTopic = "test-content-topic" const pubsubTopic = "test-pubsub-topic" - let driver = newTestSqliteDriver() + let driver = newSqliteArchiveDriver() let timeOrigin = now() let expected = @[ @@ -1229,7 +1216,7 @@ suite "SQLite driver - query by time range": let (topic, msg) = row require (await driver.put(topic, msg, computeDigest(msg), computeMessageHash(topic, msg), msg.timestamp)).isOk() - let cursor = computeTestCursor(expected[1][0], expected[1][1]) + let cursor = computeArchiveCursor(expected[1][0], expected[1][1]) ## When let res = await driver.getMessages( @@ -1259,7 +1246,7 @@ suite "SQLite driver - query by time range": const contentTopic = "test-content-topic" const pubsubTopic = "test-pubsub-topic" - let driver = newTestSqliteDriver() + let driver = newSqliteArchiveDriver() let timeOrigin = now() let expected = @[ @@ -1285,7 +1272,7 @@ suite "SQLite driver - query by time range": let (topic, msg) = row require (await driver.put(topic, msg, computeDigest(msg), computeMessageHash(topic, msg), msg.timestamp)).isOk() - let cursor = computeTestCursor(expected[1][0], expected[1][1]) + let cursor = computeArchiveCursor(expected[1][0], expected[1][1]) ## When let res = await driver.getMessages( diff --git a/tests/waku_archive/test_retention_policy.nim b/tests/waku_archive/test_retention_policy.nim index ff039adef9..5233d69240 100644 --- a/tests/waku_archive/test_retention_policy.nim +++ b/tests/waku_archive/test_retention_policy.nim @@ -14,18 +14,11 @@ import ../../../waku/waku_archive/retention_policy, ../../../waku/waku_archive/retention_policy/retention_policy_capacity, ../../../waku/waku_archive/retention_policy/retention_policy_size, + ../waku_archive/archive_utils, ../testlib/common, ../testlib/wakucore -proc newTestDatabase(): SqliteDatabase = - SqliteDatabase.new(":memory:").tryGet() - -proc newTestArchiveDriver(): ArchiveDriver = - let db = newTestDatabase() - SqliteDriver.new(db).tryGet() - - suite "Waku Archive - Retention policy": test "capacity retention policy - windowed message deletion": @@ -34,7 +27,7 @@ suite "Waku Archive - Retention policy": capacity = 100 excess = 60 - let driver = newTestArchiveDriver() + let driver = newSqliteArchiveDriver() let retentionPolicy: RetentionPolicy = CapacityRetentionPolicy.init(capacity=capacity) var putFutures = newSeq[Future[ArchiveDriverResult[void]]]() @@ -66,7 +59,7 @@ suite "Waku Archive - Retention policy": sizeLimit:int64 = 52428 excess = 325 - let driver = newTestArchiveDriver() + let driver = newSqliteArchiveDriver() let retentionPolicy: RetentionPolicy = SizeRetentionPolicy.init(size=sizeLimit) var putFutures = newSeq[Future[ArchiveDriverResult[void]]]() @@ -121,7 +114,7 @@ suite "Waku Archive - Retention policy": const contentTopic = "test-content-topic" let - driver = newTestArchiveDriver() + driver = newSqliteArchiveDriver() retentionPolicy: RetentionPolicy = CapacityRetentionPolicy.init(capacity=capacity) let messages = @[ diff --git a/tests/waku_archive/test_waku_archive.nim b/tests/waku_archive/test_waku_archive.nim index eb9c4e3410..72a0abf664 100644 --- a/tests/waku_archive/test_waku_archive.nim +++ b/tests/waku_archive/test_waku_archive.nim @@ -6,42 +6,24 @@ import chronicles, chronos, libp2p/crypto/crypto + import ../../../waku/common/databases/db_sqlite, ../../../waku/waku_core, ../../../waku/waku_core/message/digest, ../../../waku/waku_archive/driver/sqlite_driver, ../../../waku/waku_archive, + ../waku_archive/archive_utils, ../testlib/common, ../testlib/wakucore -proc newTestDatabase(): SqliteDatabase = - SqliteDatabase.new(":memory:").tryGet() - -proc newTestArchiveDriver(): ArchiveDriver = - let db = newTestDatabase() - SqliteDriver.new(db).tryGet() - -proc newTestWakuArchive(driver: ArchiveDriver): WakuArchive = - WakuArchive.new(driver).get() - -proc computeTestCursor(pubsubTopic: PubsubTopic, message: WakuMessage): ArchiveCursor = - ArchiveCursor( - pubsubTopic: pubsubTopic, - senderTime: message.timestamp, - storeTime: message.timestamp, - digest: computeDigest(message) - ) - - - suite "Waku Archive - message handling": test "it should driver a valid and non-ephemeral message": ## Setup - let driver = newTestArchiveDriver() - let archive = newTestWakuArchive(driver) + let driver = newSqliteArchiveDriver() + let archive = newWakuArchive(driver) ## Given let validSenderTime = now() @@ -56,8 +38,8 @@ suite "Waku Archive - message handling": test "it should not driver an ephemeral message": ## Setup - let driver = newTestArchiveDriver() - let archive = newTestWakuArchive(driver) + let driver = newSqliteArchiveDriver() + let archive = newWakuArchive(driver) ## Given let msgList = @[ @@ -78,8 +60,8 @@ suite "Waku Archive - message handling": test "it should driver a message with no sender timestamp": ## Setup - let driver = newTestArchiveDriver() - let archive = newTestWakuArchive(driver) + let driver = newSqliteArchiveDriver() + let archive = newWakuArchive(driver) ## Given let invalidSenderTime = 0 @@ -94,8 +76,8 @@ suite "Waku Archive - message handling": test "it should not driver a message with a sender time variance greater than max time variance (future)": ## Setup - let driver = newTestArchiveDriver() - let archive = newTestWakuArchive(driver) + let driver = newSqliteArchiveDriver() + let archive = newWakuArchive(driver) ## Given let @@ -113,8 +95,8 @@ suite "Waku Archive - message handling": test "it should not driver a message with a sender time variance greater than max time variance (past)": ## Setup - let driver = newTestArchiveDriver() - let archive = newTestWakuArchive(driver) + let driver = newSqliteArchiveDriver() + let archive = newWakuArchive(driver) ## Given let @@ -149,8 +131,8 @@ procSuite "Waku Archive - find messages": let archiveA = block: let - driver = newTestArchiveDriver() - archive = newTestWakuArchive(driver) + driver = newSqliteArchiveDriver() + archive = newWakuArchive(driver) for msg in msgListA: require (waitFor driver.put(DefaultPubsubTopic, msg, computeDigest(msg), computeMessageHash(DefaultPubsubTopic, msg), msg.timestamp)).isOk() @@ -160,8 +142,8 @@ procSuite "Waku Archive - find messages": test "handle query": ## Setup let - driver = newTestArchiveDriver() - archive = newTestWakuArchive(driver) + driver = newSqliteArchiveDriver() + archive = newWakuArchive(driver) let topic = ContentTopic("1") let @@ -189,8 +171,8 @@ procSuite "Waku Archive - find messages": test "handle query with multiple content filters": ## Setup let - driver = newTestArchiveDriver() - archive = newTestWakuArchive(driver) + driver = newSqliteArchiveDriver() + archive = newWakuArchive(driver) let topic1 = ContentTopic("1") @@ -225,8 +207,8 @@ procSuite "Waku Archive - find messages": test "handle query with more than 10 content filters": ## Setup let - driver = newTestArchiveDriver() - archive = newTestWakuArchive(driver) + driver = newSqliteArchiveDriver() + archive = newWakuArchive(driver) let queryTopics = toSeq(1..15).mapIt(ContentTopic($it)) @@ -248,8 +230,8 @@ procSuite "Waku Archive - find messages": test "handle query with pubsub topic filter": ## Setup let - driver = newTestArchiveDriver() - archive = newTestWakuArchive(driver) + driver = newSqliteArchiveDriver() + archive = newWakuArchive(driver) let pubsubTopic1 = "queried-topic" @@ -291,8 +273,8 @@ procSuite "Waku Archive - find messages": test "handle query with pubsub topic filter - no match": ## Setup let - driver = newTestArchiveDriver() - archive = newTestWakuArchive(driver) + driver = newSqliteArchiveDriver() + archive = newWakuArchive(driver) let pubsubtopic1 = "queried-topic" @@ -324,8 +306,8 @@ procSuite "Waku Archive - find messages": test "handle query with pubsub topic filter - match the entire stored messages": ## Setup let - driver = newTestArchiveDriver() - archive = newTestWakuArchive(driver) + driver = newSqliteArchiveDriver() + archive = newWakuArchive(driver) let pubsubTopic = "queried-topic" @@ -382,8 +364,8 @@ procSuite "Waku Archive - find messages": ## Then check: - cursors[0] == some(computeTestCursor(DefaultPubsubTopic, msgListA[3])) - cursors[1] == some(computeTestCursor(DefaultPubsubTopic, msgListA[7])) + cursors[0] == some(computeArchiveCursor(DefaultPubsubTopic, msgListA[3])) + cursors[1] == some(computeArchiveCursor(DefaultPubsubTopic, msgListA[7])) cursors[2] == none(ArchiveCursor) check: @@ -418,8 +400,8 @@ procSuite "Waku Archive - find messages": ## Then check: - cursors[0] == some(computeTestCursor(DefaultPubsubTopic, msgListA[6])) - cursors[1] == some(computeTestCursor(DefaultPubsubTopic, msgListA[2])) + cursors[0] == some(computeArchiveCursor(DefaultPubsubTopic, msgListA[6])) + cursors[1] == some(computeArchiveCursor(DefaultPubsubTopic, msgListA[2])) cursors[2] == none(ArchiveCursor) check: @@ -430,8 +412,8 @@ procSuite "Waku Archive - find messages": test "handle query with no paging info - auto-pagination": ## Setup let - driver = newTestArchiveDriver() - archive = newTestWakuArchive(driver) + driver = newSqliteArchiveDriver() + archive = newWakuArchive(driver) let msgList = @[ fakeWakuMessage(@[byte 0], contentTopic=ContentTopic("2")), diff --git a/tests/waku_filter_v2/test_waku_client.nim b/tests/waku_filter_v2/test_waku_client.nim index ed02b65c64..b619b473f3 100644 --- a/tests/waku_filter_v2/test_waku_client.nim +++ b/tests/waku_filter_v2/test_waku_client.nim @@ -10,7 +10,7 @@ import ], testutils/unittests, stew/[ - results, + results, byteutils ], chronos, diff --git a/tests/waku_relay/test_protocol.nim b/tests/waku_relay/test_protocol.nim index 0230930460..eee7cbe5ca 100644 --- a/tests/waku_relay/test_protocol.nim +++ b/tests/waku_relay/test_protocol.nim @@ -1011,7 +1011,6 @@ suite "Waku Relay": msg5 = fakeWakuMessage(contentTopic=contentTopic, payload=getByteSequence(1023*1024 + 934)) # 1MiB - 90B -> Max Size (Exclusive Limit) msg6 = fakeWakuMessage(contentTopic=contentTopic, payload=getByteSequence(1024*1024)) # 1MiB -> Out of Max Size - # When sending the 1KiB message handlerFuture = newPushHandlerFuture() otherHandlerFuture = newPushHandlerFuture() diff --git a/tests/waku_store/store_utils.nim b/tests/waku_store/store_utils.nim new file mode 100644 index 0000000000..7ed346fe31 --- /dev/null +++ b/tests/waku_store/store_utils.nim @@ -0,0 +1,42 @@ +{.used.} + +import + std/options, + chronos, + chronicles, + libp2p/crypto/crypto + +import + ../../../waku/[ + node/peer_manager, + waku_core, + waku_store, + waku_store/client, + ], + ../testlib/[ + common, + wakucore + ] + +proc newTestWakuStore*(switch: Switch, handler: HistoryQueryHandler): Future[WakuStore] {.async.} = + let + peerManager = PeerManager.new(switch) + proto = WakuStore.new(peerManager, rng, handler) + + await proto.start() + switch.mount(proto) + + return proto + +proc newTestWakuStoreClient*(switch: Switch): WakuStoreClient = + let peerManager = PeerManager.new(switch) + WakuStoreClient.new(peerManager, rng) + + +proc computeHistoryCursor*(pubsubTopic: PubsubTopic, message: WakuMessage): HistoryCursor = + HistoryCursor( + pubsubTopic: pubsubTopic, + senderTime: message.timestamp, + storeTime: message.timestamp, + digest: waku_store.computeDigest(message) + ) diff --git a/tests/waku_store/test_resume.nim b/tests/waku_store/test_resume.nim index d858158a45..2ff7697b02 100644 --- a/tests/waku_store/test_resume.nim +++ b/tests/waku_store/test_resume.nim @@ -14,34 +14,12 @@ import ../../waku/waku_core, ../../waku/waku_core/message/digest, ../../waku/waku_store, + ../waku_store/store_utils, + ../waku_archive/archive_utils, ./testlib/common, ./testlib/switch -proc newTestDatabase(): SqliteDatabase = - SqliteDatabase.new("memory:").tryGet() - -proc newTestArchiveDriver(): ArchiveDriverResult = - let database = SqliteDatabase.new(":memory:").tryGet() - SqliteDriver.init(database).tryGet() - - -proc newTestWakuStore(switch: Switch, store: MessageStore = nil): Future[WakuStore] {.async.} = - let - peerManager = PeerManager.new(switch) - proto = WakuStore.init(peerManager, rng, store) - - await proto.start() - switch.mount(proto) - - return proto - -proc newTestWakuStoreClient(switch: Switch, store: MessageStore = nil): WakuStoreClient = - let - peerManager = PeerManager.new(switch) - WakuStoreClient.new(peerManager, rng, store) - - procSuite "Waku Store - resume store": ## Fixtures let storeA = block: @@ -222,7 +200,7 @@ suite "WakuNode - waku store": await allFutures(client.start(), server.start()) - let driver = newTestArchiveDriver() + let driver = newSqliteArchiveDriver() server.mountArchive(some(driver), none(MessageValidator), none(RetentionPolicy)) await server.mountStore() diff --git a/tests/waku_store/test_waku_store.nim b/tests/waku_store/test_waku_store.nim index f751dbfd19..b854416d16 100644 --- a/tests/waku_store/test_waku_store.nim +++ b/tests/waku_store/test_waku_store.nim @@ -6,27 +6,19 @@ import chronos, chronicles, libp2p/crypto/crypto + import - ../../../waku/node/peer_manager, - ../../../waku/waku_core, - ../../../waku/waku_store, - ../../../waku/waku_store/client, - ../testlib/common, - ../testlib/wakucore - -proc newTestWakuStore(switch: Switch, handler: HistoryQueryHandler): Future[WakuStore] {.async.} = - let - peerManager = PeerManager.new(switch) - proto = WakuStore.new(peerManager, rng, handler) - - await proto.start() - switch.mount(proto) - - return proto - -proc newTestWakuStoreClient(switch: Switch): WakuStoreClient = - let peerManager = PeerManager.new(switch) - WakuStoreClient.new(peerManager, rng) + ../../../waku/[ + node/peer_manager, + waku_core, + waku_store, + waku_store/client, + ], + ../testlib/[ + common, + wakucore + ], + ./store_utils suite "Waku Store - query handler": diff --git a/tests/waku_store/test_wakunode_store.nim b/tests/waku_store/test_wakunode_store.nim index ae489fc6a4..5946fb7e78 100644 --- a/tests/waku_store/test_wakunode_store.nim +++ b/tests/waku_store/test_wakunode_store.nim @@ -22,21 +22,12 @@ import ../../../waku/waku_store, ../../../waku/waku_filter, ../../../waku/waku_node, + ../waku_store/store_utils, + ../waku_archive/archive_utils, ../testlib/common, ../testlib/wakucore, ../testlib/wakunode -proc newTestArchiveDriver(): ArchiveDriver = - let database = SqliteDatabase.new(":memory:").tryGet() - SqliteDriver.new(database).tryGet() - -proc computeTestCursor(pubsubTopic: PubsubTopic, message: WakuMessage): HistoryCursor = - HistoryCursor( - pubsubTopic: pubsubTopic, - senderTime: message.timestamp, - storeTime: message.timestamp, - digest: waku_archive.computeDigest(message) - ) procSuite "WakuNode - Store": ## Fixtures @@ -55,7 +46,7 @@ procSuite "WakuNode - Store": ] let archiveA = block: - let driver = newTestArchiveDriver() + let driver = newSqliteArchiveDriver() for msg in msgListA: let msg_digest = waku_archive.computeDigest(msg) @@ -139,7 +130,7 @@ procSuite "WakuNode - Store": ## Then check: - cursors[0] == some(computeTestCursor(DefaultPubsubTopic, msgListA[6])) + cursors[0] == some(computeHistoryCursor(DefaultPubsubTopic, msgListA[6])) cursors[1] == none(HistoryCursor) check: @@ -190,7 +181,7 @@ procSuite "WakuNode - Store": ## Then check: - cursors[0] == some(computeTestCursor(DefaultPubsubTopic, msgListA[3])) + cursors[0] == some(computeHistoryCursor(DefaultPubsubTopic, msgListA[3])) cursors[1] == none(HistoryCursor) check: @@ -214,7 +205,7 @@ procSuite "WakuNode - Store": waitFor allFutures(client.start(), server.start(), filterSource.start()) waitFor filterSource.mountFilter() - let driver = newTestArchiveDriver() + let driver = newSqliteArchiveDriver() let mountArchiveRes = server.mountArchive(driver) assert mountArchiveRes.isOk(), mountArchiveRes.error From 9f4e6f453fde36b59cb39fd1858f9b4538b33e0c Mon Sep 17 00:00:00 2001 From: gabrielmer <101006718+gabrielmer@users.noreply.github.com> Date: Tue, 28 Nov 2023 11:47:21 +0100 Subject: [PATCH 140/274] chore: updating nim-json-serialization dependency (#2248) --- vendor/nim-json-serialization | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/nim-json-serialization b/vendor/nim-json-serialization index 85b7ea093c..230e226da0 160000 --- a/vendor/nim-json-serialization +++ b/vendor/nim-json-serialization @@ -1 +1 @@ -Subproject commit 85b7ea093cb85ee4f433a617b97571bd709d30df +Subproject commit 230e226da06605f9d8b8bdb1ba178c4b30511aca From bebaa59c3b7fcd29b1aba1690da60b497fd014e4 Mon Sep 17 00:00:00 2001 From: Simon-Pierre Vivier Date: Tue, 28 Nov 2023 07:21:41 -0500 Subject: [PATCH 141/274] chore(rest): refactor message cache (#2221) --- apps/chat2bridge/chat2bridge.nim | 4 +- apps/wakunode2/app.nim | 24 +- tests/test_message_cache.nim | 190 +++++++---- .../wakunode_jsonrpc/test_jsonrpc_filter.nim | 10 +- tests/wakunode_jsonrpc/test_jsonrpc_relay.nim | 11 +- tests/wakunode_rest/test_rest_filter.nim | 12 +- .../wakunode_rest/test_rest_legacy_filter.nim | 47 +-- tests/wakunode_rest/test_rest_relay.nim | 106 ++++--- waku/waku_api/handlers.nim | 9 +- waku/waku_api/jsonrpc/filter/handlers.nim | 13 +- waku/waku_api/jsonrpc/relay/handlers.nim | 22 +- waku/waku_api/message_cache.nim | 296 +++++++++++++++--- waku/waku_api/rest/filter/handlers.nim | 28 +- waku/waku_api/rest/filter/legacy_handlers.nim | 26 +- waku/waku_api/rest/relay/handlers.nim | 105 +++---- 15 files changed, 589 insertions(+), 314 deletions(-) diff --git a/apps/chat2bridge/chat2bridge.nim b/apps/chat2bridge/chat2bridge.nim index af90dbbfc2..756d8adac4 100644 --- a/apps/chat2bridge/chat2bridge.nim +++ b/apps/chat2bridge/chat2bridge.nim @@ -229,11 +229,11 @@ when isMainModule: # Install enabled API handlers: if conf.relay: - let cache = MessageCache[string].init(capacity=30) + let cache = MessageCache.init(capacity=30) installRelayApiHandlers(node, rpcServer, cache) if conf.filter: - let messageCache = filter_api.MessageCache.init(capacity=30) + let messageCache = MessageCache.init(capacity=30) installFilterApiHandlers(node, rpcServer, messageCache) if conf.store: diff --git a/apps/wakunode2/app.nim b/apps/wakunode2/app.nim index 3a2d156bf0..6308ea71c0 100644 --- a/apps/wakunode2/app.nim +++ b/apps/wakunode2/app.nim @@ -687,18 +687,17 @@ proc startRestServer(app: App, address: ValidIpAddress, port: Port, conf: WakuNo ## Relay REST API if conf.relay: - let cache = MessageCache[string].init(capacity=conf.restRelayCacheCapacity) + let cache = MessageCache.init(int(conf.restRelayCacheCapacity)) let handler = messageCacheHandler(cache) - let autoHandler = autoMessageCacheHandler(cache) for pubsubTopic in conf.pubsubTopics: - cache.subscribe(pubsubTopic) + cache.pubsubSubscribe(pubsubTopic) app.node.subscribe((kind: PubsubSub, topic: pubsubTopic), some(handler)) for contentTopic in conf.contentTopics: - cache.subscribe(contentTopic) - app.node.subscribe((kind: ContentSub, topic: contentTopic), some(autoHandler)) + cache.contentSubscribe(contentTopic) + app.node.subscribe((kind: ContentSub, topic: contentTopic), some(handler)) installRelayApiHandlers(server.router, app.node, cache) else: @@ -709,10 +708,10 @@ proc startRestServer(app: App, address: ValidIpAddress, port: Port, conf: WakuNo app.node.wakuFilterClient != nil and app.node.wakuFilterClientLegacy != nil: - let legacyFilterCache = rest_legacy_filter_api.MessageCache.init() + let legacyFilterCache = MessageCache.init() rest_legacy_filter_api.installLegacyFilterRestApiHandlers(server.router, app.node, legacyFilterCache) - let filterCache = rest_filter_api.MessageCache.init() + let filterCache = MessageCache.init() let filterDiscoHandler = if app.wakuDiscv5.isSome(): @@ -765,23 +764,22 @@ proc startRpcServer(app: App, address: ValidIpAddress, port: Port, conf: WakuNod installDebugApiHandlers(app.node, server) if conf.relay: - let cache = MessageCache[string].init(capacity=30) + let cache = MessageCache.init(capacity=50) let handler = messageCacheHandler(cache) - let autoHandler = autoMessageCacheHandler(cache) for pubsubTopic in conf.pubsubTopics: - cache.subscribe(pubsubTopic) + cache.pubsubSubscribe(pubsubTopic) app.node.subscribe((kind: PubsubSub, topic: pubsubTopic), some(handler)) for contentTopic in conf.contentTopics: - cache.subscribe(contentTopic) - app.node.subscribe((kind: ContentSub, topic: contentTopic), some(autoHandler)) + cache.contentSubscribe(contentTopic) + app.node.subscribe((kind: ContentSub, topic: contentTopic), some(handler)) installRelayApiHandlers(app.node, server, cache) if conf.filternode != "": - let filterMessageCache = rpc_filter_api.MessageCache.init(capacity=30) + let filterMessageCache = MessageCache.init(capacity=50) installFilterApiHandlers(app.node, server, filterMessageCache) installStoreApiHandlers(app.node, server) diff --git a/tests/test_message_cache.nim b/tests/test_message_cache.nim index b9dc691838..98a0c997ce 100644 --- a/tests/test_message_cache.nim +++ b/tests/test_message_cache.nim @@ -1,153 +1,217 @@ {.used.} import + std/sets, stew/[results, byteutils], - testutils/unittests, - chronicles + testutils/unittests import ../../waku/waku_core, ../../waku/waku_api/message_cache, - ./testlib/common, ./testlib/wakucore - -type TestMessageCache = MessageCache[(PubsubTopic, ContentTopic)] - suite "MessageCache": - test "subscribe to topic": + setup: ## Given - let testTopic = (PubsubTopic("test-pubsub-topic"), ContentTopic("test-content-topic")) - let cache = TestMessageCache.init() + let capacity = 3 + let testPubsubTopic = DefaultPubsubTopic + let testContentTopic = DefaultContentTopic + let cache = MessageCache.init(capacity) + test "subscribe to topic": ## When - cache.subscribe(testTopic) + cache.pubsubSubscribe(testPubsubTopic) + cache.pubsubSubscribe(testPubsubTopic) + + # idempotence of subscribe is also tested + cache.contentSubscribe(testContentTopic) + cache.contentSubscribe(testContentTopic) ## Then check: - cache.isSubscribed(testTopic) - + cache.isPubsubSubscribed(testPubsubTopic) + cache.isContentSubscribed(testContentTopic) + cache.pubsubTopicCount() == 1 + cache.contentTopicCount() == 1 test "unsubscribe from topic": - ## Given - let testTopic = (PubsubTopic("test-pubsub-topic"), ContentTopic("test-content-topic")) - let cache = TestMessageCache.init() - # Init cache content - cache.subscribe(testTopic) + cache.pubsubSubscribe(testPubsubTopic) + cache.contentSubscribe(testContentTopic) + + cache.pubsubSubscribe("AnotherPubsubTopic") + cache.contentSubscribe("AnotherContentTopic") ## When - cache.unsubscribe(testTopic) + cache.pubsubUnsubscribe(testPubsubTopic) + cache.contentUnsubscribe(testContentTopic) ## Then check: - not cache.isSubscribed(testTopic) - + not cache.isPubsubSubscribed(testPubsubTopic) + not cache.isContentSubscribed(testContentTopic) + cache.pubsubTopicCount() == 1 + cache.contentTopicCount() == 1 test "get messages of a subscribed topic": ## Given - let testTopic = (PubsubTopic("test-pubsub-topic"), ContentTopic("test-content-topic")) let testMessage = fakeWakuMessage() - let cache = TestMessageCache.init() # Init cache content - cache.subscribe(testTopic) - cache.addMessage(testTopic, testMessage) + cache.pubsubSubscribe(testPubsubTopic) + cache.addMessage(testPubsubTopic, testMessage) ## When - let res = cache.getMessages(testTopic) + let res = cache.getMessages(testPubsubTopic) ## Then check: res.isOk() res.get() == @[testMessage] - test "get messages with clean flag shoud clear the messages cache": ## Given - let testTopic = (PubsubTopic("test-pubsub-topic"), ContentTopic("test-content-topic")) let testMessage = fakeWakuMessage() - let cache = TestMessageCache.init() # Init cache content - cache.subscribe(testTopic) - cache.addMessage(testTopic, testMessage) + cache.pubsubSubscribe(testPubsubTopic) + cache.addMessage(testPubsubTopic, testMessage) ## When - var res = cache.getMessages(testTopic, clear=true) + var res = cache.getMessages(testPubsubTopic, clear=true) require(res.isOk()) - res = cache.getMessages(testTopic) + res = cache.getMessages(testPubsubTopic) ## Then check: res.isOk() res.get().len == 0 - test "get messages of a non-subscribed topic": - ## Given - let testTopic = (PubsubTopic("test-pubsub-topic"), ContentTopic("test-content-topic")) - let cache = TestMessageCache.init() - ## When - let res = cache.getMessages(testTopic) + cache.pubsubSubscribe(PubsubTopic("dummyPubsub")) + let res = cache.getMessages(testPubsubTopic) ## Then check: res.isErr() - res.error() == "Not subscribed to topic" - + res.error() == "not subscribed to this pubsub topic" test "add messages to subscribed topic": ## Given - let testTopic = (PubsubTopic("test-pubsub-topic"), ContentTopic("test-content-topic")) let testMessage = fakeWakuMessage() - let cache = TestMessageCache.init() - cache.subscribe(testTopic) + cache.pubsubSubscribe(testPubsubTopic) ## When - cache.addMessage(testTopic, testMessage) + cache.addMessage(testPubsubTopic, testMessage) ## Then - let messages = cache.getMessages(testTopic).tryGet() + let messages = cache.getMessages(testPubsubTopic).tryGet() check: messages == @[testMessage] - test "add messages to non-subscribed topic": ## Given - let testTopic = (PubsubTopic("test-pubsub-topic"), ContentTopic("test-content-topic")) let testMessage = fakeWakuMessage() - let cache = TestMessageCache.init() ## When - cache.addMessage(testTopic, testMessage) + cache.addMessage(testPubsubTopic, testMessage) ## Then - let res = cache.getMessages(testTopic) + let res = cache.getMessages(testPubsubTopic) check: res.isErr() - res.error() == "Not subscribed to topic" - + res.error() == "not subscribed to any pubsub topics" test "add messages beyond the capacity": ## Given - let testTopic = (PubsubTopic("test-pubsub-topic"), ContentTopic("test-content-topic")) - let testMessages = @[ - fakeWakuMessage(toBytes("MSG-1")), - fakeWakuMessage(toBytes("MSG-2")), - fakeWakuMessage(toBytes("MSG-3")) - ] + var testMessages = @[fakeWakuMessage(toBytes("MSG-1"))] + + # Prevent duplicate messages timestamp + for i in 0..<5: + var msg = fakeWakuMessage(toBytes("MSG-1")) - let cache = TestMessageCache.init(capacity = 2) - cache.subscribe(testTopic) + while msg.timestamp <= testMessages[i].timestamp: + msg = fakeWakuMessage(toBytes("MSG-1")) + + testMessages.add(msg) + + cache.pubsubSubscribe(testPubsubTopic) ## When for msg in testMessages: - cache.addMessage(testTopic, msg) + cache.addMessage(testPubsubTopic, msg) ## Then - let messages = cache.getMessages(testTopic).tryGet() + let messages = cache.getMessages(testPubsubTopic).tryGet() + let messageSet = toHashSet(messages) + + let testSet = toHashSet(testMessages) + + check: + messageSet.len == capacity + messageSet < testSet + testMessages[0] notin messages + + test "get messages on pubsub via content topics": + cache.pubsubSubscribe(testPubsubTopic) + + let fakeMessage = fakeWakuMessage() + + cache.addMessage(testPubsubTopic, fakeMessage) + + let getRes = cache.getAutoMessages(DefaultContentTopic) + + check: + getRes.isOk + getRes.get() == @[fakeMessage] + + test "add same message twice": + cache.pubsubSubscribe(testPubsubTopic) + + let fakeMessage = fakeWakuMessage() + + cache.addMessage(testPubsubTopic, fakeMessage) + cache.addMessage(testPubsubTopic, fakeMessage) + + check: + cache.messagesCount() == 1 + + test "unsubscribing remove messages": + let topic0 = "PubsubTopic0" + let topic1 = "PubsubTopic1" + let topic2 = "PubsubTopic2" + + let fakeMessage0 = fakeWakuMessage(toBytes("MSG-0")) + let fakeMessage1 = fakeWakuMessage(toBytes("MSG-1")) + let fakeMessage2 = fakeWakuMessage(toBytes("MSG-2")) + + cache.pubsubSubscribe(topic0) + cache.pubsubSubscribe(topic1) + cache.pubsubSubscribe(topic2) + cache.contentSubscribe("ContentTopic0") + + cache.addMessage(topic0, fakeMessage0) + cache.addMessage(topic1, fakeMessage1) + cache.addMessage(topic2, fakeMessage2) + + cache.pubsubUnsubscribe(topic0) + + # at this point, fakeMessage0 is only ref by DefaultContentTopic + + let res = cache.getAutoMessages(DefaultContentTopic) + + check: + res.isOk() + res.get().len == 3 + cache.isPubsubSubscribed(topic0) == false + cache.isPubsubSubscribed(topic1) == true + cache.isPubsubSubscribed(topic2) == true + + cache.contentUnsubscribe(DefaultContentTopic) + + # msg0 was delete because no refs + check: - messages == testMessages[1..2] + cache.messagesCount() == 2 \ No newline at end of file diff --git a/tests/wakunode_jsonrpc/test_jsonrpc_filter.nim b/tests/wakunode_jsonrpc/test_jsonrpc_filter.nim index 0c95626b08..b82d55407a 100644 --- a/tests/wakunode_jsonrpc/test_jsonrpc_filter.nim +++ b/tests/wakunode_jsonrpc/test_jsonrpc_filter.nim @@ -4,8 +4,6 @@ import std/options, stew/shims/net as stewNet, testutils/unittests, - chronicles, - libp2p/crypto/crypto, json_rpc/[rpcserver, rpcclient] import ../../../waku/waku_core, @@ -20,11 +18,6 @@ import ../testlib/wakucore, ../testlib/wakunode - -proc newTestMessageCache(): filter_api.MessageCache = - filter_api.MessageCache.init(capacity=30) - - procSuite "Waku v2 JSON-RPC API - Filter": let bindIp = ValidIpAddress.init("0.0.0.0") @@ -49,7 +42,8 @@ procSuite "Waku v2 JSON-RPC API - Filter": ta = initTAddress(bindIp, rpcPort) server = newRpcHttpServer([ta]) - installFilterApiHandlers(node2, server, newTestMessageCache()) + let cache = MessageCache.init(capacity=30) + installFilterApiHandlers(node2, server, cache) server.start() let client = newRpcHttpClient() diff --git a/tests/wakunode_jsonrpc/test_jsonrpc_relay.nim b/tests/wakunode_jsonrpc/test_jsonrpc_relay.nim index e99e2edaa8..08c94b8514 100644 --- a/tests/wakunode_jsonrpc/test_jsonrpc_relay.nim +++ b/tests/wakunode_jsonrpc/test_jsonrpc_relay.nim @@ -4,7 +4,6 @@ import std/[options, sequtils, tempfiles], stew/shims/net as stewNet, testutils/unittests, - chronicles, libp2p/crypto/crypto, json_rpc/[rpcserver, rpcclient] import @@ -15,10 +14,8 @@ import ../../../waku/waku_node, ../../../waku/waku_api/jsonrpc/relay/handlers as relay_api, ../../../waku/waku_api/jsonrpc/relay/client as relay_api_client, - ../../../waku/waku_core, ../../../waku/waku_relay, ../../../waku/waku_rln_relay, - ../testlib/common, ../testlib/wakucore, ../testlib/wakunode @@ -37,7 +34,7 @@ suite "Waku v2 JSON-RPC API - Relay": ta = initTAddress(ValidIpAddress.init("0.0.0.0"), rpcPort) server = newRpcHttpServer([ta]) - let cache = MessageCache[string].init(capacity=30) + let cache = MessageCache.init(capacity=30) installRelayApiHandlers(node, server, cache) server.start() @@ -111,7 +108,7 @@ suite "Waku v2 JSON-RPC API - Relay": ta = initTAddress(ValidIpAddress.init("0.0.0.0"), rpcPort) server = newRpcHttpServer([ta]) - let cache = MessageCache[string].init(capacity=30) + let cache = MessageCache.init(capacity=30) installRelayApiHandlers(srcNode, server, cache) server.start() @@ -181,7 +178,7 @@ suite "Waku v2 JSON-RPC API - Relay": ta = initTAddress(ValidIpAddress.init("0.0.0.0"), rpcPort) server = newRpcHttpServer([ta]) - let cache = MessageCache[string].init(capacity=30) + let cache = MessageCache.init(capacity=30) installRelayApiHandlers(dstNode, server, cache) server.start() @@ -244,7 +241,7 @@ suite "Waku v2 JSON-RPC API - Relay": ta = initTAddress(ValidIpAddress.init("0.0.0.0"), rpcPort) server = newRpcHttpServer([ta]) - let cache = MessageCache[string].init(capacity=30) + let cache = MessageCache.init(capacity=30) installRelayApiHandlers(dstNode, server, cache) server.start() diff --git a/tests/wakunode_rest/test_rest_filter.nim b/tests/wakunode_rest/test_rest_filter.nim index 6170e9ce8e..d6ab93525d 100644 --- a/tests/wakunode_rest/test_rest_filter.nim +++ b/tests/wakunode_rest/test_rest_filter.nim @@ -1,7 +1,6 @@ {.used.} import - std/sequtils, stew/byteutils, stew/shims/net, testutils/unittests, @@ -9,7 +8,6 @@ import libp2p/crypto/crypto import ../../waku/waku_api/message_cache, - ../../waku/common/base64, ../../waku/waku_core, ../../waku/waku_node, ../../waku/node/peer_manager, @@ -44,7 +42,7 @@ type RestFilterTest = object subscriberNode: WakuNode restServer: RestServerRef restServerForService: RestServerRef - messageCache: filter_api.MessageCache + messageCache: MessageCache client: RestClientRef clientTwdServiceNode: RestClientRef @@ -70,10 +68,10 @@ proc init(T: type RestFilterTest): Future[T] {.async.} = testSetup.restServerForService = RestServerRef.init(restAddress, restPort2).tryGet() # through this one we will see if messages are pushed according to our content topic sub - testSetup.messageCache = filter_api.MessageCache.init() + testSetup.messageCache = MessageCache.init() installFilterRestApiHandlers(testSetup.restServer.router, testSetup.subscriberNode, testSetup.messageCache) - let topicCache = MessageCache[string].init() + let topicCache = MessageCache.init() installRelayApiHandlers(testSetup.restServerForService.router, testSetup.serviceNode, topicCache) testSetup.restServer.start() @@ -242,7 +240,7 @@ suite "Waku v2 Rest API - Filter V2": restFilterTest = await RestFilterTest.init() subPeerId = restFilterTest.subscriberNode.peerInfo.toRemotePeerInfo().peerId - restFilterTest.messageCache.subscribe(DefaultPubsubTopic) + restFilterTest.messageCache.pubsubSubscribe(DefaultPubsubTopic) restFilterTest.serviceNode.subscribe((kind: PubsubSub, topic: DefaultPubsubTopic)) # When @@ -272,7 +270,7 @@ suite "Waku v2 Rest API - Filter V2": toRelayWakuMessage(testMessage) ) # Then - let messages = restFilterTest.messageCache.getMessages("1").tryGet() + let messages = restFilterTest.messageCache.getAutoMessages("1").tryGet() check: postMsgResponse.status == 200 diff --git a/tests/wakunode_rest/test_rest_legacy_filter.nim b/tests/wakunode_rest/test_rest_legacy_filter.nim index b26dbef8ff..800c13b33d 100644 --- a/tests/wakunode_rest/test_rest_legacy_filter.nim +++ b/tests/wakunode_rest/test_rest_legacy_filter.nim @@ -39,7 +39,7 @@ type RestFilterTest = object filterNode: WakuNode clientNode: WakuNode restServer: RestServerRef - messageCache: filter_api.MessageCache + messageCache: MessageCache client: RestClientRef @@ -59,7 +59,7 @@ proc setupRestFilter(): Future[RestFilterTest] {.async.} = let restAddress = ValidIpAddress.init("0.0.0.0") result.restServer = RestServerRef.init(restAddress, restPort).tryGet() - result.messageCache = filter_api.MessageCache.init() + result.messageCache = MessageCache.init() installLegacyFilterRestApiHandlers(result.restServer.router ,result.clientNode ,result.messageCache) @@ -100,10 +100,10 @@ suite "Waku v2 Rest API - Filter": response.data == "OK" check: - restFilterTest.messageCache.isSubscribed(DefaultContentTopic) - restFilterTest.messageCache.isSubscribed("2") - restFilterTest.messageCache.isSubscribed("3") - restFilterTest.messageCache.isSubscribed("4") + restFilterTest.messageCache.isContentSubscribed(DefaultContentTopic) + restFilterTest.messageCache.isContentSubscribed("2") + restFilterTest.messageCache.isContentSubscribed("3") + restFilterTest.messageCache.isContentSubscribed("4") # When - error case let badRequestBody = FilterLegacySubscribeRequest(contentFilters: @[] @@ -125,10 +125,10 @@ suite "Waku v2 Rest API - Filter": restFilterTest: RestFilterTest = await setupRestFilter() # When - restFilterTest.messageCache.subscribe("1") - restFilterTest.messageCache.subscribe("2") - restFilterTest.messageCache.subscribe("3") - restFilterTest.messageCache.subscribe("4") + restFilterTest.messageCache.contentSubscribe("1") + restFilterTest.messageCache.contentSubscribe("2") + restFilterTest.messageCache.contentSubscribe("3") + restFilterTest.messageCache.contentSubscribe("4") let contentFilters = @[ContentTopic("1") ,ContentTopic("2") @@ -148,10 +148,10 @@ suite "Waku v2 Rest API - Filter": response.data == "OK" check: - not restFilterTest.messageCache.isSubscribed("1") - not restFilterTest.messageCache.isSubscribed("2") - not restFilterTest.messageCache.isSubscribed("3") - restFilterTest.messageCache.isSubscribed("4") + not restFilterTest.messageCache.isContentSubscribed("1") + not restFilterTest.messageCache.isContentSubscribed("2") + not restFilterTest.messageCache.isContentSubscribed("3") + restFilterTest.messageCache.isContentSubscribed("4") await restFilterTest.shutdown() @@ -164,15 +164,22 @@ suite "Waku v2 Rest API - Filter": let pubSubTopic = "/waku/2/default-waku/proto" let contentTopic = ContentTopic( "content-topic-x" ) - let messages = @[ - fakeWakuMessage(contentTopic = "content-topic-x", payload = toBytes("TEST-1")), - fakeWakuMessage(contentTopic = "content-topic-x", payload = toBytes("TEST-1")), - fakeWakuMessage(contentTopic = "content-topic-x", payload = toBytes("TEST-1")), + var messages = @[ + fakeWakuMessage(contentTopic = "content-topic-x", payload = toBytes("TEST-1")) ] - restFilterTest.messageCache.subscribe(contentTopic) + # Prevent duplicate messages + for i in 0..<2: + var msg = fakeWakuMessage(contentTopic = "content-topic-x", payload = toBytes("TEST-1")) + + while msg == messages[i]: + msg = fakeWakuMessage(contentTopic = "content-topic-x", payload = toBytes("TEST-1")) + + messages.add(msg) + + restFilterTest.messageCache.contentSubscribe(contentTopic) for msg in messages: - restFilterTest.messageCache.addMessage(contentTopic, msg) + restFilterTest.messageCache.addMessage(pubSubTopic, msg) # When let response = await restFilterTest.client.filterGetMessagesV1(contentTopic) diff --git a/tests/wakunode_rest/test_rest_relay.nim b/tests/wakunode_rest/test_rest_relay.nim index e3fc2130bf..3554253aa1 100644 --- a/tests/wakunode_rest/test_rest_relay.nim +++ b/tests/wakunode_rest/test_rest_relay.nim @@ -44,7 +44,7 @@ suite "Waku v2 Rest API - Relay": let restAddress = ValidIpAddress.init("0.0.0.0") let restServer = RestServerRef.init(restAddress, restPort).tryGet() - let cache = MessageCache[string].init() + let cache = MessageCache.init() installRelayApiHandlers(restServer.router, node, cache) restServer.start() @@ -66,9 +66,9 @@ suite "Waku v2 Rest API - Relay": response.data == "OK" check: - cache.isSubscribed("pubsub-topic-1") - cache.isSubscribed("pubsub-topic-2") - cache.isSubscribed("pubsub-topic-3") + cache.isPubsubSubscribed("pubsub-topic-1") + cache.isPubsubSubscribed("pubsub-topic-2") + cache.isPubsubSubscribed("pubsub-topic-3") check: toSeq(node.wakuRelay.subscribedTopics).len == pubSubTopics.len @@ -92,11 +92,11 @@ suite "Waku v2 Rest API - Relay": let restAddress = ValidIpAddress.init("0.0.0.0") let restServer = RestServerRef.init(restAddress, restPort).tryGet() - let cache = MessageCache[string].init() - cache.subscribe("pubsub-topic-1") - cache.subscribe("pubsub-topic-2") - cache.subscribe("pubsub-topic-3") - cache.subscribe("pubsub-topic-x") + let cache = MessageCache.init() + cache.pubsubSubscribe("pubsub-topic-1") + cache.pubsubSubscribe("pubsub-topic-2") + cache.pubsubSubscribe("pubsub-topic-3") + cache.pubsubSubscribe("pubsub-topic-x") installRelayApiHandlers(restServer.router, node, cache) restServer.start() @@ -119,15 +119,15 @@ suite "Waku v2 Rest API - Relay": response.data == "OK" check: - not cache.isSubscribed("pubsub-topic-1") + not cache.isPubsubSubscribed("pubsub-topic-1") not node.wakuRelay.isSubscribed("pubsub-topic-1") - not cache.isSubscribed("pubsub-topic-2") + not cache.isPubsubSubscribed("pubsub-topic-2") not node.wakuRelay.isSubscribed("pubsub-topic-2") - not cache.isSubscribed("pubsub-topic-3") + not cache.isPubsubSubscribed("pubsub-topic-3") not node.wakuRelay.isSubscribed("pubsub-topic-3") - cache.isSubscribed("pubsub-topic-x") + cache.isPubsubSubscribed("pubsub-topic-x") node.wakuRelay.isSubscribed("pubsub-topic-x") - not cache.isSubscribed("pubsub-topic-y") + not cache.isPubsubSubscribed("pubsub-topic-y") not node.wakuRelay.isSubscribed("pubsub-topic-y") await restServer.stop() @@ -145,15 +145,23 @@ suite "Waku v2 Rest API - Relay": let restServer = RestServerRef.init(restAddress, restPort).tryGet() let pubSubTopic = "/waku/2/default-waku/proto" - let messages = @[ - fakeWakuMessage(contentTopic = "content-topic-x", payload = toBytes("TEST-1")), - fakeWakuMessage(contentTopic = "content-topic-x", payload = toBytes("TEST-1")), - fakeWakuMessage(contentTopic = "content-topic-x", payload = toBytes("TEST-1")), + + var messages = @[ + fakeWakuMessage(contentTopic = "content-topic-x", payload = toBytes("TEST-1")) ] - let cache = MessageCache[string].init() + # Prevent duplicate messages + for i in 0..<2: + var msg = fakeWakuMessage(contentTopic = "content-topic-x", payload = toBytes("TEST-1")) - cache.subscribe(pubSubTopic) + while msg == messages[i]: + msg = fakeWakuMessage(contentTopic = "content-topic-x", payload = toBytes("TEST-1")) + + messages.add(msg) + + let cache = MessageCache.init() + + cache.pubsubSubscribe(pubSubTopic) for msg in messages: cache.addMessage(pubSubTopic, msg) @@ -177,7 +185,7 @@ suite "Waku v2 Rest API - Relay": check: - cache.isSubscribed(pubSubTopic) + cache.isPubsubSubscribed(pubSubTopic) cache.getMessages(pubSubTopic).tryGet().len == 0 await restServer.stop() @@ -199,7 +207,7 @@ suite "Waku v2 Rest API - Relay": let restAddress = ValidIpAddress.init("0.0.0.0") let restServer = RestServerRef.init(restAddress, restPort).tryGet() - let cache = MessageCache[string].init() + let cache = MessageCache.init() installRelayApiHandlers(restServer.router, node, cache) restServer.start() @@ -239,7 +247,7 @@ suite "Waku v2 Rest API - Relay": let restAddress = ValidIpAddress.init("0.0.0.0") let restServer = RestServerRef.init(restAddress, restPort).tryGet() - let cache = MessageCache[string].init() + let cache = MessageCache.init() installRelayApiHandlers(restServer.router, node, cache) restServer.start() @@ -263,9 +271,9 @@ suite "Waku v2 Rest API - Relay": response.data == "OK" check: - cache.isSubscribed(contentTopics[0]) - cache.isSubscribed(contentTopics[1]) - cache.isSubscribed(contentTopics[2]) + cache.isContentSubscribed(contentTopics[0]) + cache.isContentSubscribed(contentTopics[1]) + cache.isContentSubscribed(contentTopics[2]) check: # Node should be subscribed to all shards @@ -292,11 +300,11 @@ suite "Waku v2 Rest API - Relay": ContentTopic("/waku/2/default-contentX/proto") ] - let cache = MessageCache[string].init() - cache.subscribe(contentTopics[0]) - cache.subscribe(contentTopics[1]) - cache.subscribe(contentTopics[2]) - cache.subscribe("/waku/2/default-contentY/proto") + let cache = MessageCache.init() + cache.contentSubscribe(contentTopics[0]) + cache.contentSubscribe(contentTopics[1]) + cache.contentSubscribe(contentTopics[2]) + cache.contentSubscribe("/waku/2/default-contentY/proto") installRelayApiHandlers(restServer.router, node, cache) restServer.start() @@ -312,10 +320,10 @@ suite "Waku v2 Rest API - Relay": response.data == "OK" check: - not cache.isSubscribed(contentTopics[1]) - not cache.isSubscribed(contentTopics[2]) - not cache.isSubscribed(contentTopics[3]) - cache.isSubscribed("/waku/2/default-contentY/proto") + not cache.isContentSubscribed(contentTopics[1]) + not cache.isContentSubscribed(contentTopics[2]) + not cache.isContentSubscribed(contentTopics[3]) + cache.isContentSubscribed("/waku/2/default-contentY/proto") await restServer.stop() await restServer.closeWait() @@ -332,17 +340,25 @@ suite "Waku v2 Rest API - Relay": let restServer = RestServerRef.init(restAddress, restPort).tryGet() let contentTopic = DefaultContentTopic - let messages = @[ - fakeWakuMessage(contentTopic = DefaultContentTopic, payload = toBytes("TEST-1")), - fakeWakuMessage(contentTopic = DefaultContentTopic, payload = toBytes("TEST-1")), - fakeWakuMessage(contentTopic = DefaultContentTopic, payload = toBytes("TEST-1")), + + var messages = @[ + fakeWakuMessage(contentTopic = DefaultContentTopic, payload = toBytes("TEST-1")) ] - let cache = MessageCache[string].init() + # Prevent duplicate messages + for i in 0..<2: + var msg = fakeWakuMessage(contentTopic = DefaultContentTopic, payload = toBytes("TEST-1")) + + while msg == messages[i]: + msg = fakeWakuMessage(contentTopic = DefaultContentTopic, payload = toBytes("TEST-1")) + + messages.add(msg) + + let cache = MessageCache.init() - cache.subscribe(contentTopic) + cache.contentSubscribe(contentTopic) for msg in messages: - cache.addMessage(contentTopic, msg) + cache.addMessage(DefaultPubsubTopic, msg) installRelayApiHandlers(restServer.router, node, cache) restServer.start() @@ -363,8 +379,8 @@ suite "Waku v2 Rest API - Relay": msg.timestamp.get() != Timestamp(0) check: - cache.isSubscribed(contentTopic) - cache.getMessages(contentTopic).tryGet().len == 0 # The cache is cleared when getMessage is called + cache.isContentSubscribed(contentTopic) + cache.getAutoMessages(contentTopic).tryGet().len == 0 # The cache is cleared when getMessage is called await restServer.stop() await restServer.closeWait() @@ -385,7 +401,7 @@ suite "Waku v2 Rest API - Relay": let restAddress = ValidIpAddress.init("0.0.0.0") let restServer = RestServerRef.init(restAddress, restPort).tryGet() - let cache = MessageCache[string].init() + let cache = MessageCache.init() installRelayApiHandlers(restServer.router, node, cache) restServer.start() diff --git a/waku/waku_api/handlers.nim b/waku/waku_api/handlers.nim index 075c5959b2..dfbfca76d5 100644 --- a/waku/waku_api/handlers.nim +++ b/waku/waku_api/handlers.nim @@ -40,11 +40,6 @@ proc defaultDiscoveryHandler*(discv5: WakuDiscoveryV5, cap: Capabilities): Disco ### Message Cache -proc messageCacheHandler*(cache: MessageCache[string]): WakuRelayHandler = +proc messageCacheHandler*(cache: MessageCache): WakuRelayHandler = return proc(pubsubTopic: string, msg: WakuMessage): Future[void] {.async, closure.} = - cache.addMessage(PubSubTopic(pubsubTopic), msg) - -proc autoMessageCacheHandler*(cache: MessageCache[string]): WakuRelayHandler = - return proc(pubsubTopic: string, msg: WakuMessage): Future[void] {.async, closure.} = - if cache.isSubscribed(msg.contentTopic): - cache.addMessage(msg.contentTopic, msg) \ No newline at end of file + cache.addMessage(pubsubTopic, msg) \ No newline at end of file diff --git a/waku/waku_api/jsonrpc/filter/handlers.nim b/waku/waku_api/jsonrpc/filter/handlers.nim index df7e459cfb..23f5aaa76c 100644 --- a/waku/waku_api/jsonrpc/filter/handlers.nim +++ b/waku/waku_api/jsonrpc/filter/handlers.nim @@ -24,11 +24,6 @@ logScope: const futTimeout* = 5.seconds # Max time to wait for futures - -type - MessageCache* = message_cache.MessageCache[ContentTopic] - - proc installFilterApiHandlers*(node: WakuNode, server: RpcServer, cache: MessageCache) = server.rpc("post_waku_v2_filter_v1_subscription") do (contentFilters: seq[ContentFilter], pubsubTopic: Option[PubsubTopic]) -> bool: @@ -42,7 +37,7 @@ proc installFilterApiHandlers*(node: WakuNode, server: RpcServer, cache: Message let contentTopics: seq[ContentTopic] = contentFilters.mapIt(it.contentTopic) let handler: FilterPushHandler = proc(pubsubTopic: PubsubTopic, msg: WakuMessage) {.async, gcsafe, closure.} = - cache.addMessage(msg.contentTopic, msg) + cache.addMessage(pubsubTopic, msg) let subFut = node.legacyFilterSubscribe(pubsubTopic, contentTopics, handler, peerOpt.get()) if not await subFut.withTimeout(futTimeout): @@ -50,7 +45,7 @@ proc installFilterApiHandlers*(node: WakuNode, server: RpcServer, cache: Message # Successfully subscribed to all content filters for cTopic in contentTopics: - cache.subscribe(cTopic) + cache.contentSubscribe(cTopic) return true @@ -69,7 +64,7 @@ proc installFilterApiHandlers*(node: WakuNode, server: RpcServer, cache: Message raise newException(ValueError, "Failed to unsubscribe from contentFilters") for cTopic in contentTopics: - cache.unsubscribe(cTopic) + cache.contentUnsubscribe(cTopic) return true @@ -78,7 +73,7 @@ proc installFilterApiHandlers*(node: WakuNode, server: RpcServer, cache: Message ## last time this method was called debug "get_waku_v2_filter_v1_messages", contentTopic=contentTopic - if not cache.isSubscribed(contentTopic): + if not cache.isContentSubscribed(contentTopic): raise newException(ValueError, "Not subscribed to topic: " & contentTopic) let msgRes = cache.getMessages(contentTopic, clear=true) diff --git a/waku/waku_api/jsonrpc/relay/handlers.nim b/waku/waku_api/jsonrpc/relay/handlers.nim index 15205f3bc8..e57518b598 100644 --- a/waku/waku_api/jsonrpc/relay/handlers.nim +++ b/waku/waku_api/jsonrpc/relay/handlers.nim @@ -32,7 +32,7 @@ const futTimeout* = 5.seconds # Max time to wait for futures ## Waku Relay JSON-RPC API -proc installRelayApiHandlers*(node: WakuNode, server: RpcServer, cache: MessageCache[string]) = +proc installRelayApiHandlers*(node: WakuNode, server: RpcServer, cache: MessageCache) = server.rpc("post_waku_v2_relay_v1_subscriptions") do (pubsubTopics: seq[PubsubTopic]) -> bool: if pubsubTopics.len == 0: raise newException(ValueError, "No pubsub topic provided") @@ -41,13 +41,13 @@ proc installRelayApiHandlers*(node: WakuNode, server: RpcServer, cache: MessageC debug "post_waku_v2_relay_v1_subscriptions" # Subscribe to all requested topics - let newTopics = pubsubTopics.filterIt(not cache.isSubscribed(it)) + let newTopics = pubsubTopics.filterIt(not cache.isPubsubSubscribed(it)) for pubsubTopic in newTopics: if pubsubTopic == "": raise newException(ValueError, "Empty pubsub topic") - cache.subscribe(pubsubTopic) + cache.pubsubSubscribe(pubsubTopic) node.subscribe((kind: PubsubSub, topic: pubsubTopic), some(messageCacheHandler(cache))) return true @@ -60,13 +60,13 @@ proc installRelayApiHandlers*(node: WakuNode, server: RpcServer, cache: MessageC debug "delete_waku_v2_relay_v1_subscriptions" # Unsubscribe all handlers from requested topics - let subscribedTopics = pubsubTopics.filterIt(cache.isSubscribed(it)) + let subscribedTopics = pubsubTopics.filterIt(cache.isPubsubSubscribed(it)) for pubsubTopic in subscribedTopics: if pubsubTopic == "": raise newException(ValueError, "Empty pubsub topic") - cache.unsubscribe(pubsubTopic) + cache.pubsubUnsubscribe(pubsubTopic) node.unsubscribe((kind: PubsubUnsub, topic: pubsubTopic)) return true @@ -148,15 +148,15 @@ proc installRelayApiHandlers*(node: WakuNode, server: RpcServer, cache: MessageC ## Subscribes a node to a list of Content topics debug "post_waku_v2_relay_v1_auto_subscriptions" - let newTopics = contentTopics.filterIt(not cache.isSubscribed(it)) + let newTopics = contentTopics.filterIt(not cache.isContentSubscribed(it)) # Subscribe to all requested topics for contentTopic in newTopics: if contentTopic == "": raise newException(ValueError, "Empty content topic") - cache.subscribe(contentTopic) - node.subscribe((kind: ContentSub, topic: contentTopic), some(autoMessageCacheHandler(cache))) + cache.contentSubscribe(contentTopic) + node.subscribe((kind: ContentSub, topic: contentTopic), some(messageCacheHandler(cache))) return true @@ -167,14 +167,14 @@ proc installRelayApiHandlers*(node: WakuNode, server: RpcServer, cache: MessageC ## Unsubscribes a node from a list of Content topics debug "delete_waku_v2_relay_v1_auto_subscriptions" - let subscribedTopics = contentTopics.filterIt(cache.isSubscribed(it)) + let subscribedTopics = contentTopics.filterIt(cache.isContentSubscribed(it)) # Unsubscribe all handlers from requested topics for contentTopic in subscribedTopics: if contentTopic == "": raise newException(ValueError, "Empty content topic") - cache.unsubscribe(contentTopic) + cache.contentUnsubscribe(contentTopic) node.unsubscribe((kind: ContentUnsub, topic: contentTopic)) return true @@ -232,7 +232,7 @@ proc installRelayApiHandlers*(node: WakuNode, server: RpcServer, cache: MessageC ## last time this method was called debug "get_waku_v2_relay_v1_auto_messages", topic=contentTopic - let msgRes = cache.getMessages(contentTopic, clear=true) + let msgRes = cache.getAutoMessages(contentTopic, clear=true) if msgRes.isErr(): raise newException(ValueError, "Not subscribed to content topic: " & contentTopic) diff --git a/waku/waku_api/message_cache.nim b/waku/waku_api/message_cache.nim index dd0af17404..fe2bbd77c4 100644 --- a/waku/waku_api/message_cache.nim +++ b/waku/waku_api/message_cache.nim @@ -4,7 +4,7 @@ else: {.push raises: [].} import - std/[tables, sequtils], + std/[sequtils, sugar, algorithm, options], stew/results, chronicles, chronos, @@ -15,68 +15,274 @@ import logScope: topics = "waku node message_cache" -const DefaultMessageCacheCapacity*: uint = 30 # Max number of messages cached per topic @TODO make this configurable +const DefaultMessageCacheCapacity: int = 50 +type MessageCache* = ref object + pubsubTopics: seq[PubsubTopic] + contentTopics: seq[ContentTopic] -type MessageCacheResult*[T] = Result[T, cstring] + pubsubIndex: seq[tuple[pubsubIdx: int, msgIdx: int]] + contentIndex: seq[tuple[contentIdx: int, msgIdx: int]] -type MessageCache*[K] = ref object - capacity: uint - table: Table[K, seq[WakuMessage]] + messages: seq[WakuMessage] -func init*[K](T: type MessageCache[K], capacity=DefaultMessageCacheCapacity): T = - MessageCache[K]( - capacity: capacity, - table: initTable[K, seq[WakuMessage]]() + capacity: int + +func `$`*(self: MessageCache): string = + "Messages: " & $self.messages.len & + " \nPubsubTopics: " & $self.pubsubTopics & + " \nContentTopics: " & $self.contentTopics & + " \nPubsubIndex: " & $self.pubsubIndex & + " \nContentIndex: " & $self.contentIndex + +func init*(T: type MessageCache, capacity=DefaultMessageCacheCapacity): T = + MessageCache( + capacity: capacity ) +proc messagesCount*(self: MessageCache): int = + self.messages.len -proc isSubscribed*[K](t: MessageCache[K], topic: K): bool = - t.table.hasKey(topic) +proc pubsubTopicCount*(self: MessageCache): int = + self.pubsubTopics.len -proc subscribe*[K](t: MessageCache[K], topic: K) = - if t.isSubscribed(topic): - return - t.table[topic] = @[] +proc contentTopicCount*(self: MessageCache): int = + self.contentTopics.len -proc unsubscribe*[K](t: MessageCache[K], topic: K) = - if not t.isSubscribed(topic): - return - t.table.del(topic) +proc pubsubSearch(self: MessageCache, pubsubTopic: PubsubTopic): Option[int] = + # Return some with the index if found none otherwise. + + for i, topic in self.pubsubTopics: + if topic == pubsubTopic: + return some(i) -proc unsubscribeAll*[K](t: MessageCache[K]) = - t.table.clear() + return none(int) -proc addMessage*[K](t: MessageCache, topic: K, msg: WakuMessage) = - if not t.isSubscribed(topic): - return +proc contentSearch(self: MessageCache, contentTopic: ContentTopic): Option[int] = + # Return some with the index if found none otherwise. + + for i, topic in self.contentTopics: + if topic == contentTopic: + return some(i) + + return none(int) + +proc isPubsubSubscribed*(self: MessageCache, pubsubTopic: PubsubTopic): bool = + self.pubsubSearch(pubsubTopic).isSome() + +proc isContentSubscribed*(self: MessageCache, contentTopic: ContentTopic): bool = + self.contentSearch(contentTopic).isSome() + +proc pubsubSubscribe*(self: MessageCache, pubsubTopic: PubsubTopic) = + if self.pubsubSearch(pubsubTopic).isNone(): + self.pubsubTopics.add(pubsubTopic) + +proc contentSubscribe*(self: MessageCache, contentTopic: ContentTopic) = + if self.contentSearch(contentTopic).isNone(): + self.contentTopics.add(contentTopic) + +proc removeMessage(self: MessageCache, idx: int) = + # get last index because del() is a swap + let lastIndex = self.messages.high + + self.messages.del(idx) + + # update indices + var j = self.pubsubIndex.high + while j > -1: + let (pId, mId) = self.pubsubIndex[j] + + if mId == idx: + self.pubsubIndex.del(j) + elif mId == lastIndex: + self.pubsubIndex[j] = (pId, idx) + + dec(j) + + j = self.contentIndex.high + while j > -1: + let (cId, mId) = self.contentIndex[j] + + if mId == idx: + self.contentIndex.del(j) + elif mId == lastIndex: + self.contentIndex[j] = (cId, idx) + + dec(j) + +proc pubsubUnsubscribe*(self: MessageCache, pubsubTopic: PubsubTopic) = + let pubsubIdxOp = self.pubsubSearch(pubsubTopic) + + let pubsubIdx = + if pubsubIdxOp.isSome(): pubsubIdxOp.get() + else: return + + let lastIndex = self.pubsubTopics.high + self.pubsubTopics.del(pubsubIdx) + + var msgIndices = newSeq[int](0) + + var j = self.pubsubIndex.high + while j > -1: + let (pId, mId) = self.pubsubIndex[j] + + if pId == pubsubIdx: + # remove index for this topic + self.pubsubIndex.del(j) + msgIndices.add(mId) + elif pId == lastIndex: + # swap the index because pubsubTopics.del() is a swap + self.pubsubIndex[j] = (pubsubIdx, mId) + + dec(j) + + # check if messages on this pubsub topic are indexed by any content topic, if not remove them. + for mId in msgIndices: + if not self.contentIndex.anyIt(it.msgIdx == mId): + self.removeMessage(mId) + +proc contentUnsubscribe*(self: MessageCache, contentTopic: ContentTopic) = + let contentIdxOP = self.contentSearch(contentTopic) - # Make a copy of msgs for this topic to modify - var messages = t.table.getOrDefault(topic, @[]) + let contentIdx = + if contentIdxOP.isSome(): contentIdxOP.get() + else: return - if messages.len >= t.capacity.int: - trace "Topic cache capacity reached", topic=topic - # Message cache on this topic exceeds maximum. Delete oldest. - # TODO: this may become a bottle neck if called as the norm rather than - # exception when adding messages. Performance profile needed. - messages.delete(0,0) + let lastIndex = self.contentTopics.high + self.contentTopics.del(contentIdx) + + var msgIndices = newSeq[int](0) - messages.add(msg) + var j = self.contentIndex.high + while j > -1: + let (cId, mId) = self.contentIndex[j] - # Replace indexed entry with copy - t.table[topic] = messages + if cId == contentIdx: + # remove indices for this topic + self.contentIndex.del(j) + msgIndices.add(mId) + elif cId == lastIndex: + # swap the indices because contentTopics.del() is a swap + self.contentIndex[j] = (contentIdx, mId) + + dec(j) -proc clearMessages*[K](t: MessageCache[K], topic: K) = - if not t.isSubscribed(topic): + # check if messages on this content topic are indexed by any pubsub topic, if not remove them. + for mId in msgIndices: + if not self.pubsubIndex.anyIt(it.msgIdx == mId): + self.removeMessage(mId) + +proc reset*(self: MessageCache) = + self.messages.setLen(0) + self.pubsubTopics.setLen(0) + self.contentTopics.setLen(0) + self.pubsubIndex.setLen(0) + self.contentIndex.setLen(0) + +proc addMessage*( + self: MessageCache, + pubsubTopic: PubsubTopic, + msg: WakuMessage + ) = + ## Idempotent message addition. + + var oldestTime = int64.high + var oldestMsg = int.high + for i, message in self.messages.reversed: + if message == msg: + return + + if message.timestamp < oldestTime: + oldestTime = message.timestamp + oldestMsg = i + + # reverse index + oldestMsg = self.messages.high - oldestMsg + + var pubsubIdxOp = self.pubsubSearch(pubsubTopic) + var contentIdxOp = self.contentSearch(msg.contentTopic) + + if pubsubIdxOp.isNone() and contentIdxOp.isNone(): return - t.table[topic] = @[] -proc getMessages*[K](t: MessageCache[K], topic: K, clear=false): MessageCacheResult[seq[WakuMessage]] = - if not t.isSubscribed(topic): - return err("Not subscribed to topic") + let pubsubIdx = + if pubsubIdxOp.isNone(): + self.pubsubTopics.add(pubsubTopic) + self.pubsubTopics.high + else: + pubsubIdxOp.get() + + let contentIdx = + if contentIdxOp.isNone(): + self.contentTopics.add(msg.contentTopic) + self.contentTopics.high + else: + contentIdxOp.get() + + # add the message, make space if needed + if self.messages.len >= self.capacity: + self.removeMessage(oldestMsg) + + let msgIdx = self.messages.len + self.messages.add(msg) + + self.pubsubIndex.add((pubsubIdx, msgIdx)) + self.contentIndex.add((contentIdx, msgIdx)) + +proc getMessages*( + self: MessageCache, + pubsubTopic: PubsubTopic, + clear=false + ): Result[seq[WakuMessage], string] = + ## Return all messages on this pubsub topic + + if self.pubsubTopics.len == 0: + return err("not subscribed to any pubsub topics") + + let pubsubIdxOp = self.pubsubSearch(pubsubTopic) + let pubsubIdx = + if pubsubIdxOp.isNone: + return err("not subscribed to this pubsub topic") + else: pubsubIdxOp.get() + + let msgIndices = collect: + for (pId, mId) in self.pubsubIndex: + if pId == pubsubIdx: + mId + + let messages = msgIndices.mapIt(self.messages[it]) - let messages = t.table.getOrDefault(topic, @[]) if clear: - t.clearMessages(topic) + for idx in msgIndices.reversed: + self.removeMessage(idx) + + return ok(messages) + +proc getAutoMessages*( + self: MessageCache, + contentTopic: ContentTopic, + clear=false + ): Result[seq[WakuMessage], string] = + ## Return all messages on this content topic - ok(messages) + if self.contentTopics.len == 0: + return err("not subscribed to any content topics") + + let contentIdxOp = self.contentSearch(contentTopic) + let contentIdx = + if contentIdxOp.isNone(): + return err("not subscribed to this content topic") + else: contentIdxOp.get() + + let msgIndices = collect: + for (cId, mId) in self.contentIndex: + if cId == contentIdx: + mId + + let messages = msgIndices.mapIt(self.messages[it]) + + if clear: + for idx in msgIndices.reversed: + self.removeMessage(idx) + + return ok(messages) \ No newline at end of file diff --git a/waku/waku_api/rest/filter/handlers.nim b/waku/waku_api/rest/filter/handlers.nim index 3b72d1b2d5..af2f77b257 100644 --- a/waku/waku_api/rest/filter/handlers.nim +++ b/waku/waku_api/rest/filter/handlers.nim @@ -40,10 +40,22 @@ const ROUTE_FILTER_SUBSCRIPTIONS* = "/filter/v2/subscriptions" const ROUTE_FILTER_ALL_SUBSCRIPTIONS* = "/filter/v2/subscriptions/all" -const filterMessageCacheDefaultCapacity* = 30 +func decodeRequestBody[T](contentBody: Option[ContentBody]) : Result[T, RestApiResponse] = + if contentBody.isNone(): + return err(RestApiResponse.badRequest("Missing content body")) -type - MessageCache* = message_cache.MessageCache[ContentTopic] + let reqBodyContentType = MediaType.init($contentBody.get().contentType) + if reqBodyContentType != MIMETYPE_JSON: + return err(RestApiResponse.badRequest("Wrong Content-Type, expected application/json")) + + let reqBodyData = contentBody.get().data + + let requestResult = decodeFromJsonBytes(T, reqBodyData) + if requestResult.isErr(): + return err(RestApiResponse.badRequest("Invalid content body, could not decode. " & + $requestResult.error)) + + return ok(requestResult.get()) proc getErrorCause(err: filter_protocol_type.FilterSubscribeError): string = ## Retrieve proper error cause of FilterSubscribeError - due stringify make some parts of text double @@ -169,7 +181,7 @@ proc filterPostPutSubscriptionRequestHandler( # Successfully subscribed to all content filters for cTopic in req.contentFilters: - cache.subscribe(cTopic) + cache.contentSubscribe(cTopic) return makeRestResponse(req.requestId, subFut.read()) @@ -235,7 +247,7 @@ proc installFilterDeleteSubscriptionsHandler( # Successfully subscribed to all content filters for cTopic in req.contentFilters: - cache.unsubscribe(cTopic) + cache.contentUnsubscribe(cTopic) # Successfully unsubscribed from all requested contentTopics return makeRestResponse(req.requestId, unsubFut.read()) @@ -276,7 +288,7 @@ proc installFilterDeleteAllSubscriptionsHandler( FilterSubscribeError.serviceUnavailable( "Failed to unsubscribe from all contentFilters due to timeout!")) - cache.unsubscribeAll() + cache.reset() # Successfully unsubscribed from all requested contentTopics return makeRestResponse(req.requestId, unsubFut.read()) @@ -321,7 +333,7 @@ proc installFilterGetMessagesHandler(router: var RestRouter, let pushHandler : FilterPushHandler = proc (pubsubTopic: PubsubTopic, msg: WakuMessage) {.async, gcsafe, closure.} = - cache.addMessage(msg.contentTopic, msg) + cache.addMessage(pubsubTopic, msg) node.wakuFilterClient.registerPushHandler(pushHandler) @@ -336,7 +348,7 @@ proc installFilterGetMessagesHandler(router: var RestRouter, let contentTopic = contentTopic.get() - let msgRes = cache.getMessages(contentTopic, clear=true) + let msgRes = cache.getAutoMessages(contentTopic, clear=true) if msgRes.isErr(): return RestApiResponse.badRequest("Not subscribed to topic: " & contentTopic) diff --git a/waku/waku_api/rest/filter/legacy_handlers.nim b/waku/waku_api/rest/filter/legacy_handlers.nim index 86d51f0351..c1c2ae91c1 100644 --- a/waku/waku_api/rest/filter/legacy_handlers.nim +++ b/waku/waku_api/rest/filter/legacy_handlers.nim @@ -34,10 +34,22 @@ const futTimeoutForSubscriptionProcessing* = 5.seconds const ROUTE_FILTER_SUBSCRIPTIONSV1* = "/filter/v1/subscriptions" -const filterMessageCacheDefaultCapacity* = 30 +func decodeRequestBody[T](contentBody: Option[ContentBody]) : Result[T, RestApiResponse] = + if contentBody.isNone(): + return err(RestApiResponse.badRequest("Missing content body")) -type - MessageCache* = message_cache.MessageCache[ContentTopic] + let reqBodyContentType = MediaType.init($contentBody.get().contentType) + if reqBodyContentType != MIMETYPE_JSON: + return err(RestApiResponse.badRequest("Wrong Content-Type, expected application/json")) + + let reqBodyData = contentBody.get().data + + let requestResult = decodeFromJsonBytes(T, reqBodyData) + if requestResult.isErr(): + return err(RestApiResponse.badRequest("Invalid content body, could not decode. " & + $requestResult.error)) + + return ok(requestResult.get()) proc installFilterV1PostSubscriptionsV1Handler*(router: var RestRouter, node: WakuNode, @@ -45,7 +57,7 @@ proc installFilterV1PostSubscriptionsV1Handler*(router: var RestRouter, let pushHandler: FilterPushHandler = proc(pubsubTopic: PubsubTopic, msg: WakuMessage) {.async, gcsafe, closure.} = - cache.addMessage(msg.contentTopic, msg) + cache.addMessage(pubsubTopic, msg) router.api(MethodPost, ROUTE_FILTER_SUBSCRIPTIONSV1) do (contentBody: Option[ContentBody]) -> RestApiResponse: ## Subscribes a node to a list of contentTopics of a pubsubTopic @@ -74,7 +86,7 @@ proc installFilterV1PostSubscriptionsV1Handler*(router: var RestRouter, # Successfully subscribed to all content filters for cTopic in req.contentFilters: - cache.subscribe(cTopic) + cache.contentSubscribe(cTopic) return RestApiResponse.ok() @@ -103,7 +115,7 @@ proc installFilterV1DeleteSubscriptionsV1Handler*(router: var RestRouter, return RestApiResponse.internalServerError("Failed to unsubscribe from contentFilters") for cTopic in req.contentFilters: - cache.unsubscribe(cTopic) + cache.contentUnsubscribe(cTopic) # Successfully unsubscribed from all requested contentTopics return RestApiResponse.ok() @@ -124,7 +136,7 @@ proc installFilterV1GetMessagesV1Handler*(router: var RestRouter, let contentTopic = contentTopic.get() - let msgRes = cache.getMessages(contentTopic, clear=true) + let msgRes = cache.getAutoMessages(contentTopic, clear=true) if msgRes.isErr(): return RestApiResponse.badRequest("Not subscribed to topic: " & contentTopic) diff --git a/waku/waku_api/rest/relay/handlers.nim b/waku/waku_api/rest/relay/handlers.nim index 999c5c7f1d..8456af37a6 100644 --- a/waku/waku_api/rest/relay/handlers.nim +++ b/waku/waku_api/rest/relay/handlers.nim @@ -5,7 +5,7 @@ else: import std/sequtils, - stew/byteutils, + stew/[byteutils, results], chronicles, json_serialization, json_serialization/std/options, @@ -26,19 +26,15 @@ import from std/times import getTime from std/times import toUnix - export types - logScope: topics = "waku node rest relay_api" - ##### Topic cache const futTimeout* = 5.seconds # Max time to wait for futures - #### Request handlers const ROUTE_RELAY_SUBSCRIPTIONSV1* = "/relay/v1/subscriptions" @@ -47,10 +43,11 @@ const ROUTE_RELAY_AUTO_SUBSCRIPTIONSV1* = "/relay/v1/auto/subscriptions" const ROUTE_RELAY_AUTO_MESSAGESV1* = "/relay/v1/auto/messages/{contentTopic}" const ROUTE_RELAY_AUTO_MESSAGESV1_NO_TOPIC* = "/relay/v1/auto/messages" -proc installRelayApiHandlers*(router: var RestRouter, node: WakuNode, cache: MessageCache[string]) = +proc installRelayApiHandlers*(router: var RestRouter, node: WakuNode, cache: MessageCache) = router.api(MethodPost, ROUTE_RELAY_SUBSCRIPTIONSV1) do (contentBody: Option[ContentBody]) -> RestApiResponse: - # ## Subscribes a node to a list of PubSub topics - # debug "post_waku_v2_relay_v1_subscriptions" + ## Subscribes a node to a list of PubSub topics + + debug "post_waku_v2_relay_v1_subscriptions" # Check the request body if contentBody.isNone(): @@ -60,10 +57,10 @@ proc installRelayApiHandlers*(router: var RestRouter, node: WakuNode, cache: Mes return error # Only subscribe to topics for which we have no subscribed topic handlers yet - let newTopics = req.filterIt(not cache.isSubscribed(it)) + let newTopics = req.filterIt(not cache.isPubsubSubscribed(it)) for pubsubTopic in newTopics: - cache.subscribe(pubsubTopic) + cache.pubsubSubscribe(pubsubTopic) node.subscribe((kind: PubsubSub, topic: pubsubTopic), some(messageCacheHandler(cache))) return RestApiResponse.ok() @@ -81,8 +78,8 @@ proc installRelayApiHandlers*(router: var RestRouter, node: WakuNode, cache: Mes # Unsubscribe all handlers from requested topics for pubsubTopic in req: - node.unsubscribe((kind: PubsubUnsub, topic: pubsubTopic)) - cache.unsubscribe(pubsubTopic) + cache.pubsubUnsubscribe(pubsubTopic) + node.unsubscribe((kind: PubsubUnsub, topic: pubsubTopic)) # Successfully unsubscribed from all requested topics return RestApiResponse.ok() @@ -160,66 +157,54 @@ proc installRelayApiHandlers*(router: var RestRouter, node: WakuNode, cache: Mes # Autosharding API router.api(MethodPost, ROUTE_RELAY_AUTO_SUBSCRIPTIONSV1) do (contentBody: Option[ContentBody]) -> RestApiResponse: - # ## Subscribes a node to a list of content topics - # debug "post_waku_v2_relay_v1_auto_subscriptions" - - # Check the request body - if contentBody.isNone(): - return RestApiResponse.badRequest() + ## Subscribes a node to a list of content topics. + + debug "post_waku_v2_relay_v1_auto_subscriptions" let req: seq[ContentTopic] = decodeRequestBody[seq[ContentTopic]](contentBody).valueOr: return error # Only subscribe to topics for which we have no subscribed topic handlers yet - let newTopics = req.filterIt(not cache.isSubscribed(it)) + let newTopics = req.filterIt(not cache.isContentSubscribed(it)) for contentTopic in newTopics: - cache.subscribe(contentTopic) - node.subscribe((kind: ContentSub, topic: contentTopic), some(autoMessageCacheHandler(cache))) + cache.contentSubscribe(contentTopic) + node.subscribe((kind: ContentSub, topic: contentTopic), some(messageCacheHandler(cache))) return RestApiResponse.ok() router.api(MethodDelete, ROUTE_RELAY_AUTO_SUBSCRIPTIONSV1) do (contentBody: Option[ContentBody]) -> RestApiResponse: - # ## Subscribes a node to a list of content topics - # debug "delete_waku_v2_relay_v1_auto_subscriptions" - - # Check the request body - if contentBody.isNone(): - return RestApiResponse.badRequest() + ## Unsubscribes a node from a list of content topics. + + debug "delete_waku_v2_relay_v1_auto_subscriptions" let req: seq[ContentTopic] = decodeRequestBody[seq[ContentTopic]](contentBody).valueOr: return error - # Unsubscribe all handlers from requested topics for contentTopic in req: - cache.unsubscribe(contentTopic) + cache.contentUnsubscribe(contentTopic) node.unsubscribe((kind: ContentUnsub, topic: contentTopic)) - # Successfully unsubscribed from all requested topics return RestApiResponse.ok() router.api(MethodGet, ROUTE_RELAY_AUTO_MESSAGESV1) do (contentTopic: string) -> RestApiResponse: - # ## Returns all WakuMessages received on a content topic since the - # ## last time this method was called - # ## TODO: ability to specify a return message limit - # debug "get_waku_v2_relay_v1_auto_messages", topic=topic + ## Returns all WakuMessages received on a content topic since the + ## last time this method was called. + + debug "get_waku_v2_relay_v1_auto_messages", contentTopic=contentTopic - if contentTopic.isErr(): - return RestApiResponse.badRequest() - let contentTopic = contentTopic.get() + let contentTopic = contentTopic.valueOr: + return RestApiResponse.badRequest($error) - let messages = cache.getMessages(contentTopic, clear=true) - if messages.isErr(): + let messages = cache.getAutoMessages(contentTopic, clear=true).valueOr: debug "Not subscribed to topic", topic=contentTopic - return RestApiResponse.notFound() + return RestApiResponse.notFound(contentTopic) - let data = RelayGetMessagesResponse(messages.get().map(toRelayWakuMessage)) - let resp = RestApiResponse.jsonResponse(data, status=Http200) - if resp.isErr(): - debug "An error ocurred while building the json respose", error=resp.error - return RestApiResponse.internalServerError() + let data = RelayGetMessagesResponse(messages.map(toRelayWakuMessage)) - return resp.get() + return RestApiResponse.jsonResponse(data, status=Http200).valueOr: + debug "An error ocurred while building the json respose", error = error + return RestApiResponse.internalServerError($error) router.api(MethodPost, ROUTE_RELAY_AUTO_MESSAGESV1_NO_TOPIC) do (contentBody: Option[ContentBody]) -> RestApiResponse: # Check the request body @@ -237,25 +222,21 @@ proc installRelayApiHandlers*(router: var RestRouter, node: WakuNode, cache: Mes # if RLN is mounted, append the proof to the message if not node.wakuRlnRelay.isNil(): - # append the proof to the message - let success = node.wakuRlnRelay.appendRLNProof(message, - float64(getTime().toUnix())) - if not success: - return RestApiResponse.internalServerError("Failed to publish: error appending RLN proof to message") - - # validate the message before sending it - let result = node.wakuRlnRelay.validateMessageAndUpdateLog(message) - if result == MessageValidationResult.Invalid: - return RestApiResponse.internalServerError("Failed to publish: invalid RLN proof") - elif result == MessageValidationResult.Spam: - return RestApiResponse.badRequest("Failed to publish: limit exceeded, try again later") - elif result == MessageValidationResult.Valid: - debug "RLN proof validated successfully", contentTopic=message.contentTopic - else: - return RestApiResponse.internalServerError("Failed to publish: unknown RLN proof validation result") + if not node.wakuRlnRelay.appendRLNProof(message, float64(getTime().toUnix())): + return RestApiResponse.internalServerError( + "Failed to publish: error appending RLN proof to message") + + case node.wakuRlnRelay.validateMessage(message): + of MessageValidationResult.Invalid: + return RestApiResponse.internalServerError("Failed to publish: invalid RLN proof") + of MessageValidationResult.Spam: + return RestApiResponse.badRequest("Failed to publish: limit exceeded, try again later") + of MessageValidationResult.Valid: + debug "RLN proof validated successfully", contentTopic=message.contentTopic # if we reach here its either a non-RLN message or a RLN message with a valid proof debug "Publishing message", contentTopic=message.contentTopic, rln=not node.wakuRlnRelay.isNil() + if not (waitFor node.publish(none(PubSubTopic), message).withTimeout(futTimeout)): error "Failed to publish message to topic", contentTopic=message.contentTopic return RestApiResponse.internalServerError("Failed to publish: timedout") From 93dd5ae50dcf6b1978fc979cb46c6d73848b0f4b Mon Sep 17 00:00:00 2001 From: Alexis Pentori Date: Thu, 16 Nov 2023 14:57:34 +0100 Subject: [PATCH 142/274] feat: setting image deployment to harbor registry Adding variable to push image to specific Registry Changing image owner name to `waku-org` to match Github Repository naming Signed-off-by: Alexis Pentori --- ci/Jenkinsfile.release | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/ci/Jenkinsfile.release b/ci/Jenkinsfile.release index add5544379..c26c64126c 100644 --- a/ci/Jenkinsfile.release +++ b/ci/Jenkinsfile.release @@ -24,12 +24,17 @@ pipeline { string( name: 'IMAGE_NAME', description: 'Name of Docker image to push.', - defaultValue: params.IMAGE_NAME ?: 'wakuorg/nwaku', + defaultValue: params.IMAGE_NAME ?: 'waku-org/nwaku', ) string( name: 'DOCKER_CRED', - description: 'Name of Docker Hub credential.', - defaultValue: params.DOCKER_CRED ?: 'dockerhub-vacorgbot-api-token', + description: 'Name of Docker Registry credential.', + defaultValue: params.DOCKER_CRED ?: 'harbor-wakuorg-robot', + ) + string( + name: 'DOCKER_REGISTRY_URL', + description: 'URL of the Docker Registry', + defaultValue: params.DOCKER_REGISTRY_URL ?: 'https://harbor.status.im' ) string( name: 'NIMFLAGS', @@ -80,7 +85,7 @@ pipeline { when { expression { params.IMAGE_TAG != '' } } steps { script { withDockerRegistry([ - credentialsId: params.DOCKER_CRED, url: "" + credentialsId: params.DOCKER_CRED, url: params.DOCKER_REGISTRY_URL ]) { image.push() /* If Git ref is a tag push it as Docker tag too. */ From 5883dbebe53486b222b6019938dcbfe1d4f69a3e Mon Sep 17 00:00:00 2001 From: gabrielmer <101006718+gabrielmer@users.noreply.github.com> Date: Thu, 30 Nov 2023 10:29:26 +0100 Subject: [PATCH 143/274] chore: creating prepare_release template (#2225) --- .github/ISSUE_TEMPLATE/prepare_release.md | 27 +++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/prepare_release.md diff --git a/.github/ISSUE_TEMPLATE/prepare_release.md b/.github/ISSUE_TEMPLATE/prepare_release.md new file mode 100644 index 0000000000..de9fcaa1c5 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/prepare_release.md @@ -0,0 +1,27 @@ +--- +name: Prepare release +about: Execute tasks for the creation and publishing of a new release +title: 'Prepare release 0.0.0' +labels: release +assignees: '' + +--- + + + +### Items to complete +- [ ] create release branch +- [ ] assign release candidate tag +- [ ] validate release candidate +- [ ] generate and edit releases notes +- [ ] open PR and merge release notes to master +- [ ] cherry-pick release notes to the release branch +- [ ] assign release tag to the cherry-picked release notes commit +- [ ] create GitHub release +- [ ] deploy the release to DockerHub +- [ ] deploy release to `wakuv2.prod` fleet +- [ ] announce the release From 6301bec05dbfb1b3ed666c5af82e418db93fb77b Mon Sep 17 00:00:00 2001 From: Ivan FB <128452529+Ivansete-status@users.noreply.github.com> Date: Thu, 30 Nov 2023 10:47:45 +0100 Subject: [PATCH 144/274] fix: waku_filter_v2/common: PEER_DIAL_FAILURE ret code change: 200 -> 504 (#2236) --- waku/waku_filter_v2/common.nim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/waku/waku_filter_v2/common.nim b/waku/waku_filter_v2/common.nim index 8f2b0d3ff3..06689e414c 100644 --- a/waku/waku_filter_v2/common.nim +++ b/waku/waku_filter_v2/common.nim @@ -13,11 +13,11 @@ const type FilterSubscribeErrorKind* {.pure.} = enum UNKNOWN = uint32(000) - PEER_DIAL_FAILURE = uint32(200) # TODO shouldn't this be an error code, e.g. 504 Gateway Timeout? BAD_RESPONSE = uint32(300) BAD_REQUEST = uint32(400) NOT_FOUND = uint32(404) SERVICE_UNAVAILABLE = uint32(503) + PEER_DIAL_FAILURE = uint32(504) FilterSubscribeError* = object case kind*: FilterSubscribeErrorKind From 958b9bd712c664b3fc5629bdb654b1b5e42449d5 Mon Sep 17 00:00:00 2001 From: omahs <73983677+omahs@users.noreply.github.com> Date: Thu, 30 Nov 2023 11:08:08 +0100 Subject: [PATCH 145/274] chore: fix typos (#2239) --- README.md | 2 +- apps/networkmonitor/README.md | 4 ++-- apps/networkmonitor/networkmonitor_metrics.nim | 2 +- docs/tutorial/chat2.md | 2 +- waku/node/waku_node.nim | 4 ++-- waku/waku_rln_relay/rln/rln_interface.nim | 2 +- 6 files changed, 8 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index fc054e64f0..ec5de6c78e 100644 --- a/README.md +++ b/README.md @@ -55,7 +55,7 @@ After successfully building the project, you may bring the bundled runtime into ```bash source env.sh ``` -If everything went well, your should see your prompt suffixed with `[Nimbus env]$`. Now you can run `nim` commands as usual. +If everything went well, you should see your prompt suffixed with `[Nimbus env]$`. Now you can run `nim` commands as usual. ### Waku Protocol Test Suite diff --git a/apps/networkmonitor/README.md b/apps/networkmonitor/README.md index 79041953c8..eef956db02 100644 --- a/apps/networkmonitor/README.md +++ b/apps/networkmonitor/README.md @@ -54,14 +54,14 @@ Metrics are divided into two categories: The following metrics are available. See `http://localhost:8008/metrics` -* `peer_type_as_per_enr`: Number of peers supporting each capability according the the ENR (Relay, Store, Lightpush, Filter) +* `peer_type_as_per_enr`: Number of peers supporting each capability according to the ENR (Relay, Store, Lightpush, Filter) * `peer_type_as_per_protocol`: Number of peers supporting each protocol, after a successful connection) * `peer_user_agents`: List of useragents found in the network and their count Other relevant metrics reused from `nim-eth`: * `routing_table_nodes`: Inherited from nim-eth, number of nodes in the routing table -* `discovery_message_requests_outgoing_total`: Inherited from nim-eth, number of outging discovery requests, useful to know if the node is actiely looking for new peers +* `discovery_message_requests_outgoing_total`: Inherited from nim-eth, number of outgoing discovery requests, useful to know if the node is actively looking for new peers ### Custom Metrics diff --git a/apps/networkmonitor/networkmonitor_metrics.nim b/apps/networkmonitor/networkmonitor_metrics.nim index 61d2d69122..e93d3da58c 100644 --- a/apps/networkmonitor/networkmonitor_metrics.nim +++ b/apps/networkmonitor/networkmonitor_metrics.nim @@ -26,7 +26,7 @@ logScope: #discovery_message_requests_outgoing_total{response="no_response"} declarePublicGauge networkmonitor_peer_type_as_per_enr, - "Number of peers supporting each capability according the the ENR", + "Number of peers supporting each capability according to the ENR", labels = ["capability"] declarePublicGauge networkmonitor_peer_type_as_per_protocol, diff --git a/docs/tutorial/chat2.md b/docs/tutorial/chat2.md index d0e8383d45..6ccc7f181d 100644 --- a/docs/tutorial/chat2.md +++ b/docs/tutorial/chat2.md @@ -7,7 +7,7 @@ It optionally connects to a [fleet of nodes](fleets.status.im) to provide end-to Each fleet is a publicly accessible network of Waku v2 peers, providing a bootstrap connection point for new peers, historical message storage, etc. The Waku team is currently using this application on the _production_ fleet for internal testing. For more information on the available fleets, see [`Connecting to a Waku v2 fleet`](#connecting-to-a-waku-v2-fleet). -If you want try our protocols, or join the dogfooding fun, follow the instructions below. +If you want to try our protocols, or join the dogfooding fun, follow the instructions below. ## Preparation diff --git a/waku/node/waku_node.nim b/waku/node/waku_node.nim index 82f72f8e5a..edbaad32e1 100644 --- a/waku/node/waku_node.nim +++ b/waku/node/waku_node.nim @@ -430,7 +430,7 @@ proc filterHandleMessage*(node: WakuNode, proc mountFilterClient*(node: WakuNode) {.async, raises: [Defect, LPError].} = ## Mounting both filter clients v1 - legacy and v2. - ## Giving option for application level to chose btw own push message handling or + ## Giving option for application level to choose btw own push message handling or ## rely on node provided cache. - This only applies for v2 filter client info "mounting filter client" @@ -869,7 +869,7 @@ when defined(waku_exp_store_resume): proc resume*(node: WakuNode, peerList: Option[seq[RemotePeerInfo]] = none(seq[RemotePeerInfo])) {.async, gcsafe.} = ## resume proc retrieves the history of waku messages published on the default waku pubsub topic since the last time the waku node has been online ## for resume to work properly the waku node must have the store protocol mounted in the full mode (i.e., persisting messages) - ## messages are stored in the the wakuStore's messages field and in the message db + ## messages are stored in the wakuStore's messages field and in the message db ## the offline time window is measured as the difference between the current time and the timestamp of the most recent persisted waku message ## an offset of 20 second is added to the time window to count for nodes asynchrony ## peerList indicates the list of peers to query from. The history is fetched from the first available peer in this list. Such candidates should be found through a discovery method (to be developed). diff --git a/waku/waku_rln_relay/rln/rln_interface.nim b/waku/waku_rln_relay/rln/rln_interface.nim index c3668c6c61..7a37ac9909 100644 --- a/waku/waku_rln_relay/rln/rln_interface.nim +++ b/waku/waku_rln_relay/rln/rln_interface.nim @@ -80,7 +80,7 @@ proc atomic_write*(ctx: ptr RLN, index: uint, leaves_buffer: ptr Buffer, indices ## the return bool value indicates the success or failure of the operation proc reset_tree*(ctx: ptr RLN, tree_height: uint): bool {.importc: "set_tree".} -## resets the tree stored by ctx to the the empty tree (all leaves set to 0) of height tree_height +## resets the tree stored by ctx to the empty tree (all leaves set to 0) of height tree_height ## the return bool value indicates the success or failure of the operation #---------------------------------------------------------------------------------------------- From 72a1f8c7242a55cdd1a35aa18c831ea49b2edf10 Mon Sep 17 00:00:00 2001 From: Ivan FB <128452529+Ivansete-status@users.noreply.github.com> Date: Thu, 30 Nov 2023 11:11:33 +0100 Subject: [PATCH 146/274] chore: Better feedback invalid content topic (#2254) * typo correction appplication -> application * content_topic.nim: better feedback to user when wrong topic is passed * test_namespaced_topics.nim: updating tests accordingly --- tests/waku_core/test_namespaced_topics.nim | 4 ++-- waku/waku_core/topics/content_topic.nim | 8 +++++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/tests/waku_core/test_namespaced_topics.nim b/tests/waku_core/test_namespaced_topics.nim index 91f9b02507..46145999ae 100644 --- a/tests/waku_core/test_namespaced_topics.nim +++ b/tests/waku_core/test_namespaced_topics.nim @@ -89,7 +89,7 @@ suite "Waku Message - Content topics namespacing": let err = ns.tryError() check: err.kind == ParsingErrorKind.InvalidFormat - err.cause == "invalid topic structure" + err.cause == "Invalid content topic structure. Expected either //// or /////" test "Parse content topic string - Invalid string: missing encoding part": ## Given @@ -104,7 +104,7 @@ suite "Waku Message - Content topics namespacing": let err = ns.tryError() check: err.kind == ParsingErrorKind.InvalidFormat - err.cause == "invalid topic structure" + err.cause == "Invalid content topic structure. Expected either //// or /////" test "Parse content topic string - Invalid string: wrong extra parts": ## Given diff --git a/waku/waku_core/topics/content_topic.nim b/waku/waku_core/topics/content_topic.nim index 16fbcf4b5a..16635ebba9 100644 --- a/waku/waku_core/topics/content_topic.nim +++ b/waku/waku_core/topics/content_topic.nim @@ -74,7 +74,7 @@ proc parse*(T: type NsContentTopic, topic: ContentTopic|string): ParsingResult[N of 4: let app = parts[0] if app.len == 0: - return err(ParsingError.missingPart("appplication")) + return err(ParsingError.missingPart("application")) let ver = parts[1] if ver.len == 0: @@ -100,7 +100,7 @@ proc parse*(T: type NsContentTopic, topic: ContentTopic|string): ParsingResult[N let app = parts[1] if app.len == 0: - return err(ParsingError.missingPart("appplication")) + return err(ParsingError.missingPart("application")) let ver = parts[2] if ver.len == 0: @@ -116,7 +116,9 @@ proc parse*(T: type NsContentTopic, topic: ContentTopic|string): ParsingResult[N return ok(NsContentTopic.init(some(gen), app, ver, name, enc)) else: - return err(ParsingError.invalidFormat("invalid topic structure")) + + let errMsg = "Invalid content topic structure. Expected either //// or /////" + return err(ParsingError.invalidFormat(errMsg)) # Content topic compatibility From 89dbbd2048d91a97e8f4fefd439f45aef3e9a024 Mon Sep 17 00:00:00 2001 From: Ivan FB <128452529+Ivansete-status@users.noreply.github.com> Date: Thu, 30 Nov 2023 16:42:58 +0100 Subject: [PATCH 147/274] waku_store/common.nim: correct ret code in PEER_DIAL_FAILURE (#2260) --- waku/waku_store/common.nim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/waku/waku_store/common.nim b/waku/waku_store/common.nim index 0af324ccc2..7d06bf4cfe 100644 --- a/waku/waku_store/common.nim +++ b/waku/waku_store/common.nim @@ -63,10 +63,10 @@ type HistoryErrorKind* {.pure.} = enum UNKNOWN = uint32(000) - PEER_DIAL_FAILURE = uint32(200) BAD_RESPONSE = uint32(300) BAD_REQUEST = uint32(400) SERVICE_UNAVAILABLE = uint32(503) + PEER_DIAL_FAILURE = uint32(504) HistoryError* = object case kind*: HistoryErrorKind From c86dc4422f87e6ef0ca0585114762aa60ea76bd6 Mon Sep 17 00:00:00 2001 From: Vaclav Pavlin Date: Fri, 1 Dec 2023 11:35:50 +0100 Subject: [PATCH 148/274] fix(dockerfile): update dockerignore and base image (#2262) --- .dockerignore | 2 ++ Dockerfile | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.dockerignore b/.dockerignore index 70ac9cb783..247ac61ce4 100644 --- a/.dockerignore +++ b/.dockerignore @@ -4,4 +4,6 @@ /LICENSE* /tests /metrics +/nimcache +librln* **/vendor/* diff --git a/Dockerfile b/Dockerfile index 0bbcf68920..52459f6227 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ # BUILD NIM APP ---------------------------------------------------------------- # alpine:edge supports building rust binaries, alpine:3.16 doesn't for some reason -FROM alpine@sha256:880fafbab5a7602db21ac37f0d17088a29a9a48f98d581f01ce17312c22ccbb5 AS nim-build +FROM alpine@sha256:3e44438281baf26907675b99c9a4a421c4d4a57c954120327e703aa8329086bd AS nim-build ARG NIMFLAGS ARG MAKE_TARGET=wakunode2 From 103d3981ad80b83dba48fe88cb5f2dcf715104b2 Mon Sep 17 00:00:00 2001 From: Sasha <118575614+weboko@users.noreply.github.com> Date: Fri, 1 Dec 2023 12:57:19 +0100 Subject: [PATCH 149/274] fix: remove trailing commas from keystore json (#2200) * fix: remove trailing commas from keystore json * keyfile.nim: try a different Json formatting approach * build keystore * address comment --------- Co-authored-by: Ivan Folgueira Bande --- waku/waku_keystore/keyfile.nim | 43 ++++++++++++++++++++++++---------- 1 file changed, 30 insertions(+), 13 deletions(-) diff --git a/waku/waku_keystore/keyfile.nim b/waku/waku_keystore/keyfile.nim index 7bcd407ab5..70fe6802d6 100644 --- a/waku/waku_keystore/keyfile.nim +++ b/waku/waku_keystore/keyfile.nim @@ -92,6 +92,23 @@ type DKey = array[DKLen, byte] KfResult*[T] = Result[T, KeyFileError] + # basic types for building Keystore JSON + CypherParams = object + iv: string + + CryptoNew = object + cipher: string + cipherparams: CypherParams + ciphertext: string + kdf: string + kdfparams: JsonNode + mac: string + + KeystoreEntry = object + crypto: CryptoNew + id: string + version: string + const SupportedHashes = [ "sha224", "sha256", "sha384", "sha512", @@ -373,20 +390,20 @@ proc createKeyFileJson*(secret: openArray[byte], let params = ? kdfParams(kdfkind, toHex(salt, true), workfactor) - let json = %* - { - "crypto": { - "cipher": $cryptkind, - "cipherparams": { - "iv": toHex(iv, true) - }, - "ciphertext": toHex(ciphertext, true), - "kdf": $kdfkind, - "kdfparams": params, - "mac": toHex(mac.data, true), - }, - } + var obj = KeystoreEntry( + crypto: CryptoNew( + cipher: $cryptkind, + cipherparams: CypherParams( + iv: toHex(iv, true) + ), + ciphertext: toHex(ciphertext, true), + kdf: $kdfkind, + kdfparams: params, + mac: toHex(mac.data, true) + ) + ) + let json = %* obj if IdInKeyfile: json.add("id", %($u)) if VersionInKeyfile: From 42f195792041e64af1e17242197bb6a36c04a020 Mon Sep 17 00:00:00 2001 From: Ivan FB <128452529+Ivansete-status@users.noreply.github.com> Date: Wed, 6 Dec 2023 14:02:21 +0100 Subject: [PATCH 150/274] fix: add protection in rest service to always publish with timestamp if user doesn't provide it (#2261) --- tests/waku_archive/test_waku_archive.nim | 10 +++++----- waku/waku_api/rest/relay/handlers.nim | 2 +- waku/waku_api/rest/relay/types.nim | 10 +++++++--- 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/tests/waku_archive/test_waku_archive.nim b/tests/waku_archive/test_waku_archive.nim index 72a0abf664..fca4f467d9 100644 --- a/tests/waku_archive/test_waku_archive.nim +++ b/tests/waku_archive/test_waku_archive.nim @@ -20,7 +20,7 @@ import suite "Waku Archive - message handling": - test "it should driver a valid and non-ephemeral message": + test "it should archive a valid and non-ephemeral message": ## Setup let driver = newSqliteArchiveDriver() let archive = newWakuArchive(driver) @@ -36,7 +36,7 @@ suite "Waku Archive - message handling": check: (waitFor driver.getMessagesCount()).tryGet() == 1 - test "it should not driver an ephemeral message": + test "it should not archive ephemeral messages": ## Setup let driver = newSqliteArchiveDriver() let archive = newWakuArchive(driver) @@ -58,7 +58,7 @@ suite "Waku Archive - message handling": check: (waitFor driver.getMessagesCount()).tryGet() == 2 - test "it should driver a message with no sender timestamp": + test "it should archive a message with no sender timestamp": ## Setup let driver = newSqliteArchiveDriver() let archive = newWakuArchive(driver) @@ -74,7 +74,7 @@ suite "Waku Archive - message handling": check: (waitFor driver.getMessagesCount()).tryGet() == 1 - test "it should not driver a message with a sender time variance greater than max time variance (future)": + test "it should not archive a message with a sender time variance greater than max time variance (future)": ## Setup let driver = newSqliteArchiveDriver() let archive = newWakuArchive(driver) @@ -93,7 +93,7 @@ suite "Waku Archive - message handling": check: (waitFor driver.getMessagesCount()).tryGet() == 0 - test "it should not driver a message with a sender time variance greater than max time variance (past)": + test "it should not archive a message with a sender time variance greater than max time variance (past)": ## Setup let driver = newSqliteArchiveDriver() let archive = newWakuArchive(driver) diff --git a/waku/waku_api/rest/relay/handlers.nim b/waku/waku_api/rest/relay/handlers.nim index 8456af37a6..1439eb3904 100644 --- a/waku/waku_api/rest/relay/handlers.nim +++ b/waku/waku_api/rest/relay/handlers.nim @@ -125,7 +125,7 @@ proc installRelayApiHandlers*(router: var RestRouter, node: WakuNode, cache: Mes return error var message: WakuMessage = reqWakuMessage.toWakuMessage(version = 0).valueOr: - return RestApiResponse.badRequest() + return RestApiResponse.badRequest($error) # if RLN is mounted, append the proof to the message if not node.wakuRlnRelay.isNil(): diff --git a/waku/waku_api/rest/relay/types.nim b/waku/waku_api/rest/relay/types.nim index 76a5117b82..126d94ac6a 100644 --- a/waku/waku_api/rest/relay/types.nim +++ b/waku/waku_api/rest/relay/types.nim @@ -4,7 +4,7 @@ else: {.push raises: [].} import - std/[sets, strformat], + std/[sets, strformat, times], chronicles, json_serialization, json_serialization/std/options, @@ -43,9 +43,13 @@ proc toWakuMessage*(msg: RelayWakuMessage, version = 0): Result[WakuMessage, str payload = ?msg.payload.decode() contentTopic = msg.contentTopic.get(DefaultContentTopic) version = uint32(msg.version.get(version)) - timestamp = msg.timestamp.get(0) - ok(WakuMessage(payload: payload, contentTopic: contentTopic, version: version, timestamp: timestamp)) + var timestamp = msg.timestamp.get(0) + + if timestamp == 0: + timestamp = getNanosecondTime(getTime().toUnixFloat()) + + return ok(WakuMessage(payload: payload, contentTopic: contentTopic, version: version, timestamp: timestamp)) #### Serialization and deserialization From dba9820c1fa00f414f18d57f7a3ff38b67d2bb1a Mon Sep 17 00:00:00 2001 From: Simon-Pierre Vivier Date: Thu, 7 Dec 2023 06:48:28 -0500 Subject: [PATCH 151/274] feat: shard aware peer management (#2151) --- apps/chat2/chat2.nim | 6 +- apps/wakunode2/app.nim | 2 +- tests/test_peer_manager.nim | 84 +++-- tests/test_waku_lightpush.nim | 1 + tests/test_wakunode_lightpush.nim | 8 +- tests/testlib/wakunode.nim | 12 +- tests/wakunode_rest/test_rest_lightpush.nim | 3 +- waku/node/peer_manager/peer_manager.nim | 330 ++++++++++++-------- waku/node/peer_manager/waku_peer_store.nim | 21 +- waku/node/waku_node.nim | 3 +- waku/waku_api/rest/admin/handlers.nim | 2 +- waku/waku_api/rest/lightpush/handlers.nim | 4 +- waku/waku_core/peers.nim | 15 +- waku/waku_lightpush/client.nim | 2 +- waku/waku_lightpush/common.nim | 21 ++ waku/waku_lightpush/protocol.nim | 17 +- waku/waku_metadata/protocol.nim | 2 +- 17 files changed, 332 insertions(+), 201 deletions(-) create mode 100644 waku/waku_lightpush/common.nim diff --git a/apps/chat2/chat2.nim b/apps/chat2/chat2.nim index 47cb2aea5e..e80d004e66 100644 --- a/apps/chat2/chat2.nim +++ b/apps/chat2/chat2.nim @@ -9,10 +9,9 @@ when (NimMajor, NimMinor) < (1, 4): else: {.push raises: [].} -import std/[strformat, strutils, times, json, options, random] +import std/[strformat, strutils, times, options, random] import confutils, chronicles, chronos, stew/shims/net as stewNet, eth/keys, bearssl, stew/[byteutils, results], - nimcrypto/pbkdf2, metrics, metrics/chronos_httpserver import libp2p/[switch, # manage transports, a single entry point for dialing and listening @@ -22,11 +21,10 @@ import libp2p/[switch, # manage transports, a single entry poi peerinfo, # manage the information of a peer, such as peer ID and public / private key peerid, # Implement how peers interact protobuf/minprotobuf, # message serialisation/deserialisation from and to protobufs - protocols/secure/secio, # define the protocol of secure input / output, allows encrypted communication that uses public keys to validate signed messages instead of a certificate authority like in TLS nameresolving/dnsresolver]# define DNS resolution import ../../waku/waku_core, - ../../waku/waku_lightpush, + ../../waku/waku_lightpush/common, ../../waku/waku_lightpush/rpc, ../../waku/waku_filter, ../../waku/waku_enr, diff --git a/apps/wakunode2/app.nim b/apps/wakunode2/app.nim index 6308ea71c0..a8516a7b0a 100644 --- a/apps/wakunode2/app.nim +++ b/apps/wakunode2/app.nim @@ -53,7 +53,7 @@ import ../../waku/waku_peer_exchange, ../../waku/waku_rln_relay, ../../waku/waku_store, - ../../waku/waku_lightpush, + ../../waku/waku_lightpush/common, ../../waku/waku_filter, ../../waku/waku_filter_v2, ./wakunode2_validator_signed, diff --git a/tests/test_peer_manager.nim b/tests/test_peer_manager.nim index 8576f2725a..a480adc500 100644 --- a/tests/test_peer_manager.nim +++ b/tests/test_peer_manager.nim @@ -1,7 +1,7 @@ {.used.} import - std/[options, sequtils, times], + std/[options, sequtils, times, sugar], stew/shims/net as stewNet, testutils/unittests, chronos, @@ -21,10 +21,12 @@ import ../../waku/node/peer_manager/peer_manager, ../../waku/node/peer_manager/peer_store/waku_peer_storage, ../../waku/waku_node, - ../../waku/waku_relay, - ../../waku/waku_store, - ../../waku/waku_filter, - ../../waku/waku_lightpush, + ../../waku/waku_core, + ../../waku/waku_enr/capabilities, + ../../waku/waku_relay/protocol, + ../../waku/waku_store/common, + ../../waku/waku_filter/protocol, + ../../waku/waku_lightpush/common, ../../waku/waku_peer_exchange, ../../waku/waku_metadata, ./testlib/common, @@ -128,7 +130,6 @@ procSuite "Peer Manager": await node.stop() - asyncTest "Peer manager keeps track of connections": # Create 2 nodes let nodes = toSeq(0..<2).mapIt(newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0))) @@ -225,18 +226,34 @@ procSuite "Peer Manager": let database = SqliteDatabase.new(":memory:")[] storage = WakuPeerStorage.new(database)[] - node1 = newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0), peerStorage = storage) - node2 = newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0)) - peerInfo2 = node2.switch.peerInfo + node1 = newTestWakuNode( + generateSecp256k1Key(), + ValidIpAddress.init("127.0.0.1"), + Port(44048), + peerStorage = storage + ) + node2 = newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("127.0.0.1"), Port(34023)) + + node1.mountMetadata(0).expect("Mounted Waku Metadata") + node2.mountMetadata(0).expect("Mounted Waku Metadata") await node1.start() await node2.start() await node1.mountRelay() await node2.mountRelay() + + let peerInfo2 = node2.switch.peerInfo + var remotePeerInfo2 = peerInfo2.toRemotePeerInfo() + remotePeerInfo2.enr = some(node2.enr) - require: - (await node1.peerManager.connectRelay(peerInfo2.toRemotePeerInfo())) == true + let is12Connected = await node1.peerManager.connectRelay(remotePeerInfo2) + assert is12Connected == true, "Node 1 and 2 not connected" + + check: + node1.peerManager.peerStore[AddressBook][remotePeerInfo2.peerId] == remotePeerInfo2.addrs + + # wait for the peer store update await sleepAsync(chronos.milliseconds(500)) check: @@ -246,10 +263,17 @@ procSuite "Peer Manager": node1.peerManager.peerStore.connectedness(peerInfo2.peerId) == Connected # Simulate restart by initialising a new node using the same storage - let - node3 = newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0), peerStorage = storage) + let node3 = newTestWakuNode( + generateSecp256k1Key(), + ValidIpAddress.init("127.0.0.1"), + Port(56037), + peerStorage = storage + ) + + node3.mountMetadata(0).expect("Mounted Waku Metadata") await node3.start() + check: # Node2 has been loaded after "restart", but we have not yet reconnected node3.peerManager.peerStore.peers().len == 1 @@ -257,7 +281,10 @@ procSuite "Peer Manager": node3.peerManager.peerStore.connectedness(peerInfo2.peerId) == NotConnected await node3.mountRelay() - await node3.peerManager.connectToRelayPeers() + + await node3.peerManager.manageRelayPeers() + + await sleepAsync(chronos.milliseconds(500)) check: # Reconnected to node2 after "restart" @@ -297,9 +324,9 @@ procSuite "Peer Manager": topics = @["/waku/2/rs/4/0"], ) - discard node1.mountMetadata(clusterId3) - discard node2.mountMetadata(clusterId4) - discard node3.mountMetadata(clusterId4) + node1.mountMetadata(clusterId3).expect("Mounted Waku Metadata") + node2.mountMetadata(clusterId4).expect("Mounted Waku Metadata") + node3.mountMetadata(clusterId4).expect("Mounted Waku Metadata") # Start nodes await allFutures([node1.start(), node2.start(), node3.start()]) @@ -318,7 +345,6 @@ procSuite "Peer Manager": conn2.isNone conn3.isSome - # TODO: nwaku/issues/1377 xasyncTest "Peer manager support multiple protocol IDs when reconnecting to peers": let @@ -377,14 +403,28 @@ procSuite "Peer Manager": asyncTest "Peer manager connects to all peers supporting a given protocol": # Create 4 nodes - let nodes = toSeq(0..<4).mapIt(newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0))) + let nodes = + toSeq(0..<4) + .mapIt( + newTestWakuNode( + nodeKey = generateSecp256k1Key(), + bindIp = ValidIpAddress.init("0.0.0.0"), + bindPort = Port(0), + wakuFlags = some(CapabilitiesBitfield.init(@[Relay])) + ) + ) # Start them - await allFutures(nodes.mapIt(it.start())) + discard nodes.mapIt(it.mountMetadata(0)) await allFutures(nodes.mapIt(it.mountRelay())) + await allFutures(nodes.mapIt(it.start())) # Get all peer infos - let peerInfos = nodes.mapIt(it.switch.peerInfo.toRemotePeerInfo()) + let peerInfos = collect: + for i in 0..nodes.high: + let peerInfo = nodes[i].switch.peerInfo.toRemotePeerInfo() + peerInfo.enr = some(nodes[i].enr) + peerInfo # Add all peers (but self) to node 0 nodes[0].peerManager.addPeer(peerInfos[1]) @@ -392,7 +432,7 @@ procSuite "Peer Manager": nodes[0].peerManager.addPeer(peerInfos[3]) # Connect to relay peers - await nodes[0].peerManager.connectToRelayPeers() + await nodes[0].peerManager.manageRelayPeers() check: # Peerstore track all three peers diff --git a/tests/test_waku_lightpush.nim b/tests/test_waku_lightpush.nim index de125ac974..76312272ff 100644 --- a/tests/test_waku_lightpush.nim +++ b/tests/test_waku_lightpush.nim @@ -11,6 +11,7 @@ import ../../waku/node/peer_manager, ../../waku/waku_core, ../../waku/waku_lightpush, + ../../waku/waku_lightpush/common, ../../waku/waku_lightpush/client, ../../waku/waku_lightpush/protocol_metrics, ../../waku/waku_lightpush/rpc, diff --git a/tests/test_wakunode_lightpush.nim b/tests/test_wakunode_lightpush.nim index 7208c587ba..4daa122838 100644 --- a/tests/test_wakunode_lightpush.nim +++ b/tests/test_wakunode_lightpush.nim @@ -4,16 +4,12 @@ import std/options, stew/shims/net as stewNet, testutils/unittests, - chronicles, - chronos, - libp2p/crypto/crypto, - libp2p/switch + chronos import ../../waku/waku_core, - ../../waku/waku_lightpush, + ../../waku/waku_lightpush/common, ../../waku/node/peer_manager, ../../waku/waku_node, - ./testlib/common, ./testlib/wakucore, ./testlib/wakunode diff --git a/tests/testlib/wakunode.nim b/tests/testlib/wakunode.nim index f614b272b5..9ba791204f 100644 --- a/tests/testlib/wakunode.nim +++ b/tests/testlib/wakunode.nim @@ -32,7 +32,8 @@ proc defaultTestWakuNodeConf*(): WakuNodeConf = dnsAddrsNameServers: @[ValidIpAddress.init("1.1.1.1"), ValidIpAddress.init("1.0.0.1")], nat: "any", maxConnections: 50, - topics: @[], + clusterId: 1.uint32, + topics: @["/waku/2/rs/1/0"], relay: true ) @@ -55,8 +56,8 @@ proc newTestWakuNode*(nodeKey: crypto.PrivateKey, dns4DomainName = none(string), discv5UdpPort = none(Port), agentString = none(string), - clusterId: uint32 = 2.uint32, - topics: seq[string] = @["/waku/2/rs/2/0"], + clusterId: uint32 = 1.uint32, + topics: seq[string] = @["/waku/2/rs/1/0"], peerStoreCapacity = none(int)): WakuNode = var resolvedExtIp = extIp @@ -66,7 +67,10 @@ proc newTestWakuNode*(nodeKey: crypto.PrivateKey, if (extIp.isSome() or dns4DomainName.isSome()) and extPort.isNone(): some(Port(60000)) else: extPort - let conf = defaultTestWakuNodeConf() + var conf = defaultTestWakuNodeConf() + + conf.clusterId = clusterId + conf.topics = topics if dns4DomainName.isSome() and extIp.isNone(): # If there's an error resolving the IP, an exception is thrown and test fails diff --git a/tests/wakunode_rest/test_rest_lightpush.nim b/tests/wakunode_rest/test_rest_lightpush.nim index 5581da5c71..72fb4c7b86 100644 --- a/tests/wakunode_rest/test_rest_lightpush.nim +++ b/tests/wakunode_rest/test_rest_lightpush.nim @@ -10,11 +10,10 @@ import import ../../waku/waku_api/message_cache, - ../../waku/common/base64, ../../waku/waku_core, ../../waku/waku_node, ../../waku/node/peer_manager, - ../../waku/waku_lightpush, + ../../waku/waku_lightpush/common, ../../waku/waku_api/rest/server, ../../waku/waku_api/rest/client, ../../waku/waku_api/rest/responses, diff --git a/waku/node/peer_manager/peer_manager.nim b/waku/node/peer_manager/peer_manager.nim index 69db53eed5..dd77aefb60 100644 --- a/waku/node/peer_manager/peer_manager.nim +++ b/waku/node/peer_manager/peer_manager.nim @@ -5,7 +5,7 @@ else: import - std/[options, sets, sequtils, times, strutils, math], + std/[options, sugar, sets, sequtils, times, strutils, math], chronos, chronicles, metrics, @@ -17,6 +17,10 @@ import ../../waku_core, ../../waku_relay, ../../waku_enr/sharding, + ../../waku_enr/capabilities, + ../../waku_store/common, + ../../waku_filter_v2/common, + ../../waku_lightpush/common, ../../waku_metadata, ./peer_store/peer_storage, ./waku_peer_store @@ -49,10 +53,10 @@ const BackoffFactor = 4 # Limit the amount of paralel dials - MaxParalelDials = 10 + MaxParallelDials = 10 # Delay between consecutive relayConnectivityLoop runs - ConnectivityLoopInterval = chronos.seconds(15) + ConnectivityLoopInterval = chronos.minutes(1) # How often the peer store is pruned PrunePeerStoreInterval = chronos.minutes(10) @@ -115,22 +119,21 @@ proc addPeer*(pm: PeerManager, remotePeerInfo: RemotePeerInfo, origin = UnknownO # Do not attempt to manage our unmanageable self return - # ...public key - var publicKey: PublicKey - discard remotePeerInfo.peerId.extractPublicKey(publicKey) - if pm.peerStore[AddressBook][remotePeerInfo.peerId] == remotePeerInfo.addrs and - pm.peerStore[KeyBook][remotePeerInfo.peerId] == publicKey and + pm.peerStore[KeyBook][remotePeerInfo.peerId] == remotePeerInfo.publicKey and pm.peerStore[ENRBook][remotePeerInfo.peerId].raw.len > 0: # Peer already managed and ENR info is already saved return trace "Adding peer to manager", peerId = remotePeerInfo.peerId, addresses = remotePeerInfo.addrs - + pm.peerStore[AddressBook][remotePeerInfo.peerId] = remotePeerInfo.addrs - pm.peerStore[KeyBook][remotePeerInfo.peerId] = publicKey + pm.peerStore[KeyBook][remotePeerInfo.peerId] = remotePeerInfo.publicKey pm.peerStore[SourceBook][remotePeerInfo.peerId] = origin - + + if remotePeerInfo.protocols.len > 0: + pm.peerStore[ProtoBook][remotePeerInfo.peerId] = remotePeerInfo.protocols + if remotePeerInfo.enr.isSome(): pm.peerStore[ENRBook][remotePeerInfo.peerId] = remotePeerInfo.enr.get() @@ -158,27 +161,31 @@ proc connectRelay*(pm: PeerManager, pm.addPeer(peer) let failedAttempts = pm.peerStore[NumberFailedConnBook][peerId] - debug "Connecting to relay peer", wireAddr=peer.addrs, peerId=peerId, failedAttempts=failedAttempts + debug "Connecting to relay peer", + wireAddr=peer.addrs, peerId=peerId, failedAttempts=failedAttempts var deadline = sleepAsync(dialTimeout) - var workfut = pm.switch.connect(peerId, peer.addrs) - var reasonFailed = "" - - try: - await workfut or deadline - if workfut.finished(): + let workfut = pm.switch.connect(peerId, peer.addrs) + + # Can't use catch: with .withTimeout() in this case + let res = catch: await workfut or deadline + + let reasonFailed = + if not workfut.finished(): + await workfut.cancelAndWait() + "timed out" + elif res.isErr(): res.error.msg + else: if not deadline.finished(): - deadline.cancel() + await deadline.cancelAndWait() + waku_peers_dials.inc(labelValues = ["successful"]) waku_node_conns_initiated.inc(labelValues = [source]) + pm.peerStore[NumberFailedConnBook][peerId] = 0 - return true - else: - reasonFailed = "timed out" - await cancelAndWait(workfut) - except CatchableError as exc: - reasonFailed = "remote peer failed" + return true + # Dial failed pm.peerStore[NumberFailedConnBook][peerId] = pm.peerStore[NumberFailedConnBook][peerId] + 1 pm.peerStore[LastFailedConnBook][peerId] = Moment.init(getTime().toUnix, Second) @@ -214,15 +221,15 @@ proc dialPeer(pm: PeerManager, # Dial Peer let dialFut = pm.switch.dial(peerId, addrs, proto) - var reasonFailed = "" - try: - if (await dialFut.withTimeout(dialTimeout)): + + let res = catch: + if await dialFut.withTimeout(dialTimeout): return some(dialFut.read()) - else: - reasonFailed = "timeout" - await cancelAndWait(dialFut) - except CatchableError as exc: - reasonFailed = "failed" + else: await cancelAndWait(dialFut) + + let reasonFailed = + if res.isOk: "timed out" + else: res.error.msg debug "Dialing peer failed", peerId=peerId, reason=reasonFailed, proto=proto @@ -293,105 +300,108 @@ proc canBeConnected*(pm: PeerManager, let now = Moment.init(getTime().toUnix, Second) let lastFailed = pm.peerStore[LastFailedConnBook][peerId] let backoff = calculateBackoff(pm.initialBackoffInSec, pm.backoffFactor, failedAttempts) - if now >= (lastFailed + backoff): - return true - return false + + return now >= (lastFailed + backoff) ################## # Initialisation # ################## proc getPeerIp(pm: PeerManager, peerId: PeerId): Option[string] = - if pm.switch.connManager.getConnections().hasKey(peerId): - let conns = pm.switch.connManager.getConnections().getOrDefault(peerId) - if conns.len != 0: - let observedAddr = conns[0].connection.observedAddr - let ip = observedAddr.get.getHostname() - if observedAddr.isSome: - # TODO: think if circuit relay ips should be handled differently - let ip = observedAddr.get.getHostname() - return some(ip) - return none(string) + if not pm.switch.connManager.getConnections().hasKey(peerId): + return none(string) + + let conns = pm.switch.connManager.getConnections().getOrDefault(peerId) + if conns.len == 0: + return none(string) + + let obAddr = conns[0].connection.observedAddr.valueOr: + return none(string) + + # TODO: think if circuit relay ips should be handled differently + + return some(obAddr.getHostname()) # called when a connection i) is created or ii) is closed proc onConnEvent(pm: PeerManager, peerId: PeerID, event: ConnEvent) {.async.} = case event.kind - of ConnEventKind.Connected: - let direction = if event.incoming: Inbound else: Outbound - discard - of ConnEventKind.Disconnected: - discard + of ConnEventKind.Connected: + #let direction = if event.incoming: Inbound else: Outbound + discard + of ConnEventKind.Disconnected: + discard + +proc onPeerMetadata(pm: PeerManager, peerId: PeerId) {.async.} = + # To prevent metadata protocol from breaking prev nodes, by now we only + # disconnect if the clusterid is specified. + if pm.wakuMetadata.clusterId == 0: + return + + let res = catch: await pm.switch.dial(peerId, WakuMetadataCodec) + + var reason: string + block guardClauses: + let conn = res.valueOr: + reason = "dial failed: " & error.msg + break guardClauses + + let metadata = (await pm.wakuMetadata.request(conn)).valueOr: + reason = "waku metatdata request failed: " & error + break guardClauses + + let clusterId = metadata.clusterId.valueOr: + reason = "empty cluster-id reported" + break guardClauses + + if pm.wakuMetadata.clusterId != clusterId: + reason = "different clusterId reported: " & $pm.wakuMetadata.clusterId & " vs " & $clusterId + break guardClauses + + if not metadata.shards.anyIt(pm.wakuMetadata.shards.contains(it)): + reason = "no shards in common" + break guardClauses + + return + + info "disconnecting from peer", peerId=peerId, reason=reason + asyncSpawn(pm.switch.disconnect(peerId)) + pm.peerStore.delete(peerId) # called when a peer i) first connects to us ii) disconnects all connections from us proc onPeerEvent(pm: PeerManager, peerId: PeerId, event: PeerEvent) {.async.} = + if not pm.wakuMetadata.isNil() and event.kind == PeerEventKind.Joined: + await pm.onPeerMetadata(peerId) + var direction: PeerDirection var connectedness: Connectedness - if event.kind == PeerEventKind.Joined: - direction = if event.initiator: Outbound else: Inbound - connectedness = Connected - - var clusterOk = false - var reason = "" - # To prevent metadata protocol from breaking prev nodes, by now we only - # disconnect if the clusterid is specified. - if not pm.wakuMetadata.isNil() and pm.wakuMetadata.clusterId != 0: - block wakuMetadata: - var conn: Connection - try: - conn = await pm.switch.dial(peerId, WakuMetadataCodec) - except CatchableError: - reason = "waku metadata codec not supported: " & getCurrentExceptionMsg() - break wakuMetadata - - # request metadata from connecting peer - let metadata = (await pm.wakuMetadata.request(conn)).valueOr: - reason = "failed waku metadata codec request" - break wakuMetadata - - # does not report any clusterId - let clusterId = metadata.clusterId.valueOr: - reason = "empty clusterId reported" - break wakuMetadata - - # drop it if it doesnt match our network id - if pm.wakuMetadata.clusterId != clusterId: - reason = "different clusterId reported: " & $pm.wakuMetadata.clusterId & " vs " & $clusterId - break wakuMetadata - - # reaching here means the clusterId matches - clusterOk = true - - if not pm.wakuMetadata.isNil() and pm.wakuMetadata.clusterId != 0 and not clusterOk: - info "disconnecting from peer", peerId=peerId, reason=reason - asyncSpawn(pm.switch.disconnect(peerId)) - pm.peerStore.delete(peerId) - - # TODO: Take action depending on the supported shards as reported by metadata - - let ip = pm.getPeerIp(peerId) - if ip.isSome: - pm.ipTable.mgetOrPut(ip.get, newSeq[PeerId]()).add(peerId) - - let peersBehindIp = pm.ipTable[ip.get] - if peersBehindIp.len > pm.colocationLimit: + case event.kind: + of Joined: + direction = if event.initiator: Outbound else: Inbound + connectedness = Connected + + if (let ip = pm.getPeerIp(peerId); ip.isSome()): + pm.ipTable.mgetOrPut(ip.get, newSeq[PeerId]()).add(peerId) + # in theory this should always be one, but just in case - for peerId in peersBehindIp[0..<(peersBehindIp.len - pm.colocationLimit)]: + let peersBehindIp = pm.ipTable[ip.get] + + let idx = max((peersBehindIp.len - pm.colocationLimit), 0) + for peerId in peersBehindIp[0.. pm.inRelayPeersTarget: - # await pm.pruneInRelayConns(inRelayPeers.len - pm.inRelayPeersTarget) + # Calculate in/out target number of peers for each shards + let inTarget = pm.inRelayPeersTarget div pm.wakuMetadata.shards.len + let outTarget = pm.outRelayPeersTarget div pm.wakuMetadata.shards.len - if outRelayPeers.len >= pm.outRelayPeersTarget: + for shard in pm.wakuMetadata.shards.items: + # Filter out peer not on this shard + let connectedInPeers = inPeers.filterIt( + pm.peerStore.hasShard(it, uint16(pm.wakuMetadata.clusterId), uint16(shard))) + + let connectedOutPeers = outPeers.filterIt( + pm.peerStore.hasShard(it, uint16(pm.wakuMetadata.clusterId), uint16(shard))) + + # Calculate the difference between current values and targets + let inPeerDiff = connectedInPeers.len - inTarget + let outPeerDiff = outTarget - connectedOutPeers.len + + if inPeerDiff > 0: + peersToDisconnect += inPeerDiff + + if outPeerDiff <= 0: + continue + + # Get all peers for this shard + var connectablePeers = pm.peerStore.getPeersByShard( + uint16(pm.wakuMetadata.clusterId), uint16(shard)) + + let shardCount = connectablePeers.len + + connectablePeers.keepItIf( + not pm.peerStore.isConnected(it.peerId) and + pm.canBeConnected(it.peerId)) + + let connectableCount = connectablePeers.len + + connectablePeers.keepItIf(pm.peerStore.hasCapability(it.peerId, Relay)) + + let relayCount = connectablePeers.len + + debug "Sharded Peer Management", + shard = shard, + connectable = $connectableCount & "/" & $shardCount, + relayConnectable = $relayCount & "/" & $shardCount, + relayInboundTarget = $connectedInPeers.len & "/" & $inTarget, + relayOutboundTarget = $connectedOutPeers.len & "/" & $outTarget + + let length = min(outPeerDiff, connectablePeers.len) + for peer in connectablePeers[0.. Date: Thu, 7 Dec 2023 07:21:18 -0500 Subject: [PATCH 152/274] added sharded peer store pruning (#2167) --- waku/node/peer_manager/peer_manager.nim | 85 ++++++++++++++++++------- 1 file changed, 61 insertions(+), 24 deletions(-) diff --git a/waku/node/peer_manager/peer_manager.nim b/waku/node/peer_manager/peer_manager.nim index dd77aefb60..11c9898e93 100644 --- a/waku/node/peer_manager/peer_manager.nim +++ b/waku/node/peer_manager/peer_manager.nim @@ -5,7 +5,7 @@ else: import - std/[options, sugar, sets, sequtils, times, strutils, math], + std/[options, sets, tables, sequtils, times, strutils, math], chronos, chronicles, metrics, @@ -14,13 +14,11 @@ import libp2p/nameresolving/nameresolver import ../../common/nimchronos, + ../../common/enr, ../../waku_core, ../../waku_relay, ../../waku_enr/sharding, ../../waku_enr/capabilities, - ../../waku_store/common, - ../../waku_filter_v2/common, - ../../waku_lightpush/common, ../../waku_metadata, ./peer_store/peer_storage, ./waku_peer_store @@ -728,38 +726,77 @@ proc manageRelayPeers*(pm: PeerManager) {.async.} = await pm.connectToNodes(uniquePeers[i..= pruningCount: break - if pm.peerStore[NumberFailedConnBook][peerId] >= pm.maxFailedAttempts: - pm.peerStore.del(peerId) - pruned += 1 - # if we still need to prune, prune peers that are not connected + peersToPrune.incl(peerId) + let notConnected = pm.peerStore.getNotConnectedPeers().mapIt(it.peerId) - for peerId in notConnected: - if peersToPrune - pruned == 0: + + var shardlessPeers: seq[PeerId] + var peersByShard = initTable[uint16, seq[PeerId]]() + + for peer in notConnected: + if not pm.peerStore[ENRBook].contains(peer): + shardlessPeers.add(peer) + continue + + let record = pm.peerStore[ENRBook][peer] + + let rec = record.toTyped().valueOr: + shardlessPeers.add(peer) + continue + + let rs = rec.relaySharding().valueOr: + shardlessPeers.add(peer) + continue + + for shard in rs.shardIds: + peersByShard.mgetOrPut(shard, @[peer]).add(peer) + + # prune not connected peers without shard + for peer in shardlessPeers: + if peersToPrune.len >= pruningCount: break - pm.peerStore.del(peerId) - pruned += 1 - let afterNumPeers = toSeq(pm.peerStore[AddressBook].book.keys).len + peersToPrune.incl(peer) + + # calculate the avg peers per shard + let total = sum(toSeq(peersByShard.values).mapIt(it.len)) + let avg = min(1, total div max(1, peersByShard.len)) + + # prune peers from shard with higher than avg count + for shard, peers in peersByShard.pairs: + let count = max(peers.len - avg, 0) + for peer in peers[0..count]: + if peersToPrune.len >= pruningCount: + break + + peersToPrune.incl(peer) + + for peer in peersToPrune: + pm.peerStore.delete(peer) + + let afterNumPeers = pm.peerStore[AddressBook].book.len + debug "Finished pruning peer store", beforeNumPeers = numPeers, afterNumPeers = afterNumPeers, capacity = capacity, - pruned = pruned + pruned = peersToPrune.len proc selectPeer*(pm: PeerManager, proto: string, shard: Option[PubsubTopic] = none(PubsubTopic)): Option[RemotePeerInfo] = debug "Selecting peer from peerstore", protocol=proto From 28142f40b621d3da115815fe5c7137ed56c98fe8 Mon Sep 17 00:00:00 2001 From: Ivan FB <128452529+Ivansete-status@users.noreply.github.com> Date: Mon, 11 Dec 2023 08:49:13 +0100 Subject: [PATCH 153/274] chore: Cbindings allow mounting the Store protocol from libwaku (#2276) * libwaku: add changes to mount store in self-node * libwaku: remove unnecessary code for store --- examples/cbindings/waku_example.c | 39 +++++++-- library/callback.nim | 5 ++ library/libwaku.nim | 28 ++++-- library/waku_thread/config.nim | 78 ++++++++++++++++- .../requests/node_lifecycle_request.nim | 85 +++++++++++++++++++ .../requests/protocols/store_request.nim | 75 ++++++++++++++++ .../waku_thread_request.nim | 6 +- 7 files changed, 300 insertions(+), 16 deletions(-) create mode 100644 library/callback.nim create mode 100644 library/waku_thread/inter_thread_communication/requests/protocols/store_request.nim diff --git a/examples/cbindings/waku_example.c b/examples/cbindings/waku_example.c index ec1b8f9d32..dcb1d74d9e 100644 --- a/examples/cbindings/waku_example.c +++ b/examples/cbindings/waku_example.c @@ -28,6 +28,13 @@ struct ConfigNode { char key[128]; int relay; char peers[2048]; + int store; + char storeNode[2048]; + char storeRetentionPolicy[64]; + char storeDbUrl[256]; + int storeVacuum; + int storeDbMigration; + int storeMaxNumDbConnections; }; // libwaku Context @@ -247,6 +254,14 @@ int main(int argc, char** argv) { cfgNode.port = 60000; cfgNode.relay = 1; + cfgNode.store = 1; + snprintf(cfgNode.storeNode, 2048, ""); + snprintf(cfgNode.storeRetentionPolicy, 64, "time:6000000"); + snprintf(cfgNode.storeDbUrl, 256, "postgres://postgres:test123@localhost:5432/postgres"); + cfgNode.storeVacuum = 0; + cfgNode.storeDbMigration = 0; + cfgNode.storeMaxNumDbConnections = 30; + if (argp_parse(&argp, argc, argv, 0, 0, &cfgNode) == ARGP_ERR_UNKNOWN) { show_help_and_exit(); @@ -254,16 +269,24 @@ int main(int argc, char** argv) { ctx = waku_init(event_handler, userData); - char jsonConfig[1024]; - snprintf(jsonConfig, 1024, "{ \ - \"host\": \"%s\", \ - \"port\": %d, \ - \"key\": \"%s\", \ - \"relay\": %s \ + char jsonConfig[2048]; + snprintf(jsonConfig, 2048, "{ \ + \"host\": \"%s\", \ + \"port\": %d, \ + \"key\": \"%s\", \ + \"relay\": %s, \ + \"store\": %s, \ + \"storeDbUrl\": \"%s\", \ + \"storeRetentionPolicy\": \"%s\", \ + \"storeMaxNumDbConnections\": %d \ }", cfgNode.host, cfgNode.port, cfgNode.key, - cfgNode.relay ? "true":"false"); + cfgNode.relay ? "true":"false", + cfgNode.store ? "true":"false", + cfgNode.storeDbUrl, + cfgNode.storeRetentionPolicy, + cfgNode.storeMaxNumDbConnections); WAKU_CALL( waku_default_pubsub_topic(&ctx, print_default_pubsub_topic, userData) ); WAKU_CALL( waku_version(&ctx, print_waku_version, userData) ); @@ -272,7 +295,6 @@ int main(int argc, char** argv) { printf("Waku Relay enabled: %s\n", cfgNode.relay == 1 ? "YES": "NO"); WAKU_CALL( waku_new(&ctx, jsonConfig, event_handler, userData) ); - waku_set_event_callback(event_handler, userData); waku_start(&ctx, event_handler, userData); @@ -288,6 +310,7 @@ int main(int argc, char** argv) { "/waku/2/default-waku/proto", event_handler, userData) ); + show_main_menu(); while(1) { handle_user_input(); diff --git a/library/callback.nim b/library/callback.nim new file mode 100644 index 0000000000..79cb0c0051 --- /dev/null +++ b/library/callback.nim @@ -0,0 +1,5 @@ + +type + WakuCallBack* = proc(callerRet: cint, + msg: ptr cchar, + len: csize_t) {.cdecl, gcsafe.} diff --git a/library/libwaku.nim b/library/libwaku.nim index 9f6449d535..c60c752bda 100644 --- a/library/libwaku.nim +++ b/library/libwaku.nim @@ -18,8 +18,10 @@ import ./waku_thread/inter_thread_communication/requests/node_lifecycle_request, ./waku_thread/inter_thread_communication/requests/peer_manager_request, ./waku_thread/inter_thread_communication/requests/protocols/relay_request, + ./waku_thread/inter_thread_communication/requests/protocols/store_request, ./waku_thread/inter_thread_communication/waku_thread_request, - ./alloc + ./alloc, + ./callback ################################################################################ ### Wrapper around the waku node @@ -32,11 +34,6 @@ const RET_OK: cint = 0 const RET_ERR: cint = 1 const RET_MISSING_CALLBACK: cint = 2 -type - WakuCallBack* = proc(callerRet: cint, - msg: ptr cchar, - len: csize_t) {.cdecl, gcsafe.} - ### End of exported types ################################################################################ @@ -348,5 +345,24 @@ proc waku_connect(ctx: ptr ptr Context, return RET_OK +proc waku_store_query(ctx: ptr ptr Context, + queryJson: cstring, + peerId: cstring, + timeoutMs: cint, + callback: WakuCallBack, + userData: pointer): cint + {.dynlib, exportc.} = + + ctx[][].userData = userData + + ## TODO: implement the logic that make the "self" node to act as a Store client + + # if sendReqRes.isErr(): + # let msg = $sendReqRes.error + # callback(RET_ERR, unsafeAddr msg[0], cast[csize_t](len(msg))) + # return RET_ERR + + return RET_OK + ### End of exported procs ################################################################################ diff --git a/library/waku_thread/config.nim b/library/waku_thread/config.nim index 6309b67717..29ca7b11c5 100644 --- a/library/waku_thread/config.nim +++ b/library/waku_thread/config.nim @@ -91,6 +91,71 @@ proc parseRelay(jsonNode: JsonNode, return true +proc parseStore(jsonNode: JsonNode, + store: var bool, + storeNode: var string, + storeRetentionPolicy: var string, + storeDbUrl: var string, + storeVacuum: var bool, + storeDbMigration: var bool, + storeMaxNumDbConnections: var int, + jsonResp: var JsonEvent): bool = + + if not jsonNode.contains("store"): + ## the store parameter is not required. By default is is disabled + store = false + return true + + if jsonNode["store"].kind != JsonNodeKind.JBool: + jsonResp = JsonErrorEvent.new("The store config param should be a boolean"); + return false + + store = jsonNode["store"].getBool() + + if jsonNode.contains("storeNode"): + if jsonNode["storeNode"].kind != JsonNodeKind.JString: + jsonResp = JsonErrorEvent.new("The storeNode config param should be a string"); + return false + + storeNode = jsonNode["storeNode"].getStr() + + if jsonNode.contains("storeRetentionPolicy"): + if jsonNode["storeRetentionPolicy"].kind != JsonNodeKind.JString: + jsonResp = JsonErrorEvent.new("The storeRetentionPolicy config param should be a string"); + return false + + storeRetentionPolicy = jsonNode["storeRetentionPolicy"].getStr() + + if jsonNode.contains("storeDbUrl"): + if jsonNode["storeDbUrl"].kind != JsonNodeKind.JString: + jsonResp = JsonErrorEvent.new("The storeDbUrl config param should be a string"); + return false + + storeDbUrl = jsonNode["storeDbUrl"].getStr() + + if jsonNode.contains("storeVacuum"): + if jsonNode["storeVacuum"].kind != JsonNodeKind.JBool: + jsonResp = JsonErrorEvent.new("The storeVacuum config param should be a bool"); + return false + + storeVacuum = jsonNode["storeVacuum"].getBool() + + if jsonNode.contains("storeDbMigration"): + if jsonNode["storeDbMigration"].kind != JsonNodeKind.JBool: + jsonResp = JsonErrorEvent.new("The storeDbMigration config param should be a bool"); + return false + + storeDbMigration = jsonNode["storeDbMigration"].getBool() + + if jsonNode.contains("storeMaxNumDbConnections"): + if jsonNode["storeMaxNumDbConnections"].kind != JsonNodeKind.JInt: + jsonResp = JsonErrorEvent.new("The storeMaxNumDbConnections config param should be an int"); + return false + + storeMaxNumDbConnections = jsonNode["storeMaxNumDbConnections"].getInt() + + return true + proc parseTopics(jsonNode: JsonNode, topics: var seq[string]) = if jsonNode.contains("topics"): for topic in jsonNode["topics"].items: @@ -103,6 +168,13 @@ proc parseConfig*(configNodeJson: string, netConfig: var NetConfig, relay: var bool, topics: var seq[string], + store: var bool, + storeNode: var string, + storeRetentionPolicy: var string, + storeDbUrl: var string, + storeVacuum: var bool, + storeDbMigration: var bool, + storeMaxNumDbConnections: var int, jsonResp: var JsonEvent): bool = if configNodeJson.len == 0: @@ -110,7 +182,6 @@ proc parseConfig*(configNodeJson: string, return false var jsonNode: JsonNode - try: jsonNode = parseJson(configNodeJson) except JsonParsingError: @@ -152,6 +223,11 @@ proc parseConfig*(configNodeJson: string, # topics parseTopics(jsonNode, topics) + # store + if not parseStore(jsonNode, store, storeNode, storeRetentionPolicy, storeDbUrl, + storeVacuum, storeDbMigration, storeMaxNumDbConnections, jsonResp): + return false + let wakuFlags = CapabilitiesBitfield.init( lightpush = false, filter = false, diff --git a/library/waku_thread/inter_thread_communication/requests/node_lifecycle_request.nim b/library/waku_thread/inter_thread_communication/requests/node_lifecycle_request.nim index cf134ceeb3..bf83ab1a7a 100644 --- a/library/waku_thread/inter_thread_communication/requests/node_lifecycle_request.nim +++ b/library/waku_thread/inter_thread_communication/requests/node_lifecycle_request.nim @@ -3,6 +3,7 @@ import std/options import chronos, + chronicles, stew/results, stew/shims/net import @@ -17,7 +18,12 @@ import ../../../../waku/node/waku_node, ../../../../waku/node/builder, ../../../../waku/node/config, + ../../../../waku/waku_archive/driver/builder, + ../../../../waku/waku_archive/driver, + ../../../../waku/waku_archive/retention_policy/builder, + ../../../../waku/waku_archive/retention_policy, ../../../../waku/waku_relay/protocol, + ../../../../waku/waku_store, ../../../events/[json_error_event,json_message_event,json_base_event], ../../../alloc, ../../config @@ -46,14 +52,77 @@ proc destroyShared(self: ptr NodeLifecycleRequest) = deallocShared(self[].configJson) deallocShared(self) +proc configureStore(node: WakuNode, + storeNode: string, + storeRetentionPolicy: string, + storeDbUrl: string, + storeVacuum: bool, + storeDbMigration: bool, + storeMaxNumDbConnections: int): + Future[Result[void, string]] {.async.} = + ## This snippet is extracted/duplicated from the app.nim file + + var onErrAction = proc(msg: string) {.gcsafe, closure.} = + ## Action to be taken when an internal error occurs during the node run. + ## e.g. the connection with the database is lost and not recovered. + # error "Unrecoverable error occurred", error = msg + ## TODO: use a callback given as a parameter + discard + + # Archive setup + let archiveDriverRes = ArchiveDriver.new(storeDbUrl, + storeVacuum, + storeDbMigration, + storeMaxNumDbConnections, + onErrAction) + if archiveDriverRes.isErr(): + return err("failed to setup archive driver: " & archiveDriverRes.error) + + let retPolicyRes = RetentionPolicy.new(storeRetentionPolicy) + if retPolicyRes.isErr(): + return err("failed to create retention policy: " & retPolicyRes.error) + + let mountArcRes = node.mountArchive(archiveDriverRes.get(), + retPolicyRes.get()) + if mountArcRes.isErr(): + return err("failed to mount waku archive protocol: " & mountArcRes.error) + + # Store setup + try: + await mountStore(node) + except CatchableError: + return err("failed to mount waku store protocol: " & getCurrentExceptionMsg()) + + mountStoreClient(node) + if storeNode != "": + let storeNodeInfo = parsePeerInfo(storeNode) + if storeNodeInfo.isOk(): + node.peerManager.addServicePeer(storeNodeInfo.value, WakuStoreCodec) + else: + return err("failed to set node waku store peer: " & storeNodeInfo.error) + + return ok() + proc createNode(configJson: cstring): Future[Result[WakuNode, string]] {.async.} = var privateKey: PrivateKey var netConfig = NetConfig.init(ValidIpAddress.init("127.0.0.1"), Port(60000'u16)).value + + ## relay var relay: bool var topics = @[""] + + ## store + var store: bool + var storeNode: string + var storeRetentionPolicy: string + var storeDbUrl: string + var storeVacuum: bool + var storeDbMigration: bool + var storeMaxNumDbConnections: int + var jsonResp: JsonEvent if not parseConfig($configJson, @@ -61,6 +130,13 @@ proc createNode(configJson: cstring): netConfig, relay, topics, + store, + storeNode, + storeRetentionPolicy, + storeDbUrl, + storeVacuum, + storeDbMigration, + storeMaxNumDbConnections, jsonResp): return err($jsonResp) @@ -113,6 +189,15 @@ proc createNode(configJson: cstring): await newNode.mountRelay() newNode.peerManager.start() + if store: + (await newNode.configureStore(storeNode, + storeRetentionPolicy, + storeDbUrl, + storeVacuum, + storeDbMigration, + storeMaxNumDbConnections)).isOkOr: + return err("error configuring store: " & $error) + return ok(newNode) proc process*(self: ptr NodeLifecycleRequest, diff --git a/library/waku_thread/inter_thread_communication/requests/protocols/store_request.nim b/library/waku_thread/inter_thread_communication/requests/protocols/store_request.nim new file mode 100644 index 0000000000..2ae76903ed --- /dev/null +++ b/library/waku_thread/inter_thread_communication/requests/protocols/store_request.nim @@ -0,0 +1,75 @@ + +import + std/[options,sequtils,strutils] +import + chronos, + stew/results, + stew/shims/net +import + ../../../../../waku/node/waku_node, + ../../../../../waku/waku_archive/driver/builder, + ../../../../../waku/waku_archive/driver, + ../../../../../waku/waku_archive/retention_policy/builder, + ../../../../../waku/waku_archive/retention_policy, + ../../../../alloc, + ../../../../callback + +type + StoreReqType* = enum + REMOTE_QUERY ## to perform a query to another Store node + LOCAL_QUERY ## to retrieve the data from 'self' node + +type + StoreQueryRequest* = object + queryJson: cstring + peerAddr: cstring + timeoutMs: cint + storeCallback: WakuCallBack + +type + StoreRequest* = object + operation: StoreReqType + storeReq: pointer + +proc createShared*(T: type StoreRequest, + operation: StoreReqType, + request: pointer): ptr type T = + var ret = createShared(T) + ret[].request = request + return ret + +proc createShared*(T: type StoreQueryRequest, + queryJson: cstring, + peerAddr: cstring, + timeoutMs: cint, + storeCallback: WakuCallBack = nil): ptr type T = + + var ret = createShared(T) + ret[].timeoutMs = timeoutMs + ret[].queryJson = queryJson.alloc() + ret[].peerAddr = peerAddr.alloc() + ret[].storeCallback = storeCallback + return ret + +proc destroyShared(self: ptr StoreQueryRequest) = + deallocShared(self[].queryJson) + deallocShared(self[].peerAddr) + deallocShared(self) + +proc process(self: ptr StoreQueryRequest, + node: ptr WakuNode): Future[Result[string, string]] {.async.} = + defer: destroyShared(self) + +proc process*(self: ptr StoreRequest, + node: ptr WakuNode): Future[Result[string, string]] {.async.} = + + defer: deallocShared(self) + + case self.operation: + of REMOTE_QUERY: + return await cast[ptr StoreQueryRequest](self[].storeReq).process(node) + of LOCAL_QUERY: + discard + # cast[ptr StoreQueryRequest](request[].reqContent).process(node) + + return ok("") diff --git a/library/waku_thread/inter_thread_communication/waku_thread_request.nim b/library/waku_thread/inter_thread_communication/waku_thread_request.nim index 79ba7797d7..a38c09dba3 100644 --- a/library/waku_thread/inter_thread_communication/waku_thread_request.nim +++ b/library/waku_thread/inter_thread_communication/waku_thread_request.nim @@ -12,13 +12,15 @@ import ../../../waku/node/waku_node, ./requests/node_lifecycle_request, ./requests/peer_manager_request, - ./requests/protocols/relay_request + ./requests/protocols/relay_request, + ./requests/protocols/store_request type RequestType* {.pure.} = enum LIFECYCLE, PEER_MANAGER, RELAY, + STORE, type InterThreadRequest* = object @@ -50,6 +52,8 @@ proc process*(T: type InterThreadRequest, cast[ptr PeerManagementRequest](request[].reqContent).process(node[]) of RELAY: cast[ptr RelayRequest](request[].reqContent).process(node) + of STORE: + cast[ptr StoreRequest](request[].reqContent).process(node) return await retFut From 45b0be8e7584f567acc1b593b1eba19aa9f54b0d Mon Sep 17 00:00:00 2001 From: Ivan FB <128452529+Ivansete-status@users.noreply.github.com> Date: Mon, 11 Dec 2023 08:50:03 +0100 Subject: [PATCH 154/274] waku_thread_response.nim: use correct alloc() proc to allocate response correctly (#2277) --- .../inter_thread_communication/waku_thread_response.nim | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/library/waku_thread/inter_thread_communication/waku_thread_response.nim b/library/waku_thread/inter_thread_communication/waku_thread_response.nim index c3005f4d7a..894c4d511a 100644 --- a/library/waku_thread/inter_thread_communication/waku_thread_response.nim +++ b/library/waku_thread/inter_thread_communication/waku_thread_response.nim @@ -6,6 +6,8 @@ import std/json, stew/results +import + ../../alloc type ResponseType {.pure.} = enum @@ -26,13 +28,11 @@ proc createShared*(T: type InterThreadResponse, if res.isOk(): let value = res.get() ret[].respType = ResponseType.OK - ret[].content = cast[cstring](allocShared0(value.len + 1)) - copyMem(ret[].content, unsafeAddr value, value.len + 1) + ret[].content = value.alloc() else: let error = res.error ret[].respType = ResponseType.ERR - ret[].content = cast[cstring](allocShared0(error.len + 1)) - copyMem(ret[].content, unsafeAddr error, error.len + 1) + ret[].content = res.error.alloc() return ret proc process*(T: type InterThreadResponse, From 77c5ba7669f0b170cc66f888226daab73f5bf2c9 Mon Sep 17 00:00:00 2001 From: Ivan FB <128452529+Ivansete-status@users.noreply.github.com> Date: Mon, 11 Dec 2023 08:50:40 +0100 Subject: [PATCH 155/274] archive: simplify and enhance async retention policy application (#2278) * Avoid using timer and just use an infinite async loop that can be cancelled at any time. --- waku/node/waku_node.nim | 17 ++++--------- waku/waku_archive/archive.nim | 45 +++++++++++++---------------------- 2 files changed, 21 insertions(+), 41 deletions(-) diff --git a/waku/node/waku_node.nim b/waku/node/waku_node.nim index 41cf009e6e..f138b85818 100644 --- a/waku/node/waku_node.nim +++ b/waku/node/waku_node.nim @@ -740,7 +740,6 @@ proc filterUnsubscribeAll*(node: WakuNode, # yet incompatible to handle both type of filters - use specific filter registration instead ## Waku archive -const WakuArchiveDefaultRetentionPolicyInterval* = 30.minutes proc mountArchive*(node: WakuNode, driver: ArchiveDriver, retentionPolicy = none(RetentionPolicy)): @@ -760,18 +759,7 @@ proc mountArchive*(node: WakuNode, except CatchableError: return err("exception in mountArchive: " & getCurrentExceptionMsg()) - if retentionPolicy.isSome(): - try: - debug "executing message retention policy" - let retPolRes = waitFor node.wakuArchive.executeMessageRetentionPolicy() - if retPolRes.isErr(): - return err("error in mountArchive: " & retPolRes.error) - except CatchableError: - return err("exception in mountArch-ret-pol: " & getCurrentExceptionMsg()) - - node.wakuArchive.startMessageRetentionPolicyPeriodicTask( - WakuArchiveDefaultRetentionPolicyInterval) - + asyncSpawn node.wakuArchive.start() return ok() ## Waku store @@ -1174,6 +1162,9 @@ proc stop*(node: WakuNode) {.async.} = if not node.wakuRlnRelay.isNil(): await node.wakuRlnRelay.stop() + if not node.wakuArchive.isNil(): + await node.wakuArchive.stop() + node.started = false proc isReady*(node: WakuNode): Future[bool] {.async.} = diff --git a/waku/waku_archive/archive.nim b/waku/waku_archive/archive.nim index fef44efb02..ed0c21c430 100644 --- a/waku/waku_archive/archive.nim +++ b/waku/waku_archive/archive.nim @@ -68,6 +68,7 @@ type driver*: ArchiveDriver # TODO: Make this field private. Remove asterisk validator: MessageValidator retentionPolicy: RetentionPolicy + retPolicyFut: Future[Result[void, string]] ## retention policy cancelable future proc new*(T: type WakuArchive, driver: ArchiveDriver, @@ -189,19 +190,25 @@ proc findMessages*(w: WakuArchive, query: ArchiveQuery): Future[ArchiveResult] { return ok(ArchiveResponse(messages: messages, cursor: cursor)) # Retention policy +const WakuArchiveDefaultRetentionPolicyInterval* = chronos.minutes(30) + +proc loopApplyRetentionPolicy*(w: WakuArchive): + Future[Result[void, string]] {.async.} = -proc executeMessageRetentionPolicy*(w: WakuArchive): - Future[Result[void, string]] {.async.} = if w.retentionPolicy.isNil(): return err("retentionPolicy is Nil in executeMessageRetentionPolicy") if w.driver.isNil(): return err("driver is Nil in executeMessageRetentionPolicy") - let retPolicyRes = await w.retentionPolicy.execute(w.driver) - if retPolicyRes.isErr(): - waku_archive_errors.inc(labelValues = [retPolicyFailure]) - return err("failed execution of retention policy: " & retPolicyRes.error) + while true: + debug "executing message retention policy" + let retPolicyRes = await w.retentionPolicy.execute(w.driver) + if retPolicyRes.isErr(): + waku_archive_errors.inc(labelValues = [retPolicyFailure]) + error "failed execution of retention policy", error=retPolicyRes.error + + await sleepAsync(WakuArchiveDefaultRetentionPolicyInterval) return ok() @@ -218,26 +225,8 @@ proc reportStoredMessagesMetric*(w: WakuArchive): return ok() -proc startMessageRetentionPolicyPeriodicTask*(w: WakuArchive, - interval: timer.Duration) = - # Start the periodic message retention policy task - # https://github.com/nim-lang/Nim/issues/17369 - - var executeRetentionPolicy: CallbackFunc - executeRetentionPolicy = - CallbackFunc( - proc (arg: pointer) {.gcsafe, raises: [].} = - try: - let retPolRes = waitFor w.executeMessageRetentionPolicy() - if retPolRes.isErr(): - waku_archive_errors.inc(labelValues = [retPolicyFailure]) - error "error in periodic retention policy", error = retPolRes.error - except CatchableError: - waku_archive_errors.inc(labelValues = [retPolicyFailure]) - error "exception in periodic retention policy", - error = getCurrentExceptionMsg() - - discard setTimer(Moment.fromNow(interval), executeRetentionPolicy) - ) +proc start*(self: WakuArchive) {.async.} = + self.retPolicyFut = self.loopApplyRetentionPolicy() - discard setTimer(Moment.fromNow(interval), executeRetentionPolicy) +proc stop*(self: WakuArchive) {.async.} = + self.retPolicyFut.cancel() From 15c1f974df17bdd686704286a6a5f035a2391fb1 Mon Sep 17 00:00:00 2001 From: Aaryamann Challani <43716372+rymnc@users.noreply.github.com> Date: Mon, 11 Dec 2023 14:59:16 +0530 Subject: [PATCH 156/274] fix(rln-relay): graceful retries on rpc calls (#2250) * fix(rln-relay): graceful retries on rpc calls * fix: missing file --- .../group_manager/on_chain/group_manager.nim | 120 +++++++++--------- .../group_manager/on_chain/retry_wrapper.nim | 32 +++++ 2 files changed, 92 insertions(+), 60 deletions(-) create mode 100644 waku/waku_rln_relay/group_manager/on_chain/retry_wrapper.nim diff --git a/waku/waku_rln_relay/group_manager/on_chain/group_manager.nim b/waku/waku_rln_relay/group_manager/on_chain/group_manager.nim index 2cfaf1b749..0e0f05aea5 100644 --- a/waku/waku_rln_relay/group_manager/on_chain/group_manager.nim +++ b/waku/waku_rln_relay/group_manager/on_chain/group_manager.nim @@ -18,7 +18,8 @@ import ../../../waku_keystore, ../../rln, ../../conversion_utils, - ../group_manager_base + ../group_manager_base, + ./retry_wrapper from strutils import parseHexInt @@ -142,20 +143,21 @@ method register*(g: OnchainGroupManager, identityCredentials: IdentityCredential let registryContract = g.registryContract.get() let membershipFee = g.membershipFee.get() - let gasPrice = int(await ethRpc.provider.eth_gasPrice()) * 2 + var gasPrice: int + retryWrapper(gasPrice, RetryStrategy.new(), "Failed to get gas price"): + int(await ethRpc.provider.eth_gasPrice()) * 2 let idCommitment = identityCredentials.idCommitment.toUInt256() var txHash: TxHash - try: # send the registration transaction and check if any error occurs - let storageIndex = g.usingStorageIndex.get() - debug "registering the member", idCommitment = idCommitment, storageIndex = storageIndex - txHash = await registryContract.register(storageIndex, idCommitment).send(gasPrice = gasPrice) - except CatchableError: - error "error while registering the member", msg = getCurrentExceptionMsg() - raise newException(CatchableError, "could not register the member: " & getCurrentExceptionMsg()) + let storageIndex = g.usingStorageIndex.get() + debug "registering the member", idCommitment = idCommitment, storageIndex = storageIndex + retryWrapper(txHash, RetryStrategy.new(), "Failed to register the member"): + await registryContract.register(storageIndex, idCommitment).send(gasPrice = gasPrice) # wait for the transaction to be mined - let tsReceipt = await ethRpc.getMinedTransactionReceipt(txHash) + var tsReceipt: ReceiptObject + retryWrapper(tsReceipt, RetryStrategy.new(), "Failed to get the transaction receipt"): + await ethRpc.getMinedTransactionReceipt(txHash) debug "registration transaction mined", txHash = txHash g.registrationTxHash = some(txHash) # the receipt topic holds the hash of signature of the raised events @@ -241,9 +243,11 @@ proc getRawEvents(g: OnchainGroupManager, let ethRpc = g.ethRpc.get() let rlnContract = g.rlnContract.get() - let events = await rlnContract.getJsonLogs(MemberRegistered, - fromBlock = some(fromBlock.blockId()), - toBlock = some(toBlock.blockId())) + var events: JsonNode + retryWrapper(events, RetryStrategy.new(), "Failed to get the events"): + await rlnContract.getJsonLogs(MemberRegistered, + fromBlock = some(fromBlock.blockId()), + toBlock = some(toBlock.blockId())) return events proc getBlockTable(g: OnchainGroupManager, @@ -340,10 +344,9 @@ proc startListeningToEvents(g: OnchainGroupManager): Future[void] {.async.} = let ethRpc = g.ethRpc.get() let newHeadCallback = g.getNewHeadCallback() - try: - discard await ethRpc.subscribeForBlockHeaders(newHeadCallback, newHeadErrCallback) - except CatchableError: - raise newException(ValueError, "failed to subscribe to block headers: " & getCurrentExceptionMsg()) + var blockHeaderSub: Subscription + retryWrapper(blockHeaderSub, RetryStrategy.new(), "Failed to subscribe to block headers"): + await ethRpc.subscribeForBlockHeaders(newHeadCallback, newHeadErrCallback) proc startOnchainSync(g: OnchainGroupManager): Future[void] {.async.} = initializedGuard(g) @@ -364,7 +367,9 @@ proc startOnchainSync(g: OnchainGroupManager): Future[void] {.async.} = # we always want to sync from last processed block => latest # chunk events while true: - let currentLatestBlock = cast[BlockNumber](await ethRpc.provider.eth_blockNumber()) + var currentLatestBlock: BlockNumber + retryWrapper(currentLatestBlock, RetryStrategy.new(), "Failed to get the latest block number"): + cast[BlockNumber](await ethRpc.provider.eth_blockNumber()) if fromBlock >= currentLatestBlock: break @@ -400,14 +405,12 @@ method onWithdraw*(g: OnchainGroupManager, cb: OnWithdrawCallback) {.gcsafe.} = method init*(g: OnchainGroupManager): Future[void] {.async.} = var ethRpc: Web3 # check if the Ethereum client is reachable - try: - ethRpc = await newWeb3(g.ethClientUrl) - except CatchableError: - let errMsg = "could not connect to the Ethereum client: " & getCurrentExceptionMsg() - raise newException(ValueError, errMsg) - + retryWrapper(ethRpc, RetryStrategy.new(), "Failed to connect to the Ethereum client"): + await newWeb3(g.ethClientUrl) # Set the chain id - let chainId = await ethRpc.provider.eth_chainId() + var chainId: Quantity + retryWrapper(chainId, RetryStrategy.new(), "Failed to get the chain id"): + await ethRpc.provider.eth_chainId() g.chainId = some(chainId) if g.ethPrivateKey.isSome(): @@ -422,9 +425,14 @@ method init*(g: OnchainGroupManager): Future[void] {.async.} = let registryContract = ethRpc.contractSender(WakuRlnRegistry, registryAddress) # get the current storage index - let usingStorageIndex = await registryContract.usingStorageIndex().call() + var usingStorageIndex: Uint16 + retryWrapper(usingStorageIndex, RetryStrategy.new(), "Failed to get the storage index"): + await registryContract.usingStorageIndex().call() + g.usingStorageIndex = some(usingStorageIndex) - let rlnContractAddress = await registryContract.storages(usingStorageIndex).call() + var rlnContractAddress: Address + retryWrapper(rlnContractAddress, RetryStrategy.new(), "Failed to get the rln contract address"): + await registryContract.storages(usingStorageIndex).call() let rlnContract = ethRpc.contractSender(RlnStorage, rlnContractAddress) g.ethRpc = some(ethRpc) @@ -477,39 +485,36 @@ method init*(g: OnchainGroupManager): Future[void] {.async.} = # check if the contract exists by calling a static function var membershipFee: Uint256 - try: - membershipFee = await rlnContract.MEMBERSHIP_DEPOSIT().call() - except CatchableError: - raise newException(ValueError, - "could not get the membership deposit: " & getCurrentExceptionMsg()) + retryWrapper(membershipFee, RetryStrategy.new(), "Failed to get the membership deposit"): + await rlnContract.MEMBERSHIP_DEPOSIT().call() g.membershipFee = some(membershipFee) var deployedBlockNumber: Uint256 - try: - deployedBlockNumber = await rlnContract.deployedBlockNumber().call() - debug "using rln storage", deployedBlockNumber, rlnContractAddress - except CatchableError: - raise newException(ValueError, - "could not get the deployed block number: " & getCurrentExceptionMsg()) + retryWrapper(deployedBlockNumber, RetryStrategy.new(), "Failed to get the deployed block number"): + await rlnContract.deployedBlockNumber().call() + debug "using rln storage", deployedBlockNumber, rlnContractAddress g.rlnContractDeployedBlockNumber = cast[BlockNumber](deployedBlockNumber) g.latestProcessedBlock = max(g.latestProcessedBlock, g.rlnContractDeployedBlockNumber) - ethRpc.ondisconnect = proc() = + proc onDisconnect() {.async.} = error "Ethereum client disconnected" let fromBlock = max(g.latestProcessedBlock, g.rlnContractDeployedBlockNumber) info "reconnecting with the Ethereum client, and restarting group sync", fromBlock = fromBlock - try: - let newEthRpc = waitFor newWeb3(g.ethClientUrl) - newEthRpc.ondisconnect = ethRpc.ondisconnect - g.ethRpc = some(newEthRpc) - except CatchableError: - error "failed to reconnect with the Ethereum client", error = getCurrentExceptionMsg() - return + var newEthRpc: Web3 + retryWrapper(newEthRpc, RetryStrategy.new(), "Failed to reconnect with the Ethereum client"): + await newWeb3(g.ethClientUrl) + newEthRpc.ondisconnect = ethRpc.ondisconnect + g.ethRpc = some(newEthRpc) + try: asyncSpawn g.startOnchainSync() except CatchableError: error "failed to restart group sync", error = getCurrentExceptionMsg() + ethRpc.ondisconnect = proc() = + asyncCheck onDisconnect() + + waku_rln_number_registered_memberships.set(int64(g.rlnInstance.leavesSet())) g.initialized = true @@ -526,12 +531,10 @@ method stop*(g: OnchainGroupManager): Future[void] {.async.} = proc isSyncing*(g: OnchainGroupManager): Future[bool] {.async,gcsafe.} = let ethRpc = g.ethRpc.get() - try: - let syncing = await ethRpc.provider.eth_syncing() - return syncing.getBool() - except CatchableError: - error "failed to get the syncing status", error = getCurrentExceptionMsg() - return false + var syncing: JsonNode + retryWrapper(syncing, RetryStrategy.new(), "Failed to get the syncing status"): + await ethRpc.provider.eth_syncing() + return syncing.getBool() method isReady*(g: OnchainGroupManager): Future[bool] {.async,gcsafe.} = initializedGuard(g) @@ -540,14 +543,11 @@ method isReady*(g: OnchainGroupManager): Future[bool] {.async,gcsafe.} = return false var currentBlock: BlockNumber - try: - currentBlock = cast[BlockNumber](await g.ethRpc - .get() - .provider - .eth_blockNumber()) - except CatchableError: - error "failed to get the current block number", error = getCurrentExceptionMsg() - return false + retryWrapper(currentBlock, RetryStrategy.new(), "Failed to get the current block number"): + cast[BlockNumber](await g.ethRpc + .get() + .provider + .eth_blockNumber()) if g.latestProcessedBlock < currentBlock: return false diff --git a/waku/waku_rln_relay/group_manager/on_chain/retry_wrapper.nim b/waku/waku_rln_relay/group_manager/on_chain/retry_wrapper.nim new file mode 100644 index 0000000000..f4daa5ff2a --- /dev/null +++ b/waku/waku_rln_relay/group_manager/on_chain/retry_wrapper.nim @@ -0,0 +1,32 @@ +import + chronos + + +type RetryStrategy* = object + shouldRetry*: bool + retryDelay*: Duration + retryCount*: uint + +proc new*(T: type RetryStrategy): RetryStrategy = + return RetryStrategy( + shouldRetry: true, + retryDelay: 1000.millis, + retryCount: 3 + ) + + +template retryWrapper*(res: auto, + retryStrategy: RetryStrategy, + errStr: string, + body: untyped): auto = + var retryCount = retryStrategy.retryCount + var shouldRetry = retryStrategy.shouldRetry + while shouldRetry and retryCount > 0: + try: + res = body + shouldRetry = false + except: + retryCount -= 1 + await sleepAsync(retryStrategy.retryDelay) + if shouldRetry: + raise newException(CatchableError, errStr & ": " & $getCurrentExceptionMsg()) From 0cc0c80563339c9466c5e3711735a331fbc8ac2c Mon Sep 17 00:00:00 2001 From: Ivan FB <128452529+Ivansete-status@users.noreply.github.com> Date: Tue, 12 Dec 2023 16:00:18 +0100 Subject: [PATCH 157/274] chore: peer_manager.nim - reduce logs from debug to trace (#2279) --- waku/node/peer_manager/peer_manager.nim | 44 ++++++++++++------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/waku/node/peer_manager/peer_manager.nim b/waku/node/peer_manager/peer_manager.nim index 11c9898e93..0edddad7b5 100644 --- a/waku/node/peer_manager/peer_manager.nim +++ b/waku/node/peer_manager/peer_manager.nim @@ -159,7 +159,7 @@ proc connectRelay*(pm: PeerManager, pm.addPeer(peer) let failedAttempts = pm.peerStore[NumberFailedConnBook][peerId] - debug "Connecting to relay peer", + trace "Connecting to relay peer", wireAddr=peer.addrs, peerId=peerId, failedAttempts=failedAttempts var deadline = sleepAsync(dialTimeout) @@ -189,7 +189,7 @@ proc connectRelay*(pm: PeerManager, pm.peerStore[LastFailedConnBook][peerId] = Moment.init(getTime().toUnix, Second) pm.peerStore[ConnectionBook][peerId] = CannotConnect - debug "Connecting relay peer failed", + trace "Connecting relay peer failed", peerId = peerId, reason = reasonFailed, failedAttempts = pm.peerStore[NumberFailedConnBook][peerId] @@ -215,7 +215,7 @@ proc dialPeer(pm: PeerManager, error "dial shall not be used to connect to relays" return none(Connection) - debug "Dialing peer", wireAddr=addrs, peerId=peerId, proto=proto + trace "Dialing peer", wireAddr=addrs, peerId=peerId, proto=proto # Dial Peer let dialFut = pm.switch.dial(peerId, addrs, proto) @@ -229,14 +229,14 @@ proc dialPeer(pm: PeerManager, if res.isOk: "timed out" else: res.error.msg - debug "Dialing peer failed", peerId=peerId, reason=reasonFailed, proto=proto + trace "Dialing peer failed", peerId=peerId, reason=reasonFailed, proto=proto return none(Connection) proc loadFromStorage(pm: PeerManager) = ## Load peers from storage, if available - debug "loading peers from storage" + trace "loading peers from storage" var amount = 0 @@ -276,7 +276,7 @@ proc loadFromStorage(pm: PeerManager) = waku_peers_errors.inc(labelValues = ["storage_load_failure"]) return - debug "recovered peers from storage", amount = amount + trace "recovered peers from storage", amount = amount proc canBeConnected*(pm: PeerManager, peerId: PeerId): bool = @@ -489,10 +489,10 @@ proc new*(T: type PeerManager, pm.ipTable = initTable[string, seq[PeerId]]() if not storage.isNil(): - debug "found persistent peer storage" + trace "found persistent peer storage" pm.loadFromStorage() # Load previously managed peers. else: - debug "no peer storage found" + trace "no peer storage found" return pm @@ -520,13 +520,13 @@ proc reconnectPeers*(pm: PeerManager, ## Reconnect to peers registered for this protocol. This will update connectedness. ## Especially useful to resume connections from persistent storage after a restart. - debug "Reconnecting peers", proto=proto + trace "Reconnecting peers", proto=proto # Proto is not persisted, we need to iterate over all peers. for peerInfo in pm.peerStore.peers(protocolMatcher(proto)): # Check that the peer can be connected if peerInfo.connectedness == CannotConnect: - debug "Not reconnecting to unreachable or non-existing peer", peerId=peerInfo.peerId + error "Not reconnecting to unreachable or non-existing peer", peerId=peerInfo.peerId continue # Respect optional backoff period where applicable. @@ -540,7 +540,7 @@ proc reconnectPeers*(pm: PeerManager, # TODO: This blocks the whole function. Try to connect to another peer in the meantime. if backoffTime > ZeroDuration: - debug "Backing off before reconnect...", peerId=peerInfo.peerId, backoffTime=backoffTime + trace "Backing off before reconnect...", peerId=peerInfo.peerId, backoffTime=backoffTime # We disconnected recently and still need to wait for a backoff period before connecting await sleepAsync(backoffTime) @@ -700,7 +700,7 @@ proc manageRelayPeers*(pm: PeerManager) {.async.} = let relayCount = connectablePeers.len - debug "Sharded Peer Management", + trace "Sharded Peer Management", shard = shard, connectable = $connectableCount & "/" & $shardCount, relayConnectable = $relayCount & "/" & $shardCount, @@ -731,7 +731,7 @@ proc prunePeerStore*(pm: PeerManager) = if numPeers <= capacity: return - debug "Peer store capacity exceeded", numPeers = numPeers, capacity = capacity + trace "Peer store capacity exceeded", numPeers = numPeers, capacity = capacity let pruningCount = numPeers - capacity var peersToPrune: HashSet[PeerId] @@ -793,13 +793,13 @@ proc prunePeerStore*(pm: PeerManager) = let afterNumPeers = pm.peerStore[AddressBook].book.len - debug "Finished pruning peer store", beforeNumPeers = numPeers, + trace "Finished pruning peer store", beforeNumPeers = numPeers, afterNumPeers = afterNumPeers, capacity = capacity, pruned = peersToPrune.len proc selectPeer*(pm: PeerManager, proto: string, shard: Option[PubsubTopic] = none(PubsubTopic)): Option[RemotePeerInfo] = - debug "Selecting peer from peerstore", protocol=proto + trace "Selecting peer from peerstore", protocol=proto # Selects the best peer for a given protocol var peers = pm.peerStore.getPeersByProtocol(proto) @@ -811,33 +811,33 @@ proc selectPeer*(pm: PeerManager, proto: string, shard: Option[PubsubTopic] = no if proto == WakuRelayCodec: # TODO: proper heuristic here that compares peer scores and selects "best" one. For now the first peer for the given protocol is returned if peers.len > 0: - debug "Got peer from peerstore", peerId=peers[0].peerId, multi=peers[0].addrs[0], protocol=proto + trace "Got peer from peerstore", peerId=peers[0].peerId, multi=peers[0].addrs[0], protocol=proto return some(peers[0]) - debug "No peer found for protocol", protocol=proto + trace "No peer found for protocol", protocol=proto return none(RemotePeerInfo) # For other protocols, we select the peer that is slotted for the given protocol pm.serviceSlots.withValue(proto, serviceSlot): - debug "Got peer from service slots", peerId=serviceSlot[].peerId, multi=serviceSlot[].addrs[0], protocol=proto + trace "Got peer from service slots", peerId=serviceSlot[].peerId, multi=serviceSlot[].addrs[0], protocol=proto return some(serviceSlot[]) # If not slotted, we select a random peer for the given protocol if peers.len > 0: - debug "Got peer from peerstore", peerId=peers[0].peerId, multi=peers[0].addrs[0], protocol=proto + trace "Got peer from peerstore", peerId=peers[0].peerId, multi=peers[0].addrs[0], protocol=proto return some(peers[0]) - debug "No peer found for protocol", protocol=proto + trace "No peer found for protocol", protocol=proto return none(RemotePeerInfo) # Prunes peers from peerstore to remove old/stale ones proc prunePeerStoreLoop(pm: PeerManager) {.async.} = - debug "Starting prune peerstore loop" + trace "Starting prune peerstore loop" while pm.started: pm.prunePeerStore() await sleepAsync(PrunePeerStoreInterval) # Ensures a healthy amount of connected relay peers proc relayConnectivityLoop*(pm: PeerManager) {.async.} = - debug "Starting relay connectivity loop" + trace "Starting relay connectivity loop" while pm.started: await pm.manageRelayPeers() await sleepAsync(ConnectivityLoopInterval) From 385daf16be12ee1499b281a5445160185949847e Mon Sep 17 00:00:00 2001 From: Ivan FB <128452529+Ivansete-status@users.noreply.github.com> Date: Thu, 14 Dec 2023 07:16:39 +0100 Subject: [PATCH 158/274] chore: vendor bump for 0.23.0 (#2274) * on_chain/group_manager: use .async: (raises:[Exception]). * bump nim-dnsdisc * update nim-chronos to the latest state * chat2.nim: catch any possible exception when stopping * chat2bridge.nim: make it to compile after vendor bump * ValidIpAddress (deprecated) -> IpAddress * vendor/nim-libp2p additional bump * libwaku: adapt to vendor bump * testlib/wakunode.nim: adapt to vendor bump (ValidIpAddress -> IpAddress) * waku_node: avoid throwing any exception from stop*(node: WakuNode) * test_confutils_envvar.nim: ValidIpAddress -> IpAddress * test_jsonrpc_store: capture exception * test_rln*: handling exceptions * adaptation to make test_rln_* to work properly * signature enhancement of group_manager methods --- apps/chat2/chat2.nim | 7 +- apps/chat2/config_chat2.nim | 24 +-- apps/chat2bridge/chat2bridge.nim | 22 +-- apps/chat2bridge/config_chat2bridge.nim | 24 +-- apps/networkmonitor/networkmonitor.nim | 8 +- apps/networkmonitor/networkmonitor_config.nim | 10 +- .../networkmonitor/networkmonitor_metrics.nim | 2 +- apps/wakucanary/wakucanary.nim | 6 +- apps/wakunode2/app.nim | 13 +- apps/wakunode2/external_config.nim | 32 ++-- apps/wakunode2/internal_config.nim | 4 +- apps/wakunode2/wakunode2.nim | 2 +- examples/publisher.nim | 2 +- examples/subscriber.nim | 2 +- library/callback.nim | 2 +- library/events/json_error_event.nim | 2 +- library/libwaku.nim | 2 +- library/waku_thread/config.nim | 51 ++++-- .../requests/node_lifecycle_request.nim | 39 +++-- tests/common/test_confutils_envvar.nim | 6 +- tests/common/test_enr_builder.nim | 6 +- tests/node/test_wakunode_filter.nim | 6 +- tests/test_peer_exchange.nim | 2 +- tests/test_peer_manager.nim | 42 ++--- tests/test_waku_discv5.nim | 4 +- tests/test_waku_dnsdisc.nim | 2 +- tests/test_waku_keepalive.nim | 4 +- tests/test_waku_metadata.nim | 4 +- tests/test_waku_netconfig.nim | 18 +-- tests/test_waku_peer_exchange.nim | 18 +-- tests/test_wakunode.nim | 40 ++--- tests/test_wakunode_filter_legacy.nim | 4 +- tests/test_wakunode_lightpush.nim | 6 +- tests/testlib/wakunode.nim | 16 +- tests/waku_core/test_published_address.nim | 4 +- tests/waku_relay/test_wakunode_relay.nim | 42 ++--- .../test_rln_group_manager_onchain.nim | 150 ++++++++++++++---- .../test_rln_group_manager_static.nim | 68 +++++--- .../test_wakunode_rln_relay.nim | 26 +-- tests/waku_store/test_resume.nim | 8 +- tests/waku_store/test_wakunode_store.nim | 22 +-- tests/wakunode2/test_validators.nim | 6 +- tests/wakunode_jsonrpc/test_jsonrpc_admin.nim | 12 +- tests/wakunode_jsonrpc/test_jsonrpc_debug.nim | 4 +- .../wakunode_jsonrpc/test_jsonrpc_filter.nim | 2 +- tests/wakunode_jsonrpc/test_jsonrpc_relay.nim | 22 +-- tests/wakunode_jsonrpc/test_jsonrpc_store.nim | 14 +- tests/wakunode_rest/test_rest_admin.nim | 8 +- tests/wakunode_rest/test_rest_debug.nim | 8 +- tests/wakunode_rest/test_rest_filter.nim | 6 +- tests/wakunode_rest/test_rest_health.nim | 6 +- .../wakunode_rest/test_rest_legacy_filter.nim | 6 +- tests/wakunode_rest/test_rest_lightpush.nim | 6 +- tests/wakunode_rest/test_rest_relay.nim | 20 +-- tests/wakunode_rest/test_rest_store.nim | 16 +- .../rln_keystore_generator.nim | 2 +- vendor/nim-chronicles | 2 +- vendor/nim-chronos | 2 +- vendor/nim-dnsdisc | 2 +- vendor/nim-eth | 2 +- vendor/nim-http-utils | 2 +- vendor/nim-libp2p | 2 +- vendor/nim-stew | 2 +- vendor/nim-unittest2 | 2 +- waku/common/confutils/envvar/std/net.nim | 4 +- waku/common/databases/db_postgres/dbconn.nim | 8 +- waku/common/enr/builder.nim | 6 +- waku/common/utils/nat.nim | 8 +- waku/node/builder.nim | 4 +- waku/node/config.nim | 10 +- waku/node/waku_node.nim | 7 +- waku/waku_api/rest/health/handlers.nim | 10 +- waku/waku_api/rest/server.nim | 4 +- waku/waku_archive/driver.nim | 2 +- waku/waku_discv5.nim | 4 +- waku/waku_lightpush/common.nim | 2 +- waku/waku_lightpush/protocol.nim | 6 +- .../group_manager/group_manager_base.nim | 20 +-- .../group_manager/on_chain/group_manager.nim | 44 +++-- .../group_manager/static/group_manager.nim | 30 ++-- waku/waku_rln_relay/rln_relay.nim | 10 +- 81 files changed, 626 insertions(+), 459 deletions(-) diff --git a/apps/chat2/chat2.nim b/apps/chat2/chat2.nim index e80d004e66..1f290c8f67 100644 --- a/apps/chat2/chat2.nim +++ b/apps/chat2/chat2.nim @@ -154,7 +154,7 @@ proc readNick(transp: StreamTransport): Future[string] {.async.} = return await transp.readLine() -proc startMetricsServer(serverIp: ValidIpAddress, serverPort: Port): Result[MetricsHttpServerRef, string] = +proc startMetricsServer(serverIp: IpAddress, serverPort: Port): Result[MetricsHttpServerRef, string] = info "Starting metrics HTTP server", serverIp= $serverIp, serverPort= $serverPort let metricsServerRes = MetricsHttpServerRef.new($serverIp, serverPort) @@ -269,7 +269,10 @@ proc writeAndPrint(c: Chat) {.async.} = echo "quitting..." - await c.node.stop() + try: + await c.node.stop() + except: + echo "exception happened when stopping: " & getCurrentExceptionMsg() quit(QuitSuccess) else: diff --git a/apps/chat2/config_chat2.nim b/apps/chat2/config_chat2.nim index d7fc7c77c3..2865a19242 100644 --- a/apps/chat2/config_chat2.nim +++ b/apps/chat2/config_chat2.nim @@ -30,7 +30,7 @@ type listenAddress* {. defaultValue: defaultListenAddress(config) desc: "Listening address for the LibP2P traffic." - name: "listen-address"}: ValidIpAddress + name: "listen-address"}: IpAddress tcpPort* {. desc: "TCP listening port." @@ -135,8 +135,8 @@ type rpcAddress* {. desc: "Listening address of the JSON-RPC server.", - defaultValue: ValidIpAddress.init("127.0.0.1") - name: "rpc-address" }: ValidIpAddress + defaultValue: parseIpAddress("127.0.0.1") + name: "rpc-address" }: IpAddress rpcPort* {. desc: "Listening port of the JSON-RPC server.", @@ -162,8 +162,8 @@ type metricsServerAddress* {. desc: "Listening address of the metrics server." - defaultValue: ValidIpAddress.init("127.0.0.1") - name: "metrics-server-address" }: ValidIpAddress + defaultValue: parseIpAddress("127.0.0.1") + name: "metrics-server-address" }: IpAddress metricsServerPort* {. desc: "Listening HTTP port of the metrics server." @@ -189,8 +189,8 @@ type dnsDiscoveryNameServers* {. desc: "DNS name server IPs to query. Argument may be repeated." - defaultValue: @[ValidIpAddress.init("1.1.1.1"), ValidIpAddress.init("1.0.0.1")] - name: "dns-discovery-name-server" }: seq[ValidIpAddress] + defaultValue: @[parseIpAddress("1.1.1.1"), parseIpAddress("1.0.0.1")] + name: "dns-discovery-name-server" }: seq[IpAddress] ## Chat2 configuration @@ -278,13 +278,13 @@ proc parseCmdArg*(T: type crypto.PrivateKey, p: string): T = proc completeCmdArg*(T: type crypto.PrivateKey, val: string): seq[string] = return @[] -proc parseCmdArg*(T: type ValidIpAddress, p: string): T = +proc parseCmdArg*(T: type IpAddress, p: string): T = try: - result = ValidIpAddress.init(p) + result = parseIpAddress(p) except CatchableError as e: raise newException(ValueError, "Invalid IP address") -proc completeCmdArg*(T: type ValidIpAddress, val: string): seq[string] = +proc completeCmdArg*(T: type IpAddress, val: string): seq[string] = return @[] proc parseCmdArg*(T: type Port, p: string): T = @@ -302,7 +302,7 @@ proc parseCmdArg*(T: type Option[uint], p: string): T = except CatchableError: raise newException(ValueError, "Invalid unsigned integer") -func defaultListenAddress*(conf: Chat2Conf): ValidIpAddress = +func defaultListenAddress*(conf: Chat2Conf): IpAddress = # TODO: How should we select between IPv4 and IPv6 # Maybe there should be a config option for this. - (static ValidIpAddress.init("0.0.0.0")) + (static parseIpAddress("0.0.0.0")) diff --git a/apps/chat2bridge/chat2bridge.nim b/apps/chat2bridge/chat2bridge.nim index 756d8adac4..106eaf7e5d 100644 --- a/apps/chat2bridge/chat2bridge.nim +++ b/apps/chat2bridge/chat2bridge.nim @@ -8,7 +8,8 @@ import chronos, confutils, chronicles, chronicles/topics_registry, chronos/streams/tlsstream, metrics, metrics/chronos_httpserver, stew/byteutils, - stew/shims/net as stewNet, json_rpc/rpcserver, + eth/net/nat, + json_rpc/rpcserver, # Matterbridge client imports ../../waku/common/utils/matterbridge_client, # Waku v2 imports @@ -51,7 +52,7 @@ type seen: seq[Hash] #FIFO queue contentTopic: string - MbMessageHandler* = proc (jsonNode: JsonNode) {.gcsafe.} + MbMessageHandler = proc (jsonNode: JsonNode) {.async.} ################### # Helper funtions # @@ -129,7 +130,7 @@ proc pollMatterbridge(cmb: Chat2MatterBridge, handler: MbMessageHandler) {.async if getRes.isOk(): for jsonNode in getRes[]: - handler(jsonNode) + await handler(jsonNode) else: error "Matterbridge host unreachable. Sleeping before retrying." await sleepAsync(chronos.seconds(10)) @@ -145,8 +146,8 @@ proc new*(T: type Chat2MatterBridge, mbGateway: string, # NodeV2 initialisation nodev2Key: crypto.PrivateKey, - nodev2BindIp: ValidIpAddress, nodev2BindPort: Port, - nodev2ExtIp = none[ValidIpAddress](), nodev2ExtPort = none[Port](), + nodev2BindIp: IpAddress, nodev2BindPort: Port, + nodev2ExtIp = none[IpAddress](), nodev2ExtPort = none[Port](), contentTopic: string): T {.raises: [Defect, ValueError, KeyError, TLSStreamProtocolError, IOError, LPError].} = @@ -183,7 +184,7 @@ proc start*(cmb: Chat2MatterBridge) {.async.} = debug "Start polling Matterbridge" # Start Matterbridge polling (@TODO: use streaming interface) - proc mbHandler(jsonNode: JsonNode) {.gcsafe, raises: [Exception].} = + proc mbHandler(jsonNode: JsonNode) {.async.} = trace "Bridging message from Matterbridge to chat2", jsonNode=jsonNode waitFor cmb.toChat2(jsonNode) @@ -200,13 +201,16 @@ proc start*(cmb: Chat2MatterBridge) {.async.} = # Bridging # Handle messages on Waku v2 and bridge to Matterbridge - proc relayHandler(pubsubTopic: PubsubTopic, msg: WakuMessage): Future[void] {.async, gcsafe.} = + proc relayHandler(pubsubTopic: PubsubTopic, msg: WakuMessage): Future[void] {.async.} = trace "Bridging message from Chat2 to Matterbridge", msg=msg - cmb.toMatterbridge(msg) + try: + cmb.toMatterbridge(msg) + except: + error "exception in relayHandler: " & getCurrentExceptionMsg() cmb.nodev2.subscribe((kind: PubsubSub, topic: DefaultPubsubTopic), some(relayHandler)) -proc stop*(cmb: Chat2MatterBridge) {.async.} = +proc stop*(cmb: Chat2MatterBridge) {.async: (raises: [Exception]).} = info "Stopping Chat2MatterBridge" cmb.running = false diff --git a/apps/chat2bridge/config_chat2bridge.nim b/apps/chat2bridge/config_chat2bridge.nim index e9aba7f59f..6b45944146 100644 --- a/apps/chat2bridge/config_chat2bridge.nim +++ b/apps/chat2bridge/config_chat2bridge.nim @@ -13,7 +13,7 @@ type listenAddress* {. defaultValue: defaultListenAddress(config) desc: "Listening address for the LibP2P traffic" - name: "listen-address"}: ValidIpAddress + name: "listen-address"}: IpAddress libp2pTcpPort* {. desc: "Libp2p TCP listening port (for Waku v2)" @@ -42,8 +42,8 @@ type rpcAddress* {. desc: "Listening address of the RPC server", - defaultValue: ValidIpAddress.init("127.0.0.1") - name: "rpc-address" }: ValidIpAddress + defaultValue: parseIpAddress("127.0.0.1") + name: "rpc-address" }: IpAddress rpcPort* {. desc: "Listening port of the RPC server" @@ -57,8 +57,8 @@ type metricsServerAddress* {. desc: "Listening address of the metrics server" - defaultValue: ValidIpAddress.init("127.0.0.1") - name: "metrics-server-address" }: ValidIpAddress + defaultValue: parseIpAddress("127.0.0.1") + name: "metrics-server-address" }: IpAddress metricsServerPort* {. desc: "Listening HTTP port of the metrics server" @@ -109,8 +109,8 @@ type # Matterbridge options mbHostAddress* {. desc: "Listening address of the Matterbridge host", - defaultValue: ValidIpAddress.init("127.0.0.1") - name: "mb-host-address" }: ValidIpAddress + defaultValue: parseIpAddress("127.0.0.1") + name: "mb-host-address" }: IpAddress mbHostPort* {. desc: "Listening port of the Matterbridge host", @@ -149,14 +149,14 @@ proc parseCmdArg*(T: type crypto.PrivateKey, p: string): T = proc completeCmdArg*(T: type crypto.PrivateKey, val: string): seq[string] = return @[] -proc parseCmdArg*(T: type ValidIpAddress, p: string): T = +proc parseCmdArg*(T: type IpAddress, p: string): T = try: - result = ValidIpAddress.init(p) + result = parseIpAddress(p) except CatchableError: raise newException(ValueError, "Invalid IP address") -proc completeCmdArg*(T: type ValidIpAddress, val: string): seq[string] = +proc completeCmdArg*(T: type IpAddress, val: string): seq[string] = return @[] -func defaultListenAddress*(conf: Chat2MatterbridgeConf): ValidIpAddress = - (static ValidIpAddress.init("0.0.0.0")) +func defaultListenAddress*(conf: Chat2MatterbridgeConf): IpAddress = + (parseIpAddress("0.0.0.0")) diff --git a/apps/networkmonitor/networkmonitor.nim b/apps/networkmonitor/networkmonitor.nim index 2d676c0d40..ece9bc1c82 100644 --- a/apps/networkmonitor/networkmonitor.nim +++ b/apps/networkmonitor/networkmonitor.nim @@ -300,7 +300,7 @@ proc crawlNetwork(node: WakuNode, await sleepAsync(crawlInterval.millis - elapsed.millis) -proc retrieveDynamicBootstrapNodes(dnsDiscovery: bool, dnsDiscoveryUrl: string, dnsDiscoveryNameServers: seq[ValidIpAddress]): Result[seq[RemotePeerInfo], string] = +proc retrieveDynamicBootstrapNodes(dnsDiscovery: bool, dnsDiscoveryUrl: string, dnsDiscoveryNameServers: seq[IpAddress]): Result[seq[RemotePeerInfo], string] = if dnsDiscovery and dnsDiscoveryUrl != "": # DNS discovery debug "Discovering nodes using Waku DNS discovery", url=dnsDiscoveryUrl @@ -328,7 +328,7 @@ proc retrieveDynamicBootstrapNodes(dnsDiscovery: bool, dnsDiscoveryUrl: string, proc getBootstrapFromDiscDns(conf: NetworkMonitorConf): Result[seq[enr.Record], string] = try: - let dnsNameServers = @[ValidIpAddress.init("1.1.1.1"), ValidIpAddress.init("1.0.0.1")] + let dnsNameServers = @[parseIpAddress("1.1.1.1"), parseIpAddress("1.0.0.1")] let dynamicBootstrapNodesRes = retrieveDynamicBootstrapNodes(true, conf.dnsDiscoveryUrl, dnsNameServers) if not dynamicBootstrapNodesRes.isOk(): error("failed discovering peers from DNS") @@ -350,12 +350,12 @@ proc getBootstrapFromDiscDns(conf: NetworkMonitorConf): Result[seq[enr.Record], proc initAndStartApp(conf: NetworkMonitorConf): Result[(WakuNode, WakuDiscoveryV5), string] = let bindIp = try: - ValidIpAddress.init("0.0.0.0") + parseIpAddress("0.0.0.0") except CatchableError: return err("could not start node: " & getCurrentExceptionMsg()) let extIp = try: - ValidIpAddress.init("127.0.0.1") + parseIpAddress("127.0.0.1") except CatchableError: return err("could not start node: " & getCurrentExceptionMsg()) diff --git a/apps/networkmonitor/networkmonitor_config.nim b/apps/networkmonitor/networkmonitor_config.nim index ac5832568c..600c336dfe 100644 --- a/apps/networkmonitor/networkmonitor_config.nim +++ b/apps/networkmonitor/networkmonitor_config.nim @@ -46,8 +46,8 @@ type metricsServerAddress* {. desc: "Listening address of the metrics server." - defaultValue: ValidIpAddress.init("127.0.0.1") - name: "metrics-server-address" }: ValidIpAddress + defaultValue: parseIpAddress("127.0.0.1") + name: "metrics-server-address" }: IpAddress metricsServerPort* {. desc: "Listening HTTP port of the metrics server." @@ -64,13 +64,13 @@ type defaultValue: 8009, name: "metrics-rest-port" }: uint16 -proc parseCmdArg*(T: type ValidIpAddress, p: string): T = +proc parseCmdArg*(T: type IpAddress, p: string): T = try: - result = ValidIpAddress.init(p) + result = parseIpAddress(p) except CatchableError as e: raise newException(ValueError, "Invalid IP address") -proc completeCmdArg*(T: type ValidIpAddress, val: string): seq[string] = +proc completeCmdArg*(T: type IpAddress, val: string): seq[string] = return @[] proc parseCmdArg*(T: type chronos.Duration, p: string): T = diff --git a/apps/networkmonitor/networkmonitor_metrics.nim b/apps/networkmonitor/networkmonitor_metrics.nim index e93d3da58c..8ebc765b0c 100644 --- a/apps/networkmonitor/networkmonitor_metrics.nim +++ b/apps/networkmonitor/networkmonitor_metrics.nim @@ -90,7 +90,7 @@ proc installHandler*(router: var RestRouter, # TODO: toJson() includes the hash return RestApiResponse.response($(%numMessagesPerContentTopic), contentType="application/json") -proc startMetricsServer*(serverIp: ValidIpAddress, serverPort: Port): Result[void, string] = +proc startMetricsServer*(serverIp: IpAddress, serverPort: Port): Result[void, string] = info "Starting metrics HTTP server", serverIp, serverPort try: diff --git a/apps/wakucanary/wakucanary.nim b/apps/wakucanary/wakucanary.nim index fbc82f3a70..1789f34a80 100644 --- a/apps/wakucanary/wakucanary.nim +++ b/apps/wakucanary/wakucanary.nim @@ -121,8 +121,8 @@ proc main(rng: ref HmacDrbgContext): Future[int] {.async.} = # create dns resolver let nameServers = @[ - initTAddress(ValidIpAddress.init("1.1.1.1"), Port(53)), - initTAddress(ValidIpAddress.init("1.0.0.1"), Port(53))] + initTAddress(parseIpAddress("1.1.1.1"), Port(53)), + initTAddress(parseIpAddress("1.0.0.1"), Port(53))] resolver: DnsResolver = DnsResolver.new(nameServers) if conf.logLevel != LogLevel.NONE: @@ -149,7 +149,7 @@ proc main(rng: ref HmacDrbgContext): Future[int] {.async.} = let nodeKey = crypto.PrivateKey.random(Secp256k1, rng[])[] - bindIp = ValidIpAddress.init("0.0.0.0") + bindIp = parseIpAddress("0.0.0.0") wsBindPort = Port(conf.nodePort + WebSocketPortOffset) nodeTcpPort = Port(conf.nodePort) isWs = peer.addrs[0].contains(multiCodec("ws")).get() diff --git a/apps/wakunode2/app.nim b/apps/wakunode2/app.nim index a8516a7b0a..c5f562f742 100644 --- a/apps/wakunode2/app.nim +++ b/apps/wakunode2/app.nim @@ -181,7 +181,10 @@ proc setupPeerPersistence*(app: var App): AppResult[void] = ## Retrieve dynamic bootstrap nodes (DNS discovery) -proc retrieveDynamicBootstrapNodes*(dnsDiscovery: bool, dnsDiscoveryUrl: string, dnsDiscoveryNameServers: seq[ValidIpAddress]): AppResult[seq[RemotePeerInfo]] = +proc retrieveDynamicBootstrapNodes*(dnsDiscovery: bool, + dnsDiscoveryUrl: string, + dnsDiscoveryNameServers: seq[IpAddress]): + AppResult[seq[RemotePeerInfo]] = if dnsDiscovery and dnsDiscoveryUrl != "": # DNS discovery @@ -647,7 +650,7 @@ proc startApp*(app: var App): AppResult[void] = ## Monitoring and external interfaces -proc startRestServer(app: App, address: ValidIpAddress, port: Port, conf: WakuNodeConf): AppResult[RestServerRef] = +proc startRestServer(app: App, address: IpAddress, port: Port, conf: WakuNodeConf): AppResult[RestServerRef] = # Used to register api endpoints that are not currently installed as keys, # values are holding error messages to be returned to the client @@ -752,7 +755,7 @@ proc startRestServer(app: App, address: ValidIpAddress, port: Port, conf: WakuNo ok(server) -proc startRpcServer(app: App, address: ValidIpAddress, port: Port, conf: WakuNodeConf): AppResult[RpcHttpServer] = +proc startRpcServer(app: App, address: IpAddress, port: Port, conf: WakuNodeConf): AppResult[RpcHttpServer] = let ta = initTAddress(address, port) var server: RpcHttpServer @@ -792,7 +795,7 @@ proc startRpcServer(app: App, address: ValidIpAddress, port: Port, conf: WakuNod ok(server) -proc startMetricsServer(serverIp: ValidIpAddress, serverPort: Port): AppResult[MetricsHttpServerRef] = +proc startMetricsServer(serverIp: IpAddress, serverPort: Port): AppResult[MetricsHttpServerRef] = info "Starting metrics HTTP server", serverIp= $serverIp, serverPort= $serverPort let metricsServerRes = MetricsHttpServerRef.new($serverIp, serverPort) @@ -845,7 +848,7 @@ proc setupMonitoringAndExternalInterfaces*(app: var App): AppResult[void] = # App shutdown -proc stop*(app: App): Future[void] {.async.} = +proc stop*(app: App): Future[void] {.async: (raises: [Exception]).} = if app.restServer.isSome(): await app.restServer.get().stop() diff --git a/apps/wakunode2/external_config.nim b/apps/wakunode2/external_config.nim index 5598077d9d..efc2058a66 100644 --- a/apps/wakunode2/external_config.nim +++ b/apps/wakunode2/external_config.nim @@ -112,7 +112,7 @@ type listenAddress* {. defaultValue: defaultListenAddress() desc: "Listening address for LibP2P (and Discovery v5, if enabled) traffic." - name: "listen-address"}: ValidIpAddress + name: "listen-address"}: IpAddress tcpPort* {. desc: "TCP listening port." @@ -165,8 +165,8 @@ type dnsAddrsNameServers* {. desc: "DNS name server IPs to query for DNS multiaddrs resolution. Argument may be repeated." - defaultValue: @[ValidIpAddress.init("1.1.1.1"), ValidIpAddress.init("1.0.0.1")] - name: "dns-addrs-name-server" }: seq[ValidIpAddress] + defaultValue: @[parseIpAddress("1.1.1.1"), parseIpAddress("1.0.0.1")] + name: "dns-addrs-name-server" }: seq[IpAddress] dns4DomainName* {. desc: "The domain name resolving to the node's public IPv4 address", @@ -316,8 +316,8 @@ type rpcAddress* {. desc: "Listening address of the JSON-RPC server.", - defaultValue: ValidIpAddress.init("127.0.0.1") - name: "rpc-address" }: ValidIpAddress + defaultValue: parseIpAddress("127.0.0.1") + name: "rpc-address" }: IpAddress rpcPort* {. desc: "Listening port of the JSON-RPC server.", @@ -343,8 +343,8 @@ type restAddress* {. desc: "Listening address of the REST HTTP server.", - defaultValue: ValidIpAddress.init("127.0.0.1") - name: "rest-address" }: ValidIpAddress + defaultValue: parseIpAddress("127.0.0.1") + name: "rest-address" }: IpAddress restPort* {. desc: "Listening port of the REST HTTP server.", @@ -375,8 +375,8 @@ type metricsServerAddress* {. desc: "Listening address of the metrics server." - defaultValue: ValidIpAddress.init("127.0.0.1") - name: "metrics-server-address" }: ValidIpAddress + defaultValue: parseIpAddress("127.0.0.1") + name: "metrics-server-address" }: IpAddress metricsServerPort* {. desc: "Listening HTTP port of the metrics server." @@ -402,8 +402,8 @@ type dnsDiscoveryNameServers* {. desc: "DNS name server IPs to query. Argument may be repeated." - defaultValue: @[ValidIpAddress.init("1.1.1.1"), ValidIpAddress.init("1.0.0.1")] - name: "dns-discovery-name-server" }: seq[ValidIpAddress] + defaultValue: @[parseIpAddress("1.1.1.1"), parseIpAddress("1.0.0.1")] + name: "dns-discovery-name-server" }: seq[IpAddress] ## Discovery v5 config @@ -510,19 +510,19 @@ proc parseCmdArg*(T: type ProtectedTopic, p: string): T = proc completeCmdArg*(T: type ProtectedTopic, val: string): seq[string] = return @[] -proc parseCmdArg*(T: type ValidIpAddress, p: string): T = +proc parseCmdArg*(T: type IpAddress, p: string): T = try: - ValidIpAddress.init(p) + parseIpAddress(p) except CatchableError: raise newException(ValueError, "Invalid IP address") -proc completeCmdArg*(T: type ValidIpAddress, val: string): seq[string] = +proc completeCmdArg*(T: type IpAddress, val: string): seq[string] = return @[] -proc defaultListenAddress*(): ValidIpAddress = +proc defaultListenAddress*(): IpAddress = # TODO: How should we select between IPv4 and IPv6 # Maybe there should be a config option for this. - (static ValidIpAddress.init("0.0.0.0")) + (static parseIpAddress("0.0.0.0")) proc parseCmdArg*(T: type Port, p: string): T = try: diff --git a/apps/wakunode2/internal_config.nim b/apps/wakunode2/internal_config.nim index 39826fdfef..95c2a6c1c7 100644 --- a/apps/wakunode2/internal_config.nim +++ b/apps/wakunode2/internal_config.nim @@ -143,13 +143,13 @@ proc networkConfiguration*(conf: WakuNodeConf, if dnsRes.isErr(): return err($dnsRes.error) # Pass error down the stack - extIp = some(ValidIpAddress.init(dnsRes.get())) + extIp = some(parseIpAddress(dnsRes.get())) except CatchableError: return err("Could not update extIp to resolved DNS IP: " & getCurrentExceptionMsg()) # Wrap in none because NetConfig does not have a default constructor # TODO: We could change bindIp in NetConfig to be something less restrictive - # than ValidIpAddress, which doesn't allow default construction + # than IpAddress, which doesn't allow default construction let netConfigRes = NetConfig.init( clusterId = conf.clusterId, bindIp = conf.listenAddress, diff --git a/apps/wakunode2/wakunode2.nim b/apps/wakunode2/wakunode2.nim index b1612c763b..39e4283b85 100644 --- a/apps/wakunode2/wakunode2.nim +++ b/apps/wakunode2/wakunode2.nim @@ -107,7 +107,7 @@ when isMainModule: ## Setup shutdown hooks for this process. ## Stop node gracefully on shutdown. - proc asyncStopper(node: App) {.async.} = + proc asyncStopper(node: App) {.async: (raises: [Exception]).} = await node.stop() quit(QuitSuccess) diff --git a/examples/publisher.nim b/examples/publisher.nim index df82867956..975e1b85ad 100644 --- a/examples/publisher.nim +++ b/examples/publisher.nim @@ -40,7 +40,7 @@ proc setupAndPublish(rng: ref HmacDrbgContext) {.async.} = notice "starting publisher", wakuPort=wakuPort, discv5Port=discv5Port let nodeKey = crypto.PrivateKey.random(Secp256k1, rng[]).get() - ip = ValidIpAddress.init("0.0.0.0") + ip = parseIpAddress("0.0.0.0") flags = CapabilitiesBitfield.init(lightpush = false, filter = false, store = false, relay = true) var builder = WakuNodeBuilder.init() diff --git a/examples/subscriber.nim b/examples/subscriber.nim index 85cf69a128..ba7813ae3b 100644 --- a/examples/subscriber.nim +++ b/examples/subscriber.nim @@ -35,7 +35,7 @@ proc setupAndSubscribe(rng: ref HmacDrbgContext) {.async.} = notice "starting subscriber", wakuPort=wakuPort, discv5Port=discv5Port let nodeKey = crypto.PrivateKey.random(Secp256k1, rng[])[] - ip = ValidIpAddress.init("0.0.0.0") + ip = parseIpAddress("0.0.0.0") flags = CapabilitiesBitfield.init(lightpush = false, filter = false, store = false, relay = true) var builder = WakuNodeBuilder.init() diff --git a/library/callback.nim b/library/callback.nim index 79cb0c0051..55301e7bb4 100644 --- a/library/callback.nim +++ b/library/callback.nim @@ -2,4 +2,4 @@ type WakuCallBack* = proc(callerRet: cint, msg: ptr cchar, - len: csize_t) {.cdecl, gcsafe.} + len: csize_t) {.cdecl, gcsafe, raises: [].} diff --git a/library/events/json_error_event.nim b/library/events/json_error_event.nim index 3c672c1895..639a5b670e 100644 --- a/library/events/json_error_event.nim +++ b/library/events/json_error_event.nim @@ -14,5 +14,5 @@ proc new*(T: type JsonErrorEvent, eventType: "error", message: message) -method `$`*(jsonError: JsonErrorEvent): string = +method `$`*(jsonError: JsonErrorEvent): string {.raises: [].}= $( %* jsonError ) \ No newline at end of file diff --git a/library/libwaku.nim b/library/libwaku.nim index c60c752bda..3780073c15 100644 --- a/library/libwaku.nim +++ b/library/libwaku.nim @@ -44,7 +44,7 @@ const RET_MISSING_CALLBACK: cint = 2 var extEventCallback*: WakuCallBack = nil proc relayEventCallback(pubsubTopic: PubsubTopic, - msg: WakuMessage): Future[void] {.async, gcsafe.} = + msg: WakuMessage): Future[void] {.async.} = # Callback that hadles the Waku Relay events. i.e. messages or errors. if not isNil(extEventCallback): try: diff --git a/library/waku_thread/config.nim b/library/waku_thread/config.nim index 29ca7b11c5..c2f077fa67 100644 --- a/library/waku_thread/config.nim +++ b/library/waku_thread/config.nim @@ -37,7 +37,7 @@ proc parsePrivateKey(jsonNode: JsonNode, return true proc parseListenAddr(jsonNode: JsonNode, - listenAddr: var ValidIpAddress, + listenAddr: var IpAddress, jsonResp: var JsonEvent): bool = if not jsonNode.contains("host"): @@ -51,7 +51,7 @@ proc parseListenAddr(jsonNode: JsonNode, let host = jsonNode["host"].getStr() try: - listenAddr = ValidIpAddress.init(host) + listenAddr = parseIpAddress(host) except CatchableError: let msg = "Invalid host IP address: " & getCurrentExceptionMsg() jsonResp = JsonErrorEvent.new(msg) @@ -175,7 +175,7 @@ proc parseConfig*(configNodeJson: string, storeVacuum: var bool, storeDbMigration: var bool, storeMaxNumDbConnections: var int, - jsonResp: var JsonEvent): bool = + jsonResp: var JsonEvent): bool {.raises: [].} = if configNodeJson.len == 0: jsonResp = JsonErrorEvent.new("The configNodeJson is empty") @@ -184,29 +184,42 @@ proc parseConfig*(configNodeJson: string, var jsonNode: JsonNode try: jsonNode = parseJson(configNodeJson) - except JsonParsingError: + except Exception, IOError, JsonParsingError: jsonResp = JsonErrorEvent.new("Exception: " & getCurrentExceptionMsg()) return false # key - if not parsePrivateKey(jsonNode, privateKey, jsonResp): + try: + if not parsePrivateKey(jsonNode, privateKey, jsonResp): + return false + except Exception, KeyError: + jsonResp = JsonErrorEvent.new("Exception calling parsePrivateKey: " & getCurrentExceptionMsg()) return false # listenAddr - var listenAddr = ValidIpAddress.init("127.0.0.1") - if not parseListenAddr(jsonNode, listenAddr, jsonResp): + var listenAddr: IpAddress + try: + listenAddr = parseIpAddress("127.0.0.1") + if not parseListenAddr(jsonNode, listenAddr, jsonResp): + return false + except Exception, ValueError: + jsonResp = JsonErrorEvent.new("Exception calling parseIpAddress: " & getCurrentExceptionMsg()) return false # port var port = 0 - if not parsePort(jsonNode, port, jsonResp): + try: + if not parsePort(jsonNode, port, jsonResp): + return false + except Exception, ValueError: + jsonResp = JsonErrorEvent.new("Exception calling parsePort: " & getCurrentExceptionMsg()) return false let natRes = setupNat("any", clientId, Port(uint16(port)), Port(uint16(port))) if natRes.isErr(): - jsonResp = JsonErrorEvent.new(fmt"failed to setup NAT: {$natRes.error}") + jsonResp = JsonErrorEvent.new("failed to setup NAT: " & $natRes.error) return false let (extIp, extTcpPort, _) = natRes.get() @@ -217,15 +230,27 @@ proc parseConfig*(configNodeJson: string, extTcpPort # relay - if not parseRelay(jsonNode, relay, jsonResp): + try: + if not parseRelay(jsonNode, relay, jsonResp): + return false + except Exception, KeyError: + jsonResp = JsonErrorEvent.new("Exception calling parseRelay: " & getCurrentExceptionMsg()) return false # topics - parseTopics(jsonNode, topics) + try: + parseTopics(jsonNode, topics) + except Exception, KeyError: + jsonResp = JsonErrorEvent.new("Exception calling parseTopics: " & getCurrentExceptionMsg()) + return false # store - if not parseStore(jsonNode, store, storeNode, storeRetentionPolicy, storeDbUrl, - storeVacuum, storeDbMigration, storeMaxNumDbConnections, jsonResp): + try: + if not parseStore(jsonNode, store, storeNode, storeRetentionPolicy, storeDbUrl, + storeVacuum, storeDbMigration, storeMaxNumDbConnections, jsonResp): + return false + except Exception, KeyError: + jsonResp = JsonErrorEvent.new("Exception calling parseStore: " & getCurrentExceptionMsg()) return false let wakuFlags = CapabilitiesBitfield.init( diff --git a/library/waku_thread/inter_thread_communication/requests/node_lifecycle_request.nim b/library/waku_thread/inter_thread_communication/requests/node_lifecycle_request.nim index bf83ab1a7a..2a444a78df 100644 --- a/library/waku_thread/inter_thread_communication/requests/node_lifecycle_request.nim +++ b/library/waku_thread/inter_thread_communication/requests/node_lifecycle_request.nim @@ -107,9 +107,8 @@ proc createNode(configJson: cstring): Future[Result[WakuNode, string]] {.async.} = var privateKey: PrivateKey - var netConfig = NetConfig.init(ValidIpAddress.init("127.0.0.1"), + var netConfig = NetConfig.init(parseIpAddress("127.0.0.1"), Port(60000'u16)).value - ## relay var relay: bool var topics = @[""] @@ -125,20 +124,23 @@ proc createNode(configJson: cstring): var jsonResp: JsonEvent - if not parseConfig($configJson, - privateKey, - netConfig, - relay, - topics, - store, - storeNode, - storeRetentionPolicy, - storeDbUrl, - storeVacuum, - storeDbMigration, - storeMaxNumDbConnections, - jsonResp): - return err($jsonResp) + try: + if not parseConfig($configJson, + privateKey, + netConfig, + relay, + topics, + store, + storeNode, + storeRetentionPolicy, + storeDbUrl, + storeVacuum, + storeDbMigration, + storeMaxNumDbConnections, + jsonResp): + return err($jsonResp) + except Exception: + return err("exception calling parseConfig: " & getCurrentExceptionMsg()) var enrBuilder = EnrBuilder.init(privateKey) @@ -217,6 +219,9 @@ proc process*(self: ptr NodeLifecycleRequest, await node[].start() of STOP_NODE: - await node[].stop() + try: + await node[].stop() + except Exception: + return err("exception stopping node: " & getCurrentExceptionMsg()) return ok("") diff --git a/tests/common/test_confutils_envvar.nim b/tests/common/test_confutils_envvar.nim index 5fdd6c788c..7220565cc6 100644 --- a/tests/common/test_confutils_envvar.nim +++ b/tests/common/test_confutils_envvar.nim @@ -24,9 +24,9 @@ type TestConf = object name: "test-file" }: Option[InputFile] listenAddress* {. - defaultValue: ValidIpAddress.init("127.0.0.1"), + defaultValue: parseIpAddress("127.0.0.1"), desc: "Listening address", - name: "listen-address"}: ValidIpAddress + name: "listen-address"}: IpAddress tcpPort* {. desc: "TCP listening port", @@ -70,7 +70,7 @@ suite "nim-confutils - envvar": let conf = confLoadRes.get() check: - conf.listenAddress == ValidIpAddress.init(listenAddress) + conf.listenAddress == parseIpAddress(listenAddress) conf.tcpPort == Port(8080) conf.configFile.isSome() diff --git a/tests/common/test_enr_builder.nim b/tests/common/test_enr_builder.nim index 0c16bb7b4e..5963e01253 100644 --- a/tests/common/test_enr_builder.nim +++ b/tests/common/test_enr_builder.nim @@ -61,7 +61,7 @@ suite "nim-eth ENR - Ext: IP address and TCP/UDP ports": seqNum = 1u64 privateKey = ethSecp256k1Key("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") - enrIpAddr = ValidIpAddress.init("127.0.0.1") + enrIpAddr = parseIpAddress("127.0.0.1") enrUdpPort = Port(30303) ## When @@ -82,7 +82,7 @@ suite "nim-eth ENR - Ext: IP address and TCP/UDP ports": seqNum = 1u64 privateKey = generateSecp256k1Key() - enrIpAddr = ValidIpAddress.init("127.0.0.1") + enrIpAddr = parseIpAddress("127.0.0.1") enrTcpPort = Port(30301) let expectedPubKey = privateKey.getPublicKey().get().getRawBytes().get() @@ -112,7 +112,7 @@ suite "nim-eth ENR - Ext: IP address and TCP/UDP ports": seqNum = 1u64 privateKey = generateSecp256k1Key() - enrIpAddr = ValidIpAddress.init("::1") + enrIpAddr = parseIpAddress("::1") enrUdpPort = Port(30301) let expectedPubKey = privateKey.getPublicKey().get().getRawBytes().get() diff --git a/tests/node/test_wakunode_filter.nim b/tests/node/test_wakunode_filter.nim index 2c32c98102..7b7024b54f 100644 --- a/tests/node/test_wakunode_filter.nim +++ b/tests/node/test_wakunode_filter.nim @@ -60,8 +60,8 @@ suite "Waku Filter - End to End": serverKey = generateSecp256k1Key() clientKey = generateSecp256k1Key() - server = newTestWakuNode(serverKey, ValidIpAddress.init("0.0.0.0"), Port(0)) - client = newTestWakuNode(clientKey, ValidIpAddress.init("0.0.0.0"), Port(0)) + server = newTestWakuNode(serverKey, parseIpAddress("0.0.0.0"), Port(0)) + client = newTestWakuNode(clientKey, parseIpAddress("0.0.0.0"), Port(0)) waitFor allFutures(server.start(), client.start()) @@ -140,7 +140,7 @@ suite "Waku Filter - End to End": # Given a server node with Relay without Filter let serverKey = generateSecp256k1Key() - server = newTestWakuNode(serverKey, ValidIpAddress.init("0.0.0.0"), Port(0)) + server = newTestWakuNode(serverKey, parseIpAddress("0.0.0.0"), Port(0)) waitFor server.start() waitFor server.mountRelay() diff --git a/tests/test_peer_exchange.nim b/tests/test_peer_exchange.nim index a5b52f84f7..b6ac30f396 100644 --- a/tests/test_peer_exchange.nim +++ b/tests/test_peer_exchange.nim @@ -21,7 +21,7 @@ procSuite "Peer Exchange": # Create nodes and ENR. These will be added to the discoverable list let - bindIp = ValidIpAddress.init("0.0.0.0") + bindIp = parseIpAddress("0.0.0.0") nodeKey1 = generateSecp256k1Key() node1 = newTestWakuNode(nodeKey1, bindIp, Port(0)) nodeKey2 = generateSecp256k1Key() diff --git a/tests/test_peer_manager.nim b/tests/test_peer_manager.nim index a480adc500..4f7a6598fb 100644 --- a/tests/test_peer_manager.nim +++ b/tests/test_peer_manager.nim @@ -37,7 +37,7 @@ import procSuite "Peer Manager": asyncTest "connectRelay() works": # Create 2 nodes - let nodes = toSeq(0..<2).mapIt(newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0))) + let nodes = toSeq(0..<2).mapIt(newTestWakuNode(generateSecp256k1Key(), parseIpAddress("0.0.0.0"), Port(0))) await allFutures(nodes.mapIt(it.start())) let connOk = await nodes[0].peerManager.connectRelay(nodes[1].peerInfo.toRemotePeerInfo()) @@ -50,7 +50,7 @@ procSuite "Peer Manager": asyncTest "dialPeer() works": # Create 2 nodes - let nodes = toSeq(0..<2).mapIt(newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0))) + let nodes = toSeq(0..<2).mapIt(newTestWakuNode(generateSecp256k1Key(), parseIpAddress("0.0.0.0"), Port(0))) await allFutures(nodes.mapIt(it.start())) await allFutures(nodes.mapIt(it.mountRelay())) @@ -78,7 +78,7 @@ procSuite "Peer Manager": asyncTest "dialPeer() fails gracefully": # Create 2 nodes and start them - let nodes = toSeq(0..<2).mapIt(newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0))) + let nodes = toSeq(0..<2).mapIt(newTestWakuNode(generateSecp256k1Key(), parseIpAddress("0.0.0.0"), Port(0))) await allFutures(nodes.mapIt(it.start())) await allFutures(nodes.mapIt(it.mountRelay())) @@ -101,7 +101,7 @@ procSuite "Peer Manager": asyncTest "Adding, selecting and filtering peers work": let - node = newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0)) + node = newTestWakuNode(generateSecp256k1Key(), parseIpAddress("0.0.0.0"), Port(0)) # Create filter peer filterLoc = MultiAddress.init("/ip4/127.0.0.1/tcp/0").tryGet() @@ -132,7 +132,7 @@ procSuite "Peer Manager": asyncTest "Peer manager keeps track of connections": # Create 2 nodes - let nodes = toSeq(0..<2).mapIt(newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0))) + let nodes = toSeq(0..<2).mapIt(newTestWakuNode(generateSecp256k1Key(), parseIpAddress("0.0.0.0"), Port(0))) await allFutures(nodes.mapIt(it.start())) await allFutures(nodes.mapIt(it.mountRelay())) @@ -176,7 +176,7 @@ procSuite "Peer Manager": asyncTest "Peer manager updates failed peers correctly": # Create 2 nodes - let nodes = toSeq(0..<2).mapIt(newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0))) + let nodes = toSeq(0..<2).mapIt(newTestWakuNode(generateSecp256k1Key(), parseIpAddress("0.0.0.0"), Port(0))) await allFutures(nodes.mapIt(it.start())) await allFutures(nodes.mapIt(it.mountRelay())) @@ -228,11 +228,11 @@ procSuite "Peer Manager": storage = WakuPeerStorage.new(database)[] node1 = newTestWakuNode( generateSecp256k1Key(), - ValidIpAddress.init("127.0.0.1"), + parseIpAddress("127.0.0.1"), Port(44048), peerStorage = storage ) - node2 = newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("127.0.0.1"), Port(34023)) + node2 = newTestWakuNode(generateSecp256k1Key(), parseIpAddress("127.0.0.1"), Port(34023)) node1.mountMetadata(0).expect("Mounted Waku Metadata") node2.mountMetadata(0).expect("Mounted Waku Metadata") @@ -265,7 +265,7 @@ procSuite "Peer Manager": # Simulate restart by initialising a new node using the same storage let node3 = newTestWakuNode( generateSecp256k1Key(), - ValidIpAddress.init("127.0.0.1"), + parseIpAddress("127.0.0.1"), Port(56037), peerStorage = storage ) @@ -302,7 +302,7 @@ procSuite "Peer Manager": # different network node1 = newTestWakuNode( generateSecp256k1Key(), - ValidIpAddress.init("0.0.0.0"), + parseIpAddress("0.0.0.0"), Port(0), clusterId = clusterId3, topics = @["/waku/2/rs/3/0"], @@ -311,14 +311,14 @@ procSuite "Peer Manager": # same network node2 = newTestWakuNode( generateSecp256k1Key(), - ValidIpAddress.init("0.0.0.0"), + parseIpAddress("0.0.0.0"), Port(0), clusterId = clusterId4, topics = @["/waku/2/rs/4/0"], ) node3 = newTestWakuNode( generateSecp256k1Key(), - ValidIpAddress.init("0.0.0.0"), + parseIpAddress("0.0.0.0"), Port(0), clusterId = clusterId4, topics = @["/waku/2/rs/4/0"], @@ -350,8 +350,8 @@ procSuite "Peer Manager": let database = SqliteDatabase.new(":memory:")[] storage = WakuPeerStorage.new(database)[] - node1 = newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0), peerStorage = storage) - node2 = newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0)) + node1 = newTestWakuNode(generateSecp256k1Key(), parseIpAddress("0.0.0.0"), Port(0), peerStorage = storage) + node2 = newTestWakuNode(generateSecp256k1Key(), parseIpAddress("0.0.0.0"), Port(0)) peerInfo2 = node2.switch.peerInfo betaCodec = "/vac/waku/relay/2.0.0-beta2" stableCodec = "/vac/waku/relay/2.0.0" @@ -375,7 +375,7 @@ procSuite "Peer Manager": # Simulate restart by initialising a new node using the same storage let - node3 = newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0), peerStorage = storage) + node3 = newTestWakuNode(generateSecp256k1Key(), parseIpAddress("0.0.0.0"), Port(0), peerStorage = storage) await node3.mountRelay() node3.wakuRelay.codec = stableCodec @@ -408,7 +408,7 @@ procSuite "Peer Manager": .mapIt( newTestWakuNode( nodeKey = generateSecp256k1Key(), - bindIp = ValidIpAddress.init("0.0.0.0"), + bindIp = parseIpAddress("0.0.0.0"), bindPort = Port(0), wakuFlags = some(CapabilitiesBitfield.init(@[Relay])) ) @@ -457,7 +457,7 @@ procSuite "Peer Manager": asyncTest "Peer store keeps track of incoming connections": # Create 4 nodes - let nodes = toSeq(0..<4).mapIt(newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0))) + let nodes = toSeq(0..<4).mapIt(newTestWakuNode(generateSecp256k1Key(), parseIpAddress("0.0.0.0"), Port(0))) # Start them await allFutures(nodes.mapIt(it.start())) @@ -520,7 +520,7 @@ procSuite "Peer Manager": let basePeerId = "16Uiu2HAm7QGEZKujdSbbo1aaQyfDPQ6Bw3ybQnj6fruH5Dxwd7D" let - node = newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0)) + node = newTestWakuNode(generateSecp256k1Key(), parseIpAddress("0.0.0.0"), Port(0)) peers = toSeq(1..5) .mapIt( parsePeerInfo("/ip4/0.0.0.0/tcp/30300/p2p/" & basePeerId & $it) @@ -562,7 +562,7 @@ procSuite "Peer Manager": asyncTest "connectedPeers() returns expected number of connections per protocol": # Create 4 nodes - let nodes = toSeq(0..<4).mapIt(newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0))) + let nodes = toSeq(0..<4).mapIt(newTestWakuNode(generateSecp256k1Key(), parseIpAddress("0.0.0.0"), Port(0))) # Start them with relay + filter await allFutures(nodes.mapIt(it.start())) @@ -613,7 +613,7 @@ procSuite "Peer Manager": asyncTest "getNumStreams() returns expected number of connections per protocol": # Create 2 nodes - let nodes = toSeq(0..<2).mapIt(newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0))) + let nodes = toSeq(0..<2).mapIt(newTestWakuNode(generateSecp256k1Key(), parseIpAddress("0.0.0.0"), Port(0))) # Start them with relay + filter await allFutures(nodes.mapIt(it.start())) @@ -839,7 +839,7 @@ procSuite "Peer Manager": asyncTest "colocationLimit is enforced by pruneConnsByIp()": # Create 5 nodes - let nodes = toSeq(0..<5).mapIt(newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0))) + let nodes = toSeq(0..<5).mapIt(newTestWakuNode(generateSecp256k1Key(), parseIpAddress("0.0.0.0"), Port(0))) # Start them with relay + filter await allFutures(nodes.mapIt(it.start())) diff --git a/tests/test_waku_discv5.nim b/tests/test_waku_discv5.nim index dbf18d4a1d..ebac6b923d 100644 --- a/tests/test_waku_discv5.nim +++ b/tests/test_waku_discv5.nim @@ -23,7 +23,7 @@ proc newTestEnrRecord(privKey: libp2p_keys.PrivateKey, flags = none(CapabilitiesBitfield)): waku_enr.Record = var builder = EnrBuilder.init(privKey) builder.withIpAddressAndPorts( - ipAddr = some(ValidIpAddress.init(extIp)), + ipAddr = some(parseIpAddress(extIp)), tcpPort = some(Port(tcpPort)), udpPort = some(Port(udpPort)), ) @@ -43,7 +43,7 @@ proc newTestDiscv5( ): WakuDiscoveryV5 = let config = WakuDiscoveryV5Config( privateKey: eth_keys.PrivateKey(privKey.skkey), - address: ValidIpAddress.init(bindIp), + address: parseIpAddress(bindIp), port: Port(udpPort), bootstrapRecords: bootstrapRecords, ) diff --git a/tests/test_waku_dnsdisc.nim b/tests/test_waku_dnsdisc.nim index ed9365ccaa..c1768f8680 100644 --- a/tests/test_waku_dnsdisc.nim +++ b/tests/test_waku_dnsdisc.nim @@ -25,7 +25,7 @@ suite "Waku DNS Discovery": # Create nodes and ENR. These will be added to the discoverable list let - bindIp = ValidIpAddress.init("0.0.0.0") + bindIp = parseIpAddress("0.0.0.0") nodeKey1 = generateSecp256k1Key() node1 = newTestWakuNode(nodeKey1, bindIp, Port(63500)) enr1 = node1.enr diff --git a/tests/test_waku_keepalive.nim b/tests/test_waku_keepalive.nim index 24da7bd0c3..159fac682b 100644 --- a/tests/test_waku_keepalive.nim +++ b/tests/test_waku_keepalive.nim @@ -23,9 +23,9 @@ suite "Waku Keepalive": asyncTest "handle ping keepalives": let nodeKey1 = generateSecp256k1Key() - node1 = newTestWakuNode(nodeKey1, ValidIpAddress.init("0.0.0.0"), Port(0)) + node1 = newTestWakuNode(nodeKey1, parseIpAddress("0.0.0.0"), Port(0)) nodeKey2 = generateSecp256k1Key() - node2 = newTestWakuNode(nodeKey2, ValidIpAddress.init("0.0.0.0"), Port(0)) + node2 = newTestWakuNode(nodeKey2, parseIpAddress("0.0.0.0"), Port(0)) var completionFut = newFuture[bool]() diff --git a/tests/test_waku_metadata.nim b/tests/test_waku_metadata.nim index e96edb3034..ddbd8fa8cb 100644 --- a/tests/test_waku_metadata.nim +++ b/tests/test_waku_metadata.nim @@ -27,8 +27,8 @@ procSuite "Waku Metadata Protocol": asyncTest "request() returns the supported metadata of the peer": let clusterId = 10.uint32 let - node1 = newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0), clusterId = clusterId) - node2 = newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0), clusterId = clusterId) + node1 = newTestWakuNode(generateSecp256k1Key(), parseIpAddress("0.0.0.0"), Port(0), clusterId = clusterId) + node2 = newTestWakuNode(generateSecp256k1Key(), parseIpAddress("0.0.0.0"), Port(0), clusterId = clusterId) # Start nodes await allFutures([node1.start(), node2.start()]) diff --git a/tests/test_waku_netconfig.nim b/tests/test_waku_netconfig.nim index 713bdcefb5..733f41ba91 100644 --- a/tests/test_waku_netconfig.nim +++ b/tests/test_waku_netconfig.nim @@ -32,7 +32,7 @@ suite "Waku NetConfig": let netConfigRes = NetConfig.init( bindIp = conf.listenAddress, bindPort = conf.tcpPort, - extIp = none(ValidIpAddress), + extIp = none(IpAddress), extPort = none(Port), extMultiAddrs = @[], wsBindPort = conf.websocketPort, @@ -68,7 +68,7 @@ suite "Waku NetConfig": let conf = defaultTestWakuNodeConf() - extIp = ValidIpAddress.init("1.2.3.4") + extIp = parseIpAddress("1.2.3.4") extPort = Port(1234) let netConfigRes = NetConfig.init( @@ -112,7 +112,7 @@ suite "Waku NetConfig": let conf = defaultTestWakuNodeConf() - extIp = ValidIpAddress.init("1.2.3.4") + extIp = parseIpAddress("1.2.3.4") extPort = Port(1234) extMultiAddrs = @[ip4TcpEndPoint(extIp, extPort)] @@ -136,7 +136,7 @@ suite "Waku NetConfig": let conf = defaultTestWakuNodeConf() dns4DomainName = "example.com" - extIp = ValidIpAddress.init("1.2.3.4") + extIp = parseIpAddress("1.2.3.4") extPort = Port(1234) let netConfigRes = NetConfig.init( @@ -201,7 +201,7 @@ suite "Waku NetConfig": let conf = defaultTestWakuNodeConf() - extIp = ValidIpAddress.init("1.2.3.4") + extIp = parseIpAddress("1.2.3.4") extPort = Port(1234) wssEnabled = false @@ -254,7 +254,7 @@ suite "Waku NetConfig": let conf = defaultTestWakuNodeConf() dns4DomainName = "example.com" - extIp = ValidIpAddress.init("1.2.3.4") + extIp = parseIpAddress("1.2.3.4") extPort = Port(1234) wssEnabled = false @@ -299,7 +299,7 @@ suite "Waku NetConfig": let conf = defaultTestWakuNodeConf() - extIp = ValidIpAddress.init("1.2.3.4") + extIp = parseIpAddress("1.2.3.4") extPort = Port(1234) let netConfigRes = NetConfig.init( @@ -342,7 +342,7 @@ suite "Waku NetConfig": var conf = defaultTestWakuNodeConf() - extAddIp = ValidIpAddress.init("1.2.3.4") + extAddIp = parseIpAddress("1.2.3.4") extAddPort = Port(1234) wsEnabled = true wssEnabled = false @@ -386,7 +386,7 @@ suite "Waku NetConfig": let conf = defaultTestWakuNodeConf() - extAddIp = ValidIpAddress.init("1.2.3.4") + extAddIp = parseIpAddress("1.2.3.4") extAddPort = Port(1234) extMultiAddrs = @[ip4TcpEndPoint(extAddIp, extAddPort)] diff --git a/tests/test_waku_peer_exchange.nim b/tests/test_waku_peer_exchange.nim index d4159dd8f5..1cc9580918 100644 --- a/tests/test_waku_peer_exchange.nim +++ b/tests/test_waku_peer_exchange.nim @@ -81,8 +81,8 @@ procSuite "Waku Peer Exchange": store = false, relay = true ) - bindIp = ValidIpAddress.init("0.0.0.0") - extIp = ValidIpAddress.init("127.0.0.1") + bindIp = parseIpAddress("0.0.0.0") + extIp = parseIpAddress("127.0.0.1") nodeKey1 = generateSecp256k1Key() nodeTcpPort1 = Port(64010) @@ -193,8 +193,8 @@ procSuite "Waku Peer Exchange": asyncTest "peer exchange request functions returns some discovered peers": let - node1 = newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0)) - node2 = newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0)) + node1 = newTestWakuNode(generateSecp256k1Key(), parseIpAddress("0.0.0.0"), Port(0)) + node2 = newTestWakuNode(generateSecp256k1Key(), parseIpAddress("0.0.0.0"), Port(0)) # Start and mount peer exchange await allFutures([node1.start(), node2.start()]) @@ -237,8 +237,8 @@ procSuite "Waku Peer Exchange": asyncTest "peer exchange handler works as expected": let - node1 = newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0)) - node2 = newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0)) + node1 = newTestWakuNode(generateSecp256k1Key(), parseIpAddress("0.0.0.0"), Port(0)) + node2 = newTestWakuNode(generateSecp256k1Key(), parseIpAddress("0.0.0.0"), Port(0)) # Start and mount peer exchange await allFutures([node1.start(), node2.start()]) @@ -273,8 +273,8 @@ procSuite "Waku Peer Exchange": asyncTest "peer exchange request fails gracefully": let - node1 = newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0)) - node2 = newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0)) + node1 = newTestWakuNode(generateSecp256k1Key(), parseIpAddress("0.0.0.0"), Port(0)) + node2 = newTestWakuNode(generateSecp256k1Key(), parseIpAddress("0.0.0.0"), Port(0)) # Start and mount peer exchange await allFutures([node1.start(), node2.start()]) @@ -296,7 +296,7 @@ procSuite "Waku Peer Exchange": asyncTest "connections are closed after response is sent": # Create 3 nodes - let nodes = toSeq(0..<3).mapIt(newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0))) + let nodes = toSeq(0..<3).mapIt(newTestWakuNode(generateSecp256k1Key(), parseIpAddress("0.0.0.0"), Port(0))) await allFutures(nodes.mapIt(it.start())) await allFutures(nodes.mapIt(it.mountPeerExchange())) diff --git a/tests/test_wakunode.nim b/tests/test_wakunode.nim index 7fdc15a98b..787bca1a2b 100644 --- a/tests/test_wakunode.nim +++ b/tests/test_wakunode.nim @@ -31,9 +31,9 @@ suite "WakuNode": asyncTest "Protocol matcher works as expected": let nodeKey1 = generateSecp256k1Key() - node1 = newTestWakuNode(nodeKey1, ValidIpAddress.init("0.0.0.0"), Port(61000)) + node1 = newTestWakuNode(nodeKey1, parseIpAddress("0.0.0.0"), Port(61000)) nodeKey2 = generateSecp256k1Key() - node2 = newTestWakuNode(nodeKey2, ValidIpAddress.init("0.0.0.0"), Port(61002)) + node2 = newTestWakuNode(nodeKey2, parseIpAddress("0.0.0.0"), Port(61002)) pubSubTopic = "/waku/2/default-waku/proto" contentTopic = ContentTopic("/waku/2/default-content/proto") payload = "hello world".toBytes() @@ -85,9 +85,9 @@ suite "WakuNode": let nodeKey1 = generateSecp256k1Key() - node1 = newTestWakuNode(nodeKey1, ValidIpAddress.init("0.0.0.0"), Port(61020), nameResolver = resolver) + node1 = newTestWakuNode(nodeKey1, parseIpAddress("0.0.0.0"), Port(61020), nameResolver = resolver) nodeKey2 = generateSecp256k1Key() - node2 = newTestWakuNode(nodeKey2, ValidIpAddress.init("0.0.0.0"), Port(61022)) + node2 = newTestWakuNode(nodeKey2, parseIpAddress("0.0.0.0"), Port(61022)) # Construct DNS multiaddr for node2 let @@ -110,13 +110,13 @@ suite "WakuNode": let maxConnections = 2 nodeKey1 = generateSecp256k1Key() - node1 = newTestWakuNode(nodeKey1, ValidIpAddress.init("0.0.0.0"), + node1 = newTestWakuNode(nodeKey1, parseIpAddress("0.0.0.0"), Port(60010), maxConnections = maxConnections) nodeKey2 = generateSecp256k1Key() - node2 = newTestWakuNode(nodeKey2, ValidIpAddress.init("0.0.0.0"), + node2 = newTestWakuNode(nodeKey2, parseIpAddress("0.0.0.0"), Port(60012)) nodeKey3 = generateSecp256k1Key() - node3 = newTestWakuNode(nodeKey3, ValidIpAddress.init("0.0.0.0"), + node3 = newTestWakuNode(nodeKey3, parseIpAddress("0.0.0.0"), Port(60013)) check: @@ -151,7 +151,7 @@ suite "WakuNode": expect ResultDefect: # gibberish - discard newTestWakuNode(nodeKey1, ValidIpAddress.init("0.0.0.0"), + discard newTestWakuNode(nodeKey1, parseIpAddress("0.0.0.0"), bindPort = Port(61004), wsBindPort = Port(8000), wssEnabled = true, @@ -160,9 +160,9 @@ suite "WakuNode": asyncTest "Peer info updates with correct announced addresses": let nodeKey = generateSecp256k1Key() - bindIp = ValidIpAddress.init("0.0.0.0") + bindIp = parseIpAddress("0.0.0.0") bindPort = Port(61006) - extIp = some(ValidIpAddress.init("127.0.0.1")) + extIp = some(parseIpAddress("127.0.0.1")) extPort = some(Port(61008)) node = newTestWakuNode( nodeKey, @@ -199,9 +199,9 @@ suite "WakuNode": asyncTest "Node can use dns4 in announced addresses": let nodeKey = generateSecp256k1Key() - bindIp = ValidIpAddress.init("0.0.0.0") + bindIp = parseIpAddress("0.0.0.0") bindPort = Port(61010) - extIp = some(ValidIpAddress.init("127.0.0.1")) + extIp = some(parseIpAddress("127.0.0.1")) extPort = some(Port(61012)) domainName = "example.com" expectedDns4Addr = MultiAddress.init("/dns4/" & domainName & "/tcp/" & $(extPort.get())).get() @@ -218,7 +218,7 @@ suite "WakuNode": asyncTest "Node uses dns4 resolved ip in announced addresses if no extIp is provided": let nodeKey = generateSecp256k1Key() - bindIp = ValidIpAddress.init("0.0.0.0") + bindIp = parseIpAddress("0.0.0.0") bindPort = Port(0) domainName = "status.im" @@ -243,7 +243,7 @@ suite "WakuNode": asyncTest "Node creation fails when invalid dns4 address is provided": let nodeKey = generateSecp256k1Key() - bindIp = ValidIpAddress.init("0.0.0.0") + bindIp = parseIpAddress("0.0.0.0") bindPort = Port(0) inexistentDomain = "thisdomain.doesnot.exist" @@ -285,12 +285,12 @@ suite "WakuNode": let # node with custom agent string nodeKey1 = generateSecp256k1Key() - node1 = newTestWakuNode(nodeKey1, ValidIpAddress.init("0.0.0.0"), Port(61014), + node1 = newTestWakuNode(nodeKey1, parseIpAddress("0.0.0.0"), Port(61014), agentString = some(expectedAgentString1)) # node with default agent string from libp2p nodeKey2 = generateSecp256k1Key() - node2 = newTestWakuNode(nodeKey2, ValidIpAddress.init("0.0.0.0"), Port(61016)) + node2 = newTestWakuNode(nodeKey2, parseIpAddress("0.0.0.0"), Port(61016)) await node1.start() await node1.mountRelay() @@ -320,12 +320,12 @@ suite "WakuNode": let # node with custom multiaddress nodeKey1 = generateSecp256k1Key() - node1 = newTestWakuNode(nodeKey1, ValidIpAddress.init("0.0.0.0"), Port(61018), + node1 = newTestWakuNode(nodeKey1, parseIpAddress("0.0.0.0"), Port(61018), extMultiAddrs = @[expectedMultiaddress1]) # node with default multiaddress nodeKey2 = generateSecp256k1Key() - node2 = newTestWakuNode(nodeKey2, ValidIpAddress.init("0.0.0.0"), Port(61020)) + node2 = newTestWakuNode(nodeKey2, parseIpAddress("0.0.0.0"), Port(61020)) await node1.start() await node1.mountRelay() @@ -345,8 +345,8 @@ suite "WakuNode": asyncTest "Function fetchPeerExchangePeers succesfully exchanges px peers": let - node1 = newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0)) - node2 = newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0)) + node1 = newTestWakuNode(generateSecp256k1Key(), parseIpAddress("0.0.0.0"), Port(0)) + node2 = newTestWakuNode(generateSecp256k1Key(), parseIpAddress("0.0.0.0"), Port(0)) # Start and mount peer exchange await allFutures([node1.start(), node2.start()]) diff --git a/tests/test_wakunode_filter_legacy.nim b/tests/test_wakunode_filter_legacy.nim index e0fd530392..cf0e37bc96 100644 --- a/tests/test_wakunode_filter_legacy.nim +++ b/tests/test_wakunode_filter_legacy.nim @@ -22,9 +22,9 @@ suite "WakuNode - Filter": ## Setup let serverKey = generateSecp256k1Key() - server = newTestWakuNode(serverKey, ValidIpAddress.init("0.0.0.0"), Port(0)) + server = newTestWakuNode(serverKey, parseIpAddress("0.0.0.0"), Port(0)) clientKey = generateSecp256k1Key() - client = newTestWakuNode(clientKey, ValidIpAddress.init("0.0.0.0"), Port(0)) + client = newTestWakuNode(clientKey, parseIpAddress("0.0.0.0"), Port(0)) waitFor allFutures(server.start(), client.start()) diff --git a/tests/test_wakunode_lightpush.nim b/tests/test_wakunode_lightpush.nim index 4daa122838..95a8ce874a 100644 --- a/tests/test_wakunode_lightpush.nim +++ b/tests/test_wakunode_lightpush.nim @@ -19,11 +19,11 @@ suite "WakuNode - Lightpush": ## Setup let lightNodeKey = generateSecp256k1Key() - lightNode = newTestWakuNode(lightNodeKey, ValidIpAddress.init("0.0.0.0"), Port(0)) + lightNode = newTestWakuNode(lightNodeKey, parseIpAddress("0.0.0.0"), Port(0)) bridgeNodeKey = generateSecp256k1Key() - bridgeNode = newTestWakuNode(bridgeNodeKey, ValidIpAddress.init("0.0.0.0"), Port(0)) + bridgeNode = newTestWakuNode(bridgeNodeKey, parseIpAddress("0.0.0.0"), Port(0)) destNodeKey = generateSecp256k1Key() - destNode = newTestWakuNode(destNodeKey, ValidIpAddress.init("0.0.0.0"), Port(0)) + destNode = newTestWakuNode(destNodeKey, parseIpAddress("0.0.0.0"), Port(0)) await allFutures(destNode.start(), bridgeNode.start(), lightNode.start()) diff --git a/tests/testlib/wakunode.nim b/tests/testlib/wakunode.nim index 9ba791204f..4a3179bcab 100644 --- a/tests/testlib/wakunode.nim +++ b/tests/testlib/wakunode.nim @@ -25,11 +25,11 @@ proc defaultTestWakuNodeConf*(): WakuNodeConf = cmd: noCommand, tcpPort: Port(60000), websocketPort: Port(8000), - listenAddress: ValidIpAddress.init("0.0.0.0"), - rpcAddress: ValidIpAddress.init("127.0.0.1"), - restAddress: ValidIpAddress.init("127.0.0.1"), - metricsServerAddress: ValidIpAddress.init("127.0.0.1"), - dnsAddrsNameServers: @[ValidIpAddress.init("1.1.1.1"), ValidIpAddress.init("1.0.0.1")], + listenAddress: parseIpAddress("0.0.0.0"), + rpcAddress: parseIpAddress("127.0.0.1"), + restAddress: parseIpAddress("127.0.0.1"), + metricsServerAddress: parseIpAddress("127.0.0.1"), + dnsAddrsNameServers: @[parseIpAddress("1.1.1.1"), parseIpAddress("1.0.0.1")], nat: "any", maxConnections: 50, clusterId: 1.uint32, @@ -38,9 +38,9 @@ proc defaultTestWakuNodeConf*(): WakuNodeConf = ) proc newTestWakuNode*(nodeKey: crypto.PrivateKey, - bindIp: ValidIpAddress, + bindIp: IpAddress, bindPort: Port, - extIp = none(ValidIpAddress), + extIp = none(IpAddress), extPort = none(Port), extMultiAddrs = newSeq[MultiAddress](), peerStorage: PeerStorage = nil, @@ -77,7 +77,7 @@ proc newTestWakuNode*(nodeKey: crypto.PrivateKey, let dns = (waitFor dnsResolve(dns4DomainName.get(), conf)).valueOr: raise newException(Defect, error) - resolvedExtIp = some(ValidIpAddress.init(dns)) + resolvedExtIp = some(parseIpAddress(dns)) let netConf = NetConfig.init( bindIp = bindIp, diff --git a/tests/waku_core/test_published_address.nim b/tests/waku_core/test_published_address.nim index 96457e8e64..e437d864a7 100644 --- a/tests/waku_core/test_published_address.nim +++ b/tests/waku_core/test_published_address.nim @@ -12,7 +12,7 @@ suite "Waku Core - Published Address": test "Test IP 0.0.0.0": let - node = newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init( + node = newTestWakuNode(generateSecp256k1Key(), parseIpAddress( "0.0.0.0"),Port(0)) check: @@ -20,7 +20,7 @@ suite "Waku Core - Published Address": test "Test custom IP": let - node = newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init( + node = newTestWakuNode(generateSecp256k1Key(), parseIpAddress( "8.8.8.8"),Port(0)) check: diff --git a/tests/waku_relay/test_wakunode_relay.nim b/tests/waku_relay/test_wakunode_relay.nim index db18fc5373..2d0cbdc775 100644 --- a/tests/waku_relay/test_wakunode_relay.nim +++ b/tests/waku_relay/test_wakunode_relay.nim @@ -27,7 +27,7 @@ suite "WakuNode - Relay": asyncTest "Relay protocol is started correctly": let nodeKey1 = generateSecp256k1Key() - node1 = newTestWakuNode(nodeKey1, ValidIpAddress.init("0.0.0.0"), Port(0)) + node1 = newTestWakuNode(nodeKey1, parseIpAddress("0.0.0.0"), Port(0)) # Relay protocol starts if mounted after node start @@ -41,7 +41,7 @@ suite "WakuNode - Relay": let nodeKey2 = generateSecp256k1Key() - node2 = newTestWakuNode(nodeKey2, ValidIpAddress.init("0.0.0.0"), Port(0)) + node2 = newTestWakuNode(nodeKey2, parseIpAddress("0.0.0.0"), Port(0)) await node2.mountRelay() @@ -60,11 +60,11 @@ suite "WakuNode - Relay": asyncTest "Messages are correctly relayed": let nodeKey1 = generateSecp256k1Key() - node1 = newTestWakuNode(nodeKey1, ValidIpAddress.init("0.0.0.0"), Port(0)) + node1 = newTestWakuNode(nodeKey1, parseIpAddress("0.0.0.0"), Port(0)) nodeKey2 = generateSecp256k1Key() - node2 = newTestWakuNode(nodeKey2, ValidIpAddress.init("0.0.0.0"), Port(0)) + node2 = newTestWakuNode(nodeKey2, parseIpAddress("0.0.0.0"), Port(0)) nodeKey3 = generateSecp256k1Key() - node3 = newTestWakuNode(nodeKey3, ValidIpAddress.init("0.0.0.0"), Port(0)) + node3 = newTestWakuNode(nodeKey3, parseIpAddress("0.0.0.0"), Port(0)) pubSubTopic = "test" contentTopic = ContentTopic("/waku/2/default-content/proto") payload = "hello world".toBytes() @@ -115,13 +115,13 @@ suite "WakuNode - Relay": let # publisher node nodeKey1 = generateSecp256k1Key() - node1 = newTestWakuNode(nodeKey1, ValidIpAddress.init("0.0.0.0"), Port(0)) + node1 = newTestWakuNode(nodeKey1, parseIpAddress("0.0.0.0"), Port(0)) # Relay node nodeKey2 = generateSecp256k1Key() - node2 = newTestWakuNode(nodeKey2, ValidIpAddress.init("0.0.0.0"), Port(0)) + node2 = newTestWakuNode(nodeKey2, parseIpAddress("0.0.0.0"), Port(0)) # Subscriber nodeKey3 = generateSecp256k1Key() - node3 = newTestWakuNode(nodeKey3, ValidIpAddress.init("0.0.0.0"), Port(0)) + node3 = newTestWakuNode(nodeKey3, parseIpAddress("0.0.0.0"), Port(0)) pubSubTopic = "test" contentTopic1 = ContentTopic("/waku/2/default-content/proto") @@ -195,7 +195,7 @@ suite "WakuNode - Relay": # TODO: Add a function to validate the WakuMessage integrity xasyncTest "Stats of peer sending wrong WakuMessages are updated": # Create 2 nodes - let nodes = toSeq(0..1).mapIt(newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0))) + let nodes = toSeq(0..1).mapIt(newTestWakuNode(generateSecp256k1Key(), parseIpAddress("0.0.0.0"), Port(0))) # Start all the nodes and mount relay with await allFutures(nodes.mapIt(it.start())) @@ -228,10 +228,10 @@ suite "WakuNode - Relay": asyncTest "Messages are relayed between two websocket nodes": let nodeKey1 = generateSecp256k1Key() - node1 = newTestWakuNode(nodeKey1, ValidIpAddress.init("0.0.0.0"), + node1 = newTestWakuNode(nodeKey1, parseIpAddress("0.0.0.0"), bindPort = Port(0), wsBindPort = Port(0), wsEnabled = true) nodeKey2 = generateSecp256k1Key() - node2 = newTestWakuNode(nodeKey2, ValidIpAddress.init("0.0.0.0"), + node2 = newTestWakuNode(nodeKey2, parseIpAddress("0.0.0.0"), bindPort = Port(0), wsBindPort = Port(0), wsEnabled = true) pubSubTopic = "test" contentTopic = ContentTopic("/waku/2/default-content/proto") @@ -269,10 +269,10 @@ suite "WakuNode - Relay": asyncTest "Messages are relayed between nodes with multiple transports (TCP and Websockets)": let nodeKey1 = generateSecp256k1Key() - node1 = newTestWakuNode(nodeKey1, ValidIpAddress.init("0.0.0.0"), + node1 = newTestWakuNode(nodeKey1, parseIpAddress("0.0.0.0"), bindPort = Port(0), wsBindPort = Port(0), wsEnabled = true) nodeKey2 = generateSecp256k1Key() - node2 = newTestWakuNode(nodeKey2, ValidIpAddress.init("0.0.0.0"), + node2 = newTestWakuNode(nodeKey2, parseIpAddress("0.0.0.0"), bindPort = Port(0)) pubSubTopic = "test" contentTopic = ContentTopic("/waku/2/default-content/proto") @@ -310,10 +310,10 @@ suite "WakuNode - Relay": asyncTest "Messages relaying fails with non-overlapping transports (TCP or Websockets)": let nodeKey1 = generateSecp256k1Key() - node1 = newTestWakuNode(nodeKey1, ValidIpAddress.init("0.0.0.0"), + node1 = newTestWakuNode(nodeKey1, parseIpAddress("0.0.0.0"), bindPort = Port(0)) nodeKey2 = generateSecp256k1Key() - node2 = newTestWakuNode(nodeKey2, ValidIpAddress.init("0.0.0.0"), + node2 = newTestWakuNode(nodeKey2, parseIpAddress("0.0.0.0"), bindPort = Port(0), wsBindPort = Port(0), wsEnabled = true) pubSubTopic = "test" contentTopic = ContentTopic("/waku/2/default-content/proto") @@ -354,10 +354,10 @@ suite "WakuNode - Relay": asyncTest "Messages are relayed between nodes with multiple transports (TCP and secure Websockets)": let nodeKey1 = generateSecp256k1Key() - node1 = newTestWakuNode(nodeKey1, ValidIpAddress.init("0.0.0.0"), + node1 = newTestWakuNode(nodeKey1, parseIpAddress("0.0.0.0"), bindPort = Port(0), wsBindPort = Port(0), wssEnabled = true, secureKey = KEY_PATH, secureCert = CERT_PATH) nodeKey2 = generateSecp256k1Key() - node2 = newTestWakuNode(nodeKey2, ValidIpAddress.init("0.0.0.0"), + node2 = newTestWakuNode(nodeKey2, parseIpAddress("0.0.0.0"), bindPort = Port(0)) pubSubTopic = "test" contentTopic = ContentTopic("/waku/2/default-content/proto") @@ -394,9 +394,9 @@ suite "WakuNode - Relay": asyncTest "Messages are relayed between nodes with multiple transports (websocket and secure Websockets)": let nodeKey1 = generateSecp256k1Key() - node1 = newTestWakuNode(nodeKey1, ValidIpAddress.init("0.0.0.0"), bindPort = Port(0), wsBindPort = Port(0), wssEnabled = true, secureKey = KEY_PATH, secureCert = CERT_PATH) + node1 = newTestWakuNode(nodeKey1, parseIpAddress("0.0.0.0"), bindPort = Port(0), wsBindPort = Port(0), wssEnabled = true, secureKey = KEY_PATH, secureCert = CERT_PATH) nodeKey2 = generateSecp256k1Key() - node2 = newTestWakuNode(nodeKey2, ValidIpAddress.init("0.0.0.0"), bindPort = Port(0),wsBindPort = Port(0), wsEnabled = true ) + node2 = newTestWakuNode(nodeKey2, parseIpAddress("0.0.0.0"), bindPort = Port(0),wsBindPort = Port(0), wsEnabled = true ) let pubSubTopic = "test" @@ -434,7 +434,7 @@ suite "WakuNode - Relay": asyncTest "Bad peers with low reputation are disconnected": # Create 5 nodes - let nodes = toSeq(0..<5).mapIt(newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0))) + let nodes = toSeq(0..<5).mapIt(newTestWakuNode(generateSecp256k1Key(), parseIpAddress("0.0.0.0"), Port(0))) await allFutures(nodes.mapIt(it.start())) await allFutures(nodes.mapIt(it.mountRelay())) @@ -487,7 +487,7 @@ suite "WakuNode - Relay": ## Setup let nodeKey = generateSecp256k1Key() - node = newTestWakuNode(nodeKey, ValidIpAddress.init("0.0.0.0"), Port(0)) + node = newTestWakuNode(nodeKey, parseIpAddress("0.0.0.0"), Port(0)) await node.start() await node.mountRelay() diff --git a/tests/waku_rln_relay/test_rln_group_manager_onchain.nim b/tests/waku_rln_relay/test_rln_group_manager_onchain.nim index a0ac49516d..fd697cd3ad 100644 --- a/tests/waku_rln_relay/test_rln_group_manager_onchain.nim +++ b/tests/waku_rln_relay/test_rln_group_manager_onchain.nim @@ -133,7 +133,7 @@ proc runGanache(): Process = ganacheStartLog.add(cmdline) if cmdline.contains("Listening on 127.0.0.1:8540"): break - except CatchableError: + except Exception, CatchableError: break debug "Ganache daemon is running and ready", pid=ganachePID, startLog=ganacheStartLog return runGanache @@ -221,14 +221,22 @@ suite "Onchain group manager": let manager = await setup() await manager.init() - await manager.startGroupSync() + try: + await manager.startGroupSync() + except Exception, CatchableError: + assert false, "exception raised when calling startGroupSync: " & getCurrentExceptionMsg() await manager.stop() asyncTest "startGroupSync: should guard against uninitialized state": let manager = await setup() - expect(ValueError): + try: await manager.startGroupSync() + except ValueError: + assert true + except Exception, CatchableError: + assert false, "exception raised when calling startGroupSync: " & getCurrentExceptionMsg() + await manager.stop() asyncTest "startGroupSync: should sync to the state of the group": @@ -252,10 +260,12 @@ suite "Onchain group manager": fut.complete() return callback - manager.onRegister(generateCallback(fut)) - - await manager.register(credentials) - await manager.startGroupSync() + try: + manager.onRegister(generateCallback(fut)) + await manager.register(credentials) + await manager.startGroupSync() + except Exception, CatchableError: + assert false, "exception raised: " & getCurrentExceptionMsg() await fut @@ -292,11 +302,15 @@ suite "Onchain group manager": futs[futureIndex].complete() futureIndex += 1 return callback - manager.onRegister(generateCallback(futures, credentials)) - await manager.startGroupSync() - for i in 0 ..< credentials.len(): - await manager.register(credentials[i]) + try: + manager.onRegister(generateCallback(futures, credentials)) + await manager.startGroupSync() + + for i in 0 ..< credentials.len(): + await manager.register(credentials[i]) + except Exception, CatchableError: + assert false, "exception raised: " & getCurrentExceptionMsg() await allFutures(futures) @@ -314,21 +328,34 @@ suite "Onchain group manager": let manager = await setup() let dummyCommitment = default(IDCommitment) - expect(ValueError): + try: await manager.register(dummyCommitment) + except ValueError: + assert true + except Exception, CatchableError: + assert false, "exception raised: " & getCurrentExceptionMsg() + await manager.stop() asyncTest "register: should register successfully": let manager = await setup() await manager.init() - await manager.startGroupSync() + try: + await manager.startGroupSync() + except Exception, CatchableError: + assert false, "exception raised when calling startGroupSync: " & getCurrentExceptionMsg() let idCommitment = generateCredentials(manager.rlnInstance).idCommitment let merkleRootBeforeRes = manager.rlnInstance.getMerkleRoot() require: merkleRootBeforeRes.isOk() let merkleRootBefore = merkleRootBeforeRes.get() - await manager.register(idCommitment) + + try: + await manager.register(idCommitment) + except Exception, CatchableError: + assert false, "exception raised when calling register: " & getCurrentExceptionMsg() + let merkleRootAfterRes = manager.rlnInstance.getMerkleRoot() require: merkleRootAfterRes.isOk() @@ -354,9 +381,11 @@ suite "Onchain group manager": manager.onRegister(callback) await manager.init() - await manager.startGroupSync() - - await manager.register(idCommitment) + try: + await manager.startGroupSync() + await manager.register(idCommitment) + except Exception, CatchableError: + assert false, "exception raised: " & getCurrentExceptionMsg() await fut @@ -368,8 +397,13 @@ suite "Onchain group manager": let manager = await setup() let idSecretHash = generateCredentials(manager.rlnInstance).idSecretHash - expect(ValueError): + try: await manager.withdraw(idSecretHash) + except ValueError: + assert true + except Exception, CatchableError: + assert false, "exception raised: " & getCurrentExceptionMsg() + await manager.stop() asyncTest "validateRoot: should validate good root": @@ -390,8 +424,12 @@ suite "Onchain group manager": manager.onRegister(callback) - await manager.startGroupSync() - await manager.register(credentials) + try: + await manager.startGroupSync() + await manager.register(credentials) + except Exception, CatchableError: + assert false, "exception raised: " & getCurrentExceptionMsg() + await fut let messageBytes = "Hello".toBytes() @@ -417,7 +455,10 @@ suite "Onchain group manager": asyncTest "validateRoot: should reject bad root": let manager = await setup() await manager.init() - await manager.startGroupSync() + try: + await manager.startGroupSync() + except Exception, CatchableError: + assert false, "exception raised when calling startGroupSync: " & getCurrentExceptionMsg() let credentials = generateCredentials(manager.rlnInstance) @@ -462,8 +503,11 @@ suite "Onchain group manager": manager.onRegister(callback) - await manager.startGroupSync() - await manager.register(credentials) + try: + await manager.startGroupSync() + await manager.register(credentials) + except Exception, CatchableError: + assert false, "exception raised: " & getCurrentExceptionMsg() await fut let messageBytes = "Hello".toBytes() @@ -491,10 +535,17 @@ suite "Onchain group manager": asyncTest "verifyProof: should reject invalid proof": let manager = await setup() await manager.init() - await manager.startGroupSync() + try: + await manager.startGroupSync() + except Exception, CatchableError: + assert false, "exception raised when calling startGroupSync: " & getCurrentExceptionMsg() let idCredential = generateCredentials(manager.rlnInstance) - await manager.register(idCredential.idCommitment) + + try: + await manager.register(idCredential.idCommitment) + except Exception, CatchableError: + assert false, "exception raised when calling startGroupSync: " & getCurrentExceptionMsg() let idCredential2 = generateCredentials(manager.rlnInstance) @@ -546,11 +597,13 @@ suite "Onchain group manager": futureIndex += 1 return callback - manager.onRegister(generateCallback(futures, credentials)) - await manager.startGroupSync() - - for i in 0 ..< credentials.len(): - await manager.register(credentials[i]) + try: + manager.onRegister(generateCallback(futures, credentials)) + await manager.startGroupSync() + for i in 0 ..< credentials.len(): + await manager.register(credentials[i]) + except Exception, CatchableError: + assert false, "exception raised: " & getCurrentExceptionMsg() await allFutures(futures) @@ -561,7 +614,10 @@ suite "Onchain group manager": # We can now simulate a chain reorg by calling backfillRootQueue let expectedLastRoot = manager.validRootBuffer[0] - await manager.backfillRootQueue(1) + try: + await manager.backfillRootQueue(1) + except Exception, CatchableError: + assert false, "exception raised: " & getCurrentExceptionMsg() # We should now have 5 roots in the queue, and no partial buffer check: @@ -576,26 +632,50 @@ suite "Onchain group manager": manager.ethRpc = none(Web3) + var isReady = true + try: + isReady = await manager.isReady() + except Exception, CatchableError: + assert false, "exception raised: " & getCurrentExceptionMsg() + check: - (await manager.isReady()) == false + isReady == false + await manager.stop() asyncTest "isReady should return false if lastSeenBlockHead > lastProcessed": var manager = await setup() await manager.init() + var isReady = true + try: + isReady = await manager.isReady() + except Exception, CatchableError: + assert false, "exception raised: " & getCurrentExceptionMsg() + check: - (await manager.isReady()) == false + isReady == false + await manager.stop() asyncTest "isReady should return true if ethRpc is ready": var manager = await setup() await manager.init() # node can only be ready after group sync is done - await manager.startGroupSync() + try: + await manager.startGroupSync() + except Exception, CatchableError: + assert false, "exception raised when calling startGroupSync: " & getCurrentExceptionMsg() + var isReady = false + try: + isReady = await manager.isReady() + except Exception, CatchableError: + assert false, "exception raised: " & getCurrentExceptionMsg() + check: - (await manager.isReady()) == true + isReady == true + await manager.stop() diff --git a/tests/waku_rln_relay/test_rln_group_manager_static.nim b/tests/waku_rln_relay/test_rln_group_manager_static.nim index 6030f135e7..44af2a52d4 100644 --- a/tests/waku_rln_relay/test_rln_group_manager_static.nim +++ b/tests/waku_rln_relay/test_rln_group_manager_static.nim @@ -73,16 +73,23 @@ suite "Static group manager": require: manager.validRoots.len() == 1 manager.rlnInstance.getMerkleRoot().get() == manager.validRoots[0] - await manager.startGroupSync() + + try: + await manager.startGroupSync() + except Exception, CatchableError: + assert false, "exception raised when calling startGroupSync: " & getCurrentExceptionMsg() asyncTest "startGroupSync: should guard against uninitialized state": let manager = StaticGroupManager(groupSize: 0, membershipIndex: some(MembershipIndex(0)), groupKeys: @[], rlnInstance: rlnInstance) - - expect(ValueError): + try: await manager.startGroupSync() + except ValueError: + assert true + except Exception, CatchableError: + assert false, "exception raised when calling startGroupSync: " & getCurrentExceptionMsg() asyncTest "register: should guard against uninitialized state": let manager = StaticGroupManager(groupSize: 0, @@ -92,19 +99,29 @@ suite "Static group manager": let dummyCommitment = default(IDCommitment) - expect(ValueError): + try: await manager.register(dummyCommitment) + except ValueError: + assert true + except Exception, CatchableError: + assert false, "exception raised: " & getCurrentExceptionMsg() asyncTest "register: should register successfully": await manager.init() - await manager.startGroupSync() + try: + await manager.startGroupSync() + except Exception, CatchableError: + assert false, "exception raised: " & getCurrentExceptionMsg() let idCommitment = generateCredentials(manager.rlnInstance).idCommitment let merkleRootBeforeRes = manager.rlnInstance.getMerkleRoot() require: merkleRootBeforeRes.isOk() let merkleRootBefore = merkleRootBeforeRes.get() - await manager.register(idCommitment) + try: + await manager.register(idCommitment) + except Exception, CatchableError: + assert false, "exception raised: " & getCurrentExceptionMsg() let merkleRootAfterRes = manager.rlnInstance.getMerkleRoot() require: merkleRootAfterRes.isOk() @@ -127,11 +144,13 @@ suite "Static group manager": callbackCalled = true fut.complete() - manager.onRegister(callback) - await manager.init() - await manager.startGroupSync() - - await manager.register(idCommitment) + try: + manager.onRegister(callback) + await manager.init() + await manager.startGroupSync() + await manager.register(idCommitment) + except Exception, CatchableError: + assert false, "exception raised: " & getCurrentExceptionMsg() await fut check: @@ -140,19 +159,29 @@ suite "Static group manager": asyncTest "withdraw: should guard against uninitialized state": let idSecretHash = credentials[0].idSecretHash - expect(ValueError): + try: await manager.withdraw(idSecretHash) + except ValueError: + assert true + except Exception, CatchableError: + assert false, "exception raised: " & getCurrentExceptionMsg() asyncTest "withdraw: should withdraw successfully": await manager.init() - await manager.startGroupSync() + try: + await manager.startGroupSync() + except Exception, CatchableError: + assert false, "exception raised: " & getCurrentExceptionMsg() let idSecretHash = credentials[0].idSecretHash let merkleRootBeforeRes = manager.rlnInstance.getMerkleRoot() require: merkleRootBeforeRes.isOk() let merkleRootBefore = merkleRootBeforeRes.get() - await manager.withdraw(idSecretHash) + try: + await manager.withdraw(idSecretHash) + except Exception, CatchableError: + assert false, "exception raised: " & getCurrentExceptionMsg() let merkleRootAfterRes = manager.rlnInstance.getMerkleRoot() require: merkleRootAfterRes.isOk() @@ -174,11 +203,14 @@ suite "Static group manager": callbackCalled = true fut.complete() - manager.onWithdraw(callback) - await manager.init() - await manager.startGroupSync() + try: + manager.onWithdraw(callback) + await manager.init() + await manager.startGroupSync() - await manager.withdraw(idSecretHash) + await manager.withdraw(idSecretHash) + except Exception, CatchableError: + assert false, "exception raised: " & getCurrentExceptionMsg() await fut check: diff --git a/tests/waku_rln_relay/test_wakunode_rln_relay.nim b/tests/waku_rln_relay/test_wakunode_rln_relay.nim index dac93782b1..5d43b3e2ae 100644 --- a/tests/waku_rln_relay/test_wakunode_rln_relay.nim +++ b/tests/waku_rln_relay/test_wakunode_rln_relay.nim @@ -24,13 +24,13 @@ procSuite "WakuNode - RLN relay": let # publisher node nodeKey1 = generateSecp256k1Key() - node1 = newTestWakuNode(nodeKey1, ValidIpAddress.init("0.0.0.0"), Port(0)) + node1 = newTestWakuNode(nodeKey1, parseIpAddress("0.0.0.0"), Port(0)) # Relay node nodeKey2 = generateSecp256k1Key() - node2 = newTestWakuNode(nodeKey2, ValidIpAddress.init("0.0.0.0"), Port(0)) + node2 = newTestWakuNode(nodeKey2, parseIpAddress("0.0.0.0"), Port(0)) # Subscriber nodeKey3 = generateSecp256k1Key() - node3 = newTestWakuNode(nodeKey3, ValidIpAddress.init("0.0.0.0"), Port(0)) + node3 = newTestWakuNode(nodeKey3, parseIpAddress("0.0.0.0"), Port(0)) contentTopic = ContentTopic("/waku/2/default-content/proto") @@ -105,7 +105,7 @@ procSuite "WakuNode - RLN relay": asyncTest "testing rln-relay is applied in all rln pubsub/content topics": # create 3 nodes - let nodes = toSeq(0..<3).mapIt(newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0))) + let nodes = toSeq(0..<3).mapIt(newTestWakuNode(generateSecp256k1Key(), parseIpAddress("0.0.0.0"), Port(0))) await allFutures(nodes.mapIt(it.start())) let pubsubTopics = @[ @@ -183,13 +183,13 @@ procSuite "WakuNode - RLN relay": let # publisher node nodeKey1 = generateSecp256k1Key() - node1 = newTestWakuNode(nodeKey1, ValidIpAddress.init("0.0.0.0"), Port(0)) + node1 = newTestWakuNode(nodeKey1, parseIpAddress("0.0.0.0"), Port(0)) # Relay node nodeKey2 = generateSecp256k1Key() - node2 = newTestWakuNode(nodeKey2, ValidIpAddress.init("0.0.0.0"), Port(0)) + node2 = newTestWakuNode(nodeKey2, parseIpAddress("0.0.0.0"), Port(0)) # Subscriber nodeKey3 = generateSecp256k1Key() - node3 = newTestWakuNode(nodeKey3, ValidIpAddress.init("0.0.0.0"), Port(0)) + node3 = newTestWakuNode(nodeKey3, parseIpAddress("0.0.0.0"), Port(0)) contentTopic = ContentTopic("/waku/2/default-content/proto") @@ -282,13 +282,13 @@ procSuite "WakuNode - RLN relay": let # publisher node nodeKey1 = generateSecp256k1Key() - node1 = newTestWakuNode(nodeKey1, ValidIpAddress.init("0.0.0.0"), Port(0)) + node1 = newTestWakuNode(nodeKey1, parseIpAddress("0.0.0.0"), Port(0)) # Relay node nodeKey2 = generateSecp256k1Key() - node2 = newTestWakuNode(nodeKey2, ValidIpAddress.init("0.0.0.0"), Port(0)) + node2 = newTestWakuNode(nodeKey2, parseIpAddress("0.0.0.0"), Port(0)) # Subscriber nodeKey3 = generateSecp256k1Key() - node3 = newTestWakuNode(nodeKey3, ValidIpAddress.init("0.0.0.0"), Port(0)) + node3 = newTestWakuNode(nodeKey3, parseIpAddress("0.0.0.0"), Port(0)) contentTopic = ContentTopic("/waku/2/default-content/proto") @@ -402,13 +402,13 @@ procSuite "WakuNode - RLN relay": let # publisher node nodeKey1 = generateSecp256k1Key() - node1 = newTestWakuNode(nodeKey1, ValidIpAddress.init("0.0.0.0"), Port(0)) + node1 = newTestWakuNode(nodeKey1, parseIpAddress("0.0.0.0"), Port(0)) # Relay node nodeKey2 = generateSecp256k1Key() - node2 = newTestWakuNode(nodeKey2, ValidIpAddress.init("0.0.0.0"), Port(0)) + node2 = newTestWakuNode(nodeKey2, parseIpAddress("0.0.0.0"), Port(0)) # Subscriber nodeKey3 = generateSecp256k1Key() - node3 = newTestWakuNode(nodeKey3, ValidIpAddress.init("0.0.0.0"), Port(0)) + node3 = newTestWakuNode(nodeKey3, parseIpAddress("0.0.0.0"), Port(0)) contentTopic = ContentTopic("/waku/2/default-content/proto") diff --git a/tests/waku_store/test_resume.nim b/tests/waku_store/test_resume.nim index 2ff7697b02..9ec58eb143 100644 --- a/tests/waku_store/test_resume.nim +++ b/tests/waku_store/test_resume.nim @@ -194,9 +194,9 @@ suite "WakuNode - waku store": ## Setup let serverKey = generateSecp256k1Key() - server = newTestWakuNode(serverKey, ValidIpAddress.init("0.0.0.0"), Port(0)) + server = newTestWakuNode(serverKey, parseIpAddress("0.0.0.0"), Port(0)) clientKey = generateSecp256k1Key() - client = newTestWakuNode(clientKey, ValidIpAddress.init("0.0.0.0"), Port(0)) + client = newTestWakuNode(clientKey, parseIpAddress("0.0.0.0"), Port(0)) await allFutures(client.start(), server.start()) @@ -228,9 +228,9 @@ suite "WakuNode - waku store": ## Setup let serverKey = generateSecp256k1Key() - server = newTestWakuNode(serverKey, ValidIpAddress.init("0.0.0.0"), Port(0)) + server = newTestWakuNode(serverKey, parseIpAddress("0.0.0.0"), Port(0)) clientKey = generateSecp256k1Key() - client = newTestWakuNode(clientKey, ValidIpAddress.init("0.0.0.0"), Port(0)) + client = newTestWakuNode(clientKey, parseIpAddress("0.0.0.0"), Port(0)) await allFutures(server.start(), client.start()) await server.mountStore(store=StoreQueueRef.new()) diff --git a/tests/waku_store/test_wakunode_store.nim b/tests/waku_store/test_wakunode_store.nim index 5946fb7e78..7ac30bdb0d 100644 --- a/tests/waku_store/test_wakunode_store.nim +++ b/tests/waku_store/test_wakunode_store.nim @@ -59,9 +59,9 @@ procSuite "WakuNode - Store": ## Setup let serverKey = generateSecp256k1Key() - server = newTestWakuNode(serverKey, ValidIpAddress.init("0.0.0.0"), Port(0)) + server = newTestWakuNode(serverKey, parseIpAddress("0.0.0.0"), Port(0)) clientKey = generateSecp256k1Key() - client = newTestWakuNode(clientKey, ValidIpAddress.init("0.0.0.0"), Port(0)) + client = newTestWakuNode(clientKey, parseIpAddress("0.0.0.0"), Port(0)) waitFor allFutures(client.start(), server.start()) @@ -93,9 +93,9 @@ procSuite "WakuNode - Store": ## Setup let serverKey = generateSecp256k1Key() - server = newTestWakuNode(serverKey, ValidIpAddress.init("0.0.0.0"), Port(0)) + server = newTestWakuNode(serverKey, parseIpAddress("0.0.0.0"), Port(0)) clientKey = generateSecp256k1Key() - client = newTestWakuNode(clientKey, ValidIpAddress.init("0.0.0.0"), Port(0)) + client = newTestWakuNode(clientKey, parseIpAddress("0.0.0.0"), Port(0)) waitFor allFutures(client.start(), server.start()) @@ -144,9 +144,9 @@ procSuite "WakuNode - Store": ## Setup let serverKey = generateSecp256k1Key() - server = newTestWakuNode(serverKey, ValidIpAddress.init("0.0.0.0"), Port(0)) + server = newTestWakuNode(serverKey, parseIpAddress("0.0.0.0"), Port(0)) clientKey = generateSecp256k1Key() - client = newTestWakuNode(clientKey, ValidIpAddress.init("0.0.0.0"), Port(0)) + client = newTestWakuNode(clientKey, parseIpAddress("0.0.0.0"), Port(0)) waitFor allFutures(client.start(), server.start()) @@ -196,11 +196,11 @@ procSuite "WakuNode - Store": ## Setup let filterSourceKey = generateSecp256k1Key() - filterSource = newTestWakuNode(filterSourceKey, ValidIpAddress.init("0.0.0.0"), Port(0)) + filterSource = newTestWakuNode(filterSourceKey, parseIpAddress("0.0.0.0"), Port(0)) serverKey = generateSecp256k1Key() - server = newTestWakuNode(serverKey, ValidIpAddress.init("0.0.0.0"), Port(0)) + server = newTestWakuNode(serverKey, parseIpAddress("0.0.0.0"), Port(0)) clientKey = generateSecp256k1Key() - client = newTestWakuNode(clientKey, ValidIpAddress.init("0.0.0.0"), Port(0)) + client = newTestWakuNode(clientKey, parseIpAddress("0.0.0.0"), Port(0)) waitFor allFutures(client.start(), server.start(), filterSource.start()) @@ -257,9 +257,9 @@ procSuite "WakuNode - Store": ## Setup let serverKey = generateSecp256k1Key() - server = newTestWakuNode(serverKey, ValidIpAddress.init("0.0.0.0"), Port(0)) + server = newTestWakuNode(serverKey, parseIpAddress("0.0.0.0"), Port(0)) clientKey = generateSecp256k1Key() - client = newTestWakuNode(clientKey, ValidIpAddress.init("0.0.0.0"), Port(0)) + client = newTestWakuNode(clientKey, parseIpAddress("0.0.0.0"), Port(0)) waitFor allFutures(client.start(), server.start()) diff --git a/tests/wakunode2/test_validators.nim b/tests/wakunode2/test_validators.nim index c1c05a0e88..17de9822ef 100644 --- a/tests/wakunode2/test_validators.nim +++ b/tests/wakunode2/test_validators.nim @@ -25,7 +25,7 @@ suite "WakuNode2 - Validators": asyncTest "Spam protected topic accepts signed messages": # Create 5 nodes - let nodes = toSeq(0..<5).mapIt(newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0))) + let nodes = toSeq(0..<5).mapIt(newTestWakuNode(generateSecp256k1Key(), parseIpAddress("0.0.0.0"), Port(0))) # Protected topic and key to sign let spamProtectedTopic = PubSubTopic("some-spam-protected-topic") @@ -94,7 +94,7 @@ suite "WakuNode2 - Validators": asyncTest "Spam protected topic rejects non-signed/wrongly-signed/no-timestamp messages": # Create 5 nodes - let nodes = toSeq(0..<5).mapIt(newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0))) + let nodes = toSeq(0..<5).mapIt(newTestWakuNode(generateSecp256k1Key(), parseIpAddress("0.0.0.0"), Port(0))) # Protected topic and key to sign let spamProtectedTopic = PubSubTopic("some-spam-protected-topic") @@ -204,7 +204,7 @@ suite "WakuNode2 - Validators": asyncTest "Spam protected topic rejects a spammer node": # Create 5 nodes - let nodes = toSeq(0..<5).mapIt(newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0))) + let nodes = toSeq(0..<5).mapIt(newTestWakuNode(generateSecp256k1Key(), parseIpAddress("0.0.0.0"), Port(0))) # Protected topic and key to sign let spamProtectedTopic = PubSubTopic("some-spam-protected-topic") diff --git a/tests/wakunode_jsonrpc/test_jsonrpc_admin.nim b/tests/wakunode_jsonrpc/test_jsonrpc_admin.nim index 1dd84abd31..9570ab0d03 100644 --- a/tests/wakunode_jsonrpc/test_jsonrpc_admin.nim +++ b/tests/wakunode_jsonrpc/test_jsonrpc_admin.nim @@ -26,15 +26,15 @@ import procSuite "Waku v2 JSON-RPC API - Admin": let - bindIp = ValidIpAddress.init("0.0.0.0") + bindIp = parseIpAddress("0.0.0.0") asyncTest "connect to ad-hoc peers": # Create a couple of nodes let - node1 = newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("127.0.0.1"), Port(60600)) - node2 = newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("127.0.0.1"), Port(60602)) + node1 = newTestWakuNode(generateSecp256k1Key(), parseIpAddress("127.0.0.1"), Port(60600)) + node2 = newTestWakuNode(generateSecp256k1Key(), parseIpAddress("127.0.0.1"), Port(60602)) peerInfo2 = node2.switch.peerInfo - node3 = newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("127.0.0.1"), Port(60604)) + node3 = newTestWakuNode(generateSecp256k1Key(), parseIpAddress("127.0.0.1"), Port(60604)) peerInfo3 = node3.switch.peerInfo await allFutures([node1.start(), node2.start(), node3.start()]) @@ -90,7 +90,7 @@ procSuite "Waku v2 JSON-RPC API - Admin": asyncTest "get managed peer information": # Create 3 nodes and start them with relay - let nodes = toSeq(0..<3).mapIt(newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("127.0.0.1"), Port(60220+it*2))) + let nodes = toSeq(0..<3).mapIt(newTestWakuNode(generateSecp256k1Key(), parseIpAddress("127.0.0.1"), Port(60220+it*2))) await allFutures(nodes.mapIt(it.start())) await allFutures(nodes.mapIt(it.mountRelay())) @@ -137,7 +137,7 @@ procSuite "Waku v2 JSON-RPC API - Admin": await allFutures(nodes.mapIt(it.stop())) asyncTest "get unmanaged peer information": - let node = newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(60523)) + let node = newTestWakuNode(generateSecp256k1Key(), parseIpAddress("0.0.0.0"), Port(60523)) await node.start() diff --git a/tests/wakunode_jsonrpc/test_jsonrpc_debug.nim b/tests/wakunode_jsonrpc/test_jsonrpc_debug.nim index ae6297c9a7..d06d0b8fa3 100644 --- a/tests/wakunode_jsonrpc/test_jsonrpc_debug.nim +++ b/tests/wakunode_jsonrpc/test_jsonrpc_debug.nim @@ -21,8 +21,8 @@ import procSuite "Waku v2 JSON-RPC API - Debug": let privkey = generateSecp256k1Key() - bindIp = ValidIpAddress.init("0.0.0.0") - extIp = ValidIpAddress.init("127.0.0.1") + bindIp = parseIpAddress("0.0.0.0") + extIp = parseIpAddress("127.0.0.1") port = Port(0) node = newTestWakuNode(privkey, bindIp, port, some(extIp), some(port)) diff --git a/tests/wakunode_jsonrpc/test_jsonrpc_filter.nim b/tests/wakunode_jsonrpc/test_jsonrpc_filter.nim index b82d55407a..74177f2a02 100644 --- a/tests/wakunode_jsonrpc/test_jsonrpc_filter.nim +++ b/tests/wakunode_jsonrpc/test_jsonrpc_filter.nim @@ -20,7 +20,7 @@ import procSuite "Waku v2 JSON-RPC API - Filter": let - bindIp = ValidIpAddress.init("0.0.0.0") + bindIp = parseIpAddress("0.0.0.0") asyncTest "subscribe and unsubscribe": let diff --git a/tests/wakunode_jsonrpc/test_jsonrpc_relay.nim b/tests/wakunode_jsonrpc/test_jsonrpc_relay.nim index 08c94b8514..902a366db0 100644 --- a/tests/wakunode_jsonrpc/test_jsonrpc_relay.nim +++ b/tests/wakunode_jsonrpc/test_jsonrpc_relay.nim @@ -23,7 +23,7 @@ suite "Waku v2 JSON-RPC API - Relay": asyncTest "subscribe and unsubscribe from topics": ## Setup - let node = newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0)) + let node = newTestWakuNode(generateSecp256k1Key(), parseIpAddress("0.0.0.0"), Port(0)) await node.start() await node.mountRelay(@[]) @@ -31,7 +31,7 @@ suite "Waku v2 JSON-RPC API - Relay": # JSON-RPC server let rpcPort = Port(8547) - ta = initTAddress(ValidIpAddress.init("0.0.0.0"), rpcPort) + ta = initTAddress(parseIpAddress("0.0.0.0"), rpcPort) server = newRpcHttpServer([ta]) let cache = MessageCache.init(capacity=30) @@ -84,8 +84,8 @@ suite "Waku v2 JSON-RPC API - Relay": # Relay nodes setup let - srcNode = newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0)) - dstNode = newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0)) + srcNode = newTestWakuNode(generateSecp256k1Key(), parseIpAddress("0.0.0.0"), Port(0)) + dstNode = newTestWakuNode(generateSecp256k1Key(), parseIpAddress("0.0.0.0"), Port(0)) await allFutures(srcNode.start(), dstNode.start()) @@ -105,7 +105,7 @@ suite "Waku v2 JSON-RPC API - Relay": # RPC server (source node) let rpcPort = Port(8548) - ta = initTAddress(ValidIpAddress.init("0.0.0.0"), rpcPort) + ta = initTAddress(parseIpAddress("0.0.0.0"), rpcPort) server = newRpcHttpServer([ta]) let cache = MessageCache.init(capacity=30) @@ -162,8 +162,8 @@ suite "Waku v2 JSON-RPC API - Relay": # Relay nodes setup let - srcNode = newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0)) - dstNode = newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0)) + srcNode = newTestWakuNode(generateSecp256k1Key(), parseIpAddress("0.0.0.0"), Port(0)) + dstNode = newTestWakuNode(generateSecp256k1Key(), parseIpAddress("0.0.0.0"), Port(0)) await allFutures(srcNode.start(), dstNode.start()) @@ -175,7 +175,7 @@ suite "Waku v2 JSON-RPC API - Relay": # RPC server (destination node) let rpcPort = Port(8549) - ta = initTAddress(ValidIpAddress.init("0.0.0.0"), rpcPort) + ta = initTAddress(parseIpAddress("0.0.0.0"), rpcPort) server = newRpcHttpServer([ta]) let cache = MessageCache.init(capacity=30) @@ -223,8 +223,8 @@ suite "Waku v2 JSON-RPC API - Relay": # Relay nodes setup let - srcNode = newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0)) - dstNode = newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0)) + srcNode = newTestWakuNode(generateSecp256k1Key(), parseIpAddress("0.0.0.0"), Port(0)) + dstNode = newTestWakuNode(generateSecp256k1Key(), parseIpAddress("0.0.0.0"), Port(0)) await allFutures(srcNode.start(), dstNode.start()) @@ -238,7 +238,7 @@ suite "Waku v2 JSON-RPC API - Relay": # RPC server (destination node) let rpcPort = Port(8550) - ta = initTAddress(ValidIpAddress.init("0.0.0.0"), rpcPort) + ta = initTAddress(parseIpAddress("0.0.0.0"), rpcPort) server = newRpcHttpServer([ta]) let cache = MessageCache.init(capacity=30) diff --git a/tests/wakunode_jsonrpc/test_jsonrpc_store.nim b/tests/wakunode_jsonrpc/test_jsonrpc_store.nim index fe22f8ac18..b08b47fc0d 100644 --- a/tests/wakunode_jsonrpc/test_jsonrpc_store.nim +++ b/tests/wakunode_jsonrpc/test_jsonrpc_store.nim @@ -37,8 +37,8 @@ procSuite "Waku v2 JSON-RPC API - Store": asyncTest "query a node and retrieve historical messages": let privkey = generateSecp256k1Key() - bindIp = ValidIpAddress.init("0.0.0.0") - extIp = ValidIpAddress.init("127.0.0.1") + bindIp = parseIpAddress("0.0.0.0") + extIp = parseIpAddress("127.0.0.1") port = Port(0) node = newTestWakuNode(privkey, bindIp, port, some(extIp), some(port)) @@ -110,8 +110,8 @@ procSuite "Waku v2 JSON-RPC API - Store": asyncTest "check error response when peer-store-node is not available": let privkey = generateSecp256k1Key() - bindIp = ValidIpAddress.init("0.0.0.0") - extIp = ValidIpAddress.init("127.0.0.1") + bindIp = parseIpAddress("0.0.0.0") + extIp = parseIpAddress("127.0.0.1") port = Port(0) node = newTestWakuNode(privkey, bindIp, port, some(extIp), some(port)) @@ -154,7 +154,11 @@ procSuite "Waku v2 JSON-RPC API - Store": some(Timestamp(9)), some(StorePagingOptions())) except ValueError: - jsonError = parseJson(getCurrentExceptionMsg()) + + try: + jsonError = parseJson(getCurrentExceptionMsg()) + except Exception: + assert false, "exception calling parseJson: " & getCurrentExceptionMsg() check: $jsonError["code"] == "-32000" diff --git a/tests/wakunode_rest/test_rest_admin.nim b/tests/wakunode_rest/test_rest_admin.nim index 42aea1b173..2bf66d624e 100644 --- a/tests/wakunode_rest/test_rest_admin.nim +++ b/tests/wakunode_rest/test_rest_admin.nim @@ -32,17 +32,17 @@ suite "Waku v2 Rest API - Admin": var client{.threadvar.}: RestClientRef asyncSetup: - node1 = newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("127.0.0.1"), Port(60600)) - node2 = newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("127.0.0.1"), Port(60602)) + node1 = newTestWakuNode(generateSecp256k1Key(), parseIpAddress("127.0.0.1"), Port(60600)) + node2 = newTestWakuNode(generateSecp256k1Key(), parseIpAddress("127.0.0.1"), Port(60602)) peerInfo2 = node2.switch.peerInfo - node3 = newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("127.0.0.1"), Port(60604)) + node3 = newTestWakuNode(generateSecp256k1Key(), parseIpAddress("127.0.0.1"), Port(60604)) peerInfo3 = node3.switch.peerInfo await allFutures(node1.start(), node2.start(), node3.start()) await allFutures(node1.mountRelay(), node2.mountRelay(), node3.mountRelay()) let restPort = Port(58011) - let restAddress = ValidIpAddress.init("127.0.0.1") + let restAddress = parseIpAddress("127.0.0.1") restServer = RestServerRef.init(restAddress, restPort).tryGet() installAdminApiHandlers(restServer.router, node1) diff --git a/tests/wakunode_rest/test_rest_debug.nim b/tests/wakunode_rest/test_rest_debug.nim index b1b57cc85d..ab458ad0cd 100644 --- a/tests/wakunode_rest/test_rest_debug.nim +++ b/tests/wakunode_rest/test_rest_debug.nim @@ -24,8 +24,8 @@ import proc testWakuNode(): WakuNode = let privkey = crypto.PrivateKey.random(Secp256k1, rng[]).tryGet() - bindIp = ValidIpAddress.init("0.0.0.0") - extIp = ValidIpAddress.init("127.0.0.1") + bindIp = parseIpAddress("0.0.0.0") + extIp = parseIpAddress("127.0.0.1") port = Port(58000) newTestWakuNode(privkey, bindIp, port, some(extIp), some(port)) @@ -39,7 +39,7 @@ suite "Waku v2 REST API - Debug": await node.mountRelay() let restPort = Port(58001) - let restAddress = ValidIpAddress.init("0.0.0.0") + let restAddress = parseIpAddress("0.0.0.0") let restServer = RestServerRef.init(restAddress, restPort).tryGet() installDebugApiHandlers(restServer.router, node) @@ -66,7 +66,7 @@ suite "Waku v2 REST API - Debug": await node.mountRelay() let restPort = Port(58002) - let restAddress = ValidIpAddress.init("0.0.0.0") + let restAddress = parseIpAddress("0.0.0.0") let restServer = RestServerRef.init(restAddress, restPort).tryGet() installDebugApiHandlers(restServer.router, node) diff --git a/tests/wakunode_rest/test_rest_filter.nim b/tests/wakunode_rest/test_rest_filter.nim index d6ab93525d..0c35b9f689 100644 --- a/tests/wakunode_rest/test_rest_filter.nim +++ b/tests/wakunode_rest/test_rest_filter.nim @@ -30,8 +30,8 @@ import proc testWakuNode(): WakuNode = let privkey = generateSecp256k1Key() - bindIp = ValidIpAddress.init("0.0.0.0") - extIp = ValidIpAddress.init("127.0.0.1") + bindIp = parseIpAddress("0.0.0.0") + extIp = parseIpAddress("127.0.0.1") port = Port(0) return newTestWakuNode(privkey, bindIp, port, some(extIp), some(port)) @@ -61,7 +61,7 @@ proc init(T: type RestFilterTest): Future[T] {.async.} = testSetup.subscriberNode.peerManager.addServicePeer(testSetup.serviceNode.peerInfo.toRemotePeerInfo(), WakuFilterSubscribeCodec) let restPort = Port(58011) - let restAddress = ValidIpAddress.init("127.0.0.1") + let restAddress = parseIpAddress("127.0.0.1") testSetup.restServer = RestServerRef.init(restAddress, restPort).tryGet() let restPort2 = Port(58012) diff --git a/tests/wakunode_rest/test_rest_health.nim b/tests/wakunode_rest/test_rest_health.nim index 954c030658..d5d8f29f5a 100644 --- a/tests/wakunode_rest/test_rest_health.nim +++ b/tests/wakunode_rest/test_rest_health.nim @@ -27,8 +27,8 @@ import proc testWakuNode(): WakuNode = let privkey = crypto.PrivateKey.random(Secp256k1, rng[]).tryGet() - bindIp = ValidIpAddress.init("0.0.0.0") - extIp = ValidIpAddress.init("127.0.0.1") + bindIp = parseIpAddress("0.0.0.0") + extIp = parseIpAddress("127.0.0.1") port = Port(0) newTestWakuNode(privkey, bindIp, port, some(extIp), some(port)) @@ -43,7 +43,7 @@ suite "Waku v2 REST API - health": await node.mountRelay() let restPort = Port(58001) - let restAddress = ValidIpAddress.init("0.0.0.0") + let restAddress = parseIpAddress("0.0.0.0") let restServer = RestServerRef.init(restAddress, restPort).tryGet() installHealthApiHandler(restServer.router, node) diff --git a/tests/wakunode_rest/test_rest_legacy_filter.nim b/tests/wakunode_rest/test_rest_legacy_filter.nim index 800c13b33d..535103e0f1 100644 --- a/tests/wakunode_rest/test_rest_legacy_filter.nim +++ b/tests/wakunode_rest/test_rest_legacy_filter.nim @@ -28,8 +28,8 @@ import proc testWakuNode(): WakuNode = let privkey = generateSecp256k1Key() - bindIp = ValidIpAddress.init("0.0.0.0") - extIp = ValidIpAddress.init("127.0.0.1") + bindIp = parseIpAddress("0.0.0.0") + extIp = parseIpAddress("127.0.0.1") port = Port(0) return newTestWakuNode(privkey, bindIp, port, some(extIp), some(port)) @@ -56,7 +56,7 @@ proc setupRestFilter(): Future[RestFilterTest] {.async.} = ,WakuLegacyFilterCodec) let restPort = Port(58011) - let restAddress = ValidIpAddress.init("0.0.0.0") + let restAddress = parseIpAddress("0.0.0.0") result.restServer = RestServerRef.init(restAddress, restPort).tryGet() result.messageCache = MessageCache.init() diff --git a/tests/wakunode_rest/test_rest_lightpush.nim b/tests/wakunode_rest/test_rest_lightpush.nim index 72fb4c7b86..876be7c642 100644 --- a/tests/wakunode_rest/test_rest_lightpush.nim +++ b/tests/wakunode_rest/test_rest_lightpush.nim @@ -28,8 +28,8 @@ import proc testWakuNode(): WakuNode = let privkey = generateSecp256k1Key() - bindIp = ValidIpAddress.init("0.0.0.0") - extIp = ValidIpAddress.init("127.0.0.1") + bindIp = parseIpAddress("0.0.0.0") + extIp = parseIpAddress("127.0.0.1") port = Port(0) return newTestWakuNode(privkey, bindIp, port, some(extIp), some(port)) @@ -70,7 +70,7 @@ proc init(T: type RestLightPushTest): Future[T] {.async.} = WakuLightPushCodec) let restPort = Port(58011) - let restAddress = ValidIpAddress.init("127.0.0.1") + let restAddress = parseIpAddress("127.0.0.1") testSetup.restServer = RestServerRef.init(restAddress, restPort).tryGet() installLightPushRequestHandler(testSetup.restServer.router, testSetup.pushNode) diff --git a/tests/wakunode_rest/test_rest_relay.nim b/tests/wakunode_rest/test_rest_relay.nim index 3554253aa1..7c023a3d47 100644 --- a/tests/wakunode_rest/test_rest_relay.nim +++ b/tests/wakunode_rest/test_rest_relay.nim @@ -26,8 +26,8 @@ import proc testWakuNode(): WakuNode = let privkey = generateSecp256k1Key() - bindIp = ValidIpAddress.init("0.0.0.0") - extIp = ValidIpAddress.init("127.0.0.1") + bindIp = parseIpAddress("0.0.0.0") + extIp = parseIpAddress("127.0.0.1") port = Port(0) newTestWakuNode(privkey, bindIp, port, some(extIp), some(port)) @@ -41,7 +41,7 @@ suite "Waku v2 Rest API - Relay": await node.mountRelay() let restPort = Port(58011) - let restAddress = ValidIpAddress.init("0.0.0.0") + let restAddress = parseIpAddress("0.0.0.0") let restServer = RestServerRef.init(restAddress, restPort).tryGet() let cache = MessageCache.init() @@ -89,7 +89,7 @@ suite "Waku v2 Rest API - Relay": ]) let restPort = Port(58012) - let restAddress = ValidIpAddress.init("0.0.0.0") + let restAddress = parseIpAddress("0.0.0.0") let restServer = RestServerRef.init(restAddress, restPort).tryGet() let cache = MessageCache.init() @@ -141,7 +141,7 @@ suite "Waku v2 Rest API - Relay": await node.mountRelay() let restPort = Port(58013) - let restAddress = ValidIpAddress.init("0.0.0.0") + let restAddress = parseIpAddress("0.0.0.0") let restServer = RestServerRef.init(restAddress, restPort).tryGet() let pubSubTopic = "/waku/2/default-waku/proto" @@ -204,7 +204,7 @@ suite "Waku v2 Rest API - Relay": # RPC server setup let restPort = Port(58014) - let restAddress = ValidIpAddress.init("0.0.0.0") + let restAddress = parseIpAddress("0.0.0.0") let restServer = RestServerRef.init(restAddress, restPort).tryGet() let cache = MessageCache.init() @@ -244,7 +244,7 @@ suite "Waku v2 Rest API - Relay": await node.mountRelay() let restPort = Port(58011) - let restAddress = ValidIpAddress.init("0.0.0.0") + let restAddress = parseIpAddress("0.0.0.0") let restServer = RestServerRef.init(restAddress, restPort).tryGet() let cache = MessageCache.init() @@ -290,7 +290,7 @@ suite "Waku v2 Rest API - Relay": await node.mountRelay() let restPort = Port(58012) - let restAddress = ValidIpAddress.init("0.0.0.0") + let restAddress = parseIpAddress("0.0.0.0") let restServer = RestServerRef.init(restAddress, restPort).tryGet() let contentTopics = @[ @@ -336,7 +336,7 @@ suite "Waku v2 Rest API - Relay": await node.mountRelay() let restPort = Port(58013) - let restAddress = ValidIpAddress.init("0.0.0.0") + let restAddress = parseIpAddress("0.0.0.0") let restServer = RestServerRef.init(restAddress, restPort).tryGet() let contentTopic = DefaultContentTopic @@ -398,7 +398,7 @@ suite "Waku v2 Rest API - Relay": # RPC server setup let restPort = Port(58014) - let restAddress = ValidIpAddress.init("0.0.0.0") + let restAddress = parseIpAddress("0.0.0.0") let restServer = RestServerRef.init(restAddress, restPort).tryGet() let cache = MessageCache.init() diff --git a/tests/wakunode_rest/test_rest_store.nim b/tests/wakunode_rest/test_rest_store.nim index ef8fc745d2..d6063ebd5c 100644 --- a/tests/wakunode_rest/test_rest_store.nim +++ b/tests/wakunode_rest/test_rest_store.nim @@ -44,8 +44,8 @@ proc put(store: ArchiveDriver, pubsubTopic: PubsubTopic, message: WakuMessage): proc testWakuNode(): WakuNode = let privkey = generateSecp256k1Key() - bindIp = ValidIpAddress.init("0.0.0.0") - extIp = ValidIpAddress.init("127.0.0.1") + bindIp = parseIpAddress("0.0.0.0") + extIp = parseIpAddress("127.0.0.1") port = Port(0) return newTestWakuNode(privkey, bindIp, port, some(extIp), some(port)) @@ -81,7 +81,7 @@ procSuite "Waku v2 Rest API - Store": await node.mountRelay() let restPort = Port(58011) - let restAddress = ValidIpAddress.init("0.0.0.0") + let restAddress = parseIpAddress("0.0.0.0") let restServer = RestServerRef.init(restAddress, restPort).tryGet() installStoreApiHandlers(restServer.router, node) @@ -151,7 +151,7 @@ procSuite "Waku v2 Rest API - Store": await node.start() let restPort = Port(58012) - let restAddress = ValidIpAddress.init("0.0.0.0") + let restAddress = parseIpAddress("0.0.0.0") let restServer = RestServerRef.init(restAddress, restPort).tryGet() installStoreApiHandlers(restServer.router, node) @@ -249,7 +249,7 @@ procSuite "Waku v2 Rest API - Store": await node.mountRelay() let restPort = Port(58013) - let restAddress = ValidIpAddress.init("0.0.0.0") + let restAddress = parseIpAddress("0.0.0.0") let restServer = RestServerRef.init(restAddress, restPort).tryGet() installStoreApiHandlers(restServer.router, node) @@ -323,7 +323,7 @@ procSuite "Waku v2 Rest API - Store": await node.mountRelay() let restPort = Port(58014) - let restAddress = ValidIpAddress.init("0.0.0.0") + let restAddress = parseIpAddress("0.0.0.0") let restServer = RestServerRef.init(restAddress, restPort).tryGet() installStoreApiHandlers(restServer.router, node) @@ -414,7 +414,7 @@ procSuite "Waku v2 Rest API - Store": await node.mountRelay() let restPort = Port(58015) - let restAddress = ValidIpAddress.init("0.0.0.0") + let restAddress = parseIpAddress("0.0.0.0") let restServer = RestServerRef.init(restAddress, restPort).tryGet() installStoreApiHandlers(restServer.router, node) @@ -471,7 +471,7 @@ procSuite "Waku v2 Rest API - Store": await node.mountRelay() let restPort = Port(58016) - let restAddress = ValidIpAddress.init("0.0.0.0") + let restAddress = parseIpAddress("0.0.0.0") let restServer = RestServerRef.init(restAddress, restPort).tryGet() installStoreApiHandlers(restServer.router, node) diff --git a/tools/rln_keystore_generator/rln_keystore_generator.nim b/tools/rln_keystore_generator/rln_keystore_generator.nim index ff413d8b29..5c312575ee 100644 --- a/tools/rln_keystore_generator/rln_keystore_generator.nim +++ b/tools/rln_keystore_generator/rln_keystore_generator.nim @@ -64,7 +64,7 @@ proc doRlnKeystoreGenerator*(conf: WakuNodeConf) = # 5. register on-chain try: waitFor groupManager.register(credential) - except CatchableError: + except Exception, CatchableError: error "failure while registering credentials on-chain", error=getCurrentExceptionMsg() quit(1) diff --git a/vendor/nim-chronicles b/vendor/nim-chronicles index d1d34b9490..ccbb7566d1 160000 --- a/vendor/nim-chronicles +++ b/vendor/nim-chronicles @@ -1 +1 @@ -Subproject commit d1d34b9490f99fa2052ffcff2bcf0edaf42d1bdd +Subproject commit ccbb7566d1a06bfc1ec42dd8da74a47f1d3b3f4b diff --git a/vendor/nim-chronos b/vendor/nim-chronos index be2edab3ac..e38ceb5378 160000 --- a/vendor/nim-chronos +++ b/vendor/nim-chronos @@ -1 +1 @@ -Subproject commit be2edab3ac101da03a70cbf52bc3f3d972b35d91 +Subproject commit e38ceb5378e7ce945eedbe1c6fb670095cfb9cc5 diff --git a/vendor/nim-dnsdisc b/vendor/nim-dnsdisc index ddef6f88de..302dfde46f 160000 --- a/vendor/nim-dnsdisc +++ b/vendor/nim-dnsdisc @@ -1 +1 @@ -Subproject commit ddef6f88de5fdd9874f62415e14ea437d8fb9e5d +Subproject commit 302dfde46fa72a4e0de58a3dbdf54f5a77350816 diff --git a/vendor/nim-eth b/vendor/nim-eth index 700360fde2..e5c2b1784e 160000 --- a/vendor/nim-eth +++ b/vendor/nim-eth @@ -1 +1 @@ -Subproject commit 700360fde2cf91c0c6d66af42851ee21c947e23a +Subproject commit e5c2b1784ec7badc6162325e37daee2229f53d8b diff --git a/vendor/nim-http-utils b/vendor/nim-http-utils index 4a46dcc4c0..77a59297ad 160000 --- a/vendor/nim-http-utils +++ b/vendor/nim-http-utils @@ -1 +1 @@ -Subproject commit 4a46dcc4c0c6c4a53715602d4cfd47a032ab8582 +Subproject commit 77a59297ad635d91a6352ef48ee09c6bde0c5d86 diff --git a/vendor/nim-libp2p b/vendor/nim-libp2p index fc4e9a8bb8..3011ba4326 160000 --- a/vendor/nim-libp2p +++ b/vendor/nim-libp2p @@ -1 +1 @@ -Subproject commit fc4e9a8bb869428618ee37c6525e670859cfdaf3 +Subproject commit 3011ba4326fa55220a758838835797ff322619fc diff --git a/vendor/nim-stew b/vendor/nim-stew index 3159137d9a..2c2544aec1 160000 --- a/vendor/nim-stew +++ b/vendor/nim-stew @@ -1 +1 @@ -Subproject commit 3159137d9a3110edb4024145ce0ba778975de40e +Subproject commit 2c2544aec13536304438be045bfdd22452741466 diff --git a/vendor/nim-unittest2 b/vendor/nim-unittest2 index 91973dfa38..262b697f38 160000 --- a/vendor/nim-unittest2 +++ b/vendor/nim-unittest2 @@ -1 +1 @@ -Subproject commit 91973dfa3823a8b423abdce59ac19de0a17ef9c1 +Subproject commit 262b697f38d6b6f1e7462d3b3ab81d79b894e336 diff --git a/waku/common/confutils/envvar/std/net.nim b/waku/common/confutils/envvar/std/net.nim index 509de57daa..1a58cb1a42 100644 --- a/waku/common/confutils/envvar/std/net.nim +++ b/waku/common/confutils/envvar/std/net.nim @@ -13,9 +13,9 @@ export net, envvar_serialization -proc readValue*(r: var EnvvarReader, value: var ValidIpAddress) {.raises: [SerializationError].} = +proc readValue*(r: var EnvvarReader, value: var IpAddress) {.raises: [SerializationError].} = try: - value = ValidIpAddress.init(r.readValue(string)) + value = parseIpAddress(r.readValue(string)) except ValueError, IOError: raise newException(SerializationError, "Invalid IP address: " & getCurrentExceptionMsg()) diff --git a/waku/common/databases/db_postgres/dbconn.nim b/waku/common/databases/db_postgres/dbconn.nim index 57d4a1b86e..d4cdedb882 100644 --- a/waku/common/databases/db_postgres/dbconn.nim +++ b/waku/common/databases/db_postgres/dbconn.nim @@ -1,7 +1,3 @@ -when (NimMajor, NimMinor) < (1, 4): - {.push raises: [Defect,DbError].} -else: - {.push raises: [ValueError,DbError].} import std/[times, strutils, strformat], @@ -10,7 +6,7 @@ import include db_postgres -type DataProc* = proc(result: ptr PGresult) {.closure, gcsafe.} +type DataProc* = proc(result: ptr PGresult) {.closure, gcsafe, raises: [].} ## Connection management @@ -80,7 +76,7 @@ proc sendQueryPrepared( paramValues: openArray[string], paramLengths: openArray[int32], paramFormats: openArray[int32]): - Result[void, string] = + Result[void, string] {.raises: [].} = ## This proc can be used directly for queries that don't retrieve values back. if paramValues.len != paramLengths.len or paramValues.len != paramFormats.len or diff --git a/waku/common/enr/builder.nim b/waku/common/enr/builder.nim index 30fd6d9d49..06616c0299 100644 --- a/waku/common/enr/builder.nim +++ b/waku/common/enr/builder.nim @@ -51,7 +51,7 @@ proc build*(builder: EnrBuilder): EnrResult[enr.Record] = enr.Record.init( seqNum = builder.seqNumber, pk = builder.privateKey, - ip = none(ValidIpAddress), + ip = none(IpAddress), tcpPort = none(Port), udpPort = none(Port), extraFields = builder.fields @@ -60,7 +60,7 @@ proc build*(builder: EnrBuilder): EnrResult[enr.Record] = ## Builder extension: IP address and TCP/UDP ports -proc addAddressAndPorts(builder: var EnrBuilder, ip: ValidIpAddress, tcpPort, udpPort: Option[Port]) = +proc addAddressAndPorts(builder: var EnrBuilder, ip: IpAddress, tcpPort, udpPort: Option[Port]) = # Based on: https://github.com/status-im/nim-eth/blob/4b22fcd/eth/p2p/discoveryv5/enr.nim#L166 let isV6 = ip.family == IPv6 @@ -93,7 +93,7 @@ proc addPorts(builder: var EnrBuilder, tcp, udp: Option[Port]) = proc withIpAddressAndPorts*(builder: var EnrBuilder, - ipAddr = none(ValidIpAddress), + ipAddr = none(IpAddress), tcpPort = none(Port), udpPort = none(Port)) = if ipAddr.isSome(): diff --git a/waku/common/utils/nat.nim b/waku/common/utils/nat.nim index de36ffcd87..75883057fd 100644 --- a/waku/common/utils/nat.nim +++ b/waku/common/utils/nat.nim @@ -18,7 +18,7 @@ logScope: proc setupNat*(natConf, clientId: string, tcpPort, udpPort: Port): - Result[tuple[ip: Option[ValidIpAddress], + Result[tuple[ip: Option[IpAddress], tcpPort: Option[Port], udpPort: Option[Port]], string] {.gcsafe.} = @@ -30,12 +30,12 @@ proc setupNat*(natConf, clientId: string, of "pmp": NatPmp else: NatNone - var endpoint: tuple[ip: Option[ValidIpAddress], tcpPort: Option[Port], udpPort: Option[Port]] + var endpoint: tuple[ip: Option[IpAddress], tcpPort: Option[Port], udpPort: Option[Port]] if strategy != NatNone: let extIp = getExternalIP(strategy) if extIP.isSome(): - endpoint.ip = some(ValidIpAddress.init(extIp.get())) + endpoint.ip = some(extIp.get()) # RedirectPorts in considered a gcsafety violation # because it obtains the address of a non-gcsafe proc? var extPorts: Option[(Port, Port)] @@ -59,7 +59,7 @@ proc setupNat*(natConf, clientId: string, try: # any required port redirection is assumed to be done by hand - endpoint.ip = some(ValidIpAddress.init(natConf[6..^1])) + endpoint.ip = some(parseIpAddress(natConf[6..^1])) except ValueError: return err("not a valid IP address: " & $natConf[6..^1]) diff --git a/waku/node/builder.nim b/waku/node/builder.nim index 7dea3ef0a9..b1aa19f000 100644 --- a/waku/node/builder.nim +++ b/waku/node/builder.nim @@ -68,9 +68,9 @@ proc withNetworkConfiguration*(builder: var WakuNodeBuilder, config: NetConfig) builder.netConfig = some(config) proc withNetworkConfigurationDetails*(builder: var WakuNodeBuilder, - bindIp: ValidIpAddress, + bindIp: IpAddress, bindPort: Port, - extIp = none(ValidIpAddress), + extIp = none(IpAddress), extPort = none(Port), extMultiAddrs = newSeq[MultiAddress](), wsBindPort: Port = Port(8000), diff --git a/waku/node/config.nim b/waku/node/config.nim index f53d67134f..3d153d5498 100644 --- a/waku/node/config.nim +++ b/waku/node/config.nim @@ -21,17 +21,17 @@ type NetConfig* = object hostExtAddress*: Option[MultiAddress] wsExtAddress*: Option[MultiAddress] wssEnabled*: bool - extIp*: Option[ValidIpAddress] + extIp*: Option[IpAddress] extPort*: Option[Port] dns4DomainName*: Option[string] announcedAddresses*: seq[MultiAddress] extMultiAddrs*: seq[MultiAddress] enrMultiAddrs*: seq[MultiAddress] - enrIp*: Option[ValidIpAddress] + enrIp*: Option[IpAddress] enrPort*: Option[Port] discv5UdpPort*: Option[Port] wakuFlags*: Option[CapabilitiesBitfield] - bindIp*: ValidIpAddress + bindIp*: IpAddress bindPort*: Port type NetConfigResult* = Result[NetConfig, string] @@ -70,9 +70,9 @@ proc containsWsAddress(extMultiAddrs: seq[MultiAddress]): bool = return extMultiAddrs.filterIt( it.isWsAddress() ).len > 0 proc init*(T: type NetConfig, - bindIp: ValidIpAddress, + bindIp: IpAddress, bindPort: Port, - extIp = none(ValidIpAddress), + extIp = none(IpAddress), extPort = none(Port), extMultiAddrs = newSeq[MultiAddress](), extMultiAddrsOnly: bool = false, diff --git a/waku/node/waku_node.nim b/waku/node/waku_node.nim index f138b85818..1cc3068565 100644 --- a/waku/node/waku_node.nim +++ b/waku/node/waku_node.nim @@ -1160,14 +1160,17 @@ proc stop*(node: WakuNode) {.async.} = node.peerManager.stop() if not node.wakuRlnRelay.isNil(): - await node.wakuRlnRelay.stop() + try: + await node.wakuRlnRelay.stop() ## this can raise an exception + except Exception: + error "exception stopping the node", error=getCurrentExceptionMsg() if not node.wakuArchive.isNil(): await node.wakuArchive.stop() node.started = false -proc isReady*(node: WakuNode): Future[bool] {.async.} = +proc isReady*(node: WakuNode): Future[bool] {.async: (raises: [Exception]).} = if node.wakuRlnRelay == nil: return true return await node.wakuRlnRelay.isReady() diff --git a/waku/waku_api/rest/health/handlers.nim b/waku/waku_api/rest/health/handlers.nim index a57fa3d27e..c8c5b1ee72 100644 --- a/waku/waku_api/rest/health/handlers.nim +++ b/waku/waku_api/rest/health/handlers.nim @@ -35,8 +35,12 @@ proc installHealthApiHandler*(router: var RestRouter, node: WakuNode) = var msg = "Node is healthy" var status = Http200 - if not isReadyStateFut.read(): - msg = "Node is not ready" - status = Http503 + try: + if not isReadyStateFut.read(): + msg = "Node is not ready" + status = Http503 + except: + msg = "exception reading state: " & getCurrentExceptionMsg() + status = Http500 return RestApiResponse.textResponse(msg, status) diff --git a/waku/waku_api/rest/server.nim b/waku/waku_api/rest/server.nim index f25f29ce90..ac73beb54a 100644 --- a/waku/waku_api/rest/server.nim +++ b/waku/waku_api/rest/server.nim @@ -57,7 +57,7 @@ proc getRouter(allowedOrigin: Option[string]): RestRouter = RestRouter.init(validate, allowedOrigin = allowedOrigin) proc init*(T: type RestServerRef, - ip: ValidIpAddress, port: Port, + ip: IpAddress, port: Port, allowedOrigin=none(string), conf=RestServerConf.default(), requestErrorHandler: RestRequestErrorHandler = nil): RestServerResult[T] = @@ -92,7 +92,7 @@ proc init*(T: type RestServerRef, # RestResult error type is cstring, so we need to map it to string res.mapErr(proc(err: cstring): string = $err) -proc newRestHttpServer*(ip: ValidIpAddress, port: Port, +proc newRestHttpServer*(ip: IpAddress, port: Port, allowedOrigin=none(string), conf=RestServerConf.default(), requestErrorHandler: RestRequestErrorHandler = nil): diff --git a/waku/waku_archive/driver.nim b/waku/waku_archive/driver.nim index d6cccd6721..3a9262f482 100644 --- a/waku/waku_archive/driver.nim +++ b/waku/waku_archive/driver.nim @@ -16,7 +16,7 @@ const DefaultPageSize*: uint = 25 type ArchiveDriverResult*[T] = Result[T, string] ArchiveDriver* = ref object of RootObj - OnErrHandler* = proc(errMsg: string) {.gcsafe, closure.} + OnErrHandler* = proc(errMsg: string) {.gcsafe, closure, raises: [].} type ArchiveRow* = (PubsubTopic, WakuMessage, seq[byte], Timestamp) diff --git a/waku/waku_discv5.nim b/waku/waku_discv5.nim index cb1216f772..9722ef6593 100644 --- a/waku/waku_discv5.nim +++ b/waku/waku_discv5.nim @@ -33,7 +33,7 @@ logScope: type WakuDiscoveryV5Config* = object discv5Config*: Option[DiscoveryConfig] - address*: ValidIpAddress + address*: IpAddress port*: Port privateKey*: eth_keys.PrivateKey bootstrapRecords*: seq[waku_enr.Record] @@ -100,7 +100,7 @@ proc new*( bootstrapRecords = bootstrapRecords, enrAutoUpdate = conf.autoupdateRecord, previousRecord = record, - enrIp = none(ValidIpAddress), + enrIp = none(IpAddress), enrTcpPort = none(Port), enrUdpPort = none(Port), ) diff --git a/waku/waku_lightpush/common.nim b/waku/waku_lightpush/common.nim index 27ecb97466..2205b94aa2 100644 --- a/waku/waku_lightpush/common.nim +++ b/waku/waku_lightpush/common.nim @@ -18,4 +18,4 @@ type PushMessageHandler* = proc( peer: PeerId, pubsubTopic: PubsubTopic, message: WakuMessage - ): Future[WakuLightPushResult[void]] {.gcsafe, closure.} + ): Future[WakuLightPushResult[void]] {.async.} diff --git a/waku/waku_lightpush/protocol.nim b/waku/waku_lightpush/protocol.nim index 56d9ff87ee..f6ec0a31c1 100644 --- a/waku/waku_lightpush/protocol.nim +++ b/waku/waku_lightpush/protocol.nim @@ -22,9 +22,9 @@ logScope: topics = "waku lightpush" type WakuLightPush* = ref object of LPProtocol - rng*: ref rand.HmacDrbgContext - peerManager*: PeerManager - pushHandler*: PushMessageHandler + rng*: ref rand.HmacDrbgContext + peerManager*: PeerManager + pushHandler*: PushMessageHandler proc handleRequest*(wl: WakuLightPush, peerId: PeerId, buffer: seq[byte]): Future[PushRPC] {.async.} = let reqDecodeRes = PushRPC.decode(buffer) diff --git a/waku/waku_rln_relay/group_manager/group_manager_base.nim b/waku/waku_rln_relay/group_manager/group_manager_base.nim index e54606e7f5..7eb12bb798 100644 --- a/waku/waku_rln_relay/group_manager/group_manager_base.nim +++ b/waku/waku_rln_relay/group_manager/group_manager_base.nim @@ -44,30 +44,30 @@ type # This proc is used to initialize the group manager # Any initialization logic should be implemented here -method init*(g: GroupManager): Future[void] {.base,gcsafe.} = +method init*(g: GroupManager): Future[void] {.base,async.} = raise newException(CatchableError, "init proc for " & $g.type & " is not implemented yet") # This proc is used to start the group sync process # It should be used to sync the group state with the rest of the group members -method startGroupSync*(g: GroupManager): Future[void] {.base,gcsafe.} = +method startGroupSync*(g: GroupManager): Future[void] {.base, async: (raises: [Exception]).} = raise newException(CatchableError, "startGroupSync proc for " & $g.type & " is not implemented yet") # This proc is used to register a new identity commitment into the merkle tree # The user may or may not have the identity secret to this commitment # It should be used when detecting new members in the group, and syncing the group state -method register*(g: GroupManager, idCommitment: IDCommitment): Future[void] {.base,gcsafe.} = +method register*(g: GroupManager, idCommitment: IDCommitment): Future[void] {.base,async: (raises: [Exception]).} = raise newException(CatchableError, "register proc for " & $g.type & " is not implemented yet") # This proc is used to register a new identity commitment into the merkle tree # The user should have the identity secret to this commitment # It should be used when the user wants to join the group -method register*(g: GroupManager, credentials: IdentityCredential): Future[void] {.base,gcsafe.} = +method register*(g: GroupManager, credentials: IdentityCredential): Future[void] {.base,async: (raises: [Exception]).} = raise newException(CatchableError, "register proc for " & $g.type & " is not implemented yet") # This proc is used to register a batch of new identity commitments into the merkle tree # The user may or may not have the identity secret to these commitments # It should be used when detecting a batch of new members in the group, and syncing the group state -method registerBatch*(g: GroupManager, idCommitments: seq[IDCommitment]): Future[void] {.base,gcsafe.} = +method registerBatch*(g: GroupManager, idCommitments: seq[IDCommitment]): Future[void] {.base,async: (raises: [Exception]).} = raise newException(CatchableError, "registerBatch proc for " & $g.type & " is not implemented yet") # This proc is used to set a callback that will be called when a new identity commitment is registered @@ -77,19 +77,19 @@ method onRegister*(g: GroupManager, cb: OnRegisterCallback) {.base,gcsafe.} = # This proc is used to withdraw/remove an identity commitment from the merkle tree # The user should have the identity secret hash to this commitment, by either deriving it, or owning it -method withdraw*(g: GroupManager, identitySecretHash: IdentitySecretHash): Future[void] {.base,gcsafe.} = +method withdraw*(g: GroupManager, identitySecretHash: IdentitySecretHash): Future[void] {.base,async: (raises: [Exception]).} = raise newException(CatchableError, "withdraw proc for " & $g.type & " is not implemented yet") # This proc is used to withdraw/remove a batch of identity commitments from the merkle tree # The user should have the identity secret hash to these commitments, by either deriving them, or owning them -method withdrawBatch*(g: GroupManager, identitySecretHashes: seq[IdentitySecretHash]): Future[void] {.base,gcsafe.} = +method withdrawBatch*(g: GroupManager, identitySecretHashes: seq[IdentitySecretHash]): Future[void] {.base,async: (raises: [Exception]).} = raise newException(CatchableError, "withdrawBatch proc for " & $g.type & " is not implemented yet") # This proc is used to insert and remove a set of commitments from the merkle tree -method atomicBatch*(g: GroupManager, idCommitments: seq[IDCommitment], toRemoveIndices: seq[MembershipIndex]): Future[void] {.base,gcsafe.} = +method atomicBatch*(g: GroupManager, idCommitments: seq[IDCommitment], toRemoveIndices: seq[MembershipIndex]): Future[void] {.base,async: (raises: [Exception]).} = raise newException(CatchableError, "atomicBatch proc for " & $g.type & " is not implemented yet") -method stop*(g: GroupManager): Future[void] {.base,gcsafe.} = +method stop*(g: GroupManager): Future[void] {.base,async.} = raise newException(CatchableError, "stop proc for " & $g.type & " is not implemented yet") # This proc is used to set a callback that will be called when an identity commitment is withdrawn @@ -163,5 +163,5 @@ method generateProof*(g: GroupManager, return err("proof generation failed: " & $proofGenRes.error()) return ok(proofGenRes.value()) -method isReady*(g: GroupManager): Future[bool] {.base,gcsafe.} = +method isReady*(g: GroupManager): Future[bool] {.base,async.} = raise newException(CatchableError, "isReady proc for " & $g.type & " is not implemented yet") diff --git a/waku/waku_rln_relay/group_manager/on_chain/group_manager.nim b/waku/waku_rln_relay/group_manager/on_chain/group_manager.nim index 0e0f05aea5..67c9c61876 100644 --- a/waku/waku_rln_relay/group_manager/on_chain/group_manager.nim +++ b/waku/waku_rln_relay/group_manager/on_chain/group_manager.nim @@ -99,7 +99,8 @@ proc setMetadata*(g: OnchainGroupManager): RlnRelayResult[void] = method atomicBatch*(g: OnchainGroupManager, start: MembershipIndex, idCommitments = newSeq[IDCommitment](), - toRemoveIndices = newSeq[MembershipIndex]()): Future[void] {.async.} = + toRemoveIndices = newSeq[MembershipIndex]()): + Future[void] {.async: (raises: [Exception]).} = initializedGuard(g) waku_rln_membership_insertion_duration_seconds.nanosecondTime: @@ -123,20 +124,23 @@ method atomicBatch*(g: OnchainGroupManager, if setMetadataRes.isErr(): error "failed to persist rln metadata", error=setMetadataRes.error -method register*(g: OnchainGroupManager, idCommitment: IDCommitment): Future[void] {.async.} = +method register*(g: OnchainGroupManager, idCommitment: IDCommitment): + Future[void] {.async: (raises: [Exception]).} = initializedGuard(g) await g.registerBatch(@[idCommitment]) -method registerBatch*(g: OnchainGroupManager, idCommitments: seq[IDCommitment]): Future[void] {.async.} = +method registerBatch*(g: OnchainGroupManager, idCommitments: seq[IDCommitment]): + Future[void] {.async: (raises: [Exception]).} = initializedGuard(g) await g.atomicBatch(g.latestIndex, idCommitments) g.latestIndex += MembershipIndex(idCommitments.len()) -method register*(g: OnchainGroupManager, identityCredentials: IdentityCredential): Future[void] {.async.} = +method register*(g: OnchainGroupManager, identityCredentials: IdentityCredential): + Future[void] {.async: (raises: [Exception]).} = initializedGuard(g) let ethRpc = g.ethRpc.get() @@ -183,12 +187,14 @@ method register*(g: OnchainGroupManager, identityCredentials: IdentityCredential # don't handle member insertion into the tree here, it will be handled by the event listener return -method withdraw*(g: OnchainGroupManager, idCommitment: IDCommitment): Future[void] {.async.} = +method withdraw*(g: OnchainGroupManager, idCommitment: IDCommitment): + Future[void] {.async: (raises: [Exception]).} = initializedGuard(g) # TODO: after slashing is enabled on the contract -method withdrawBatch*(g: OnchainGroupManager, idCommitments: seq[IDCommitment]): Future[void] {.async.} = +method withdrawBatch*(g: OnchainGroupManager, idCommitments: seq[IDCommitment]): + Future[void] {.async: (raises: [Exception]).} = initializedGuard(g) # TODO: after slashing is enabled on the contract, use atomicBatch internally @@ -217,7 +223,8 @@ proc parseEvent(event: type MemberRegistered, type BlockTable* = OrderedTable[BlockNumber, seq[(Membership, bool)]] -proc backfillRootQueue*(g: OnchainGroupManager, len: uint): Future[void] {.async.} = +proc backfillRootQueue*(g: OnchainGroupManager, len: uint): + Future[void] {.async: (raises: [Exception]).} = if len > 0: # backfill the tree's acceptable roots for i in 0..len-1: @@ -237,7 +244,7 @@ proc insert(blockTable: var BlockTable, blockNumber: BlockNumber, member: Member proc getRawEvents(g: OnchainGroupManager, fromBlock: BlockNumber, - toBlock: BlockNumber): Future[JsonNode] {.async.} = + toBlock: BlockNumber): Future[JsonNode] {.async: (raises: [Exception]).} = initializedGuard(g) let ethRpc = g.ethRpc.get() @@ -252,7 +259,7 @@ proc getRawEvents(g: OnchainGroupManager, proc getBlockTable(g: OnchainGroupManager, fromBlock: BlockNumber, - toBlock: BlockNumber): Future[BlockTable] {.async.} = + toBlock: BlockNumber): Future[BlockTable] {.async: (raises: [Exception]).} = initializedGuard(g) var blockTable = default(BlockTable) @@ -276,7 +283,7 @@ proc getBlockTable(g: OnchainGroupManager, return blockTable proc handleEvents(g: OnchainGroupManager, - blockTable: BlockTable): Future[void] {.async.} = + blockTable: BlockTable): Future[void] {.async: (raises: [Exception]).} = initializedGuard(g) for blockNumber, members in blockTable.pairs(): @@ -295,7 +302,8 @@ proc handleEvents(g: OnchainGroupManager, return -proc handleRemovedEvents(g: OnchainGroupManager, blockTable: BlockTable): Future[void] {.async.} = +proc handleRemovedEvents(g: OnchainGroupManager, blockTable: BlockTable): + Future[void] {.async: (raises: [Exception]).} = initializedGuard(g) # count number of blocks that have been removed @@ -308,7 +316,7 @@ proc handleRemovedEvents(g: OnchainGroupManager, blockTable: BlockTable): Future proc getAndHandleEvents(g: OnchainGroupManager, fromBlock: BlockNumber, - toBlock: BlockNumber): Future[void] {.async.} = + toBlock: BlockNumber): Future[void] {.async: (raises: [Exception]).} = initializedGuard(g) let blockTable = await g.getBlockTable(fromBlock, toBlock) @@ -339,7 +347,8 @@ proc getNewHeadCallback(g: OnchainGroupManager): BlockHeaderHandler = proc newHeadErrCallback(error: CatchableError) = warn "failed to get new head", error=error.msg -proc startListeningToEvents(g: OnchainGroupManager): Future[void] {.async.} = +proc startListeningToEvents(g: OnchainGroupManager): + Future[void] {.async: (raises: [Exception]).} = initializedGuard(g) let ethRpc = g.ethRpc.get() @@ -348,7 +357,8 @@ proc startListeningToEvents(g: OnchainGroupManager): Future[void] {.async.} = retryWrapper(blockHeaderSub, RetryStrategy.new(), "Failed to subscribe to block headers"): await ethRpc.subscribeForBlockHeaders(newHeadCallback, newHeadErrCallback) -proc startOnchainSync(g: OnchainGroupManager): Future[void] {.async.} = +proc startOnchainSync(g: OnchainGroupManager): + Future[void] {.async: (raises: [Exception]).} = initializedGuard(g) let ethRpc = g.ethRpc.get() @@ -387,7 +397,8 @@ proc startOnchainSync(g: OnchainGroupManager): Future[void] {.async.} = except CatchableError: raise newException(ValueError, "failed to start listening to events: " & getCurrentExceptionMsg()) -method startGroupSync*(g: OnchainGroupManager): Future[void] {.async.} = +method startGroupSync*(g: OnchainGroupManager): + Future[void] {.async: (raises: [Exception]).} = initializedGuard(g) # Get archive history try: @@ -536,7 +547,8 @@ proc isSyncing*(g: OnchainGroupManager): Future[bool] {.async,gcsafe.} = await ethRpc.provider.eth_syncing() return syncing.getBool() -method isReady*(g: OnchainGroupManager): Future[bool] {.async,gcsafe.} = +method isReady*(g: OnchainGroupManager): + Future[bool] {.async.} = initializedGuard(g) if g.ethRpc.isNone(): diff --git a/waku/waku_rln_relay/group_manager/static/group_manager.nim b/waku/waku_rln_relay/group_manager/static/group_manager.nim index 3274975de9..135796a660 100644 --- a/waku/waku_rln_relay/group_manager/static/group_manager.nim +++ b/waku/waku_rln_relay/group_manager/static/group_manager.nim @@ -15,7 +15,7 @@ template initializedGuard*(g: StaticGroupManager): untyped = if not g.initialized: raise newException(ValueError, "StaticGroupManager is not initialized") -method init*(g: StaticGroupManager): Future[void] {.async,gcsafe.} = +method init*(g: StaticGroupManager): Future[void] {.async.} = let groupSize = g.groupSize groupKeys = g.groupKeys @@ -40,20 +40,19 @@ method init*(g: StaticGroupManager): Future[void] {.async,gcsafe.} = return -method startGroupSync*(g: StaticGroupManager): Future[void] = +method startGroupSync*(g: StaticGroupManager): Future[void] {.async: (raises: [Exception]).} = initializedGuard(g) - var retFuture = newFuture[void]("StaticGroupManager.startGroupSync") # No-op - retFuture.complete() - return retFuture -method register*(g: StaticGroupManager, idCommitment: IDCommitment): Future[void] {.async.} = +method register*(g: StaticGroupManager, idCommitment: IDCommitment): + Future[void] {.async: (raises: [Exception]).} = initializedGuard(g) await g.registerBatch(@[idCommitment]) -method registerBatch*(g: StaticGroupManager, idCommitments: seq[IDCommitment]): Future[void] {.async.} = +method registerBatch*(g: StaticGroupManager, idCommitments: seq[IDCommitment]): + Future[void] {.async: (raises: [Exception]).} = initializedGuard(g) let membersInserted = g.rlnInstance.insertMembers(g.latestIndex + 1, idCommitments) @@ -72,7 +71,8 @@ method registerBatch*(g: StaticGroupManager, idCommitments: seq[IDCommitment]): return -method withdraw*(g: StaticGroupManager, idSecretHash: IdentitySecretHash): Future[void] {.async.} = +method withdraw*(g: StaticGroupManager, idSecretHash: IdentitySecretHash): + Future[void] {.async: (raises: [Exception]).} = initializedGuard(g) let groupKeys = g.groupKeys @@ -91,7 +91,8 @@ method withdraw*(g: StaticGroupManager, idSecretHash: IdentitySecretHash): Futur return -method withdrawBatch*(g: StaticGroupManager, idSecretHashes: seq[IdentitySecretHash]): Future[void] {.async.} = +method withdrawBatch*(g: StaticGroupManager, idSecretHashes: seq[IdentitySecretHash]): + Future[void] {.async: (raises: [Exception]).} = initializedGuard(g) # call withdraw on each idSecretHash @@ -104,15 +105,10 @@ method onRegister*(g: StaticGroupManager, cb: OnRegisterCallback) {.gcsafe.} = method onWithdraw*(g: StaticGroupManager, cb: OnWithdrawCallback) {.gcsafe.} = g.withdrawCb = some(cb) -method stop*(g: StaticGroupManager): Future[void] = +method stop*(g: StaticGroupManager): Future[void] {.async.} = initializedGuard(g) # No-op - var retFut = newFuture[void]("StaticGroupManager.stop") - retFut.complete() - return retFut -method isReady*(g: StaticGroupManager): Future[bool] {.gcsafe.} = +method isReady*(g: StaticGroupManager): Future[bool] {.async.} = initializedGuard(g) - var retFut = newFuture[bool]("StaticGroupManager.isReady") - retFut.complete(true) - return retFut + return true diff --git a/waku/waku_rln_relay/rln_relay.nim b/waku/waku_rln_relay/rln_relay.nim index 72dff801d6..98af3661d5 100644 --- a/waku/waku_rln_relay/rln_relay.nim +++ b/waku/waku_rln_relay/rln_relay.nim @@ -79,7 +79,7 @@ type WakuRLNRelay* = ref object of RootObj lastEpoch*: Epoch # the epoch of the last published rln message groupManager*: GroupManager -method stop*(rlnPeer: WakuRLNRelay) {.async.} = +method stop*(rlnPeer: WakuRLNRelay) {.async: (raises: [Exception]).} = ## stops the rln-relay protocol ## Throws an error if it cannot stop the rln-relay protocol @@ -354,7 +354,7 @@ proc generateRlnValidator*(wakuRlnRelay: WakuRLNRelay, proc mount(conf: WakuRlnConfig, registrationHandler = none(RegistrationHandler) - ): Future[WakuRlnRelay] {.async.} = + ): Future[WakuRlnRelay] {.async: (raises: [Exception]).} = var groupManager: GroupManager # create an RLN instance @@ -393,7 +393,7 @@ proc mount(conf: WakuRlnConfig, return WakuRLNRelay(groupManager: groupManager) -proc isReady*(rlnPeer: WakuRLNRelay): Future[bool] {.async.} = +proc isReady*(rlnPeer: WakuRLNRelay): Future[bool] {.async: (raises: [Exception]).} = ## returns true if the rln-relay protocol is ready to relay messages ## returns false otherwise @@ -416,6 +416,6 @@ proc new*(T: type WakuRlnRelay, try: let rlnRelay = await mount(conf, registrationHandler) return ok(rlnRelay) - except CatchableError as e: - return err(e.msg) + except: + return err("exception in new WakuRlnRelay: " & getCurrentExceptionMsg()) From a0ee3d78fe5092944d067b7d88b32f9945e32dd6 Mon Sep 17 00:00:00 2001 From: Ivan FB <128452529+Ivansete-status@users.noreply.github.com> Date: Thu, 14 Dec 2023 15:37:12 +0100 Subject: [PATCH 159/274] postgres_driver.nim: restrict getMessages prepared stmt to query with 1 content topic (#2296) Before this commit, the following execution of a prepared statement returned nothing even though the database had 2 rows to be returned: nwaku-db-1 | 2023-12-14 12:55:17.575 UTC [73] LOG: execute SelectWithoutCursorAsc: SELECT storedAt, contentTopic, payload, pubsubTopic, version, timestamp, id FROM messages nwaku-db-1 | WHERE contentTopic IN ($1) AND nwaku-db-1 | pubsubTopic = $2 AND nwaku-db-1 | storedAt >= $3 AND nwaku-db-1 | storedAt <= $4 nwaku-db-1 | ORDER BY storedAt ASC LIMIT $5; nwaku-db-1 | 2023-12-14 12:55:17.575 UTC [73] DETAIL: parameters: $1 = 'my/ctopic/1,my/ctopic/2', $2 = '/waku/2/default-waku/proto', $3 = '1702552968570786800', $4 = '1702552968585347557', $5 = '101' The reason why it is not returning anything is that the 'IN' statement doesn't work when using prepared statements with multiple items. It only works when the 'IN' content, i.e. $1, contains one single item. --- waku/waku_archive/driver/postgres_driver/postgres_driver.nim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/waku/waku_archive/driver/postgres_driver/postgres_driver.nim b/waku/waku_archive/driver/postgres_driver/postgres_driver.nim index 351ed1a2be..a2450c6ce5 100644 --- a/waku/waku_archive/driver/postgres_driver/postgres_driver.nim +++ b/waku/waku_archive/driver/postgres_driver/postgres_driver.nim @@ -388,7 +388,7 @@ method getMessages*(s: PostgresDriver, ascendingOrder = true): Future[ArchiveDriverResult[seq[ArchiveRow]]] {.async.} = - if contentTopicSeq.len > 0 and + if contentTopicSeq.len == 1 and pubsubTopic.isSome() and startTime.isSome() and endTime.isSome(): From 0fc617ff69cc91df7582db994c92649720b53830 Mon Sep 17 00:00:00 2001 From: Ivan FB <128452529+Ivansete-status@users.noreply.github.com> Date: Thu, 14 Dec 2023 17:00:13 +0100 Subject: [PATCH 160/274] bug fix: update num-msgs archive metrics every minute and not only at the beginning (#2287) --- waku/node/waku_node.nim | 8 -------- waku/waku_archive/archive.nim | 23 ++++++++++++++++------- 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/waku/node/waku_node.nim b/waku/node/waku_node.nim index 1cc3068565..e50eb94c7c 100644 --- a/waku/node/waku_node.nim +++ b/waku/node/waku_node.nim @@ -751,14 +751,6 @@ proc mountArchive*(node: WakuNode, return err("error in mountArchive: " & wakuArchiveRes.error) node.wakuArchive = wakuArchiveRes.get() - - try: - let reportMetricRes = waitFor node.wakuArchive.reportStoredMessagesMetric() - if reportMetricRes.isErr(): - return err("error in mountArchive: " & reportMetricRes.error) - except CatchableError: - return err("exception in mountArchive: " & getCurrentExceptionMsg()) - asyncSpawn node.wakuArchive.start() return ok() diff --git a/waku/waku_archive/archive.nim b/waku/waku_archive/archive.nim index ed0c21c430..435fb4e2eb 100644 --- a/waku/waku_archive/archive.nim +++ b/waku/waku_archive/archive.nim @@ -69,6 +69,7 @@ type validator: MessageValidator retentionPolicy: RetentionPolicy retPolicyFut: Future[Result[void, string]] ## retention policy cancelable future + retMetricsRepFut: Future[Result[void, string]] ## metrics reporting cancelable future proc new*(T: type WakuArchive, driver: ArchiveDriver, @@ -212,21 +213,29 @@ proc loopApplyRetentionPolicy*(w: WakuArchive): return ok() -proc reportStoredMessagesMetric*(w: WakuArchive): - Future[Result[void, string]] {.async.} = +# Metrics reporting +const WakuArchiveDefaultMetricsReportInterval* = chronos.minutes(1) + +proc loopReportStoredMessagesMetric*(w: WakuArchive): + Future[Result[void, string]] {.async.} = if w.driver.isNil(): - return err("driver is Nil in reportStoredMessagesMetric") + return err("driver is Nil in loopReportStoredMessagesMetric") - let resCount = await w.driver.getMessagesCount() - if resCount.isErr(): - return err("failed to get messages count: " & resCount.error) + while true: + let resCount = await w.driver.getMessagesCount() + if resCount.isErr(): + return err("loopReportStoredMessagesMetric failed to get messages count: " & resCount.error) - waku_archive_messages.set(resCount.value, labelValues = ["stored"]) + waku_archive_messages.set(resCount.value, labelValues = ["stored"]) + await sleepAsync(WakuArchiveDefaultMetricsReportInterval) return ok() proc start*(self: WakuArchive) {.async.} = + ## TODO: better control the Result in case of error. Now it is ignored self.retPolicyFut = self.loopApplyRetentionPolicy() + self.retMetricsRepFut = self.loopReportStoredMessagesMetric() proc stop*(self: WakuArchive) {.async.} = self.retPolicyFut.cancel() + self.retMetricsRepFut.cancel() From 5847f49d3dd7da483bc3e12a51685f22376e9461 Mon Sep 17 00:00:00 2001 From: Alvaro Revuelta Date: Fri, 15 Dec 2023 10:26:17 +0100 Subject: [PATCH 161/274] fix: make rln rate limit spec compliant (#2294) --- .../waku_rln_relay/test_wakunode_rln_relay.nim | 18 +++++++++--------- waku/waku_rln_relay/constants.nim | 2 +- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/tests/waku_rln_relay/test_wakunode_rln_relay.nim b/tests/waku_rln_relay/test_wakunode_rln_relay.nim index 5d43b3e2ae..947bcebff8 100644 --- a/tests/waku_rln_relay/test_wakunode_rln_relay.nim +++ b/tests/waku_rln_relay/test_wakunode_rln_relay.nim @@ -398,7 +398,7 @@ procSuite "WakuNode - RLN relay": await node3.stop() asyncTest "clearNullifierLog: should clear epochs > MaxEpochGap": - + let # publisher node nodeKey1 = generateSecp256k1Key() @@ -445,7 +445,7 @@ procSuite "WakuNode - RLN relay": proofAdded1 = node1.wakuRlnRelay.appendRLNProof(wm1, time) # another message in the same epoch as wm1, it will break the messaging rate limit wm2 = WakuMessage(payload: "message 2".toBytes(), contentTopic: contentTopic) - proofAdded2 = node1.wakuRlnRelay.appendRLNProof(wm2, time + EpochUnitSeconds) + proofAdded2 = node1.wakuRlnRelay.appendRLNProof(wm2, time) # wm3 points to the next epoch wm3 = WakuMessage(payload: "message 3".toBytes(), contentTopic: contentTopic) proofAdded3 = node1.wakuRlnRelay.appendRLNProof(wm3, time + EpochUnitSeconds * 2) @@ -455,7 +455,7 @@ procSuite "WakuNode - RLN relay": proofAdded1 proofAdded2 proofAdded3 - + # relay handler for node2 var completionFut1 = newFuture[bool]() var completionFut2 = newFuture[bool]() @@ -469,25 +469,25 @@ procSuite "WakuNode - RLN relay": completionFut2.complete(true) if msg == wm3: completionFut3.complete(true) - + # mount the relay handler for node2 node2.subscribe((kind: PubsubSub, topic: DefaultPubsubTopic), some(relayHandler)) await sleepAsync(2000.millis) await node1.publish(some(DefaultPubsubTopic), wm1) - await sleepAsync(10.seconds) await node1.publish(some(DefaultPubsubTopic), wm2) - await sleepAsync(10.seconds) await node1.publish(some(DefaultPubsubTopic), wm3) - + let res1 = await completionFut1.withTimeout(10.seconds) res2 = await completionFut2.withTimeout(10.seconds) res3 = await completionFut3.withTimeout(10.seconds) check: - (res1 and res2 and res3) == true # all 3 are valid - node2.wakuRlnRelay.nullifierLog.len() == 1 # after clearing, only 1 is stored + res1 == true + res2 == false + res3 == true + node2.wakuRlnRelay.nullifierLog.len() == 2 await node1.stop() await node2.stop() diff --git a/waku/waku_rln_relay/constants.nim b/waku/waku_rln_relay/constants.nim index 0576f74b53..8994c6df47 100644 --- a/waku/waku_rln_relay/constants.nim +++ b/waku/waku_rln_relay/constants.nim @@ -47,7 +47,7 @@ const # the root is created locally, using createMembershipList proc from waku_rln_relay_utils module, and the result is hardcoded in here StaticGroupMerkleRoot* = "1e534adab58f7d300aaeecae57a25e0a0b18c368a09f720280da92b288950901" -const EpochUnitSeconds* = float64(10) # the rln-relay epoch length in seconds +const EpochUnitSeconds* = float64(1) # the rln-relay epoch length in seconds const MaxClockGapSeconds* = 20.0 # the maximum clock difference between peers in seconds # maximum allowed gap between the epochs of messages' RateLimitProofs From 701cb7032bcf4125fc7b56ed9cef81e17b8d738d Mon Sep 17 00:00:00 2001 From: Ivan FB <128452529+Ivansete-status@users.noreply.github.com> Date: Fri, 15 Dec 2023 13:32:12 +0100 Subject: [PATCH 162/274] libwaku: avoid using waku_init. Only use waku_new to create node and context (#2282) --- examples/cbindings/waku_example.c | 5 ++--- library/libwaku.h | 7 ++----- library/libwaku.nim | 32 +++++++++++++------------------ 3 files changed, 17 insertions(+), 27 deletions(-) diff --git a/examples/cbindings/waku_example.c b/examples/cbindings/waku_example.c index dcb1d74d9e..49942235b6 100644 --- a/examples/cbindings/waku_example.c +++ b/examples/cbindings/waku_example.c @@ -267,8 +267,6 @@ int main(int argc, char** argv) { show_help_and_exit(); } - ctx = waku_init(event_handler, userData); - char jsonConfig[2048]; snprintf(jsonConfig, 2048, "{ \ \"host\": \"%s\", \ @@ -288,13 +286,14 @@ int main(int argc, char** argv) { cfgNode.storeRetentionPolicy, cfgNode.storeMaxNumDbConnections); + ctx = waku_new(jsonConfig, event_handler, userData); + WAKU_CALL( waku_default_pubsub_topic(&ctx, print_default_pubsub_topic, userData) ); WAKU_CALL( waku_version(&ctx, print_waku_version, userData) ); printf("Bind addr: %s:%u\n", cfgNode.host, cfgNode.port); printf("Waku Relay enabled: %s\n", cfgNode.relay == 1 ? "YES": "NO"); - WAKU_CALL( waku_new(&ctx, jsonConfig, event_handler, userData) ); waku_set_event_callback(event_handler, userData); waku_start(&ctx, event_handler, userData); diff --git a/library/libwaku.h b/library/libwaku.h index bbd7f35155..28e65400be 100644 --- a/library/libwaku.h +++ b/library/libwaku.h @@ -17,13 +17,10 @@ extern "C" { typedef void (*WakuCallBack) (int callerRet, const char* msg, size_t len); -// Initializes the waku library and returns a pointer to the Context. -void* waku_init(WakuCallBack callback, - void* userData); - // Creates a new instance of the waku node. // Sets up the waku node from the given configuration. -int waku_new(void* ctx, +// Returns a pointer to the Context needed by the rest of the API functions. +void* waku_new( const char* configJson, WakuCallBack callback, void* userData); diff --git a/library/libwaku.nim b/library/libwaku.nim index 3780073c15..721e4f44e8 100644 --- a/library/libwaku.nim +++ b/library/libwaku.nim @@ -63,8 +63,15 @@ proc relayEventCallback(pubsubTopic: PubsubTopic, ################################################################################ ### Exported procs -proc waku_init(callback: WakuCallback): pointer {.dynlib, exportc, cdecl.} = - ## Initializes the waku library. +proc waku_new(configJson: cstring, + callback: WakuCallback, + userData: pointer): pointer + {.dynlib, exportc, cdecl.} = + ## Creates a new instance of the WakuNode. + + if isNil(callback): + echo "error: missing callback in waku_new" + return nil ## Create the Waku thread that will keep waiting for req from the main thread. var ctx = waku_thread.createWakuThread().valueOr: @@ -72,23 +79,10 @@ proc waku_init(callback: WakuCallback): pointer {.dynlib, exportc, cdecl.} = callback(RET_ERR, unsafeAddr msg[0], cast[csize_t](len(msg))) return nil - return ctx - -proc waku_new(ctx: ptr ptr Context, - configJson: cstring, - callback: WakuCallback, - userData: pointer): cint - {.dynlib, exportc, cdecl.} = - ## Creates a new instance of the WakuNode. - ## Notice that the ConfigNode type is also exported and available for users. - - ctx[][].userData = userData - - if isNil(callback): - return RET_MISSING_CALLBACK + ctx.userData = userData let sendReqRes = waku_thread.sendRequestToWakuThread( - ctx[], + ctx, RequestType.LIFECYCLE, NodeLifecycleRequest.createShared( NodeLifecycleMsgType.CREATE_NODE, @@ -96,9 +90,9 @@ proc waku_new(ctx: ptr ptr Context, if sendReqRes.isErr(): let msg = $sendReqRes.error callback(RET_ERR, unsafeAddr msg[0], cast[csize_t](len(msg))) - return RET_ERR + return nil - return RET_OK + return ctx proc waku_version(ctx: ptr ptr Context, callback: WakuCallBack, From c9d558f878f89319ddf397304a475ddb480305cf Mon Sep 17 00:00:00 2001 From: Ivan FB <128452529+Ivansete-status@users.noreply.github.com> Date: Fri, 15 Dec 2023 13:34:30 +0100 Subject: [PATCH 163/274] relay: add trace logs in case of msg validation rejection (#2285) --- waku/waku_relay/protocol.nim | 1 + waku/waku_rln_relay/rln_relay.nim | 1 + 2 files changed, 2 insertions(+) diff --git a/waku/waku_relay/protocol.nim b/waku/waku_relay/protocol.nim index c99f87a56b..dd58b38c2e 100644 --- a/waku/waku_relay/protocol.nim +++ b/waku/waku_relay/protocol.nim @@ -202,6 +202,7 @@ proc generateOrderedValidator*(w: WakuRelay): auto {.gcsafe.} = # see nim-libp2p protobuf library let msgRes = WakuMessage.decode(message.data) if msgRes.isErr(): + trace "protocol generateOrderedValidator reject decode error", error=msgRes.error return ValidationResult.Reject let msg = msgRes.get() diff --git a/waku/waku_rln_relay/rln_relay.nim b/waku/waku_rln_relay/rln_relay.nim index 98af3661d5..aaa430ffc5 100644 --- a/waku/waku_rln_relay/rln_relay.nim +++ b/waku/waku_rln_relay/rln_relay.nim @@ -322,6 +322,7 @@ proc generateRlnValidator*(wakuRlnRelay: WakuRLNRelay, let decodeRes = RateLimitProof.init(message.proof) if decodeRes.isErr(): + trace "generateRlnValidator reject", error=decodeRes.error return pubsub.ValidationResult.Reject let msgProof = decodeRes.get() From 306c8a62593b5175ac785607bbf70f9cd8cbd3bc Mon Sep 17 00:00:00 2001 From: gabrielmer <101006718+gabrielmer@users.noreply.github.com> Date: Fri, 15 Dec 2023 14:18:12 +0100 Subject: [PATCH 164/274] chore: including content topics on FilterSubscribeRequest logs (#2295) --- waku/waku_filter_v2/rpc.nim | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/waku/waku_filter_v2/rpc.nim b/waku/waku_filter_v2/rpc.nim index 7807651b76..58295699b1 100644 --- a/waku/waku_filter_v2/rpc.nim +++ b/waku/waku_filter_v2/rpc.nim @@ -76,7 +76,8 @@ proc `$`*(err: FilterSubscribeResponse): string = "FilterSubscribeResponse of req:" & err.requestId & " [" & $err.statusCode & "] " & $err.statusDesc proc `$`*(req: FilterSubscribeRequest): string = - "FilterSubscribeRequest of req:" & req.requestId & " [" & $req.filterSubscribeType & "] " & $req.pubsubTopic + "FilterSubscribeRequest of req:" & req.requestId & " [" & $req.filterSubscribeType & + "] pubsubTopic:" & $req.pubsubTopic & " contentTopics:" & $req.contentTopics proc `$`*(t: FilterSubscribeType): string = result = case t: From 574cdf555adcdfc77291902d413bb8884bc0c925 Mon Sep 17 00:00:00 2001 From: Ivan FB <128452529+Ivansete-status@users.noreply.github.com> Date: Fri, 15 Dec 2023 18:58:35 +0100 Subject: [PATCH 165/274] chore: archive - move error to trace level when insert row fails (#2283) * archive: move error to trace level when insert row fails That is helpful to prevent the node to spam the logs when it shares connection to the same Postgres database with other nodes, in which case the following log appears too much: topics="waku archive" tid=1 file=archive.nim:113 err="error in runStmt: error in dbConnQueryPrepared calling waitQueryToFinish: error in query: ERROR: duplicate key value violates unique constraint "messageindex" DETAIL: Key (messagehash)=(88f4ee115eef6f233a7dceaf975f03946e18666adda877e38d61be98add934e8) already exists. " --- waku/waku_archive/archive.nim | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/waku/waku_archive/archive.nim b/waku/waku_archive/archive.nim index 435fb4e2eb..db642e3835 100644 --- a/waku/waku_archive/archive.nim +++ b/waku/waku_archive/archive.nim @@ -112,7 +112,10 @@ proc handleMessage*(w: WakuArchive, let putRes = await w.driver.put(pubsubTopic, msg, msgDigest, msgHash, msgReceivedTime) if putRes.isErr(): - error "failed to insert message", err=putRes.error + if "duplicate key value violates unique constraint" in putRes.error: + trace "failed to insert message", err=putRes.error + else: + debug "failed to insert message", err=putRes.error waku_archive_errors.inc(labelValues = [insertFailure]) let insertDuration = getTime().toUnixFloat() - insertStartTime From d01904e749b9e2ecf709b495a35171471d9c9543 Mon Sep 17 00:00:00 2001 From: Ivan FB <128452529+Ivansete-status@users.noreply.github.com> Date: Mon, 18 Dec 2023 23:16:54 +0100 Subject: [PATCH 166/274] chore: examples/nodejs - adapt code to latest callback and ctx/userData definitions (#2281) --- examples/nodejs/waku.js | 5 ++++- examples/nodejs/waku_addon.c | 42 ++++++++++++++++++++++-------------- 2 files changed, 30 insertions(+), 17 deletions(-) diff --git a/examples/nodejs/waku.js b/examples/nodejs/waku.js index 49100eca65..87d01378c5 100644 --- a/examples/nodejs/waku.js +++ b/examples/nodejs/waku.js @@ -27,15 +27,18 @@ function event_handler(event) { console.log("evento NodeJs: " + event) } +wakuMod.wakuNew(cfg) + wakuMod.wakuVersion(function(msg){ console.log("Waku Version: " + msg) }) // Example on how to retrieve a value from the waku library var defaultPubsubTopic = "" wakuMod.wakuDefaultPubsubTopic(function(msg){ defaultPubsubTopic = msg }) +console.log("Default pubsub topic: " + defaultPubsubTopic) + console.log("Setting callback event callback function") wakuMod.wakuSetEventCallback(event_handler) -wakuMod.wakuNew(cfg) wakuMod.wakuStart() diff --git a/examples/nodejs/waku_addon.c b/examples/nodejs/waku_addon.c index e2ea49c27d..07b4e6bae2 100644 --- a/examples/nodejs/waku_addon.c +++ b/examples/nodejs/waku_addon.c @@ -34,6 +34,12 @@ do { \ } \ } while (0) +// libwaku Context +void* ctx; + +// For the case of C language we don't need to store a particular userData +void* userData = NULL; + static napi_env my_env; // This function is responsible for converting data coming in from the worker @@ -80,7 +86,7 @@ static void CallJs(napi_env env, napi_value js_cb, void* context, void* data) { free(data); } -void handle_waku_version(const char* msg, size_t len) { +void handle_waku_version(int callerRet, const char* msg, size_t len) { if (ref_version_callback == NULL) { napi_throw_type_error(my_env, NULL, "ERROR in event_handler. ref_version_callback == NULL"); } @@ -106,7 +112,7 @@ void handle_waku_version(const char* msg, size_t len) { // This function is directly passed as a callback to the libwaku and it // calls a NodeJs function if it has been set. -void event_handler(const char* msg, size_t len) { +void event_handler(int callerRet, const char* msg, size_t len) { if (thsafe_fn == NULL) { // if (ref_event_callback == NULL) { napi_throw_type_error(my_env, NULL, "ERROR in event_handler. ref_event_callback == NULL"); @@ -118,7 +124,7 @@ void event_handler(const char* msg, size_t len) { NAPI_CALL(napi_call_threadsafe_function(thsafe_fn, allocated_msg, napi_tsfn_nonblocking)); } -void handle_error(const char* msg, size_t len) { +void handle_error(int callerRet, const char* msg, size_t len) { if (ref_on_error_callback == NULL) { napi_throw_type_error(my_env, NULL, "ERROR in event_handler. ref_on_error_callback == NULL"); } @@ -139,7 +145,7 @@ void handle_error(const char* msg, size_t len) { } char* contentTopic = NULL; -void handle_content_topic(const char* msg, size_t len) { +void handle_content_topic(int callerRet, const char* msg, size_t len) { if (contentTopic != NULL) { free(contentTopic); } @@ -148,7 +154,7 @@ void handle_content_topic(const char* msg, size_t len) { strcpy(contentTopic, msg); } -void handle_default_pubsub_topic(const char* msg, size_t len) { +void handle_default_pubsub_topic(int callerRet, const char* msg, size_t len) { if (ref_def_pubsub_topic_callback == NULL) { napi_throw_type_error(my_env, NULL, "ERROR in event_handler. ref_def_pubsub_topic_callback == NULL"); @@ -194,7 +200,7 @@ static napi_value WakuNew(napi_env env, napi_callback_info info) { str_size = str_size + 1; napi_get_value_string_utf8(env, args[0], jsonConfig, str_size, &str_size_read); - WAKU_CALL( waku_new(jsonConfig, event_handler) ); + ctx = waku_new(jsonConfig, event_handler, userData); free(jsonConfig); @@ -228,7 +234,7 @@ static napi_value WakuVersion(napi_env env, napi_callback_info info) { NAPI_CALL(napi_create_reference(env, cb, 1, &ref_version_callback)); - WAKU_CALL( waku_version( handle_waku_version ) ); + WAKU_CALL( waku_version(&ctx, handle_waku_version, userData) ); return NULL; } @@ -278,13 +284,13 @@ static napi_value WakuSetEventCallback(napi_env env, napi_callback_info info) { // Inside 'event_handler', the event will be dispatched to the NodeJs // if there is a proper napi_function (ref_event_callback) being set. - waku_set_event_callback(event_handler); + waku_set_event_callback(event_handler, userData); return NULL; } static napi_value WakuStart(napi_env env, napi_callback_info info) { - waku_start(); + waku_start(&ctx, event_handler, userData); return NULL; } @@ -341,7 +347,7 @@ static napi_value WakuConnect(napi_env env, napi_callback_info info) { my_env = env; NAPI_CALL(napi_create_reference(env, cb, 1, &ref_on_error_callback)); - WAKU_CALL(waku_connect(peers, timeoutMs, handle_error)); + WAKU_CALL(waku_connect(&ctx, peers, timeoutMs, handle_error, userData)); // Free allocated memory free(peers); @@ -412,11 +418,13 @@ static napi_value WakuRelayPublish(napi_env env, napi_callback_info info) { char *msgPayload = b64_encode((unsigned char*) msg, strlen(msg)); // TODO: move all the 'waku_content_topic' logic inside the libwaku - WAKU_CALL( waku_content_topic("appName", + WAKU_CALL( waku_content_topic(&ctx, + "appName", 1, content_topic_name, "encoding", - handle_content_topic) ); + handle_content_topic, + userData) ); snprintf(jsonWakuMsg, 1024, "{\"payload\":\"%s\",\"content_topic\":\"%s\"}", @@ -449,10 +457,12 @@ static napi_value WakuRelayPublish(napi_env env, napi_callback_info info) { NAPI_CALL(napi_create_reference(env, cb, 1, &ref_on_error_callback)); // Perform the actual 'publish' - WAKU_CALL( waku_relay_publish(pubsub_topic, + WAKU_CALL( waku_relay_publish(&ctx, + pubsub_topic, jsonWakuMsg, timeoutMs, - handle_error) ); + handle_error, + userData) ); free(pubsub_topic); free(content_topic_name); @@ -486,7 +496,7 @@ static napi_value WakuDefaultPubsubTopic(napi_env env, napi_callback_info info) NAPI_CALL(napi_create_reference(env, cb, 1, &ref_def_pubsub_topic_callback)); - WAKU_CALL( waku_default_pubsub_topic(handle_default_pubsub_topic) ); + WAKU_CALL( waku_default_pubsub_topic(&ctx, handle_default_pubsub_topic, userData) ); return NULL; } @@ -533,7 +543,7 @@ static napi_value WakuRelaySubscribe(napi_env env, napi_callback_info info) { NAPI_CALL(napi_create_reference(env, cb, 1, &ref_on_error_callback)); // Calling the actual 'subscribe' waku function - WAKU_CALL( waku_relay_subscribe(pubsub_topic, handle_error) ); + WAKU_CALL( waku_relay_subscribe(&ctx, pubsub_topic, handle_error, userData) ); free(pubsub_topic); From 8b37919ee0a851cf2f6aba2e4663c48b7df6f119 Mon Sep 17 00:00:00 2001 From: Ivan FB <128452529+Ivansete-status@users.noreply.github.com> Date: Tue, 19 Dec 2023 10:41:50 +0100 Subject: [PATCH 167/274] test_driver_postgres: enhance test coverage, multiple and single topic (#2301) Co-authored-by: Abhimanyu --- .../test_driver_postgres_query.nim | 28 +++++++++++++++---- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/tests/waku_archive/test_driver_postgres_query.nim b/tests/waku_archive/test_driver_postgres_query.nim index f93c7be483..2de13f079a 100644 --- a/tests/waku_archive/test_driver_postgres_query.nim +++ b/tests/waku_archive/test_driver_postgres_query.nim @@ -201,18 +201,36 @@ suite "Postgres driver - query by content topic": require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), computeMessageHash(DefaultPubsubTopic, msg), msg.timestamp)).isOk() ## When - let res = await driver.getMessages( + var res = await driver.getMessages( contentTopic= @[contentTopic1, contentTopic2], + pubsubTopic=some(DefaultPubsubTopic), maxPageSize=2, - ascendingOrder=true + ascendingOrder=true, + startTime=some(ts(00)), + endTime=some(ts(40)) ) ## Then assert res.isOk(), res.error + var filteredMessages = res.tryGet().mapIt(it[1]) + check filteredMessages == expected[2..3] - let filteredMessages = res.tryGet().mapIt(it[1]) - check: - filteredMessages == expected[2..3] + ## When + ## This is very similar to the previous one but we enforce to use the prepared + ## statement by querying one single content topic + res = await driver.getMessages( + contentTopic= @[contentTopic1], + pubsubTopic=some(DefaultPubsubTopic), + maxPageSize=2, + ascendingOrder=true, + startTime=some(ts(00)), + endTime=some(ts(40)) + ) + + ## Then + assert res.isOk(), res.error + filteredMessages = res.tryGet().mapIt(it[1]) + check filteredMessages == @[expected[2]] ## Cleanup (await driver.close()).expect("driver to close") From fae20bff20738397dd7327e56aabfb6036cf19b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lex=20Cabeza=20Romero?= Date: Tue, 19 Dec 2023 15:10:27 +0100 Subject: [PATCH 168/274] refactor(store): HistoryQuery.direction (#2263) * Fix issue with default history query ascending value in serde operations: Should use the same value. * Update direction types to PagingDirection. --- tests/waku_archive/test_waku_archive.nim | 7 +++-- tests/waku_store/test_rpc_codec.nim | 7 +++-- tests/waku_store/test_waku_store.nim | 5 ++-- tests/waku_store/test_wakunode_store.nim | 5 ++-- waku/common/paging.nim | 35 ++++++++++++++++++++++++ waku/node/waku_node.nim | 2 +- waku/waku_api/jsonrpc/store/handlers.nim | 19 +++++++------ waku/waku_api/rest/store/handlers.nim | 11 ++++---- waku/waku_api/rest/store/openapi.yaml | 3 +- waku/waku_archive/archive.nim | 13 +++++---- waku/waku_archive/common.nim | 5 ++-- waku/waku_store/client.nim | 2 +- waku/waku_store/common.nim | 5 ++-- waku/waku_store/rpc.nim | 22 +++++++-------- waku/waku_store/rpc_codec.nim | 8 +++--- 15 files changed, 97 insertions(+), 52 deletions(-) create mode 100644 waku/common/paging.nim diff --git a/tests/waku_archive/test_waku_archive.nim b/tests/waku_archive/test_waku_archive.nim index fca4f467d9..bd445839d1 100644 --- a/tests/waku_archive/test_waku_archive.nim +++ b/tests/waku_archive/test_waku_archive.nim @@ -9,6 +9,7 @@ import import ../../../waku/common/databases/db_sqlite, + ../../../waku/common/paging, ../../../waku/waku_core, ../../../waku/waku_core/message/digest, ../../../waku/waku_archive/driver/sqlite_driver, @@ -341,7 +342,7 @@ procSuite "Waku Archive - find messages": ## Given let req = ArchiveQuery( pageSize: 4, - ascending: true + direction: PagingDirection.FORWARD ) ## When @@ -377,7 +378,7 @@ procSuite "Waku Archive - find messages": ## Given let req = ArchiveQuery( pageSize: 4, - ascending: false # backward + direction: PagingDirection.BACKWARD ) ## When @@ -454,7 +455,7 @@ procSuite "Waku Archive - find messages": contentTopics: @[ContentTopic("1")], startTime: some(ts(15, timeOrigin)), endTime: some(ts(55, timeOrigin)), - ascending: true + direction: PagingDirection.FORWARD ) ## When diff --git a/tests/waku_store/test_rpc_codec.nim b/tests/waku_store/test_rpc_codec.nim index f8582ab5be..c063542974 100644 --- a/tests/waku_store/test_rpc_codec.nim +++ b/tests/waku_store/test_rpc_codec.nim @@ -6,6 +6,7 @@ import chronos import ../../../waku/common/protobuf, + ../../../waku/common/paging, ../../../waku/waku_core, ../../../waku/waku_store/rpc, ../../../waku/waku_store/rpc_codec, @@ -53,7 +54,7 @@ procSuite "Waku Store - RPC codec": ## Given let index = PagingIndexRPC.compute(fakeWakuMessage(), receivedTime=ts(), pubsubTopic=DefaultPubsubTopic) - pagingInfo = PagingInfoRPC(pageSize: some(1'u64), cursor: some(index), direction: some(PagingDirectionRPC.FORWARD)) + pagingInfo = PagingInfoRPC(pageSize: some(1'u64), cursor: some(index), direction: some(PagingDirection.FORWARD)) ## When let pb = pagingInfo.encode() @@ -88,7 +89,7 @@ procSuite "Waku Store - RPC codec": ## Given let index = PagingIndexRPC.compute(fakeWakuMessage(), receivedTime=ts(), pubsubTopic=DefaultPubsubTopic) - pagingInfo = PagingInfoRPC(pageSize: some(1'u64), cursor: some(index), direction: some(PagingDirectionRPC.BACKWARD)) + pagingInfo = PagingInfoRPC(pageSize: some(1'u64), cursor: some(index), direction: some(PagingDirection.BACKWARD)) query = HistoryQueryRPC( contentFilters: @[HistoryContentFilterRPC(contentTopic: DefaultContentTopic), HistoryContentFilterRPC(contentTopic: DefaultContentTopic)], pagingInfo: some(pagingInfo), @@ -129,7 +130,7 @@ procSuite "Waku Store - RPC codec": let message = fakeWakuMessage() index = PagingIndexRPC.compute(message, receivedTime=ts(), pubsubTopic=DefaultPubsubTopic) - pagingInfo = PagingInfoRPC(pageSize: some(1'u64), cursor: some(index), direction: some(PagingDirectionRPC.BACKWARD)) + pagingInfo = PagingInfoRPC(pageSize: some(1'u64), cursor: some(index), direction: some(PagingDirection.BACKWARD)) res = HistoryResponseRPC(messages: @[message], pagingInfo: some(pagingInfo), error: HistoryResponseErrorRPC.INVALID_CURSOR) ## When diff --git a/tests/waku_store/test_waku_store.nim b/tests/waku_store/test_waku_store.nim index b854416d16..0436ba6a49 100644 --- a/tests/waku_store/test_waku_store.nim +++ b/tests/waku_store/test_waku_store.nim @@ -9,6 +9,7 @@ import import ../../../waku/[ + common/paging, node/peer_manager, waku_core, waku_store, @@ -46,7 +47,7 @@ suite "Waku Store - query handler": server = await newTestWakuStore(serverSwitch, handler=queryhandler) client = newTestWakuStoreClient(clientSwitch) - let req = HistoryQuery(contentTopics: @[DefaultContentTopic], ascending: true) + let req = HistoryQuery(contentTopics: @[DefaultContentTopic], direction: PagingDirection.FORWARD) ## When let queryRes = await client.query(req, peer=serverPeerInfo) @@ -88,7 +89,7 @@ suite "Waku Store - query handler": server = await newTestWakuStore(serverSwitch, handler=queryhandler) client = newTestWakuStoreClient(clientSwitch) - let req = HistoryQuery(contentTopics: @[DefaultContentTopic], ascending: true) + let req = HistoryQuery(contentTopics: @[DefaultContentTopic], direction: PagingDirection.FORWARD) ## When let queryRes = await client.query(req, peer=serverPeerInfo) diff --git a/tests/waku_store/test_wakunode_store.nim b/tests/waku_store/test_wakunode_store.nim index 7ac30bdb0d..6c52d853c4 100644 --- a/tests/waku_store/test_wakunode_store.nim +++ b/tests/waku_store/test_wakunode_store.nim @@ -14,6 +14,7 @@ import libp2p/protocols/pubsub/gossipsub import ../../../waku/common/databases/db_sqlite, + ../../../waku/common/paging, ../../../waku/waku_core, ../../../waku/waku_core/message/digest, ../../../waku/node/peer_manager, @@ -107,7 +108,7 @@ procSuite "WakuNode - Store": client.mountStoreClient() ## Given - let req = HistoryQuery(contentTopics: @[DefaultContentTopic], pageSize: 7, ascending: true) + let req = HistoryQuery(contentTopics: @[DefaultContentTopic], pageSize: 7, direction: PagingDirection.FORWARD) let serverPeer = server.peerInfo.toRemotePeerInfo() ## When @@ -158,7 +159,7 @@ procSuite "WakuNode - Store": client.mountStoreClient() ## Given - let req = HistoryQuery(contentTopics: @[DefaultContentTopic], pageSize: 7, ascending: false) + let req = HistoryQuery(contentTopics: @[DefaultContentTopic], pageSize: 7, direction: PagingDirection.BACKWARD) let serverPeer = server.peerInfo.toRemotePeerInfo() ## When diff --git a/waku/common/paging.nim b/waku/common/paging.nim new file mode 100644 index 0000000000..287ee63a88 --- /dev/null +++ b/waku/common/paging.nim @@ -0,0 +1,35 @@ +import std/options + +type + PagingDirection* {.pure.} = enum + ## PagingDirection determines the direction of pagination + BACKWARD = uint32(0) + FORWARD = uint32(1) + + +proc default*(): PagingDirection {.inline.} = + PagingDirection.FORWARD + + +proc into*(b: bool): PagingDirection = + PagingDirection(b) + + +proc into*(b: Option[bool]): PagingDirection = + if b.isNone(): + return default() + b.get().into() + + +proc into*(d: PagingDirection): bool = + d == PagingDirection.FORWARD + + +proc into*(d: Option[PagingDirection]): bool = + if d.isNone(): + return false + d.get().into() + + +proc into*(s: string): PagingDirection = + (s == "true").into() diff --git a/waku/node/waku_node.nim b/waku/node/waku_node.nim index e50eb94c7c..96e28c0516 100644 --- a/waku/node/waku_node.nim +++ b/waku/node/waku_node.nim @@ -765,7 +765,7 @@ proc toArchiveQuery(request: HistoryQuery): ArchiveQuery = startTime: request.startTime, endTime: request.endTime, pageSize: request.pageSize.uint, - ascending: request.ascending + direction: request.direction ) # TODO: Review this mapping logic. Maybe, move it to the appplication code diff --git a/waku/waku_api/jsonrpc/store/handlers.nim b/waku/waku_api/jsonrpc/store/handlers.nim index fa0897f533..db53a79fc8 100644 --- a/waku/waku_api/jsonrpc/store/handlers.nim +++ b/waku/waku_api/jsonrpc/store/handlers.nim @@ -8,11 +8,14 @@ import chronicles, json_rpc/rpcserver import - ../../../waku_core, - ../../../waku_store, + ../../../[ + waku_core, + waku_store, + waku_node + ], ../../../waku_store/rpc, - ../../../waku_node, ../../../node/peer_manager, + ../../../common/paging, ./types @@ -27,16 +30,14 @@ proc toPagingInfo*(pagingOptions: StorePagingOptions): PagingInfoRPC = PagingInfoRPC( pageSize: some(pagingOptions.pageSize), cursor: pagingOptions.cursor, - direction: if pagingOptions.forward: some(PagingDirectionRPC.FORWARD) - else: some(PagingDirectionRPC.BACKWARD) + direction: some(pagingOptions.forward.into()) ) proc toPagingOptions*(pagingInfo: PagingInfoRPC): StorePagingOptions = StorePagingOptions( pageSize: pagingInfo.pageSize.get(0'u64), cursor: pagingInfo.cursor, - forward: if pagingInfo.direction.isNone(): true - else: pagingInfo.direction.get() == PagingDirectionRPC.FORWARD + forward: pagingInfo.direction.into() ) proc toJsonRPCStoreResponse*(response: HistoryResponse): StoreResponse = @@ -65,8 +66,8 @@ proc installStoreApiHandlers*(node: WakuNode, server: RpcServer) = contentTopics: contentFiltersOption.get(@[]).mapIt(it.contentTopic), startTime: startTime, endTime: endTime, - ascending: if pagingOptions.isNone(): true - else: pagingOptions.get().forward, + direction: if pagingOptions.isNone(): default() + else: pagingOptions.get().forward.into(), pageSize: if pagingOptions.isNone(): DefaultPageSize else: min(pagingOptions.get().pageSize, MaxPageSize), cursor: if pagingOptions.isNone(): none(HistoryCursor) diff --git a/waku/waku_api/rest/store/handlers.nim b/waku/waku_api/rest/store/handlers.nim index de1ae34c13..57bcdaf613 100644 --- a/waku/waku_api/rest/store/handlers.nim +++ b/waku/waku_api/rest/store/handlers.nim @@ -15,6 +15,7 @@ import ../../../waku_store/common, ../../../waku_node, ../../../node/peer_manager, + ../../../common/paging, ../../handlers, ../responses, ../serdes, @@ -123,7 +124,7 @@ proc createHistoryQuery(pubsubTopic: Option[string], startTime: Option[string], endTime: Option[string], pageSize: Option[string], - ascending: Option[string]): + direction: Option[string]): Result[HistoryQuery, string] = @@ -164,16 +165,16 @@ proc createHistoryQuery(pubsubTopic: Option[string], let parsedEndTime = ? parseTime(endTime) # Parse ascending field - var parsedAscending = true - if ascending.isSome() and ascending.get() != "": - parsedAscending = ascending.get() == "true" + var parsedDirection = default() + if direction.isSome() and direction.get() != "": + parsedDirection = direction.get().into() return ok( HistoryQuery(pubsubTopic: parsedPubsubTopic, contentTopics: parsedContentTopics, startTime: parsedStartTime, endTime: parsedEndTime, - ascending: parsedAscending, + direction: parsedDirection, pageSize: parsedPagedSize, cursor: parsedCursor )) diff --git a/waku/waku_api/rest/store/openapi.yaml b/waku/waku_api/rest/store/openapi.yaml index cbd653ca39..fdd552e192 100644 --- a/waku/waku_api/rest/store/openapi.yaml +++ b/waku/waku_api/rest/store/openapi.yaml @@ -124,7 +124,8 @@ paths: schema: type: string description: > - "true" for paging forward, "false" for paging backward + "true" for paging forward, "false" for paging backward. + If not specified or if specified with an invalid value, the default is "true". example: "true" responses: diff --git a/waku/waku_archive/archive.nim b/waku/waku_archive/archive.nim index db642e3835..0e16b1d3cf 100644 --- a/waku/waku_archive/archive.nim +++ b/waku/waku_archive/archive.nim @@ -11,8 +11,11 @@ import regex, metrics import - ../common/databases/dburl, - ../common/databases/db_sqlite, + ../common/[ + databases/dburl, + databases/db_sqlite, + paging + ], ./driver, ./retention_policy, ./retention_policy/retention_policy_capacity, @@ -131,7 +134,7 @@ proc findMessages*(w: WakuArchive, query: ArchiveQuery): Future[ArchiveResult] { qEndTime = query.endTime qMaxPageSize = if query.pageSize <= 0: DefaultPageSize else: min(query.pageSize, MaxPageSize) - qAscendingOrder = query.ascending + isAscendingOrder = query.direction.into() if qContentTopics.len > 10: return err(ArchiveError.invalidQuery("too many content topics")) @@ -145,7 +148,7 @@ proc findMessages*(w: WakuArchive, query: ArchiveQuery): Future[ArchiveResult] { startTime = qStartTime, endTime = qEndTime, maxPageSize = qMaxPageSize + 1, - ascendingOrder = qAscendingOrder + ascendingOrder = isAscendingOrder ) let queryDuration = getTime().toUnixFloat() - queryStartTime @@ -188,7 +191,7 @@ proc findMessages*(w: WakuArchive, query: ArchiveQuery): Future[ArchiveResult] { )) # All messages MUST be returned in chronological order - if not qAscendingOrder: + if not isAscendingOrder: reverse(messages) return ok(ArchiveResponse(messages: messages, cursor: cursor)) diff --git a/waku/waku_archive/common.nim b/waku/waku_archive/common.nim index 29d2bfd220..78ae5b87f0 100644 --- a/waku/waku_archive/common.nim +++ b/waku/waku_archive/common.nim @@ -9,7 +9,8 @@ import stew/byteutils, nimcrypto/sha2 import - ../waku_core + ../waku_core, + ../common/paging ## Waku message digest @@ -54,7 +55,7 @@ type startTime*: Option[Timestamp] endTime*: Option[Timestamp] pageSize*: uint - ascending*: bool + direction*: PagingDirection ArchiveResponse* = object messages*: seq[WakuMessage] diff --git a/waku/waku_store/client.nim b/waku/waku_store/client.nim index 735c01cf57..792f258480 100644 --- a/waku/waku_store/client.nim +++ b/waku/waku_store/client.nim @@ -199,7 +199,7 @@ when defined(waku_exp_store_resume): startTime: some(queryStartTime), endTime: some(queryEndTime), pageSize: uint64(pageSize), - ascending: true + direction: default() ) var res: WakuStoreResult[seq[WakuMessage]] diff --git a/waku/waku_store/common.nim b/waku/waku_store/common.nim index 7d06bf4cfe..6302e64780 100644 --- a/waku/waku_store/common.nim +++ b/waku/waku_store/common.nim @@ -9,7 +9,8 @@ import stew/byteutils, nimcrypto/sha2 import - ../waku_core + ../waku_core, + ../common/paging const @@ -55,7 +56,7 @@ type startTime*: Option[Timestamp] endTime*: Option[Timestamp] pageSize*: uint64 - ascending*: bool + direction*: PagingDirection HistoryResponse* = object messages*: seq[WakuMessage] diff --git a/waku/waku_store/rpc.nim b/waku/waku_store/rpc.nim index c0b105c7b8..dadd9140d8 100644 --- a/waku/waku_store/rpc.nim +++ b/waku/waku_store/rpc.nim @@ -8,11 +8,14 @@ import stew/results import ../waku_core, + ../common/paging, ./common ## Wire protocol +const HistoryQueryDirectionDefaultValue = default(type HistoryQuery.direction) + type PagingIndexRPC* = object ## This type contains the description of an Index used in the pagination of WakuMessages pubsubTopic*: PubsubTopic @@ -41,16 +44,11 @@ proc compute*(T: type PagingIndexRPC, msg: WakuMessage, receivedTime: Timestamp, type - PagingDirectionRPC* {.pure.} = enum - ## PagingDirection determines the direction of pagination - BACKWARD = uint32(0) - FORWARD = uint32(1) - PagingInfoRPC* = object ## This type holds the information needed for the pagination pageSize*: Option[uint64] cursor*: Option[PagingIndexRPC] - direction*: Option[PagingDirectionRPC] + direction*: Option[PagingDirection] type @@ -120,14 +118,14 @@ proc toRPC*(query: HistoryQuery): HistoryQueryRPC = rpc.pagingInfo = block: if query.cursor.isNone() and query.pageSize == default(type query.pageSize) and - query.ascending == default(type query.ascending): + query.direction == HistoryQueryDirectionDefaultValue: none(PagingInfoRPC) else: let pageSize = some(query.pageSize) cursor = query.cursor.map(toRPC) - direction = if query.ascending: some(PagingDirectionRPC.FORWARD) - else: some(PagingDirectionRPC.BACKWARD) + direction = some(query.direction) + some(PagingInfoRPC( pageSize: pageSize, cursor: cursor, @@ -156,8 +154,8 @@ proc toAPI*(rpc: HistoryQueryRPC): HistoryQuery = pageSize = if rpc.pagingInfo.isNone() or rpc.pagingInfo.get().pageSize.isNone(): 0'u64 else: rpc.pagingInfo.get().pageSize.get() - ascending = if rpc.pagingInfo.isNone() or rpc.pagingInfo.get().direction.isNone(): true - else: rpc.pagingInfo.get().direction.get() == PagingDirectionRPC.FORWARD + direction = if rpc.pagingInfo.isNone() or rpc.pagingInfo.get().direction.isNone(): HistoryQueryDirectionDefaultValue + else: rpc.pagingInfo.get().direction.get() HistoryQuery( pubsubTopic: pubsubTopic, @@ -166,7 +164,7 @@ proc toAPI*(rpc: HistoryQueryRPC): HistoryQuery = startTime: startTime, endTime: endTime, pageSize: pageSize, - ascending: ascending + direction: direction ) diff --git a/waku/waku_store/rpc_codec.nim b/waku/waku_store/rpc_codec.nim index 3223fb7ec7..5d44b3ba98 100644 --- a/waku/waku_store/rpc_codec.nim +++ b/waku/waku_store/rpc_codec.nim @@ -7,7 +7,7 @@ import std/options, nimcrypto/hash import - ../common/protobuf, + ../common/[protobuf, paging], ../waku_core, ./common, ./rpc @@ -74,7 +74,7 @@ proc encode*(rpc: PagingInfoRPC): ProtoBuffer = pb.write3(1, rpc.pageSize) pb.write3(2, rpc.cursor.map(encode)) - pb.write3(3, rpc.direction.map(proc(d: PagingDirectionRPC): uint32 = uint32(ord(d)))) + pb.write3(3, rpc.direction.map(proc(d: PagingDirection): uint32 = uint32(ord(d)))) pb.finish3() pb @@ -99,9 +99,9 @@ proc decode*(T: type PagingInfoRPC, buffer: seq[byte]): ProtobufResult[T] = var direction: uint32 if not ?pb.getField(3, direction): - rpc.direction = none(PagingDirectionRPC) + rpc.direction = none(PagingDirection) else: - rpc.direction = some(PagingDirectionRPC(direction)) + rpc.direction = some(PagingDirection(direction)) ok(rpc) From 86353e22a871820c132deee077f65e7af4356671 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lex=20Cabeza=20Romero?= Date: Tue, 19 Dec 2023 15:38:43 +0100 Subject: [PATCH 169/274] test(store): Implement store tests (#2235, 2240) * Implement store tests --- tests/node/test_wakunode_store.nim | 1164 ++++++++++++++++++++++++++ tests/testlib/futures.nim | 9 +- tests/waku_archive/archive_utils.nim | 14 +- tests/waku_store/test_client.nim | 208 +++++ 4 files changed, 1387 insertions(+), 8 deletions(-) create mode 100644 tests/node/test_wakunode_store.nim create mode 100644 tests/waku_store/test_client.nim diff --git a/tests/node/test_wakunode_store.nim b/tests/node/test_wakunode_store.nim new file mode 100644 index 0000000000..d0e44634cc --- /dev/null +++ b/tests/node/test_wakunode_store.nim @@ -0,0 +1,1164 @@ +{.used.} + +import + std/options, + stew/shims/net as stewNet, + testutils/unittests, + chronos, + libp2p/crypto/crypto + +import + ../../../waku/[ + node/waku_node, + node/peer_manager, + waku_core, + waku_store, + waku_store/client, + waku_archive, + waku_archive/driver/sqlite_driver, + common/databases/db_sqlite + ], + ../waku_store/store_utils, + ../waku_archive/archive_utils, + ../testlib/[ + common, + wakucore, + wakunode, + testasync, + futures, + testutils + ] + + +suite "Waku Store - End to End - Sorted Archive": + var pubsubTopic {.threadvar.}: PubsubTopic + var contentTopic {.threadvar.}: ContentTopic + var contentTopicSeq {.threadvar.}: seq[ContentTopic] + + var archiveMessages {.threadvar.}: seq[WakuMessage] + var historyQuery {.threadvar.}: HistoryQuery + + var server {.threadvar.}: WakuNode + var client {.threadvar.}: WakuNode + + var archiveDriver {.threadvar.}: ArchiveDriver + var serverRemotePeerInfo {.threadvar.}: RemotePeerInfo + var clientPeerId {.threadvar.}: PeerId + + asyncSetup: + pubsubTopic = DefaultPubsubTopic + contentTopic = DefaultContentTopic + contentTopicSeq = @[contentTopic] + + let timeOrigin = now() + archiveMessages = @[ + fakeWakuMessage(@[byte 00], ts=ts(00, timeOrigin)), + fakeWakuMessage(@[byte 01], ts=ts(10, timeOrigin)), + fakeWakuMessage(@[byte 02], ts=ts(20, timeOrigin)), + fakeWakuMessage(@[byte 03], ts=ts(30, timeOrigin)), + fakeWakuMessage(@[byte 04], ts=ts(40, timeOrigin)), + fakeWakuMessage(@[byte 05], ts=ts(50, timeOrigin)), + fakeWakuMessage(@[byte 06], ts=ts(60, timeOrigin)), + fakeWakuMessage(@[byte 07], ts=ts(70, timeOrigin)), + fakeWakuMessage(@[byte 08], ts=ts(80, timeOrigin)), + fakeWakuMessage(@[byte 09], ts=ts(90, timeOrigin)) + ] + + historyQuery = HistoryQuery( + pubsubTopic: some(pubsubTopic), + contentTopics: contentTopicSeq, + direction: true, + pageSize: 5 + ) + + let + serverKey = generateSecp256k1Key() + clientKey = generateSecp256k1Key() + + server = newTestWakuNode(serverKey, ValidIpAddress.init("0.0.0.0"), Port(0)) + client = newTestWakuNode(clientKey, ValidIpAddress.init("0.0.0.0"), Port(0)) + + archiveDriver = newArchiveDriverWithMessages(pubsubTopic, archiveMessages) + let mountArchiveResult = server.mountArchive(archiveDriver) + assert mountArchiveResult.isOk() + + waitFor server.mountStore() + client.mountStoreClient() + + waitFor allFutures(server.start(), client.start()) + + serverRemotePeerInfo = server.peerInfo.toRemotePeerInfo() + clientPeerId = client.peerInfo.toRemotePeerInfo().peerId + + asyncTeardown: + waitFor allFutures(client.stop(), server.stop()) + + suite "Message Pagination": + asyncTest "Forward Pagination": + # When making a history query + let queryResponse = await client.query(historyQuery, serverRemotePeerInfo) + + # Then the response contains the messages + check: + queryResponse.get().messages == archiveMessages[0..<5] + + # Given the next query + var otherHistoryQuery = HistoryQuery( + cursor: queryResponse.get().cursor, + pubsubTopic: some(pubsubTopic), + contentTopics: contentTopicSeq, + direction: true, + pageSize: 5 + ) + + # When making the next history query + let otherQueryResponse = await client.query(otherHistoryQuery, serverRemotePeerInfo) + + # Then the response contains the messages + check: + otherQueryResponse.get().messages == archiveMessages[5..<10] + + asyncTest "Backward Pagination": + # Given the history query is backward + historyQuery.direction = false + + # When making a history query + let queryResponse = await client.query(historyQuery, serverRemotePeerInfo) + + # Then the response contains the messages + check: + queryResponse.get().messages == archiveMessages[5..<10] + + # Given the next query + var nextHistoryQuery = HistoryQuery( + cursor: queryResponse.get().cursor, + pubsubTopic: some(pubsubTopic), + contentTopics: contentTopicSeq, + direction: false, + pageSize: 5 + ) + + # When making the next history query + let otherQueryResponse = await client.query(nextHistoryQuery, serverRemotePeerInfo) + + # Then the response contains the messages + check: + otherQueryResponse.get().messages == archiveMessages[0..<5] + + suite "Pagination with Differente Page Sizes": + asyncTest "Pagination with Small Page Size": + # Given the first query (1/5) + historyQuery.pageSize = 2 + + # When making a history query + let queryResponse1 = await client.query(historyQuery, serverRemotePeerInfo) + + # Then the response contains the messages + check: + queryResponse1.get().messages == archiveMessages[0..<2] + + # Given the next query (2/5) + let historyQuery2 = HistoryQuery( + cursor: queryResponse1.get().cursor, + pubsubTopic: some(pubsubTopic), + contentTopics: contentTopicSeq, + direction: true, + pageSize: 2 + ) + + # When making the next history query + let queryResponse2 = await client.query(historyQuery2, serverRemotePeerInfo) + + # Then the response contains the messages + check: + queryResponse2.get().messages == archiveMessages[2..<4] + + # Given the next query (3/5) + let historyQuery3 = HistoryQuery( + cursor: queryResponse2.get().cursor, + pubsubTopic: some(pubsubTopic), + contentTopics: contentTopicSeq, + direction: true, + pageSize: 2 + ) + + # When making the next history query + let queryResponse3 = await client.query(historyQuery3, serverRemotePeerInfo) + + # Then the response contains the messages + check: + queryResponse3.get().messages == archiveMessages[4..<6] + + # Given the next query (4/5) + let historyQuery4 = HistoryQuery( + cursor: queryResponse3.get().cursor, + pubsubTopic: some(pubsubTopic), + contentTopics: contentTopicSeq, + direction: true, + pageSize: 2 + ) + + # When making the next history query + let queryResponse4 = await client.query(historyQuery4, serverRemotePeerInfo) + + # Then the response contains the messages + check: + queryResponse4.get().messages == archiveMessages[6..<8] + + # Given the next query (5/5) + let historyQuery5 = HistoryQuery( + cursor: queryResponse4.get().cursor, + pubsubTopic: some(pubsubTopic), + contentTopics: contentTopicSeq, + direction: true, + pageSize: 2 + ) + + # When making the next history query + let queryResponse5 = await client.query(historyQuery5, serverRemotePeerInfo) + + # Then the response contains the messages + check: + queryResponse5.get().messages == archiveMessages[8..<10] + + asyncTest "Pagination with Large Page Size": + # Given the first query (1/2) + historyQuery.pageSize = 8 + + # When making a history query + let queryResponse1 = await client.query(historyQuery, serverRemotePeerInfo) + + # Then the response contains the messages + check: + queryResponse1.get().messages == archiveMessages[0..<8] + + # Given the next query (2/2) + let historyQuery2 = HistoryQuery( + cursor: queryResponse1.get().cursor, + pubsubTopic: some(pubsubTopic), + contentTopics: contentTopicSeq, + direction: true, + pageSize: 8 + ) + + # When making the next history query + let queryResponse2 = await client.query(historyQuery2, serverRemotePeerInfo) + + # Then the response contains the messages + check: + queryResponse2.get().messages == archiveMessages[8..<10] + + asyncTest "Pagination with Excessive Page Size": + # Given the first query (1/1) + historyQuery.pageSize = 100 + + # When making a history query + let queryResponse1 = await client.query(historyQuery, serverRemotePeerInfo) + + # Then the response contains the messages + check: + queryResponse1.get().messages == archiveMessages[0..<10] + + asyncTest "Pagination with Mixed Page Size": + # Given the first query (1/3) + historyQuery.pageSize = 2 + + # When making a history query + let queryResponse1 = await client.query(historyQuery, serverRemotePeerInfo) + + # Then the response contains the messages + check: + queryResponse1.get().messages == archiveMessages[0..<2] + + # Given the next query (2/3) + let historyQuery2 = HistoryQuery( + cursor: queryResponse1.get().cursor, + pubsubTopic: some(pubsubTopic), + contentTopics: contentTopicSeq, + direction: true, + pageSize: 4 + ) + + # When making the next history query + let queryResponse2 = await client.query(historyQuery2, serverRemotePeerInfo) + + # Then the response contains the messages + check: + queryResponse2.get().messages == archiveMessages[2..<6] + + # Given the next query (3/3) + let historyQuery3 = HistoryQuery( + cursor: queryResponse2.get().cursor, + pubsubTopic: some(pubsubTopic), + contentTopics: contentTopicSeq, + direction: true, + pageSize: 6 + ) + + # When making the next history query + let queryResponse3 = await client.query(historyQuery3, serverRemotePeerInfo) + + # Then the response contains the messages + check: + queryResponse3.get().messages == archiveMessages[6..<10] + + asyncTest "Pagination with Zero Page Size (Behaves as DefaultPageSize)": + # Given a message list of size higher than the default page size + let currentStoreLen = uint((await archiveDriver.getMessagesCount()).get()) + assert archive.DefaultPageSize > currentStoreLen, "This test requires a store with more than (DefaultPageSize) messages" + let missingMessagesAmount = archive.DefaultPageSize - currentStoreLen + 5 + + let lastMessageTimestamp = archiveMessages[archiveMessages.len - 1].timestamp + var extraMessages: seq[WakuMessage] = @[] + for i in 0.. currentStoreLen, "This test requires a store with more than (DefaultPageSize) messages" + let missingMessagesAmount = archive.DefaultPageSize - currentStoreLen + 5 + + let lastMessageTimestamp = archiveMessages[archiveMessages.len - 1].timestamp + var extraMessages: seq[WakuMessage] = @[] + for i in 0.. Date: Wed, 20 Dec 2023 09:38:14 +0100 Subject: [PATCH 170/274] fix: setting connectivity loop interval to 15 seconds (#2307) --- waku/node/peer_manager/peer_manager.nim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/waku/node/peer_manager/peer_manager.nim b/waku/node/peer_manager/peer_manager.nim index 0edddad7b5..ccf76b06fd 100644 --- a/waku/node/peer_manager/peer_manager.nim +++ b/waku/node/peer_manager/peer_manager.nim @@ -54,7 +54,7 @@ const MaxParallelDials = 10 # Delay between consecutive relayConnectivityLoop runs - ConnectivityLoopInterval = chronos.minutes(1) + ConnectivityLoopInterval = chronos.seconds(15) # How often the peer store is pruned PrunePeerStoreInterval = chronos.minutes(10) From 32668f43f5e02f1a13e19b885b6c2261261a9c10 Mon Sep 17 00:00:00 2001 From: Ivan FB <128452529+Ivansete-status@users.noreply.github.com> Date: Wed, 20 Dec 2023 15:23:41 +0100 Subject: [PATCH 171/274] fix: Revert "feat: shard aware peer management (#2151)" (#2312) This reverts commit dba9820c1fa00f414f18d57f7a3ff38b67d2bb1a. We need to revert this commit because the waku-simulator stopped working. i.e. the nodes couldn't establish connections among them: https://github.com/waku-org/waku-simulator/tree/054ba9e33f4fdcdb590bcfe760a5254069c5cb9f Also, the following js-waku test fails due to this commit: "same cluster, different shard: nodes connect" * waku_lightpush/protocol.nim: minor changes to make it compile after revert --- apps/chat2/chat2.nim | 6 +- apps/wakunode2/app.nim | 2 +- tests/test_peer_manager.nim | 118 +++---- tests/test_waku_lightpush.nim | 1 - tests/test_wakunode_lightpush.nim | 8 +- tests/testlib/wakunode.nim | 12 +- tests/wakunode_rest/test_rest_lightpush.nim | 3 +- waku/node/peer_manager/peer_manager.nim | 323 ++++++++------------ waku/node/peer_manager/waku_peer_store.nim | 21 +- waku/node/waku_node.nim | 3 +- waku/waku_api/rest/admin/handlers.nim | 2 +- waku/waku_api/rest/lightpush/handlers.nim | 4 +- waku/waku_core/peers.nim | 15 +- waku/waku_lightpush/client.nim | 2 +- waku/waku_lightpush/common.nim | 21 -- waku/waku_lightpush/protocol.nim | 23 +- waku/waku_metadata/protocol.nim | 2 +- 17 files changed, 219 insertions(+), 347 deletions(-) delete mode 100644 waku/waku_lightpush/common.nim diff --git a/apps/chat2/chat2.nim b/apps/chat2/chat2.nim index 1f290c8f67..828e7fbbd1 100644 --- a/apps/chat2/chat2.nim +++ b/apps/chat2/chat2.nim @@ -9,9 +9,10 @@ when (NimMajor, NimMinor) < (1, 4): else: {.push raises: [].} -import std/[strformat, strutils, times, options, random] +import std/[strformat, strutils, times, json, options, random] import confutils, chronicles, chronos, stew/shims/net as stewNet, eth/keys, bearssl, stew/[byteutils, results], + nimcrypto/pbkdf2, metrics, metrics/chronos_httpserver import libp2p/[switch, # manage transports, a single entry point for dialing and listening @@ -21,10 +22,11 @@ import libp2p/[switch, # manage transports, a single entry poi peerinfo, # manage the information of a peer, such as peer ID and public / private key peerid, # Implement how peers interact protobuf/minprotobuf, # message serialisation/deserialisation from and to protobufs + protocols/secure/secio, # define the protocol of secure input / output, allows encrypted communication that uses public keys to validate signed messages instead of a certificate authority like in TLS nameresolving/dnsresolver]# define DNS resolution import ../../waku/waku_core, - ../../waku/waku_lightpush/common, + ../../waku/waku_lightpush, ../../waku/waku_lightpush/rpc, ../../waku/waku_filter, ../../waku/waku_enr, diff --git a/apps/wakunode2/app.nim b/apps/wakunode2/app.nim index c5f562f742..ec3e8cc658 100644 --- a/apps/wakunode2/app.nim +++ b/apps/wakunode2/app.nim @@ -53,7 +53,7 @@ import ../../waku/waku_peer_exchange, ../../waku/waku_rln_relay, ../../waku/waku_store, - ../../waku/waku_lightpush/common, + ../../waku/waku_lightpush, ../../waku/waku_filter, ../../waku/waku_filter_v2, ./wakunode2_validator_signed, diff --git a/tests/test_peer_manager.nim b/tests/test_peer_manager.nim index 4f7a6598fb..8576f2725a 100644 --- a/tests/test_peer_manager.nim +++ b/tests/test_peer_manager.nim @@ -1,7 +1,7 @@ {.used.} import - std/[options, sequtils, times, sugar], + std/[options, sequtils, times], stew/shims/net as stewNet, testutils/unittests, chronos, @@ -21,12 +21,10 @@ import ../../waku/node/peer_manager/peer_manager, ../../waku/node/peer_manager/peer_store/waku_peer_storage, ../../waku/waku_node, - ../../waku/waku_core, - ../../waku/waku_enr/capabilities, - ../../waku/waku_relay/protocol, - ../../waku/waku_store/common, - ../../waku/waku_filter/protocol, - ../../waku/waku_lightpush/common, + ../../waku/waku_relay, + ../../waku/waku_store, + ../../waku/waku_filter, + ../../waku/waku_lightpush, ../../waku/waku_peer_exchange, ../../waku/waku_metadata, ./testlib/common, @@ -37,7 +35,7 @@ import procSuite "Peer Manager": asyncTest "connectRelay() works": # Create 2 nodes - let nodes = toSeq(0..<2).mapIt(newTestWakuNode(generateSecp256k1Key(), parseIpAddress("0.0.0.0"), Port(0))) + let nodes = toSeq(0..<2).mapIt(newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0))) await allFutures(nodes.mapIt(it.start())) let connOk = await nodes[0].peerManager.connectRelay(nodes[1].peerInfo.toRemotePeerInfo()) @@ -50,7 +48,7 @@ procSuite "Peer Manager": asyncTest "dialPeer() works": # Create 2 nodes - let nodes = toSeq(0..<2).mapIt(newTestWakuNode(generateSecp256k1Key(), parseIpAddress("0.0.0.0"), Port(0))) + let nodes = toSeq(0..<2).mapIt(newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0))) await allFutures(nodes.mapIt(it.start())) await allFutures(nodes.mapIt(it.mountRelay())) @@ -78,7 +76,7 @@ procSuite "Peer Manager": asyncTest "dialPeer() fails gracefully": # Create 2 nodes and start them - let nodes = toSeq(0..<2).mapIt(newTestWakuNode(generateSecp256k1Key(), parseIpAddress("0.0.0.0"), Port(0))) + let nodes = toSeq(0..<2).mapIt(newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0))) await allFutures(nodes.mapIt(it.start())) await allFutures(nodes.mapIt(it.mountRelay())) @@ -101,7 +99,7 @@ procSuite "Peer Manager": asyncTest "Adding, selecting and filtering peers work": let - node = newTestWakuNode(generateSecp256k1Key(), parseIpAddress("0.0.0.0"), Port(0)) + node = newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0)) # Create filter peer filterLoc = MultiAddress.init("/ip4/127.0.0.1/tcp/0").tryGet() @@ -130,9 +128,10 @@ procSuite "Peer Manager": await node.stop() + asyncTest "Peer manager keeps track of connections": # Create 2 nodes - let nodes = toSeq(0..<2).mapIt(newTestWakuNode(generateSecp256k1Key(), parseIpAddress("0.0.0.0"), Port(0))) + let nodes = toSeq(0..<2).mapIt(newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0))) await allFutures(nodes.mapIt(it.start())) await allFutures(nodes.mapIt(it.mountRelay())) @@ -176,7 +175,7 @@ procSuite "Peer Manager": asyncTest "Peer manager updates failed peers correctly": # Create 2 nodes - let nodes = toSeq(0..<2).mapIt(newTestWakuNode(generateSecp256k1Key(), parseIpAddress("0.0.0.0"), Port(0))) + let nodes = toSeq(0..<2).mapIt(newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0))) await allFutures(nodes.mapIt(it.start())) await allFutures(nodes.mapIt(it.mountRelay())) @@ -226,34 +225,18 @@ procSuite "Peer Manager": let database = SqliteDatabase.new(":memory:")[] storage = WakuPeerStorage.new(database)[] - node1 = newTestWakuNode( - generateSecp256k1Key(), - parseIpAddress("127.0.0.1"), - Port(44048), - peerStorage = storage - ) - node2 = newTestWakuNode(generateSecp256k1Key(), parseIpAddress("127.0.0.1"), Port(34023)) - - node1.mountMetadata(0).expect("Mounted Waku Metadata") - node2.mountMetadata(0).expect("Mounted Waku Metadata") + node1 = newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0), peerStorage = storage) + node2 = newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0)) + peerInfo2 = node2.switch.peerInfo await node1.start() await node2.start() await node1.mountRelay() await node2.mountRelay() - - let peerInfo2 = node2.switch.peerInfo - var remotePeerInfo2 = peerInfo2.toRemotePeerInfo() - remotePeerInfo2.enr = some(node2.enr) - - let is12Connected = await node1.peerManager.connectRelay(remotePeerInfo2) - assert is12Connected == true, "Node 1 and 2 not connected" - check: - node1.peerManager.peerStore[AddressBook][remotePeerInfo2.peerId] == remotePeerInfo2.addrs - - # wait for the peer store update + require: + (await node1.peerManager.connectRelay(peerInfo2.toRemotePeerInfo())) == true await sleepAsync(chronos.milliseconds(500)) check: @@ -263,17 +246,10 @@ procSuite "Peer Manager": node1.peerManager.peerStore.connectedness(peerInfo2.peerId) == Connected # Simulate restart by initialising a new node using the same storage - let node3 = newTestWakuNode( - generateSecp256k1Key(), - parseIpAddress("127.0.0.1"), - Port(56037), - peerStorage = storage - ) - - node3.mountMetadata(0).expect("Mounted Waku Metadata") + let + node3 = newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0), peerStorage = storage) await node3.start() - check: # Node2 has been loaded after "restart", but we have not yet reconnected node3.peerManager.peerStore.peers().len == 1 @@ -281,10 +257,7 @@ procSuite "Peer Manager": node3.peerManager.peerStore.connectedness(peerInfo2.peerId) == NotConnected await node3.mountRelay() - - await node3.peerManager.manageRelayPeers() - - await sleepAsync(chronos.milliseconds(500)) + await node3.peerManager.connectToRelayPeers() check: # Reconnected to node2 after "restart" @@ -302,7 +275,7 @@ procSuite "Peer Manager": # different network node1 = newTestWakuNode( generateSecp256k1Key(), - parseIpAddress("0.0.0.0"), + ValidIpAddress.init("0.0.0.0"), Port(0), clusterId = clusterId3, topics = @["/waku/2/rs/3/0"], @@ -311,22 +284,22 @@ procSuite "Peer Manager": # same network node2 = newTestWakuNode( generateSecp256k1Key(), - parseIpAddress("0.0.0.0"), + ValidIpAddress.init("0.0.0.0"), Port(0), clusterId = clusterId4, topics = @["/waku/2/rs/4/0"], ) node3 = newTestWakuNode( generateSecp256k1Key(), - parseIpAddress("0.0.0.0"), + ValidIpAddress.init("0.0.0.0"), Port(0), clusterId = clusterId4, topics = @["/waku/2/rs/4/0"], ) - node1.mountMetadata(clusterId3).expect("Mounted Waku Metadata") - node2.mountMetadata(clusterId4).expect("Mounted Waku Metadata") - node3.mountMetadata(clusterId4).expect("Mounted Waku Metadata") + discard node1.mountMetadata(clusterId3) + discard node2.mountMetadata(clusterId4) + discard node3.mountMetadata(clusterId4) # Start nodes await allFutures([node1.start(), node2.start(), node3.start()]) @@ -345,13 +318,14 @@ procSuite "Peer Manager": conn2.isNone conn3.isSome + # TODO: nwaku/issues/1377 xasyncTest "Peer manager support multiple protocol IDs when reconnecting to peers": let database = SqliteDatabase.new(":memory:")[] storage = WakuPeerStorage.new(database)[] - node1 = newTestWakuNode(generateSecp256k1Key(), parseIpAddress("0.0.0.0"), Port(0), peerStorage = storage) - node2 = newTestWakuNode(generateSecp256k1Key(), parseIpAddress("0.0.0.0"), Port(0)) + node1 = newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0), peerStorage = storage) + node2 = newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0)) peerInfo2 = node2.switch.peerInfo betaCodec = "/vac/waku/relay/2.0.0-beta2" stableCodec = "/vac/waku/relay/2.0.0" @@ -375,7 +349,7 @@ procSuite "Peer Manager": # Simulate restart by initialising a new node using the same storage let - node3 = newTestWakuNode(generateSecp256k1Key(), parseIpAddress("0.0.0.0"), Port(0), peerStorage = storage) + node3 = newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0), peerStorage = storage) await node3.mountRelay() node3.wakuRelay.codec = stableCodec @@ -403,28 +377,14 @@ procSuite "Peer Manager": asyncTest "Peer manager connects to all peers supporting a given protocol": # Create 4 nodes - let nodes = - toSeq(0..<4) - .mapIt( - newTestWakuNode( - nodeKey = generateSecp256k1Key(), - bindIp = parseIpAddress("0.0.0.0"), - bindPort = Port(0), - wakuFlags = some(CapabilitiesBitfield.init(@[Relay])) - ) - ) + let nodes = toSeq(0..<4).mapIt(newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0))) # Start them - discard nodes.mapIt(it.mountMetadata(0)) - await allFutures(nodes.mapIt(it.mountRelay())) await allFutures(nodes.mapIt(it.start())) + await allFutures(nodes.mapIt(it.mountRelay())) # Get all peer infos - let peerInfos = collect: - for i in 0..nodes.high: - let peerInfo = nodes[i].switch.peerInfo.toRemotePeerInfo() - peerInfo.enr = some(nodes[i].enr) - peerInfo + let peerInfos = nodes.mapIt(it.switch.peerInfo.toRemotePeerInfo()) # Add all peers (but self) to node 0 nodes[0].peerManager.addPeer(peerInfos[1]) @@ -432,7 +392,7 @@ procSuite "Peer Manager": nodes[0].peerManager.addPeer(peerInfos[3]) # Connect to relay peers - await nodes[0].peerManager.manageRelayPeers() + await nodes[0].peerManager.connectToRelayPeers() check: # Peerstore track all three peers @@ -457,7 +417,7 @@ procSuite "Peer Manager": asyncTest "Peer store keeps track of incoming connections": # Create 4 nodes - let nodes = toSeq(0..<4).mapIt(newTestWakuNode(generateSecp256k1Key(), parseIpAddress("0.0.0.0"), Port(0))) + let nodes = toSeq(0..<4).mapIt(newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0))) # Start them await allFutures(nodes.mapIt(it.start())) @@ -520,7 +480,7 @@ procSuite "Peer Manager": let basePeerId = "16Uiu2HAm7QGEZKujdSbbo1aaQyfDPQ6Bw3ybQnj6fruH5Dxwd7D" let - node = newTestWakuNode(generateSecp256k1Key(), parseIpAddress("0.0.0.0"), Port(0)) + node = newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0)) peers = toSeq(1..5) .mapIt( parsePeerInfo("/ip4/0.0.0.0/tcp/30300/p2p/" & basePeerId & $it) @@ -562,7 +522,7 @@ procSuite "Peer Manager": asyncTest "connectedPeers() returns expected number of connections per protocol": # Create 4 nodes - let nodes = toSeq(0..<4).mapIt(newTestWakuNode(generateSecp256k1Key(), parseIpAddress("0.0.0.0"), Port(0))) + let nodes = toSeq(0..<4).mapIt(newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0))) # Start them with relay + filter await allFutures(nodes.mapIt(it.start())) @@ -613,7 +573,7 @@ procSuite "Peer Manager": asyncTest "getNumStreams() returns expected number of connections per protocol": # Create 2 nodes - let nodes = toSeq(0..<2).mapIt(newTestWakuNode(generateSecp256k1Key(), parseIpAddress("0.0.0.0"), Port(0))) + let nodes = toSeq(0..<2).mapIt(newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0))) # Start them with relay + filter await allFutures(nodes.mapIt(it.start())) @@ -839,7 +799,7 @@ procSuite "Peer Manager": asyncTest "colocationLimit is enforced by pruneConnsByIp()": # Create 5 nodes - let nodes = toSeq(0..<5).mapIt(newTestWakuNode(generateSecp256k1Key(), parseIpAddress("0.0.0.0"), Port(0))) + let nodes = toSeq(0..<5).mapIt(newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0))) # Start them with relay + filter await allFutures(nodes.mapIt(it.start())) diff --git a/tests/test_waku_lightpush.nim b/tests/test_waku_lightpush.nim index 76312272ff..de125ac974 100644 --- a/tests/test_waku_lightpush.nim +++ b/tests/test_waku_lightpush.nim @@ -11,7 +11,6 @@ import ../../waku/node/peer_manager, ../../waku/waku_core, ../../waku/waku_lightpush, - ../../waku/waku_lightpush/common, ../../waku/waku_lightpush/client, ../../waku/waku_lightpush/protocol_metrics, ../../waku/waku_lightpush/rpc, diff --git a/tests/test_wakunode_lightpush.nim b/tests/test_wakunode_lightpush.nim index 95a8ce874a..6e986fa1a1 100644 --- a/tests/test_wakunode_lightpush.nim +++ b/tests/test_wakunode_lightpush.nim @@ -4,12 +4,16 @@ import std/options, stew/shims/net as stewNet, testutils/unittests, - chronos + chronicles, + chronos, + libp2p/crypto/crypto, + libp2p/switch import ../../waku/waku_core, - ../../waku/waku_lightpush/common, + ../../waku/waku_lightpush, ../../waku/node/peer_manager, ../../waku/waku_node, + ./testlib/common, ./testlib/wakucore, ./testlib/wakunode diff --git a/tests/testlib/wakunode.nim b/tests/testlib/wakunode.nim index 4a3179bcab..274e30efc4 100644 --- a/tests/testlib/wakunode.nim +++ b/tests/testlib/wakunode.nim @@ -32,8 +32,7 @@ proc defaultTestWakuNodeConf*(): WakuNodeConf = dnsAddrsNameServers: @[parseIpAddress("1.1.1.1"), parseIpAddress("1.0.0.1")], nat: "any", maxConnections: 50, - clusterId: 1.uint32, - topics: @["/waku/2/rs/1/0"], + topics: @[], relay: true ) @@ -56,8 +55,8 @@ proc newTestWakuNode*(nodeKey: crypto.PrivateKey, dns4DomainName = none(string), discv5UdpPort = none(Port), agentString = none(string), - clusterId: uint32 = 1.uint32, - topics: seq[string] = @["/waku/2/rs/1/0"], + clusterId: uint32 = 2.uint32, + topics: seq[string] = @["/waku/2/rs/2/0"], peerStoreCapacity = none(int)): WakuNode = var resolvedExtIp = extIp @@ -67,10 +66,7 @@ proc newTestWakuNode*(nodeKey: crypto.PrivateKey, if (extIp.isSome() or dns4DomainName.isSome()) and extPort.isNone(): some(Port(60000)) else: extPort - var conf = defaultTestWakuNodeConf() - - conf.clusterId = clusterId - conf.topics = topics + let conf = defaultTestWakuNodeConf() if dns4DomainName.isSome() and extIp.isNone(): # If there's an error resolving the IP, an exception is thrown and test fails diff --git a/tests/wakunode_rest/test_rest_lightpush.nim b/tests/wakunode_rest/test_rest_lightpush.nim index 876be7c642..edeeed02ba 100644 --- a/tests/wakunode_rest/test_rest_lightpush.nim +++ b/tests/wakunode_rest/test_rest_lightpush.nim @@ -10,10 +10,11 @@ import import ../../waku/waku_api/message_cache, + ../../waku/common/base64, ../../waku/waku_core, ../../waku/waku_node, ../../waku/node/peer_manager, - ../../waku/waku_lightpush/common, + ../../waku/waku_lightpush, ../../waku/waku_api/rest/server, ../../waku/waku_api/rest/client, ../../waku/waku_api/rest/responses, diff --git a/waku/node/peer_manager/peer_manager.nim b/waku/node/peer_manager/peer_manager.nim index ccf76b06fd..72ac4efd4b 100644 --- a/waku/node/peer_manager/peer_manager.nim +++ b/waku/node/peer_manager/peer_manager.nim @@ -18,7 +18,6 @@ import ../../waku_core, ../../waku_relay, ../../waku_enr/sharding, - ../../waku_enr/capabilities, ../../waku_metadata, ./peer_store/peer_storage, ./waku_peer_store @@ -51,7 +50,7 @@ const BackoffFactor = 4 # Limit the amount of paralel dials - MaxParallelDials = 10 + MaxParalelDials = 10 # Delay between consecutive relayConnectivityLoop runs ConnectivityLoopInterval = chronos.seconds(15) @@ -117,21 +116,22 @@ proc addPeer*(pm: PeerManager, remotePeerInfo: RemotePeerInfo, origin = UnknownO # Do not attempt to manage our unmanageable self return + # ...public key + var publicKey: PublicKey + discard remotePeerInfo.peerId.extractPublicKey(publicKey) + if pm.peerStore[AddressBook][remotePeerInfo.peerId] == remotePeerInfo.addrs and - pm.peerStore[KeyBook][remotePeerInfo.peerId] == remotePeerInfo.publicKey and + pm.peerStore[KeyBook][remotePeerInfo.peerId] == publicKey and pm.peerStore[ENRBook][remotePeerInfo.peerId].raw.len > 0: # Peer already managed and ENR info is already saved return trace "Adding peer to manager", peerId = remotePeerInfo.peerId, addresses = remotePeerInfo.addrs - + pm.peerStore[AddressBook][remotePeerInfo.peerId] = remotePeerInfo.addrs - pm.peerStore[KeyBook][remotePeerInfo.peerId] = remotePeerInfo.publicKey + pm.peerStore[KeyBook][remotePeerInfo.peerId] = publicKey pm.peerStore[SourceBook][remotePeerInfo.peerId] = origin - - if remotePeerInfo.protocols.len > 0: - pm.peerStore[ProtoBook][remotePeerInfo.peerId] = remotePeerInfo.protocols - + if remotePeerInfo.enr.isSome(): pm.peerStore[ENRBook][remotePeerInfo.peerId] = remotePeerInfo.enr.get() @@ -159,31 +159,27 @@ proc connectRelay*(pm: PeerManager, pm.addPeer(peer) let failedAttempts = pm.peerStore[NumberFailedConnBook][peerId] - trace "Connecting to relay peer", - wireAddr=peer.addrs, peerId=peerId, failedAttempts=failedAttempts + trace "Connecting to relay peer", wireAddr=peer.addrs, peerId=peerId, failedAttempts=failedAttempts var deadline = sleepAsync(dialTimeout) - let workfut = pm.switch.connect(peerId, peer.addrs) - - # Can't use catch: with .withTimeout() in this case - let res = catch: await workfut or deadline - - let reasonFailed = - if not workfut.finished(): - await workfut.cancelAndWait() - "timed out" - elif res.isErr(): res.error.msg - else: + var workfut = pm.switch.connect(peerId, peer.addrs) + var reasonFailed = "" + + try: + await workfut or deadline + if workfut.finished(): if not deadline.finished(): - await deadline.cancelAndWait() - + deadline.cancel() waku_peers_dials.inc(labelValues = ["successful"]) waku_node_conns_initiated.inc(labelValues = [source]) - pm.peerStore[NumberFailedConnBook][peerId] = 0 - return true - + else: + reasonFailed = "timed out" + await cancelAndWait(workfut) + except CatchableError as exc: + reasonFailed = "remote peer failed" + # Dial failed pm.peerStore[NumberFailedConnBook][peerId] = pm.peerStore[NumberFailedConnBook][peerId] + 1 pm.peerStore[LastFailedConnBook][peerId] = Moment.init(getTime().toUnix, Second) @@ -219,15 +215,15 @@ proc dialPeer(pm: PeerManager, # Dial Peer let dialFut = pm.switch.dial(peerId, addrs, proto) - - let res = catch: - if await dialFut.withTimeout(dialTimeout): + var reasonFailed = "" + try: + if (await dialFut.withTimeout(dialTimeout)): return some(dialFut.read()) - else: await cancelAndWait(dialFut) - - let reasonFailed = - if res.isOk: "timed out" - else: res.error.msg + else: + reasonFailed = "timeout" + await cancelAndWait(dialFut) + except CatchableError as exc: + reasonFailed = "failed" trace "Dialing peer failed", peerId=peerId, reason=reasonFailed, proto=proto @@ -298,108 +294,105 @@ proc canBeConnected*(pm: PeerManager, let now = Moment.init(getTime().toUnix, Second) let lastFailed = pm.peerStore[LastFailedConnBook][peerId] let backoff = calculateBackoff(pm.initialBackoffInSec, pm.backoffFactor, failedAttempts) - - return now >= (lastFailed + backoff) + if now >= (lastFailed + backoff): + return true + return false ################## # Initialisation # ################## proc getPeerIp(pm: PeerManager, peerId: PeerId): Option[string] = - if not pm.switch.connManager.getConnections().hasKey(peerId): - return none(string) - - let conns = pm.switch.connManager.getConnections().getOrDefault(peerId) - if conns.len == 0: - return none(string) - - let obAddr = conns[0].connection.observedAddr.valueOr: - return none(string) - - # TODO: think if circuit relay ips should be handled differently - - return some(obAddr.getHostname()) + if pm.switch.connManager.getConnections().hasKey(peerId): + let conns = pm.switch.connManager.getConnections().getOrDefault(peerId) + if conns.len != 0: + let observedAddr = conns[0].connection.observedAddr + let ip = observedAddr.get.getHostname() + if observedAddr.isSome: + # TODO: think if circuit relay ips should be handled differently + let ip = observedAddr.get.getHostname() + return some(ip) + return none(string) # called when a connection i) is created or ii) is closed proc onConnEvent(pm: PeerManager, peerId: PeerID, event: ConnEvent) {.async.} = case event.kind - of ConnEventKind.Connected: - #let direction = if event.incoming: Inbound else: Outbound - discard - of ConnEventKind.Disconnected: - discard - -proc onPeerMetadata(pm: PeerManager, peerId: PeerId) {.async.} = - # To prevent metadata protocol from breaking prev nodes, by now we only - # disconnect if the clusterid is specified. - if pm.wakuMetadata.clusterId == 0: - return - - let res = catch: await pm.switch.dial(peerId, WakuMetadataCodec) - - var reason: string - block guardClauses: - let conn = res.valueOr: - reason = "dial failed: " & error.msg - break guardClauses - - let metadata = (await pm.wakuMetadata.request(conn)).valueOr: - reason = "waku metatdata request failed: " & error - break guardClauses - - let clusterId = metadata.clusterId.valueOr: - reason = "empty cluster-id reported" - break guardClauses - - if pm.wakuMetadata.clusterId != clusterId: - reason = "different clusterId reported: " & $pm.wakuMetadata.clusterId & " vs " & $clusterId - break guardClauses - - if not metadata.shards.anyIt(pm.wakuMetadata.shards.contains(it)): - reason = "no shards in common" - break guardClauses - - return - - info "disconnecting from peer", peerId=peerId, reason=reason - asyncSpawn(pm.switch.disconnect(peerId)) - pm.peerStore.delete(peerId) + of ConnEventKind.Connected: + let direction = if event.incoming: Inbound else: Outbound + discard + of ConnEventKind.Disconnected: + discard # called when a peer i) first connects to us ii) disconnects all connections from us proc onPeerEvent(pm: PeerManager, peerId: PeerId, event: PeerEvent) {.async.} = - if not pm.wakuMetadata.isNil() and event.kind == PeerEventKind.Joined: - await pm.onPeerMetadata(peerId) - var direction: PeerDirection var connectedness: Connectedness - case event.kind: - of Joined: - direction = if event.initiator: Outbound else: Inbound - connectedness = Connected - - if (let ip = pm.getPeerIp(peerId); ip.isSome()): - pm.ipTable.mgetOrPut(ip.get, newSeq[PeerId]()).add(peerId) - + if event.kind == PeerEventKind.Joined: + direction = if event.initiator: Outbound else: Inbound + connectedness = Connected + + var clusterOk = false + var reason = "" + # To prevent metadata protocol from breaking prev nodes, by now we only + # disconnect if the clusterid is specified. + if not pm.wakuMetadata.isNil() and pm.wakuMetadata.clusterId != 0: + block wakuMetadata: + var conn: Connection + try: + conn = await pm.switch.dial(peerId, WakuMetadataCodec) + except CatchableError: + reason = "waku metadata codec not supported: " & getCurrentExceptionMsg() + break wakuMetadata + + # request metadata from connecting peer + let metadata = (await pm.wakuMetadata.request(conn)).valueOr: + reason = "failed waku metadata codec request" + break wakuMetadata + + # does not report any clusterId + let clusterId = metadata.clusterId.valueOr: + reason = "empty clusterId reported" + break wakuMetadata + + # drop it if it doesnt match our network id + if pm.wakuMetadata.clusterId != clusterId: + reason = "different clusterId reported: " & $pm.wakuMetadata.clusterId & " vs " & $clusterId + break wakuMetadata + + # reaching here means the clusterId matches + clusterOk = true + + if not pm.wakuMetadata.isNil() and pm.wakuMetadata.clusterId != 0 and not clusterOk: + info "disconnecting from peer", peerId=peerId, reason=reason + asyncSpawn(pm.switch.disconnect(peerId)) + pm.peerStore.delete(peerId) + + # TODO: Take action depending on the supported shards as reported by metadata + + let ip = pm.getPeerIp(peerId) + if ip.isSome: + pm.ipTable.mgetOrPut(ip.get, newSeq[PeerId]()).add(peerId) + + let peersBehindIp = pm.ipTable[ip.get] + if peersBehindIp.len > pm.colocationLimit: # in theory this should always be one, but just in case - let peersBehindIp = pm.ipTable[ip.get] - - let idx = max((peersBehindIp.len - pm.colocationLimit), 0) - for peerId in peersBehindIp[0.. pm.inRelayPeersTarget: + # await pm.pruneInRelayConns(inRelayPeers.len - pm.inRelayPeersTarget) - for shard in pm.wakuMetadata.shards.items: - # Filter out peer not on this shard - let connectedInPeers = inPeers.filterIt( - pm.peerStore.hasShard(it, uint16(pm.wakuMetadata.clusterId), uint16(shard))) - - let connectedOutPeers = outPeers.filterIt( - pm.peerStore.hasShard(it, uint16(pm.wakuMetadata.clusterId), uint16(shard))) - - # Calculate the difference between current values and targets - let inPeerDiff = connectedInPeers.len - inTarget - let outPeerDiff = outTarget - connectedOutPeers.len - - if inPeerDiff > 0: - peersToDisconnect += inPeerDiff - - if outPeerDiff <= 0: - continue - - # Get all peers for this shard - var connectablePeers = pm.peerStore.getPeersByShard( - uint16(pm.wakuMetadata.clusterId), uint16(shard)) - - let shardCount = connectablePeers.len - - connectablePeers.keepItIf( - not pm.peerStore.isConnected(it.peerId) and - pm.canBeConnected(it.peerId)) - - let connectableCount = connectablePeers.len - - connectablePeers.keepItIf(pm.peerStore.hasCapability(it.peerId, Relay)) - - let relayCount = connectablePeers.len - - trace "Sharded Peer Management", - shard = shard, - connectable = $connectableCount & "/" & $shardCount, - relayConnectable = $relayCount & "/" & $shardCount, - relayInboundTarget = $connectedInPeers.len & "/" & $inTarget, - relayOutboundTarget = $connectedOutPeers.len & "/" & $outTarget - - let length = min(outPeerDiff, connectablePeers.len) - for peer in connectablePeers[0..= pm.outRelayPeersTarget: return - let uniquePeers = toSeq(peersToConnect).mapIt(pm.peerStore.get(it)) + let notConnectedPeers = pm.peerStore.getNotConnectedPeers().mapIt(RemotePeerInfo.init(it.peerId, it.addrs)) + let outsideBackoffPeers = notConnectedPeers.filterIt(pm.canBeConnected(it.peerId)) + let numPeersToConnect = min(outsideBackoffPeers.len, MaxParalelDials) - # Connect to all nodes - for i in countup(0, uniquePeers.len, MaxParallelDials): - let stop = min(i + MaxParallelDials, uniquePeers.len) - trace "Connecting to Peers", peerIds = $uniquePeers[i.. Date: Wed, 20 Dec 2023 15:48:59 +0100 Subject: [PATCH 172/274] CHANGELOG.md for 0.23.0 (#2309) --- CHANGELOG.md | 73 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3f923f2308..7ddb35a664 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,76 @@ +## v0.23.0 (2023-12-18) + +## What's Changed + +Release highlights: +* Bug fix in Postgres when querying more than one content topic. +* :warning: Add new DB column `messageHash`. This requires a manual database update in _Postgres_. +* Updated deterministic message hash algorithm. +* REST admin can inform whether a node supports lightpush and/or filter protocols. +* Improvements to cluster id and shards setup. +* Properly apply RLN when publishing from REST or jsonrpc API. +* Remove trailing commas from the RLN keystore json generated during credentials registration. +* General test cleanup, better relay tests and new filter unsubscribe tests. +* Rewrite docs for clarity and update screenshots. + +### Features + +- setting image deployment to harbor registry ([93dd5ae5](https://github.com/waku-org/nwaku/commit/93dd5ae5)) +- Add new DB column `messageHash` ([#2202](https://github.com/waku-org/nwaku/issues/2202)) ([aeb77a3e](https://github.com/waku-org/nwaku/commit/aeb77a3e)) + +### Bug Fixes + +- make rln rate limit spec compliant ([#2294](https://github.com/waku-org/nwaku/issues/2294)) ([5847f49d](https://github.com/waku-org/nwaku/commit/5847f49d)) +- update num-msgs archive metrics every minute and not only at the beginning ([#2287](https://github.com/waku-org/nwaku/issues/2287)) ([0fc617ff](https://github.com/waku-org/nwaku/commit/0fc617ff)) +- **rln-relay:** graceful retries on rpc calls ([#2250](https://github.com/waku-org/nwaku/issues/2250)) ([15c1f974](https://github.com/waku-org/nwaku/commit/15c1f974)) +- add protection in rest service to always publish with timestamp if user doesn't provide it ([#2261](https://github.com/waku-org/nwaku/issues/2261)) ([42f19579](https://github.com/waku-org/nwaku/commit/42f19579)) +- remove trailing commas from keystore json ([#2200](https://github.com/waku-org/nwaku/issues/2200)) ([103d3981](https://github.com/waku-org/nwaku/commit/103d3981)) +- **dockerfile:** update dockerignore and base image ([#2262](https://github.com/waku-org/nwaku/issues/2262)) ([c86dc442](https://github.com/waku-org/nwaku/commit/c86dc442)) +- waku_filter_v2/common: PEER_DIAL_FAILURE ret code change: 200 -> 504 ([#2236](https://github.com/waku-org/nwaku/issues/2236)) ([6301bec0](https://github.com/waku-org/nwaku/commit/6301bec0)) +- extended Postgres code to support retention policy + refactoring ([#2244](https://github.com/waku-org/nwaku/issues/2244)) ([a1ed517f](https://github.com/waku-org/nwaku/commit/a1ed517f)) +- admin REST API to be enabled only if config is set ([#2218](https://github.com/waku-org/nwaku/issues/2218)) ([110de90f](https://github.com/waku-org/nwaku/commit/110de90f)) +- **rln:** error in api when rate limit ([#2212](https://github.com/waku-org/nwaku/issues/2212)) ([51f36099](https://github.com/waku-org/nwaku/commit/51f36099)) +- **relay:** Failing protocol tests ([#2224](https://github.com/waku-org/nwaku/issues/2224)) ([c9e869fb](https://github.com/waku-org/nwaku/commit/c9e869fb)) +- **tests:** Compilation failure fix ([#2222](https://github.com/waku-org/nwaku/issues/2222)) ([a5da1fc4](https://github.com/waku-org/nwaku/commit/a5da1fc4)) +- **rest:** properly check if rln is used ([#2205](https://github.com/waku-org/nwaku/issues/2205)) ([2cb0989a](https://github.com/waku-org/nwaku/commit/2cb0989a)) + +### Changes + +- archive - move error to trace level when insert row fails ([#2283](https://github.com/waku-org/nwaku/issues/2283)) ([574cdf55](https://github.com/waku-org/nwaku/commit/574cdf55)) +- including content topics on FilterSubscribeRequest logs ([#2295](https://github.com/waku-org/nwaku/issues/2295)) ([306c8a62](https://github.com/waku-org/nwaku/commit/306c8a62)) +- vendor bump for 0.23.0 ([#2274](https://github.com/waku-org/nwaku/issues/2274)) ([385daf16](https://github.com/waku-org/nwaku/commit/385daf16)) +- peer_manager.nim - reduce logs from debug to trace ([#2279](https://github.com/waku-org/nwaku/issues/2279)) ([0cc0c805](https://github.com/waku-org/nwaku/commit/0cc0c805)) +- Cbindings allow mounting the Store protocol from libwaku ([#2276](https://github.com/waku-org/nwaku/issues/2276)) ([28142f40](https://github.com/waku-org/nwaku/commit/28142f40)) +- Better feedback invalid content topic ([#2254](https://github.com/waku-org/nwaku/issues/2254)) ([72a1f8c7](https://github.com/waku-org/nwaku/commit/72a1f8c7)) +- fix typos ([#2239](https://github.com/waku-org/nwaku/issues/2239)) ([958b9bd7](https://github.com/waku-org/nwaku/commit/958b9bd7)) +- creating prepare_release template ([#2225](https://github.com/waku-org/nwaku/issues/2225)) ([5883dbeb](https://github.com/waku-org/nwaku/commit/5883dbeb)) +- **rest:** refactor message cache ([#2221](https://github.com/waku-org/nwaku/issues/2221)) ([bebaa59c](https://github.com/waku-org/nwaku/commit/bebaa59c)) +- updating nim-json-serialization dependency ([#2248](https://github.com/waku-org/nwaku/issues/2248)) ([9f4e6f45](https://github.com/waku-org/nwaku/commit/9f4e6f45)) +- **store-archive:** Remove duplicated code ([#2234](https://github.com/waku-org/nwaku/issues/2234)) ([38e100e9](https://github.com/waku-org/nwaku/commit/38e100e9)) +- refactoring peer storage ([#2243](https://github.com/waku-org/nwaku/issues/2243)) ([c301e880](https://github.com/waku-org/nwaku/commit/c301e880)) +- postres driver allow setting the max number of connection from a parameter ([#2246](https://github.com/waku-org/nwaku/issues/2246)) ([b31c1823](https://github.com/waku-org/nwaku/commit/b31c1823)) +- deterministic message hash algorithm updated ([#2233](https://github.com/waku-org/nwaku/issues/2233)) ([a22ee604](https://github.com/waku-org/nwaku/commit/a22ee604)) +- **REST:** returning lightpush support and updated filter protocol ([#2219](https://github.com/waku-org/nwaku/issues/2219)) ([59ee3c69](https://github.com/waku-org/nwaku/commit/59ee3c69)) +- mics. improvements to cluster id and shards setup ([#2187](https://github.com/waku-org/nwaku/issues/2187)) ([897f4879](https://github.com/waku-org/nwaku/commit/897f4879)) +- update docs for rln-keystore-generator ([#2210](https://github.com/waku-org/nwaku/issues/2210)) ([8c5666d2](https://github.com/waku-org/nwaku/commit/8c5666d2)) +- removing automatic vacuuming from retention policy code ([#2228](https://github.com/waku-org/nwaku/issues/2228)) ([9ff441ab](https://github.com/waku-org/nwaku/commit/9ff441ab)) +- decoupling announced and listen addresses ([#2203](https://github.com/waku-org/nwaku/issues/2203)) ([ef8ffbdb](https://github.com/waku-org/nwaku/commit/ef8ffbdb)) +- **release:** update changelog for v0.22.0 release ([#2216](https://github.com/waku-org/nwaku/issues/2216)) ([9c4fdac6](https://github.com/waku-org/nwaku/commit/9c4fdac6)) +- Allow text/plain content type descriptor for json formatted content body ([#2209](https://github.com/waku-org/nwaku/issues/2209)) ([6d81e384](https://github.com/waku-org/nwaku/commit/6d81e384)) +- rewrite for clarity, update screenshots ([#2206](https://github.com/waku-org/nwaku/issues/2206)) ([a0ef3c2f](https://github.com/waku-org/nwaku/commit/a0ef3c2f)) +- **release:** update changelog for v0.21.3 release ([#2208](https://github.com/waku-org/nwaku/issues/2208)) ([f74474b4](https://github.com/waku-org/nwaku/commit/f74474b4)) + +This release supports the following [libp2p protocols](https://docs.libp2p.io/concepts/protocols/): +| Protocol | Spec status | Protocol id | +| ---: | :---: | :--- | +| [`11/WAKU2-RELAY`](https://rfc.vac.dev/spec/11/) | `stable` | `/vac/waku/relay/2.0.0` | +| [`12/WAKU2-FILTER`](https://rfc.vac.dev/spec/12/) | `draft` | `/vac/waku/filter/2.0.0-beta1`
`/vac/waku/filter-subscribe/2.0.0-beta1`
`/vac/waku/filter-push/2.0.0-beta1` | +| [`13/WAKU2-STORE`](https://rfc.vac.dev/spec/13/) | `draft` | `/vac/waku/store/2.0.0-beta4` | +| [`19/WAKU2-LIGHTPUSH`](https://rfc.vac.dev/spec/19/) | `draft` | `/vac/waku/lightpush/2.0.0-beta1` | +| [`66/WAKU2-METADATA`](https://rfc.vac.dev/spec/66/) | `raw` | `/vac/waku/metadata/1.0.0` | + +The Waku v1 implementation has been removed from this repository and can be found in a separate [Waku Legacy](https://github.com/waku-org/waku-legacy) repository. + ## v0.22.0 (2023-11-15) > Note: The `--topic` option is now deprecated in favor of a more specific options `--pubsub-topic` & `--content-topic` From ebad0385ef61c55cf0699a114fb64cb6e88d9680 Mon Sep 17 00:00:00 2001 From: Ivan FB <128452529+Ivansete-status@users.noreply.github.com> Date: Tue, 2 Jan 2024 14:01:18 +0100 Subject: [PATCH 173/274] ip colocation is parameterizable. If set to 0, it is disabled (#2323) The "ip colocation" concept refers to the maximum allowed peers from the same IP address. For example, we allow disabling this limit when the node works behind a reverse proxy. --- apps/wakunode2/app.nim | 1 + apps/wakunode2/external_config.nim | 11 ++++++++++- waku/node/builder.nim | 6 +++++- waku/node/peer_manager/peer_manager.nim | 8 +++++--- 4 files changed, 21 insertions(+), 5 deletions(-) diff --git a/apps/wakunode2/app.nim b/apps/wakunode2/app.nim index ec3e8cc658..2e264973e8 100644 --- a/apps/wakunode2/app.nim +++ b/apps/wakunode2/app.nim @@ -303,6 +303,7 @@ proc initNode(conf: WakuNodeConf, sendSignedPeerRecord = conf.relayPeerExchange, # We send our own signed peer record when peer exchange enabled agentString = some(conf.agentString) ) + builder.withColocationLimit(conf.colocationLimit) builder.withPeerManagerConfig(maxRelayPeers = conf.maxRelayPeers) node = ? builder.build().mapErr(proc (err: string): string = "failed to create waku node instance: " & err) diff --git a/apps/wakunode2/external_config.nim b/apps/wakunode2/external_config.nim index efc2058a66..20008677f0 100644 --- a/apps/wakunode2/external_config.nim +++ b/apps/wakunode2/external_config.nim @@ -17,7 +17,8 @@ import ../../waku/common/confutils/envvar/defs as confEnvvarDefs, ../../waku/common/confutils/envvar/std/net as confEnvvarNet, ../../waku/common/logging, - ../../waku/waku_enr + ../../waku/waku_enr, + ../../waku/node/peer_manager export confTomlDefs, @@ -143,6 +144,11 @@ type defaultValue: 50 name: "max-connections" }: uint16 + colocationLimit* {. + desc: "Max num allowed peers from the same IP. Set it to 0 to remove the limitation." + defaultValue: defaultColocationLimit() + name: "ip-colocation-limit" }: int + maxRelayPeers* {. desc: "Maximum allowed number of relay peers." name: "max-relay-peers" }: Option[int] @@ -524,6 +530,9 @@ proc defaultListenAddress*(): IpAddress = # Maybe there should be a config option for this. (static parseIpAddress("0.0.0.0")) +proc defaultColocationLimit*(): int = + return DefaultColocationLimit + proc parseCmdArg*(T: type Port, p: string): T = try: Port(parseInt(p)) diff --git a/waku/node/builder.nim b/waku/node/builder.nim index b1aa19f000..471c274cfe 100644 --- a/waku/node/builder.nim +++ b/waku/node/builder.nim @@ -35,6 +35,7 @@ type # Peer manager config maxRelayPeers: Option[int] + colocationLimit: int # Libp2p switch switchMaxConnections: Option[int] @@ -107,7 +108,9 @@ proc withPeerManagerConfig*(builder: var WakuNodeBuilder, maxRelayPeers = none(int)) = builder.maxRelayPeers = maxRelayPeers - +proc withColocationLimit*(builder: var WakuNodeBuilder, + colocationLimit: int) = + builder.colocationLimit = colocationLimit ## Waku switch @@ -170,6 +173,7 @@ proc build*(builder: WakuNodeBuilder): Result[WakuNode, string] = switch = switch, storage = builder.peerStorage.get(nil), maxRelayPeers = builder.maxRelayPeers, + colocationLimit = builder.colocationLimit, ) var node: WakuNode diff --git a/waku/node/peer_manager/peer_manager.nim b/waku/node/peer_manager/peer_manager.nim index 72ac4efd4b..ab15e137ae 100644 --- a/waku/node/peer_manager/peer_manager.nim +++ b/waku/node/peer_manager/peer_manager.nim @@ -62,7 +62,7 @@ const LogAndMetricsInterval = chronos.minutes(3) # Max peers that we allow from the same IP - ColocationLimit = 5 + DefaultColocationLimit* = 5 type PeerManager* = ref object of RootObj @@ -375,7 +375,9 @@ proc onPeerEvent(pm: PeerManager, peerId: PeerId, event: PeerEvent) {.async.} = pm.ipTable.mgetOrPut(ip.get, newSeq[PeerId]()).add(peerId) let peersBehindIp = pm.ipTable[ip.get] - if peersBehindIp.len > pm.colocationLimit: + # pm.colocationLimit == 0 disables the ip colocation limit + if pm.colocationLimit != 0 and + peersBehindIp.len > pm.colocationLimit: # in theory this should always be one, but just in case for peerId in peersBehindIp[0..<(peersBehindIp.len - pm.colocationLimit)]: debug "Pruning connection due to ip colocation", peerId = peerId, ip = ip @@ -411,7 +413,7 @@ proc new*(T: type PeerManager, initialBackoffInSec = InitialBackoffInSec, backoffFactor = BackoffFactor, maxFailedAttempts = MaxFailedAttempts, - colocationLimit = ColocationLimit,): PeerManager = + colocationLimit = DefaultColocationLimit,): PeerManager = let capacity = switch.peerStore.capacity let maxConnections = switch.connManager.inSema.size From ed09074cc3a18cc0aad1f0fb3606bb02b47a3dd6 Mon Sep 17 00:00:00 2001 From: Ivan FB <128452529+Ivansete-status@users.noreply.github.com> Date: Wed, 3 Jan 2024 13:11:50 +0100 Subject: [PATCH 174/274] chore: message.nim - set max message size to 150KiB according to spec (#2298) * message.nim: set max message size to 150KiB according to spec Using KiB instead of KB because that seems more aligned with the actual default defined in nim-libp2p (1024 * 1024) Spec details: https://rfc.vac.dev/spec/64/#message-size * test_protocol.nim: align test to current WakuMessage limit * test_waku_client.nim: adapt test to MaxWakuMessageSize change * make maxMessageSize configurable for wakunode2 * wakunode2 app now accepts max-num-bytes-msg-size with KiB, KB, or B units * testlib/wakunode.nim: set maxMessageSize: "1024 KiB" * test_waku_client.nim: remove duplicate check in "Valid Payload Sizes" * set DefaultMaxWakuMessageSizeStr as the only source of truth * external_config.nim: rename max-num-bytes-msg-size -> max-msg-size --- apps/wakunode2/app.nim | 9 +- apps/wakunode2/external_config.nim | 9 +- tests/common/test_all.nim | 3 +- tests/common/test_parse_size.nim | 107 ++++++++++++++++++++++ tests/resources/payloads.nim | 2 +- tests/testlib/wakunode.nim | 3 +- tests/waku_filter_v2/test_waku_client.nim | 19 ++-- tests/waku_relay/test_protocol.nim | 24 +++-- waku/common/utils/parse_size_units.nim | 53 +++++++++++ waku/node/waku_node.nim | 5 +- waku/waku_core/message.nim | 2 + waku/waku_core/message/default_values.nim | 10 ++ waku/waku_core/message/message.nim | 6 +- waku/waku_filter_v2/client.nim | 2 +- waku/waku_filter_v2/protocol.nim | 2 +- waku/waku_relay/protocol.nim | 7 +- 16 files changed, 228 insertions(+), 35 deletions(-) create mode 100644 tests/common/test_parse_size.nim create mode 100644 waku/common/utils/parse_size_units.nim create mode 100644 waku/waku_core/message/default_values.nim diff --git a/apps/wakunode2/app.nim b/apps/wakunode2/app.nim index 2e264973e8..e724f17a95 100644 --- a/apps/wakunode2/app.nim +++ b/apps/wakunode2/app.nim @@ -21,6 +21,7 @@ import metrics/chronos_httpserver import ../../waku/common/utils/nat, + ../../waku/common/utils/parse_size_units, ../../waku/common/databases/db_sqlite, ../../waku/waku_archive/driver/builder, ../../waku/waku_archive/retention_policy/builder, @@ -441,8 +442,14 @@ proc setupProtocols(node: WakuNode, else: conf.topics + let parsedMaxMsgSize = parseMsgSize(conf.maxMessageSize).valueOr: + return err("failed to parse 'max-num-bytes-msg-size' param: " & $error) + + debug "Setting max message size", num_bytes=parsedMaxMsgSize + try: - await mountRelay(node, pubsubTopics, peerExchangeHandler = peerExchangeHandler) + await mountRelay(node, pubsubTopics, peerExchangeHandler = peerExchangeHandler, + int(parsedMaxMsgSize)) except CatchableError: return err("failed to mount waku relay protocol: " & getCurrentExceptionMsg()) diff --git a/apps/wakunode2/external_config.nim b/apps/wakunode2/external_config.nim index 20008677f0..111c622e91 100644 --- a/apps/wakunode2/external_config.nim +++ b/apps/wakunode2/external_config.nim @@ -20,6 +20,9 @@ import ../../waku/waku_enr, ../../waku/node/peer_manager +include + ../../waku/waku_core/message/default_values + export confTomlDefs, confTomlNet, @@ -77,6 +80,11 @@ type defaultValue: "", name: "rln-relay-eth-private-key" }: string + maxMessageSize* {. + desc: "Maximum message size. Accepted units: KiB, KB, and B. e.g. 1024KiB; 1500 B; etc." + defaultValue: DefaultMaxWakuMessageSizeStr + name: "max-msg-size" }: string + case cmd* {. command defaultValue: noCommand }: StartUpCommand @@ -86,7 +94,6 @@ type desc: "Runs the registration function on-chain. By default, a dry-run will occur", defaultValue: false, name: "execute" .}: bool - of noCommand: ## Application-level configuration diff --git a/tests/common/test_all.nim b/tests/common/test_all.nim index d1573c5894..fbc8ada09f 100644 --- a/tests/common/test_all.nim +++ b/tests/common/test_all.nim @@ -4,4 +4,5 @@ import ./test_enr_builder, ./test_envvar_serialization, ./test_protobuf_validation, - ./test_sqlite_migrations + ./test_sqlite_migrations, + ./test_parse_size diff --git a/tests/common/test_parse_size.nim b/tests/common/test_parse_size.nim new file mode 100644 index 0000000000..7d3f880fbe --- /dev/null +++ b/tests/common/test_parse_size.nim @@ -0,0 +1,107 @@ +{.used.} + +import + testutils/unittests, + stew/results +import + ../../waku/common/utils/parse_size_units + +suite "Size serialization test": + test "parse normal sizes": + var sizeInBytesRes = parseMsgSize("15 KiB") + assert sizeInBytesRes.isOk(), sizeInBytesRes.error + check sizeInBytesRes.get() == 15360 + + sizeInBytesRes = parseMsgSize(" 1048576 B") + assert sizeInBytesRes.isOk(), sizeInBytesRes.error + check sizeInBytesRes.get() == 1048576 + + sizeInBytesRes = parseMsgSize("150 B") + assert sizeInBytesRes.isOk(), sizeInBytesRes.error + check sizeInBytesRes.get() == 150 + + sizeInBytesRes = parseMsgSize("150 b") + assert sizeInBytesRes.isOk(), sizeInBytesRes.error + check sizeInBytesRes.get() == 150 + + sizeInBytesRes = parseMsgSize("150b") + assert sizeInBytesRes.isOk(), sizeInBytesRes.error + check sizeInBytesRes.get() == 150 + + sizeInBytesRes = parseMsgSize("1024kib") + assert sizeInBytesRes.isOk(), sizeInBytesRes.error + check sizeInBytesRes.get() == 1048576 + + sizeInBytesRes = parseMsgSize("1024KiB") + assert sizeInBytesRes.isOk(), sizeInBytesRes.error + check sizeInBytesRes.get() == 1048576 + + sizeInBytesRes = parseMsgSize("1024KB") + assert sizeInBytesRes.isOk(), sizeInBytesRes.error + check sizeInBytesRes.get() == 1024000 + + sizeInBytesRes = parseMsgSize("1024kb") + assert sizeInBytesRes.isOk(), sizeInBytesRes.error + check sizeInBytesRes.get() == 1024000 + + sizeInBytesRes = parseMsgSize("1.5 kib") + assert sizeInBytesRes.isOk(), sizeInBytesRes.error + check sizeInBytesRes.get() == 1536 + + sizeInBytesRes = parseMsgSize("1,5 kb") + assert sizeInBytesRes.isOk(), sizeInBytesRes.error + check sizeInBytesRes.get() == 1500 + + sizeInBytesRes = parseMsgSize("0,5 kb") + assert sizeInBytesRes.isOk(), sizeInBytesRes.error + check sizeInBytesRes.get() == 500 + + sizeInBytesRes = parseMsgSize("1.5 kb") + assert sizeInBytesRes.isOk(), sizeInBytesRes.error + check sizeInBytesRes.get() == 1500 + + sizeInBytesRes = parseMsgSize("0.5 kb") + assert sizeInBytesRes.isOk(), sizeInBytesRes.error + check sizeInBytesRes.get() == 500 + + sizeInBytesRes = parseMsgSize(" 1.5 KB") + assert sizeInBytesRes.isOk(), sizeInBytesRes.error + check sizeInBytesRes.get() == 1500 + + sizeInBytesRes = parseMsgSize(" 0.5 kb") + assert sizeInBytesRes.isOk(), sizeInBytesRes.error + check sizeInBytesRes.get() == 500 + + sizeInBytesRes = parseMsgSize(" 1024 kib") + assert sizeInBytesRes.isOk(), sizeInBytesRes.error + check sizeInBytesRes.get() == uint64(1024 * 1024) + + test "parse wrong sizes": + var sizeInBytesRes = parseMsgSize("150K") + assert sizeInBytesRes.isErr(), "The size should be considered incorrect" + + sizeInBytesRes = parseMsgSize("150 iB") + assert sizeInBytesRes.isErr(), "The size should be considered incorrect" + + sizeInBytesRes = parseMsgSize("150 ib") + assert sizeInBytesRes.isErr(), "The size should be considered incorrect" + + sizeInBytesRes = parseMsgSize("150 MB") + assert sizeInBytesRes.isErr(), "The size should be considered incorrect" + + ## notice that we don't allow MB units explicitly. If someone want to set 1MiB, the + ## s/he should use 1024 KiB + sizeInBytesRes = parseMsgSize("150 MiB") + assert sizeInBytesRes.isErr(), "The size should be considered incorrect" + + sizeInBytesRes = parseMsgSize("150MiB") + assert sizeInBytesRes.isErr(), "The size should be considered incorrect" + + sizeInBytesRes = parseMsgSize("150K") + assert sizeInBytesRes.isErr(), "The size should be considered incorrect" + + sizeInBytesRes = parseMsgSize("150 K") + assert sizeInBytesRes.isErr(), "The size should be considered incorrect" + + sizeInBytesRes = parseMsgSize("15..0 KiB") + assert sizeInBytesRes.isErr(), "The size should be considered incorrect" \ No newline at end of file diff --git a/tests/resources/payloads.nim b/tests/resources/payloads.nim index d2f74e9f11..8fabeee2f1 100644 --- a/tests/resources/payloads.nim +++ b/tests/resources/payloads.nim @@ -70,7 +70,7 @@ proc getSampleJsonList*(): JsonNode = ] -proc getByteSequence*(bytesNumber: int): seq[byte] = +proc getByteSequence*(bytesNumber: uint64): seq[byte] = result = newSeq[byte](bytesNumber) for i in 0 ..< bytesNumber: result[i] = cast[byte](i mod 256) diff --git a/tests/testlib/wakunode.nim b/tests/testlib/wakunode.nim index 274e30efc4..80d6d4d6af 100644 --- a/tests/testlib/wakunode.nim +++ b/tests/testlib/wakunode.nim @@ -33,7 +33,8 @@ proc defaultTestWakuNodeConf*(): WakuNodeConf = nat: "any", maxConnections: 50, topics: @[], - relay: true + relay: true, + maxMessageSize: "1024 KiB" ) proc newTestWakuNode*(nodeKey: crypto.PrivateKey, diff --git a/tests/waku_filter_v2/test_waku_client.nim b/tests/waku_filter_v2/test_waku_client.nim index b619b473f3..3d4d489f34 100644 --- a/tests/waku_filter_v2/test_waku_client.nim +++ b/tests/waku_filter_v2/test_waku_client.nim @@ -21,7 +21,8 @@ import import ../../../waku/[ node/peer_manager, - waku_core + waku_core, + waku_filter/rpc_codec ], ../../../waku/waku_filter_v2/[ common, @@ -2009,9 +2010,8 @@ suite "Waku Filter - End to End": msg1 = fakeWakuMessage(contentTopic=contentTopic, payload=getByteSequence(1024)) # 1KiB msg2 = fakeWakuMessage(contentTopic=contentTopic, payload=getByteSequence(10*1024)) # 10KiB msg3 = fakeWakuMessage(contentTopic=contentTopic, payload=getByteSequence(100*1024)) # 100KiB - msg4 = fakeWakuMessage(contentTopic=contentTopic, payload=getByteSequence(3*1024*1024 + 1023*1024 + 968)) # 4MiB - 56B -> Max Size (Inclusive Limit) - msg5 = fakeWakuMessage(contentTopic=contentTopic, payload=getByteSequence(3*1024*1024 + 1023*1024 + 969)) # 4MiB - 55B -> Max Size (Exclusive Limit) - msg6 = fakeWakuMessage(contentTopic=contentTopic, payload=getByteSequence(3*1024*1024 + 1023*1024 + 970)) # 4MiB - 54B -> Out of Max Size + msg4 = fakeWakuMessage(contentTopic=contentTopic, payload=getByteSequence(MaxRpcSize - 1024)) # Max Size (Inclusive Limit) + msg5 = fakeWakuMessage(contentTopic=contentTopic, payload=getByteSequence(MaxRpcSize)) # Max Size (Exclusive Limit) # When sending the 1KiB message await wakuFilter.handleMessage(pubsubTopic, msg1) @@ -2045,7 +2045,7 @@ suite "Waku Filter - End to End": pushedMsgPubsubTopic3 == pubsubTopic pushedMsg3 == msg3 - # When sending the 4MiB - 56B message + # When sending the MaxRpcSize - 1024B message pushHandlerFuture = newPushHandlerFuture() # Clear previous future await wakuFilter.handleMessage(pubsubTopic, msg4) @@ -2056,20 +2056,13 @@ suite "Waku Filter - End to End": pushedMsgPubsubTopic4 == pubsubTopic pushedMsg4 == msg4 - # When sending the 4MiB - 55B message + # When sending the MaxRpcSize message pushHandlerFuture = newPushHandlerFuture() # Clear previous future await wakuFilter.handleMessage(pubsubTopic, msg5) # Then the message is not pushed to the client check not await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) - # When sending the 4MiB - 54B message - pushHandlerFuture = newPushHandlerFuture() # Clear previous future - await wakuFilter.handleMessage(pubsubTopic, msg6) - - # Then the message is not pushed to the client - check not await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) - suite "Security and Privacy": asyncTest "Filter Client can receive messages after Client and Server reboot": # Given a clean client and server diff --git a/tests/waku_relay/test_protocol.nim b/tests/waku_relay/test_protocol.nim index eee7cbe5ca..74e1ba2d50 100644 --- a/tests/waku_relay/test_protocol.nim +++ b/tests/waku_relay/test_protocol.nim @@ -23,7 +23,8 @@ import node/peer_manager, waku_relay/protocol, waku_relay, - waku_core + waku_core, + waku_core/message/codec ], ../testlib/[ wakucore, @@ -1003,13 +1004,22 @@ suite "Waku Relay": await sleepAsync(500.millis) # Given some valid payloads + let + msgWithoutPayload = + fakeWakuMessage(contentTopic=contentTopic, payload=getByteSequence(0)) + sizeEmptyMsg = uint64(msgWithoutPayload.encode().buffer.len) + let msg1 = fakeWakuMessage(contentTopic=contentTopic, payload=getByteSequence(1024)) # 1KiB msg2 = fakeWakuMessage(contentTopic=contentTopic, payload=getByteSequence(10*1024)) # 10KiB msg3 = fakeWakuMessage(contentTopic=contentTopic, payload=getByteSequence(100*1024)) # 100KiB - msg4 = fakeWakuMessage(contentTopic=contentTopic, payload=getByteSequence(1023*1024 + 933)) # 1MiB - 91B -> Max Size (Inclusive Limit) - msg5 = fakeWakuMessage(contentTopic=contentTopic, payload=getByteSequence(1023*1024 + 934)) # 1MiB - 90B -> Max Size (Exclusive Limit) - msg6 = fakeWakuMessage(contentTopic=contentTopic, payload=getByteSequence(1024*1024)) # 1MiB -> Out of Max Size + msg4 = fakeWakuMessage(contentTopic=contentTopic, payload=getByteSequence(MaxWakuMessageSize - sizeEmptyMsg - 38)) # Max Size (Inclusive Limit) + msg5 = fakeWakuMessage(contentTopic=contentTopic, payload=getByteSequence(MaxWakuMessageSize - sizeEmptyMsg - 37)) # Max Size (Exclusive Limit) + msg6 = fakeWakuMessage(contentTopic=contentTopic, payload=getByteSequence(MaxWakuMessageSize)) # MaxWakuMessageSize -> Out of Max Size + + # Notice that the message is wrapped with more data in https://github.com/status-im/nim-libp2p/blob/3011ba4326fa55220a758838835797ff322619fc/libp2p/protocols/pubsub/gossipsub.nim#L627-L632 + # And therefore, we need to substract a hard-coded values above (for msg4 & msg5), obtained empirically, + # running the tests with 'TRACE' level: nim c -r -d:chronicles_log_level=DEBUG -d:release -d:postgres -d:rln --passL:librln_v0.3.4.a --passL:-lm -d:nimDebugDlOpen tests/waku_relay/test_protocol.nim test "Valid Payload Sizes" # When sending the 1KiB message handlerFuture = newPushHandlerFuture() @@ -1047,7 +1057,7 @@ suite "Waku Relay": (pubsubTopic, msg3) == handlerFuture.read() (pubsubTopic, msg3) == otherHandlerFuture.read() - # When sending the 1023KiB + 933B message + # When sending the 'MaxWakuMessageSize - sizeEmptyMsg - 38' message handlerFuture = newPushHandlerFuture() otherHandlerFuture = newPushHandlerFuture() discard await node.publish(pubsubTopic, msg4) @@ -1059,7 +1069,7 @@ suite "Waku Relay": (pubsubTopic, msg4) == handlerFuture.read() (pubsubTopic, msg4) == otherHandlerFuture.read() - # When sending the 1023KiB + 934B message + # When sending the 'MaxWakuMessageSize - sizeEmptyMsg - 37' message handlerFuture = newPushHandlerFuture() otherHandlerFuture = newPushHandlerFuture() discard await node.publish(pubsubTopic, msg5) @@ -1070,7 +1080,7 @@ suite "Waku Relay": not await otherHandlerFuture.withTimeout(FUTURE_TIMEOUT) (pubsubTopic, msg5) == handlerFuture.read() - # When sending the 1MiB + # When sending the 'MaxWakuMessageSize' message handlerFuture = newPushHandlerFuture() otherHandlerFuture = newPushHandlerFuture() discard await node.publish(pubsubTopic, msg6) diff --git a/waku/common/utils/parse_size_units.nim b/waku/common/utils/parse_size_units.nim new file mode 100644 index 0000000000..af6308dce7 --- /dev/null +++ b/waku/common/utils/parse_size_units.nim @@ -0,0 +1,53 @@ + +import + std/strutils, + stew/results, + regex + +proc parseMsgSize*(input: string): Result[uint64, string] = + ## Parses size strings such as "1.2 KiB" or "3Kb" and returns the equivalent number of bytes + ## if the parse task goes well. If not, it returns an error describing the problem. + + const RegexDef = """\s*(\d+([\,\.]\d*)?)\s*([Kk]{0,1}[i]?[Bb]{1})""" + const RegexParseSize = re2(RegexDef) + + var m: RegexMatch2 + if input.match(RegexParseSize, m) == false: + return err("error in parseSize. regex is not matching: " & RegexDef) + + var value: float + + try: + value = parseFloat(input[m.captures[0]].replace(",", ".")) + except ValueError: + return err("invalid size in parseSize: " & getCurrentExceptionMsg() & + " error parsing: " & input[m.captures[0]] & " KKK : " & $m) + + let units = input[m.captures[2]].toLowerAscii() # units is "kib", or "kb", or "b". + + var multiplier: float + case units: + of "kb": + multiplier = 1000 + of "kib": + multiplier = 1024 + of "ib": + return err("wrong units. ib or iB aren't allowed.") + else: ## bytes + multiplier = 1 + + value = value * multiplier + + return ok(uint64(value)) + +proc parseCorrectMsgSize*(input: string): uint64 = + ## This proc always returns an int and wraps the following proc: + ## + ## proc parseMsgSize*(input: string): Result[int, string] = ... + ## + ## in case of error, it just returns 0, and this is expected to + ## be called only from a controlled and well-known inputs + + let ret = parseMsgSize(input).valueOr: + return 0 + return ret diff --git a/waku/node/waku_node.nim b/waku/node/waku_node.nim index e5df27dcc3..fe7636639b 100644 --- a/waku/node/waku_node.nim +++ b/waku/node/waku_node.nim @@ -369,7 +369,8 @@ proc startRelay*(node: WakuNode) {.async.} = proc mountRelay*(node: WakuNode, pubsubTopics: seq[string] = @[], - peerExchangeHandler = none(RoutingRecordsHandler)) {.async, gcsafe.} = + peerExchangeHandler = none(RoutingRecordsHandler), + maxMessageSize = int(MaxWakuMessageSize)) {.async, gcsafe.} = if not node.wakuRelay.isNil(): error "wakuRelay already mounted, skipping" return @@ -377,7 +378,7 @@ proc mountRelay*(node: WakuNode, ## The default relay topics is the union of all configured topics plus default PubsubTopic(s) info "mounting relay protocol" - let initRes = WakuRelay.new(node.switch) + let initRes = WakuRelay.new(node.switch, maxMessageSize) if initRes.isErr(): error "failed mounting relay protocol", error=initRes.error return diff --git a/waku/waku_core/message.nim b/waku/waku_core/message.nim index 8b57cd7bb4..184c76f018 100644 --- a/waku/waku_core/message.nim +++ b/waku/waku_core/message.nim @@ -1,9 +1,11 @@ import ./message/message, + ./message/default_values, ./message/codec, ./message/digest export message, + default_values, codec, digest diff --git a/waku/waku_core/message/default_values.nim b/waku/waku_core/message/default_values.nim new file mode 100644 index 0000000000..0e1c3052bb --- /dev/null +++ b/waku/waku_core/message/default_values.nim @@ -0,0 +1,10 @@ + +import + ../../common/utils/parse_size_units + +const + ## https://rfc.vac.dev/spec/64/#message-size + DefaultMaxWakuMessageSizeStr* = "150KiB" # Remember that 1 MiB is the PubSub default + MaxWakuMessageSize* = parseCorrectMsgSize(DefaultMaxWakuMessageSizeStr) + + DefaultSafetyBufferProtocolOverhead* = 64 * 1024 # overhead measured in bytes diff --git a/waku/waku_core/message/message.nim b/waku/waku_core/message/message.nim index fa79d7fcc4..1a6a7bcac3 100644 --- a/waku/waku_core/message/message.nim +++ b/waku/waku_core/message/message.nim @@ -11,14 +11,12 @@ else: import ../topics, - ../time + ../time, + ./default_values const MaxMetaAttrLength* = 64 # 64 bytes - MaxWakuMessageSize* = 1024 * 1024 # 1 Mibytes. Corresponds to PubSub default - - type WakuMessage* = object # Data payload transmitted. payload*: seq[byte] diff --git a/waku/waku_filter_v2/client.nim b/waku/waku_filter_v2/client.nim index 72da090481..fbcda3aa49 100644 --- a/waku/waku_filter_v2/client.nim +++ b/waku/waku_filter_v2/client.nim @@ -128,7 +128,7 @@ proc registerPushHandler*(wfc: WakuFilterClient, handler: FilterPushHandler) = proc initProtocolHandler(wfc: WakuFilterClient) = proc handler(conn: Connection, proto: string) {.async.} = - let buf = await conn.readLp(MaxPushSize) + let buf = await conn.readLp(int(MaxPushSize)) let decodeRes = MessagePush.decode(buf) if decodeRes.isErr(): diff --git a/waku/waku_filter_v2/protocol.nim b/waku/waku_filter_v2/protocol.nim index 3af3943365..13824fd11a 100644 --- a/waku/waku_filter_v2/protocol.nim +++ b/waku/waku_filter_v2/protocol.nim @@ -226,7 +226,7 @@ proc initProtocolHandler(wf: WakuFilter) = proc handler(conn: Connection, proto: string) {.async.} = trace "filter subscribe request handler triggered", peerId=conn.peerId - let buf = await conn.readLp(MaxSubscribeSize) + let buf = await conn.readLp(int(MaxSubscribeSize)) let decodeRes = FilterSubscribeRequest.decode(buf) if decodeRes.isErr(): diff --git a/waku/waku_relay/protocol.nim b/waku/waku_relay/protocol.nim index dd58b38c2e..17dee3af1e 100644 --- a/waku/waku_relay/protocol.nim +++ b/waku/waku_relay/protocol.nim @@ -151,7 +151,10 @@ proc initProtocolHandler(w: WakuRelay) = w.handler = handler w.codec = WakuRelayCodec -proc new*(T: type WakuRelay, switch: Switch): WakuRelayResult[T] = +proc new*(T: type WakuRelay, + switch: Switch, + maxMessageSize = int(MaxWakuMessageSize)): WakuRelayResult[T] = + ## maxMessageSize: max num bytes that are allowed for the WakuMessage var w: WakuRelay try: @@ -162,7 +165,7 @@ proc new*(T: type WakuRelay, switch: Switch): WakuRelayResult[T] = sign = false, triggerSelf = true, msgIdProvider = defaultMessageIdProvider, - maxMessageSize = MaxWakuMessageSize, + maxMessageSize = maxMessageSize, parameters = GossipsubParameters ) From b0c780528b5610f8b6c5e3784dc9faadcb7b6917 Mon Sep 17 00:00:00 2001 From: Ivan FB <128452529+Ivansete-status@users.noreply.github.com> Date: Wed, 3 Jan 2024 13:13:47 +0100 Subject: [PATCH 175/274] docs: add benchmar around postgres adoption (#2316) --- .../digram_multiple_nodes_one_database.png | Bin 0 -> 206077 bytes docs/benchmarks/imgs/insert-time-dist-2.png | Bin 0 -> 24921 bytes docs/benchmarks/imgs/insert-time-dist-3.png | Bin 0 -> 24443 bytes docs/benchmarks/imgs/insert-time-dist-4.png | Bin 0 -> 23470 bytes docs/benchmarks/imgs/insert-time-dist-5.png | Bin 0 -> 25031 bytes docs/benchmarks/imgs/insert-time-dist-6.png | Bin 0 -> 23649 bytes .../imgs/insert-time-dist-postgres-2.png | Bin 0 -> 20367 bytes .../imgs/insert-time-dist-postgres-3.png | Bin 0 -> 19415 bytes .../imgs/insert-time-dist-postgres.png | Bin 0 -> 17796 bytes docs/benchmarks/imgs/insert-time-dist.png | Bin 0 -> 22870 bytes docs/benchmarks/imgs/jmeter-results.png | Bin 0 -> 16031 bytes .../imgs/num-queries-per-minute.png | Bin 0 -> 133042 bytes docs/benchmarks/imgs/query-time-dist-2.png | Bin 0 -> 130720 bytes docs/benchmarks/imgs/query-time-dist-3.png | Bin 0 -> 59575 bytes docs/benchmarks/imgs/query-time-dist-4.png | Bin 0 -> 103766 bytes docs/benchmarks/imgs/query-time-dist-5.png | Bin 0 -> 99981 bytes docs/benchmarks/imgs/query-time-dist-6.png | Bin 0 -> 58551 bytes .../imgs/query-time-dist-postgres-2.png | Bin 0 -> 20119 bytes .../imgs/query-time-dist-postgres-3.png | Bin 0 -> 17039 bytes .../imgs/query-time-dist-postgres.png | Bin 0 -> 15791 bytes docs/benchmarks/imgs/query-time-dist.png | Bin 0 -> 24124 bytes .../imgs/topology-only-store-protocol.png | Bin 0 -> 116756 bytes docs/benchmarks/imgs/using-jmeter.png | Bin 0 -> 73641 bytes docs/benchmarks/postgres-adoption.md | 234 ++++++++++++++++++ 24 files changed, 234 insertions(+) create mode 100644 docs/benchmarks/imgs/digram_multiple_nodes_one_database.png create mode 100644 docs/benchmarks/imgs/insert-time-dist-2.png create mode 100644 docs/benchmarks/imgs/insert-time-dist-3.png create mode 100644 docs/benchmarks/imgs/insert-time-dist-4.png create mode 100644 docs/benchmarks/imgs/insert-time-dist-5.png create mode 100644 docs/benchmarks/imgs/insert-time-dist-6.png create mode 100644 docs/benchmarks/imgs/insert-time-dist-postgres-2.png create mode 100644 docs/benchmarks/imgs/insert-time-dist-postgres-3.png create mode 100644 docs/benchmarks/imgs/insert-time-dist-postgres.png create mode 100644 docs/benchmarks/imgs/insert-time-dist.png create mode 100644 docs/benchmarks/imgs/jmeter-results.png create mode 100644 docs/benchmarks/imgs/num-queries-per-minute.png create mode 100644 docs/benchmarks/imgs/query-time-dist-2.png create mode 100644 docs/benchmarks/imgs/query-time-dist-3.png create mode 100644 docs/benchmarks/imgs/query-time-dist-4.png create mode 100644 docs/benchmarks/imgs/query-time-dist-5.png create mode 100644 docs/benchmarks/imgs/query-time-dist-6.png create mode 100644 docs/benchmarks/imgs/query-time-dist-postgres-2.png create mode 100644 docs/benchmarks/imgs/query-time-dist-postgres-3.png create mode 100644 docs/benchmarks/imgs/query-time-dist-postgres.png create mode 100644 docs/benchmarks/imgs/query-time-dist.png create mode 100644 docs/benchmarks/imgs/topology-only-store-protocol.png create mode 100644 docs/benchmarks/imgs/using-jmeter.png create mode 100644 docs/benchmarks/postgres-adoption.md diff --git a/docs/benchmarks/imgs/digram_multiple_nodes_one_database.png b/docs/benchmarks/imgs/digram_multiple_nodes_one_database.png new file mode 100644 index 0000000000000000000000000000000000000000..e26f392cbc5beeb0a3e6d6ec0d48dbc004c6dc5d GIT binary patch literal 206077 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%0An?m2VE5=B9d-D%T6mW?iu# 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 HdC30&Yz5x> literal 0 HcmV?d00001 diff --git a/docs/benchmarks/imgs/insert-time-dist-2.png b/docs/benchmarks/imgs/insert-time-dist-2.png new file mode 100644 index 0000000000000000000000000000000000000000..a5af6a361a32f7ef0bd52669d523cd766a2e2a5d GIT binary patch literal 24921 zcmeFZbyQrz)+Y*qK=2SG5G({waCZ_Q5Zr>hHty~T1b4T_-Q6`v;{t9DiWwsf5imX{UBKz)M>2M32C@kLY-4i1?L4i28{ z1=3>;;xI7x>BB)-;_HjY;`zcT=q;3E&^LCZo{1Cu z5)SSyoP_A7udZo_%O0Lzr`sMLRN17lQMyz5wB7uSu|d2ii!O)>@8)_OUCGz-}Qy1pXtX$p|inY zEGWtTMkdb)Svzm9U9Vifn2a65)IG}TW*0KNt|eVX&pTdX|9gSF>S$kq`}Z2`rfNDm zx_AFxbnd3`JHfkkWl719f2Rmi{r_j8ETl>nkR(j-68~FQ=2G6D=Ka%y zCN&QGMhqAUNQpycnE&X=@(8&$H5Ib|XL(&8)RMa15+a(v^4o_@&jBCR{1!@MFYJcy$!qtgL1sddvk_F$1}4z@rxAcY83!vu;qG6Ob#$UmJXQjxsb@q zt4}MIWUEt=^Jf0u)G&U5_+km{|?$~&k1T({@Hu~_g!2nYRu!1udYv&TPg998j-l->b zAIuoP_5 z=S> ze8qP4jY^uoD#6&TuC0TFaq4Jpu>G@C5)VZ%Mn!_ogj49#UeQ8L5pk~B|L~}x;tP4k z`BaUaugBI~=MGGeU+0Sw_ZHMt^-|R+UgCeX(uC+PL}!*J+eb8nGG7^z-F4PzXo-Fg z6`#M`DR6`M<*31#i+f{s90@2?8G z3E$|<8j8=!4Jyp%b6*|nJS(J@d7KwI> z#R_i~o2yan!x?y3Z!ESn%HXF-s|B1-k3y^@HSSIcANI5soXkfz=_V3i22&gES6@_@ zq^x=gI7UorNPQmnC{=HZ_zB)OmE_G4VTi-Uope^Hff_L+{OaoYaV4TfnO3bQ;T}aM zQ?wRNw&SQxy2DvpXJtKX^bqAXOiKD`2vXL1Q!-l!YoMY}Nf&0X!!@Ze*vh#41qWW- zAMivSTFYYD6YbF0cZdBk9NOc=6FCI@**ui5*#i$J6flX4e-N^W-mZO-Y}Tp>trh@} z`RCbGdxoG83|Dt-SDQ|<;2pa+Px~M4Z?i6Zb zKlB^uPViexv7ZgPkO4%(gE#r`Yivi2V%~My-@PQW8a4_qu*$DlN%!GB3LGwm&?lw% z7hTh)&hn2SJ-E@k>G2L^F?{vBc{6suErZDge}%(k$P)VC#Y=&d^4pP)Z*^e3!N&@i zVSfK)J?-bu7B)0vO-2pn_bl!%X4NgrL-n`U$$%a`VoOVScc!xZ%Ex8zHab)x;9&A$ zSQo2F0K6zO6tbhnnkSTDqt#o};S&xFGagqO;%i5spagnQ*HvC`DYrK6z4T1(wz>Bp zq2esOr3?)#sJ_~DWJ1DaO`hK{pO32x>A?ND+rrj=r_ZZ=YS}src6#r^L)hURK30+3dzm;wGpaHepj%-ysqkA3 zvm{+(wB$L%k*-W~H%ZrZE2Kr)lKa<0uMGnBq`Ga3P|JOq#7s-zi|c*i1Sa6dJ&Pb5 zcxIKF7Dy#$%zPQ}=2SH z(Sg(PgD=+5+v{&T1D*yf4h3Ovc?&n*t)ch@*C+GHPxbmA?vhH%3Tv%LrFWEMx409; zjjk84CXuL)-dd=hE(+}^rk=kg9NNK|9pO{W#@Rq=NTy?OdEbx?ZB^j+7uOxt-#W+V zwB+t7iyY2&Go+p;U7ALTV&8E7i8k}7C*lY(SpZ~m%+4n%$8whJ1aR&()aa9Bs6K0j zmzmHFqPIPIX?-#v{xbLx2m7~#9lnf^-&$hMQ{jw9Q=3-nK}_2i2NUp7AF<+KL!lac6~t(w|)-;ls4MXqFfAY@=@z*tq_@I9T0L(=mz3B6zRU{agxlgL$L z

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 K}~G% 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 C509Au literal 0 HcmV?d00001 diff --git a/docs/benchmarks/imgs/insert-time-dist-3.png b/docs/benchmarks/imgs/insert-time-dist-3.png new file mode 100644 index 0000000000000000000000000000000000000000..34980c751bcc005c08607043f81313cf50835bc7 GIT binary patch literal 24443 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 literal 0 HcmV?d00001 diff --git a/docs/benchmarks/imgs/insert-time-dist-4.png b/docs/benchmarks/imgs/insert-time-dist-4.png new file mode 100644 index 0000000000000000000000000000000000000000..7287c82f5b642da3070df9892dee87425f5981cc GIT binary patch literal 23470 zcmeFZWl&sA)GkU4La>A+xN8XR&LoiF7BmD87F-5`GaeQ+8V8wZW~OJa-FvOIpI*KC>FxUOtb_LosD?*Y_V?H61No-A!FAu&f*$?JYQg zW-b;M4!|#tuE!5Lr7%J)cS15Q7N)M&jt+EM*7g=yc5V)IJVJC1j$i5cc=-6~cm>7y z_{8`H4RNq?v9Rc{6yCkn^2j_`^7cu*Ogp)aA!nf=ZeQ9-3t)B06FQD@p zwh_~s?gb0IOGS2Ywk4}FXzln?#geg7&eGba65l`5GWzvNYd`Huv|hY__K;zds*C9< zu{2>IJv})K8vQr~>)!off2JJxe$ot{yLbTjBC~g_hiL^4+3yB6qcn2XT`{7J0|iO^_u2cak*I z6pwrKv=lKC8my#Y0(E|D-TKE}aY0lcnvBNa+fLwc22&lYIh&g7VQ#6Cs zuQ@b`n|m#&-->@7&y$I^@uSPph_d&Ul?0;fJ>+)e{uauK1Rk^Re$cT9r`c+23#9d> zk4mNz|7y>HvZV1tT3bc~+KvSJ{MLE1QHKmhsfbsNa6rrG#s|!OCplOO>rj?;ufVj% zH!D#7?Mm5(fM#yYqr(dpG|#Y05j3Y1(>fQVgM3?;Pajr{B-t!E^E*|(e3sbYXt!l@@iQ{rwLD5tt9H^49djRD^LF=}Z#gQy2bUcAokDA|_Gr$q7L93Q8V7EoE0j;! zEo?Ecv7hLy)pRu7vw~IcUOwU|cj%aWvgPak{y>;ZW1v)*wCeTz#R@41;eB+wY^IFr zb4{-FP25D}UQOviJT9rqy}HjOkQLiRsADRl-vun#X5PD;1{rwQYJM4V#uav62b=E? zJT|P45C;#jkqzJMH_oPTj!oYj@>zo1NtA{O+hJ*>&8WEkRH4h`ro$yiKG4jruKU4k zeePc}Fm2BJDQ~3#z{Pv%DqRw5!AIrnuM57MbFDcJGH^as>uj~+ae!+=3_i`l7M!1G zA9I;?*O4ze8FHQHaE9)-U;;?~$Esk7!BTMz0#EtPX=V-spW;Fj5tQ4R z)!p|+S!fkmedn2R&p%&B2LGB{wx2v5Jh!R^uV^_?r@i-4dFF`RLr9!@J$v@;4T;%t zR+n!MrNUR?*-l%62#{!o=P~U~w@@{$u#Y`iI^*BOtRfF!$*0wJQumuB+;n&eB|@0z}lLr47*d&R$K<5y_t{;CAE2JX|+KzpD) zwaAL#Li=kU`r1yhh=ON7`sE9yM6#enQ0982)EX5f57?$_FgEl!Vb zn}F=!d5#6n2%;RTPfO>J3YzY$^_$Z%km@Qzkl$ku6l1yx00oJLJaJs3Lj;F-oE)9v zKMtO2xPe155E9pdSb8eQ&$EVoSA4@>fBQvdDRKEKPgkAzX|va>(uz zk}4%}AeUc|&=|2ClYkFr-k=kJ(LyZu7~Vs28oyEc`4AJj z=1=Y4klxcV!tWzDlQEoFp^0L~~mf0ZXy(N{($e<<|{=%%4 zJ-d3vFD!&5@S7h5c}QHynLX$mQ+aQ^>Fg*?xz&?tF3eP@Ln;M;UBqv;@q`9lHn-6) zc&KlEE15#jtl8}Rh7F3m6izdK_Iamb!qa5P!)1c5&6fR`BelD2dNggl-VHT(08G{V zDhOABFl!n2P@Z={kyj;l`-S|d;e^5cm*0IKl_M*g zksFO6dz$-d7()n)M!5IWy}Pw;NF@5z(7s%bS{BaT7spi17qYNJqVp^^(ZqJ4482>i z3|)7kHJIbbMlcPQwK8%mCXF|jl9n@dB*yQCik*D0PL4(lMngVm*0i3Ey?oVcm;JHr zC5&SYfWGt;lFi*iHAB42xsDHPyT8Tv0~eB#II_hvjJLZ_xJN#ZuEgXX)Qcj&EEAX3 zu$=#$agcIV>(=S}^Ca$a|N0d%Lo2A0BwJ-YxHGF4B?GIzxRvZF2Z5qvyp|y=BW)oE zU+$gXqCSw2-V-O`MZ|@8e6{Z$OCikoU7^74u?n!_2LWa9jtTNrwmS6J^e)RpA--ML` zN{Cwtb)tXxw{b%@y25gkXWDn&mKO48kPK)yvk|(u4 z1?|d%5AFqwB8^B`7l@ws^PuAN7LyGJXmh+0bC5Q;NzHJ+{ao(>sX<9SKAeqM3eJKb zRdY=h-f^VUL~C8f9BX5P1dyE0r2S53{!6^As;ZY(p7%G5-0@0mbJpa}Nj@Y>rR}cV z^15Gsp;#al?&n92rY*WzPt+7;mtiH@Ej$Ze4j}V*Ym|PMWE=(w<_m6kmeK3KVBnX0 z=w|x6;?pr(Uo!TYacb`({55@xKWQf*LC$#j$s1ToXMeYQbYMM{7e2T>o9M|6_l5Nw zLePt(gUd)NK-xJ~nGM}JUTvzNy+pZRbPf_hWwbmVr2slNLm%xG&SZBai%&O~0?2RP zg9+M3+j69O#RXAKrhR6RmV3*Y@K->RmvLV&A4quE>P*z6Nc}4BY)-4IfS%@od_!56 zZA`9~h)(}bg+L+ocaeMV%RI6MOmJs4HwWW=j>;j^Di=ExT<*ebh-bcTltW~B$AenD3 z@Hjr39b+&`L10QjDE+E>Aq@Ixd|>Z6gGSBwpvuZ0kuNtKKfTqdOZ-e>a!wK6{pLq( zl#oCV#3+5rxOHK)gK zV%X_4Sp9+&+LiRK24o=m3s@Yc7Vjz4P~9&aZV!NVKKp;Z3l4kOj4G+fmHGX7)A_8H z%(%_SnI{iaGD`$gSUk`nWEO10A-&4^hYoYSzSZ#)QCW8ER5 zc$ugROuy!@vy{F$(88|2NTi9mE2a0#lYK{O8mL8^W?Y}q;IYP&c0?S>*Z)50xixUYeR{$^uh@}fTs_GmqyVaFwYImW(NObjh{P0H>D81@{u|qNu z0*zpOXv-zLhqv_v?OfNrfC0ju=b30?ydqjewne+wgOKo=KEs3PO+g6?_F^%gc*A^u zY`U7;olQ3i3JN;#t}10kbgtl<43oS637Uj(HHzc}MoHOp*|7`pb-8~{Ig`-2#hJ_{ zKKP-0MEl_9g{xtswqZqv`0EGkdg(dYVI~7MmbIWGhtVbfio&8pX=*C^54vk|fRo-N2EgNJXQV z1tt$4jPE8Z<2_Ol_F|IBXHsUDt+{l@9&fs>W?lqA_zBD{`((PpY{Q9!MpA+USUZgK zS(NkPx*lH?B|ylOM@|zmkTkyd$(st~%=4JDwcrHf8#V(&=L>=c zY?pu&xAa^w1uQcEIJ$hh`#Vn~f#}yUvn{#C!kGfg(X}Al{`PIya{i-Fy2FC*;5{{) z*TrH;(RUPd^S{ujkpBGaVC?A0oVfZ3k0LvKVTlU~8Q}_6P&b86d;QLUq;|&g?;A}_ zs?KPAzO_;EZhFL`Zv||!*u-nV>q<7W?8~ot{IM_dRy0BwtJr+kY-MvZCdS)vikvFT zeYsu*zsr1(RaUPkS zz)GrSb3`T!pYI({+2-3uteD>rk$#vm!#9)bdw$&%y7nb>GElMM(IS}g`QrN>GvV6tj>4bk5^l{N#inw{h=_MfHz)* zW>>v(x8f!}@_cy(2d^Bke!tuMmgtaA!zJQ0N*xMFc`JK)>2pL49>?TNcg|x#|)ERAR)g=eBKnFQ6ylmOQ-Fuk^e6ns^rh=N~Ll zF>L0-4u7K>=Z_*Hf5za2^|ZrLTACckgwSnJ6&qzi5o z%_E&wpXjuAe%C&(G+lR&8k_*b@%vx{;s@*ncC_Y1o5YVNh#ZdmmKN4&b$#UF z!m47iw@J{}O#+;PIb5jdsrS&a#lSm^lPV@;ix!5?OvS5mr> zr%~@Wat0;IDQcR~;@@6(OJg^5WKy6S_@pXP~DI(jHIX*OZEf_NkxdBwaD)r~8|vww*# z+iMGVX_)#;Ue7A({oN`=02~|}mT3|^PmZW`(A#+%GxuJ$7Dv(!{-L){BqV=V?DZ(g z-eu#&dh7KYx`>WB`d5oy8_WEdG*M%r=C1$UGnkC6aK5?R%C@x2wNZN%_lpOd1A9ra z{IO?z#P(`^|Go0fnJY~?&DxZksaF)@^TfTn`l8v?9SS4VF~Oq8F}|gW+WM4RQed!e zoVepq!38P%N25RCpN_7sM!iwExvTKAtWIj#u`)GYkUg_?ikhX#=Le5yU(&RoLhlG5 z4Y}vtTjr^oYEr)?Xf_&JEuCd%uuH#!P0=yiC(8HUFh|@TH->>s#2Qu8x_ZphvvYi} zt~Eo!t3k$GCVyvGfC%5+1O4{z*R87O>A*D(Gx^c=25V21TX0#v$2swqB<#icOx7Q? z4e`=1{+LmgYf89Ff8;6C^Fq4`;w?yqjNii_{+pfY!{ZPfGT#|jY47B?&I|nCuZ(-z zX2!3^m-xwI$t)Le)Ofc~AITjBeUP}7gB&7w;D+K^IC7YlywWxx?ml925hwh`6hogh zMx)q0*5dRIK!5MC_}Q~GJ}VTt_3XIa(6lnPOXU2EAQI*|M04{U^?9eI;vkyup}N?WHfxoNT_dZ+uR%C$Fl zSY8m+R)BJPq=r1tJIMLUJpUq2B}Kjxp`)=62RU#3n&+N7&gWaBHaw>-sw|k}s1spe)I??W+|r z!G8DQbS$d{!JLqwxozgx_99CC;!k2JRzfJmNVBW<_%%8R6T0H{J8HWK||5%wWOK(t6 zkwG7Yh8S>g@bq8>bQRg>!Gi8qf>2e39wQG8g!)dDjqc(aQ+>hoWGrvncD^gUE#2*4 z=LW153Nj-$S@>S`amd4=vw7uuIq^Aj^y=tB@Q0Qiw&g0GJMuf99~1el)y@~8v}S#z zEWl0e_2$(My+wEJ(3&asSD~lO!T+R?FKn~_C6>k5pqYuI{u>4kh=|=quS=eqg!MUN z!(V;EIqPA@oOuw$YYbCeLT#%;K;G^B-&pG~)FTcb9~L}XzzQV;M%mu%6t^VI-TyuQ zm(;r{@E^MUA4v`6|82(p|M<%cN2e%pZY-UzQ!tMn@0sGamYUb$#w(Ed-l=!d#v*J% zizO+19(KaQ}PtfFBM_l%qdIfnoH-a(H zo;nw0f~w+Uh9toQ4>NvSqmmy-kt-ZwT|`l4u12xxL5}Cfoh72CVf++I-^~{#BFm0< zWE86sH;s))V9!a#0Q0VkTt5B~4z5ntlzX0ROxTQp5wBkvRE4>f*@R^uM~UMQhivnm z!8$HR6d1@ViY$S+AoQhW!|@l1m5i^du3(PIiIuO-FC&7q4#ig% zz7nRELA0smx5H-)EWmprVl#{O!~+nMfyuWUTLn)QzYk(Sy76JwLnfz@>?fkUPok%TVma1^h;$1L^QpDlu*{> z(c7P^6hq05>j9)n#iEC>zBts#pfcHWyVJRGtK=$kXH+%OS2e30UEm;fwxXiO#8qNP zYgBz@VuQL_f1H>#Sq{oZs04Sa938T0$00r}qQ;#1E{7X`tHzd3UP(N$=v-;`s`b9& zkpAgSB!2LcVCdqoX7qG#gm4Y)GM&-Q`S1ML;-xNmkw*gXg8Hq#_4`O_1)fSk-q8TP z)f?is41tYFHJk4GvrW0^3vLJZ@A;|}kWk9nfrBip%X%&FLRSuGVhGjQeyt^1Nxf%x znttcCAYh{mbZL~t(Ho-e-_!G_e4X}SIS&T`KL#L#M|Pnbx4=g!=I>tV8x6>nm5Iit z_Wh#dre}5IUYMD5$uCz`w3-AMj)V?B7dbKI%~;_qx_NWomj&NsAT;8YckB0g&FQ~` z1`?aZHNTn5ecf=FLCf9XZou_sqJ262V)DwLhcfuSJGBOaud_?x4Yiv~iZJFvJ`)#^ z%XrybLyMkWMXZSR!2J7)K@FfglhbY!Ot6wvcSv0r%{*pzGKqV%7dRb z(pQ9eQT>PCQ_@Cy^ccxfjiAxY3$H%v;-#4Ldbk+3=q7#mI9sh@vX+zr>~6%4omPL_ zwI&^oM-(sdI)pyK%jKl|GweWeMSr$IOt;P1e33tT&{&c6C@;(IW`gVM@xJ1;peR21 zR8UPLT;2P`$I*?L<(1}CtS{oc8APG#kR$tA z_vMGGmT(kl&_J5Vx3?)m>TN#UmpN2MBGHj0X3eL|%S=aQ`BzJZFSc}Rxc@{cu^39< z`XR2bmV7hE64my*XUQKZs9;gpTwT>K9UwO9Ds9@|gm&HXBv0$(evR{*jUrY9vA;KG`~Ws(FV?pw**-1mlc;-!?3OOB2n988y14vr2@V$-9=OdiF^0x;{1K}l_m}J7eQX>q1~OwP7(i0Heb7lLa!uyr&9UCsSIZ3| zU0CKWDCK(tEps8`%cXQ1aLCO9~@`yDvRq>OeWWlYW{BF>dcvTYb*B4!@-A%g-%@-}j!SXV{Wj9iU>g+zPr~#BT>Nxr=71L6nzNi0vrGM# z2Xh8*2hSM38YOo9q4b)tFniYeI$a8#xFE;xAn*dv961BhSG?X*RMb7pH_?|66(;)O zzRuO)U?Xz9_kD@{Vl!elz0<$Z=#?onc`py}$bK>Pq4Z3Y`S1LPiaADoIYwMoYHyia zlaI~S6j@}zBTP*Nq48%rNAn@!f5Em&#Yam~T#x#NS)nEz47ceo@<896Do+8(Nd(71B8KLcRMd9ajn(&oHne|Ymri;>tr7N!vMdbcI zoFKnGlIgGzxskQf|aj~$dys-TsQmSAI$uc8-``ik-j6X!8H6)Iu?**#Lk&^ zo6xqIB3>z*ac#oSadT{gl^Dnl#zKkr(GFG+?X6Nm{yP_Ly#^*V?`4WLjtoA;26!;1 zSRPm$cD8qi&%o6?O1{U#!)F_cC?7aB1zx0oZg3QLeQl=U2u9M1GF2K5mjPy_S8o(y zb|vOB-r}=a<016A?nP)6!;rpjpX+_pt(QPbK~k-+?fuEm5-R_(7NA7(xBYUaa;8M4 z!VIhC>6#1r$_KZ#QLAPj#Sl(Z7$;uMU4jUoLyxhkPT}YCoDBQ!cDUg=N_HklKJqU4 z0s|_W#na6h({_g@5-(pB5zU_XF?$OMS5#It;Gp^~;O#HhEk*p8G9(;_V{=r$|C=BwSdb2Zn};@XXz{T0+Z z$?uO&=-k+aYAxhy`xyo8(mNAc9P~D#9j@b*4?mcA2%-2HUT|~#XuFO!&>5H)w#7B@ z;!Vli8&W(}wu%s5pO?xP(5XFj-|ROy`{B?_BIFP9PHo8ns9 zt(ILBsl+4W7%AD%mn>3JtX31u&Vz#F4~HW3&O=UkQ|Q6h-Ih;=)(0q7I66pH7{b&a z!%_s>rT%crpP0A$exk*W`M$Pd|I?iN4V8a>VGW?ogP9xTi#x1KMX|l}cIdV$KIpb7 zJ!*dsYTC{9ZghLx+QXf39|KSE*cVJ#@9^+GBBO3CyZEPAL7p1e&3VM3f^{a-+ecIu52ES zMM~i}wH+jDAH

&nXMgSg~o+ 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 literal 0 HcmV?d00001 diff --git a/docs/benchmarks/imgs/insert-time-dist-5.png b/docs/benchmarks/imgs/insert-time-dist-5.png new file mode 100644 index 0000000000000000000000000000000000000000..8e976309062dd50f7dae8fbfdcab62445555e071 GIT binary patch literal 25031 zcmeFZWmKHawk}G726wj*++Bi&U?DgJcN*6~;|(+xT!K3!c!FCu?ykYLA$V|iJ0#z? z_Fn7UGsa!#j(x|KvFitPzs#zd^1QQV&8kV5ijph_Dk&-)92|z+J1I3dIAlgRxMu<= zNKa3Wxe4)~ejxzg%6&k2YThVjp-P(j1zz(BMP#1A z!@*I*$w^6k@W|MMf%Fr$G9Mqch(p#w$pa!8adA|;Ua89Ql9u*lC`8Huq6-XQ`)O{w zZmoQ<9yzz4*V+_wdNQaqs(36Y$QWBn3SZ(4juaAk$V6mdtN0tl z^&&y?&3kVVZxORP%Y$7Y?9!Dh`xZ#$fP#+N>=*hk4b9`s1zzf(TbEDK8z!26ZtS_w z^Z%t&T_kG4KNHZbax<%h{|m|B|6vfGFS&?!3cl#5C>_QsZ0die>@pC_JkKbtQ86#J zaTnV7{MVr4s+e;o{?00Iur+se$T2}s0j0kfyg|wxiZoYaUNc=^}&yj*g%%SD`jY00YoYX2;=l)en&`+uQuA|YV>tN-70 zUFILY;QtHBzd6VaTrL>f{~=2h7Rf@QfDnwdV)<)3_%CI>b60uzqwBICqKNN1&63I& z`lq)xP4|+pnzBSv@9l6Gp!;@f%eN(=r$Ij(bQ-gY$g%mJ4an4cMjUelm*= zuUOGs9GCpkdb2n^r+6Jm&o~1TcYbJR(ak$LxG$$Kq2La_cGp16My?EBZkQ-nT;ygpxqz`tt(V+k ztXB?MpmRmdk*2x>>Vn6g1WOOpVVAgC)mB{_t~cGKX7|Ae7PszT9^DPD4CF_99@|F~ zXDZ^`-*z3hWenL%a$^eFlZg^Cns`{e>7CIz_Ym=)aV%|)IZ^(tTc_9ucf@=r_F}Qw ze%s{;8^AN+IXPQ71-mQg1{s>5{OtWj_YCfJQyV5GT7EYjzK$Kcy_iPGY>O{j*e>qe zl^kl)k9yYI4VID&C!zKl9aKg(_V(3ZL&!*#zqEws9#%Vp+-i#U@#zYcRmV$TLaThW z&Prc~7iNJ|&3OWt=BvZb)A=iR&#*UHL8(Tf&YsJh(FOzM54Lm>J#Cd7(8_y95Yust zUfG(M3u`l3m|{9c5OGa-W2*u&rgY{?h8uJL+VS9FM(i zhR~9w!8A*}S%dkjr6@h^vpW`6y}MD?tDRmu(W&E|v`Yg4?jB&T0uO=FA#Lulaez}r zDzz

L)t<&5VvyN*)O$PXoTtRLOr_y^v|op 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

)Ag0sNtIfY&){liT?40ax9vLjb(1hAqS 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 literal 0 HcmV?d00001 diff --git a/docs/benchmarks/imgs/insert-time-dist-postgres-2.png b/docs/benchmarks/imgs/insert-time-dist-postgres-2.png new file mode 100644 index 0000000000000000000000000000000000000000..b515c5beb6ecaf8dd09f0bc6506e2c607624d9e6 GIT binary patch literal 20367 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 literal 0 HcmV?d00001 diff --git a/docs/benchmarks/imgs/insert-time-dist-postgres-3.png b/docs/benchmarks/imgs/insert-time-dist-postgres-3.png new file mode 100644 index 0000000000000000000000000000000000000000..553157209dbd30b7e605784222b8a67353b47442 GIT binary patch literal 19415 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 O2|R!CFQjj-{_r1bO^>Yr literal 0 HcmV?d00001 diff --git a/docs/benchmarks/imgs/jmeter-results.png b/docs/benchmarks/imgs/jmeter-results.png new file mode 100644 index 0000000000000000000000000000000000000000..451c6620c9a2b731003e342de6649720e317e0a3 GIT binary patch literal 16031 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 z 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⪚ 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 z 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 N%Bnsod~EdY{{ajduqyxn literal 0 HcmV?d00001 diff --git a/docs/benchmarks/imgs/query-time-dist-3.png b/docs/benchmarks/imgs/query-time-dist-3.png new file mode 100644 index 0000000000000000000000000000000000000000..078e3ee8a2c464b0225d6eb9e1c837c6571d9224 GIT binary patch literal 59575 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�|Y(XL`pue!NH$LjQsp5{z_|VP-O;L8>13xCwt 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 z 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 literal 0 HcmV?d00001 diff --git a/docs/benchmarks/imgs/query-time-dist-5.png b/docs/benchmarks/imgs/query-time-dist-5.png new file mode 100644 index 0000000000000000000000000000000000000000..484545e05ae1d668d307f47d20c990785c017672 GIT binary patch literal 99981 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%0Ds--3nVQqVH)m?d&l^x0 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 z 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 LtDnm{r-UW|5wrR{ literal 0 HcmV?d00001 diff --git a/docs/benchmarks/imgs/query-time-dist-postgres-2.png b/docs/benchmarks/imgs/query-time-dist-postgres-2.png new file mode 100644 index 0000000000000000000000000000000000000000..3f7033fe22b055bad4412894c08cbdf38569708d GIT binary patch literal 20119 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 literal 0 HcmV?d00001 diff --git a/docs/benchmarks/imgs/query-time-dist-postgres-3.png b/docs/benchmarks/imgs/query-time-dist-postgres-3.png new file mode 100644 index 0000000000000000000000000000000000000000..2816a8da1a415719d52b88a433e9bce76d5b4160 GIT binary patch literal 17039 zcmeIacTiK^_b-f(kMdXmv4DVpf`D`t>5!;20qMP4=mA3SAy$fX5Re*r?+`jc1p%p2 zl0YDI0wjb;2_=DW_J?Tgdb zLi{I`)!N0gWt!ql=Njie;~eW+lZsvLoaZ}J#{c&{X1=pap0djeB$me>_TdIEarF>o zUfLZW8!2=IiQI`mhg2(iY@^RbMMhrcX0x^m`Q{4$hyIWYf}F9AU*Ei4Eg7WP1Z_Nx zb;*V47VUVxwxC};WOr(iwkv%Q)h})qSMq0Q1K-As=!bi(@;B%QEmhrf3=D6sCK{b# zV8~TnG5#Mf!GUY@8iZ~i8okAWt@!9sjT9QbHu*M8f#xAXZ$7JCg}S^qflMc0;&aN4 zc|QELTAgY7zE7cKE;ftwf`3?vj1v5!KbY?O6&6_-w7fd*k65hQqB5^sboM zVO-8`fBp2ea028JZZ~{ZnM-!Fzp|EW;bLa=LlBYvP->wZ?Vc_S)Ka+F{*bsaHEYJB ztvnk7t$KVT^LOw-RxS!w30GIy@3Wf2`WEIpxb}C!u-ykCMK9oo^(ra-_wq9j55ZtxASmzk&(f*wq~GyQR!43U`4B4jgiY!9?dLY59|P>*w)UQ%+7c*RcIuOweI!% zJT&kY!y72;hz+bfuIoU;#s<|3kEl^K^jX9;cA8*XTqaJ`RF##3LV5|>{FXxMVj+-_ z;GIcS^j{}^V!FXWGpPsT&6QNpj-DW6nX2mKYcr22gs|7QdiJ?z^V|4(&zhg2vi5FA ztG<2&jdk2H0D|U`YyrDRE1X}u>u)rZ| zXPJf|bY|B8oA1xI6P4%gNL@3uolii#-fe<|l5nw;`yF2<6wxGMa#RjLI@kRPh>a2* z89CbjQPgg>akVqXCbPMS_R6EBInvelDW++)Kuuk+5}Tg$NNr+Vzbszzd7#%!+<|R2 z`|U+w5C|Re(`Y8leLGfwW^iXiT9Ri;~0QZT1h2D7Sh+AX=@H>C61q`O5oT{KItXcuB|6$gZ^gS z=1?Z3L9w;+kiPJ)>MUuXo)rkE>b|W*w{U&d*s3y^4x&{ZOe#<8q%jUIF1e z4D=t*N4N(@cHb+DGvA*%wPte}nM!C2CJH&dcN7pf_4Ngn8*G$dd9AkNCxPH8yRk2= zk~1sUxOvf6`A!7&ZWfjG&nAap&0N(1f$^@Rn664ibFPO{+sKvlooNiRY@?{HJ+U@+b17xKhhhn}(XN!KKkFn6-KcP9 zu0(}8v_CwXkg?NTBUZp`-ulW_j|2O<|Ak$h?fp#d(E5hh+{~lBjMe#x9LhZ+IY3JK zKxpXlW^Ha<=Xb{d?sKD7*2Uc%Tlt9^(9b7}c{G`Vyh7sBj~!K3 zI}tU3iV(8zU>vs)2@+~LF*0exJUXZ`)G~j%-j;?cPCNfxFK}@+;^d)hVX>QXb=1+= zK!k>ZM7OaoMocAqzS@89h=JkjnY9rr2o4a5E~_3qf<#ZdvB6P&1}J3Da5h(1*jo8~ z$*QH=%A0S5s!7s3Zv*1CnQD(=E%9h_57kiJ3Ue^ki-X;)lJ}ijk^+P^YHU=Gf)^Zf z%VXd!iqUS~zxe&fCBxS|bg?P!iIT$wf<@0Sa#ynz_)S$tY>nd(N2*$FnySp)@b!7~ zAd)f#I};lRoU(M1i8du*kJ!BD6LQbI!t8Df*>P4TrHA-dG&LEkio~sbPFFJ)_^9C{ zqN*y+_v)vXw(U&tzEa0vNytrLsBjRdEV6J7L!(gMF_JFLw9*#2tNbc!BIYc?u=xf?6;b~oMl&ud zE(v00b3b={?|=^3QGtYIw!6=Fq}CiAQBjWhoqB9*oG+&;<(C^B6k(ckFRmnFkCG?@ zOAGr&{_8io*=DRXo~Z2MdygR-92%~x&tB4Ofem%Vpd$rn_M@~(WB7@iD3<*FyIv?f zL!rTAtD<7{{aQdO#%0xMf`iA%n=9YO=xaF)@(PD%m01 ze4=KRGH2zj*5g<$H$!`i>WHb#u<+Wh!*?Hfc^TjvHbTHF;|NSSKJ|5-Y4ntspPx7* zGDD0lG4&G5_Xx&{NB9r!?N>4L#t#A`pRvfB5DSo>re}X0`RA9PJw0|cSbArMjvf3d z-VgMbdtGyK*00#diDF`R`=O@B0mCLZg|R@;B%hf{5p4IkNnZREo*oU*I@;w)F6G+{^KLSV&1L51 zseDKrcDHJG^1e6{&|k(K{PDft=XS}0&76;-6LT5aX|Ocd(GkLalI&;4}O!tM_s|-{dMqAf^ z(b|bF5AK+lZ&lZiiu^H-@XqW>+(IWxONwv*9MVi)BE`hCttDDS<9MH)#IInp)GoMO130kgY4{m0Nm)wwLvMRNV00*z=1eT7go9|$ z>4x^bm0(nretJB<;)6~qdJTUiy^`uuqKt4fF=y@xl;;obc28pk2GYge{_`itz)(bmN(%)k^NaaS-?&o>y`5gC~+fx}uP7Ut{;)#p}?_b~Njd-W}oW@rU@+s6@9B~m3J=lZ?y@CC>b z!?l65alH7YBXsrQ>9G#i`0ns~Aw4cZzaSxPcfMEEr80w49NO$(PFrP_oBP&$E%y!p znPR+78RvC!WMvB_B+1FISnJRoe8YmtnoELWL3^PTq0|0N{dNHmdL;iswAr!Kt6xG# zsD+K)u-uxd%(iCs>XgRQpLa&2-z_d<``9I52Qw*6^w^uwd+KSR+K{a_ZKHwd=dFJJ zNtPHEu$($IQjp zSYwO!2l%&i+Q$vQLlf^4H7+C;F*bp9(E?4j39jPLw1da$moyqu1tliUW5O#ZS7aZS zTY>MjeG*@5;O~`hAgkHgf5!eMp{`AA0RaUTsrN%XmW+AJ0Lcyf0)CL@K2McmNoZ(W zq&Y~N$%2qnbF5q*rzP9@yX1^0PkQ@OT6EEvbHA2$7=MATYLE9iwh{7VaEV9vR}L^C zq_!kqWC9&l8M2<(;|cZ|Gb0$<%~;%7$_@IF+OV3P-F#|K=_oqG-XIl_1wOq?*!CN( z@vy8r{1yR~F*7pDppN0;1gVhK^&G68e?99yN5HY(&Ksd?TM#)HLlqZPoF6Q(s-uRg zHf^PWQvoY=nVJp-$psas{mK2}(%P*8gjiNghhw8-4M~HIpCX-w08N|w9gRJ14Ux~( zD80n(sEVfHGRY}&msJgc?;6$Na%3!rpjsx2?+M^614EX7bXPU`o5r`iytNUVZo5l6 zu+N_<&)v2L^$Kro4)+x@0(a18c5@WqC-2UYu8|8p|7}YJ$(qz%02ezjC2~`4CFa*{2JkK;krgkVsn(eLAybNzZvVorZ7Mf8LeMU8g5Kr2f`kZ8-G&%7fAFp1_=j-11fXv{j zJ&iQUbWV<59sJ9?fH>F zh_g^!3=AlyFT^B}@{wy-?`GweM46DtXx?r?FIH-*Z^Dx5r@3!+e)-(07&>Zyvj%oJ zK2;kn1UQE0H4z?-M%w8_@!DjjdYF=XZMH#zT=>~E)P7Jw%9ThPlmT>}HGYm&ehzKLsiX0!0hMNqKCm@VCO8h; zE-I3?sB54>J8UPg;iz18-{rNx9v3f%EYw^-p}aL8--CLs5&y_9{fV@K>qyO0lMohn zXgdzyToKO1OjsE$qLTS*X7X14WpUdD}dPY#NRw+y?rmu<&hc zi_;|FzSkCC*FH=#)!|sIhM?{Y&GN+)AunG%URg@y?>!6-F$Xn7*Uw2*cLdJ_-0x7d zJs5x@jqPoy!JSO!n4!D{qD_l3E#?a}cFmG9E8qOe}gQYah&`hfeb@Oq4ug zNBBJo3DD_kNn92R`Mf17O@@qmI=1RImPDK$Pff9&7?X>yg*>d}Q8xqI_J*bh`IeO3XCaq5b-~B@Xrj{)tvSx>y8h{p>5TKNtbU!B})3vyE|l>`le(fnab+Tzop* z+KKX;&~5c;WRenZ>zx_!WZJ^0<~7NVh_xmxat9A$RC94Eo0p(JH``~?3O8ZI)CUu zv|?~LC1kftA)mQZ^sxY6K7t%_MhAAop0`{&4b29oVDy1n@c(DnmsHlf3kg7Z-YSmTH^WXQ=Vui3((=t4ibNt6XdRe9G``M7`FaCe)a^SN= z_^c|@&`>>k^;oy$riA7O)MyYbGzpa}i-psZ-?ft@caEc7!K2cE66f^P}jpf2? zVA7@Ty=MFfcL-6{>uoFQ#n4<}n=l1s#VBXx&r(s)EZ1z;0KDDY8hpAG_}?4R2m;%6 z8+wY{8A!tH?7dEhNzW^|)M^FeK4sxUG~NUx)(uTk3d9d$#@Ox$eom5%CEwyKs~VO; zHTfst2Ka9cB5zf3!Z`0C4z!*?l@JE&hXDnDUC*xSW@IccAMl=G9<{!onr%oR zty7b-Ej&hvWjt;7pJtlqPukqu&XIX&t+n%zOEGK=Je3ST3HU)wW3-;oU!J7+O@cGk zdIa6UV2>t0%g{dFOn3L9bLZzc&5e9Zi7!4^?XQDr(;%TiU3L=W=Zi7(LEKv(zHL~mok&ikQwG_2ilv8Ww(;xIBSiEqmVPYBF8HQY_L}i`uU~Y$0S6=v$Obmzhrao^6UW^` zLr(Y2vfF&W-N^hP^J~V?#iNUP6yy1=aGcq&{lyqsbG3}=ijP`^QTZy_G3DUv#OeeOGfy<43`a`y@hAwxvfrk%Lu6qHTXF zF2h52Cgj|l{LH}+RSmf>`^3-u_tXX;C1PM$myI|?@tXn#H`lOvc5g5+ChmBzql(ZA}S0{x0i-hgSj@9_N2lo*R!SCa1=HT5K79;pmc5R zW68+ObaYF>1NRii-H%Pd@7`&|G^O%_NM0DKy2d0s_h2JT22TKqVk|9J6?b?}+d4#? zLN@*CY~1P(o#AHtX|7e!+=$@Z_XQ(7^w^^9bxZ4tenbUF))WJ^2N~^S{zma2Mud*! z8$j9!)rbT+jNLc@-e8kkD7Uy3ldRj(SyOhNqBhK1KBDY{d$oq<{!C1wEv$qM)82^j zF&{{F>gO9>=zDVNtKWgubgeQ)zi49O+1kX)W`hF zz3J0{_O~-ylOk}UVISBg7Uj78Ti>&h4PFj2&s3ar12x(hR-}YZS}t$gLE+;1cqOD| zwCB?{C%r?QM``?QA2IumYvmUI4US5s z&yu~gLD7JI(MQ3DdhxeT30_U710vPFO?a+f)(H8oKx9jLP5hP2$kvA-ou9}HKNV>s zhZoWiL3x{&9vbao%&1CN-=6GdGv1H}lpxm5Z5h>j-GHiIb@M^(?NfbQD>v@kE}zt5 zxvCy9f03=@u#=?+1swzX#5TPDw>k1~IvBLo<`d*OjH$O|nXmm}kaspi4SDiq;ZNwv zyJwDKZePMMugcvL3JDA0 zH6#cjWMnG4rgYOb?TqFeW&+S2s~MMSfwvXsy7taHU5)FeZR7@qBr73ZQ%3t&`A0~~ zUd|c?3JRf{T@XEN;C-p~H3HTq!6?%`Rwl)%4`mus`U6$E(!N$DQ!y}8(S6BQgvG_f zbO*a@IwN3E0a3*y#SdsBM_o;Jvh7lf9SuTCO^9|r)S#ee|577&Q%Ue~q@qXFP;gN@ zq)8%hHYP0GY+#eeU%{o{+yqy}@{ipW>D{$*EVL0=GC^(}weOk_o>%to{cBVzvtIWW z7|&kW^?K|}2;m_xs0$^C&l?o#!P+KM2gamQ9^MxW-P9B6u~GVx0=khIi3!FLD+^kO z`3zm0^-mA5iAIe-NCz7aq*+-FsBuT+FAL@QCxlpbu^fsEf8ViprL=te)FdEUMC{eh z&R0woV?0}XVWy&G1BNv^-0~pQAk<)U%Y1g~%M!;i_;mp_jTEvypo``I{g$;`OAqp8 z&3MAaDJETR)o_mYBK5ch4i`K~d5!NWrP{@_Wx^@Z*EFQ~`3UX2L7)SBXjau2a~C=8 zXnO)_w@GWa=!s&|7oKf%YDDHd8w89|RCFBDozbc>w=A+uegUHY?Njd%TC-M8K89iP zq%^SEw@!|rt0@6;h4^ah0G#aw^s#>nbc1{3?k$af2ToBD7)lV1#trA=3ok&uH7cgP zSg+em;)#FQvZNi}TK}W~9c*`GK~&av0?E}Z{Bi<4H2e8Ak6Qxu&$z2Q6T7v~$};5( zCuh~1C4_ou?#YR=#H8raOUtH#;Aq_nOCPo4|A!0Ue#%_Jb8{W3A4J}Dn60yBB$n;O zT3&J11sb4+0W&H<(*D00C_G~ zZw_HokOJ@&7;LHwF-}1Iz76kZIO)IeDsb6(F);&^lu_U1#EX$^K7CxnR)>5f{Ro{c z>P)q9!{Hxh%KWmTK*ScH+qi+O{Pw_5?5bA+%&zdYvo-e(5 z5hImRUh&-3{Y8nAC)2V|0GOmb%(RNb|Mi+yp~2)0TKS-x_OS)j>>Ybh+gyzx}$e4`J}xwd5g4FlYJ1MPA-@NLyv*TBC3T9CKKuuoH5oyd!l`mBJWLt{ObG z9AmuksXPX?UR#H+S21NxeEarWcU3PIVplIU==Uq4^1&5K{yPHOrQk!GVY{OpX#Er9a&vYV4ylc}>S3QSyZ&sp$o>RLP_K#qcZ{0>a zbI`KNP9<6C;{BWl6I;7-+dF3A%(C{*%N|UdHB8SD!15D#RP^%T0d3PcXboHDYCiS( zLmrs~P25;`h_Ze3$k#Iev{{lzTt?bL?XI)4r>FaLX0}=Vfb34$Gty{7L%emXfQssB z-qpSeO|R}|I*hjEZR?%S(jEkLZWeZ-=0{z(yx+&Y_Zm-cJ~%@@>=(Xyg`xVLMRIUu=#i{UH-msh*)M{&t-M<99w zc6Eg*M`cYJmL%3_k4uf#mF|1DcJ!Zb_D2U1KHWGup42Ae&NTOqaQGf&wU%{3S6&x@ zK_W-5KqfFC5J~ffIK_54<)jH$6xU6Mg`ntRrZ;7!L_i22F2C)fsY(1gbKWGZ6-NN; zSxMTsK3YxX+HcZTND+FntaKSVG&Ee+U@jrcG}(77=bKPf-89#&_{e!rPyKS|Z+BER z=USLuJGoR{J@mBf3i3k1M*c}yNNbsa>?6wD*D$yrIgLW*1=tTQ&752g-#p7MiL`nY z5FQ)1>!C33TLvpRJ&ZhTrTK+iyu@VMY7FMNa_ivDh^d9sn6nD>x|Cq042cL1X*P1{ z3!leXOz((&6(!o)3ABYoM6kd!D%{c-_q+U1+z-6cx=v;;6lkgMGRLm|kO_YTR9LYIo(tcYeRR)T=fLqqXHt z3&c);4E9|)xV9I2+An#pQ*F6qdv78z*v6wA)Ra{va+Kc)U(g%Ghkv*%GJ3iqIiDdh zrKI31#8G-`JI?*~M_u!g6(mbp3NI_kGSx|z+PRYM?@10pTanrdD2$+F}z+9V- zJ^*h8&FB+;h-5~be*L9pU~q^1l1xelK3lZiqz^g9xJj~8*n3GmTmSwoAQ0qE$Gq1{b~JJIAUqHAVd~@@6fj~GSd3q>5>C^N}yR!d;hAD-*))WK50wK zVQ_f9UFM<3+!U2fvwLHppk{^Zb7+DX{m@9~g7NCw_mT0{?Kj*Ei zIB^DW(fF2#P@HZBYAJ#}=R;i?J;(xjx?Nf(oOP;N!7 z5MTYEM=0&Ci$3lS4UtaJ&e6wkCm?G@1(%VkQur|Q?!nb`_JGrlCiLZxipkN#>;#aa z^>~T2MJA`DG0fvCt6#)cVfHN^*7ZAY4W#;-hFvR^_Eb&1=9Q=W97ptiCaoHHRq#DR zQ3ghLAJS04yj~Gub8fSqfzXrE2P}QDoTaXa7l0EBR2pyNrqQh`L5JV#zXWDmoF1{$ zga?<$`lp=uJBrE_n(r;cmnwQ6GcGrDHXqb|N;;7om{Q9#qKRsWqcGrshEsj#QeT7{ zy4LD(Uma%a&8G9|c*rJExTE7dzEjy(yswnFuSX5JrjcCPdc*w9i6pxLp+yF5Rvf=xM9 zby#+*Sk%09+N5;)oJZTcj~O=f*8=?%qCnaQ@`rQyIWp@HaZ`Zr52f*ORDT)$i$0(C z|8Fkg*S7v*c+C1#2w#AU2x8W6Z@g(oL-(+(BUnBX?78MPE0d$V;8}Ed({z% zoqg*;OZ%0tH{^0IGQ6=FyYxNfnxR^c&l?JTl5SQ1<;nWTLHWBhep1{n{hIU!@brJi zy+*e%Fj(KU&!@#5z0CR4DqgmcPbM5hcP-8ZJudsxvuEP^xr-P7HRZX7J9po_`(r#3 z`C}sY3Y!+_jehW9p~{?~Sv_->1lj#Z}_PX+M> zYY{G=z1mY&^QB2AOW?qS)W1BH=##0%V(*>j#}CG=W0&xErxN+sq9}H+VnmlW# z7DPTC{O=)w8FY3XavbEv@HKWhP~^>AAB>%mVOGwY{;}k1*J{<*BnE~!;q^C+bk3j7 z9b97M?=lsvjhc`eb)f68t6-}-Kg~<&#$ytw&Dk&Df(_X`Y1|d@UwFquFtB`fLoL;J zIZGi&ffOqYvFY=hYFv5EXjIl}M#nWe)O}jcXgD>!N&S6K(k^xo?^RicN@_Ub>f60n zj{7gXbS{V69~jpzPSi(|7~6|^gg5}=K1$ugEwZgY?ARxFx)y%@@>vsU%lsEKDp5+tV`-n z+lf@AUA1kaV1Zta*t1$1#&lBRU+TTU8*Z54b9mRqV>UzYB@^i8p?*!!sPzkMI zF>7*S8OuOd#{00D0jHJku+vx5sye;pQ0TIm6@UW%V6=8so#=IGn zkK+d~VQO~M`vna;0W+Qt1FhBy7=MH+XDfH6VuXb(^8jdVx3gyj_9G`)^eFwWs4vMaOR}QFr->akT0M%dMvN*_)vdHd z#UX|^(Qh_@r#kOwo~}EmIeQ!p_CH2Z&Un}}<=IvhMRRsUGL)A2A)(vlXU&@S?-+r2 zAt9u4oe1_GAD*GJnh!#Tf|ZaIs^!ocB{$5867@dF8pYvJm<<{?%K5q7nq&kwGCdCV zAX_9yM%K)A!Cv-30bPVpf~t0Gw7O>dNmJE8|2a)j_RF$tnRolY_3d$&Gy(j4pYC+^ zwzaF#C!K1n;kd|3^e;#LMt2_e#UNN(&O+$ zw>O?LQ`|)lzz{w@+PwC&VDIYcA$@U-sHB2)@V&}!H9B8s1>#jrI#TuwJv66dKN`1g z?b7h;YAheKXMby9@|KI#?5eF!Op85m`I>-ir=4^qaH<4>h_qti8i;eMgaj4baU1J! z)?rCj`s+M3T@)d0oF&~vtJuiAy`CHH-{!*dJWW|x67t!|IIDpwDY;o1dpZWW!^ih_ zd%2UPV{gyM>J#OD$@%%NyVb!nqAnXBi^BP#cG+!a#me`wUAs!msE@&$m6~Y}QHXR~ zb4$xWPa8~M@0gKbbBB$r^Bd!o>p32vm4@Orz)gYd4WT%kmx)tLo_|xi=qDz%a1<03 zc^Fx~$IUp*$M^m(-?VaFj_ODCb(HXC^R+2bv$%1$P+Z+6h18cMr8V225#UNl{!*6g zH%;g78t9I>bSEB|lH@oZ61Pw)`qdj>_sNsr#b;4xFme+ke!cno%x)LsV(aZasD)ZR zC$VCDOF&0&&nH?-lIT^GpA@o8IT0kk-pK9jt58*TY(JfnSoM8#M8!eZ*VyU2W?KC` z*s2vmxW+oB+N)vW7A&$2Kk3E&TRGL=YNALC*;z`Bk|pcDlD90|MzT0>aTiJ7lAGGc z7D?9|V1Wx_2i4t~ig3~>YojbQHPSo5PrMy{iU-*|^cPI|8ys$BE zn8-OI#h!C-XVZ>=#Dpd2y6QkqkVENVOU^v(e&Jm1YySAdpo56(p~p}1bW~N9pVd^! znjEa2IoOh4Z?39Yse}N6G~QAX8Hx?$sOyM>*#UUES-8Bm4>fW%gW1h2UR;dNW0S#5 z4n0ETHE4RGr<|g*S0h^49F|BI3N`WWn0=OTvSL zm29kIhg5=?ijzQBlY1X78-%XRx;DlR{i}yAa!($#Z#WltO@=1LrkfPQ4db*5n>_!w zvvD_j)pVnS4nJ$`)K&NCitdFoHP+l0>F@}>aDLMF+3MtJcr*b9S#4Mzft3*q*>|Y)1W)Beb%Z8mhw`H$0nl#vz*=&5PTZUuOV%{DE(Mm2NgHy zQERRwU5(%3j4k;w?y!;1v49K`6heKB^gmv%z?F_C2Q+TsDx#TJGGhDcW!&8+)kbZb zj*sjICp6nbsK0BCPI|s6N#HMcPL7mEM&MLUHZ_&KS2qn!!b}mU1jq|e>)$`btutEG zC)SfL#mvrvLvWKQbmGCf#_8)QfTDw+?VyOK0b|qPPd0xuMrZnhxspAqLvC=6{UK&w zbj!nDNKTg0s)^Q}8T(P+@m$A!B=0~56{Lo3540Hf!CJ$J3d#Y0jQU_51DyZVvl%M^2WHrD7Lu66tBX^4?5*E-8buCbPdRUFc; zaC1%t_t?~MK?9ccsXbSC?<=@m&fSuU2~=S-BE!scpjgj}@?y6ATtu*9rd;{rr`~AO zZR3#WN!xVI0+;$0{8PT@BF%}i-EwKpI_u5jX09xA_KXF_Bv`gRWd>Tb+N6HZXDb!i z>YjXQca%ABbyZ&KsXusQ)hZ|(FT{-VGH_bY_TO&>jTxV2F|}i6YAG);`1kI>>nmS; zGfjtc5c|JJwj>$}CLUYO%08|HPzj7O30^B3Pqu5X7xn%l!d5naE4m29iIq|5)EBDT zjKajc0c`B%-%jc`Wn0@O{9j0I9vXSiu$*fZ$Vjt=c<%SR6A#MUQ?GF&%btvLS8p{} z%_7LttCQ=CsPkrhLbQ2&dRP@upi9<9wURNJy)$s3JUepQceOZCVOMRel)5nRfuKkN zKQR5$_=K{bESmA_Hq=K=tpqIMcSF6Q3s88HS*6QcD4neg@{=oz#=kqhNV@X`;;GwH z##tUytW8$syA$_e}l>4>g*lI9(5(nX|0xHaygcy3BcXQWjn3 zyEGR@_9&?W*4@eEF+BY{Q|Kxz zXlc6fERso{06kJ&lG0P!)zv+q??NI6$)kgKO)NYR@~?IZo3sT&mjwHs(dw47ofLA6 z?$upe#`Gq<`FV|R=wnb(oY2v1%Hg=rrS2JpWWDv@x3x_^Vj-tYp89h)nB-f}yARpa zRn5B^vj)UZa9#4Y_DoBQjQrw#DTd-@gt1h)=3`cgN=TkLDpu>GN7i+6!d~@W1Rp41 zYB2+1($leKtJ6|J3^3c^4|grE7}=*tE<6W%-H)$OPysjk?B&bf3Af?($0WT@E$;aJ z%xaBQM|J&*JhTaO?&a9<3F^X#8$Bqx`bf%U6;i(pO$zYa%&EqI^_NF~_aM;m2s`ra z0C>|V1#vRSd|{MGH@%X5RS7htg!rhhG6j_6XxobVC3$xWZC~j<^YVp|!XIf8{3hr# z7fNX8EBlu;%Os?)b6ozYrmme_R@$#`fB$+bi2xgzY4^LyxxQv*wzkQ-jT@N2w>YrO zD=!?UbH>j&oltkECLGXU{)&2wJt>$)gWHD(QfOy*j(kn__WJSRVDAJIAONsOx{xeE zBkGZGNL#i#;7?bi9%N7G;BT9IHEcF3@AV{L!W>Y`Oq=Oh9|LrM7}Fw46^+PuvaJ$? z9A`Hcd zOY0`TRHY5)6hMzp9p{6leVe}dOciQ`buR2DThZ!IjKScuBYVl}RC0Tz)Reo^8vgp& z@L{uEj5uU>v|Uj-Vp{3N@sb9qYxvb8%MS1$?Zmbgz3CmMznX=^9fxGjI3#Lm9eSeTkVID$>lHh!LW(g4cV&A2FT-QseX zV!6uJ%Tfw3TV}mZ{naJZliq}AD#}Iu$b88a!VQ1z)C7FiHfnNWYGGxkfhkRIh=5V; zowm+-dGG0~zGvYC2Gk!UcJbZ=&*wK994O!P_BRWjJ7>U@dH7Y;3b#MhAj8T!YA~_J zTyxl0eQe2Uvzf)w2KKklYO5=#0st_WOYGGL@~2JXRTathYTtKGElb^H*fy=QJL*=y zZCZBa-MJ%@tzM`r_K^z~qIoq9aI{k}m-<~RFOPxYFX2D`3s9exE!p9}s^CRU7V)p9 zbvpjo5zvJG0^zlM4(H<`V6{F-~`iAqdcn4x`2Teq;LOH@>Jk}a*Q*E*v$ zOy`p}n7>pDx^aNH5ihAtd9Q0^ReKP-W(#h;JZn|LTTaJ5)yB{Rw#OThKQB3t+6b@~ literal 0 HcmV?d00001 diff --git a/docs/benchmarks/imgs/query-time-dist-postgres.png b/docs/benchmarks/imgs/query-time-dist-postgres.png new file mode 100644 index 0000000000000000000000000000000000000000..034ca241bb1f10c394e5b9bce2a4eb69bad3e940 GIT binary patch literal 15791 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 If1SJjUk+ZYQUCw| literal 0 HcmV?d00001 diff --git a/docs/benchmarks/imgs/topology-only-store-protocol.png b/docs/benchmarks/imgs/topology-only-store-protocol.png new file mode 100644 index 0000000000000000000000000000000000000000..7ef28c1d91b70ba2e1883c466a1c93bee56246ec GIT binary patch literal 116756 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 |U46Zou(e2DUvE6^!2Di1l$dGm?Y+Y$*c?;K zrKIxf>W->t>czTq@$m5>gZnvNP@H&1NAn75+k#1Vy>RJf5wg)gm(;smT8a}pMI{X5 zre|knI4Sfj?>GN>X>mauc7>S0IHo2P-0)r$1NT^2rJnK#n^I_pZ^JYl<-_cgZE|wk zf!Nj*XwW@hw;hei>&=`?_6Q!Ja*dIV@LukxSa5DZL1;+Gqf1Liyg%LEOu1+E4wxC7yk`$U&b5V& zV!LYb-!XYug#guk9b8d_do3DNRr zg{rUWfzU2Ofb29o_9u!(xUtOC*;stLlvzRL=Lu$5Nf*jAkZhZo#m;M4;?06D4KT>D zA)LMJ86qHnjPLXFhzt97`iKPIwW%&gzn{~f{qz;j^|2Zt=+6Ym2sOfC9+MJxGf{Ip zSbzHsOu~qz*gbXPV9=VtR9M{H(o!LlS+RAs?%&IAHZVj8D2oR?dr_UZ=IG(%!c!8I5VR73 z>Zr!$fO+|Q~ZLl81p$B7aidVvGTm|9b{c;GypBrj@Z#gHpX-LRKsBo`cd~cS&7L%n^;=XC3jQX}AHH zBktd~4^DTk$B)O@Ujj=CcyS7BpkreRkEE^_N$Y{@fM9X({Bak_{5w(<8dt@|nQSmr zW?V5+BI4>*@V6AcHcFr5PE1awLe;ZyikRQLY10umrcC9V-pk9#R-{n?uHagqy%W90XBn-5wdE)g;0gz8tB^|va$k^(8Y-TV^`&^~<6tnZow{SuLUkzW#@0pS-iNv^>-~xz^^Dt|X z$V)cgu;*{h-?0Y^4R9U7!1l6`0i3CJYEt9dgGwOvI6+aem8dShY|skdS-tjc$nqhk zp>dNiV8S^EJZWxv8lc0Fp1AK#vE4s|9(t*!UcbH{p$&4H(>bxj7I$PQKg7Qv;vMy0 z&;hMy!E4&92KR~sj8bA`Yimo?Ik*X$ZPyyqi|EwHSqiR^lzGjn+PG?YS6En(p&rJ? zj$oV?q<131!k}{C9ia%$P6=$E+7Hvi;=09GZ{DDbpI%e*17#}9Ud~4$0YUWO>tV=K z)8`)JLx&K1cVLJdeiNqk-u!uqNJao^pb%vZ6C?RBit5jKGw3p*dZSw-hf*Vl7$ z!ktVu?s9AvM`lIqR?{mh70B{gU?7Qv`v{^2JG;C>@6ePNat;7G{&N#argKK@yFEQT zFoFy~4RkrpG}=iktG$$x(o)21xch7p5ICeAzz|D`jDjD^D>)gN4v>T(Gk#XO^IOiNM}BaIfd~t;b?fT`Xbv%^tAwK=)z$+O z7x%M-V84y` zfKP$+6kZAdIbeAQQZzI^zDqy9f}IU2l)RGC(An)}%`7k>kb zg5eJzkO;#*rX#1h@2dh?-%Wj0@I#^H-Lvvbvp7d5CNQMMA8`e_6ucra>jrcQDwXO~ z)GqyIHZIQyp8!z;=}tp~14fC1okb3Ohvu(=c%BEHNYlY8A+7rV++%WMiW5L6;T^@Xw*Cq8m^5GBA(nE16!hsVY$9ox7s{qikAsso@9mZNx( z?$@cH@A;rbyC|G73kZ~X?k%!<3bU}XI}juA^bhDop~ zj(Ey9*vtP}X!uVrD8O9Xjlr;A$u9r-!6?IbOQdtXvQL_t52%swXOGT4?IKOvp#K3< CW#5nh literal 0 HcmV?d00001 diff --git a/docs/benchmarks/imgs/using-jmeter.png b/docs/benchmarks/imgs/using-jmeter.png new file mode 100644 index 0000000000000000000000000000000000000000..73918de75c1a0d369f49337607a99c2316982977 GIT binary patch literal 73641 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�!_EDW})8D_Ndeel?2CXba?e=rF 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 literal 0 HcmV?d00001 diff --git a/docs/benchmarks/postgres-adoption.md b/docs/benchmarks/postgres-adoption.md new file mode 100644 index 0000000000..f5d548b729 --- /dev/null +++ b/docs/benchmarks/postgres-adoption.md @@ -0,0 +1,234 @@ +# Epic + +The *Nim Waku Node*, *nwaku*, has the capability of archiving messages until a certain limit (e.g. 30 days) so that other nodes can synchronize their message history throughout the *Store* protocol. + +The *nwaku* originally used *SQLite* to archive messages but this has an impact on the node. *Nwaku* is single-threaded and therefore, any *SQLite* operation impacts the performance of other protocols, like *Relay.* + +Therefore, the *Postgres* adoption is needed to enhance that. + +[https://github.com/waku-org/nwaku/issues/1888](https://github.com/waku-org/nwaku/issues/1888) + +# How to connect the *nwaku* to *Postgres* + +Simply pass the next parameter to *nwaku* + +```bash +--store-message-db-url="postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:${POSTGRES_PORT}/postgres +``` + +Notice that this only makes sense if the _nwaku_ has the _Store_ protocol mounted +```bash +--store=true +``` + +(start the _nwaku_ node with `--help` parameter for more _Store_ options) + +# Examples of *nwaku* using *Postgres* + +[https://github.com/waku-org/nwaku-compose](https://github.com/waku-org/nwaku-compose) + +[https://github.com/waku-org/test-waku-query](https://github.com/waku-org/test-waku-query) + +# Stress tests + +The following repository was created as a tool to stress and compare performance between *nwaku*+*Postgres* and *nwaku*+*SQLite*: + +[https://github.com/waku-org/test-waku-query](https://github.com/waku-org/test-waku-query) + +## Insert test results + +### Maximum insert throughput + +**Scenario** + +- 1 node subscribed to pubsubtopic ‘x’ and the *Store* protocol mounted. +- ‘n’ nodes connected to the “store” node, and publishing messages simultaneously to pubsubtopic ‘x’. +- All nodes running locally in a *Dell Latitude 7640*. +- Each published message is fixed, 1.4 KB: [publish_one_client.sh](https://github.com/waku-org/test-waku-query/blob/master/sh/publish_one_client.sh) +- The next script is used to simulate multiple nodes publishing messages: [publish_multiple_clients.sh](https://github.com/waku-org/test-waku-query/blob/fe7061a21eb14395e723402face755c826077aec/sh/publish_multiple_clients.sh) + +**Sought goal** + +Find out the maximum number of concurrent inserts that both *SQLite* and *Postgres* could support, and check whether _Postgres_ behaves better than _SQLite_ or not. + +**Conclusion** + +Messages are lost after a certain threshold, and this message loss is due to limitations in the *Relay* protocol (GossipSub - libp2p.) + +For example, if we set 30 nodes publishing 300 messages simultaneously, then 8997 rows were stored and not the expected 9000, in both *SQLite* and *Postgres* databases. + +The reason why few messages were lost is because the message rate was higher than the *relay* protocol can support, and therefore a few messages were not stored. In this example, the test took 38.8’’, and therefore, the node was receiving 232 msgs/sec, which is much more than the normal rate a node will work with, which is ~10 msgs/sec (rate extracted from Grafana’s stats for the *status.prod* fleet.) + +As a conclusion, the bottleneck is within the *Relay* protocol itself and not the underlying databases. Or, in other words, both *SQLite* and *Postgres* can support the maximum insert rate a Waku node will operate within normal conditions. + +## Query test results (jmeter) + +In this case, we are comparing *Store* performance by means of Rest service. + +**Scenario** + +- node_a: one _nwaku_ node with *Store* and connected to *Postgres.* +- node_b: one _nwaku_ node with *Store* and using *SQLite*. +- Both *Postgres* and *SQLite* contain +1 million rows. +- node_c: one _nwaku_ node with *REST* enabled and acting as a *Store client* for node_a. +- node_d: one _nwaku_ node with *REST* enabled and acting as a *Store client* for node_b. +- With _jmeter_, 10 users make *REST* *Store* requests concurrently to each of the “rest” nodes (node_c and node_d.) +- All _nwaku_ nodes running statusteam/nim-waku:v0.19.0 + +[This](https://github.com/waku-org/test-waku-query/blob/master/docker/jmeter/http_store_requests.jmx) is the _jmeter_ project used. + +![Using jmeter](imgs/using-jmeter.png) + +*Results* + +With this, the *node_b* brings a higher throughput than the *node_a* and that indicates that the node that uses SQLite performs better. The following shows the measures taken by _jmeter_ with regard to the REST requests. + +![jmeter results](imgs/jmeter-results.png) + +## Query test results (only Store protocol) + +In this test suite, only the Store protocol is being analyzed, i.e. without REST. For that, a go-waku node is used, which acts as *Store* client. On the other hand, we have another go-waku app that publishes random *Relay* messages periodically. Therefore, this can be considered a more realistic approach. + +The following diagram shows the topology used: + +![Topology](imgs/topology-only-store-protocol.png) + +For that, the next apps were used: + +1. [Waku-publisher.](https://github.com/alrevuelta/waku-publisher/tree/9fb206c14a17dd37d20a9120022e86475ce0503f) This app can publish Relay messages with different numbers of clients +2. [Waku-store-query-generator](https://github.com/Ivansete-status/waku-store-query-generator/tree/19e6455537b6d44199cf0c8558480af5c6788b0d). This app is based on the Waku-publisher but in this case, it can spawn concurrent go-waku Store clients. + +That topology is defined in [this](https://github.com/waku-org/test-waku-query/blob/7090cd125e739306357575730d0e54665c279670/docker/docker-compose-manual-binaries.yml) docker-compose file. + +Notice that the two `nwaku` nodes run the very same version, which is compiled locally. + +### Comparing archive SQLite & Postgres performance in [nwaku-b6dd6899](https://github.com/waku-org/nwaku/tree/b6dd6899030ee628813dfd60ad1ad024345e7b41) + +The next results were obtained by running the docker-compose-manual-binaries.yml from [test-waku-queryc078075](https://github.com/waku-org/test-waku-query/tree/c07807597faa781ae6c8c32eefdf48ecac03a7ba) in the sandbox machine (metal-01.he-eu-hel1.wakudev.misc.statusim.net.) + +**Scenario 1** + +**Store rate:** 1 user generating 1 store-req/sec. + +**Relay rate:** 1 user generating 10msg/sec, 10KB each. + +In this case, we can see that the SQLite performance is better regarding the store requests. + +![Insert time distribution](imgs/insert-time-dist.png) + +![Query time distribution](imgs/query-time-dist.png) + +The following graph shows how the *SQLite* node has blocking periods whereas the *Postgres* always gives a steady rate. + +![Num queries per minute](imgs/num-queries-per-minute.png) + +**Scenario 2** + +**Store rate:** 10 users generating 1 store-req/sec. + +**Relay rate:** 1 user generating 10msg/sec, 10KB each. + +In this case, is more evident that the *SQLite* performs better. + +![Insert time distribution](imgs/insert-time-dist-2.png) + +![Query time distribution](imgs/query-time-dist-2.png) + +**Scenario 3** + +**Store rate:** 25 users generating 1 store-req/sec. + +**Relay rate:** 1 user generating 10msg/sec, 10KB each. + +In this case, the performance is similar regarding the timings. The store rate is bigger in *SQLite* and *Postgres* keeps the same level as in scenario 2. + +![Insert time distribution](imgs/insert-time-dist-3.png) + +![Query time distribution](imgs/query-time-dist-3.png) + +### Comparing archive SQLite & Postgres performance in [nwaku-b452ed8](https://github.com/waku-org/nwaku/tree/b452ed865466a33b7f5b87fa937a8471b28e466e) + +This nwaku commit is after a few **Postgres** optimizations were applied. + +The next results were obtained by running the docker-compose-manual-binaries.yml from [test-waku-queryc078075](https://github.com/waku-org/test-waku-query/tree/c07807597faa781ae6c8c32eefdf48ecac03a7ba) in the sandbox machine (metal-01.he-eu-hel1.wakudev.misc.statusim.net.) + +**Scenario 1** + +**Store rate** 1 user generating 1 store-req/sec. Notice that the current Store query used generates pagination which provokes more subsequent queries than the 1 req/sec that would be expected without pagination. + +**Relay rate:** 1 user generating 10msg/sec, 10KB each. + +![Insert time distribution](imgs/insert-time-dist-4.png) + +![Query time distribution](imgs/query-time-dist-4.png) + +It cannot be appreciated but the average *****Store***** time was 11ms. + +**Scenario 2** + +**Store rate:** 10 users generating 1 store-req/sec. Notice that the current Store query used generates pagination which provokes more subsequent queries than the 10 req/sec that would be expected without pagination. + +**Relay rate:** 1 user generating 10msg/sec, 10KB each. + +![Insert time distribution](imgs/insert-time-dist-5.png) + +![Query time distribution](imgs/query-time-dist-5.png) + +**Scenario 3** + +**Store rate:** 25 users generating 1 store-req/sec. Notice that the current Store query used generates pagination which provokes more subsequent queries than the 25 req/sec that would be expected without pagination. + +**Relay rate:** 1 user generating 10msg/sec, 10KB each. + +![Insert time distribution](imgs/insert-time-dist-6.png) + +![Query time distribution](imgs/query-time-dist-6.png) + +### Conclusions + +After comparing both systems, *SQLite* performs much better than *Postgres* However, a benefit of using *Postgres* is that it performs asynchronous operations, and therefore doesn’t consume CPU time that would be better invested in *Relay* for example. + +Remember that _nwaku_ is single-threaded and *chronos* performs orchestration among a bunch of async tasks, and therefore it is not a good practice to block the whole _nwaku_ process in a query, as happens with *SQLite* + +After applying a few *Postgres* enhancements, it can be noticed that the use of concurrent *Store* queries doesn’t go below the 250ms barrier. The reason for that is that most of the time is being consumed in [this point](https://github.com/waku-org/nwaku/blob/6da1aeec5370bb1c116509e770178cca2662b69c/waku/common/databases/db_postgres/dbconn.nim#L124). The `libpqisBusy()` function indicates that the connection is still busy even the queries finished. + +Notice that we usually have a rate below 1100 req/minute in _status.prod_ fleet (checked November 7, 2023.) + +----------------------------- + +## Multiple nodes & one single database + +This study aims to look for possible issues when having only one single database while several Waku nodes insert or retrieve data from it. +The following diagram shows the scenery used for such analysis. + +![digram_multiple_nodes_one_database](imgs/digram_multiple_nodes_one_database.png) + +There are three nim-waku nodes that are connected to the same database and all of them are trying to write messages to the same _PostgreSQL_ instance. With that, it is very common to see errors like: +``` +ERR 2023-11-27 13:18:07.575+00:00 failed to insert message topics="waku archive" tid=2921 file=archive.nim:111 err="error in runStmt: error in dbConnQueryPrepared calling waitQueryToFinish: error in query: ERROR: duplicate key value violates unique constraint \"messageindex\"\nDETAIL: Key (storedat, id, pubsubtopic)=(1701091087417938405, 479c95bbf74222417abf76c7f9c480a6790e454374dc4f59bbb15ca183ce1abd, /waku/2/default-waku/proto) already exists.\n +``` + +The `db-postgres-hammer` is aimed to stress the database from the `select` point of view. It performs `N` concurrent `select` queries with a certain rate. + +### Results + +The following results were obtained by using the sandbox machine (metal-01.he-eu-hel1.wakudev.misc) and running nim-waku nodes from https://github.com/waku-org/nwaku/tree/b452ed865466a33b7f5b87fa937a8471b28e466e and using the `test-waku-query` project from https://github.com/waku-org/test-waku-query/tree/fef29cea182cc744c7940abc6c96d38a68739356 + +The following shows the results + +1. Two `nwaku-postgres-additional` inserting messages plus 50 `db-postgres-hammer` making 10 `selects` per second. + +![Insert time distribution Postgres](imgs/insert-time-dist-postgres.png) + +![Query time distribution Postgres](imgs/query-time-dist-postgres.png) + +2. Five `nwaku-postgres-additional` inserting messages plus 50 `db-postgres-hammer` making 10 `selects` per second. +![Insert time distribution Postgres](imgs/insert-time-dist-postgres-2.png) +![Query time distribution Postgres](imgs/query-time-dist-postgres-2.png) + +In this case, the insert time gets more spread because the insert operations are shared amongst five more nodes. The _Store_ query time remains the same on average. + +3. Five `nwaku-postgres-additional` inserting messages plus 100 `db-postgres-hammer` making 10 `selects` per second. +This case is similar to 2. but stressing more the database. +![Insert time distribution Postgres](imgs/insert-time-dist-postgres-3.png) +![Query time distribution Postgres](imgs/query-time-dist-postgres-3.png) From 3bbe234962c34214f96e01324fceae5b7836d8b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lex=20Cabeza=20Romero?= Date: Thu, 4 Jan 2024 16:26:27 +0100 Subject: [PATCH 176/274] test(autosharding): Functional Tests (#2318) * Implement autosharding tests. --- tests/testlib/tables.nim | 28 +++++ tests/waku_core/test_sharding.nim | 145 --------------------- tests/waku_core/topics/test_sharding.nim | 153 +++++++++++++++++++++++ waku/waku_core/topics/sharding.nim | 2 +- 4 files changed, 182 insertions(+), 146 deletions(-) create mode 100644 tests/testlib/tables.nim delete mode 100644 tests/waku_core/test_sharding.nim create mode 100644 tests/waku_core/topics/test_sharding.nim diff --git a/tests/testlib/tables.nim b/tests/testlib/tables.nim new file mode 100644 index 0000000000..1887982283 --- /dev/null +++ b/tests/testlib/tables.nim @@ -0,0 +1,28 @@ +import + std/[ + tables, + sequtils, + options + ] + +import + ../../../waku/waku_core/topics, + ../testlib/wakucore + + + + + +proc `==`*(table: Table[pubsub_topic.NsPubsubTopic, seq[NsContentTopic]], other: array[0..0, (string, seq[string])]): bool = + let otherTyped = other.map( + proc(item: (string, seq[string])): (NsPubsubTopic, seq[NsContentTopic]) = + let + (pubsubTopic, contentTopics) = item + nsPubsubTopic = NsPubsubTopic.parse(pubsubTopic).value() + nsContentTopics = contentTopics.map( + proc(contentTopic: string): NsContentTopic = NsContentTopic.parse(contentTopic).value() + ) + return (nsPubsubTopic, nsContentTopics) + ) + + table == otherTyped.toTable() diff --git a/tests/waku_core/test_sharding.nim b/tests/waku_core/test_sharding.nim deleted file mode 100644 index ea385f5dbb..0000000000 --- a/tests/waku_core/test_sharding.nim +++ /dev/null @@ -1,145 +0,0 @@ -{.used.} - -import - std/options, - std/strutils, - std/sugar, - std/random, - stew/results, - testutils/unittests -import - ../../../waku/waku_core/topics - -suite "Waku Sharding": - - randomize() - - const WordLength = 5 - - proc randomContentTopic(): NsContentTopic = - var app = "" - - for n in 0.. 0 are not supported yet" - - #[ test "Sorted shard list": - ## Given - let topic = "/0/toychat/2/huilong/proto" - - ## When - let contentTopic = NsContentTopic.parse(topic).expect("Parsing") - let count = shardCount(contentTopic).expect("Valid parameters") - let weights = repeat(1.0, count) - - let shardsRes = weightedShardList(contentTopic, count, weights) - - ## Then - assert shardsRes.isOk(), shardsRes.error - - let shards = shardsRes.get() - check: - shards.len == count - isSorted(shards, hashOrder) ]# - - test "Shard Choice Reproducibility": - ## Given - let topic = "/toychat/2/huilong/proto" - - ## When - let contentTopic = NsContentTopic.parse(topic).expect("Parsing") - - let pubsub = getGenZeroShard(contentTopic, GenerationZeroShardsCount) - - ## Then - check: - pubsub == NsPubsubTopic.staticSharding(ClusterId, 3) - - test "Shard Choice Simulation": - ## Given - let topics = collect: - for i in 0..<100000: - randomContentTopic() - - var counts = newSeq[0](GenerationZeroShardsCount) - - ## When - for topic in topics: - let pubsub = getShard(topic).expect("Valid Topic") - counts[pubsub.shard] += 1 - - ## Then - for i in 1..= (float64(counts[i]) * 0.95) - float64(counts[i]) >= (float64(counts[i - 1]) * 0.95) - - #echo counts - - - - - - - - - - diff --git a/tests/waku_core/topics/test_sharding.nim b/tests/waku_core/topics/test_sharding.nim new file mode 100644 index 0000000000..102bb8219f --- /dev/null +++ b/tests/waku_core/topics/test_sharding.nim @@ -0,0 +1,153 @@ +import + std/[ + options, + tables + ], + testutils/unittests + + +import + ../../../../waku/waku_core/topics, + ../../testlib/[ + wakucore, + tables, + testutils + ] + + +suite "Autosharding": + const + pubsubTopic04 = "/waku/2/rs/0/4" + pubsubTopic13 = "/waku/2/rs/1/3" + contentTopicShort = "/toychat/2/huilong/proto" + contentTopicFull = "/0/toychat/2/huilong/proto" + contentTopicInvalid = "/1/toychat/2/huilong/proto" + + + suite "getGenZeroShard": + test "Generate Gen0 Shard": + # Given two valid topics + let + nsContentTopic1 = NsContentTopic.parse(contentTopicShort).value() + nsContentTopic2 = NsContentTopic.parse(contentTopicFull).value() + + # When we generate a gen0 shard from them + let + nsPubsubTopic1 = getGenZeroShard(nsContentTopic1, GenerationZeroShardsCount) + nsPubsubTopic2 = getGenZeroShard(nsContentTopic2, GenerationZeroShardsCount) + + # Then the generated shards are valid + check: + nsPubsubTopic1 == NsPubsubTopic.staticSharding(ClusterId, 3) + nsPubsubTopic2 == NsPubsubTopic.staticSharding(ClusterId, 3) + + suite "getShard from NsContentTopic": + test "Generate Gen0 Shard with topic.generation==none": + # When we get a shard from a topic without generation + let nsPubsubTopic = getShard(contentTopicShort) + + # Then the generated shard is valid + check: + nsPubsubTopic.value() == NsPubsubTopic.staticSharding(ClusterId, 3) + + test "Generate Gen0 Shard with topic.generation==0": + # When we get a shard from a gen0 topic + let nsPubsubTopic = getShard(contentTopicFull) + + # Then the generated shard is valid + check: + nsPubsubTopic.value() == NsPubsubTopic.staticSharding(ClusterId, 3) + + test "Generate Gen0 Shard with topic.generation==other": + # When we get a shard from ain invalid content topic + let nsPubsubTopic = getShard(contentTopicInvalid) + + # Then the generated shard is valid + check: + nsPubsubTopic.error() == "Generation > 0 are not supported yet" + + suite "getShard from ContentTopic": + test "Generate Gen0 Shard with topic.generation==none": + # When we get a shard from it + let nsPubsubTopic = getShard(contentTopicShort) + + # Then the generated shard is valid + check: + nsPubsubTopic.value() == NsPubsubTopic.staticSharding(ClusterId, 3) + + test "Generate Gen0 Shard with topic.generation==0": + # When we get a shard from it + let nsPubsubTopic = getShard(contentTopicFull) + + # Then the generated shard is valid + check: + nsPubsubTopic.value() == NsPubsubTopic.staticSharding(ClusterId, 3) + + test "Generate Gen0 Shard with topic.generation==other": + # When we get a shard from it + let nsPubsubTopic = getShard(contentTopicInvalid) + + # Then the generated shard is valid + check: + nsPubsubTopic.error() == "Generation > 0 are not supported yet" + + test "Generate Gen0 Shard invalid topic": + # When we get a shard from it + let nsPubsubTopic = getShard("invalid") + + # Then the generated shard is valid + check: + nsPubsubTopic.error() == "invalid format: topic must start with slash" + + suite "parseSharding": + test "contentTopics is ContentTopic": + # When calling with contentTopic as string + let topicMap = parseSharding(some(pubsubTopic04), contentTopicShort) + + # Then the topicMap is valid + check: + topicMap.value() == {pubsubTopic04: @[contentTopicShort]} + + test "contentTopics is seq[ContentTopic]": + # When calling with contentTopic as string seq + let topicMap = parseSharding(some(pubsubTopic04), @[contentTopicShort, "/0/foo/1/bar/proto"]) + + # Then the topicMap is valid + check: + topicMap.value() == {pubsubTopic04: @[contentTopicShort, "/0/foo/1/bar/proto"]} + + test "pubsubTopic is none": + # When calling with pubsubTopic as none + let topicMap = parseSharding(PubsubTopic.none(), contentTopicShort) + + # Then the topicMap is valid + check: + topicMap.value() == {pubsubTopic13: @[contentTopicShort]} + + test "content parse error": + # When calling with pubsubTopic as none with invalid content + let topicMap = parseSharding(PubsubTopic.none(), "invalid") + + # Then the topicMap is valid + check: + topicMap.error() == "Cannot parse content topic: invalid format: topic must start with slash" + + test "pubsubTopic parse error": + # When calling with pubsubTopic as none with invalid content + let topicMap = parseSharding(some("invalid"), contentTopicShort) + + # Then the topicMap is valid + check: + topicMap.error() == "Cannot parse pubsub topic: invalid format: must start with /waku/2" + + test "pubsubTopic getShard error": + # When calling with pubsubTopic as none with invalid content + let topicMap = parseSharding(PubsubTopic.none(), contentTopicInvalid) + + # Then the topicMap is valid + check: + topicMap.error() == "Cannot autoshard content topic: Generation > 0 are not supported yet" + + xtest "catchable error on add to topicMap": + # TODO: Trigger a CatchableError or mock + discard diff --git a/waku/waku_core/topics/sharding.nim b/waku/waku_core/topics/sharding.nim index ed4eef560f..c62bacfbf6 100644 --- a/waku/waku_core/topics/sharding.nim +++ b/waku/waku_core/topics/sharding.nim @@ -84,7 +84,7 @@ proc parseSharding*(pubsubTopic: Option[PubsubTopic], contentTopics: ContentTopi if shardsRes.isErr(): return err("Cannot autoshard content topic: " & $shardsRes.error) else: shardsRes.get() - + if not topicMap.hasKey(pubsub): topicMap[pubsub] = @[] From bd7570faa314bc9ebfd39dba67cbe94da28dbb5a Mon Sep 17 00:00:00 2001 From: Ivan FB <128452529+Ivansete-status@users.noreply.github.com> Date: Thu, 4 Jan 2024 17:35:00 +0100 Subject: [PATCH 177/274] bump vendors for 0.24.0 (#2333) The following vendors have changes but are not being updated for the reason explained. nim-web3: not updated because unit tests started to fail and no straightforward solution found. nim-toml-serialization: not updated because it introduced a breaking change on how the --config-file attribute is parsed. The array attributes now need a comma. For example, the following attribute from within the config file: pubsub-topic = [ "/waku/2/default-waku/proto" "/waku/2/testing-store" ] ... should be converted to: pubsub-topic = [ "/waku/2/default-waku/proto", "/waku/2/testing-store" ] and we cannot accept that breaking change --- vendor/nim-chronos | 2 +- vendor/nim-eth | 2 +- vendor/nim-json-rpc | 2 +- vendor/nim-json-serialization | 2 +- vendor/nim-libp2p | 2 +- vendor/nim-metrics | 2 +- vendor/nim-serialization | 2 +- waku/waku_api/rest/debug/types.nim | 4 +- waku/waku_api/rest/filter/types.nim | 58 ++++++++++++++----- waku/waku_api/rest/relay/types.nim | 20 ++----- waku/waku_api/rest/serdes.nim | 16 ++++- waku/waku_api/rest/store/types.nim | 90 +++++++++++++---------------- 12 files changed, 113 insertions(+), 89 deletions(-) diff --git a/vendor/nim-chronos b/vendor/nim-chronos index e38ceb5378..41f77d261e 160000 --- a/vendor/nim-chronos +++ b/vendor/nim-chronos @@ -1 +1 @@ -Subproject commit e38ceb5378e7ce945eedbe1c6fb670095cfb9cc5 +Subproject commit 41f77d261ead2508acdd3bd3f88a5cbbcefff05f diff --git a/vendor/nim-eth b/vendor/nim-eth index e5c2b1784e..5aaeb67ebe 160000 --- a/vendor/nim-eth +++ b/vendor/nim-eth @@ -1 +1 @@ -Subproject commit e5c2b1784ec7badc6162325e37daee2229f53d8b +Subproject commit 5aaeb67ebedbefaae2f719f245a96c1a80c42f81 diff --git a/vendor/nim-json-rpc b/vendor/nim-json-rpc index 60c4c9b5f2..33360528d2 160000 --- a/vendor/nim-json-rpc +++ b/vendor/nim-json-rpc @@ -1 +1 @@ -Subproject commit 60c4c9b5f28b530d5d89fd14c337af1d86390a82 +Subproject commit 33360528d208aaa70a6ed914619fe76321760d54 diff --git a/vendor/nim-json-serialization b/vendor/nim-json-serialization index 230e226da0..3f1ce24ee1 160000 --- a/vendor/nim-json-serialization +++ b/vendor/nim-json-serialization @@ -1 +1 @@ -Subproject commit 230e226da06605f9d8b8bdb1ba178c4b30511aca +Subproject commit 3f1ce24ee116daedbc9c8be525e63ec03e185a28 diff --git a/vendor/nim-libp2p b/vendor/nim-libp2p index 3011ba4326..e3c967ad19 160000 --- a/vendor/nim-libp2p +++ b/vendor/nim-libp2p @@ -1 +1 @@ -Subproject commit 3011ba4326fa55220a758838835797ff322619fc +Subproject commit e3c967ad1939fb33b8e13759037d193734acd202 diff --git a/vendor/nim-metrics b/vendor/nim-metrics index 6142e433fc..51f1227d0f 160000 --- a/vendor/nim-metrics +++ b/vendor/nim-metrics @@ -1 +1 @@ -Subproject commit 6142e433fc8ea9b73379770a788017ac528d46ff +Subproject commit 51f1227d0fd04ce84b1ef784b11280cb7875348c diff --git a/vendor/nim-serialization b/vendor/nim-serialization index 543b2f3dd0..4d541ec434 160000 --- a/vendor/nim-serialization +++ b/vendor/nim-serialization @@ -1 +1 @@ -Subproject commit 543b2f3dd0724f7cf631feba6c2a3ec438f3d230 +Subproject commit 4d541ec43454809904fc4c3c0a7436410ad597d2 diff --git a/waku/waku_api/rest/debug/types.nim b/waku/waku_api/rest/debug/types.nim index 102cbfc154..76ea1b9fc5 100644 --- a/waku/waku_api/rest/debug/types.nim +++ b/waku/waku_api/rest/debug/types.nim @@ -34,8 +34,8 @@ proc writeValue*(writer: var JsonWriter[RestJson], value: DebugWakuInfo) {.raises: [IOError].} = writer.beginRecord() writer.writeField("listenAddresses", value.listenAddresses) - if value.enrUri.isSome: - writer.writeField("enrUri", value.enrUri) + if value.enrUri.isSome(): + writer.writeField("enrUri", value.enrUri.get()) writer.endRecord() proc readValue*(reader: var JsonReader[RestJson], value: var DebugWakuInfo) diff --git a/waku/waku_api/rest/filter/types.nim b/waku/waku_api/rest/filter/types.nim index a7a4fa5854..6930a23126 100644 --- a/waku/waku_api/rest/filter/types.nim +++ b/waku/waku_api/rest/filter/types.nim @@ -72,32 +72,62 @@ proc toWakuMessage*(msg: FilterWakuMessage, version = 0): Result[WakuMessage, st #### Serialization and deserialization -proc writeValue*(writer: var JsonWriter[RestJson], value: Base64String) - {.raises: [IOError].} = - writer.writeValue(string(value)) - proc writeValue*(writer: var JsonWriter[RestJson], value: FilterWakuMessage) {.raises: [IOError].} = writer.beginRecord() writer.writeField("payload", value.payload) - if value.contentTopic.isSome: - writer.writeField("contentTopic", value.contentTopic) - if value.version.isSome: - writer.writeField("version", value.version) - if value.timestamp.isSome: - writer.writeField("timestamp", value.timestamp) + if value.contentTopic.isSome(): + writer.writeField("contentTopic", value.contentTopic.get()) + if value.version.isSome(): + writer.writeField("version", value.version.get()) + if value.timestamp.isSome(): + writer.writeField("timestamp", value.timestamp.get()) writer.endRecord() -proc writeValue*(writer: var JsonWriter[RestJson], value: FilterLegacySubscribeRequest) +proc writeValue*(writer: var JsonWriter, value: FilterLegacySubscribeRequest) {.raises: [IOError].} = writer.beginRecord() writer.writeField("pubsubTopic", value.pubsubTopic) writer.writeField("contentFilters", value.contentFilters) writer.endRecord() -proc readValue*(reader: var JsonReader[RestJson], value: var Base64String) - {.raises: [SerializationError, IOError].} = - value = Base64String(reader.readValue(string)) +proc writeValue*(writer: var JsonWriter[RestJson], value: FilterSubscriptionResponse) + {.raises: [IOError].} = + writer.beginRecord() + writer.writeField("requestId", value.requestId) + writer.writeField("statusCode", value.statusCode) + writer.writeField("statusDesc", value.statusDesc) + writer.endRecord() + +proc writeValue*(writer: var JsonWriter[RestJson], value: FilterSubscribeRequest) + {.raises: [IOError].} = + writer.beginRecord() + writer.writeField("requestId", value.requestId) + if value.pubsubTopic.isSome(): + writer.writeField("pubsubTopic", value.pubsubTopic.get()) + writer.writeField("contentFilters", value.contentFilters) + writer.endRecord() + +proc writeValue*(writer: var JsonWriter[RestJson], value: FilterSubscriberPing) + {.raises: [IOError].} = + writer.beginRecord() + writer.writeField("requestId", value.requestId) + writer.endRecord() + +proc writeValue*(writer: var JsonWriter[RestJson], value: FilterUnsubscribeRequest) + {.raises: [IOError].} = + writer.beginRecord() + writer.writeField("requestId", value.requestId) + if value.pubsubTopic.isSome(): + writer.writeField("pubsubTopic", value.pubsubTopic.get()) + writer.writeField("contentFilters", value.contentFilters) + writer.endRecord() + +proc writeValue*(writer: var JsonWriter[RestJson], value: FilterUnsubscribeAllRequest) + {.raises: [IOError].} = + writer.beginRecord() + writer.writeField("requestId", value.requestId) + writer.endRecord() proc readValue*(reader: var JsonReader[RestJson], value: var FilterWakuMessage) {.raises: [SerializationError, IOError].} = diff --git a/waku/waku_api/rest/relay/types.nim b/waku/waku_api/rest/relay/types.nim index 126d94ac6a..6dd440c9ba 100644 --- a/waku/waku_api/rest/relay/types.nim +++ b/waku/waku_api/rest/relay/types.nim @@ -54,26 +54,18 @@ proc toWakuMessage*(msg: RelayWakuMessage, version = 0): Result[WakuMessage, str #### Serialization and deserialization -proc writeValue*(writer: var JsonWriter[RestJson], value: Base64String) - {.raises: [IOError].} = - writer.writeValue(string(value)) - proc writeValue*(writer: var JsonWriter[RestJson], value: RelayWakuMessage) {.raises: [IOError].} = writer.beginRecord() writer.writeField("payload", value.payload) - if value.contentTopic.isSome: - writer.writeField("contentTopic", value.contentTopic) - if value.version.isSome: - writer.writeField("version", value.version) - if value.timestamp.isSome: - writer.writeField("timestamp", value.timestamp) + if value.contentTopic.isSome(): + writer.writeField("contentTopic", value.contentTopic.get()) + if value.version.isSome(): + writer.writeField("version", value.version.get()) + if value.timestamp.isSome(): + writer.writeField("timestamp", value.timestamp.get()) writer.endRecord() -proc readValue*(reader: var JsonReader[RestJson], value: var Base64String) - {.raises: [SerializationError, IOError].} = - value = Base64String(reader.readValue(string)) - proc readValue*(reader: var JsonReader[RestJson], value: var RelayWakuMessage) {.raises: [SerializationError, IOError].} = var diff --git a/waku/waku_api/rest/serdes.nim b/waku/waku_api/rest/serdes.nim index 57541e60ce..d68c893168 100644 --- a/waku/waku_api/rest/serdes.nim +++ b/waku/waku_api/rest/serdes.nim @@ -14,12 +14,16 @@ import json_serialization/std/net, json_serialization/std/sets, presto/common - +import + ../../common/base64 logScope: topics = "waku node rest" -Json.createFlavor RestJson +createJsonFlavor RestJson + +Json.setWriter JsonWriter, + PreferredOutput = string template unrecognizedFieldWarning* = # TODO: There should be a different notification mechanism for informing the @@ -31,6 +35,14 @@ template unrecognizedFieldWarning* = type SerdesResult*[T] = Result[T, cstring] +proc writeValue*(writer: var JsonWriter, value: Base64String) + {.gcsafe, raises: [IOError].} = + writer.writeValue(string(value)) + +proc readValue*(reader: var JsonReader, value: var Base64String) + {.gcsafe, raises: [SerializationError, IOError].} = + value = Base64String(reader.readValue(string)) + proc decodeFromJsonString*[T](t: typedesc[T], data: JsonString, requireAllFields = true): SerdesResult[T] = diff --git a/waku/waku_api/rest/store/types.nim b/waku/waku_api/rest/store/types.nim index 92da532a90..d2195acb5a 100644 --- a/waku/waku_api/rest/store/types.nim +++ b/waku/waku_api/rest/store/types.nim @@ -50,6 +50,10 @@ type # field that contains error information errorMessage*: Option[string] +createJsonFlavor RestJson + +Json.setWriter JsonWriter, + PreferredOutput = string #### Type conversion @@ -127,40 +131,26 @@ proc toStoreResponseRest*(histResp: HistoryResponse): StoreResponseRest = cursor: cursor ) -## Beginning of Base64String serde - -proc writeValue*(writer: var JsonWriter[RestJson], - value: Base64String) - {.raises: [IOError].} = - writer.writeValue(string(value)) - -proc readValue*(reader: var JsonReader[RestJson], - value: var Base64String) - {.raises: [SerializationError, IOError].} = - value = Base64String(reader.readValue(string)) - -## End of Base64String serde - ## Beginning of StoreWakuMessage serde -proc writeValue*(writer: var JsonWriter[RestJson], +proc writeValue*(writer: var JsonWriter, value: StoreWakuMessage) - {.raises: [IOError].} = + {.gcsafe, raises: [IOError].} = writer.beginRecord() writer.writeField("payload", $value.payload) - if value.contentTopic.isSome: - writer.writeField("content_topic", value.contentTopic) - if value.version.isSome: - writer.writeField("version", value.version) - if value.timestamp.isSome: - writer.writeField("timestamp", value.timestamp) - if value.ephemeral.isSome: - writer.writeField("ephemeral", value.ephemeral) + if value.contentTopic.isSome(): + writer.writeField("content_topic", value.contentTopic.get()) + if value.version.isSome(): + writer.writeField("version", value.version.get()) + if value.timestamp.isSome(): + writer.writeField("timestamp", value.timestamp.get()) + if value.ephemeral.isSome(): + writer.writeField("ephemeral", value.ephemeral.get()) writer.endRecord() -proc readValue*(reader: var JsonReader[RestJson], +proc readValue*(reader: var JsonReader, value: var StoreWakuMessage) - {.raises: [SerializationError, IOError].} = + {.gcsafe, raises: [SerializationError, IOError].} = var payload = none(Base64String) contentTopic = none(ContentTopic) @@ -205,16 +195,16 @@ proc readValue*(reader: var JsonReader[RestJson], ## Beginning of MessageDigest serde -proc writeValue*(writer: var JsonWriter[RestJson], +proc writeValue*(writer: var JsonWriter, value: MessageDigest) - {.raises: [IOError].} = + {.gcsafe, raises: [IOError].} = writer.beginRecord() writer.writeField("data", base64.encode(value.data)) writer.endRecord() -proc readValue*(reader: var JsonReader[RestJson], +proc readValue*(reader: var JsonReader, value: var MessageDigest) - {.raises: [SerializationError, IOError].} = + {.gcsafe, raises: [SerializationError, IOError].} = var data = none(seq[byte]) @@ -240,9 +230,9 @@ proc readValue*(reader: var JsonReader[RestJson], ## Beginning of HistoryCursorRest serde -proc writeValue*(writer: var JsonWriter[RestJson], +proc writeValue*(writer: var JsonWriter, value: HistoryCursorRest) - {.raises: [IOError].} = + {.gcsafe, raises: [IOError].} = writer.beginRecord() writer.writeField("pubsub_topic", value.pubsubTopic) writer.writeField("sender_time", value.senderTime) @@ -250,9 +240,9 @@ proc writeValue*(writer: var JsonWriter[RestJson], writer.writeField("digest", value.digest) writer.endRecord() -proc readValue*(reader: var JsonReader[RestJson], +proc readValue*(reader: var JsonReader, value: var HistoryCursorRest) - {.raises: [SerializationError, IOError].} = + {.gcsafe, raises: [SerializationError, IOError].} = var pubsubTopic = none(PubsubTopic) senderTime = none(Timestamp) @@ -303,20 +293,20 @@ proc readValue*(reader: var JsonReader[RestJson], ## Beginning of StoreResponseRest serde -proc writeValue*(writer: var JsonWriter[RestJson], +proc writeValue*(writer: var JsonWriter, value: StoreResponseRest) - {.raises: [IOError].} = + {.gcsafe, raises: [IOError].} = writer.beginRecord() writer.writeField("messages", value.messages) - if value.cursor.isSome: - writer.writeField("cursor", value.cursor) - if value.errorMessage.isSome: - writer.writeField("error_message", value.errorMessage) + if value.cursor.isSome(): + writer.writeField("cursor", value.cursor.get()) + if value.errorMessage.isSome(): + writer.writeField("error_message", value.errorMessage.get()) writer.endRecord() -proc readValue*(reader: var JsonReader[RestJson], +proc readValue*(reader: var JsonReader, value: var StoreResponseRest) - {.raises: [SerializationError, IOError].} = + {.gcsafe, raises: [SerializationError, IOError].} = var messages = none(seq[StoreWakuMessage]) cursor = none(HistoryCursorRest) @@ -352,18 +342,18 @@ proc readValue*(reader: var JsonReader[RestJson], ## Beginning of StoreRequestRest serde -proc writeValue*(writer: var JsonWriter[RestJson], +proc writeValue*(writer: var JsonWriter, value: StoreRequestRest) - {.raises: [IOError].} = + {.gcsafe, raises: [IOError].} = writer.beginRecord() - if value.pubsubTopic.isSome: - writer.writeField("pubsub_topic", value.pubsubTopic) + if value.pubsubTopic.isSome(): + writer.writeField("pubsub_topic", value.pubsubTopic.get()) writer.writeField("content_topics", value.contentTopics) - if value.startTime.isSome: - writer.writeField("start_time", value.startTime) - if value.endTime.isSome: - writer.writeField("end_time", value.endTime) + if value.startTime.isSome(): + writer.writeField("start_time", value.startTime.get()) + if value.endTime.isSome(): + writer.writeField("end_time", value.endTime.get()) writer.writeField("page_size", value.pageSize) writer.writeField("ascending", value.ascending) writer.endRecord() From 7b4f4bb18c08d151da3c2b1a0bd514435fe1441e Mon Sep 17 00:00:00 2001 From: Simon-Pierre Vivier Date: Thu, 4 Jan 2024 16:39:03 -0500 Subject: [PATCH 178/274] fix(discv5): add bootnode filter exception (#2267) --- waku/waku_discv5.nim | 28 ++++++++++------------------ 1 file changed, 10 insertions(+), 18 deletions(-) diff --git a/waku/waku_discv5.nim b/waku/waku_discv5.nim index 9722ef6593..5daaef4209 100644 --- a/waku/waku_discv5.nim +++ b/waku/waku_discv5.nim @@ -52,7 +52,7 @@ type WakuDiscoveryV5* = ref object peerManager: Option[PeerManager] topicSubscriptionQueue: AsyncEventQueue[SubscriptionEvent] -proc shardingPredicate*(record: Record): Option[WakuDiscv5Predicate] = +proc shardingPredicate*(record: Record, bootnodes: seq[Record] = @[]): Option[WakuDiscv5Predicate] = ## Filter peers based on relay sharding information let typedRecord = record.toTyped().valueOr: debug "peer filtering failed", reason=error @@ -65,8 +65,9 @@ proc shardingPredicate*(record: Record): Option[WakuDiscv5Predicate] = debug "peer filtering updated" let predicate = proc(record: waku_enr.Record): bool = - record.getCapabilities().len > 0 and #RFC 31 requirement - nodeShard.shardIds.anyIt(record.containsShard(nodeShard.clusterId, it)) #RFC 64 guideline + bootnodes.contains(record) or # Temp. Bootnode exception + (record.getCapabilities().len > 0 and #RFC 31 requirement + nodeShard.shardIds.anyIt(record.containsShard(nodeShard.clusterId, it))) #RFC 64 guideline return some(predicate) @@ -78,26 +79,13 @@ proc new*( peerManager: Option[PeerManager] = none(PeerManager), queue: AsyncEventQueue[SubscriptionEvent] = newAsyncEventQueue[SubscriptionEvent](30), ): T = - let shardPredOp = - if record.isSome(): shardingPredicate(record.get()) - else: none(WakuDiscv5Predicate) - - var bootstrapRecords = conf.bootstrapRecords - - # Remove bootstrap nodes with which we don't share shards. - if shardPredOp.isSome(): - bootstrapRecords.keepIf(shardPredOp.get()) - - if conf.bootstrapRecords.len > 0 and bootstrapRecords.len == 0: - warn "No discv5 bootstrap nodes share this node configured shards" - let protocol = newProtocol( rng = rng, config = conf.discv5Config.get(protocol.defaultDiscoveryConfig), bindPort = conf.port, bindIp = conf.address, privKey = conf.privateKey, - bootstrapRecords = bootstrapRecords, + bootstrapRecords = conf.bootstrapRecords, enrAutoUpdate = conf.autoupdateRecord, previousRecord = record, enrIp = none(IpAddress), @@ -105,6 +93,10 @@ proc new*( enrUdpPort = none(Port), ) + let shardPredOp = + if record.isSome(): shardingPredicate(record.get(), conf.bootstrapRecords) + else: none(WakuDiscv5Predicate) + WakuDiscoveryV5( conf: conf, protocol: protocol, @@ -239,7 +231,7 @@ proc subscriptionsListener(wd: WakuDiscoveryV5) {.async.} = debug "ENR updated successfully" - wd.predicate = shardingPredicate(wd.protocol.localNode.record) + wd.predicate = shardingPredicate(wd.protocol.localNode.record, wd.protocol.bootstrapRecords) wd.topicSubscriptionQueue.unregister(key) From 42ede93b254d7afc41ea61f104c2ae65e70285d8 Mon Sep 17 00:00:00 2001 From: Emil Ivanichkov <51385502+EmilIvanichkovv@users.noreply.github.com> Date: Fri, 5 Jan 2024 11:00:41 +0200 Subject: [PATCH 179/274] fix: Set `record` to the Waku Node Builder in the examples as it is required (#2328) --- examples/publisher.nim | 12 +++++++++++- examples/subscriber.nim | 12 +++++++++++- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/examples/publisher.nim b/examples/publisher.nim index 975e1b85ad..864b76f728 100644 --- a/examples/publisher.nim +++ b/examples/publisher.nim @@ -43,8 +43,18 @@ proc setupAndPublish(rng: ref HmacDrbgContext) {.async.} = ip = parseIpAddress("0.0.0.0") flags = CapabilitiesBitfield.init(lightpush = false, filter = false, store = false, relay = true) + var enrBuilder = EnrBuilder.init(nodeKey) + + let recordRes = enrBuilder.build() + let record = + if recordRes.isErr(): + error "failed to create enr record", error=recordRes.error + quit(QuitFailure) + else: recordRes.get() + var builder = WakuNodeBuilder.init() builder.withNodeKey(nodeKey) + builder.withRecord(record) builder.withNetworkConfigurationDetails(ip, Port(wakuPort)).tryGet() let node = builder.build().tryGet() @@ -62,7 +72,7 @@ proc setupAndPublish(rng: ref HmacDrbgContext) {.async.} = # assumes behind a firewall, so not care about being discoverable let wakuDiscv5 = WakuDiscoveryV5.new( - node.rng, + node.rng, discv5Conf, some(node.enr), some(node.peerManager), diff --git a/examples/subscriber.nim b/examples/subscriber.nim index ba7813ae3b..5b58656474 100644 --- a/examples/subscriber.nim +++ b/examples/subscriber.nim @@ -38,8 +38,18 @@ proc setupAndSubscribe(rng: ref HmacDrbgContext) {.async.} = ip = parseIpAddress("0.0.0.0") flags = CapabilitiesBitfield.init(lightpush = false, filter = false, store = false, relay = true) + var enrBuilder = EnrBuilder.init(nodeKey) + + let recordRes = enrBuilder.build() + let record = + if recordRes.isErr(): + error "failed to create enr record", error=recordRes.error + quit(QuitFailure) + else: recordRes.get() + var builder = WakuNodeBuilder.init() builder.withNodeKey(nodeKey) + builder.withRecord(record) builder.withNetworkConfigurationDetails(ip, Port(wakuPort)).tryGet() let node = builder.build().tryGet() @@ -57,7 +67,7 @@ proc setupAndSubscribe(rng: ref HmacDrbgContext) {.async.} = # assumes behind a firewall, so not care about being discoverable let wakuDiscv5 = WakuDiscoveryV5.new( - node.rng, + node.rng, discv5Conf, some(node.enr), some(node.peerManager), From e9d083b2786c95a0fc1def1b4f21f4d73ae56402 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lex=20Cabeza=20Romero?= Date: Fri, 5 Jan 2024 14:49:04 +0100 Subject: [PATCH 180/274] test(peer-connection-managenent): Functional Tests (#2321) * Add simple mock mechanism. * Implement migrations tests. * Implement peer storage tests. * Add simple protobuf serialisation testcase. --- .../peer_store/test_migrations.nim | 56 +++++++++ .../peer_store/test_peer_storage.nim | 25 ++++ .../peer_store/test_waku_peer_storage.nim | 114 ++++++++++++++++++ tests/testlib/sequtils.nim | 3 + tests/testlib/simple_mock.nim | 50 ++++++++ 5 files changed, 248 insertions(+) create mode 100644 tests/node/peer_manager/peer_store/test_migrations.nim create mode 100644 tests/node/peer_manager/peer_store/test_peer_storage.nim create mode 100644 tests/node/peer_manager/peer_store/test_waku_peer_storage.nim create mode 100644 tests/testlib/simple_mock.nim diff --git a/tests/node/peer_manager/peer_store/test_migrations.nim b/tests/node/peer_manager/peer_store/test_migrations.nim new file mode 100644 index 0000000000..3f782589a9 --- /dev/null +++ b/tests/node/peer_manager/peer_store/test_migrations.nim @@ -0,0 +1,56 @@ +import std/[options], stew/results, testutils/unittests + +import + ../../../../waku/[node/peer_manager/peer_store/migrations], + ../../waku_archive/archive_utils, + ../../testlib/[simple_mock] + +import std/[tables, strutils, os], stew/results, chronicles + +import ../../../../waku/[common/databases/db_sqlite, common/databases/common] + +suite "Migrations": + test "migrate ok": + # Given the db_sqlite.migrate function returns ok + let backup = db_sqlite.migrate + mock(db_sqlite.migrate): + proc mockedMigrate( + db: SqliteDatabase, targetVersion: int64, migrationsScriptsDir: string + ): DatabaseResult[void] = + ok() + + mockedMigrate + + # When we call the migrate function + let migrationResult = migrations.migrate(newSqliteDatabase(), 1) + + # Then we expect the result to be ok + check: + migrationResult == DatabaseResult[void].ok() + + # Cleanup + mock(db_sqlite.migrate): + backup + + test "migrate error": + # Given the db_sqlite.migrate function returns an error + let backup = db_sqlite.migrate + mock(db_sqlite.migrate): + proc mockedMigrate( + db: SqliteDatabase, targetVersion: int64, migrationsScriptsDir: string + ): DatabaseResult[void] = + err("mock error") + + mockedMigrate + + # When we call the migrate function + let migrationResult = migrations.migrate(newSqliteDatabase(), 1) + + # Then we expect the result to be an error + check: + migrationResult == + DatabaseResult[void].err("failed to execute migration scripts: mock error") + + # Cleanup + mock(db_sqlite.migrate): + backup diff --git a/tests/node/peer_manager/peer_store/test_peer_storage.nim b/tests/node/peer_manager/peer_store/test_peer_storage.nim new file mode 100644 index 0000000000..9c77cb9128 --- /dev/null +++ b/tests/node/peer_manager/peer_store/test_peer_storage.nim @@ -0,0 +1,25 @@ +import stew/results, testutils/unittests + +import + ../../../../waku/node/peer_manager/peer_store/peer_storage, + ../../../../waku/waku_core/peers + +suite "PeerStorage": + var peerStorage {.threadvar.}: PeerStorage + + setup: + peerStorage = PeerStorage() + + suite "put": + test "unimplemented": + check: + peerStorage.put(nil) == PeerStorageResult[void].err("Unimplemented") + + suite "getAll": + test "unimplemented": + let + emptyClosure = + proc(remotePeerInfo: RemotePeerInfo) = + discard + check: + peerStorage.getAll(emptyClosure) == PeerStorageResult[void].err("Unimplemented") diff --git a/tests/node/peer_manager/peer_store/test_waku_peer_storage.nim b/tests/node/peer_manager/peer_store/test_waku_peer_storage.nim new file mode 100644 index 0000000000..466ed0a0a2 --- /dev/null +++ b/tests/node/peer_manager/peer_store/test_waku_peer_storage.nim @@ -0,0 +1,114 @@ +import + std/[nativesockets, options, sequtils], + testutils/unittests, + libp2p/[multiaddress, peerid], + libp2p/crypto/crypto, + stew/shims/net, + eth/keys, + eth/p2p/discoveryv5/enr, + nimcrypto/utils + +import + ../../../../waku/waku_core/peers, + ../../../../waku/node/peer_manager/peer_store/waku_peer_storage + +proc `==`(a, b: RemotePeerInfo): bool = + let + comparisons = + @[ + a.peerId == b.peerId, + a.addrs == b.addrs, + a.enr == b.enr, + a.protocols == b.protocols, + a.agent == b.agent, + a.protoVersion == b.protoVersion, + a.publicKey == b.publicKey, + a.connectedness == b.connectedness, + a.disconnectTime == b.disconnectTime, + a.origin == b.origin, + a.direction == b.direction, + a.lastFailedConn == b.lastFailedConn, + a.numberFailedConn == b.numberFailedConn + ] + + allIt(comparisons, it == true) + +suite "Protobuf Serialisation": + let + privateKeyStr = + "08031279307702010104203E5B1FE9712E6C314942A750BD67485DE3C1EFE85B1BFB520AE8F9AE3DFA4A4CA00A06082A8648CE3D030107A14403420004DE3D300FA36AE0E8F5D530899D83ABAB44ABF3161F162A4BC901D8E6ECDA020E8B6D5F8DA30525E71D6851510C098E5C47C646A597FB4DCEC034E9F77C409E62" + publicKeyStr = + "0803125b3059301306072a8648ce3d020106082a8648ce3d03010703420004de3d300fa36ae0e8f5d530899d83abab44abf3161f162a4bc901d8e6ecda020e8b6d5f8da30525e71d6851510c098e5c47c646a597fb4dcec034e9f77c409e62" + + var remotePeerInfo {.threadvar.}: RemotePeerInfo + + setup: + let + port = Port(8080) + ipAddress = IpAddress(family: IPv4, address_v4: [192, 168, 0, 1]) + multiAddress: MultiAddress = + MultiAddress.init(ipAddress, IpTransportProtocol.tcpProtocol, port) + encodedPeerIdStr = "16Uiu2HAmFccGe5iezmyRDQZuLPRP7FqpqXLjnocmMRk18pmTZs2j" + + var peerId: PeerID + assert init(peerId, encodedPeerIdStr) + + let + publicKey = + crypto.PublicKey.init(utils.fromHex(publicKeyStr)).expect("public key") + privateKey = + crypto.PrivateKey.init(utils.fromHex(privateKeyStr)).expect("private key") + + remotePeerInfo = RemotePeerInfo.init(peerId, @[multiAddress]) + remotePeerInfo.publicKey = publicKey + + suite "encode": + test "simple": + # Given the expected bytes representation of a valid RemotePeerInfo + let + expectedBuffer: seq[byte] = + @[ + 10, 39, 0, 37, 8, 2, 18, 33, 3, 43, 246, 238, 219, 109, 147, 79, 129, 40, + 145, 217, 209, 109, 105, 185, 186, 200, 180, 203, 72, 166, 220, 196, 232, + 170, 74, 141, 125, 255, 112, 238, 204, 18, 8, 4, 192, 168, 0, 1, 6, 31, 144, + 34, 95, 8, 3, 18, 91, 48, 89, 48, 19, 6, 7, 42, 134, 72, 206, 61, 2, 1, 6, + 8, 42, 134, 72, 206, 61, 3, 1, 7, 3, 66, 0, 4, 222, 61, 48, 15, 163, 106, + 224, 232, 245, 213, 48, 137, 157, 131, 171, 171, 68, 171, 243, 22, 31, 22, + 42, 75, 201, 1, 216, 230, 236, 218, 2, 14, 139, 109, 95, 141, 163, 5, 37, + 231, 29, 104, 81, 81, 12, 9, 142, 92, 71, 198, 70, 165, 151, 251, 77, 206, + 192, 52, 233, 247, 124, 64, 158, 98, 40, 0, 48, 0 + ] + + # When converting a valid RemotePeerInfo to a ProtoBuffer + let encodedRemotePeerInfo = encode(remotePeerInfo).get() + + # Then the encoded RemotePeerInfo should be equal to the expected bytes + check: + encodedRemotePeerInfo.buffer == expectedBuffer + encodedRemotePeerInfo.offset == 152 + encodedRemotePeerInfo.length == 0 + encodedRemotePeerInfo.maxSize == 4194304 + + suite "decode": + test "simple": + # Given the bytes representation of a valid RemotePeerInfo + let + buffer: seq[byte] = + @[ + 10, 39, 0, 37, 8, 2, 18, 33, 3, 43, 246, 238, 219, 109, 147, 79, 129, 40, + 145, 217, 209, 109, 105, 185, 186, 200, 180, 203, 72, 166, 220, 196, 232, + 170, 74, 141, 125, 255, 112, 238, 204, 18, 8, 4, 192, 168, 0, 1, 6, 31, 144, + 34, 95, 8, 3, 18, 91, 48, 89, 48, 19, 6, 7, 42, 134, 72, 206, 61, 2, 1, 6, + 8, 42, 134, 72, 206, 61, 3, 1, 7, 3, 66, 0, 4, 222, 61, 48, 15, 163, 106, + 224, 232, 245, 213, 48, 137, 157, 131, 171, 171, 68, 171, 243, 22, 31, 22, + 42, 75, 201, 1, 216, 230, 236, 218, 2, 14, 139, 109, 95, 141, 163, 5, 37, + 231, 29, 104, 81, 81, 12, 9, 142, 92, 71, 198, 70, 165, 151, 251, 77, 206, + 192, 52, 233, 247, 124, 64, 158, 98, 40, 0, 48, 0 + ] + + # When converting a valid buffer to RemotePeerInfo + let decodedRemotePeerInfo = RemotePeerInfo.decode(buffer).get() + + # Then the decoded RemotePeerInfo should be equal to the original RemotePeerInfo + check: + decodedRemotePeerInfo == remotePeerInfo diff --git a/tests/testlib/sequtils.nim b/tests/testlib/sequtils.nim index 5fd3d414f7..b47ba75f50 100644 --- a/tests/testlib/sequtils.nim +++ b/tests/testlib/sequtils.nim @@ -1,2 +1,5 @@ proc toString*(bytes: seq[byte]): string = cast[string](bytes) + +proc toBytes*(str: string): seq[byte] = + cast[seq[byte]](str) diff --git a/tests/testlib/simple_mock.nim b/tests/testlib/simple_mock.nim new file mode 100644 index 0000000000..62a385574d --- /dev/null +++ b/tests/testlib/simple_mock.nim @@ -0,0 +1,50 @@ +# Sourced from https://forum.nim-lang.org/t/9255#60617 + +import posix + +type + Instr {.union.} = object + bytes: array[8, byte] + value: uint64 + +proc mockImpl(target, replacement: pointer) = + # YOLO who needs alignment + #doAssert (cast[ByteAddress](target) and ByteAddress(0x07)) == 0 + var page = cast[pointer](cast[ByteAddress](target) and (not 0xfff)) + doAssert mprotect(page, 4096, PROT_WRITE or PROT_EXEC) == 0 + let rel = cast[ByteAddress](replacement) - cast[ByteAddress](target) - 5 + var + instr = + Instr( + bytes: [ + 0xe9.byte, + (rel shr 0).byte, + (rel shr 8).byte, + (rel shr 16).byte, + (rel shr 24).byte, + 0, + 0, + 0 + ] + ) + cast[ptr uint64](target)[] = instr.value + doAssert mprotect(page, 4096, PROT_EXEC) == 0 + +# Note: Requires manual cleanup +# Usage Example: +# proc helloWorld(): string = +# "Hello, World!" +# +# echo helloWorld() # "Hello, World!" +# +# let backup = helloWorld +# mock(helloWorld): +# proc mockedHellWorld(): string = +# "Mocked Hello, World!" +# mockedMigrate +# +# echo helloWorld() # "Mocked Hello, World!" +# +# helloWorld = backup # Restore the original function +template mock*(target, replacement: untyped): untyped = + mockImpl(cast[pointer](target), cast[pointer](replacement)) From 3553fb4fc188f52a06159684d14a147424562edd Mon Sep 17 00:00:00 2001 From: joao <22820692+joaolago1113@users.noreply.github.com> Date: Mon, 8 Jan 2024 12:13:34 +0000 Subject: [PATCH 181/274] docs: Fix Typos Across Various Documentation Files (#2310) --- docs/contributors/continuous-integration.md | 2 +- docs/contributors/release-process.md | 2 +- docs/operators/README.md | 4 ++-- docs/operators/how-to/configure-store.md | 6 +++--- docs/operators/how-to/configure.md | 4 ++-- docs/tutorial/rln-chat2-live-testnet.md | 2 +- waku/README.md | 2 +- 7 files changed, 11 insertions(+), 11 deletions(-) diff --git a/docs/contributors/continuous-integration.md b/docs/contributors/continuous-integration.md index 9e4332ba5c..69554f07d4 100644 --- a/docs/contributors/continuous-integration.md +++ b/docs/contributors/continuous-integration.md @@ -8,7 +8,7 @@ The CI setup exists on the Status.im Jenkins instance: https://ci.infra.status.im/job/nim-waku/ -It currently consists four jobs: +It currently consists of four jobs: * [manual](https://ci.infra.status.im/job/nim-waku/job/manual/) - For manually executing builds using parameters. * [deploy-wakuv1-test](https://ci.infra.status.im/job/nim-waku/job/deploy-wakuv1-test/) - Builds every new commit in `master` and deploys to `wakuv1.test` fleet. diff --git a/docs/contributors/release-process.md b/docs/contributors/release-process.md index ebcf47e604..edb786b1f5 100644 --- a/docs/contributors/release-process.md +++ b/docs/contributors/release-process.md @@ -4,7 +4,7 @@ How to do releases. For more context, see https://trunkbaseddevelopment.com/branch-for-release/ -## How to to do releases +## How to do releases ### Before release diff --git a/docs/operators/README.md b/docs/operators/README.md index 98bfc87a9d..58509775d0 100644 --- a/docs/operators/README.md +++ b/docs/operators/README.md @@ -13,7 +13,7 @@ Nwaku (formerly `nim-waku`) aims to be a lightweight and robust Waku v2 client. It serves as the reference implementation for researchers, who extend the client in parallel to spec development. As such, it is first in line to support innovative and new Waku v2 protocols, -but configurable enough to serve the adaptive needs of a various operators. +but configurable enough to serve the adaptive needs of various operators. We are also developing a set of operator-focused tools to monitor and maintain a running nwaku node. This guide provides step-by-step tutorials covering how to build and configure your own nwaku node, @@ -32,4 +32,4 @@ For bug reports, please [tag your issue with the `bug` label](https://github.com If you believe the reported issue requires critical attention, please [use the `critical` label](https://github.com/waku-org/nwaku/issues/new?labels=critical,bug) to assist with triaging. -To get help, or participate in the conversation, join the [Vac Discord](https://discord.gg/KNj3ctuZvZ) server. \ No newline at end of file +To get help, or participate in the conversation, join the [Vac Discord](https://discord.gg/KNj3ctuZvZ) server. diff --git a/docs/operators/how-to/configure-store.md b/docs/operators/how-to/configure-store.md index d340ce9057..b8befe8fc1 100644 --- a/docs/operators/how-to/configure-store.md +++ b/docs/operators/how-to/configure-store.md @@ -35,13 +35,13 @@ There is a set of configuration options to customize the waku store protocol's m + The time retention policy,`time:` (e.g., `time:14400`) + The capacity retention policy,`capacity:` (e.g, `capacity:25000`) + The size retention policy,`size:` (e.g, `size:25Gb`) - + To disable the retention policy, explicitly, set this option to to `""`, an empty string. + + To disable the retention policy, explicitly, set this option to `""`, an empty string. * `--store-message-db-url`: The message store database url option controls the message storage engine. This option follows the [_SQLAlchemy_ database URL format](https://docs.sqlalchemy.org/en/14/core/engines.html#database-urls). + SQLite engine: The only database engine supported by the nwaku node. The database URL has this shape: `sqlite://`. If the `` is not an absolute path (preceded by a `/` character), the file will be created in the current working directory. The SQLite engine also supports to select a non-persistent in-memory database by setting the `` to `:memory:`. + In the case you don't want to use a persistent message store; set the `--store-message-db-url` to an empty string, `""`. This will instruct the node to use the fallback in-memory message store. -By default the node message store will be configured with a time retention policy set to `14400` seconds (4 hours). Additionaly, by default, the node message store will use the SQLite database engine to store historical messages in order to persist these between restarts. +By default the node message store will be configured with a time retention policy set to `14400` seconds (4 hours). Additionally, by default, the node message store will use the SQLite database engine to store historical messages in order to persist these between restarts. > :warning: Note the 3 slashes, `///`, after the SQLite database URL schema. The third slash indicates that it is an absolute path: `/mnt/nwaku/data/db1/store.sqlite3` @@ -55,4 +55,4 @@ wakunode2 \ ### How much resources should I allocate? Currently store service nodes use, by default, a message store backed by an in-disk SQLite database. Most Waku messages average a size of 1KB - 2KB, implying a minimum memory requirement of at least ~250MB -for a typical store capacity of 100k messages. Note, however, that the allowable maximum size for Waku messages is up to 1MB. \ No newline at end of file +for a typical store capacity of 100k messages. Note, however, that the allowable maximum size for Waku messages is up to 1MB. diff --git a/docs/operators/how-to/configure.md b/docs/operators/how-to/configure.md index b7f70d4c51..f052b22be0 100644 --- a/docs/operators/how-to/configure.md +++ b/docs/operators/how-to/configure.md @@ -81,7 +81,7 @@ provided via environment variables. ### Configuration file -The third configuration mechanism in order of precedence is the configuration via a TOML file. The previous mechanims take precedence over this mechanism as explained above. +The third configuration mechanism in order of precedence is the configuration via a TOML file. The previous mechanisms take precedence over this mechanism as explained above. The configuration file follows the [TOML](https://toml.io/en/) format: @@ -90,7 +90,7 @@ log-level = "DEBUG" tcp-port = 65000 ``` -The path to the TOML file can be specified usin one of the previous configuration mechanisms: +The path to the TOML file can be specified using one of the previous configuration mechanisms: * By passing the `--config-file` command line option: ```shell diff --git a/docs/tutorial/rln-chat2-live-testnet.md b/docs/tutorial/rln-chat2-live-testnet.md index 8dfc853086..13f5563ac4 100644 --- a/docs/tutorial/rln-chat2-live-testnet.md +++ b/docs/tutorial/rln-chat2-live-testnet.md @@ -9,7 +9,7 @@ sending more than one message per epoch. At the time of this tutorial, the epoch duration is set to `10` seconds. You can inspect the current epoch value by checking the following [constant variable](https://github.com/status-im/nim-waku/blob/21cac6d491a6d995a7a8ba84c85fecc7817b3d8b/waku/v2/protocol/waku_rln_relay/constants.nim#L245) in the nim-waku codebase. Your messages will be routed via test fleets and will arrive at other live chat2 clients that are running in rate-limited mode over the same content topic i.e., `/toy-chat/3/mingde/proto`. -Your samp activity will be detected by them and a proper message will be shown on their console. +Your spam activity will be detected by them and a proper message will be shown on their console. # Set up ## Build chat2 diff --git a/waku/README.md b/waku/README.md index b9d7b0cda4..27030a8966 100644 --- a/waku/README.md +++ b/waku/README.md @@ -166,7 +166,7 @@ It is possible to configure an IPv4 DNS domain name that resolves to the node's wakunode2 --dns4-domain-name=mynode.example.com ``` -This allows for the node's publically announced `multiaddrs` to use the `/dns4` scheme. +This allows for the node's publicly announced `multiaddrs` to use the `/dns4` scheme. In addition, nodes with domain name and [secure websocket configured](#enabling-websocket), will generate a discoverable ENR containing the `/wss` multiaddr with `/dns4` domain name. This is necessary to verify domain certificates when connecting to this node over secure websocket. From 7f1682dea6bd1893ca08e29a13403356851ca90e Mon Sep 17 00:00:00 2001 From: Simon-Pierre Vivier Date: Mon, 8 Jan 2024 08:11:06 -0500 Subject: [PATCH 182/274] docs: update after release steps (#2336) --- docs/contributors/release-process.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/contributors/release-process.md b/docs/contributors/release-process.md index edb786b1f5..7b14d8ae57 100644 --- a/docs/contributors/release-process.md +++ b/docs/contributors/release-process.md @@ -84,6 +84,7 @@ Ensure all items in this list are ticked: > Clients are reachable via the corresponding channels on the Vac Discord server. > It should be enough to inform clients on the `#nwaku` and `#announce` channels on Discord. > Informal conversations with specific repo maintainers are often part of this process. + - Check if nwaku configuration parameters changed. If so [update fleet configuration](https://www.notion.so/Fleet-Ownership-7532aad8896d46599abac3c274189741?pvs=4#d2d2f0fe4b3c429fbd860a1d64f89a64) in [infra-nim-waku](https://github.com/status-im/infra-nim-waku) - Deploy release to the `wakuv2.prod` fleet from [Jenkins](https://ci.infra.status.im/job/nim-waku/job/deploy-wakuv2-prod/). - Ensure that nodes successfully start up and monitor health using [Grafana](https://grafana.infra.status.im/d/qrp_ZCTGz/nim-waku-v2?orgId=1) and [Kibana](https://kibana.infra.status.im/goto/a7728e70-eb26-11ec-81d1-210eb3022c76). - If necessary, revert by deploying the previous release. Download logs and open a bug report issue. From a34c39c891960eba0d39f01adf80b4e0eaff8eb8 Mon Sep 17 00:00:00 2001 From: NagyZoltanPeter <113987313+NagyZoltanPeter@users.noreply.github.com> Date: Mon, 8 Jan 2024 16:45:03 +0100 Subject: [PATCH 183/274] test(peer-connection-managenent): Functional Tests (#2321) @ e9d083b27 introduced build error through ambigous function call, testwaku build failed on master (#2337) --- tests/testlib/sequtils.nim | 3 --- 1 file changed, 3 deletions(-) diff --git a/tests/testlib/sequtils.nim b/tests/testlib/sequtils.nim index b47ba75f50..5fd3d414f7 100644 --- a/tests/testlib/sequtils.nim +++ b/tests/testlib/sequtils.nim @@ -1,5 +1,2 @@ proc toString*(bytes: seq[byte]): string = cast[string](bytes) - -proc toBytes*(str: string): seq[byte] = - cast[seq[byte]](str) From bcab9d55da8e2a3fcae188dabb190e0e5f74ac74 Mon Sep 17 00:00:00 2001 From: gabrielmer <101006718+gabrielmer@users.noreply.github.com> Date: Tue, 9 Jan 2024 11:42:29 +0100 Subject: [PATCH 184/274] feat: adding filter data admin endpoint (REST) (#2314) --- tests/wakunode_rest/test_rest_admin.nim | 60 +++++++++++++++++- waku/waku_api/rest/admin/client.nim | 8 +++ waku/waku_api/rest/admin/handlers.nim | 28 ++++++++- waku/waku_api/rest/admin/openapi.yaml | 41 ++++++++++++ waku/waku_api/rest/admin/types.nim | 84 +++++++++++++++++++++++++ 5 files changed, 218 insertions(+), 3 deletions(-) diff --git a/tests/wakunode_rest/test_rest_admin.nim b/tests/wakunode_rest/test_rest_admin.nim index 2bf66d624e..a418e6ab6d 100644 --- a/tests/wakunode_rest/test_rest_admin.nim +++ b/tests/wakunode_rest/test_rest_admin.nim @@ -1,7 +1,7 @@ {.used.} import - std/sequtils, + std/[sequtils,strformat], stew/shims/net, testutils/unittests, presto, presto/client as presto_client, @@ -10,6 +10,7 @@ import import ../../waku/waku_core, ../../waku/waku_node, + ../../waku/waku_filter_v2/client, ../../waku/node/peer_manager, ../../waku/waku_api/rest/server, ../../waku/waku_api/rest/client, @@ -26,6 +27,7 @@ suite "Waku v2 Rest API - Admin": var node1 {.threadvar.}: WakuNode var node2 {.threadvar.}: WakuNode var node3 {.threadvar.}: WakuNode + var peerInfo1 {.threadvar.}: RemotePeerInfo var peerInfo2 {.threadvar.}: RemotePeerInfo var peerInfo3 {.threadvar.}: RemotePeerInfo var restServer {.threadvar.}: RestServerRef @@ -33,6 +35,7 @@ suite "Waku v2 Rest API - Admin": asyncSetup: node1 = newTestWakuNode(generateSecp256k1Key(), parseIpAddress("127.0.0.1"), Port(60600)) + peerInfo1 = node1.switch.peerInfo node2 = newTestWakuNode(generateSecp256k1Key(), parseIpAddress("127.0.0.1"), Port(60602)) peerInfo2 = node2.switch.peerInfo node3 = newTestWakuNode(generateSecp256k1Key(), parseIpAddress("127.0.0.1"), Port(60604)) @@ -94,3 +97,58 @@ suite "Waku v2 Rest API - Admin": getRes.status == 200 $getRes.contentType == $MIMETYPE_JSON getRes.data.len() == 0 + + asyncTest "Get filter data": + await allFutures(node1.mountFilter(), node2.mountFilterClient(), node3.mountFilterClient()) + + let + contentFiltersNode2 = @[DefaultContentTopic, ContentTopic("2"), ContentTopic("3")] + contentFiltersNode3 = @[ContentTopic("3"), ContentTopic("4")] + pubsubTopicNode2 = DefaultPubsubTopic + pubsubTopicNode3 = PubsubTopic("/waku/2/custom-waku/proto") + + expectedFilterData2 = fmt"(peerId: ""{$peerInfo2}"", filterCriteria:" & + fmt" @[(pubsubTopic: ""{pubsubTopicNode2}"", contentTopic: ""{contentFiltersNode2[0]}""), " & + fmt"(pubsubTopic: ""{pubsubTopicNode2}"", contentTopic: ""{contentFiltersNode2[1]}""), " & + fmt"(pubsubTopic: ""{pubsubTopicNode2}"", contentTopic: ""{contentFiltersNode2[2]}"")]" + + expectedFilterData3 = fmt"(peerId: ""{$peerInfo3}"", filterCriteria:" & + fmt" @[(pubsubTopic: ""{pubsubTopicNode3}"", contentTopic: ""{contentFiltersNode3[0]}""), " & + fmt"(pubsubTopic: ""{pubsubTopicNode3}"", contentTopic: ""{contentFiltersNode3[1]}"")]" + + let + subscribeResponse2 = await node2.wakuFilterClient.subscribe( + peerInfo1, pubsubTopicNode2, contentFiltersNode2 + ) + subscribeResponse3 = await node3.wakuFilterClient.subscribe( + peerInfo1, pubsubTopicNode3, contentFiltersNode3 + ) + + assert subscribeResponse2.isOk(), $subscribeResponse2.error + assert subscribeResponse3.isOk(), $subscribeResponse3.error + + let getRes = await client.getFilterSubscriptions() + + check: + getRes.status == 200 + $getRes.contentType == $MIMETYPE_JSON + getRes.data.len() == 2 + ($getRes.data).contains(expectedFilterData2) + ($getRes.data).contains(expectedFilterData3) + + asyncTest "Get filter data - no filter subscribers": + await node1.mountFilter() + + let getRes = await client.getFilterSubscriptions() + + check: + getRes.status == 200 + $getRes.contentType == $MIMETYPE_JSON + getRes.data.len() == 0 + + asyncTest "Get filter data - filter not mounted": + let getRes = await client.getFilterSubscriptionsFilterNotMounted() + + check: + getRes.status == 400 + getRes.data == "Error: Filter Protocol is not mounted to the node" \ No newline at end of file diff --git a/waku/waku_api/rest/admin/client.nim b/waku/waku_api/rest/admin/client.nim index 7c0ee8a663..9768536560 100644 --- a/waku/waku_api/rest/admin/client.nim +++ b/waku/waku_api/rest/admin/client.nim @@ -33,3 +33,11 @@ proc getPeers*(): proc postPeers*(body: seq[string]): RestResponse[string] {.rest, endpoint: "/admin/v1/peers", meth: HttpMethod.MethodPost.} + +proc getFilterSubscriptions*(): + RestResponse[seq[FilterSubscription]] + {.rest, endpoint: "/admin/v1/filter/subscriptions", meth: HttpMethod.MethodGet.} + +proc getFilterSubscriptionsFilterNotMounted*(): + RestResponse[string] + {.rest, endpoint: "/admin/v1/filter/subscriptions", meth: HttpMethod.MethodGet.} diff --git a/waku/waku_api/rest/admin/handlers.nim b/waku/waku_api/rest/admin/handlers.nim index bf4b5ebed4..6621908b54 100644 --- a/waku/waku_api/rest/admin/handlers.nim +++ b/waku/waku_api/rest/admin/handlers.nim @@ -4,8 +4,7 @@ else: {.push raises: [].} import - std/strformat, - std/sequtils, + std/[strformat,sequtils,sets,tables], stew/byteutils, chronicles, json_serialization, @@ -32,6 +31,7 @@ logScope: topics = "waku node rest admin api" const ROUTE_ADMIN_V1_PEERS* = "/admin/v1/peers" +const ROUTE_ADMIN_V1_FILTER_SUBS* = "/admin/v1/filter/subscriptions" type PeerProtocolTuple = tuple[multiaddr: string, protocol: string, connected: bool] @@ -111,6 +111,30 @@ proc installAdminV1PostPeersHandler(router: var RestRouter, node: WakuNode) = return RestApiResponse.ok() +proc installAdminV1GetFilterSubsHandler(router: var RestRouter, node: WakuNode) = + router.api(MethodGet, ROUTE_ADMIN_V1_FILTER_SUBS) do () -> RestApiResponse: + + if node.wakuFilter.isNil(): + return RestApiResponse.badRequest("Error: Filter Protocol is not mounted to the node") + + var + subscriptions: seq[FilterSubscription] = @[] + filterCriteria: seq[FilterTopic] + + for (peerId, criteria) in node.wakuFilter.subscriptions.pairs(): + filterCriteria = criteria.toSeq().mapIt(FilterTopic(pubsubTopic: it[0], + contentTopic: it[1])) + + subscriptions.add(FilterSubscription(peerId: $peerId, filterCriteria: filterCriteria)) + + let resp = RestApiResponse.jsonResponse(subscriptions, status=Http200) + if resp.isErr(): + error "An error ocurred while building the json respose: ", error=resp.error + return RestApiResponse.internalServerError(fmt("An error ocurred while building the json respose: {resp.error}")) + + return resp.get() + proc installAdminApiHandlers*(router: var RestRouter, node: WakuNode) = installAdminV1GetPeersHandler(router, node) installAdminV1PostPeersHandler(router, node) + installAdminV1GetFilterSubsHandler(router, node) diff --git a/waku/waku_api/rest/admin/openapi.yaml b/waku/waku_api/rest/admin/openapi.yaml index 2ce64e46c6..f6118ad702 100644 --- a/waku/waku_api/rest/admin/openapi.yaml +++ b/waku/waku_api/rest/admin/openapi.yaml @@ -49,6 +49,26 @@ paths: description: Cannot connect to one or more peers. '5XX': description: Unexpected error. + /admin/v1/filter/subscriptions: + get: + summary: Get filter protocol subscribers + description: Retrieve information about the serving filter subscriptions + operationId: getFilterInfo + tags: + - admin + responses: + '200': + description: Information about subscribed filter peers and topics + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/FilterSubscription' + '400': + description: Filter Protocol is not mounted to the node + '5XX': + description: Unexpected error. components: schemas: @@ -72,3 +92,24 @@ components: type: string connected: type: boolean + + FilterSubscription: + type: object + required: + - peerId + - filterCriteria + properties: + peerId: + type: string + filterCriteria: + type: array + items: + type: object + required: + - pubsubTopic + - contentTopic + properties: + pubsubTopic: + type: string + contentTopic: + type: string diff --git a/waku/waku_api/rest/admin/types.nim b/waku/waku_api/rest/admin/types.nim index ab6b8f22c0..1e051e633d 100644 --- a/waku/waku_api/rest/admin/types.nim +++ b/waku/waku_api/rest/admin/types.nim @@ -25,6 +25,16 @@ type type WakuPeers* = seq[WakuPeer] +type + FilterTopic* = object + pubsubTopic*: string + contentTopic*: string + +type + FilterSubscription* = object + peerId*: string + filterCriteria*: seq[FilterTopic] + #### Serialization and deserialization proc writeValue*(writer: var JsonWriter[RestJson], value: ProtocolState) @@ -41,6 +51,20 @@ proc writeValue*(writer: var JsonWriter[RestJson], value: WakuPeer) writer.writeField("protocols", value.protocols) writer.endRecord() +proc writeValue*(writer: var JsonWriter[RestJson], value: FilterTopic) + {.raises: [IOError].} = + writer.beginRecord() + writer.writeField("pubsubTopic", value.pubsubTopic) + writer.writeField("contentTopic", value.contentTopic) + writer.endRecord() + +proc writeValue*(writer: var JsonWriter[RestJson], value: FilterSubscription) + {.raises: [IOError].} = + writer.beginRecord() + writer.writeField("peerId", value.peerId) + writer.writeField("filterCriteria", value.filterCriteria) + writer.endRecord() + proc readValue*(reader: var JsonReader[RestJson], value: var ProtocolState) {.gcsafe, raises: [SerializationError, IOError].} = var @@ -101,6 +125,66 @@ proc readValue*(reader: var JsonReader[RestJson], value: var WakuPeer) protocols: protocols.get() ) +proc readValue*(reader: var JsonReader[RestJson], value: var FilterTopic) + {.gcsafe, raises: [SerializationError, IOError].} = + var + pubsubTopic: Option[string] + contentTopic: Option[string] + + for fieldName in readObjectFields(reader): + case fieldName + of "pubsubTopic": + if pubsubTopic.isSome(): + reader.raiseUnexpectedField("Multiple `pubsubTopic` fields found", "FilterTopic") + pubsubTopic = some(reader.readValue(string)) + of "contentTopic": + if contentTopic.isSome(): + reader.raiseUnexpectedField("Multiple `contentTopic` fields found", "FilterTopic") + contentTopic = some(reader.readValue(string)) + else: + unrecognizedFieldWarning() + + if pubsubTopic.isNone(): + reader.raiseUnexpectedValue("Field `pubsubTopic` is missing") + + if contentTopic.isNone(): + reader.raiseUnexpectedValue("Field `contentTopic` are missing") + + value = FilterTopic( + pubsubTopic: pubsubTopic.get(), + contentTopic: contentTopic.get() + ) + +proc readValue*(reader: var JsonReader[RestJson], value: var FilterSubscription) + {.gcsafe, raises: [SerializationError, IOError].} = + var + peerId: Option[string] + filterCriteria: Option[seq[FilterTopic]] + + for fieldName in readObjectFields(reader): + case fieldName + of "peerId": + if peerId.isSome(): + reader.raiseUnexpectedField("Multiple `peerId` fields found", "FilterSubscription") + peerId = some(reader.readValue(string)) + of "filterCriteria": + if filterCriteria.isSome(): + reader.raiseUnexpectedField("Multiple `filterCriteria` fields found", "FilterSubscription") + filterCriteria = some(reader.readValue(seq[FilterTopic])) + else: + unrecognizedFieldWarning() + + if peerId.isNone(): + reader.raiseUnexpectedValue("Field `peerId` is missing") + + if filterCriteria.isNone(): + reader.raiseUnexpectedValue("Field `filterCriteria` are missing") + + value = FilterSubscription( + peerId: peerId.get(), + filterCriteria: filterCriteria.get() + ) + ## Utility for populating WakuPeers and ProtocolState func `==`*(a, b: ProtocolState): bool {.inline.} = return a.protocol == b.protocol From 8ce8ec69420ff821245f537a049158590a34937d Mon Sep 17 00:00:00 2001 From: Ivan FB <128452529+Ivansete-status@users.noreply.github.com> Date: Wed, 10 Jan 2024 09:45:26 +0100 Subject: [PATCH 185/274] chore: Update CHANGELOG.md to reflect bug fix for issue #2317 (#2340) in v0.23.1 --- CHANGELOG.md | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7ddb35a664..a511317c16 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,27 @@ +## v0.23.1 (2023-01-09) + +This patch release fixes the following bug: +- Sort order ignored in store nodes. + +### Bug Fix + +- Bug definition: [#2317](https://github.com/waku-org/nwaku/issues/2317) +- Commit that fixes the bug [fae20bff](https://github.com/waku-org/nwaku/commit/fae20bff) + +This is a patch release that is fully backwards-compatible with release `v0.23.0`. + +It supports the same [libp2p protocols](https://docs.libp2p.io/concepts/protocols/): +| Protocol | Spec status | Protocol id | +| ---: | :---: | :--- | +| [`11/WAKU2-RELAY`](https://rfc.vac.dev/spec/11/) | `stable` | `/vac/waku/relay/2.0.0` | +| [`12/WAKU2-FILTER`](https://rfc.vac.dev/spec/12/) | `draft` | `/vac/waku/filter/2.0.0-beta1`
`/vac/waku/filter-subscribe/2.0.0-beta1`
`/vac/waku/filter-push/2.0.0-beta1` | +| [`13/WAKU2-STORE`](https://rfc.vac.dev/spec/13/) | `draft` | `/vac/waku/store/2.0.0-beta4` | +| [`19/WAKU2-LIGHTPUSH`](https://rfc.vac.dev/spec/19/) | `draft` | `/vac/waku/lightpush/2.0.0-beta1` | +| [`66/WAKU2-METADATA`](https://rfc.vac.dev/spec/66/) | `raw` | `/vac/waku/metadata/1.0.0` | + +The Waku v1 implementation has been removed from this repository and can be found in a separate [Waku Legacy](https://github.com/waku-org/waku-legacy) repository. + + ## v0.23.0 (2023-12-18) ## What's Changed From a4a8dee34c36e0c1dd14244c30035233c711a997 Mon Sep 17 00:00:00 2001 From: vuittont60 <81072379+vuittont60@users.noreply.github.com> Date: Thu, 11 Jan 2024 22:38:56 +0800 Subject: [PATCH 186/274] docs: fix typo (#2348) --- docs/api/node.md | 2 +- docs/operators/how-to/configure-domain.md | 2 +- docs/operators/how-to/connect.md | 2 +- docs/operators/how-to/run.md | 2 +- docs/tutorial/dingpu.md | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/api/node.md b/docs/api/node.md index 740c2dac8b..af5cfa229b 100644 --- a/docs/api/node.md +++ b/docs/api/node.md @@ -2,7 +2,7 @@ ## Nim API -The Nim Waku API consist of a set of methods opearting on the Waku Node object. +The Nim Waku API consist of a set of methods operating on the Waku Node object. Some of them have different arity depending on what privacy/bandwidth trade-off the consumer wants to make. These methods are: diff --git a/docs/operators/how-to/configure-domain.md b/docs/operators/how-to/configure-domain.md index dee1f8bce6..226da4b2c2 100644 --- a/docs/operators/how-to/configure-domain.md +++ b/docs/operators/how-to/configure-domain.md @@ -10,7 +10,7 @@ It is possible to configure an IPv4 DNS domain name that resolves to the node's wakunode2 --dns4-domain-name=mynode.example.com ``` -This allows for the node's publically announced `multiaddrs` to use the `/dns4` scheme. +This allows for the node's publicly announced `multiaddrs` to use the `/dns4` scheme. In addition, nodes with domain name and [secure websocket configured](./configure-websocket.md), will generate a discoverable ENR containing the `/wss` multiaddr with `/dns4` domain name. This is necessary to verify domain certificates when connecting to this node over secure websocket. \ No newline at end of file diff --git a/docs/operators/how-to/connect.md b/docs/operators/how-to/connect.md index a75da1157b..80f63958df 100644 --- a/docs/operators/how-to/connect.md +++ b/docs/operators/how-to/connect.md @@ -1,6 +1,6 @@ # Connect to other peers -*Note that this tutorial describes how to **configure** a node to connect to other peers before runnning the node. +*Note that this tutorial describes how to **configure** a node to connect to other peers before running the node. For connecting a running node to existing peers, see the [JSON-RPC API](https://rfc.vac.dev/spec/16/).* diff --git a/docs/operators/how-to/run.md b/docs/operators/how-to/run.md index 4cfde3285c..311087b1ec 100644 --- a/docs/operators/how-to/run.md +++ b/docs/operators/how-to/run.md @@ -36,7 +36,7 @@ Different ways to connect to other nodes are expanded upon in our [connection gu Find the log entry beginning with `Listening on`. It should be printed at INFO level when you start your node -and contains a list of all publically announced listening addresses for the nwaku node. +and contains a list of all publicly announced listening addresses for the nwaku node. For example diff --git a/docs/tutorial/dingpu.md b/docs/tutorial/dingpu.md index a4a386b69c..8306ffdfe4 100644 --- a/docs/tutorial/dingpu.md +++ b/docs/tutorial/dingpu.md @@ -21,7 +21,7 @@ Then type messages to publish. ## Interactively add a node -There is also an interactive mode. Type `/connect` then paste address of other node. However, this currently has some timing issues with mesh not being updated, so it is adviced not to use this until this has been addressed. See https://github.com/waku-org/nwaku/issues/231 +There is also an interactive mode. Type `/connect` then paste address of other node. However, this currently has some timing issues with mesh not being updated, so it is advised not to use this until this has been addressed. See https://github.com/waku-org/nwaku/issues/231 ## Dingpu cluster node From 988580e001dcea91a25c370de7175826065701ec Mon Sep 17 00:00:00 2001 From: Simon-Pierre Vivier Date: Fri, 12 Jan 2024 07:30:29 -0500 Subject: [PATCH 187/274] chore: update CHANGELOG.md for v0.24.0 (#2347) --- CHANGELOG.md | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index a511317c16..a910c3f821 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,55 @@ +## v0.24.0 (2024-01-10) + +> Note: The Waku message size limit (150 KiB) is now enforced according to the specifications. To change this limit please use `--max-msg-size="1MiB"` + +> Note: `--ip-colocation-limit=2` is the new parameter for limiting connections from the same IP + +## What's Changed + +Release highlights: +* IP colocation filter can now be changed via a configuration parameter. +* New filter admin endpoint can now be used to access subscription data. +* Waku message size limit can now be changed via a configuration parameter. + +### Features + +- feat: adding filter data admin endpoint (REST) [#2314](https://github.com/waku-org/nwaku/pull/2314) +- ip colocation is parameterizable. if set to 0, it is disabled [#2323](https://github.com/waku-org/nwaku/pull/2323) + +### Bug Fixes +- fix: revert "feat: shard aware peer management [#2151](https://github.com/waku-org/nwaku/pull/2151)" [#2312](https://github.com/waku-org/nwaku/pull/2312) +- fix: setting connectivity loop interval to 15 seconds [#2307](https://github.com/waku-org/nwaku/pull/2307) +- fix: set record to the Waku node builder in the examples as it is required [#2328](https://github.com/waku-org/nwaku/pull/2328) +- fix(discv5): add bootnode filter exception [#2267](https://github.com/waku-org/nwaku/pull/2267) + + +### Changes +- update CHANGELOG.md for 0.23.0 [#2309](https://github.com/waku-org/nwaku/pull/2309) +- test(store): Implement store tests [#2235](https://github.com/waku-org/nwaku/pull/2235), [#2240](https://github.com/waku-org/nwaku/commit/86353e22a871820c132deee077f65e7af4356671) +- refactor(store): HistoryQuery.direction [#2263](https://github.com/waku-org/nwaku/pull/2263) +- test_driver_postgres: enhance test coverage, multiple and single topic [#2301](https://github.com/waku-org/nwaku/pull/2301) +- chore: examples/nodejs - adapt code to latest callback and ctx/userData definitions [#2281](https://github.com/waku-org/nwaku/pull/2281) +- chore: update `CHANGELOG.md` to reflect bug fix for issue [#2317](https://github.com/waku-org/nwaku/issues/2317) [#2340](https://github.com/waku-org/nwaku/pull/2340) in v0.23.1 +- test(peer-connection-managenent): functional tests [#2321](https://github.com/waku-org/nwaku/pull/2321) +- docs: update post-release steps [#2336](https://github.com/waku-org/nwaku/pull/2336) +- docs: fix typos across various documentation files [#2310](https://github.com/waku-org/nwaku/pull/2310) +- test(peer-connection-managenent): functional tests [#2321](https://github.com/waku-org/nwaku/pull/2321) +- bump vendors for 0.24.0 [#2333](https://github.com/waku-org/nwaku/pull/2333) +- test(autosharding): functional tests [#2318](https://github.com/waku-org/nwaku/pull/2318) +- docs: add benchmark around postgres adoption [#2316](https://github.com/waku-org/nwaku/pull/2316) +- chore: set max Waku message size to 150KiB according to spec [#2298](https://github.com/waku-org/nwaku/pull/2298) + +This release supports the following [libp2p protocols](https://docs.libp2p.io/concepts/protocols/): +| Protocol | Spec status | Protocol id | +| ---: | :---: | :--- | +| [`11/WAKU2-RELAY`](https://rfc.vac.dev/spec/11/) | `stable` | `/vac/waku/relay/2.0.0` | +| [`12/WAKU2-FILTER`](https://rfc.vac.dev/spec/12/) | `draft` | `/vac/waku/filter/2.0.0-beta1`
`/vac/waku/filter-subscribe/2.0.0-beta1`
`/vac/waku/filter-push/2.0.0-beta1` | +| [`13/WAKU2-STORE`](https://rfc.vac.dev/spec/13/) | `draft` | `/vac/waku/store/2.0.0-beta4` | +| [`19/WAKU2-LIGHTPUSH`](https://rfc.vac.dev/spec/19/) | `draft` | `/vac/waku/lightpush/2.0.0-beta1` | +| [`66/WAKU2-METADATA`](https://rfc.vac.dev/spec/66/) | `raw` | `/vac/waku/metadata/1.0.0` | + +The Waku v1 implementation has been removed from this repository and can be found in a separate [Waku Legacy](https://github.com/waku-org/waku-legacy) repository. + ## v0.23.1 (2023-01-09) This patch release fixes the following bug: From 2f8e8bcb529ebe7ad1528de213b39d887cf08596 Mon Sep 17 00:00:00 2001 From: Ivan FB <128452529+Ivansete-status@users.noreply.github.com> Date: Fri, 12 Jan 2024 16:37:32 +0100 Subject: [PATCH 188/274] docs: postgres-adoption.md add metadata title, description, and better first-readable-title (#2346) --- docs/benchmarks/postgres-adoption.md | 31 ++++++++++++++++------------ 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/docs/benchmarks/postgres-adoption.md b/docs/benchmarks/postgres-adoption.md index f5d548b729..80e172b3d3 100644 --- a/docs/benchmarks/postgres-adoption.md +++ b/docs/benchmarks/postgres-adoption.md @@ -1,4 +1,9 @@ -# Epic +--- +title: PostgreSQL +description: Document that describes why Nim-Waku started to use Postgres and shows some benchmark and comparison results. +--- + +## Introduction The *Nim Waku Node*, *nwaku*, has the capability of archiving messages until a certain limit (e.g. 30 days) so that other nodes can synchronize their message history throughout the *Store* protocol. @@ -8,7 +13,7 @@ Therefore, the *Postgres* adoption is needed to enhance that. [https://github.com/waku-org/nwaku/issues/1888](https://github.com/waku-org/nwaku/issues/1888) -# How to connect the *nwaku* to *Postgres* +## How to connect the *nwaku* to *Postgres* Simply pass the next parameter to *nwaku* @@ -23,21 +28,21 @@ Notice that this only makes sense if the _nwaku_ has the _Store_ protocol mounte (start the _nwaku_ node with `--help` parameter for more _Store_ options) -# Examples of *nwaku* using *Postgres* +## Examples of *nwaku* using *Postgres* [https://github.com/waku-org/nwaku-compose](https://github.com/waku-org/nwaku-compose) [https://github.com/waku-org/test-waku-query](https://github.com/waku-org/test-waku-query) -# Stress tests +## Stress tests The following repository was created as a tool to stress and compare performance between *nwaku*+*Postgres* and *nwaku*+*SQLite*: [https://github.com/waku-org/test-waku-query](https://github.com/waku-org/test-waku-query) -## Insert test results +### Insert test results -### Maximum insert throughput +#### Maximum insert throughput **Scenario** @@ -61,7 +66,7 @@ The reason why few messages were lost is because the message rate was higher tha As a conclusion, the bottleneck is within the *Relay* protocol itself and not the underlying databases. Or, in other words, both *SQLite* and *Postgres* can support the maximum insert rate a Waku node will operate within normal conditions. -## Query test results (jmeter) +### Query test results (jmeter) In this case, we are comparing *Store* performance by means of Rest service. @@ -85,7 +90,7 @@ With this, the *node_b* brings a higher throughput than the *node_a* and that in ![jmeter results](imgs/jmeter-results.png) -## Query test results (only Store protocol) +### Query test results (only Store protocol) In this test suite, only the Store protocol is being analyzed, i.e. without REST. For that, a go-waku node is used, which acts as *Store* client. On the other hand, we have another go-waku app that publishes random *Relay* messages periodically. Therefore, this can be considered a more realistic approach. @@ -102,7 +107,7 @@ That topology is defined in [this](https://github.com/waku-org/test-waku-query/b Notice that the two `nwaku` nodes run the very same version, which is compiled locally. -### Comparing archive SQLite & Postgres performance in [nwaku-b6dd6899](https://github.com/waku-org/nwaku/tree/b6dd6899030ee628813dfd60ad1ad024345e7b41) +#### Comparing archive SQLite & Postgres performance in [nwaku-b6dd6899](https://github.com/waku-org/nwaku/tree/b6dd6899030ee628813dfd60ad1ad024345e7b41) The next results were obtained by running the docker-compose-manual-binaries.yml from [test-waku-queryc078075](https://github.com/waku-org/test-waku-query/tree/c07807597faa781ae6c8c32eefdf48ecac03a7ba) in the sandbox machine (metal-01.he-eu-hel1.wakudev.misc.statusim.net.) @@ -146,7 +151,7 @@ In this case, the performance is similar regarding the timings. The store rate i ![Query time distribution](imgs/query-time-dist-3.png) -### Comparing archive SQLite & Postgres performance in [nwaku-b452ed8](https://github.com/waku-org/nwaku/tree/b452ed865466a33b7f5b87fa937a8471b28e466e) +#### Comparing archive SQLite & Postgres performance in [nwaku-b452ed8](https://github.com/waku-org/nwaku/tree/b452ed865466a33b7f5b87fa937a8471b28e466e) This nwaku commit is after a few **Postgres** optimizations were applied. @@ -184,7 +189,7 @@ It cannot be appreciated but the average *****Store***** time was 11ms. ![Query time distribution](imgs/query-time-dist-6.png) -### Conclusions +#### Conclusions After comparing both systems, *SQLite* performs much better than *Postgres* However, a benefit of using *Postgres* is that it performs asynchronous operations, and therefore doesn’t consume CPU time that would be better invested in *Relay* for example. @@ -196,7 +201,7 @@ Notice that we usually have a rate below 1100 req/minute in _status.prod_ fleet ----------------------------- -## Multiple nodes & one single database +### Multiple nodes & one single database This study aims to look for possible issues when having only one single database while several Waku nodes insert or retrieve data from it. The following diagram shows the scenery used for such analysis. @@ -210,7 +215,7 @@ ERR 2023-11-27 13:18:07.575+00:00 failed to insert message top The `db-postgres-hammer` is aimed to stress the database from the `select` point of view. It performs `N` concurrent `select` queries with a certain rate. -### Results +#### Results The following results were obtained by using the sandbox machine (metal-01.he-eu-hel1.wakudev.misc) and running nim-waku nodes from https://github.com/waku-org/nwaku/tree/b452ed865466a33b7f5b87fa937a8471b28e466e and using the `test-waku-query` project from https://github.com/waku-org/test-waku-query/tree/fef29cea182cc744c7940abc6c96d38a68739356 From 3d816c08145cf62221496c0e78cce865f06f5e40 Mon Sep 17 00:00:00 2001 From: gabrielmer <101006718+gabrielmer@users.noreply.github.com> Date: Mon, 15 Jan 2024 15:54:02 +0100 Subject: [PATCH 189/274] chore: Bump `nim-dnsdisc` (#2354) * chore: bump `vendor/nim-dnsdisc` * chore: Update import path of dnsdisc --------- Co-authored-by: Emil Ivanichkov --- tests/test_waku_dnsdisc.nim | 2 +- tests/waku_rln_relay/test_rln_group_manager_static.nim | 2 +- vendor/nim-dnsdisc | 2 +- waku/waku_dnsdisc.nim | 3 ++- 4 files changed, 5 insertions(+), 4 deletions(-) diff --git a/tests/test_waku_dnsdisc.nim b/tests/test_waku_dnsdisc.nim index c1768f8680..c27f4bc538 100644 --- a/tests/test_waku_dnsdisc.nim +++ b/tests/test_waku_dnsdisc.nim @@ -9,7 +9,7 @@ import chronos, libp2p/crypto/crypto, eth/keys, - discovery/dnsdisc/builder + dnsdisc/builder import ../../waku/node/peer_manager, ../../waku/waku_node, diff --git a/tests/waku_rln_relay/test_rln_group_manager_static.nim b/tests/waku_rln_relay/test_rln_group_manager_static.nim index 44af2a52d4..5cfbed0e7b 100644 --- a/tests/waku_rln_relay/test_rln_group_manager_static.nim +++ b/tests/waku_rln_relay/test_rln_group_manager_static.nim @@ -19,7 +19,7 @@ import chronos, libp2p/crypto/crypto, eth/keys, - discovery/dnsdisc/builder + dnsdisc/builder import std/tempfiles diff --git a/vendor/nim-dnsdisc b/vendor/nim-dnsdisc index 302dfde46f..c138792c93 160000 --- a/vendor/nim-dnsdisc +++ b/vendor/nim-dnsdisc @@ -1 +1 @@ -Subproject commit 302dfde46fa72a4e0de58a3dbdf54f5a77350816 +Subproject commit c138792c9385208626a005ffa0833101760b0da5 diff --git a/waku/waku_dnsdisc.nim b/waku/waku_dnsdisc.nim index 3058bb1b31..1836f883c1 100644 --- a/waku/waku_dnsdisc.nim +++ b/waku/waku_dnsdisc.nim @@ -20,7 +20,8 @@ import libp2p/crypto/secp, libp2p/multiaddress, libp2p/peerid, - discovery/dnsdisc/client + dnsdisc/client + import ./waku_core From c3358409bb549fbefeafbfd8804c33688fd2e944 Mon Sep 17 00:00:00 2001 From: NagyZoltanPeter <113987313+NagyZoltanPeter@users.noreply.github.com> Date: Tue, 16 Jan 2024 17:27:40 +0100 Subject: [PATCH 190/274] chore: Refactor of FilterV2 subscription management with Time-to-live maintenance (#2341) * Refactor of FilterV2 subscription handling and maintenance with addition subscription time-to-live support. Fixed all tests and reworked where subscription handling changes needed it. Adapted REST API /admin filter subscription retrieve to new filter subscription structure. * Fix tests and PR comments * Added filter v2 subscription timeout tests and fixed * Fix review comments and suggestions. No functional change. * Remove leftover echoes from test_rest_admin * Fix failed legacy filter tests due to separation of mounting the filters. * Small fixes, fix naming typo, removed duplicated checks in test --- apps/chat2/chat2.nim | 3 +- apps/chat2bridge/chat2bridge.nim | 1 + apps/wakunode2/app.nim | 20 +- apps/wakunode2/external_config.nim | 20 +- tests/node/test_wakunode_filter.nim | 32 +- tests/test_peer_manager.nim | 3 + tests/test_wakunode_filter_legacy.nim | 1 + tests/waku_filter_v2/test_waku_client.nim | 1076 +++++++++++------ .../test_waku_filter_protocol.nim | 83 +- tests/waku_filter_v2/waku_filter_utils.nim | 37 +- tests/waku_store/test_wakunode_store.nim | 1 + tests/wakunode_jsonrpc/test_jsonrpc_admin.nim | 1 + .../wakunode_jsonrpc/test_jsonrpc_filter.nim | 1 + tests/wakunode_rest/test_rest_admin.nim | 9 +- tests/wakunode_rest/test_rest_filter.nim | 1 - .../wakunode_rest/test_rest_legacy_filter.nim | 3 +- waku/node/waku_node.nim | 34 +- waku/utils/tableutils.nim | 35 + waku/waku_api/rest/admin/handlers.nim | 7 +- waku/waku_filter/protocol.nim | 6 +- waku/waku_filter_v2.nim | 6 +- waku/waku_filter_v2/protocol.nim | 117 +- waku/waku_filter_v2/subscriptions.nim | 171 ++- 23 files changed, 1123 insertions(+), 545 deletions(-) create mode 100644 waku/utils/tableutils.nim diff --git a/apps/chat2/chat2.nim b/apps/chat2/chat2.nim index 828e7fbbd1..877c7044e5 100644 --- a/apps/chat2/chat2.nim +++ b/apps/chat2/chat2.nim @@ -468,6 +468,7 @@ proc processInput(rfd: AsyncFD, rng: ref HmacDrbgContext) {.async.} = let peerInfo = parsePeerInfo(conf.filternode) if peerInfo.isOk(): await node.mountFilter() + await node.mountLegacyFilter() await node.mountFilterClient() node.peerManager.addServicePeer(peerInfo.value, WakuLegacyFilterCodec) @@ -507,7 +508,7 @@ proc processInput(rfd: AsyncFD, rng: ref HmacDrbgContext) {.async.} = echo "A spam message is found and discarded" chat.prompt = false showChatPrompt(chat) - + echo "rln-relay preparation is in progress..." let rlnConf = WakuRlnConfig( diff --git a/apps/chat2bridge/chat2bridge.nim b/apps/chat2bridge/chat2bridge.nim index 106eaf7e5d..375f6c1968 100644 --- a/apps/chat2bridge/chat2bridge.nim +++ b/apps/chat2bridge/chat2bridge.nim @@ -288,6 +288,7 @@ when isMainModule: if conf.filter: waitFor mountFilter(bridge.nodev2) + waitFor mountLegacyFilter(bridge.nodev2) if conf.staticnodes.len > 0: waitFor connectToNodes(bridge.nodev2, conf.staticnodes) diff --git a/apps/wakunode2/app.nim b/apps/wakunode2/app.nim index e724f17a95..0863eefe63 100644 --- a/apps/wakunode2/app.nim +++ b/apps/wakunode2/app.nim @@ -254,7 +254,7 @@ proc setupDiscoveryV5*(app: App): WakuDiscoveryV5 = ) WakuDiscoveryV5.new( - app.rng, + app.rng, discv5Conf, some(app.record), some(app.node.peerManager), @@ -326,7 +326,7 @@ proc setupWakuApp*(app: var App): AppResult[void] = ok() proc getPorts(listenAddrs: seq[MultiAddress]): - AppResult[tuple[tcpPort, websocketPort: Option[Port]]] = + AppResult[tuple[tcpPort, websocketPort: Option[Port]]] = var tcpPort, websocketPort = none(Port) @@ -548,7 +548,15 @@ proc setupProtocols(node: WakuNode, # Filter setup. NOTE Must be mounted after relay if conf.filter: try: - await mountFilter(node, filterTimeout = chronos.seconds(conf.filterTimeout)) + await mountLegacyFilter(node, filterTimeout = chronos.seconds(conf.filterTimeout)) + except CatchableError: + return err("failed to mount waku legacy filter protocol: " & getCurrentExceptionMsg()) + + try: + await mountFilter(node, + subscriptionTimeout = chronos.seconds(conf.filterSubscriptionTimeout), + maxFilterPeers = conf.filterMaxPeersToServe, + maxFilterCriteriaPerPeer = conf.filterMaxCriteria) except CatchableError: return err("failed to mount waku filter protocol: " & getCurrentExceptionMsg()) @@ -724,7 +732,7 @@ proc startRestServer(app: App, address: IpAddress, port: Port, conf: WakuNodeCon let filterCache = MessageCache.init() - let filterDiscoHandler = + let filterDiscoHandler = if app.wakuDiscv5.isSome(): some(defaultDiscoveryHandler(app.wakuDiscv5.get(), Filter)) else: none(DiscoveryHandler) @@ -739,7 +747,7 @@ proc startRestServer(app: App, address: IpAddress, port: Port, conf: WakuNodeCon notInstalledTab["filter"] = "/filter endpoints are not available. Please check your configuration: --filternode" ## Store REST API - let storeDiscoHandler = + let storeDiscoHandler = if app.wakuDiscv5.isSome(): some(defaultDiscoveryHandler(app.wakuDiscv5.get(), Store)) else: none(DiscoveryHandler) @@ -749,7 +757,7 @@ proc startRestServer(app: App, address: IpAddress, port: Port, conf: WakuNodeCon ## Light push API if conf.lightpushnode != "" and app.node.wakuLightpushClient != nil: - let lightDiscoHandler = + let lightDiscoHandler = if app.wakuDiscv5.isSome(): some(defaultDiscoveryHandler(app.wakuDiscv5.get(), Lightpush)) else: none(DiscoveryHandler) diff --git a/apps/wakunode2/external_config.nim b/apps/wakunode2/external_config.nim index 111c622e91..22235af69c 100644 --- a/apps/wakunode2/external_config.nim +++ b/apps/wakunode2/external_config.nim @@ -95,6 +95,7 @@ type defaultValue: false, name: "execute" .}: bool + of noCommand: ## Application-level configuration protectedTopics* {. @@ -221,7 +222,7 @@ type desc: "Rln relay identity commitment key as a Hex string", defaultValue: "" name: "rln-relay-id-commitment-key" }: string - + rlnRelayTreePath* {. desc: "Path to the RLN merkle tree sled db (https://github.com/spacejam/sled)", defaultValue: "" @@ -304,10 +305,25 @@ type name: "filternode" }: string filterTimeout* {. - desc: "Timeout for filter node in seconds.", + desc: "Filter clients will be wiped out if not able to receive push messages within this timeout. In seconds.", defaultValue: 14400 # 4 hours name: "filter-timeout" }: int64 + filterSubscriptionTimeout* {. + desc: "Timeout for filter subscription without ping or refresh it, in seconds. Only for v2 filter protocol.", + defaultValue: 300 # 5 minutes + name: "filter-subscription-timeout" }: int64 + + filterMaxPeersToServe* {. + desc: "Maximum number of peers to serve at a time. Only for v2 filter protocol.", + defaultValue: 1000 + name: "filter-max-peers-to-serve" }: uint32 + + filterMaxCriteria* {. + desc: "Maximum number of pubsub- and content topic combination per peers at a time. Only for v2 filter protocol.", + defaultValue: 1000 + name: "filter-max-criteria" }: uint32 + ## Lightpush config lightpush* {. diff --git a/tests/node/test_wakunode_filter.nim b/tests/node/test_wakunode_filter.nim index 7b7024b54f..d486eb1802 100644 --- a/tests/node/test_wakunode_filter.nim +++ b/tests/node/test_wakunode_filter.nim @@ -1,9 +1,9 @@ -{.used.} +{.used.} import std/[ - options, - tables, + options, + tables, sequtils ], stew/shims/net as stewNet, @@ -12,7 +12,7 @@ import chronicles, os, libp2p/[ - peerstore, + peerstore, crypto/crypto ] @@ -44,7 +44,7 @@ suite "Waku Filter - End to End": var contentTopicSeq {.threadvar.}: seq[ContentTopic] var pushHandlerFuture {.threadvar.}: Future[(string, WakuMessage)] var messagePushHandler {.threadvar.}: FilterPushHandler - + asyncSetup: pushHandlerFuture = newFuture[(string, WakuMessage)]() messagePushHandler = proc( @@ -84,8 +84,8 @@ suite "Waku Filter - End to End": # Then the subscription is successful check: subscribeResponse.isOk() - server.wakuFilter.subscriptions.len == 1 - server.wakuFilter.subscriptions.hasKey(clientPeerId) + server.wakuFilter.subscriptions.subscribedPeerCount() == 1 + server.wakuFilter.subscriptions.isSubscribed(clientPeerId) # When sending a message to the subscribed content topic let msg1 = fakeWakuMessage(contentTopic=contentTopic) @@ -106,7 +106,7 @@ suite "Waku Filter - End to End": # Then the unsubscription is successful check: unsubscribeResponse.isOk() - server.wakuFilter.subscriptions.len == 0 + server.wakuFilter.subscriptions.subscribedPeerCount() == 0 # When sending a message to the previously subscribed content topic pushHandlerFuture = newPushHandlerFuture() # Clear previous future @@ -116,7 +116,7 @@ suite "Waku Filter - End to End": # Then the message is not pushed to the client check: not await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) - + asyncTest "Client Node can't receive Push from Server Node, via Relay": # Given the server node has Relay enabled await server.mountRelay() @@ -127,7 +127,7 @@ suite "Waku Filter - End to End": ) require: subscribeResponse.isOk() - server.wakuFilter.subscriptions.len == 1 + server.wakuFilter.subscriptions.subscribedPeerCount() == 1 # When a server node gets a Relay message let msg1 = fakeWakuMessage(contentTopic=contentTopic) @@ -141,7 +141,7 @@ suite "Waku Filter - End to End": let serverKey = generateSecp256k1Key() server = newTestWakuNode(serverKey, parseIpAddress("0.0.0.0"), Port(0)) - + waitFor server.start() waitFor server.mountRelay() @@ -162,8 +162,8 @@ suite "Waku Filter - End to End": ) require: subscribeResponse.isOk() - server.wakuFilter.subscriptions.len == 1 - + server.wakuFilter.subscriptions.subscribedPeerCount() == 1 + # And the client node reboots waitFor client.stop() waitFor client.start() @@ -189,8 +189,8 @@ suite "Waku Filter - End to End": ) require: subscribeResponse.isOk() - server.wakuFilter.subscriptions.len == 1 - + server.wakuFilter.subscriptions.subscribedPeerCount() == 1 + # And the client node reboots waitFor client.stop() waitFor client.start() @@ -209,7 +209,7 @@ suite "Waku Filter - End to End": ) check: subscribeResponse2.isOk() - server.wakuFilter.subscriptions.len == 1 + server.wakuFilter.subscriptions.subscribedPeerCount() == 1 # When a message is sent to the subscribed content topic, via Relay pushHandlerFuture = newPushHandlerFuture() diff --git a/tests/test_peer_manager.nim b/tests/test_peer_manager.nim index 8576f2725a..25f4a9e77e 100644 --- a/tests/test_peer_manager.nim +++ b/tests/test_peer_manager.nim @@ -53,6 +53,7 @@ procSuite "Peer Manager": await allFutures(nodes.mapIt(it.start())) await allFutures(nodes.mapIt(it.mountRelay())) await allFutures(nodes.mapIt(it.mountFilter())) + await allFutures(nodes.mapIt(it.mountLegacyFilter())) # Dial node2 from node1 let conn = await nodes[0].peerManager.dialPeer(nodes[1].peerInfo.toRemotePeerInfo(), WakuLegacyFilterCodec) @@ -528,6 +529,7 @@ procSuite "Peer Manager": await allFutures(nodes.mapIt(it.start())) await allFutures(nodes.mapIt(it.mountRelay())) await allFutures(nodes.mapIt(it.mountFilter())) + await allFutures(nodes.mapIt(it.mountLegacyFilter())) let pInfos = nodes.mapIt(it.switch.peerInfo.toRemotePeerInfo()) @@ -579,6 +581,7 @@ procSuite "Peer Manager": await allFutures(nodes.mapIt(it.start())) await allFutures(nodes.mapIt(it.mountRelay())) await allFutures(nodes.mapIt(it.mountFilter())) + await allFutures(nodes.mapIt(it.mountLegacyFilter())) let pInfos = nodes.mapIt(it.switch.peerInfo.toRemotePeerInfo()) diff --git a/tests/test_wakunode_filter_legacy.nim b/tests/test_wakunode_filter_legacy.nim index cf0e37bc96..85b8c37db1 100644 --- a/tests/test_wakunode_filter_legacy.nim +++ b/tests/test_wakunode_filter_legacy.nim @@ -29,6 +29,7 @@ suite "WakuNode - Filter": waitFor allFutures(server.start(), client.start()) waitFor server.mountFilter() + waitFor server.mountLegacyFilter() waitFor client.mountFilterClient() ## Given diff --git a/tests/waku_filter_v2/test_waku_client.nim b/tests/waku_filter_v2/test_waku_client.nim index 3d4d489f34..b0f2a653f0 100644 --- a/tests/waku_filter_v2/test_waku_client.nim +++ b/tests/waku_filter_v2/test_waku_client.nim @@ -2,10 +2,10 @@ import std/[ - options, - tables, - sequtils, - strutils, + options, + tables, + sequtils, + strutils, json ], testutils/unittests, @@ -40,7 +40,6 @@ import ./waku_filter_utils, ../resources/payloads - suite "Waku Filter - End to End": suite "MessagePushHandler - Void": var serverSwitch {.threadvar.}: Switch @@ -77,27 +76,26 @@ suite "Waku Filter - End to End": wakuFilterClient.registerPushHandler(messagePushHandler) serverRemotePeerInfo = serverSwitch.peerInfo.toRemotePeerInfo() clientPeerId = clientSwitch.peerInfo.toRemotePeerInfo().peerId - + asyncTeardown: await allFutures(wakuFilter.stop(), wakuFilterClient.stop(), serverSwitch.stop(), clientSwitch.stop()) suite "Subscriber Ping": asyncTest "Active Subscription Identification": # Given - let + let subscribeResponse = await wakuFilterClient.subscribe( serverRemotePeerInfo, pubsubTopic, contentTopicSeq ) assert subscribeResponse.isOk(), $subscribeResponse.error - check wakuFilter.subscriptions.hasKey(clientPeerId) + check wakuFilter.subscriptions.isSubscribed(clientPeerId) # When let subscribedPingResponse = await wakuFilterClient.ping(serverRemotePeerInfo) - # Then assert subscribedPingResponse.isOk(), $subscribedPingResponse.error check: - wakuFilter.subscriptions.hasKey(clientPeerId) + wakuFilter.subscriptions.isSubscribed(clientPeerId) asyncTest "No Active Subscription Identification": # When @@ -107,26 +105,24 @@ suite "Waku Filter - End to End": check: unsubscribedPingResponse.isErr() # Not subscribed unsubscribedPingResponse.error().kind == FilterSubscribeErrorKind.NOT_FOUND - asyncTest "After Unsubscription": # Given - let + let subscribeResponse = await wakuFilterClient.subscribe( serverRemotePeerInfo, pubsubTopic, contentTopicSeq ) assert subscribeResponse.isOk(), $subscribeResponse.error - check wakuFilter.subscriptions.hasKey(clientPeerId) + check wakuFilter.subscriptions.isSubscribed(clientPeerId) # When let unsubscribeResponse = await wakuFilterClient.unsubscribe( serverRemotePeerInfo, pubsubTopic, contentTopicSeq ) assert unsubscribeResponse.isOk(), $unsubscribeResponse.error - check not wakuFilter.subscriptions.hasKey(clientPeerId) + check not wakuFilter.subscriptions.isSubscribed(clientPeerId) let unsubscribedPingResponse = await wakuFilterClient.ping(serverRemotePeerInfo) - # Then check: unsubscribedPingResponse.isErr() # Not subscribed @@ -171,9 +167,9 @@ suite "Waku Filter - End to End": # Then the subscription is successful assert subscribeResponse.isOk(), $subscribeResponse.error check: - wakuFilter.subscriptions.len == 1 - wakuFilter.subscriptions.hasKey(clientPeerId) - wakuFilter.getSubscribedContentTopics(clientPeerId) == contentTopicSeq + wakuFilter.subscriptions.subscribedPeerCount() == 1 + wakuFilter.subscriptions.isSubscribed(clientPeerId) + unorderedCompare(wakuFilter.getSubscribedContentTopics(clientPeerId), contentTopicSeq) # When sending a message to the subscribed content topic let msg1 = fakeWakuMessage(contentTopic=contentTopic) @@ -185,7 +181,7 @@ suite "Waku Filter - End to End": check: pushedMsgPubsubTopic == pubsubTopic pushedMsg == msg1 - + # When sending a message to a non-subscribed content topic (before unsubscription) pushHandlerFuture = newPushHandlerFuture() # Clear previous future let msg2 = fakeWakuMessage(contentTopic=nonExistentContentTopic) @@ -201,7 +197,7 @@ suite "Waku Filter - End to End": ) assert unsubscribeResponse.isOk(), $unsubscribeResponse.error check: - wakuFilter.subscriptions.len == 0 + wakuFilter.subscriptions.subscribedPeerCount() == 0 # When sending a message to the previously unsubscribed content topic pushHandlerFuture = newPushHandlerFuture() # Clear previous future @@ -211,7 +207,7 @@ suite "Waku Filter - End to End": # Then the message is not pushed to the client check: not await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) - + # When sending a message to a non-subscribed content topic (after unsubscription) pushHandlerFuture = newPushHandlerFuture() # Clear previous future let msg4 = fakeWakuMessage(contentTopic=nonExistentContentTopic) @@ -233,9 +229,9 @@ suite "Waku Filter - End to End": ) assert subscribeResponse.isOk(), $subscribeResponse.error check: - wakuFilter.subscriptions.len == 1 - wakuFilter.subscriptions.hasKey(clientPeerId) - wakuFilter.getSubscribedContentTopics(clientPeerId) == contentTopicsSeq + wakuFilter.subscriptions.subscribedPeerCount() == 1 + wakuFilter.subscriptions.isSubscribed(clientPeerId) + unorderedCompare(wakuFilter.getSubscribedContentTopics(clientPeerId), contentTopicsSeq) # When sending a message to the one of the subscribed content topics let msg1 = fakeWakuMessage(contentTopic=contentTopic) @@ -247,7 +243,7 @@ suite "Waku Filter - End to End": check: pushedMsgPubsubTopic1 == pubsubTopic pushedMsg1 == msg1 - + # When sending a message to the other subscribed content topic pushHandlerFuture = newPushHandlerFuture() # Clear previous future let msg2 = fakeWakuMessage(contentTopic=otherContentTopic) @@ -259,7 +255,7 @@ suite "Waku Filter - End to End": check: pushedMsgPubsubTopic2 == pubsubTopic pushedMsg2 == msg2 - + # When sending a message to a non-subscribed content topic (before unsubscription) pushHandlerFuture = newPushHandlerFuture() # Clear previous future let msg3 = fakeWakuMessage(contentTopic=nonExistentContentTopic) @@ -268,14 +264,14 @@ suite "Waku Filter - End to End": # Then the message is not pushed to the client check: not await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) - + # Given a valid unsubscription to an existing subscription let unsubscribeResponse = await wakuFilterClient.unsubscribe( serverRemotePeerInfo, pubsubTopic, contentTopicsSeq ) assert unsubscribeResponse.isOk(), $unsubscribeResponse.error - check wakuFilter.subscriptions.len == 0 - + check wakuFilter.subscriptions.subscribedPeerCount() == 0 + # When sending a message to the previously unsubscribed content topic pushHandlerFuture = newPushHandlerFuture() # Clear previous future let msg4 = fakeWakuMessage(contentTopic=contentTopic) @@ -293,7 +289,7 @@ suite "Waku Filter - End to End": # Then the message is not pushed to the client check: not await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) - + # When sending a message to a non-subscribed content topic (after unsubscription) pushHandlerFuture = newPushHandlerFuture() # Clear previous future let msg6 = fakeWakuMessage(contentTopic=nonExistentContentTopic) @@ -311,15 +307,15 @@ suite "Waku Filter - End to End": # When subscribing to a pubsub topic let subscribeResponse1 = await wakuFilterClient.subscribe( - serverRemotePeerInfo, pubsubTopic, contentTopicSeq + serverRemotePeerInfo, pubsubTopic, contentTopicSeq ) # Then the subscription is successful assert subscribeResponse1.isOk(), $subscribeResponse1.error check: - wakuFilter.subscriptions.len == 1 - wakuFilter.subscriptions.hasKey(clientPeerId) - wakuFilter.getSubscribedContentTopics(clientPeerId) == contentTopicSeq + wakuFilter.subscriptions.subscribedPeerCount() == 1 + wakuFilter.subscriptions.isSubscribed(clientPeerId) + unorderedCompare(wakuFilter.getSubscribedContentTopics(clientPeerId), contentTopicSeq) # When subscribing to a different pubsub topic let subscribeResponse2 = await wakuFilterClient.subscribe( @@ -329,9 +325,9 @@ suite "Waku Filter - End to End": # Then the subscription is successful assert subscribeResponse2.isOk(), $subscribeResponse2.error check: - wakuFilter.subscriptions.len == 1 - wakuFilter.subscriptions.hasKey(clientPeerId) - wakuFilter.getSubscribedContentTopics(clientPeerId) == contentTopicSeq & otherContentTopicSeq + wakuFilter.subscriptions.subscribedPeerCount() == 1 + wakuFilter.subscriptions.isSubscribed(clientPeerId) + unorderedCompare(wakuFilter.getSubscribedContentTopics(clientPeerId), contentTopicSeq & otherContentTopicSeq) # When sending a message to one of the subscribed content topics let msg1 = fakeWakuMessage(contentTopic=contentTopic) @@ -343,7 +339,7 @@ suite "Waku Filter - End to End": check: pushedMsgPubsubTopic1 == pubsubTopic pushedMsg1 == msg1 - + # When sending a message to the other subscribed content topic pushHandlerFuture = newPushHandlerFuture() # Clear previous future let msg2 = fakeWakuMessage(contentTopic=otherContentTopic) @@ -373,10 +369,10 @@ suite "Waku Filter - End to End": # Then the unsubscription is successful assert unsubscribeResponse1.isOk(), $unsubscribeResponse1.error check: - wakuFilter.subscriptions.len == 1 - wakuFilter.subscriptions.hasKey(clientPeerId) - wakuFilter.getSubscribedContentTopics(clientPeerId) == otherContentTopicSeq - + wakuFilter.subscriptions.subscribedPeerCount() == 1 + wakuFilter.subscriptions.isSubscribed(clientPeerId) + unorderedCompare(wakuFilter.getSubscribedContentTopics(clientPeerId), otherContentTopicSeq) + # When sending a message to the previously subscribed content topic pushHandlerFuture = newPushHandlerFuture() # Clear previous future let msg4 = fakeWakuMessage(contentTopic=contentTopic) @@ -385,7 +381,7 @@ suite "Waku Filter - End to End": # Then the message is not pushed to the client check: not await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) - + # When sending a message to the still subscribed content topic pushHandlerFuture = newPushHandlerFuture() # Clear previous future let msg5 = fakeWakuMessage(contentTopic=otherContentTopic) @@ -397,7 +393,7 @@ suite "Waku Filter - End to End": check: pushedMsgPubsubTopic3 == otherPubsubTopic pushedMsg3 == msg5 - + # When unsubscribing from the other subscription let unsubscribeResponse2 = await wakuFilterClient.unsubscribe( serverRemotePeerInfo, otherPubsubTopic, otherContentTopicSeq @@ -406,7 +402,7 @@ suite "Waku Filter - End to End": # Then the unsubscription is successful assert unsubscribeResponse2.isOk(), $unsubscribeResponse2.error check: - wakuFilter.subscriptions.len == 0 + wakuFilter.subscriptions.subscribedPeerCount() == 0 # When sending a message to the previously unsubscribed content topic pushHandlerFuture = newPushHandlerFuture() # Clear previous future @@ -431,9 +427,9 @@ suite "Waku Filter - End to End": # Then assert subscribeResponse1.isOk(), $subscribeResponse1.error check: - wakuFilter.subscriptions.len == 1 - wakuFilter.subscriptions.hasKey(clientPeerId) - wakuFilter.getSubscribedContentTopics(clientPeerId) == contentTopicSeq + wakuFilter.subscriptions.subscribedPeerCount() == 1 + wakuFilter.subscriptions.isSubscribed(clientPeerId) + unorderedCompare(wakuFilter.getSubscribedContentTopics(clientPeerId), contentTopicSeq) # When subscribing to a different content topic let subscribeResponse2 = await wakuFilterClient.subscribe( @@ -443,9 +439,9 @@ suite "Waku Filter - End to End": # Then assert subscribeResponse2.isOk(), $subscribeResponse2.error check: - wakuFilter.subscriptions.len == 1 - wakuFilter.subscriptions.hasKey(clientPeerId) - wakuFilter.getSubscribedContentTopics(clientPeerId) == contentTopicSeq & otherContentTopicSeq + wakuFilter.subscriptions.subscribedPeerCount() == 1 + wakuFilter.subscriptions.isSubscribed(clientPeerId) + unorderedCompare(wakuFilter.getSubscribedContentTopics(clientPeerId), contentTopicSeq & otherContentTopicSeq) # When sending a message to one of the subscribed content topics let msg1 = fakeWakuMessage(contentTopic=contentTopic) @@ -457,7 +453,7 @@ suite "Waku Filter - End to End": check: pushedMsgPubsubTopic1 == pubsubTopic pushedMsg1 == msg1 - + # When sending a message to the other subscribed content topic pushHandlerFuture = newPushHandlerFuture() # Clear previous future let msg2 = fakeWakuMessage(contentTopic=otherContentTopic) @@ -485,8 +481,8 @@ suite "Waku Filter - End to End": # Then the unsubscription is successful assert unsubscribeResponse.isOk(), $unsubscribeResponse.error check: - wakuFilter.subscriptions.len == 0 - + wakuFilter.subscriptions.subscribedPeerCount() == 0 + # When sending a message the previously subscribed content topics pushHandlerFuture = newPushHandlerFuture() # Clear previous future let msg4 = fakeWakuMessage(contentTopic=contentTopic) @@ -508,15 +504,15 @@ suite "Waku Filter - End to End": # When subscribing to a pubsub topic let subscribeResponse1 = await wakuFilterClient.subscribe( - serverRemotePeerInfo, pubsubTopic, contentTopicsSeq1 + serverRemotePeerInfo, pubsubTopic, contentTopicsSeq1 ) # Then the subscription is successful assert subscribeResponse1.isOk(), $subscribeResponse1.error check: - wakuFilter.subscriptions.len == 1 - wakuFilter.subscriptions.hasKey(clientPeerId) - wakuFilter.getSubscribedContentTopics(clientPeerId) == contentTopicsSeq1 + wakuFilter.subscriptions.subscribedPeerCount() == 1 + wakuFilter.subscriptions.isSubscribed(clientPeerId) + unorderedCompare(wakuFilter.getSubscribedContentTopics(clientPeerId), contentTopicsSeq1) # When subscribing to a different pubsub topic let subscribeResponse2 = await wakuFilterClient.subscribe( @@ -526,9 +522,9 @@ suite "Waku Filter - End to End": # Then the subscription is successful assert subscribeResponse2.isOk(), $subscribeResponse2.error check: - wakuFilter.subscriptions.len == 1 - wakuFilter.subscriptions.hasKey(clientPeerId) - wakuFilter.getSubscribedContentTopics(clientPeerId) == contentTopicsSeq1 & contentTopicsSeq2 + wakuFilter.subscriptions.subscribedPeerCount() == 1 + wakuFilter.subscriptions.isSubscribed(clientPeerId) + unorderedCompare(wakuFilter.getSubscribedContentTopics(clientPeerId), contentTopicsSeq1 & contentTopicsSeq2) # When sending a message to (pubsubTopic, contentTopic) let msg1 = fakeWakuMessage(contentTopic=contentTopic) @@ -552,7 +548,7 @@ suite "Waku Filter - End to End": check: pushedMsgPubsubTopic2 == pubsubTopic pushedMsg2 == msg2 - + # When sending a message to (otherPubsubTopic, contentTopic) pushHandlerFuture = newPushHandlerFuture() # Clear previous future let msg3 = fakeWakuMessage(contentTopic=contentTopic) @@ -564,7 +560,7 @@ suite "Waku Filter - End to End": check: pushedMsgPubsubTopic3 == otherPubsubTopic pushedMsg3 == msg3 - + # When sending a message to (otherPubsubTopic, otherContentTopic2) pushHandlerFuture = newPushHandlerFuture() # Clear previous future let msg4 = fakeWakuMessage(contentTopic=otherContentTopic2) @@ -576,7 +572,7 @@ suite "Waku Filter - End to End": check: pushedMsgPubsubTopic4 == otherPubsubTopic pushedMsg4 == msg4 - + # When selectively unsubscribing from (pubsubTopic, otherContentTopic1) and (otherPubsubTopic, contentTopic) let unsubscribeResponse1 = await wakuFilterClient.unsubscribe( serverRemotePeerInfo, pubsubTopic, @[otherContentTopic1] @@ -589,9 +585,9 @@ suite "Waku Filter - End to End": assert unsubscribeResponse1.isOk(), $unsubscribeResponse1.error assert unsubscribeResponse2.isOk(), $unsubscribeResponse2.error check: - wakuFilter.subscriptions.len == 1 - wakuFilter.subscriptions.hasKey(clientPeerId) - wakuFilter.getSubscribedContentTopics(clientPeerId) == @[contentTopic, otherContentTopic2] + wakuFilter.subscriptions.subscribedPeerCount() == 1 + wakuFilter.subscriptions.isSubscribed(clientPeerId) + unorderedCompare(wakuFilter.getSubscribedContentTopics(clientPeerId), @[contentTopic, otherContentTopic2]) # When sending a message to (pubsubTopic, contentTopic) pushHandlerFuture = newPushHandlerFuture() # Clear previous future @@ -616,7 +612,7 @@ suite "Waku Filter - End to End": check: pushedMsgPubsubTopic6 == otherPubsubTopic pushedMsg6 == msg6 - + # When sending a message to (pubsubTopic, otherContentTopic1) and (otherPubsubTopic, contentTopic) pushHandlerFuture = newPushHandlerFuture() # Clear previous future let msg7 = fakeWakuMessage(contentTopic=otherContentTopic1) @@ -629,7 +625,7 @@ suite "Waku Filter - End to End": not await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT) asyncTest "Max Topic Size": - # Given a topic list of 30 topics + # Given a topic list of 100 topics var topicSeq: seq[string] = toSeq(0.. 0: let takeNumber = min(topicSeq.len, MaxContentTopicsPerRequest) @@ -687,14 +683,14 @@ suite "Waku Filter - End to End": assert subscribeResponse.isOk(), $subscribeResponse.error subscribedTopics.add(topicSeqBatch) topicSeq.delete(0.. MaxContentTopicsPerRequest: - return err(FilterSubscribeError.badRequest("exceeds maximum content topics: " & $MaxContentTopicsPerRequest)) + if contentTopics.len > MaxContentTopicsPerRequest: + return err(FilterSubscribeError.badRequest("exceeds maximum content topics: " & + $MaxContentTopicsPerRequest)) let filterCriteria = toHashSet(contentTopics.mapIt((pubsubTopic.get(), it))) trace "subscribing peer to filter criteria", peerId=peerId, filterCriteria=filterCriteria - if peerId in wf.subscriptions: - # We already have a subscription for this peer. Try to add the new filter criteria. - var peerSubscription = wf.subscriptions.mgetOrPut(peerId, initHashSet[FilterCriterion]()) - if peerSubscription.len() + filterCriteria.len() > MaxCriteriaPerSubscription: - return err(FilterSubscribeError.serviceUnavailable("peer has reached maximum number of filter criteria")) - - peerSubscription.incl(filterCriteria) - wf.subscriptions[peerId] = peerSubscription - else: - # We don't have a subscription for this peer yet. Try to add it. - if wf.subscriptions.len() >= MaxTotalSubscriptions: - return err(FilterSubscribeError.serviceUnavailable("node has reached maximum number of subscriptions")) - debug "creating new subscription", peerId=peerId - wf.subscriptions[peerId] = filterCriteria + wf.subscriptions.addSubscription(peerId, filterCriteria).isOkOr: + return err(FilterSubscribeError.serviceUnavailable(error)) ok() -proc unsubscribe(wf: WakuFilter, peerId: PeerID, pubsubTopic: Option[PubsubTopic], contentTopics: seq[ContentTopic]): FilterSubscribeResult = - if pubsubTopic.isNone() or contentTopics.len() == 0: +proc unsubscribe(wf: WakuFilter, + peerId: PeerID, + pubsubTopic: Option[PubsubTopic], + contentTopics: seq[ContentTopic]): FilterSubscribeResult = + if pubsubTopic.isNone() or contentTopics.len == 0: return err(FilterSubscribeError.badRequest("pubsubTopic and contentTopics must be specified")) - if contentTopics.len() > MaxContentTopicsPerRequest: + if contentTopics.len > MaxContentTopicsPerRequest: return err(FilterSubscribeError.badRequest("exceeds maximum content topics: " & $MaxContentTopicsPerRequest)) let filterCriteria = toHashSet(contentTopics.mapIt((pubsubTopic.get(), it))) - trace "unsubscribing peer from filter criteria", peerId=peerId, filterCriteria=filterCriteria - - if peerId notin wf.subscriptions: - debug "unsubscribing peer has no subscriptions", peerId=peerId - return err(FilterSubscribeError.notFound()) - - var peerSubscription = wf.subscriptions.mgetOrPut(peerId, initHashSet[FilterCriterion]()) + debug "unsubscribing peer from filter criteria", peerId=peerId, filterCriteria=filterCriteria - if not peerSubscription.containsAny(filterCriteria): - debug "unsubscribing peer is not subscribed to any of the content topics in this pubsub topic", peerId=peerId, pubsubTopic=pubsubTopic.get(), contentTopics=contentTopics + wf.subscriptions.removeSubscription(peerId, filterCriteria).isOkOr: return err(FilterSubscribeError.notFound()) - peerSubscription.excl(filterCriteria) - - if peerSubscription.len() == 0: - debug "peer has no more subscriptions, removing subscription", peerId=peerId - wf.subscriptions.del(peerId) - else: - wf.subscriptions[peerId] = peerSubscription - ok() proc unsubscribeAll(wf: WakuFilter, peerId: PeerID): FilterSubscribeResult = - if peerId notin wf.subscriptions: + if not wf.subscriptions.isSubscribed(peerId): debug "unsubscribing peer has no subscriptions", peerId=peerId return err(FilterSubscribeError.notFound()) debug "removing peer subscription", peerId=peerId - wf.subscriptions.del(peerId) + wf.subscriptions.removePeer(peerId) + wf.subscriptions.cleanUp() ok() -proc handleSubscribeRequest*(wf: WakuFilter, peerId: PeerId, request: FilterSubscribeRequest): FilterSubscribeResponse = +proc handleSubscribeRequest*(wf: WakuFilter, + peerId: PeerId, + request: FilterSubscribeRequest): FilterSubscribeResponse = info "received filter subscribe request", peerId=peerId, request=request waku_filter_requests.inc(labelValues = [$request.filterSubscribeType]) @@ -134,7 +121,8 @@ proc handleSubscribeRequest*(wf: WakuFilter, peerId: PeerId, request: FilterSubs let requestDuration = Moment.now() - requestStartTime requestDurationSec = requestDuration.milliseconds.float / 1000 # Duration in seconds with millisecond precision floating point - waku_filter_request_duration_seconds.observe(requestDurationSec, labelValues = [$request.filterSubscribeType]) + waku_filter_request_duration_seconds.observe( + requestDurationSec, labelValues = [$request.filterSubscribeType]) if subscribeResult.isErr(): return FilterSubscribeResponse( @@ -153,6 +141,7 @@ proc pushToPeer(wf: WakuFilter, peer: PeerId, buffer: seq[byte]) {.async.} = trace "no addresses for peer", peer=peer return + ## TODO: Check if dial is necessary always??? let conn = await wf.peerManager.dialPeer(peer, WakuFilterPushCodec) if conn.isNone(): ## We do not remove this peer, but allow the underlying peer manager @@ -163,7 +152,10 @@ proc pushToPeer(wf: WakuFilter, peer: PeerId, buffer: seq[byte]) {.async.} = await conn.get().writeLp(buffer) proc pushToPeers(wf: WakuFilter, peers: seq[PeerId], messagePush: MessagePush) {.async.} = - debug "pushing message to subscribed peers", pubsubTopic=messagePush.pubsubTopic, contentTopic=messagePush.wakuMessage.contentTopic, peers=peers, hash=messagePush.pubsubTopic.computeMessageHash(messagePush.wakuMessage).to0xHex() + debug "pushing message to subscribed peers", pubsubTopic=messagePush.pubsubTopic, + contentTopic=messagePush.wakuMessage.contentTopic, + peers=peers, + hash=messagePush.pubsubTopic.computeMessageHash(messagePush.wakuMessage).to0xHex() let bufferToPublish = messagePush.encode().buffer @@ -179,18 +171,18 @@ proc maintainSubscriptions*(wf: WakuFilter) = ## Remove subscriptions for peers that have been removed from peer store var peersToRemove: seq[PeerId] - for peerId, peerSubscription in wf.subscriptions.pairs(): - ## TODO: currently we only maintain by syncing with peer store. We could - ## consider other metrics, such as subscription age, activity, etc. + for peerId in wf.subscriptions.peersSubscribed.keys: if not wf.peerManager.peerStore.hasPeer(peerId, WakuFilterPushCodec): debug "peer has been removed from peer store, removing subscription", peerId=peerId peersToRemove.add(peerId) - if peersToRemove.len() > 0: + if peersToRemove.len > 0: wf.subscriptions.removePeers(peersToRemove) + wf.subscriptions.cleanUp() + ## Periodic report of number of subscriptions - waku_filter_subscriptions.set(wf.subscriptions.len().float64) + waku_filter_subscriptions.set(wf.subscriptions.peersSubscribed.len.float64) const MessagePushTimeout = 20.seconds proc handleMessage*(wf: WakuFilter, pubsubTopic: PubsubTopic, message: WakuMessage) {.async.} = @@ -201,7 +193,7 @@ proc handleMessage*(wf: WakuFilter, pubsubTopic: PubsubTopic, message: WakuMessa block: ## Find subscribers and push message to them let subscribedPeers = wf.subscriptions.findSubscribedPeers(pubsubTopic, message.contentTopic) - if subscribedPeers.len() == 0: + if subscribedPeers.len == 0: trace "no subscribed peers found", pubsubTopic=pubsubTopic, contentTopic=message.contentTopic return @@ -210,11 +202,15 @@ proc handleMessage*(wf: WakuFilter, pubsubTopic: PubsubTopic, message: WakuMessa wakuMessage: message) if not await wf.pushToPeers(subscribedPeers, messagePush).withTimeout(MessagePushTimeout): - debug "timed out pushing message to peers", pubsubTopic=pubsubTopic, contentTopic=message.contentTopic, hash=pubsubTopic.computeMessageHash(message).to0xHex() + debug "timed out pushing message to peers", pubsubTopic=pubsubTopic, + contentTopic=message.contentTopic, + hash=pubsubTopic.computeMessageHash(message).to0xHex() waku_filter_errors.inc(labelValues = [pushTimeoutFailure]) else: - debug "pushed message succesfully to all subscribers", pubsubTopic=pubsubTopic, contentTopic=message.contentTopic, hash=pubsubTopic.computeMessageHash(message).to0xHex() - + debug "pushed message succesfully to all subscribers", + pubsubTopic=pubsubTopic, + contentTopic=message.contentTopic, + hash=pubsubTopic.computeMessageHash(message).to0xHex() let handleMessageDuration = Moment.now() - handleMessageStartTime @@ -247,13 +243,21 @@ proc initProtocolHandler(wf: WakuFilter) = wf.codec = WakuFilterSubscribeCodec proc new*(T: type WakuFilter, - peerManager: PeerManager): T = + peerManager: PeerManager, + subscriptionTimeout: Duration = DefaultSubscriptionTimeToLiveSec, + maxFilterPeers: uint32 = MaxFilterPeers, + maxFilterCriteriaPerPeer: uint32 = MaxFilterCriteriaPerPeer): T = let wf = WakuFilter( + subscriptions: FilterSubscriptions.init(subscriptionTimeout, + maxFilterPeers, + maxFilterCriteriaPerPeer + ), peerManager: peerManager ) + wf.initProtocolHandler() - wf + return wf const MaintainSubscriptionsInterval* = 1.minutes @@ -278,4 +282,5 @@ method stop*(wf: WakuFilter) {.async.} = debug "stopping filter protocol" if not wf.maintenanceTask.isNil(): wf.maintenanceTask.clearTimer() + await procCall LPProtocol(wf).stop() diff --git a/waku/waku_filter_v2/subscriptions.nim b/waku/waku_filter_v2/subscriptions.nim index bd248f54cd..ba568f331b 100644 --- a/waku/waku_filter_v2/subscriptions.nim +++ b/waku/waku_filter_v2/subscriptions.nim @@ -6,48 +6,163 @@ else: import std/[sets,tables], chronicles, - libp2p/peerid + chronos, + libp2p/peerid, + stew/shims/sets import - ../waku_core + ../waku_core, + ../utils/tableutils logScope: topics = "waku filter subscriptions" const - MaxTotalSubscriptions* = 1000 # TODO make configurable - MaxCriteriaPerSubscription* = 1000 + MaxFilterPeers* = 1000 + MaxFilterCriteriaPerPeer* = 1000 + DefaultSubscriptionTimeToLiveSec* = 5.minutes type - FilterCriterion* = (PubsubTopic, ContentTopic) # a single filter criterion is fully defined by a pubsub topic and content topic + # a single filter criterion is fully defined by a pubsub topic and content topic + FilterCriterion* = tuple + pubsubTopic: PubsubTopic + contentTopic: ContentTopic + FilterCriteria* = HashSet[FilterCriterion] # a sequence of filter criteria - FilterSubscriptions* = Table[PeerID, FilterCriteria] # a mapping of peer ids to a sequence of filter criteria -proc findSubscribedPeers*(subscriptions: FilterSubscriptions, pubsubTopic: PubsubTopic, contentTopic: ContentTopic): seq[PeerID] = - ## Find all peers subscribed to a given topic and content topic - let filterCriterion = (pubsubTopic, contentTopic) + SubscribedPeers* = HashSet[PeerID] # a sequence of peer ids + + PeerData* = tuple + lastSeen: Moment + criteriaCount: uint + + FilterSubscriptions* = object + peersSubscribed* : Table[PeerID, PeerData] + subscriptions : Table[FilterCriterion, SubscribedPeers] + subscriptionTimeout : Duration + maxPeers : uint + maxCriteriaPerPeer : uint + +proc init*(T: type FilterSubscriptions, + subscriptionTimeout: Duration = DefaultSubscriptionTimeToLiveSec, + maxFilterPeers: uint32 = MaxFilterPeers, + maxFilterCriteriaPerPeer: uint32 = MaxFilterCriteriaPerPeer): FilterSubscriptions = + ## Create a new filter subscription object + return FilterSubscriptions( + peersSubscribed: initTable[PeerID, PeerData](), + subscriptions: initTable[FilterCriterion, SubscribedPeers](), + subscriptionTimeout: subscriptionTimeout, + maxPeers: maxFilterPeers, + maxCriteriaPerPeer: maxFilterCriteriaPerPeer + ) + +proc isSubscribed*(s: var FilterSubscriptions, peerId: PeerID): bool = + s.peersSubscribed.withValue(peerId, data): + return Moment.now() - data.lastSeen <= s.subscriptionTimeout + + return false + +proc subscribedPeerCount*(s: FilterSubscriptions): uint = + return cast[uint](s.peersSubscribed.len) - var subscribedPeers: seq[PeerID] +proc getPeerSubscriptions*(s: var FilterSubscriptions, peerId: PeerID): seq[FilterCriterion] = + ## Get all pubsub-content topics a peer is subscribed to + var subscribedContentTopics: seq[FilterCriterion] = @[] + s.peersSubscribed.withValue(peerId, data): + if data.criteriaCount == 0: + return subscribedContentTopics - # TODO: for large maps, this can be optimized using a reverse index - for (peerId, criteria) in subscriptions.pairs(): - if filterCriterion in criteria: - subscribedPeers.add(peerId) + for filterCriterion, subscribedPeers in s.subscriptions.mpairs: + if peerId in subscribedPeers: + subscribedContentTopics.add(filterCriterion) - subscribedPeers + return subscribedContentTopics -proc removePeer*(subscriptions: var FilterSubscriptions, peerId: PeerID) = +proc findSubscribedPeers*(s: var FilterSubscriptions, pubsubTopic: PubsubTopic, contentTopic: ContentTopic): seq[PeerID] = + let filterCriterion : FilterCriterion = (pubsubTopic, contentTopic) + + var foundPeers : seq[PeerID] = @[] + # only peers subscribed to criteria and with legit subscription is counted + s.subscriptions.withValue(filterCriterion, peers): + for peer in peers[]: + if s.isSubscribed(peer): + foundPeers.add(peer) + + return foundPeers + +proc removePeer*(s: var FilterSubscriptions, peerId: PeerID) = ## Remove all subscriptions for a given peer - subscriptions.del(peerId) + s.peersSubscribed.del(peerId) -proc removePeers*(subscriptions: var FilterSubscriptions, peerIds: seq[PeerID]) = +proc removePeers*(s: var FilterSubscriptions, peerIds: seq[PeerID]) = ## Remove all subscriptions for a given list of peers - for peerId in peerIds: - subscriptions.removePeer(peerId) - -proc containsAny*(criteria: FilterCriteria, otherCriteria: FilterCriteria): bool = - ## Check if a given pubsub topic is contained in a set of filter criteria - ## TODO: Better way to achieve this? - for criterion in otherCriteria: - if criterion in criteria: - return true - false + s.peersSubscribed.keepItIf(key notin peerIds) + +proc cleanUp*(fs: var FilterSubscriptions) = + ## Remove all subscriptions for peers that have not been seen for a while + let now = Moment.now() + fs.peersSubscribed.keepItIf(now - val.lastSeen <= fs.subscriptionTimeout) + + var filtersToRemove: seq[FilterCriterion] = @[] + for filterCriterion, subscribedPeers in fs.subscriptions.mpairs: + subscribedPeers.keepItIf(fs.isSubscribed(it)==true) + + fs.subscriptions.keepItIf(val.len > 0) + +proc refreshSubscription*(s: var FilterSubscriptions, peerId: PeerID) = + s.peersSubscribed.withValue(peerId, data): + data.lastSeen = Moment.now() + +proc addSubscription*(s: var FilterSubscriptions, peerId: PeerID, filterCriteria: FilterCriteria): Result[void, string] = + ## Add a subscription for a given peer + var peerData: ptr PeerData + + s.peersSubscribed.withValue(peerId, data): + if data.criteriaCount + cast[uint](filterCriteria.len) > s.maxCriteriaPerPeer: + return err("peer has reached maximum number of filter criteria") + + data.lastSeen = Moment.now() + peerData = data + + do: + ## not yet subscribed + if cast[uint](s.peersSubscribed.len) >= s.maxPeers: + return err("node has reached maximum number of subscriptions") + + let newPeerData: PeerData = (lastSeen: Moment.now(), criteriaCount: 0) + peerData = addr(s.peersSubscribed.mgetOrPut(peerId, newPeerData)) + + for filterCriterion in filterCriteria: + var peersOfSub = addr(s.subscriptions.mgetOrPut(filterCriterion, SubscribedPeers())) + if peerId notin peersOfSub[]: + peersOfSub[].incl(peerId) + peerData.criteriaCount += 1 + + return ok() + +proc removeSubscription*(s: var FilterSubscriptions, + peerId: PeerID, + filterCriteria: FilterCriteria): + Result[void, string] = + ## Remove a subscription for a given peer + + s.peersSubscribed.withValue(peerId, peerData): + peerData.lastSeen = Moment.now() + for filterCriterion in filterCriteria: + s.subscriptions.withValue(filterCriterion, peers): + if peers[].missingOrexcl(peerId) == false: + peerData.criteriaCount -= 1 + + if peers[].len == 0: + s.subscriptions.del(filterCriterion) + if peerData.criteriaCount == 0: + s.peersSubscribed.del(peerId) + do: + ## Maybe let just run through and log it as a warning + return err("Peer was not subscribed to criterion") + + return ok() + + do: + return err("Peer has no subscriptions") + + From 8a9fad2905ef4b7415994ce89b2b4479bfbaf20c Mon Sep 17 00:00:00 2001 From: gabrielmer <101006718+gabrielmer@users.noreply.github.com> Date: Wed, 17 Jan 2024 09:42:22 +0100 Subject: [PATCH 191/274] fix: making filter admin data test order independent (#2355) --- tests/wakunode_rest/test_rest_admin.nim | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/tests/wakunode_rest/test_rest_admin.nim b/tests/wakunode_rest/test_rest_admin.nim index 6845759893..932dcd743e 100644 --- a/tests/wakunode_rest/test_rest_admin.nim +++ b/tests/wakunode_rest/test_rest_admin.nim @@ -107,16 +107,6 @@ suite "Waku v2 Rest API - Admin": pubsubTopicNode2 = DefaultPubsubTopic pubsubTopicNode3 = PubsubTopic("/waku/2/custom-waku/proto") - ## TODO: Note that such checks may depend heavily on the order of the returned data! - expectedFilterData2 = fmt"(peerId: ""{$peerInfo2}"", filterCriteria:" & - fmt" @[(pubsubTopic: ""{pubsubTopicNode2}"", contentTopic: ""{contentFiltersNode2[1]}""), " & - fmt"(pubsubTopic: ""{pubsubTopicNode2}"", contentTopic: ""{contentFiltersNode2[2]}""), " & - fmt"(pubsubTopic: ""{pubsubTopicNode2}"", contentTopic: ""{contentFiltersNode2[0]}"")]" - - expectedFilterData3 = fmt"(peerId: ""{$peerInfo3}"", filterCriteria:" & - fmt" @[(pubsubTopic: ""{pubsubTopicNode3}"", contentTopic: ""{contentFiltersNode3[0]}""), " & - fmt"(pubsubTopic: ""{pubsubTopicNode3}"", contentTopic: ""{contentFiltersNode3[1]}"")]" - let subscribeResponse2 = await node2.wakuFilterClient.subscribe( peerInfo1, pubsubTopicNode2, contentFiltersNode2 @@ -134,8 +124,16 @@ suite "Waku v2 Rest API - Admin": getRes.status == 200 $getRes.contentType == $MIMETYPE_JSON getRes.data.len() == 2 - ($getRes.data).contains(expectedFilterData2) - ($getRes.data).contains(expectedFilterData3) + + let + peers = @[getRes.data[0].peerId, getRes.data[1].peerId] + numCriteria = @[getRes.data[0].filterCriteria.len, getRes.data[1].filterCriteria.len] + + check: + $peerInfo2 in peers + $peerInfo3 in peers + 2 in numCriteria + 3 in numCriteria asyncTest "Get filter data - no filter subscribers": await node1.mountFilter() From f841454edc38c173e3a29efe461fac84ac8d7ec4 Mon Sep 17 00:00:00 2001 From: gabrielmer <101006718+gabrielmer@users.noreply.github.com> Date: Thu, 18 Jan 2024 13:49:13 +0100 Subject: [PATCH 192/274] chore: improve POST /relay/v1/auto/messages/{topic} error handling (#2339) --- apps/chat2/chat2.nim | 15 ++-- apps/chat2bridge/chat2bridge.nim | 3 +- examples/publisher.nim | 10 ++- tests/test_wakunode.nim | 4 +- tests/test_wakunode_lightpush.nim | 3 +- tests/waku_relay/test_wakunode_relay.nim | 31 +++++--- .../test_wakunode_rln_relay.nim | 22 +++--- tests/wakunode2/test_validators.nim | 16 ++--- tests/wakunode_jsonrpc/test_jsonrpc_relay.nim | 4 +- tests/wakunode_rest/test_rest_relay.nim | 72 ++++++++++++++++--- waku/node/waku_node.nim | 35 +++++---- waku/waku_api/rest/relay/handlers.nim | 13 ++-- 12 files changed, 163 insertions(+), 65 deletions(-) diff --git a/apps/chat2/chat2.nim b/apps/chat2/chat2.nim index 877c7044e5..fdd328f401 100644 --- a/apps/chat2/chat2.nim +++ b/apps/chat2/chat2.nim @@ -208,11 +208,16 @@ proc publish(c: Chat, line: string) = # update the last epoch c.node.wakuRlnRelay.lastEpoch = proof.epoch - if not c.node.wakuLightPush.isNil(): - # Attempt lightpush - asyncSpawn c.node.lightpushPublish(some(DefaultPubsubTopic), message) - else: - asyncSpawn c.node.publish(some(DefaultPubsubTopic), message) + try: + if not c.node.wakuLightPush.isNil(): + # Attempt lightpush + (waitFor c.node.lightpushPublish(some(DefaultPubsubTopic), message)).isOkOr: + error "failed to publish lightpush message", error = error + else: + (waitFor c.node.publish(some(DefaultPubsubTopic), message)).isOkOr: + error "failed to publish message", error = error + except CatchableError: + error "caught error publishing message: ", error = getCurrentExceptionMsg() # TODO This should read or be subscribe handler subscribe proc readAndPrint(c: Chat) {.async.} = diff --git a/apps/chat2bridge/chat2bridge.nim b/apps/chat2bridge/chat2bridge.nim index 375f6c1968..70f0f6db57 100644 --- a/apps/chat2bridge/chat2bridge.nim +++ b/apps/chat2bridge/chat2bridge.nim @@ -96,7 +96,8 @@ proc toChat2(cmb: Chat2MatterBridge, jsonNode: JsonNode) {.async.} = chat2_mb_transfers.inc(labelValues = ["mb_to_chat2"]) - await cmb.nodev2.publish(some(DefaultPubsubTopic), msg) + (await cmb.nodev2.publish(some(DefaultPubsubTopic), msg)).isOkOr: + error "failed to publish message", error = error proc toMatterbridge(cmb: Chat2MatterBridge, msg: WakuMessage) {.gcsafe, raises: [Exception].} = if cmb.seen.containsOrAdd(msg.payload.hash()): diff --git a/examples/publisher.nim b/examples/publisher.nim index 864b76f728..526340c442 100644 --- a/examples/publisher.nim +++ b/examples/publisher.nim @@ -110,8 +110,14 @@ proc setupAndPublish(rng: ref HmacDrbgContext) {.async.} = contentTopic: contentTopic, # content topic to publish to ephemeral: true, # tell store nodes to not store it timestamp: now()) # current timestamp - await node.publish(some(pubSubTopic), message) - notice "published message", text = text, timestamp = message.timestamp, psTopic = pubSubTopic, contentTopic = contentTopic + + let res = await node.publish(some(pubSubTopic), message) + + if res.isOk: + notice "published message", text = text, timestamp = message.timestamp, psTopic = pubSubTopic, contentTopic = contentTopic + else: + error "failed to publish message", error = res.error + await sleepAsync(5000) when isMainModule: diff --git a/tests/test_wakunode.nim b/tests/test_wakunode.nim index 787bca1a2b..e7a1831f32 100644 --- a/tests/test_wakunode.nim +++ b/tests/test_wakunode.nim @@ -70,7 +70,9 @@ suite "WakuNode": node2.subscribe((kind: PubsubSub, topic: pubsubTopic), some(relayHandler)) await sleepAsync(2000.millis) - await node1.publish(some(pubSubTopic), message) + var res = await node1.publish(some(pubSubTopic), message) + assert res.isOk(), $res.error + await sleepAsync(2000.millis) check: diff --git a/tests/test_wakunode_lightpush.nim b/tests/test_wakunode_lightpush.nim index 6e986fa1a1..610062a732 100644 --- a/tests/test_wakunode_lightpush.nim +++ b/tests/test_wakunode_lightpush.nim @@ -55,7 +55,8 @@ suite "WakuNode - Lightpush": await sleepAsync(100.millis) ## When - await lightNode.lightpushPublish(some(DefaultPubsubTopic), message) + let res = await lightNode.lightpushPublish(some(DefaultPubsubTopic), message) + assert res.isOk(), $res.error ## Then check await completionFutRelay.withTimeout(5.seconds) diff --git a/tests/waku_relay/test_wakunode_relay.nim b/tests/waku_relay/test_wakunode_relay.nim index 2d0cbdc775..7d35cee7a9 100644 --- a/tests/waku_relay/test_wakunode_relay.nim +++ b/tests/waku_relay/test_wakunode_relay.nim @@ -95,7 +95,8 @@ suite "WakuNode - Relay": node3.subscribe((kind: PubsubSub, topic: pubsubTopic), some(relayHandler)) await sleepAsync(500.millis) - await node1.publish(some(pubSubTopic), message) + var res = await node1.publish(some(pubSubTopic), message) + assert res.isOk(), $res.error ## Then check: @@ -176,11 +177,15 @@ suite "WakuNode - Relay": node3.subscribe((kind: PubsubSub, topic: pubsubTopic), some(relayHandler)) await sleepAsync(500.millis) - await node1.publish(some(pubSubTopic), message1) + var res = await node1.publish(some(pubSubTopic), message1) + assert res.isOk(), $res.error + await sleepAsync(500.millis) # message2 never gets relayed because of the validator - await node1.publish(some(pubSubTopic), message2) + res = await node1.publish(some(pubSubTopic), message2) + assert res.isOk(), $res.error + await sleepAsync(500.millis) check: @@ -257,7 +262,9 @@ suite "WakuNode - Relay": node1.subscribe((kind: PubsubSub, topic: pubsubTopic), some(relayHandler)) await sleepAsync(500.millis) - await node2.publish(some(pubSubTopic), message) + let res = await node2.publish(some(pubSubTopic), message) + assert res.isOk(), $res.error + await sleepAsync(500.millis) @@ -298,7 +305,9 @@ suite "WakuNode - Relay": node1.subscribe((kind: PubsubSub, topic: pubsubTopic), some(relayHandler)) await sleepAsync(500.millis) - await node2.publish(some(pubSubTopic), message) + let res = await node2.publish(some(pubSubTopic), message) + assert res.isOk(), $res.error + await sleepAsync(500.millis) @@ -343,7 +352,9 @@ suite "WakuNode - Relay": node1.subscribe((kind: PubsubSub, topic: pubsubTopic), some(relayHandler)) await sleepAsync(500.millis) - await node2.publish(some(pubSubTopic), message) + let res = await node2.publish(some(pubSubTopic), message) + assert res.isOk(), $res.error + await sleepAsync(500.millis) check: @@ -383,7 +394,9 @@ suite "WakuNode - Relay": node1.subscribe((kind: PubsubSub, topic: pubsubTopic), some(relayHandler)) await sleepAsync(500.millis) - await node2.publish(some(pubSubTopic), message) + let res = await node2.publish(some(pubSubTopic), message) + assert res.isOk(), $res.error + await sleepAsync(500.millis) check: @@ -423,7 +436,9 @@ suite "WakuNode - Relay": node1.subscribe((kind: PubsubSub, topic: pubsubTopic), some(relayHandler)) await sleepAsync(500.millis) - await node2.publish(some(pubSubTopic), message) + let res = await node2.publish(some(pubSubTopic), message) + assert res.isOk(), $res.error + await sleepAsync(500.millis) diff --git a/tests/waku_rln_relay/test_wakunode_rln_relay.nim b/tests/waku_rln_relay/test_wakunode_rln_relay.nim index 947bcebff8..4f2365315a 100644 --- a/tests/waku_rln_relay/test_wakunode_rln_relay.nim +++ b/tests/waku_rln_relay/test_wakunode_rln_relay.nim @@ -91,7 +91,7 @@ procSuite "WakuNode - RLN relay": ## node1 publishes a message with a rate limit proof, the message is then relayed to node2 which in turn ## verifies the rate limit proof of the message and relays the message to node3 ## verification at node2 occurs inside a topic validator which is installed as part of the waku-rln-relay mount proc - await node1.publish(some(DefaultPubsubTopic), message) + discard await node1.publish(some(DefaultPubsubTopic), message) await sleepAsync(2000.millis) @@ -165,8 +165,8 @@ procSuite "WakuNode - RLN relay": # publish 3 messages from node[0] (last 2 are spam, window is 10 secs) # publish 3 messages from node[1] (last 2 are spam, window is 10 secs) - for msg in messages1: await nodes[0].publish(some(pubsubTopics[0]), msg) - for msg in messages2: await nodes[1].publish(some(pubsubTopics[1]), msg) + for msg in messages1: discard await nodes[0].publish(some(pubsubTopics[0]), msg) + for msg in messages2: discard await nodes[1].publish(some(pubsubTopics[1]), msg) # wait for gossip to propagate await sleepAsync(5000.millis) @@ -266,7 +266,7 @@ procSuite "WakuNode - RLN relay": ## attempts to verify the rate limit proof and fails hence does not relay the message to node3, thus the relayHandler of node3 ## never gets called ## verification at node2 occurs inside a topic validator which is installed as part of the waku-rln-relay mount proc - await node1.publish(some(DefaultPubsubTopic), message) + discard await node1.publish(some(DefaultPubsubTopic), message) await sleepAsync(2000.millis) check: @@ -378,10 +378,10 @@ procSuite "WakuNode - RLN relay": ## node2 should detect either of wm1 or wm2 as spam and not relay it ## node2 should relay wm3 to node3 ## node2 should not relay wm4 because it has no valid rln proof - await node1.publish(some(DefaultPubsubTopic), wm1) - await node1.publish(some(DefaultPubsubTopic), wm2) - await node1.publish(some(DefaultPubsubTopic), wm3) - await node1.publish(some(DefaultPubsubTopic), wm4) + discard await node1.publish(some(DefaultPubsubTopic), wm1) + discard await node1.publish(some(DefaultPubsubTopic), wm2) + discard await node1.publish(some(DefaultPubsubTopic), wm3) + discard await node1.publish(some(DefaultPubsubTopic), wm4) await sleepAsync(2000.millis) let @@ -474,9 +474,9 @@ procSuite "WakuNode - RLN relay": node2.subscribe((kind: PubsubSub, topic: DefaultPubsubTopic), some(relayHandler)) await sleepAsync(2000.millis) - await node1.publish(some(DefaultPubsubTopic), wm1) - await node1.publish(some(DefaultPubsubTopic), wm2) - await node1.publish(some(DefaultPubsubTopic), wm3) + discard await node1.publish(some(DefaultPubsubTopic), wm1) + discard await node1.publish(some(DefaultPubsubTopic), wm2) + discard await node1.publish(some(DefaultPubsubTopic), wm3) let res1 = await completionFut1.withTimeout(10.seconds) diff --git a/tests/wakunode2/test_validators.nim b/tests/wakunode2/test_validators.nim index 17de9822ef..f040da1e2a 100644 --- a/tests/wakunode2/test_validators.nim +++ b/tests/wakunode2/test_validators.nim @@ -74,7 +74,7 @@ suite "WakuNode2 - Validators": # Include signature msg.meta = secretKey.sign(SkMessage(spamProtectedTopic.msgHash(msg))).toRaw()[0..63] - await nodes[i].publish(some(spamProtectedTopic), msg) + discard await nodes[i].publish(some(spamProtectedTopic), msg) # Wait for gossip await sleepAsync(2.seconds) @@ -146,7 +146,7 @@ suite "WakuNode2 - Validators": # Sign the message with a wrong key msg.meta = wrongSecretKey.sign(SkMessage(spamProtectedTopic.msgHash(msg))).toRaw()[0..63] - await nodes[i].publish(some(spamProtectedTopic), msg) + discard await nodes[i].publish(some(spamProtectedTopic), msg) # Each node sends 5 messages that are not signed (total = 25) for i in 0..<5: @@ -154,7 +154,7 @@ suite "WakuNode2 - Validators": let unsignedMessage = WakuMessage( payload: urandom(1*(10^3)), contentTopic: spamProtectedTopic, version: 2, timestamp: now(), ephemeral: true) - await nodes[i].publish(some(spamProtectedTopic), unsignedMessage) + discard await nodes[i].publish(some(spamProtectedTopic), unsignedMessage) # Each node sends 5 messages that dont contain timestamp (total = 25) for i in 0..<5: @@ -162,7 +162,7 @@ suite "WakuNode2 - Validators": let unsignedMessage = WakuMessage( payload: urandom(1*(10^3)), contentTopic: spamProtectedTopic, version: 2, timestamp: 0, ephemeral: true) - await nodes[i].publish(some(spamProtectedTopic), unsignedMessage) + discard await nodes[i].publish(some(spamProtectedTopic), unsignedMessage) # Each node sends 5 messages way BEFORE than the current timestmap (total = 25) for i in 0..<5: @@ -171,7 +171,7 @@ suite "WakuNode2 - Validators": let unsignedMessage = WakuMessage( payload: urandom(1*(10^3)), contentTopic: spamProtectedTopic, version: 2, timestamp: beforeTimestamp, ephemeral: true) - await nodes[i].publish(some(spamProtectedTopic), unsignedMessage) + discard await nodes[i].publish(some(spamProtectedTopic), unsignedMessage) # Each node sends 5 messages way LATER than the current timestmap (total = 25) for i in 0..<5: @@ -180,7 +180,7 @@ suite "WakuNode2 - Validators": let unsignedMessage = WakuMessage( payload: urandom(1*(10^3)), contentTopic: spamProtectedTopic, version: 2, timestamp: afterTimestamp, ephemeral: true) - await nodes[i].publish(some(spamProtectedTopic), unsignedMessage) + discard await nodes[i].publish(some(spamProtectedTopic), unsignedMessage) # Wait for gossip await sleepAsync(4.seconds) @@ -255,7 +255,7 @@ suite "WakuNode2 - Validators": let unsignedMessage = WakuMessage( payload: urandom(1*(10^3)), contentTopic: spamProtectedTopic, version: 2, timestamp: now(), ephemeral: true) - await nodes[0].publish(some(spamProtectedTopic), unsignedMessage) + discard await nodes[0].publish(some(spamProtectedTopic), unsignedMessage) # nodes[0] spams 50 wrongly signed messages (nodes[0] just knows of nodes[1]) for j in 0..<50: @@ -264,7 +264,7 @@ suite "WakuNode2 - Validators": version: 2, timestamp: now(), ephemeral: true) # Sign the message with a wrong key msg.meta = wrongSecretKey.sign(SkMessage(spamProtectedTopic.msgHash(msg))).toRaw()[0..63] - await nodes[0].publish(some(spamProtectedTopic), msg) + discard await nodes[0].publish(some(spamProtectedTopic), msg) # Wait for gossip await sleepAsync(2.seconds) diff --git a/tests/wakunode_jsonrpc/test_jsonrpc_relay.nim b/tests/wakunode_jsonrpc/test_jsonrpc_relay.nim index 902a366db0..d62589b473 100644 --- a/tests/wakunode_jsonrpc/test_jsonrpc_relay.nim +++ b/tests/wakunode_jsonrpc/test_jsonrpc_relay.nim @@ -198,7 +198,7 @@ suite "Waku v2 JSON-RPC API - Relay": ## When for msg in messages: - await srcNode.publish(some(pubSubTopic), msg) + discard await srcNode.publish(some(pubSubTopic), msg) await sleepAsync(200.millis) @@ -261,7 +261,7 @@ suite "Waku v2 JSON-RPC API - Relay": ## When for msg in messages: - await srcNode.publish(none(PubsubTopic), msg) + discard await srcNode.publish(none(PubsubTopic), msg) await sleepAsync(200.millis) diff --git a/tests/wakunode_rest/test_rest_relay.nim b/tests/wakunode_rest/test_rest_relay.nim index 7c023a3d47..c6a1267807 100644 --- a/tests/wakunode_rest/test_rest_relay.nim +++ b/tests/wakunode_rest/test_rest_relay.nim @@ -40,10 +40,12 @@ suite "Waku v2 Rest API - Relay": await node.start() await node.mountRelay() - let restPort = Port(58011) + var restPort = Port(0) let restAddress = parseIpAddress("0.0.0.0") let restServer = RestServerRef.init(restAddress, restPort).tryGet() + restPort = restServer.server.address.port # update with bound port for client use + let cache = MessageCache.init() installRelayApiHandlers(restServer.router, node, cache) @@ -88,10 +90,12 @@ suite "Waku v2 Rest API - Relay": "pubsub-topic-x", ]) - let restPort = Port(58012) + var restPort = Port(0) let restAddress = parseIpAddress("0.0.0.0") let restServer = RestServerRef.init(restAddress, restPort).tryGet() + restPort = restServer.server.address.port # update with bound port for client use + let cache = MessageCache.init() cache.pubsubSubscribe("pubsub-topic-1") cache.pubsubSubscribe("pubsub-topic-2") @@ -140,10 +144,12 @@ suite "Waku v2 Rest API - Relay": await node.start() await node.mountRelay() - let restPort = Port(58013) + var restPort = Port(0) let restAddress = parseIpAddress("0.0.0.0") let restServer = RestServerRef.init(restAddress, restPort).tryGet() + restPort = restServer.server.address.port # update with bound port for client use + let pubSubTopic = "/waku/2/default-waku/proto" var messages = @[ @@ -203,10 +209,12 @@ suite "Waku v2 Rest API - Relay": rlnRelayTreePath: genTempPath("rln_tree", "wakunode_1"))) # RPC server setup - let restPort = Port(58014) + var restPort = Port(0) let restAddress = parseIpAddress("0.0.0.0") let restServer = RestServerRef.init(restAddress, restPort).tryGet() + restPort = restServer.server.address.port # update with bound port for client use + let cache = MessageCache.init() installRelayApiHandlers(restServer.router, node, cache) @@ -243,10 +251,12 @@ suite "Waku v2 Rest API - Relay": await node.start() await node.mountRelay() - let restPort = Port(58011) + var restPort = Port(0) let restAddress = parseIpAddress("0.0.0.0") let restServer = RestServerRef.init(restAddress, restPort).tryGet() + restPort = restServer.server.address.port # update with bound port for client use + let cache = MessageCache.init() installRelayApiHandlers(restServer.router, node, cache) @@ -289,10 +299,12 @@ suite "Waku v2 Rest API - Relay": await node.start() await node.mountRelay() - let restPort = Port(58012) + var restPort = Port(0) let restAddress = parseIpAddress("0.0.0.0") let restServer = RestServerRef.init(restAddress, restPort).tryGet() + restPort = restServer.server.address.port # update with bound port for client use + let contentTopics = @[ ContentTopic("/waku/2/default-content1/proto"), ContentTopic("/waku/2/default-content2/proto"), @@ -335,10 +347,12 @@ suite "Waku v2 Rest API - Relay": await node.start() await node.mountRelay() - let restPort = Port(58013) + var restPort = Port(0) let restAddress = parseIpAddress("0.0.0.0") let restServer = RestServerRef.init(restAddress, restPort).tryGet() + restPort = restServer.server.address.port # update with bound port for client use + let contentTopic = DefaultContentTopic var messages = @[ @@ -397,10 +411,12 @@ suite "Waku v2 Rest API - Relay": rlnRelayTreePath: genTempPath("rln_tree", "wakunode_1"))) # RPC server setup - let restPort = Port(58014) + var restPort = Port(0) let restAddress = parseIpAddress("0.0.0.0") let restServer = RestServerRef.init(restAddress, restPort).tryGet() + restPort = restServer.server.address.port # update with bound port for client use + let cache = MessageCache.init() installRelayApiHandlers(restServer.router, node, cache) restServer.start() @@ -424,6 +440,46 @@ suite "Waku v2 Rest API - Relay": $response.contentType == $MIMETYPE_TEXT response.data == "OK" + await restServer.stop() + await restServer.closeWait() + await node.stop() + + asyncTest "Post a message to an invalid content topic - POST /relay/v1/auto/messages/{topic}": + ## "Relay API: publish and subscribe/unsubscribe": + # Given + let node = testWakuNode() + await node.start() + await node.mountRelay() + await node.mountRlnRelay(WakuRlnConfig(rlnRelayDynamic: false, + rlnRelayCredIndex: some(1.uint), + rlnRelayTreePath: genTempPath("rln_tree", "wakunode_1"))) + + # RPC server setup + var restPort = Port(0) + let restAddress = parseIpAddress("0.0.0.0") + let restServer = RestServerRef.init(restAddress, restPort).tryGet() + + restPort = restServer.server.address.port # update with bound port for client use + + let cache = MessageCache.init() + installRelayApiHandlers(restServer.router, node, cache) + restServer.start() + + let client = newRestHttpClient(initTAddress(restAddress, restPort)) + + # When + let response = await client.relayPostAutoMessagesV1(RelayWakuMessage( + payload: base64.encode("TEST-PAYLOAD"), + contentTopic: some("invalidContentTopic"), + timestamp: some(int64(2022)) + )) + + # Then + check: + response.status == 400 + $response.contentType == $MIMETYPE_TEXT + response.data == "Failed to publish. Autosharding error: invalid format: topic must start with slash" + await restServer.stop() await restServer.closeWait() await node.stop() \ No newline at end of file diff --git a/waku/node/waku_node.nim b/waku/node/waku_node.nim index d150d6351d..05595d76a6 100644 --- a/waku/node/waku_node.nim +++ b/waku/node/waku_node.nim @@ -316,20 +316,22 @@ proc publish*( node: WakuNode, pubsubTopicOp: Option[PubsubTopic], message: WakuMessage - ) {.async, gcsafe.} = + ) : Future[Result[void, string]] {.async, gcsafe.} = ## Publish a `WakuMessage`. Pubsub topic contains; none, a named or static shard. ## `WakuMessage` should contain a `contentTopic` field for light node functionality. ## It is also used to determine the shard. if node.wakuRelay.isNil(): - error "Invalid API call to `publish`. WakuRelay not mounted. Try `lightpush` instead." + let msg = "Invalid API call to `publish`. WakuRelay not mounted. Try `lightpush` instead." + error "publish error", msg=msg # TODO: Improve error handling - return + return err(msg) let pubsubTopic = pubsubTopicOp.valueOr: getShard(message.contentTopic).valueOr: - error "Autosharding error", error=error - return + let msg = "Autosharding error: " & error + error "publish error", msg=msg + return err(msg) #TODO instead of discard return error when 0 peers received the message discard await node.wakuRelay.publish(pubsubTopic, message) @@ -339,6 +341,8 @@ proc publish*( pubsubTopic=pubsubTopic, hash=pubsubTopic.computeMessageHash(message).to0xHex(), publishTime=getNowInNanosecondTime() + + return ok() proc startRelay*(node: WakuNode) {.async.} = ## Setup and start relay protocol @@ -942,22 +946,25 @@ proc lightpushPublish*(node: WakuNode, pubsubTopic: Option[PubsubTopic], message return await node.wakuLightpushClient.publish($pubsub, message, peer) # TODO: Move to application module (e.g., wakunode2.nim) -proc lightpushPublish*(node: WakuNode, pubsubTopic: Option[PubsubTopic], message: WakuMessage): Future[void] {.async, gcsafe, +proc lightpushPublish*(node: WakuNode, pubsubTopic: Option[PubsubTopic], message: WakuMessage): Future[WakuLightPushResult[void]] {.async, gcsafe, deprecated: "Use 'node.lightpushPublish()' instead".} = if node.wakuLightpushClient.isNil(): - error "failed to publish message", error="waku lightpush client is nil" - return + let msg = "waku lightpush client is nil" + error "failed to publish message", msg=msg + return err(msg) let peerOpt = node.peerManager.selectPeer(WakuLightPushCodec) if peerOpt.isNone(): - error "failed to publish message", error="no suitable remote peers" - return + let msg = "no suitable remote peers" + error "failed to publish message", msg=msg + return err(msg) let publishRes = await node.lightpushPublish(pubsubTopic, message, peer=peerOpt.get()) - if publishRes.isOk(): - return - - error "failed to publish message", error=publishRes.error + + if publishRes.isErr(): + error "failed to publish message", error=publishRes.error + + return publishRes ## Waku RLN Relay diff --git a/waku/waku_api/rest/relay/handlers.nim b/waku/waku_api/rest/relay/handlers.nim index 1439eb3904..d003da5d91 100644 --- a/waku/waku_api/rest/relay/handlers.nim +++ b/waku/waku_api/rest/relay/handlers.nim @@ -236,9 +236,14 @@ proc installRelayApiHandlers*(router: var RestRouter, node: WakuNode, cache: Mes # if we reach here its either a non-RLN message or a RLN message with a valid proof debug "Publishing message", contentTopic=message.contentTopic, rln=not node.wakuRlnRelay.isNil() - - if not (waitFor node.publish(none(PubSubTopic), message).withTimeout(futTimeout)): - error "Failed to publish message to topic", contentTopic=message.contentTopic - return RestApiResponse.internalServerError("Failed to publish: timedout") + + var publishFut = node.publish(none(PubSubTopic), message) + if not await publishFut.withTimeout(futTimeout): + return RestApiResponse.internalServerError("Failed to publish: timedout") + + var res = publishFut.read() + + if res.isErr(): + return RestApiResponse.badRequest("Failed to publish. " & res.error) return RestApiResponse.ok() From 7de91d92bb159fe66c00bc1a59e10e6f8d94f683 Mon Sep 17 00:00:00 2001 From: Hanno Cornelius <68783915+jm-clius@users.noreply.github.com> Date: Fri, 19 Jan 2024 13:05:06 +0200 Subject: [PATCH 193/274] fix: Fix test for filter client receiving messages after restart (#2360) --- tests/node/test_wakunode_filter.nim | 36 ++++++++++++++++------------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/tests/node/test_wakunode_filter.nim b/tests/node/test_wakunode_filter.nim index d486eb1802..0403670932 100644 --- a/tests/node/test_wakunode_filter.nim +++ b/tests/node/test_wakunode_filter.nim @@ -37,6 +37,7 @@ import suite "Waku Filter - End to End": var client {.threadvar.}: WakuNode var clientPeerId {.threadvar.}: PeerId + var clientClone {.threadvar.}: WakuNode var server {.threadvar.}: WakuNode var serverRemotePeerInfo {.threadvar.}: RemotePeerInfo var pubsubTopic {.threadvar.}: PubsubTopic @@ -60,20 +61,25 @@ suite "Waku Filter - End to End": serverKey = generateSecp256k1Key() clientKey = generateSecp256k1Key() - server = newTestWakuNode(serverKey, parseIpAddress("0.0.0.0"), Port(0)) - client = newTestWakuNode(clientKey, parseIpAddress("0.0.0.0"), Port(0)) + server = newTestWakuNode(serverKey, parseIpAddress("0.0.0.0"), Port(23450)) + client = newTestWakuNode(clientKey, parseIpAddress("0.0.0.0"), Port(23451)) + clientClone = newTestWakuNode(clientKey, parseIpAddress("0.0.0.0"), Port(23451)) # Used for testing client restarts - waitFor allFutures(server.start(), client.start()) + await allFutures(server.start(), client.start()) - waitFor server.mountFilter() - waitFor client.mountFilterClient() + await server.mountFilter() + await client.mountFilterClient() client.wakuFilterClient.registerPushHandler(messagePushHandler) serverRemotePeerInfo = server.peerInfo.toRemotePeerInfo() clientPeerId = client.peerInfo.toRemotePeerInfo().peerId + # Prepare the clone but do not start it + await clientClone.mountFilterClient() + clientClone.wakuFilterClient.registerPushHandler(messagePushHandler) + asyncTeardown: - waitFor allFutures(client.stop(), server.stop()) + await allFutures(client.stop(), clientClone.stop(), server.stop()) asyncTest "Client Node receives Push from Server Node, via Filter": # When a client node subscribes to a filter node @@ -142,8 +148,8 @@ suite "Waku Filter - End to End": serverKey = generateSecp256k1Key() server = newTestWakuNode(serverKey, parseIpAddress("0.0.0.0"), Port(0)) - waitFor server.start() - waitFor server.mountRelay() + await server.start() + await server.mountRelay() let serverRemotePeerInfo = server.peerInfo.toRemotePeerInfo() @@ -155,7 +161,7 @@ suite "Waku Filter - End to End": # Then the subscription is successful check (not subscribeResponse.isOk()) - xasyncTest "Filter Client Node can receive messages after subscribing and restarting, via Filter": + asyncTest "Filter Client Node can receive messages after subscribing and restarting, via Filter": # Given a valid filter subscription let subscribeResponse = await client.filterSubscribe( some(pubsubTopic), contentTopicSeq, serverRemotePeerInfo @@ -165,9 +171,8 @@ suite "Waku Filter - End to End": server.wakuFilter.subscriptions.subscribedPeerCount() == 1 # And the client node reboots - waitFor client.stop() - waitFor client.start() - client.mountFilterClient() + await client.stop() + await clientClone.start() # Mimic restart by starting the clone # When a message is sent to the subscribed content topic, via Filter; without refreshing the subscription let msg = fakeWakuMessage(contentTopic=contentTopic) @@ -192,9 +197,8 @@ suite "Waku Filter - End to End": server.wakuFilter.subscriptions.subscribedPeerCount() == 1 # And the client node reboots - waitFor client.stop() - waitFor client.start() - discard client.mountFilterClient() + await client.stop() + await clientClone.start() # Mimic restart by starting the clone # When a message is sent to the subscribed content topic, via Relay let msg = fakeWakuMessage(contentTopic=contentTopic) @@ -204,7 +208,7 @@ suite "Waku Filter - End to End": check (not await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT)) # Given the client refreshes the subscription - let subscribeResponse2 = await client.filterSubscribe( + let subscribeResponse2 = await clientClone.filterSubscribe( some(pubsubTopic), contentTopicSeq, serverRemotePeerInfo ) check: From efdc5244f6955a4d3489a494e9210a23cfe5641f Mon Sep 17 00:00:00 2001 From: Aaryamann Challani <43716372+rymnc@users.noreply.github.com> Date: Tue, 23 Jan 2024 23:22:45 +0530 Subject: [PATCH 194/274] chore(rln-relay): remove websocket from OnchainGroupManager (#2364) * chore(rln-relay): remove websocket from OnchainGroupManager * fix: swap ws for http --- apps/chat2/config_chat2.nim | 4 +- apps/wakunode2/external_config.nim | 4 +- .../test_rln_group_manager_onchain.nim | 19 ++--- waku/waku_rln_relay/constants.nim | 2 +- .../group_manager/on_chain/group_manager.nim | 82 +++++++++++++------ .../group_manager/on_chain/retry_wrapper.nim | 5 +- 6 files changed, 73 insertions(+), 43 deletions(-) diff --git a/apps/chat2/config_chat2.nim b/apps/chat2/config_chat2.nim index 2865a19242..b513ecb81c 100644 --- a/apps/chat2/config_chat2.nim +++ b/apps/chat2/config_chat2.nim @@ -252,8 +252,8 @@ type name: "rln-relay-id-commitment-key" }: string rlnRelayEthClientAddress* {. - desc: "WebSocket address of an Ethereum testnet client e.g., ws://localhost:8540/", - defaultValue: "ws://localhost:8540/" + desc: "WebSocket address of an Ethereum testnet client e.g., http://localhost:8540/", + defaultValue: "http://localhost:8540/" name: "rln-relay-eth-client-address" }: string rlnRelayEthContractAddress* {. diff --git a/apps/wakunode2/external_config.nim b/apps/wakunode2/external_config.nim index 22235af69c..6ebb48a01d 100644 --- a/apps/wakunode2/external_config.nim +++ b/apps/wakunode2/external_config.nim @@ -61,8 +61,8 @@ type name: "rln-relay-cred-path" }: string rlnRelayEthClientAddress* {. - desc: "WebSocket address of an Ethereum testnet client e.g., ws://localhost:8540/", - defaultValue: "ws://localhost:8540/", + desc: "WebSocket address of an Ethereum testnet client e.g., http://localhost:8540/", + defaultValue: "http://localhost:8540/", name: "rln-relay-eth-client-address" }: string rlnRelayEthContractAddress* {. diff --git a/tests/waku_rln_relay/test_rln_group_manager_onchain.nim b/tests/waku_rln_relay/test_rln_group_manager_onchain.nim index fd697cd3ad..2dc70277cf 100644 --- a/tests/waku_rln_relay/test_rln_group_manager_onchain.nim +++ b/tests/waku_rln_relay/test_rln_group_manager_onchain.nim @@ -232,9 +232,9 @@ suite "Onchain group manager": try: await manager.startGroupSync() - except ValueError: + except CatchableError: assert true - except Exception, CatchableError: + except Exception: assert false, "exception raised when calling startGroupSync: " & getCurrentExceptionMsg() await manager.stop() @@ -330,9 +330,9 @@ suite "Onchain group manager": try: await manager.register(dummyCommitment) - except ValueError: + except CatchableError: assert true - except Exception, CatchableError: + except Exception: assert false, "exception raised: " & getCurrentExceptionMsg() await manager.stop() @@ -399,9 +399,9 @@ suite "Onchain group manager": try: await manager.withdraw(idSecretHash) - except ValueError: + except CatchableError: assert true - except Exception, CatchableError: + except Exception: assert false, "exception raised: " & getCurrentExceptionMsg() await manager.stop() @@ -627,7 +627,7 @@ suite "Onchain group manager": await manager.stop() asyncTest "isReady should return false if ethRpc is none": - var manager = await setup() + let manager = await setup() await manager.init() manager.ethRpc = none(Web3) @@ -644,7 +644,7 @@ suite "Onchain group manager": await manager.stop() asyncTest "isReady should return false if lastSeenBlockHead > lastProcessed": - var manager = await setup() + let manager = await setup() await manager.init() var isReady = true @@ -659,14 +659,13 @@ suite "Onchain group manager": await manager.stop() asyncTest "isReady should return true if ethRpc is ready": - var manager = await setup() + let manager = await setup() await manager.init() # node can only be ready after group sync is done try: await manager.startGroupSync() except Exception, CatchableError: assert false, "exception raised when calling startGroupSync: " & getCurrentExceptionMsg() - var isReady = false try: isReady = await manager.isReady() diff --git a/waku/waku_rln_relay/constants.nim b/waku/waku_rln_relay/constants.nim index 8994c6df47..81cfe94490 100644 --- a/waku/waku_rln_relay/constants.nim +++ b/waku/waku_rln_relay/constants.nim @@ -18,7 +18,7 @@ const MembershipFee* = 1000000000000000.u256 # the current implementation of the rln lib supports a circuit for Merkle tree with depth 20 MerkleTreeDepth* = 20 - EthClient* = "ws://127.0.0.1:8540" + EthClient* = "http://127.0.0.1:8540" const # the size of poseidon hash output in bits diff --git a/waku/waku_rln_relay/group_manager/on_chain/group_manager.nim b/waku/waku_rln_relay/group_manager/on_chain/group_manager.nim index 67c9c61876..53059251da 100644 --- a/waku/waku_rln_relay/group_manager/on_chain/group_manager.nim +++ b/waku/waku_rln_relay/group_manager/on_chain/group_manager.nim @@ -74,13 +74,17 @@ type # in event of a reorg. we store 5 in the buffer. Maybe need to revisit this, # because the average reorg depth is 1 to 2 blocks. validRootBuffer*: Deque[MerkleNode] + # interval loop to shut down gracefully + blockFetchingActive*: bool const DefaultKeyStorePath* = "rlnKeystore.json" const DefaultKeyStorePassword* = "password" +const DefaultBlockPollRate* = 6.seconds + template initializedGuard(g: OnchainGroupManager): untyped = if not g.initialized: - raise newException(ValueError, "OnchainGroupManager is not initialized") + raise newException(CatchableError, "OnchainGroupManager is not initialized") proc setMetadata*(g: OnchainGroupManager): RlnRelayResult[void] = @@ -316,12 +320,15 @@ proc handleRemovedEvents(g: OnchainGroupManager, blockTable: BlockTable): proc getAndHandleEvents(g: OnchainGroupManager, fromBlock: BlockNumber, - toBlock: BlockNumber): Future[void] {.async: (raises: [Exception]).} = + toBlock: BlockNumber): Future[bool] {.async: (raises: [Exception]).} = initializedGuard(g) - let blockTable = await g.getBlockTable(fromBlock, toBlock) - await g.handleEvents(blockTable) - await g.handleRemovedEvents(blockTable) + try: + await g.handleEvents(blockTable) + await g.handleRemovedEvents(blockTable) + except CatchableError: + error "failed to handle events", error=getCurrentExceptionMsg() + raise newException(ValueError, "failed to handle events") g.latestProcessedBlock = toBlock let metadataSetRes = g.setMetadata() @@ -330,32 +337,49 @@ proc getAndHandleEvents(g: OnchainGroupManager, warn "failed to persist rln metadata", error=metadataSetRes.error() else: trace "rln metadata persisted", blockNumber = g.latestProcessedBlock + + return true + +proc runInInterval(g: OnchainGroupManager, cb: proc, interval: Duration): void = + g.blockFetchingActive = false -proc getNewHeadCallback(g: OnchainGroupManager): BlockHeaderHandler = - proc newHeadCallback(blockheader: BlockHeader) {.gcsafe.} = - let latestBlock = BlockNumber(blockheader.number) - trace "block received", blockNumber = latestBlock - # get logs from the last block - try: - # inc by 1 to prevent double processing - let fromBlock = g.latestProcessedBlock + 1 - asyncSpawn g.getAndHandleEvents(fromBlock, latestBlock) - except CatchableError: - warn "failed to handle log: ", error=getCurrentExceptionMsg() - return newHeadCallback - -proc newHeadErrCallback(error: CatchableError) = - warn "failed to get new head", error=error.msg + proc runIntervalLoop() {.async, gcsafe.} = + g.blockFetchingActive = true + + while g.blockFetchingActive: + var retCb: bool + retryWrapper(retCb, RetryStrategy.new(), "Failed to run the interval loop"): + await cb() + await sleepAsync(interval) + + asyncSpawn runIntervalLoop() + + +proc getNewBlockCallback(g: OnchainGroupManager): proc = + let ethRpc = g.ethRpc.get() + proc wrappedCb(): Future[bool] {.async, gcsafe.} = + var latestBlock: BlockNumber + retryWrapper(latestBlock, RetryStrategy.new(), "Failed to get the latest block number"): + cast[BlockNumber](await ethRpc.provider.eth_blockNumber()) + + if latestBlock <= g.latestProcessedBlock: + return + # get logs from the last block + # inc by 1 to prevent double processing + let fromBlock = g.latestProcessedBlock + 1 + var handleBlockRes: bool + retryWrapper(handleBlockRes, RetryStrategy.new(), "Failed to handle new block"): + await g.getAndHandleEvents(fromBlock, latestBlock) + return true + return wrappedCb proc startListeningToEvents(g: OnchainGroupManager): Future[void] {.async: (raises: [Exception]).} = initializedGuard(g) let ethRpc = g.ethRpc.get() - let newHeadCallback = g.getNewHeadCallback() - var blockHeaderSub: Subscription - retryWrapper(blockHeaderSub, RetryStrategy.new(), "Failed to subscribe to block headers"): - await ethRpc.subscribeForBlockHeaders(newHeadCallback, newHeadErrCallback) + let newBlockCallback = g.getNewBlockCallback() + g.runInInterval(newBlockCallback, DefaultBlockPollRate) proc startOnchainSync(g: OnchainGroupManager): Future[void] {.async: (raises: [Exception]).} = @@ -385,7 +409,9 @@ proc startOnchainSync(g: OnchainGroupManager): let toBlock = min(fromBlock + BlockNumber(blockChunkSize), currentLatestBlock) debug "fetching events", fromBlock = fromBlock, toBlock = toBlock - await g.getAndHandleEvents(fromBlock, toBlock) + var handleBlockRes: bool + retryWrapper(handleBlockRes, RetryStrategy.new(), "Failed to handle old blocks"): + await g.getAndHandleEvents(fromBlock, toBlock) fromBlock = toBlock + 1 except CatchableError: @@ -523,13 +549,15 @@ method init*(g: OnchainGroupManager): Future[void] {.async.} = error "failed to restart group sync", error = getCurrentExceptionMsg() ethRpc.ondisconnect = proc() = - asyncCheck onDisconnect() + asyncSpawn onDisconnect() waku_rln_number_registered_memberships.set(int64(g.rlnInstance.leavesSet())) g.initialized = true -method stop*(g: OnchainGroupManager): Future[void] {.async.} = +method stop*(g: OnchainGroupManager): Future[void] {.async,gcsafe.} = + g.blockFetchingActive = false + if g.ethRpc.isSome(): g.ethRpc.get().ondisconnect = nil await g.ethRpc.get().close() diff --git a/waku/waku_rln_relay/group_manager/on_chain/retry_wrapper.nim b/waku/waku_rln_relay/group_manager/on_chain/retry_wrapper.nim index f4daa5ff2a..d0a621dc50 100644 --- a/waku/waku_rln_relay/group_manager/on_chain/retry_wrapper.nim +++ b/waku/waku_rln_relay/group_manager/on_chain/retry_wrapper.nim @@ -21,12 +21,15 @@ template retryWrapper*(res: auto, body: untyped): auto = var retryCount = retryStrategy.retryCount var shouldRetry = retryStrategy.shouldRetry + var exceptionMessage = "" + while shouldRetry and retryCount > 0: try: res = body shouldRetry = false except: retryCount -= 1 + exceptionMessage = getCurrentExceptionMsg() await sleepAsync(retryStrategy.retryDelay) if shouldRetry: - raise newException(CatchableError, errStr & ": " & $getCurrentExceptionMsg()) + raise newException(CatchableError, errStr & ": " & exceptionMessage) From 42204115c71896d9b8d6fe10e8de775ed2aa7394 Mon Sep 17 00:00:00 2001 From: Prem Chaitanya Prathi Date: Wed, 24 Jan 2024 19:20:21 +0530 Subject: [PATCH 195/274] chore: log messageHash for lightpush request that helps in debugging (#2366) --- waku/waku_lightpush/protocol.nim | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/waku/waku_lightpush/protocol.nim b/waku/waku_lightpush/protocol.nim index 9c59dd2b80..fb33957b76 100644 --- a/waku/waku_lightpush/protocol.nim +++ b/waku/waku_lightpush/protocol.nim @@ -6,6 +6,7 @@ else: import std/options, stew/results, + stew/byteutils, chronicles, chronos, metrics, @@ -57,7 +58,7 @@ proc handleRequest*(wl: WakuLightPush, peerId: PeerId, buffer: seq[byte]): Futur pubSubTopic = request.get().pubSubTopic message = request.get().message waku_lightpush_messages.inc(labelValues = ["PushRequest"]) - debug "push request", peerId=peerId, requestId=requestId, pubsubTopic=pubsubTopic + debug "push request", peerId=peerId, requestId=requestId, pubsubTopic=pubsubTopic, hash=pubsubTopic.computeMessageHash(message).to0xHex() let handleRes = await wl.pushHandler(peerId, pubsubTopic, message) isSuccess = handleRes.isOk() From 025c6ec92aa6dc07d461b6a9bbb69a5647191d6d Mon Sep 17 00:00:00 2001 From: gabrielmer <101006718+gabrielmer@users.noreply.github.com> Date: Thu, 25 Jan 2024 16:03:48 +0100 Subject: [PATCH 196/274] chore: changing digest and hash log format from bytes to hex (#2363) --- waku/waku_archive/archive.nim | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/waku/waku_archive/archive.nim b/waku/waku_archive/archive.nim index 0e16b1d3cf..1b575862f7 100644 --- a/waku/waku_archive/archive.nim +++ b/waku/waku_archive/archive.nim @@ -5,7 +5,7 @@ else: import std/[tables, times, sequtils, options, algorithm, strutils], - stew/results, + stew/[results, byteutils], chronicles, chronos, regex, @@ -108,10 +108,12 @@ proc handleMessage*(w: WakuArchive, let msgDigest = computeDigest(msg) msgHash = computeMessageHash(pubsubTopic, msg) + msgDigestHex = toHex(msgDigest.data) + msgHashHex = toHex(msgHash) msgReceivedTime = if msg.timestamp > 0: msg.timestamp else: getNanosecondTime(getTime().toUnixFloat()) - trace "handling message", pubsubTopic=pubsubTopic, contentTopic=msg.contentTopic, timestamp=msg.timestamp, digest=msgDigest, messageHash=msgHash + trace "handling message", pubsubTopic=pubsubTopic, contentTopic=msg.contentTopic, timestamp=msg.timestamp, digest=msgDigestHex, messageHash=msgHashHex let putRes = await w.driver.put(pubsubTopic, msg, msgDigest, msgHash, msgReceivedTime) if putRes.isErr(): From 4f06dcffce70eced169ce074e9418bd9776fb2ec Mon Sep 17 00:00:00 2001 From: gabrielmer <101006718+gabrielmer@users.noreply.github.com> Date: Fri, 26 Jan 2024 11:00:03 +0100 Subject: [PATCH 197/274] chore: adding nwaku compose image update to release process (#2370) --- docs/contributors/release-process.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/contributors/release-process.md b/docs/contributors/release-process.md index 7b14d8ae57..6bcdac623a 100644 --- a/docs/contributors/release-process.md +++ b/docs/contributors/release-process.md @@ -78,7 +78,8 @@ Ensure all items in this list are ticked: > - `IMAGE_NAME`: `wakuorg/nwaku` > - `NIMFLAGS`: `--colors:off -d:disableMarchNative -d:chronicles_colors:none -d:postgres` > - `GIT_REF` the release tag (e.g. `v0.16.0`) -3. Deploy the release to appropriate fleets: +3. Update the default nwaku image in [nwaku-compose](https://github.com/waku-org/nwaku-compose/blob/master/docker-compose.yml) +4. Deploy the release to appropriate fleets: - Inform clients > **NOTE:** known clients are currently using some version of js-waku, go-waku, nwaku or waku-rs. > Clients are reachable via the corresponding channels on the Vac Discord server. From bb58a63aa16ebd50ee243e17b58b81500da554e1 Mon Sep 17 00:00:00 2001 From: gabrielmer <101006718+gabrielmer@users.noreply.github.com> Date: Mon, 29 Jan 2024 16:11:26 +0100 Subject: [PATCH 198/274] fix: adding rln validator as default (#2367) --- waku/node/waku_node.nim | 8 ++++---- waku/waku_relay/protocol.nim | 11 +++++++++++ 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/waku/node/waku_node.nim b/waku/node/waku_node.nim index 05595d76a6..c3bad5ee8c 100644 --- a/waku/node/waku_node.nim +++ b/waku/node/waku_node.nim @@ -984,10 +984,10 @@ proc mountRlnRelay*(node: WakuNode, let rlnRelay = rlnRelayRes.get() let validator = generateRlnValidator(rlnRelay, spamHandler) - # register rln validator for all subscribed relay pubsub topics - for pubsubTopic in node.wakuRelay.subscribedTopics: - debug "Registering RLN validator for topic", pubsubTopic=pubsubTopic - node.wakuRelay.addValidator(pubsubTopic, validator) + # register rln validator as default validator + debug "Registering RLN validator" + node.wakuRelay.addDefaultValidator(validator) + node.wakuRlnRelay = rlnRelay ## Waku peer-exchange diff --git a/waku/waku_relay/protocol.nim b/waku/waku_relay/protocol.nim index 17dee3af1e..11176d17ab 100644 --- a/waku/waku_relay/protocol.nim +++ b/waku/waku_relay/protocol.nim @@ -130,6 +130,8 @@ type # a map that stores whether the ordered validator has been inserted # for a given PubsubTopic validatorInserted: Table[PubsubTopic, bool] + # seq of validators that are called for every pubsub topic + wakuDefaultValidators: seq[WakuValidatorHandler] proc initProtocolHandler(w: WakuRelay) = proc handler(conn: Connection, proto: string) {.async.} = @@ -183,6 +185,10 @@ proc addValidator*(w: WakuRelay, for t in topic: w.wakuValidators.mgetOrPut(t, @[]).add(handler) +proc addDefaultValidator*(w: WakuRelay, + handler: WakuValidatorHandler) {.gcsafe.} = + w.wakuDefaultValidators.add(handler) + method start*(w: WakuRelay) {.async.} = debug "start" await procCall GossipSub(w).start() @@ -210,6 +216,11 @@ proc generateOrderedValidator*(w: WakuRelay): auto {.gcsafe.} = let msg = msgRes.get() # now sequentially validate the message + for validator in w.wakuDefaultValidators: + let validatorRes = await validator(pubsubTopic, msg) + if validatorRes != ValidationResult.Accept: + return validatorRes + if w.wakuValidators.hasKey(pubsubTopic): for validator in w.wakuValidators[pubsubTopic]: let validatorRes = await validator(pubsubTopic, msg) From c1121dd1db27344ad38d6ba85c072f0e75eb4e8e Mon Sep 17 00:00:00 2001 From: Ivan FB <128452529+Ivansete-status@users.noreply.github.com> Date: Tue, 30 Jan 2024 09:40:30 +0100 Subject: [PATCH 199/274] docs: Add check spell allowed words (#2383) * new docs/benchmarks/cspell.json: add cspell.json to explicitly accept words * docs/benchmarks/postgres-adoption.md: change test-waku-queryc078075 to test-waku-query-c078075 --- docs/benchmarks/cspell.json | 20 ++++++++++++++++++++ docs/benchmarks/postgres-adoption.md | 4 ++-- 2 files changed, 22 insertions(+), 2 deletions(-) create mode 100644 docs/benchmarks/cspell.json diff --git a/docs/benchmarks/cspell.json b/docs/benchmarks/cspell.json new file mode 100644 index 0000000000..8227630b46 --- /dev/null +++ b/docs/benchmarks/cspell.json @@ -0,0 +1,20 @@ +{ "words": + [ + "pubsubtopic", + "jmeter", + "analyzed", + "queryc", + "wakudev", + "statusim", + "queryc", + "wakudev", + "statusim", + "chronos", + "libpqis", + "Conn", + "messageindex", + "storedat", + "pubsubtopic", + "wakudev" + ] +} diff --git a/docs/benchmarks/postgres-adoption.md b/docs/benchmarks/postgres-adoption.md index 80e172b3d3..5c6147d0dc 100644 --- a/docs/benchmarks/postgres-adoption.md +++ b/docs/benchmarks/postgres-adoption.md @@ -109,7 +109,7 @@ Notice that the two `nwaku` nodes run the very same version, which is compiled l #### Comparing archive SQLite & Postgres performance in [nwaku-b6dd6899](https://github.com/waku-org/nwaku/tree/b6dd6899030ee628813dfd60ad1ad024345e7b41) -The next results were obtained by running the docker-compose-manual-binaries.yml from [test-waku-queryc078075](https://github.com/waku-org/test-waku-query/tree/c07807597faa781ae6c8c32eefdf48ecac03a7ba) in the sandbox machine (metal-01.he-eu-hel1.wakudev.misc.statusim.net.) +The next results were obtained by running the docker-compose-manual-binaries.yml from [test-waku-query-c078075](https://github.com/waku-org/test-waku-query/tree/c07807597faa781ae6c8c32eefdf48ecac03a7ba) in the sandbox machine (metal-01.he-eu-hel1.wakudev.misc.statusim.net.) **Scenario 1** @@ -155,7 +155,7 @@ In this case, the performance is similar regarding the timings. The store rate i This nwaku commit is after a few **Postgres** optimizations were applied. -The next results were obtained by running the docker-compose-manual-binaries.yml from [test-waku-queryc078075](https://github.com/waku-org/test-waku-query/tree/c07807597faa781ae6c8c32eefdf48ecac03a7ba) in the sandbox machine (metal-01.he-eu-hel1.wakudev.misc.statusim.net.) +The next results were obtained by running the docker-compose-manual-binaries.yml from [test-waku-query-c078075](https://github.com/waku-org/test-waku-query/tree/c07807597faa781ae6c8c32eefdf48ecac03a7ba) in the sandbox machine (metal-01.he-eu-hel1.wakudev.misc.statusim.net.) **Scenario 1** From 573788739bb34d0690b4c21c5811208045175f5d Mon Sep 17 00:00:00 2001 From: Roman Zajic Date: Tue, 30 Jan 2024 19:55:26 +0800 Subject: [PATCH 200/274] chore: add coverage target to Makefile (#2382) --- Makefile | 6 +++++- scripts/run_cov.sh | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index dfc0b6f439..520d720ea5 100644 --- a/Makefile +++ b/Makefile @@ -206,13 +206,17 @@ networkmonitor: | build deps librln ################### ## Documentation ## ################### -.PHONY: docs +.PHONY: docs coverage # TODO: Remove unused target docs: | build deps echo -e $(BUILD_MSG) "build/$@" && \ $(ENV_SCRIPT) nim doc --run --index:on --project --out:.gh-pages waku/waku.nim waku.nims +coverage: + echo -e $(BUILD_MSG) "build/$@" && \ + $(ENV_SCRIPT) ./scripts/run_cov.sh -y + ##################### ## Container image ## diff --git a/scripts/run_cov.sh b/scripts/run_cov.sh index 0c496c7142..a95739f4e5 100755 --- a/scripts/run_cov.sh +++ b/scripts/run_cov.sh @@ -22,7 +22,7 @@ SCRIPT_PATH=$(dirname "$(realpath -s "$0")") REPO_ROOT=$(dirname $SCRIPT_PATH) generated_not_to_break_here="$REPO_ROOT/generated_not_to_break_here" -if [ -f $generated_not_to_break_here ] +if [ "$1" != "-y" ] && [ -f "$generated_not_to_break_here" ] then echo "The file '$generated_not_to_break_here' already exists. Do you want to continue? (y/n)" read -r response From e04e35e2291a8318b74484b6db827e1e09cf29f1 Mon Sep 17 00:00:00 2001 From: Simon-Pierre Vivier Date: Tue, 30 Jan 2024 07:15:23 -0500 Subject: [PATCH 201/274] chore: handle errors w.r.t. configured cluster-id and pubsub topics (#2368) --- apps/wakunode2/app.nim | 30 ++++++------------------------ waku/waku_enr/sharding.nim | 8 ++++++++ 2 files changed, 14 insertions(+), 24 deletions(-) diff --git a/apps/wakunode2/app.nim b/apps/wakunode2/app.nim index 0863eefe63..be9a8af35a 100644 --- a/apps/wakunode2/app.nim +++ b/apps/wakunode2/app.nim @@ -49,7 +49,7 @@ import ../../waku/waku_api/jsonrpc/store/handlers as rpc_store_api, ../../waku/waku_archive, ../../waku/waku_dnsdisc, - ../../waku/waku_enr, + ../../waku/waku_enr/sharding, ../../waku/waku_discv5, ../../waku/waku_peer_exchange, ../../waku/waku_rln_relay, @@ -128,20 +128,9 @@ proc init*(T: type App, rng: ref HmacDrbgContext, conf: WakuNodeConf): T = quit(QuitFailure) else: recordRes.get() - # Check the ENR sharding info for matching config cluster id - if conf.clusterId != 0: - let res = record.toTyped() - if res.isErr(): - error "ENR setup failed", error = $res.get() - quit(QuitFailure) - - let relayShard = res.get().relaySharding().valueOr: - error "no sharding info" - quit(QuitFailure) - - if conf.clusterId != relayShard.clusterId: - error "cluster id mismatch" - quit(QuitFailure) + if isClusterMismatched(record, conf.clusterId): + error "cluster id mismatch configured shards" + quit(QuitFailure) App( version: git_version, @@ -368,15 +357,8 @@ proc updateEnr(app: var App): AppResult[void] = let record = enrConfiguration(app.conf, app.netConf, app.key).valueOr: return err("ENR setup failed: " & error) - if app.conf.clusterId != 0: - let tRecord = record.toTyped().valueOr: - return err("ENR setup failed: " & $error) - - let relayShard = tRecord.relaySharding().valueOr: - return err("ENR setup failed: no sharding info") - - if app.conf.clusterId != relayShard.clusterId: - return err("ENR setup failed: cluster id mismatch") + if isClusterMismatched(record, app.conf.clusterId): + return err("cluster id mismatch configured shards") app.record = record app.node.enr = record diff --git a/waku/waku_enr/sharding.nim b/waku/waku_enr/sharding.nim index 7b5c9f6a8a..07f78bb5b0 100644 --- a/waku/waku_enr/sharding.nim +++ b/waku/waku_enr/sharding.nim @@ -254,3 +254,11 @@ proc containsShard*(r: Record, topic: PubsubTopic|string): bool = return false containsShard(r, parseRes.value) + +proc isClusterMismatched*(record: Record, clusterId: uint32): bool = + ## Check the ENR sharding info for matching cluster id + if (let typedRecord = record.toTyped(); typedRecord.isOk()): + if (let relayShard = typedRecord.get().relaySharding(); relayShard.isSome()): + return relayShard.get().clusterId != clusterId + + return false \ No newline at end of file From edca1df1a864ff2a7f315de0d31b133a473a94ad Mon Sep 17 00:00:00 2001 From: Simon-Pierre Vivier Date: Tue, 30 Jan 2024 07:28:21 -0500 Subject: [PATCH 202/274] feat: shard aware relay peer management (#2332) note that this feature is behind a config flag. `--relay-shard-manager` --- apps/chat2/chat2.nim | 6 +- apps/wakunode2/app.nim | 6 +- apps/wakunode2/external_config.nim | 5 + tests/test_peer_manager.nim | 206 ++++++++++-- tests/test_waku_lightpush.nim | 1 + tests/test_wakunode_lightpush.nim | 8 +- tests/testlib/wakunode.nim | 16 +- tests/wakunode_rest/test_rest_lightpush.nim | 3 +- waku/node/builder.nim | 6 +- waku/node/peer_manager/peer_manager.nim | 347 +++++++++++++------- waku/node/peer_manager/waku_peer_store.nim | 21 +- waku/node/waku_node.nim | 3 +- waku/waku_api/rest/admin/handlers.nim | 2 +- waku/waku_api/rest/lightpush/handlers.nim | 4 +- waku/waku_core/peers.nim | 15 +- waku/waku_lightpush/client.nim | 2 +- waku/waku_lightpush/common.nim | 21 ++ waku/waku_lightpush/protocol.nim | 17 +- waku/waku_metadata/protocol.nim | 2 +- 19 files changed, 493 insertions(+), 198 deletions(-) create mode 100644 waku/waku_lightpush/common.nim diff --git a/apps/chat2/chat2.nim b/apps/chat2/chat2.nim index fdd328f401..ec320ffb83 100644 --- a/apps/chat2/chat2.nim +++ b/apps/chat2/chat2.nim @@ -9,10 +9,9 @@ when (NimMajor, NimMinor) < (1, 4): else: {.push raises: [].} -import std/[strformat, strutils, times, json, options, random] +import std/[strformat, strutils, times, options, random] import confutils, chronicles, chronos, stew/shims/net as stewNet, eth/keys, bearssl, stew/[byteutils, results], - nimcrypto/pbkdf2, metrics, metrics/chronos_httpserver import libp2p/[switch, # manage transports, a single entry point for dialing and listening @@ -22,11 +21,10 @@ import libp2p/[switch, # manage transports, a single entry poi peerinfo, # manage the information of a peer, such as peer ID and public / private key peerid, # Implement how peers interact protobuf/minprotobuf, # message serialisation/deserialisation from and to protobufs - protocols/secure/secio, # define the protocol of secure input / output, allows encrypted communication that uses public keys to validate signed messages instead of a certificate authority like in TLS nameresolving/dnsresolver]# define DNS resolution import ../../waku/waku_core, - ../../waku/waku_lightpush, + ../../waku/waku_lightpush/common, ../../waku/waku_lightpush/rpc, ../../waku/waku_filter, ../../waku/waku_enr, diff --git a/apps/wakunode2/app.nim b/apps/wakunode2/app.nim index be9a8af35a..f9dedaebe9 100644 --- a/apps/wakunode2/app.nim +++ b/apps/wakunode2/app.nim @@ -54,7 +54,7 @@ import ../../waku/waku_peer_exchange, ../../waku/waku_rln_relay, ../../waku/waku_store, - ../../waku/waku_lightpush, + ../../waku/waku_lightpush/common, ../../waku/waku_filter, ../../waku/waku_filter_v2, ./wakunode2_validator_signed, @@ -294,7 +294,9 @@ proc initNode(conf: WakuNodeConf, agentString = some(conf.agentString) ) builder.withColocationLimit(conf.colocationLimit) - builder.withPeerManagerConfig(maxRelayPeers = conf.maxRelayPeers) + builder.withPeerManagerConfig( + maxRelayPeers = conf.maxRelayPeers, + shardAware = conf.relayShardedPeerManagement,) node = ? builder.build().mapErr(proc (err: string): string = "failed to create waku node instance: " & err) diff --git a/apps/wakunode2/external_config.nim b/apps/wakunode2/external_config.nim index 6ebb48a01d..b611e3abb3 100644 --- a/apps/wakunode2/external_config.nim +++ b/apps/wakunode2/external_config.nim @@ -199,6 +199,11 @@ type defaultValue: false name: "relay-peer-exchange" }: bool + relayShardedPeerManagement* {. + desc: "Enable experimental shard aware peer manager for relay protocol: true|false", + defaultValue: false + name: "relay-shard-manager" }: bool + rlnRelay* {. desc: "Enable spam protection through rln-relay: true|false", defaultValue: false diff --git a/tests/test_peer_manager.nim b/tests/test_peer_manager.nim index 25f4a9e77e..8de5c696fd 100644 --- a/tests/test_peer_manager.nim +++ b/tests/test_peer_manager.nim @@ -1,7 +1,7 @@ {.used.} import - std/[options, sequtils, times], + std/[options, sequtils, times, sugar], stew/shims/net as stewNet, testutils/unittests, chronos, @@ -21,10 +21,12 @@ import ../../waku/node/peer_manager/peer_manager, ../../waku/node/peer_manager/peer_store/waku_peer_storage, ../../waku/waku_node, - ../../waku/waku_relay, - ../../waku/waku_store, - ../../waku/waku_filter, - ../../waku/waku_lightpush, + ../../waku/waku_core, + ../../waku/waku_enr/capabilities, + ../../waku/waku_relay/protocol, + ../../waku/waku_store/common, + ../../waku/waku_filter/protocol, + ../../waku/waku_lightpush/common, ../../waku/waku_peer_exchange, ../../waku/waku_metadata, ./testlib/common, @@ -129,7 +131,6 @@ procSuite "Peer Manager": await node.stop() - asyncTest "Peer manager keeps track of connections": # Create 2 nodes let nodes = toSeq(0..<2).mapIt(newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0))) @@ -226,18 +227,34 @@ procSuite "Peer Manager": let database = SqliteDatabase.new(":memory:")[] storage = WakuPeerStorage.new(database)[] - node1 = newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0), peerStorage = storage) - node2 = newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0)) - peerInfo2 = node2.switch.peerInfo + node1 = newTestWakuNode( + generateSecp256k1Key(), + ValidIpAddress.init("127.0.0.1"), + Port(44048), + peerStorage = storage + ) + node2 = newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("127.0.0.1"), Port(34023)) + + node1.mountMetadata(0).expect("Mounted Waku Metadata") + node2.mountMetadata(0).expect("Mounted Waku Metadata") await node1.start() await node2.start() await node1.mountRelay() await node2.mountRelay() + + let peerInfo2 = node2.switch.peerInfo + var remotePeerInfo2 = peerInfo2.toRemotePeerInfo() + remotePeerInfo2.enr = some(node2.enr) - require: - (await node1.peerManager.connectRelay(peerInfo2.toRemotePeerInfo())) == true + let is12Connected = await node1.peerManager.connectRelay(remotePeerInfo2) + assert is12Connected == true, "Node 1 and 2 not connected" + + check: + node1.peerManager.peerStore[AddressBook][remotePeerInfo2.peerId] == remotePeerInfo2.addrs + + # wait for the peer store update await sleepAsync(chronos.milliseconds(500)) check: @@ -247,10 +264,17 @@ procSuite "Peer Manager": node1.peerManager.peerStore.connectedness(peerInfo2.peerId) == Connected # Simulate restart by initialising a new node using the same storage - let - node3 = newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0), peerStorage = storage) + let node3 = newTestWakuNode( + generateSecp256k1Key(), + ValidIpAddress.init("127.0.0.1"), + Port(56037), + peerStorage = storage + ) + + node3.mountMetadata(0).expect("Mounted Waku Metadata") await node3.start() + check: # Node2 has been loaded after "restart", but we have not yet reconnected node3.peerManager.peerStore.peers().len == 1 @@ -258,8 +282,83 @@ procSuite "Peer Manager": node3.peerManager.peerStore.connectedness(peerInfo2.peerId) == NotConnected await node3.mountRelay() + await node3.peerManager.connectToRelayPeers() + await sleepAsync(chronos.milliseconds(500)) + + check: + # Reconnected to node2 after "restart" + node3.peerManager.peerStore.peers().len == 1 + node3.peerManager.peerStore.peers().anyIt(it.peerId == peerInfo2.peerId) + node3.peerManager.peerStore.connectedness(peerInfo2.peerId) == Connected + + await allFutures([node1.stop(), node2.stop(), node3.stop()]) + + asyncTest "Sharded peer manager can use persistent storage and survive restarts": + let + database = SqliteDatabase.new(":memory:")[] + storage = WakuPeerStorage.new(database)[] + node1 = newTestWakuNode( + generateSecp256k1Key(), + ValidIpAddress.init("127.0.0.1"), + Port(44048), + peerStorage = storage + ) + node2 = newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("127.0.0.1"), Port(34023)) + + node1.mountMetadata(0).expect("Mounted Waku Metadata") + node2.mountMetadata(0).expect("Mounted Waku Metadata") + + await node1.start() + await node2.start() + + await node1.mountRelay() + await node2.mountRelay() + + let peerInfo2 = node2.switch.peerInfo + var remotePeerInfo2 = peerInfo2.toRemotePeerInfo() + remotePeerInfo2.enr = some(node2.enr) + + let is12Connected = await node1.peerManager.connectRelay(remotePeerInfo2) + assert is12Connected == true, "Node 1 and 2 not connected" + + check: + node1.peerManager.peerStore[AddressBook][remotePeerInfo2.peerId] == remotePeerInfo2.addrs + + # wait for the peer store update + await sleepAsync(chronos.milliseconds(500)) + + check: + # Currently connected to node2 + node1.peerManager.peerStore.peers().len == 1 + node1.peerManager.peerStore.peers().anyIt(it.peerId == peerInfo2.peerId) + node1.peerManager.peerStore.connectedness(peerInfo2.peerId) == Connected + + # Simulate restart by initialising a new node using the same storage + let node3 = newTestWakuNode( + generateSecp256k1Key(), + ValidIpAddress.init("127.0.0.1"), + Port(56037), + peerStorage = storage + ) + + node3.mountMetadata(0).expect("Mounted Waku Metadata") + + await node3.start() + + check: + # Node2 has been loaded after "restart", but we have not yet reconnected + node3.peerManager.peerStore.peers().len == 1 + node3.peerManager.peerStore.peers().anyIt(it.peerId == peerInfo2.peerId) + node3.peerManager.peerStore.connectedness(peerInfo2.peerId) == NotConnected + + await node3.mountRelay() + + await node3.peerManager.manageRelayPeers() + + await sleepAsync(chronos.milliseconds(500)) + check: # Reconnected to node2 after "restart" node3.peerManager.peerStore.peers().len == 1 @@ -298,9 +397,9 @@ procSuite "Peer Manager": topics = @["/waku/2/rs/4/0"], ) - discard node1.mountMetadata(clusterId3) - discard node2.mountMetadata(clusterId4) - discard node3.mountMetadata(clusterId4) + node1.mountMetadata(clusterId3).expect("Mounted Waku Metadata") + node2.mountMetadata(clusterId4).expect("Mounted Waku Metadata") + node3.mountMetadata(clusterId4).expect("Mounted Waku Metadata") # Start nodes await allFutures([node1.start(), node2.start(), node3.start()]) @@ -319,7 +418,6 @@ procSuite "Peer Manager": conn2.isNone conn3.isSome - # TODO: nwaku/issues/1377 xasyncTest "Peer manager support multiple protocol IDs when reconnecting to peers": let @@ -378,14 +476,28 @@ procSuite "Peer Manager": asyncTest "Peer manager connects to all peers supporting a given protocol": # Create 4 nodes - let nodes = toSeq(0..<4).mapIt(newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0))) + let nodes = + toSeq(0..<4) + .mapIt( + newTestWakuNode( + nodeKey = generateSecp256k1Key(), + bindIp = ValidIpAddress.init("0.0.0.0"), + bindPort = Port(0), + wakuFlags = some(CapabilitiesBitfield.init(@[Relay])) + ) + ) # Start them - await allFutures(nodes.mapIt(it.start())) + discard nodes.mapIt(it.mountMetadata(0)) await allFutures(nodes.mapIt(it.mountRelay())) + await allFutures(nodes.mapIt(it.start())) # Get all peer infos - let peerInfos = nodes.mapIt(it.switch.peerInfo.toRemotePeerInfo()) + let peerInfos = collect: + for i in 0..nodes.high: + let peerInfo = nodes[i].switch.peerInfo.toRemotePeerInfo() + peerInfo.enr = some(nodes[i].enr) + peerInfo # Add all peers (but self) to node 0 nodes[0].peerManager.addPeer(peerInfos[1]) @@ -416,6 +528,60 @@ procSuite "Peer Manager": await allFutures(nodes.mapIt(it.stop())) + asyncTest "Sharded peer manager connects to all peers supporting a given protocol": + # Create 4 nodes + let nodes = + toSeq(0..<4) + .mapIt( + newTestWakuNode( + nodeKey = generateSecp256k1Key(), + bindIp = ValidIpAddress.init("0.0.0.0"), + bindPort = Port(0), + wakuFlags = some(CapabilitiesBitfield.init(@[Relay])) + ) + ) + + # Start them + discard nodes.mapIt(it.mountMetadata(0)) + await allFutures(nodes.mapIt(it.mountRelay())) + await allFutures(nodes.mapIt(it.start())) + + # Get all peer infos + let peerInfos = collect: + for i in 0..nodes.high: + let peerInfo = nodes[i].switch.peerInfo.toRemotePeerInfo() + peerInfo.enr = some(nodes[i].enr) + peerInfo + + # Add all peers (but self) to node 0 + nodes[0].peerManager.addPeer(peerInfos[1]) + nodes[0].peerManager.addPeer(peerInfos[2]) + nodes[0].peerManager.addPeer(peerInfos[3]) + + # Connect to relay peers + await nodes[0].peerManager.manageRelayPeers() + + check: + # Peerstore track all three peers + nodes[0].peerManager.peerStore.peers().len == 3 + + # All peer ids are correct + nodes[0].peerManager.peerStore.peers().anyIt(it.peerId == nodes[1].switch.peerInfo.peerId) + nodes[0].peerManager.peerStore.peers().anyIt(it.peerId == nodes[2].switch.peerInfo.peerId) + nodes[0].peerManager.peerStore.peers().anyIt(it.peerId == nodes[3].switch.peerInfo.peerId) + + # All peers support the relay protocol + nodes[0].peerManager.peerStore[ProtoBook][nodes[1].switch.peerInfo.peerId].contains(WakuRelayCodec) + nodes[0].peerManager.peerStore[ProtoBook][nodes[2].switch.peerInfo.peerId].contains(WakuRelayCodec) + nodes[0].peerManager.peerStore[ProtoBook][nodes[3].switch.peerInfo.peerId].contains(WakuRelayCodec) + + # All peers are connected + nodes[0].peerManager.peerStore[ConnectionBook][nodes[1].switch.peerInfo.peerId] == Connected + nodes[0].peerManager.peerStore[ConnectionBook][nodes[2].switch.peerInfo.peerId] == Connected + nodes[0].peerManager.peerStore[ConnectionBook][nodes[3].switch.peerInfo.peerId] == Connected + + await allFutures(nodes.mapIt(it.stop())) + asyncTest "Peer store keeps track of incoming connections": # Create 4 nodes let nodes = toSeq(0..<4).mapIt(newTestWakuNode(generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0))) diff --git a/tests/test_waku_lightpush.nim b/tests/test_waku_lightpush.nim index de125ac974..76312272ff 100644 --- a/tests/test_waku_lightpush.nim +++ b/tests/test_waku_lightpush.nim @@ -11,6 +11,7 @@ import ../../waku/node/peer_manager, ../../waku/waku_core, ../../waku/waku_lightpush, + ../../waku/waku_lightpush/common, ../../waku/waku_lightpush/client, ../../waku/waku_lightpush/protocol_metrics, ../../waku/waku_lightpush/rpc, diff --git a/tests/test_wakunode_lightpush.nim b/tests/test_wakunode_lightpush.nim index 610062a732..2331d16306 100644 --- a/tests/test_wakunode_lightpush.nim +++ b/tests/test_wakunode_lightpush.nim @@ -4,16 +4,12 @@ import std/options, stew/shims/net as stewNet, testutils/unittests, - chronicles, - chronos, - libp2p/crypto/crypto, - libp2p/switch + chronos import ../../waku/waku_core, - ../../waku/waku_lightpush, + ../../waku/waku_lightpush/common, ../../waku/node/peer_manager, ../../waku/waku_node, - ./testlib/common, ./testlib/wakucore, ./testlib/wakunode diff --git a/tests/testlib/wakunode.nim b/tests/testlib/wakunode.nim index 80d6d4d6af..dfbfd47af6 100644 --- a/tests/testlib/wakunode.nim +++ b/tests/testlib/wakunode.nim @@ -32,9 +32,10 @@ proc defaultTestWakuNodeConf*(): WakuNodeConf = dnsAddrsNameServers: @[parseIpAddress("1.1.1.1"), parseIpAddress("1.0.0.1")], nat: "any", maxConnections: 50, - topics: @[], - relay: true, - maxMessageSize: "1024 KiB" + maxMessageSize: "1024 KiB", + clusterId: 1.uint32, + topics: @["/waku/2/rs/1/0"], + relay: true ) proc newTestWakuNode*(nodeKey: crypto.PrivateKey, @@ -56,8 +57,8 @@ proc newTestWakuNode*(nodeKey: crypto.PrivateKey, dns4DomainName = none(string), discv5UdpPort = none(Port), agentString = none(string), - clusterId: uint32 = 2.uint32, - topics: seq[string] = @["/waku/2/rs/2/0"], + clusterId: uint32 = 1.uint32, + topics: seq[string] = @["/waku/2/rs/1/0"], peerStoreCapacity = none(int)): WakuNode = var resolvedExtIp = extIp @@ -67,7 +68,10 @@ proc newTestWakuNode*(nodeKey: crypto.PrivateKey, if (extIp.isSome() or dns4DomainName.isSome()) and extPort.isNone(): some(Port(60000)) else: extPort - let conf = defaultTestWakuNodeConf() + var conf = defaultTestWakuNodeConf() + + conf.clusterId = clusterId + conf.topics = topics if dns4DomainName.isSome() and extIp.isNone(): # If there's an error resolving the IP, an exception is thrown and test fails diff --git a/tests/wakunode_rest/test_rest_lightpush.nim b/tests/wakunode_rest/test_rest_lightpush.nim index edeeed02ba..876be7c642 100644 --- a/tests/wakunode_rest/test_rest_lightpush.nim +++ b/tests/wakunode_rest/test_rest_lightpush.nim @@ -10,11 +10,10 @@ import import ../../waku/waku_api/message_cache, - ../../waku/common/base64, ../../waku/waku_core, ../../waku/waku_node, ../../waku/node/peer_manager, - ../../waku/waku_lightpush, + ../../waku/waku_lightpush/common, ../../waku/waku_api/rest/server, ../../waku/waku_api/rest/client, ../../waku/waku_api/rest/responses, diff --git a/waku/node/builder.nim b/waku/node/builder.nim index 471c274cfe..85cede9886 100644 --- a/waku/node/builder.nim +++ b/waku/node/builder.nim @@ -36,6 +36,7 @@ type # Peer manager config maxRelayPeers: Option[int] colocationLimit: int + shardAware: bool # Libp2p switch switchMaxConnections: Option[int] @@ -105,8 +106,10 @@ proc withPeerStorage*(builder: var WakuNodeBuilder, peerStorage: PeerStorage, ca builder.peerStorageCapacity = capacity proc withPeerManagerConfig*(builder: var WakuNodeBuilder, - maxRelayPeers = none(int)) = + maxRelayPeers = none(int), + shardAware = false) = builder.maxRelayPeers = maxRelayPeers + builder.shardAware = shardAware proc withColocationLimit*(builder: var WakuNodeBuilder, colocationLimit: int) = @@ -174,6 +177,7 @@ proc build*(builder: WakuNodeBuilder): Result[WakuNode, string] = storage = builder.peerStorage.get(nil), maxRelayPeers = builder.maxRelayPeers, colocationLimit = builder.colocationLimit, + shardedPeerManagement = builder.shardAware, ) var node: WakuNode diff --git a/waku/node/peer_manager/peer_manager.nim b/waku/node/peer_manager/peer_manager.nim index ab15e137ae..eaedbca1cb 100644 --- a/waku/node/peer_manager/peer_manager.nim +++ b/waku/node/peer_manager/peer_manager.nim @@ -5,7 +5,7 @@ else: import - std/[options, sets, tables, sequtils, times, strutils, math], + std/[options, sets, sequtils, times, strutils, math, random], chronos, chronicles, metrics, @@ -18,6 +18,7 @@ import ../../waku_core, ../../waku_relay, ../../waku_enr/sharding, + ../../waku_enr/capabilities, ../../waku_metadata, ./peer_store/peer_storage, ./waku_peer_store @@ -36,6 +37,8 @@ declarePublicGauge waku_service_peers, "Service peer protocol and multiaddress " logScope: topics = "waku node peer_manager" +randomize() + const # TODO: Make configurable DefaultDialTimeout = chronos.seconds(10) @@ -50,10 +53,10 @@ const BackoffFactor = 4 # Limit the amount of paralel dials - MaxParalelDials = 10 + MaxParallelDials = 10 # Delay between consecutive relayConnectivityLoop runs - ConnectivityLoopInterval = chronos.seconds(15) + ConnectivityLoopInterval = chronos.minutes(1) # How often the peer store is pruned PrunePeerStoreInterval = chronos.minutes(10) @@ -80,6 +83,7 @@ type ipTable*: Table[string, seq[PeerId]] colocationLimit*: int started: bool + shardedPeerManagement: bool # temp feature flag proc protocolMatcher*(codec: string): Matcher = ## Returns a protocol matcher function for the provided codec @@ -116,22 +120,21 @@ proc addPeer*(pm: PeerManager, remotePeerInfo: RemotePeerInfo, origin = UnknownO # Do not attempt to manage our unmanageable self return - # ...public key - var publicKey: PublicKey - discard remotePeerInfo.peerId.extractPublicKey(publicKey) - if pm.peerStore[AddressBook][remotePeerInfo.peerId] == remotePeerInfo.addrs and - pm.peerStore[KeyBook][remotePeerInfo.peerId] == publicKey and + pm.peerStore[KeyBook][remotePeerInfo.peerId] == remotePeerInfo.publicKey and pm.peerStore[ENRBook][remotePeerInfo.peerId].raw.len > 0: # Peer already managed and ENR info is already saved return trace "Adding peer to manager", peerId = remotePeerInfo.peerId, addresses = remotePeerInfo.addrs - + pm.peerStore[AddressBook][remotePeerInfo.peerId] = remotePeerInfo.addrs - pm.peerStore[KeyBook][remotePeerInfo.peerId] = publicKey + pm.peerStore[KeyBook][remotePeerInfo.peerId] = remotePeerInfo.publicKey pm.peerStore[SourceBook][remotePeerInfo.peerId] = origin - + + if remotePeerInfo.protocols.len > 0: + pm.peerStore[ProtoBook][remotePeerInfo.peerId] = remotePeerInfo.protocols + if remotePeerInfo.enr.isSome(): pm.peerStore[ENRBook][remotePeerInfo.peerId] = remotePeerInfo.enr.get() @@ -162,24 +165,27 @@ proc connectRelay*(pm: PeerManager, trace "Connecting to relay peer", wireAddr=peer.addrs, peerId=peerId, failedAttempts=failedAttempts var deadline = sleepAsync(dialTimeout) - var workfut = pm.switch.connect(peerId, peer.addrs) - var reasonFailed = "" - - try: - await workfut or deadline - if workfut.finished(): + let workfut = pm.switch.connect(peerId, peer.addrs) + + # Can't use catch: with .withTimeout() in this case + let res = catch: await workfut or deadline + + let reasonFailed = + if not workfut.finished(): + await workfut.cancelAndWait() + "timed out" + elif res.isErr(): res.error.msg + else: if not deadline.finished(): - deadline.cancel() + await deadline.cancelAndWait() + waku_peers_dials.inc(labelValues = ["successful"]) waku_node_conns_initiated.inc(labelValues = [source]) + pm.peerStore[NumberFailedConnBook][peerId] = 0 - return true - else: - reasonFailed = "timed out" - await cancelAndWait(workfut) - except CatchableError as exc: - reasonFailed = "remote peer failed" + return true + # Dial failed pm.peerStore[NumberFailedConnBook][peerId] = pm.peerStore[NumberFailedConnBook][peerId] + 1 pm.peerStore[LastFailedConnBook][peerId] = Moment.init(getTime().toUnix, Second) @@ -215,15 +221,15 @@ proc dialPeer(pm: PeerManager, # Dial Peer let dialFut = pm.switch.dial(peerId, addrs, proto) - var reasonFailed = "" - try: - if (await dialFut.withTimeout(dialTimeout)): + + let res = catch: + if await dialFut.withTimeout(dialTimeout): return some(dialFut.read()) - else: - reasonFailed = "timeout" - await cancelAndWait(dialFut) - except CatchableError as exc: - reasonFailed = "failed" + else: await cancelAndWait(dialFut) + + let reasonFailed = + if res.isOk: "timed out" + else: res.error.msg trace "Dialing peer failed", peerId=peerId, reason=reasonFailed, proto=proto @@ -294,107 +300,109 @@ proc canBeConnected*(pm: PeerManager, let now = Moment.init(getTime().toUnix, Second) let lastFailed = pm.peerStore[LastFailedConnBook][peerId] let backoff = calculateBackoff(pm.initialBackoffInSec, pm.backoffFactor, failedAttempts) - if now >= (lastFailed + backoff): - return true - return false + + return now >= (lastFailed + backoff) ################## # Initialisation # ################## proc getPeerIp(pm: PeerManager, peerId: PeerId): Option[string] = - if pm.switch.connManager.getConnections().hasKey(peerId): - let conns = pm.switch.connManager.getConnections().getOrDefault(peerId) - if conns.len != 0: - let observedAddr = conns[0].connection.observedAddr - let ip = observedAddr.get.getHostname() - if observedAddr.isSome: - # TODO: think if circuit relay ips should be handled differently - let ip = observedAddr.get.getHostname() - return some(ip) - return none(string) + if not pm.switch.connManager.getConnections().hasKey(peerId): + return none(string) + + let conns = pm.switch.connManager.getConnections().getOrDefault(peerId) + if conns.len == 0: + return none(string) + + let obAddr = conns[0].connection.observedAddr.valueOr: + return none(string) + + # TODO: think if circuit relay ips should be handled differently + + return some(obAddr.getHostname()) # called when a connection i) is created or ii) is closed proc onConnEvent(pm: PeerManager, peerId: PeerID, event: ConnEvent) {.async.} = case event.kind - of ConnEventKind.Connected: - let direction = if event.incoming: Inbound else: Outbound - discard - of ConnEventKind.Disconnected: - discard + of ConnEventKind.Connected: + #let direction = if event.incoming: Inbound else: Outbound + discard + of ConnEventKind.Disconnected: + discard + +proc onPeerMetadata(pm: PeerManager, peerId: PeerId) {.async.} = + # To prevent metadata protocol from breaking prev nodes, by now we only + # disconnect if the clusterid is specified. + if pm.wakuMetadata.clusterId == 0: + return + + let res = catch: await pm.switch.dial(peerId, WakuMetadataCodec) + + var reason: string + block guardClauses: + let conn = res.valueOr: + reason = "dial failed: " & error.msg + break guardClauses + + let metadata = (await pm.wakuMetadata.request(conn)).valueOr: + reason = "waku metatdata request failed: " & error + break guardClauses + + let clusterId = metadata.clusterId.valueOr: + reason = "empty cluster-id reported" + break guardClauses + + if pm.wakuMetadata.clusterId != clusterId: + reason = "different clusterId reported: " & $pm.wakuMetadata.clusterId & " vs " & $clusterId + break guardClauses + + if not metadata.shards.anyIt(pm.wakuMetadata.shards.contains(it)): + reason = "no shards in common" + break guardClauses + + return + + info "disconnecting from peer", peerId=peerId, reason=reason + asyncSpawn(pm.switch.disconnect(peerId)) + pm.peerStore.delete(peerId) # called when a peer i) first connects to us ii) disconnects all connections from us proc onPeerEvent(pm: PeerManager, peerId: PeerId, event: PeerEvent) {.async.} = + if not pm.wakuMetadata.isNil() and event.kind == PeerEventKind.Joined: + await pm.onPeerMetadata(peerId) + var direction: PeerDirection var connectedness: Connectedness - if event.kind == PeerEventKind.Joined: - direction = if event.initiator: Outbound else: Inbound - connectedness = Connected - - var clusterOk = false - var reason = "" - # To prevent metadata protocol from breaking prev nodes, by now we only - # disconnect if the clusterid is specified. - if not pm.wakuMetadata.isNil() and pm.wakuMetadata.clusterId != 0: - block wakuMetadata: - var conn: Connection - try: - conn = await pm.switch.dial(peerId, WakuMetadataCodec) - except CatchableError: - reason = "waku metadata codec not supported: " & getCurrentExceptionMsg() - break wakuMetadata - - # request metadata from connecting peer - let metadata = (await pm.wakuMetadata.request(conn)).valueOr: - reason = "failed waku metadata codec request" - break wakuMetadata - - # does not report any clusterId - let clusterId = metadata.clusterId.valueOr: - reason = "empty clusterId reported" - break wakuMetadata - - # drop it if it doesnt match our network id - if pm.wakuMetadata.clusterId != clusterId: - reason = "different clusterId reported: " & $pm.wakuMetadata.clusterId & " vs " & $clusterId - break wakuMetadata - - # reaching here means the clusterId matches - clusterOk = true - - if not pm.wakuMetadata.isNil() and pm.wakuMetadata.clusterId != 0 and not clusterOk: - info "disconnecting from peer", peerId=peerId, reason=reason - asyncSpawn(pm.switch.disconnect(peerId)) - pm.peerStore.delete(peerId) - - # TODO: Take action depending on the supported shards as reported by metadata - - let ip = pm.getPeerIp(peerId) - if ip.isSome: - pm.ipTable.mgetOrPut(ip.get, newSeq[PeerId]()).add(peerId) - - let peersBehindIp = pm.ipTable[ip.get] - # pm.colocationLimit == 0 disables the ip colocation limit - if pm.colocationLimit != 0 and - peersBehindIp.len > pm.colocationLimit: + case event.kind: + of Joined: + direction = if event.initiator: Outbound else: Inbound + connectedness = Connected + + if (let ip = pm.getPeerIp(peerId); ip.isSome()): + pm.ipTable.mgetOrPut(ip.get, newSeq[PeerId]()).add(peerId) + # in theory this should always be one, but just in case - for peerId in peersBehindIp[0..<(peersBehindIp.len - pm.colocationLimit)]: - debug "Pruning connection due to ip colocation", peerId = peerId, ip = ip - asyncSpawn(pm.switch.disconnect(peerId)) - pm.peerStore.delete(peerId) - - elif event.kind == PeerEventKind.Left: - direction = UnknownDirection - connectedness = CanConnect - - # note we cant access the peerId ip here as the connection was already closed - for ip, peerIds in pm.ipTable.pairs: - if peerIds.contains(peerId): - pm.ipTable[ip] = pm.ipTable[ip].filterIt(it != peerId) - if pm.ipTable[ip].len == 0: - pm.ipTable.del(ip) - break + let peersBehindIp = pm.ipTable[ip.get] + + # pm.colocationLimit == 0 disables the ip colocation limit + if pm.colocationLimit != 0 and peersBehindIp.len > pm.colocationLimit: + for peerId in peersBehindIp[0..<(peersBehindIp.len - pm.colocationLimit)]: + debug "Pruning connection due to ip colocation", peerId = peerId, ip = ip + asyncSpawn(pm.switch.disconnect(peerId)) + pm.peerStore.delete(peerId) + of Left: + direction = UnknownDirection + connectedness = CanConnect + + # note we cant access the peerId ip here as the connection was already closed + for ip, peerIds in pm.ipTable.pairs: + if peerIds.contains(peerId): + pm.ipTable[ip] = pm.ipTable[ip].filterIt(it != peerId) + if pm.ipTable[ip].len == 0: + pm.ipTable.del(ip) + break pm.peerStore[ConnectionBook][peerId] = connectedness pm.peerStore[DirectionBook][peerId] = direction @@ -413,7 +421,8 @@ proc new*(T: type PeerManager, initialBackoffInSec = InitialBackoffInSec, backoffFactor = BackoffFactor, maxFailedAttempts = MaxFailedAttempts, - colocationLimit = DefaultColocationLimit,): PeerManager = + colocationLimit = DefaultColocationLimit, + shardedPeerManagement = false): PeerManager = let capacity = switch.peerStore.capacity let maxConnections = switch.connManager.inSema.size @@ -459,7 +468,8 @@ proc new*(T: type PeerManager, inRelayPeersTarget: maxRelayPeersValue - outRelayPeersTarget, maxRelayPeers: maxRelayPeersValue, maxFailedAttempts: maxFailedAttempts, - colocationLimit: colocationLimit) + colocationLimit: colocationLimit, + shardedPeerManagement: shardedPeerManagement,) proc connHook(peerId: PeerID, event: ConnEvent): Future[void] {.gcsafe.} = onConnEvent(pm, peerId, event) @@ -604,9 +614,10 @@ proc connectToNodes*(pm: PeerManager, # later. await sleepAsync(chronos.seconds(5)) -# Returns the peerIds of physical connections (in and out) -# containing at least one stream with the given protocol. proc connectedPeers*(pm: PeerManager, protocol: string): (seq[PeerId], seq[PeerId]) = + ## Returns the peerIds of physical connections (in and out) + ## containing at least one stream with the given protocol. + var inPeers: seq[PeerId] var outPeers: seq[PeerId] @@ -636,10 +647,14 @@ proc getNumStreams*(pm: PeerManager, protocol: string): (int, int) = return (numStreamsIn, numStreamsOut) proc pruneInRelayConns(pm: PeerManager, amount: int) {.async.} = - let (inRelayPeers, outRelayPeers) = pm.connectedPeers(WakuRelayCodec) + if amount <= 0: + return + + let (inRelayPeers, _) = pm.connectedPeers(WakuRelayCodec) let connsToPrune = min(amount, inRelayPeers.len) for p in inRelayPeers[0.. 0: + peersToDisconnect += inPeerDiff + + if outPeerDiff <= 0: + continue + + # Get all peers for this shard + var connectablePeers = pm.peerStore.getPeersByShard( + uint16(pm.wakuMetadata.clusterId), uint16(shard)) + + let shardCount = connectablePeers.len + + connectablePeers.keepItIf( + not pm.peerStore.isConnected(it.peerId) and + pm.canBeConnected(it.peerId)) + + let connectableCount = connectablePeers.len + + connectablePeers.keepItIf(pm.peerStore.hasCapability(it.peerId, Relay)) + + let relayCount = connectablePeers.len + + debug "Sharded Peer Management", + shard = shard, + connectable = $connectableCount & "/" & $shardCount, + relayConnectable = $relayCount & "/" & $shardCount, + relayInboundTarget = $connectedInPeers.len & "/" & $inTarget, + relayOutboundTarget = $connectedOutPeers.len & "/" & $outTarget + + # Always pick random connectable relay peers + shuffle(connectablePeers) + + let length = min(outPeerDiff, connectablePeers.len) + for peer in connectablePeers[0.. Date: Tue, 30 Jan 2024 10:57:03 -0500 Subject: [PATCH 203/274] chore: v0.25 vendor bump and associated fixes (#2352) --- vendor/nim-chronos | 2 +- vendor/nim-eth | 2 +- vendor/nim-json-serialization | 2 +- vendor/nim-metrics | 2 +- vendor/nim-regex | 2 +- vendor/nim-toml-serialization | 2 +- vendor/nimbus-build-system | 2 +- waku/utils/collector.nim | 13 +++++++------ waku/waku_dnsdisc.nim | 1 - 9 files changed, 14 insertions(+), 14 deletions(-) diff --git a/vendor/nim-chronos b/vendor/nim-chronos index 41f77d261e..92acf68b04 160000 --- a/vendor/nim-chronos +++ b/vendor/nim-chronos @@ -1 +1 @@ -Subproject commit 41f77d261ead2508acdd3bd3f88a5cbbcefff05f +Subproject commit 92acf68b04070dfe8eb65bab71fbf63804979a16 diff --git a/vendor/nim-eth b/vendor/nim-eth index 5aaeb67ebe..11049fb87d 160000 --- a/vendor/nim-eth +++ b/vendor/nim-eth @@ -1 +1 @@ -Subproject commit 5aaeb67ebedbefaae2f719f245a96c1a80c42f81 +Subproject commit 11049fb87d076a25e0fa8e2fda95acaf119738da diff --git a/vendor/nim-json-serialization b/vendor/nim-json-serialization index 3f1ce24ee1..9c74b885ea 160000 --- a/vendor/nim-json-serialization +++ b/vendor/nim-json-serialization @@ -1 +1 @@ -Subproject commit 3f1ce24ee116daedbc9c8be525e63ec03e185a28 +Subproject commit 9c74b885eaeb6726543e69fde2f7d8837357c1d7 diff --git a/vendor/nim-metrics b/vendor/nim-metrics index 51f1227d0f..f51401566f 160000 --- a/vendor/nim-metrics +++ b/vendor/nim-metrics @@ -1 +1 @@ -Subproject commit 51f1227d0fd04ce84b1ef784b11280cb7875348c +Subproject commit f51401566ff7719185f52b5efe61d551e479f676 diff --git a/vendor/nim-regex b/vendor/nim-regex index 577c4ec3b2..a3f5389e87 160000 --- a/vendor/nim-regex +++ b/vendor/nim-regex @@ -1 +1 @@ -Subproject commit 577c4ec3b235c5fd2653a9c86cbc4a576cfc0869 +Subproject commit a3f5389e872e45a664aff3dfb80eab8069c688c5 diff --git a/vendor/nim-toml-serialization b/vendor/nim-toml-serialization index 43c546c365..2bdfec0eb7 160000 --- a/vendor/nim-toml-serialization +++ b/vendor/nim-toml-serialization @@ -1 +1 @@ -Subproject commit 43c546c365af4d291c33b7d94b5b730300165aaf +Subproject commit 2bdfec0eb7156d5773bc5d25fca3b3b77d0869f1 diff --git a/vendor/nimbus-build-system b/vendor/nimbus-build-system index 6cdd14282b..cf0c9cfa40 160000 --- a/vendor/nimbus-build-system +++ b/vendor/nimbus-build-system @@ -1 +1 @@ -Subproject commit 6cdd14282b7c813c2ae4b9a9d749c3ff5ce1b54a +Subproject commit cf0c9cfa408189c6d428799bf2e9da8d0c0f7f08 diff --git a/waku/utils/collector.nim b/waku/utils/collector.nim index 29310eb62c..9bb26b8a1a 100644 --- a/waku/utils/collector.nim +++ b/waku/utils/collector.nim @@ -6,14 +6,15 @@ else: import metrics -proc parseCollectorIntoF64(collector: Collector): float64 {.gcsafe, raises: [Defect] } = +proc parseCollectorIntoF64(collector: SimpleCollector): float64 {.gcsafe, raises: [Defect] } = {.gcsafe.}: var total = 0.float64 - for key in collector.metrics.keys(): - try: - total = total + collector.value(key) - except KeyError: - discard + for metrics in collector.metrics: + for metric in metrics: + try: + total = total + metric.value + except KeyError: + discard return total template parseAndAccumulate*(collector: Collector, cumulativeValue: float64): float64 = diff --git a/waku/waku_dnsdisc.nim b/waku/waku_dnsdisc.nim index 1836f883c1..21f5c6d579 100644 --- a/waku/waku_dnsdisc.nim +++ b/waku/waku_dnsdisc.nim @@ -21,7 +21,6 @@ import libp2p/multiaddress, libp2p/peerid, dnsdisc/client - import ./waku_core From c55ca0675656b51fb36a725f45a0963f45068ec5 Mon Sep 17 00:00:00 2001 From: Aaryamann Challani <43716372+rymnc@users.noreply.github.com> Date: Tue, 30 Jan 2024 23:28:30 +0530 Subject: [PATCH 204/274] chore(rln-relay-v2): use rln-v2 contract code (#2381) * chore(rln-relay-v2): use rln-v2 contract code * fix: reduced duped code --- Makefile | 8 ++ .../test_rln_group_manager_onchain.nim | 38 +++--- waku/waku_rln_relay/contract.nim | 121 ++---------------- 3 files changed, 44 insertions(+), 123 deletions(-) diff --git a/Makefile b/Makefile index 520d720ea5..f18aba2fb7 100644 --- a/Makefile +++ b/Makefile @@ -119,7 +119,11 @@ clean: | clean-libbacktrace .PHONY: librln LIBRLN_BUILDDIR := $(CURDIR)/vendor/zerokit +ifeq ($(RLN_V2),true) +LIBRLN_VERSION := v0.4.1 +else LIBRLN_VERSION := v0.3.4 +endif ifeq ($(OS),Windows_NT) LIBRLN_FILE := rln.lib @@ -134,6 +138,10 @@ $(LIBRLN_FILE): librln: | $(LIBRLN_FILE) $(eval NIM_PARAMS += --passL:$(LIBRLN_FILE) --passL:-lm) +ifeq ($(RLN_V2),true) + $(eval NIM_PARAMS += -d:rln_v2) +endif + clean-librln: cargo clean --manifest-path vendor/zerokit/rln/Cargo.toml diff --git a/tests/waku_rln_relay/test_rln_group_manager_onchain.nim b/tests/waku_rln_relay/test_rln_group_manager_onchain.nim index 2dc70277cf..7c95ee763a 100644 --- a/tests/waku_rln_relay/test_rln_group_manager_onchain.nim +++ b/tests/waku_rln_relay/test_rln_group_manager_onchain.nim @@ -40,6 +40,7 @@ proc generateCredentials(rlnInstance: ptr RLN, n: int): seq[IdentityCredential] # a util function used for testing purposes # it deploys membership contract on Ganache (or any Eth client available on EthClient address) # must be edited if used for a different contract than membership contract +# proc uploadRLNContract*(ethClientAddress: string): Future[Address] {.async.} = let web3 = await newWeb3(ethClientAddress) debug "web3 connected to", ethClientAddress @@ -53,27 +54,33 @@ proc uploadRLNContract*(ethClientAddress: string): Future[Address] {.async.} = let balance = await web3.provider.eth_getBalance(web3.defaultAccount, "latest") debug "Initial account balance: ", balance - # deploy the poseidon hash contract and gets its address - let - hasherReceipt = await web3.deployContract(PoseidonHasherCode) - hasherAddress = hasherReceipt.contractAddress.get - debug "hasher address: ", hasherAddress + when defined(rln_v2): + # deploy registry contract with its constructor inputs + let receipt = await web3.deployContract(RegistryContractCode) + else: + # deploy the poseidon hash contract and gets its address + let + hasherReceipt = await web3.deployContract(PoseidonHasherCode) + hasherAddress = hasherReceipt.contractAddress.get + debug "hasher address: ", hasherAddress - # encode registry contract inputs to 32 bytes zero-padded - let - hasherAddressEncoded = encode(hasherAddress).data - # this is the contract constructor input - contractInput = hasherAddressEncoded + # encode registry contract inputs to 32 bytes zero-padded + let + hasherAddressEncoded = encode(hasherAddress).data + # this is the contract constructor input + contractInput = hasherAddressEncoded - debug "encoded hasher address: ", hasherAddressEncoded - debug "encoded contract input:", contractInput + debug "encoded hasher address: ", hasherAddressEncoded + debug "encoded contract input:", contractInput - # deploy registry contract with its constructor inputs - let receipt = await web3.deployContract(RegistryContractCode, - contractInput = contractInput) + # deploy registry contract with its constructor inputs + let receipt = await web3.deployContract(RegistryContractCode, + contractInput = contractInput) + let contractAddress = receipt.contractAddress.get() + debug "Address of the deployed registry contract: ", contractAddress let registryContract = web3.contractSender(WakuRlnRegistry, contractAddress) @@ -88,7 +95,6 @@ proc uploadRLNContract*(ethClientAddress: string): Future[Address] {.async.} = return contractAddress - proc createEthAccount(): Future[(keys.PrivateKey, Address)] {.async.} = let web3 = await newWeb3(EthClient) let accounts = await web3.provider.eth_accounts() diff --git a/waku/waku_rln_relay/contract.nim b/waku/waku_rln_relay/contract.nim index 2efe4b44a1..8bccfc6828 100644 --- a/waku/waku_rln_relay/contract.nim +++ b/waku/waku_rln_relay/contract.nim @@ -1,107 +1,14 @@ -# src: https://github.com/kilic/rlnapp/blob/master/packages/contracts/contracts/RLN.sol -# pragma solidity 0.7.4; - -# import { IPoseidonHasher } from "./crypto/PoseidonHasher.sol"; - -# contract RLN { -# uint256 public immutable MEMBERSHIP_DEPOSIT; -# uint256 public immutable DEPTH; -# uint256 public immutable SET_SIZE; - -# uint256 public pubkeyIndex = 0; -# mapping(uint256 => uint256) public members; - -# IPoseidonHasher public poseidonHasher; - -# event MemberRegistered(uint256 pubkey, uint256 index); -# event MemberWithdrawn(uint256 pubkey, uint256 index); - -# constructor( -# uint256 membershipDeposit, -# uint256 depth, -# address _poseidonHasher -# ) public { -# MEMBERSHIP_DEPOSIT = membershipDeposit; -# DEPTH = depth; -# SET_SIZE = 1 << depth; -# poseidonHasher = IPoseidonHasher(_poseidonHasher); -# } - -# function register(uint256 pubkey) external payable { -# require(pubkeyIndex < SET_SIZE, "RLN, register: set is full"); -# require(msg.value == MEMBERSHIP_DEPOSIT, "RLN, register: membership deposit is not satisfied"); -# _register(pubkey); -# } - -# function registerBatch(uint256[] calldata pubkeys) external payable { -# require(pubkeyIndex + pubkeys.length <= SET_SIZE, "RLN, registerBatch: set is full"); -# require(msg.value == MEMBERSHIP_DEPOSIT * pubkeys.length, "RLN, registerBatch: membership deposit is not satisfied"); -# for (uint256 i = 0; i < pubkeys.length; i++) { -# _register(pubkeys[i]); -# } -# } - -# function _register(uint256 pubkey) internal { -# members[pubkeyIndex] = pubkey; -# emit MemberRegistered(pubkey, pubkeyIndex); -# pubkeyIndex += 1; -# } - -# function withdrawBatch( -# uint256[] calldata secrets, -# uint256[] calldata pubkeyIndexes, -# address payable[] calldata receivers -# ) external { -# uint256 batchSize = secrets.length; -# require(batchSize != 0, "RLN, withdrawBatch: batch size zero"); -# require(batchSize == pubkeyIndexes.length, "RLN, withdrawBatch: batch size mismatch pubkey indexes"); -# require(batchSize == receivers.length, "RLN, withdrawBatch: batch size mismatch receivers"); -# for (uint256 i = 0; i < batchSize; i++) { -# _withdraw(secrets[i], pubkeyIndexes[i], receivers[i]); -# } -# } - -# function withdraw( -# uint256 secret, -# uint256 _pubkeyIndex, -# address payable receiver -# ) external { -# _withdraw(secret, _pubkeyIndex, receiver); -# } - -# function _withdraw( -# uint256 secret, -# uint256 _pubkeyIndex, -# address payable receiver -# ) internal { -# require(_pubkeyIndex < SET_SIZE, "RLN, _withdraw: invalid pubkey index"); -# require(members[_pubkeyIndex] != 0, "RLN, _withdraw: member doesn't exist"); -# require(receiver != address(0), "RLN, _withdraw: empty receiver address"); - -# // derive public key -# uint256 pubkey = hash([secret, 0]); -# require(members[_pubkeyIndex] == pubkey, "RLN, _withdraw: not verified"); - -# // delete member -# members[_pubkeyIndex] = 0; - -# // refund deposit -# receiver.transfer(MEMBERSHIP_DEPOSIT); - -# emit MemberWithdrawn(pubkey, _pubkeyIndex); -# } - -# function hash(uint256[2] memory input) internal view returns (uint256) { -# return poseidonHasher.hash(input); -# } -# } - -# PoseidonHasherCode holds the bytecode of Poseidon hasher solidity smart contract: -# https://github.com/kilic/rlnapp/blob/master/packages/contracts/contracts/crypto/PoseidonHasher.sol -# the solidity contract is compiled separately and the resultant bytecode is copied here -const PoseidonHasherCode* = "0x608060405234801561001057600080fd5b50613e58806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063b189fd4c1461003b578063e493ef8c1461006b575b600080fd5b61005560048036038101906100509190613dcb565b610089565b6040516100629190613e07565b60405180910390f35b61007361009b565b6040516100809190613e07565b60405180910390f35b6000610094826100bf565b9050919050565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181565b60007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f09c46e9ec68e9bd4fe1faaba294cba38a71aa177534cdd1b6c7dc0dbd0abd7a77f0c0356530896eec42a97ed937f3135cfc5142b3ae405b8343c1d83ffa604cb81840182828309838385838409099250838283099050838285838409099150837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f1e28a1d935698ad1142e51182bb54cf4a00ea5aabd6268bd317ea977cc154a30830192507f27af2d831a9d2748080965db30e298e40e5757c3e008db964cf9e2b12b91251f82019150838384099050838385838409099250838283099050838285838409099150837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f1e6f11ce60fc8f513a6a3cfe16ae175a41291462f214cd0879aaf43545b74e03830192507f2a67384d3bbd5e438541819cb681f0be04462ed14c3613d8f719206268d142d382019150838384099050838385838409099250838283099050838285838409099150837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f0b66fdf356093a611609f8e12fbfecf0b985e381f025188936408f5d5c9f45d0830192507f012ee3ec1e78d470830c61093c2ade370b26c83cc5cebeeddaa6852dbdb09e2182019150838384099050838385838409099250838283099050838285838409099150837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f0252ba5f6760bfbdfd88f67f8175e3fd6cd1c431b099b6bb2d108e7b445bb1b9830192507f179474cceca5ff676c6bec3cef54296354391a8935ff71d6ef5aeaad7ca932f182019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f2c24261379a51bfa9228ff4a503fd4ed9c1f974a264969b37e1a2589bbed2b91830192507f1cc1d7b62692e63eac2f288bd0695b43c2f63f5001fc0fc553e66c0551801b0582019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f255059301aada98bb2ed55f852979e9600784dbf17fbacd05d9eff5fd9c91b56830192507f28437be3ac1cb2e479e1f5c0eccd32b3aea24234970a8193b11c29ce7e59efd982019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f28216a442f2e1f711ca4fa6b53766eb118548da8fb4f78d4338762c37f5f2043830192507f2c1f47cd17fa5adf1f39f4e7056dd03feee1efce03094581131f2377323482c982019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f07abad02b7a5ebc48632bcc9356ceb7dd9dafca276638a63646b8566a621afc9830192507f0230264601ffdf29275b33ffaab51dfe9429f90880a69cd137da0c4d15f96c3c82019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f1bc973054e51d905a0f168656497ca40a864414557ee289e717e5d66899aa0a9830192507f2e1c22f964435008206c3157e86341edd249aff5c2d8421f2a6b22288f0a67fc82019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f1224f38df67c5378121c1d5f461bbc509e8ea1598e46c9f7a70452bc2bba86b8830192507f02e4e69d8ba59e519280b4bd9ed0068fd7bfe8cd9dfeda1969d2989186cde20e82019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f1f1eccc34aaba0137f5df81fc04ff3ee4f19ee364e653f076d47e9735d98018e830192507f1672ad3d709a353974266c3039a9a7311424448032cd1819eacb8a4d4284f58282019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f283e3fdc2c6e420c56f44af5192b4ae9cda6961f284d24991d2ed602df8c8fc7830192507f1c2a3d120c550ecfd0db0957170fa013683751f8fdff59d6614fbd69ff394bcc82019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f216f84877aac6172f7897a7323456efe143a9a43773ea6f296cb6b8177653fbd830192507f2c0d272becf2a75764ba7e8e3e28d12bceaa47ea61ca59a411a1f51552f9478882019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f16e34299865c0e28484ee7a74c454e9f170a5480abe0508fcb4a6c3d89546f43830192507f175ceba599e96f5b375a232a6fb9cc71772047765802290f48cd939755488fc582019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f0c7594440dc48c16fead9e1758b028066aa410bfbc354f54d8c5ffbb44a1ee32830192507f1a3c29bc39f21bb5c466db7d7eb6fd8f760e20013ccf912c92479882d919fd8d82019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f0ccfdd906f3426e5c0986ea049b253400855d349074f5a6695c8eeabcd22e68f830192507f14f6bc81d9f186f62bdb475ce6c9411866a7a8a3fd065b3ce0e699b67dd9e79682019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f0962b82789fb3d129702ca70b2f6c5aacc099810c9c495c888edeb7386b97052830192507f1a880af7074d18b3bf20c79de25127bc13284ab01ef02575afef0c8f6a31a86d82019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f10cba18419a6a332cd5e77f0211c154b20af2924fc20ff3f4c3012bb7ae9311b830192507f057e62a9a8f89b3ebdc76ba63a9eaca8fa27b7319cae3406756a2849f302f10d82019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f287c971de91dc0abd44adf5384b4988cb961303bbf65cff5afa0413b44280cee830192507f21df3388af1687bbb3bca9da0cca908f1e562bc46d4aba4e6f7f7960e306891d82019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f1be5c887d25bce703e25cc974d0934cd789df8f70b498fd83eff8b560e1682b3830192507f268da36f76e568fb68117175cea2cd0dd2cb5d42fda5acea48d59c2706a0d5c182019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f0e17ab091f6eae50c609beaf5510ececc5d8bb74135ebd05bd06460cc26a5ed6830192507f04d727e728ffa0a67aee535ab074a43091ef62d8cf83d270040f5caa1f62af4082019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f0ddbd7bf9c29341581b549762bc022ed33702ac10f1bfd862b15417d7e39ca6e830192507f2790eb3351621752768162e82989c6c234f5b0d1d3af9b588a29c49c8789654b82019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f1e457c601a63b73e4471950193d8a570395f3d9ab8b2fd0984b764206142f9e9830192507f21ae64301dca9625638d6ab2bbe7135ffa90ecd0c43ff91fc4c686fc46e091b082019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f0379f63c8ce3468d4da293166f494928854be9e3432e09555858534eed8d350b830192507e2d56420359d0266a744a080809e054ca0e4921a46686ac8c9f58a324c3504982019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f123158e5965b5d9b1d68b3cd32e10bbeda8d62459e21f4090fc2c5af963515a6830192507f0be29fc40847a941661d14bbf6cbe0420fbb2b6f52836d4e60c80eb49cad9ec182019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f1ac96991dec2bb0557716142015a453c36db9d859cad5f9a233802f24fdf4c1a830192507f1596443f763dbcc25f4964fc61d23b3e5e12c9fa97f18a9251ca3355bcb0627e82019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f12e0bcd3654bdfa76b2861d4ec3aeae0f1857d9f17e715aed6d049eae3ba3212830192507f0fc92b4f1bbea82b9ea73d4af9af2a50ceabac7f37154b1904e6c76c7cf964ba82019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f1f9c0b1610446442d6f2e592a8013f40b14f7c7722236f4f9c7e965233872762830192507f0ebd74244ae72675f8cde06157a782f4050d914da38b4c058d159f643dbbf4d382019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f2cb7f0ed39e16e9f69a9fafd4ab951c03b0671e97346ee397a839839dccfc6d1830192507f1a9d6e2ecff022cc5605443ee41bab20ce761d0514ce526690c72bca7352d9bf82019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f2a115439607f335a5ea83c3bc44a9331d0c13326a9a7ba3087da182d648ec72f830192507f23f9b6529b5d040d15b8fa7aee3e3410e738b56305cd44f29535c115c5a4c06082019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f05872c16db0f72a2249ac6ba484bb9c3a3ce97c16d58b68b260eb939f0e6e8a7830192507f1300bdee08bb7824ca20fb80118075f40219b6151d55b5c52b624a7cdeddf6a782019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f19b9b63d2f108e17e63817863a8f6c288d7ad29916d98cb1072e4e7b7d52b376830192507f015bee1357e3c015b5bda237668522f613d1c88726b5ec4224a20128481b4f7f82019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f2953736e94bb6b9f1b9707a4f1615e4efe1e1ce4bab218cbea92c785b128ffd1830192507f0b069353ba091618862f806180c0385f851b98d372b45f544ce7266ed6608dfc82019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f304f74d461ccc13115e4e0bcfb93817e55aeb7eb9306b64e4f588ac97d81f429830192507f15bbf146ce9bca09e8a33f5e77dfe4f5aad2a164a4617a4cb8ee5415cde913fc82019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f0ab4dfe0c2742cde44901031487964ed9b8f4b850405c10ca9ff23859572c8c6830192507f0e32db320a044e3197f45f7649a19675ef5eedfea546dea9251de39f9639779a82019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f0a1756aa1f378ca4b27635a78b6888e66797733a82774896a3078efa516da016830192507f044c4a33b10f693447fd17177f952ef895e61d328f85efa94254d6a2a25d93ef82019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f2ed3611b725b8a70be655b537f66f700fe0879d79a496891d37b07b5466c4b8b830192507f1f9ba4e8bab7ce42c8ecc3d722aa2e0eadfdeb9cfdd347b5d8339ea7120858aa82019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f1b233043052e8c288f7ee907a84e518aa38e82ac4502066db74056f865c5d3da830192507f2431e1cc164bb8d074031ab72bd55b4c902053bfc0f14db0ca2f97b02087595482019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f082f934c91f5aac330cd6953a0a7db45a13e322097583319a791f273965801fd830192507f2b9a0a223e7538b0a34be074315542a3c77245e2ae7cbe999ad6bb930c48997c82019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f0e1cd91edd2cfa2cceb85483b887a9be8164163e75a8a00eb0b589cc70214e7d830192507f2e1eac0f2bfdfd63c951f61477e3698999774f19854d00f588d324601cebe2f982019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f0cbfa95f37fb74060c76158e769d6d157345784d8efdb33c23d748115b500b83830192507f08f05b3be923ed44d65ad49d8a61e9a676d991e3a77513d9980c232dfa4a4f8482019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f22719e2a070bcd0852bf8e21984d0443e7284925dc0758a325a2dd510c047ef6830192507f041f596a9ee1cb2bc060f7fcc3a1ab4c7bdbf036119982c0f41f62b2f26830c082019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f233fd35de1be520a87628eb06f6b1d4c021be1c2d0dc464a19fcdd0986b10f89830192507f0524b46d1aa87a5e4325e0a423ebc810d31e078aa1b4707eefcb453c61c9c26782019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f2c34f424c81e5716ce47fcac894b85824227bb954b0f3199cc4486237c515211830192507f0b5f2a4b63387819207effc2b5541fb72dd2025b5457cc97f33010327de4915e82019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f22207856082ccc54c5b72fe439d2cfd6c17435d2f57af6ceaefac41fe05c659f830192507f24d57a8bf5da63fe4e24159b7f8950b5cdfb210194caf79f27854048ce2c817182019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f0afab181fdd5e0583b371d75bd693f98374ad7097bb01a8573919bb23b79396e830192507f2dba9b108f208772998a52efac7cbd5676c0057194c16c0bf16290d62b1128ee82019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f26349b66edb8b16f56f881c788f53f83cbb83de0bd592b255aff13e6bce420b3830192507f25af7ce0e5e10357685e95f92339753ad81a56d28ecc193b235288a3e6f137db82019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f25b4ce7bd2294390c094d6a55edd68b970eed7aae88b2bff1f7c0187fe35011f830192507f22c543f10f6c89ec387e53f1908a88e5de9cef28ebdf30b18cb9d54c1e02b63182019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f0236f93e7789c4724fc7908a9f191e1e425e906a919d7a34df668e74882f87a9830192507f29350b401166ca010e7d27e37d05da99652bdae114eb01659cb497af980c4b5282019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f0eed787d65820d3f6bd31bbab547f75a65edb75d844ebb89ee1260916652363f830192507f07cc1170f13b46f2036a753f520b3291fdcd0e99bd94297d1906f656f4de6fad82019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f22b939233b1d7205f49bcf613a3d30b1908786d7f9f5d10c2059435689e8acea830192507f01451762a0aab81c8aad1dc8bc33e870740f083a5aa85438add650ace60ae5a682019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f23506bb5d8727d4461fabf1025d46d1fe32eaa61dec7da57e704fec0892fce89830192507f2e484c44e838aea0bac06ae3f71bdd092a3709531e1efea97f8bd6890735552282019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f0f4bc7d07ebafd64379e78c50bd2e42baf4a594545cedc2545418da26835b54c830192507f1f4d3c8f6583e9e5fa76637862faaee851582388725df460e620996d50d8e74e82019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f093514e0c70711f82660d07be0e4a988fae02abc7b681d9153eb9bcb48fe7389830192507f1adab0c8e2b3bad346699a2b5f3bc03643ee83ece47228f24a58e0a347e153d882019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f1672b1726057d99dd14709ebb474641a378c1b94b8072bac1a22dbef9e80dad2830192507f1dfd53d4576af2e38f44f53fdcab468cc5d8e2fae0acc4ee30d47b239b479c1482019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f0c6888a10b75b0f3a70a36263a37e17fe6d77d640f6fc3debc7f207753205c60830192507f1addb933a65be77092b34a7e77d12fe8611a61e00ee6848b85091ecca9d1e50882019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507ed7540dcd268a845c10ae18d1de933cf638ff5425f0afff7935628e299d1791830192507f140c0e42687e9ead01b2827a5664ca9c26fedde4acd99db1d316939d20b82c0e82019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f2f0c3a115d4317d191ba89b8d13d1806c20a0f9b24f8c5edc091e2ae56565984830192507f0c4ee778ff7c14553006ed220cf9c81008a0cff670b22b82d8c538a1dc958c6182019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f1704f2766d46f82c3693f00440ccc3609424ed26c0acc66227c3d7485de74c69830192507f2f2d19cc3ea5d78ea7a02c1b51d244abf0769c9f8544e40239b66fe9009c3cfa82019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f1ae03853b75fcaba5053f112e2a8e8dcdd7ee6cb9cfed9c7d6c766a806fc6629830192507f0971aabf795241df51d131d0fa61aa5f3556921b2d6f014e4e41a86ddaf056d582019150838384099050838385838409099250838283099050838285838409099150837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f1408c316e6014e1a91d4cf6b6e0de73eda624f8380df1c875f5c29f7bfe2f646830192507f1667f3fe2edbe850248abe42b543093b6c89f1f773ef285341691f39822ef5bd82019150838384099050838385838409099250838283099050838285838409099150837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f13bf7c5d0d2c4376a48b0a03557cdf915b81718409e5c133424c69576500fe37830192507f07620a6dfb0b6cec3016adf3d3533c24024b95347856b79719bc0ba743a62c2c82019150838384099050838385838409099250838283099050838285838409099150837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f1574c7ef0c43545f36a8ca08bdbdd8b075d2959e2f322b731675de3e1982b4d0830192507f269e4b5b7a2eb21afd567970a717ceec5bd4184571c254fdc06e03a7ff8378f08201915083838409905083838583840909925083828309905083828583840909915083847f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88409857f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad586090106925082945050505050919050565b600080fd5b6000819050919050565b613da881613d95565b8114613db357600080fd5b50565b600081359050613dc581613d9f565b92915050565b600060208284031215613de157613de0613d90565b5b6000613def84828501613db6565b91505092915050565b613e0181613d95565b82525050565b6000602082019050613e1c6000830184613df8565b9291505056fea2646970667358221220f20e2267360e9aeb09de75ad232eed0f5dc05f7547d686c790b156f441d402b164736f6c634300080f0033" - -# RegistryContractCode contains the bytecode of the membership solidity smart contract: -# https://github.com/waku-org/rln-contract/blob/fbafa7b0bb47c5233f50ba82992c572795e7e9a6/deployments/sepolia/WakuRlnRegistry.json -# the solidity contract is compiled separately and the resultant bytecode is copied here -const RegistryContractCode* = "0x60a06040526000600260006101000a81548161ffff021916908361ffff1602179055503480156200002f57600080fd5b5060405162002f2a38038062002f2a8339818101604052810190620000559190620001e6565b6200007562000069620000b060201b60201c565b620000b860201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250505062000218565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620001ae8262000181565b9050919050565b620001c081620001a1565b8114620001cc57600080fd5b50565b600081519050620001e081620001b5565b92915050565b600060208284031215620001ff57620001fe6200017c565b5b60006200020f84828501620001cf565b91505092915050565b608051612ce862000242600039600081816103e2015281816104120152610ad80152612ce86000f3fe60806040523480156200001157600080fd5b5060043610620000e25760003560e01c8063ab02492a1162000099578063ef653d5e116200006f578063ef653d5e14620001d1578063f184ef4c14620001f1578063f2fde38b1462000213578063f5542147146200023357620000e2565b8063ab02492a1462000183578063cf61637414620001a3578063d44fda1f14620001c557620000e2565b806326e0fc1f14620000e7578063331b6ab3146200010757806342f542e21462000129578063715018a614620001355780637a34289d14620001415780638da5cb5b1462000161575b600080fd5b620001056004803603810190620000ff919062001045565b62000269565b005b62000111620003e0565b60405162000120919062001117565b60405180910390f35b6200013362000404565b005b6200013f6200048b565b005b6200015f6004803603810190620001599190620011a2565b620004a3565b005b6200016b6200075f565b6040516200017a91906200121c565b60405180910390f35b620001a160048036038101906200019b919062001239565b62000788565b005b620001ad6200088b565b604051620001bc9190620012b4565b60405180910390f35b620001cf6200089f565b005b620001ef6004803603810190620001e9919062001302565b62000a09565b005b620001fb62000c9e565b6040516200020a9190620012b4565b60405180910390f35b6200023160048036038101906200022b919062001302565b62000cb2565b005b6200025160048036038101906200024b919062001334565b62000d3c565b6040516200026091906200121c565b60405180910390f35b600060149054906101000a900461ffff1661ffff168261ffff1610620002bb576040517fd23276a200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600167ffffffffffffffff811115620002db57620002da62001366565b5b6040519080825280602002602001820160405280156200030a5781602001602082028036833780820191505090505b509050818160008151811062000325576200032462001395565b5b602002602001018181525050600160008461ffff1661ffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637a34289d826040518263ffffffff1660e01b8152600401620003a7919062001492565b600060405180830381600087803b158015620003c257600080fd5b505af1158015620003d7573d6000803e3d6000fd5b50505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6200040e62000d6f565b60007f0000000000000000000000000000000000000000000000000000000000000000600060149054906101000a900461ffff16604051620004509062000fb3565b6200045d929190620014b6565b604051809103906000f0801580156200047a573d6000803e3d6000fd5b509050620004888162000df4565b50565b6200049562000d6f565b620004a1600062000ee7565b565b600060149054906101000a900461ffff1661ffff16600260009054906101000a900461ffff1661ffff161062000505576040517fd23276a200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b6001156200075b5760016000600260009054906101000a900461ffff1661ffff1661ffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637a34289d83836040518363ffffffff1660e01b8152600401620005969291906200155a565b600060405180830381600087803b158015620005b157600080fd5b505af1925050508015620005c3575060015b6200074f573d8060008114620005f6576040519150601f19603f3d011682016040523d82523d6000602084013e620005fb565b606091505b506040516024016040516020818303038152906040527f57f69531000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050805190602001208180519060200120146200069c57805181602001fd5b600060149054906101000a900461ffff1661ffff166001600260009054906101000a900461ffff16620006d09190620015af565b61ffff16106200070c576040517fd23276a200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600260008282829054906101000a900461ffff166200072e9190620015af565b92506101000a81548161ffff021916908361ffff1602179055505062000755565b6200075b565b62000506565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600060149054906101000a900461ffff1661ffff168361ffff1610620007da576040517fd23276a200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160008461ffff1661ffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637a34289d83836040518363ffffffff1660e01b8152600401620008529291906200155a565b600060405180830381600087803b1580156200086d57600080fd5b505af115801562000882573d6000803e3d6000fd5b50505050505050565b600260009054906101000a900461ffff1681565b620008a962000d6f565b600060149054906101000a900461ffff1661ffff16600260009054906101000a900461ffff1661ffff16106200090b576040517fd23276a200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600160006001600260009054906101000a900461ffff16620009469190620015af565b61ffff1661ffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603620009cb576040517fd23276a200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600260008282829054906101000a900461ffff16620009ed9190620015af565b92506101000a81548161ffff021916908361ffff160217905550565b62000a1362000d6f565b600073ffffffffffffffffffffffffffffffffffffffff16600160008060149054906101000a900461ffff1661ffff1661ffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000ad157806040517f9cfabd1600000000000000000000000000000000000000000000000000000000815260040162000ac891906200121c565b60405180910390fd5b60008190507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663331b6ab36040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000b59573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b7f919062001633565b73ffffffffffffffffffffffffffffffffffffffff161462000bcc576040517eaec95400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060149054906101000a900461ffff1661ffff168173ffffffffffffffffffffffffffffffffffffffff166328b070e06040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000c2d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c5391906200167c565b61ffff161462000c8f576040517fb893b72300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62000c9a8262000df4565b5050565b600060149054906101000a900461ffff1681565b62000cbc62000d6f565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000d2e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000d259062001735565b60405180910390fd5b62000d398162000ee7565b50565b60016020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b62000d7962000fab565b73ffffffffffffffffffffffffffffffffffffffff1662000d996200075f565b73ffffffffffffffffffffffffffffffffffffffff161462000df2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000de990620017a7565b60405180910390fd5b565b80600160008060149054906101000a900461ffff1661ffff1661ffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fcf6a3b406170499209d0fcf152a1605c7c5a5c99c855e2bb803433fc960718eb600060149054906101000a900461ffff168260405162000ea0929190620017c9565b60405180910390a16001600060148282829054906101000a900461ffff1662000eca9190620015af565b92506101000a81548161ffff021916908361ffff16021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600033905090565b6114bc80620017f783390190565b600080fd5b600080fd5b600061ffff82169050919050565b62000fe48162000fcb565b811462000ff057600080fd5b50565b600081359050620010048162000fd9565b92915050565b6000819050919050565b6200101f816200100a565b81146200102b57600080fd5b50565b6000813590506200103f8162001014565b92915050565b600080604083850312156200105f576200105e62000fc1565b5b60006200106f8582860162000ff3565b925050602062001082858286016200102e565b9150509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000620010d7620010d1620010cb846200108c565b620010ac565b6200108c565b9050919050565b6000620010eb82620010b6565b9050919050565b6000620010ff82620010de565b9050919050565b6200111181620010f2565b82525050565b60006020820190506200112e600083018462001106565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126200115c576200115b62001134565b5b8235905067ffffffffffffffff8111156200117c576200117b62001139565b5b6020830191508360208202830111156200119b576200119a6200113e565b5b9250929050565b60008060208385031215620011bc57620011bb62000fc1565b5b600083013567ffffffffffffffff811115620011dd57620011dc62000fc6565b5b620011eb8582860162001143565b92509250509250929050565b600062001204826200108c565b9050919050565b6200121681620011f7565b82525050565b60006020820190506200123360008301846200120b565b92915050565b60008060006040848603121562001255576200125462000fc1565b5b6000620012658682870162000ff3565b935050602084013567ffffffffffffffff81111562001289576200128862000fc6565b5b620012978682870162001143565b92509250509250925092565b620012ae8162000fcb565b82525050565b6000602082019050620012cb6000830184620012a3565b92915050565b620012dc81620011f7565b8114620012e857600080fd5b50565b600081359050620012fc81620012d1565b92915050565b6000602082840312156200131b576200131a62000fc1565b5b60006200132b84828501620012eb565b91505092915050565b6000602082840312156200134d576200134c62000fc1565b5b60006200135d8482850162000ff3565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b620013fb816200100a565b82525050565b60006200140f8383620013f0565b60208301905092915050565b6000602082019050919050565b60006200143582620013c4565b620014418185620013cf565b93506200144e83620013e0565b8060005b838110156200148557815162001469888262001401565b975062001476836200141b565b92505060018101905062001452565b5085935050505092915050565b60006020820190508181036000830152620014ae818462001428565b905092915050565b6000604082019050620014cd60008301856200120b565b620014dc6020830184620012a3565b9392505050565b600080fd5b82818337600083830152505050565b6000620015058385620013cf565b93507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8311156200153b576200153a620014e3565b5b6020830292506200154e838584620014e8565b82840190509392505050565b6000602082019050818103600083015262001577818486620014f7565b90509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620015bc8262000fcb565b9150620015c98362000fcb565b92508261ffff03821115620015e357620015e262001580565b5b828201905092915050565b6000620015fb82620011f7565b9050919050565b6200160d81620015ee565b81146200161957600080fd5b50565b6000815190506200162d8162001602565b92915050565b6000602082840312156200164c576200164b62000fc1565b5b60006200165c848285016200161c565b91505092915050565b600081519050620016768162000fd9565b92915050565b60006020828403121562001695576200169462000fc1565b5b6000620016a58482850162001665565b91505092915050565b600082825260208201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006200171d602683620016ae565b91506200172a82620016bf565b604082019050919050565b6000602082019050818103600083015262001750816200170e565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200178f602083620016ae565b91506200179c8262001757565b602082019050919050565b60006020820190508181036000830152620017c28162001780565b9050919050565b6000604082019050620017e06000830185620012a3565b620017ef60208301846200120b565b939250505056fe61016060405260006001553480156200001757600080fd5b50604051620014bc380380620014bc83398181016040528101906200003d919062000290565b6000601483600062000064620000586200011b60201b60201c565b6200012360201b60201c565b83608081815250508260a08181525050826001901b60c081815250508173ffffffffffffffffffffffffffffffffffffffff1660e08173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff166101008173ffffffffffffffffffffffffffffffffffffffff16815250504363ffffffff166101208163ffffffff1681525050505050508061ffff166101408161ffff16815250505050620002d7565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200021982620001ec565b9050919050565b6200022b816200020c565b81146200023757600080fd5b50565b6000815190506200024b8162000220565b92915050565b600061ffff82169050919050565b6200026a8162000251565b81146200027657600080fd5b50565b6000815190506200028a816200025f565b92915050565b60008060408385031215620002aa57620002a9620001e7565b5b6000620002ba858286016200023a565b9250506020620002cd8582860162000279565b9150509250929050565b60805160a05160c05160e05161010051610120516101405161117c620003406000396000610545015260006105e3015260006105690152600081816104ac015261058d0152600081816107560152610aac015260006106fc015260006107ac015261117c6000f3fe60806040526004361061011f5760003560e01c80638be9b119116100a0578063c5b208ff11610064578063c5b208ff146103c5578063d0383d6814610402578063f207564e1461042d578063f220b9ec14610449578063f2fde38b146104745761011f565b80638be9b119146102de5780638da5cb5b1461030757806398366e3514610332578063ae74552a1461035d578063bc499128146103885761011f565b80634add651e116100e75780634add651e146101f95780635daf08ca146102245780636bdcc8ab14610261578063715018a61461029e5780637a34289d146102b55761011f565b806322d9730c1461012457806328b070e0146101615780632b7ac3f31461018c578063331b6ab3146101b75780633ccfd60b146101e2575b600080fd5b34801561013057600080fd5b5061014b60048036038101906101469190610b48565b61049d565b6040516101589190610b90565b60405180910390f35b34801561016d57600080fd5b50610176610543565b6040516101839190610bc8565b60405180910390f35b34801561019857600080fd5b506101a1610567565b6040516101ae9190610c62565b60405180910390f35b3480156101c357600080fd5b506101cc61058b565b6040516101d99190610c9e565b60405180910390f35b3480156101ee57600080fd5b506101f76105af565b005b34801561020557600080fd5b5061020e6105e1565b60405161021b9190610cd8565b60405180910390f35b34801561023057600080fd5b5061024b60048036038101906102469190610b48565b610605565b6040516102589190610d02565b60405180910390f35b34801561026d57600080fd5b5061028860048036038101906102839190610b48565b61061d565b6040516102959190610b90565b60405180910390f35b3480156102aa57600080fd5b506102b361063d565b005b3480156102c157600080fd5b506102dc60048036038101906102d79190610d82565b610651565b005b3480156102ea57600080fd5b5061030560048036038101906103009190610e2f565b61069f565b005b34801561031357600080fd5b5061031c6106d1565b6040516103299190610ea4565b60405180910390f35b34801561033e57600080fd5b506103476106fa565b6040516103549190610d02565b60405180910390f35b34801561036957600080fd5b5061037261071e565b60405161037f9190610d02565b60405180910390f35b34801561039457600080fd5b506103af60048036038101906103aa9190610b48565b610724565b6040516103bc9190610d02565b60405180910390f35b3480156103d157600080fd5b506103ec60048036038101906103e79190610eeb565b61073c565b6040516103f99190610d02565b60405180910390f35b34801561040e57600080fd5b50610417610754565b6040516104249190610d02565b60405180910390f35b61044760048036038101906104429190610b48565b610778565b005b34801561045557600080fd5b5061045e6107aa565b60405161046b9190610d02565b60405180910390f35b34801561048057600080fd5b5061049b60048036038101906104969190610eeb565b6107ce565b005b600080821415801561053c57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e493ef8c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610515573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105399190610f2d565b82105b9050919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b6040517fd623472500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b60036020528060005260406000206000915090505481565b60046020528060005260406000206000915054906101000a900460ff1681565b610645610851565b61064f60006108cf565b565b610659610851565b600082829050905060005b818110156106995761068e84848381811061068257610681610f5a565b5b90506020020135610993565b806001019050610664565b50505050565b6040517fd623472500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b60015481565b60026020528060005260406000206000915090505481565b60056020528060005260406000206000915090505481565b7f000000000000000000000000000000000000000000000000000000000000000081565b6040517fd623472500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b6107d6610851565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610845576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c9061100c565b60405180910390fd5b61084e816108cf565b50565b610859610a0c565b73ffffffffffffffffffffffffffffffffffffffff166108776106d1565b73ffffffffffffffffffffffffffffffffffffffff16146108cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c490611078565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61099c81610a14565b600160036000838152602001908152602001600020819055507f5a92c2530f207992057b9c3e544108ffce3beda4a63719f316967c49bf6159d2816001546040516109e8929190611098565b60405180910390a16001806000828254610a0291906110f0565b9250508190555050565b600033905090565b610a1d8161049d565b610a5e57806040517f7f3e75af000000000000000000000000000000000000000000000000000000008152600401610a559190610d02565b60405180910390fd5b6000600360008381526020019081526020016000205414610aaa576040517e0a60f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000060015410610b05576040517f57f6953100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b600080fd5b600080fd5b6000819050919050565b610b2581610b12565b8114610b3057600080fd5b50565b600081359050610b4281610b1c565b92915050565b600060208284031215610b5e57610b5d610b08565b5b6000610b6c84828501610b33565b91505092915050565b60008115159050919050565b610b8a81610b75565b82525050565b6000602082019050610ba56000830184610b81565b92915050565b600061ffff82169050919050565b610bc281610bab565b82525050565b6000602082019050610bdd6000830184610bb9565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000610c28610c23610c1e84610be3565b610c03565b610be3565b9050919050565b6000610c3a82610c0d565b9050919050565b6000610c4c82610c2f565b9050919050565b610c5c81610c41565b82525050565b6000602082019050610c776000830184610c53565b92915050565b6000610c8882610c2f565b9050919050565b610c9881610c7d565b82525050565b6000602082019050610cb36000830184610c8f565b92915050565b600063ffffffff82169050919050565b610cd281610cb9565b82525050565b6000602082019050610ced6000830184610cc9565b92915050565b610cfc81610b12565b82525050565b6000602082019050610d176000830184610cf3565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112610d4257610d41610d1d565b5b8235905067ffffffffffffffff811115610d5f57610d5e610d22565b5b602083019150836020820283011115610d7b57610d7a610d27565b5b9250929050565b60008060208385031215610d9957610d98610b08565b5b600083013567ffffffffffffffff811115610db757610db6610b0d565b5b610dc385828601610d2c565b92509250509250929050565b6000610dda82610be3565b9050919050565b610dea81610dcf565b8114610df557600080fd5b50565b600081359050610e0781610de1565b92915050565b600081905082602060080282011115610e2957610e28610d27565b5b92915050565b60008060006101408486031215610e4957610e48610b08565b5b6000610e5786828701610b33565b9350506020610e6886828701610df8565b9250506040610e7986828701610e0d565b9150509250925092565b6000610e8e82610be3565b9050919050565b610e9e81610e83565b82525050565b6000602082019050610eb96000830184610e95565b92915050565b610ec881610e83565b8114610ed357600080fd5b50565b600081359050610ee581610ebf565b92915050565b600060208284031215610f0157610f00610b08565b5b6000610f0f84828501610ed6565b91505092915050565b600081519050610f2781610b1c565b92915050565b600060208284031215610f4357610f42610b08565b5b6000610f5184828501610f18565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082825260208201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000610ff6602683610f89565b915061100182610f9a565b604082019050919050565b6000602082019050818103600083015261102581610fe9565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000611062602083610f89565b915061106d8261102c565b602082019050919050565b6000602082019050818103600083015261109181611055565b9050919050565b60006040820190506110ad6000830185610cf3565b6110ba6020830184610cf3565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006110fb82610b12565b915061110683610b12565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561113b5761113a6110c1565b5b82820190509291505056fea2646970667358221220507a65829a9a551e42c8757b2613a358880e56baec43e730dff9d9aa252c9a3564736f6c634300080f0033a26469706673582212208cc71be49f97f4fad7da0c74d0576129e139d0ef30e3ac4be6a3214675ab1d5264736f6c634300080f0033" +when not defined(rln_v2): + # PoseidonHasherCode holds the bytecode of Poseidon hasher solidity smart contract: + # https://github.com/kilic/rlnapp/blob/master/packages/contracts/contracts/crypto/PoseidonHasher.sol + # the solidity contract is compiled separately and the resultant bytecode is copied here + const PoseidonHasherCode* = "0x608060405234801561001057600080fd5b50613e58806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063b189fd4c1461003b578063e493ef8c1461006b575b600080fd5b61005560048036038101906100509190613dcb565b610089565b6040516100629190613e07565b60405180910390f35b61007361009b565b6040516100809190613e07565b60405180910390f35b6000610094826100bf565b9050919050565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181565b60007f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000017f09c46e9ec68e9bd4fe1faaba294cba38a71aa177534cdd1b6c7dc0dbd0abd7a77f0c0356530896eec42a97ed937f3135cfc5142b3ae405b8343c1d83ffa604cb81840182828309838385838409099250838283099050838285838409099150837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f1e28a1d935698ad1142e51182bb54cf4a00ea5aabd6268bd317ea977cc154a30830192507f27af2d831a9d2748080965db30e298e40e5757c3e008db964cf9e2b12b91251f82019150838384099050838385838409099250838283099050838285838409099150837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f1e6f11ce60fc8f513a6a3cfe16ae175a41291462f214cd0879aaf43545b74e03830192507f2a67384d3bbd5e438541819cb681f0be04462ed14c3613d8f719206268d142d382019150838384099050838385838409099250838283099050838285838409099150837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f0b66fdf356093a611609f8e12fbfecf0b985e381f025188936408f5d5c9f45d0830192507f012ee3ec1e78d470830c61093c2ade370b26c83cc5cebeeddaa6852dbdb09e2182019150838384099050838385838409099250838283099050838285838409099150837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f0252ba5f6760bfbdfd88f67f8175e3fd6cd1c431b099b6bb2d108e7b445bb1b9830192507f179474cceca5ff676c6bec3cef54296354391a8935ff71d6ef5aeaad7ca932f182019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f2c24261379a51bfa9228ff4a503fd4ed9c1f974a264969b37e1a2589bbed2b91830192507f1cc1d7b62692e63eac2f288bd0695b43c2f63f5001fc0fc553e66c0551801b0582019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f255059301aada98bb2ed55f852979e9600784dbf17fbacd05d9eff5fd9c91b56830192507f28437be3ac1cb2e479e1f5c0eccd32b3aea24234970a8193b11c29ce7e59efd982019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f28216a442f2e1f711ca4fa6b53766eb118548da8fb4f78d4338762c37f5f2043830192507f2c1f47cd17fa5adf1f39f4e7056dd03feee1efce03094581131f2377323482c982019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f07abad02b7a5ebc48632bcc9356ceb7dd9dafca276638a63646b8566a621afc9830192507f0230264601ffdf29275b33ffaab51dfe9429f90880a69cd137da0c4d15f96c3c82019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f1bc973054e51d905a0f168656497ca40a864414557ee289e717e5d66899aa0a9830192507f2e1c22f964435008206c3157e86341edd249aff5c2d8421f2a6b22288f0a67fc82019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f1224f38df67c5378121c1d5f461bbc509e8ea1598e46c9f7a70452bc2bba86b8830192507f02e4e69d8ba59e519280b4bd9ed0068fd7bfe8cd9dfeda1969d2989186cde20e82019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f1f1eccc34aaba0137f5df81fc04ff3ee4f19ee364e653f076d47e9735d98018e830192507f1672ad3d709a353974266c3039a9a7311424448032cd1819eacb8a4d4284f58282019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f283e3fdc2c6e420c56f44af5192b4ae9cda6961f284d24991d2ed602df8c8fc7830192507f1c2a3d120c550ecfd0db0957170fa013683751f8fdff59d6614fbd69ff394bcc82019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f216f84877aac6172f7897a7323456efe143a9a43773ea6f296cb6b8177653fbd830192507f2c0d272becf2a75764ba7e8e3e28d12bceaa47ea61ca59a411a1f51552f9478882019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f16e34299865c0e28484ee7a74c454e9f170a5480abe0508fcb4a6c3d89546f43830192507f175ceba599e96f5b375a232a6fb9cc71772047765802290f48cd939755488fc582019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f0c7594440dc48c16fead9e1758b028066aa410bfbc354f54d8c5ffbb44a1ee32830192507f1a3c29bc39f21bb5c466db7d7eb6fd8f760e20013ccf912c92479882d919fd8d82019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f0ccfdd906f3426e5c0986ea049b253400855d349074f5a6695c8eeabcd22e68f830192507f14f6bc81d9f186f62bdb475ce6c9411866a7a8a3fd065b3ce0e699b67dd9e79682019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f0962b82789fb3d129702ca70b2f6c5aacc099810c9c495c888edeb7386b97052830192507f1a880af7074d18b3bf20c79de25127bc13284ab01ef02575afef0c8f6a31a86d82019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f10cba18419a6a332cd5e77f0211c154b20af2924fc20ff3f4c3012bb7ae9311b830192507f057e62a9a8f89b3ebdc76ba63a9eaca8fa27b7319cae3406756a2849f302f10d82019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f287c971de91dc0abd44adf5384b4988cb961303bbf65cff5afa0413b44280cee830192507f21df3388af1687bbb3bca9da0cca908f1e562bc46d4aba4e6f7f7960e306891d82019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f1be5c887d25bce703e25cc974d0934cd789df8f70b498fd83eff8b560e1682b3830192507f268da36f76e568fb68117175cea2cd0dd2cb5d42fda5acea48d59c2706a0d5c182019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f0e17ab091f6eae50c609beaf5510ececc5d8bb74135ebd05bd06460cc26a5ed6830192507f04d727e728ffa0a67aee535ab074a43091ef62d8cf83d270040f5caa1f62af4082019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f0ddbd7bf9c29341581b549762bc022ed33702ac10f1bfd862b15417d7e39ca6e830192507f2790eb3351621752768162e82989c6c234f5b0d1d3af9b588a29c49c8789654b82019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f1e457c601a63b73e4471950193d8a570395f3d9ab8b2fd0984b764206142f9e9830192507f21ae64301dca9625638d6ab2bbe7135ffa90ecd0c43ff91fc4c686fc46e091b082019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f0379f63c8ce3468d4da293166f494928854be9e3432e09555858534eed8d350b830192507e2d56420359d0266a744a080809e054ca0e4921a46686ac8c9f58a324c3504982019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f123158e5965b5d9b1d68b3cd32e10bbeda8d62459e21f4090fc2c5af963515a6830192507f0be29fc40847a941661d14bbf6cbe0420fbb2b6f52836d4e60c80eb49cad9ec182019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f1ac96991dec2bb0557716142015a453c36db9d859cad5f9a233802f24fdf4c1a830192507f1596443f763dbcc25f4964fc61d23b3e5e12c9fa97f18a9251ca3355bcb0627e82019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f12e0bcd3654bdfa76b2861d4ec3aeae0f1857d9f17e715aed6d049eae3ba3212830192507f0fc92b4f1bbea82b9ea73d4af9af2a50ceabac7f37154b1904e6c76c7cf964ba82019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f1f9c0b1610446442d6f2e592a8013f40b14f7c7722236f4f9c7e965233872762830192507f0ebd74244ae72675f8cde06157a782f4050d914da38b4c058d159f643dbbf4d382019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f2cb7f0ed39e16e9f69a9fafd4ab951c03b0671e97346ee397a839839dccfc6d1830192507f1a9d6e2ecff022cc5605443ee41bab20ce761d0514ce526690c72bca7352d9bf82019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f2a115439607f335a5ea83c3bc44a9331d0c13326a9a7ba3087da182d648ec72f830192507f23f9b6529b5d040d15b8fa7aee3e3410e738b56305cd44f29535c115c5a4c06082019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f05872c16db0f72a2249ac6ba484bb9c3a3ce97c16d58b68b260eb939f0e6e8a7830192507f1300bdee08bb7824ca20fb80118075f40219b6151d55b5c52b624a7cdeddf6a782019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f19b9b63d2f108e17e63817863a8f6c288d7ad29916d98cb1072e4e7b7d52b376830192507f015bee1357e3c015b5bda237668522f613d1c88726b5ec4224a20128481b4f7f82019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f2953736e94bb6b9f1b9707a4f1615e4efe1e1ce4bab218cbea92c785b128ffd1830192507f0b069353ba091618862f806180c0385f851b98d372b45f544ce7266ed6608dfc82019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f304f74d461ccc13115e4e0bcfb93817e55aeb7eb9306b64e4f588ac97d81f429830192507f15bbf146ce9bca09e8a33f5e77dfe4f5aad2a164a4617a4cb8ee5415cde913fc82019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f0ab4dfe0c2742cde44901031487964ed9b8f4b850405c10ca9ff23859572c8c6830192507f0e32db320a044e3197f45f7649a19675ef5eedfea546dea9251de39f9639779a82019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f0a1756aa1f378ca4b27635a78b6888e66797733a82774896a3078efa516da016830192507f044c4a33b10f693447fd17177f952ef895e61d328f85efa94254d6a2a25d93ef82019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f2ed3611b725b8a70be655b537f66f700fe0879d79a496891d37b07b5466c4b8b830192507f1f9ba4e8bab7ce42c8ecc3d722aa2e0eadfdeb9cfdd347b5d8339ea7120858aa82019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f1b233043052e8c288f7ee907a84e518aa38e82ac4502066db74056f865c5d3da830192507f2431e1cc164bb8d074031ab72bd55b4c902053bfc0f14db0ca2f97b02087595482019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f082f934c91f5aac330cd6953a0a7db45a13e322097583319a791f273965801fd830192507f2b9a0a223e7538b0a34be074315542a3c77245e2ae7cbe999ad6bb930c48997c82019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f0e1cd91edd2cfa2cceb85483b887a9be8164163e75a8a00eb0b589cc70214e7d830192507f2e1eac0f2bfdfd63c951f61477e3698999774f19854d00f588d324601cebe2f982019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f0cbfa95f37fb74060c76158e769d6d157345784d8efdb33c23d748115b500b83830192507f08f05b3be923ed44d65ad49d8a61e9a676d991e3a77513d9980c232dfa4a4f8482019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f22719e2a070bcd0852bf8e21984d0443e7284925dc0758a325a2dd510c047ef6830192507f041f596a9ee1cb2bc060f7fcc3a1ab4c7bdbf036119982c0f41f62b2f26830c082019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f233fd35de1be520a87628eb06f6b1d4c021be1c2d0dc464a19fcdd0986b10f89830192507f0524b46d1aa87a5e4325e0a423ebc810d31e078aa1b4707eefcb453c61c9c26782019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f2c34f424c81e5716ce47fcac894b85824227bb954b0f3199cc4486237c515211830192507f0b5f2a4b63387819207effc2b5541fb72dd2025b5457cc97f33010327de4915e82019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f22207856082ccc54c5b72fe439d2cfd6c17435d2f57af6ceaefac41fe05c659f830192507f24d57a8bf5da63fe4e24159b7f8950b5cdfb210194caf79f27854048ce2c817182019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f0afab181fdd5e0583b371d75bd693f98374ad7097bb01a8573919bb23b79396e830192507f2dba9b108f208772998a52efac7cbd5676c0057194c16c0bf16290d62b1128ee82019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f26349b66edb8b16f56f881c788f53f83cbb83de0bd592b255aff13e6bce420b3830192507f25af7ce0e5e10357685e95f92339753ad81a56d28ecc193b235288a3e6f137db82019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f25b4ce7bd2294390c094d6a55edd68b970eed7aae88b2bff1f7c0187fe35011f830192507f22c543f10f6c89ec387e53f1908a88e5de9cef28ebdf30b18cb9d54c1e02b63182019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f0236f93e7789c4724fc7908a9f191e1e425e906a919d7a34df668e74882f87a9830192507f29350b401166ca010e7d27e37d05da99652bdae114eb01659cb497af980c4b5282019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f0eed787d65820d3f6bd31bbab547f75a65edb75d844ebb89ee1260916652363f830192507f07cc1170f13b46f2036a753f520b3291fdcd0e99bd94297d1906f656f4de6fad82019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f22b939233b1d7205f49bcf613a3d30b1908786d7f9f5d10c2059435689e8acea830192507f01451762a0aab81c8aad1dc8bc33e870740f083a5aa85438add650ace60ae5a682019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f23506bb5d8727d4461fabf1025d46d1fe32eaa61dec7da57e704fec0892fce89830192507f2e484c44e838aea0bac06ae3f71bdd092a3709531e1efea97f8bd6890735552282019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f0f4bc7d07ebafd64379e78c50bd2e42baf4a594545cedc2545418da26835b54c830192507f1f4d3c8f6583e9e5fa76637862faaee851582388725df460e620996d50d8e74e82019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f093514e0c70711f82660d07be0e4a988fae02abc7b681d9153eb9bcb48fe7389830192507f1adab0c8e2b3bad346699a2b5f3bc03643ee83ece47228f24a58e0a347e153d882019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f1672b1726057d99dd14709ebb474641a378c1b94b8072bac1a22dbef9e80dad2830192507f1dfd53d4576af2e38f44f53fdcab468cc5d8e2fae0acc4ee30d47b239b479c1482019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f0c6888a10b75b0f3a70a36263a37e17fe6d77d640f6fc3debc7f207753205c60830192507f1addb933a65be77092b34a7e77d12fe8611a61e00ee6848b85091ecca9d1e50882019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507ed7540dcd268a845c10ae18d1de933cf638ff5425f0afff7935628e299d1791830192507f140c0e42687e9ead01b2827a5664ca9c26fedde4acd99db1d316939d20b82c0e82019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f2f0c3a115d4317d191ba89b8d13d1806c20a0f9b24f8c5edc091e2ae56565984830192507f0c4ee778ff7c14553006ed220cf9c81008a0cff670b22b82d8c538a1dc958c6182019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f1704f2766d46f82c3693f00440ccc3609424ed26c0acc66227c3d7485de74c69830192507f2f2d19cc3ea5d78ea7a02c1b51d244abf0769c9f8544e40239b66fe9009c3cfa82019150838384099050838385838409099250837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f1ae03853b75fcaba5053f112e2a8e8dcdd7ee6cb9cfed9c7d6c766a806fc6629830192507f0971aabf795241df51d131d0fa61aa5f3556921b2d6f014e4e41a86ddaf056d582019150838384099050838385838409099250838283099050838285838409099150837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f1408c316e6014e1a91d4cf6b6e0de73eda624f8380df1c875f5c29f7bfe2f646830192507f1667f3fe2edbe850248abe42b543093b6c89f1f773ef285341691f39822ef5bd82019150838384099050838385838409099250838283099050838285838409099150837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f13bf7c5d0d2c4376a48b0a03557cdf915b81718409e5c133424c69576500fe37830192507f07620a6dfb0b6cec3016adf3d3533c24024b95347856b79719bc0ba743a62c2c82019150838384099050838385838409099250838283099050838285838409099150837f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88309847f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad58509019050837f1274e649a32ed355a31a6ed69724e1adade857e86eb5c3a121bcd147943203c88309847f0cc57cdbb08507d62bf67a4493cc262fb6c09d557013fff1f573f431221f8ff985090191508092507f1574c7ef0c43545f36a8ca08bdbdd8b075d2959e2f322b731675de3e1982b4d0830192507f269e4b5b7a2eb21afd567970a717ceec5bd4184571c254fdc06e03a7ff8378f08201915083838409905083838583840909925083828309905083828583840909915083847f2b9d4b4110c9ae997782e1509b1d0fdb20a7c02bbd8bea7305462b9f8125b1e88409857f066f6f85d6f68a85ec10345351a23a3aaf07f38af8c952a7bceca70bd2af7ad586090106925082945050505050919050565b600080fd5b6000819050919050565b613da881613d95565b8114613db357600080fd5b50565b600081359050613dc581613d9f565b92915050565b600060208284031215613de157613de0613d90565b5b6000613def84828501613db6565b91505092915050565b613e0181613d95565b82525050565b6000602082019050613e1c6000830184613df8565b9291505056fea2646970667358221220f20e2267360e9aeb09de75ad232eed0f5dc05f7547d686c790b156f441d402b164736f6c634300080f0033" + + # RegistryContractCode contains the bytecode of the membership solidity smart contract: + # https://github.com/waku-org/rln-contract/blob/fbafa7b0bb47c5233f50ba82992c572795e7e9a6/deployments/sepolia/WakuRlnRegistry.json + # the solidity contract is compiled separately and the resultant bytecode is copied here + const RegistryContractCode* = "0x60a06040526000600260006101000a81548161ffff021916908361ffff1602179055503480156200002f57600080fd5b5060405162002f2a38038062002f2a8339818101604052810190620000559190620001e6565b6200007562000069620000b060201b60201c565b620000b860201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250505062000218565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620001ae8262000181565b9050919050565b620001c081620001a1565b8114620001cc57600080fd5b50565b600081519050620001e081620001b5565b92915050565b600060208284031215620001ff57620001fe6200017c565b5b60006200020f84828501620001cf565b91505092915050565b608051612ce862000242600039600081816103e2015281816104120152610ad80152612ce86000f3fe60806040523480156200001157600080fd5b5060043610620000e25760003560e01c8063ab02492a1162000099578063ef653d5e116200006f578063ef653d5e14620001d1578063f184ef4c14620001f1578063f2fde38b1462000213578063f5542147146200023357620000e2565b8063ab02492a1462000183578063cf61637414620001a3578063d44fda1f14620001c557620000e2565b806326e0fc1f14620000e7578063331b6ab3146200010757806342f542e21462000129578063715018a614620001355780637a34289d14620001415780638da5cb5b1462000161575b600080fd5b620001056004803603810190620000ff919062001045565b62000269565b005b62000111620003e0565b60405162000120919062001117565b60405180910390f35b6200013362000404565b005b6200013f6200048b565b005b6200015f6004803603810190620001599190620011a2565b620004a3565b005b6200016b6200075f565b6040516200017a91906200121c565b60405180910390f35b620001a160048036038101906200019b919062001239565b62000788565b005b620001ad6200088b565b604051620001bc9190620012b4565b60405180910390f35b620001cf6200089f565b005b620001ef6004803603810190620001e9919062001302565b62000a09565b005b620001fb62000c9e565b6040516200020a9190620012b4565b60405180910390f35b6200023160048036038101906200022b919062001302565b62000cb2565b005b6200025160048036038101906200024b919062001334565b62000d3c565b6040516200026091906200121c565b60405180910390f35b600060149054906101000a900461ffff1661ffff168261ffff1610620002bb576040517fd23276a200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600167ffffffffffffffff811115620002db57620002da62001366565b5b6040519080825280602002602001820160405280156200030a5781602001602082028036833780820191505090505b509050818160008151811062000325576200032462001395565b5b602002602001018181525050600160008461ffff1661ffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637a34289d826040518263ffffffff1660e01b8152600401620003a7919062001492565b600060405180830381600087803b158015620003c257600080fd5b505af1158015620003d7573d6000803e3d6000fd5b50505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6200040e62000d6f565b60007f0000000000000000000000000000000000000000000000000000000000000000600060149054906101000a900461ffff16604051620004509062000fb3565b6200045d929190620014b6565b604051809103906000f0801580156200047a573d6000803e3d6000fd5b509050620004888162000df4565b50565b6200049562000d6f565b620004a1600062000ee7565b565b600060149054906101000a900461ffff1661ffff16600260009054906101000a900461ffff1661ffff161062000505576040517fd23276a200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b6001156200075b5760016000600260009054906101000a900461ffff1661ffff1661ffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637a34289d83836040518363ffffffff1660e01b8152600401620005969291906200155a565b600060405180830381600087803b158015620005b157600080fd5b505af1925050508015620005c3575060015b6200074f573d8060008114620005f6576040519150601f19603f3d011682016040523d82523d6000602084013e620005fb565b606091505b506040516024016040516020818303038152906040527f57f69531000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050805190602001208180519060200120146200069c57805181602001fd5b600060149054906101000a900461ffff1661ffff166001600260009054906101000a900461ffff16620006d09190620015af565b61ffff16106200070c576040517fd23276a200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600260008282829054906101000a900461ffff166200072e9190620015af565b92506101000a81548161ffff021916908361ffff1602179055505062000755565b6200075b565b62000506565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600060149054906101000a900461ffff1661ffff168361ffff1610620007da576040517fd23276a200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160008461ffff1661ffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637a34289d83836040518363ffffffff1660e01b8152600401620008529291906200155a565b600060405180830381600087803b1580156200086d57600080fd5b505af115801562000882573d6000803e3d6000fd5b50505050505050565b600260009054906101000a900461ffff1681565b620008a962000d6f565b600060149054906101000a900461ffff1661ffff16600260009054906101000a900461ffff1661ffff16106200090b576040517fd23276a200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600160006001600260009054906101000a900461ffff16620009469190620015af565b61ffff1661ffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603620009cb576040517fd23276a200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600260008282829054906101000a900461ffff16620009ed9190620015af565b92506101000a81548161ffff021916908361ffff160217905550565b62000a1362000d6f565b600073ffffffffffffffffffffffffffffffffffffffff16600160008060149054906101000a900461ffff1661ffff1661ffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000ad157806040517f9cfabd1600000000000000000000000000000000000000000000000000000000815260040162000ac891906200121c565b60405180910390fd5b60008190507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663331b6ab36040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000b59573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b7f919062001633565b73ffffffffffffffffffffffffffffffffffffffff161462000bcc576040517eaec95400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060149054906101000a900461ffff1661ffff168173ffffffffffffffffffffffffffffffffffffffff166328b070e06040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000c2d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c5391906200167c565b61ffff161462000c8f576040517fb893b72300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62000c9a8262000df4565b5050565b600060149054906101000a900461ffff1681565b62000cbc62000d6f565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000d2e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000d259062001735565b60405180910390fd5b62000d398162000ee7565b50565b60016020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b62000d7962000fab565b73ffffffffffffffffffffffffffffffffffffffff1662000d996200075f565b73ffffffffffffffffffffffffffffffffffffffff161462000df2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000de990620017a7565b60405180910390fd5b565b80600160008060149054906101000a900461ffff1661ffff1661ffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fcf6a3b406170499209d0fcf152a1605c7c5a5c99c855e2bb803433fc960718eb600060149054906101000a900461ffff168260405162000ea0929190620017c9565b60405180910390a16001600060148282829054906101000a900461ffff1662000eca9190620015af565b92506101000a81548161ffff021916908361ffff16021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600033905090565b6114bc80620017f783390190565b600080fd5b600080fd5b600061ffff82169050919050565b62000fe48162000fcb565b811462000ff057600080fd5b50565b600081359050620010048162000fd9565b92915050565b6000819050919050565b6200101f816200100a565b81146200102b57600080fd5b50565b6000813590506200103f8162001014565b92915050565b600080604083850312156200105f576200105e62000fc1565b5b60006200106f8582860162000ff3565b925050602062001082858286016200102e565b9150509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000620010d7620010d1620010cb846200108c565b620010ac565b6200108c565b9050919050565b6000620010eb82620010b6565b9050919050565b6000620010ff82620010de565b9050919050565b6200111181620010f2565b82525050565b60006020820190506200112e600083018462001106565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126200115c576200115b62001134565b5b8235905067ffffffffffffffff8111156200117c576200117b62001139565b5b6020830191508360208202830111156200119b576200119a6200113e565b5b9250929050565b60008060208385031215620011bc57620011bb62000fc1565b5b600083013567ffffffffffffffff811115620011dd57620011dc62000fc6565b5b620011eb8582860162001143565b92509250509250929050565b600062001204826200108c565b9050919050565b6200121681620011f7565b82525050565b60006020820190506200123360008301846200120b565b92915050565b60008060006040848603121562001255576200125462000fc1565b5b6000620012658682870162000ff3565b935050602084013567ffffffffffffffff81111562001289576200128862000fc6565b5b620012978682870162001143565b92509250509250925092565b620012ae8162000fcb565b82525050565b6000602082019050620012cb6000830184620012a3565b92915050565b620012dc81620011f7565b8114620012e857600080fd5b50565b600081359050620012fc81620012d1565b92915050565b6000602082840312156200131b576200131a62000fc1565b5b60006200132b84828501620012eb565b91505092915050565b6000602082840312156200134d576200134c62000fc1565b5b60006200135d8482850162000ff3565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b620013fb816200100a565b82525050565b60006200140f8383620013f0565b60208301905092915050565b6000602082019050919050565b60006200143582620013c4565b620014418185620013cf565b93506200144e83620013e0565b8060005b838110156200148557815162001469888262001401565b975062001476836200141b565b92505060018101905062001452565b5085935050505092915050565b60006020820190508181036000830152620014ae818462001428565b905092915050565b6000604082019050620014cd60008301856200120b565b620014dc6020830184620012a3565b9392505050565b600080fd5b82818337600083830152505050565b6000620015058385620013cf565b93507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8311156200153b576200153a620014e3565b5b6020830292506200154e838584620014e8565b82840190509392505050565b6000602082019050818103600083015262001577818486620014f7565b90509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620015bc8262000fcb565b9150620015c98362000fcb565b92508261ffff03821115620015e357620015e262001580565b5b828201905092915050565b6000620015fb82620011f7565b9050919050565b6200160d81620015ee565b81146200161957600080fd5b50565b6000815190506200162d8162001602565b92915050565b6000602082840312156200164c576200164b62000fc1565b5b60006200165c848285016200161c565b91505092915050565b600081519050620016768162000fd9565b92915050565b60006020828403121562001695576200169462000fc1565b5b6000620016a58482850162001665565b91505092915050565b600082825260208201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006200171d602683620016ae565b91506200172a82620016bf565b604082019050919050565b6000602082019050818103600083015262001750816200170e565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200178f602083620016ae565b91506200179c8262001757565b602082019050919050565b60006020820190508181036000830152620017c28162001780565b9050919050565b6000604082019050620017e06000830185620012a3565b620017ef60208301846200120b565b939250505056fe61016060405260006001553480156200001757600080fd5b50604051620014bc380380620014bc83398181016040528101906200003d919062000290565b6000601483600062000064620000586200011b60201b60201c565b6200012360201b60201c565b83608081815250508260a08181525050826001901b60c081815250508173ffffffffffffffffffffffffffffffffffffffff1660e08173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff166101008173ffffffffffffffffffffffffffffffffffffffff16815250504363ffffffff166101208163ffffffff1681525050505050508061ffff166101408161ffff16815250505050620002d7565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200021982620001ec565b9050919050565b6200022b816200020c565b81146200023757600080fd5b50565b6000815190506200024b8162000220565b92915050565b600061ffff82169050919050565b6200026a8162000251565b81146200027657600080fd5b50565b6000815190506200028a816200025f565b92915050565b60008060408385031215620002aa57620002a9620001e7565b5b6000620002ba858286016200023a565b9250506020620002cd8582860162000279565b9150509250929050565b60805160a05160c05160e05161010051610120516101405161117c620003406000396000610545015260006105e3015260006105690152600081816104ac015261058d0152600081816107560152610aac015260006106fc015260006107ac015261117c6000f3fe60806040526004361061011f5760003560e01c80638be9b119116100a0578063c5b208ff11610064578063c5b208ff146103c5578063d0383d6814610402578063f207564e1461042d578063f220b9ec14610449578063f2fde38b146104745761011f565b80638be9b119146102de5780638da5cb5b1461030757806398366e3514610332578063ae74552a1461035d578063bc499128146103885761011f565b80634add651e116100e75780634add651e146101f95780635daf08ca146102245780636bdcc8ab14610261578063715018a61461029e5780637a34289d146102b55761011f565b806322d9730c1461012457806328b070e0146101615780632b7ac3f31461018c578063331b6ab3146101b75780633ccfd60b146101e2575b600080fd5b34801561013057600080fd5b5061014b60048036038101906101469190610b48565b61049d565b6040516101589190610b90565b60405180910390f35b34801561016d57600080fd5b50610176610543565b6040516101839190610bc8565b60405180910390f35b34801561019857600080fd5b506101a1610567565b6040516101ae9190610c62565b60405180910390f35b3480156101c357600080fd5b506101cc61058b565b6040516101d99190610c9e565b60405180910390f35b3480156101ee57600080fd5b506101f76105af565b005b34801561020557600080fd5b5061020e6105e1565b60405161021b9190610cd8565b60405180910390f35b34801561023057600080fd5b5061024b60048036038101906102469190610b48565b610605565b6040516102589190610d02565b60405180910390f35b34801561026d57600080fd5b5061028860048036038101906102839190610b48565b61061d565b6040516102959190610b90565b60405180910390f35b3480156102aa57600080fd5b506102b361063d565b005b3480156102c157600080fd5b506102dc60048036038101906102d79190610d82565b610651565b005b3480156102ea57600080fd5b5061030560048036038101906103009190610e2f565b61069f565b005b34801561031357600080fd5b5061031c6106d1565b6040516103299190610ea4565b60405180910390f35b34801561033e57600080fd5b506103476106fa565b6040516103549190610d02565b60405180910390f35b34801561036957600080fd5b5061037261071e565b60405161037f9190610d02565b60405180910390f35b34801561039457600080fd5b506103af60048036038101906103aa9190610b48565b610724565b6040516103bc9190610d02565b60405180910390f35b3480156103d157600080fd5b506103ec60048036038101906103e79190610eeb565b61073c565b6040516103f99190610d02565b60405180910390f35b34801561040e57600080fd5b50610417610754565b6040516104249190610d02565b60405180910390f35b61044760048036038101906104429190610b48565b610778565b005b34801561045557600080fd5b5061045e6107aa565b60405161046b9190610d02565b60405180910390f35b34801561048057600080fd5b5061049b60048036038101906104969190610eeb565b6107ce565b005b600080821415801561053c57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e493ef8c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610515573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105399190610f2d565b82105b9050919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b6040517fd623472500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b60036020528060005260406000206000915090505481565b60046020528060005260406000206000915054906101000a900460ff1681565b610645610851565b61064f60006108cf565b565b610659610851565b600082829050905060005b818110156106995761068e84848381811061068257610681610f5a565b5b90506020020135610993565b806001019050610664565b50505050565b6040517fd623472500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b60015481565b60026020528060005260406000206000915090505481565b60056020528060005260406000206000915090505481565b7f000000000000000000000000000000000000000000000000000000000000000081565b6040517fd623472500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b6107d6610851565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610845576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083c9061100c565b60405180910390fd5b61084e816108cf565b50565b610859610a0c565b73ffffffffffffffffffffffffffffffffffffffff166108776106d1565b73ffffffffffffffffffffffffffffffffffffffff16146108cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c490611078565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61099c81610a14565b600160036000838152602001908152602001600020819055507f5a92c2530f207992057b9c3e544108ffce3beda4a63719f316967c49bf6159d2816001546040516109e8929190611098565b60405180910390a16001806000828254610a0291906110f0565b9250508190555050565b600033905090565b610a1d8161049d565b610a5e57806040517f7f3e75af000000000000000000000000000000000000000000000000000000008152600401610a559190610d02565b60405180910390fd5b6000600360008381526020019081526020016000205414610aaa576040517e0a60f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000060015410610b05576040517f57f6953100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b600080fd5b600080fd5b6000819050919050565b610b2581610b12565b8114610b3057600080fd5b50565b600081359050610b4281610b1c565b92915050565b600060208284031215610b5e57610b5d610b08565b5b6000610b6c84828501610b33565b91505092915050565b60008115159050919050565b610b8a81610b75565b82525050565b6000602082019050610ba56000830184610b81565b92915050565b600061ffff82169050919050565b610bc281610bab565b82525050565b6000602082019050610bdd6000830184610bb9565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000610c28610c23610c1e84610be3565b610c03565b610be3565b9050919050565b6000610c3a82610c0d565b9050919050565b6000610c4c82610c2f565b9050919050565b610c5c81610c41565b82525050565b6000602082019050610c776000830184610c53565b92915050565b6000610c8882610c2f565b9050919050565b610c9881610c7d565b82525050565b6000602082019050610cb36000830184610c8f565b92915050565b600063ffffffff82169050919050565b610cd281610cb9565b82525050565b6000602082019050610ced6000830184610cc9565b92915050565b610cfc81610b12565b82525050565b6000602082019050610d176000830184610cf3565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112610d4257610d41610d1d565b5b8235905067ffffffffffffffff811115610d5f57610d5e610d22565b5b602083019150836020820283011115610d7b57610d7a610d27565b5b9250929050565b60008060208385031215610d9957610d98610b08565b5b600083013567ffffffffffffffff811115610db757610db6610b0d565b5b610dc385828601610d2c565b92509250509250929050565b6000610dda82610be3565b9050919050565b610dea81610dcf565b8114610df557600080fd5b50565b600081359050610e0781610de1565b92915050565b600081905082602060080282011115610e2957610e28610d27565b5b92915050565b60008060006101408486031215610e4957610e48610b08565b5b6000610e5786828701610b33565b9350506020610e6886828701610df8565b9250506040610e7986828701610e0d565b9150509250925092565b6000610e8e82610be3565b9050919050565b610e9e81610e83565b82525050565b6000602082019050610eb96000830184610e95565b92915050565b610ec881610e83565b8114610ed357600080fd5b50565b600081359050610ee581610ebf565b92915050565b600060208284031215610f0157610f00610b08565b5b6000610f0f84828501610ed6565b91505092915050565b600081519050610f2781610b1c565b92915050565b600060208284031215610f4357610f42610b08565b5b6000610f5184828501610f18565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082825260208201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000610ff6602683610f89565b915061100182610f9a565b604082019050919050565b6000602082019050818103600083015261102581610fe9565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000611062602083610f89565b915061106d8261102c565b602082019050919050565b6000602082019050818103600083015261109181611055565b9050919050565b60006040820190506110ad6000830185610cf3565b6110ba6020830184610cf3565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006110fb82610b12565b915061110683610b12565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561113b5761113a6110c1565b5b82820190509291505056fea2646970667358221220507a65829a9a551e42c8757b2613a358880e56baec43e730dff9d9aa252c9a3564736f6c634300080f0033a26469706673582212208cc71be49f97f4fad7da0c74d0576129e139d0ef30e3ac4be6a3214675ab1d5264736f6c634300080f0033" +else: + # This contract code is used in deployment, note: this is not the deployedBytecode, it includes constructor args. + # Ref: https://github.com/waku-org/waku-rln-contract/blob/886891b57ae54e439563023dd50161fec5ee29f1/deployments/sepolia/WakuRlnRegistry_Implementation.json + const RegistryContractCode* = "0x60a06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff168152506000606760006101000a81548161ffff021916908361ffff16021790555034801561006157600080fd5b50608051614429610099600039600081816106870152818161071801528181610922015281816109b30152610a6c01526144296000f3fe6080604052600436106200010a5760003560e01c80638da5cb5b1162000097578063f184ef4c1162000061578063f184ef4c14620002f3578063f2fde38b1462000323578063f55421471462000351578063fc6ed4641462000395576200010a565b80638da5cb5b146200024b578063cf616374146200027b578063d44fda1f14620002ab578063ef653d5e14620002c5576200010a565b806352d1902d11620000d957806352d1902d14620001b95780635a244efd14620001e9578063715018a614620002175780638129fc1c1462000231576200010a565b80632de999bf146200010f5780633659cfe6146200013d57806339c0364b146200016b5780634f1ef2861462000199575b600080fd5b3480156200011c57600080fd5b506200013b60048036038101906200013591906200197b565b620003c3565b005b3480156200014a57600080fd5b5062000169600480360381019062000163919062001a6e565b62000685565b005b3480156200017857600080fd5b5062000197600480360381019062000191919062001b1a565b6200081d565b005b620001b76004803603810190620001b1919062001cd3565b62000920565b005b348015620001c657600080fd5b50620001d162000a68565b604051620001e0919062001d54565b60405180910390f35b348015620001f657600080fd5b506200021560048036038101906200020f919062001d71565b62000b24565b005b3480156200022457600080fd5b506200022f62000bc7565b005b3480156200023e57600080fd5b506200024962000bdf565b005b3480156200025857600080fd5b506200026362000d2b565b60405162000272919062001db4565b60405180910390f35b3480156200028857600080fd5b506200029362000d55565b604051620002a2919062001de2565b60405180910390f35b348015620002b857600080fd5b50620002c362000d69565b005b348015620002d257600080fd5b50620002f16004803603810190620002eb919062001a6e565b62000e13565b005b3480156200030057600080fd5b506200030b62000ef4565b6040516200031a919062001de2565b60405180910390f35b3480156200033057600080fd5b506200034f600480360381019062000349919062001a6e565b62000f08565b005b3480156200035e57600080fd5b506200037d600480360381019062000377919062001dff565b62000f92565b6040516200038c919062001db4565b60405180910390f35b348015620003a257600080fd5b50620003c16004803603810190620003bb919062001e31565b62000fc5565b005b606560009054906101000a900461ffff1661ffff16606760009054906101000a900461ffff1661ffff161062000425576040517fd23276a200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b6001156200067f5760666000606760009054906101000a900461ffff1661ffff1661ffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632de999bf858585856040518563ffffffff1660e01b8152600401620004ba949392919062001f57565b600060405180830381600087803b158015620004d557600080fd5b505af1925050508015620004e7575060015b62000673573d80600081146200051a576040519150601f19603f3d011682016040523d82523d6000602084013e6200051f565b606091505b506040516024016040516020818303038152906040527f57f69531000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505080519060200120818051906020012014620005c057805181602001fd5b606560009054906101000a900461ffff1661ffff166001606760009054906101000a900461ffff16620005f4919062001fc5565b61ffff161062000630576040517fd23276a200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001606760008282829054906101000a900461ffff1662000652919062001fc5565b92506101000a81548161ffff021916908361ffff1602179055505062000679565b6200067f565b62000426565b50505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff160362000716576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200070d9062002089565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1662000757620010ce565b73ffffffffffffffffffffffffffffffffffffffff1614620007b0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007a79062002121565b60405180910390fd5b620007bb8162001127565b6200081a81600067ffffffffffffffff811115620007de57620007dd62001b8c565b5b6040519080825280601f01601f191660200182016040528015620008115781602001600182028036833780820191505090505b50600062001134565b50565b606560009054906101000a900461ffff1661ffff168361ffff16106200086f576040517fd23276a200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606660008461ffff1661ffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d66d6c1083836040518363ffffffff1660e01b8152600401620008e792919062002154565b600060405180830381600087803b1580156200090257600080fd5b505af115801562000917573d6000803e3d6000fd5b50505050505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1603620009b1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009a89062002089565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16620009f2620010ce565b73ffffffffffffffffffffffffffffffffffffffff161462000a4b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a429062002121565b60405180910390fd5b62000a568262001127565b62000a648282600162001134565b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161462000afb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000af290620021f7565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b62000b2e620012b3565b6000810362000b69576040517fe671aff300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081606560009054906101000a900461ffff1660405162000b8b90620018eb565b62000b9892919062002219565b604051809103906000f08015801562000bb5573d6000803e3d6000fd5b50905062000bc38162001338565b5050565b62000bd1620012b3565b62000bdd60006200142c565b565b60008060019054906101000a900460ff1615905080801562000c115750600160008054906101000a900460ff1660ff16105b8062000c42575062000c2330620014f2565b15801562000c415750600160008054906101000a900460ff1660ff16145b5b62000c84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c7b90620022bc565b60405180910390fd5b60016000806101000a81548160ff021916908360ff160217905550801562000cc2576001600060016101000a81548160ff0219169083151502179055505b62000ccc62001515565b801562000d285760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498600160405162000d1f919062002338565b60405180910390a15b50565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606760009054906101000a900461ffff1681565b62000d73620012b3565b606560009054906101000a900461ffff1661ffff16606760009054906101000a900461ffff1661ffff161062000dd5576040517fd23276a200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001606760008282829054906101000a900461ffff1662000df7919062001fc5565b92506101000a81548161ffff021916908361ffff160217905550565b62000e1d620012b3565b6000819050606560009054906101000a900461ffff1661ffff168173ffffffffffffffffffffffffffffffffffffffff166328b070e06040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000e83573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000ea991906200236c565b61ffff161462000ee5576040517fb893b72300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62000ef08262001338565b5050565b606560009054906101000a900461ffff1681565b62000f12620012b3565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000f84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000f7b9062002414565b60405180910390fd5b62000f8f816200142c565b50565b60666020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606560009054906101000a900461ffff1661ffff168561ffff161062001017576040517fd23276a200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606660008661ffff1661ffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632de999bf858585856040518563ffffffff1660e01b815260040162001093949392919062001f57565b600060405180830381600087803b158015620010ae57600080fd5b505af1158015620010c3573d6000803e3d6000fd5b505050505050505050565b6000620010fe7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b62001573565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b62001131620012b3565b50565b620011627f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b6200157d565b60000160009054906101000a900460ff16156200118a57620011848362001587565b620012ae565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015620011f557506040513d601f19601f82011682018060405250810190620011f2919062002467565b60015b62001237576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200122e906200250f565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b81146200129f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200129690620025a7565b60405180910390fd5b50620012ad83838362001647565b5b505050565b620012bd62001679565b73ffffffffffffffffffffffffffffffffffffffff16620012dd62000d2b565b73ffffffffffffffffffffffffffffffffffffffff161462001336576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200132d9062002619565b60405180910390fd5b565b8060666000606560009054906101000a900461ffff1661ffff1661ffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fcf6a3b406170499209d0fcf152a1605c7c5a5c99c855e2bb803433fc960718eb606560009054906101000a900461ffff1682604051620013e59291906200263b565b60405180910390a16001606560008282829054906101000a900461ffff166200140f919062001fc5565b92506101000a81548161ffff021916908361ffff16021790555050565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600060019054906101000a900460ff1662001567576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200155e90620026de565b60405180910390fd5b6200157162001681565b565b6000819050919050565b6000819050919050565b6200159281620016e9565b620015d4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620015cb9062002776565b60405180910390fd5b80620016037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b62001573565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b62001652836200170c565b600082511180620016605750805b1562001674576200167283836200175d565b505b505050565b600033905090565b600060019054906101000a900460ff16620016d3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620016ca90620026de565b60405180910390fd5b620016e7620016e162001679565b6200142c565b565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b620017178162001587565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b6060620017858383604051806060016040528060278152602001620043cd602791396200178d565b905092915050565b60606000808573ffffffffffffffffffffffffffffffffffffffff1685604051620017b9919062002811565b600060405180830381855af49150503d8060008114620017f6576040519150601f19603f3d011682016040523d82523d6000602084013e620017fb565b606091505b50915091506200180e8683838762001819565b925050509392505050565b60608315620018835760008351036200187a576200183785620016e9565b62001879576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162001870906200287a565b60405180910390fd5b5b82905062001890565b6200188f838362001898565b5b949350505050565b600082511115620018ac5781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620018e29190620028e8565b60405180910390fd5b611ac0806200290d83390190565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f8401126200193557620019346200190d565b5b8235905067ffffffffffffffff81111562001955576200195462001912565b5b60208301915083602082028301111562001974576200197362001917565b5b9250929050565b6000806000806040858703121562001998576200199762001903565b5b600085013567ffffffffffffffff811115620019b957620019b862001908565b5b620019c7878288016200191c565b9450945050602085013567ffffffffffffffff811115620019ed57620019ec62001908565b5b620019fb878288016200191c565b925092505092959194509250565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062001a368262001a09565b9050919050565b62001a488162001a29565b811462001a5457600080fd5b50565b60008135905062001a688162001a3d565b92915050565b60006020828403121562001a875762001a8662001903565b5b600062001a978482850162001a57565b91505092915050565b600061ffff82169050919050565b62001ab98162001aa0565b811462001ac557600080fd5b50565b60008135905062001ad98162001aae565b92915050565b6000819050919050565b62001af48162001adf565b811462001b0057600080fd5b50565b60008135905062001b148162001ae9565b92915050565b60008060006060848603121562001b365762001b3562001903565b5b600062001b468682870162001ac8565b935050602062001b598682870162001b03565b925050604062001b6c8682870162001b03565b9150509250925092565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b62001bc68262001b7b565b810181811067ffffffffffffffff8211171562001be85762001be762001b8c565b5b80604052505050565b600062001bfd620018f9565b905062001c0b828262001bbb565b919050565b600067ffffffffffffffff82111562001c2e5762001c2d62001b8c565b5b62001c398262001b7b565b9050602081019050919050565b82818337600083830152505050565b600062001c6c62001c668462001c10565b62001bf1565b90508281526020810184848401111562001c8b5762001c8a62001b76565b5b62001c9884828562001c46565b509392505050565b600082601f83011262001cb85762001cb76200190d565b5b813562001cca84826020860162001c55565b91505092915050565b6000806040838503121562001ced5762001cec62001903565b5b600062001cfd8582860162001a57565b925050602083013567ffffffffffffffff81111562001d215762001d2062001908565b5b62001d2f8582860162001ca0565b9150509250929050565b6000819050919050565b62001d4e8162001d39565b82525050565b600060208201905062001d6b600083018462001d43565b92915050565b60006020828403121562001d8a5762001d8962001903565b5b600062001d9a8482850162001b03565b91505092915050565b62001dae8162001a29565b82525050565b600060208201905062001dcb600083018462001da3565b92915050565b62001ddc8162001aa0565b82525050565b600060208201905062001df9600083018462001dd1565b92915050565b60006020828403121562001e185762001e1762001903565b5b600062001e288482850162001ac8565b91505092915050565b60008060008060006060868803121562001e505762001e4f62001903565b5b600062001e608882890162001ac8565b955050602086013567ffffffffffffffff81111562001e845762001e8362001908565b5b62001e92888289016200191c565b9450945050604086013567ffffffffffffffff81111562001eb85762001eb762001908565b5b62001ec6888289016200191c565b92509250509295509295909350565b600082825260208201905092915050565b600080fd5b82818337505050565b600062001f02838562001ed5565b93507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83111562001f385762001f3762001ee6565b5b60208302925062001f4b83858462001eeb565b82840190509392505050565b6000604082019050818103600083015262001f7481868862001ef4565b9050818103602083015262001f8b81848662001ef4565b905095945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062001fd28262001aa0565b915062001fdf8362001aa0565b9250828201905061ffff81111562001ffc5762001ffb62001f96565b5b92915050565b600082825260208201905092915050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b600062002071602c8362002002565b91506200207e8262002013565b604082019050919050565b60006020820190508181036000830152620020a48162002062565b9050919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b600062002109602c8362002002565b91506200211682620020ab565b604082019050919050565b600060208201905081810360008301526200213c81620020fa565b9050919050565b6200214e8162001adf565b82525050565b60006040820190506200216b600083018562002143565b6200217a602083018462002143565b9392505050565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b6000620021df60388362002002565b9150620021ec8262002181565b604082019050919050565b600060208201905081810360008301526200221281620021d0565b9050919050565b600060408201905062002230600083018562002143565b6200223f602083018462001dd1565b9392505050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b6000620022a4602e8362002002565b9150620022b18262002246565b604082019050919050565b60006020820190508181036000830152620022d78162002295565b9050919050565b6000819050919050565b600060ff82169050919050565b6000819050919050565b6000620023206200231a6200231484620022de565b620022f5565b620022e8565b9050919050565b6200233281620022ff565b82525050565b60006020820190506200234f600083018462002327565b92915050565b600081519050620023668162001aae565b92915050565b60006020828403121562002385576200238462001903565b5b6000620023958482850162002355565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000620023fc60268362002002565b915062002409826200239e565b604082019050919050565b600060208201905081810360008301526200242f81620023ed565b9050919050565b620024418162001d39565b81146200244d57600080fd5b50565b600081519050620024618162002436565b92915050565b60006020828403121562002480576200247f62001903565b5b6000620024908482850162002450565b91505092915050565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b6000620024f7602e8362002002565b9150620025048262002499565b604082019050919050565b600060208201905081810360008301526200252a81620024e8565b9050919050565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b60006200258f60298362002002565b91506200259c8262002531565b604082019050919050565b60006020820190508181036000830152620025c28162002580565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200260160208362002002565b91506200260e82620025c9565b602082019050919050565b600060208201905081810360008301526200263481620025f2565b9050919050565b600060408201905062002652600083018562001dd1565b62002661602083018462001da3565b9392505050565b7f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960008201527f6e697469616c697a696e67000000000000000000000000000000000000000000602082015250565b6000620026c6602b8362002002565b9150620026d38262002668565b604082019050919050565b60006020820190508181036000830152620026f981620026b7565b9050919050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b60006200275e602d8362002002565b91506200276b8262002700565b604082019050919050565b6000602082019050818103600083015262002791816200274f565b9050919050565b600081519050919050565b600081905092915050565b60005b83811015620027ce578082015181840152602081019050620027b1565b60008484015250505050565b6000620027e78262002798565b620027f38185620027a3565b935062002805818560208601620027ae565b80840191505092915050565b60006200281f8284620027da565b915081905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b600062002862601d8362002002565b91506200286f826200282a565b602082019050919050565b60006020820190508181036000830152620028958162002853565b9050919050565b600081519050919050565b6000620028b4826200289c565b620028c0818562002002565b9350620028d2818560208601620027ae565b620028dd8162001b7b565b840191505092915050565b60006020820190508181036000830152620029048184620028a7565b90509291505056fe61016060405260006001553480156200001757600080fd5b5060405162001ac038038062001ac083398181016040528101906200003d91906200023a565b600060148360006200006462000058620000ef60201b60201c565b620000f760201b60201c565b8360a0818152505081608081815250508260c08181525050826001901b60e081815250508073ffffffffffffffffffffffffffffffffffffffff166101008173ffffffffffffffffffffffffffffffffffffffff16815250504363ffffffff166101208163ffffffff1681525050505050508061ffff166101408161ffff1681525050505062000281565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b6000819050919050565b620001d581620001c0565b8114620001e157600080fd5b50565b600081519050620001f581620001ca565b92915050565b600061ffff82169050919050565b6200021481620001fb565b81146200022057600080fd5b50565b600081519050620002348162000209565b92915050565b60008060408385031215620002545762000253620001bb565b5b60006200026485828601620001e4565b9250506020620002778582860162000223565b9150509250929050565b60805160a05160c05160e0516101005161012051610140516117cf620002f16000396000610661015260006107c401526000610685015260008181610a4a0152610f24015260006109f001526000818161075f0152610aa00152600081816106050152610dd201526117cf6000f3fe6080604052600436106101665760003560e01c80638be9b119116100d1578063bc4991281161008a578063d66d6c1011610064578063d66d6c1014610568578063e493ef8c14610584578063f220b9ec146105af578063f2fde38b146105da57610166565b8063bc499128146104c3578063c5b208ff14610500578063d0383d681461053d57610166565b80638be9b1191461039f5780638da5cb5b146103c85780639056a9bf146103f3578063933ebfdd1461043057806398366e351461046d578063ae74552a1461049857610166565b80633ccfd60b116101235780633ccfd60b1461028f5780634add651e146102a65780635daf08ca146102d15780636bdcc8ab1461030e578063715018a61461034b5780637671ac051461036257610166565b806309aeb04c1461016b57806322d9730c1461019657806328b070e0146101d35780632b7ac3f3146101fe5780632de999bf14610229578063378de45b14610252575b600080fd5b34801561017757600080fd5b50610180610603565b60405161018d9190610f9c565b60405180910390f35b3480156101a257600080fd5b506101bd60048036038101906101b89190610fed565b610627565b6040516101ca9190611035565b60405180910390f35b3480156101df57600080fd5b506101e861065f565b6040516101f5919061106d565b60405180910390f35b34801561020a57600080fd5b50610213610683565b6040516102209190611107565b60405180910390f35b34801561023557600080fd5b50610250600480360381019061024b9190611187565b6106a7565b005b34801561025e57600080fd5b5061027960048036038101906102749190610fed565b61075b565b6040516102869190610f9c565b60405180910390f35b34801561029b57600080fd5b506102a4610790565b005b3480156102b257600080fd5b506102bb6107c2565b6040516102c89190611227565b60405180910390f35b3480156102dd57600080fd5b506102f860048036038101906102f39190610fed565b6107e6565b6040516103059190610f9c565b60405180910390f35b34801561031a57600080fd5b5061033560048036038101906103309190610fed565b6107fe565b6040516103429190611035565b60405180910390f35b34801561035757600080fd5b5061036061081e565b005b34801561036e57600080fd5b5061038960048036038101906103849190610fed565b610832565b6040516103969190610f9c565b60405180910390f35b3480156103ab57600080fd5b506103c660048036038101906103c191906112a2565b61084a565b005b3480156103d457600080fd5b506103dd61085a565b6040516103ea9190611317565b60405180910390f35b3480156103ff57600080fd5b5061041a60048036038101906104159190610fed565b610883565b6040516104279190610f9c565b60405180910390f35b34801561043c57600080fd5b5061045760048036038101906104529190611332565b61089b565b6040516104649190611430565b60405180910390f35b34801561047957600080fd5b506104826109ee565b60405161048f9190610f9c565b60405180910390f35b3480156104a457600080fd5b506104ad610a12565b6040516104ba9190610f9c565b60405180910390f35b3480156104cf57600080fd5b506104ea60048036038101906104e59190610fed565b610a18565b6040516104f79190610f9c565b60405180910390f35b34801561050c57600080fd5b506105276004803603810190610522919061147e565b610a30565b6040516105349190610f9c565b60405180910390f35b34801561054957600080fd5b50610552610a48565b60405161055f9190610f9c565b60405180910390f35b610582600480360381019061057d9190611332565b610a6c565b005b34801561059057600080fd5b50610599610a7a565b6040516105a69190610f9c565b60405180910390f35b3480156105bb57600080fd5b506105c4610a9e565b6040516105d19190610f9c565b60405180910390f35b3480156105e657600080fd5b5061060160048036038101906105fc919061147e565b610ac2565b005b7f000000000000000000000000000000000000000000000000000000000000000081565b600080821415801561065857507f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000182105b9050919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b6106af610b45565b838383836106bf84848484610bc3565b6106f5576040517fb750624800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600088889050905060005b8181101561074f576107448a8a8381811061071e5761071d6114ab565b5b90506020020135898984818110610738576107376114ab565b5b90506020020135610bf5565b806001019050610700565b50505050505050505050565b60007f0000000000000000000000000000000000000000000000000000000000000000826107899190611509565b9050919050565b6040517fd623472500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b60036020528060005260406000206000915090505481565b60066020528060005260406000206000915054906101000a900460ff1681565b610826610b45565b6108306000610cd1565b565b60056020528060005260406000206000915090505481565b610855838383610d95565b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60046020528060005260406000206000915090505481565b60608183106108e35782826040517f9ffcd53d0000000000000000000000000000000000000000000000000000000081526004016108da92919061154b565b60405180910390fd5b60015482111561092c5782826040517f9ffcd53d00000000000000000000000000000000000000000000000000000000815260040161092392919061154b565b60405180910390fd5b6000838361093a9190611574565b67ffffffffffffffff811115610953576109526115a8565b5b6040519080825280602002602001820160405280156109815781602001602082028036833780820191505090505b50905060008490505b838110156109e35760056000828152602001908152602001600020548286836109b39190611574565b815181106109c4576109c36114ab565b5b60200260200101818152505080806109db906115d7565b91505061098a565b508091505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60015481565b60026020528060005260406000206000915090505481565b60076020528060005260406000206000915090505481565b7f000000000000000000000000000000000000000000000000000000000000000081565b610a768282610bf5565b5050565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f000000181565b7f000000000000000000000000000000000000000000000000000000000000000081565b610aca610b45565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610b39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b30906116a2565b60405180910390fd5b610b4281610cd1565b50565b610b4d610dc7565b73ffffffffffffffffffffffffffffffffffffffff16610b6b61085a565b73ffffffffffffffffffffffffffffffffffffffff1614610bc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb89061170e565b60405180910390fd5b565b6000808585905090506000848490509050808214610be657600092505050610bed565b6001925050505b949350505050565b610bff8282610dcf565b6001546003600084815260200190815260200160002081905550816005600060015481526020019081526020016000208190555060016006600084815260200190815260200160002060006101000a81548160ff0219169083151502179055508060046000848152602001908152602001600020819055507fff42916a89d1f5125f7f47168ee59c2b3fc9246ad1b229082ee85b69d001b5d78282600154604051610cac9392919061172e565b60405180910390a16001806000828254610cc69190611765565b925050819055505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6040517fd623472500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600033905090565b807f0000000000000000000000000000000000000000000000000000000000000000811115610e3557806040517f13a5e2ee000000000000000000000000000000000000000000000000000000008152600401610e2c9190610f9c565b60405180910390fd5b60008103610e7a57806040517f13a5e2ee000000000000000000000000000000000000000000000000000000008152600401610e719190610f9c565b60405180910390fd5b82610e8481610627565b610ec557806040517f7f3e75af000000000000000000000000000000000000000000000000000000008152600401610ebc9190610f9c565b60405180910390fd5b600115156006600086815260200190815260200160002060009054906101000a900460ff16151503610f22576040517e0a60f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000060015410610f7d576040517f57f6953100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6000819050919050565b610f9681610f83565b82525050565b6000602082019050610fb16000830184610f8d565b92915050565b600080fd5b600080fd5b610fca81610f83565b8114610fd557600080fd5b50565b600081359050610fe781610fc1565b92915050565b60006020828403121561100357611002610fb7565b5b600061101184828501610fd8565b91505092915050565b60008115159050919050565b61102f8161101a565b82525050565b600060208201905061104a6000830184611026565b92915050565b600061ffff82169050919050565b61106781611050565b82525050565b6000602082019050611082600083018461105e565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006110cd6110c86110c384611088565b6110a8565b611088565b9050919050565b60006110df826110b2565b9050919050565b60006110f1826110d4565b9050919050565b611101816110e6565b82525050565b600060208201905061111c60008301846110f8565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261114757611146611122565b5b8235905067ffffffffffffffff81111561116457611163611127565b5b6020830191508360208202830111156111805761117f61112c565b5b9250929050565b600080600080604085870312156111a1576111a0610fb7565b5b600085013567ffffffffffffffff8111156111bf576111be610fbc565b5b6111cb87828801611131565b9450945050602085013567ffffffffffffffff8111156111ee576111ed610fbc565b5b6111fa87828801611131565b925092505092959194509250565b600063ffffffff82169050919050565b61122181611208565b82525050565b600060208201905061123c6000830184611218565b92915050565b600061124d82611088565b9050919050565b61125d81611242565b811461126857600080fd5b50565b60008135905061127a81611254565b92915050565b60008190508260206008028201111561129c5761129b61112c565b5b92915050565b600080600061014084860312156112bc576112bb610fb7565b5b60006112ca86828701610fd8565b93505060206112db8682870161126b565b92505060406112ec86828701611280565b9150509250925092565b600061130182611088565b9050919050565b611311816112f6565b82525050565b600060208201905061132c6000830184611308565b92915050565b6000806040838503121561134957611348610fb7565b5b600061135785828601610fd8565b925050602061136885828601610fd8565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6113a781610f83565b82525050565b60006113b9838361139e565b60208301905092915050565b6000602082019050919050565b60006113dd82611372565b6113e7818561137d565b93506113f28361138e565b8060005b8381101561142357815161140a88826113ad565b9750611415836113c5565b9250506001810190506113f6565b5085935050505092915050565b6000602082019050818103600083015261144a81846113d2565b905092915050565b61145b816112f6565b811461146657600080fd5b50565b60008135905061147881611452565b92915050565b60006020828403121561149457611493610fb7565b5b60006114a284828501611469565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061151482610f83565b915061151f83610f83565b925082820261152d81610f83565b91508282048414831517611544576115436114da565b5b5092915050565b60006040820190506115606000830185610f8d565b61156d6020830184610f8d565b9392505050565b600061157f82610f83565b915061158a83610f83565b92508282039050818111156115a2576115a16114da565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006115e282610f83565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611614576116136114da565b5b600182019050919050565b600082825260208201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061168c60268361161f565b915061169782611630565b604082019050919050565b600060208201905081810360008301526116bb8161167f565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006116f860208361161f565b9150611703826116c2565b602082019050919050565b60006020820190508181036000830152611727816116eb565b9050919050565b60006060820190506117436000830186610f8d565b6117506020830185610f8d565b61175d6040830184610f8d565b949350505050565b600061177082610f83565b915061177b83610f83565b9250828201905080821115611793576117926114da565b5b9291505056fea2646970667358221220f3d63817472861b92ed47c1c0a059033d26762a83df789a2f02dba13d9cc3df464736f6c63430008130033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212206950adc7c418dd947ac3e184fb9f4d3a3206a03ca637b1c5a6fa23e8ae800c7464736f6c63430008130033" \ No newline at end of file From 3e65cc18f64c7b8fa0920026e64dbb9507ab0c2e Mon Sep 17 00:00:00 2001 From: Ivan FB <128452529+Ivansete-status@users.noreply.github.com> Date: Wed, 31 Jan 2024 17:43:59 +0100 Subject: [PATCH 205/274] REST store: get msgs from self node when store is mounted and no peerAddr is passed (#2387) A node that handles REST-Store requests normally acts as a Store-client and therefore it retrieved the messages from another Store-node. With these changes, we allow a node with Store mounted, to retrieve its messages. In other words, the node can act as a Store-server of its messages. * test_rest_store.nim: add a new test to validate that the self-node can retrieve its messages to the REST client. * rest/store/client.nim: add new proc to allow making a GET store request without peerAddr. * rest/store/handle.nim: add logic to handle requests that don't provide peerAddr but the self/local node has Store mounted. In this case, the self/local node will retrieve its locally stored messages. * waku_store/self_req_handler.nim: logic to handle "store" requests allowing the REST-store node to act as a Store-server node. The 'self_req_handler.nim' helps to bypass the store protocol and directly retrieve the messages from the local/self node. I added this logic in a separate file from 'protocol.nim' because it doesn't participate in any libp2p communication. * waku_store/protocol.nim: make 'queryHandler' attribute public so that it can be used from the 'self_req_handler.nim' module. --- tests/wakunode_rest/test_rest_store.nim | 64 +++++++++++++++++++++++++ waku/waku_api/rest/store/client.nim | 23 +++++++++ waku/waku_api/rest/store/handlers.nim | 57 +++++++++++++++------- waku/waku_store/protocol.nim | 2 +- waku/waku_store/self_req_handler.nim | 38 +++++++++++++++ 5 files changed, 167 insertions(+), 17 deletions(-) create mode 100644 waku/waku_store/self_req_handler.nim diff --git a/tests/wakunode_rest/test_rest_store.nim b/tests/wakunode_rest/test_rest_store.nim index d6063ebd5c..24cbf48b04 100644 --- a/tests/wakunode_rest/test_rest_store.nim +++ b/tests/wakunode_rest/test_rest_store.nim @@ -534,3 +534,67 @@ procSuite "Waku v2 Rest API - Store": await restServer.stop() await restServer.closeWait() await node.stop() + + + asyncTest "retrieve historical messages from a self-store-node": + ## This test aims to validate the correct message retrieval for a store-node which exposes + ## a REST server. + + # Given + let node = testWakuNode() + await node.start() + + let restPort = Port(58014) + let restAddress = parseIpAddress("0.0.0.0") + let restServer = RestServerRef.init(restAddress, restPort).tryGet() + + installStoreApiHandlers(restServer.router, node) + restServer.start() + + # WakuStore setup + let driver: ArchiveDriver = QueueDriver.new() + let mountArchiveRes = node.mountArchive(driver) + assert mountArchiveRes.isOk(), mountArchiveRes.error + + await node.mountStore() + + # Now prime it with some history before tests + let msgList = @[ + fakeWakuMessage(@[byte 0], contentTopic=ContentTopic("ct1"), ts=0), + fakeWakuMessage(@[byte 1], ts=1), + fakeWakuMessage(@[byte 9], contentTopic=ContentTopic("ct2"), ts=9) + ] + for msg in msgList: + require (waitFor driver.put(DefaultPubsubTopic, msg)).isOk() + + let client = newRestHttpClient(initTAddress(restAddress, restPort)) + + # Filtering by a known pubsub topic. + var response = + await client.getStoreMessagesV1( + none[string](), + encodeUrl(DefaultPubsubTopic)) + check: + response.status == 200 + $response.contentType == $MIMETYPE_JSON + response.data.messages.len == 3 + + # Get all the messages by specifying an empty pubsub topic + response = + await client.getStoreMessagesV1( + none[string](), + encodeUrl("")) + check: + response.status == 200 + $response.contentType == $MIMETYPE_JSON + response.data.messages.len == 3 + + # Receiving no messages by filtering with a random pubsub topic + response = + await client.getStoreMessagesV1( + none[string](), + encodeUrl("random pubsub topic")) + check: + response.status == 200 + $response.contentType == $MIMETYPE_JSON + response.data.messages.len == 0 diff --git a/waku/waku_api/rest/store/client.nim b/waku/waku_api/rest/store/client.nim index 71babc8e12..3e5c9dd80a 100644 --- a/waku/waku_api/rest/store/client.nim +++ b/waku/waku_api/rest/store/client.nim @@ -70,3 +70,26 @@ proc getStoreMessagesV1*( {.rest, endpoint: "/store/v1/messages", meth: HttpMethod.MethodGet.} + +proc getStoreMessagesV1*( + # URL-encoded reference to the store-node + peerAddr: Option[string], + pubsubTopic: string = "", + # URL-encoded comma-separated list of content topics + contentTopics: string = "", + startTime: string = "", + endTime: string = "", + + # Optional cursor fields + senderTime: string = "", + storeTime: string = "", + digest: string = "", # base64-encoded digest + + pageSize: string = "", + ascending: string = "" + ): + RestResponse[StoreResponseRest] + + {.rest, + endpoint: "/store/v1/messages", + meth: HttpMethod.MethodGet.} \ No newline at end of file diff --git a/waku/waku_api/rest/store/handlers.nim b/waku/waku_api/rest/store/handlers.nim index 57bcdaf613..8cdeef9031 100644 --- a/waku/waku_api/rest/store/handlers.nim +++ b/waku/waku_api/rest/store/handlers.nim @@ -13,6 +13,7 @@ import import ../../../waku_core, ../../../waku_store/common, + ../../../waku_store/self_req_handler, ../../../waku_node, ../../../node/peer_manager, ../../../common/paging, @@ -187,6 +188,24 @@ proc toOpt(self: Option[Result[string, cstring]]): Option[string] = if self.isSome() and self.get().value != "": return some(self.get().value) +proc retrieveMsgsFromSelfNode(self: WakuNode, histQuery: HistoryQuery): + Future[RestApiResponse] {.async.} = + ## Performs a "store" request to the local node (self node.) + ## Notice that this doesn't follow the regular store libp2p channel because a node + ## it is not allowed to libp2p-dial a node to itself, by default. + ## + + let selfResp = (await self.wakuStore.handleSelfStoreRequest(histQuery)).valueOr: + return RestApiResponse.internalServerError($error) + + let storeResp = selfResp.toStoreResponseRest() + let resp = RestApiResponse.jsonResponse(storeResp, status=Http200).valueOr: + const msg = "Error building the json respose" + error msg, error=error + return RestApiResponse.internalServerError(fmt("{msg} [{error}]")) + + return resp + # Subscribes the rest handler to attend "/store/v1/messages" requests proc installStoreApiHandlers*( router: var RestRouter, @@ -215,22 +234,6 @@ proc installStoreApiHandlers*( # Example: # /store/v1/messages?peerAddr=%2Fip4%2F127.0.0.1%2Ftcp%2F60001%2Fp2p%2F16Uiu2HAmVFXtAfSj4EiR7mL2KvL4EE2wztuQgUSBoj2Jx2KeXFLN\&pubsubTopic=my-waku-topic - # Parse the peer address parameter - let parsedPeerAddr = parseUrlPeerAddr(peerAddr.toOpt()).valueOr: - return RestApiResponse.badRequest(error) - - let peerAddr = parsedPeerAddr.valueOr: - node.peerManager.selectPeer(WakuStoreCodec).valueOr: - let handler = discHandler.valueOr: - return NoPeerNoDiscError - - let peerOp = (await handler()).valueOr: - return RestApiResponse.internalServerError($error) - - peerOp.valueOr: - return RestApiResponse.preconditionFailed( - "No suitable service peer & none discovered") - # Parse the rest of the parameters and create a HistoryQuery let histQuery = createHistoryQuery( pubsubTopic.toOpt(), @@ -247,4 +250,26 @@ proc installStoreApiHandlers*( if not histQuery.isOk(): return RestApiResponse.badRequest(histQuery.error) + if peerAddr.isNone() and not node.wakuStore.isNil(): + ## The user didn't specify a peer address and self-node is configured as a store node. + ## In this case we assume that the user is willing to retrieve the messages stored by + ## the local/self store node. + return await node.retrieveMsgsFromSelfNode(histQuery.get()) + + # Parse the peer address parameter + let parsedPeerAddr = parseUrlPeerAddr(peerAddr.toOpt()).valueOr: + return RestApiResponse.badRequest(error) + + let peerAddr = parsedPeerAddr.valueOr: + node.peerManager.selectPeer(WakuStoreCodec).valueOr: + let handler = discHandler.valueOr: + return NoPeerNoDiscError + + let peerOp = (await handler()).valueOr: + return RestApiResponse.internalServerError($error) + + peerOp.valueOr: + return RestApiResponse.preconditionFailed( + "No suitable service peer & none discovered") + return await node.performHistoryQuery(histQuery.value, peerAddr) \ No newline at end of file diff --git a/waku/waku_store/protocol.nim b/waku/waku_store/protocol.nim index 692ec962bd..4e085e3c8b 100644 --- a/waku/waku_store/protocol.nim +++ b/waku/waku_store/protocol.nim @@ -40,7 +40,7 @@ type WakuStore* = ref object of LPProtocol peerManager: PeerManager rng: ref rand.HmacDrbgContext - queryHandler: HistoryQueryHandler + queryHandler*: HistoryQueryHandler ## Protocol diff --git a/waku/waku_store/self_req_handler.nim b/waku/waku_store/self_req_handler.nim new file mode 100644 index 0000000000..9504109cc8 --- /dev/null +++ b/waku/waku_store/self_req_handler.nim @@ -0,0 +1,38 @@ + +## +## This file is aimed to attend the requests that come directly +## from the 'self' node. It is expected to attend the store requests that +## come from REST-store endpoint when those requests don't indicate +## any store-peer address. +## +## Notice that the REST-store requests normally assume that the REST +## server is acting as a store-client. In this module, we allow that +## such REST-store node can act as store-server as well by retrieving +## its own stored messages. The typical use case for that is when +## using `nwaku-compose`, which spawn a Waku node connected to a local +## database, and the user is interested in retrieving the messages +## stored by that local store node. +## + +import + stew/results, + chronos, + chronicles +import + ./protocol, + ./common + +proc handleSelfStoreRequest*(self: WakuStore, histQuery: HistoryQuery): + Future[WakuStoreResult[HistoryResponse]] {.async.} = + ## Handles the store requests made by the node to itself. + ## Normally used in REST-store requests + + try: + let resp: HistoryResponse = (await self.queryHandler(histQuery)).valueOr: + return err("error in handleSelfStoreRequest: " & $error) + + return WakuStoreResult[HistoryResponse].ok(resp) + + except Exception: + return err("exception in handleSelfStoreRequest: " & getCurrentExceptionMsg()) + From 59d8b6204f82b18600d053adc0dd669e260ba4c3 Mon Sep 17 00:00:00 2001 From: gabrielmer <101006718+gabrielmer@users.noreply.github.com> Date: Thu, 1 Feb 2024 18:16:10 +0100 Subject: [PATCH 206/274] feat: running validators in /relay/v1/messages/{pubsubTopic} (#2373) --- apps/wakunode2/app.nim | 4 +- apps/wakunode2/wakunode2_validator_signed.nim | 34 ++++++----- tests/waku_relay/test_protocol.nim | 4 +- tests/waku_relay/test_wakunode_relay.nim | 2 +- tests/wakunode2/test_validators.nim | 13 ++++- tests/wakunode_rest/test_rest_relay.nim | 49 +++++++++++++++- waku/node/waku_node.nim | 2 +- waku/waku_api/rest/relay/handlers.nim | 12 +--- waku/waku_relay/protocol.nim | 56 +++++++++++-------- 9 files changed, 121 insertions(+), 55 deletions(-) diff --git a/apps/wakunode2/app.nim b/apps/wakunode2/app.nim index f9dedaebe9..cfbb19ea1b 100644 --- a/apps/wakunode2/app.nim +++ b/apps/wakunode2/app.nim @@ -438,13 +438,15 @@ proc setupProtocols(node: WakuNode, return err("failed to mount waku relay protocol: " & getCurrentExceptionMsg()) # Add validation keys to protected topics + var subscribedProtectedTopics : seq[ProtectedTopic] for topicKey in conf.protectedTopics: if topicKey.topic notin pubsubTopics: warn "protected topic not in subscribed pubsub topics, skipping adding validator", protectedTopic=topicKey.topic, subscribedTopics=pubsubTopics continue + subscribedProtectedTopics.add(topicKey) notice "routing only signed traffic", protectedTopic=topicKey.topic, publicKey=topicKey.key - node.wakuRelay.addSignedTopicValidator(Pubsubtopic(topicKey.topic), topicKey.key) + node.wakuRelay.addSignedTopicsValidator(subscribedProtectedTopics) # Enable Rendezvous Discovery protocol when Relay is enabled try: diff --git a/apps/wakunode2/wakunode2_validator_signed.nim b/apps/wakunode2/wakunode2_validator_signed.nim index fc0d0c46d2..91896eda2b 100644 --- a/apps/wakunode2/wakunode2_validator_signed.nim +++ b/apps/wakunode2/wakunode2_validator_signed.nim @@ -20,7 +20,8 @@ const MessageWindowInSec = 5*60 # +- 5 minutes import ../../waku/waku_relay/protocol, - ../../waku/waku_core + ../../waku/waku_core, + ./external_config declarePublicCounter waku_msg_validator_signed_outcome, "number of messages for each validation outcome", ["result"] @@ -49,21 +50,28 @@ proc withinTimeWindow*(msg: WakuMessage): bool = return true return false -proc addSignedTopicValidator*(w: WakuRelay, topic: PubsubTopic, publicTopicKey: SkPublicKey) = - debug "adding validator to signed topic", topic=topic, publicTopicKey=publicTopicKey +proc addSignedTopicsValidator*(w: WakuRelay, protectedTopics: seq[ProtectedTopic]) = + debug "adding validator to signed topics" proc validator(topic: string, msg: WakuMessage): Future[errors.ValidationResult] {.async.} = var outcome = errors.ValidationResult.Reject + + for protectedTopic in protectedTopics: - if msg.timestamp != 0: - if msg.withinTimeWindow(): - let msgHash = SkMessage(topic.msgHash(msg)) - let recoveredSignature = SkSignature.fromRaw(msg.meta) - if recoveredSignature.isOk(): - if recoveredSignature.get.verify(msgHash, publicTopicKey): - outcome = errors.ValidationResult.Accept + if(protectedTopic.topic == topic): + if msg.timestamp != 0: + if msg.withinTimeWindow(): + let msgHash = SkMessage(topic.msgHash(msg)) + let recoveredSignature = SkSignature.fromRaw(msg.meta) + if recoveredSignature.isOk(): + if recoveredSignature.get.verify(msgHash, protectedTopic.key): + outcome = errors.ValidationResult.Accept - waku_msg_validator_signed_outcome.inc(labelValues = [$outcome]) - return outcome + if outcome != errors.ValidationResult.Accept: + debug "signed topic validation failed", topic=topic, publicTopicKey=protectedTopic.key + waku_msg_validator_signed_outcome.inc(labelValues = [$outcome]) + return outcome - w.addValidator(topic, validator) + return errors.ValidationResult.Accept + + w.addValidator(validator, "signed topic validation failed") \ No newline at end of file diff --git a/tests/waku_relay/test_protocol.nim b/tests/waku_relay/test_protocol.nim index 74e1ba2d50..d7e48ac4a0 100644 --- a/tests/waku_relay/test_protocol.nim +++ b/tests/waku_relay/test_protocol.nim @@ -297,14 +297,14 @@ suite "Waku Relay": proc otherSimpleFutureHandler(topic: PubsubTopic, message: WakuMessage) {.async, gcsafe.} = otherHandlerFuture.complete((topic, message)) - otherNode.addValidator(pubsubTopic, len4Validator) + otherNode.addValidator(len4Validator) discard otherNode.subscribe(pubsubTopic, otherSimpleFutureHandler) await sleepAsync(500.millis) check: otherNode.isSubscribed(pubsubTopic) # Given a subscribed node with a validator - node.addValidator(pubsubTopic, len4Validator) + node.addValidator(len4Validator) discard node.subscribe(pubsubTopic, simpleFutureHandler) await sleepAsync(500.millis) check: diff --git a/tests/waku_relay/test_wakunode_relay.nim b/tests/waku_relay/test_wakunode_relay.nim index 7d35cee7a9..d98ef0b3d8 100644 --- a/tests/waku_relay/test_wakunode_relay.nim +++ b/tests/waku_relay/test_wakunode_relay.nim @@ -163,7 +163,7 @@ suite "WakuNode - Relay": completionFutValidatorAcc.complete(true) return ValidationResult.Accept - node2.wakuRelay.addValidator(pubSubTopic, validator) + node2.wakuRelay.addValidator(validator) var completionFut = newFuture[bool]() proc relayHandler(topic: PubsubTopic, msg: WakuMessage): Future[void] {.async, gcsafe.} = diff --git a/tests/wakunode2/test_validators.nim b/tests/wakunode2/test_validators.nim index f040da1e2a..4f9e7d33dc 100644 --- a/tests/wakunode2/test_validators.nim +++ b/tests/wakunode2/test_validators.nim @@ -13,6 +13,7 @@ import libp2p/multihash, secp256k1 import + ../../apps/wakunode2/external_config, ../../apps/wakunode2/wakunode2_validator_signed, ../../waku/waku_core, ../../waku/node/peer_manager, @@ -42,8 +43,10 @@ suite "WakuNode2 - Validators": # Add signed message validator to all nodes. They will only route signed messages for node in nodes: + var signedTopics : seq[ProtectedTopic] for topic, publicKey in topicsPublicKeys: - node.wakuRelay.addSignedTopicValidator(PubsubTopic(topic), publicKey) + signedTopics.add(ProtectedTopic(topic: topic, key: publicKey)) + node.wakuRelay.addSignedTopicsValidator(signedTopics) # Connect the nodes in a full mesh for i in 0..<5: @@ -114,8 +117,10 @@ suite "WakuNode2 - Validators": # Add signed message validator to all nodes. They will only route signed messages for node in nodes: + var signedTopics : seq[ProtectedTopic] for topic, publicKey in topicsPublicKeys: - node.wakuRelay.addSignedTopicValidator(PubsubTopic(topic), publicKey) + signedTopics.add(ProtectedTopic(topic: topic, key: publicKey)) + node.wakuRelay.addSignedTopicsValidator(signedTopics) # Connect the nodes in a full mesh for i in 0..<5: @@ -232,8 +237,10 @@ suite "WakuNode2 - Validators": # Add signed message validator to all nodes. They will only route signed messages for node in nodes: + var signedTopics : seq[ProtectedTopic] for topic, publicKey in topicsPublicKeys: - node.wakuRelay.addSignedTopicValidator(PubsubTopic(topic), publicKey) + signedTopics.add(ProtectedTopic(topic: topic, key: publicKey)) + node.wakuRelay.addSignedTopicsValidator(signedTopics) # nodes[0] is connected only to nodes[1] let connOk1 = await nodes[0].peerManager.connectRelay(nodes[1].switch.peerInfo.toRemotePeerInfo()) diff --git a/tests/wakunode_rest/test_rest_relay.nim b/tests/wakunode_rest/test_rest_relay.nim index c6a1267807..adece80c65 100644 --- a/tests/wakunode_rest/test_rest_relay.nim +++ b/tests/wakunode_rest/test_rest_relay.nim @@ -1,7 +1,7 @@ {.used.} import - std/[sequtils,tempfiles], + std/[sequtils, strformat, tempfiles], stew/byteutils, stew/shims/net, testutils/unittests, @@ -21,7 +21,8 @@ import ../../waku/waku_relay, ../../../waku/waku_rln_relay, ../testlib/wakucore, - ../testlib/wakunode + ../testlib/wakunode, + ../resources/payloads proc testWakuNode(): WakuNode = let @@ -480,6 +481,50 @@ suite "Waku v2 Rest API - Relay": $response.contentType == $MIMETYPE_TEXT response.data == "Failed to publish. Autosharding error: invalid format: topic must start with slash" + await restServer.stop() + await restServer.closeWait() + await node.stop() + + asyncTest "Post a message larger than maximum size - POST /relay/v1/messages/{topic}": + # Given + let node = testWakuNode() + await node.start() + await node.mountRelay() + await node.mountRlnRelay(WakuRlnConfig(rlnRelayDynamic: false, + rlnRelayCredIndex: some(1.uint), + rlnRelayTreePath: genTempPath("rln_tree", "wakunode_1"))) + + # RPC server setup + var restPort = Port(0) + let restAddress = parseIpAddress("0.0.0.0") + let restServer = RestServerRef.init(restAddress, restPort).tryGet() + + restPort = restServer.server.address.port # update with bound port for client use + + let cache = MessageCache.init() + + installRelayApiHandlers(restServer.router, node, cache) + restServer.start() + + let client = newRestHttpClient(initTAddress(restAddress, restPort)) + + node.subscribe((kind: PubsubSub, topic: DefaultPubsubTopic)) + require: + toSeq(node.wakuRelay.subscribedTopics).len == 1 + + # When + let response = await client.relayPostMessagesV1(DefaultPubsubTopic, RelayWakuMessage( + payload: base64.encode(getByteSequence(MaxWakuMessageSize)), # Message will be bigger than the max size + contentTopic: some(DefaultContentTopic), + timestamp: some(int64(2022)) + )) + + # Then + check: + response.status == 400 + $response.contentType == $MIMETYPE_TEXT + response.data == fmt"Failed to publish: Message size exceeded maximum of {DefaultMaxWakuMessageSizeStr}" + await restServer.stop() await restServer.closeWait() await node.stop() \ No newline at end of file diff --git a/waku/node/waku_node.nim b/waku/node/waku_node.nim index b7e8ed5156..01d4613f91 100644 --- a/waku/node/waku_node.nim +++ b/waku/node/waku_node.nim @@ -987,7 +987,7 @@ proc mountRlnRelay*(node: WakuNode, # register rln validator as default validator debug "Registering RLN validator" - node.wakuRelay.addDefaultValidator(validator) + node.wakuRelay.addValidator(validator, "RLN validation failed") node.wakuRlnRelay = rlnRelay diff --git a/waku/waku_api/rest/relay/handlers.nim b/waku/waku_api/rest/relay/handlers.nim index d003da5d91..eea61fa2a7 100644 --- a/waku/waku_api/rest/relay/handlers.nim +++ b/waku/waku_api/rest/relay/handlers.nim @@ -135,16 +135,8 @@ proc installRelayApiHandlers*(router: var RestRouter, node: WakuNode, cache: Mes if not success: return RestApiResponse.internalServerError("Failed to publish: error appending RLN proof to message") - # validate the message before sending it - let result = node.wakuRlnRelay.validateMessageAndUpdateLog(message) - if result == MessageValidationResult.Invalid: - return RestApiResponse.internalServerError("Failed to publish: invalid RLN proof") - elif result == MessageValidationResult.Spam: - return RestApiResponse.badRequest("Failed to publish: limit exceeded, try again later") - elif result == MessageValidationResult.Valid: - debug "RLN proof validated successfully", pubSubTopic=pubSubTopic - else: - return RestApiResponse.internalServerError("Failed to publish: unknown RLN proof validation result") + (await node.wakuRelay.validateMessage(pubsubTopic, message)).isOkOr: + return RestApiResponse.badRequest("Failed to publish: " & error) # if we reach here its either a non-RLN message or a RLN message with a valid proof debug "Publishing message", pubSubTopic=pubSubTopic, rln=not node.wakuRlnRelay.isNil() diff --git a/waku/waku_relay/protocol.nim b/waku/waku_relay/protocol.nim index 11176d17ab..3544ea55f1 100644 --- a/waku/waku_relay/protocol.nim +++ b/waku/waku_relay/protocol.nim @@ -8,6 +8,7 @@ else: {.push raises: [].} import + std/strformat, stew/results, sequtils, chronos, @@ -124,14 +125,11 @@ type WakuRelayHandler* = proc(pubsubTopic: PubsubTopic, message: WakuMessage): Future[void] {.gcsafe, raises: [Defect].} WakuValidatorHandler* = proc(pubsubTopic: PubsubTopic, message: WakuMessage): Future[ValidationResult] {.gcsafe, raises: [Defect].} WakuRelay* = ref object of GossipSub - # a map of PubsubTopic's => seq[WakuValidatorHandler] that are - # called in order every time a message is received on a given pubsub topic - wakuValidators: Table[PubsubTopic, seq[WakuValidatorHandler]] - # a map that stores whether the ordered validator has been inserted - # for a given PubsubTopic + # seq of tuples: the first entry in the tuple contains the validators are called for every topic + # the second entry contains the error messages to be returned when the validator fails + wakuValidators: seq[tuple[handler: WakuValidatorHandler, errorMessage: string]] + # a map of validators to error messages to return when validation fails validatorInserted: Table[PubsubTopic, bool] - # seq of validators that are called for every pubsub topic - wakuDefaultValidators: seq[WakuValidatorHandler] proc initProtocolHandler(w: WakuRelay) = proc handler(conn: Connection, proto: string) {.async.} = @@ -180,14 +178,9 @@ proc new*(T: type WakuRelay, return ok(w) proc addValidator*(w: WakuRelay, - topic: varargs[string], - handler: WakuValidatorHandler) {.gcsafe.} = - for t in topic: - w.wakuValidators.mgetOrPut(t, @[]).add(handler) - -proc addDefaultValidator*(w: WakuRelay, - handler: WakuValidatorHandler) {.gcsafe.} = - w.wakuDefaultValidators.add(handler) + handler: WakuValidatorHandler, + errorMessage: string = "") {.gcsafe.} = + w.wakuValidators.add((handler, errorMessage)) method start*(w: WakuRelay) {.async.} = debug "start" @@ -216,19 +209,38 @@ proc generateOrderedValidator*(w: WakuRelay): auto {.gcsafe.} = let msg = msgRes.get() # now sequentially validate the message - for validator in w.wakuDefaultValidators: + for (validator, _) in w.wakuValidators: let validatorRes = await validator(pubsubTopic, msg) if validatorRes != ValidationResult.Accept: return validatorRes - - if w.wakuValidators.hasKey(pubsubTopic): - for validator in w.wakuValidators[pubsubTopic]: - let validatorRes = await validator(pubsubTopic, msg) - if validatorRes != ValidationResult.Accept: - return validatorRes return ValidationResult.Accept return wrappedValidator +proc isValidSize(message: WakuMessage): Future[Result[void, string]] {.async.} = + let messageSizeBytes = uint64(message.encode().buffer.len) + + if(messageSizeBytes > MaxWakuMessageSize): + let message = fmt"Message size exceeded maximum of {DefaultMaxWakuMessageSizeStr}" + debug "Invalid Waku Message", error=message + return err(message) + + return ok() + +proc validateMessage*(w: WakuRelay, pubsubTopic: string, msg: WakuMessage): + Future[Result[void, string]] {.async.} = + + (await msg.isValidSize()).isOkOr: + return err(error) + + for (validator, message) in w.wakuValidators: + let validatorRes = await validator(pubsubTopic, msg) + if validatorRes != ValidationResult.Accept: + if message.len > 0: + return err(message) + else: + return err("Validator failed") + return ok() + proc subscribe*(w: WakuRelay, pubsubTopic: PubsubTopic, handler: WakuRelayHandler): TopicHandler = debug "subscribe", pubsubTopic=pubsubTopic From b88facd0b7365204197977bdfafacc71617999c6 Mon Sep 17 00:00:00 2001 From: Aaryamann Challani <43716372+rymnc@users.noreply.github.com> Date: Fri, 2 Feb 2024 00:26:47 +0530 Subject: [PATCH 207/274] feat(rln-relay-v2): update C FFI api's and serde (#2385) * feat(rln-relay-v2): integrate new ffi bindings, serde * chore: remove ExtendedRateLimitProof, add comments * fix: typo --- waku/waku_rln_relay/constants.nim | 14 +- waku/waku_rln_relay/conversion_utils.nim | 61 +++-- .../group_manager/group_manager_base.nim | 24 +- waku/waku_rln_relay/protocol_types.nim | 16 +- waku/waku_rln_relay/rln/rln_interface.nim | 37 ++- waku/waku_rln_relay/rln/wrappers.nim | 218 ++++++++++++------ 6 files changed, 261 insertions(+), 109 deletions(-) diff --git a/waku/waku_rln_relay/constants.nim b/waku/waku_rln_relay/constants.nim index 81cfe94490..7087ad390c 100644 --- a/waku/waku_rln_relay/constants.nim +++ b/waku/waku_rln_relay/constants.nim @@ -1,6 +1,9 @@ import stint +import + ./protocol_types + import ../waku_keystore @@ -15,7 +18,8 @@ const # inputs of the membership contract constructor # TODO may be able to make these constants private and put them inside the waku_rln_relay_utils const - MembershipFee* = 1000000000000000.u256 + # in wei + MembershipFee* = 0.u256 # the current implementation of the rln lib supports a circuit for Merkle tree with depth 20 MerkleTreeDepth* = 20 EthClient* = "http://127.0.0.1:8540" @@ -29,6 +33,14 @@ const const DefaultRlnTreePath* = "rln_tree.db" +when defined(rln_v2): + const + # pre-processed "rln/waku-rln-relay/v2.0.0" to array[32, byte] + DefaultRlnIdentifier*: RlnIdentifier = [114, 108, 110, 47, 119, 97, 107, 117, + 45, 114, 108, 110, 45, 114, 101, 108, + 97, 121, 47, 118, 50, 46, 48, 46, + 48, 0, 0, 0, 0, 0, 0, 0] + # temporary variables to test waku-rln-relay performance in the static group mode const StaticGroupSize* = 10000 diff --git a/waku/waku_rln_relay/conversion_utils.nim b/waku/waku_rln_relay/conversion_utils.nim index d70c706f5c..45201f805d 100644 --- a/waku/waku_rln_relay/conversion_utils.nim +++ b/waku/waku_rln_relay/conversion_utils.nim @@ -53,18 +53,36 @@ proc encodeLengthPrefix*(input: openArray[byte]): seq[byte] = output = concat(@len, @input) return output -proc serialize*(idSecretHash: IdentitySecretHash, +when defined(rln_v2): + proc serialize*(idSecretHash: IdentitySecretHash, + memIndex: MembershipIndex, + userMessageLimit: UserMessageLimit, + messageId: MessageId, + externalNullifier: ExternalNullifier, + msg: openArray[byte]): seq[byte] = + ## a private proc to convert RateLimitProof and the data to a byte seq + ## this conversion is used in the proofGen proc + ## the serialization is done as instructed in https://github.com/kilic/rln/blob/7ac74183f8b69b399e3bc96c1ae8ab61c026dc43/src/public.rs#L146 + ## [ id_key<32> | id_index<8> | epoch<32> | signal_len<8> | signal ] + let memIndexBytes = toBytes(uint64(memIndex), Endianness.littleEndian) + let userMessageLimitBytes = toBytes(uint64(userMessageLimit), Endianness.littleEndian) + let messageIdBytes = toBytes(uint64(messageId), Endianness.littleEndian) + let lenPrefMsg = encodeLengthPrefix(msg) + let output = concat(@idSecretHash, @memIndexBytes, @userMessageLimitBytes, @messageIdBytes, @externalNullifier, lenPrefMsg) + return output +else: + proc serialize*(idSecretHash: IdentitySecretHash, memIndex: MembershipIndex, epoch: Epoch, msg: openArray[byte]): seq[byte] = - ## a private proc to convert RateLimitProof and the data to a byte seq - ## this conversion is used in the proofGen proc - ## the serialization is done as instructed in https://github.com/kilic/rln/blob/7ac74183f8b69b399e3bc96c1ae8ab61c026dc43/src/public.rs#L146 - ## [ id_key<32> | id_index<8> | epoch<32> | signal_len<8> | signal ] - let memIndexBytes = toBytes(uint64(memIndex), Endianness.littleEndian) - let lenPrefMsg = encodeLengthPrefix(msg) - let output = concat(@idSecretHash, @memIndexBytes, @epoch, lenPrefMsg) - return output + ## a private proc to convert RateLimitProof and the data to a byte seq + ## this conversion is used in the proofGen proc + ## the serialization is done as instructed in https://github.com/kilic/rln/blob/7ac74183f8b69b399e3bc96c1ae8ab61c026dc43/src/public.rs#L146 + ## [ id_key<32> | id_index<8> | epoch<32> | signal_len<8> | signal ] + let memIndexBytes = toBytes(uint64(memIndex), Endianness.littleEndian) + let lenPrefMsg = encodeLengthPrefix(msg) + let output = concat(@idSecretHash, @memIndexBytes, @epoch, lenPrefMsg) + return output proc serialize*(proof: RateLimitProof, data: openArray[byte]): seq[byte] = @@ -72,14 +90,23 @@ proc serialize*(proof: RateLimitProof, data: openArray[byte]): seq[byte] = ## this conversion is used in the proof verification proc ## [ proof<128> | root<32> | epoch<32> | share_x<32> | share_y<32> | nullifier<32> | rln_identifier<32> | signal_len<8> | signal ] let lenPrefMsg = encodeLengthPrefix(@data) - var proofBytes = concat(@(proof.proof), - @(proof.merkleRoot), - @(proof.epoch), - @(proof.shareX), - @(proof.shareY), - @(proof.nullifier), - @(proof.rlnIdentifier), - lenPrefMsg) + when defined(rln_v2): + var proofBytes = concat(@(proof.proof), + @(proof.merkleRoot), + @(proof.externalNullifier), + @(proof.shareX), + @(proof.shareY), + @(proof.nullifier), + lenPrefMsg) + else: + var proofBytes = concat(@(proof.proof), + @(proof.merkleRoot), + @(proof.epoch), + @(proof.shareX), + @(proof.shareY), + @(proof.nullifier), + @(proof.rlnIdentifier), + lenPrefMsg) return proofBytes diff --git a/waku/waku_rln_relay/group_manager/group_manager_base.nim b/waku/waku_rln_relay/group_manager/group_manager_base.nim index 7eb12bb798..947097af36 100644 --- a/waku/waku_rln_relay/group_manager/group_manager_base.nim +++ b/waku/waku_rln_relay/group_manager/group_manager_base.nim @@ -135,14 +135,26 @@ template slideRootQueue*(g: GroupManager): untyped = discard rootBuffer.slideRootQueue(root) rootBuffer -method verifyProof*(g: GroupManager, +when defined(rln_v2): + method verifyProof*(g: GroupManager, + input: openArray[byte], + proof: RateLimitProof): GroupManagerResult[bool] {.base,gcsafe,raises:[].} = + ## verifies the proof against the input and the current merkle root + ## TODO: verify the external nullifier with provided RateLimitProof + let proofVerifyRes = g.rlnInstance.proofVerify(input, RateLimitProof(proof), g.validRoots.items().toSeq()) + if proofVerifyRes.isErr(): + return err("proof verification failed: " & $proofVerifyRes.error()) + return ok(proofVerifyRes.value()) +else: + method verifyProof*(g: GroupManager, input: openArray[byte], proof: RateLimitProof): GroupManagerResult[bool] {.base,gcsafe,raises:[].} = - ## verifies the proof against the input and the current merkle root - let proofVerifyRes = g.rlnInstance.proofVerify(input, proof, g.validRoots.items().toSeq()) - if proofVerifyRes.isErr(): - return err("proof verification failed: " & $proofVerifyRes.error()) - return ok(proofVerifyRes.value()) + ## verifies the proof against the input and the current merkle root + let proofVerifyRes = g.rlnInstance.proofVerify(input, proof, g.validRoots.items().toSeq()) + if proofVerifyRes.isErr(): + return err("proof verification failed: " & $proofVerifyRes.error()) + return ok(proofVerifyRes.value()) + method generateProof*(g: GroupManager, data: openArray[byte], diff --git a/waku/waku_rln_relay/protocol_types.nim b/waku/waku_rln_relay/protocol_types.nim index 83ccfb89bf..3fb29fee88 100644 --- a/waku/waku_rln_relay/protocol_types.nim +++ b/waku/waku_rln_relay/protocol_types.nim @@ -31,6 +31,12 @@ type RlnIdentifier* = array[32, byte] ZKSNARK* = array[128, byte] +when defined(rln_v2): + type + UserMessageLimit* = uint64 + MessageId* = uint64 + ExternalNullifier* = array[32, byte] + # Custom data types defined for waku rln relay ------------------------- type RateLimitProof* = object ## RateLimitProof holds the public inputs to rln circuit as @@ -39,8 +45,6 @@ type RateLimitProof* = object proof*: ZKSNARK ## the root of Merkle tree used for the generation of the `proof` merkleRoot*: MerkleNode - ## the epoch used for the generation of the `proof` - epoch*: Epoch ## shareX and shareY are shares of user's identity key ## these shares are created using Shamir secret sharing scheme ## see details in https://hackmd.io/tMTLMYmTR5eynw2lwK9n1w?view#Linear-Equation-amp-SSS @@ -49,8 +53,13 @@ type RateLimitProof* = object ## nullifier enables linking two messages published during the same epoch ## see details in https://hackmd.io/tMTLMYmTR5eynw2lwK9n1w?view#Nullifiers nullifier*: Nullifier + ## the epoch used for the generation of the `proof` + epoch*: Epoch ## Application specific RLN Identifier rlnIdentifier*: RlnIdentifier + when defined(rln_v2): + ## the external nullifier used for the generation of the `proof` (derived from poseidon([epoch, rln_identifier])) + externalNullifier*: ExternalNullifier type ProofMetadata* = object nullifier*: Nullifier @@ -69,6 +78,7 @@ type # Protobufs enc and init proc init*(T: type RateLimitProof, buffer: seq[byte]): ProtoResult[T] = var nsp: RateLimitProof + let pb = initProtoBuffer(buffer) var proof: seq[byte] @@ -101,6 +111,7 @@ proc init*(T: type RateLimitProof, buffer: seq[byte]): ProtoResult[T] = return ok(nsp) + proc encode*(nsp: RateLimitProof): ProtoBuffer = var output = initProtoBuffer() @@ -113,7 +124,6 @@ proc encode*(nsp: RateLimitProof): ProtoBuffer = output.write3(7, nsp.rlnIdentifier) output.finish3() - return output type diff --git a/waku/waku_rln_relay/rln/rln_interface.nim b/waku/waku_rln_relay/rln/rln_interface.nim index 7a37ac9909..f45880e2e3 100644 --- a/waku/waku_rln_relay/rln/rln_interface.nim +++ b/waku/waku_rln_relay/rln/rln_interface.nim @@ -101,33 +101,46 @@ proc seeded_key_gen*(ctx: ptr RLN, input_buffer: ptr Buffer, output_buffer: ptr ## the return bool value indicates the success or failure of the operation proc generate_proof*(ctx: ptr RLN, - input_buffer: ptr Buffer, - output_buffer: ptr Buffer): bool {.importc: "generate_rln_proof".} + input_buffer: ptr Buffer, + output_buffer: ptr Buffer): bool {.importc: "generate_rln_proof".} +## rln-v2 +## input_buffer has to be serialized as [ identity_secret<32> | identity_index<8> | user_message_limit<32> | message_id<32> | external_nullifier<32> | signal_len<8> | signal ] +## output_buffer holds the proof data and should be parsed as [ proof<128> | root<32> | external_nullifier<32> | share_x<32> | share_y<32> | nullifier<32> ] +## rln-v1 ## input_buffer has to be serialized as [ id_key<32> | id_index<8> | epoch<32> | signal_len<8> | signal ] ## output_buffer holds the proof data and should be parsed as [ proof<128> | root<32> | epoch<32> | share_x<32> | share_y<32> | nullifier<32> | rln_identifier<32> ] ## integers wrapped in <> indicate value sizes in bytes ## the return bool value indicates the success or failure of the operation proc verify*(ctx: ptr RLN, - proof_buffer: ptr Buffer, - proof_is_valid_ptr: ptr bool): bool {.importc: "verify_rln_proof".} -## proof_buffer has to be serialized as [ proof<128> | root<32> | epoch<32> | share_x<32> | share_y<32> | nullifier<32> | rln_identifier<32> | signal_len<8> | signal ] + proof_buffer: ptr Buffer, + proof_is_valid_ptr: ptr bool): bool {.importc: "verify_rln_proof".} +## rln-v2 +## proof_buffer has to be serialized as [ proof<128> | root<32> | external_nullifier<32> | share_x<32> | share_y<32> | nullifier<32> | signal_len<8> | signal ] +## rln-v1 +## ## proof_buffer has to be serialized as [ proof<128> | root<32> | epoch<32> | share_x<32> | share_y<32> | nullifier<32> | rln_identifier<32> | signal_len<8> | signal ] ## the return bool value indicates the success or failure of the call to the verify function ## the verification of the zk proof is available in proof_is_valid_ptr, where a value of true indicates success and false a failure proc verify_with_roots*(ctx: ptr RLN, - proof_buffer: ptr Buffer, - roots_buffer: ptr Buffer, - proof_is_valid_ptr: ptr bool): bool {.importc: "verify_with_roots".} + proof_buffer: ptr Buffer, + roots_buffer: ptr Buffer, + proof_is_valid_ptr: ptr bool): bool {.importc: "verify_with_roots".} +## rln-v2 +## proof_buffer has to be serialized as [ proof<128> | root<32> | external_nullifier<32> | share_x<32> | share_y<32> | nullifier<32> | signal_len<8> | signal ] +## rln-v1 ## proof_buffer has to be serialized as [ proof<128> | root<32> | epoch<32> | share_x<32> | share_y<32> | nullifier<32> | rln_identifier<32> | signal_len<8> | signal ] ## roots_buffer contains the concatenation of 32 bytes long serializations in little endian of root values ## the return bool value indicates the success or failure of the call to the verify function ## the verification of the zk proof is available in proof_is_valid_ptr, where a value of true indicates success and false a failure proc zk_prove*(ctx: ptr RLN, - input_buffer: ptr Buffer, - output_buffer: ptr Buffer): bool {.importc: "prove".} + input_buffer: ptr Buffer, + output_buffer: ptr Buffer): bool {.importc: "prove".} ## Computes the zkSNARK proof and stores it in output_buffer for input values stored in input_buffer +## rln-v2 +## input_buffer is serialized as input_data as [ identity_secret<32> | user_message_limit<32> | message_id<32> | path_elements> | identity_path_index> | x<32> | external_nullifier<32> ] +## rln-v1 ## input_buffer is serialized as input_data as [ id_key<32> | path_elements> | identity_path_index> | x<32> | epoch<32> | rln_identifier<32> ] ## output_buffer holds the proof data and should be parsed as [ proof<128> ] ## path_elements and indentity_path elements serialize a merkle proof for id_key and are vectors of elements of 32 and 1 bytes, respectively (not. Vec<>). @@ -136,8 +149,8 @@ proc zk_prove*(ctx: ptr RLN, ## the return bool value indicates the success or failure of the operation proc zk_verify*(ctx: ptr RLN, - proof_buffer: ptr Buffer, - proof_is_valid_ptr: ptr bool): bool {.importc: "verify".} + proof_buffer: ptr Buffer, + proof_is_valid_ptr: ptr bool): bool {.importc: "verify".} ## Verifies the zkSNARK proof passed in proof_buffer ## input_buffer is serialized as input_data as [ proof<128> ] ## the verification of the zk proof is available in proof_is_valid_ptr, where a value of true indicates success and false a failure diff --git a/waku/waku_rln_relay/rln/wrappers.nim b/waku/waku_rln_relay/rln/wrappers.nim index fb120ed6d2..4b461b5313 100644 --- a/waku/waku_rln_relay/rln/wrappers.nim +++ b/waku/waku_rln_relay/rln/wrappers.nim @@ -159,79 +159,157 @@ proc poseidon*(data: seq[seq[byte]]): RlnRelayResult[array[32, byte]] = return ok(output) -# TODO: collocate this proc with the definition of the RateLimitProof -# and the ProofMetadata types -proc extractMetadata*(proof: RateLimitProof): RlnRelayResult[ProofMetadata] = - let externalNullifierRes = poseidon(@[@(proof.epoch), - @(proof.rlnIdentifier)]) - if externalNullifierRes.isErr(): - return err("could not construct the external nullifier") - return ok(ProofMetadata( - nullifier: proof.nullifier, - shareX: proof.shareX, - shareY: proof.shareY, - externalNullifier: externalNullifierRes.get() - )) - -proc proofGen*(rlnInstance: ptr RLN, data: openArray[byte], +when defined(rln_v2): + # TODO: collocate this proc with the definition of the RateLimitProof + # and the ProofMetadata types + proc extractMetadata*(proof: RateLimitProof): RlnRelayResult[ProofMetadata] = + return ok(ProofMetadata( + nullifier: proof.nullifier, + shareX: proof.shareX, + shareY: proof.shareY, + externalNullifier: externalNullifierRes.get() + )) +else: + proc extractMetadata*(proof: RateLimitProof): RlnRelayResult[ProofMetadata] = + let externalNullifierRes = poseidon(@[@(proof.epoch), + @(proof.rlnIdentifier)]) + if externalNullifierRes.isErr(): + return err("could not construct the external nullifier") + return ok(ProofMetadata( + nullifier: proof.nullifier, + shareX: proof.shareX, + shareY: proof.shareY, + externalNullifier: externalNullifierRes.get() + )) + +when defined(rln_v2): + proc proofGen*(rlnInstance: ptr RLN, + data: openArray[byte], + membership: IdentityCredential, + userMessageLimit: UserMessageLimit, + messageId: MessageId, + index: MembershipIndex, + epoch: Epoch): RateLimitProofResult = + + # obtain the external nullifier + let externalNullifierRes = poseidon(@[@(epoch), + @(DefaultRlnIdentifier)]) + + if externalNullifierRes.isErr(): + return err("could not construct the external nullifier") + + # serialize inputs + let serializedInputs = serialize(idSecretHash = membership.idSecretHash, + memIndex = index, + userMessageLimit = userMessageLimit, + messageId = messageId, + externalNullifier = externalNullifierRes.get(), + msg = data) + var inputBuffer = toBuffer(serializedInputs) + + debug "input buffer ", inputBuffer= repr(inputBuffer) + + # generate the proof + var proof: Buffer + let proofIsSuccessful = generate_proof(rlnInstance, addr inputBuffer, addr proof) + # check whether the generate_proof call is done successfully + if not proofIsSuccessful: + return err("could not generate the proof") + + var proofValue = cast[ptr array[320, byte]] (proof.`ptr`) + let proofBytes: array[320, byte] = proofValue[] + debug "proof content", proofHex = proofValue[].toHex + + ## parse the proof as [ proof<128> | root<32> | external_nullifier<32> | share_x<32> | share_y<32> | nullifier<32> ] + + let + proofOffset = 128 + rootOffset = proofOffset + 32 + externalNullifierOffset = rootOffset + 32 + shareXOffset = externalNullifierOffset + 32 + shareYOffset = shareXOffset + 32 + nullifierOffset = shareYOffset + 32 + + var + zkproof: ZKSNARK + proofRoot, shareX, shareY: MerkleNode + externalNullifier: ExternalNullifier + nullifier: Nullifier + + discard zkproof.copyFrom(proofBytes[0..proofOffset-1]) + discard proofRoot.copyFrom(proofBytes[proofOffset..rootOffset-1]) + discard externalNullifier.copyFrom(proofBytes[rootOffset..externalNullifierOffset-1]) + discard shareX.copyFrom(proofBytes[externalNullifierOffset..shareXOffset-1]) + discard shareY.copyFrom(proofBytes[shareXOffset..shareYOffset-1]) + discard nullifier.copyFrom(proofBytes[shareYOffset..nullifierOffset-1]) + + let output = RateLimitProof(proof: zkproof, + merkleRoot: proofRoot, + externalNullifier: externalNullifier, + shareX: shareX, + shareY: shareY, + nullifier: nullifier) + return ok(output) +else: + proc proofGen*(rlnInstance: ptr RLN, data: openArray[byte], memKeys: IdentityCredential, memIndex: MembershipIndex, epoch: Epoch): RateLimitProofResult = - # serialize inputs - let serializedInputs = serialize(idSecretHash = memKeys.idSecretHash, - memIndex = memIndex, - epoch = epoch, - msg = data) - var inputBuffer = toBuffer(serializedInputs) - - debug "input buffer ", inputBuffer= repr(inputBuffer) - - # generate the proof - var proof: Buffer - let proofIsSuccessful = generate_proof(rlnInstance, addr inputBuffer, addr proof) - # check whether the generate_proof call is done successfully - if not proofIsSuccessful: - return err("could not generate the proof") - - var proofValue = cast[ptr array[320, byte]] (proof.`ptr`) - let proofBytes: array[320, byte] = proofValue[] - debug "proof content", proofHex = proofValue[].toHex - - ## parse the proof as [ proof<128> | root<32> | epoch<32> | share_x<32> | share_y<32> | nullifier<32> | rln_identifier<32> ] - - let - proofOffset = 128 - rootOffset = proofOffset + 32 - epochOffset = rootOffset + 32 - shareXOffset = epochOffset + 32 - shareYOffset = shareXOffset + 32 - nullifierOffset = shareYOffset + 32 - rlnIdentifierOffset = nullifierOffset + 32 - - var - zkproof: ZKSNARK - proofRoot, shareX, shareY: MerkleNode - epoch: Epoch - nullifier: Nullifier - rlnIdentifier: RlnIdentifier - - discard zkproof.copyFrom(proofBytes[0..proofOffset-1]) - discard proofRoot.copyFrom(proofBytes[proofOffset..rootOffset-1]) - discard epoch.copyFrom(proofBytes[rootOffset..epochOffset-1]) - discard shareX.copyFrom(proofBytes[epochOffset..shareXOffset-1]) - discard shareY.copyFrom(proofBytes[shareXOffset..shareYOffset-1]) - discard nullifier.copyFrom(proofBytes[shareYOffset..nullifierOffset-1]) - discard rlnIdentifier.copyFrom(proofBytes[nullifierOffset..rlnIdentifierOffset-1]) - - let output = RateLimitProof(proof: zkproof, - merkleRoot: proofRoot, - epoch: epoch, - shareX: shareX, - shareY: shareY, - nullifier: nullifier, - rlnIdentifier: rlnIdentifier) - - return ok(output) + # serialize inputs + let serializedInputs = serialize(idSecretHash = memKeys.idSecretHash, + memIndex = memIndex, + epoch = epoch, + msg = data) + var inputBuffer = toBuffer(serializedInputs) + + debug "input buffer ", inputBuffer= repr(inputBuffer) + + # generate the proof + var proof: Buffer + let proofIsSuccessful = generate_proof(rlnInstance, addr inputBuffer, addr proof) + # check whether the generate_proof call is done successfully + if not proofIsSuccessful: + return err("could not generate the proof") + + var proofValue = cast[ptr array[320, byte]] (proof.`ptr`) + let proofBytes: array[320, byte] = proofValue[] + debug "proof content", proofHex = proofValue[].toHex + + ## parse the proof as [ proof<128> | root<32> | epoch<32> | share_x<32> | share_y<32> | nullifier<32> | rln_identifier<32> ] + + let + proofOffset = 128 + rootOffset = proofOffset + 32 + epochOffset = rootOffset + 32 + shareXOffset = epochOffset + 32 + shareYOffset = shareXOffset + 32 + nullifierOffset = shareYOffset + 32 + rlnIdentifierOffset = nullifierOffset + 32 + + var + zkproof: ZKSNARK + proofRoot, shareX, shareY: MerkleNode + epoch: Epoch + nullifier: Nullifier + rlnIdentifier: RlnIdentifier + + discard zkproof.copyFrom(proofBytes[0..proofOffset-1]) + discard proofRoot.copyFrom(proofBytes[proofOffset..rootOffset-1]) + discard epoch.copyFrom(proofBytes[rootOffset..epochOffset-1]) + discard shareX.copyFrom(proofBytes[epochOffset..shareXOffset-1]) + discard shareY.copyFrom(proofBytes[shareXOffset..shareYOffset-1]) + discard nullifier.copyFrom(proofBytes[shareYOffset..nullifierOffset-1]) + discard rlnIdentifier.copyFrom(proofBytes[nullifierOffset..rlnIdentifierOffset-1]) + + let output = RateLimitProof(proof: zkproof, + merkleRoot: proofRoot, + epoch: epoch, + shareX: shareX, + shareY: shareY, + nullifier: nullifier, + rlnIdentifier: rlnIdentifier) + + return ok(output) # validRoots should contain a sequence of roots in the acceptable windows. # As default, it is set to an empty sequence of roots. This implies that the validity check for the proof's root is skipped From 585755858cecece1f03ffee8b133693945bc3138 Mon Sep 17 00:00:00 2001 From: Ivan FB <128452529+Ivansete-status@users.noreply.github.com> Date: Thu, 1 Feb 2024 20:46:25 +0100 Subject: [PATCH 208/274] ci/Jenkinsfile.release: enforce -d:postgres flag is always used (#2389) --- ci/Jenkinsfile.release | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/ci/Jenkinsfile.release b/ci/Jenkinsfile.release index c26c64126c..009263ffec 100644 --- a/ci/Jenkinsfile.release +++ b/ci/Jenkinsfile.release @@ -44,7 +44,6 @@ pipeline { '-d:disableMarchNative', '-d:chronicles_colors:none', '-d:insecure', - '-d:postgres', ].join(' ') ) choice( @@ -66,7 +65,7 @@ pipeline { "${params.IMAGE_NAME}:${params.IMAGE_TAG ?: env.GIT_COMMIT.take(8)}", "--label=commit='${env.GIT_COMMIT.take(8)}' " + "--build-arg=MAKE_TARGET='${params.MAKE_TARGET}' " + - "--build-arg=NIMFLAGS='${params.NIMFLAGS}' " + + "--build-arg=NIMFLAGS='${params.NIMFLAGS}' -d:postgres " + "--build-arg=LOG_LEVEL='${params.LOWEST_LOG_LEVEL_ALLOWED}' " + "--target=${params.DEBUG ? "debug" : "prod"} ." ) From f86baa01a78acaf06aee3b187a5e0f36d1cb55f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lex=20Cabeza=20Romero?= Date: Fri, 2 Feb 2024 09:56:41 +0100 Subject: [PATCH 209/274] test(rln): Implement some rln unit tests (#2356) * Fix sanity check location. * Implement some rln tests. --- tests/node/test_wakunode_relay_rln.nim | 336 ++++++++++++++++++ tests/testlib/futures.nim | 20 +- tests/waku_rln_relay/rln/buffer_utils.nim | 11 + .../waku_rln_relay/rln/test_rln_interface.nim | 17 + tests/waku_rln_relay/rln/test_wrappers.nim | 131 +++++++ .../rln/waku_rln_relay_utils.nim | 6 + tests/waku_rln_relay/test_waku_rln_relay.nim | 6 +- waku/waku_rln_relay/rln/wrappers.nim | 5 +- 8 files changed, 514 insertions(+), 18 deletions(-) create mode 100644 tests/node/test_wakunode_relay_rln.nim create mode 100644 tests/waku_rln_relay/rln/buffer_utils.nim create mode 100644 tests/waku_rln_relay/rln/test_rln_interface.nim create mode 100644 tests/waku_rln_relay/rln/test_wrappers.nim create mode 100644 tests/waku_rln_relay/rln/waku_rln_relay_utils.nim diff --git a/tests/node/test_wakunode_relay_rln.nim b/tests/node/test_wakunode_relay_rln.nim new file mode 100644 index 0000000000..e3184441cb --- /dev/null +++ b/tests/node/test_wakunode_relay_rln.nim @@ -0,0 +1,336 @@ +{.used.} + +import + std/[sequtils, tempfiles], + stew/byteutils, + stew/shims/net as stewNet, + testutils/unittests, + chronos, + libp2p/switch, + libp2p/protocols/pubsub/pubsub + +from std/times import epochTime + +import + ../../../waku/[ + node/waku_node, + node/peer_manager, + waku_core, + waku_node, + waku_rln_relay, + ], + ../waku_store/store_utils, + ../waku_archive/archive_utils, + ../testlib/[wakucore, wakunode, testasync, futures], + ../resources/payloads + +proc setupRln(node: WakuNode, identifier: uint) {.async.} = + await node.mountRlnRelay( + WakuRlnConfig( + rlnRelayDynamic: false, + rlnRelayCredIndex: some(identifier), + rlnRelayTreePath: genTempPath("rln_tree", "wakunode_" & $identifier), + ) + ) + +proc setupRelayWithRln( + node: WakuNode, identifier: uint, pubsubTopics: seq[string] +) {.async.} = + await node.mountRelay(pubsubTopics) + await setupRln(node, identifier) + +proc subscribeCompletionHandler(node: WakuNode, pubsubTopic: string): Future[bool] = + var completionFut = newFuture[bool]() + proc relayHandler( + topic: PubsubTopic, msg: WakuMessage + ): Future[void] {.async, gcsafe.} = + if topic == pubsubTopic: + completionFut.complete(true) + + node.subscribe((kind: PubsubSub, topic: pubsubTopic), some(relayHandler)) + return completionFut + +proc sendRlnMessage( + client: WakuNode, + pubsubTopic: string, + contentTopic: string, + completionFuture: Future[bool], + payload: seq[byte] = "Hello".toBytes(), +): Future[bool] {.async.} = + var message = WakuMessage(payload: payload, contentTopic: contentTopic) + doAssert(client.wakuRlnRelay.appendRLNProof(message, epochTime())) + discard await client.publish(some(pubsubTopic), message) + let isCompleted = await completionFuture.withTimeout(FUTURE_TIMEOUT) + return isCompleted + +proc sendRlnMessageWithInvalidProof( + client: WakuNode, + pubsubTopic: string, + contentTopic: string, + completionFuture: Future[bool], + payload: seq[byte] = "Hello".toBytes(), +): Future[bool] {.async.} = + let + extraBytes: seq[byte] = @[byte(1), 2, 3] + rateLimitProofRes = + client.wakuRlnRelay.groupManager.generateProof( + concat(payload, extraBytes), + # we add extra bytes to invalidate proof verification against original payload + getCurrentEpoch() + ) + rateLimitProof = rateLimitProofRes.get().encode().buffer + message = + WakuMessage(payload: @payload, contentTopic: contentTopic, proof: rateLimitProof) + + discard await client.publish(some(pubsubTopic), message) + let isCompleted = await completionFuture.withTimeout(FUTURE_TIMEOUT) + return isCompleted + +suite "Waku RlnRelay - End to End": + var + pubsubTopic {.threadvar.}: PubsubTopic + contentTopic {.threadvar.}: ContentTopic + + var + server {.threadvar.}: WakuNode + client {.threadvar.}: WakuNode + + var + serverRemotePeerInfo {.threadvar.}: RemotePeerInfo + clientPeerId {.threadvar.}: PeerId + + asyncSetup: + pubsubTopic = DefaultPubsubTopic + contentTopic = DefaultContentTopic + + let + serverKey = generateSecp256k1Key() + clientKey = generateSecp256k1Key() + + server = newTestWakuNode(serverKey, ValidIpAddress.init("0.0.0.0"), Port(0)) + client = newTestWakuNode(clientKey, ValidIpAddress.init("0.0.0.0"), Port(0)) + + await allFutures(server.start(), client.start()) + + serverRemotePeerInfo = server.switch.peerInfo.toRemotePeerInfo() + clientPeerId = client.switch.peerInfo.toRemotePeerInfo().peerId + + asyncTeardown: + await allFutures(client.stop(), server.stop()) + + suite "Mount": + asyncTest "Can't mount if relay is not mounted": + # Given Relay and RLN are not mounted + check: + server.wakuRelay == nil + server.wakuRlnRelay == nil + + # When RlnRelay is mounted + let + catchRes = + catch: + await server.setupRln(1) + + # Then Relay and RLN are not mounted,and the process fails + check: + server.wakuRelay == nil + server.wakuRlnRelay == nil + catchRes.error()[].msg == + "WakuRelay protocol is not mounted, cannot mount WakuRlnRelay" + + asyncTest "Pubsub topics subscribed before mounting RlnRelay are added to it": + # Given the node enables Relay and Rln while subscribing to a pubsub topic + await server.setupRelayWithRln(1.uint, @[pubsubTopic]) + await client.setupRelayWithRln(2.uint, @[pubsubTopic]) + check: + server.wakuRelay != nil + server.wakuRlnRelay != nil + client.wakuRelay != nil + client.wakuRlnRelay != nil + + # And the nodes are connected + await client.connectToNodes(@[serverRemotePeerInfo]) + + # And the node registers the completion handler + var completionFuture = subscribeCompletionHandler(server, pubsubTopic) + + # When the client sends a valid RLN message + let + isCompleted1 = + await sendRlnMessage(client, pubsubTopic, contentTopic, completionFuture) + + # Then the valid RLN message is relayed + check: + isCompleted1 + completionFuture.read() + + # When the client sends an invalid RLN message + completionFuture = newBoolFuture() + let + isCompleted2 = + await sendRlnMessageWithInvalidProof( + client, pubsubTopic, contentTopic, completionFuture + ) + + # Then the invalid RLN message is not relayed + check: + not isCompleted2 + + asyncTest "Pubsub topics subscribed after mounting RlnRelay are added to it": + # Given the node enables Relay and Rln without subscribing to a pubsub topic + await server.setupRelayWithRln(1.uint, @[]) + await client.setupRelayWithRln(2.uint, @[]) + + # And the nodes are connected + await client.connectToNodes(@[serverRemotePeerInfo]) + + # await sleepAsync(FUTURE_TIMEOUT) + # And the node registers the completion handler + var completionFuture = subscribeCompletionHandler(server, pubsubTopic) + + await sleepAsync(FUTURE_TIMEOUT) + # When the client sends a valid RLN message + let + isCompleted1 = + await sendRlnMessage(client, pubsubTopic, contentTopic, completionFuture) + + # Then the valid RLN message is relayed + check: + isCompleted1 + completionFuture.read() + + # When the client sends an invalid RLN message + completionFuture = newBoolFuture() + let + isCompleted2 = + await sendRlnMessageWithInvalidProof( + client, pubsubTopic, contentTopic, completionFuture + ) + + # Then the invalid RLN message is not relayed + check: + not isCompleted2 + + suite "Analysis of Bandwith Limitations": + asyncTest "Valid Payload Sizes": + # Given the node enables Relay and Rln while subscribing to a pubsub topic + await server.setupRelayWithRln(1.uint, @[pubsubTopic]) + await client.setupRelayWithRln(2.uint, @[pubsubTopic]) + + # And the nodes are connected + await client.connectToNodes(@[serverRemotePeerInfo]) + + # Register Relay Handler + var completionFut = newPushHandlerFuture() + proc relayHandler( + topic: PubsubTopic, msg: WakuMessage + ): Future[void] {.async, gcsafe.} = + if topic == pubsubTopic: + completionFut.complete((topic, msg)) + + let subscriptionEvent = (kind: PubsubSub, topic: pubsubTopic) + server.subscribe(subscriptionEvent, some(relayHandler)) + await sleepAsync(FUTURE_TIMEOUT) + + # Generate Messages + let + epoch = epochTime() + payload1b = getByteSequence(1) + payload1kib = getByteSequence(1024) + overhead: uint64 = 419 + payload150kib = getByteSequence((150 * 1024) - overhead) + payload150kibPlus = getByteSequence((150 * 1024) - overhead + 1) + + var + message1b = WakuMessage(payload: @payload1b, contentTopic: contentTopic) + message1kib = WakuMessage(payload: @payload1kib, contentTopic: contentTopic) + message150kib = WakuMessage(payload: @payload150kib, contentTopic: contentTopic) + message151kibPlus = + WakuMessage(payload: @payload150kibPlus, contentTopic: contentTopic) + + doAssert( + client.wakuRlnRelay.appendRLNProof(message1b, epoch + EpochUnitSeconds * 0) + ) + doAssert( + client.wakuRlnRelay.appendRLNProof(message1kib, epoch + EpochUnitSeconds * 1) + ) + doAssert( + client.wakuRlnRelay.appendRLNProof(message150kib, epoch + EpochUnitSeconds * 2) + ) + doAssert( + client.wakuRlnRelay.appendRLNProof( + message151kibPlus, epoch + EpochUnitSeconds * 3 + ) + ) + + # When sending the 1B message + discard await client.publish(some(pubsubTopic), message1b) + discard await completionFut.withTimeout(FUTURE_TIMEOUT_LONG) + + # Then the message is relayed + check completionFut.read() == (pubsubTopic, message1b) + # When sending the 1KiB message + completionFut = newPushHandlerFuture() # Reset Future + discard await client.publish(some(pubsubTopic), message1kib) + discard await completionFut.withTimeout(FUTURE_TIMEOUT_LONG) + + # Then the message is relayed + check completionFut.read() == (pubsubTopic, message1kib) + + # When sending the 150KiB message + completionFut = newPushHandlerFuture() # Reset Future + discard await client.publish(some(pubsubTopic), message150kib) + discard await completionFut.withTimeout(FUTURE_TIMEOUT_LONG) + + # Then the message is relayed + check completionFut.read() == (pubsubTopic, message150kib) + + # When sending the 150KiB plus message + completionFut = newPushHandlerFuture() # Reset Future + discard await client.publish(some(pubsubTopic), message151kibPlus) + + # Then the message is not relayed + check not await completionFut.withTimeout(FUTURE_TIMEOUT_LONG) + + asyncTest "Invalid Payload Sizes": + # Given the node enables Relay and Rln while subscribing to a pubsub topic + await server.setupRelayWithRln(1.uint, @[pubsubTopic]) + await client.setupRelayWithRln(2.uint, @[pubsubTopic]) + + # And the nodes are connected + await client.connectToNodes(@[serverRemotePeerInfo]) + + # Register Relay Handler + var completionFut = newPushHandlerFuture() + proc relayHandler( + topic: PubsubTopic, msg: WakuMessage + ): Future[void] {.async, gcsafe.} = + if topic == pubsubTopic: + completionFut.complete((topic, msg)) + + let subscriptionEvent = (kind: PubsubSub, topic: pubsubTopic) + server.subscribe(subscriptionEvent, some(relayHandler)) + await sleepAsync(FUTURE_TIMEOUT) + + # Generate Messages + let + epoch = epochTime() + overhead: uint64 = 419 + payload150kibPlus = getByteSequence((150 * 1024) - overhead + 1) + + var + message151kibPlus = + WakuMessage(payload: @payload150kibPlus, contentTopic: contentTopic) + + doAssert( + client.wakuRlnRelay.appendRLNProof( + message151kibPlus, epoch + EpochUnitSeconds * 3 + ) + ) + + # When sending the 150KiB plus message + completionFut = newPushHandlerFuture() # Reset Future + discard await client.publish(some(pubsubTopic), message151kibPlus) + + # Then the message is not relayed + check not await completionFut.withTimeout(FUTURE_TIMEOUT_LONG) diff --git a/tests/testlib/futures.nim b/tests/testlib/futures.nim index dfdb746360..d052d29d0c 100644 --- a/tests/testlib/futures.nim +++ b/tests/testlib/futures.nim @@ -1,20 +1,16 @@ -import - chronos +import chronos -import - ../../../waku/[ - waku_core/message, - waku_store - ] +import ../../../waku/[waku_core/message, waku_store] - -let FUTURE_TIMEOUT* = 1.seconds +const + FUTURE_TIMEOUT* = 1.seconds + FUTURE_TIMEOUT_LONG* = 10.seconds proc newPushHandlerFuture*(): Future[(string, WakuMessage)] = - newFuture[(string, WakuMessage)]() + newFuture[(string, WakuMessage)]() proc newBoolFuture*(): Future[bool] = - newFuture[bool]() + newFuture[bool]() proc newHistoryFuture*(): Future[HistoryQuery] = - newFuture[HistoryQuery]() + newFuture[HistoryQuery]() diff --git a/tests/waku_rln_relay/rln/buffer_utils.nim b/tests/waku_rln_relay/rln/buffer_utils.nim new file mode 100644 index 0000000000..740766ffbe --- /dev/null +++ b/tests/waku_rln_relay/rln/buffer_utils.nim @@ -0,0 +1,11 @@ +import ../../../../waku/waku_rln_relay/rln/rln_interface + +proc `==`*(a: Buffer, b: seq[uint8]): bool = + if a.len != uint(b.len): + return false + + let bufferArray = cast[ptr UncheckedArray[uint8]](a.ptr) + for i in 0.. Date: Fri, 2 Feb 2024 14:13:07 +0100 Subject: [PATCH 210/274] fix: bug fix in ci/Jenkinsfile.release: make -d:postgres part of NIMFLAGS (#2395) --- ci/Jenkinsfile.release | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/Jenkinsfile.release b/ci/Jenkinsfile.release index 009263ffec..e577d3e0c1 100644 --- a/ci/Jenkinsfile.release +++ b/ci/Jenkinsfile.release @@ -65,7 +65,7 @@ pipeline { "${params.IMAGE_NAME}:${params.IMAGE_TAG ?: env.GIT_COMMIT.take(8)}", "--label=commit='${env.GIT_COMMIT.take(8)}' " + "--build-arg=MAKE_TARGET='${params.MAKE_TARGET}' " + - "--build-arg=NIMFLAGS='${params.NIMFLAGS}' -d:postgres " + + "--build-arg=NIMFLAGS='${params.NIMFLAGS} -d:postgres ' " + "--build-arg=LOG_LEVEL='${params.LOWEST_LOG_LEVEL_ALLOWED}' " + "--target=${params.DEBUG ? "debug" : "prod"} ." ) From e4e147bcbb71366b159d0f2dcfddfe85fa85b1af Mon Sep 17 00:00:00 2001 From: gabrielmer <101006718+gabrielmer@users.noreply.github.com> Date: Mon, 5 Feb 2024 09:24:54 +0100 Subject: [PATCH 211/274] feat: running validators in /relay/v1/auto/messages/{topic} (#2394) --- tests/wakunode_rest/test_rest_relay.nim | 44 +++++++++++++++++++++++++ waku/waku_api/rest/relay/handlers.nim | 18 +++++----- 2 files changed, 53 insertions(+), 9 deletions(-) diff --git a/tests/wakunode_rest/test_rest_relay.nim b/tests/wakunode_rest/test_rest_relay.nim index adece80c65..8e8027e2bc 100644 --- a/tests/wakunode_rest/test_rest_relay.nim +++ b/tests/wakunode_rest/test_rest_relay.nim @@ -519,6 +519,50 @@ suite "Waku v2 Rest API - Relay": timestamp: some(int64(2022)) )) + # Then + check: + response.status == 400 + $response.contentType == $MIMETYPE_TEXT + response.data == fmt"Failed to publish: Message size exceeded maximum of {DefaultMaxWakuMessageSizeStr}" + + await restServer.stop() + await restServer.closeWait() + await node.stop() + + asyncTest "Post a message larger than maximum size - POST /relay/v1/auto/messages/{topic}": + # Given + let node = testWakuNode() + await node.start() + await node.mountRelay() + await node.mountRlnRelay(WakuRlnConfig(rlnRelayDynamic: false, + rlnRelayCredIndex: some(1.uint), + rlnRelayTreePath: genTempPath("rln_tree", "wakunode_1"))) + + # RPC server setup + var restPort = Port(0) + let restAddress = parseIpAddress("0.0.0.0") + let restServer = RestServerRef.init(restAddress, restPort).tryGet() + + restPort = restServer.server.address.port # update with bound port for client use + + let cache = MessageCache.init() + + installRelayApiHandlers(restServer.router, node, cache) + restServer.start() + + let client = newRestHttpClient(initTAddress(restAddress, restPort)) + + node.subscribe((kind: PubsubSub, topic: DefaultPubsubTopic)) + require: + toSeq(node.wakuRelay.subscribedTopics).len == 1 + + # When + let response = await client.relayPostAutoMessagesV1(RelayWakuMessage( + payload: base64.encode(getByteSequence(MaxWakuMessageSize)), # Message will be bigger than the max size + contentTopic: some(DefaultContentTopic), + timestamp: some(int64(2022)) + )) + # Then check: response.status == 400 diff --git a/waku/waku_api/rest/relay/handlers.nim b/waku/waku_api/rest/relay/handlers.nim index eea61fa2a7..73f2935e43 100644 --- a/waku/waku_api/rest/relay/handlers.nim +++ b/waku/waku_api/rest/relay/handlers.nim @@ -212,24 +212,24 @@ proc installRelayApiHandlers*(router: var RestRouter, node: WakuNode, cache: Mes var message: WakuMessage = req.toWakuMessage(version = 0).valueOr: return RestApiResponse.badRequest() + let pubsubTopic = getShard(message.contentTopic).valueOr: + let msg = "Autosharding error: " & error + error "publish error", msg=msg + return RestApiResponse.badRequest("Failed to publish. " & msg) + # if RLN is mounted, append the proof to the message if not node.wakuRlnRelay.isNil(): if not node.wakuRlnRelay.appendRLNProof(message, float64(getTime().toUnix())): return RestApiResponse.internalServerError( "Failed to publish: error appending RLN proof to message") - case node.wakuRlnRelay.validateMessage(message): - of MessageValidationResult.Invalid: - return RestApiResponse.internalServerError("Failed to publish: invalid RLN proof") - of MessageValidationResult.Spam: - return RestApiResponse.badRequest("Failed to publish: limit exceeded, try again later") - of MessageValidationResult.Valid: - debug "RLN proof validated successfully", contentTopic=message.contentTopic - + (await node.wakuRelay.validateMessage(pubsubTopic, message)).isOkOr: + return RestApiResponse.badRequest("Failed to publish: " & error) + # if we reach here its either a non-RLN message or a RLN message with a valid proof debug "Publishing message", contentTopic=message.contentTopic, rln=not node.wakuRlnRelay.isNil() - var publishFut = node.publish(none(PubSubTopic), message) + var publishFut = node.publish(some(pubsubTopic), message) if not await publishFut.withTimeout(futTimeout): return RestApiResponse.internalServerError("Failed to publish: timedout") From 817b2e067a413a2daeae7715b5230162182373d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lex=20Cabeza=20Romero?= Date: Tue, 6 Feb 2024 17:37:42 +0100 Subject: [PATCH 212/274] test(lightpush): Lightpush functional tests (#2269) * Add ligthpush payload tests. * Add end to end lightpush tests. * updating vendor/nim-unittest2 to protect against core dump issue * Enable "Valid Payload Sizes" test again --------- Co-authored-by: Ivan FB <128452529+Ivansete-status@users.noreply.github.com> --- tests/all_tests_waku.nim | 23 +- tests/node/test_all.nim | 4 + tests/node/test_wakunode_filter.nim | 108 +-- tests/node/test_wakunode_lightpush.nim | 93 +++ tests/node/test_wakunode_store.nim | 844 ++++++++++++----------- tests/resources/content_topics.nim | 8 + tests/resources/pubsub_topics.nim | 14 + tests/test_waku_lightpush.nim | 154 ----- tests/testlib/assertions.nim | 4 + tests/testlib/futures.nim | 20 + tests/waku_archive/archive_utils.nim | 34 +- tests/waku_lightpush/lightpush_utils.nim | 33 + tests/waku_lightpush/test_all.nim | 2 + tests/waku_lightpush/test_client.nim | 362 ++++++++++ tests/waku_store/test_all.nim | 1 + tests/waku_store/test_client.nim | 7 +- vendor/nim-unittest2 | 2 +- waku/waku_lightpush/client.nim | 7 +- 18 files changed, 1081 insertions(+), 639 deletions(-) create mode 100644 tests/node/test_all.nim create mode 100644 tests/node/test_wakunode_lightpush.nim create mode 100644 tests/resources/content_topics.nim create mode 100644 tests/resources/pubsub_topics.nim delete mode 100644 tests/test_waku_lightpush.nim create mode 100644 tests/testlib/assertions.nim create mode 100644 tests/waku_lightpush/lightpush_utils.nim create mode 100644 tests/waku_lightpush/test_all.nim create mode 100644 tests/waku_lightpush/test_client.nim diff --git a/tests/all_tests_waku.nim b/tests/all_tests_waku.nim index 35e9f41a60..3030214044 100644 --- a/tests/all_tests_waku.nim +++ b/tests/all_tests_waku.nim @@ -8,7 +8,6 @@ import ./waku_core/test_peers, ./waku_core/test_published_address - # Waku archive test suite import ./waku_archive/test_driver_queue_index, @@ -22,15 +21,15 @@ import const os* {.strdefine.} = "" when os == "Linux" and - # GitHub only supports container actions on Linux - # and we need to start a postgress database in a docker container - defined(postgres): +# GitHub only supports container actions on Linux +# and we need to start a postgress database in a docker container +defined(postgres): import - ./waku_archive/test_driver_postgres_query, - ./waku_archive/test_driver_postgres + ./waku_archive/test_driver_postgres_query, ./waku_archive/test_driver_postgres # Waku store test suite import + ./waku_store/test_client, ./waku_store/test_rpc_codec, ./waku_store/test_waku_store, ./waku_store/test_wakunode_store @@ -39,17 +38,11 @@ when defined(waku_exp_store_resume): # TODO: Review store resume test cases (#1282) import ./waku_store/test_resume - -import - ./waku_relay/test_all, - ./waku_filter_v2/test_all - +import ./waku_relay/test_all, ./waku_filter_v2/test_all, ./waku_lightpush/test_all import # Waku v2 tests ./test_wakunode, - # Waku LightPush - ./test_waku_lightpush, ./test_wakunode_lightpush, # Waku Filter ./test_waku_filter_legacy, @@ -71,9 +64,7 @@ import ./test_waku_rendezvous # Waku Keystore test suite -import - ./test_waku_keystore_keyfile, - ./test_waku_keystore +import ./test_waku_keystore_keyfile, ./test_waku_keystore ## Wakunode JSON-RPC API test suite import diff --git a/tests/node/test_all.nim b/tests/node/test_all.nim new file mode 100644 index 0000000000..d8a9685de6 --- /dev/null +++ b/tests/node/test_all.nim @@ -0,0 +1,4 @@ +import + ./test_wakunode_filter, + ./test_wakunode_lightpush, + ./test_wakunode_store diff --git a/tests/node/test_wakunode_filter.nim b/tests/node/test_wakunode_filter.nim index 0403670932..383b3881ef 100644 --- a/tests/node/test_wakunode_filter.nim +++ b/tests/node/test_wakunode_filter.nim @@ -1,20 +1,13 @@ {.used.} import - std/[ - options, - tables, - sequtils - ], + std/[options, tables, sequtils], stew/shims/net as stewNet, testutils/unittests, chronos, chronicles, os, - libp2p/[ - peerstore, - crypto/crypto - ] + libp2p/[peerstore, crypto/crypto] import ../../../waku/[ @@ -25,14 +18,7 @@ import waku_filter_v2/client, waku_filter_v2/subscriptions ], - ../testlib/[ - common, - wakucore, - wakunode, - testasync, - futures, - testutils - ] + ../testlib/[common, wakucore, wakunode, testasync, futures, testutils] suite "Waku Filter - End to End": var client {.threadvar.}: WakuNode @@ -48,10 +34,11 @@ suite "Waku Filter - End to End": asyncSetup: pushHandlerFuture = newFuture[(string, WakuMessage)]() - messagePushHandler = proc( - pubsubTopic: PubsubTopic, message: WakuMessage - ): Future[void] {.async, closure, gcsafe.} = - pushHandlerFuture.complete((pubsubTopic, message)) + messagePushHandler = + proc(pubsubTopic: PubsubTopic, message: WakuMessage): Future[void] {. + async, closure, gcsafe + .} = + pushHandlerFuture.complete((pubsubTopic, message)) pubsubTopic = DefaultPubsubTopic contentTopic = DefaultContentTopic @@ -63,7 +50,8 @@ suite "Waku Filter - End to End": server = newTestWakuNode(serverKey, parseIpAddress("0.0.0.0"), Port(23450)) client = newTestWakuNode(clientKey, parseIpAddress("0.0.0.0"), Port(23451)) - clientClone = newTestWakuNode(clientKey, parseIpAddress("0.0.0.0"), Port(23451)) # Used for testing client restarts + clientClone = newTestWakuNode(clientKey, parseIpAddress("0.0.0.0"), Port(23451)) + # Used for testing client restarts await allFutures(server.start(), client.start()) @@ -83,9 +71,11 @@ suite "Waku Filter - End to End": asyncTest "Client Node receives Push from Server Node, via Filter": # When a client node subscribes to a filter node - let subscribeResponse = await client.filterSubscribe( - some(pubsubTopic), contentTopicSeq, serverRemotePeerInfo - ) + let + subscribeResponse = + await client.filterSubscribe( + some(pubsubTopic), contentTopicSeq, serverRemotePeerInfo + ) # Then the subscription is successful check: @@ -94,7 +84,7 @@ suite "Waku Filter - End to End": server.wakuFilter.subscriptions.isSubscribed(clientPeerId) # When sending a message to the subscribed content topic - let msg1 = fakeWakuMessage(contentTopic=contentTopic) + let msg1 = fakeWakuMessage(contentTopic = contentTopic) await server.filterHandleMessage(pubsubTopic, msg1) # Then the message is pushed to the client @@ -105,9 +95,11 @@ suite "Waku Filter - End to End": pushedMsg1 == msg1 # When unsubscribing from the subscription - let unsubscribeResponse = await client.filterUnsubscribe( - some(pubsubTopic), contentTopicSeq, serverRemotePeerInfo - ) + let + unsubscribeResponse = + await client.filterUnsubscribe( + some(pubsubTopic), contentTopicSeq, serverRemotePeerInfo + ) # Then the unsubscription is successful check: @@ -116,7 +108,7 @@ suite "Waku Filter - End to End": # When sending a message to the previously subscribed content topic pushHandlerFuture = newPushHandlerFuture() # Clear previous future - let msg2 = fakeWakuMessage(contentTopic=contentTopic) + let msg2 = fakeWakuMessage(contentTopic = contentTopic) await server.filterHandleMessage(pubsubTopic, msg2) # Then the message is not pushed to the client @@ -128,16 +120,18 @@ suite "Waku Filter - End to End": await server.mountRelay() # And valid filter subscription - let subscribeResponse = await client.filterSubscribe( - some(pubsubTopic), contentTopicSeq, serverRemotePeerInfo - ) + let + subscribeResponse = + await client.filterSubscribe( + some(pubsubTopic), contentTopicSeq, serverRemotePeerInfo + ) require: subscribeResponse.isOk() server.wakuFilter.subscriptions.subscribedPeerCount() == 1 # When a server node gets a Relay message - let msg1 = fakeWakuMessage(contentTopic=contentTopic) - await server.publish(some(pubsubTopic), msg1) + let msg1 = fakeWakuMessage(contentTopic = contentTopic) + discard await server.publish(some(pubsubTopic), msg1) # Then the message is not sent to the client's filter push handler check (not await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT)) @@ -154,18 +148,22 @@ suite "Waku Filter - End to End": let serverRemotePeerInfo = server.peerInfo.toRemotePeerInfo() # When a client node subscribes to the server node - let subscribeResponse = await client.filterSubscribe( - some(pubsubTopic), contentTopicSeq, serverRemotePeerInfo - ) + let + subscribeResponse = + await client.filterSubscribe( + some(pubsubTopic), contentTopicSeq, serverRemotePeerInfo + ) # Then the subscription is successful check (not subscribeResponse.isOk()) asyncTest "Filter Client Node can receive messages after subscribing and restarting, via Filter": # Given a valid filter subscription - let subscribeResponse = await client.filterSubscribe( - some(pubsubTopic), contentTopicSeq, serverRemotePeerInfo - ) + let + subscribeResponse = + await client.filterSubscribe( + some(pubsubTopic), contentTopicSeq, serverRemotePeerInfo + ) require: subscribeResponse.isOk() server.wakuFilter.subscriptions.subscribedPeerCount() == 1 @@ -175,7 +173,7 @@ suite "Waku Filter - End to End": await clientClone.start() # Mimic restart by starting the clone # When a message is sent to the subscribed content topic, via Filter; without refreshing the subscription - let msg = fakeWakuMessage(contentTopic=contentTopic) + let msg = fakeWakuMessage(contentTopic = contentTopic) await server.filterHandleMessage(pubsubTopic, msg) # Then the message is pushed to the client @@ -185,13 +183,15 @@ suite "Waku Filter - End to End": pushedMsgPubsubTopic == pubsubTopic pushedMsg == msg - asyncTest "Filter Client Node can't receive messages after subscribing and restarting, via Relay": # Given the server node has Relay enabled + asyncTest "Filter Client Node can't receive messages after subscribing and restarting, via Relay": await server.mountRelay() # Given a valid filter subscription - let subscribeResponse = await client.filterSubscribe( - some(pubsubTopic), contentTopicSeq, serverRemotePeerInfo - ) + let + subscribeResponse = + await client.filterSubscribe( + some(pubsubTopic), contentTopicSeq, serverRemotePeerInfo + ) require: subscribeResponse.isOk() server.wakuFilter.subscriptions.subscribedPeerCount() == 1 @@ -201,24 +201,26 @@ suite "Waku Filter - End to End": await clientClone.start() # Mimic restart by starting the clone # When a message is sent to the subscribed content topic, via Relay - let msg = fakeWakuMessage(contentTopic=contentTopic) - await server.publish(some(pubsubTopic), msg) + let msg = fakeWakuMessage(contentTopic = contentTopic) + discard await server.publish(some(pubsubTopic), msg) # Then the message is not sent to the client's filter push handler check (not await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT)) # Given the client refreshes the subscription - let subscribeResponse2 = await clientClone.filterSubscribe( - some(pubsubTopic), contentTopicSeq, serverRemotePeerInfo - ) + let + subscribeResponse2 = + await clientClone.filterSubscribe( + some(pubsubTopic), contentTopicSeq, serverRemotePeerInfo + ) check: subscribeResponse2.isOk() server.wakuFilter.subscriptions.subscribedPeerCount() == 1 # When a message is sent to the subscribed content topic, via Relay pushHandlerFuture = newPushHandlerFuture() - let msg2 = fakeWakuMessage(contentTopic=contentTopic) - await server.publish(some(pubsubTopic), msg2) + let msg2 = fakeWakuMessage(contentTopic = contentTopic) + discard await server.publish(some(pubsubTopic), msg2) # Then the message is not sent to the client's filter push handler check (not await pushHandlerFuture.withTimeout(FUTURE_TIMEOUT)) diff --git a/tests/node/test_wakunode_lightpush.nim b/tests/node/test_wakunode_lightpush.nim new file mode 100644 index 0000000000..0a8141c152 --- /dev/null +++ b/tests/node/test_wakunode_lightpush.nim @@ -0,0 +1,93 @@ +{.used.} + +import + std/[options, tables, sequtils], + stew/shims/net as stewNet, + testutils/unittests, + chronos, + chronicles, + os, + libp2p/[peerstore, crypto/crypto] + +import + ../../../waku/[ + waku_core, + node/peer_manager, + node/waku_node, + waku_filter_v2, + waku_filter_v2/client, + waku_filter_v2/subscriptions, + waku_lightpush, + waku_lightpush/common, + waku_lightpush/client, + waku_lightpush/protocol_metrics, + waku_lightpush/rpc + ], + ../testlib/[assertions, common, wakucore, wakunode, testasync, futures, testutils] + +suite "Waku Lightpush - End To End": + var + handlerFuture {.threadvar.}: Future[(PubsubTopic, WakuMessage)] + handler {.threadvar.}: PushMessageHandler + + server {.threadvar.}: WakuNode + client {.threadvar.}: WakuNode + + serverRemotePeerInfo {.threadvar.}: RemotePeerInfo + pubsubTopic {.threadvar.}: PubsubTopic + contentTopic {.threadvar.}: ContentTopic + message {.threadvar.}: WakuMessage + + asyncSetup: + handlerFuture = newPushHandlerFuture() + handler = + proc( + peer: PeerId, pubsubTopic: PubsubTopic, message: WakuMessage + ): Future[WakuLightPushResult[void]] {.async.} = + handlerFuture.complete((pubsubTopic, message)) + return ok() + + let + serverKey = generateSecp256k1Key() + clientKey = generateSecp256k1Key() + + server = newTestWakuNode(serverKey, ValidIpAddress.init("0.0.0.0"), Port(0)) + client = newTestWakuNode(clientKey, ValidIpAddress.init("0.0.0.0"), Port(0)) + + await allFutures(server.start(), client.start()) + await server.start() + + waitFor server.mountRelay() + waitFor server.mountLightpush() + client.mountLightpushClient() + + serverRemotePeerInfo = server.peerInfo.toRemotePeerInfo() + pubsubTopic = DefaultPubsubTopic + contentTopic = DefaultContentTopic + message = fakeWakuMessage() + + asyncTeardown: + await server.stop() + + suite "Assessment of Message Relaying Mechanisms": + asyncTest "Via 11/WAKU2-RELAY from Relay/Full Node": + # Given a light lightpush client + let + lightpushClient = + newTestWakuNode( + generateSecp256k1Key(), ValidIpAddress.init("0.0.0.0"), Port(0) + ) + lightpushClient.mountLightpushClient() + + # When the client publishes a message + let + publishResponse = + await lightpushClient.lightpushPublish( + some(pubsubTopic), message, serverRemotePeerInfo + ) + + if not publishResponse.isOk(): + echo "Publish failed: ", publishResponse.error() + + # Then the message is relayed to the server + assertResultOk publishResponse diff --git a/tests/node/test_wakunode_store.nim b/tests/node/test_wakunode_store.nim index d0e44634cc..22153de296 100644 --- a/tests/node/test_wakunode_store.nim +++ b/tests/node/test_wakunode_store.nim @@ -1,4 +1,4 @@ -{.used.} +{.used.} import std/options, @@ -9,6 +9,7 @@ import import ../../../waku/[ + common/paging, node/waku_node, node/peer_manager, waku_core, @@ -20,15 +21,7 @@ import ], ../waku_store/store_utils, ../waku_archive/archive_utils, - ../testlib/[ - common, - wakucore, - wakunode, - testasync, - futures, - testutils - ] - + ../testlib/[common, wakucore, wakunode, testasync, futures, testutils] suite "Waku Store - End to End - Sorted Archive": var pubsubTopic {.threadvar.}: PubsubTopic @@ -43,7 +36,7 @@ suite "Waku Store - End to End - Sorted Archive": var archiveDriver {.threadvar.}: ArchiveDriver var serverRemotePeerInfo {.threadvar.}: RemotePeerInfo - var clientPeerId {.threadvar.}: PeerId + var clientPeerId {.threadvar.}: PeerId asyncSetup: pubsubTopic = DefaultPubsubTopic @@ -51,25 +44,27 @@ suite "Waku Store - End to End - Sorted Archive": contentTopicSeq = @[contentTopic] let timeOrigin = now() - archiveMessages = @[ - fakeWakuMessage(@[byte 00], ts=ts(00, timeOrigin)), - fakeWakuMessage(@[byte 01], ts=ts(10, timeOrigin)), - fakeWakuMessage(@[byte 02], ts=ts(20, timeOrigin)), - fakeWakuMessage(@[byte 03], ts=ts(30, timeOrigin)), - fakeWakuMessage(@[byte 04], ts=ts(40, timeOrigin)), - fakeWakuMessage(@[byte 05], ts=ts(50, timeOrigin)), - fakeWakuMessage(@[byte 06], ts=ts(60, timeOrigin)), - fakeWakuMessage(@[byte 07], ts=ts(70, timeOrigin)), - fakeWakuMessage(@[byte 08], ts=ts(80, timeOrigin)), - fakeWakuMessage(@[byte 09], ts=ts(90, timeOrigin)) - ] - - historyQuery = HistoryQuery( - pubsubTopic: some(pubsubTopic), - contentTopics: contentTopicSeq, - direction: true, - pageSize: 5 - ) + archiveMessages = + @[ + fakeWakuMessage(@[byte 00], ts = ts(00, timeOrigin)), + fakeWakuMessage(@[byte 01], ts = ts(10, timeOrigin)), + fakeWakuMessage(@[byte 02], ts = ts(20, timeOrigin)), + fakeWakuMessage(@[byte 03], ts = ts(30, timeOrigin)), + fakeWakuMessage(@[byte 04], ts = ts(40, timeOrigin)), + fakeWakuMessage(@[byte 05], ts = ts(50, timeOrigin)), + fakeWakuMessage(@[byte 06], ts = ts(60, timeOrigin)), + fakeWakuMessage(@[byte 07], ts = ts(70, timeOrigin)), + fakeWakuMessage(@[byte 08], ts = ts(80, timeOrigin)), + fakeWakuMessage(@[byte 09], ts = ts(90, timeOrigin)) + ] + + historyQuery = + HistoryQuery( + pubsubTopic: some(pubsubTopic), + contentTopics: contentTopicSeq, + direction: PagingDirection.Forward, + pageSize: 5, + ) let serverKey = generateSecp256k1Key() @@ -103,16 +98,19 @@ suite "Waku Store - End to End - Sorted Archive": queryResponse.get().messages == archiveMessages[0..<5] # Given the next query - var otherHistoryQuery = HistoryQuery( - cursor: queryResponse.get().cursor, - pubsubTopic: some(pubsubTopic), - contentTopics: contentTopicSeq, - direction: true, - pageSize: 5 - ) + var + otherHistoryQuery = + HistoryQuery( + cursor: queryResponse.get().cursor, + pubsubTopic: some(pubsubTopic), + contentTopics: contentTopicSeq, + direction: PagingDirection.FORWARD, + pageSize: 5, + ) # When making the next history query - let otherQueryResponse = await client.query(otherHistoryQuery, serverRemotePeerInfo) + let + otherQueryResponse = await client.query(otherHistoryQuery, serverRemotePeerInfo) # Then the response contains the messages check: @@ -120,7 +118,7 @@ suite "Waku Store - End to End - Sorted Archive": asyncTest "Backward Pagination": # Given the history query is backward - historyQuery.direction = false + historyQuery.direction = PagingDirection.BACKWARD # When making a history query let queryResponse = await client.query(historyQuery, serverRemotePeerInfo) @@ -130,16 +128,19 @@ suite "Waku Store - End to End - Sorted Archive": queryResponse.get().messages == archiveMessages[5..<10] # Given the next query - var nextHistoryQuery = HistoryQuery( - cursor: queryResponse.get().cursor, - pubsubTopic: some(pubsubTopic), - contentTopics: contentTopicSeq, - direction: false, - pageSize: 5 - ) + var + nextHistoryQuery = + HistoryQuery( + cursor: queryResponse.get().cursor, + pubsubTopic: some(pubsubTopic), + contentTopics: contentTopicSeq, + direction: PagingDirection.BACKWARD, + pageSize: 5, + ) # When making the next history query - let otherQueryResponse = await client.query(nextHistoryQuery, serverRemotePeerInfo) + let + otherQueryResponse = await client.query(nextHistoryQuery, serverRemotePeerInfo) # Then the response contains the messages check: @@ -158,13 +159,15 @@ suite "Waku Store - End to End - Sorted Archive": queryResponse1.get().messages == archiveMessages[0..<2] # Given the next query (2/5) - let historyQuery2 = HistoryQuery( - cursor: queryResponse1.get().cursor, - pubsubTopic: some(pubsubTopic), - contentTopics: contentTopicSeq, - direction: true, - pageSize: 2 - ) + let + historyQuery2 = + HistoryQuery( + cursor: queryResponse1.get().cursor, + pubsubTopic: some(pubsubTopic), + contentTopics: contentTopicSeq, + direction: PagingDirection.FORWARD, + pageSize: 2, + ) # When making the next history query let queryResponse2 = await client.query(historyQuery2, serverRemotePeerInfo) @@ -174,13 +177,15 @@ suite "Waku Store - End to End - Sorted Archive": queryResponse2.get().messages == archiveMessages[2..<4] # Given the next query (3/5) - let historyQuery3 = HistoryQuery( - cursor: queryResponse2.get().cursor, - pubsubTopic: some(pubsubTopic), - contentTopics: contentTopicSeq, - direction: true, - pageSize: 2 - ) + let + historyQuery3 = + HistoryQuery( + cursor: queryResponse2.get().cursor, + pubsubTopic: some(pubsubTopic), + contentTopics: contentTopicSeq, + direction: PagingDirection.FORWARD, + pageSize: 2, + ) # When making the next history query let queryResponse3 = await client.query(historyQuery3, serverRemotePeerInfo) @@ -188,15 +193,17 @@ suite "Waku Store - End to End - Sorted Archive": # Then the response contains the messages check: queryResponse3.get().messages == archiveMessages[4..<6] - + # Given the next query (4/5) - let historyQuery4 = HistoryQuery( - cursor: queryResponse3.get().cursor, - pubsubTopic: some(pubsubTopic), - contentTopics: contentTopicSeq, - direction: true, - pageSize: 2 - ) + let + historyQuery4 = + HistoryQuery( + cursor: queryResponse3.get().cursor, + pubsubTopic: some(pubsubTopic), + contentTopics: contentTopicSeq, + direction: PagingDirection.FORWARD, + pageSize: 2, + ) # When making the next history query let queryResponse4 = await client.query(historyQuery4, serverRemotePeerInfo) @@ -206,13 +213,15 @@ suite "Waku Store - End to End - Sorted Archive": queryResponse4.get().messages == archiveMessages[6..<8] # Given the next query (5/5) - let historyQuery5 = HistoryQuery( - cursor: queryResponse4.get().cursor, - pubsubTopic: some(pubsubTopic), - contentTopics: contentTopicSeq, - direction: true, - pageSize: 2 - ) + let + historyQuery5 = + HistoryQuery( + cursor: queryResponse4.get().cursor, + pubsubTopic: some(pubsubTopic), + contentTopics: contentTopicSeq, + direction: PagingDirection.FORWARD, + pageSize: 2, + ) # When making the next history query let queryResponse5 = await client.query(historyQuery5, serverRemotePeerInfo) @@ -220,7 +229,7 @@ suite "Waku Store - End to End - Sorted Archive": # Then the response contains the messages check: queryResponse5.get().messages == archiveMessages[8..<10] - + asyncTest "Pagination with Large Page Size": # Given the first query (1/2) historyQuery.pageSize = 8 @@ -231,15 +240,17 @@ suite "Waku Store - End to End - Sorted Archive": # Then the response contains the messages check: queryResponse1.get().messages == archiveMessages[0..<8] - + # Given the next query (2/2) - let historyQuery2 = HistoryQuery( - cursor: queryResponse1.get().cursor, - pubsubTopic: some(pubsubTopic), - contentTopics: contentTopicSeq, - direction: true, - pageSize: 8 - ) + let + historyQuery2 = + HistoryQuery( + cursor: queryResponse1.get().cursor, + pubsubTopic: some(pubsubTopic), + contentTopics: contentTopicSeq, + direction: PagingDirection.FORWARD, + pageSize: 8, + ) # When making the next history query let queryResponse2 = await client.query(historyQuery2, serverRemotePeerInfo) @@ -247,7 +258,7 @@ suite "Waku Store - End to End - Sorted Archive": # Then the response contains the messages check: queryResponse2.get().messages == archiveMessages[8..<10] - + asyncTest "Pagination with Excessive Page Size": # Given the first query (1/1) historyQuery.pageSize = 100 @@ -271,13 +282,15 @@ suite "Waku Store - End to End - Sorted Archive": queryResponse1.get().messages == archiveMessages[0..<2] # Given the next query (2/3) - let historyQuery2 = HistoryQuery( - cursor: queryResponse1.get().cursor, - pubsubTopic: some(pubsubTopic), - contentTopics: contentTopicSeq, - direction: true, - pageSize: 4 - ) + let + historyQuery2 = + HistoryQuery( + cursor: queryResponse1.get().cursor, + pubsubTopic: some(pubsubTopic), + contentTopics: contentTopicSeq, + direction: PagingDirection.FORWARD, + pageSize: 4, + ) # When making the next history query let queryResponse2 = await client.query(historyQuery2, serverRemotePeerInfo) @@ -287,13 +300,15 @@ suite "Waku Store - End to End - Sorted Archive": queryResponse2.get().messages == archiveMessages[2..<6] # Given the next query (3/3) - let historyQuery3 = HistoryQuery( - cursor: queryResponse2.get().cursor, - pubsubTopic: some(pubsubTopic), - contentTopics: contentTopicSeq, - direction: true, - pageSize: 6 - ) + let + historyQuery3 = + HistoryQuery( + cursor: queryResponse2.get().cursor, + pubsubTopic: some(pubsubTopic), + contentTopics: contentTopicSeq, + direction: PagingDirection.FORWARD, + pageSize: 6, + ) # When making the next history query let queryResponse3 = await client.query(historyQuery3, serverRemotePeerInfo) @@ -305,15 +320,18 @@ suite "Waku Store - End to End - Sorted Archive": asyncTest "Pagination with Zero Page Size (Behaves as DefaultPageSize)": # Given a message list of size higher than the default page size let currentStoreLen = uint((await archiveDriver.getMessagesCount()).get()) - assert archive.DefaultPageSize > currentStoreLen, "This test requires a store with more than (DefaultPageSize) messages" + assert archive.DefaultPageSize > currentStoreLen, + "This test requires a store with more than (DefaultPageSize) messages" let missingMessagesAmount = archive.DefaultPageSize - currentStoreLen + 5 let lastMessageTimestamp = archiveMessages[archiveMessages.len - 1].timestamp var extraMessages: seq[WakuMessage] = @[] for i in 0.. currentStoreLen, "This test requires a store with more than (DefaultPageSize) messages" + assert archive.DefaultPageSize > currentStoreLen, + "This test requires a store with more than (DefaultPageSize) messages" let missingMessagesAmount = archive.DefaultPageSize - currentStoreLen + 5 let lastMessageTimestamp = archiveMessages[archiveMessages.len - 1].timestamp var extraMessages: seq[WakuMessage] = @[] for i in 0.. Date: Tue, 6 Feb 2024 16:33:13 -0400 Subject: [PATCH 213/274] feat: add yamux support (#2397) --- waku/node/waku_switch.nim | 1 + 1 file changed, 1 insertion(+) diff --git a/waku/node/waku_switch.nim b/waku/node/waku_switch.nim index f81e4a6efc..add29b16b1 100644 --- a/waku/node/waku_switch.nim +++ b/waku/node/waku_switch.nim @@ -91,6 +91,7 @@ proc newWakuSwitch*( .withMaxOut(maxOut) .withMaxConnsPerPeer(maxConnsPerPeer) .withMplex(inTimeout, outTimeout) + .withYamux() .withNoise() .withTcpTransport(transportFlags) .withNameResolver(nameResolver) From 985d092fbc45d712c368e4fa448594f4afe42bf5 Mon Sep 17 00:00:00 2001 From: Alvaro Revuelta Date: Wed, 7 Feb 2024 12:42:20 +0100 Subject: [PATCH 214/274] chore: Simplify configuration for the waku network (#2404) --- apps/wakunode2/external_config.nim | 28 +++++++++++ apps/wakunode2/networks_config.nim | 40 +++++++++++++++ apps/wakunode2/wakunode2.nim | 80 ++++++++++++++++++++++++------ 3 files changed, 133 insertions(+), 15 deletions(-) create mode 100644 apps/wakunode2/networks_config.nim diff --git a/apps/wakunode2/external_config.nim b/apps/wakunode2/external_config.nim index b611e3abb3..1aa1305d3c 100644 --- a/apps/wakunode2/external_config.nim +++ b/apps/wakunode2/external_config.nim @@ -34,6 +34,8 @@ type ProtectedTopic* = object topic*: string key*: secp256k1.SkPublicKey +type ShardIdx = distinct uint16 + type StartUpCommand* = enum noCommand # default, runs waku generateRlnKeystore # generates a new RLN keystore @@ -256,6 +258,11 @@ type desc: "Default pubsub topic to subscribe to. Argument may be repeated." name: "pubsub-topic" .}: seq[string] + shards* {. + desc: "Shards index to subscribe to [0..MAX_SHARDS-1]. Argument may be repeated." + defaultValue: @[] + name: "shard" .}: seq[ShardIdx] + contentTopics* {. desc: "Default content topic to subscribe to. Argument may be repeated." name: "content-topic" .}: seq[string] @@ -576,6 +583,15 @@ proc parseCmdArg*(T: type Option[int], p: string): T = except CatchableError: raise newException(ValueError, "Invalid number") +proc completeCmdArg*(T: type ShardIdx, val: string): seq[ShardIdx] = + return @[] + +proc parseCmdArg*(T: type ShardIdx, p: string): T = + try: + ShardIdx(parseInt(p)) + except CatchableError: + raise newException(ValueError, "Invalid shard index") + proc parseCmdArg*(T: type Option[uint], p: string): T = try: some(parseUint(p)) @@ -608,6 +624,18 @@ proc readValue*(r: var EnvvarReader, value: var ProtectedTopic) {.raises: [Seria except CatchableError: raise newException(SerializationError, getCurrentExceptionMsg()) +proc readValue*(r: var TomlReader, value: var ShardIdx) {.raises: [SerializationError].} = + try: + value = parseCmdArg(ShardIdx, r.readValue(string)) + except CatchableError: + raise newException(SerializationError, getCurrentExceptionMsg()) + +proc readValue*(r: var EnvvarReader, value: var ShardIdx) {.raises: [SerializationError].} = + try: + value = parseCmdArg(ShardIdx, r.readValue(string)) + except CatchableError: + raise newException(SerializationError, getCurrentExceptionMsg()) + {.push warning[ProveInit]: off.} proc load*(T: type WakuNodeConf, version=""): ConfResult[T] = diff --git a/apps/wakunode2/networks_config.nim b/apps/wakunode2/networks_config.nim new file mode 100644 index 0000000000..c78b0c4656 --- /dev/null +++ b/apps/wakunode2/networks_config.nim @@ -0,0 +1,40 @@ +when (NimMajor, NimMinor) < (1, 4): + {.push raises: [Defect].} +else: + {.push raises: [].} + +type ClusterConf* = object + maxMessageSize*: string + clusterId*: uint32 + rlnRelay*: bool + rlnRelayEthContractAddress*: string + rlnRelayDynamic*: bool + rlnRelayBandwidthThreshold*: int + pubsubTopics*: seq[string] + discv5Discovery*: bool + discv5BootstrapNodes*: seq[string] + +# cluster-id=1 +# Cluster configuration corresponding to The Waku Network. Note that it +# overrides existing cli configuration +proc TheWakuNetworkConf*(T: type ClusterConf): ClusterConf = + return ClusterConf( + maxMessageSize: "150KiB", + clusterId: 1.uint32, + rlnRelay: true, + rlnRelayEthContractAddress: "0xF471d71E9b1455bBF4b85d475afb9BB0954A29c4", + rlnRelayDynamic: true, + rlnRelayBandwidthThreshold: 0, + pubsubTopics: + @[ + "/waku/2/rs/1/0", "/waku/2/rs/1/1", "/waku/2/rs/1/2", "/waku/2/rs/1/3", + "/waku/2/rs/1/4", "/waku/2/rs/1/5", "/waku/2/rs/1/6", "/waku/2/rs/1/7" + ], + discv5Discovery: true, + discv5BootstrapNodes: + @[ + "enr:-QESuEC1p_s3xJzAC_XlOuuNrhVUETmfhbm1wxRGis0f7DlqGSw2FM-p2Ugl_r25UHQJ3f1rIRrpzxJXSMaJe4yk1XFSAYJpZIJ2NIJpcISygI2rim11bHRpYWRkcnO4XAArNiZub2RlLTAxLmRvLWFtczMud2FrdS50ZXN0LnN0YXR1c2ltLm5ldAZ2XwAtNiZub2RlLTAxLmRvLWFtczMud2FrdS50ZXN0LnN0YXR1c2ltLm5ldAYfQN4DgnJzkwABCAAAAAEAAgADAAQABQAGAAeJc2VjcDI1NmsxoQJATXRSRSUyTw_QLB6H_U3oziVQgNRgrXpK7wp2AMyNxYN0Y3CCdl-DdWRwgiMohXdha3UyDw", + "enr:-QEkuECnZ3IbVAgkOzv-QLnKC4dRKAPRY80m1-R7G8jZ7yfT3ipEfBrhKN7ARcQgQ-vg-h40AQzyvAkPYlHPaFKk6u9uAYJpZIJ2NIJpcIQiEAFDim11bHRpYWRkcnO4bgA0Ni9ub2RlLTAxLmdjLXVzLWNlbnRyYWwxLWEud2FrdS50ZXN0LnN0YXR1c2ltLm5ldAZ2XwA2Ni9ub2RlLTAxLmdjLXVzLWNlbnRyYWwxLWEud2FrdS50ZXN0LnN0YXR1c2ltLm5ldAYfQN4DgnJzkwABCAAAAAEAAgADAAQABQAGAAeJc2VjcDI1NmsxoQMIJwesBVgUiBCi8yiXGx7RWylBQkYm1U9dvEy-neLG2YN0Y3CCdl-DdWRwgiMohXdha3UyDw", + "enr:-QEkuEDzQyIAhs-CgBHIrJqtBv3EY1uP1Psrc-y8yJKsmxW7dh3DNcq2ergMUWSFVcJNlfcgBeVsFPkgd_QopRIiCV2pAYJpZIJ2NIJpcIQI2ttrim11bHRpYWRkcnO4bgA0Ni9ub2RlLTAxLmFjLWNuLWhvbmdrb25nLWMud2FrdS50ZXN0LnN0YXR1c2ltLm5ldAZ2XwA2Ni9ub2RlLTAxLmFjLWNuLWhvbmdrb25nLWMud2FrdS50ZXN0LnN0YXR1c2ltLm5ldAYfQN4DgnJzkwABCAAAAAEAAgADAAQABQAGAAeJc2VjcDI1NmsxoQJIN4qwz3v4r2Q8Bv8zZD0eqBcKw6bdLvdkV7-JLjqIj4N0Y3CCdl-DdWRwgiMohXdha3UyDw" + ], + ) diff --git a/apps/wakunode2/wakunode2.nim b/apps/wakunode2/wakunode2.nim index 39e4283b85..2687cb77f2 100644 --- a/apps/wakunode2/wakunode2.nim +++ b/apps/wakunode2/wakunode2.nim @@ -4,7 +4,7 @@ else: {.push raises: [].} import - std/[options, strutils, os], + std/[options, strutils, os, sequtils], stew/shims/net as stewNet, chronicles, chronos, @@ -16,12 +16,37 @@ import ../../tools/rln_keystore_generator/rln_keystore_generator, ../../waku/common/logging, ./external_config, + ./networks_config, ./app logScope: topics = "wakunode main" -{.pop.} # @TODO confutils.nim(775, 17) Error: can raise an unlisted exception: ref IOError +proc logConfig(conf: WakuNodeConf) = + info "Configuration: Enabled protocols", + relay = conf.relay, + rlnRelay = conf.rlnRelay, + store = conf.store, + filter = conf.filter, + lightpush = conf.lightpush, + peerExchange = conf.peerExchange + + info "Configuration. Network", + cluster = conf.clusterId, + pubsubTopics = conf.pubsubTopics, + maxPeers = conf.maxRelayPeers + + for i in conf.discv5BootstrapNodes: + info "Configuration. Bootstrap nodes", node = i + + if conf.rlnRelay and conf.rlnRelayDynamic: + info "Configuration. Validation", + mechanism = "onchain rln", + contract = conf.rlnRelayEthContractAddress, + maxMessageSize = conf.maxMessageSize + +{.pop.} + # @TODO confutils.nim(775, 17) Error: can raise an unlisted exception: ref IOError when isMainModule: ## Node setup happens in 6 phases: ## 1. Set up storage @@ -34,23 +59,48 @@ when isMainModule: const versionString = "version / git commit hash: " & app.git_version let rng = crypto.newRng() - let confRes = WakuNodeConf.load(version=versionString) + let confRes = WakuNodeConf.load(version = versionString) if confRes.isErr(): - error "failure while loading the configuration", error=confRes.error + error "failure while loading the configuration", error = confRes.error quit(QuitFailure) - let conf = confRes.get() + var conf = confRes.get() + + # The Waku Network config (cluster-id=1) + if conf.clusterId == 1: + let twnClusterConf = ClusterConf.TheWakuNetworkConf() + if len(conf.shards) != 0: + conf.pubsubTopics = conf.shards.mapIt(twnClusterConf.pubsubTopics[it.uint16]) + else: + conf.pubsubTopics = twnClusterConf.pubsubTopics + + # Override configuration + conf.maxMessageSize = twnClusterConf.maxMessageSize + conf.clusterId = twnClusterConf.clusterId + conf.rlnRelay = twnClusterConf.rlnRelay + conf.rlnRelayEthContractAddress = twnClusterConf.rlnRelayEthContractAddress + conf.rlnRelayDynamic = twnClusterConf.rlnRelayDynamic + conf.rlnRelayBandwidthThreshold = twnClusterConf.rlnRelayBandwidthThreshold + conf.discv5Discovery = twnClusterConf.discv5Discovery + conf.discv5BootstrapNodes = + conf.discv5BootstrapNodes & twnClusterConf.discv5BootstrapNodes ## Logging setup # Adhere to NO_COLOR initiative: https://no-color.org/ - let color = try: not parseBool(os.getEnv("NO_COLOR", "false")) - except CatchableError: true + let color = + try: + not parseBool(os.getEnv("NO_COLOR", "false")) + except CatchableError: + true logging.setupLogLevel(conf.logLevel) logging.setupLogFormat(conf.logFormat, color) - case conf.cmd: + info "Running nwaku node", version = app.git_version + logConfig(conf) + + case conf.cmd of generateRlnKeystore: doRlnKeystoreGenerator(conf) of noCommand: @@ -65,42 +115,42 @@ when isMainModule: ## Peer persistence let res1 = wakunode2.setupPeerPersistence() if res1.isErr(): - error "1/7 Setting up storage failed", error=res1.error + error "1/7 Setting up storage failed", error = res1.error quit(QuitFailure) debug "2/7 Retrieve dynamic bootstrap nodes" let res3 = wakunode2.setupDyamicBootstrapNodes() if res3.isErr(): - error "2/7 Retrieving dynamic bootstrap nodes failed", error=res3.error + error "2/7 Retrieving dynamic bootstrap nodes failed", error = res3.error quit(QuitFailure) debug "3/7 Initializing node" let res4 = wakunode2.setupWakuApp() if res4.isErr(): - error "3/7 Initializing node failed", error=res4.error + error "3/7 Initializing node failed", error = res4.error quit(QuitFailure) debug "4/7 Mounting protocols" let res5 = waitFor wakunode2.setupAndMountProtocols() if res5.isErr(): - error "4/7 Mounting protocols failed", error=res5.error + error "4/7 Mounting protocols failed", error = res5.error quit(QuitFailure) debug "5/7 Starting node and mounted protocols" let res6 = wakunode2.startApp() if res6.isErr(): - error "5/7 Starting node and protocols failed", error=res6.error + error "5/7 Starting node and protocols failed", error = res6.error quit(QuitFailure) debug "6/7 Starting monitoring and external interfaces" let res7 = wakunode2.setupMonitoringAndExternalInterfaces() if res7.isErr(): - error "6/7 Starting monitoring and external interfaces failed", error=res7.error + error "6/7 Starting monitoring and external interfaces failed", error = res7.error quit(QuitFailure) debug "7/7 Setting up shutdown hooks" @@ -133,7 +183,7 @@ when isMainModule: when defined(posix): proc handleSigsegv(signal: cint) {.noconv.} = # Require --debugger:native - fatal "Shutting down after receiving SIGSEGV", stacktrace=getBacktrace() + fatal "Shutting down after receiving SIGSEGV", stacktrace = getBacktrace() # Not available in -d:release mode writeStackTrace() From a81092e952e078100819048fa589dbd9ed73e195 Mon Sep 17 00:00:00 2001 From: Ivan FB <128452529+Ivansete-status@users.noreply.github.com> Date: Wed, 7 Feb 2024 15:24:03 +0100 Subject: [PATCH 215/274] libwaku: simpler ctx mgmt. Param now receiving void* instead of void** (#2398) This change is needed so that interoperability with other languages becomes simpler. Particularly, this simplification is needed from the Python point of view, where it is tricky to pass a void** as a parameter to an FFI function. --- examples/cbindings/waku_example.c | 10 +-- examples/nodejs/waku_addon.c | 14 ++-- examples/python/waku.py | 110 ++++++++++++++++++++---------- library/libwaku.nim | 56 +++++++-------- 4 files changed, 113 insertions(+), 77 deletions(-) diff --git a/examples/cbindings/waku_example.c b/examples/cbindings/waku_example.c index 49942235b6..bca7f771a9 100644 --- a/examples/cbindings/waku_example.c +++ b/examples/cbindings/waku_example.c @@ -288,24 +288,24 @@ int main(int argc, char** argv) { ctx = waku_new(jsonConfig, event_handler, userData); - WAKU_CALL( waku_default_pubsub_topic(&ctx, print_default_pubsub_topic, userData) ); - WAKU_CALL( waku_version(&ctx, print_waku_version, userData) ); + WAKU_CALL( waku_default_pubsub_topic(ctx, print_default_pubsub_topic, userData) ); + WAKU_CALL( waku_version(ctx, print_waku_version, userData) ); printf("Bind addr: %s:%u\n", cfgNode.host, cfgNode.port); printf("Waku Relay enabled: %s\n", cfgNode.relay == 1 ? "YES": "NO"); waku_set_event_callback(event_handler, userData); - waku_start(&ctx, event_handler, userData); + waku_start(ctx, event_handler, userData); printf("Establishing connection with: %s\n", cfgNode.peers); - WAKU_CALL( waku_connect(&ctx, + WAKU_CALL( waku_connect(ctx, cfgNode.peers, 10000 /* timeoutMs */, event_handler, userData) ); - WAKU_CALL( waku_relay_subscribe(&ctx, + WAKU_CALL( waku_relay_subscribe(ctx, "/waku/2/default-waku/proto", event_handler, userData) ); diff --git a/examples/nodejs/waku_addon.c b/examples/nodejs/waku_addon.c index 07b4e6bae2..643c90db44 100644 --- a/examples/nodejs/waku_addon.c +++ b/examples/nodejs/waku_addon.c @@ -234,7 +234,7 @@ static napi_value WakuVersion(napi_env env, napi_callback_info info) { NAPI_CALL(napi_create_reference(env, cb, 1, &ref_version_callback)); - WAKU_CALL( waku_version(&ctx, handle_waku_version, userData) ); + WAKU_CALL( waku_version(ctx, handle_waku_version, userData) ); return NULL; } @@ -290,7 +290,7 @@ static napi_value WakuSetEventCallback(napi_env env, napi_callback_info info) { } static napi_value WakuStart(napi_env env, napi_callback_info info) { - waku_start(&ctx, event_handler, userData); + waku_start(ctx, event_handler, userData); return NULL; } @@ -347,7 +347,7 @@ static napi_value WakuConnect(napi_env env, napi_callback_info info) { my_env = env; NAPI_CALL(napi_create_reference(env, cb, 1, &ref_on_error_callback)); - WAKU_CALL(waku_connect(&ctx, peers, timeoutMs, handle_error, userData)); + WAKU_CALL(waku_connect(ctx, peers, timeoutMs, handle_error, userData)); // Free allocated memory free(peers); @@ -418,7 +418,7 @@ static napi_value WakuRelayPublish(napi_env env, napi_callback_info info) { char *msgPayload = b64_encode((unsigned char*) msg, strlen(msg)); // TODO: move all the 'waku_content_topic' logic inside the libwaku - WAKU_CALL( waku_content_topic(&ctx, + WAKU_CALL( waku_content_topic(ctx, "appName", 1, content_topic_name, @@ -457,7 +457,7 @@ static napi_value WakuRelayPublish(napi_env env, napi_callback_info info) { NAPI_CALL(napi_create_reference(env, cb, 1, &ref_on_error_callback)); // Perform the actual 'publish' - WAKU_CALL( waku_relay_publish(&ctx, + WAKU_CALL( waku_relay_publish(ctx, pubsub_topic, jsonWakuMsg, timeoutMs, @@ -496,7 +496,7 @@ static napi_value WakuDefaultPubsubTopic(napi_env env, napi_callback_info info) NAPI_CALL(napi_create_reference(env, cb, 1, &ref_def_pubsub_topic_callback)); - WAKU_CALL( waku_default_pubsub_topic(&ctx, handle_default_pubsub_topic, userData) ); + WAKU_CALL( waku_default_pubsub_topic(ctx, handle_default_pubsub_topic, userData) ); return NULL; } @@ -543,7 +543,7 @@ static napi_value WakuRelaySubscribe(napi_env env, napi_callback_info info) { NAPI_CALL(napi_create_reference(env, cb, 1, &ref_on_error_callback)); // Calling the actual 'subscribe' waku function - WAKU_CALL( waku_relay_subscribe(&ctx, pubsub_topic, handle_error, userData) ); + WAKU_CALL( waku_relay_subscribe(ctx, pubsub_topic, handle_error, userData) ); free(pubsub_topic); diff --git a/examples/python/waku.py b/examples/python/waku.py index e49b33dc48..dbe0a573fb 100644 --- a/examples/python/waku.py +++ b/examples/python/waku.py @@ -19,8 +19,8 @@ """) exit(-1) -def handle_event(event): - print("Event received: {}".format(event)) +def handle_event(ret, msg, user_data): + print("Event received: %s" % msg) def call_waku(func): ret = func() @@ -55,57 +55,93 @@ def call_waku(func): args.key, "true" if args.relay else "false") -callback_type = ctypes.CFUNCTYPE(None, ctypes.c_char_p, ctypes.c_size_t) +callback_type = ctypes.CFUNCTYPE(None, ctypes.c_int, ctypes.c_char_p, ctypes.c_size_t) + +# Node creation +libwaku.waku_new.restype = ctypes.c_void_p +libwaku.waku_new.argtypes = [ctypes.c_char_p, + callback_type, + ctypes.c_void_p] + +ctx = libwaku.waku_new(bytes(json_config, 'utf-8'), + callback_type( + #onErrCb + lambda ret, msg, len: + print("Error calling waku_new: %s", + msg.decode('utf-8')) + ), + ctypes.c_void_p(0)) # Retrieve the current version of the library -libwaku.waku_version(callback_type(lambda msg, len: +libwaku.waku_version.argtypes = [ctypes.c_void_p, + callback_type, + ctypes.c_void_p] +libwaku.waku_version(ctx, + callback_type(lambda ret, msg, len: print("Git Version: %s" % - msg.decode('utf-8')))) + msg.decode('utf-8'))), + ctypes.c_void_p(0)) + # Retrieve the default pubsub topic default_pubsub_topic = "" -libwaku.waku_default_pubsub_topic(callback_type( - lambda msg, len: ( - globals().update(default_pubsub_topic = msg.decode('utf-8')), - print("Default pubsub topic: %s" % msg.decode('utf-8'))) -)) +libwaku.waku_default_pubsub_topic.argtypes = [ctypes.c_void_p, + callback_type, + ctypes.c_void_p] +libwaku.waku_default_pubsub_topic(ctx, + callback_type( + lambda ret, msg, len: ( + globals().update(default_pubsub_topic = msg.decode('utf-8')), + print("Default pubsub topic: %s" % msg.decode('utf-8'))) + ), + ctypes.c_void_p(0)) print("Bind addr: {}:{}".format(args.host, args.port)) print("Waku Relay enabled: {}".format(args.relay)) -# Node creation -libwaku.waku_new.argtypes = [ctypes.c_char_p, - callback_type] +# Set the event callback +callback = callback_type(handle_event) # This line is important so that the callback is not gc'ed -libwaku.waku_new(bytes(json_config, 'utf-8'), - callback_type( - #onErrCb - lambda msg, len: - print("Error calling waku_new: %s", - msg.decode('utf-8')) - )) -# Start the node -libwaku.waku_start() +libwaku.waku_set_event_callback.argtypes = [callback_type, ctypes.c_void_p] +libwaku.waku_set_event_callback(callback, ctypes.c_void_p(0)) -# Set the event callback -callback_type = ctypes.CFUNCTYPE(None, ctypes.c_char_p) -callback = callback_type(handle_event) -libwaku.waku_set_event_callback(callback) +# Start the node +libwaku.waku_start.argtypes = [ctypes.c_void_p, + callback_type, + ctypes.c_void_p] +libwaku.waku_start(ctx, + callback_type(lambda ret, msg, len: + print("Error in waku_start: %s" % + msg.decode('utf-8'))), + ctypes.c_void_p(0)) # Subscribe to the default pubsub topic -libwaku.waku_relay_subscribe(default_pubsub_topic.encode('utf-8'), - callback_type( - #onErrCb - lambda msg, len: - print("Error calling waku_new: %s", +libwaku.waku_relay_subscribe.argtypes = [ctypes.c_void_p, + ctypes.c_char_p, + callback_type, + ctypes.c_void_p] +libwaku.waku_relay_subscribe(ctx, + default_pubsub_topic.encode('utf-8'), + callback_type( + #onErrCb + lambda ret, msg, len: + print("Error calling waku_relay_subscribe: %s" % msg.decode('utf-8')) - )) - -libwaku.waku_connect(args.peer.encode('utf-8'), + ), + ctypes.c_void_p(0)) + +libwaku.waku_connect.argtypes = [ctypes.c_void_p, + ctypes.c_char_p, + ctypes.c_int, + callback_type, + ctypes.c_void_p] +libwaku.waku_connect(ctx, + args.peer.encode('utf-8'), 10000, - callback_type( # onErrCb - lambda msg, len: - print("Error calling waku_new: %s", msg.decode('utf-8')))) + callback_type( + lambda ret, msg, len: + print("Error calling waku_connect: %s" % msg.decode('utf-8'))), + ctypes.c_void_p(0)) # app = Flask(__name__) # @app.route("/") diff --git a/library/libwaku.nim b/library/libwaku.nim index 721e4f44e8..eab08ed04c 100644 --- a/library/libwaku.nim +++ b/library/libwaku.nim @@ -94,11 +94,11 @@ proc waku_new(configJson: cstring, return ctx -proc waku_version(ctx: ptr ptr Context, +proc waku_version(ctx: ptr Context, callback: WakuCallBack, userData: pointer): cint {.dynlib, exportc.} = - ctx[][].userData = userData + ctx[].userData = userData if isNil(callback): return RET_MISSING_CALLBACK @@ -111,7 +111,7 @@ proc waku_version(ctx: ptr ptr Context, proc waku_set_event_callback(callback: WakuCallBack) {.dynlib, exportc.} = extEventCallback = callback -proc waku_content_topic(ctx: ptr ptr Context, +proc waku_content_topic(ctx: ptr Context, appName: cstring, appVersion: cuint, contentTopicName: cstring, @@ -120,7 +120,7 @@ proc waku_content_topic(ctx: ptr ptr Context, userData: pointer): cint {.dynlib, exportc.} = # https://rfc.vac.dev/spec/36/#extern-char-waku_content_topicchar-applicationname-unsigned-int-applicationversion-char-contenttopicname-char-encoding - ctx[][].userData = userData + ctx[].userData = userData if isNil(callback): return RET_MISSING_CALLBACK @@ -138,13 +138,13 @@ proc waku_content_topic(ctx: ptr ptr Context, return RET_OK -proc waku_pubsub_topic(ctx: ptr ptr Context, +proc waku_pubsub_topic(ctx: ptr Context, topicName: cstring, callback: WakuCallBack, userData: pointer): cint {.dynlib, exportc, cdecl.} = # https://rfc.vac.dev/spec/36/#extern-char-waku_pubsub_topicchar-name-char-encoding - ctx[][].userData = userData + ctx[].userData = userData if isNil(callback): return RET_MISSING_CALLBACK @@ -158,12 +158,12 @@ proc waku_pubsub_topic(ctx: ptr ptr Context, return RET_OK -proc waku_default_pubsub_topic(ctx: ptr ptr Context, +proc waku_default_pubsub_topic(ctx: ptr Context, callback: WakuCallBack, userData: pointer): cint {.dynlib, exportc.} = # https://rfc.vac.dev/spec/36/#extern-char-waku_default_pubsub_topic - ctx[][].userData = userData + ctx[].userData = userData if isNil(callback): return RET_MISSING_CALLBACK @@ -172,7 +172,7 @@ proc waku_default_pubsub_topic(ctx: ptr ptr Context, return RET_OK -proc waku_relay_publish(ctx: ptr ptr Context, +proc waku_relay_publish(ctx: ptr Context, pubSubTopic: cstring, jsonWakuMessage: cstring, timeoutMs: cuint, @@ -182,7 +182,7 @@ proc waku_relay_publish(ctx: ptr ptr Context, {.dynlib, exportc, cdecl.} = # https://rfc.vac.dev/spec/36/#extern-char-waku_relay_publishchar-messagejson-char-pubsubtopic-int-timeoutms - ctx[][].userData = userData + ctx[].userData = userData if isNil(callback): return RET_MISSING_CALLBACK @@ -226,7 +226,7 @@ proc waku_relay_publish(ctx: ptr ptr Context, $pst let sendReqRes = waku_thread.sendRequestToWakuThread( - ctx[], + ctx, RequestType.RELAY, RelayRequest.createShared(RelayMsgType.PUBLISH, PubsubTopic($pst), @@ -241,42 +241,42 @@ proc waku_relay_publish(ctx: ptr ptr Context, return RET_OK -proc waku_start(ctx: ptr ptr Context, +proc waku_start(ctx: ptr Context, callback: WakuCallBack, userData: pointer): cint {.dynlib, exportc.} = - ctx[][].userData = userData + ctx[].userData = userData ## TODO: handle the error discard waku_thread.sendRequestToWakuThread( - ctx[], + ctx, RequestType.LIFECYCLE, NodeLifecycleRequest.createShared( NodeLifecycleMsgType.START_NODE)) -proc waku_stop(ctx: ptr ptr Context, +proc waku_stop(ctx: ptr Context, callback: WakuCallBack, userData: pointer): cint {.dynlib, exportc.} = - ctx[][].userData = userData + ctx[].userData = userData ## TODO: handle the error discard waku_thread.sendRequestToWakuThread( - ctx[], + ctx, RequestType.LIFECYCLE, NodeLifecycleRequest.createShared( NodeLifecycleMsgType.STOP_NODE)) proc waku_relay_subscribe( - ctx: ptr ptr Context, + ctx: ptr Context, pubSubTopic: cstring, callback: WakuCallBack, userData: pointer): cint {.dynlib, exportc.} = - ctx[][].userData = userData + ctx[].userData = userData let pst = pubSubTopic.alloc() let sendReqRes = waku_thread.sendRequestToWakuThread( - ctx[], + ctx, RequestType.RELAY, RelayRequest.createShared(RelayMsgType.SUBSCRIBE, PubsubTopic($pst), @@ -291,18 +291,18 @@ proc waku_relay_subscribe( return RET_OK proc waku_relay_unsubscribe( - ctx: ptr ptr Context, + ctx: ptr Context, pubSubTopic: cstring, callback: WakuCallBack, userData: pointer): cint {.dynlib, exportc.} = - ctx[][].userData = userData + ctx[].userData = userData let pst = pubSubTopic.alloc() let sendReqRes = waku_thread.sendRequestToWakuThread( - ctx[], + ctx, RequestType.RELAY, RelayRequest.createShared(RelayMsgType.SUBSCRIBE, PubsubTopic($pst), @@ -316,17 +316,17 @@ proc waku_relay_unsubscribe( return RET_OK -proc waku_connect(ctx: ptr ptr Context, +proc waku_connect(ctx: ptr Context, peerMultiAddr: cstring, timeoutMs: cuint, callback: WakuCallBack, userData: pointer): cint {.dynlib, exportc.} = - ctx[][].userData = userData + ctx[].userData = userData let connRes = waku_thread.sendRequestToWakuThread( - ctx[], + ctx, RequestType.PEER_MANAGER, PeerManagementRequest.createShared( PeerManagementMsgType.CONNECT_TO, @@ -339,7 +339,7 @@ proc waku_connect(ctx: ptr ptr Context, return RET_OK -proc waku_store_query(ctx: ptr ptr Context, +proc waku_store_query(ctx: ptr Context, queryJson: cstring, peerId: cstring, timeoutMs: cint, @@ -347,7 +347,7 @@ proc waku_store_query(ctx: ptr ptr Context, userData: pointer): cint {.dynlib, exportc.} = - ctx[][].userData = userData + ctx[].userData = userData ## TODO: implement the logic that make the "self" node to act as a Store client From 2d46c35117e2a4bb61c07f28d116ca51c4dc4f3d Mon Sep 17 00:00:00 2001 From: Aaryamann Challani <43716372+rymnc@users.noreply.github.com> Date: Fri, 9 Feb 2024 16:31:45 +0530 Subject: [PATCH 216/274] feat(rln-relay-v2): rln-keystore-generator updates (#2392) * chore: init rln-v2 in OnchainGroupManager * chore: update wrappers * fix: units for userMessageLimit * valueOr for error handling * fix: len usage --- apps/wakunode2/external_config.nim | 5 + .../rln_keystore_generator.nim | 34 +- waku/waku_keystore/protocol_types.nim | 42 +- waku/waku_rln_relay/conversion_utils.nim | 4 + .../group_manager/group_manager_base.nim | 132 ++++--- .../group_manager/on_chain/group_manager.nim | 374 ++++++++++++------ .../group_manager/static/group_manager.nim | 105 +++-- waku/waku_rln_relay/protocol_types.nim | 4 + waku/waku_rln_relay/rln/wrappers.nim | 32 +- waku/waku_rln_relay/rln_relay.nim | 7 +- 10 files changed, 515 insertions(+), 224 deletions(-) diff --git a/apps/wakunode2/external_config.nim b/apps/wakunode2/external_config.nim index 1aa1305d3c..907f42e6de 100644 --- a/apps/wakunode2/external_config.nim +++ b/apps/wakunode2/external_config.nim @@ -81,6 +81,11 @@ type desc: "Private key for broadcasting transactions", defaultValue: "", name: "rln-relay-eth-private-key" }: string + + rlnRelayUserMessageLimit* {. + desc: "Set a user message limit for the rln membership registration. Must be a positive integer. Default is 1.", + defaultValue: 1, + name: "rln-relay-user-message-limit" .}: uint64 maxMessageSize* {. desc: "Maximum message size. Accepted units: KiB, KB, and B. e.g. 1024KiB; 1500 B; etc." diff --git a/tools/rln_keystore_generator/rln_keystore_generator.nim b/tools/rln_keystore_generator/rln_keystore_generator.nim index 5c312575ee..5742eedc29 100644 --- a/tools/rln_keystore_generator/rln_keystore_generator.nim +++ b/tools/rln_keystore_generator/rln_keystore_generator.nim @@ -63,7 +63,10 @@ proc doRlnKeystoreGenerator*(conf: WakuNodeConf) = # 5. register on-chain try: - waitFor groupManager.register(credential) + when defined(rln_v2): + waitFor groupManager.register(credential, conf.rlnRelayUserMessageLimit) + else: + waitFor groupManager.register(credential) except Exception, CatchableError: error "failure while registering credentials on-chain", error=getCurrentExceptionMsg() quit(1) @@ -73,16 +76,29 @@ proc doRlnKeystoreGenerator*(conf: WakuNodeConf) = info "Your membership has been registered on-chain.", chainId = $groupManager.chainId.get(), contractAddress = conf.rlnRelayEthContractAddress, membershipIndex = groupManager.membershipIndex.get() + when defined(rln_v2): + info "Your user message limit is", userMessageLimit = conf.rlnRelayUserMessageLimit # 6. write to keystore - let keystoreCred = KeystoreMembership( - membershipContract: MembershipContract( - chainId: $groupManager.chainId.get(), - address: conf.rlnRelayEthContractAddress, - ), - treeIndex: groupManager.membershipIndex.get(), - identityCredential: credential, - ) + when defined(rln_v2): + let keystoreCred = KeystoreMembership( + membershipContract: MembershipContract( + chainId: $groupManager.chainId.get(), + address: conf.rlnRelayEthContractAddress, + ), + treeIndex: groupManager.membershipIndex.get(), + identityCredential: credential, + userMessageLimit: conf.rlnRelayUserMessageLimit, + ) + else: + let keystoreCred = KeystoreMembership( + membershipContract: MembershipContract( + chainId: $groupManager.chainId.get(), + address: conf.rlnRelayEthContractAddress, + ), + treeIndex: groupManager.membershipIndex.get(), + identityCredential: credential, + ) let persistRes = addMembershipCredentials(conf.rlnRelayCredPath, keystoreCred, diff --git a/waku/waku_keystore/protocol_types.nim b/waku/waku_keystore/protocol_types.nim index c1a5babd76..7f2b25a282 100644 --- a/waku/waku_keystore/protocol_types.nim +++ b/waku/waku_keystore/protocol_types.nim @@ -42,8 +42,7 @@ proc toIDCommitment*(idCommitmentUint: UInt256): IDCommitment = type MembershipIndex* = uint proc toMembershipIndex*(v: UInt256): MembershipIndex = - let membershipIndex: MembershipIndex = cast[MembershipIndex](v) - return membershipIndex + return cast[MembershipIndex](v) # Converts a sequence of tuples containing 4 string (i.e. identity trapdoor, nullifier, secret hash and commitment) to an IndentityCredential type RawMembershipCredentials* = (string, string, string, string) @@ -93,18 +92,35 @@ type KeystoreMembership* = ref object of RootObj membershipContract*: MembershipContract treeIndex*: MembershipIndex identityCredential*: IdentityCredential + when defined(rln_v2): + userMessageLimit*: uint64 -proc `$`*(m: KeystoreMembership): string = - return "KeystoreMembership(chainId: " & m.membershipContract.chainId & ", contractAddress: " & m.membershipContract.address & ", treeIndex: " & $m.treeIndex & ", identityCredential: " & $m.identityCredential & ")" - -proc `==`*(x, y: KeystoreMembership): bool = - return x.membershipContract.chainId == y.membershipContract.chainId and - x.membershipContract.address == y.membershipContract.address and - x.treeIndex == y.treeIndex and - x.identityCredential.idTrapdoor == y.identityCredential.idTrapdoor and - x.identityCredential.idNullifier == y.identityCredential.idNullifier and - x.identityCredential.idSecretHash == y.identityCredential.idSecretHash and - x.identityCredential.idCommitment == y.identityCredential.idCommitment +when defined(rln_v2): + proc `$`*(m: KeystoreMembership): string = + return "KeystoreMembership(chainId: " & m.membershipContract.chainId & ", contractAddress: " & m.membershipContract.address & ", treeIndex: " & $m.treeIndex & ", userMessageLimit: " & $m.userMessageLimit & ", identityCredential: " & $m.identityCredential & ")" +else: + proc `$`*(m: KeystoreMembership): string = + return "KeystoreMembership(chainId: " & m.membershipContract.chainId & ", contractAddress: " & m.membershipContract.address & ", treeIndex: " & $m.treeIndex & ", identityCredential: " & $m.identityCredential & ")" + +when defined(rln_v2): + proc `==`*(x, y: KeystoreMembership): bool = + return x.membershipContract.chainId == y.membershipContract.chainId and + x.membershipContract.address == y.membershipContract.address and + x.treeIndex == y.treeIndex and + x.userMessageLimit == y.userMessageLimit and + x.identityCredential.idTrapdoor == y.identityCredential.idTrapdoor and + x.identityCredential.idNullifier == y.identityCredential.idNullifier and + x.identityCredential.idSecretHash == y.identityCredential.idSecretHash and + x.identityCredential.idCommitment == y.identityCredential.idCommitment +else: + proc `==`*(x, y: KeystoreMembership): bool = + return x.membershipContract.chainId == y.membershipContract.chainId and + x.membershipContract.address == y.membershipContract.address and + x.treeIndex == y.treeIndex and + x.identityCredential.idTrapdoor == y.identityCredential.idTrapdoor and + x.identityCredential.idNullifier == y.identityCredential.idNullifier and + x.identityCredential.idSecretHash == y.identityCredential.idSecretHash and + x.identityCredential.idCommitment == y.identityCredential.idCommitment proc hash*(m: KeystoreMembership): string = # hash together the chainId, address and treeIndex diff --git a/waku/waku_rln_relay/conversion_utils.nim b/waku/waku_rln_relay/conversion_utils.nim index 45201f805d..c00e6a50d6 100644 --- a/waku/waku_rln_relay/conversion_utils.nim +++ b/waku/waku_rln_relay/conversion_utils.nim @@ -41,6 +41,10 @@ proc inHex*(value: IdentityTrapdoor or valueHex = "0" & valueHex return toLowerAscii(valueHex) +when defined(rln_v2): + proc toUserMessageLimit*(v: UInt256): UserMessageLimit = + return cast[UserMessageLimit](v) + proc encodeLengthPrefix*(input: openArray[byte]): seq[byte] = ## returns length prefixed version of the input ## with the following format [len<8>|input] diff --git a/waku/waku_rln_relay/group_manager/group_manager_base.nim b/waku/waku_rln_relay/group_manager/group_manager_base.nim index 947097af36..2fb68df220 100644 --- a/waku/waku_rln_relay/group_manager/group_manager_base.nim +++ b/waku/waku_rln_relay/group_manager/group_manager_base.nim @@ -23,8 +23,11 @@ export # It should also be used to sync the group state with the rest of the group members type Membership* = object - idCommitment*: IDCommitment index*: MembershipIndex + when defined(rln_v2): + rateCommitment*: RateCommitment + else: + idCommitment*: IDCommitment type OnRegisterCallback* = proc (registrations: seq[Membership]): Future[void] {.gcsafe.} type OnWithdrawCallback* = proc (withdrawals: seq[Membership]): Future[void] {.gcsafe.} @@ -41,6 +44,8 @@ type initialized*: bool latestIndex*: MembershipIndex validRoots*: Deque[MerkleNode] + when defined(rln_v2): + userMessageLimit*: Option[UserMessageLimit] # This proc is used to initialize the group manager # Any initialization logic should be implemented here @@ -55,20 +60,35 @@ method startGroupSync*(g: GroupManager): Future[void] {.base, async: (raises: [E # This proc is used to register a new identity commitment into the merkle tree # The user may or may not have the identity secret to this commitment # It should be used when detecting new members in the group, and syncing the group state -method register*(g: GroupManager, idCommitment: IDCommitment): Future[void] {.base,async: (raises: [Exception]).} = - raise newException(CatchableError, "register proc for " & $g.type & " is not implemented yet") +when defined(rln_v2): + method register*(g: GroupManager, + rateCommitment: RateCommitment): Future[void] {.base,async: (raises: [Exception]).} = + raise newException(CatchableError, "register proc for " & $g.type & " is not implemented yet") +else: + method register*(g: GroupManager, idCommitment: IDCommitment): Future[void] {.base,async: (raises: [Exception]).} = + raise newException(CatchableError, "register proc for " & $g.type & " is not implemented yet") # This proc is used to register a new identity commitment into the merkle tree # The user should have the identity secret to this commitment # It should be used when the user wants to join the group -method register*(g: GroupManager, credentials: IdentityCredential): Future[void] {.base,async: (raises: [Exception]).} = - raise newException(CatchableError, "register proc for " & $g.type & " is not implemented yet") +when defined(rln_v2): + method register*(g: GroupManager, + credentials: IdentityCredential, + userMessageLimit: UserMessageLimit): Future[void] {.base,async: (raises: [Exception]).} = + raise newException(CatchableError, "register proc for " & $g.type & " is not implemented yet") +else: + method register*(g: GroupManager, credentials: IdentityCredential): Future[void] {.base,async: (raises: [Exception]).} = + raise newException(CatchableError, "register proc for " & $g.type & " is not implemented yet") # This proc is used to register a batch of new identity commitments into the merkle tree # The user may or may not have the identity secret to these commitments # It should be used when detecting a batch of new members in the group, and syncing the group state -method registerBatch*(g: GroupManager, idCommitments: seq[IDCommitment]): Future[void] {.base,async: (raises: [Exception]).} = - raise newException(CatchableError, "registerBatch proc for " & $g.type & " is not implemented yet") +when defined(rln_v2): + method registerBatch*(g: GroupManager, rateCommitments: seq[RateCommitment]): Future[void] {.base,async: (raises: [Exception]).} = + raise newException(CatchableError, "registerBatch proc for " & $g.type & " is not implemented yet") +else: + method registerBatch*(g: GroupManager, idCommitments: seq[IDCommitment]): Future[void] {.base,async: (raises: [Exception]).} = + raise newException(CatchableError, "registerBatch proc for " & $g.type & " is not implemented yet") # This proc is used to set a callback that will be called when a new identity commitment is registered # The callback may be called multiple times, and should be used to for any post processing @@ -86,8 +106,16 @@ method withdrawBatch*(g: GroupManager, identitySecretHashes: seq[IdentitySecretH raise newException(CatchableError, "withdrawBatch proc for " & $g.type & " is not implemented yet") # This proc is used to insert and remove a set of commitments from the merkle tree -method atomicBatch*(g: GroupManager, idCommitments: seq[IDCommitment], toRemoveIndices: seq[MembershipIndex]): Future[void] {.base,async: (raises: [Exception]).} = - raise newException(CatchableError, "atomicBatch proc for " & $g.type & " is not implemented yet") +when defined(rln_v2): + method atomicBatch*(g: GroupManager, + rateCommitments: seq[RateCommitment], + toRemoveIndices: seq[MembershipIndex]): Future[void] {.base,async: (raises: [Exception]).} = + raise newException(CatchableError, "atomicBatch proc for " & $g.type & " is not implemented yet") +else: + method atomicBatch*(g: GroupManager, + idCommitments: seq[IDCommitment], + toRemoveIndices: seq[MembershipIndex]): Future[void] {.base,async: (raises: [Exception]).} = + raise newException(CatchableError, "atomicBatch proc for " & $g.type & " is not implemented yet") method stop*(g: GroupManager): Future[void] {.base,async.} = raise newException(CatchableError, "stop proc for " & $g.type & " is not implemented yet") @@ -99,7 +127,7 @@ method onWithdraw*(g: GroupManager, cb: OnWithdrawCallback) {.base,gcsafe.} = proc slideRootQueue*(rootQueue: var Deque[MerkleNode], root: MerkleNode): seq[MerkleNode] = ## updates the root queue with the latest root and pops the oldest one when the capacity of `AcceptableRootWindowSize` is reached - let overflowCount = rootQueue.len() - AcceptableRootWindowSize + 1 + let overflowCount = rootQueue.len - AcceptableRootWindowSize + 1 var overflowedRoots = newSeq[MerkleNode]() if overflowCount > 0: # Delete the oldest `overflowCount` roots in the deque (index 0..`overflowCount`) @@ -135,45 +163,55 @@ template slideRootQueue*(g: GroupManager): untyped = discard rootBuffer.slideRootQueue(root) rootBuffer +method verifyProof*(g: GroupManager, + input: openArray[byte], + proof: RateLimitProof): GroupManagerResult[bool] {.base,gcsafe,raises:[].} = + ## verifies the proof against the input and the current merkle root + let proofVerifyRes = g.rlnInstance.proofVerify(input, proof, g.validRoots.items().toSeq()) + if proofVerifyRes.isErr(): + return err("proof verification failed: " & $proofVerifyRes.error()) + return ok(proofVerifyRes.value()) + when defined(rln_v2): - method verifyProof*(g: GroupManager, - input: openArray[byte], - proof: RateLimitProof): GroupManagerResult[bool] {.base,gcsafe,raises:[].} = - ## verifies the proof against the input and the current merkle root - ## TODO: verify the external nullifier with provided RateLimitProof - let proofVerifyRes = g.rlnInstance.proofVerify(input, RateLimitProof(proof), g.validRoots.items().toSeq()) - if proofVerifyRes.isErr(): - return err("proof verification failed: " & $proofVerifyRes.error()) - return ok(proofVerifyRes.value()) + method generateProof*(g: GroupManager, + data: openArray[byte], + epoch: Epoch, + messageId: MessageId, + rlnIdentifier = DefaultRlnIdentifier): GroupManagerResult[RateLimitProof] {.base,gcsafe,raises:[].} = + ## generates a proof for the given data and epoch + ## the proof is generated using the current merkle root + if g.idCredentials.isNone(): + return err("identity credentials are not set") + if g.membershipIndex.isNone(): + return err("membership index is not set") + if g.userMessageLimit.isNone(): + return err("user message limit is not set") + waku_rln_proof_generation_duration_seconds.nanosecondTime: + let proof = proofGen(rlnInstance = g.rlnInstance, + data = data, + memKeys = g.idCredentials.get(), + memIndex = g.membershipIndex.get(), + epoch = epoch).valueOr: + return err("proof generation failed: " & $error) + return ok(proof) else: - method verifyProof*(g: GroupManager, - input: openArray[byte], - proof: RateLimitProof): GroupManagerResult[bool] {.base,gcsafe,raises:[].} = - ## verifies the proof against the input and the current merkle root - let proofVerifyRes = g.rlnInstance.proofVerify(input, proof, g.validRoots.items().toSeq()) - if proofVerifyRes.isErr(): - return err("proof verification failed: " & $proofVerifyRes.error()) - return ok(proofVerifyRes.value()) - - -method generateProof*(g: GroupManager, - data: openArray[byte], - epoch: Epoch): GroupManagerResult[RateLimitProof] {.base,gcsafe,raises:[].} = - ## generates a proof for the given data and epoch - ## the proof is generated using the current merkle root - if g.idCredentials.isNone(): - return err("identity credentials are not set") - if g.membershipIndex.isNone(): - return err("membership index is not set") - waku_rln_proof_generation_duration_seconds.nanosecondTime: - let proofGenRes = proofGen(rlnInstance = g.rlnInstance, - data = data, - memKeys = g.idCredentials.get(), - memIndex = g.membershipIndex.get(), - epoch = epoch) - if proofGenRes.isErr(): - return err("proof generation failed: " & $proofGenRes.error()) - return ok(proofGenRes.value()) + method generateProof*(g: GroupManager, + data: openArray[byte], + epoch: Epoch): GroupManagerResult[RateLimitProof] {.base,gcsafe,raises:[].} = + ## generates a proof for the given data and epoch + ## the proof is generated using the current merkle root + if g.idCredentials.isNone(): + return err("identity credentials are not set") + if g.membershipIndex.isNone(): + return err("membership index is not set") + waku_rln_proof_generation_duration_seconds.nanosecondTime: + let proof = proofGen(rlnInstance = g.rlnInstance, + data = data, + memKeys = g.idCredentials.get(), + memIndex = g.membershipIndex.get(), + epoch = epoch).valueOr: + return err("proof generation failed: " & $error) + return ok(proof) method isReady*(g: GroupManager): Future[bool] {.base,async.} = raise newException(CatchableError, "isReady proc for " & $g.type & " is not implemented yet") diff --git a/waku/waku_rln_relay/group_manager/on_chain/group_manager.nim b/waku/waku_rln_relay/group_manager/on_chain/group_manager.nim index 53059251da..d393b4ec13 100644 --- a/waku/waku_rln_relay/group_manager/on_chain/group_manager.nim +++ b/waku/waku_rln_relay/group_manager/on_chain/group_manager.nim @@ -8,6 +8,7 @@ import web3/ethtypes, eth/keys as keys, chronicles, + nimcrypto/keccak, stint, json, std/tables, @@ -28,28 +29,54 @@ export group_manager_base logScope: topics = "waku rln_relay onchain_group_manager" -contract(WakuRlnRegistry): - # this describes the storage slot to use - proc usingStorageIndex(): Uint16 {.pure.} - # this map contains the address of a given storage slot - proc storages(index: Uint16): Address {.pure.} - # this serves as an entrypoint into the rln storage contract - proc register(storageIndex: Uint16, idCommitment: Uint256) - # this creates a new storage on the rln registry - proc newStorage() - -# membership contract interface -contract(RlnStorage): - # this event is raised when a new member is registered - proc MemberRegistered(idCommitment: Uint256, index: Uint256) {.event.} - # this constant contains the membership deposit of the contract - proc MEMBERSHIP_DEPOSIT(): Uint256 {.pure.} - # this map denotes existence of a given user - proc memberExists(idCommitment: Uint256): Uint256 {.view.} - # this constant describes the next index of a new member - proc idCommitmentIndex(): Uint256 {.view.} - # this constant describes the block number this contract was deployed on - proc deployedBlockNumber(): Uint256 {.view.} +# using the when predicate does not work within the contract macro, hence need to dupe +when defined(rln_v2): + contract(WakuRlnRegistry): + # this describes the storage slot to use + proc usingStorageIndex(): Uint16 {.pure.} + # this map contains the address of a given storage slot + proc storages(index: Uint16): Address {.pure.} + # this serves as an entrypoint into the rln storage contract + proc register(storageIndex: Uint16, idCommitment: Uint256, userMessageLimit: Uint256) + # this creates a new storage on the rln registry + proc newStorage() + + # membership contract interface + contract(RlnStorage): + # this event is raised when a new member is registered + proc MemberRegistered(idCommitment: Uint256, userMessageLimit: Uint256, index: Uint256) {.event.} + # this constant contains the membership deposit of the contract + proc MEMBERSHIP_DEPOSIT(): Uint256 {.pure.} + # this map denotes existence of a given user + proc memberExists(idCommitment: Uint256): Uint256 {.view.} + # this constant describes the next index of a new member + proc idCommitmentIndex(): Uint256 {.view.} + # this constant describes the block number this contract was deployed on + proc deployedBlockNumber(): Uint256 {.view.} +else: + contract(WakuRlnRegistry): + # this describes the storage slot to use + proc usingStorageIndex(): Uint16 {.pure.} + # this map contains the address of a given storage slot + proc storages(index: Uint16): Address {.pure.} + # this serves as an entrypoint into the rln storage contract + proc register(storageIndex: Uint16, idCommitment: Uint256) + # this creates a new storage on the rln registry + proc newStorage() + + # membership contract interface + contract(RlnStorage): + # this event is raised when a new member is registered + proc MemberRegistered(idCommitment: Uint256, index: Uint256) {.event.} + # this constant contains the membership deposit of the contract + proc MEMBERSHIP_DEPOSIT(): Uint256 {.pure.} + # this map denotes existence of a given user + proc memberExists(idCommitment: Uint256): Uint256 {.view.} + # this constant describes the next index of a new member + proc idCommitmentIndex(): Uint256 {.view.} + # this constant describes the block number this contract was deployed on + proc deployedBlockNumber(): Uint256 {.view.} + type RegistryContractWithSender = Sender[WakuRlnRegistry] @@ -100,96 +127,197 @@ proc setMetadata*(g: OnchainGroupManager): RlnRelayResult[void] = return err("failed to persist rln metadata: " & getCurrentExceptionMsg()) return ok() -method atomicBatch*(g: OnchainGroupManager, - start: MembershipIndex, - idCommitments = newSeq[IDCommitment](), - toRemoveIndices = newSeq[MembershipIndex]()): - Future[void] {.async: (raises: [Exception]).} = - initializedGuard(g) - - waku_rln_membership_insertion_duration_seconds.nanosecondTime: - let operationSuccess = g.rlnInstance.atomicWrite(some(start), idCommitments, toRemoveIndices) - if not operationSuccess: - raise newException(ValueError, "atomic batch operation failed") - # TODO: when slashing is enabled, we need to track slashed members - waku_rln_number_registered_memberships.set(int64(g.rlnInstance.leavesSet())) - if g.registerCb.isSome(): - var membersSeq = newSeq[Membership]() - for i in 0 ..< idCommitments.len(): - var index = start + MembershipIndex(i) - trace "registering member", idCommitment = idCommitments[i], index = index - let member = Membership(idCommitment: idCommitments[i], index: index) - membersSeq.add(member) - await g.registerCb.get()(membersSeq) - - g.validRootBuffer = g.slideRootQueue() - let setMetadataRes = g.setMetadata() - if setMetadataRes.isErr(): - error "failed to persist rln metadata", error=setMetadataRes.error - -method register*(g: OnchainGroupManager, idCommitment: IDCommitment): - Future[void] {.async: (raises: [Exception]).} = - initializedGuard(g) - - await g.registerBatch(@[idCommitment]) - - -method registerBatch*(g: OnchainGroupManager, idCommitments: seq[IDCommitment]): +when defined(rln_v2): + method atomicBatch*(g: OnchainGroupManager, + start: MembershipIndex, + rateCommitments = newSeq[RateCommitment](), + toRemoveIndices = newSeq[MembershipIndex]()): Future[void] {.async: (raises: [Exception]).} = - initializedGuard(g) + initializedGuard(g) + + # convert the rateCommitment struct to a leaf value + let leavesRes = rateCommitments.toLeaves() + if leavesRes.isErr(): + raise newException(CatchableError, "failed to convert rateCommitments to leaves: " & leavesRes.error) + let leaves = cast[seq[seq[byte]]](leavesRes.get()) + + waku_rln_membership_insertion_duration_seconds.nanosecondTime: + let operationSuccess = g.rlnInstance.atomicWrite(some(start), + leaves, + toRemoveIndices) + if not operationSuccess: + raise newException(CatchableError, "atomic batch operation failed") + # TODO: when slashing is enabled, we need to track slashed members + waku_rln_number_registered_memberships.set(int64(g.rlnInstance.leavesSet())) + + if g.registerCb.isSome(): + var membersSeq = newSeq[Membership]() + for i in 0 ..< rateCommitments.len: + var index = start + MembershipIndex(i) + trace "registering member", rateCommitment = rateCommitments[i], index = index + let member = Membership(rateCommitment: rateCommitments[i], index: index) + membersSeq.add(member) + await g.registerCb.get()(membersSeq) + + g.validRootBuffer = g.slideRootQueue() + let setMetadataRes = g.setMetadata() + if setMetadataRes.isErr(): + error "failed to persist rln metadata", error=setMetadataRes.error +else: + method atomicBatch*(g: OnchainGroupManager, + start: MembershipIndex, + idCommitments = newSeq[IDCommitment](), + toRemoveIndices = newSeq[MembershipIndex]()): + Future[void] {.async: (raises: [Exception]).} = + initializedGuard(g) + + waku_rln_membership_insertion_duration_seconds.nanosecondTime: + let operationSuccess = g.rlnInstance.atomicWrite(some(start), idCommitments, toRemoveIndices) + if not operationSuccess: + raise newException(ValueError, "atomic batch operation failed") + # TODO: when slashing is enabled, we need to track slashed members + waku_rln_number_registered_memberships.set(int64(g.rlnInstance.leavesSet())) + + if g.registerCb.isSome(): + var membersSeq = newSeq[Membership]() + for i in 0 ..< idCommitments.len: + var index = start + MembershipIndex(i) + trace "registering member", idCommitment = idCommitments[i], index = index + let member = Membership(idCommitment: idCommitments[i], index: index) + membersSeq.add(member) + await g.registerCb.get()(membersSeq) + + g.validRootBuffer = g.slideRootQueue() + let setMetadataRes = g.setMetadata() + if setMetadataRes.isErr(): + error "failed to persist rln metadata", error=setMetadataRes.error + +when defined(rln_v2): + method register*(g: OnchainGroupManager, + rateCommitment: RateCommitment): Future[void] {.async: (raises: [Exception]).} = + initializedGuard(g) + + await g.registerBatch(@[rateCommitment]) +else: + method register*(g: OnchainGroupManager, + idCommitment: IDCommitment): Future[void] {.async: (raises: [Exception]).} = + initializedGuard(g) - await g.atomicBatch(g.latestIndex, idCommitments) - g.latestIndex += MembershipIndex(idCommitments.len()) + await g.registerBatch(@[idCommitment]) -method register*(g: OnchainGroupManager, identityCredentials: IdentityCredential): - Future[void] {.async: (raises: [Exception]).} = - initializedGuard(g) +when defined(rln_v2): + method registerBatch*(g: OnchainGroupManager, + rateCommitments: seq[RateCommitment]): Future[void] {.async: (raises: [Exception]).} = + initializedGuard(g) - let ethRpc = g.ethRpc.get() - let registryContract = g.registryContract.get() - let membershipFee = g.membershipFee.get() - - var gasPrice: int - retryWrapper(gasPrice, RetryStrategy.new(), "Failed to get gas price"): - int(await ethRpc.provider.eth_gasPrice()) * 2 - let idCommitment = identityCredentials.idCommitment.toUInt256() - - var txHash: TxHash - let storageIndex = g.usingStorageIndex.get() - debug "registering the member", idCommitment = idCommitment, storageIndex = storageIndex - retryWrapper(txHash, RetryStrategy.new(), "Failed to register the member"): - await registryContract.register(storageIndex, idCommitment).send(gasPrice = gasPrice) - - # wait for the transaction to be mined - var tsReceipt: ReceiptObject - retryWrapper(tsReceipt, RetryStrategy.new(), "Failed to get the transaction receipt"): - await ethRpc.getMinedTransactionReceipt(txHash) - debug "registration transaction mined", txHash = txHash - g.registrationTxHash = some(txHash) - # the receipt topic holds the hash of signature of the raised events - # TODO: make this robust. search within the event list for the event - let firstTopic = tsReceipt.logs[0].topics[0] - # the hash of the signature of MemberRegistered(uint256,uint256) event is equal to the following hex value - if firstTopic != cast[FixedBytes[32]](hexToByteArray[32]( - "0x5a92c2530f207992057b9c3e544108ffce3beda4a63719f316967c49bf6159d2" - )): - raise newException(ValueError, "unexpected event signature") - - # the arguments of the raised event i.e., MemberRegistered are encoded inside the data field - # data = pk encoded as 256 bits || index encoded as 256 bits - let arguments = tsReceipt.logs[0].data - debug "tx log data", arguments=arguments - let - argumentsBytes = arguments - # In TX log data, uints are encoded in big endian - eventIndex = UInt256.fromBytesBE(argumentsBytes[32..^1]) - - g.membershipIndex = some(eventIndex.toMembershipIndex()) - - # don't handle member insertion into the tree here, it will be handled by the event listener - return + await g.atomicBatch(g.latestIndex, rateCommitments) + g.latestIndex += MembershipIndex(rateCommitments.len) +else: + method registerBatch*(g: OnchainGroupManager, + idCommitments: seq[IDCommitment]): Future[void] {.async: (raises: [Exception]).} = + initializedGuard(g) + + await g.atomicBatch(g.latestIndex, idCommitments) + g.latestIndex += MembershipIndex(idCommitments.len) + + +when defined(rln_v2): + method register*(g: OnchainGroupManager, + identityCredential: IdentityCredential, + userMessageLimit: UserMessageLimit): Future[void] {.async: (raises: [Exception]).} = + initializedGuard(g) + + let ethRpc = g.ethRpc.get() + let registryContract = g.registryContract.get() + let membershipFee = g.membershipFee.get() + + var gasPrice: int + retryWrapper(gasPrice, RetryStrategy.new(), "Failed to get gas price"): + int(await ethRpc.provider.eth_gasPrice()) * 2 + let idCommitment = identityCredential.idCommitment.toUInt256() + + var txHash: TxHash + let storageIndex = g.usingStorageIndex.get() + debug "registering the member", idCommitment = idCommitment, storageIndex = storageIndex, userMessageLimit = userMessageLimit + retryWrapper(txHash, RetryStrategy.new(), "Failed to register the member"): + await registryContract.register(storageIndex, idCommitment, u256(userMessageLimit)).send(gasPrice = gasPrice) + + # wait for the transaction to be mined + var tsReceipt: ReceiptObject + retryWrapper(tsReceipt, RetryStrategy.new(), "Failed to get the transaction receipt"): + await ethRpc.getMinedTransactionReceipt(txHash) + debug "registration transaction mined", txHash = txHash + g.registrationTxHash = some(txHash) + # the receipt topic holds the hash of signature of the raised events + # TODO: make this robust. search within the event list for the event + let firstTopic = tsReceipt.logs[0].topics[0] + # the hash of the signature of MemberRegistered(uint256,uint256,uint256) event is equal to the following hex value + if firstTopic != cast[FixedBytes[32]](keccak256.digest("MemberRegistered(uint256,uint256,uint256)").data): + raise newException(ValueError, "unexpected event signature") + + # the arguments of the raised event i.e., MemberRegistered are encoded inside the data field + # data = pk encoded as 256 bits || index encoded as 256 bits || userMessageLimit encoded as 256 bits + let arguments = tsReceipt.logs[0].data + debug "tx log data", arguments=arguments + let + argumentsBytes = arguments + # In TX log data, uints are encoded in big endian + userMessageLimit = UInt256.fromBytesBE(argumentsBytes[32..64]) + membershipIndex = UInt256.fromBytesBE(argumentsBytes[64..^1]) + + g.membershipIndex = some(membershipIndex.toMembershipIndex()) + g.userMessageLimit = some(userMessageLimit.toUserMessageLimit()) + + # don't handle member insertion into the tree here, it will be handled by the event listener + return +else: + method register*(g: OnchainGroupManager, + credentials: IdentityCredential): Future[void] {.async: (raises: [Exception]).} = + initializedGuard(g) + + let ethRpc = g.ethRpc.get() + let registryContract = g.registryContract.get() + let membershipFee = g.membershipFee.get() + + var gasPrice: int + retryWrapper(gasPrice, RetryStrategy.new(), "Failed to get gas price"): + int(await ethRpc.provider.eth_gasPrice()) * 2 + let idCommitment = credentials.idCommitment.toUInt256() + + var txHash: TxHash + let storageIndex = g.usingStorageIndex.get() + debug "registering the member", idCommitment = idCommitment, storageIndex = storageIndex + retryWrapper(txHash, RetryStrategy.new(), "Failed to register the member"): + await registryContract.register(storageIndex, idCommitment).send(gasPrice = gasPrice) + + # wait for the transaction to be mined + var tsReceipt: ReceiptObject + retryWrapper(tsReceipt, RetryStrategy.new(), "Failed to get the transaction receipt"): + await ethRpc.getMinedTransactionReceipt(txHash) + debug "registration transaction mined", txHash = txHash + g.registrationTxHash = some(txHash) + # the receipt topic holds the hash of signature of the raised events + # TODO: make this robust. search within the event list for the event + let firstTopic = tsReceipt.logs[0].topics[0] + # the hash of the signature of MemberRegistered(uint256,uint256) event is equal to the following hex value + if firstTopic != cast[FixedBytes[32]](keccak256.digest("MemberRegistered(uint256,uint256)").data): + raise newException(ValueError, "unexpected event signature") + + # the arguments of the raised event i.e., MemberRegistered are encoded inside the data field + # data = pk encoded as 256 bits || index encoded as 256 bits + let arguments = tsReceipt.logs[0].data + debug "tx log data", arguments=arguments + let + argumentsBytes = arguments + # In TX log data, uints are encoded in big endian + eventIndex = UInt256.fromBytesBE(argumentsBytes[32..^1]) + + g.membershipIndex = some(eventIndex.toMembershipIndex()) + + # don't handle member insertion into the tree here, it will be handled by the event listener + return method withdraw*(g: OnchainGroupManager, idCommitment: IDCommitment): Future[void] {.async: (raises: [Exception]).} = @@ -209,6 +337,8 @@ proc parseEvent(event: type MemberRegistered, ## returns an error if it cannot parse the `data` parameter var idComm: UInt256 var index: UInt256 + when defined(rln_v2): + var userMessageLimit: UInt256 var data: string # Remove the 0x prefix try: @@ -221,7 +351,15 @@ proc parseEvent(event: type MemberRegistered, offset += decode(data, offset, idComm) # Parse the index offset += decode(data, offset, index) - return ok(Membership(idCommitment: idComm.toIDCommitment(), index: index.toMembershipIndex())) + when defined(rln_v2): + # Parse the userMessageLimit + offset += decode(data, offset, userMessageLimit) + when defined(rln_v2): + return ok(Membership(rateCommitment: RateCommitment(idCommitment: idComm.toIDCommitment(), + userMessageLimit: userMessageLimit.toUserMessageLimit()), + index: index.toMembershipIndex())) + else: + return ok(Membership(idCommitment: idComm.toIDCommitment(), index: index.toMembershipIndex())) except CatchableError: return err("failed to parse the data field of the MemberRegistered event") @@ -294,15 +432,23 @@ proc handleEvents(g: OnchainGroupManager, try: let startIndex = blockTable[blockNumber].filterIt(not it[1])[0][0].index let removalIndices = members.filterIt(it[1]).mapIt(it[0].index) - let idCommitments = members.mapIt(it[0].idCommitment) - await g.atomicBatch(start = startIndex, - idCommitments = idCommitments, - toRemoveIndices = removalIndices) - g.latestIndex = startIndex + MembershipIndex(idCommitments.len()) + when defined(rln_v2): + let rateCommitments = members.mapIt(it[0].rateCommitment) + await g.atomicBatch(start = startIndex, + rateCommitments = rateCommitments, + toRemoveIndices = removalIndices) + g.latestIndex = startIndex + MembershipIndex(rateCommitments.len) + trace "new members added to the Merkle tree", commitments=rateCommitments + else: + let idCommitments = members.mapIt(it[0].idCommitment) + await g.atomicBatch(start = startIndex, + idCommitments = idCommitments, + toRemoveIndices = removalIndices) + g.latestIndex = startIndex + MembershipIndex(idCommitments.len) + trace "new members added to the Merkle tree", commitments=idCommitments except CatchableError: error "failed to insert members into the tree", error=getCurrentExceptionMsg() raise newException(ValueError, "failed to insert members into the tree") - trace "new members added to the Merkle tree", commitments=members.mapIt(it[0].idCommitment.inHex()) return @@ -494,6 +640,8 @@ method init*(g: OnchainGroupManager): Future[void] {.async.} = raise newException(CatchableError, "could not parse the keystore: " & $keystoreCredRes.error) let keystoreCred = keystoreCredRes.get() g.membershipIndex = some(keystoreCred.treeIndex) + when defined(rln_v2): + g.userMessageLimit = some(keystoreCred.userMessageLimit) # now we check on the contract if the commitment actually has a membership try: let membershipExists = await rlnContract.memberExists(keystoreCred diff --git a/waku/waku_rln_relay/group_manager/static/group_manager.nim b/waku/waku_rln_relay/group_manager/static/group_manager.nim index 135796a660..3b5af900ab 100644 --- a/waku/waku_rln_relay/group_manager/static/group_manager.nim +++ b/waku/waku_rln_relay/group_manager/static/group_manager.nim @@ -34,7 +34,7 @@ method init*(g: StaticGroupManager): Future[void] {.async.} = discard g.slideRootQueue() - g.latestIndex += MembershipIndex(idCommitments.len() - 1) + g.latestIndex += MembershipIndex(idCommitments.len - 1) g.initialized = true @@ -44,51 +44,90 @@ method startGroupSync*(g: StaticGroupManager): Future[void] {.async: (raises: [E initializedGuard(g) # No-op -method register*(g: StaticGroupManager, idCommitment: IDCommitment): - Future[void] {.async: (raises: [Exception]).} = - initializedGuard(g) +when defined(rln_v2): + method register*(g: StaticGroupManager, + rateCommitment: RateCommitment): Future[void] {.async: (raises: [Exception]).} = + initializedGuard(g) - await g.registerBatch(@[idCommitment]) + await g.registerBatch(@[rateCommitment]) +else: + method register*(g: StaticGroupManager, idCommitment: IDCommitment): + Future[void] {.async: (raises: [Exception]).} = + initializedGuard(g) -method registerBatch*(g: StaticGroupManager, idCommitments: seq[IDCommitment]): - Future[void] {.async: (raises: [Exception]).} = - initializedGuard(g) + await g.registerBatch(@[idCommitment]) - let membersInserted = g.rlnInstance.insertMembers(g.latestIndex + 1, idCommitments) - if not membersInserted: - raise newException(ValueError, "Failed to insert members into the merkle tree") +when defined(rln_v2): + method registerBatch*(g: StaticGroupManager, + rateCommitments: seq[RateCommitment]): Future[void] {.async: (raises: [Exception]).} = + initializedGuard(g) - if g.registerCb.isSome(): - var memberSeq = newSeq[Membership]() - for i in 0.. Date: Fri, 9 Feb 2024 17:06:25 +0100 Subject: [PATCH 217/274] Benchmark RLN proof generation/verification (#2410) --- Makefile | 4 +++ apps/benchmarks/benchmarks.nim | 47 ++++++++++++++++++++++++++++++++++ waku.nimble | 4 +++ 3 files changed, 55 insertions(+) create mode 100644 apps/benchmarks/benchmarks.nim diff --git a/Makefile b/Makefile index f18aba2fb7..c578efc286 100644 --- a/Makefile +++ b/Makefile @@ -174,6 +174,10 @@ wakunode2: | build deps librln echo -e $(BUILD_MSG) "build/$@" && \ $(ENV_SCRIPT) nim wakunode2 $(NIM_PARAMS) waku.nims +benchmarks: | build deps librln + echo -e $(BUILD_MSG) "build/$@" && \ + $(ENV_SCRIPT) nim benchmarks $(NIM_PARAMS) waku.nims + testwakunode2: | build deps librln echo -e $(BUILD_MSG) "build/$@" && \ $(ENV_SCRIPT) nim testwakunode2 $(NIM_PARAMS) waku.nims diff --git a/apps/benchmarks/benchmarks.nim b/apps/benchmarks/benchmarks.nim new file mode 100644 index 0000000000..24c0119702 --- /dev/null +++ b/apps/benchmarks/benchmarks.nim @@ -0,0 +1,47 @@ +import + math, + std/sequtils, + stew/results, + options, + ../../waku/waku_rln_relay/protocol_types, + ../../waku/waku_rln_relay/rln, + ../../waku/waku_rln_relay, + ../../waku/waku_rln_relay/conversion_utils, + ../../waku/waku_rln_relay/group_manager/static/group_manager + +import std/[times, os] + +proc main(): Future[string] {.async, gcsafe.} = + let rlnIns = createRLNInstance(20).get() + let credentials = toSeq(0 .. 1000).mapIt(membershipKeyGen(rlnIns).get()) + + let manager = StaticGroupManager( + rlnInstance: rlnIns, + groupSize: 1000, + membershipIndex: some(MembershipIndex(900)), + groupKeys: credentials, + ) + + await manager.init() + + let data: seq[byte] = newSeq[byte](1024) + + var proofGenTimes: seq[times.Duration] = @[] + var proofVerTimes: seq[times.Duration] = @[] + for i in 0 .. 50: + var time = getTime() + let proof = manager.generateProof(data, getCurrentEpoch()).get() + proofGenTimes.add(getTime() - time) + + time = getTime() + let res = manager.verifyProof(data, proof).get() + proofVerTimes.add(getTime() - time) + + echo "Proof generation times: ", sum(proofGenTimes) div len(proofGenTimes) + echo "Proof verification times: ", sum(proofVerTimes) div len(proofVerTimes) + +when isMainModule: + try: + waitFor(main()) + except CatchableError as e: + raise e diff --git a/waku.nimble b/waku.nimble index f9337fceb4..f1169423f9 100644 --- a/waku.nimble +++ b/waku.nimble @@ -62,6 +62,10 @@ task wakunode2, "Build Waku v2 cli node": let name = "wakunode2" buildBinary name, "apps/wakunode2/" +task benchmarks, "Some benchmarks": + let name = "benchmarks" + buildBinary name, "apps/benchmarks/" + task wakucanary, "Build waku-canary tool": let name = "wakucanary" buildBinary name, "apps/wakucanary/" From 9c0e943166df4409e47e18d7422f910ce438d9f9 Mon Sep 17 00:00:00 2001 From: Vaclav Pavlin Date: Mon, 12 Feb 2024 09:58:55 +0100 Subject: [PATCH 218/274] feat(networkmonitor): add support for rln (#2401) * feat(networkmonitor): add support for rln * remove cred index flag * use wakunode2 waku network config --- apps/networkmonitor/networkmonitor.nim | 46 +++++++++++++++++-- apps/networkmonitor/networkmonitor_config.nim | 34 ++++++++++++++ 2 files changed, 77 insertions(+), 3 deletions(-) diff --git a/apps/networkmonitor/networkmonitor.nim b/apps/networkmonitor/networkmonitor.nim index ece9bc1c82..1a49d3981a 100644 --- a/apps/networkmonitor/networkmonitor.nim +++ b/apps/networkmonitor/networkmonitor.nim @@ -27,6 +27,8 @@ import ../../waku/waku_enr, ../../waku/waku_discv5, ../../waku/waku_dnsdisc, + ../../waku/waku_rln_relay, + ../wakunode2/networks_config, ./networkmonitor_metrics, ./networkmonitor_config, ./networkmonitor_utils @@ -375,6 +377,10 @@ proc initAndStartApp(conf: NetworkMonitorConf): Result[(WakuNode, WakuDiscoveryV udpPort = some(nodeUdpPort), ) builder.withWakuCapabilities(flags) + let addShardedTopics = builder.withShardedTopics(conf.pubsubTopics) + if addShardedTopics.isErr(): + error "failed to add sharded topics to ENR", error=addShardedTopics.error + return err($addShardedTopics.error) let recordRes = builder.build() let record = @@ -386,6 +392,9 @@ proc initAndStartApp(conf: NetworkMonitorConf): Result[(WakuNode, WakuDiscoveryV nodeBuilder.withNodeKey(key) nodeBuilder.withRecord(record) + nodeBuilder.withPeerManagerConfig( + maxRelayPeers = none(int), + shardAware = true) let res = nodeBuilder.withNetworkConfigurationDetails(bindIp, nodeTcpPort) if res.isErr(): return err("node building error" & $res.error) @@ -475,9 +484,17 @@ when isMainModule: error "could not load cli variables", err=confRes.error quit(1) - let conf = confRes.get() + var conf = confRes.get() info "cli flags", conf=conf + if conf.clusterId == 1: + let twnClusterConf = ClusterConf.TheWakuNetworkConf() + + conf.bootstrapNodes = twnClusterConf.discv5BootstrapNodes + conf.pubsubTopics = twnClusterConf.pubsubTopics + conf.rlnRelayDynamic = twnClusterConf.rlnRelayDynamic + conf.rlnRelayEthContractAddress = twnClusterConf.rlnRelayEthContractAddress + if conf.logLevel != LogLevel.NONE: setLogLevel(conf.logLevel) @@ -519,8 +536,31 @@ when isMainModule: waitFor node.mountRelay() waitFor node.mountLibp2pPing() - # Subscribe the node to the default pubsubtopic, to count messages - subscribeAndHandleMessages(node, DefaultPubsubTopic, msgPerContentTopic) + if conf.rlnRelayEthContractAddress != "": + + let rlnConf = WakuRlnConfig( + rlnRelayDynamic: conf.rlnRelayDynamic, + rlnRelayCredIndex: some(uint(0)), + rlnRelayEthContractAddress: conf.rlnRelayEthContractAddress, + rlnRelayEthClientAddress: conf.rlnRelayEthClientAddress, + rlnRelayCredPath: "", + rlnRelayCredPassword: "", + rlnRelayTreePath: conf.rlnRelayTreePath, + ) + + try: + waitFor node.mountRlnRelay(rlnConf) + except CatchableError: + error "failed to setup RLN", err=getCurrentExceptionMsg() + quit 1 + + node.mountMetadata(conf.clusterId).isOkOr: + error "failed to mount waku metadata protocol: ", err=error + quit 1 + + for pubsubTopic in conf.pubsubTopics: + # Subscribe the node to the default pubsubtopic, to count messages + subscribeAndHandleMessages(node, pubsubTopic, msgPerContentTopic) # spawn the routine that crawls the network # TODO: split into 3 routines (discovery, connections, ip2location) diff --git a/apps/networkmonitor/networkmonitor_config.nim b/apps/networkmonitor/networkmonitor_config.nim index 600c336dfe..911b3c2420 100644 --- a/apps/networkmonitor/networkmonitor_config.nim +++ b/apps/networkmonitor/networkmonitor_config.nim @@ -32,12 +32,46 @@ type defaultValue: "" name: "dns-discovery-url" }: string + pubsubTopics* {. + desc: "Default pubsub topic to subscribe to. Argument may be repeated." + name: "pubsub-topic" .}: seq[string] + refreshInterval* {. desc: "How often new peers are discovered and connected to (in seconds)", defaultValue: 5, name: "refresh-interval", abbr: "r" }: int + clusterId* {. + desc: "Cluster id that the node is running in. Node in a different cluster id is disconnected." + defaultValue: 1 + name: "cluster-id" }: uint32 + + rlnRelay* {. + desc: "Enable spam protection through rln-relay: true|false", + defaultValue: true + name: "rln-relay" }: bool + + rlnRelayDynamic* {. + desc: "Enable waku-rln-relay with on-chain dynamic group management: true|false", + defaultValue: true + name: "rln-relay-dynamic" }: bool + + rlnRelayTreePath* {. + desc: "Path to the RLN merkle tree sled db (https://github.com/spacejam/sled)", + defaultValue: "" + name: "rln-relay-tree-path" }: string + + rlnRelayEthClientAddress* {. + desc: "WebSocket address of an Ethereum testnet client e.g., http://localhost:8540/", + defaultValue: "http://localhost:8540/", + name: "rln-relay-eth-client-address" }: string + + rlnRelayEthContractAddress* {. + desc: "Address of membership contract on an Ethereum testnet", + defaultValue: "", + name: "rln-relay-eth-contract-address" }: string + ## Prometheus metrics config metricsServer* {. desc: "Enable the metrics server: true|false" From 849d76d6d479eddbe273f8b9f713daa2a6a2eced Mon Sep 17 00:00:00 2001 From: gabrielmer <101006718+gabrielmer@users.noreply.github.com> Date: Mon, 12 Feb 2024 16:28:22 +0200 Subject: [PATCH 219/274] chore: automatically generating certs if not provided (Waku Canary) (#2408) --- apps/wakucanary/certsgenerator.nim | 42 ++++++++++++++++++++++++++++++ apps/wakucanary/wakucanary.nim | 25 ++++++++++++++---- 2 files changed, 62 insertions(+), 5 deletions(-) create mode 100644 apps/wakucanary/certsgenerator.nim diff --git a/apps/wakucanary/certsgenerator.nim b/apps/wakucanary/certsgenerator.nim new file mode 100644 index 0000000000..5cf2b5f2e1 --- /dev/null +++ b/apps/wakucanary/certsgenerator.nim @@ -0,0 +1,42 @@ +import + osproc, + os, + httpclient, + strutils + +proc getPublicIP(): string = + let client = newHttpClient() + try: + let response = client.get("http://api.ipify.org") + return response.body + except Exception as e: + echo "Could not fetch public IP: " & e.msg + return "127.0.0.1" + +# Function to generate a self-signed certificate +proc generateSelfSignedCertificate*(certPath: string, keyPath: string) : int = + + # Ensure the OpenSSL is installed + if findExe("openssl") == "": + echo "OpenSSL is not installed or not in the PATH." + return 1 + + let publicIP = getPublicIP() + + if publicIP != "127.0.0.1": + echo "Your public IP address is: ", publicIP + + # Command to generate private key and cert + let + cmd = "openssl req -x509 -newkey rsa:4096 -keyout " & keyPath & " -out " & certPath & + " -sha256 -days 3650 -nodes -subj '/C=XX/ST=StateName/L=CityName/O=CompanyName/OU=CompanySectionName/CN=" & + publicIP & "'" + res = execCmd(cmd) + + if res == 0: + echo "Successfully generated self-signed certificate and key." + else: + echo "Failed to generate certificate and key." + + return res + \ No newline at end of file diff --git a/apps/wakucanary/wakucanary.nim b/apps/wakucanary/wakucanary.nim index 1789f34a80..6d29a0adc0 100644 --- a/apps/wakucanary/wakucanary.nim +++ b/apps/wakucanary/wakucanary.nim @@ -3,13 +3,15 @@ import confutils, chronos, stew/shims/net, - chronicles/topics_registry + chronicles/topics_registry, + os import libp2p/protocols/ping, libp2p/crypto/[crypto, secp], libp2p/nameresolving/dnsresolver, libp2p/multicodec import + ./certsgenerator, ../../waku/waku_enr, ../../waku/node/peer_manager, ../../waku/waku_core, @@ -24,6 +26,7 @@ const ProtocolsTable = { }.toTable const WebSocketPortOffset = 1000 +const CertsDirectory = "./certs" # cli flags type @@ -154,6 +157,14 @@ proc main(rng: ref HmacDrbgContext): Future[int] {.async.} = nodeTcpPort = Port(conf.nodePort) isWs = peer.addrs[0].contains(multiCodec("ws")).get() isWss = peer.addrs[0].contains(multiCodec("wss")).get() + keyPath = if conf.websocketSecureKeyPath.len > 0: + conf.websocketSecureKeyPath + else: + CertsDirectory & "/key.pem" + certPath = if conf.websocketSecureCertPath.len > 0: + conf.websocketSecureCertPath + else: + CertsDirectory & "/cert.pem" var builder = WakuNodeBuilder.init() builder.withNodeKey(nodeKey) @@ -177,14 +188,18 @@ proc main(rng: ref HmacDrbgContext): Future[int] {.async.} = if isWss and (conf.websocketSecureKeyPath.len == 0 or conf.websocketSecureCertPath.len == 0): - error "WebSocket Secure requires key and certificate, see --help" - return 1 + info "WebSocket Secure requires key and certificate. Generating them" + if not dirExists(CertsDirectory): + createDir(CertsDirectory) + if generateSelfSignedCertificate(certPath, keyPath) != 0: + error "Error generating key and certificate" + return 1 builder.withRecord(record) builder.withNetworkConfiguration(netConfig.tryGet()) builder.withSwitchConfiguration( - secureKey = some(conf.websocketSecureKeyPath), - secureCert = some(conf.websocketSecureCertPath), + secureKey = some(keyPath), + secureCert = some(certPath), nameResolver = resolver, ) From 50308eda0d678ab1a63136d6ed931ba9fc5a700e Mon Sep 17 00:00:00 2001 From: Aaryamann Challani <43716372+rymnc@users.noreply.github.com> Date: Tue, 13 Feb 2024 10:18:02 +0530 Subject: [PATCH 220/274] feat(rln-relay-v2): nonce/messageId manager (#2413) * feat(rln-relay-v2): nonce/messageId manager * fix: simplify --- apps/chat2/chat2.nim | 35 ++++++---- apps/chat2/config_chat2.nim | 5 ++ apps/wakunode2/app.nim | 30 ++++++--- tests/node/test_wakunode_relay_rln.nim | 10 +-- tests/waku_rln_relay/test_all.nim | 3 +- .../waku_rln_relay/test_rln_nonce_manager.nim | 51 ++++++++++++++ tests/waku_rln_relay/test_waku_rln_relay.nim | 6 +- .../test_wakunode_rln_relay.nim | 18 ++--- waku/waku_api/jsonrpc/relay/handlers.nim | 10 ++- waku/waku_api/rest/relay/handlers.nim | 7 +- .../group_manager/group_manager_base.nim | 10 +-- waku/waku_rln_relay/nonce_manager.nim | 67 +++++++++++++++++++ waku/waku_rln_relay/rln_relay.nim | 33 ++++++--- 13 files changed, 221 insertions(+), 64 deletions(-) create mode 100644 tests/waku_rln_relay/test_rln_nonce_manager.nim create mode 100644 waku/waku_rln_relay/nonce_manager.nim diff --git a/apps/chat2/chat2.nim b/apps/chat2/chat2.nim index ec320ffb83..7fb4551d26 100644 --- a/apps/chat2/chat2.nim +++ b/apps/chat2/chat2.nim @@ -187,11 +187,11 @@ proc publish(c: Chat, line: string) = if not isNil(c.node.wakuRlnRelay): # for future version when we support more than one rln protected content topic, # we should check the message content topic as well - let success = c.node.wakuRlnRelay.appendRLNProof(message, float64(time)) - if not success: - debug "could not append rate limit proof to the message", success=success + let appendRes = c.node.wakuRlnRelay.appendRLNProof(message, float64(time)) + if appendRes.isErr(): + debug "could not append rate limit proof to the message" else: - debug "rate limit proof is appended to the message", success=success + debug "rate limit proof is appended to the message" let decodeRes = RateLimitProof.init(message.proof) if decodeRes.isErr(): error "could not decode the RLN proof" @@ -514,14 +514,25 @@ proc processInput(rfd: AsyncFD, rng: ref HmacDrbgContext) {.async.} = echo "rln-relay preparation is in progress..." - let rlnConf = WakuRlnConfig( - rlnRelayDynamic: conf.rlnRelayDynamic, - rlnRelayCredIndex: conf.rlnRelayCredIndex, - rlnRelayEthContractAddress: conf.rlnRelayEthContractAddress, - rlnRelayEthClientAddress: conf.rlnRelayEthClientAddress, - rlnRelayCredPath: conf.rlnRelayCredPath, - rlnRelayCredPassword: conf.rlnRelayCredPassword - ) + when defined(rln_v2): + let rlnConf = WakuRlnConfig( + rlnRelayDynamic: conf.rlnRelayDynamic, + rlnRelayCredIndex: conf.rlnRelayCredIndex, + rlnRelayEthContractAddress: conf.rlnRelayEthContractAddress, + rlnRelayEthClientAddress: conf.rlnRelayEthClientAddress, + rlnRelayCredPath: conf.rlnRelayCredPath, + rlnRelayCredPassword: conf.rlnRelayCredPassword, + rlnRelayUserMessageLimit: conf.rlnRelayUserMessageLimit, + ) + else: + let rlnConf = WakuRlnConfig( + rlnRelayDynamic: conf.rlnRelayDynamic, + rlnRelayCredIndex: conf.rlnRelayCredIndex, + rlnRelayEthContractAddress: conf.rlnRelayEthContractAddress, + rlnRelayEthClientAddress: conf.rlnRelayEthClientAddress, + rlnRelayCredPath: conf.rlnRelayCredPath, + rlnRelayCredPassword: conf.rlnRelayCredPassword, + ) waitFor node.mountRlnRelay(rlnConf, spamHandler=some(spamHandler)) diff --git a/apps/chat2/config_chat2.nim b/apps/chat2/config_chat2.nim index b513ecb81c..9aa736ebbc 100644 --- a/apps/chat2/config_chat2.nim +++ b/apps/chat2/config_chat2.nim @@ -266,6 +266,11 @@ type defaultValue: "" name: "rln-relay-cred-password" }: string + rlnRelayUserMessageLimit* {. + desc: "Set a user message limit for the rln membership registration. Must be a positive integer. Default is 1.", + defaultValue: 1, + name: "rln-relay-user-message-limit" .}: uint64 + # NOTE: Keys are different in nim-libp2p proc parseCmdArg*(T: type crypto.PrivateKey, p: string): T = try: diff --git a/apps/wakunode2/app.nim b/apps/wakunode2/app.nim index cfbb19ea1b..6738ae4596 100644 --- a/apps/wakunode2/app.nim +++ b/apps/wakunode2/app.nim @@ -462,15 +462,27 @@ proc setupProtocols(node: WakuNode, if conf.rlnRelay: - let rlnConf = WakuRlnConfig( - rlnRelayDynamic: conf.rlnRelayDynamic, - rlnRelayCredIndex: conf.rlnRelayCredIndex, - rlnRelayEthContractAddress: conf.rlnRelayEthContractAddress, - rlnRelayEthClientAddress: conf.rlnRelayEthClientAddress, - rlnRelayCredPath: conf.rlnRelayCredPath, - rlnRelayCredPassword: conf.rlnRelayCredPassword, - rlnRelayTreePath: conf.rlnRelayTreePath, - ) + when defined(rln_v2): + let rlnConf = WakuRlnConfig( + rlnRelayDynamic: conf.rlnRelayDynamic, + rlnRelayCredIndex: conf.rlnRelayCredIndex, + rlnRelayEthContractAddress: conf.rlnRelayEthContractAddress, + rlnRelayEthClientAddress: conf.rlnRelayEthClientAddress, + rlnRelayCredPath: conf.rlnRelayCredPath, + rlnRelayCredPassword: conf.rlnRelayCredPassword, + rlnRelayTreePath: conf.rlnRelayTreePath, + rlnRelayUserMessageLimit: conf.rlnRelayUserMessageLimit, + ) + else: + let rlnConf = WakuRlnConfig( + rlnRelayDynamic: conf.rlnRelayDynamic, + rlnRelayCredIndex: conf.rlnRelayCredIndex, + rlnRelayEthContractAddress: conf.rlnRelayEthContractAddress, + rlnRelayEthClientAddress: conf.rlnRelayEthClientAddress, + rlnRelayCredPath: conf.rlnRelayCredPath, + rlnRelayCredPassword: conf.rlnRelayCredPassword, + rlnRelayTreePath: conf.rlnRelayTreePath, + ) try: waitFor node.mountRlnRelay(rlnConf) diff --git a/tests/node/test_wakunode_relay_rln.nim b/tests/node/test_wakunode_relay_rln.nim index e3184441cb..6b8acdee61 100644 --- a/tests/node/test_wakunode_relay_rln.nim +++ b/tests/node/test_wakunode_relay_rln.nim @@ -58,7 +58,7 @@ proc sendRlnMessage( payload: seq[byte] = "Hello".toBytes(), ): Future[bool] {.async.} = var message = WakuMessage(payload: payload, contentTopic: contentTopic) - doAssert(client.wakuRlnRelay.appendRLNProof(message, epochTime())) + doAssert(client.wakuRlnRelay.appendRLNProof(message, epochTime()).isOk()) discard await client.publish(some(pubsubTopic), message) let isCompleted = await completionFuture.withTimeout(FUTURE_TIMEOUT) return isCompleted @@ -249,18 +249,18 @@ suite "Waku RlnRelay - End to End": WakuMessage(payload: @payload150kibPlus, contentTopic: contentTopic) doAssert( - client.wakuRlnRelay.appendRLNProof(message1b, epoch + EpochUnitSeconds * 0) + client.wakuRlnRelay.appendRLNProof(message1b, epoch + EpochUnitSeconds * 0).isOk() ) doAssert( - client.wakuRlnRelay.appendRLNProof(message1kib, epoch + EpochUnitSeconds * 1) + client.wakuRlnRelay.appendRLNProof(message1kib, epoch + EpochUnitSeconds * 1).isOk() ) doAssert( - client.wakuRlnRelay.appendRLNProof(message150kib, epoch + EpochUnitSeconds * 2) + client.wakuRlnRelay.appendRLNProof(message150kib, epoch + EpochUnitSeconds * 2).isOk() ) doAssert( client.wakuRlnRelay.appendRLNProof( message151kibPlus, epoch + EpochUnitSeconds * 3 - ) + ).isOk() ) # When sending the 1B message diff --git a/tests/waku_rln_relay/test_all.nim b/tests/waku_rln_relay/test_all.nim index 5d0c806d08..ed5b690d85 100644 --- a/tests/waku_rln_relay/test_all.nim +++ b/tests/waku_rln_relay/test_all.nim @@ -4,4 +4,5 @@ import ./test_rln_group_manager_onchain, ./test_rln_group_manager_static, ./test_waku_rln_relay, - ./test_wakunode_rln_relay + ./test_wakunode_rln_relay, + ./test_rln_nonce_manager diff --git a/tests/waku_rln_relay/test_rln_nonce_manager.nim b/tests/waku_rln_relay/test_rln_nonce_manager.nim new file mode 100644 index 0000000000..8e5df8a181 --- /dev/null +++ b/tests/waku_rln_relay/test_rln_nonce_manager.nim @@ -0,0 +1,51 @@ +{.used.} + +import + testutils/unittests, + chronos, + os +import + ../../../waku/waku_rln_relay/nonce_manager + + +suite "Nonce manager": + test "should initialize successfully": + let nm = NonceManager.init(nonceLimit = 100.uint) + + check: + nm.nonceLimit == 100.uint + nm.nextNonce == 0.uint + + test "should generate a new nonce": + let nm = NonceManager.init(nonceLimit = 100.uint) + let nonceRes = nm.get() + + assert nonceRes.isOk(), $nonceRes.error + + check: + nonceRes.get() == 0.uint + nm.nextNonce == 1.uint + + test "should fail to generate a new nonce if limit is reached": + let nm = NonceManager.init(nonceLimit = 1.uint) + let nonceRes = nm.get() + let nonceRes2 = nm.get() + + assert nonceRes.isOk(), $nonceRes.error + assert nonceRes2.isErr(), "Expected error, got: " & $nonceRes2.value + + check: + nonceRes2.error.kind == NonceManagerErrorKind.NonceLimitReached + + test "should generate a new nonce if epoch is crossed": + let nm = NonceManager.init(nonceLimit = 1.uint, epoch = float(0.000001)) + let nonceRes = nm.get() + sleep(1) + let nonceRes2 = nm.get() + + assert nonceRes.isOk(), $nonceRes.error + assert nonceRes2.isOk(), $nonceRes2.error + + check: + nonceRes.value == 0.uint + nonceRes2.value == 0.uint \ No newline at end of file diff --git a/tests/waku_rln_relay/test_waku_rln_relay.nim b/tests/waku_rln_relay/test_waku_rln_relay.nim index 481c89aa9d..9e7a1ec736 100644 --- a/tests/waku_rln_relay/test_waku_rln_relay.nim +++ b/tests/waku_rln_relay/test_waku_rln_relay.nim @@ -687,9 +687,9 @@ suite "Waku rln relay": # ensure proofs are added require: - proofAdded1 - proofAdded2 - proofAdded3 + proofAdded1.isOk() + proofAdded2.isOk() + proofAdded3.isOk() # validate messages # validateMessage proc checks the validity of the message fields and adds it to the log (if valid) diff --git a/tests/waku_rln_relay/test_wakunode_rln_relay.nim b/tests/waku_rln_relay/test_wakunode_rln_relay.nim index 4f2365315a..c57a68b83f 100644 --- a/tests/waku_rln_relay/test_wakunode_rln_relay.nim +++ b/tests/waku_rln_relay/test_wakunode_rln_relay.nim @@ -85,7 +85,7 @@ procSuite "WakuNode - RLN relay": # prepare the epoch var message = WakuMessage(payload: @payload, contentTopic: contentTopic) - doAssert(node1.wakuRlnRelay.appendRLNProof(message, epochTime())) + doAssert(node1.wakuRlnRelay.appendRLNProof(message, epochTime()).isOk()) ## node1 publishes a message with a rate limit proof, the message is then relayed to node2 which in turn @@ -155,12 +155,12 @@ procSuite "WakuNode - RLN relay": for i in 0..<3: var message = WakuMessage(payload: ("Payload_" & $i).toBytes(), contentTopic: contentTopics[0]) - doAssert(nodes[0].wakuRlnRelay.appendRLNProof(message, epochTime)) + doAssert(nodes[0].wakuRlnRelay.appendRLNProof(message, epochTime).isOk()) messages1.add(message) for i in 0..<3: var message = WakuMessage(payload: ("Payload_" & $i).toBytes(), contentTopic: contentTopics[1]) - doAssert(nodes[1].wakuRlnRelay.appendRLNProof(message, epochTime)) + doAssert(nodes[1].wakuRlnRelay.appendRLNProof(message, epochTime).isOk()) messages2.add(message) # publish 3 messages from node[0] (last 2 are spam, window is 10 secs) @@ -346,9 +346,9 @@ procSuite "WakuNode - RLN relay": # check proofs are added correctly check: - proofAdded1 - proofAdded2 - proofAdded3 + proofAdded1.isOk() + proofAdded2.isOk() + proofAdded3.isOk() # relay handler for node3 var completionFut1 = newFuture[bool]() @@ -452,9 +452,9 @@ procSuite "WakuNode - RLN relay": # check proofs are added correctly check: - proofAdded1 - proofAdded2 - proofAdded3 + proofAdded1.isOk() + proofAdded2.isOk() + proofAdded3.isOk() # relay handler for node2 var completionFut1 = newFuture[bool]() diff --git a/waku/waku_api/jsonrpc/relay/handlers.nim b/waku/waku_api/jsonrpc/relay/handlers.nim index e57518b598..8d5e67d502 100644 --- a/waku/waku_api/jsonrpc/relay/handlers.nim +++ b/waku/waku_api/jsonrpc/relay/handlers.nim @@ -102,9 +102,8 @@ proc installRelayApiHandlers*(node: WakuNode, server: RpcServer, cache: MessageC # if RLN is mounted, append the proof to the message if not node.wakuRlnRelay.isNil(): # append the proof to the message - let success = node.wakuRlnRelay.appendRLNProof(message, - float64(getTime().toUnix())) - if not success: + node.wakuRlnRelay.appendRLNProof(message, + float64(getTime().toUnix())).isOkOr: raise newException(ValueError, "Failed to publish: error appending RLN proof to message") # validate the message before sending it let result = node.wakuRlnRelay.validateMessageAndUpdateLog(message) @@ -201,9 +200,8 @@ proc installRelayApiHandlers*(node: WakuNode, server: RpcServer, cache: MessageC # if RLN is mounted, append the proof to the message if not node.wakuRlnRelay.isNil(): # append the proof to the message - let success = node.wakuRlnRelay.appendRLNProof(message, - float64(getTime().toUnix())) - if not success: + node.wakuRlnRelay.appendRLNProof(message, + float64(getTime().toUnix())).isOkOr: raise newException(ValueError, "Failed to publish: error appending RLN proof to message") # validate the message before sending it let result = node.wakuRlnRelay.validateMessageAndUpdateLog(message) diff --git a/waku/waku_api/rest/relay/handlers.nim b/waku/waku_api/rest/relay/handlers.nim index 73f2935e43..d3efa02781 100644 --- a/waku/waku_api/rest/relay/handlers.nim +++ b/waku/waku_api/rest/relay/handlers.nim @@ -130,9 +130,8 @@ proc installRelayApiHandlers*(router: var RestRouter, node: WakuNode, cache: Mes # if RLN is mounted, append the proof to the message if not node.wakuRlnRelay.isNil(): # append the proof to the message - let success = node.wakuRlnRelay.appendRLNProof(message, - float64(getTime().toUnix())) - if not success: + node.wakuRlnRelay.appendRLNProof(message, + float64(getTime().toUnix())).isOkOr: return RestApiResponse.internalServerError("Failed to publish: error appending RLN proof to message") (await node.wakuRelay.validateMessage(pubsubTopic, message)).isOkOr: @@ -219,7 +218,7 @@ proc installRelayApiHandlers*(router: var RestRouter, node: WakuNode, cache: Mes # if RLN is mounted, append the proof to the message if not node.wakuRlnRelay.isNil(): - if not node.wakuRlnRelay.appendRLNProof(message, float64(getTime().toUnix())): + node.wakuRlnRelay.appendRLNProof(message, float64(getTime().toUnix())).isOkOr: return RestApiResponse.internalServerError( "Failed to publish: error appending RLN proof to message") diff --git a/waku/waku_rln_relay/group_manager/group_manager_base.nim b/waku/waku_rln_relay/group_manager/group_manager_base.nim index 2fb68df220..1c5cd8e5c6 100644 --- a/waku/waku_rln_relay/group_manager/group_manager_base.nim +++ b/waku/waku_rln_relay/group_manager/group_manager_base.nim @@ -188,10 +188,12 @@ when defined(rln_v2): return err("user message limit is not set") waku_rln_proof_generation_duration_seconds.nanosecondTime: let proof = proofGen(rlnInstance = g.rlnInstance, - data = data, - memKeys = g.idCredentials.get(), - memIndex = g.membershipIndex.get(), - epoch = epoch).valueOr: + data = data, + membership = g.idCredentials.get(), + index = g.membershipIndex.get(), + epoch = epoch, + userMessageLimit = g.userMessageLimit.get(), + messageId = messageId).valueOr: return err("proof generation failed: " & $error) return ok(proof) else: diff --git a/waku/waku_rln_relay/nonce_manager.nim b/waku/waku_rln_relay/nonce_manager.nim new file mode 100644 index 0000000000..6a0f34b073 --- /dev/null +++ b/waku/waku_rln_relay/nonce_manager.nim @@ -0,0 +1,67 @@ +when (NimMajor, NimMinor) < (1, 4): + {.push raises: [Defect].} +else: + {.push raises: [].} + +import + chronos, + stew/results, + times +import + ./constants + +export + chronos, + times, + results, + constants + +# This module contains the NonceManager interface +# The NonceManager is responsible for managing the messageId used to generate RLN proofs +# It should be used to fetch a new messageId every time a proof is generated +# It refreshes the messageId every `epoch` seconds + +type + Nonce* = uint64 + NonceManager* = ref object of RootObj + epoch*: float64 + nextNonce*: Nonce + lastNonceTime*: float64 + nonceLimit*: Nonce + + NonceManagerErrorKind* = enum + NonceLimitReached + + NonceManagerError* = object + kind*: NonceManagerErrorKind + error*: string + + NonceManagerResult*[T] = Result[T, NonceManagerError] + +proc `$`*(ne: NonceManagerError): string = + case ne.kind + of NonceLimitReached: + return "NonceLimitReached: " & ne.error + +proc init*(T: type NonceManager, nonceLimit: Nonce, epoch = EpochUnitSeconds): T = + return NonceManager( + epoch: epoch, + nextNonce: 0, + lastNonceTime: 0, + nonceLimit: nonceLimit + ) + + +proc get*(n: NonceManager): NonceManagerResult[Nonce] = + let now = getTime().toUnixFloat() + var retNonce = n.nextNonce + + if now - n.lastNonceTime >= n.epoch: retNonce = 0 + n.nextNonce = retNonce + 1 + n.lastNonceTime = now + + if retNonce >= n.nonceLimit: + return err(NonceManagerError(kind: NonceLimitReached, + error: "Nonce limit reached. Please wait for the next epoch")) + + return ok(retNonce) diff --git a/waku/waku_rln_relay/rln_relay.nim b/waku/waku_rln_relay/rln_relay.nim index 28d0d43c06..174bf6e34f 100644 --- a/waku/waku_rln_relay/rln_relay.nim +++ b/waku/waku_rln_relay/rln_relay.nim @@ -20,6 +20,10 @@ import ./constants, ./protocol_types, ./protocol_metrics + +when defined(rln_v2): + import ./nonce_manager + import ../waku_relay, # for WakuRelayHandler ../waku_core, @@ -37,6 +41,8 @@ type WakuRlnConfig* = object rlnRelayCredPath*: string rlnRelayCredPassword*: string rlnRelayTreePath*: string + when defined(rln_v2): + rlnRelayUserMessageLimit*: uint64 proc createMembershipList*(rln: ptr RLN, n: int): RlnRelayResult[( seq[RawMembershipCredentials], string @@ -78,7 +84,8 @@ type WakuRLNRelay* = ref object of RootObj nullifierLog*: OrderedTable[Epoch, seq[ProofMetadata]] lastEpoch*: Epoch # the epoch of the last published rln message groupManager*: GroupManager - nonce*: uint64 + when defined(rln_v2): + nonceManager: NonceManager method stop*(rlnPeer: WakuRLNRelay) {.async: (raises: [Exception]).} = ## stops the rln-relay protocol @@ -282,7 +289,7 @@ proc toRLNSignal*(wakumessage: WakuMessage): seq[byte] = proc appendRLNProof*(rlnPeer: WakuRLNRelay, msg: var WakuMessage, - senderEpochTime: float64): bool = + senderEpochTime: float64): RlnRelayResult[void] = ## returns true if it can create and append a `RateLimitProof` to the supplied `msg` ## returns false otherwise ## `senderEpochTime` indicates the number of seconds passed since Unix epoch. The fractional part holds sub-seconds. @@ -292,16 +299,16 @@ proc appendRLNProof*(rlnPeer: WakuRLNRelay, let epoch = calcEpoch(senderEpochTime) when defined(rln_v2): - # TODO: add support for incrementing nonce, will address in another PR - let proofGenRes = rlnPeer.groupManager.generateProof(input, epoch, 1) + let nonce = rlnPeer.nonceManager.get().valueOr: + return err("could not get new message id to generate an rln proof: " & $error) + let proof = rlnPeer.groupManager.generateProof(input, epoch, nonce).valueOr: + return err("could not generate rln-v2 proof: " & $error) else: - let proofGenRes = rlnPeer.groupManager.generateProof(input, epoch) + let proof = rlnPeer.groupManager.generateProof(input, epoch).valueOr: + return err("could not generate rln proof: " & $error) - if proofGenRes.isErr(): - return false - - msg.proof = proofGenRes.get().encode().buffer - return true + msg.proof = proof.encode().buffer + return ok() proc clearNullifierLog(rlnPeer: WakuRlnRelay) = # clear the first MaxEpochGap epochs of the nullifer log @@ -397,7 +404,11 @@ proc mount(conf: WakuRlnConfig, # Start the group sync await groupManager.startGroupSync() - return WakuRLNRelay(groupManager: groupManager) + when defined(rln_v2): + return WakuRLNRelay(groupManager: groupManager, + nonceManager: NonceManager.init(conf.rlnRelayUserMessageLimit)) + else: + return WakuRLNRelay(groupManager: groupManager) proc isReady*(rlnPeer: WakuRLNRelay): Future[bool] {.async: (raises: [Exception]).} = ## returns true if the rln-relay protocol is ready to relay messages From 0dac9f9dd49e2047f3988f4cf0332712028efd0e Mon Sep 17 00:00:00 2001 From: Aaryamann Challani <43716372+rymnc@users.noreply.github.com> Date: Tue, 13 Feb 2024 15:40:45 +0530 Subject: [PATCH 221/274] fix(wakunode2): move node config inside app init branch (#2423) --- apps/wakunode2/wakunode2.nim | 45 ++++++++++++++++++------------------ 1 file changed, 23 insertions(+), 22 deletions(-) diff --git a/apps/wakunode2/wakunode2.nim b/apps/wakunode2/wakunode2.nim index 2687cb77f2..c2d0d3924c 100644 --- a/apps/wakunode2/wakunode2.nim +++ b/apps/wakunode2/wakunode2.nim @@ -66,25 +66,6 @@ when isMainModule: var conf = confRes.get() - # The Waku Network config (cluster-id=1) - if conf.clusterId == 1: - let twnClusterConf = ClusterConf.TheWakuNetworkConf() - if len(conf.shards) != 0: - conf.pubsubTopics = conf.shards.mapIt(twnClusterConf.pubsubTopics[it.uint16]) - else: - conf.pubsubTopics = twnClusterConf.pubsubTopics - - # Override configuration - conf.maxMessageSize = twnClusterConf.maxMessageSize - conf.clusterId = twnClusterConf.clusterId - conf.rlnRelay = twnClusterConf.rlnRelay - conf.rlnRelayEthContractAddress = twnClusterConf.rlnRelayEthContractAddress - conf.rlnRelayDynamic = twnClusterConf.rlnRelayDynamic - conf.rlnRelayBandwidthThreshold = twnClusterConf.rlnRelayBandwidthThreshold - conf.discv5Discovery = twnClusterConf.discv5Discovery - conf.discv5BootstrapNodes = - conf.discv5BootstrapNodes & twnClusterConf.discv5BootstrapNodes - ## Logging setup # Adhere to NO_COLOR initiative: https://no-color.org/ @@ -97,15 +78,35 @@ when isMainModule: logging.setupLogLevel(conf.logLevel) logging.setupLogFormat(conf.logFormat, color) - info "Running nwaku node", version = app.git_version - logConfig(conf) - case conf.cmd of generateRlnKeystore: doRlnKeystoreGenerator(conf) of noCommand: + # The Waku Network config (cluster-id=1) + if conf.clusterId == 1: + let twnClusterConf = ClusterConf.TheWakuNetworkConf() + if len(conf.shards) != 0: + conf.pubsubTopics = conf.shards.mapIt(twnClusterConf.pubsubTopics[it.uint16]) + else: + conf.pubsubTopics = twnClusterConf.pubsubTopics + + # Override configuration + conf.maxMessageSize = twnClusterConf.maxMessageSize + conf.clusterId = twnClusterConf.clusterId + conf.rlnRelay = twnClusterConf.rlnRelay + conf.rlnRelayEthContractAddress = twnClusterConf.rlnRelayEthContractAddress + conf.rlnRelayDynamic = twnClusterConf.rlnRelayDynamic + conf.rlnRelayBandwidthThreshold = twnClusterConf.rlnRelayBandwidthThreshold + conf.discv5Discovery = twnClusterConf.discv5Discovery + conf.discv5BootstrapNodes = + conf.discv5BootstrapNodes & twnClusterConf.discv5BootstrapNodes + var wakunode2 = App.init(rng, conf) + info "Running nwaku node", version = app.git_version + logConfig(conf) + + ############## # Node setup # ############## From d58aca01a737d005f83f7ad83fd4fb6afcd2b05c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?rich=CE=9Brd?= Date: Tue, 13 Feb 2024 10:21:31 -0400 Subject: [PATCH 222/274] chore: add stdef.h to libwaku.h (#2409) --- library/libwaku.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/library/libwaku.h b/library/libwaku.h index 28e65400be..feb1973075 100644 --- a/library/libwaku.h +++ b/library/libwaku.h @@ -6,6 +6,8 @@ #ifndef __libwaku__ #define __libwaku__ +#include + // The possible returned values for the functions that return int #define RET_OK 0 #define RET_ERR 1 From 707f3e8bf08a2b961114e6a99d3eddc10a2d3825 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?rich=CE=9Brd?= Date: Tue, 13 Feb 2024 10:22:22 -0400 Subject: [PATCH 223/274] feat: `eventCallback` per wakunode and `userData` (#2418) * feat: store event callback in `Context` * feat: add userData to callbacks --- examples/cbindings/waku_example.c | 2 +- library/callback.nim | 3 +- library/libwaku.h | 5 ++- library/libwaku.nim | 66 ++++++++++++++--------------- library/waku_thread/waku_thread.nim | 1 + 5 files changed, 39 insertions(+), 38 deletions(-) diff --git a/examples/cbindings/waku_example.c b/examples/cbindings/waku_example.c index bca7f771a9..7053dd71c7 100644 --- a/examples/cbindings/waku_example.c +++ b/examples/cbindings/waku_example.c @@ -294,7 +294,7 @@ int main(int argc, char** argv) { printf("Bind addr: %s:%u\n", cfgNode.host, cfgNode.port); printf("Waku Relay enabled: %s\n", cfgNode.relay == 1 ? "YES": "NO"); - waku_set_event_callback(event_handler, userData); + waku_set_event_callback(ctx, event_handler, userData); waku_start(ctx, event_handler, userData); printf("Establishing connection with: %s\n", cfgNode.peers); diff --git a/library/callback.nim b/library/callback.nim index 55301e7bb4..e811dc06f6 100644 --- a/library/callback.nim +++ b/library/callback.nim @@ -2,4 +2,5 @@ type WakuCallBack* = proc(callerRet: cint, msg: ptr cchar, - len: csize_t) {.cdecl, gcsafe, raises: [].} + len: csize_t, + userData: pointer) {.cdecl, gcsafe, raises: [].} diff --git a/library/libwaku.h b/library/libwaku.h index feb1973075..4a30a8ad59 100644 --- a/library/libwaku.h +++ b/library/libwaku.h @@ -17,7 +17,7 @@ extern "C" { #endif -typedef void (*WakuCallBack) (int callerRet, const char* msg, size_t len); +typedef void (*WakuCallBack) (int callerRet, const char* msg, size_t len, void* userData); // Creates a new instance of the waku node. // Sets up the waku node from the given configuration. @@ -39,7 +39,8 @@ int waku_version(void* ctx, WakuCallBack callback, void* userData); -void waku_set_event_callback(WakuCallBack callback, +void waku_set_event_callback(void* ctx, + WakuCallBack callback, void* userData); int waku_content_topic(void* ctx, diff --git a/library/libwaku.nim b/library/libwaku.nim index eab08ed04c..976948bff2 100644 --- a/library/libwaku.nim +++ b/library/libwaku.nim @@ -40,22 +40,19 @@ const RET_MISSING_CALLBACK: cint = 2 ################################################################################ ### Not-exported components -# May keep a reference to a callback defined externally -var extEventCallback*: WakuCallBack = nil - -proc relayEventCallback(pubsubTopic: PubsubTopic, - msg: WakuMessage): Future[void] {.async.} = - # Callback that hadles the Waku Relay events. i.e. messages or errors. - if not isNil(extEventCallback): - try: - let event = $JsonMessageEvent.new(pubsubTopic, msg) - extEventCallback(RET_OK, unsafeAddr event[0], cast[csize_t](len(event))) - except Exception,CatchableError: - let msg = "Exception when calling 'eventCallBack': " & - getCurrentExceptionMsg() - extEventCallback(RET_ERR, unsafeAddr msg[0], cast[csize_t](len(msg))) - else: - error "extEventCallback is nil" +proc relayEventCallback(ctx: ptr Context): WakuRelayHandler = + return proc (pubsubTopic: PubsubTopic, msg: WakuMessage): Future[system.void]{.async.} = + # Callback that hadles the Waku Relay events. i.e. messages or errors. + if not isNil(ctx[].eventCallback): + try: + let event = $JsonMessageEvent.new(pubsubTopic, msg) + cast[WakuCallBack](ctx[].eventCallback)(RET_OK, unsafeAddr event[0], cast[csize_t](len(event)), nil) + except Exception,CatchableError: + let msg = "Exception when calling 'eventCallBack': " & + getCurrentExceptionMsg() + cast[WakuCallBack](ctx[].eventCallback)(RET_ERR, unsafeAddr msg[0], cast[csize_t](len(msg)), nil) + else: + error "eventCallback is nil" ### End of not-exported components ################################################################################ @@ -76,7 +73,7 @@ proc waku_new(configJson: cstring, ## Create the Waku thread that will keep waiting for req from the main thread. var ctx = waku_thread.createWakuThread().valueOr: let msg = "Error in createWakuThread: " & $error - callback(RET_ERR, unsafeAddr msg[0], cast[csize_t](len(msg))) + callback(RET_ERR, unsafeAddr msg[0], cast[csize_t](len(msg)), userData) return nil ctx.userData = userData @@ -89,7 +86,7 @@ proc waku_new(configJson: cstring, configJson)) if sendReqRes.isErr(): let msg = $sendReqRes.error - callback(RET_ERR, unsafeAddr msg[0], cast[csize_t](len(msg))) + callback(RET_ERR, unsafeAddr msg[0], cast[csize_t](len(msg)), userData) return nil return ctx @@ -104,12 +101,13 @@ proc waku_version(ctx: ptr Context, return RET_MISSING_CALLBACK callback(RET_OK, cast[ptr cchar](WakuNodeVersionString), - cast[csize_t](len(WakuNodeVersionString))) + cast[csize_t](len(WakuNodeVersionString)), userData) return RET_OK -proc waku_set_event_callback(callback: WakuCallBack) {.dynlib, exportc.} = - extEventCallback = callback +proc waku_set_event_callback(ctx: ptr Context, + callback: WakuCallBack) {.dynlib, exportc.} = + ctx[].eventCallback = cast[pointer](callback) proc waku_content_topic(ctx: ptr Context, appName: cstring, @@ -130,7 +128,7 @@ proc waku_content_topic(ctx: ptr Context, let encodingStr = encoding.alloc() let contentTopic = fmt"/{$appStr}/{appVersion}/{$ctnStr}/{$encodingStr}" - callback(RET_OK, unsafeAddr contentTopic[0], cast[csize_t](len(contentTopic))) + callback(RET_OK, unsafeAddr contentTopic[0], cast[csize_t](len(contentTopic)), userData) deallocShared(appStr) deallocShared(ctnStr) @@ -152,7 +150,7 @@ proc waku_pubsub_topic(ctx: ptr Context, let topicNameStr = topicName.alloc() let outPubsubTopic = fmt"/waku/2/{$topicNameStr}" - callback(RET_OK, unsafeAddr outPubsubTopic[0], cast[csize_t](len(outPubsubTopic))) + callback(RET_OK, unsafeAddr outPubsubTopic[0], cast[csize_t](len(outPubsubTopic)), userData) deallocShared(topicNameStr) @@ -168,7 +166,7 @@ proc waku_default_pubsub_topic(ctx: ptr Context, if isNil(callback): return RET_MISSING_CALLBACK - callback(RET_OK, cast[ptr cchar](DefaultPubsubTopic), cast[csize_t](len(DefaultPubsubTopic))) + callback(RET_OK, cast[ptr cchar](DefaultPubsubTopic), cast[csize_t](len(DefaultPubsubTopic)), userData) return RET_OK @@ -194,7 +192,7 @@ proc waku_relay_publish(ctx: ptr Context, except JsonParsingError: deallocShared(jwm) let msg = fmt"Error parsing json message: {getCurrentExceptionMsg()}" - callback(RET_ERR, unsafeAddr msg[0], cast[csize_t](len(msg))) + callback(RET_ERR, unsafeAddr msg[0], cast[csize_t](len(msg)), userData) return RET_ERR deallocShared(jwm) @@ -215,7 +213,7 @@ proc waku_relay_publish(ctx: ptr Context, ) except KeyError: let msg = fmt"Problem building the WakuMessage: {getCurrentExceptionMsg()}" - callback(RET_ERR, unsafeAddr msg[0], cast[csize_t](len(msg))) + callback(RET_ERR, unsafeAddr msg[0], cast[csize_t](len(msg)), userData) return RET_ERR let pst = pubSubTopic.alloc() @@ -230,13 +228,13 @@ proc waku_relay_publish(ctx: ptr Context, RequestType.RELAY, RelayRequest.createShared(RelayMsgType.PUBLISH, PubsubTopic($pst), - WakuRelayHandler(relayEventCallback), + WakuRelayHandler(relayEventCallback(ctx)), wakuMessage)) deallocShared(pst) if sendReqRes.isErr(): let msg = $sendReqRes.error - callback(RET_ERR, unsafeAddr msg[0], cast[csize_t](len(msg))) + callback(RET_ERR, unsafeAddr msg[0], cast[csize_t](len(msg)), userData) return RET_ERR return RET_OK @@ -274,18 +272,18 @@ proc waku_relay_subscribe( ctx[].userData = userData let pst = pubSubTopic.alloc() - + var cb = relayEventCallback(ctx) let sendReqRes = waku_thread.sendRequestToWakuThread( ctx, RequestType.RELAY, RelayRequest.createShared(RelayMsgType.SUBSCRIBE, PubsubTopic($pst), - WakuRelayHandler(relayEventCallback))) + WakuRelayHandler(cb))) deallocShared(pst) if sendReqRes.isErr(): let msg = $sendReqRes.error - callback(RET_ERR, unsafeAddr msg[0], cast[csize_t](len(msg))) + callback(RET_ERR, unsafeAddr msg[0], cast[csize_t](len(msg)), userData) return RET_ERR return RET_OK @@ -306,12 +304,12 @@ proc waku_relay_unsubscribe( RequestType.RELAY, RelayRequest.createShared(RelayMsgType.SUBSCRIBE, PubsubTopic($pst), - WakuRelayHandler(relayEventCallback))) + WakuRelayHandler(relayEventCallback(ctx)))) deallocShared(pst) if sendReqRes.isErr(): let msg = $sendReqRes.error - callback(RET_ERR, unsafeAddr msg[0], cast[csize_t](len(msg))) + callback(RET_ERR, unsafeAddr msg[0], cast[csize_t](len(msg)), userData) return RET_ERR return RET_OK @@ -334,7 +332,7 @@ proc waku_connect(ctx: ptr Context, chronos.milliseconds(timeoutMs))) if connRes.isErr(): let msg = $connRes.error - callback(RET_ERR, unsafeAddr msg[0], cast[csize_t](len(msg))) + callback(RET_ERR, unsafeAddr msg[0], cast[csize_t](len(msg)), userData) return RET_ERR return RET_OK diff --git a/library/waku_thread/waku_thread.nim b/library/waku_thread/waku_thread.nim index 807fb1fe72..d69c7099ee 100644 --- a/library/waku_thread/waku_thread.nim +++ b/library/waku_thread/waku_thread.nim @@ -26,6 +26,7 @@ type respChannel: ChannelSPSCSingle[ptr InterThreadResponse] respSignal: ThreadSignalPtr userData*: pointer + eventCallback*: pointer # To control when the thread is running var running: Atomic[bool] From d0377056ca568ef391b5719037a34052ac135cf5 Mon Sep 17 00:00:00 2001 From: Aaryamann Challani <43716372+rymnc@users.noreply.github.com> Date: Wed, 14 Feb 2024 13:24:05 +0530 Subject: [PATCH 224/274] chore(rln-relay-v2): add tests for serde (#2421) * chore(rln-relay-v2): add tests for serde * fix: call isOk fn instead of prop access Co-authored-by: Ivan FB <128452529+Ivansete-status@users.noreply.github.com> * fix: make cast more explicit --------- Co-authored-by: Ivan FB <128452529+Ivansete-status@users.noreply.github.com> --- .../rln_v2/test_rln_relay_v2_serde.nim | 90 +++++++++++++++++++ waku/waku_rln_relay/conversion_utils.nim | 15 +++- waku/waku_rln_relay/rln/wrappers.nim | 4 +- 3 files changed, 105 insertions(+), 4 deletions(-) create mode 100644 tests/waku_rln_relay/rln_v2/test_rln_relay_v2_serde.nim diff --git a/tests/waku_rln_relay/rln_v2/test_rln_relay_v2_serde.nim b/tests/waku_rln_relay/rln_v2/test_rln_relay_v2_serde.nim new file mode 100644 index 0000000000..d14054cccf --- /dev/null +++ b/tests/waku_rln_relay/rln_v2/test_rln_relay_v2_serde.nim @@ -0,0 +1,90 @@ +{.used.} + +when (NimMajor, NimMinor) < (1, 4): + {.push raises: [Defect].} +else: + {.push raises: [].} + +import + ../rln/waku_rln_relay_utils, + ../../../waku/waku_keystore/protocol_types, + ../../../waku/waku_rln_relay, + ../../../waku/waku_rln_relay/rln + +import + testutils/unittests +import + stew/results, + stint +from std/times import epochTime + +func fromStrToBytesLe(v: string): seq[byte] = + try: + return @(hexToUint[256](v).toBytesLE()) + except ValueError: + # this should never happen + return @[] + +func defaultIdentityCredential*(): IdentityCredential = + # zero out the values we don't need + return IdentityCredential( + idTrapdoor: default(IdentityTrapdoor), + idNullifier: default(IdentityNullifier), + idSecretHash: fromStrToBytesLe("7984f7c054ad7793d9f31a1e9f29eaa8d05966511e546bced89961eb8874ab9"), + idCommitment: fromStrToBytesLe("51c31de3bff7e52dc7b2eb34fc96813bacf38bde92d27fe326ce5d8296322a7") + ) + +func defaultRateCommitment*(): RateCommitment = + let idCredential = defaultIdentityCredential() + return RateCommitment( + idCommitment: idCredential.idCommitment, + userMessageLimit: 100 + ) + +suite "RLN Relay v2: serde": + test "toLeaf: converts a rateCommitment to a valid leaf": + # this test vector is from zerokit + let rateCommitment = defaultRateCommitment() + + let leafRes = toLeaf(rateCommitment) + assert leafRes.isOk(), $leafRes.error + + let expectedLeaf = "09beac7784abfadc9958b3176b352389d0b969ccc7f8bccf3e968ed632e26eca" + check expectedLeaf == leafRes.value.inHex() + + + test "proofGen: generates a valid zk proof": + # this test vector is from zerokit + let rlnInstance = createRLNInstanceWrapper() + assert rlnInstance.isOk, $rlnInstance.error + let rln = rlnInstance.value + + let credential = defaultIdentityCredential() + let rateCommitment = defaultRateCommitment() + let success = rln.insertMember(@(rateCommitment.toLeaf().value)) + let merkleRootRes = rln.getMerkleRoot() + assert merkleRootRes.isOk, $merkleRootRes.error + let merkleRoot = merkleRootRes.value + + assert success, "failed to insert member" + + let proofRes = rln.proofGen(data = @[], + membership = credential, + userMessageLimit = rateCommitment.userMessageLimit, + messageId = 0, + index = 0, + epoch = calcEpoch(epochTime())) + + assert proofRes.isOk, $proofRes.error + + let proof = proofRes.value + + let proofVerifyRes = rln.proofVerify(data = @[], + proof = proof, + validRoots = @[merkleRoot]) + + assert proofVerifyRes.isOk, $proofVerifyRes.error + assert proofVerifyRes.value, "proof verification failed" + + + diff --git a/waku/waku_rln_relay/conversion_utils.nim b/waku/waku_rln_relay/conversion_utils.nim index c00e6a50d6..814eb98af3 100644 --- a/waku/waku_rln_relay/conversion_utils.nim +++ b/waku/waku_rln_relay/conversion_utils.nim @@ -57,6 +57,17 @@ proc encodeLengthPrefix*(input: openArray[byte]): seq[byte] = output = concat(@len, @input) return output +proc serialize*(v: uint64): array[32, byte] = + ## a private proc to convert uint64 to a byte seq + ## this conversion is used in the proofGen proc + + ## converts `v` to a byte seq in little-endian order + let bytes = toBytes(v, Endianness.littleEndian) + var output: array[32, byte] + discard output.copyFrom(bytes) + return output + + when defined(rln_v2): proc serialize*(idSecretHash: IdentitySecretHash, memIndex: MembershipIndex, @@ -69,8 +80,8 @@ when defined(rln_v2): ## the serialization is done as instructed in https://github.com/kilic/rln/blob/7ac74183f8b69b399e3bc96c1ae8ab61c026dc43/src/public.rs#L146 ## [ id_key<32> | id_index<8> | epoch<32> | signal_len<8> | signal ] let memIndexBytes = toBytes(uint64(memIndex), Endianness.littleEndian) - let userMessageLimitBytes = toBytes(uint64(userMessageLimit), Endianness.littleEndian) - let messageIdBytes = toBytes(uint64(messageId), Endianness.littleEndian) + let userMessageLimitBytes = userMessageLimit.serialize() + let messageIdBytes = messageId.serialize() let lenPrefMsg = encodeLengthPrefix(msg) let output = concat(@idSecretHash, @memIndexBytes, @userMessageLimitBytes, @messageIdBytes, @externalNullifier, lenPrefMsg) return output diff --git a/waku/waku_rln_relay/rln/wrappers.nim b/waku/waku_rln_relay/rln/wrappers.nim index 384db25385..da1a1d3b90 100644 --- a/waku/waku_rln_relay/rln/wrappers.nim +++ b/waku/waku_rln_relay/rln/wrappers.nim @@ -163,8 +163,8 @@ proc poseidon*(data: seq[seq[byte]]): RlnRelayResult[array[32, byte]] = when defined(rln_v2): func toLeaf*(rateCommitment: RateCommitment): RlnRelayResult[MerkleNode] {.inline.} = let idCommitment = rateCommitment.idCommitment - let userMessageLimit = rateCommitment.userMessageLimit - let leafRes = poseidon(@[@idCommitment, cast[seq[byte]](userMessageLimit)]) + let userMessageLimit = cast[array[32, byte]](rateCommitment.userMessageLimit) + let leafRes = poseidon(@[@idCommitment, @userMessageLimit]) return leafRes func toLeaves*(rateCommitments: seq[RateCommitment]): RlnRelayResult[seq[MerkleNode]] {.inline.} = From d00065e9d3026eb7c3b80f2f16d4be7b18d0d97c Mon Sep 17 00:00:00 2001 From: NagyZoltanPeter <113987313+NagyZoltanPeter@users.noreply.github.com> Date: Wed, 14 Feb 2024 11:29:56 +0100 Subject: [PATCH 225/274] chore: update CHANGELOG.md for v0.25.0 (#2399) * chore: update CHANGELOG.md for v0.25.0 * Added announcements for the next release derpicating features Co-authored-by: gabrielmer <101006718+gabrielmer@users.noreply.github.com> Co-authored-by: Ivan FB <128452529+Ivansete-status@users.noreply.github.com> --- CHANGELOG.md | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 65 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a910c3f821..e48922b0c7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,8 +1,71 @@ +## v0.25.0 (2024-02-06) + +> **Note:** +> Waku Filter v2 now has three additional configuration options +> `--filter-max-peers-to-serve=1000` drives how many peers can subscribe at once and +> `--filter-max-criteria=1000` defines what is the maximum criterion stored per each peers +> +> This release introduces a major change in Filter v2 protocol subscription management. +> From now each subscribed peer needs to refresh its living subscriptions by sending a SUBSCRIBER_PING message every 5 minutes by default, otherwise the peer's subscription will be removed. +> `--filter-subscription-timeout=300` defines configurable timeout for the subscriptions (*in seconds*). +> +> New experimental feature, shard aware peer manager for relay protocol can be activated by the flag: +> `--relay-shard-manager=true|false` +> It is disabled by default. + +> **Announcement:** +> +> Please notice that from the next release (0.26.0) we will deprecate features. +> +> - JSON-RPC API will be removed completely. Instead we recommend you to utilize REST API endpoints that have same and extended functionality. +> - We will retire websockets support for RLN on-chain group management. You are expected to use HTTP version of ETH_CLIENT_ADDRESS + +### Features + +- running validators in /relay/v1/auto/messages/{topic} ([#2394](https://github.com/waku-org/nwaku/issues/2394)) ([e4e147bc](https://github.com/waku-org/nwaku/commit/e4e147bc)) +- **rln-relay-v2:** update C FFI api's and serde ([#2385](https://github.com/waku-org/nwaku/issues/2385)) ([b88facd0](https://github.com/waku-org/nwaku/commit/b88facd0)) +- running validators in /relay/v1/messages/{pubsubTopic} ([#2373](https://github.com/waku-org/nwaku/issues/2373)) ([59d8b620](https://github.com/waku-org/nwaku/commit/59d8b620)) +- shard aware relay peer management ([#2332](https://github.com/waku-org/nwaku/issues/2332)) ([edca1df1](https://github.com/waku-org/nwaku/commit/edca1df1)) + +### Bug Fixes + +- adding rln validator as default ([#2367](https://github.com/waku-org/nwaku/issues/2367)) ([bb58a63a](https://github.com/waku-org/nwaku/commit/bb58a63a)) +- Fix test for filter client receiving messages after restart ([#2360](https://github.com/waku-org/nwaku/issues/2360)) ([7de91d92](https://github.com/waku-org/nwaku/commit/7de91d92)) +- making filter admin data test order independent ([#2355](https://github.com/waku-org/nwaku/issues/2355)) ([8a9fad29](https://github.com/waku-org/nwaku/commit/8a9fad29)) + +### Changes + +- **rln-relay-v2:** use rln-v2 contract code ([#2381](https://github.com/waku-org/nwaku/issues/2381)) ([c55ca067](https://github.com/waku-org/nwaku/commit/c55ca067)) +- v0.25 vendor bump and associated fixes ([#2352](https://github.com/waku-org/nwaku/issues/2352)) ([761ce7b1](https://github.com/waku-org/nwaku/commit/761ce7b1)) +- handle errors w.r.t. configured cluster-id and pubsub topics ([#2368](https://github.com/waku-org/nwaku/issues/2368)) ([e04e35e2](https://github.com/waku-org/nwaku/commit/e04e35e2)) +- add coverage target to Makefile ([#2382](https://github.com/waku-org/nwaku/issues/2382)) ([57378873](https://github.com/waku-org/nwaku/commit/57378873)) +- Add check spell allowed words ([#2383](https://github.com/waku-org/nwaku/issues/2383)) ([c1121dd1](https://github.com/waku-org/nwaku/commit/c1121dd1)) +- adding nwaku compose image update to release process ([#2370](https://github.com/waku-org/nwaku/issues/2370)) ([4f06dcff](https://github.com/waku-org/nwaku/commit/4f06dcff)) +- changing digest and hash log format from bytes to hex ([#2363](https://github.com/waku-org/nwaku/issues/2363)) ([025c6ec9](https://github.com/waku-org/nwaku/commit/025c6ec9)) +- log messageHash for lightpush request that helps in debugging ([#2366](https://github.com/waku-org/nwaku/issues/2366)) ([42204115](https://github.com/waku-org/nwaku/commit/42204115)) +- **rln-relay:** enabled http based polling in OnchainGroupManager ([#2364](https://github.com/waku-org/nwaku/issues/2364)) ([efdc5244](https://github.com/waku-org/nwaku/commit/efdc5244)) +- improve POST /relay/v1/auto/messages/{topic} error handling ([#2339](https://github.com/waku-org/nwaku/issues/2339)) ([f841454e](https://github.com/waku-org/nwaku/commit/f841454e)) +- Refactor of FilterV2 subscription management with Time-to-live maintenance ([#2341](https://github.com/waku-org/nwaku/issues/2341)) ([c3358409](https://github.com/waku-org/nwaku/commit/c3358409)) +- Bump `nim-dnsdisc` ([#2354](https://github.com/waku-org/nwaku/issues/2354)) ([3d816c08](https://github.com/waku-org/nwaku/commit/3d816c08)) +- postgres-adoption.md add metadata title, description, and better first-readable-title ([#2346](https://github.com/waku-org/nwaku/issues/2346)) ([2f8e8bcb](https://github.com/waku-org/nwaku/commit/2f8e8bcb)) +- fix typo ([#2348](https://github.com/waku-org/nwaku/issues/2348)) ([a4a8dee3](https://github.com/waku-org/nwaku/commit/a4a8dee3)) + +This release supports the following [libp2p protocols](https://docs.libp2p.io/concepts/protocols/): +| Protocol | Spec status | Protocol id | +| ---: | :---: | :--- | +| [`11/WAKU2-RELAY`](https://rfc.vac.dev/spec/11/) | `stable` | `/vac/waku/relay/2.0.0` | +| [`12/WAKU2-FILTER`](https://rfc.vac.dev/spec/12/) | `draft` | `/vac/waku/filter/2.0.0-beta1`
`/vac/waku/filter-subscribe/2.0.0-beta1`
`/vac/waku/filter-push/2.0.0-beta1` | +| [`13/WAKU2-STORE`](https://rfc.vac.dev/spec/13/) | `draft` | `/vac/waku/store/2.0.0-beta4` | +| [`19/WAKU2-LIGHTPUSH`](https://rfc.vac.dev/spec/19/) | `draft` | `/vac/waku/lightpush/2.0.0-beta1` | +| [`66/WAKU2-METADATA`](https://rfc.vac.dev/spec/66/) | `raw` | `/vac/waku/metadata/1.0.0` | + +The Waku v1 implementation has been removed from this repository and can be found in a separate [Waku Legacy](https://github.com/waku-org/waku-legacy) repository. + ## v0.24.0 (2024-01-10) > Note: The Waku message size limit (150 KiB) is now enforced according to the specifications. To change this limit please use `--max-msg-size="1MiB"` -> Note: `--ip-colocation-limit=2` is the new parameter for limiting connections from the same IP +> Note: `--ip-colocation-limit=2` is the new parameter for limiting connections from the same IP ## What's Changed @@ -257,7 +320,7 @@ The Waku v1 implementation has been removed from this repository and can be foun This patch release addresses the following issues: - WSS connections being suddenly terminated under rare conditions -- Ability for the user to control announced multiaddresses +- Ability for the user to control announced multiaddresses ### Changes From 731dfcbdf67998c11660b6997d811a55af21c5b2 Mon Sep 17 00:00:00 2001 From: gabrielmer <101006718+gabrielmer@users.noreply.github.com> Date: Wed, 14 Feb 2024 17:29:10 +0200 Subject: [PATCH 226/274] fix: check max message size in validator according to configured value (#2424) --- tests/wakunode_rest/test_rest_relay.nim | 4 ++-- waku/waku_relay/protocol.nim | 18 ++++++------------ 2 files changed, 8 insertions(+), 14 deletions(-) diff --git a/tests/wakunode_rest/test_rest_relay.nim b/tests/wakunode_rest/test_rest_relay.nim index 8e8027e2bc..8b78c5a8de 100644 --- a/tests/wakunode_rest/test_rest_relay.nim +++ b/tests/wakunode_rest/test_rest_relay.nim @@ -523,7 +523,7 @@ suite "Waku v2 Rest API - Relay": check: response.status == 400 $response.contentType == $MIMETYPE_TEXT - response.data == fmt"Failed to publish: Message size exceeded maximum of {DefaultMaxWakuMessageSizeStr}" + response.data == fmt"Failed to publish: Message size exceeded maximum of {MaxWakuMessageSize} bytes" await restServer.stop() await restServer.closeWait() @@ -567,7 +567,7 @@ suite "Waku v2 Rest API - Relay": check: response.status == 400 $response.contentType == $MIMETYPE_TEXT - response.data == fmt"Failed to publish: Message size exceeded maximum of {DefaultMaxWakuMessageSizeStr}" + response.data == fmt"Failed to publish: Message size exceeded maximum of {MaxWakuMessageSize} bytes" await restServer.stop() await restServer.closeWait() diff --git a/waku/waku_relay/protocol.nim b/waku/waku_relay/protocol.nim index 3544ea55f1..cef60cb13c 100644 --- a/waku/waku_relay/protocol.nim +++ b/waku/waku_relay/protocol.nim @@ -216,21 +216,15 @@ proc generateOrderedValidator*(w: WakuRelay): auto {.gcsafe.} = return ValidationResult.Accept return wrappedValidator -proc isValidSize(message: WakuMessage): Future[Result[void, string]] {.async.} = - let messageSizeBytes = uint64(message.encode().buffer.len) - - if(messageSizeBytes > MaxWakuMessageSize): - let message = fmt"Message size exceeded maximum of {DefaultMaxWakuMessageSizeStr}" - debug "Invalid Waku Message", error=message - return err(message) - - return ok() - proc validateMessage*(w: WakuRelay, pubsubTopic: string, msg: WakuMessage): Future[Result[void, string]] {.async.} = - (await msg.isValidSize()).isOkOr: - return err(error) + let messageSizeBytes = msg.encode().buffer.len + + if messageSizeBytes > w.maxMessageSize: + let message = fmt"Message size exceeded maximum of {w.maxMessageSize} bytes" + debug "Invalid Waku Message", error=message + return err(message) for (validator, message) in w.wakuValidators: let validatorRes = await validator(pubsubTopic, msg) From 3903f130cb83d47c0c548ec976b510a9b8b66ae9 Mon Sep 17 00:00:00 2001 From: gabrielmer <101006718+gabrielmer@users.noreply.github.com> Date: Wed, 14 Feb 2024 17:29:59 +0200 Subject: [PATCH 227/274] feat: supporting meta field in WakuMessage (#2384) --- tests/wakunode2/test_validators.nim | 25 ++++++---- tests/wakunode_rest/test_rest_filter.nim | 3 +- tests/wakunode_rest/test_rest_relay.nim | 15 +++--- tests/wakunode_rest/test_rest_store.nim | 60 +++++++++++++++++++++++- waku/waku_api/rest/filter/client.nim | 1 + waku/waku_api/rest/filter/types.nim | 16 +++++-- waku/waku_api/rest/relay/types.nim | 18 +++++-- waku/waku_api/rest/store/types.nim | 15 ++++-- 8 files changed, 124 insertions(+), 29 deletions(-) diff --git a/tests/wakunode2/test_validators.nim b/tests/wakunode2/test_validators.nim index 4f9e7d33dc..8fe82bccae 100644 --- a/tests/wakunode2/test_validators.nim +++ b/tests/wakunode2/test_validators.nim @@ -187,23 +187,28 @@ suite "WakuNode2 - Validators": version: 2, timestamp: afterTimestamp, ephemeral: true) discard await nodes[i].publish(some(spamProtectedTopic), unsignedMessage) - # Wait for gossip - await sleepAsync(4.seconds) - # Since we have a full mesh with 5 nodes and each one publishes 25+25+25+25+25 msgs # there are 625 messages being sent. # 125 are received ok in the handler (first hop) # 500 are are wrong so rejected (rejected not relayed) - check: - msgReceived == 125 - + var msgRejected = 0 - for i in 0..<5: - for k, v in nodes[i].wakuRelay.peerStats.mpairs: - msgRejected += v.topicInfos[spamProtectedTopic].invalidMessageDeliveries.int + + # Active wait for the messages to be delivered across the mesh + for i in 0..<100: + msgRejected = 0 + for i in 0..<5: + for k, v in nodes[i].wakuRelay.peerStats.mpairs: + msgRejected += v.topicInfos[spamProtectedTopic].invalidMessageDeliveries.int + + if msgReceived == 125 and msgRejected == 500: + break + else: + await sleepAsync(100.milliseconds) check: - msgRejected == 500 + msgReceived == 125 + msgRejected == 500 await allFutures(nodes.mapIt(it.stop())) diff --git a/tests/wakunode_rest/test_rest_filter.nim b/tests/wakunode_rest/test_rest_filter.nim index da1ef1e7ec..b86bb89258 100644 --- a/tests/wakunode_rest/test_rest_filter.nim +++ b/tests/wakunode_rest/test_rest_filter.nim @@ -261,7 +261,8 @@ suite "Waku v2 Rest API - Filter V2": let testMessage = WakuMessage( payload: "TEST-PAYLOAD-MUST-RECEIVE".toBytes(), contentTopic: "1", - timestamp: int64(2022) + timestamp: int64(2022), + meta: "test-meta".toBytes() ) let postMsgResponse = await restFilterTest.clientTwdServiceNode.relayPostMessagesV1( diff --git a/tests/wakunode_rest/test_rest_relay.nim b/tests/wakunode_rest/test_rest_relay.nim index 8b78c5a8de..5c64faad77 100644 --- a/tests/wakunode_rest/test_rest_relay.nim +++ b/tests/wakunode_rest/test_rest_relay.nim @@ -154,16 +154,19 @@ suite "Waku v2 Rest API - Relay": let pubSubTopic = "/waku/2/default-waku/proto" var messages = @[ - fakeWakuMessage(contentTopic = "content-topic-x", payload = toBytes("TEST-1")) + fakeWakuMessage(contentTopic = "content-topic-x", payload = toBytes("TEST-1"), + meta = toBytes("test-meta") ) ] # Prevent duplicate messages for i in 0..<2: - var msg = fakeWakuMessage(contentTopic = "content-topic-x", payload = toBytes("TEST-1")) + var msg = fakeWakuMessage(contentTopic = "content-topic-x", payload = toBytes("TEST-1"), + meta = toBytes("test-meta")) while msg == messages[i]: - msg = fakeWakuMessage(contentTopic = "content-topic-x", payload = toBytes("TEST-1")) - + msg = fakeWakuMessage(contentTopic = "content-topic-x", payload = toBytes("TEST-1"), + meta = toBytes("test-meta")) + messages.add(msg) let cache = MessageCache.init() @@ -188,8 +191,8 @@ suite "Waku v2 Rest API - Relay": msg.payload == base64.encode("TEST-1") and msg.contentTopic.get() == "content-topic-x" and msg.version.get() == 2 and - msg.timestamp.get() != Timestamp(0) - + msg.timestamp.get() != Timestamp(0) and + msg.meta.get() == base64.encode("test-meta") check: cache.isPubsubSubscribed(pubSubTopic) diff --git a/tests/wakunode_rest/test_rest_store.nim b/tests/wakunode_rest/test_rest_store.nim index 24cbf48b04..6b617970c3 100644 --- a/tests/wakunode_rest/test_rest_store.nim +++ b/tests/wakunode_rest/test_rest_store.nim @@ -24,6 +24,7 @@ import ../../../waku/waku_archive, ../../../waku/waku_archive/driver/queue_driver, ../../../waku/waku_store as waku_store, + ../../../waku/common/base64, ../testlib/common, ../testlib/wakucore, ../testlib/wakunode @@ -560,7 +561,7 @@ procSuite "Waku v2 Rest API - Store": # Now prime it with some history before tests let msgList = @[ - fakeWakuMessage(@[byte 0], contentTopic=ContentTopic("ct1"), ts=0), + fakeWakuMessage(@[byte 0], contentTopic=ContentTopic("ct1"), ts=0, meta=(@[byte 8])), fakeWakuMessage(@[byte 1], ts=1), fakeWakuMessage(@[byte 9], contentTopic=ContentTopic("ct2"), ts=9) ] @@ -574,6 +575,7 @@ procSuite "Waku v2 Rest API - Store": await client.getStoreMessagesV1( none[string](), encodeUrl(DefaultPubsubTopic)) + check: response.status == 200 $response.contentType == $MIMETYPE_JSON @@ -598,3 +600,59 @@ procSuite "Waku v2 Rest API - Store": response.status == 200 $response.contentType == $MIMETYPE_JSON response.data.messages.len == 0 + + asyncTest "correct message fields are returned": + + # Given + let node = testWakuNode() + await node.start() + + var restPort = Port(0) + let restAddress = parseIpAddress("0.0.0.0") + let restServer = RestServerRef.init(restAddress, restPort).tryGet() + + restPort = restServer.server.address.port # update with bound port for client use + + installStoreApiHandlers(restServer.router, node) + restServer.start() + + # WakuStore setup + let driver: ArchiveDriver = QueueDriver.new() + let mountArchiveRes = node.mountArchive(driver) + assert mountArchiveRes.isOk(), mountArchiveRes.error + + await node.mountStore() + + # Now prime it with some history before tests + let msg = fakeWakuMessage(@[byte 0], contentTopic=ContentTopic("ct1"), ts=0, meta=(@[byte 8])) + require (waitFor driver.put(DefaultPubsubTopic, msg)).isOk() + + let client = newRestHttpClient(initTAddress(restAddress, restPort)) + + # Filtering by a known pubsub topic. + var response = + await client.getStoreMessagesV1( + none[string](), + encodeUrl(DefaultPubsubTopic)) + + check: + response.status == 200 + $response.contentType == $MIMETYPE_JSON + response.data.messages.len == 1 + + let storeMessage = response.data.messages[0] + + check: + storeMessage.contentTopic.isSome() + storeMessage.version.isSome() + storeMessage.timestamp.isSome() + storeMessage.ephemeral.isSome() + storeMessage.meta.isSome() + + check: + storeMessage.payload == base64.encode(msg.payload) + storeMessage.contentTopic.get() == msg.contentTopic + storeMessage.version.get() == msg.version + storeMessage.timestamp.get() == msg.timestamp + storeMessage.ephemeral.get() == msg.ephemeral + storeMessage.meta.get() == base64.encode(msg.meta) diff --git a/waku/waku_api/rest/filter/client.nim b/waku/waku_api/rest/filter/client.nim index e16a39ada2..7be43153b6 100644 --- a/waku/waku_api/rest/filter/client.nim +++ b/waku/waku_api/rest/filter/client.nim @@ -13,6 +13,7 @@ import json_serialization/std/options, presto/[route, client, common] import + ../../../common/base64, ../../../waku_core, ../serdes, ../responses, diff --git a/waku/waku_api/rest/filter/types.nim b/waku/waku_api/rest/filter/types.nim index 6930a23126..8135b5ebef 100644 --- a/waku/waku_api/rest/filter/types.nim +++ b/waku/waku_api/rest/filter/types.nim @@ -22,6 +22,7 @@ type FilterWakuMessage* = object contentTopic*: Option[ContentTopic] version*: Option[Natural] timestamp*: Option[int64] + meta*: Option[Base64String] type FilterGetMessagesResponse* = seq[FilterWakuMessage] @@ -58,7 +59,8 @@ proc toFilterWakuMessage*(msg: WakuMessage): FilterWakuMessage = payload: base64.encode(msg.payload), contentTopic: some(msg.contentTopic), version: some(Natural(msg.version)), - timestamp: some(msg.timestamp) + timestamp: some(msg.timestamp), + meta: if msg.meta.len > 0: some(base64.encode(msg.meta)) else: none(Base64String) ) proc toWakuMessage*(msg: FilterWakuMessage, version = 0): Result[WakuMessage, string] = @@ -67,8 +69,10 @@ proc toWakuMessage*(msg: FilterWakuMessage, version = 0): Result[WakuMessage, st contentTopic = msg.contentTopic.get(DefaultContentTopic) version = uint32(msg.version.get(version)) timestamp = msg.timestamp.get(0) + meta = ?msg.meta.get(Base64String("")).decode() - ok(WakuMessage(payload: payload, contentTopic: contentTopic, version: version, timestamp: timestamp)) + ok(WakuMessage(payload: payload, contentTopic: contentTopic, version: version, + timestamp: timestamp, meta: meta)) #### Serialization and deserialization @@ -82,6 +86,8 @@ proc writeValue*(writer: var JsonWriter[RestJson], value: FilterWakuMessage) writer.writeField("version", value.version.get()) if value.timestamp.isSome(): writer.writeField("timestamp", value.timestamp.get()) + if value.meta.isSome(): + writer.writeField("meta", value.meta.get()) writer.endRecord() proc writeValue*(writer: var JsonWriter, value: FilterLegacySubscribeRequest) @@ -136,6 +142,7 @@ proc readValue*(reader: var JsonReader[RestJson], value: var FilterWakuMessage) contentTopic = none(ContentTopic) version = none(Natural) timestamp = none(int64) + meta = none(Base64String) var keys = initHashSet[string]() for fieldName in readObjectFields(reader): @@ -154,6 +161,8 @@ proc readValue*(reader: var JsonReader[RestJson], value: var FilterWakuMessage) version = some(reader.readValue(Natural)) of "timestamp": timestamp = some(reader.readValue(int64)) + of "meta": + meta = some(reader.readValue(Base64String)) else: unrecognizedFieldWarning() @@ -164,7 +173,8 @@ proc readValue*(reader: var JsonReader[RestJson], value: var FilterWakuMessage) payload: payload.get(), contentTopic: contentTopic, version: version, - timestamp: timestamp + timestamp: timestamp, + meta: meta ) proc readValue*(reader: var JsonReader[RestJson], value: var FilterLegacySubscribeRequest) diff --git a/waku/waku_api/rest/relay/types.nim b/waku/waku_api/rest/relay/types.nim index 6dd440c9ba..6be6e9191c 100644 --- a/waku/waku_api/rest/relay/types.nim +++ b/waku/waku_api/rest/relay/types.nim @@ -22,7 +22,7 @@ type RelayWakuMessage* = object contentTopic*: Option[ContentTopic] version*: Option[Natural] timestamp*: Option[int64] - + meta*: Option[Base64String] type RelayGetMessagesResponse* = seq[RelayWakuMessage] @@ -35,7 +35,8 @@ proc toRelayWakuMessage*(msg: WakuMessage): RelayWakuMessage = payload: base64.encode(msg.payload), contentTopic: some(msg.contentTopic), version: some(Natural(msg.version)), - timestamp: some(msg.timestamp) + timestamp: some(msg.timestamp), + meta: if msg.meta.len > 0: some(base64.encode(msg.meta)) else: none(Base64String) ) proc toWakuMessage*(msg: RelayWakuMessage, version = 0): Result[WakuMessage, string] = @@ -43,14 +44,15 @@ proc toWakuMessage*(msg: RelayWakuMessage, version = 0): Result[WakuMessage, str payload = ?msg.payload.decode() contentTopic = msg.contentTopic.get(DefaultContentTopic) version = uint32(msg.version.get(version)) + meta = ?msg.meta.get(Base64String("")).decode() var timestamp = msg.timestamp.get(0) if timestamp == 0: timestamp = getNanosecondTime(getTime().toUnixFloat()) - return ok(WakuMessage(payload: payload, contentTopic: contentTopic, version: version, timestamp: timestamp)) - + return ok(WakuMessage(payload: payload, contentTopic: contentTopic, version: version, + timestamp: timestamp, meta: meta)) #### Serialization and deserialization @@ -64,6 +66,8 @@ proc writeValue*(writer: var JsonWriter[RestJson], value: RelayWakuMessage) writer.writeField("version", value.version.get()) if value.timestamp.isSome(): writer.writeField("timestamp", value.timestamp.get()) + if value.meta.isSome(): + writer.writeField("meta", value.meta.get()) writer.endRecord() proc readValue*(reader: var JsonReader[RestJson], value: var RelayWakuMessage) @@ -73,6 +77,7 @@ proc readValue*(reader: var JsonReader[RestJson], value: var RelayWakuMessage) contentTopic = none(ContentTopic) version = none(Natural) timestamp = none(int64) + meta = none(Base64String) var keys = initHashSet[string]() for fieldName in readObjectFields(reader): @@ -91,6 +96,8 @@ proc readValue*(reader: var JsonReader[RestJson], value: var RelayWakuMessage) version = some(reader.readValue(Natural)) of "timestamp": timestamp = some(reader.readValue(int64)) + of "meta": + meta = some(reader.readValue(Base64String)) else: unrecognizedFieldWarning() @@ -104,5 +111,6 @@ proc readValue*(reader: var JsonReader[RestJson], value: var RelayWakuMessage) payload: payload.get(), contentTopic: contentTopic, version: version, - timestamp: timestamp + timestamp: timestamp, + meta: meta ) diff --git a/waku/waku_api/rest/store/types.nim b/waku/waku_api/rest/store/types.nim index d2195acb5a..b4d3f76b9a 100644 --- a/waku/waku_api/rest/store/types.nim +++ b/waku/waku_api/rest/store/types.nim @@ -42,6 +42,7 @@ type version*: Option[uint32] timestamp*: Option[Timestamp] ephemeral*: Option[bool] + meta*: Option[Base64String] StoreResponseRest* = object # inspired by https://rfc.vac.dev/spec/16/#storeresponse @@ -97,7 +98,8 @@ proc toWakuMessage*(message: StoreWakuMessage): WakuMessage = contentTopic: message.contentTopic.get(), version: message.version.get(), timestamp: message.timestamp.get(), - ephemeral: message.ephemeral.get() + ephemeral: message.ephemeral.get(), + meta: message.meta.get(Base64String("")).decode().get() ) # Converts a 'HistoryResponse' object to an 'StoreResponseRest' @@ -110,7 +112,8 @@ proc toStoreResponseRest*(histResp: HistoryResponse): StoreResponseRest = contentTopic: some(message.contentTopic), version: some(message.version), timestamp: some(message.timestamp), - ephemeral: some(message.ephemeral) + ephemeral: some(message.ephemeral), + meta: if message.meta.len > 0: some(base64.encode(message.meta)) else: none(Base64String) ) var storeWakuMsgs: seq[StoreWakuMessage] @@ -146,6 +149,8 @@ proc writeValue*(writer: var JsonWriter, writer.writeField("timestamp", value.timestamp.get()) if value.ephemeral.isSome(): writer.writeField("ephemeral", value.ephemeral.get()) + if value.meta.isSome(): + writer.writeField("meta", value.meta.get()) writer.endRecord() proc readValue*(reader: var JsonReader, @@ -157,6 +162,7 @@ proc readValue*(reader: var JsonReader, version = none(uint32) timestamp = none(Timestamp) ephemeral = none(bool) + meta = none(Base64String) var keys = initHashSet[string]() for fieldName in readObjectFields(reader): @@ -177,6 +183,8 @@ proc readValue*(reader: var JsonReader, timestamp = some(reader.readValue(Timestamp)) of "ephemeral": ephemeral = some(reader.readValue(bool)) + of "meta": + meta = some(reader.readValue(Base64String)) else: reader.raiseUnexpectedField("Unrecognided field", cstring(fieldName)) @@ -188,7 +196,8 @@ proc readValue*(reader: var JsonReader, contentTopic: contentTopic, version: version, timestamp: timestamp, - ephemeral: ephemeral + ephemeral: ephemeral, + meta: meta ) ## End of StoreWakuMessage serde From 1151d50f55ea8ddf313b79c91a2463d57faa4ef7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20Soko=C5=82owski?= Date: Wed, 14 Feb 2024 16:37:30 +0100 Subject: [PATCH 228/274] chore(ci): reuse discord send function from library MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit No need to keep an almost identical copy here. Signed-off-by: Jakub Sokołowski --- ci/Jenkinsfile.release | 7 +++++-- ci/discord.groovy | 40 ---------------------------------------- 2 files changed, 5 insertions(+), 42 deletions(-) delete mode 100644 ci/discord.groovy diff --git a/ci/Jenkinsfile.release b/ci/Jenkinsfile.release index e577d3e0c1..9998da6095 100644 --- a/ci/Jenkinsfile.release +++ b/ci/Jenkinsfile.release @@ -1,3 +1,6 @@ +#!/usr/bin/env groovy +library 'status-jenkins-lib@v1.8.6' + pipeline { agent { label 'linux' } @@ -98,10 +101,10 @@ pipeline { post { success { script { - def discord = load "${WORKSPACE}/ci/discord.groovy" discord.send( - header: 'Nim-Waku deployment successful!', + header: '**Nim-Waku deployment successful!**', cred: 'discord-waku-deployments-webhook', + descPrefix: "Image: [`${IMAGE_NAME}:${IMAGE_TAG}`](https://hub.docker.com/r/${IMAGE_NAME}/tags?name=${IMAGE_TAG})" ) } } always { sh 'docker image prune -f' } diff --git a/ci/discord.groovy b/ci/discord.groovy deleted file mode 100644 index ee2f726b3d..0000000000 --- a/ci/discord.groovy +++ /dev/null @@ -1,40 +0,0 @@ -def void send(Map args=[:]) { - def opts = [ - header: args.header ?: 'Deployment successful!', - cred: args.cred ?: null, - ] - def repo = [ - url: GIT_URL.minus('.git'), - branch: GIT_BRANCH.minus('origin/'), - commit: GIT_COMMIT.take(8), - prev: ( - env.GIT_PREVIOUS_SUCCESSFUL_COMMIT ?: env.GIT_PREVIOUS_COMMIT ?: 'master' - ).take(8), - ] - wrap([$class: 'BuildUser']) { - BUILD_USER_ID = env.BUILD_USER_ID - } - withCredentials([ - string( - credentialsId: opts.cred, - variable: 'DISCORD_WEBHOOK', - ), - ]) { - discordSend( - link: env.BUILD_URL, - result: currentBuild.currentResult, - webhookURL: env.DISCORD_WEBHOOK, - title: "${env.JOB_NAME}#${env.BUILD_NUMBER}", - description: """ - ${opts.header} - Image: [`${IMAGE_NAME}:${IMAGE_TAG}`](https://hub.docker.com/r/${IMAGE_NAME}/tags?name=${IMAGE_TAG}) - Branch: [`${repo.branch}`](${repo.url}/commits/${repo.branch}) - Commit: [`${repo.commit}`](${repo.url}/commit/${repo.commit}) - Diff: [`${repo.prev}...${repo.commit}`](${repo.url}/compare/${repo.prev}...${repo.commit}) - By: [`${BUILD_USER_ID}`](${repo.url}/commits?author=${BUILD_USER_ID}) - """, - ) - } -} - -return this From 22026b7e8929e5344d29b014910ad0823a7705c5 Mon Sep 17 00:00:00 2001 From: Aaryamann Challani <43716372+rymnc@users.noreply.github.com> Date: Thu, 15 Feb 2024 16:55:08 +0530 Subject: [PATCH 229/274] fix(rln-relay): graceful shutdown with non-zero exit code (#2429) * fix(rln-relay): graceful shutdown with non-zero exit code * fix: missed args * fix: exception str Co-authored-by: Ivan FB <128452529+Ivansete-status@users.noreply.github.com> * fix: remove old comment --------- Co-authored-by: Ivan FB <128452529+Ivansete-status@users.noreply.github.com> --- apps/wakunode2/app.nim | 17 +++--- .../requests/node_lifecycle_request.nim | 4 +- waku/common/error_handling.nim | 2 + waku/node/waku_node.nim | 2 +- waku/waku_archive/driver.nim | 2 +- waku/waku_archive/driver/builder.nim | 7 ++- .../postgres_driver/postgres_driver.nim | 11 ++-- .../postgres_driver/postgres_healthcheck.nim | 9 +-- .../group_manager/group_manager_base.nim | 2 + .../group_manager/on_chain/group_manager.nim | 58 +++++++++++-------- .../group_manager/on_chain/retry_wrapper.nim | 10 +++- waku/waku_rln_relay/rln_relay.nim | 41 ++++++++----- 12 files changed, 99 insertions(+), 66 deletions(-) create mode 100644 waku/common/error_handling.nim diff --git a/apps/wakunode2/app.nim b/apps/wakunode2/app.nim index 6738ae4596..2fbe197a5b 100644 --- a/apps/wakunode2/app.nim +++ b/apps/wakunode2/app.nim @@ -460,8 +460,13 @@ proc setupProtocols(node: WakuNode, except CatchableError: return err("failed to mount libp2p ping protocol: " & getCurrentExceptionMsg()) - if conf.rlnRelay: + var onFatalErrorAction = proc(msg: string) {.gcsafe, closure.} = + ## Action to be taken when an internal error occurs during the node run. + ## e.g. the connection with the database is lost and not recovered. + error "Unrecoverable error occurred", error = msg + quit(QuitFailure) + if conf.rlnRelay: when defined(rln_v2): let rlnConf = WakuRlnConfig( rlnRelayDynamic: conf.rlnRelayDynamic, @@ -472,6 +477,7 @@ proc setupProtocols(node: WakuNode, rlnRelayCredPassword: conf.rlnRelayCredPassword, rlnRelayTreePath: conf.rlnRelayTreePath, rlnRelayUserMessageLimit: conf.rlnRelayUserMessageLimit, + onFatalErrorAction: onFatalErrorAction, ) else: let rlnConf = WakuRlnConfig( @@ -482,6 +488,7 @@ proc setupProtocols(node: WakuNode, rlnRelayCredPath: conf.rlnRelayCredPath, rlnRelayCredPassword: conf.rlnRelayCredPassword, rlnRelayTreePath: conf.rlnRelayTreePath, + onFatalErrorAction: onFatalErrorAction, ) try: @@ -490,18 +497,12 @@ proc setupProtocols(node: WakuNode, return err("failed to mount waku RLN relay protocol: " & getCurrentExceptionMsg()) if conf.store: - var onErrAction = proc(msg: string) {.gcsafe, closure.} = - ## Action to be taken when an internal error occurs during the node run. - ## e.g. the connection with the database is lost and not recovered. - error "Unrecoverable error occurred", error = msg - quit(QuitFailure) - # Archive setup let archiveDriverRes = ArchiveDriver.new(conf.storeMessageDbUrl, conf.storeMessageDbVacuum, conf.storeMessageDbMigration, conf.storeMaxNumDbConnections, - onErrAction) + onFatalErrorAction) if archiveDriverRes.isErr(): return err("failed to setup archive driver: " & archiveDriverRes.error) diff --git a/library/waku_thread/inter_thread_communication/requests/node_lifecycle_request.nim b/library/waku_thread/inter_thread_communication/requests/node_lifecycle_request.nim index 2a444a78df..3fa1dd92ff 100644 --- a/library/waku_thread/inter_thread_communication/requests/node_lifecycle_request.nim +++ b/library/waku_thread/inter_thread_communication/requests/node_lifecycle_request.nim @@ -62,7 +62,7 @@ proc configureStore(node: WakuNode, Future[Result[void, string]] {.async.} = ## This snippet is extracted/duplicated from the app.nim file - var onErrAction = proc(msg: string) {.gcsafe, closure.} = + var onFatalErrorAction = proc(msg: string) {.gcsafe, closure.} = ## Action to be taken when an internal error occurs during the node run. ## e.g. the connection with the database is lost and not recovered. # error "Unrecoverable error occurred", error = msg @@ -74,7 +74,7 @@ proc configureStore(node: WakuNode, storeVacuum, storeDbMigration, storeMaxNumDbConnections, - onErrAction) + onFatalErrorAction) if archiveDriverRes.isErr(): return err("failed to setup archive driver: " & archiveDriverRes.error) diff --git a/waku/common/error_handling.nim b/waku/common/error_handling.nim new file mode 100644 index 0000000000..8aa36c80e0 --- /dev/null +++ b/waku/common/error_handling.nim @@ -0,0 +1,2 @@ +type + OnFatalErrorHandler* = proc(errMsg: string) {.gcsafe, closure, raises: [].} \ No newline at end of file diff --git a/waku/node/waku_node.nim b/waku/node/waku_node.nim index 01d4613f91..db30f202ea 100644 --- a/waku/node/waku_node.nim +++ b/waku/node/waku_node.nim @@ -979,7 +979,7 @@ proc mountRlnRelay*(node: WakuNode, raise newException(CatchableError, "WakuRelay protocol is not mounted, cannot mount WakuRlnRelay") let rlnRelayRes = waitFor WakuRlnRelay.new(rlnConf, - registrationHandler) + registrationHandler) if rlnRelayRes.isErr(): raise newException(CatchableError, "failed to mount WakuRlnRelay: " & rlnRelayRes.error) let rlnRelay = rlnRelayRes.get() diff --git a/waku/waku_archive/driver.nim b/waku/waku_archive/driver.nim index 3a9262f482..a315ea0b52 100644 --- a/waku/waku_archive/driver.nim +++ b/waku/waku_archive/driver.nim @@ -9,6 +9,7 @@ import chronos import ../waku_core, + ../common/error_handling, ./common const DefaultPageSize*: uint = 25 @@ -16,7 +17,6 @@ const DefaultPageSize*: uint = 25 type ArchiveDriverResult*[T] = Result[T, string] ArchiveDriver* = ref object of RootObj - OnErrHandler* = proc(errMsg: string) {.gcsafe, closure, raises: [].} type ArchiveRow* = (PubsubTopic, WakuMessage, seq[byte], Timestamp) diff --git a/waku/waku_archive/driver/builder.nim b/waku/waku_archive/driver/builder.nim index 976769c875..e853b63a62 100644 --- a/waku/waku_archive/driver/builder.nim +++ b/waku/waku_archive/driver/builder.nim @@ -12,6 +12,7 @@ import ../driver, ../../common/databases/dburl, ../../common/databases/db_sqlite, + ../../common/error_handling, ./sqlite_driver, ./sqlite_driver/migrations as archive_driver_sqlite_migrations, ./queue_driver @@ -29,13 +30,13 @@ proc new*(T: type ArchiveDriver, vacuum: bool, migrate: bool, maxNumConn: int, - onErrAction: OnErrHandler): + onFatalErrorAction: OnFatalErrorHandler): Result[T, string] = ## url - string that defines the database ## vacuum - if true, a cleanup operation will be applied to the database ## migrate - if true, the database schema will be updated ## maxNumConn - defines the maximum number of connections to handle simultaneously (Postgres) - ## onErrAction - called if, e.g., the connection with db got lost + ## onFatalErrorAction - called if, e.g., the connection with db got lost let dbUrlValidationRes = dburl.validateDbUrl(url) if dbUrlValidationRes.isErr(): @@ -85,7 +86,7 @@ proc new*(T: type ArchiveDriver, when defined(postgres): let res = PostgresDriver.new(dbUrl = url, maxConnections = maxNumConn, - onErrAction = onErrAction) + onFatalErrorAction = onFatalErrorAction) if res.isErr(): return err("failed to init postgres archive driver: " & res.error) diff --git a/waku/waku_archive/driver/postgres_driver/postgres_driver.nim b/waku/waku_archive/driver/postgres_driver/postgres_driver.nim index a2450c6ce5..f5adbfb2c4 100644 --- a/waku/waku_archive/driver/postgres_driver/postgres_driver.nim +++ b/waku/waku_archive/driver/postgres_driver/postgres_driver.nim @@ -11,6 +11,7 @@ import chronos, chronicles import + ../../../common/error_handling, ../../../waku_core, ../../common, ../../driver, @@ -89,7 +90,7 @@ const DefaultMaxNumConns = 50 proc new*(T: type PostgresDriver, dbUrl: string, maxConnections = DefaultMaxNumConns, - onErrAction: OnErrHandler = nil): + onFatalErrorAction: OnFatalErrorHandler = nil): ArchiveDriverResult[T] = ## Very simplistic split of max connections @@ -101,11 +102,11 @@ proc new*(T: type PostgresDriver, let writeConnPool = PgAsyncPool.new(dbUrl, maxNumConnOnEachPool).valueOr: return err("error creating write conn pool PgAsyncPool") - if not isNil(onErrAction): - asyncSpawn checkConnectivity(readConnPool, onErrAction) + if not isNil(onFatalErrorAction): + asyncSpawn checkConnectivity(readConnPool, onFatalErrorAction) - if not isNil(onErrAction): - asyncSpawn checkConnectivity(writeConnPool, onErrAction) + if not isNil(onFatalErrorAction): + asyncSpawn checkConnectivity(writeConnPool, onFatalErrorAction) return ok(PostgresDriver(writeConnPool: writeConnPool, readConnPool: readConnPool)) diff --git a/waku/waku_archive/driver/postgres_driver/postgres_healthcheck.nim b/waku/waku_archive/driver/postgres_driver/postgres_healthcheck.nim index e2df5f473f..1559db2a5a 100644 --- a/waku/waku_archive/driver/postgres_driver/postgres_healthcheck.nim +++ b/waku/waku_archive/driver/postgres_driver/postgres_healthcheck.nim @@ -8,7 +8,8 @@ import stew/results import ../../driver, - ../../../common/databases/db_postgres + ../../../common/databases/db_postgres, + ../../../common/error_handling ## Simple query to validate that the postgres is working and attending requests const HealthCheckQuery = "SELECT version();" @@ -17,7 +18,7 @@ const MaxNumTrials = 20 const TrialInterval = 1.seconds proc checkConnectivity*(connPool: PgAsyncPool, - onErrAction: OnErrHandler) {.async.} = + onFatalErrorAction: OnFatalErrorHandler) {.async.} = while true: @@ -29,7 +30,7 @@ proc checkConnectivity*(connPool: PgAsyncPool, block errorBlock: ## Force close all the opened connections. No need to close gracefully. (await connPool.resetConnPool()).isOkOr: - onErrAction("checkConnectivity resetConnPool error: " & error) + onFatalErrorAction("checkConnectivity resetConnPool error: " & error) var numTrial = 0 while numTrial < MaxNumTrials: @@ -42,6 +43,6 @@ proc checkConnectivity*(connPool: PgAsyncPool, numTrial.inc() ## The connection couldn't be resumed. Let's inform the upper layers. - onErrAction("postgres health check error: " & error) + onFatalErrorAction("postgres health check error: " & error) await sleepAsync(CheckConnectivityInterval) diff --git a/waku/waku_rln_relay/group_manager/group_manager_base.nim b/waku/waku_rln_relay/group_manager/group_manager_base.nim index 1c5cd8e5c6..a8f7ca55cc 100644 --- a/waku/waku_rln_relay/group_manager/group_manager_base.nim +++ b/waku/waku_rln_relay/group_manager/group_manager_base.nim @@ -1,4 +1,5 @@ import + ../../common/error_handling, ../protocol_types, ../protocol_metrics, ../constants, @@ -44,6 +45,7 @@ type initialized*: bool latestIndex*: MembershipIndex validRoots*: Deque[MerkleNode] + onFatalErrorAction*: OnFatalErrorHandler when defined(rln_v2): userMessageLimit*: Option[UserMessageLimit] diff --git a/waku/waku_rln_relay/group_manager/on_chain/group_manager.nim b/waku/waku_rln_relay/group_manager/on_chain/group_manager.nim index d393b4ec13..22b392967a 100644 --- a/waku/waku_rln_relay/group_manager/on_chain/group_manager.nim +++ b/waku/waku_rln_relay/group_manager/on_chain/group_manager.nim @@ -113,6 +113,10 @@ template initializedGuard(g: OnchainGroupManager): untyped = if not g.initialized: raise newException(CatchableError, "OnchainGroupManager is not initialized") +template retryWrapper(g: OnchainGroupManager, res: auto, errStr: string, body: untyped): auto = + retryWrapper(res, RetryStrategy.new(), errStr, g.onFatalErrorAction): + body + proc setMetadata*(g: OnchainGroupManager): RlnRelayResult[void] = try: @@ -234,19 +238,19 @@ when defined(rln_v2): let membershipFee = g.membershipFee.get() var gasPrice: int - retryWrapper(gasPrice, RetryStrategy.new(), "Failed to get gas price"): + g.retryWrapper(gasPrice, "Failed to get gas price"): int(await ethRpc.provider.eth_gasPrice()) * 2 let idCommitment = identityCredential.idCommitment.toUInt256() var txHash: TxHash let storageIndex = g.usingStorageIndex.get() debug "registering the member", idCommitment = idCommitment, storageIndex = storageIndex, userMessageLimit = userMessageLimit - retryWrapper(txHash, RetryStrategy.new(), "Failed to register the member"): + g.retryWrapper(txHash, "Failed to register the member"): await registryContract.register(storageIndex, idCommitment, u256(userMessageLimit)).send(gasPrice = gasPrice) # wait for the transaction to be mined var tsReceipt: ReceiptObject - retryWrapper(tsReceipt, RetryStrategy.new(), "Failed to get the transaction receipt"): + g.retryWrapper(tsReceipt, "Failed to get the transaction receipt"): await ethRpc.getMinedTransactionReceipt(txHash) debug "registration transaction mined", txHash = txHash g.registrationTxHash = some(txHash) @@ -282,19 +286,19 @@ else: let membershipFee = g.membershipFee.get() var gasPrice: int - retryWrapper(gasPrice, RetryStrategy.new(), "Failed to get gas price"): + g.retryWrapper(gasPrice, "Failed to get gas price"): int(await ethRpc.provider.eth_gasPrice()) * 2 let idCommitment = credentials.idCommitment.toUInt256() var txHash: TxHash let storageIndex = g.usingStorageIndex.get() debug "registering the member", idCommitment = idCommitment, storageIndex = storageIndex - retryWrapper(txHash, RetryStrategy.new(), "Failed to register the member"): + g.retryWrapper(txHash, "Failed to register the member"): await registryContract.register(storageIndex, idCommitment).send(gasPrice = gasPrice) # wait for the transaction to be mined var tsReceipt: ReceiptObject - retryWrapper(tsReceipt, RetryStrategy.new(), "Failed to get the transaction receipt"): + g.retryWrapper(tsReceipt, "Failed to get the transaction receipt"): await ethRpc.getMinedTransactionReceipt(txHash) debug "registration transaction mined", txHash = txHash g.registrationTxHash = some(txHash) @@ -393,7 +397,7 @@ proc getRawEvents(g: OnchainGroupManager, let rlnContract = g.rlnContract.get() var events: JsonNode - retryWrapper(events, RetryStrategy.new(), "Failed to get the events"): + g.retryWrapper(events, "Failed to get the events"): await rlnContract.getJsonLogs(MemberRegistered, fromBlock = some(fromBlock.blockId()), toBlock = some(toBlock.blockId())) @@ -486,7 +490,7 @@ proc getAndHandleEvents(g: OnchainGroupManager, return true -proc runInInterval(g: OnchainGroupManager, cb: proc, interval: Duration): void = +proc runInInterval(g: OnchainGroupManager, cb: proc, interval: Duration) = g.blockFetchingActive = false proc runIntervalLoop() {.async, gcsafe.} = @@ -494,10 +498,13 @@ proc runInInterval(g: OnchainGroupManager, cb: proc, interval: Duration): void = while g.blockFetchingActive: var retCb: bool - retryWrapper(retCb, RetryStrategy.new(), "Failed to run the interval loop"): + g.retryWrapper(retCb, "Failed to run the interval block fetching loop"): await cb() await sleepAsync(interval) + # using asyncSpawn is OK here since + # we make use of the error handling provided by + # OnFatalErrorHandler asyncSpawn runIntervalLoop() @@ -505,7 +512,7 @@ proc getNewBlockCallback(g: OnchainGroupManager): proc = let ethRpc = g.ethRpc.get() proc wrappedCb(): Future[bool] {.async, gcsafe.} = var latestBlock: BlockNumber - retryWrapper(latestBlock, RetryStrategy.new(), "Failed to get the latest block number"): + g.retryWrapper(latestBlock, "Failed to get the latest block number"): cast[BlockNumber](await ethRpc.provider.eth_blockNumber()) if latestBlock <= g.latestProcessedBlock: @@ -514,7 +521,7 @@ proc getNewBlockCallback(g: OnchainGroupManager): proc = # inc by 1 to prevent double processing let fromBlock = g.latestProcessedBlock + 1 var handleBlockRes: bool - retryWrapper(handleBlockRes, RetryStrategy.new(), "Failed to handle new block"): + g.retryWrapper(handleBlockRes, "Failed to handle new block"): await g.getAndHandleEvents(fromBlock, latestBlock) return true return wrappedCb @@ -548,7 +555,7 @@ proc startOnchainSync(g: OnchainGroupManager): # chunk events while true: var currentLatestBlock: BlockNumber - retryWrapper(currentLatestBlock, RetryStrategy.new(), "Failed to get the latest block number"): + g.retryWrapper(currentLatestBlock, "Failed to get the latest block number"): cast[BlockNumber](await ethRpc.provider.eth_blockNumber()) if fromBlock >= currentLatestBlock: break @@ -556,7 +563,7 @@ proc startOnchainSync(g: OnchainGroupManager): let toBlock = min(fromBlock + BlockNumber(blockChunkSize), currentLatestBlock) debug "fetching events", fromBlock = fromBlock, toBlock = toBlock var handleBlockRes: bool - retryWrapper(handleBlockRes, RetryStrategy.new(), "Failed to handle old blocks"): + g.retryWrapper(handleBlockRes, "Failed to handle old blocks"): await g.getAndHandleEvents(fromBlock, toBlock) fromBlock = toBlock + 1 @@ -588,11 +595,11 @@ method onWithdraw*(g: OnchainGroupManager, cb: OnWithdrawCallback) {.gcsafe.} = method init*(g: OnchainGroupManager): Future[void] {.async.} = var ethRpc: Web3 # check if the Ethereum client is reachable - retryWrapper(ethRpc, RetryStrategy.new(), "Failed to connect to the Ethereum client"): + g.retryWrapper(ethRpc, "Failed to connect to the Ethereum client"): await newWeb3(g.ethClientUrl) # Set the chain id var chainId: Quantity - retryWrapper(chainId, RetryStrategy.new(), "Failed to get the chain id"): + g.retryWrapper(chainId, "Failed to get the chain id"): await ethRpc.provider.eth_chainId() g.chainId = some(chainId) @@ -609,12 +616,12 @@ method init*(g: OnchainGroupManager): Future[void] {.async.} = # get the current storage index var usingStorageIndex: Uint16 - retryWrapper(usingStorageIndex, RetryStrategy.new(), "Failed to get the storage index"): + g.retryWrapper(usingStorageIndex, "Failed to get the storage index"): await registryContract.usingStorageIndex().call() g.usingStorageIndex = some(usingStorageIndex) var rlnContractAddress: Address - retryWrapper(rlnContractAddress, RetryStrategy.new(), "Failed to get the rln contract address"): + g.retryWrapper(rlnContractAddress, "Failed to get the rln contract address"): await registryContract.storages(usingStorageIndex).call() let rlnContract = ethRpc.contractSender(RlnStorage, rlnContractAddress) @@ -670,12 +677,12 @@ method init*(g: OnchainGroupManager): Future[void] {.async.} = # check if the contract exists by calling a static function var membershipFee: Uint256 - retryWrapper(membershipFee, RetryStrategy.new(), "Failed to get the membership deposit"): + g.retryWrapper(membershipFee, "Failed to get the membership deposit"): await rlnContract.MEMBERSHIP_DEPOSIT().call() g.membershipFee = some(membershipFee) var deployedBlockNumber: Uint256 - retryWrapper(deployedBlockNumber, RetryStrategy.new(), "Failed to get the deployed block number"): + g.retryWrapper(deployedBlockNumber, "Failed to get the deployed block number"): await rlnContract.deployedBlockNumber().call() debug "using rln storage", deployedBlockNumber, rlnContractAddress g.rlnContractDeployedBlockNumber = cast[BlockNumber](deployedBlockNumber) @@ -686,15 +693,16 @@ method init*(g: OnchainGroupManager): Future[void] {.async.} = let fromBlock = max(g.latestProcessedBlock, g.rlnContractDeployedBlockNumber) info "reconnecting with the Ethereum client, and restarting group sync", fromBlock = fromBlock var newEthRpc: Web3 - retryWrapper(newEthRpc, RetryStrategy.new(), "Failed to reconnect with the Ethereum client"): + g.retryWrapper(newEthRpc, "Failed to reconnect with the Ethereum client"): await newWeb3(g.ethClientUrl) newEthRpc.ondisconnect = ethRpc.ondisconnect g.ethRpc = some(newEthRpc) try: - asyncSpawn g.startOnchainSync() - except CatchableError: - error "failed to restart group sync", error = getCurrentExceptionMsg() + await g.startOnchainSync() + except CatchableError, Exception: + g.onFatalErrorAction("failed to restart group sync" & ": " & getCurrentExceptionMsg()) + ethRpc.ondisconnect = proc() = asyncSpawn onDisconnect() @@ -719,7 +727,7 @@ proc isSyncing*(g: OnchainGroupManager): Future[bool] {.async,gcsafe.} = let ethRpc = g.ethRpc.get() var syncing: JsonNode - retryWrapper(syncing, RetryStrategy.new(), "Failed to get the syncing status"): + g.retryWrapper(syncing, "Failed to get the syncing status"): await ethRpc.provider.eth_syncing() return syncing.getBool() @@ -731,7 +739,7 @@ method isReady*(g: OnchainGroupManager): return false var currentBlock: BlockNumber - retryWrapper(currentBlock, RetryStrategy.new(), "Failed to get the current block number"): + g.retryWrapper(currentBlock, "Failed to get the current block number"): cast[BlockNumber](await g.ethRpc .get() .provider diff --git a/waku/waku_rln_relay/group_manager/on_chain/retry_wrapper.nim b/waku/waku_rln_relay/group_manager/on_chain/retry_wrapper.nim index d0a621dc50..5a1c5ec4f1 100644 --- a/waku/waku_rln_relay/group_manager/on_chain/retry_wrapper.nim +++ b/waku/waku_rln_relay/group_manager/on_chain/retry_wrapper.nim @@ -1,6 +1,7 @@ +import + ../../../common/error_handling import chronos - type RetryStrategy* = object shouldRetry*: bool @@ -18,6 +19,7 @@ proc new*(T: type RetryStrategy): RetryStrategy = template retryWrapper*(res: auto, retryStrategy: RetryStrategy, errStr: string, + errCallback: OnFatalErrorHandler = nil, body: untyped): auto = var retryCount = retryStrategy.retryCount var shouldRetry = retryStrategy.shouldRetry @@ -32,4 +34,8 @@ template retryWrapper*(res: auto, exceptionMessage = getCurrentExceptionMsg() await sleepAsync(retryStrategy.retryDelay) if shouldRetry: - raise newException(CatchableError, errStr & ": " & exceptionMessage) + if errCallback == nil: + raise newException(CatchableError, errStr & " errCallback == nil: " & exceptionMessage) + else: + errCallback(errStr & ": " & exceptionMessage) + return diff --git a/waku/waku_rln_relay/rln_relay.nim b/waku/waku_rln_relay/rln_relay.nim index 174bf6e34f..98765120b9 100644 --- a/waku/waku_rln_relay/rln_relay.nim +++ b/waku/waku_rln_relay/rln_relay.nim @@ -25,6 +25,7 @@ when defined(rln_v2): import ./nonce_manager import + ../common/error_handling, ../waku_relay, # for WakuRelayHandler ../waku_core, ../waku_keystore, @@ -33,16 +34,18 @@ import logScope: topics = "waku rln_relay" -type WakuRlnConfig* = object - rlnRelayDynamic*: bool - rlnRelayCredIndex*: Option[uint] - rlnRelayEthContractAddress*: string - rlnRelayEthClientAddress*: string - rlnRelayCredPath*: string - rlnRelayCredPassword*: string - rlnRelayTreePath*: string - when defined(rln_v2): - rlnRelayUserMessageLimit*: uint64 +type + WakuRlnConfig* = object + rlnRelayDynamic*: bool + rlnRelayCredIndex*: Option[uint] + rlnRelayEthContractAddress*: string + rlnRelayEthClientAddress*: string + rlnRelayCredPath*: string + rlnRelayCredPassword*: string + rlnRelayTreePath*: string + onFatalErrorAction*: OnFatalErrorHandler + when defined(rln_v2): + rlnRelayUserMessageLimit*: uint64 proc createMembershipList*(rln: ptr RLN, n: int): RlnRelayResult[( seq[RawMembershipCredentials], string @@ -84,10 +87,11 @@ type WakuRLNRelay* = ref object of RootObj nullifierLog*: OrderedTable[Epoch, seq[ProofMetadata]] lastEpoch*: Epoch # the epoch of the last published rln message groupManager*: GroupManager + onFatalErrorAction*: OnFatalErrorHandler when defined(rln_v2): nonceManager: NonceManager -method stop*(rlnPeer: WakuRLNRelay) {.async: (raises: [Exception]).} = +proc stop*(rlnPeer: WakuRLNRelay) {.async: (raises: [Exception]).} = ## stops the rln-relay protocol ## Throws an error if it cannot stop the rln-relay protocol @@ -370,6 +374,7 @@ proc mount(conf: WakuRlnConfig, ): Future[WakuRlnRelay] {.async: (raises: [Exception]).} = var groupManager: GroupManager + wakuRlnRelay: WakuRLNRelay # create an RLN instance let rlnInstanceRes = createRLNInstance(tree_path = conf.rlnRelayTreePath) if rlnInstanceRes.isErr(): @@ -383,7 +388,8 @@ proc mount(conf: WakuRlnConfig, groupManager = StaticGroupManager(groupSize: StaticGroupSize, groupKeys: parsedGroupKeysRes.get(), membershipIndex: conf.rlnRelayCredIndex, - rlnInstance: rlnInstance) + rlnInstance: rlnInstance, + onFatalErrorAction: conf.onFatalErrorAction) # we don't persist credentials in static mode since they exist in ./constants.nim else: # dynamic setup @@ -398,7 +404,9 @@ proc mount(conf: WakuRlnConfig, registrationHandler: registrationHandler, keystorePath: rlnRelayCredPath, keystorePassword: rlnRelayCredPassword, - membershipIndex: conf.rlnRelayCredIndex) + membershipIndex: conf.rlnRelayCredIndex, + onFatalErrorAction: conf.onFatalErrorAction) + # Initialize the groupManager await groupManager.init() # Start the group sync @@ -406,9 +414,12 @@ proc mount(conf: WakuRlnConfig, when defined(rln_v2): return WakuRLNRelay(groupManager: groupManager, - nonceManager: NonceManager.init(conf.rlnRelayUserMessageLimit)) + nonceManager: NonceManager.init(conf.rlnRelayUserMessageLimit), + onFatalErrorAction: conf.onFatalErrorAction) else: - return WakuRLNRelay(groupManager: groupManager) + return WakuRLNRelay(groupManager: groupManager, + onFatalErrorAction: conf.onFatalErrorAction) + proc isReady*(rlnPeer: WakuRLNRelay): Future[bool] {.async: (raises: [Exception]).} = ## returns true if the rln-relay protocol is ready to relay messages From 8f487a21795b23e737aafb06795b0b59f215d0c6 Mon Sep 17 00:00:00 2001 From: gabrielmer <101006718+gabrielmer@users.noreply.github.com> Date: Thu, 15 Feb 2024 17:33:15 +0200 Subject: [PATCH 230/274] fix: checking for keystore file existence (#2427) --- tests/waku_rln_relay/test_rln_group_manager_onchain.nim | 7 +++++++ .../group_manager/on_chain/group_manager.nim | 5 +++++ 2 files changed, 12 insertions(+) diff --git a/tests/waku_rln_relay/test_rln_group_manager_onchain.nim b/tests/waku_rln_relay/test_rln_group_manager_onchain.nim index 7c95ee763a..9087aef5fb 100644 --- a/tests/waku_rln_relay/test_rln_group_manager_onchain.nim +++ b/tests/waku_rln_relay/test_rln_group_manager_onchain.nim @@ -223,6 +223,13 @@ suite "Onchain group manager": rlnInstance: manager.rlnInstance) expect(ValueError): await manager2.init() + asyncTest "should error when keystore path and password are provided but file doesn't exist": + let manager = await setup() + manager.keystorePath = some("/inexistent/file") + manager.keystorePassword = some("password") + + expect(CatchableError): await manager.init() + asyncTest "startGroupSync: should start group sync": let manager = await setup() diff --git a/waku/waku_rln_relay/group_manager/on_chain/group_manager.nim b/waku/waku_rln_relay/group_manager/on_chain/group_manager.nim index 22b392967a..20891d4b26 100644 --- a/waku/waku_rln_relay/group_manager/on_chain/group_manager.nim +++ b/waku/waku_rln_relay/group_manager/on_chain/group_manager.nim @@ -4,6 +4,7 @@ else: {.push raises: [].} import + os, web3, web3/ethtypes, eth/keys as keys, @@ -630,6 +631,10 @@ method init*(g: OnchainGroupManager): Future[void] {.async.} = g.registryContract = some(registryContract) if g.keystorePath.isSome() and g.keystorePassword.isSome(): + if not existsFile(g.keystorePath.get()): + error "File provided as keystore path does not exist", path=g.keystorePath.get() + raise newException(CatchableError, "missing keystore") + var keystoreQuery = KeystoreMembership( membershipContract: MembershipContract( chainId: $g.chainId.get(), From 2060cfab675c1e36e36159e5818c9ce479b97992 Mon Sep 17 00:00:00 2001 From: Aaryamann Challani <43716372+rymnc@users.noreply.github.com> Date: Fri, 16 Feb 2024 18:36:31 +0530 Subject: [PATCH 231/274] chore(rln-relay): remove wss support from node config (#2442) * chore(rln-relay): remove wss support from node config * fix: incl regex pattern examples * docs: update rln docs --- apps/chat2/chat2.nim | 4 +- apps/chat2/config_chat2.nim | 35 +++++++++++++--- apps/networkmonitor/networkmonitor.nim | 2 +- apps/networkmonitor/networkmonitor_config.nim | 36 ++++++++++++++--- apps/wakunode2/app.nim | 4 +- apps/wakunode2/external_config.nim | 40 ++++++++++++++++++- docs/operators/how-to/run-with-rln.md | 10 ++--- docs/tutorial/onchain-rln-relay-chat2.md | 4 +- .../rln_keystore_generator.nim | 2 +- waku/waku_rln_relay/rln_relay.nim | 2 +- 10 files changed, 112 insertions(+), 27 deletions(-) diff --git a/apps/chat2/chat2.nim b/apps/chat2/chat2.nim index 7fb4551d26..98e5842dbf 100644 --- a/apps/chat2/chat2.nim +++ b/apps/chat2/chat2.nim @@ -519,7 +519,7 @@ proc processInput(rfd: AsyncFD, rng: ref HmacDrbgContext) {.async.} = rlnRelayDynamic: conf.rlnRelayDynamic, rlnRelayCredIndex: conf.rlnRelayCredIndex, rlnRelayEthContractAddress: conf.rlnRelayEthContractAddress, - rlnRelayEthClientAddress: conf.rlnRelayEthClientAddress, + rlnRelayEthClientAddress: string(conf.rlnRelayethClientAddress), rlnRelayCredPath: conf.rlnRelayCredPath, rlnRelayCredPassword: conf.rlnRelayCredPassword, rlnRelayUserMessageLimit: conf.rlnRelayUserMessageLimit, @@ -529,7 +529,7 @@ proc processInput(rfd: AsyncFD, rng: ref HmacDrbgContext) {.async.} = rlnRelayDynamic: conf.rlnRelayDynamic, rlnRelayCredIndex: conf.rlnRelayCredIndex, rlnRelayEthContractAddress: conf.rlnRelayEthContractAddress, - rlnRelayEthClientAddress: conf.rlnRelayEthClientAddress, + rlnRelayEthClientAddress: string(conf.rlnRelayethClientAddress), rlnRelayCredPath: conf.rlnRelayCredPath, rlnRelayCredPassword: conf.rlnRelayCredPassword, ) diff --git a/apps/chat2/config_chat2.nim b/apps/chat2/config_chat2.nim index 9aa736ebbc..a23683e930 100644 --- a/apps/chat2/config_chat2.nim +++ b/apps/chat2/config_chat2.nim @@ -1,11 +1,12 @@ import - std/strutils, - confutils, confutils/defs, confutils/std/net, chronicles, chronos, + confutils, confutils/defs, confutils/std/net, + eth/keys, libp2p/crypto/crypto, libp2p/crypto/secp, nimcrypto/utils, - eth/keys + std/strutils, + regex import ../../../waku/waku_core @@ -14,7 +15,7 @@ type none prod test - + EthRpcUrl = distinct string Chat2Conf* = object ## General node config @@ -252,9 +253,9 @@ type name: "rln-relay-id-commitment-key" }: string rlnRelayEthClientAddress* {. - desc: "WebSocket address of an Ethereum testnet client e.g., http://localhost:8540/", + desc: "HTTP address of an Ethereum testnet client e.g., http://localhost:8540/", defaultValue: "http://localhost:8540/" - name: "rln-relay-eth-client-address" }: string + name: "rln-relay-eth-client-address" }: EthRpcUrl rlnRelayEthContractAddress* {. desc: "Address of membership contract on an Ethereum testnet", @@ -307,6 +308,28 @@ proc parseCmdArg*(T: type Option[uint], p: string): T = except CatchableError: raise newException(ValueError, "Invalid unsigned integer") +proc completeCmdArg*(T: type EthRpcUrl, val: string): seq[string] = + return @[] + +proc parseCmdArg*(T: type EthRpcUrl, s: string): T = + ## allowed patterns: + ## http://url:port + ## https://url:port + ## http://url:port/path + ## https://url:port/path + ## http://url/with/path + ## http://url:port/path?query + ## https://url:port/path?query + ## disallowed patterns: + ## any valid/invalid ws or wss url + var httpPattern = re2"^(https?:\/\/)(?:w{1,3}\.)?[^\s.]+(?:\.[a-z]+)*(?::\d+)?(?![^<]*(?:<\/\w+>|\/?>))" + var wsPattern = re2"^(wss?:\/\/)(?:w{1,3}\.)?[^\s.]+(?:\.[a-z]+)*(?::\d+)?(?![^<]*(?:<\/\w+>|\/?>))" + if regex.match(s, wsPattern): + raise newException(ValueError, "Websocket RPC URL is not supported, Please use an HTTP URL") + if not regex.match(s, httpPattern): + raise newException(ValueError, "Invalid HTTP RPC URL") + return EthRpcUrl(s) + func defaultListenAddress*(conf: Chat2Conf): IpAddress = # TODO: How should we select between IPv4 and IPv6 # Maybe there should be a config option for this. diff --git a/apps/networkmonitor/networkmonitor.nim b/apps/networkmonitor/networkmonitor.nim index 1a49d3981a..7907b2150b 100644 --- a/apps/networkmonitor/networkmonitor.nim +++ b/apps/networkmonitor/networkmonitor.nim @@ -542,7 +542,7 @@ when isMainModule: rlnRelayDynamic: conf.rlnRelayDynamic, rlnRelayCredIndex: some(uint(0)), rlnRelayEthContractAddress: conf.rlnRelayEthContractAddress, - rlnRelayEthClientAddress: conf.rlnRelayEthClientAddress, + rlnRelayEthClientAddress: string(conf.rlnRelayethClientAddress), rlnRelayCredPath: "", rlnRelayCredPassword: "", rlnRelayTreePath: conf.rlnRelayTreePath, diff --git a/apps/networkmonitor/networkmonitor_config.nim b/apps/networkmonitor/networkmonitor_config.nim index 911b3c2420..cb06418210 100644 --- a/apps/networkmonitor/networkmonitor_config.nim +++ b/apps/networkmonitor/networkmonitor_config.nim @@ -1,11 +1,14 @@ import - std/strutils, chronicles, chronicles/topics_registry, - chronos, confutils, + chronos, + std/strutils, stew/results, - stew/shims/net + stew/shims/net, + regex + +type EthRpcUrl = distinct string type NetworkMonitorConf* = object @@ -63,9 +66,9 @@ type name: "rln-relay-tree-path" }: string rlnRelayEthClientAddress* {. - desc: "WebSocket address of an Ethereum testnet client e.g., http://localhost:8540/", + desc: "HTTP address of an Ethereum testnet client e.g., http://localhost:8540/", defaultValue: "http://localhost:8540/", - name: "rln-relay-eth-client-address" }: string + name: "rln-relay-eth-client-address" }: EthRpcUrl rlnRelayEthContractAddress* {. desc: "Address of membership contract on an Ethereum testnet", @@ -116,6 +119,29 @@ proc parseCmdArg*(T: type chronos.Duration, p: string): T = proc completeCmdArg*(T: type chronos.Duration, val: string): seq[string] = return @[] +proc completeCmdArg*(T: type EthRpcUrl, val: string): seq[string] = + return @[] + +proc parseCmdArg*(T: type EthRpcUrl, s: string): T = + ## allowed patterns: + ## http://url:port + ## https://url:port + ## http://url:port/path + ## https://url:port/path + ## http://url/with/path + ## http://url:port/path?query + ## https://url:port/path?query + ## disallowed patterns: + ## any valid/invalid ws or wss url + var httpPattern = re2"^(https?:\/\/)(?:w{1,3}\.)?[^\s.]+(?:\.[a-z]+)*(?::\d+)?(?![^<]*(?:<\/\w+>|\/?>))" + var wsPattern = re2"^(wss?:\/\/)(?:w{1,3}\.)?[^\s.]+(?:\.[a-z]+)*(?::\d+)?(?![^<]*(?:<\/\w+>|\/?>))" + if regex.match(s, wsPattern): + echo "here" + raise newException(ValueError, "Websocket RPC URL is not supported, Please use an HTTP URL") + if not regex.match(s, httpPattern): + raise newException(ValueError, "Invalid HTTP RPC URL") + return EthRpcUrl(s) + proc loadConfig*(T: type NetworkMonitorConf): Result[T, string] = try: let conf = NetworkMonitorConf.load(version=git_version) diff --git a/apps/wakunode2/app.nim b/apps/wakunode2/app.nim index 2fbe197a5b..291ea1d1dc 100644 --- a/apps/wakunode2/app.nim +++ b/apps/wakunode2/app.nim @@ -472,7 +472,7 @@ proc setupProtocols(node: WakuNode, rlnRelayDynamic: conf.rlnRelayDynamic, rlnRelayCredIndex: conf.rlnRelayCredIndex, rlnRelayEthContractAddress: conf.rlnRelayEthContractAddress, - rlnRelayEthClientAddress: conf.rlnRelayEthClientAddress, + rlnRelayEthClientAddress: string(conf.rlnRelayethClientAddress), rlnRelayCredPath: conf.rlnRelayCredPath, rlnRelayCredPassword: conf.rlnRelayCredPassword, rlnRelayTreePath: conf.rlnRelayTreePath, @@ -484,7 +484,7 @@ proc setupProtocols(node: WakuNode, rlnRelayDynamic: conf.rlnRelayDynamic, rlnRelayCredIndex: conf.rlnRelayCredIndex, rlnRelayEthContractAddress: conf.rlnRelayEthContractAddress, - rlnRelayEthClientAddress: conf.rlnRelayEthClientAddress, + rlnRelayEthClientAddress: string(conf.rlnRelayethClientAddress), rlnRelayCredPath: conf.rlnRelayCredPath, rlnRelayCredPassword: conf.rlnRelayCredPassword, rlnRelayTreePath: conf.rlnRelayTreePath, diff --git a/apps/wakunode2/external_config.nim b/apps/wakunode2/external_config.nim index 907f42e6de..82ed60bc81 100644 --- a/apps/wakunode2/external_config.nim +++ b/apps/wakunode2/external_config.nim @@ -36,6 +36,8 @@ type ProtectedTopic* = object type ShardIdx = distinct uint16 +type EthRpcUrl = distinct string + type StartUpCommand* = enum noCommand # default, runs waku generateRlnKeystore # generates a new RLN keystore @@ -63,9 +65,9 @@ type name: "rln-relay-cred-path" }: string rlnRelayEthClientAddress* {. - desc: "WebSocket address of an Ethereum testnet client e.g., http://localhost:8540/", + desc: "HTTP address of an Ethereum testnet client e.g., http://localhost:8540/", defaultValue: "http://localhost:8540/", - name: "rln-relay-eth-client-address" }: string + name: "rln-relay-eth-client-address" }: EthRpcUrl rlnRelayEthContractAddress* {. desc: "Address of membership contract on an Ethereum testnet", @@ -603,6 +605,28 @@ proc parseCmdArg*(T: type Option[uint], p: string): T = except CatchableError: raise newException(ValueError, "Invalid unsigned integer") +proc completeCmdArg*(T: type EthRpcUrl, val: string): seq[string] = + return @[] + +proc parseCmdArg*(T: type EthRpcUrl, s: string): T = + ## allowed patterns: + ## http://url:port + ## https://url:port + ## http://url:port/path + ## https://url:port/path + ## http://url/with/path + ## http://url:port/path?query + ## https://url:port/path?query + ## disallowed patterns: + ## any valid/invalid ws or wss url + var httpPattern = re2"^(https?:\/\/)(?:w{1,3}\.)?[^\s.]+(?:\.[a-z]+)*(?::\d+)?(?![^<]*(?:<\/\w+>|\/?>))" + var wsPattern = re2"^(wss?:\/\/)(?:w{1,3}\.)?[^\s.]+(?:\.[a-z]+)*(?::\d+)?(?![^<]*(?:<\/\w+>|\/?>))" + if regex.match(s, wsPattern): + raise newException(ValueError, "Websocket RPC URL is not supported, Please use an HTTP URL") + if not regex.match(s, httpPattern): + raise newException(ValueError, "Invalid HTTP RPC URL") + return EthRpcUrl(s) + ## Load proc readValue*(r: var TomlReader, value: var crypto.PrivateKey) {.raises: [SerializationError].} = @@ -641,6 +665,18 @@ proc readValue*(r: var EnvvarReader, value: var ShardIdx) {.raises: [Serializati except CatchableError: raise newException(SerializationError, getCurrentExceptionMsg()) +proc readValue*(r: var TomlReader, value: var EthRpcUrl) {.raises: [SerializationError].} = + try: + value = parseCmdArg(EthRpcUrl, r.readValue(string)) + except CatchableError: + raise newException(SerializationError, getCurrentExceptionMsg()) + +proc readValue*(r: var EnvvarReader, value: var EthRpcUrl) {.raises: [SerializationError].} = + try: + value = parseCmdArg(EthRpcUrl, r.readValue(string)) + except CatchableError: + raise newException(SerializationError, getCurrentExceptionMsg()) + {.push warning[ProveInit]: off.} proc load*(T: type WakuNodeConf, version=""): ConfResult[T] = diff --git a/docs/operators/how-to/run-with-rln.md b/docs/operators/how-to/run-with-rln.md index ed6d278735..f56af0146e 100644 --- a/docs/operators/how-to/run-with-rln.md +++ b/docs/operators/how-to/run-with-rln.md @@ -33,7 +33,7 @@ make wakunode2 Follow [Step 10](../droplet-quickstart.md#10-run-nwaku) of the [droplet quickstart](../droplet-quickstart.md) guide, while replacing the run command with - ```bash -export SEPOLIA_WS_NODE_ADDRESS= +export SEPOLIA_HTTP_NODE_ADDRESS= export RLN_RELAY_CONTRACT_ADDRESS="0xF471d71E9b1455bBF4b85d475afb9BB0954A29c4" # Replace this with any compatible implementation $WAKUNODE_DIR/wakunode2 \ --store:true \ @@ -44,7 +44,7 @@ $WAKUNODE_DIR/wakunode2 \ --rln-relay:true \ --rln-relay-dynamic:true \ --rln-relay-eth-contract-address:"$RLN_RELAY_CONTRACT_ADDRESS" \ ---rln-relay-eth-client-address:"$SEPOLIA_WS_NODE_ADDRESS" +--rln-relay-eth-client-address:"$SEPOLIA_HTTP_NODE_ADDRESS" ``` OR @@ -53,7 +53,7 @@ If you are running the nwaku node within docker, follow [Step 2](../docker-quick ```bash export WAKU_FLEET= -export SEPOLIA_WS_NODE_ADDRESS= +export SEPOLIA_HTTP_NODE_ADDRESS= export RLN_RELAY_CONTRACT_ADDRESS="0xF471d71E9b1455bBF4b85d475afb9BB0954A29c4" # Replace this with any compatible implementation docker run -i -t -p 60000:60000 -p 9000:9000/udp wakuorg/nwaku:v0.20.0 \ --dns-discovery:true \ @@ -63,7 +63,7 @@ docker run -i -t -p 60000:60000 -p 9000:9000/udp wakuorg/nwaku:v0.20.0 \ --rln-relay:true \ --rln-relay-dynamic:true \ --rln-relay-eth-contract-address:"$RLN_RELAY_CONTRACT_ADDRESS" \ - --rln-relay-eth-client-address:"$SEPOLIA_WS_NODE_ADDRESS" + --rln-relay-eth-client-address:"$SEPOLIA_HTTP_NODE_ADDRESS" ``` > Note: You can choose to keep connections to other nodes alive by adding the `--keep-alive` flag. @@ -74,7 +74,7 @@ runtime arguments - 1. `--rln-relay`: Allows waku-rln-relay to be mounted into the setup of the nwaku node 2. `--rln-relay-dynamic`: Enables waku-rln-relay to connect to an ethereum node to fetch the membership group 3. `--rln-relay-eth-contract-address`: The contract address of an RLN membership group -4. `--rln-relay-eth-client-address`: The websocket url to a Sepolia ethereum node +4. `--rln-relay-eth-client-address`: The HTTP url to a Sepolia ethereum node You should now have nwaku running, with RLN enabled! diff --git a/docs/tutorial/onchain-rln-relay-chat2.md b/docs/tutorial/onchain-rln-relay-chat2.md index 0d2e8741de..227afcfe9e 100644 --- a/docs/tutorial/onchain-rln-relay-chat2.md +++ b/docs/tutorial/onchain-rln-relay-chat2.md @@ -166,7 +166,7 @@ You can check this fact by looking at `Bob`'s console, where `message3` is missi **Alice** ```bash -./build/chat2 --fleet:test --content-topic:/toy-chat/3/mingde/proto --rln-relay:true --rln-relay-dynamic:true --rln-relay-eth-contract-address:0xF471d71E9b1455bBF4b85d475afb9BB0954A29c4 --rln-relay-cred-path:rlnKeystore.json --rln-relay-cred-password:password --rln-relay-eth-client-address:wss://sepolia.infura.io/ws/v3/12345678901234567890123456789012 --ports-shift=1 +./build/chat2 --fleet:test --content-topic:/toy-chat/3/mingde/proto --rln-relay:true --rln-relay-dynamic:true --rln-relay-eth-contract-address:0xF471d71E9b1455bBF4b85d475afb9BB0954A29c4 --rln-relay-cred-path:rlnKeystore.json --rln-relay-cred-password:password --rln-relay-eth-client-address:https://sepolia.infura.io/v3/12345678901234567890123456789012 --ports-shift=1 ``` ``` @@ -209,7 +209,7 @@ your rln identity commitment key is: bd093cbf14fb933d53f596c33f98b3df83b7e9f7a19 **Bob** ```bash -./build/chat2 --fleet:test --content-topic:/toy-chat/3/mingde/proto --rln-relay:true --rln-relay-dynamic:true --rln-relay-eth-contract-address:0xF471d71E9b1455bBF4b85d475afb9BB0954A29c4 --rln-relay-cred-path:rlnKeystore.json --rln-relay-cred-index:1 --rln-relay-cred-password:password --rln-relay-eth-client-address:wss://sepolia.infura.io/ws/v3/12345678901234567890123456789012 --ports-shift=2 +./build/chat2 --fleet:test --content-topic:/toy-chat/3/mingde/proto --rln-relay:true --rln-relay-dynamic:true --rln-relay-eth-contract-address:0xF471d71E9b1455bBF4b85d475afb9BB0954A29c4 --rln-relay-cred-path:rlnKeystore.json --rln-relay-cred-index:1 --rln-relay-cred-password:password --rln-relay-eth-client-address:https://sepolia.infura.io/v3/12345678901234567890123456789012 --ports-shift=2 ``` ``` diff --git a/tools/rln_keystore_generator/rln_keystore_generator.nim b/tools/rln_keystore_generator/rln_keystore_generator.nim index 5742eedc29..14cde6af12 100644 --- a/tools/rln_keystore_generator/rln_keystore_generator.nim +++ b/tools/rln_keystore_generator/rln_keystore_generator.nim @@ -49,7 +49,7 @@ proc doRlnKeystoreGenerator*(conf: WakuNodeConf) = quit(0) # 4. initialize OnchainGroupManager - let groupManager = OnchainGroupManager(ethClientUrl: conf.rlnRelayEthClientAddress, + let groupManager = OnchainGroupManager(ethClientUrl: string(conf.rlnRelayethClientAddress), ethContractAddress: conf.rlnRelayEthContractAddress, rlnInstance: rlnInstance, keystorePath: none(string), diff --git a/waku/waku_rln_relay/rln_relay.nim b/waku/waku_rln_relay/rln_relay.nim index 98765120b9..b1f8859938 100644 --- a/waku/waku_rln_relay/rln_relay.nim +++ b/waku/waku_rln_relay/rln_relay.nim @@ -398,7 +398,7 @@ proc mount(conf: WakuRlnConfig, let rlnRelayCredPath = useValueOrNone(conf.rlnRelayCredPath) rlnRelayCredPassword = useValueOrNone(conf.rlnRelayCredPassword) - groupManager = OnchainGroupManager(ethClientUrl: conf.rlnRelayEthClientAddress, + groupManager = OnchainGroupManager(ethClientUrl: string(conf.rlnRelayethClientAddress), ethContractAddress: $conf.rlnRelayEthContractAddress, rlnInstance: rlnInstance, registrationHandler: registrationHandler, From 29b0c0b8da0f4af04b11997d35ff51daafd9ccce Mon Sep 17 00:00:00 2001 From: Aaryamann Challani <43716372+rymnc@users.noreply.github.com> Date: Fri, 16 Feb 2024 22:42:35 +0530 Subject: [PATCH 232/274] fix(rln-relay): regex pattern match for extended domains (#2444) * fix(rln-relay): regex pattern match for extended domains * fix: enable localhost too --- apps/chat2/config_chat2.nim | 4 ++-- apps/networkmonitor/networkmonitor_config.nim | 4 ++-- apps/wakunode2/external_config.nim | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/apps/chat2/config_chat2.nim b/apps/chat2/config_chat2.nim index a23683e930..c847ed406a 100644 --- a/apps/chat2/config_chat2.nim +++ b/apps/chat2/config_chat2.nim @@ -322,8 +322,8 @@ proc parseCmdArg*(T: type EthRpcUrl, s: string): T = ## https://url:port/path?query ## disallowed patterns: ## any valid/invalid ws or wss url - var httpPattern = re2"^(https?:\/\/)(?:w{1,3}\.)?[^\s.]+(?:\.[a-z]+)*(?::\d+)?(?![^<]*(?:<\/\w+>|\/?>))" - var wsPattern = re2"^(wss?:\/\/)(?:w{1,3}\.)?[^\s.]+(?:\.[a-z]+)*(?::\d+)?(?![^<]*(?:<\/\w+>|\/?>))" + var httpPattern = re2"^(https?):\/\/((localhost)|([\w_-]+(?:(?:\.[\w_-]+)+)))(:[0-9]{1,5})?([\w.,@?^=%&:\/~+#-]*[\w@?^=%&\/~+#-])*" + var wsPattern = re2"^(wss?):\/\/((localhost)|([\w_-]+(?:(?:\.[\w_-]+)+)))(:[0-9]{1,5})?([\w.,@?^=%&:\/~+#-]*[\w@?^=%&\/~+#-])*" if regex.match(s, wsPattern): raise newException(ValueError, "Websocket RPC URL is not supported, Please use an HTTP URL") if not regex.match(s, httpPattern): diff --git a/apps/networkmonitor/networkmonitor_config.nim b/apps/networkmonitor/networkmonitor_config.nim index cb06418210..a1c83ba948 100644 --- a/apps/networkmonitor/networkmonitor_config.nim +++ b/apps/networkmonitor/networkmonitor_config.nim @@ -133,8 +133,8 @@ proc parseCmdArg*(T: type EthRpcUrl, s: string): T = ## https://url:port/path?query ## disallowed patterns: ## any valid/invalid ws or wss url - var httpPattern = re2"^(https?:\/\/)(?:w{1,3}\.)?[^\s.]+(?:\.[a-z]+)*(?::\d+)?(?![^<]*(?:<\/\w+>|\/?>))" - var wsPattern = re2"^(wss?:\/\/)(?:w{1,3}\.)?[^\s.]+(?:\.[a-z]+)*(?::\d+)?(?![^<]*(?:<\/\w+>|\/?>))" + var httpPattern = re2"^(https?):\/\/((localhost)|([\w_-]+(?:(?:\.[\w_-]+)+)))(:[0-9]{1,5})?([\w.,@?^=%&:\/~+#-]*[\w@?^=%&\/~+#-])*" + var wsPattern = re2"^(wss?):\/\/((localhost)|([\w_-]+(?:(?:\.[\w_-]+)+)))(:[0-9]{1,5})?([\w.,@?^=%&:\/~+#-]*[\w@?^=%&\/~+#-])*" if regex.match(s, wsPattern): echo "here" raise newException(ValueError, "Websocket RPC URL is not supported, Please use an HTTP URL") diff --git a/apps/wakunode2/external_config.nim b/apps/wakunode2/external_config.nim index 82ed60bc81..72bd64a170 100644 --- a/apps/wakunode2/external_config.nim +++ b/apps/wakunode2/external_config.nim @@ -619,8 +619,8 @@ proc parseCmdArg*(T: type EthRpcUrl, s: string): T = ## https://url:port/path?query ## disallowed patterns: ## any valid/invalid ws or wss url - var httpPattern = re2"^(https?:\/\/)(?:w{1,3}\.)?[^\s.]+(?:\.[a-z]+)*(?::\d+)?(?![^<]*(?:<\/\w+>|\/?>))" - var wsPattern = re2"^(wss?:\/\/)(?:w{1,3}\.)?[^\s.]+(?:\.[a-z]+)*(?::\d+)?(?![^<]*(?:<\/\w+>|\/?>))" + var httpPattern = re2"^(https?):\/\/((localhost)|([\w_-]+(?:(?:\.[\w_-]+)+)))(:[0-9]{1,5})?([\w.,@?^=%&:\/~+#-]*[\w@?^=%&\/~+#-])*" + var wsPattern = re2"^(wss?):\/\/((localhost)|([\w_-]+(?:(?:\.[\w_-]+)+)))(:[0-9]{1,5})?([\w.,@?^=%&:\/~+#-]*[\w@?^=%&\/~+#-])*" if regex.match(s, wsPattern): raise newException(ValueError, "Websocket RPC URL is not supported, Please use an HTTP URL") if not regex.match(s, httpPattern): From ce151efc36baea1ac5c5d1a86d8ca8d7499ef886 Mon Sep 17 00:00:00 2001 From: Hanno Cornelius <68783915+jm-clius@users.noreply.github.com> Date: Sat, 17 Feb 2024 19:46:01 +0000 Subject: [PATCH 233/274] feat: prioritise yamux above mplex (#2417) * update libp2p submodule * feat: prefer yamux to mplex --- vendor/nim-libp2p | 2 +- waku/node/waku_switch.nim | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/vendor/nim-libp2p b/vendor/nim-libp2p index e3c967ad19..e0f70b7177 160000 --- a/vendor/nim-libp2p +++ b/vendor/nim-libp2p @@ -1 +1 @@ -Subproject commit e3c967ad1939fb33b8e13759037d193734acd202 +Subproject commit e0f70b71778bf9613421261b22a56499c913f806 diff --git a/waku/node/waku_switch.nim b/waku/node/waku_switch.nim index add29b16b1..56b984a2ec 100644 --- a/waku/node/waku_switch.nim +++ b/waku/node/waku_switch.nim @@ -90,8 +90,8 @@ proc newWakuSwitch*( .withMaxIn(maxIn) .withMaxOut(maxOut) .withMaxConnsPerPeer(maxConnsPerPeer) - .withMplex(inTimeout, outTimeout) .withYamux() + .withMplex(inTimeout, outTimeout) .withNoise() .withTcpTransport(transportFlags) .withNameResolver(nameResolver) From b700d0464bf5dba8423b8f98700fbdccc44bd17a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20Soko=C5=82owski?= Date: Mon, 19 Feb 2024 11:31:34 +0100 Subject: [PATCH 234/274] chore(ci): fix IMAGE_NAME to use harbor.status.im MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Jakub Sokołowski --- ci/Jenkinsfile.release | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/Jenkinsfile.release b/ci/Jenkinsfile.release index 9998da6095..8e51e88730 100644 --- a/ci/Jenkinsfile.release +++ b/ci/Jenkinsfile.release @@ -27,7 +27,7 @@ pipeline { string( name: 'IMAGE_NAME', description: 'Name of Docker image to push.', - defaultValue: params.IMAGE_NAME ?: 'waku-org/nwaku', + defaultValue: params.IMAGE_NAME ?: 'harbor.status.im/wakuorg/nwaku', ) string( name: 'DOCKER_CRED', From 501c92e2c3cfd4167e09bf3d4836ef513814fc6e Mon Sep 17 00:00:00 2001 From: Ivan FB <128452529+Ivansete-status@users.noreply.github.com> Date: Mon, 19 Feb 2024 22:25:20 +0100 Subject: [PATCH 235/274] waku_metrics: change log interval from 30'' to 10' (#2428) --- waku/node/waku_metrics.nim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/waku/node/waku_metrics.nim b/waku/node/waku_metrics.nim index 140b55e7a2..91aff2ca54 100644 --- a/waku/node/waku_metrics.nim +++ b/waku/node/waku_metrics.nim @@ -16,7 +16,7 @@ import ./peer_manager, ./waku_node -const LogInterval = 30.seconds +const LogInterval = 10.minutes logScope: topics = "waku node metrics" From 56ff30ca75100b06cb5157ae2655092b3051ec8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?rich=CE=9Brd?= Date: Tue, 20 Feb 2024 11:18:03 -0400 Subject: [PATCH 236/274] feat(bindings): generate a random private key (#2446) --- library/waku_thread/config.nim | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/library/waku_thread/config.nim b/library/waku_thread/config.nim index c2f077fa67..b0565ef5fa 100644 --- a/library/waku_thread/config.nim +++ b/library/waku_thread/config.nim @@ -17,8 +17,8 @@ proc parsePrivateKey(jsonNode: JsonNode, jsonResp: var JsonEvent): bool = if not jsonNode.contains("key"): - jsonResp = JsonErrorEvent.new("The node key is missing."); - return false + privateKey = PrivateKey.random(Secp256k1, newRng()[]).tryGet() + return true if jsonNode["key"].kind != JsonNodeKind.JString: jsonResp = JsonErrorEvent.new("The node key should be a string."); From 652abf8d2a45897556dcfd075d308a3bc9822523 Mon Sep 17 00:00:00 2001 From: Guru <19eucs071@skcet.ac.in> Date: Tue, 20 Feb 2024 22:37:26 +0530 Subject: [PATCH 237/274] Wrong docs link (#2450) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ec5de6c78e..87c6c4c02d 100644 --- a/README.md +++ b/README.md @@ -36,7 +36,7 @@ To join the network, you need to know the address of at least one bootstrap node Please refer to the [Waku README](https://github.com/waku-org/nwaku/blob/master/waku/README.md) for more information. For more on how to run `wakunode2`, refer to: -- [Run using binaries](https://docs.waku.org/guides/run-nwaku-node#download-the-binary) +- [Run using binaries](https://docs.waku.org/guides/nwaku/build-source) - [Run using docker](https://docs.waku.org/guides/nwaku/run-docker) - [Run using docker-compose](https://docs.waku.org/guides/nwaku/run-docker-compose) From d01585e9facafcdf3b53b394ee94753982269c0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?rich=CE=9Brd?= Date: Tue, 20 Feb 2024 16:00:03 -0400 Subject: [PATCH 238/274] fix(bindings): base64 payload and key for content topic (#2435) * fix(bindings): base64 payload and key for content topic * fix(bindings): store userData for event callback * fix(bindings): json message serialization * fix(bindings): add messageHash to the event callback * fix(bindings): add meta field * refactor(bindings): simplify error handling * fix: handle undefined keys --- library/events/json_error_event.nim | 18 ---- library/events/json_message_event.nim | 86 ++++++++++++++++--- library/libwaku.nim | 57 ++++++------ library/waku_thread/config.nim | 79 +++++++++-------- .../requests/node_lifecycle_request.nim | 14 +-- library/waku_thread/waku_thread.nim | 3 +- 6 files changed, 149 insertions(+), 108 deletions(-) delete mode 100644 library/events/json_error_event.nim diff --git a/library/events/json_error_event.nim b/library/events/json_error_event.nim deleted file mode 100644 index 639a5b670e..0000000000 --- a/library/events/json_error_event.nim +++ /dev/null @@ -1,18 +0,0 @@ - -import - std/json -import - ./json_base_event - -type JsonErrorEvent* = ref object of JsonEvent - message*: string - -proc new*(T: type JsonErrorEvent, - message: string): T = - - return JsonErrorEvent( - eventType: "error", - message: message) - -method `$`*(jsonError: JsonErrorEvent): string {.raises: [].}= - $( %* jsonError ) \ No newline at end of file diff --git a/library/events/json_message_event.nim b/library/events/json_message_event.nim index 826291df02..459a44213a 100644 --- a/library/events/json_message_event.nim +++ b/library/events/json_message_event.nim @@ -1,16 +1,63 @@ import - std/json + system, + std/[json,sequtils] import + stew/[byteutils,results] +import + ../../waku/common/base64, + ../../waku/waku_core/message, ../../waku/waku_core/message/message, ./json_base_event -type JsonMessage = ref object - # https://rfc.vac.dev/spec/36/#jsonmessage-type - payload: string - contentTopic: string - version: uint - timestamp: int64 +type + JsonMessage* = ref object + # https://rfc.vac.dev/spec/36/#jsonmessage-type + payload*: Base64String + contentTopic*: string + version*: uint + timestamp*: int64 + ephemeral*: bool + meta*: Base64String + proof*: Base64String + +func fromJsonNode*(T: type JsonMessage, jsonContent: JsonNode): JsonMessage = + # Visit https://rfc.vac.dev/spec/14/ for further details + JsonMessage( + payload: Base64String(jsonContent["payload"].getStr()), + contentTopic: jsonContent["contentTopic"].getStr(), + version: uint32(jsonContent{"version"}.getInt()), + timestamp: int64(jsonContent{"timestamp"}.getBiggestInt()), + ephemeral: jsonContent{"ephemeral"}.getBool(), + meta: Base64String(jsonContent{"meta"}.getStr()), + proof: Base64String(jsonContent{"proof"}.getStr()) + ) + +proc toWakuMessage*(self: JsonMessage): Result[WakuMessage, string] = + let payload = base64.decode(self.payload).valueOr: + return err("invalid payload format: " & error) + + let meta = base64.decode(self.meta).valueOr: + return err("invalid meta format: " & error) + + let proof = base64.decode(self.proof).valueOr: + return err("invalid proof format: " & error) + + ok(WakuMessage( + payload: payload, + meta: meta, + contentTopic: self.contentTopic, + version: uint32(self.version), + timestamp: self.timestamp, + ephemeral: self.ephemeral, + proof: proof, + )) + +proc `%`*(value: Base64String): JsonNode = + %(value.string) + +proc `%`*(value: WakuMessageHash): JsonNode = + %(to0xHex(value)) type JsonMessageEvent* = ref object of JsonEvent pubsubTopic*: string @@ -23,18 +70,33 @@ proc new*(T: type JsonMessageEvent, # Returns a WakuMessage event as indicated in # https://rfc.vac.dev/spec/36/#jsonmessageevent-type - var payload = newString(len(msg.payload)) - copyMem(addr payload[0], unsafeAddr msg.payload[0], len(msg.payload)) + var payload = newSeq[byte](len(msg.payload)) + if len(msg.payload) != 0: + copyMem(addr payload[0], unsafeAddr msg.payload[0], len(msg.payload)) + + var meta = newSeq[byte](len(msg.meta)) + if len(msg.meta) != 0: + copyMem(addr meta[0], unsafeAddr msg.meta[0], len(msg.meta)) + + var proof = newSeq[byte](len(msg.proof)) + if len(msg.proof) != 0: + copyMem(addr proof[0], unsafeAddr msg.proof[0], len(msg.proof)) + + let msgHash = computeMessageHash(pubSubTopic, msg) + let msgHashHex = to0xHex(msgHash) return JsonMessageEvent( eventType: "message", pubSubTopic: pubSubTopic, - messageId: "TODO", + messageId: msgHashHex, wakuMessage: JsonMessage( - payload: payload, + payload: base64.encode(payload), contentTopic: msg.contentTopic, version: msg.version, - timestamp: int64(msg.timestamp) + timestamp: int64(msg.timestamp), + ephemeral: msg.ephemeral, + meta: base64.encode(meta), + proof: base64.encode(proof), ) ) diff --git a/library/libwaku.nim b/library/libwaku.nim index 976948bff2..3ef27f0d31 100644 --- a/library/libwaku.nim +++ b/library/libwaku.nim @@ -9,10 +9,12 @@ import chronicles, chronos import + ../../waku/common/base64, ../../waku/waku_core/message/message, ../../waku/node/waku_node, ../../waku/waku_core/topics/pubsub_topic, ../../../waku/waku_relay/protocol, + ./events/json_base_event, ./events/json_message_event, ./waku_thread/waku_thread, ./waku_thread/inter_thread_communication/requests/node_lifecycle_request, @@ -43,16 +45,22 @@ const RET_MISSING_CALLBACK: cint = 2 proc relayEventCallback(ctx: ptr Context): WakuRelayHandler = return proc (pubsubTopic: PubsubTopic, msg: WakuMessage): Future[system.void]{.async.} = # Callback that hadles the Waku Relay events. i.e. messages or errors. - if not isNil(ctx[].eventCallback): - try: - let event = $JsonMessageEvent.new(pubsubTopic, msg) - cast[WakuCallBack](ctx[].eventCallback)(RET_OK, unsafeAddr event[0], cast[csize_t](len(event)), nil) - except Exception,CatchableError: - let msg = "Exception when calling 'eventCallBack': " & - getCurrentExceptionMsg() - cast[WakuCallBack](ctx[].eventCallback)(RET_ERR, unsafeAddr msg[0], cast[csize_t](len(msg)), nil) - else: + if isNil(ctx[].eventCallback): error "eventCallback is nil" + return + + if isNil(ctx[].eventUserData): + error "eventUserData is nil" + return + + try: + let event = $JsonMessageEvent.new(pubsubTopic, msg) + cast[WakuCallBack](ctx[].eventCallback)(RET_OK, unsafeAddr event[0], cast[csize_t](len(event)), ctx[].eventUserData) + except Exception,CatchableError: + let msg = "Exception when calling 'eventCallBack': " & + getCurrentExceptionMsg() + cast[WakuCallBack](ctx[].eventCallback)(RET_ERR, unsafeAddr msg[0], cast[csize_t](len(msg)), ctx[].eventUserData) + ### End of not-exported components ################################################################################ @@ -106,8 +114,10 @@ proc waku_version(ctx: ptr Context, return RET_OK proc waku_set_event_callback(ctx: ptr Context, - callback: WakuCallBack) {.dynlib, exportc.} = + callback: WakuCallBack, + userData: pointer) {.dynlib, exportc.} = ctx[].eventCallback = cast[pointer](callback) + ctx[].eventUserData = userData proc waku_content_topic(ctx: ptr Context, appName: cstring, @@ -186,33 +196,20 @@ proc waku_relay_publish(ctx: ptr Context, return RET_MISSING_CALLBACK let jwm = jsonWakuMessage.alloc() - var jsonContent:JsonNode + var jsonMessage:JsonMessage try: - jsonContent = parseJson($jwm) + let jsonContent = parseJson($jwm) + jsonMessage = JsonMessage.fromJsonNode(jsonContent) except JsonParsingError: deallocShared(jwm) let msg = fmt"Error parsing json message: {getCurrentExceptionMsg()}" callback(RET_ERR, unsafeAddr msg[0], cast[csize_t](len(msg)), userData) return RET_ERR + finally: + deallocShared(jwm) - deallocShared(jwm) - - var wakuMessage: WakuMessage - try: - var version = 0'u32 - if jsonContent.hasKey("version"): - version = (uint32) jsonContent["version"].getInt() - - wakuMessage = WakuMessage( - # Visit https://rfc.vac.dev/spec/14/ for further details - payload: jsonContent["payload"].getStr().toSeq().mapIt(byte (it)), - contentTopic: $jsonContent["content_topic"].getStr(), - version: version, - timestamp: getTime().toUnix(), - ephemeral: false - ) - except KeyError: - let msg = fmt"Problem building the WakuMessage: {getCurrentExceptionMsg()}" + let wakuMessage = jsonMessage.toWakuMessage().valueOr: + let msg = fmt"Problem building the WakuMessage: {error}" callback(RET_ERR, unsafeAddr msg[0], cast[csize_t](len(msg)), userData) return RET_ERR diff --git a/library/waku_thread/config.nim b/library/waku_thread/config.nim index b0565ef5fa..ad182aeaa4 100644 --- a/library/waku_thread/config.nim +++ b/library/waku_thread/config.nim @@ -10,18 +10,18 @@ import ../../waku/common/utils/nat, ../../waku/node/waku_node, ../../waku/node/config, - ../events/[json_error_event,json_base_event] + ../events/json_base_event proc parsePrivateKey(jsonNode: JsonNode, privateKey: var PrivateKey, - jsonResp: var JsonEvent): bool = + errorResp: var string): bool = - if not jsonNode.contains("key"): + if not jsonNode.contains("key") or jsonNode["key"].kind == JsonNodeKind.JNull: privateKey = PrivateKey.random(Secp256k1, newRng()[]).tryGet() return true if jsonNode["key"].kind != JsonNodeKind.JString: - jsonResp = JsonErrorEvent.new("The node key should be a string."); + errorResp = "The node key should be a string." return false let key = jsonNode["key"].getStr() @@ -31,21 +31,21 @@ proc parsePrivateKey(jsonNode: JsonNode, privateKey = crypto.PrivateKey(scheme: Secp256k1, skkey: skPrivKey) except CatchableError: let msg = "Invalid node key: " & getCurrentExceptionMsg() - jsonResp = JsonErrorEvent.new(msg) + errorResp = msg return false return true proc parseListenAddr(jsonNode: JsonNode, listenAddr: var IpAddress, - jsonResp: var JsonEvent): bool = + errorResp: var string): bool = if not jsonNode.contains("host"): - jsonResp = JsonErrorEvent.new("host attribute is required") + errorResp = "host attribute is required" return false if jsonNode["host"].kind != JsonNodeKind.JString: - jsonResp = JsonErrorEvent.new("The node host should be a string."); + errorResp = "The node host should be a string." return false let host = jsonNode["host"].getStr() @@ -54,21 +54,21 @@ proc parseListenAddr(jsonNode: JsonNode, listenAddr = parseIpAddress(host) except CatchableError: let msg = "Invalid host IP address: " & getCurrentExceptionMsg() - jsonResp = JsonErrorEvent.new(msg) + errorResp = msg return false return true proc parsePort(jsonNode: JsonNode, port: var int, - jsonResp: var JsonEvent): bool = + errorResp: var string): bool = if not jsonNode.contains("port"): - jsonResp = JsonErrorEvent.new("port attribute is required") + errorResp = "port attribute is required" return false if jsonNode["port"].kind != JsonNodeKind.JInt: - jsonResp = JsonErrorEvent.new("The node port should be an integer."); + errorResp = "The node port should be an integer." return false port = jsonNode["port"].getInt() @@ -77,14 +77,14 @@ proc parsePort(jsonNode: JsonNode, proc parseRelay(jsonNode: JsonNode, relay: var bool, - jsonResp: var JsonEvent): bool = + errorResp: var string): bool = if not jsonNode.contains("relay"): - jsonResp = JsonErrorEvent.new("relay attribute is required") + errorResp = "relay attribute is required" return false if jsonNode["relay"].kind != JsonNodeKind.JBool: - jsonResp = JsonErrorEvent.new("The relay config param should be a boolean"); + errorResp = "The relay config param should be a boolean" return false relay = jsonNode["relay"].getBool() @@ -99,7 +99,7 @@ proc parseStore(jsonNode: JsonNode, storeVacuum: var bool, storeDbMigration: var bool, storeMaxNumDbConnections: var int, - jsonResp: var JsonEvent): bool = + errorResp: var string): bool = if not jsonNode.contains("store"): ## the store parameter is not required. By default is is disabled @@ -107,49 +107,49 @@ proc parseStore(jsonNode: JsonNode, return true if jsonNode["store"].kind != JsonNodeKind.JBool: - jsonResp = JsonErrorEvent.new("The store config param should be a boolean"); + errorResp = "The store config param should be a boolean" return false store = jsonNode["store"].getBool() if jsonNode.contains("storeNode"): if jsonNode["storeNode"].kind != JsonNodeKind.JString: - jsonResp = JsonErrorEvent.new("The storeNode config param should be a string"); + errorResp = "The storeNode config param should be a string" return false storeNode = jsonNode["storeNode"].getStr() if jsonNode.contains("storeRetentionPolicy"): if jsonNode["storeRetentionPolicy"].kind != JsonNodeKind.JString: - jsonResp = JsonErrorEvent.new("The storeRetentionPolicy config param should be a string"); + errorResp = "The storeRetentionPolicy config param should be a string" return false storeRetentionPolicy = jsonNode["storeRetentionPolicy"].getStr() if jsonNode.contains("storeDbUrl"): if jsonNode["storeDbUrl"].kind != JsonNodeKind.JString: - jsonResp = JsonErrorEvent.new("The storeDbUrl config param should be a string"); + errorResp = "The storeDbUrl config param should be a string" return false storeDbUrl = jsonNode["storeDbUrl"].getStr() if jsonNode.contains("storeVacuum"): if jsonNode["storeVacuum"].kind != JsonNodeKind.JBool: - jsonResp = JsonErrorEvent.new("The storeVacuum config param should be a bool"); + errorResp = "The storeVacuum config param should be a bool" return false storeVacuum = jsonNode["storeVacuum"].getBool() if jsonNode.contains("storeDbMigration"): if jsonNode["storeDbMigration"].kind != JsonNodeKind.JBool: - jsonResp = JsonErrorEvent.new("The storeDbMigration config param should be a bool"); + errorResp = "The storeDbMigration config param should be a bool" return false storeDbMigration = jsonNode["storeDbMigration"].getBool() if jsonNode.contains("storeMaxNumDbConnections"): if jsonNode["storeMaxNumDbConnections"].kind != JsonNodeKind.JInt: - jsonResp = JsonErrorEvent.new("The storeMaxNumDbConnections config param should be an int"); + errorResp = "The storeMaxNumDbConnections config param should be an int" return false storeMaxNumDbConnections = jsonNode["storeMaxNumDbConnections"].getInt() @@ -175,51 +175,51 @@ proc parseConfig*(configNodeJson: string, storeVacuum: var bool, storeDbMigration: var bool, storeMaxNumDbConnections: var int, - jsonResp: var JsonEvent): bool {.raises: [].} = + errorResp: var string): bool {.raises: [].} = if configNodeJson.len == 0: - jsonResp = JsonErrorEvent.new("The configNodeJson is empty") + errorResp = "The configNodeJson is empty" return false var jsonNode: JsonNode try: jsonNode = parseJson(configNodeJson) except Exception, IOError, JsonParsingError: - jsonResp = JsonErrorEvent.new("Exception: " & getCurrentExceptionMsg()) + errorResp = "Exception: " & getCurrentExceptionMsg() return false # key try: - if not parsePrivateKey(jsonNode, privateKey, jsonResp): + if not parsePrivateKey(jsonNode, privateKey, errorResp): return false except Exception, KeyError: - jsonResp = JsonErrorEvent.new("Exception calling parsePrivateKey: " & getCurrentExceptionMsg()) + errorResp = "Exception calling parsePrivateKey: " & getCurrentExceptionMsg() return false # listenAddr var listenAddr: IpAddress try: listenAddr = parseIpAddress("127.0.0.1") - if not parseListenAddr(jsonNode, listenAddr, jsonResp): + if not parseListenAddr(jsonNode, listenAddr, errorResp): return false except Exception, ValueError: - jsonResp = JsonErrorEvent.new("Exception calling parseIpAddress: " & getCurrentExceptionMsg()) + errorResp = "Exception calling parseIpAddress: " & getCurrentExceptionMsg() return false # port var port = 0 try: - if not parsePort(jsonNode, port, jsonResp): + if not parsePort(jsonNode, port, errorResp): return false except Exception, ValueError: - jsonResp = JsonErrorEvent.new("Exception calling parsePort: " & getCurrentExceptionMsg()) + errorResp = "Exception calling parsePort: " & getCurrentExceptionMsg() return false let natRes = setupNat("any", clientId, Port(uint16(port)), Port(uint16(port))) if natRes.isErr(): - jsonResp = JsonErrorEvent.new("failed to setup NAT: " & $natRes.error) + errorResp = "failed to setup NAT: " & $natRes.error return false let (extIp, extTcpPort, _) = natRes.get() @@ -231,26 +231,26 @@ proc parseConfig*(configNodeJson: string, # relay try: - if not parseRelay(jsonNode, relay, jsonResp): + if not parseRelay(jsonNode, relay, errorResp): return false except Exception, KeyError: - jsonResp = JsonErrorEvent.new("Exception calling parseRelay: " & getCurrentExceptionMsg()) + errorResp = "Exception calling parseRelay: " & getCurrentExceptionMsg() return false # topics try: parseTopics(jsonNode, topics) except Exception, KeyError: - jsonResp = JsonErrorEvent.new("Exception calling parseTopics: " & getCurrentExceptionMsg()) + errorResp = "Exception calling parseTopics: " & getCurrentExceptionMsg() return false # store try: if not parseStore(jsonNode, store, storeNode, storeRetentionPolicy, storeDbUrl, - storeVacuum, storeDbMigration, storeMaxNumDbConnections, jsonResp): + storeVacuum, storeDbMigration, storeMaxNumDbConnections, errorResp): return false except Exception, KeyError: - jsonResp = JsonErrorEvent.new("Exception calling parseStore: " & getCurrentExceptionMsg()) + errorResp = "Exception calling parseStore: " & getCurrentExceptionMsg() return false let wakuFlags = CapabilitiesBitfield.init( @@ -268,8 +268,7 @@ proc parseConfig*(configNodeJson: string, wakuFlags = some(wakuFlags)) if netConfigRes.isErr(): - let msg = "Error creating NetConfig: " & $netConfigRes.error - jsonResp = JsonErrorEvent.new(msg) + errorResp = "Error creating NetConfig: " & $netConfigRes.error return false netConfig = netConfigRes.value diff --git a/library/waku_thread/inter_thread_communication/requests/node_lifecycle_request.nim b/library/waku_thread/inter_thread_communication/requests/node_lifecycle_request.nim index 3fa1dd92ff..d6d3750da5 100644 --- a/library/waku_thread/inter_thread_communication/requests/node_lifecycle_request.nim +++ b/library/waku_thread/inter_thread_communication/requests/node_lifecycle_request.nim @@ -24,7 +24,7 @@ import ../../../../waku/waku_archive/retention_policy, ../../../../waku/waku_relay/protocol, ../../../../waku/waku_store, - ../../../events/[json_error_event,json_message_event,json_base_event], + ../../../events/[json_message_event,json_base_event], ../../../alloc, ../../config @@ -122,7 +122,7 @@ proc createNode(configJson: cstring): var storeDbMigration: bool var storeMaxNumDbConnections: int - var jsonResp: JsonEvent + var errorResp: string try: if not parseConfig($configJson, @@ -137,8 +137,8 @@ proc createNode(configJson: cstring): storeVacuum, storeDbMigration, storeMaxNumDbConnections, - jsonResp): - return err($jsonResp) + errorResp): + return err(errorResp) except Exception: return err("exception calling parseConfig: " & getCurrentExceptionMsg()) @@ -158,13 +158,13 @@ proc createNode(configJson: cstring): let addShardedTopics = enrBuilder.withShardedTopics(topics) if addShardedTopics.isErr(): let msg = "Error setting shared topics: " & $addShardedTopics.error - return err($JsonErrorEvent.new(msg)) + return err(msg) let recordRes = enrBuilder.build() let record = if recordRes.isErr(): let msg = "Error building enr record: " & $recordRes.error - return err($JsonErrorEvent.new(msg)) + return err(msg) else: recordRes.get() @@ -183,7 +183,7 @@ proc createNode(configJson: cstring): let wakuNodeRes = builder.build() if wakuNodeRes.isErr(): let errorMsg = "failed to create waku node instance: " & wakuNodeRes.error - return err($JsonErrorEvent.new(errorMsg)) + return err(errorMsg) var newNode = wakuNodeRes.get() diff --git a/library/waku_thread/waku_thread.nim b/library/waku_thread/waku_thread.nim index d69c7099ee..14680b5725 100644 --- a/library/waku_thread/waku_thread.nim +++ b/library/waku_thread/waku_thread.nim @@ -14,7 +14,7 @@ import stew/shims/net import ../../../waku/node/waku_node, - ../events/[json_error_event,json_message_event,json_base_event], + ../events/[json_message_event,json_base_event], ./inter_thread_communication/waku_thread_request, ./inter_thread_communication/waku_thread_response @@ -27,6 +27,7 @@ type respSignal: ThreadSignalPtr userData*: pointer eventCallback*: pointer + eventUserdata*: pointer # To control when the thread is running var running: Atomic[bool] From 7aea145efe37dd3b8e5d623807016b1c82e97695 Mon Sep 17 00:00:00 2001 From: Ivan FB <128452529+Ivansete-status@users.noreply.github.com> Date: Wed, 21 Feb 2024 12:06:05 +0100 Subject: [PATCH 239/274] chore: bindings return multiaddress array (#2461) * waku_example.c: adapt signature to new parameter 'void* userData' * libwaku: add new DEBUG request handler to retrieve the list of listened multiaddresses * waku_example.c: use example the new 'waku_listen_addresses' * add debug_node_request.nim file --- examples/cbindings/waku_example.c | 12 ++--- library/libwaku.h | 4 ++ library/libwaku.nim | 22 ++++++++++ .../requests/debug_node_request.nim | 44 +++++++++++++++++++ .../waku_thread_request.nim | 6 ++- 5 files changed, 82 insertions(+), 6 deletions(-) create mode 100644 library/waku_thread/inter_thread_communication/requests/debug_node_request.nim diff --git a/examples/cbindings/waku_example.c b/examples/cbindings/waku_example.c index 7053dd71c7..67e1bf277f 100644 --- a/examples/cbindings/waku_example.c +++ b/examples/cbindings/waku_example.c @@ -91,7 +91,7 @@ static error_t parse_opt(int key, char *arg, struct argp_state *state) { static struct argp argp = { options, parse_opt, args_doc, doc, 0, 0, 0 }; -void event_handler(int callerRet, const char* msg, size_t len) { +void event_handler(int callerRet, const char* msg, size_t len, void* userData) { if (callerRet == RET_ERR) { printf("Error: %s\n", msg); exit(1); @@ -102,7 +102,7 @@ void event_handler(int callerRet, const char* msg, size_t len) { } char* contentTopic = NULL; -void handle_content_topic(int callerRet, const char* msg, size_t len) { +void handle_content_topic(int callerRet, const char* msg, size_t len, void* userData) { if (contentTopic != NULL) { free(contentTopic); } @@ -112,7 +112,7 @@ void handle_content_topic(int callerRet, const char* msg, size_t len) { } char* publishResponse = NULL; -void handle_publish_ok(int callerRet, const char* msg, size_t len) { +void handle_publish_ok(int callerRet, const char* msg, size_t len, void* userData) { printf("Publish Ok: %s %lu\n", msg, len); if (publishResponse != NULL) { @@ -159,11 +159,11 @@ void show_help_and_exit() { exit(1); } -void print_default_pubsub_topic(int callerRet, const char* msg, size_t len) { +void print_default_pubsub_topic(int callerRet, const char* msg, size_t len, void* userData) { printf("Default pubsub topic: %s\n", msg); } -void print_waku_version(int callerRet, const char* msg, size_t len) { +void print_waku_version(int callerRet, const char* msg, size_t len, void* userData) { printf("Git Version: %s\n", msg); } @@ -297,6 +297,8 @@ int main(int argc, char** argv) { waku_set_event_callback(ctx, event_handler, userData); waku_start(ctx, event_handler, userData); + waku_listen_addresses(ctx, event_handler, userData); + printf("Establishing connection with: %s\n", cfgNode.peers); WAKU_CALL( waku_connect(ctx, diff --git a/library/libwaku.h b/library/libwaku.h index 4a30a8ad59..1dc7cf0aed 100644 --- a/library/libwaku.h +++ b/library/libwaku.h @@ -83,6 +83,10 @@ int waku_connect(void* ctx, WakuCallBack callback, void* userData); +int waku_listen_addresses(void* ctx, + WakuCallBack callback, + void* userData); + #ifdef __cplusplus } #endif diff --git a/library/libwaku.nim b/library/libwaku.nim index 3ef27f0d31..b1c43a6481 100644 --- a/library/libwaku.nim +++ b/library/libwaku.nim @@ -21,6 +21,7 @@ import ./waku_thread/inter_thread_communication/requests/peer_manager_request, ./waku_thread/inter_thread_communication/requests/protocols/relay_request, ./waku_thread/inter_thread_communication/requests/protocols/store_request, + ./waku_thread/inter_thread_communication/requests/debug_node_request, ./waku_thread/inter_thread_communication/waku_thread_request, ./alloc, ./callback @@ -353,5 +354,26 @@ proc waku_store_query(ctx: ptr Context, return RET_OK +proc waku_listen_addresses(ctx: ptr Context, + callback: WakuCallBack, + userData: pointer): cint + {.dynlib, exportc.} = + + ctx[].userData = userData + + let connRes = waku_thread.sendRequestToWakuThread( + ctx, + RequestType.DEBUG, + DebugNodeRequest.createShared( + DebugNodeMsgType.RETRIEVE_LISTENING_ADDRESSES)) + if connRes.isErr(): + let msg = $connRes.error + callback(RET_ERR, unsafeAddr msg[0], cast[csize_t](len(msg)), userData) + return RET_ERR + else: + let msg = $connRes.value + callback(RET_OK, unsafeAddr msg[0], cast[csize_t](len(msg)), userData) + return RET_OK + ### End of exported procs ################################################################################ diff --git a/library/waku_thread/inter_thread_communication/requests/debug_node_request.nim b/library/waku_thread/inter_thread_communication/requests/debug_node_request.nim new file mode 100644 index 0000000000..b0a759882f --- /dev/null +++ b/library/waku_thread/inter_thread_communication/requests/debug_node_request.nim @@ -0,0 +1,44 @@ + +import + std/[options,sequtils,strutils,json] +import + chronicles, + chronos, + stew/results, + stew/shims/net +import + ../../../../waku/node/waku_node, + ../../../alloc + +type + DebugNodeMsgType* = enum + RETRIEVE_LISTENING_ADDRESSES + +type + DebugNodeRequest* = object + operation: DebugNodeMsgType + +proc createShared*(T: type DebugNodeRequest, + op: DebugNodeMsgType): ptr type T = + + var ret = createShared(T) + ret[].operation = op + return ret + +proc destroyShared(self: ptr DebugNodeRequest) = + deallocShared(self) + +proc getMultiaddresses(node: WakuNode): seq[string] = + return node.info().listenAddresses + +proc process*(self: ptr DebugNodeRequest, + node: WakuNode): Future[Result[string, string]] {.async.} = + + defer: destroyShared(self) + + case self.operation: + of RETRIEVE_LISTENING_ADDRESSES: + return ok($( %* node.getMultiaddresses())) + + return err("unsupported operation in DebugNodeRequest") + diff --git a/library/waku_thread/inter_thread_communication/waku_thread_request.nim b/library/waku_thread/inter_thread_communication/waku_thread_request.nim index a38c09dba3..4113e5d209 100644 --- a/library/waku_thread/inter_thread_communication/waku_thread_request.nim +++ b/library/waku_thread/inter_thread_communication/waku_thread_request.nim @@ -13,7 +13,8 @@ import ./requests/node_lifecycle_request, ./requests/peer_manager_request, ./requests/protocols/relay_request, - ./requests/protocols/store_request + ./requests/protocols/store_request, + ./requests/debug_node_request type RequestType* {.pure.} = enum @@ -21,6 +22,7 @@ type PEER_MANAGER, RELAY, STORE, + DEBUG, type InterThreadRequest* = object @@ -54,6 +56,8 @@ proc process*(T: type InterThreadRequest, cast[ptr RelayRequest](request[].reqContent).process(node) of STORE: cast[ptr StoreRequest](request[].reqContent).process(node) + of DEBUG: + cast[ptr DebugNodeRequest](request[].reqContent).process(node[]) return await retFut From f6332ac646b8f991260570a67084937001c78f73 Mon Sep 17 00:00:00 2001 From: Aaryamann Challani <43716372+rymnc@users.noreply.github.com> Date: Thu, 22 Feb 2024 16:59:13 +0530 Subject: [PATCH 240/274] chore(rln-relay): use anvil instead of ganache in onchain tests (#2449) * chore(rln-relay): use anvil instead of ganache in onchain tests * fix: incl rustup in makefile --- Makefile | 17 ++++- scripts/install_anvil.sh | 14 ++++ .../test_rln_group_manager_onchain.nim | 70 +++++++++++-------- 3 files changed, 70 insertions(+), 31 deletions(-) create mode 100755 scripts/install_anvil.sh diff --git a/Makefile b/Makefile index c578efc286..9765de9007 100644 --- a/Makefile +++ b/Makefile @@ -83,6 +83,20 @@ endif ################## .PHONY: deps libbacktrace +rustup: +ifeq (, $(shell which cargo)) +# Install Rustup if it's not installed +# -y: Assume "yes" for all prompts +# --default-toolchain stable: Install the stable toolchain + curl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain stable +endif + +anvil: rustup +ifeq (, $(shell which anvil)) +# Install Anvil if it's not installed + ./scripts/install_anvil.sh +endif + deps: | deps-common nat-libs waku.nims @@ -166,7 +180,8 @@ testcommon: | build deps ########## .PHONY: testwaku wakunode2 testwakunode2 example2 chat2 chat2bridge -testwaku: | build deps librln +# install anvil only for the testwaku target +testwaku: | build deps anvil librln echo -e $(BUILD_MSG) "build/$@" && \ $(ENV_SCRIPT) nim test -d:os=$(shell uname) $(NIM_PARAMS) waku.nims diff --git a/scripts/install_anvil.sh b/scripts/install_anvil.sh new file mode 100755 index 0000000000..13d5f8dfdb --- /dev/null +++ b/scripts/install_anvil.sh @@ -0,0 +1,14 @@ +#!/usr/bin/env bash + +# Install Anvil + + +BASE_DIR="${XDG_CONFIG_HOME:-$HOME}" +FOUNDRY_DIR="${FOUNDRY_DIR-"$BASE_DIR/.foundry"}" +FOUNDRY_BIN_DIR="$FOUNDRY_DIR/bin" + +curl -L https://foundry.paradigm.xyz | bash +# Extract the source path from the download result +echo "foundryup_path: $FOUNDRY_BIN_DIR" +# run foundryup +$FOUNDRY_BIN_DIR/foundryup \ No newline at end of file diff --git a/tests/waku_rln_relay/test_rln_group_manager_onchain.nim b/tests/waku_rln_relay/test_rln_group_manager_onchain.nim index 9087aef5fb..63efbf7439 100644 --- a/tests/waku_rln_relay/test_rln_group_manager_onchain.nim +++ b/tests/waku_rln_relay/test_rln_group_manager_onchain.nim @@ -6,7 +6,7 @@ else: {.push raises: [].} import - std/[options, osproc, sequtils, deques, streams, strutils, tempfiles], + std/[options, os, osproc, sequtils, deques, streams, strutils, tempfiles], stew/[results, byteutils], stew/shims/net as stewNet, testutils/unittests, @@ -38,7 +38,7 @@ proc generateCredentials(rlnInstance: ptr RLN, n: int): seq[IdentityCredential] return credentials # a util function used for testing purposes -# it deploys membership contract on Ganache (or any Eth client available on EthClient address) +# it deploys membership contract on Anvil (or any Eth client available on EthClient address) # must be edited if used for a different contract than membership contract # proc uploadRLNContract*(ethClientAddress: string): Future[Address] {.async.} = @@ -117,47 +117,57 @@ proc createEthAccount(): Future[(keys.PrivateKey, Address)] {.async.} = return (pk, acc) -# Runs Ganache daemon -proc runGanache(): Process = - # We run directly "node node_modules/ganache/dist/node/cli.js" rather than using "npx ganache", so that the daemon does not spawn in a new child process. - # In this way, we can directly send a SIGINT signal to the corresponding PID to gracefully terminate Ganache without dealing with multiple processes. +proc getAnvilPath(): string = + var anvilPath = "" + if existsEnv("XDG_CONFIG_HOME"): + anvilPath = joinPath(anvilPath, os.getEnv("XDG_CONFIG_HOME", "")) + else: + anvilPath = joinPath(anvilPath, os.getEnv("HOME", "")) + anvilPath = joinPath(anvilPath, ".foundry/bin/anvil") + return $anvilPath + +# Runs Anvil daemon +proc runAnvil(): Process = # Passed options are # --port Port to listen on. - # --miner.blockGasLimit Sets the block gas limit in WEI. - # --wallet.defaultBalance The default account balance, specified in ether. - # See ganache documentation https://www.npmjs.com/package/ganache for more details + # --gas-limit Sets the block gas limit in WEI. + # --balance The default account balance, specified in ether. + # --chain-id Chain ID of the network. + # See anvil documentation https://book.getfoundry.sh/reference/anvil/ for more details try: - let runGanache = startProcess("npx", args = ["--yes", "ganache@7.9.0", "--port", "8540", "--miner.blockGasLimit", "300000000000000", "--wallet.defaultBalance", "10000"], options = {poUsePath}) - let ganachePID = runGanache.processID + let anvilPath = getAnvilPath() + debug "Anvil path", anvilPath + let runAnvil = startProcess(anvilPath, args = ["--port", "8540", "--gas-limit", "300000000000000", "--balance", "10000", "--chain-id", "1337"], options = {poUsePath}) + let anvilPID = runAnvil.processID - # We read stdout from Ganache to see when daemon is ready - var ganacheStartLog: string + # We read stdout from Anvil to see when daemon is ready + var anvilStartLog: string var cmdline: string while true: try: - if runGanache.outputstream.readLine(cmdline): - ganacheStartLog.add(cmdline) + if runAnvil.outputstream.readLine(cmdline): + anvilStartLog.add(cmdline) if cmdline.contains("Listening on 127.0.0.1:8540"): break except Exception, CatchableError: break - debug "Ganache daemon is running and ready", pid=ganachePID, startLog=ganacheStartLog - return runGanache + debug "Anvil daemon is running and ready", pid=anvilPID, startLog=anvilStartLog + return runAnvil except: # TODO: Fix "BareExcept" warning - error "Ganache daemon run failed", err = getCurrentExceptionMsg() + error "Anvil daemon run failed", err = getCurrentExceptionMsg() -# Stops Ganache daemon -proc stopGanache(runGanache: Process) {.used.} = +# Stops Anvil daemon +proc stopAnvil(runAnvil: Process) {.used.} = - let ganachePID = runGanache.processID + let anvilPID = runAnvil.processID # We wait the daemon to exit try: - # We terminate Ganache daemon by sending a SIGTERM signal to the runGanache PID to trigger RPC server termination and clean-up - discard startProcess("pkill", args = ["-f", "ganache"], options = {poUsePath}) - debug "Sent SIGTERM to Ganache", ganachePID=ganachePID + # We terminate Anvil daemon by sending a SIGTERM signal to the runAnvil PID to trigger RPC server termination and clean-up + kill(runAnvil) + debug "Sent SIGTERM to Anvil", anvilPID=anvilPID except: - error "Ganache daemon termination failed: ", err = getCurrentExceptionMsg() + error "Anvil daemon termination failed: ", err = getCurrentExceptionMsg() proc setup(): Future[OnchainGroupManager] {.async.} = let rlnInstanceRes = createRlnInstance(tree_path = genTempPath("rln_tree", "group_manager_onchain")) @@ -185,8 +195,8 @@ proc setup(): Future[OnchainGroupManager] {.async.} = return manager suite "Onchain group manager": - # We run Ganache - let runGanache {.used.} = runGanache() + # We run Anvil + let runAnvil {.used.} = runAnvil() asyncTest "should initialize successfully": let manager = await setup() @@ -692,8 +702,8 @@ suite "Onchain group manager": ################################ - ## Terminating/removing Ganache + ## Terminating/removing Anvil ################################ - # We stop Ganache daemon - stopGanache(runGanache) + # We stop Anvil daemon + stopAnvil(runAnvil) From d53052825954bb275e7f0f1000b7de1f9d345b32 Mon Sep 17 00:00:00 2001 From: Ivan FB <128452529+Ivansete-status@users.noreply.github.com> Date: Thu, 22 Feb 2024 16:55:37 +0100 Subject: [PATCH 241/274] refactor: new proc to foster different size retention policy implementations (#2463) * new proc to foster different size retention policy implementations The new proc, decreaseDatabaseSize, will have different implementations per each driver. For example, in future commits we will implement a size retention policy thanks to partitions management, in Postgres. * RetentionPolicy: use of new instead of init for ref object types * waku_archive: fix signatures in decreaseDatabaseSize methods * retention_policy_size: minor cleanup of comments and imports --- tests/waku_archive/test_retention_policy.nim | 6 +-- waku/waku_archive/driver.nim | 4 ++ .../postgres_driver/postgres_driver.nim | 34 +++++++++++++++ .../driver/queue_driver/queue_driver.nim | 5 +++ .../driver/sqlite_driver/sqlite_driver.nim | 34 +++++++++++++++ .../waku_archive/retention_policy/builder.nim | 6 +-- .../retention_policy_capacity.nim | 2 +- .../retention_policy_size.nim | 43 +++---------------- .../retention_policy_time.nim | 2 +- 9 files changed, 90 insertions(+), 46 deletions(-) diff --git a/tests/waku_archive/test_retention_policy.nim b/tests/waku_archive/test_retention_policy.nim index 5233d69240..582985950e 100644 --- a/tests/waku_archive/test_retention_policy.nim +++ b/tests/waku_archive/test_retention_policy.nim @@ -29,7 +29,7 @@ suite "Waku Archive - Retention policy": let driver = newSqliteArchiveDriver() - let retentionPolicy: RetentionPolicy = CapacityRetentionPolicy.init(capacity=capacity) + let retentionPolicy: RetentionPolicy = CapacityRetentionPolicy.new(capacity=capacity) var putFutures = newSeq[Future[ArchiveDriverResult[void]]]() ## When @@ -61,7 +61,7 @@ suite "Waku Archive - Retention policy": let driver = newSqliteArchiveDriver() - let retentionPolicy: RetentionPolicy = SizeRetentionPolicy.init(size=sizeLimit) + let retentionPolicy: RetentionPolicy = SizeRetentionPolicy.new(size=sizeLimit) var putFutures = newSeq[Future[ArchiveDriverResult[void]]]() # make sure that the db is empty to before test begins @@ -115,7 +115,7 @@ suite "Waku Archive - Retention policy": let driver = newSqliteArchiveDriver() - retentionPolicy: RetentionPolicy = CapacityRetentionPolicy.init(capacity=capacity) + retentionPolicy: RetentionPolicy = CapacityRetentionPolicy.new(capacity=capacity) let messages = @[ fakeWakuMessage(contentTopic=DefaultContentTopic, ts=ts(0)), diff --git a/waku/waku_archive/driver.nim b/waku/waku_archive/driver.nim index a315ea0b52..fb38266632 100644 --- a/waku/waku_archive/driver.nim +++ b/waku/waku_archive/driver.nim @@ -72,6 +72,10 @@ method deleteOldestMessagesNotWithinLimit*(driver: ArchiveDriver, limit: int): Future[ArchiveDriverResult[void]] {.base, async.} = discard +method decreaseDatabaseSize*(driver: ArchiveDriver, + targetSizeInBytes: int64): + Future[ArchiveDriverResult[void]] {.base, async.} = discard + method close*(driver: ArchiveDriver): Future[ArchiveDriverResult[void]] {.base, async.} = discard diff --git a/waku/waku_archive/driver/postgres_driver/postgres_driver.nim b/waku/waku_archive/driver/postgres_driver/postgres_driver.nim index f5adbfb2c4..443eb0f388 100644 --- a/waku/waku_archive/driver/postgres_driver/postgres_driver.nim +++ b/waku/waku_archive/driver/postgres_driver/postgres_driver.nim @@ -502,6 +502,40 @@ method deleteOldestMessagesNotWithinLimit*( return ok() +method decreaseDatabaseSize*(driver: PostgresDriver, + targetSizeInBytes: int64): + Future[ArchiveDriverResult[void]] {.async.} = + ## TODO: refactor this implementation and use partition management instead + ## To remove 20% of the outdated data from database + const DeleteLimit = 0.80 + + ## when db size overshoots the database limit, shread 20% of outdated messages + ## get size of database + let dbSize = (await driver.getDatabaseSize()).valueOr: + return err("failed to get database size: " & $error) + + ## database size in bytes + let totalSizeOfDB: int64 = int64(dbSize) + + if totalSizeOfDB < targetSizeInBytes: + return ok() + + ## to shread/delete messsges, get the total row/message count + let numMessages = (await driver.getMessagesCount()).valueOr: + return err("failed to get messages count: " & error) + + ## NOTE: Using SQLite vacuuming is done manually, we delete a percentage of rows + ## if vacumming is done automatically then we aim to check DB size periodially for efficient + ## retention policy implementation. + + ## 80% of the total messages are to be kept, delete others + let pageDeleteWindow = int(float(numMessages) * DeleteLimit) + + (await driver.deleteOldestMessagesNotWithinLimit(limit=pageDeleteWindow)).isOkOr: + return err("deleting oldest messages failed: " & error) + + return ok() + method close*(s: PostgresDriver): Future[ArchiveDriverResult[void]] {.async.} = ## Close the database connection diff --git a/waku/waku_archive/driver/queue_driver/queue_driver.nim b/waku/waku_archive/driver/queue_driver/queue_driver.nim index 9fd266e6d8..2db8a3d844 100644 --- a/waku/waku_archive/driver/queue_driver/queue_driver.nim +++ b/waku/waku_archive/driver/queue_driver/queue_driver.nim @@ -317,6 +317,11 @@ method deleteOldestMessagesNotWithinLimit*(driver: QueueDriver, # TODO: Implement this message_store method return err("interface method not implemented") +method decreaseDatabaseSize*(driver: QueueDriver, + targetSizeInBytes: int64): + Future[ArchiveDriverResult[void]] {.async.} = + return err("interface method not implemented") + method close*(driver: QueueDriver): Future[ArchiveDriverResult[void]] {.async.} = return ok() diff --git a/waku/waku_archive/driver/sqlite_driver/sqlite_driver.nim b/waku/waku_archive/driver/sqlite_driver/sqlite_driver.nim index 1d0cbc5bc5..88d1974efa 100644 --- a/waku/waku_archive/driver/sqlite_driver/sqlite_driver.nim +++ b/waku/waku_archive/driver/sqlite_driver/sqlite_driver.nim @@ -146,6 +146,40 @@ method deleteOldestMessagesNotWithinLimit*(s: SqliteDriver, Future[ArchiveDriverResult[void]] {.async.} = return s.db.deleteOldestMessagesNotWithinLimit(limit) +method decreaseDatabaseSize*(driver: SqliteDriver, + targetSizeInBytes: int64): + Future[ArchiveDriverResult[void]] {.async.} = + + ## To remove 20% of the outdated data from database + const DeleteLimit = 0.80 + + ## when db size overshoots the database limit, shread 20% of outdated messages + ## get size of database + let dbSize = (await driver.getDatabaseSize()).valueOr: + return err("failed to get database size: " & $error) + + ## database size in bytes + let totalSizeOfDB: int64 = int64(dbSize) + + if totalSizeOfDB < targetSizeInBytes: + return ok() + + ## to shread/delete messsges, get the total row/message count + let numMessages = (await driver.getMessagesCount()).valueOr: + return err("failed to get messages count: " & error) + + ## NOTE: Using SQLite vacuuming is done manually, we delete a percentage of rows + ## if vacumming is done automatically then we aim to check DB size periodially for efficient + ## retention policy implementation. + + ## 80% of the total messages are to be kept, delete others + let pageDeleteWindow = int(float(numMessages) * DeleteLimit) + + (await driver.deleteOldestMessagesNotWithinLimit(limit=pageDeleteWindow)).isOkOr: + return err("deleting oldest messages failed: " & error) + + return ok() + method close*(s: SqliteDriver): Future[ArchiveDriverResult[void]] {.async.} = ## Close the database connection diff --git a/waku/waku_archive/retention_policy/builder.nim b/waku/waku_archive/retention_policy/builder.nim index 0588eb4bbc..86cbf68a9e 100644 --- a/waku/waku_archive/retention_policy/builder.nim +++ b/waku/waku_archive/retention_policy/builder.nim @@ -39,7 +39,7 @@ proc new*(T: type RetentionPolicy, except ValueError: return err("invalid time retention policy argument") - let retPolicy: RetentionPolicy = TimeRetentionPolicy.init(retentionTimeSeconds) + let retPolicy: RetentionPolicy = TimeRetentionPolicy.new(retentionTimeSeconds) return ok(some(retPolicy)) elif policy == "capacity": @@ -49,7 +49,7 @@ proc new*(T: type RetentionPolicy, except ValueError: return err("invalid capacity retention policy argument") - let retPolicy: RetentionPolicy = CapacityRetentionPolicy.init(retentionCapacity) + let retPolicy: RetentionPolicy = CapacityRetentionPolicy.new(retentionCapacity) return ok(some(retPolicy)) elif policy == "size": @@ -85,7 +85,7 @@ proc new*(T: type RetentionPolicy, if sizeQuantity <= 0: return err("invalid size retention policy argument: a non-zero value is required") - let retPolicy: RetentionPolicy = SizeRetentionPolicy.init(sizeQuantity) + let retPolicy: RetentionPolicy = SizeRetentionPolicy.new(sizeQuantity) return ok(some(retPolicy)) else: diff --git a/waku/waku_archive/retention_policy/retention_policy_capacity.nim b/waku/waku_archive/retention_policy/retention_policy_capacity.nim index bb1d146cf1..b4d36e2db7 100644 --- a/waku/waku_archive/retention_policy/retention_policy_capacity.nim +++ b/waku/waku_archive/retention_policy/retention_policy_capacity.nim @@ -47,7 +47,7 @@ proc calculateOverflowWindow(capacity: int, overflow: float): int = proc calculateDeleteWindow(capacity: int, overflow: float): int = calculateOverflowWindow(capacity, overflow) div 2 -proc init*(T: type CapacityRetentionPolicy, capacity=DefaultCapacity): T = +proc new*(T: type CapacityRetentionPolicy, capacity=DefaultCapacity): T = let totalCapacity = calculateTotalCapacity(capacity, MaxOverflow) deleteWindow = calculateDeleteWindow(capacity, MaxOverflow) diff --git a/waku/waku_archive/retention_policy/retention_policy_size.nim b/waku/waku_archive/retention_policy/retention_policy_size.nim index 8b512230b2..21bb152df0 100644 --- a/waku/waku_archive/retention_policy/retention_policy_size.nim +++ b/waku/waku_archive/retention_policy/retention_policy_size.nim @@ -4,11 +4,9 @@ else: {.push raises: [].} import - std/times, stew/results, chronicles, - chronos, - os + chronos import ../driver, ../retention_policy @@ -19,21 +17,11 @@ logScope: # default size is 30 GiB or 32212254720.0 in bytes const DefaultRetentionSize*: int64 = 32212254720 -# to remove 20% of the outdated data from database -const DeleteLimit = 0.80 - type - # SizeRetentionPolicy implements auto delete as follows: - # - sizeLimit is the size in bytes the database can grow upto - # to reduce the size of the databases, remove the rows/number-of-messages - # DeleteLimit is the total number of messages to delete beyond this limit - # when the database size crosses the sizeLimit, then only a fraction of messages are kept, - # rest of the outdated message are deleted using deleteOldestMessagesNotWithinLimit(), - # upon deletion process the fragmented space is retrieve back using Vacuum process. SizeRetentionPolicy* = ref object of RetentionPolicy - sizeLimit: int64 + sizeLimit: int64 -proc init*(T: type SizeRetentionPolicy, size=DefaultRetentionSize): T = +proc new*(T: type SizeRetentionPolicy, size=DefaultRetentionSize): T = SizeRetentionPolicy( sizeLimit: size ) @@ -41,29 +29,8 @@ proc init*(T: type SizeRetentionPolicy, size=DefaultRetentionSize): T = method execute*(p: SizeRetentionPolicy, driver: ArchiveDriver): Future[RetentionPolicyResult[void]] {.async.} = - ## when db size overshoots the database limit, shread 20% of outdated messages - # get size of database - let dbSize = (await driver.getDatabaseSize()).valueOr: - return err("failed to get database size: " & $error) - - # database size in bytes - let totalSizeOfDB: int64 = int64(dbSize) - - if totalSizeOfDB < p.sizeLimit: - return ok() - - # to shread/delete messsges, get the total row/message count - let numMessages = (await driver.getMessagesCount()).valueOr: - return err("failed to get messages count: " & error) - - # NOTE: Using SQLite vacuuming is done manually, we delete a percentage of rows - # if vacumming is done automatically then we aim to check DB size periodially for efficient - # retention policy implementation. - - # 80% of the total messages are to be kept, delete others - let pageDeleteWindow = int(float(numMessages) * DeleteLimit) - (await driver.deleteOldestMessagesNotWithinLimit(limit=pageDeleteWindow)).isOkOr: - return err("deleting oldest messages failed: " & error) + (await driver.decreaseDatabaseSize(p.sizeLimit)).isOkOr: + return err("decreaseDatabaseSize failed: " & $error) return ok() diff --git a/waku/waku_archive/retention_policy/retention_policy_time.nim b/waku/waku_archive/retention_policy/retention_policy_time.nim index 27622f2e4d..caa47e8b65 100644 --- a/waku/waku_archive/retention_policy/retention_policy_time.nim +++ b/waku/waku_archive/retention_policy/retention_policy_time.nim @@ -24,7 +24,7 @@ type TimeRetentionPolicy* = ref object of RetentionPolicy retentionTime: chronos.Duration -proc init*(T: type TimeRetentionPolicy, retentionTime=DefaultRetentionTime): T = +proc new*(T: type TimeRetentionPolicy, retentionTime=DefaultRetentionTime): T = TimeRetentionPolicy( retentionTime: retentionTime.seconds ) From 216531b0ebb224258e0572d7a17b99753ac2bc28 Mon Sep 17 00:00:00 2001 From: gabrielmer <101006718+gabrielmer@users.noreply.github.com> Date: Thu, 22 Feb 2024 20:19:56 +0200 Subject: [PATCH 242/274] chore: bumping nim-libp2p after yamux timeout fix (#2468) --- vendor/nim-libp2p | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/nim-libp2p b/vendor/nim-libp2p index e0f70b7177..349496e40f 160000 --- a/vendor/nim-libp2p +++ b/vendor/nim-libp2p @@ -1 +1 @@ -Subproject commit e0f70b71778bf9613421261b22a56499c913f806 +Subproject commit 349496e40fcae9f225c437662b5bbe3c6b6eb3af From a1d5cbd9a9017cb545c96d747d9b00aa608c0457 Mon Sep 17 00:00:00 2001 From: gabrielmer <101006718+gabrielmer@users.noreply.github.com> Date: Fri, 23 Feb 2024 16:25:13 +0200 Subject: [PATCH 243/274] chore: adding NIMFLAGS usage to readme (#2469) --- Makefile | 1 + README.md | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/Makefile b/Makefile index 9765de9007..c1745d535b 100644 --- a/Makefile +++ b/Makefile @@ -57,6 +57,7 @@ TARGET ?= prod ## Git version GIT_VERSION ?= $(shell git describe --abbrev=6 --always --tags) +## Compilation parameters. If defined in the CLI the assignments won't be executed NIM_PARAMS := $(NIM_PARAMS) -d:git_version=\"$(GIT_VERSION)\" ## Heaptracker options diff --git a/README.md b/README.md index 87c6c4c02d..a74db00a16 100644 --- a/README.md +++ b/README.md @@ -26,6 +26,10 @@ The standard developer tools, including a C compiler, GNU Make, Bash, and Git. M # You'll run `make update` after each `git pull` in the future to keep those submodules updated. make wakunode2 +# Build with custom compilation flags. Do not use NIM_PARAMS unless you know what you are doing. +# Replace with your own flags +make wakunode2 NIMFLAGS="-d:chronicles_colors:none -d:disableMarchNative" + # Run with DNS bootstrapping ./build/wakunode2 --dns-discovery --dns-discovery-url=DNS_BOOTSTRAP_NODE_URL From a4993005944741a4418ded35c8a0a37d8271bba6 Mon Sep 17 00:00:00 2001 From: Ivan FB <128452529+Ivansete-status@users.noreply.github.com> Date: Mon, 26 Feb 2024 16:48:05 +0100 Subject: [PATCH 244/274] chore(cbindings): cbindings rust simple libwaku integration example (#2089) --- .gitignore | 2 + examples/rust/Cargo.lock | 25 +++++++++ examples/rust/Cargo.toml | 9 +++ examples/rust/README.md | 6 ++ examples/rust/build.rs | 5 ++ examples/rust/src/main.rs | 114 ++++++++++++++++++++++++++++++++++++++ 6 files changed, 161 insertions(+) create mode 100644 examples/rust/Cargo.lock create mode 100644 examples/rust/Cargo.toml create mode 100644 examples/rust/README.md create mode 100644 examples/rust/build.rs create mode 100644 examples/rust/src/main.rs diff --git a/.gitignore b/.gitignore index bba92fab8c..7f69ad7419 100644 --- a/.gitignore +++ b/.gitignore @@ -57,6 +57,8 @@ nimbus-build-system.paths *.sqlite3-wal /examples/nodejs/build/ +/examples/rust/target/ + # Coverage coverage_html_report/ diff --git a/examples/rust/Cargo.lock b/examples/rust/Cargo.lock new file mode 100644 index 0000000000..a4fea40be4 --- /dev/null +++ b/examples/rust/Cargo.lock @@ -0,0 +1,25 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "cc" +version = "1.0.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" +dependencies = [ + "libc", +] + +[[package]] +name = "libc" +version = "0.2.148" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cdc71e17332e86d2e1d38c1f99edcb6288ee11b815fb1a4b049eaa2114d369b" + +[[package]] +name = "waku-rust-simple-example" +version = "0.1.0" +dependencies = [ + "cc", +] diff --git a/examples/rust/Cargo.toml b/examples/rust/Cargo.toml new file mode 100644 index 0000000000..c9ad9faa42 --- /dev/null +++ b/examples/rust/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "waku-rust-simple-example" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[build-dependencies] +cc = "1.0.52" diff --git a/examples/rust/README.md b/examples/rust/README.md new file mode 100644 index 0000000000..dc7bce305f --- /dev/null +++ b/examples/rust/README.md @@ -0,0 +1,6 @@ + +This represents a very simple example on how to integrate the `libwaku` library in Rust, and then, only a few `libwaku` functions are being wrapped. + +In [waku-rust-bindings](https://github.com/waku-org/waku-rust-bindings) you will find a complete Waku integration in Rust. + + diff --git a/examples/rust/build.rs b/examples/rust/build.rs new file mode 100644 index 0000000000..b0398c6ee5 --- /dev/null +++ b/examples/rust/build.rs @@ -0,0 +1,5 @@ + +fn main() { + println!("cargo:rustc-link-arg=-lwaku"); + println!("cargo:rustc-link-arg=-L../../build/"); +} diff --git a/examples/rust/src/main.rs b/examples/rust/src/main.rs new file mode 100644 index 0000000000..1580bfb4b9 --- /dev/null +++ b/examples/rust/src/main.rs @@ -0,0 +1,114 @@ + +use std::os::raw::{c_char, c_int, c_void}; +use std::{slice, thread, time}; +use std::cell::OnceCell; +use std::ffi::CString; + +pub type WakuCallback = + unsafe extern "C" fn( + c_int, + *const c_char, + usize, + *const c_void, + ); + +extern "C" { + pub fn waku_new( + config_json: *const u8, + cb: WakuCallback, + user_data: *const c_void, + ) -> *mut c_void; + + pub fn waku_version( + ctx: *const c_void, + cb: WakuCallback, + user_data: *const c_void, + ) -> c_int; + + pub fn waku_default_pubsub_topic( + ctx: *mut c_void, + cb: WakuCallback, + user_data: *const c_void, + ) -> *mut c_void; +} + +pub unsafe extern "C" fn trampoline( + return_val: c_int, + buffer: *const c_char, + buffer_len: usize, + data: *const c_void, +) where + C: FnMut(i32, &str), +{ + let closure = &mut *(data as *mut C); + + let buffer_utf8 = + String::from_utf8(slice::from_raw_parts(buffer as *mut u8, buffer_len) + .to_vec()) + .expect("valid utf8"); + + closure(return_val, &buffer_utf8); +} + +pub fn get_trampoline(_closure: &C) -> WakuCallback +where + C: FnMut(i32, &str), +{ + trampoline:: +} + +fn main() { + let config_json = "\ + { \ + \"host\": \"127.0.0.1\",\ + \"port\": 60000, \ + \"key\": \"0d714a1fada214dead6dc9c7274581ec20ff292451866e7d6d677dc818e8ccd2\", \ + \"relay\": true \ + }"; + + unsafe { + // Create the waku node + let closure = |ret: i32, data: &str| { + println!("Ret {ret}. Error creating waku node {data}"); + }; + let cb = get_trampoline(&closure); + let config_json_str = CString::new(config_json).unwrap(); + let ctx = waku_new( + config_json_str.as_ptr() as *const u8, + cb, + &closure as *const _ as *const c_void, + ); + + // Extracting the current waku version + let version: OnceCell = OnceCell::new(); + let closure = |ret: i32, data: &str| { + println!("version_closure. Ret: {ret}. Data: {data}"); + let _ = version.set(data.to_string()); + }; + let cb = get_trampoline(&closure); + let _ret = waku_version( + &ctx as *const _ as *const c_void, + cb, + &closure as *const _ as *const c_void, + ); + + // Extracting the default pubsub topic + let default_pubsub_topic: OnceCell = OnceCell::new(); + let closure = |_ret: i32, data: &str| { + let _ = default_pubsub_topic.set(data.to_string()); + }; + let cb = get_trampoline(&closure); + let _ret = waku_default_pubsub_topic( + ctx, + cb, + &closure as *const _ as *const c_void, + ); + + println!("Version: {}", version.get_or_init(|| unreachable!())); + println!("Default pubsubTopic: {}", default_pubsub_topic.get_or_init(|| unreachable!())); + } + + loop { + thread::sleep(time::Duration::from_millis(10000)); + } +} From 3f4f6d7e5be05aef1490ae086fec3a031da78b06 Mon Sep 17 00:00:00 2001 From: Alvaro Revuelta Date: Wed, 28 Feb 2024 17:19:20 +0100 Subject: [PATCH 245/274] chore: remove rln epoch hardcoding (#2483) --- apps/benchmarks/benchmarks.nim | 2 +- apps/chat2/chat2.nim | 2 + apps/chat2/config_chat2.nim | 5 +++ apps/networkmonitor/networkmonitor.nim | 3 ++ apps/networkmonitor/networkmonitor_config.nim | 10 +++++ apps/wakunode2/app.nim | 2 + apps/wakunode2/external_config.nim | 9 +++- apps/wakunode2/networks_config.nim | 9 +++- apps/wakunode2/wakunode2.nim | 11 ++++- tests/node/test_wakunode_relay_rln.nim | 13 +++--- .../rln_v2/test_rln_relay_v2_serde.nim | 2 +- tests/waku_rln_relay/test_waku_rln_relay.nim | 5 ++- .../test_wakunode_rln_relay.nim | 18 ++++++-- tests/wakunode_jsonrpc/test_jsonrpc_relay.nim | 2 + tests/wakunode_rest/test_rest_health.nim | 1 + tests/wakunode_rest/test_rest_relay.nim | 5 +++ waku/waku_rln_relay/constants.nim | 4 -- waku/waku_rln_relay/nonce_manager.nim | 4 +- waku/waku_rln_relay/rln_relay.nim | 43 +++++++++++-------- 19 files changed, 107 insertions(+), 43 deletions(-) diff --git a/apps/benchmarks/benchmarks.nim b/apps/benchmarks/benchmarks.nim index 24c0119702..c3930aef9a 100644 --- a/apps/benchmarks/benchmarks.nim +++ b/apps/benchmarks/benchmarks.nim @@ -30,7 +30,7 @@ proc main(): Future[string] {.async, gcsafe.} = var proofVerTimes: seq[times.Duration] = @[] for i in 0 .. 50: var time = getTime() - let proof = manager.generateProof(data, getCurrentEpoch()).get() + let proof = manager.generateProof(data, default(Epoch)).get() proofGenTimes.add(getTime() - time) time = getTime() diff --git a/apps/chat2/chat2.nim b/apps/chat2/chat2.nim index 98e5842dbf..c03653650b 100644 --- a/apps/chat2/chat2.nim +++ b/apps/chat2/chat2.nim @@ -523,6 +523,7 @@ proc processInput(rfd: AsyncFD, rng: ref HmacDrbgContext) {.async.} = rlnRelayCredPath: conf.rlnRelayCredPath, rlnRelayCredPassword: conf.rlnRelayCredPassword, rlnRelayUserMessageLimit: conf.rlnRelayUserMessageLimit, + rlnEpochSizeSec: conf.rlnEpochSizeSec ) else: let rlnConf = WakuRlnConfig( @@ -532,6 +533,7 @@ proc processInput(rfd: AsyncFD, rng: ref HmacDrbgContext) {.async.} = rlnRelayEthClientAddress: string(conf.rlnRelayethClientAddress), rlnRelayCredPath: conf.rlnRelayCredPath, rlnRelayCredPassword: conf.rlnRelayCredPassword, + rlnEpochSizeSec: conf.rlnEpochSizeSec ) waitFor node.mountRlnRelay(rlnConf, diff --git a/apps/chat2/config_chat2.nim b/apps/chat2/config_chat2.nim index c847ed406a..055cd63d3b 100644 --- a/apps/chat2/config_chat2.nim +++ b/apps/chat2/config_chat2.nim @@ -272,6 +272,11 @@ type defaultValue: 1, name: "rln-relay-user-message-limit" .}: uint64 + rlnEpochSizeSec* {. + desc: "Epoch size in seconds used to rate limit RLN memberships. Default is 1 second.", + defaultValue: 1 + name: "rln-relay-epoch-sec" .}: uint64 + # NOTE: Keys are different in nim-libp2p proc parseCmdArg*(T: type crypto.PrivateKey, p: string): T = try: diff --git a/apps/networkmonitor/networkmonitor.nim b/apps/networkmonitor/networkmonitor.nim index 7907b2150b..ee46338ac6 100644 --- a/apps/networkmonitor/networkmonitor.nim +++ b/apps/networkmonitor/networkmonitor.nim @@ -494,6 +494,8 @@ when isMainModule: conf.pubsubTopics = twnClusterConf.pubsubTopics conf.rlnRelayDynamic = twnClusterConf.rlnRelayDynamic conf.rlnRelayEthContractAddress = twnClusterConf.rlnRelayEthContractAddress + conf.rlnEpochSizeSec = twnClusterConf.rlnEpochSizeSec + conf.rlnRelayUserMessageLimit = twnClusterConf.rlnRelayUserMessageLimit if conf.logLevel != LogLevel.NONE: setLogLevel(conf.logLevel) @@ -546,6 +548,7 @@ when isMainModule: rlnRelayCredPath: "", rlnRelayCredPassword: "", rlnRelayTreePath: conf.rlnRelayTreePath, + rlnEpochSizeSec: conf.rlnEpochSizeSec ) try: diff --git a/apps/networkmonitor/networkmonitor_config.nim b/apps/networkmonitor/networkmonitor_config.nim index a1c83ba948..2f0841d34c 100644 --- a/apps/networkmonitor/networkmonitor_config.nim +++ b/apps/networkmonitor/networkmonitor_config.nim @@ -75,6 +75,16 @@ type defaultValue: "", name: "rln-relay-eth-contract-address" }: string + rlnEpochSizeSec* {. + desc: "Epoch size in seconds used to rate limit RLN memberships. Default is 1 second.", + defaultValue: 1 + name: "rln-relay-epoch-sec" .}: uint64 + + rlnRelayUserMessageLimit* {. + desc: "Set a user message limit for the rln membership registration. Must be a positive integer. Default is 1.", + defaultValue: 1, + name: "rln-relay-user-message-limit" .}: uint64 + ## Prometheus metrics config metricsServer* {. desc: "Enable the metrics server: true|false" diff --git a/apps/wakunode2/app.nim b/apps/wakunode2/app.nim index 291ea1d1dc..b064c2453f 100644 --- a/apps/wakunode2/app.nim +++ b/apps/wakunode2/app.nim @@ -477,6 +477,7 @@ proc setupProtocols(node: WakuNode, rlnRelayCredPassword: conf.rlnRelayCredPassword, rlnRelayTreePath: conf.rlnRelayTreePath, rlnRelayUserMessageLimit: conf.rlnRelayUserMessageLimit, + rlnEpochSizeSec: conf.rlnEpochSizeSec, onFatalErrorAction: onFatalErrorAction, ) else: @@ -488,6 +489,7 @@ proc setupProtocols(node: WakuNode, rlnRelayCredPath: conf.rlnRelayCredPath, rlnRelayCredPassword: conf.rlnRelayCredPassword, rlnRelayTreePath: conf.rlnRelayTreePath, + rlnEpochSizeSec: conf.rlnEpochSizeSec, onFatalErrorAction: onFatalErrorAction, ) diff --git a/apps/wakunode2/external_config.nim b/apps/wakunode2/external_config.nim index 72bd64a170..88739de041 100644 --- a/apps/wakunode2/external_config.nim +++ b/apps/wakunode2/external_config.nim @@ -34,7 +34,7 @@ type ProtectedTopic* = object topic*: string key*: secp256k1.SkPublicKey -type ShardIdx = distinct uint16 +type ShardIdx = distinct uint16 type EthRpcUrl = distinct string @@ -83,12 +83,17 @@ type desc: "Private key for broadcasting transactions", defaultValue: "", name: "rln-relay-eth-private-key" }: string - + rlnRelayUserMessageLimit* {. desc: "Set a user message limit for the rln membership registration. Must be a positive integer. Default is 1.", defaultValue: 1, name: "rln-relay-user-message-limit" .}: uint64 + rlnEpochSizeSec* {. + desc: "Epoch size in seconds used to rate limit RLN memberships. Default is 1 second.", + defaultValue: 1 + name: "rln-relay-epoch-sec" .}: uint64 + maxMessageSize* {. desc: "Maximum message size. Accepted units: KiB, KB, and B. e.g. 1024KiB; 1500 B; etc." defaultValue: DefaultMaxWakuMessageSizeStr diff --git a/apps/wakunode2/networks_config.nim b/apps/wakunode2/networks_config.nim index c78b0c4656..3a7d78aa48 100644 --- a/apps/wakunode2/networks_config.nim +++ b/apps/wakunode2/networks_config.nim @@ -10,13 +10,15 @@ type ClusterConf* = object rlnRelayEthContractAddress*: string rlnRelayDynamic*: bool rlnRelayBandwidthThreshold*: int + rlnEpochSizeSec*: uint64 + rlnRelayUserMessageLimit*: uint64 pubsubTopics*: seq[string] discv5Discovery*: bool discv5BootstrapNodes*: seq[string] -# cluster-id=1 +# cluster-id=1 # Cluster configuration corresponding to The Waku Network. Note that it -# overrides existing cli configuration +# overrides existing cli configuration proc TheWakuNetworkConf*(T: type ClusterConf): ClusterConf = return ClusterConf( maxMessageSize: "150KiB", @@ -25,6 +27,9 @@ proc TheWakuNetworkConf*(T: type ClusterConf): ClusterConf = rlnRelayEthContractAddress: "0xF471d71E9b1455bBF4b85d475afb9BB0954A29c4", rlnRelayDynamic: true, rlnRelayBandwidthThreshold: 0, + rlnEpochSizeSec: 1, + # parameter to be defined with rln_v2 + rlnRelayUserMessageLimit: 1, pubsubTopics: @[ "/waku/2/rs/1/0", "/waku/2/rs/1/1", "/waku/2/rs/1/2", "/waku/2/rs/1/3", diff --git a/apps/wakunode2/wakunode2.nim b/apps/wakunode2/wakunode2.nim index c2d0d3924c..e90eada2ad 100644 --- a/apps/wakunode2/wakunode2.nim +++ b/apps/wakunode2/wakunode2.nim @@ -33,9 +33,11 @@ proc logConfig(conf: WakuNodeConf) = info "Configuration. Network", cluster = conf.clusterId, - pubsubTopics = conf.pubsubTopics, maxPeers = conf.maxRelayPeers + for shard in conf.pubsubTopics: + info "Configuration. Shards", shard=shard + for i in conf.discv5BootstrapNodes: info "Configuration. Bootstrap nodes", node = i @@ -43,7 +45,10 @@ proc logConfig(conf: WakuNodeConf) = info "Configuration. Validation", mechanism = "onchain rln", contract = conf.rlnRelayEthContractAddress, - maxMessageSize = conf.maxMessageSize + maxMessageSize = conf.maxMessageSize, + rlnEpochSizeSec = conf.rlnEpochSizeSec, + rlnRelayUserMessageLimit = conf.rlnRelayUserMessageLimit, + rlnRelayEthClientAddress = string(conf.rlnRelayEthClientAddress) {.pop.} # @TODO confutils.nim(775, 17) Error: can raise an unlisted exception: ref IOError @@ -100,6 +105,8 @@ when isMainModule: conf.discv5Discovery = twnClusterConf.discv5Discovery conf.discv5BootstrapNodes = conf.discv5BootstrapNodes & twnClusterConf.discv5BootstrapNodes + conf.rlnEpochSizeSec = twnClusterConf.rlnEpochSizeSec + conf.rlnRelayUserMessageLimit = twnClusterConf.rlnRelayUserMessageLimit var wakunode2 = App.init(rng, conf) diff --git a/tests/node/test_wakunode_relay_rln.nim b/tests/node/test_wakunode_relay_rln.nim index 6b8acdee61..ff08da5136 100644 --- a/tests/node/test_wakunode_relay_rln.nim +++ b/tests/node/test_wakunode_relay_rln.nim @@ -30,6 +30,7 @@ proc setupRln(node: WakuNode, identifier: uint) {.async.} = rlnRelayDynamic: false, rlnRelayCredIndex: some(identifier), rlnRelayTreePath: genTempPath("rln_tree", "wakunode_" & $identifier), + rlnEpochSizeSec: 1 ) ) @@ -76,7 +77,7 @@ proc sendRlnMessageWithInvalidProof( client.wakuRlnRelay.groupManager.generateProof( concat(payload, extraBytes), # we add extra bytes to invalidate proof verification against original payload - getCurrentEpoch() + client.wakuRlnRelay.getCurrentEpoch() ) rateLimitProof = rateLimitProofRes.get().encode().buffer message = @@ -249,17 +250,17 @@ suite "Waku RlnRelay - End to End": WakuMessage(payload: @payload150kibPlus, contentTopic: contentTopic) doAssert( - client.wakuRlnRelay.appendRLNProof(message1b, epoch + EpochUnitSeconds * 0).isOk() + client.wakuRlnRelay.appendRLNProof(message1b, epoch + client.wakuRlnRelay.rlnEpochSizeSec * 0).isOk() ) doAssert( - client.wakuRlnRelay.appendRLNProof(message1kib, epoch + EpochUnitSeconds * 1).isOk() + client.wakuRlnRelay.appendRLNProof(message1kib, epoch + client.wakuRlnRelay.rlnEpochSizeSec * 1).isOk() ) doAssert( - client.wakuRlnRelay.appendRLNProof(message150kib, epoch + EpochUnitSeconds * 2).isOk() + client.wakuRlnRelay.appendRLNProof(message150kib, epoch + client.wakuRlnRelay.rlnEpochSizeSec * 2).isOk() ) doAssert( client.wakuRlnRelay.appendRLNProof( - message151kibPlus, epoch + EpochUnitSeconds * 3 + message151kibPlus, epoch + client.wakuRlnRelay.rlnEpochSizeSec * 3 ).isOk() ) @@ -324,7 +325,7 @@ suite "Waku RlnRelay - End to End": doAssert( client.wakuRlnRelay.appendRLNProof( - message151kibPlus, epoch + EpochUnitSeconds * 3 + message151kibPlus, epoch + client.wakuRlnRelay.rlnEpochSizeSec * 3 ) ) diff --git a/tests/waku_rln_relay/rln_v2/test_rln_relay_v2_serde.nim b/tests/waku_rln_relay/rln_v2/test_rln_relay_v2_serde.nim index d14054cccf..06bdcb8408 100644 --- a/tests/waku_rln_relay/rln_v2/test_rln_relay_v2_serde.nim +++ b/tests/waku_rln_relay/rln_v2/test_rln_relay_v2_serde.nim @@ -73,7 +73,7 @@ suite "RLN Relay v2: serde": userMessageLimit = rateCommitment.userMessageLimit, messageId = 0, index = 0, - epoch = calcEpoch(epochTime())) + epoch = rln.calcEpoch(epochTime())) assert proofRes.isOk, $proofRes.error diff --git a/tests/waku_rln_relay/test_waku_rln_relay.nim b/tests/waku_rln_relay/test_waku_rln_relay.nim index 9e7a1ec736..832d0242e1 100644 --- a/tests/waku_rln_relay/test_waku_rln_relay.nim +++ b/tests/waku_rln_relay/test_waku_rln_relay.nim @@ -590,7 +590,7 @@ suite "Waku rln relay": test "updateLog and hasDuplicate tests": let wakurlnrelay = WakuRLNRelay() - epoch = getCurrentEpoch() + epoch = wakurlnrelay.getCurrentEpoch() # create some dummy nullifiers and secret shares var nullifier1: Nullifier @@ -662,6 +662,7 @@ suite "Waku rln relay": let rlnConf = WakuRlnConfig(rlnRelayDynamic: false, rlnRelayCredIndex: some(index), + rlnEpochSizeSec: 1, rlnRelayTreePath: genTempPath("rln_tree", "waku_rln_relay_2")) let wakuRlnRelayRes = await WakuRlnRelay.new(rlnConf) require: @@ -683,7 +684,7 @@ suite "Waku rln relay": let proofAdded1 = wakuRlnRelay.appendRLNProof(wm1, time) proofAdded2 = wakuRlnRelay.appendRLNProof(wm2, time) - proofAdded3 = wakuRlnRelay.appendRLNProof(wm3, time+EpochUnitSeconds) + proofAdded3 = wakuRlnRelay.appendRLNProof(wm3, time+float64(wakuRlnRelay.rlnEpochSizeSec)) # ensure proofs are added require: diff --git a/tests/waku_rln_relay/test_wakunode_rln_relay.nim b/tests/waku_rln_relay/test_wakunode_rln_relay.nim index c57a68b83f..719ded6c88 100644 --- a/tests/waku_rln_relay/test_wakunode_rln_relay.nim +++ b/tests/waku_rln_relay/test_wakunode_rln_relay.nim @@ -41,6 +41,7 @@ procSuite "WakuNode - RLN relay": # mount rlnrelay in off-chain mode await node1.mountRlnRelay(WakuRlnConfig(rlnRelayDynamic: false, rlnRelayCredIndex: some(1.uint), + rlnEpochSizeSec: 1, rlnRelayTreePath: genTempPath("rln_tree", "wakunode"), )) @@ -51,6 +52,7 @@ procSuite "WakuNode - RLN relay": # mount rlnrelay in off-chain mode await node2.mountRlnRelay(WakuRlnConfig(rlnRelayDynamic: false, rlnRelayCredIndex: some(2.uint), + rlnEpochSizeSec: 1, rlnRelayTreePath: genTempPath("rln_tree", "wakunode_2"), )) @@ -61,6 +63,7 @@ procSuite "WakuNode - RLN relay": await node3.mountRlnRelay(WakuRlnConfig(rlnRelayDynamic: false, rlnRelayCredIndex: some(3.uint), + rlnEpochSizeSec: 1, rlnRelayTreePath: genTempPath("rln_tree", "wakunode_3"), )) @@ -122,6 +125,7 @@ procSuite "WakuNode - RLN relay": for index, node in nodes: await node.mountRlnRelay(WakuRlnConfig(rlnRelayDynamic: false, rlnRelayCredIndex: some(index.uint + 1), + rlnEpochSizeSec: 1, rlnRelayTreePath: genTempPath("rln_tree", "wakunode_" & $(index+1)))) # start them @@ -200,6 +204,7 @@ procSuite "WakuNode - RLN relay": # mount rlnrelay in off-chain mode await node1.mountRlnRelay(WakuRlnConfig(rlnRelayDynamic: false, rlnRelayCredIndex: some(1.uint), + rlnEpochSizeSec: 1, rlnRelayTreePath: genTempPath("rln_tree", "wakunode_4"), )) @@ -210,6 +215,7 @@ procSuite "WakuNode - RLN relay": # mount rlnrelay in off-chain mode await node2.mountRlnRelay(WakuRlnConfig(rlnRelayDynamic: false, rlnRelayCredIndex: some(2.uint), + rlnEpochSizeSec: 1, rlnRelayTreePath: genTempPath("rln_tree", "wakunode_5"), )) @@ -220,6 +226,7 @@ procSuite "WakuNode - RLN relay": await node3.mountRlnRelay(WakuRlnConfig(rlnRelayDynamic: false, rlnRelayCredIndex: some(3.uint), + rlnEpochSizeSec: 1, rlnRelayTreePath: genTempPath("rln_tree", "wakunode_6"), )) @@ -244,7 +251,7 @@ procSuite "WakuNode - RLN relay": let payload = "Hello".toBytes() # prepare the epoch - let epoch = getCurrentEpoch() + let epoch = node1.wakuRlnRelay.getCurrentEpoch() # prepare the proof let @@ -299,6 +306,7 @@ procSuite "WakuNode - RLN relay": # mount rlnrelay in off-chain mode await node1.mountRlnRelay(WakuRlnConfig(rlnRelayDynamic: false, rlnRelayCredIndex: some(1.uint), + rlnEpochSizeSec: 1, rlnRelayTreePath: genTempPath("rln_tree", "wakunode_7"), )) @@ -310,6 +318,7 @@ procSuite "WakuNode - RLN relay": # mount rlnrelay in off-chain mode await node2.mountRlnRelay(WakuRlnConfig(rlnRelayDynamic: false, rlnRelayCredIndex: some(2.uint), + rlnEpochSizeSec: 1, rlnRelayTreePath: genTempPath("rln_tree", "wakunode_8"), )) @@ -321,6 +330,7 @@ procSuite "WakuNode - RLN relay": # mount rlnrelay in off-chain mode await node3.mountRlnRelay(WakuRlnConfig(rlnRelayDynamic: false, rlnRelayCredIndex: some(3.uint), + rlnEpochSizeSec: 1, rlnRelayTreePath: genTempPath("rln_tree", "wakunode_9"), )) @@ -341,7 +351,7 @@ procSuite "WakuNode - RLN relay": proofAdded2 = node3.wakuRlnRelay.appendRLNProof(wm2, time) # wm3 points to the next epoch wm3 = WakuMessage(payload: "message 3".toBytes(), contentTopic: contentTopic) - proofAdded3 = node3.wakuRlnRelay.appendRLNProof(wm3, time+EpochUnitSeconds) + proofAdded3 = node3.wakuRlnRelay.appendRLNProof(wm3, time+float64(node3.wakuRlnRelay.rlnEpochSizeSec)) wm4 = WakuMessage(payload: "message 4".toBytes(), contentTopic: contentTopic) # check proofs are added correctly @@ -419,6 +429,7 @@ procSuite "WakuNode - RLN relay": # mount rlnrelay in off-chain mode await node1.mountRlnRelay(WakuRlnConfig(rlnRelayDynamic: false, rlnRelayCredIndex: some(1.uint), + rlnEpochSizeSec: 1, rlnRelayTreePath: genTempPath("rln_tree", "wakunode_10"), )) @@ -430,6 +441,7 @@ procSuite "WakuNode - RLN relay": # mount rlnrelay in off-chain mode await node2.mountRlnRelay(WakuRlnConfig(rlnRelayDynamic: false, rlnRelayCredIndex: some(2.uint), + rlnEpochSizeSec: 1, rlnRelayTreePath: genTempPath("rln_tree", "wakunode_11"), )) @@ -448,7 +460,7 @@ procSuite "WakuNode - RLN relay": proofAdded2 = node1.wakuRlnRelay.appendRLNProof(wm2, time) # wm3 points to the next epoch wm3 = WakuMessage(payload: "message 3".toBytes(), contentTopic: contentTopic) - proofAdded3 = node1.wakuRlnRelay.appendRLNProof(wm3, time + EpochUnitSeconds * 2) + proofAdded3 = node1.wakuRlnRelay.appendRLNProof(wm3, time + float64(node1.wakuRlnRelay.rlnEpochSizeSec * 2)) # check proofs are added correctly check: diff --git a/tests/wakunode_jsonrpc/test_jsonrpc_relay.nim b/tests/wakunode_jsonrpc/test_jsonrpc_relay.nim index d62589b473..d5c55dd7d4 100644 --- a/tests/wakunode_jsonrpc/test_jsonrpc_relay.nim +++ b/tests/wakunode_jsonrpc/test_jsonrpc_relay.nim @@ -94,10 +94,12 @@ suite "Waku v2 JSON-RPC API - Relay": await srcNode.mountRlnRelay(WakuRlnConfig(rlnRelayDynamic: false, rlnRelayCredIndex: some(1.uint), + rlnEpochSizeSec: 1, rlnRelayTreePath: genTempPath("rln_tree", "wakunode_1"))) await dstNode.mountRlnRelay(WakuRlnConfig(rlnRelayDynamic: false, rlnRelayCredIndex: some(2.uint), + rlnEpochSizeSec: 1, rlnRelayTreePath: genTempPath("rln_tree", "wakunode_2"))) await srcNode.connectToNodes(@[dstNode.peerInfo.toRemotePeerInfo()]) diff --git a/tests/wakunode_rest/test_rest_health.nim b/tests/wakunode_rest/test_rest_health.nim index d5d8f29f5a..9560384a02 100644 --- a/tests/wakunode_rest/test_rest_health.nim +++ b/tests/wakunode_rest/test_rest_health.nim @@ -62,6 +62,7 @@ suite "Waku v2 REST API - health": # now kick in rln (currently the only check for health) await node.mountRlnRelay(WakuRlnConfig(rlnRelayDynamic: false, rlnRelayCredIndex: some(1.uint), + rlnEpochSizeSec: 1, rlnRelayTreePath: genTempPath("rln_tree", "wakunode"), )) diff --git a/tests/wakunode_rest/test_rest_relay.nim b/tests/wakunode_rest/test_rest_relay.nim index 5c64faad77..0e0f40424a 100644 --- a/tests/wakunode_rest/test_rest_relay.nim +++ b/tests/wakunode_rest/test_rest_relay.nim @@ -210,6 +210,7 @@ suite "Waku v2 Rest API - Relay": await node.mountRelay() await node.mountRlnRelay(WakuRlnConfig(rlnRelayDynamic: false, rlnRelayCredIndex: some(1.uint), + rlnEpochSizeSec: 1, rlnRelayTreePath: genTempPath("rln_tree", "wakunode_1"))) # RPC server setup @@ -412,6 +413,7 @@ suite "Waku v2 Rest API - Relay": await node.mountRelay() await node.mountRlnRelay(WakuRlnConfig(rlnRelayDynamic: false, rlnRelayCredIndex: some(1.uint), + rlnEpochSizeSec: 1, rlnRelayTreePath: genTempPath("rln_tree", "wakunode_1"))) # RPC server setup @@ -456,6 +458,7 @@ suite "Waku v2 Rest API - Relay": await node.mountRelay() await node.mountRlnRelay(WakuRlnConfig(rlnRelayDynamic: false, rlnRelayCredIndex: some(1.uint), + rlnEpochSizeSec: 1, rlnRelayTreePath: genTempPath("rln_tree", "wakunode_1"))) # RPC server setup @@ -495,6 +498,7 @@ suite "Waku v2 Rest API - Relay": await node.mountRelay() await node.mountRlnRelay(WakuRlnConfig(rlnRelayDynamic: false, rlnRelayCredIndex: some(1.uint), + rlnEpochSizeSec: 1, rlnRelayTreePath: genTempPath("rln_tree", "wakunode_1"))) # RPC server setup @@ -539,6 +543,7 @@ suite "Waku v2 Rest API - Relay": await node.mountRelay() await node.mountRlnRelay(WakuRlnConfig(rlnRelayDynamic: false, rlnRelayCredIndex: some(1.uint), + rlnEpochSizeSec: 1, rlnRelayTreePath: genTempPath("rln_tree", "wakunode_1"))) # RPC server setup diff --git a/waku/waku_rln_relay/constants.nim b/waku/waku_rln_relay/constants.nim index 7087ad390c..465a56d569 100644 --- a/waku/waku_rln_relay/constants.nim +++ b/waku/waku_rln_relay/constants.nim @@ -59,12 +59,8 @@ const # the root is created locally, using createMembershipList proc from waku_rln_relay_utils module, and the result is hardcoded in here StaticGroupMerkleRoot* = "1e534adab58f7d300aaeecae57a25e0a0b18c368a09f720280da92b288950901" -const EpochUnitSeconds* = float64(1) # the rln-relay epoch length in seconds const MaxClockGapSeconds* = 20.0 # the maximum clock difference between peers in seconds -# maximum allowed gap between the epochs of messages' RateLimitProofs -const MaxEpochGap* = uint64(MaxClockGapSeconds/EpochUnitSeconds) - # RLN Keystore defaults const RLNAppInfo* = AppInfo(application: "waku-rln-relay", appIdentifier: "01234567890abcdef", version: "0.2") diff --git a/waku/waku_rln_relay/nonce_manager.nim b/waku/waku_rln_relay/nonce_manager.nim index 6a0f34b073..fbba55e696 100644 --- a/waku/waku_rln_relay/nonce_manager.nim +++ b/waku/waku_rln_relay/nonce_manager.nim @@ -43,9 +43,9 @@ proc `$`*(ne: NonceManagerError): string = of NonceLimitReached: return "NonceLimitReached: " & ne.error -proc init*(T: type NonceManager, nonceLimit: Nonce, epoch = EpochUnitSeconds): T = +proc init*(T: type NonceManager, nonceLimit: Nonce): T = return NonceManager( - epoch: epoch, + epoch: 0, nextNonce: 0, lastNonceTime: 0, nonceLimit: nonceLimit diff --git a/waku/waku_rln_relay/rln_relay.nim b/waku/waku_rln_relay/rln_relay.nim index b1f8859938..42d1644fba 100644 --- a/waku/waku_rln_relay/rln_relay.nim +++ b/waku/waku_rln_relay/rln_relay.nim @@ -43,6 +43,7 @@ type rlnRelayCredPath*: string rlnRelayCredPassword*: string rlnRelayTreePath*: string + rlnEpochSizeSec*: uint64 onFatalErrorAction*: OnFatalErrorHandler when defined(rln_v2): rlnRelayUserMessageLimit*: uint64 @@ -76,21 +77,23 @@ proc createMembershipList*(rln: ptr RLN, n: int): RlnRelayResult[( let root = rln.getMerkleRoot().value().inHex() return ok((output, root)) -proc calcEpoch*(t: float64): Epoch = - ## gets time `t` as `flaot64` with subseconds resolution in the fractional part - ## and returns its corresponding rln `Epoch` value - let e = uint64(t/EpochUnitSeconds) - return toEpoch(e) - type WakuRLNRelay* = ref object of RootObj # the log of nullifiers and Shamir shares of the past messages grouped per epoch nullifierLog*: OrderedTable[Epoch, seq[ProofMetadata]] lastEpoch*: Epoch # the epoch of the last published rln message + rlnEpochSizeSec*: uint64 + rlnMaxEpochGap*: uint64 groupManager*: GroupManager onFatalErrorAction*: OnFatalErrorHandler when defined(rln_v2): nonceManager: NonceManager +proc calcEpoch*(rlnPeer: WakuRLNRelay, t: float64): Epoch = + ## gets time `t` as `flaot64` with subseconds resolution in the fractional part + ## and returns its corresponding rln `Epoch` value + let e = uint64(t/rlnPeer.rlnEpochSizeSec.float64) + return toEpoch(e) + proc stop*(rlnPeer: WakuRLNRelay) {.async: (raises: [Exception]).} = ## stops the rln-relay protocol ## Throws an error if it cannot stop the rln-relay protocol @@ -153,9 +156,9 @@ proc updateLog*(rlnPeer: WakuRLNRelay, except KeyError as e: return err("the external nullifier was not found") # should never happen -proc getCurrentEpoch*(): Epoch = +proc getCurrentEpoch*(rlnPeer: WakuRLNRelay): Epoch = ## gets the current rln Epoch time - return calcEpoch(epochTime()) + return rlnPeer.calcEpoch(epochTime()) proc absDiff*(e1, e2: Epoch): uint64 = ## returns the absolute difference between the two rln `Epoch`s `e1` and `e2` @@ -195,10 +198,10 @@ proc validateMessage*(rlnPeer: WakuRLNRelay, # it corresponds to the validation of rln external nullifier var epoch: Epoch if timeOption.isSome(): - epoch = calcEpoch(timeOption.get()) + epoch = rlnPeer.calcEpoch(timeOption.get()) else: # get current rln epoch - epoch = getCurrentEpoch() + epoch = rlnPeer.getCurrentEpoch() let msgEpoch = proof.epoch @@ -208,7 +211,7 @@ proc validateMessage*(rlnPeer: WakuRLNRelay, trace "epoch info", currentEpoch = fromEpoch(epoch), msgEpoch = fromEpoch(msgEpoch) # validate the epoch - if gap > MaxEpochGap: + if gap > rlnPeer.rlnMaxEpochGap: # message's epoch is too old or too ahead # accept messages whose epoch is within +-MaxEpochGap from the current epoch warn "invalid message: epoch gap exceeds a threshold", gap = gap, @@ -300,7 +303,7 @@ proc appendRLNProof*(rlnPeer: WakuRLNRelay, ## The `epoch` field of `RateLimitProof` is derived from the provided `senderEpochTime` (using `calcEpoch()`) let input = msg.toRLNSignal() - let epoch = calcEpoch(senderEpochTime) + let epoch = rlnPeer.calcEpoch(senderEpochTime) when defined(rln_v2): let nonce = rlnPeer.nonceManager.get().valueOr: @@ -318,11 +321,11 @@ proc clearNullifierLog(rlnPeer: WakuRlnRelay) = # clear the first MaxEpochGap epochs of the nullifer log # if more than MaxEpochGap epochs are in the log # note: the epochs are ordered ascendingly - if rlnPeer.nullifierLog.len().uint < MaxEpochGap: + if rlnPeer.nullifierLog.len().uint < rlnPeer.rlnMaxEpochGap: return - trace "clearing epochs from the nullifier log", count = MaxEpochGap - let epochsToClear = rlnPeer.nullifierLog.keys().toSeq()[0.. Date: Thu, 29 Feb 2024 09:48:14 +0100 Subject: [PATCH 246/274] chore: Implemented CORS handling for nwaku REST server (#2470) * Add allowOrigin configuration for wakunode and WakuRestServer Update nim-presto to the latest master that contains middleware support Rework Rest Server in waku to utilize chronos' and presto's new middleware design and added proper CORS handling. Added cors tests and fixes Co-authored-by: Ivan FB <128452529+Ivansete-status@users.noreply.github.com> --- apps/wakunode2/app.nim | 63 ++-- apps/wakunode2/external_config.nim | 8 + tests/all_tests_waku.nim | 3 +- tests/wakunode_rest/test_all.nim | 3 +- tests/wakunode_rest/test_rest_admin.nim | 4 +- tests/wakunode_rest/test_rest_cors.nim | 269 ++++++++++++++++++ tests/wakunode_rest/test_rest_debug.nim | 4 +- tests/wakunode_rest/test_rest_filter.nim | 8 +- tests/wakunode_rest/test_rest_health.nim | 2 +- .../wakunode_rest/test_rest_legacy_filter.nim | 4 +- tests/wakunode_rest/test_rest_lightpush.nim | 4 +- tests/wakunode_rest/test_rest_relay.nim | 58 ++-- tests/wakunode_rest/test_rest_store.nim | 20 +- vendor/nim-presto | 2 +- waku/waku_api/rest/origin_handler.nim | 125 ++++++++ waku/waku_api/rest/server.nim | 143 ++++++++-- 16 files changed, 623 insertions(+), 97 deletions(-) create mode 100644 tests/wakunode_rest/test_rest_cors.nim create mode 100644 waku/waku_api/rest/origin_handler.nim diff --git a/apps/wakunode2/app.nim b/apps/wakunode2/app.nim index b064c2453f..10a91abf34 100644 --- a/apps/wakunode2/app.nim +++ b/apps/wakunode2/app.nim @@ -84,7 +84,7 @@ type node: WakuNode rpcServer: Option[RpcHttpServer] - restServer: Option[RestServerRef] + restServer: Option[WakuRestServerRef] metricsServer: Option[MetricsHttpServerRef] AppResult*[T] = Result[T, string] @@ -667,34 +667,55 @@ proc startApp*(app: var App): AppResult[void] = ## Monitoring and external interfaces -proc startRestServer(app: App, address: IpAddress, port: Port, conf: WakuNodeConf): AppResult[RestServerRef] = +proc startRestServer(app: App, + address: IpAddress, + port: Port, + conf: WakuNodeConf): + AppResult[WakuRestServerRef] = # Used to register api endpoints that are not currently installed as keys, # values are holding error messages to be returned to the client var notInstalledTab: Table[string, string] = initTable[string, string]() - proc requestErrorHandler(error: RestRequestError, - request: HttpRequestRef): - Future[HttpResponseRef] {.async.} = - case error - of RestRequestError.Invalid: - return await request.respond(Http400, "Invalid request", HttpTable.init()) - of RestRequestError.NotFound: - let rootPath = request.rawPath.split("/")[1] - if notInstalledTab.hasKey(rootPath): - return await request.respond(Http404, notInstalledTab[rootPath], HttpTable.init()) - else: - return await request.respond(Http400, "Bad request initiated. Invalid path or method used.", HttpTable.init()) - of RestRequestError.InvalidContentBody: - return await request.respond(Http400, "Invalid content body", HttpTable.init()) - of RestRequestError.InvalidContentType: - return await request.respond(Http400, "Invalid content type", HttpTable.init()) - of RestRequestError.Unexpected: - return defaultResponse() + let requestErrorHandler : RestRequestErrorHandler = proc (error: RestRequestError, + request: HttpRequestRef): + Future[HttpResponseRef] + {.async: (raises: [CancelledError]).} = + try: + case error + of RestRequestError.Invalid: + return await request.respond(Http400, "Invalid request", HttpTable.init()) + of RestRequestError.NotFound: + let paths = request.rawPath.split("/") + let rootPath = if len(paths) > 1: + paths[1] + else: + "" + notInstalledTab.withValue(rootPath, errMsg): + return await request.respond(Http404, errMsg[], HttpTable.init()) + do: + return await request.respond(Http400, "Bad request initiated. Invalid path or method used.", HttpTable.init()) + of RestRequestError.InvalidContentBody: + return await request.respond(Http400, "Invalid content body", HttpTable.init()) + of RestRequestError.InvalidContentType: + return await request.respond(Http400, "Invalid content type", HttpTable.init()) + of RestRequestError.Unexpected: + return defaultResponse() + except HttpWriteError: + error "Failed to write response to client", error = getCurrentExceptionMsg() + discard return defaultResponse() - let server = ? newRestHttpServer(address, port, requestErrorHandler = requestErrorHandler) + let allowedOrigin = if len(conf.restAllowOrigin) > 0 : + some(conf.restAllowOrigin.join(",")) + else: + none(string) + + let server = ? newRestHttpServer(address, port, + allowedOrigin = allowedOrigin, + requestErrorHandler = requestErrorHandler) + ## Admin REST API if conf.restAdmin: installAdminApiHandlers(server.router, app.node) diff --git a/apps/wakunode2/external_config.nim b/apps/wakunode2/external_config.nim index 88739de041..e9c1d1e9f3 100644 --- a/apps/wakunode2/external_config.nim +++ b/apps/wakunode2/external_config.nim @@ -419,6 +419,14 @@ type defaultValue: false name: "rest-private" }: bool + restAllowOrigin* {. + desc: "Allow cross-origin requests from the specified origin." & + "Argument may be repeated." & + "Wildcards: * or ? allowed." & + "Ex.: \"localhost:*\" or \"127.0.0.1:8080\"", + defaultValue: newSeq[string]() + name: "rest-allow-origin" }: seq[string] + ## Metrics config metricsServer* {. diff --git a/tests/all_tests_waku.nim b/tests/all_tests_waku.nim index 3030214044..17d76a50c9 100644 --- a/tests/all_tests_waku.nim +++ b/tests/all_tests_waku.nim @@ -85,7 +85,8 @@ import ./wakunode_rest/test_rest_filter, ./wakunode_rest/test_rest_legacy_filter, ./wakunode_rest/test_rest_lightpush, - ./wakunode_rest/test_rest_admin + ./wakunode_rest/test_rest_admin, + ./wakunode_rest/test_rest_cors import ./waku_rln_relay/test_waku_rln_relay, diff --git a/tests/wakunode_rest/test_all.nim b/tests/wakunode_rest/test_all.nim index 620ae8a708..9829a78f22 100644 --- a/tests/wakunode_rest/test_all.nim +++ b/tests/wakunode_rest/test_all.nim @@ -10,4 +10,5 @@ import ./test_rest_relay, ./test_rest_serdes, ./test_rest_store, - ./test_rest_admin + ./test_rest_admin, + ./test_rest_cors diff --git a/tests/wakunode_rest/test_rest_admin.nim b/tests/wakunode_rest/test_rest_admin.nim index 932dcd743e..628359ab32 100644 --- a/tests/wakunode_rest/test_rest_admin.nim +++ b/tests/wakunode_rest/test_rest_admin.nim @@ -30,7 +30,7 @@ suite "Waku v2 Rest API - Admin": var peerInfo1 {.threadvar.}: RemotePeerInfo var peerInfo2 {.threadvar.}: RemotePeerInfo var peerInfo3 {.threadvar.}: RemotePeerInfo - var restServer {.threadvar.}: RestServerRef + var restServer {.threadvar.}: WakuRestServerRef var client{.threadvar.}: RestClientRef asyncSetup: @@ -46,7 +46,7 @@ suite "Waku v2 Rest API - Admin": let restPort = Port(58011) let restAddress = parseIpAddress("127.0.0.1") - restServer = RestServerRef.init(restAddress, restPort).tryGet() + restServer = WakuRestServerRef.init(restAddress, restPort).tryGet() installAdminApiHandlers(restServer.router, node1) diff --git a/tests/wakunode_rest/test_rest_cors.nim b/tests/wakunode_rest/test_rest_cors.nim new file mode 100644 index 0000000000..3ac166f077 --- /dev/null +++ b/tests/wakunode_rest/test_rest_cors.nim @@ -0,0 +1,269 @@ +{.used.} + +import + stew/shims/net, + testutils/unittests, + presto, + presto/client as presto_client, + libp2p/peerinfo, + libp2p/multiaddress, + libp2p/crypto/crypto +import + ../../waku/waku_node, + ../../waku/node/waku_node as waku_node2, + ../../waku/waku_api/rest/server, + ../../waku/waku_api/rest/client, + ../../waku/waku_api/rest/responses, + ../../waku/waku_api/rest/debug/handlers as debug_api, + ../../waku/waku_api/rest/debug/client as debug_api_client, + ../testlib/common, + ../testlib/wakucore, + ../testlib/wakunode + + +type + TestResponseTuple = tuple[status: int, data: string, headers: HttpTable] + +proc testWakuNode(): WakuNode = + let + privkey = crypto.PrivateKey.random(Secp256k1, rng[]).tryGet() + bindIp = parseIpAddress("0.0.0.0") + extIp = parseIpAddress("127.0.0.1") + port = Port(58000) + + newTestWakuNode(privkey, bindIp, port, some(extIp), some(port)) + +proc fetchWithHeader(request: HttpClientRequestRef): Future[TestResponseTuple] + {.async: (raises: [CancelledError, HttpError]).} = + var response: HttpClientResponseRef + try: + response = await request.send() + let buffer = await response.getBodyBytes() + let status = response.status + let headers = response.headers + await response.closeWait() + response = nil + return (status, buffer.bytesToString(), headers) + except HttpError as exc: + if not(isNil(response)): await response.closeWait() + assert false + except CancelledError as exc: + if not(isNil(response)): await response.closeWait() + assert false + +proc issueRequest( + address: HttpAddress, + reqOrigin: Option[string] = none(string) + ): Future[TestResponseTuple] {.async.} = + + var + session = HttpSessionRef.new({HttpClientFlag.Http11Pipeline}) + data: TestResponseTuple + + var originHeader : seq[HttpHeaderTuple] + if reqOrigin.isSome(): + originHeader.insert(("Origin", reqOrigin.get())) + + var + request = HttpClientRequestRef.new(session, + address, + version = HttpVersion11, + headers = originHeader) + try: + data = await request.fetchWithHeader() + finally: + await request.closeWait() + return data + +proc checkResponse(response: TestResponseTuple, + expectedStatus : int, + expectedOrigin : Option[string]): bool = + if response.status != expectedStatus: + echo(" -> check failed: expected status" & $expectedStatus & + " got " & $response.status) + return false + + if not (expectedOrigin.isNone() or + (expectedOrigin.isSome() and + response.headers.contains("Access-Control-Allow-Origin") and + response.headers.getLastString("Access-Control-Allow-Origin") == expectedOrigin.get())): + echo(" -> check failed: expected origin " & $expectedOrigin & " got " & + response.headers.getLastString("Access-Control-Allow-Origin")) + return false + + return true + +suite "Waku v2 REST API CORS Handling": + asyncTest "AllowedOrigin matches": + # Given + let node = testWakuNode() + await node.start() + await node.mountRelay() + + let restPort = Port(58001) + let restAddress = parseIpAddress("0.0.0.0") + let restServer = WakuRestServerRef.init(restAddress, + restPort, + allowedOrigin=some("test.net:1234,https://localhost:*,http://127.0.0.1:?8,?waku*.net:*80*") + ).tryGet() + + installDebugApiHandlers(restServer.router, node) + restServer.start() + + let srvAddr = restServer.localAddress() + let ha = getAddress(srvAddr, HttpClientScheme.NonSecure, "/debug/v1/info") + + # When + var response = await issueRequest(ha, some("http://test.net:1234")) + check checkResponse(response, 200, some("http://test.net:1234")) + + response = await issueRequest(ha, some("https://test.net:1234")) + check checkResponse(response, 200, some("https://test.net:1234")) + + response = await issueRequest(ha, some("https://localhost:8080")) + check checkResponse(response, 200, some("https://localhost:8080")) + + response = await issueRequest(ha, some("https://localhost:80")) + check checkResponse(response, 200, some("https://localhost:80")) + + response = await issueRequest(ha, some("http://127.0.0.1:78")) + check checkResponse(response, 200, some("http://127.0.0.1:78")) + + response = await issueRequest(ha, some("http://wakuTHE.net:8078")) + check checkResponse(response, 200, some("http://wakuTHE.net:8078")) + + response = await issueRequest(ha, some("http://nwaku.main.net:1980")) + check checkResponse(response, 200, some("http://nwaku.main.net:1980")) + + response = await issueRequest(ha, some("http://nwaku.main.net:80")) + check checkResponse(response, 200, some("http://nwaku.main.net:80")) + + await restServer.stop() + await restServer.closeWait() + await node.stop() + + asyncTest "AllowedOrigin reject": + # Given + let node = testWakuNode() + await node.start() + await node.mountRelay() + + let restPort = Port(58001) + let restAddress = parseIpAddress("0.0.0.0") + let restServer = WakuRestServerRef.init(restAddress, + restPort, + allowedOrigin=some("test.net:1234,https://localhost:*,http://127.0.0.1:?8,?waku*.net:*80*") + ).tryGet() + + installDebugApiHandlers(restServer.router, node) + restServer.start() + + let srvAddr = restServer.localAddress() + let ha = getAddress(srvAddr, HttpClientScheme.NonSecure, "/debug/v1/info") + + # When + var response = await issueRequest(ha, some("http://test.net:12334")) + check checkResponse(response, 403, none(string)) + + response = await issueRequest(ha, some("http://test.net:12345")) + check checkResponse(response, 403, none(string)) + + response = await issueRequest(ha, some("xhttp://test.net:1234")) + check checkResponse(response, 403, none(string)) + + response = await issueRequest(ha, some("https://xtest.net:1234")) + check checkResponse(response, 403, none(string)) + + response = await issueRequest(ha, some("http://localhost:8080")) + check checkResponse(response, 403, none(string)) + + response = await issueRequest(ha, some("https://127.0.0.1:78")) + check checkResponse(response, 403, none(string)) + + response = await issueRequest(ha, some("http://127.0.0.1:89")) + check checkResponse(response, 403, none(string)) + + response = await issueRequest(ha, some("http://the.waku.net:8078")) + check checkResponse(response, 403, none(string)) + + response = await issueRequest(ha, some("http://nwaku.main.net:1900")) + check checkResponse(response, 403, none(string)) + + await restServer.stop() + await restServer.closeWait() + await node.stop() + + asyncTest "AllowedOrigin allmatches": + # Given + let node = testWakuNode() + await node.start() + await node.mountRelay() + + let restPort = Port(58001) + let restAddress = parseIpAddress("0.0.0.0") + let restServer = WakuRestServerRef.init(restAddress, + restPort, + allowedOrigin=some("*") + ).tryGet() + + installDebugApiHandlers(restServer.router, node) + restServer.start() + + let srvAddr = restServer.localAddress() + let ha = getAddress(srvAddr, HttpClientScheme.NonSecure, "/debug/v1/info") + + # When + var response = await issueRequest(ha, some("http://test.net:1234")) + check checkResponse(response, 200, some("*")) + + response = await issueRequest(ha, some("https://test.net:1234")) + check checkResponse(response, 200, some("*")) + + response = await issueRequest(ha, some("https://localhost:8080")) + check checkResponse(response, 200, some("*")) + + response = await issueRequest(ha, some("https://localhost:80")) + check checkResponse(response, 200, some("*")) + + response = await issueRequest(ha, some("http://127.0.0.1:78")) + check checkResponse(response, 200, some("*")) + + response = await issueRequest(ha, some("http://wakuTHE.net:8078")) + check checkResponse(response, 200, some("*")) + + response = await issueRequest(ha, some("http://nwaku.main.net:1980")) + check checkResponse(response, 200, some("*")) + + response = await issueRequest(ha, some("http://nwaku.main.net:80")) + check checkResponse(response, 200, some("*")) + + await restServer.stop() + await restServer.closeWait() + await node.stop() + + asyncTest "No origin goes through": + # Given + let node = testWakuNode() + await node.start() + await node.mountRelay() + + let restPort = Port(58001) + let restAddress = parseIpAddress("0.0.0.0") + let restServer = WakuRestServerRef.init(restAddress, + restPort, + allowedOrigin=some("test.net:1234,https://localhost:*,http://127.0.0.1:?8,?waku*.net:*80*") + ).tryGet() + + installDebugApiHandlers(restServer.router, node) + restServer.start() + + let srvAddr = restServer.localAddress() + let ha = getAddress(srvAddr, HttpClientScheme.NonSecure, "/debug/v1/info") + + # When + var response = await issueRequest(ha, none(string)) + check checkResponse(response, 200, none(string)) + + await restServer.stop() + await restServer.closeWait() + await node.stop() diff --git a/tests/wakunode_rest/test_rest_debug.nim b/tests/wakunode_rest/test_rest_debug.nim index ab458ad0cd..4f1c4ac6a4 100644 --- a/tests/wakunode_rest/test_rest_debug.nim +++ b/tests/wakunode_rest/test_rest_debug.nim @@ -40,7 +40,7 @@ suite "Waku v2 REST API - Debug": let restPort = Port(58001) let restAddress = parseIpAddress("0.0.0.0") - let restServer = RestServerRef.init(restAddress, restPort).tryGet() + let restServer = WakuRestServerRef.init(restAddress, restPort).tryGet() installDebugApiHandlers(restServer.router, node) restServer.start() @@ -67,7 +67,7 @@ suite "Waku v2 REST API - Debug": let restPort = Port(58002) let restAddress = parseIpAddress("0.0.0.0") - let restServer = RestServerRef.init(restAddress, restPort).tryGet() + let restServer = WakuRestServerRef.init(restAddress, restPort).tryGet() installDebugApiHandlers(restServer.router, node) restServer.start() diff --git a/tests/wakunode_rest/test_rest_filter.nim b/tests/wakunode_rest/test_rest_filter.nim index b86bb89258..10a2d5b8f1 100644 --- a/tests/wakunode_rest/test_rest_filter.nim +++ b/tests/wakunode_rest/test_rest_filter.nim @@ -39,8 +39,8 @@ proc testWakuNode(): WakuNode = type RestFilterTest = object serviceNode: WakuNode subscriberNode: WakuNode - restServer: RestServerRef - restServerForService: RestServerRef + restServer: WakuRestServerRef + restServerForService: WakuRestServerRef messageCache: MessageCache client: RestClientRef clientTwdServiceNode: RestClientRef @@ -61,10 +61,10 @@ proc init(T: type RestFilterTest): Future[T] {.async.} = let restPort = Port(58011) let restAddress = parseIpAddress("127.0.0.1") - testSetup.restServer = RestServerRef.init(restAddress, restPort).tryGet() + testSetup.restServer = WakuRestServerRef.init(restAddress, restPort).tryGet() let restPort2 = Port(58012) - testSetup.restServerForService = RestServerRef.init(restAddress, restPort2).tryGet() + testSetup.restServerForService = WakuRestServerRef.init(restAddress, restPort2).tryGet() # through this one we will see if messages are pushed according to our content topic sub testSetup.messageCache = MessageCache.init() diff --git a/tests/wakunode_rest/test_rest_health.nim b/tests/wakunode_rest/test_rest_health.nim index 9560384a02..5937b8dba2 100644 --- a/tests/wakunode_rest/test_rest_health.nim +++ b/tests/wakunode_rest/test_rest_health.nim @@ -44,7 +44,7 @@ suite "Waku v2 REST API - health": let restPort = Port(58001) let restAddress = parseIpAddress("0.0.0.0") - let restServer = RestServerRef.init(restAddress, restPort).tryGet() + let restServer = WakuRestServerRef.init(restAddress, restPort).tryGet() installHealthApiHandler(restServer.router, node) restServer.start() diff --git a/tests/wakunode_rest/test_rest_legacy_filter.nim b/tests/wakunode_rest/test_rest_legacy_filter.nim index fe82d8117b..f7de833720 100644 --- a/tests/wakunode_rest/test_rest_legacy_filter.nim +++ b/tests/wakunode_rest/test_rest_legacy_filter.nim @@ -38,7 +38,7 @@ proc testWakuNode(): WakuNode = type RestFilterTest = object filterNode: WakuNode clientNode: WakuNode - restServer: RestServerRef + restServer: WakuRestServerRef messageCache: MessageCache client: RestClientRef @@ -58,7 +58,7 @@ proc setupRestFilter(): Future[RestFilterTest] {.async.} = let restPort = Port(58011) let restAddress = parseIpAddress("0.0.0.0") - result.restServer = RestServerRef.init(restAddress, restPort).tryGet() + result.restServer = WakuRestServerRef.init(restAddress, restPort).tryGet() result.messageCache = MessageCache.init() installLegacyFilterRestApiHandlers(result.restServer.router diff --git a/tests/wakunode_rest/test_rest_lightpush.nim b/tests/wakunode_rest/test_rest_lightpush.nim index 876be7c642..34dc40dd2a 100644 --- a/tests/wakunode_rest/test_rest_lightpush.nim +++ b/tests/wakunode_rest/test_rest_lightpush.nim @@ -39,7 +39,7 @@ type RestLightPushTest = object serviceNode: WakuNode pushNode: WakuNode consumerNode: WakuNode - restServer: RestServerRef + restServer: WakuRestServerRef client: RestClientRef @@ -71,7 +71,7 @@ proc init(T: type RestLightPushTest): Future[T] {.async.} = let restPort = Port(58011) let restAddress = parseIpAddress("127.0.0.1") - testSetup.restServer = RestServerRef.init(restAddress, restPort).tryGet() + testSetup.restServer = WakuRestServerRef.init(restAddress, restPort).tryGet() installLightPushRequestHandler(testSetup.restServer.router, testSetup.pushNode) diff --git a/tests/wakunode_rest/test_rest_relay.nim b/tests/wakunode_rest/test_rest_relay.nim index 0e0f40424a..9ec2485af5 100644 --- a/tests/wakunode_rest/test_rest_relay.nim +++ b/tests/wakunode_rest/test_rest_relay.nim @@ -43,9 +43,9 @@ suite "Waku v2 Rest API - Relay": var restPort = Port(0) let restAddress = parseIpAddress("0.0.0.0") - let restServer = RestServerRef.init(restAddress, restPort).tryGet() + let restServer = WakuRestServerRef.init(restAddress, restPort).tryGet() - restPort = restServer.server.address.port # update with bound port for client use + restPort = restServer.httpServer.address.port # update with bound port for client use let cache = MessageCache.init() @@ -93,9 +93,9 @@ suite "Waku v2 Rest API - Relay": var restPort = Port(0) let restAddress = parseIpAddress("0.0.0.0") - let restServer = RestServerRef.init(restAddress, restPort).tryGet() + let restServer = WakuRestServerRef.init(restAddress, restPort).tryGet() - restPort = restServer.server.address.port # update with bound port for client use + restPort = restServer.httpServer.address.port # update with bound port for client use let cache = MessageCache.init() cache.pubsubSubscribe("pubsub-topic-1") @@ -147,12 +147,12 @@ suite "Waku v2 Rest API - Relay": var restPort = Port(0) let restAddress = parseIpAddress("0.0.0.0") - let restServer = RestServerRef.init(restAddress, restPort).tryGet() + let restServer = WakuRestServerRef.init(restAddress, restPort).tryGet() - restPort = restServer.server.address.port # update with bound port for client use + restPort = restServer.httpServer.address.port # update with bound port for client use let pubSubTopic = "/waku/2/default-waku/proto" - + var messages = @[ fakeWakuMessage(contentTopic = "content-topic-x", payload = toBytes("TEST-1"), meta = toBytes("test-meta") ) @@ -168,7 +168,7 @@ suite "Waku v2 Rest API - Relay": meta = toBytes("test-meta")) messages.add(msg) - + let cache = MessageCache.init() cache.pubsubSubscribe(pubSubTopic) @@ -216,9 +216,9 @@ suite "Waku v2 Rest API - Relay": # RPC server setup var restPort = Port(0) let restAddress = parseIpAddress("0.0.0.0") - let restServer = RestServerRef.init(restAddress, restPort).tryGet() + let restServer = WakuRestServerRef.init(restAddress, restPort).tryGet() - restPort = restServer.server.address.port # update with bound port for client use + restPort = restServer.httpServer.address.port # update with bound port for client use let cache = MessageCache.init() @@ -258,9 +258,9 @@ suite "Waku v2 Rest API - Relay": var restPort = Port(0) let restAddress = parseIpAddress("0.0.0.0") - let restServer = RestServerRef.init(restAddress, restPort).tryGet() + let restServer = WakuRestServerRef.init(restAddress, restPort).tryGet() - restPort = restServer.server.address.port # update with bound port for client use + restPort = restServer.httpServer.address.port # update with bound port for client use let cache = MessageCache.init() @@ -306,9 +306,9 @@ suite "Waku v2 Rest API - Relay": var restPort = Port(0) let restAddress = parseIpAddress("0.0.0.0") - let restServer = RestServerRef.init(restAddress, restPort).tryGet() + let restServer = WakuRestServerRef.init(restAddress, restPort).tryGet() - restPort = restServer.server.address.port # update with bound port for client use + restPort = restServer.httpServer.address.port # update with bound port for client use let contentTopics = @[ ContentTopic("/waku/2/default-content1/proto"), @@ -354,9 +354,9 @@ suite "Waku v2 Rest API - Relay": var restPort = Port(0) let restAddress = parseIpAddress("0.0.0.0") - let restServer = RestServerRef.init(restAddress, restPort).tryGet() + let restServer = WakuRestServerRef.init(restAddress, restPort).tryGet() - restPort = restServer.server.address.port # update with bound port for client use + restPort = restServer.httpServer.address.port # update with bound port for client use let contentTopic = DefaultContentTopic @@ -370,9 +370,9 @@ suite "Waku v2 Rest API - Relay": while msg == messages[i]: msg = fakeWakuMessage(contentTopic = DefaultContentTopic, payload = toBytes("TEST-1")) - + messages.add(msg) - + let cache = MessageCache.init() cache.contentSubscribe(contentTopic) @@ -419,9 +419,9 @@ suite "Waku v2 Rest API - Relay": # RPC server setup var restPort = Port(0) let restAddress = parseIpAddress("0.0.0.0") - let restServer = RestServerRef.init(restAddress, restPort).tryGet() + let restServer = WakuRestServerRef.init(restAddress, restPort).tryGet() - restPort = restServer.server.address.port # update with bound port for client use + restPort = restServer.httpServer.address.port # update with bound port for client use let cache = MessageCache.init() installRelayApiHandlers(restServer.router, node, cache) @@ -464,9 +464,9 @@ suite "Waku v2 Rest API - Relay": # RPC server setup var restPort = Port(0) let restAddress = parseIpAddress("0.0.0.0") - let restServer = RestServerRef.init(restAddress, restPort).tryGet() + let restServer = WakuRestServerRef.init(restAddress, restPort).tryGet() - restPort = restServer.server.address.port # update with bound port for client use + restPort = restServer.httpServer.address.port # update with bound port for client use let cache = MessageCache.init() installRelayApiHandlers(restServer.router, node, cache) @@ -504,9 +504,9 @@ suite "Waku v2 Rest API - Relay": # RPC server setup var restPort = Port(0) let restAddress = parseIpAddress("0.0.0.0") - let restServer = RestServerRef.init(restAddress, restPort).tryGet() + let restServer = WakuRestServerRef.init(restAddress, restPort).tryGet() - restPort = restServer.server.address.port # update with bound port for client use + restPort = restServer.httpServer.address.port # update with bound port for client use let cache = MessageCache.init() @@ -525,7 +525,7 @@ suite "Waku v2 Rest API - Relay": contentTopic: some(DefaultContentTopic), timestamp: some(int64(2022)) )) - + # Then check: response.status == 400 @@ -549,9 +549,9 @@ suite "Waku v2 Rest API - Relay": # RPC server setup var restPort = Port(0) let restAddress = parseIpAddress("0.0.0.0") - let restServer = RestServerRef.init(restAddress, restPort).tryGet() + let restServer = WakuRestServerRef.init(restAddress, restPort).tryGet() - restPort = restServer.server.address.port # update with bound port for client use + restPort = restServer.httpServer.address.port # update with bound port for client use let cache = MessageCache.init() @@ -570,7 +570,7 @@ suite "Waku v2 Rest API - Relay": contentTopic: some(DefaultContentTopic), timestamp: some(int64(2022)) )) - + # Then check: response.status == 400 @@ -579,4 +579,4 @@ suite "Waku v2 Rest API - Relay": await restServer.stop() await restServer.closeWait() - await node.stop() \ No newline at end of file + await node.stop() diff --git a/tests/wakunode_rest/test_rest_store.nim b/tests/wakunode_rest/test_rest_store.nim index 6b617970c3..908eec571a 100644 --- a/tests/wakunode_rest/test_rest_store.nim +++ b/tests/wakunode_rest/test_rest_store.nim @@ -83,7 +83,7 @@ procSuite "Waku v2 Rest API - Store": let restPort = Port(58011) let restAddress = parseIpAddress("0.0.0.0") - let restServer = RestServerRef.init(restAddress, restPort).tryGet() + let restServer = WakuRestServerRef.init(restAddress, restPort).tryGet() installStoreApiHandlers(restServer.router, node) restServer.start() @@ -153,7 +153,7 @@ procSuite "Waku v2 Rest API - Store": let restPort = Port(58012) let restAddress = parseIpAddress("0.0.0.0") - let restServer = RestServerRef.init(restAddress, restPort).tryGet() + let restServer = WakuRestServerRef.init(restAddress, restPort).tryGet() installStoreApiHandlers(restServer.router, node) restServer.start() @@ -251,7 +251,7 @@ procSuite "Waku v2 Rest API - Store": let restPort = Port(58013) let restAddress = parseIpAddress("0.0.0.0") - let restServer = RestServerRef.init(restAddress, restPort).tryGet() + let restServer = WakuRestServerRef.init(restAddress, restPort).tryGet() installStoreApiHandlers(restServer.router, node) restServer.start() @@ -325,7 +325,7 @@ procSuite "Waku v2 Rest API - Store": let restPort = Port(58014) let restAddress = parseIpAddress("0.0.0.0") - let restServer = RestServerRef.init(restAddress, restPort).tryGet() + let restServer = WakuRestServerRef.init(restAddress, restPort).tryGet() installStoreApiHandlers(restServer.router, node) restServer.start() @@ -416,7 +416,7 @@ procSuite "Waku v2 Rest API - Store": let restPort = Port(58015) let restAddress = parseIpAddress("0.0.0.0") - let restServer = RestServerRef.init(restAddress, restPort).tryGet() + let restServer = WakuRestServerRef.init(restAddress, restPort).tryGet() installStoreApiHandlers(restServer.router, node) restServer.start() @@ -473,7 +473,7 @@ procSuite "Waku v2 Rest API - Store": let restPort = Port(58016) let restAddress = parseIpAddress("0.0.0.0") - let restServer = RestServerRef.init(restAddress, restPort).tryGet() + let restServer = WakuRestServerRef.init(restAddress, restPort).tryGet() installStoreApiHandlers(restServer.router, node) restServer.start() @@ -482,7 +482,7 @@ procSuite "Waku v2 Rest API - Store": let driver: ArchiveDriver = QueueDriver.new() let mountArchiveRes = node.mountArchive(driver) assert mountArchiveRes.isOk(), mountArchiveRes.error - + await node.mountStore() node.mountStoreClient() @@ -547,7 +547,7 @@ procSuite "Waku v2 Rest API - Store": let restPort = Port(58014) let restAddress = parseIpAddress("0.0.0.0") - let restServer = RestServerRef.init(restAddress, restPort).tryGet() + let restServer = WakuRestServerRef.init(restAddress, restPort).tryGet() installStoreApiHandlers(restServer.router, node) restServer.start() @@ -609,9 +609,9 @@ procSuite "Waku v2 Rest API - Store": var restPort = Port(0) let restAddress = parseIpAddress("0.0.0.0") - let restServer = RestServerRef.init(restAddress, restPort).tryGet() + let restServer = WakuRestServerRef.init(restAddress, restPort).tryGet() - restPort = restServer.server.address.port # update with bound port for client use + restPort = restServer.httpServer.address.port # update with bound port for client use installStoreApiHandlers(restServer.router, node) restServer.start() diff --git a/vendor/nim-presto b/vendor/nim-presto index 5ca16485e4..223aadeb82 160000 --- a/vendor/nim-presto +++ b/vendor/nim-presto @@ -1 +1 @@ -Subproject commit 5ca16485e4d74e531d50d289ebc0f869d9e6352b +Subproject commit 223aadeb82d35b57e6dae99f0b325ec6345ce7ff diff --git a/waku/waku_api/rest/origin_handler.nim b/waku/waku_api/rest/origin_handler.nim new file mode 100644 index 0000000000..fa3453a06b --- /dev/null +++ b/waku/waku_api/rest/origin_handler.nim @@ -0,0 +1,125 @@ +when (NimMajor, NimMinor) < (1, 4): + {.push raises: [Defect].} +else: + {.push raises: [].} + +import + std/[options, strutils, re], + stew/results, + stew/shims/net, + chronicles, + chronos, + chronos/apps/http/httpserver + +type + OriginHandlerMiddlewareRef* = ref object of HttpServerMiddlewareRef + allowedOriginMatcher: Option[Regex] + everyOriginAllowed: bool + + +proc isEveryOriginAllowed(maybeAllowedOrigin: Option[string]): bool = + return maybeAllowedOrigin.isSome() and maybeAllowedOrigin.get() == "*" + +proc compileOriginMatcher(maybeAllowedOrigin: Option[string]): Option[Regex] = + if maybeAllowedOrigin.isNone(): + return none(Regex) + + let allowedOrigin = maybeAllowedOrigin.get() + + if (len(allowedOrigin) == 0): + return none(Regex) + + try: + var matchOrigin : string + + if allowedOrigin == "*": + matchOrigin = r".*" + return some(re(matchOrigin, {reIgnoreCase, reExtended})) + + let allowedOrigins = allowedOrigin.split(",") + + var matchExpressions : seq[string] = @[] + + var prefix : string + for allowedOrigin in allowedOrigins: + if allowedOrigin.startsWith("http://"): + prefix = r"http:\/\/" + matchOrigin = allowedOrigin.substr(7) + elif allowedOrigin.startsWith("https://"): + prefix = r"https:\/\/" + matchOrigin = allowedOrigin.substr(8) + else: + prefix = r"https?:\/\/" + matchOrigin = allowedOrigin + + matchOrigin = matchOrigin.replace(".", r"\.") + matchOrigin = matchOrigin.replace("*", ".*") + matchOrigin = matchOrigin.replace("?", ".?") + + matchExpressions.add("^" & prefix & matchOrigin & "$") + + let finalExpression = matchExpressions.join("|") + + return some(re(finalExpression, {reIgnoreCase, reExtended})) + except RegexError: + var msg = getCurrentExceptionMsg() + error "Failed to compile regex", source=allowedOrigin, err=msg + return none(Regex) + +proc originsMatch(originHandler: OriginHandlerMiddlewareRef, + requestOrigin: string): bool = + + if originHandler.allowedOriginMatcher.isNone(): + return false + + return requestOrigin.match(originHandler.allowedOriginMatcher.get()) + +proc originMiddlewareProc( + middleware: HttpServerMiddlewareRef, + reqfence: RequestFence, + nextHandler: HttpProcessCallback2 + ): Future[HttpResponseRef] {.async: (raises: [CancelledError]).} = + if reqfence.isErr(): + # Ignore request errors that detected before our middleware. + # Let final handler deal with it. + return await nextHandler(reqfence) + + let self = OriginHandlerMiddlewareRef(middleware) + let request = reqfence.get() + var reqHeaders = request.headers + var response = request.getResponse() + + if self.allowedOriginMatcher.isSome(): + let origin = reqHeaders.getList("Origin") + try: + if origin.len == 1: + if self.everyOriginAllowed: + response.addHeader("Access-Control-Allow-Origin", "*") + elif self.originsMatch(origin[0]): + # The Vary: Origin header to must be set to prevent + # potential cache poisoning attacks: + # https://textslashplain.com/2018/08/02/cors-and-vary/ + response.addHeader("Vary", "Origin") + response.addHeader("Access-Control-Allow-Origin", origin[0]) + else: + return await request.respond(Http403, "Origin not allowed") + elif origin.len == 0: + discard + elif origin.len > 1: + return await request.respond(Http400, "Only a single Origin header must be specified") + except HttpWriteError as exc: + # We use default error handler if we unable to send response. + return defaultResponse(exc) + + # Calling next handler. + return await nextHandler(reqfence) + +proc new*(t: typedesc[OriginHandlerMiddlewareRef], + allowedOrigin: Option[string] = none(string) + ): HttpServerMiddlewareRef = + + let middleware = + OriginHandlerMiddlewareRef(allowedOriginMatcher: compileOriginMatcher(allowedOrigin), + everyOriginAllowed: isEveryOriginAllowed(allowedOrigin), + handler: originMiddlewareProc) + return HttpServerMiddlewareRef(middleware) diff --git a/waku/waku_api/rest/server.nim b/waku/waku_api/rest/server.nim index ac73beb54a..95a76d848d 100644 --- a/waku/waku_api/rest/server.nim +++ b/waku/waku_api/rest/server.nim @@ -8,11 +8,23 @@ import stew/shims/net, chronicles, chronos, - presto + chronos/apps/http/httpserver, + presto, + presto/middleware, + presto/servercommon + +import + ./origin_handler -type RestServerResult*[T] = Result[T, string] +type + RestServerResult*[T] = Result[T, string] + WakuRestServer* = object of RootObj + router*: RestRouter + httpServer*: HttpServerRef + + WakuRestServerRef* = ref WakuRestServer ### Configuration @@ -46,7 +58,59 @@ proc default*(T: type RestServerConf): T = ### Initialization -proc getRouter(allowedOrigin: Option[string]): RestRouter = +proc new*(t: typedesc[WakuRestServerRef], + router: RestRouter, + address: TransportAddress, + serverIdent: string = PrestoIdent, + serverFlags = {HttpServerFlags.NotifyDisconnect}, + socketFlags: set[ServerFlags] = {ReuseAddr}, + serverUri = Uri(), + maxConnections: int = -1, + backlogSize: int = DefaultBacklogSize, + bufferSize: int = 4096, + httpHeadersTimeout = 10.seconds, + maxHeadersSize: int = 8192, + maxRequestBodySize: int = 1_048_576, + requestErrorHandler: RestRequestErrorHandler = nil, + dualstack = DualStackType.Auto, + allowedOrigin: Option[string] = none(string) + ): RestServerResult[WakuRestServerRef] = + var server = WakuRestServerRef(router: router) + + let restMiddleware = RestServerMiddlewareRef.new(router = server.router, errorHandler = requestErrorHandler) + let originHandlerMiddleware = OriginHandlerMiddlewareRef.new(allowedOrigin) + + let middlewares = [originHandlerMiddleware, + restMiddleware] + + ## This must be empty and needed only to confirm original initialization requirements of + ## the RestHttpServer now combining old and new middleware approach. + proc defaultProcessCallback(rf: RequestFence): Future[HttpResponseRef] {. + async: (raises: [CancelledError]).} = + discard + + + let sres = HttpServerRef.new(address + , defaultProcessCallback + , serverFlags + , socketFlags + , serverUri + , serverIdent + , maxConnections + , bufferSize + , backlogSize + , httpHeadersTimeout + , maxHeadersSize + , maxRequestBodySize + , dualstack = dualstack + , middlewares = middlewares) + if sres.isOk(): + server.httpServer = sres.get() + ok(server) + else: + err(sres.error) + +proc getRouter(): RestRouter = # TODO: Review this `validate` method. Check in nim-presto what is this used for. proc validate(pattern: string, value: string): int = ## This is rough validation procedure which should be simple and fast, @@ -54,9 +118,10 @@ proc getRouter(allowedOrigin: Option[string]): RestRouter = if pattern.startsWith("{") and pattern.endsWith("}"): 0 else: 1 - RestRouter.init(validate, allowedOrigin = allowedOrigin) + # disable allowed origin handling by presto, we add our own handling as middleware + RestRouter.init(validate, allowedOrigin = none(string)) -proc init*(T: type RestServerRef, +proc init*(T: type WakuRestServerRef, ip: IpAddress, port: Port, allowedOrigin=none(string), conf=RestServerConf.default(), @@ -73,28 +138,64 @@ proc init*(T: type RestServerRef, maxHeadersSize = conf.maxRequestHeadersSize * 1024 maxRequestBodySize = conf.maxRequestBodySize * 1024 - let router = getRouter(allowedOrigin) + let router = getRouter() - var res: RestResult[RestServerRef] try: - res = RestServerRef.new( - router, - address, - serverFlags = serverFlags, - httpHeadersTimeout = headersTimeout, - maxHeadersSize = maxHeadersSize, - maxRequestBodySize = maxRequestBodySize, - requestErrorHandler = requestErrorHandler - ) + return WakuRestServerRef.new( + router, + address, + serverFlags = serverFlags, + httpHeadersTimeout = headersTimeout, + maxHeadersSize = maxHeadersSize, + maxRequestBodySize = maxRequestBodySize, + requestErrorHandler = requestErrorHandler, + allowedOrigin = allowedOrigin + ) except CatchableError: return err(getCurrentExceptionMsg()) - # RestResult error type is cstring, so we need to map it to string - res.mapErr(proc(err: cstring): string = $err) - proc newRestHttpServer*(ip: IpAddress, port: Port, allowedOrigin=none(string), conf=RestServerConf.default(), requestErrorHandler: RestRequestErrorHandler = nil): - RestServerResult[RestServerRef] = - RestServerRef.init(ip, port, allowedOrigin, conf, requestErrorHandler) + RestServerResult[WakuRestServerRef] = + WakuRestServerRef.init(ip, port, allowedOrigin, conf, requestErrorHandler) + +proc localAddress*(rs: WakuRestServerRef): TransportAddress = + ## Returns `rs` bound local socket address. + rs.httpServer.instance.localAddress() + +proc state*(rs: WakuRestServerRef): RestServerState = + ## Returns current REST server's state. + case rs.httpServer.state + of HttpServerState.ServerClosed: + RestServerState.Closed + of HttpServerState.ServerStopped: + RestServerState.Stopped + of HttpServerState.ServerRunning: + RestServerState.Running + +proc start*(rs: WakuRestServerRef) = + ## Starts REST server. + rs.httpServer.start() + notice "REST service started", address = $rs.localAddress() + +proc stop*(rs: WakuRestServerRef) {.async: (raises: []).} = + ## Stop REST server from accepting new connections. + await rs.httpServer.stop() + notice "REST service stopped", address = $rs.localAddress() + +proc drop*(rs: WakuRestServerRef): Future[void] {. + async: (raw: true, raises: []).} = + ## Drop all pending connections. + rs.httpServer.drop() + +proc closeWait*(rs: WakuRestServerRef) {.async: (raises: []).} = + ## Stop REST server and drop all the pending connections. + await rs.httpServer.closeWait() + notice "REST service closed", address = $rs.localAddress() + +proc join*(rs: WakuRestServerRef): Future[void] {. + async: (raw: true, raises: [CancelledError]).} = + ## Wait until REST server will not be closed. + rs.httpServer.join() From 55ff6674780f35a453ec312cdb96a5c0f4f1212b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20Soko=C5=82owski?= Date: Tue, 27 Feb 2024 14:13:52 +0100 Subject: [PATCH 247/274] chore(ci): use git describe for image version MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This way we get both the full commit and the version, whether it's a proper release or not. Signed-off-by: Jakub Sokołowski --- Dockerfile | 1 + Makefile | 3 ++- ci/Jenkinsfile.release | 6 ++++-- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index 52459f6227..1cf659b1d3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -34,6 +34,7 @@ LABEL maintainer="jakub@status.im" LABEL source="https://github.com/waku-org/nwaku" LABEL description="Wakunode: Waku client" LABEL commit="unknown" +LABEL version="unknown" # DevP2P, LibP2P, and JSON RPC ports EXPOSE 30303 60000 8545 diff --git a/Makefile b/Makefile index c1745d535b..2125f5d85c 100644 --- a/Makefile +++ b/Makefile @@ -264,7 +264,8 @@ docker-image: --build-arg="NIMFLAGS=$(DOCKER_IMAGE_NIMFLAGS)" \ --build-arg="NIM_COMMIT=$(DOCKER_NIM_COMMIT)" \ --build-arg="LOG_LEVEL=$(LOG_LEVEL)" \ - --label="commit=$(GIT_VERSION)" \ + --label="commit=$(shell git rev-parse HEAD)" \ + --label="version=$(GIT_VERSION)" \ --target $(TARGET) \ --tag $(DOCKER_IMAGE_NAME) . diff --git a/ci/Jenkinsfile.release b/ci/Jenkinsfile.release index 8e51e88730..e4c42ed99b 100644 --- a/ci/Jenkinsfile.release +++ b/ci/Jenkinsfile.release @@ -1,5 +1,5 @@ #!/usr/bin/env groovy -library 'status-jenkins-lib@v1.8.6' +library 'status-jenkins-lib@v1.8.9' pipeline { agent { label 'linux' } @@ -66,7 +66,9 @@ pipeline { steps { script { image = docker.build( "${params.IMAGE_NAME}:${params.IMAGE_TAG ?: env.GIT_COMMIT.take(8)}", - "--label=commit='${env.GIT_COMMIT.take(8)}' " + + "--label=build='${env.BUILD_URL}' " + + "--label=commit='${git.commit()}' " + + "--label=version='${git.describe()}' " + "--build-arg=MAKE_TARGET='${params.MAKE_TARGET}' " + "--build-arg=NIMFLAGS='${params.NIMFLAGS} -d:postgres ' " + "--build-arg=LOG_LEVEL='${params.LOWEST_LOG_LEVEL_ALLOWED}' " + From c994ee049b0c158f5816b7567e292cd08bc96bac Mon Sep 17 00:00:00 2001 From: Alvaro Revuelta Date: Thu, 29 Feb 2024 23:35:27 +0100 Subject: [PATCH 248/274] chore: remove json rpc (#2416) --- apps/chat2bridge/chat2bridge.nim | 33 +-- apps/chat2bridge/config_chat2bridge.nim | 15 -- apps/wakunode2/app.nim | 57 ---- apps/wakunode2/external_config.nim | 27 -- docs/api/node.md | 4 - docs/api/rest-api.md | 10 +- docs/faq.md | 2 - docs/operators/how-to/run.md | 29 +-- docs/operators/overview.md | 13 +- docs/tutorial/jsonrpc-api.md | 246 ------------------ tests/all_tests_waku.nim | 8 - tests/testlib/wakunode.nim | 1 - tests/wakunode_jsonrpc/test_all.nim | 8 - tests/wakunode_jsonrpc/test_jsonrpc_admin.nim | 194 -------------- tests/wakunode_jsonrpc/test_jsonrpc_debug.nim | 54 ---- .../wakunode_jsonrpc/test_jsonrpc_filter.nim | 79 ------ tests/wakunode_jsonrpc/test_jsonrpc_store.nim | 194 -------------- waku/waku_api.nim | 3 +- waku/waku_api/jsonrpc/admin/callsigs.nim | 4 - waku/waku_api/jsonrpc/admin/client.nim | 14 - waku/waku_api/jsonrpc/admin/handlers.nim | 71 ----- waku/waku_api/jsonrpc/admin/types.nim | 10 - waku/waku_api/jsonrpc/debug/callsigs.nim | 3 - waku/waku_api/jsonrpc/debug/client.nim | 14 - waku/waku_api/jsonrpc/debug/handlers.nim | 30 --- waku/waku_api/jsonrpc/filter/callsigs.nim | 5 - waku/waku_api/jsonrpc/filter/client.nim | 15 -- waku/waku_api/jsonrpc/filter/handlers.nim | 83 ------ waku/waku_api/jsonrpc/hexstrings.nim | 6 - waku/waku_api/jsonrpc/marshalling.nim | 19 -- waku/waku_api/jsonrpc/message.nim | 49 ---- waku/waku_api/jsonrpc/relay/callsigs.nim | 14 - waku/waku_api/jsonrpc/relay/client.nim | 17 -- waku/waku_api/jsonrpc/store/callsigs.nim | 4 - waku/waku_api/jsonrpc/store/client.nim | 19 -- waku/waku_api/jsonrpc/store/handlers.nim | 85 ------ waku/waku_api/jsonrpc/store/types.nim | 24 -- 37 files changed, 8 insertions(+), 1455 deletions(-) delete mode 100644 docs/tutorial/jsonrpc-api.md delete mode 100644 tests/wakunode_jsonrpc/test_all.nim delete mode 100644 tests/wakunode_jsonrpc/test_jsonrpc_admin.nim delete mode 100644 tests/wakunode_jsonrpc/test_jsonrpc_debug.nim delete mode 100644 tests/wakunode_jsonrpc/test_jsonrpc_filter.nim delete mode 100644 tests/wakunode_jsonrpc/test_jsonrpc_store.nim delete mode 100644 waku/waku_api/jsonrpc/admin/callsigs.nim delete mode 100644 waku/waku_api/jsonrpc/admin/client.nim delete mode 100644 waku/waku_api/jsonrpc/admin/handlers.nim delete mode 100644 waku/waku_api/jsonrpc/admin/types.nim delete mode 100644 waku/waku_api/jsonrpc/debug/callsigs.nim delete mode 100644 waku/waku_api/jsonrpc/debug/client.nim delete mode 100644 waku/waku_api/jsonrpc/debug/handlers.nim delete mode 100644 waku/waku_api/jsonrpc/filter/callsigs.nim delete mode 100644 waku/waku_api/jsonrpc/filter/client.nim delete mode 100644 waku/waku_api/jsonrpc/filter/handlers.nim delete mode 100644 waku/waku_api/jsonrpc/hexstrings.nim delete mode 100644 waku/waku_api/jsonrpc/marshalling.nim delete mode 100644 waku/waku_api/jsonrpc/message.nim delete mode 100644 waku/waku_api/jsonrpc/relay/callsigs.nim delete mode 100644 waku/waku_api/jsonrpc/relay/client.nim delete mode 100644 waku/waku_api/jsonrpc/store/callsigs.nim delete mode 100644 waku/waku_api/jsonrpc/store/client.nim delete mode 100644 waku/waku_api/jsonrpc/store/handlers.nim delete mode 100644 waku/waku_api/jsonrpc/store/types.nim diff --git a/apps/chat2bridge/chat2bridge.nim b/apps/chat2bridge/chat2bridge.nim index 70f0f6db57..38177118bc 100644 --- a/apps/chat2bridge/chat2bridge.nim +++ b/apps/chat2bridge/chat2bridge.nim @@ -222,29 +222,7 @@ proc stop*(cmb: Chat2MatterBridge) {.async: (raises: [Exception]).} = when isMainModule: import ../../../waku/common/utils/nat, - ../../waku/waku_api/message_cache, - ../../waku/waku_api/jsonrpc/debug/handlers as debug_api, - ../../waku/waku_api/jsonrpc/filter/handlers as filter_api, - ../../waku/waku_api/jsonrpc/relay/handlers as relay_api, - ../../waku/waku_api/jsonrpc/store/handlers as store_api - - - proc startV2Rpc(node: WakuNode, rpcServer: RpcHttpServer, conf: Chat2MatterbridgeConf) {.raises: [Exception].} = - installDebugApiHandlers(node, rpcServer) - - # Install enabled API handlers: - if conf.relay: - let cache = MessageCache.init(capacity=30) - installRelayApiHandlers(node, rpcServer, cache) - - if conf.filter: - let messageCache = MessageCache.init(capacity=30) - installFilterApiHandlers(node, rpcServer, messageCache) - - if conf.store: - installStoreApiHandlers(node, rpcServer) - - rpcServer.start() + ../../waku/waku_api/message_cache let rng = newRng() @@ -309,15 +287,6 @@ when isMainModule: else: error "Error parsing conf.filternode", error = filterPeer.error - if conf.rpc: - let ta = initTAddress(conf.rpcAddress, - Port(conf.rpcPort + conf.portsShift)) - var rpcServer = newRpcHttpServer([ta]) - # Waku v2 rpc - startV2Rpc(bridge.nodev2, rpcServer, conf) - - rpcServer.start() - if conf.metricsServer: let address = conf.metricsServerAddress diff --git a/apps/chat2bridge/config_chat2bridge.nim b/apps/chat2bridge/config_chat2bridge.nim index 6b45944146..c6ccdd5b4b 100644 --- a/apps/chat2bridge/config_chat2bridge.nim +++ b/apps/chat2bridge/config_chat2bridge.nim @@ -35,21 +35,6 @@ type "Must be one of: any, none, upnp, pmp, extip:" defaultValue: "any" .}: string - rpc* {. - desc: "Enable Waku RPC server" - defaultValue: false - name: "rpc" .}: bool - - rpcAddress* {. - desc: "Listening address of the RPC server", - defaultValue: parseIpAddress("127.0.0.1") - name: "rpc-address" }: IpAddress - - rpcPort* {. - desc: "Listening port of the RPC server" - defaultValue: 8545 - name: "rpc-port" .}: uint16 - metricsServer* {. desc: "Enable the metrics server" defaultValue: false diff --git a/apps/wakunode2/app.nim b/apps/wakunode2/app.nim index 10a91abf34..b61aa58978 100644 --- a/apps/wakunode2/app.nim +++ b/apps/wakunode2/app.nim @@ -15,7 +15,6 @@ import libp2p/protocols/pubsub/gossipsub, libp2p/peerid, eth/keys, - json_rpc/rpcserver, presto, metrics, metrics/chronos_httpserver @@ -42,11 +41,6 @@ import ../../waku/waku_api/rest/store/handlers as rest_store_api, ../../waku/waku_api/rest/health/handlers as rest_health_api, ../../waku/waku_api/rest/admin/handlers as rest_admin_api, - ../../waku/waku_api/jsonrpc/admin/handlers as rpc_admin_api, - ../../waku/waku_api/jsonrpc/debug/handlers as rpc_debug_api, - ../../waku/waku_api/jsonrpc/filter/handlers as rpc_filter_api, - ../../waku/waku_api/jsonrpc/relay/handlers as rpc_relay_api, - ../../waku/waku_api/jsonrpc/store/handlers as rpc_store_api, ../../waku/waku_archive, ../../waku/waku_dnsdisc, ../../waku/waku_enr/sharding, @@ -83,7 +77,6 @@ type node: WakuNode - rpcServer: Option[RpcHttpServer] restServer: Option[WakuRestServerRef] metricsServer: Option[MetricsHttpServerRef] @@ -793,46 +786,6 @@ proc startRestServer(app: App, ok(server) -proc startRpcServer(app: App, address: IpAddress, port: Port, conf: WakuNodeConf): AppResult[RpcHttpServer] = - let ta = initTAddress(address, port) - - var server: RpcHttpServer - try: - server = newRpcHttpServer([ta]) - except CatchableError: - return err("failed to init JSON-RPC server: " & getCurrentExceptionMsg()) - - installDebugApiHandlers(app.node, server) - - if conf.relay: - let cache = MessageCache.init(capacity=50) - - let handler = messageCacheHandler(cache) - - for pubsubTopic in conf.pubsubTopics: - cache.pubsubSubscribe(pubsubTopic) - app.node.subscribe((kind: PubsubSub, topic: pubsubTopic), some(handler)) - - for contentTopic in conf.contentTopics: - cache.contentSubscribe(contentTopic) - app.node.subscribe((kind: ContentSub, topic: contentTopic), some(handler)) - - installRelayApiHandlers(app.node, server, cache) - - if conf.filternode != "": - let filterMessageCache = MessageCache.init(capacity=50) - installFilterApiHandlers(app.node, server, filterMessageCache) - - installStoreApiHandlers(app.node, server) - - if conf.rpcAdmin: - installAdminApiHandlers(app.node, server) - - server.start() - info "RPC Server started", address=ta - - ok(server) - proc startMetricsServer(serverIp: IpAddress, serverPort: Port): AppResult[MetricsHttpServerRef] = info "Starting metrics HTTP server", serverIp= $serverIp, serverPort= $serverPort @@ -854,13 +807,6 @@ proc startMetricsLogging(): AppResult[void] = ok() proc setupMonitoringAndExternalInterfaces*(app: var App): AppResult[void] = - if app.conf.rpc: - let startRpcServerRes = startRpcServer(app, app.conf.rpcAddress, Port(app.conf.rpcPort + app.conf.portsShift), app.conf) - if startRpcServerRes.isErr(): - error "6/7 Starting JSON-RPC server failed. Continuing in current state.", error=startRpcServerRes.error - else: - app.rpcServer = some(startRpcServerRes.value) - if app.conf.rest: let startRestServerRes = startRestServer(app, app.conf.restAddress, Port(app.conf.restPort + app.conf.portsShift), app.conf) if startRestServerRes.isErr(): @@ -890,9 +836,6 @@ proc stop*(app: App): Future[void] {.async: (raises: [Exception]).} = if app.restServer.isSome(): await app.restServer.get().stop() - if app.rpcServer.isSome(): - await app.rpcServer.get().stop() - if app.metricsServer.isSome(): await app.metricsServer.get().stop() diff --git a/apps/wakunode2/external_config.nim b/apps/wakunode2/external_config.nim index e9c1d1e9f3..23be15bb47 100644 --- a/apps/wakunode2/external_config.nim +++ b/apps/wakunode2/external_config.nim @@ -360,33 +360,6 @@ type defaultValue: "" name: "lightpushnode" }: string - ## JSON-RPC config - - rpc* {. - desc: "Enable Waku JSON-RPC server: true|false", - defaultValue: true - name: "rpc" }: bool - - rpcAddress* {. - desc: "Listening address of the JSON-RPC server.", - defaultValue: parseIpAddress("127.0.0.1") - name: "rpc-address" }: IpAddress - - rpcPort* {. - desc: "Listening port of the JSON-RPC server.", - defaultValue: 8545 - name: "rpc-port" }: uint16 - - rpcAdmin* {. - desc: "Enable access to JSON-RPC Admin API: true|false", - defaultValue: false - name: "rpc-admin" }: bool - - rpcPrivate* {. - desc: "Enable access to JSON-RPC Private API: true|false", - defaultValue: false - name: "rpc-private" }: bool - ## REST HTTP config rest* {. diff --git a/docs/api/node.md b/docs/api/node.md index af5cfa229b..ab1580f0b5 100644 --- a/docs/api/node.md +++ b/docs/api/node.md @@ -88,10 +88,6 @@ proc resume*(node: WakuNode, peerList: Option[seq[PeerInfo]]) = ## ``` -## JSON RPC - -TODO To specify - ## REST API diff --git a/docs/api/rest-api.md b/docs/api/rest-api.md index bffbf328cd..6e8393b843 100644 --- a/docs/api/rest-api.md +++ b/docs/api/rest-api.md @@ -1,6 +1,6 @@ ## HTTP REST API -Similar to the JSON-RPC API, the HTTP REST API consists of a set of methods operating on the Waku Node remotely over HTTP. +The HTTP REST API consists of a set of methods operating on the Waku Node remotely over HTTP. This API is divided in different _namespaces_ which group a set of resources: @@ -41,14 +41,6 @@ A particular OpenAPI spec can be easily imported into [Postman](https://www.post #### [`get_waku_v2_debug_v1_info`](https://rfc.vac.dev/spec/16/#get_waku_v2_debug_v1_info) -JSON-RPC call: - -```bash -curl -d '{"jsonrpc":"2.0","method":"get_waku_v2_debug_v1_info","params":[],"id":1}' -H 'Content-Type: application/json' localhost:8645 -s | jq -``` - -Equivalent call for the REST API: - ```bash curl http://localhost:8645/debug/v1/info -s | jq ``` diff --git a/docs/faq.md b/docs/faq.md index 84f53ccb35..c4888f044d 100644 --- a/docs/faq.md +++ b/docs/faq.md @@ -6,8 +6,6 @@ Grep for "Listening on". It should be printed at INFO level at the beginning. E. `Oct 7, 2020 @ 23:17:00.383INF 2020-10-07 23:17:00.375+00:00 Listening on topics="wakunode" tid=1 file=wakunode2.nim:140 full=/ip4/0.0.0.0/tcp/60000/p2p/16Uiu2HAmJb2e28qLXxT5kZxVUUoJt72EMzNGXB47Rxx5hw3q4YjS` -Or use the [JSON-RPC API](https://github.com/waku-org/nwaku/blob/master/docs/tutorial/jsonrpc-api.md#perform-a-health-check). - ## How do I find out node addresses at the test cluster? The easiest way is to use `jq` and query the fleets registry that Status operates: diff --git a/docs/operators/how-to/run.md b/docs/operators/how-to/run.md index 311087b1ec..c8fa0e63e2 100644 --- a/docs/operators/how-to/run.md +++ b/docs/operators/how-to/run.md @@ -57,27 +57,10 @@ and websocket address ``` You can also query a running node for its listening addresses -using a [`get_waku_v2_debug_v1_info` JSON-RPC API](https://rfc.vac.dev/spec/16/#get_waku_v2_debug_v1_info) call. +using the REST API. -For example - -```sh -curl -d '{"jsonrpc":"2.0","id":"id","method":"get_waku_v2_debug_v1_info", "params":[]}' --header "Content-Type: application/json" http://localhost:8545 -``` - -returns a response similar to - -```json -{ - "jsonrpc": "2.0", - "id": "id", - "result": { - "listenAddresses": [ - "/ip4/0.0.0.0/tcp/60000/p2p/16Uiu2HAmLU5Nwng9dWFZwM2DgJ5QGcUuDnefJyHJiXUCVaprhgL4" - ], - "enrUri": "enr:-IO4QDxToTg86pPCK2KvMeVCXC2ADVZWrxXSvNZeaoa0JhShbM5qed69RQz1s1mWEEqJ3aoklo_7EU9iIBcPMVeKlCQBgmlkgnY0iXNlY3AyNTZrMaEDdBHK1Gx6y_zv5DVw5Qb3DtSOMmVHTZO1WSORrF2loL2DdWRwgiMohXdha3UyAw" - } -} +```bash +curl http://localhost:8645/debug/v1/info -s | jq ``` ## Finding your discoverable ENR address(es) @@ -210,8 +193,4 @@ See our [store configuration tutorial](./configure-store.md) for more. ## Interact with a running nwaku node -A running nwaku node can be interacted with using the [Waku v2 JSON RPC API](https://rfc.vac.dev/spec/16/). - -> **Note:** Private and Admin API functionality are disabled by default. -To configure a nwaku node with these enabled, -use the `--rpc-admin:true` and `--rpc-private:true` CLI options. \ No newline at end of file +A running nwaku node can be interacted with using the [REST API](https://github.com/waku-org/nwaku/blob/master/docs/api/rest-api.md). \ No newline at end of file diff --git a/docs/operators/overview.md b/docs/operators/overview.md index 28ca9ff0f8..f43652ae67 100644 --- a/docs/operators/overview.md +++ b/docs/operators/overview.md @@ -29,18 +29,7 @@ or [configure](./how-to/configure.md) the node for more advanced use cases. ## 3. Interact -A running nwaku node can be interacted with using the [Waku v2 JSON RPC API](https://rfc.vac.dev/spec/16/). - -> **Note:** Private and Admin API functionality are disabled by default. -To configure a nwaku node with these enabled, -use the `--rpc-admin:true` and `--rpc-private:true` CLI options. - -```bash -curl -d '{"jsonrpc":"2.0","method":"get_waku_v2_debug_v1_info","params":[],"id":1}' -H 'Content-Type: application/json' localhost:8546 -s | jq -``` - - -Or using the [Waku v2 HTTP REST API](../api/v2/rest-api.md): +A running nwaku node can be interacted with using the [REST API](../api/v2/rest-api.md). > **Note:** REST API functionality is in ALPHA and therefore it is disabled by default. To configure a nwaku node with this enabled, use the `--rest:true` CLI option. diff --git a/docs/tutorial/jsonrpc-api.md b/docs/tutorial/jsonrpc-api.md deleted file mode 100644 index 0391ab3df2..0000000000 --- a/docs/tutorial/jsonrpc-api.md +++ /dev/null @@ -1,246 +0,0 @@ -# Waku v2 JSON-RPC API Basic Tutorial - -## Background - -This tutorial provides step-by-step instructions on how to start a `wakunode2` with the [JSON-RPC API](https://rfc.vac.dev/spec/16/) for basic peer-to-peer messaging using publish-subscribe (pubsub) patterns. -Libp2p pubsub-functionality is provided in Waku v2 and accessed via the [Relay API](https://rfc.vac.dev/spec/16/#relay-api). -Debugging methods are accessed via the [Debug API](https://rfc.vac.dev/spec/16/#debug-api). - -## Setup - -Ensure you have built and run `wakunode2` as per [these instructions](https://github.com/waku-org/nwaku). - -By default a running `wakunode2` will expose a JSON-RPC API on the localhost (`127.0.0.1`) at port `8545`. -It is possible to change this configuration by setting the `rpc-address` and `rpc-port` options when running the node: - -``` -./build/wakunode2 --rpc-address:127.0.1.1 --rpc-port:8546 -``` - -It is also possible to connect to one of our [testnets](https://github.com/waku-org/nwaku/blob/master/docs/tutorial/dingpu.md) by specifying a `staticnode` when running the node: - -``` -./build/wakunode2 --staticnode: -``` - -where `` is the multiaddress of a testnet node, -e.g. the dingpu cluster node at - -``` -/ip4/134.209.139.210/tcp/60000/p2p/16Uiu2HAmJb2e28qLXxT5kZxVUUoJt72EMzNGXB47Rxx5hw3q4YjS -``` - -## Calling JSON-RPC methods - -One way to access JSON-RPC methods is by using the `cURL` command line tool. -For example: - -``` -curl -d '{"jsonrpc":"2.0","id":"id","method":"", "params":[]}' --header "Content-Type: application/json" http://localhost:8545 -``` - -where `` is the name of the JSON-RPC method to call and `` is a comma-separated `Array` of parameters to pass as arguments to the selected method. -This assumes that the API is exposed on the `localhost` at port `8545` (the default configuration). -See [this page](https://rfc.vac.dev/spec/16/) for a full list of supported methods and parameters. - -## Perform a health check - -You can perform a basic health check to verify that the `wakunode2` and API is up and running by calling the [`get_waku_v2_debug_v1_info` method](https://rfc.vac.dev/spec/16/#get_waku_v2_debug_v1_info) with no parameters. -A successful response contains the node's [`multiaddress`](https://docs.libp2p.io/concepts/addressing/). - -### Example request - -```json -{ - "jsonrpc": "2.0", - "id": "id", - "method": "get_waku_v2_debug_v1_info", - "params": [] -} -``` - -### Example response - -The response - -```json -{ - "jsonrpc": "2.0", - "id": "id", - "result": { - "listenAddresses": [ - "/ip4/0.0.0.0/tcp/60000/p2p/16Uiu2HAmPv6Bq8kcmnM6gpLnjLwx3YuxN4B6AhWnN2bM9jutSS2Q" - ] - } -} -``` - -indicates that the `wakunode2` is running and provides its multiaddress. - -## Subscribe to a pubsub topic - -You can subscribe to pubsub topics by calling the [`post_waku_v2_relay_v1_subscriptions` method](https://rfc.vac.dev/spec/16/#post_waku_v2_relay_v1_subscriptions) with an array of topic(s) as parameter. -Pubsub topics are in `String` format. - -### Example request - -```json -{ - "jsonrpc": "2.0", - "id": "id", - "method": "post_waku_v2_relay_v1_subscriptions", - "params": [ - [ - "my_topic_1", - "my_topic_2", - "my_topic_3" - ] - ] -} -``` - -### Example response - -The response - -```json -{ - "jsonrpc": "2.0", - "id": "id", - "result": true, - "error": null -} -``` - -indicates that the `wakunode2` successfully subscribed to all three requested topics. - -## Publish to a pubsub topic - -To publish a message to a pubsub topic, call the [`post_waku_v2_relay_v1_message` method](https://rfc.vac.dev/spec/16/#post_waku_v2_relay_v1_message) with the target topic and publishable message as parameters. -The message payload must be stringified as a hexadecimal string and wrapped in a [`WakuRelayMessage`](https://rfc.vac.dev/spec/16/#wakurelaymessage) `Object`. -Besides the published payload, a `WakuRelayMessage` can also contain an optional `contentTopic` that falls outside the scope of this tutorial. -See the [`WakuFilter` specification](https://rfc.vac.dev/spec/12/) for more information. - -### Example request - -```json -{ - "jsonrpc": "2.0", - "id": "id", - "method": "post_waku_v2_relay_v1_message", - "params": [ - "my_topic_1", - { - "payload": "0x1a2b3c4d5e6f", - "timestamp": 1626813243.916377 - } - ] -} -``` - -### Example response - -The response - -```json -{ - "jsonrpc": "2.0", - "id": "id", - "result": true, - "error": null -} -``` - -indicates that the message payload was successfully published to `"my_topic_1"`. - -## Read new messages from a subscribed pubsub topic - -Use the [`get_waku_v2_relay_v1_messages` method](https://rfc.vac.dev/spec/16/#get_waku_v2_relay_v1_messages) to retrieve the messages received on a subscribed pubsub topic. -The queried topic is passed as parameter. -This will only return new messages received after the last time this method was called. -Repeated calls to `get_waku_v2_relay_v1_messages` can therefore be used to continuously poll a topic for new messages. - -### Example request - -```json -{ - "jsonrpc": "2.0", - "id": "id", - "method": "get_waku_v2_relay_v1_messages", - "params": [ - "my_topic_1" - ] -} -``` - -### Example response - -The response is an `Array` of [`WakuMessage` objects](https://rfc.vac.dev/spec/16/#wakumessage). - -```json -{ - "jsonrpc": "2.0", - "id": "id", - "result": [ - { - "payload": "0xaabbccddeeff", - "contentTopic": 0, - "version": 0 - }, - { - "payload": "0x112233445566", - "contentTopic": 0, - "version": 0 - } - ], - "error": null -} -``` - -Calling the same method again returns - -```json -{ - "jsonrpc": "2.0", - "id": "id", - "result": [], - "error": null -} -``` - -indicating that no new messages were received on the subscribed topic. - -## Unsubscribe from a pubsub topic - -To unsubscribe from pubsub topics, call the [`delete_waku_v2_relay_v1_subscriptions` method](https://rfc.vac.dev/spec/16/#delete_waku_v2_relay_v1_subscriptions) with an array of topic(s) as parameter. - -### Example request - -```json -{ - "jsonrpc": "2.0", - "id": "id", - "method": "delete_waku_v2_relay_v1_subscriptions", - "params": [ - [ - "my_topic_1", - "my_topic_2" - ] - ] -} -``` - -### Example response - -The response - -```json -{ - "jsonrpc": "2.0", - "id": "id", - "result": true, - "error": null -} -``` - -indicates that the `wakunode2` successfully unsubscribed from both topics. diff --git a/tests/all_tests_waku.nim b/tests/all_tests_waku.nim index 17d76a50c9..74f006a758 100644 --- a/tests/all_tests_waku.nim +++ b/tests/all_tests_waku.nim @@ -66,14 +66,6 @@ import # Waku Keystore test suite import ./test_waku_keystore_keyfile, ./test_waku_keystore -## Wakunode JSON-RPC API test suite -import - ./wakunode_jsonrpc/test_jsonrpc_admin, - ./wakunode_jsonrpc/test_jsonrpc_debug, - ./wakunode_jsonrpc/test_jsonrpc_filter, - ./wakunode_jsonrpc/test_jsonrpc_relay, - ./wakunode_jsonrpc/test_jsonrpc_store - ## Wakunode Rest API test suite import ./wakunode_rest/test_rest_debug, diff --git a/tests/testlib/wakunode.nim b/tests/testlib/wakunode.nim index dfbfd47af6..6122a6d5b1 100644 --- a/tests/testlib/wakunode.nim +++ b/tests/testlib/wakunode.nim @@ -26,7 +26,6 @@ proc defaultTestWakuNodeConf*(): WakuNodeConf = tcpPort: Port(60000), websocketPort: Port(8000), listenAddress: parseIpAddress("0.0.0.0"), - rpcAddress: parseIpAddress("127.0.0.1"), restAddress: parseIpAddress("127.0.0.1"), metricsServerAddress: parseIpAddress("127.0.0.1"), dnsAddrsNameServers: @[parseIpAddress("1.1.1.1"), parseIpAddress("1.0.0.1")], diff --git a/tests/wakunode_jsonrpc/test_all.nim b/tests/wakunode_jsonrpc/test_all.nim deleted file mode 100644 index 17ac8b2a5a..0000000000 --- a/tests/wakunode_jsonrpc/test_all.nim +++ /dev/null @@ -1,8 +0,0 @@ -{.used.} - -import - ./test_jsonrpc_admin, - ./test_jsonrpc_debug, - ./test_jsonrpc_filter, - ./test_jsonrpc_relay, - ./test_jsonrpc_store diff --git a/tests/wakunode_jsonrpc/test_jsonrpc_admin.nim b/tests/wakunode_jsonrpc/test_jsonrpc_admin.nim deleted file mode 100644 index 182d6abe7f..0000000000 --- a/tests/wakunode_jsonrpc/test_jsonrpc_admin.nim +++ /dev/null @@ -1,194 +0,0 @@ -{.used.} - -import - std/[options, sequtils], - stew/shims/net as stewNet, - testutils/unittests, - chronicles, - chronos, - eth/keys, - libp2p/crypto/crypto, - json_rpc/[rpcserver, rpcclient] -import - ../../../waku/waku_core, - ../../../waku/node/peer_manager, - ../../../waku/waku_node, - ../../../waku/waku_api/jsonrpc/admin/handlers as admin_api, - ../../../waku/waku_api/jsonrpc/admin/client as admin_api_client, - ../../../waku/waku_relay, - ../../../waku/waku_archive, - ../../../waku/waku_archive/driver/queue_driver, - ../../../waku/waku_store, - ../../../waku/waku_filter, - ../testlib/wakucore, - ../testlib/wakunode - - -procSuite "Waku v2 JSON-RPC API - Admin": - let - bindIp = parseIpAddress("0.0.0.0") - - asyncTest "connect to ad-hoc peers": - # Create a couple of nodes - let - node1 = newTestWakuNode(generateSecp256k1Key(), parseIpAddress("127.0.0.1"), Port(60600)) - node2 = newTestWakuNode(generateSecp256k1Key(), parseIpAddress("127.0.0.1"), Port(60602)) - peerInfo2 = node2.switch.peerInfo - node3 = newTestWakuNode(generateSecp256k1Key(), parseIpAddress("127.0.0.1"), Port(60604)) - peerInfo3 = node3.switch.peerInfo - - await allFutures([node1.start(), node2.start(), node3.start()]) - - await node1.mountRelay() - await node2.mountRelay() - await node3.mountRelay() - - # RPC server setup - let - rpcPort = Port(8551) - ta = initTAddress(bindIp, rpcPort) - server = newRpcHttpServer([ta]) - - installAdminApiHandlers(node1, server) - server.start() - - let client = newRpcHttpClient() - await client.connect("127.0.0.1", rpcPort, false) - - # Connect to nodes 2 and 3 using the Admin API - let postRes = await client.post_waku_v2_admin_v1_peers(@[constructMultiaddrStr(peerInfo2), - constructMultiaddrStr(peerInfo3)]) - - check: - postRes - - # Verify that newly connected peers are being managed - let getRes = await client.get_waku_v2_admin_v1_peers() - - check: - getRes.len == 2 - # Check peer 2 - getRes.anyIt(it.protocol == WakuRelayCodec and - it.multiaddr == constructMultiaddrStr(peerInfo2)) - # Check peer 3 - getRes.anyIt(it.protocol == WakuRelayCodec and - it.multiaddr == constructMultiaddrStr(peerInfo3)) - - # Verify that raises an exception if we can't connect to the peer - let nonExistentPeer = "/ip4/0.0.0.0/tcp/10000/p2p/16Uiu2HAm6HZZr7aToTvEBPpiys4UxajCTU97zj5v7RNR2gbniy1D" - expect(ValueError): - discard await client.post_waku_v2_admin_v1_peers(@[nonExistentPeer]) - - let malformedPeer = "/malformed/peer" - expect(ValueError): - discard await client.post_waku_v2_admin_v1_peers(@[malformedPeer]) - - await server.stop() - await server.closeWait() - - await allFutures([node1.stop(), node2.stop(), node3.stop()]) - - asyncTest "get managed peer information": - # Create 3 nodes and start them with relay - let nodes = toSeq(0..<3).mapIt(newTestWakuNode(generateSecp256k1Key(), parseIpAddress("127.0.0.1"), Port(60220+it*2))) - await allFutures(nodes.mapIt(it.start())) - await allFutures(nodes.mapIt(it.mountRelay())) - - # Dial nodes 2 and 3 from node1 - await nodes[0].connectToNodes(@[constructMultiaddrStr(nodes[1].peerInfo)]) - await nodes[0].connectToNodes(@[constructMultiaddrStr(nodes[2].peerInfo)]) - - # RPC server setup - let - rpcPort = Port(8552) - ta = initTAddress(bindIp, rpcPort) - server = newRpcHttpServer([ta]) - - installAdminApiHandlers(nodes[0], server) - server.start() - - let client = newRpcHttpClient() - await client.connect("127.0.0.1", rpcPort, false) - - let response = await client.get_waku_v2_admin_v1_peers() - - check: - response.len == 2 - # Check peer 2 - response.anyIt(it.protocol == WakuRelayCodec and - it.multiaddr == constructMultiaddrStr(nodes[1].peerInfo)) - # Check peer 3 - response.anyIt(it.protocol == WakuRelayCodec and - it.multiaddr == constructMultiaddrStr(nodes[2].peerInfo)) - - # Artificially remove the address from the book - nodes[0].peerManager.peerStore[AddressBook][nodes[1].peerInfo.peerId] = @[] - nodes[0].peerManager.peerStore[AddressBook][nodes[2].peerInfo.peerId] = @[] - - # Verify that the returned addresses are empty - let responseEmptyAdd = await client.get_waku_v2_admin_v1_peers() - check: - responseEmptyAdd[0].multiaddr == "" - responseEmptyAdd[1].multiaddr == "" - - await server.stop() - await server.closeWait() - - await allFutures(nodes.mapIt(it.stop())) - - asyncTest "get unmanaged peer information": - let node = newTestWakuNode(generateSecp256k1Key(), parseIpAddress("0.0.0.0"), Port(60523)) - - await node.start() - - # RPC server setup - let - rpcPort = Port(8553) - ta = initTAddress(bindIp, rpcPort) - server = newRpcHttpServer([ta]) - - installAdminApiHandlers(node, server) - server.start() - - let client = newRpcHttpClient() - await client.connect("127.0.0.1", rpcPort, false) - - await node.mountFilter() - await node.mountLegacyFilter() - await node.mountFilterClient() - let driver: ArchiveDriver = QueueDriver.new() - let mountArchiveRes = node.mountArchive(driver) - assert mountArchiveRes.isOk(), mountArchiveRes.error - - await node.mountStore() - node.mountStoreClient() - - # Create and set some peers - let - locationAddr = MultiAddress.init("/ip4/127.0.0.1/tcp/0").tryGet() - - filterPeer = PeerInfo.new(generateEcdsaKey(), @[locationAddr]) - storePeer = PeerInfo.new(generateEcdsaKey(), @[locationAddr]) - - node.peerManager.addServicePeer(filterPeer.toRemotePeerInfo(), WakuLegacyFilterCodec) - node.peerManager.addServicePeer(storePeer.toRemotePeerInfo(), WakuStoreCodec) - - # Mock that we connected in the past so Identify populated this - node.peerManager.peerStore[ProtoBook][filterPeer.peerId] = @[WakuLegacyFilterCodec] - node.peerManager.peerStore[ProtoBook][storePeer.peerId] = @[WakuStoreCodec] - - let response = await client.get_waku_v2_admin_v1_peers() - - ## Then - check: - response.len == 2 - # Check filter peer - (response.filterIt(it.protocol == WakuLegacyFilterCodec)[0]).multiaddr == constructMultiaddrStr(filterPeer) - # Check store peer - (response.filterIt(it.protocol == WakuStoreCodec)[0]).multiaddr == constructMultiaddrStr(storePeer) - - ## Cleanup - await server.stop() - await server.closeWait() - - await node.stop() diff --git a/tests/wakunode_jsonrpc/test_jsonrpc_debug.nim b/tests/wakunode_jsonrpc/test_jsonrpc_debug.nim deleted file mode 100644 index d06d0b8fa3..0000000000 --- a/tests/wakunode_jsonrpc/test_jsonrpc_debug.nim +++ /dev/null @@ -1,54 +0,0 @@ -{.used.} - -import - std/options, - stew/shims/net as stewNet, - testutils/unittests, - chronicles, - chronos, - libp2p/crypto/crypto, - json_rpc/[rpcserver, rpcclient] -import - ../../../waku/node/peer_manager, - ../../../waku/waku_node, - ../../../waku/waku_api/jsonrpc/debug/handlers as debug_api, - ../../../waku/waku_api/jsonrpc/debug/client as debug_api_client, - ../testlib/common, - ../testlib/wakucore, - ../testlib/wakunode - - -procSuite "Waku v2 JSON-RPC API - Debug": - let - privkey = generateSecp256k1Key() - bindIp = parseIpAddress("0.0.0.0") - extIp = parseIpAddress("127.0.0.1") - port = Port(0) - node = newTestWakuNode(privkey, bindIp, port, some(extIp), some(port)) - - asyncTest "get node info": - await node.start() - - await node.mountRelay() - - # RPC server setup - let - rpcPort = Port(8546) - ta = initTAddress(bindIp, rpcPort) - server = newRpcHttpServer([ta]) - - installDebugApiHandlers(node, server) - server.start() - - let client = newRpcHttpClient() - await client.connect("127.0.0.1", rpcPort, false) - - let response = await client.get_waku_v2_debug_v1_info() - - check: - response.listenAddresses == @[$node.switch.peerInfo.addrs[^1] & "/p2p/" & $node.switch.peerInfo.peerId] - - await server.stop() - await server.closeWait() - - await node.stop() diff --git a/tests/wakunode_jsonrpc/test_jsonrpc_filter.nim b/tests/wakunode_jsonrpc/test_jsonrpc_filter.nim deleted file mode 100644 index 0c44a1e480..0000000000 --- a/tests/wakunode_jsonrpc/test_jsonrpc_filter.nim +++ /dev/null @@ -1,79 +0,0 @@ -{.used.} - -import - std/options, - stew/shims/net as stewNet, - testutils/unittests, - json_rpc/[rpcserver, rpcclient] -import - ../../../waku/waku_core, - ../../../waku/node/peer_manager, - ../../../waku/waku_node, - ../../../waku/waku_api/message_cache, - ../../../waku/waku_api/jsonrpc/filter/handlers as filter_api, - ../../../waku/waku_api/jsonrpc/filter/client as filter_api_client, - ../../../waku/waku_filter, - ../../../waku/waku_filter/rpc, - ../../../waku/waku_filter/client, - ../testlib/wakucore, - ../testlib/wakunode - -procSuite "Waku v2 JSON-RPC API - Filter": - let - bindIp = parseIpAddress("0.0.0.0") - - asyncTest "subscribe and unsubscribe": - let - nodeKey1 = generateSecp256k1Key() - node1 = newTestWakuNode(nodeKey1, bindIp, Port(0)) - nodeKey2 = generateSecp256k1Key() - node2 = newTestWakuNode(nodeKey2, bindIp, Port(0)) - - await allFutures(node1.start(), node2.start()) - - await node1.mountFilter() - await node1.mountLegacyFilter() - await node2.mountFilterClient() - - node2.peerManager.addServicePeer(node1.peerInfo.toRemotePeerInfo(), WakuLegacyFilterCodec) - - # RPC server setup - let - rpcPort = Port(8550) - ta = initTAddress(bindIp, rpcPort) - server = newRpcHttpServer([ta]) - - let cache = MessageCache.init(capacity=30) - installFilterApiHandlers(node2, server, cache) - server.start() - - let client = newRpcHttpClient() - await client.connect("127.0.0.1", rpcPort, false) - - check: - # Light node has not yet subscribed to any filters - node2.wakuFilterClientLegacy.getSubscriptionsCount() == 0 - - let contentFilters = @[ - ContentFilter(contentTopic: DefaultContentTopic), - ContentFilter(contentTopic: ContentTopic("/waku/2/default-content2/proto")), - ContentFilter(contentTopic: ContentTopic("/waku/2/default-content3/proto")), - ContentFilter(contentTopic: ContentTopic("/waku/2/default-content4/proto")), - ] - var response = await client.post_waku_v2_filter_v1_subscription(contentFilters=contentFilters, topic=some(DefaultPubsubTopic)) - check: - response == true - # Light node has successfully subscribed to 4 content topics - node2.wakuFilterClientLegacy.getSubscriptionsCount() == 4 - - response = await client.delete_waku_v2_filter_v1_subscription(contentFilters=contentFilters, topic=some(DefaultPubsubTopic)) - check: - response == true - # Light node has successfully unsubscribed from all filters - node2.wakuFilterClientLegacy.getSubscriptionsCount() == 0 - - ## Cleanup - await server.stop() - await server.closeWait() - - await allFutures(node1.stop(), node2.stop()) diff --git a/tests/wakunode_jsonrpc/test_jsonrpc_store.nim b/tests/wakunode_jsonrpc/test_jsonrpc_store.nim deleted file mode 100644 index b08b47fc0d..0000000000 --- a/tests/wakunode_jsonrpc/test_jsonrpc_store.nim +++ /dev/null @@ -1,194 +0,0 @@ -{.used.} - -import - std/[options, times, json], - stew/shims/net as stewNet, - testutils/unittests, - eth/keys, - libp2p/crypto/crypto, - json_rpc/[rpcserver, rpcclient] -import - ../../../waku/waku_core, - ../../../waku/waku_core/message/digest, - ../../../waku/node/peer_manager, - ../../../waku/waku_node, - ../../../waku/waku_api/jsonrpc/store/handlers as store_api, - ../../../waku/waku_api/jsonrpc/store/client as store_api_client, - ../../../waku/waku_archive, - ../../../waku/waku_archive/driver/queue_driver, - ../../../waku/waku_store, - ../../../waku/waku_store/rpc, - ../testlib/common, - ../testlib/wakucore, - ../testlib/wakunode - - -proc put(store: ArchiveDriver, pubsubTopic: PubsubTopic, message: WakuMessage): Future[Result[void, string]] = - let - digest = waku_archive.computeDigest(message) - msgHash = computeMessageHash(pubsubTopic, message) - receivedTime = if message.timestamp > 0: message.timestamp - else: getNanosecondTime(getTime().toUnixFloat()) - - store.put(pubsubTopic, message, digest, msgHash, receivedTime) - -procSuite "Waku v2 JSON-RPC API - Store": - - asyncTest "query a node and retrieve historical messages": - let - privkey = generateSecp256k1Key() - bindIp = parseIpAddress("0.0.0.0") - extIp = parseIpAddress("127.0.0.1") - port = Port(0) - node = newTestWakuNode(privkey, bindIp, port, some(extIp), some(port)) - - await node.start() - - # RPC server setup - let - rpcPort = Port(8549) - ta = initTAddress(bindIp, rpcPort) - server = newRpcHttpServer([ta]) - - installStoreApiHandlers(node, server) - server.start() - - # WakuStore setup - let - key = generateEcdsaKey() - peer = PeerInfo.new(key) - - let driver: ArchiveDriver = QueueDriver.new() - let mountArchiveRes = node.mountArchive(driver) - assert mountArchiveRes.isOk(), mountArchiveRes.error - - await node.mountStore() - node.mountStoreClient() - - var listenSwitch = newStandardSwitch(some(key)) - await listenSwitch.start() - - node.peerManager.addServicePeer(listenSwitch.peerInfo.toRemotePeerInfo(), WakuStoreCodec) - - listenSwitch.mount(node.wakuStore) - - # Now prime it with some history before tests - let msgList = @[ - fakeWakuMessage(@[byte 0], contentTopic=ContentTopic("2"), ts=0), - fakeWakuMessage(@[byte 1], ts=1), - fakeWakuMessage(@[byte 2], ts=2), - fakeWakuMessage(@[byte 3], ts=3), - fakeWakuMessage(@[byte 4], ts=4), - fakeWakuMessage(@[byte 5], ts=5), - fakeWakuMessage(@[byte 6], ts=6), - fakeWakuMessage(@[byte 7], ts=7), - fakeWakuMessage(@[byte 8], ts=8), - fakeWakuMessage(@[byte 9], contentTopic=ContentTopic("2"), ts=9) - ] - - for msg in msgList: - require (waitFor driver.put(DefaultPubsubTopic, msg)).isOk() - - let client = newRpcHttpClient() - await client.connect("127.0.0.1", rpcPort, false) - - let response = await client.get_waku_v2_store_v1_messages( - some(DefaultPubsubTopic), - some(@[HistoryContentFilterRPC(contentTopic: DefaultContentTopic)]), - some(Timestamp(0)), - some(Timestamp(9)), - some(StorePagingOptions())) - check: - response.messages.len == 8 - response.pagingOptions.isNone() - - await server.stop() - await server.closeWait() - await node.stop() - await listenSwitch.stop() - - asyncTest "check error response when peer-store-node is not available": - let - privkey = generateSecp256k1Key() - bindIp = parseIpAddress("0.0.0.0") - extIp = parseIpAddress("127.0.0.1") - port = Port(0) - node = newTestWakuNode(privkey, bindIp, port, some(extIp), some(port)) - - await node.start() - - # RPC server setup - let - rpcPort = Port(8549) - ta = initTAddress(bindIp, rpcPort) - server = newRpcHttpServer([ta]) - - installStoreApiHandlers(node, server) - server.start() - - let driver: ArchiveDriver = QueueDriver.new() - let mountArchiveRes = node.mountArchive(driver) - assert mountArchiveRes.isOk(), mountArchiveRes.error - - await node.mountStore() - node.mountStoreClient() - - # Now prime it with some history before tests - let msgList = @[ - fakeWakuMessage(@[byte 0], ts=0), - fakeWakuMessage(@[byte 9], ts=9) - ] - for msg in msgList: - require (waitFor driver.put(DefaultPubsubTopic, msg)).isOk() - - let client = newRpcHttpClient() - await client.connect("127.0.0.1", rpcPort, false) - - var response:StoreResponse - var jsonError:JsonNode - try: - response = await client.get_waku_v2_store_v1_messages( - some(DefaultPubsubTopic), - some(@[HistoryContentFilterRPC(contentTopic: DefaultContentTopic)]), - some(Timestamp(0)), - some(Timestamp(9)), - some(StorePagingOptions())) - except ValueError: - - try: - jsonError = parseJson(getCurrentExceptionMsg()) - except Exception: - assert false, "exception calling parseJson: " & getCurrentExceptionMsg() - - check: - $jsonError["code"] == "-32000" - jsonError["message"].getStr() == "get_waku_v2_store_v1_messages raised an exception" - jsonError["data"].getStr() == "no suitable remote store peers" - - # Now configure a store-peer - let - key = generateEcdsaKey() - peer = PeerInfo.new(key) - - var listenSwitch = newStandardSwitch(some(key)) - await listenSwitch.start() - - listenSwitch.mount(node.wakuStore) - - node.peerManager.addServicePeer(listenSwitch.peerInfo.toRemotePeerInfo(), - WakuStoreCodec) - - response = await client.get_waku_v2_store_v1_messages( - some(DefaultPubsubTopic), - some(@[HistoryContentFilterRPC(contentTopic: DefaultContentTopic)]), - some(Timestamp(0)), - some(Timestamp(9)), - some(StorePagingOptions())) - check: - response.messages.len == 2 - response.pagingOptions.isNone() - - await server.stop() - await server.closeWait() - await node.stop() - await listenSwitch.stop() diff --git a/waku/waku_api.nim b/waku/waku_api.nim index 8eb8f84640..e412d135c9 100644 --- a/waku/waku_api.nim +++ b/waku/waku_api.nim @@ -5,5 +5,4 @@ import export message_cache, - rest, - jsonrpc \ No newline at end of file + rest \ No newline at end of file diff --git a/waku/waku_api/jsonrpc/admin/callsigs.nim b/waku/waku_api/jsonrpc/admin/callsigs.nim deleted file mode 100644 index 97e7701657..0000000000 --- a/waku/waku_api/jsonrpc/admin/callsigs.nim +++ /dev/null @@ -1,4 +0,0 @@ -# Admin API - -proc get_waku_v2_admin_v1_peers(): seq[WakuPeer] -proc post_waku_v2_admin_v1_peers(peers: seq[string]): bool diff --git a/waku/waku_api/jsonrpc/admin/client.nim b/waku/waku_api/jsonrpc/admin/client.nim deleted file mode 100644 index 10f69330b3..0000000000 --- a/waku/waku_api/jsonrpc/admin/client.nim +++ /dev/null @@ -1,14 +0,0 @@ -when (NimMajor, NimMinor) < (1, 4): - {.push raises: [Defect].} -else: - {.push raises: [].} - -import - std/[os, strutils], - json_rpc/rpcclient -import - ./types - -template sourceDir: string = currentSourcePath.rsplit(DirSep, 1)[0] - -createRpcSigs(RpcHttpClient, sourceDir / "callsigs.nim") diff --git a/waku/waku_api/jsonrpc/admin/handlers.nim b/waku/waku_api/jsonrpc/admin/handlers.nim deleted file mode 100644 index 599a725af7..0000000000 --- a/waku/waku_api/jsonrpc/admin/handlers.nim +++ /dev/null @@ -1,71 +0,0 @@ -when (NimMajor, NimMinor) < (1, 4): - {.push raises: [Defect].} -else: - {.push raises: [].} - -import - std/sequtils, - chronicles, - json_rpc/rpcserver, - libp2p/[peerinfo, switch] -import - ../../../waku_store, - ../../../waku_filter, - ../../../waku_relay, - ../../../waku_node, - ../../../node/peer_manager, - ../../../waku_core, - ./types - - -logScope: - topics = "waku node jsonrpc admin_api" - -proc installAdminApiHandlers*(node: WakuNode, rpcsrv: RpcServer) = - - rpcsrv.rpc("post_waku_v2_admin_v1_peers") do (peers: seq[string]) -> bool: - ## Connect to a list of peers - debug "post_waku_v2_admin_v1_peers" - - for i, peer in peers: - let peerInfo = parsePeerInfo(peer) - if peerInfo.isErr(): - raise newException(ValueError, "Couldn't parse remote peer info: " & peerInfo.error) - - let connOk = await node.peerManager.connectRelay(peerInfo.value, source="rpc") - if not connOk: - raise newException(ValueError, "Failed to connect to peer at index: " & $i & " " & $peer) - - return true - - rpcsrv.rpc("get_waku_v2_admin_v1_peers") do () -> seq[WakuPeer]: - ## Returns a list of peers registered for this node - debug "get_waku_v2_admin_v1_peers" - - var peers = newSeq[WakuPeer]() - - if not node.wakuRelay.isNil(): - # Map managed peers to WakuPeers and add to return list - let relayPeers = node.peerManager.peerStore.peers(WakuRelayCodec) - .mapIt(WakuPeer(multiaddr: constructMultiaddrStr(it), - protocol: WakuRelayCodec, - connected: it.connectedness == Connectedness.Connected)) - peers.add(relayPeers) - - if not node.wakuFilterLegacy.isNil(): - # Map WakuFilter peers to WakuPeers and add to return list - let filterPeers = node.peerManager.peerStore.peers(WakuLegacyFilterCodec) - .mapIt(WakuPeer(multiaddr: constructMultiaddrStr(it), - protocol: WakuLegacyFilterCodec, - connected: it.connectedness == Connectedness.Connected)) - peers.add(filterPeers) - - if not node.wakuStore.isNil(): - # Map WakuStore peers to WakuPeers and add to return list - let storePeers = node.peerManager.peerStore.peers(WakuStoreCodec) - .mapIt(WakuPeer(multiaddr: constructMultiaddrStr(it), - protocol: WakuStoreCodec, - connected: it.connectedness == Connectedness.Connected)) - peers.add(storePeers) - - return peers diff --git a/waku/waku_api/jsonrpc/admin/types.nim b/waku/waku_api/jsonrpc/admin/types.nim deleted file mode 100644 index c9e7ea0b15..0000000000 --- a/waku/waku_api/jsonrpc/admin/types.nim +++ /dev/null @@ -1,10 +0,0 @@ -when (NimMajor, NimMinor) < (1, 4): - {.push raises: [Defect].} -else: - {.push raises: [].} - - -type WakuPeer* = object - multiaddr*: string - protocol*: string - connected*: bool diff --git a/waku/waku_api/jsonrpc/debug/callsigs.nim b/waku/waku_api/jsonrpc/debug/callsigs.nim deleted file mode 100644 index 1d87a57899..0000000000 --- a/waku/waku_api/jsonrpc/debug/callsigs.nim +++ /dev/null @@ -1,3 +0,0 @@ -# Debug API - -proc get_waku_v2_debug_v1_info(): WakuInfo diff --git a/waku/waku_api/jsonrpc/debug/client.nim b/waku/waku_api/jsonrpc/debug/client.nim deleted file mode 100644 index a699a4eaad..0000000000 --- a/waku/waku_api/jsonrpc/debug/client.nim +++ /dev/null @@ -1,14 +0,0 @@ -when (NimMajor, NimMinor) < (1, 4): - {.push raises: [Defect].} -else: - {.push raises: [].} - -import - std/[os, strutils], - json_rpc/rpcclient -import - ../../../waku_node - -template sourceDir: string = currentSourcePath.rsplit(DirSep, 1)[0] - -createRpcSigs(RpcHttpClient, sourceDir / "callsigs.nim") diff --git a/waku/waku_api/jsonrpc/debug/handlers.nim b/waku/waku_api/jsonrpc/debug/handlers.nim deleted file mode 100644 index 41462d791c..0000000000 --- a/waku/waku_api/jsonrpc/debug/handlers.nim +++ /dev/null @@ -1,30 +0,0 @@ -when (NimMajor, NimMinor) < (1, 4): - {.push raises: [Defect].} -else: - {.push raises: [].} - -import - chronicles, - json_rpc/rpcserver -import - ../../../waku_node - -logScope: - topics = "waku node jsonrpc debug_api" - -proc installDebugApiHandlers*(node: WakuNode, server: RpcServer) = - - ## Debug API version 1 definitions - - server.rpc("get_waku_v2_debug_v1_info") do () -> WakuInfo: - ## Returns information about WakuNode - debug "get_waku_v2_debug_v1_info" - - return node.info() - - server.rpc("get_waku_v2_debug_v1_version") do () -> string: - ## Returns information about WakuNode - debug "get_waku_v2_debug_v1_version" - - return git_version - diff --git a/waku/waku_api/jsonrpc/filter/callsigs.nim b/waku/waku_api/jsonrpc/filter/callsigs.nim deleted file mode 100644 index 8af15f9fac..0000000000 --- a/waku/waku_api/jsonrpc/filter/callsigs.nim +++ /dev/null @@ -1,5 +0,0 @@ -# Filter API - -proc get_waku_v2_filter_v1_messages(contentTopic: ContentTopic): seq[WakuMessage] -proc post_waku_v2_filter_v1_subscription(contentFilters: seq[ContentFilter], topic: Option[string]): bool -proc delete_waku_v2_filter_v1_subscription(contentFilters: seq[ContentFilter], topic: Option[string]): bool diff --git a/waku/waku_api/jsonrpc/filter/client.nim b/waku/waku_api/jsonrpc/filter/client.nim deleted file mode 100644 index c278038449..0000000000 --- a/waku/waku_api/jsonrpc/filter/client.nim +++ /dev/null @@ -1,15 +0,0 @@ -when (NimMajor, NimMinor) < (1, 4): - {.push raises: [Defect].} -else: - {.push raises: [].} - -import - std/[os, strutils], - json_rpc/rpcclient -import - ../../../waku_core, - ../../../waku_filter/rpc - -template sourceDir: string = currentSourcePath.rsplit(DirSep, 1)[0] - -createRpcSigs(RpcHttpClient, sourceDir / "callsigs.nim") diff --git a/waku/waku_api/jsonrpc/filter/handlers.nim b/waku/waku_api/jsonrpc/filter/handlers.nim deleted file mode 100644 index 23f5aaa76c..0000000000 --- a/waku/waku_api/jsonrpc/filter/handlers.nim +++ /dev/null @@ -1,83 +0,0 @@ -when (NimMajor, NimMinor) < (1, 4): - {.push raises: [Defect].} -else: - {.push raises: [].} - -import - std/sequtils, - chronicles, - json_rpc/rpcserver -import - ../../../waku_core, - ../../../waku_filter, - ../../../waku_filter/rpc, - ../../../waku_filter/client, - ../../../waku_node, - ../../../node/peer_manager, - ../../message_cache - - - -logScope: - topics = "waku node jsonrpc filter_api" - - -const futTimeout* = 5.seconds # Max time to wait for futures - -proc installFilterApiHandlers*(node: WakuNode, server: RpcServer, cache: MessageCache) = - - server.rpc("post_waku_v2_filter_v1_subscription") do (contentFilters: seq[ContentFilter], pubsubTopic: Option[PubsubTopic]) -> bool: - ## Subscribes a node to a list of content filters - debug "post_waku_v2_filter_v1_subscription" - - let peerOpt = node.peerManager.selectPeer(WakuLegacyFilterCodec) - if peerOpt.isNone(): - raise newException(ValueError, "no suitable remote filter peers") - - let contentTopics: seq[ContentTopic] = contentFilters.mapIt(it.contentTopic) - - let handler: FilterPushHandler = proc(pubsubTopic: PubsubTopic, msg: WakuMessage) {.async, gcsafe, closure.} = - cache.addMessage(pubsubTopic, msg) - - let subFut = node.legacyFilterSubscribe(pubsubTopic, contentTopics, handler, peerOpt.get()) - if not await subFut.withTimeout(futTimeout): - raise newException(ValueError, "Failed to subscribe to contentFilters") - - # Successfully subscribed to all content filters - for cTopic in contentTopics: - cache.contentSubscribe(cTopic) - - return true - - server.rpc("delete_waku_v2_filter_v1_subscription") do (contentFilters: seq[ContentFilter], pubsubTopic: Option[PubsubTopic]) -> bool: - ## Unsubscribes a node from a list of content filters - debug "delete_waku_v2_filter_v1_subscription" - - let contentTopics: seq[ContentTopic] = contentFilters.mapIt(it.contentTopic) - - let peerOpt = node.peerManager.selectPeer(WakuLegacyFilterCodec) - if peerOpt.isNone(): - raise newException(ValueError, "no suitable remote filter peers") - - let unsubFut = node.legacyFilterUnsubscribe(pubsubTopic, contentTopics, peerOpt.get()) - if not await unsubFut.withTimeout(futTimeout): - raise newException(ValueError, "Failed to unsubscribe from contentFilters") - - for cTopic in contentTopics: - cache.contentUnsubscribe(cTopic) - - return true - - server.rpc("get_waku_v2_filter_v1_messages") do (contentTopic: ContentTopic) -> seq[WakuMessage]: - ## Returns all WakuMessages received on a content topic since the - ## last time this method was called - debug "get_waku_v2_filter_v1_messages", contentTopic=contentTopic - - if not cache.isContentSubscribed(contentTopic): - raise newException(ValueError, "Not subscribed to topic: " & contentTopic) - - let msgRes = cache.getMessages(contentTopic, clear=true) - if msgRes.isErr(): - raise newException(ValueError, "Not subscribed to topic: " & contentTopic) - - return msgRes.value diff --git a/waku/waku_api/jsonrpc/hexstrings.nim b/waku/waku_api/jsonrpc/hexstrings.nim deleted file mode 100644 index 52dea5ea07..0000000000 --- a/waku/waku_api/jsonrpc/hexstrings.nim +++ /dev/null @@ -1,6 +0,0 @@ -{.deprecated: "import 'waku/common/hexstrings' instead".} - -import ../../common/hexstrings - -export hexstrings - diff --git a/waku/waku_api/jsonrpc/marshalling.nim b/waku/waku_api/jsonrpc/marshalling.nim deleted file mode 100644 index 1602ad99e4..0000000000 --- a/waku/waku_api/jsonrpc/marshalling.nim +++ /dev/null @@ -1,19 +0,0 @@ -import - stew/byteutils, - json, - json_rpc/rpcserver - - -func invalidMsg*(name: string): string = - "When marshalling from JSON, parameter \"" & name & "\" is not valid" - - -## JSON marshalling - -# seq[byte] - -proc `%`*(value: seq[byte]): JsonNode = - if value.len > 0: - %("0x" & value.toHex()) - else: - newJArray() diff --git a/waku/waku_api/jsonrpc/message.nim b/waku/waku_api/jsonrpc/message.nim deleted file mode 100644 index 202e47755b..0000000000 --- a/waku/waku_api/jsonrpc/message.nim +++ /dev/null @@ -1,49 +0,0 @@ -import - std/options, - json, - json_rpc/rpcserver -import - ../../common/base64, - ../../waku_core - - -type - WakuMessageRPC* = object - payload*: Base64String - contentTopic*: Option[ContentTopic] - version*: Option[uint32] - timestamp*: Option[Timestamp] - ephemeral*: Option[bool] - - -## Type mappings - -func toWakuMessageRPC*(msg: WakuMessage): WakuMessageRPC = - WakuMessageRPC( - payload: base64.encode(msg.payload), - contentTopic: some(msg.contentTopic), - version: some(msg.version), - timestamp: some(msg.timestamp), - ephemeral: some(msg.ephemeral) - ) - - -## JSON-RPC type marshalling - -# Base64String - -proc `%`*(value: Base64String): JsonNode = - %(value.string) - -proc fromJson*(n: JsonNode, argName: string, value: var Base64String) = - n.kind.expect(JString, argName) - - value = Base64String(n.getStr()) - -# WakuMessageRpc (WakuMessage) - -proc `%`*(value: WakuMessageRpc): JsonNode = - let jObj = newJObject() - for k, v in value.fieldPairs: - jObj[k] = %v - return jObj diff --git a/waku/waku_api/jsonrpc/relay/callsigs.nim b/waku/waku_api/jsonrpc/relay/callsigs.nim deleted file mode 100644 index 679eaf2f48..0000000000 --- a/waku/waku_api/jsonrpc/relay/callsigs.nim +++ /dev/null @@ -1,14 +0,0 @@ -# Relay API -proc post_waku_v2_relay_v1_subscriptions(topics: seq[PubsubTopic]): bool -proc delete_waku_v2_relay_v1_subscriptions(topics: seq[PubsubTopic]): bool -proc post_waku_v2_relay_v1_message(topic: PubsubTopic, message: WakuMessageRPC): bool -proc get_waku_v2_relay_v1_messages(topic: PubsubTopic): seq[WakuMessageRPC] - -proc post_waku_v2_relay_v1_auto_subscriptions(topics: seq[ContentTopic]): bool -proc delete_waku_v2_relay_v1_auto_subscriptions(topics: seq[ContentTopic]): bool -proc post_waku_v2_relay_v1_auto_message(message: WakuMessageRPC): bool -proc get_waku_v2_relay_v1_auto_messages(topic: ContentTopic): seq[WakuMessageRPC] - - -# Support for the Relay Private API has been deprecated. -# This API existed for compatibility with the Waku v1 spec and encryption scheme. diff --git a/waku/waku_api/jsonrpc/relay/client.nim b/waku/waku_api/jsonrpc/relay/client.nim deleted file mode 100644 index 65f3956f6d..0000000000 --- a/waku/waku_api/jsonrpc/relay/client.nim +++ /dev/null @@ -1,17 +0,0 @@ -when (NimMajor, NimMinor) < (1, 4): - {.push raises: [Defect].} -else: - {.push raises: [].} - -import - std/[os, strutils], - json_rpc/rpcclient -import - ../../../waku_core, - ../message - -export message - -template sourceDir: string = currentSourcePath.rsplit(DirSep, 1)[0] - -createRpcSigs(RpcHttpClient, sourceDir / "callsigs.nim") diff --git a/waku/waku_api/jsonrpc/store/callsigs.nim b/waku/waku_api/jsonrpc/store/callsigs.nim deleted file mode 100644 index d576a4f6f1..0000000000 --- a/waku/waku_api/jsonrpc/store/callsigs.nim +++ /dev/null @@ -1,4 +0,0 @@ -# Store API - -proc get_waku_v2_store_v1_messages(pubsubTopicOption: Option[string], contentFiltersOption: Option[seq[HistoryContentFilterRPC]], startTime: Option[Timestamp], endTime: Option[Timestamp], pagingOptions: Option[StorePagingOptions]): StoreResponse - diff --git a/waku/waku_api/jsonrpc/store/client.nim b/waku/waku_api/jsonrpc/store/client.nim deleted file mode 100644 index f91b68b110..0000000000 --- a/waku/waku_api/jsonrpc/store/client.nim +++ /dev/null @@ -1,19 +0,0 @@ -when (NimMajor, NimMinor) < (1, 4): - {.push raises: [Defect].} -else: - {.push raises: [].} - -import - std/[os, strutils], - json_rpc/rpcclient -import - ../../../waku_core, - ../../../waku_store/rpc, - ./types - -export types - - -template sourceDir: string = currentSourcePath.rsplit(DirSep, 1)[0] - -createRpcSigs(RpcHttpClient, sourceDir / "callsigs.nim") diff --git a/waku/waku_api/jsonrpc/store/handlers.nim b/waku/waku_api/jsonrpc/store/handlers.nim deleted file mode 100644 index db53a79fc8..0000000000 --- a/waku/waku_api/jsonrpc/store/handlers.nim +++ /dev/null @@ -1,85 +0,0 @@ -when (NimMajor, NimMinor) < (1, 4): - {.push raises: [Defect].} -else: - {.push raises: [].} - -import - std/[options, sequtils], - chronicles, - json_rpc/rpcserver -import - ../../../[ - waku_core, - waku_store, - waku_node - ], - ../../../waku_store/rpc, - ../../../node/peer_manager, - ../../../common/paging, - ./types - - -logScope: - topics = "waku node jsonrpc store_api" - - -const futTimeout = 5.seconds - - -proc toPagingInfo*(pagingOptions: StorePagingOptions): PagingInfoRPC = - PagingInfoRPC( - pageSize: some(pagingOptions.pageSize), - cursor: pagingOptions.cursor, - direction: some(pagingOptions.forward.into()) - ) - -proc toPagingOptions*(pagingInfo: PagingInfoRPC): StorePagingOptions = - StorePagingOptions( - pageSize: pagingInfo.pageSize.get(0'u64), - cursor: pagingInfo.cursor, - forward: pagingInfo.direction.into() - ) - -proc toJsonRPCStoreResponse*(response: HistoryResponse): StoreResponse = - StoreResponse( - messages: response.messages.map(toWakuMessageRPC), - pagingOptions: if response.cursor.isNone(): none(StorePagingOptions) - else: some(StorePagingOptions( - pageSize: uint64(response.messages.len), # This field will be deprecated soon - forward: true, # Hardcoded. This field will be deprecated soon - cursor: response.cursor.map(toRPC) - )) - ) - -proc installStoreApiHandlers*(node: WakuNode, server: RpcServer) = - - server.rpc("get_waku_v2_store_v1_messages") do (pubsubTopicOption: Option[string], contentFiltersOption: Option[seq[HistoryContentFilterRPC]], startTime: Option[Timestamp], endTime: Option[Timestamp], pagingOptions: Option[StorePagingOptions]) -> StoreResponse: - ## Returns history for a list of content topics with optional paging - debug "get_waku_v2_store_v1_messages" - - let peerOpt = node.peerManager.selectPeer(WakuStoreCodec) - if peerOpt.isNone(): - raise newException(ValueError, "no suitable remote store peers") - - let req = HistoryQuery( - pubsubTopic: pubsubTopicOption, - contentTopics: contentFiltersOption.get(@[]).mapIt(it.contentTopic), - startTime: startTime, - endTime: endTime, - direction: if pagingOptions.isNone(): default() - else: pagingOptions.get().forward.into(), - pageSize: if pagingOptions.isNone(): DefaultPageSize - else: min(pagingOptions.get().pageSize, MaxPageSize), - cursor: if pagingOptions.isNone(): none(HistoryCursor) - else: pagingOptions.get().cursor.map(toAPI) - ) - - let queryFut = node.query(req, peerOpt.get()) - if not await queryFut.withTimeout(futTimeout): - raise newException(ValueError, "No history response received (timeout)") - - let res = queryFut.read() - if res.isErr(): - raise newException(ValueError, $res.error) - - return res.value.toJsonRPCStoreResponse() diff --git a/waku/waku_api/jsonrpc/store/types.nim b/waku/waku_api/jsonrpc/store/types.nim deleted file mode 100644 index 44341fe188..0000000000 --- a/waku/waku_api/jsonrpc/store/types.nim +++ /dev/null @@ -1,24 +0,0 @@ -when (NimMajor, NimMinor) < (1, 4): - {.push raises: [Defect].} -else: - {.push raises: [].} - -import - std/options -import - ../../../waku_store/rpc, - ../message - -export message - - -type - StoreResponse* = object - messages*: seq[WakuMessageRPC] - pagingOptions*: Option[StorePagingOptions] - - StorePagingOptions* = object - ## This type holds some options for pagination - pageSize*: uint64 - cursor*: Option[PagingIndexRPC] - forward*: bool From 045091a9f2ddb78929c1d9800cf5f3d1d68fa8b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?rich=CE=9Brd?= Date: Thu, 29 Feb 2024 20:58:35 -0400 Subject: [PATCH 249/274] fix: return message id on `waku_relay_publish` (#2485) * fix: return message id on `waku_relay_publish` * fix: remove unneeded cast and handle 0 len seqs * chore: rename messageId to messageHash --- library/alloc.nim | 5 +++-- library/events/json_message_event.nim | 5 ++--- library/libwaku.nim | 2 ++ .../requests/protocols/relay_request.nim | 13 +++++++++---- 4 files changed, 16 insertions(+), 9 deletions(-) diff --git a/library/alloc.nim b/library/alloc.nim index a9aee0a8b9..a08ea57765 100644 --- a/library/alloc.nim +++ b/library/alloc.nim @@ -19,8 +19,9 @@ proc alloc*(str: string): cstring = return ret proc allocSharedSeq*[T](s: seq[T]): SharedSeq[T] = - let data = cast[ptr T](allocShared(s.len)) - copyMem(data, unsafeAddr s, s.len) + let data = allocShared(sizeof(T) * s.len) + if s.len != 0: + copyMem(data, unsafeAddr s[0], s.len) return (cast[ptr UncheckedArray[T]](data), s.len) proc deallocSharedSeq*[T](s: var SharedSeq[T]) = diff --git a/library/events/json_message_event.nim b/library/events/json_message_event.nim index 459a44213a..bfb5bd7d98 100644 --- a/library/events/json_message_event.nim +++ b/library/events/json_message_event.nim @@ -61,7 +61,7 @@ proc `%`*(value: WakuMessageHash): JsonNode = type JsonMessageEvent* = ref object of JsonEvent pubsubTopic*: string - messageId*: string + messageHash*: WakuMessageHash wakuMessage*: JsonMessage proc new*(T: type JsonMessageEvent, @@ -83,12 +83,11 @@ proc new*(T: type JsonMessageEvent, copyMem(addr proof[0], unsafeAddr msg.proof[0], len(msg.proof)) let msgHash = computeMessageHash(pubSubTopic, msg) - let msgHashHex = to0xHex(msgHash) return JsonMessageEvent( eventType: "message", pubSubTopic: pubSubTopic, - messageId: msgHashHex, + messageHash: msgHash, wakuMessage: JsonMessage( payload: base64.encode(payload), contentTopic: msg.contentTopic, diff --git a/library/libwaku.nim b/library/libwaku.nim index b1c43a6481..41a1c316c6 100644 --- a/library/libwaku.nim +++ b/library/libwaku.nim @@ -235,6 +235,8 @@ proc waku_relay_publish(ctx: ptr Context, callback(RET_ERR, unsafeAddr msg[0], cast[csize_t](len(msg)), userData) return RET_ERR + let msgHash = $sendReqRes.value + callback(RET_OK, unsafeAddr msgHash[0], cast[csize_t](len(msgHash)), userData) return RET_OK proc waku_start(ctx: ptr Context, diff --git a/library/waku_thread/inter_thread_communication/requests/protocols/relay_request.nim b/library/waku_thread/inter_thread_communication/requests/protocols/relay_request.nim index be0684bd15..9453aeb06e 100644 --- a/library/waku_thread/inter_thread_communication/requests/protocols/relay_request.nim +++ b/library/waku_thread/inter_thread_communication/requests/protocols/relay_request.nim @@ -4,11 +4,13 @@ import import chronicles, chronos, + stew/byteutils, stew/results, stew/shims/net import ../../../../../waku/waku_core/message/message, ../../../../../waku/node/waku_node, + ../../../../../waku/waku_core/message, ../../../../../waku/waku_core/time, # Timestamp ../../../../../waku/waku_core/topics/pubsub_topic, ../../../../../waku/waku_relay/protocol, @@ -104,13 +106,16 @@ proc process*(self: ptr RelayRequest, node.wakuRelay.unsubscribeAll($self.pubsubTopic) of PUBLISH: - let numPeers = await node.wakuRelay.publish($self.pubsubTopic, - self.message.toWakuMessage()) + let msg = self.message.toWakuMessage() + let pubsubTopic = $self.pubsubTopic + + let numPeers = await node.wakuRelay.publish(pubsubTopic, + msg) if numPeers == 0: return err("Message not sent because no peers found.") elif numPeers > 0: - # TODO: pending to return a valid message Id - return ok("hard-coded-message-id") + let msgHash = computeMessageHash(pubSubTopic, msg).to0xHex + return ok(msgHash) return ok("") From 88ff928213b92d20b54453687823afa510ee8d1a Mon Sep 17 00:00:00 2001 From: Aaryamann Challani <43716372+rymnc@users.noreply.github.com> Date: Fri, 1 Mar 2024 14:15:40 +0530 Subject: [PATCH 250/274] chore(rln-relay-v2): added tests for onchain rln-relay-v2 (#2482) * chore(rln-relay-v2): added tests for onchain rln-relay-v2 * Update tests/waku_rln_relay/test_rln_group_manager_onchain.nim Co-authored-by: Ivan FB <128452529+Ivansete-status@users.noreply.github.com> --------- Co-authored-by: Ivan FB <128452529+Ivansete-status@users.noreply.github.com> --- .../test_rln_group_manager_onchain.nim | 190 ++++++++++++++---- .../test_wakunode_rln_relay.nim | 11 +- .../group_manager/on_chain/group_manager.nim | 17 +- waku/waku_rln_relay/nonce_manager.nim | 2 +- waku/waku_rln_relay/rln/wrappers.nim | 23 ++- waku/waku_rln_relay/rln_relay.nim | 4 +- 6 files changed, 180 insertions(+), 67 deletions(-) diff --git a/tests/waku_rln_relay/test_rln_group_manager_onchain.nim b/tests/waku_rln_relay/test_rln_group_manager_onchain.nim index 63efbf7439..709542873a 100644 --- a/tests/waku_rln_relay/test_rln_group_manager_onchain.nim +++ b/tests/waku_rln_relay/test_rln_group_manager_onchain.nim @@ -31,6 +31,11 @@ proc generateCredentials(rlnInstance: ptr RLN): IdentityCredential = let credRes = membershipKeyGen(rlnInstance) return credRes.get() +when defined(rln_v2): + proc getRateCommitment(idCredential: IdentityCredential, userMessageLimit: UserMessageLimit): RateCommitment = + return RateCommitment(idCommitment: idCredential.idCommitment, + userMessageLimit: userMessageLimit) + proc generateCredentials(rlnInstance: ptr RLN, n: int): seq[IdentityCredential] = var credentials: seq[IdentityCredential] for i in 0 ..< n: @@ -84,7 +89,11 @@ proc uploadRLNContract*(ethClientAddress: string): Future[Address] {.async.} = debug "Address of the deployed registry contract: ", contractAddress let registryContract = web3.contractSender(WakuRlnRegistry, contractAddress) - let newStorageReceipt = await registryContract.newStorage().send() + when defined(rln_v2): + let initReceipt = await registryContract.initialize().send() + let newStorageReceipt = await registryContract.newStorage(20.u256).send() + else: + let newStorageReceipt = await registryContract.newStorage().send() debug "Receipt of the newStorage transaction: ", newStorageReceipt let newBalance = await web3.provider.eth_getBalance(web3.defaultAccount, "latest") @@ -278,14 +287,24 @@ suite "Onchain group manager": proc callback(registrations: seq[Membership]): Future[void] {.async.} = require: registrations.len == 1 - registrations[0].idCommitment == credentials.idCommitment + registrations[0].index == 0 + when defined(rln_v2): + require: + registrations[0].rateCommitment == getRateCommitment(credentials, UserMessageLimit(1)) + else: + require: + registrations[0].idCommitment == credentials.idCommitment + require: registrations[0].index == 0 fut.complete() return callback try: manager.onRegister(generateCallback(fut)) - await manager.register(credentials) + when defined(rln_v2): + await manager.register(credentials, UserMessageLimit(1)) + else: + await manager.register(credentials) await manager.startGroupSync() except Exception, CatchableError: assert false, "exception raised: " & getCurrentExceptionMsg() @@ -319,11 +338,18 @@ suite "Onchain group manager": proc generateCallback(futs: TestGroupSyncFuts, credentials: seq[IdentityCredential]): OnRegisterCallback = var futureIndex = 0 proc callback(registrations: seq[Membership]): Future[void] {.async.} = - if registrations.len == 1 and - registrations[0].idCommitment == credentials[futureIndex].idCommitment and - registrations[0].index == MembershipIndex(futureIndex): - futs[futureIndex].complete() - futureIndex += 1 + when defined(rln_v2): + if registrations.len == 1 and + registrations[0].rateCommitment == getRateCommitment(credentials[futureIndex], UserMessageLimit(1)) and + registrations[0].index == MembershipIndex(futureIndex): + futs[futureIndex].complete() + futureIndex += 1 + else: + if registrations.len == 1 and + registrations[0].idCommitment == credentials[futureIndex].idCommitment and + registrations[0].index == MembershipIndex(futureIndex): + futs[futureIndex].complete() + futureIndex += 1 return callback try: @@ -331,7 +357,10 @@ suite "Onchain group manager": await manager.startGroupSync() for i in 0 ..< credentials.len(): - await manager.register(credentials[i]) + when defined(rln_v2): + await manager.register(credentials[i], UserMessageLimit(1)) + else: + await manager.register(credentials[i]) except Exception, CatchableError: assert false, "exception raised: " & getCurrentExceptionMsg() @@ -352,7 +381,11 @@ suite "Onchain group manager": let dummyCommitment = default(IDCommitment) try: - await manager.register(dummyCommitment) + when defined(rln_v2): + await manager.register(RateCommitment(idCommitment: dummyCommitment, + userMessageLimit: UserMessageLimit(1))) + else: + await manager.register(dummyCommitment) except CatchableError: assert true except Exception: @@ -375,7 +408,11 @@ suite "Onchain group manager": let merkleRootBefore = merkleRootBeforeRes.get() try: - await manager.register(idCommitment) + when defined(rln_v2): + await manager.register(RateCommitment(idCommitment: idCommitment, + userMessageLimit: UserMessageLimit(1))) + else: + await manager.register(idCommitment) except Exception, CatchableError: assert false, "exception raised when calling register: " & getCurrentExceptionMsg() @@ -396,17 +433,27 @@ suite "Onchain group manager": let fut = newFuture[void]() proc callback(registrations: seq[Membership]): Future[void] {.async.} = + + when defined(rln_v2): + require: + registrations.len == 1 + registrations[0].rateCommitment == RateCommitment(idCommitment: idCommitment, userMessageLimit: UserMessageLimit(1)) + else: + require: + registrations[0].idCommitment == idCommitment require: - registrations.len == 1 - registrations[0].idCommitment == idCommitment registrations[0].index == 0 + registrations.len == 1 fut.complete() manager.onRegister(callback) await manager.init() try: await manager.startGroupSync() - await manager.register(idCommitment) + when defined(rln_v2): + await manager.register(RateCommitment(idCommitment: idCommitment, userMessageLimit: UserMessageLimit(1))) + else: + await manager.register(idCommitment) except Exception, CatchableError: assert false, "exception raised: " & getCurrentExceptionMsg() @@ -438,18 +485,27 @@ suite "Onchain group manager": let fut = newFuture[void]() proc callback(registrations: seq[Membership]): Future[void] {.async.} = - if registrations.len == 1 and - registrations[0].idCommitment == credentials.idCommitment and - registrations[0].index == 0: - manager.idCredentials = some(credentials) - manager.membershipIndex = some(registrations[0].index) - fut.complete() + when defined(rln_v2): + if registrations.len == 1 and + registrations[0].rateCommitment == getRateCommitment(credentials, UserMessageLimit(1)) and + registrations[0].index == 0: + manager.idCredentials = some(credentials) + fut.complete() + else: + if registrations.len == 1 and + registrations[0].idCommitment == credentials.idCommitment and + registrations[0].index == 0: + manager.idCredentials = some(credentials) + fut.complete() manager.onRegister(callback) try: await manager.startGroupSync() - await manager.register(credentials) + when defined(rln_v2): + await manager.register(credentials, UserMessageLimit(1)) + else: + await manager.register(credentials) except Exception, CatchableError: assert false, "exception raised: " & getCurrentExceptionMsg() @@ -462,8 +518,14 @@ suite "Onchain group manager": debug "epoch in bytes", epochHex = epoch.inHex() # generate proof - let validProofRes = manager.generateProof(data = messageBytes, - epoch = epoch) + when defined(rln_v2): + let validProofRes = manager.generateProof(data = messageBytes, + epoch = epoch, + messageId = MessageId(1)) + else: + let validProofRes = manager.generateProof(data = messageBytes, + epoch = epoch) + require: validProofRes.isOk() let validProof = validProofRes.get() @@ -488,6 +550,8 @@ suite "Onchain group manager": ## Assume the registration occured out of band manager.idCredentials = some(credentials) manager.membershipIndex = some(MembershipIndex(0)) + when defined(rln_v2): + manager.userMessageLimit = some(UserMessageLimit(1)) let messageBytes = "Hello".toBytes() @@ -496,8 +560,13 @@ suite "Onchain group manager": debug "epoch in bytes", epochHex = epoch.inHex() # generate proof - let validProofRes = manager.generateProof(data = messageBytes, - epoch = epoch) + when defined(rln_v2): + let validProofRes = manager.generateProof(data = messageBytes, + epoch = epoch, + messageId = MessageId(0)) + else: + let validProofRes = manager.generateProof(data = messageBytes, + epoch = epoch) require: validProofRes.isOk() let validProof = validProofRes.get() @@ -517,18 +586,27 @@ suite "Onchain group manager": let fut = newFuture[void]() proc callback(registrations: seq[Membership]): Future[void] {.async.} = - if registrations.len == 1 and - registrations[0].idCommitment == credentials.idCommitment and - registrations[0].index == 0: - manager.idCredentials = some(credentials) - manager.membershipIndex = some(registrations[0].index) - fut.complete() + when defined(rln_v2): + if registrations.len == 1 and + registrations[0].rateCommitment == getRateCommitment(credentials, UserMessageLimit(1)) and + registrations[0].index == 0: + manager.idCredentials = some(credentials) + fut.complete() + else: + if registrations.len == 1 and + registrations[0].idCommitment == credentials.idCommitment and + registrations[0].index == 0: + manager.idCredentials = some(credentials) + fut.complete() manager.onRegister(callback) try: await manager.startGroupSync() - await manager.register(credentials) + when defined(rln_v2): + await manager.register(credentials, UserMessageLimit(1)) + else: + await manager.register(credentials) except Exception, CatchableError: assert false, "exception raised: " & getCurrentExceptionMsg() await fut @@ -540,8 +618,13 @@ suite "Onchain group manager": debug "epoch in bytes", epochHex = epoch.inHex() # generate proof - let validProofRes = manager.generateProof(data = messageBytes, - epoch = epoch) + when defined(rln_v2): + let validProofRes = manager.generateProof(data = messageBytes, + epoch = epoch, + messageId = MessageId(0)) + else: + let validProofRes = manager.generateProof(data = messageBytes, + epoch = epoch) require: validProofRes.isOk() let validProof = validProofRes.get() @@ -566,7 +649,10 @@ suite "Onchain group manager": let idCredential = generateCredentials(manager.rlnInstance) try: - await manager.register(idCredential.idCommitment) + when defined(rln_v2): + await manager.register(getRateCommitment(idCredential, UserMessageLimit(1))) + else: + await manager.register(idCredential.idCommitment) except Exception, CatchableError: assert false, "exception raised when calling startGroupSync: " & getCurrentExceptionMsg() @@ -575,6 +661,8 @@ suite "Onchain group manager": ## Assume the registration occured out of band manager.idCredentials = some(idCredential2) manager.membershipIndex = some(MembershipIndex(0)) + when defined(rln_v2): + manager.userMessageLimit = some(UserMessageLimit(1)) let messageBytes = "Hello".toBytes() @@ -583,8 +671,14 @@ suite "Onchain group manager": debug "epoch in bytes", epochHex = epoch.inHex() # generate proof - let invalidProofRes = manager.generateProof(data = messageBytes, - epoch = epoch) + when defined(rln_v2): + let invalidProofRes = manager.generateProof(data = messageBytes, + epoch = epoch, + messageId = MessageId(0)) + else: + let invalidProofRes = manager.generateProof(data = messageBytes, + epoch = epoch) + require: invalidProofRes.isOk() let invalidProof = invalidProofRes.get() @@ -613,18 +707,28 @@ suite "Onchain group manager": proc generateCallback(futs: TestBackfillFuts, credentials: seq[IdentityCredential]): OnRegisterCallback = var futureIndex = 0 proc callback(registrations: seq[Membership]): Future[void] {.async.} = - if registrations.len == 1 and - registrations[0].idCommitment == credentials[futureIndex].idCommitment and - registrations[0].index == MembershipIndex(futureIndex): - futs[futureIndex].complete() - futureIndex += 1 + when defined(rln_v2): + if registrations.len == 1 and + registrations[0].rateCommitment == getRateCommitment(credentials[futureIndex], UserMessageLimit(1)) and + registrations[0].index == MembershipIndex(futureIndex): + futs[futureIndex].complete() + futureIndex += 1 + else: + if registrations.len == 1 and + registrations[0].idCommitment == credentials[futureIndex].idCommitment and + registrations[0].index == MembershipIndex(futureIndex): + futs[futureIndex].complete() + futureIndex += 1 return callback try: manager.onRegister(generateCallback(futures, credentials)) await manager.startGroupSync() for i in 0 ..< credentials.len(): - await manager.register(credentials[i]) + when defined(rln_v2): + await manager.register(credentials[i], UserMessageLimit(1)) + else: + await manager.register(credentials[i]) except Exception, CatchableError: assert false, "exception raised: " & getCurrentExceptionMsg() diff --git a/tests/waku_rln_relay/test_wakunode_rln_relay.nim b/tests/waku_rln_relay/test_wakunode_rln_relay.nim index 719ded6c88..d0e4d2d98e 100644 --- a/tests/waku_rln_relay/test_wakunode_rln_relay.nim +++ b/tests/waku_rln_relay/test_wakunode_rln_relay.nim @@ -258,8 +258,15 @@ procSuite "WakuNode - RLN relay": contentTopicBytes = contentTopic.toBytes input = concat(payload, contentTopicBytes) extraBytes: seq[byte] = @[byte(1),2,3] - rateLimitProofRes = node1.wakuRlnRelay.groupManager.generateProof(concat(input, extraBytes), # we add extra bytes to invalidate proof verification against original payload - epoch) + + when defined(rln_v2): + let nonceManager = node1.wakuRlnRelay.nonceManager + let rateLimitProofRes = node1.wakuRlnRelay.groupManager.generateProof(input, + epoch, + MessageId(0)) + else: + let rateLimitProofRes = node1.wakuRlnRelay.groupManager.generateProof(concat(input, extraBytes), # we add extra bytes to invalidate proof verification against original payload + epoch) require: rateLimitProofRes.isOk() let rateLimitProof = rateLimitProofRes.get().encode().buffer diff --git a/waku/waku_rln_relay/group_manager/on_chain/group_manager.nim b/waku/waku_rln_relay/group_manager/on_chain/group_manager.nim index 20891d4b26..9ed6de2f65 100644 --- a/waku/waku_rln_relay/group_manager/on_chain/group_manager.nim +++ b/waku/waku_rln_relay/group_manager/on_chain/group_manager.nim @@ -40,7 +40,9 @@ when defined(rln_v2): # this serves as an entrypoint into the rln storage contract proc register(storageIndex: Uint16, idCommitment: Uint256, userMessageLimit: Uint256) # this creates a new storage on the rln registry - proc newStorage() + proc newStorage(maxMessageLimit: Uint256) + # Initializes the implementation contract (only used in unit tests) + proc initialize() # membership contract interface contract(RlnStorage): @@ -142,10 +144,8 @@ when defined(rln_v2): initializedGuard(g) # convert the rateCommitment struct to a leaf value - let leavesRes = rateCommitments.toLeaves() - if leavesRes.isErr(): - raise newException(CatchableError, "failed to convert rateCommitments to leaves: " & leavesRes.error) - let leaves = cast[seq[seq[byte]]](leavesRes.get()) + let leaves = rateCommitments.toLeaves().valueOr: + raise newException(ValueError, "failed to convert rateCommitments to leaves: " & $error) waku_rln_membership_insertion_duration_seconds.nanosecondTime: let operationSuccess = g.rlnInstance.atomicWrite(some(start), @@ -269,11 +269,10 @@ when defined(rln_v2): let argumentsBytes = arguments # In TX log data, uints are encoded in big endian - userMessageLimit = UInt256.fromBytesBE(argumentsBytes[32..64]) membershipIndex = UInt256.fromBytesBE(argumentsBytes[64..^1]) + g.userMessageLimit = some(userMessageLimit) g.membershipIndex = some(membershipIndex.toMembershipIndex()) - g.userMessageLimit = some(userMessageLimit.toUserMessageLimit()) # don't handle member insertion into the tree here, it will be handled by the event listener return @@ -354,11 +353,11 @@ proc parseEvent(event: type MemberRegistered, try: # Parse the idComm offset += decode(data, offset, idComm) - # Parse the index - offset += decode(data, offset, index) when defined(rln_v2): # Parse the userMessageLimit offset += decode(data, offset, userMessageLimit) + # Parse the index + offset += decode(data, offset, index) when defined(rln_v2): return ok(Membership(rateCommitment: RateCommitment(idCommitment: idComm.toIDCommitment(), userMessageLimit: userMessageLimit.toUserMessageLimit()), diff --git a/waku/waku_rln_relay/nonce_manager.nim b/waku/waku_rln_relay/nonce_manager.nim index fbba55e696..e41e7ce4ab 100644 --- a/waku/waku_rln_relay/nonce_manager.nim +++ b/waku/waku_rln_relay/nonce_manager.nim @@ -52,7 +52,7 @@ proc init*(T: type NonceManager, nonceLimit: Nonce): T = ) -proc get*(n: NonceManager): NonceManagerResult[Nonce] = +proc getNonce*(n: NonceManager): NonceManagerResult[Nonce] = let now = getTime().toUnixFloat() var retNonce = n.nextNonce diff --git a/waku/waku_rln_relay/rln/wrappers.nim b/waku/waku_rln_relay/rln/wrappers.nim index da1a1d3b90..92e1c9d0cb 100644 --- a/waku/waku_rln_relay/rln/wrappers.nim +++ b/waku/waku_rln_relay/rln/wrappers.nim @@ -161,19 +161,22 @@ proc poseidon*(data: seq[seq[byte]]): RlnRelayResult[array[32, byte]] = return ok(output) when defined(rln_v2): - func toLeaf*(rateCommitment: RateCommitment): RlnRelayResult[MerkleNode] {.inline.} = + proc toLeaf*(rateCommitment: RateCommitment): RlnRelayResult[seq[byte]] = let idCommitment = rateCommitment.idCommitment let userMessageLimit = cast[array[32, byte]](rateCommitment.userMessageLimit) - let leafRes = poseidon(@[@idCommitment, @userMessageLimit]) - return leafRes - - func toLeaves*(rateCommitments: seq[RateCommitment]): RlnRelayResult[seq[MerkleNode]] {.inline.} = - var leaves = newSeq[MerkleNode](rateCommitments.len) + let leaf = poseidon(@[@idCommitment, @userMessageLimit]).valueOr: + return err("could not convert the rate commitment to a leaf") + var retLeaf = newSeq[byte](leaf.len) + for i in 0.. Date: Fri, 1 Mar 2024 12:05:27 +0100 Subject: [PATCH 251/274] chore: Postgres migrations (#2477) * Add postgres_driver/migrations.nim * Postgres and archive logic adaptation to the migration implementation * libwaku: adapt node_lifecycle_request.nim to migration refactoring * test_app.nim: add more detail for test that only fails in CI * postgres migrations: store the migration scripts inside the resulting wakunode binary instead of external .sql files. --- apps/wakunode2/app.nim | 2 +- .../requests/node_lifecycle_request.nim | 10 +- .../content_script_version_1.nim | 20 ++ .../content_script_version_2.nim | 68 ++++++ .../pg_migration_manager.nim | 37 ++++ tests/testlib/postgres.nim | 33 +++ tests/waku_archive/test_driver_postgres.nim | 72 ++----- .../test_driver_postgres_query.nim | 198 +++--------------- tests/wakunode2/test_app.nim | 2 +- waku/waku_archive/driver.nim | 3 + waku/waku_archive/driver/builder.nim | 29 ++- .../driver/postgres_driver/migrations.nim | 95 +++++++++ .../postgres_driver/postgres_driver.nim | 76 ++++++- .../driver/queue_driver/queue_driver.nim | 4 + .../driver/sqlite_driver/sqlite_driver.nim | 4 + 15 files changed, 400 insertions(+), 253 deletions(-) create mode 100644 migrations/message_store_postgres/content_script_version_1.nim create mode 100644 migrations/message_store_postgres/content_script_version_2.nim create mode 100644 migrations/message_store_postgres/pg_migration_manager.nim create mode 100644 tests/testlib/postgres.nim create mode 100644 waku/waku_archive/driver/postgres_driver/migrations.nim diff --git a/apps/wakunode2/app.nim b/apps/wakunode2/app.nim index b61aa58978..092574f227 100644 --- a/apps/wakunode2/app.nim +++ b/apps/wakunode2/app.nim @@ -493,7 +493,7 @@ proc setupProtocols(node: WakuNode, if conf.store: # Archive setup - let archiveDriverRes = ArchiveDriver.new(conf.storeMessageDbUrl, + let archiveDriverRes = waitFor ArchiveDriver.new(conf.storeMessageDbUrl, conf.storeMessageDbVacuum, conf.storeMessageDbMigration, conf.storeMaxNumDbConnections, diff --git a/library/waku_thread/inter_thread_communication/requests/node_lifecycle_request.nim b/library/waku_thread/inter_thread_communication/requests/node_lifecycle_request.nim index d6d3750da5..8f41c26edc 100644 --- a/library/waku_thread/inter_thread_communication/requests/node_lifecycle_request.nim +++ b/library/waku_thread/inter_thread_communication/requests/node_lifecycle_request.nim @@ -70,11 +70,11 @@ proc configureStore(node: WakuNode, discard # Archive setup - let archiveDriverRes = ArchiveDriver.new(storeDbUrl, - storeVacuum, - storeDbMigration, - storeMaxNumDbConnections, - onFatalErrorAction) + let archiveDriverRes = await ArchiveDriver.new(storeDbUrl, + storeVacuum, + storeDbMigration, + storeMaxNumDbConnections, + onFatalErrorAction) if archiveDriverRes.isErr(): return err("failed to setup archive driver: " & archiveDriverRes.error) diff --git a/migrations/message_store_postgres/content_script_version_1.nim b/migrations/message_store_postgres/content_script_version_1.nim new file mode 100644 index 0000000000..37c6bf2ec1 --- /dev/null +++ b/migrations/message_store_postgres/content_script_version_1.nim @@ -0,0 +1,20 @@ +const ContentScriptVersion_1* = """ +CREATE TABLE IF NOT EXISTS messages ( + pubsubTopic VARCHAR NOT NULL, + contentTopic VARCHAR NOT NULL, + payload VARCHAR, + version INTEGER NOT NULL, + timestamp BIGINT NOT NULL, + id VARCHAR NOT NULL, + messageHash VARCHAR NOT NULL, + storedAt BIGINT NOT NULL, + CONSTRAINT messageIndex PRIMARY KEY (messageHash) +); + +CREATE TABLE iF NOT EXISTS version ( + version INTEGER NOT NULL +); + +INSERT INTO version (version) VALUES(1); + +""" diff --git a/migrations/message_store_postgres/content_script_version_2.nim b/migrations/message_store_postgres/content_script_version_2.nim new file mode 100644 index 0000000000..674e9993dd --- /dev/null +++ b/migrations/message_store_postgres/content_script_version_2.nim @@ -0,0 +1,68 @@ +const ContentScriptVersion_2* = """ +ALTER TABLE messages RENAME TO messages_backup; +ALTER TABLE messages_backup DROP CONSTRAINT messageIndex; + +CREATE TABLE IF NOT EXISTS messages ( + pubsubTopic VARCHAR NOT NULL, + contentTopic VARCHAR NOT NULL, + payload VARCHAR, + version INTEGER NOT NULL, + timestamp BIGINT NOT NULL, + id VARCHAR NOT NULL, + messageHash VARCHAR NOT NULL, + storedAt BIGINT NOT NULL, + CONSTRAINT messageIndex PRIMARY KEY (messageHash, storedAt) + ) PARTITION BY RANGE (storedAt); + +DO $$ +DECLARE + min_storedAt numeric; + max_storedAt numeric; + min_storedAtSeconds integer = 0; + max_storedAtSeconds integer = 0; + partition_name TEXT; + create_partition_stmt TEXT; +BEGIN + SELECT MIN(storedAt) into min_storedAt + FROM messages_backup; + + SELECT MAX(storedAt) into max_storedAt + FROM messages_backup; + + min_storedAtSeconds := min_storedAt / 1000000000; + max_storedAtSeconds := max_storedAt / 1000000000; + + partition_name := 'messages_' || min_storedAtSeconds || '_' || max_storedAtSeconds; + create_partition_stmt := 'CREATE TABLE ' || partition_name || + ' PARTITION OF messages FOR VALUES FROM (' || + min_storedAt || ') TO (' || (max_storedAt + 1) || ')'; + IF min_storedAtSeconds > 0 AND max_storedAtSeconds > 0 THEN + EXECUTE create_partition_stmt USING partition_name, min_storedAt, max_storedAt; + END IF; +END $$; + +INSERT INTO messages ( + pubsubTopic, + contentTopic, + payload, + version, + timestamp, + id, + messageHash, + storedAt + ) + SELECT pubsubTopic, + contentTopic, + payload, + version, + timestamp, + id, + messageHash, + storedAt + FROM messages_backup; + +DROP TABLE messages_backup; + +UPDATE version SET version = 2 WHERE version = 1; + +""" diff --git a/migrations/message_store_postgres/pg_migration_manager.nim b/migrations/message_store_postgres/pg_migration_manager.nim new file mode 100644 index 0000000000..a43a289b5c --- /dev/null +++ b/migrations/message_store_postgres/pg_migration_manager.nim @@ -0,0 +1,37 @@ + +import + content_script_version_1, + content_script_version_2 + +type + MigrationScript* = object + version*: int + scriptContent*: string + +proc init*(T: type MigrationScript, + targetVersion: int, + scriptContent: string): T = + + return MigrationScript( + targetVersion: targetVersion, + scriptContent: scriptContent) + +const PgMigrationScripts* = @[ + MigrationScript( + version: 1, + scriptContent: ContentScriptVersion_1), + MigrationScript( + version: 2, + scriptContent: ContentScriptVersion_2) +] + +proc getMigrationScripts*(currentVersion: int64, + targetVersion: int64): seq[string] = + var ret = newSeq[string]() + var v = currentVersion + while v < targetVersion: + ret.add(PgMigrationScripts[v].scriptContent) + v.inc() + return ret + + diff --git a/tests/testlib/postgres.nim b/tests/testlib/postgres.nim new file mode 100644 index 0000000000..adaf8aead4 --- /dev/null +++ b/tests/testlib/postgres.nim @@ -0,0 +1,33 @@ + +import + chronicles, + chronos +import + ../../../waku/waku_archive, + ../../../waku/waku_archive/driver as driver_module, + ../../../waku/waku_archive/driver/builder, + ../../../waku/waku_archive/driver/postgres_driver + +const storeMessageDbUrl = "postgres://postgres:test123@localhost:5432/postgres" + +proc newTestPostgresDriver*(): Future[Result[ArchiveDriver, string]] {.async.} = + + proc onErr(errMsg: string) {.gcsafe, closure.} = + error "error creating ArchiveDriver", error = errMsg + quit(QuitFailure) + + let + vacuum = false + migrate = true + maxNumConn = 50 + + let driverRes = await ArchiveDriver.new(storeMessageDbUrl, + vacuum, + migrate, + maxNumConn, + onErr) + if driverRes.isErr(): + onErr("could not create archive driver: " & driverRes.error) + + return ok(driverRes.get()) + diff --git a/tests/waku_archive/test_driver_postgres.nim b/tests/waku_archive/test_driver_postgres.nim index 90dbf7eeb2..0f0d266052 100644 --- a/tests/waku_archive/test_driver_postgres.nim +++ b/tests/waku_archive/test_driver_postgres.nim @@ -9,7 +9,9 @@ import ../../../waku/waku_archive/driver/postgres_driver, ../../../waku/waku_core, ../../../waku/waku_core/message/digest, - ../testlib/wakucore + ../testlib/wakucore, + ../testlib/testasync, + ../testlib/postgres proc now():int64 = getTime().toUnix() @@ -24,18 +26,24 @@ proc computeTestCursor(pubsubTopic: PubsubTopic, ) suite "Postgres driver": + ## Unique driver instance + var driver {.threadvar.}: PostgresDriver - const storeMessageDbUrl = "postgres://postgres:test123@localhost:5432/postgres" + asyncSetup: + let driverRes = await newTestPostgresDriver() + if driverRes.isErr(): + assert false, driverRes.error - asyncTest "Asynchronous queries": - let driverRes = PostgresDriver.new(dbUrl = storeMessageDbUrl, - maxConnections = 100) + driver = PostgresDriver(driverRes.get()) - assert driverRes.isOk(), driverRes.error + asyncTeardown: + let resetRes = await driver.reset() + if resetRes.isErr(): + assert false, resetRes.error - let driver = driverRes.value - discard await driver.reset() + (await driver.close()).expect("driver to close") + asyncTest "Asynchronous queries": var futures = newSeq[Future[ArchiveDriverResult[void]]](0) let beforeSleep = now() @@ -50,33 +58,9 @@ suite "Postgres driver": # connections and we spawn 100 tasks that spend ~1s each. require diff < 20 - (await driver.close()).expect("driver to close") - - asyncTest "Init database": - let driverRes = PostgresDriver.new(storeMessageDbUrl) - assert driverRes.isOk(), driverRes.error - - let driver = driverRes.value - discard await driver.reset() - - let initRes = await driver.init() - assert initRes.isOk(), initRes.error - - (await driver.close()).expect("driver to close") - asyncTest "Insert a message": const contentTopic = "test-content-topic" - let driverRes = PostgresDriver.new(storeMessageDbUrl) - assert driverRes.isOk(), driverRes.error - - let driver = driverRes.get() - - discard await driver.reset() - - let initRes = await driver.init() - assert initRes.isOk(), initRes.error - let msg = fakeWakuMessage(contentTopic=contentTopic) let computedDigest = computeDigest(msg) @@ -94,24 +78,12 @@ suite "Postgres driver": toHex(computedDigest.data) == toHex(digest) and toHex(actualMsg.payload) == toHex(msg.payload) - (await driver.close()).expect("driver to close") - asyncTest "Insert and query message": const contentTopic1 = "test-content-topic-1" const contentTopic2 = "test-content-topic-2" const pubsubTopic1 = "pubsubtopic-1" const pubsubTopic2 = "pubsubtopic-2" - let driverRes = PostgresDriver.new(storeMessageDbUrl) - assert driverRes.isOk(), driverRes.error - - let driver = driverRes.value - - discard await driver.reset() - - let initRes = await driver.init() - assert initRes.isOk(), initRes.error - let msg1 = fakeWakuMessage(contentTopic=contentTopic1) var putRes = await driver.put(pubsubTopic1, msg1, computeDigest(msg1), computeMessageHash(pubsubTopic1, msg1), msg1.timestamp) @@ -178,19 +150,8 @@ suite "Postgres driver": assert messagesRes.isOk(), messagesRes.error require messagesRes.get().len == 1 - (await driver.close()).expect("driver to close") - asyncTest "Insert true duplicated messages": # Validates that two completely equal messages can not be stored. - let driverRes = PostgresDriver.new(storeMessageDbUrl) - assert driverRes.isOk(), driverRes.error - - let driver = driverRes.value - - discard await driver.reset() - - let initRes = await driver.init() - assert initRes.isOk(), initRes.error let now = now() @@ -205,4 +166,3 @@ suite "Postgres driver": msg2, computeDigest(msg2), computeMessageHash(DefaultPubsubTopic, msg2), msg2.timestamp) require not putRes.isOk() - (await driver.close()).expect("driver to close") diff --git a/tests/waku_archive/test_driver_postgres_query.nim b/tests/waku_archive/test_driver_postgres_query.nim index 2de13f079a..649cc657e6 100644 --- a/tests/waku_archive/test_driver_postgres_query.nim +++ b/tests/waku_archive/test_driver_postgres_query.nim @@ -7,11 +7,15 @@ import chronicles import ../../../waku/waku_archive, + ../../../waku/waku_archive/driver as driver_module, + ../../../waku/waku_archive/driver/builder, ../../../waku/waku_archive/driver/postgres_driver, ../../../waku/waku_core, ../../../waku/waku_core/message/digest, ../testlib/common, - ../testlib/wakucore + ../testlib/wakucore, + ../testlib/testasync, + ../testlib/postgres logScope: @@ -24,17 +28,6 @@ logScope: # Initialize the random number generator common.randomize() -const storeMessageDbUrl = "postgres://postgres:test123@localhost:5432/postgres" - -proc newTestPostgresDriver(): ArchiveDriver = - let driver = PostgresDriver.new(dbUrl = storeMessageDbUrl).tryGet() - discard waitFor driver.reset() - - let initRes = waitFor driver.init() - assert initRes.isOk(), initRes.error - - return driver - proc computeTestCursor(pubsubTopic: PubsubTopic, message: WakuMessage): ArchiveCursor = ArchiveCursor( pubsubTopic: pubsubTopic, @@ -43,14 +36,28 @@ proc computeTestCursor(pubsubTopic: PubsubTopic, message: WakuMessage): ArchiveC digest: computeDigest(message) ) -suite "Postgres driver - query by content topic": +suite "Postgres driver - queries": + ## Unique driver instance + var driver {.threadvar.}: PostgresDriver + + asyncSetup: + let driverRes = await newTestPostgresDriver() + if driverRes.isErr(): + assert false, driverRes.error + + driver = PostgresDriver(driverRes.get()) + + asyncTeardown: + let resetRes = await driver.reset() + if resetRes.isErr(): + assert false, resetRes.error + + (await driver.close()).expect("driver to close") asyncTest "no content topic": ## Given const contentTopic = "test-content-topic" - let driver = newTestPostgresDriver() - let expected = @[ fakeWakuMessage(@[byte 0], contentTopic=DefaultContentTopic, ts=ts(00)), fakeWakuMessage(@[byte 1], contentTopic=DefaultContentTopic, ts=ts(10)), @@ -83,15 +90,10 @@ suite "Postgres driver - query by content topic": check: filteredMessages == expected[0..4] - ## Cleanup - (await driver.close()).expect("driver to close") - asyncTest "single content topic": ## Given const contentTopic = "test-content-topic" - let driver = newTestPostgresDriver() - let expected = @[ fakeWakuMessage(@[byte 0], ts=ts(00)), fakeWakuMessage(@[byte 1], ts=ts(10)), @@ -126,15 +128,10 @@ suite "Postgres driver - query by content topic": check: filteredMessages == expected[2..3] - ## Cleanup - (await driver.close()).expect("driver to close") - asyncTest "single content topic - descending order": ## Given const contentTopic = "test-content-topic" - let driver = newTestPostgresDriver() - let expected = @[ fakeWakuMessage(@[byte 0], ts=ts(00)), fakeWakuMessage(@[byte 1], ts=ts(10)), @@ -169,17 +166,12 @@ suite "Postgres driver - query by content topic": check: filteredMessages == expected[6..7].reversed() - ## Cleanup - (await driver.close()).expect("driver to close") - asyncTest "multiple content topic": ## Given const contentTopic1 = "test-content-topic-1" const contentTopic2 = "test-content-topic-2" const contentTopic3 = "test-content-topic-3" - let driver = newTestPostgresDriver() - let expected = @[ fakeWakuMessage(@[byte 0], ts=ts(00)), fakeWakuMessage(@[byte 1], ts=ts(10)), @@ -232,15 +224,10 @@ suite "Postgres driver - query by content topic": filteredMessages = res.tryGet().mapIt(it[1]) check filteredMessages == @[expected[2]] - ## Cleanup - (await driver.close()).expect("driver to close") - asyncTest "single content topic - no results": ## Given const contentTopic = "test-content-topic" - let driver = newTestPostgresDriver() - let expected = @[ fakeWakuMessage(@[byte 0], contentTopic=DefaultContentTopic, ts=ts(00)), fakeWakuMessage(@[byte 1], contentTopic=DefaultContentTopic, ts=ts(10)), @@ -270,15 +257,10 @@ suite "Postgres driver - query by content topic": check: filteredMessages.len == 0 - ## Cleanup - (await driver.close()).expect("driver to close") - asyncTest "content topic and max page size - not enough messages stored": ## Given const pageSize: uint = 50 - let driver = newTestPostgresDriver() - for t in 0..<40: let msg = fakeWakuMessage(@[byte t], DefaultContentTopic, ts=ts(t)) require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), computeMessageHash(DefaultPubsubTopic, msg), msg.timestamp)).isOk() @@ -297,18 +279,11 @@ suite "Postgres driver - query by content topic": check: filteredMessages.len == 40 - ## Cleanup - (await driver.close()).expect("driver to close") - -suite "Postgres driver - query by pubsub topic": - asyncTest "pubsub topic": ## Given const contentTopic = "test-content-topic" const pubsubTopic = "test-pubsub-topic" - let driver = newTestPostgresDriver() - let expected = @[ (DefaultPubsubTopic, fakeWakuMessage(@[byte 0], ts=ts(00))), (DefaultPubsubTopic, fakeWakuMessage(@[byte 1], ts=ts(10))), @@ -344,16 +319,11 @@ suite "Postgres driver - query by pubsub topic": check: filteredMessages == expectedMessages[4..5] - ## Cleanup - (await driver.close()).expect("driver to close") - asyncTest "no pubsub topic": ## Given const contentTopic = "test-content-topic" const pubsubTopic = "test-pubsub-topic" - let driver = newTestPostgresDriver() - let expected = @[ (DefaultPubsubTopic, fakeWakuMessage(@[byte 0], ts=ts(00))), (DefaultPubsubTopic, fakeWakuMessage(@[byte 1], ts=ts(10))), @@ -388,16 +358,11 @@ suite "Postgres driver - query by pubsub topic": check: filteredMessages == expectedMessages[0..1] - ## Cleanup - (await driver.close()).expect("driver to close") - asyncTest "content topic and pubsub topic": ## Given const contentTopic = "test-content-topic" const pubsubTopic = "test-pubsub-topic" - let driver = newTestPostgresDriver() - let expected = @[ (DefaultPubsubTopic, fakeWakuMessage(@[byte 0], ts=ts(00))), (DefaultPubsubTopic, fakeWakuMessage(@[byte 1], ts=ts(10))), @@ -435,17 +400,10 @@ suite "Postgres driver - query by pubsub topic": check: filteredMessages == expectedMessages[4..5] - ## Cleanup - (await driver.close()).expect("driver to close") - -suite "Postgres driver - query by cursor": - asyncTest "only cursor": ## Given const contentTopic = "test-content-topic" - let driver = newTestPostgresDriver() - let expected = @[ fakeWakuMessage(@[byte 0], ts=ts(00)), fakeWakuMessage(@[byte 1], ts=ts(10)), @@ -482,15 +440,10 @@ suite "Postgres driver - query by cursor": check: filteredMessages == expected[5..6] - ## Cleanup - (await driver.close()).expect("driver to close") - asyncTest "only cursor - descending order": ## Given const contentTopic = "test-content-topic" - let driver = newTestPostgresDriver() - let expected = @[ fakeWakuMessage(@[byte 0], ts=ts(00)), fakeWakuMessage(@[byte 1], ts=ts(10)), @@ -527,15 +480,10 @@ suite "Postgres driver - query by cursor": check: filteredMessages == expected[2..3].reversed() - ## Cleanup - (await driver.close()).expect("driver to close") - asyncTest "content topic and cursor": ## Given const contentTopic = "test-content-topic" - let driver = newTestPostgresDriver() - let expected = @[ fakeWakuMessage(@[byte 0], ts=ts(00)), fakeWakuMessage(@[byte 1], ts=ts(10)), @@ -571,15 +519,10 @@ suite "Postgres driver - query by cursor": check: filteredMessages == expected[5..6] - ## Cleanup - (await driver.close()).expect("driver to close") - asyncTest "content topic and cursor - descending order": ## Given const contentTopic = "test-content-topic" - let driver = newTestPostgresDriver() - let expected = @[ fakeWakuMessage(@[byte 0], ts=ts(00)), fakeWakuMessage(@[byte 1], ts=ts(10)), @@ -615,16 +558,11 @@ suite "Postgres driver - query by cursor": check: filteredMessages == expected[2..5].reversed() - ## Cleanup - (await driver.close()).expect("driver to close") - asyncTest "pubsub topic and cursor": ## Given const contentTopic = "test-content-topic" const pubsubTopic = "test-pubsub-topic" - let driver = newTestPostgresDriver() - let timeOrigin = now() let expected = @[ (DefaultPubsubTopic, fakeWakuMessage(@[byte 0], ts=ts(00, timeOrigin))), @@ -667,16 +605,11 @@ suite "Postgres driver - query by cursor": check: filteredMessages == expectedMessages[6..7] - ## Cleanup - (await driver.close()).expect("driver to close") - asyncTest "pubsub topic and cursor - descending order": ## Given const contentTopic = "test-content-topic" const pubsubTopic = "test-pubsub-topic" - let driver = newTestPostgresDriver() - let timeOrigin = now() let expected = @[ (DefaultPubsubTopic, fakeWakuMessage(@[byte 0], ts=ts(00, timeOrigin))), @@ -719,17 +652,10 @@ suite "Postgres driver - query by cursor": check: filteredMessages == expectedMessages[4..5].reversed() - ## Cleanup - (await driver.close()).expect("driver to close") - -suite "Postgres driver - query by time range": - asyncTest "start time only": ## Given const contentTopic = "test-content-topic" - let driver = newTestPostgresDriver() - let timeOrigin = now() let expected = @[ fakeWakuMessage(@[byte 0], contentTopic=contentTopic, ts=ts(00, timeOrigin)), @@ -763,15 +689,10 @@ suite "Postgres driver - query by time range": check: filteredMessages == expected[2..6] - ## Cleanup - (await driver.close()).expect("driver to close") - asyncTest "end time only": ## Given const contentTopic = "test-content-topic" - let driver = newTestPostgresDriver() - let timeOrigin = now() let expected = @[ fakeWakuMessage(@[byte 0], contentTopic=contentTopic, ts=ts(00, timeOrigin)), @@ -805,16 +726,11 @@ suite "Postgres driver - query by time range": check: filteredMessages == expected[0..4] - ## Cleanup - (await driver.close()).expect("driver to close") - asyncTest "start time and end time": ## Given const contentTopic = "test-content-topic" const pubsubTopic = "test-pubsub-topic" - let driver = newTestPostgresDriver() - let timeOrigin = now() let expected = @[ (DefaultPubsubTopic, fakeWakuMessage(@[byte 0], ts=ts(00, timeOrigin))), @@ -855,15 +771,10 @@ suite "Postgres driver - query by time range": check: filteredMessages == expectedMessages[2..4] - ## Cleanup - (await driver.close()).expect("driver to close") - asyncTest "invalid time range - no results": ## Given const contentTopic = "test-content-topic" - let driver = newTestPostgresDriver() - let timeOrigin = now() let expected = @[ fakeWakuMessage(@[byte 0], contentTopic=contentTopic, ts=ts(00, timeOrigin)), @@ -899,15 +810,10 @@ suite "Postgres driver - query by time range": check: filteredMessages.len == 0 - ## Cleanup - (await driver.close()).expect("driver to close") - asyncTest "time range start and content topic": ## Given const contentTopic = "test-content-topic" - let driver = newTestPostgresDriver() - let timeOrigin = now() let expected = @[ fakeWakuMessage(@[byte 0], contentTopic=contentTopic, ts=ts(00, timeOrigin)), @@ -941,15 +847,10 @@ suite "Postgres driver - query by time range": check: filteredMessages == expected[2..6] - ## Cleanup - (await driver.close()).expect("driver to close") - asyncTest "time range start and content topic - descending order": ## Given const contentTopic = "test-content-topic" - let driver = newTestPostgresDriver() - let timeOrigin = now() let expected = @[ fakeWakuMessage(@[byte 0], contentTopic=contentTopic, ts=ts(00, timeOrigin)), @@ -986,15 +887,10 @@ suite "Postgres driver - query by time range": check: filteredMessages == expected[2..6].reversed() - ## Cleanup - (await driver.close()).expect("driver to close") - asyncTest "time range start, single content topic and cursor": ## Given const contentTopic = "test-content-topic" - let driver = newTestPostgresDriver() - let timeOrigin = now() let expected = @[ fakeWakuMessage(@[byte 0], contentTopic=contentTopic, ts=ts(00, timeOrigin)), @@ -1034,15 +930,10 @@ suite "Postgres driver - query by time range": check: filteredMessages == expected[4..9] - ## Cleanup - (await driver.close()).expect("driver to close") - asyncTest "time range start, single content topic and cursor - descending order": ## Given const contentTopic = "test-content-topic" - let driver = newTestPostgresDriver() - let timeOrigin = now() let expected = @[ fakeWakuMessage(@[byte 0], contentTopic=contentTopic, ts=ts(00, timeOrigin)), @@ -1082,16 +973,11 @@ suite "Postgres driver - query by time range": check: filteredMessages == expected[3..4].reversed() - ## Cleanup - (await driver.close()).expect("driver to close") - asyncTest "time range, content topic, pubsub topic and cursor": ## Given const contentTopic = "test-content-topic" const pubsubTopic = "test-pubsub-topic" - let driver = newTestPostgresDriver() - let timeOrigin = now() let expected = @[ # start_time @@ -1136,16 +1022,11 @@ suite "Postgres driver - query by time range": check: filteredMessages == expectedMessages[3..4] - ## Cleanup - (await driver.close()).expect("driver to close") - asyncTest "time range, content topic, pubsub topic and cursor - descending order": ## Given const contentTopic = "test-content-topic" const pubsubTopic = "test-pubsub-topic" - let driver = newTestPostgresDriver() - let timeOrigin = now() let expected = @[ (DefaultPubsubTopic, fakeWakuMessage(@[byte 0], ts=ts(00, timeOrigin))), @@ -1190,16 +1071,11 @@ suite "Postgres driver - query by time range": check: filteredMessages == expectedMessages[4..5].reversed() - ## Cleanup - (await driver.close()).expect("driver to close") - asyncTest "time range, content topic, pubsub topic and cursor - cursor timestamp out of time range": ## Given const contentTopic = "test-content-topic" const pubsubTopic = "test-pubsub-topic" - let driver = newTestPostgresDriver() - let timeOrigin = now() let expected = @[ (DefaultPubsubTopic, fakeWakuMessage(@[byte 0], ts=ts(00, timeOrigin))), @@ -1245,16 +1121,11 @@ suite "Postgres driver - query by time range": check: filteredMessages == expectedMessages[4..5] - ## Cleanup - (await driver.close()).expect("driver to close") - asyncTest "time range, content topic, pubsub topic and cursor - cursor timestamp out of time range, descending order": ## Given const contentTopic = "test-content-topic" const pubsubTopic = "test-pubsub-topic" - let driver = newTestPostgresDriver() - let timeOrigin = now() let expected = @[ (DefaultPubsubTopic, fakeWakuMessage(@[byte 0], ts=ts(00, timeOrigin))), @@ -1299,16 +1170,9 @@ suite "Postgres driver - query by time range": check: filteredMessages.len == 0 - ## Cleanup - (await driver.close()).expect("driver to close") - -suite "Postgres driver - retention policy": - asyncTest "Get oldest and newest message timestamp": const contentTopic = "test-content-topic" - let driver = newTestPostgresDriver() - let timeOrigin = now() let oldestTime = ts(00, timeOrigin) let newestTime = ts(100, timeOrigin) @@ -1337,14 +1201,9 @@ suite "Postgres driver - retention policy": assert res.isOk(), res.error assert res.get() == newestTime, "Failed to retrieve the newest timestamp" - ## Cleanup - (await driver.close()).expect("driver to close") - asyncTest "Delete messages older than certain timestamp": const contentTopic = "test-content-topic" - let driver = newTestPostgresDriver() - let timeOrigin = now() let targetTime = ts(40, timeOrigin) let expected = @[ @@ -1375,14 +1234,9 @@ suite "Postgres driver - retention policy": assert res.isOk(), res.error assert res.get() == 3, "Failed to retrieve the # of messages after deletion" - ## Cleanup - (await driver.close()).expect("driver to close") - asyncTest "Keep last n messages": const contentTopic = "test-content-topic" - let driver = newTestPostgresDriver() - let timeOrigin = now() let expected = @[ fakeWakuMessage(@[byte 0], contentTopic=contentTopic, ts=ts(00, timeOrigin)), @@ -1412,5 +1266,9 @@ suite "Postgres driver - retention policy": assert res.isOk(), res.error assert res.get() == 2, "Failed to retrieve the # of messages after deletion" - ## Cleanup - (await driver.close()).expect("driver to close") + asyncTest "Exists table": + + var existsRes = await driver.existsTable("version") + assert existsRes.isOk(), existsRes.error + check existsRes.get() == true + diff --git a/tests/wakunode2/test_app.nim b/tests/wakunode2/test_app.nim index 71fcd009d1..4ec65425fe 100644 --- a/tests/wakunode2/test_app.nim +++ b/tests/wakunode2/test_app.nim @@ -43,7 +43,7 @@ suite "Wakunode2 - App initialization": let res = wakunode2.setupPeerPersistence() ## Then - check res.isOk() + assert res.isOk(), $res.error test "node setup is successful with default configuration": ## Given diff --git a/waku/waku_archive/driver.nim b/waku/waku_archive/driver.nim index fb38266632..fccb14bd10 100644 --- a/waku/waku_archive/driver.nim +++ b/waku/waku_archive/driver.nim @@ -79,3 +79,6 @@ method decreaseDatabaseSize*(driver: ArchiveDriver, method close*(driver: ArchiveDriver): Future[ArchiveDriverResult[void]] {.base, async.} = discard +method existsTable*(driver: ArchiveDriver, tableName: string): + Future[ArchiveDriverResult[bool]] {.base, async.} = discard + diff --git a/waku/waku_archive/driver/builder.nim b/waku/waku_archive/driver/builder.nim index e853b63a62..c3f399c6e4 100644 --- a/waku/waku_archive/driver/builder.nim +++ b/waku/waku_archive/driver/builder.nim @@ -15,6 +15,7 @@ import ../../common/error_handling, ./sqlite_driver, ./sqlite_driver/migrations as archive_driver_sqlite_migrations, + ./postgres_driver/migrations as archive_postgres_driver_migrations, ./queue_driver export @@ -31,7 +32,7 @@ proc new*(T: type ArchiveDriver, migrate: bool, maxNumConn: int, onFatalErrorAction: OnFatalErrorHandler): - Result[T, string] = + Future[Result[T, string]] {.async.} = ## url - string that defines the database ## vacuum - if true, a cleanup operation will be applied to the database ## migrate - if true, the database schema will be updated @@ -63,17 +64,25 @@ proc new*(T: type ArchiveDriver, let db = dbRes.get() # SQLite vacuum - let (pageSize, pageCount, freelistCount) = ? db.gatherSqlitePageStats() + let sqliteStatsRes = db.gatherSqlitePageStats() + if sqliteStatsRes.isErr(): + return err("error while gathering sqlite stats: " & $sqliteStatsRes.error) + + let (pageSize, pageCount, freelistCount) = sqliteStatsRes.get() debug "sqlite database page stats", pageSize = pageSize, pages = pageCount, freePages = freelistCount if vacuum and (pageCount > 0 and freelistCount > 0): - ? db.performSqliteVacuum() + let vacuumRes = db.performSqliteVacuum() + if vacuumRes.isErr(): + return err("error in vacuum sqlite: " & $vacuumRes.error) # Database migration if migrate: - ? archive_driver_sqlite_migrations.migrate(db) + let migrateRes = archive_driver_sqlite_migrations.migrate(db) + if migrateRes.isErr(): + return err("error in migrate sqlite: " & $migrateRes.error) debug "setting up sqlite waku archive driver" let res = SqliteDriver.new(db) @@ -92,13 +101,11 @@ proc new*(T: type ArchiveDriver, let driver = res.get() - try: - # The table should exist beforehand. - let newTableRes = waitFor driver.createMessageTable() - if newTableRes.isErr(): - return err("error creating table: " & newTableRes.error) - except CatchableError: - return err("exception creating table: " & getCurrentExceptionMsg()) + # Database migration + if migrate: + let migrateRes = await archive_postgres_driver_migrations.migrate(driver) + if migrateRes.isErr(): + return err("ArchiveDriver build failed in migration: " & $migrateRes.error) return ok(driver) diff --git a/waku/waku_archive/driver/postgres_driver/migrations.nim b/waku/waku_archive/driver/postgres_driver/migrations.nim new file mode 100644 index 0000000000..74cfb4530b --- /dev/null +++ b/waku/waku_archive/driver/postgres_driver/migrations.nim @@ -0,0 +1,95 @@ +{.push raises: [].} + +import + std/[tables, strutils, os], + stew/results, + chronicles, + chronos +import + ../../../common/databases/common, + ../../../../migrations/message_store_postgres/pg_migration_manager, + ../postgres_driver + +logScope: + topics = "waku archive migration" + +const SchemaVersion* = 1 # increase this when there is an update in the database schema + +proc breakIntoStatements*(script: string): seq[string] = + ## Given a full migration script, that can potentially contain a list + ## of SQL statements, this proc splits it into the contained isolated statements + ## that should be executed one after the other. + var statements = newSeq[string]() + + let lines = script.split('\n') + + var simpleStmt: string + var plSqlStatement: string + var insidePlSqlScript = false + for line in lines: + if line.strip().len == 0: + continue + + if insidePlSqlScript: + if line.contains("END $$"): + ## End of the Pl/SQL script + plSqlStatement &= line + statements.add(plSqlStatement) + plSqlStatement = "" + insidePlSqlScript = false + continue + + else: + plSqlStatement &= line & "\n" + + if line.contains("DO $$"): + ## Beginning of the Pl/SQL script + insidePlSqlScript = true + plSqlStatement &= line & "\n" + + if not insidePlSqlScript: + if line.contains(';'): + ## End of simple statement + simpleStmt &= line + statements.add(simpleStmt) + simpleStmt = "" + else: + simpleStmt &= line & "\n" + + return statements + +proc migrate*(driver: PostgresDriver, + targetVersion = SchemaVersion): + Future[DatabaseResult[void]] {.async.} = + + debug "starting message store's postgres database migration" + + let currentVersion = (await driver.getCurrentVersion()).valueOr: + return err("migrate error could not retrieve current version: " & $error) + + if currentVersion == targetVersion: + debug "database schema is up to date", + currentVersion=currentVersion, targetVersion=targetVersion + return ok() + + info "database schema is outdated", currentVersion=currentVersion, targetVersion=targetVersion + + # Load migration scripts + let scripts = pg_migration_manager.getMigrationScripts(currentVersion, targetVersion) + + # Run the migration scripts + for script in scripts: + + for statement in script.breakIntoStatements(): + debug "executing migration statement", statement=statement + + (await driver.performWriteQuery(statement)).isOkOr: + error "failed to execute migration statement", statement=statement, error=error + return err("failed to execute migration statement") + + debug "migration statement executed succesfully", statement=statement + + debug "finished message store's postgres database migration" + + return ok() + diff --git a/waku/waku_archive/driver/postgres_driver/postgres_driver.nim b/waku/waku_archive/driver/postgres_driver/postgres_driver.nim index 443eb0f388..71efa491d7 100644 --- a/waku/waku_archive/driver/postgres_driver/postgres_driver.nim +++ b/waku/waku_archive/driver/postgres_driver/postgres_driver.nim @@ -4,7 +4,7 @@ else: {.push raises: [].} import - std/[nre,options,sequtils,strutils,times], + std/[nre,options,sequtils,strutils,times,strformat], stew/[results,byteutils], db_postgres, postgres, @@ -28,6 +28,9 @@ type PostgresDriver* = ref object of ArchiveDriver proc dropTableQuery(): string = "DROP TABLE messages" +proc dropVersionTableQuery(): string = + "DROP TABLE version" + proc createTableQuery(): string = "CREATE TABLE IF NOT EXISTS messages (" & " pubsubTopic VARCHAR NOT NULL," & @@ -111,6 +114,15 @@ proc new*(T: type PostgresDriver, return ok(PostgresDriver(writeConnPool: writeConnPool, readConnPool: readConnPool)) +proc performWriteQuery*(s: PostgresDriver, + query: string): Future[ArchiveDriverResult[void]] {.async.} = + ## Executes a query that changes the database state + ## TODO: we can reduce the code a little with this proc + (await s.writeConnPool.pgQuery(query)).isOkOr: + return err(fmt"error in {query}: {error}") + + return ok() + proc createMessageTable*(s: PostgresDriver): Future[ArchiveDriverResult[void]] {.async.} = @@ -120,7 +132,7 @@ proc createMessageTable*(s: PostgresDriver): return ok() -proc deleteMessageTable*(s: PostgresDriver): +proc deleteMessageTable(s: PostgresDriver): Future[ArchiveDriverResult[void]] {.async.} = let execRes = await s.writeConnPool.pgQuery(dropTableQuery()) @@ -129,18 +141,22 @@ proc deleteMessageTable*(s: PostgresDriver): return ok() -proc init*(s: PostgresDriver): Future[ArchiveDriverResult[void]] {.async.} = +proc deleteVersionTable(s: PostgresDriver): + Future[ArchiveDriverResult[void]] {.async.} = - let createMsgRes = await s.createMessageTable() - if createMsgRes.isErr(): - return err("createMsgRes.isErr in init: " & createMsgRes.error) + let execRes = await s.writeConnPool.pgQuery(dropVersionTableQuery()) + if execRes.isErr(): + return err("error in deleteVersionTable: " & execRes.error) return ok() proc reset*(s: PostgresDriver): Future[ArchiveDriverResult[void]] {.async.} = - - let ret = await s.deleteMessageTable() - return ret + ## This is only used for testing purposes, to set a fresh database at the beginning of each test + (await s.deleteMessageTable()).isOkOr: + return err("error deleting message table: " & $error) + (await s.deleteVersionTable()).isOkOr: + return err("error deleting version table: " & $error) + return ok() proc rowCallbackImpl(pqResult: ptr PGresult, outRows: var seq[(PubsubTopic, WakuMessage, seq[byte], Timestamp)]) = @@ -570,3 +586,45 @@ proc sleep*(s: PostgresDriver, seconds: int): return err("exception sleeping: " & getCurrentExceptionMsg()) return ok() + +method existsTable*(s: PostgresDriver, tableName: string): + Future[ArchiveDriverResult[bool]] {.async.} = + let query: string = fmt""" + SELECT EXISTS ( + SELECT FROM + pg_tables + WHERE + tablename = '{tableName}' + ); + """ + + var exists: string + proc rowCallback(pqResult: ptr PGresult) = + if pqResult.pqnfields() != 1: + error "Wrong number of fields in existsTable" + return + + if pqResult.pqNtuples() != 1: + error "Wrong number of rows in existsTable" + return + + exists = $(pqgetvalue(pqResult, 0, 0)) + + (await s.readConnPool.pgQuery(query, newSeq[string](0), rowCallback)).isOkOr: + return err("existsTable failed in getRow: " & $error) + + return ok(exists == "t") + +proc getCurrentVersion*(s: PostgresDriver): + Future[ArchiveDriverResult[int64]] {.async.} = + + let existsVersionTable = (await s.existsTable("version")).valueOr: + return err("error in getCurrentVersion-existsTable: " & $error) + + if not existsVersionTable: + return ok(0) + + let res = (await s.getInt(fmt"SELECT version FROM version")).valueOr: + return err("error in getMessagesCount: " & $error) + + return ok(res) diff --git a/waku/waku_archive/driver/queue_driver/queue_driver.nim b/waku/waku_archive/driver/queue_driver/queue_driver.nim index 2db8a3d844..27d9ae9638 100644 --- a/waku/waku_archive/driver/queue_driver/queue_driver.nim +++ b/waku/waku_archive/driver/queue_driver/queue_driver.nim @@ -240,6 +240,10 @@ method getAllMessages*(driver: QueueDriver): # TODO: Implement this message_store method return err("interface method not implemented") +method existsTable*(driver: QueueDriver, tableName: string): + Future[ArchiveDriverResult[bool]] {.async.} = + return err("interface method not implemented") + method getMessages*(driver: QueueDriver, contentTopic: seq[ContentTopic] = @[], pubsubTopic = none(PubsubTopic), diff --git a/waku/waku_archive/driver/sqlite_driver/sqlite_driver.nim b/waku/waku_archive/driver/sqlite_driver/sqlite_driver.nim index 88d1974efa..5a74928c3b 100644 --- a/waku/waku_archive/driver/sqlite_driver/sqlite_driver.nim +++ b/waku/waku_archive/driver/sqlite_driver/sqlite_driver.nim @@ -189,3 +189,7 @@ method close*(s: SqliteDriver): s.db.close() return ok() +method existsTable*(s: SqliteDriver, tableName: string): + Future[ArchiveDriverResult[bool]] {.async.} = + return err("existsTable method not implemented in sqlite_driver") + From 0a75122828cc77e25c3bfdf26aa4fd275e469a62 Mon Sep 17 00:00:00 2001 From: Simon-Pierre Vivier Date: Fri, 1 Mar 2024 07:58:45 -0500 Subject: [PATCH 252/274] fix: time on 32 bits architecture (#2492) authored-by: Emil Ivanichkov --- tests/testlib/wakucore.nim | 2 +- tests/waku_core/test_time.nim | 4 ---- waku/waku_core/time.nim | 4 ++-- 3 files changed, 3 insertions(+), 7 deletions(-) diff --git a/tests/testlib/wakucore.nim b/tests/testlib/wakucore.nim index 785b76a8cb..82dd305e1a 100644 --- a/tests/testlib/wakucore.nim +++ b/tests/testlib/wakucore.nim @@ -20,7 +20,7 @@ proc now*(): Timestamp = getNanosecondTime(getTime().toUnixFloat()) proc ts*(offset=0, origin=now()): Timestamp = - origin + getNanosecondTime(offset) + origin + getNanosecondTime(int64(offset)) # Switch diff --git a/tests/waku_core/test_time.nim b/tests/waku_core/test_time.nim index 8d48e5f988..d575e57272 100644 --- a/tests/waku_core/test_time.nim +++ b/tests/waku_core/test_time.nim @@ -21,14 +21,10 @@ suite "Waku Core - Time": ## When let - timeInSecondsInt = secondsPart.int timeInSecondsInt64 = secondsPart.int64 - timeInSecondsFloat = float(secondsFloat) timeInSecondsFloat64 = float64(secondsFloat) ## Then check: - getNanosecondTime(timeInSecondsInt) == lowResTimestamp getNanosecondTime(timeInSecondsInt64) == lowResTimestamp - getNanosecondTime(timeInSecondsFloat) == highResTimestamp getNanosecondTime(timeInSecondsFloat64) == highResTimestamp diff --git a/waku/waku_core/time.nim b/waku/waku_core/time.nim index 4a96e0a1a2..d91960bfd7 100644 --- a/waku/waku_core/time.nim +++ b/waku/waku_core/time.nim @@ -9,8 +9,8 @@ import type Timestamp* = int64 # A nanosecond precision timestamp -proc getNanosecondTime*[T: SomeNumber](timeInSeconds: T): Timestamp = - var ns = Timestamp(timeInSeconds * 1_000_000_000.T) +proc getNanosecondTime*(timeInSeconds: int64 | float64): Timestamp = + let ns = Timestamp(timeInSeconds * 1_000_000_000) return ns proc nowInUnixFloat(): float = From 91e3f8cde61b8ef3ca4332710b9ec9d7bc4fb786 Mon Sep 17 00:00:00 2001 From: Simon-Pierre Vivier Date: Fri, 1 Mar 2024 08:01:37 -0500 Subject: [PATCH 253/274] fix: notify Waku Metadata when Waku Filter subscribe to a topic (#2493) --- waku/node/waku_node.nim | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/waku/node/waku_node.nim b/waku/node/waku_node.nim index db30f202ea..91c0494419 100644 --- a/waku/node/waku_node.nim +++ b/waku/node/waku_node.nim @@ -571,6 +571,9 @@ proc filterSubscribe*(node: WakuNode, let subRes = await node.wakuFilterClient.subscribe(remotePeer, pubsubTopic.get(), contentTopics) if subRes.isOk(): info "v2 subscribed to topic", pubsubTopic=pubsubTopic, contentTopics=contentTopics + + # Purpose is to update Waku Metadata + node.topicSubscriptionQueue.emit((kind: PubsubSub, topic: pubsubTopic.get())) else: error "failed filter v2 subscription", error=subRes.error waku_node_errors.inc(labelValues = ["subscribe_filter_failure"]) @@ -605,6 +608,9 @@ proc filterSubscribe*(node: WakuNode, for pubsub, topics in topicMap.pairs: info "subscribed to topic", pubsubTopic=pubsub, contentTopics=topics + # Purpose is to update Waku Metadata + node.topicSubscriptionQueue.emit((kind: PubsubSub, topic: $pubsub)) + # return the last error or ok return subRes @@ -689,6 +695,9 @@ proc filterUnsubscribe*(node: WakuNode, let unsubRes = await node.wakuFilterClient.unsubscribe(remotePeer, pubsubTopic.get(), contentTopics) if unsubRes.isOk(): info "unsubscribed from topic", pubsubTopic=pubsubTopic.get(), contentTopics=contentTopics + + # Purpose is to update Waku Metadata + node.topicSubscriptionQueue.emit((kind: PubsubUnsub, topic: pubsubTopic.get())) else: error "failed filter unsubscription", error=unsubRes.error waku_node_errors.inc(labelValues = ["unsubscribe_filter_failure"]) @@ -724,6 +733,9 @@ proc filterUnsubscribe*(node: WakuNode, for pubsub, topics in topicMap.pairs: info "unsubscribed from topic", pubsubTopic=pubsub, contentTopics=topics + # Purpose is to update Waku Metadata + node.topicSubscriptionQueue.emit((kind: PubsubUnsub, topic: $pubsub)) + # return the last error or ok return unsubRes From 361fe2cdc7c48e458a9cd3bb1b38df28f3cda65e Mon Sep 17 00:00:00 2001 From: gabrielmer <101006718+gabrielmer@users.noreply.github.com> Date: Sun, 3 Mar 2024 02:59:53 +0200 Subject: [PATCH 254/274] chore: moving node initialization code to node_factory.nim (#2479) --- apps/chat2/chat2.nim | 1 + apps/chat2bridge/chat2bridge.nim | 1 + apps/networkmonitor/networkmonitor.nim | 1 + apps/wakucanary/wakucanary.nim | 3 +- apps/wakunode2/app.nim | 352 +--------------- apps/wakunode2/wakunode2.nim | 2 +- examples/publisher.nim | 3 +- examples/subscriber.nim | 3 +- .../requests/node_lifecycle_request.nim | 2 +- tests/testlib/wakunode.nim | 5 +- tests/wakunode2/test_validators.nim | 4 +- tools/rln_db_inspector/rln_db_inspector.nim | 2 +- .../rln_keystore_generator.nim | 2 +- waku/{node => factory}/builder.nim | 7 +- .../factory}/external_config.nim | 12 +- .../factory}/internal_config.nim | 12 +- waku/factory/node_factory.nim | 375 ++++++++++++++++++ .../factory/validator_signed.nim | 6 +- waku/waku_node.nim | 2 - 19 files changed, 413 insertions(+), 382 deletions(-) rename waku/{node => factory}/builder.nim (98%) rename {apps/wakunode2 => waku/factory}/external_config.nim (98%) rename {apps/wakunode2 => waku/factory}/internal_config.nim (97%) create mode 100644 waku/factory/node_factory.nim rename apps/wakunode2/wakunode2_validator_signed.nim => waku/factory/validator_signed.nim (96%) diff --git a/apps/chat2/chat2.nim b/apps/chat2/chat2.nim index c03653650b..9cc2228c8d 100644 --- a/apps/chat2/chat2.nim +++ b/apps/chat2/chat2.nim @@ -33,6 +33,7 @@ import ../../waku/waku_node, ../../waku/node/waku_metrics, ../../waku/node/peer_manager, + ../../waku/factory/builder, ../../waku/common/utils/nat, ./config_chat2 diff --git a/apps/chat2bridge/chat2bridge.nim b/apps/chat2bridge/chat2bridge.nim index 38177118bc..dba70be836 100644 --- a/apps/chat2bridge/chat2bridge.nim +++ b/apps/chat2bridge/chat2bridge.nim @@ -21,6 +21,7 @@ import ../../waku/waku_filter, ../../waku/waku_filter_v2, ../../waku/waku_store, + ../../waku/factory/builder, # Chat 2 imports ../chat2/chat2, # Common cli config diff --git a/apps/networkmonitor/networkmonitor.nim b/apps/networkmonitor/networkmonitor.nim index ee46338ac6..0171001eb6 100644 --- a/apps/networkmonitor/networkmonitor.nim +++ b/apps/networkmonitor/networkmonitor.nim @@ -28,6 +28,7 @@ import ../../waku/waku_discv5, ../../waku/waku_dnsdisc, ../../waku/waku_rln_relay, + ../../waku/factory/builder, ../wakunode2/networks_config, ./networkmonitor_metrics, ./networkmonitor_config, diff --git a/apps/wakucanary/wakucanary.nim b/apps/wakucanary/wakucanary.nim index 6d29a0adc0..55d6e86d16 100644 --- a/apps/wakucanary/wakucanary.nim +++ b/apps/wakucanary/wakucanary.nim @@ -15,7 +15,8 @@ import ../../waku/waku_enr, ../../waku/node/peer_manager, ../../waku/waku_core, - ../../waku/waku_node + ../../waku/waku_node, + ../../waku/factory/builder # protocols and their tag const ProtocolsTable = { diff --git a/apps/wakunode2/app.nim b/apps/wakunode2/app.nim index 092574f227..de66279019 100644 --- a/apps/wakunode2/app.nim +++ b/apps/wakunode2/app.nim @@ -29,7 +29,6 @@ import ../../waku/node/waku_metrics, ../../waku/node/peer_manager, ../../waku/node/peer_manager/peer_store/waku_peer_storage, - ../../waku/node/peer_manager/peer_store/migrations as peer_store_sqlite_migrations, ../../waku/waku_api/message_cache, ../../waku/waku_api/handlers, ../../waku/waku_api/rest/server, @@ -51,9 +50,9 @@ import ../../waku/waku_lightpush/common, ../../waku/waku_filter, ../../waku/waku_filter_v2, - ./wakunode2_validator_signed, - ./internal_config, - ./external_config + ../../waku/factory/node_factory, + ../../waku/factory/internal_config, + ../../waku/factory/external_config logScope: topics = "wakunode app" @@ -135,21 +134,6 @@ proc init*(T: type App, rng: ref HmacDrbgContext, conf: WakuNodeConf): T = node: nil ) - -## Peer persistence - -const PeerPersistenceDbUrl = "peers.db" -proc setupPeerStorage(): AppResult[Option[WakuPeerStorage]] = - let db = ? SqliteDatabase.new(PeerPersistenceDbUrl) - - ? peer_store_sqlite_migrations.migrate(db) - - let res = WakuPeerStorage.new(db) - if res.isErr(): - return err("failed to init peer store" & res.error) - - ok(some(res.value)) - proc setupPeerPersistence*(app: var App): AppResult[void] = if not app.conf.peerPersistence: return ok() @@ -162,38 +146,6 @@ proc setupPeerPersistence*(app: var App): AppResult[void] = ok() -## Retrieve dynamic bootstrap nodes (DNS discovery) - -proc retrieveDynamicBootstrapNodes*(dnsDiscovery: bool, - dnsDiscoveryUrl: string, - dnsDiscoveryNameServers: seq[IpAddress]): - AppResult[seq[RemotePeerInfo]] = - - if dnsDiscovery and dnsDiscoveryUrl != "": - # DNS discovery - debug "Discovering nodes using Waku DNS discovery", url=dnsDiscoveryUrl - - var nameServers: seq[TransportAddress] - for ip in dnsDiscoveryNameServers: - nameServers.add(initTAddress(ip, Port(53))) # Assume all servers use port 53 - - let dnsResolver = DnsResolver.new(nameServers) - - proc resolver(domain: string): Future[string] {.async, gcsafe.} = - trace "resolving", domain=domain - let resolved = await dnsResolver.resolveTxt(domain) - return resolved[0] # Use only first answer - - var wakuDnsDiscovery = WakuDnsDiscovery.init(dnsDiscoveryUrl, resolver) - if wakuDnsDiscovery.isOk(): - return wakuDnsDiscovery.get().findPeers() - .mapErr(proc (e: cstring): string = $e) - else: - warn "Failed to init Waku DNS discovery" - - debug "No method for retrieving dynamic bootstrap nodes specified." - ok(newSeq[RemotePeerInfo]()) # Return an empty seq by default - proc setupDyamicBootstrapNodes*(app: var App): AppResult[void] = let dynamicBootstrapNodesRes = retrieveDynamicBootstrapNodes(app.conf.dnsDiscovery, app.conf.dnsDiscoveryUrl, @@ -243,58 +195,6 @@ proc setupDiscoveryV5*(app: App): WakuDiscoveryV5 = app.node.topicSubscriptionQueue, ) -## Init waku node instance - -proc initNode(conf: WakuNodeConf, - netConfig: NetConfig, - rng: ref HmacDrbgContext, - nodeKey: crypto.PrivateKey, - record: enr.Record, - peerStore: Option[WakuPeerStorage], - dynamicBootstrapNodes: openArray[RemotePeerInfo] = @[]): AppResult[WakuNode] = - - ## Setup a basic Waku v2 node based on a supplied configuration - ## file. Optionally include persistent peer storage. - ## No protocols are mounted yet. - - var dnsResolver: DnsResolver - if conf.dnsAddrs: - # Support for DNS multiaddrs - var nameServers: seq[TransportAddress] - for ip in conf.dnsAddrsNameServers: - nameServers.add(initTAddress(ip, Port(53))) # Assume all servers use port 53 - - dnsResolver = DnsResolver.new(nameServers) - - var node: WakuNode - - let pStorage = if peerStore.isNone(): nil - else: peerStore.get() - - # Build waku node instance - var builder = WakuNodeBuilder.init() - builder.withRng(rng) - builder.withNodeKey(nodekey) - builder.withRecord(record) - builder.withNetworkConfiguration(netConfig) - builder.withPeerStorage(pStorage, capacity = conf.peerStoreCapacity) - builder.withSwitchConfiguration( - maxConnections = some(conf.maxConnections.int), - secureKey = some(conf.websocketSecureKeyPath), - secureCert = some(conf.websocketSecureCertPath), - nameResolver = dnsResolver, - sendSignedPeerRecord = conf.relayPeerExchange, # We send our own signed peer record when peer exchange enabled - agentString = some(conf.agentString) - ) - builder.withColocationLimit(conf.colocationLimit) - builder.withPeerManagerConfig( - maxRelayPeers = conf.maxRelayPeers, - shardAware = conf.relayShardedPeerManagement,) - - node = ? builder.build().mapErr(proc (err: string): string = "failed to create waku node instance: " & err) - - ok(node) - proc setupWakuApp*(app: var App): AppResult[void] = ## Waku node let initNodeRes = initNode(app.conf, app.netConf, app.rng, app.key, app.record, app.peerStore, app.dynamicBootstrapNodes) @@ -379,209 +279,6 @@ proc updateApp(app: var App): AppResult[void] = return ok() -## Mount protocols - -proc setupProtocols(node: WakuNode, - conf: WakuNodeConf, - nodeKey: crypto.PrivateKey): - Future[AppResult[void]] {.async.} = - ## Setup configured protocols on an existing Waku v2 node. - ## Optionally include persistent message storage. - ## No protocols are started yet. - - node.mountMetadata(conf.clusterId).isOkOr: - return err("failed to mount waku metadata protocol: " & error) - - # Mount relay on all nodes - var peerExchangeHandler = none(RoutingRecordsHandler) - if conf.relayPeerExchange: - proc handlePeerExchange(peer: PeerId, topic: string, - peers: seq[RoutingRecordsPair]) {.gcsafe.} = - ## Handle peers received via gossipsub peer exchange - # TODO: Only consider peers on pubsub topics we subscribe to - let exchangedPeers = peers.filterIt(it.record.isSome()) # only peers with populated records - .mapIt(toRemotePeerInfo(it.record.get())) - - debug "connecting to exchanged peers", src=peer, topic=topic, numPeers=exchangedPeers.len - - # asyncSpawn, as we don't want to block here - asyncSpawn node.connectToNodes(exchangedPeers, "peer exchange") - - peerExchangeHandler = some(handlePeerExchange) - - if conf.relay: - let pubsubTopics = - if conf.pubsubTopics.len > 0 or conf.contentTopics.len > 0: - # TODO autoshard content topics only once. - # Already checked for errors in app.init - let shards = conf.contentTopics.mapIt(getShard(it).expect("Valid Shard")) - conf.pubsubTopics & shards - else: - conf.topics - - let parsedMaxMsgSize = parseMsgSize(conf.maxMessageSize).valueOr: - return err("failed to parse 'max-num-bytes-msg-size' param: " & $error) - - debug "Setting max message size", num_bytes=parsedMaxMsgSize - - try: - await mountRelay(node, pubsubTopics, peerExchangeHandler = peerExchangeHandler, - int(parsedMaxMsgSize)) - except CatchableError: - return err("failed to mount waku relay protocol: " & getCurrentExceptionMsg()) - - # Add validation keys to protected topics - var subscribedProtectedTopics : seq[ProtectedTopic] - for topicKey in conf.protectedTopics: - if topicKey.topic notin pubsubTopics: - warn "protected topic not in subscribed pubsub topics, skipping adding validator", - protectedTopic=topicKey.topic, subscribedTopics=pubsubTopics - continue - subscribedProtectedTopics.add(topicKey) - notice "routing only signed traffic", protectedTopic=topicKey.topic, publicKey=topicKey.key - node.wakuRelay.addSignedTopicsValidator(subscribedProtectedTopics) - - # Enable Rendezvous Discovery protocol when Relay is enabled - try: - await mountRendezvous(node) - except CatchableError: - return err("failed to mount waku rendezvous protocol: " & getCurrentExceptionMsg()) - - # Keepalive mounted on all nodes - try: - await mountLibp2pPing(node) - except CatchableError: - return err("failed to mount libp2p ping protocol: " & getCurrentExceptionMsg()) - - var onFatalErrorAction = proc(msg: string) {.gcsafe, closure.} = - ## Action to be taken when an internal error occurs during the node run. - ## e.g. the connection with the database is lost and not recovered. - error "Unrecoverable error occurred", error = msg - quit(QuitFailure) - - if conf.rlnRelay: - when defined(rln_v2): - let rlnConf = WakuRlnConfig( - rlnRelayDynamic: conf.rlnRelayDynamic, - rlnRelayCredIndex: conf.rlnRelayCredIndex, - rlnRelayEthContractAddress: conf.rlnRelayEthContractAddress, - rlnRelayEthClientAddress: string(conf.rlnRelayethClientAddress), - rlnRelayCredPath: conf.rlnRelayCredPath, - rlnRelayCredPassword: conf.rlnRelayCredPassword, - rlnRelayTreePath: conf.rlnRelayTreePath, - rlnRelayUserMessageLimit: conf.rlnRelayUserMessageLimit, - rlnEpochSizeSec: conf.rlnEpochSizeSec, - onFatalErrorAction: onFatalErrorAction, - ) - else: - let rlnConf = WakuRlnConfig( - rlnRelayDynamic: conf.rlnRelayDynamic, - rlnRelayCredIndex: conf.rlnRelayCredIndex, - rlnRelayEthContractAddress: conf.rlnRelayEthContractAddress, - rlnRelayEthClientAddress: string(conf.rlnRelayethClientAddress), - rlnRelayCredPath: conf.rlnRelayCredPath, - rlnRelayCredPassword: conf.rlnRelayCredPassword, - rlnRelayTreePath: conf.rlnRelayTreePath, - rlnEpochSizeSec: conf.rlnEpochSizeSec, - onFatalErrorAction: onFatalErrorAction, - ) - - try: - waitFor node.mountRlnRelay(rlnConf) - except CatchableError: - return err("failed to mount waku RLN relay protocol: " & getCurrentExceptionMsg()) - - if conf.store: - # Archive setup - let archiveDriverRes = waitFor ArchiveDriver.new(conf.storeMessageDbUrl, - conf.storeMessageDbVacuum, - conf.storeMessageDbMigration, - conf.storeMaxNumDbConnections, - onFatalErrorAction) - if archiveDriverRes.isErr(): - return err("failed to setup archive driver: " & archiveDriverRes.error) - - let retPolicyRes = RetentionPolicy.new(conf.storeMessageRetentionPolicy) - if retPolicyRes.isErr(): - return err("failed to create retention policy: " & retPolicyRes.error) - - let mountArcRes = node.mountArchive(archiveDriverRes.get(), - retPolicyRes.get()) - if mountArcRes.isErr(): - return err("failed to mount waku archive protocol: " & mountArcRes.error) - - # Store setup - try: - await mountStore(node) - except CatchableError: - return err("failed to mount waku store protocol: " & getCurrentExceptionMsg()) - - mountStoreClient(node) - if conf.storenode != "": - let storeNode = parsePeerInfo(conf.storenode) - if storeNode.isOk(): - node.peerManager.addServicePeer(storeNode.value, WakuStoreCodec) - else: - return err("failed to set node waku store peer: " & storeNode.error) - - # NOTE Must be mounted after relay - if conf.lightpush: - try: - await mountLightPush(node) - except CatchableError: - return err("failed to mount waku lightpush protocol: " & getCurrentExceptionMsg()) - - if conf.lightpushnode != "": - let lightPushNode = parsePeerInfo(conf.lightpushnode) - if lightPushNode.isOk(): - mountLightPushClient(node) - node.peerManager.addServicePeer(lightPushNode.value, WakuLightPushCodec) - else: - return err("failed to set node waku lightpush peer: " & lightPushNode.error) - - # Filter setup. NOTE Must be mounted after relay - if conf.filter: - try: - await mountLegacyFilter(node, filterTimeout = chronos.seconds(conf.filterTimeout)) - except CatchableError: - return err("failed to mount waku legacy filter protocol: " & getCurrentExceptionMsg()) - - try: - await mountFilter(node, - subscriptionTimeout = chronos.seconds(conf.filterSubscriptionTimeout), - maxFilterPeers = conf.filterMaxPeersToServe, - maxFilterCriteriaPerPeer = conf.filterMaxCriteria) - except CatchableError: - return err("failed to mount waku filter protocol: " & getCurrentExceptionMsg()) - - if conf.filternode != "": - let filterNode = parsePeerInfo(conf.filternode) - if filterNode.isOk(): - try: - await node.mountFilterClient() - node.peerManager.addServicePeer(filterNode.value, WakuLegacyFilterCodec) - node.peerManager.addServicePeer(filterNode.value, WakuFilterSubscribeCodec) - except CatchableError: - return err("failed to mount waku filter client protocol: " & getCurrentExceptionMsg()) - else: - return err("failed to set node waku filter peer: " & filterNode.error) - - # waku peer exchange setup - if conf.peerExchangeNode != "" or conf.peerExchange: - try: - await mountPeerExchange(node) - except CatchableError: - return err("failed to mount waku peer-exchange protocol: " & getCurrentExceptionMsg()) - - if conf.peerExchangeNode != "": - let peerExchangeNode = parsePeerInfo(conf.peerExchangeNode) - if peerExchangeNode.isOk(): - node.peerManager.addServicePeer(peerExchangeNode.value, WakuPeerExchangeCodec) - else: - return err("failed to set node waku peer-exchange peer: " & peerExchangeNode.error) - - return ok() - proc setupAndMountProtocols*(app: App): Future[AppResult[void]] {.async.} = return await setupProtocols( app.node, @@ -589,49 +286,6 @@ proc setupAndMountProtocols*(app: App): Future[AppResult[void]] {.async.} = app.key ) -## Start node - -proc startNode(node: WakuNode, conf: WakuNodeConf, - dynamicBootstrapNodes: seq[RemotePeerInfo] = @[]): Future[AppResult[void]] {.async.} = - ## Start a configured node and all mounted protocols. - ## Connect to static nodes and start - ## keep-alive, if configured. - - # Start Waku v2 node - try: - await node.start() - except CatchableError: - return err("failed to start waku node: " & getCurrentExceptionMsg()) - - # Connect to configured static nodes - if conf.staticnodes.len > 0: - try: - await connectToNodes(node, conf.staticnodes, "static") - except CatchableError: - return err("failed to connect to static nodes: " & getCurrentExceptionMsg()) - - if dynamicBootstrapNodes.len > 0: - info "Connecting to dynamic bootstrap peers" - try: - await connectToNodes(node, dynamicBootstrapNodes, "dynamic bootstrap") - except CatchableError: - return err("failed to connect to dynamic bootstrap nodes: " & getCurrentExceptionMsg()) - - # retrieve px peers and add the to the peer store - if conf.peerExchangeNode != "": - let desiredOutDegree = node.wakuRelay.parameters.d.uint64() - await node.fetchPeerExchangePeers(desiredOutDegree) - - # Start keepalive, if enabled - if conf.keepAlive: - node.startKeepalive() - - # Maintain relay connections - if conf.relay: - node.peerManager.start() - - return ok() - proc startApp*(app: var App): AppResult[void] = let nodeRes = catch: (waitFor startNode(app.node,app.conf,app.dynamicBootstrapNodes)) diff --git a/apps/wakunode2/wakunode2.nim b/apps/wakunode2/wakunode2.nim index e90eada2ad..7f9661873d 100644 --- a/apps/wakunode2/wakunode2.nim +++ b/apps/wakunode2/wakunode2.nim @@ -15,7 +15,7 @@ import import ../../tools/rln_keystore_generator/rln_keystore_generator, ../../waku/common/logging, - ./external_config, + ../../waku/factory/external_config, ./networks_config, ./app diff --git a/examples/publisher.nim b/examples/publisher.nim index 526340c442..800ea8932a 100644 --- a/examples/publisher.nim +++ b/examples/publisher.nim @@ -15,7 +15,8 @@ import ../../../waku/waku_core, ../../../waku/waku_node, ../../../waku/waku_enr, - ../../../waku/waku_discv5 + ../../../waku/waku_discv5, + ../../../waku/factory/builder proc now*(): Timestamp = getNanosecondTime(getTime().toUnixFloat()) diff --git a/examples/subscriber.nim b/examples/subscriber.nim index 5b58656474..a415cc4196 100644 --- a/examples/subscriber.nim +++ b/examples/subscriber.nim @@ -15,7 +15,8 @@ import ../../../waku/waku_core, ../../../waku/waku_node, ../../../waku/waku_enr, - ../../../waku/waku_discv5 + ../../../waku/waku_discv5, + ../../../waku/factory/builder # An accesible bootstrap node. See wakuv2.prod fleets.status.im const bootstrapNode = "enr:-Nm4QOdTOKZJKTUUZ4O_W932CXIET-M9NamewDnL78P5u9DOGnZl" & diff --git a/library/waku_thread/inter_thread_communication/requests/node_lifecycle_request.nim b/library/waku_thread/inter_thread_communication/requests/node_lifecycle_request.nim index 8f41c26edc..8396c7cce2 100644 --- a/library/waku_thread/inter_thread_communication/requests/node_lifecycle_request.nim +++ b/library/waku_thread/inter_thread_communication/requests/node_lifecycle_request.nim @@ -16,7 +16,6 @@ import ../../../../waku/node/peer_manager/peer_manager, ../../../../waku/waku_core, ../../../../waku/node/waku_node, - ../../../../waku/node/builder, ../../../../waku/node/config, ../../../../waku/waku_archive/driver/builder, ../../../../waku/waku_archive/driver, @@ -24,6 +23,7 @@ import ../../../../waku/waku_archive/retention_policy, ../../../../waku/waku_relay/protocol, ../../../../waku/waku_store, + ../../../../waku/factory/builder, ../../../events/[json_message_event,json_base_event], ../../../alloc, ../../config diff --git a/tests/testlib/wakunode.nim b/tests/testlib/wakunode.nim index 6122a6d5b1..71b4f08c26 100644 --- a/tests/testlib/wakunode.nim +++ b/tests/testlib/wakunode.nim @@ -13,8 +13,9 @@ import ../../../waku/node/peer_manager, ../../../waku/waku_enr, ../../../waku/waku_discv5, - ../../apps/wakunode2/external_config, - ../../apps/wakunode2/internal_config, + ../../../waku/factory/external_config, + ../../../waku/factory/internal_config, + ../../../waku/factory/builder, ./common diff --git a/tests/wakunode2/test_validators.nim b/tests/wakunode2/test_validators.nim index 8fe82bccae..2d6c826d67 100644 --- a/tests/wakunode2/test_validators.nim +++ b/tests/wakunode2/test_validators.nim @@ -13,12 +13,12 @@ import libp2p/multihash, secp256k1 import - ../../apps/wakunode2/external_config, - ../../apps/wakunode2/wakunode2_validator_signed, ../../waku/waku_core, ../../waku/node/peer_manager, ../../waku/waku_node, ../../waku/waku_relay, + ../../waku/factory/external_config, + ../../waku/factory/validator_signed, ../testlib/wakucore, ../testlib/wakunode diff --git a/tools/rln_db_inspector/rln_db_inspector.nim b/tools/rln_db_inspector/rln_db_inspector.nim index 864f506127..d7e076d144 100644 --- a/tools/rln_db_inspector/rln_db_inspector.nim +++ b/tools/rln_db_inspector/rln_db_inspector.nim @@ -11,7 +11,7 @@ import import ../../waku/waku_rln_relay/rln, ../../waku/waku_rln_relay/conversion_utils, - ./external_config + ../../waku/factory/external_config logScope: topics = "rln_db_inspector" diff --git a/tools/rln_keystore_generator/rln_keystore_generator.nim b/tools/rln_keystore_generator/rln_keystore_generator.nim index 14cde6af12..a2fb1cd162 100644 --- a/tools/rln_keystore_generator/rln_keystore_generator.nim +++ b/tools/rln_keystore_generator/rln_keystore_generator.nim @@ -13,7 +13,7 @@ import ../../waku/waku_rln_relay/rln, ../../waku/waku_rln_relay/conversion_utils, ../../waku/waku_rln_relay/group_manager/on_chain, - ../../apps/wakunode2/external_config + ../../waku/factory/external_config logScope: topics = "rln_keystore_generator" diff --git a/waku/node/builder.nim b/waku/factory/builder.nim similarity index 98% rename from waku/node/builder.nim rename to waku/factory/builder.nim index 85cede9886..9bc9852819 100644 --- a/waku/node/builder.nim +++ b/waku/factory/builder.nim @@ -15,11 +15,8 @@ import import ../waku_enr, ../waku_discv5, - ./config, - ./peer_manager, - ./waku_node, - ./waku_switch - + ../waku_node, + ../node/peer_manager type WakuNodeBuilder* = object diff --git a/apps/wakunode2/external_config.nim b/waku/factory/external_config.nim similarity index 98% rename from apps/wakunode2/external_config.nim rename to waku/factory/external_config.nim index 23be15bb47..514bb09c25 100644 --- a/apps/wakunode2/external_config.nim +++ b/waku/factory/external_config.nim @@ -14,14 +14,14 @@ import nimcrypto/utils, secp256k1 import - ../../waku/common/confutils/envvar/defs as confEnvvarDefs, - ../../waku/common/confutils/envvar/std/net as confEnvvarNet, - ../../waku/common/logging, - ../../waku/waku_enr, - ../../waku/node/peer_manager + ../common/confutils/envvar/defs as confEnvvarDefs, + ../common/confutils/envvar/std/net as confEnvvarNet, + ../common/logging, + ../waku_enr, + ../node/peer_manager include - ../../waku/waku_core/message/default_values + ../waku_core/message/default_values export confTomlDefs, diff --git a/apps/wakunode2/internal_config.nim b/waku/factory/internal_config.nim similarity index 97% rename from apps/wakunode2/internal_config.nim rename to waku/factory/internal_config.nim index 95c2a6c1c7..132821060c 100644 --- a/apps/wakunode2/internal_config.nim +++ b/waku/factory/internal_config.nim @@ -8,12 +8,12 @@ import stew/results, stew/shims/net import - ../../waku/common/utils/nat, - ../../waku/node/config, - ../../waku/waku_enr/capabilities, - ../../waku/waku_enr, - ../../waku/waku_core, - ./external_config + ./external_config, + ../common/utils/nat, + ../node/config, + ../waku_enr/capabilities, + ../waku_enr, + ../waku_core proc enrConfiguration*(conf: WakuNodeConf, netConfig: NetConfig, key: crypto.PrivateKey): Result[enr.Record, string] = diff --git a/waku/factory/node_factory.nim b/waku/factory/node_factory.nim new file mode 100644 index 0000000000..6d5308459e --- /dev/null +++ b/waku/factory/node_factory.nim @@ -0,0 +1,375 @@ +import + std/[options, sequtils], + chronicles, + chronos, + libp2p/peerid, + libp2p/protocols/pubsub/gossipsub, + libp2p/nameresolving/dnsresolver, + libp2p/crypto/crypto + +import + ./internal_config, + ./external_config, + ./builder, + ./validator_signed, + ../waku_enr/sharding, + ../waku_node, + ../waku_core, + ../waku_rln_relay, + ../waku_dnsdisc, + ../waku_archive, + ../waku_store, + ../waku_filter, + ../waku_filter_v2, + ../waku_peer_exchange, + ../node/peer_manager, + ../node/peer_manager/peer_store/waku_peer_storage, + ../node/peer_manager/peer_store/migrations as peer_store_sqlite_migrations, + ../waku_lightpush/common, + ../waku_archive/driver/builder, + ../waku_archive/retention_policy/builder, + ../common/utils/parse_size_units + +## Peer persistence + +const PeerPersistenceDbUrl = "peers.db" +proc setupPeerStorage*(): Result[Option[WakuPeerStorage], string] = + let db = ? SqliteDatabase.new(PeerPersistenceDbUrl) + + ? peer_store_sqlite_migrations.migrate(db) + + let res = WakuPeerStorage.new(db) + if res.isErr(): + return err("failed to init peer store" & res.error) + + ok(some(res.value)) + +## Retrieve dynamic bootstrap nodes (DNS discovery) + +proc retrieveDynamicBootstrapNodes*(dnsDiscovery: bool, + dnsDiscoveryUrl: string, + dnsDiscoveryNameServers: seq[IpAddress]): + Result[seq[RemotePeerInfo], string] = + + if dnsDiscovery and dnsDiscoveryUrl != "": + # DNS discovery + debug "Discovering nodes using Waku DNS discovery", url=dnsDiscoveryUrl + + var nameServers: seq[TransportAddress] + for ip in dnsDiscoveryNameServers: + nameServers.add(initTAddress(ip, Port(53))) # Assume all servers use port 53 + + let dnsResolver = DnsResolver.new(nameServers) + + proc resolver(domain: string): Future[string] {.async, gcsafe.} = + trace "resolving", domain=domain + let resolved = await dnsResolver.resolveTxt(domain) + return resolved[0] # Use only first answer + + var wakuDnsDiscovery = WakuDnsDiscovery.init(dnsDiscoveryUrl, resolver) + if wakuDnsDiscovery.isOk(): + return wakuDnsDiscovery.get().findPeers() + .mapErr(proc (e: cstring): string = $e) + else: + warn "Failed to init Waku DNS discovery" + + debug "No method for retrieving dynamic bootstrap nodes specified." + ok(newSeq[RemotePeerInfo]()) # Return an empty seq by default + +## Init waku node instance + +proc initNode*(conf: WakuNodeConf, + netConfig: NetConfig, + rng: ref HmacDrbgContext, + nodeKey: crypto.PrivateKey, + record: enr.Record, + peerStore: Option[WakuPeerStorage], + dynamicBootstrapNodes: openArray[RemotePeerInfo] = @[]): Result[WakuNode, string] = + + ## Setup a basic Waku v2 node based on a supplied configuration + ## file. Optionally include persistent peer storage. + ## No protocols are mounted yet. + + var dnsResolver: DnsResolver + if conf.dnsAddrs: + # Support for DNS multiaddrs + var nameServers: seq[TransportAddress] + for ip in conf.dnsAddrsNameServers: + nameServers.add(initTAddress(ip, Port(53))) # Assume all servers use port 53 + + dnsResolver = DnsResolver.new(nameServers) + + var node: WakuNode + + let pStorage = if peerStore.isNone(): nil + else: peerStore.get() + + # Build waku node instance + var builder = WakuNodeBuilder.init() + builder.withRng(rng) + builder.withNodeKey(nodekey) + builder.withRecord(record) + builder.withNetworkConfiguration(netConfig) + builder.withPeerStorage(pStorage, capacity = conf.peerStoreCapacity) + builder.withSwitchConfiguration( + maxConnections = some(conf.maxConnections.int), + secureKey = some(conf.websocketSecureKeyPath), + secureCert = some(conf.websocketSecureCertPath), + nameResolver = dnsResolver, + sendSignedPeerRecord = conf.relayPeerExchange, # We send our own signed peer record when peer exchange enabled + agentString = some(conf.agentString) + ) + builder.withColocationLimit(conf.colocationLimit) + builder.withPeerManagerConfig( + maxRelayPeers = conf.maxRelayPeers, + shardAware = conf.relayShardedPeerManagement,) + + node = ? builder.build().mapErr(proc (err: string): string = "failed to create waku node instance: " & err) + + ok(node) + +## Mount protocols + +proc setupProtocols*(node: WakuNode, + conf: WakuNodeConf, + nodeKey: crypto.PrivateKey): + Future[Result[void, string]] {.async.} = + ## Setup configured protocols on an existing Waku v2 node. + ## Optionally include persistent message storage. + ## No protocols are started yet. + + node.mountMetadata(conf.clusterId).isOkOr: + return err("failed to mount waku metadata protocol: " & error) + + # Mount relay on all nodes + var peerExchangeHandler = none(RoutingRecordsHandler) + if conf.relayPeerExchange: + proc handlePeerExchange(peer: PeerId, topic: string, + peers: seq[RoutingRecordsPair]) {.gcsafe.} = + ## Handle peers received via gossipsub peer exchange + # TODO: Only consider peers on pubsub topics we subscribe to + let exchangedPeers = peers.filterIt(it.record.isSome()) # only peers with populated records + .mapIt(toRemotePeerInfo(it.record.get())) + + debug "connecting to exchanged peers", src=peer, topic=topic, numPeers=exchangedPeers.len + + # asyncSpawn, as we don't want to block here + asyncSpawn node.connectToNodes(exchangedPeers, "peer exchange") + + peerExchangeHandler = some(handlePeerExchange) + + if conf.relay: + let pubsubTopics = + if conf.pubsubTopics.len > 0 or conf.contentTopics.len > 0: + # TODO autoshard content topics only once. + # Already checked for errors in app.init + let shards = conf.contentTopics.mapIt(getShard(it).expect("Valid Shard")) + conf.pubsubTopics & shards + else: + conf.topics + + let parsedMaxMsgSize = parseMsgSize(conf.maxMessageSize).valueOr: + return err("failed to parse 'max-num-bytes-msg-size' param: " & $error) + + debug "Setting max message size", num_bytes=parsedMaxMsgSize + + try: + await mountRelay(node, pubsubTopics, peerExchangeHandler = peerExchangeHandler, + int(parsedMaxMsgSize)) + except CatchableError: + return err("failed to mount waku relay protocol: " & getCurrentExceptionMsg()) + + # Add validation keys to protected topics + var subscribedProtectedTopics : seq[ProtectedTopic] + for topicKey in conf.protectedTopics: + if topicKey.topic notin pubsubTopics: + warn "protected topic not in subscribed pubsub topics, skipping adding validator", + protectedTopic=topicKey.topic, subscribedTopics=pubsubTopics + continue + subscribedProtectedTopics.add(topicKey) + notice "routing only signed traffic", protectedTopic=topicKey.topic, publicKey=topicKey.key + node.wakuRelay.addSignedTopicsValidator(subscribedProtectedTopics) + + # Enable Rendezvous Discovery protocol when Relay is enabled + try: + await mountRendezvous(node) + except CatchableError: + return err("failed to mount waku rendezvous protocol: " & getCurrentExceptionMsg()) + + # Keepalive mounted on all nodes + try: + await mountLibp2pPing(node) + except CatchableError: + return err("failed to mount libp2p ping protocol: " & getCurrentExceptionMsg()) + + var onFatalErrorAction = proc(msg: string) {.gcsafe, closure.} = + ## Action to be taken when an internal error occurs during the node run. + ## e.g. the connection with the database is lost and not recovered. + error "Unrecoverable error occurred", error = msg + quit(QuitFailure) + + if conf.rlnRelay: + when defined(rln_v2): + let rlnConf = WakuRlnConfig( + rlnRelayDynamic: conf.rlnRelayDynamic, + rlnRelayCredIndex: conf.rlnRelayCredIndex, + rlnRelayEthContractAddress: conf.rlnRelayEthContractAddress, + rlnRelayEthClientAddress: string(conf.rlnRelayethClientAddress), + rlnRelayCredPath: conf.rlnRelayCredPath, + rlnRelayCredPassword: conf.rlnRelayCredPassword, + rlnRelayTreePath: conf.rlnRelayTreePath, + rlnRelayUserMessageLimit: conf.rlnRelayUserMessageLimit, + rlnEpochSizeSec: conf.rlnEpochSizeSec, + onFatalErrorAction: onFatalErrorAction, + ) + else: + let rlnConf = WakuRlnConfig( + rlnRelayDynamic: conf.rlnRelayDynamic, + rlnRelayCredIndex: conf.rlnRelayCredIndex, + rlnRelayEthContractAddress: conf.rlnRelayEthContractAddress, + rlnRelayEthClientAddress: string(conf.rlnRelayethClientAddress), + rlnRelayCredPath: conf.rlnRelayCredPath, + rlnRelayCredPassword: conf.rlnRelayCredPassword, + rlnRelayTreePath: conf.rlnRelayTreePath, + rlnEpochSizeSec: conf.rlnEpochSizeSec, + onFatalErrorAction: onFatalErrorAction, + ) + + try: + waitFor node.mountRlnRelay(rlnConf) + except CatchableError: + return err("failed to mount waku RLN relay protocol: " & getCurrentExceptionMsg()) + + if conf.store: + # Archive setup + let archiveDriverRes = waitFor ArchiveDriver.new(conf.storeMessageDbUrl, + conf.storeMessageDbVacuum, + conf.storeMessageDbMigration, + conf.storeMaxNumDbConnections, + onFatalErrorAction) + if archiveDriverRes.isErr(): + return err("failed to setup archive driver: " & archiveDriverRes.error) + + let retPolicyRes = RetentionPolicy.new(conf.storeMessageRetentionPolicy) + if retPolicyRes.isErr(): + return err("failed to create retention policy: " & retPolicyRes.error) + + let mountArcRes = node.mountArchive(archiveDriverRes.get(), + retPolicyRes.get()) + if mountArcRes.isErr(): + return err("failed to mount waku archive protocol: " & mountArcRes.error) + + # Store setup + try: + await mountStore(node) + except CatchableError: + return err("failed to mount waku store protocol: " & getCurrentExceptionMsg()) + + mountStoreClient(node) + if conf.storenode != "": + let storeNode = parsePeerInfo(conf.storenode) + if storeNode.isOk(): + node.peerManager.addServicePeer(storeNode.value, WakuStoreCodec) + else: + return err("failed to set node waku store peer: " & storeNode.error) + + # NOTE Must be mounted after relay + if conf.lightpush: + try: + await mountLightPush(node) + except CatchableError: + return err("failed to mount waku lightpush protocol: " & getCurrentExceptionMsg()) + + if conf.lightpushnode != "": + let lightPushNode = parsePeerInfo(conf.lightpushnode) + if lightPushNode.isOk(): + mountLightPushClient(node) + node.peerManager.addServicePeer(lightPushNode.value, WakuLightPushCodec) + else: + return err("failed to set node waku lightpush peer: " & lightPushNode.error) + + # Filter setup. NOTE Must be mounted after relay + if conf.filter: + try: + await mountLegacyFilter(node, filterTimeout = chronos.seconds(conf.filterTimeout)) + except CatchableError: + return err("failed to mount waku legacy filter protocol: " & getCurrentExceptionMsg()) + + try: + await mountFilter(node, + subscriptionTimeout = chronos.seconds(conf.filterSubscriptionTimeout), + maxFilterPeers = conf.filterMaxPeersToServe, + maxFilterCriteriaPerPeer = conf.filterMaxCriteria) + except CatchableError: + return err("failed to mount waku filter protocol: " & getCurrentExceptionMsg()) + + if conf.filternode != "": + let filterNode = parsePeerInfo(conf.filternode) + if filterNode.isOk(): + try: + await node.mountFilterClient() + node.peerManager.addServicePeer(filterNode.value, WakuLegacyFilterCodec) + node.peerManager.addServicePeer(filterNode.value, WakuFilterSubscribeCodec) + except CatchableError: + return err("failed to mount waku filter client protocol: " & getCurrentExceptionMsg()) + else: + return err("failed to set node waku filter peer: " & filterNode.error) + + # waku peer exchange setup + if conf.peerExchangeNode != "" or conf.peerExchange: + try: + await mountPeerExchange(node) + except CatchableError: + return err("failed to mount waku peer-exchange protocol: " & getCurrentExceptionMsg()) + + if conf.peerExchangeNode != "": + let peerExchangeNode = parsePeerInfo(conf.peerExchangeNode) + if peerExchangeNode.isOk(): + node.peerManager.addServicePeer(peerExchangeNode.value, WakuPeerExchangeCodec) + else: + return err("failed to set node waku peer-exchange peer: " & peerExchangeNode.error) + + return ok() + +## Start node + +proc startNode*(node: WakuNode, conf: WakuNodeConf, + dynamicBootstrapNodes: seq[RemotePeerInfo] = @[]): Future[Result[void, string]] {.async.} = + ## Start a configured node and all mounted protocols. + ## Connect to static nodes and start + ## keep-alive, if configured. + + # Start Waku v2 node + try: + await node.start() + except CatchableError: + return err("failed to start waku node: " & getCurrentExceptionMsg()) + + # Connect to configured static nodes + if conf.staticnodes.len > 0: + try: + await connectToNodes(node, conf.staticnodes, "static") + except CatchableError: + return err("failed to connect to static nodes: " & getCurrentExceptionMsg()) + + if dynamicBootstrapNodes.len > 0: + info "Connecting to dynamic bootstrap peers" + try: + await connectToNodes(node, dynamicBootstrapNodes, "dynamic bootstrap") + except CatchableError: + return err("failed to connect to dynamic bootstrap nodes: " & getCurrentExceptionMsg()) + + # retrieve px peers and add the to the peer store + if conf.peerExchangeNode != "": + let desiredOutDegree = node.wakuRelay.parameters.d.uint64() + await node.fetchPeerExchangePeers(desiredOutDegree) + + # Start keepalive, if enabled + if conf.keepAlive: + node.startKeepalive() + + # Maintain relay connections + if conf.relay: + node.peerManager.start() + + return ok() \ No newline at end of file diff --git a/apps/wakunode2/wakunode2_validator_signed.nim b/waku/factory/validator_signed.nim similarity index 96% rename from apps/wakunode2/wakunode2_validator_signed.nim rename to waku/factory/validator_signed.nim index 91896eda2b..14901b70cc 100644 --- a/apps/wakunode2/wakunode2_validator_signed.nim +++ b/waku/factory/validator_signed.nim @@ -19,9 +19,9 @@ import const MessageWindowInSec = 5*60 # +- 5 minutes import - ../../waku/waku_relay/protocol, - ../../waku/waku_core, - ./external_config + ./external_config, + ../waku_relay/protocol, + ../waku_core declarePublicCounter waku_msg_validator_signed_outcome, "number of messages for each validation outcome", ["result"] diff --git a/waku/waku_node.nim b/waku/waku_node.nim index 32dbfb1746..66cff4521a 100644 --- a/waku/waku_node.nim +++ b/waku/waku_node.nim @@ -1,11 +1,9 @@ import ./node/config, - ./node/builder, ./node/waku_switch as switch, ./node/waku_node as node export config, - builder, switch, node From 5b174fb39212a67553b4b0b611998ed287ecb5ba Mon Sep 17 00:00:00 2001 From: Aaryamann Challani <43716372+rymnc@users.noreply.github.com> Date: Mon, 4 Mar 2024 17:41:33 +0530 Subject: [PATCH 255/274] chore(rln-relay-v2): added tests for static rln-relay-v2 (#2484) * chore(rln-relay-v2): added tests for onchain rln-relay-v2 * chore(rln-relay): added tests for static rln-relay-v2 * Update waku/waku_rln_relay/group_manager/static/group_manager.nim Co-authored-by: Ivan FB <128452529+Ivansete-status@users.noreply.github.com> * fix: split lines * fix: remove redundant require * fix: remove redundant require * fix: bad await --------- Co-authored-by: Ivan FB <128452529+Ivansete-status@users.noreply.github.com> --- .../test_rln_group_manager_onchain.nim | 5 +- .../test_rln_group_manager_static.nim | 32 ++++++++++-- waku/waku_keystore/protocol_types.nim | 7 ++- waku/waku_rln_relay/constants.nim | 19 ++++--- .../group_manager/static/group_manager.nim | 52 ++++++++++++++----- waku/waku_rln_relay/protocol_types.nim | 1 - 6 files changed, 85 insertions(+), 31 deletions(-) diff --git a/tests/waku_rln_relay/test_rln_group_manager_onchain.nim b/tests/waku_rln_relay/test_rln_group_manager_onchain.nim index 709542873a..95191f31c4 100644 --- a/tests/waku_rln_relay/test_rln_group_manager_onchain.nim +++ b/tests/waku_rln_relay/test_rln_group_manager_onchain.nim @@ -433,17 +433,16 @@ suite "Onchain group manager": let fut = newFuture[void]() proc callback(registrations: seq[Membership]): Future[void] {.async.} = - + require: + registrations.len == 1 when defined(rln_v2): require: - registrations.len == 1 registrations[0].rateCommitment == RateCommitment(idCommitment: idCommitment, userMessageLimit: UserMessageLimit(1)) else: require: registrations[0].idCommitment == idCommitment require: registrations[0].index == 0 - registrations.len == 1 fut.complete() manager.onRegister(callback) diff --git a/tests/waku_rln_relay/test_rln_group_manager_static.nim b/tests/waku_rln_relay/test_rln_group_manager_static.nim index 5cfbed0e7b..ff71e8c18e 100644 --- a/tests/waku_rln_relay/test_rln_group_manager_static.nim +++ b/tests/waku_rln_relay/test_rln_group_manager_static.nim @@ -100,7 +100,11 @@ suite "Static group manager": let dummyCommitment = default(IDCommitment) try: - await manager.register(dummyCommitment) + when defined(rln_v2): + await manager.register(RateCommitment(idCommitment: dummyCommitment, + userMessageLimit: DefaultUserMessageLimit)) + else: + await manager.register(dummyCommitment) except ValueError: assert true except Exception, CatchableError: @@ -119,7 +123,11 @@ suite "Static group manager": merkleRootBeforeRes.isOk() let merkleRootBefore = merkleRootBeforeRes.get() try: - await manager.register(idCommitment) + when defined(rln_v2): + await manager.register(RateCommitment(idCommitment: idCommitment, + userMessageLimit: DefaultUserMessageLimit)) + else: + await manager.register(idCommitment) except Exception, CatchableError: assert false, "exception raised: " & getCurrentExceptionMsg() let merkleRootAfterRes = manager.rlnInstance.getMerkleRoot() @@ -139,8 +147,13 @@ suite "Static group manager": proc callback(registrations: seq[Membership]): Future[void] {.async.} = require: registrations.len == 1 - registrations[0].idCommitment == idCommitment registrations[0].index == 10 + when defined(rln_v2): + require: + registrations[0].rateCommitment == RateCommitment(idCommitment: idCommitment, userMessageLimit: DefaultUserMessageLimit) + else: + require: + registrations[0].idCommitment == idCommitment callbackCalled = true fut.complete() @@ -148,7 +161,11 @@ suite "Static group manager": manager.onRegister(callback) await manager.init() await manager.startGroupSync() - await manager.register(idCommitment) + when defined(rln_v2): + await manager.register(RateCommitment(idCommitment: idCommitment, + userMessageLimit: DefaultUserMessageLimit)) + else: + await manager.register(idCommitment) except Exception, CatchableError: assert false, "exception raised: " & getCurrentExceptionMsg() @@ -198,8 +215,13 @@ suite "Static group manager": proc callback(withdrawals: seq[Membership]): Future[void] {.async.} = require: withdrawals.len == 1 - withdrawals[0].idCommitment == idCommitment withdrawals[0].index == 0 + when defined(rln_v2): + require: + withdrawals[0].rateCommitment == RateCommitment(idCommitment: idCommitment, userMessageLimit: DefaultUserMessageLimit) + else: + require: + withdrawals[0].idCommitment == idCommitment callbackCalled = true fut.complete() diff --git a/waku/waku_keystore/protocol_types.nim b/waku/waku_keystore/protocol_types.nim index 7f2b25a282..8abbd00eaf 100644 --- a/waku/waku_keystore/protocol_types.nim +++ b/waku/waku_keystore/protocol_types.nim @@ -20,6 +20,9 @@ type # hash of identity key as defined ed in https://hackmd.io/tMTLMYmTR5eynw2lwK9n1w?view#Membership IDCommitment* = seq[byte] #array[32, byte] +when defined(rln_v2): + type UserMessageLimit* = uint64 + type IdentityCredential* = object idTrapdoor*: IdentityTrapdoor idNullifier*: IdentityNullifier @@ -44,7 +47,7 @@ type MembershipIndex* = uint proc toMembershipIndex*(v: UInt256): MembershipIndex = return cast[MembershipIndex](v) -# Converts a sequence of tuples containing 4 string (i.e. identity trapdoor, nullifier, secret hash and commitment) to an IndentityCredential +# Converts a sequence of tuples containing 4 string (i.e. identity trapdoor, nullifier, secret hash, commitment) to an IdentityCredential type RawMembershipCredentials* = (string, string, string, string) proc toIdentityCredentials*(groupKeys: seq[RawMembershipCredentials]): Result[seq[ IdentityCredential], string] = @@ -93,7 +96,7 @@ type KeystoreMembership* = ref object of RootObj treeIndex*: MembershipIndex identityCredential*: IdentityCredential when defined(rln_v2): - userMessageLimit*: uint64 + userMessageLimit*: UserMessageLimit when defined(rln_v2): proc `$`*(m: KeystoreMembership): string = diff --git a/waku/waku_rln_relay/constants.nim b/waku/waku_rln_relay/constants.nim index 465a56d569..5ad19ee92e 100644 --- a/waku/waku_rln_relay/constants.nim +++ b/waku/waku_rln_relay/constants.nim @@ -40,24 +40,27 @@ when defined(rln_v2): 45, 114, 108, 110, 45, 114, 101, 108, 97, 121, 47, 118, 50, 46, 48, 46, 48, 0, 0, 0, 0, 0, 0, 0] + DefaultUserMessageLimit* = UserMessageLimit(20) + # temporary variables to test waku-rln-relay performance in the static group mode const StaticGroupSize* = 10000 - # StaticGroupKeys is a static list of 10000 membership keys in the form of (identity key, identity commitment) + # StaticGroupKeys is a static list of 10000 membership keys in the form of (identity trapdoor, identity nullifier, identity secret hash, identity commitment) # keys are created locally, using createMembershipList proc from waku_rln_relay_utils module, and the results are hardcoded in here # this list is temporary and is created to test the performance of waku-rln-relay for the static groups # in the later versions, this static hardcoded group will be replaced with a dynamic one - - - const StaticGroupKeys* = @[("23904f74b07209db3258de20e981b4564b587b238a5d259ba08329b4f84bc68c", "294993a5e2720d8e85ddbe69c45245fdb974de3b7e62be0a4147f5de75c83059", "12aebd3f304d8a036734f390549fef01316f754e480bb37a37bbafc0b051e617", "197895d5b16d7f654f030d102ebcc3261df296c0b6e37061d62f7410cff524f4"), ("1316ebb9f814050fd695ab397e8c3b45822fe71aa6127a254a8d63e2f8783567", "0f52affeafe65be040a28639cc694d5841da2c8c5edc4167271e3f813c30f4e0", "2b5c57f5ae378e6b88eec4e608b07b6e9c654f617381da7f6a40592499d26601", "11f6c80e258b238e9a90a9130f96e4ada309e269fe29512152cc1e1d8bf53d68"), ("15001a2556ba1054ebb98cdaa342882c4a0523fec8152a1ce04abda7f7e42098", "0cb912f5e88a64e0902019610c04162cadb0d6b495061c5e84fe2fe618c276c9", "274a05f36f6feda6b1ee654831d4132cd71e80bb07a875e34ee689d8925ab8c1", "24e7e253cb3a8c098b68d4b97838113c8218aedbcc0b175eb603db873e6cb72c"), ("03f7d0262a0010ad7efaea3b44a16966c427f0ff3ee601a6703e8c90915b3c7e", "2c72f97ee08a7d9c735775671e327cc52fa5bc439d4e51516f0bca5642e0b30b", "128c206de7e2f168af2fcf32af1483a311a9968cd74d6c29c639cea884375da7", "1285b0cfafc26e0ed52a0cefbdb400d19fe51455f3d594ce2460a10ebec24ffb"), ("279af6e7873cf346f3f62fef56e074a820feae108298381cfce0923be9615ade", "0faf7354c0ca795715a2a8bc723ac53407e01cf39f3f83163224d03616dfafe4", "191830dc3e240f5b95bbc81b27dbc38999b127c3d05ba3bfd6ade8422b9ddfd0", "1ac88928c8aba50df550cf11630c942dffcd4ff0af8da57124c9a605d911f068"), ("09e30ccc3cf5ccbf678131d0ab5acac6927b68bc12d56ac5a8bae57bb161b9f6", "24bda83f8ef4bc85e2b994638f87befaab0bfca13a855225df220e605bb96bc5", "19cd638d603d29b32b9e7e8e49e497e7a0c2f2145867260b65a476ba8c8a2de8", "150de9c39b53d6e872ff3017d1d7f0d4a4f470ebe413185b954304edbb6fd4e1"), ("03145b8600d35a7bd2719d693828f8da60ca98b2067571d9d6f0e7b73f3bfa33", "2c6a2a711c6f8b27583dccb711c314fb2fb513c2adc0b151d2feb46ff35a7611", "2435fc1c5694b26bffe9be63037e3cadffa84a49bc0947ae3a758059ee213885", "1316478feed4e70b467a3f38cc52b4635f372d917dec300df3c42ab934af6f9e"), ("282f621d99dcac331f95fbbbad2cd44072d6d20f34dd795327c14ece0a82869e", "1f73579ddf36e03fa52f93de177e8501a3c60ffe9a4ce316805ea534a758cd29", "00be2365079a7b339bc78bafc50a892083e9c57b4fde6355dfe95a7bfe237e4e", "1e1292203e1b0513cda382a52bad89a6b95157caf571dead05f987ec42a69139"), ("02268888f1c777116531775c87ae0536dacd37e37f7fc861305cc926c101dcf3", "276680842eaa6effa33bcfe9bdba2962061e4a04f817a0ac7b75aa7488ccea15", "27ab7634337b8a1f06d140b7017fa06c0f7696400b8c8434b90cf67d4455cb49", "25063f1983fca39d282a15a515f282d7ba021ad51a2777df9c0c4aec26b959d4"), ("1714ec83a9098d0f967a343eb382768c527a35c3fd6916438d691c732d8aeed0", "14459be363ae06c0c8b59ba78343ea4674f060d376e8e775e91756479a004972", "0bea9c16d033a5608985c8b596ccdb60c5bb3e750c1f773ac05e2f5c1c23361e", "112ff9f14ad19b6a9a1acae2f141fe4a6707e50af7d12dcdd227e988b8e11daa"), ("215534c514b0d826370001453cedc732cf993561c76dfb9a3dff62a98e4a5873", "0f024fde4842885beb75e959092272853c3c524e31cc2048f1fd19c37881ed96", "0a58fe29184d4b0b45329bcd858f11b068525894032140ce910c81bdf6e7a18e", "22b7efad3a97d1a5d1e669c3ca3c0773e7c289b71781dfa66c9f65da05186149"), ("06ba74307c9d3f397d9d6a599cdbe49fc048f95b74e853672a771d04f182eab2", "06e7f865245d82015c8992acb888c8d384770c2591d1ead29d81a853d5f7eb42", "0334f5aabb4ec2886fc661f815f84d355cb0c4dabbfaa3436338335480f2b066", "1aacaeb540f19cd512be141ac0dfa52dc018a086c2c16e325f7b456186feff67"), ("0c66a3e2a5c536b745887524047804546e5cea2f5b7b0e065f6818e255bbad07", "2a4ddb2bbb02cb6d9aa13c2ff7c288b68d2bf3eccb05a9914139b12be2c6b8c4", "0f9b5586925b939232ae087f92d6b0f8b15c7c85652fb75ea1e5db6f80a1c8bb", "113bd9ab2d189cb0e70783b7b68cdbfe19834a4c53b8976fd8b25b551a971c13"), ("149983b274713e9134fb34044be0239b7dfbe8a1523c5e6845d23c37b570eb2b", "2939a9ae2a84896e63213d822a33df434ca42f7ba86eed18c0cdee167383df22", "111923bdf94a296265d9df01cfab0ac8dac8e1bab9f9480fc2d4a017c82230c9", "0dfb81f48f64d67d322a73931586bdc56cef6800191e75325a0f8fed0c8f5481"), ("0c0675e87d522a3a81f66ddb81bbdbe9e39ac0527c9dcb7d900d16af1058def9", "1fc45c1e92c016f56ec2b987873a0eedce20d3fae1847e2dab0d74317a21de1f", "208267fe395ffc6f45d5b6e7b9c04a620d5d07c4828d8af93788a91c74a913d8", "24205a86d18d6fbe04cf31e74bd1fe83af23969df30012d586d9bc4bc1c7f43a"), ("2858c9cd8069ffc7a567265f5f3b1f0d221f812110c800d8a0417081b487bed1", "2651c8a9e7a740584c83c134555e7a4b8d5bab9c410aeae6171633c5ae6b92cd", "28d620d6cdd2886b2e7121a1a9c4f35fde5d59be7914b08a6a2921817de2348f", "1bb506d4ecbe29b8bc4fa1eefaa8a777385aeafc9f9b750c782ed73d0b9f015b"), ("14be56115b8b150283d83283f0ad52d975f0b4cd7e4513de9a42030995a9a992", "0f97406e6f00c9f14ec447cc01b52d4d183e57af97c2e2ed0cb31cb48350fe72", "2dd1a99b1689eeadb33579d402b025f6faa213f5ab087ec0f64cb22acf7b1128", "21811f4307fdce5f2dee4a2af2105aedba8e778e3c323d845cdb5a2949839f88"), ("12846599753e42ae327fcd8c9ee83fdaaa96dbbf6e1b53e0dbe5be8215624421", "2c56e3318156b2f0b429d8485b4aa3eca18bd8d71e0455c098d6c6759b3cbd4d", "09171db65451ab735d79085e8ba595c568f9fd67890870561a93f831fcf8a28c", "1a30f94af00fe9e33182987f6071eecb381fa2ed3d7c4c4525e2936e298ca429"), ("2a1b623a239ad4347d5d0fb4e424e608a3146d7003be65e939e08c85d599fc60", "2fadd1baa902b5cbdda414f3913d9c53e9ba0fb7972d8d833c25ddc970d95d35", "1e8022d9c894e809a2e9b2d24a9d5ea32cad3b5ba46837e68d8412a6730685ca", "1766b7a333891449c00f69415feda1a5a99612cc596d42e565cbff353c995ba4"), ("085ba15666d5015152714e3be5e8aacf22169ca040a5ac96d1d61283a22e35ac", "009c5e5a774d5d19881edc360f7ec483d5bc7b4894aaebdc8b32b2fe829ed4da", "19ed1092f24adecc69709ea02209e77a57d44d0ce98e3d43765b6fe9342d2bec", "22d9672ed4c9f3094e23070b20b99126a0f5173050596358a2f3fea6f349dc41"), ("1b76073ee2d7e0f8849f667f380eafa5309ea5d68dd8830ca664f7a479843012", "0ae4acf8c156f690e44f7b175dface0d111a0eba6fce2eb99cd26c9064d08df3", "05f494eabc2c60b0356b53009f552e449fb13464b786a9672056f2997b234a70", "0e76d41f0db1e18986ad757f84e8eaf50323a90887dede9dfcde7384e8cd9386"), ("06d01762b2fa30ffe3657dbdda7595f50e055161f6ab96fede681af4a139eb27", "22829cac37ed8c0b69260f565c884584c82c6f9375764b32a692b5cea2024230", "1f4385c501de5762e16db7c841bbd82e238b4c0de963823435b045cb73ac99ec", "163df370cd90a3e1b169136f2e526b487033d813d9bbf66899514e60333eeb88"), ("0900a829ee46d68f241185ab33d27227b8be7d0cc8843c98701884d2a329cd45", "259fd7ee876abe0efd1cf0c1209efaa12f4d71da27620f4c3b1ad6c09bbb27ff", "02b8c31808b702bb4ac0ea1ce99232201afbbef950b5ee8c9d555101b5ae1fb8", "1df3d6d35d466f3ff0666a2e7ffca8af6a2e71bd1534852dc6a21b88a574cb64"), ("066aa1ee3140d5697e69e7c8e46271406f5d7ec5cb2a008f764a530d14bc34d4", "0ea76a08d155f3054fa07df2b22d9eaaf95b52e1ff61bd9c168e73c0c6ae4ccb", "22bd8d4a98da971832a0bd19f57c7f514b70681ad0052c50c032344ebda57255", "225f8bf5139e400213d184fbf05185f42927bd1b878afdb8d7a9f07dca0be922"), ("161bf2ddc65fef95fc8a17638f2a636253d133269479a5f6cfa22dd4550b276a", "1d0121654dd3014d280e24f4cba41815638b4e46c8e6489249ae16a21acdce0a", "10af6545fb26cd1d13437f08b88fd486da0bd93950913ac5722a9fab21438d84", "1d2306b9634fafedd3491d69bf65079b7dba3f9187658924b46ff33d8de0b93e"), ("2c595614c1b525cf384b3e25e426fbf0975234b0b05904aa99a8f1684c2d1e9d", "06f546fe377df1ee0d7f5e2c310c4fd125bb2136c154ff7c5a12d0cd295502b4", "2cbf34ba9d6a3fea5b0ffd6b87f147a615393f0bcf87c4d9080556b07a203c66", "02f7d00352517d477b15aed852d42b7d9bce06d14c9cb6f259c6066503992138"), ("0cf0a6190ba781a7b4e6d3222ddb07184a10b74bcd2766b02585ce8d7b083c7a", "188245e3f4b9ce2b64f60d6cd5ce9094b93d54812afb5f5d22421fd3d5902e1f", "15fc2897d615fe5b82b11151ba32774520b58ab8da2003eed783c19d24328309", "05a3f88f558dda4bf0c9a9d276cfacb1d400043925e12f12dae0c6ad6da59c7c"), ("2a61d02be3c6f64f939548eb9565aa5be8ffe719a36e0880e46bad7b49aba4ce", "03719ead2e5a22b435a4604ab0eb9adae76cc803f257d049eb1ae74bd5c17676", "06c4bd0dc18161eefddf7f1b97624721a01582f4f14b76bf74aaae7965ff353b", "0c5d0794ec6ce04a01d7dfd832c529edfc906e5c247df52c0f2dba8ba10e05e3"), ("20fc3b27b5b8f511f7ead21028dee82455dc691321913d3ea6f8c4838c7451dd", "28b728c8c43cde6929b695ed07afc7abd7512646669a30b576ba6487229eadda", "22fa02c9c44aeca5af7059835074fd011c40577085f2befe2a4377a7d2b6e2e8", "238af256998a03706e00a12422b49342d382d8316a7aff8b5d9c0bdd25bf61a8"), ("2b45eeda736d5d8f35591b4893768396146e207f7644f09b7bfb0816c86e5142", "2562add26b1906a9999462721f090adf3f1d43b1d599c709c20b20e367606588", "1c52a25f72b7508de1596aaab8bd7b43927a118990a442d88d8ee21fc1292df5", "16f43813d20b829083f827e6f17b21f0319f0d4691ff00e855427be7d31a1698"), ("1bedb2c8b6f6317292a44e445c6eb7362d261d9ff073a9b609c2423ccd12c107", "0d07ed62a49e31d46a3fc78988eb7177bcc1578732c929de4231f18803b34797", "0fa424d50b1ac158f32877a0911c52f281fd9929bba13a5a542866ac224c9fc8", "274cdc216525d5bdeb398f9a66020a06c49452f8347bd899a2f0252e4bda2f3d"), ("04421c1696e61626774f23e5be3a4dfebebc5431097bd9b150944011753063b0", "2bc971a282b2482b64444771e20f3e92c51235feac17bf5dd97523321a21be50", "06dbcaae146df418d57735c3f9a722963d62dde78450288114bb9265cf3ff767", "22e7d5fbcfeb4c6cf539308324cdfedc19876e7634429d3ecff8a8619aea84ef"), ("0e5f3b8cd1ae0f98ccebc63766a69294b1b9df5970b3ce89043cf7b1dcb5eaea", "274dfbd995743932c09924511acbbdf69e063f9c5301395453e4f13564401cba", "0fdedea501b412556b5684bed3fa841bbdcdf635620c3fce5a4341a4e0dcb107", "1507c78782ca1d4267ee9ec2890ca87dd3c1fc1c10d0003ec78082c53e0d9a3f"), ("0930fcb6de548d66f97d261b41cf2ca82411b055e6d5d7cd8e14798163379acb", "1641bc9aa583843931b918d17c7fa9a39e0a81e5639d0caf9b7109eda30c75a0", "245158cf63abf4ad37c72cb2d400f00dfcfca5751145ca7bf578322d22b12151", "20e0be5a89ed2d1667a4417683d0fcddddd83935224d61196ae83f5a25ed65b6"), ("0e478d6e77e6e8ac1113ffbd8df4a992951d45afa8ed338bc94e1274edfa9087", "093aeacab15072be42d00e57cf165999b2d4f819561d336703694f27a3abd50f", "0b7b54c1083d51691cf45251abcb885a01c572988995ac33e62b5a9d552c881e", "189cf0f86394a3666650f8ed8dfc510f6c63961d65a58a89e600a56e5336a50d"), ("2c6500020d3585645cb671fe24f803e27fa4fdaa1a29465108a6197d0d3eaadc", "006892f19beb58c6338e090a9c2194274208bae766f457d1d910a9e9e98df9e3", "2d3941bbc65d5d829eb7bbb803fd48b49936dd8784b2a7140a992ba4fe0244b5", "238c18ca7f319287f97a1e12ec7f59d296ebe9f976b4dd8473259aac31ab00e5"), ("1b3b238d64d29194d56dc98de0097a5a1793485035d4da5a65a00fb3bbfcd4e5", "2bb34085d3b7bbf1d2d148843ebf6c05a990f468457509419394775b49be135c", "13514f900dc049a2f117abfa28e4a6d2dd742dea85d326980384aa481c3b431f", "18ace5433394f5c5979bd309144c43a141f6c8b9bbebcb26dd0b8cdd5cf6ddc3"), ("2e88cfdb3f47aed00b380d580e92a8758a018e54645c22812d7d380ee0663dd7", "28ce1ac0b93730473e795f1cc906df66959658e4eedb28aaca47a7a8be76e5b5", "1b5b5584092a46d2faccf2b75e9fe5f6f9790f6a4039017094e30aa0e680718e", "24973f9b783d0001599f8553a6dca0239da33229b5b90b4880e2dfab1d9b6356"), ("0e8ddd55daf9231cdc5292bddd7bb9ebb74a47ac715a8806411ea9e6ffdd6934", "288809d543dba012d4ecdd60c3baeddf1ac21e209b9f3ec00a6c3a24ec6758b6", "279dd1beda521dbc53d494d00845078f35b2ac03e094030c03cc2f6e61d25b4a", "060272bbdab4637b3e069cf2298a51f5b64ccbcc47085ef24243521187aa3329"), ("0816572afe024fbde76b7a59f7c656069e00258cf95497aba05ea01da8c1719a", "1e9137bc3476fb4e52788193abd4d456f60b6720a46afe6b0fcefed728f8bca8", "160b52d01c661dba8a7fb668eab75d56020e4f717bb3458ef6820d29cacdac29", "1d55cecd041a5d3c4c74a79c92b34744c0567aa685058fd88a833f511d522c05"), ("0fff6fa12ee972d229b093576b5413b6432e021c627fbe870f75218e319b97d2", "14f931b20ca3c0e91769943c2313b6a7e4b16295bd8a858fe2d8535079e9aa53", "03352836e3454b0995c5e0aa3e1ccefb3f9de2df49fb9bd55be0a056b502ebcf", "080151fd6bb358f682f4ef82c9279f8eed5213cdee68ed745c1ab70455205e13"), ("2647c9ada0d3b2e3f232cb3344f4c58541feb1237848308fcd7075115ffe6c22", "1aa96f1d03e80d5bc3f9f57d57be787be24f12bdd9cb35098c158fe9e5e02d0a", "146e74f16560ed7dbbb9bf4fa4511d056b93155a0fbf3507947f09cf149f24c5", "2bdb083fd2a15384f9ca67f0a7b52d601d9b7fcd97bf56f65c5e9895ab1b0025"), ("01e2bfb4603e4b8eda019a19dc59b18da9f0ae9f8156125f362ec696768e53ee", "16f7c599de54d5a425bcdcaf4d9d99623e766f9f0b46fb25de3a5ed474fadd95", "0894d5aa7d2b0ff7f68a2269eb6fff8f4c9e65294376a4520ba8f00ddbefde83", "0d6cfc5ebb4446a16fec154f6f39e862e18cb8ff0f20212b67c7bcb653a4d32d"), ("0759c55beaabd66525df642b7a697f4f31ed4714ab42ef75106cc4d4f4ca0221", "2a5d2b24999b4bdada7e9cab92ca575f0f1c76202f81c10c4123b7d6d699206e", "2e50178c806299a4869cfabfa0e3400564ff979dd709b9046bf282bfa4068d62", "1f7f4734ed9d5b16f98fe713356267861429996e8c7f4bc9b440fdbb3a0a8bc6"), ("123afe8a93b419246e31cd9f3001d06cd01f254234dcc52a028f24dcd721f362", "076962565276c553e7ce0ffe67baa4dda0ef5f7c8dd6d36eff3ebacbf416264d", "2bceab095d81c7d76f52ebc525e3667e0835d021a5dd7ce360d38916e156143e", "072b87fead3aa7a0fbd1ba1061876dc76fd734624eaeef8c5eaf9929a8e61618"), ("1602bf4b25be7555ec2a63680046404ba356769bc8eca407d37f4d194bd2a50d", "024261ee8aa23b6e6e85b7fc1bc961513cbd2364dbe4fca3af564ed17ba8bc8d", "1fcb3d99e46c8c9dc18aaa2e368433e21927e40f395415ab5ab45bf87fd08cbf", "2ab84ed149734215104258c92976a4b90d37503fdf4274b3aa1bf6797d5009f4"), ("141a5d18f9c6b0029eb43fcfde02b383db5b178db044662e837b9dd174f40e85", "06feedd8c9e059e11e3021508d9881096fe4ca8f37adc4db630307f858027241", "11239dc67428301394d0c05390f46a5d2d043f23faa75800df6f9201e419fe4f", "02979b2e8df310dd99afa1e993dff953672e493bc9bce30b2bb3bf9b5d36dda9"), ("25ee42481f5cb011280ff23d85579c1d976c69dd9326d831d87bd632efb32328", "2e23b8c7b1c826e7cd0107d22b805b107989ede8ac713cd7b9f2f1d965436845", "1c5cc3d7aff2f5be038cd4ae98a24005b2c55c9736680cd219dfbf37ee312e26", "1ba7bb474408010a7981916c28c19f28759d847758d78d3469678831ddf999ea"), ("00a617aa6b0bdcd836e8ee42b4009b4d7ea16544e57a1ae2ce7dabfaa85617b2", "036be1e64b7fe25d2d542b80341c7306931c636a19d310d77f3ee51fede3fa66", "2cf39b8e3d608ad80b8eb9ae402de71f7a14b449554f4e608840f974b7c52363", "06a8f1de8650cc7b50af48435c7c3ff2788b3e824336ed0fc87953e8cc684eb3"), ("07385741cb66ed2313edcf48247e04b8bd6845a9ef8145deda80ff8f8eb42cc6", "09c2f04b2087e8d4e5af901d5c22f899fc7eaac2dbe85f9f30c17f99c3bb7f4f", "18a7715dc06e8cd1f9e7aa89459d3f3f5dcd4b99aafdac9eb8bc13b7e30b34d5", "07e0fa2203db07cb51ff9905532cf5e7762a4fdccc1d100c45301dd03ba66fc8"), ("1e8089d90e30f1eb6a2e181f5c39d863d2aee47fb9a529c6fc16a8a1b57d164b", "290fbdfe22b24a3ffce0842f6eeaf975f397f2649b8bee78c0136a1d7035bd4b", "18f6623fdbfb722bf5e4241b4c3d7e517950264635126b081883196ce0c8e49f", "278b7971f2c37d7b9279ed8a62391eedd888a35711d573166f017707c6dd5c67"), ("2587c28444fbb8a4e98b80c6814913785f6cd1c96d4ea57df60e2585c0df1430", "0af1f904f5150b7d216caab5784cf0f7793e5d08540afbe1a6788f9e1399397e", "06680f80a2759106478162f9cd4452aeb8ed77c41e05246524fd2cd0a287076a", "16188c9074abf647b64671e2e7a4acda7a3e9c9991fb66c798c04cb3211932fe"), ("11775a64339f1ba7a7715df04f5daa3bcf784c952cc349ff8fd46a0d97fb9282", "0779942d0c002813b64dac051f2d7e345eea680eaebc2d492ae0cfb40a2f0176", "23610a2e88bc710688b0187d728f6b8e5e52df970f1af40c0abb63172f8deba0", "2f8338acbcf483313d5facd9278987dd449faf12bebb63ae5191b0a40c6a6cae"), ("0db2f53ff68399727604c20b2fad39490a736e4b161b39b51fc3660221362468", "0a82e7181e990a2df224d16e6c2f1293920a256cdead836388945c491dd4dc70", "0080988e9352f9e86c0418831d09fea381ba35b4de91f5f3705af945a5338e5a", "15527f85e4ab7431b7e694de4f8cf2efc412e555242724adda567f6a0b43a66c"), ("22e695ace59e89a96cddb874bbd5304cefab88529257b565d1db51ad16286666", "2e9d011d4b5abfcf782079cb21e020bc68e109f369ae5a3e07b391332bf96bde", "285ae8f55f87a963a1c282946c52c59aa9fd6c500009ef6ec2917c97de032011", "19669bc769a8cb470fe6f3e409c61b13f9df29627ef5f46e6624047e1c9b3ce3"), ("19278e5865e2fb7abdec1af45c6805023c3fab266f156db06e64e98fea9423ed", "03fddcaa010b689a2d572276d55c74d14d931fc3ec993271fbde0563bf126bfc", "12105099e6633cba8ad219ff9a48e242a2c5229a60decc86c8a3de806cf3c8bc", "2fbe3d260828ca467f16806e979adfd806cc203504e0203144388b36aa9e0e3a"), ("03e3c06a40cb8e1581355a8a86c8fb4c6481703003d54858ab7a8027c4489a3d", "1691e818e62831460f54421469696a54c2ab75be3a0984e382928f24c531b90c", "27fc7f8b89c7e4c4453bc9caf26971c87e89dfea339cd8cfd42bb42134942081", "2a1164ba56b80c960eb37c2a0a4b98878f6f31891ccadbb7703b60e7fd12631f"), ("29f8529a4bae4e85df94dbd8c35d192a4943fe9532e7fff195ab186c3b7d13c9", "0fa02c6a48745698e764f51f76b8188c7e86112954e83f1873df52af7b756eb3", "14fa5f7012e4d049a803601baee1388694622a1163481c3d1680f8192d99eee0", "23b614b2c67a0165a5a2275291424c1324cd70b55c3785ab5af823ccf1668973"), ("2dbaa4b5cb60b957270b211a6f1d3df4b84c3af77ce5af745b2cd2997818b3ee", "21bac2f69e8ec182eb591d34795744f5764b6e3453e2cc2b7035da0150033d30", "082abc5acf7de318d8fa826bd18fbc41a1766a1eddb503f038ee9a2e931d58b8", "101a39628967d8922fd77c53845a8ecf48b67c5a0c6f203dd0b29d1660b01fb9"), ("2fb5c9e1dd5ab3a225c44334189df7bc5ccb80f67b7318b7d89d29651c902601", "2aac798a857bb454edb4c497b9f11c3b41ced65d784f73d137b0f5f312d2371c", "2e363d0812589c2a9a8d82bddeff013b4333e0f4095eeac61e2c819cd2f962e8", "0ba4e11c05da0646427e8bc7205e9d54b4d23ce233f31c73c60de030980e276b"), ("17175a58dd354d90d0dc5e4d50028297b36715c5abd4c74780a833ba264b898a", "2b49b65fefe79d0b721cf254f88d4cfe1bfa2afab3ad399fbebc8f3f8815419a", "10cb2537756e321385a970b83df1e5f1057bb6495acc9fda3282d8636923e238", "1faa9fe6ec3412d19dbbdb65497e04112639d3a57c6dbd93461fc6d9c20cbe76"), ("0b19cc9f9ab4a2cec81a566e1858eb622c9f42607602bb26f0f187592a2d1ddd", "0e55c01a066149052631b0338f396cc66c85a20d31c15b8b4d03a337fe32e39b", "0c43821cf1e9657bc1bece3f4da90abd30e70b984ff311f80199201bb222cba6", "134ea201e3444e8d0145a9d8749d3512356f2f7934b0fb6b04462bd4026b971f"), ("10d19735e754ac38f7416bb9554966f033cedc83af3ef21f0d4971f9c6a37d99", "2e07baed6fc06d9391646a39bd9ce33f20a4331235ca7a2a2fa1cf762c7bdbca", "01c13b7cda8fd89f3d17405a941d5882edef541141f3508230390f31576d6b46", "15ef329d427557ae8c65d6fd8b2968125b2679ea89e404b4a97640882e47ce51"), ("29f4391c3c669a0ba355c6eef5060c117e45ee19023f0425f72ccc467f3fc79a", "158c3cdf28eae31a4af624c7b06e6bb77ff59e3a7fb76b13b4ca030df6dca854", "15405501f68c92976eb3b927e8e78a7e9739d4a0a20043553ed2d5916cc35ed7", "0a843fe08169162a7ea23dfd1d1f78a3cd3fc54ddaf5837e4881acf408038549"), ("2649bae2b8325bec7adf670f0cca7ab4931828c32a6c86af98c0e1e34dd7b0b9", "193f1207d1ca6359c8aea478c7ea23512213276b158385ecb7b06b358e4984f4", "0f527f63883e0a8cf49c1a66be6558cd88ce9a5e532d9f2af1039a70f6629068", "2a3060b7ce92f974782a93ac55d6178e52131251100bb8d137fcb71352997b92"), ("250dcf0770d221cb1e0986f55d9ed0a0ec9806795337cd21656686b1c2046528", "1b579981e6671b868918c38034b4d94c53c178d1cd3433f1440064c7447d8598", "1e161585f42077167d5bc9db8e25ff885db12e2d307e3aaf6eeec855aa4819a8", "25f295ac205ab3ad097355527c69721fc5520bac4c3aedd554c860f2cfbd8d8b"), ("18a72bdc0b8cf0fa56957aafe687931394af32eeb6cf6338d5f2c7d211f6ae72", "0452d9f00e14bcef2f7082cd033bd08b029b92659e9c01bbf594b25824859540", "2b68e9b81d9fe584738211d8579607e3e3fc9fad057cf52c6590c9121f2de300", "027a268f577ed821ae6b61ddbd84d7372cfe0ed338f4a99b7a5c06b43e2489ac"), ("2da49e533d62433917b35b13a0815f64a596b823f958045d146a8c8460b379d8", "2bfb5f245001812fbc5c1b06a559d7f5eeb4bb336fc5011e59ae5ce39efe7262", "2f14d9557276b06aff29a07fbe3df4656894e928c25835967413ae17718054dd", "286fea6b2fc75fd2ab9c30ea54892d7a7a298190a48b107376ad6b3d62728e15"), ("02383299bde1fd0639a3a6144a30bc2418f229f1998f31bc3f87c6957d8f388d", "0d2ad77d2b0c43804041c12dcc447928c58a34836fff494dfc6929536b8f6ca2", "30087fb5da0d003d3444a54b51649ca8e1b88f50bfd770184b4e84314ed711e6", "24cca7b263fa8334220976e7745bbe2943eb881f01bf0c5e9aa251811b66b47b"), ("2aacadb57f7372703a1f6300d2a6c86b1fa319fe7cc6004937811fd3c3edeec1", "1085acd1c31bc91635afe281d6c3175698633295616c75d8fc45e9dff4e5d694", "2916427c15607481ef9a8b5c21fe4f4cfd7f2864f4e8dbbdee80b4790819d1fd", "2ee25076569dab82c16bbf07079754eac2ac02638fb60a25d044215d34bdd8b4"), ("0f3e0bfbae773d315c231f5c936bc4d5a1df5d69c3f9c7c9627ea16370e1ce43", "0d47e820d43aa68309fe87ac12de6c2026c4641db879b0ed4a583b78e05c1f6e", "2d5a7f1310b05a772f463ccc836dba023f4bd837886ed0c37d4c2ca4f3c39cd7", "1a9e9ffdd839b46c5890d03f5ed75acc7e42014445568d4b4f12436ca214f019"), ("194e75dcb238b57ee87486f615952ee8a3d641d35a57389782f5312efe0bdd56", "0c0e47702704dc0bc47e34bffa073a4bdbf73e1fb22012ae1aec3f45e0b45ed6", "252887c25e8ce15cc0dcd080346346ed432eb2b77cb520fa9080d3773d8ee21d", "101bd9c58aae0c2b56ac59e66c4f1ae05b850e9fc3ace2aad44213341b6a10df"), ("1ca1f47c78a98f8a782667a6765969c4eb6e7f89ca57872982b242bc73993acd", "15744208392920185c18ff2a4647cc69d061edd0654281c8614bfe0d5a7587be", "18884ada1e5e2428d7ed59e6cb61771009d45ec6da2064d464ced8c6f52fc3d2", "2bd76e83a0ae2f891425649df85c84d044c1e49a3974fddfb8ba66ac4a6632f0"), ("0c74f6a76b6c66a8c2bad72ef299dfc011b37ec69417f0b8037e5f85891bd364", "1b00d7f017726e5d75a90bd6973260dae90d23d9b99200d16feecc3f8f065da2", "2f6e1b001ba4fa937d70b71a120da648022582d6496b3cba16280b24475a29d7", "09eaa759e1d844e26fae0417d2c090cd4fdf789be6286953e90347fb146254fd"), ("086eae276dc9a8bb3ee98329f907f4c59255703f772cf77ad9b5406f9495b674", "1322ec404e68fe16f59ef599e62ed41ceb45766a97b59fa1cc65cdcee674f216", "2997363c5d365b8d7e4d9c78d5edb57aad194f92418ddbf2601f1c042d1b0324", "2c281216266e42e9a72f99bfc2ddda4a88d34ba55b71ce08067e0bcd9a5b36d5"), ("1c0eb4282f68dce0aa06ea76ece445ad413c0e0fd35e42213900ce6afc963804", "25ad2873cc0368749b51ab6124583aa39eb29447a27c33c8702c8010d9d078d5", "0483e82d3565a0ce61adc7779e1ec039cf5f981aeb0c2389ea642e39f473dad3", "0b6eb9c5ac6aab00d2ace29f3bb3933f865677713d42c496a8a75a8604627b96"), ("1a309ec83045d55e750ab78d1e651ddd4a4ddb9caa93f91a65e059a75e0209f8", "20ed643faaa8d20040f23e93bf4949c684117ce75e84a591ef1845e73c4429a0", "291a40e9a4fb861417c0434db19edc19701bf7cab560821af0c3fc0f2eaa5259", "0ef2a8706c2afeee8a52fd1cd7bf40a061c26d82159bdc00697231354906945a"), ("1f18477081f4d5e67cba633fc051d1f25cca3b26d3afe345197b7088f19ec1df", "2850a8aba04f1e756071fa0abeaf19c501233d983ccb2cfa434bfe366b4d26ee", "28a45082fbeb6e5a281da8337214c3bdf663d1a9b7fd6c5b46cf181f16838d81", "0626bf7d81334bd8c10548e4261a305f4e2cc127d49e4557be903ce37a4a8d2e"), ("273677be7cb7cfbf544aafe60060f8c2e64ca94bc127e50835fa7430f40cf1aa", "29327f7121f6d98ca7715d952ec6870912ff6e91b9a14501938aca308609bc7c", "2c3faa15dd5e1a9bc45a7a25694fb656901a77d4412637df7c4fee5867ce05fa", "1bb679a2ec9264f5e61157106242ea0be55bf486f974ed012c4366d40522f85f"), ("2493353007a1174aeb0b180c616bc1ca2c1080b294a68bcd5e6dfa3495df7a0c", "07289638bcf6a3666383b4513db3c63cc8a8c9a4ebef127636241181aa6b5661", "2bd79628251f792ae6be6e90f337c7412dde88800a7993fee1f06bd8bbb43fba", "1944828d5710e7fcb892538c56dd1d3d18c5f2184cdcac4b0e5d09b609cdd586"), ("21cb0542c6028a775c9e91459ace0a60a800f9cc2512dabcacaf4d8c3c0f229e", "25601fcc0c6195270af9f7ff17a0b895d7f016173a25f65e29757406bb3a7000", "0d7dfaf934b3b819d8e7be1a15218871afdb27c5aaa6304dbbb441ff3900ce3e", "1ce903d105564538c3d1ff222f80a0de8f79dedf24c25141f885d51c07155f24"), ("00968c9de4d54b3fdb9d3b04883fd2f6ce9d2bd353067c4dcdc0c4d77cb49dcb", "0120d89a72c5908776d221bd69440a2cf70a004465a96f1dc71fe3774f89db85", "1bf2a108fd15ed91252336be31817195c93b125bd4d7ff98849f3c6bc6266ae2", "18a0aa25551a9831281f55b09177177d33657b1d7477c7350328b0b9c629ae14"), ("09b08b2dabd795057ff86569e9ca957a09a9ef2261d8fdb55b35c199a2950a0d", "264ba9951820104267b6137b8291a5ca93ed8545dcb5edb2c5575f6fc3868ab8", "2b3795e8e02a7789dec1c96431e15789db309eb1be7d44990e72a2ee23ea7631", "02935b7d1ad16f2276709e622fa4e59e57c37c8c34c97e961ca3a7d1cd0f3b49"), ("28ad6d4cc5c122971bde222021f58aa4550036649cf7dc1b37462ebaf42a6b25", "0bf9753f354ae506a885b9f706b1a37df9314e731046af55e842119b451f89f5", "0c5b1059ca052bd10a8955de33f21093061079bd48ac7eaf878eaad52c824b49", "117c33abfa3477630ef5f961eb8faf2255ce3eb9e36571342e1e69e5faf7ccd6"), ("0dd4a20b9bbb88bcb435be9c7573bf19edf6925d552b7e46deabc5eaee198ee0", "2e92a5229ae0c9e9ac34c0a243e0b1485ae5f2987724d735ba6d2ea0232bad28", "135cfe8680a5047de729b3f3b6841ab78853e5ec2fad015a89a02e1e03918875", "2674460b00a19a85bba3ea71dba74755fa2ed63807df405a89317b0a136e78e7"), ("05fb82868b92769762e923e032ee7f57934176884d7bf286519a74558d7ecd1a", "27ca70d949cb0dcaf5481cb925ab1869142cc4cfbefa717f35398fb160f48cb3", "1b97de8db7c227985de8ff8a88b7e7d7f68fb5b271a9097d235f3abec72ba144", "083b762a3426ad57b5fec7abf51abcfb3dc62e116f2fd9449a77268df2017f4b"), ("2ae241ad88367133f8a5d90af0624568cc12c74155236abcc23c5833cbef3614", "0ff24e3ce225fa7127a0340549df3efe3662a29de2e4d462d001e59212a33c97", "0c5b53622b72a55ab9aa39182e948abcfd3c4a4e4e05be8eba6205c4f19373d7", "1b29eb36d4f66431c08cd024d1aa6fcaabf40beef7d4f1b4ff74191e64a865c1"), ("0a154bd732b880b88117a28c29c8cf158ce926229fe6857703cc2968ec1e749a", "2195cb1d0030203bb2bb529ee513036ef825c967665fa420a537ff4fed30ed92", "2364a4ba820d687345317048126426f5ac8a15eff2db456dac5726a2cee2027e", "0ec594c87b558e1060dfd36d4a2fae337d8eb5df9c7f79df884de06367ded971"), ("228e896d94614fd72156358fb743fdb4cda73716e22c7ce44d2e3d6c8433f301", "10a246f6bea487e47f64e6be6a55b0d8768b07035b47757c98da7c68abfcc131", "18460719d7cb7fde99647ed57ecbfcb60d04f26f61c1ef6c307e74ba29c079a2", "0163b3d633070425ee9368b07e406f52b0f8fc76e54f1913f110f878af317c01"), ("015be653a720cd707b70f84f3b810cff42fad9ea5f9582fb43c14d00b87f7483", "303b2d03ed77be9ad9da523080a733b14f38de156b9fd65295c723dd006c768b", "2bd352ebd4472da9de7e53d678f1cac2f5d77654b259ab216f346e9fe1d3d159", "2567a59c8c4d7578a7f0831ea2568eb9528e5b1928c70fde164cf98a192fd1ed"), ("103bad0acf8bdf5ba38d09fba060d48584ad4a6ee06252aa726e23a323ea3bc0", "2dc63167dd46a5e966923fa0544b68cccd6e2de93254373965218317b97b151c", "14b2fa02a05e65d832a40e26dd1ea9f988b9ec506691d5a5151e24993347786e", "205899cb9de98fa10b0dc2cb3c8bab7e26a065891fbb1caf5a6bb95695242a1a"), ("0c8601894b08428fb4df9bd1496c8d98b1f9eeaf27293c77b92ff6dd9f7c57c1", "2b3eba51a50660eec9ae3e6c2f17444b31b8b09cc35346f1387047588787d748", "2b4cc14e31ef5374f2a8f719d4367418eed1672b416dcf2d856980bb53eae9cf", "1bf2e8091887d6215d38bef0bcba783e7d5a0156c7fb32621f27d1d394cc698c"), ("192fb2282992b2dbbe0d6cb9ce309b4b58edc94d98d47614486b7640af7f3c72", "02546c511d03634b6f68a9270e464bdaa25b9fed5760178ef302d40340305787", "214e156e282113dc2c64b8a28b93ae71bd4474d2828e6132ad0c7bb5b07a4be5", "2fed8ad92c024aa3f9cd7284586721815e950179daa3807a7986b50cddb3e0f7"), ("021b1962a5b97b6b0ff4f6277f6025d45551d5b51593b66514e719d066e12d5b", "02d5220ce80b76a2930798bb75730fc71b5f25458d02d1cd4c7b22a7fd97ba9f", "0814422ca6cff3d870683601c1a95e2319f47c8d25d0a152fa7976a14ed18463", "241ae4a83256b289939f87e0a1b2a73d93ee6c78c583995c1d44b40dcdd956af"), ("008f716d31293f6058b16aa51ffe2b4939ed3e945012ae2e25f8c95b4eb18c37", "231cc9acbadb313057e5cec95c5b10f6588b287afcded9d23ff8e508106ea3a7", "1e398b710761ec69a0e9a2dcfaa0b31417bcb2440eb4b629a497ad9ecc09e604", "25f054d17013d12ba7cb6dd76ce90bd9ca5b5b1fce0a81af719f07ed16427356"), ("2a93faea75e9c34d929b095ef6f9f4de8874f61359ecfb3c2b87e63b07317205", "128def7b1865bdb38b459ed7d79b0ee8f523a98b123d0abd6b405f5136b042c0", "07ff0f7e6fc7dab9a95a292364558f0ac13047cf524feb54e82bfb4734cc8e81", "0262f7bcb495eb6aaaa6d649041602e4f11ffbc2b8e5dc719583336d87b5e60a"), ("30342581a8119b857b41e44342da4683bfec0acc524d996cf157f3df02e13c4e", "145a8cd1112c6adfed34cded7e990f439c1e2720451ab8e0c9a971db5784bfad", "2aecafc28ea3e87abc93ec1ce4bb495dc8ea160e1fbe08fb3e3eaa79f76be001", "065e0df8f6056c7fe4d6140f9ebd63c354b8e1a2ef02cb274e16bf17473b608c"), ("11671df5ddef8104913f87f33fc8ad92e821f60d5bf73fbaedee7677c139e394", "18999415e56055c883d7b1b4196a32d3e8586bbfcd970749d339f2fb690379b0", "0c490343bb16c6066d94520d42f62cca1cb0b7490d1c4cde3a6b6fa3feac9f59", "0dff4d195a899cddeb251d8c8c63dd6a7957093072d4e0a1298c2a224f32bd46"), ("057ed095229b27a01de746a4e0ed3dc4d71b0fc77d533f7f52f46847d4b7b37a", "11bb003c06c6b2514d35db393eecf8b84c8b0f5473acbcf5f473440e20974b42", "17eb4f6f01664978717fdfdb36ddbe222ef025e580348428d0744237ed3e5226", "10d2abc5f2a0b052c472cb8fe5fbfa4fe712550440e3b641cd63b340304b1295"), ("06944c9a8a099abcf4d0a119215bcbfd52cbb62174f0636ca488f2da950988d5", "104aaf80ae2f7cda96b3d6f5f6ab64b46d2cd41c7ae5c4d62cb75725ad639595", "251b8fac63bbf9728100d11233181bb5657709ae500bf1f7310068407d57d9e1", "242fa7a705ec868e045874bf5866145cba02291850613d76402b493f4f5577fc"), ("2438b3f943cb368a98ccb3c28b5724a840c9e62f2354319b513fc76b8a6dca36", "190de990b7a7d0917ed5a110c04cc4207a5f6a8a7d1a395144a50d68afeef89c", "1a4850fd92ca21bbc425f4815b08544a392073836f82bc8b38ba962626ce4ecc", "0865bd5306a96de76a038d81fdcbf5b2a579655804310edb62daece60e567f86"), ("18b098a316dc22443d7784dcd6ceaa60a7ee900a63b5c6efc854dbe89a47f834", "07eeeac8f40ea7092d576bb6290425056a42aad0723b002ff98fdd51d3b2ebe0", "09472222c57b4cc8329c1d1bfdc1a7b4e44313dc7ab397b5365e880ede3b26cf", "2e5ef2005221e47a706af8a89dfd73ac288ecd17ed0912674625ee5a6fdfbde6"), ("1b7125b48e7eee8a7df7be0b73927fa7becfc6ab7a68b599fdd0dfabb12e20f9", "09af37c8c3ae7cb53219fccb6448a6ee89a184b2df95f79907dae3bc087b291c", "24d80e818a1a6f8662c44ecfff983faea965ea97a7eac3a6e062bb5f32571b64", "2940b2bc861dd39f2d69c2c9237379603ca1b655807b5f35807dd4f489048e31"), ("24ca10826783c504b5b21a143dd848efa8b3a9a273df25f33c4bc85101bf9db0", "0a35d39af6f0121a21ea658bfa5dfca40e5bf857237072123e0c941a1276ee52", "075d03837f468a8409cda49e98948d7b21de2ba9fde4caf6fad0fdb03f317036", "189ea85a88283c8dc46eedd7fda467d931fc11d8d234a3a0b6ffad6896114d16"), ("0762c449618fd3105f2b71d3ff29a3957fd86d71f781be0d4be82307e5493113", "1d49ac586297ec85c492d9db8a7e2b152afd7ccf19bff12b1fadb7afe85216d0", "2f62d7e86f263d85914df3a7ee5a0410fa5dc52bfe7626aab5a0b232fba7d8ed", "0101cea5543df5f118be9d97f819663049a677187af0ba581505c9be568a1a0d"), ("19ea3536a6a8c3ff3fdb6496b10572a87c98f26108ce92368ea558cc595a19c4", "0d0437becc0109b8bae977d733d5b81cfc1309c9ad98d99cc32ee23e95dcbe8b", "2df88de2b819f3c9c7190356bb78af1bc24b5a61d7749a2fc2bc08b2802fb2c0", "0f71b9f133ab68f140062ab877f06aabb87043baaf6cca451dac6c802af11e2b"), ("08b1222f336a553326c6ed910370f7342f7bf3255b710ebcb800f683b7aeb65f", "145438df0c3665ea07adce1eb5fd8f7e626064a8a6e2634084a3b1d2bb852c66", "00da200b96e706412a211a4ce4273756693294e10dd33efc412bf894c63ca64e", "1e6fa916a47294b17ab30b7b2e29c61d79b260fe29fa7febddae9b3de5911d55"), ("073086131c34830467e26646a3074ac7b797ce9581b1e00e3c8bfb16914e54f6", "00e4a60b1874298466524124bd5c4ffa9baea3b5d3cadd78103ccc2752cc153a", "1013b17e0866e747213e5eb13bc28ea539485a456f90258a8e6d7c84101129ec", "178e1ccf39a9b728a833ef38984a045343b59c84b6af15febe427427822688c1"), ("06507fc961fcb38c66115cd44dc905b2869c32d5b443e2277d9f7c38d91e7831", "28a2c3ca412ce417bada1c897114d50e6d648550c4d6d0d5c9082b0db4266384", "0b68c63959bf58f91d4eb2d84a1fcd5ae2b7abf34f111b42e2b6bab82636eb0b", "2d15425d97f3c2bb4807f8a13963a9c7c54eb54e908f6123586acee74027e7e3"), ("11c43456d0702ba60ec550ff355b17832b7294eb3e4bbd03309d83f6cb215551", "002c8177b1b7970a4aba829d288c9c8ef983d61eddc85408526ddbe757c633a5", "0fbd0a1cec76e6dae8fad90f45db0d46874c1d1602129ec192ab66903a08a390", "0038d50b36bbb001334afef18fe721b5035ba8637bd5291cc6ddaa8f0e99af33"), ("1224577e0dd9dd0fcc542f6f7b4c394925eaf1f06e112852ea906c16c674beac", "04c5d572903839478edec51f40f08de0ed1aa278fbc0878b7b82d10943c90496", "26da7ed20ccad87cb5f37ab28f748015a0f42e1f178461e597a211a1cd75f633", "2d85e9bb6c930222dbbde930b1831d01002e9e62f43b98a71c64cc4bb330c44d"), ("2e935775aef16793e8a5b0a9b425d2753a8fc09b0e79523cd729761cafe43743", "2e3c31f6ae856ebb03ea6fba8fc54a5d2e4beae669ab20cbe09d3263ce3b65d3", "19b0812b949e99d87f2e4047a4f9e31da46bf81fbf991f350ffd909511a66a23", "14b85fa6d98c36c501e308afb3d69d02bc37d1fb2eac1a41dccaea0c9aff77ac"), ("1439ce47ce1ceb7cae8961b0b52f9dfb08033d81ed41bc93d2dcafff2f8d47f2", "0a53ce5afff9ddf805735d4eb4a7611d5b084c2040034ae58dcfa50b3936e260", "01e892284715065b5a92b9c063aa7d220a818d78a6a91eb9d5624a080d472973", "262e3fc1f5c41d634b0e243e8e5385970a3b9afa9008d6f501a4aafef46e9279"), ("0e50bce13d33ddd0e39edb02a7bd1212d60e22ff25e7e683bb483b3c3d23b2f6", "2c75daa3b09344fdd2287c1df8698e1bc948c8afff46aef475f331d618edf368", "27fe12ca2b90444f7223c78af9cb23c1466eaada2de2e33ed283d342c28bc85e", "2b3daf9f4a9c0b4b4d644df01bc0f6e6c8489ca5b6faeb1b7aee44c903a20eac"), ("131b7d2f1215fd042256a2a0fa2a257a46ba9dc339cfc31aae8c28d1a08f033b", "1ddaa9c3a64a81b0ddd6c9f2dd44b649a66fbdfe78ff4fcf6c0779a8fedfb5ba", "2222ae8c50992fef283adf9524c412a5705d677daa2f59575f8ebcafd0704bca", "2270c090fd8e0f6d0422e9ca0b9aa6effc01aad060074f9135bde1f116921b89"), ("2e41c81ead6b3858a20c8ac6626445e71bd6808ee4019ec32f759f01ffb2c26c", "26368ddd7ce16a0362975548fe8ca3cab6bf49859488f5c78e1af5e1993ee496", "0383da042e3ccbc90d925061b41033e0dbdf98096b840b67deac6a59f6bfb1f9", "162f777911335dbf27ff27b4a046e0233814cf94ff6c3605b8d59d4519cbd64b"), ("2f0168a220e881362e47344b500f7605834d69daf295f2543e12b13ce4efc95d", "23a2ece604aa110c0f57be38c38076d8dd2910964b8607d29698aa92c8c27914", "0b2af369173f144224f32f9de079673cda6000e252f0f8471290afba5e701889", "15dd3e2938483c6f24df6a8eef5fc6a97e4f6e9c4fdec47923a353ee95cf2d6c"), ("13571ab785acc53480186dc12f492eee1daa9d1d7fd75a0fd76b060dada6ee74", "1e40c0c340a516113a80901b582ec8b4961904c5095d0b9d7f37afb627d41b35", "073c0319f3d1d5e85968d61cf83c2c7f6c784711e9f49628eb2185d511c599c8", "2f618fa8ac4243e822a374a24aecd24d94ea193aaff9aabe5431022a5ec3c007"), ("0c4131f7f0c548b27adf9c550f65415820300f9544d024b8d90a758bc1f2a2ae", "2590b8330ed3e60b3fc3119be7cd5933556f11b13b290ab5cc42460caba7bd0d", "1e5af9bbfb44bca82695b7d384b0168b3fb7d285245fd00016c8db018fa69845", "2ba5d4cc0d1ebeee1c3fa341aa9fc2cce21d9c4e1517c22ee8826cb54e08c61e"), ("0de55303ad2e706d579e25bc5806c6ad5d26e44804747085743fe22a5fb21426", "200475e59632e235cc4691af6854d34867e47d542b23eb8dfc60cb0a99039b86", "056e01d0f2bf65c709de12ff4e5dc77f6419f2d68077573118c58e2a68109ca8", "0e4bfc5bd20c4ef8d85fc4a7c3835f3a494136845ae4474cfe714a1c84802028"), ("1f5a7702f1fc99debdd7aaea7abc48107c45e86d58dd53d9fcee67a36f50b078", "1c60bfdae0ff13b81ebb7f219ea1495f1bd33a677b043215997cd41b6b510463", "2215e6f274fe6c5c77805ebf75115d6d0abf6c0013b78f72f4c19d7045c7c317", "1ccafa83a3ce74b9962f697befede2c50bc36313b4858d6106535c810b24ce1a"), ("1c247896c35941044269d8882a300864f91c49ed25490dc2d48fdfd0259bf0c6", "0713057e6fa051963abbac0bd1b2b079d771ca68ce2fca8f0d42a7aa2a4c3c96", "0f32052638f20ada89f7eef31d01f7e630c85598b07c0db10718f3458bed44e3", "2828582cebed2c593389e6a56b60a3a777314abac9566ef4840cea7b6bcc0fbf"), ("1ce4f4f07ca0ccc3881cff64371698866807d4cc216f98124146ab1be5bda72c", "20b63ef6117bb245d84b195169b2466ae9b55cf76f26b28d8ef59c21ffadf69b", "1a209721915a82d4fa5cf3bd332089c2c144f3c042b21ade5db931726d0bfb24", "1f93e5e4f441b332744a7c3d9b53cdf5b9bff3f9be505cd3f74382bb75cba740"), ("0eae4ead53cc32e3a8c52cdea26a32185ca410c603d1307d8f5e4c1b266b94c5", "24b4b87f143cda2a3af7400d21810f8e8e3056f0676dff5262ca8a7c766a01db", "0d183f3d8468be8fe2863b069c798e7e629ccb5c715fe262fa1008981209aeb1", "1c0fcf56bef65d20ad1fbe6bf5ca0e5fbac211b5d1d3b2b5251035abd01888bb"), ("14ad4d62b5c91e2a841e3ec47403d82379954e825f7c4b15d1a490ff58bcf1d9", "04993debb01b66f78eadf88f19696f0578e13beab30e1752b609ae76addf7517", "0a1b4f153a8782297e90106fbf16404776a98b6ea23f3ffece473e5d0a3a93ba", "163af447a6d2497e517ff14671c4ba70e6e4aec1cb4f12c5d128a0359aedbebb"), ("0eca9aaeac2232771146b8a13a755c4894ab07540b6df510f114047841ae2328", "190a8bf4d669c7dc92aeeca680792bc9850b1d376d7faa0f7e55e825cd84f794", "19d6affea63082d08c00a77722b92aea7f4ec9c616ce66991f1f31c38a5d0aac", "1bf7c1446c53216077a11ac97c959b2fb696e1ca0373f54e18201792f5ea2448"), ("070cbebd8d0cdde38b42ab24aa11be28c8ea48d99a5b9d62a9c3c9cd9446d58d", "027496e381602ab456b1ddd4ccca28ef50f1ba64b9135a9ed4fbe9cb0767a1de", "178fe606255c467a74298d65c3c65e67247533aea320e94bdaa6f3e23586b18e", "168baade30d319d7c864df4f4e3b1f701fefc19ad1eaf704bd70c537033693ce"), ("12d602e2dbce477c59493493e0c287a575d04b32ce352aa8d814121be6d808a2", "2b6432bf347fd3e3be9dd6743c6d5e326023428e5241b1c44c3bb47d4e7c0c47", "1caf7c2a05ab0ac862899af46a81771652236325afc3d62a418e2ca2dc0c1626", "0d8b367aab21463d97774c059626602d63854ec3d4196ffde658fde648718d6f"), ("2475edade3fd9cbb4dc1c33ca2e9d3bfcb52f1ac3171518fde6b5c01c70a3f9c", "165a2d3b3fd42ff52adbc4d3d06232423cd7d666b2e80ec7e664f7570f57d883", "124d8fca624b97e5d14477bd33cb355ddcfc804782bf68e6913f10160896a138", "031b69ed186d35a04da9789ba189de468993f43a99a28edff21c4ce7a73b70ea"), ("1c34fa214fe2c62b210a3df2ba15cdc8afd059794045b6e3e592de2d6e692d48", "053619019fdb1b23cca2cbabd40baa28a5c3093d5c531fb2c4d06079d341440a", "1a4c63d5d1481829fd0c77f3ad79a45a21fb1f4bf77cbdc6f27c2bf5f469d8a5", "1b795a186e16da995c4372eb374cf43b2fbb403a0d5b1ea7119440b5c1501424"), ("2662e87e1a935341078d8c00ee2364468cde3f634a6c8379ceecdcc4c9b7fedd", "2e3edd0e01f8d9f6e6e776c4013ef6f08eedc419db2c6a475b1b855e1650fb1c", "19b26a325cb7c0ae23eb43fceb66793f4b75f112cf17fefc3f4ce9e681f56a47", "0373e69614903fd39da2fa0cafb09fb324dc03d0481bedc4602fc7d60e0c31a3"), ("252f27ea559b944498c27062db5164126009bede91c9ef7adda71d9360b6dc89", "26cc05eef6a557bf75b71ef8f928625ec39d21810a17ec9dbee002bf4d45c273", "19d44a7109415e1d302c7bbc6052e2141e5ddcea8886faf28c77e35a519487b3", "0951a82674096c9b5ee4f9a863cfbc7a95f0b9d0c311f2c3e29c2d8796be4759"), ("11d9a582788bef777c011d82815d6d415f0175d2b49c752749a0498823d122c9", "0343d1438f4fa7f8bd46633464f44c50d030be41653404a2ffa2136aae93608b", "21fd5a8d35e639b2790ccdadb7d7fff9fd70c4a0f6bd15b95ec8896d8dfbded7", "2610081e5defb64f9c2828edd7bcbd60b0cf1fed3465552daabee4c6aacb597d"), ("1c49acf8b598c2d3f1912b59a490967db44cf34af50063b9f524c478a042ecd4", "297806ceecc0a6cfb936c6e6188b9354bd6afe73754ee2d1e890b56be722acc1", "2eb865b23f0c13525f509f9b2cfe13142de7b5c4900af6b2324ed29210ef0be8", "2abfc44817d062c476c986b74a3cb90efdc7ebe761500307a10129175e8f03e5"), ("0904cc57c10af69d1a862c37e19902c4c05e93352d24c9598d8f5ee87afa43ed", "1f0dacc3f656de5aa0143022c42e6af09ba1f211fb1519cc7dedea68afe4e7ac", "031718efbc36552d16acaa9bc329ee9e12a511655f40e83285c16f079d3ae2bf", "264da915c6130b38bbef3cd112d6e901f2e58e2ee05bba8a243b8d238c6c5012"), ("1d2e297fd4ab1b1239fea0b6423b332074cedb8d7d49811bce8bace430e752d4", "22c8d9074c0ccf01a2af40378df5ba5b1a79f7c8181c4e68799a3d2467060d1e", "027413bbf7e921af8d0355c3abdbafc94f317b9c1a7da16fb9a0d9f3e6efa57e", "028b5869327c57bb155a923d13b3a193e4deb017fde88ff3379f1544fd691d4d"), ("0d6b98f20944fb916ebdb79828b33d923cb2f4a6ee971557b14a14049763c4b2", "29c28013aba0d6e8f65af5425865a2989be33c395bd9e6fec7a83e29045533c7", "1f00315c08782bde2b68397df16d338a25847fb5ec93790822af41c8a4e8a00d", "14e3e78a2e5a73c1ec6187c39fbae24161c3c4019e62718689f1e8474db23969"), ("1ffec535b9ad175fbd8faf5a4bf12849463fd2f9c209a24e6a909d539b48989b", "16967c34e7f366b5262718fa8888a0bf1a1a0e5652c5d96732c215f23d31231c", "0c3372704f40233a326ba2bc3d1368f6cc0a7f5137736d58960b2bd04c2e1c78", "1d96e2e14e29d8751d5b5382f6fbd2009bd9c3cff7f7b104d6066aba24e13b61"), ("217fec3360d3e3d184477d67bd8c24ed0d5ea61fb220869852b8f9c97bddb7ca", "1c8cc721539f46c54dffabd6b46a766107a40d0ae4491dfc76f6066b50ae56d1", "02ede3aa093afe55270316b4d33a0fdef8d104756f4c1003d9c695da4d7453fd", "0152bfa2ab270a5a3afcbf14f2fb7152bec1ac784a2fc05a5f86e8172cee810a"), ("29ebd5d631e1dcebe7fc3a7181e557d2c1c653ba95c2392ceca11aaa69447de7", "0c8b633fd3ddc7401b32223328cddb648bd1663766313bae539096f79e26a723", "2b7b3e7807291c8938a2d10fa8e8092bed8a70553bd4302badaf54ebd01f74ce", "0716b699e4d023539ab012d32778accd6fef6a086daaf9ffd954989929427fbf"), ("16c8bc44cfb171b231c4c4c3513af24ba71389e0f8de8b239f857bc86ce0efde", "0b3d9a1273814304d250f912a45b2456e40c340ea98dfff6f6d7795b4e15da03", "305d5c44b2f20693ef762a403660e5c279a977056151b62123f56daf2209da2e", "1d2c6e6637e156c0b775a5dd04e9813b50881f73327ed21ee8c879a9178631e2"), ("035426025a01ee7aab5b2114a247b767cd1cdd52af603b2d90cab56cc22f5ed2", "2333366673db94e0af709c6a0fb9907d20caae93bb4bf969975081606e6e8ca6", "0f9e526cedaf795784502ce32bfd5d2d397d77047f9bf6acdb142e4d74f41c97", "1504fe4ece5bc124b8c706f56b141beddcf93f5a1d97e371ea162fac36b222b7"), ("100fcf22921359055952396a6e262db042c38e395b32340ea9bc48f83fa5eb19", "21ae0a6a17d9a07d38f12bc44ee8753db10564a1ea9c414506ee483ac2be0eb9", "0de3aa1a8fca196bb89ab159bc60bcd5e20d35f39838ef1fd550113862ce9d92", "0f953144bccb9a8c1e0f397ea4f96dfba5d4871a212009aa3411653b551e851f"), ("02042f8f8251a13d61e2fb76d69d79fa344d8b55250c861ddaa32a6bc6d4add7", "2afdf314ee33893fef831c7cc1b0b8ff239f50579edd333ac6a408455a77f23b", "07be34222107841ea282b7b24ab4ae037f7873be7d0c40e3b3b341f108ad4ee8", "2657d21de044e1f3d7659d0b6c026e102c0df6c241b953db481009a11e05c60e"), ("03747a8b3221a368dad262110ab54f0c744d1f55086200f2d6a6b6c96780aac6", "0f2a7fe8ede6e5e2cc338e1160b86867d8f6a17205ee05f2429368761f698126", "1647989d0baab95dc0170803e7d6ba5119e9589e58ed59d7bc40865825c4ff90", "0975e54e9a6ee20354bcf92324ffbeca3c665d354a374025fb1a313de67c93c2"), ("085f1f3d8c4c7164011f4da1b1cc72f01c3fa43e962339d7a3b852d1f45a519f", "0002d6915f819a3cbc6595e35f2e3f204a5c242dee8cb4d746030944cc01f2ff", "230622ed4e4f9b16b69ba120a3b2f0fbaf9b3d1ae377f72b1092292531e31026", "2c0b2d799b9481f64f3bc2b8e5f2d80eb2f6ac1048cab4059e567af76a57f295"), ("1825847ca12e8f8d856d0d44142f1b118768995419c3675dad4bb5059682ba7e", "1a978da966d4803d4621cb5e3861e0950e7a84e9b7284eea7701e3b2ca3aeb3a", "088e676baf44c14c4f5898a1c4ee2997a39d04093d39a4fc8bc59896cb1bbf42", "0c2148db28b1436789985c13ace3a2e4a3ddf71d983ea8fbc6bb7dc1daa9f76b"), ("2956020eaa5e8c7205254efa5f7e486c09ee7ab180cf83b90245dd3af2ff35ee", "26c40fa7c8891ec066cfd8a394d7c25e6bcb300fbad5f863045ea64210145b6f", "03cd3d1b7c79bfb2dfa4d9eb7fbb3766bc1075843dff9c46dc354b7cd758dd13", "28eba56408a3175ecabc674b2b7b0219253529680d31a7e8e8cde11dea86c3b3"), ("20891ebd7a26c8094a8bc10b38e859cb5a289a2580d8740712c05a842a517c78", "0b3a9ae53fc67a86cb0c5aaf5d049246a3fabfa43f4bbef6b8129bcdf8afcff1", "19c4c29495e1a90699e6e8ad6300d6f8a863033c7508cc7f8c58ff0c576110be", "00dc3a046cfef13f67c56d28b8f4d4fab67037965f0c40b1ae2150a5cdeeca4a"), ("099b3d2cb82444f2ed41c7dbd6040a9a527dd45ff85b1ed5161ed410e90fbc1f", "0da0e7c86da0c31ca11909735897fc1293792dd93cdaa1ec6b3d36e800b6ffdc", "2847334487afb8bf086fc8ddc20f5d581be4dc29e7d08889f0dce8ae57189bd8", "09fd0b6b47d2b4a8fc6a1ed506bff7863f3efa8a905d83d4b38fcaa78ce164ed"), ("05639c7ce1680781b4d2f25ef01d83062d5a9ea3b12964589ffccd1e3af10a9f", "0711965e34cddbaf6df5d1117087581d3dd102956d80b1db87c095fb66012471", "21c42d71dd637b6f3a494cef3dc13c20b9b3dee39e19819125cd4a15cc243d1e", "2ec461916eb32c2b7fde5d3e4fe104697435ed2073627a1abfdd5a8e7d1d1315"), ("1172e5eb716877da9ac5f9ed886daf441ae1290007c499c49dba5ca5f49ce5b5", "0f7e08b1c91be67a55a0b10d5eeb64b87370af04c806fe5a08cd5eb0bae03bc5", "19a48b34c539b2009cd2dc20c703579828408814d2952721e872f0b09275f35c", "02d6efeb9b4fede767ba2eecd2608fd302c1b5ccc9aeee55ae25833c3b9ec1e0"), ("0f4270933cb066ba9e7d86bfb8bf9b1bdc8b59d336961c6df94d9507e06fb6dd", "1b6f69f13dbf23a953e528b2fe045ae1b7c93218b5842d1d092895b959a85fa2", "27f488eb7bf5b8c98b9feb23c64f336d23fe1717c0bb7a7fa0b3b374bda54e39", "1dcf10e6e5cb609cf876f87e205783d109b7a1b31cb40a32b3e80f2b42733000"), ("2b5737b48e629cdc6f656dcb78818010cb97daa8120d7684d637b421640d53f9", "068e8b2742adeb76d822858bc7cc60316fa47a8a5c5ce4fe70b51229e12043ca", "0e384d589cf8b1b7d20e09935512b585ebbb9f0e090b07a781385cfb890d66f1", "1eb16634b9c27aca940c7ad5fe44e081f53becf3d5c68ee9ab748ff751443cd8"), ("2f01e6d82b5eff995673fb9df8c674c1ed2c953c6d42ecafbb4b2258c9eb8ebf", "005e338a24c51de76cf9cc4c97758815fe2de09a02828137d41f77951edcb2eb", "1e351e0363509f4649308b4077f48e6c3abd01b5e631a825310626cd6d243ccf", "0f07b3177bb2dea9dcd394977f98822691a16082146b48b34a285a8d7258d523"), ("07ef7b35679af4af624e00eb2fe21ea82033775bcf5af81e23780d63cde1b18e", "0668f4f69eebe8ae1c9ada9586cc25d69fe4f7d6db115b20cc75aaa025a6f47d", "1b5d044b183c39fef2b86c5f052e64e179d2e0fb620904e76e1d6f3c07ebbcf7", "2fec4353fb582115301c86b47e9e057a31a152ec432b97e075bee5e842af5a53"), ("2ad74f3adbf8ca473a4831c43d3a3110fd73c1013863946372e06175991e8f94", "21fa3598d3e33384ecb4658bfdfc4e30758a916f77bcd2b8b32301f2a8a1d0d2", "2c89388e9167225d78bfe1db0286fa23cc542746cfa950667104e11fbc83aa55", "046654748008d3452deb13e2105111279aa38e7498b3c0aa5e27db2fa2c5994c"), ("003490756af6bb1ad5df74580de499d546fc2090483a45efecb3801fc9bd8ea0", "26145f30150755e3b792150af827f69a76f35958b7e177ca2dc3390fab915491", "126a25d01796e4928e637a8249f53d008e5a4f4627fc17302f30026c4bfc7e70", "0a4d3bcb02c202476b10366886240aa817cec84c09563c7152c8c6e02c35001c"), ("27cde9cb1f4a3df4ebba593d84c52998c3615d23c55499c6d293cb9852c8d9ac", "2000fc84f677df2be4a48a37554df867a327e4007dedef25207adfbf74ed523a", "08d9b810af368e2cd79052c8c80d0a4f1fb7f21c61eeb54649c0ad13538dc442", "08d311f572d62d3326201e7e7cd6caf4573e95c492aad300dfedd79b5d45d1ac"), ("1e75a8440c64a6d123362c9bd1a9c2102d8c6be2359a5d444cc9334f9ce4b38c", "0dbbcc0333d51b78f53c2b9aa17ea7f6deae39a9963bbd403086f34d91b602e3", "200833b1a7636c1c1e953faadc1e08f2fbff62b39c977cfe59afc4d65cba80f7", "2ced3e9c4b9cf68d63e317b0ef33a61d56ec06d8056405f5da6968d8f8fd48e9"), ("008f1c0f0b24ef1abb037e0bd5e5eb6d3bce30ccd9e74703b38d985bad860113", "19ecfecbb9d62bdfb10574178d04118711ae01393e5213df98c6864fff677810", "252a02a8e2802b08027a37e04c4059d2e71f71a1bc65dedd6df400d5e9cbfc25", "213f61fb4c7c7fbfe4e17cea5ff34c2488092b0e45bc02c6136121d0aa317a2e"), ("18bc02392ada8616edeaa45395b97ead71e5899960ba0e00ecfd99548f3e06c8", "124516115b163de057a11fac7dd40f24bef73a392ad9c455cfb7fcace364eafd", "1eb01e4732fbbdabd36f8645c76b3298b29f91dd026d07fce37e1395a57ce361", "1239be155ea1096527b59f3f3a04a9531c1927f73d37a9854a14ecb24f5054a2"), ("097692f8a2261f9fb818e213b1a9e2c890eaf1441670cc3bfacb1978f3638845", "0c60ac3f5c99dff1b30a28ee6c0117f482076ec477d2ac01f7b721bb5234652c", "0a2dcb3270aac9e83b226e19ae11a7b48036e5786356730d13fbd6fd6664f99b", "004b39a3512bf12123bebcb64694a637f352e13931f2e6ef112bf114ba1c5659"), ("05396310552a88e8331743ae869a91e949bc730f80a30c4abe0fe8e847cebed5", "15d3664dd2cef0c10b02cedde912aea37b54e232ade71e8038556ac247800c03", "24f23de39aa01f5a94901953ed2edb26600189cc3001bf0c791784f8a0fe3623", "0c370a643f75040b29135f73f012f9ee29c310a85013dfce999f49ff275b5ebc"), ("016ed1eaa4544130dae2a3f8369855fc03d88ab2675a6f10c942fc547502ced8", "07c3828741a49d535df30039a0b4b73ff010920b84df2176827d9dd69adc2414", "209a6d13b6b7c2619961c3836fe7a0162f857b405e991944044dd78186c0c6f5", "029064309e2d52c947142079a0951f32c28bc17279475ab4f2aaef337a797fd5"), ("0d9fca66874c8266e30301287c392694812adb28c6f5ff74513c6fad528a8125", "11b5d6acef28d7461cee295bc0949164ea0953ebc58cd572c722c05dc2276fa1", "24c2283330330ec36323812c7a64c6446469e16a748082481e41074867fd53a8", "0da3fde718cbf7b904e32d089004e82920aae66888b7aa8e3ce660d8f8de57a1"), ("05e2587e4bb6bada5d1e981692a35a1a7dbb775b25dae805ee93ea7ea8d1169b", "0dfedb80e0ef42bbc9cd2a115ed6ced27b18c1f4454216d34e65f6756d30d462", "04fa6953afe444489066223c2d7972c706dafea2deb0fe24fa3dc0c13abff191", "0d1d7452354e1e85fdd88b93e38f28c4761d39ade81c9bffca4a05004312faa5"), ("008a3ddba35692d3c594f7ab1c617d48cef29b4b951685cfe46a688184bd1c1e", "12957e324f809acaa94f837b63d7465bf0a5f3f24db090aa1e64ca0555b62449", "0c670ae100ef690687309340e76d175854afcf84f6f33e0e620936a2c19acd63", "0ab2373910e8765ecdd361fb14ea45c1083ac400acb6476a2c93ddbf54ad190d"), ("04e56fd3c73d94a6d332717bdb6aeeff4f002c0350aa8e4630cef6994033fa26", "1a615a44f3235a069ee45f5e1fd93dd420e08e5d00756aab62ba35014b5a1831", "19db929e057eb4972a8fc4d50e1152e2bdb42462826f43292f0ab187e59b335a", "21a2fceb08a5b79397b7a3043277618dc3bc0471024148067857768063e3942b"), ("0c74c92add56274bddf0e773c2fc0bf28dbdab91100d4c34bd723c7d5b1f6181", "2718d4bee60c0b7756be3d773cfea2d513fb1690b91208df99bdcb4bd4ce1a80", "165e6fd58b27d29118a9fb1591b04d7199d06b8dc2e70d342858ee076f78096d", "2d617cdbda0aba79d03bf8798874f46f59ac62e74c0c8db700213b0e73fa149c"), ("17941bce65f722b9ea15fe7b6e69d3b6448151db85c2dc745111669799154307", "115bfc80e8580fee113d52e24d27f5ea797690a154e36580110c3c5fd1513d34", "0a939a518f097dfbe77c786888542d9d1215fc6462607cd1ab72bfcb58fbef4a", "2ca18e7545dddd9ce761cdc6c29462aed1607baef1e70936500d040b41295c63"), ("022781c876d57f398ba9f1ed720338a07ff4d324ee65b6735fbac0f6bc9590d7", "2c36e4e611de41dfd32a5e6e2f2e69a1a72768bcedf6262241ddd90f5b4c17d2", "003b49d2683e8dbe8e716db1ace69be72eaf2032a452be04537f925e23049d82", "10fccac6c797681406131931f2cf580640d4889e900e730029ae773a3a7b109a"), ("1cf696bf712ea6c28cc5f1722da71ed9adcd3ee4435951588e24d1ef20acd455", "139dadf50a0314973a699e27a87bfafeb19f2a1acbacd01fc72052ae4beb4b5f", "2c3cbe00cd67d10a8a215ec4aa01106b630e55fdf800319a12ecbb46f66c8e61", "2571d4f190692317d02eccf8503cb2b1fa71ec4a4c536a5df2dca3f923af324a"), ("2916118a811a306f00011dfb3fb5235d8bb2a71ab86ac6f25853a7ffe3b3a807", "0fdb71d21a6e8fd03886221f9481d1ccc79a47ee6db77337e187d41ee70b4f6a", "2f68f33ab7a94ab21f2086b13c47d3ce4a9825dc3b1c5d7f629f9a2b22a8d33d", "12ddb370d04b57a17e7c6c5afccade562267c01588e570ab3e2b148f4e444add"), ("2cc7f247657025926a023348351c4dfe049578f6a605bda031bfe897b7d93454", "1fe8c20ebddc8a442bbe99006ef0f381e1dbf6c10e96046e4a542298a7c76153", "0139ba90c0ce652d940dd4ff6d4788100e0d09335bb2cd3a94b4039b473e1cdc", "14267fb7aba83e8693596d62bb4bf8c57c6cfd970eb40c5f34d456fcc5772b6b"), ("11d0cfc3680e9965b0eed357d62ede9cf333a9f48c54743ff2bf7dabdad5c7cf", "11ae8023b3d0f6675f16a805172ea4f662af871c91139ea1bc99a0a2f31e6b0b", "2b5a1cd735e56ac62d3ea35ae11700af6ce6fbf3c8aeaa9914afa0b525dd0003", "12b2e059eef0f6979b54ef0c84f93999f6e623c3f09b071ee3ffcd6ad4eadd37"), ("021fbac690c266d655053b97c76bdcc5587fbfeb4543c522e5df46c1c5c53677", "24f320c94d458e505fced8967df10a03695a7b41b809f52bc1679f964c0ab845", "2e6fb0756fd9cfcc34f1d73bb374fbcf693fdd151dc9ce6cc1f208d3b1450676", "070b0ef51f2bf2ac65c201497db0c02542789c5e3eeb63e494b573c842854007"), ("13d84e42b4f8b53c609798d7eb2e3e21e38756d49f31a6c879e2e2e32b471592", "1a698e95b0d1b71200b1e0b480f2e9831c8b8370bcaf85a58acc35df5400340a", "1c525e90fa60a4a45420e3a8c6912f7e3eb49bfa1f14cfd8b9460ab1655ba309", "17cd0c08cb79d88310bd8bdefd0caf05ab511bfc2003c1322485be37e968cc8a"), ("12c984dac784ccff6c724b914696eb6fdd6ffde53dc1ab43c3633e94f9aeae14", "2a6ebd349613ab761286314703f11c3b754739e7e15451bbdc4dc2c8160715f6", "0518ffaccbb59b313821f152bc98bead3f5b0300b7cd57255593e63a347fdafd", "0483d21d5c43293e6d0563faa4931e05aadd7cc9f4ee542fba9827881868e343"), ("0224b85f8dbc0d2727c8180ebcf5ae707954cb9b81439b1d3637e3d51d588396", "2d916855287b4600dc5497ed5986fbe15bcbf4906cc67617ea1ccaea88fe1c0a", "115e49b55b9682a4963a69f5de42b9fec3e35ad93e08c6dd2a8f1cc3c7bfced8", "2201beea6fe7e9c4e3733cdb24a2d6d7fae0f3d8d0e68a28ad9fef160e0c6da0"), ("0fea528347723f4dafa5c575d8bfe5bc13cd76f12a96f65aad975626608c7e0d", "11d1c36c2d7436bf332338ec1d329bcf03cae278041d4591a5c7be2876e30814", "2a97fcacf29ec723ad6b8ac33017b2a1828a7aeba6b04df9dc6a53aa58d19457", "11f95265d883cbda110b7df121a882f1105e47e3f769a4cb81c9d85857e485e0"), ("19d72fb3d0da196ea06031abfad2b0896fbfc14a609f4a6a5338d13096f8ef36", "0820e27880d6c16df2323457173b450d0c08afbf6756bd7b44e221607bd8d072", "09efba89ceeaa66e87ad9f858d08fa6bca0391746d7f5815645defdefa132b16", "23446aea0d0b787d6d8216f6d75cccb2e9ac42d797dcc49d1dabfe0b7522fc09"), ("20c35ee5db652c07537d68e7898a3cc5c87a0c8f0e4d366587667a2b19ec162a", "03a7da7993d6f9e4d4391c4ca867d1b10be21436b0f413a4ed25eb9e56e2f977", "2226460a8a5423e44b0460971601100d409daf55b989986d609271a41e0f5bc2", "007f9861c00b561d7e242281ab414b7b0d9a75375b979daa1c0d0459b877b25c"), ("00b190d14ca01578af1b5992c47a6d66b3cb699688f1d6e1134d1df90cf97c61", "2077f08122a96f0bedad468c8df35b1576f0ce2fc57939992b32326c6dd9adc5", "16712f65e34f282840872f895e6fefd0a902a9c710c8ddfb846975be89b8e779", "24fd54c959d9fc092a9ed96057c400d6171cd3310f3acbcc824daf0de5796098"), ("16cada2ef4b74fefc7e0096e09d2f030d32e51e0c42d7530a7df1cf4dcba8445", "0e8fc8cffd1ac82b737a22a42e13ea0f88dabe1caa7ce257ffe2b573ccd8e39f", "176dfba4e02247d2e5c634f790b879fa8e27311b80ce4b9a6d8bacca9923b3d3", "092764ba25a1b4b3ba594a5c4e160ae4f698795d57493805b21ddedf73c49220"), ("016caa67163f55f5cdbde944308dab079ea5b5e0871a0fd1c7598b5c23f2f494", "01ec39107f83b45c45b176dcbf5ea498d77fdaad3cf4cb44de518930f2652505", "2e3d31c145f3feeedfeefa0e2e8503376fa462b5b46e9c3824cee1d157155ef7", "2c5187948753763841624f8a90dc129c4cc269bdffd9de57f325cb4c3fbe9393"), ("16cb6749ba98fcd0a05367682be15de12c1503f761f436b803069b02dcba14e8", "0458c7f4cd377686c77ea5241a4d86b6b7db79f65f79e3c701533a26d4e18278", "24b32537ec9b9b66f6cf701b92b89302b16660ed0ae9cf8813fdd3181c07f7e6", "09ace4f43bbc01a3eb6a83d8b13ee62f8612c90d522909d2a03bc6064fb74aa8"), ("1f7203a6b2c7d2cf85d522b2202fae78a62d7eaec0dd71dc92953dd8b67933da", "018ef74caa7348bbf3657a73d7cc8d2e28475926fa4f89ad53d8fefb3cee95a7", "1de95909484c32783e5ad5cb23c18b3e8ce37d31e780052c679d505b84b33373", "04c30cb8d7b39edb9c2493e7724262138172133cbead4300ff687b0fae2e260d"), ("00efb6a5cc950d566e96a9abbed7ee8065d793f9792118b15ca27391417eb4c8", "2f4189d93c9b1abb4bd1244499e9a6dffdab1e48d597092fbe7b87b8e670803b", "2033ca17dd2563783039497c84a574da6be6883680ef6d1b4ee36462a4c6c983", "1048f2cabc3b71e84880734ac2e0afc058e8bb4cea3083c73aaa85e8eac0114b"), ("0d884ebe62559fe58f3987b5185f6be345996caf8c69398afe80f4aa3723be54", "0acc2f499630a57d0b99ad5a9b4ff7af4f081f67c7f4a609bd190b8f5f63d0ae", "17d65d6c794ca10c389a3386fe9f5312d2d48adcdd9fc90496ff851edf247af1", "2f189cd1f7e2e9e40d59eed0b990b4681aa044643756351382fc6a42dabe029e"), ("0aa4dd825ea019180d605608c3790ccdc33cdcb7e67607b7f3510315b9def9b4", "0ef39a38f1a230abafa549e98f49290f38ea7e70fb0921696186b0be060028eb", "04a9d104d698bf23a2f4b1243351e238a1ffdf3c95dcb6b9531050bb267911d9", "03d736efb88e03acbcaef1fad046566de9711b233eb30c727cdf2801ca47c9b8"), ("251c228f21310ff603a4cd0312c8dbe60863b21066c949027da303fd351a38f0", "0e1fc22130aaef9f31c879e70364804f5a2a0023a1a4ee6f57a49a73727c2c5c", "284830bee5ebea228e9eeb566cc56d32e93b2f61ffc1dfb714c47463ad54f775", "14260a0205e62fe635d255f6aab37ee1c8dd84d93fcfdd93c78685f5b3e16561"), ("24e3ed688fac1251c34c7707683703790ad726a60e1ec705f9b174a2c1588280", "2f13f8b7f277c8d30d0f80f91655e1d7b9bc8cca02b5566609b821c159d2e960", "2d2bebfc92fae657b1aec193e1c0ec1fbf5d000b37364aa7b9378824e3b696d9", "13ca6617d62e1e45dacf6d71a6bc1a274027ed6e79c5d5e513b38786fa097df0"), ("285a186944b9b6e8f2d3ec37b0602af9d56fd0215ad79d8afcfb1acdb5e020b1", "1b77353da2d1bba1abda776ca2332b578311ef164ff648368c3cbeca835e5122", "1eddd92dcfb03f03917eeba4c1a787c12e9b3796fac94139dd6f00dbc6a9bcd9", "1138f39a25646f9d05a3d8eb1806dfd6f8ba9927cfcbb293a7f314aeb49daaba"), ("0a09616bb78ee2b31fb2f195882910525ec551ebcbb5c76f0c37dd4dd364d31d", "29eb1d4718414856c41e5cef90af99fe5eff75d6a114e5351b873762467188f3", "2d0a538eebb72b20f0443098c48c67298ecc54c77f63bc541d81c163c17e2d45", "2e1fc71ab8ef565b960502a7a4c1e99c835571798825d39c9ccc732d780bfd44"), ("1ec0452a42f25aacd97b6f9e1900be26da0f9165f96cc5ed9e5046900e1331b9", "22e0798bf05a615b68160e6e76159983ec1b91f1f1dd10bf80794b491fbd00db", "1ec291425d7d55682fa649d7956262874f000d01d9d73028ab701fd671869b79", "141f53911191cbcfb9c25e3bbe1471d3d094265ae1dfbcfe8e5bb30f13cc2849"), ("15e59b5dc177da4088bb7565186340fea8d960d82a0eb097f79ce3ab348d12c1", "0b61bb16b56463d475019f1259a091619b6bf9391638c0ff53b0d528ced2d446", "1ea89b0ca9e9c854e444da3e1f8500dd79721c12542b025a391a6dcae5b3da00", "2d83122b4d991d331557b10e6b6ae3e0dee20e6366c40a06007a5d2d0924639c"), ("000c2edea39b5a5fa79ea2c41803ae60bd22efd9df75f36b65813bf352ebcfba", "19388a5bb8e4823ce2dca66b1485e3efc39f28eb7bec491afb27ed737067a60d", "095619c6b611adc45544af0659a8dc4da36372d4727ae33e2cda3145a8e51640", "2e9cd6b0ec07c71d8051c6ccfef7380ad3ea55e35496daedd6dcff33b1341ed4"), ("11bcfcc388ed8e31d3ca2bc14b6927a5501529d5f584d52b5e62e925ae0f5101", "2c323b6fe710b2036362771f6c0dacf8fe7db35d8f7325d1669cdae581cd934f", "2094f23f85147836801e74270b4435dc77a06917ffecc81f6de8e570a0544291", "02b4115dd3cf7ca8dd0aba827cb6f397d7a7eaf87bb429cefead09d3ad3ffb0e"), ("04116de85ba843aa343a368b20d3c0786fe060a9053eac2487c69cf0ce8f0e0f", "23f9d814b7e7b4c61d4a4c5c2d8970fcca79df6c099f252bb8db6823b377f84f", "2c2412c5710f21d35cbb7f6267f88b1883ee7c4c37495af0e3477299e7b62ba7", "2c1934345106c1783eff0dd798b7d0e8685d901bbabb04b7fb9c8fdbeca94c28"), ("2c6692dbe507f4b8a33898e435c76acc73c2794747f0a3d202bb6f1b9395a63e", "255a958d366a214b32b2cff73bbdd5a2954ba40b2f0547e202d22e74a07905a8", "112de8cbac5075cdcc1f84e28002870ef9deb5a8c02421da9f0eee27c6c6033a", "22677961243aa7c5b1a9ebb8126459b67696b27b70dba8b5a906193c48016dab"), ("0b7b1a937dcd885953a8fdbed064eb15ece6f53203bd143f3bff7f3366c85fa4", "28ab3f16868bac07cc863522c7b3b118bdffa97a8c8be754662b0136558456da", "18c4e079b142b26ee4cd814aef5b9afed25b3c1734facf2118f7c1bda75221ff", "150984910307a919b84bba654d12d5102a342c71feb9bb43d05f4de382e995ff"), ("1e8d1dd246f46bb3573315640738d4d2094b3a350746d1f96c4d941eb6faae65", "1f84399fb0540c88cc09023ac24d7751e24ceed2aeb8d42e4bb212a76421900e", "0bd0466819c6729181c8d3fa7b4b57483300f10539e4234bb9be9dcf1263272f", "2f2cdd06a5457251a05d9fc8161e7f3f6795b5e238bd215a8bcd78cb283ab462"), ("0eab71c676b223570e4f9941abba1be152082f355e51b6f11c8d507ac42e5bae", "0f494d5fc26158c92b95d017e2c10b1af84bf1c420d4ff8a5519a1ae8394c834", "151cfb8103330998fb12e2435f256cab931391984217a48176b60d62fc8472ea", "034970b6832476178accc4311fbb8faa7725faf0b3990b1461a9f1662acf3b68"), ("287efb94ef5a0750dcacf413f092c386358cf55c7558383444cff76efba9c5d1", "0c5f2e0b5336e830ff92218241d9be954cc510bacfa5330b5914f4ed6b0267d0", "2fad6440210e3406cf1a486dc6b452df2769b7fa7189c1046bd3268a9135255c", "0baf95aee2465db8f138d97915d2c0d0f580cae9b9fa4b1ad21a966b0cd882bf"), ("06ad450c4ddc0a9fba173e93c77c39df0fdc19ce77663d11a2b85cde6b9c9f0a", "294c09707cd2971267fb71cfa22a35f36ab4831a56dd65e25dcb45a15e188828", "038496a3273d25486f91c458ca6d98ec321c97d9859ddd197290a949d207dfa7", "139908520a78dfed52a9df2fe4058d503a811ad39f504675fb8677209c41fadd"), ("29b34363b86b9fabb2284f87f2af875beeb0ee73eb0f10e08586aaee310c2ff0", "0a5a0f4c806eceef902b1be6d069d712201aa007320d2ce9d6b2bee7ce0a27fc", "00608e59b94d2040225dd621b99d52f55b9795f7ebada31e175cb7380dcdc4ab", "1741971989d787fbf0955a250e76ae1db9e3c74167bd475134c454538760c716"), ("188e45a763f1247dee9bcfc4b50a2b28dbf60698f228fc947a84f2decbbe19cc", "2aaf79636553a603ae1366dbfe7103d1619854374ec193d160f1b78d94701650", "144dd8ac4d325fc370262bf386b28365dafc55bb00e9f0081cd4cfae6610c7c6", "2a06f6b24297a33c2bee6f6988de0c885770dd4e0daca613620d5caa7f1e64d2"), ("156eb1b4f2d44c7a6fa2adeab4ddb5d190f7f58a9855b0b5bca1907c2f802d76", "29c0abaace9575eb719b149fda7bbdffb3d68c1d90062e194ff4a12489ee30ee", "2fd967ecaca4fc3ef3613468459aca2125a526b2419982c1aa7826e9e6a7e405", "1ddfb987643a54f92e307bfe38bc78d1ca69ab0a8336af787c6093bf79094fd5"), ("0f7b699978654ae9d056f9e45da77f8bd7cbfadb8fa966c061a2be58492bc7be", "24034f331692b5d8975a8834d74f0e3ff943954a85eab498c45efee138f54719", "037c9f989d5bfe5b46fbf27776dbacca9e0f82b18aef460cf765e5aa5621e7ce", "09f1aeac494cc15853a3c55418914ace13c10d8085527d6bd66598b586f8ed9d"), ("0c8d5f59e8542df69a6e16e34972b3e34694e39787f20f30a441c6c484ad24ea", "12be67ddaa1209a2b09d3c261e66380cec4df3a4d58095ef26dae6ae6d723a05", "1d54fb1d02a527d3c4a6a1752d8dd2fbb6f987a0baf629d407b0b568c88190d9", "29eb66e887920d11b55f1529628eb2f331efbab82ef373a574068648a4f0b0d2"), ("1712b49775fa47a4d0f6482e290b56ecac304ade28d474c51bf70cfe9147eb26", "0467df1e6419f899a634b5842ac84d6f5d37f799a439ed53337d3c4341c0f54b", "110b572437c33159e1374e36c36de2eaaa9e57979cfd82fbcb28d8b8b5813ba4", "069ae5947c774f0a22ffd97e3e704af0cf00e6b39a5ba383a8abd04091c45fcf"), ("109ae9ac7a9600f46b1439fce5c04d5be26c07b0a285612cad4b2c6021d06a58", "0ba8167cafb9adb4a852d4ea712ac82295b4af426d6b2251a1b6cc759241485a", "21cf73161b0acb4f5e16751b2ef0845d1c91b5b6d3ade49f92c43b86deec86b9", "1071ef952f4881baee105fe7669d600e9b0bcb5b39d4c9424e072387f1dde161"), ("0c33a92db126b49450ed7345862eab3080c00131dbde9bd81a7e197a5cd579bd", "0ed4d2743aefdec89006fbc2cd1a9bbd6b85c59ba3f0b1b9f9243eefdc4e21d2", "095a939673a0e4833dc5519013e873e566849e36181a5dbef61638b1ab7c51e1", "0ecbc26c8939295003946581a619d349d739df301302cf6bb70e494e231e8eae"), ("2e2fef135aa4f8f43853c7963d1c7de7e0dab8c128bb568227e824100ef9a80d", "13277453e847cf30489bea87674bbcbe6a4b995601b155e651d8ddf272dc64e8", "0f2f02bb7f083b122f1d305e75cbc5615b8b2a963a78e17d966c57a019754a6f", "03901f23f50c9eb4f77ec263a436c1c957b1e8f63e71593f509ee1ee692b7943"), ("1d735afe270c65c6500464d49233951327d8f6614b45ace0aa3d968c1cfe2f34", "1de4ea547dd0137d8765912331173755149c614ba76ec823dbf6c46c1de7fbfb", "24ae4f0bf7700fa3f09c2fcff743aaef6e530b2a52a0a9c1e128311a262ed46d", "15684bba125b62f77cdbd72218b4cdd3a7ba7e2b6c91876b329beafccf2a4d2b"), ("0768dce7c0c4a9e9fc892ea7686ac9cf4b6cac632d6eb42cea33bc47d5aeb331", "1da841c11e3ba2c5bbbe59d09b6ebd0f4ec1a0635af088da1638d5f53ddfe769", "2c786091a2985d0b652eed5bc580efbfb59bc9b9abd3a34bc729f24a6e4cba9b", "1a412c6720ac244aa5754c96fab2632fe330777ab2883d01f5995fcc7d81e11a"), ("0701b561f7f8bd34d93ed09b7a1f981f6b8da40c542573f4d7d4f784d417e516", "2e7445595612cffe676f826188da46b52079b9586ab9b6996f812ab2e8008485", "2cba557e734cbfa716058a2866b83bcac0ff0ddf911d87f89b15ae60fbbbb236", "1866d633cd1be5940d2c68ff4c470788b1e8bf4719f98f2ed3a291fd2e5058f2"), ("2d274615cca9843ccf870533d79824dd3ce643f27711d9879f6e451b5ade2b0f", "193066827d572633ae062627321bd5d9d594ff39a8908e85504fc3844adc3fc4", "15ec632c08d636a1c3f24414b5baa4aac44f49d65df4355dd9a694f1453e96ae", "18e73f0433df739a24f732e0af217be576a43c88ef95814d65100bdf8ce75886"), ("3054a809c881b24d5041284640b6972edce0adea2b2755da97bd0e81d369e51c", "10648a59d4ba761e4545a492a58708a2a4dd609111d21d1fce696d48ff91185d", "057fbd5250ec215d8cf2104ce93e258560d036d3f13b16a5d12a4f82d41a7120", "1cc91a56c74789b72dd20a6bcb1850a4ad04ad189a13f5ec763d3c471eac9741"), ("05ae3e98015f660f8eb8fc806bd074cc2dc140e126deb7ce6d7ed84fe2c030c0", "243074ed711706c572fa733a1e3da634027fd0e44d937261a31db2bd0f53923f", "05e77cb10ab1b632100387572a8960ab04e272cadc57f1114941812ceafa3026", "1b08a3961cbe010fce980127aea5122e83590de26625b4a026ee5ebeedf35046"), ("006d60e385830e20074fb583ae59ad2c3b56a7985003bcca79df403e0a83cc78", "125cbe83e30f346a5620f8c60f441a17f2074dea100c2f01c01527894fd42167", "06295f6eff7bfb7de47c4e478bc0bc932c6096bf4b43b706c3526738b92d19f2", "1f79bdb4bcb6b67b6f0ac44bae0fcb251b9d6fb4ffcf64003b05eca41bd1278b"), ("1a841b29164a7d75b0ac02ef45ca997e1c5cfc87afbff252a5f8abd00823f725", "0263b70cd74592d5e574cfa35884b46c6dfeed0befe6ddf7fdef5cb8cbb69b85", "236f64f55eefb6330fe5da58669a103c696065166c81c7e0ed523be7ade10733", "1fcbf7be6d587cf442c9fcd8ed9835d4f716ca29555c335dadea403bbd7927f0"), ("0c9c09cc9a2475833a89be85855780bc0d7b3a4e205988d8605194d22ec301ff", "1c52f04b2d6d191930312a0356b65004313b0f7fd179e33f8147a412bfa3af87", "1578ef7c743e4cabfd6df653b2fbc9a55c58bd8409a8ef7db2d61430ea47372e", "2b89d2cff763e9cb805a14b7fa33cc3f26239c6f44b0ccf77c36747d10916f96"), ("0230304d7e0ad06cf2b0862b0a0eeb7acce9f21ba196878a7c1e72a948a8f177", "284af2323753da2699cef568fe2469a6dd651b61df4ca4c077128ca42b1cb68f", "1c3690cc018615401030b95f6f2e52c746716a695dc5b094b66558cd1c0f315c", "12360cf34c32e26cf079caa63102b2a691cb8a87abc96ff8c381e19e56d57916"), ("1acd48f503c89a235bce238406ab895af19174d002e528ef2d7ff366518d5b4f", "18ba9f21576e53a1c858d67217ac9c1fa4ec1039d9472922409d82d26500c232", "0eae7d33d4752920562ca599938ffada7acdd2dc440d154b7492b6b9a689752f", "1e91b18ff778f0e08ff90080b6f5602704524469ea1a5ff77b148395b747db8f"), ("02fef0c47457f713aa2003cb1256a370617475bdf64e03d78065cbec78bef7a6", "0cda0527081c3981c524ddba7c2b3a4aeb3ed541e3ba2ed94426dd3492492315", "27172d96156308b33091c540b8af9158c0b627cbffea5ba61681c000c98d7051", "0e0912f9c41abef702cc92a56ad8d470d699638d4324a8d7854c38e798f72bf3"), ("2d5ae9fc742896df117ba159c2579c97678a5807ef575a86479039949c1628e0", "1d520f1379b18a5e68aa9733dd8ed30780709167ebf2a322ad171b7333bafbb5", "0e9d75b488d00a576ba67ea0ddb9b9da7a04af314a82384d3d474266cf0fffc9", "0ed6cd5a9ab74c3e347cbbca5a822500088dfbde7c78411571bd21f65e0eaa11"), ("0e1719f76591787057f22774690431f67897264fa4dedf3ea01c630e23e94aee", "232426fce8061a713014289a40b074387e26ef96d7c9f61c8f50c581ade30f23", "1be85405cc639d90087c9674b7203959fbef63ec8788d847758af2a5e3ad22a4", "2869d3dd6c248f448d0d6411adda299d4cddb2fb49203ce04bedb29cb602fe40"), ("209f6a3355ac0b43b973c2c3733b40bcd4824fb147da7da7e38e736e29e1be7f", "2b3799abeb7a5ea5e936177e35a26734df9acb18d26cc0131546d6d9726fe96c", "12ce16f2d21c7c43d8f1b4a68da9170d5193e1c4182bb3751c960c3f5659fbaf", "02f9f8bbd1e828f075a2da456342126d65c7aabd28c769af8eb52dd0933a8df1"), ("1d2dec1824e26b9804252680259e6ce9853322d4288c094068c3404dac9983ca", "1e7112cf99939ec6ee0d3e678c0cdce6671740f65e0f3c9ae3549c854ccfdb9d", "1e82b9d5fc5684b9bcdc138f00eaf56e0511285c8184d973df39a944037f708e", "130c4f78830ae1dcf99eee2b89a084f7e96356b9379b95d679fbe4cc3ff37309"), ("1c2614ee7436cac813893179af27740c2c011bc82737303a79a8c3a9058a8ff3", "1b316120a9439c94dfca6ebdf2c72feaf73b91871e0cf86096ea6896813229da", "0024e3699d080832f7b75e770bccd36757bbbecfd8a8331ffc0a31390aefaa99", "2159e87685c6e192115c3a55cbd05662bbe498ec632364202c627eb2723b43ca"), ("2d6ac3b2e7c183496e6acd695785bf4a4c8c4311531bc2cb9f565abecc2a14b7", "1d87d18b1b93828d4799df9fe7753ac4504da36e98d3e5ca875d0fe8da2692b7", "01d7d0cfaac3b326568e0097e698bcba397efa5ceb41482efda7f8845a6407c8", "1519b8b11dbbbbc4861789664b8f96089920338f08382ac7b86debe2b9595b4a"), ("11cab5b5a33bbb502530e4f5fa6e958608f70de228de78a8f477d98272dac1e2", "1633d3a9607ea3e7e1fdce4eb0320335b8fcf68a63fac720f8762114a5aae2e9", "2df71c8d240a052ea60d85448a4d4f5533917e0155822d027f2129a05c1a96ff", "1ea820ec017d698acc4de848688911fcf55161259745c7bf8e4b817fd5029570"), ("26b026af1328caa88e4c739930564d52040e5ae5fd7d0e76c5144233e66eafce", "0b629898797fb82eef2caf40ccb1739ce927dbbbf4ba620f04fd44e4c7bd06f2", "10b8b9c4d5c1809c02c09aaa8f15544ef8e88af0829b51fcfc1db7e45904e9bb", "1fb28d19ac7521e9a97d8937b73ccd9395308df1592f9aedcf695dce57d96611"), ("183f23ea8d2316b683f7fa1a57b3147c66f459a776c2f64ba245baa6d5a99a97", "2606728a8365d1fb22ba909bfb8111e330c528871730893dd7046380bb41c616", "1d9a8d17bf0159993857d8018e89698f82dcc2538dd798bbe093fe5f3d6d4a89", "2d2dbf02b8bbcdb61b7af9ba06911de9ebe0498b150a5c0e6a1d5738c7ddf117"), ("13f5fe66f74f3defe94ff45eae91bded9ac12bbb80e13aa9ff9589ab56130538", "257221ae68e196b595484281c52a214cad4228fabddd93d6e92d06b478428f69", "1bd7e2335f9d2398e265372a4a19cab5ad4aa97c072bfe879128f043a659f575", "2bb8f4e567c209f72bf5b4265914f9db2266ef9fbbe823fdb8503e34fdbd677d"), ("0ced80751bf0d527171d1e487fe89e4eb1cb4fa8be95e28ca22cc8716b80b1aa", "15b5b6b59169850a69734f106bd487900200e66ffe72895e6fc47debbd28781b", "1badf9b86bee4618a7ab6b3202e04446a2cdcee1c8e72ccd26ada29b0acf7578", "2a7260431303f2f2d6964d5760fa0b8b59c314d0023d41d50934d8a14d9be49a"), ("297ada70df4c08d63738b729d7a42030bbbf6ad76b2aaa82ee8db47dab3403ff", "1da2ae2d8398d32feaaf50558c9c9b473443ee72309d00be29cd818256def097", "167160e9124d6f24937050b126d9e4c09ad3aa7902561125bfc503dee0b1f6f9", "2e144a057a3172e010733ff8d094418127c6954e74cc12aa6c4265f389b624eb"), ("2a736f180dc284e25c255280571762bcf8e4c6a7cb5717a4a6c4e8eaf4e897f1", "0e327a177e11d015549e48423aa9d8deb16f749724aa42846481d7ec5f4d7f01", "12b89588b3f93a85fa6f73466306b17ef289d75d75a5772b50096287d174198a", "0f5b4de70fda76b1f0222ace7a084e3a88e4ccba95e3b101fb72121f3e575226"), ("2869901a3ac47ba6a23f091fa85bf05fa7a0dcbe9a1d1776c9a5afd39fe1838c", "098765b689083a219105fa189d4c49f59b688d27bf1ffe4c30165f63a4c245fa", "083cd9c4a7528b97e3e26a72bf40ccbf3df1d159102efd54252516964b75d6b8", "162575346e4b273ffe80958f9ecb80515a24c1e03802c3d4fee6f151a6131ca0"), ("2fca7cccd98be40246c99f8d70b8b1770706a4427b2c689cca2886b29b783c55", "11be9e73bd4e1441e9f92a9c78eb75aa1c827ab1b261c4658346639c60c19a46", "2f0900dadbabf460f141a35b5290b5e51e3c074fb350e75da02a8a1b88a0d863", "12e7eb7dd5e78890d2589255a532388d8f3d3bae1fcffd1da9ffea5039e62379"), ("0e7aec6dc0275dbdc85d838759823bc8ee52492ced80f42e83068372bf4d7beb", "0011bb0b9ddbe1651bb88a271d2fa2bd5ebf06fe751f7403a0c6c17695cb9c94", "124b7b30d9989632c4a5f132d3771f951cea4bb715e101f7348e0e2c26626ec4", "06a05475dd57d7f24fbed0bfccd4becdacb2119440f0018779f02815bbeb32a5"), ("0ea7bed3c575622112a5bb0ae6e4fdb58ce3b75ed549f0cb95076bf12855af99", "0b556abebea5702abfb6bfe2a55e9eade7ce850ee9c3421e2d4476d00995830c", "288b4957aa88d7fde4a55a6b4d5830b1141cce3ce733359c561f02dbadc7cf88", "13fedc5813a9208a6739c2e8f6b2341f8f60841090c8f9c11457e75f784f0991"), ("26bb6b9324b81804e61a9728f1b763f7e020ef903ac4e32790d15ec6203b9c0f", "2195211573ffdf03d62ca0e94b2941180d2f2f9cdacfe2e0109ab13083d6064e", "2799144df282b8a2dfd0382d17dd2366e9333bfb0c4071994d6f7debf8a13c0d", "1852266c518a617dcebb212c8813b00751a3a4cb929873b3de5ac67f05a2c52f"), ("02a2c2458408383e11e8a0cb249eeb93ed930654dc921f2b072b444b289829cb", "1a74472117ec06a0da43051b1bdf09ef3e95244b7a0353e643a9aeca5b34fabc", "12ea82c1636226a4065c51ae403fd24b09d9e16ddab449ec9a041c4a36bbf0ca", "0d97cc98f7370a67f421df18f622109360b9483b99023d714ffb70f247ad51e6"), ("240859af97c9500bbfb84da6dd155e54d9eb93f9ca97d0cf741c5f80a72b0712", "1d5655d5eb5ee4ad831c1502a5af3a0f35e3f7b7580d97d4c77ba26a8f21cda1", "0ac6c2d9ecf1dae2c5e2926330a8ca0f8c9de2ae16973d216b7db55ca97f05cc", "26ee776f11d5ff688d7fa9ae104465b7e0357f6f50a748171002a3f4f2af02ac"), ("0b2da2b8071a06bd8e1289c611a02c3fd08bd961e848100f75c95a6d347254ee", "1d3044b38525f23b23b89c30237276993976687b0b10b9a01e62b3a95693e2af", "1e003632328ef38bda8607a7dd703f3553ff5d573e0a6327074da9a7a0225077", "1d5938192dc7a3eca595456841dd18e78336aaea2e9593084d552603ceb18864"), ("232a8c59072ca5db20551b52c41ce636e616bd1b398339d04c86ef899c456ae5", "07ffc46487ddfed169ae5945c8d464e43a06824997f8d30cb6c2dce978ec3900", "1fbb3cb2d35a1120239839b5663766183d76320bc3cb825cc8acd41dbb6f3743", "2f7ff13b21d3fc7b52d7e84952237992601fd38c218d04ee947e186cf4b8bc4a"), ("1f9705870cfaa352c133d576b82fdf83966bdd28d98f91d31e184271539d1b99", "069359971f4ae13bf4e50bf8acdde73b0c3cf4261a0855702666d2b0277a9ed0", "2a0e7bc0b8006eea0c2f7eb0120551ce19387582f3bbe908e5d938107a50d9b9", "1e15474245a4b8450f089dfa586259066fd0c54286ccfd2914a41e8cc495009d"), ("2039a99ec2f8c9075417bec5f5815a1679ca139a140b986158da15e0b3783ba7", "14bb2540161df9d9051cf35fbc6100e79447c1ba5857176f1a34e9bf40d558fb", "287530a6b18781a48bdcff1bce8bf18df0f9627a814b46ecfae8e915260fdc1d", "10bfb537862143448254db8483d3600808cd2920acac8c9cddc2ffbe749d506a"), ("1c85411cb890534489b0810d7f52ed3afdd2e4c5400b1db240fc2ff7d6ced080", "27c72d608deb7d77cda8d94a254e5b89201befbac45b9dc531d24333e5f8bfd6", "2565fa2b87a88dff28ad80cabb25f6013355a97e34c6d489f285c6861af6641c", "2aa21467fedad0a45a844aca1f9f2201c100a0b6a463624ddb63c17df2ad66bc"), ("1faa8b855a2c721173814adceb0731427c2d377af2b30426b0af3870a7d4b87e", "275fcd066b53ca7a81ed9d1eb12e82f28bb8e45c1cb1a11a07f9f3195a5a61d1", "2903cefed0b2c1004e4fff434efd15adb0b9732b2b7c9ba72b98b7b6032c5a87", "142b1d99065dc7bae49d935f271661a748aa1e1e507075ca1896c821161bcb9e"), ("193eb4abea5f2ec62c790434aeaac23de75d82002b9113fba3721eb1a1256ce7", "2f97c433fab8550c63e33bb72c23512631687b1f6f470a7fb1c2cfd7a7681f25", "27abb7c3411515bf3575e801d236c819af56f7e7ba3a271a528511a172178d16", "17df4bd535058593d6d9c6e5c5369d587e29d22603ccc739f00f7bc15ab17039"), ("2444f2c294bef122e535b83a10b05da58ba2d74a9dd66f70e6530bb09082e344", "02ca30a462172cd219959f319ccc7c3d18529a8442fd0b048fb4e1ff5787eff2", "084687301878c65c00cc978e6f1b91e881e567f374a13338e00bea6b5e58205b", "0105d1780a651acf69be1b9189abc88f52bd16db6b05732971ff754e4972885b"), ("281ba4996c33d896fe11290211764596c8a0025213ed8ee709efc53ae905ca3d", "07d51a9ad19bb3e0ae4e9b152bb653d9bb52a204b01c1ccbe35415316760a763", "014ce0613975f6514d056a58e442ceadb91029d69bf50014bf80856e9936a237", "26e51c11a64fe4c4188f1a0114276fe4b01b851340a7432b89e9568488c69f69"), ("121a3235fef4e2c53117332c8d2c33b2fa5ff8f37bc77c581e46ce9cca5d1271", "0d106a45a9ddce1c72212cd49726a7e13bc5f60a4710a711cf3603ceeadd4f28", "0e3f8de0a0b59b56c9d6a84066e21c5bb3f653185be6b2b413d577552ca66b82", "2b18936a403dd42150d9779c27495aa3d4145fd0cf43dfbec24837168ed5de3c"), ("2fcb4fa7f2a18ed19e366bad116d189e52266c7d5dd957b897723536a29acad1", "22b735a77dd6496198665948852c47ffd870ca43d7a360f371569dd0a5bc64fd", "29a2a1ba42acd99185f357a3490339e8cc11757a598b79dd8ec299ce7c74b090", "264c61071ba48b0c06e626dc2df0e363240ad17e398fdce333e17325b4d1ad98"), ("1961f1ce74882083939f359bb3e51e6aaebeada03cfc74ad97946c337c4f7fc0", "1d432769c8097a1c8ef930c2ad6ccbba20a86c50f02990db36e5eb83795dbf41", "1612b9f5f792aa036359ece4308427fa0b52569ea9a5241546f9e4374193af41", "009e992d89a70587c479d62fbea1d0c34365e2106eedce042aa2cbfeb7fdf768"), ("2d98b96fb3e3ce0c698d6f7a1c3ccd5d76c442a949a758d97858524736fa4f60", "1f7a0345dfb878e258ab76331d21f70e168f0c904bb61559c7e33fb80091b300", "1295f2758d0c4816446c7f0e12c9df4cb8662fa1854b57a38e342dfcc2869321", "234343edddad62798e464ba8f90acce6ffb4bc897b3b89a4c76b8556d7e149b9"), ("1b613278dce529c06daf6c9d13e94844d5d216e0b5721d10a1de5a58be4558d5", "0db6e8be77ff2b61daffbd8133f82c6c6f641c6e910694f822674e8266c1206f", "0d07136ee922e55a027c9993cee991406412294e512ddf33249a53b78243382c", "21c35a1638e5684b975caf5cbf93ca1fa623fefd12be83f4712b06e186a55a6d"), ("170cae4ba2e052681125ba2bbf32eb26d098543f4d462c16daafa3740922d70a", "2851b343adfeeb29388a740fbc86ebc999a1852b49c88f36d0763ad57d9ac537", "158dd8a35826400708bef5e84ec677abb4541dfe78925c0cd7c7340d678bd73f", "2a0210140fd24481d7f4b554542791da2218ce0c0bd6ec0036737801bd472ebd"), ("28caa979d93f39cfe64a19d676d952986c310c7461e6c11d6d25eec174829f0e", "0c1383fff2d82ef5b544b9f3ec5916d80eb689493c86f9c13069c5a4871b4649", "0de40123b60abe49a3f250e73152ce9998cffa88a8a9572c89c74dc65aa53205", "09f745e1116901f835105168eebdcf875092030a2766ec20703493ef56f25129"), ("2680b6d0043a9ff599f7ef93eb7e2fec4b71ad6646d78721ad7b79277e38c38d", "02f56a7a4d0b45949460a27752f9d9ad16b2ecd043e9cc030e88fb79bb9c9160", "06cb3a21b86a74d54ae34fcd579235c6ea9aa57895daf53a7951e6ae2e02e819", "26e1153b695f9103a6d55b191bfc5c6eeb3bf4f7f5e5149257c32a64e69935c9"), ("1279708dc3838456631bc3fff4f897c7a8474d0425a27fbaa45f1c3c973338ff", "1ddce0ad1e7d0830e9f36f65b5a4708e4dbeb799b84b0919e55b3fb59c3e9214", "07dcd3df111c40b969fc551607e7acd8af280c1a64fc8cdc0341cab5e733d907", "107b8debaf7ced1721ca0f6618b76c556ec6ad380aa53961553973f8e86931c8"), ("021bad858fbfca25d6e81b7dec267fdebb6805dd7e2a24b2d6941ad18d8d8d91", "11a3059c85eed720960943e810a0746c01200c4c94554cf0a3b7cf221215542d", "249469dda9f70d46b90a2ff3487b9ff8a882d0ce582ac376b1fae70ab016921b", "279ede6958563a9a9d5abf20afd109ed59b5c11afca70c7da0a0d3899e9ffae3"), ("2643bb2df4af362269d8de9b7e24e9a08aadda5d5bbf17006d2376395a3babcc", "2f8338b7d5d5f539c5f4f5a431aece12689ec97f236877485a0b6b25e60e8ca3", "2fb0b0b4c22536f4fabd20c9f76936073a7b76befd6629e6eb9cd00c538a9089", "00dd5dcbba925db2b3552da1f5fba5f6d35c2574c3dc58a4587bd411bffe8508"), ("01bfa685323505f3937062a93bc4e9bd14d1de002b191dac8671f65bf3675f1e", "240098419ca59a8079810ea77d18c471ed0f310d01374097991fbf900cb81fef", "1ec1db6174cf92d9a80534f011a51a5d51796f9bedb7aeea4806b1185b939296", "1e952cefb844ed7028d087d58923fdbe31465829756bd8f53420e954546b5a50"), ("062421fa3a0a2a00058f061deb2fd5ba335703e206f042e4fa4d5084e520ede7", "198beb28ca87fd0ac2a6daf5a8fa726eb312757abb6afb3c27ea10f4b3fbccba", "0a1be68102d516362b18924af5fbdd0b8ba48071ccb8952773080409e18632be", "2fc6f00fd133fc870a360aa92078baf1275895c53aa47addd8bf23e2ac4ae1c2"), ("0f52628ae1c08571fa2968160eb54db807490536f914283a3a11142232530019", "23342f58ee6a8bfb66d0ad20c40160e7fe47795323a9d38962a9449b6f3aed3f", "0805429b0d6084cc676bad5d84db2eec5206485ea49dbe6febc5608a0e58ebda", "20f4bc378636879c56ad7a0d2ec8ff33f5466e48fe79ab2367ae3df9f975580e"), ("19d8234dd2fa5d92fd94f87421e5b13de9e30ec8432a64af65ca6bfacd9f918a", "11eab5032d2fcc3242a2154d2f3a47fbffbf99e187493f9ae248589397f0ca0a", "2bc4f5938d0dd2cea280f367b557ef855bfe0f9eac9d6d12837a547fbb255122", "2d1393be54428e56ec6d8dbff43c6fd0c702523482419f7943f09c29c4d0d099"), ("08769e62a0454c5f6c16f237f1874e7ba81b65935ce55b6e7b37bb46e0d4f2bf", "1028a45345583a4db1f7d4aae096d7709f5e61e5d9ae500cd6ea8820c8c905fb", "09829acec1a44aa8940a524124f70aee116e927319559411a16126f09b91d009", "2ff5db3703a30517a86b05ab5e2c86cf6adf23b5e5cfbf3780c8f4f5a60af61a"), ("0a94f1ec5677ea31fa75c54cb5f01c71efeb6382b56b35f7405de2ec94caae60", "11a7b83e44c6a533711cbeb3a0239a6429308e41e6546f161f87b524e9fc7011", "1a61d02c9124a9a55f3a95deb785b069e4a0d8d4fed06bf2d0b9897f52d06bfc", "062c1003a918c004763e8ec8ce0b2fe8d7bef881233e66ed82a39c35043d2246"), ("2618550863ca2733c6178a9f736693c4dfa28697ee100df4ea1ebf049727d1e9", "2d4e2e3faaab401a85b8488923d811ee3feb4473edfb7d65dce10256ef330e9e", "0ae848c03b3af6efe8da662df34d81c01af83a4acb78c5ceab66e89dd5a077bf", "1d17152f4e23737d4224dee98d0b4274d321b6f8fc3cef4e6f9c439f6a48945d"), ("15aaea10391f6bf18cc1950f13239b6bea2312273603dcf6dc1c4c7378a43b00", "08ab5389766165b36259f3f88843d21e25145c6a61836c998a01a584e62a04c1", "0b12943b4c49420a31415ded8ae3f2bfa3bf24aded0cd370f433cf6f7310e111", "06477604214e7d3c214e6151e81b348e0e9bcf00bde6d9b495ef8b64536232e4"), ("16659fed0f2e475aac193cc44625d1ffef5c76c309114c5e90ab3275a412840a", "0e8d54a3507d1ac02c20424c9bef5dcb534d914ac8cbf1a75c836ac49669b4e6", "2771cfe20ba32a513c0f2fa919d6ed343a555ca37f3eee2086e98cd2ccb82f1c", "24dbd6ede19ff02f3d67e6ce1844eb0337b7e1350e1d36a6f0d12165e9135d41"), ("2f00fa2530b6f494f5553221b3b86729fb3241d2961e7a880e6aebc92bdb8d4f", "0a1a413da4afe0d74e123861c12b65110eee2d1babbfad21eba1d5c48795aeaf", "13eec2a7e117539c8140152c1a129d66de8a9b2e159787c43994eeccc080bbc1", "09902f422a7838a92b46127fb8b44bcbf417c545668307dee9069fff694d3ec0"), ("2877048e71533d99bf1e901ec4ab232ac15adc8e18802ed3bd63e73011dcb51d", "2c9be63725d1344c4563797f646833b41e5c80235143bda6049ec826bc913a39", "0eb7259138ba05a62226ab8f660051f3b8ea7b1ca30ae1a0eff27a712bf2331e", "244551b32681822ba7adc46527a16254b7de04a7f397218a13bc84da705c7a96"), ("0e796627b30e3a647470bd70ddd1aab322b7bfa2a3ad6cad825ba64187523f03", "211bb14d9e4bda3d8306d1167fc4d4300d2ba4a80b82ae7c594b3714eb4cbdb2", "20981bc9fa67349557d17904ba160641a69c65675f180a2b87eeb3602666d197", "16046b3e545b54581370bd16cb110a9e78ee94fb1b4cae7bdbd41afda3abdd18"), ("065199f17985bc5df3a9648d0de14b4e0a08f8974523e1913d7d9b161d0ff83c", "2320ccdfb3897cc0a75f4a99ee9f4ae0639cd8f655ac778c3c081999027876e7", "19ee21fbdf69a544cadaf450301041189a03f964084e704bcb621cc1febcfa2e", "2dc2dc6c48c28574a7d55b83cc27e7082e16c6031c304112c39c094e00c3e4b0"), ("2220849ad2c65d71afb047f98783777cb51b612b8339a84f39f51d861332d7f2", "2bf0ee46dc4869e25159a7c12f59ca4a981ffc54ad5da7bb410df880707e6b2c", "158e31cb06e231dbb79e58b57adc14495e09c81e38918c098d2fa8448b11af85", "13eaceb4472fa0c176b1dca0f5a0b87e61db89fe9d538a4afec5e4d83da10e44"), ("1b8d79bdd9ebac25491ffa9cb2b4fa45b474442dd3e842c07ce56c61e63709b2", "2535a937565854467d23d7508300d92ec3b764185fa88319c865af4f7e0b06d4", "289dcdb7ea6f5d852b05d8d167b443c648a898ed41be95c207ccfad92c39dab3", "2eaae4820c23cbbf9798ac47c03a20435949ddaf8204cc3179264e78aedae620"), ("14f181bbe610394bc81443562f72e07051dbe1a9625834f705974b78653260f6", "18c6ae2876c5ef3ae713bbab3796ac83b67345ce6274baa30718a4739d9e3a17", "1294795d12a48035c22ac1cc5eb9b0f1e08ac1b9a0b9088b72cd6a0f99e9e5ca", "23ed7dc98b96256ca342d964ff1961bce0e05dcd25e3acf2242d17911d43419e"), ("1036f87e73050362271c72da2cec8ad55e7cfe498e036178d0e9b303d2ac2ce9", "0541dd4b17de8db4361eb8ea7f3d7ac38cf2da1a4fdc2f6e416c4e8788c83226", "1546403397f23f2118e0bc30b90f321b3532104696a35c7e01811a02cbf37056", "2b03605deb240133412f3db421e623382069e38cfe916c12b076d7825655106d"), ("2e940b4e0c5798b2b2a06271ad2d3e1bdfad5328e0d62e29e3cac51e9e4e02b3", "29b0479bb0856c2c8a34535a26f6f5170d7ffb5be1e86fdac0f8ab6aff40cf10", "15e3d0f37f09c296898ed73cc6784b1100efc3d733011aa7a37e90cae26fbc47", "231dad78f25ac7b57ff9154e30df0bb18ddda3a7b610cf542aed2919b683bbd2"), ("2b3f11d8eee80911b48119820d552dafa38d34b9b8963772b24aa61741fe72dc", "2d9022b4c58500b9d69800ad9b5978987e1b6b8d54890168bb5f0c6187da1477", "274c4799c5777df07fc50d705bf12b282ceab423161e754f1a12c872f3df4ef4", "123220c9ec3c72f7412561d29a5238f7c16ca1abb87b0e8de247ca4a5b362c38"), ("1dc4097fc1bd0d86146da1627377b66cc8182b4fe95391dab26208ca000b832e", "10dda7ba457acaba4553bb77472761dc2ef2c2be7aa13357be958e4a7238786a", "303af302005761b0d10dd5647f865c4b57193694ad4ee1ec9b6ee0da21f8fdfb", "2473209ca802eb582c88cc3188bd7178ba5b81fec5b4b761ec46b666bd07137b"), ("1dea3d45039a9f3f32a55e82dea65065dd5fd7c7b1f21b9b4f1c1b318149b676", "00ea0794a49105490cf0c07419f74055e2edf50cc6209665a64fad5e0a2a4ed1", "027f27e916958687c8cdb9135c4ad256a2c58842b355790791b5c22353875f14", "1faa23634aa0c2489433b39a7d51da6ac9a91d68d5cd776a3e9aa9de650915c2"), ("25e5c30af1c43d55ac552213535121a2457e51d8c0f97afacdf024a753cdc01b", "2b722b7dc8527f55db5c67451cada12ac6b2ed5df12bfaa573c127b514874cb2", "255c3f64eb8a1237d1d1fdaeb1842bef6d27b349aa4315400525ae1eb87f9b07", "0adea40c70008b660ed4eb75e310302b888a67efc2e367242e9e8f081617674d"), ("0eb399abefcf80e524169fa98852f24c247954ba3def85cbbf5c9950f2d15755", "1dea3d2e098ad992eac02b179e81e0f3c17cf850a1e473625acb49c3d028b9dd", "18f35480f3a8d360fcedd44c3b19c73cc0a09c8126b985e2e27aae3731adc196", "1a872dfb2da9010e89e239733e4d8660c9ad6df8d1e1f25a9a53f6bba1619cb6"), ("23c3977253ea20972a19c10efdb7b91d20c715579cfb5dbf2ea7ead87411653c", "20a72f46e3d4d460fc461c8f80a9bb2eff54a919d07f87bc1aa01d8fca791d9b", "208c1e8aee7cc66545a9c828c9fdead23f634a51c8a57d5f7e27c1044f096b0f", "17d62b0878ed833e2edeadde9a7f3f0c7064f0229ea4d28accbde805d2afa669"), ("203518eb8d4f4596ef7eadf5a9bc2719a41c30e03b2a8a5e2c6831b533f010e7", "0ad33888052fc9d29f91fc9687025d204465c6b35d520dfc244ce80207774e9e", "16a257b370dd319dfc0cbb90c9a512e66e17482825dfe800c87d9cf3a3e734dd", "16730569271510e71d8591a8c942f3e04b1c2c3951fd2767dd0d8dadd37432b9"), ("09bf3523c7012bd4f50397870d7a5a17d5661c75d1d20de4aa127506603acecb", "01874b0d8eb43ba3e689e07c23c05e61a7b659974a02e5161111906c6ba1608b", "0f6a77e7d4a8a487c512ff7a316a0093b36e7a327aeae5c09c9a342bd112dd22", "18d923a447b02af913e0672ad5dc93d71061843c164bd3d6fa4c77d141e9e6df"), ("187d2aaa6c18fe92635543d8840d626f3662ab0adf997b3ccbbef2ef3a50e9a5", "1307c689c27fe55764b2e22ec09cc87bd31a31dd4d6fe8959474ca52b0618832", "11dd3c90327689f732555053848ebe550079aca33acb9620cfc124040211601c", "1b698495dd3f2530e927a8ab37c3b4710bfc321cb52856133e0046aa4f2038ec"), ("28cb838a6718bbb988456635d22ad0c0d078fabe40eabf0985587318089e51b4", "1fdad00cd6c10891001978b3bcb10477f0184bb3cbdbfb7c00c86d0bea6f9ddd", "26913f97ba4ffada82ec38027dd3d150b8c91382b1a65cbeb8a95a9f5fcea62e", "1c4a37dc22a52f18d3ea7b3f6ebc7f975b397ee915fa0a02b31974972bdf182d"), ("1ef575734f86f7f7f7158e5ef9a135ac33f07679425079ce1234a651a456728a", "0bda74611146c8ebe690d49d7171e8c96367ca1097c1b935a4c63f3b38c5c697", "209e17f95f0f1b4936da4cc13f00c11a1bfb09e461ea65742661133cf263f3a3", "1253eace8b9524b795270256ed7859ae5409ad36cc0fb7426dd95d912655e7c5"), ("2801b7cc6c01dbdc088d20bb5c963c60704c43076082b7bd77608b36e7233a90", "25855143f81a91278d5d892052af87b8708448bfcf2ec27e5177bdb89bc64b45", "1ccb835f82307ff869c247df00d8264cb5782dbcb9f23f03aa219338f40b0b9c", "19f690beb3d6b1e6b4356540d183e03e4319e16d4810d564b88937aa94f7c187"), ("0b4656cefe7e113767f1615f3e9ed05c4032f73a3df61d7eea3dba89e2698ce6", "1f221faef792b40569ec351d43de4a439345df94683937f9a7ed310794fe3b78", "23aabae41516bf5f966921081cc0dd7e8d5a547e1681523755fb52dba4318aff", "085252d88160966bd5e47213486561b4134decb3aacf153c2a854a9c31a3e91f"), ("15013d905f44699ec4e5b8c2bdf5d600156c76d4c381bbee809a0d3517116407", "168403458cbb46e84da5206cbca3eabd53f08ca6e8f3444092a9e46936104950", "165cc1307d2b91900adb03073eb7aef395e5752d443ca0a418c024df51cf2fee", "2407c5eb76ba5cc360c730e9633208efe74ba5bef2721419fd956af74e4e35d4"), ("2c9ae4bb679b98b4a746f367811344e16e010a40fc63ca3e6f4ba1465a77ccdf", "058fd25910fedcf9533d7838a2b47507d0b8d3d75563cd0946760097082fb20d", "1fdbf87b45efc8c3c42e30b4a51448a78b2dbf57edf9bc15941fcc633a46d683", "0e995846d0b09cc7ff8472b5c8a0e8182ded4f34bcaba9f656a96ca260d6970b"), ("2d3c76e210ce7d5443f6126b2f6ed9bd7def85bffa7390a2e8b8a40c7a163e7b", "075505b698d6065eea9aab8523bb90c13b3c041c8bcbc9d425d88612c41b5cd3", "09fbb3ca2c980929dc89621ce31761965cd40df91b533ae17a3e2e34b8a9dba3", "1af07e363252fb91321a0f85bd1e9061db397b2c545a154410a63c46e0704108"), ("263c7b0cc571427c4e517912653e3c9bb249b89d8e3fff87d885952b3a69afab", "27ec7a9ff53742f8774bcec24d96f2bc7e42fc9ec14a860be3b6a1963399ee08", "1a6559b84bfc8ad88d263fa69d81c5c748f84691b7262464252946de0f1e5586", "19d54ff985cfaf0f9057764372ea5fc4bb243f9d36f6f0a1c2260da19ea39cfe"), ("1a7580f0f03531817ad0a03948abb40133f6188cde7ef0293e16db3dabf1c55f", "23400d1c320401e1f2d9bd9e7b656145799f9fa71be0bc93afa79063589ca4b4", "1a7e6991f6acb47e17dc8f812db0a1be050a6a06d448370f18583b261751d4e3", "0fc45b06fed7d57b4479654603c1e30bada3b2fd59a1e3e7b3817594f882259f"), ("2acfc766a43bd5be07e03cca77d46215d7aec6d87f35dd0db7f2a16e2709ff3d", "0b9a453bad5e0b9f34cd0eda550863d95cd01139d1c41cd68db52029d1149864", "2643a56f944bc20ef6e5e85b315d32edcdd429c3db5095eb8d5e476af149a360", "1f8503b85620d34a6578f522f1b631dc36d5beb3a09ce60a4e2f646c92d18a06"), ("00540864bfed8d62f37737290bfbcd36a4dcd5c9b4b68c7e26d8074c764a3e9a", "0605538a3a4cd406af5ea614863a353a0636f9b8e9c05cdbb3725e65894b79f8", "2007eb6a30f9eea9ba87362ef5c5705bee6573fa8bdd9609f2525cd8675fa47a", "052ddbc2013eaa02d2b54cd7f1c24c32d2e636bfeec6e22dda29b90f01ea5ab5"), ("027efff26d6c9eb1c8760821bf75198f6029c6b42d9e88337938c37699049d98", "14f31700fbd6e970a5c7a321a4078c03388d6a05a2c357d7e2db32dcbbbdf316", "1fe549d27b4b2b64f1e95226e05edab9e41b0801006ec195b94c4c569fb4f352", "078de6386241032e0c6aae5278d7c7e46ff0952734c6cf4ca43b9223981cc18d"), ("0c83f9ed96d1ae8537d4d43fd36ab0242bfecfb37ed973bb38dad12dedacf778", "2ef5eb6b1a5a551db146cfdf51b7ee186b300cba0d6eb783f60b30c4b8906208", "1fd515dd2e165e2729a4b4e313c81bc90756dd33b70b354039f3335526e8504b", "19ec7879abcb4f79ddaff0adeea253ae40c9cc81a5a1a0277aeaee73ee6e139d"), ("0a2b8e88d9a17724fddd545193382541e8f30bbe1c069154fe5836256d5d7f11", "16e5a680c47e22b471d076d0a9e5935166428ef71c16e21127a31f7e0a26760c", "10257608d872a6df5ca0e767b9236281719ebe7ac0c1c542099bd8ae71b67c73", "1adfffa5636f22007e15499b03a96148ce66c74ceadb7edd8dc484b8278113f4"), ("27f1a38f51800547be1580dfd76922d7a22480e95bc7343d9c613f20c40f2a10", "128785104c84a0234b281ba6b42512ff0c4dbec83504663a663b6998afc2f65a", "0716d1eb87f420769acf4e971e4fbdbb729dc615cf4ba84e78c0e46cbf993263", "1fd2150f0a549215af9f9c31cdd9331e9be8da4153bd5ab419b4fd5b2e2ca974"), ("024e11231d62f6391d1c5ec56ccaa3acc373dbdefdc7116f3985edd3b84b90f2", "1e75d2d373b0a864a1ee45a848f8292daec022b13285354c46087e42120b7b3a", "0ddbdfc182a278f1f8e321da258d9938df3d04e0b394ff4724f9ecb863114937", "2e12d7ec21eb97f7874821a216a4f81557c92b142846f7f46cc6a66e1b56c4a1"), ("1a4e26805888d4af2419c59b9c0f41220f5ce341559e9b43e94c6fa2924c3464", "175ac80ce30428c4338f9afb5e0888e9596694bf1c58fc1daf8453cbb080d4fa", "02f694e4913567c305f94e904dc84e31549b17e9fee281b7f5a8fd57df9a0991", "24ebd77ef3c1cfe4c5875b86e2b21ade20338a431bd19c3a87b8b04f8b9beadf"), ("21efc9b43108c57d0b6f4fecde5384b4443eca88a5af5fa729dd16c63ed0f9ad", "09fd23417aa0406a3910fead793191341bac2474bc554e815cea7700c8bda228", "1b3457f3859bc2ac69931249ee93a0211af9121f69d2366e39d0484ec26ab640", "0908c7ca13b9803d414e0df8f99a8f28d5b857849802115dab53df05512ffdd3"), ("26bdb8b2e53586799567485c83c7d5e3d3d2f7279b200d29045f4e26e70721a5", "283970cbf7d7cd397da18f371f0622399cc791d8ebd7aa1d9bc6e1ff30e6e6d6", "1bde2278c9b3b48f7cdfae758f23fd6af93c3ddd207ae6cfd8bb7cebd78e500c", "2c66a647b3878a77e3162ca2ec0bbcf6bcabdd5e75d833e93eb38e431cb87bfa"), ("2b06c4a55550ae8df5d9fa48c68dfad4d39fdaaf6bb851a4d2c0039e08b4a591", "278e00b7abdaf00f52cdc3d856f10b8ae6326f51454da391ea2d0510300e64aa", "14ddb406a2d4eb24149ace39c61d3a0c559a52808239d827bfc3b217b3513169", "21e4ff14e169ed9ac8040e4e0d954df0629b7731b438283628757aa0bb4b6c05"), ("1b08e903016b394f7b728237b01c66938a51a6e102095f0129355b4e7bfff196", "29b79820bbde096eb0c1662423ed0e8ce4426b626a65484f99f15f9c9a15a1d4", "2ae8c770d074a9bafa4d5b31813bc39289ed8441c8b567c43709fad25e5f6b11", "0d9733fe3001188ecb114149e339381d02ad51af2cad9af72c35d2f0895634f6"), ("08830714b7db1b7f95338ae92e6441266038b776301aac326070ffc98abd596b", "111fb71dfb391707dbeae2f68b9479f0a16f181376f81a519c5869b8699fc643", "0cea78a3f8532375a6918a489cd6f6fcad195f39b15e00c11c9f20c250c9edaa", "0bbc4499ab06d96fb6af5496936b212ce43b3163014795fa4837aa0bda0bebdd"), ("0ebf425f8794eb361cd9b8faa3d9a9bca07ae5917f7cbb02137d3f2ea1653efc", "16f38e247078da09c82a0e9fcaeaa2a6eeabf21b5d33dfb0f087ff02fa91664d", "26ba73c822745d12d031fdd17e9f783907e263b9018ab5cf11bf77e5607eef12", "099fac5622578fef5d99191d86d4333cd87982f79311fdf159a2bb0d0045f87d"), ("13e00822969e208269d282558c5fec162c8d37977ae9943b5d6c4e14a7cb2042", "19e6e6209c2b5185f0c3cf2b4c8208b495292ed23fbd8f6ae8c6a7b51f63ceb6", "1d6ee5bca207effc3a7effbb3bead03ee9ba92fdc8ccd2c4d240ef9a60bf984a", "2297de9ab2ceb244e8c26869b2a5403be6c73f00ae2a9984d13b3d4ea7ca4d12"), ("1eb1ed5a20aa302a80e1a09fe93e5c11d5dd4fcc605bb77e6c4d4e846811ed73", "2832bc11142f99cfdbef7f3c50524796ee25d3182983c69656c28987beba94f4", "200b45e8337b6bd5bbd71fed9143f6e34f48146dde1c68bff9d7e5f8ff078049", "2a7ea7bb60f01aed5f22f753aafacda3f27aca31c7c42a928ae654ab208ca7f2"), ("069f10e8f295303529358a8bfa153b5b955a53a27790ba4898dbfb297e1780ef", "047ca80fda996c775d0978b9ee7b5c1e291c20092a57004990826f53555f2fd3", "055bd8ca681867799b6f3de5d644cf8d896bce57c7fa1ed5c1b8c3c94eb6d568", "20d98415a16b0b3587deeac5dfec3b266ab3652b5c255cca58ef03727b284f24"), ("1e22a7fcb543feb755be64f663899c3b7648597cc553c9f833ce6168db32a355", "0347ed48df67eb505d5e8d5a0b68a7a2e72eb30d22f2e94af7fc5e0c4046854b", "2b1767a119ad66a082ebfde21ed14999788221405b5882e00a21db63e99dd10a", "211e7c7750775f13af6debac9fb74e3b06ddda77bc6e450bf1429bcd880ebe38"), ("149d7ff818ba90d7b09ddd6af4bd21a5cbf467d2e7010a7b605ee4f5e8159f13", "1326ba4e4799c15889b238af96fd7005682ab303e5a8d246dbb6090a81705fa1", "03c6451c588cdd08b01b86db8689da5bd6bbd79f9ce259c8cdb0cb36531d1ed7", "214b9e5a8508bef9db0854aaefd401297a596afc24b533466472f579a4216161"), ("0596acf0236e92986982b6bae39d9c0d677f15f11a4b6750f4a9a8afc716ae5d", "03d2bd254b8bd891f1d49097671829fd548f03f76edd6a80c271d3c6769972aa", "1a27f277419fef7d894058c28b1feb0a7a50f47c0721ea13600e4046b8e8cbc9", "27f43ef4aca1eda5f6219ef7e528ed967b3751fea976ee7c77134782e5967138"), ("163acd6cb69114cd57f029f3d3a62d89a7a0997b92747e0ac0fec48169f24204", "2c5d15a0c79cfc3e1085661e3daf89e85cd59f3039f6b75f84a6ea9f0de289dc", "23328b6489a2d5f3f31f4d2b4926eb0765780c28ed8d4b39d8557d200c551ede", "0496e85e1aad3b7b2d4050bad0c26da3b5b8ecaffa4bd9fe5df87a0c5b842b98"), ("1a27d838b78adc8b8873c21784875ebdd2cce23f70f8acf5a2ffa5a9708883f2", "185a76279eec86f1be52e8104c8d255bdee7c0a6d3e4acd974beaf4a2be54053", "1e508fea0c5ba112b5d2e04991e78a986979b9a668c714581e4d031117b2c035", "0b6c072dba2e10b3e72c7985390197632c23cf7d73f6f1240e9d23fe069656d7"), ("3018c555ccfbd200320ac01663916fd3f809230635d8409d625535f8289cccf0", "1707a0a8e87bfccbd47643a0d996627ca82cd354025c122380d9f06ac897b397", "0c056495580539bde791e16e5ea378b8f16a9a58e7bf217edb35fcd64ad0277c", "2c22a804746092f692955161d1ee7a942b66995fb626f0715eb57b1da39a1fe7"), ("252c620a06e3d7b2df8a9a8f871ee556e112db61ba47cd1ffd9ce06906b718c3", "0ff64356c5da60405c066d10cd4a4649a5a65290a2e4717797c5fbdb7ddd936f", "2fd6002a25efd4969feb3612691e0233611aa53009b2cfce4af88830e9682109", "2fa6c428eb5a8359403d61eb63078c38fd37fc29d4097dc63122f4936391c576"), ("12b123334779086cd646a86b6179f9eacf836a2bd0d99703859add92c21030e0", "0a615505f668f80b469221503eae4b1ae8fedded58c167134b6a5d53df631a8e", "17219e8bc5c25c8f97d3d46bc4b161f52d50c5ce3a7096beff1de1caf49db70a", "02fea457b15b7665309b45b860915306036c06e1108edf2a2305aaafd27bb0d3"), ("065272e6e2391df4612ff0e4d5b857dc091052a531c25d837149b378baf12312", "28ddbb9058ce152eee4fc9a16b865fe72eb51317dc782caff9644dae382c86c3", "19034a652de363700cd217c6b160bac693af032cc3909003820c55af5114076a", "1c82159e4e1f9a780327dca28b4a1a4b2826c87e8902eef4786e669a91a850dd"), ("27688cbe13d7fb88d10a9b73275ad843507e1a88c38e9db6c48de52c618f0750", "1c9d3d0822d813385b61f007b5d8120719b711d2b2150fc055070022737adc66", "03c0e653ffaf75d406c3e919294b2e4986f033ac045e5eae79cc0fdfcb47eab3", "0341bbd95af94e4ea95ff57ba1b05283c43dfffdd2c569aa1622ead913a022a5"), ("1f61aff111e2a5941776e58418e7feb77d398341686594db6e15a47f97b4c353", "02c98e566509918694292f31f2841d8a43019fd294064568eb4a2a7654968527", "196e9fe2307fa5675eec064bee38194f591d9688587a5ec4f9ad9fe7cc6464f9", "088c1202ee577d91f11278e86cb62fa06370826882a4f099926e96eba95ae7e3"), ("24cea0a8218771f51c09f2e87c7309345ca929deb8a5564e8085121e1ade98ac", "1433946b02573bbee1c6ceca6ff38bb98a5ea8acf159332173f78536b686d298", "0f321ef359f2ed7057441cd47aad172bf7ccd7e8987d950ebc9233caeb8cb474", "105943ee5b99e00763b0fad22efaf4ede4d27aecb5310747268d50f973ca104e"), ("1f78ca0504a77fe5e5c35910e7011f3dc47149a0969ab74042b08480f4347b86", "12d012d7deb405f810b3785900239ddea85ad06a57c9d24bbf881cadae32c489", "01fff6679b37e6eb4e17ebdad9bbf36ada46605baa287cd3d09842dc4023557e", "228a185a0563317a8f680add9540d1a9425b9c801409479dc4915c307ea58e30"), ("2a8b27fdc0dff4d4fcb0a440e747f9d5682ce764868ecfa6898cf7621b8987f9", "057a277bc517d6d124434fbf7018d2d18f4faf0b1d5d05610e384341b3880f45", "02b8b20c45c726c4d7002a3e89f1e52084ff4e7a66e5ccce7feaebd84cd7fcc6", "130cf0f2329ff723416b6ccb05b4a3a422e36674c04398dcfe15e778b2c999c0"), ("0a507dc72afe33a4ab8d21595e2f693ec113015d27ccaba2a552993597ab588a", "2272a6d88861000c309b192af5ca9e541ff39041f10076162a316cf6d719f16b", "19c21f4fbe9af52c1b378eb12e006069cf1a1bc1494b8b34abfb223a6595a7c4", "2d4059bf5d86c19b0fb8e30eab2312309acc470fe7061079c7bb7b040c8a3c6b"), ("12a95caa3f748503602f1250f95c5891698409f2015deef26d01241a9b9eb4e5", "118959929ef327c5571e503423a36e53513e3c62a7dc356499343547a87d7fc8", "1a312d0c7fa367e26feed5c5ec70888dca57928ffa6bd1078fbf9b2ae7ceabc3", "0cf44997eb2e619ab5ab834d65346cf4d86ca762fd320d94e1c160977cf835d8"), ("12f95d9030bce823131ca3530279a9616ed92e9993658178118dfe0b5f137735", "0dec7b9409f81a4467a2b33f570ce61f7fc03fe73b519c4bbb97434323199a39", "110fd82a27c430434b11fa7d92a00cdf9915467f84b4684dda9f89964409f388", "246a537cef742255b362ec8dae963f08f731273269dd6ed051efde3c1a5c6272"), ("2ea573ebcd423d24c3333f9b49abc744a506a43a0aef068a660929427213377b", "12d8c5a495571a82265a507f24974e4c70031cd91657fe03ccea4bbfb135d0d4", "2cfd2d2d828c7b198b152898d5b1c1400a86b3c7b96285443c366ca03c41cccb", "138ab231d366be19f7076a1566a4077edfa6a50bb653e0f333874a977fd1b8f9"), ("1c2df2405c5c4e4a27973ffda0a058df2a98f66eaf0793fb20d11713086554ab", "04c7cfb9bce6df4de1337dfa8894265667320914dfdfb0abfa1deee4514a50cf", "077979d61973a2ff67daae9322c843291ed341280c4b9f7bd20afadeff4959b5", "1019786db2f3993ad52d1e8edafc61ac2cb1e32ac03d11f7069b27e80eb24f28"), ("0c9c27deef6f21c6d784c067eb27ed1a8d39306ead0c0674f2ba691c0ab9c40c", "15bf6ed2a3143ec0644601af841b05555f638bb17ccc5d82add472178bcc59ff", "067b4372d685c97288ba89c7aeec78bbe7c12b2a6df905d6d5c65a7f91abeb02", "164645d0292582ee6285f4e94d189d673b39ae04f8bbe0cf73d5dcbbe9d38be3"), ("2bd8847f48adeb3e5dcd60462aa06d33713fb03ec329775438c6118448f23780", "2d497fb3f4f7dd7511a687f1c9961ac7530e44033a12e72c4bd9146bbd9043ee", "05c858905fb3224b1b2f307e03d32424bee6ea020af1f2d4b8b7022fb58588b3", "034e774b2ce3c79ca16ea25ae3edaa5dfec4df52a85d2b9c420f1afd8af14a47"), ("045cb36428b5179e1039bfd1b56ccf76b6099d2c494531b6c6d1f43c4930ee41", "2480bbc5b1b6c34f531b2332d2b7d3a18d385e25729c817b0302d0804425bde5", "11042089b171db7df54cb7ed19e689d5ce4e58be1f0923d0ea026899602dfad2", "0de30f486c3de108e1db3576b257cd2aafca2e2fa41c043f44b983b497add463"), ("01100aa943adf7e4cf620b33478c3f78390141eaf63c43a4d5c620777631289f", "07d9ccf939c9fe517b394fc33127a694b76e452a950c482643445869ee525618", "2939d9ac326f0752792f0b24d15438fa9f315ed58522e56428b77cf5364875df", "13827b2a53c642cd47bc83c43050302622a35c027afa3cac70d1ea50d47fb37c"), ("20db6e3bd8519d24f65388261b1c477b37649adc6f3463fa3e7fd4fdde85d8de", "303826fe2c4f3361279acac68914845ab263ea650db5a649c9c3c8a1cbe5a43a", "225f0b216fd5382f81d81943987948b12ce0fb488ed792843af674bfb63d92d5", "10a4e05e83cffe04567e63dab4d821b7cfd19d38cc733a37008be068ca1e768b"), ("15cec4f17021a8bb3f9f225aff8c5e753486aba0123255d917d32a24b8223df4", "12db7f1ce8556c766a3edbe2b5c84f5248d31de95f9bd555e0eff66fc1dfc21f", "01cbeb98252f60472f79fc3c167aadc8baa5338e96d1b66e862630eaa3bc6397", "30061f0ef77c242642cd96662a3d46b2a63f34e9eddc613577efbd09cee6d509"), ("1dafc6ee1d0ab474c2278a79635abc7832cc1ccd92e6e06c6b4005597903faad", "05e3f43ac9c368b76a4dd48aa9734665390e34d146a97bfd5a7ef6e3878ada6b", "112036f9c6b8b3273a202f04a00b4020681b3af21cd9995b33aa4791b28ce136", "1d8833cf289461f50044bb5c5e584770205c6256f23242a8d2d5d8625f9e52d0"), ("0172b73ac4314d8fe0653f8a3d8b688de4ef4e403734dfd4e918332e16ca35c3", "0d0fd0723fbda2fe8d15c0eec5e4711b70ef5d28bbd6ccdfc4b389ba43f3d60c", "1585ebf9317c09981b3f8699be2e16c3375652561708266a759246ad08228bc6", "2ed902df344c05e3102ccaa9f5fd433ae2faf26f17dd413e0baef3116378dc6f"), ("0cbbf56ff9e3a3788b6957379b11f2f9113a04d4fcc6b66a1b4366eb77aa5efe", "05667cff9eb01533a94e986fb87eea4c000491a883a1d6f57d3d1266c934a0ac", "01b09d7059e3c94b43b6b9c3bb821026088cc11c1102d65458f162e0d71be675", "22d2a54cdee207480578f117b3120703f5dbca0e6d1e8c77adfc1df829f94967"), ("001f3c16ff798896e22d9c07d42ee4eb7afe439b0c8eea184e12f79c0950b0a9", "10e4c16660ecc991cd9558ab32a70bfa5a90b24a3d26697966692fbd0e4c7f68", "0e2af332c9a6e8e469a89d34fc73af0d43c36e76b991922f34c197bbacd41adf", "1e2026d268cd6d4de956cfad192f6918f2c983d19ae72f4d9ef2e89257b86103"), ("1a4c857a5af052017e30090dd5224e3f4c0e913fa15928d7d55fe04da762b581", "0347f37d22fbb6f546459c075326d4ebcd71508250958516044f830a276d22dd", "1718b48b8ef99de185e4400d906383ee2726d0c3a0fddebb0023219946a7cef0", "1d7691d3857e298a2a3108d1f0a6a204b0c9caf2474e1abe96772793cc02aefb"), ("2a55726c82a4c37a363aff2fd24940c9a7ec26aa1e7a3402f8e7af46b1bf6d54", "2fdda5a058aac1e3b5f800f7569a793185b4c6ee1bddb721de38273ccf21d544", "15a56d1e46362a8197048e71a7ec08bdc0d699659302d0b198ddf3f0bda1c2b5", "2d19423833d32f179b6b933782801798e08e59623a489bd1bf6b5ce7815ec4c4"), ("28f1b0f34c3d83845531f210bd34f3f6cd9379ad3d59758fa11a6c99b2722889", "1f2a2e5eeef4bb8b5f0b2aaa7fe226ea5e5e3d4d8781d94dcc89c420360d58d1", "121a2e0e334dc0e5ef6ec7bbfef26550e46e9737531de53dd76b1285c0c0041b", "2f20e415bb0d1d29bc944dcb3fc63ff5d4465bd4a964e50990c892e04b26d370"), ("2f7bd8f0f0fda72dab85f0cfe374d6464e70bda6736bafabab92b87b9ac4ce40", "2aef8044c36a4cadcade149a4a63eb094a51a94363381e4363d859b78c0516da", "03763be17ee5b8e97055a2e0a8bc9ff4c108d4431cadecb7735b26006149cf25", "0e595863ab139795c5925ab5f157d433267fa68180bb47172d8b947c386988c0"), ("1e7895901ec53e13fa41a4e47c7c293f1429a0c11d74444e05fce3ffa74b7133", "080c7dd467c45af3200bf2957a9eb19f621a59ee460f23ae59bfd1311e039fab", "18152c15aefc189a6d0844bd6762fc194609518d0d30353144651234b06285d4", "0ea5cc33bae82ae0f0f3919d142c6dc05a852ecf3f077fb2d7ad915b338cbe18"), ("05c4c863ae5f4d52200b1ee4c986e82863e7e883360d20db8502a2a774758000", "1e50955adb6fa050902c3d17a780f8947af603077bca01f4c0b9e81d07b0976e", "28177752688ca3303c9b0fc9d33cdfbf374a8db4fdebf37789c1ccdd579ca121", "0144d1313b0f01e8c571a51f3424844d7a94ff222bfad9df9157cf7932f90fbd"), ("205220ac4db56644aacd4486de5b0bf905e05eeb29a99ffddceee5d562f60eb4", "09881484a26b51c3652e84b182bcb325ebb04c392f33c02f2108daa57adc4687", "1f1693d85b427413fd32f59a3663dbfd31791523b5c0ed5952471991ec1cfd14", "1c912270e32360d3a3aea7dd5f2251d43ab5dc9ca2590b8c5af2ef8716075a21"), ("17e7315adebe4f1a544e0901a8e5c05ed2101585793335a96d8b8f223e2fe334", "2339bdb55758a049510d064b8b2b0cd695361271550368a78e20f6f9eeba1516", "22aaa6cb72916759797f490bcc79e0e8eaf0fc6c4837f72625d1ec5dbeb3a3c4", "0896bef2bf7b9ade8be4a1f79d831e8af88019f467c964558c702b9272bca263"), ("2805f6d5cbd0bc88a8cc9abe6f5221c8b15e1db9ab95d1a0505ba4ecd2a3901e", "2b33c9ec533512940c1c742fc7f5120637dae660c3531ee7950d17ed55c64033", "2f22ac91e3513434fa13215aad17154a1953bd758b61f23c36e7c47b0613247c", "0ffcf34fb1a5f6118d17593aea1f1fd63e8cde9c3b265a940867610bcfe4c230"), ("10fccbc7958fa2ac6b8aba35c028dfe44fa15d1ed8f79112b86ff3a76a6e8136", "20c9ce06f51108d595f4141ceea555d12736d3549835b9883a081792a4e4fe06", "1bb2f2bb17a435d5a44035887ab132bdafc5cfd142409755a414c6e3a7213f88", "12b3bcf6c6c0c24734c73e31543b56930e7200018d35b93b177946f655f8e14d"), ("067acb8c9d6035595c0a2457713131f6b4142c2d99a2de0fcc7c31ccba355a16", "009f495d1a15903c352a2745112e7fb8b0506dc5e17e1d61df2a893c4d979685", "0713d5efb0b049090cb127fa29dd80a2301fce85b586fdc0f01c53bffd822bda", "1d875e648e3e703e3c0189359945efb02c75a386279876731b56d38718e9728b"), ("2a72eb2f68529b46d5a17025a66979fc133ef37bc8f10d724aed218774c652d4", "22b7ff592ba1c3acb75595a8c1130c947fd5474d429881ea120b99dbde23494a", "159715606e2736798563c7e6664e209615c48cfdc79d3b60f23d8bf45ca09966", "0827cf71743dd20fdd6022f26e9c9092f935b83d96a4180a0652131396e0f5e3"), ("0a0cd2280a48251487921f5394da8a400d8a3c26b24cdf7cf0efd585995dae11", "0bfa834160c0e8b668a8107689344e1dab7d2c6112086f65318819bac172d3f7", "02144b2c4fc31f76164b7d035517a4156e4a514b1f0c6edc61148df57fb8087a", "0e99b8c9a9caffa2372b5f8b751831c7fa2ded94c3bd470df83e7b6746e555ba"), ("288384cb698bb3c4327e3e0bc6d8adf6f2e121280431e6c9d4972d01216326f0", "25cad2a8ceeb1387a9ab3df57512f9510710a8e38ddb511f8f1ac5074d3dee61", "23367fc00fc8315237628f44cd614c080f570a55a62964a745c59f96af881f6b", "217f887db8b1f8e446037b1bf0393a652287accf51c5253b5be16375a4528f28"), ("0545fd7b5f839938a1675d4a3a9c9300ca4c4b43f53db936f9703e02643dcdd0", "28255d99619b00b9828b70e945d83d3d69872aea1594f65af94eef14bd95128a", "081f11aa1bbaeb184a82d9effd31d923358099619cf423bc80da92f5373ad1f9", "13d4a75c9c7056e381324aca0be7ef3bd79066e5ce8f0a9e5db7f44b9ac27547"), ("097e0f2a8f264c595b3122dc1492b172c4be9c012035468a9e70ea6e2941fe0e", "288c9aeb1791242e0b9417ef6b29c2a5fc5f6ed63e166e7f364d94540d1aae6d", "03d0acc3fedfa2640cb9aad34e7cd039bbb0914655f8895aa91c941815992fcf", "209e1282ece7fa66c307a796491c69b971a4dd033585db57365c33b348e98f2c"), ("2d3f04a9f493fe6ec8e99eafb0a00bd4d490ba0a7a460821b7bf3fc6d85e9adb", "17c3e25ca210eb1bcc86a2050cfc72eb7f4acf013ada9ebbf2c8d7bb44635256", "0e141a1cc324f52eb6850564f3787ed9acf93ae57fb423b5b608321b8cad987f", "1715c1432c61260858e33ef263941bc52757d3b76bcc56fa8900e286739fb43b"), ("28aabc4c1a7a856e8f580eaf2ecd8eb4a77c6e5cfbe11ff3b6960ad657d9082d", "06b03a1391c3481ecee5ac273f52266058a4a0c3ba20e17169c7547fdf71a78a", "02c0d5e64e297cdf85a92e44f901492692939d69b2fd12f1fe338f28395a28aa", "2df7705bc31c0e78f67b9f7c6885f878702a458ecb1c4c649001a40bad490608"), ("1e42e5145bf8e7a53bc96cd4a10f3bb594d7eb6bf37a52e0fe430cd98e8a4e72", "234fd5df1fe8f1dbff9e620235d487b79d0a602b059df01b2b84402dd53442d6", "2b057ce939dddf7dc0ee3a4913cf63e2482425c05bee31d4fe8648f3138767fb", "06159d9acc1ca77bcbd9f27b4209cf387fa37ca458b66d944054bed8e50e2dd3"), ("250d26d101e408889ba22edbbfbca6c27ce4e47f4bc5578e79f470daf247d4ed", "1e4c81db80a919b4fca77de28d143cc75ab2f34ea3e0a225bad275c6f992ecbc", "0ddc8c02b1ab737ea80e834bdd96888f79544d3cab390f73db05c4a95e4fc485", "16ae5ff14519949fb3ba06e97ecacc8eca6857153b035fca9b41b1ca453eb53a"), ("2c94b1105c5621633a5e4b27620f7971fd69a38fbfc93c4608b4dd28da8d0e60", "039f2894e2de2608a2ce316392e8a8b0d692407eab2b937dd8823c59984e339d", "12eb6f2d8db03104963ea78db7d0e8c418822e7d3f9c36bce7bb1479b696dbfd", "25f367b837361c64ce5f6fcd769be5355084f08f9bdb88fa8f4e7958e50d895b"), ("26d1adac5ac538a8279648c5874611038aa1cad4f6b783e42c96438ded2fb190", "098e2a85be54eaa6a5eadf0ae97581e606174a4997ae61dcb0a0f9bd4a4b97c5", "1b0c6a8721697ae1bf341b5cca3c65a24f73e22f757c82596dbf2b9351c59c9b", "305abdbdf4788bc1035bd3180806a007de7ca647806921c2e9dedc42feaecbaa"), ("117f4bf0c7f7434728d4d0df00b29cbba8f25ab7d7d6e04810e2f438c595c13e", "198c05734b18b63a0060d48804ca31ca91d064a2dfc22483109d10450c787823", "1c198885472cf83e93adfdc5b0105f28cb467e9a6ad532c6889dbecc048f0dc5", "0797e48b5befe6982647103b5415fc7137216ccae732b97b84727b86e4560c5e"), ("304ffde5c9d6f7725fd45fa8ce668421434b66c1446dd0dbac0481e14ba94a90", "074eef3592280b78f2bc60650d111f4ec15aff7a39d5eed5d859062a9b582ef1", "04bc4167b8ee2a9f0b0a75a8ea107c442b6022acb0ffa8d06c31113dc7db146b", "1902bb70157a6ab355a24187c2dc66f282d51510e5dc28818f1f5f52ae0e96e1"), ("0e3ee78039075753555ab70e65cd79b842f68ab260c7d26357f26cb0f2952a45", "24da4300b00aecaefdc3698bb26650bfafde5fc28e110179ab2c0c9204eebd5d", "1004536d5b54914b418d4606e0ff571910a01fda231648d3f7fc7a0d1ff8ad19", "0de3e096fb0269befb986d9c8ef9074bb6d3d342e1acb08d6885489f9ef0be16"), ("183f36a25d8bf7cf31ad5b8a181f4cd68afb4fcbf547946485278051ddc8aec9", "2b50fdd0e8f6096757fd5284e678753d562a81694ba961cddc22454d864c0483", "1d12a6fd2419b1463e3d13fcad72f3710e0b641c2b64969ea91428df58af38bb", "1cfc542a1de9f368ad191e7b223c434c3b870639504ae0a823f3835d900bc97d"), ("0f7ec28d671f45853666ebef18610bef4441bff13c0e6629c0c5a933341515b6", "27c89ad2c3523a092045d4ae2d92aa0bda7f991f0b2d7307fb30d2fcdc6fd645", "0b20d8bac70b8639693ed0c6aab2bcd89c492c12bb56a7b9fb20107c0378e3f2", "0798d4e7d620edd8090592ef70d9e131c82a82f865852a689e3c0d7f61df92c6"), ("13321f60e5f486468bfd5819de857dfed1942bf0bd54b0ea941e888f3078e0e6", "04addc91a0ba1059782f7bdf56ebf9bcb5f671671c31224e5953dfd13881fa0b", "2fc4def8992e1d1eda938e11a8131ca3c3867725af26fb3717559cee9664787b", "261b8b0b7a2aa00f758914abaa94256542ce368c711e3d35138fa8b57497c5fa"), ("1a3aa0610cf6ebda824ac0fb816af295d19ddc2b83f9dc6544b31a0f0565ab9e", "08317452eadcc07ed40319aac98eb4d9063474f813cf37178a4d12d2f36e3615", "273c06379e69dd00aaa8d67d69498f1437e69cd24d8e7b0993edbfdea5e50fd2", "028018b89dd3ce0d3e02dbc68b260e3806f031c4d62f7bdef24b5857ee03815b"), ("1acef6a71a60880b7bf66b0cc7fe8721a20178251ea8456d033d1d70f5f43854", "27a86ba3e6086c91a816074a6f83b575097ca9bc9282ff1a2ce1fdacfcb8b7c0", "0469758b58a79685c7f0430a5388ab618b8c8c2697592e7b4f91a8a6f47a7496", "1ba314446e84cdf76edf9b3bdec0d7951d7d34c13be242039d0040be9f1ddbd9"), ("224484c93c28d5c2879f8c6300e453e8fb33a1d07cfac22ece59f83f82ed65f7", "2ad62381a34cf72be9d66da92a37c2e0c0b01a5d1ed50769f859182aabd293db", "16e79ba81f0e84b91f4a83df339cf28874c8ad6f85501f1d5c049df565127a18", "11be83514927b245bef7632fe8fd638a94f3baa5d9f30f6809d55fcd9652a9ce"), ("033cbce107e619122866d1f15e62967e533266dd1ee8b1603c218a0af3a278fd", "25487bd9a51571bf7b7798d71bae6e317b3bbbb89aac7f687ac8a0eac7776148", "2b3a47e09018d5cd91e61f42e7c6e37c90efc6dfe3aacaf465572a9aaea3b558", "13d5d06ec635ea31d996bf1b95b1d7a852167ddedcf6bed8842f9c231b27ebf4"), ("0bc78b415802781b7dce42743917cfea81b9b75fdd142b08e671c44288c17566", "2c1dac87d2a89cfd8ed487bfbc82d7e32a42523e4db48242d77cd1631d87a67a", "1b212c1f0680b40a718925ac0ba2f302813e77bd766823ec5703becd15f6929b", "24afb85e62f7c1598541a54c0638464d7180039c12b4434ac79560b8e08304ab"), ("01b0afbf46d8a49310e664d624fb44fed5a47d69a69b45d9b23ce75ca8fca359", "2c62dadc1f7019257db9dd6d5c2361fd5d3f20c36ed1b31f3785eb6d5e897528", "0020b9a97aa02c75947b4f05ce0be4042b173cfea1ced53d122f5e62e8dd481e", "11a7a92738ee29d8b98d57150db13d231d0030af6c50b27ac74ba972d4203080"), ("1bdaf5eb41db5cc74c6b9bdfb290d2b7f52d1f42cde0d1ec1865f6f72e3f2c0e", "1a81c6651b845520e9843ac2021c507997eee1939b7fe283a8c67acd7155454d", "0dcb1f6461021bb772e45e3e8d03dc930604d485bd96a1f1047ff69c982a1102", "1a095c5eb139f13dd86f89cf2ce6d2f2f4422abe2a226a77952c5c2f9cbc4de6"), ("13f18ff3f59a5ff9d7db33142da76b590aaa270fc16308a6fe686bbac640adf5", "0a5a3835280ee3293855f5c0e7d9e006acef74680c27ac000dd38a2194e69031", "081fa5a239b6d0277b805b7058ce6e4babd1a87599db6f00f67003219d7bb363", "0e495f2d9dfb9ff1cc720f0944fdd2a4c925632b9ec1bec7443d587a1ea52abf"), ("057c8403b896f65cdbb83e0479813e0aaadcc8a7208ab791e14879ab0b8f70dd", "15e8ba68df02df9d362a904f6ebfe7f18b0667b7f3d33a2a10092e06f6b09cd2", "0013d55c7b201ab2fbbd7de9287faa1edd58f5d2f034245c871ffe736d1c23cb", "0c9361d4d1799d3995ff68801d0b49755936bf87f7edeb19f016e9b8cad7055b"), ("30300afba45da3ebf5e0f1f238664100eae458fc4207ebba5c3c6d682d3cc2a8", "21ee32f0c5598133d3d47a2a34e9243b65ccbcf811435ff59cf6d1213bee0371", "2b1861f961da42245df3e87b824c18c670666842d6dc69d379f81422a136a17e", "1e242f51257131e5735b6e1020fa00bfa8c6e847da23363727f5f6d5df121d50"), ("2942147850585d16d21f393ef81f9100e1fca3efc751b41452e5e6a45cd326ee", "0734966b629aea231a99048f7234058d62ab42ce4d800af163d3111d074b26aa", "03de7092224ebf6e4d6e09d0ca5f893a87125f421e7c885976e78d2858979105", "13e6529fbfb428658a4880ee6b493784dfd10835f374b53eb6f8bf361c9bc624"), ("16944e03eb4c3686d53dfbc3e17dc79070d638a6c5fc641b3bed6b78844600ae", "0321913ba3ee6705cd144c63e6099c7d2783793942b980a49134b11a9cf02db9", "2bc69c3b84c3a411245d517bfbdb2023c3a6af80684fd046c78866ab9081d17d", "027be0fc63b6fd4e5ba4f7d9cce758ccff8577346ab1db223758d2c5ec63dc83"), ("093d6b2261461a6104ccda55367107a0da0699f04916391051b753490d46aea5", "1e4ab7ffc38fa7abd15f0ce4ae321b3e634bfdf58cc73e780ca50b801d41ff71", "091ee2ae1bde198438291983b6f672a1eaa270c7e6e857100896bb45bff5fbc8", "209dc23d7933ffb1acff5ae4f16b4d8f06388c544ec6ab40e6d402c3c7c59220"), ("09e0d6815fdd10f424e903952bbc119e968e554c67ec697de19e65253aaa32ea", "257740c38959b9a773898b737a709d05e1b7763feca973a583944670e7067629", "0fe63d3361f6f3fe612544c01aabb309205991904c26fc9df317b3c24d38d95e", "0a36123a01450cd54f96df219f5aa3a6e194b02eec164f584a01fcec5043c2a9"), ("12e96ecf5c15f23f4d6991b70e0fde361ca22426596dadde27c2855195dd6fcf", "04545e4e9a20e05e045305f1edeaa3ac6f863f754234c3a85bbde6739102fef6", "270db18ae86f3f238d6723b67da86a8274ed7ca15141dabfeb27dff6e9140224", "17a0a63e7a4827ec6c4245c3f8a1a56b4e32171c10149b06a699c983953a18b9"), ("05c86fc9e6f6ee5dc8cc50d11c3bfcaa08f1ea1767af6258f894b9ea2ebdc71c", "159d192fe2462089a2364213dd0e55f608f83ecc2dafd00242573a586d6a5868", "13880f6184a0be757f97a3fea294ab01e790ef017ca85766dc3d15275d133054", "05f45ad1ac93898b2dc05a6cb0922f2f0aa65f411db81340684438d8d1bff0f8"), ("11fa717bf788cc47c19bc2f2d0eae81d9ee5710df0fa0ba445e9b67e041d04b4", "1691c129bba68424bfe70eb4ac38ab833dd99c249044e1ba78fbfa52d93104e1", "1191b441b926ddccb0c0be12613ec9f2b07c953a8fd853626b238e4318f1cfa1", "22cc7d15c3c43f852555cabc0963216e0f72db4a7e8400a720199345007f8af5"), ("0404ec6fa2983eba266065c579d0e9909192f24359e701ac165cd0c32a91323a", "24d270826454796e4958ca366fbab3ff8b86e4e0003a16ab2720caa94b022f88", "2dc3635fabbf0c6dd763f0b0cd35693a00004db907501a38ca95142e20c5d7d9", "0aa62334e845060718c8566aff71de670eba99c92f144955b3bb5026ec1bbe06"), ("1a2d1f2b5175e16f8e8e33a3e7120e05451473f4ebcdf5dc134dec5586be37aa", "0c567750f73724663f2c1c3610e67c7d65bb91fd1c8281960dc3aa2ea93a70c1", "180ba3e2d1a525d3a8391c7fff2b034c534bc69eb49fa06076f947b7d50d2425", "2d38db863d136267c1e664a7701df2fe5f12fb86480f04c353c8dc71710daa19"), ("1397de95fe34ab2de61ad137074cdb4dcf2be249b6bbfdde142978275ca52bc4", "0635d0872ed0551da586c07b707607bcfcf6472c92740a919a7ce8e027f812d6", "04f4298802d0fbeb9c0e6a6283d8b31e872ab9287ec39aff94bcaf94c57a7acf", "275421e192f80a025d2daedf1e0731ad4030b3f31d6dd4fcf48de2dc7796b146"), ("2cc22818cea37fa483366d09903485b7710a33014910ef16f8dad068c5fe5217", "0e5c72ed4975166c3801fec4f037b1b1c65051b47a26b2fc1c0f7360b1bf22df", "09a0573147f4208dfc6de779bf35bc216d6d008423e15354c736e118d8e01f00", "0b7af2ec653447dedbb980d6bf2892d7e866d2a90bf93dc16fa8d4b12891e387"), ("048384ceeebf76f8bed465b7d8425cb4683dc0f91e8da1fbf3485781796c24f6", "0065d83792749da0dcb3189f044a869a8077dddc61b5f793e49fc4d4756a64c5", "08cfd5ba60a272888426f11317136e18d89029946bd76ee7a8bd21b45211c9a0", "2fa3c78f3f8a4fc84d0d1cda2c80d92886848a6cc876cab5c55bd8740d0d7c24"), ("04e737bf68e9f9639adae12c60d1a7f6e68306cfbc6d4ee8e9b35c08bfe81f9f", "1b57a0e9f828b2c5d376ee3bceb4a53842e9fa891f6b28d879b3ef727cf6565a", "1121218e7a16cfbe9756da116d47d5da11672bda405d2c529729f9e8a9421ada", "06c547416b135be08048c4b2c94279fbd86d96d93b9f43554caff02d24409f26"), ("0778a0681f67c68212bedf21eb2a0e4bf0b294d0c2a6ff2f364e55dc8cb1141c", "22f091d4f28412391105d48c299ae55a34ea63d17a38c046e977e7b930b87740", "0c7065be8c5f866eed385af636cffb0cc4ef09c80332b5b4a83be412cc45c0dd", "2490f33606a0f3d36ba12116737d737d3f4f1a1a2681170f86c469a26a390fd8"), ("1db16dce0b920485a482459ceeffe14ccba0d468d2435ee54e0f12a23fc0177e", "040adc8b5a8ac9b6d489daa538c2022105d30010f57961385ca96639feccaa1f", "20ec9a24d1e0abb51ce79c59e559fa89f4183fdb876b828065ea064afdecf473", "19bfd5b713266aa3e886ed3d088aa32d07ed08dc80734f954456693d22644ca5"), ("269b8e1396c56d9cc8b06cd13af6531c872b78fc3dcf690d11686be5b4222fdc", "27d73c9eb7eb3fd3c14562cd2de8ee8eec9f163daf482258bc2076f08ab575d5", "1f1266c4d62231cee9aaf6990960e0c607d439847c54d3ca6d775d51a573ca82", "1cad9bcb8b49e0f575f4d0284ac2036d7069490d75a6c1b463b2efcd4f79007a"), ("0335d5abcc61a9a0bb335c0b05242a343353b4991b7cd658af863ad79de6c9c4", "13cc9ab9a8103e94837cf69616a78144456fee2e9a6794c0cdbbcba16dd0aa02", "0eedc053ccd4672e529787e28f4de474dd7a53825a07f1e2cd6266199a00229e", "23d80c1197af30f94ea73e0455ecafe778b1b05d04993ec9a1c2b9c2cca51738"), ("123204d3fb275ff55c92c58da4071b538ef548235189c896b5779e040f151c1d", "0d2d110fc15913e4e7e5dc606d6e0d3ca29414622a8302f727bd6532aa93f2e4", "12e57ed4ceecfe1c623c54d00f7512084d4cd22dcd3803f7441562267eb84c72", "1db02e859f30ff483ed522e9ad2d44f3838cd6efe12f3ca49af2ca52ac7e24da"), ("014e59914182d91c42affab460ab98fcee41569a1362b8755e7cada8c149947e", "13db3101695d3f7102628d3cab0fad5050c5ca82569027fe3fa67c1d2c8b1449", "2a71490d5cbe41ccae30c1f253df7838409eef8fdca53803b259adb4fd9946ff", "23faf15588803dd2ba87c0631aa0595c0ff564e9121642eef2d4056094422386"), ("214d76e599c8f5c395b215c7b74b60429d404964ee5d8fb39216cf7d1306f6d4", "0194ba0f760047bd6d3e1fea49322effbde3806c681ca954a82f597cc4545621", "14f0f782f48c13c2b0de76a9102e3142e9fe8a850701e4f9ff773ac22d468a11", "263eb6f1634c7e2c1b19e784c6807254b7a4241f2dd665708ae6fd8f16396e8f"), ("1e105a823b2271b9a6e9161c606dcf0f3101da0101ac33649cd993d60ccd9376", "0743c582dc6d935735b05f1cb0a31663b12c1da5889876d426f77e944273c105", "0d526e347da67b06b001674e9a416953397297cb8144cb893c08b132169f9146", "021c1427f7786eff91a5c02a2ed223cc6480d5414e91efd4d88c5a9a124e53e9"), ("2bc59395a5217fbfcf12c5c221c3f7b2105452b71a01cea71e03e1a0b4cb7393", "236e26b854113d70dd4d3aecb4793c52269cdce8340a0f93a878f1bf7c4fd973", "0b3dd6db3d77494f637e7e2a17546b8f2feae4e53ea8a7e64bebd4b485c08daa", "0ac4ab568db0de01fe4b6b51f55b9ad42d3abd480bb353bf190ee75579a7a8e7"), ("1581e21c40f7ef45cb30290e763634b747d28cbb38b0b8275a357d5b95562af6", "1a683df51a6e34210cbbf91d68e6e8f31354f59b9b3e48428ee8f06fd8d91a87", "2c299a2ec15a93910eaa0a1cb50171ef14721ad46a6a9eaee7ad1c12a316a66e", "1181b6f0d8f8efeb19a90d54acbaf316d0192a609ef9cedbbb692a5baa525202"), ("0a0a2f56e8c85143013609856cc250b24d9c9f351e380706f48a4c2d1535431f", "112675f27e489139c80e4c25f41302684e93fb6dab1d65586141051515dcd615", "2d005743295212f6bd1c9a5baf773246f035bc37ec5a020516649263f04377ec", "21e0a0b0a4fa3e73138066fe17c54d28210aee17768537c8adf3d20fd6ce7153"), ("0c3f0a16f3419e4155c45bb6f51e4f6193643a7a3994cd840b272177aebc39bf", "0046a0e5c5b60891f260051675216d147b608a066aefed02d1ab8e32ea604a65", "04689cb300ea6bab90e83768c28d91c9142349c65394e74f8340ff7eac5a6e59", "0ea8c8ae0b9996040cb8fe8c2578efd0b27305708d82f69929158429ec5d0659"), ("27ed5113be5b2204aa3914362c4a737f9384d8c6b26188268f1669525c48497d", "17e27760f6c757a9350ea6b2ccef818e6da585ca6534c1d063bc7a76370e26ae", "1f25ab05e513d02ff6c658513ab3a96ea06978f847b67d45cd2b94a16b95c21a", "166f1f3fa2f9a62aaf7f9b6b300da4cdf5e5be0902cc8c6852ff12040ce68300"), ("29832071e3abd449f3e430505f80afff8aa33b7e1fa69b233b96af8c10996948", "0a0f98b68d9baf3c461ba85550fd27490e1b63b7e8b5ad86f4cdb2a58f50d5d0", "1603356ad335ae2ed8879ede87079b92273ebba8921234750022ab7f167c3a55", "00e68b1b12954098af170a621ca8165abd19eb0403cfc9415589df1972eefac5"), ("2954ce35ef27a175e99e9d455fec22b981e23426349513fae24c18cc47ae6ec3", "1d4920f86e93d776aa6fae5ca5ec9295a31bae77d2a46d0a0f05b8a0503fb953", "212ef3f3ac813f09912dda9a9b50031a6f5d57bd0ecfd08a348636ed87b60634", "2d24ad8876c9e02d9c6f0c6d05eee1eac42f0aec56f94eed16dd66cb347a1665"), ("0f0bb261c5abd862903c7713ce15691afc9739b903e4660ffec34b887a741719", "073ec708040673baea668da2892181f3912431b5588cfc5cef49ede2405e9ca3", "12364c19ee734ec3201d8bbc58a32412187aff468834e9546c6830299be28608", "143df3d7de4e2072d6109f05ca46bf1eab8333891d8258817873810041205bba"), ("1da5787fd994f403e834102e378eb9016e6f10b44d1b739262fd5d9acdfcef7e", "05b2b793f881fe14e529ad260d55bb76c5c1066fc0028db0c8ea26e3078db9ae", "2f12ee7118e8d0619f9eb8d4cc3d29f29c99ef28e4c7f4a111c24c2c23b5aaec", "058e599fcca628d8ad9907cdae7cc575a3b5c9051c5e73f3606a9bcf8e3f3d04"), ("284eb070ad5754e82f64063c451763355e3324f355aeae21aa5d4314ca3c6662", "1ebf5b78112587956bd6fa4796cd9808047512fe69e76a73beb2885b98366dd6", "142b2a403d2ae4865b37ed50a7509be2e18e8d51a2394e96f48eec75fff43f23", "004fbefe3e66d1f67e00f4bf39c6e415fbccc8954b0922df0737a2e6147e909e"), ("08a2d88742218edee78ab54b093f26c7ee5c42509b1f23a9d69f428805bb6cd2", "0559523a247ca4cb50f9eab41fd3e6668c476d79cb5e92b4de58eb2f957d0ad6", "2d59c8a669e4c93c048f3449dc2e571baecc7fbc065ec9b31b0cacddbdb0e805", "1bdc7dc75c36bdc11fd0fca4bafa0c29a367a42be04de629624f628cfaeb801f"), ("0d0d4908e1280b9655d0fb0144544bb81b9a4ed38cc7c8b8217e11efed6d503b", "21a7e7f11170338672e7aac53fc9276a4144ddb5e9a688c27a2dd98a4cf0c95c", "123c0078659b59436d7305742b3b02867c4ce177468c90b4eb7bb2361ce59500", "1acbe45889a4810dcfe3279db9b3490dfa6ff4dc5741654259eea64f270bc189"), ("200ba315d898f7a8c98c1f828146e58296c39edfdb4d01ccb365334fc3372bbc", "29eeae07b57b44f84e5515f9801aaa2e5ba162a9b96ed86602b56f1d52f90519", "18cba8a365d54fc37caf69354e78a7579a342009084250ea457d2429b0be9457", "2f0101de0dab0355707ee86b8893f53dc380b7172acd6a1d20fd739ff9d9998c"), ("14f4d449c4e22eaafee01bcb4424cc7aaed616e48dabbeb2979fbf81592c9853", "1b5de506361c4a658ba2619cb3887d032d072211af96c65876ff94c853bc5190", "2ab7c42b60fc5242ad2f4a17183eca063afdc46d0b5264f5c05e2821f3affa1f", "23c159f2f697d2f87f244f51ef4f1fd5b4bc273e9cff81d97ce6f011f186afe3"), ("1fe12641b3e97831ecf2e74072a2b6f48f9bfaaeb3ac14afa4740e3a911477d2", "1c2b377436470a5c5e796e0be40ae294455df098c2589633a3ee318de06fd020", "214af8b4164b141ec2185a5be14288f999a2baddfba0d11fa5a7908a2bcdf119", "09e3ccc79ec42f282d732c64bc1009873114365ec64954d97c898bb2a93ed7b0"), ("2f76a8e3aadb94e6391b3025541aacfa2b0666e0c49eae64cbd85bdb655e1144", "1fdc1fe5a22127366e8442a90fed0dfe8c61ec9ab91a4fe91d41e93c8678fa0a", "2f2dd48ed1bd2ab1b9f36e40fd005c3ed25691c273b08e176939a0633dace80f", "16118d435382bd341370c26b170f47778c841cfc1ab5cf62cc4f691f693592c8"), ("151624c65e567fd364d02eccea7f345fbf54f2e637e0fba88760a62f0ea19cbb", "302606ce8f012a80aadd27106ffc6612938938c134323ce8a0a47f7758b09045", "2aeff094ac73a727f1272945e8b5386e84c48abd603e47ee9f428abe3473db3a", "1e188305dc6dd1f351acf17f0280cc68247a895dbe0b309b8f1b6cabecaae7fb"), ("2e3c96da2e5c5ecd312f22550d4ba60df4b78a8d794856e66d0c966f33c72101", "00be5b383d3b2bcf9e7bab59c4a90b7d566fd744ffc62a6ee69d3d743f6de2bf", "147b12afd192493ec574f0916ccbd9cdd86d4da75637a80a4fd09cd320197376", "0612c0cf3baf63a1a69236fbee6ce3089d95b57b60a11a3533985b362a5f3769"), ("038d88d8b99f7407e77fc3e552ba8ceebfb34376ab9c97510438124c77cddd1b", "304c28a9cae3b426e1e46f362300a7a34e5c1c061b0a04596f331e24966dbc51", "01724f72e7c600f875b0b68a927acf7e4c6ed3a35e4268707087c316b4f5b04a", "2d2236a739c5624fcaf525ef14c0310fdf217efb794fb7f31d36089dd3196935"), ("1021c0fb2a99d927b00db92300fba413f4c09d20069137b2bbacbf1c7ab254a1", "1200008687874b43d3080b247ce634304c33078315a300d83fdc5c9e8cfebaf2", "0d013228f93b6baf0cb64e08b455d2b0983792e74ee631b4a3aeb425a5ac45d3", "09253785d46598bfbe3f7c3581b30cc3b7430ee0ac76fd55b4f9c5fd388b92b6"), ("11d6e782fee281e85ec02f97a29509075d526e99828c949ef5ccea33f0e0384e", "0ba1b30a9c9f4026c1f55a13a69e3e279a0dbcac3186da4fb19c927cc08a5f8a", "29be0e10a8e07cfc997ffe0f89d7e8e1a05eaff365d8ecfc600f72f09a435632", "05e238684e7f2f7767e8aa4d5c7880fa8b615a08609e8fa57d5b62434e95186a"), ("05f0a6df22c009a9878fe5d09f124e3636495e80e24269d8a3f1ddf44b4ed46b", "2fdd152c2554067b4d1a49de7b496e3d989aab9e4b942217838ec1577d88dbd0", "0c68171778f1291d41de1f525334a4b5cde27640c316152e4f59be80dccfbbf7", "2947d3fe653f909782443d504c500f8f14da0c489af978ca0377eb5a45eade5a"), ("1d95d9bfdc71308751d12ddd2fe7709a7d335fbdcf784709d2c621c1f7620f80", "025a6f876c68e7c1d2211897c5ea19cc86153fb4743ca75ca7238b3e04f05fc0", "1d1fe0c67deaeeb7af160299d235a4e6d5545d0015b843a320e22017c85555b0", "2edc09f950487117114ab1af95129c16e79733d517e257525dcbced8f3110b97"), ("1d800411b954ed9fbd60a33100fea96a938da9c0aaf3b8742b675eac07468aa6", "09a65342b282852951d86c2786a7f97ba6ec025d388430eea67d89d6434af995", "157462c21b2d1e142fc1ce96d01d56bd335868761c233a955a154ece4f5fe582", "096b83f7c3f38cf9833135354221203b83b570b420926aa6c3adfa5f5f028997"), ("217ef4ba4fba162c636613f664ff285cc281e09f331c940ae5b7e7419c650661", "27502fae9f3941e1afc53fa644cd825bf74408ed5b301b95a247dd75a22416a2", "094fdf9b81cacfdfcc946bc8276cf447d26b6c1da8bf615df1f8185e010983c0", "2ad2093ed97996af014d5c36a89b1a831ace9941767fdb0afa0491f0711051b6"), ("0cbe76fb3c60748f4e57892401d306d883863949e7be65d3f021bd72facea310", "0f1414e6ec8a3b9f554bd52122a613ab193d5da7594fdd9b9c5183c91c92b958", "1d8dbd62b70331593141b1f3470f51e31c7af6ae52481cafdeeb318f28d05148", "0ad6ae7749fbde782557155f00b9ce8ded79458ca424084611ed5fe4e13296f6"), ("1494184e83b7f61b68eb13e347e7fdf774386158acdf4b913e1963d2c11269f6", "26e15662abcc014878fe7e208aef27850fe483d0ddf1fc2400140a0c699d111e", "0b1834e6b211caa67d4eb875f9a636face793caff8a91e1f4845e79f286aabaf", "258b67e1175f2613b274c5a407d0c0c5eb29b75fcd5a62a30c28f821d926f17f"), ("129b89ae1314c630806dd6a09ca92046591914c3a85be73e9342b0f962f2f258", "1fefbd905a5f95aa453502cb5a170747e39d52f60deadaadfe92b9051b0ad5ec", "2f58ef82c316a2b523923b2a54a52a6de5e4482b9e7a5ce7d38765fcbc9fb5b5", "1cbcbb9da0396a1c1adbfcbbb8efc09216ef96869d0c102709704ce9bedca4d8"), ("0d20dba8ac1d46695dc2180d5d26b43d1c5b2b07335963b8b958168bd79733f0", "21b0e5eca5ff6cd4a64b74ba918e0d4c7d087b49fdb8d9fa30021f52e86a07d9", "03c330af09778ec1d92daae1647df9368857bdffd2fa7a88889609d9f46c0547", "068ccf8da429d519574d7acb20b8d190d4b0a63b14b067c1671f12e099912c1f"), ("0f21d1f46fdf2cab4d19e7d60cfe7bbb1e40f32848ebf6b2aac9be6c61d1e3b9", "1389804daec23cc6055311d4a935c40d4a95876024a696e369b42b5f4ebf75ba", "12ea05aef756dcf46625993ee247519025816d76276d4f69cbcc753edc836f11", "2a57896beeaf908895e3800f6a3670ade8d844b43080f81dd9f450d1f7f3f9fd"), ("156ebdfe898e91998d9b882081a07d6919784d33e55859223f8a200e071c3823", "04fc4a552fab29ee0e6624adf0892ffa46e7b1d45385efa0e73db40c4cb196d0", "07bb8543099af7074cb33b253edb4b6e38f13d01d84651347a4559cf53318ae4", "031ac2f2b8763d1576f86466d274d4e09b23e20a0e9a888614f68095758fc492"), ("141b9738faeccfcab03ec87a377a72830004b82e4a3f0a5c76b7cc1d3282a4ab", "0091588548202096bdbddfb00cd451edeb4334109a3c3e9cce0930db3b186430", "0a58739a3e53f35eac7616ede6b564e37dce9e253ec25395cb6370c071c14290", "2fedf0206c33312e502bbebe07f595d2a4af3d4df2b04c4ad58fec1922b751f4"), ("1aed93e81fcfc28840c8d1e0c6add861b1237c6068feeb0145b7e0e1089f5e3d", "17e81b33b8cdea4d59369a428ba5db4add28c97721e6559814c99e0f0f6e987c", "03ba24050b5b932969a8b20694fdfa75f84fe427690e42653c5d46d71a4281fc", "1efc4772759e6f228e4468b89b8372c7f225cc54a83f2716f8c130b6e370fd8c"), ("2a8d9619f7fb0f8ac67da983cd52f24ba4eba398e2cfc8cdd0027e6c9c45f798", "165e960f36c9e35fa2f4f02ceec3279145d9fc69ddaa131f4885e1ec66298d8e", "12c39897cd011982692e0c69e81c00696be464be7f2a100a26b4b6c5f6d79f26", "0f22e60231bca682320944196ee4ab3a120d2e6f2dff5ace1badcc23b3174ae3"), ("13d51efd1e7b40c62b1184679151ff4bcd4e15ab913c90df07da520b3627077f", "137fb61151f3da62eaea4c253c7969aee4b34898997e9f5106348763a9c39f26", "18d14df3046bc44eaac1eb6d736ec8d19ae5b0aaec475ba29410766892276996", "28ec8c6f954bc6dfbbb918eff899dae5133846d7a3c2d0cfe26affa68191063a"), ("06ae30a2ae49ce86860ee0b7b4dc6b5bd396718f9bae7a569cd4c597834537d9", "2f870ebb59ede9e45c90b23a61a99098a3b78292fbadd0d1a6c9efe44a8504d6", "2966e3a3c18b2411579e47e90f61858d43e87c336e2e65c2814dd3856a0d189e", "2d332ef4b78f0643eab61be30a8e44ee6c99527b1b9205de3401bac9a16d76f9"), ("25008f4b30d61e934ea3f9fe683cacfcd21ad7620288cf4f5247ad01df3de6e2", "23711dfed6bc30dd620a088a4aa7f633053a818de5d29f0e0e99f7012502fb6c", "04ed8ee9fa8f40c56a9500051177367b233fc6ca0d611b1a8b023b31572a4406", "2c30be47d9f06267a1ee1b6f8afb9ff43c97dd09f8115b01b24708805812d1b4"), ("0b0ea86e644b9c576cd0669b81d90e6acdf52d768332cba246df434fcecb487f", "2562f2a524bd1595d9b6a0697eeb93ef39dd4abb31538c83ec408d0e7d833f5f", "23874db495085e758eabb38ed4584ba65cad482b1d69ddcf5ba980a42491a9c1", "02874606320adff0d427d09058fe3ea5807739d62df50ea55c905aaf9cdb7823"), ("2c90df09d87579856049578b08329fe66c5e7168125e0a089db75520cc6a2b36", "21e184d34356c3a066f5bca9001f4ca78d9f33db04aff5c6710f27ca767eb420", "2871377198afaa121eb587d0fb091ca5dfca1ef8a790b696b484d681f1c0fa7f", "2d008629fd1ff290f84dad071ac3a79bb921e7258e7785998c1b41d82b503ed3"), ("03543cb3794d6a5c46cf62188beb3447e5459707bc126d1f6f0fa98bde9186fe", "1501eab4596449b5cee9b4225c32ba6536486d19f98a41a581bbd32eeb834fae", "2556d5bea8204f644075b26b8fa411c0c85adbcdc0719d97111a27066deff1be", "023fc180b4b21b8b99beab2bf714d194242029ad60f50f256f9c4dee8e864df3"), ("05a946c6af76eb0d5780017497ade521997783bb05a9a1af90a4c42587c7c607", "04fe677a5f68a1f6e99d49065d256bd3b8e5e5f26f933c85358fdef9e5ad373b", "1960eb3a7fd68732cb158d74e5a4645fe4f25723b34a56564cd24b47d04c4d2f", "1e080d85ea9a674f1ddea46df322a0af3a9d0e9f36a663c2261e782e4ab6c5df"), ("2bed98e2652dc771d3f8dc84f76910648f71464a6b2fbb936f07e15faba77bc2", "177142bab1293eafb184fd996f92173e5a1a1406f54bfb93007d9a5e048a19c1", "1168ebeb22f9e6e05cc978919427c70ef984232b6216a303f8871923d346f606", "079f31e8bec02f38e4e301e42cc99430dcf10f7773445eb60ed275a9256d8552"), ("2dfa2e46bc39e40094a04f9c3f2c949e0a2f5759ca219b9e9cb16300fff568a4", "0cedc6648a1c0d32a7dd3f233f053d3e989a2a2c72b0acb97bd8af255f94555d", "27283bad9bdcb88f9f7b13aa52e3a27c8be06e101fc6bf7221ea049b495ea4dd", "2d36ca05c38abf4f63da0b2d8bfe8b938520380ac1c660def8919d2cbc405b36"), ("276ef85ae8e4009f3777351b520a3674fea728a00b52688f6c8922fd2a8b1065", "159db6962a6a34adbbc244c0d2b476038d56dc9dbfdd20fa9162442f836abd6b", "2681c05ceed79432a2365f9c3e9959a8ecc3999552ee74624b6b08a4813ff9b9", "1b4c6492ac5507b080b6e8202f5ce32be7d04882b6802cc74d1d6fb4ab210737"), ("1d7db497943d4b7341a0bcbb027c1ce89a1e195d5b47a203263f61a27e0349f4", "1ad93b372bb38d6f7d114836fb5278e59d62523289b4d579f7e3c67d2fba3b28", "2fdf59f445f91f64e7c5a820c17cfcb2d782659a7ca9525d93b3f3cb73aec017", "001bb79ab32d2fed6db1c051a7b15f99dcb930a8c872909f6f576d9f55ab6cb5"), ("0dfd82d24eaba0d0240b9716e1929e38c4ea929a79a2fe6ae86fe3978d37d111", "029a532a570dbc732e4b529ba891a0f1ae8cc80e8ae8225e97fbc7f3a8db0f90", "09e7d8cb00e62aad7ac23f46eea4d97998d98cac72848387654784f707a2c06d", "1b27a705d4f07dc3b856dafbc48e55142a4905a3ce3275cfce6052dbb662768b"), ("288aa969591031363cda2cd019c6522d3a763a07e26063034b9229c6d841970d", "2193c12b94ec4710edd9d44a06cbc2e8a46e5964056e170f81be8d2c3a32e701", "102255f89c054ab9e0e6287db001b70167aadbe01b0fe32b765c3983392b7f31", "265ac8706e820707375653e3d894e320811d2c868d1ee4fc79a34641cf15181b"), ("27e781f5128944b1bced26978e7310bd7fb00e085225cdead420223cd10be6f2", "11a0108011006cbe14701fd44baa3660780dd884380dbe977c1a9c142cdc8b49", "15de292ab74255259b0af674e7d0d8f2753af1f6cdcc49d9621205fe8b083145", "28a923e564a312d1e36e05d32ae191f2268f6c3e40ae172be2a2490c776ced4e"), ("17ed23fb8aa678c6843ea651219275d057b4122c356b6c5ef33bcc1558e09eaa", "00160f1c9349b096e5c011805e47b639aa76bd9579cda47b629a4eec83429e17", "2b7a1dade674f706118eeefdfb3176ee8daa65f7eb84f3b52557457ef28b8271", "01e8796b66d7d003e69294bb4045aea646d730451d242888f604da7ed3206486"), ("1768a21063f96683e5b81659693d06020ee709ff8c66a9371fcd2d3285867370", "028ef089279a13fb9b4e1c62bbc827162e70fb617364a089bd552379c501e446", "0d3a7b3ddc997bf1cda936522980446c60279972967f2421bc498a6a7ae283e1", "0d343352780df657580d0977da049b72836f657fe68dc1f40ddb66ca7daca37e"), ("06e721ff977672219de71b36ac3656d3b7a22ceda1530a6e497e4e7d9f6eea18", "280a09f76bab849806b24ae22625b88cd5b1c3c77d25ce0cf38a3077288c9733", "14ec89a73524de42e4e9f808d545a4312505391e52865756755a5f3ea9073ba2", "1d8d6da05413583e33ecbf76efb87a774ee5181b837a2965949f69d6e6ed32a8"), ("2a7912dd2e6ab186d1b1280036f7952e9401ca44977ce6f1805736dc943b47b8", "0f2d262f2a9e7d2cc895ba9e659cb61f7eeb09dae1b1443ff51dd086f8119290", "2bd9c4de5d22590b254c6f05352737563787c165065eba89826a5f656cc3768f", "14f7c2c4dc1d98bf94993a4b85180108882ce03a04c46175c87382b2f33e35aa"), ("03bb56374c42b03166a51e4f9ce85b286c1f3491672b203fda62772be48651f9", "1d00f5bc480a8c9f3687aba68f518ead488fcc39bb7779f1e691faf94e83807c", "05016df68e3ed93f86f8ec661907cc32a1eee2b287ca3bff8b5ce4051709d42d", "2466bc0eb21a6dadc5ab99fead8018f62739ae0364404091fbdb3f512be9d1dd"), ("009e2bff4edab4d9ce618f38a803fa6028f8059446a67fb9f7a791e22dc8f14f", "1e5dd7de8b1d84eca36fa83baefab1785bc27e2fe4a16d71f229021dcb570bb9", "0f5ed401074aa3d8595893d2d07a4c407a1cd8dbb92f8e0018ec5e7cea036801", "07986381613b9743b36f53c514accd232ed8d8eed0d20d7e4c132cd918f97ad8"), ("14f5dff2c891f933a42940f62a7dbcd61753acb039b205a93473614f8f6df71a", "260d883b37b0c18f3a971bb64d069e2ab27ab1230cb0d3c5ffc0dc4af89b0a0b", "1e1be90372d24c728e9391beaf683a7c9443908b6c3e4bceb3d89db91b0c5ab5", "15d404c82e5c82a733f6b77caf47e29d5c2bdf41365a348b065400c70ce6b45c"), ("0b4c314de237f898da8d50fb265ae96300ea2ca6e7d0538d4366993129bc3638", "1baffa8befe7d9925de8566d7b17efdb4e4cce8dfedfdbe48e79548c7cc43e68", "145d819e2fd471e779f599b65aca2cb0df43b5bd2c40cbadad7551456f8c28fd", "0d07858e4bd166c42fa57dba0b2354f62bf420e868d905f32507c092d31c25e2"), ("11e430f20cc9f2e4d1d4f726ba2f4f7db121db51f961cc5210f6249e55259def", "2e6dd3c542e24349b7255b0e44a1c571a6ec603bc212ca3fb53f061dd96cb4b9", "171c07c5fde65907f86a6ac38755b431ec12f34a16d24e8b47f74e2f5041a5d3", "17805cd15f4edc670c82f4c36aec0701bc1c77c2f2ab717cf94b677b4317da4f"), ("2ecafefcc203122ff46bd6de527a30f0f21a1e991411f17d37b7c61b59bc17d7", "2c429e18ff20bbcac1269e0bfe3dff2bd04e2991feaf1d853f6434167eebdb9c", "2f95b56e3b3c6423443bfd129d836a4e8f57a27ec0dbc2274fc59d89303db220", "09593e71447d81343b198a85636ece43f51c84d177659d1821f591957164590c"), ("09c0afa134c14a774882ff0e08a409409afd948b9df35cbbd043ab165c44f189", "0dd88966a7d8b0aceaced65360b53947a1d563f7dba2c89b118f94dbe4041803", "035cd5677692fcd9cece6990a3c587fe448a014daa88e3a67e41eaeae0adf960", "0c6a3767788d31e0ff0df507b0cdb5a37987c096d61a3c1aed85a2d1cc24a932"), ("09f2c2f06c56e8841a53be24201f7f561593c5f65370f185493f66752b1449ff", "1759941efbba26a54fa5441f71d81b4612ae2d040e8042e540612435978f2b5a", "287b52ecd02e59f2cd57f2c1adc1835741c2c7f771e25b0f786309ab9adb5cfe", "0db193d4d76ca5b8fa32ae7ad0ec70732d46d1680d7b0c5a3dfacda6c0b0451c"), ("2b5e1589fee0602e19edfb1796c26637f90ff59ffed8be63be680ddec015599a", "0d0e6b24b44f10346778c66338dc20cecede42ac8e0e59d90af8ad88c9cd5f68", "03817a6f8da25263fe54d11aa9b702ba291864ef62bf9c57ebff7f43ac7f6cad", "06fc49a88ec04986cd0c0a5ecd1a9aca1e0d5035ef1ff0a71ad1abb8a77987de"), ("1231150aeee3b790fdfd8c04a17cf8d87c1a80ca63ccfe30a2e248a472bf03e6", "030e8f71a47187733963151c0071a9ac68063b668c0578153a014e9eda5c578f", "257cdc29b6f955dcc206644058635786309807334de761afafabc903d507c388", "1ad1b020738a0a3861eaac12f10876e2e569e5a6e0b880d2437995e77a5ad6d0"), ("2ad087f99170c8a90edf0d46c6ebdfcb8dc4032add9cae72c25500f8c915adf1", "1f37eec549bf0ec7c91619ba0d3984626fc9daabfa92426bd878dc8e7a952e9b", "0be2e54f4ea29b24d0fe9c14fe5a8113dbe254ba0f589aba62f77cdf6d7a271f", "0cea3d20f23d0f7ae4891e1b6469460ade556adf0751f7afde9797298e31a26c"), ("07f5341235de2aa9583633341bd67639346fb94e2193426deda3dd778d2ae1bc", "1708bedebe786cfc4823849252a555f6a6e8c85088acefd61ad284c0a7e1bab7", "16c202e070786e48fb00b930cf3d2b0d92385730656171a24d7ce76f30111c66", "15c8419a86ff680b10d11f0b4551536050fab4c7f0bc3a9264300e150a89c4cc"), ("2e12c36629fa555269e96b3e2a7500513f01dc2124271e3b22b8a2444d627f65", "1319180e6a8fee487cd55141e0cb8cea58000141e0d937c0cc0b1abf8fcdb039", "22d94e080142ea7f42504b46aa4ee60d95019912380a0b5cd06909e96669fc87", "036a91081a052fea398f52e108d15e2f9a2cd6754308cd8a828d2053bd377e92"), ("2de2b27c170b18596393d9f4b6d060937426b00a7d7f5d21a0aa961006915df3", "0e1202e5e081fd2eb262ed12d659f6480a3b0180eef334added34c734534e0f9", "0361db0cc692879da258061c75463f28b4fa171099919327fd57fc85fe1fdc38", "30524d4d554af4881b12f6f5d5c79f6e4184eb77a213f7416fb4d99fc100550d"), ("1330254b45662bccff3d9495e3c9f578060b63562471f20cfaba2a2848f8b856", "0cb2caaa3c5f41d20619610ec5aa25676dadba2363bf598c0bc45b82f35233d5", "17994fb64c7c2e8f73525bf220e3b4c95457058af9225151740b1a808256ca74", "16174465ffcf5a979f59a034ee19e59da1c0fd04309ee56f7a6d7b1ebce66319"), ("1e120247d06fdb6de30fd38f6eee799301710b6cf1a3ae67e2f04a83712f740b", "0d8b2ab7a3a7a19cf2206b6efddf48419b4bae5884ae661466131361e785817a", "03bea851c900853a4c0118624f8138b66dc24966032edb5d4ca77bfe020a4576", "26d4411fdc19cd3e8741d9fbc08e1d31a31488dccfea59821e8d2393e17080df"), ("23546551f8371277ea12319a2b2680f1931cbe1954c13f9cf320bd734af7ab75", "1106b29e9e41cd586a63f24c45269490ee06b33df487e9c6552a6463eb736352", "13494e16b7b050c8f4d47c46fb2b4903a195bbaa9a4d2340c79dfe061a339905", "25079eded59ad2a7e3e6b19e594db88966af8ec6305ff29bef0a7980e4f459a0"), ("08cd6cf3ac99954ed7dc26acb083c332f92ea3efe9b346cbd79319f19def56aa", "0279f9e1733e21496c767b59140cdeaf0d05500c60fa8db9e05e535096a6f697", "1aaade05af60de9e93393ae7d02b2a7a12e26774b9a051fb6b9bfaab92ce471b", "214c6f40f27865f74613ae7f3b5c9202ca3a8be0ac9a7fef1a09dec3fb582b50"), ("127f688d6ad89227111cf98e6a48c2226826845a74dc1bcd86f8bf43f49d5093", "1c061d100ef7cd3ab134a27bd67770150b2aa9a7c17280601149f1ce28a8ecef", "17a5ab2659f325a4297c57702a1c847dd7987a0b7f59a728e054573270c667f7", "22e648c91ccc43caaad055105c700e0c36954eb1047bfba71dc09ee4c36aa6ac"), ("20e4557b4cb960f5cdd3c552ce50538f26790b79c95b8e8a3823358c70ff674e", "1ae9a31bee7693033872bb64e1268d052b2b5477f90016ca313f39601e952972", "06b55f342f09ed95f0c00db9ea839767efbb410c600d86433b8b76565da68801", "19b3d60d6064d7e45c009186568b4b24522d5afe555a8f9e6288b6a48189ff4f"), ("05cd6a35198d82d8db90f8810bf29f0f2454f972cd4be0c370d8fb3d62f8616f", "2e32a7139c819176d1f1de7812e4b79a473d65791b81a24483cf8eabce79761a", "0e26e8a82233a4320cabc7248040f675ec10da23f5e65c0a4aa59fb7529fd3e0", "199e400ac6f4c190d59241bea44287202d7f8297a797303e65048906836b9c27"), ("0fdadb98d8b3a0609f918d047718404aaf26b1effb4bf03dd76ffdc2076c9314", "112f705c4b2d34848cbcb2409b308b80dbe9a2f3e95405d56fb137c67afe945d", "06e271991bcd459424817d05f5944d53a69bddc50ee9a78e9114a026ca8ea5d5", "1f3d4c4a569547331bdd995f1442111a1352b871587286cfa5cbc39e6163b331"), ("13def430a91c94c138262a53264c2e3818b9ddb5f80a68968a6f97db0b58cfc5", "29c7f653e5a15047be92d51a16faed2c1ba714fb0b921747310bb3f7983be6b0", "21573b4e3738e7d10b6174ac64e640c22fd391a2f185ec7f4a88db67d67bbc64", "081587fc3f13fdf33f3803f5361a4d69f33a76f7aaa16280458b13e27bde2afb"), ("27b468f42bb01c7bdc09a33ac4dcfecefed7233f07d5ff1c31b7a0a478520a0e", "03c4b4f001ada25fc3025fa736ddb282d747b9a077ea58f73cdfc9efa87192b1", "2d319ee616280d94b45bd78dbed979143d0ce4f90c96e8fa670ec86af48e2afc", "1a2ab0cf71fa69e14af267e6356f12aca43ef264fe378b1091a1e049998330d4"), ("04886bd26fbeb5a3be7e4d1c406f11da070cc7c5641ea75a230a39182a4ecb0c", "09dac5c9661784ce305a8991a547bbe64f6e14607372b5ab03abd0e52144efc3", "1640bba11be7a01978108357e875e46589f522bf9ab9b85a0d295450a276b1eb", "159fa4359ce06654e3a11f299ed98faa0f59dc6fcc2b8cf2aad29ada9710f00e"), ("278a0e9b8c528ee99a4afc510dd9c19cff28cc6951a945882f7de891643d3ddf", "0eb58f38ca793c89f73ac52b4208d5e20b21bb2515ea880dd734005c0c4d8b44", "1471192963a473a66248ab465b0c3615351ccd7d339681a58c07a236c34002af", "146c7d8178bff5f7c65b83374d06e3cbbb8097b95765247da0a11a53313f3c20"), ("295bf9b92d8004880edfa6298775e037993fcf3e22e06495bf9e5126b1161e7a", "08e8865139887ad5c61c5cb42f58642d71f764897a7101a0b9985f44c986caf4", "0d92ce29c2f0a5e8470d9f7947e60b09ebf614840a74b9e6425d260d65257b4a", "2f310faccbff7d615ec448299cb4a0d1c9f32ae7ed44439af439ea03732cc3f5"), ("21601c8b82f5a9b878780447e920ea2858d1b78417f7f205b3e2e9f61dd75b50", "30139bd46e43235ef2a82e8956cad5cf6c732245020e7061bdbc16756116c62f", "163fca46c77455941a133df1195431b2f2588999c885a439d1767bce0a549038", "2851c1d03e06e4777c69076a6ce621e38e898cdbe038b2739fe2265002431ca4"), ("2bb84aeed4f26010d55a82c8c7dade43ac31993d3adad1ea926511c8a65926fe", "085a694474494f9cf20e463f1e45e5533d7ae1f2b701696838aadd316d382972", "1620d5ce144954d17914b047756e9328ed9883f9535816fe83741266ca718803", "034c852a130bb7e3abac0fd9cefbadf79e274d9e197f1bc605bc3404d48347d8"), ("06cee6a08515a82a3da8726b98db7faaa4b21192cd1aff94d88335c9e5c33229", "2dc6251b7112edcc92c496339562dc287e98dc96f9fafee2d1a0f0f99dd63746", "269905f522a51e3bf808c444453a65649684b7ed7ee309151112df3a8e527038", "0bd9a3143d37588d6df2d4f82a3249bb3436307fff1090c0ff6c5235b7a2da76"), ("02b7d8fadd31de4479d2b983430b8ecedba113bb4c568e641c0615a0f4f76a0d", "2b598dbd01425b9a249a80b6238d34602d9eedb2ff25da4f083e8260b854ac62", "2f8d3af0e6833ef45d5316140974b6953658957bca10c288a6341ecd72e10410", "22181fe410783a097c943525183b6adbf6d3d0cbf2b53d24b380e34a0f33a85f"), ("297dc7985c6318a53c20ef433e993529ed94981424f96392bb2aaff43367d344", "1112721d4e1b6c2aa05b058e2414408bb0f8a1cd07399f2b96ae658cd1b6f6a9", "1938dea6ba7ca6f88d189a49d3693dd511b138da78703527a11a69db0850fda8", "1d9bd20f6f8f412d1d1741dab7e48fbad3c80638d9c23149a350fc6eadd85688"), ("2445f7468cecb07d6f0118f184a6babf9a671a0f1e524af0cc9abb3b22c3ba38", "0f0b014ddcddc8e01c09bdab5300235000c9be31d197fb53d1f0cf024be3399d", "147c1871cd5e0f52f8574586a84379c7008db97187863b35de71c44e241978dc", "19d5b9e263f9579d650b7e5cedb9bbc0dc8d847d1dfdb4ad6354befddc5a088e"), ("0292cd80e5fd6311454de46616074f38040080856dd91785f4313ced5b239fbf", "2aee94afb4c7ac4a50e551e21f9f98bdbed3d9f5ecd04eca3e7c6da7c3a3bb09", "2f2e4e6604580b72f3f724c7e398a1a3a43ac987738692cf9c84500937583406", "18199b2dc5a29c036773dd795fea6985797e5184a3b19e2f1b427080bba11bdc"), ("304ac61d8b9558ae56681a97cf8db86c84f362d954f31261aaef7b4f285dfb3e", "2b4f949fce475ffd3100f67efbbfbe12055ad049724da136b229c753e3d1998f", "136a3811541ae30d1e9c29c728973ce730e36dcccb70c7dafd7ad4a486b71998", "2fa6939d237f28793333b2db98f76e3ac03d7945ae6745e651c9a21d3703fa3e"), ("07603e20f0d7ab715d244ac9d61adf55267cadc959c4d761eedd938c58152c51", "1f147006e8bc6ed17efe0da2adcf347fc1572c7ea978947c94e0db123c23d64e", "0634862e3542af88f4ea369f7cf6fa9d8c279dfa15c7666bf5ca3897922412fd", "26da01730dc7d91ab0f3fbb6266fbfede8a30e2d31225a0b359df94e2f7b89a9"), ("25387e8358736a4a28933392521e83f8b734d4ff90ab786381efaa5c4b71b14d", "283544190b32cb9fa78f59fa67c5909f8308f3f9c0f63ca1f76335353139d002", "19465263ed1eedcde53e33105f0e64598fea6fe259975f36aef0ee99cbd633d4", "0d39a8d69373cf4077bc96f9577994c4ce3caab071dfe835a51b1c6816884134"), ("1abe1c68ebd308d474ecbac4fc53de4d62f3278a8fa4b14c6f94d263d71be913", "23b84f07904bda87a2aab6d14b1a8b13696c112980eff4c0534cb05d7a451d1f", "04413cdfc29e0361c69394fb8470c5b25dcf8f21249bc6e808017e85423f0a17", "17b441c85a173a05fd794b7ef4ab21cbb1ad9c4fbe483e0dd2bbe3917781eabf"), ("1c818d84e01733b2a933e253771043ac04002e2652614497bc43586d52007fae", "05434e17466ed33baf57ab9d79f077ecd7039101693d2effa83faae14105c260", "1adb37bc3ebc79bb54be9b28b50c80b11cdbeb934c95293cc783f355d15fda31", "1c71ba13f05cb62d91fade1536dfb5223a8a10f5af78dbf0b93ec505c3744019"), ("1fba3ba1f0df3255e6b410f62a5c29861e8cc53488faaf0d7e0549146ff2c13e", "0e4b5d937135c897ae1dff9320f89a2cce04f6559bd288e491f0bc68ae219df1", "11f40916600f9b6550af98452bfa35ba36b9baaeb6ca75d443af51e021399286", "07ffc358dc898e047304510db9eed967c3eefba1a7c14ccefe53f1f8161714a8"), ("05424593465e4f44f6d8cb713f68ceb13b93a4f82dc069eaebe2b478ed97f01a", "252e097963a8d599b2bad317bc8a2a2157e8f58bee84320e5bdd43d8fbab1f49", "1e7de339e2451d6c39eecda49880f75bae12281f8ca04387345dd0a5fb310091", "0d29c66eba10078d06e39f1424ae1f4dafb9cf67931f46ba7abf42cc93403271"), ("08eb43f252a054391414ebe2de2d7a728cadf4d46ac3f7e60e8664c21b515808", "0dca04c08bd8ad066efd533c4ed3a2b09d04c997c6581238ca0175cbfedecdc6", "0a784c4452a85ce380a8fffc035d007a69c1da6ee7a526a3b5d646f268499763", "1520cdb3d0b010f22fa7e6e6db8418eb48401af460f93a8e3694c7c44ab6e896"), ("1c4a2a2c06cc4be2ce281aa9498fe3259bbdc16984e73da238666dd94c1b5326", "1d9f4ecf1a7f6f56576a57e7ff800dc6085aa9017e3fd8318e8f5f0dcd39ee33", "064c4fc50022e028399d3b5cf511747d156efbd6460e6fb0ba222d95cdcacc20", "0cdc5aa49fb16791ffbc0cf024d39408487c98a9800b147ba97f089e79d7ab79"), ("0ef45f36bce2da317954f74f929a4b31c13354e66ec0caf98d421f929320eb5e", "0d4fcc5a64597b5587b98a99a621543b630b8160d7229292fc253dea1171b4bd", "0e1cc0b2edf88c0a95b3658bea1f72a9d116649fbe2f47a5f4af38bda6db5dd8", "22bc4152de4911dd3f3fd955e6dd7089d6320e6cb804b0d3d036e99c166b034b"), ("2f386b54f5317d6dd7dedf0e1fff73ddb5331929359e4a9c618a6be5d6741fc6", "2ab3d1f772fbf5dc59231f5c6885375ea452725959ed9577c00ef6c272307aef", "06c9031ff976715e2b4698b74dd3279d16259b53eff06208c6ff4aee87012585", "1b3b2fa740332c6ca42d3f63dad94fb211370f4760cb32529d6438abf0ff628d"), ("1875e47ec62010af27f9e0ecc9f51341b4afeb394e7ef5392fe8a42c78607b91", "104065a2cef85c145dd0f9427d5744d4596f99fb2a5b75a15a0f0fbba71fdbc9", "1d38e922b6a8c75e397b32d46b4608e603254c4d1727bde0fdf181cc0881079c", "26850f5dd142c6b748eb6d0b1ef419d5fb91483757ea1786468714a2332404cd"), ("01e78a1c4c756e48c061d153da41b09ca249d1386f20149076739660572ec2b9", "1e9a1fa84e70d32132e9968d48c1f690e92fe4b77178b2ce2eed0963040a0b6c", "2ec630da2ea9c94b8d1e9867d366d070a720bf8c872c9ac5db0e912390fd73c0", "2bf345d967fce5fa3ffd0f80ddaa202b391adbe3bb829d8e6f43ac7ca0f64cc6"), ("049bf7d0a5f2e48ec1691b6203b80899177065dcbe023da0fa7b731509f171c2", "1ce981cc7d0bffdd94453243b5e389f105cd505bb6c8b673e78fa39ee949d60d", "05011e13cc746eb62c276249074ecc6d27b95ebde999a70e88a78e076ce786c9", "23205eed878cf456b834a164cbec89c43ea7cce32da709df61674629f053e93f"), ("16517fa0efb069f97139d970f354f189076d338a93dd8cf76a647adacc0663e7", "0ac018777f79e86fedc09f0da078dd2d4ae1bf455b298e2c44eab649e5f819e9", "1caeed38c2dd2d6ac78a86ec195b6af862954249a722e253e5b1c180fdcf3d8b", "2b54f52a49771eb8372b32024ed77b508d38479bb5ef2e61e564280c49dde086"), ("244a5d575973ccd7a1fdb51ac09249e2c356f326e62685cbea41c7bcd663e60d", "2393871a503a0aef173c45efb40f10a053613cec42ec959ebd1f3eac18aff407", "0a8c3129387fabcf1ba9a6b0e2cca71a4353f4b2eeac7d3f8d5637fedb0b0237", "1557016fdf91ae58ede7fdffadd26f1a6bfc1713ebafe8f61b750356458073d0"), ("0c73fd4af5e7ee91e93bc859368da0c495d860c5447f0e84d804f0cb5718727a", "2a6b4698db66826240ecc32a32d7a79c6d6431f7f35254cf834b4a6af4925417", "1f4075c56937e629ca3c201042ae839dd8a60aaaa56c13fad5071e791fafc46d", "14d48906e701f7ae31739adc9a5a9a0c4e647c915989ff4acc173c7c7c18d45e"), ("02c9850f7ba28c6dbcfe2ba145129823f94efd9e5618e645ec995265c9d1557c", "08329b8d4d7d5c31637df665760c12d0acef31a438ffcff2675335e23e203913", "0cda635e56ce788e8351c67e4de753a5173d842ee8cbee6d6452c87da9e0eba7", "2283909b324cc0561ac7f938305cf1f9c28a0f103dbca200eb93387a8e812b1f"), ("2cbf154a815be828995ad109bd229c544274f2a68ec446e1f3f53efdbd404009", "28f5a62f262eb17996a13b0dd7ef43db1c1d82738b5b99324c7e79739ba08bdf", "0f98dfba541dda91f2a2668e5f8b8e5d4690c358fa0d25bccd4304afbe44c842", "1d9074a806946567a7eac3e4071102c31f3ae1ba77e276a6d32e64d8a5d5a1af"), ("0bfcd39c0c41c219a9806cdfdf154501c7b19b2ed2c7fd8b6ef41af5c782102a", "0cfbdcf652f6db131324969f21d15f42417e3983efc99b15ded67989fa233962", "23e525e88750359b9e5f9ff0048ef46be0d0233c9a7e73c8500884b31ecbc758", "1640450235cfaa5d57a1b292a7cce594357f26016d40b15493cb09e5db151770"), ("2ef6648365e3e89d2f5ba086ca1b99b7676e6a931925e1bb1f42b9bf1bcf314e", "11820f058cc2112f05b472fd7c971731f9ea1f05b70699dd4a6a02729f44caf3", "1b3835cb81a8be447c54f0a2b3c64208c4d26163f0adef777d86f975b40ee685", "10d006ece4816a74371b00018373ab39b3f49a56d79a2e7bce7ee831a08bd000"), ("2b8d63640746d690fd58a281247c7f3887f5e59f5b3a463617b0e00e28dcca91", "2b4d383c064501ff9ac6df1bf8cc6be3f9ad51d717275ef2062226f855dc8285", "0c064e04e8b73d95249c668f12f74caf9a8087618413eb866d6d45de8c542138", "0cfce42ad3ac1139afe44469ab28572c101f4d67ec2bedc7cb70c60de6b78388"), ("1362678b2282be81cdffd346d8d2585d21bde2744d9d67f8cfb42b293a94c260", "0ed48b73106d9820bd7d25ff3399278c572b69d7f29c7396cff283687d6a4c31", "1dc43bea351c4a3c4e6da8f647b6fc24a5a65a6e5f9c02d3d158110d63d0b8e3", "2d0d5af1f4444f932307110ff4b55acb46177c8b11617efcc8f66bd857978166"), ("11349697a4bf70c3188636281d53c3fe2e6bece1f64c18638f943f291a554d69", "23173b10f9663b679da8392dcd741098d45199a6d1544c0b8375616a755f6d88", "2686d1feec8279ab6cd1ea50c0ef749d853c20805aedebe15d37031041ee7d2d", "16efeb67dff29b72f2511b65f1ebb95f2004216bec4353ffc645b5a5732d065b"), ("0e662a45538070220befafb0589855a12c3820a455b364270038a3ee4835af72", "23990a586bc048e61c149c0d6312f749fbb1c1f2e896b4738a0cc9abb30ea48c", "29c4f079d7c087793c51d642f5d2347b2bbc5d0f649b8817fcdaaf75a827c027", "02c9593a13e213433ab8a33b6029c49d03894278c6e0f4e79c5af32be285fd91"), ("0b5ca1d95c58e0f8f59423412872e3e5e630d7997013dbae7c3b713a94daa103", "20f005ef1faaed3d770b3d26e45abd9c84bd976ba48359449200d8bb10d1bc34", "067e0013bffdd0c507ed5d23f2a1e1a55c2cb1f7a96dae977b2a5dbf05c06b8c", "0f05b1dc249210ee19a47caebea86db3807a6a246079cd5b6543e67a35aec963"), ("2f049a15b3cc9c151120850744294535cd5ffccbfe89a32c15fed69cfbe34803", "191b6dc4373e95d981d54ae676528f7d542a9e4a15bac7e40e85face72532db0", "10cf52fac8edf0a99eb5115724d529598ba45c173a2fadd361fbd6069ac15535", "1a838f6d4296d5eac604b85cb82da7e194ef11fc89aa2dd59106a0bf38d2b082"), ("2a120d5f76bed0a50e1553fba33b70c7b1d23b6bf5886c4970443039e67434fa", "0a66c199ba83b30e0800ad1af0dc8584dcb02d5b43d152660655af08c402b017", "1b76f03f70658b09731d21b295157f8fd0ae4d80d2b94e4dfef296d55e0b0d5a", "0c640074b072e033eb1555e2317070536c3b870745a4d9dbb6d11fc05621d86c"), ("2e4d811c915c67f463fa0f2748246a51a43963dde4b6a03717c866e3493e2f1b", "0404244e2b88e4d943dbe6fc0e13989e8215262545a1ce2081778ac0569a6acb", "298221eddd5f2892632012dba34cee6570a65bc5b7c2461451ebd23656927165", "203ccc0101bac52739dcbb9a2e498f816714ea340e5f56f216a445eacced93d6"), ("12a41ac491d193e34bd6bb5000bb9fc908ab10211de112360007124757c7e665", "0ccbabe2588a631c5e56f6fedb1078a62120edf2c82aff702104ffdfeed265ae", "26f8afc64ba43559befada8549dc9e27af4dac955498de1c23804b2959b61a75", "0dfbc67c583e2fe161de7ef466fdf5ed8a6b91246bae3c7ad9c608151ad9bbea"), ("3047173d25caf18e300e7bb2833f0745e7db634bde3b2fd82b263e31ee630ae0", "09287d2509427aa329f698bd2d26449465d5a324f8bb03a473b33c7f3e80fb9d", "1cefed8abd49a35dbcedd10ab249e76ae1978dc79e78bbc107a73100e491bab9", "2bf4b42844dbe79a7e2802a269d96ead5f782b2359fbd156ec8e4af291683b2c"), ("2791446d185a4b172dfc892085c66c488d76382a74736d863243ba0e0dbbf7a8", "25f49e0e5e09bd7b8f97240ef9a2f4cb81834333771e5dd5a6af686cde8c0d40", "23ce19f3fdc29458808f2939338e0d74d2546822d7035287715c95e9b20a4ad6", "29255a8245add94a51b485bc7b5d73e6a7ecbf1deaec2567eba9f6c015065a7a"), ("1c7145bdd43ad2841fd24db0c10accecc67dbcf1234c78d1166c37be80544a69", "1522629d2f99ff7b39dbeb6766137b628c1834120e2c11f51ddd312e0be76199", "2283b57b94aa13263fb7a63dd8e147a8a511ea8bdf2437c6c6b49805c5856cb3", "24f16d49eef5b4c45c464fbbeb28281f5d859de2d2acb966d93d2d32ea5a5032"), ("04e5636237bdc15abfb6dcfc25e51f6160a207ca8341d6d9a1168ab7aae12f3d", "1a480e3da2220eb26a602c40a1ec061700a229a44ac4dec189256a8a888e0c60", "0559665378ae74cf88f01fb267410a217e49bc83fc03ca6ded5b60eae4d43a18", "04f0be431924b13044c72d568cd1501245938ca20972eb9b35ac031c42fb6d82"), ("2a168143986a84cdade6a98a8aaf36bd409b2b20935fd915090d64a4b4612bcd", "24a21d22f87f786008f68b326fc92a37761e563841be5cfd0c1d994150bfe1c2", "2ed48d77abc32192cf581be0413c55039288eb59151f56306874090e71247e0c", "12f4a651aa5feecc0ad29cf38fa3d6d75af0f59aa28152ecc98262041e2e3c4c"), ("2169231f81ea7b7819d7df4c903986a28dad040e9188873f0a82b5bc2f8dc3d0", "17b9d9a74c2f001269d2fc0ee99c772c6482949659bb5214a175c0ad3499cb0d", "0e0defc6a98df7ab4c496c06c805461086750fe76009ffcdc5ee3533b521c967", "088a2509790a5e3da430f3819fd9646cf304a02b9e0560aa56df2f7abb6bd9c2"), ("2cd5d4503cd9f3fb9d1a19abe73e1eb869261ccb0b077e7a23d892dc70cfe153", "2155ba3f8211fde4c8ea4bb96fe743e04fd9bd8b7d2315103993ca89351b6ca2", "1b8bd293ba4a5403dd908a89cd44f6004fcc1b4b09393cc1b6f20ea66f8c0491", "0ed4cf42d8d7bc5c6640ef92605c088dbbcff53a2ce8ef4b770ba2b3d611367d"), ("30463491e4756f86cd1483b3c4040fb7e00631e772a63e45f5958f06c3f69e8a", "22add81ab7755fb1b833d8742ea3c19d7261eda312fbea9794a40fa1ba1e7671", "0bd7fb61c071e36799b9ec9d7c8a4fe401c333852fdf5d4dd58347e5e4bc7179", "1ad047fd283e477c0d9dfb61bcaef6a3988599cf10573f9f8b6a424c55a4a008"), ("096aeeed2d547e5c3a6cad13c41b4806b404cd1ab185c53d7f9375ff3d1c5cf3", "0dc0753a3de7736984faea1763d2a9755ecf5866717b6df19d0cbd6a75ad11c3", "249ec639aea129363a9008eb63a9798ce90966118e6e91966a8b621745c2d9e4", "089f9057e85b230131e5be81f40f33e0de22f4a27c3a79ec445528a8e9d87099"), ("2b684ead476a1ec4c70c3a2a227ae6e6694c449804e819a2aff1cdc6bf7b4615", "01d10c79888da5886731ed7c20de398efa81de5a5ae33081b281a64db09a09ec", "0dfb83e05fe1c9ae24d4fda8c4c749f6343e118c00aa2c23343a1571b0018f6f", "18ed02e239cdb553bbc3c93af97d5ac23bff326367036f57398b6a84826489f6"), ("194fc7bc17e1d13fbff5b122ecf7fc55d1c4418d618274149952ab347f441664", "24fda9ee8eb65c8125d22d43841f0fe7985fd5c93c5d8bfd30b8e9cb927adc34", "207d996ff51e6724a6f839b2552f9f8a1c124b9ee25ef801daf15a5acbf35797", "27450803aecac830b292d5b8b840f26c0e48a5203300938a494579f8ace811c6"), ("1bd6769d06ecf2ecf412acc61774b0b31364640bcdea6e3be0d625dc767a8dc8", "2643ca558c7f22f12753cd85cd8eb37bdf6a5b89813e43b416a3463c2242fbca", "282fefec75d44b5444503598698316a20720a6a1635a9f4080c3b1c0a9bb0e8d", "20042a8576eda3856577715f43e772d170f0868126b2e4f27cafb3085986f7d3"), ("13aacbc8082c44c53df46078ac32d0baa8b63b456d9cb4f7ada1a1ba98ba4181", "232d3c89f3487d46935777ac2a1c2164716ec97340eca8c8ad030b1b6b5a3c22", "0d380b20405769b7724e34b34011173fde6cc2dc0f040a55ca4213de8a91a6ce", "252338707d60c51f654a374b58aaadd1d5c30dfa0988706b6d8fcbeffb7f11bf"), ("3014ea1b7e9ac8ad2f3a4ec42d90d4c79ff0fd5f8f5f545d2cb83ddea5463105", "2c7d72884964a5d4cd0d8f00b57a4a009c497fb2769231516fc9278e187df091", "0bb06b9b05bf8558cf28479578936ed161f5b66700675147ff683d92883429c4", "14b96de1330efacea0b9a6e5b5523d30e6cfd51a870d34bb88f3f866a1494662"), ("0c7ccda4e948e4e32c762f1544a67043228ff9bbd0e8591425f965ce743e6b6b", "2d049e3762dc9e868ba99b836e5df5e77c7eb7498383e722c4d1bcef0a849d22", "176f139ebd64e4277a5e6ed787edb73a746bff791340741562ca358c84ba2e03", "26808f7ab81833d271e86d8a5878e98831f0dee294b9d496d8565aba4fd5fd30"), ("02fef159151e9ad227baf16c45ccb20b2afea9a41f9239ef67746b4a9f4a759f", "0c9a0bf2a7217a5ef94ef24bcca5ff9b00c8d78c80029cd1af32aa2f15bc79f3", "0fa776b3c02a259c6d5154c917ec49df9814a75b8ba3a80e3089e300a8c9e950", "1fdc42d3268a23e8deab32f6db6170c3fe76bf01fea37ad2cdb26a4ab81d2ae3"), ("2ddcd4020f996da40dd830e165719fd82ac2f64f09f1e5824d4b67430c24aa03", "23b09616c51417b944d7a0cf9fc2b416f5494f9c419d8dac97c02112b57027e0", "177d56a040e6a70fb4c2047bed7edccadb69a78ce47ce30e2de0cc4aa59dab74", "0656f0875dd76d467cf5936a2ee279b0a510c3fa0a104f6b5133f93ad1c7631b"), ("010eef0d7c6a1bf48891e6f9e690892411b2a10893b8ca5d6d09918e0412f991", "1d0168c5271fba9c48bcc8836678a3ebf41806a76a0e3d05fc475ee270f6261d", "14adf336cd9e7889488113e72dd084310b9fcae840199f5aa0df18376f6f80d5", "2cff939f12afeae1f36bdf7a35231373e825fb50817979bb9409c9c77f034850"), ("12023037cb8a5ab378c5e11e201c8be56216aa9d26718e75d398828eaf250c89", "276e77d7dae0aa3a2c4906b2ed18bef49de863f6d5c808a95b3e2d5f761cb0dc", "1b320c3e2c8d4a6f9666830c8538c61b2bf25976cf3de484ada85564a4c51357", "231ba8324a3829a53278b09ace34814a71adc902dc08f88f5294d809240873cb"), ("22d584acd5b0be88f8781bd5a5c51e3ac496c93c28401a584bf72c13f734bbb5", "1c2f042c2626ecb3604eb1cf11be898257cab93bbaf98eb79cdaf07732b07eab", "1670f698da58677833a50029032b1303973bfe971e62dbce0f9819996c2cebba", "22be93d7c419b46017358b9757fd27825267ce6656f8e7bd6b939cb613809380"), ("02be2dc1401be09662c162a5ea84b5e072124e1aa46b82076592caf25bf9b57f", "2ffb19c2e1367f835497766360dc1b8f946ad1da59eed39466e65a316aa84447", "066629bf720c6be07fff1a9251e8c842ad6c974af84f0149cfda13db666dc55e", "101ca6f9afac6d0739a0c0808d09873225a5281aa527b97cab3d0cdceff617d8"), ("11b821e7a81930a2a749e7abb243c08d8d436472b138961393ab71125ffb11c3", "2e273c394d1cddf40ea18a77864717d9faa9a153711af70403d0c3627c46b931", "28b8a19ddcfa748a373d2ccedc3e8762e221bebec29b99940da08c30b2de796e", "2cbbc72159d8159abfaea12114a1d2025c5e1c6bd8c9fb628ba033bbf84f1ed7"), ("1393289c3738945c37d51bb8d756079a86bcef343f2dcbdfdc5c23e705c6efca", "1498b93df0ff0e66700e4f95e27a324a77e570cc7bd408a36973f8b0fedc2b80", "070e75842b2faa0709339736abe492847fb70011f156ce0829aff73ee3959bc8", "0f26fdf6ec7191a2ace27ee9f67c9a1f0afb417dadc8ecc29212b3acd88abe08"), ("25ef2a7306a7e275b69ca50d947419aeaba8c3389faa501bc6234a984bae3310", "287978680c109d540abda081252abc44036740e1df72725eef77608f4967e2e6", "1a7abe7dd1c534f7c4c6e4d3493a7025d371b9e48870e991cdb62f2561e9a200", "1656a72f461fa9492dda8219500465743d9fa8f36770686980676ecb10722cc2"), ("0e8f07fe426fe44a296cf6172f6a11f8d34565ce87bc12bab2412d2ad48e58fe", "20da3f6becced6a1f0c3324ab756d27ec75387de0d6a45cd0afd3a0297779a75", "145962259739461780afef93368986316326bae3f4b2baa7d39d6eec55696a15", "1870215a7b04486665fdc791f240270c658b4be99f2151423ac14d81f5debff5"), ("214920bedfecf86fa607483681965fa69ce8fd973928c3b8b6c87791e43dc02c", "1cd2586fbe1a9679c2d18874f8f1c3fe11843cd2711909f502398f434a304d99", "1fcac7126b404aad727144fc2b20c4e16190f485c8a6662c1b09cac458a07e7f", "247f62d4d54cbc556489475e40ef13122b432a97d78d5bfedecd395b1989c2dd"), ("2048ce80e95a270d44f913a9f9f5902dc8403009adbfade5ef0ab53e26c76841", "083b57fec84585ecfeda98edbe67b317d8aba6c6b2aeb1eb2d2c33229ec4a5a7", "1fbbb4cf88b7b6e3bb872de2895147ddb6b9256466ddc77a74d991d4c49f01ad", "22ff43c1dad1c15a122be79a8071270f5a68467639d06b9e66cdf9f189497bec"), ("2c58e57d87afdc635055a0f15797faa7c25c769a51f85997bf1c1f3cd6780a2f", "22346e7dafe7bd5269c5eeb795f2a011426c35e3f5e6b16f4bcc50643f9d31e0", "2746891a2b942f7db2cf8c70f570abac955f83fd9edfbd84c0b73f3c139d3f12", "2ffaee72e299c4248fd6aadb07455b66453e45d76dbf5064fb4213f7349603a9"), ("09f5cbdbc3752c20e535b03e8ad9a35fe75c1a627609bb33447df3d9e82ff5e3", "2c3ea65356a854f5885bfc5d199ca9fcc9e55d4ac2aba081cce542463b50a9ba", "132e492441cd8938de780196d9a6b46268f6a08c353b676f9e5c70f4bfa3e196", "06fa03884b1175432c5612a8de057ec261ca9bc2856c1313a4e8d6469e89fa01"), ("28d66d8a63a14d3c55a52a93d222a7c16a29498f13a4107015a971fb41c1a505", "15016afbf79709dd432bdc32e9f54f8e64092b3c8b548c1a18115a15e7ff1e8e", "10ee268fdb293e5fd5377e702554df471533bf69cf80cb8ee49199f820e0df4a", "23fd60575ca37d8ce5ad979e37fdd17bbdf1ae41eeac0b0345c0965020006b1e"), ("04e2843ca3e5f4c2f06d05ec9ff7e02bf29e402ee34508557de1db85929097d1", "0733e121cfe5413956b954a9e1901e4d9dc9e2647976fe6753d4849cfbaa2abc", "2e4de31ce4c3e9bbf9bc8c7e86c83d3413464bbf437e763763c6ea6c49d201e8", "09de249bf6873ff1b41d4bf16918f107ee6a1c614578cb671725d38c254d5a90"), ("0d82cf03cdd8543f20d6925bcdba71ba8b385ffb31187cf506930079df961bca", "1b3b3e817bbcb644db5b9a1eb76823625a55d75a77e27e4cd400c0162ced54a9", "18daaf8b6daaea9583887d2a05602f4b25f5b68592251da0e345b77cd2a34c64", "2b0cd18c7575192b06cd64974c3390f35e4891f4be79ce78b3ac55cf782c150e"), ("030b7bbda555100ff0a8a2cdd447b18b1c999066b5e143e299717b99d394f4c7", "0e73321e2d19bb654c838242531474222af6896b557419a588b64951e37b9ec7", "00b2056eb8cc7d8794977badae17ef6fcdb8f69deebfab9f5c833fcc5de889cd", "0a9ce36ee19d3f4b10cde89b35280d333999783cc5f5660949acae957e8234c3"), ("05afbb2f88edb8c622d4f3807e16c2bd71858191467d170b0a0152b67913e4f3", "0fe4848652173fdb021f5b0b0229459374c824fe5fbd9f6b2ca068b5dcfe969d", "2ec564213cee46eb5189201a2e209c1527e4f2da76fe9b7e996c09629fdb2761", "01cee7b70e37554e1019c16551c3fe51fdf89d796c25c6d07478a3e761415e93"), ("2ef08e968dc015163b8e1dd92fd3bacbc457b098c2deb9f573b7d8eb5f964808", "0027f63f092d6b752816670d7ec96e89b91267fc3cfc09023b04c7a76955d56e", "10a2bcc5890615fbca7aadcb71d82c662deeaee9a57cbcee9754fe0fc98ccbd2", "28f046cdffb5b7cf6eda82de846868c50f90bbcf7cc59a364f4cba61eef1469d"), ("2489fa1e5443c47f6114d3a9b6736cc833f0d70b194effad26a25eb7bb4d93c1", "2548b5e18e1ee389d6f2143f37abb98bbb127f648b145d29e87e4160f295326c", "135e2407826bbc73d610f810e4e19ce1d39d907d09cde2ab39e17d83a01c7ab1", "0df168112b0cc077333e395428e40a689d0d34d0965671bd4cbf4aa950b03657"), ("305706008112950422b8da4473dc2c4f6c3eb0fd4d704f020277e0c521abbf81", "14b5e8c9732caf46c541b3fdad9b7c275cf9568b82575011d9cb1f61f5020ee6", "275248ca7288620d590616e4d3c9c61b13eb57ba611b9acc478524b994da3224", "0c046442fe324ea342890caea8689b07e2e8fcaec310429da02a6436e43b4fa0"), ("07606964f43d5daceb129a111a3b85db92de5caba0f6453213bbdb02a88b503a", "1be56320eeb677fe27343104911ee9a08df49a61c70b4529f04fdf6b4e455de2", "23b92cd310ecdbf837f17a825d241107f429f662ac4ebb5bb6b166117d803377", "2bc53fe940cc46cd4628042558690ae656a835e387688d0de02fb6f3c927a181"), ("1348cfa200926e4f42cb64f2a8a23624d6985997db95638fc70810b997a7ac4e", "299916794121b817bd1b77935611f7138ecf545b373bc72b0154c32b2ffec724", "06ce342e8f9e63668ff077fba9a55292788168f2b6265bed7925f125c7f56138", "0c8aac031a067eb008fbeb118f535257ad8ae74cdb9600dbc18e6a1a633a381c"), ("2a02af48bb923fec076552544bb10b553b17c03f465f05071d79e782e54519c4", "2fb6541ae2d25579fdb54bb1508e2aa694612c0dcc878a9be0bce834da815b44", "1267b1f6e0c6938da473fba6435e1407ba259b06299cdfd08aee9526418fd7d8", "1108eb2b739ee1f0d8d78944bbfdad0bc2ccf3785f5ac3f8d884b1ad9d3f9df2"), ("1fd6b82543c8f8de47df6c384b6b8286b89bfa80f792a67f12f7ea3e7f93a162", "2ef23987df3dbfb30a35c5daae7f5d7d5adc5966d1807fbbe5865816837a5ac2", "0b3afede80d35d066f2a809be3cbc5fee212b14e306f3681a4eda51aa0a4ab2e", "12c3e3d4f5250cf2cfb209c74e7101af206cf100946161c3632a212bfa44b858"), ("1cd931a2b5d310cec6d0e0fe2307041d96b3a5f898f4ac4d5477de526c7f0487", "2fec84a4c04bb2b8d1aba0a4a38b11ac52a4f368b3f8343b4cad32642889f13b", "2faf442dd2e97ea3e0626da2a88fd16af0c4c99ade114ce9ad3b3ff471a60ee3", "07918ee82da0ca8e992ca6db7a32f50c9eec440b99b3e350dcd9324e640d7fbc"), ("19a0b67fa7273f6523625d78ea1e003f895e2a1b0cc5ae5af21d4a9655ef089f", "1ccd75eb12023beb8e17a3b73bf8646cd6d611756145bf7cef95bfd5832c577a", "2201095267c21cbbe83b2b3628cd591b35c081b24858be8a0b451748ebf11d03", "1a27edc36f0b08f481fdd4566c4785bedcd69803721a375903cd6ee98e478b5f"), ("198dcc160bcb7761c32bfff14c6b8f3fc816f11075d3f7fa5e27d96bf83d1eb8", "0fab0f0fa600b62cfe6df6187de38d9fa5744c8942216802e8aebb927cfe68a6", "22ead298f0e483f721d58cb418f8effb66a2fd383719e3259cf86c0ebbc73135", "01e5a0b5eae7af63c621c486d502a390b9b106c4b4da5e0ffc74e34d5191b498"), ("15e5e761f649d0245803199c5aa073578ec2f66f6902c4ddf1390625aa20013b", "24c89236d954f0cda09d96e7d3eb79b9083877cd199ff2f766b45af61b9c6b87", "197a7fde9e46d66c42add5e1df8aca5a16aba812de1bc66c5697fc786e1cb00f", "1bd1c6f8fe9a24dbc6ac441531811956431185418674b1129308bab70e6d75c8"), ("088322a7b1b9614440f662b48d4c7ce7e133804f63ece75a3e87d50aff27ece9", "0299d6fab78ed2e5bf30089777cbaaa5f17b193521d926e37e04731376eaf4ed", "060e769536b880ba74f9c03144c0f04867a66a8fda7bcd75e691b8e86c00c649", "274c82520d8aea38f359f9eb4b18041a6b604148cb55fae59e2e1b864075bd6f"), ("0ea828b9a776b7bd41f7f74b6b2a4109f00753bdfef15a0b238f480990a975b5", "0a449e787fa26a42aee4bfec004a555ff37644aa965e0850d9da53f713c80dff", "24380c25f05306d3783db7ef5fd06470372dd37f4a661ae55c189ff819e3c4d5", "1610573e07bf5de9365358c60bcab7ed804bc851a4dc9d45139d074fc476b96a"), ("2c43b559a09de785b6be75bf4cdb9c93b8c8510d27cfede6cd56a9410aa7543a", "189fe47a52d96acf3cb7c47bd7c2179f0a6a8777547838d76537a364ff35351d", "047c4d47aa6556a26d26a287f6d4ff239dcf491bc4772e4377c8fa4b3535b0a4", "1588b50e5091c124cac5e0eda4c9f30668c8567dd25404919bf464ffc8031227"), ("094e3ea89bdd787785109dbf2f76bdc0c15cc4bb0318d61d6389998668d53b10", "2e19b01d077229a32766dce3761abb440cc6a404e83551a0c38cc79e369a92a3", "19d4dd95a9f359384683703ef6fda116d78b1604ccaba5797c97fa1b7d52987c", "0848312aefbcb1acb19c18112cbfa2381a875a2dc3aceb09dbc107b345903282"), ("072670b5f60429a61f2332d3a185ef81b4abfdd9127f6c277cf7d2c2234dc693", "1f3a3bee0dc892f97ae743174dd7cf0a51d45a320c35cf1018c2cc7cd330cc0f", "229fd1b635f222d45fc13e18ad94fd28f3e280f8ee2e980de798f67f87e4eaf7", "02d2a97a1a4c7690be96f521caf607d6c6960c207401ef03bebf890c0b132c09"), ("211e62bae8dfbe4a33b7e751010e7fd5df964d40bf08d3742bcd09fc94b1e0bd", "11ec7357f680ddd303eadf1e576bda1e390cbe3d9cbf29ef356f9a0036f800bb", "2a9805edac0bd4e2d70c75d0943a18fcd052be5aaf0e29b995aae125c8f23162", "176428b187b735c30d9d9952541aa6ed6de0425b1f29bac85b373e304d9ae1d4"), ("23cbb2057c21ae502808ad7f5ab654f3832ec40af85ec23bdff6ae34d2afc69b", "1f78f5c6dca8d3d35c001571c881fc5325db616d4e7b85d5d23dc4642e6fd06e", "1e2a896ce95434ad171ecf7ecc49a2dd4b83e8e896e92b8486c460ddd96a27c8", "1bd247f7ff916cbb67943dd07cb71dc86da457a38b72c8784afb99416de10cb4"), ("1ae14c8876ccafae26c0be9d2f217d2cb481063a2c4d30fe9eeb4f7a09ab7794", "2ab1ca69116344215ddd9eb2436cd0f643a8de8f108442ff33f647f881bf2e94", "01e486807ab0f7edcaef081e3b2ccae2bca66c7ef779392127180b2c4959d61f", "0b8e3f63a4372f5876524bb762dda44813c3face23106b46392963f4b6d0791f"), ("1ef54b3214dd08d344ff9450c14ad501576b96659edb48416fb462efa81c90f6", "0b921e0284bc1e13b377cc1220ae0ece5aca4ccc2de0a57aa487e8b4b18e06a1", "0d0c9a2535b8a35a149a75a236c468e43a77a89f9e170eaa704bcd2a749a75c7", "098182a18b92e3351e4aee4d73c2cba4d6df34e470a32f6ddfde37a68f2abc80"), ("23338d218d1edb574030f8392e83fa846db955538b29959764bc105e20261a4b", "005078388f6022bef8a5f220b30698ef06eea9d1f23b3707cdd737543b4ea63d", "14dce90d330546cbebe3721e4921ed64dba8b41e88e6a58be0d8bc13540a2b42", "0082cda1003259edb1c033f04db800368b3be3abe9b1558117b91c98622a435a"), ("2febba7b38227b2f5eba980d4cf5fb684215d376b9110af32f94c18799c45fad", "05158635c41ae6795e5e81def408b8b604862fa3fffdca92aaace2d4258685e4", "194506d35d908a704e3cb7bc1ccf1c490370992bc5ff18e77806f82b9b9690a8", "2d67f9284bc494d2e9d76727bc05131714e0fb0e16da33282453e28f445090a2"), ("187922bdb463466aa3a5b78655252e1be94d36f15b3923b5c050790d1968c020", "26368a4e4f3722757cb44614e6b1fa7e895119a2e7f55d4c320b6b925540aaff", "11b4b593b349b28df5cfa8545a39b01e98527b325149229f34271658b9e877a3", "2fc6325d82a570793113aaf1aa0d44c88221dc17aa39744ad89679d47e8fae3c"), ("16fa6c1cd67bf5b621e33c4e69ce3d2e01fd96985c3362dd514142b26a24285a", "281febe34b45f4bd1ddccd7f974a6aa074c5dc6b007dad6cd521485a4f81a2e7", "0fbed8fef217ffff3914c31784ad2568ee4c2d87a3a0d8408e6d3f7bf14d6c92", "22a33f2411256a4bbc6f95ea9dc0d6576eb08e42e8da513fca9303932d2ad4be"), ("027ed8b15be52ce7fc01f79427aed87082e4e0219b872b1d559cfb1db0fe1d46", "0c58171f00236025877ef1fac2cdb9f41ba1b6b33bcee92c4ff6286788d175aa", "24d5d19bd9e4591d195531ae953569b84ada2db70e19f22aaae90fedfcfabd8d", "305d451017424c6b0432a424e11d95152288d0d388bd79fa299a7118db675dbb"), ("12452697972e86cc048b31cf426052ce4fa57d0cb52f5faabcc3800a477360c7", "0d1a5bd03c6c4ebe2975da12a1e5788225c4d28183b641b53856f5e90008d09f", "23ffbb94b1e58a3176e592b6625e90c178147bf1f92a441cff02a57d07262dd1", "1d13af449d85ad6c1182c32d4f26c48a27eaedf2b53166a967bbe68160e2e5fa"), ("2045813b85bdfec02a0bdf31557e630b4547e080e363e2726c8995b5d508e939", "184572881b00ed0c9d70b13935861038cc2257f2d53f75954b8502aac1a474c3", "1b1b64ae7e456fd57b79cfa9ba20fa287342045401d5acceb237acde08afbc9b", "029947556c5e220ffa180504263e0b4a61f85658853832adc86055b7ebfaee0c"), ("0b0fd2a8aa2e3d8471bf0a4dc90215835622f9d11abf3a12cbfe634b4e0d0caa", "0e8dcdac307f1ae464ae342544d7762d3f62f3dcb3e98d2fb08a292497726faa", "1f275ccc0218dbd1e6f6b7461677d5a6a00e62ad810cf974548f69490387d0ec", "1bf9152a08350e23b5a795d77df3f53a0ee71e4aa8d80789e1b0f73ba3ee12f1"), ("2d15f424d4ca9de72a9191768e4feddbf453f0c0b5c322659c2957007405c5c4", "2229f036b7bd67849e29def7e5d4f9859f1658d887dc4bd331cf2d558a0b1e03", "1a88efd6783e6900d484063ab15b4f729248ac1b334eb04115cd6a1e0d19ff44", "27bc0cb487763cc69bee8d33785fa28ef18d93b4265a501c2bd9757b3c273f45"), ("121d4d672bd1c554125bf68753e527973c8910373f32a07722948e39cb288e42", "0ca8794f63bdba9bd90eaa10fc93b81053f71c0891e699eb482b7e2ef4c04782", "1eae121daf95600bb862ac8e0361c983a0244570564bc038bb6c236259469d37", "29767a29823f37b5a54df2562ce3403180a4232e4d1324af7ca7da942f8133b6"), ("1ded8a029a54b1577082db23f4ff89ec7b9522cc77b96761440352dbe7f83335", "278bdd5b9db8b212f9098b773bd3b38fbdfe13711eea2d58f28af79775ced30c", "1aa6eb1e5fd9a8cd2ccf5dbbf322031d258a5d051acfc7edaf0925b7e77a6103", "1bea71ec76fb5add7db0064638ff61d76e607682898e73a73335b2bb418aa082"), ("07f2958afe1edd0a2535629c16dd571b4c249123c13e2dc048531d3798042d9f", "18d6e59a163aeb0aca312d9a8bbac38b236baa2a59df8dab22cd5a3dd0b30723", "248bb0a2e722f9898caf28c0fcdcc1aa5692620680a98bc91db1ba7b42f6635b", "21bb825cc7d9e26da05211fd62431d2db6b0af0d25fca5de39fd2bc48a0e5ca3"), ("1b75372bac09f3c59017e05e5dd82c270a0c6e5dbb0fac877bb9068b2de00032", "00c634475c038bdb03cd97dd53164207f5437f33169ac6e5757bef4d216fcb07", "224dad031ef7e2625bd81491a88c8820db2cef8c8f9eec664140eb0ca92e624a", "301319d1209980863d3ffcbcc5fe54bbcf4f3aa2aadf02ab7a5ebe792bc147cd"), ("1e382d456556708356ef491ce57dd9425230c6777dfcba12bc8eaf3a9878977b", "2c40265f74bb0489cd20170df77014b0e30b42eb9daf0dcb6088adad5646a3ab", "050e826dfe9c70925bf580d09a257d30f5a6129276f08c9778a763b11fa04eb0", "0a4b76fa05d24a7ef2f6552ec7a3f63b5a71bb5dac549eb5bbb4dc3583f7d33d"), ("16f82b88012f29370fd248a2bbe9b471512fd3c699c8b255ef134d5007655a5e", "12e8720cd2fb2f28339ecb98ed09abb37452d49140248b09dd048e157ec13a0a", "2e2fed006760a0b34dc0809bb68ebf2334435a2109db5975ebd9e0421bd5d4ad", "22ac136d6766e617ecfcb9798ef0ed986738da17da0bdc3d2011bdbc8761e1ee"), ("052ca2c0bd3f676c1be2876c690be5839d947945d921b5d8e9342439d21339f1", "2a4a5ab8e826cf714f140563eb15f9094523e8b8f41c011393b343a933b59b42", "28b5b9180cbef03e8bb6961a6d9875bca8bfbe23935fee919981db66958223c9", "018ba440d1a60bc857544423bbb3e61d74ebb637fa05bc3664e144021b3f9683"), ("2721403eab6032535d06118dbb94673ecebba95e058b15d235254de7bc73402d", "21ee6dcbe1f9c2732637428b81d75afc90414b8a233f6d8a798f80885220457e", "2ece685fd63a08d224fe89850a344c129edae4f83efc90d7b6e1d9c65ceeb9df", "0789cbe03ab416538a6a19d3dbf496cb8b18c3f7ab8ba85ce7a4c3fca4a80b50"), ("0a8dcc2256807b75a86d37d852f810648b2d122264dd0cd5a93d6de06aa6d664", "23e6a1661cdb72e70be8747552a270bac33eab7706cd05779371d5d5f18bd783", "1c2e8b0822f06bdf0b031a3ec79f0a388ef0fd41e738da6cd3a2d2952a542a83", "20622bcd650526cebd91ff4a11315972373b20894784a9f44a4821a9e5cecffc"), ("1a11da0b64b4049514483bd4ac6499f4ef2795e1fb1b25a3a2184c4e94552792", "29f1bf146ffed64b4f11cea146492354fb203ab1b9adef4d4401208ce293f289", "24446e5aed285455266d5191bd6719e91b757a01865352c80537066b419a301a", "0d5bf7e782d0c74f26d77e1f2b8f23a1282a9491b9aabf9a488ae4cc95ef9c9f"), ("139cdd9705783ddeadc97a81fc5979fb4209d8f964bdf399b280417585f1e3bd", "1877c6c165b2a6c404a5fcc30b3d90ea1465e6dfb1a534b38a3e044fbc904a5c", "0a20c3e68996b2619dafc84818f2cac628e3cdd024953a865510f3b47e2d0638", "0940c73f9c693f80ccf6117abd8c6821e5557304af851596bc67e0b35cefb314"), ("088ae1968f833a6d7e4ac878da4e715b6eddc4ff606e96741371826cdc77abcc", "08535af396562c0b68dd851722ffd3183fdb2fdbb6648e29d3aa284e1a6f0aa4", "114f196002716e3f1f02b46da371cee4b3ff561634258b586ccf023bbd799e31", "15e8041d0537bb1cf02eb717cc1cc93c09caf9416b230cc52ab2ed2371c0704e"), ("0a34ad0c5f4ee898fad5900c5720cd1328c43f0e2fa8d470faa05ee6cb91ff2b", "1f5c561ee8b060c648d1e725e826935114413672b8f9078981056bd948ca07d0", "14e24f4fd19387b894469ae2179763b2244f6a1922373d3435e457ef744070a9", "21b0628cebe6f946797fd5c2820623e9d12b623f19560db143c075ba56938fb8"), ("02114799f41c34c55a3af626fbf591f5ef26559522f394f650bcc7dfc47b6388", "28edba755bba29bfa0136d3b48e745ce4da6d5c273333789c44199508711b1b4", "162ba0db584ece81d94744f7ef27aa053b9d5f300aad96c3a7a8fd8283e14cec", "0c218b1dcb33669c1e8c5b630dad4ed027124b02a3850f6fea07cbf68dbe059e"), ("121ad3de15f173f417649240f2dda6ff7dce1be70c4febb3757c1bfc49701b3e", "29057bdf2b9b6ceaf5219790f1a8b545588c21bbcea878bedc1b5e18c7aa4afc", "1bf27a5c9bc43ae76a2e98dde4842887337d56186e53e569816b6e2448211d6c", "2e63f3bd35dd7a1f97572ab72deba11a49198dcf37904317fa39d271ef769df3"), ("219b40b0242b0767b8db3cdaf219cbb2aa772cdb09e9315ab1cd6ab01cc854b6", "1a899e9a231aec27bc22031d17c163ca1a7c3a5e96bf332bf64914af8bf91327", "2c0ebb098885d42b92d6cfac56cf2a7b80d01eadb23e52f1e840becb26900da0", "0caf04dad097d348b75af032b0f35e538be52f6bf57d50c091f91e816f21c713"), ("17cd6df95bba9f565dc48d17b6bcc4a8e7c94add2ec541cce6970f9f37392a68", "23539372fe3afa3b7181b4ce1e2cd7821e40e2e9199d755434451431fb5633eb", "026ca9fc6188363c7176c3828288afe2824accdbf6d21f50173c7ab0d28608d3", "05cdd91937130c27647a96199bef7e94f9af42bfedf8da93d6adf922d8ff195a"), ("2e73a4a4e8ab4d39f858a226a60f1e1a7b7e4743a54313cc8b207fe587b5624a", "08d4b2631bbc2e0d16b572ac9e86a4e37fdb00a3c97db1598f31fc8c416ae7a5", "1c37785cb08c9ccaf76a49bb067135ad9a17be41f7f8456ae62b3995e8080e36", "1116c96b8fcd192eb493742f22fbc942e10f90f67a46599c234805cb612c7a46"), ("215a47480e5de422c6f0a47fd66dabb54897ede43924efb7cf30ca1e973160c3", "19b03276c337d13d08394f31370257d9ab2fc251d0f0061679e60770f39c868a", "083041564dcbd456e636025764f5c8eeeb36a9b566bcb2b033a1db5346151607", "304379d543311f468c0c83ebfc832c1e1c5fa8422851f8ef19106affb96ccdb0"), ("0dd62ee1237dcc2c192be9d01372ac27dc56b5a8b36d7b65e970c130f34c10cd", "22ab9a480e658148fc065292c5a1663399700f93ede149db2beec9b4c8771ed4", "05f02db87237f52d9828dfc71ca2ee1ab01cdb818c1a646b5eaae82aeccb6f3f", "0ca2975e4617ae98bdcaed48a23a5cd2f768cb17ab78c93f6f155ed3e1458f18"), ("1ae16ba0329664f6682087ddcd4d91fcb47f00fc4c594b2db2b8383c04ddad19", "2ecd7ddfa659083ed6d404c482805199e33510dfe09e4dd5cc1b244bde1bdcdc", "208c109266b475da340053d6076ba935b30a2166e56d5da4bbbe643f929b7938", "2dea3ce314645f4ba50bce9e003c1fed878a447efaa88c51fb1c1ba595f3d8fb"), ("0c7d3e7e198248e29b1f2157a5b8c5b5bf929c4483b805018cbb93cccf0edd3f", "0773fcf75176fbb8ae276519c5e2d8adc8f696b77e6ebbe86b42240ef06ebe77", "16e1285b07fb8d4c8d6f81a50845eac0334b8ff51588084c2db1b03e4d0d26b8", "17b6c0f96f88162a8094225827ca4142a70bfe2de64672d2c9300227b8fb747d"), ("27d55f2dbc63177227bb4b16e3a5a0abfb820fcc008b672e1bc204f644aa399e", "1b2f4025f869e91e09d640ad5c77590002de94d84fe99477cb5705d39b225fd2", "1af91e35d07e25560de2ba5749a6eee8e27ee04695fe0991ac2213f904db07af", "0b0bb7f79cb19908adeafb7f50d19aff18c5b8b45e9a73e559711490b2bce495"), ("091f25bffed375def51eb0431c77c37050437013da264cffc2e00026d7abdd43", "11cc987a4986d01714a3da47aacd0f0f1e48176163d4d3627e5755fdd32c3dce", "290c5749573193a0c2eb173e819387a4e346303781d551c2a1cee648809efc2b", "21824c6babf19faba397f5a7df92b3a570431856e730908db13bccc9d4656d12"), ("27cbe8dc75c7d3b80fbe255296d7bd851d943347b09d1ec542ad5fed8bd8bc90", "2f461efc33155e02bb8e200dcebd95405961b72e71008d77763dfe90340510cb", "1d3d0a2008705ee52908adbc8cc944cca8a891b3caf2c4b8ead49d379e44fcb8", "088b66c22e76765eb28c5bc5e4d0006f21680d0960a12a6291f1d6c72b929ce4"), ("1d609d926ef8e49d0007dd760a8161bb0b10422159057079b79ee9e7b5bc4fb7", "2c509320d3579c688174f62b2cb01aa683bca1c55c6b535720ae30a8469c9a0f", "29ac092597c2cb521ce6bc385ace4d20d01fd85d502ccb5dff6689479dd294d0", "17826bee6ba48cacd9df20d596af21f3e5d9fabca6daf1a1fdaab80fbea00e07"), ("1039c56b18726308650ac79396d0d1333548e6681d5b49b6d0d108f526e2a7a0", "25cbb51a6ec1a7616c97bd03da67d0eeecc9dbfc57a1a78425c85d612ef57e21", "160b37ed220871fadd347bf1ffeef4751d0f1090b9dd72ad6bcb0e2e77d3832f", "026ccbabbd6bb71a248a974e07c63fce7584375e4c79c5f81324d685bf004d4d"), ("12e789e58bad5ff8a3198cc97bd3a9a4f972877ab26b22d1879b0696767c7f77", "0cf8dc3fd5cd2b8b24c91c60fd66f6e55ce6c69b33b741213a668129e30e9597", "05f8c818ff70c1ea9a51fbc89d93a62ac4cb7527ad0991844ff2fe925098fb01", "086f3dc79920f1111d9c19b0d5d914cc522e55d27ab64afda201363678e85374"), ("2629a19643d3171c256cad6405466df5cab308cc68bb910757a4d4ce8665a07f", "03f9a3eaf5fef71cc0e9e0230cbb68f41021d6073e4a784cde6d879414680f11", "12df0194aa5b095ded8e0a8a043f0085021c4194473cef6b59f3f0d7c5c3db14", "01110465f4ddd6068b444e8308e716dc8007a5e1aea75550e83d1a9a0b413e68"), ("1ed2efec3d6bf783117d528f85817c22bd3add12699628c823b8927f5376dbe4", "2edf2e504411f0e98bd275715c97a582bc47e03469ef50ebc190b4ead060a59f", "19a759d54ed08dd6ec0880ea2a67d11c8f603fd760a223f57c9bb15f4c0275cc", "13a08fbf27ade778523797bd424e218bd9466ec01128b889b53055ce2522e26d"), ("11a737393f98dc3a24d8fb8e5ec161a490ec09f9c397e21b9e3cf0b44e0f68a2", "2ee288f7c60a44d6b4530aa63634dda22a3d8410fc826f7fcea1de9b378de6d3", "0b2da78f1accc10860b0939bf2a2e1868867929d916374cc236ed4cd058d16c4", "29c631ce0e4efd9c323bb8da3fc26f3ca3201c7a3e6c55a3b518ceb77c534f7c"), ("1d138bb3952ccaee8618b12b421d01f0c7456f8f812ba1c45d98bd7f54eeaeba", "2be67e0b3b30dbec9ef2ecd9494dba3512e08e583b1626fb06812b8fee166495", "17fac684728935e8dcff6ed66caff008fc12b3ae91fe345ea88420586871f412", "1b810979c05bf3d4abcebc795dad9a1bf61d241ce0bdb56c87eaafb405a2a0aa"), ("158e8fe71104fd40a15474efb44722cf21303c6b88e2258c22b8f2718232db39", "236655f475339d60fdcbfddd4462f2c649efc89af48dbb7a58599814c54f17cc", "2b64b2a1f8de78e0056880a0f84cf0d9bc7d8797979162a0c46568d63f406bfb", "09be0452c9f12acd897444524fcd02e90927883a894dd0295162d2ef4cb5d11d"), ("096454eada40f16e88c5d043096b18ac91e9b5c22af26c82a4a6bb883e0ce23e", "24246327cefb43bde2640c6f96ad5aaaa2ed6e09512b0253b96fb179bae9ce1f", "04b5d71db6aa0e864dc79e9ab0df3ac8deae753b2a623fd8dafcd213f336870c", "112eb63c72e857eecee274c08fbb31650dfa9469b2f0e7a9132e8e36acd43ad6"), ("24e368c682775eb4a22ff73b184a8d80958b7e4f05a9d9164df792fd6ef13a13", "245a7acd762b194023b23de2c597518ab02e438c35c0ae4db3827851b3b06f95", "253868095555e0e0e846a8128813df9d92bff1b4aa2957f0cdffe3122822512c", "19a391118352abf8918581d4ec8593b96c946c7a22c1664fb05b944769714e74"), ("1bc357147ae8db9299e92fcf2849c680a4d0b06de86b758e3b9c59282898b44f", "156f57843dae967040b5876f60b489753068932a3d11cbab7a26087c9457eaf8", "209a3bdc5d0e1eab27527274eb4b15149affac269681f81bb83fe96c0bda4b4e", "1e47ece26daf25bdedb07897f317c773f7c770a5da1ae93006efeaf291ddc719"), ("1340a76a41bea3268ef1156b7ccee1c13d2bf8be9ac6215f78df8b808a8311ca", "154147c65bbe6bccb59eb2cd1ba84d8fe359678e7c923f6d74392db0ae7f528e", "1f73bc877c8c61d1fbd5ed96ccace0c51e8e94a15589a86a0e0671f441ca9c18", "03d8b38a955e31ffa2aa4f9ed99898320af348be1940d56f56de1b652e8586f8"), ("2c9ffc5bcdf5108f7980b9f9010f0bd45885468b3e40c4f710d9b43474b1b3a8", "21c0da8252b6228d3ddf55d93e3417452ed91ebc39dbe4cc1f819f035ac3e277", "0cbc62d4e5682dedb960ab416bd8809b67d966ecbf8a2224e145012038e95ada", "301e217e3280960d20f644e5b0b1aff0c76079053b7a442d6a9110fa1417a7c1"), ("25a340e8561b906e9858e9b88ac038b0b806e31f76bc86a43f142a8489e06f1d", "2c46d782938ebd79b827dec9258e2ea448271407146fee38258f11df98bb7df3", "1450e05ff3ed0461e13379259d03890db928a44d6b288121980869f9810cbf57", "219ef11593d22150f71cb6c381d61b6434bf63006a708fe5d935aaaf9c6e4414"), ("278275e5d7333ce3bd14a59f9bfa1a30f4e5f65f0bf7239cf28b17a437878606", "2f81a836c7d37e86700a6e58b14c1495a8d1bd6cbf9f8957040b9463cf31e1bc", "235238e41c4a0505c04140486813c7bf33edd535eccd1321684ee09dcb6ab083", "17d9bc57ad947fb6caf6cdbca04eec08e38e4e26376cb941e0fe4f041db0993e"), ("2eaddc46d9faafb99cd25d74295418690ccccf955ce793fc114a12d306691c9e", "2da45edd3ebd44cd8e258ce0dd7cc2c24ec7e2a308ae5061bd75b3269cb2dad8", "2e524abb7c7ebbdb7c577e452a9a4aa46cd0da72ebe1a57fd729789223f25164", "1429aaaa25b171661253460140cb0b40625ebba1ccf87fb40c55f22ad2ef5627"), ("20a8f23b8446eb217b1eeb70126df9e53328ebc391807858263067d798275023", "04bab142a6cd08f1f32e53de3f23ec67ce60c8e24271383e903c26b5314152d4", "1617a87669ed0a574f7e019a91f6fd84806e39eaf561f522a43b456862021fff", "2c6132d80b12e16b2d869bffef7e6701085c5ea0da31c464b1742b66de2062e6"), ("07017e99a377916f046f3a3dde0d744c4c0ff67e4c35fc8aa8f5ec498c1a2e64", "168896ee1864c525900485117fad93f6783bfc5aad4b2462890e4f263d02bd57", "0364bbaefb42769dd8aeec57855096e6a66174903746af422b261ca566e40c66", "1acb9465967ca20e04bbcac53717b53ed71d269eefbfe48c8d7a0d777be3710d"), ("20adf9d09e1e4b241842a03a99c8690bbeb5c28fd7fed42ce3c64c22331c581f", "1ae5b926503bc9597e1fc423514b36829715dd79c54ad298af102ff8536cce72", "06bf1a723f544e9e92446abf288dbf867d872d26da69a621aa3676bee191f403", "12103367b86adb4267884e34314f4282fe7f375f413ebee143673edb9e7e8e33"), ("096ffe74b99de81d02b49b6b63cba6d584ef26fdf51681594f70055055b7f37b", "2979de952cbd2762cfcafe36ca657cc5c415fa9822c627e39ff529eba88eed8b", "0fa3b5aaa473e322bfe5e78512110c05c7da111fb5c3686c3c8bc9ae0eeb4eae", "2c42ebfc4faf449fe5dcf32d7a9094c2e87833fb5e2c9d7327b0d3c228133d66"), ("147abecbc4dc70fe54c84eaa901597200da4a109786428428dc404fc8c40b1b7", "2e6b625434d1b4c3306907002141356811c568f5f08448fea40e9d1d377516b7", "09e4353f6988c4728df2e62a482cc195504fdbbbd023b1f9545a24bd320625f2", "0e1b4e909378e55beb7077189f2e1048f6c38e4e1409db4c3bd7ef814b7f2dcd"), ("009eecbf9ad7c699c4674539b533cf107935a7b4c564a5f699d9420048d7079d", "0fb28f5dadec017a64b2fb04d7c45a637576be9b2a13ed25ac876cb606085699", "2d458bd6fa5fad9ea2c64e9fef8e5431019c32ce0d499ab47609c199de946a43", "0e961fd3841cc8166af6c194925980b977776f8c15782aca55898c18b028121a"), ("2ad0a20a78f79ca9598a91d9abf23e60accfd5e4bcaef38b07238d3ac0e0a779", "272147aa2765ebb0fdbec1838fc8bbe7729734a64a633cf01b6571101c4c0d82", "1331f9033d29260a112411fbe9ba8b71541fdf9a1d31695400380c9f0a33103a", "2503550bf8f224f759d46c35a74390603f5960c7a9d11edec0cede91bc6cb08d"), ("280b95635b091d9a169631584cdf1bb4cedab49d9861665deaff14711cf24daa", "1457c5ce4908aec9bea5a6845feb9e63a35aed77ccc3819acbc128fa57a1b578", "05958029575a197ba1a726cf13ef05de33b6d3fc5856f50a8322203595554ac0", "29f40a9bffb5d62cd19c365500ee20ea255dc44a6e245c7e24ab4013d6c951d9"), ("01f33720fae755c72599bb31b85384214e7f29350941818c6276ae1941e75598", "29e201c836f5e4771aae9476957883b33d663e8a9fd72cbeb49d59b1f6a82905", "11f343ca90df257278c469c7c3957a44ef6eb070539bdad64e75efc4b0b46c62", "0d94087f302ca0a21663a53c2bea54d5c1fd7d5bfaf981a0c1e002039df3ca19"), ("180b464a6fb8246fefdf4d4b2abfd237653d42cef5a132e71e9fe3899d8f9661", "2f373fbdf4c95bd3ec75575d4134d11530e96421012cebf0c16a7a82e5c18ae5", "0badb61c899baa93bcbe3af00c0b8463a06005583a0eb1bf2dd2b0782d4d3b68", "2c87df4bca86aeb75e84cb37b6567802d28745e025ac25bd71f862122cbb314c"), ("09e40dfa2abc69d7b7a6f089f55b9d15bbee5c5c21b716967e8a00d7ec3c8457", "1bd7b5d51ffa5a3b66e6090acb88ddf045423987e92384ca7934a951dab12453", "182fb74a366875021c5a17a002ef6f256a8541ddcf307e7ec29cf2cd5f939fb6", "241247fd21e65344f1c74242efcf7d4264c3e1cb56d888173e56713084d4a1d5"), ("0ba2e4731f92b5593b67acada38a319c0a140471def2ea7b05b96ecfa15a3eee", "23e5d21fca65d120f2a57ea6fcd656a6104337d5f783b062c269d2de1f792874", "2720ff7356083478f085220b3fe57d14b05b5713150f3fc152473f18506ea06d", "1a56b29452dac467b4bd107a16041e4fc723fe9e808e84fcba6d5c7551f1b6ec"), ("136c9caa06c1bdcbe23571ef9ef85debb4003be9ec3ea8550b63610d9a61238f", "1ed4150265b42944c5540bbbfa3f7ca7bb84aac42920dc8088e620822cca8bde", "2471c380c18103027359bec4b220de04fe5daec5b4ebcf5d7f47b06f0dd65938", "18af4d83b17aa4d2b5650416e412523f8b1b2578f5823932ff9f32fec40ff193"), ("071fdb43abae36ee15cde7a2078c94cbe093848144177c719e333cc1bf576cf7", "2f349583a7ba7411a0138d2249639f89b148fda38a6eb4deef6a0d4c4f0ec097", "1652ebad24d998fafe516f50c4bfb70be72c437cde30f897bb181a34d55cda8f", "158da222c3f40f564f6f0a7d92e2fde5bd0a1368ae1c995dc0950690fe4c5382"), ("1c47434879b97945c77dd5d6ecc6e421b17257a513130664e9b83871048726c6", "270254e8c3f67e1968de2977f90882c3b8957e0ca05e681ba1fe16eef03f07d4", "1c6f505eab99c20cf9fc64f70c69529ff9b3c8abd72cc6d1a4367145a248c5d5", "007c639048135a831fd428a26615c28efd7b9c7e663ecda4b82de8d83c3bcc14"), ("03269cc04ef3fb457ca5b0bd12c8987930e136c4d13bac0f7c3657418e3157de", "1c65b28af8067632069deba7f3c0f7be82573334a3662919d1070ff11b868b25", "0e6be3f9cb90b47774a294370c0944563443ce0d012c8de9fbed67c49d2a7f35", "21879d89b1f76432d47dde4009164ee34d61c935a47f1eb6161eb69b4a730181"), ("11fa40a7b9eb0929173ca6cae76fe6bb77c6872af64fe9c4035b385afeaa2919", "1b21252bac9fa345a26c551d8c10a888d5b4eb3e31b72b5c104c8d58cec1c62b", "2ffd242ed9b55bec69722388df3075b2b0a9514a333bbd027923e90731141e5b", "2c97d9b71ec86d769914d6e7655d2c4e727724a3565e071fb611f40d667da7db"), ("0b756252d4d6fcf449337ab46acc6d49a1be367a3ae2804b7e228aee6adcfb61", "2263cb8a000cd12eea261548aa56e762d3dcc5756bb6127da9e1499840c348d2", "1d3f46239c75998c7202a0c116d828be198881fe8203212d6f443b063789b1db", "284725bd231a82ac8c3491c2ad761089f6de4fa6d28956363d64ea3146ec4f57"), ("265ab8c9549333dcf1ef904f4e0e81a2feca4d0de2a2b2e30b76acac067d6254", "126d5a62f110674380dfa713eeaa024bc6535cae46270c630f4698a1e8679c82", "11c3c22b88f000ec52d6fad2c699266bc56cb2d81577ee09f4741d766099cb13", "032196a0ad198aa98d98960960e8af1f601e104e0153e5af7197290546242df1"), ("119d6eaf64a5765a4a737fb9d5551eee38f620bda64e2e4ab46453d262590718", "1d92b758836302d4a39735c721ba031f02b2dcaf3551c951dc68a9b6e8977374", "05367aa3c212058e90a0d477967b8effcc7810d1604f4d720a57d67fe6ddfdc0", "12966ee43dc0223ab31f87f16b13ccfaa66f1d4c703fb2eb5d876ca47aa98fba"), ("0a5e367aad33b7f44c2f55a3968ebf2fd46c83ec8f90e76c8f3539091b6057b4", "201cc2312d757fb22f6276db05424547af92628cc9affac171dc43251b5cc4f1", "1669b9ef1005a2d609ae72152e6bf88c02f63b535947feb30eb7bc1abf0974a9", "0d28f8c2279a72c13108b1f12df01c9a6408e37a24e1826b84cca0bef865d0b7"), ("1633106aadd7f310ffccaa72d3f4a9694ae22bfe3a935a4b1df4c39e782d28d1", "1f0fea107799116b701f759d572466859bc8a6fabf3237e908aee592a31ff4ee", "2529d186beb1b611723e4cb98c308e84ab9658a0c743dee57cedf1cd43c3cf9e", "0d782a1442bacaabeccdefd3a5060834f1f3fcda36a345ea86d5a299172c7acc"), ("0e1eae6545d01b392fc3b28bc40b558b6db21c30a7cecd59b86a0a1e68cbfe28", "18846b61463120453e9e00da4e5de4df69e80dfe4e5a09afe403fb629ad1faec", "07a37c65699fc399008ee2fe39196c3d23d083a0bbbc88fdd0b73c79c773d13b", "2209f0039f547af7cd94d527721c318f630673626ed1006f94cebc99c1542811"), ("09fbc07aa03360e10520e2463f8e744bae874e22618fd355bef50b42268a67ce", "193456762047bdfc57f1ccc134e1e64dceb450f39f995e76c1aff958c8a470b8", "0abeb89878796828175f4b8c46b61373b6f63b7c757d9c14f2a252789c5ec804", "2640006716362555ea0154a88a6b5a75ccc7329862c0036163128b98383f5129"), ("2849d112385990a4db93772b29e88d3cb8fe9e55b3bad76938c1b726ef3e63ff", "1adf292c9b30d7501a0933fb0f4bc65338578496c280066e92d968e7c4bf0dcc", "0fa6ca932bbea7c984d7a137b48b847a66e21b56378beb53844ae1dd52a8f400", "1865b5bfb911a7ddb1138d21fa844a2fbd952a01c685d48507cbcdcdbddbbea6"), ("176292c5b2aa18ea294963c7a94a2a0bb4b088ac1c15930b9689bba7a409dbc2", "11dc879c36f2d5dbd6fff66135213ca1c88a65a842e848a0395d40d851513515", "190e5800a14c005efd977935dbb452d76f51c0d879aa3aeeccb2ba0b1f89c75c", "0d58ee9c44e9f938a27c506f8b0aea188b933d604ace833466c92d74768d636e"), ("0b8914f2708b42a854a07b79b9a331bf5e4cf8c816dd3aefd396ed74acdb3458", "119c4d05fc8ab8d677295aa7bf38dd7e1124e27574e785195edd4c7c21707fb8", "0813c7f55d97fef4696e5f661987f6dc42b90b74bd70f833ad5164bfb4d998d3", "24878a73bf8fe78e4526ad0e17d3b8a92ad0809447f614825691fc191af0c761"), ("0662413b720098b6564898fb726d9ce4c55455ffd4ab41e6de81c0125531d8e9", "06410bc0b6ed1fc278656798b47e68d63df43634ec0382ae97743a169f57d768", "081e74bb45d9194b8339689c872dff273f33048346654b808ea6df5076021310", "169379b75550a9e6588d604d3f01909d51da5f20227894b7a0559e662246913c"), ("29e1af62866840436191ec836fd7cd5e3e06d5f3adb58522061e22c3620e5185", "0e262a1c6d5734794157f4f1f7f80742bb942701769aeaf431a71e42653445bb", "05d2c4f2a610a617617c81861c6760480914cb4ca8002a373b78fbc0e305be38", "2695f2e3350fd16753a10c36019edf27701390fc9be77058ac56694cfee59ee9"), ("2ea6acd24453f4d533ad2e1afc85a811bb449b3dd30b081a30cb4aa1f598303c", "014b66599b273e2c82681f464bd01a697da6c00f98c968ee6939b05f1cc0b8b1", "1dc37a8277c79e454daaf581f75630367a1acfb4205827db51a0eed8b4ebe19e", "027426129fc13b0c5be97cdec1c8b7a3fbea0138c7d64d94da792f21c882f0cf"), ("0e46e399bdab01616a5539465480cbf8dfe9344ed85783cd7cfb23b1f2d9fcba", "031e4771778b4270db17121f4d1c8cf6bd2e670a2947b4759793f3df16111839", "275a50c5b2597d79b7e88dedacee1c407e55b14520047aa6101ae9d129b12f84", "00fb4f966046953438257cf1936ca69b12abc0428494036fb1683c5333b4edd7"), ("281ddec8fec77b4c2384b6eefb46701f17712aac9429aedb8b8f3ec9dee0fd4f", "08eeafd9174c0960515f239932a9b695aaa0e9e0f598f0412b90cf5eb0b86ec4", "101aa6d5791358c1ee22e6a64e7d5ab20b23985f5bcb444f4df1b58ac64c85fa", "27829f5fdf04b8213034baf675de6cb0d62b03bd2406b984c0d96d7d01887ed9"), ("2b06daa184425678ed4f9a7b17fc51edee84ad726125e9457638ceb6ea86cddc", "16741e8ed40c8eceb9c7190294ebe03079e49b1569f6ab901444891f7cc3271c", "0aefbb0572024dc5047131afb78c8eab6e4cee4ca2b967643ea32b1c6bc49ae2", "0cef060a12f33c8a3333f450c89c67c58598c60717a80550230e3de99e3ddae0"), ("23a572af4a1d22decb3478db47a3e1f7ad8184c4d01a15129c84af1f13364012", "02f40434de50fd261eebedb2bccaeb63a4528873398768be04d81f9fc9ec7d96", "2909f2a658f9bd8d769fc1df1288d3200abaa6e97094bf60547666fe3b6d2f22", "12c0d75ed555dccfaaa5feda789cdb2f6a264c945bb5a2819a719df6354e4345"), ("0e9528978b2686aa80e5c0452a83a539c14d612d2ee21d6467487551f9941c58", "231978654ee5a860617733d1c484bda6e7893e08c7dafe8d5484979c94f5dd24", "074de44262334ebb3cb1327e82210fe3766186f3474918caa8124cae696fee3f", "19260785ea7d6e43838571f5aa1016b70699126777ac5583595eed92726ba259"), ("271b7f0685fc1172e08352d3bc51fde5c04a53892f764e5874ce58a35e2f1e72", "0a927c21f4881c1d7967b0bae52a78f3cedfdb4caf879f984bb23adea087fe27", "1e7d36d1e1a6f75abc831f561d8fd44d7d0924e815075f3747a984c6cbac3af8", "10723e4d43ad56700a5f5d6cd91a1e1765736c37aac477f19793259d6b17e816"), ("1229c2abc7dcebb4bb364ecfdd95c6889553b22b628363f7dbb42a3395f5a22f", "2a6ea5b32ad29a07ef9b11a04367c75ddb70ec5c815f9a2ef1bc99ffd0cb1268", "07d99e0a6dbc62176f0a23279fe0de62f62b68c72998905dd56b0b2a7852d802", "03d38320f20384169d9e65778de3eaa60fab2db8eda0be121fecff9d623e1700"), ("1b26326eaa4d207470cadf0edd2bd251ed9e9930ef9afadb0f87a979a14f9b48", "1afe13ae076fb23e8dad5b2ef71b473aecf761b7b31b1adfaf3245bc4b207ec1", "14704ccc28f898dd93f2448a66849b44bb3ea0d86d8a8f1a6967209e4a1d0db3", "2d1ee018b4a4a2fba2b320ad5c5d6f70004e6c94523657b81b404f493d53865f"), ("11e0584c4cc3f72db487fc9ff8cccd33296553ba26831221c5f29aaf2d4a184a", "16607f453ca23d0160ab047c35c4e3067312dc4182afabf9a531936847a8f569", "0e5efa620df93bca0054c6c9741446fd383f7d15ea802c360f5155210fa1f1a0", "1c866d767360928e130bb91b836126dfc552ead1e0b6547e0dc3c49ce4091580"), ("058ed51425442bc8008ff483c2c86e2f8791facbb2dda826c6f8ca744720ca8b", "05960ef8d67c6a649ac8abe5a424ad50052d7f4116134dc290bd6522b617e69f", "2c80f07b7dc653d8e2a83a738dc9ec98263e35f532e7a617766cba4677ce5765", "0c72cd9ec6e4ff32607ffc4dc66f0e7b13fc28a1e81d0e1c907a183bcb67b46e"), ("198e8ded65eeb92fff0df2dbd57251a807e98834b28bfe91537294a94775cc57", "1fe67f51c9ef7fc632f23e444af8c74f0faf97ef8d8e6c5aa587becb00ac4b1f", "2381a96bf830dedc4ceb99faa12b1a79eb1f57f85c4d40357761c3fa84f2ee61", "1d1cc16f1e2d28cc7ae4779ba960a38563f363cad7a01c310e2a1dcafab45c80"), ("2897e170f4e1563ef5be1e2e38c6be525a5f1a27bb98382da71ea42acbb35b1a", "2a8328f7699255c0ad50b43ca7faf48081173d52574ea9c046c4aa5a248495cd", "1e9287e347f4d384017659c4e3e7de55fbb0ffa505049d4623826532783acb66", "244a18aeda239debef393fecbef2d6e7100c945c8e5d93f69598bb765b25cdba"), ("12e6e48cd81207b04b0242f50fe6370925524d031d5ff3d725d3f006930de5de", "2c5cd878accd1c8c94e47660fdc1988227eb7dcb9543b00bbaa3c376468b09d6", "2539b42d4ec92968a42f009b23cf921ef9227ad298a753633b0ba7cb5bfed12c", "254ad786b02a6f530e847ab10ff7e2697dc84eca62062f07b35f8ad020118ea8"), ("29f07b47eebccfc8ccf05032fb29fa42aa90e4dd895e846389115d152058adab", "06d88b6c258c66d0ef116296547c62350b3eed6460ec29d76a5cd14e0cc2818e", "1d681cf6ef1e316398004868dfb526fee8682aba413837be3ac9d179f56c8089", "1aa6e256a05505961ca6e0f1386929841d7c9291fbb5f789f10b6f488f321d77"), ("0f0281503023c1e79202bc50320bf915569c8b78ff7be383f2a333f97c5e62d5", "28dacc49606c818e9b0ac8248fae6500346c3632f7be06f0d0bd80b146743d6f", "100871b69b750496b003488614d5154f657a28507b57f82e2f6079b529ce1d28", "1c0dc37fb9394d640015b9a676410c8ea35285c580d979c4f35577da732f357a"), ("2dd7c32dc36ac3e24944317af4d4a9f1ff158aee8874e5a60cfac3a176e0bb06", "1867d72a863647ea4a900c8f4066e2a4267b1d67c50c8416bddb0e067e657e2f", "21376af1516ea5cfd5b0cdb550696a141f3483e5af2c1cccf8ba481a32749403", "165087b7fa8c7c94f5d650d9e12eb2abd9ada4827e7f669d7cb71c266934df31"), ("1c5d81646c513e189a03c32c58dfc173b11302cfe458db1ba1fb5932f9e2af22", "27890d12c19038024e2923ea0cbe6f4b2a9003bd119a4de995d018354749a6e9", "19672223dcefb284df5fcbfa9091a2e7b3901e0f795c6c854fc96d62c1e88573", "055d32e8d133ff8ac760310e93c6ee896364e1b6c3c11e7b69f6f3d126b8b395"), ("233ed400f02814671d0641f784d4168afe5ca476b242c9a4f29f0f6109b41e35", "04e81543591799f98bc36045e482e8fa97dac85179ac56864c8a8e52bb199058", "0400539dfbeb0d4e324ae873fd1c333d58308b541f415f0134af9094d3046fef", "2dac2328f6d0d9718fc29cdc83ed95521813d14bee0094a029e0c8568ae1c76a"), ("2b218423c77c008820da9fa0a86943c7b86fd4bf502195ec62653891c306bf8a", "2cc8e8c2cfbdd6ab614c97c5f3d7f6a0ed8f253f16c2f5ef632abdace9931d81", "29eb95cbe839c674c4f292aa2c6f3fe724b56cd1c1d4eba84311e0ce8ecfb3cd", "0b1e31d01a60ab78299a1fb22e847e78fbffdbe76a0cb8b76e6240d9fe95371c"), ("1d51991a236cd1f200f75601d4a8150478fc76582eaac691e447a6ea291b264a", "1fe1ffb3c570ad6a1e711fb0f2ae1407bb13d582ac45eb271399ec3fc9b8694a", "27368c26bc6f131651ca20c13b5d08c705f8bbfabe9c74e7221f0e56ee6d818b", "2fba0bce0671503d9f47549876fbf9328dfcc64397add169a562bc4b2926f4bf"), ("10c4add8a8f1d7a97970272dab3b4052db8cad28771716eab7ab54ceff753b79", "1ca512ec06eb72514d986ec73b75361ad36f224aaf54a489e30cb3ae510267be", "17ecbfe9ffc2a8199110881c3e363023d567b9f151a167010cc3a2c2fb12d02a", "1c4af2848b19e602c8461e5791394632f2b835f182cc94674ead3d60f004e520"), ("184fe654d6eb057b61080c6c08a84524b4af6ac24a23492e1687058832d4aacc", "2ebc07cd216d51aa6af09c9c35dc74b92308e38dda51fefbf613666ea2beab57", "0f0da0680231960db88fd22705624bbb14b5c1227f1c0ab7339d4d2097bf8ce8", "200a2bbdc2045def690c2179d1fdb57aacebd96714e658c148d25f527378629f"), ("1b6ba2e49a4978f4c413c54608978bccc31ee65bf7aa65a1b20ced3148955836", "27e87de1bffd7bd9e3ca693a9a916e3af047597868b51cc0045ab7f801b3c245", "10b19324a5455a8410ce7c08b54acc45c62d2422f613262a17aa594f528fd055", "2c2cd69b29a678ee212371c4dc61093e38cadfbe083a96593d3f713add7f8545"), ("2c75cf85a2e4320ab25f1fd7fcba668da61b674041debed489a7772a3b123ed1", "209a55dea4291c83b29a14ad93f94fa8c30465d71fece4a96f982dd044466748", "1e4cdef5710176a50ceb4425f46085a8a3661d4566d54b80d9dc3bbaf9f16c09", "1c7415c160a1551518acda400d09b8882fdeb57701e06e247f8298eba2792b94"), ("0ac9e9db72a56b62c828f72bf0fd24fcf0f945ed4b1a69db0520cc69ca34c343", "2563e6bc472ea3dcc6a4641c420493462f47414ddb572ea581b30decb83af052", "09827e2316488cadeda5f77a2df5a5ce203831481d02a58864c5824b50b7c6ca", "2c98cd3d762a0cc22640badbf324720fd49eefd9096aa0d1fdb696778300b3db"), ("23fc931c90b1b9312b8f825f9be1fb4fede422961aeb4cf686f67a5204049338", "22ee7edca5e2168dfb08ddb21bfa3d2ea5b626ff6695152761f4d58f823ab6c6", "2cee20b3e14d9d47d9476bf026092be0f4ee7a5803d66b3283dbac7512b36c81", "1cf0aeb2ad9745b317b4255e6ff679dacdd0f961d2ae182f3c171d4631123600"), ("0d14378299b9fe275c14f48c6595fc5cfff56d2277719eec15a09484d6466fca", "1bb9dfa12079909fefa3af2724724607273d78759d594aa3f78c0f7c9d35adea", "2344b6e3b96686427571eb081fc7b197779982c501ac7a14d6cf7949a830a9cd", "01d992c9f3d76ea5f9067db5bf1b6a68727146b86420eaf0afafcae380c4e232"), ("1e99c5102442f888efc08f1ebe212fb60a78464a15f27d80a2796595f623ee78", "0e6df177547427d6e6f6bc910e0115331a538674e705bca235cb98abd3b3efe0", "135994d0f409b77460bc7ae6ede22e85830067344b0be9faced52cd818fe8f70", "01ac0e849e5b8df5471af4beca9c453d6736149d3b462d83671397bb38f28c11"), ("25a31c95570fd8ee4b783bc897ee3f2ad63d0db0325d01d0d4c5a7db8cb0fd28", "225f68d7e9cba75589b4a325a079859d3f3106e5b2055c8f2f160855524b1148", "127aa864041e09b9b8004a0e81dfd73f9f86da4221952145605c78ee1f374a83", "2534f3245f416aa54bc2f0b428ba401cf8f9d4169ff43b19843a2352843321b0"), ("1c8ff4a2584d1de6180837190fbc99c37db6734bb6dc2844db7b8897bcbc7c5d", "122951403265324306889bacfd20722743cb4a53a525f2133780fa627803d180", "238ab9a3cfc7adc9975353661d2e925b3ad9b9588838bf64523ae4037bbeb13f", "05eaa2680b5ddb1af5045c021c64138aa6aa5532c250f2d0685246121267cacc"), ("2f4abc68768c69ff2ee4a8afbc27dea6c7ec9f8cdb3c82bee00b2ea03a87c4bc", "188414eb6f23896cdb0e56c64f2c45fec9e34e9f2a287381ddc0a0a03e9bd426", "1f1a686dd8a9156497fa0d4b7a07db13244eb0d78510d57710d792100dcd09c1", "073279d3d5a85086d28378a89fb27eb3b529512c4be2624c59bc48c384196158"), ("13f58d609a20d29052b6429e5ab014d83a87490e5cb090fada9342a233c3b114", "0408313a8f245e5e712bb9ace5a254761b66994da89097dd9f37706b1cd5921e", "0f4a825ed88b3b41ca890d80259af5264a98bdefb5f6bfc04e5c2cabc1a2f40d", "0462e35e185785347be73cc74ce289b4d9a91d14db7cff01af83ccf91db6c074"), ("162392190c12554f08d973c52e311a9bc5f9e2cf1b6e0303e326dc54e470eba0", "07ef877388abbba5dcb30066de79fc02b9830c3f96bbd0c17ee147f006481500", "24a0ae662b43a935d6345f146fbea67ef7db08215329df92db0c900477e07296", "1367968107365b27bcdb82d1df674ec6c96627a44013a831607ad36b1f6eb9c8"), ("26f1c999e23c661239119ae4672517f3fa8c47e758164668d6ea55836f34001a", "1f25125d7230ceb51853e7459e2b52b28f862ccbdf4579522f281bba5a4727b2", "058d22272c72ed0d37dc496a7a413799d35745dbdafda8a09030c4490c213ffe", "0c3b95163ec41a6819728355b6d0632e9c8d78efb822491f7c2ab07bd39e457d"), ("287403c75e0ad61f466f004c75c766eeccdd89e36b7f220c105f82066b2b6367", "0162ce4fd2d07f771f43b001d84310d39ac2dabafe782f2cdb7662a59817e999", "0531d0a15e2c8be835ec3f61d4a9d2917e879851b1e62f717db0884728e7b54b", "1847d6e21caf3285ad4b43580314707d6390521ef479b24efae8bf6346e08f3a"), ("0bfe1c2f69b66ba4bf95fad4b6076348179a61fea702aa34462f5809c05df9ad", "015c0590eb9e98bf1179deb9664e80cf56002e718d9d3f226f005cdc8baa4e65", "177e5a523d6345348248710881723bf9487d6eddb9608c247845c7868bca637b", "0693287ba75b40823729eb6bcb8a833d9f3d7d6bee031842d29789ee6fede732"), ("2df698b1337bb4e98a097143369301d49e50367afbbfa55e3cf1bbea6590263c", "2bcfa648dbf0874060b6a545d6b134d319ccf000fc72878faed8a1e55f2bbc0a", "26c82e7ab0a3c6bf7665889d418cd896aea9f2304234cdbb2680b3a2117a1ae6", "104377135f239ac1a3610ab99c84b00db1877383747741020097b0c90aea9d1c"), ("1e090973adce395a4dae4770a1f2b5a6ba10e9f96a42723da41af07d1a0a403a", "02d210f8beab296af1d0073ac2cd986eba03117cc5b52d9fb9ddc54709c0db7a", "29b103c3fc598153d0ffaea2ca0676b87e6072193f6acc264da4977cdbcad03d", "04b43fd84950305b9f79d6d6ba70cee141d2908b72dd5b4fe37f3e4f6e26d193"), ("23dc211d48973b59d1f61edc141c6b43135d1bdacd8035dd3f1b3dae96d420ea", "0f2b588608fce558e2ba34e83453988096add3fcd7b3ae9fc6e4438619be1ec0", "0bed07c4d21878dff21cfd49b21de0d63c2589a496d378208f606cab395ef76a", "1343e7ccd64545bb55af2b57ec820bd242c462ba9cb3e7112645f126a1c69c6e"), ("25e19ff79d2352243e6111b38c9639d029a4655d1264170dd6eb00db2685f5e2", "2e94fa2162d235df6cb263816d27ba953d84c26dba3bd2a61439e29591d68f80", "117d17d5a8b13e0a99bf191b84279dab39a505647cef8e62b04b659869c85dad", "2fe1d75a46d4fc7f90f9ba5d316324e990a5dd7f7a9b62be227e01c359c9a635"), ("061c25a3d77be417b1c696ee201949dcce3d6205dd53439df6407c0d297791c1", "0911bb49f06fed56593f013a656328e34adb4339e1698b18717179f5b491dcc3", "01fbe26b2fce523b51e2af68276d2a441996eef07928187d352a1ff01d63b2d2", "00c7a3c667c74dad942ace88742611f3c1ed7217d609589f61be0b1548f671c3"), ("0c8dedb1a9e40b2ad7be48fd527c900aac54457f151bd6b018806ffeb31cc25c", "268c715cfafbf317343ff2b169c2d38a9828cd9dde92b20a45640258906b30f4", "09a164a83d4981be4fd9fb74a14a1b7d389943b1f88816e48b29d7cb0d1a8fc4", "007ab211a32e99e35ae2fa82a7f855c4adf3b7e481d908c222d49620ff43e0ee"), ("2b71ba40efcb56e4ee23b0ee719877e2ae34132daab888b474adc743b3413168", "1554b5bf2fd69d3ba925bf580248da97d029227d42a770bde4643ec285192b32", "258eeb1537a5e80c33b83e1b88188c4d37893ad03017ba28629e405304ead089", "29777be45bcb5592bff7778a956fff23d680a06d6993976b9fd1ba9e12fbb6f3"), ("1966fe55ee7b5784f4cd7378c89579d37529005fb65710d48003f2584b7025b8", "223d86cb342d03558a80d0aeec2956c2150ff1d71a50b2cdcaec5fa3d6a53029", "1f29c3af82b2bdbbe537e2522fe650dd469ddab25f74d1f707bcec6949bdf1fc", "2ba493661b5dbe431377527ff4ce5d836ae497c27f7d35422f4671df30877abb"), ("0f76b8b74c93d6aba739ec0200572dddb790e7894cfab3476662ffeb5bd04070", "1b48b0cc96e21b5fe8cd3f45d652c3a15069bef5ed4c37683c59e8e11269ac63", "1843b7aa1d0689450a1fe27397b114e7e21c90e74f7833d651525647dc03d2e8", "2e05d8a151976df7cbc3394a4d960f7c314f079e786e09e5c1d692c675ce6974"), ("0d9385542d347d77396577ba1474d9b6a458a6d12a4364bf36fcb67d38223853", "21edb43a204ba4429b2b84c675fbf611914d01ae80ffd652e654904d50f2ba28", "06f190d7fb91af78bbfd0253bc5a1f1677d8605efb95e2983ac0522279db85f8", "14bd96a3d573aa699ae9f829177f33da2b0c962a8f58d058ddd60624aa153a1f"), ("1abedb18d1e002e6588c730499692e7b1492d3ed43466b3fc7f9c47329cb8a28", "1fccb1074b54c6c8eeac02737079914bb56c8cb9d1cd714ad137677d51cfdfbc", "1c6e93efd367c2143ea37e71498cb46721f8c274452679eee50b9dff5d009837", "1040e2015700ffb295fcf8d2e36e14b51ea090dd5bf495c7d7628280b1b72a86"), ("2a5a820d4411f3b6b8e05011dc641db4829d613175f7b3bf6439848cb247e34d", "149926dfc8cbceb4e85e851f5ac973c5c0014d1235d6b0bddc438601b964fa2b", "29963225bc58089476ccdc90219b291eb97c4aeded5e86808e4e7807bea71984", "042fba1e527cc353d9fd55b82150e952fd9e39853bc1b4e6d68a6fdc6d70ee99"), ("0138ff653d3bb4b9e3b7b4561a548bb25d4ceb77c89fedabffca6af5e7c77a6b", "271ce49457751768d80baa3fccdf523c2666d3461078c89c940e3ca5daf758e5", "135c987041025bb96ecfb23696c4c3799bd0745460d067e5e60aec4eaccb7cf0", "0a64f610b39d7c9944fd4a2941317c8d6670438dd6918da06e61529da23069da"), ("18099b34277a8b5eb8cc2b22ed6a01904e1aa857cf4af4e7fc6dc6cc235320f9", "136f41f261afbd11dc0fd28c72c716f28940b78a5fde3e153c0507ba2cb2e793", "05cd84d2ded35cb5f2f0581028a382768cd0aa7d1a279e8b710b0cf89dea6767", "0681233c2beaf2d6828c8d57c27bf30e29c4465aed19b0dcc272a541c2829fb1"), ("18e0aa653ec9a1177492b443797ad911c8131ae6e6ad502a7ff8b83af47dd33a", "2f9d91b04fa6f7e1ec8217b96c43dda03cbc5e782747ddab7532c96877edbb5c", "0f07c0650e47fc493b98bbadd53c8e92481a1682bcf522b74960a024b8d76b46", "185fad06d754c3c92637ec2e81a85ede705a201085be7d7c4a88f294bb11f504"), ("00e4177ffe9e0ed04be44f9436c3bb06490b32dab5f68efae50c77c58fa008ab", "00f4396016deb077c6e68d37bc642f00e3c70fd2a12e699a4896f311a1ac566e", "06f8d5b49bd0b2916f07f3bb0abb7033f952cbb6342d36285d05b70deb4c9e44", "2554e15522b78744aa519cc90010e8491a1816e9419f702732a7e70842a55197"), ("0712793d062912a100f0892bce2d05b6676ec42e494a1ef2cfa4c14d44b599c1", "27307708d8d4a7a3f27d88499c7d4c51b16a48cb59bdfe5460236b19d42a4ec9", "2791fac13cb6e70a2461ab756210d7d58ab58cef3482c329ad97e7491dc5ef08", "1affdc16b5841cc08218a7fbb43e198762a54042bf60ef36a7df69de04fedc51"), ("13a7e3f21c0cf4c74cb4eca60762cdd8cd74efd683ebcbd67cd16c0067f230dc", "041bc7e56edb445ca927d22e44debc5e5dd1162722d61d9237142720e1b57e05", "0101fe59137fed333476df31394d072e8756b47ec80f9151bab8a544d9ee8e24", "16c724968cc4c3ea2b889e4230001d7ee851be2078e3c1197fd2efdd38577c37"), ("0253ae3ecb099eb9bf6075e596eb418ce316a8531ffc4141c19119c12a8ce3fa", "233f08a0986e3f4aacec260524186b61219a4d0d9c99f45a83f60f86b37741de", "1690f278adfccb9e39ad25ff6fef27ded7f5d8a5616c7aaa31d11216174965fd", "13885a9f5207f5fc098f7c9327b634d17c1480003984c197999c6832e5a59481"), ("0ba8a047b19e39fe9ccf1307ea08ffb48bae7ae951c1b143d19a93ace0f7df5d", "0a3f5bdf15143201aa51e440d0c682ec6d9711e21f0c1bacac43f4e014e666a3", "1af3346f10a575fd3b1329d0f5255ca689700a49625d6f9716d11237d3fba803", "2c4b636009060430731ee1a97bf1ccc679eb884e52501b31f3c1f2fd718eee78"), ("2d51fc9bc9798c56b902112196507eae987e2a1bdf4d038d64b76ee6343e9072", "165056e52952f9c931974a4e2f65fd492fadf2b480d11e36407f435500b6dccf", "26763d2b0b6d7e58ffea7163dc4f3872c381dce8bfa07c2427daecdb7f4508b9", "2539110ca329bc3278ac660849176f4e4ec9d524d3018494f04d8609a58b2ab4"), ("07ae1aae65d0abd2ea9f9a6ac3d7970e41a5ea08fb5e8c7b2e3c17d1ccf82837", "09e44bdfd200fcdccae3c57d3c2ab066d83bbb033fb8f871d967385f5c1f8877", "229c61f6ccc98917bc88ce95d32f75453d4ff5e7df785d3edb36bd0a12e54e87", "29bb11d3a6f40f6f9d5ed8702c720d2639467c02eb93f832a6b246957fe9171c"), ("0327cf71066bd99ebc1946422291272539b59fd6039583ff2c6af8dd53dae11f", "19cfb4dd832e203a9e2c93bc654ac51754ec750a891e4925498255a67b3e6908", "0e61130c74411a1c1d3214b3760ed2f5a3c55f0596d56a0d83c8b64e07a509e8", "0402593355cbfb136f9d5019f0b371f6feaadad0082bff99aa25f948170a7e1f"), ("24b83c5d31279e5fd3e4aa858085aed6d90220aa9f24784c3d7157fc5bf7754c", "21eac97ff9a25f1b0092b7e1f437c29d39476be6b23016c7ce5081c3516f9fc3", "2cd2faf239fee62c7d502e2b3b60d6c3388be2e1990674dc77a892f52320e76f", "1037a9c5862437f10006fe030b57bf8ef69cf8cc726c3856568ce7d49127613d"), ("263125c9dae42546ed8211924f056e9729308ea2cf36e3c1b6141fa818c3347a", "01607a4d6d6ad1bda38ccdf1d08add652d2596fde9b000499c713e82566ca7d6", "0db800824775f4f258fd6afed9270cfd2a256a511c3af6aaee8ca71c6f690223", "29746c551e5ba653e8a5ddb6052fedb5643f0d747ebcd9af0d9413bac7544f14"), ("2508c7bdd3723ed4631a319fa8f5d290fe4a077961c660d77c22b8a18f9c9b4e", "2b82e065f509dd546988288e40498e43caa6b316c189dcb6cc1d894e43c771ec", "277cdc268bc6cb73397a1f982dc994b7f867f1b45c8948736e4238c657e397ba", "19e1bfc71fa735f1f4778a419966d0caaa10e1455b4f75153c560882396d47c2"), ("23fe15cc3b3e623dd75843d95b2e41bc3afbd2cf0603a32fadf51067b7b56503", "137df74eb2c7a0504189beb18fbabc5dfc2e2a678a2a046e63b1951b5dcc96c7", "1156a41d1f2e77af9fc0bf3b6aaad132e6ceb0a513d953885bcd9c81622a23e7", "25b772fc7eded8d6b1fc0d8e631af98de3cfd0200a66830b79f877c0eac50801"), ("0944365b2f2df6a62cc3a28f7284bdc23b34e70d99a299dcd8ed7e4f23983af1", "1873d4bba5312219452277d76adfe0abd7502c8e2f19ec26e68420cdf29d5e9b", "054e31f0e9b5a29c9d18548f2a71a23f4879e13885741f265cc3800e6947a226", "19b934917587d3904e5e93603249f41737c89d4b6c0e4c76392a902da2e3e16e"), ("2dc0a92aa3d23bcca670eb32a0fdf9993a6e4d1f709e1937b6e2b51b23f73b2a", "0d3cc10b063cdaab2f444db7e849489b6a5cc7923131aab5d075de112fe63ebe", "084c427412d9503b7d39980e788924abc39f3621cf3150425ce1ff4ce9cae727", "2000b4858044b7dd9725b893ee51881d4910633032f40ae7cdee375b80637c8d"), ("096a6c0c4a97fafb2b26416ff9661d5bb9d15e6cb2b310b7827a036f29e07168", "01c9f4573d1c2a5bbdd80d99e86d4020d2f82dcdffb20fbd9ea3ff8677e0b21e", "2132f37b88b7723cde4c551f886805973c1768bb6dacba38d9ba1c5313801aee", "15cdf6a3da68e1ad942d2f11e0c382f1a2aeb575fb47dc48c67e9c9227efd1f4"), ("2707478ea2e883e636ba8f20ba553bb0b245c53dc9ee8c0fc479e88edf6fdc79", "1245fc0230b49fb9f270cd58e07ae817c784eea40231a2cc319683e1579d3d38", "19ae406abb6e9b1ab4e6bd65738593b3bbee119a3760ca4d588f5876d453e97c", "28f2b52256bbf5a56c9faa9aef7826f5325e5cf8f260b2f9339f8325d4b00d79"), ("139c272d3bf38ea7f44dd49bd571e62656d0af094033591c7673019be9b29bfe", "108ecb5f02ecfa819f8008f531fb3ed394d52fdc4aafca797c55ea4052128b5a", "2423e106afa4be5d3ecd4711c8e3d2e7f6213f38dae12e8801360740d6c715bc", "2b6a53105759c180eae75494580c8a227c34c360b769b056069df6ed14ac1f45"), ("13bddbfcdcb8a9be90df686e4252a1ab1f715e9c19d5f7094e689b9bdc45fbc7", "2086e5b013b3ef771397860825bb7932f19c6e80056ebe4c3f15bfb790784fef", "2450373fa22e12b44c94c6c82fdf959fbd72f4460f294635315aa7d8743510d8", "08be499f55c553d0c17f6a93fd47a54e526839da20d6f5f8f809f941cdf54317"), ("16a0653bd7a721bdb146ed9fcb64f2fb9c4e5efc5aa2a8b28a6bc8f48a1803bd", "2562e3d7bfb7bedf96e2db146fa1b077beda240f72d5fccd8e8be935110951aa", "17557a33ea39538aa2ad09aee2cb03a7da1c0db6e8e5a8a1bb3b73e50bcf6929", "092ff63cb25676e3882bd830a1cda7212a7f4849c704cc2b31b39b2fcd279a94"), ("2c6d43720ddb4e7048a8e54cb54b8d9e3c3bb1355447080611c469822dd4969c", "1148aa0b54a045c4be0c5529acb26bbfbb5a1fc5e2da14e564eb770e0daff324", "22fe64a27648ddb8b0ac62445e8c95651304fa9d814d9c0f13fbdeecf7ca8dc4", "0fef6bdeb55fee057d6d2db55398bfbba40cb1491cd541107283f1750d2e7d5b"), ("2c7f0dd1f11d52b1ec873cbbc589cc4c2c78d175a779a329942fc8c70a1e3acd", "06d2bd201765996f32b0eaa1852198ddf542de8101144c63de6667869cf28da7", "1bd258395233989218da46dc1d345cbb601fd227b672e884aaee1ed22fc71488", "0ebb28360129e89c73b06832f0d79f9f7656b284b5f4e23748e54d4abfd41b3a"), ("117e1204faeb21b0234ba5f280577c6295790d2918d212d8e991c0d9c4ce8260", "1a482cd525bf5a82ce02a627444c0b9ab75235c9931f7df3a574cb593e3cd9c0", "24e1669c1506827ec839da3a72568a3a0c899f1385514b2682ca6e6ad2215952", "180b9f9dd28c3140a4889259d2fefa7a56b9ab4e8b28b04c10a2f0c2b606e881"), ("1f7b646d8f9c923620c0ef8be03109bab470706eedea7be6a047bb012c0fdcc2", "207e2ac819e94bc3718125e6bd2cf6afd3564651f56740734be53af4424ad7b9", "0e895801fb5c0b7a3c05239dbcde43c3bcba5c8843199ee459f7bc726bdeb129", "1ec62264f7bd0773b4248e8faa10eeec819f871b26338202e7a5551b0da12efe"), ("19473ac6bbbd38513a0ca3b4cfc3f16b824b70bc627c5a9461dc35e5c531a5ec", "05580bd24e4ddb80ae2d307aca249323e34f4baca2d972d380a7b5b0682ce58d", "01f2ac49bd284e9297114ddcebc45f20969a8aeccc02a071576e49e0b196c467", "2786ed25d0a20ced64993b6513c8432170030ddd8dd43a6298f4a67f37d0a13a"), ("04c549c50bc2c32c774c32df7a13cf9e10f00ac660d7eeb47228b6c32d26a003", "251c78517fad927e0f94c9f6bac6784b892fb28e4106d541eb3d2fe8bd801ae3", "288c29e43d48b86433f2425a55fa6faeea1d3e339bf562e747755f4b060eeaf6", "19113c8a071e5a85e75f3fa1b2ffa878c9974129b3606803f06382c9b636319e"), ("2605af7bb5f41df59d32f3d1471ef1b5b12f2bad4c4e708c4932f0e43b2b18eb", "03c7851d370dfec6b79c7db9fde441dfcc94d10018ae9bae5ee9c0050146641b", "10cf856fca9bccf7d7e35f4e1f71996b49ede631f673805417ba6ba08990e05f", "067b4a2213660f915d171cfd393e71a0e0aa1543a44dcb69d5d39a939c694684"), ("1a1ee3da9e2257d318507b5a9c69e5698f78b00e1377f469d09e2d1814298e59", "0b50eb7917f83ebffacf3d5b8fc289d93c15a4af7ab5b2c03dc65ea9e0851ab7", "03af5a3d7c1b726afd592dd3e743c6cad2f77cc7dcd6ef1dc66c8b2e008f1e96", "01956ea11bc616b1a54ffa0f034d23e35d8bf68137ff023c26347648d4be5070"), ("0d9882534e8008adf248b6072248ce6d153650e97b4dfdc652ea42637f418f31", "2d409c4ad3687620fe7f4e7ad49ebd0b1bfd89a8360b93a509ff59afe19ffb75", "0e149632ce194cd3315252e99c6b0e825be57029b7924594187fb6d6b71a688b", "19075c1bd198584aec2d728309d8d63b875dec75e6d27b01bcd877c38df6c46b"), ("28b1d02c17fa5c13953cb3654e632ffd82e4b051ade18eabab94bac8b60f4183", "02d99c58d0b3867941f79dbfa5d0e87113f78419b28152264753b982f4736c37", "211320cee7151a5cdaca4e3b7e88d00ccf5cd5d3e8df50489c43b43af3028bcd", "264ee901b6bffcb056b8748ed38cc1284749f66f620b4df722f6e6caf2c82b92"), ("12eaf5c0053cb25f9df838e311ab6a19b93c7f5128608fd0eb39cf1dd7b6853d", "0a03a82a7a16de9648a106a569e1122961df225f53ece8f4e695e7ed9ac6e92c", "2735d2d7f758fa4fe1f0127e02d6d696fc5d0aaee7344eb46ac0785841c65189", "273ecb263d759fd7c7378ba038e9366db5bbc20afa6ca711e861dcdc57d21255"), ("0072c66312c09531b656cf91ea237ee284ffe604717c6368c938ceb8d7c8b083", "09b5d42c9f325dbb1882e5fccd3ed9791f62d4d02c4c09a287a509176dd1dd47", "20299fece85b56693cfe034eb2523171c0a72383534359f339abef09467a46b2", "24f1a049d972d03737f01d312ee8b78b6291879eab731c915551c884b5e323af"), ("1efcd5074f67363a6f7800df2f2c1f2dc6d1b0c92482e1337820ae3854af6222", "1fbc30b959f7510fe50ba9d1e9df90b1511d48fd6579a90c190fb3f4a8827c0b", "0fc49e395b8c607292b55de8728cd3759269392b22818e0b3c7cec137da776bf", "2c38cd4362c11f55b5f91c348d0b6b2bbfb9f4a69fba31a756be74cab5ee0a62"), ("0370ee2afacebdead5a510e28b66ec940a572ce483300e83225cb78bf6baf4c7", "1e2dcbe0062f0fe2558410d72319808438379fd70d5411add6756f7307c6c81a", "224bb7d6e2798629c601f5e4f475732c1897264a36d6dac2851cf1579fb2ad3c", "0b8bf0c3bc6a8cdcbf6e912dfc66cdea3c5316ae413cce021fa915a41c7bc0b5"), ("29a2435c4e6c02ba7fc54f52f9762761ce26dcedce0820e63f4abc2d12c2da5d", "1d35c0199877fd97df826e2e6e9e74cb1e0bf9605ab02d7eee5cc7ca4ae7c047", "10817e67ccb1d79618c766c0ef56d00bc1a31dfd2337e0d9fdf42c0ff2b4e91c", "05e6c79594a62b1d4d4d7b8488476c217ab6f1383792a7f44b268386f5d64f2f"), ("0fce60074c50aa1400bbe29648d567afa85201efee8b5e04fef6f5f3876b2d57", "26778725b9cd3c72342f32d63c482f9ef3071c5af3d3085653888ec932db3ab9", "1cf0e947b098fe6f47f4514d4578e13597369f77ed94acc186fd31a37da6b563", "0f43b8f5b5347622a4a3671bcc8d2ac10cddf69957255c9692c39a10e565a0a1"), ("27e9ec706bedd6ebbfbdb53b5045bb048011bc959c9beab226912353bc7023ee", "2663144ec7e54f66986cb7a998fa5c98c7705c34689d3801d4e5332489f22965", "0aa15d6b394c2bdf6079a8296fd81a801d2d797d4c41390c5c4cd9b8424237ec", "1e2c653c69f936bc8499ed100d361d2081ed0c82f5b10f00bb7d09310aca643c"), ("07bddb409129ad031316aef303385d6614dbc695799c561ad9b7decd8dcddf84", "057a3debdeb137360207da8153a07a231455be0e34d80ab84230216f75e6f130", "056e0a8d02fde3f75e51733d63ee22c43c8ca52e15a0a32b1980c93d58278371", "18da1b2e5c72f797ddaf9b14c3cf919e56121885fd6bc775dcd609bdff69bcd5"), ("1e9b226d19faf34212448b8ea7cffce239892cf1962e9248e31794b750e885d7", "0d71ac0b6fad7a8d4a1cec3ec6b9c51aed87976191ece9998b34261bdeb029be", "0c451c42a34f4b13e086981e6c7b952ab497cb6d5b40a0887b8c97d5fd72a5c7", "1dc41b746f91a376d00d64c6bed8a32a8da673ca2110e988a951233902a8f5da"), ("2ffbb72bacbc5bbb505c040e33233c810132b50a3e616d9d8f4f043442f9cd07", "0d637fa7e62c08606331f07b093ab06eee3a654ccddb47fbd373150a0e225dee", "2600ff521298e7440b87888b5e9483ad9f33bf76ecf06707d0ed32b3d0e8c1cd", "20cc3e73ab26a5e37857cd17936c054d514605b3f3210aa87c8baeace15c60e0"), ("20a1721231c4dd7bd3f0cfab29ca08d4b42f5c0c96e18a2c5a3988fd59812486", "007ac569a56a5796f42dec4a6f6369dfd0da3276c4ee325db13d7f2bef7d29ad", "092bc8cf027bdba093e43744e51e2588d936630152d6969c94697416238dc65d", "154a4ed7c42ad8681965a69a8e079ff23accebbd6e2d92583f0201260a4ace45"), ("2767b275b43f0fabfc704de113aaabbe6ddeb986a6d84417c54b53cc2fc720d5", "1551247526f845bee18576ea3ce63cd5aaffc6d506f8bed42f0c9226abd11a28", "116790dbe20b9ed5df634e4e2ebfaa32bd4309a09416b66bfd09a049c3ed214a", "04d87e1f702e9f7590683253131e6b5e40b0e8234a15e7c549de19f0b0d148c5"), ("129c92028213254abbc5d2fae4fddf64b0f71e1c8fda8c20319b24bd5b165e03", "24c3f8e6e205d7f348a3400bace161c62ae935f521b0b02d0b550b58e559ca28", "1ce899fe9e9cfbd54de186871de634b3bb50c398f4e90da58dbd2f377205b732", "1bd4cd88a90c42e1a8f62dd38e2ddfb5a7ce4c41658bd1e07f69ecb7f6f98b2b"), ("03b6a71614d4ba24b56b09c1776e80b2a4d88b397f5f9717ca215917ff05f743", "1d133127078ce8596533253fb1f69bbbfb215fc71f8b5beebac2af165f79b5bd", "06111a1f15c3e943f424476248c297db9032604dd75e9ccf2a976f3a17191ce9", "12d8f2f46897e20f6d5f279c5f3dc381141c04e842899d3c85b2483f717a8740"), ("2f4bebbcb76ade67232c6427b08a25adcbbfe2e1d44c487f72ac7ff71a5ca6ba", "2cfee48166481a8ce034797a8687f1808cb0fd984a4cb830672a905568901c2b", "2dc10044f30a48e85d5e89d80cff1b47a8b72ab9566df80a6dae3cf24278aed0", "18ce34b815496ea6dfe1d3ad666a172bc1861781891ac52c9f2696eff53b58ee"), ("0411ac8ac89ca4072abb3d3107fb7c7216f07aaca201f2ffb3a1139bd65562af", "0d260c4f7b6c1119ddcb41b9cd1a3c6afeb83015868d08ec4158949db042f226", "2475719d0a162f9fc9c3c9a40daabecd8c05b687c1bf1d12b47cabc2c95293c6", "282de6bf2a4508fed634938de3a5889e8de1a89f4d798187b33c2ece096bcf9c"), ("14b9801e4f1a0a3d1b2842bc0f8e94c0724fd06eed99b1f05274d9a432d033c4", "0424937e1d6b12621d9dce760a38a7b619343ecfa440db1cde8d6155560b2091", "3003fc5e7d6a0d5c0f41ab3a9fcac1c10e9db930e61343459f737446666b04c6", "05ffd61d6a0a3523ec897e17527bc4dee413cccb62131f6b640f2d66064f61b4"), ("23aa8499c3c04112f0ea8ebb9c0d3b83c43c9ed612efe3d75e079d0c1324bea0", "2a8c3bc0cfd52b69b58282e81469f419206fd4cebab4398374b2a7bf7de1cfae", "2ba94eca9e1bac538755fb20f6c852fb281e3ab121eba78545e8d5cd7ce41628", "2b4a43e9c9a00c0a48352759ed68178a62fc5a54fab476b7f3ec7387db0a6446"), ("01ce7b90f821f11adbcd29e76babdec6a64bb33c2a788a3c2a44a488dc2292e7", "0123b3206786328ec7cf6d5b97264b8651945be0261d21bf404d7b00ab17c572", "15cc1acf07b92bc65252a9241046d4eab14cf8e36ed506a852471222b49d9853", "16b67857fa1066eb9c6116610f249b1445bfcb6d4b7dcaddf63610a3c91cb4ff"), ("241e843ddf35e2c2ccca0291e8b08ccc89ec12d2a56b9ceed9f658bd638020f9", "085389677e9274427b575188f3f7e87a7be6b939a1b2bf92a604dcc4996c9307", "1099ac54c5672265e2cf100940b1e101e7cc39534d0ae365bec9fa3458255333", "29b934968f734d408a1a44c7b67f3b8b88f82b0fc755e23b9e2692aad13c0580"), ("0a3dc154284e6d17b90e96ffaf25998fc4493036624256f87d296fe1b7ebf621", "0fc9db5903e80c2aee7257e7e03614becc67f3e0adc09a32c1a6bfdc82b1577e", "0425e4cec0c9c5fb3a58f731161a96713a4f231731eb5e03e7f9527a0d6c5463", "1cf9a97744b381065232a05cd85e85ed843bca412905a0d844d95288b47c222b"), ("053d97c8e995f36a8972f4d872100286e2f9c85197d0ab4aec01413ab9cb9fb4", "0ac6f9c8519a442b7a7b99cde6a47b3d5e4bc21629b35fcac6ba27d7cb14cfd7", "0ca76d01e247a93714cad590094b8c58e552ea3ae9695c3ec7dd0e715537d702", "01cb01350c848ce3ec66516ba6ad52188b8e254e6b8abb705e2c8d4988d1cf4c"), ("265ed14afb564f27baaaa44a5d6839595aa1e2545758ca944b08d1493745c186", "12d58bd570d821923f8e1282a5060f2e6d394d6807d32eacecc9e31349cbb6ca", "15a591ee869f4afb2f31a515b8dfac1b66e6075124d48dbe0e7e2112efd46985", "06015da664ba697c3944624cfd37a98b07978eca4cbd8ed6b02cf3d7d7df20c4"), ("0629ad6e3764ff25eac6e09ac6ce74e1f4996f8e7a1291f42dc30dd24fe64ec5", "086dc5caa846c00376f5c703aec8fcc4cb605b76700d0981bb34decbd024f871", "1293ee03bd5d755e89fe5b66508d67a15519d3d97088a83c06a58d0011414268", "16ca37ac6db49ebc4887c914393289f97aebc4373c0764d422e44cea99dc2460"), ("196b12f98e57fbfd970a9941b359c704280a5c9f2be262c1e55863aa6dbc3586", "217d18e6cb5f0a791ddb1a2a877217da10eb06bf7bbe6f3260ee8857f6ede535", "141c0d0ed2bf07caee38897ff3aacc71575694a1107383e056d29e07f7c44b49", "2d1aef53023e0714b8a4747a9ceda998831bdf93fed2ab12ca6af9dac2a28c58"), ("0c5e505bb92a22e3ada36f0770841726017f2dfb4024fcec4b2aad3c10bd8567", "2615221fa2d77e49e7fc0514992c345454477c991fbebc986535615cd5576735", "0e85b7f9048ba6c98f4dbbcaf596e2822e86ef85bc841178670e7806d728a140", "0d97eb0e8256e6f55417de8bc819eddbd740f469a952a0f072075e6aa2393669"), ("1edd72ec95a0b1e2adb6518bb305972e95271aca7e357ab6c132b248bffa6a87", "25c6e151c1c2ead5f4b3c8c681c0f22d6e4439f26745c1737b48fe09da4b4a8c", "2d25c1b5380b8117687f95eb800accd18c320399b878c11af49876af5578c973", "28b6f85c35a6cbd0bb7ae3e935de9ffac1a608cb45614adb9ad622aae3800b33"), ("087451740a831f857e70124f1a6b26188b8b704043d18f1b8d3ac1a5efc1aefe", "17309393314f6a228a95614dd3d45685adff80acf53c2cfe72389c869f097760", "145ea7d95e579a8896d57d771b47e0dca1dbf89e610feaf8c4476fdccae81aac", "27c200ef152ea1733ef01cfa38e7c0faf5ac7242fbcf21b78aa1e528e97e2dc8"), ("1e3ff564e8a5353d78a652c5b694a775a9e24781708af746e6ca766e306633a7", "0880b1c33fd555838c4d0e09d113a4c983d92ced250dafa792bcf443160a787c", "0816a4e4807a1a97f788b6020396c49004f6980e04e6ea60afd818b500ffe114", "2792f9846292ef1ae5757d04aa1f6d0d51c8b540ed47bd94a18ae24e82e8568f"), ("0f468dee6e9a5d4249f0bfb62c0211a7ae8da93ebf50ebf3e56ba7de65eedd7b", "303c187af7401ca7a8c065ca53bb9052a760506c2bf9a63d73c35eab343edfa0", "145672ac0cadeae57bf7ea0f296a00412f80357c8418ec546e0a34a8e2f5655b", "263cbee3cfdff913c3426749380c60543727eba18b9256b59b97df2c6f614aff"), ("0b385e6f2e689b3e3e253e0126ad93840c18ca7680525b831e2a87826d08423b", "0cb401ff3e67bda46a5fba47472c83d76b70c9b923e283574980a87c804396a4", "2a0ac3275e49b663b1fc39c96105e245f985b3b03348a556d425b16d3e640756", "10448690853fbcaf867bb32d0064a8c7e39b159fbec1eef1e5948683356db2af"), ("1ee798b00a9023ba5f43de6d05da4ae680b9752038f79ef43b737f0380b31176", "08f42c69d7aec1d27e3dbf782d0ed14449589741eee3cc9685598358d5ac2043", "126c594c2c4d7c9d637cf89bc398abdb9c8b2c756c7adc696873d76cf297856b", "1817a8aaf1a7c792d4b1055eab729130c27ad134f6d7e711978931a417cfff79"), ("058389204a520c76aa388615913737d790b16073b39c1cd86f4be9219375bb3e", "0100ad9b15d06c7c2e2513993a50d853dbb80b1fa4a1223fbf8bfb0ba7a03b16", "147cf07ede7bdf271ecb18c5910df68141d9a2dce2779ddcc8010f7999ddde4f", "044d6dce31b7fce0c12239a8a9263da14ac0669db1178295b9941d63b737dc19"), ("18d1876e99ec2a0464138a9bf303c1cb4958edee412a167d9d9fbae966f9f5b4", "060254d56216b97a5ad2be9475a0a6ccf4af2c46a7debb132732a4be519b5880", "1f0e8ace3318ed72aa504c29ce5d6aa7f028261a5752fe0db860c938061032ea", "2838c20b36fe625f3b666dc5a42d153b0a2017da2d6d0634fc432e93e6da73c8"), ("1e518fbfdf58fa276466ff8ce567f12fef3787358e9daa1b051ac21c9e677f3b", "0f8f544572a303c030ae2a1b6083cc29a0a34f965c04d9eae84abd6698ea9ecb", "05ef4f0dc358a40c887d54ca833cbc1dd87001b736965d08980781c7e35f8487", "28b9693fe125e53f203d1d9027bff82b1c876cdb845014a5373956f3c42cf97b"), ("261bdb48d5c0335b6a6a6f38a4f237e6278e6bab57b3a73c67fa0db8446d3c56", "06b3e947de138fc6934eb8eee4743d0d06fe5e573366fade6b7c7a9c78514822", "096ad298d6f0f24d424e8dc6dd702f5719c6dd4af01f29b877d1fa79cb1b8162", "277675c2329055631724ed8f0dec61548015d89099d2a4eb2be2ecdb275b6e6b"), ("09770b1f89d996ef8eee3beacd8ec67237fbef311786ff259e371929abeb0085", "24b12d4068917d5d110894c7d8d762ccb54a60203f40b08a9473dc1c9f78c546", "130ff848045eaa87b70b510bfdc6f924b836c79400a7f7c7704219529ae426b2", "0fc8f9d6e460f5d0171280e3fbc782c4cf764b9d0e28d5b721c1ac98f447579f"), ("19641465a437a431a5deb49824121480c4d5fefb4de85d94f54b45d33f2251d9", "28f9a85222c9573d1554cba0099200ff75544001ef93ace4174080824e403e47", "0f7c5886e4dec602b25722510179f0c88290c01479361a66df7ad36cff56d5fa", "0bb8fc7af3bc91a2fbffdb322fd83033ba06c05b1e717f8310bcc5697f546cbc"), ("1c1c6dac93a7ea806224aba1b159227c9119e286013657e980bbeda64da994a6", "097c3c8d6a1796c91a4d438941a1113aff138a21c3262b2386de3c8776610c57", "0c8a960834d4311c74fdc4a521ad2f35b73da78732f1e810a69c428be26eaf1f", "2c892c0b5f6b45af6fc2a50ce674f82e4b489ac26e650792473c7bdc6fb638df"), ("163949309990d3ee3cf15f079ddbf8b3bbd4d402951ea908b780e3da2bc097c5", "207b523aad4ba707dfb9ae4b4726334d2c94ce9f1aac99b4bb4262ea7df580b3", "020d3008e0c858c6c5aeb3a5f0e08e2432326217f70c0b43dcf3f3607fb508a0", "0716abde6016f532bceb67f11fbfd2d78b94d30516827ba6e16c20c74c3380a1"), ("0df3b69908859e2e8ca82fb53f8676170b72a9e1d76cffc783a471a3105766a3", "094bff135e5d75480accf746b6834035ec815ef47f842b25cfbf71955a3983ac", "00df98ee0f77ec243a4ca777da3498485bf229f58eb45bba5402c206299a56bc", "0087b1e90dad1b36c3c5486fc8d5de03f395d664f38d206ce27b0ac68873bd45"), ("10bac39122ad2bc2ad58b787b8ca13e645649c6304d537830e0c7ed7b886ebcb", "05029bb1fe7f6405366c1e780776e5221d2cf48da3fba1f16ba4a280dca79a74", "228f72990b02bf2965268b8aa5a04f2413a3bfeab28ed8880963535409d03f03", "021983228b1edbbecc96d719348cc3f335519aa3c905591e120b1571404f36de"), ("108ec158c8671fbe68d35b44c8445d1f730f5e3739f1896ef8b3b84382c63481", "08ca00cc36597d2396f5ef17b1a48eaa76d5fdc4255858c3487f7d1dea3c0d91", "1f5135aeab442ee66dba46021b9f907f20541b4aee06e61e695f2d0033f9ba2f", "0ab909e1b23563f1dbfb9dd674c7cb5bddea717eb8f937606b66b5db40887990"), ("1997b1ec3e23952b92e132af0a18c425c181ac89aaa84e2531bc365b1b5ab7e3", "221168872c07518ed990bea6c52617c52020438002b1254d917ad3af6613bc8e", "260c5ecfc758d2313538003db59eadbbd8207e8c33e9d107ac2fb0bf3057bdfa", "08c49a8fea33d27631b461a224afa5e8f165eda46a9307cb41d0f097ff9b8185"), ("29ae2d80361daa7e63ef8115b29bed4ea24cfc669632c2333a0b0888f0bfd9ef", "0ee06c23ebfcb2b2c5d16415e52513ee8f5b5981f0523a214cd1032afcfa01dc", "14df61c8620a1e82daf0c2a42b4b8cba18eb764b3faee16f23827e426e6bae96", "264f475f2b91ae0a0b495164d9c8e56060c2bdc875fbdf5fb5083024c87b62d1"), ("0d09b635a85e6e8e70d7122bb7773bf3c67ffc02f9cdc2bf0e1f399157420406", "2cc1e6167da0d759cc24d1ec08f77178519ac3e94376a8ceaf3838f785da8e1a", "05d473df8714b5fb830ba27edfc5cbb274f26031022aa98aa6254494dda6d5fb", "25e18892b5c1a4e8a22c17fbb503a945021e45c4ad9f3fcd7ddfe393413bd9c9"), ("190feb8f1510c511b4896d734bee0840ef46201d63da614798f963f57f4cb597", "06acb771bc0d0893504e5e057c7c703e1d047c089f021de387b9fa974952bedb", "11320540be76f14ac9f843705cda1866557234bcdc5d7aee8f87aa6799112fc5", "0372b8a591ce0bd24f69161171270cee472b494e28b9831e93a94a2c5bd2b47a"), ("022e1f34224b3a3dd18e674d69beab1b616374d0f8a64e5a1ce2d792dc2f7d24", "09cff63d0108ec094f3c6c1e2bb3c8eff9aabe6bdab34058794fd79db7c3cefe", "2ebd88bc0e0610161b5dabbba6cc0d871dc266da29d609f3e9f6496c06a503ff", "0236db5ad7186af4eddf72589995f51a517ab1202a95af50681a6c83874e0f26"), ("1af5da81134136cf1b0581cd9704d31ee9b2390d065c46fe93da5c018c01f421", "28ce8f5fccd4dd709e93f27a04f6150b377451f64bc22633189b9fab2f7cb52c", "0ab23a047d12cade64dbf7d17fed23154370b6e9d43116fa5519d6c24c16adec", "2c51a5abb0c35e6e15e1745fd702e374ac2325469db96b0be94e2dd005ba73cf"), ("219f8b3ce5f932288c098f5eace37ebeb30dba74e4184c5b8f00c2784cc06284", "06e0784d32f854694eaeeec0b13387f8794d0ae32d82c136bf3147be2fb6c855", "039ebf55df8278658ff8c24c32d273a7768afc7fc8bde381b3f155e29e276143", "09d78288c686493aaebd1442a9946edb2cf56a8ff840e55b2145d31316caf48f"), ("1efa4eda984e1292fb6f676b0a065b05e344822c1c2a92fbc1230a770cd9bc6e", "12fcf3fee769cd323d2bdc0bcbc88476f5780c9224c9f330c9259fd1331c49ab", "0e602ef3b66d19f373008226728018a07f0b02ace9f8cdbc087446becc5ae9ac", "229455c0a92e0017d58e0ef6988048b8bc05a9d135a043777194fdb9622c7529"), ("115d0ec6d01ee1cb05ca25d689ce98b1dfb02ae6c36857bc2b4a772bb50bd5aa", "25fc28ad27e7f746a28c98946fa667c69b4fa62fc2010d2433e68e973eac1748", "2d068c93eabcedc08eb44923a7d34af89bc237b6ca882cf633edfa75d8713e2a", "07a1a3f15b7da77053de05489ae25eb61496a35fef5297cd3d6fd1d7d136d29c"), ("247b5503385d3e25e76cd0e08bdea41bf3b8656d1c0906f4b505ab290cd05fa7", "2bc95a7b0cc36cda31d1330652b724e1666e6decb74b36fa1a609ac1b0f22379", "012940a308c83f37daaf38c68d63feaea7b6a2a72c4b14f25fd65d8ea8fc6848", "18964b117c1fc0160d7b6f7df41ca62e58b96d7ed3930addf56381ff3619d9d2"), ("048df2842967f77c71f8e999e7ba1b150da1e5456302d1861f925663dc25d26b", "30157c4807014e4155f97d0309a1bb3cf6bc4bdcf9fe669aa45728caec9f3f3f", "2cdc904849cdeb4814f228871d35beeb7c3d1779fd427c71bec7a6ab00342806", "23f624c6ac8ca9a5d6bb48d29b6f9edfa3946283b4d856663aa67fc1692514d1"), ("1442573f8cb053680b8214b3e89473eafaedb4fe9dc31b47ed72a2a1eaa175a2", "194a4bb29983a4f119e33d31068e61073b73aba4e1133421b04e12cbccca9040", "103441967b4d9233982eb72bfea4c2cd191636c62c032dcffc7f0ccf56fd6d33", "07edbc81456dac73edafa2ec4fdaab3da099c632b0d24f60c4edbe6cf361c54c"), ("0a27a48c68c6b8430d1cfac99c4b2750083d3d26412e3699fea5d8340db47398", "2b40cd879904a48b210bdf56068fe8fa55c9a258967f68596f7e03696fb898c3", "25e344932c6a30d57580495371a61c0895449d8cd28826672fb239bbec330b5c", "0ef7ebbcb17f11fb59ae732009042cf31b4a9d730b474aa8d4c9c6bf73b43e54"), ("197dfd308ae846d5ca9e4d1d88ff5b4a57c95bd100ce94adf16e287786d7fb86", "1bea4046ad0aa158b6a00f4e6b6d3dc9f0e4b9eeff4cc6e3901ab368f1488352", "2644838dad8c0693483128fc6576fbcf019387209c045130d85662c7d31f1477", "0fbd8fe65ab3b5d76f1fc427618b7540740e514f48bdb063dd9d4f9fc48e9887"), ("13f2568a6978bac88317263215097f4461e9ea223e0287018da8ae1f075200ec", "2778f9d96e13c654edc1fc8822efa585ea1287c62c86d074ff510fa6d9e312a1", "22cf63ae6380ed25ece0933b69c52be6d7f94f62cdb9601d361b091e665f40b0", "02ef628e0123169707cd0d911511d31532e003430df48cde7d89ea6beb414e28"), ("109ba7940b3b8dd0ef60661388f2bec3169c0f74ac7144f69631aa7603262989", "0136cfbaa548a27ae973a17a601674ec504eb5dc0a278f3fc6588762520c755d", "1bde873be326804cc044bb08d95bd840b95996f4f476584681fc4dd7c36e18aa", "07efd332f839657831c3c365b7ffbcf20760f60ee21f558b274565f2cbf3dead"), ("2d261f9868f46344c7cef66884d078e0d63d62d17933790e5449bdf2e12f96ac", "1cd92d235124ae56ac8f9a2ba0b665c131458d069ec44b96b80c3b095ff18d12", "28dd19ee4a425a11bd35688cbb29499a337443105f20c591cee0a6a9b6f65ae4", "1907f5a4481897a3f97812cf0061f7ae03bea7a2b13d1f6dbb3c4d86936f17be"), ("1aadcb0c8920478a246d7c87c1fad43bceecb389e166f60698fe57847fb892e7", "1e35a8a9c8944879b22ee4055eaede6fb82d4b39fa570995fbdf42564a19c744", "1747d5a6df794b32eae90bdd599e23a20956f5052d98c2c51ede25833b837ef6", "1457e89553a7fd4421bafa6a41fc72448b0585880321df6316e16eb05188a541"), ("01db4e4c95ba1cc5a86c18e5e3dfa6654c7c79c4fe18f9fccf45aa6fdbcde245", "24409573a829cfcb746cb3b86ac5d5a3dec1e4a37d5dc917ab797a6c24aa13eb", "2f329d4fae9732db9ed47568725d80150c0d5429132f355c62e33a030ff5dd2a", "2744115db2b665ef3b04fc02dc649b2caac0be9a11ca394c578dc7e2f1e9a977"), ("20c44d3f26b8ac6289049ed2c7700e86383c5c83e923f83a090530feb6c80215", "1d51c893ffa4c22b650caf4af721f6af0def1f72716e2cab0cf8798be8a7c1a0", "252303d79c97d3b3c3508d1faf38f9a89b07c1d75576c3d074c5d2a2deecc3d5", "148ededd37d77f0479716c82ce090b934be705ec15799d3cd89238d4371f1827"), ("16b5280b554a103d2c1644cbc05db9e0b36d66c7fb9072b481c6693e6ae10aed", "0390ee83dcbb32777bd4f9bad50847cf9ea9e1708a4465dce0627a5c93ab9ebf", "19f56b6176a91c5c199668828c4a2fdc263be119836edc685afdd32183d6d3f1", "22f640c8671c8c6f2382f41428cd44abca879423f9a4722c58b2804a79f3fde2"), ("0ddce8c6d8811c947c89ed7d0fa2e0b77ad55e7bd3d9b7e481e8bbada0ca1099", "10a9763e2ad5cd743a5cfc48a2ae820099371206bb875647dc498a876a9eb686", "299ea5510df535575a398e2e00807e55055786c620a2b8c8b73a9ab76ed299ee", "28c309fbbfab00bc0322447be5cb1758e8527dbcdf1ffc858c89069f85fcea73"), ("2f7fdd40685c7c94c1dc279b5a571de4932161ec6e2579e9709f04295fc2b560", "0a8a88da0202e204a1a2194358bf297bce3a81f254c431c9d88559638d2f8c7c", "1bd871d72bd6882c684530a7f0d55d9211c07f4d81d6740e859629f997f5c0a3", "0b14eb5f52aa83c278bc6e3b58af2cedb622d4a49ec6c014ecc14c24ca18155d"), ("23cfb65453f7398c407c11a9d30b88138961db1b9f0e31256cbcf2e4823d2d2a", "2a8e4955d6a2459c0d22a5f029176d83b315fd8b0d0d479ebcd9cad696c242f3", "2b09592c7345c87bea7037d2085e995f6575e8abf73467c3466ef1dc9273e371", "243e3240cffba6cbd55a9088c06536a642deb65d75f07bb9fc2caf2c1ca6d223"), ("0b15cf0f6765847651099f2909d4f29a7ad19f0fe90183652715d995936ee3b1", "02ea0cf987a154349cafe4719d1aec338484fcd44b4c3d760790a5fd7fe64dbb", "035503fff2dd65a08873b8184b0ca7196927ccc55ca6c183e7158d972b5cf2be", "174b021571432e123455f9975c540abaf25f2c4d95b309da73006f2fadbfced9"), ("286e1d4477aa1166b783146cd30296a0f04d578a2038cdbd6b538bbc71f0c19d", "250588e5e8900dc6e91671575e7b376f959c89393dfcd63ea9ac7ee589742a43", "174522ed772094f8354e66581051fee47b6d99ae56fc137450f88d41667292eb", "1548c1f15c4a0e701649c88c8e0bf004ff2b88a6824c0f0c8711b3d587688fa5"), ("24ae5981947cd6dc0a25fe1284d88c96537d4b10ef39fd52a74880873ccd2bdf", "133e5889b349cb2a16b53eb97f3262d4bca3466fcb297ea221d77560831388f3", "22641c2584ca9e7c605ab21d70bc61e4b7903cf1eaa7d2bfd7777ff884cfc289", "0ec352292184cf07b2bd88432e5915c20713e76a770e361dbb81f8454b4eb21b"), ("15ac017950395d56c548003ea214616f2611d020e2b8dcd2b8c635569afc2a0a", "29147d211cfb973b2927acb41481727fc7213bef0fe2dcf34bb72f6dc7c192f8", "0a80d19dc2df4d85fb35abb20f0393f7ad2cc6ec8cc118cab364bf8a47ca528e", "1f99b472465b21846afcc9a33302ce15c19707bca89809e7c302a7a05f00896a"), ("2c58eba42a43775527a3ef529c838516131f7aa39bd3c3cfe747231d16084fc2", "026b253e6f98794b0f286672bfc823b1db26ebb494d2f85797642aaa3b89d27f", "25f37514877cd3029209e5790f7824cefd8116d11bb3b674ab1ea2e74a507044", "07ffb5bcc7906e54423431758e09489a72818188953e9509d74eb231b769683b"), ("0abbd2288da679902e802671dd3403187e4b0d775ed146f0352f0082ceb3b4e1", "034373c7ec64d3b04467748da1ac151457c69225b1428567420d1068ace0a679", "1a5d1e8a8f9a6439a3be9418ac21154f72f3bdcb8cc7ce9aa249907f61a9635a", "1fe7f38caeb7f9be16ccc319e9f36ca8272e4a20f99df5dffc6a43f43aa956dd"), ("2ead42b4cfc8fcfcabc35c9308817cfe22ccfe15c851054c6ecf58d6e73bd37c", "15da6a22eab5c54294969e0ff4fec88ad1dd346530951c10a3aac0d2f335f88d", "2eb4f7b114c0099c6207203acfde7cd7f29507b292a79e2a9f0b4d2e59213650", "1b364bab3af015cabf1d2ecb88ae08b969fe20c5f0ab9d282fec625dc9241cfd"), ("29ad1e1b571283f7fa242d70e7f054bcc9a0229f43f3587ad2ea21b236cbcae0", "2c660e25743c41434219b2175c175f81bbc54f9ea9c4217df9e3529ee77ed7da", "26788906c6372b15d064c52fc5d8b18f5bf6ea03589445419593d4f79f06a618", "2521a70918920e2fcc42d4da0a6667d6e8097e2dbda56488e21fcf2217518370"), ("034f7de1a0fc3b10fd731c4cb487515ec5a8720e77a237e614661e4a823e6712", "008826ea441cf0e32dfdc0642044a917df7a6a54dca306f98c1b50272c0ce018", "184ab69aa3998276062c648be6c0e8bf385a4043bf7c0bb0a620eba2ce3693da", "081b80a2fffb1e0cec768e04479497390168be8c8a4e8d82b6f2efd541b004c0"), ("045d7000b104567b86caada0e24abc4141c0cfbe54d4e68f0754f41eb1052999", "29d3def335a73a696d2ded0beb3bff8a871c63f09b0499c7a5206fcd584853f2", "21e1ddfb77bb41b7005b17841a4c7248e946f4328ceac6280a02a1f4e6b11799", "127d6798f0ccbfde3d0bc82be89e58741792f4d1249bb30476ba5dcb9c7e1d93"), ("1c5ad85da7e4abe260ca28e96360fae51cec9be47855cef3a52e9dcb9ee574ba", "229b100a65507df93f1272bec3f92be54bcae2abd67d54b58adc1d88f7ac4bf6", "17ff7c8688b5b744d0ca7303196205bdf440534790252f7c0ebd37c32a1fd43d", "2e66674b7e18dad0c8163a8c7703aaa3038ceefc91d6fc4e15c679494a3e459e"), ("2308fa8b9c358af8a2caf4000eb2144fc5df9e9daab60e8dfb50cf6149543a0c", "17f71a2c4ec7f71378cfe68fdf9a01d2f9f8860fb77e8c2b238ec012f30ac3d9", "078d7902c94fc6344b08d3a1bad35033100d4d0b1a7f8326566aea4490109608", "2b218f4d630ce645319d5be94492dd83bfc3b260ccb5c6a9497ec4f8eb29e155"), ("13c310272b98d709a4fe19620d3d99a450bd5a36228b639170f9299bf6eb81ad", "161c03337b9a9357874e1e4dc1657aa3ee64635f2d6f13739be0ed96539c41bc", "24861a5e7d17a920e9f8319c2b354acadb0cca706406ce37e5d00e17696b0589", "220fc20337a359b9bcf648277126a3781e6daa3450c41221bee89bcdab30e164"), ("0d61e4c60d474f47f03047ba96f8779acc5f35170e5dce075a3c9dce5ab9b130", "1dcf81a733c89217f8e06ea53d3d75c067ffd9c4c8e4eb9b886bb004bfa3ef85", "082e2d5367acccf497acaab342a21e74896fc2c6c1076ba54159f80712a9dd0d", "3045ea4ea6495e3c0b50aaec823b5c3eecaac5947a79431a71c8ff60701d756a"), ("2542e4da7c702d9c2954a1a1324464a505c52a580638413f3ffa5d7e5ebc4560", "2a4daada22dc4482725c12d39ce33c1f474a4f62b55f633006a23c4485d66af7", "1617ea6657007f6335af7292b72dafe8bc14baae8006876c84ccdd2197b9e676", "2723600c520de50559daa37bb709338b3664c4d693c20f10b7393bc54dd755ad"), ("2af2e2238457eee8285618d93fad085aa627c48c08b58cc0e990eeb45ed08234", "09112c197e47afb63c6e12ded3a1c63ab4c26a87e2c068da4bd8d90ed49c7eb5", "121d6d805e3207b00c6cc9bb704cec07bd3b262bbbade53eac4075f140de2c98", "16284ee330502b5f279ac955363c88829605ecba1f1356e3e6384040760e987b"), ("055a1d3f9ee194bbdb1e211aac366480d1b133f8a68e951e2c3f07c27ebb5a28", "2cef03364f7da2d5860d458ddbf31568e9aa51875c3776b5223ec5f05da7abd8", "2058e9797fa8bfdfee51d81c5ae0bf138b7484669362e4304a236e3220a6b70b", "225bf2863ff53999e0f513d9d019f5e470c94d09b3124c73b9fe5a1f7d985f7a"), ("2d84c8c0ba4b1adfa71267979727b36dd2762374ee68d53063e33a0e81b37334", "1fa01c204f4b37c86ce6157c4034167d8c5bce6c0b6f0699a052ff9440f7bbbf", "24656fc43ddd474cfe800efda254a4eb15cd3431491522659dfc2039b1c17d0d", "17e21e75a40fe9bb1e9bb995aab75e34b3e943420a2f61ac1772a47039c8c92e"), ("2ebbb8a4049fb260b3fe233d909642046ab53254221aafdf2c45dc349e566036", "18ec57023940b4d5763922f7f2dbbbbdd394d21a7b36e1c0c58d9ecf1013e0d3", "0ad4ff2fdc7fb12ffe078c5d3976151c058d0d498b73bac81aff0d1c78e6b7b5", "0c4acc2f9961fee8ccf11f3751f458d9427d763e400992056ecbf9d3b4e35da1"), ("050e8878545a92e9a6cef1b0da50ac540ab5a9106579aee45a8fc832e67036a9", "27866683289cccabe77a4db0abd291d5fdcd86644538ac3ebb40c71322f79b12", "1e68fd286b399fd883191763d2049fd1cefca14f1db6b067df36559af8b67f99", "1d7a8ada83589af9c2d87548a258fdbadaa6273053bea4f899f9e75232878154"), ("1677a3c3fd96a972d0f6ca5b6347cc739aee130b81d59f0e676b362ca766d1ae", "10a96c0956a503873484a27d35cf2d2069d97d3caf407b1ee29fe021548a4008", "20418e2d2a1051ed48c98900511e4fb8cf2b28e00efb028e31bb486bd4581766", "07e473055457234d294ee831a0331106bf3f545bf254b6e77b2f44f0d1fed8d2"), ("090121f5d1e6de6ea288df1a0ed89fb7c08e83f494f63d8bb9d39fd719cdf2e5", "06e5f12e47d75d374bab580c55ba34959a270500c4ec1fca5f64133ba0f709bb", "1d48f1be9d0dd90bdd1b917a391e9429344b239ea400da6d131bb1c4d09986b5", "244d7d2545a0b7a7ad742f4d4dd69bbd1221ddef850c3154eeaae5fc5204bede"), ("0c62461364588450e4f1487678cee5349e794811b33b02eec2345e85f295c30a", "225fb69bb6f182ee764b9b02f65b0827b1593b18b350f9a1bee034052cd01f5c", "1a86647ee01a6a53c0fe17eeae1013468fbfc25fcc2b5a7802280d93d9a4e575", "0184e2f9c949adc5a78ff42d1c9c498cd5da985381cb2e0c11c49843cbc12b00"), ("15149770901e7e7938bf8ea9c65d504fd9fb49238872e2c027fae0326661164a", "1e2f9d9661177fd6d65e0a4bd8d1da7550abfcad15b56a755de2507360dad601", "1b51211922aac0d0e2de647327fae0389468277e6a58701145413c8c88b83ebf", "0e1a73b37187dedc3b1e5fb5cdcad10c27253c44dc2921e3c09f5f56270448ec"), ("2ca4c7f8294eae918f2e8a08cd607d3acb6f4eaa3ded29dd0061c5e157449e34", "294133e5e1e84dde03a26c348c9c25c69996609d6abc003b90a9103e9ccf0a00", "0c197062d6517814ba1d03770a65fe0db2b5b1b431f509057f5019497f2e42df", "098e0087356e19c0fe3754c7ac6bc2de69cb29f83338745cb4e99e9e7ac7fbb2"), ("0f1ee0a9aaf3bcd5f0d09501f5444f646ce218e1c3702067b592be688f08e51e", "2ea0303a097a40acffb40bf0b027fdd5a5bfd296cdb8277ffaa824527286bebc", "1f19e320dd9a8e87a2c443e15569fbc3640831bb27fc5aa8ff10c6295d32822b", "1834e65b3ed6e7d6c9baa7ed4fd295e472b1413e8bb93d1db7ce37a94a0b2928"), ("25e2d81fa45e60c706e2366e08bc3352f3e9a01489ad39aa4f1c54c7dbb99838", "08772aca4cfaa9b0c72e87739245045a1265571c44b491353470cb0dbae8f35d", "2eb4c8ebedfa91996f369a1332dd52dc3d9c29cc723c7b1d12f67d372d1cc24f", "0ed8ad5fec3076921d3626ad1edaf8c33a77408b2fa50d7dae516440a1d1d7d3"), ("19263cf5888b7d8be7c3510687e74d635135ea37438725bb7e84a993a4a3d090", "0efcbeba3087d091f31c73759cc7083ee726cc1241f8219fe1fb8992cef04ef1", "24e03b2c04e89e2476e66cb2fd36b0f803946a8de70f1f5be99094f7982a6c10", "2fd7a22757586b5458ea4d12461ead8def685d93c7edd95bbd257501d2c1f2fa"), ("1ab07204037ecea9cc8a9ca5a51e13d7ce65940d0a6bc306aace464d7cf3855e", "0d6c2504c51476a6f4680942905a56528f78d95a5c69a18bfb7a6f37fe6d9b78", "2f52b9e792f7762ae8612353e9171af97b5d534029327c0e3ec85a94fa791324", "09713a5ab9b432e05730bff4b54bc381c67b12e22c6744da321c35750a74aed1"), ("20db24e7aa2d6b964214bbb2832f84723d82556ae0ea780670fd70013fcf25e5", "19b75f99f5773edf28af4cbed8b95297fe891e7a1bc1bdad1ec2435f116a92c4", "0cbdba13ef3fe64b359ec6d2a9353b4bd0bc19a6db9306fbad23b1a955f7b040", "24a97cf3d0546c548dc9a52cebf9e6d6bc537ce2f5f9ce33c4ae3bffb4b742d9"), ("290b18206697106b40e42643b0224c97067e1a4311e428e83efc7050e07931d8", "13b33bb2053cb6f50f804ef9af4301ae60f11a97b8f60b64f731a8b6498c2b2a", "22bfc6b81d7c5d8fd2838aede0d34c82eb05c27b601e15ed459f30c3456adbf8", "07176187964c4f36d8752476176db2c057fc8666c7021c99a807ccaa1adb0602"), ("0a4480cedfa5cff144890ff43177676b636eda72fe2941ebb53daa601666a923", "071f2ace1bc34ba31267ccde4963630eec028b7cc37ecd5f1fa965ad7cd757df", "0c64f8360b909daff09f28b768aec494c9262cec15633a37fa204efb2fe325ac", "05fac49b34c9d4fe3b013abcfe67a9fbe646efb8b7b61aa9de250bb861254607"), ("1a6a7ae578461d392e6ed34b2d20aca9cd5255ee1d45f5b2d33a48d2e9b8c0e9", "0c0052561c40567fed0347b28b897cd5cffc087478854df32017e496a15a010a", "14439071869e9743a35726d9cca42a6d5c9e02b121da00427049f3bedc3695b6", "167804c5f507983d30b677a9eb71ec47b99114c311f23caed9c12d63c80ee596"), ("18dfa4ea4de7c966996032b3985299b051e488223de946005c91f88b373310f1", "193a7d1a857205d9c2c6632af2181960258f564996d3491c59d1b3037198a398", "10fb4b46739a7a27bea1056c022b74262c5c76fed34747e6ce91f20f10442386", "0e2977068c2a77a2438a212b9f12deb754587bee462f958224b8455092cc611c"), ("12a396e4fc82c10313ea953371f50aa7e0977f1d3a45cdd31f418282c3b58253", "09bd23b683117d032e99310ec4ce7987d470c525949d2c4bd0a13d03cfb59a7d", "1349cf5431d952896e25457cd1667e13a1afb3a1046b85f60d7b7f5ce73cc349", "16c4324bb98bebe9c21a3103d65e3132b81d61fc1708bd79f8ab00afc50ce5d6"), ("2a83bf0be5b3d76f1b905b99a0790e63cd1d674e969482ba4e98ee10901d29c0", "01dca967d2aa7ca5e48ebbd72bf5745ab884290fa7e2f22b36e52587a0cd0b98", "1a76222367f42d1995914bdb76b7dac6673b6a6f3ef6a41ed57863526e4b8394", "2e5de98aa7f03b2cde87e4a742c3c90151660269ff981324fa58ee3119eb6534"), ("271877af01f7f0358311f1cf90025934c574d17a3a69c282025920a848ddfa8b", "2362042e360ef20b3518e6253149821f19ba5a1dc33983629258e8effdbcfe13", "111fb71ca1a3daae9a57a6139fd73eeb768c6ea5df14c662c5cc30bd6a08021f", "0f8640ae2eb18d829a397eab4c2767d2f412c255ee6b09786cf1fcc1576fcc25"), ("216f98560f60432a3ff620d39ab8039e5729c0fc3382fda5b44f5dbe469fe201", "28f6c76ca062a05a2f2689e77735f6390b8fa09b1dd0acea678f8cc6cd3b5c45", "24eb7ba37a10b02ed70f95cde5dffc1c6e4ce8a4d2a0b5910b4ab6de8602dc53", "2037979228ca4c0acab59341ca6626942242c484ef3d48742cd94e734777a9e4"), ("03582fb22e1e4f53643362c3e54098a64ac14c8aadeb2c35992a70eae904b61b", "2351a126e39ff5e2ca758d175dea73a56340e50602cf0b0879e9ab3228014915", "2424651e0a42cf80d8ffa48cfb9a434b80b8322d61749ed60187dc27399734bb", "2e508115c802117e2c5c612ac595b7c4b089c4acd185fa3bfaa5c6d47e59c687"), ("117cd8433ea4c7131185c42ccdfea95aad4a4c253dc031105256133e7090caef", "2bfff7b98265f1ff9e82dbbe94fa0494b316f4dc51d9b5d1a9d0cf5db7f06792", "2a25773b5981b20f6d2da93800224279c0f82273229f7595a63e1bcbf3127d76", "11279ba237b9e464ac9569526fff228bce72fbf1e1edf3f45af2b55aa883b0e3"), ("1b3b1af640897bc136e01dc89092b16f1fee9714a0723f5b53be6f1068a29b6e", "27c0e855419c9acd8fead1a7d8e342af080cd0ac6b9093ea2ab2359457dc1c3c", "2335c08333a362ca9c0324de89815d5ee6e8d7a4027891cb84706a6e5c9e1753", "09dea4eaf049c88767ef3ce2b20d7c5208a7c03bb49a9320d06808e52895e222"), ("14dbf7159b177584c740ddc559b54ee959337d694eb4294b09f548ef8878ac91", "173f08abe20f5a6ef1a366047b5f528b231aa2d262c8fbb124a36de3c8662fda", "19bbcc0ee629783446504b6bbfa2434a1977f3fd7d533c497f664b60b2435b17", "2a6292f8412c877152210f8fb114dceac33541c95f7bfbd4536e8eb62125a28b"), ("16549b0180c8e744f9e8fa9194c785e8f4ca456af95ceb322222350065a9578f", "0bcf4d3e57a20a56abdb8e6e32a792b12bc0da3051a5f01412ee8f5c781ae7ee", "12548dab8d0454392901d0bc14f3f1bee7b5eb5cc787ec57d0cd14273d25c84a", "0cf247bd6e35fdd6c7409c61d82c90a6fb25d0a70308d584301c412cdc65414d"), ("1d14995a2a330f6a21deb5fe38623f076507939b893af684b2087312968e2e67", "1300b1346d1af1099af75fa367039403dab0a6f1b836066c20c9180ff21e8f52", "0775bb7cebbdeb1b416c17bfacd2b5ae48c1370a62f9fc0ec4bd979a049cbdcf", "2d348c920c5fa9daa95b4b6b22e2e349a5f1e81e6ac024ff46559c615dc627e8"), ("07f8a962a0a27366f821e00c9cf38a82682e8b8a5679b1758d817d9033be5b74", "0f1dd12e705ec38c1ff14d1449e8cb3624025934cfdb966a808a95970a1fef8c", "07925b09bffdddd00a85a8fbe9e8b44b6fa61932b2cc3559e2d92310af82a3b0", "0fa570b6a59b8cc78ff63e59771f95ba6263d1bbf5644fbf07a51a65b0967479"), ("048a472a4bb41b3a8ef14c3649f9a314feaf42956f316e578bc1d5b981d1bc08", "05cde865b2b53b5d0ab7418af1789583c563027731186397f62b1b10fb775cd8", "19828e5cd588b72905ff2a1cca3adc831b128ea3179c36641874d7c596af3bbc", "21dc490b6d170a17543346370f84cba6d4680889af6c9d4c94485b9728b5d568"), ("25e2e5652210c12c0b8f61cc7f18bdf0c7e25edc61cba5198653c52f2d43eca5", "23cc410e015377d5bc4e70586a1ad067bd62e2bd4e4ba7a192200a8f53b21e37", "0380b0fe6fefba4dd4eb033fa1b28726908c7b0b33847981f9ee4705e99076f6", "01df774bfbe8b1e9508416a131532cd75cdba2e95694ad39f0f7e9e931a0c3d6"), ("2631c9c321a31f0a995c50b1bb0a2c8b2f2ee84f7b5df03a5a88f65cdd96a47c", "0cd11070d3c73810a1d76af7475262cbd33c57a0a630fbc38a86f27ad4287448", "1d8738fa5995cc16ca5a3a6d6bd3bbe314e3e6208f1561d77a04d1dcd814bf92", "24440a948b58c14a9a5a5b3a93a58c9e368c3527f3bc3326b84d1fb25e1cab64"), ("298799d59290ccdc73ae56c41adc220cdd0d01775ca70c4770071f41fbdb5ccf", "232bf9bc4d0013be1e13e264c19b2fe1cb7611df7f5a60d79abc4656d1cdcbe4", "30122e9cc1a156ec9ac4f6201cef8e547741e1e4fa65a1aa83cbe680762d14c4", "2bc03d98d02960ffe03b5dcba86855fa7b6ff42b1c6f5a45aad26b6b714fa522"), ("19ab4c98d7b763ca2ce63f5df9d2fe3960a41c835c68c372e6dc715790e80c5d", "2051b766ce3579fe463aebb029cfcd0ac83c04f6c7116603069a32a326bb9c1c", "1bcacc3e7a372038eb3faacae90d14b9f2e2f6cec14d945345f1dfa73df65033", "127863a3a96d5210d7223c6c5a0b79505807ca9bd45ce4f3d70cd94b3d8ade47"), ("205c360e0dfff416ef2cebefd97487e5f42bc3992fdd47c3bc1f6b4380b314ce", "02470f37eee192e586e0eafef20926f33f3e35e7bd57eb1806cb04f5ada0bbea", "2597746988f1bbbfad7212a8025c6559f63246b9b57578b208113b76aa3b345a", "0705726fc6e2af165abf2a26cca00e479a395b0680297d7cc366cafc05d92ba2"), ("11dd7463fb4fad336576f1bcc042cf67dd87b60466d875f24020f9283e24eabf", "06d2c99928e73c3dc8f9b8e0aee46a7801109f818f2c2f14313fa194cf1dcb04", "123927c18c1d7623ea09c9244558b75d59a70da54b20bbc39b80bf4bc559a011", "142fab6f0b17ad40ead6e0835dff1d31425569417136a0be80e46b37eb6ef2e6"), ("05f8d85a454bb64a88ee1a2cddc93093ef73b75587dc7c6b1665e9ec3ddb52ec", "1504fc8b247af924e4bea4b118731b06675d86de8471b8cd0ab928ce4220e9c7", "29d3114c8d9c689ff095b26364ea996a504e77e610b45d2192f9ecbb8be70a96", "0c72582ac436b48d0a8bcfb7e59cd0c022a42f44407be2f5da3375e126bd2cb5"), ("06b4bf75444ca25a793799c9388077dabbaf5a640d540426bb1481ea0f557594", "1bcecf6810eddb8400170a40d38c133ce78a32ecf7ead4fa67832fef712dd18a", "2b4a22c43f2d4a8582a2792ca643b105683a4581dd52db26f54440f90054272b", "3037aea2301618dc46c25b6257c79bc55dbe0ae22a87841659a6b4d0bfb89e61"), ("1e3f54a4400b0f455088c35bd0ae7e8e09d842fb433ae0b03165a800b26c3216", "10b1ab91de0d30a79b3624d6c1fb2a83f5ffdcc5f89b5371afcc4949cc0a16ad", "0b9638ab0e0155441b60aac731ecd034d2abbe68d71083b831cf05295a06929a", "190600e816db120387aa2d0b9c66159f5274fcaf48589d2513909585c50e70db"), ("2de7ff2880f9e4c34d35fce593812fb223beb7516be707e99e46a138724e248b", "1fe4e3dd6a5225dcfb1da6a3ae0ac9005520acbd2926def8b49eb99383e312e2", "01788ee5b804a7169980deb1d528083cb399be6cfc97346d13f24b9e64a2e8bd", "12c55939ee01d7bbf5675b1a1cca33acfe1bd4f31f0f5320081aec29fcfa2a82"), ("07cc680e2b40b29f7ebc9833ba85b420a07b088473f80bb995dd65cc5d73e3b7", "12909e87a14d14e9f188d2fa7f12267335813bf66091c2601ecdc0a757976974", "1dbdf414734a71ff0e66fbe9fd44a91f168d5964662d8c32361f19edd13695bf", "154f486cc8bf7fded6c5ecf17fdbf9608f396418f4a784689948b338a74cc4aa"), ("03ba2debfabba6f18688261c84e1919fe65eecfc336fa7f1132dc1f9322dd5bc", "215683e472b10372f8c49fbc4e9c35d092709d49662aae955a2cf831609e0dba", "26370c9511deb6a1dc8f272822414c593fa42704e9933db911522d66208a3d0f", "135dea74eeaadf9cc3f48eac3d8781f0be2c5cf63ff7fa21466d4ea0fe61ad2c"), ("077a8d7e92f27bb57d8b0848a76422c4c33a9bbe85f61939cd0706efeba6796c", "0ea93ab3a905a82da0ac67ace5a06b8954f60f9e8432fe0989ce2365ed5278c4", "136c2e42890e339d813ed9ed56f6f56158a79d845c85f063b48e3742fbfa56fe", "15b04c9e01fe3246e9677a264f82a3deb808c90af2075d103a84e6bc89c3fedd"), ("0010397414da304f7173bea96f941e18439f5acf124c6e912f7c54547c93629c", "27bcb98626cdb120ead144a9e2b98fc8d7362b95f7ac148074554a571b0e4af8", "2bacf0e89d0554a2c95d3d4bcdc661be3ea61dce4c1a1c2605402417d7b20211", "2eb5bc1ee8f8630349dc2a09abab8b88fbd0a3c688bff02b7d3ca3cbfa03a9a1"), ("1e84f356a126c0c617e0b01d90f4a4a5410bafa9008dc13ac3e0125c4cfffd79", "18b1def1e0f57953faa0e236298ecbd66ab084c66b81fdcae0304c9ecb307a04", "205955f4c3e4d207fd4941fabd100dd5cac090e7099e701d30f952c80a463d36", "0e6799136858802b2d2b7e09225846aa1599cdeacf332355fb08cb96df8b3c85"), ("1bf4a572422062348776e651b57140c6d827a3ac93b34fa8154e673643092f66", "1a5f6ea258699cc66737e5f8a904ac5ed40ef6c845788625ea3d892b1813c8aa", "1c43166b0c477bb5816eb7c5c65d8a35d06121e6eeb9c2bbd0dbf9548280a2d9", "0fd10c33a7e0e2fba0b7134cb4c16d9e4b91aa4d39a29f93431e7892e867f841"), ("27ddcfb9ae3dbebc4a1b7c2859d3dbb3a74a99e1487b4cb242d5a489bcedd298", "1ff1be507c67bf5bc1c572dd2371c2c42912c60272c8d3b62296fc97590cdf0e", "1d89ab9c34d7b9c32b1a8b678e45f0bfdf7547357f371a1f4ee42b51023cef67", "275514984451628267d60f628eab557232a028a55b05771128bc5f60bcb00f12"), ("12a05079c31eb5b2ea4b767194c8b6b0705fcafe31722b6ca1d0dfa18d7fc58b", "2feaecb395f8dab2ec5ac6f4f2b522ec6b4da484f65e748d7fdd0f8a26220838", "04dfad6626388237a4c3f7a38b7e801554d561575a94c7a2fd2df1458342e820", "269aa54fa18d1a085f22a9be0f7672371a2fd5edf2fc8c3a64933df7d6b497a0"), ("2ed2e8ecbe991a3c6d65b245da4c82c0a30cc23900eeb1a0137124311f779081", "301f5e59b0c5571102d73bd890b9af36a62af456cc2cdcb8998349319cd73937", "0ac091e7c058554ba42427bf9d11b52a48f139b379d292b4a96aba6d138e5506", "0a32684461f6246fc6131eb5e32c9c14f50e7d3d6c1ebf8b8d8b00fb21baa1fa"), ("075919f65cb3e96c1415312463b37c5db60318c54011dfff108b8ce192cc773b", "213f4ec519c757e180fe0507d1cedae4dfb649ea560b8a90eaf33e163ff9904c", "161542e23525c687968dce0442c526359799ddb36ab3b712f29f08e6bb278baf", "124c4eaf4290a8042b412994d3c231d6d35ff187efb30866b1a069b7413bea79"), ("249e3ba0c73f8ecfdbd2a8c74d281c635a1fe36cee8106938eb0673ec575cf46", "01837816336b01de63f1d9e5c4558d8826ee404a642dedaa97f0fc64aecbbc07", "21279dacf6128a5f3120e80d58aa29b71c6d127d03dda14c9778b9f8e16114d2", "0569f36b5d0299a1e84060e6fbc50a2123ded6e198355136669f47dbeae9d29e"), ("10035ba198cd45428e95a177df68317df23525d3d3a2bacc1f42a5c41829c9c1", "269071fa4509796c71e35f24cde2ad731fbea1a3a3d9d61749ae1ad4b13d54f0", "21b1b360b87c34c5e95979b1139e3a919e1aebc06e2385f155b96c177ce6b41e", "1ad0c0c0aec22b2d4cfd26e3e6506e528c4f00429e90e79c84d44229e9fe76fc"), ("031c5cce77d31f49c461e40fe8a7e2dab3d63439041a063935de4f91886c1828", "003f57bf608c7eea3c014cfcd93f789527ab482acc8826232e894cef460551b7", "14ca5eb324d08de3c4126fbf5a591ed8c88113cb84f3fdff5b4a5d5cd992bf18", "25fbfd37849bac4908929038413d13e2398af0da967bd60ed4739ecd3af39f79"), ("0cc723083cdc7a153dd5c3d4071969bd47215b3300f6019cb3bd29334808d0f5", "0b5cae1958da11f000220ec20ffca115ac84bf564ebb532329bae62c9016b9b1", "248a772fcbdb4a2299fb971ada6af20fcf85f2eb086f48e31c68afb8acb86909", "1f4160a5475bd2c2a3719c8a14ca86dba0bb20157dec3c9275c32100c97e13d9"), ("248ff36e651c4a7a554220d853f69f4dd86e03e0f48d5d7619afce23349d4889", "17a65d8fc9be1f3fea4cf00b523708abff748ed5f89a7566f5a5d38e65551471", "216e25dc3808def454ab42bddf66e7ccf43904c1040b43dca45bf7daa50928c6", "26873e9946b809751a6ea5472a85489a2d64c2235fb7497d80f077a9de6ecd55"), ("0aed93777830ee95778c9dc3f8fefea55248e77a194290c4021dd2ed852eadd7", "11fd3e147d84b8fd57f129fd9de10d15ae01da82b3b603d1fc62df9f3b764623", "26142062fb9995d1cbad4334aa6fd9f18385f28b81f6065bef35b26a77e830e2", "1408fc199c7331821bd932fab9a1b04551dcd9333d50382e3e6fc1d856117c8c"), ("27d7fae0119b3ac6d388e9404410da455ce63608e5cd097314c856448706ce1d", "23874d251ffdcbfaaf49e6e8258086d0839d0d23f69ee01fd651ee504ec3e6e7", "018efe1174ea217fc261fcb3160a795cc8110f8d2a766cec4db191a8420804fb", "2d1b5b71e2bb0c798cc8aca6d5114edbe51b1aca75bdeddee906e53fe0dec7ac"), ("2d9d4e6c09d9225c724e386abd85dbe2232425d187fd7bb0acb17662dc6b7fa1", "21fb98abb5b17b63da5eaa08e36357963d0b7d5cc33d1bd8c1a7e0ce2c034a41", "0b5a043e7cb1f57630f3e639e1ff30a5be78bdfc58804e96ee7e6deb8865a952", "07c489c5e6ec7573c47efc96713c67ad11e8234c5e80db5f4e41772539e09a32"), ("0afe3ccffbbadac3372eb1325264a25133d764f83af3f29cf6cd1599f69128f8", "1204137f728297eb2dbe5c17cadb784b6819f07237557eeb4dbb86d0bf78af69", "08f62ad285f05f8b4f742d4347fbec115898252a312b6c3d4fb6685783415137", "2638b20740475863443863844c38a53eb0d9c24a1bd6bfd2612c3a2056e1e2ac"), ("27d32354368d2d6f9db8b9ac5ad64f6bc35ae0edf756e6fb6740dcd744679c0c", "15650884dd5cc96282124a1f79d401775ea5db41dcdf47ad6f9c0520de7dd344", "05635d9d4dc0b980831d021e6fb1d2805634bcf230f79b12e809e694ebf4c173", "18260523e66b6d61e711351eb4291283c0efb3d3ee4c4d13b6ec10cf751c18b7"), ("0f48399446ac7b5fe2a96e92fee2830c5d7554fa26403063b2bb23ac575bb913", "1e60d84c0b0c1db4d2f1a2c04363095857bb7086508406e6530ca5b23c128621", "0a315997427b7c4bf725d3d5bdb3be5a454d7172f312b4c6309957f7b6966eac", "1f00b0a18de4c4ad1fd67daafafd61ada8c6c01e7ce73dd9dbb2fdb2fc0fa36e"), ("19e849a0acc9cc9758983f35381897f97372140b585e7ac38d1238ce7baed6f8", "222a6b91b8c11aeb8e9144f7baa26065ac18fecb756c36894fd7f4250bbcad7f", "1368fcc1ef42dadd403e57de6a2d11f4eca553558d64392a928f8672ade29db1", "1aa698ae780dd330d42a816da9382ad01f683aa2e15f3bfa462bb0f837d1f52e"), ("2a610c3b40d4131f17bf31bebc60b80f75c5b16d81783d83ffac979aedc1c6ad", "02ef53f19a5ddc19f0b94d0c2177fb115489ca6b962cb5a53ffa4060419fba1b", "0d3b1ae17cfd86105df040b684f229f2240aec5349af665e79e904f6b0fd3c14", "1a378617dc7e3062e61f67a229a70c7f1cced66ad440172f448e9a1b9fccc4bb"), ("2968cdd6c3a92f3fed51601d5605fdd271388ac3a94bcfcb668641a552f5a89f", "0d0705c5dd4a0e2e7de97ae32c522fd0c7f85621d41534d4d252435f7e5bb953", "049b49fcfa372b3fa31f8341db97c962ba9b04be63a30403a0d3c7571681ddd8", "2a7caa3ccb6ad92dda91cd7a6f75ef88cab7f7b5936a42db9db903210ad4d78c"), ("108f980f86c990ebc765eaf20e05987e7f1cc21cdc4f1e0776602bf2b315c753", "2fcbef857c1e26f089e6bd6e304e91cb88bece2ad165ad4f611fe6c314cabeaa", "1bf2e8aead644194abfa357bca2dc16436bc6039ad6104d3bf4a3f01a940e8cc", "0e99692104bc987a37fbb6d67e20307668c38656ea6096c4d3ebe4240937313e"), ("23ec0fe89e2458e309cf30a2771f8771d9b34b779e337c5a87fc0be4d65de840", "12f99b900972827edc298dccc418d4633cde286d87309c762192ed317af900a2", "0e80324d555acc9147034b9f2c18a85cfcc5d002e33d01219758a0f253679dd6", "013300e265d0ad3131a1ee78f451150c03b908439ca875c8aed043164143f56f"), ("21e7d7ade093d8eb64d954354d488d682ead4965d3b0b1c7e4d391e8c861f716", "30639c48c3b1c6bca06c72ddf280c84dfa916ffde76b609864cb0e810929ab48", "2ac212908e9b6e7aa473535db1f1952166dbee9ccec46f7adaef9a90f54e0b53", "18575c1ab4244e6447906a87e0aaacc8d6b5e17fbb23bf2dd4140d811854a7ec"), ("2f66fd084f63cab859f6188ac9e2bee5aca0c03932b1aaf6c06508ad49c292e9", "165d031b37d6180c7833ba78b44a14ed7c03f0e66a9d3b0bc1e64db3e02ecc51", "28b3bad3f0f1b5ad4f99e2e7340cc8a675025ccff4980b9271fd24d9e71027eb", "12323e03b40eed46db6f86f8a3d727b35415cefa9a4aeaf10d93cbb3d292ced5"), ("26716b4983e5fe94bda1faf80b0f434a1e0bde747f2fab60e2ee9b516de71fed", "2d5d28f2c60ffa7dfa26379432c4948e13d268a4a0ad8a477ba1ec252e3380b2", "1d855c56d8d7e35758aef3b594331e05f8b5a0ed728140ad5c23ba553bb12c72", "247e49ed6bad7aabb742dc392ee8eb3b195827abb3d04a7ad7f3cad3fa687322"), ("129aae6e352cb8625bc283ad2b6ca62b677bf338afa3d1b30599a831b3f588ff", "2bba19cbd1e5f703d9f4a5f39fb2c6348e55eee30a16f24afc8043bb931ab2fb", "0fa9ee8311c19d249423b20c902dd3df3c5678e750b6c17e64a2e1f6687fa329", "188b3e78005a31453a00d1d32f56aaf97101059db5505fcef870962412f6b934"), ("18597cbf3b54d0cb2073815fd9397a120650bddd562c5d6d78ee3a7cad1e1dff", "1d84dd348fac2d8ac7a8fbbc99522ce3333d0e9444ab6010dea339047acb8420", "0e7a02eb791087b1d44ccdc01820aa4b4f88d256cde37f1a51966fe67a5502b5", "1ad9d7db4e598b5e1d1dcf459c6d36ad5c82aa0e0296cbd1fafae887a6138530"), ("2e4c774081e12217124dbb1f731931915dda1205cbf2fc12cfd7cb937b2aa4f0", "0fa831cc707a8913be74daba4666e6a3a18720b46ed92c101b18c9e0e51012bc", "250a4f57d33dd4d7f5adfed079602519e9f395e146522140b16d67b4897bf8f3", "10df9ee23e3566d3bd7de536eadd8b08a7c9e783d58542652b44e440c1080cc4"), ("16eeed625ee9844abc6bcfd5b80beb382af4b3c85806a330321b52f6eb743f5c", "1a739ea5ec5f20754969697dbba0665254b4381e95363cd97429b87eac0899e2", "184892f9c2a6a71ff9d35577ba5b50162e772c5a696009f2d185a7e9375b4185", "02b33e5c3d68cb0b0cb17f5e0e7ca9952e3fefa89a880eecdb137c560b389bfb"), ("2f02fb4d711cc05c9de79da1c4622ccd9a6ac2862ae45873e3e3f7ca237a17a3", "106f94e1da29210418032a48fba7efed467c8477d161f7077fce8e452deec69c", "1ae44df70969f7055dc29d59c1156cfba0937ef8f2f6be098c48179133fcb319", "2f5d9d1f76f1db83f958219182eff9067a7789ecee8254132133114231bc148b"), ("1bab8da5413951d7fd5318a18625bc321456c8ccf2e5db4b14e4a2c4ec02060d", "18e85a55017ad7401d6c7b3965249580a6ba856b27022c1dd7abc605d0be91d6", "145cb4dc80bf1463f0d618898e92a7250a87c9abdfb29f529262e08e612b16c1", "267b04eade13dcd3868ecf6a5e515c330fd1154981819fbb64af2c38e3f9b64d"), ("0c34e42e6546ab9556417abe0ce2436e87e9e96f672f351b5a99d59cf216b437", "01f5157d66e623e33a43c85fc3296053ddff8ed1fd9f8d406a1d99eac93f4be6", "18d3a353e973bb4ed7c1926ba87e4c3523dca984212aefd24aa0c88d819a2da2", "200f9e1ce7bea843e833820a7f7260ad6e90fca8dbe6a727b17653711a3731b3"), ("2c4fd0b2acabd628cffdb3f9ca8e9d20e5c5321911e78108f26944ce536a3e99", "26717869fcc04314901eba0e7eb244d55f840f89d4f8842016fefc4754695674", "1039cfa5fb377fcc2784fc7eabe6ecf1f124f272a759b1268c8f32f686824ad1", "0cd43c97131d08fc476f6db87d48dc45a29dac37d0798a0661515d51b4dab1b3"), ("296ca9c6e735e75bc65df5db0733896d6bc739fc6c0fb15ef45d93b3a6c81b79", "1e8da6ccf256b6c71f1b5b553fd1ad77d7d072d49c86348db49d815c3989531c", "1980b68fcaf4ae9d805a2ab5de3f6c193f4193a03cc479db9d8ad1ecc97ea446", "0e06ad164be3a6e76aaf478920d4f8ce34c2564c7eba60daa52b7a4a27347c78"), ("03e0851a4039a2c38c70f7331c733079784f9446239f1e53d12da1c76265c9fa", "028d26ac9c761422f45935cbabe8b4f9913e16ccaa44a53df9b8f4d6e86b2584", "3033a398521ebbcb2a080723d196d24a299eb0e56252673ddf734a5c669d7f26", "16169662c11ebb5a54ca52f1f266f3d1ed9ff83561d65e7873a8db8a54b19c8f"), ("163e36d199109255c46fadced32d980e11d8289c0483fc2c792047cfe3b6d744", "1e6ed50882d48fc674c647a2d9f8a14732660519e16f3ae0e78601b0f73fd72a", "0f6e088617b0a604ebdea0f455bc1f4f3fd8d494f1497281f1a5ff822f1829a2", "1a2a1a8cf74cc9ce73a62d7bea86c677411f4348990587b924e76b99129cd3ce"), ("2e6361788848d1743075deb8eeb0bad6595d681e1aa6dcf4f21fe41f9c0ae460", "179392eb83a40aa06290651ffc4d01ed68b5589c46d8249fa45cb1a6560643da", "10ff1597b99adb74e2cb17a3eda39ccee8bb256ea532029788ed12e6f88bd22d", "130113842f1b1e1337b1772f1b7495027f6ba43a6d9d0dda1f99e551e5fa68c2"), ("1f2f35be0f84ffd9ab90f896980c180ff597828dcff482818463fbe87b3b21c0", "2ac6ee40731608b4cdc2f568271371637ea4f4eb45b5fcec7fbe0fc286bda074", "2a5e142fc007e87dc8227c669c36b7ca64eec81a75b1e8455067454a1abff6d0", "07dccf32ea6e9d8ea1771affbdcc7751e2012ff6314bfb3459e791b365a09497"), ("2aa4d017faf12e957f4ac6eb43416f5a8a9185fd3ffd46f7e5eb12eee0bf483f", "30406a270f87babd7d485ca4cd405f9f719a26ecf6ea28dfa80cacea4bb332fa", "246429645d254c77901b3f0ac444d9768c5e1aebcb713188d758fd98ea56072f", "2508bddeb0e85b70ae191885b1f5df6f0d85c6c0284c7b89afbe99902583c0ba"), ("1528ff5114a07ee8aa91dc30acc922fdb80aea4d3972d9929e8000ace71701ba", "1071ac6d9df81e3f0db77a4c0b31b7f9f57c933f1593584525d877be89e16594", "28d793e514847a2762f40cfa836eac518493043df17683685bbace792ae62725", "1b704531827b886b67d2cff4f6176391d907cdfcbacc92823173c952b87409bc"), ("1a83144785041364c85ab4d43f798312d0643d3fe3d713acbbd97cb082ca0c7c", "03414ab93ed959385ca98d46185492cc7882ff24b6111c3c28a02399a3a588d7", "2947e8535484796cd5aaa038b4ef6df44050781079fcb02d06cd21372aa2bff7", "1fb3ddd0893eb43367e3ad460aafb53dc94eabb9dd094e5c03b1e5a48fb7d7d8"), ("01f6a038ca8d8ec027628727cdfd33c2c395ad9650752563c7cc3fd11b342034", "25a0c71f3f0e66f1275b01bc55a21941899c334100ea34a61c21683c10df3b6b", "0b75b9d7a74f45f6b9a35960d22ca292489431b07e7f7f067aa8dea561ec6e60", "0ddad4ea651a0e7680104bea2f5137298007b2839ca9d8a217c69da7b0a5ff2b"), ("1379e5847370f1cc669f5fe24b53769eec3d46f7c583192eab5a5b592e9b4d15", "270901ef6a1c11b679f6c8963319dfa9a67c162005cfc00a25a21d18d8a56793", "27fc542c860a48d4f8bca2a0a195933942af314bd75cbfd15fc8ba65d7f94560", "2cda754b7eb67de5a432c298092cc6702cee3e2a6ea55ff260e8860d15f9fd09"), ("12b161bd8e813b85f18c5827f79e63a0d1c45b03a575e599b80fce656f9a6f72", "019c1d30494e684ffe114a071f5d34c2fb6d41655f4d4f655360f315d1acd6a4", "073bdccc588aa3501f47d276b70c5c9ce15c118d6ea1568717ccac46962db880", "1821d9fc130f4654ab8dc64f11fbd3ff07fb7ab780378ed57cec5cd4a8e89acb"), ("2e4713c5efdbd96046c23c52ff1526738b70d16aee8ff3f0471e8d88155719c3", "1a3cf241eb02e35519bcd0c192e06b8f708c548f14e0a3f19d02038b35384121", "0b886a7fb26b79bb0a7b9eedb4d64ef80c8c40b30ed2b6d197d9f31df90a5c35", "21451098611a5a81f254949314946c20564b9668a690a3b1a2b782ae5574e6cb"), ("15bded97440f0a5a347a0e550e040b2e7316ba0c54347f059d6125673a13506a", "080dc9471bcefbeadd09825b4cee802a189246a3dbd454599f308d30d4a2c189", "2b60f6511bb66c33ee3a8209dfdd869d61edbc6bd4280b280890024789a50eb7", "0e7a428a07d95ea13cfee933407199c7c3b72a89ca4f37e92bade41d18a860d9"), ("05220b32695b38c02c25db95f8f7c2231d5d650a36429931a7d4fd9320899fa7", "18615fe520c49c8af7167c94da3ba8ce9c5c3de4832d138f8c21ff753d8056cd", "14c964907b2bb310e1ddbc35a129c89b15738f6c7299f63a87882dc0a124a7f8", "0d3c8e72701a461869290ecd920ab5aee36e6f29ea6c33a5e7e40bc5df3b33ff"), ("20682ba3c9a64295ed09c492710d686687b1d23cdc0094dab2462b94c7d7ab25", "048169aa0630d3d38d4dba5cf735e5e076b2ceebb097ac75402c7777e630d42d", "237f063668e280032aac187671d2dd264efe8b2393b50f2eb8f1e71139d69cb2", "1cf413379cbcd800770413903d585da8417cfad21041a3fbfa72014b3c2ce5d4"), ("23f050712903e33bca73255d5ec08d03deacaf6f9baadd385a79276f463a16bd", "23606ab00b8a55aa195c1e587454753dd31b8ee4b4de14b3082f9af12bb0405c", "1c8359318c613c76a3314d4b1f7a1a060b990cdba22c29f03c014b47882d1a9e", "08303eb677b774f7532403decfd98b0cd911cf79018af0870e20b0557fa4cb71"), ("2237108e8cbdd26b5dcf18e699796a02403be38818df8b0c3bfd39b85ed6eed5", "2a113de2672c66d22ea477ba3c2b5f38ecc727ffbe3922ac2c3554b2ae43cae8", "21aa366ed6e0dbf6b06f1f1201a29c450cf5efc2c0f9dd0b3768387649c56689", "184e4ec5ca6824a001f2fdfb2ff462e11e2e57ea66025d2a2e37b37a379a59fd"), ("17fcb1c829def6d8c105391b94a8bf9129e412bebc6f06814776958e46f11f1b", "1dcedcf1cf9aa810773485954137054206b880675e92222d146c3a7d2d358581", "0726972e6effbbd9e76495e64031de622a999405248522beac59034a8a899f93", "1ca262b2aa4314b357e456c0a7cba74af2a5599fa5011f69f2889175f32ef597"), ("05f17313f2ae58ca6333ecc13d5f815995bf749aa1cffdfcf9ba02104c1a6e9b", "09921ea62330a3d5bd655abce689d4d11a6e8d87701ca1e96bc1f12fb4a401d2", "21335c8b0a2af500d7d00e8fc5d63da45c4a41296c49414165c80eecc1c787b5", "1c3bf710b43d75ae407b7d67119f6e6bbd6e43c123a2cb66ba251251727a5e37"), ("0c6f0fc41298ca9825808cc8c2a78aa18ef5aa80d2d0c22890a93ee039042ed5", "1b8f29423a5df5fbf83a142afbdbcde8c120f0f741895ab6a34dc686f9a32d29", "2284bd5d0252b3a12ecf8d71b953c92b8abf27cac7044079736383e815f6f9cc", "2f10f00d6363de4b341919117663905a37dc9e52d0542930fe791a290ebe01f5"), ("06e6d20b3532024ea30f26c66dbfdbeae634fa9e2b0ff7252434b8b38abf1754", "1307819b951e8c9dd867c4ed531aea2b8b00bfff4a2ccab2ea7b843fd31fa304", "20dba602b1e957f58baeacdc3d40863c739da6f37c274a858a7af3b0c0cb59a6", "1ea8b2d48b345e9ed7a44de02a664c36c32fe8d0cc4c89e47f264de7b347f539"), ("27aaf5e3dee6fab9d562cd564d6f28622e44e7d80d2038e139172b0d48e12329", "215fb3f8f6a84294ecb2e5c8a505befedc52eaea598d72c5699282182fba6437", "0d980be93e6dcb98c36947ee9ddda705bfdd4ad233c2a49a4516094767b3e7f6", "087d091833c2c96c0321dc6e051e7f8828e1c45d7627b32fe5e45ed014878f4d"), ("29752a6f2208d5cb32b54ac626512b9f3f0e3bd39a3dc61284e4cf5fd436ea9e", "1e41d679f9b28838207923f17348772b80c479fc53646ffff808bc50962dc965", "130db0069aefe9ec0faea56113eb922cd9245c664efebf17bffa7962ec8e2748", "0e810df3a75047642eddbcd90c94092e113bbb23293d340252e94f460fb4f16d"), ("01395cfa2f5175dc644c91f9fe128bc7e8d67376a5716f438a168e1df36f2732", "09305c681cc0ef93ccf6dace3962deddbcb897db1365ac817bbd5f4593a84489", "06371130693d91040164280b6b6a759f79eff4c9f5bfd647734871aab6c0954e", "1e256bd49d997e8ad5fad895f0d0b5b7484bc17ff1e524e956dca1bbab8f8bb9"), ("10d36d3460ecbb21299c2fa0ec4ec6afb0d2f3e7d41138e239fb374a56b5deb9", "09ca823be00a4a223c238ee1668d55f1e2b41e6b3fdafb3abb60584d1f9e2211", "2c7930ae4dba3aa8c31f8e7479422ee1d102e03e6b9b4b3a22e488d10d2427c3", "0e474c779c4dbb634bb6283f23b5375f4c018f2a6337851adb8fc5da16a9e3c3"), ("1408ceff10f93230eed5815f815d289565c3babef1a356d64aefadb6cdb88daf", "034e8dde8203356e10086f09d289022c133b28852a012536faee4b5ce58aa2f9", "1afe76501063e0ed5402aa65c0baa9d2ea0f6708d01ee8f354f1d7cf8a91a06d", "17a4479cc1f6bbf76966f45ec624a78563085abc2c627bc738b19442f1e9ea27"), ("09933e758a19e3eb2298f834af4e5f7b6e067efe0ce73c6edb63bd4ead659015", "2c69ec5ed70b76582396d63c35f65a20405197a81fddac5e6deb29ff70199c33", "0e40bdc81eeaf59cfbfcc555ba04b6771b4716cd014d903f707abbbff1f78b0b", "1e7796754b01d2ea2e1993494948a72ab57e67d81f4f4fd25dc00a61ecd27c29"), ("02cb5c7ad206e39684c76fb13fd131ed04628b9e5c0701296dd65a87767c8fa2", "1d964ffc69f28e694cd6e1601cf09f0be15ad0948d5c72583d55a342dbbe3312", "000da0758840e319b8009e017e99f7ed71f1a2f4ee9b3254058af23a0b24e500", "13682421f5a6854470b9c6f0776e6472f5d7773bf942fecc6f9963f29bcdd5fe"), ("0a37045880b82453ba36bc43a7e54ba18c2800cdaab3e29b8ea06f2c839a62a3", "243db589a7409c94f2e70ec7176a731de974c1d9631666f16fecf215589a8f58", "12e2e0ef34ef338d287b69906ab09eed979177c7dc210e553d1d881dd0b1c796", "106128c5cf152908080fd0abdef4907de17f01d8a26b56806286cb66c7d7eebc"), ("0be9198693df7ed73c281538a3220e56086242eb9b4cd2ddc202600f6231931d", "29f76e541efa3d8f46278886a2920af46f7a0982f34b9e340d06d0d7d0fd6781", "22e4b105e30fa1fd46963ff887bf4d4db0cbcd92f589102050f75afd00519c40", "191aa1657525645f133833302595fe52263eb41c1b88da030628491f0074f6b3"), ("15614befd97064558859fd5fc0c238f1ce3a7aad890f76c7daff9b201067376b", "07486837575a0f36ea92322aef23a1bb1431ebc259c70796804473a4cb1ca646", "14c1e60aaf3f7620fc5a64b471d6a37bfdc10ca5620d1972b4d7018a8f513786", "20da010c3db2a472588d7da37ed0bf288eac9afc6281718c369053b2cab5ade8"), ("1258a27c488a3d5e4aefd5c66b5f91cd1b8bf9ae8d37451d78d8a7a93fc17e94", "28ec3015f342773ee8901d610bd621819d321c9d99dd548cb2cb3d4916900514", "2ee135b594238427b0c9ce78da8361d5c2d2a45f31263a6bfcfe4fd0e3b48702", "0ded646fd00e51f8cf660e41641fa85ca7b1567ee145a2c31901d79adaeff256"), ("0448713b3d49655e1db44b2af896987acbcf2db100a82f001cc319cd85657b40", "14c8aca8855b66a88fcd9230cdf7e65765d6e14e8c53942d9b9f69fae0c81618", "15de1aa41b01a6bca4ffbcfdc763c62df17b9f5f475c6017301ef107a60e38f4", "202ddc740b4c72de840bfd06ade8544f77e7750a0946eddcfe0aca2a2069fa3a"), ("1f0e0268b8de63ada466c3301d4798cefe59a524a0f71b89689c977d9375ce69", "0d0ae3756afdc32eb009def3eea7796c544efc12516a9389df32397e094ae79c", "268b143c51fa6e304ffb6ba40d02ccae765682c3c53131576b5356a039e9ccbf", "183dd85e622b1c638322b2f5117711d79a09475bd4a011685dc04744b84fa1f9"), ("07f32b8faefc7113a5fcfdd650f1cc98b10b723be9703a25653b59e5abe2cfb4", "07fec5a47a460221e2a6e7264190aa8c233a908d5026ee60e7c2f1c37904bbc4", "269e3832e1ae350db13908cac5d971ed7e643dc4ca06cab35bc5302360f97ac2", "1e870a3911e57a290fd3d745b2dd9c1c1b05b5773d01bf7e9c2edb3405d14634"), ("235f921bb4a1a93d9eec7cf7309032aac27a4d0b68bb2e5613be18883a1a29e5", "2efc7fe0ecc9827e788d2fec046616b4aa1fe5580652e283a26650511a4160ea", "1bccecfa6db5b4f6137e5bf430e7e8e14ccb059f1842f6f827859a980269ca88", "00077dcff698528a416c3ab23e589c5dbe5204a82542e37d7b324053181449f2"), ("1e3ff78bf207a5039d6086f546957d05b921d36b7c615150d8ddbc8b8f3b6a8c", "2b5f47cb649aa522d69f03fe71b3d96ba45ed6842af52d442cba358147c1d21b", "0a5fc55e1f9e886c7b118361f97c497c31cf32052da3fa11793d8229a791f98f", "1e7fc4cca89061897ccd393f2de4a2d4bc7a8c1c638b1a621b03667bea22c03b"), ("290ee317cd9cc637df6a1c92ab72748e420ac2b331ddaed3c72cd4315c8a528e", "2f3ae9f0f3c1c3fbc5f0673d7f4d0fd162905e86a567503957e98470923ff01d", "2ec2e10aafe1e621361ebf54cd8b5ba1a454b429fd5e15b0117405b8520e7fe5", "2a823b5700899759012122159be28b9426b72f2defe4f8211b6e7640b41e7e72"), ("044b064052908a2d5e278b10ef4e75adb1f4cf3e6f469791d1b3bc637e4ae36b", "1e7b73ed5845207e9b77ef19c8d69d0c83d1289b8ae5d6bf89423c043cd24de3", "1352bbf6ca7b98db5ea55f2a179aa5957c8ca64d05975317895f9a5ecc9d9d5f", "24284c4c94d87314cce588e881d1c507fac03886598e93e628a2af587ad1aca9"), ("0cdc3edd07f63ab13eac3b1602129963854460407286a185d0cda244487c9980", "1c158b06925d9b5e0deea1af3dd3334d2b6b4749be14acad2639655099ae37d7", "02cf3cec822e48b6d084515d45d0d9a81f3153ba07f32bc0659ae2c042f37081", "0feaa253581e423a4e1985b6078d638094845b4398dcebc04f530506c8628fe2"), ("00967a4dd4a2a922343579dc28c2787240df1b308c1d79c0f8304ac24042d842", "21e3327a8834875acae58995d92bc47b4980d4600a63e57732db97245575cd6b", "2beec6594a6c6b1c207dae1411e4bf7c7fc82efa92863e3bdc5a565da4a9e381", "2b225bf79aa9899e9bb96d6b6efdf404f7962e72dd76bbe263ae3074ed3d317c"), ("2d2a3022f47bb43e37da05ae3b66dcfe0a8455b107616f683dc0a382526a1c87", "16bde4c6556da2e17bd0237f52f3539372a2a16c5fc0c6d20bf77c8504c162e2", "285e55c0a6b207cd6aeb80f6b2593c4e7406a1e595b1da41c9bbede54c1c16bd", "1465a86336eb6e6a6f0a2231e7ea838808eba1c43c6e36e40c6e0ce34ff3eb42"), ("0d8408f0f2e7787e92b836c68736f96aa463bab01a28a5d666f01fff159a1d09", "0f352387f151b0c7124f663f2597620811a498c5d60b5c1c70d3bbab8f59729c", "17582216816ab154db41e5b4c83b46623cd9a7f81c1328baabe682e77cea8169", "151877b0d71d857f9437d8e24ba541cabedefa90c5dcc487debbafd4f4cb7213"), ("0079abb8421e8af4c7fbf0e0bab7a262046ca237905f1d6d37400aea5f8307aa", "13ccd46ad1e23a460bf78236647c83fdc03c1905a9dce7bc922a94e189f505fa", "27ebdb26a39b565a342b86b051744616081cf4b9aece499bc4b6b0fd5b18cf0a", "07e6f463635f6b5fed195f172a73404c96e7fbc4b6378d9cdda09ae0c64bde63"), ("1cd2e3453ffdb87f3c3e6f01551990f4bc4e8c2becaf49f577c57cdcb2624d24", "2e68f742404a645a2a0fd78c062a439577132981bc79b0fdf841dd93c06108d2", "00174e913acb790e49ee46ead0966d373ccc1444a7e939e73448c175d06ccda3", "0c49e3cfb1397d11c2d4a386126230234124c0d945cc0da551b7c505aac264f5"), ("1cad488a5e030883a2b9ebcb6bde4b7ba37d2ecfe0fe605ff3a78bf07d22d0fd", "274829623be8293f127b9308b5bcdb70e556b09c6e04f51c65711be4996a1d17", "1e1bcdfafc7600b7c95d5c9fec1c37c4811037a4097a6fadd610be0ee9d8a9c8", "2fce7638ff1fefd2b0e28def36afc9316d560941d09be37617113fdfd505f473"), ("1c0cdff82ed3be09d7b075c70b623814948861296189bf18f9e63633893459e8", "2cfe62bc94274576bc234f220380c1dca8158938c46946594081a563c04c131d", "0d8e5ce4d5fa36609b7b5077f30d38bc07bd432d5f1428a1b883195081911106", "10f34380d8dfcd8b0f342c2b1d19e798d52ecaa3ebeb9b7167ea86702fd29c18"), ("1ae962a98428be38459d2c0e90e2e99a07b20b2fb40afb7e38521da8d4eb6ccc", "18e7b675276f0664123ba2ee23124b93423365a7b40331cba2880f07ed04ac83", "11959c7f3127dadedd32fc93de6aaa5a2298604330536801cb3e6196956ca828", "27b0ed0680e2660be8d231e5f924d26548fac4a1e6782fa07f32cab6b13699a9"), ("11c7e58f8aa02c0fad08bd8af5ecca6b5aedfad22780f9b21a1cc040e2bd5887", "18a78681da8bc9c80d4bffdd2b827b9909c4a7bb8364263635ba40ec833d6f0b", "18943ed462cea9ebab3aaa5fd9525f906a00fe379cdeb6e22b9fbe405b3dda35", "28c8093ee15813da3c72f5900611080ae285bf969713f9f76392b923149d995e"), ("0cf429c6a5255aca55dee3c34e4c4eb8aa7b21b492e00e077bbdf2dd0aa8faca", "06be8ed53d733b44b159f502ffb53b32e7fd6fadbb9e25a8d8d109945ac1b20e", "20cf3f60d57428e1e1bc8df16310f89cbc9d02a2be40bb12378b2a438b052e0f", "2041eccf328426bd1c76f8d86e8114ee081fad0deba41c60cc37f49514a2c687"), ("0712ffa0377f068a162ab29a1cfcb4befd4be1a60f157217aeb784c579866f5b", "27b612cc6e0cabf6775bf008787ade3321da39ee0c638bb735aa68f8e933d834", "0133ab8ec4521e4e09e0c4f1c4c997fa8a084127e5d49f5eb477cc0e3724438f", "27d864ba43418b2b6c0cb699c06de4b14d2829ec3884592b94a511aa30d2423e"), ("26350b8e93f47bbbcd5f22fa6fbe33ad448c21716fb4dc0bef845d864db54fba", "2e1edefc48e93a8045e7d91127fbef5d735abb71550a24d3ec851291f2cee251", "16b2c9e877a004434fefb77f0f9746270fb2a2094d3360117923ed2014d7b8ab", "1bce8f30c26f752ef202722fca2b26e73782cd8808fca90698cee143d41aae0b"), ("222048ddbe43bd7a668f0af62e5ffce12b0a8406aec9936f2322f3290fbd41f5", "25a4ead7906624cd729e3d8994254d7c69bc8adb223443ac2f7faa9487577d3b", "0e0e61e9480e4f3e7403675d1135a8c3aa334868d841590e7495292b633a2ce8", "0b0507b65d5f12deea84d8552da987dcc4c8abca66ece2c843b9e56a9c8ade27"), ("201fae52b8758e70d96d503981a4e38fc6d65ca126e9353c80abc7feb1ab83c8", "1e4d7d4480249bdff1698f4c6d5704f1115d3012b1ed78b361ce255c4d503333", "0f71fe563e03635fe8e2621f44ddcd170b41c153912c23c07c24e19c6d183791", "034ba952dbedc50b361cd3fd7ca4861b83f50de47c101816b43a30ca19a52cd4"), ("278e5888004b776dd8ce20f6ef5ca237695c6c19f995f6524f774bfa39150753", "1a2f2e78b9a1b9597d4dd5f20d19492b9d1fb09eeca82187a717cc34948375d1", "04237e7e93b2c150d2cf9f850b0c6a08ae88003930e3a62dbec458ee34df6df1", "2227521e6517572da97580bf903bc4a14ff0b3612e15691417ac8c067a19ae33"), ("048a236c7c95ffdf35e155c832615989c2b1dab7e2b00e3586f977d980fb4d58", "0aa089b7af7cf3c26238363dc349d2dcd9b90c7aacddd946962cd6e4460315d4", "1b6353f354bbfe3502443105b2acaab26cedf266e5bf92f4003d322e824503fa", "1129cef022d609e9dc3f13a5ea1e3dd5f239bbaf91a2701b20330e829b46dcec"), ("01578c74df6c68d847851b5cac930670dc26e394c31404207bffdc1c3b5500c0", "0b2aec6d6d41768631c0bfb395e062f00acd4a1ae89538adeee8a9440bc4dbf0", "1b3a663934ce660a436e3e11f0cd84b9a90d9621d319ee99c5c975b8eb2eadc2", "18724cc2ad819709f91df99b19b5de2ad8b75569ada09940fe0928bbc374d590"), ("04baed545ec1ec4c0598d2461c352661945e1f8e40e931e0f10481e0432db430", "170e1ddb2b3d69bea6da312100255b1c7601754fe0b83475839c404c4b796342", "2b379e8cd5541f0f0fd5b5169001c0a96c8afd3630aa5b8e0a8bb65f1b32188e", "29731b0d82ca2b9e196bc1b5a29836c9e393d9822fa101f0364f389250f9c58b"), ("18754480918ed4e2a1dd02326f86c2af83e34942cdbd0fbd08911ba2b122d446", "1decf3a7796b1bf7fbd4f4537b461523c2a054d0ac1e836fcbe8a829d9f9f26f", "20a5ab6638d70cb9bba08116422898eeac037a9efa58fbb1931b0dda09ce94fb", "160e294944b1d682f7a4448f8f782c61e9e1d55903d2038403b414b62457c762"), ("0cc90d52601c3611f63e7a40139bec573eebfe9ab6ae089072a39a7ce0fb1615", "16987f1ba908ef6b40b97d75c8891321da7d2de71981f04bca0bbd41f1d58064", "2d0138a0148d69daf461d7f8d35909b8f93fd9d7ae563c44db3f245b139f3c5f", "0660e11a325a039967d263b9f6b61e62c4408229391d546c1872ab7aadf9a4e0"), ("01c84724f0a4a039227a6ab85c74f9ca22b13cc8b0e194ae4f452a394329cdaa", "023d1943b1951b60bb4739ab5f5ae453f6ef4c38770f177c4d4eb3ed023b52b8", "0a064f1f4517e625558c945013c4d894d8f94ab7cb7ed9b513d869bcf3f64136", "09dc9d9f9a8dff2d883d302018db7610f1a748416425f5abaf160eef06742fc8"), ("1486fc12e67425d45adadb00e349e53bb2abb307b947853dfcdc9fc1f900a2d2", "2a86ebf05ca42cc8748eda5da474ba6dd6cb41924ff104c83030ec5e4ce2611b", "2160bee412fbee9875db42da617c0eff79b48b2491c599707c653274ce1dc27f", "273941c0c53e512fcf27be2267d8bf8b3ada4355bcd7634ce31d67e1f0244400"), ("0be081f366cadb3d15b2f119d742ec1f054c800395eaa17f26d36084d0ae1f6f", "10798e70a29bd5ade808875d6b670cfdac452f74d05d0c84f93bc38aca8bb1ba", "237c2cb53998b1b72486338aba112cd4fb78083d8dfa0a969c52285bdbc8669d", "09bc5c352ce756d8583594ab4fb52363e605a047e78095b292f1b1c1e52542c6"), ("1a7ece53959cf63b752bef84fa8d5e3162b9f2a5dee5a61663282829555ff36e", "23bbd0df4c2177912a1491b5ac54d10c47e41dc5ee30ba53975badb33678123f", "144b2efe7425bbf6b7a49fa0fb9c3ee8579c423f6864d0e7ca7c5be00682e60c", "264c51711b8af9190829efd7ee287f28d0a09c42f4b3a3af059700dc8bc0fde0"), ("142e919f7580011e4b3a2f76942720586f8d51ad14e6072d956127ff0c57bc08", "05d97d74f7f5794ab7a4eb4743051c9de966c452f9bfee4988bc275bd6cd18d7", "26200c724b66955cca0169b02ef063cc33d884917cf9da9bca4f760ac3ac9d9a", "2eae5d14d55ce43522d739610f1e908e8009048230dcfc79595b5ad76b0de573"), ("2b37e40d63a0e2fbef6f23d4de66804878bbcb89933ec25d1ddeb9afd8f5597c", "11de228a7faa5045efb949f3b06ffd0ccd2f254e22f3dce200fdb7c4f7ed8bc4", "1149f2106576bec2a11305297f41ba7797db4a103d3f3a7787df9cd90891ca50", "1323b6a107018c180ce04b7a9751c7658022310c69122adf383f164f6ea9ea76"), ("2985e529dabf9cc387c1d3498630d68a4aa0953171d4018ab75c5d56e1f2f6fe", "1335e3a8a75d3dfdf6dd26337c089b7c46bafd05a1db4ed10dac86b19c60bb55", "28cf0f5778934e18a6c20a4bb73ec86b76d622640f3eb819e09fad4300155faf", "166a724f2565b33ca5c2800240ad821ee682eec1656cd5d630a35fd5fd99a5fa"), ("08a16b2246c85377af627da98052ae7bfe163c5080cef587d8a4ba8fcdb482cb", "276572bfbc6f441824ee74e17ecaf09b32118a1d0bc9d429132d15e9bfa6b7c8", "200f7452cf15540500c266544fb6662076bb92a9fbc0cf4582fed0d126e65ee5", "07632a098cf9037d64a8455d14eff898ed55dfb636d9fa9fdcc970f18c989d9f"), ("0b196beff6e037f4320b4129c384714e56fc45c0d6603582cf076e3f3e955a5b", "1c6757ac4612489015844e494563a539007111594366396303536307ac6aacdf", "16c9008421ceba87c8c16e5a3c6cc6ce42d058a401da0fbe39450ea51cc2af23", "00d194fd938ebf0325972a5c60489f8f7ebab5bf1c9f4228a5454cbe7ee7602e"), ("075f75667746e0a15ab75c918c108a2a22000b269f89e098891880cd22075450", "205883897c64cda1818cdb2c7d7c7c575235c13e6f705b0766c39df6d8d3c05f", "1be4b22fe17ed60c6b47bbfbffa3d5be1ed8f3c3d41f48de87a39aabf04cbea7", "205a4a3c2b1483007c5e62c59ee5109a437fc12672b18cece701883076f5ba80"), ("13eee955acadbfdc56e1f24a846aec6f98901590ba9ecf0a3bf4c01d79cca8ae", "2ab3baf96d76f19f6a5ed81939a49edfc3c8409dac54e3dc42da2c10f0d16f96", "12945f1b612a3e57741ad4c6e0c3145bcfddb30e9203c079150af92eb2b0aff2", "1228c3a53a386be54c2d9e20bf1d08e41b4adf9790efd74dee06ba8361fe9799"), ("00b90d315e8cc8341a9df381c0ac2278c138245f452bd13231500337ebc4f0db", "117b606d396d5fc48d521b5d3066d1adc685968e3e7379c4f840abeacec00f1b", "07bca5d6115860c2d362db8f56111c48bdf503486f2dcf6c40c1a3c82e076671", "1bf0a85b141ee320beb0e802a9d7c88b4287e8916e9384a940b020a745849bdd"), ("20f04a0b742a2b770689fa40689a2d99058270a6054def7d09a13b355885f059", "229a9379814596944c783c8192431fde75d2b5dd1f94ac331251eed867d313cb", "106f8de823e844de12c61a77169999add4329e8add90cc07d6c0fedb65dd4139", "233cb06bd10689f1eba5cdbbe3d0c0137b213dbb8d1bd3a66b10e27618250143"), ("0f306a337c30f9d7de82c0528fb10fbbe9a68d7796b93fe249fcc33366ec0181", "2635cf0747d02d24ee5195a0259ed44cf608cd5b27cc780bbfe31d1c718642d8", "1e244d436915ae548e5a710338aec3ff6e5009d4da581ca795edbc512e344495", "2999e41afcbcf1ecbbbf5d73e1adaa8d6bfd74ea2310936c41c37935fbbf9b15"), ("26c8cb87abafbdb34c23d8c15953b95533d55584ef2449dc660ae10eeea4ddbc", "2626a483f6c06b75d8cac421f7f5ef90c67a4779c294faabd162e946d9b222f7", "15a62009277b1a35f2262290a65c5a63cc1280b5665d96479e9d7b382587c01c", "0748778cfff5583b088f3e0ca71ca7312e131077e39005fc6af4b5934f65c946"), ("080463246268be7363253f82dbd8350c6c98ad621c046cf928df4dfe1fb69039", "2878df531e1bf47e94e6e0eb0d9aa0122e491560d4b534967d7e4f1999e63ade", "0f6fa173072ad8403fc0812830e291e21be35acabbc16fcf6ae3be7744338330", "0db871ff596365aa83b94d45bd80298cc356980262367e837a832063eb204bf3"), ("192e646cd6ee84065b702bec5925b74267c2e3d28fcdf3505b3e00f781536846", "066be702bfa5d739890b5c196d59dde4981b51813952f45b1978ce2f35e72ec6", "04afba980cdac8817701cfd958b4eb81777407e2195226ecb5b60743c0fcbc8a", "03f286c78dc6b6e58da6bed264220c7772eb86f39795a4702425afa40cbafbd7"), ("0791c82630be0042a0c499f1fc4f2126d992952970b2a8284424ec58620d1cf6", "124a23cb6375c530b07878808e274402714480adb7bdc86dd2f3fdecc993ab7d", "1fce8c129dc14c391c5c787d5a539ce01fe4c174b47edc1f22c1decd012b7681", "196c6b400134708bb9b5dfcc9492aa828c88761e5e1f73f34e94a4e29c23420f"), ("280a9f1896b0f281e903d03a86976c65f3dcf81a312f6f74375f45cd572cb79b", "11e08eb7f69935b67832506bc54dcac0bca9442b195b597eb48fd7982b69d450", "1835df7ef76914a9ec8c27d3430c7f357bc1bcb879877825fc3ace7d83e1bd17", "28c36bb841b4f06d62aeafe36a87ae78f232d6ca6b71b1ffd408bef2d8a7aefc"), ("2bb86fd219de0b2711c46de631130dee371bc47b0336c1c160a3554cb3807104", "2fff5dc52c3fcfdf81ee725b6f020fa20201c55850b562ec2ca7fe737069523f", "1977c978137415af29ec458a339fa0cca419547241908eb1a363512bd8793076", "2782a07f4530f13ce9c317693edc6f0ddfd5e17164acb320ba7e49b891f0e1fb"), ("0aa59cb37f9c77b3f2a5b46dcbfecd1381b0abbfb222189f597919493e5a24c5", "16461f7cfede0782650ab6068110cf1f3f1a70c3c05861390c2f375fce0ff6f2", "088d6f6a5effd6f63e38d0de6085004f16640e7c79ef741edb58dfb82a9ecf07", "1f04c3259eff444bb0bb5b51ee95ba9d09e9cb3a83c4aefec65dc6e8025b1571"), ("027d5f356fdabb415d1c0cba31a62df662d0724176d6cb0490eeae97246cae47", "0ccd9969e3ff52ecc852fe51fa09873a8516872b4028a55d5606edfc7c610206", "2e5de1cad95ea6565a570d42749c42bd361115a367ed83a9ac855b7b4d8d7183", "21b4dcdbb27d0591f0a50b62006a44bebce25a85f3ece77779823f19f4bf41e2"), ("0258b512acd1297a44e323c9138e0829e2b741f232d143325b973521b102848b", "02a99aeb439e5fb1bb087648a4e60bc2e0a2404cdef6a68ad0165ea07c710b5e", "0f28891a8731bfd139316e7986a0e97929e73dd4d6a9b777165d2729161b011e", "1860c6199bdb7c57d8bc58e48e7df1262e496d6515e0200cc8fb0ac9dfe77c45"), ("26fe066e4363cc92cd9040520e1ec275dc12ac1864103739ce22138463e8af0d", "01d40a6cfdd5918e98fb9e09383a233d8e830a0f3baa57ad1438f1bc1fa83b01", "2d3a63bd9a8b146509c194eef47a5bfa1df2d036cc770f008b52df7d9e3242db", "2485c3596c976742dcb137ba537ec77d056cc482e28ab3f491e44bbd5c613098"), ("2754270f5e7c72989c1852061e582695da58d1c28fa2cfb1e3009b060b5ba923", "29dd4c2192c3b9958d3017be4378ae0fd9e7b1e4cfaaaaa9d5cfccd69ff9dfec", "16d3ee5808e66ad0078c813ab6c5def91f8168f7f20dfa37b417f4b64ece4780", "1c85faaf1025af7936c16e198f601b8daf5e515ed6d94513bd240b2e91c09133"), ("2d44f7522dff93a5dcd6c74ff41b082708fa5387064b5d56c6b85fcd4e0a56ca", "1e2f2dd4406045a3daa4d861a2f2d027e678ef473329d992d57b881053feb5e1", "207dbfd9569f8b3293ee0fd96fb9f87063c7ba9b888356a3e76e828608e9ed71", "0e5ab718cdc40ebb82ffbef6273bee5c5d9ac95122655637b415e384bfd8a186"), ("2efe80241acfdda746122857f63d7a4f0531920d73e3f347b8f8a5a33828be40", "2cc2dafcbd3e5db5ac796f98a3b4d201f9957373be673a5b5d410cee6af30c4c", "2b419773feb613e9efb3475204e32152a3f861adac24f70cf74d885ed4d7e685", "1fb116b02e15084ba836bea0fad7cf2e359738842d8e4c432a40d4c7cd7db77c"), ("26987c0aa67b625b31fdae3f0f237501c9062937c93df9ca6ca5ae777ce3255b", "14d2138f38823015ce89c74d00841e17fea415e3aa9c7cf4bc7cd55bba138c07", "26937517cfcffe11e9714ef9bc0a712f0588fae293ee68e4b5af8438a310dfd8", "204ee66a44c2c14c5706ce037ca04f1c1b56ae68d5815f9872451efe83e54c17"), ("0aa896a4371fb2e2055f4f4afe637f7cf651ac0fd0cbe8b2b70cd056e573dad6", "0c6d00f2552c76e4625f2e96c93565548948a3f7e3b6b59d3ec3cc4912cc2dbb", "0665e821ca95b62c6ed9ff2b1ff62379fbf6cf9579090bde0843d68ff69fe359", "237c7737c46587272b6e5812828e683200fc5e4732eeba0fbc34da314cc9ff4d"), ("0d78ea808262c39d842a1471d2024ccab25a91657fb9227e1413cd7c496d01ea", "2d41cd5ffae53344af65ae46145365cfff14960e295cd82ce25ed3c3dbe390b6", "182d90f01c8d7b15bae33b4d4c918201ee3163b6ceaf3c6ae4bca71661a8463b", "02ca6fd6a5226252de4b8e409e8d92b6e0f0e01aba99cf1db4830f5c8e442a34"), ("03c4bc66d96d375d871fbd9e7b93ee46cf827e62d68bf46eecd6973c13e360f0", "0071105e5681a780a7a0731acdecd4551bf1d921498b43e0e53f83118c59e84e", "1f34e1020a55a1fabd40ac99d2e9839998ab135053ae82c30fc869665469f710", "135d4bad06e7a94ed8b13192cf64dfd3a494ae3d5f7958cc231d123fd960c88e"), ("2c1c9bf149f35f729baceb9f49191d1b47242799d92b96aaf35ac68a6c109654", "2453f57cf6b21f6084988679d8f92475a9db7eb3f3f97fdc0dcd431803b94447", "23930e19c843762398f5005dfdd3e6775a851f04a07484befaa19c39c29818d9", "18c78f8936a51cda79d107029911e56cbc9dd22ed4f7951457b7813a4ff2b96f"), ("2701ecba93d6fe1970d3e09d22e4656954fc13f556139f30b1e6a9f7ea5ecbf9", "2e3505368e6e67dafaca9ca9ae84d6c5df0bc7490389ca4cb44628f37f0afdcf", "23afbd9f2aa00a5d6dd5ce23069c432b2ade7348a25ca6a25e79894bcaeae121", "2b7de70dbc102c13239d7f13437fdbe94d23ad430024eed7027c49adf18ee247"), ("179d7b5cae8294cedb5f57a975ca74a20cd004dc8b8fdcb5b53b149dcf939cfa", "1508be12607bc5b08dbcb494c74f577d4faeb187c1d6409a1855e791744dbb93", "303396c1b64646b3b2c43283b73733f9cae6874d895601fc5ad3bb3787a3b6cc", "28f821e430e4159c001e1af0ce05d9b2f34ca2031b287676f299d99c59d3a8b7"), ("27a1511b6d797926a020f9f6337655e7a202f2b914798c1e5de43f051fe61958", "125030b855996f34166f40db0c4477c3e5a385b33e9f6de91fabc700c3ea2747", "0c32735f90d5abebd34c73bcafb7e4efbc2190e3d8a509f77e4cf6a50d19109d", "2a7c6cc3247a3b95b54a645f9fa3acc1168a4a754da332ba8b72310308273126"), ("13f339c40a3d75f6d65e62831d692770da7469b5d0504731c7ba1a907a66a0d4", "1615746f88eb58be426a811fc327d1edff3e1c6ea07af0d34f96d6b7a3ce0693", "294da08594e042f7bc66f034d4aefa46a5a3bd93644bb0fec088035575c60199", "11f7682d6842da59626e253b3c814509899cda606bcc3306d540309d23601543"), ("075b4deedea3c1b6705db0b5c10055328c19b145e2873ff71facdd36691c6d03", "12a857cf77b36305f3e143c57b571ae232f0979e36b5f5b54914885d6a8ffb49", "2f48cbef6256758e2f2300f8db7ae3df020facf8e3185d7855260300e75564be", "05ad6efc3bf9eeb0feb0b35afba3599c4bd2b25f9ec3a504a68c3adada26627c"), ("2e79780176805a91eeb1ab00ad919b56933a376fda0ef562916e8b5054188904", "037e94888797d898e5e51e288230fdb0d8301b55c83b7db7809356d7e857b278", "088ea757b5b81701df49716f963a90fc4206c036f8e5bd1947544c516152351b", "2c695a456fdd2a2c85bf379c4dcafd98cfb5e183d5b44731800fe463eccfea3a"), ("1d5397f68c842d4c030b9c3d7258fde8e31ff660a05239d722d3c37bbaf44154", "10d7aaf7c15b2c2d53bc348d4187875202482374e3edccae6bdf45ddf5a58314", "251c5bad7ce1ca7386360c0e0777bc7d93568949a3bc34576944277899d7d93e", "20a30e4c9578ac80330bca6bbbbe094435afa3311b1de3d13514f3680244044b"), ("15bdeb2a8dbccdbbbb423418a08a8090cd2db546f20ee6dccb783e2e32cc8c1f", "08958268f7cce4d6671a7db8eb8096a40134f65ade5133e6805a0f8b3a23af24", "138a34db089a446e7c9726541a5742328e3f470fadcf56d83ecf7c99c6107a7d", "2e0bcf1714c52f8225a8ca58bd92474db4579bf07a5c7524961942c9a13aa1c8"), ("153c61cd09f648841e948a6f9c3b27b29186b1d036a6fc1e49c1b1a75b108a08", "1d26099777f19a0a3f83968bd3408dc3d7dd386ee4a5dfe2fe0c03455aa72cfc", "1a5898f684cb94c5c1209f93da941a81b52b88ad34c0e85cf2c37b7633458719", "197fd2462dd33a73906ada9a043ddd89aaddb738eded9c2ef42b082019ddc15c"), ("23117d1c32819a725c768238dd61a04d9356903d39894f13afcf6d61ff0637f9", "028ab5c5810f611781059c1fabad5d3a534b906e0cdea770ccf71b802db20b36", "242e3379fef0ef46940fedddbf7a1928bc5920b7b8e47350ac775f0ab67ca0be", "12bf6118a1dc877f71b0f93e594efd1212781fd171c250841f8365d2ebd34fe8"), ("0c86dbe11f4b2d629f8e5211bec34c638e1981b0d77d94b2b2dec52356beaf59", "0c3250ffa700d9a0b023041e12fc08165615567bcb85bc3f8ae7a5f9827558c8", "1ce168114ffc97101725f8d87a05d6d58110b162150b2168dd59951f5565c447", "153d46dcb30806af38476d8e0efbd23b679f7f216d9194d97f7a4024992640c0"), ("16a27708dad6a15329969b8d8194a2830b1f0b2bb64121c133e2488eda85de58", "08a7935544a191233cc7390f69b386973f2eccfeb33ae9dd6345d0abf4da91ce", "26f62ba963c3f77264764a25d16f8e75c22949fb206448285762fefabcd4205c", "10be1fc73a1b27c41509b7b188f74003d10bff5c890c1ac1569f41df9d883e75"), ("29ec61bcbbdd642040d72e4f356b0dbce8195335255f444c07cfa5d918a57ac3", "1323ddc4788f18af376cf17f9f745c12739eafead219c766cc34adcaae3d928a", "0e7fbb57da335b14f34aaebdee2b6138965105c0315e09dc724f80061165c1b8", "10aefbcc367340d82fc9852013957f4083957b4bb40563c056bc04efdb16452f"), ("220b5c0cf54a89fe7b61f8a95d1e4d0fbd607690e66bde8472ded283e1501a26", "23b79fa3a779587c768c1895cbf669c5398e783537f877450e3e15e15d7ab5ad", "208e0954cd7e46d33dba2c669dece4b12675cf079322e61e412fab74f3670077", "1b5daeb152fcba522429ff648c1bed21402d93b4efb2c48d16538f5612383918"), ("2e5056f1546c1f5548ab0cea2b0a474def83a824452a110e865b3e4883cf6bd1", "2a30c372164471f694e6931a6a8d1f56a7d5487202b96634ebe71f8b85acadfd", "2c14030840d3a7dadc6368f794f71283e95ba8312b9f3160c47c534459cceed9", "0241adcb365028451caec75af7324a169819129baeb242f79a0010fa37df437c"), ("2c5a243e63222a2ddb56e738688310ac199469aa7858bb9c6e7aae1f4fd9c544", "24cd1ccd6b88e1cd57d03e38dfab2357bd1b30087fef330ea3d9c6462f9f6293", "2bdc21516254cc26341890d2877064b60f660d05860d583479c885905dcd93f4", "25d568d1abbb7bd94713b51bab46abaa274c56e4fdf43eb4c4e886b43062ea84"), ("1d8e01889740b71c7c3c197935ba93ba30d8ab8b2fbf9e040bd24ccfea7b53a9", "0f774306dcac604268c507f164e9292844dc21a19d344a372426c2e6d82e057f", "016d5976457c3a3d50d428f2cd43802992caa19ad3aa63f2617eee39cdd57820", "101f40ba6cb90fbb18a8587b47f25f9973c7f09a0558e3a54c3eb26ae7c308af"), ("2fdb1da1a251296c13569e720dbbbc29dfdf5f5f5f579240c5ee09d8554c8552", "2fc4832d39a88a76cf9b5c250acf77f4d1115dd1c7c85f18a6f9b3feb73e1f69", "08137b92af30d1f01525cd71d83a80c23715045eceb973a055501d3d1b64ed44", "2bc6de778071d45a0538e4caf16c329916a2f9789bedaef551da98a77b8b9f70"), ("1298ca8a8df632223ebbbb7f79a6e8f2f05f8090928051f261c7cfd3da519a5f", "037fdfe73e049455aa7b1845c4fa171589938ea0c136d606bfe69e3b61991059", "1072ee38bd75b1b3f6b94e7e1c96b9472298ebd24ffb88faf5818dc1c1e38db6", "195c8e2364767200279424866c46a0b5a1fab50f33485acd5ed0041518ed90f6"), ("09ca9e213f9dabcc41e941fbf603e83c50564beb484aade38d10681a937258c7", "079843588567d8f48e7fef0bd54a04fb90b478f379e3e94284fc6f3e7d9ecf4c", "19938c831509c9741cf15422106575e39d0b869882326acd77fe011fec59309f", "287564dcc6d4af7d41b618320291aa193cc3988d99e86a5c0ac6b64611eadb44"), ("140296766978e81a483f3649a15c8be494b993a3c8b826a80c70c3458e6aa312", "1ccf7972ee34b94e756a6449bbd238c1aedccdb315279c12f971ed3b3c94acd9", "16ae22cfab5f8ce290ffc9cdb1405664e87aad373635146db9687bd851f63c5c", "1437506c86386c1d447946c65382bcf6a69e4499b6df7534e5b8dfcc0d62d464"), ("0ae2c890a1fe33440df73d386fae47dfce018f5ab3bd0724127f11e5b37c122b", "27e0bbc25bbc607a24f0e788551e1eac8c4c3ee778d30063ff583a57eb629329", "146f067539261386f4d712b1cda18d61366f0168d94537bd9a220c0150578bc8", "106a2b34793a094697da44549f341862eaa820aa68416c849c6354c4d458247d"), ("19fe4f3cea03ffd68de41f99f0d4ae022ad3696c87848ec40f548c623388fc3f", "22722c7db05dc958a6557177da9004a130276a2eb5147a83a824313b8a99236a", "0f1dea127fb633000ce16c98d145771aa62d9b7f01207034ffc334f66242a78a", "2373c2cdac2be7f29f06e98ed50f45db87acd8922c262c583fae188d476d8496"), ("14bb3c2a27859b68367e226a08d0a94df2b5b52f1f0ed480a7eeb492a84a81f2", "07f5219ff4b675447e0e829bed1a0f28786a52133b751ec3a1c4272c4df828af", "2d5aca87c3c2f82248c5d637ecb4a2652cc1b472a5490a5699f66d9d0d6a391e", "027892f373c6feaa4e41c03100577ea1a5073888c6586e3d08cbba2e7f3094bb"), ("042aa23ffa5feb2ea857c595241a485ebbd84fe4aa1702d2485fcac15569fa94", "062273ae8bf025b4c4c4d3da2f0acadebb900ef4dab1327faceca7701130f1a9", "10bd84753782c28ae58c10b94c4babc5fb901e8c45d005aeb038acb681f34ab3", "0e19b90a6602fe1756c76d2f5a7564081f27ec5e9a406f47fd118aa716013672"), ("04e73c204c6f338b220d995a3e871d7d75c44867f9fad86164d9e2c4213fd6e9", "0e0bedb34acb4b75336fcbcf86ec5fd8df95527b4dd8e5c40a34adcdce61adbb", "24fc7252f0f48de2091e3f2cc46786daf90c45e44c3bcd540c12eeec9df9b2f0", "020e6f98aae11e369c953e9c91cd9a2a59bc2512128e225f406aed2d6ca5884a"), ("2af948a930bf3a4cb9b52ae07d108b5e60ea300a8f18ee31776b931c6b10f48a", "12203bf9dc5893d6684e8d973928c3594d7083b94fc78695fbbf82cf0090ed24", "22b884286b18f0c2a70be496421b3d0a37fc7906bdb7fd82dccfb39acc0b6339", "2a6d1cf7c3ef7f9fb40a141cbab145eac555494c80a563d91a7159bb7d151c7b"), ("08451306eef5fc7625dd9dcc4f3828bf5edf479bf3a98996ab9dee883454aacf", "1840ee2b5ca7ca9ece3b7b8cfbaab3d2f4412a37a6d4a47e637dd9734c8b7b4a", "2096dd8b1c7cbda5078e361abd88c5d3c494e22104f6cbac3f9d070b9f86ecba", "2c3b3b5fae41f66056da99bf864af25f6869433eb02a6a77d95c94cc419d903e"), ("029a6d7b473e2752240fd60a097cb3a79a5ef13501db8a5d58ddd5e1ef578a7e", "09b465f05d4a84e2c2e35ac609cf3d8b3b1ebd4fd62cd5e4519989730b1b9c9f", "1e0813c594cf744fc86552de6bd36af4691d5a9cd73f197997d4af3114db7470", "033a39b2dd9346686bca03f664ba3c56475b9e4540e8428048c48bc885910fc2"), ("25a7da00177467e175577df7fcd935d4cc251b64014a033ff8633e720b33b159", "09309d8ef7de792565e76bf234f216876c521daaff2c28e9f8ed1a838fc11984", "01be5ae6c0231811da993c331aea8fae6fc4890d85709ca6ee53fe81656f4f63", "10718122776d6517115d49bcf640c209a9c1d260bc9212827f9d26b49f2580a2"), ("2c8c58eaed79b7e0ec752e6a1eb68c15029c2b3615f5b33ef78db61b987e540e", "2e50de3b64a5b04dfd51e70adb98f18dcef2925f355bafa1cc9587f098bdd0df", "2267e1fbb08bb9eccd0483fc438c1534839ae9b69f330ddd981616ae00dbfbfb", "20cbab5e11129daa2a7e3b462831f9e16eb36e587d9d2f3301ea5aa4134644cd"), ("2c6a4893b57ac8f8a581a9752381f49c750d19b001aba042ed9ee9a7acc0f9b3", "0f7e6613f4a8d7e4ac4b4fe1b27a45ad1dad6e3e61b54e7017a5e2bf9bbc2e26", "1ee727262042574622a0a0217a5297e2285caeb01a5a339317396c92e942a8ab", "137153f58b0505c2a240a9c46faf8747b3e147ba071c7fd2daba3304db13b79a"), ("0a0fec4539c672d22d203dacdaae9f3e8192446d45a9a33ac9738a78dd706624", "017ae8413b4482364d3df18cf1368debd7d9c21576158e9323d2a02f1ea31bcd", "2cf3bac4a1f9e46e469c5b3ff81641989c8fc7b768b2ac7543b05e244a8a3f6e", "0239306c04942fa354a5c7880f64a2e20b3ec30a17fd1e9dbcddf8ffcf5cfc81"), ("0272e858b0f653155a11d62a34d35d3301d3b97a2d57ee311a755b2358d8b019", "2af722b8a7860fc69862fcd386aaff925e89dff888051409171273b5b5ceb268", "2b83dc774394f8f03841d1b1910af4a4630049822a125705beb4330cb49b8a07", "0a5ae46ea7b97acdaa7fc3c35f1aa8543dec4ded42460ed188f41af9363939b8"), ("2c42339f2b51412f4ef732cd5bee1b6f2edde3fcde2ddf0b881517af57cb0bbd", "1b8f67696b4d7d45bdf42c2718b8d1306097b8bb1a7b4df75c55818346d0d2e1", "01806d647cd20667fc6dcae3beffbaa83c0ea743e955b8b7b6ddcdc1b856ad61", "0b4061a88c9d513785844e5e91fb8605f86d4e7a0d1ca9c0c9c3e33363eed03c"), ("1781018c668be0dfe9232a073b6ee3b427f0c78bc0cea19b35c3d8d58a5a95dd", "25ce46481e95072237ad749e3ddce4509d2921123b75c0a4dad5180003bea74a", "1dae223db6bb30eb5848088174165a75389bc0459e0b29c76d1683f44b1dd4c6", "2633408d0d8837c28c54a3748aa177afe0d381e6aae0b0c6d425d0f2e711bf08"), ("2e52147defae97884e725fc4213657aaa4bffaae7f7cc7c6102cf0fe210de64d", "08a8bfeb0b7221adffbb559e6498afad48e502fb2bfe5e175b88e459b0f0d829", "159a58c0323c093539db9cab71714c039939aff5a4ad89fe54ff417cb9d9bf8e", "0ecb75302e1fab017e3c7bc4fcad961d6f9ac99790e703309761d5583d7726e2"), ("1a6345be279d652694086254af0fee5df6c200397911b17b620d41f85651298d", "2fc00054fd453c85002fa76d33fbba8d5813a340172f7cf7d7a2e03446860ff5", "1a561b618ffa070890a8d10a9aa3c4e35647f7f381246f82d06fea45964dbd24", "29b4c62fae1bd36843cb27e366725d024eb83359842d4a4aef05378318d07688"), ("089ae0bae9f3abb858098a638742fb312a9a58348d0d6b4992b9bddf534db3f4", "165c56bdba29ddd301c6f4e2130f7b7c5b19d76a922c6bf68a4aa7b73b0fab42", "283e3dde477010a66afb183fd628d907f091436370e64bd4132908ee83001924", "05c117656ee65bc4022a1172d29b5c710d1d2d054912cdf198b1dc1d487d0b63"), ("0349696e396bf47927a18c4f060c4b17c45f11b063a5ae13a5090a6f28c9b4d0", "2a64d4d390a3fa4ca8fd43381923f85ede0b259258dbde516236c2bb3e1ff75b", "29e0951a6f95fdeb9fffdf30eead5abf8b8598ac6b150a8dbf09bec1b4f7c933", "1879f87ecce4eb645ee97ad0a254bb7fd2c4f56b6adff61aa796e4a68d5f6a4f"), ("05a3358aa9bb3722539535f8b15f717e2d3733fb8f943a26b7fe6233f2ea8a0a", "1926147199d2c287517c8c3ecd42ab6510b657ccd943f796d404e819487b700b", "162d5a09ecfa926b97145427d3572defcf6a18fea1a9265b0e7fa1f13164b785", "186adf8bf5a813c43dda3baa7895ac77a832494b2146c8d9c7a0887d55e35bee"), ("12261adf1e7cb97be714b8b637d329966df87e5664de84a51f9b42f2d0cc20ee", "117aab3a08d299935350f7a2b568a30bc4248610e9ecf4651fa4df6600a3ddca", "25f5c660e3b1e63ce50b51da97957e4512f4e18fb475a94a28e306f0a3d566d5", "089fd50da3991a66eee56e8b090830d7f64d61d9ad49a314be294f33072ede0f"), ("1d3f74fceb9d1eebd7332a95f7520a89bebaa973df96578ff4ed8c2be9801796", "244c71372fc05e332c49da3b5cd5fe855fb5267eed1ce79abdcefb43eb5f437f", "0d931343a00170e30636bb54e17169a1617c7d91234e84626508a4dec5153b7f", "01a856688f56f1346a03ee739bf5762c58d4658f046ae464aa647ca632ba506e"), ("03f5bb058243edeb47ba584ad844a3db865d6190838b7ed9cfb9089d5a0bf3f4", "1f8beb139d9fb6b90d8b013f241c2a26409514a808569e0fea1b380028daff26", "1b1bac22462123e6b57883239159911868830c13a8d09477b30937868d7ac024", "0c4b664db2e3e5d6475a48aaa1616bd4e93d93db2fef540cf2d5c03efb0ade2f"), ("1005d6d23732a2b902724ef68d95c8b987ace94ea84b33325feba11673eddc4f", "1e5307620fa6de68986c54fa4b78e53bd614ea28e8fab3e1b987c6730bbca576", "28262a2202241c19045d773b91e0dbfa6cf9ea623ba63069791d094b0aeeed29", "0f7ce6b97fafde6dcb23a49b9f4a3a30a1669836563e4f7cde7a5ca136b8ad00"), ("293ba8bc080ec952cc6756b368c206a2b069c7b6d4712939417f8006e5e47de9", "16c835e7dd9212d376fcd8ac5e282f5e9bc987f525044406d8f751cb10475621", "09dc40ed22cc6a4cdfa6146c9d7cf31edf78725cdee16667309436dcca0a02ec", "2c45a5f99125b8091ebbb6fbd0ea3eb9a34272d6e160d7b8a69cb25d4f75da4a"), ("2c5f2c691f8eb81c2831050ed5b95db36d973f7d9c1994e916b3dbac96df97f3", "1420b8c134744748fe471ece3e941dc388cf03fe2607f12578efbefa5bfb433b", "09c9e8afc0ea1949c8a1ac9dcc4bb1387e86322be1820a7df55a753c1103fe3f", "29a6aee6201871e08df2a194ed8fa50d8a1429ae58672ec8f9841d716874701b"), ("12e16f380773f9c1740c3a7c0597beb2bca45d3be7882b0648516f5f75a1bdf4", "0d8834b8000997f30a880cd41aedb1639ca2ceedfb2e8d3a1334facefdae1420", "110dbafa0edf47386b8f04de0bacec172962e03a77e75353e0cbee54f2b67250", "26e2755e3886a56d64a6081cc42637e1a4761b59cb3737f5825d2c07929f1a09"), ("204af878cac2b9a7d53e5c78b219c454ce2a4546a495e40deb665d61bb7ee6b9", "09cd637ba21e4a2533a66e7189fc456be266bb12cad2fef2081049874f9df232", "017623cd0587263e476fbc466fbeb4700399f9dd8f0c49b5f83d586a3e563c1e", "2872c37133ffc561fd0e35ca8462d4d746b53703d16150770943a797a942d550"), ("1b777f79a7015f770e26e86a58c676148d09cd30d4b8408d3ddbce87aca9c341", "1d89da1c9e91c5e5c85101b47e87446c2cefe19aec745cf3b74c4ddac5b6e86c", "07cc04ce64f57e5fd1dd9dcb0f7c90e9b7bed79c9e3637eee81e0c174c0732ad", "2476da79dcedd9f7f4dd26c582f02505569aa7cc066ea12c174bfdaeeff9d372"), ("03c4c1b08e537728ebb8fa915f494fbc5a0621f479afb0fac3f307f94be5e60b", "125184ececdd209c46c84e0e865bf079f91208fb3c0aa936484d8ae85e8a05a6", "1986393a559c2450421d90b49e1ae140a2fb456f25068e970d848acf3c7b3f10", "1cb3db26539d3a9773fd4b81bdf125f79f53a07a5b60cefdcb63a77d23ad15cd"), ("2206eeed6a08364612ae785a5eb0d6c1561ec8c07719b66416e661dc6b584e2f", "29a1a40059a12887fcd19e4d39dce3c17c1ce04424dee3507ba18ddafc0e93cc", "226df2160d0d2231815630f171272a911d227c2d135092f411a048bac228ebbf", "0e6ea7a514b1814d5fbb3c6931e5d927bbc4559d26fb24527ebe33ad04e3710a"), ("2b48d0ec948df5ee7c83739dca13aa862531c48a6ce69b4ea4a7997dae245bef", "2dadce0a2d37facd1ea64a632ffc35ba6d4e7c46248cfd0696a7f60b695aba4f", "22d4e704cea24cf033efc4d6d66e72c7612057cd768c1cd484d01ad16d39db6d", "2801c193dcc3fc5596c5d2410aa9cb850677d993765016411fa9da814b6aefc4"), ("0c113564717958434ff075c1767c22dc3d6789ed99783205b06405f28c78c6df", "05c7a40b4f2a2f436191e37c27309ad3c3f6b67e24beabdeb9398ba736f457cc", "15ad01f32a69a4a5414758889b3a68bdf25c2dfb08366403ffc3a69c731dacf9", "0b890ccef7c05a89509af324157369bb133e742844523d623a02fac66b9a2907"), ("0179f98bbcde9d0d7c754c53579ab255e9caefdb74d50de76443b97a3787358e", "1c418b586ae0b38accad7e19de4e654eed8cc2fb91e36fa3f05c453e152f3a3d", "2a75d013bb065791d24ce6de42fa81d568faae402f90b075f799f30d100ed54e", "1d832fe8a18f35d4a80de97275d7f27613b14162024f748beb29c8290f4e17a6"), ("2f09e839f8ce162d08fb77119f96534c7d1b8e7f4c9a53f5bfdf17cba969adb9", "28cc81461664069d03475a13a6005515f3cfe9c71b66b4d84ec3a4dcbcaaf346", "186f341ca5558c271378958e93e95e0c98fb7743f2843ea94cd762e5fe627bc2", "2be562f5b3df7e6ef1e01ae49a3d0cd35b5b635068bd870f85f7081023bb9fad"), ("091e16ad4e30ac404eef791dd69170784f9940e1657f7474d7907f34fd23c8f4", "2caad83f613419027aa8015d2136cc99f7136bf3e31843dc20969b610c0fca8f", "10f6a56869699c16e687890674fef988c18e96a11ea651c63030a8b95a4b01a6", "082c4e805c70bcca7352e03d1e9615ea050f720c6c6d3b519243dedaaa0d9641"), ("28fb27dbba0da8617689c92da540e2a4ade40d1dedbcaa849637367f92cfadb9", "23e4f1c3540d4502fd19e8e530ce748892f7878cd1362a830cc1013f5f77165c", "00352f6776d2438fed01dca383b50a47657ff7fee98b5f6f3aa52c0293689f7d", "1e38a95443f46a6f74ca6e522e217bf440434a59ed58ecb3580791f883059701"), ("2f787357c9b09032a86800dc66edce91d96dd2a06c03074432d5c213687bc776", "2f27f81119bfa216056b563bd04c8669c723fded981bc629fb13c7c86b17e5cc", "00d4fe87d758a0277e3b369d294bff2d5b948feb0d219a2acdca04f2078cef0e", "0a5a8e7c4a13087753e5742ccb69fbe54307bb51a23038945e03f0badcd7284c"), ("1447734c06ffad67de0997539e2ac94b91c7a4d53dfd50037d3894d38ecab4cb", "06d8055e451f01798ba5992d4945aad465772e3a2a21d14a31ed8cd4664c591a", "1ef4d2cfb71242835100d062247c904692158234688c8339e79023f823db461e", "2a4d08e6c14cff3b3148637f45dad33761cd9a067b173079b134ea7f2bd7e853"), ("174513ddf3c4c9297dcb5b3708fade17a2732b66657c4d75023da525a1753026", "2ab1a76a53beef43b81c5adf5972b8f417fbdb14daa6347e2af29f27750b4391", "3045a660f9c55659400dfeaf4abfb345f24570de30fe32c6c501bf7905f07a22", "1a64364668b76a466f626eb930240e4a36add0759e64a16e806d7d76a704e6f0"), ("01a11ba613741ffda51a91a8d6d899759db8aa9a845bc85eb77cb68deec16de9", "1a131d81ea747c4c9ff55904bad6c339846f0cb09b7e282a4934c275c24a6946", "2fe3e049135a6ca303477cc2ed7464d3f803425c33fee9d8022826cf7918df56", "189ae2eff883b39428446cff937ad2cea0ad5b618c90568b10b7a059784bdc73"), ("2064e45824d61f5d338990cf030e03c0d3c0d6c6939be0aa728f0be49e382498", "080583748c62cb313e597363310d66fb03f6effdd51304b8ab376b72a3a80b0a", "1fd35735ba3afa51c8e80786c841daddbfef736500d9b6c3f5c77523ca48f0b4", "254e6dc173424aa6e7df80d0626d8f96439459f212aefd1794143b25ad199fff"), ("1a3b4d98d3fb7adf1f6c71e4420f26aeb46f69762ec22ff9f588bbfbc5ba195a", "11b74c56af479daffc9e69856d11c19872f304ae8cd82fdc8baf5e701f5bd47e", "09d5aac9384b3e2782f0d7a4ff92c528ca027984465b6c2618964ff4e4ebc6fd", "1a0109c699fda03ecca1353d3658f27a92c0f8fb9a60b35f8e89cbc544cff232"), ("132f293e29d0d0c19f0d645b97c58a2c4614dfa380317c816cc0f5bb8712888f", "1c12484f2dcd3538bf5870e02f5a590cda10f81109705b5a5bb4fec0353eb334", "121f3c9ab8054f942e52d2f70692b4e2024532afbbb8e7b98c353f3a397006bd", "2faf7baeb57e382cd14ce8ebc1c1948279a78b87c587f196e9c644f0e0752225"), ("2b94f40a5f1e4b75c545503b9a09c704221d4495fc2db1d1de4d818a8cfab148", "162f5a6f892bfa9774073c9828fa4f0d4f6071a9064c942d6c629af564739d5d", "2e08072759404c6920d2f37a7dce4b7b71e39079dad4d9bb75e94c68c8f9b05a", "2a08e1e6c5d711d029eda49c5b4bc30e7f573b804aae065c1dc31a00ec99e45c"), ("090bc3042b94acacc99c6697340b8b9fb09a312cbd5bd14b18e10c7f35c29ee5", "2e05d67f9db7dd1a8f8fc6b27273672aba6bff30366f0b80f60f776ecc915b14", "1b79d38e8f39a94cfc79450a4f4a5b3d2c617f3895b325094ee201cf1bcf6d2d", "0bc5dd86adec1172bf8b36704e65602d3eb264e9aa7940ca5f103ed8085c5ff9"), ("127030fe655c851be1009290dffbbc8cecdff5aa262d3cf851a908e82035dc4f", "244462e8752b73db2f5c6b7fb06ec3ba60bff94c29f8df6676bed56d38004839", "272d502a19ff309a8e54eb6f11698ec318087ba15e74317d1b14dadc3fb7ec7f", "2cd7443d43ef2e1b544344187e77d8731b8d8f03ced65f643c3b0134d1e0dce8"), ("1984321ccbae1fcf60ccc7eeabf4dd5853457720a4bd81637663a24868fd0a01", "2c4c3da13347c36f2a740f5476968d4a12f9d005d0fcfe43b8e08f91e2dd43dd", "23398ef9bf71758656c1e3049d138d56c3ece17898c03ce82ebeeb6aa8642b3a", "1ee5927713ef1e5fb1a9b105abd7a651530cfa728ad0419ad2b59dadc79e691a"), ("011537c14f38f690d2166eab8e9bc01b5c8b5ac5c1173cc43258029db6676941", "0f91d3c0b02e5495162397160d97146c4eb3617a3163891b0fefae955258eeb8", "0719c4472b3cb3ab231e9ff5989175301d417b2e10343e23e50405a00feb0928", "1abe139e7c8455f007b42f3c8bd1c5c73dcb921708acb0ecc178dd9254182f0f"), ("00aef3ff6e9d818505ee894c15c2da8eff4eee57f08929e04f4a537472a68f31", "08d7f12821fdfa6a477324ebe5af3b4da96ce1aa32c2647f3cf6a628d78ca5c6", "2d3f0dd043fe7324667babb16d8678ffece211926ab89ae437d33cf09160f7a8", "1362a7f13b3e5462a767d2de6d2f7f6d4d9c5add0b0ea8d3e7fcb6810c81f227"), ("2b79f1608ed5b8b4965fe1131d9c5f326cdcb2423de1f9938a1c66ce28f28e36", "2aa2fab463a3be1a41e1d20d0bf1391d29fec38159c2091df83cbf036a2e581b", "2d3ba4246afb3314e4c60dd23eb75012272540cce8380e47f239004841fe5dfd", "217343b14d654ab8fa41a64a0eb09b8b0fde3b95f5e42cad51c04d072e9da066"), ("0c5011e71892186e80425000c3530f5e50545c289e64f3ee50e9e9df6d56d1b5", "1eb01904d83f07308906e038d82a76a3d34ea924d42dbfb2c3092b9ee2d4790f", "2172992be82d7b361dc71c14ca3efbf598ea2a196bd8ea690a5f27886cfec3d8", "0703528f4de9b33b0eae6cd2b5644133e897deae03fab48f7b7f4d4750738a87"), ("273bc935387d7019f71dec8ba09c5b250c01a78b53497daca85ebddb2486d6f9", "21338dff479df2803d3c3f3a739ab167ae819301de38a53790cff4da63844325", "1fb22e45feb54537ba67ff02ca8086172aad018734b0b1f2908c365da2ff4e0a", "1494219e97570087cd1966dbd93243a4e7fffc248a96386582be1e3a49da0f6c"), ("13925db43dfe892ca1dd65e3a12b8c013d470c982d54fdff52493641c72cbb2c", "0e6e82be0f81ae00998aadebb513e1d660196c2798782e70c0e996f2ebbabef7", "0e21ea3084c71e61478048624e4442bbb4a86dc5764b4fd5b65221a9d6a7ed90", "17cf4d75c0315212a9f14f635aa9ec14ce80a5b2245f67982ce64a38b74abf9e"), ("1a28729829a9ba74af3c5dced98eb55fb438e91e5ec04ad348a4f19dad5959d4", "27cfcbd23bb3b625b3ad93ab6a77d2c1d5d559bf88acebd69922fba637e909e4", "0e7683f7750aa693812ca03451456ba0c3b81fcb0bc81de2a8b841b8479b0037", "08e1e0e6d0b27ffdd87e93f911ebc7511e70a041bf8b7538058a4ada5fd82438"), ("2f8e0173f7e508d7c2ce09318127ab02f408d647308732235a0539e22884ac9f", "0a0b391b964a495c5547b427c2ccf0a6a9b9949f363121e4ed107121aa2f9c82", "2568b15d102cb4aebeb223ee9057bc23093cf53e35a8af6b50fb70f6751be98c", "1f36661a4ed63230ac649a7775d2f4db0256691c51cdc0f7e4b2f16f54047380"), ("0ccd4d5e6ce8bedb18a58c26091d337077087382fde08610cc245d562e9fe037", "14f2a63e2ff14fe58290dacc3459fc1d66c4ea0cd4d3b2448dab35e46ab24e4e", "05c53ef29818bfac9e20d6e52d5022b996e82751f4b5ebc05779f4d9ddb48be6", "2ae92e4a56bfe009a3ec229fa7cab59e83186af9edd6d6836f471f12941ea14e"), ("0ba9b63b9655fcf011033d1a25e72afaadd9ee09a7a317498caebebee0d303d1", "0fa15a7c986073b8c4630d5c7422f1c5e1981ac192b97a4209839b6f830cba94", "15ebafb2f2f4afe98f5c2729f70eadbb2d11d5f8f37eb9c01ba29cb455997a33", "052005b3ffdd258198e8f3d77712dfdeccd43ec85c7c23a30f18a35fd5755b24"), ("2aa4d0abe1ca7ff16f2ffd739b0383973bfb536b9ff64d835fb18a26449f2b6e", "03bdcbbf9354e21026d70ab8579e3f524f539c8816370545b618aca304a8da36", "28595e5e2bad42995c9eef74d447ba0b31be7cbc146a595f4bbf1140fd770649", "191e521e9e8a1d63117480091335d0c4b62ee8dcb4c40e8d67ee47e0b8a4aa01"), ("0970ffbcd648e60b0144f584ac67a4a6d927975f8b9cdf1b2d45f882f56fd140", "09ce95516bbde9d71b279c1c630b94ea02d3cb50e8766c090fe0dec0d7d4172c", "0c80dbf2b94df0bb3dde3ce1ace7ae636816c195c64361de3f9509c90c875683", "18a8abbabcd40988452654b79071ed0ee5026a68a12ba7b7b32e6ca86bcaa42d"), ("25f0d81cdfef66b9a1653433dd9d2002366ec519b36c77f8eaf674b8378b147e", "1457c029187a94ba4500ead66e1e97eac437a95b552446c3088378e389cc1e4b", "2eafea365d4d4e2c2d0905cb52f79d6ead7878ab7609343210879b56a89f30ef", "0d1358f6fff3394af2ec680c546c5d4a46576e177b440cd5c1ed10cb5b42894c"), ("0e95a48891b6a9fc7c91643b972281e296f953d2ffd51c6041e0d296d0e54d55", "00971def7564fcbd511bd1b2a701827e2d18ed9d92e79aa3969a8983d1c74d96", "0402d2869025262446e929af608dc3cc12df4c15ae03d86a2c0f940206278c07", "17b87d76927bf6aa13d86a701519ded0e6f8ba0b5ccbfc902877206de5d38b46"), ("18a4cad98735afd488a4c4bb54919087b5677de40111080d08718324e84d0735", "0f6f9ae05addabe5634b19311fd4ce0af1a25ead064afbc99d41f8f05bffed45", "1ec4dff050a68032dfe0869247e247147826c3f76ac465b8a6a7adf5a2c483ca", "0943fca705f123e26fabfb4676c2ba673249881574bfc60e6a81a16ff6bc71fb"), ("2d2b1c14323192c367ec2e6741459f082d83f16cebc099a6cc904cb891dd72c0", "15b4976256d073852d66552e96f261a4983d326e0f8367bfa6267b1fd309424e", "11b76d5b31c9ae032d8ee528112963b63fa85efc1f8a5a9fd4d7c9b4a4c42fa2", "10b88bb0378ff60303fb00f5e066ef32ae448015ea95d93128e03b28e9daeeb3"), ("22428b4f4aa90150cb29702edc66ce8d657f45e9da629330655e1516b5b51da6", "0a6cd87e68108045ba8c5db4248ab96c9fdf1078af02152a9bca2751e50b785a", "1ee0fd6fa5f29bf0e5e55e20a7cacedb63e88eef283a99bc9510ea18ed5f5979", "057949ca562c5a772d38ac9f0c714beb51bc8e7f3bd81f3efa8de8e8572b8c7e"), ("26728e65d29036fab7532a1aad23c3e81a730394a61e2908d00a813666b7aa75", "09e848f1d2c23d8da22629ffcdbb030efa599212cc99e24a90f7976021c468f4", "0126d0bb72e770a5d96951e49ad2d2b7fcad984273c6bce2722f90c1ed646c7c", "1f47090954577046af37e2e4ad56fda935b0810af16f0b61d9cc3805f3a446d2"), ("14aa7fd894087f193224e9204e789811fcb29ea4e9baa2d49cc36474df57f29c", "0787e212d6c265c57bfbbaf65d2b1f950288579c0900f3e41d7209720a32b47d", "14bc6e0488ede81caa0cb94f641dbb31659bad4197c8c9e2443a191919f02a74", "2aa0432cc3ad5ca70597bbfd2d7bd369b8caa3f190471e6d9b3397277ae0a31b"), ("2508bfe55fc7d98c54b644ba93aee879be54b0bbe8675072ae4d3a5362ffc686", "13c4b83490c97e825387ba42781dd184d7a3c5e760763abd5111cfdf374cdcef", "0ce4cdfb5de043514ad900cdac0e18a8b02769d7614b27ac818c69407ffe63c6", "025ce5ce0a0a78ccc634c59e55173608c547e981fbfc0dcb99bdd91587437a22"), ("20c0722aa0c7d15d3d94feb322e2ec929e705137d2e147d33c5a5897d5542c1b", "1bc6df74fbbc17948534593119817f17b9cd4e4d4952db3e5c7417e40f9d06e2", "20a4099c261cf0dc3a75eb213865d038416bd4927d9fc42d2e6fa320b687a347", "0e9b4332e327396b48c7bcc70a1ef08316112e6f78ee954eae76501f72d070e8"), ("12f80e0bdbeea399e03b2e7287f501ab01f1f63967b2ec72080f349dfb5a43ad", "1bb76c9ffe27e53e5f885ff4c957292f4870156a824e313327a39ea2bee3f97f", "24b57affaffcdbea6a52d160f13a007e7636e24d4f0ce5f3e30fb7762ba7cb9e", "0efa1fb0f66eef48898fb7c60717c3a6a43dbd5070af050c8e54200a35f435e4"), ("268230c114404041deac6d654a7ccfa0ff00359e94d2ed3957481233bd5f281f", "1aec255c8b1de14dcccf6dea0978ba4ff1e0e2ad8473f6bf3a84d52750e0e231", "1ab25c16b39d8bd604515b0fd0c6f5687f346acb650f8b77b4c9d8e8180aa310", "09f3aaa9299a5842b1f832a13e849d47bd6efd2109e8de43671db0362e2efdf6"), ("0a34f1f857e667cfa6ce9afd6a016aab4910bc09889066158a6d73dcd1d86e46", "1ad4724485c968ff160070f0d9705de708f2b71e39b633d9576b529b2c1378e2", "0d5837f90c597ca4a1a33f92403c24e04ba27696e74427cf12657f297823076b", "106309242b98c0f0de5c7c62f42f1777ef6cebdf7cf0f5f18cf6ab61d1c4ed51"), ("0950078de0b5d407a1e7651a92b5fc58a7f06059cc292a473342ac67bcf759c1", "0c5c2d529d8f3a5a6f4a3be40bbed873a70a2ade0a40d7bc9714dac8cd1677e5", "026d7631ed21cad63d9b06fa49181e861d677fed99885c52ee391ccd6a52246f", "0246eefef85759b056990cf06d0650f444cb7d83e74e2043189452ac79a01654"), ("0a7e530890d45d0b54fb68cb9bff43165e6fc1e7e588874abe894de937e72670", "0ef5cd9d2d709135f5f4b4eb84bfd51ab757ace8831a9c75e9d07d041826fca8", "2827f4cfd1592381144a2584a7f6676f120b248056cd2a0b151d80adbe6c1fae", "13c9486eecea3bf38de3b2ba41cfff44f42be68c37af536514973bf368abfcb1"), ("03221a52bb47ba17d6400b9269110f2c8f1fc44c2d58b82081c3bb32ed79a5a3", "2fa7886e078d9606964f13bd54c1342eabc67d9f9816232cdf0c73df398f4ec6", "1483d1f9ee0056b1191159643c100b85e2067c3734d9bc3dfe3ecdf1e7094dc3", "0846ae84179d008f552de0e0c87214dc6c4adc0b3c2389c74353e5f9bb82fa3a"), ("068784d3e6569eac06829752e821c235a577eaeaba4c0b23acf1a87b31cf4d47", "00ae1b8268b192a65db84e98f2a97ac4461ac135b935fe6267761a66b46f6c20", "1faa72954f5f2a01993271e3731ff30b0bb35a84ff0342c956ff724d434d9b49", "2b30232cd8cd47ff313fceb745357d9b9ef15d48dc890b527334e4f25a2bd187"), ("078065d7ae655ebac031280c98b845d67d3509b0c7a07406a8e29f70b305b72e", "0b1b173f066e73ed773e17d3b61b91b571cb2ba547128016c005d7f818714837", "024c28831901cf7ce7c5cddd2865e89d16996b5cc19cd75f9882e00c0f88da23", "2910cc1d61f57e0ad21a92eb4efb649780ac50d4f093bb7e9db5624afa0d1d92"), ("0abeb2aea04ca43db89096e600bf193e9d9e7783f7d2f38776ce2e9106f3b491", "288a63b6c199d11ace2345ad3903f8624a25108674e51bc4a48ba6d18a278a8a", "06443e97bf73b01fe168d2c81ccdc14b039399b387260a86eea6bc3dff392a8a", "1070b11149a2f235f8ed723725523e5e72ea6acac8690a4be53267a0f846c54a"), ("0d926c4362d2508bc482baeff0c55bc480c7cd4199e8a10d30570237b005d949", "034517acf5eed6d27360da6bdda974710410022077aebe9c33d32cfa4c70d6ee", "06c19dacf1ff4fb62e8f9bc06cfaa194ed14037ef36b74959d5be6b355f9fe7a", "15e651491728174640b5dab1c92d4ad781379c604a11b39c975b3309014d6de7"), ("2e65d355605df8188d00a9c77ad65baf3739a859b85d9c0444d28d8d5381ef4b", "18f94c14f99e48287e8c7329d334a73a61016ac2c30af924caf251017fe6e479", "052c1a633127515887ef0f339acaddd9fdf36912f1a4fe42e9e2da7b3a42c5c2", "066584c88e07c0c3a815962994392ed67ae981b3565c17136704839dad9c7018"), ("24484ddc0cde950da9c36f695a778533dc290d9ea8b3604fc502a97742adb4d4", "10833839521b7172ec2094e439c5a37719af01d0b376e8a4ae96f06db063e093", "1a464208897ecad7ee9173f046b88a00a43a09726c62bfe37a476ee9da91826f", "094795483a86470e40304583768c940990e38db1ecacf7856ee8b59548f9f204"), ("0eaf4d8d3988dfd74e41ac79f620fceef70a84e9718fc1335f32f09a01d2953d", "17bd3ce3f41be09b933edbd35063610ae76d2fce6f05d18a5f26aacf0eddc770", "2839f1aa9b48be1ab062a66d650b45f7adc72f72396a8e437d20a0fab3746cdd", "1d685fd1529e94c7a2b880a3e29ce1b87cfde87fc01bd76b62fd49ea9f5fa05f"), ("2f89b2b7489d225da3f20bf6bbd8b6a25d49d772e5d60de540adafefd0d889a4", "0a124b87704ad8e9ebe12bd49f9ddd6af4838e5b9ef5c25fc254977647648644", "12528304d38ec6845416abecc9d7188d92f52048d93b00c255b6fea99fe90682", "0fc011856030d45ad6952120c9302353413ef7c6c93bd42f077e515bba10276f"), ("000d593445b72bb161dc7460a172f3ec4934e88ec9416071fee468a58bfbdd30", "1bd305a25beadce02a17d65f092c396b749dcdb30ad199cb33d18d6748648cc6", "2ecdb47377174151fe5b284c5eca9d3a68fd701c3b20febf8d326bfa590a86d6", "1f1e98b22a84812a3a5bc05c6c3b174bde80161c3328620a384a802456a8f241"), ("14e7eea73b038d0052e9c92ee4fccc72a128089f678228267f49d9281200ba7c", "0841ec4b6f7f98a09dccb5118abbec1c2ddac209ac7c3bcb23b4318c6cececf1", "16ffd5e03d15bf8164e0074ac87a291501259a4f74c1e2285282c3cd37c53d36", "1fb6575e090704d1fdee0195235e1af58010620c7429c8b8cadc7fcb2db1c5d4"), ("1334bcaa2865f5c0bc16e86f61e8c8b08477fabd68da0f13e2c235d43b58e703", "1f69e111f3a1194e4f47c20c2f377f8219f2d018ef3cfc48166725c965b1be9e", "1ede54ea0cb4472234fbb80d8bb2d518da11c21e35696da16b730a068b2d83c7", "20971d0277e874c5c34f7cb65201736cbe7b53afc3e72da4159d46ca65be98f7"), ("10cd260f0058cdaa2c89f2e694723ee38327c3ee97c6d59092b28f2e70cfcee1", "25e7a9de752145b055af0a43c6aedeb2c67d3fccd9156e478adb5210650088a5", "06c9b81f66ca27d5d582f25620dd0e31d210d71e9ebf56818a5d58e3867cd9be", "2d9b83ea88b0db6118749a280bdf5c76fef904181be72398b41845b10afe7606"), ("15958694401424b5553e3b061d0d4a96a59aa6162d0770f8ea4e7cefda406072", "2c710ea7f5bba12c157aa094f715ac71fdb784d469c642e17a0bef48736a0d4c", "178caf2ffab5d7bf4611e2f6fcc0bf0022502d941c0220ad943be1d7b5093b4f", "13b649cdf9808d505ddd1f933d9ec61d6ea213e04ca87af49b118d44478bf7e6"), ("13f2e26dfe5c32d80413acc4153058d854fb24c2a211d182687116edc2bd3f97", "0a4408f906d6fc0c7842017f160caab90cdd5cef71563a31b34640e90d237a4b", "0b3a8d7e2ef281aa57010f09934cd4a185b920d4470ddf7e439535c063b66d2d", "262e23e50ba114014c18c4abc6983fe3991cc32f5657d32c0ed8d86cca310b81"), ("05832e426ddae825da950fdc4abc001cd0c8b38532fd162eb179d291dd9560b9", "2dba47e2d7f8b4bad7ba28f3171a6a40de25123750bc37795487585b4f981705", "1dd0db87cc399d70382e11028a053ce8f06df76937a05f639fe792bcde4b067e", "190ca9483fba6db0db85d832fbc748958f6ff517d7f9086011d9bb15345f9ea2"), ("1ad391e1b90d47590a7a888fe933c8758eaafc81176db499d31ad68acaeb006f", "2d9246a2f3b14214fdc58c7a46e21bc82ae25a2cd3183fc79e9a2c4742ce9103", "0f45065120619690d0b9f0475fa72e74322a651460e3d9ceb5cc320a531796a8", "0804198cabf34f909751831a8000513168e179718f712eb627175587565b1dfa"), ("2c8231750a5a818672a71fb1e492c82d707e3971d14bf4adc475226cec82a3e6", "24cdc9dec28392efabe2fd9a856d9d6521d139a59454a04978579304788d77bb", "0abeb16bf50153ff3c450e89f9ca0d3bc1fc8e398404d4b7d75968da87a011f2", "259f2994651ba346d5944dd1a75da4f70181d95ef6faec6d8528c7ef3fa96b59"), ("0efaa1f2333b2d9ce52f43feeb64849d1d325b3c025703b8946b8755a47738ed", "1046fd4db5bc3f7594241c2d418bc3c29c11b4b215c9bb4d3cd0956ed002c703", "24a7f5b6fbb130ef13ad5dc7493641a8d7671eeb4b863a2f348bff5f1781ce94", "2d8bd84a41b076f368b74e25f9ee4d2dafde7b95847204a15dad0999cd82ccf4"), ("0544f6820401b29f51d8d10692b3958cda59ad8648745fcd25be8aebfc63f3b3", "2ee5d3043e2df5cea1e03d4e8d5e8f10ab4a9ff75760764a5271e6e7c4d94453", "06d19d7605f545d7080358b9357beb335fd667664b2baf8fbe7a84c96fef5b9d", "06c721277975e19577524feb450db25e252db3bd2a41dabdcd4ee01ebfdf56af"), ("1cf94d19dbbf464d2b3d4a9e66ba90895db9c0e9e579c0b2ff77a6c069145051", "2b8773dd6fea98b888783e7c39712d837da0aa1e766dbffbaaa7c1b1bcce478d", "1e2b52999a0a725139b7e6afd66f8b7437d42cd8f76293a022b96943457995df", "2a225f7eda300d45182d7bf4d99af7e2169307ff5e71c13180de4142bae4ed0b"), ("2ad3249e1f6b91293a593790323bb98dcfd94f1b65cb4ad688fb6f858c560993", "24dadef568a3b3417078f721102575b13654c578ded32f6aae6da1d178e3288c", "190685cc16bbab671960d81ce3e9290d24a1aeefd21e53491e48321a27f94d01", "20a4b37b4b32b459ecca341a3e553e38f2cd1df7556d1530589b34dd6808d03f"), ("06caee271dcbb008adb09ffd7146a520501cc6d6f30cfd8970b9ef12e7cec20f", "0228a3a39d9930d8c51c1685420c629c1b8920649401c1cd3a6c993f22737ff3", "14f08938ba7f07bc1b26de81bb59a164ce0192318b002ebac3b0c9da6dc7dbf8", "0db9fedbae7847066f3fcd9d1c8d9c6c031dd0aa69194fc8bcba5177c75780fd"), ("0ee97bbe8a63134af1b94393e4497186a6dac0f9f540356bb15ed4bc40ddc5ed", "1458625a61bc7ca6e4259a3fc4d1aaa147ea23675c5b6fa866abb74c0a76a106", "25e050f9f9bb8b47b73e833f657705896dfc48ebeee32e2c535ad83f6115cc4b", "2ee378a5bf91f3fe53b4ef4ad584d3468186ad8912a546acc422d6fbcca0c3ca"), ("1dda12af3490d2ed4c4cf32704a60f5c13b90ee34077178dd6ada8044f2ea167", "13ebbf26044f5e2ee7535d80c74a442a7c32bbc69e4ec422ff58ed028c8df84e", "13cefebf79439cadd40ac5250277cd9f61aad5e2acfcc3c852265e29f2153f33", "0a8947c256c86cc5724cd120c724b1bff8fdc951098588904a434176f599abb2"), ("189b7c57c541bf9b273d803e53b83c7fde18df23227be60c4ae81e0c2d53e651", "0db6d5967a094d5688c7cc7cbd6049695555295c6cfaf02ae49409815f8cb346", "22fd637c7fa6db6c8b946f687a9fe2757e47a316121be1009714bc1c7f2f7d78", "2b8495d0de9c736cfacde60200afac78edff0e321d1fc25cc6aa052f810ff65c"), ("2d332f0bd541efa8032dd0989454e2bf47e746f98b4b272007942666109ffdb6", "14e58df68ccb8af4a5fc1bfef7fe0fd88460c98cac68b3054b20c9326fc7c771", "0736bf7dbbeb6dccb8381ef090603fe098250975b8a5b31056650295bc581d81", "1bb59fd337b748e2acba3420f3bccdec1a875d30b4eff4ca47e7e00d66930f34"), ("0fefb28ecaf393c875c541b6931fcfa656e5ae922be9ebc669ea79fedd974d04", "19bc88c44f50b1da2bb1bfd8edd7af1ba46d6ed1e119b54a68fba1d3aa234e5c", "0ff1c8d394af9315b8a3afb7215af252ed06debd74d369b02881bdf0742ade9a", "19a0af41cce8d6d81103a6494e3b20189e9a9fb7ead204350ffbbd394076558b"), ("22c094ca522d2b5fbb531c36dc773830827b0670c3b5a433cc0b35b135f03d39", "2251da25639d6ae5c66733f63aef56a75808c0d88e754fe6f0f11d1d25ac9a6b", "0ab151b87a4e69627c836e7314bd372c41766ffdbcb54fe7994509ceee3ceeb9", "2da1737df9fd19a2b6775c67d6c9c3d3ff20e6f3d8de086c1c6bb41b93c16412"), ("0d123840154a1fdc0c5c5f37cd661f7d57c54e6f4d2ae59b822a954764696eaa", "1d5722b58af7ad4e871b1cc51388c7bf4a1afe1bd7d0806702c80317fb665ece", "08a4662829fc834a8486ec64d31f25e71c5f1e99f7b5a0108333c277c4d27629", "0d2a07c30db093c029414ad80ebca02026e6eb1e2c3c8a03fda43b6d1bc36f0c"), ("0cef6934b12af433c5e0fcc9729898490e9b5cb2445a2dd808c7233dee01c1b8", "102b199f3cc7fdef4c8f8173a16de2159724954fc4f953f4402f1941a1a6106e", "1fa19d4accd64adfe375dfdc88a51ad8cd61d089d37a0ab50b1d01a7a86b7126", "0df4bc530767402278ff6851677cc1d6a91b0e55159bb184ae95cf61d4e5b3f4"), ("06ce5adff66f496f110650faba5211789c26a8dd6eda034089a1c3bb82c8cd98", "1d78bb8a410b10876631be7283e6395674c2c396312fb6301190f7006489c725", "1ffc3e2d1c65d127ba060cdbd3220a98fd5e349d34dfeb513049533db570141c", "0144e8eb716304ef0a2b581dc80010399f0b8816d5835b81fb7104608550c978"), ("0fb69734ece6545fb8714413490c83ceef052afa38e0e9ce1d311b1ead5e06b0", "2ac9024a7929f5b2bcbd2dffdce596bc88f16c4596a64a98731b52055bea9efe", "204bbc3f9f13b79565ed5f84eb4e29bd1c6faf8fa58350dfcc70b18e3c179f52", "1e765d0c0953641e6c03086ef062556c7576dcc2f264e5023d8b4100443943d0"), ("105b55fa3b22335efecd0a20e25a11354cb4355406f010d49f58b3dee07d3d3e", "0e556d3e0043e10d13367bb501e10e7fafe6d4d0ccecb5ceaa26b6353a151d9d", "2c2e14e221681e5517695b5ca7db5c72306253fff553376c136fca8b2b15e942", "229bcb35623c9b506d4a8e1fbe39ebd04d768df872381d38a462d81ff03c16c0"), ("0fc07829f382f09f091bf8ee6c8382376ef8c4292e27d0ba33f601b29b411b66", "28474e51559d158bf99fac469986c277412ea3613b8a854b397db6f832e0acca", "06b285ba5fbc16cbd5c393e221d6fa8ce80416e60f3b39459e437b0b07582266", "211b16ac7b2cff5391e723d184ff93ab2a086f872bb7eb3473dd73ba7ae4bf62"), ("2b79138873e0779add9a794701c916a36c7bff1cb5d3b9939afdd52c0cf98030", "27579e12d1cfd5fb8a6c9f7541c9457ae872c1c9045a6ad258accfc84515370f", "0001d849472d02f482d4a6d419e6f6aabeb8fbc666d2bddecc599035c0943ea2", "13291a11db44cfe3292e38b7ce4b082214e346e3d2e067519696727e477a5b9f"), ("1bf9dce844cdd8760345269f4c466fab2d1a6e56dae05a246fe13e3449638797", "1fe837aa98ab0b11f527903daf5e77fbe064961b46b7a7414b157a5f366c7f73", "27cc06649b56942a49183c7457e8abcc34ca7d928ae2ed480b2049b1fa82ef59", "1a67c30d7a88a3a2ddf72e358d46cc6c7dafd83cd9b007fd1dae9bae196ce74c"), ("024e68f07acb069e13cc34e69822980ee943e989fdcdd569c3efe45e7eb01bfc", "1cf92ae998ff5b839f2d5228fededd6d7af91a4918c2a0b891a59128708f5c6a", "2488b27b8d7b191c95692c5e426cec6f9d25176b50eadb2e84572dbaf5301b2d", "2e2ddda9505149ff40b41eef792c96944c351903fc30ff058df77439d638c9b6"), ("02f9ef517ecad3da243494ed00fa2369212da3118826d450b16e5e59efbef856", "0cb9b28fdd2a50119d9c7abcb96942fa192bf6bec82021ecc978103ff5ca8b4c", "0b48f62487509ea4655a61b441633f79b1b664e27237a9b5aea80996d617a07e", "2554dbfb4812cc76adc04194031da8097438c94cd2801ebe4184e0dae523010c"), ("0562d0134ce7ee68172979c0b89f9f4ce51acf722e72b0cd547074444e33fe09", "146a845bfea769379e114ed3fa207ab506705b6c8991561020cc4d19a4649d21", "0f14eae3298f9b54ca5d34c4f05e62ed10cb947a4bc011e19952f3aa30271685", "09e3598bbf732f1eb2c3984efd8f0f926694df9121d726278b2bc9f6aa50c721"), ("2c5d3fbbae5cda9a45ed5e936c741325186d043470863d368dd67888a30105c3", "267d8cf5f8c9ddcdb4f0f3228f125d9d36fafe4d6c1efae5cc67086e9cd70fc4", "1b82e2d424960d00780c19208f31f862ce7004e4289f5227a951f3e0ff782839", "18c8deb798098680cdaea992145c20ff8cdccb3b1b3fc7899d7dd57e935ebd0f"), ("2277ee92c0fb144fdfb0c2ca7d3d715caeea1d886b1e255993cdb0e65d02a987", "17e21e2fe9ba839d5e2bb90424d647d4df89f0b388a6e694849eef0e61c8851c", "059affefae51a60b32c2b4b9dee7e2a0758c264cd1c104c5da7a52e7092c8e92", "2c356dbb9fe7555cb6846c8de3bd9e0a7a2e74cc000918222adb243048e3fc03"), ("14ae9200fb4b0a614b0c8f094df6cbf13d8953d18359e1539488b88e3ea97613", "1947aa4c24c1c8d4eaf8423362ccf45a6dcf1fac547f7e8c6abad351bb4720af", "18e368e3d0abc66fec84f4aadc71777827e03797297a7b6c9f0931f2853ba7a2", "2602e7ef0c50dc17af73c27b6f09689c5c13852ee2e33c170d284a689494f380"), ("26b98943d38106ddccf67d2187b6ae5a2293f3060421280cc0ec220ba4f00c42", "26705279b040dbc6bc6e1defebfca8c546aa8c49ea1488c837a64637d951a66e", "1c980c0d6035c93d205c4736eef38a3c2ef4ce666216c29c41250ee72a2cd552", "2a164ab0aa014aca3f4eca14db7cf083049cd38e14c13529aade170133b6bdca"), ("1967dcd622bd22f8ed1e6e97e808ee37d8d055aba73efff0fccbb6abef2359f7", "00fda2614373e4cc640be57a56ea4d8f57534087fae41795bee8b4afdafed9bc", "171a94a36d1718b6295f24dd3c06b122d67db19b86688b478c871d0a4188137c", "14a2060029ed6ee294b13845c7922561b97ae841f65af748e32e3c5bf62c67df"), ("2a74d4d177907117f2e8e3e14ad52ebedf6bd9da1d1703efa194191c9d53c332", "1ce55e2faae73fcb7c4ea872e4d363f79765169784ff69cd0982b8b15fb38dd8", "1aee1d807afa1f6db26ee371936900a42cf2904146ea739e604438eea849477f", "2a08246440381aaa02d2b262171e98d7bf98ef5d94e3381e98d2f0418ccd9dbd"), ("297ef5f48d0a9bfc3a659a4e0c5d471c6d4c4da382cf4f4f48264b5ac07d3204", "1e78cff214ed7f3ac98d257f42e844cd057be07352da6be3208c49b82a6ac0da", "0a5216985e261ff530681526c1c440083c9067c1a1da4cbc5dbb41147369eef7", "0780db36ff29d382e168cc1f41fe68ae5560679a762c4898911ae742ee1df0ad"), ("09415d69e4d8ee69e0dd347b7c54f86325ac4059c29e2ef71bab8fd018b0b562", "19b890eca6845109e8cd3c7a5a4d1a871304e7ac6af686fe3d14a4b6aa52e104", "1bdf721fc6edb3ce1c4466d03a0cd48db6f3d9c20a605050ae3b5f3ef077e65f", "05e0c68a6e85c55048f6a6db9a8a0ca66873d3086b1c83e9c7df09b8af6102fd"), ("24a593dd4c56666dcc3e461d9cdccdd16ef37329609e703b9fd32067f8e4bed9", "055591f4d9806bb2a9725623b07922dbc3bd13e4897c97b86bc660ee0640e099", "2bcc80cd66e86e57973496f34e4f44a4df41fa0d9237007a73e962ac2e2f8b00", "1c423bd9ee6a425aac018763d16e997eb98e2a53a456b28a9875606bbf9c4511"), ("2c0a93585bc89128b879833e6d016f9f7783789db8339cffec5b4c83c81a79a6", "0725bdd420d84029a0438643ea166625b6245b4411072ef84dd7cbfb4d74af1b", "1b4f5a7accc530854ae6db990cce16aced7c27d2aa2b1ba25a29461849d4df52", "05ae5f889f8c775238b600ad770bbfe6c7d083eb93e0a5274d5ae0d2e603022e"), ("02df341f6580ae13b8a52f1c1fc08979e4d5ac7d90808a4a15fe771a8202d4d6", "2c106c40ea52b53099b5a5d39d646cb2e47834dfe450ded03c33546eecfdd925", "16570215984fbecdf093e3b6d6101640931e617303f49369780b4f3754344c6c", "28906763e6fff10f83e4948ab0ccb2b5c4ed5f166acc3b1838d10e4b80204eea"), ("2c48d07eab993c29a00782fd48fd8bc7e127980c32b483215dfa9b753f70ddd3", "055e1e11020f9d0a380c1d33ec1c87f3ac5667657d6b97defe5992170e4f0921", "2e209354327b703d58ff8964c1d948891995bdb4f02bf6a646163d19e8fae3ed", "0bd643ff72f7e7d454e40751485cccc67a0fec2a3b8fe670a2b3239c06a7cf44"), ("074a2f441c4d7338c842c8492993d68e460be3c49ae2cfb12d6de2c888198ea1", "2000a41b0cb6212d93eb29ccc4646b2ca0b2ee78b1897baf2d9d83b7e77bf2b4", "2bc800afc040bead50948c732936cdbe3ae5d33be118d8a9a51d29b658fe31d4", "0ba80c110226b10ac0bd5d62996e073922a0736b0f7203bfd918bd0641d443e9"), ("16378a1d5f49162280ab15b7648c41181d201abd074c81bfae3f0de750743732", "1ab7023b8adc0f2b5faf205e6b8a4c00464eb4cf26c92559418231243913cff3", "2742335fd5b6913fe8bcc31c4273a56bca44f41e63ec2adce76b80f19d2222e5", "24b9ae6733e7ed9434367507ea44e0cdaf01b67228a4ed78c2fa68807fc2d4ca"), ("138bbef0f20af12e18371e368371ed4beeca871c51ea349b482658743dabf724", "029b86504f37ae7f9fa1bb00f83402bd61858960a56f7d30fc91a589c9da4637", "291aca0078a98826f02e03adc7d36f466f4b45ae3ad7f41409f88166d1145a66", "2a4e0076db1d6d2a19d49cb02a9ec5c5c812d2b1fc1d72f17cb18b8a123991fa"), ("1fce02b38f9b253c334de33ff51030a12ceb34e25ad34c3197beacf56343eddc", "215e424a3e427fce9b6d8a4df4c6caba20b47ebb028fa790d7cd57550d5551a0", "213928e43fddfb29317005c4c3383c335bcfd7520eb48e6e1805326c6b9c87ec", "30327b1554aae3c11ec3fd5d4e27c8adbbe1ed8fd0bca1824da5586b2a0327cb"), ("28c622a19e6b3dd16a5ca59a0adba3d096aa63a0b89da25e2ee6d2e02d47087d", "1019a06440eb43753d19a087407cd323233044bf1e377d2d065e3c79c8f00cc0", "2ffdc3a2c6856ddc1257fb0e999c7d8f3c5753dc4d47cf17490927238dd71bba", "23c421772844cbcc1aa713110f1aea5e7572ebd4d10d6c5954e3275a6a949e1e"), ("0312fe6279eed95b0dbad6cf304ccdf0c6eb5e77d8e689b4f75038aec4ec7b31", "1e6897b7d0fca69cd4822ead423ce06eff5364a6e70e0dfc573fac7194519d3d", "0c8e61cff21f1ef014443bfcf3ba6acdd6d9913581d584720b0a8f0aab2a823b", "0ed8e8f87d5fb7fa48722e4bfc2551294826288245e2033c26f22efa60dc5c33"), ("1c66718254e9bdbb55fcf32afead9b9c1f36de312a4dcda806be8c92d93b68fd", "17dfd37481bac1bd397b24ac8f9caee3bacf77c9fc883319c44823f74f03628e", "1686b107390079b3cee908a6fae17baa0a1225ad355f8aad8d748deb4bc08202", "140ef88262c048cade66846ad6b2e334015a48dfae7183698a9b22b917ba893e"), ("268ff5b626e6687eed95df894c3939f84192374e491ccca6610642172b2dbfa2", "2b9c88d323802541374574ac724b6896ad2f7978f707d073155fc61d6b280046", "0296099fed399252e632dc759f29d0165a9a10fbe26c40edc713a0422a676ccc", "0eb8e0f7a174358e1a601f043fccafd53a7bd6724310f93a82a57d51a656088a"), ("1ae683d0f4eab86db70a6d37a51ce3f8b37739069d2de581d4857e506ee0b58a", "00c7f5e431eccc352c16d17e9ae256ddadf4e3bec3b4c2b326d5df31f66c174b", "10416a1203de4b6b9f1f52805690dda21cd064d26d6fcd9664489a1d3fdadac9", "296180d0596902bc7f68f5cc1a9dbf7fc37845c03c3eb3cf8e8a3abb501fd755"), ("0addf98f41ab2bb1f5b7106467c31fec8c1d57aaaf71555dda50d4c3bce78c92", "2942928eee3de1a1ab83a3544d7e75600db9282fe185b15a12e6e46838721f1f", "031f6336fdc84b121061a21e33cbac882bafc90bb415c9a6633c1221ca5e5ea3", "01b8c0543aa1c0b49d302915a77b9e6aa4fc2a58b2971ddb7c34096432580ba9"), ("25e27969d1754874728eec3407806da2959fec453e278c71f55a93462313e0d1", "0348d3c0d9e30ea62e0e30d5099deed3c1d168c8c193d2c3e04a2376224953dc", "09efcefd8c29547cbfe27882bd71ecf29d9b8c3c3a18851c45c59440d62e09ca", "1ed6beb999beb312b3318ef35d3eb0474a8e456fe308e2bc64a8881ff3d6ca8e"), ("0076b132f83bd2fa4f18a2398031ac151c62b51e778b86d6c24ab73a5104f0b4", "29516e09fcc9dd4528c9b2b8e52aed726b78456fa5fcfe6a1fd6a5787a03fc7c", "1b898cbbfa76c28d769fd98d74ba64b249f26af73161dfd6522f50823a288115", "1b065f87a9e390f2c5e278e1669f35c1606fc92b84de8d9e547d2c6e9f108d87"), ("23c9fa4ca9bdae3ef077a165ecd8f613495838da7c5acfbf0835b49429c2c038", "15bd3a0135cefaf2b83b00fb1f21436c3f066469170cdfa7fae0451c220648a7", "17268dba5feb5a9084f0bae73af2d7875afa4fae8531bb9b1a6122c962854242", "2d85e6fc83e6343eb2ad0f7b56630d0551522b37db416647ae3295b15faf500a"), ("0785e136aa4b5ffff5e9677d4ad9710939dcfbfbadbe5468976be3627f6be805", "1d492800146edad64d48c345ae9937cba585e994740cc2f0711f86323fc3d75a", "14de54f80fa793d342a8a1bc731afdca2d8e4280314ca02d0d2d0594fb9770f5", "06137a341e93b9724474bbc9acc14ca9ca1bb027a9d2cb47164a5d9e1a9c6dba"), ("2e278529cefd87f5dff10b8e610f5852d7df82e176bb66a9cd73f2707a844759", "25518e069c5b50b09aea1706ec6f52501015dca9ffd918571635068dc2d1ccb3", "2e3017fee766028ef92b22786ee4b8e4c85615e841415583efdcea9b1893a659", "094fea3cdd9f70a284cf357e613ef73e2f13937a5d0066d619df5a0182a802a1"), ("24a45285ba73d026a758dea6911c63a85df161065a59d10134c6367a81663f21", "2a5f38789c99558cd2822bf70cfde7d812685e1e7122737e9d61abe453cf4932", "075a22032ad33e5dffd98733f68c87e4ec835154300e8c6bf1dba08595fec33d", "2de2a27b399b356182d11bf1b2cc88984f8a05bbb998a74806c218a5609b062a"), ("2c1a2a558eea15d7c7f4c01ad8d67db8deb866f80f97cb9bd56291fced085d71", "1f156ef8e80af5754f33c798fb4c2bd9fd4cb508b6ad827e4ea3a436bd3a1853", "1f8a409c63ab56dc33efcdb09d6737761f0c534e52fed5ec5ba9445c6972e9d5", "09a4428c18747f4efad6641ed69d21e424eea8dd6e1511a4ff9ee75c7627c8f0"), ("0274a8fa804d3cd059f07b821995b129f8121d15dd4ffe537fd61beae2e6a4fb", "126a2b11edaab78ab1382b9fb78cd072802124fc3076afe9a29f8f8b531a1bd3", "04cdccf2aeb8fb02f1c771e7d908c6b9b216e4c8f249eda0b52ba773fdf13459", "22755c99454c1b07f0fc31865809e08e346e7f33fee5fe41679940619abe79fb"), ("2195d61930e0ca2a8bae61f6fb73c7bb92fc1cc40206b8976d3ef76ecf714098", "2f990a5daf02dc2ff662a6d067ddedb1375ed791e4c82fd39ada32e543a867e6", "1e6f12ed1244901bcaa39cec164bb60d906209e4f113b80c9329b60db304d189", "25e5dda6806be308a2c1b9b7106fed718b1eb46c12dec3a6d7b4f5bb6bba0956"), ("0da68132479127a09e1ab2014185a8034dc0d9e325d5f122ff48598c849577f7", "24513bb72e891269c150eb7b11d8b5653e84c7ed06e7d698fe2039558ece70b8", "007ba90c0fb275c1cb87cd685d167d899f6e294d0f58988e24eeb89fdda7c13b", "24c69530e286bb1043e15723df734910eea3e8b9d4bc18f7fa95a16e0ebe2fc3"), ("0839158d721a817a51c29548fc161f6709931c45bc1bea752f853813fb1c6709", "14848fefae437f8edb05a03e84d7604d94c260a6a5890707953e0da0101662bb", "1108282531bee5a0257e3db47e8507a8214c5627f9a6de39f433d70b96fa505f", "216375419c264fe23788a68e7c34ddfc17ae65335c3146a2b318447ea975c4f7"), ("0044a60d3a74b268a7c699cc96eafe0a41576e2d326c24c213ccd8804e60e685", "0da19cffbf33c9f1e1a427875bb2517039bcd82ef7b31370343ba4719d560a01", "28eed8f633d2e8e95df622812570e36d5621352985fa284dfaf765f1a509fc72", "0b99285b8f524de457fc34ea8244a04c29931d59a7af533a7fac2ed9b5791878"), ("2e4d42e48f406743a565b87eb10e14e7cb085586d8bc15bc9cf92bf60f2cc4a4", "06a76fb412e4d52f4324882896497ac99d357e30a88e9c12dff0af685291f2d0", "0566c1a6e7ff483766a904a361c1506a78da63fe089c3f2ec3e2832f6103e485", "1b5aca0a334a7420dc638b452f210738ff7940dec91aa1215d3bcadbf9fd5d58"), ("28bd9113857a0321bd2703a902fb35821d57dc03f9e99ca718a6b3623e9e0efd", "1bdc03eb7889c3f7c64c751e2fc5c73b69dd3a725756d6fea2a9cc3e18824361", "1296edfead047a3c5604a88b6b50dfc1310893c0087ef9141cdb799de1e9f42e", "17a458d12867feb9527b76a93ffeac229a1525829cc48dc8eca097057890c9e3"), ("02b5e0cd4e39a0870b73c99d73da64520ea76f1752bff952061c86d06a094c39", "171367f5a881a0f484195d93dc1fd46d40f8ac1d63650e31ed32993a2d5860e0", "1e6cd08b1435682bc1ec2d456ccc194addfd430450683764a8ba63ea210125f2", "1a891cf037961bb95d1a3818e263120c9c0c1b39860f25ac9fdb2c99f201c4d8"), ("047e54008c27734ea317f0fa869af8f1d5a91d8b9806475220cb855c59107384", "289dab4bc316e7365573bbc7200b2510716661a5dc6a0ec17a01a4ca55107ff3", "241403d6fae96f25e72c8809a13a1c4f84e10ab9c7ecb1d4ba371fc52b792bab", "0ccaf1f0d7c1385be6d1aff6196387897006e96fdebf6c3ff35e7969d147b4c6"), ("1fd949abe619eeb9c54000febaf5c93bb3f565c2ddb34fc7002e884f5289c080", "122d278d053c327ab51953bc974f0e547bde1071afe34372336d567108192033", "1c19bc97520d576d1a787a9d338fa05fcc95bdda8996fcb99add1b0eac2e5991", "1d66f4379d5f0afa5841a0ac7ef63cfef07b30f7212c25e79c2cfa42a892204b"), ("089f02ca67e1dee2256fa3cbe3b48bdbb9f9da708fc50a69660d950a353e405b", "2a53267b1b15932c9e22a47999352a69abe43211dc456605d1a96f82a4842da8", "241e22113874efd00522bf1f09619bc5845a4618819abb78f995c0a0d447c6eb", "0098e190ac3f352c7b97c0abe3de38b75f201ae3f01a6a4ca52e1abc810ceeee"), ("04b0988d67c607d39de4b4b25a612474ea8b31acb848a77f4a794ed0f3fab4ab", "262b277d68de8b47b8e747315e7d75669e373cd6223dbad2d7c7c60ca42cb377", "13187c386af148781f7eab9309ab7f853e3dae5a8577c061f6e55dc44f284ee2", "06d06455d82d3db092031db0ab5a50cf618ffd7566b48057ac9f3c32b381d4c3"), ("20c715f644016eecdcd245e198882fd857e2ddf6fd8afc126085fc4ca89c3238", "13ea33f80bce7d102074018b6c0fb23155a4ea0697877a6599e9184c4d32c754", "13f1722d0b6c5e12c87e1c5a0fb9c8d0b515c439b2e23dbf378509ee4a7e1886", "0fdf92a427e1f2e96ce88b8dadb6940fbb623e5758c06a66860096a6c066f6d5"), ("034eb88860e3cd4efb051d9f075f2e5d91a1ec126b88adc54c2b2310b1955211", "13445baa93ffc6a54c3ede8ce1c99226462eb3820c5b52819a57e18689a771f0", "09d1d47a2c8a334c60786bf5a659a19e830dcf4946d2a6813bebf2381df65eb6", "1cea608fb8f3d390ec259711eb10d259896fea9ba322619754a74cdb8c9aa09c"), ("1821095694c63b1cb351c3d4abc060e092d9e5c4770c7cf600e7ab5f756f4da2", "1c9921776fdb7a72d26d36a478199f7be7a90832d9e1fafbf2cd671066b26709", "249977493bbeb4ea7a12a225c3fe194ebf2c5ad97abaf298fdb023ed91c42531", "2db847230bc36f09190ab1609bcf2085a0b0a6a3a23132ff9c28ce9c4400b5ba"), ("0ab59cd5ac87098a59999851ebacc9cf3a1c34204382a1e415074279f602adb6", "1e7ef7be5616a7f0a28998cf61b14258a8e900e7ec128b12237e209ff7f8b53b", "2694d84a368a9a0255a89deef95e6eea930cabcbac655799418716592571150c", "121a120a2c735e2dc81186c051be709f1e0f9bcddfecb9f20a180282bc4563da"), ("28b47c18338dea3dc68a0791a46d317bc09893f0f8e1af381760a8a5e9ca5c50", "21be65f0c709dcf43dcba5e1ab826300ad072196b62eb6d74aea2496ca38c04a", "2b58b94a9fd14169242bfa7b56d9eb29ec9b2b9743386b29392e25b0f8bfb6f2", "2c4387c47b383d0827dc2536fbbf5a11b6246ed3465f29c7234c0342254a5900"), ("20049804cbb1d122cf782f17a5d6c4b1369db58652812163013f0b0e0b29d4f9", "258c81d85c3f37a7a048ca2816237df68030c255aafcca36fc5792a8aff216e8", "2bde99ac8272d60e0b0a8e0b2fa1894a9e3eee34aab66b9fdcc7bb2e6d1fbbb7", "185a0a44e4af994a2e378ee1e48c88af533179bd1e2ee2f5e8c322ae07c4c89a"), ("0a20c1752628d6d9d2e6d24bd7579061230f6935abdc5a60dca234318a6f48bf", "2f1536b2678908ee0ba1a621a5c2cc52e65b4a6dcb281118c281301b6a3d70d0", "01a0cbe1ee34e97a091e01a498179d382851368561a61fcba880191022c51293", "27602c7b4387b78230ccae24a3ca11bb10d5125264663215c4dfced46b940ac6"), ("183b2f845def2c87bc46b3a433ed679da4e5f24eb764ed188479be191fde0a59", "0b3311fff9053f17f27b4f323003f8430df217f9da0c198e3c87a03905f00cf3", "2281c217db31839813231cb463b2966c0a4378ce73b72ad675659c16377dc269", "0006952f90f2b42ac0594d2b713de43fd99fc3429cded6369dcdfd0fd87df1b9"), ("0d12de72e7b6037d1d1c0b45550fcd93b971a6c201f41bab690108a929fde335", "2123f0fc56592eb81c5d15c13b70f3e0f61c3aef6eb0d454e8fc27a73277bdc2", "1b20b2910445eeef025f58d3196197e50b91219fdbff365b03363ff6de7096f6", "115df72b53cf2cb36371190374ad0cb19634edcf38fb90c15a74931fa35bb044"), ("093659fa2e5feb74493f8b87f1e1272c1baf9b95fe37c7124b24e84bdd7089e6", "262b1d3abf2dba6463b645f92cef4b13732a96d49e27701670fa80ce3e2c0e22", "1cd7326ed676d56ffbdb4f1f1d4f3ced8214fe1122c245ad5141f36458478a54", "1a4fe7f9131525dba232f09d34f882877e6b681c861a8a0ecc615faa7ab5b207"), ("1eeaf7691742470780c4ca9a9932bcadd84be9b69def61c804ee54317e901658", "0260a4e8475a94bd58ce0804413416e479a3bdaa981152c227507e4103a4dbcb", "0a979dd61fd77d226c9ac6974e1c7a8002e096efd48307a39eb07276960ba949", "1349ad3dd2c4d645dd8347532a1a0978d6970c31dca089536e45b905cf08eacd"), ("112fc3e5dd56eb579574b6ce16d92fb2cc755deadd874634996ccacb87ad94fa", "181f534f734b6e878a04c6cd672815a82afe5e3e685fe1268581ef4e1393ea0f", "0c43b492b708d423f4c431b367ef00f5de52590dfbea092526dd2d04812472a7", "09f68b8ef8285d7f67396b3e00a08d454d1b281235b26ebcf18253a825f9d0ab"), ("20c4d58ea6b0d38c29e13a47a3d91a0c17e6ab5526f6a7342ba63feb111b15d0", "00c69928a78c48b5e677e01ae380b4fc66fd6c2a0840333c8537065d4d200614", "2d195eee5b5fb821deddc105bef0ebc27c9f92949c9e1a5155dc1f66707b9985", "13327747d412b10d495df7605777478f139f708113c05f6c4401aedb83b07a02"), ("053618027d5edac7b03771fdf19657c3368fdac76c9352c3612a57413b733d5f", "08947e58b083042dbe9dd7751e6fb6782a5e8ce724f37df6202a74030a179dcd", "120b9119d39e29c9d6e5e4fef80c45ec3a9ddee62b1894d334b264a9dca393b0", "2936bf4bf14f1ae4ff1450ab5849653e3f9417911ad9356d87dcb60956160ab0"), ("2f446d500c69eeca63bb80f5ed491c9033d79676449f27cc545ab0c48abeb19b", "10920aec46c8bcde31c923c24baa1997b47fa5fa579891f90570d815a2604c59", "16f73e6cec4e6643c15af51a53b6e8590083229ebae76a901923c0acf5c9c5e2", "0235660ea437b589885946f7dacf26101d17544da6a7bc1f533df525d3451358"), ("1f0f9705ccfa54b3e2b02785c25e8fb8e86f2be49e0da5ff4545c6678175058b", "2ccc7d501b188d1328366b97e26d32683b367046f60e2a8b49793697db87d8fe", "036e722a388f0adfbe7275b0e96167583739bcb7378b259ae300bd9279928bdb", "159a0326563fca7d0898e49607acfb4de82bad969c1d6a06406ced849aabb634"), ("1951057493a91759f8ca9f4d718beffb837463141ee2cc799330b1658992ca67", "2a47a7e21ddd744ea5cb0212d1b7991ef55e20d9868f5541cc880522e9f95932", "2a479600ccb6a23ee66f36eba0894f1c26f42df27b861e5a6c13fe97cdee66e2", "0a51512bc831255254b728a731e7e2e7f04732e3c20e5d4b437fa85ac2824552"), ("0fc383d6d1e95476fc45db768ebc1fbf0fa11fd7ff5bbef334ff996a367bf5c5", "2050d60a09308916200f99b13d95749764541fe87ba5c60589419b811944e25d", "0b8bd4247f10af360c3732fa17541d72cf641374ea5980b6d8222ef944f3fd25", "2bc7be885ea73c661360e4156d2772c0ddb8b4273eb38b3ce7f60d3ae0e231ab"), ("0963b8dba7446363998bbed1c22b51c2218c3b095b6c9edb3fed1c1e1e73f518", "2fe276b3866cd45d464827fc2441e058deb922c84461bef9c1eaee15d01095c6", "1655a0fcceb2d268d1ed026eea3e6c7d51174ad2dd1a9ec90ead592b8cec45e3", "18a2bf4083372c8c87159df5d86b052388e40373ad4e6494ef86310755927bdd"), ("1f64347d95e843e7c7470ef093e3a51ac8865ed7828b08d355f73e2114271f9b", "2991020229f3762ff4e9184bbf3715267e4f520b9d96787cd674b85293076049", "047ae6da1384c8289570288988f3caf26f62ba51bebac6f5212fcf98248eb1f7", "1dd637905b6d5d3c8e37f8a63e3a9252b79623b59b01d0f066069b2b208308ed"), ("1933cef20500460e23c5882b976002b044b649cd5408853d26dd8b3604228816", "0637bbdbd47ec6253336b38ac1619de9a591495b6a58479c6d0d0ff224dd0d0a", "0c79656d7f576cb1c4dbbb3fe90b05af3039ccbfe0f55d0917e37b8d1f92235b", "0cb88b2adcc3e1592df3c141ea19d95e0896b75a496f518e604f83fbfcc29f60"), ("2e17ac72058fcdede8c20ee72c660f303db07fef7b59680e1500c0ef2dbccc01", "2f5f623ffa1ae5d99f61eef578f9df9ce2b63049680cba7aba833e8b7421365f", "25d0161f2fd72c64b364c46db402c95d1a7f31334b3c6ab8aaf7ead29c59605b", "27fb5f00ca2aaea861a800c52607cc748543f504f0d7ed732f7a454487f8a7ee"), ("257d0466ab49afd78db372dc0f7e9d31e57c4a7e3d54bc2f7e5538e830e4451b", "1e7e8d32c93d8e8348b5e196a5055a635687ef5462e25e331a53e18fc9ff7933", "0f570bba25a2ddc142650832160b052a3872ebd05e460f73aedb18ed6747817e", "14ba526cc27d8156f5cd6033d743e6b2f741ef1f02823c5db18bad42a8faa4e2"), ("1ff57c556554b440bcd524e365acb2fd0b620cfe49bec86ac65cf8aada9a82d9", "2d37eaf0b7e9b71618ca8429d795ac747ea2571627981d4553c01767200868f6", "102254f84d8fad6399831a134ce2f2a3cbad66ece9e67d836ff7392cdde7cb54", "0b4743c3784f2b0e40b3016884b1025f010fa633a8a6d34aacf6b636634a9cf3"), ("2a391458aabc72a0697641f5eea17166766f849068c048b5b26f932a90999ee5", "1d8c9d3853539e1a65421ed3a25da873fc6e190ec0bf0aa4bf02e1bad03731e3", "1d2cc0d0410a8745ace8fd4d329b6135966523eb31387a9c796744318f5d8d70", "2a7fbe2375a4a6deaf33d4863074c0d98c39c66b6f06a0c5d418ede7e0e40b8e"), ("2f70e1e15d2fd9077a9ab75b91c1e0fde6c3c932ece487d2dfcb8232d27e1a1f", "0950ceebf00cfb89485bdd94c3474e57afa7726c5ada8d9c1be1d8ab5ffa83b9", "2529025e85062adcf0d0899471b03a50107f9fd4d25979b45fe6ff54f1c3298e", "259f1556867838b799c5ae7c56ce339d840fbc3bb90e24ac4d7cf140c3086c23"), ("020a619ed8d1c71ce8d2f9a84ba718577f6f2191d10a8242f497ffb4f83578ac", "0e4a6ac1602ddbced54403873d5666bb300db8847094e805fda6138f11fd3402", "0dc627b149643c29613e944e46a99069c529978b18541b441fd9f74d57c19089", "05f8787a606b86e8b415f49076a323c44ed5468ba6a397b65cea863f37ac3fa7"), ("2505911e368bd0f365a1bf54fb1067a80275c3ae4b76394addfa1c37e93092aa", "1c08b5253d08ec64fb6a81ec3bfb659369d12c59cff686523ea0508f5b299cb4", "08e7ce512423d0c84f8240de48aa511c7b030f8a125772d96b714d77cb855fde", "0f25573b98c18333871b0a69eb28b3ca23c045556b3ba9acfe68dd2ec6dc6c0e"), ("14f3f1575bd9e38744ce3b3f2ed897695b2974b69caefd379c20d0f615ed874e", "07871277c70a75fce5e6daa21323d6cc08c4e78a2f318e78388a785f6247e0c7", "05c9d882e30b5dd946b0e5e7dae4b8227055cc10441c08bc12d63b32cdb8b376", "23b16df7bad7426c0e85b3df560ac8aa0f109dd0cd38e56815ea6f2252a89fef"), ("104306598fa541e4d63dcc973da2b3eb86f7c071c9a60b20b9856346c222d9e7", "0c165add3fe2227f5390b9b6aea385a24786dfa09022141ede1819453ea3a319", "065e4f05fa57009b2cca97d7e19e699b6598f5df939d11bb05899faffb8f143d", "1ba182cf04ac2fc3c19cec994b718336f359a140130f0f2433383beaca27aa1d"), ("1a1db4f2451e9cc925ab164c1df8060627b3a40388aeb33dc08ae9de8b98794d", "0e10c9766b4cda84350749c4d2ae8829bdcd01f10454f816967b0bb28cd593c3", "1fdcddd37f1239187c2871c115b09bd851674f10baa3beeae006eb0ec1cddfd5", "273e0e5b81a34740513982afaadb811e27b92882aeccef29cf8cfe530a3b7f4f"), ("10b30d36d6d1bfe4325e69aad8e8a5ab3c414ca21d0f43de04dc0e85a23600f3", "0e2e64d7fd52e510b14529b3e37f887df42ffb4add59c914d67a3b590077f0d1", "103a7450efc50b59ecb55d6f0377beb2b3bd7a6b2622719ad906d87cd7ac9864", "1932b4a0e0090224be058e54c888ffbd5137c242115abaa94e842c58484abf3e"), ("10183a9ac0b08dceffebd4ac00ff69450ba8fe46c62b5ce18cab2ba1666822f1", "1c4e9f733d8e1af3ef6e980cf65b5d11ef4874a322b31686a84144640245779c", "119e08a39d5caed718fa20a1806e6d24dbf465bd061c3b3bfefac3955f70afae", "0007bc2de67d2e9d63b355df04ba0bef5107f54b00a38ee3f13adaed1d087389"), ("20d6f4757aecdb936eee92ad72bfdf799c2e00f9b2eeb9b29e39323636317e8a", "2d0107265f81a8966b4e856078a081016f38d8ed7803ffe2a96e5e2cb4961f1c", "11fd28b7af0395cd0501e816f62fdb5b0e7fa12a00b373b49d40132b2081f487", "1e291d6327f6fc9844088354aa6f324c1f676dfd3a1633fd45b3cca907ee3d50"), ("053d1e533bb83ebea94c9be499e2ec813f640bf48eedf28fc9c5fb85682244e8", "2b11afca857ea172c3f1a6c3391b0574532d8d2d02b10122cd503285b64f55a0", "1d47261aee52533903dca35af25305dc85d81af873cfc4d8217472cdc64a08be", "204f360548eedef1f823b8fe2cb51ea8a18350f581c078d30d9cc5e032cda590"), ("1bb1f53a4bf202c979681d7c73c8f4e0bf6ddb20526aacfd67277f0c3e2fdc99", "03d15e2622cb65bdd8ccff6237bffd2569929b824fe6593c95bb189b584e4554", "1308226613d15ae9456f202c2744e64972edcdaac9f8ded9f85b8b619a62ff4a", "1addcff40b901be563b39996c5959b7ce730e06873f2580c2235210759f32f91"), ("09e4d7093de62c98c45d4b35a5df63836fe8cc86b7b8aac21c308fc01ad513d5", "1a33b4cd1d09d7387a45b63aab011d56b31ce051a94c81df1a2b3a1cbbf857fe", "1e81b5107d4bdb4f01b4ef541c851fa05f69a7f564c5d36eac68f288cee327dc", "17f8919ed873370d133d32d4ea8a32ec34b85b45a357586ad31433c90bb97a75"), ("299b2212f5c4a86f6f98734e66262481aa75c192050c546897b87b4b232e9d33", "2389ed61fcb7143c02eeb43ba392ecd695e837a4f46133d47ffbfbda8037c8b8", "0703cc5c9c3b163326d70bec0a216accf7966a06a536085a502b1a0a76f3bbc5", "12a15ccc11b3d4a980280f2e479e7002e12e0de874644bd69c4026474dcf02f8"), ("1f7ecfa0da494e14bc3085b03cc67be9ffdeb76a691f1d635fd0bd3098db0984", "0245a3e1ffe2df70338dca455d5cf6467febc299c475da2b4174627f4c76a7af", "2ead4ef7f4be4bec2e76567132d9c4a4014164a0a0a76464b74800243ebe7e80", "195b5fdf76629e60a7a9e78d3f08291733d4ba7b626cb5260773541f9666b13d"), ("1544c7ef498147c478c3a5d1b535844e875de8f9d149c75ae6040d0b3af7bc83", "2c59c8bb5a49dc1ffd3182f67db3a3358d1b7aa105a457b66c2a50471a29d0df", "27a9312b05fabaf9d0e59da0d6cbcdc726bd95964edf572c771cf0e9de977471", "23bcb4cd90035aa5bb71ba92e59e12a00edbbfcee9b0a179cb2df6d6adce2cca"), ("29a9cbb31d5bb7a9a13f6836c80049df515fb01ad5a3ddd2c8670cc1d6c2d0bd", "066e01d0cf3f44066f37b753e1382963a1102a8312bb702422acdb8f1c487d4c", "27185380274c2688d233a15ef643a5272ce566e628c8aceca3aacc81d608f55d", "207929041d3033c83ce18cf70072f3af57257639dd74ef9e986918e63c7322ef"), ("0c06be7061cd93c764e6bd2ca1311a1bcf9838e0f6f8f7f67713ba19b2bdc90d", "02da653b9265e5658d3c60ecbadc0b26ef2199195e4d1d9a836c90d13574fbe6", "1e965ca543fc01d59368be158dd373c78baf65b65b6a1901edda7cde72494bfb", "2eeb14a3c24924e7b518ec9106a1fd82157733ad2627a1fa91bbf07a1744cbe5"), ("16a90fe2a7941b2eb73987d333e99fc699c6f382a1e4443d0cfe249e744c146b", "11b452c4875115ee44ba82e0cad0bd64bf3066ee98315c90017e4292b483bf14", "268de1803ac73c3d3eb474bd4ce2df4320ca3688e5b0c1c2b87302f38b236eca", "20389e02c6b48a7975c7ed97466f48ef2916c161458c3e9ce26732442dab10b5"), ("2b0310ec853920c192fd35ffc032a234a4876feb8ee55850cf4d906aeb2a177c", "0d9865f70a6214ea9d56f2eb736e335df5ef4cb2af217735476fb782202009b5", "2fc91225bf017a58b0be6268385951d1ac3a1f2134107a1d24e49cbf72299179", "16aca40b0d188c0d5c48539c113f1caf07162efdc550269aaf6ac54fc69e8801"), ("28bca6ed4326b9d676fa3165c3d7fd8920e28521de4cfa4b974cb99982dd125f", "2e9d1f6120e840bbd4b2819fd04e84969bb352270c12061a0646cdcf1c6cd18c", "097b628000a8599081466d13a70aa8d5f1b5f1144eb64070f11503defd1dd7f9", "18fd03d5c47de2d8365fa91cf52bc0345ca539d10cd9750740a42849962d2f3e"), ("2a09ff445fdac743c395ecdfdfd27169302c80cb12d7a0d32708e8380e6ce04a", "16dca85a01122b080056008c757ee4489d2384ed60802bd376f994e7eae30cb1", "2c72022cbf6dabe2c22492577d1500d524bfb85d92877cc1987208a53ec9fc6b", "235a41362ccd860855a5a6dc19ec5ff379a249e261a2515eeb2b07e243fc2d6e"), ("229331f189d50f3e0bc0800b063676790a26083bd636d8d44f1a6bf42025f376", "15f8bc07974ff9a8d132d71870ed755658b7be56dd459efda82352361d2832bc", "0b025f51f447c73f98f3683f470687a1b25975b732066e873549e2eb6bdd3be2", "092d2060ce31e09f74361391ef3e80fdce9479f22f079d2942d68c31dc7ab4d2"), ("1e921dd8820ba4f0adb5a9358573d7f6cbe20bf6f01e1b6d81a0bd8bff348005", "0f4e5dad31773f927b28924a1d8fbefdc9116022637d7b7164e0aec74b110669", "25ac6f857dedcdbac1f1f5fc137abd53ad3e6cc3efdeb41d25c8cb084fc9c95a", "0671c6d0e829f338c54dc10102693055efe36cb352e9703f6c063666e4449eaa"), ("0500ba5949f96378f052b56b3e166bf85162bb439f9c2fd08655b20289baa7ef", "09b4f08cfb2c1faa1df045e1806337a45d2e34a4ed54693343ebe6754369626d", "1bd32dc09b21bfce9f42d7672c7d0bdd89e8a6055d586eb476917f0dd9ebf05d", "1ab7564f492fff66a7f0a83506a8f5385892d402b36dfe3c4644608363adc585"), ("1f7f54b29945340c350d00f371d70bb00566a70cb5325d810aa0ff3de40c8fa8", "0ec35dc6d0d8788cdb94c22f35236f5e1d8e6d5d06ecfb34d52b9a8017b883b1", "2859b78c2ae629ba8cd9016862d1df4e207ec4eb84cc0a61ffe0eb22b82d3978", "2f66d460119f492cfccd0b6f5568056689ff5ebf3ac67e0b148ff31541d80cf5"), ("1f3891f49de93072882d35f0a6534c200ebdc48d776d6f52b37b3ac1e24b5960", "2806ef187d5ea1b51614170836518f2433aa79d20658375bdc877b904cfd96c2", "028c885f72bdf3c148f8b7d63de073f24f9c4d4e44bbb0855f09b7df4ad616df", "27809d584ff97211b0930e4ab837551dfe87e8db98904aaf41ddfa4d84fe8c98"), ("1b0028c71cace01bf13fc458f71e1c7f0edbf86f1da6c8b00bd1105298ac81ca", "1c492c5d80b0a182266176698686fad41d4ee0115f0cc7c072d33488f7e322ea", "122f0d3e4e0dfc2a51e6d75f1a96c3ad5c88a2b9ed2be776372857a02eddd0cc", "1857cc04ee4027fec1ebaef5f79a200c9ecde25e80ad0f7853b4d3b57a0a59ca"), ("049acfab1cfa6fdc76a3e6da5ddb6b0f62bff94216550136e2d7fb231e24ef1f", "24f4d85088368730b9e6027947a0d89ab449d069f3978d3f184a355bbe6d65d5", "1d61ce9dafdf90074fd06faada2658c644c90833b07f7a4a7e1a42d8bdba992d", "18c838f94de2983ed989942381b5263986cb501b2bb47a22f35638bdb17ae50c"), ("0c0e5bee6da04c4b364f690689a605b20eaa664b6fd28a06d77f958aa75795c7", "2d0edfc935a8a18b957b913b880a6bb99045fc307801dc68723a3e080cc83a89", "2faec9ad3c15245861c1fd0a265a950bf9eb462862d4656c71d4c75684c71b58", "1723e23e26b1f437ac3203fe14a91393f88150ce5082fa923fecb094301404ac"), ("18f3fa31b6b4a7369050ad6bbd9d850b69f3c923d201a7389c496b544318596e", "06dbe765aa75c3da5c6d2f3d2b80387a5fe4014f70d6b73916afa1a3db6ea41c", "04bbba7b619d1ce11cec1a9513ce026705e5e2fc288b4ffa5fae395cc1408e4b", "01391b5ee2812c388862682e44491e3bcf5a9a3e506d627ca2606c80b271e863"), ("221c040d7e661d0b028a7fb0f329ea34b7e0e3f3abf0fc5c3bee801057cadaa5", "2c23ca6d1af312289e7b2ad0dfbcc371bea58e5c566cf6e1408314b5977e83d7", "143dfc9245b5daeb9525e257a8a130f21d6b6ba05abd08a4448a5e0c5dbf53d5", "12089d42f96c36926bf3b3d7c8e7229cb9897d9fd6159b88422fb591d04e95fd"), ("15bf9179447d47b94caad0b34f2aa566f331669fe10b4a36f50d1850f33de73e", "0f0fa7a8f9e10f64fbca481a072c79f5963ac7c8cb667dc75b4f4eb9de592ce1", "0b33826c79b0289dd25eef64d0425a94efa2f14a61f5e361ce2f90c8ff3dd6c9", "05d5a2f9b38cc319f290fc73b7c0441a24b38326eaf90083f4b858fbce017445"), ("1dc623484a940e8f9c46e13739e0cbd48cf5590c1a1fe19d1684dab857225af7", "1ed28c6988081df1b43f9d92a0226ca431d154d54480dac934dbab3d72a422a4", "26074900e49344f2ff9dec4dd01998254753b26b6b5032e978376b41ce5f09cb", "2329cc67801f022edd82356956afc5fca495b441aa19108cc6c0fce39fa5b4fc"), ("1b3c81a63e9d83c7a063b25ce440764c90fb5740897f9bff3ad03b453431d575", "1f4bb21007cdf38e35ad92ff4f30bb151f6dfc67e63e224401d7b2e244f865a9", "12a6afe683e86df70a9c0747275878f28e8a5f19871c91680b8de0f18cda839b", "26960c5c60cb175733fc9e04b9e3569fbc3658e2ddf43e64d246221854750ecf"), ("2d9ef0ff492189a299eb64cd093c3b2f33a5e5e3748c2478873e4498ca54a309", "1afe6550f09a7abeaf8ff0af279aeaed7b11634980f5e9a289ff9d4772da7e48", "29fc1855a0b582aa36a0680f02256b3ba516d9e2d47ef5c29f8f2ec5de7d85e1", "177b70e5b6c8aaa1441cb8fe1de011a6314a643b6a7e35a4cbc65b05aba99dc2"), ("06896c1232ea1fc7e639cefbd05d09310601cf522c55023d1862654d65d6784b", "122281538676a1f97840d62804f7845fed261e0725001ac4ec04831d8e27b2b4", "28433593829af9718495143d8e17c967dd86e27e698a7c55565ece99daa9e4d5", "1a1467db11c696d35407627d2b4ea56465464a3fa92408537c794612da49b715"), ("0d943b16e677189ef91cce47206133b17e6cb0918bd18790579ea091f10a7f11", "23224b590e10a0c2651717667d90c10923d5bf16ac1c1ba78ed76a4235a0f9d4", "0e7b311e93f18e40234d585d84e914900e1f03caa949cfc2b2ac80c19bba3966", "094b788ee89307a42171d14265ea52d65574f755b870429f719df8c9a8512568"), ("04dfb970060454f35655298dd60a3233a530565ae186b1f26dca1ad035386774", "1e1a477fd3d2f9d1d2e517844d33c39a24657fd5159a7f45ba6b763756e0a22a", "2642dc8656f79d6b2729a001137a7fc424f27adc49641d57776216e812eb94d5", "0e73872169d8001b9adcdfeb6672c2c8e327d4045d82920c28bbdbc200f03906"), ("2dd3e961f97877e68e3d859cde49eab1fd4f38bfed656322a5680ee9e3694789", "2603bfb78970b7d7b4301b5c81e5dd4d815fad7c37ea5b0dbda4f71e5ab33766", "0e58a814aba1de629ea9fd570e0ef8d943d0fc9ab02233a06cf92aea3b02a0bd", "272431960fa582293086eeefcd4b1cf4393afab8db21587f0e4be12153c2afb4"), ("0354004a2e0ae513fb4c2bfc97e58b1bd2a7cc626dbf4b13e7e36e4ed4fbe137", "1ca28dbf31d4f9d20b5a8cb1d31c5d907da1ec343d1f44bfd7b98709b7d88666", "2538797a800bfb22637ed9414da5270e5484843d6a7e024b5982d55557632e02", "012bb6716bbe0cfb023e7140c456c969d4675cde7c66d183826deba387b429e4"), ("165f372aae14c0006632add6a60bf474f3bbbcdee0c31861dd0eabaa9e0ed334", "1b65e8e17bb6bbd3b27f4168433459976020361dfe188b2a71bf0e1e6fc0f590", "1a513c195a805f7f42c4c11000d9cb744481b76b6cdbdb4c7042baeee3ffb645", "0b8194a0608e0d388b38797b16a1938e1b7f93d869c68ec86d3b66c6b1fb7d0b"), ("2790c6be6129ebbc0aef698c25c2aff9fdf4e5379ac04b4ee148bc855333c547", "0f8625166ca0fbdbd3e7ec7072f166081345ebbbe179e1b0a3938bc68d9c5759", "29b6d0f661ef46e707f871ea1522047c0dc431ac74c17c577cf5bee62aca07c4", "173596603a49f9d10b44a73216a91dbd03594561e34613aacbe16583800c3334"), ("107e590e936808f669ebb2fff2d954616c49feb9de1ee4e42bf258f65909f325", "0aa842c46163d7c7a1e39be6313ea8bcb147524f3e060b0d3f9987d9af94dffd", "0ec738bb793a9bdfa716ba026b2d35e84fa0ffc15432f732bef20ebb294f2dee", "2776a7e966d22da86c404a6aa5c9fb6bad674b123b18aa732ee767256160ea18"), ("1f9ddb0b7844b748e36e806c67b7913c641d5bec9233ad0308d0063a95806e3d", "23a5276fba2688406039b817324894ccf1bd058b23365f42dc81a4099843e5f3", "19e8b9f94ec8c14470cc2d111877a54432ba0eb6b064b7ec189441c62aceabbb", "0cb55403253dafc2ba0fe5b50e98fe4256ee099422e876ea6f661f224717f8c8"), ("11116dbfaae99710545e1f29e658958e06a545a10a52893b6c06d2c8db2b7d28", "1fd7bf2e4f0470d3e57eda19acfb0a1571b6d1c0c97fd34bcf308eb8c7470003", "213e471093263dc15de8c83bd0d1917bd51e27ce87de16fe2140be7e0d9225ef", "2332b216ebd9431260746aac760c9e0cf2cb748797a0b7b5861f3dd24c88dba0"), ("095a65b5aa41f01af1ec8f90094e98a710f656152ea7ad19cfd2bda4a89609d2", "30498ba89fa7ac85e459ba73f1a95f4f518ce1f4d043908ed588d54283d2e0d7", "2436c646ebd9d8f51e762577cc4fd6249079084b862651febc4a2c2a3f0c968b", "28e9a1a1faf20f7c7e1483c5c0bf6f7fa3be63c2d0b4b6927377f128b9cf38a5"), ("11b77225fa205e80671f317c48d286913c89bf3158f58394eaf087c78a41cb71", "0fe95f4fb9383393fa0666424415a38300f7b4caaee44900d6cc76dc4b470e46", "0ae59e5b8b6414ce619908ac8b3064b9ba2e28665df6fd8d380ee9a0f28d0e12", "11a6c788d0c8ca7df459574345bbc8d0fb3c90b9907b9499720f999d681b65e1"), ("03375f89de12fb0678e5641d64f35a5699350057f5362c2f123b5990fb497bff", "0cec1d202307683707fd71fc3dbdbef052e652ccf0d9486113e4a8e8f92a546a", "226cf9e8f80b9bfcdc1037f64618bdf81e6640f0369915017c6eb5891eb8f730", "16d5e00482d93d4db0e41056885bae2336ab110f5c174c2d3d731c557534360e"), ("2e2259ea67162534de90191c5aa6fa250d35f85cfe242b136d9e40e79fdb59f7", "0e9d7dff6640c406b910c02a4da5977eaeadc5526bb95bb431a22f8008672a43", "23ac76bb2255ddeb8ba6245cabeff7889dba5c45dfc1f0d98dc420b8269e435c", "1b57e1dcd25b719433c5ca860a58b321cf9019aa96b64cb5e4809b60d84851fe"), ("19e319113a089c225a56e7684a62c609b40e48ccc0ba34975d1974078c441319", "06a8dd806ee5f4f5138f076aabcb88cfdc39b53870dfbc17094065f2e5fe6330", "2ee15b4bdfbfdb658b46b2a4917567e3db0d14e340e5f94b02c5c9d9ed3836da", "0b63603f3f29a3f4f19a64f8f6520d540022e3b437ef446f2fd86686bc57af40"), ("097673dbd8df9339486bdee9b5878ddbf517d910a8e860fdd8631efc20c69eae", "0264c7e8973538249ddbffb58aec8d2ee765419bc4e489071156c197974c6380", "13108ac9e06e338570fb65071776c8f3f516b416dfc055cdffd0d1fde9bd4cf4", "1f5e6aab69a3c4d5b8db48ace179d8f5addd322412c0dff3ede63ee5047be9ba"), ("23db6237ae9ac69a379bc8e9cea498a3659c37fc0fcf3d9e5c91f368d3bbe3ff", "04c9abba91e9abb07e1f557b3c300652d4eaca2886aaac50854d4756f7f51a18", "0d6978c3f0585726ef3a4a00fd6327279a79553999241e85b29ab4be2421d8f1", "232da4c24ec4f70e876a9d864a8255984bc5ea184ed07460af7af690e0b42906"), ("0d249ce1e1ce62b32253f65b722d2759a1f40b9c64c0643d9a65dd05dbec3a4d", "117f33eaa3ec95281b068ecb1b366fd65c7fd08d9163d814a85efb55b7a6f176", "0d463972293ec2bfc4bdc4f5f24ae9ab4786465fa6ff52ce999ced3e91679e48", "02ca0c879ee10f29161b9e69844bfa27bf3c28b935374452aa70d948d5b0608a"), ("2fc5fe4a75f38a1165791bd3beb3501f94106ef87abc795b3388b6ddac6ef3c0", "171632589eb1a221c98dc57de7c9e5155066d90ee0c18ba6632511b96a1f05ac", "09623e07c9538bb66cf4ec16b0a26e3bc71f39a0cda5c2a919936da71cfb2afa", "04a189b7acbd19d0827492286fa50efcc98410d47a96f3a97b8a3d603b411a6f"), ("1d2ac3a7a3ad7593815f977127ff11971f64ab643e4210711889edfbf7ef73b1", "2045d3bdabc34eb812af11305924acb64b5b6570f8edc056091ad22f3779fb3b", "00a487d74a1fef9639e416f1c6ec2ffec654d5c642a3a533e44fc2fc3983b13f", "1cb1acfec6ba8df0c9278ccb6e19b99f5b4b156c8790dd8f8c4abfca04a3a730"), ("158c882ae20215f715ca64b441be9a5b02a690ddece31135cf41abd105075a56", "0be9207c22850a3b5a00b44636eb6308d3567e61e4e2ff5737f56ee591fea0b2", "1e84ff3059406322543dbb136c3223c17e198f7413c7d548d44360aad306ae08", "2554fc4f78a148e06bb9b09ece51e439a9170cf8996ed4963b3f342027117100"), ("1411fab0bde7f26875657ee7690d4be6c6f5733fa8f3c88a8da329a3ce135a08", "11954fb1bee10b5ffb2f2ba166ff65cb1f6c8f9362c6ebc9362425429a2f56b0", "273eab0780069f82b00827b49ce098a585b40196b862911a7643dfe4df88960b", "159d1c08a61437d3680c20ceb7b42cad4eb25ba345c756fd3cb9222dff5287d0"), ("2860d7359d5dc943067e5ebc3d7f750ac2b2e5d9dad0aeaee515e12ba1f96820", "28f034781be6074113ecd3cc04827f414585531d43f2a0db0d91bc2b80b29288", "0de136159eb00b46d0db0e927a76ddfa9034a73f05e08bb65e028c2e90a342a9", "227a8f7bc5d6cf9bbdca1a60455d5f04232119839ca430dccb2586b93d0220ca"), ("27ad330b3b8e50bdd842a04e368a43f5a2d0ed839a0ee43dfa46e36da6a9e3a7", "0ec37c616472ae1b96c554130839eaea93252dd435d916b069f97903fe9ffa12", "1e0a02f9278a30648dc16822eccf48d5b09753a2dd81050adeafe61c26f3ad64", "01b45c8618b855450be042b21dcd28638bda79e42b11b8d817fdbff6ab3228e2"), ("1a13ab072cdd27fcde28ed11a38e327aecabbe16cdb6a98ce472db3f97be1892", "09ae5cb5d6aad24758f71a1086976ea021008915ace44dfd69e30f90934739b8", "244bee0cb5097dc0c98fdc722668f81a67e832d2854e40e8e1db6017d623d8d9", "0185e54deff8e6d48ce88db8667f91436b42c2defe6792a73fb2eae270a17ec1"), ("26fdab12b2252796cff35f53e7e51eafedfffda397273fe94c50e0f4ed1ef149", "2517bd9630292a25b07fe702c923d9361d62e1a4250d7c55e23cd21f6dccf540", "1d47a5ebe16d46de20867650fb56d0de4c4f658b8d5ce2a2ae85e1490e9af3da", "0d93e0811fd679ebe7cb9a9f50406ee36447143db0cdc21859141d21e854de6c"), ("092f247f1e9d36f95f61c933159ec0f2df88f42ad838fd763747b2e29cf5e8dd", "1a0161c6eb54105f09cbb3bccd240a291cd87a0e4bb2a7794c26ec4f86cc4ba1", "2ee0760c7c66afc8687cfc8917dc64771c6b8cb6e515f5385874dfb04e51986c", "116b3923599af433d3a2a381fa504a0c304ef8fae733165bcbfedab8845e3561"), ("237593927e0c2c09126e8546280a0c58f65a79b5d061e875e1d4872476445f0d", "213e291b2fa998e0051446cff9488a53562a3372f32b28dac737d1010409c886", "07de22481917a88e733038ecc954fc3004b00e08c8106879b94e7b8e544567d7", "1f56b9fb665041c747f7a07886d2a98d3b50033a3f79d56210a17b065de4e458"), ("07f5b00e0cbe653b0dc2cb93ae482044c8bad4a9a1f72ada3f78bb5a613d0091", "1245d04e10f2aa645dc3ad4a161fee099a5c663fdae458d5b43c178d8b514f77", "097e854348109b9f87b6536576164ec1a841ba51c30b1ed5231c3bb6b442b721", "25bc84d63f0b3fab7f07706c6b2738e8453b8ce1bf37246db1eb9163118ed7c4"), ("1cd0d0664f07b8dfda78d88fb63ac0512c90e50f2bdf2d8736b482984dab32b4", "19cc3b8de5228e29f51edc64c87315f0a39e209718f676ddc02770fa88887714", "22970412d0aa0403ff1cb2a48e27eafaed1c25f509eafd96c66aea1cc545b4bd", "23efa99d002831e523a4cc6e1db3082c7877521a8aaef64f89cb9a9613fc4107"), ("1532bac90ce44dbb36d5d06a6b8ef4e0483b53703a6f8e76542a4d2f84badf9e", "051466d9ebf13140d5d096c6bed411351caceb16d49ad6e4e1e525707e24ffe1", "06c63dea08c7fadb72929cb487a4e9f6765480fcb809e7c65a162ad8c38d99cf", "2d6c03715fb7fcad208e7933a0d56f9fa685a93b9244b2c29b88e5bb702f7a2d"), ("2b1ced44fbbf09e0444adffd8cc33780d8c0f87aec2889a6f9147937f11a3e9b", "2096640f2f57b80fd1804b9e0ab59a2ab33bb0335ec60076ae8eb4c0672ab9a7", "2e130b4772fa7d4c835c04364e35c3ef0ce57e5bc5ce643341ea7e5f90d2fd69", "032ff1b8f0449762371ed473b11671cd834d2608445c1ee4ea3319516665bf9e"), ("13f47ece1dee1c05b565704952422775470f9f4868b43a324106f4b480eea6f7", "0b291f4c5283318296ee5db3736441236578904df76ba7a4560bcc7530600109", "19e55424c9195ef9406d9faccad4f95b4af9a525f7e9263bba723e68b3725171", "2517fe796a9fb3cbc59f237d81585ff7c365fb774782516ab8175648f5e08531"), ("1f90cec2626c79c860d3a9b04885322cfd0356854e41d07cba45398d9859c7f7", "287db2750a612220cb2e6d6b39c5c465ccfa2e85867ede38878675b71714a2e8", "153ff15b4be10ce9979e184b15392084ec943454676c29791c190468231d13d9", "13d9e2b2b7d66dbc2216f3a04c357006c0a5816baf66167d31844752b72ea298"), ("24658cff352d6cb187059c56c2aada889a0c01af9a1d50b5644257666521f2c8", "289725ab44c3da71e6f13941ed30e71f7c2fecd6480616b9fbca4cd410551f07", "300ff7a2034e0f121092334c461def9a0c9b886f5095e406b14bdd42c9597f72", "29f1dca9a048f45ba79e3cf0a70932ef225f51316c98b8dfac1dec4f820573c5"), ("17027713fbfd6c4d2db8977afb8f89144f284031f49ef70d4f464d1c26ac8506", "2070eadd847738435ff45214d0b4e3334e87de3200de9f214f369d41a964067f", "25950e6a34e43a7d2f4631a45dfc940a67c02d5dadb4d70b0b8b5b4a8c863653", "08598756d23cc2893cfcbb38cdeb64b1140c5e62e2d73489dab6805d1553c2b0"), ("11927bb3c002e39025e1b7d0bcfaa30e411b4f67fa2a026c0410ab3d504396aa", "202b4806a58fa700d68e9c499e3fecca7c79b0297ea56b6993e1faed97d400e3", "0aa1671f9f9e9ed971d9073d72ade9ecd7911306c866291172f540d5e11bc665", "00d624b1fad177e90b1617a3b7512dce751553674fc44fca20acb48bae678b83"), ("173e0198fe25b6248c29e5ac717a6f52e35fc34bc2f556c9dab468ef6912fc02", "26eb57022e15aefe41bafbc72e352209f13eb988d55a51d2269727feeeb86959", "099484f524e799994b6d287467e8f8859717771cd300253eb4bf8bc05dcbf4b5", "24889798d855521d98567527e155813b86a94f3f9e94171d9bf53b2142e620c4"), ("01b3a2c0eb335197325ff7f9935f714b6557d123980021d7e8ab3b9e0feb87c1", "05ae3d298b02c5860cf0a0122070c7e13f990f7d80d741606ded5c93130eb478", "12863b50c206d02288f74e295d344ea9ccf1e8b52c80e76b7e0b9430ce8e5aec", "0cbf922d264b3b4defc55306e6f475155e871d7642b99ffab398dfa285b4af60"), ("0caa85f2d27cbd00c368cdbd0d3324d5639a189f8ea9bbcebbc7cbb3013833f1", "0a79e78473a4386228d5da2ee990f23c5cff7c1829d54d27c296aa2bdab03452", "2a827619a7ac9c12f472fdfb3e7888174d4af1d399488f693452b5eee2b08365", "2bc91237d5585899326fc1fd359ea09384ad15e64c75edf87a3a1d3ec3bdba6e"), ("053f04e5438519d9e1bb4fa56f2e5e1ff348de9c010852fc24c58559694461ed", "17c512c7a7572b3b8902c352389f496b2ee0f52dba7e24ed7cc7c8e2da3d5eab", "00d194e0cc3e63638bb23c4d3ff4b3c4bd03a67dfc786514ece57354e800b2d1", "0971154907d64af37eb4641a7dd46f0be99269108796941a3d57c9b903fb08c1"), ("13e643cb6a60e4a316eea894e61654b6eebf2d1412b371a2e84d5aa3dbe482c8", "0459e2c042f78d8756077b8b2a9c559cf033d28b1cd477ce47c8df5fc15f03bd", "0cc6ca7aeff6abdab5b9269593aa70e2b15b78f23e75657903d317e43cb4860a", "1ff895e37533817212b4f55efd811bbabaaaa37f63ed43644e778bfcb4a78c04"), ("24d561d4794eef1f06f3a0247067f39e52f48d6a8a6df78fa63fe22b834b6447", "1ba645ae4b0fc34a58c6812118d6377fcd92c043267806dd9c1cab2d2240523d", "1afe89d1c2dd795813334df863c78d45033d29710eaeae720560d375cc6f3a55", "2190e74d4e5e87ba5fc04bbf363cb2c2c5dae8cca46cc7b19475e9f530d0bcb6"), ("043d32e5f9c99c347eb3fb7bcc47d4a3340a43201c1b1b1bca67063d29cb1514", "193a7fa4902d7c992050a2dee37d4b3efba40857395a2f93f099c6b975b8169b", "2720564facc4517aad4ee4855e67a697d013087886473846a52bf2f974d32af0", "182d111b6ff55e6fe9d42f63bc1cc7f6d30a35d64e9389c6591fbb1c590622bb"), ("1b8818ba5e77c0cfb5ba7a7316af16575452af86ee3f95715ca0cf070b2f5f09", "2874f6b155700d31cd94dd2b5d89081abf33b68c9152a62b37dce7f6ada2ebce", "20c2a5a5d77d3229d1cc22e858c850c7d1498f869b0f27a72a989bec736761be", "2954d82ed4f1d40839a8cd9bb3358fda03dafaa01e5621c4eff542b56dca005c"), ("0445c226af6761b67dfb9546ecfc90dc664faeb1ed1094e799a7d1e4b529240e", "1568fa8d3b1e1b0d9d18012c4b9e484871eb44dd93ef9994eb3dca2af99b42f8", "1b35379a20842e4f37d5c33ba3944e30c16650c3d184f3d4b22845d4b2657172", "15d8cdd86c963c5f81dc0245d57f3ad315fde0f3e4ab86e840b18597159e4379"), ("09cbb13a13f10a12e18dccb62f839263485db6917290a9675461856587606139", "002fdbd21efaa446ccde5198daa187a8700d767f59feca8142278d8acb44ab6f", "2129b1606ca074162cc415f00b06c48f01e8dac1a57b89c3d73a227c85670d78", "0ffe77f13daaf6cc847819bf02e72b6cf42305d1a0e04b0505a712fe2cdcf59d"), ("2235f1f265b83df7b0fa1c7fe461c80be01e64c16766e287ea72dc07a84bdcc3", "1c90be7c67bf498a667bcaa1248f8e8463da66c1a6003e8c5ae1326084971f18", "2f257a56e38e9f19c2bc7029e2afa39496b3e1aa208e3237d97988a262eff0c0", "07732c76bde5ec048f3371c1bb074ff50c0b030b74619278e14cf7bbdf0f481f"), ("2db9b2b77ad68425e7cebdbf91b9fce4f9570f952bc54139054dd7f66427f17b", "09f217844956abcefe8e62a58117bc9e84bd3fae47effc8e5578e78e211913c6", "2a4341f514d1a9a2aae7cc2627816617741e045b6d77e84091080b7aa6572c53", "22ac870a67283b0315bfbc8c60c53f0b244acef9121323abc7df4e249d7e9b97"), ("29f6d4d8b162196e001edb93afa26ab19117134f0cbdc5973739d33b4be7ad02", "0a11ec091efb374aee3475f47aec3f9c06b0051cb97003151da16ed87ac8d28e", "1de5bad052f57af1b900d5f21580efa34b83990b1c367fc6361d8dd7a01d5501", "077a3895657749b402001170726e3a7dfdb1e3b32f06fa1c1d290a657fc05451"), ("2df81a573a19a014e1de3982057531ae60920272678abf978866f8c8281e1fd6", "0d7326f701357ad207d8a1660f3a58e984ea578b3839108c038a982ae93225fc", "27ba41398ae5428f06cc3d9498df50b5391914b4a975ea88e4957142553634d1", "053b8737f06ea5b4f9285e9f57b7248989f2abcbf57eb6801a86f0b984a6e6ee"), ("11681645eb97746ea5a4739ea75c134c06fb22f5a7b6f225ad607401f59a04c3", "0c3341b256008e32f177572c9fdb3f3560fc901b840b5d6a997876312b9df841", "1958c2d8c64694678087855b6e5d5c456cfcfb1daa1335453c6a526b555500bc", "21ebc599e640d34819e86ce03e8618e8c1442daa1ffb2601f11f9d5680d4e430"), ("2e9503b024d867b06ec02f0daada2ea90f384b7cf180eb3ef98d8ea5314b38b8", "17719781c15ea84dbecc86f9ed4cf8b616d2c81f9389d51d24d6e3bafcfe235e", "10bf63af2dd0b864d5456a90b8e7f03309af5a0a6e28909759bea1ce66049669", "282b3aecc840910c25d2d14c20c1b779091a22b6dec56e3c645f35347b400b4c"), ("16d324c8bda68d5fc6cf8bf0347eedeb6192c9419e76b8971a27818b0c5ba3c0", "1024f38c35ded1170aac2ffbe1293737f9bcf6a96b47bac0f29b9fd467c9c4d6", "1116a49d7e50f1eaae387969a3d01123193bf2a0284eaa38dd60f69141411ef0", "2559c8bc23a0cfdadbe9e1f966591f6d3f69dac4e856eb68eeafd09181a2d1b4"), ("1401b873b914751d6a943db4818ff248c40e72fc2e8121ae92a5311fd5935e1d", "1b4cfb08c991621d04f9ecc75e752134483eac5762cd739ea43d3bb1e35f8fff", "1ea7a1e6bd96d6dabfe061085f20513cd4745eb1613faef9b89d69dc861fae57", "1a65952748ebe9e9c90d490fd33d01ed8e7a32027825182c68ebae3c03db58f6"), ("24a8a5f732d73b0d4fc8f2fb9f0838b74c4cb8c2fd3ed10d32459c4ac4d147cb", "1a9acc14cef69899150cf9706886e3d6001f508e7a57f57f27dda3ffb439d65b", "2237d34b1f82f5e7672d3080b028ba360b2fb5a3b8c24911c1a20a963497a37e", "10e4ffd537b88afdad3e7a202c0067debfd28f1fb4cbed8b6fea7341d6cd10ee"), ("0252f74e65c307a98e9d1f59316b99233df1dec7c8aadca052f7d4e7b9ca9d26", "2f923799fa21c9f10d630ac37ed74899881b3286fb84b8ea93db40c2cbc68a61", "04ba3ac3d609f23425c5a9009ef017dbc67810fe72843afd90537e5269409541", "058ca3c20fed7b6a3517b9120b0abd4df4fdc8e618e587f5d35164c515774e69"), ("017292befe5aa9b3f3555870b2864b8b5ea7f50ce45a14ceafe2da7d94b3e5b5", "22dbe33f7c1c6c687987eb250335cfb86b456f9981864e9f75016dbf6751f4b7", "19106edda65b28b1a0118c1d8cfbf510cf8a31aa69a77eb8e499b88f50a5bf95", "1a35af13db73c6e99aea0d7379fd466c7183012c69a88c7934a87d2e0e8cda2a"), ("23a31de760771c153c3257bd5a4bfae708f1525c01a5427ea6809e43c313fe91", "1bfdfa7939f735d387361d7b27481a99e0d3e72fbed04832b013328d5d7a0943", "216c9140565a79e752c7e2ab4c108a999de7404e698f8e616fb35a8c79feb491", "02a3de78ae79aa08f7732e4bd3bde6eec3bb398f7eb5e287a5e32802780f498e"), ("10fb3991d43f1e2035a0206e67ddd82eda91e016a6228e178632c774d425e42d", "2f561b9dcec32605f6547accb48e86a5f42e8241b5b8078fce5fa9095dd76207", "1862af8d167759e64c7a9cf1e741fcba8a6b2d79774efc9ec7a4ed8579de61ad", "0a6ba1f286206550981f3a217277999dbc0d745de6d54a1ce3593649c2d89e38"), ("29dc8f2777e491f7d82826f756a7f7bfcc7d6ac1e21f6940abff81fc92e69fce", "26b4aa85146814472310f15e2162bccbabf04f3fdb90d4f680012952635ffc49", "07f4fe162120e2f09e918c72b878dffe83796e2c264f2f37d20d3790a2f1944d", "03b78c323819736bd2c403403f55aed894085cc4eb533d2dfa170bcb67e33575"), ("248b64bc022a77ccb9dc2fe8ecc315757c53dd5e7ef18e7bcbbcfffe3f59d8a4", "2ac6a2f266ada43b227b07e4eba05a18b748d6f9409b8a36935330f2975b7b44", "22251162ab5330385835e63e6fba469123a170a42ce357b367119f12fc3b2efb", "12852923c1dc6288b03b4ef302ba94fb10888365cf27bf14a129d780bf0c3f46"), ("01d03646ed030f0131b2996f6c634f12f475c447b74512cc3d6e3510d32cf69d", "2f7f65378b13503c4434b139b0003c9c4754c2d55c22c456a73e563ef17ced42", "14aac535be1aad4e1c64d38de71835a32739360050c0307d6f9419a12ebc0cd1", "0cef76912da33f79b962e6f236186127308814ef4b178f6a979c30580599a940"), ("0840a6e1294e723e0b66b54e423d3de673dfe27619627b8a6bb4bf9709b49a73", "20e33c54357e831179d8b8e2c3d9aabbc2f01f05838cc8633d7726f1e6205d17", "2b38c568536ede2d0d6e70fbc6ec50e37172b126d46e42876b732d16b0b0f5a9", "1c0fd43150f67a977a488cd95ecec1aad61568ff8769a9f768454d69d3d097fc"), ("1101a38b4217374a98ff9562ee1b77269052b3dcde3d574a3daa8143bf7ff4af", "2fed1b9bc8c65a09f45f3141ca379a8ff4814d5d08db3769fd0ed781bcfd4cce", "10724c0c6732337a905b1715cb193e6935042cd93c68bf0a7a8fdf2c19d915c6", "067ad85e41a715f246fd5ecb0b99ecc371bc22bfaa5034fc0b2056cdd17dc092"), ("1a6129de7ba01744d030ca0d70d1b2d796dc717a7aac81809617768b7b0f17a8", "2e4ae39d5807d0fa3de772760a326f01d3829a002823bc395e0ad62e2860c1aa", "2a2998ad2ff69788c039bc4ac47749b892b23ab58673827f1aa295757720c273", "0cd8a22ab4b4551ca642de0dfcbe2ce05be98c285c3996fac85f2f74eb3876c0"), ("1ee49060763546c525d59e3ebb6b826e1cd0b21350990436089af2cedef82691", "1c98df0e3e3da74dc1e382d65ef60592a8968177c9a5b51343d01d0a9b3de38b", "0a798799ff737c3644c56bbefccbf226ff1f61c479b82cc3cf20644db42427ac", "1380736126f9c462171622be4a365669ecf7f535dbedca49f28a1c9895d68f51"), ("00565645fede288622f30ca5a12a347b1fb6896519dc3d2acdfdc4fd0112261f", "1d8d71ba72952baafd463a0d2eeb225faa23d28a551f85cab30cc15ebe4c7ba2", "2da1a2d1a2e8e01b34a3b62e499183f3ba90019af0ce22387336dd6af576d651", "0b1bd20e140a6a34bd3aaeadcc94e933393b78d2acd4fe79e62117a48038d82b"), ("23054fa399ca9ca5dc9130a8559a29d28c899fa6e5971403d8183bb13f472e6e", "11c40d0bdac0fafdd214bee0b5769b00e03c0069abdf9bd23787f3d1d5104d4f", "13af2f83b0418797ae25e48a983af88ea9f1b936fd9200aa8bc679f11452dc7d", "2b6db430eb1f6ceed0a181415743077664478f387d2107cb6950041c52c1dfe7"), ("1f275a5804ff8fa2cc5c51f16b749b8f9a8b528a505ba178776d01038fcd6e2c", "2e00d7f5e00b0cbc2be2fafc35d670af5fec01bf86ff3907b562abb0f3d8d503", "151954c9965905bee33f408cc60c116a1551afe54782e743bb6f401519720da9", "012dcc14e1683626657ecc35b483a383dcb3fd9792b836702aa03ca004094bd9"), ("038f8d630c37d462c51e7ae52a96de6f49596790fca87c0b48fadafe8b4da716", "05803b735bad46e34021b12d4f8999c981d8fce170e0917cfe5fafabd66ff367", "2db478f22fc1a9777de1089be800e66d088973b1bbc09d451df266b444aec368", "266f63d645e6ce6648d6432d333afb58cc0fb78c42d1b653d49be3802337a99c"), ("20dbc3392c3b900dd57165823b4976f5d96e730c3dd12099063b64b3ba1bd917", "27a18df7595afa27ea1c9ab4c4486524f2ecd89d57e02cf073da526b7100d93f", "2f35ea2f030d79dabf51268c046634d262e96f90d87eadafb720e20ce20f167e", "126b2a58b56a01261cf85710abd73457f647dd9f63862dab41b1ebe420ba1fed"), ("2f71092e0c862dfc49059581485b0d65762ac60475f275c0aa5d8667d01eedd2", "18f9e5cccca520043e68437495f4e27c94782b6c82158d967c8aa04923d7917d", "0faeccbb26e10cccebe60f588550850b56052bbd5b45e68bceb6bde51ed62ae3", "0f5ec884b98d06807ec4142ed95c3cd80c91f4c9719724f55ea0378d7fbe1f44"), ("18a7506b48eb7e6aff84a333292f5849c549d97f6777a8ac02fe25df4cbc9778", "1340b1db0addc46870985ad1927a25320467f1b321e9839b2a78faac8c3af8bd", "0d7611785abdab4baa283a8cdea2c18f164e1de53b22e3ab748873c83d26ca5a", "0e69ad40ff829e77758a78d015252341e1c69b9dae994726600f69323bafb4ce"), ("2c65e408c7980b713fbb73124b035c6ccea34023028d22e9783c4d6392d81681", "10463e916219eb9b3c1662e03154032bd59217ac5705e19b27e2329b7dfd7202", "1ab3271742976778ee12903df044d86e872d625bd12a6b41858213991f1044a1", "2a49094b7ff8391760915d9085847f4af066b9ee64a04a5f70b4403f04400bb8"), ("0c06b555a38d225253be98589d1e4fb4134699099a9ca53b4abd8969acc7f74e", "021b10f69de80fb3b2247eaf76c2aaab3579c43ae6046716eb074e1e126096a1", "0d7433f716a0cca7cb2eb4b9029e3fdb1bcce2b3c0109f74515d94fd2da4746e", "2b8a61b052d9657999db2b532947316e0a32ee0ab301b713f7a75e09def618f5"), ("0100112ca978b790a36d37379aad81b050d27e1a55fc26dba3b7ad582de58ed6", "0b1f27f0ee73f6880d584bc579687edb6d2f8bf57301fd0fbde796884e9cb78b", "1ea1475bd9e43faf37796968ba4caa4c7ffabc2e10c22bdd2ba9967aa65cd3a3", "2b1792d6d11f2b4cc7a3350a7aaec49541b5524915e6d73278bb036c34f687fa"), ("06e4e09b82230a58e9b0cd23cc95fb73eeac84f765dacc27c2ea16145ea26dae", "15034f29acc46e16e2d0a53624fa546a38ce2aa949a6ae30e41384e3d42f5145", "071be4161583be19ef7210b7b2bc216e083d43940e4176fe390b65fde71c3d19", "0175323e65405bba32b5d59f8473e52b53c31f1a5fcf0033dea34fb5b49cbeb0"), ("13cd1e64bb724f51a69f37df735520977b7711df9ddd7094ee1c209fcae04c76", "27787e6b8ddb098240516cf1aea7f78df5568c160ec084263a3e4b75ef9ed40a", "21d68f5e75a131acc35621886fc262c79c9319402f41e45674f7375aa136087f", "0cdf4c349febeb18cf8a7fd3e4e35b591ce176ad9824b05c2645f9ea8c4a6072"), ("1ef635aca764c7ae85a9156e7545a4669812bc0b09ccc93295a284f1ad8dcf4f", "17619a0e547e5a1c20caa63d7e272470a201dbb4d184c4634cd0efdb1d163b77", "15532ad75d5124a2bb3c805844124d60c098132bdc6cd09b8618646770cb802b", "0e64d7ce96ff9671a187dd6f069421321089df9067286c30dfcb5bf82526eefc"), ("21b7da752255210fc4bc80e5f221fe6bbff1366564de2092dfe4358f29a85556", "082e7947b12ad1151b8b71073ea5d985418a74c4d263c141c78d0256c2a57793", "093ef1e170dd903366db9914e3d5ad1274f3fadc716d911a2a64857591fc8dc1", "1b8444d856f6743e65bd4989b6f113861c540c3e475890201ca62033414c7aee"), ("23706b2fd9646c47f98254d4d535b1d26a97abedf47624ead0dc5ce550e31b7e", "1ce3038bccecd09027bb2289f521fa91788600f152becaf6bbae25de5ca3be01", "2cc8ab2490b965c933097af2287620f8cfc6991cd4bcf55afbe52a535d2362c1", "2d87bb3f5cbc40df15822f74bd43c65e34df8fe5f1156e366d226e89f373d440"), ("158bc860fa523505d3d18b9ccf4a21657eacdf80c8bd17535260e2ffdce0f6ad", "12af1dbef9d1f99a7e2815c7fd39246c373339936df80cb5e2f302bf1748e91f", "22146c4f568dc326ce05c4dd4750c501b04d4fade8bd9b5d6e4b2596ee6d5f7f", "008f6df856fa13ba6c160feb3842520996bd9b81336bb96f164c262d4b0843fc"), ("142fb228b3881e2448af036061a6771fd29981534e45c2ef325b387116e66b2e", "1ec5bb625af68e87a45b19005e58253c31c0ac98f9074dab919a78938d6d9249", "1ce469176ce2c63b27b7be2d0ad986b2fa62b1d3f553f16f61bac53ac0ff9ce9", "166981d78c7f734529908b7a150fa9d34646566674b9d12917b88673df12c7de"), ("12e1cfade6c7b77de53030b85060932b817a3c811a2733aeb10dd655f946ded2", "00647d83548ba742935f82538ac6af4b55bdcec9bf20686e6df21227674462ad", "0a9c834eb3dbf69336073c2af2bfb73407ccfecbc45acdfca9c6805c296e5828", "1068b92483828ee641c1e55662a6dd59e7760f3ec0101239325a0f4c929cd8aa"), ("0a253e0044720b5407f7cc22106545e53aa6a2e4709523c7d524edf2491aaca2", "19cad407df8554041f943448e88c226f7a3dfa04047524736645315df64ed83f", "0734a040b097fc8f3ebd576e3c5d3c10070fd4db0acec9489238f4aa2dcde344", "1275459ce152e06ca2540affdd63d7f19de9225360e01c6c9ddd94a9277404b2"), ("0355cf80b1e39ff5525f11f60449abd2fd593e698333f57200545bba6581f303", "1aa36f57683cca88a7c9cf7559a3e9886494621a03138196958f03e37598ba5d", "0ef5e7a3aa0222c999fed374c0eefe47b4c71ad10891304fe39c69b5929675ce", "2ee0095dc5a9f45b2ad9c9d35e8d27523028ab098a084892e517f5e7d3d409ea"), ("10afe032a6e6b3c84885552ef984d938f609d87da0c14658580cb6db57aab960", "1286d1225416e14e7f18c810800e7766cfaafff9eaa1fe160ff37b97b5187139", "2f34ad4088397f4691edfcd365b7d02fc638c677ca88ed740ac7d082b39df125", "295c57bf5281777eb454f63aafb7ef5cad4223bf3ebb4b2f6ae552c38e8d0566"), ("27d65a5ae52b7d74c733f1d93436421ecf958c79f132d4960f94b3f847a3cdc0", "190c0caf77eb27046527bc6dd47e56ba18d8c3f68f639e86550ce686e9284b4b", "2b028738269e7a4c1670e87e5a4f2cfcf00591b0b7014e4270c4e8aecb3162de", "1afb6b22797e01d53e0b497ce352492a517cb33f45636c18811fc59a0402a125"), ("11427fc54a49e52deca4b11b71cdfbe679553aa06913aff23ff4d4f0e73fb5ce", "17d55d00b95da87d82e7e4f1ab905772d5e16cd7ec110f0cc6cf4b7d63b73442", "2b50e5850afb67c4ec852da66d64d23128d6f2dfd2b146a1afd5be0de4df1bdb", "22bd1fa7a4cb124c2cdad2beb0f19c1da995274fc6f617f5f83216106eaf139f"), ("1d85c35359155209c81af17812955b048b31576cc005c015f5ae63578e3d83f9", "1868d0dd7098d61bc5b16cab193d6ae60eae683405ec7b0aa3ebb8a7c6c42b22", "1e26ed5c5018c4e2d70b8581016bcaa30728f981d19a714a47b4296c7bc40348", "03b014a31e9811d2cacaed4c2c298fe8b2daf26b45ca8b8e4e496d71aa4db05a"), ("176020f307da797e8e85a691ab54fb1a11511e49030a5e07c02f2fee5ffd834a", "09ccd4b46596331ac8d4b921ad04b90c667a4631bb81bfacabbfba59578ef1a5", "093871957b576fc063c44802c269fe18666d46fda2f26c43679887f7fec93a5f", "2dd6127b23feaead0cbdc332f01952f145c778ca0fc28918b88c66f7ce917eb6"), ("0ad10c4589331352a96c2e680ad10f7be6769dfa49342169e82038f1c4e1bcce", "2e24aa0d23e0f70c232934e8b0688b10101314ff83a9055b49c6ec1f6474d302", "1e4078684284610eb9434d554089b510f82a665035f743f764b136e11524bf5e", "1f85a1c8fea7b34cc87b722b69746cecc17c6055d31b39d1a4ea78424d7bee81"), ("0f04606ba1e2916283f9cb97192337fe9be5267b35f84f59817b7b99f244f85c", "03b9822d00dc41d6f90f7369f2c5898e5a5741209d7213d0d381221630714337", "15b35f05dab0e5e2a9e34d892d9e2849734efff09b67cacd163cc0b268a67f51", "025390d01602c67256c38b06b16393b44c3a60638b3596faee2f21e4990b6ed6"), ("0d8d8154671e21c57e054af3fd14b3c377034326f578d07b09df45566d9e9afd", "1fc17744e77eeccde0d71df6852370cc2249cd53ca39f636a597057f9c3c6a82", "1967fd6b3dba2105b2f6c76de1d6a87db775fbc5a8336c45f92e7f38a6af0ced", "150d49e28fe971d1b8b6509648934a1d51a095f46e37b70410bfe4c89184c538"), ("041020e6341d004aa116e30c3f65cbc6a27348a7434bb6b4fa8def6d225a3e19", "2557c43b8a2acaf7915dc6c040c752863a7752b99e8530465daee7690394d957", "191e4687755ca76db326010dee475313733816e5c0f3405ffdf29a0e5f039825", "2d1671d042e0af7f24276555673af5266dd05455f027342e03d04e77102a8132"), ("08116260f5550e5e399b5eab072d668e49a18c4e49c248f69bfbfedd30833039", "13da24cd73a2fb3bfac4624c7f285998c7afc4bbaa3102b485b47ab10a6b16bd", "1b781d3bd23b317376d8504dda598a758febc5d56ae95820d88b0aece62c60ab", "00dba0bb53ff493fea88b507d8d090d22f2cd678e5b14f924754b6849b2340f0"), ("169705818de7dce0e5bf47b0873e7191ea8326f1834afbee074a33dfdaaa970a", "25f43512b818452235f81eea2c168d814bb486c5bfb0caf071ac5b433d11bbd2", "17e9efb4e8ac319abe2fdec93f3cb1d1b63fe12673430813f8314bf9de508b7f", "2307102d8dfc19e291afc09455b9f032157818e5dc3a534710087ae05b9af470"), ("1bd201434a9cf2874db64aec41ad6a2bc962a5b0fd2ac847c39bb49a5f496a18", "0196a7055d3f486ac53c5d9aaf849e0f28a7f796411dc3333aea24637651b127", "0590ba6c54060655ae87823249f15436ce38997398bad1d2bdc18135e09ae16e", "28bd28a64738738231e6b3cd0b5f684024b91425d1ae0cf1ad76e78be6c7ad7d"), ("1afe41f6bd3067628a7323db2dd75dbeb51130ee28d92a9a6503c75675304fb4", "1f44a19c684a3454d896465d553f3ac2a3865cf2c171690fb30dcdbbdfb1422c", "08cb2af524e40c56540f3e146c2a0c6089b3d2b3899bf97a79f857f121dd9ea9", "00dda907440a53dd181a68e62af7f96ee31c36132fa0f0c1d751dd81897f1e84"), ("280619d128cf01fc5ce4195c5f75d6917f9716dcbf13ebfae6f546265d93c05a", "2f238b592ecbfbbf6fc70bf20d516225911298af8f842460f1927cc8d352d1cf", "0b57a0170caf33e9b7dcf0e117bc61d6e69a55bb6c351678904ce98a101e591f", "22733a8b2ea61bb795bf02192afc2adfbde908741648edd4f5406e21786da03d"), ("0b6f3f58ae0d2e2d634aa1667fdb88d6dad2806b593b8e165bbd00cb504bddcc", "26b84025164684720a61ba5780cdd376368e0d2e873b00d077622250599b1963", "038e98c1371f419fbc138a31357f1095f341b74236188a28862a821731af94ae", "27acea390c3403807a09567d8577974978006145b4f7a4b852cdd1cf3181acec"), ("2fab9547d45f5149893280d3010bc4ac878c0ef6c0094da8cd178561d78f5f5f", "0ac5cab5114311fc713374478750e6ad3fcc25e4edd1d4513e9a39f05dc24254", "2fe1074e0eacb116cd53ed7d150e16606e226bb421952662f1f52bba31a55a18", "10f00d18fda99e8b2058e043a79dd5a81b73fe82b1d59f428d1056e9528e44d1"), ("113ecead4422e0c14d10fb2740aea13046f7066c74f4c20627009eba1088ce80", "21a887dfd38d13c2b211af077b6c302e32d265c59f84df239e4e3a8ed41dcabb", "2c383573233e87b6c0935a3d567df2ac0016298ea6fbad25f7a570cdc74fddc6", "0c3452304451e23da15dc91c67fe44d6e7ca9a9dc04defdbdddd46277c7aa968"), ("01962b667e13a0263e66230074392e51cd718b48ec51405381050ec6ad16f5b6", "174ee807c59567d58eec9b88b5939f8068cbaeb8f7734d57e14c3afe120f6091", "1b4e6b5debd9eb4e7c6f2c91cdbb6fe1a634412fb9562dba18e7fdf2da1af363", "14c5a0030957499ac7bb567df0da79ffdf3ee23006a9fd088b00e8eb169c44a7"), ("1480c5bf7b360e3064b2f55b77f90cbf28777d0141ea97a8c3a3eb2e5d8b93c0", "271e3f0159b15326a57efadae01eda73224f723728d934726e8edd175f7c464e", "20443c42ade757ff5e814e2de74c974cb19960b0c10de3bdef6443633311239c", "2801d1aeec67bfc1d60370186eb868f8b5925828f1897655944b1ac78e6fbaf1"), ("0455c554d8ed28a5252302491d4e37a9d57e52492de2d4b0c6d5f9ed89356de8", "2c0f8716c0b73f06346068b07483c49b6bd6486ac385a81464d36a67342fa797", "00a986790f1f80df32bd1230fad2ea6689d13df80a7fc6c0aed0641803b24e4b", "1ef10148caf7dbb98fec64242ce704e3b88b8a4b054a7da08caccbfbca2e2799"), ("18cb7c84da21f41899ed403729a4448346c3933081cb2a82cb3f54cf6ea56e15", "0a20269f60d18d121f0e7c890a8cf6828bac0289f9043b042363cfaea0eda834", "23b0d9971f11a5d7d09532c8388a06134ad48f72149f200af87b1ef661391570", "246690fd1d3f04a0335c4a1a25ec051ec0bb957ac6b9742bfc3805751d7afa53"), ("1398c87657d816a7175ea2774e8b76874100674b7991e9328e8f89186b55e8c6", "2130a3de59d4f140d3cc5f4eee2104921300a741f57a0956f43f4d82d2f939f7", "0be4bc26af1200cd706c866019dcbd278035cb2ef422049f05810b250b28bcb0", "26d1b4b853faa7156a4ede72641e8076837f4ac251eb04b8308caf430f876d9a"), ("2670279a07c9b04384f49b7a6dda0cf847f83098806a2b948746dcb613832ade", "049aab3c69265233d003000b372eac1e7bdf7fa7aa0286d0377d8dd1ba8cdafd", "2b6903848a778d61b9b65279892dd0ae7c11bc79a971fda70997bde3fb507eb0", "21c66b1190f5b1cdbbe18aeeb963af84d003b44acc046cbbe54d42ee3799d798"), ("13e79c8b9b73e05349d99915cd8517582a77262fbedb92542f38a0e955dfe6c8", "13de57179109466172e15c8cb14788046aaf0e68b63508d236985c248c500691", "20369bfb694398f5ae881776137e20a76338cfe516626455b2f5681954b60d43", "0d0e91783a2faf4e82542015637cb112b46954159f4c3dda07f75a056a0eff15"), ("1a0e4c5987b525493c6f770e92d4ba2238d836127f7aaffc2e10536e7a7d8c8e", "16998484e3000efafe7f1f68e7db6bfcc58243e205a20a57bde8e3f4e63f5a60", "070415b134c4d5b8e3000aaea9d15cbdff87ea132e76a4d299eb66a884f159b8", "0a2511c66bc9c5ec4e27bf36de41b441085534d5d845bcbca05baa27b1c42677"), ("11d8ed7d5273e04b04fe1cd6e981e5cc2c4e42a243fcfa6d1e3ee92b9bf50327", "2cf240f4e8ebccd90b984c0c38cf7c7040540e548c29d92c724f4ba99bf4617a", "0afdbb48fc093c2795c38b50c58b288201c1918be0eb94165381208233159ea2", "2ce5c2a88f7889bd10d68fc6e63997fac35ca075c45e5a4666825fc138d4601d"), ("2b22ad6562cce5a3cdad64604fbb91c3ceb8478546de33089e4f8906b649c715", "243bf8c8692b778f13662aec821c28ff42c04f312290185d032ff4e2a73f53e1", "12651178ce567467be5f735e913cec55fa9796c8cec72826a59b86c0ba32300e", "1a36bcf0585b15be6c05e75ef99f5b3c47ee46e5a4da0ad56089804123c6f0a7"), ("151b5c0d3e470f5d49ea6ef6e3aee624a2abcc37ec4b0e5d73a06db0f2c1cafb", "2798ada073aec281495ab3e02cce0309a931b0f8040abedff52be035849a9bae", "28750aad185c46c8515bd5d771331faccf0f5550d44a59771f67c971d3d4356e", "076dd3a5b790719689ba51e53d4cc7d3758c28b218961f86aed424e0e889513d"), ("091bb35cec1fd3a2b9df61a55948a225d12286a6388665c4774ed6ba780a323b", "2a894b671e6e722ad8bf077e188ae57424ac25f6a70ed572047040b418dcbb07", "1cdf28d2429f43d7ca6de3806aee97cf9484f52203a6f872018198ee37da7ffb", "18da90ef2083a81160818bdb90dec377e2213a7e1bf81f2f1274c0fb71d8b676"), ("0c8fb657e3efc22e5430ec02f9846945acf57b0205361e2746f4c4fd12317c06", "15da72367f1e268a5f52829df74eb97053e3139abd6debd4068b06a3a0ea8d72", "27ad97d4a4bc9b05a7c3f08f821eb9120152bf4d0c187c237f7a3eb203a5b986", "0a18c40a09330cf274ffb4c1135abc42e739e34e6785e865ff2403c4ed1e3d37"), ("15f28bf16f2ba82c369b105073a2daa291f5e8b58df1d2698ab9f4ad43932b66", "302f38e42a57a5ad54f19ac1dad69ef63bb07a7f01f790a581b7be7304574d02", "0d2c7ee2831b9a5d509fcdf520e875f7713f37c2c07f080f850e0a7806966b09", "08a607e22ad18a0479ca88b08d838bc7da3d0d7891cdc671d1d920225cef6f71"), ("10af44a5ddc9e82e6310d49afc9069340592a73bb57e8d51ca5ff0f4e63e65d8", "143d978ca93ac5524824421cbdc8e762ad8c715f9901e213c9abb889d569ba50", "0852c17e505d55ed6b5e307c3573951b060d45a4508b8c8bc0eb780eb661db04", "2df6ecb06b831a00c7d2f9fa07031e5c745e62db035e8226a1f961db5f243ad2"), ("025cc242973e1db3e24523f3ba0670ba958cb3c65a77d4d736b8055843b06e06", "15693b6f3c6ee1f7f893338ed2aa0c59d64caf543fc19cec38aeb2dde02a60bd", "017b0d06c732bba5d1eb5c27cf6e12e264766bd98340d78980b457459a012b62", "22de13520e028f3f8676b30ffe84b9de2e7d5e153631331045d0b84eeeea0ab2"), ("133d4c3718185a7049f26966ff608e92a4db4052bc9264900b16cb92eb8f63ae", "23c57f99ac7d386608ad915cf71edd9c9fda707e89ec21eaa3f76dc17e847e25", "079c7d96fa7184733c5b3ba0f3a6119c9d587551bb50ec6c523476cc477614c9", "07627494ed3787a1a42e2d5d7be5fb6670d75c2f2b68e8c8f24633a3a5bbb161"), ("124db1b92c9f30450e61d475c594ea2011fe651899e19e550b5cccd818fd28ab", "23169f8bdf096874716bc74f0b14ef4c9e31a3d8edf00f5eeda56baa768874bb", "232637aec6b09b0e3b25f22bdb985332f9afa7f936a4f0b12743934d6f88e85d", "18781236fd3847dddf0864ca08e7bea18a2891d91943bc3eeb67691db98133ed"), ("2f4b301e8e28ca73da42e4380f95a6069afc4ec5b5f6424df6fa39a2875411bd", "20d9189ff11160017f055b7e502c821c75f074cf017ed70e58af85adaee28262", "1854ce7176966b7d078e651bffcb174751bd4a5a9046ca95f02f4e501f2952ea", "07b593d18f6c78264e31e89510fa5899ee172bce47f78ff33fe8b16a209a1ae1"), ("0e53eee7267fe0e57298808d2e883769de89900b5ef105d12406ffbfc000ea59", "0502b8db1747348fbb4bb3050eba8c1a9a35b89f2c7745da245d98a959315ce1", "0bb035b7df995087465cdcdb3b73a90aaa9834b4d52630c3696b763a24829499", "15e3495c9cf68a32e337f8b38c86af0677f32a566a524c50519ded1ad52092e5"), ("2f15c01a9632eecbb8cf01c6964ce75c9ad354030b73b0d12361c20bd8da06e8", "2b3766c2364e09d62c9e6ea78abd9f743d30884de13d07f743f812b2fb032a37", "235994b8989e3d64038b43685af00ee89f3f3305fa874a823a3453a72684045c", "2bbbf5baff0d034d0108892c65ae5aed15c47d14b2b92cd9d281fd4d08277f41"), ("2aad68900435c43b09001692a4b5fba3e0d972992d9446a5f15f608b7643da29", "22eee764f29cf2c34fd75f80f68be9c23aaa5e61bee5d6cb7691e075d81fb071", "276ed75b080184d42438d1bba58363a9c32fdb0ec836906e348580b643c8e429", "154a9f2d7182fa4e86a8495fc2fb1058b80fc327eb30b6ca9be730ff1f555ec3"), ("148db39aa2db93250c110cb75966f43cd5c308cfdea5ed5b2bb4c4d77b2af221", "020e38dcfcac49731dc12aa8a79a49938520e791697b6c5bba0e7888195266c0", "256a665bd0cdeb36fa11f93d63537730a013bc594ff83dde3fd20b0dddd0b200", "03ad3b3e985a213c211a40a19441a6da2955d35e7d3adf3a4d6dbbbc3f761d59"), ("256bac9f45ecefc6caa97a1dc2dfbaf40eacf2feacb802772be15bb56fc802f6", "213bf7244e0fd15536210be4e43f0eb14c6a7a9bbe741f29e142b848f6521b01", "280ec723a4804c3459dcb305703acf8dd338d22fc85529ddf12a275d899d63c0", "24208b6860854ded5bd7001650a575a2262764c71d2ab44309fc88fca01cff8a"), ("1e0c75892d78c322ecbd721e12a0635969e4053497b70489136f90e2a2640f1e", "139dc5fb814a65ff7df22ae211263bd0c883fdcaaaa376d9d2868959c63b0d17", "0357240c12f20928ae6af9a81e9d7535a8b3473e285d533d931915ffb8683f69", "040fe15f56a6408389cf5e55f87836bd839b39802b9dbcc5f9ced122f5ba886a"), ("2b33232efe6f2ee400850226c70b3513f06a38e0d8f94ec7053d1b3c12570e53", "0e57239d881edbe0161c2eeabce54971f84978a345ddcd56eaa72ab3bacabf18", "21c102836a8e03779b82b8fa6415f518ff054ea4db8f051f8ffda2fb48192722", "09921e8d3a88eb77b86972e382d9e7585ae4fb5d8c475a3d2aeac28b7f6a7291"), ("2ff278b5ca3bab39fd516f30c98a15043e777a405c6b2d2462408bac4f722af0", "0244d4fed2e7144ae56026970738d6e34802fedfe65005d19fe52f5575676e84", "1e5c49d49b5a35017c1507a5995a72805a50d21f5fdc263e740f9ec5caed37d9", "107539f94da83a48988f887956f54db1da55d61026802b3dc821424d88e0767c"), ("17e6bf3a8f15ce7141b3d4252f38c0adabef8578078736e7ea2d5e257fd42f72", "0d8edd15f50547864a8aa8a0ae8bf12d74a523e7362f35d0615f002fd3c5b9d9", "0786e58e50e20cb0a4da42533bdfb6e824b6d58a1dba911d38a6467e76e0439c", "02830c81d3528cb93d3ba202ab7bec807fb07a2bf5b8b038a8fe484f30fe8ad6"), ("02cedecf0e1c3cee9f74485fa3754797001ac3042228bb0cdc5df5e90d191cf2", "19e96ca2d49d1eaa2b6eb6342e02e3806676fba7b0db59244ef5d473d6fb59ce", "0ce0b18b6f9214c572cc5e78a8a1eabc1cea01fd739e164bd8da3af96c0a32a3", "137fd67763ad517e913407d4ff612374cadf9ac9d729406b2d2160d107a7a734"), ("076b48bef83e2c9da5a3636d1701618b650a69ea368f8a316cc2886694884277", "224d4cc84359d740e36002dcf8daab80037e6faa30c1a33a4e8ab93e7d6f7a04", "0e18f520b2eb39abdf260cabccc2c449d11f82f8df19b2dbcfb7712c1a0b9b16", "0d6ca574b717b7909aebb68d86e369962557e0df9e956cd32011d1068940bbec"), ("1428adffae6f5f281f38401348c3a44c87f49e8bd3c38bf4b00c25f5743d5e26", "006faf81e4a7b41265cb9f4fa5ecdd93be2e9437ecbe22b6f7ee652175332837", "07e56a5bcb58626548d9d539d8e94d0254e605509dbbaf1e90e8c92c18c38a6b", "23e91df173f17dcd8c1bc064e477f7ef9da405cffe5156019fb9ca1f862ab86c"), ("189316ec39a62a880558ea540422a2c964c215813291de464e6f00748b8e585d", "1125c38d49498a27d213ee3614691ad733eea1d3fb1e787d09d465160f17f030", "0487d7c1c73b6755f1fc87659ff9ac841e1c0189ade1ffcb580d609125b00e0b", "085329c321130f64eb0fd2118c7970327e480d8c66ddb078b4d18b52c3807073"), ("1e76320591dc6292513b4f47ddb52c9f3310769b7eaea7ec72b1d7ca3327cc4e", "123819db62aebdd0c498ffb505a167c4beafc1a3ea3ac2b99fa97e0f2961df53", "145d0ebfd4119b75d5d9e4df9d9916a8f9d6e1b41d4eac60b59b7b25dc56c8ac", "236030066fb77258b8967ac5db9d9da6ba7786b49377809045aa1419439588ea"), ("130f8af051f1bbf6cc2a69b6a41b50e463ddcaf444344133598a48c004cfad70", "0510311bc059d7c3295b8a68fbe9eb174a4fdf6ea5c434297989d2501d08c4aa", "2a997da4f683840628988884cc35b5cd7c9e7d7fda5067540a298ce9f28fa637", "2bab5fc652ffd53b85b12a9a3d860ae8300b9ee896c4fe761bbb5732e72785ce"), ("18420de86015281550b528437e4d003d67ea388196fad4a9c65d1018071feeb3", "0514886b6b20dc8c4850671a4f8f370c3fc3bb0c6e050a0612daa032c34e4518", "1e53e3cf10cc2b2421148de887a374ec11476132cb2132dd88fc6d38ccebe6a0", "2988d1bc86cdf54ce56841abdccadf15ed1f1e40785ffa5da775aab7c911a496"), ("16cdcb4fb0eb32ecb117d3b3a204ad1efde72321a42bc1f06317f5c11c5687e1", "23893f760a250094e861e58d45a946fb1b287af66ef8d82c761a5015f9353842", "269bc377512531703d99ac8c6ff0372d12792b1a1bf188d220f68fd7796073da", "0ef3789c0fca3a35f48b1fb9189ac3df54e359a583bcad40e683d482974acf51"), ("25341e7be72abc8696ed829da97c2aa45b09de7b710ade5f47075d46fc8ebb0b", "290886ae95b435d20be3627f5476ebb03915e4c06b871665d57c30bce77134df", "0af241b1a59d6344fd40c7d9dd0f79b55e598a49ff78cb494b11540d5563f334", "077c7eb4cf5eefc67f86df633593434e5fef8060cae14c0b906d0fe765893b71"), ("224c50180b5cb67297efeeba387fb2361c7c511c37f82ffe5cfa08e4fd82b431", "0e60d387c7fd8d51b3dc983ec25d11c08c56ac6fd4bb0512d383cda877225958", "1083e4022c9070e6067eeb6c7814a475139526733eb7da845d81de97fb29363d", "080a3c1b7fe39ce5804a838908b1e2d1e7e70ccd3244157f482eb601f712a304"), ("125da6424b523c44e7088d99db135378bfee0beea9b3d9c3c49f9003ed079a39", "02908f186110f5b4c5e25bed2d32e0bdf7b78af009678bd20f5b063503b21723", "184d564dbd14b365be352494c29f94966c4111334e4fdcf650b1be9dd37592a4", "268f6fdfcf9b6892b76d0474033a16d5783fc925a6ff950897414b953e668497"), ("1a57dd627ce3d9acb813beefecb2c61293ea8d34a5eccce215d06e2cc5a7f999", "28a0ce51ac51312fcb9bf98d59808c0fc699b99ef6f88d5f22adabf5c017211d", "1c0c200787b4e5512c74a326d2755b1b91abb4301d4d9d7c0ebb7096fc3418f2", "0881f65516f8a49c4494fc525f5c2de17ff2de95f75ab8a13721fd771d10b5e8"), ("2415603eb24abe4d4f2a46303872b31d54c2824a46cd36799d07f6fb3f879675", "06e5703817c1967999e42006d9041c43ad2176360622fd79cc2d3d99654a6be8", "13c976616ad17eec59a39ee3c72cafbed036ad1f897563f271bdfc5a96b91168", "193a262d3f9fd4a57bf54d89cc4b28aa2adacc7af35decc11e9a0a877bfb0b28"), ("1a165f86424ff342e9b0ed872555a7b0f7d380abcf600ce42ce84cea1d224f17", "052f04dd8a7df4d93becff20b6733582cebedda1d401a46f36db862769232a23", "11ec2814dfae825d2ac86689b8a4fb90116f2fa1671ffef5cf348d2a915fd3fa", "243d4e8c2eb1d4d1ad0b903d5cad22e1abbd52cf7455335225efe49dfa7e733a"), ("14e1c7b07584bf9e5c1b7cbe65820e99b7ecba0574ae7e25d1f7f3e08a431885", "081f827186b6a3ff309d063f77275d266d6c461eb7d9dcdcb65c9831405746cf", "104fe5e721f108745781c74b467fd4b2110bf8c08ff77d2de5b92298c020050b", "235928a1c74f1bc7fbdf5364a2542bf474b97760f90e3e9f53df539bfd1d3a39"), ("2c9cafbc9b66261ea97c0fdf27561a8738a71bcd40c1e07931f05375c7284c66", "148362adbc8f05e550e4ff3f235aa967874d7df56861af176a58035e04b84f2f", "1b4e3f36196a97914a03cf7b6144a462d4a07a270f524cd7bcaa3c0f323c59f7", "27afdfeb6b10e773a536eac74a5aefcb918fb50934b99ece438dc423e50d3753"), ("226fb703155b7bf294a1784e77ab81b364448956de657944d33af7be9dfca633", "0b5e29359fcf1c7909b39915b5e5fdb54146138b90af98b82f55577176ed7ff1", "125dca43fcfb1b5065028dededf22beb847fbef0430f119e08ad2722c803f0d8", "1d08406056f2e758f0fe6199313ccbcea741d1e56459379045c11aadbbf5f296"), ("20d3d086ffb8fe33e8eb26bdf78e2993505f793881a006146dda044ec719898d", "0592598d0b85c96780c4a4cbad6a321048b0fce35b9019e7f8c677dc78fd6f75", "064b6614eabb7ebe80c2c585f01d757d21bbc8f15bd9051933ae177e9cf8af4c", "0226416c6c281b7344ca3ec6c267d790c4f1cc573672fbd2ab88abd75198fe2f"), ("2a1a25f4334f2f26062f145c76199f310dc9f54de3c1d26d1d6f818860800d52", "1b8adaaf107d7689b111845dfc4b8092fdd4c6497de77cf37d4be6e9b85c1940", "286a6fcbef1708b56b2c80e53f8ddc8a4c873e1c281bd4349f7d959ed97c3666", "09e5f1bca5cb9ee42cc201c718bdf46e8ccb66c75f98ae6542003687aabc87bd"), ("08a8cbefeb37b77eb22919e1c02d1b035acca1e2c165c3ff21f21b838bcdee05", "16b0151d3787c4b0d82160e4ef76aa9624064e91a99679402fba1ecdd3d83b44", "008c255391504d6fd5e2aaeec2d8c66f2bf6b09cb322b8dc9fa16f354835f753", "03910ebe0992a212f472fb1949623d48ace4a70821c20054a1243847a8bcd258"), ("02eb5417764c93ceec0c05877cb8b1ad0d39daaddcfefef046b4381bf31b126b", "18d7e10c760c5cb8ffd56dd7a025155fa5599d9f6b316cc51a77059430cc41fa", "2bd6bb51c1dd47a3f9e68eff8ba294ab1fea39b4e803e33d3b1201f23d5f3150", "095762b6071befedd176b77b874e2d42106d80fe7b30b66a352a36ab30af8369"), ("2998d5410a38a50f42f0a7d4bf8ce0c41d94bc1563577868ecd47e8bdea41780", "047c8c9e58a8332fd8b5d87fb02771460cc326cf53e59ff3d4e066569a2b9851", "2df53c3a594cb6041b74d50ab5e10d12139fc490b069193fd02f4680e28da7b6", "1334257453b43ea5b7f25cc20f54ec12955663695acdfb0d535c879ee851c73f"), ("1abd9f0a120e9dc32c202585d7eab88ec2c6c491674a145b48232fbdb8fff9a2", "10fb56970f5fbb0d72f01d78209a989e7212a8cde153a49906de4fc5c01ba0dc", "12995f8de2c4b60e050e6197d81776d1626025ae93d3cb3c58c6c1b95433df8f", "0fa68135410c6bdcf0ebd6056647bc6ef31048d5a1302e80f460537cf2f8c6ff"), ("00e372383860e985755d39761e690cd8ce683d3de9ecb17cdf970f3a6b029549", "21235c90d44d0907a768782b2647f49841f50c6379d4c26c00bc1c59d5fdcda5", "0844fd53104179468014ac9300dd6eb5adafca55416a076fb9572b13dfeac6fa", "29b13ef5bb9a5ed44527a2339d7de7c8fd6b57a9c0ca5e54650cb78aa34f593b"), ("2eafa1a24646d67e856a1978e62c22922b7420987610b5b6f196851860674386", "1b98e5938647dad28d823e9fb11abff793d03959c3b251986b999804deb29bae", "01addefdc2d96b990e4a5428efe1da234c1bb6efabee8526221adc8a5996f9bc", "26e31e00ebe6651390eaca3c7a1bc6d75ed9d238602cc6453fdf80d78a47799d"), ("1b80ae5ccebe8c2563c1a7f52110f3f4cb4bfa6de6d25693c1f4735f328b698f", "1befd514ae66657313c1bde454b96bcfc4123736e9f78d9c96be5c5b810dbbfb", "232ca07a1adcaa05799ed39cdaa410935b9c98818cf493d5f9e873287afe3739", "085db4b0ae179b962a100abd852ffef4c78d137c78e44d7fed5efb2f1cb977df"), ("102ea230f0f25a4ba072e51c165023a1a20dacda652bcd91e74c681e3475065a", "17b69601a598f1ede303d591085b7242b0d9a88ed33b6707e1727843bf5b3048", "25df037628b714be715374eda00683ea4722858cd085450e5222600310397ba8", "2f2ecc98f5d53adf5dca06a481f92d19167478c75ac1d729f84b3552e4c6aeb1"), ("240827712cf4be52c2ae020e81a6480c584b4c276056d97a4991bfb4d66445de", "02f5128f9b30645c1ff5b5a23c442d788df84f046a1d05f24eff2d6c99cc3168", "18cfdc705a4bd82780e54c3cae54a513334e6d99878908c38247e451bc982577", "2be83a29beca67023fb01027ddbe1f82974df5fefaf466489be12c3a743635b7"), ("0d67b82c8c41db2d657fd9dd1e0f5b66aebd76aab13d01430237087f0badae63", "109e8bfd2d1e93678351255a04b96c1133215c12e2a7c706be0da8313b2adb5f", "14c7eca5fd2e8076f3e073ca5dad5b73fbbe845ba5632e3b26789265fcd457e4", "02b88535ca674abfcaa8ebea1c12e97553037c11896edd885b888891692a7b9b"), ("127b38034ef5bae63d21352f37f342d94bc0f75faf588f15e64681d1af9b103e", "1b7b36ca0f3597b62b094d0e530c1a7bd8ed6db3213d5762b0ff7492aa18245f", "131d0c929408a0bd51660dc319281e0d7f68b0e35fb0deffb62cd92a31576d23", "154ab3d3991a8b6b0336b4d4812d848501cd1cd48c63a0a8c5e964780f9b1b8c"), ("0183e4444bba4e718ac6f8acda8d6b9841237fe300269c8f081873d0e827f8fb", "22225af0217617d50863f28e262bc544d16243e0832374ac02ce9ff822f2ebf8", "144cbcb01a71413147e3bfc09b6b63e4a294418edb9ea0ebbb7352fa4aa33a4b", "2357694fe697c9d5fa82e7ffd22d958eb1a3f4df7b049c4723697e951b77346e"), ("2a2de916e5a8ca18118c1194ed2a65b6b123e0c88e36f6db676d3c5e0764180b", "051071229c3991f8ee464d0b5812ea3dcc461035dbc5f4e1d1f2aca6add4c1db", "1c01d0ffe12271b9c94d69aa7703968a67714105dd672994b0f6c68b4417bab2", "0971492f5381b1629fd77f18cdc27575ec20ec0db30c3161ec072ca94e278847"), ("04d8b8a692c7233dd136264cad5b6af43f545f1381c458913d520a53874d25bd", "21462e7fa4f500bc5cbcf4d57f56c487138a757b0c25b58af7f597a233a6b790", "0a68acb8251f805d7f868f1b2d7cd46686209b5740525ce1928d9dd825a86fd5", "10e92e8868fe414d71397d3e65aae9968d090a1c0e03995a40a524b27ac7986f"), ("0360f10ffd4751838d985ff72bd327fcd9348b190d5b727524249cd68d00deea", "2b76cee7da3dbbf5c1c967f8313f4ef954a99001699511edbf2c665138457b78", "1c97ea43e3bb6268b3dbcb7593e76b768671f9fcb991bb372f5e24c98d0d89dc", "29667dde3ca3d14ae496ff074faea869ad8e2abcedb3edab2b66637499aadd0b"), ("147157240a896293d1c72968171377a1b933dbbfebbc6d3e348978fc9f8d7df1", "1e41f1d82d6e07556426ead873a4d7b0a780ff86c1f965e860129fc2d8a2e778", "1b460b6790dd9155459fa426d065622fdc1552c6377d929817705897e1ef008d", "291d35dc689088d1e8763e2ce2dd56171290e5645b4ed717ebc8b2a1b1517ca2"), ("01950d622e46e7cd8c6ded79346a07c260683bcedacf5920ef9da90b319e72dd", "11ad99123b878c9d33a5fbe28044073ba8545c22d4091511c4bf9cec237cc280", "0ac2724a67b884b80dafe13ea25634aa471f19cd8c1a175421ff585c6d29bc8e", "2072c95a7780d5f7ae487e06aba272a47883afede451d4bf0483fb20d3dec529"), ("142293087768e9baeaf4a9ac4de09b56c348de13133f008593cb5bd6546b4a4a", "16829133c4b6ed261291ca1a1a5f7bfc69818e8c46ed231e8d4b74c5f2ca8b76", "0828a9d3cb24894528163bab8e6b86dfe9894834b67dec9cde68c54a66953948", "046394eedbe3e1ce3bc7f6ea8fa8105dcdbff9916ed6cbc01a075b46d352a81f"), ("1c9e9c6679a8b320b744c79c40915657413e2d043378152b09f1f01f563bce90", "2865ffb6ecc521bab31b4329ab2de3448c2662efef3141b2f28bb711f465f141", "2c9700c0e28bd89a4667bba127b69dc0d9ef41735d8671e0282f2a8c6246b3ae", "183646c94881a2dd013d0861022e9983481ac97511380145bc2aba74e3cc7bdb"), ("10e308e801e30c712df9a730b39827dff02107e34e3aaf0961abb03cb2588441", "0d4265ac20d973f1f5724ae280d1064f892abdd9ca1112d2ac5048ea2764b1db", "2341882426b4681ccecd718489c9aceb6f6a8283d87297e645a5aa0db98d129c", "2377b29d5288703e0693ff1ea442dbc06146ef26831a60119ada47d1e98c2567"), ("2771fb590c41b546a80d1b9e365b072cdf7f814192fe8b29792a1bd8bcb36cf0", "28d63f00beb74bf5e59eb2aa1fd11ba5356581b37eaa2b88350d03b761e88913", "217402136cec7e2eb51eeabbbbbe3d78871a45432a9e0fba2c0302645e88f434", "29516ae44eac5c25dc3ed97078fdcd81cb09cfb04078b7ab1ab18b80f6bc9561"), ("0dd5aedbb4d66ff75db5f84bf512e236ddc183c5a132d099b821d33eefc7b3f4", "197d1bc7883665332033b020f738ed085b44cf8d8d1f6a1226629a42bcd10946", "2517b910ebd3eb84535e665c5fc1a8f413893624c297f4c2703c27fe49dacea2", "22e3c450e798dcc6d44da4c8c9b2b4efca9fbfed0b36d13f020f6bc76a37faf5"), ("22bfa1b251071197cf9e16e0b11fc374d8e08575c942398347f52d19b8e57d95", "0518befc2da4ad2ff1892fadc018f520bb4ec9a57dd47f5e8e64de739ab7039c", "14ad697b7a45d7dbaa7a5c9973fe019f2beb7b5c9d504911df9fd736663de1ee", "0d51d34d70bcb39e4f4640bd0dfd7193aab2fdb7e6d7ea1135038119b679ea67"), ("1df00544cd3dd70fff1ccc1e3f4d9fbe1c25395dceec20bddc59f5bb6cad05bb", "0673c5f3ff58fc17bed6130590dbc5021b43bce47e87c8af95a39c69e299f582", "2c986ff1621dfe18ae504712e623377d428b6218bea12c8a859a100263c6e96f", "1c4d3cee4c508aca4e91f8e92ee9a8b0e93de7e0827ef612146baa6df3de0f84"), ("1a0d329a05e5f1b8249addcef03ed2db0cac65dec342a83d69f0bb788089a04f", "194b9088f0cd6f8f91f435fce46a5a4310b05ec47a2a0ba4ce41239d4cbbd21f", "2599a47189d94d0e54fe4f3ed4c4ab4abe7b901fcf13aa675c572f9385b4cbcb", "1ee0a8864501c09382fd9bd6e5f3c628cb1bc404d9d268550353e6ae02ae5c1d"), ("02d132947ab2e6cfa59fb652304d21a75d7050e712207a427bfdb1d38f665f4d", "16d928daef5c12a3b953f29bd2c5d149505dda73acb58893c238bebab0b83d26", "2331f4ea9d4b9ea4ac15bd0feb4b772d32494e1371e7eff0cf1f3fb552be6e02", "13495e5808dcc47869fd4d6087286040744bd4e36728299ffa554f3fd17576d5"), ("2f6c511b483fe39c17d69684fee8c1d9f8f0919c80b8bbc1dfbd3ea902f9d8d1", "0728a2ee07aa65ae3655825e6dcd523b14950d96251ec313665f5aba2d451f81", "272d4235ec4a3a78a602b57aa962a1c2084bd2bca87824a81eb750b9131a8077", "208c3cee60b6b6ae1dcaadf38f3c939a058bb6a08874f62caef6aadb4ed95b93"), ("1b7c1cd97b37455012913a9576f24ce2bed2fb59f6adb858b4982d41e3369d65", "242ca33b033aeaacba04ac4a8a0169ad64a12ab36256c0132c96e53de9a9e05f", "0d3ca8e00200683c8c117a2f6b5685f4a20774f91e1d8f5a8e533468a1d86960", "14d44fa6d70e944c7a9a4e8b73ba65d6f3ccc0b6f990c5a8989b8d6351ccb149"), ("0e8ecc43b71a6afb61c84b74a630500f2bb1bc02087f16d08f65dc840a9fa70e", "0bb9ccc611b0c79a61d599061057b745603e6311fa0be430bc72925148b957f5", "2812aa5c4f0eda342e4cd313deb221feb3ba71adf96a800f32c5d4a8aa6a151e", "0ca49025c1a1febebaedcc8fea52b38a14e86c52cc6a366e5ee769707c7a7773"), ("0acc865a9097580e09b9acc7290066ea5c1301121632e2cb9ccd071a0fbdc45f", "2afa128399dace32fd202e7f8850799d9c406b910f124f89955b2faadaa9c829", "0a3dcab795a2a32d0e0ad15c3e41a547f7747434b37a106321ecd1457af90813", "1fab54647eaebe8ed2ff8f4edf8fc7aba0fe95bc89d51d4c525e25b8de81bc3c"), ("24b0b0ef97d933108d51e1ec985ad029b9b43f12cd2d3f638d3d91f9120e411e", "2a39d8f277442a9b1b7f999550df9fd494b6d7d121b87836dbb4b803a3e701af", "03a9e461457eb403cbcf795d8c7bd8c9fb7230d1c393c84f8ffc251c5b79d265", "1b99b2822d3e2d2e6e38e3d1ec0765cfab0c1893f01349549902a10c07d36dc6"), ("27cc49123937abadfc8f33fa8f2fe5598457a6e8854c9d756db6800422365836", "24ccc6b9242df4fe055664c14c9fc614be28bb92938ab2f91e3bed85b1ef39dc", "15260fb80029d448043d64bdd20a23ef530321be4e64dedde64a7a57cde37703", "16b66abf445b2f83aacbe5621b398fa3fbcd8bde202125af7257e2780f7472cc"), ("05cda9c626249cc1f56e3531de7d6ebb333a0368cf3d9de192855604c2ea5c94", "235e2991f2b36eb6e6a2d086634406a9257f5340e036676cf673fd00615ba8a9", "109607137bebbce5f2312e86ac2f2835dc8270ac5da6192a463bece16aeac109", "1b403299c188e200d25922049e37a09b4519f351d28a8798eeca074b19c7aa56"), ("10823044c9fbda62d5001bb27ea096deb1ebbd3c64b23b834885784bef1134e8", "15950992404283372e2ca97fe78c493eecb5dd23205e65a20cf090b93b2c995a", "1b08fa080a5dff65d6ac31ac7b5724c76ef2ee938091c271d5b824647a0a8e59", "04ba92c79c78ca59f18f0c3824db4949dfa24e841843de64d4af7603463f085a"), ("2093dfeef2c8ee2b5d11e43fff455df65189b5490712fe901152b26215de4175", "115166fde3738ee7ad677735666360d83591203f01bb59edbd991f089e0531bb", "12061ba3b32f59bed7bf6f5d5122bb350cd597ad5a405788462a3e0d81911508", "09858662116f0f4189fcdc5e4d03253ae7ac49b45b9eef518f57ab3e24a9d302"), ("04ddaf5f32678a9bbe361b21b8ec805c58193e60b59c904298e62c1e142f38a3", "1b744707f5cd058d3f7fa64283b6b82e61d2a89c974be6ac92bb84d0364bce7e", "0f03d2da640c4994c039b36b49f53416be4af3407d912e540971c39acd9698a6", "16cd97a615a5b8cd3cf331a3dbe01bf181676cceabfd2b2efdec2722940e2d03"), ("0d9afd05dbc30a7cbdb8c46476a4f8ed5140c37e373e4b7a2ab5a7465366b211", "1f8c69e948ab8b2c2d6c00a0072d201ee26d59c4bfca67a30456aa9398028de5", "0f42ef37c8e1d10f755aa096b97dea15f94f74ea8ebb57bb3d07330e4d4b71dd", "05f08edcef973032fa0f5368dcd8031755822d249773ab3a011fa56d4c745e84"), ("1e9743b0ca8d5fec3382089f9aee77d957fa8c191aa1f067f84658c1fae2e57a", "00631708c309101223bc395022595e6e512c0ed54aa7d0f64cd135682c789fab", "2dfa699bb602352b6625da85bef0ce9329a88d3f9ad9e5873190510fd1a04485", "2c57c5bf26dc31dfa8c36e42439a4c39a72f3123fc89513295d145d44c8aea77"), ("1d207ddece91c2213ea53af18256da1129c5e85c48fd3aeb5ce87606cda55a73", "1a514809c055ac70b0adcf75145a34ad9a802d85a1005863c179d1044c09abf8", "102c9c3dfafcb46fc95521384f638e521f51bdd15f81cad6e919db2795a48f71", "12657a4eca5d0d3b4ac818ad33812bc5decbfa3c6e11948facc25de67d110663"), ("2e8f3e1447c2f4f4cb889d8935f1d77a017b1038e9034e3cfb8663e9954d7101", "2bb8db65247699045758d14bf7ef3c24258ea80573b7285a7a5863c1abd8dc20", "113045bfa9da7d6fc021c4797c077ef90989399dc95d84bd3af940587363e44c", "19165fd78f4e39f17a2a35be6094d5e6012700c62ae8340689f71d3b264dc0a7"), ("1175a5f1baae3b0e08239afbde2d651054c7a67b662da5a13e7c0839b1b38d4f", "2c9549f097a7b979ffe757801880775105535a928df76012d59859364c67d060", "183f2dc980e47873235b6a0e8fc05baaa20ee12082e85be9ef7ebe6de2df0ba7", "1dcf19de0ea00c441617e3fefabbe1a2483c6c31131f6ca2a28426e308f16b7c"), ("202dbfcdf03e97f039c545985568508dd5e0f8de345f82efad9c47a14c67339d", "0221025742b723b29dec0d701b175088167905230b5dd1536dda52c38d88e5b0", "2dc6aca6f83fca45ab2615ea9be623d521cc7c9675d9e2b611d18530d523c1dd", "19ca98ed022a8ba56a3d0523c582b33be510e449c3df3212df3351258e4009ed"), ("2e33a34c7757a360ddcd3ca2dab705108ecbd09e0054cad1e05a28524794cb52", "2a852b9b819299cf36b66fcc6b16473dcada6682a6cca015b3f89511470e40e1", "007edbe59d6c9bcecb72b3366ec7d13fb20c97da55864da355b3604bb934820d", "293b83ada8256ebc222074bb7d578506da91cd12961f7f87838fc1d8209d8523"), ("26ee1564b68980cb2e2cab3b2b91714ec9f8007ba67e3113250ffaabc3fe2585", "235464b99db7e75d3fc9a922edac39ab08bbad28cb5ee4d9f273d4a6ff4e4484", "080f9b37aa5d804defa4677cdb721f9047c677f858e397a800216b550dcaae62", "19bd7a12b119918090113e5a0086f8b2f3d347a718e6592906cf73d5957092b4"), ("0288437cbfb6eb00ceac6e2bc22b9152fc3f960931c039ceee9a38ba1dd4be67", "2c8ea159516d70c32f60e40d8f894c3b81342139fe82fd6146fa3abc2dbc613a", "2c67f9e726cc5c872979707fe6782db9c81d4930fd5672c6c122b24d6b35f9b3", "285bdc506f737f2e46b96d03dfd0180fab788541080caa35f21c0c885afe6da7"), ("13c63009be9fcc665af60fe8bb2346c1ca463462edb6d37beca408000e66bac8", "104315e26b6271007d7106ed54e0a08f442cf02ac84dc08eae82d0ce50efde42", "14d078e1bc94da1e53f5aefb07fad3f23efa3623047637e3451f2ba8ff88bc88", "1e56b03d8072abd195d9ee8b422b70007d5e563fb317558cfa19bcd9c0ab1bf1"), ("0911c567356bc7de1e39181bd5ce967856fddaeb4fe919a9f7663ead5880a804", "0dde503aff94a52e52973a5bf6407e391b00a7a54cfb048e73733cfeb2fc64a2", "2c1928cd0db04b65abd247413c52ede2c5d4e9448cb65fb6b9b5ba349793ad48", "13809806f5281807675a92d725dabd1e73b11eb1c28ccec556f4df93ddeebf87"), ("1a5c96bd15e8e932dc2acf53c7b55d10ca2fbabef07ee209ae3ae5bf1249c464", "1384c1a8d6dbdeb0b695a6524662152bdabc7de8660709da5efe2edee0791878", "1bd6d9b17ae894a8169c2bd3c9f69d190b8ae2776628cf74a452174e9a6eeb9f", "14846b37292f306b3e846b2c24849c54f1721dcc8e291fe1637e9315ff21bddd"), ("152e5c9731a804e4d7bfe1104d38d349800bfacf4f7f321d038d04fe26ced1f1", "00ce55700e086b85ed28eca2de68f9a42c74fc3088d56bb790f41fa16bf0a2ea", "20db73d176f95eebc759ade93720ad342608734800e2e965346f6a0c5f0f79a6", "25fd5d141c47f667c7f1c5c94870b5d0349b006a54ffb0cfa63880418831b7f5"), ("0526c77461ad88f327ff92575dc4bcaa18360c0c9b965f8e3c14be391471b98e", "2b0c4b90f1f48ef8267fdd882a28e3536a78b01486043cf4a3d6d9635875ba8f", "2cc0965e57e5fffea404cc7a3afd9a6afdbaddb70682b0c72202da5a54ca0d84", "023b1fd5fd51bbc617b9edf2f49493b56d23c711ca58989aaf346cb2a42d8dfe"), ("066e5e7c9647e9a6431dc832c7b76e75cfe8b37dd0c252d824c4246d64685021", "23ed88976066f81f133e46042a05fc410dc2737802727aca4adafbfde478b194", "0f2ed3cbb0a265609c99010c6be4609421ea04676145236eea61e45f97604163", "095101fc203422a305487b9728a916015af7e8d4048eefa850c60ea8faf6c770"), ("2504ffecf5829eb920c1fc689fac5084249cf33a64ac2e959ac2cbae0bb32e12", "2ed4499bb9418a912a6cfb85fe8e346f81e86d39b263613d8d295e4817e37528", "03986e6deb7ea6dda0f1484996336e37e0fdd0a6b2552cf640ba5947c28e8f11", "00fb3134d2b91940fd2eda48b37139c24c47a124df20b29cf6eb84b23f3b1cc6"), ("2d516982c7eea3a95538a45b2e8365ed7eaed72a403382dbdd3799b95a889e54", "10c7bc842465e87226ee071a6c41eb97c7e6b22c47c35afa22e6e2818f536206", "1eb7f4e077f3f52bd9d0c3cc76c76b134e1702fe77dc01bd4e1f0a2251e1b3de", "08b14224fde56995dc6e2b660d84dc6805b384351f1c9a4247d75a18a2e4884d"), ("200ed69c3c2d62b1a702bb658c5cfdc7a891ef6f0103c249a856868ddf18ab87", "15892fc9383bc16daa5d3d4079f0edd50f062200012d03ae4158f8d44067e9d3", "20f0cc1be6ce3ec34ec883564a519949a5dfa2680fa07f2e14274f034fb5d54f", "1def0f135c18d6aeeaffdcadded037c4a4101a682c5d3d4aac41073c97912b6c"), ("0e3063358dd80a45e110a56f15c57b8a4556765f38f7f101372686274117b451", "209e4ee4c7ee8a5a9cffe940168009f035027f487215d4c5f92f50eb8fc2c7d1", "1a072e6e97e43a839c96699fc4cb54dfca26a071a9e2938e022f07b4d82d7bb7", "081ecc648d84290067b2bcdf241c09b7647cf0d600f297545a63d997da31dcc2"), ("2d2e1664f5f58b3baa0c36ee125a9c6d8e9a4a1ae79037ef9476d561f50f3344", "21cf355c1e36271bf22d72370308f2cc9048b783b43c84aea894ddafe34bead2", "2285574d3ebf4a7ebe4f83874f38b4ca10c6ab0ec8a7c5bb4e3a3c4bf6f05cce", "0f6b7febf64578490cb02e13e5139927a11dfc7fcbcaccc06cffb2d8ea498032"), ("265eb6c47968bbff24dcd85d1515c2d5c135733cc32b188834e2590dd9e39108", "09cae62a04926bb0ecab66360a11dbaf67798c78a8293b7415b20b9f0ac8e058", "2eecae476630de72752144f76d52c4b12d6cc67495ed6a16361500fd81753bf6", "16c5597046f121fb7cb67e09dedca38b7d2dfa02821175816c76dd90aea4dafc"), ("030b4654d92d7bafb01b472cf58aa5c6e3bab246ead7ee18a49e4fd0e8843417", "1c967bc4bf8b259db0f1410a87f1b4c5da16017b3445f79a40b1f4507a4d721a", "021deb1962361c20e5ec28e9a10b352e9e05d023e8533179866b33fb415a5318", "1815d5b80dc14a6d9c84fb84926d74369d119b59129419f19f2a744f506147ad"), ("1a33094fc2b7d0da10126e6b681aef4389c9eb100dd5c3de7a403a66b9fa054f", "147373d32a676fc73a0fec1edc08c25865721853744f30b6fb55401cef255f60", "02944b41442c42b753744d27e1bd4b979aebaa126a4db0e7d3733381f0971b3d", "1b3e09f0f13397cee3c3b498584f9998d665654d3b33dad80295a6324ee7e0bd"), ("0a1f1acd9082cd7492012396aeac90ea03704b43d43d2f61cb9ab03fdb9fdd1f", "13a795bd1ba76c5b1da0d0a05096a7297829dc03b039246dedab38b2133702fc", "019af8d179b7280f591f1976fef6a3cbdc2e671e271471c27d9bc46107a9a340", "1573102d62e3eaf1cb9da99aba411381917cee4ea569b0dd1a02250be2b98873"), ("2cbc6b239aaa0be08f0999c21685c822fcaef0d899b4f76b45c5ea1dbcbb6ac0", "1734619a21853395d1602380fdd5438f699055bac9e9f13519604a3cfa80d988", "0fd9b8f9b01c2144ecf3a69b63938eb7f88f63d6a38402d02a9a8409a3ce06db", "078fc5ebcdf540b616373b2ce34f3b6dafe0d02d98bbb62d53fdc16c306d8060"), ("16ce843432c6b947a54f7979242169f92bbf1b90db3aab3d578335ae92fd8725", "1226fdb965046ac1e707017d9d7a70bac3b04435c5c2b297b1923fbdb94ebc65", "1a07751546e7fcda7ca26d7603597ccf46578ce8475b1f71f0615441d40f0003", "0daf6e1e7c555f9ba2bc43f2394eafff4897f2156bd89e748e9981535caa340d"), ("222f63a8f765cd415696fcc24078bd1d0fe8bee7b660e6e3a52bef555dff6e38", "13844d7bbd242d713396c86fc49f765de19550411f0c35cd3ee430f6ca05a60f", "06ac3f306fc81c3f0c21bd15d9aff54753b1f5add46b7385a4d4274d31248088", "1cf595fd24d36ba0474f5151cb7459372d281cce0cd53b97effea357934fac3b"), ("2c4dcd40599441640bf7cc825fe82073d72ab01a4816ef2af2983a4541bf2bef", "07ec573054189f1e828f2c3faf682132bbba6c2b8951644f5535287eb3ca18b9", "24721c7c86b76570bf876ab6535a5bb605e07e72252826ab3cba0b8a007c2059", "25c53ee4000e427fb8d966781b13aea600c0037bc2bbcbd416ca6d1e669f5b78"), ("1ef6f8994d93863dc00f0bb54e4cd61fedf9c83c20e3679e8385bcaa07509733", "01a969f7f6cb6d6cc0a07ea87361ec975c91d60a5c67967a5575ec0b5620a107", "157e35a2bf0a3b0a9beb6bdf851a6c51bf13a0669c02a9fce17e4e6be4526ee6", "1d43125f25abc3fd7c9a7f8c9d6b33d355522d078a912c0b96b675e10a6983f2"), ("1c03a93c344ae99748f74d0d8b83ef22bad3902482c0a1d6bd4dfce90ed39f2f", "24be9ecd0e69ce885587ad302aac4cd792cf114f588560dd4518ffc5d109e416", "07f0dd18423ba2ee6eec40c4240f5401191fa9340e4826b98fc0f2ddece825f7", "0cfb37151fb9e5fd5c9cce34baadf78f92c6a7542b7af4208b3baf7d321a0874"), ("2c0689d89e34da375f71b5fd5850f3bce85bc6850a6f6fc6182490c946988de5", "2ef27e60dee380cf0ed15245ea77dadcc3951704e28a7ad99309205995c30913", "0983601712b7cfbb12d2ae55c18e856eaa9865dbcf6ef503a7fd7535f86da1e7", "05d924c1ac9ba2cf6147d3a83a639bab4b231185e5b669455cd17d321994025a"), ("13477df23d877ef2926b572ec6a7c9b1067974868b881a93b0db98ea399bbd80", "1284a8dc4a564e43e034c487a0e6505f65db151e1b3827b6d6c7b3534f5c4fae", "1e14fa50720658f32f32309b4d978c54bd5add7621c105d10635f632e5c6fe39", "0970d7b2fc19e282ecebcc0ebb90f8ffc6206f25ee1f791ed196303deb7580c4"), ("182119ca726bf9fb9889abee0a9fa660db72439811b5e7b451ee91c7cc7734c5", "045be0456a1f3e36b3f41d9630e5ce3d9c764758bec0c85fb8699a1e5e994e90", "066715f8b18d7bd803953991862bbbb052c2391c5f045c252be2fd8840b1ce63", "04d1d4d4383342076ad48598cbe9dda9ce6ce24b6f2cc981cea4187356ea0305"), ("1bb72cb9bb5979ab92b9a8f286d34ca42d835c45e69e4680dcb02acc49faddc6", "03f22d119671f39073e04923ef061eab7bca5e8ed4c26b28875a18ebfdd416ba", "1efbf510664a8d735e393d42f761367d78d0fd7fcaf79e67ccbd9a0290147dcc", "188008d543b8022c5e6452f59874b91985baf81514b281721dfcc43b748621e8"), ("1d73b6eecb92248cb0017e890b96065d667a829d005fe1b6a5e56c89ca1bca5f", "0aa9639a5b109aa854d46cd6dd4c1773268b3b5629e5ded1b758b5025153d28b", "16458cc290ad86cc4980d853a099242fa22a712ab23081b4fddcb2a914350efd", "22c2cdf2d50d9cd4d632aa800a32ed49ab9842b31378bf2f5ef90c459bbeef90"), ("230c158ba6a061ce3b57cd94fcd817fd1954ddb9f9f6f3cf0949db5c583c4d67", "208cc266731617e0f51cf0ae990b79f2fe3d83485c89e7de4b94825203559ae6", "2b8a0edd012c7c30c915bfd5c87a12822787eef070ac3ead18edea679f06d0bc", "26d5f87a44c3bb59f73d7fd7fc9c001d570c855ad50b534602d5269a8bff8092"), ("0cb85848baae151f5ff4b242db19c887a093e79d765287c3a8666bbe5170078f", "23691dc01f3cdcfd28374ee27d6e6cff78728377ff5c57223284a1e7bbb4b410", "1cfa117338082b0fe0bb63dc998ee7d3f602e70c173206df8cec4673f884a91d", "035e0ca14956336ae4e828e7d3d33e78731a5673cb87dc886cf887f20892bdcf"), ("16bc8ac1551094c61b34ed358bf919492d3877ebc04d22661266fcf8dc298dd3", "2838663541f8137ff90df424314f3e93cd412d8c42a818ad3d666e6b9de7fd4f", "05d3885830fbd3a01ac5d18e399ab767db102c7da4af4e73ab716c6ac95cdad1", "044e9cd65ff00b2b13737de11be08e4fbe8d93e5d7a646f383bf11db4bcd63b1"), ("01001f95e8c50219c4c967c3d1a8048e8f601eb18a671cda9e3827b284819f38", "2c6086ab4584c5d54ff4d88d2ddc08a37aeb466f2eeaa05bcd74e216dec8c026", "114a177184467f436e62c806e9a649375edb5c8b32b833c27639fd18aeb19f2b", "1596cefd043f1701ea64b1c3b62ff234f85b9f8b8c255917f3ebe0e8878fd9df"), ("0abd2777dbee174e8d1cb39bd0c60b28cfd089c423da62c1f05520b03dca73fe", "269f1ca8a3e18b1c790506bceb944979cd446ff407109b8844630702f560fd66", "164cd0e6c9a4ad7081a3b7186d3a31d219c4ec913f7461f04c283b91b1d430a3", "08624d170b3b20271d9fd7570daf91be8dc5c3e4f199c7fb41b770d4d606e1a6"), ("20e34a8117c6c8421699a8c0f58f377674d5e7d7db2d684c2a35e7bcd1e1ae7e", "23e1d188a60e726dc5a5d3abcad94866184fd618b56894815aa0a6383c311ddb", "1d3fee6b11ce49409d568cd408b207a06bb8d4277ecd48a8abcef6afd50be8a3", "249c6996b183e7efb6d105f21c2e7c5bdbff7bdd7a1488657f2b29b3b055e3ef"), ("1277b3a507d4917ffa23b3d858262b9f77537e5c4ab3a9cd3a47c8150ca2acbb", "174907a731fb8586cc1b8fa8d9e6d80ad998cec94d951254466c3b553486a5d0", "2f03558a82b85f0b8e062cc547627b51422e9b0a8e7f871a3751b2818aae20ac", "103bfa285e7a46ef32ca15e118f1d88556e71afe0e525b9f65205ae2734494b6"), ("20a67ee66355c54392ff62a354fd493e27e4dcb813530d35e14e591b1c16afe8", "1f388b8bfdb17882437876d68734d98e69ece1ca70ee0f25bf9d75ac1a682f91", "28ab08fef750ab96886b711aac5c7685c0ac7c53172162b98593c2676ee9c64e", "01e53dd8cf6a0cd5c9638c8ce91ec679c5976a307f056bdcc0b599a6a27df96d"), ("048fb9d0ae96d1ac5d7f903748f17913fdb63e2b577e66be8f9e4303db180130", "00cf0a64510342a9bf4f8ab0f0359936f22549143c006e220b1150d1d3f7e192", "2fb963787941a245af7c4a2ba983e509238d106a4a388404c313cb676e8736ff", "08e78cdfb800709c2872e7579b2ddcb6523df0a052534404fa9d350dfc072161"), ("06745278f3742056fc9ec8438e7016f6597584fb8fe8f68e823e9d931f933197", "15ba8f3e1a7168f6015d283bfa027521b8345767be0ae3d04d5c50ab5e15d4c1", "1d82f5b6f31b7ae0298927f395fff9e888e0159950dae03438274956fe4338c7", "24f35ae6ab1fb538d61716d23b9b238f68468649980b6f2c6f5f55cd0420f8c9"), ("0e3dd68f34fd497d879dfd2c7e848a9f8d02a6451cdc91a6d9e68587228087c6", "069168e5ff7b7e78d27e1badaaa53da4c46f22dd658de10cf76a713d570b06cf", "04e0c2dd527bcce24b55a9eaa145dfa28a6ff1e4480943076babcd0607751f60", "0d112b3ccbd113e8f2d75f9d475db92ee11d9bc960e3803eb935c9a8b2b4395f"), ("0d0c1006acb5847c736fd2b1eb3637fe91d844334269097b035679691585c308", "192634bf86566e48d20e1904d83b7373ee44719d95007de5ab3626241ba3dd77", "242c1b679d36ae2c4327b9ef68c801451a66f1b27e06a0988e4b2e6b1c318c2e", "0b9b55a1c56bcec65e74f5db1b2edad9a288c648790ad967a1a7a759b1c6f5c8"), ("00bc805155d21731a34e1642a304946d5c14400e5064d49d59d5ca16f85c3835", "00fd5cab7e40842f52b4d00e8f542d4cbb9620f62003add18480274a2b37a8b5", "2c665c103447c84078244899057c5ec60cf32278ee9062dbdd93a7635b64a717", "0e3da5cce66453cb61f78ceb3aac9d631cee51dbecd85c5d92e54cd145879267"), ("29b239912cfd91e56c8fd9da5f820bb74e91cb6d8028dc6827b89f274f1f18d3", "1c43cdf4a2874d5a136c1395649a759ecabc3d03662973c3d7137ee80474d17a", "193ba4098a3a7e62d42c89f680ce8c39f25daa8141569f867a50b61d858c763a", "28646a7d83b8ea969c950f8f67bb0528dff028e6b1d689b7913b948bcf60e2cc"), ("0cf08aac6a8faa8ad03894236c42bef4849eb238e8daa71830bce0784a8f0548", "0e0061a4e327fd8d59094d9fa649f5cad9166c89706a2aa92ff375b41fb03826", "0f2b2644422d5602b1488e39cfd9f00f12b364e5064665a5b8763bb1b3048615", "2f665db3f52026be773a519fdd41c23c6616cf03432fdbda8f6ae51e4350a136"), ("1efbbbad180eb14c42b69b9b1b9368c591cdd4a11b78d594219f1f8b9bdeb2aa", "0605f4d7cc20c69408c073f35ca3fc358304e7d9f1d8e54ece1f29c2f31d7073", "21484ee77c626da07436f730c00b7ed51de30066cdc9ce824088b854b1959022", "27eb275b2cd276f6ad5160a8ce2aae5fa8f37ded8225a5b9ed19bb9fa94171b5"), ("18b8062ec8044029d0964e42dbeb40ee7e3696a3ef9cef31d4631597d8eb3181", "17c0e16b824ffc40c43117785de5a43752811dfbd612efd532de8b883eac1e5d", "0823a3069eaaf3ea91451b1764ced23adfc4d0ac7a448b5c31425a8fbb2ff9de", "20b73caab52ee8453d89512c48050be9d05d40e403f9f5cfbd0493851c0ab470"), ("1cb66fdf2378c50a6407c5d6d9f8e254f3ae251e9dd45fd367fc70999593ae74", "0bff55ca8a7eaa189443acb85d6802d59838aa3ce1bb64126ca30a34eb354eb7", "1540273f33e7d02cfc510b303369ad914258af85bd583f148e2f51ce4689fc1b", "1ceb827d15c5e0eb0e926af419c628f9e4f05333970ab716dfc7dbb60f384991"), ("0d61db5bee7b7b5f4f9142901e3c1ee352c296446a5c8f3b88de4cb8a3905e31", "2aa4ce383a2b31b09e8f391dee6748eff51643422dc727f0c699bbab9627b14c", "16011ae80119178091218bdb6d81dde5ad8190cc5716fa6f91c39380fe45b135", "200c77d33f6d3d194ff5f83c48a454ca29920977d78349f529dc8f39dde07c5d"), ("0c48c4a857860343fb0d41e25faad8adbbe42506b552ae973d14c77559415e1d", "0ac34ddf7f91c1aac73a4ffd2529113a01fe6632d365f398f288ed83c1e20624", "0adc4453e96646e24147e47ea5a8b21e335b6b294359832b04ad9e5dbd3576b5", "1acbbd4817e9bc6898e7646e75df8e8e58cbb799305eb04d60275988d4d40584"), ("2af1b7b0f4e719da49efdeb7ddb1ff8dd19fd6cb1b8815964242ee8af6b84d1e", "2092509fabba1657c1e6fe392cd4b10c56ce96480ba8952f4f2476d0229d51bf", "1b0bd98d0b9c2a9c38626a65e05a62b9d78c55c2ef735fcef7e0077122c3f539", "1e565837782dc08e529fa5e608a8d65e95590c1f07be77adc05a68158480dadc"), ("24560c972b4b2baee73077a5ec142eae13b9f2beab7a91542ad9f23c244cd76d", "27510c9e032be3006e177c79e03dabbdf0a2546d177c18f4694bae6cbac85c02", "206ad795a19aef00209b78c160bfb36a70400bfbe6a5ce2a1e29673a1947cc49", "0764e8ae0a937a8d8aa65a1fdeeac1c70b4a98dc7410ccc9460a4133fd353f8a"), ("18a3c8eb50e1e27abe9f6a19ab9625c63d13b30e286b2d300cea8f2a8043fb17", "2479cc7f21fab2ffbddac2685b8c677cbcdb33aafca2306128bb39fa1a6b8739", "1719ce20d12c927eeefdfd86d9f40d3642991ca47e499c6bab1b0004022ac002", "0e8447e02cfbd0e29b81057e82b3e93ff068aace84c0a6dd20382eef59a537bf"), ("0eeb68e4e64d57711a537b636119a0ac34fb994a23a9aae2b7f2b730db4fdb4d", "1116f437be97809dbae3638f4401575e6ea33c87de8c998ce09a4e06816cf8dc", "0da928fc736e975b978af4d7b0e99aed34d43840c860f29d02303a3d4ff8f34a", "17ab3ac140e06b4bd8b1acb16b9dd2ec7dc0f17b1e8643e06cbda3f236a2b720"), ("052375b31509a997929a1d1a17fa10c419deef0871eb98ac4c2078aa56857912", "15597cbc1a752efe00147b1daa62d90632dd7f8dcd9e5a2a6da439dea2041cdb", "0a5db220c4d17119c76291a2ebee92f4c1aa16db31d066627926d94521fe4c11", "2f55b242ddf9caa4a7dcc25dfe2118ca1b21918c63e36c7f5e4a1296b1ebcf1c"), ("059fd039bddd9306d323eba36543852b93ad16a20ac9fc6cadd5238e148f0999", "221a3ee362ee78e2bc80c1f04978b4672e103ea30ee94dd0eb5ce182596e49b3", "073cf65c17afd2ea8924f57ede1ef5ebbb77605d05320d67144b456744078973", "1776ce155e625523167175b3fde596c5126de8eb33285efed938f0d482dddd51"), ("00032bf50524ee97b4582720ba84d0f8fc6548b1810e1889f1c27d60bfc43921", "06282d8f3779f78823123f5a888f975f01d0199d7cc00c72cda09ce640df7a6b", "0d08688487cb5dd59cd5fc6429b28da0046d0f4d8b241e0a4786329b1e4bae0e", "1a9cc3c9a426e93a0feff5c3e0a3fa08c28fd1e02a187ac77eaaf4ae9cd7d396"), ("03e76d552bb16c5ebaacc887e70a0d2df362f3803f7156bbb6b09eba551258ba", "0be2e097077c7b50037f00ceefcdc6f4e2f588d3f897792ea5e74b58490561f5", "15a6ba06d6966adf0c4f06f4516f56ae11fe978bc0538ace958e92dc17c980be", "17abd57feb7e571d80ed34635d430e87b61e2b4421b3100aeec39e3febe62c49"), ("1589307fcfc6d747b2cf54ebb3f001d90aec270461aec695ca2f2245ef73ecef", "0f2f255a808e4d72904253d198372929255a1d877816d2a05ec0bcbda77a28ca", "13cd57113477adb74cbe28b44645d6966edabb98cdafc3e4a6b770aab8e39442", "0b7dd2c925af9f388401bbe1c2c1d530c10b9e5d79a337c31f99b3004b2efe5c"), ("2a5fa8cd6e5dccd4981e23ebb153ca4ad679448e36405414f5e6106c1b29a084", "286d3bee0d605a20818feec75dddcb36f97f3e9f75a8006842b93848cb427412", "0cec38cd729738315fe7850812c00a2c2084233f13563e4e89ed8f42ba8ef755", "0df3d73693e4c09d9e8400dcbd7d778dca1f6940da5b4817897d4b771757637e"), ("1f21e4068e0804bd1c22e95df38dc52dd114d0b43ca648e37c723ea1c59a7e98", "15156a4c8e7c2411ca98e993afd9014ff60ec5d2762a59812c6e9edd283d95d6", "04e0242598f2faedd41a0b60f61d3d65b171e18d3059f16c43f58635137de57e", "020f2ecfcc0b7b19530d9b70f8ed5223f01315c505332cd5e4e00afe71843fee"), ("0db36c9c195fd812868fb59926e64487a167a40c1e935a09705a950c121e61a3", "11341c7df366ff88bb60f1a5175bc4797cd06e5637e34b467190a242a759f617", "256c340b0698476bf04038b33e50cb4f14460c709768694c41e0da142059d880", "2d79294189784d6fc5e420d789ce41cd0f21382f9a45a246c64e0b6398bc06ec"), ("1a622be6cb1ed3c1d0729436a811d332197bdfbcac34032be966c1e45625ff9a", "17e1ce14189a1486645db124872dbf6e587135bb33e972e8d1454735fabd5ff3", "026755374012804b7fde7f808f6ede28ebb05b693a996316ebb1901401b4cd3d", "2cca65a5a76b047b635d283b56a59e63608c8f17e3121ddae94c1d1cdd10b8f4"), ("1ab742e7e314e89b83b851ee30df4016850263b1d0d677770110de2ede0db9e6", "14652e735a3cf6f62c7744eda1d3733cc519f161fdb4066ec22f29dd12316dce", "0868547e14cdf8c777e3e3bdf31e23d038d500240e03145526d65a62d9440151", "19795c9231318bd16a79fbbbe581a0d775bd4f7f9a0cd858974b5308698e38ac"), ("21dbce11633a669ae41a0ad5882774e57b59f07fe4d32ea506c5dad5b27ebd35", "11b3c6b8baa0f065cc293b4d18b8eb842e3dc30396134b388d2bed48598e7af2", "1a070878a14ce31ce68777fabf2da9126c07d58315b06dc0587116a5b1843bb9", "2cc2a476117d01790c0bdc4b3f27ecf8d867ecc6e89dd7a6310a929a6b7ad5b9"), ("2b290d6c0b41d942599d9eb7f3692d6ae097c882848fe51537d6abad71f0d6fe", "2bd9f7b480a03f9e37e8ad3ff566274f1914985dbcc919bc59e1a510384145d7", "168a37cb375d981e918cb958cc7133bcbe6ec24908530b7d95bc7bfd272ac03b", "26ab62537188fd0b00f1bc30cf52f689980e02249988a4fce74ea8ae21fef56a"), ("149f68d1c1c46f96d9f2b4ea5f917413e6af0ba7bd2bddf60001f7a514c2efb3", "270f988016a0c61660041cd5f66d8cab382ed6a07605f40c9ad84fc4d7027dc9", "091f57858b2bf675cec17bcb1264f043fdf0d099a396479b3c5ef04b2e50164e", "1058ad7b067f33d8d1aedd86892e4bf3d7604eec5250f0e70f788e5cedbdaa26"), ("1932716a837a86c61469d68a24d99592158b4d0a925e8cb2272184ce49ceba80", "1506f2bd90abbd23c4d25df8070f8369d710492f2918477f284445171fb62476", "1f04c452bb67124b13f4c2d090b3566adc45eaca1e5a2f5079647dd96816cf51", "0094a22935eb233f39a2336b5253e098d5c08fa8b5607f8f64832be8807d9829"), ("07c797dc0930651c89e8e06dd0aa22ca41437d33749e8119167a403570c56b52", "0e334718a4ff7c7dc2cb4efd17b99c434169e2cf3b62accc6f5da79ada6386bc", "17b5f1bfb704fe41a9cf2d07e2563072e95e857b649aa1d0489a535aea32236a", "07a7c6325fba6cd32f5311e3525ac03479ec3b0c41c39e1cfbdec2ee3f303ed6"), ("0f409d96e629f06197fbdbbc4813c044701c6e9ede29fc3dfc491f649ad57909", "08173adadba3c3e921377e427fa279fb88585acc07573b8528369cb0e86c0c67", "1fa1f3c2ed2176e9e29b56f31410325a0408daa4ba5b5e6f0810d5049e3d6a44", "156398e8f4629f7982304a5a4ceedaa04667fed77f23571e5c0caf5b4894716a"), ("1517b100f8019dd38101e7d9b104747c03d3b39d378c503987c700140e43576b", "1b05f0244a5caeb0515ae2405d2d7866b56d04aa284f38c6fa23238ebd1c949e", "2f48da8aa275a6095553d6adb70f3331ed6e477974e6cbadf442608fb8d78f20", "03e08df58ba4a79aad93c495d31f307eb66c1c9f43b113e9cd06a61223c54e6d"), ("239dbcab30c4f20ed753b61a8634775b4ed3f72d55ce9a9415907c0b5db3690b", "25a03efae682d5ad73f2a83651687bde5c81a642f73aac092bec7f59c59644cc", "298784908d833e02d6c0d4f855a615554deba033683fb6b7037831c23d78daf9", "13744a1375d5f46f71b3cf126128c808c7d06e978f57e42ea6a9ea8b8fe11912"), ("2f5d0e4461d70a9e599a4aabff91c18d214877e3ebf92f404897d491adcc56e1", "01b4c7fc67dffd01850570e4dadcaa5692122bf23da7a2fcdcea04da26d69e82", "1936649db89dc2bf1af674198e23a4f066453688b2208184e5b4872b41e06582", "10c2d0737e260c083af206b5989c1c2a760948dd19364ad72463836ae5470775"), ("156744e8186640c69df03c68848b173e749e5b5a5b4a7260410203df75b5b29a", "254a4186e8cfd331c1ab9eac646b0cf5e984def4038cf8fb029a7fb3a3759f38", "1833207bef9adf99919ead6f20236c9e72eefa1a51174746b9138ce92c714b2a", "0eb6f8a613bb8bc8bdaee809229c3ca52160ba2c874bd0e5c3bf9faa6a1374f6"), ("1ffadf2d5ba3d5c1b4a51aee2d363e6cf5ba0203d95163e33b4e07ef88272094", "03060ad44454d6c48eb7a6b8842505df91e5a52a47547432789db3b39b8a92c0", "1010432236d09b8556aa73e8a725e09e8fbcb3767b23c2d0dd1f9f266f4646e5", "102d682b3a5702612888f2b20952254d1e710e337d7e813304b3423d21d15001"), ("0d4e75e146ee06fb457fe3cd1bfc771f3c0b0c112376db3a3b662dc4f8477500", "2f15aede1d22279bf87d481ef3ada460eed0261a63e1b5fc27537af0006de7c6", "0cfd4c90ca0515ad6bb9ea629ef5ca3dddabcf08a43349c971a869fe9d0a433b", "1d4edff06c237c693a6ddcd0e52bd5b64736d60daea27095de36a996495ed380"), ("0bb3b5f621ffc1ab26c9db6aa39de5348c347079b97fa52cd441e544e182eb37", "070bac91accdcc1963c42218fa214dd1abb22c1b7cb9f1107a85d238fef41604", "05c35f5e83b29f6069f7fa816db35894c34bf7f519af2937439a62e6c9a32b5d", "0cddc161d5e6d13b2caa4a63b278a224db3c3a52274ef193881cb050aa3ec6a2"), ("001b2b9e6368c9e20a2e2a73fd826862dd717028aeffe2927d996583825fc969", "055fbb77145ac9e1674d4cda0697e95dcc4b3661918d09d9350734a1c6d42bda", "0a5eedcd146e0126de74158aacc0ca3d2d0ec4305964f72eeaa9bffea45fb810", "1c3b1e1609b27fc2d522a88f0dfaf3212b88ba064dd56e63bfbefa043b33f906"), ("1119e145b81e7972f21cd03fc4a58d651cdf42fceecdb152fb5017a4058f3a0a", "278191db4aaa64721917d68584c3f3e974c86455357f23262f907fc91a4b2917", "0af3f4e7cefc26664639c77bb06af64f30422d76a06cc8f39769f2ff14aeed1c", "08be74ec849c8a3f5ddaa6a5229fc4e4b0c82c4df118a54577b2e7a6c2041943"), ("2478afe106ebd25d65c208b37dabeb9435fcb30cd0ff7270f73d8d93818c13ff", "255e8d1fd5c85bb3a45cefa3a46ac1d3e4236614792b72281ff99b9ab942e40d", "17047fa1d05319832dc67a60f4a89dd3ce9e7e5e0adaed49f0d2464ca05acafd", "2c44eac6939507da220b4a336683ba87decb93c342f46dc5b071be1111ec0e3d"), ("25fc9728ed110da25099c0f6aea190706c0d4c5d9c9ff1e749dce0bcd1d1fdff", "10367e5fd22b9e8310f7dc5851d7be6ccadecb48cbc59124fbee67ed24ce1c04", "252aad2ccf3d895253bc82665cf0525fbe8ffe82a5c9749add51ea70d22e6e10", "09627c7d9cd106415ff8c66ae934c0206e77e9306d0f203c72e7bad1a55d037b"), ("2b6adf7c41f3fc7e66b58eb1dff2a38d154e6cba48e1741ce427cf07a09b2ca4", "0b6238bde8b5e9a4108e4919e639926a88a61870669937e1ab634ef20a41ad2b", "28648a539d8e800636ee2cf8c5f529e7b88a6ae34674218e4d8a775fcdeada88", "04e44487f8433e07a883fec28d7f0c345e85bed4b51886a2064b157a8ce42cfe"), ("2b0df2aa9758877a1ec931260b841b31d060d5b3eae82dffdc10df17b28d330b", "30499110d125864ea987b6bf49a045d3f15785510826c643ce15a7aa32bfe9fe", "2462dfb8318999c828dc92bc3c3ffc5269945dd8fb0b3685365e31d26fdbaec1", "1fdcd439a7769e0ca01119f368992cb796929db6ea2a4c4f039eea9f0819a8b1"), ("0ce3277b98b3db4832940f27c3b635cdf63d29bcefbb9275a0f8edc22c64f5c7", "0789526247e193ef961bad0f39e512ec3e1f4e04bec6bebdcd880c30533cdf4d", "1de781cd6c7752582f6db7518ea65bdf8f18fa2213e7600072f1b3c1395c55e9", "1015f3a1c002b4d1c17481a871abefee74c2f32270e0d070a15afa6f7938a309"), ("2475b7be19fddce2e11a8f71066f6c012c346854a3e5a30c085a31d6cb84293b", "166a3e9b33a3110c5e8c3fdfb38747233a84adab004677dae8c696bf75f29594", "033fcedb67bfebd5ec2b943c47fb193d8aeb949f161839d81cedca9a9ed33810", "1c603e397bcca045f910dbeb8ed9283bfdc2abbbd757b89c7749fe28282dacf5"), ("2efd4dc4def0701f7e13ec11d59e41427df5e55bf153929a0bff7fe63bb4909e", "1cc0e7ca98d026867c879a019d29fe5a77bba193c25e31eb0f16e93e29428931", "13e0c14cb1140dce4e2b58f585bf4edf620fdd514fedc01fd0a216e241cd6f9f", "0f25eb273f19b9cd0fabda82809b699f231b41c3d2ad7878b7d75035d35d9a81"), ("1169cad4d8b149712f58b32ee933117bd4d2ca9df6c5897ee922e6fc1e295ab3", "2760c992d234bd9a90a51a5104948e8946697f7fb19103077deec6e6d394e75f", "1a4495ca644eecb4f9b57743ec8a96a8ead3c25194290bed603967b4e67c6e21", "053f546c621bdeaa24249a44ae75c856b55840cf606c06f94a0d7c6ae0fc206d"), ("0c1b493585c89eed6488b1cf48bec49b383c632f8721734c41982960fc1fda62", "2e8c86f8adbfa92a4bfae5e4f67ff343e8050a0538595148b24c046c0fce509d", "11a2b6a91fb8dd8827a272fd6ebd1d4f1e08331de056f7d89f4193c1b584a47b", "2e5fc488f58d6d8d06184187a19ee3ffb878b5dcaad297daacda8c3c7eec574e"), ("16de108e87c58a8b96801bcf40b8a14abb68d96f1d30a4fadf3e804d9a91eae1", "0011602036941da6e1e8f8f12634c794357bc2baa035e2742ef3abce19afd9b5", "1fed24f60668f933de67077e189d910d9ddb0208d422851062be14d66745284f", "0c223de33468c3da93d2bad5d721c56f2b390db1c5be2f7fe25306167eac93fa"), ("1982199289938a32860da2185ec3a6fae37a3205dd46551d91720b73fc947967", "0b897506580c7c3b51d03d3c37787b6932a6e9de0a6a3205bd668f1584b6db4d", "0e2fa3a6bfb843706b14e086f6250dab82a339163a68a598e9bd859a540e4997", "1a890bf6807f368fd7c111d77c095df0e30746becb2f476640c72e87791ecee2"), ("2607ae7aee9b141360b303c4239da0b3d980715b0168a5b336234ffcc1c9bcff", "0f0b89e448c8eb0ed5a9be44cd8c6a660e0e133424cd49f2b3afdbfa3d2c5281", "1a4f2d3f1afad5729feb0a38dfa38454624032a846206111dace66b40387c59e", "2b49bf9053d79f2ee83f9af880ce36c211b73e24df410a53b560bf1e0c1e795c"), ("140e0e12a150df136004af3ca7e8b9b1ae341308710a5eb1415aa5c4b69e3895", "303d089e8a4baeecd894440d10ddc378daf7b145a5b0f8853998c2b4323b0499", "11f65a429b64eb9afc71c640bee67cc9469ef45887a751604386ab5eb26318a5", "2506ceb22368b8df2e69f5fb3ce0bd4d384ba980109a0ab21a64149d66e1495b"), ("27c4576ffcb33159b825881f223650a5fc3567411aadda27c8d673e6456299f7", "175376227e4bb11b941214e6fab3f5343d8c8c8ae2af1b47fc30b1e06863f228", "1011b1dbaac192da80570c9753e7ce252224689f2ee5e960e58f6a48bf05a4fc", "11e3b0e81014466cf8f29a2f2a66caad6da79e4829dabd99d43accf072be923d"), ("2b349445976f9905f83f95530c08a386e2cc73e6943d712b2317373a79529939", "0e97553f59ce6f201af4c8d5cb099aecabd6fc30999aa75867f8f870b4cec62d", "04eb65aa397402bcd1330c79a612b80d71178e6c8dcc6ae8a8983a9f44ef1767", "0e51eb1a1bd9b470a7fa0ede9e6035e3132681b6183bb3b7ca778b0aeb2a8f80"), ("1a2c267658c4345728879bd1b771d9e3eb8cc1cf4b0d399177d6811051d54b15", "2d90f717cb7778f765c6e157cdf78e03f49ccb819f25e5c96546b4b2357e1a1f", "0447b65d224dc29b5a5ef48bfaedbcdbd2572e8c2fed1cef576ab70b540fd6f2", "15449a37b90b9d7609bb8435ba0da339f34cade8111290c6c60a267b8639ce5c"), ("2d0545aca1d16115173eed774a5b9b0e9aba85a16c683a9295fcaa151fe7e21d", "166caab114d6cd642d402d199ed5ab8e63f858400a45d2fbcbc5f828efb45e3c", "07865b24b48dba0872bce3caf0c72f37c20c61a6e0bd30161723ab114fec3bbb", "037cb99e77684436797b57533bd467c9eb4016a2f5317cde3cf8ed529fa06717"), ("0ebe6c8e7acfa2488e2d5d95ff3ab3e5b57feb5018a1ce7ef2115a8ff33babb4", "01463f4dddb10abc761975c907292da222e6aa260f52dc046638a6aaba7e0153", "10ae87ef9712043b3fa3a30d86b42c759aee8d778f34945796414bc6686dc7be", "14d8d8250b49375377b62d72e6288ee4f10f83cc056ef3091d977eac59c1580a"), ("2945693a7f8558185aacd0345f0d6cf03f7648251e60f435bedbffdea125586d", "293e8ebb856f8da95082ed19a0dbe3bb851045e647fecf7e9e033138a48b587e", "2ee93684fd1b28a44c8f0995752e41a1e062de7e7ed65f88b0b8d31ed5b93fd5", "178c3e1291bece80a5e80df155149a6d4622db0e8c64817b7a54835aa95bcc96"), ("048f9a13a9ffdb147b477905337341c531c667b7f12bb18e037b6e1e00070de0", "0530490f0981079a6e9e9575270cc7c5367ae45bf3093cadfd6c6aa5e83ef2f7", "235a4ce855b482b04b64902f7cde6b115796ff0391c8ed97316d19aad9ebb12d", "2f1ebd226d4fa5e2f9510293fa4bfcc54e5300c255e7ac308680259a79b98e18"), ("204526d97f81b2a2bcf57dc95e87902127b4deb937f1688cc74c0a15920afd13", "0fcf9224240032ce0505a151da879c865b83a1056309d9ae28b33c23c948bdbd", "14748db89a5741e385151345a53595214758eab72c0f6e0ef82c984dc396d584", "121e3f7c64d284d51402b8b80a03df21c01495ad3fbb96254e9a429fe4dcc749"), ("0164c60f380cf69d2b53eed508686fc2d74930f57f8a7259d13c4ab9b3b17182", "2317a61af322591ca19328bbc7e4781183ee53f6274a0a776b9deb25c0596ccc", "2890db71d2b3b1b3752cb1f1c6a36ab9c871ccf357b3430f216b2050cdba20f8", "2b2605ca0e9b6421aadf0253fcacffa6a08fa3c80c61061d84bae95df20ad4f7"), ("0f86fbc59dd21a957b804c76aa7ba398b526f205e3ea19d5c1ee63a79c75ecd9", "2e9f30bf34b1deaf2929c8fb6e1eed870a4ac5d8d2d1c9b609ec2e3d7eb11fd4", "19efff6ba697bbdeac3d17fab4c98d3c5f164e4788f1ae25c7666a746aac6621", "1e018f342c923c3446aa7c0e6ee44540696fb0814c4cf422660bf4978d623bd6"), ("23273664fca405ef555f3dadade4f61351a4d17f505228fe2c983773cb34047d", "0106b493d552269e59696ba0cc71b1b63b8d028055a946b70babbddf46f8d250", "2dc3c75d5ce80f7ec690fe9cf11094d2055c85a979ddb778e2b4bc2484b5009e", "1b06117f7e75947651d87ffec5ce129944ac787bc3a0b210c12bdc0ac0bc5979"), ("0f8b019292a43a9bf4c197aede128e186447e566d04323bfe536d20ee42df7f9", "1b14fb030f29e61b9a791d503f517a04d788445a36039a88246bbd3ca0c6bf5f", "27e9b694fb2f7a199a87c41fedb015f0bb3841a4459434676be1c3df088b9782", "0449ef22b8cd7f3d61608afb16b9b3ff2cb699c1cf2ffcf3b787f1a1c89efb11"), ("211f33e6cd333843f061e6324fe1ab227c73012b633f1a81c84117442b2b8815", "1d3008dbb0333cadc39cfbd1e7c5b78db9bd14f8903ac2ff7ec680ed1cc2539e", "15f308f190540773ef4fdc0f53a889d8cae7304536daef7b6aeb3378d1fe38bc", "012d2eea90a16ffc5e1fd573117a7308f04a3b60114a24729f969380e70478bf"), ("053b5d12761e4605ebbaf7d699756c68bbd67ced0cf751b6398570078220a659", "2abc083ef071ddfacb7d5c6c3db011b24fca5a98ce1ca7c6cc47d98deb3cada7", "11ef020774e1deb6c0d619c9eb6025f5ec4f769c6c4c1a0ca3465c3b6a3467cd", "1cf92889de87e3291d313a27da07cb6db5a5a4d3fc54fc347d877b5655ed0759"), ("047cfc99246de3e6b2dfa53aafac48f9dd89d7a475647df02f7159ad1d7dea88", "22711e7f7efb07c40b74b30bd671cefee5551bb627a70adcd5a67f3a9e6bec2b", "20256f795e6375747683c3f0d6f17b739db8b626cc1c30bd0996a0dfb65834e3", "170e1bea9235165ecefe92571881bc13dfaf00ff2bbab71c975055b051bb16bc"), ("1c8d7df279ddaa5a83a7a96b2eab9b295e0f18008c53a9ae7ad4bfaf093e7497", "0833380cdee593e1b676409a4d14b1c0a52a25704a14e10396f85b459db89276", "01ad226c36da782d5e2605850491cf418dc40cf88c54331e048d67f9ce41bfc1", "1f5336bd89f97d63039a5d006723ab4af597534471041235270dde0d7d701809"), ("0f5ee398ab65adca41b53e157e78db4425e06c48755b6f81223e702b4150e19d", "27010d6437bd733ca08683dcfc683c774f23b924e772b23877b65c28058312fd", "12595e5d2c3155afa189130ea59deaee4640392b4e5245bf4de5326d769cc8d9", "0c35f43581665fdba8ca330f3af4866af674ffc6162e8c0d2907c2782e2217bd"), ("2416793af597d52d7eaaea2ea27506b1e889c3c020ae1edff51b9b7db2b8b0a6", "2a6ace7a22b267d5bd8358a0cdc913ccd5572b2b1624e044c19c2eb5b071e2b7", "2e44f8cc78526f763f936ccc099d7fff8cd3e3f53f822ca3ae2c88ecf439f186", "2308199e4440ceabc2211c8457962a85609e05018447bb6e5787c34ee3865ee4"), ("1fd3242bed2bd3c6eec50d409b1715d93cd84477b6547957a797450d8ef4042e", "05d6237a030bf295812d0ed85c7f882e502edc01046e446b69063adeb9d816ca", "29f8b264a5715c20ae1e14981eb46eb2605f8b3b4364c9d39bf9201c7c464eed", "2f2ab25fd9b03719bcb4ec012ff146e993627d2ed041f2080e1e8f9b6ba273cc"), ("0a345b510db0a5c9ab8c943d13beb0e8fcead4753644d418c53660ccaa8f9af8", "19c2a096b678b0dede0ef8e9e5efbbe4f083ae31b486b4307c1c145abc0b631f", "05e5bc7394e93e0e5055a6de41d4f4880d1f62fdd7d988c9fdc2c078272b9269", "0d8488363f686f0f462eb5ae2db8bcd62a5659e8d288714b547dc81b79cd3e53"), ("1177b809666c31007a366fcc00740352c55e6fb14e758642318219b1d14cd535", "0898ccbe0945b9ecd9c56f2b496108c7e001ceeefd8229f3da02b428f23f253d", "1d3654293af1e9881c807deaeaddef369735bf8b0657d2328edd3c7af677f375", "303c70e77ea67fec92d462b753fd28a08484b0218155b67e4367b6dc5cdc6362"), ("28c188b431422f2ff78c71d0a835f751a8871c16437f8bfebca3202b7a3f90aa", "00b562ab9be24f713ed2c9bbdaa7fe15b0ee0bf3cc17e16107bf8b5e1cf01c5d", "0524d605f880a66c9ff39a5beda858624d930bf6aa320abb8e6864ca3cd00bc0", "114311e87b0a1c4389d85497e1a305ed1ec728348f5455c77ffde70b620abdf6"), ("0a63b9e5bcdc0f7019ad04d1ce08710da26cdd8d26a44703a7a56923c180acd8", "126554915d9fcdef703e4c0267ede790f7384099b8453ccbb34aa1a20c1591b4", "21620aecedbb1b5c215aec1a0db14d3e3b9ad7cc943e82c3f416f720986085c0", "2149b0cfa04773613b258d6e09a8e24c2c0affcf51f34e0ce5dae37bf7f853eb"), ("1298bab8b0fbe836606af42db09219bf3a891106a6793166bb98a0602dbb96f5", "137395a9c732de30f78399671f3ceb609da5b3a53a869302d96260ba134d0c87", "2fafc2fbbb874a74ade64a246a978ba2242c73202927a332e380d8ed18e45eb4", "1641f9573a34c750bac48bd56ef67b04fe20e6eb70fe0b4b41ffaf515c3851fa"), ("1e90ff484981990bd7f3b6ff3d6f212f4e5e46760fc3289b61026338852b5378", "230a678f7540d1996d76a64f7aeeffea60a2d98cd06876eb522a7a0623a54858", "063aaff692b0733903a26d71cc6a70159f5af03770b30ccd9a0a09dc687ade51", "1362c538e8b5daf26b26a5fecac2f2309102027f7dde1055c071ec637d9cf829"), ("232ed2b547f3efa5f51a2404b4f85e5ab502ab92c593a183e276b1f1c80ade7f", "2a8e58ecbf785d1c511526a5c64cbb97bccd2ed5a9e18c31fd1738ec3985d028", "23f8d3f50443903c7a91d58673f29bc68a9af49f9712d445f67f35106e59d953", "09e9e6b770362e3c39494a24b70ede8dd3c60f1d0a38f1b9ace61747aa080025"), ("068c11210d2c7fa97318b32387407c75ad72a1588de7afd8fb5fed6630d8f8eb", "0fb83de044947ba8c8d5f28dfc550fcb4cee57ebd02bda53bddfe6ca0d6bf51e", "01952ed18854b63f2eef5c67219d1363124d6ee32ec2630d6a4dda449d3ea73a", "2345f14609adbff9c9915e35a41f64a1c4a132a112b29246e8257f8f3d0fdd2a"), ("1bf3949945ac1338c294f57fc609b3036990b40dedd6f88a588bf0880cf06b66", "059b013563fcd9404f8d5440ad7442c0a8840deb0eb49a81479c6f48c6b53e39", "1abaa6aef8c198057df13638e74f9209a0031dfad3590d057559f876d7bb8b46", "234dc3ae6d0052578235dd267a5e0e7eb189515e9045e3f2f1d23a6e96616bad"), ("23b07735b25e1f00b909392c1e5d39b785e655dbef7621cb091e23375510e787", "2cbb0828025050321ae933cf9da3f10cf2be1340372c2df0c85d69d9110772ff", "0c87c8221de1cb2ccee4942f2a848acb8f289bb462d55d20bf2feccdd73a8352", "034544f176b246a341f3b6f12acd1c245cab7cb5b0e5a2d8fca50f4933a7bbe7"), ("0de84c914805ac44c656731810d26e23c19b6b8a4add929d66648f88e5505578", "20657eb7d42fe6affbc8d8bc38e326b1161ad933f8579d52fa4ead1b1c21c516", "210430f0ffeacb0010af30fb6bd2966fb0f1aaa047ea86a946232bf411797fc6", "218275e35c56101c1b817b02ee9b3e1260a740c2bd75172dda721986e6afa9de"), ("290ad3ac5f8a745b7d04881258d5ea7b95bfeca237cf4dfaf58d529bf871020e", "28f6563b2c61084b08e847d29cf6f61e3836c3a5980ea11cbf5554a052c710d6", "2ac679b58e5528039d6b37b40dc9e45d7bead16ad619823b1f72f35610960c98", "1ebfefc02ddb66aa10b9ced2fe054b2283871f6b5dfe272e70889e104833e8ba"), ("198298688869b7c034bd02f68f59a77c11e1cf0c995640f345a4610de5a7c55c", "0f0db9e7a4d3dc1fd6d3db2fbac7d5f2ec772234fd502ddc27dd17647a8e7b67", "1010b076b25b6f6b97230502155f7b20585a36cdf2f61f67e71830bd3d76a44f", "261878e565a17910cff777a3632836eb08de322bd7e1651691a2f3e7ca4f8300"), ("2d9d9659b4625a5e55b684e368b2574533468ffb2d1e35587fb6b4fd821ea0a8", "1820ce7b564029a88fd9003e4fde177f809d983ae11f680ffc4ef1dadeee2ccc", "2fe95da593a365f70f105cae022b73a8275137d91a035067fe18b3a43e5896bf", "2fce04862730b64ba5c9054874a38f5322b93407e5f60a10d86db285e7d3c058"), ("0880b41e559f9df0b97dcc21ddafe652cad73074022ff9b13d147f8a546df21e", "1c6af0cc17b0e97d5d4fc71ea679d72d2c57ec40aedaeffba2bb91d6158d8717", "007c7406c52cb287e766af73ef6d0215c2821b70afdb417085f5f910914a4219", "0b5b7028e72ab21a6c9b3f7cec34705c6ac27b1c5af453bf00d520c0b94b5eb1"), ("0d063fd3b9673b1b391bfce292c8ec2185e79d79e7cecef1d75a4fa9f19d53a2", "1707fc65fbe50148b81fa63a6281d88dd56840a0b7c465650cc8d9f477117a67", "0ed994f55b276524c4842d3fb93e3a2c3d2c144b8daad77569602488fd0c8940", "09d5bf66af45fd9b1c7f045c7deb85054bd2f17e7ec17b8945f55fdd0df2132b"), ("0bbbaad7e185548bc8cbd4c201aa22cbcd46b52ecb9373cdec07c38514e34e8b", "203e03ab5fe706b3868c04bf8566f661526d3265fde19478fcfa214af7bde250", "29c87e92bdde5f3ba7d675d4e3dbc05c03564435f9cc2e4433bb78fbfa34c580", "02582df7974736381513012d4c7523ee917340db8570e3f98c4e26431e5b5f8a"), ("1f75844cfd6a568dd12475c0e49aaaa88cb78a4dcc8d47cf55ebcc0a91d005ab", "0e90802ac3e920b21dd764d46d86b79297082f977b2669bce10e95470b4d6bdd", "14ec2186a2005fdaef8ab9c51bd10deef50dc457dd1b38038d3d953aa2c54fa1", "1922bfdb18b8a31d5aa842aac05558b6439188ba72fbf76ce5056413d3bc6b27"), ("24030dbef5c1c5c1495d7fb3bae734a3e0012ff209fdf40370578e136fb30d29", "181a000922eb881df07c8d3fe50f2173c3913c54a34ac55d26b6051b3334f179", "0aa5a15d9bdd23291edb32b07735326d8bec542806b7a7024c199945339063f4", "2b621570b71c741d0794d17b9411c1723473d25e249aefb7a9771ee34c38ef47"), ("1a0f791742f3f45c28619889828b498a7d1812e901b7557aaf887cc427c1f306", "03ae84f4b6055b234e102f22aaee6711488057b384e1ed3646ed3d1824477dbe", "099af2ff15754ba5242bc50caa1303d79a06c957bfa6539d69ea14389e8b6bff", "0f8f71beac80e2346038ed41933c4bb1fa03500798fbc347396e3b81546da8f5"), ("203ea1c6eb51eefdd3791bc995ff278a147ecef851d5e8704520d972bf0b6dd4", "236d41c664b32ae4acb886ed9a13f5ba8264be0ab7b0185d3c4e7987a2844e6e", "1397f1a3fe987f379a50a763375c8c6d928a16a35985e973ba164187d9e87ab2", "1d23f982e3bd30e7da2a86041816f63cdc90ddd08159291f0db78c94e9267ea0"), ("24d29d28409fc66dd993c5122048f63ba147c090fec4db869d2c5fbad6802f19", "2cacd1231299486ec6c47d278d466968850c327da1ef055949633bb7786d7bf3", "03d3542452c8346b1094ce21bd145ae17877fa050593c8348f1b74ee5091a525", "17918197dfdde76bf92c20352469211b7583d2620585298be95c8c76ff723b06"), ("23515f434ed4cc413ebf876d3625ed60cf000481a3e3dc3a2dfb4d5416954ee8", "2937d1819a7473ae1fcf807c8464b0a1ba39cc1ddc948ba84b9bb50e61e58e7c", "2bde8d56a471c48036d5badf82f1a1209a5ddf19c40943d06b1cc780ed6ce92a", "1f3d74485d26f889d118c094eea8ad31cec024869d4bac5372490d6a4e57a1b1"), ("0d63e4d767300fa10bc66b3d3dbb8fe67210799343ef3f78327a04cda07eb072", "0c586495012e6a731074765e3cc4d16c6f325b6b1c6f264bcd6f5d9661da852e", "28d4af1c940a0c09aed08ab0e58c02a1e5cd8766b24318b71a0f7cd63e679257", "2a5a67641e0db9f45ff8a1a943bf5573de4dfdb3d321b70b9e5098cb37faef62"), ("154e6e9045ddb10031ef66fb668afcd09212cfaecc7a6b9d93199354d9495364", "17d4978a2a3bccf22c6fa283332d180595a77d94273f23887e20ac231a3346f8", "2c575c0e3d5f0ba89db9719f9b805f30a357ab503633651fafe5f54edb7b29d7", "04312cb57dcb413710fc8f1681e5e6bd71ed4f4fa3e33ed1bc2dfd507034035b"), ("2cec1d8e033d84e003aed252efcb036ec11e15f2cfcfffcac08295b8b9a5763d", "067b4a60f15bf201859343927044bd9cf238121c69a8d378c201712d295d7150", "1cbff4c78be9c2f62f078a48a8439dbe891bbda9cafeee0b08fc026bc7959437", "1b365d32f79a72860f532b6c25fe256789c68c5536a05cd25c41cd09c6fcdc90"), ("09d7098f40c762c7cad2dda26e9c19e73b9524ab1ed68ea9dc25e7f2bac279df", "2a9e55fd05b1d63920b97662a53a8b007b3cc692c444c71f0cb225537f619fc3", "13a2dc07f3c3feb5740a3e2f3dfb890d02f88a6b4c23528206a01608e34dffd0", "01eb17ed1b3670cb76b57991052fc35aabc6a96f021f031e588bccda3d86ab5e"), ("0d669abeb83dc81b9e59264362811c24897c780aca0017cad96968df5f52d612", "00b8a81cd62fbc069921e38878ebac810e338ba25c73855aa12fa24e73cf305f", "2583440d3a176b3f99b72aa3b21dfb75ba3818445cc6c1fd0032be66cefd7d1e", "1a78dc95ab47136759953066da5640b65d6763c95b86038967a22de636825c41"), ("01d44a516c804d44f235252b73aa9d6d54e076949d0229905a2505c281fb089b", "14007b39ddf9cbd36697710ac415ba3b5040d6b87953cc892eb3e16f3815eb07", "2f68d052035b958e8f52e01d4f00e4ccec32bf20ec4e861ed936cd9414d94e42", "01ef2691036601487f31cb1d5efa2d2fe9c24950847880a49d7732b65104bf86"), ("059c3eeeeb660c466ba7f65bcb3f5216340d1063332f3fa5415d1e179427f0de", "078e9680872bd3d26f712f600165494732a6b20757f2c6f370ad6436cba964c6", "2cd105a361c6166f31bfb44b0739c674c9b5f117ed40857263d58e8d1f85c392", "2ddd27c06e58b5f7826d8e94d0cbbe35187784702b806b7be5d34ab3a684a8c1"), ("0d57ebfd7cf763396f9e9d1b0e711fda89f37a777678acbeafe641aec9659932", "163b6e3290a30fc732270abedda408d6bd5b422e8f721acad5b18b3346d0b6c4", "0ed0e74257f16cd74798adaa51ed401c5912987a81a41b65b32167e5a14778af", "116ec201c305aca8c767e071117384b09317057f16968dd782fdefe9a1a1977b"), ("19e12417eb27ee6c3b0b7e199a9f47add02b78b010c206e53294df5cb5a7147a", "0127698d8f21bb462c44a59755f7da802e0a1b9676512778259b608e0da743eb", "1ce2eaef76c05c0e6813aec6438289a750386236671a763c905cd7c3939b96d6", "2ca626e923137d2d249404a52f2d8852a5ab651cc5b4f997eec0aea644c1ff5b"), ("1b2bcb1a64f7ad272de487be8a83e2e7991b05777ad9471b20d36dae6999e1ff", "057edc703657d139eab33e5e16a3c64b867cb8a30bfeec4b33e297817cef624b", "1ef86fa50ec81dcac68c9244830f1f5be82b18be2a5cd88b1ac38177f7bcb713", "2829716a24a0380c923832e2e8393511614f954cd5348220ad0a4d401423081c"), ("0b3488be25f9bd7f3674c7b3c93862db1ba15e60e03c533849587ab2d1643b3d", "1b0cb9d7ed585d097ad86bd248b417ab2d4bcd6b7374d9e0e67646dbcdd1a0d9", "2abdc068f6ab84cf9c6a697e70a82d2260148945a2bd91a534cb3585b1d5636c", "01e5c47337f5fa35b805d936af7e2e8f234765019d4c5af2bba7e0a6614207a6"), ("257f741e9cd504ea1c20bddc37f350a9be390c1303ad3a78ab05d3b94d53a705", "26fe83cc3ed37ff396e9ae21bc21495dac10e3202873039299b414715a968687", "195351bec45a6484eacf75e9a3a10bdec784a15739261886703ee98732197020", "1a63cb83c54096248d36bb6e12b47a35575be2b3bf110f87a9d95eed023203a7"), ("0f78c7b7782479d234921c655a23b7a8a841616b934337629d4e3e66c4feb525", "2ca025a8b2386790518cf098e31978be3612ac54c98f6e376f78245278b197c5", "120096b2b6e9ed9c3cccf8d7a96736a9033ecdc0bf6ac80238601a7f4c99eae1", "104e0d9cfb3380aa13be9150d49e6ca7ef06274cf845f7256a478b5cfd3a4b05"), ("11b03a01628367dd566cb44093765d7e6d8c1be462064b22fd3192c1c9d58940", "1ee72d1d2217715a86fb938e3cb82c9b9fc06092173f5087c56f4f11b00609c4", "10f17bdfd03a1595da2408f8b62d721197b870a1c6d9ffbfb4aec35091883b6b", "16756a56ad9288fd77d40f8dc940ef5e32b8a2e60381c2c44afac5929e032b45"), ("24c67ec002b62b9fc1848daba7eec0c3c27e5eb6c31d61674468a166c27ebe2e", "25d07ccc154ba09e8c6e2c2b8377f4d70b40bfd9938019bcf95fc3aed0b84508", "1cb08455c566e170556759b79c23e9f9f35c84db2326d748f3fad81baae5143c", "19f1ffa283007baf0e559485307e3cfe5a4ede31ffcb4a252ff085277ae9c114"), ("13659901558b9ecf92c1b3dc3ef94e7a84f0727cdda77f213abc639f903cc146", "13ac2ee342f9a2467f01ec0f4c07956f7595df78af2d0258c7cb662f24291fea", "240df2d465a896f16375bfb9b29b8f8727461e1bb01e0baa29e7813cf379e044", "2bfdc3f08fd27742e03cd390a12a57afdc8a9d6234ab7a8509ba3f7ce0ab48e3"), ("2cfc76597105a7abdf246d290be618a6c4a5c8cc643452383848f3e24a477c48", "28feda5875e2cdd6496c51f998861e4ae1cbd352cda126ddeadfed28ece93b65", "0df6662f34a733a40b3f830cb1e418f81c97baa08e922f561879457320edb25a", "1cdc77d8f6e04454323f098cb30b6937067c3a99e492e5dc9bc927f57259f5da"), ("18628071f57ab942d19434f1361d4a7a2ce4512d58430564721f6a755ecf8314", "220a72af952bda75d2f783ceacc578bcc063653cce0cfd4f8e4b2ace1479cbc3", "118525ab5d3a17acb66316815401022b664834cd4903268dc6a71704b8d717d3", "11f55538f3d566376c27e7141be0113d417133b405f244ce1743f9e75e5b7aad"), ("1d55c172f21fff258b4658ea37c97777ccf6de1803815fae62e4ab17a1764ed2", "1c057e8452190d6cc283b54d240d0afda6e9cb337aad86dbf52aefb99cb65329", "1ec2aec85b2636f36b7ac2dc17afbf917ed9cd6616c394374b3b8c086eb1133e", "25fefa0febaef7f470765c8d6fd6b07f8903e591f22d12591bbd3af6865e00ff"), ("03bccaed0c9496026d2a85b4056c716bea03069a666cd65a1fe363df6826c3c4", "07894c48c9f7c1670f3e5af22abdd1ad391e3e502e40cd363e7cae42ca9c09ee", "0674df03b70c2ec1e1517a33fbbb171af16c4daa10ed3fa6d86bc6ea9890d123", "2e427a0ccac9a6d4243a4f86b64d57db069ca357fcab580faec53e634e5dd243"), ("192f89857e76a4ddc7c09771da69aff93ce51d8a1aee32ab12093a83ada5e655", "08f3824c9d09f0951486d48e2b76b584841a62f8cc9a59fd44ab908f18d7090d", "244f5dfa18d1cee854934166fe9bdee652883cf0f1ec0c47f57b18e8aafc1155", "01983137a686052240bdcfdfee81fc7c15c1898d99d9d6d152a997a2b87412f6"), ("0fe75222a8af14d2874f903c3da3c1cf22ad309f52db0004419e1e2c66cfa36e", "1b8c34e9c6376e2262b69be27fd592a532e481258ed17943472758e6f328d03c", "20e891fa0e24975615ba5d43d2f3371568e46ae06cd7d07bcb526240ce667ad8", "25fc9db54fc6bb5c2d852b430782c6647f81a9d663f65b2d7b6864b1cb504824"), ("2af1a5f72629388426232d3797de7219d9d72932e7fd9a2a5e1bc704821dd0e3", "22dfe0df0c2795ee7509048bd7a5f0b7e2f2005eeaaace021934c5e334942955", "13e3f39db5761421498c3839a223610236c06805247f4a26a2edcf2d74aecda4", "0c03db0573ac439b9501357d9594e6601c1d12d725d343b7488e5fc59d53bc17"), ("0ba3f6332fdebae8760306c8ac4694e04dc40713f43e31637773c370a4e3d13c", "16324ac4152df4f4b066d7b9742cbf9da35711c106cfa28551e568e014a24e91", "0ff5a8af307c7f950b6baab8bd05d54f2f325c96799d4c9e567390609d1a4393", "2be30b04ee495d38edfb8d9545c103f9ec31135144cd599e654b7c48030d3d88"), ("0e42ab42858a42ab2e4129143729fd90456af1dbae83c3acccc04d44fe5e559e", "11e9fe84492fc67e715de3b3c8f244784f09f87c3982a4e85f5902c6398aa9a6", "0bd1c0e500c551f8cf527f6c89e91ea057bdc12a6390ba41c2d219c4b6898a3c", "0c8a07666c8ee0df923751d270839438f9e90b1f044c65472bafe00a32820f21"), ("05ff87420bec29373eb05b53cc090377538edafe9f60dd6a380869e5e0c948e8", "01de2d3c08fc5ae0ce9780cd0bf33996f918e1f26f19c99a09f95fd1071acb08", "0be679c90ca0aa5d657ed2e1c60d472ea2107da3c38dcefcf804906979035ee1", "27a6599cf853fe8a499c40d15c2b52d76a851ec5fb1453cd16438ad9275b20d0"), ("2b5c91feff914869baf54b7904e7a9e41729480871baad7458023f51dd9af3d2", "122f8fbfa90308e1f1a8505994ed6491faa13fba55e461096ecc35c17c43efd0", "2c86c874581d47dc8117a6749b722ec7c62f8bbf22cc427bf55b648cf69b3f83", "0d458f77d9a2acb81cb2d5f30fb0693de4e08cb2e5c2f682c740859a0c1e894e"), ("0ff0db4839f64a2b69f3871217ee9f0f6e12d1fc89b7d7f7031a89374bb7fdb8", "08b05e21a32bfba03b41a755ced461eff1bb480412c9ec2b1e4fc255f1c7ee0f", "00c4b189b24b624384413f4f94a6ec4ddac3bcaa015cbd5a71060110a0a7a9e1", "021684348773f27e3287f6d44dc1f2461cc8eaf4abfb0c84e58697fe2f06d8b0"), ("091b4e81f05de4c581f648ad2fc6a29d6feafb53b6ada0a8f84925a0a0c8c547", "0860ac6447a5d443965b5875e2fea3cafaa5369827a3f9f470e80cafd43cf3e5", "1ef924c387076e90802dfb6b72ed5d2aeee3b9e64a78e197e14c1abcbcef82fc", "0cb9ebfcebd8e10d68adafc00f9807d13521a9b90a775aa656802a17c9b4104f"), ("1932d9fceb5f186cf4cf2ab428fc148dbb7bacab5218ddfc1bd312980dcaacf0", "2b145c4fcb3cbe6e94b92722191bc53d64bcc012d6d87a087eb314669637e37a", "0790abad4dfc2bf09ca37cd1ce18afee603412f93c474e137acbe12e92561ca2", "06efe6bfeae57d48c16649dc7230af839acebc0982555653d31c3be16203bc0c"), ("1d670081d2b931d023adeb7d6274dcf3cd06068652627c1f2676a0154ef400bf", "0a50bd183520b1f9d8c4aa354af2db77c62d877252acce52e96d9677545f8dff", "0c2d283a911f52a304530bb067d76625952390ec99194c8a63efbee7b6f659b3", "14a4a61020de590879ed044b2bbf88a6712d9995799622fd234b4a2d1270d646"), ("024eb6bd4299d43a9aa073a99e9f38aceb8686a7a30cce296e89622e14457721", "113cb8f4f679d13564ddf9fe4a518ec93fed87cb30f8157967720d26a0fc3940", "1d7faff42f5ae5d36355b4a7e24ca391fc03c175651ba4a0c6a3f379b2da9366", "235c789a06465cba47db895afd6230fa773f5e7eaebae4103121af2babfbfe7b"), ("145180cc6657aaf8ea11141bbef52dacbc8fbd267afd888457f717dc91777335", "206290c2e764e4a336159088c4be8b1891ff2c15b18f7407935b7f2e55421567", "1b6517efb45852892afbaf734e14214b3d818e90722b19bab8b089d37be40c68", "1965fd20b83298a605285c3b972f6e2e1baaeeff111e1c716887fd65149a04c7"), ("15552e858e8fc33836869adc4f37ccffdd0b3854d75d51b75e75c2d49560b951", "12c093e791b39e0af531d8440a127d4a9017eabd0dbab5427b673382a6cc532d", "0d0035fada2925f0118ddab3a697f3054469e72052ba36f8df8e49fe26e4284c", "12a8b13955a0f1c7130d36fa679b27056767d90c60cbc05ead2a88bdef67ab9d"), ("080db7c133fc1513ce93c257deb70722643b44a0b958369de98851128d87baee", "2d462f2e79b488293e5c2ca861bf37a6a4ab31ea1a292857e15b347e82289290", "27b57006aefdd4820142d63abfeae44c40b2b477acae1c50758ba2b484be71a5", "195b9bbb67bf97b6e5c1b2e1677eb396e9c0568bd96bd95a02d106c2d1fc6b26"), ("2f32ca73bb4c528b035100e2120ebbe33363cda2b07c48d4a1090a15dc57875b", "1f5f003edd368ddf7ab348dbad5d44601d5160e89cce1abd3babfbf2e504da6a", "0d580046077db0ed1ac625c4629614a3874095b44c424671d42e145927e3e904", "07e81c88776f96ec3ebc747b44be7312fe0f3f710cb133ca7e8cb25660a866c6"), ("1b36dbf432c656a51c9283a308bec6f0d08414c0d890e03b5016ea1f2d97cff3", "08fa57ad1805819d670bd6ee738a98bbdc4a8ab563fdf7e7833554876e47a8f1", "0aa99f50bf0d89e02452d8907e94a517afb0580e0e36f57dbb18db9fcd5b8c3b", "1d0d925a313046391caedfbee56bd5d9d022807e42bb344171dc75a0e75c01e0"), ("0cc27048d684fb70af574492cd656bc393e67c5890d58bb844c9e11399b49ee2", "1a128cb376dcfe5bb0ac982bdefd4d814c50d33c2102b88b2eb8edaf7e1d5fce", "105345c905ddb1628a9c651a17f9848a1e3ce323ab8e7f019aa0e453665c17e6", "06cf6646dd02422565ef198de43f9518bea985491f259a040928ec40e1239bb9"), ("15e6749b4f3c95a0e41f290722743f38eea93837f07b7c35c0a8201ab5f90a64", "2fb945b038efeb5d5d229bc42fb50d3c6c1d850a30ca67dda81f49ef558298d2", "11980ec12bb9259931aef4a366a18834b6f6d45f90ff385ed4514a826f96af0b", "1c38e05b37fdb3302de6201cbcd20cd5d748eb1ec08f3d7f384177017991c215"), ("2525dab25f30ae7cada61e9cd6f09653ed217be60757a6b275e27ea62d5e40c9", "0ef9d36a1c8a123e77b3a7ef2fc139c0e51b8b48e02d6463e621d647a3dde218", "02c1001d0dbff11abe2ece2ab6a5cdd23ac9d168669759142fa234434dfd7dad", "0fba87931d766189d366c79e9a0b2f5429cbd3365f9be3d185927cc0e6da7a58"), ("146fd01d47f90f4679909a1a5eb75f5764e28db8faa83491856d1d7276afb16d", "206bbd16ebfe0bbe5d67b89ddbeadb9e338635699d563009103b3216ba6978fc", "12c14e4c9985865a3098e559f200fa1631733ffda4b8eb5c911fe718eea99fc3", "1c5295f0bb87c9c6084cee35b08ad9b2554ccd76ece429e85ef22a49e538d46e"), ("16e11f4a66d4981390bcf5b6e55830695a40d57c7a4a2731b395eca3c92cba9d", "1e2260c1a34cade634e07fceff4b14090b8309049ff20c212336b1a4d21517a2", "267b581c62f7ac689594526425bc8eb85fb3e8e19f89c85154c0288822ca531b", "14a82f85959a012b317b8396a66883b014da6152ad2468eca1608591abfdd736"), ("0392e9d6eca648aa8038231905d849a4e8ee16086db929d5f4b9c0a617588d55", "0b325b8bb97ec13ee7343446a3e7d24917045b28cc9fb6b18e6940f990d0234f", "2ed4058472e2b8635cfc42dd01b8f4bcd7b147280afeafd85cfe995b3230b06a", "246747c0f97e07cfee40139877d7f4ab88075287b74135afdc878b76596f02ea"), ("14b9adf7305011ec8e4fdaa4c5533f98d0a7c44d02a7c20de0ac9d786c235b5e", "1f76ca4b7fd05ef42b7cbefd58617e2651e35ca21b504e5b96c09ee0c31721b0", "05eefbad436a2e1a6ab25d89b3d953bc39ec963eb4b31bdfedd32e7735d7b208", "0cf4bf701d38ae174b15c4dbd9755a8225b6c419fc745e8b734114a7bf961407"), ("184f1861520bc28455943012a4a9e1eecba33faaa2ba87fba97ae2131ff355f7", "007a510c678e6a57ed46c9551618e710ac359c5328fd0c5a6d6639fd7dd92dd1", "26ff6d216ff56fff4502e59fec3420c0b7fed571c4c92af6902de6cb0be584df", "1bb7e23d6a0c7d94fa0136872e7479678cdaebd49487b15a15ba7bce95660473"), ("277b10f0c888d772edda5ec92682bd2f727efe3485332dfb8d8284d672bdc9e4", "2d4e936a068084a1a390d3c08cebaab977647c55cdc887546f58d19f428631c1", "1c2fc25223f3db6e7eeaf1b978d92c26905c0fcb98647e66f4b0f335b42712fa", "08f6b4f8b4eb9241054a8eaf15f86f1732827bd2b94bfc8ac47f7ddb42f29e4e"), ("18f7ae253b708320d9af282fc18f2e102210462ee4b4bd491b2b882b215d756a", "1c2ae25025dc791f51f361422bf7ba1373c754fa63c45b194fe40ff2d8724936", "0681ec326875d5bb8287b4db609e54463f25239870f353dc856167c26f6e8900", "006b74738bbe86d2cc7e51420399f971a93d371cca1e95f944085efc81cf776e"), ("133d187149eae1e0c1b748617c8c54fe8d46eab95dd73325594f4bbd57db5b76", "16264af4a0542c04f8e34cfdfc51ca3ed82bd32456548c8881d8b19d7511f4fe", "0d0b9985a6412493bccf5a02d10f06b1566be28f84eb43976d25df4da4740d99", "29d209b164fd1eb78f5a5fc7907382840b59f0dbfb425f3c60c68c5b69ae5c0d"), ("2c12b8621c0f34668fd9ff5dab537a55c30e19a19dfafcbedf59888611919119", "23f471791ea4a3c2e88e506c60db81b59da056290294d06ff66a23e3691104ec", "21c321504b6d3e6b33f5df42bb2603bb268a8bf15e4ce48314baeb06a8c6e290", "0e9e9386638319ab066c0e088f6599a909ffab2c3948c814186dbfee67a9b3b6"), ("2597e717b6dc4603a00d2643c429f9a1dd1666bd7e77cfc8fd4bd2eed37f59e1", "29bcf654f992b188e13ee120233853d8fd1f01e6394e29bdfb63e11c709a40d6", "087b3efcb0c153b2426e598bcefde55ddc88b67c4b9aaca060a4038975351a33", "049f755993ae2004e004ee64dfc2bc1835353b946647d87303b54ede1c720605"), ("06ca39476348e9852fa336cfefcb6de29615a93944061f389ab4c59f81e6da10", "23b556badbe608866487f73360bcd756b7ed95d62c01e207265acf628c860269", "171c6ad745c22014dd633691344f35b4595427bb458309b9ab9c21bb1cda843d", "22ffa3f9257adf5375daad26a8653cc7170576df7413683851354bdca13f1845"), ("2672e4600ecaa000331ea572d371b32cd855de4021d51ae685164739b4827989", "2d9029142123da17efbe1d1abd523ad586ad444989febbdad81800d2ce7e146e", "0a27b773d65e11d6a47db1605ccb9295eec3cfad4a84ab3b655980198ac365d7", "06a746d594d1c5925e83aea504b392e516a531b1f0e547f0971920f7cb318452"), ("180d5b4715d153e34a125a2b0c84148f4c45550318b6f6605794cfdad96df41f", "16faed3000792fdc51bc7baa6a5bbafb6fbde33323babcfd6716b6c79eae3864", "2df71bc1a01ada50b540dc46d7c82be60f2e8a9ef89f2355cd2d3cf3dbe955de", "2b800af43f05f61cdd19f5d3249e7b0ca2ef5072250e55512b05ab990049a464"), ("0b1b46413923d606b1e74030df2accba026819b5a086d2b145d80d685ac573e4", "259016096926ab8451af979c4316804c5089bf46bdd5c441e0da4c6dc9a1dbc6", "058001e06b4facfadb49ee5ab828816933686c2d44438a6e68111ef5b609dd92", "2ea1bf104056c4a4f56d98f44d83ff346562f6c3802dacde7db6ffcf8d5486c3"), ("04a5e79b198a8e5772247416d47aca22894d926b03b8a054e97afb61b66fb65a", "2e7d711d666e36996877afa43cd536d9b4d6356ab3fd790dc48c5510068af919", "2c7293f6e0d3c46087b86ab00a37d69a85b0662146290286a6067f08b4119652", "20c68ee0e06b106e6e6e2cc472c6a682dbc5e2eb89940a0349c74cf5e03ed96b"), ("2391069d885354a0249e8c439fef2ac2a231e87c1dfbb116351b3acda4e083e6", "2ebffed2274855730f8170da70199694207e6b220a48bc6cc90c7ab11bb07134", "1f9fcf64f661d1627b6d8e5173fdac18966807102452b520cb699433b353161e", "103381c166edb6929f2568139baa67c09a70b97e658a41bda457de0bcadce778"), ("2c1351d8bed61c222b409e0202b4ab09ff519b4a0a100a1ca270a6add6d5fa1c", "0e1c06b0e44ccdce6dbc5b79b890dfbc08ce2d6f3171833c2079ef07c8bdec82", "282b32542fa9d1b4d4840707d46d6bb2ca640d6b932ad383eab9728a66055bb2", "00531fd32624324225d99c9fef44779e211596dc8bb4b7c74c07eb75ff137c08"), ("1d8c91571a28931bed84e04ae8778055c6bbcb2c247bab0e3faa7f167cd7660c", "25433837d538b054f8da1caa06fd22fbd540e2d135444b7ed330d2032f21d7fc", "08f176ebff881433eb009b44705bc2c3864b1201b5193cfbd58ac53d3bafd8c4", "222887cb40bd1ce1eebf300b46ccd61c3dc3ad7a4d8632b6a7859cc9b346973f"), ("246c30bf7647243e6ef05fd9db48bb7739bafa4433536a265584315a2157cbb7", "0d9f5cac59b5ba4990bc4ffb645deb7066ab5266fa83163a6ca43d74c047b67c", "1a49a55baba68b603273b7527fe33142755bbad89464213b16cf21e5a7310532", "1959bb14e87526cb4a3f1f64dd2fbfc72f7719f36e4b29e6546e9f2bbe5f1f53"), ("0c19418ce3798a1eb26e4e22ed3ad9548376059142506b10877c619b1c70fefa", "05503d21984bfdf1051958623e5b206eaa39be7830c9c1e0831b345c72f88cb4", "1b1a13d1a8728f0314606cb1decd242f24d90dbb702ccbecad58d30847de5393", "0436d27e79fbd1ff7946948bdf3268b072a2b53747d80de8f4fafa1c3f2ba558"), ("026ae5817278a32bc25322421fad10195aca15b4f6a6e0accbcc056a3600beb4", "1835088bdfe82c8166d6180e439899e37d4369a4bbaf915b26d9f1252c8081c8", "06f3f0c3c655bac2a1dafca3b26c0f95f4d717b8279861164eadb7b1596add92", "11928e70721a122d1a98ac427bc6cf9d2c7d4e4c63287f0e921ef818131cae87"), ("18a7732d553c6c7bf1491ad53abff976a83599d25f60c4eb151a64254886a6b8", "2bdf934e4b01be0d98aab000059150966d91753f3c8bc5d4428ff3bcff582dbc", "278dc7767edbd38d685df5afab1bb84d47b20e05dda54dc8d387a45352c3bf65", "250e3b0512c7d47ec3d951d39b03d65bb63bbf67d0db798145892d3d5380718d"), ("2a1d5587e3e8d929da6571b25c40478178dbf73e44c9cba22f0539c6a632ec47", "1598e1e455856d3cb9a637553fd1d5892855b550272b3f2416690e763280eb77", "0edf178c97fa23088eae17bc8c8f2475b3728f3f0b356ec5d14962d8410b4412", "001610ce4b6d5f7a7ff845ad90b9982288626723d73ddbee38c17d6dcd60bba4"), ("19e3fadbd600e3755da4ac3dfe4f74b41ba17d0b3f0fe66cc8dfb3c5e40f878c", "169662e8c17930cf2a93bfb6144d4360765ddb457a286cda97ef7fdaf184a4cb", "1aeb77760aa1cfba10a57bfa3203787697a6b907b52db7f26387820a12681e82", "06126f923a539599078f490e5a2a6a4c8f7e92f2c48bd8e77e9117840aaaf0df"), ("27f5c134b932c238043b32ae3954a0ea5790feb8ca82953d86398df87847ba9e", "04154a17091bcb9eb587348c0033740b300d6923ef7d28cd6949b78a9c2061bb", "0fc4fac796298a19d89bad0103e76096c805c4a4b009d540fb874eb8360a1d02", "0fbcdeed51642ffebf14003ff948f22349fbdb8bf36f07b1ed2219c68c6e3dc4"), ("07322c70252558b31f075c8f130777fcdb0b916190b6766a2355c62d67091b14", "01da7c0d17e64df4b4463c03b14fca7a2146304132afbbc79d9bfc53cdf08857", "0789e18c87276b4b42618a516e9a41deb7dd8c9e5aa4b27d1bd73391088205f4", "27960653c00b752d4692ac7521ca55082e7e3e5ffa87caaa83bb785d2304343f"), ("201e307d26b96da51dddf423b5b0ad602edd065eaf8a5ed70a121810713b0947", "15d899f36f47d3817a5b0bc16df5e2e887e966956a520b6cb866a8251d8b10b7", "277eb0aa6289fd8ba9bd7d5b85369806b878c0e1e16dadcf458bf701b4f3e2d0", "2e8240adfe55184e020d7dc68b6854b128080c21b6ae1ecb350971ed082f8802"), ("2c12f554fdf4c65de50f846c45eb6cb23ff20e21aec35631798a91d18e8f0d14", "1a2affdb0ab0776086b1ceb39466ee47b3c537ebb720ffefed42a1cf95c65193", "0a415bd603ecdfbd5dcd4dd1085dad0aa70a7bc479a4ff19f5cd912e7694f4d3", "02657bd24359152d8ea277c58c3eb1c203b34e69b9966a236ba106e89feb2f4a"), ("0eddbe66bb81e7fb4a68e802ce1e52eb46ef2a88203d1aa3ba77a33c40f87e68", "2d970174d92f7e77f8b7279625c28413eba037ca028f2d3b2a04129a0a6af764", "12fd094b2e18521c83b2f256daf6c3ee30d50e8c740f578856ca924a03ddaa3b", "0605d9378630fbc83bcffac0ac0a90086a8e8f64856e7094ce8fac2c141f4028"), ("0ae1531069f490f0783242513a2f988caa32abb23666cffe2ac77e9240e2b0d5", "0167f12ed75f9e9155387dc86638e6ab3b01139f07a04c8be8c43f68f1a29202", "2ecbcc693dc73484392bbdea4f513f3f07b8d498aa69165d6d8f679bb4792f2d", "2c9cc13276eb568b938cfe65a36e458e2378faff4e28d000a42de0c78ade5bd0"), ("284754d84da0de0755cbaa1ca7c60bf2b4861de5d431978912fdd91eea9097ac", "076537a164e20f8bb9635ab76017554fba181da55438a94a8f8619dc1873fa63", "05a15055a43a7fd301de85d25b189e9131e74eb852c7afc7e97c12f50f2fd3c8", "0f78258548286436be28372f83ce83cfa1f82fb7ce2e1a18393ee65419b9afa7"), ("075412dbf30e0f4eb62904431f1328ae8efd8ae625b8bd9ac4ecc892a69619d0", "2e71856030037ab2c714911c1cbc886410ecfa8805b97e678eb26a7a89a1affc", "0d573f0adabd89adf11b3e7073ad7b29113c3ee2f02a69b8d9e0fa5144fbc830", "23dd83cf0e488a1dc115fa535d16697a1f3fc287ec1ebbb5f2fc94f23886e31c"), ("1d0d0a0e810905f11dd90b2a64a5feee7ef532b6fb869455e8088b30662a7cba", "0185490e314111a0ccdd48b5492e1b0a76aaebd43a8d8d6167685d9ea12220c1", "18e349c2d38fea77a5ebbdb10a1220e114c6de0de009efe06b36c155681b3363", "225330ba04cbd735565a3c1e12576659872168faa58c5ecf6e41ee4f20902639"), ("18729fc7cfbf172097915da97e2db4c8a50503c932483060bbbb772fc256ac2b", "15da08b5e279d27cb9f126047d5cebcf9953e42d55996fa2a03032d2481f57d5", "106f6fa530849a5f22c49bb43b78249827b1a50784daf2ba737308a008202f70", "05c4bf54419988b01913473105135e2e0735434bebd2fb90db58fc7b026c40e7"), ("1a66a2a9603dc14a806e55b764b108be7e53ef31a2f0b3e40106234cdb5a7f66", "05cad5353b18082818eff04f58fc70b189d1968142fe9fea21005f7239563b52", "08d83c3abd85ef11d66da4683ee7f1afe29bb9dcceab5ddc6687cc3dd607d3c1", "1bca8fce04e8aa7137987bfd69bb9f9a75783de96d1c50fd65d342f9bcff92c1"), ("2c196865f6bef2feb3d0b9dbbca89929c2f38a4a0448bf3b7bb828bfc79ded1a", "1f3e67097e778a22b5e2b7414e06e810490d852efc7caa1cbd4431183352fb48", "299cdf2677d6bc32afcbd51f8e748ddd232f505d9bb030e2052885b535897e2d", "255b0d97d7e906edad73807a8ffabd0a8835068b5cf91c6cd609763f59ae9199"), ("234bb74972ecb56565b43691a42f02a212812b7c00ca7ecde10d6102ca00e6e6", "28304e80795c34a6fcea9edd654b860702f9ed773f880e7d42bece90e7070f6b", "1c052c78b927f82cb2378b731c9d335a191b8ad31f38b6eb110fd32eba542dad", "0c8d1e4dace61dba78c1396b3c231ccfcdf5ee33b84dde784ffe48af2809a819"), ("0ab7e605c7b03082d6d6dc5e68cf5397052115b1aefb766510ae8509450d491c", "2c313e751a3d489f4f0df8cef63f22d4ea4bae2a25ebb6dde846e44a1dbb0ef5", "0f3178411e068c3f28167bdefc55e43215a07b569ba3fd4520769eb2a28a2869", "154122975b51a628fa77a51427c3dd0c617bdb68c8c4a86254bf99413e45fd96"), ("27117f65cb93d3b4255b9fbb8ab47caa4d26c1c4f063103bce59de7ffe61cabe", "1e430ccff13155daf9c5c3c3dce22f540d1c96c36f970c83a16782308c5aa814", "1da780fdd12cf6aadb7a882feede4f1cd3e854fdce4ee918b4907f32a186b36e", "151a1f6f0965cd7f6d7728f5d5281f94e227944dd242d2affa688fc1c6c4e8c5"), ("0bec123f6b5dbe6ee7b0c4dd6f56b90b9cd179512742ebfacaf06978b3d756f3", "205b8eb3688e29c4eb0eae6161cc48a914d89d688e59ff54ca17b82e89f8bfa8", "08740d4214ce80254f59b82ea49901032cb159e69fc497e9bf460039b46be17c", "1bfabcd6de45e4be4fd0c734089bb6bf61810a2c608c442fdee70c8d4fc454d7"), ("2868bd71c9dc356a80ba7acea0e7af70e3559ba660c396986b1aa1223407e47f", "15191ae37326d1651eeffcdaea571765e6f617e9ecdc43f2b1f25cd41ddf8a1a", "17663baba18464c543fcb2293d27d5a9c4f4a2045b5da8dc1d1968f28ee427fe", "0129a9ed97d8701c741dea1ae59063aeade2653635ea96f0ac58c4aa410a9f2e"), ("10404413e081dc063c2a60b084e98cd2b56cba899f6ad5bb2fb535001bc81fda", "1e5c1e6a8dee63ead5faa01a771938cda05a8969f11fba672ceeb8f863794aa3", "08f511cd5f32f73a6ca54b67b4550c9b08959705fa58eac0c646850993243177", "0e514536283a57b8877793822dc126aacf10ee37f9b9bbbf1b9955f0491c11fd"), ("2bdd8ea3da1b39f20d7e6cb9746fd69c812db112253504d30db760a3b8c00e71", "13a8e6d1fb54a888a0b35adea75fd687c6962f1af67dec7623147365362b1c74", "1acc1157de24c9fa202ce0162c5bff9b538b0994a01a13f398ba61fd81ee14fd", "02b9eb168daa241deb288628bcd0515d814a944d1bb37f9640fcf53fbfaa26a3"), ("233cf422ba9a45500385c10e3192f21993fac18658e48fb56769b49d1c67cce9", "0cc6484fcc0ec67a7681a1fe2ffcd3bcdb1c3ca505851c0a8d9f176ff9fbf48f", "105d6a71754d245b690305f3549aef2f366def5e3881616fd0b3a76d20dc9c02", "2aa25298c5a206b3464a6e4e74ee30840a465411076f58a2038a41be72a9a15e"), ("287a986c00cb93bfbfb139c9e046da44d54c8437ab2568bff47e091321b770a5", "25349b33b5e4adf44fb363cd9143e07f01efba620657298b9c8a400720ad6c16", "1cdde8f351286666ff61d03fb79db0f67c0396fc72f19641ad593404f7905153", "2113895f586db98ebb985f8f8257af2995665a53d96796869909433c45c2edd0"), ("090871a3b7da682d70a0cddc7fc2ca3603a097b3fe1b138a78215c653680930f", "1374b44269d126f4ec0d2b95727f77d6d1ff1665779ea364125e677b28f5eeb1", "113ef9dc0ebb9642fb5628677b6684c3898ebca8f50921b5d961fcb05ec95f8f", "11848d5c68c9db97c6cb2c5bb18dd5d3bdebb53e5bda2ef5504f96d7f2457d36"), ("15f90d36873479ef54caf0f0442a7ba468d5a242ad719f2e43c2545738bc2e1e", "01f3b2531cee74cf37abc7800ca6080e0be68c83c5572e83ef830c9784f4d971", "1250dc344c04ef4261042c6cd35665b48976bf427332bb92090b9e9d4987492a", "0db59cc96dc544bd768097c65fc9666b4adb882e41530f37962d21c69549c247"), ("1076f7c0f0a9210bbfe374af1d034174bd3ee8e425e90ea606c85920efd898d8", "1d9b72996cbf7a4b83c33112335fcb3f6507050e29977258bbb5e0112c2b7793", "144f13a3c740d7626a44f85ce84f107ea2d24b3e279fa5de3fc637b120f0a228", "1ea9a658aab6778b3f3ddd26c7ad13dc101660f26fd4bd208fff12efa9fc4c20"), ("001278c3da7f14bb213ff9c03e1f2a878f05b2044accd3266e6bdabe6d6ab207", "15f7bbbe184e1430b5a65e0b9d3d1ddb1080e2d9e75b9af2e535516f065b7d48", "1a517415546c21960bc2216bd93f45577857d9eaee2b7aaa6e67599679ea2c01", "247492b39702f0221728d815932b619b61d6015164f048b0a00fc2665e4cd325"), ("2e564b91ac474c19e0a954b10da814b3f12be1f0f3687b08dd8e53df65b06025", "0e532bc5382716627871eabac1235a5fbfd4a4f7bb2dec2b57ca397b737aa305", "1f86fbecd295154143567982d0c691d91394eae97aa4d415c8144744af5f5ac7", "1b5d888050d4d9ef104898103983e741188d4fc3283eb66ee9cba1dde6c3de8b"), ("00f476dcefbad478ee7b31d4b771ac43f8ae3c45e31b51d25ad6c648deee6f98", "03a9d3f01d9ebd2839176a0c008782bfb11b49da666ae530c56e292a5fcf5f6c", "0a4c9a172448c819cbc26c897226e5fd33f3407498c58a235efea38939783205", "2597186260d50cb1cb84f5b0574d44416023091c5277a368b77ec05f2dc3c302"), ("0f17c8a292f88b31682f629b6736ab3cd7b2138754523453a93c44bc409c14eb", "2aab4dd615e43b9bfec4a5afddcce9ca6327d1bc11f6b0af0198196a082b0a68", "3001856f0a8350d288c2696b9ef5b8bed3b1ba5f4660081961baf8582050888e", "1df5543be5b7ecd083e5fdcdbdf857dfce88be16135a97de01788e1dd7925561"), ("25486d9b2ea21fa69a624806576df3bb6d23344609d8675795d641ac5602c756", "042adcd2a0d702f937fbf51065a78110bd8c06aa71e3b6264aec405f523bf9be", "243ee26f085060d4956a0fc50699cca9cf5e2126ccf7c68e3e4c41cbc181d3b9", "1937793976510a657ef8e3fb5ad96809535c5603cb70d07710f56dfa8b786b19"), ("22a426a16c25e1d9327ea93c8c13eb6d2d771017ad3a77bb45aa9dfe8ff5c660", "0e4995bd9843acfd21baba4fafb03691e61bc1116b3071a4d3c5ddf499f06e08", "2d0c493b5794bb0ab6fdeb35d2112b93036feb43ec59c2c4933402b99fa0a0fb", "088c82aa4e74cf76c20def6e8225f993a9d04670aa5b78c6bd749937b196bf92"), ("1d35a973b949cf4811f043ddc2cfcf803aea6bafb757490721a5e65a1d23986c", "2bbf3d004b590c1cc8a24af5c3dac110d01855284ba6a56591490a9794f28446", "2657ccabd1bdb8001c35465f6c0b6a2015d3e1c7ae56c66ec20ed6e141a82d0d", "18d8300b7e0d45fc1cbef186512a0188128abd577bd38a1b085201c84ea75500"), ("145672ebe030416d249ea188df5eab72510b599e7a26e360da9ce9f97ab2121a", "03db6bda1fd0dda76631749aa57c752a9e2f7c98e031155d9026b509546edc70", "0d3acf34372eefbc599998815b0c6840bdd2ce149d342578879302de1ce4aef9", "1cb85b201d916296587e27d001b969d13a0a67d0a902bac82e117ab45b546a92"), ("17c2b21747fd037084d60c4678f9e35e6f97927e63c109b799a29faad89c6430", "1be50fe2f5f8bfdd89afea4540ea5719a47681790300b1b96ca4f5ae112c31f7", "2d5b22c90d0e66bfc7a1665e4bbe8313ccebc9e4deff81c6f92948e3cec7d091", "2fc8d2f239284867fe0fde1cee70eb846dc314265ab6b8d24e0663cef4f3ea1b"), ("129059e6ba10477c215cccddbc0042e235750d8f0413cad14df1517d4d4f0566", "1fd1ed56f45ef2b6bd33d60aaa8ffcb20e344740449341d503ed71dde2a34cad", "1dcb532689a8048ec7441611c885711e04bac6d0d2c66625699bc5eb879e99e1", "174887baad58273432782f38abc8275cd1cfa1c5aa7252b14dfa768fdd5c8d95"), ("11fd6176687eb2e45d61fc8ff7939ca33149af507c307bdf2e9520159174200d", "08e1ce48f4e075fd4105acec252b92cc4a48c92082499660107d82631eb9105b", "2e700c76cd8a044ed2250f4513702eb0a234465c4859e27cff04cadcb9e745b8", "06c74510c737c7c2a98882a27f2f74ad42eefe74711bb08b8e22f16449df0e60"), ("0e0a8f9d1c6ba5cfcefaeb8810f9480817e5f1ffbd2d7a0bcafa3106eff85226", "04cdc874dbc75b83c65539df0269a75ae9455eac934b8928584daec891ad6f7c", "1ca97637e6ba88f899da21c22ea61afbbcf5b9862e78ed367e4fb8e02938f79b", "1427321290d307b470cb5cdabbb8774fb97923fc678739d479750d7c2031eb2b"), ("18ee85d17e686091e4bcf5299ca93713e81c10ad80b72317056095ba6f397af8", "0be1dad9b886fbf7823807f2744bf540b40ad64065158af95ae6be005f97eb9e", "018799754d4891028aa868fa6d5e45af6631c7364f8d843b25dfe3da64059e81", "13e7dff38b254f60c5e8dd3a83ca4373d35cfd89157db0bb91c0d03c514f099d"), ("158c101de69bb74e7940eaf0849214e29b586796085384435aa20a66f63378ac", "0672285d1760e5681a5966cf328585b72c7344899dc154d8cc5f20784095cf5c", "266539f19b5681d8b98e1f9c8e93828284b9f0f244ca7246a14a6942e832baf1", "26d091a008a90d19bfc8ba1a16d24d9d5ff49bd01cc2f31e215ef7b8bb4ac7a2"), ("2556c861c34d61e59e94a644c5c5af6376179e610f7e7db69011d49c4c7f3683", "13f1591e88ffe14dc13dbdbe57bb1fe81b53fd452236915e8211d10504bf439c", "0643ba78dc69f321d112fee7be7d6a4441cd19aa4cda9ca1a94de442b7232fae", "05df59e372ec1b51f8a3030afab698b1b7a6b84dd1bfb612d5553ac336266367"), ("12a0e0cfe5b0e0778e9dac77f09353cecad19dd8f590a93ad5a6288fbd2aa684", "2d5a181a8b2ee872453847c4f73d3008fc1a8b17324500d3e0f559269e42c01a", "19e216708ace0040d5b8414ee596513a733795199180704092fcb915c7278ea5", "2f88b65be4eef36aee83cbfcc3bd92094579eaae3bb4c3e35f3699b227d0cdac"), ("13bf051815ef77c369f0002a665aea7b645ff98938ee733d961a2cf13290b8d4", "1ec7cf02a233fa3065b44d88804ec3b669380d2dec45fbba60639796798e434c", "24806aa0c1f44c64dc6d8b9eaf37058547ad70c65dbce8b5a95cb5487df7374a", "1b72676ebec29028fc80a6f6cbc00fde0f668224d66cf8e237beb869653af705"), ("1006738aa30f86fa373f84b71477600ffa89ddcac3f0f424460f510555bc8001", "092f526e9c8e8519ab2b9f5975eda1f3098ad6b1e14d1e2e3861db4ca2174bc7", "0c19fad6982a88ea79f85d680edd733df742bea722d8df26930514e56b8e41e0", "08434997ef0aee7a000edbb089c800d6ddb0663c2937c32af8c8aabf718f3a52"), ("16d1671bf73a7b40e1502c3979ed24e15d64fc76c26c966e9a9d4cc40f25ad27", "18e5ea946f99a3d467bf8e85c8214cff0a2998b1a0c05bfe3945321fa7be5505", "2eece68a912a38e0dbc3fa928fa889f47a4f2191c23e64092b7fafcbe6f0dee2", "12856c0095cbac510193b0f9d60fdd358017857e233f41979069f7b2bfe732f7"), ("25dcaa01e246dcdc1c7549aff10c858ebb4f3e0a48438abc6e156634d94fe136", "2a5e39cad676b71510a9c59b1837d7e47a150ed5f7bbf118f8c350947be6f8a8", "1adbbfbcd6b207e8d52666ebdf9ad4b4222e0083478463559c81ea33ca00de7c", "1ad7efd1b5f303ac942ea6e0aff3f41a67f6f7166b5665cd9c14f067144fe9e3"), ("21ffab9b3889260ac74967768d1b30dbb0ea5e4295bf8ef18d41796316c5a385", "18ce7ec7612a7b3b9fb12bab8b8b37bf0fd1c67f00bdf3f67e68e2c480bb83cd", "13ac549a5eab5de0e2fd548317698027158f2adbf1c387c588b8b1d584bf8c6e", "1c9ea41b776d1fdf95fe1f9041ba3435290356648095f7264a997728cfa10e04"), ("057ecd3fda1fb42a472a8e334644209123651f390ac6340cc6822abc443143c0", "1e5334f93ea79c398e5fdc6c53c9d20882d0d73355e8813c585b9c82bd81afcb", "2ee8857d1db024f34505427e3185523a70b92b8e76731a6eb417595c99b6255f", "22f87925038365ba1b7f707d2a69395adf0657f858721d7f044ea9381486add2"), ("21c588fa784d6be87475b65f070d4fc9ab946bbb358d7d73b00433ce75bb9dab", "1dbb11ffc9e4804f0ff08b740b8262b652ecfdecc0c45514e6d018a81226c26b", "2ae2b9997141fce54370af43432f93352de7b24be623e405164fe8caf53bd86f", "1426a510d83a9048a53a261ebf1de694bdccdce70698d03b6b337dc377aa87a5"), ("107f1014e7e93b4f14e93b1af81d1d0542737f0ed6c3e86bbe352bef7e45f30d", "139236cf2dc3d78b90e11b23a527f07a0f8745ccb624586529f5550840e9d376", "14d27e23a93887a8ee8a2d78664597f5bdfcc45c4ee8d9a56b80c58fce4863dd", "06bda36912e841edfd0c106095d28d7e2d3061e475c88763b233f9f29a08affb"), ("2395527c48f4d5c0cf099c5a3cc0f048696d1da65a955bdc5b99abd98bc4f6a4", "040ee4cc76dd183e1cbe5f4d194991c89d8ffab9f8c0a5e21d4d1d701c0f38ef", "06f2da944be518eaa7a05f861461b1b82699b4e3d38404d2f87b24f901b18dbd", "1b19deab2ae68516072582158c76da3e5ec0b4abb5f6f3255222734eab7f6837"), ("154d5f490863d99889454cef34b4625763157b2aaf95115e435aa39ec6bbdf84", "29c3da98505872c42ec7484e9bde7c9b74c1769233c72aa123d48df7706d8c33", "1e92f775070a92b52f8d64fdac04bd219f8b732ec33a22072df06a073a65c9a9", "251539cfe0ce724f58ce25fec56a884b940277b067f581fb083279d94fe84875"), ("0b1d0f6737cceca2a3e23980e57beefff48fc854afc9db0c6f79046466d05d55", "1ad11b0f3ca4dd79b863939834cffbce63b975cb0e58da2c94c54126fb880bd3", "281fda0190a3b386eff9e69b0db5848306a1bf59951be234f7edaa9be0441ac6", "19fb7235b83e100fd4e29fe32ef4b80c821bb9185cf33c77cfba91e5e06f1aa4"), ("2c72ee6815b6c7d91967571a578641d3cce684871d15a03f1197107e1391182a", "130ad01d387b95793581d318fcbad3e1000974f6694eb177406599cdbe04d740", "29034d6a19f2a7e4c760f8dfc0afea9a13b7a8edf6b022864308ca83c1bf99a2", "003e6cc363b5cb7ab988237fa02d22e2b98e8ae8870c91f0b422a00414baa271"), ("1294f8b1893b3e27dfbf6fbc92da26064c3cc0aa00de018ac1d726c164cf4a34", "253654623f75670fe7ec20f922e06a7890e0b8c978c77e739f53bc550af56fe4", "05b44c916d94cad2a3856b748d4499cbeaacd0121c4304b166797840a06f2204", "02ca411eccc4f7a4d2871f1461c20648181afadda8086abfeb583673662e931b"), ("24243afdb03197a9c58db00b23d6591894022643fa0142d1acb5bde754d5ab1d", "1a25e18a2e84310d88ae340a0df9621d669d3c4052e1af558cf90c707eda661d", "1fb97d2974bb3b9f8fb1ba16311015cfcb4a8bd85c1c6bd5fe48c4a435451942", "1e3827309723a14a0d8050230a660562215a599ce02c4a8b0a1048492f0e61a0"), ("2d9498987ba4a3913b08ebadacc0e035fff6171b6d136f81e504f9a8e6d08609", "1f95c1fd10dafcd469b340843232b1a45dba1e65a56887ad2834f908a334f580", "2dd7f4fce54068f5ae4210be930088e3a0a67f7568f7dcfe59aa81d0715d4ac8", "043456d74437116133790a82744201578da3ac0eacc0564a943b4523ec7a60ee"), ("1e46f948fed57e53fd693cf2e88e0012a432fa2cefe73258db4f769fdf9d3325", "2d99e0942aa9a23c31e88303a5f542b388b1b84253173c22e037f0d781afa154", "04702fee0d763261803ba7dcb4db0357b3b276c93945d4d2ae69e4611c019806", "2b803b2b9f3ef7e40e68abcd324b45792f8e88d5e31d12db251f2cc8a77e3c58"), ("2dde9dfedfe2273c3a29a4fb46f334f03f8ba88f3d6c111414d862b3da52550c", "08e0084617f1f8db17670b84af3e3cc01a6898720074c3ef56b39ffbea6cea55", "298bccbb512da1d6feb2db817dbc7f2ed3ebd76fd284bca9f5924273191a30ba", "2719343ab4e391fc38012931bc7618e8547ef06fef18dfbdd7153037cbeca2e0"), ("00b61a680da9c144a6efaf381c5f4ad0c94c099d6672b7acda5d1ccfbf75ef19", "2c48edc8c01b55229a43a8df17106bf90f135ff6ea9b0a3ce0df6b338d5ac0a4", "21734b3fec0c7318d09d6fb413c2fe6002a41e8c51d7f7d40ea42acc9215dffc", "110e70bc19fae22a7d66bd84a4c50733f7de289a20473e6d08fbff3540814205"), ("0873ed1f1c5f0f82b0dbdc9ade482f42e4cbc3b4542b8566544b00211f6774cc", "025fd2f851ee77a82519d8e6bb8756c2b694feff7a4eb4afa1c87c47fab3fb95", "2eca80940f43cbca8a7570fe4598ccc9894578acb657dba91f29d9b03fc0ceb1", "2a3449bba31aa77c0895ec9c182a54611ce54eedf42c126639c04535c60a3e96"), ("23514901a5b8b4eb258b3cf10ee25f728fbb46b7ca5f9edd78146b9629aab95b", "1ea9795bae417d3e60fff6520af2f5f6fc8dcf558942d39586d4b3bd1b0264ae", "0894f6140b73ffd0de1d3cf52451f04839af48e9c7b82566c45cedaf131f42af", "24cfbceeeb1d0447bdad33702fa87b32f1d3cb528c4eaea4451ace4c777605fd"), ("1ce69e8a782b7c1290f53810ad5ca0fde006770b13aab859a288bb20a7c70ac5", "3001a28a19f614ceb3c74bab4e0a2e13e1b29619158b2d4bfe1eaaf9e1246540", "300362d57a1c93af1b26f9a27078b981ed6eaaa0d0411d1e4b075b808a03c225", "1004ea160a0bb7230bfc20d5a14b6889650b23176b58c88fce234b4f1d05a214"), ("212c8a35590f77b7a278f3e6e20789402a6a20def24418aaa7fc06a3b589f26f", "090f6e16978710983a479288ed7b4d2c0854321e71f40dd7ab9c52cd6ab0b0ed", "022d8b3b3bc89e943be7c963fdec1ca547dad242cd4003999a241f54cc4fb41b", "1404e68bc97d148bd9911d2cab92063b0432ad5f367a7bfc5e287fcf3628d49d"), ("1c85e914ec3f31ca6e81cff2fe6fcc0c239c85ecf5f4bc1ecce2ae58f68b4f97", "2479f4cc7c86670ca0d777b3344f2302d33a674b8d4a0430c108d85690e4ac00", "2fb87c2b6c68cfe8e0c42ec4a49ae80f5a97d8318707d89d5eef7a87525970b0", "2d8e8d6baa4adc0d4d7ed3dfd25036f350b8327feae0e11085732c0214310aef"), ("11202e37c1ef9b8e840bae02ed9745c4fcfdd0db23c2b4ad929c8fdc005e6568", "10788dedc12d33aed2a4e99797c519cd2775a17e3cc31b73c054d15925fbf63d", "044449d11117b73cf5280f47ec7e5a7e1230ab1a9f2a226cfd1cf6a6d9a79a51", "0523ea43412822efd18cceb9efd76b89c32654aa6919042d5b9cb30beb7cefdf"), ("0389d13568b0a74a6acf72b371f4f26de25811d3398fb02fdee9061ebd76ce9c", "262cd16ac3d6132dd46b23f73c1225813a396e5eb216509330f625a465619c1e", "1c0973f3874c59d7e81ee529718c2f232dbff9a30af91df8aa9f281b1043a2b8", "10fe2a7e8fbec9f6ca49fc098d9cb93486cebd57cad44f415f253c4fe7e5eb49"), ("06442d54e9ade1e4ce1ad5b0ca4ae3459894c980f9ed5b4193903a91f7158ee8", "282f1fa6ba67feb98886265346c5e30231fe61e80bb7c53eb21a07b41aa52e0d", "02e9a65d5cbe509543e1e23fb6b374e9d00d6f0bf1b7fed117b94870cc02ba79", "127b6069a83d46f737ea7f97d2e5a6057328496a04a25a3e6dc28d95da4e30bb"), ("14d7407d5fd3e2c12dd5c1f01cfea01d06f9fb52a5d361fbe7fcf5b25ae78c3f", "1ffd90a022ea4a16fbff7aae1e8f2733168404de83ace1d85d352ac1a5bdc170", "2a6c6ba711a5d420f7f8333d83d72f2b491c0d80ec153e46a4b7f61faa14395e", "073285ee911a2cc68d532720bfe5e942d18d545621b44aae5b8505abb07d4475"), ("0034bde1695b28eb600d9edd634e231bbcc4730ee40d60559e875445cc39138c", "1fd45d93a199b083fae0711c3c7821a59302248ee7635fe31a632e25b3912e47", "2e8eb856d9cd15ca21d028d6b70959def0786dc72770ee00ae7e67ee8f996c34", "142ea96cc0f7651fd4840f0ff88e9b556f6b7541144043ffae2db89db86383a1"), ("1f52a6893ea57e4c203810a5862c16e3ebe2afbf690bb23859e9215fcd426a0e", "1c733b7d9cd360cf7eefc849d59a2a781e42d2524a065bba5da47ecb3a043c8a", "0a092e374c55197f0ef5bcde13b96f24be77818682d53dcd19625695969b6a74", "181871a0037d08d2fd3653efc125c81e00d811735512238650312fed86bee7c9"), ("2b4c0e82b2ce46c6d184421dc2447ca32632b296550cc1131049337024f806b9", "1308841c9879763c4e658b09cc83ecb6ee9ff234ceb0f6f02b0fcce46e55b0f7", "0b0f443375acc4852921d04bef9386b02c88f1f88c671f276f6e3bd07393605b", "1cb0a95f6f63fa6bd429715eafc6483c4d78878859faf855dbcf19e835024f9a"), ("00236bda095a820b4d77b49a9babd5a9ffdf34671d7c4dc954c1f468adbc2648", "27077d2245ff014b5d003d04abd625c122fd9ba42a4aa98c8753a323168587e3", "0c5d179c5b2cfecc641f7212ae8d7127ff4c3d5ca231cafcfadc8377f643af68", "0485d561892f1d944aaecf1176274b88bc2852eb94db3501a4fdc264e5cdf3c7"), ("20cd02775feda5213e609eb58b2166df09991fd4a75f03e18cd76c867dfd7bfa", "20d022307432e0b7d809f56ff2b115509282195d5194aca732a54649dbe1c102", "117477cf9e2c74e5607f0e415394585cd5e4d603e4632276a320ec6b0bd1f327", "05334ac4964809c6a83aaaa2575495fa3645a7fd1dd4bb40c2ffec92151c8b2e"), ("106aa4012ba0934dcaea88dfb0be2f59df4d602ed37c2371e4eef2dc9f96c24c", "1e12ec46903245a65f52c7e4ca49c342146c3c3599292c95e2b26d186c4cde35", "13145de65dd9752e89eb8b7eee511de7e304ef917fdfdc39a93612a7ad1a4ee4", "25d55b4009a57e5bc9380b2641ac744d2f62113d9bf9e6e629d368af960c141b"), ("207cd0a29951cbbdafa04b44ce849633858913ced1d3312d2f307b962a35c63e", "1b8c60ac271742bf5d270f17686a1af1bedf2b278aa862aaf10b95069d8cdbe4", "24f36c8854360af7d18f01120781501add07cf11c9c274475f725eee027fe83c", "0e9adced82cec14f8c1251acf9d4ed2932b8a6f88ca878ba369ede7b30f8d80c"), ("200efff612470fe3ade70a77e0a648dae5f86a3df55258ea9d6e34d5ec01a59f", "2eab165aff402765ba27b38fe38f870f530b9b9ef9936e38857078a2e9b8c834", "202a0174e34a1de5dbc5ac73cfdd523aa5fe63c9223ad40b5b1f2f6fb184544a", "1dc2d4edb0bfb467c6629cf0d41c20a7b75f047b630128a64f87ddeaee153bef"), ("0095b742844d9bdcddf09a1b491f3359236aa7e3acf182c4ce70bff1a66e2912", "02a8a590bddcfa868e024679e2863eb0624acc91a93b8c3c8325831a6cbb4b13", "20b039bab63ece9ffe351c3266f5a0731b9b6bcb832a46dd5d7d86cb00e04b6c", "12d88078c47bcbc12a47818ec83c5d6f7ba99b5806010faf08fae788bca794b9"), ("206a0c0971674eb6c4fdc574ea9a5f587fd6dc5583499d79f7b0b07e5d0b8306", "273e2410e0cfbdb9287b4e418f49874c8a81879f9e3bd56b917508095c31ed46", "16761675e404a3d42c5fb84a6677aafad40448fdc90889ce95d70d423a247177", "2ab4f6e46bea1abc041c09b71808f980248f5ac62f4109da71cf90ecab5dce5f"), ("02e083da606e6f5c539a924139e7a247fa15e937c382a16786fdfca837a6dd42", "25ceede1144b20ec47452471a96e53d62460da04b5e8bc7aa43ceaaaa4f10d0e", "2005f43b1f98e3788864b971305adf4661a8e38a26d6200a557629d7c036e49b", "27bbb17d344700315fab91e8055c11c03e82c6cf5eeae3278a330e2ea0fd7af1"), ("2b0116e443e84fb1412dd3b90595e649ae793afb55d64d19d24f0589c785bca4", "283a039c22141a419a54b81bd9bbc4ea088d56d5915a876afb3fc4788f73795c", "1de1310b2bd00508846a18ee7d447c27ba72ff2bd89bcb444f78c4e99a3a4c90", "16a2bdd21cd967dfaf2f36cf8967f476619195b04d90f9ced23d21872e65dc67"), ("2c0b11339a35a41d24a5d2bdc24782e1b969d491af7fbf6e710d5f217b71ad8e", "088298b657c04253ee869d24e47f3340fa5d962a5bed193963bcb39c2ffcdc27", "107a22b651ec88311c304ba2799ad945b2696f88e3b02468f5a68333112014b1", "112a850951796bf7ca435dd9d997d654b8c09a382f34be083cb703f08addbdaa"), ("0e5bdd4e33397e69f37b54ad08bbe8a33db425f58ce885fc91788accdf8dd9ea", "176a623f752e9335c7f45db471f598c16735704498d08b3fe827c0e708910e2b", "28d2c942a37f62347fae0051337cccd629195df8d9bcd362ae5b628efc6112eb", "076c0f638d81e6b8a984979f1c3265aee200bacacf5306ee7b5c3b0e46488df8"), ("25810c42134adf209c238869053b8b2457bdce4315e8f2b714d63d4e0271867c", "103941f5570c3be013753a932f2dd06e4b662338abb323df27b42edbfd1dc835", "2dd3980116665078186f99102ef485aca575f5a515bbac47461f85887a9682dd", "271a31c56fad4403eb5ebf88254e3f6d1b18a8dbbbefd9404a71d4bd0c1d32f5"), ("05689986dc19c96d53e98d26c53c303f63fe5245312c5c2fc10b402f98c5690e", "276005261c62f52532c7693fa2bef2092410c3b0c13cb49a48e60637693e03f8", "04eae0358229751702ea26fa602a96964f6c173443c2f30b7509f208dab1e9ba", "17b9b668e436a4f42bb96bdcae62b8801837bbecd78c0b54b2b796b97aabfa76"), ("25753ec0357d0e31b49bce78451193c5a09aa1e73f45219ab107aac35fc2e7ca", "0740353b8c7e1d6c2f78b53c7b8713a0eec71889767461cc3bd14f0c5525dff7", "1f8d411e00660837ff054334bf1babe898502c8403573c54961340b9974dd4ce", "1c7a920f525c283592f0517bee3ec050613c21059bd1c838c58106be7ff1146d"), ("25f0c73010e844b909ebe99048456709ba0ac927fa9a2fe6be7863e2c0e40bb8", "106470bafaf843d6fed3c9644f5a9ded1e5274c7b8bdf60d958d11ac798789e5", "1acc93704c57d574bac3489760151f18b31dfded3979b3bb21b6ada4dcbab8b8", "246c1f3f7d9d503eecbc59e7c6845cc2f12663ce9e453ccbe21a8426a7bf380d"), ("0e7ebbc403ad80228e43b2060beb9e6e19a627b7b77abd1d4b4ddf25cc1518de", "29a7467225d708c3f16ea5f69ead6dc632bbfa56fe05dfa536a2cd66c74de672", "12b1415dbf778f32d8469e8e6b9c194bdda8ebbf62ad2e99e7a9597ab573e03b", "0ec3adbbf187fa72a1f123b244c255042108bb6ac940891955665aa4b6cb65ab"), ("02baed2dd596e21151a79f6075195c23c80474f48187213dea8958063ecc1286", "0f7034925c0666b904f781fd95e0144e7ff629256f2e4afd6391c234a08c496a", "121cd91971cc1440157042bb051c1c7f2d9475eb94351bcafab2f8599165e716", "02baeaed2f5d5a4f3accb5bb69daa7cc4ea2945f1e1529edc0fec6cd7e0d005a"), ("0d4be7a8f01460e9a84a0ff5f44e871e13105a083f8415fa560e9d19f73de7af", "1d0cea525bfdf2ab90f29482f399865a139ad0877841d345e319c8d2f726f8ec", "0418d8209de8d1a4ff6a6bb870a925911f6f87c62888ee123637354036d96819", "230650f0d3e79c86ce3c6a689cac551fe6fab693b15ba90d6206a0830f1af154"), ("093bda14691c75a7d8e2234bbffedc8f9c68dbd68aa533cda42fd519eac7e19e", "2ff4aa5c5f74e2315851b75ac872aa93d215e213ed0e1e4da4dee576a777b7ab", "055bab7de2bc0d2f89ae977f66b2287491109a6999850ddfe4a0c3a1c45ce16d", "241642e3ed14311daa3259f355eb1f0e4bcff2f6b01a4fc957968bdb834362de"), ("21d5abc332f351d34b6582ac27ef5b3197cfdfe7c236d25a8f29408d03d0bc52", "1e2d610a9fb39be19c4f42d5aabef1684a46bdb85e592dccef1c7a80093e3d7c", "0c44053342f544df1bd924135e99b1463d989a9257a355cc0d2647d836bbf8ea", "2e4ca5d915bbce676215fc8cf70d95dd3241505f8bae2bce13a42e5166e0476f"), ("250903eecf47bda27adb5ee9e0056be2519114a0cc6e8e3f813f74ad9ef28415", "030eae3f8809f3534556929c3d39c30a26e661605c54f67742f1a372614798d2", "0e5c81ee8d3243dc3aa8c4eb96689a85209531f3aa731812ec3b0b5cc3608e18", "04e5cc1853ffd30ddcb17c1e312bdb3ee8dc05906642159b3f24b6eea8efc272"), ("2a32a34a9b99827e636ee13f26fbb2bd2b7e03192a39bba3d988f7d66957ce4e", "2d70de52ad13c5334b0e83e15f4a01b317efcb585e387237ba8fab9b601c1a46", "1c46c5ae1762b7dcad3fb2044064f46823883588a515cf17f13d541b5173da78", "0480f6b5ae48765434748d2c6f84863b13c51fbe2b0b1b2aca3845707d7511d3"), ("0c433685abf8cf1c124f6f58109b391776ac7df3260753a275ca2f6383399acf", "10e10d51c0fa98ae49e87ba50d7b98e820f2d1476d7942586c9be1b5c6ca8a73", "0499e94396f3b1c33085f501fe77a1ca01df0e5bda31ddb6016d418ef32e9bfd", "1834f95152adbe8671f7f88772aa4afa6ac46224ae8cfd2cfda82802747df08c"), ("093f19499e65e99f57b693a25bb217b8756436b13b8159372adbd51de102286d", "201960b91c9969d7acd205c67a56dfc8a804ee91016a8e79673022445b9b534c", "2e0b83865e2b4ea684b59478050d7c2efe4171e4a598167a3621d400a8e1e67f", "2cfca91ad027ff2ea18156f5937435112e2d6dc54b06fad51b0414bb4d14dd68"), ("0a069943f95f44b87fbaa2ad3982705caf21f3a6d1e5072e849af98e31d5cc1c", "1099cfeb838b11847abe78f321bdf8155fffd3e96f9efc134cbf1314049f56ca", "21c261001792891e96dd6a5deac9955098a7002e59cef22a004dc6acb933dda1", "23106af658d4e22afe457b1e9c414dd12843cbd1270a53bb6a31ef685160a8ff"), ("17a36713b5d73f4fbf3659bdd7aea4eb347e97f298fdd4810f65eb3338dbdd97", "163e26aec7a652612fe8f212c9c5295716e575ccf815d1a0f4086d704d333f82", "047d67a5523fb751340fc43634ee82dca811247e83cc83120e4e1630206500d3", "1418c90f5fd5435a17d483d1bf231b3e212acd5369a6c1124ebeaaa5990ddefe"), ("207e5e9f0ca404fa9c88995bf9fd0f6cc5bab791950e156c04d30f52b3858cc3", "2f5bd4e1623c078bd84cb1b9db953c4959bafe9fc93fb6e0360c64578b93f3a4", "04b60a3e5736b6aae169aa4ab13f84cebce771e8beada1a52b19ce28baf583ec", "065acc811c3efa08148a8379a955d78fd7d4facee851859f86f03b1290234872"), ("1c6b635b6dd645d6da789f8fff034f6360e92753734bb40b00cd875e5563c28a", "2166aa2d48afb87b52da9e044cb337e9cdd13ab9a58149c8dc988fb6781d3fc6", "0946372c02222502e2bbf8deddae85e0a2f28a804dec6920b58aa4990abbe3c1", "108f88a5aa14abc1a704475b4797ab41243941b54282b3bae83a4d5119d97b64"), ("12ef673c2700fe1ccb694d0e34acae6ef728dca2878901450bf5792f95a78b63", "00a3473b9711b0007208008681fb3743943a6afaf9a271ba2b90935904810a68", "071c5415d098921085eabf90cc83597e68729c3aed451d91c92820b8d01cbf57", "24154adfb1732ef76eb4462f950877c588c61f53042cb0617b8ee985eb08443a"), ("0fc4595dba6288f2ca5144eacfdb777756908ce90ae967e0483a2454d35aa897", "2ee88300866670d889f6fc19f96a1bef0854a959af2393e0439dfb49be0b9c42", "111f1d1f29d444aa1f78a574ba90c68664052da5cb4cdb162433349e3b0ffacb", "079015f7da1ca9be4e6558e4afaed5df79fb9729636701ba1bf9cd15a08b02f3"), ("2dd3d348c681900a44e8b20a12b9bf3637e4ef1cfa8714215b280be97c291161", "0e4a06af63bfc652dc0229e24e8017f0e76d4ffbd35bc2acca2110d52370ba96", "2b950e8ad3b18db20d52429df9775e2d7c66cc552f0efb0a2d41d883573f638e", "1f9dd372cdea12af9b9553f67814a1f0904ea0437241fd69d1eb4653bd83afe9"), ("165a5bbece061ca8aa70418986fd6327c39426edf708c52307423993ec9107fb", "26b4123d76cb32f269d32f76b8eba2074af2cf7aeb36233b92b879acdd53638c", "01323cc46f68a6ac48559378a2c846d323d4546a4a224509430b41048dbd2575", "2ba110796c318eb01d7038c063cfeeb82c42f22722f5cb3956905c9f67d18590"), ("301e8c14cb4674a4b3410c97f767ff5fe68cb4ef8397edd4d015445cfc924ba0", "2e86f2404735c2527cc9941690ea64f282cdd0aecc279e934c491631fc2fe497", "270ba80aa428233d74be716831d422ec959448f9bb388818a9a31ad174cbb629", "206722d40fc334ba483c10780122e27e6b933b3008ed13de82533864d28f4d06"), ("06a99c5949ab3812c1aba35a12d478ec072891ab41df45af4e38d26393eb87ec", "1e9b7d2fd9bc24e9e8efdfbec9c52c76cdc5be2525fd0acb825a8040518faea8", "1143d833d832e64974e2f98ee1d8611e065e127c89c311760f1689dbe4f6c819", "2d288ab808ac2c098ffbe972de22033cc7957228464cec9d14b3c3135c0af14f"), ("0920e5690acc25e021802f6a3d27d2a39f7080f85cadf1f6d3de3064a978dbe0", "2fa7482412af47102e9a5d243f358a26cb4978a16126a606584a92e1d66fbada", "02822afca8e31de938a53f3466117d3a91595965e7bb95064c7978ecd43d9cbe", "23f7af3a02c9fe7800f40d0f6dcb00e5cdbeac0075213a33a65b21ed55355ef7"), ("2fe42bf408889a5d97f39f1b41bc8641ec4c9c86ef35f4c624b61c83a22dedee", "22c56bf7e452ed80744f67149a4c9b9b0bdb6994e3e69bf10dce1d5e65ef1d84", "11c1106ec06505b3c4dfc1e8c14593052b9d5905544caef0273d852eef4ac095", "0d3ef7eeed6f2ba8dc419092265a9b829ea378a546e1af89ca6ef5d47fb7bdbe"), ("08f8c9cf981d5f60831f04540e5a39d82c1dcd3b4d308373b6b73f7a05468f5f", "2812ef095b9b8167481562656a41fee613f264fa7409574b6d40091b8db3642b", "10292ffcbda2858a1dc757653e084eab23ff86660895dd65faa3d1376cbddf28", "2a537281bac830fb791bb459be95b35371441f08a4b783f01eee8c2d0f732aea"), ("13540f3840228eb03a6e4e398df723775c1812edc2a365c7a4e63ee1d0590e38", "0bfe89f01ba36513dd1c71eea8585339fadbe035c8da8bda37e92da2b648807f", "1f6ae0850ca133b196909f97590c0283cb06dc2b99f5ec5003268fb6a0e005c8", "03f870e30a2e6b0fd875a37e9aeb08e12a785666cf37a777cb6132693b24f23a"), ("13204b018f83785a249288880ddcab042993a6cc5ef390602b6c26cacb8d6755", "0c026e6b1d1f96c91bda5c0653c3aa31d68c93be5263a0876f3b16f2aa13e1f3", "17d138b47d8445fe403754e15e13a33dfc00d91bf5d5117b8adeaa3610332539", "0126bd484c2638bc28e682bb95aa65a1739c4de38cda8265648591074a5c4396"), ("05a6987be6898811482fe85af7cf463a98fa991ed2ba8841c439882d340c04c5", "09016aeeb4cc462ed1e4cd065c0cc838eda33ebda25e8ca38268809febc8bf1c", "142dc0d5c5f909bb55aadcd1e9e4f118a42c18241984bf499e255d960eba7d7d", "04f9c36f462c039d10c983bfa7779956d6463a00191d37f5269f9a9c08382b43"), ("0d262b63b4ca9ebe7b731db4d789377cef5a5053087f892df8c351a617b87358", "1d6253cdac2fd73f1f3c6a107014451e30928ab35f4b8dc9ecd50b12a397aac3", "190c3ca9b349140d2dd991e6c00e688a38c5fb30291f21176733add16bf0e660", "0b47c0a73c54b405d8fdda28ed9c66891b9fe7f4db20dd1b4665560892492dc4"), ("0941852bfd651e19831b9b13672a3e39f45c63aa349f77690684808a5fd7750b", "18521e0eb4d2eb662a25d6935c0c04b1ce8e0e482af29510de5a952a5b0faab5", "0a9551ac1bf44867350685e4c8a5f0abd5aa6391c3ae3bf26bfe6ce359680d60", "004fe20f88c4b99d89258d9b0e18903ab8a10b1bb423ac621a8999e4be9fb3b5"), ("2b80f33461aef2a656b521711e957d892fb0095fd7d1f1ab50fc6acca922f1a5", "194426c412208b62e96f9eb19b92fd2b1d27aeaf96796f73116fc0886a445393", "262715c32ddd79f54043f34c3c8849d42bb7af2a8b8d64c0377d37d568614ade", "1157bbeb9ba78a69ef59c408bf2a5607f5cfb20a6cf5e9fe0c5c4a3e2bfd89b9"), ("0893fed3779fc966534bb7fb31c3bf71d250f9180f337fa6c3985a9919cea7eb", "0a7992b8ec48a5ec5fffbe0bce589fe58e7fcc141cc7ef3bb538cf41a2f54d92", "0d50559beb472d4bf8555455abab85c1558cd576a358e5739cc1279638b363f8", "2db75fe15b4412a4669bdb9a9f198fab3bf97db8061bf2c63dbe78a85cf656cc"), ("2e0933af5b6f9c5e92a7e574c548b65e50fccef11324a5ab5514d7f326da81e9", "12005a9a42fb95530dd78124cfd65f0b8d72712b8de27127cc6c12f27c7c02eb", "1134374946e4e527617c16879f865939447add419f733168eef9494fb5a7c552", "1ac809bff55b0e75f2c7e6041a0de3f40e35bd8acb7cb0a26f2b61d575e91ceb"), ("01417abaa9acb4bd05a52da4b08d5a4423e154b1189a2559dd081c1c6110b9ad", "040b1d95dc13b5b70b11bb0446935df2a2c8136339868384efbb3572e11baefa", "1ee0eae1be4a1d720760feb4c132962b08108c555942b31824c3e1519182697b", "09277d4d578d0140e01dc2d9cc3ab68406f273f5c81ce04e63e799ec69153d9a"), ("2bdbc64877e43a347a4403e0296c5c237a106eda65dac82423a67f857cd9e9b3", "1dd0f4070421d473faa6f08df21c50340508eb639c20451a03b04181f7f3b866", "0d8a7929c5b48943018a98949d790fbbb10d98968e9386b0400cdb00a73a1b0e", "18d7c94bdea4759bd9e9ad1e9d2396bf648616bbc3ea5dbdac15782c4091887e"), ("184b078a0369b054e04feb15e43d6063f49ba5aa45ca3ab34565832d9602d50b", "01ade44364de72f57768c6b23b111058aad2558d33b6aedfb97accb42505c0ee", "03cd1587265f9932bef3587459bce61eb41d1a186ed2646adf9dfc0da8f0bdcf", "049b3a69ce86fa3a214afb3b25eab17a8bcfafe71d22582259af275ea052d667"), ("1a39dae6cc793c031a24cdfb1191a63701f2ad89de41f2d73d2261d7aefe68c8", "1fc94d2ca3a6edfc6bb335e84754f44ebd68c4af89f5cace1aa513f20b393b67", "2d0174815ef1dbc8b4f74d1987358dcec6d46af046d0b6f6ed05af0712e02d74", "1e9132fd1bf354ec58ad7d70bfb0618035065eec7ae073423f8b83d759cc9957"), ("06d345e0571a32d1c7148cc45ab4e2dee157b3bfe760bb29675ff5975d34cec7", "0d034c74a6d5aed065b5891947171ef2501c067da6789a0777e62e112057cc4d", "21e59cc897865028bd75eb2b54b90c122feec480b123af6b0417678d4882ce50", "28807bb4f93e03575ac56a83988a59a312c0f18993b106b504bd80408ccb44d0"), ("2f8d89458fe64f88acc1e0e8975db7a8bdc7979420f162e7df211531fa36c376", "28d8c2e7f1ec3adac92e4025eab4b4c56a9d33aebf57198c7a540f3605b755ab", "28363fabcbfe8ef149186c8de76abb054dff98050e8df663358fd72cee3dde74", "15cf935f3c9abc3959cade6fa29ada9f9cd6c3b3f33a1cdd0931c015831efbbd"), ("2bf000f617e93657f2f106a2eb0362c493af1976dd181b3eeb7c5b710f03d44f", "3015a6e445a3f58ff7092da08a7e3b34e20644dda1c56811e6c92e1ef75474e1", "2dc7efab9ecd55953daf123a8a72b0eade7d6ef278f1a7f7f8cdac2382c48bc5", "14da58e054f7739a02204fb8ca65157080bdfd875576fd15e65197fa8ce97bb8"), ("2edc70c4921d7eedfdda52e0d463954c2cd1ff789d30f168a5456e6ef130a916", "154ff0d913f2a40f07b1bc34c9e19b887c35f93eddddb6454ea639a069cd6520", "0eaab2f9a291343bc77b8e8982ecb90154806bab25d8294183e1ab7fcc29a12c", "0b281fb8b6177a5d4b829fdf30bfa99ca34b631a40b0d35407dfac11c96951f5"), ("276bcadf786aa198bde75c2a6af654608e5f7c6763270aa4e353a1babd06ccbd", "186ec09d5c8cec37d62b6b6b7fb3df3e9524a72c5569676f3fd35510fdb52a9f", "1cf7d99e7f24cafdd9dd2baa6f2b43be85c60ea7fe9e8f50aaf0c2df44f930a7", "11a38db5a8fe842f8427cfb39813e64a376de19374fd9dbbe29ecdc542d4619d"), ("223e03707c3701c868e22db0b93e6abe8216175a85072f67f4ba6f52fdd68cce", "021a5ec45de1d9b728ddae2567b1add906cfa5e889f962b8409f8a7b9ffeb189", "0cc0c6822ddc134b5a2508d38fec7b0bedae97bc3d26f33a7ee25ff140a9928c", "232ed2e5fc1074cd5861047804ee07abf653ac51b70ddd5ee36e8f20fe96e3e2"), ("070c1c7403776d2fc2660961cbd5436438f66be32f9cb686d78b97c6ce3f6d38", "200e452d409e2589dbf8abe4029c44ca7e7d4e7a86b0e80cf7e785d1347874fa", "073c0ca1105b93c2e687021f1308084fee3789dd79851587b9b58430f4fea45a", "1d70da44bb1b6f098552365aea0e0efbb2f9ef68202bf79f37209b4bf8952b25"), ("0bf84c2309658016592bbbd657bbd56801e7aff5568db3040c8d75f8219149ac", "07c719b9a6f198d726872418c072e9a1fd21f130a52595a58d74e86286f1ad0c", "1bafbf3c6d0ebcbb25e04e25b5b6ff081304546cb66d4d74e76b6a022d9cdd67", "2c0cb1854d71f1fbc4ba31fd5dadd8062d9a7bf395046777144b0b346f07409a"), ("1907b0df59841b66dab736dee4f9bf42be7bd7e62ba1cdc5b445b17037378c56", "1560663302c2585a42c9f0c98ff488aee917859d7296e449be9cb35397d72e94", "1fe32de85c7ccc3186cfd1ec6feffc74d5c271c42feb5b2973cf432bc03b2052", "20973d3b93b2aeb8542a20ab77747c5c17f46a5ed53c42de5c7b6fcee6b27453"), ("06967643c22af3b88b54ac66e2a61db86f7f3958bac57e3c94509e6c87be4454", "00aff02df983b044278fa5910a7667471aead5ef3a3f60c0bd91b2ca2b8cd8e8", "117318a79b744b71e68d4341d1d3a01d1891b7ac5414433ac3c3ce59745533bd", "0a8c1128be20aee9f3cb8d4288132536b538807f901a7e9674b817cb875384dc"), ("2140ae6ccdde03e1dc8d460c6b922474b2fca69c4ec51ce490d4bb04c27e83c5", "0328d33db34ee536f33cb6c092460ed17844b7a5d467eb168d538b15945f6fb6", "08f990ac26338dea0038170110a9cee773a74b100252bf2050e752f53e5edd48", "08426abfc06d23c0f4bdbeb30b463e07be843801926d8734f03709292e53ca1d"), ("1b275efa15de281982d0bda73db2008ba7d56efa264b5ac4cc88a5e93f61474b", "26569e1e7620f1e6b9bcec23cbe145f66fd322708a99e7480ed08ee77aae7a62", "2e40bba5b3768f10acf36bd4ba7bcea5e9adcb9578a46e7703d6cdb6a1a8fb4a", "07a755e3fe59b82d5f5bcc615e66b0e37c096b5705d8d539276f58b8e1b199d8"), ("02e58dc79619f7439485a48fe9103c9722c8a73e9a180e83c3c1c049775fc590", "2f808915d9fdf1c339f3720841c8b2b8a80f197a152076595a286dd980636027", "1933037d193376c3ad5773250ff2cd2fe878e2ba48d9eb627561144b99c68cdc", "0b54d2b50f36823cea294b30fc43be4eff2924d842767b474749f2bd3ec06b22"), ("021da1113aa5d69d9d27f1d94f0e1248e29ac21872e99e49f515cf0588662939", "17c281b5bef3de73b2c611425d8f0f0f096dab09808d17fe8244528a2d7b32be", "1819d7433698a8b41df78c10427fe04b33c319f5fa47cf2d02d3269ece74729c", "03a54fcee5e0f86bfc266359a97bd38c722f30822c7f173d10bccb493f09bc97"), ("22aca925df83772adf5f745274492a254c67f5b2e9237c3a0b596ac9f09e4d10", "1d172b1d7ec8571619e37f3eed0e91c10144a830952d0611648e25202b0bfd98", "0e294219ce120b618665195623dc46592a1c61ec2f7ef6230aff719ba8f09dfa", "1673f88c1585a85553dce67b1985bd604fa506f12515be17bbdde854fc88ea93"), ("16926401957b9a363c626ec9863f2bbd760c0523c6857b5ab6dd595c791727dc", "1fe5658988a3242b35276bb3f889a4d18be85e7fc06665ce256227e6b86df26a", "061645f60ab083da9b3cd881f76cfcae7cdad5556ff931261d65ee54ef59600d", "1f0301139f2ee8df8dc18e35dfb2c02f3f58b2003d0cfec1d5c89eb83bba8a6f"), ("1cfb5721ce6ccc75eee9d1dc423a3ba067914556b9451e7941ff71c03ede640e", "035b04b1ead7be75c6578457409bebbdc8f472fd025bfef94d68b61f997693f9", "17a9fc491ca3cca9a69ac4b58401d6f6389c174bc5f457befa3550a311a3d89a", "0658daee64f363a94983b1fab74ea30e5621376a731fdb4d7a51da64e52e4690"), ("2200062f4d3f4ccc539acdc0faeaececed29f6a75024c09db00ceedd6d0a4485", "10861e7691be6dc13a5091007639c4395a529b460a88b5929189ba0bc62c55b5", "1d57cd9873a1f6d775033dd67c9d7f38c9d22cac5c8068223a435b854517d5b8", "2590d5d716c800b4d635a6f6da4b8a7382c0348d7655c9471a165ade43299b65"), ("250d6222d3fd42536cd3f24ad4ab6808ba907603650eafd65ff637d5b22b7b19", "1b3f5a9900200e0cf16b21e1ea69b9a0b1ac87b60e16d6f515b2080b6da88745", "233dfc4cfe93b25b2abcf8543aed218f53ee1c67af08e4eec1827dc6ed67f9a3", "1a712debbef7a41f6b7666e797d8d1ede431f85876209cec44f3affe78580cb0"), ("1796d77230573c18636db06f80d455ac16ff476246aa1225e7516d31a497d827", "271042d702ccf6ec597e634ec02775afcae4d3d673d22cd731cc96cdf6d16cf1", "200e3a59840b977d432d4319ca5c6f1859108a82f881dac27d196264adbe5c94", "0698f952c94c0d41077905641764bcbe28fed08cd5951a46b084722fa645dbda"), ("20f7b9267a8a17f268d1b167bd55097f06cb4547740a26ca811ebede441463c6", "293e44c7747e750fbbf6518e710e5eb924c34515b3a217ed345dfc259adf046f", "108763523cd3efd377154428972ed206f376a565df145bbf79e367c5eebc0f26", "14f415f48507bccb7fb9b4d26ba398296d97e785627aade9066a081d3b192657"), ("0fbc1becf4cab2bc9209710b8f8129ad607bbfa5323279f147ecb57130bc25bb", "2aa18111f14ef4460bfe42b8206b6dd9147b4f91b5c642946f9bbdd7b5970da0", "113bbecb94c7f5d804ebaeb21d418e07de4b7f9ddc4c1a81e7b36be5911af374", "1b04e4dd3e0a081944b8587cf243b82e0ea9c2176f1345d405a7b4e0799db771"), ("170e8ada5ad81096b42ba6c75a62ad016272239fdb4c0d43b14d952fb24b6e5d", "25a6d6fb0832df931224936309c652f5ed30cec4333aa7cdabbb736e45522a2f", "0ef3e272414003d21515791023a0e14ca5687e1786d1e78010b2ed70fb22aca4", "1f788cb148bc11fa863676cac4b23b578abccae3b692c27bfa6cfbb06a6d6263"), ("086d935bcd8fea45d8b08ec37f7dd3c7d05f228e08518cd07f5e50cf43444e5b", "0b936720dd1ca2bc738378ff2e2915f23adbe29c8ec35d2d6686923c5032093d", "21bb53ca55b35ffbc162d4c6f1b9283612fb4a261ab068497698cc9fb83d03c1", "19eabbed9ebe2c2b056df4ab82a4b2c36003fc6318b9423dc3a9b5916ba22d1e"), ("051c3b41cf11e578e717c9ab1401e08493c56ee3a619545d9a66f37805f2e55c", "2b2744b23fd063e255c22fffcea43db3f48ee68e3de53f3ccfefd1288c222e2c", "15ecc1081623a28b01d6c185bdd7215a3d8b119fe246fd080af101e0e2deaa6f", "139283e403c4f7239b7da9596adc6d7ca19ff599389f3ebe63c46b639838c942"), ("1324ab5ccb3378656728dcddbbde68db0c133f4cc1e9b777986996f20c42f0f7", "2dcf8d06f8bbeb8448cd21b0e9e616f26aa39d231fe5af2258f3126d63630b2c", "14346b573ef82247ac08ad724f402b65f358336dac3551495db268429f6b62d4", "2360a57167bd5c644a7ab16c2013fb591596d98e3bb84ae7bd0dc032edf1c150"), ("18acf7f758ac4100c6722bdbd8c95560bd7767b7359f1dfb7bcb5a7215264eb9", "1e393bc51ee7555e0f698e3f5a27a5176372353247ff5b1a0d5d238e70ec5e0f", "1819dfaab13909d1f64f7f856f60e6d59759db32f0c5fb66993c2b9fa8950ff2", "22123eac915dfacb2675bfcca839e6d6828e3ea874a68f01e9ca611ac186719d"), ("201cb5e62c9f7571a8db9c4d38b0b15d2ef10e86f9a265138e9328cce0061549", "045074a3608dedf65accefe155d757b250c46767e214168a5fc01bfc04d68c46", "22bec6046d2cfbe55688a3d293fb1ad2264a87627fe37abafa7f239256f281e3", "07986007e69c761e674f913d887a0fbd3cecfdb20b9fbb068c68b19d2ad2f2e8"), ("0fc2a40aef59dabbbc6f57b62d6844453286d26ccbe6442158827c0f2319fd4c", "1d724949483be3b5f106579468eca8df48b44a414148a076f3bd20ae16c40260", "130f82f978a53bf71185299988feae9d2c0804d2665bcece92080c59c94ae1e9", "174a7c9c0170d78e169dd6f944b0faecab77162bd13bec0f7e3d8cc1548987a4"), ("2841cf419e73513931fb219369bcd5ae7110e478c9b26edded318b84aea726da", "21ee19c6bc07912b7b2a6900d396f52396ba263cc0265a44f2e36804e52e96ed", "217f5667462febd72f7117802801cc8527a94da1b7318dbc3b7a1f82bd96d68f", "12fdbef0e0ea41e64328e60c6274388f970b0b4c88165e1fe18796f8356e8454"), ("22c72fc7588eb7d83785e3a511712de410780624739076c2d7f6ccf27738bb49", "08b6c0213e59cdadc3d4a40b09f9ffbfbbce87959543b2d52a6ca7b377b04967", "01b763cae272737da3c5f505ac78988051fa577e7866ad9b669c8d1660045af2", "1d73e356685f6b0038ecaf2a257e3658127675edd19e2ef1890510808b02943f"), ("2a7b918460d1207fe34451988cb1af5da34660fe4e337e3c14147df1b3907cb1", "1ecef42edaee412616f8082ef9bdeafaf695095416213ff4f8281e0dd009568d", "017eaa1587c0dcfdf8d3bc33456248b888dde202f67c332ca36f4b321e2b0d29", "1ab20497391dd4e8538b6f543480740b737f5035bcd655c1daac2fefe9608021"), ("2d42787d7dc32782e75d65c13816f6f9a0ea1d9c3be7e4285569fe53d1e45886", "2217e114e97f08520e8afb46c171a1d25198545266ce4a19c408db5cadfa5a49", "246ea1a1d973a12c16b1b51c287471e5d36c41bc50a4f12c9e567d0d7e133239", "1ba84b8c49308147f0bf88431d336b08677e53f9e3bd7eca7ba196ca8192a0ce"), ("30147207b98a7a33517edd692d7eebd2a16144a253b0bb8dccccbb91d71bf9e1", "0f708d9a54505c16abe516f95477aed723f6e4cb65e564bc6d98ed69170b8270", "0cefc269ffee4a91a77b27b937b967f8fd90792d1f2c27618588f3311d66567b", "218c1cf86a5c3eef7cfbb9fae1fad101f64c0749a5ad73c34fe2be6c917117d0"), ("146c9bb68f6fffee3bd46bab4eac62a5bc6f58f4288c70fea91667c7af375d28", "0e5423c4027b69a01aeee0487ae10ac997d6230685cceb613bc8189a5796b84a", "23af154db8aad2d8f6adbc890ab47a48c9d599fb1fde2312e7022d070098bfb8", "2697d0bca15a31918588bc09853e28fd177216ad87c54fe192a337ed056e1eb9"), ("17f318c92debf173e76a9762c70cc6b37252498239e703b2a5db129fbf3d776f", "10407729ca783ff76b5ff25e4db8fc1711d40cf83623debc43d19bbee30741fb", "0eeb222e7592710221e59d68eaebcbb1876e7f042eb410a5f264b6790de75e19", "1a0d8a2576747f59f9e70209939a6cff85bbfb7149ae2ab83d1310144f0aeee7"), ("26abbb66114b1ebea3c08666cb75398c10b19312ca3cc5140cfd63f845c56052", "20826ab709e3a5cd83b04083a840d71577bffa52393bf695c6a06c4950a63939", "08391a9fb1b19d67a0563252c7850c6f143b08ac7c5403f252e7c74f7eb4f47b", "22ff3c94fe33be1398f852e89135d78232721e1c8e0646b5d1c1e12e5300d13f"), ("1e25ff11178bca02bf5e6fef0b7ea2933f9cc8be94e052428d10741246b96193", "2195daf00acb5d2725cf7b0fe3c59779221fbb3add8e0d09a74da2bffe0c45dd", "035e568eecaa792b5a9210b462eca6bc131d915c3e16da3ccaa46ce312e1b6dc", "2cd8c7e9ae4ab7785ac5483e7410d29e97610c0df3ae4cf9f5a199a451e4b7af"), ("3063b28d06f72f21777d52b9de3e54b8cc4bcfc3f559c58b2e5bbf29bdcd6bb6", "1da5cca54746ac9f921f280cb26c9e7a946100c475f9c2ef541931e793b807e8", "15573a49b18a28ea17a115a53a5d506387450262b113a48289411b1b87957b38", "04af3dde5a50455a4e2e9b6e4a6d3c988b0b25e8fed5f95b866e538b34c703ae"), ("2018dd5ff4223a92660997d4cf2f162369a6d3e142d992b6a4d02766540c9593", "28dbb42d5bb38144e631bcabbb94c151a74883e5ec6228e720add970e6c301d5", "2a7aa43aa5ef44d9888fbb0924d5d4b1795e32a17463a254cd741e68d67b8ec5", "1a72ff443c6e42fe917183b9ff7efd093c552c7aef269a2759171cda5d3d9d9d"), ("21b88dbd83fafa4e65eb4a74bc36b678249cfbfc8ea5eccc09122dbb51cf5f7d", "1ffc93f741745faa367213d868989ff4e5ea6ff47154de4860dc9c7e0ac42796", "2e4de0d83237f5ca60ae8e4f4e3db1cb44c360c3c9edd112bb7720ed93c8fc29", "039f68e999b6892238726ff372ba5559bc963ca9cc3fffbc03569db26ad97dee"), ("184fb2aa867c291c7fed7d22d312eb333902e44de99ea099cbe023c9d90b701f", "01708359254d246f549e155a2769819375652db220fd95b00f9fe30626d6e1e8", "11dc0093e6a9b3930bedf48a2011a8143647160a7b1f059a2d63d43e3da152c7", "0535fc8fd97420cec0730ec49d876c86a1d80eed08764ed5e3e4fe6e1012ad11"), ("2517a599f37495bdae5e1cf7c2056364fa09b49c1abf52977d79d0aef8d1ca48", "15327e4719b4c20fbec4a3821fe04be4394714f70d449cc06b947e5c19927f1b", "094d874796213c438dead45b5b68e8cc8d63297effcd058a08c612bee32718c9", "01cfbf1fcbffea54e5bcc34c6810f79b5ddd9527fd6b363e81ed11ba54f497b7"), ("010cbfa1a2771a45e99e1ac8b5277418df1aef4e3688aed0b5be97761e8bc84a", "233ec36066a59a33aca570b2ba7d712cf8e839bd179702dc4d11edb458ead036", "2ece232b54002514216ff1df4b59507631097bf4011afe3d4f5a4ab13493170f", "23d00f5d0dd1e296f41b79e99ba7df4316d80743b25b79d8cbdb9ff2200ea755"), ("1c865ead25417234983b4d4a471f9456a6536d45204720e536319a1b33f0ce14", "232d59bcef8174eeab0806ae6f529a322c01090298caf40588b4c138512d09fd", "247573bbe9fc12a2a1b535150fd4808f79882de05fcb03093ac58c8c53b0b30f", "11d48493a0e9ba4bbe06c6604ba6357d69ad23d514dd47e101026db404e8e185"), ("1c2d2502479c48b553386e209da24038351c837690d11b7b71fe689703e4fdbc", "0ef4d37fcf55e93a0e664221efd38daaa38a6a3c098896aa12b8786a25fbdbfd", "0be917db5c779dcd6da3343792758b56a7869a45c02e18705ad63ba4212234d6", "0417c28117a9cd167ebae225d425a2fdc7ba9c4d502c17be3cdd290fdee83851"), ("0893bb0f16f0c44f08644b17af3807465f28ad3ec8cd79e3ea133007c7b19e08", "0b80d1849fcb8803503986c5aa505f2ef2b58607740ebb53bf6a4e74722ffa08", "28a6fbb671794c5af5aec96dbcfae3ca296317cab3c6231d3e0e4245838b34a3", "2b88d489becfb8e010009146c81c80c3cec6027d854cd9290588400aae39503c"), ("18cb2c6006b206212a391866e67aa622ecb220cf2d7b06481e35170df5c893c0", "238ae94aaea1f79ecc1591caf4210a267ea0ffd078d10149da5a4b91b127e133", "2f162fba196e8cba207ee302b8d4209f1e053091206e0ec0289f39a9cc2003da", "1dce7d63b6cc2d2883043540803268898c1aa6a173bc7546057dc57d053d99f0"), ("1da820435b072af0449a2558d18e0e254e4714f1e9d0128eeae6253030706972", "0d155926e5a72b4c2dfc253d93caecb99fa45bbd08d4e002f06fa0af4830518f", "169e626839e850c9080db66f7b1803b4f8be512e3c5f60d18ba5cfdceb47e4b8", "0113a8a704cf27f55aeca47f1288a13e42b8e2e3e4acb25912f868f243ba91e0"), ("1b3fe18f6cd2b1a9c9b1b9d0fd6e83c96dbb3ba3663406963d9a5611e04df7eb", "01e40774ea0f26a95df9a580d9ab38bdb1a595258cbbbac9690a1651eb493e87", "155da4c79d8f34d2ce8106181f86b544b6ec7514666acd1b6867d71a646ee1db", "235455488b56d707daa8a7289712b5279c0bfd11925b4f95ec4c1c7424ba67da"), ("1314506cc9db96a45bbbbf90983a50f3e4be319958adece589bc0054e0c0b84a", "2181b80d1e6ccc4e79950c4c66c4a827445e60b2d04a5bfba8ace71637eff435", "2162484a32f0daba49f9e44e33cf4b1d18e24e582a01dadfc40a728ec78b538f", "0f5d00b35e88cbffc49df1fec5675205bdef3a88be307039e8c275f05272f8c2"), ("070d10800b5c0ed56e6490d74e8e5c78582c6bff48ee3de0aecefe1d59a2e351", "1bb758ae94734a3374c220a46eb084ca0363e0bbf413bb73828adc18c004efb1", "1e929ffadffa5a2e3bc92f8dd6f030769e61829121dea1b195c02227c0c21fc2", "2efe801d185f449185549b73d22a1c12528921dbc90f849563f797b0571e0baf"), ("118f7074ef92573d0b5003bfcea4b2812a812f54146ee097ebe0878dbcd9488f", "04c3e4c3980d213ada4bebe7fe3e05b510a798f7cfb913a4bdae46a7d16571ed", "1ea3cceacba435252b6c620f1fa1f8493a76494c5164958aa141fb6fa137869a", "1b94e2e66247c71e74c46ffca274bc57f8610a72b37f2e38a2e4961809538c5f"), ("2491366fcb42945cdb4b6381a7f25d8070a4bc99ae5db60f9ca44ad8addc7661", "249686be20b486b97e02cd8ceee56ab77204b4f5f6a4119c4b7bc44e3ea41215", "09490594f343853cd4076d1d03358aec969784cb95cfd88b1759d9102b4d2d2e", "12e32bd4642bc90333a0147968b5aea5a06758472382fe17c864629f87e6b960"), ("0dc65b766afb878fa6246cfe72afd978b9665309f333fc9c652ecf82742cc363", "1a452171b3658923549241894550bfe7802b84581dd864771fd74bc894220086", "074acb04815d4874adca18d02ec49cd3e0265b6358c7a15e8041b7c21375cda0", "2356d4957840c2e304b55ac14aeeb06462695b38264571ac09dc260a0a3b45fc"), ("133a088c043a066de77ffd961abee51b0ee193fdf58f92f1280701bc98a097bf", "1bbd3ab6f2a4a6df85390a61b22ec4f5965855be3803d037fb6d4258e6731105", "144b3dd2d43f055c49cb3501c21c9db914f44cd8e884e7c3a418f2a23e466ad4", "15f2fe1a10a9a26bab541d55c44dd25a48368bff93e6cb1723e1f86041ddfb96"), ("22b9fa624424f57a897a7de73ca4f2d45643102e9277737232d860d446e309ac", "0d8fdf8e90f002537677617c807009c79117faebed4a5410d635bd108c4074a8", "3032d2ef753a2d224868f22d1767c76fa5912fec98491881dd32501804a6ee66", "2f10aaa727014c5abfa6f64b0bc0fecc309fc8a1ddc8b643d5221feed68c364b"), ("20b231b5b95c8da9a0b836a31ef97d7dc5a793582ef9b06075c9ce1070c2c703", "2ac80c2ca9f6ef85065f8f4d05bcc726a2482bc1e040ea01e0ea0c3b5495e11c", "1789538604f5c11e77161738997cddf4ba56c59dc60172d863b17b49b75b234b", "26be75979ec2f9c615af2524ccdba3d38fe5d630849020b2a40114c0cd34b76d"), ("201effbfee10870772f565248985e31be6f4fca7047ce0f3c7db1794889e55cb", "270523cd9ed47247461c32555c91c2e7eabdfb20471546f2ac8bfa08a8612cda", "2a312f8722e17c6374644900a66683479058515c4b4d46a124daf00722350556", "169cc21715d7ee41ed0039f368c7a11b459a8e12ed6bdde049c8eaf5323d3562"), ("125687409dce67b1e8ba449482a5fd2ecbacb894a5c2c30cc5d4313c1560d1ca", "1394c7b5c1dbf0a5a4df2812ecb7301c4a84dd5b3f6f0ba2148328e8a10d9753", "096b64b89be99eb176e1510d5dfc0f5764c0b0e5e5106cbfa284876b55d96d01", "05c5a845056dbe9532a0e3f6aff6ac21dcd19e5ec9f0dde9443ab23107fe7c0a"), ("18156a3828273f60e49be8c9dc2822030c888fd62c223bcda85caefa84d51b85", "1e281d47b1f50d67eb3e34c1b646a9dd94865a83847e568577b7d039abef45f1", "0a8d357ace4b62402c4ebce0294c883393742527c8c1edcb17018247bdf42dda", "009f1c41e41cdaefcc7356a4104a7b52facf1e563cb76531ce91054abc9d29f8"), ("02fad92a8ebe705fd4bd7c116d439679177bfa50033a803f667794536dc4c55d", "00e2773accd84f0d2f60ec8d7cc6ce984f93dfb85eca8eb75cd8abef89983d92", "21ed2a9a09653505bc5b01c4787d62c052841697cb457957061e1a619b119cb2", "0f515d80c581bfffc393f2ab54d8d4d260a77deb36fe1a28d3b8cd34e851c2b1"), ("00419b6e096c2f52fb5761402aa9df64b0068bedf5c515fe22f5ba39a5486b03", "2c8d6926c1abe54474a1210814c808413d70e5a8891e2182c3173b2a3485a0d2", "0c68a87653afe67093792d70fbd98a4f47e44c6297bcee2141a5c4e3cc8cda7d", "08c8b219b61007da2943c7e51fce2112240371466222bf9bfec491285536b496"), ("2a29598ae6f6559e585de5d57328865afbe237957603703bb42859ec753357a1", "1ebcc02207f0f9ba385afdf120e99b0fd0c9ad47ffccf39c40c61a0f7d9e94b6", "191ccc64c1cf5e7ad069e1a974961caa4d2e81d1ffe36f9405ff8d670d46bb1e", "03023e4ad759efd5913a88dab7b7eeea57f1a8d937b42078a11def21fa931ac1"), ("0a4facc6feba57fef406ae4cb231acfa7f95d8f9ac17865ac13920e2d52315f1", "1086c13ba1cef15639f9928c81ea92755506b5fe3c873607089ae7ccc76a692d", "0951d80f7a88b738ae7be066055277919e18ca941c4adb835961a6147a99374f", "243b8c12789d3df3f896c005cc3f38216def35f6514a2610a211928b0ec9e17f"), ("27080b10186ce58896691c1599cc19e05498c61e4b608741af1e0a79aa81191f", "0ac42551ea3f7d2102f2640908fc8a4e45b0ee140ae300f6d9c6cfa87c6b7650", "08da528eacc2bc3d794d9dfc17c96615b9bba933ef67267556bd3faabdb17273", "0c047dc9273ba9312543ce0dd9995a92b5829a79ea0cb9311d83edf03c5e2713"), ("16161a90c4b82a995a54ccb35bdd536883a98f304d434550d01c42c17fbc6aa6", "0155a6e24a72affebe754a5365517d3c09cb95b2133ad4a57fb70302e1861977", "2d17533f9126a7372babf819e33cbc5f7d377d16608910c3529f265112af9d4f", "218b7586a53f1eb0cc37f6eaab02ca9ed56e0f51901d60694020855aa724d0e8"), ("16e6468326348ed785df75413c72b9f1ba6451197dcf12e0b1a883f2d4c56493", "276cc5f722ce4018ef1b906e221adf103225a5d029e9a2e793c00ded82d0b22d", "1c37b67331ae603cdeaa45016a4f5996d9fde07ec0e602b0ac358d81e63ea5d4", "2002540347f3aff244149511daaedb85dd168e8cd3df067fc8b063fbea0783ad"), ("26a6f196b9d382d48a669345234171539435a79891b8af90c7e977e6ad14d6e2", "1b3ed682c7517e83cffff25a1c6a8311db52ee929d58da4742caa916423809f4", "1ddf85d820d5ff1a0669aa81c4fc1c1d410b43b25a8cd7c8f7058bdb5154aa0d", "113037870e3f1b10553510c6f91237acba166301e748ddef85fcc22d8b8b755f"), ("237a7cb1506cb7dc4d510cbffeb6626c3ef22714c1dead88321ecfc6a6d7d382", "0090db7685ffa1034f591e180a57720fc9fea882519155c7977ae2f98a208fc2", "0a696e5807ad76ad84e457b33c718750e55ba15ed0633a49fd6ae2ab180a497b", "0759df883f767c8df1f77f4f4532c6fc7adcaa91914479aaa779a8dcd0bd18b7"), ("195520aa00077ff5bd88901caeed451ca32faa68879f9024dc92b7faaf9b8708", "2deec52258696ed752a93a242fde16ca806ae7670422ead224d9227bbf3ce75d", "18e189ce4572e28bb1ee1561c860345cf040b7f3984eb99a22c155aa6248059c", "2d43b63d5348a60b458d9ca9eb40ef66317cdcc7d9d05666702d057fe9217808"), ("1469b1b422c828e6c254f67b9ee5aebf07fc675602b858ab029c49f36910c5f9", "08f730e281c1052b2f564b1668796b7b376be92545d6d787481b93ab713dbc5c", "1d91e7fadc3ee0e3999451e7039b595f6b1bd48af2bc1dbced8e11519ce8f610", "05b26f2779b7700b4ca07d47f600886ada25a0415003be862cdfed128d05189e"), ("2bd76244d88f5895953e9066d8dac15b7878d1279a1d2a9cbcad616786631e53", "10a467bb9234bc4bff8f49cbacb8c0a329bd4e991dce23c4fc8385d199ea49a4", "092979a554e73946e50c7b200d8ede78d12dfd0e09f0e8d148f41ed01f93e0fd", "2d9cba588fa49d5bf72cb6ec4f351de0a4074697b0ff5cc444c33c43d744137d"), ("07b415b4b16c677cd73ef1fc1f636e407afa35f2a05ef4b03ee01be12f7c8e9d", "2f202de88880f0956381df8e5e1e5929d064af65e6041b8d939db27c3f47e5c4", "1d90c3762c9570640876e8c1dbb40be68c1805e7bd2f7b82baf978094e1e69d1", "2d545e7f6550fe7eb63edf96bd6642fc9b2fd19daf4b5cea0f035630dfa0eb7d"), ("0015547ac353147c488934cba0afe910cb8cd07c2a3f850cab7b20cc4d11ee00", "1f0fe388e399cdba6eb74bbff394a044aef6a092ffe3b3e57a07a3f1761b0b2a", "30555a244d173a1f883f967aecec834edc75de471acd5d636cb271424db0fd22", "09475bf7c35ed32fd6bb7107c28a12264eca7b592ddeab0674c0c17420afd240"), ("1a7773a65f2359ca0e6cd39d4fc35102efcfa4bdab91963457b0f6851537a8be", "1955e2a9d2e9e0c71dbbfaaa7c4ee9c7dd3bd40f3db005174b2d13ed6b1203f0", "1de67c833c03207bd38daa53d493409665205c757063952bfb82fa911b592a29", "1c390a14786d60745b628a06964d70fad44eb88458d6fb205cbe775884b1bc0c"), ("055718c0bb11a25874b2bf58f1e0e7a9daa89b1c7c5077a03be316c987a62aec", "20d703de32208b7584957121989bf9c01185d8b3b0238db91659acea509f322f", "302334367f9c11904423782b416cafcbbbcd2b57d85ba32572ab9b7de4dc98ab", "19180bff4263f835a824c8538ff739566de55a1dbd1773aceef4305f0a0268bf"), ("1f7dba0d78ac43e558237ffb17ed5aadc0aae0b9faf34288eac7bc62dcc9dd53", "1aa846c7880c98340465f9677c97b458960cb9f6aff176427b82804822989f9b", "232be546149c7e332894b88ce0620569ecfa1f25354cb3ccc55e37f4067bc430", "191b71c359b861d3a92a2eb007f10ab84339492d4d6f4a0616e5ed4e42f6a9c8"), ("2dbccbe4a33616bb37878ed87c698c493acbc3925808f7de91cda3416c330b38", "29e506ea1c65323ab78eec6ea1c8b47110aff55457caac2c4ab63d2fd324e759", "2267531d7f393a569af5b63ec83e5462c4af3d5c099d526a671d72c8ca50e0d1", "081afe03938f86d4a9d246ea9df98d4f39045a2cc3d8e191c3f1411b422d6707"), ("070d071e6bfb9f708fe500ef14e41dd3d18e10064e6a889a3946968e94263fab", "13b628e56cb84dda5115aa4a0f090a24a80df7f2d7a61f777f2d87a7aaf00de8", "1724a103962c592de5b6c112a268b9f9bab203e0b390fbb9122156cae11a30ef", "08187559753244e9ca0df43d87d229c1c7dea8365d5e3f26cac8e56cc9262587"), ("0c400c9b6afaf3a3a8dd26dd699d07aa0a9c77d55327352b8805d90cab9e610d", "291f1193480001bb4b9038e9de2dceca037ef2f56cafab32668c827d05058258", "2fea000691011327ee8fe26f97d367e865940284905eea3509026dd5992e630f", "27d73312ab710ba5b5b07a70c55bb0d7a54b1691f2d220ea6f6c545ec785f9e1"), ("1e843d6a1137f8e2979b092c6949fa15a35265858a9887106b5e1a002352afa1", "2a80bab94fd229025124758d69208eed2318b553038e009d89676600a149e005", "022e2eb3ec687810f3ec5ede3c4a78100b5e97bd7295ededf20746cc4606c3e7", "000ebc15f3db496786482404656df321acc32466b6c71c5a8f5105e43db1b142"), ("2cd6aa7284d0147ad69f3f355e8a76469e4ae03c0a48672321958738fadffcb9", "09facd7228bf6afce8a1ba2fdef50a2a28c471c301bdc70926e7d878e5b651ab", "18f7fb67d9722f3e0b9993b8e3a70ac6e46d3a57c01797bba7abc2d0cc228fd3", "2fa8f5b888cada5066682e1d47025bd63ae232175e4244bcc6fe1f857b879059"), ("00adbe4832c241300b674f4892ac0aa53f4e34669744264d12673c0085e3d599", "0a198768321aff5a7f2625adaf26b1c2069098430804477961f632b504a2ab77", "103ff8c9afc739b6a8e3b431d4f61b91772b7fb694a3e83bdf2187ec465433f4", "0037047933236ed8f809795e737ec897e0e8d0dca54fdc840dce3605cb569cbe"), ("171d9d5d501db2f19ce359d179a010cac3ae6fde80674094d2de71c2c4386d09", "297446f5be4f08c8dafcef4ca31a283f73058ff11cac542c823c5ad3e7ed37fe", "1cbd9ea61288bddd1c4cc4692b0c5566fb65cea371521726ebcd242bc1e775ef", "2c4a21565bf4da7db0119c95f6716388f60612ac082749830f9f1a130025399d"), ("2eae2bc560f910c7817a84de64b9ccbe16b504dca44396d852d2aeebc620888c", "262aa6c37a0abd4d03cba830c79a7beb8e445a3331552bf9470f6238944c13ac", "1ea4028009eb42044aa1db92fbf9060154fe157add54d48e035a00e4a66e215b", "2e806f31ca7d22376c427ad4faedd42000cd489bba0d058c5272c5d628b4135b"), ("15270173b7678ff6ca0c4ebb531716a3cce03fd0ec180acb4c7eb0bbc81c2bef", "2d884af43c7e4e8ab96126368941d464169bb8bd16b49eefb279284a95162ebc", "1f505da8308700de7545312668afdba48b55c4ed373a09fb67db43a5f45460b1", "0cec6afa916bba21ffb60b7beca1a85d34e4024862b054733d12561de4de6069"), ("18349831c648553bd4df02bfaa63634030e5b32cf6f6dbb712cf56808bb8cbcf", "07e870f8aa7ad135142a4c1bb69c64b7745f553c64e441dec918ab0692d44509", "2dea8ece22e405bcc1f0393763c0b6bb61ec353f8b036762b1a35ee2d089f9ce", "2eddf3e76bcc61753e03c8fb9e08a1cca5a593183bc25ea644a5a8bc3eef9134"), ("0aa1307f1291969e6650bff4b3b504cfe78dbabcd61de762052d758de395aa3d", "190cb94ab8891e14c6261b5edbe568446d3cb96720619422e97b732bca298518", "22dd2f26efc5e40d39e00bc48f9702f03a7b3eae3ea9fca4affe3c966bc23e89", "0839bc044cb9f50fa6f1f2e571f545c7d1ea1177b9576a032e0875616994e4fd"), ("1de223b13aac63bdcc97247413b46ecc460cee513b484e51146622a8c2134ad1", "0d4c65a5c977b06aefc00d11376648769be44924990e4efb03c3c54f3bf49ebb", "1a86dd875a145b07c8456d586edf56d2bd04714610fba95425e8c47c287be53c", "14df25f136c0af3d07630f8e392481523c71963d508f2c307a1d174da6ac755c"), ("0f49b6db94d7fbe6ad3d5cd120500d4ee51e5ec46486601f8e6d82207ad994d5", "28b91e93f267197c88b171e0780e63b4f7323947f179f18aed818740c4d8df99", "00f57900f79740b7af3905019fed30827b4b766fcc794373b7de353a1cf47de5", "2179b502abd3eea3794e3cbf9897da9b9e6f5959877dfadce1b326810a3a0581"), ("305645003dd69eca880735d25395dda118d8309177ad6a066b07b4de0b584462", "13ce88b997e94d158ba97e09c5acf8f71b9d47b6e7f447bf7066ae7ac18d20e2", "2a426f4e07c3c4561c77edae89262f669e27b6535ae4ec1753e7d17227066061", "15794add4976e04050194c5dcba4a796d7dc2b66c050f896dfe47273070f3d15"), ("10cb38f133b682ad134810a0656f991187511c360b9879a50bbb2fdbccbe0a32", "301b87507819ca49d3904cd26fbc8a99182191cb7d05b2f2164668c6d74aae41", "2630aaa1bc041f3bb67bcbf33ca988bf2877c34da052110ee854640fecba278c", "20497bb13293a7e90f73071256a08130f329b01d6ae77354cb479ed690775e8a"), ("175cbe0c01c81fa36b67c5625605493c991191c49b24f13640c6dbc28b72089f", "2f72dab33f80c9e20f40c79d3a16a9e598e735af10726b151e2f6ab8d92fc1c6", "1d5cdcffcc0fb817f23388459ff93e5d4dcb724994881c4936df978e25183290", "0e99bb851a4bc6d2ec8613471e2ed2adf490077309e2f061101d8e9bc003f8ca"), ("3043229107a91941d2fdc1d962d4b7243d7d59d61180a4a525c6636c6e18f396", "2408ec0b64ffda960a82523da54fcc7685921451a809530ef8004d18c0eafbaa", "16d5c9d88cbe1c8dc0a5cb646047e18b280f9f572cd8af9b5397aba3e6c1a2f5", "04b8a24ee5b3ad11b6f9e61bedbfa7661665476a4c479db5a84b178ae7de77ea"), ("1388ae15442b3c7583c47eb27859cff7690d61d39b8a966da43d3d5861c8414a", "091699ac9de3ca5a3a7536b11cf7d248de3d82a480ac639954355838ddecb233", "034156ab619d733e3724cf814352a5692219abd203bdd8195b4c46d23c3076dc", "0d4e3cd70a862c63d0589373d4b10c280c2fd4b04b83e41669a9287797416c1a"), ("1878fee0fbcfa67b3775b36207d9581aa6670318beecb348f5a7fd6e2337b617", "171e8699aaffa18454824c8e97658deb7adcb942c9fcd6054387c6cad5eee804", "04f000ea2e8172af3a151bb912ccb334ad8cb0aa306fbfa495314a9d4f35be36", "20d290c777d74a6b2212756333c81d0d9f92309c7941eea7723056e6ad46a6f2"), ("0f654be962f2048971701894beb48de45b6bd8aeed9f89f9210dc7e5ace84cdb", "1d8ca7c991ce3cb3527ae2635e9dbfcc2a4f8517ab17b0965b4f8631fc02440e", "14ec56bf9345a24bf9558a25f02cf509b8fd79c7c66a1b46b9067157eea4edfb", "0a59b79cfbef994623a562cd8ef5ccebf7e02ff3ee03f978ace9cc6d4c55a78e"), ("2f684d653ea36eda6a3e9c64c0b0351f56ac5197ca7b3bdbc18e8f117ec044cd", "09fb3c93708393e765a511f9231153afb6c9b0c03d3c3a99f41c43bb7c9765ee", "1c9c75aa5781915e9d364d178d67057270609c4f9d1265e3b684755d225b6e02", "08e23e6c5a7ee2b364c92211c5c1bee0622c21ad792781ffb4ec5ef6a4861b05"), ("23eb33baee8347725be8cf364079a04c4e830a5ba095d9db1f6703c20bb221f1", "1fd005544cf04da5cc5740972d0a78fc1625e487e7c65742d43a62fa482bcf62", "230545676f7f572ffd624d852411fde459b27afdec70489a6118fea599e5bb94", "2c40af05a99597b70fbf71beb66f1ab49e058c9853e931e524427e2a648303f6"), ("2d5a0b15ce75eeecedeb76f358cd899c405704851029e903ba22ade992222300", "0fff5fc68031794f9c4a92029c13c36b6b63ca08e6833e645f640d44bbdd3ff1", "2b47b5a0d7b0d0a8bae934d31ef2ffaa5fa9a81ad8594a9f173aeb356c0ffb8d", "09fbb800375f7033cc6fc2b7d3ea285194ba204dae4f1acbefe54adf41566f0d"), ("2b43ec1a2179b84a2104f0ea152224ff2d3e1d7b8669600c37288a80343e3f7f", "18e9228e27164e48af8938110b71234a27cbf123559224f2e2ee20174c494563", "15586e0def5d8942916f5a41b6f94a60ac74b3382f97cde95842f9cf6949ad4b", "11428eb933fecc12c7a58e2d25fe194363c292ee41b1a2fc5f845c044a95ef4e"), ("1d90b4c7dcd3532d658758306846739fb65a4b5e9a17ec46e874f2dacbba8d7c", "0e0864988f19563ab630e9f900d05005dad18755eecffcc292ced0c98ebb6381", "12b2a24a2d49ba2bc4729268b2bec1196be47cb3667438101dde8df79abf0c66", "1bd3a8f8aefd9651c1d052fd7ded68862d2114cf11968e8c31853125e104f37f"), ("2dd2d9d190a5ab5a64c78de623adbb6f14205203720a71b3fc279c3495e2161a", "26aa05d4b38712f0350772be97b716ec452f80c90259d5476c3781b7cbb093df", "0299e8b48b78ae66ec9ee3fa183211f8050d537d3dcbe25954429bd0184c4216", "0df553d02c118dbb14b6ec44c9b22086ab655d10cec4b0ead9030d80e2a37075"), ("0c94e9834e21cde85dc8a89d3b63dbe484ec403f9a0569a3e93a7ae312bcd520", "081a01d78baf49ff82b522dab1f8648a6f0eb141c00376f4b5ca33b4859b3318", "0b6150ea8a2191b4ba35bd7de4c4bff1f005d4505f03fa0e27dba5366e9083a1", "2ac316283aa1de2b70f46f83162b052f33edc5c9d7c21405449735adc4de5575"), ("1c1e987c4eb9b14ce246da37749fc6f75d4d635de54792cee05cae497518e624", "00ca2295916f6260ff63fde3fb791f834937c8b0c0e93c002a5916076ced85e8", "2dd206b40444a48eaed197828d0b99709ce90b9fa612392cc4796cbd451df8a1", "2b4068c442bc4224d7d3158b6cc69d1349428629e763594557a8d24d6cd5d638"), ("0848e6de8b2887f3128c7e9b2c5a667d43444525723d7f637a2d0351ed1a1dda", "1a40397c1a3fc9dac955b9f32f2421bc2b8b47a64563e85f4d22572bfe6b36c3", "299d6ba60ad196d6b6d57c9ed8ce5a6be9930fc6039ac1eb0cd5c59279b4fff7", "239e672e3f01da186f0869868f0b5bcb36354a31dacf1f01d0795397baf012cb"), ("1612c764065351b1c4a9b4ffc719420808d4fc61b5864b15f2f5fad845e34b3b", "1bf876d904cbe35691405de0edc95536137b85cc9730e8e5836da891522864e5", "1d700e42accff85a7d1bf57a92a54c125f46fb7140f2b680f7738a706204fe0d", "2a8f242730f01e08995081e143ab41baee43da1e7e4efb8d499ef164a7e3e057"), ("1d694dd51fca065b0538ac23b5b3aee5a7d5c48cd09d1e425c9f3f3c256d3917", "2af79869d8a541269d0a76860dbe4ff441b8d25b6b02921367bd3915f6a3d877", "21d4276dd22fd077f0fc96ec2e615fa9b01c1ca7daa78bc3be0ac1bdb85dfe69", "1ab3c552bd4fbe360f44c2ebcf7e8379adff65fe1ad5a57d48db8d0d18aa7365"), ("034bef48b8152e826973b2d2cf5b2ecda57ebc6d63b557349fb4aa56191ddb97", "2464b547556390f47d40534d5f5b040be3c05d297fd8b2d3ffaa1e54e44d90a0", "12f2cef21e91eedf230eb4fdaebefba15ba44144ebbf414d6a63440c2dfab14b", "299bbb5a0ccc9cd35bded93e8290891d79321c56566b39e28672bd5ae5341526"), ("0ffe8cecc4041715c2399f9aa5094ab238744157157d035c6010dc1e0c9f081c", "0b0b8e00c4e0c3148efa50d9a86799e813f707569367ab68813573f8775f39e9", "102e2852b8681171851b86f66abb422fc981180f06cc3501446aa095ab7a52af", "0f6dd6d1dcb7091adf12e0860622bfaca4e7935df37458ba22c361c0db6fff76"), ("21748fcc25fd6d5fce4707c37c1ea4d29ab4b3de57b0131657d758c033a48801", "233adb165c7e2107230c14967c5e4b8090cef5564a61ef5db789fd23160160fd", "1691f79ec0f6b29d053d8cb1bc7f961f77c7b4120a6dbda85ea9c783ec34aa62", "01e318660e34dad61b6a691270a1bc30dad5dc173945a581da2e0286e6a19de6"), ("2cfbaa92336b26095ad00eb48bb7dc4f22cb0e9954437e2c40711da746c7f42f", "1272a0f13d1bcf223b3501ae562ff90e944949ee2389c5fbc9405240f987795a", "04e0331a9c2cf5ab4d8117dc0af734d8ebcb5c666cb3beb8c457a45acfcf33be", "095f3880bdeea0a7366aecd175d66cb28de8bdbf3ab7d2012c137f2f2c5c347b"), ("1ea9f03d3f70760f57a36b98202c5e70f704c155ba19b347fa955f0c89848680", "18d7292edc33c007aec2a11519d75aa377cf27719ea7fb8613ddfeb5e28b8859", "19770608161506b550d1144a9352000f4324746ec25e8c255cf3d998e20d5b5e", "072acdb840e892e133d6dd9d5b8a71a7f2d328e2e1eea89b1a4e100b85580a4d"), ("0137c7e3b8a64d316714509ee13ce87d4421bf02cb778b2379d86f24b9fd0e50", "08cecd58177cde8e03dc42d277bc10ccf616e74190d38b86dd6be6c6bf05e2ef", "11984394dde59da4628bc637c2cf14c24494815fac48f48f4702b6af1d0d4377", "05171a56917a251645b78b64d60d4140e6999ea2eec7852955ba77306644b501"), ("0643d43be6a6a98e80e044fb8b498d6c2b9e8aa51b9903e5b2088be156fc881a", "05225e75a8108f3873195e2682ec3f76f38d94d2eefb66196d2b0c52bef14329", "1294927228ff4d2b3e594f3264bafb478ba371daa5914380f4ad2ab83cb105d2", "1fb59f3f69d11c99816a0b8d32c6b323b09206b16ff84bb444df8fee474c1422"), ("2f47d3a6f575c2910ff8c870cb0f4acd298f723c81a73e1778ed2c59e42bb91b", "12562b3785cdd5ee26645fb13f90c4a1e13044aa660f9f36a89ba644c5002993", "034ca18c81375175ef30330bb623a8801c668855c2860beafc123d636e410e47", "1eef4fdc0fd9ef664df1329dd9fdc9301ab472c8cc4dcbaece30cf7579b52ce3"), ("06cd8de7d531a8523952edb0d716a0db5e70b49a5002b4ca2b1243e7ad22c0f1", "2a46af182293752b93e088b26d86b6d5593e881cc1f43e3522ce9255fc0d2f9f", "04f2259efa1094f094d1768b4ed006cfb2926fc6708d4d5066c503e8aacde486", "2854e8af852b4f08622210e8a776b164a82bc15794f2be9670db6c6bed8b6ca6"), ("0f2baac0ad3cc0262140799ec3417986d07ce67eda5da4443c2b4741a134a24e", "2ed4201042a0e10d55dc39a776007232015d9305ef8937ff099f3e15e696edad", "1720129c6e53d4bbc39641bac669facdc2c343ac4f14c9af30b30336f91ab546", "2f31517cf9b0121e4ff46c4834350550df9d5396cb382cc4996b6fe85ac63829"), ("1a78f28f54a19e9f3f64c17335df1fbc08211493bf8bd8c95a65a5194c89f239", "14e70441572cdfd40a9a8fee0500b99e41bd88a719907eb3302abf7409efff02", "090e412b18298fc9e9b690529335fe1b3189c39a9e70f76ab2a9a5225553ece8", "0be38f33cf10f0849c71b83e231f28bdba8a9ba7081ef3a12f62a8c6ece0e4f7"), ("1fa3b8906423a3100efc2c5d7b707a9493227121d56eb469939b9fe179e74fd8", "268b50ef27f96255e1e6be8c1537a6546fe90093e769d72d775d231d8e7f3c8a", "2fab0199fa41b982b93f6e2deb3bd3d7e929b7563664f1e5640feb55135c8541", "2c1c194eb0f8ea009558d10665eba5c0fd9c22899e5e05a86259b863525a8e1b"), ("1314dfad95fbdfc3083582550a06b9a9e7afadaaca5eb1d24d646d68720aa775", "222027f3a375d9d0060940ab2211307af25e968d5982cd448f89787f72603f38", "2a409212da6564a3e1f3c79e056af016e836b0fa8bf91b280afe7e71418dd3e9", "18d7d3c014136fb21d7110070d18bc78e53684305d40c7446c5fb1e67f5575f6"), ("222140fbb6540384a3b409858cdc607ce0ec53a86bc9d144e7e7786e9639d6d4", "28c3e1063a668c4381d6023748a7c32828f9fa3b2ab1d49d56afc47c9030c91b", "15b9edff79989af214cd4fb4fd795a9d903bb16fc0b489a539480140c80b4aa4", "181474a888b033e0bcb8fab2329538da661de1c0318237b12c15c26ceb6bc353"), ("236d02514dc7c93e3918442d03bcb1d748df5dab0b803b69ce3d45132ca57f91", "2fcbef4d5921295790730ec163b80dfeac4d2479b9ed331782548c8cccb9e572", "1ad1676e8b22b01280d2eed9c94a2f3560f9888a0ee01c6c6c47300aaae24c9a", "2cbec47e7abce6467b1463dfc3d301179eb5a7a824400ee67748f6b69840f8f2"), ("295be31ca6e95ea34c3334876ee857dd1dc320c3e9de7fa14451b6b26f18ab3c", "2bb0deb7f4ca04c9a5da6eb0f10f66b38b3d2982cc39bcac4862a9599d00239a", "06c5999f4926811c13195965c0594a8f2989c0e631fbe971cea0144c0155438c", "1db95394a6b1db49dff71ad45178d992a2feb1e78c5bdd1822a70ef6291ac771"), ("046d25c0a5db98dd53128041067ef14104d03388ebab2d8de9361657876ce5cd", "0e6d193d33fe571ff52890848343ce6dcaefc18f83ddd12124f8c08010d71837", "106f6af0a2bc8c4af019f57a5540fda4e6432739254df3e7d2a947fb69597eb0", "1bc8538e493b259f98ea1d521573fdc4e2e8754d193f0c79bdbac74f5bd0e0d0"), ("15afe8e4b45fcb9854b7f3a6f698ac5954836dbf35e6ee6a7869e1b5a9ed88b1", "2f024a398f94b2f1105345567ed131bb6057cf4a9768e4ba547bcc1b8a836f56", "013a00f861adf4dc1b4c73d916c636d70469d432ebd1c2f10adf9ad3eea72615", "23d92b2536c8cd6dbff987c88d7c6db5ccf45d5aea3eeae6d749bc4cd31a191e"), ("01dfae3b6fd882419948140a7081b40944443d5bf49746a727683aed4f6d0396", "05b5dfdd7a643c6619ebdc7a15db933795cfbdecd39c1106cc1b124e215c5743", "2c40d370b5e3d5c2de1d14bccd6c25d551bf2888211dc057ef076d39bfe71ea7", "0d8590cbb827dec149eef70d2bd9e74d3895e3e49d63c33e1287c16bfab7ab7d"), ("0f10c2a90f7724ed3509081a58da9204df8a3be03bbc7de5fd020f243b18b7bb", "0118c687eff71a93db14ecd0dfeb527ebf1e66f3de024e20fc50ea2416b2a788", "0cefb89b5bb269707e33ce93c347add97c1da278d288ddb4d3dfe2f0fe423449", "0eebf46c5fc536799fae662c6d5a121288d93ab99e77787e3f605a1575d7f42c"), ("0ffa39c16d1b5672ad00d2943ad4cf53f8825d41bd3d4f793483c0b96a025723", "2171ea0a3571cac8c85d18b52ba6530a9d0128f5c6c5ad23b4a49c6b9ea5207a", "114d2f96b9b6c8658a0f8d2ddd2f5054a43cbb5b16f49f0bc145ef053e14de9f", "2af82be7f0a53238829e9c723d48d55c3d541c517bd7c3b3d3a4780d9ed55007"), ("0c716814afb1cd17a319a9aa228c53b4eb6b2742f59db8c45121edf0b51fc684", "2171e4dbf0e462b3a9e6671daa20052355610a92e3d1a93d896bdbec46245516", "300ea97c154f8220a24639f281a3039ad7256cdc3d325b316b8851194ed5a9cb", "114d438f7820505bfaf50fdfe7d424d4404653945b1b62eb37330dfc661f07da"), ("0eb3b6be109f684c6f3a390d86271c317f41ea3ae2ef0fcf65a21e7758f514b8", "2088e98c780360fbe1b01da8c7945b4cc5534d70812a5e856d05a7018e78db77", "1dad1db60aa549ee6009076c8d5b85c0cf3678dbe612e1f4aadcdab350f3199d", "11f2d79356d95f98ed6b46096b95c2754f1bdf19e9c88c05c1769678bee70b27"), ("210c04d43d3815fd09dbc25df7816847d778fe7b08ffcec755c2eef4b795f1c0", "21184c888aabfacec6d619ffaab81d1e62e01102d785b3f36e17f5d93b9cd2d7", "2b6b62b023267e4b45a61c4526fbc1d84d45ee8dc7e037e0e096fde8e82bdb9e", "08340c75661921c398821290351146f8ebf164e24c72e0d32f6e37020880b9bd"), ("09deb388a74bc4c0bbf004fbc83e48591da3327e5ef0dc48c6ca3532b3b2fb13", "133ba3fd45f868d51634e2b28dd6710c6763afaae1593cba1bc3fe7e26ffbde7", "046acb654be4fd76f5e3569baf4107efdfc68a8db1b5c6a38f95b06712f51c9b", "11534afd1607fdcbbd253890070091e3e588472d2441ce802faabf6373160567"), ("263f5f372880214c9bbc8433b33e6633fc4c1b2579046303b6768455a10e3876", "04c7379f7db56a2c0e58b6e68b49f584f819d43a40097586f7f8035aa4e67c20", "076f75e3fd793bc35b61990a2d28280ca01e5a30a97ad89feac4433dd3fa063c", "2fad44e85eef5c01f0843260555dd9d1c66195d97e3e7c94cab5062a84350e2c"), ("1d094ea03468942889b56a13c9aa8a12e54663de5de7e14dc42d4aacb073835b", "113f0b1d749c93c7a16d8311a45609fec360cf6a14da195ef4ca58d6a0475222", "1935b145def6c49c711c5372e777ec0071ef88447b0b9080e006a010b9bf57da", "2ab2d8c5f9d67a49d51db2300e35c97738ac2f26568ed61ecf764a9809a18bb6"), ("0b19696b628385cf0a850142abaec1c52204a728685facf128e4c69a3c425cd0", "0f76ac19d5a359715c038812b02f5519301b23b2025f796cd120b6f379ff7cba", "0e32cae4f83db55bca31dcbfb99b1aea054838532011e3013f250058a27131e8", "200d54f3931a11b37846d02c5864aaeebcc54348568ede51fc1231f72abeb36b"), ("09aa300b598d59ade32a55c10fc0db1b70591a4290620f17bf10fd9cac59e9ee", "0bfae2421c4d814b2134006ccbbc92b64091d1066330d023accd982207d10656", "23ad70c479a3d0c10d91ad2457dce461e299e037ca8c8fb0454f2f1fa4978d68", "28e361f96526307aa552c0f9814b162da3fef56b997d337bd967138e37a4c256"), ("1b5d1a17218a63c8d0bec660cca19baba5b1896132a573fb9424e143ffd0d198", "0696ada8a2b178fcc1d79de18012a36c067af3e8b8584c96f7c1cac724c23301", "277cb7af2f6bafc6b6cd289de116d7f4ecd1a69df77a4a799504bc81dcfc511b", "2fde185ce9f51c6c9259fb960deaa485cec8d8bb3485eb261a28ea3366178b9c"), ("04d3cd87b193b948b952cb98f381ed68c9042d5b790f199658d9570ab326b02c", "063cd6ea349206f94433f79fd97695cb09e31aaf63de1bd7b51e6fb07096b19d", "097bae88f213a10886a42e099426ed36ad86d80faf5ac199989e9aab21d0a622", "0ba501a978f31bb9b6d5de26edeea9626de37b7e7f708820dd07cd7913d09fdd"), ("0d52b71542840ba73cb6bdae1194494307cedc846200855e4833baf83f92db5b", "0f0e95ca1a6e17216d8838a550f6b16e1df9c573feba7397ccef3b288d6ff850", "1a58e8283f307a7ca627676c7abc5c8b439ebb163cd5f79f5be7c26025f8892b", "11021d07b795e60bc19dec91da475d7ff99a8ffae4da9796104175df1329f9e1"), ("173545ccdafbd1e888efd8bdd75cbcde8b3e1a495c6b99e9ae033eba041ba50c", "22efd532a5c35251ecd0fe43341b8fbfc6ba2b34d6ce5608453b1e4b23042173", "2eef4313a05aec1e8bced5cd47f830959723d7ff53d1e17e340f1dfeb791c1cd", "118fbd457184e1aa70ac9ee06eca1aff0dec4e85884edbe80f5045ead618b94f"), ("119cd0e6627272d3156b6d6ee26ceb05abfea081c7794eeeff6c218af6e04076", "2cb779696505236378071ea94fd3644780f885d4761153988b316ca17993175a", "2c3657f357b16715dce114a302036f54c8d73779302613c051bdf6c83efa1082", "0e3b9b1ee74cfb9e2ff93eb455723287ac57588072b5385c741c49c2022dd417"), ("0662199b3db1d2f6fbeaa89ab0f5a373611033c6e5dde2a779d1ce5bfa6d4950", "01a4653fb5c89c2267f389a7b36a5f0d420ac5a7ea6e5051d134c98140d92b4b", "1294d87a03c745548081a92e4c8c2d792ab3d5bc3d2bbd50111184d8062c3323", "267a6041e0af29c888e48b30628f6de83a49ca06ec3153aed3496697b560f927"), ("1e0f044035d4c71252b528734d391381055aeaaf181a2bedfe44ccd8058f4835", "195c6ce93665f20760ceb369463ab944740a9efa808f20eb10d372cd8a918ba5", "096c499614d3b6ae613ef6ab2c57403622d3f9beb58bd9d19c709ce284d7665c", "1bbd3918a228041d555c0a48df9c723f62886fe834edfd777520d52a5793fd8b"), ("0038bb98b33107ba4674782d86b55ac50a9d4f9c815f471f2422a09218b602c8", "2c07f94a483a3a7e4a54b1d936768bb6ac38b80737bdab4fa1564a50b5d9b512", "07f8fbeb378701e6d1d67ae2ffd0f327f70acaabb9c04f2b2e5d5bfae5873ceb", "244640bb6d64c50256746d2a9211ee8aaaf60c5302cd5795236755560e34b1c8"), ("1c543496712e5814e1b91ac36714a13c5190ad05de3dd08e062ea9eb71fada43", "18d0fb9d7d14ff3bd37ee3d29f0b0868269cf9bfd9b645c0256ccf424b282f49", "104d53da343b227cd1605afb7bca4426cffc3db92313b114949f95a5e4be42b4", "024fda0357612b304df4cee74cc78dcb31f0487aad32707b9061c4d9c8fccf26"), ("09d5ed1bf043aa690cd8a0560497f6cdb67a4d04e0afc2f005c2ac60303056ee", "0e22bb299774d5d43995b5019cb794bf1b05567f3ac175b9c80aaa1abd7fb657", "0e75e52407b545ac3e7701bfb09f261872be566abe38baf920e7b0823b59880f", "2fd98e6540746b804827b280e56a90849c801154de6f17c224d4623b2eba8e5a"), ("2c8817981deb096c2160ade823915a7a396ca0a3cd75ba1ece2f2417c855f035", "1a2314a9be64ae47bb7fcbc4d44760ae94e12040bea94d49af5be381a126a58d", "293af380710feaab6eadd7b66c1fac3de7dcec3c979142447e33af52011cb348", "0ffe80a3824a1d1866cfce2660ce6e2bddeb240c5e6c136a1dd6e97b0df845ee"), ("0afccaf2566869c3e0d9fd2ee84bf283cd61a59c6d038b850b6bc4b2687a9355", "07679b301beddf868dabb4c81768b98d846f62bce79aa41c7b951e899feb84a7", "091b7640704c94c1a5ab6f44037135d3b3e149402f9955b3d8769b9229c4399b", "139f3fe32ea2cab27407afb3dcd76737abe211d142df7200a1bcb38517a65957"), ("10a28cd1f9266e1d7c402072494eecab3d6def150e059102213c78fee0f1b5e9", "20346fb82c744950484a4fe4be76002f2bfb00497c4d292448ef98faf6a6bd98", "20751e2a35e5a906220812f5fd602262bc87e56e98e4edb279921218deee615d", "1e4bf4563a9bd9eb5939bd7f6991e26f9e5573786d1c45293be116d0594e8be8"), ("28daa970649218155c66e51c9379dd63058dd2258f54c0376c2aab7fb7ba40d4", "1ba0b66a03ae202ec3c791510732198f108f80925432edaf91e8b13442e2def7", "1cb5dfda06ed811db1e6c65303b7c08be68bca27b6573a49993da9c9cdfd77c5", "017432ed15d7c83eaeb6c02933ef98ce855781f3d941a81925010a43f9083d28"), ("2138c98313d80d69445704aad99257acd740d4ec50aee0a110edf6b57b75700b", "20915358642ca102b03b3f71ac8e0f2282cfb2b80472605c89d0c89cea9c0e53", "23976667eb892cd0b20666fef9c834cc4368e790f65407d398799d0c58b09f28", "171e16f850d386462a1dad02864c7f10ab85831b595a4d6b53a1e506421f026f"), ("04732a4fa0a6813051096664b6834a009423b59263246b51e4cceae461f05add", "2e6186161cc37ffe4c9c50c5297232dc81b9aa044c45eedbb427cb35a5a3d6b4", "1a6d70f32a440cce9ce82ebf9c8b528aac37bec23216c3e329d53f272c286c6a", "2a2594e72285173689db5362aff1904030435b2579ff2a1235704034588e7cb8"), ("198b65bd42ce27e81c7978194d89be6dd5377b94d9c0e419b97b13aa73fea68c", "22b62ee7cbd98d29f22a08e62826f28273d41aab3b878c7d069fcba1c6bc8779", "2b0927d1324b1ef1c685aa1921d98476f8261e574819bec18913a5bae79a1a2c", "0d0a9a94e27b4971c00d6d2ced63427d1f24e507daf15b921bec2c05c7cea96b"), ("278b6800cda96534235966cc02ceb743f854ea5c948c77774882a5617778c42d", "131fdfc501addcf491cc9f1ef0c22b1f47a0a51f160024885a4ce43cbc7cf6ff", "0ebfeb603ed57246748ca0dc7de5f84d8e2299f80fb42c34eb0182e7c176c855", "2b48ed9648c126a7e364153a46bdee1c17397072f54726a156269941717dcc47"), ("1c0af84712a6908462d4420c433e41698d88462211b66ca5149feb205f95c6fa", "0e2485150d972ef8553ad344f221597861bac4eadbab50da18d488c5a6b27e8f", "11774d3a187d02c1a5fa30d83e7b7c314b92486090389d7a3fd8b70ee9c4726a", "1911f589c9523504786d9d9752586f821064a140c0bef58561df99321b2037e6"), ("16381349d5e8d28239f132346ce921c141a4c5c7f2fd8c1b5a1c61416894db7c", "2c81355f22127291a1982b0d7af3d3553f8380bf22b35275c7bb2473f2f3e8b5", "2ace9e60b48ad2690b0950992502ae969ed76bcc72835bab7f31fa43525a5b11", "0d1ae79a600de3b533db19e61206b6f393ffd195dc8f2d024e3ba71cbeaf7833"), ("24ddb4eddd2e2b917df01c3d15dbfcbe5a212f8379580453615c8481834b1b1e", "117b45cd661f1b86f1ab0249046f7e05739a31445e999bc8d00c036233b26622", "03f10390263e7626cf219ea368794b9e30a75ab04ee8f0464ff1e3aeb2b0a8f8", "06728882251defdfb2746326547400325710866c1413afeb852fc2ff217fee90"), ("07b6334743de145b8acac0cb37bbe9313c370422a04b8f1ddec5c9eb6d2c2231", "062ce7e10ec115739187f1774b6617b433fe59f6542ed9255b2a966ed1466c02", "25f61439ac52d3596ef7f9d8e46f0f407a33844d888d2dec3854bfdf126c53eb", "095035c34a4c10377470079b5c9fcf6a965ee96a456933aabf3cba5db72912ca"), ("1305d0242af6a2ba72ff3cffcf0f6e135511ae5e6d046aedfbe012bd1aa3fec9", "23ab8c3b7135de046fe4c6e21826b3ac183a51b628ab568ce9c94e8446ff884e", "0f583f840e9af3241f9da6f4e449e60c728328072438946c74fc1de94049ebbe", "23b79b793ad18865eeeb2e8996a05f269eadacb751881ab7a0e4ac269643ced1"), ("2145ddc4bdf48e4f97a173ac0afa0a45b97ad5620ad26405f99d0ff01db9a8b7", "27e47ec545621e2475005ba113dfb0933d3d60f20c473dbe101002ea8a9c3d21", "0217317013f4f4fa57b0f2e391cc23de7cfdf3ac515b4c5a82f37031e7e30b1a", "109c0e5e8b7c894965279bdb05f3a2f22adcee50844fbab70eb9703c25e4cd3a"), ("09c01566c70afbab43ad4fb4811746c55c04902a92deb334ec2161cc3d5c5803", "13dff28679bef5108de9ed16e2552bea7c3281f2b41466762f6ab4ec49cfb98b", "1837502f08f79dd0a369d1149bb051eb5b8d3b1777463f19e0d63a048246786a", "06c224790b64e081570550455d35233b2ad49c7a37151cda215c38f9665fafea"), ("120e11f60398e1e319cda808374e102325a79362e98521b8a703ed00adf890ba", "1cb4e716fdae8aa0941dad309a4235e026505761041cfc58608069470d747e11", "117fcef31ef252616286c00a003eb4bfe91f54da69202cf3a8f255cc3c53ccc9", "19322b65165e10d2b326c43c3dd40dcc17a8ad0ed8c630e210756e35a6a28cde"), ("04cf814767dcc16a748f952b5abe12d24bc7c60fe61bdae1e08024616bb3555b", "23c1d9a1c2266d65cbbccd7a2244ff06fab645fefdb69dc189dad223cd28703d", "1b5ab6bace9d5297d1894d09d06fcba7a1a6e6e08e2526b87cdb634a8c6d4a9d", "0bd9ae9882fe17951d3ea96fab5c946330e6750f237567fa3554c5758a8470a4"), ("0a57f3d32d6a748e58dfca425a52643ded5c22fc84b56c2aa38d7ce5dcba99df", "023cee50b4cbc22073bbdd0b6fd0318b4de76d775f4b91d6f1b886c477c24b31", "1b76fdc379a97db198fc0a85606d868db1d97580b1acaa9e95ef5227eb55d965", "237e75ef7b524da7e385f861f638a6e870c15bdceb82ca1c975a92eadc094018"), ("11eb0b3f6dd297bc02dafcef55748e0e2cc88e459321a714e32ecefbef9a61b6", "19dd0164b67a9c070f7c332969bffe5fdad8a8fca1623c7d4d13e2b0cd8683fe", "2640dc198c04cd726bb54a6b14c0c22e9b1bdede70a3814238b9678e00de3163", "16d771030605fe54a54605afc684bf2c3576188fb2331e05c0ada190152d476d"), ("2ad32997fe45aedc49fcfad4558c32b84a4f273f0b7b5820ed3d51dc6470e0ff", "1c86bfc21665a022b399403732dcebfcedc9bd59e62e885a7e79d09d81ef2888", "16aec954e9225d346c523c034f2c95ae44bddcab3605fb1fe1b6eb00f2fd78d5", "066b0d06ad6045a0c52446aef3964d3c93f2caabd2188d5d0edf2027edbc406e"), ("2fbee821858c9bb4f301e4cfaf87b54f390b70b4cbb75e27bb7899c7f1bad1f3", "2b684b51b449f506f1a99857f929865283a8356f405ae47fb76ed84ea2035169", "2c13256bfb2b71110728e5355348658804d8e12ef096a9b39ad641c4894d662a", "08729f378299bc4cca9601b5caa1db9c49d27c73c74b675c9e866295bb1ee853"), ("12781a3189325ccdb8627ba432cf28abda0fa55093b1dfd8a313c20677733850", "0c6d4a0b6bdf799f55e40deb3a91e3bf830e0a0b975f5d666e445a7a6e5b579c", "1359a68c31f02d1c425498cbc427228ba2599a1528939907a31bea1b9e4bf993", "2014f96e72d4c602d2109e374d88be70a1eea41d0be32fd31d2f941b0ff15b54"), ("1a4446448d41913d030e5d64dfc2b34c77477e8faac8007c2ede99aa50a1babb", "193a82bae8aaf8fc49a0a7fe9be4bdcf33b34f8b334a4b282e97d0aadd0c3156", "13fa8ae9a0ddb73da71c066f0e99a3bb8db2596366e6496a81bced8436dd1081", "196370d63670367df35d234286bed579f857a24871379fb5cc93f2f986a622a1"), ("22214044c5998d34af92b9f50fa9c241a6a7738aaacd1204290ca8f5f2861d8e", "27a8f5cd211d062871e3fb21119c85e5ecb8689f8ab8cc935e237056f2d4c12b", "041a5c7ac76e094c3b764ac54808053ffc0b08bf73098317ca23def84e2f1d50", "0a98c43104eafcace0d343af361642a26a36ca9e763a25b9ccd6376b2a1ba2ee"), ("18f1c540f6ba2d2f61eac415106096ec21001b0e60e949e71d69d49523b0ec22", "178fa9224a8df036e7d2c5df4d5de755ee4588dcdf3b67ecc205dde159c7c255", "221dfcb4b8d3a0c94b7f3827aaf16d4f70e9b7a3422c8644d00950755663a53e", "2c8d9a90b75365d7ec91211da9721c63714c2b9cf9cc859cc3c968f1325a6cf1"), ("2f21d3196e436284df59ef472b8001d09e6a4b9945959eefb608a796304afcf2", "2f13a402adc90e037d9d56eee160305ec8db5b0a9bfef58264f5f617a729fdef", "2a95bdbf30fbed99d236466c1a916f8a5c59ec0c0cf5f292bb8ae9ac12cf5ab3", "2b15c429d30bb490cd9e6f4642bcd0401270f95e3031ccb4e262fd8be8c65e08"), ("17582297b0292f80c9589168dfd45cf6d6307f9376c6a65c45d397e2453fc230", "0f6494a7df50343624107da0327660cccfa77ab886218f7c58cc5dfa84956ab4", "27252fa4d60a69e250b369acec2be8018d14f3f473085b05836a74c8d009b45e", "16093ecf3078959cee20ec58531a295285bfa3585cf246ef21d0fcc74d8af2dc"), ("2d7a3c41188146a52fc609567e25c4b7d76e1b7d4e09714d3242590b2a0631c4", "1928efdf734b795bb22960859730670d3f70dad23168fcb137a287cff25b2eff", "2cc288494a708a5e21745bf54903602f00e9b491e8042a10ce085b4d780c02af", "1152ed419eb0fb52d818e9ff30ae71ff315c2bf1ca1f9c3e224fcc2a04184635"), ("1c6a92a5671490df5a296ef281674ebaf5bf73741be975c5bee242234cc5fef9", "2d4d38c72a59351960fe99ab86b02f502c28c5314677af26253a9744276f707d", "085051605f3cdbe73a03a20c6f81e777dfad361e74016e027e42681a64d297a1", "0fa058e75b611c066bfe6f47305eb44ab64d96a34d7d9973b16a07b388914434"), ("21c91be94f92de2cab00aa400af221c06e55239f40505e71212a83a7154b3de4", "0c42afe5bf1a858b6438b8eaf98a7600eb0ebd21a56b17f521eb31dda3519602", "0e5a639e98bddb472a570d5b62196b7ec5775a684c5e49963187ad11b9620ad4", "0166fc9c598119fb58619580d0ee85e530c2330fa53593290c1623eaf784e4cd"), ("1028c08200806c9bcf59f67ff8d32b0258596c64be5973734215a1ed1b1cd135", "22a486892d679adc72db368a94b631433842bfd41784a0166c9125549ca44f08", "122d1e6d3b2920fdcded0736ea89302790ee5ef97fb02f74d7a94839262b3264", "1807c9d94108acb9518c64b54faa49e171244d740dc7726f99ed01ab80623d10"), ("0b83d775f7316e7471445ee804f0e43dc998b41e9e250e2c001fc6c00f5b7221", "018161dca2b1a501a55ffeea42a0db6e3c28af452f4486ab9da419d817c28946", "2a9e4a594e723ec8db8de139f254b5e1bfb4454ae615a954a093e9786778c694", "10bcb855dd2061916cea6e080653947ebdebfbb1805fb79bbf2d695153aded62"), ("0819ce80e29525e8fe68727e884c66e9985dc5e34b873ce8edc8b34cb080eeca", "25d5cfb05d19c10193d09cfb4469bf39fbd69a31e32cb5a27f814b1918cd8be0", "0e28d6c683d48f506380013c6844cb21c7e68ad80bc0eb59014cdc94daf02b46", "010f4624f61fe16c9faaabcd09617b49c709537f52399071d76209af6cbc1464"), ("0ef4d9415bb8d13826121bcde0c11f60cc223b91ff63a8bc89f8a57c0bdeb7b3", "27d5a1c041b888bcb15deecd76660c91736b05e6a0d3e1fd40cca25eb6288fa4", "0d874065aa7f6fcdeb22e0fa722fb666f504947e1c6b745539c6606c71410d81", "1bbfaf3ec7a388e3bc6818fc6333083ab67f1bf6e5e9837fe8de06948b91385b"), ("0a6e469ecd86abff78990eeb58479fd8cb908648f63cae0849bbd71b58bc3a98", "257d31dcfe4b27022fa1c8f32ab79da3541b1b71e066dec1b6238a54b1b0b031", "10e338a5f46015348dea68dd28e9781f3e245dabda1f970cbf8d030980d098a3", "22a56f4920eda4cf97ecd20e29c97dbc354a3b309956ed24ec0fef61c7a02054"), ("0af3a87d8a50aa466290e517d7bbe42ead2d01988b735c67932cb5809ad0a23e", "23a542f0d3150be5e57218aaafd7eeabc7e70ac45de6ce53da7a9a9f3d6d0e36", "07297c548c5345e3eb088aea1e89ff747197c88fd6fc0d54cc7cbe2fd4fb2c1b", "0d0cd16971fc6f4ab8d2c52b08a1ade84cb243917e1d315f0e9bc4351d9bbe69"), ("0ae6092f7de8fb431edc82469ba7b6b41bc3ff27870d2ebd7c8eaa1eb4edcfc9", "1fe24d1d27620b8aec407c067ce11703c06cb831e722dbe7fed96b194caed1a9", "1d070e9aca4444328e9b7a45798a6ad2d03aa3396c41307be17154e70bb84ba6", "0af4bf822526d37b1b8d3cadfd9342c5211ee184b6fd8f726c313fd2fb58b4b9"), ("10a21a83d1ea5a47dfb428dfabd12ac79512252d65e80407d25767f2d955ebc7", "278a4b988d5ac45338350a021dd364e3149f739f00ff5e6ad1a795305e7e72c8", "2e07329d80bcaa57171390a3db549190a947fa491e9cfc7db83c88a352989187", "28e48c6f1224ed493eeaceeab70ea6ab4dada5df7f3693e4fc2b8ef39b17f3a6"), ("0bc0f06b2beb854f4f7eb4bd10102d864dc026bca5b862146d1bb0c7e43a4750", "232f4a16c70066e02b6431aa2ebe3d7954835257265c11bf25aa18a3a6df5ee3", "0a84925a6cfadb20626de69972e63d299da5f55d222f2b7ab1eeb0ed5f9ee422", "1fa4b9f99e0ded79bd33c81ef2af427cbe4b806769d058ef04964d217ca69c10"), ("1bf56e02ebb3b5211f22ca7ac4e96d54c2e82b79c75949230cb6cd8c2cb6a7fc", "0557a4a4abeff050b4fc3d6da542a57dd7de9bae852a998c3cbf8c03ca93405d", "0cbd2ee11b874fa5bb8426b5aa51a4abeea9803f4feff9f55c79ca67a6e433d8", "04800fb90509c675e294a54479a5b4217f12d140791949ee6fb364d1db10a729"), ("1b03501dd7b4fbf8e2cc1d46b22415f92e16b94e13631eeef4ab7341e08b051a", "10225c49615157447a955bc750f0262c8ef0ff42ec42e0775f822037885e1522", "17a262b291527a94b4cfc306a40461f08a582f3251a8622a929dfd44bde334b8", "0629d8e433ff39ce3800cd1aacef70c0fe8bd68410dfa7973a693e8b4c1aef0e"), ("226bc96e6e2ab623d1a345cfa879dff366ead85767528866e2914cacd4106a6c", "0d7a9169a2ab374b1e79855eeb817b1a05bffeab824cadc6df54516de224c898", "2a2ec08359c8a50db9af956f7c43d42024e368fd084ed96497a3c88e6827ff30", "2e2f1cc6cafbb8131df1ea729a6e44c1e55559acf8f52b36aad66a271ab76675"), ("075316a2cf4b204b19974b409d6d787d3e2f13d6e48404c057e0abafc468e1da", "1aba78acd68434519c301407f1dac13db0f431c25ed483ea4b8b296b9946ea31", "1c25c26d2157e703e4f3abab5c8e610c956653693530d0baf0702b3c7ef84d5a", "13c168cc0ba5c9947d09de83d0b508f7552ae255ee956dd027a3b8a71c351299"), ("1cb15b4829de251c877e5ae34d443979c7bed5f76259b000ae8f3489294c3f04", "2c10cad1beb08127d5cfa08e9b0410d26099b49b326255f0a242031d8e4b0ade", "118e609f240516721c900d64bdfbc25999ac0214f8a89f960b406a9ec068a2dd", "16ec000a8ffd9cae54aba841ac781c8e90d941603a78d3216699861b326f2078"), ("0427f72ad3a1ebb5ea3d82b8c8260b6c008c273831df0ae8cc864f1a69db9c89", "1bd72ddcd1f6e786988d9311dd5ecbc0c49abaee64d7294966a4128f7ff71b67", "0155e0cbce980753e91316b2c7254100b879da1150964d727c36b706b7618931", "27094851e78386de3674ef94f38982b51f529ac4d29a212df71831265956f0fb"), ("1a00b33b58c0c20fac3c7c3fbd977c99f1fac4e84b71aeff0b69e61a2061d0aa", "2b260eeea50185ad6b586e863c024c775d739113c4d55c71ffafd6349bc1b03f", "20674d04d0dedf3e3191ed3c2fe3b8975559b54fba063103fbe99c9715490d8d", "2ee30372d9ed778f5b1a735bd3454fb22bfa6ad8f2af458b489222bfc2418c6e"), ("2878133d86acfa3dc5e6c6bf085135e8a1da955584dec87a31a440e71294c087", "0902d38884f2c94bcdaaee4ae8d82d1e9075db92238671f70800353183e2d97f", "2ee746cfedaaa37b54b0f4fd5495750143978a94b33348af289fa6760682effc", "2c7ec05f76b2cb452ecc56c97659768464152add48d1787f5cda5cceaab3b001"), ("1de95fc58e6705f757ff8e94de95739d98ca4fb35fb55f7d7556b819cb59fe7e", "2580101794d1237c7231b25afbab9d0de54dc5f94a1dd21e8299966e0ab09a9b", "225e9fd49e4c7960417857044c711ebcfdae21b7a7a589f34fb418a446cfa29a", "2c2863f37b58069387b60433f55f2703226abf655512ec8f12417601b76a9507"), ("1ba707f208615ec7ca3e1980ed1b2925cb61b92cdcf2227a2a5af171dfff8361", "24c603927f2ca2cdff3f63c78aefac067d078e160257fd5a78f018a6b1dae016", "1c1ac6c5db34268bf5337d29becc28e950434158287c996adc65aef6d38b338f", "00d0fd04db7d7ea7136c2b67716a1c1bfc0dc5d909616887323ef312aab327e4"), ("18fed66ea4e92df6741a258e5900b4c6d980f283e7eef539280cd38c94c377ea", "0ac1e6b8135754ac091bbb2ef15f02819fb0eb2f4565f001febecd3adda4058f", "18a1b8d2f76670b80b6623cdfa0f7b2062d07cae50fdd65e5c85203ed0cd8540", "0d3a836a2b02fe55c3ef70f81f1eeb86eed9730e153b14009e528f72d9d78f4b"), ("11d2bade2d186a431eeccb7be4f80c020b92469d9acf9bbfa9ef4ad634574d18", "11f48eef9c5ddd71fcc46374a2ab6531e87d293ce647a088ae9aa3f5fec05cea", "0804ea03075542c4cb97831a0ed565d99ecf4dafbab9fd9be4f5d146062c810a", "10ebc252440307d5befb9d2095c2f46c5cb3270bb2eff267156f622e6df115f8"), ("1867b3a980614a982a1e43e57350ae469dde74c87af2e6db54dab65fc79d7660", "26afe63e95bfec9974c01394253edeec5c8926526fbefb657c45e930cb0a1cba", "204790aadfd5e18555cffe2247553519e3def84cba8bb7dce31e2071a2a5b562", "0e74132f2cc11837373deebfbb49d439ffe87784ee6b804e72c453944926ed1a"), ("165bbc5650603b71777d07f2d743c49af8a312f7437e4cd1717d0da815e1d849", "1f0381350cd708a26e20d2209d2783b1d957d9cfd3d43ef54788cf81b12ca72b", "283d6a357c69eeadf38326a30534035434c1117ab2feb59bd4a220ef9130c923", "2d24fa34d3fe2bdf3e3021d79cf4d099e8966f24cdf25ef347a974e486f3cc69"), ("239c343f8200840562744b4fcfeaa0136f9bc6330da168021c5951d4e74c3676", "2654db7b3496921247fd06c6765e32efd694e35010c72376b4e7311820310c44", "27f787f4b1a4fceddd960d4f00cb760cd69590fe8d12e156b07fdc5a5da6a079", "246df47f32f0c1c9fbfca5571b8c2b695dd4bdb03ff7d04cc342a08fe3b41f71"), ("2252cd31cae98e57465ec18f90a751ab7bf328129e57c7e68c63d21e43a5097a", "228005e23d14ada65ea833d24e8b95b9bc43ecdb4acc6bb3f962a582b15e1625", "14a8fe71cca25f7defe4b1464267f860b25d3627eaa33d29863e3215d588b68b", "105ec1d5cafa2e8fbd45abd7643e03af0de2195789f93b85d08e1d168574ffdc"), ("2aac47af025f22cc16b500d7c959b4d5214d54d42770f52954c63dc99cdb93b1", "12dbcf180d290161b5056dc1f356b1e4c1a59c9ef531cafd38c4a0c28c69f4e4", "19e64e1b37d93b76111313e0a8b6ded3fd69463b1818f67cb1042176b6b693f6", "1bb5e43ea10be1a23c2711ecdcb9d290ce9d5fcb42166e35631dbec74e65cdba"), ("28288196857238b957500b86699fbf6db1fa75dc00155f445bf379d6a0e642db", "149ebe36cd872bd669eb79cf4d33d1b1797478fb1fb7062c752acb34723370a7", "0c43e3895a0ddedea6dbeabc331e5f383fe19a643f7a5b27bcce7d94b9bd8e4e", "1ae94ba5020906988623180f3c3fd65afe7b6666c802e805d6b19067df08da98"), ("2d90babc7cf89bf8464aba491bfa823bb6bdd162860f6d9915259383a59086f5", "210ad24f839cd9ac85d7a1b56effd4c33f1fd7437a9ddcbc5feb3158cdb7e0d3", "19c38de864732747616d7b0a12675c3ae5635a6d5019ace62969601236856c10", "25bdada10002cd383a82625dfa8c14b96bd07f2595aec99e228758ae0323c531"), ("1af89fd3ebe1ba502f6ed440bc8a72d4a3c1f22aff6d9fe7839deb37ea3ece98", "2ff64b824c770eb3627d2ba0e33372fce7d644ee338d32e9240ef9277cdee8ac", "2176f65c86fb49a4bcb7deb6050d5ea72385b3330de99b57e221f904f3467862", "2ea095bed3cc287777051aa3bfec72f40a6583cd4714e39be7096c5f8721b181"), ("2e04066d44fc98f79ab9da7882bc230ff72c44b51f6bf29c4679608ee0ce5260", "112d5d965e1a639665ab65a584d69dc5b2b0065cf892289402c1b360237750d0", "1a2687be0f0f01ae81b252789370c3bce018e5465a2f64b37b1e512847723845", "0b441e17baf6ec7b8775da18db6840f3305013218e569ec9b85b750aad88121c"), ("2e83a148b4af01a8c97c7b2ffeb738fef8a9dfa4bdbdbce115d5730e4f5b7157", "1b65d011015b8682b1bfbe233d77bbe4575bf8e54953d9a7225017263a7e6b93", "1699b017db582540bbed5579288a67ad36796b39ba6d4e595f1440f9ac5eff0c", "2fe1962ea42ca3004e45b6bcace1cc8c86f5abf4af28d2f0acaa29cea4721d35"), ("219fdec529eeb348b3a35d0224c2446d9de08018a7e53f835916a3410b2e67f6", "1099145db10695b178499b219b4799aa876cbea6e3813927c7abf57d03234230", "1a1198f3903bc097717b2db30bd14c7665e7e6e800fa6c92679f75bedf29b535", "232b736cf52ca94c9cb774b0c5ccc0eb2268a63e2ce7cc042a42fe4a9df1d2e9"), ("02c55205722197e6584d570aea561fb3ad12f4f2e9ffcd8e08495a36c4c45a76", "21ee1c50cc1313c8e0cb3caec759ae77d3b8a8ce9bdfc78573092131ba9f56b9", "2e85fc68812b954c0f6822eedc05d5754996eb0eb6cedde8a7fa142cf4bf7782", "2a4fe0301338646cab599c6a21637e99e0c32bbc39dfdab990628cdba08cc1eb"), ("07318a579ba722c56fd1b5508dfcc591e8a6863a0b07e37825147a4a6c0003e8", "2783225f08a8da54cb6c10e89cb85090a0ccc95fb904ebba8018466b8ab29089", "1a289a1aaa2c245f306d641c6d75846ac1a113fbee8459e5f927f799c529190d", "04df302e51a010c604f174f8a5b8d0e0ea746d90207fd6e20bd50a442badace0"), ("2cece6491c956d6c9b33eb841f3f0404f4b90f12d055d21bab445a77511c197a", "236fb15b4be2e8b1638bdb0b4e6569ab50400a9c60b24df17cddaa09a95f1b18", "0583741236993d30269b618ca5ee17c00acab05e2fecf1f678f943f9c800f44d", "0eaffb4df2145e7042e90141fd5ad4ac48b0fff6f31c8c548ca8c1d5d8340ff4"), ("040087bdfc663db81ef926e57a50de6d52a45870dd88bf15d3a1167acb6a50f2", "109d55434c37cfbad27401e5a130c485ecf1b56cdaa8876eb72ddb2004d2a46d", "2df33b861664778e0f2a5ab7e4ad92c5823589ab770fab22fff521cfa3242860", "2cc1aed7c82cbb439586564012231b9cdb8c9f545ce4a667d00057860df2879f"), ("0f7d179e2e8c83dcbfda3c93edab8195e5a345f6ce2958ffe767f2b921abd419", "102d462dfdf5f1efc6d4dd349b0b5ae4c609306c2c9bafa40731dfb76bebc15d", "025781ebdcf08b0b4f56672b3f487606d02d5c4482e9051a5e4629ec236aba86", "0007ccc32f3c47dd380e319cc097dc7e2a18c85e3bb37202db9e4585e08d0fce"), ("13b9f3f64ee6c156a5a3a1664e2bcbe6388b827767c393cd12c5e52223d96fe5", "07918cdb6eff49690bfee8cd4cd8c8e0d53b95d3f4c87335e03c58cb3d06de0f", "162891c6b7189e2c16bb9a791b71064d4e3b7df8843c07ba5b95c000147e6435", "257a1d8b11beb03369eb5d866a397e2c6df04f508279f41f789edaa6d7526de3"), ("256cec9b2ab7a8265c9e765b5f4ce743a849a0aad761f41073435bf9e7d976e3", "2f3aabf9fbb41bde2ac9517832c1f81860d25f9dc9e5440c4f1d09a95b661e95", "0e2f1c3451873615e7a75e705c7d1bb726e184499ef717e54a6d6b2d725e0aff", "130c02772766e2ebb9efdf6be50e54d92fd149ddc992cfe6c19a557b938aba91"), ("0120bb32839b1869a72ee5dcbc5a88d61a0457526b1191fd3a09ab5e4cd543a7", "14890419836560edb6a2e8e33921a9f1a947194f51dadb0509b5d0bc1903b0cf", "193c319743f035c8e052f0ca0afa78b8fe32841b03b30f5e0e0ebf524fb46349", "06d953fc559ab8370d5a16a479f143e9354fbc5cc3c3fe81c7503944672dee9a"), ("0f68cf1842d650200baf60f8750ccc1f04b5e88afe6a8b862d25b318a7f45f45", "16d406a217d47bc6db5016c09329e267dec2a8e5751e7878d5e21a518b998f53", "2619d207120c8c0c82d11af54109f50f1b0c9b69a540a2916b2fc6a10606bcb4", "2311bf32e1126f958279a088dba525c277a51058be92487baf2b1acee7a3593b"), ("20f282c194eb7d36108a605b1b3f5204f3dbafc1e13fb50ecd68958fcdf2ed4d", "036d3a349808cfdc683276692ea75a8ab805c9bfec8b31ef7842650894b0ed23", "2ac0db6c6620805b71285c3306dcf9f52c13b9ea82a42cd3ba8494dbe50ea9cf", "1973febfab941300151b6316f049358e88bfdf9e71873b06344649e785729e88"), ("1b49aa6e9631a0614de722f4518f72c8330efb8a9e86610cea35959669b88be5", "030dcbbd59c4e0c6181e978ba3e20e9adc2560e6c2606cd0646fe7080849134e", "1bb9de29ad08918bedc1b67bbad33416d1e70d012e7cffc361b3cc9b853ce7ca", "2efb01b669b1885bf2702ef3d1a1b8e6fc97cd01f0284aac7c6db485d9ab6cfb"), ("1c7c2adc3ffadd36eb7abadfeb536373419f515275272bac9af47085e51ff4f5", "0eb96a827cf3768d9b6a7933154432376956dd3c41f753dbc9a8eb2df6b712e4", "29a3bf9e7e7d8621153c7438c79b24bb0580873c1a9af5ddfc851244b2d80704", "2ac5afc9bce876992b5247d0349a316e5264c6031a9a442b01be2a0598995b78"), ("1f288a3620f7c5e867ccd68dd5a0fa3e3dede4ce85f018192821a584e67f3dbc", "2c10ec404b5993d8a1153f86cd9dd6bc9b603605e9da3ba690b56cb0c74768e2", "01854a56263653f62b187e344f572b13033518bc0a40d561a37c888d4ec0d083", "088150b7740fb2c16462ef4b675481869687c1bdee88709674a78ef5fcfc1b69"), ("1ab8c2ed6d54c7e4136fb0b92c747c29635b23bfffbb537f7f1a0f26217fea67", "1988c07c880f88301bb40a571f18e9b09015274070ac15fb7d173dc386eaa75e", "303273f9a570ff0bb4744272daf1b1433f683c8f211e64acacb21784c3656881", "17954fe85e60a90a5d8e29d174488edc47a9f7b3a4e5b19d4006fe2a87753aaa"), ("060b0bda4a7bcc1c847f12dd2825769f2e256cf9bb1519f787ef07c6ae1d2961", "0f5a6b5a39328ffd4cd8375b2dbce68fed25ba3da8aff771119f8cab9ec971e5", "077b006fee95c793ac78307b7a7b61cde65cc29e75243b2592fa9499a320b655", "0bb18b3f9d16b78845bc1099b000bdceb5f26135087015af97dd05199c8ca7e0"), ("0644e4128ba4191e646481ce1984f34e4227ab7fe780bc3bf3f9c86ca918ab65", "081af7d4a4c15410f4f42bd46c6428f0a4b71d7cf8d2c67f5632efa34d2d2195", "1d5b33be9e38647baf3ca8bcc90079da28dd72e33875c1cb0318e25b8d8a4965", "1584d93787eda0a11e6d68589d63ccfcd92d3fd739699b2adbc1ab4aaf8558fa"), ("1751561935cf6cb32f078fea1584f55d83c915ffb943b88f88bbea9cd5e56937", "0d993c5b028f51a45c57eac2cb7ef4f9d8fe54395d41aec4188b1ab09cf1c368", "0cd69b79bc9b5788834f2bf0465666986fe9d9aca8483e91024dc36000434466", "2c87bbf71a2288f23e3c36caef5d83c1be658970bfffe31f2daf2de29f1248fc"), ("03f86c69ea7e3983e060bfd9abc8fda2359a943fdf0e1b9459bd99edf7f24192", "11ac2e2be0446e4b6c5775aa3f9c9a07aed9c7e4b0108a8f1dc23309eb3e9cf4", "2a76014e81c9ea137c2ac22afe170b4149e59bdd058bb07357185e0677a192ba", "28ed03d49e158757a65d3a3ac266f432e97580d689204158c85d82c5338257b4"), ("120deb2e846dabbfed5061a1f3908c9d546308c6b873f9c566eae1ba5d63dbad", "2ef6c407843e373906ad268daddfd0f7f9702a99f258358e12305e78d2d254b9", "04ae7903822c477949e512076f4c145e9638b223a56fc1311255c7622aebfd9a", "277ca9821b068fea62cb7560d65e7a0dddf45038976bb72713f9062417fd8356"), ("0670741c119f0ab2a9a06824b9743fd3946a4bf40cc13cc03d97ad29c7c316a7", "08c5775f3c17bec142e360992cf1d6194fe081bc32dffdd178d5f9af8d75637e", "05491f4ef5d033ff05b21e951e356b9deb605e88df07e2d8b6965a232774a25b", "0b241c9d7b78d5d4491dce571cc2ecbdd32c748f52ceca87737514fb2fcdcbdb"), ("1ca6c37fd1e907a671bb3bb28e7f1894024c2df83fd8bba392a0ecb1165e3548", "088722ef8357a078e3f39baf1ff6a1931550a1e68bc794e8f4374ecccf089444", "2ba3b6ef31bde69ab32c54e4eabb9308562e5d84146ef9d8f86c52edd9d8817b", "2d1b68f2f31df46e433d2b17a37316551ad6eac19f4a0bd15d7cba9093929aef"), ("120d61ad3d7c9afb9f955d5b77f0e1c2e198bffa40f24eed53f8c3855cea2e99", "26ec676651aa7bd9a9c8a61d4b32dbe5361bf7ac5c0f1e20f67ddab6b1fb3107", "1e92e7347dfbdb24cf6ec070725f66902eb9d500a7de3aa94cb491fb373c95d5", "07e2681e881fa0b95d4f27b74d703102c56a593083997e5627d63c2006cf7b42"), ("1fa51896b3bea3d0852a0f3921bd4f347f14ff9abeae893c952a645394cd5cb9", "26d1bd2000a8abf4b3035e77501d149a28a479319c27d497464883f8b650a23d", "1a96fcc3f8befea32a4095e2275ce03c23224307bbdc79d9f28146f4ea02106f", "1904e10313b19de43ec3b29bc984128183f674f5380e81b02d1933d07c3fede2"), ("0bc21131c651655bdc2640744cb22c8dc78c5c640e7c01e88b6b4de2cefeaf66", "1480247dd7704178510434236b89390f755c89a8254951e580cfd8ec911146b2", "2dc8bac4696963d0335f7a3b7593af548f05d60f468b7c0df647bf823e1835c4", "1d7ee416eae217c9e380faff5dc1fa95d71e0e08a465b505e10a43a9bff2d882"), ("0915fd077dd6bcfacf06076e4bdcb19ed26e4d5b3cb285a2ba5305d220f6c1a6", "1dfb2bcc1c5fb111874e8e5ab22dfe4b76c34b5ce22bba10f9d67873893d7292", "08a8c640fdb783bac673823a0978f4e68a938302f7e1ebf93f76921761d04915", "0086f067f3c77267e9f4efef3909dec6ba86313ffb72ffe694c22a45fcdb584a"), ("11b7a24560c107ed9365b4a99ea92853bb344fd1ebb32bb3305322c1b5329fad", "242ab61b4f13dfd3c63e304f23d49da53ba9f139d19e065264459fa9acbe96fd", "2759f754d2d21e8ef5a611f31d1f444d38e45e1291f89c322baab566c8571a45", "0b23ac370aa6282528cbe4b318ed5b650478b4240c94406f8d48793d23a5efb0"), ("01e2b803ae04851996e3931ea19db9ac911d075b668d3337379c912281b2c785", "1189b8d7bbe579ac128adf937909df98d5aa52fa185c599c34f9f7b90ae49717", "102548f7202394b722f1e93c90729e5d65bd7e40555ef1f65693afa75dd84f4b", "0e29b4012f096609749de5336433757af714b5d2b65833ccf49e91ca4a70893f"), ("0368307f3c927d5a0819ab65ed0ae1dfa63d4d5822a4bd454a139fe6227b5e6f", "2acf34f3dad5933f739065c3bc72028c38b98c5ae80673729fbbb8946efee0ce", "266fb7f98cf4fc5bdbe5c0c90aba32768a8feeea0136fbf660f51027509a2301", "2b33e53b949b8355f6e7a8d28a4543dec52163fd7d672288779a60affb09c550"), ("2a9e21b789f010d71990a4d093f0e4c516521fdb5fd6df021cb3ab75fcf17b0f", "1f5fc2f9e7dd2e8c18abf3a0abbbafbebbfd6fdfd489ecdf98e7ae5dbe881734", "0800abf38d11b0c6b1292b320dcfa012dba2a4c7c03e333d1b9e4f50f6645510", "0de6dc8a6e71a8d20d1a3f8625d03279b79f387de5928871ba12f628e697f5b4"), ("277393fb4dee35f7fcd696d5a9a5bff96cd1a0cd1517df14af9e0aa1e59d6a97", "08cd50902b21681e6f73c1341fd83ab40d80c839d8894f5825afaba371177fea", "24a2b5ceea6aa0241b265dc3e306bf551d5e8e9ab1e004fa08651738de1753c3", "2ea76b14f8804885e141f4504b804173931c1fc51386b6b430498e038ee8b68c"), ("20dc54bbc50b4f5f4171b78b3b26769aaa95790f5d9e85a9ecbeba15f461e904", "00bc04e001d0725c6633d2842d4c70356d82610d45761e005307742abe018490", "076d3dc8882f78e8f38596a4eb8e4708c85587e88f8314deb883abe7c1eedf7f", "23dda97f0e689bf02868a25ab5c7027eeecdf6e29629db1c3121d00910917c6c"), ("1438d4f30eb526914b5a76231d3a69798fad6a60c97cd3b53f121668235897e8", "24fc3a046e34c2f103e23c5bbda7c8fca3244cec26f76063a0e54b001d57c472", "2f6331f54790f70773c616330ab74ca366ba41ce1c8a9e158b7b74b8f2a86382", "290fec80acf252a99760f3720a5b950a6cfc8531313d2fcb80f1268d1f66839d"), ("2ea84a5feb2d58bb60f957a84df84a9b7405203abab820502ac39cf97f9075df", "15b47bb9014885158245265548936775f1d8866ea259be88b5a56bfcd30920e1", "226a17a363bd529799c772adae73beaf6678f634e4ba2c321cae3e43fa12dba1", "02a6a2f060a8905bb9258556655422af12bc739da6987364826867d6dd6bf2ab"), ("16ae2343340e37cbc2792be1dfc12e6630f32940a98393f118eb6446d3b3ca27", "2dd420257ad10be9b1323b889051752f1d451aca89d72fbb15cc9ad7b2cd3ecc", "15445a3034291ef0e0872b85300e2111335eecf89c862c38919ea8a29cec8f8c", "2d4d27e854337c045c33dab72dab08a3773fcd065e29bc655b1e1605a8529553"), ("287acee0829d7ec0c1d0600b40eab3be37bdfe17204dbf494917f76d14347125", "0a396f0662fbd9514059785dcdf971b4d9f3c54c755d8302f1e10cc5ba0fe6da", "2313c57a71ffc555d609107e0d2796832697eb671ba0e424537ddb22b933993a", "0076ce296df95443b56eff39e24ce273fa77bdbdbf3a6255d704bda1e6c80533"), ("22c62d43ea8236f6b2b6eaf60519eb6b953d7c22ca0af13cec099ee102b2fcb6", "27d02f362aaac8ad5598b1c302300b13f48136d8357d06ab0650523e26400bd7", "0ff99ee814b6a4a7078a665049c02cf3e6fd55f5ddf55b171fefac991d805c74", "246aa9e3a93ee59eb9bdc92a49cda16b49284be9475de122bc6760d983ce006c"), ("04b7d1a172582c01cadee3e92ba408efe07083f679e2a6d811cf5d18546fff81", "16b39a7eee9cdd8f94e42e1780d22a8bf3c38defcc11fe710f37ef0fae9965e7", "26aca43260044a5e07a0f69cc3e8bc605c582b7aee06de0b1390a4d82a93c082", "20035c8b82c63794400fcb3ca5ec9b75e96fc730e678d32f84f85b0932f230d0"), ("0a946d8e98edff234ff013324ad14c15ab3519906e5ffc07820f83a777e75ecc", "205e953403d7a21d6cb395f8f9025c35d9ae4d91cb19cd664036dd05807763ff", "2ba2226e90edbd22c96803acf9109eca63311c8a922c53951ce176e362b23e2b", "1f7b4c5a205b95a326af136a6b648fcf92968d5be870a7e2e149080fc0933998"), ("0641a6cbad9e1d93cc109700c2f3ff0d361afe84ee371a388354aa672047e9bd", "2c2b741b9e50fc5068cda1685fdfc0832a6d370d529f638b983f165a768bf71f", "0b7608c687ec77eb8ae3fbab45590cf78304052795a23c335b751c2e7b51c4db", "10aee2f94f65ca2e51e5698b7f61f46f2b603c75c3a0de0da6a681567da7ce44"), ("07f75949eaeda9b02d9c373acdd029a45f3f36b88bdb5a8e637ef6f4ecc0058a", "123171ea2fa9ef82cd546bb99a09acd569e5edaf9b825a3248f4f87c7ad260e5", "049c43abf071ed0fdda7d959bff3c85f349337d13c53d31077b88dcb47a592e9", "24dcb9c30c08134cc01e247cdb72cecf6517cbaf1076607cd9ca4102ce856b44"), ("16c7354f82bb6f8ccd6b500f5da28fa07e4be67166c38ac721b7fb13d8f43884", "07b6e8955c53800d6e49718c4775f7e507548d4f93b0c8d68292e215756871b2", "29ea2d52d7604fe5db0bc10bdd1b7d7b5e95409ea82ce93a7486bc0c94c1ced1", "10185a804682f39bc1c10602466ebb00f71b2b6b49cc4833e0c7a0646dd7fb27"), ("24851356b577f2e9dd92a90269401eb44f0fa3b330b41693cc79af8253633210", "02c87cd269b143dbfadde6cef5432dab079c75faeb4e36b80ea0616dbdf3a636", "0c7aeb262facf3cacade7ee355519dedfa12ab4e8a05aeeacdc67564e0a449ed", "2064c802bbfea1cbbbe004c69b06980ba403839c57c7c41a9d80fefc807657f8"), ("1f0f158e1b637ae65c318db45f53a6a4c6b1c3f1888c29685899dd051f715abd", "2b16fd469aa73336ede6848a38d6c67d251208d4f1ef2094793a80b7daa255fd", "280dc8d54d4539f67340a15a6794f3ec96be531c9e234ca5f3028341240f49dd", "09f7fcb8bf9d0d834de43d6fff009d9cb6cbdd626fe0d03e31d7562d1363f7c5"), ("2823183f13d9b16c044e4f2b26b07b8bf20c9db83030d46870d56cda9d11f1d5", "26d4266cd5b3a7cceec72377aac747ef1d4c93002375b92e3f4522edd298290d", "168a3e99af290b55bac31304a28caa73e2aa180cd73dd9b53804f88f1001e0e6", "0b2af4c3c45d0a59756bddf563d7debf21483e1f9eb67766fb1cdd8deefaa9c4"), ("1783ad84ed46322f1184f556534a37e31d5522525a49852a70123e1efdda6dbb", "148b36daae369de376e9d5b82b7305e7f3d0be9923364c2db18ede698af6affe", "181e2a415cbcf30e44b762b909d3844e3914c523996e2310afe6ad15e70a9749", "2c426d5f43bce813093668d8fffcb34c2456ab0c87c5bcd97a4837825b009b3a"), ("2a7d8e36ae1b4a6d4b8dd76bbb169f7b349936616cc2358045cf1fcc6f183587", "0c149609cadfd4952dc37d5ce179a8aef025ac4f28e4c762a4f1bd071c0c5119", "197aa5348a0e0f991f24363c1a2012915fc97be498972352b151c98e6146feb8", "16eda0d752f7db2a0dbb2d6049884685b95fd1c75df16844925f71aa87646fcc"), ("10855de67b4362c179eabfdcbd4ce588df3df8503bfa7ef84fe957bf7a65fc82", "1a793193e76d52f83253698f98d1ea3b31688789cbccdebc590e90c1b9218e9b", "19ba0fd23cfec4b595a9df3ba80229c028057dc6dc63884fe37375d845635922", "0c520cea19c081b711a30b10e84d4bf7594b5361c0b7746ccabe6d05726a83fa"), ("2119ce61df8318593243a482f13521dd634e6b51e23ee11186de6f3b5264963e", "29a4689f98400e73a625f95fb1f508c724acee342aa257bd26f8229187a79c2e", "21626db1d298b7052b962e11bba666433978f43566a7f5298b26cba254b607ad", "1ffd7bf6eed1a84598a71253e057e88766abe6479ebe9c1abd6b4739ba3ddaa0"), ("27e1c4f301269133aedd383ef4d3bf163a81abffdbb664f20ecd31e4a5efbcf9", "12e1dbcdd46cf683933ba868173cb84a16f99f26d9d2a100ad3b619eed863028", "01cf02f0e27ac2be22c61e0e6c032cb509ea2567ec8f934153b9dc7560125c27", "014fb49b73ab91c906a2babbbf6877e048cd6f4de28256b2fc4b2126382fec25"), ("104d2380932ab722545a51747ccf4fb3bdeb66060da393cb93a5a2e8f52a39b1", "2efea00e982c6b8d48bbcda70531eb7a2da3260cec29f3d41522f2469313ae75", "024ea2b78fff3e465b47c978ca92c6de39d32aeac8c7ec7b366f8b5eeb4a4a91", "28468e928dab9bc01c0a2140d5fd79a931dcf88e271fbe1e3ca734f09d84e82d"), ("1fe3604b4b2be4dcd62201ce45d538ebee37af56157e1d7695c3f5dc4e18b194", "03f430e919b422dbde7c2cc0c2db1f3f9a0302ab169dc64159d446e2f1aa9163", "25b257a297aa827a2b814e3e73c563eb58f92387a94940aee85a34c4c56fc34a", "2bafbc66d9ab7c595681f31831ebad98fee6fbc07de61b530585bbd7e23dbb4a"), ("13f8253eca68c9019db0a465794ff702898d336c92aa9da4108f9ff22f5d173d", "084e3b0fd700f1ada6f609bb272c9bf8bbb65e573fd3f501af4347dda69086bb", "1fa24cd19313d3e2b4b1be69fe15fcfa401392b37fc2cc9e28106d1fd9daea03", "07a9dadf4f714b0a4466f0756cb6679fb75db6e5d88a8f7ac500c61c1df9dd63"), ("25ff716466269df1a91335273fe2dfc69f5b9ebb5664349e9da6fc33fc8284ca", "169d12c616a9a161241aca82993bcc6afb1ba5de9499c6b54a0d34a41e05f1d6", "0789f95ad65908df930f02471f26f7d5f20284932ab2478e2d570c152a4b40a2", "2c925688ea42b5ba172829461ae5bba69a71df9afc411ea7e54fa7a286df3f23"), ("25aeb9288d1d92ad417dbf79e4e1746fa70ef482d3885eca0ab5349aa51e8806", "1cad673e9632079e3c02f7dd9d49ca443dfc2dd5952f779785dd62c81b52ba82", "2707e8062bee7f38715421f10bad255110a6b8f238bc14de9b4fb6d10cbec756", "13b1a5bfc72eebfddd0079e3688e7e383ff97719d2ab5f18ada77060e279df4c"), ("0fdd745eb8f1afeeaa828c5784fe70932474cd5fd2f49ea64313a3a8fbb9af69", "13712498da4ff1b99aedc88d73e92b336580eca0907b360772c7212ff8ec2ad9", "1a4c29675ede9e656dc54ddabd17802952cef5e4d9cdb0445d05494a24214683", "13bd5306797d22a199843f5113c62e23a47ba80a83f1fdd71968946883351c01"), ("017160ca66aa4da291feaa9bf128e1376bdc7ef636c105c554d0cfb1e30365ba", "0f380da369331b14788458ed00a1ba1136493d3dee5492601c370dca966d0371", "18f7491f4d55a2bc233fe1e99189e8e76fad920e7e6286f032654cbda39602bf", "08ec9096c946b83ed0bd3e727a9d45cc6e14116e898daeb49daddee56e7cf48a"), ("114cb666760ad522dd460f0cefa062e846a3e2dd11c037fde7f4b8689b44f502", "13a016a6f3cc9311863d3f5389d7bd4e7051d562f8f2646c3cc2f53441592a8c", "22e6b15ece94642b574e637d816b4f09d70105138017472b654afb8220a73809", "01508af8d1df9fdb39fcda0020be56a74f0f1cede74dba0f81f272ac21c34cd2"), ("086e8b0a9df6089fe884360dfe9f48fd9309b79046d150143d4d8dbc95765d22", "0180f3c53b97d8bdc6fdc20d94ac637faae11eabcf4ca6a0f6a959da5c82a209", "29608fbf5a5b181117ba569d18ec738cebd7eee6c602f891759a808533114073", "119add8e6aa6e7a14c4177d6ae01411b190c0da7b07984c558911f34768d8a7f"), ("13b2a2de8c0797c89b3e18b6d3afb7e57fd2346e40570ad376a52a0dca091fd3", "27c64ae0549cab150205d5f44d8966ab20b803df0d3e6b08ebc0dda2372e941a", "1990c4662c50b7e54e9ae899ed0e249ebe26dfc6cea7be852443bea9a3e5a12c", "1fb60a69bf45881c95851e2ed1ec0d38c9eeb4f6b6ed13e56c659a0dea0e9fcc"), ("2a99430b2953edbd008cf854eb859ebbbecfa8233109c6e397c3b497731f155b", "1ae2de84c7c107cb263ffd0def2b4a53fb5af2de13d5728a4d6200752b7a946a", "142347cf7c34d77a20a3e3cd75ce0b7f5a2b8840268253bd06c56d5e35276626", "2946fc7faa554ef4b1ceb9a055992cd1231c641c8d9e04f767700939adc3f927"), ("212b74098fe003a7fb8f1e7cfdeebc0ee138a7d2d81546b8825f96d7d6c501de", "101dc6a55681af10627de5a0ee73eb2262468c238318e1e6afe568e2aa233137", "15ba782e93082ec9385e8c7c30556024dadc34a706b1efb76b65a3c7868e3a3c", "1068ebcd840cbd7ca6eaf33f6e61e50557ae30573ccaa5f450caabdcd3b83b6d"), ("27412ed0a9ba0b9ec7d342499ca4fc717a638475b796dca02b599e4f403e868b", "01312979a8159c9491084074a1c9d35e47f21482034bef19823f9f8ad91b168a", "2d3d66c2d38ebe70d1767de29322afc2cd5c122b952640dd8b3dae5432544408", "05193825429305d56ddb0ee7f51ea22b146e0ee49ce0e2129d620edbbab8af6a"), ("23175478358d14796eb7bfcdaadf1fb7b2dfc5686ede9196fb77cba6873c7c32", "203c55252782e13173a5fd2fd13bcec3d75182d4ca4db93d56e51957bf020253", "113d21c4ee11176e861278bdc85e7ef5c483c6b027f46b66a1c1bf82ad1f0c97", "1ebf03d9ece0590c1b831e1c1a4a4424d47c82af77e5f37218e30eaa08056c90"), ("166e22d93cc1bf4a03070ab236b87076f77717d72c80a2d72dbda6a8609b457b", "2ac86643d6d08e3f7a20f7c5c30a64f85f8569032e1b6fd2a37a527b76f4b428", "08ae1cd02b2c12504ef4b8eb4e9e5e477f3e353b22a6d33fdffde265b43fd9c6", "1d907e3e2629ac1ec34372d712f786b34d1333a7d3dca28f32549ab0fc4a809d"), ("282bfa1f7f3750d59c60b8f07fe903d3fa92a5f90614d11a99315fddb09bd141", "0a554c65204b76c551dbcfaae1880bfbfc84daf1579b032b9363a67baed2ea0e", "1cd4a3d8fc42f0fca8059dbc77908671c82bb4ce6f6798c5da93966b6d5ab2dc", "16838be2c294fdca1d927538aa141d0f4cc51056280a6db76431e75b4c6d3593"), ("01514e816ec1c46974a206acb3bf0c310d3ae7ba5e7798b149f419d445a518fb", "10659d69c48784ca129c8c9abf5a1dbc26ec29a4574cd31f056c73539387d21c", "00db4dc21f1abf139a5d5e5a4d32d33d027aa63442570a63597388bc0045af83", "2cf5bca79b52af18122d8c4061ee5de8b2f66a39002d500300914ef94a8ef082"), ("16977ffc64b7c43f82dfcbd78f69b1e8e862e05c9e6f9d95359a9bdacd4bea38", "0fbc28851709f84264871bc28140220dc9e7fb04d51ff3b3f6fad9751f3d1ae3", "2b64d13b2cbfd85a75ecb869e00f56c70ce36caa10a45a26ecfbc9c52d8bb237", "0361f6b2b8b9553b04fe62c866b6327fc323eaedb23972069dac999577fa5fb5"), ("155d9d1b23d86538581a8bf5f657f3746949e25cee0f48bde53ea48b654763c3", "00b5aca96bf8566655de65fd404d5efe2b46d1f2384bdad662b801bac95f45cd", "228ca58c236c27b18860d5e43d5c44c3d523e0958900fa84a3505c432cc6cf5d", "0d7c8d127add6b36dbcf166611febe96d8492fe1058a4b15cca36d71b48f6a8a"), ("0e83a46f989dd853cdff31786bdbc6e914fb0c64f78eeae52b9ccb4167fd4374", "1523ea3aea201180b18f27d47816af11fb745bd84a778ead2c59a6b84f376cbf", "0059e3968bfc038612a2e7901baf498d43461536fbc420a558e45b19f5738e43", "22e8571ace58ff51b2079506955cc4f851aef1b547d95e5011f319630d63e7b9"), ("1e64b4023b231833f748bf08eba7215f3a4c93ca7660152a157a9b1da34f6000", "092f28ab8f55e14c049896fef542fc9d1045b164eaf61041eee5304f36acf0bd", "0d9d78d1b7b1bc4e363cf6b81c58f2bb63b3f9cd3ac3480d99e1cd2d59682334", "1be54af98a083c615ee316d39a6f3109e22e290edbb038f384cab116a857618b"), ("090757526ab7f23ef94f8e5d937b967a31cc0f1fdfe3fed38fc716fe4bc5138c", "2e8bf3bd015f1603bb81447b2e8808fac76705b53d68c2da512740579ababea2", "29ec668fb248888fe212a30ceff65b93da922a6f9b377e42070adfbb7154e2ef", "26d7f1d6f99324b9803986e7d311de8d58a64cdbd567bf44f46c6ecd11c92738"), ("0e76ece47d0b4d2201ee90a9c652b24e7e3c7b95f8fa6313190ed187d138404a", "1ccb37f339f1ae1268278da2d3b55581d0637a5fdc7c30555c5ce40fab9b0219", "202d0cd50a4629618066b93aabd2de01e3aadfa681e0d8c648112c718fbab67d", "146502ded981222c1fab86ca300004c4f792e50f6cf9ff39b42c238423116748"), ("02003f9e3ecb7a1b21540cde3c37895076ddaf6620872ca8aceda17a3bacaf2e", "04d7553e690d413ee0d5b1dd6f804c7265f70d112652c659fdecd6a3a6012f15", "2037fa80d14a95a629847b45e00eb4466136489d4ad3e1e9b7f2e4736e321861", "02bbc9b84c79fcd1f1de981ae0c2b0c97208cfa5a68576315ae7f39b246a54c2"), ("0ddea54cb26ebf8690952844b316dc720f7e933a9305aad916ee5629abd281f7", "1cd4ab4f7e173440f4636a1e89b1c451551dbcae2153e7e6b808ccaee33c889c", "274d75f49ba5416d91d7ce9c15ede541139b503c8c7602a4ac3639a5767bb7f4", "09faf5ed33b310778ec98b8c651ed329abf3968941c70cbac88ba2ce883c34a5"), ("20fd20ef7d86aba83fa7d9cbc8627155bf505d163c0ae17569d440bc935826b9", "28738190370aef42c5b95e586c629d8ee4774427b33b1062e635a172541a9fc2", "1c9b0369bcadbe43b6aa539e8f155e9dd55cd195ec868fb9f5daa0f0ab9c77cc", "0b13e9df18a851693392c194bb66ecb7290c551bd5bb5514c78f442e24454ab6"), ("185c0c9d7ad6dcc80af7eec2a85cd34a8126dfc20858420843c6b0b2b7cf77ef", "2d80cc4b9c5a739d1071176968bc2cb4f7f5f5625fa81145dfa7b2a799a8f29f", "06661518c800f646d93ee1acd1d2a0dfb2979ebca7117a1a9b5b9094ae1d638e", "175b01e940111bde4350607ac26ca9c3d54fbef88c6af14c3ce691bec2e5bef9"), ("3033cee47f5012a1672e18fba49e27d358fe323cbc6bbde1fb7fad09bced6d21", "2f6ad1fa1e670bf00aa85e7e5488cde456b557da5382484136c7604cbc0b270a", "1ac1f1dc4f9b69ae24920ec175de443dc49ab0c24d830aaa64c5a44ec26fc845", "25a169cc4b2323773f9f87cb136cecacef4be5f6382e3ad951330dcb17c66c32"), ("2944889e465d11e3649b4005a0f0bbf4c2ccd6f4e6b2246ee944944d6dc2294c", "18ef2c80479978e0de00ed93eb27f81e558a769d3b6f954e9916856c56ac82a1", "18413281ce9bd4edd1da42338c9544290fe6620a6ac18497fd8ad41000807d75", "2f3b9c49ed65371b4e1f41c2073bd776582dc33f13986e5598b2064f77ff4da8"), ("13612e77ae8db98754f92009af6ddbd0eed71196f3fdf71ff63a6f7de74950f8", "16d54de411fa97c76e127e73d38234ed180a424f34da8ef424c74ccd6e56764e", "014e7b1f491ca98c5cff2fc5ac0fe744c51b0010fc0a332a02acb2eb957790ff", "1de4193915bf3836f1d5f2003931659577514759b3db6beeb390acbecfb870a5"), ("136e785a80bbd5a239fbf1d8ef10288516641903329fd2cf76272bda39b4fd4a", "10e0a3cc6f8eccaa0175fb98039d82d0367b4f3b112619c26281a704796e840d", "221359f645aed1ae8a833011cef8925c5680c0c91c23a10f4a711456e989ea3e", "2ac72721a3202a92482b35c6f350ac2d0b282952c3f5cff9268a72b38556c58f"), ("04e872ec7c75223fa7d6e087dbc0e388c6136954430589c40c8da1605907077e", "081bc077951d109f919d5b53c6a05f5424945be8ed9970f20bdd2b52571d1f34", "117f642234e4bd385a6aadf8384fc8d71c873fd62a00c0b7027478a43335e5d0", "1ac6424ef7a1f7fb86de175aee6c859a64c9b1669d33b7942b13129158924391"), ("01786387721165d99f1c7c49fa8a98923e39f527c1a00385f6032a347b1e8862", "0af3606bce0a386e470b9cfe8333221918b22bfe5d3d61491ca772a7ca62a416", "16028a6bc87e1a0ee5f958b2cdab944c65e1f2a974268dbc91bb14de67f90317", "199911e279d3d7fa17c924c38c93218103db16ce49f4c8fb505ada56a4937620"), ("0f1432e2b09775af5d4adfe19c8b9627cbc9c754e3c96e504a2959df2f713685", "0c1e08fad6d5664d54bfabc7b9d17fde83ee49834631d00a88eb592cc5934bc3", "2b9768cd106582b24cc8618f522d08d42f19ed7463fc4db1b5442ca2257f47e9", "06b07601dffe4aec945a718c33013f844066ae1a03487fdb53c76e8e344391ec"), ("1424ff5947a9e37ac7d86d3ba778c99f6c24939fbd9f4d6fd140ce0d89120f36", "229adcf0c72030dd3c06a4673f59313a1130d657179b0ee3e6ab7347a5e957c0", "0b7be5d4dbdcc0d5c66888c411ded026d270cb53689b5e677ad6e3b9cc0abc96", "0629ee6bb8029201ae79348e2336a221dabc47e8edb30d7c80484ab8d90ae559"), ("0d091748a3f88e68c65325f466a853b6086f21264e6559f4af3b17833abc5db7", "0550f78a924d01639eb0770c0f452950b0e854c6002fff24a96aa1497ba42bca", "0c75dcee334725749c42b21deb89a5495328dfab078e3e2eb44fc6fb0fb0ff9d", "272674c43098b9801ed06c996b10a12493680fd1221392617a5aab456d07b565"), ("17c4944d8b2e95ce7def52a0d90e888b6e6c6860e170739227540f48a661199b", "28d8b677fd2f7caf6293c4ff43146db496844cb97855b3f211f9ff3912f91702", "2a8731dcae08586320c9b752acd4ee2759d85969eee1bcfe7817de412dc02610", "0946d70695a18f382f7aa02a7c2a134fc004997a273526eb0f78445f67cd9567"), ("2d6c1224b234d1e6f9f061caf165bd86aefd7a103f6566ba7e0262ae2cbac0bd", "26adc2ccadaaf6bfd5d2bb5297ec3cea4338fdbe1bc5005710320f2d0f611ae3", "0b4832c68f6613d428ce18da182718d8baa873c1449362eace4145d2fb78a31d", "2ac6877098de72b3255b9c5112c9af4b371d39f7d107b1ba3d4079b682dc543d"), ("27d47494340e752498c0dac15214547e4c7b2925fc213483580d2f715502b8ce", "2de48cad358dcd6ceeed5e9bae86038d016c90500bffd9a99afb0f6cff0aa022", "1dcb1df6edb6b81a56035a292e7a1cf60ae9adb851133fdeaf5c334adc7e90e5", "15d79a0ed13e4929567bff23ef218fca3e07f36ca1284ea397d50e67d72e3197"), ("204246033e6eb02408ab029edc04f89a261a4be35ebf1bc9c7fd549309428382", "2e9d33189b5aada96f30ee958f91a73b3a636a84094ada44dbf40dc0422ffada", "2e3a8a5b9c5a12b3f409b197c4bb0ddd18013514b417fb0702d945171095650d", "0b43cf4631b073ba6f9524ab0a65139075a8446ef464c3a7dbd6f6301a5678cd"), ("10041c709d8e86c3738e849fa74b33c19ca8bc84eb4707bc164e86e4b0b5b32c", "113f7e84b2827b4cccbfb95b5f90c6e592c3ab7ec3b4ef3d6a740a5036b54f38", "18b94daf42c2876e2d4475c5b93e63e46d380d29ff02e58303816bb1bf7f3963", "09dc70ead561bd56e4bf45bd6d09c1b519bcc5890285c134b8898726fdfca3f9"), ("2d09b3f2fb4f41a2dcafc1dc9adae07bd8d8f162c5b76a764d23996669be9551", "107aa5c84358fd4b38881511f7f141be74dc9e0129e925da804bd696d58346b0", "29109af77d449b0481ff2424ff3239172e3a9673c590d3a05fe540f38daaa959", "204fdba5e3aa07bf5bf715b935d5ede9dc32547d087387024316cce725f3ad1e"), ("107e65319f0c382cdb3cd3891f1236105d9be34f9fcecc4fea96736275968616", "009578bae06e124fcd960157754ae04817f7d220fd6f028721c4c32aefb9b06f", "17a37acf480df3d4036c827d49a3a4ddc89636735745b44013671ac42f37190e", "1d7dac040a1bc0a2263dcda7b8112d3a34c2c86ef991901642bdef2760f8695a"), ("168c29142cdc30cc3872acfdf7caf6c6baf87f00efecc99857e56941b68d48b3", "105eb76d78e5617ff2e8ff12ae5ab040e5835e82177416c0cfea78a51a0f615d", "300f8ec69a484cd69166a32d2cad1b47a0ea15148e7bd5ab06bbdc1e0d8669a7", "2ab33b7b78bfc14f980ca605f68a1a41e778c2fc2e9cf865e8b0e45864a501aa"), ("014c10adebca69c73949bc30bcb82fdee6dda90d10f9a91b42b63f4a88befae9", "2f67ad6960af5bd4eb3e75d4421793410aa2ad0996c744f90259df149958cf90", "2bf85cc79f0534502faaea408c7489dfb425a96e18f373c4f424dc0f45234774", "04109584ec952d55d0724fcd3aa0cf8ff4dd8fe8c63328cbca3ca2ebb9c8a904"), ("1caf212379e82540037857975d03bc9e35af0a82290ca17dd5b701e04c5b34fa", "106186ab1ff8585e996583c29083a16e436f73ce3d3a2935a2e821c105ff664c", "0259592f6b805f8cbd193a65e68d78103de9b30381f117424ff2922ce6545b56", "0bcc1b9e08a86681c538c6595c39f4aab6da2cbcb303a211fb63d2a0e2f4897d"), ("2261a56dbef5507d75d94a756a24e4e597e9283978a14439fe5eb17d008bfd6a", "116ea287c9a92de571b045b3fb9bb5da9c86694d09f1ac1a618317d35d6f30a9", "17f363b1460eadab1af10f6593cff7304df2a3788e13cccca7b3ada43feec4a4", "2b22dc5446eb90752cab53934327e5ee6ed9183ead577c9e7d1907c99aac8fe8"), ("1387a91749ee9de07582ae5b8b678fbd9e2c96b6cad1aa7b3639e22d40f7608c", "2e7c12daea63154936e37b39c22bd7531e765bb8e899e2a6a27f4b882ed51fb6", "28a5039a19c424704a1912fb27f572fef77f65931dc2e0d5b73ce06f3af49906", "2af05618089d0538ad2b1e24559d8ac43910b3fcc24c7a7b15c66801bd2cea1c"), ("021d98702b28fc0336dcb67b86f318a8b817df35ba62d251590692f2a11fc6bc", "07803770b966f9ab84a54cd0abb36ffaa564c1fc3fd24a3c0ca70473fc024222", "1002d6d5ae155d3c66894aada92f779f811380d2032948fca8ff97a368ec9d59", "2eb45c8ba5a2d5488ceff684f6c2ca0dc0851449b34e25d99a1dc18ed0392edd"), ("2d6dd710ba4dcda28bfb194d36098466a670995eec844c7049cd8e4ad7fb8202", "2435b53349f3666d663dee26eeba1ab3bf3168680b889008696e0b360d555454", "16e143763685c17e8cc1ad76412321cf84f133542c4f874ecad0feb7e1d0b7a5", "2738193a51ebc7f12ff95e634c4b16e9961a1cecbfa40015dad1119c63d7ba0d"), ("25fb94fe0bd2e90a039970a7ba55981fba93bfa5b28411e69e4e31b7f1574870", "1cf6c5a82e765376253f7aacc25c1cc0bf7b52558b42c48cb7f76fa585139a91", "0c343679b796a1040015e2e84a0c2d828c87724d328dd14461d2078d1c776a5b", "20365c8a2924700c12a282a6a4f1ba4a244b3033fe19e5a76840c703d3ce0bb8"), ("04f7f66f115cee4b5e321948356b0e8f01d032ddaee9abaf2d942c6d1d247e05", "2bc608cab91f975f7dfeea4560f1f8387ea1092e473d13cc4891093c4bda33f7", "277a209cdad2b00017ba9a9a8c1e944971e1fc1377d3304c507aa2a045814eb1", "214959a5eeada294bfb9172d40d52e2d55f0f08f52dacb01717101adf9900ef6"), ("2933323bd0e2468ea07876d8a90e0622e69c29ea54e8c64ace8110bdba560668", "220f6ac3a61b6c84574813dc57d83af484036fa41d46c4a7279683484aee2b3f", "0f8277973acdcb9e8891983797c79f380ee01da20f5cd860f23851a393c2570d", "01d456afc9ce4214e34896b7dfc95728099f7cb7b4d1bc9bc884bd01da2e83eb"), ("00b9cb8c0440f5733e715e4fdabe32983134aebe3208da0c9f8f067d81efc37b", "024c9048d0c17d9ac6f2be9abae482811693b0c1de2c33b0161513976c2e95bb", "0afb1949287566d1a87791ec41d197e8819081427316c52df7e02f26b30cd0d3", "281e55147dd811ba495fb3e96f3a7f703ad7adbd4fca8d3ed85e800ba47b51b0"), ("15269b68e1983ead0ed76c176710191ad2a50c17ecf1b458aaba1e439cc63cfe", "22bb7ace5837ebee319a435ee4daf57189a302486efa2a8d067d7a9439b9155f", "1ad3cbb3eb8894a5cf73c90be297ae09f1dc51f962ee34477ef57617f1766610", "245d6a1be489f38494a65fe0c40349d75d8d490dae9df31c2090cb5c795075a7"), ("1e9ce02241bea5197d2355569969b649d451257582728bcd89dfc6606bbd738b", "0632c7de0ff9e83e315aa812b1b50bbe4ed385b12539fee756935ee1622fb2b2", "2b5d224080776d3d8746838741304ddeb1b2ab39255af3227a721aafe87130cb", "2f275eb72a03c3a1c4c23d409f263a3e6d3347d02dab8bca0d58a9887054fbbc"), ("2d03f0e8ac2e3a89a357a2edbb71c0973f1e5410c830dd4ace8fcc9e0b9d1757", "0866ee1fd4113108ec7008f78d8fbf0f0a3525c9ee316d4ede4eecfe8f06c764", "242bf8afcf34be4ea7083aec439d3eaeb8e94357fa89f3cd628436db2d680c69", "3050b3469e0338c1fcb4dfa46599de5b64c09f20ea4816ddef2a2701cb9d264e"), ("1ff637263f338947b6bdfc788f15ea4bfb30c1b47cd5e9a47563d271dbf9791b", "0ac32f05e61a11515e196ad668d5fc875a463833bb20d8006e274ae90a43bca2", "14496252dca6fcd7f654277cb0c52199513bb4a998da0e61ee35a33b251e606b", "1e61b29a8c939d8f2488e47ecfe5c4d1973b1819a8e9931378811add80d0e98a"), ("229865f264c6a97ead15a48cff1b906f874dcde902fe83bd9068d0f4002ca4cf", "1502548eb65a50ccfac75de2d5f33195a347cb1f2d89f31a22dd65bced261738", "148f8d122485eee361143873c94d224c14941129ee4108606c13098c7e039d13", "0990b6a6e792149c233d0f0890aceb274d8178325e638a322a7b837d18060384"), ("0908591d370c838a9e1035faaed442082cccf698e2ea858699b0f6c9241d6e5f", "098c049bae4f3d82b33c65f9ef9d240e11b0c02b40145e8213e8c49246a03f6e", "1ebd6d0f240e81b25e9f3da81320766d1067822c77331800cfd7e5f2605cc948", "1b6515165720540c3bd413e1900ad45abd5b7babe4b6660440b13f647a1de947"), ("2c980ae67fada7a0851b946d71d69755b5975198e06b9b90674764a4c62317a3", "133c123001e21153034b4d22bbbdd2f0bcec45f4e37a880ef5e182a3e8b532a0", "22c00d96940a51da822f49c17eaf0a4589b3c3a0fb84553bad75dfc3bbc128f7", "18d116bcfea9902c242d2f0ee56800d0281116da3c9da9450a56fdabcdacbe2c"), ("0bf5c7ab931421a037c7c989e3a868c14e13609804d61cbe735d2faa255382f8", "083bd0ab7e68c242ddb7a60f85cc36fe1561f9c281f0b11e2b2bc047f9c3579e", "1619507258aedfaa52cf8f01032712e811b9955ce16c62b955fdc14e44bb216d", "15a67cf64bb0013950ac44487da0836e6556e3a8c3e9f5dca3ab2225864a1f98"), ("0d6bd2ddfad919e2761dbeee08e6c595631b87f4dd59a37e151c2bf8ed545244", "215fb97147aaa98c3f25eb79ed50020971b0ec592180e7fa4ac7869251b5ad22", "1e402b360a865ec478a5de3962fcc5d90746f9534e41a85bf3cbe34ca48cfe16", "169d8a1859ba18d876e56184b7f097f0e8502f5cb0c3ecbd47951bd03bb37c93"), ("1d0deb27cab307a58e5abeeb98d02a4e2a6fa1fe735a68202a89869559971e2c", "1440fac151f55b011fea287b543c5250776ada0dea7d84e2a0b2928826e0c887", "084f4351974c5d166dbdf6a16594b68b84f80b378fa2c3eabc4605cfad4abef5", "00f55edf28218031ad1e8e26d49aaecc8628e369c78e5a341d9103e9e1254b9b"), ("184041b187cc18da2d489bcd04ebaf761f2de9a610bfac06334ba05580d9be89", "1a42d1e5b74684706d5102b7763656ca275848e3f625701b38e0996a2ac86b21", "2983c1cb75d4545a4368148d547c4cc6a2cc3c687f207a53852f9d6d05c0a065", "188a67402a1dd1722b1b214dd7d4481f0714631ab37b22e5a47f03ae091d3799"), ("182c23d445f1198d36963d0b8c8ffd2150861baebe56a62e71cf51eebda08eb8", "0e8526a48c0173862829e67e52e850e440b5df3bb3d07c5ff1f562f954163145", "0592236a9be70646368663480e6ea8fe824bfe47ab0a03b71cb876c489d7f211", "0701c556b7d909d327bbb73e57f26718eac29cb0b47af8f1a597c7ff03bb6d6c"), ("05b4d47c4d0fa22f7e5881d42cb045d580e06cd550251b9e91198133ba38b12e", "186e752632ae4c20f6acdb383af7c107c806d5338aace6793aafcc79f4715df6", "172ac7afbb832429c4adea347dc00a570f5c15e64e0bacd2d9ca642d3bc5c8b3", "2349445cb608e0632a429629a2e3b72383753642c7a5f6d83c30827abce49fcc"), ("24a2e2d7731ddddacaef9e1de9883bbd0b8271570825f98cd9184ee42c5659c8", "24785be7d094e310bf7fcef01301303f1f25041f7227550547ac51447ab98411", "1deffbb5a98aa720c03f8c62c4e5de69d1e77bb2d091e799e120ffd5d730d875", "0cd61414adeb0e882745343da5e3f94a223d32b763c70f8a0f672466f73c5d26"), ("1c4786c7e930f784dc2113202829742e55e44e1c0f7f9e0c16bd647678df9f7a", "2ab71a4840c998dfddcfba54a4409ce21f3d7825f730151b962afff02b0285c4", "28dff9e95eaa2254d1334aab20ca4b953eb8fc78221f056ab5980135ab36470e", "2f3a33bcd0e8e12c7fca9db4a9b2a0e5f9cf9317391ce531d2196c9d4ec63924"), ("1c1022c3332e1f99eaf3d8cf6ab755e8cfdaec842a57207608ee6567a09616b5", "232c46ebfe00193317a333347b227fd9f8ef5f6eaef93c421d6b763e58903923", "0057295c9183ea31ed9ba97e38d37d54fea1d8725ed1b5010d0b4223b2db5b3b", "048a5975b820adf78fa0646182e966a87f3c08a1203142ecb3be1e08c40c8078"), ("25f344d572a2d712ef8a9254e418beddc647c0aa82b3cfbf614aa9a23d91543e", "0b9221c4d119f950649ebad58ea329af56bcea5627dcac8a6305470ac45b428f", "062245ff9fc74a9b926ecf1d04d91b8728ea14120c6d53fefcf58a3651b39a53", "0bebaa651a96733cdfe19d05b9d7ad2c2ff809636c88b11e728bc8461ac89e47"), ("13fb6bae40633bf397ef6abc1152a1913d6d817e79cfcb25b191841c1ce6cce7", "2a88f394fbbd88789cf70ef845077523f45d1c5330e4928611b68da7423a3da0", "17daaebed4f5fc22fb09b800b08975f37c8c9ddab4970e30abff09b41b31b034", "0f389552106c238b759c2ec510a7ad0b0874825833a289b020441cadb82e24f9"), ("17e66ebc16197d6841e927358b7a9e4f3e6682b80dc55ab4474c76a5a05ba1e5", "20372acc9d7c037cf32ec5378edf892ce8dd23ba5363a3c9aa4ed614201d3bb8", "0872f9e08eff0327dff2a19af180f890b563efceeaa131a5785d86621b366218", "2d9f46e804cc4dd0e54cbf34169e6ff4ce296b2e724025b5f5514ab42629a831"), ("0c2a979b842943ce134d6580898b0bd6d6234ac550f9a6117b98a221025ed23b", "28cf03a73de16a1ba30245bbb14a4dda9926d586a1225922ae50d5e222f32cc8", "14588a2080375632b8105bc04c8657db74f23de6bed410cda3413cf7bc4496f4", "1e24d0b3c1c76dd4a5ee9f6430d7a7635ca8b451b3f021015553100a4baf3c6a"), ("05a18c6cc8fcf8159123dd9f76cff74c53dbf04de38048a90422c00a2248119d", "29e9401cf2fc3cef0973132e8ada0d260436551cd14cf9a1034edb393ef69db5", "0946cfaf6ef46a37e876c73b42f6edfbb3672217f6bb55c82bb50c8773eb5ea3", "2168cfbc9186b2c46e9e1ff79f893a5a98d135098b76b74c0d21fb89cdd819d5"), ("1f99665083ba30474e350c53743406a3169f83980c5d63f2c1f78dc25a1480e3", "0b3658754ef47a8829fa49cabd55ab4057891f42cd88ede82c5d099cc7033041", "2d2880fe1b5d81712f37d8de737ffd1b40e1197d2c33bd4de6e327bf570cce48", "0aef4103e58489f4efe4b197da5032433a6444796a374ac7ab39b65205dd444d"), ("1bc758e662b152c6e0030d8dd82fa7fa8e2ae4e352769bfc0d36381620a19944", "2e4ef10f1c93582ca07ff096ac9a9d33926f709171dfadefac2aeda895b3a6f0", "28987a6a2665d1394dfaad4619323d3339f2b78596a3f9b8792d3e535bee5310", "24cfb8d356396ef0b7b0d59d565bbc475dd7edf33966db0eff2faa08672221c3"), ("1b2b25782e85f6eb7c88e928638a5318f7b67f750d01560c76584f90a6bd9294", "0281e480e29102f9349e3733cbb8a7a0ac3f4acac817b1885d97f72a70f9dade", "12001000eb1132f0dd52668f1a4a890c6598a491fa7c185da2ea2086f7c95bbe", "1ac43856ca974544dfad79b0fef66618435569535396f3bd98d04c830351d9b5"), ("0ca98fd65897a1184bc807b95e9efbe8c63c9a172669b6ec7bf473c4daf83b05", "1376c0e9f1aa5e84437c141e5e9d52ee759238d18ad0fc683bfe46c72eeb24b8", "18e1992a3f7454830d71bc38095ce1746c4d468f1d51f530899b57c31e29c186", "1dd450e4dc30ffd9b62df0e31f0d2683846a2a2690acead65c86eca70afba78e"), ("017a252b11fae88e06dffd96510fc8c6b59e40c4e14556636aade8ca1aac3eee", "14d2bb904e3e783802b7601a84b05d87b6237dbce781b213ef6799ad386f4b4c", "0b6f6a44e1d19f1132691b929f8c817a8a4e5a91898bbe9b2f096190b233d734", "2dd61c18218acb5a71eb9cebb8cb3c568d3325f8f8e90402752658ac27a15854"), ("2b9e4d9cf944e3564c33a84ecc34feb6b3c27923c0a6979436d3e4f57b7ac5fc", "29b7706334f8c1dffa2c967de81086059ee6230c1b4cb72a9b099fe541bf7db1", "040bdde8d0010d585bcffd485be5077a1686076a93e068ce19fc4f1cdf79f9bf", "02401360ca01bd11a311ee8e96bf827e89c339d44bab84c55efcef4e11ef9e4a"), ("079c4c25308b459668c2841d5949dfad4271a585d28c7f8116ff1d3cd96358bf", "27c54dc26c25397d91c378960627018a6bfc129f076de0e16e314b4183ef358b", "131a41fdf07f8999d9cc12dfcccaf4ce94bb496db9143b22e71980f2b508e368", "1c5b92994575e41befa7cc49c32202b3220b91a0dec1f60c9c0eb07edbb58032"), ("21e67d1018e0816ae1be51e67bbccdd37f51278833c2bfd35a7d63ad2765230a", "144436abc0b939d4750c2ae46a4abccb1563308df1383f869512562e2f8a127f", "0b38e00985a7ca3c3a12d7789ab0380738cdea8bc3ac5cb5b8b291a8b9407bfa", "259ed9802182e63234c689d6653c8bd307a284c705b6025f9b3b14701a2e2617"), ("080469280664fdc2d395129b0ccaeb31f4539175747ec18440bd17a01db497d0", "170c73d702070375e34d8d57d4f0e04540c4538698e42f6b9cee66f5f3c71611", "27f0aa5a1c971896da7f24f87f3a642975bdeaf6f5302e63e5d1fa68b13e5064", "0c105f953c5984c3460eb9e32429f5e8e8e313c8516b946108d490fc65367de6"), ("0072731df5418b4ea21524e9a27f9a73f0360d64d527f4b11d8978cd56aeaff4", "0ddc12002ff014326ec9c4e92c260e76de29d3547b6b856b91a6137408c938d7", "15e37fec7e9820953fc498bc88231d997bcff6e765ae812852f5394ec441045e", "179dbe5bfe63e6b948000942659bd541c582329f3e09cd672a090f4a140a9bae"), ("298eaa881fbc3594af54e93aed87d61e9e0d42233a8212735d9da06d368d467f", "05d079c5027c628d0b4d89fab583ca53a76a4601a0b55f98a26a85f3202e2c7f", "0d67db1e694d12e81b39e0d64b3b82176bc9ef1a6a67ba972538d416a5441c61", "287dc8375786924cd748d384a62495af25beffe3abce19db5d92be776792a345"), ("2e81cb10cbd51545d8ca8a283f116f3f86881ec7af78e681191f89d8869a1a34", "1de4612da27408914738177db41e9a1bc74a0ef74b605a7fb85ea85c1ed61193", "1ffb629870f95d0ef6cbe7566661f267bffa9633bf7dfee6b95252631ecfe030", "1df785833b0ec6c1a39067b6d2c035d3fe8c8a4889a39b582578fb8d87339275"), ("2f7a562b418643e9655e701035f185808c087c48ae7200ab8640fa4923a5f62b", "24ea8af1c40762c6603cc872866a93573c3214c192e658b464ee41e25a6afac5", "02174e8cfeba6dd0991d50a0f51f329f52a83a4322c0fc2e9f8520d7d13d6730", "202179015aaaf3bb50d97167cd7bb192432dc8ee6bc3d903817d04727cc6270b"), ("0d3a8509a4b96f3e6ccafd5c7f85d192bf68142ff5e45117bc6ec031025d21be", "11268ab338d2a93c7db2f61c4ba0d9fc06dab0163e9da514553ec7f24a784eff", "01e106c6c4524cfdfa718dbb0cd207dcd57490a17599a6a7694fb5ee0c2f007b", "2f765087cff07641d51395a54661b2760ca4cc20b6825a338ef50de45ac91caa"), ("0ee99922a90149c0f924aa2340f559b1548a16401b43f0d643f5ff8e7d83bef2", "135a9f21dbd94c246777587013afe0796670a45d669622666df7a34fb149f52e", "21b4886c8c484820324248d486f8313f727d0327b671440cd33215b6ec4e2eb7", "0cda429533a4c4cdd94fa7e1023c553974c7a3d00d39110b898780a433b534e9"), ("0f28ddb4e460346d8b7c39af6a8407e2a2d60d4d8e81108e8b0e30bf59caca73", "109d8e793a3226311bfe65e37e10ad47fbaa2bc0244d351ac8c1578f2d64a12e", "1b19642b1930ada01ecb8fddbe8e84d5089b74aa3ca1a8f4afa6a1d2cc317d33", "2fd7ea0a74d78899036b1c9b982389597fc1663d5f35ea8c30576c9b26b21689"), ("2f6936b5c8588366b34cca59146bbaec70245faec022287ddce95a31e77572da", "02fa776ea1362e02e30b37257724dde11a7a9c77c425f1909aca572ef2644224", "19ec243e2ff798a4cfb69aacf3ccbac115d04bb45a721278c1cc96b74923e117", "243e94489584295a949055d9abe0028c23ff84d142c039457adebd8d9bb1104a"), ("02c9d1473e9e4700a1f73b53c6c01eb3fd8f4b68a8f24d318c1f6728ee74f484", "00ab44471812388cb6cd734fe38ee41a3f1accc463b71d15b1ff46d6977855d7", "1a20c441fd17e3f2a00bc88406ddd0c58975b8dfd209cad7ef3b3cff69c4fa1f", "2ca92c1834579eb6be47fa37df3f7912c7358813f790586d229c9b4e793b726b"), ("0bc374c2ffe167d15c4405dfe9a848e25d85049bd1f807e73a58e0b7e2729f30", "21dfd51cfb79262edbbedc2b2bde91b030e84435cfc100653ad869fb64234dae", "191b76f0604dfaa02acd0c236bb9cd0cca549379dddc74e5433db7f3598785ac", "1a3a6093a42aa76614ad25ad21ec3ef883eff9fa886a8ea462db58fe8d6026b8"), ("1ebb48ce2d9975b26a8ec06de1dc11019441085768e31d6c2d3b07b2d2cea099", "2e36fec03d6671776e0021e8fa31d72b222c5f99cc27e88734d78287385e91ae", "261fd2bc941a1ad96774a87160ebd62a5649550b7398451f27ddf4e2917e26a8", "0d571345a3cd269e5b10d02c62a9cb51129e76c445661ebdc11ab28b1d2655ac"), ("02907733fa5a2ad1cd918b51d89af210bb9bb32bee5b44222db048e9aff5e690", "058cf7a8c3dfec3bc6f3d6869e2a8352812eee7520ee25aefb92194a1afee4ae", "2a6deed4cad04234fd45f5637691c703412e14a02ef4961c3e03de70be6c3505", "0ce522cb0f156b9cc335d99e6a70e460844968ccdc00112fa39d012817dc2fb4"), ("18a0362c2139af37a95d42a02c90de45e413b8386209ba1f2fa11a2425ae6066", "006be86831049bebf65203b7b9553b390333b2e39dea4ab6bec356578ff0c26d", "1aa47a19d9c25f3a238588fe046f4f157397ce6652a73a1b5cfc101a0fc020cd", "181df7f98666e9627e7c1a6133b70c75180a4c8b1c1cc442bcf06e34f8d0a985"), ("2aa1dbccac8d8846564a9db1f07f99214de1630fbd6e13de98ac5c2093eae4c0", "1ae71211744a84316d15318da0c8f46905128eec191f2d2211d7f59641b418ef", "066a88ce947bd9b86dda0f940811e36e5c18c2e46c84330b5b87a3cbe8f3ba86", "230b7b0d92fcb607dcafc0d857999558dbf0d831fb2598b31441c22f84367bb2"), ("081edc042d09db534497fc5a806c285a295e8bae9129b0a64f04dbd0fe4c0db2", "1289c5fc2b87a648dad68410e0a3f58c35fd6abfb11d56de2bdc635c3073efbc", "2957fa16eb06b4134250743f72ec3a91ffb7a2e7ac11e1eab1331b0227101bf8", "1e0c209f31ee94d010f188947a4619c1e7fd4ff61da47bcf31b4c8ea739d24ee"), ("29573bfe38bc87c5ecf97e2c7ccb661703345e6528e58b195234260afe62d26b", "12d7d63b8bed2264e567a5e0003512a3273804b93c7c026bb5f81cbce0734f37", "304e8f9108967defb2398b8b9c14cd03bede072d8669ed582e3603909162c047", "11344924d172472219361dbdd05d9a4cd5533049230f0832fdc82649a300e77d"), ("16dd274a62b95dda64b181684fab0f3ebf6e7eceac57e1e3e448d3e327195bf2", "08575bd98dcd7183f5df11dca2d09ae0fda20225c888bf7358566ee298bc1f13", "2a3357ea74d19ad55c8c7e21f42ac60ac5d83e27cc05c1f1057feea12301f5d6", "0c2d2d177d97f62628ae62bfc74476f220aadc0de02643d2e67cd603b9766026"), ("092f689861c976d6d12e6d8b086b40a79ed56500a6faf9f835d282deaf832b74", "2bc4953e159e74e8ca9c49e40d1f6a2394aeeb00b5b2431535a6fca952bd7c86", "0d81934b051915baa40e757539432a8474d2922b590aeff75df3a8390f191946", "073bc74e229c47394744ea9a348a334709d59c04dba011bccf024acd0747cec6"), ("0db3c1e7da709f6b8e6d809154846168b2cdf0e7f94a6e6f919140dca44944d8", "16675e07eadb4c53fdfe63d6bd1bdedc11764b69ad4e8d6a8ff3eaa8ccd51440", "02858dd336cbba4b6df84282543252e1c74c4d83612249339b40e9baace31446", "1ae2b2641ed11cd48c160918ee6b135f6f757a984e89c8ebaee85f3af790d6a4"), ("1b1cbd1edb185c7b6d50268d942bc7873677e8c5cd2b6e39dfcb4b0068d6e645", "1d873f50f4ff9a0b2cd3b0817f82fc6ab694ebba100d6be522a85f5e71bf680e", "1e2b9e91b43f48bdd4136422c1235f648f62abdf002bf1e619e7c75ee4fc7879", "277f3ebd556c7f6064653f9fa9b59778378d0921c03217e381207d77111d8975"), ("0fad959c1da7368fdfef9b92ee29c4942d9e616dfe54bc3b8bc8e1de163c30fa", "1ae20edaf61e34edfe29e8af4d65a972e71a65346d81d6ce4f0e87f8c2967cf4", "01a06322817a768433984b91c3b9f83d1aa8815431476e9110d772b9c64bc7b5", "0d21305e635e89d89cc709f54608461671cf10418947a6bd78dc9e71bc44ea2d"), ("00292651a5cb55651a3b75866dd688e77cf49adc282c06268a4d8e1ac94016c1", "264f3cade5eb44bf7904e2c24a83238285ad7d501d08f4966b18f5e5c26cd1da", "270cbc43c614ef6c0a02d1979909e1e4735849411420297a4eef8ce99c5aed5f", "0ae97dceb251219667e84eb4ab7451fb624f63c08ecc78210543848fc64c0acc"), ("2cf2d5b14ca718168eaf974cc4820b76fe3d2fccf95d83d226781bab3da6261c", "2dad84aafb2ed0b9a30202e3ff58a3381c81f08601d69cef2139a5ee685bee88", "095965364fba84e040aaa484c384987375c5769c8ab8643f7d0fe42d9cc7d1c0", "0607c35bfd833e134f773059d508cd9a9afc9481f4a06e7f6b76e39ef8a380e9"), ("02143df72c442d8abe9ea2ceb193603676a4fed9b624ab15f8ad5e8dff04912f", "2f04945bf0617352af6e61539edbe7e0eeb53b53351bba9c43205c110fd009d7", "222f7d170beb446475144ee4094308c481a5aee51904f311682a665c83b06df6", "0bc51d591c07bf2b7ad5e284d072a4ddfb8f01b135d461512f2379d4d47baa9c"), ("0c7f79f71b1c848a0416eb6c5600654059231e67c5c4a38d6bbe873fec993473", "00443801a0bb440cb25bae6983b026165a440768a5468cbe34a31d9f6b9c553b", "2ff3161ae1a246f90cb396aff7749b7c09ac97628d382a71dbb10bdc023aeb52", "297827271660ab9290b2dd9af2979288c87f41d5afe826124f1353d98df86c52"), ("2493b9f3d15640db4d69119123a72d1c3c56eb7e8d7b49a6213dc35398b5a90f", "2cf95febee5e41156d878930f09084fef93ca3cd1a589a5106cdb9c1c12a3e0f", "2d8717f5cbe8cdd0529a30b217f397c64f6acdcfb2896eb025148b18442af794", "15b219c66d5505e6f36f185cd90a8aade27d931e11d4439ac47e94166c09accb"), ("0fa04f177c2052d6a7a3cd7a697adc010e81453627b98e7a5c1b2b4ba9935f14", "27939fa227295a36241edefc5068a69e17df018f3feeaf178312e22c4db24fb7", "15b319af552ccfbf2f4de359fcce2663fe4e4de023d74afb78f14bbd41e2a31e", "2ebc4eb29a6e20be8feed8ee652e79a70311bf0d0df73e2d327cb6e40e216f71"), ("169fd61d2aca5d0f4d298fdaf1ccbd4d134e8afba311a03c12501f87a1ada959", "0abc9bc8431b2d8bc6e6068c708bcab5a42aa218076ebf56ac2039ae830f9955", "1ec1e50b36803647f5711371f9f4bd5828ad33cd838efa4310ca26ee94ca1522", "2fd520233ad35b2d4773e19d9756343b56279b4ab1524e0647dcc7eddd811947"), ("005df0034bbdbb4744b56f3873c67a0f667948c755eca6a0637db3adfb50a543", "185db49d34d1892ad3f106551e18b25eee33b4acd45ea700c42e03e30407b4aa", "2740121a1466506b392eb4e8fecc18b98d03bbea8cd00f2e9bafb0354e4eee66", "2ef3f31bbb1576c3b737edabb53b8ecba71d2cd18673435a1203e75456c2f3d3"), ("2934f0bb61303e3ef8ea6ac5309b237216f511e8ed265c7c8eba52aae4aef348", "0314926dc5db1dff8cf1ba7600387f16e666b3fda98f54ef9e0bd2f1a38a29a6", "1ac4b104e21d4bc011483d124719e0206493f7a3254c97649f197ff36d08f55f", "015a9fbae6e846c4d3a048df14308ebb8cc36e7f49a39571fd554101d87f5b7b"), ("159f3fecc25b05278ce8bedfc0c3039cae506dbde387b6b095adc1d955625f2a", "208d63a7cf3f87b4f414628a1cfaf8fb796f76a47c74f63d25233df096be0850", "2d0f046eaef7c46f649fae32a06cf4f990b373f0e622af41371ec3a3e8e0357f", "275c14a7b18dfcc0fd414156a8e663e721c95b3161b41e2f289501b4870b8b0e"), ("2fd363c788cf223ef8bf5832f42b19fce4322111ac11eae532be2993f9d0caee", "2364e4ff3fc520665831a422d15c06194e025a4a2b5874913ed75737aaffeb52", "05edae1ed727cfc9527fda8d1a6520f2ce085a4082f341474545e3bf7b291e21", "17ce693e7597ad5fbd3e95c93066cabdf9610dbb0b538851fd02e5d067afb3b9"), ("051e0e009df46b3be229764ac6e84691f9fc15a36d2c369930c7abc920bd0f38", "0386be63a3f75e19e76bbcbb2294256d392e9ba5f47ab90a5958216159f3c0d3", "2da4fb650b22695ac5d655ee17e4fcb148b9bf8f1111d08d7d1412e9806b7b8d", "2c93c270caaf1a6ccce854592a99dbea8079db74480660a3135ce8213a0fa838"), ("0ede8d3cc9dce888239e718a88c344cfdad0e531b2a0de11b0d7c3bbccc060c5", "1c6e9114af8fb900409da1c82a08d9ba17c513accac2b0b742b802b72d864a67", "15a36484a2246d15bf32529826d4b94eacf61d3703dafc6cdfdf218dddb3212c", "2e6d6db95ddffe3eaad2b0a70d527460278f6a6d334b63bed2f3390d011f04bf"), ("1e531b1e5378df6e9c758e9fc9d60502cfa2e865c80df594eb42b821cf10b2cb", "25cd6ba1a2d7a2a8509e8c31ce711fdd097d2f7c5f6ec2a778b364e2538d2f40", "2239e4cbbbd0a2ffa124e5c706a3338ca9edb93d81dd34abeb6be2df474c9c0a", "1a4187b524f1a8a688af102df65cc3bd6f3ee12cd8b2b0a89099077fa1c8ca92"), ("2bc4dfe5639cbcd73c1bba1cf1171cf02ade2a3523be3ec8b21dbb6f85d45e08", "2494bc6ea9e62fab00e3f889d087602e838a97d340b310f80d3ef57c51543368", "0d2be50aa10cfadc75c8fcbdc1382d77de0fd07439161031ea9d5bbe39a48b3d", "05495b2582cd5bb584396f39220d631e26b666fbf9b30b7a258d398e98ae446d"), ("09d54dd802e864014c840f00201adc1601c4a83535cabcbfa8e10c6c3f1ce88e", "205c6f7f6266eb401ec8092650042dc2c91dd17a00b5988e6556f6a42b4e945d", "2cb8b381887327caa8663359bf511ebd025a3db09e866d50a4462bc55693d58c", "013f02479cb0d4da76f35ebfb218d18f16eb5a46fdc1ca5e02d161a96a4952f0"), ("1572c919fd643bcb081ce2a8762a5c253586edd9b1bb849afe4fff590d67be5f", "0a2a3524151c0a023b03d53d295f032a2a90af3fecaf2e0f35bc5fdf38d061b0", "09a90a19de71056fbc415ad1556d2f3588b892aa6038adc76faff540f0454a60", "128b27de45d5560fbfc69b1759b44cb0cbb9e87b56c134efa993ce41a72ce645"), ("20afa622168bf99fa69f69c88c86937f1eea1f463635b142ed81ca751aa861e6", "257ff175ed9c0983e7a66e0d76e328e20ea421cef6bc1e1593e173a2beeca6fb", "10b185053f7dfbeed09fc5ee67485d3a52e436a00799561f10294669d8d1c098", "28554fc0ced29e109ac086bb258b9c5bfe798ca86cd4783cd5aa8785f2c50439"), ("0ae05c062858ade034521f46db8f6194e50ab31ece3a393eed1dff69bb24ef6b", "23d26efff29b97361db32603992cb0fa3f6741b20d005c3b61093d72f470563c", "02add08ff1d4d4ff9b95e6826be2ef0c3bc76810b215af798011b3adc263770c", "2ddcf36f8a2e451af9bd615700476d559447dcad5a12b709e9ef84ca25465bfd"), ("09498566a11694e8c4991dc75fbfe55baa80fbed8daaf71a3c832f75ac18bf40", "2ae0f48482c61ffdb86152928452b228dc1135110b51cf3845e02cecefc5ac0f", "280cf77230e695c8e699ec6bf4518e906ff42b5d801a3657d20c784710d7c5ce", "053887cd2a13792aa23e75757db8266692ef38565d33591b16bb2b24a5a35719"), ("16ca8d6b5613cee2d6bef2f261978e7414b59cc1ce67eb116e6d7337aa9f2a38", "01a2b34832b29a26540e3aba42466b8b55bdcc5a5c9674cbb1fd4d94021249c6", "0eb92e959085dc4acc5e09ed5a7a362469295f3d4a2aeb914b7dd605a25d4fad", "11c38e0113ba5194cc7bbf8fa2b2c1763e76d93b1c6fa511afe782859381aff7"), ("253fa41ed5a4adb74db2405772e49d96a7b63bda7f8cca6e1d841c1b1c3903a2", "21ff649513ee66369f6f7dcc7fb656a0fdbffd42cded0dac564a87c81f933363", "25a979b6692ffabb9978b25a692dd9c5995574bd8446f78a4ff422dbc27fb23d", "118355b5b452dbbeba04d69753a463b02a36747e7c018753b914db9c2aa02b60"), ("01c7008bef748bff84969a4b579a7cc633bc4e6b0e95174d14bb11460e945b13", "23509044b3816a0e04422151b93a57cea3c20d9afb67580efac9cc142adf2867", "1a8b0510fbd75506e07346599be329da94e88aed91709f6aec0c0f93ec1ca642", "1e927c4fbba017c38ef608f056966fcbd425d550901296f2b719e626160ce697"), ("17e7cefc34da6228e233a0702dbb151c3ed8fae6eb8c221278183f4c7d7d6b9c", "1bcb23ff5c6b5eeed3ec04e5e33bff4fcd66c51084dd5c3b30ac659dbbbf13bc", "03f23fbe8a175669c0d4cbcb14a6be6219db74e610b74c644fdd815e372928a8", "1b45d886d8bbe5dae7800c8c05f2cb022b229fd30a4fad4d10fba09cf5853fd2"), ("0d63f517f36aae2d0d1a71480f77d7dcdbbe252acedbf599478a0a748f465922", "2b016cc15dbe8c36e1a6783c24634e0252cfd2475ba8d05a9b6113b24ecaed04", "2af959c2d706c61ed2db3b06a32ad26ce083a6b170477c60dee5136fe01e163e", "0a5abbf0d849ab583dae345259c55be51bca4b1fe3f6ebe37dca46f679a6ec43"), ("1b47f96d6dfdb44c1a2ad14a0d707eae908e27720acecde5ae1ef8246656b49d", "23012505f17575c4d20e3f7afe16404968a70523cbc840e183696016f0ca7ed8", "03c651d49308f29b435deb3fe9d48314d7a736411343e88e64202ac2d4a92bba", "20b31d1c1a903fc1e872455b1aa80c245eec52688e36fbb54ac9e431ff74a1f1"), ("1c0953323f5eb779cd5d5a9a3f90af93038bfc8d88b85f30dfeb4123277101fc", "08a6911aaab51fe70201a30625edb992c53ecdc73d8be4baefc746694677e4f8", "046e2f21c36cf4de8868cba498b8b544207a3791dab8bc9df103fa32399063a1", "2f29bfcf2be2ac210a188829747f15efe97aee4a0da29737a741f4055504c0be"), ("251b4b794bfa8a7568f02b7408a0b204a3e816a73533931f9e292417d4e3ab44", "1cce0f83c65ffc468791ed93e24094ac249e3bca84688c809e56fd0b04b5912f", "0f4f4e829326d2e04a615d477f5da727e7096e0d864699894d38d62e0797e42c", "1bec0d2738552631b49adf23d994251e9fe072f6d5f914aca36fd0d89ad08045"), ("079660cbf531af7151be4a82eb4d964275dbe60ca62951ffdef502dcd02406f8", "1dbc58deb8e71ea711c688cbdd827ccd3e3d1d5d9f1c4f09a734f1272936317f", "22bbabe9e1046d5b56a5623cf929bc8d6821cc7d3a1456dc932d5c0984e1ac18", "0b842b476b3c3e74a8d116944ad1b54a87c5ca8d63cac24b8841d595797104d5"), ("29d50c741bc6047dc2dcc7c960185fb744b5875fadf597cd563bbb615ea51371", "23d6aa7da8e72e701687fb139fa78216074d0f980f5f78cb246f14276cd65e77", "21dfd24007dd4d81fd62d9815e589e579f012fe0b53e76080898cbdcda2327ff", "2f5ee04f32950fa0ea35e812641bae5b988f901f15dc1152cbe71d4b95f31d00"), ("26253fc0578a67eed4f8a57218c87154b2e1aeb655cace45986a0d74830cf703", "2135bb39a7b38b82f45782c2d0dd35e0a2b336c3a98dc520fc332dc93b329882", "04604775d925e629e208f6d36af5566025ded2921319ee8417d92018eed00535", "2abf71160a1593f676a46c4d284cc1c81df016d02752f7609e21fa7cbe6b027a"), ("2ab8f20bc624396b986d18e1d9a7d9845e6f415af769041d8272583226ff3f6a", "0a73437a77d51591bfcafa990057c549d8f386a073c26d5fadfb309225ff8a41", "224e4a5d46cc561946345a3fd1b622610a9c4857e71bc8784eac617f64d8b3f1", "2fce386160fdac7233812f4b5a13643c92c09fd357272158f77401f41cd050f3"), ("2db8bfd1b5e92ce969b628b65b1ea46187347d21f5b307a6128f55ae6659d897", "3045b59ab2aa6750fcd00affe87bef8e722f639527cda13169a013d89538d03c", "2401a8073d86238282d614c1d3b8516abc818cbae93c5b1cbab5017a07ef831d", "1de4e15c3c19a3936e8038f0b5780d12b290a91dd65ab21ef1928a0775c705fa"), ("15d37734e718ca2958bb73c34501febf64783646a85d94289b633cece0848ef7", "0c17ca635193ae4f980ee8548554029ce807c7a6a9deca85bc3f7573f4692260", "277691f9325100b4095143b38ce216f89baa61390c5e7034a68499028f149edc", "1e37e0734092280c58e63ed0de918f522c231cb8f3b4c960426770946dcf0acc"), ("0784417bdd56128db5bedc741d899a7a832bf62fc85a37cdc0036e330a407fae", "17cb56848d12c0ddcf407bf35e5683bdf1752412712026d26f9b042be4d83095", "097cb7e4220cfea9190997a3578efe49f8bc5de3c92076abd9f4164652d304df", "2d23144330ee029301e63401aaa8e492a8373caf97451461c53cee3f1bfe3eba"), ("1e0239d619c8d2b2660a860f031761361a74a1e0a0e2c2e7256078c5aad0aac7", "23d6631e1fe6535f92662f95d55c8378bd12d339c3bde445c4eb56a7018a8cea", "108c5e131e7b4fb142f398d5aa7de2a1abbae1cf6ed97b560a3f32dfc59e67af", "01d5540ef25b586ff103cc8b0fd42c7b51f73d5c980213066cddd71244ec7085"), ("1870928c7467149cdd30613e5efa2852e522e396593f1327c22ba40f4a6b968c", "0eee5074bc9826da05e882e25e2b4bf5ac121e124ca04ca71f487709846e0c7e", "0fc8ffc8c4628b8c801d473f600bffdc7a216a1873de1bc8681d5e859ee7342e", "00b696d33815e66c2056d23c5f819a7d35cf7eb902559848129f88883df49005"), ("170c4d544046270bce2ced6f26df5a7a548e3f9eec626473ebf28f7c3ab4ffd1", "1ac9d1f27b0e6eab8ba81e413001cabfbdc6525dfd87d4dd898bab3a0a6f617d", "211ffba8036c469255dc401217bcead91bb82f96d8212ac95ed1764505d92f5f", "0a3704dfad0f14b649054ac27a8f445ae3fe41f182e55db95efb7f81f2c01468"), ("0fbdb24ebef2ede6370c21375f8ca0a8fd2da6f973fd2b05ec783a0079050c31", "0a553a91f2f712a3070980ce1b24659d4eecc695d8a6990696918529ee1d76c0", "1f6eb8b186c9a2d81f81e63ea5a93e541d8d015061205fdcf0b2215dd594a2f7", "0c1984daae9718c1b98cec57477f65b2b6eec23c68868e120512eb5946a5e497"), ("18cbcc90fa12a657139ab57ed0998501c7885833aadd8752da55e8eae75f8cdf", "176334cc50950ce04753711eb65bbb1040ab7f2f5fc3627844c277b1f492dbdb", "2e6a8087784f224cfb24f286ea7589fb6d4cce4e317960f29b1a482798f548d0", "01ebde6dc6e271ef04213798d7b54164bc1f918296a7fbfe0485c25d37a2df9a"), ("2ed2ec546d1c2c6ba045b25ca476bcd5474ec8b0f87cfb632e32947303ab72a8", "1fd80fa01a32e2a7f05e80dab321e1865df597d3296223d99d9134c8d87f1127", "1d1cf3dc28c7e2f5179c2835e732e378c3037143717a1d841b7bf270ecc7540f", "169893b4146a0a9d67ed809d21f18eec8683a59004812fc54cd8fb03b2ca2d1a"), ("2e7b1bd9af5dca531e41ae8b1aadc2124c7dc196aa451ab958ca4b181ad80bd7", "1afbf3f9647139f3047dd5ae9875a14e9eac728384652d3140d1a81efd4cbef6", "013d25f5242dfcdd70ceb7e434e533dc5f49646dd4ea0b480880a8165cbea353", "066852aee13e9c2ac16d703920ef4937b4abdcc6be41abdb3d5f1469713ba444"), ("09ddf964a1f95c8dc0508593d8a3943fa02cc4ccf49605fb6e4f864979804dd0", "2ad6fca3841244c3f32601d24851be3e3d2fc2997cede359d925f8a3b8f52d64", "0b0ab356140807e69cd6bd03b9362f2e31e5fd6737a089c7d079117f012ae755", "305dfc2da8875a6ff0fd8062153767c3a72c8da358f3476bf66aa412f8eee6a2"), ("2ba44afd4911e45fe50ba1e31316a44b90569fd96c4bd800638618695535007a", "1969c56ebb48b8fea00e4b7b30b0360a7c91b1a23d2346c9c4f5e07e86c91ecf", "27c5a2d21cf48f2581d69b1a9d59110b79c4f90a05757b8e7c801497f76377b5", "1fd184baca48f61da40b690153679546be42ab1b52cbb85afbc56e977a1d9ae3"), ("26229d0c2ccb5858e6a1f53532dadf1745e6f341ef44c193b0daf1c1a4753715", "1b4f2e8c89ec4cb0580042c1a897503d8fbaae538c51b1c3ac6e341c5fdfef6b", "2c0dc9e9725a18faeb1d462a0a14b967a438788998961ec73d4325fd9e5eb588", "06efaf6bd3c1528745c6cd8ad64aed1ca9df2e0bf9c4c8a193d462ede92013bc"), ("1ee4ccd76398127a0e67e82fec75fefbd0fdc3d7a0c2321d7a40d4a24029b166", "08e7bd8d001bda29b768050e11f6b71cc0fcd5870ec284cbb17b50b0bbc022b6", "186f945afb14099c403fe357b5172a2c312413aa068089b8c89a18b15b46d6e4", "04b7a198acf08729d9a6913daeae2b0f0ec22238c38ef31e58030aea111c86da"), ("1fdd69f75c8a15a5c835081157a748287f6d2b80b00f0f180042f34547fa5861", "2539d37db6a2541b21f82bd68b0d8f3ffeb1dd604b815def48bb5c2ca6a21918", "16b3c74ede238e1fcead96af77d10b8f6951b47173078cda71ec8e0fd0c5ec78", "1ae1084f4144443b5e6a94024286520362fa6113ff08cff45f7e5cbf80a04993"), ("17ec9961f7ff1742c526de45ef308a4b657181610f367a888842cc962a309784", "0452ddc7059783c7377ebf92dd99e0508cbe53e409f54ed1742f3a880b356647", "06f4ed9faa5df44cd760c9c0157211baa5a4fca4d9b04f7da0494d559443335b", "275669bfda4eee4d60994aaff89d941a147eb9cec588eb28045cd6e242b6a727"), ("2e42ff6fd82b53f4d5a93683d8faec7ea117f9cc2002c3c8eea0070aaab5b82f", "23a79b220b7d46f006cb02c113a69dd2ecd1bdc073bff324e538b5fe36300606", "112e5b28a37a542da7fe0da52eb37c6caece02d38265ed982ae0956fb18c9070", "2e4c961bf111006eaa0bce3d328b59afa763ab9f4f0290566bce2b8f9776463d"), ("1f631274046c8ec43ca4d6d66676b6f4a85a4e06876e77f23bd87177e53d1c8f", "1b7289decdc568bd5f9c2bcfd1e33b98af68d55ff60a8143ce87624a8f0f775a", "0414f360de445aa70c966e53df48dd3a2a18d493c91975728e4e44df56a0884d", "1c4f778cbc60ff4af7615e4038a67eb26ebc6da46c3803371ee702582595dd50"), ("1227a129e50c575d6fb29257e530958644058eafed39d63826422771aef82194", "122c3a30b2f9137ab21bfbc46b718f6fc39a2db80e9af2e29b993e3e4ac00fdb", "29f5c2b9f75293d0bf54ef2c2e1fb67f3c0bff4eb895ca8fac2eff5c8d529dbe", "034b771cbae16796e08b3eeb011b83c3329847eeb6305d2298013dfef436296c"), ("1243c80b3ae4daf96d3375e768d7acee698d46b0210c888ddcb929219fde7c39", "0354e586d12042341d60c7a9a16ef6d124e942fff11daf0b7ccb743cb5ff7181", "2582ce8cb3305f0b0204be5cac6c9514158a48f9d6147f9eafda51024dbb207b", "2c95db01562788bbb1f46b076e7ae6e473fa0782c517bdb0fbd47764e75f86f1"), ("05db101b46f45a77bf90323798ce70c6a392947136356552a2a4fc6a530abda8", "01f0f549129be6ba2aa240217f2af04a88f545c23d97d6b976a78a32ef899633", "29de901a0c62e9a13f6f15db6efd3e54998039ea713a0ddd4aa406e7967e2e8a", "0dae249aa3662afedcbf6068f8e993788afdb38b7937d3ece9339138e7d6f65f"), ("2976230a3549ca2e1ad5407f765ffcdb5a38b2f7530443fb03a9d6e1aa19b0aa", "25fbcb948628b0930508b57a8d358b690f4f412d9a08b52df7e42676a3642e36", "01b3b7ef858294491e5dccedbbf91638b029ef0efda9b692b1aa6fc1aec04b97", "0f16a6302a833c40929be080c38d9cccad10d42fb56f54d209e67100122a8762"), ("0fb2cca010cb64a0eb3be293e700af2d020366de396abcb96fe124cfefe30a9f", "2bfe64eb7022bd6ce548856c47349a0d7881a9e823ef135b1239d8d92deb1a88", "215ca3b8bfa091547ba13c33f327fd41b64fcbeacc0a21707738672cd0cea7d2", "2f2c93d899b4872565a1e46b2342776a98e3b9dae2b2579af579cb24efd182e5"), ("06a6533ad73237285293d97325e7011eb6cc2026b9d6402f86c9fb0841adc29e", "0dd518bfef22e6f6452b3c9b3e67fbfbf864eb39936659fb9c6f52620803e7f2", "2e23d1e9c1de0ac507457ed22fb1f4ebc9fbfe41092c45af4f717e6bd48e2a0c", "0b6ed717ee62a721e4dc88cd0ccba2cfd42a7d42accad389ed88fabe4d7d3d94"), ("0b1e78fe70adaae56c5b98344a2a869021b40964a5fffd168caaafea5816dce8", "2db665e8cb6ad73463e38af039a65883c3c1a3b094b57a2860cf8902f865eb7a", "1c5afec03bf8774bce037536c7a85d2adcd31bd323ff081836d2f92eaaf34c1b", "25fa4aa2ee14fe0586d68b13000c1233c745a089a1dc786326f08eef94639917"), ("2b81dff9aefa278c76cb1c4658253cfdb2adb91ea8768655afda719afe123a07", "229c67b7f298350a170a6388da15e7fa780ac05c102d3596e922ac3509be59e9", "1df0447e139c6641097e7cc5088b19e39daa9afbb6ea52078c31be6efa96587a", "1655af8390e492d93860673116ab06a5d09d7c022b568cda4dc479bf368976a9"), ("00ddae75e3512b9cd8e2fc4df034d363a8326b859d7a0a608d6f473ae1f3c2ed", "133c317ef7e2cfb8600271056caf405b32c6a80e0e79297b722bced2e261e66b", "2bdfd31715901d7767ec081d9c315914d3c2976099b1b7ab2b8346e75722cf34", "0fbad4d0d5482c759988b8814e76c399fbdc60b2640406b819e1e1a86f4ffb83"), ("29cc16114e0b68c73baeca1c6830b5a5bbb30405b4f43336583228dd19c8c47c", "27ced8b36e587b3a5baa781e3faaaef05cb7b99908adf279843417d79d5338fd", "0e03cf02dacee01169c4d2fc6c1d18d99333acd480e12a6999eb026b1cb1d3bd", "20613d4746aa9a800a948fa3cac7b9a8262eaefd8db4e5a8aa2b2f3197852e66"), ("25bbdcd6bd80cc04e28abd507d4168ca4e355d9ab29e99fccf0c88bab60bcc86", "1376166a48a4932fc65f478e3c2c05d310c7d1aca6ffaaaceb8ebbe11b100c0b", "040b52da22b4beb9b55e536f39d7a5ad98ab167a7b3f3d1322307013b13b43a2", "2724bee8b32400e866ac7dd11681363cd8423d41ff883753439cdf6472e9c0fb"), ("1e1aa5e7635aa033c6ce57829cd06ea5ad0777bbc1b36cfa45c3f5aa899abe96", "24b9d654795dce559d78c6ff3d78e902d40a307459a4fc0a1ecb830c9e5a6111", "276c95648244f8a9f396561cf0de1a73b8bc54bc3fa39c8ea63ae63c7c90e975", "2d59af0549ecfb4ef58e4869e83a602af92fa47a0c1df37de8ca71e4906ba0fc"), ("2327b47e9cfd1cabd2f9ee4bec07b0d7ba0c8c1d13160e49f1c5206755977a2a", "2229531af40f52c811dd0ba415c297cc0b289c0e559930245dfa685a355ab42f", "2ee6089980c520f9f4de90b964cca4e9ea30d7fa23d21f52254f908577c55fc9", "20d422b6cb411e1c642a3a7154cb34b9a5ce64b386907f523eee2f3a81856928"), ("149c6868e0747c177ec6305470a772a14716c8a4d7d30e1fe7e793630ea6a774", "05fbd625a4d34b3f58316f88793b43899cb36c9d1f2ca5c1a57a95f582062c04", "0823e1398d8b291a4d3499d6bef19db76cddc9ef84114c1c2fe13e30e82f2984", "0eaa841074a1f8c37cc52224b6426d81b093d1fb73c4e60a847e170d5243b641"), ("09c49434c788ca4764a3960f1ed003f99a29c16df5eef349a70ea7bd96099b70", "2dc3b44815076ee118d9c74b1d4e14f6da74ab5cfa0b4d3a93af22eca70e5ec8", "2be62db76c75a342206990290205e689fec708ff9abbdb3605f0fe4cd0e49948", "13a2f2071086f79b30575d5342a521ec50c2c26322c360276844ff450e406b3d"), ("24496e20373d9a9cc0e5a778c04ad7b90ea0c86e20cb383c77e521beb7ef1fd7", "0e4e7dfce58343b9e27b286bb99c5d8138325fc8fb187dc36f8e9f92260dea07", "0a5c57b6d74af34c1792980e84e861f3106f9360701b6a0c33b1f0166df05821", "131f73398edfd1c90b0a0e3f1ca5e070836505281c47f954f33ead5346492e10"), ("246faa4d6da3d96bf4e8cae11f618a129388b05789335e551f534600cf3468cd", "10eb5b11d20f4602138d21cf2a158811deaeb9f7a3965e9b7a7a7dbc34d13eba", "0ac7400c897199ade809ff85c905ce2bedb35399e6078bf7c4b77a3d363ebf9a", "2df2d9ef8c1f699fcbf5d8f7b136ec72dd936b9fe8bebfb8c74f69b648ae2e6c"), ("03182931e640641f9aebbcd365212474b8013f2c4bc7f4d1f5fcf8182dcb3d6e", "0ebbdb2f321c82229feef61e8b5b9554bc013dbec8b508f5376782857535663e", "07631392593a392c22d0f8fcd59dd22b6fd23e5864e51955194eb951414451d7", "285f9cfe2a952fd00c8f4b87ff13b062aba13dfed66a914379df70d932a06ebc"), ("2edc7dfb6aff603b85afc5ea90dfba5bb2fca3a3f257ca4c572ba5216c863efc", "1fde0a886e56388305370870426875ee6796df6910fb5ba1bb8d0fc83dd9ee61", "099ea784547177b8931c04f429ddd06c87604e0c122999b45e5128983e72308d", "27c3924e499e986e3dbd8a5c1584143d497e6f2ef6dac179cb374a5bd364fadf"), ("1920d31e6e4f738e5b965067a10ba2f941aa9af2cfd339a0e2c8b2e2bbca21bc", "14d49c43cd08dd9434dfd10271984be4b71d462513a6e50a134e5257ffe1499a", "2840be9b66e34b2c5046aeeee4017402bca4b87224fce4c506e894907eb38311", "1ba4d7cca35d4935f91a906a1d3dea80b394de28aa50018755ddca1342dbae68"), ("2d03b75f1fe00a67511fd47706af82adcad96e0b23c652e977a6ea352ddde769", "2accff4c0c1c0a24e9fd05beee52d79ebac242d52da479624dbef3df36bcf2d3", "0164b94e022bcdb19e949c1a97c215aedb9a56f2e9aba307c709478afdf51585", "10e5d9ef42923c5f536459a09d8c6737e52a893a9a7c2880222d23d43a6bf1c0"), ("2f59618a375dc3932dd21a8cc62648d91ce8f984e5bfbb189f7973c7a4d7c527", "0e3fc7dad04ba5ea518a0832b14f54ee442619133543a183c65aac60e828ba3a", "1197445bb5ec94a9af0f38b2ea00693fc10634b0895e6ea3de90697de5411fa2", "002fce335a2727afdc5f02f0cce33e935eddbe193e7e87dcf74d8a934e279304"), ("28a5eb055bddc4a4fab8c25d15b5191a922ca86b410688f14a78d387a9ee9583", "234e2dcb8e8d5d51339782e43f3826163b7e6a40c268e4022a80bef57c7dde43", "0a410fa767ea8b5d4abd9cb2934fab1951b05a1fa6874119cb039cab8101ad23", "143deedc64a2695e8a9a74a3044efdf78c9220924ea34447fbc21b6d1bb5d443"), ("0fa2e62c106e061c7f7eaa3d2d846ec3dc0529cd48c45c5f3af4b30ada441971", "0151ccd98c530dc15aa4f73a3689dfc588b31351df707aea1777f48cde6b6133", "07329f7f41cc59311feeb06910e2cd942f39cb828104a11d6a068b2ec253cc0e", "2981f72695185efd4d59ed534976f1f0707fd895b85685bdf636ace078ce70d7"), ("0c4a11b8378e9fb631776da56fba6b7204f8a96b400d0f88172df4b1293e51e4", "0a27c4f2da6310eac45249f1c0a81398cdfed8ac2045925f15302dbdbd0dd5c6", "08a7c605935a8db3184aaab2c4be569e1dd39d72089741d96d75f4420b8a6799", "1ecf188ce452761b3556375ca016ef68b476f628a1ccb9f4d2589de13b88ecdf"), ("0c39619816c58d3728ef2b8d470928b4ebddfa1861ec7586eefda0d8761b34b5", "1e061a3c7a45772e0280894fc1082a7ddeaa2ba6901e767467ee54c7e49852a5", "23c815040e4de8d5186c9816180bd127f45b2280124cf2e17d78356277180876", "01ca85d15e5c8fb70b0d339e47b844964dec8bcd2351c8af5a526e194069fb6f"), ("12f6e257f294bc83193e1f543d39fa1e47e7b28a9aa9fa82f63205968df15684", "0582b7150a17cd9c7a75b68487a269a522d598597f34f25376e192a53e77c20e", "118cc61cbc12b84a36874e224e927dfe51c28f72b94f991cd1e2156e2c4ffc29", "20d65dd3a9d56cbe2ff851b5560ead64661ff9e51bbb123535c6d3e75c63de71"), ("097add68f02fea158c92a3ff6da11a2e3bbc30e83e185091806e5a0cdf42c1ac", "11b3331e28ef79ac92dc74b8be5208ebec1db034aa374f69d50fabbdf79a7dc0", "1a8091d8e16cdf14b33d79abd3d3a46a0bc2ac3aa35b349ba778f68baa140963", "063b183663dd0137a8d97aeae7dd7586894790e68fb2585e9147d132add9ac32"), ("22bb4b217f2e02cd232f6aeb894cf109a2b2ec42d2af663314352db3960ff608", "103259d4b774ff5f829984c572648441b0114708b77b38b82c798b489f5ef003", "2e9f9ab0841bd25483eb16399b380ee7ffc81490daebbb0f4ffd442b574548a1", "117a40903482cf0d72d978c6fdb7919569ff60aaab3ff789aeff9140b0bbc6e3"), ("287002d9bc512efdad49c303e3b71e8f15e2d26b353162bbdea2091635693995", "24cda32560415432bbbb1e14779787144e8c5cf65e18eacb3478039f055991fb", "15125d36be3e2c54114ed5ad85bad8c019d3881aa8e1b8e41020707640a9d23f", "09a5b27e6a5b1dc5e87758cab7e28d5a76a78c3369c6df795f318af02f12d54f"), ("03cffeb95b1c0912d9657aa89e43c07ceeae692f9ca6d4198f479df444f87ece", "0b8dd980ad554714adebad1fd10093178b4a16d36cacfac66207fa16e758e654", "08a02d0b3c3d422d3e4f4a9a49f7dfe1ebd46828dc60cfd0cef43d2c35c50d0e", "05e2bad2f24b298073e8c8a8253462ef03a8da4213efced296fb5f424a7c4066"), ("16ce3b1649576051f5d33eee73ebd564c4199f26d93516d1b039f040308b880b", "070954348a335545eed818f37859c2b61a5b5db6d48b2dc6fa336c81a83c68f5", "22aafa0d1857a6bb91c04ea83e743d1301a25dd319df556728936cb48bd07851", "2c04fcff073ec21cc57d4a95c1210362e4e638be707833cbc022a5355f6757d5"), ("0b99a7dcbaa6fb6bb21c99708dc117980aec518d7f5e7f4489e04db36de763da", "140fa6977f40af19a374a6f7103825f34ddc75f51de44a5d9bcf1cc4468712fd", "2ab20a2a9800afdd68e863db62904fb020dce12c1f965e4e6670bdd626a7561c", "05e13efd04c99f2b1275470184057618fc86e5580ac5ea3bc08394ebf8519a19"), ("24cce0816a84957fc5e95714b6f2cfcf59227f7b20675ceb6de40572af6c6cf2", "144fe087e5d128773b5ac6162aacd3c547a66474ea570703f728c7494d3aac37", "218ae50ff5c28daded6a8f685fb162217b6e8edfd60969817e564d616ac53fdb", "04541a81e0914f75bbb45969e0a5914318cbc7b538a6e7262f521da6c4309bd5"), ("2623eefdf3390133af48ffd8388d460f7be4ed71bb090585d6257c7478df786a", "153b9bce35661ec0e6efce18c1dfced06ecb320a26ea771c9531dd277d6dc5fe", "2d031a240bd6ea0bcffaa1eaea6a9014f20d7d149c47b6a24aeb743c1dc73523", "26aba4d3c12c06536db4f67625419c8a3a412ae0ef927c3ee07d1a7962a7df3a"), ("2233f4cf7d083463a768ae3b0e1d6a897c7a8b495e9d33090e5ec1af0eafaca6", "15761b56c490ab11b21c2c3ba7fddeb1923431f09f52be996e81c147629d4a7a", "08b95da3153e57aa28046c75470f523f6431f7aaf207fa0b9cdefce459f31d74", "2aa68123a18e2baa387a04dbb36b50c972a7cc3e56c16024386a1abe9d98abe1"), ("1e8505f9859a3f2cefd3c8c957b1246b008bab6586ea70b916af3682d03756f2", "04a0a584a581c2b2f6e6a0d105cd40baf1d666e78db6ac1c9d4be0bcc85cc3df", "086053aebcd50eea74c8c91930e02d18dd908112b4504b43fb97e05d45de094c", "064eba389ce037207ad9432a8312ccd5c49e9e023e3d8eaa554b7e9881c91c84"), ("22801f6715068603177a19d08cf82cfffbce4b30d6796c63fa1c162977975d49", "01852f4a197fba8c03cb648611dc74ccf0fe8f1aeb211e932614b19730c50499", "03df85efc4294e60386403688354c671e6b6f39b66b62cbf1edb4f56704022e3", "2f0796a7ad3d9b68b4ea3d41341ac1c804ba70cb1f0156233979ff79d6cf92e4"), ("1c13a3d2b084b32af77fd8c8be38e4d48c29c1f41a6b486059d0dda9f6496797", "00f46703b7eb3dac51249d1cdcf451462141f0535033c030c102c054c81acd74", "0eb125701ee15b946ee7ae04708364a8cefd89b3d339432053612344812a28ba", "07ee5da780b4a82dd29b97208cb4d3c9b6857bfa996300b26f55bcaef468ff61"), ("0cb49ad9923ff2238e44b25a6dba3015530df278c8effef0655078dd9d7f0984", "0a06a2f676cf0f06a0361dcc22526a3d272e1e37bec692a35025b16128deaecc", "245a1f15f1d68aba158e5770a6177e6fe6ce2da12e47f066fdf26f4e1a98edb0", "18640fe15dc757f1884dd4fb6a9d8873df2f523b878740895f048897b6ff737f"), ("0b6acae7c60c9a4d514df21ccbf211309ddb35054bc1b3570ced51f996b33085", "199910f834cfa6e87450bb87c4e05b9988c50f26967ab1544002e1799b176710", "2864f7dba8619824984f20d14d327270f33a61f8f73085058a1869eb230cf9f1", "13834b81e1bca450a0a6be53af3d333b2a41c3e9803a66f6c25d8835cbc40c0e"), ("05c4b89f1bce5d46c521cb033fee975b3cba22ec6e213c7d867e651812fafd4b", "1e2146ef8f5e92e02687da337bf9726e46791cb64f35b59243aa9a92aefd4c48", "09b262c71640f10b2121c59d96b105bf27acf00aa44b7365637c2e797f44abdf", "020d5cea4a32fd6ec92dc5840c6f80caa907cdddaa23dc64acfa88790a95e2cb"), ("21cb0b261ae409a8449cca0cc2c7ca249f76d4ce6bcf15c15f32e0311046fa57", "27dd6d0cbb19c1d4a127f3ab70785833a01a6014d6779f8265cf1a81d0533591", "0b56df2aec2b70593e3bb52f487d73697fc936adf5c1504101f2b61e740cc601", "0fc8b81b3ad016f5068760b977e845049df21888060810e7fcebf3261c62b3a7"), ("1b6d22a090f8ec7da1ce5fdb93acb5784508a6d1b7e239d1a881bf81e667c439", "112cd389974d390656440ff8e02c67ebe82d85dc255a7d5e9f8e23edf60a8858", "193e93a3fa863f907db3c7eba89f5ad7b71a9bab9022459d3850aa576a8517ca", "158732f73fad7752e33ba2667c1093681924f55258723185a3d64312f71378f5"), ("1807f3d4ef7b41478f2266e4e19f2e8c963ce09f7a2c7a493a56a09084aa5729", "1c44f7dfa4be0cde1a1cb8914af6325eab315f72ec77f2ec7768d46f186e3d57", "291b041c336a1f0459966872ad058d3f539d49e22c68a3e770ffdf57ac2c8bb0", "1f6b39ed95930df1f4f7bcf3cd13b7aa1dca1ff4c2fb953e2773d6d956614bbd"), ("047ef50686714c0e758169c0bcb6e48b51b6727f99d762679f3a2d3c7e8bba74", "082345e1f81e1b0a1782e058536160cc5639710bef0776fcee8cfd48082df093", "0d5f772af7f3f3910ab1b3a867ec737104651736ba0965658aa79bb1ff6d78f6", "14040868fa6812e6568af1a012cfb61db784719b8bf7d2d4dd2875d5265d9e88"), ("281a6831f57d15ed63f294a4c4b8ee155c52fb7aa8dc79f7339d4553de9e5999", "170b267a4f064c3031111759aed7fdaa49c96b36d6880b41d094db24f9dc2af3", "00740a20a1461cc693ce7380c33d8eef0003c65c114d30a957689dc36160f136", "171d917ed76cf91b0d8e59c0f30d3792d93eb0b8e6cf181399088b463f48dbdb"), ("1fd68bf018012d78bf357a09f45d18d98f38f23d42e22e9237f233f6eae68dba", "288e204b879165cf6a2b2426fc8c4c17c1c664b0326b20f2624972ab4e552dbb", "2359bc5b8a382f51c1f26bef110d9fcc0a3fff7b885215f31ebd31928ce82efc", "111deaf1a6c16f5ba617fe2b17812f8b2657df71e227bd76051b6fa2dd1bb998"), ("0dcbe889a3723f5dbe7cc73645813f949cb40a071d7184a2486b5312ce7a6cd5", "1969c3200bfaa8a41cdb54963acb3fb86fca3db09ee11b8a69a1e4c589580ff4", "1c370a10c8a98f42f796fed8d2710a8951e872b18471451b5ec3a5b803d3dbf5", "13f2baf1b303d3b6fa5df81d9ea813aeed75b26aeaba71a94bea799cf97e05c4"), ("0699018d4daf6382d5c3dcf7db10587fdfbf5851a875cb3a194a0518cc747a1f", "1f05307aedbe7bc22fe423b4b52f786e934c50f3ba85c9b4eaa53fe700d88b0a", "02ee8af07c8f6a5bec9b3ddca3b4b0538473d41d1b155003461f43dfb26023d0", "21ed1071cf4fcc5f48e3d2004e46aa0994e1e6373e2e91da3b7bbd0332703254"), ("1c8d1f3bb79f33e8ad5da1070c5ccd143b65b7668e53d83fc662e3f4dac1e09f", "2d22d56b36374bf23fd662a107b5384c9f65937667218a1244a4aa51baa86f97", "0230f76cbe894619367480f5f0a410a29916ad81a3caaf5f3af9a74701d218f1", "1135c65e9255dc81125c2c8a8b4e46d40138ed2ea92253df449e6b0bbd2337b6"), ("1f1519ef2fdcbd85215b6288a4faaced7dcc7d784f4b7546ae6bc524b7e5f256", "111869e5ae444a8b95d0d6b9f5781be83181cc23e0df8a9a33421c9ef1f5bace", "14fab239548014a913aa5d5b937482a84e9b71195a454d44e47f462dc1caf743", "303b92a423f70a846b2bd499b8c928d9d5fe5032729e97c843d960df6f2ebffb"), ("2b11c5c27fb82566113ffd3707988ccabd43e372c3aaeb96421783e3f8245027", "1175871a9f2680a97af5d3168f5a50e5348cf9a3dcfbe3ea618238982986dee7", "163e813792c68ba2657a4f684125c4de1b98c251d8e3b9dd9e90cccfdc786cd5", "099356d64f2bf03eea846e55c6e9d0c2c71c79fe79eda93f56fcfd56091495f4"), ("16b2d625ec46b14d10dedb0d3fc3da75c54c9d14978bc96b41e6ba084a27175c", "1d6e0781bc5f4d2901ba8da4193e1a616031add686fbe319ebca26f8bbeaefbb", "022aa67ea44d76fa21547e7166da4038b0dd0b5580b8a9bdace4dfb3e4cc8746", "10cea46961bbff6ce74f7c9690785b3c49b2df7b8c5aa3bd8d74f7fc9796dbc2"), ("1ea1dc5b9e357913f2b0cfe2cc4658357adc987607667701f66ab0bd50d04ff6", "2d00c007e3e0e4ee0df24d4865e814f67e1e7c7e2d127fb825eb39deed015b94", "24c80bb7b2a55a2884940ad80cfe08cefe3a8e52e5dc4f7f9ed2cc5c4f7fc386", "00208fe4c6243ab7fd3863921f901f563b48463e377ad850de2428339be509f6"), ("0a64611795db1a963358a1dba5a80d49557f832e913030d2f990508653955148", "01a690b7c0086f1524edd1ad7779060129d69cfd743e503a694e3c9a90bc2d70", "113a400827ca37ae0651a845d96862b9b1fcd6a96d0045bcad852139e0c8bb0a", "1d7177745df2aace3011d1a9e2c1dd40070993187aff4e32dd6d75079687182c"), ("0c98e9b6052175d6873b68df2fd309b3c686b97412a713320bfb883c1e31ebe5", "2acd647fa78e21c56fc6eb1c99085afbf583d7ce1e8ba5f5d9b01800f4906377", "088ccb9837f57bb094d6db552212b25de9782f876515b3dbe030619ae64d36bb", "0902977531253c58cf5b55d0f10275b185b19d9aa4e88e284c34a5e3fd7b69a1"), ("0e0467b4e38bd63ffb077ea7a630b9b7424485532298b614d86d9401831ac724", "2442f5598d47543870ff23acc90a0743c9a6f74f4e5d97eff6dc437d7de6ee9d", "164640f507ee38e7842abfaae297164da99c1c2bfe22af7475f9a0429f87c392", "042e8b260c0d54781c1defec7823802b560db0f214b44bc2f7f17de5aaac8521"), ("141494ee5c1989ea3464dfd381f7081b6e3a61754d916b56acb2861b9c7f1306", "1e4771e3019d9cabae1b7dff80eee6b738269b1587220ed469f4f7f885c1a398", "0fdeae8a00a05fe7b3fa36283db1a91d44c0e72d5eeb7c61748a60aac940a4ff", "2bce35e00ab253a708fa532899feaef553c6a6a2adb8d9b1172e8459154491b7"), ("07d2de016847158ab432e3016752878b9e9e8a4111856bdb39021f5b1d847ad5", "20ea8860e674fc709c91df82e1da69c35f90a8c104a1da23d9279e0fe9beb346", "060bd8d71bc7995564b1de1f76a5971c9f7db35813b62cf2d50d116e5ef059a9", "1d4da7330fbc51c15501993e6392c24c48d39c298395042a739792b400cd5811"), ("09ed03d0f0f8fea8021e0c6220ae86b6ad3e571cfd0eccb515da73eb861e6264", "0d439c12f8c79975951ed270dd5f07971e7c3c5f8e552064d58765032b79cef2", "1cc4c40b01a80cea2744b2fddfdc86b42e6ddce08d1c6fffa0b37c4bd01d416e", "037d8452978300b23dd085211494387853611b7dcef172eb3c0fee56f61f4a32"), ("0df476932e866453e726c85f0a1c97f1058f54b1ea6cd58e6b6996f021ccda97", "1a98de428b31d67349be58ab646240658d3ecd2ab7050c9a0138c0f0edd94f30", "2e2e23b90371551d995bce6e09ccceec1bc44800f8b9e1792a2f4cf37e1d7382", "069e8f0fefa0d567cc76eb6dd333a387cba159fe6144e94c2d5391b784e88454"), ("06ed619e18225f3e9fba3be1da5d69a6cca6bda19795eea58f10ced72d751245", "2e3a9797182b47d4cfbafd624ed7b25416ff941f69f0466a802e53b62a569b06", "0b64cd01d8310f756a87e4408d466105156fa5da5dfb7275227f36bb3d51bf10", "11e67bac38d310dca5dd310986fc71f2d0703cccc97cc3f35021cad18a857f53"), ("2ffeb554f7ca2fc36097acfa4467e226fa78d98f487f9bf1a1eceae04d91ddf7", "002fe767d41ffaa3b03f461ffcc01e6d91ae2f77e25943002a4dfdcd3a3a9624", "153c727f00c7d1f28d80ed7eded5b53b1f7b59e410c2cbd30bc6fbb665d65f0c", "1b4433e33b8b0e69a739f03a18331e57008d0b4bc34006166254f7b854c62e62"), ("1837a26fd860725ddc08b3756ebe28bf5c99fac96be3a7f3a112bf3f5f25763a", "1a87d140e6c27ba86a7172a7efbfb700cc499b7e1067123fe7fcfc63b2ca4fbe", "0a414546bd6b69e67296ff435797ba26536ebad8455db5c6cd49bea3381b0fc4", "2d47da41a469bc80383cf55bebde722cded1bff702a48ba76953c249d6274ab0"), ("1f00e3980ce9182c7b3659a81d4e3f6501f27e009d67732437bdaa245b2db56c", "17b3924e3a54fb8264179cfb7bb7204c721679d8a00f1d24d6eb272c694166b1", "2a67a76528351ded9da1129dd7284f026a06c0e9e3ce525de1dd7430d48c5fc5", "27b12cff503e03fc68e8931fd8a5877a51e91c441ba8de7e430e9caa8a415659"), ("189a53fbc3cec8135d0f4f0aedbbbf9ed85c84e40461362a507dec8c646ed314", "044c9f74d97b80a3cbce0f6b6ae6520ccdf566ed70a1360b1fc13e24f1800905", "01e94dc43968e73ea9fe7adcd98831ca0714635a9be95f2532f3df1bc68e414b", "010dd9af4154ac1c226505429b17f159e67c1ce700252065f32ec3849e3c99e3"), ("19ec22f93a5c700991eb151c234e60c46d4ee8be2e3505ae99aeacfd3dcdd3b9", "12905ccd0e66f5e76acded5bfefb5142b7ef995639c3ead7b61d632cb482ff4a", "104b48e4e9818d7b6d1b9b84594bce62f16cdd1ae8b03e46824535e0407e507f", "0a258d1d933594f9f1812e6d8a808a3bf0a8e8f225f831f657ea5345fafda6c8"), ("114e5e92fcb182604e5750ae7d7d3b0b767ad1a039672e71105c891a78af2cd6", "2f751665770965c97f59af653cca4fc16ce27cef867811ea1029f827864c9a2c", "07b8178aeb0565369653552ba51732a393c61dc608a52b7ced0eb45d1b854d11", "06a1fbc2eb4837c642b191fa8d1dcd2958211434334b572bb33da43f64eea180"), ("074160ac8c1a735f49dde3cda0e1c3f653b1599cb729d692894070e0a16e0326", "270e65a21261918ded4fe32e3706131ba241245db5d5d837d0f74fb33856a267", "29b48024288b01b3c4bf9b3aa1cec8c9552273fa1eb4b6023c59bd171044429a", "2b2c0e05c3309d32add9a7c2fa4a285108ce5c0327dbea1556e226af22efc09e"), ("1535d2c2a051a08e46a3dcd4475354a95405beb97f786dcb951d9a29937208dc", "251b57fffcda329047c3cba63969dede1378e536d95c4d8e17526dbc03a9dc55", "1febff78d0c71279dd90dd205c77d9c4956abb71813d816ce4b044b4d314a6ba", "14f1b7ba563e1a8d8404d8d62698577a9dd1f7577d0fbcca8881140aafc2ee53"), ("28993bd4ff0a3e50d0a430120f186b523028dc4ed5b992045b78f17f0c48c3b1", "0c856cdacbf701c1aac81d6040c7d76e7baa8626d219b903106a727cf9e280d4", "24655871cf0c505a493153fee344d9c014b2f36815c811de64b60dde4d930c7f", "17a9ecee3a5286bcd2fdb118bebbbfdc6a3eebf994d74333743672825e9448c1"), ("0496cfd94784389562ba0b258df8492b5edaecfb4419cf189438c9b3c2bcad75", "23d3ebaf42796840e754a24720dad6ac0d4eea81de36cb2f204712ceed094425", "18d15e1c9e2eaa3868c87f3cdc9110d2c2ce8c96c035c3d0011290222ea0cbfa", "1f1a41ca13d62bb2b5888bebfb314ac8382149dabbd51373e477f74f58159a95"), ("202a2d700d2338576fd5809c5518beaa73a16ca06fdf347738e1e1dacfe2c1c8", "0c888e162f4485cee57a08ca083fe93fa79f6b3112017a67f0a6fe0c00eccd48", "1a47dfbb63c171a0cd7d813240ee49d0c783f24c9bf31fc0db6ac1fe7762afbc", "0e033298d7d61c3662eaff5d8cb868aac23d1cd10f8375f226e105b728b9a80e"), ("12f7bc58a96ab631ff1a58e2b5201c0de1d37b52b0079d0f2b199ba6233c67d4", "00b1f7c2d2844409e3d08af04c3b871bece40d0b9fea160ffa093580c8bef12d", "2b107081aef0b3998cfc30ca25ba6a30bfa40025b8aca9514e975b7c487fd45a", "298d9a1d7d7b51587dacc82f076e6d4644dba6b354612b4f70e4b4da0200395d"), ("2795083796cf62e0e36ffa4452b9f14ad2e0cd3e646f4b5ef80111b501fdb3e5", "0ac23e67cf4bcd9bf61fdb23e977ad1618a314a5dc6d16360a53345a0e75b8a0", "26a8b1535d34ababb806d680989ecb0861f4bc963ef1776620164fd07f4f087b", "0c627baca0cd10114ed0aac125af5fe94b21120e0c3c4ca268d087d0454da7da"), ("20896555e9632564895e55ece9512e60d3f9f88daaf05498b339a045d1cfb474", "0a679c833a1090c51c2103f79d157ac84befa3cc0f73bebcf54c64ae09e2b9f3", "2a5786fd48b009be5fc2e699d22e3414f31f2e3fff3bfc39ae3023715c4e6958", "2a3f8d5c229a34805d17b88a273415df0cd527c43f03a45ab12bea4788c048a5"), ("109e44bb1a0603bd46fd4eefbeb450f5d100528aa1304b43f19904189d4eff77", "10890d2158ee7cad09ab4a37d263531b899f68c4294ad9246ab87f017fede142", "0c07a1d1665711fa51cb2d59ab5429b1fade0b0e1c26fe93f3f0233fede8dda5", "092516c93c585d85d9f58d66e1dbbd003d032d7999c1b350cf719af012c32baf"), ("16478fd1b980a55fc88185d4ee25072bffc54a5eb7bbe73f49099477aacdb98e", "124f13347fa69b62834e5eab6bd63790f22cdac80186b381c1bded27832877ed", "2e0424c115842507d83564fb0ca5bdd59617368f75251b0ba2677d474c2f6bee", "238a77236fe12783f422e58db92ffad7f60d22c1b18b4d3b5551e6f89e6e7384"), ("14ffa479f7bb96ededcafd5721ef762276ac7e4dc31f3718399afc37a8e5255d", "0cf736d1d5de3f7622d7b566df168b31426d913e5657c745e7f6994233e019fa", "16c96974d57828c836539dc5bc96dec0fb68694e630db6988f825aeed96c4635", "15a86f849ed0954aef38188e9aeddaf4404d52dfc8f1479fa7895e1e2dc66f90"), ("2f46eb714330faf16840907b2497fe8e549131176f1bb7c813f26aae78f094ab", "0217dd806ee8c5687b35c87eb15eb51eb4fb8a2cb0dacb9ba5c3764610ff8b58", "281545d8fa0d5bb95474d5beef9835ac223023225d30e9ca86ee740dd417a1d1", "03b7c4505d737a00303a51b4f3c8227c61a31710758f2c80195d7dcd4563c758"), ("14ac9e0acbd365654b3d3a31c7d3258b452b1054ec93a4bd65d7918adf8baf16", "1a491a3d046ed9ba3c1ea1150e4599e1ba3e8b09c14263a9f165206d65a9715e", "187f9015aee851ba19e93b1d37c1e554d66a0b5f5d3bfc0017851d7dbf94dd02", "024943d381cd0258b92296a26d80d472c58a2e21e050f6954736d97f52422a5f"), ("0202673faebc57581541bbd781b2b84a968355d566ead9afe18cab6cbd57cc31", "1ee18c7dc1c18316888fe580ebf4408a816095320d3ac013dafbdc1de97e71b6", "23dca74e278e008be02cc241a2c53265a5a523c077598140edd6ad43d17cd95a", "29d87190683625f7ee992f297d1e627ffa5a9829a20f0e20d1246da162ee8698"), ("195450999d271d1365bb90522fe77bd35d8e362f26d2d308cda36ea178ef66e4", "2cd6276121c251af3b94b47ddd78ac925bd14a9bae20be3b0a58a159d9cf35b1", "15a6b07725c1fa742fa48adda48140413529866af10e7710f7d7a60463fcf0a7", "25f4587d841dcde5e9d9a095756290b28c8a4b027a9ce46ca56d9ed2511d867e"), ("1e9fec0f573a8c00134b916efcc5079adacd03e6567b32a9bf2c8e1d8c4c2e3e", "27e13dee7337c8828f9da85722ba75cc812dc6aefcc2b8ce81e47cb74d1ba8cb", "16601d883b7a561ba342517851bfe7852cc8b93d6bcd81e216c10615206fd796", "0c466d5eaac6e5bfa487ff94a5b3b04895332dfec245219bc89ee18fb4ec2833"), ("139deaad595108ae6abc05c7007a87d56481e783849427c382b6e6d0fa9c1e20", "2c2626e25387eff33828a7d03556732f39bfdb6c9fee2fdd8806f5cebbeeaedf", "2ddd197d8f261aceb00e5e1fac5700d95b1a00f8a8af18772266136d3cf57c8f", "236cfdde5af0635b6115c02611d6ea2a1bb13c3dc58b253eca6aa6d6043237cd"), ("1537f649be051a661f89f72737d490df10cff3446643a7ab157e1df87fef292c", "1b3aa738f549179fd7798aef57d1722dde0b17b8613c13bdf2833344fd66a27c", "2227cea82f0bc133ce99511ccc018f09845226d0a72ec4d0a51fd7a956480b4b", "18d0d2b79e58e42e50a29123f39901f18eb8e7def8eea834e9b8de0ebb965bfe"), ("057a80bad770ce4760e98f9f9680542cda8b3e2e09f0ea078a6c3e1b3f7093ad", "0a2d623029d90352bf0b24736d3211355ebc9d377d378a16d3ad6368d79f5b82", "0e9db7558dc3fa7cbfc8ba4e5da3735bf2c03a3d623e3f336bbfdfbf8169c852", "132cacde02bed8c67dfb5129dcd059a15944e92c6577b7d41cb35a033adf279a"), ("24241b155c0fc747ab4cd9ab9fd3d32746ae9aa25241d21be528bad44410aebc", "22bd27dc0b4d959a61711263f4d5ec9c591693872b30598dd2ce69f552f953b0", "1809ddeb8b56de5b2ea87a70e1275eafc4284614bf9e6596c3a0caff14626e1d", "2e0f8e60a5d987bc3c79fbe237414eb8fcb05b2408a794f04a6412f1668ab2c7"), ("1269f16b821b9e337d2fd3091c198066aef91b2ab6c74f21ba9a920da61b4e26", "10fc55af72e9e8ae1798c6339e230b661eb630ce98028534147e41bc0926f3c5", "2afc6ba82862dadeb2b748bc959d378761a5a0240f6ee689f2eb0f61e3748fe4", "02e75160e039929de8c4ac90f24da962d8096223d30395c3c58b012c70d901a5"), ("23958be21c9d07c9796755a087ca875e08bf88b8ddf080910324849521d4db49", "1022fd2b1e0c3b0e29e72228dd47a1157ec585f7deb347cf897d027546658af6", "10c93bc978b9c1eabca52db38af369f82c0cc1ff54f23d66121a8b0ae941e8ec", "117e5a948a656fc0881fbb1e474239f6c75fca2aed41bcbb6fc292cfcfc980c9"), ("1d733999878e417ec3b18916b4c14210c743a224d225dab3e54b4a3c56e224b7", "08f21437fcfc17ca707bc212df52cab9e1464c40d1b5aaf80e3cdb7af2ca5580", "0490b3ba8d83891d8676795ac8236b0a094d15345a1b308549193c730cc15855", "2283015dd4082ba6324c4b3aaac1f42f6a3a7c47cc80ada6c68d67a3f3f50bff"), ("2760482ce4b652568fa97ea55e535eaedce6f9443316c71c3e708dcea9d52ab6", "001bff378b13d290ba59d46e3b61072ace71fe61a9d7cca9c42bf10f6125fd04", "215a6c19db16b27551c88f7272a81838c9ef3f2575a6ae8b120795b5458552b1", "1495ded9c1d4e796692f861a277423bc9bef6ff3feb2983d259d619cb67f9ba9"), ("02fd1bd84195470597af5b756025fb591b7f8263642ec1212c5a027ce0e8e8d2", "207cbb5e387ef72ff80cd3ad1789607216e419b0fedf5ce26fce5a037c58c591", "27d9280cf8837530b0b787dbba3e883237ac558f0222d61829f4454bdfd83037", "1de2b67646b75e0be930ea22214a47ad59ce1782c428b89f4323bc6bdd24889b"), ("2ccfcc70f77c0e3c4fce24aa16421cd612e7aaae4e9f922db1e093a1d7527680", "26921e8562a8416f445be25b9ca8e9f5caaf996c9d1d2c5b3a35f96c60db23a3", "1af0cf3ed781837573d396bc019ae5a1481b33557d28367295f39d9899ae3d7c", "29081622bc6043ac01474331295e6e7351989105b60cbf8855932cc997a54ca4"), ("2475eb747fa4a8f728062bd33e2251dd869702114228bf371e7f76f6f4204c29", "202f80be2300188aa88f9ed02f278ee85ea1265df8b290ffdc9318f29ce7385c", "1b96cfa4f81ca2b691470502047746aab9db528334bb0b079df077fc68bdf1b3", "0097cbf512cae995decc6985a9e605d3f04a8c0fa7388dbaea7ef8e3a102bd9d"), ("162d4b03d5904a2a8dec2cce9c133001a101de75091c05274f5ca86c09ede74d", "081d6447fab40523ae08064e58db0d9da757e0bd387492e6785d3a40024c215c", "2317eda74ea75fcabfc804e987677f5a3ea75341203d4c2221a477f4a6240cee", "259e31555f31f748ba40007a2f74a371640079d4ad184bf2753ef0b6236d60f7"), ("2614cb01fe869c3040eac31656ad6b17069b29e0a7f0063fad33d88760cc1e6e", "0e8236b0ae69951a8d530437d918d22dd270ad79a46c997ae78c3d1782c564da", "19a23b53b7c85d77c6e4f87c10c70b1f1a5f6a861c215198f3cd32f19130e3c9", "1d4c9016455a088dfc8bff87156c8ca672e4f3bc9a0f4d7da1d723d4c4c903cb"), ("1ba9a4fd397011e2e519db8204a5ed0a21a48bb6e620ec77ebc913c6fdd047e5", "08d484d3b193a8d3d12794bdc43822ffcfed4fa6a607a7c8d6301c51ad5dfc17", "0b1e9ef2b0d270d513224c12d54d0fa0067967ec23b9bcbf49ee6b158a5da91f", "1d0450b42ced6ba352939da095cf69017339e00756c7c2b581f6e3b3c0850b5e"), ("166e9a2db241d6f8202e9d37e503f22626384ae00057b48649571bc4d4130db6", "11818602ef6295216bcf661d2e0c3eac573df705f2ec8c21a6be6c4980b329a5", "2c4309ac9ee02a5e43842140f748dfad9b9db5fe6d8d03098076d8bec3418b03", "0e7a997dc7fbd02fe0ae3fa411aa387fd7240ec0653c1e71d1517b2cb13cfb96"), ("28e79117b9f013e0a643fb3023281e0499c99cd015ebc7a0a75c52f9cb336403", "2461a2a5dc8a00834937afa59c5fae8bf1cf757aaa8e62bfca6b6496fdb9680a", "0288e19eba8b6b90464e1bae31203fee067cfed6b332c797334cf89fdb022f29", "07b6681e3518ef1af846579c16281e20db359d1e7eaab7dab52587bdbbd26361"), ("1b94ce190e8ffa097c2d765471a46209955c6d3ca3e6cdac2b445020824b1f00", "29ecce52f4832aa440999b5a496ebeddd8b5a238aab6b4fd56b63aba8e9368fc", "20d538fbc556d8cf214f1337b797fecb4f36dd6ea0efae6b117ffcc9b1fa2c7a", "11a2adfcaba7f5051b1e955c2a04480ce354557633cd7b3f4f932ba94c1f5f78"), ("0bf4d856b2eade3b9f643fde76defa337ccb39956a787b070d931087e62e14c7", "02fc62a24da0c67e19e097c07cb81fbabbf8e3f3270ae46dddfc0d544af0c2a8", "1cad6ac98125cb7d8d6d0e54f2c1765985aa0f364e023920a33c9db1a2dad3e7", "04b46e3756ab3f7b311dbe2276d986dcc03be85820262a2c9c5058ec5878d416"), ("22d57e957c772bb002ca93a3a8c79d8708f60f61d551041c8fe756dc9126d165", "1e3c0974298ad269daf70e05dc4955fbda83c28e19f61dba814baccf3f40f2f9", "257caf352c143534cd626599b24ae76fcbc902e39bbe9e2922411dccb50e5e07", "2b5b5b4e42468818edb8c623a001274840b3ad81d692e07a3b102a33b6a97efc"), ("0aa194df30e97de4d631468dac57a0d17d4a0ad5a30e8df68d89d71983e4f5df", "01cb8a8c76f7cd0b9b57c18b7d0fc79a22fbe6094ae1cae5b49676e33ce63a4f", "166a415491dc976f685c6a1560a9b05c99475b3ccad411e9d5f254cf1ef0ca45", "0af1635b8035d2c7d0c765db135051aaf7b176e2d98c5fb8a40d641f718d022c"), ("0961aaabfeefd4d953953bebafb44a293c3a1e8f7cd55b6f87fcd3dd22ee4fbf", "2f730d08a3b7c9997fb436ba60350700f7e8748b06b503d5e7b094ce0636e8a2", "247722f8d74e1b8a1148de79a2711da1fd9cf07fda8f10662097037bb6b7b524", "0e5bd643d9b062979c739b2236806f2613a2e4c6ed7e160b705c60952f92a730"), ("2c399593aa02d230637dbcb21f117bd2f72314386643f46b46985f53938e7eb0", "27ea662dcb677f23a23082c8f8a1f2da2562d151aa97c00a6b607f06307787d7", "135926c1570b170e09696daf0bf7506292438271048e481d47faaea1fa852b5e", "000ab11039ea4ab8c74bda976bb07215601c061db6e1c1cf231e9f5287b86b25"), ("13702e577213bef7892d34c406c9cbcf27814d4e0abfcc5672b5781f661e77ba", "232d9664a766d0e847070b819ca8a4f6c71b5b15728b52c57f75629aab73b356", "281b4954d771c46ba90445d48fec3e1af8417b74c3edf62b8ff8de7702cc1389", "0026602db9247a35cb995b7711c1d5b908049fadaa0ab6a4253762c781a569c4"), ("090de538f35a224cc82b11d6c38e453023d8a7423f4d059ca974d19b0c14a203", "1a9c376b6b0854eb8d14a3d9d108bfdfe85ab3eeb21a1744d607ee782899ec22", "17e6026fb9526d5aee3b71b3f429eb26c5bd13a13db81e0d85ad9cf26c106251", "2fd44c381630950fc82330abec540de099ffb9ab7822d3e1de0f7cb8e9e6c3b5"), ("218f3f4c3b1b156bce679d67d389e53c87777418fbcf05144c48011ff5dcc6e9", "2c85de77d7373438486424d281ddb1b0a9cec32a4ce702ecc76a1ca3b0f19c74", "209135bded5911b9ccd0df347b9626c56431ddc3735c7c0b50c55d70b3b3aa16", "06c287a163472b15daf937e07acf5be615bd9dc9f1d87610ab6c0a2bb1c175da"), ("1f8ecb3a9663b150ed854f026edc7ac3b717e472c9bb6f33137708869f451c19", "1006ce1a2ff81a814cb3afa44e8adc01f8067491b47b3953bab23a52ab9903f7", "1be09e785472d3cc155502a7e33d431ec81619c153bb5456df59a4aadf252c14", "0d877cef10fcb4cd4c10958a37a3f97ef1430e7020815fa5e32d255d595380cf"), ("2c9b6197a02d71224d9224ee87affa37963eb6fcfd13cd59e2245fce0a2f5a2c", "1bf3b8e0ec4c0fc3661706379671b0a9fbb3faa20c31c99f38d76df153bd6342", "2abd17c4fc707dde0fc4e24e13bae6a6c8c7dcfd95e46704b6079e842d87a804", "01b0e8285d7ff3751e7aa53cae02654a7e4cca43fb1bcb74af47218ac4b4ac8d"), ("029d441992b80a6c16eb251054769f69d06997b0f5474e142a26eacd247ae993", "1ba8018b0d67d4d9b9d5d6088f353ca773531303e4bf9b332af7f85337fbf262", "223dc24d3eb4b9306160c2eba91bf472ab9463d946c001a714802c8bbd39bc54", "1dac6d6341165651a775ae06bee5dbc075a59c9af843a2bb0e9ff306f877d045"), ("1fdb508011954b92868999a68450d444e3442b55aee90f9d76401b77dd89a71f", "2235879a78648d2d72223afe60c6cb4da330c51a6e58f1bc0f65a22a0a343fbb", "2b564233875514104f4cd0b9290001e918e968a520790c0d4bb137f166f6522a", "28caab61d0d639552905d639a9b275a31d9f5fe3e9ea7a8280f41995729f914d"), ("04a753631aca9f88d306dc637571b4f004e7ac1617a95f3104e1f9e7f1e53449", "231464e2bc887134c8c1281a52f126b9d1fc3ee4386ec59a78f91ba3598fa786", "04c521b26f5ecce6ec585a7e03fdaf6217d0f5be83fede790bf9a30db3a6c52a", "0a5a2790eea19ee18e09e58d3f6f4a429becbf160343cfeaf3424135ee00d2cc"), ("25f343825b77b7a0159b5fb8172fb5c4e676edf38334d3e4b29ad172c836a8a6", "114c4e707fd05c79f68e64b4a6adf49e45694f1e31cc460b9546cfa62b22b133", "126e2b65ff14b7676b80118f33962cfd3a79a3a5ae55347e0077161dee9cde23", "2706a93e4f6d77e5950c1e8d5f044868fcba6e1b8cb37a31c701d0dd9b21a647"), ("0be64ee3ed17db43f6c8f560f75c54ddc02a6f3710ae2287ec835b9cebf9560c", "2c4f176a165b23ed0ca82fc55d86f0a42e79e812be5ea31293d1fd4e2a709d03", "14847f1c62f33c1c929d600554c31aa74d7681487406d4f94a0f9b70c8d8f9bb", "300119d80df72bd9ea5c3c236db5e47142c44f6f3980e4cbf5fbd16345d15d34"), ("2ef0d287ad7642ab03910bd56804ff8c536e736583f1bdd90fcff4d105f02c30", "159f61b6598faf94fcd793ae9fcf76eb82927ad8d76612ad709b0fdf56a951aa", "089106143fdd8f638c8616d9cbeec6f6cfeda5e455cea537593412d18a91a27f", "216919707860faf30ec5f778a8f1ae5c482e8c547d173fa28051a1e48cc9be9a"), ("258e1c60960c0d9e5a5e891d5ae669e64450e3ffff1665b3ba708b758f7a2338", "23db77ead4f112b021033364fc7481bb8bbdbe4634c554432a8146c57a6e935f", "0502d7c49a99c99bffcee64b2204bd35063dacf6fd6b4b1c612b62caeea6658c", "0f745e8986f9173c6a7f4fac7bb279e74847ff77e28ced5bbacfa5ecfe359a5e"), ("2f76ca1d39fc4a3b8b8a0e2bdcd8939bda70f8d2bac9db4cea6cee6abd1030c7", "0a0daa9f5be1680abc7f2edee9b71c3bdd8858b817e01a277c3a42c72207c095", "1070a8cf5b23d32acd44216768e59850d473bb454bd32185ca9dffbf6a97ed69", "09538d46c5014a7b8c45879b048774afeedebd009c9ce0ab256bf176d5df597e"), ("22b1be8bfd92d3334f63f673789b3cbec880261e4ca65264afdd7e7812e39505", "1ea3941131ef28cce77f41187f0a7580119f56ffe126275246fd6de473e95d9d", "06ae3f7592b77dc031d0c1a3fa0fe950fa813b693101ef79a85aed6847f68625", "14eacbd4dc5c1439edfc125bcd66b7da7d9b49be804d69e12532e47655702bac"), ("1a7061d8b457440660614896c54330ac28077649b574a54f688b44fed5703ad1", "0ca0565e9033d18ae73a1dad88ca2afa41daec5cd15ab62e7cc18048ccda689e", "08fdd1467caeada38bc2019a79947c9042bdc2ae9108f3d360d184fd6e7c9ebf", "1d5e6aded8ce8e50e7e6386fc7516f177e6b1943f0cff004de382165abcc71be"), ("0719f10a63a10696b9a525c5cf86ccf84ec633b46ba892b235add2ac2cd20043", "00cbf7d6c1b0e79242032912f74419a3caaba39fc852ef5c703fd29dd836b656", "16dcbb19ca753c20704d05b640f7eb17057c5a3cfd15e0c4ca7fa810ee9ce337", "094b297ffb89ae70ea664f624a4b3ef8e12f70acdbd9b5cdaa15ac437e139db8"), ("14ad949d3b061cdadb2f69a298db8645b842b4e33202e3d4609ff2bf330a6db5", "2ee0dba4a9568ebb1b22bfdabcd17372a3a441d05eb0f8aaa73edfc429f23d01", "134d2843bcc18b56facecfb5dfcbce30bb00787ba01d3a5e2e804cc6f6a12b62", "07d3a05b0adc92bc3cf0a2f00425694ed921f1292fda6343ea1b39842929239a"), ("0f726aa5ff8e172f0b42427b121af79d8b25621054045fe066a9f02888a948d0", "271adb7fa24728b135c7d6b2e89eebe8d11569b26a1a06c8b511ab49b9987469", "1f0f9c5f204f448b488b66f5aef71c078a28eec9c9fee8168b2d1623f4cb325f", "27b1f3f1313e48c70d2147eff8017b59ff006da344151d82807157c628a52e8e"), ("0efb489361ef892234047965944a5356f05a591f5b4967f26a692b6d13c9e5bc", "20bd7d0a7d7b536f7ff6d15b28be990e2157b736ec66b71ff28407042fc430b3", "01ff2e9aef08ef27ca32541b0be95ea846d2df20c82a8ff2016e8bd111ff81db", "0a567fd3acc593ddb85767f5695bf6aa709b1674fee50b0d7a4088f61ae60b78"), ("1136ce55bb756619ed320c70bc622b83dadec23950d89b2f59424ac99931de99", "13f67acb12d2bdf01426de54456d1146a49fbfaa1927dbe6d2ba0b5d150ac485", "23c1e5d9ddc662f7bfff4fbd70c7ca8d1aaa33c79c70b6c24ad137a741654e08", "164486b1d3ac370b033bb1410f966539715028d4dcca22b6b39380fb99f55508"), ("263b3b46229593187555809a0492eff0c4dfdda4afc4beb9e2975b8ea4faf6b4", "1609f9493928f2176602a940df89cee4e4b0c4c305e55bff540fe282e074f0e8", "202c9a11f915684e0e9892daf59f84bae019db77a290f7c0cc13dc18130849bf", "1b021ee0cd646e27dad82732c1fae76fc08d845044a2c9db4ec5cd52fedf1637"), ("23f5218789cf73940008801b837b24942a664b740a2c7954ce1273fa81b24f91", "23df26f9c03030dfe6d7c876765120adb1e7d1029112839d08d0b9c5f21a07a2", "2be1524ea31033f8bc6cfd45a3b6d7846cd68249b89bf12a09f5d75a1a9dd41f", "2411d948917bd32252a8c96c1dd97f1cebed02eb6ce841f988d947f2207841af"), ("002c3679f317889897a7d9a5f1ef7ae75dd48468ffdffad1031e6abfe30eab6a", "290691f900b8b16e95c4080759135d87201239ee25b816bc1781c15b491e306b", "11b5574054d515390666cd69709f45eb3b1479d8b74bf8994ecdd12bfd8a76d8", "23c916ff55e202f4b7e6f95775648862ba3d09ea7aaa6b295902ab2c303defbb"), ("0014dcab92e4ab41fec9aba9151a7965c1ebca4ddb6526ddaa275a24c9d8e94f", "095103030d317af4fc4262fe4298975dfab7a96517316dddcdb9d49515fc46bd", "07aa388ac35ecbb1d695ee8954083ab4614becfbbb1eb8e6df46e0775db95a3d", "0648b886dc73912d03b8bee2d026c5ce6c25f4ec46b6435de9c93bd0613b4e2d"), ("020afc6dd9c4b794d8533017581f423525782db87b113503e51732f48372807d", "05252a58cde9abc835004538844e66bb6f2d2e8484e83cff2e5ac7afe88aefc0", "21b61d003cd9432f09c35ac5e275002fc71a952031ef4ec4656e9601f0581e16", "23b85b09fa766bff6543ef8ff288d2d978418c75e41e841dba581c58ee841de5"), ("17c883fb81bb37ce267b0afa03bb8707e8e3e021ea7bacd4867305ee77b8cb91", "0fd738c7c1c3f71819780f2e8f14c21cbb1754e222b874334ec09394ef58bbc9", "1f1b37952bdf5c77fdb25dfa85cd98b315ca027d6ea0ebe04be7f4af8be568bb", "1a4cdc570f195a269ae346a03d2c36859c29759687c755bfeb861637ed1bb143"), ("1a7307edd9ea57dd6300b2e74881ad607b4beb1b0ce8a5c67243300a04387c51", "0ef019a4590c6ebbaf0ff61fd0e3c3df53a09d8fa469783b95e7325c1c301cd5", "14e39acee49266e434a47234a4b20053ee06ed88980205214db97e08286421aa", "0caafe087403c8b8719b47a286cae7f6fe2217bcb5e3ecd6194833d2dd9238a3"), ("133a6fab7497505f764082dc047ac0681168139ad719e38949d085834b7eb2c7", "2626539dd90f4614add1c9f570db815c5c86a3e442717fc5f7e7e93dd240095d", "1bb47467ae2b537f52aa58e4cadb714280f876adb5b2b49acf5d7543135bb093", "2be5237b7baf472a1bd4a88047a59bb31cc529ed9dffce8d34344573ee5d2be8"), ("2ef136aa575095e727d9c0007c374ad23641edc40847b6fd9ba708666faaec3b", "2e4b733bc82e0d9a984ba3927c5f96deff90958ef0cae2692c246eaaf2dc4d5d", "18b980bd8724d4f3ca6faad873f4074fd28bcfdb6dc21344e4372c2c41989928", "251161a656cac30579c23583607c6dc789280209f78b67cdf3eac769ed4cf0fb"), ("1ffdf989393949055c94da2a07699ac9ed3c813f3fc501e10a31ca59bbe021f4", "02e8932ab7c73b4f1b27c77c8c43db81658f324a6549ed0628e424f957497aea", "2a5cd4920c8fceca198b43532740a679350d2fcd6f59173c0df5883efce33243", "0d32f0fe40ea92d58ee8ce810e3f4c6f49f6f72dd085062c851835632bc09924"), ("270458ddf60c44b7405dcfe4e76b8901226cd037efab983e6d8069484ceac2f1", "2933b5c4082c4551c6d1ef57f3b782855ed2044c5dd884feae057b4533430d26", "0eef6181a4a843995a90b74598c24fc1c124250a433cf0fe51fd90d42c941509", "29494ea8ced4811ba20a17f638286a865b39430e066afd7911ca9fa03351a8aa"), ("13783608fec8c464ae0ef62cde8c2c4d9da7aaf263ec2394c312511288c5ddca", "0678d71dccd975c63348965ab81dd052ac2303c72c6cecba673686863afbce08", "1051e0d8e2159e5e72107cab8b4f92f358e60f6f9b4ae8195e4244992cf1c685", "26b76e56c8c10aeb0ec6f6b13337c5445db114e5e0c8ba0b6fdb3c87e8ee92b8"), ("1e8d2fc6cd130a2aff33291e5d0507ef20a21baa2c55ad84487faea5178a9a62", "2f7fd102ebd6d35af1db8db6260cbc21cc8c28dba15c8a3a5a2bc0e6008b0c7e", "0f94559cfe766a8543a8dc0e936df14b2637049b2ad836daebc7ff9f115784ea", "2b0d89c9638f842c2d4fca655e98fe1eadb420cecaa38ca3078a32c09f651990"), ("143051396266f6cee9b484bba38d96a356fda8dc719ad3ef814eda8567f64ec7", "066d8a825c6f99c0ac7ae2dda66d7eb48399d8b7b5e5e27cdfc27784d5280138", "0e3d3491012331ad7b5185c86eec8348e20af8a919aae4ab93a0ae4554ea684a", "0bf43f423697614f6f1e775e103c44909335837de2fc2654219e7db45daa1e29"), ("08b8f2653090fe4f49e478678fab69016ab0b6ccd540d3c724ed5a4be34e0495", "01846351193c92060725ee5498f54986f2ddda0533c4c31c65147891f9af15d9", "1683719f64c5a7c485a1f5ace391e148dcc17f22c690299a3f6ad007be9718bd", "07a1dce08c67590b2b31df3dbbe2313c0574bb833f24fc7c1b1a4b6a871f02e7"), ("03f0a3615e5720310dead1388b03542d71b65e37acd29d95d08c1a0923ab3e28", "2022414f9bab529e833786bef84ac91906b96a26e9b3b0029c824013119b2ea7", "118ef0283c9c96260f24eb7b7e03cb91ddc9660cf59ebff3d24c7dad2e65ac98", "1d10b417a39e16da4c5950f49d800ae2073a227ed3183d3385c38a1271aa81b7"), ("25bdfe143e9d9d202c2a644cadca716e18eb39b8daaad0179e3c68ef8734c239", "152044e130eed26adba9e31c55350ff5ee442f97305c75fee5267213b6e11951", "20a91edefe02654e8581eab99fb41afc3b5a7f9212395ad1902d22a790ada029", "2aecd6a55fa131173e2893e74c3bb37232c5166591be73108fee97facf8b590e"), ("22b61ef791b0209f24f43956f6601fd30b79ea216287229acbe57bf2086a35b4", "226030f3155d4f26f801413aa93c2e8f9ba68ff8d0a713eae75ce58d0cf95074", "13d61d0b06bc5350b50399d48994de2e13f77b2d5b3f05ef1ecd7dd97c06e8b8", "20f5d361fa40ad773f4c46b00c290f04a2a4f5db9fb9c6ba777643a47b8ae452"), ("210e805bdc0ee60c7d6a6be1d5ded666e8fbae24c7a55f861381d774019fef6c", "11eb5a2a4ba4ded73088efcc9d3c3e7bf1893a4d7ef9b855eb1547eddf30d47c", "0ba77e653c69e649c084f88f44866561b05ec8791efdb2104cab33750fafa3bb", "2aaa92ce160608552a6a43583dd8033b51a38dab3327cb959eda7a983eb81941"), ("2baf00fc80c3fc65b19620acf87d0e4efe13a72675479c0e33c4a6f560b60c3d", "0fa1596d680bb1ac990d6bcee36b3b073fdc3a7e6ecb3be396c80cc43e9cb6f3", "2243d986a1a683ec35ce4d090d81e6155de6f4aba1c96c7279d4f1eab15aebca", "0c9467192d7ce1c98813ca72ff78e22d35c6abe1fbb557730dbce2c6ad702107"), ("1d65f9f5679681b90927dad800fe262c159d017c6d8fa551473948b812f856ef", "09ec33d8a243301d27708d9dd4964f977cf789f3f86e50edf9d48e329ca103aa", "104692afccf4cf28e59eaa6946a34b2a812196e105cf38ea3d8651e26e5b1b54", "17b7f4c62f8bdfda24b39431e5b7c5331983b7c75662d1fff42f31ea39a7c1aa"), ("2bb0ad23520a3afa89503eb01a88da3a63066915533ccc8e9211c71b0aa1a493", "02e04f62a3840b0d56180ab1b9236d9f1acbefd4f873a79fea60b7304ae00a37", "2416587f0660a8543e187691aa1c4ba89af37519ed0e7a2d2d2628a65b05b118", "065ac89edebdb994e1e6be7c4c7f7a61c72dab916aaab36e19a36b7f534fdb43"), ("13c858ccf74de01c4c51f6c8cf4a69b1de4d54cca386a84c6044203c96ea3699", "18c174317c54b0892b890e01d8f6840b6adf1643c6871539840489a8e166ce22", "1d54635db55ff6d1277e256b63ef4184a524b44af0f5e7c6640629c5c007ba22", "08d76d67e3efa2f9acae216f29596aed85e2f2c8cc4ad88a410f1b3a8c33bb44"), ("09a6c31c270ab3f64d73b67ddaf1d8222b297834ef38580e32fdeb9dbd214a32", "0f2f255f276f9d86a9c1ff56102976fbf5bd6764207892292b7922c53eae1078", "1bcf4dcd6b7e868db66d261ad646abbaa99468f2929ee3f9e30ae48b6f484197", "11c45d5868f2ad11de162d3b57001db3ab1baa8defa956aa902ffdfbddad6c78"), ("04726706df8b374f29b94bf10304fa2fc88ed29ff42535ee04a0defaf7c51fb2", "270e623227bd6facffb81ae3f2a69e5b4d6fd4ada2a4e5a349d5e8a46a4651ea", "07d0dbf682b7ce8c94df5737f00bdffe8812da149c828b948125bd6f0f10f77b", "2d39059831bea68164599dd7530282888046b0fbaa886a63e5490130d2f263c8"), ("2a7c01e64ff33f006246f39f13a34a90d24918d773a818a92b265a224d91518a", "1cf1cd91e60d7ee6c72a9a0c862267fbd034c69df24bac30559b1a3adb4293dd", "1c98e10dcaa58dc29af04da47303dcc75aa400d8fd15b0a1fc31b4d696d88b6b", "2630dc6423f9381d161ae53d9226e19a8d6a73215c082280b01976c5f826618d"), ("1e4095d25e299de3e2dfb224dca99b2046b86c307520920196c7b2fdf0b73ce7", "1afa609f850372a905202b6e52ceee18927df3034a305727d7c57c2d602454f6", "1e055f79c73595d045befe1e8342932c69bd2bc84f62424d815dab307ed2feb6", "286aebe7ffb54d3565802184aa64d05bf6bb8fd352cd8b0691abe46d87c98625"), ("2b487e4f30a464e07a1508430684891b5d86b300d854fce5b7cb3a1536877cc6", "1b5ce6e3b996822f8b7985ef5e5ae16461839882315d107d561cf1a4b6e88df5", "00575f1ba8a0caa3cc1c6be4dcbc1a780afcd93d189fef8db00c484071fdfbee", "2ffa1b2061a7ed5ec14e19595f68dfbe2f5b83c1a2bfbb449838e06455046ec4"), ("02ccbc8d9c7fe4d3c2e5edbbebc575766648c363c012d0f26aea01a17c3e1d68", "0cbffd24ce2b3e9e20204b82ea731aba911cb0209fe1305a999b7bba91d87e1d", "2c3693a6950b3e74969e538a9592463fd16f5a1d9751dbd10a30508a487e3071", "274d67d91e21b3dd8c15a2278461294aeb4dcd312f76aaab11c402c6e7cf1582"), ("16e29f79745889043c6deb4ea146d3674148b05286453fd8f67d1cc69c8646c3", "11d3f767766e47c49129ff1a4cb298d28e6326116974206c26f381a208bf5650", "246b4a48d971178faa7610759b1bcba6339fa7df6253e6d2cd614783bfcb939f", "187f5f0feac8cf398644d60ac07dd9744183c6d566073ff635e2cc7c8262d54a"), ("11da82940c9fff94efb31df4771f04e39133963be5f600d7983ed760262c74b0", "1c5e06286d3a24d3323c201e39f9d6768fc35747adc6771b75e6b0777b540d6d", "08ecf7aeac792f096be2a4d1374e776cb209be2532e381cd7b557d6bebbc3dcb", "13ba45ebfadc1ee5b896077083a92c1a779124d40777eb3de177ebdca164b6d7"), ("2a3634c23c46fe2c010559db1a8af557f29cf3286286c752feb936e1e2ad10f9", "2570e5c15c01cabb49e6a3d5577f8beadca4201684674e4e9444047a69cffe89", "0388ea39e948e142f7c7cfbafa520601edd9c0c2fd1f559090df6186ac9c961c", "12f2905cd20903c7a089e6fb8c9f1c927f81e9dd7e7ac251f5088ab9669dd7c7"), ("2c8b2227e236ada52b51546d5286add6677d095a2b102ae9d92f20967af6bd3a", "07702e4e27d35e1e77b9322d2e2b0af8afd314567d7a0ac052360f5c0bb64ade", "0433214ba20fddd1780c54ae67c05c6307ae16434eb40da000806d93c21b43c7", "0edfdd43d24453a56131719abc73b4e72c5e691758b594c775f9f9066ffebe18"), ("03c7eaa7184cd37fac3630191a43e85279e962eee3aa61b41b53232a8e20a72d", "07ac0fb6a047c4dd67790863b705371d7eea8492e1ebd184159340d187f21a8b", "02c483a688e5924faa9fc733a10d8eebddfb0b0c2762f552e48d31c3f906e5e8", "15a5b5db5befe0407cef2e12782229bb96724ec4fb7675754e36f721500f73e0"), ("14ae6f046856bcf71c9c10a06f858b547168fd4e92d7c62520c729c301fad50a", "147388105db414fe5e61818a7e84095cf34e2fa186bac67976a9699bcf8539d2", "14f84e9d6b7c2d655daabbe36095ecb4b6f2334ae684101b7c88d9cc5b2d41d9", "09b2e603df43e1f1baa0022e940dad7ae4f0bb12925655fc96a50cad71a2f2cb"), ("1a49a4ad57cb2251e00427b45cf124955cc734191ec3a133ddbedad24d2970ee", "2ac1490ae699ab401031a553c58e324d35b2c8f055575bdaf9135e8370014784", "266df5ffc724fea957b5bc0d0e0720fbad178daef2b74b3069be03a840c7cc2a", "12d5298180e6e0ff87d2aced8bbe9b1a32b5ab4989260734770d17ee185a83d7"), ("15cf582137ad67c4ccb7f3dcf2635790b09f4990547626825bb716b8bd249f68", "00ccf1143109457cb3c4a50d405047917ee834d63a266f37bee75929872d9148", "2e3a0b0b9d1cbaa08664b11e0447b3a3dade38bf845562f473223a8053b2592e", "0bd5cef1a72e7798706b72b6ad997b1870cf1f1f670a50926a9f4e95fc8c4d22"), ("1aa53cf77b182682db356aceeb1bcd28798382e4a143a086f716eab154da7c65", "2adabd54ec005cc17d35c31b0b1e4a4187b1ecd7509d1346a1f7162cc08022bf", "22b42137ddc36e012d1d93f508549fa64ee9a31ad303cf963f8078c529c35d8c", "1f60464c02a1310eaa20ebb5501fd21748203afd615a2f3434d09abb2aa03c37"), ("1a23192da6d55daf0332def877bb9bf8528b13b9550e074f3cdf9dcd2a15b51e", "26793a5949b3e84bc2fd0e8cbc168e470bb38438f5ac1e08712ccbf25c29f72f", "0ecb59b6c396dfdc81625abb5af8ddb49c8228972183f7441e0f4eae2da09e64", "24f2877cfa445e140a3f13d9376ad0e22e35bd93d65e5f454635815fa9f878c7"), ("2213965cbfcdbc8f286620a3d3dca30f96e78c850d14322b8d09e02f20e11613", "19231c794d359042a2f7499fdc737397243520b983353ffff6b7b672e15075a9", "11ba1ae252256e8658ce33ff3edb629132810e8fba80e0a9647b837028b65f3a", "0aec54ef373098101c3b87aa1bf580812b11898199037792dcd4860e9014a8a4"), ("0dabdab259fb2dd2fcbc5c4182b3f9dc511cd0f2c9e6533338cd35b4c7691fb9", "2c559f66ca5b6547a96fd0cfb4dbea8f00f99de916f6bcb120ae4a42efe59101", "05acc5aa2128f183089f64a0d6084cada837dfb5f57eec48f05de5c4ac35f767", "2f5592a22e06721a6dad9f2f37986a455023c0aa9c98afed96ae2b6ddbac34eb"), ("10ec6d982ca7a917cca186104d14cc34fc989169c93f4d6d551fdde5f57c1b8e", "1d7c1b88bec692a436eacbcc5946b9c0cd553abda266e00d5c2a3abb07c5ce57", "2e6c54e7a1426439f082528260ea8caf02ee028fe4d864ce33f72e2d11883e15", "089e23735a2f63fac2a8c054a5e50d01aa1977f24e7adbd7aea06a29265cb585"), ("2eb87f50c3cd27d8521391c32a3bcb3eb417fb85051b29cad451a00fb49a79d2", "2a06c4778b70b39f29171708a75bf4e7d002aec72a28db31dd90e58df99d9521", "28c7a64ddf61ce054fd50c154333cdee99d81a4a46f3b42502f8145a4cf3efc5", "1e9023c73b7af7180a659eab3c44640225b4adeb7c682d3144f304c6fc28b0c8"), ("001445ac2f85222198ce09f7b6cf9ad75d0ee2bf0bb5c21cd766ae1e1cca2817", "2037dcb820b45b84a6384d4d49c50c75a2421126c88258a2723bb835c666599c", "21e4c3e87c02708baaa81677e97d20958436f4afbde022d698a9a04b28e7798e", "255c97e07854994761c781c97127e7d1aea82ccb17db3954063d346be9098c5e"), ("15836c7e7b9055eb42a8427faadff3faccd13fdc32ab0bb1c0dd50f0c61e5017", "1a76df5b1c366749bf8a5aca67d16713092096e866bd367a361f43a84814eebd", "2f2882c47af7320258e365c42ae4a86748c56cfbdd73ad721da03b24467b70cb", "23b3dcf508dc032ad206ef0bc28d495bbee73cc9cdf56fd6337b099436ab52d2"), ("01a90c8462453a04fdc61bed98da7c401cce32d10793bdf800af51133ea91b00", "2b7ae99a0e6341d073b2dd71bc62d427889c947e4837e085178c5233f161b00a", "0ddd9b8539ccb009ec9094e3ad1d2220b759e1b4a00b24d35e14791e7191d2e2", "180aa903b6b6ab183a54fd5839f4fcfeb739252fb1be41b36c9b83d95ebca20c"), ("13abf49ef9cb6c8a1c0785801756281572847ba682ce8a16036119cda73cd4f1", "205a044feb5d1fe1defcbb7a6a5af9ac1886a7d0d20960bf18465c301982706f", "263e8f9ee206f872c628ff606996d2e251fe67308dcfe51b23026762cacabae0", "1e972495bbb52bcce30074b3e91ab1162e086dc25c2806a2e2f8ed84252711a6"), ("00784e119be0e4f35852c41bea554ea73b39727c84c11ea14ca9fdb577a26e4f", "2fb18107adc6717b5c8c7d5dbeeb5d64eea1038178a73b3a3704b355584faab8", "0d44032da6def5580e18f27c11cd47068ee67a1e464ed546894764af56f273c2", "1c8c112201c3fecd3ccfd6db1759df0a94be821989b8db2d72b8528193d5f3a5"), ("2db024dab1687602d781c2147b3d4608a4247708ccb5f77b5c52378516d9d8ba", "10b2dfeaa002eb64cfe913da58a71796f3cace0fc3b6aa2738281488691e2f6f", "1016161518bbb6689b47c5cc3bd8dcadf3d11aa6aef0a82663a1366b9ca09e40", "1d7623868353d5c70c84b3a6632979fe1655de4684ed2e1463ad8ff4ea357040"), ("2347c318ca723f30236f05cf88b0bfb022266779c54f807df21225e14fa9ae94", "1125aa79d71357438618cc9af20f0495d9a4a544f13f3f032a149681d877ff93", "1b3799e878fa890854ac8d87d9ddee9af7200749cc9571194446fe9a2c48f3a3", "0d612f9204dac5f3405d3b60a759d8a6dff39ef2e98c2aec687d6d39a2d2218a"), ("0e02072156d7ef3271030452da489bd4eb84cd050da78558e2279fbda9e9b01c", "25536b4725cbd4df201d9751c962490a3506ef13dd77373285e03672fa496806", "20c14ac8d23efa92305257ad338a6dc8d3f001bc6b9f2f8de30166e52a95f900", "111170cbf94dfe2282b71ebecd195ad6702d42a0fff9d925458ab847dd3c4eb2"), ("21fd0dea36e7f5cca7ba5f43520ec762b080f12ab3421477ff97a22cc6f0e7ff", "117532693a59fd3e6ec666aa2a2edda7fd2ed50f2ac6f15d22b9d251094c7883", "2fadbe709deac331348ea44959f9e53c07b5e465168948a30ba777932fa60eda", "1175fc9aa355e109a787341d76a381ff04a72c7296fdd339d1ee5dadade179de"), ("1d2989975eb8a109a1bd1a55b6e0286281dc4d164bc7677f1810b1722eee916e", "22a9bbe2e65c1303f183db217603aa099053403b031179591409066ce3b5c159", "13ea6397e420817939740b805fbfe4d14c1ed762664b5ba364fb52456a12a915", "00d1562abf3313c78a7a8ca482e72ce6f5c95b4af1133ba32495661489ee8d29"), ("21f99c6fe9db75585a122991eeaa658095802015899ade7625dc07c61f8e53bb", "0aa40b8657031c22f9c40295eb807e510f5e566d4bc7fb9926b449dc22de0bb9", "24d159cb1b88aae58b87e28d5a49638167acd9d9424eced77cc0868cd2939012", "0126673ad37cf3c7259f1570bfa0bc01e8df0f7283be523ab6495ea21c3d2ed4"), ("0f29da2de41269429904f0a3336e77c9844b8733e98072957ade8db784f6853f", "0e8b1cdcfc803b8c363416b6f064e49dcd661eafc0e935286d186a1a7f70bb1e", "16d13d52c28d5015ca99452c8fa51d4a4ada835100d10b941da345c3eb02e536", "09b86b37863fc1a41849666afd06fc6dd893dcb2b4986cebd06150e749c70d82"), ("01b293be218600e5c908aa362d3741543e5124bde2fbc8c895bc4831012bb2fe", "2b7c99131f5dadcbe01a258ed315bc4978b9194aa5573b8cfaea05454a2079e4", "27f60d3e6a8a3f2ada1916d28aa32fda2dd835f550c76e8e70f725d7ed4e0386", "1d885d0f4d2a26bf14de2980393e8560dd578d447d6baa23b7416c425239f97c"), ("16269e1c6972a455e4a4064ecd8e4a0785ba5cdfff203570236309ebbae9a2d0", "08c64d19adcfa9152551d3be388e658fbb7444b1c58e9588bf91c69f568ae0d0", "26366de4b69d115747153230a3281aea68a9ab085d90feeeae540daf31aa5c34", "150822c6d722e6773dd6457e15bc3c4d364d1ba70aa94c06e5aae3dc0ca59086"), ("20510a9118e4ebc36b6f5427862c6c691ee66bb667a699c9d4d5b419765ede38", "237b971fe506367e33efe4f5420af1789e6373a9871b3971335b004e33de7ff6", "0f8696616b254d15b0099e2a9976d528237b6f552d55c2043a52af7cd9175b39", "2e6cff60a4ccaf455947e2fae9c79bc83249f4984c8bc01fad79d4dba30e2433"), ("2a88221cd80ab881164bc7daaf1d88ef92c3fb2afd85098b2b5b8da49901c28a", "235ec74b03b1b9b07060094be66475fd8bd660a5e9351fb9e7c9b4a2945470ee", "301dc952b042709ed10587e565ffd9f8f279f4f607a0712f8dd444579b5173e6", "1327bee10f8970f3a0160572d26d49f379cf7ec0a326aab2572ba779ad6ea882"), ("2bfb24e7a18a909f6fd50f28cca1cddf231e6222f299c6b1c15cb6cda0a2cca2", "1039760ce05c1f6fbc8248324ff8f347a5619f5fea0f1fcf0e669f1dcb4dfced", "2f780a13535561e874f7cc91b5826dc295aa91e3df08eac3d97e781eae15885a", "1a6ac2e9a1f1e05523fad9728aef5b903509596c931a21f8992fe490e90ed8dd"), ("0a7cb5ff783129adf15eb5e76c2d54c7de590bef38e502db03fd10b9699b6246", "197b8e0e89b3837d045b452edb6c0644eda36cb25b8a80aad30c7ec9d1c6e7c4", "0117dab648969cee067191b7cf048a744c04bce89b4da5d59c0d94d68054a1b0", "2a4e962e3da6ffc47a72aadf327365da76486edff9b771cccc1e1ff9ccd76cf4"), ("1cb8ec67904d04134ab117a5d65ab3b2189934313ce4ac60be16b1eaf94a844d", "253a8c200d72da90d00edf9450b38f1ab62f45b91e413dadab5f7b78284e6906", "296c263bd7dfba84dec77c55f4a85e1a3532c27e7b76c33155ce6c7051b61bc8", "28dd4a703db4df9fcafe8d8a9a9a449bbdfd57a5bc1366bf2265b307db2aac33"), ("1385004d476858a7e4b3e234f5220d011dcfde7336169c6a6089379f26629315", "2101657eff16eac6d85d2b18ba31b25dc38d648b07a662f7f20c528c9a9c37c8", "25c2b3b8e6d320824dc19e86652eaacc96a268264bed0521b602042c7957e47e", "13c4974d1bf14c4cf6720b913ad61389f7a0415fadb4ad77905b5c82b5a31c2d"), ("17d559c156ea2ee6f21e3333782e4ea1d513aa14a5010a3f98dc2c23022c3718", "01b6e2e8cc95671a6348eaa7bc344f53dda9dc92c03106245efec9204a2fcc83", "162ebfe41fc90da1fb1631e026ce05a6454aff89d69b87f0e6bc040ccfd7d7b6", "0c7d5bd9807f1540699eda4565cc1cc8e7ecd5054c9fe9b45193b7af16eedf97"), ("0feed03be34fd50b15de5f1e237a3c2ae8711211f486c7d1597fca4d9b57aa8f", "300c77f46f727b44a20beb0c9c0908e4eae5e122caa91f8ba2f6994017875d8a", "12e4b0b59539fe02926f35654e4c753cebe37a7894e0f95cf58b2eb00ec59887", "0b8f7f4e29c4629798ef1b7dfda12203991b6987041105cfe0fd972ad84fba09"), ("1d3e0ae37b6d731b5d86783d4a802e8edd575e7298325a1d0ed4c3b755949351", "1b95c7fb3d828f331a89721665d6097096fd5755c748210ac944ecea4f3e39d4", "286e01d0a9259461660c2dd643e558bb4ca4ffcdd7363ce676e8804b191e0590", "0fb85b87ff3ad617141a9531c4375ffa3ea6ceac77beb3728205dc7b0cb5c1e0"), ("0b9395a1d94f04c2ed7ba4dd1f0bb2e87990528480d811875f8d2cfb309b6482", "14a718258a6fa7874d1238b90709f59953f16f7dbcf81e744d1c6d27cdba320b", "04b5e6e99e76bd06f5655c5528a11e695eef69e96e564774116fdfbf5b73fe66", "0de3e56d41098268d1d559260f57e550204fbe8f001047c15a677c21ed2f29d2"), ("25922bb657467a0a921a98d7efbaf129c00377442e77e7e311ff4ff04797a9c3", "190b560190945ad49e9343148cdeb70f4f6462d4df6f837f8ca384e5c808f92f", "0d99aef98a1ba4294489624bbe3f3a6a91f4de8768c64955ff962b49dce69bc4", "08c99b937606573f3388c04405ceaa91eafe6e706e5607f9762484b6efb2a1d0"), ("1aa54d8e23626c0a80eeb0bc8f5701c0067c2af726452200ecab40c5242b944d", "00e28c7c3b323bf657cbf15064e438f71f289a6b22dd0c94f66b076a9516d787", "131db5acc45227d8bb4328297fe987679e469ee008ab0a2d563bdb9c1ebddc81", "0bd19457f1daa9dea5397b8020c9e49c9e3b7e8cda9deeff1a1b1fb66524a782"), ("009bc3e15a865318f232e3c6e15320b6c4b9e336bd97dcc2bdb4102398d39032", "20e628cc269dcaa531e1bd25decacc0a5c0b1e7c2d8e881c95c529d10f034e3f", "2d9d3ad66a7728a3493cfd26d5fe7b7ea5153e48a2b5b2a7550bcfe921e974d1", "06a3df883c8fe8a422f96e6e566bc1dd3f428a46d85620217805974129783d4d"), ("2cc8005354c3c62ae007cf0e767446ee060ab272f42fff7e33b6513e65afa6d5", "1fc58b6fadc0a6541f68bfc52f5549e95607a152b65559b067ab35ca04b9f74d", "26147e9dafde58ffa69e8c8097fb4fe22c98f8ac546f3bd39d36f9b0232a0427", "24b425334323cb3fb67f8f0e1c167599b66aba39ab3dc0a0f19f88766463594e"), ("2c14859afc1973502c258cee1ae4e6e693fe91604f00f10b4175cd7d9a43edf3", "2afb0b731d9e3863d668b4f4e49ffb57976fae759b82d314d5b41906a72f8416", "1b216b1eb30bcc7d029c17fdc8be0ad22a32d613906bd5c670e60c78b0fcfe9e", "17adcd3e6b7584f0c9c8fff6274135a67aeb9115346878879a67b3d5528ae5b9"), ("2dc291b9c893f79cae56d00f59356a1d7753d40a9d8c79419d3d64e71e624d01", "2a58595bf5abdbac75f1c7fedf8ad3567767a32d6ca10b18c3a25a065b865eac", "1f18d4ff011cfe7ca9c3b1a1e7c2578abfc60b872e99e590cd9029a01c9ca886", "03102fa4e3b864816ccc818810be1e573f32c2d286df220ddb62d656e80e3b48"), ("2f1c66fecdfc5af8b246dbc952250b84c75831448c056b7d9147ecd96ac3bedc", "2c1223446e514b85de6be14b7c196c59cc59584c8a5092b1b367915ec7537bf4", "115d5602387627b14b9688a270f7744859f01698e3c536f4b0b3392f00d7da9b", "26df91248a0a0a5461f545826354dd3b7f286410d8268337ae1b89a51f649f1d"), ("0aabf8c45f20932ffeaa2e116a685a611dc877b6e9e700a70e6a17e6da3bf649", "2d62eb62e6d5afb1e6da52d095adde28182d4e490d94043e2556321d11ae810f", "1cc272e86b8a4ad23605a74fe63f0cef519f769a3c2b4c68409ffd84bcfe8a84", "0609b9094747d6c2d3619348c3434396b21f3c902c08ed225d8efa50df4facf5"), ("29c0d11885a4a57d8e0b2591085f69ab2c95ab4c6255583f8e0d6cec799f0fcb", "135bb204a3aefc2cf2cd5511c0def655da8a76c93b59938306e1a3683d96e377", "04becc403f3034d6ad5da902f38fcd43dc0b7b04002efdd851c666bcd004313c", "0384ccd2a2a6184b82049b64a5171b35ed06fd9fd8a7980d3caa8dadd7a85c9d"), ("24be88d8eb838b0d4c0e2cf96729ed2f41154dfcc8720fd83810e71943c0cfea", "08a3f31b77347490cde13c4f2d58a6cfc2aa5806c2ab19a8792c82c859c77c71", "2c01cf95f1ca61995b04dd8ffb6476bf05f6b75ba0032afbc56fef82e418801b", "26891b01aa5cd309bac27c372e8fb18a8de1f17c228efbda6536bd0d3627480d"), ("05ce47e67a7b3975fa62fffafbf469df1374d95d9f222793a37ce0d24df618e1", "1cd3c026f7345b8fbdd0f6e110457f4fe723850a3a3c854308d6b0105ac08454", "29fc9a08818b206a914d17d995373d4618002f543c3782513aad2f1f47273708", "25ade47cdc7234d916d916ce07380eee7c1b3d0f4e7d0ece7f236eabafc3c761"), ("06cf9758c3b17e76267f0eb005757b66086ccc1bbadc6d1d67d28b57b019095f", "159e4fed19d2a80a5a79fefe3f8cb4a61457ac32a3889980487e3bf64f63e7be", "19eebc4f132646ea677c966a99f4d9907a0337b45b3d8df41c7b09d2cad0e9fd", "14c97a26a585ffaa15cf54400b1054e352dff04cf5553e60a93e5a504d453e2c"), ("1d93be6e755d926362606e38e3d2b5fac88350d4ebcf9713c6ace7fe0539630a", "289100bf6e51d7f168f7b92e9eda74cbd697a306cacfe8042d24949e9436d9d3", "2326cc2a6e00a47bdcdc485faa670a937642198cced74b3c5bfe68dd9d296cc6", "04ccb381405d58e2d26a3e97d941b3da7cb6047bcbf9739df89372bb3203721a"), ("0bbc8feadd2f0b99ffd721a12d4cb2fcc166d7f046eb62f3a4a579f5a3ea8380", "053f8af7d9935425837f281fb273c818eacbd20cba1db869ebbe493e0c6fc7a2", "04584fd79df109ddddece6d5cf20a81b588daa168ec347f74e05a721f17b56ed", "22fd36ed09f03e29d61bb19cc06da43aaa88ef6a2b7ce99908905c3ba9bf6295"), ("29746682cafb316d472c57ad990606685b8ad2cd47eb91436319931e80255845", "07f971509679b0ac861bbf8ed8b709a50aad566f1e8d3a634e4c00eb4f90499a", "16e78dab6853070932f8d714739ca5830e826c4a42ee68a3fafab742f5698077", "0c7b9adf35c7ebfd13e82691f5cd51f9f6b680b90c1e16597f50585c76f218f4"), ("13631a3c05fb8a3615501eb76b05318fb40f4d58205e6e6eaf81dfeab7262db5", "24336d2e6750d922525fd5c491261090481d5181b117c7a27a5395bf4e5bb143", "185412196bc90fc2eed8e71bb71633dea5c75cb5b36639bf4e17f48a6b10843a", "11b65e9d3ef2d36ddacbbd45b4a4bc3361c16a7d78bbd7b9281cb78146fa4e7d"), ("01774426b562b0ce9c1acc3b1a7b89fa13278c676807f120809ea27a34c3b097", "05ddcc7b6b8267b06f1a577ae569f7293d6ec5fbfe1575c27ef06a5b370876c4", "130e6337ddf457bc0dcdeb665e683f36f931c4cca7ccd5359a4bc5aa342ec472", "144373951e5aba0147fc9ee9fe0d0687b753cc0779e426f321a412dfaa2dfc89"), ("1f850c83cd8c59006f5ff06010527d9b454afdb48a762698dbb0b8a2d69af08d", "119b82c11cd0b66ee231d2dc44188a4b951cb087c912104dd460cc1d9ace3f80", "2674a01effc2ee8e08fb6b79a054081eb84b6cf8f625a2b70d0148148482484d", "283d26779d20c3f017ec73d3ba18f2562741366f8c212a44d518ea60843d6fe7"), ("1e69ad25e92a7c5ceb5e305532cc6d54d2d4b6871633564b9dc56d8c511873a8", "085f623036a76d341409f175c3c99bd16660f4b94110977deb26acf11763f74c", "163c6e686d248ed381999245106b47e038ea1eb21ea1c60474e498be2250cc35", "286d81a13018999096c1250c662c65816665e4a72afcf5b6747b2414badb9305"), ("15344398a16f9910fd99bd4c0f6e98c055d6ebcfc604b1a7b76c57da8c638daa", "21c09b5bf2cc0fe280234c9371e8a51d7e2a6e1a20bf220c6ecb2d316056375d", "2de96ce64eb3e422d6dfa358b71cb3ec2b24ceed46a3ed3ba3f1f5b889127c85", "0c6824dabeb642be37e6f0986844121edf28f501f03771cdd1e202543203dac3"), ("27e7ed56501d4aece60c01d4169bb378892fbb88768e0faef318764a609de4ae", "0532636c8f1869edaf484e94f2750938c153321299e09d1ffd659df99b2cf425", "0c82f0c23f3df59affa91cfde12d7d2e9e7656bfbacf88d9e3eade1785721d76", "05395eb5ddff4103c0bfc323cabc893fc7495852ba4c233bf76ef2e402662baa"), ("0346d8ccbbf9b47490df77588f7c9c6e76aa4a34a437a1975132508aba69931f", "2ac0387195726ac3459d3146a3677ffd9ea59dffe2b4b3eef0c08afa4768dd5a", "0b6c25426a516401d0ea7d68e61f099dd1499d43e683988068e2b5288bfdc452", "130a292bcc88a9ee4cee9086e9d1deef59e9cc0610833b9b8301e7b9d0b9e1c1"), ("0fc6c361b0554b825d03b740d3f98e28f3ab2e6e3db7a75a5c20d41191cc996d", "250ee583352bc0d8d9903f4e456668898f7637cf3fbbb16cc8156803e44d4120", "21cb594d52822a496702b1449470eca7d3a9152c76b25faa98e17f0ce041cfcd", "0fe1ede0ce3d1825a0f729cf36187438c4f9f126b50b44ebe8f9819809651778"), ("0ea29452a2a9a3c0cd727db17539ab27f29a4a9cd1e7eb8184f6f9bb0b648d9f", "1ceae02dee6b3262292dc49a35865f1dc0f81fe0dc6882cd3ee001ebf98be46a", "201929c606cde2875dc501d94617dae7dab56e3ac25052ff57ccdf275ff095a9", "2c62ca70642d7c6582d5815418589db3994ba7a3e0f94df1e86f3ea908336154"), ("08550820b8810026fcf33f872c326d28bc0227e2ca64f40a71d6f8a9c492bdc4", "02174736b2277491a22ffca9671ee66ea4a4c9870b44da321b0cbea4072c6c73", "25ceff98420d360c2d76ee16ae20ca5ca6677523f3576f9c0be2694b5218d692", "26f31fc219bc4cba2bdb396db731e8b5a7d999bc9a29d2bc1a2378fb9bc6e372"), ("0c7b2e30d39b7e258f3e422e1c8b5b4388b45fd6687eedeb3ebca656fa8b6448", "0ad6b8c32e4161b107ee5e7e1c5787dc7b6d08ea81337ac51496a967950a8c0d", "009ecfe79c20cf40ddf516d492550b3e9e60dd8cd7dfd8ca23730fe000926066", "2aa922549164a9598816c5e053504ba6d8ee010c35bd8ce8ea5a85382fb07ddf"), ("1529ee63221b42dedb2e0fd8616e3e8f3967cf4712b3e2838196f9ae542a4f65", "0eaf1973ffdb12a8e5aa185e045bb357c4daea5d9b2258a3bb3310e0d5cb3c62", "22029c9ac196df5a4c3fb5957f0ca437e872e9be1d2908c0737f3cbf9c5d6a20", "279893bd22d69e5d1f67ac42a4c11c6540ce434494c647164f21c0ec8b5ab5e6"), ("2e8941b54d2205861c48c6ea45ba47cda1b75738b05f3c31f3bd69c9f0f02eef", "18ed31a504c6a7b25572bff5d2a7e166e4d60bd051dc47de9c4440e3dfbcf0a3", "03dc26c3d1c86b5604b4cf9e0b3bbf1c6a0b6c6afa2d6b549f038de640b731d1", "2f21cfc88acb14438dec8f7e63fcd72baddf934dbc56214ea61da55b2589675c"), ("13be00e81ef385f907c69742c87f0949ee5dc1dd7b1ad9b4225ab3ba226a6ce1", "2da7f3579be2f25d94acb8c23d7c624c16d1d16db14919cfcfbaada2fcec4110", "0ce153e103a3855205af25165a7f5f6600c1ad4894af07a1e0e03d39464f44dc", "2514dbeebca50fc87d22cb501d9ea2cd5df937d09094553994ec7ef59e66c7ca"), ("148267499eec5cc00ed0960735752efa6675415dcee379fee235c3f1c1c600a7", "1edc7b3c5dd5c74cc080fa1417305f17e5b45b40c16bea443d381f1af6b9cf95", "1bd2f1af5814d9565b59a1d61745318cccee5779afca18ca9ccd725a14f05d84", "0e44d7d91e4f1f23f89356368c94956c737cf11178662e246680e218e435793a"), ("1db837750597797dcbebc901ab258c9d33b81cb532555fee5dc83970d4b5f595", "12b0267472a75d7672ef365a97f2b079a270641315402be17d385e58ee54abfc", "14500b74767823f9e54335d10030669a9468b82805ac27afdbfbd6e984cf302b", "10c82017f279bef6e4fbdf0caa41998d7b27e2ea6a7d42ed0a0f2bfca96a4a46"), ("254f5cd8a1c6d1f7e9ed07bd7ab77cd56f95b73a7adc2daffed19e78fd49dc0e", "20ef10a167b44d1df8a06d2a3103a17387833e3f3e9bf2a404ccac78a63a9e12", "04b678ed1a9a8ef8dbf115049336e1b6bb63c2fd8cce8025c091ff075e3aef62", "1ffcad7f5a409a87e5c45d099eed9290f13327b0bd65b5fb3fdf619c036c9b15"), ("0fe13d4f310ea441dd2a3d5d519aac7d83b2d306fed5027a246022b5dd73734a", "0ee28ccd72a600b2152982c660a05f512daa2a23aa5a08b12e22134a9a33a2d6", "24d610d85d28ec4dabeb7643863481668217ccbee655b7d8021ab0dcaea8f96a", "01791f5fa2602ddc546546a02adc3e97ff78b606ee2dc6a9f82441d6f9bf327a"), ("029e7880164f7d90a1aba3dc4f304a459351626c7e232a67400cc5dbedfafd05", "2989e95f1abb76aa7014dd1f7b22b02b995a277518c9079823d0148a7be3427d", "1901cdd55a19eec7e048fa69bc6f10b18a67430d4d51e12a74aec32801307b9a", "2d6532c0816cf9c7efeeb6ab1da10312e255d7083d4411d81367d8d45e72f27c"), ("1e0192cf07b50cfc38f70adae9899a3e1f174d7cf80f3ece527504a4e9ba5e2d", "284107f5779c2a3272bf2d459ff78be8ecfafeae5c81e1805902fc23e615febb", "06c8a8335b686cf10cb408d412092a83cbdab06a438f72f3bf2d8ac7c3eab046", "01b05e9ea85327ec68455c06c27e0d385299c6ec6ac3094f3467de91e5f27378"), ("107574193dc75258824fca752362a7b1e35a2bddfec08284f10d6053f15b3949", "0a3d365f2bc5f1c36a39bbab6fbfbe72f94e08db16be5e41478311bec6e4e696", "119e803e9857d267209122d434cf7d3d53d0074ee69d458eeed788e41d74302e", "0031bf363683c1274d3cc02633cdc264edf7c4e69f52afd5757824d7a08e62f0"), ("173e63f0e3b4086e95bf7bef9c865377bf59c1773b9e0ecd4696ee7f2eaadf69", "0b287488b111a46fc2cd91acf0eabe1b9fd3071623710eef9d2a75b66ebdc3c5", "2690d6536d3488d7a06bdac91e5e0533f3ac481be3de7fe00546dcfce3d294a8", "05cc56833c4d2f9fedd2d39c8d4e72a3d1c7275c1ceb36869ee8043228e57586"), ("2c76408814905e5abd6b07ea6abf94bc80fd6528c9d81473d8dfaf1869a7584d", "0b96ddcd783f0d34f06e510402414b24324d91fa7cfaaa4459d834f970831af8", "1b262f74f7331462122d90270abda218fc16b277e042735b6eb75bf9ef342f0e", "25dd365db19f6e91f24ccb758eba6f8a7f224b94116daa59001512a70bf70d35"), ("0fd1ce76817116b94ce05c1c54a6a48bacbf9ced6d7738e0a6fdcb51fecc14dd", "2883ec51fbba4764d6a70d8cdf1cd10977cd4b1611d75ed7fa7ca3be9bc6372d", "0bff18f63376d7dc6d3b80ebaba06bcf919f7d7bdf088f3e22e82b1cda83d1be", "2f5ed479a8c97edc5732ecdf610ddfa31761ad84e2f7ace69526e9a439849da9"), ("13f0e69f1185404bafc092ec9c4fbde51a36da6caae9500381f6380d7de84b72", "1e0555adfeee3de6607c70fb33d94ce4b42ee988cdc34676eeed3b05b001a6d2", "14eb9f350e9ddea7dd04370c8a5177e1618bed1e6adad221dbd524a8bd39b0d6", "21f44889e4219698f657f89050ceb6579b797a1595ce1753ae4297706673dec3"), ("22e48c155f58e08701d8556b64979f4dc31e706cec8713e884a20b95245a806c", "271dc00d17b380904b9d2a1c40203aeb1b028d4aa41f0e9102b458cfd6f67b5c", "0c4f70fc4307d4fe55e0ebbadd7606ca48dca641f4ee551d090585be7802cae8", "17c6f3d989cc43ef4e8d930bfd2d4bdb4b2f1a5c5a4b8107000a15724c250312"), ("00709cb6d8b2b04177abeea78c508ba2b23156afb0bb137ed63e423b0d318d8f", "08731208cf65e8002f979169e53d1072b8cd9491306c60ade7f0dc63deb815cb", "010b189369a18a258866045016b91bce0a210b4851c21db2965a296c59c99809", "22e14dd3518e17a18e4ca7618e1aed2afdf5cce3aaf47e2a4e01bb72fa8ee18a"), ("2470ae5898929a1fd6f1f7570c1a41669890d1ce5f1bdbf8a05272486d3fc600", "11a82ae162363aa459cadd922981a3acd8e7f7418f39adfca30328f7937dbe0c", "2a83c2caaa06cdbe4d65f0d1e273b41dfafc1ae22db16148c1813038fa6a3bf1", "0d9703261f0c57f63eaaf0feb1655b4b0aa0d230500a34b4718243e1192c143f"), ("1a87c0546ff13aba0cd8fdffbd68c289934e60e034c7ae7620687e39228a4876", "1c09cbae4ee43b81c5ff575e3e162b2849d80612acb425a20609de701401b8ea", "074486828381c3c03ce4cfcdc065358a4b6981fa88b48d85afcbf9eb8d206c67", "08ca22873ce5d0c52c1d3d6a2f40d75bebc68026c81be44f806c11e9beace47d"), ("04ee6c6408efdb061e33429feda6558a076b5cba4b8e32fa2863eefe0be072e6", "2e1b243e7653034cc4345efd8a89c9a168e110ef35b0c25ceb529ebbb2a116ca", "0c9322144d978d77a3911a264a837b9234ef35c008a60608e24326c22d4a8a0a", "1daa56066082d5277c05425cb949f69073683d91982e94524f9f6c00869a5213"), ("0aa7c47b6de08a7428f8b66407b0b130387f93d2f6029cbc58f15d01cdd71568", "13ba338b8907f9d1cc467755b7e9965ff876164aff8b191cb98f029f389d3bd6", "100f221bde9dd529b977bab41dabedf074316342c5155e137c7aca19093756e2", "0d8d15c41a8b1aa8163801dd4f979a9d079ab78eb7f9ff7caa61a00eaac73a4e"), ("19ebeaf8d6f34eeb1e6fa4d4342c0a3e4cde2df77f2bc06d5908c4376bfe89f3", "202b57a947e68a383d0f36369e7571a8dfdfce015d570b5fe62c924e86c489f9", "107894c58ea146481b7ef27ed32859d7d066e41ba2f4bea55d8bb1d1b025a336", "2d3f5ac413f8941e11f31644a022c957f26d3ae79d0c280e04565e00db425c21"), ("0bce3e578f7e2a4eb57b6e04ef19726aa279a920e7342a546fd6a50e71ec7176", "289cdc4186e251317369e77a06688169a78172162e8c3de89a3ee01577932450", "2e2a0db235bdada170f912ce15503c4cd389f5eb8c79c42e7b8268e662d2764a", "00919c1b004c19aa9ef8d2ca00560214891db0b3938fddc03dbed0f241266e8f"), ("11fc73aa5c2461d14425d0dca254657d4a5b841aae7371eada66defc663003cb", "27b3fd25228768361dce406e566093df1524da670a6de15337bf58f6b5fd8d51", "258feba6c049e0fff5ef9e92aa422736ce3d247260d412c000b44b8125024d7c", "108075f43a48b65cc48fb1f802d47e52a2c0e9904b71ed33b4757a0f17f7125b"), ("28eff2494032dc91a8a75f4854097f1d1023649d8a8357552f5c8585b416bd5a", "2ed28a1fb6c3b089a4d94f116060519cc810e674e4db3995a964cb34874f6fb8", "1d2df4a37adbfec0007ac31cb98769a7a782a1579dddf40fd87f4cab0e3315c6", "24d3e11c2bb16e75ba176c0d6a9f4d2d68db336fe055b732190b8a4116d28c12"), ("2c9da5db79c78837cb5e5424475dc5cd952e3d691c450229246ab5d958d136bd", "1cf8a96229d40d0e242901c619c4818ef3a310495663c506c69ec0ed23a88da7", "2bbda865f6cd40ee66dea824b3b5d91c85a2fa6fd6fb761fff822dfe9d529501", "074a3a34cd32dc23fb8c1aa03b6f1fa2693e3a5350e5f89449319738e93d6027"), ("1d76ed6c422e0ab5253ba9f09f783004fb65e086ebbddd619a0d98308026f514", "2230fb2445bab52ccac7ad36b6078a5ae7353f3bc37702a33c158fe9391e33a6", "242f59b77dfca67e7ca36b3207b52200a4f89775df4e56971a195e7c6b8b6554", "137d54aca3a53e2ec02bdc3dc5c16fd3239871c8ee2c829b385d3bae31f82ded"), ("1e92a6a5fee1dc2408bb90b9d0f31d173be56fdb47b0b04fbb187396d2daca3f", "16611716bdbed5c2277f68f3121a9e558eb89b90b50a832874896e2ce2a82a8c", "24782ac05e94ae84923bc4dad21140fe99278a43df05c9ddefa0de5883cb040e", "0a0a6f3b86b335f796b9182a3f831d72c50e800ed3c48559b877f8b5646bfb81"), ("03f4a915f0507438eb9d17e48c185bbec4e532b3bf25bff683eaafcce5e6e2c1", "0ba97997d7ac50a174ed37f34c1c9b1cdc363730162ac5c996240fcea6f1dacd", "186ff03ee3f3e94ebb56d910d6638e1970b3db5269c8ae5c557e7a2ca7a835f6", "11094bb154a681e787f84f411085e31a73e4e29891877689855c7ddcada0883b"), ("151a8695505def82411a85905fc6a29a696675d921bf057180eb9738294a4009", "15e3d77f24ffb0ff0eaf041683b7cf30b7e05d56a392eb74da7eb2ee792cc199", "2708a28522d812dd437739745d5e147766ce5dc18f1947b5b1047342c5672d5b", "276e908cfba446fce65a7889bdc59493ae6bd40adaa522d88b5b7d690622d459"), ("14cad5cb3842680cabe2d443f6c1e42f82ec2e58220372b20fec5289de57c16b", "12611d7cf327ae7ed0b29928cc90140b8cfde90676197225e62046c3d5c5100d", "0c3171c65c0ab82b04532c0524c5c71d20c2b692d9a26018a1a68027cb452b7f", "1b585f69b26c770e1970528ecc084481b3d13dda542426a71b756594a7ccf4a7"), ("098b19dc8d77f448a65c28728cda591d91bfce1523262892be1e52a399445d0a", "0002018d2fdc4926140275f183e470d3204172878e095c7d65d52bef31bd62c5", "2107a4567e1f0ff940ab62fbf69c07b77645a9e3ad14dd6232d479cf82e561e2", "2626bf2675aed1fad4e1948a8cf375b3e0846c70b46d8c63bf35e399e5b7b631"), ("13e544b168de08dcb4370ff88c68c9bd229047e5f04669bc691a00b7b215b143", "153e769d45c790a1b04d4959b273e85c3446077029cff166f0ed12f1eaaf5ba6", "02fcaba092de8dc05be4a564407b353c82a8a5e28266f2e02b395f796574355e", "11a7e31b36ca40968445398359245af0ad76b93cb986e643e602ca33ebfd8eae"), ("25267df42006801d404dd4b017cb8578da0f271eb80c3da95946186e2063850c", "0707319138f379015aab512f44ee139fd9c2bd658a5d537ed753ce92ecfa4b6d", "085ef87a967299f63da096a10ea6f16bd59c78cbd022ca34ef1c4e19435a1bb3", "0d742790fdb911a148ecddf5415ec8a9dd9f1b2c36b7285de24aac9d07e9ba4c"), ("07138dcee6f5d968122f43cbd5c0bf554abaf9e25903e319c378e9384000d9cc", "14f0f79473c0051d1e86690debb890f76c586adbb518b0af9ae8fdce9d490ca6", "1de245bfbd195745797e731189552784f34c5ab0d2f66120e3d51e85aba68928", "0d8671fc96f789a79d1aa2f4144eb32cd235e315abc884f1c883f4ccb7d4824d"), ("259dccf776a03e1a5149e07d5f509c6e31683a042628cf846b85830baee1eff6", "266c33b5b097f1ddccd7537235d097af04f7bb60fa597be85aa1fb9e98fa07a6", "2c506b1643de57bbf2e33ac181c8a8d8be4d59f58467d20f93ead7e3413e0ec9", "198933d70373ce29898f5c46be22f796872b624c913eb368a513ea72d8a9a594"), ("1fff12d30fd075cf2d11983d7518ac465509a686e32c23692f2b6d67d90f2409", "27222d8660d9602281d267e46737a95e4f6edc2dee672cc1296d12f4b65e38e1", "1c904cdc516914099850fd9dd046e0e61b8b4f8f97aa77e560449c35decf8508", "284a3b94e3d087b43bfe2cc8e8f306ba3a3bed5cd3a4c9f98620220929e77a22"), ("2e8cb6db41e41ca475c1b9911c046b574f4a5770b041d59e2c418a403e7127fa", "24a4be72bcd44a9b933fb6071c733c1e7c276a2cf36293a017ffe43a289723be", "1555e5860dd6be54ca8044030b7d209362b3c4ce11e74e7d8693c8fa7b2f47d6", "2e5eb356c6a2256ff0e7a64730a093715851c46d29cc3230e032dbc26802cebc"), ("049d2ad733e99f8928cd4d19cf7c019956b359de45093c522590b50ced7f592f", "102a737b85df93286fdc298e490386ae100c0cb0251f4822ad8e87649428ce46", "13d5dc80fe1d85063d01319312ece1ac5e5fb480d08fd21056143ea67971c397", "2a4e354a84a48650c87382f49458ffcf7ef4c6b252d27abb2f16048b40175592"), ("25e51ca7188d4046aa80164064e22cb2b8ba6029f66a1d9de4c012c10d94d3d9", "24f0ad9a864183a3189ccf2ff65c23281d21fa545979a3a5dd9762101bd1ec57", "17ed05cdf86d06109c104fbf3de20afb7e58f87b97e2c14e2ea8ba4b32e138df", "00644d18263dfaafa3eb5153b298e42c5c23aca4f0aab8aa2b775ec643a236eb"), ("054ad9e634644b31e709847880a42892974f4acf28cf084b3e298761fb16060e", "1a42e40a78aef2faddfd77f25f1bc8d734c87679ddff412dba845767c286c60c", "1425ff9c1f2a73627f19d9f29eb1f97196c30fac95ff32655899718c460294d9", "06dc657f239f92665f654e59d7c29373d1e031c4cbef469ad11460cab5193d98"), ("2319ebe9ccf6086ad13b5ef9e82da0d2c9cec8ec0f6a0e8c132e8be05c74683f", "197f3023153b6848a1c032b476af28174b13ac73e7da721aa1c703e7e793552b", "0ea1ce76accfd926215b0e8ff160d94661f7911a7b7e61ee835cead7c5fb3d29", "01eadf165b4f8a42115f2dd27362ae7c42fc7b30672c0be550ad9d315b4f472b"), ("0dc10aa837043b1d8d807ab53ddb0ec8968e190d1aa9519590352d2a2e9b86dd", "04584e7fddf31017f54e131a81ff64eaafa2f814bb2273e981e296bb7025c8de", "279752f92a46f646b6e11e85547333ef6eef5598a6d24f9a480ab504db1652aa", "18ab7040f864e751695ba8459719f4f2b21efc9ac5cdafb4e588033b4034eaa1"), ("2011d8a1b124216e69799330e6bb95dd261c0e9b0bf8210ffdd0982ab3e1f961", "25fae98b11d88a9ac437f3068b3613f00b72849dcfd7e93ac41c0a4e6dc8a495", "2df6117a68c13367662244b6f0eac3109ce75d9cda032451e43026438ca80d52", "01ba3a1c5a1809ce293596f639a64944dab526e01b52028966c99f31f35e8249"), ("247a3954cf2e8820adcc3d8eb0d551d4a7db03433d2aeb6a0b7f9bc4da93a39a", "08c78189bed05016e8d6ca8c51b77ef018222bf8597b3e5cfe1c1fe222b15f6a", "13b3f945ef05642aee4aa189c292d8a1918e7dc44f5161cc50c35d38402caf6a", "09abdbbbcbf06ebedaa95b3668a104f1c99dc5ec48d162742de96eac23b6b042"), ("28cfc29f4679249a3629c6860d5a337a30637cd7e44d1432c36cd61e6184a658", "233fc63d141c1b241d99457becc1d3ad042cd05374c727f927922fb05aa16bf6", "1fcd871d950a4d52f470a41de7052abe6888a967fe724c458aa0b734fd44592a", "1639d397652ed2d040bc0e2d0988155ed606d1fb22d2855c865f64a5d9fe38ea"), ("2cc1a70dbb38f7c1dc7d5ada913d841dad8331bf56e9d7e7f0c2b178e71d381a", "046f2cdd2ad1d2540902445febf4fa6de948af23478c74d12993b8f8be4e3683", "1b6990baf7f9463d5d2c4f558991cb36866bd2b66f54d26bb16631a4bc531f30", "0457e8e473cfaa6632726e7cb4f9ee7bd2fe9a2692f6b42c53946ae931883c7b"), ("004d6dc5c17e77e86b039be3cb74f021acc19f6b909c72816320eb467ef54cd5", "292b9c8b18254c2ac7e0105714dba4aa79d7e556412bb9f4773e1af0a3344673", "0e64cfed120d181927c37d0c1d2733596d4725db004bac9fee83e5d8241e3403", "171306c429bdc0510898c5e1caf0efafc40f46743d896c1c6a184b52a06fdab8"), ("04dd051811adc17554254775d9a13962c124ef4f2616610c8f5d6487cf9ea48f", "20a57915246029f8b5801debf2d5e222b3d48156efc3585bad3f0729abec21a7", "0be087d3030019be767f1eac65878d9ac989c335879ca765454f37ca37d210c9", "038416546709879d5fce92bd2a8cc80741c99dda47e9d98b9ed40152e8efd225"), ("0d22e17e5cfb5237004565ea4fc22e83f65f468d53f8ba2ffe80efd93e23c2b3", "135e82339ba25a77a35573e3bd9467a7d7e3a5952bd2b9c757f48b5ff8e030b3", "036994a038489ce782d0fe4517a0527fd198632f6fd38f215691f0f69831ce3d", "085b68d8ed09f1bc12b5cf20e105f99d1021ea446eb3f276c64b5766c9007b86"), ("09003d1ea566164007d1ef3d159cb8f5f500fdc912c4b838c2d46fc62c80333b", "2b835702f372bff7f24f2bc1d538fe11b3c0fc1bcb741d0d780b020ff3d56208", "04e2260047ce100e1e08d730caa880424c7a5487c08185f942dd4b1174cb0729", "01701294933ecae87f55e58f7533a6daa409edbe4b8c69457cf1d930ec795411"), ("212ea49ebce2e8975252f09cb3320266e44238546273556e823ec9738c4a7d42", "18c5491790146c092925fadfbb0df0b9113c29b5afe8d55126826fc0b592db82", "1751ed4ce0974169b0304182add81f0d5d6658f67ee789c8df5e61990e997cf8", "1333daaf4ef197d58fdc1deace53026d7c80dda0d18d4e68d553992b5c2b0fe3"), ("2d3c532b28806ca29d0810eb315bd3d7dc8f943f2d1aded293e254442afb7e29", "13e8a6eec7584ee73bb6bf7650711a9fca20fe65e4622c6f8aed929f3ad9f4ce", "11930bfc5dde82572a7d7f9046a2333f04221a14da01ae1ab96bc21369db52cd", "2eaf47cb849191b659229ed14bf5a11878d8ae3d8b57a3385876eb38580a1fb7"), ("0e290d743566d7c590d82430fd338a3244d88254e9b07438add9088c1342cbc9", "00f0246a13afcd0b2b23ee9c6afdb5551d5dbe4ef9a1339093f11ab17133d348", "0e37e8eda6c2f36adfc9ae882a9dca73e11768762e2eef9e1d58822f5627034b", "0eee040961f73c272dfea8ed71c2b4cffb8df60d17f2622f2aa246a3865f19d4"), ("033e58bd5ae437968d45dc76e24d0a9380fc4ce3c38e73116439717349c06126", "2fdf7f6fda689c30de696ded1ccafbc26d587c0d0f9e84c40fb4fab62a57cc57", "18341d3f1d445907c6363ff091b2c1712103b3791b40e34e389d28bf2b41af68", "0a9779d2264bb78d4ce5f4cf4f7856851de0f0a8548de49de16aa1ccab4506e4"), ("22157984799dfa5655eadb2c21171e3d7d9b4512cdad0096577a26855ed93ed2", "0d0962b69ca6245420ab989ece51847665c3ba8fde9e4ab700ecf0f9a418c7e5", "199151a0ba70572d453721858977d45014788b0a7b554d74da601a1e96b026cb", "08c59d54f85f9b2caeec48d29d3bdc54cf5979cc027ed8ace121d5713a8a1c4e"), ("28f61a72159dde47d135679ad360e72525582946d7b04ee68e367a5139b1262b", "2131bf5ee571b817c072745f6e6e77f09da9f34776b4ae3f437159c021519ee9", "1ec3a6dc632e3105d7d9ab88a45f2a43e7661123b3cbd448b43ea844a498ced7", "0542bfe8a410eb93dd8a47376a1c656deb676fd3002021194d0fbe3ea6c07619"), ("28e4decb0c69204bd4bf0992f550329e51b437aca1ecdd07d98a223204a4186a", "0f51ef35c50d72ea2ffd883c06cd0f29166787f2970b9a0e6f93993e208e9b1f", "14efa23ad0530a22ac6dd9b69bd8e8482a6dcb0d605607e699aa04ef19fb1c67", "26aee75547e799ff0874477f4954080496ca762cb0579d03552faf187f740b5b"), ("1793224a8cd097f20fd8bc76a1d922645393d18b7840b6a6e8fbaff3dd631264", "1e389d6d98386b42aa92c6c9246d0c379a43566f9fe84879d5f35b3ef9de9b56", "20dbc4a0c3e3a8861a258c6928349ff40f79484b33dbc682cd16edb0874eea37", "0cd9f59a44c4d8070e2f1c9e67e1a0c684f26cd50cfbbfef918e881cd91f7b70"), ("1581c095b89bc906d17bdf83338c0fce8870571a86bf9b0afaece5db7dc6addf", "26692215896f63310cb275f2a5e3d23310b3fe33bb0f591d95a7c5ecff76868c", "2862efdc510c8d75d3faa53a48472c0fa91d7f6f8607d9aa73c83a6b792760ba", "1a7c5ea21e0422ddcc76651fede941684ee1771847ef99138372b98b1d6739c2"), ("0806e6612d54783248751dc80b1a7b5971fe2390208cd370f42a1dcd3b606ce0", "0ad4ddb4775471b187dba27f84b8d29a56fd7d56892f27bdec9384be988d29ed", "2ddbba2377a29f2dc405b4e5baee428aa114bcce73050079680247d278439392", "1a0dea2937f109f7df8553fd72d1e67bbec9e0db0adbba1c37fb13ecc6de1970"), ("0acda7c4de84c272f7b738491a9ac9631813931dddb61bcf365328e2537d5a7e", "06aafb8ef5ee754130d9125a5554f992d7c2b8f88f392f6d06e62baae09a8465", "26b04ac3644197797b73414c720f3618c47c328207465af1c4417f8b6d03c0e4", "137c6a4225908a00638ab6616a8e7fa79e016a5584b41c3ba38b1d1df051adea"), ("2f4dbe42735bb01597681b1776c38f7547ffd5a14b48845337c5e41c1a89576a", "27f09d942b277dcf576539bdab94268b2c28fe7a12432bbe2b87577202cfc07c", "21180167e22f9a87af0fb68a7d7e88317f8d56bcc83d3446d9b32b5133fb4203", "001fa3cbf0374d107e40a2ec130ac49396365bdbbd337f5f9dca32c95b8dd782"), ("0cbe710572c9eb733872bab1dce75eb515acb0fbcd64c68068a3ee17b095d5f3", "23db9e38c71c0a730ab12a2f2e861287b0a494653bbdfbeeed8ccaf02c8a274d", "27ab94f9389109a40df5628def82446e7e182f7ae8a34c0a429bc630a0117d1c", "0e8c1608fc9eafb2e334b4134cb12d499446605e05dc88f6e76f7803ed3981ec"), ("127e35070f8ae12ea482ecf79205a12dc3d262b3db602cec2dd57d5f64fff0d1", "250c02db60507e19c5925911092ff26cbdfc5a61f1cfa1c601e4692364d90899", "15a07676881b20dea8d46d2006c6cd256b6c4c180c474f671cb4574bc199e31e", "178685d9ee5164861658cb1052ef409032a6b28044c18d72850e3c519644bc57"), ("1feafd6bf9e432d5471fba86da93a1a5dfdaf6fad974bc9886414e885bb44ae3", "030952fcc32203c463af510e06808607c1bafa256c037f56896fce52ec8156b2", "14b70ef4aa4497b04f2568b3b138ae2d469daf538ebb75b3c3c7928bb432366a", "2df457c5a223cb57750dabb149de7cabc1ff763ee900b038fa37c75712340393"), ("2e25deb0caa96152514b17d6fa9b9db3556cea5d78df05201e21a069ce293000", "0b26aa401a0cb2a2d628f3bd97bff2f206bfb0f60e4d5c4e4d67928ea56b7eb7", "2eb256064d4111d616405b51bb9b48d59316119674616d6f79345a23bfdc290c", "0a7e71df4ec63500258f4a8a7fb9d6753c3f0b795d16d8d06e206216c6d86cba"), ("24700301afd6d98720effd73c833ff9ad77d4f1eb5824ba326974d7ae6ed1c18", "0d64164df595d82259ccd6d49e42601e04d9346dfee09b897f01db23374bce25", "2e79d3aa4f0b0f9c3c8feae88e0e933a7b0d6dcfb50bef9a7aed725b16563a20", "1b9051fb3667bc248a1086a5ae79c93ab7726fd301bd9f4ed9e388bf9615b387"), ("06fef834c79de1c9ba977f889395fc1cbd9213c4a911f386f163f49855060bc5", "100912eb1cab94fdc606e1f59d3422cf12b61487258334242798671006efc86c", "1af201a7c1d5aa9c0d568ac1d8913d1a6526209c51a12f0af0c7efc688394e28", "0b9a0b200d213ddefba8fd2bafac277cf22e2331350c77e7e06739fdc85dc12e"), ("25e4aad62e382f66e2a558720ff6de6347814ec461fab7b448b20b80db4bf4cf", "1b80f076bab845aec2d71dce261bf09dbffcb3327aba9d0a73aa23534f2dfc6c", "00dc4f795e6d65dfc5c6d9b26cafa3defc4e6c2c5d2290fc7b49c71c2203c95c", "1e14eec00477bd891f45b3730327556bf396a86dcc61047129b6446457b83687"), ("04889a8bf7d493113e971032daa5a440faaefee56af4bed97b49ca6f0ecf6cd5", "24b691ca8bb2da4345073fbedb385e3c675b43825368a1d61f79f37acc7a4dee", "2cf9e6aef869bbb92460197c102749c5873c3600fa61ebaa24e7cde6b1895239", "1fc76bf5056d0b8cff002558c7c49081d2f8a848967b26d8331df1adeb471383"), ("2e3eddf9827df39f2f606005709f086d88ef2d2443da924aa165e19b3986fcbc", "1245a42c50f34c9753791462861dda9862718436ba1fc5ab2fb3ead9a7db3929", "1faf5bed38f8e020e697ff5aed01b16fc390e38aab9fe1238534d840da40ced9", "2cca9a0e80fb468306b30e150db30899281669715bd50598bd06d2818db08928"), ("06fda1c61a03232c41a31ccd60246832df1e177009fed38e87f36080fda137c8", "1ca5fcdf1773f05399fd787b0983e584238a427dd5fa09965759807bec3f9e94", "2615c67b759c37cce28ca6a7b5812e7b99270a89e318446c74ba74355f09de5a", "25a059a398045307b220132ad52eb010707846374435df70a3dfa9fb8cfef4e1"), ("04169c791882d5c9b0559c45f82f8271807e7736eeb68c62845ee26dced37ea7", "085ccda1bccd2dca93f4457c1d18c8fad5855c0bdaa02c1ba4c26c6fa5c0b994", "2d48a93ebdbd58a20b2e6a31393d2dede157ba7e89dfb92f74435fbb0705947f", "1e1dd85fcb1e0d11d58ca0882991232921816ccdcd9ebed26172608188cc0c6c"), ("24aba5fc08415485df8a405d55ea7aae371b395e4cd457cc6df991304542928e", "22b586743c94f43bf6b0b04b54d05862f60dacb8d74437eed5579d10b82d22bd", "25c81688c03b13bb886656e8f4cb7fb5dde2a55d5ce7898cf61bc47c90302700", "25998f7157978e05c9004f1483881f686b0cf84a300234c1c66d2e15f60d6fee"), ("27be12221a78f63c2be9c432495831c5a505566f23aeb5f2d383e32364aeb983", "031f2b0c84afa5a48ca7a4f541ca2ad5ef9c17eea3321ce1409196ee250ae8b9", "0a1ffecfbdabb7f0ec76af7c36cfdcd0775865553da1e45781b4ddfcd26e506e", "1c57b4de56873bd853709c73fb5329b11fd40e2e022a54e3ab6923c1590703e0"), ("305191a29dfba6081959af7b4c1defe583b85fcba381a5506eb34d9abe9b9856", "0ca050e0b7db68e962cd09c68b0825b4b9aa71eeea206f8694989425441159ac", "0400880dc54ada3db65fe5c412eccbefa455dd2192088909df336d59e1cb9f3b", "0a502c7099dad7ce640a80ea75dab9a7c3d4cfb09cb3dc63c768e5da4765da16"), ("1805e8bd17ec7358eaf8ca97992d51fb7c2a1c53b150fdea9bc7fedc169670c6", "10199a9f6878f9daa4f16aa4f0dcadb394933c1ddbd0abd147da4462b6b57527", "15d702f7694039d70954caf29a8849895ae05e15ed881d46e02ae365ea12eea2", "20bb172a851553cdb2072b39c4fae7312e7a4724e2848545387e614af05a41b6"), ("0068706b1874a2e3525c70170e790a55d5da5705445119c6ae61975ec0ce4232", "24c98d659db2322410d6c5feccdaf5f6d4f0240142397ce8e335e40b8304d3c8", "2091902ae00dc5e23ab4960161b788f1c21482cd7cbcdb096d9172f4cd11dd41", "2b9dd4e36ce0f14a41919d58284c3c960766ff86fd805fef71f24082344f3ba4"), ("0c1870b3c558159a6aa3581c968134d3b692d9be522b9bb584de83de7f281de4", "2551f19b0774f0f936f61f9da183da97d81b21ae106a2a3d67996eaf2f8ba992", "0e7d0b8cd135d8a2ee771204b0c5482f406e02bcb9eead391839bfc3b38202e8", "0dc2f537bb6f41d7b72a977c54da1d250ca2a8ba281960573dfdb6dd7b045787"), ("228f5b80619e39c375ab7d0946388c64d52b653f6b8c715055224a73dbfa31f9", "2d619316cd50b48f5679bae3677c9250bfd856c2572cc29b93fb93237df379ee", "2f6114288b437ddd35a80f488bf658ad205cc440180fd9f404fde3514e4aba2b", "15b84565325b41775cfa03d2ad9a3b7e17f99e3ad38fb0b44e408b19d6b35985"), ("02e59db79854a1b3be4038bbbd5ca78aa8223ce5fd5493c03b386a34b439b26c", "08b262f2c5a226cc1bc95b86cc7e56e864acaf851756b2f441911b34af95c46e", "0472e5186d7a60c339951816981561634e05afd27d908e4014f72b17ce304665", "11a7098f25418c12e85a4d584d53c0c7ec41e3a849e4b2baa98cc9e2a4481bc5"), ("0d496fab52fe005d0a8d07e24daf2c73db6f9e9c41c4f9890093b9c20e06246c", "0ab4fe7587d1b23dc5f2fd353362ef4d276d00c84c4078be552c619ecaacdd9f", "2ee3e6b1313c00009cc76c135dedf68e8684b7f227035f0351ab508aba7a9e5e", "1fa2030ecb370ba68b9e26ad1ec6e73b3f9ac636e382859f5a531a779fe97a61"), ("132124ff051edef51ac5bac8630c15bcf7ff17e942987f4e3cbcf71bdc32bd3c", "276df0de5af0ca19ffbe501f60fcf25ac1579c2b8f91e6913db98e566bd54ea9", "10df13651f497f2f0e3de84c6c7afc6fd8a00936456555a5a4942640d86e05d5", "031e8e53393c8bcebcd2aa4d99beeea3886a6ce6b491efd2ba265953c17aa3d2"), ("1b2d2f1bd8993714b672322f7e8fee3698d4270bec7c5d54d2f40c9690d03bc6", "2bd33a52256c47131481496968df2eee3774134b22c91c0ef170ec90b22685d3", "121a847d8be5db067540987f65175b23a5d5539a6b1c3f4867b718d24dfac2d4", "035d678da7758776f31d96667c9d74c266ba82dde421318661de4309af6e3043"), ("0d0ea737b0cd4806d3f8f1148a7df27443d453465a30f1468c4569bc4e048e7b", "0b9ef9e660a177293202763ec115daae5ba4fb5a928453a388593537abf1aa17", "09ed9dffe5c605e7a006d09462e571b34587a01f540a8fe8a4cefb519d72610b", "073d09242174196d1c87817cf67af1f9e468eccc1e2f7df5dd75cc135fbcf139"), ("05be2b3a2f024925ef94c4a6a3471fd6d23876e77b0a7ef882489c2ff1e7c7e0", "2dec184cac27a43a5c6fc1cbf4a11deef94efbdad077e288bdf7587cd3c17016", "0f57be1f52a5133e9cd146d3f4cc5f438fd53f06acb04104398bbca9514b59b0", "28f76becac6d24caf32f8a11332299505fc384992c33e37fbac14b8d7b3eb6b3"), ("115c3d647b4477537ddaf2f34a06dc683aff811722bc5dee77bdf4cfa03efafc", "2e9a197205c5cb2f1443afc698de23a044b51c6ebafa0ed26f797dad4a79ed47", "2ef1392053c2db11a34d85e4d1cbf01635a57c5fbb739bc5260ed89309b6a3b3", "2a1067e6cbe4d66cae5aec5b8a26c1944cc404124eab2bcea6aff2786827bdee"), ("2ee335bed9f4bd9b9d3f22704ab6d2c243570e96e819028a5e6384c32dd4e333", "1ddda5077479b14189801e5aa323502cb2e1496dc0f53a8094f5748f2b588581", "1a9b1fc1ac6c1e6cf12d3e25ed3016a4f751c068b8539908011e6f6a421445ec", "0c0fade159dced3fb4169184a39137e146b4fb94e6220eb13524ac3021e1c052"), ("03bb48fff78d9a452c26360ee14f78d102b3ac182ccee29f4f91cbb893536757", "2a70c2b6c34c4275b66e28167f31b179dfec2c3bdab3642ae678d492132fb6c7", "01a8f17e0ae89b0fa64494947cebdf4448847c9b0bd235cdab0c63b78722e2c0", "16901010bfa29b622617127a4c18c97c8f37e46072bc3e67e606a9b52c8c78c6"), ("0e6d4e894f55e5c03a8a0268806510344fdecd9e38aede840d4e05d87cb5c789", "0cccb8e644e7bc622b02ceab18095f05ac444fa3606e6d0aea23b0c064c6667d", "1eaae1e2f9884b878675f447e2c3c9f1eb7de81ecfe926da71dfea323935d60a", "088b02e21d003bee75a624de685f6521c3e2495f9326a772fbab5ef16ff14290"), ("04b15c7294917a2d2e352c265d733ebd9020ab84ff6a7b54e215c0f237289e25", "2f15ef98a12ea3ac3aacfdc5edefa63553b911183b5b060da0f533e00261d019", "0e2fd4285e6c599d07961071def1f095226c1209ca3a1c2d28523af7208503b5", "280c9ac20577d989cdd98d8111a0f5015335a4ee1db2fca460c3c7b4d136fd3d"), ("1094e366312a69559eaa194c20968a777327f721fa945883496973ea76b766f9", "24b91bf3edb1f36212fde806ce3828ac7812f1b12fdff11c6098096b89d87560", "12e9f58c366e8f32b09cea2116176b0829ce8536d5d6d3db126ab8663f3d79ff", "098c0004478af0790a30c0a89471e382de16492557b5865fb109134e018d494a"), ("1fb138721f68b82d1d6fc160321e87f72519d902dbd19fa824573f6da418b433", "10106f7e299eb8939f8a2929fbe974a6434582c469dc8cd9c191f035002fd088", "0730738548503dcdc532bfc58579e92591610e5aa5b3a443710dfb2e858b9f9f", "0366360c9a9b3e7cb860d85d44df023c853ec17533033dece35f85ca06c5c4a2"), ("1bc10caeef75ca6b7a1509ea5c057dd262c8cff19ae95b146be24fe4a6fc1c0c", "1afb13a41cd5f1c307f4833aa3cbb7d27cb33924659053cc25cf3510feb96c5d", "287ace70608feb847bcffe9f96fa0c4ad6afd2edc6c520f825ccea6836215e82", "09feb3e7cced0e2f29d5011df96793b4df6b3245b688f02d4b91add1e1b63e24"), ("123e54c769cdc616c40a5783c9208284b7ae152db2dddb383758538da01fbc8d", "075409d0e561d6a53146c595b6c8dbfb6e04deb056bb6f4fa013914af507e3d8", "1fc67130c28ea385b13371bce2f6f575322e0c93806baa22bff5e3a0a289fe39", "0d23ebee2ae8ad9143b0bf1e68209c4bc0677f58532597609a3bbc3f35840ba7"), ("012e620967b0af4849a9efa8c5a4a468f8b31540ef28c2fc529926c8fba50c4a", "27b45fdfa5dbb6858967c20225aabe2184ca63c6690281df7ce0508674c5172e", "2b2b800789cee6dfa441e38bf776ff1126a4b6ccc2747bc4fa7f71d856556ef8", "04c6f7457a57b87b1452d10522e5342961146aba333d82e94b58796aa511fa11"), ("272af0996df821184c82dabe0c4bca3a37fba3857546d8a8f94687d7f71875f2", "1fc564b99bf73a9a8fe0d5b8f8214949a196bf258c2c235d5e13d4bfbbe1e0dd", "1bbe192d41f4a3ff1dfa55bd6c42913a12dc86d3894a4e13a8bc3b2b0f4546c0", "15beddbb5dba6b5fdf20b50d88e451af89be2e36a347729c6b118cae48bd0c07"), ("13d1e7f635d1dcae2f0ad04ee5b4e2e379d633687ce0d406da8d6a974781f76b", "13f6010df9d2142e50f1650b0fdb960497deeade10140a87e5301f791d2012d5", "2d487bdd7d02171ce184a9e56e5dcf7afe4606fd993b6a81f7e521b1a87cf2b3", "28062ae46fe2d3b88571255a51a7bb293e7c1be190d3927c25136c0126b23733"), ("1ba6d3d964dea8a4f3b2c44a5b2f207aae361b9030de477d676a9ff6ee7ebcb8", "0a657c34db6c5f34fbf48c334566369260142da1aeb437f2fcf8f00cd620e893", "0cf057abc7b5180d6a5338b78b3c3a6dce9c7299a323421e32f67d3dbab21732", "03dd177be66e905e1f38d7e6d03abbbe75c81c0cfe3951c6a75181717cd78209"), ("1fae2a221ad41ed53c16eb1c41a0641ef84703994f9efd4a4b7ae8f71ecfff99", "13dc161f04681d408327c7214621566046af8c1c30ead51e35a9f9d26d46b3dc", "04fdee2746c0d614c415331f627c39a34c97049c1f1cae343caea1a97ae7dcb6", "27265d9683e87eb5f1609ec306b25ae3ee7e22ea789518ff855827dbb7772031"), ("07688ef7ec4c012158cb416eb6fc0912f473b7110e86da22edfe82f3fc8c02b1", "0c4ba802535bfba0415be5d462e0c3eb055e8810d210598a59c0d8d2b71e2ea0", "260109dc50735f7c9d3df529d8cc2cc1aaacedfcc054c877d432e2eb4caf8586", "05ea6a5ee3ee2a223645b319ebcfe0f75dff6d24cc90d16b682ccc8be4571fb5"), ("22ef9f69498f4417bcb616e0e6a324bc68ef4029cc1374a0aa826e44d6fce652", "02da16d345b5a967cc6c98615c37d82f5ab9958de792169c4ab5ec36aa3ed244", "197932e79fa79db17fab95e90fbca8f6e7a79fa73c29b25ff6cbfa88821899a3", "19db1decbd55e656856b78cbbe8ba7feaaa0fed0eab0ac651522928b5653e9c4"), ("176e2dbd8ce9ae9da229f0437d08d19c9aafa22cc2c93ab8ad7665f34ee409dd", "0476f9fbf06e320361a288e29cb3405f6c1fded2d80d03c5801ac8279df9ce64", "1d8280b76c37a724684e36f8fa5c80eccf367761e89b815f6a69285c1917d676", "12d5e99f60673ed874b75938e6df968510094b0afc56ced25622cb23953bb15f"), ("3034a5be55601ba4122ebf4e0a381b17997045ceb0fa5e6b032a8b6b4106a7e6", "27598b52f970dec4986da3ca8262d46236061a71cfd5b5480ccc480760c5c666", "15f9467ba352a8b2fa6cc776e8ed0dd92bf0fb3b7df393f6184129368160e21c", "2a9f18ddeb868bdd5081a4685e4665ee8b9deba52c081cb28351c0a95b1bdd38"), ("1d817a4dcb07fb439d8e6c9a387cfb412040b7025c7b026c7b7e5d10a88a704f", "198051c97b0a3e3116ff21f5f206b409ef2a99b2d5be8d837da776d5ab4939f1", "2b58226557f870eae172d7d0eb64a317c2e3c24d8f0b2282e6b16eb0d93a708e", "278c1428c470f03f8fed1187148159f940e90e4d89cdb656c91de6066b531102"), ("0917216ad5e9582184fa1c8264346a9e0d48616d03b52764623c1d42f1d653e6", "2e23c5ffa9dd08cdc48374ee9ecb7c221a9c9e53182e2c321416562959fae995", "1f9a720f1efc0d6e725bcbae9827d63cc7892eb9bc2d3f0011abecefc63cbf66", "03d8d7970f311e875f43ce045aae794e83f1a8db12c0e95a6b04ff72c75d735c"), ("27ff7410b1325a6e65329eb06368defa9ff52ae787a4eaad9560b1cc596751b4", "0935025e3c2d4751ffc090bb3dc51e3ce4cb8e1838bf0d67469746c75841ad51", "2d140507b210987dc895396bc06e8b6ec7bb6201b3959825859a18bf6117b6a0", "14fb125d13f1752ac7ed24e468e17101a8ce8ffbd5098abd760fc37ebf008c3f"), ("255ddb24e55d2979bc5ec0087755760b5d2192e778dcafe24fe26352bd532d1b", "01356452a0787fd42e4aa436d08de95b4a60d19bf31bdf537a10edddd33f1ffa", "1c31bf83ffd71f5e9f40f54736653344b6b74ce5b4f0154da9586a49cbe5566b", "1c752ef31dac29fb9466060c2fb40a8611cb76c7dcfef709b63c65ec166ce579"), ("11d0fa5fc693488c0607118e5e96248871ac18262c0c8ad1596bb333cde8b22b", "162b8859e668c0457b5de6c9218ae6d0c0939b99d5fbe880ab040edb6eccb590", "270d4f86ce3f7856f02d7a2ec651bef14b15a523f888a82a2d15b1c172afcef6", "20a3dda0a5d9118e3555bf8190cca2baee0c7b892e5612fb0d2a8aea962a04d6"), ("06223c771c568507d5407ca0e9d0507c95ee44fcb31b7dbe15da80e92486ba37", "21ba57f8286ff684a38498db7d76d43e9894f93be2d0c5029f05fb117ed45c3a", "196dada7da30aaeca13f8d04e5345ea3eef58a921002aad436d422f33972b870", "0dee3f6bd04fbbe0e2bbabb11590e898082ed219232f9ea405509e969a858c2b"), ("2b70a42d5547ed10681dcec9361d73c4f76d1552a477b555444071c20e4834f6", "0b08b3b5a47e69342fe3c4f8ee2b9954d5afd779f0e038deac7089bdcdd1c42b", "11904161c6c3402f4d01ee53ccce5b7a6a71557c8a83b478f7480f7892aec611", "185732faf3690d06c0332a89a345bdc8da377579e13356a729bf97dc916cdaa6"), ("2b295e366db8f9d72402dab5fd23904a3350619da572cbbf21d2d920263ad5dd", "21b35f725c6c701a5cfe48ab6948d751867284d7e17a66045a64f1492c954b3d", "13be48ba5ba6ddbcdc6273fd271146f4cd76a6891773640cbb13ea4091c159a5", "1896035ba6446c7a9388af56e61701f190e74556ae8c4490684f214b96f97ac1"), ("2cf7b33ab247f180fc57a9efc7b65d18d094269129f17c2097422cc3c49c6082", "0d57adab7c680a32f2e216f2b69ce6c46b4af376ec57e6351407cab6555cbd30", "13d48c5207caf64c817c142f8ad8a87a29fafe091a5c36ab943df9d2b80495ac", "26ca4f90d8f27bfb33e4c7b28420fa1ae8eafb57f9099a50aae6abf68b6688a5"), ("1272e793ac2d201b7453a4ce41b1e26deaf8cf8f1fec318c3fabe15909d6c2a4", "1650676c447c7b2d2fb85daa442c0459cb7603ef5dfb601928cf2a0560905c82", "2d41ae77a5d68c257a85731a1432af1ce013b29c7edd4065dc500c7ea2b8691b", "2f4764c99c2424319e4af10491b9274fc62b280b9bc30eb82320e8f5b15d4ce5"), ("020c4a9484e16a11bba22c201df339edbfeddcdc2860d1d8ce8f3cf154423dc5", "025450942209c821dedf31560838fbbd9e257a06009129bb121911bc67a3513f", "111252c49694a23703111eea669082fa49a1bad36ea1435a76bede3d46698967", "0e1f22197a144dd133fa53a0a243babb7226c1f8162ba92e5ac9db7dfbcb149c"), ("2cbf6b1eafcff5dcf3313c379af86634e1cbe106085ff7bb74ff8139e185bbc9", "2d6cb29dd37cc858b5260fa93163517bcd3188fe881ead8648083dc74328e47b", "165b42cad7bc2645375d16a4b2a95918e2bcfc9017ed2fb63bcdaae9cb17060d", "2aa53caccb10a5faa940c0eb4f4227b5851a357ec3d4efc75fe6cb4be8ca2f01"), ("2f9f9df0e837576a0073eb7206d4eb9b85acb9ad95da7828fc65ec2f3cf9f38c", "0b49b4646becd8c44470bc49fa9cad4577738ce94fd71b75d713a8ad97996bdd", "2246dbb02420628a660a1d6068091dd3bf1a5c56e38eb820c9efd7b0998a06c1", "13713c6cdcfe1e17171ded93ec58adb57afa28971e6580fca4e5a83689eab698"), ("20d93f42e4f11162cd593c241cc4b57fd409f1a4ba1c00395816bc006aec0784", "175275b8daba4b7a6ddd91bcec2a5619e383229db3541a9e761825ad8e17c6ac", "03d3416b16ab17a5eaeb26448b2b21ddca132337e4eaef7c0242f5f804ab9364", "023df0d2f7a6770e308adac724cfa1c87311ba08e862f69fb9e411135664d761"), ("274378fb3f24897cc891e6ed549282c32503d51171c8768c8f11959eb8efaec9", "1a4f2c75dc1d248225b3fea6356d7badf76b6f407dc7bef02f770e8aba521b91", "20cd4464d65923ab89abea79148d3e197a90691f9bff6330d6d100921764e235", "022ef025132ca39b2d5b40c918aecea45870f0118f432dfacf7e2b7a19b93246"), ("0ea2133c1111f22fc56d025d1c0c22fc651e915d10feb42daf39f2740520687d", "19603f6885a64cd53444ed64ba9b95269382dc70ae17efa7e652e6e4e27f084a", "061d2f2fc7d200ba846531ca40b803631bf478ba4a18dd8745f494bd0de803a2", "276544f8a2018e2b41af7f73ef1a9c3b619d6031ff9bef51ce4b0a36e4942790"), ("171e2e338efeea48af52e298bab6b2556edb83f951c2b9d828d5433481bac071", "25ac58f377aab8e3a580181b021bce414283db5b7e2180b31ba81ff5aed4eaf9", "219d89e182d775be6796b6e890f5471d5770969f93d446645ae355cb37934d70", "17fd4a8a351d5e6d9947433c5643ccee07ac1936bcc97644a78646249ccdc5ae"), ("0af789167b0d5cb129886d8d8d192f59ba15d255b73ed5b511128c99cb973ebc", "0134266a35c2996f59c6e5a27e564df70b6057f3e7515adda149714e0d5cee27", "12712c47fa9972625dd88dbf7afc3f0ac98bf6c7b9b27fad4925b3a39054b54d", "00c6546999d995b4976f90efb23854f667c3bfb03f81c8a7c883a53d3ba35938"), ("2118276e46c1d6ccdcd92a00ddb2e6e16e457687a42399c16c222e0d2470f650", "16ffc17dd1af98f822d2f9eedc23bb848b7986ed700b15534936c08449e461ba", "1b3b4884654fed7a9061477939b4e9dee30b914d06f4a6410e24be149d0a749e", "1929c4c65e9022b2c564eaa2adee23aa64e4a4633336ba6adb6666455e0e58ef"), ("29afd70fae4fd8f53372fdea351f8d6698a82f92e44c4b37b16cf9ba5cbeff9b", "23bfdc8271b28985edb61fc5cb04b8a1598668404069a9861196cae86a032137", "1032bb79a485dfaed157821283840e4020a3a771c3deab048a672a274a024c25", "0ff5f21f3b744686ef9a796b82912de9eca6dfafd89039645af9128d7796c693"), ("0755063fcd9ea8f68e1ac4a57ed373472c180ef303777cbec5edcfd002fb5bf4", "1abacbcca376894fc4b83fe2fd69256ea0723b09489776b22f825f6acb369179", "035ad25404fa69a33ead7d723a310782b75fb222ee45b5a4e9ef928365297a4f", "015b523afe304f9fe221bc35e12d35f8ba5afc2048f814e949eac067c803dbf3"), ("087cc8834a125bc2f6ce9f86b1673547c119d1892e68cc721a5cc54ff1e31f99", "191742fdb24f599e6a949655179854b0fd1d238b921c67ff343eea64cd5e1f9f", "22ee2d86f0c13f5147470c42a2fa8bb58e65757988544548de743dbe5773641c", "1fc65e157ac05dbf4274cdce0ebdfc0dc3f7155d874c75d0e52d9d4cb7f2d68b"), ("0924ebc7789c5946a59343cf4153b5a77632244bae1a9b1f3867c1da332e0601", "2875f4f18e704e8f20a22f8d6983c63b92c55b9db02a54c43b6fe198bcc37c6c", "09ae4f73124e936d560a312559e046c539b4343990ed4ed24cdd4fd82e96efc0", "0970e0e7f836375abc9afd872fc218563428ebefa9881bc369c388d93211beb3"), ("13810f51cdaf696fc2eddba35bad5c8f0afaea763628e0cabaa10808b037c0aa", "2be80a8146ca6f350c3210afc4951977a04c5207c799d65938c570925eb35bd9", "28d05db3a42a1923894a767728a226d2d14f6175d45754014f9c62ad9d722509", "29037891cee6b3b778b51a2aab03d48dd486586c6b0fce1d96596294e607c756"), ("1b9ea306787c1e1abb84d6ada0dfc67a7b7386259491ba12b6a1be4465e97bc2", "1707e7ac3507a6d0a9edde26e9599f782825ca22c58758ab65c809d026f6c2d2", "0ce5176070d19cf7b0f4e5092f4248ac6e310fc39253838d9dc4f72055a6e874", "11148e5c87d6fa226ec074b57dcc52aca6df1f4d108ccecec24ae9c52d58cd6c"), ("26242a9ad8242d693349e21fd0a7c4bb76f3fcff184a09d29f4ec1035a81326e", "1a24e671add6078c94dcf7f2962669596d60e8a101bcf39566ef576825ad40a2", "27c551b47913b9abdd1529664d84472a408b7f167a696173c1914c20bc37c62b", "1dd3364fca43803dd9aa43d5dc3bdbf17c53544c40f49b60fc64da23693953b0"), ("297f12030c1939735e18ea10edc2eee3a9ec85f50afb48f1f0e854bb06aed1e6", "02e30b96e7e21fa627fdd01fbdd72907cb353b432a7568a263822132f68381b4", "1495afccaa83af66246248159e8376ed2662ceed9b6c87696e583fa5bf336313", "03ea7dbf5864cdf6a14eb4b77f9e6c3d93add9d7f2c899580abb3a8c49e072fe"), ("0ab4a2e021b12c14f1c5be6cad5e6ad7708bc2c8756ddb8376c352592d143413", "12904d0241c909d49f0873a930800e445333f5770b2dd5c3d6a6ae8a420877fe", "0dda329ab83191ef5ad598f5b5e00e2cff401cc097b8492f2fa5c374a273d5ab", "236070f7064ce23a88dc8916f37457c646b5df2c10fc477423412e082e7cc716"), ("18367baf08997fdce43c120e25d69508911fb712d8fc14ad0c6d98961cc5ede5", "0c62bda8cbab34dbce7dac4247a6f41ad80113d5323647c59270b7b281e73696", "1813fefbdfa547d727db5d90ab8fa19cf4b233788af94b0e1ece4c3da2ade814", "24b9add819d4d084dca3ac2cb018d519e9e5e30f4e0bc76bd99d45a503515807"), ("09feeaa61dc7fb4da32967f95036446b6fbb3903fd6af1cfd0e83ce46013a412", "08e059ce1fc8c4eedd480eccc7fe43763b4d2e3852fa39336b489f06c1ecbd59", "27f2bd715361f08387a5c2ccdcc360c64fb5ec9697d0048c0f9917c4d2650386", "063b90c0de309c0050fba300cff2d42889c29f5bba9701381458b267b73833a7"), ("0e8e6295e5b8bcf716403937db57bf492bb8fc41fea27cef528ea322f8c92ddf", "03759a1a99d30dfbabe8f9968849db533153642d7cdad07e84045ef55a694e65", "0f6b08bfc94f482cbd7817cefdf2be7942b24d2d1ed25b4941f5f383e48a3205", "29480133424a8018b9df87e45aeebfb232af66419c137be9dd32e94bd9cca3b8"), ("03ee1fb8819f6213bd51fcb946a9dbce0173e859db1dde53e65c0cd4b826f6a7", "1f262e54dd1178273878598b4fe8c27f6669cb54a6625f50db5dbbf37cadc246", "2fb2ba141cbfd307a18ed7668dda345a6ddf6596df85b959cc7555ce42694593", "282e7fa16b269b76800855168d03d22bed6dfd635d1ca2c59d5614330fb5c52d"), ("079b938989af026dcc60822efea39b272e2171c180c684c990ff79a06ddae574", "280836349a01fda15c873f04e895040bd2f6fb61876ea96d49547acf6ffebdc6", "03da2437a983f49788c60903ab84f29148159813bfa74f627b3fa5a0d557514f", "1370c36fc13c0d88ac4bff189e26c3d341ff1132320273d88febe1083ec17c6c"), ("04195ce54951a216657d38d1db56c5cde44505154ec2fc7c9d726011f6a789ea", "0c7f418de13a188267818e8bc280e8551336b6bfd0e5f7beddcd97839ce68cc1", "15ff0c5f63bfa3afa71b8cbf5bff33a97a806be04646ea33e11cac5f83e28ed8", "08171b3c16aaf6af9fb1f41f5af60359f93e519bde799563b5fd59366e96da6b"), ("288beb23e7c480a9d691247116ce285d592eb7ad92a56a677f80db04eb929d49", "0e7e7318b8a27061e5a9ee57bcc3a62bae8752bee76380e4f3c6d3fefb13457a", "18e293fae8642c1e0f21f8b8c4f5798aed21dd4d98bce32ba87c25705e284418", "267f8f4a0901529dfea3ef98d80ac4306abe7573b3b90e1c33d01fe9b3ae4bad"), ("0ebf073308dc8616186d0db73161c1f53cefb07a7587b9564a9e68c75cd96a72", "2389a5661c0ec4d803595280c2598be67ffb49f70ab14d7bc56c803119bc8749", "23299be4f777cefb05b7a8842482a5cf33c79e7472934640bd057b89e9f6c46d", "291cb61d4150d0078ec158789d896913c22e03dc873e3c61f33aa7be9bf04762"), ("0e0c75a264011f0cdca33a5e96f1331e622cab80c24ecaf0fb421c295c91e34e", "04493b3a4af9ff271489b3515529b2e3484d78d16638d606e206ea82e210835c", "118b248a9c045a58667fd9e9285c0e6006280f34839ef23d001f9df30ac9ddc0", "2a6738da41114693f826470b3939fdcfcb95607b7eb6cf17328a00c985705e95"), ("2c367d78353b8339e47552322d7498631a7dd714f5bcccb8ed1b47279dcc8661", "21b81f84716a09c88e0e8395c8f19748992e429a318480b8766b7abedcde62b5", "03415920b62d9e34bce04e18e6aa3c8f2caedc4c4720a466899679d73f4c5b38", "2795c48436c5551465faf59d740851b10edbc9dc5830c9733327601791bc68a8"), ("0668d247e5f2dc26eda7e79b4482a06e9c8ef30563eeed3a5fed9ecd4b4d8858", "2aa3c0f2438f6f2b4340727d7dcee97c9f9f8ba516a07bd483c0ec5c06780170", "111f8164d2b6d2cc594fb6c28cb126cf3fba3bec8552ceb0f2d89ad905bf6454", "21ff85d719ac99d88db21147a7f4153580072a820342944d273318ccbb5c3518"), ("14f174c3aa5be09d4de5019d965c0dcf70d46a5ff6a3404bd7004177c9d05d17", "083867f33dc3f373fdb0b903a1cbd8e4a22b20145947b09202cdd2369e8d526c", "2d85efae6983ad11d9be58eea01d094df681baa57bf0244e06623f4c329c9af4", "1ed324e7ed2db9922991c47dcfbe5ef9aaf71077be3755a2c9463911d99649dc"), ("06c912e8958db70d6af1404250e454775b7760be5cc9f7add9010b88ac5a5b06", "0344c2a95d13f246dc63727c26d0ca67cab1edc38e677bb7d719e3ec3cc22d7d", "2cae0fb66222a5fc16fceff2da4e1b00924dc444f972f044844830c40c538302", "0804320a5f982226163f275c33562dab4f797f965faf0b82469fa82cd0855414"), ("2e106790ce3f8f0df0f139e23204e2c1336878e61606709ae1525e62a610d6cd", "077ff651e0e3050daa79218a73e120a64312fd466cddfd6e56662adc0d3e4294", "1e1352fed156687ca6804796b4f7a4ccf4be8c91a57798e965e6e8e5b366ed88", "24e48e901f69ed50741595c486954969c6cf06446a84f89d037ce433269bfcfb"), ("0bc30d547611815058eccf70ec233f4daf726e93805c8be5d4bd4e9104a80b82", "1be7c58beed1bbaa140b6adaa49fa629720d10194573d404c78d3612f599a5ce", "24a9b0cde5d705fbf5d00c62a8f5a189e6e460178c25352c87b63b37d4a03f1a", "1fbc1c406888009133abc8c3bfe70ede5772febb00b13121ad05816fa965cced"), ("0d3be2b64efac14a80193b9b84098849f851783b925bbd8d0632b05c1a0803e0", "0cac5e5328c57b946cfdc4b64b763e070b8fcd870838f290e1eaaf4199107c92", "0519f5b5ed3b53ae50341803e66b331829e7103651d8f0b987d4bfd28c6f5094", "042bb721232947362cc127f267b74f9add59bd9de2df9ba49d998652b343516a"), ("29c8eeaf7ca936e12fbe347dedf847a8af755fc52dabb41fd96064dc364a49c2", "2081ae4508cc0a210923cab3cf64915865fd1de3b0942876edb1b9b61f223e1b", "161acc03c49a48b0c6a44a96ce07ef4084f7ee2ea9bf059d8d1c7fcce048e92b", "2dd158cc81ba3bd057181c1b60b5c9ccb7289b2b7702577f5c372d8dc30d4496"), ("11db08b9a92d6c1a2a01ae6bd9e1870df3140ab7d333b8a11b84009e7dd11d8d", "03d039e9e259b7392a474a58e2c64a94b90675a905d100053c8e4fe7c8b9f1ba", "106c91e3f0f4c2e6c07715c7e55b7b2e9436f802eb3ab162f9785b9f9dcbbbd1", "07d20811b4d1ab6903c886110ecc8ea4fc2772d77e92da7b1f9bcc3b68c7df49"), ("2b658e4b2ef718bf887a1c89db08c0e7a8cbb19cf8a60ddf1bd5f679d8e2798c", "2c547a8058381c6cb1860b32a2488af3ab93b6706a4b450cd8a8aae107cc7b87", "06944f85fb3c757e96d6ff0c36ce655db84b30e374cf4a0bdbc5656b7710c9f6", "261b5f05f27e45b998b51d1978e54925db4889871543c42a2593088e1287a158"), ("28b5102a8bce1543abc4d0d4fbbb2382a43ef888512665300b7076a5b3a4970e", "2c9136af7bf84b78a6d74df57cb24c1cbb65018f463855a54f9000dbff5cdab7", "111b3f6cf7286a9aed4c8d6acfe7a5be2da3f50f4a015f968a4d71d35425c5a6", "2decdbadb5f0cbf272d280a54f55b0835d6ceb22aed3df2fbb49eb5807aedd99"), ("14240121b41c8c481325833f1acbc8ec92024449bef5cb9b253c588e30f6452c", "300c43a00521f583560868a24a53ef808e9ac22817644a1192a7091b3c6015f8", "27fe7aa3cc83f9f01d14bf640f3132479d6010cfb26c36b00c7b6f4c0a184639", "265bbf01de75a30482e93d023fba39a91fcfe746e108e3460d4a9cf3f9252fad"), ("17522eee097d3b1e7a20f5b7fab7c686c4fcd17f0816b2e45082d079479824fe", "0dda32c724c7553fa91b2774a3a4389164328f95741a86e761d8f553c31ecf94", "1da4248785d942cbacca830002511d4377c8624da5390f7d70ca62e6b5fc315f", "03542ef70e13fd445bbc31784b97cd838c57e509826a0bfcf0c2b90bea81af5e"), ("11896853e1977d3c57cf3e8bc1c9a09f8dba242423b6d022c5d73c425b29cfbb", "0ff72242a5e7ec6c868ecc8b5349a38f369372ceb4bc6b81a9194ee5b8efcba5", "202143ec0d34f18a3405b1bce8afc27c5f262a9abbc311af610994833c4f3715", "0820b57ce35b23f77b2f8a5a8b0a222fb6997c9082fccba64b464ad3838bd987"), ("29a3642b50d6704f69dff44564e704f626212d89c38a3029998a495b5e93a0d9", "22fbc362c9707a0eda9c8be93be61c99aaaebcc43d16cbb72439881a4ccacb8c", "04891db5f113fcf6f1b2de19ee163c4011e0138949f06b5e55250b3777f59c1f", "08d453d8c5f25d4c6ebbd71e2eefea81b9f61be9a688d5088d568f1da1576985"), ("092c6cbc2652c7b027a49080c8dfaa5882f947c7d6cbca3c2e20e2bcb01ce6d6", "1264ef9efdd371818b2f3592ac71a1531aafc7475b4a3de46bfa5cd6ac530063", "1066e38be3e660b8b371bff149382b05bb13de079f5589a3dcbcad6233dab507", "03344671fa6296e979a859110362ec19725994d570ae6ed0cf56a76dbb239189"), ("000bb6ede8382a0186d833a0d5a459bbd3cef26ec45503fd0c3e75cad6a50438", "019e5e004e8029faef56a39f6979aee897e5993834044fb1207ae119b505e763", "2b99fade5bee290af6a7120b155e6665ad1139a9fe1b664794d3cc0f4530aaed", "2cdab44d5ec961350b59bfcd5fe9813f967a8e437eb404f1573755d7b2d48ab9"), ("2c5b4e5b79ba6130a194baf619ba65a259d74e9a1a6b5cb707b8a1b7060163df", "1075d7834d33049aac9863a8ae7d408268a86d71f9dd0affc14a6c3d41f3d5a6", "264a6c4ccedcf792a944a2ea2cce14c61c7e89b6963dd552b02167b4253eb63b", "2f2333691032058e04a67060df6d02b1badf1cbf640846a84bbd68d24c760037"), ("280a47aab020bef1ea24fd7bd4c6fd57264f58c623b9e4b52fb4d0f8a70c5226", "02480ff2493678a57f87f6ae272ab93af56c90e2a271bbffb821f0bd603b1ea9", "237f2a2b084fb8b5e6f4ccaab1119cc2d73f5a1a51b64b6c3014c91aa8464b81", "26c9ecd504ee27ed0706e5218e6d4068b9e71a70a468826dabe73bbadd7fdaaa"), ("2e8178731539b74c5ca53bd9bcf00621e44b2da2dacd16f345b63f6a793bfd06", "013350bd62c8e66048991b3720351eb5784acd552fac7d02ded47307fa4e6452", "009778196fa3625752b04d1a8dd819911f39d235916c987f612e0c65d1abc7ea", "0f05c314227244d105d2c560bbaf20b304a4c470c296aaa6127d9293ce449d26"), ("22e07c9032ec8130127faf066b75dabedd8588d53ebe9d467bbcb0f07f089495", "25e68cad5320afc45701abb741b97e115a5a39f3e9e1062913a6ca9ca101c4b3", "0d56bcc3b68ec55dbcc7a102b4e9ebe6e582dc6f49b77d60d926347e5c7a04ee", "211282cbe325a1d06de3c449bb789a6a3c0ecd6b64c0630cb23c46911b4ea4fd"), ("2a5b9291455c253b9849f84afad79d07c9efa3620619bdce044fa307b82affe2", "23f641edfa1fbbee40202b487a3a225b14ace3a96a65c329d586fc5fa33cd9f0", "2db86ed542fd414a139e9393107078d317688aadb64c39067ffbf8b02ced6db7", "0b7941d7d0f8a370928f4bb2a786c16c9b0e61b50d867dac93a3e5f4a05fa42b"), ("032d49576dc40dbcece917a85cd146a2866eeb9208071353ab0b7ae0dc73543e", "286031133066add576007534b143aa6d8c38774d7dee8a30d43720870bc11ba8", "2ce5a4183f416750e7fa34676dea9eca05d658aa8b84f3c9213b37f5a8a8fac2", "251a1f901f2f5ca2adefa09dc665f5f5705521ca343718225cd65a6247f124e8"), ("10d503b3481cbc202b8aa91ca383f882fffd7401bcd3dc92ecdd0ddaf6c1d0f5", "27b77e40c5b42b04393a73dac60893613f4aa5d5a684ba6538026c1db837f93a", "0033f4e081faa08970ea5e0cd0c45eed431b59c18ecf3d6dd422ae3c5bc417e1", "1d31da172e6e56345168ecad36e439239132dbbe713afb038089750a0e40278b"), ("244b2ff9c6daabb39ccf6316684c48fce3cc5a4a4204e8ca4edae0d30fdea500", "174215ecd2a7378fabe9e3ae6b6a3f4cdd5725ac91a7deeb28b9952c88f0d6ea", "1bbf6c332f7855911003d6807b7439d67825a0f008f181811d64ac6571c8690d", "1139b93d1040b4e66a54b1f28901aa3d087322b282c88c17fb73a5e35ce4c8b5"), ("06091f7be65c32ccbd6f6bf06b5655ef25d3686fa2d6cdda63a13101f7dd5e25", "11cd113d8a4f03ac73cd69d78f27aa44463db5144733e0ceb4f13b2816765684", "0770d6d2ecaaec972e9b2362bcc8090ab2a651643e00427193b47cd0a807edf0", "053e45f12d1a992cfed37fcf9a034fccd90a2a4efad50a128605fd2344165b13"), ("0b1f0ca90ede116ae7498c318260b091a3ff8d1809b6c567c4906d144893f7cc", "1fb030bed1aecdfa371f7baf14176dbea8eae1e01192aef7be5751b069b7e904", "24f70f34da4534f137d2e7b1a1560f79ab2615c5f9d24d8279dea643de8638f9", "2c6c11a51ce709975551d685a824e6c267633bd4255d82633157401ba2165261"), ("0dbce5f9aa5c7db7eb79f7b9edc612ea2e08a6dffd82b6ffd48006f884286544", "106a87c5b9d71842754fd5d3138522968521952b4bf500df3957b91a68de640d", "20f5f85ac1f90d0735fcf91566daf51f79381d32f29f8a3cf88f3c71955e0b67", "0138a18eb92e0e5b4554885c3271d49116318d5331816341a884338bd6786821"), ("0c67fa0b7bbcb78d5fc7c065949b5a76a94a9e08199302b7ff761742ac31c1f5", "124e9a338985f5fff4bc8b2d3974504c9e1743e9c4d49b4ada6db53b06fb8707", "2ef0e0861e606bd781554d1915c9a8a346c8a9255c7139b6de432f01f95c0c5a", "1b8910706f8b25adbcd9a7fbe39a9c489b78a163db597dc0409fce08ffa9b1ee"), ("03805c0dc189ff893759edceff17c093b2c670572215085ed8db964f650b4c37", "106f8859e3c939b26c5ab6d7ab594585388a7e62e364c076157eef36884346b6", "14a0f5643da46af54f5024483fb1a27b18da2b7da80035f5c586ce88ac81f829", "1bb2b6798c5fe5c8a737b2bf68865d6ea4ca9c7899da1371c597c61566f635d5"), ("114fb9e5595b4b2191478e84849a6867fe9512de7d938612520cbca5c77f148d", "28e904911762ce5a9f047144689ed5d44615d9ddaff3ae47b5a640a407328cfe", "0091361acf295a2e414ef8388ffc08878136bbf38e8a54cf2cf8e8d495218d93", "303d5f54f2dd90e3b862d82397e4f5e84af36de6fba365cca8fe0569d6b34616"), ("030659f4ea1ca52a65fa53019697c91209f82b28eabc2ce5f014a8e10a4c4690", "1f76cceaac5534efef8f3c800d1c5b14b1d49ac47004dc60152e2ab9b424d8d7", "23348a3208366c679d7ed3f1d526a98f75289908432dd056113b49fa802be2cd", "1ecfbbf229ead0fe149d979f0f9299df4cbbb99e8c5d4df4d30c8e0bfad08be9"), ("04dbbffda7b167b61d0006decdf7403197ee72645b37474339a889bd3ce96ed0", "24d7928060e3cb97b63daee5a0672556de4d3b0f68345fd1d18458870654c10c", "22fe16a415db4c78f380c928f99e2896845fece5cf58360a83f81bd9ee45f367", "16c89b159ffd6676d534a34b1436544c8410703f637e84a9960e286929c9c907"), ("15fe54d6f799ef172496793b9e5aad02195bed0dd1a986eafd2545c318c63eb6", "0457c881636c304fc18d7c5e87658f4921993ed85bf518a0dd1fd7f308c68164", "29225134510daa3f0bea6567b5667df82b1f40edbc232a7793257b8aeec07a2a", "0b86160b67a7dc64ad2468f95d35c0ff3b82a57a752a0857e6c19742374a5d62"), ("18be5175fad2ed774667373429cbdaaa23faf2a845274cf9b560fd4672ff8c90", "0cefe1b8653ecc9ca9c60787408641a7e13f6ef70ef132e78135baffc389dd7c", "2e9c2ba6c4a14123cc1a4d008f0cf58a81cd98afb7cde352db0854fb51511483", "074844817fb02c60e65038d115891aa6b81d80a2ea062f5d64b14ff4597d8196"), ("0c6cd8ceca4aab2d03ab69263ff734f2de4265086ffeaa178ca5ab23f07c7ad6", "228d573f3de625059b87e2d4fa32e4570ca557a4b9ebb3349b1b06eb7b3558a3", "26892f53750a297ede377028a45267e5e01d8e20d2afe782d7e91dc47c820bdc", "16787961dbe55d5cf0a00ff169555a67cad6b521cd25291e981cee3dab1b7a39"), ("06a2f21c16146c7991fe2330c3fe22d24ff768a7b94310f3bc7973f9028a3956", "29f520fa708ec35a82b4bf1145005af399c20e8672cfdb3634caad0af00499fa", "0a1f22688df6c7dce6f6d51e154d565aab26befac5d9bc26f1d1422e3be14278", "2c69dbbed31d02347250672bbdfba251b81d517218a8cf6bc3a09172faeab01a"), ("10b63bafcc0257671a80efbe782f9b6242df21950960fd7abef3fb22072b3756", "12406b1de01aec051222e0e2ebb7efc287e378a7d6d9f7d66b6dcf0bb46fb350", "1d5d25248ac501a8a4d7ad4c0b632e1c26bcb1057842c0cdda6a4f3d5f97ba21", "133336bad1cbae454c355e36e14183eff4d1d5cd0d85533f152c9253715f7230"), ("2a29f6021c63ad02c48fe04ebbf8d76aaf691bfb84dd06cb8bcbe83d0aafb389", "2a521990b90e596bd7a4e18f06fb6093a028f36cdb468c3a4505f23043650843", "27b348f870ef461213e53cec829a2ceae29994123474e8fe126fbb47dc1d6e86", "05d58cfd069017ce2b03df7a86ef67b309770a372b9404cc936f1f4066338a71"), ("16fa2c52d9ede2eaaf9c19967355f47dcbe3e3020676386bad419a6c2dac2470", "20cd6be1d25523fb3147d772e1442362acd9045baf6e19079a6c12678563770e", "03c9dbc43357a886a222c681b07c707fac384964958a10d468eb8e53bcebd9b7", "069a3c8ff19489a24637b4557ff4e54e7544cbf971d1b460e6f2310a02bf34c3"), ("10c9439f5375081234e79af76a8c1476498bed786050915856d313fd0fe6e173", "11760c55cf7708813b79ac7f0bd3d0043f1f444b4fd120c19363c8efddd3e21d", "2a5122ee5c14a6c6ef252baa58ea8ee8ce99bbc81405c5a0756f36bd90f7e1ba", "0d88490a3d8e27419b337a3845712f612d80db562d51e2065aadfe613f3495dd"), ("103ccb79e86889a4e71bc09ea8222b4c2cdec86c4b272c22dccba21e453a1a6d", "141f0a51cc23205f591b556d684fa35ed742123c333854208bd67bdfdd19d978", "22eb1fbe0e610c536806cf7ea3f1773f08a3c63e8d3d2a0f4ae17d68b51dbf23", "2cd12eba29626046800ddbf396cf13d7343f5d8eb8bfb9d87ee4452df84ef3b3"), ("12905c8474d05e29e57a1b35196b74acd3b01e7153bb9cf1bc9f13fb99580dc6", "2fb0d13e1fa195fa3e4a5ad3fea2d49c33a4d97052d013144229e007bf7c9cda", "10135aff8f7a118f42143f68622971801db3f97f928c11cd1dc82fc1d7bffab5", "1269c8bd04f360e642f90ab4ec5d3a7748a584cae63f1fd35a6be1adcfffee52"), ("0f60727430fd9c43cfbc4a48214eb53904e23ccc2f3dfb154e1ad07b0b379c15", "1c2ac8f2f6048182559893b5d1128501b75bcf1589e323d91f43b617e7a495cf", "2dfddc84f9c3f1f16377874316d01d10c51ee7bcaecd507cca248b23ae1df3b4", "22a34139c76eb99acdab0310463b04b868c18849b80e5b5e564fcc4383c63a89"), ("271b34e753a63e24eee1021e6facf600f6514ec745f1323efda03c42521b6199", "196bb457b6f5bf723f886a51ffffd9a466364846d8df53716b5230fae3c3a51b", "25dcf0d19834175e2f22b9c387d98c3676b4e30be2217d1f9df65317b731ca03", "108d575747fca1e6dea0bc70cadcfbd41db7ae35386d17f1bbbc7de81154b629"), ("251b88022fe03a45a3bd7add36e2f8f655e584dd90ad558f23572766a1ba191a", "272588f4b0869156617d5265b83c5cf3d5797b78ad331a629b355196d0734407", "068b7f8532923acf66d6dde932d604e2708b727a99c9766d1607919429af47e5", "2c6179ecd6050a0180e47d655dcf90afc347fd22020685d4d71970652b124703"), ("05f01c3f2566dd5169106e386d330122bd8b193c5fda5521c4b47d7c03f5994c", "07dbfeb55d52aa175cdeb88b45efeb490bb88f2b5f88fe86dcfb47c06a2fc2f2", "2b89584a81c75e951ae31a20447c9f4e7e080654e6ab611e161eabbb15a0a992", "05c4e35a997a25dc95dc11951fc2d38ce95e612a5298cd58e48295fc512e9257"), ("15f8f5918854f818393e7df30720b8334714bd1153bf832bd26afec4aef06e0c", "25dcff028a455a05dbb6f8cca10ec90f381d707d0d0e55354f8ee008699a802a", "271b8b01a4086f7e6ef4f0767a6d596654bd93883a9f88a4e83ac64a54d6cda0", "0918950ab4a4be2b297438a88dd732cbf0f92f233146fb9cd803e0a5ba26ff49"), ("043a0d9ebc0e831918a0b419e01dd6f3b568952418807365505f461ca1b3eb20", "04f76ee18434c52c28fd8e3ca50d0e6aaf3da947689f72b69fd9cbd9ddceae5e", "0ea82b5a990929bfcffcb731f005bc2a3ddccd04e985645362681d0a259683bb", "19ab04ca4a7a5de2ab689a6de6d94db28d9555c8eab1ff9ad65b6e422477b08c"), ("284c69203fe6c396d00c097155c7e827eb05fd1479827f0284bd6bdde189acea", "22506cd20c17e10be14221bbeb04b7e9555a394702823b9cb4421d057badbecd", "2386b8bfca0bd778d8196e0b3cd9301fc0ed084d4e637fdac0f7d91bf5cfe03a", "18eb286e846db809aec53e01ebce76ef21fdfcb317dd8f1ba153fc535aee958e"), ("2ea751f7f350a84d805f2d5bd9a2fc83bb5a8b71576a133e61dcc9cf9bded859", "22915a47f63831aad0dde195d74f03caa804fe3cd1248af49c7c57fbb9a4f0d1", "217b1aba8b12891dc33a552da0138ddc902791450c37fff33deb945e6cd9c6a9", "07e03836f2f60016368de427a86fac8d12312bd4b8138237cb4255b66658fd96"), ("070e5f30f2259914914a083b7b5c8d92f4fa2458077dd536870d40ec1934c0ca", "00937fc44695aaaddbbc19385ee72f798b41ad8dd32394edb7925989b9a8a027", "0d6b4bac78e73806adde78b3bc8519e55eafe96b57cf2d4dc347271e84243368", "17e5d6a3d39eb020776dfb80093227c9fd6ad031a157b60baba708ca3b904a88"), ("2dcb5c925bdca01c61ae39248e3cdc2e628ec81c81293c8a0b11d4694005a78f", "2785b61b544fa1b386d99f561ef8da1b32261873d1371a2774769435346b6af0", "02d87ebddb8a3babd283e185631c6dc4d7e0165b901d71ee506bbe936910ac05", "01c88996c60b4797ca4b5d1b6502e03b6dc9c5ed4c62c2d91127466034db600f"), ("22d374f8e33b4e711bc3aca6a57c3ff82906fa8b8628c3f62d7b0221d7b2aca1", "13eb96d87754ccd8c971a7ecfcf87aa03b8c65b84a9ff2988de35d3fa79fe923", "1de547edc6caaa1732bb2b699cd06a49c3aefcfb986219d621605f04613e8117", "252fd84c9b55d841021abbf687d777f70127ae4a0d4522d8d3aff0d6cb2b6409"), ("0bc65962d1f907d3aaeb377f6c029165719f4697903c558ec8c90004f69d8977", "052ba6edcd271b80bc7623b6aaeb7a5365663b02783696103bbbada617fab80a", "12f96faf2b6a9cc9deb4a5a6ff82f3904c191758d0d55b4815425fd5e826feb3", "0ca9e05a9ca185cd9b70c44828a42c56e11ad3f98eaa2876296118e856500b29"), ("0656d134b56ff52685dfb468cad2234e691567e1634c191d82d8cd3939e8438e", "28badaf92dde46377cf5213892b1053277b12e60dead694d4742c5eb784b2d09", "263cbd7a85eead04de8fdcaaa6a48b4eb455d47d79aea99232a9b0b160b4a074", "034f2718edd20766ea1fd5be49c5d1067fba0c5028f11c0b47575e99e0ec5eae"), ("0c775a35c6b8872692523aaf301af29ca642ce31142482df9a6d4315b7b0d1b1", "16223311eb182f85910d2240de278297030992132e5909c32c6bb1fe075b409a", "09ecb66070451511112bbc41fa94dff8e7d6c42a8e136aa0a6e29a750c66cfa8", "13d506ee60680cc1ee6f9771d541c434627aa9be340eeea7c58eea23f29874ce"), ("126871d8704936644e4539b67734f88e1bff1d9b0ef3e8ce43e3d8bfda036a2c", "01ccea64d7af99d90b3c0382702d544ec01b4a61a449a357f5ef23c751f06c5c", "0798d3681607bb3c931c911256a3e8b03b12da076c0b6fbbe8c4b285d9a00d2a", "1c9f9366fd541ea6992b962595edff397ce8eb8ac130db7fe6ed49f0dda19ef2"), ("0c1b5540fbba39f7f2574539b350222dcbf093b8243e38ac4f9f4533d4bae07f", "1e937024584d9cb5ee72aec7b1d965da8f52e6141f8cb8d2ce252876742a937f", "254aebf89ccf192d379e057088779a155be7c335703538873f4b20a0e8a8f269", "1bed38464a4333d92620af37d349b5b3942d875a8e8262c94c087657ac3879c0"), ("0d4e5a230e9dd136f3f186bfa891b1361a5918505a3dc5c55a2acd0fa7dc8ac3", "24da2c1a2b68977a698013bd328c5c25b66310c8841129fa91c9874db513ed15", "0b077be415745454b7fdca2c92e5edd68758acc3b1de9f32912a52cb72665de2", "0f5cae71cb20ee28603c96a33679cc64e652fc599334178dc22c97e53f42928e"), ("18b9f364775f875999cc89d06bc24c2299dc9511cedb50ebd3c2816c04046d78", "2a39be445124e0df030d30ac389c7032df5b3baf31aa7a40fd268f42c38ec1c1", "27ecaa0da21f11d78d61cf8b086229e4f3e35306ab30d51126f2080a7c75aca0", "16304e0d05ad2aa8fc810d415fd49a4124f87085adc3742dc1ca6e37546fd203"), ("05846fb929ce496f001a2a8a8dfeec7fd0fbfdf91870a3b611b11d42d896d9f7", "105fcbff67e73624a13413e259d3046541b83979a78b271b770db05b2d7e451d", "27f5a00ce4362cfddddc042a1bf1f41f620727d514eda8c152c885e04c312c88", "21ac416828994c1e25e3fb270df0ec65d5eb1747ba771b804efe590bd0a266d1"), ("0e173f9cf4f8cb6e20f1140bfe8f1e0b4d3cc0651fcbcc6d6f1da6428f86f65c", "21c0d8ba84e14525acef927e132545ff7b5b87b19cb5f9fc942255c242f0cbe5", "08bc95ac82de35722eb7c5a5c6cbccc38796f9703b3b7360a9dc0391a62ba477", "2835c03179309cc642d90545a7a7411f998ceb2c082781528b032a1d0526e0c8"), ("0b1cf8490720e4b81fe6dd1bcee1126e060750c24b133bafe4b3b96a8ca29f4c", "1fd0121eec4c4c07692ae20ca2245c8facefd5f917dc1b91949c292cd3dd3da5", "24b3e35f721066be16cc4e27970be7e94aac8a69a4145d6004ff130cd2d111a5", "25244ab8b0e3d3838e82e112c658acd2365f4e3b227b8dd7a693a9bc0f442cbf"), ("2c00239bc49ab60496755c7d0a5cd74f42111007e256eedace7b02ca682e5837", "2e1219aeb52974d371a8fefcbb181df0d0db44072ad7b271aa0ad5f9fbe1b9e0", "03e6368da47c236558d25e49ca12f671129b0691806e3061901f0ecc1d3bf0cd", "0774ccef36f8fe047ab8043bab3de2efe3d055ed5f0308c44ee3851430966e84"), ("0052386c55af8405bba5a66d249a06c02de7f286ddad3a2cbdd13eaacec14e4f", "2149d8d1a060dea4312dde87fa882e161802ab3b82800f23a060164e6369d2c1", "15055e554ff4bfee39e7204d9a133bf069c1d444818c1353192c08f894520066", "2995f635e713344a8b69dfe725c0315d02b0ad2f1abead945ce1351e128d31f6"), ("05c835b47f0356bf84fc6c562ee0143be4f22a4925cb61ca0a689a80267d5276", "03aa4fc69ead01ac1cb852930614588ae8ae3f715c35c0dd9068b23e04962154", "0ae8acb5c00c6e29be57ed8781471987080760b0637ea54f41cab6f77fe93268", "03887c5e927593e527214670384bccf4684ad846d14437547d35134f447ff496"), ("1762efca16e7bc58001d6c6f1b9d108729afd62dbf1c88d0eee968904e004523", "26faf7ec3db85b50246b90bbcc05dbb439739a48016011f4e55e95b107139c07", "03745b44974e90bd4b0c1377f3fcf8fd5bbeacf4d2b112598ddfd2f081d54e5a", "17f6aa485d81121a3284b3240e881c099832aab4a1ea5e766c59dd5c5e71a633"), ("1a51e1a388dfed21e1a1ba3e131c82a3fe00ea09fb47c7eb10089b0f689d86c6", "1bb5c2edf6848774e3a94558fbde82732f6d71cd5315414e417dad620e659a84", "1cd51e48a54d4bd8ea6a65b3d4f7e26d421c5b5c2b0cf92701bd6fafab8620be", "1d11a9bed55fa5a797b6dc78bd88f20f0f744b92d69c122e97d7467de84e5ba9"), ("0ba572a72c1ce72966b1d8a48f0ecf370571e9f232d7cdc98b4de66fe5e1ca07", "01a76d7262fe3a6d7d1c5f4dd8e5e4b7dea41bb83823e5f48d05e5dae8c92a0a", "19b95ca0827839cad61214456d56ab85b1053a15f5e023a2090ab1e98faa3db0", "02bf3168fd403a7098a793f58f681b98b82e3b5d3ff7e61af8636521725dca05"), ("087bb561c6f73a9c5444765e0d8b7e29ac2cbb78f815849f8aa49b361215e1bf", "220521c13b29c50155bb080da4269ff3e6be0a75eb11fcc1cf6989d167ec4570", "081854223fef4a2a9053f8f71638401ed5823e4592236fa3d9c932f88afdee1c", "228d36659d21a017db28adf96174100024949c335d31ece33b5186a2ebb53f46"), ("2c35333e8c40ab8da9dececea6e98560514c27e7cdbe7671224ce3ad263b6340", "077088baaef8f2fec7ad383c2115cc67d018e68d7b0edc1fee5f91bd8fdff070", "0ce5c45d52f7c13fe9bd4a646b5f5ceedd5cd2b86965911dc8ce3def97c81a4b", "1a9d5c50bfce6b45e2629e60b8c9d5b11238fbdc8baee01285675a72b5d98427"), ("0982dc9af1d9c8b77931deb30db4493be267592699a0ee2c4e56e0893ba35007", "154da214fd990e6cd0eee4b8f011f3c909f6dc1500b9e1f7b6f933d5f66bc82d", "1e977e702bf0506ecc64823eb2409184396cd8684b1532021a29e1e06e2bd360", "2a3e9ede21ba0fe2c1440ddb8a777161eb3328bf654ada7f7c96d949c6210e5e"), ("1bf97adf3d471cbf706f00e48316660783dd222f4afeaf1ef7911edcf64d01f4", "1596e02eb9432d31d311d896b462f963ea35933d261096458e86a28a221fa6cc", "0c7c22846ea0c570c7aaa66a770b73c9c458bf7738636735626d3a6136785206", "2cb363c0dfef1b5a01a68332a44c2e1579ce1f9044ac4d054b2367aede8d469a"), ("1054f38cf21d7cfa66673e69c4484e68f212f468d3abd3a44553005f7938ca6a", "20a7d36f60eea804b83bd720f96b3beeade7a9d39b0e77218471319ee5110c30", "2b862945dbdb9aa4099bed4843375deac7fb738b791dbde012964d26bfa47cc9", "2960590a5e4aa5cf09038351d317db09ca4ef275ad79a3644ed04fa7f3cf8a60"), ("0d1333d4d1002245205d732cefe64d0515fb1272c50d2cd0130229a4b5ab1af8", "1e57aea4f945f4c34b303d331195c5af1d9ab7d37a65caed44fb5236b729fc91", "09b8b5cde9c6fa336d46544c134f749d9afeb331a8b0c34e840d9944204077d2", "1a2ccc21cd81f79de2c54d08c84f385f0552c2b9d5259737673a3da18bf5770a"), ("1faa87e0903e1dcf20ff19de725531a4fd09dd67b99190e156936b6377866924", "1c9dece7d901fe87325d7643da167b24791d3f7599d108b5822b77b948780b5a", "23e7fac3e8537cbeac3831d9ffc29488fd656d7b8a08fa84c3aa8a5dfcf01730", "0d05be71707c15ec070166cfb16405211581bc42b3e6c299df1a036c187fee7d"), ("054dd6a083f4f2522b205667c35983965f08f341ba4f680b0744b94e1b86c012", "11346a661cf0a3d0d1bfa875e0e48091403aee703f557a3b70df86e0cbb63e99", "2e707c926174ea2a08202069c9f4c67db6727cc3a91a0f44e5ced073f3e832c8", "108c52a02dca2f8cd789bc67302ccc5340f1a3a2aaf87bcb6fca81f599d2989b"), ("24e797d3990fa08f8f4f8d5503287ba5bbc812b93cf8c53e02d41cbe26ad865e", "13462c11532641e403650a750e22c7c29abeb72e5d173bbe4e7f5093b722e7b0", "15aeb841cd6b8e526d71773a7c779e6b767ad469f6203e3775b087a19947df34", "075201c727697ea6e0f8600f2b2944101fc81b2c1c22ed8082d2526e2ce2c0d5"), ("1de540149a544e3365001fb5af87621bb993a322744359360d1b1857569811b4", "19efd85b53019d623c813747ac1aecfd102932d964d04485cf0f0e6f00933c15", "288c2618c6e4178be58a0d6d9824f9aa54eedcc55617b89a2d2068b5f64f5599", "0669d9b96bbc75d5e0084fb928645a8b7e0b16b51aabf6bc55ccf603ff834b71"), ("0217affddfd225885ceee9912237a55f9b9c7ec23a24f0c0da73b84c884896ac", "283f2d234995c4098216597a437384b4da04817893f28b33fd9375a0323d7832", "0b9c707913590ce80fe7f5f50462ce4d4490bd648ea58f7a3d0d6005cef7b2ce", "02628f344100b650942b077ba90c395cc1556f9f1ea12470248cfb9dea427388"), ("20985867c69d632003734f23c19b293219e0a5200585f71661af5243c8201178", "1b2bcc061fb39b38528c7211978aecb7d639e4e0688fae0553c44113c92f36a0", "1158aec8cca1fddad60338b7867719ee3f4a91d4ea0a25246be5127c460fce0a", "051d5f090ae590a5e29837f12825d356259542c2babec231ced4f7a1211e51f8"), ("152cf07afb47777f6312294cbeb3d560eef7d71afce3ac7623b4d6f7daf9a6e7", "085a9f8ffbbbeee7f932ebe72e3212207432633fd919e3b6b0545ebe776db1ff", "036ff8f2b89c88480236e9f45931799abf7a13b086d7edfe07c467eb860b2acc", "2d2364a79aae48c966ce5c1ab711ffff914b96bedfd7d138c329137bbba060ce"), ("10e99000a1d1c53b7756a72c53d22a652a3596d7cdf521d376f2807de1ded1e9", "21b1315e91799a83d3d92885d02c21cadd144d397d9441b6aaf9e33541f43902", "02ccd14cd365ac366b0bd0aa2df162cf8ba504e6364ee72a307494b90dfa2cc3", "15b44366e04b601b08af1b4b319bf21eee2f1640e9215056b5a9cf9c49a4b9e7"), ("1b206b75a45ba1e8633da2201f80165fd946c54aae0e437e3c620f63b9effeb3", "297cc55aedf9b05e83741f566090d1c0aea57a9f9c8f25568bb1e88ec1f3f112", "2b2999ec44981bf812846c2c79558d3e695166110bdd5d13f2f00c59ded48b5d", "19015ed60c9cbaa98df9e3b7dd5fcfd3c8e6665220cc35e036b1e473d0f4d53b"), ("02ef1c0fd3f29f5286a6eff056d9ca3574666faac7d980bfa881743574f59be5", "253f0cb893972e6c117ea9142364bb8a3c3697f2183cc95e7f9b31ccd56b73a8", "2613b5cc72c5b6a7d13cd42d251cfe2b90f53bcd59df2e8cceed16aef1d7eb4b", "21173c23eb593a62b6d9add677657fbce9976e4533f26a327a4083d15a4c52fc"), ("02a1a0636bff4c70ae8ce9b27fda648a7ad4824607d277678147cbf9dcb20ee7", "23f9f934c9220cb41ccaaf0e32c1c969e6704949a6cda437b575f3d0860d22a0", "2fa78ffae08a6b007c1f9b2efb6e6ab5b55054c30e8698a1e19b582fedcba2a4", "2360bce9d34a179d6e22a4ededc7ed5fe71bd39e2fe087a36e3a22c4f0cc2465"), ("05ac76cc5ef01d75b7c47ae95a885c5876bcca9b625d65c978d1ba5180f67707", "09a62480d09cc3f208916f2c5721b044a0ead51cf01b5fd8e80cfe80e332e316", "0b5a70afe45d1d70f34f8df9f95526f9b659d80ed3b027bd1c4c3ac2c0ab8e3e", "0e4020ee73e932e2f1d6b8d158640aa16a9bd3a873e1689c4ab1f28f5488dd73"), ("3007f3533922190dc193968af33aca20de4ddaa7a08dbc6d27d7d22beba2278d", "0fa759e97a83be7a6182e8fdc0d043707ff970706c9b8a17011c9ba452fc1ff7", "165ec27d63b64459655c2c76af1c62bfd4e91f812e8c93bfa78085902fbc49ae", "171954a1a8c66acc5e02594aa9bb43b4a0fab4b5210aa4a8aa5c4e37e6f5740a"), ("0fed986a298d3d6fdbc59bc8af1baf6ee01b63ddcf0afd66656773d240efb45a", "02a4afcfda318ce5c147be02a1e76fcce14b0511e5ccbcf4b153957b37d75b18", "22df2a8085d12b5cff56c478425cdef383ed4749577e7db4ccfba5463a9c7212", "038dc8c1817a0bd5f0bd1e336ed9b5aac0ea364933acdb0c6689a6f804e559cc"), ("1c0842aa61c1c2a2817a452d6db57befa7c2bd83002d12344ea5d971f1115a95", "273923700de64fb186443f1e1844c933ee952422d7e9c45f9fc99432631a42ba", "0cc64d0eef1c238d2a7c036b8cf0afe8ee48ad90b2c25574718fed70744c7f93", "0040ddd594c5e4c532d19ff36133e527cd87817dedff61e68e1f88b470e466fa"), ("190aca656f43133177a665f87eb37628c14a6d5dfb35b33ed2dac2f5baefc916", "22b69ea09930dc6fe1ffb16c3438299dd6b7872a8d4647f3f01a483ee7c92bbc", "04152575b6104c90eb9014497275c01e7f151c64716d033d17d364444ff54cfe", "252b7c8d8eb60584435175d5b129cf28e0a8292cceebade5adbb1a65ff3cb19b"), ("0e8df4ce33cece2bbe05a314ee3d7e4ef9a441b9bd49c0992c2f7fa7b33e1598", "1b07ab06fa240056b184c054f5928446c14b62afff5e7f0eae0d738f07783331", "05e21435e19193d2d2f0c3357f863907eb5fe64785fe3fcec6f78bd374f8542c", "281d2fe05eaf2d7c2262c0ae5a7c93f0d6c3a5efe829f159583042c0d27c40ea"), ("1fb7cd62d3e86aee4fe7ce3996a03181a27e4268299bc662fbd2a30c9e8071f6", "15b76f2b9d07337f81b46bb48c6338f6f4fbab6c4373811748fd2d34c356480b", "1fac339d68ad85f625af09787ad38c3544361bb13a6ba3cf528183f5d63dcb20", "111915eb703d69dd391dd57b9961393e21021fff2c49942288f664b4f0ae15ba"), ("000921238a5ad0fbbde2e155511afddfe66b59e711ff3d31c4b3951a1866d4ec", "090cd700514b2909fcd07410d2a82121fe15a4386a0672561ac7e9501109d965", "24642f3e68c19b2981f2fa8e2e3be176f8cf1691e15242f7a3543f892dfa6580", "2650b0db2d6b714642d485f024e678e95a35c697e55b8c8ad7dd1f7f393e378c"), ("0322a0bb878be71b72c5ee43f04fb1dd6b93820c533f6604fff99c883fee7a46", "161914cc5320220678b2270126f07341ec7ab75bf6446f9b54ba40f7834eaafb", "210dadcdfb949849184460a6385501c991ebad2606418af476c579d2584c3a01", "0872a53b43e6e880d224ac9881441abd6c47a603a3be4673c940364b0f96edd4"), ("08d743129ed988c43c76f452707d6a196b8e52192b92ad8dea8385cd66615d25", "25e0ed021db737d566d8e8dd027939c369caf822e6304a346950b17e6651a3aa", "1b9c8a410136165e157759a2cfd2b517f9536d447cc153350e942f3423954774", "2d810801f998c13265ab550f253deab15dcdec7210d6ebbcd8ac4e81925c7357"), ("2755e77270010b9193fb6ad2c35508ee48ecce3281ae106127595dd014e56e15", "0f2fa35951e0d4b09a17835bb9a604313b6caf6f3b086293752b94113129f3f9", "1c1b80aebd2c295fd63536852e459986efb4f62f75146353d41c34526e562d43", "0e7dcb7b7d2232222dbb6aba17b868736b42f509dba8ad051bc156166be60301"), ("280588614659b2243bdb55dff930bed127023c64378abb137b75aff87ad6fbcb", "0c79f456c71ff04b6929df0a5479ac55588c106c39d4660a13a9071d21c76554", "219a70c0960ae5a1be719eedfdf398428c8c4a6025815ac17af46f2e8765b05b", "2688101afa0cb3d90b9395a92f6f621ecf2a69fe797a78f8e3dad7883f6bdf50"), ("04fdc482263c1a26915fec1d42e35084d7a7090c49c354628d90fa200c72231e", "2a228183268d84f0e8c64ecb20cc41ad4423757989edddc7c1fcee9438391045", "2fe910257ae7fc9f4f918e644898ff4e0856bf22f806d9194fb41303feef2471", "0e77134dab85b34cddb7a211ce33b6fe23d4a0b1433588760ecd458d06f73076"), ("1a185562c57176f72f1b745d90224a16e7b6ef815104cb64cd0ebbfac18d8600", "01f4ff839029500dea1127a872030e4183a8aaebf26a3fb2c84713096eb3c4b0", "1c865334ecccd491305329fca109639bd283ca3cfac4fd9f2e770d5e1825c9bc", "0e894bc3f9ebc1bc20b346b33e90c8bcc9c541a4c77b3a250612171fa7050e77"), ("1d577402b64553765e543cf714e82979026ede5f9911e1e87f1a8a9241bf360b", "16fa1d1fb8906eeacd88b8c317b7432a0d08015de56ae771752dba7ae3be746f", "05f3d268704947553738abb546be591d3e109d4284a7bb3d89fbe5e93eed4501", "2cbde05563e93dfc596dd5cae354a4bf704aba65a9d7c6ccd73362b5b97d3b83"), ("05a30a2502d284ed5dad5ef4a2f244c6d67f9b8e4eb7c6cbf156ada928c392b0", "0c999176d09ac0d3d4142e4ad8ba0b1c29944e12d054134fb1cd8aa03ffe812c", "23f34ed8c025d1c812eabb93115cf7e99d8f774d29769e01b05458eff1c22d90", "2598f6554eb5c3ad6c40170d26f198a5c4fb0215027ebaccfcb6d5737a9f385e"), ("1b64e875571af6a5bfb2d4d718bcab0b6035b060e35714455c759333e9afb205", "20dfe2d6d55f04befff61bf1d1f65e2017cdac956cc31419a39d379de517d715", "06440eddd54049980d521f33aa088e6aff5246d785378aa998bad08cedde10fc", "26d18f40e48dccf6dee232b87fd6a1bd4f41c31b1ac2e0cb2ed54023725f62ef"), ("17a2612a95ddf0176fc6bf6a6902c007e98fa0d6aa1fb40e1851d99672fe3721", "2014260ac0d546fd67512a10615aa8462cfc8393ef9d3dfc613b24e2be7108db", "1a19b55c3f30680208c666022c450346d4be63141f73e836fbd6faa1839cdded", "191a588085ea4f9661d220e5165a1e27b9982988ecca0e435de08ba5732558e7"), ("27ff88e6aab8f712fe6182dbbad9088fb936b39cef56c9ef5d3fffe4ef72109c", "2e71a2c9e62cce1a266ccb350ebd3617d82b7f58da53f8d05017ae355716772f", "2dfbf86329ae396d8c5d34e56fc4570ab49fc4419ad0eef0feafeb155b0ed74a", "04df55054e4534deef6dbfbab04870d1f3d5fe1a3a1b62b43ba23b273dac0652"), ("17b5f4a10dc8efc5cac3efa692988c129f8ff5ebe6b9a80da7cb855730eae341", "2f0bbb4c14c900908eff617afe00b1398d9d90a9f317e055907a73dc7ac90764", "1d7494afc7774fcff165b423976eec6a7b9c924de4880d4039cc20786bd460df", "0391eb5ee26cb204805bc7d78d5805e245bcd2ccd479de69523dad5d293f8f5e"), ("24f2715f39ee6142ad85a2641e48a933fc4103ff9c118ddee01edf686d73ca13", "044d00567e9cccde81fb853f5833685af0c5dc5a6c7356d07df4bfba3b0001c0", "25394e3d28f7b51aaf73fc192bee526fbe1ae8618328b9a5df62c9dc792fd51c", "19a0422bafbd42bcf5370af6cdee4d0af2cf22238714e3ced0ea18fde4ef9045"), ("1cd9a9f76e0b98577ec0c21e9d347b3cda661d4adbcc0eb3a896bec6b603bdcf", "1bffa392dd16ca5fad0f2ed7c11b00f2f110a5e75776af9b885aae5745857806", "23718576be43fc240e6a21b60bbe86fa95c60ec5af69b25e3177061f5e195522", "04fc3f30ea7e91de7af39de13457290ad902a7a646a62fd07aac78405d59f240"), ("1c61fcf30c7c5c483e1c082527b49b7c4ea727f9bc6ea7c3476518304dc88d11", "2cad90df173953294667f3e0b7af58fd9e1da62485ef4feccea48003580849e4", "00f6bc5b2faaacab311dacf3cac399df9bcfcd21ee0143f20f7520bce93d746b", "18b3b298b4c487bb80af52531714e3c1477e86a62e2b8694416fbacd049486c9"), ("217fa1402474018da873b793a7a681ecafe3ac498e0c413d4cdd836260fc7619", "0e7db84c796558e8a7fe0357028acd0c837c0e1c1fcaf8e27cb46f830c4f88e7", "22fa56579b23106846856803e76469b39d26ab721af77f1b9844e381e36d54c7", "19641a9c1fb1be93c96071a9335a204296745514a90ca4211abca56871fa76b6"), ("1f227289387a624881c3abdec6eca32acb3244ce84dda2dc3bb49f36d7779e42", "13caa68ef4328c26cde16fbfc71b256b36626aa97390a4c9282a9004945aecb7", "08d5384a06dbfea4d1915c0b6179da539ae99e4e0876e159bdb259ec54d3915e", "2b486ced2df6f516baaf56e151f7e54edb75d54d84bae9a72e684e51a7f771cd"), ("2e8d3853486e6ea9fb048ffa470f5d52a4743b3d5ad0bb0509553fd5cfed6796", "229ee21ed3fe978054b97172c79f0ca37b103ac9cb9dcad7990cf29dc5ef2ecf", "214e87bccbe827bf9a3edcc37534aeaaaeb2bda9eae872889fb7596102f3799e", "0da81013ac343c80a6d0127caba5e6e66a7695be3b5e588338b0d84d3333b057"), ("17d132c8684d4e80ceca3d8224fd7880fab1c210ece522be4635bd7baa600b5b", "24317366e89e963cb920838ba2fbee501b37a6eafe9d581a09facc28f0a69885", "133279deedac959d0c82d695098fcc25410380f0f6f75f0990a4e1ccb3858ffd", "172ec45128daafa1a733a9920fcd1f1a38922f01b06bb081b5b80d78f21cf566"), ("0663d5730d67445b7f935180f58a5423e7e430be110393f4f771457996e8cc3c", "2f3827e285f122c3aa93b3753c2e8827a71bebeb624c293cca3229dbd15b0564", "22774794473f4c3c9063a6bb24aa915687c5fb36ee498ef2c218a5be9a0c4ef3", "18175d229bb7529ed853af2ee66a96128e6d33d889a227a688666912a0e79a45"), ("1fde32c3aeb090680c76e19ae82c5bef32c6265f29063c32e1327701a766dfc6", "00fbbdd9f92cfdb53b18911d08aaf877bc3064e178f9eb133d3bffdd24d17155", "18b42a56f566895a3748810a4b6f1e4db65b7a51e1dc0a401762f647f1ea2f2e", "14afc155111020e8aa89d249f665c05f0e169c12ce25c99ad310ebf80f3a0f04"), ("044fb559a91d6da8757f4152b8fe5aeb3de92cf7f8d7ce741023e7132cf0ae1a", "218dd95a9f59829b9fd8ce13bb960d8382c35f1e5c5ff4523490e2bfa5e20c8e", "2cb9f177e0091f70a1b34c11ed1628db3c2e7cf02c69caad5e78d8f7bc753263", "2d28aa6723784ac6aea7adeb635969d601aeb1bced779968cc4be3a70f840a02"), ("17c7bbfb19c7780653d052c19c245e3efb7ba31c00ee40a13b79ef6346899804", "1b063748b425bd2e6dce886ccbffb8507b456ae8d203788a0b775d35b83338f4", "1420038871d9d88161feb891c82fa34d0e83ede71a3d5c3c469743f19c2ae2fc", "1cafe1a53e8f0cb6ba2a1e54ef6c5eee59bccd24c81b9039823f9bc1426e001b"), ("10d31b7365463b3a38a4fc75f633ede769cde612397fc5215791a9e7362b0ed2", "160f9f0ef8243602dee0dbc026a01864d6384f55b46419863f00922e48f13d82", "1a485295c9ab5820ddeaebd317e267d098f867d7ee7f8e45c6728e0142419779", "2d7b12d560bb1e4d651028f3e4c93d8ea7322b3870b0b59ea1de5ff36a2b5bf6"), ("19648789bc2c7f23fe58403b746beaf9363617b055ef8381b5c4d6dbd971a17e", "025e4aeac571c13b35d2b5e9f1dd43260c32bea011890b87fd4f038bbed0caab", "22f2a5c8b095799d6b44a45d9aa5a96f8f9f7840bfa7d6b40b06b3bce6f09df1", "13633fa2066653d844fab34d5167a0fb9891da10024c35324a6f116a2b5cd16f"), ("2724ddc1d7621f3cd3c89b968839f87fff770b800b086b41b8a19900eeea03cd", "2afeaa22447689b6dc304285008ea1efd24fed7c6182423ca56a60cf4e3e9175", "2d19f45861dfbe79e12eff3a716d6037e2a5d91f50a57c0b52009954e61d5b37", "00006c34fb76409a59e0b93aa0dfed671984e836d864e3786f19b32073b1fff2"), ("113aacaef31a4c29bde0c2e10093a3315279bb62c91d1726924e6b752312b323", "08c65367491f244546bb30ba55e7f1dff21dcae633278584b6a4224510fc9a10", "0265de2ec0c7da3aa6d149b0b99fad35dcae87e556e33c41d6f5baa1936e7d9d", "2054ead06a31a2bb76c1cecba82bb2e65d3f3f117e71eb1477bd04cb685998f2"), ("034f042fd8fd30d26b467c6bdbcea61c3fb70d8d05bff647932ba0c4522bcc97", "155901417425342414519d80c17217f381a1cd95e8fc2169a36a050991845881", "12485aa3c5ec04a552fa3157dc166f7b8b1eab10e38cfb286352b012febcb043", "0ac1fef65f28edd107cdeab9ba61d12766550faad12e5f18fcef106f289d9f08"), ("1851b5d7e79d497dcdc3838579c9f6f7c77cfa324df5b76acbf8a816c85d9233", "28ea5a94558109d1a754f7c94189ef3897b55b28244dcedb4ab65e55944b6e6d", "118958e74c32dab690c852f1e92bed079e00db988b3e2e4f9caf8635f38fbbfd", "00de9b21d3cda6027d3101bcc8810244d825d83eb8e96c7bd5664110b8c0c2c7"), ("2b67cfb44306244b56792aefd6e598613b21e393762b90519872160aa883c89b", "01a14bb40b8b324a4c5c3b4eb7d20e366d02929e21920a8c727139b5aae496ab", "001a6c2b0d73cd9e718d94c67089e90c6964cf2029636b55811dedf542352e68", "0fe7e768029f6e281269791b6f7964aece1850deea809fada59f9a55455fd3af"), ("122a1dc859f729f6514c9453a3180a956e5500eb9eecd5cb142ce7a22bb61069", "0e1f3d9c0e6b758b8b8558a6860d83334d134c3c304d931ef7889a9fee2db098", "2e233527f4f2be671edf886aa00aad90fdddfe9f2dbe2c358029e04e0a798743", "135193dc84e7469e50e3af7eb8a3448149b1f92af21127346a36435396d9fb31"), ("22fa4f4ab3d7e2c3b8fb13a5e3cc664c2f1904c5b6ba0d83c095a39fb8dbf938", "1ef874cca2b875ac72283d115d649d89ef7976b7d5232cb1f90ab4f7b334085a", "26cdbf1c3914fc591a2785b5c2900185e5a286765cb1d307be7526d29500549b", "1b5fcb43693fcff549a968fae876429ece53812d858a489f4a5b2887811cb474"), ("305fab04a41a232bf599c901e4a6771c3c122bad0ae25660b0450b8ce87a7b6a", "0dae1adc9f521e76719b12d35625293f6fd4af5e3cca046ff3a9716b4a6d6641", "048792f4a6c20f580639fd5845a26882379d67cc6a5ee46784bde7baec5305bb", "2423dd95d98bf93250def12ddfb1be0035e39b18bdcae5cd9d7845137e9764d4"), ("2c8d86a54fe65a4ff352ecd00b817b4a80d07e24c95de13abd144b6689b01290", "01f7d4dcf51d89ceaaf89f430e2ff6e71396d59a8559cabed7a78cb75dfd25e5", "082fc3375a2f0139d5ba8a7a7a6619a10c7de7c98bd8d8159e8a50566187d2e3", "04671173c683ea1b3f9dfd3974b7807fd2841775efd19e716f237fda659fc803"), ("1bfb2f6195985cfac7c9caac944b0dccb129440bd06b33c4b6ab887eac68841b", "25f13d7863584e5c13ace774af163844828a67cb9f6acc079aa77f7cfbc48996", "09180819b03a5e99a727455a4e967e1b9a47d13a4d1d14a389c22e48e3f5d602", "2585a8b2dc1b911a2d3c35bbc3f75e2accbb5569d8555a873b8d240ce6c1d750"), ("048d0c0b7a08b2f38493f6e398a612f18aa3a7117b44854940c554554663db4e", "28451f9b80e96c2394efea22fc8de8a5834b83b1f213cea14a1ff8aae93b5f8f", "273cf850b933b7180ba03892bfd7b1c2730938469455725704b32a3d54bf343d", "1b8050f7c2ec8c90513566c5d7ed92ebd3928acf7e7559f11cc9325e1ec29c4f"), ("2baf8f07cc6ebdb385c963f6e21eb5944a15a52834b1a23bc61616b00bea8c22", "1baa136e2884c0fd05128e4637d6d04a824f8c4aebbf609b8b78e4fe1d74a0f6", "0c6340015ba3f2c0680fbe4b7ff6cea2fa440a6ad3561c43103558f9a285de63", "19ee7d0f748fba9aa3fb1fabaa1dc33a9232167d3b7675df08a8746dd88010e2"), ("09579e30a4a8b307e73e94b1cc322f0dc97f7bb048217012180b410692232bd0", "0347c2dcecab6ab15923903857048be12611a391c730d64ad67b9a7533fd0fb8", "0dbf4d4d4379794593c6db8ae458bddb417ed15dadd54788f63f57587a53fb6c", "238269985f6251b0d7e8d16000ab5ba78d8f8027c12f2c960a9c8a4fefd12f2d"), ("065a634bf690b77309d622a00b7983469bdeaec67621a448d579541f97ca0561", "125bb10b2addb2f97c02fbae9d3dfb7e277495b3167e0413ee988c199458d708", "0b1e9fef04c24193e5dd2c90f373b125e749d34c06b51e2c991cb59c5a951df8", "0050aa661018c6e06aea068a35a8e18cb5efcb0a08ebaf32ebcfe1b65d4cfbc4"), ("1bd5c15955a7996c1d596f51839a26ba68d300474df46e7c917ff1212ed03b3d", "155a62bdfe022024e84ed929540ecca55efb5fe8d23dbbc83995331bd312a4bb", "08cc8903f5ef95c27eb05ba56d46c81c88eaf06644ff54375f1cb0b7ab0012be", "20ed5835897e3d9a9c343bcb43ba2cd5e4a36b909e1db73b17c02f6576ff87ea"), ("206f75b991e0962c94685a6feebf82fb75d5e3ddaceedd3affee5ba2ced8b4fa", "0988ce1db83135a1ac2281c2504cb88282b7cc1ace911903734ac86c3c42dc2c", "1607e592e30dd6529879e25dca612a5be3a4a70cacb4f033582f2ee2869876b9", "1e85167cde945c9ec8a92e6aebfea9df7b0a260ecdb2abb8fdbabaa58e96972f"), ("223f37415a41adef1a16f4d80fc91047e2d2b5f13dc299935e593cb16f26b630", "02d8fa2ffd0730f8d885d18c35b8ddf7083900258cd3689ef5166b77c398be05", "0f5080e7d145e5e3bbf4712483b291d9f231e39d031e914afa6e2a7f3cbf0138", "2ade335b3c42b03e3b433e833e24197f1622556fdf271b8cc8952707c6f3bfbc"), ("243de6af57e470b0e4594f5b28f3def0655bc3e2ff8544be292573428779da40", "15faade4004287448c18977eb73f6b17555605137a2b91f242aed0aa9150cff2", "20dce0f23fdc5afee1303078a481a8c5e84f401711c0e238e63e348c712c65eb", "29c931d1f53af3fdca36213837e578aacf28fe1dc5a4a22397f9c281e163e149"), ("2b7cd0d05bbeb985d643057263ab2babbd1973abc207f768e5acc3e41c696808", "19cdc3ac2e0b8945286c18e6c30b8e0d7a7249c01fb9f92689649f81cda18b76", "16bdc4327a3d934e2d22d3f6fbcd8fbea759d4f53b957efb257c7962cc1d7bf0", "07b2d5f497d953144c6e6b29a1d0a4fa3afacfded68f30beec5e1382fe40a365"), ("01032b50c95a9e8a97ad530e8e537f091f55af58666327215282970de827b835", "2777e578ddd3f9a9df425545265627e3189f82509c521171be972b88006aa2d4", "2d1db493815980ef5eb00724fefc7f2a4b8318ec7cb298eaee358ab54ff1765d", "2c365fb089187a369745fd53ac3a4e52904271c6badaaeae75bcc9a0d923feb5"), ("10fb68adfc0aef5d9e168806a5dfbf429181c87272cc14c01dde818b4b3745f9", "2bd3e54de9ff6f1a489fd45bc8093fb99639594e557956a87b48df8f267fa2d8", "123a1cf7626fa7de7c4aaf325ab0b7b005fadf199520235c963d4e71c69baa5a", "0924ed20184f0ba9dc0957a2a1ccbb85dbda32d00048653ed691e9a4235035b3"), ("169092fcd5e95f408039f847adeeff1622447264335b529d778e489beb4db308", "0a817db2e2f86bcf30c69f10e80d68f8cd9508c9c632fe12f473485c340d59d7", "06a7eb901ec47b68ee909a4290a3af1cecff0688ed4cccacb47ca28906c8c573", "16fc3b5b1098c0950da5c07364d69aad5959ce62dc065f37d7b98077d3939cdc"), ("00500621077da49c97cbc0a89d992933b398da66889a68ab0a2cbdf97f9113fe", "06955b32bdef862d043b7b590980ee6569bea16e25253a20c66b1eae0e375b80", "09ca69e6bdf4ae22e1e592b631a3347e673423e3a6633e89d27f4eb56f1c3c0e", "1e7fcf8dfe7d67676345ca42984f38cab95c1e53a180ca93b742f9332a1a402b"), ("2033a24ad3cddd5e436c601fdc00a24a5195b0b69118788528e601ddad6098ff", "185693bd7845e506501e06f5346c0df4bb93e6891055335d9892631004bf2f6e", "233574b6ef378af1aa5dbe6c2955a4b5346a625755d6a32aa20191912ac1a530", "1e86c311f00412599f3e83fa87d0a9eedb499caf16fe0c2ef8abe5a8c355c656"), ("21afc664c4f1086bf31ac21f918594fe2522a5fae452ce4b7507a0b2998821f7", "175d57bb2d5f7bb9320728e7c9a113fc2562726edc5d258651f2b249e795f2d3", "1f1a03bee394d25e16066a452ee569f9a2d9f0be19f3bb9343ea394fa85d7c16", "2d9d6a912ab8740c412890b69db05f3c74c6c7de05755f7fabfd72584b84f0a7"), ("2d5831af000f7dc23d201adeb3be7b0e537a9687a10b84c2f163a84b07c5b292", "25b83820652885ce3bff28aeb0aa23429ea1f0ad9c6d6d5449a9d65cb393d669", "1899f7a4be7895ccf8009e3a8658a35ba413953753cddf6b85945edf4f042b55", "15211ae708d1ec3f611fad816158d9288510c70a90423baa0cd8c3299aba7b07"), ("1ea9ece79ec55ff611cdaae05c0b0fd81d4220bd58ad5b74220650981d0e31b1", "29b910c856ca1fb786319c80cdff9fe0ab53dd9c85547a9450a71098013213ad", "1a9214a5ec7ab05bac4d8bd295da1b9b741bc3be679722ca0397eb51b5d63ca4", "2a48f031cbe355528b92f4dce3150dc7a0f9d853690dc3260b9bae042f17c463"), ("0e8e848d9c3dd5a6764618ad9593cf81e7655a399e9ff441d31a948f65b04e50", "12aa0e47fab3d8b488153d02bffc1e1656a96da0c74eda1de0bf479a219e8cd5", "1a3f1d1dee56c17225f6334530d37a9b1bd562e3989a46046b5c9e0f3bc48242", "130c6d8e322f5caf96f6c9f8170a7617f77f417ab962d2a20d0372649dcf96be"), ("27e8fa052f525a1f4fd65be38acf2fce040f56ebd372779d83b5403ddb51b691", "2c1cd892c55c6d3db3644fc6a3427e7817abe275036c2ffe797839f42aee9ffc", "133aac51b94b63002f7ccddff12012fd89442b717120dfe2c6de0eeeefeb689d", "2787b72a37324629a610fd0b05c38f94ab3f50c2d97e4fe775d4036004523ca0"), ("26781e27cca43f475be171708c39240967f3e8b40a47d6504345b71d7a5b99c7", "2f52ecaf2684b2192f70ccb3d1fb28e59c24153b870071f96a26f5b316c7487d", "128838a4fad27c333e9c0190ae3b64c787f75fce1fd7f7f5c36d323df75627f2", "147fab952017da0faad58f7eab56963ab623ea93255066654952a850159d141b"), ("00c66e867f3a444da533537b94879c10d313fdc6bd24652cef2e5cf8540b33b3", "07b7668d21d019c4f4322b8ed2ad74b0d6a7520e235e57eac122a01b2cce58ac", "19797c6fc5af042b4ee3e94af8f29bab517c7b89d0c79d3e15c138142122df8c", "17a8cd34d8a95fb6f404eb082136534c936f5c7cb9198f5802e8fe8eafc15577"), ("0c8daad2da85f17e878e9d0106f0bc99e31cbc5eb8386ccf2a524f3e485a3656", "00d157fe6431d172b3ab1206c84a2779233a3ea8472c5f2af66039d832017b59", "1e1581177f9337f8008bfbc5d40873a22187e4303ab8e57d5766bb3394653d52", "2bb3cb65b1d131f69eac5c7486bfbda6011839888443e8d30d6694ff06546355"), ("18b6cc5a096ef08503500eecf00ac8d8a142ed585be658ab230c7600bd7fcdca", "263f7eb3c9d8719cb2e5b355860973aa20bbe738e927c9f74fcca123950c068b", "0be36d8a3eacdf16a1d96442e3b1026f8d0037c06dd314c54b582e48818e54ce", "2d33040b9eff7ca627c4cd16af8bc853dc481a8bd57c8e114367bee1c8f1ddb6"), ("01cc80df2251d737d705d879cc735bba6723c83cfaff09b8d698845c05c47472", "06ebe9f961776971f246da289decb7447dd23752f19a7a07761f9d249bd72986", "1ebf0a782ec016e711f1be98951ff4e045c52b91ec81113e214e4067e4a7959c", "17e33373f2f1a3a6ea7bced788a07a7df1377e46cc05f5556e4aa4ddb93c3fa8"), ("2c60078b2d0287b206b67a46dda4282d00d463d67f01ca83893b51176fb916eb", "244f9e8f2c731da18cf1aca2e697bb91e4fcfe996f4fa15dfd49350d8f2af167", "1c6ea7f70304bddc0460fc070c9c018c16179e6b627fe1097355193132f2043e", "0c4d282603a52fb68bf20a1cb3b65737de1634f536fd86eb9fca30f79f2bf14e"), ("15aa6f2d7749d1ff0a4a217e271ae85772b8af4a7cd12411e5d06493907fafe8", "26b25c103695ede6dc3d7dcfe46f252b8097324e421648b3a2fb885a1f23fdf8", "093ec322b15944353ddb52e0e497ab59b027b33cad2d45f5314fe75d2a61704c", "13bc46bc0d226a6a3a0a858d56f3e3487d266adfe371579ca4288d74c36a83cd"), ("223d994ccc76b4fe9299cbc40ca886c5b7c8d10c304fb7ee6be297795dcd4582", "1221ae236a1b1f1737d30f8ca13bfd5c582c26a44e64abf7429d8d4d62fc6792", "1155105752576727f2c3ac132d3889ad2f9a22cb7bb34af197b4e41d955777eb", "2d7b2d0e66410b74fcad0b48f67dcd109085763ca147a39e55da61d3fe24cee5"), ("094dfc7a5ab02a16db1e93213cf0ec2a0e672c4e36501b9800f2f8bd5e4394ec", "147f5c9a94925522f0cbef8e48f0b83daedb030d35eb8608c2ee9665fbfe4ba3", "0d0ea23baa68cccb67829f456d9ae4c16b0b7f9f2864b8604501b4cae96a5dbb", "14b13dec15eff07428d96b1cf3b93318c5690b833233d98ad7320ef0873db64e"), ("079fd678b84ebcce95462b91467685f00ee2fc11842609a7176d2babe2d5e73f", "0032d9b199f602b69d1eb0914dec6d6f0c03ff52e68e44d1c22e432ac1eea6d5", "24405bb21d24a6739e91faf02814a249d53a223068a1f45284e90d2080c0af84", "0552a5948377a7c2485e531ea3530435c77e4e5ca2ee8017f41590973a693668"), ("03adda50c5b0b33245627536204f8766d0055559c149841a33aad0a9e8e8a63a", "0163d42094c905397433f36b64940aae9fd83e3f566f050dc40a14c23e67f807", "0fca0c0cbc1500e824fb9e3b0bf2d9bb6c98242e6d640da86031ded163d69e6a", "05ad6ef07e4d37a030df94d48c7a39161a58e1b7ff835782b9662b5596e4dd3a"), ("28f90dcb0e1cc547e5abe7465043c84cb2af7dc9539a0a88d61d85f503c57799", "2ef06e0fc87b625c8a58c4909caebaee555135407cd48e239a3587e31eac0a13", "13839c018e3986052846f95562dd0bd9a067a3f5f4cd71681e110298aeb47a43", "05f3ffacd1120ebe77101328980735dbb926f39b58ac36dcc8724906d3633527"), ("27166f9a64c542bae531f6ddec84504449c21f6fc79f084ee6d3b16c6b3064ce", "20c4fdb270c66e0da588569682a35af741d7ac1128fc58cd4d15462263975e62", "18bbf820e4902dec8cdd14faf34317339980f4852095dbcbe24dce53deab1236", "1baee12fa0fb79c35943c37c796809cf78ebed5cbb7be49e793c7e5ac629390c"), ("09eb0966be98c491c41e66adce31a33997c0d95102573588b34ef1b26beaba13", "1b55150e8c557ae927e4335f4da4738cc3ecd3558755d0c70a828d565ab7bea7", "1f484471400354e8a81c9420e4db5aecd9551ca47945ee82c4a016facc51d6d9", "0a51795ecf5589a6aae0c7379d2275fa80ade11eee34435b092ccde57c5373af"), ("07be798644fe33dee7cab5a4a14a559d06103ab70ce8bf9d35b8331c4561e5fd", "3052486d8b1e1f80cb7bd1c050c065a52cd3c9c9636912cb7d8fbcb3bcab3edd", "1674e6b7c5cd5af6ac3b9f15ad00dc0aa43ccf2ed61f793a278de3c95ef5a1ac", "258edf5f71213dd3b9b6fb6a9bd4c08001962e22bb24e10c38399dfad0cdfe85"), ("09ac3744efa7eb53d5f8813ae4adce84f73c63c0c491b0014157f807999cf37c", "2169b099ac136ce326afda1ff7ac1358c487d2f214f2201d2aa8bf0bd5c09dc4", "24ef407b27c7de992b57867b6f9ea2e7bedf646863f0bea61c14e76b75e58e4d", "1832f00c018778f7ac3579598c43e815dd58465aac966bf67c7f3360535487df"), ("0f942fe3e9161f66d4c449e23a5e0ff0802aa3cc9e663c7ff29e310dd92c861c", "2ecdbc3b634cccaca09b693b889defdf32f59e10d352973818745a4a6da2c72d", "28860cb7a67598c63312ac4245a1fffd1ac5f0915e4e4f3e5fdb4582e596e653", "19478959787b6c82e233fe2f47f744ee71463db02724bc2bf9f7fdee7520d69c"), ("0750f6c0abfce2bc477ff47ae00fea6b7f64b8d995f57a58a211d739875cc469", "1fde2bf6d787ad371394e45ceff85278d4fc0d35e2a454975c3aa2bac5b60ec2", "0f7a186fcaf1912cce5209bb6eba3a39010b1ea7240a0ac3395e5bc8c9a0812e", "088f02d3bd8dc12c9fe7261e154f172a63a1c1e327c0ab7ec9f7a0f519360ae6"), ("14b4f7126784da25a6be10d76e8a4df88479add47b0c22068660e7ab9ad99d2b", "19490e076e25acdd2fc7bb509bb08e47835b53825a0cd8a5d0fff1d5555c244a", "183cdbd418c3256812f8b3b410b69a084ed7fe5585840c028f3cbbeab8effd40", "024f9ec22f7e95442ddbdf4781cc5af85b3355c1614d7920bfad14d9f391ef63"), ("0d32fe8ee4901336062ff075768f0d753f5016a280cdf2889751d711ebf56ad8", "05e56d696cff25f0c392c32d6283dfca2a4239ce5f57238cfe944890f9109ead", "0049e151906ee29498b673ce51ef2c01fa8353240f28e984409186779dc466d9", "00aa18ac2d22908fcd670b21c81ede1df4ddf724b7065289691d14d778b7c5bb"), ("052773b309f10bef98f1e28d275b99952a1de6091f5385a959ff500da9061cb9", "1db621739c61c4ab6f9d941249ee85295480867baf1e194abc655c329e08aa8d", "2c12f86f90b3398824950f8fdbea5e4f90775aed3a3de97a10aaa7393b0a70d9", "18b4d76f6b78c2f3261d45d1609b861221efe568af35309b1181366e181f4b87"), ("22cd7cea45ae7decd9717a29edbac3d0e2cdd32e1691d74eaef4fe50049796c5", "0b9b55177e5344d45747793956c8625a7ed257d086c648f51f7ace899ec9b495", "1ca9608faa0d457f1480ce595a1cece10b3db5d9a90091acd02e6e8965bf35f2", "0d59ae9ca5c8be0bdb61c87d9f41dd3d79d9385f7ae0eaf10a81fe1ae6fb98e0"), ("1b761750fc23a6a3a2e11f83b4c09faf6d15d920c40b12c9ad58fd90e6d28f73", "04bf233604315a4e08abe6160bb74e0e482a637a395bf64d2757c4e891a3b83d", "25746d6a66df9c69409ee61e24eb17599d2e631e68c24fe4048d128a78d56b7f", "260ab216b85ef257feae16da26c058f573cc53dc13cd8566ad876098ee73fe51"), ("1c101754ac2eac4c23a167de8cdb2c5ceb0289fd72d21e2c6ba562e4bf4734c9", "0e3ce15f5bf1f35fc7092f93e644482535c42cffcfd3e634c93879b09ed3d540", "2babfeaddb1cabb4f977603575d3180fda27c0e9c97ec3584ed54378d656d469", "281c76339785b2c80f3ebffdae52a94dc6f1f3809224945a89df9a29400ac491"), ("1abd9edd3395995643cbdc21452e684e53fd5f35913f3bcafa84b0daf853b127", "230df463b156b5a378dd72b3e3c9359def3efd39dd5c273d4f7380ec313f4fc7", "1c73b15d80a7efb0044a9e0e98ea1022c496934d309a62ee46d3271806060c43", "23692402ca472b725a9758e97d800561c2e4a3d1baa4bb3d855e615252c9f9b3"), ("27780545132ba1b8cc85154ae302096606c269159777f846d6be203938b9059e", "267b18106dd58bfae0bb5e64b2a0d2cb9d1ba80b8092fa25d6732265fc72af0a", "0b9d050f5c91058b1c4e16b9c71d691db1e474dd237bf116d8ad23b35a85678e", "05c6660c5ca93ed8797b23b784b358888f4e4b8f3ab6f9fe765767e4ecbaf71c"), ("10a240129b167dc0722d92b4e3262d1e176b6ed6c79f44e1a1342b6cefc85fae", "2618df7745ab359f2e834060da4f89de20ca54465baaaecb1764c9113e408caa", "2bf2be0bc5bd4960bf399f90f73b6ae6a56282ff2e115ddd9a2abdb7ee672131", "2040b8fd5ce96f258e4c276116de7d47535646b9c9a6f706190b48da4da56847"), ("14d96af33170cfb7d05488aca95a8fd4349de40ed9cca2ea879e3cdd4fec7af0", "2046f8581ee15df65a7cc71beaf08fdb43edd8e146197bc7629373c188ee099a", "2201c1dda839446455e368664fbf6422e8ec2a143d943a0f8d1c0d739f942d47", "298e42db28ef755e448671334e3e44249b594cbf1c1ef6cd0e35aa586733a9a0"), ("2cf62b045975a8258aa70827711eed2c251d96eccca8e4a3e55e1a972dcbfab6", "14791222bbe3872313d7605da69845e959378a281c6d449ca9c9198831efe37f", "13c20ad157731dd93fabb4dca4664b57cda0c8c1279836c5b9369267279b906a", "04c8aec589e1cb4867dfa30ed68c971200a715e71e404471f231cbea655d5c7e"), ("1e4e2e57814c9668315ba064832968564e0412f89383c1cbdc8a5fdd3fb83e41", "2e637978271b901b58c4803629b17cf4fd2d24c5af30645d926cc0710e889b29", "0bcd51134bcd5ef86364ca5d33c38acdfda6d38e2f27487f908b82467d716f1c", "2d84521fe8bd69ff3613cd77b0d84b93357a8f6f60d046f51036a954c9c1029a"), ("2498153fa24cc333ab21a8149299a46d32ec26af139d0af3db88cc7cbfd32460", "15c0cad41dc5d1f025796c12666951b78c0ba9893277d2ac280fc4a85b4c9e91", "076200bac54eb6e8f7f6da401542ef53aeffc04dcc19290eebfb2f4b9f0e3f5a", "0624c20c43aff207bbfef4b245589fa971b15c90b181d9f0bb2bafb1b09e40a7"), ("2139f5c150284cb70eeeda765f62e88c905ae865385ab5fd73cb190bfd4adcff", "0de341e3f757fd1b55aa4e289a29f4d81695326cd59fa07114780a7b575eab2b", "0641b97be235100d9040699cd4249852af566e0688f29ef83d92f52e35740dcb", "262056c4f3b75f5bea6a25434a4d7acbebb9c61dcfe6abdd011ce4b85342a5f7"), ("0d1305020e2eb41482662cb06387342e531aab0510081e66da91f5a82b4b4456", "0ac955597086acce9e088990ebcdd20fc31c01303b672d486df673758ad68b8e", "112a4fcc773a47d4544ce67c55a1785e85b5863f69234653be4007c5440b162c", "0e1862cf5d63dee2f093c7a1d20e98660569bd029bbee6c02554104baffe69c2"), ("07939fe4ede255727b06931706142c9811c72731b66ba9246d2c6f5aecb0f8e4", "06b1958ec6dbe59ed5b1aab6efb9152278e09c5811235d0ffd18981c5d6a7499", "060fd485a12b87abae80dbcd1bf7206293b7524739f0429cf14b25e6236e3735", "1a527a9b7c8abbfa454e15d0926c3e6effffb957300317d94a3a461076761b73"), ("1e2ac0155f8aff35609c5ffb85aa44866f6202b5c23c0794282c7a1101c155b5", "081fbd3c528ac22280381ce66aa5dbe98f4f04e65f8c0f0ccaa490543eb0b3a6", "0a05f9433578f3d2a179ffd4519b56d442bd5c50ae0249cf12d90e13c459f155", "15c57ed31c257fdcde99cca28f7afcdab029600988f82a97e5ddd7b0262ef563"), ("2b2d7523ef65ef4875da54de936c9239d92f5c3c9db859d4245933574c5aa54c", "270966d7a8b24d959537d244f5deaf8c92885cba869bf79358d636b8b255b8e2", "1d5e43504a11637a59a1406d7bbd19323f1a2408809ab948b6f2108f97e78e59", "089cfb11cfd11417ff21c3306ae93096f9ee3a30ceb3ae0425ce5e019849eb57"), ("2737800ccf652cc8a6fbe5914f5cde3a5c7eb3f23b6fd82e01402317fa0d557c", "207b02fbc6df31f23d00eb97773a73a90e5ef2b1c95e865991e45abd5c714e81", "07a9eb9e9b8e87165b054b0b4cbce7702f637836e93ac71436320570e9767829", "09dd0b74d1e7a3ef88737fe5196a3a98bc330df311888b7b12170d25a52d5ae8"), ("1650d609f80b6704dd01198b0eea56d0ca0b3a953525c0e44aab846b66fcab23", "2de9efa7d471cb922ec73acd3c8e8a5b6cee15c146dbc2032d38fc0ac8214c18", "09b796c83a1ee159708569d5528c40f72fa3b2a409d6ebf54f0dbc14354b0a73", "0a07454e5a8a24d18339ad35b415e1e91d66c6760b776e2abb4c2d39c612c878"), ("0c46383aa52d076d3a139ab57742800df8a1af7d709be4a7ca100a8a927d85a5", "2c6c2c066662e94ad572e64a75e669a67ce85ef7d04b26815dda4dec0e8297b6", "107e4244472d9a17806694d439dcd78c0fec00c534fead6dd2c69f1e1aa86316", "1af12ea1cf3c2cc5f0fbf707ef4410936b1af2a238381f2a1013640e8350818f"), ("203324fb35a6b8fda31dc1d01a1b6dc44437b2ecfa3ab432b73731b174788282", "21345ec532d0980e5c1a105c2341092bf7f4a0063f49f9331928f70f165a4788", "097c413a083939de97be744158784f1cd9b0b9a4b0ef92ea085bf1a8d896b9b9", "1c57736d21042dea65389ce30dc4a876ea298b71e5cf5283f33cc2510bcf439b"), ("04ad79d274132bbd98601ff0cdafc6f46ed072cb4adb5542027c9c17f0712e0c", "18bb47691101602ddb90e439eb315b5230e1f25fd4e9b41f7e96b87072fcd130", "290a7b22f1f3111a1e925410923e9453b5e57cc1679736b1a4286c90c98e3d52", "2e1a558a4ef0fd2fa08d679ccde8d768eaf27db4a263a4d6b3bd57490cbef086"), ("19f85468543826ce5421f1d141fdb6650f7c6c55cb74d7cd846a2ddd91ef3633", "11e990dc93b21155b98f840bbea804a34b02b974f14f04373ca719232311dad7", "121d3e399d47b5349ce96573bed79849a268a09047fc896886cf83eb787f4e6a", "21e7573aeccdf733a48c62dd4f369796ced73cd97af65ee96c2686da013aafa2"), ("070d9c1c9ee168ae2c0787c36913acf5a0aef2ca86f5d33b1571361ef945dab1", "0cc8f8242366c0678546964ec115613886bd108ba8e638637c2d5dc08f09872b", "00cd07c4abc5ff1addad40a069ad03e51ac28a8164adc1c6a23ddfcfbfde94f0", "198f23b3e87feefb61fc77a9c270554fde23b1bdde5a47c93b252947f9797f1d"), ("2c62bb571be4ab9fb9a396a1613121239153121fe337bdf6363c320d1548f8f8", "04db6c0c1c0b77c3ca116dfcf9614b6bc179c84cb4d49f01941ffce974941c65", "13982c9f3db68eee8da415044379556fac51f350b169d239458b9b1650846e09", "2de70b4eb14362123529a9958573b62cdcb59ae09241b5fb6cb83214a9cdca6c"), ("1cc9b4195d09ae88dbb5fc39d3c64de40febbf5a1715c4aaa33c2d0c09fb1bea", "1268af8e431552348c7ff6b34ea23e0726bb52fbc448ad711cf97ca38945f3e0", "3021887abacc2c9b0afe6307e60962baabf74c6dee52154bc2429f59ef012fd0", "12f83bf6caac5886084277b8c1382606f7bf46c4957366d280c24dab49ec2fa3"), ("0ae85138120923a6653ca8f420a09b28fb86644a9368466c610710a1ab154461", "0a40bea97ef79d42ec809ef9ae51b4720c8b33dda6ccd9ba4b19439cd7a69617", "1bb87bec1f866ec17d6c80b09ae1d4ae0d374d98586f1dc21f38507c7396f928", "0795d0707e7b59340f86218f47e547cac754cca935b21437ca1784cbcb371e22"), ("2c9c7a4ac954b340eefc299127c5384f1d134e607a51267ad3a16fc2b83b76f9", "20357f1d3de75add442e21e7cc2e38d8fa4338cc2c1072c196b37229693add8c", "007167ab1f1915045a68a0189238e8f8f73956f1702786145e28cc6474f9468d", "2ba2a1f16311b942567b9b1ff4bf82c248609a3e31af54c93dc581d8ccd651c5"), ("05771dcdc27244889f8ae9a34e1c1fc1dd5312572a56985dcbe7b54115196a5b", "11c2c1a34bcaf90422717f54fbd9a3f34438fc75baa8765fd2820c579ceda8c4", "0d3f8a6449787f6862a87c96cf7c27e4b37436c38ea3dad0376e8fa6124a419f", "074504eaef740c4300e3477efa70bcb9771fd3e6349221d1e8abf457227640b7"), ("1bf7a36dde16b1dbe82e7466e6278c9eade2ef620f08fcfef5b19df14aa557c6", "1d02505baaa2fd029f67475ded5fb21f5bd2c4fb648d7e4f1c234ec068a23506", "175ce8257f6a4a0416c37c2bb14d806c9c479f530f4227ecfb51409a06702163", "02a881a266706df825eb436f6385aeec14c3b22180bbe56d9b1b19032e2d486c"), ("27ef2d170b75ed78ec6e4081225a390199379bd272ba530cc9cc7723c082d0bc", "228988df9ceaaa5ec7ada181b657f9bfe23489785420c8301621ee7e4a1f51dd", "1c2307613f7f89f8bc047f0c292cd54f9bdb4894a33a2a73a28612e8abdb7c91", "132548726a3989108153b357546c5415baca9a8726243d3775cdc9052a084cad"), ("00d2cadf4eb94938364c432855c162492b6c0ff987f53e8a4e082f5cce4dec3b", "08a7f04121e49e4bf171570ca499739fc567ed2014fb3f85098a7fcd02556347", "12c134f6488c1301b3b750423690218bf9cabc48e26958f22e4e50ec0e784f50", "24323bb99a89530f096284a7c723064f9f09c512590a3c278f04b9a10d66e79b"), ("094073c222d412fc7312719026d93e8c310e9c9e77670f9a4faaf359a7bfb42f", "2a1627b6fe03b75b34f14cf94483f4649010bef878b356dc3c60ece43e7f29ad", "2e0a4a035bec0163079e267cb5641cfe57efd0c1a2bd72690695ec0ac7f669d0", "048727856b31058f6aae7210920c8b9a22dcae32b09743484e949c8e6e07b5c2"), ("14042f57edccc4b18f7939b2537e3431650f184d3acd81c1f5345830398c2e21", "293bbcb83ddb066542cdd3447be01993d5f341d4678675f0b22493687bbd3cb5", "25fde040c9c67706717a7207c21fc0ee5377de6974eea9916dffb78eec97d4ec", "11ff3ea8a272f10c6c08fe080151fff0c596f5dd74a3ccba1b1961ddd622172c"), ("156c21a1741d927507052d009c23c6af5667430e6e60f03d747cbd6e9725e2a7", "07ad824afc9014bbd0a00d1fac5a83f366a98d52d93ee63aad6dc3e0b3d49d33", "0084495c84ab0d3b2fb2250da0ed55881168a6341a653002bbf5d43544fdd5dc", "0680b8e00edd772e7c83d6f8a8421fa75ffb36259b6b72e72d51442f65e6123f"), ("1f98b06ac06cb93ba8811cfc260a7a3db660f61694650305e55e6ace7f8ca1a8", "0a086fe12d30f7331176e1968e4c8033724484de4248e4038742995698f4e905", "0c4ae0ea275a6b4f3b8e1c50f70dd92512d0fc411e2ab9a17acd1d4bffb1059a", "0e7e2b5bb6fe4c76e00786652655195ed278f704e0a2c336436e2d54b78a4a06"), ("17a2a4fec60496159eaa597b904d03c5c5f0fa84fb01e365d71fc57372730491", "16a85a87ff3cd491f6a9d43d8a54402f14b0bb550bfc82aa0e051340946e123f", "1394e8dd9f628d05bdfa19c2e664c5ddb8186ef4e69776b3b97805b1e21c5003", "1e72cf93479f1fd87431bfca5a579dc34b4c688511e36686a0068749805dcbdb"), ("24a83e5f7c7f1a1d24e66fef41dd7e7591a66f57a40f2820bdb09403666ed51d", "06a812453e705eb427a3a8c363e76a418df244b3f9a5c0216a4ead08c1fc2069", "168bef231234053a6583dede5e7b77fd5726100b7f1d6f0fffc23f4aafbc8aab", "1f81e9707b494a28e667a2836db2d68a641432cfcdd97a761c5a851d8c861a20"), ("2769cdd7a54c888769303f9d0989ac9737c230dc53e5dcadfb8876441561d737", "11a1359c4df8bb127e3426050cb0a507c7b10574cec2c1f686864b65956dc7b4", "15b72e51f6d21ca53c80a0c16a38ea41b8a687d550232411410510bca3a7dd58", "09076e803ffb89ce22a253a507361206818522dc7c8adf87e08e5558d07f7b7d"), ("280e2a4e1c4d4fd2a2926719e7220fe15f23cfe38999f7b9ffc339542a6db4c6", "11857e5f0b37fa4f9e36e4000d3008f5ce490ee5f9deabf073ae40f5e37c34f1", "1d15326c68bbc8965a982d61dc36c6354bff6f383e92cd86317dcfcff48d8bab", "081a16aa9c175e37a18e1b1e71e77f679ae3f382b81c54b05881dbf435c9fe55"), ("021c186d08d5b26901be561076f290bda887ed8684d1d29dc9feffe5fb8aae27", "2e41580c49dfc276d9d755a3d72f8b37e9fbbc30ab0bd74a9dbd0ff1edf0ef74", "23cf9f8519f749889f83a70174f25f1f49752070e42a9917b494ebacae901a94", "14ac0c1502b7c912c1cc51e2c676c20a7dc45c9d07b1bfaa36fee5bee19db9de"), ("158fe2f54aadab05c568b8cfd28c8824e5495862252e15d7414a1c11f7c39060", "2d55b1123e83ebb1064c7a16038ad5dcad76864bb08bb510572b0eb85a381ab0", "1eb61893476bac2e1fcdf754f2b8f40942fd8a5c2d4798493ca139b06a09df91", "057a2800e84a4d2eac0e1602f50ee349ed8a4c66eca3da09de4e1c23af89311c"), ("07a27c800fdb81972c423ce729516c463df6b546060234e3131ceaf0b5e9eab0", "120b4e72d31781915032eb4f75b3542fc481b80f4f694081ed4f7bc28798e4f0", "0d5f1abaa445f0fdb283e921c964d8f7d4f852608122dc0382d5055816e6fe56", "1f8dacf5c2acb4c56a19cef37c1a5ecdbef7f564a02c948eca7207eb6f9b6cd7"), ("2b9ab1eca1c6dcc46bdfe519a913b92c227351b29a0a8c756b18cc4c3f0305d7", "2550f637c0a1ac368962e852484b15e85c6559ee657f1ae065a9cf01d5c0604a", "19a687269b532b84e9bba48d76c0294552537aee35e6f682e0bf90fdf81cb8e4", "1193bb18d4dfdc8f54ef1e2fd189b18cac08f44513fefc72c2cd97cafd7feda6"), ("09b68b7a864c30bfe10cd99a8c91ca8025cd2ce2fc371503d6b8155660ad0bc7", "2df91b75973f8b9b526e00a9753161773e592b7c0ce21676363603a83771f99e", "09d06672874924bc92cf575b934d94fa70ce27adce02c630d4e36305c689b448", "29042f32573a0faf9ec154b13e472cac81087528348808c8b0b6783acd1cb906"), ("09c202aca1407d8aae95b0ac1923ba09ff7f77ee46f563f834123173619f72db", "1cf7658174fd10e179ec7bfdc3a22eb26399417946b7eee0b9a2c237939217ed", "143d66f95f8f4c11fd7d0ee1586d52cc15d39d0b0e5e2c0c32155a7a1bf7af1b", "09e3b7ad2183f68cd9076ad8139c8587dcbb743e4e713f623f45f75c84791e98"), ("2802ad826d5e56ba81e32fc5f4d1b3eb38dd92e3d665f9fe1ea28a5b542c65f6", "0c4330546fdac224c321fce0a950ca57dd57a124ce9513dfc9e8e8254abf61e4", "0f40eb93c958fb9b13be094f2590dcf5a5c345c5b21870e4583197398b77b148", "2339c48135abe423e29ba85df57887f72406e450c12fef3a32c07c91b6db1e5e"), ("09c991eb462f6f34c6f39ddd80447fb65e079586281f525ad301db9fb84e5ec4", "0712dc39a2be532e672c0d9600b0e12384a6dc347f3abf9cb46dea6883865967", "2f7c38598bf18a5699c1fe87ca102605a5832308a88f78c3c7e7dcfa5f7fbb8e", "1a111baede1a57f452a34fe564002e9f9ff3ad06f0d3e23dcc559981943b487e"), ("06102b2393c59661196d9b9c19b24587b9e2ea3410229c3d034befe9b676cc19", "1c5e2dc3cad1e0091e4463a43a8c5d9e43d6e151fe9e8073d1a9433206d2d48c", "2385addfa43d53b08a1284e3d8c30b7f4b6cae141213308771621e03052dfac7", "061ea0b609070297ee4b2e9a4492dd14a6d62be3b20090476fb1a9b752ae6ac1"), ("204273f7a4e532336620b240b67bac79032bc1c0e5520954a13663667f81a543", "0b0a29ad667b7db3dbec55b41f0a437c317515746614a1b65ffdc6673499856d", "0ae897e274b9513250d5a58d8717d6ec5d7392ea9a097e890e536a5a89115492", "2aed6d890bbfc1c7c1e666efdd7bbfb485627caf8a31fe5140e7853c94ff97e2"), ("2fc6e55c15fd4a68ef91dfbe582281dc547e0580833567ac8d7cde9f72eb8932", "02d255f836fce8e75ad5c5a953b613a6e4f60f91a6acd80c90a5a5d89c8b2c6f", "26145fe084010f42215b54ee90b5d5be26db7c6a68fd9a5c48fd10e91dee46b8", "01ba6269c10204ac0ac6af614180da134687d76d7f75c2f522ee7cc97c63cfe1"), ("0f7f5631f446742b89135726cb870b2d1e5ea800d6ac537407267b784986bb3e", "1d7e8e1a58706905a8757a3632d7a92e658ea2da2cf93656130c799cd5c16f51", "0a62350c84ab3e565f2b2d1ed9f2a947ca7512b55f94c57f593fed6ee5f209f7", "171ceacbcaa6b1f43927a321a57b558bce9262958a0a4086c40ff0a7f4605ead"), ("2df3a562b99cf86b2239dc1adaba4b4c5f8f5447aa54504696e16b1e2926b0db", "2f693a5797c13c4dbdc197e24835cfef309e85fc379e31cfb36bd61bb81290a3", "2b121a187705f091774213ad838cc1e6a965e6b61d54c7b82a287816aebe6092", "2410f808c63de14ab246215e1ae2accd224b56a667dfe05b15812d5dd60e8e11"), ("06536c6ed59abb920489e41c623b83884c517814fb4345f90741171400e20861", "026d1077822e6cab5e9b66459fda4368a134ee8b2b1eff2e2d7b9b5eef8bd245", "10b80b526d01d49cfec4f413366b641bcb04e88902b96d2e89595262b43cd606", "0ee8d140aecc1b7b8ddc3252ce3e755fafb4e29fe7442e18da9b98ba6e5d6d42"), ("29251b6eacae5777c34e63b01717001838b66f0e736158997d4bb49728667296", "0dca24952e89c55199886f9475d87c94c4627b33317b70ca7decf8f48f957680", "165e93f5072dae919988bfd538b8fdce2ee9ea5e4ab00dff5313dd91231bd89a", "18bd7a57a3d0c208e26f777736180de5b225faa09e56e4fce534a91209c6c456"), ("2a9e41eea7aa5c1e727080e01dfb0eaf86b71401db6f39361a44f51a41ef5a0b", "29ee57ee21d30cb1aa62f7247a4e664d9f25df218e8f1e936adcf41ab05e80a4", "0759dbe6e04e04729c7cc8f3ac829f45bd872dd5fe2e6aaeb9a208db244700ec", "28275174e7a44c497d6b0ad331af0dcd414ae69a1dc9531ab0ec7ffe16f0dc1c"), ("22c77eae01b0b89381f8be99a4c906ac4ac33d541556e1c018c349578d0a5685", "2c6f704cbe6a4701f0acdef23a9e1e5ead7e00df20ce8aa968038ede42f550ed", "182783ece3275a5dc60684f5c644a1edfdd49eb6a6211f2359c50af0608e46f8", "1fa54bf91a9edcc8478a9abfa4b38eccbbedab1df84c9fc8d353b936bcc4fd7f"), ("2641efb1e321f6249a7e5330c6965a86fe80e955495b1ffbbb00993808b4a7ed", "11827ab69c2fae64d20375598089bb9a6d8eebfc7dd686b25a1e5d4629d9a069", "1407d9943d16352e8fe05edd37677090f2294576a8165bc217da5600e37dea7f", "2cec49a08f333a6c93b4fbe35fd6b3cb8f2f4130f35ac48354ff6f22ed78facb"), ("1bf6df8c6785398daa3f51f642db67183d9f5e07802ff5c59d07a12f5417f299", "01e897d783c5b326390e599b24b4c800e71a7f54ac02aa73779804b42145e4bc", "020426f2df3f0aa1afa0207563be6a6d94e68f81310d5fb1e436ba9429fe3f5f", "10a251a27135d6ff285ce3820f8a32ca656c36e3f42c9a922cfa0d9ef918ba28"), ("22db52f7101cf7b717c359477a1e55bac69b3f6dd637f15deb65c824ea965dd5", "1e41ab8e22c393b1f08401ad66e9a63f39918a410c2a7afd8d8394678c8815ec", "2d1a012a72aea41457688a6eb3ce699f4c87db92608e8ebafd7abcfa647ae920", "2fb10b42ff0b6496a00188368379de1e00849487d3f268badce46953f0bf126b"), ("00ec38e33e022452c357126fb6cfb4ec9c99089667dde877def6b1a80c67c099", "2e25ff5d046f9e6c050a824940d9c1263bb970e7fde94e6457209ebfeb1aafec", "2eb647f9ef5957d89a507593e24126e677e8912b6948d772d4e1237e6e9773a5", "106c0252b67be7444d6e7a50778c50482d1fa75d90efa3f3198e3759d5608162"), ("030f9da7a69872d764708d1832012617722e7ee1a44ec91a2151b36d4dba0f2f", "14956acc74af5e1082b7bddc4a1dda09dbf21496a424f081fced07725df12381", "232f4bd7a967e79f0e90ef150cb374ee09471309f873b76a5f776c945c8034e5", "1e7b2de905831f711c42cc233b88e234793fe52fd02f4d2fedc17ed6b5a1177c"), ("27f06fefff4218ce19c1699b2207b3ac2bbefd10b62d83e15654f5e4d79a13c3", "296fbf2a7010171b40dd083e279e4cce6316b863c63e4a3a1e52187649ff4a79", "23356e83de9b6179f6263df19056b03cd2b73c6ff865b61049305be9396a2ca1", "1e62208af96bd69c79cab870c618e06e6d688d406492ee78dcbba93f61a26690"), ("0114c80d2e24c0fa63a99fc4ffff662233d330011afdca603d7172a106c5d115", "2f52df491c2185bc778eee80f8d255b67f63f24b2e7ae067d1cb8b0df97e603d", "283c52524b8be8b1089612c3a38cfe30beb2cc9a9735bdbe19281d1edaffe46a", "18528fca233d8c1b698445163f3bbddebb1a65c16948b3edf79ca5a4b00dd797"), ("0c42858d01ad452350d367126c0f1df2be2de94fc3dbecfd807781ebccc3a6c8", "28d4f8ed8f47cb142b17f7f9b6f26c2d2fbed8ecb9bcbeba29d9763b8899a6d6", "1fcb6dd9b6900622bc4a546279a72df1366c3e4502d809e915826741c8d4e9c3", "2ce92cb60f5e88202184aa0f4035fcf38341a22cb9ac0460dcb5a5ed140e0eaa"), ("063296f3e7024de6b3554184c451e1e7390b4ad0eb40060a3cc70edf4286c67c", "23bb935eef05b1e4db23ba9d078823c0486f11612dc6db6ef78606225af254a1", "2a33d39930eef7715210a5a9104d2cd9da7218199c0f8a663544c1be8e64688c", "1f628f7a08471eede4f5e0b0bd6bc5b8af43e2e9bad622b854982710e512e339"), ("0226f933d5d9b3c1463e574e3e81eb740c52a80db253e6945e8aa2c1d1bf9cf3", "1af71dc8c6d870fe65d13d7050423ba84e2dbbab96df8daca0dab2da24776b93", "0999db6fb1dc4bf55c18fda8b8c9bc266e29a1c2440be946284b49345e4686f4", "21f7a103fcd7644fa4af20c7f1f9f9be22d126a0cef87f27c47796629278cd1a"), ("1ca021241f15a452374d8961df16905e3aec9bdaf16e98c6c2a06b75f238aff5", "17ee0ead0ad0f4ad81bff7633a2c0afa4c778e754b87f8ea511b8002c107cce5", "2e67a1965cc46561cad2f7f80220190671dd2eb0c02db4821aec586f3971fa80", "070a04b62fad20efc02ad026550a44397c6d8880341486b77a58b8375f20744b"), ("24b2429700e9f44d6071a1a8875c632c3f64072abb5ea97d41998a6da1336d8e", "158915ff1d741dacb386823fd1b64b82aaa83957e011816870e56fc778cf254e", "18689044830e8ec4e7cbe402e76bd8e68ad736ca9f28910bc54fdaee88e48982", "0173cbf85b8f11b709200781a8ccffe09647dc458af478d6864c44d59f4de815"), ("0d3ed2ce1788213d71f4f7ca6ea3074278f9cf4c6d693a458dfd18cc872079db", "098c2776b7d5da55596ac73ef694f560faf038131ff7d2f562c9d017ef654705", "2ccbea02d3d465a9472f40def93af0e513142c28c5d75d13acd3beb3e47a7cef", "1085a86ff2e74d2b4e1166f6b41d761c5b879f6174684206da166c2c561abb8e"), ("228b3f4a43552105903770355d5f757a6d6e2c884cf8dd9a6e67a73e6e3d81a5", "109570c3abb5970bd86a6a1d5bdb1f195ce66042b2f2e5a98edb7748be9f3380", "1ab73167b536e7d93480932ff6754f6bb99a6cacc35631da40a59a64250e520d", "015200d218d981f6530580b0e7854a18b3a45e63600de332eb3835e290ddc41b"), ("0f4816aad753c2ac0010a30e305705a845f2a10d395608f599d48adb514beadc", "03e09f8d9beb28e690d99551c34aead39a09306b2457689c144b2f0bf6ef6796", "06320e1dce172d3eed2518691d46499cdf204b20a5e2039f4b76e668d316be26", "2a834751c49c50a39a4c70dfd53700cff26c956342d943158541baa1681a89fe"), ("0701badd3a985e6211255bc3c39aefb5dec4a0528c1c75db2e47965eecfe6ff9", "116c45a45dad414aaba5b3c8cbc86210d356e003608d51666f1174fae4763bd1", "1391f08469dbbf53b451a591f8811e2bc9d8e171ec9afd4c3521bda890766753", "1b7fa5d0966118bf4dfa1e961176546524cc7e9755dd253486e11e73529cd475"), ("0f84f6145898960d53d0f0e47670e5f294a8f72ee6f0d2aaa2574e9aa1dafbc5", "220517158af69e134763a4c4747eac3ad0969c08f64c042b97d2bac2bf30c0bc", "2c8194a14f5d925396cac21ea75cbed45310386a8101c2574cb98ae22eca5444", "151e5d3dd7f0a2209618baccf849543e6482c98a7a3a71a73e488cac695df5df"), ("1d2c59fff187b03544ca536254a10008c78e1121f87e91c19e3337071e2aed89", "23f2223e786a547141733eedb5c55f03de0be736e2025ff0ff061f3fb1c5e485", "2fb04cf5c0790671e33d45f7d5bb3e682928e943b223eb9e294684cd766de07c", "1f9383cd640dcf4c181bff86bc0de09cb132870c737fbb13742a6b5205fa5ade"), ("13fd6bd0f1e1cfb404e84f24206bc0bab81e1412b3d2360ee2c9125994461157", "1554bee3e4dcbca1165d7101dd231d11f9b7c4f55cd02dc566689d62cd5cde2b", "1d802b633540418fe9a89d70fe916852d8a6e76aa2a454c72d4b0130fc590ef4", "05edd1c30779e646ab1536ced45be38ee0aff19cc6d09b457f17614c9116eb8b"), ("28447cf837db6b7d1398288346b2c28148e5726c59e829414118ed36fe43a59a", "19d69f13dd343508c259a2dd04c09d4fa54ca15da1fca14ff2db4433875550a5", "225cf8fbed300a214b20ceb0b3d782a950cd78b89477f17e4c88f88acd110fb0", "1304c1dc70c7adb32a76a99a006a6f50a37c1f24f682f7fef495d13b2a25e3e8"), ("29b60306bd63a237db9632ae5f33040ba7e7c32f7702e3b8da8591dcffaad24e", "175aefdb0bf053168a32611f5253ed59c734092801654b9f634283f515fa4f39", "28424aced1ee65457d1878a451d799b1c910f161e84731517a1960d2df29262f", "28ab849a05c903d6ffd7fbed5a9b08de0216a3209559bc2b04f840d48190e38e"), ("0062c73fa8c6b3d5483441e2b132906a500d7d73cb8b74ccb8dac4dbb847f9e2", "2ffc2024c95a1dc3d3057504cd1e4a139b2c0a670c1ae6aae861fedecf049c71", "158b03a7b5371e88000061f45d29caa56a43422ba479c9f7ef173a80326f3d5c", "2faa189ffc2cebab6d21bbfcea3b87c66490a77a87898bef076ccd61747a765f"), ("202ee1531ca2b8547a7316f50d6dede2892dca950da84204d3a9572f3feff1a4", "2ce6451eefbd3ad149f419d87cd9339b1897acff386035d16b85bed84ede05c8", "2899249a2e7f14c53cc7dd68ad722b3b32248b80cf5b6de4361b1d125a5b3136", "152d2b05c00e2b46c3d7a076b3a03e0bdf1a8f93f6e26b308e2d970f4922d8db"), ("0bfb1d0b21f7ffc544fe38f329f3fe0ec2e2ab63209e80b35d0837d92d2614a9", "18ca48bb78c4b03e5877fa0b37e79be596fe870594d99e3023c41c9aca874bac", "1cfe8f3988b0529a83759b4c4224e5e9fc88feec9f26c9be921694d227df3a0e", "2a9141e18ea812f1bc2baa1f0086fcd20985335cd5a53932748c68b07394460a"), ("0d4819e04a53c0aee298e16e3fb1edb5f372b6770ee32b7b2afc35324b74df19", "119cd5b053aa4f0d2f4eccffa855bfecbb9b353cb3263d6a4523e431f37c5820", "1973e34f67a044f7a9cdc9fe595ec80a77368ea5e125b6d379db74304435881c", "1fb09708f8a55b24ebf493eddc5e9037758bfaebf553447be19668387e7833c6"), ("242b21e594e3ff5a58a26c82895c5391d9c508bb669c75867c2e87a9fd5fb3d0", "203e9210b92cd75ed354ad8e0ec38236c7cb14a4349504eb4242f0a92656694c", "2713d8a491a6b6304b7cf1edd8afcde858afc48e620f7dd8db2993e2da53dd80", "10adcce3ea6ff4c4215a5a9b5df9c30b90e289caaf642025b8697c5e7b3a51ae"), ("24dda751312daee6fd933811a08f36055386ac59582135b4c78d9b36c0865003", "1f0803c6b9be7374bf0e99bdc0302d01dadd5ea411a2db4d6bf9f3b8ab1f4c5a", "1340772c6aa84da07537c56b17d2518ac1d5cf37589262df59c86308b122240f", "15a000b911a72cdc4afe04106c0ae0b289a66044d64febba71775664d27b2c68"), ("05359b5575d7713fa278f12c50fa6a9222711cd8c2378e93527e0a6932a97022", "0cfd3f5b5ef49d93a2db8cb62a28e6c121068e5c55b02f45a750e14e9bef779f", "1b4346763024f9c1b8c4d5d00c7d4f0e4492f10d5d9adc5a3193d03a3838dc61", "17d58889d0dfeda23b0f37d5b42a1f12df4e7fbc47f8570c1cdd2fcbb176a2f2"), ("0def1d6db6c763bdee9d4b602182837e8983eace974780fa415433e02ed593eb", "018382140638fbdfc7b37c5e674f8e0280dd42caffc4a146f2699a8a3926d9e2", "131d867258e5bdbb40f712448def1d6e6bbfb548653d402d888a6b8bd41584f7", "013be5773f0e52d93fe81059d3b09cc3936d8c3e49d177b362427711a7d06e88"), ("29a57b55b734a94ac1b373d98d6a4630a8df0cc30a0ab83fcf6e930c550a8b34", "0e3e19da93a214531730b8c4dc3f64bdf98636e24c4e4b4dcdcc583563cdb196", "070892424c53cc12f07208eefb7a99043405ecb348da09a14a62d173653280bd", "20785f73906fefb3bc9d2c8851a76f0c9c3580d263edbef52e0fb0d71b03db4e"), ("07d55bd1b03355963ebd9b5e33fb5fc498f2cbc3f3c892bf408494e8093b1e4a", "1f4cc231c6f72dd5fd9f8226efc765ff53629cab52378591927689cef440cfae", "23085e678db1d6f1d4d05ab2e5796b252e2bea81d9dfde79ebf0f6296220d847", "2f3f029f5f1b0d95a662ffc14fdd639780e77ac78400bcf57c5d4d1c882db9a4"), ("2f3a6d7640ed8f979ba8ecb5f412ba14c6fdef28800f5213745a781a9e92afe5", "1c482e57c91f92124f9ff8eb8d41ee3aa1cfb54ff9a0ec049f84f21ecbfa96b8", "291cc6302a1451a3a36914d8cc228d3bff39da2a247799c0cf248737ab136ffc", "18d80c508e5e44404661074db149bd082ef0ec31cf7c5dba78efed452a5ec242"), ("02f6581d5c76f42cd9f38f7549c32246ceba3c11f6f4392f49d38c5fa67aa0cc", "171f1872200043636cb32617122edd361ab729a80a36f8575527307dcbdb4bb6", "17e8585d628b9043c60867d6cbbe950313b43ddfc0bbc3e9f15644a839cc1e5b", "2407742c528d5c37b92e901bfdc42bbfdace5a4cf305023a8c2112471e1c5e62"), ("183504bc473d67ddce9295f80c811b485b7a1e6321c1483a3e24c02f66a780c2", "01d69e90d5adbb34295a682accd783cdeac02b5be9f1e1a3e8cdb3104fdcd9bc", "25d6170a016c231e02cc3ee265fd4a7c3a341e99180e11261b4662a661bd590f", "11568fe20171dda9068582a9d8a1b5ebb6094702bffa389aa56287f5d13ce2f0"), ("1665d1314a3b63795c4eb3d588fb932c14cc2ebe8a73eb5288a4807a514a2abf", "1d703d879d9b127754a9e13a7cd2fd8e5ec2f38fa843d76e2fd8faa565d64eb0", "17f09dc03dd2c1f10c5161d198dd2d167bb4f70e097e0e50c5cdc76cfd5224ac", "21f3cbc6139e8d14d32eab4de151ba48c93ddbc98bf02a7812fd717e77ad8204"), ("12c967844454119caa82bd6b4327c08164d2c59f4eb1fc53eefd5b508735aa08", "2c089445b6e448ab6b19f63e0479f5f1628bce86640a3ee1dbdff10627457ae0", "0dfa1d6a6a7bfda2b592cbf50c75aaa490f3f56cf9ebfec229d6acef4cf4902f", "064c4d590cf55766f39af3e3fa3a46a787292a6098f41f40bb305ab7a9b3a1ad"), ("2fe9201d7985406079274b20d2cc41bfb49e9941acd086d7699457e2926456c2", "2ff5e66f69c94d36688ab8e2e9036fb014e7eafd06a1a76138b2a04db8f820b5", "2f291017884e9e820c15b4da56a3bea3d1e8169cbee78cb829c6587cea88d6d6", "0f78c24dfbd61d6ce62eba0791b6924d38a91bf9021482a3a9fcc176882bcad0"), ("149575e2b116bcfabc9ffecf6be8c823db16733788979cdfeb639a4106be2a6c", "090e38ebf2e06917df556aba4c604b57a99859e6bf43552dc05f237c9af56c83", "088a5da61c0e348dbf851804f5807ed8610a980802a6d05ca2be00f330a37458", "2704eb361715b29b60130ad1cdf8028799736b0fd2f21cc6e839759885da68bd"), ("0d6a61de2da5280565da5dd7bbc3dcdeb35c08f6e23fa248f60055f2f6bd7f78", "287a1c03c38a7694399aff13e623e9e1d140bdfa427838a9f1e07ff7aa234b8e", "1fcbef72429f5f8bec34af61ac61684583a8189ea228caab191c49d8672cb2e2", "0736054149c585c54c0236ecee48daf6331b569d5758a9cb510cef020df7b2c2"), ("09ed803facdf1bc2ba3bd3e93ec04445a2edc7d712c6eca92fbffbb0fe1e5276", "0aa24b1cff97aa70ec8d735575158e2c72818b7107bf7d414adcb83651838828", "24ed243a8c210f74773d51846ac8952045d9cddd00e72fa054cfa7cf87843e28", "00747c28720ecd079d535dfe2f596ae004e858f9dfbc221e0855b93ada4d1b25"), ("2a58a9c9090c51657e253510ec8f430c527f169879cd4dc75ef30cf7e734280b", "22b0a0dfeaa13531e2993cbe2f4bc738eb37eb429ad7aaed6597ba196deb294f", "1df7daf97510a05a5585c3b83f6842faf553f2503cc24b172819474c61bf3f50", "08c3e065cb45a91afd06fd41762d8608306d7fea97c2a1a90387142c2cc49ea1"), ("06e22d2abbd7e0ac93d6f426235d03f4ccf58706c5a4631e5f49427054c2a8e1", "143f276cfab6097822aaf447185205eadbd8b7a77433fc40c251b074b2ab6d60", "06a31011a1d24b20e56cd090a20bb9ee313942bd004b1062301a898ba798e3d2", "10e4af900af1c857dda17d2ee2a0c5e199d327879f66f46b27ef64e3fd7ecff1"), ("18ebdad31840b0bda019343aa0cd56d94a95b292e2a8c9ac0628fdf33122e699", "0bcc3230787821747e3e0da083d0951b305a7cc01ea7922e19db6f81ddef7d89", "22d5692a5486540e73191b3b69d1ea1b7eda6aa39e70a672aad3ca6da809fe13", "2311d531ead89b6eaad4d77cd0218767446e0d7edfc8e029e125e5ea1f224c08"), ("11844f29cec7e9ac9076060d0fc1a5d310ddabd7e9719e4ab688611c9722d9fd", "2a713ca75a1b0bad5e461d445851ef3604963c270cf42b9ee185806c7b93e117", "28b92a5117b61121665072703375ddb5bd055b7863d3251319fb7f569dd970e0", "115150014352f56eec93d41aaf21386830404197bb2e3e586432771c5712a673"), ("22d1bbef5644dbd0872d66793460b524bda93be7133291d65cd6ed11bbf9a1e8", "29ff2ce2bc6b511adab45ad2c2c0f15c90d9811bcc9ba3629d182756cb9a14ba", "15743dce270ba0e82fb71aaeffb6e28808f43746d971cb4f4765b1f4b7938684", "0a52417bfaa62dc0c68601ab8914dd471e999198cca3f7b6a014433f84b99890"), ("2bc2bbda25e370592e0df99182b124efd679c24c18a41937455568906f723771", "0176c8d024aa87b66fd7bc3b4f84ad2a269cc6afb21c6bc7bf1ef46e353b77c5", "0c7d61a53e2c5ac73bf56dda63893c00538a1336db1d4e541c9cef7f4ca036d8", "17420db61dbea23cf220db42292db8f19b4bf5e4d4e439c61421d9e577c65f93"), ("07d93bdd6e275e4779549125a558fed341d1c9ca08a0874a5e047f75ca7ce0fd", "17a5e5215abf96ecdea0f3c98957f5ec9deb765aaf272b54e5396532f766384e", "1fb289033ddd4444c36cb89347409897b82ec7f9b58e796e0fc2c10edd600958", "11d3791b1df699cf3caa62e053a868f5310e613a0c428549c8d31cbb87a9c2ea"), ("1be00f6fc69c0563938592856a2a94addc23ec77ac1a677e3a71b879ea1eef9c", "136d322df7cf82d781e8fb0f7bbc4587c7edbb87ed1faf0c915a1af3864d0e04", "2e974057703db2784ae903a8b2edc19767306871c09da972bd2520f842cd6875", "1ab536f95f68f570809c2117bd4147c3bf47b3e4278fc9e1d49efcda3276277d"), ("1d068d365f904964c8280b65b3879814f67d2bde7c8172537e8d6fbafe18544c", "12de5221411e2fb1324b7e5fa893d27c94a99c33b8c6792ad3e0c19da174643c", "1b14c06c86d7b79d1510fe350bd29e0ab68a099b1fc77d15c8347c5d317196b6", "07646c8120c8b7ffacfa4361faa27d11d679d1f0ac67646a7bd98dfeadd4d5c3"), ("2365e7f3a15b6798a95f5a587d07a90f0747c6325017b9c305389d53bee63ac3", "0714c0e6a2eea57e29ffcd601206dafe96ed6ed9f85e45fc85028694d5db163c", "1a7afafe1481a9b5581f0931843d8ff925b650edc18765d54e06cb369027f8fe", "119320a0ba2484119b03ec9168b260923204b647e82611821708e4a8ca85ddb9"), ("0f787e7c6a1ca745886f15f5f0b2bcdfb47fdac940d623075207e85834d13e11", "1560eadb83293a5ea9e1874fa24e5e44996701dbb34b836a84d40ca2f31aa003", "2c16fb798a90b00c8e6c493da0f1117ecf2aa09b10c53c735333814264208b08", "0397476cc26f3e3859b7215f07a08c96ac17f2122a325d175408124f5f3c1bd9"), ("240dbd798cf0b9a12f8fe11b8d3a21b2d0d5e11e214a2e51a3b9503ccb4840f0", "053475cc902ee8434b36b7dc1cac4696865b0d0cc12e24aa88d33af7964a62ce", "2e51cca4260f429b0a239fa7b774d314b29719715bc84a17b798a751cb55ca1e", "24c9d2498b6729bbd75864c063e93b8b7a1c424386e65408766570cdb02aa7c0"), ("042875b6124f14289e404b37fb55ba35f799e424f49b23a00a03ce2dfbbace93", "0e4ad77ebd347a34d2a426390a10aeb51083938f5848f4cbb561596e4b29743a", "090ecf3b4e15bea1ecd7ab3ee05235ed8dd6d32e309bf3a373616fbc824785fa", "09a906d6bca78508517838823a75bc38eb5d44074f86c51970992746dbb15c01"), ("00121e9be3ce71107dd83a5a35a7d6773f2b1164bdc0efad625432dbb9a948f0", "00eb891db3d037666c86f2bd10f96d79621ff55e62b08b624c87082d86d0289f", "2e2ebc2ae5e8aad2e3da6df1d5ee46022f81a3f8a4f42ab24f1ba43c80fa8f25", "19acfab417d775e3c5cd641d4a8ee1a5585ce7cd9ca97243414d43a8c72f65ee"), ("1b1a71c9904f79eff5ef684ddc9c548fcb3779eee72357153eae3f2638704a2e", "2a63d5251709338194b188e45a4f00187e1459267693dd003abeebf2db814615", "0a70e74a66f7e0964a6665111a01a66ba4c8b1b1310f4110dac0999b9a65f50b", "12bc7a194f2fad5a365822114fe8b11fdcbb4217c4ce216aa0cf6dc70e3e18bf"), ("152c5d1a2d3e322221f83eeaff810efb64f6daf9189002aa536dc976f4dc0f1f", "1a10216f9da34160732034cf9b3d2d4a0fa4a85ce86bdf65573693993431ebca", "222a37ffa561bfdd8608c39b524aff2fc7f098930935dd7eae47aaa9ce2e6b77", "2e9362e1750cc2dc4636b93e3f233e50845169eeaf98b607ab9caa7b81ef5fec"), ("01a8120b3ffca3b4fea4310e891ce0cf753cf4aa152a4be60c651acd573dc96e", "0fbee9f37fbee2de5a910dc1cf1b06a6a66f3565396df73e404ae624f0412351", "0d02d19aaeb6d00acd7f6b100eeb6f3563734c6f6c627e472fd3d609c7699e62", "127cba050a58f5d2f8cafc7e49ab8d09fa4dbce434919f02cf3ba7f32586f87d"), ("21c41bbd3d8f078bfc4dcc43be9681e26fed78b8ab6fa407502389bd81386072", "09fa4cbc4d82e9e1d9bc364a3eb6a058147b2287470a6a6f4ae2081e949a81c9", "07029969b90565d490e68e0903e157a58401813c5ca4b6ed3df054065478222c", "27bd33de12d6fb1fc3240c02d074980eee257cdea50b866183a5e51b42c256a4"), ("08674c1aaa38a974468b3628853d66c290ac9e4435dcb6129da3558a26cd83b5", "277ab319ff13cfa09c5f23466b2efc5c0c4db84e7af20b99ef89e7869c1c4337", "01582c7bc7b0b94b4dae62bcdb0452ae0dba4a1d440b786fbbbb1c1533f6fc03", "19af5a522d0979a507d2ddd2aa84a39739daa73f73d4948b15a6274bdb94554e"), ("1d7f5d66ecb6d62eb68f48952ede9255b7a7413bbcc68c7f9c665c003022d039", "2fc40e2083dbf93047dc6964c8612ce6a23627ed4af2565e7b33b7015e63080a", "2badced2c1c79bdb29bca718ddf45beab23a0b10f083cdfbdebc9133f521a923", "089259b20336b941dd8be01f4e553e0e72cc91f6e37cc89ea7d31748c3eb5522"), ("06a6af1c753ea2dd44593a4391c60a0b6e0e4cd8a7f5b56a59784e03c83e8ff6", "008f011d8ac1f6a44be399ea334a83e26fded9bf3008ecb9266012f076764da4", "1375120ec61c09c75289a70dca30fdb043d8cc6d918673610b885717929fba90", "27916e80eaa341bf638b7922a45334d80423c2a9d27f16c5bb35307b09eab295"), ("264f2b7eb6b2194bcee2492abe588a49ff43684dda9a5a3a9d99ff60b993256e", "05eb4f89999924e079fdb717bca56e260eaf69c9a22ff9b2d598a84c5971238b", "2a4df93e986524887b210faaff856a8c66657db0541023000101c0e7ef98fd81", "19228c564c041695ac1c02f7d1bdbf029ae03cc5819a308426bfaacdb888bba6"), ("29625a6352ef426805050c3745213dc7c78799286c3e710f9965ce42a72b4283", "03e767e3c1e28e88f754b28694fd012593e2e23fc448141a6a8e1c033b0552b8", "031cf31daff04cbf30150949c0f51b079428466b3551d0bdb4ac7e52d437d6ac", "043801ff6abe0715ae1f5f5456fb8b05f68eff9144346055fce6de322f206f26"), ("1c7a79b38a791d67a148f4b528a60a775ec4feeb3c12b45a66e20b5db156f1a4", "2ecc5cd82e12e68acfbeaee74ab4c2dcda232501e6b88765355b0d8b6b2ad1e1", "10de24075a3aca41301f992bbdc7d56f05911a8fb7d8e01ab15c3625a661b1a4", "0b48752d25287290775316ff32500f51b6a01dfebc540b6dfe87934e0b7b8344"), ("07703421be6c59b2b2258dcbcb4ceb7e4d111e370c27bfc9d52defc89e05ebd5", "17aa284ccccf28e91eb82aa6e47908373bdb0e53d66d8b93e15f378c842d7581", "12f2211e76a1062dcd728288c24f646a436db4c10c1c6fb89cad03dcb7ae523d", "08bc5efb2af924e9d4a66b9438366e2d6b3f13500ed6b76e35b59f87ce40ca9c"), ("0896625dc08b88f42bc276a54ad2196d94c79c49bce30fafa75a5af1cebccb99", "169892f3bf43d264f892ad3a39bf39b8a92e90bbfea2078c54fea79b431bea35", "0f04541b663fd81d3da5f1ff0720f8177db558d7ef956886aabd8a116d6e4da2", "1e7d0d239b0171eaaaa53728e669fa205c06569722ec553eeababed3d824b7b6"), ("092cdb0545c41f56ec6e96428e523e184e9735fd8125bce675c60cf62c500a32", "06cd088d52c6190a7c5ac481fb81248c9698cdcf6a6069ef937078f3829fa958", "2dc58f3b8bec0b267f5c12cf4bb272a36f1d13816585829e01454fc1ac41c934", "0e8a992962732a997c969f9b510543584a5c216a87ff09655b88a10e92f6cb0a"), ("133ed9d4facdafd2e3b7fd20883af7f0c9c759a4595dc53c46c53840c4a1434d", "17e4079ba0939bbcb83653162124fff0948b6381aa6e5eb7cb92e8827740fa12", "20d61aa960450104c23be9935386bbba8170fbf548c1e3f91feaf5b8f7f6ea9a", "09556aa78bf50d28d6dc55ee99b0880cbaa73bd68a218075978816daa5ba04bd"), ("2e295b81aa0d27403eb11dc1140d7656b9888dee5198f9b8a8666dab307faf94", "08c6f8e298ad20a2672301976ad9ebe66815817097e8aae2bb766c3e3b7bb274", "01abe2b58a1e84e2d3b9782d9dd1cb8dc039136083af9a2f0feb59bd88c651b1", "140cc7d75f4f6d263d74cdb6086bd13e93d7dd9cc4e48dad81a0ee30499211fb"), ("1bd0c4cfb5fa6e7706b72923a60f88c4c1ace5b31e3ef2033ee762053acf0b4f", "0dc3d0b0245677cc14a3fa8446bf23aea9caf74e36c31664c1004f6cce172d9e", "2e5c57f9bbf948c36281e6ee9747e26a1c5ab527575aad3820765e8f405fa30f", "10b6f449945fc2434d4bb366852f6b8afce38b1a5c4228e079cadb84572f8fc4"), ("2dc4030168bf200c2e6451c9109185bfcff0cadfadf3ed71e4a0b1aecfa633fc", "000a67e208394840daa6bdf0760be861eae50cb16521cd2069f6c20369cb440d", "1041cfdb57e40a63fb4ffa5cdf1302836d10a60b56862393343022d6a567d6bb", "2db8656f84a721ee7ef7fea39864b430163eef233c3d9d2e0d303c1f774da948"), ("302ec93203c17c41d19850a0c8c3495d21df8ae0a7eefb68d889da7c8400ea5e", "21a7bb069a44415230b46aa2943b7f00f9175fa52ea73734160d29303e8a80d0", "18a91a109145a82cfdb7a3d2b61ed6e1f675d321e0f6ee6611cfddaed89056c5", "233f640287dddc06ecd4fef0b1843e79e85e4d0d026069930e864e9d0dc98686"), ("01cd9d693b92658e7f6e9fce9c24bac85a4b6f555b9701cccfb2188619096211", "2aaa93d28c056feb5e87a09cd2a65a70f406b5e415d8229c3c35e80d8065ddac", "2481297a32ea03d796f21029b8816f845b28c3b7d6e43ebf2100847931c6a2b9", "1bf6df0a63f3e8f2a90116dac177283e002f8076a280e825ef2e9aa2fc805487"), ("01344977d1eaa7d85aead2ff542cc052acac48f5acd5822f712d9458f699a6e1", "1efde70b919349fa7671a8048174342f1a158e8fb4368799fb481cc26b5328c2", "1738b0449cd9a8373e739c54fae90059064be42e3016bdaf0fe86a8b1d1adc8e", "1753c9798a48537a2d4e780c808bafd338ae8945e4c5cc4a8d70c578e2f8c866"), ("249ac73531bb1ccefba8abcb887944c4e4b2857b814829c21c86a1f8ffe2abf2", "177ee4b9188c9975de947d8fe6165ccddf708bbeda5f6f8fcd51a6782e968b02", "0b5c1574f1dd350cdd95bfca3b2b847a3b6030a0a6a248712ae3d26015a3492d", "2003235cf9c206f29473b3b0d10d628aa071a18a3bb83187cb7874490dca6713"), ("1b7fae339dc397f76af450d151b1a016db3792a1a1270e07db8e32ef80794a38", "0b61904dfb236f9aa67cbf7ac337ec72c89486aa292777ced5af53b6febbdde7", "1103354ba37eaabe4e1ba361576413d4e63f0e60cfe83961ce22b3fcb85f3a6f", "24c211945a93f5128d4f3fed2c6d432d123e6c4019ef1603aac1640db19a8729"), ("0f9dd38f1d32e5abff57fe88efa4bdcfe026e6106e02dea3d4cac1a1bd1a48a2", "18da55aa2eb4c732bd65ea867bdc99acb45b917f86b85e681a2526661f7137fa", "02b049ad6ff5da3a9d2ad3207c1e68e197841a2017d1471585824339296a3716", "0b7945c4c4ce91061bd74edf10a618b6df2cbc151c9f9dcc81996c830a52c2a5"), ("1b063ae7a241bfa161544b95ca752627a6895805a03342884ed56524ad0dbf72", "14318b217a1dfbbfe48f09aaa87bd3ee3283b5e0a669f70ea4792dcfab1e2bf6", "0f8c61d9eb9f9a9bd07083221d08f9d59ee53762bf665fef19c29db5049ff95a", "08878e91c08502a9c66dbb5162ed4397620ac2fc5edb4b442781669b55a85809"), ("29b3b793d738381ce0c54fed8f982019a2c01db122085ec6ff42274cf54e68cd", "119763d469b8c5d5eae5f846e107c816474fb6e6fe0888b194532dab9b6d4720", "2149a966b6f585712db72ee0a476eb0fd8d2e7a8b66dd2116f0368824f415af3", "2808ccc3a7acb12d6cca4214e6bde8eacd67ba16dc3a9009f86b6af571c04965"), ("1737dec24ca6478e1d84fb31de040a68b4ab055b2c15aa4a510c075eabae60ea", "0d8413dc8d03a5934d7c178d432b5388933a33f73e1f712ce3c464f322166fd1", "037026cee63bd0f2e1309b7ba136cfecc5acc75e18f5090968c9f33a578c124a", "0aabaf7a74f2e41daacbea8bb15e781b097dffa04c163b394c3436e74ad9ecd8"), ("29039fcbc92a6a180bb4386d452f568a0e8418b845f8924b08a3cf2436dcd327", "08abee797ff59509a363369440eef10a19acf6ed0270a329b59b33e9eada4233", "0b1f3d8bcc9f4de7c45c387d708250f2fc94d5f283c99febc1f4524284c8cb83", "20f805c7f00b92ae2360942e8a061937875bf7241f17d2816a3a2e947e11cb6c"), ("11c385653329ad99692068f0862eef5d879d88035fc130f41fc9482bb9e916fa", "0c2a5a910e647c384f1ca18cece72e6695d7a404ed4111cb321ff8515bf86638", "1f70cf4878dd29a162b3d218fbf6867dbe7e9444dfd7e2ef661b39086701cc75", "127c463ca5cbeb228db4d29531eabcb9f930be0226570efccc3bbf9f192858a2"), ("0a2ba1a71109c174341190314fa2151628cb50485f3a865c1b2d2ec143a386dd", "19f8d16b300e66936a539da2d482777534156ec8a15d30f39e0fb67942f1325f", "0d48bd8cbb52ee2433983f43a414e6bd65413d0ec2312428c57be1247e6173c0", "18273b0e97084a2f4c727dea3d20644a8ca4db56670e96d843b2238dbc982e52"), ("2887e754f1aa169bf606b969e499f803e25f8fabdbc8c9de3331987614ad3655", "305bca4e18b9243acc20dbbafee5711970793701a24071803f8ef7a35726168e", "0c8c508473b953021ecaefefbf72cfc7341118f1f59c292f78f65946f030869a", "139400a305703b614303d3d52dc8022da3ddc09e5f862dfc6565a71f50affe99"), ("1fec8927026a67a3cff824e1c4afd7774720625fd6fadf7f9454ea79eca6c64c", "0b5b0acd2ea61079f68a28872fd88cf63690422cb5d82bddd598b60a06d8ec45", "0b41fde52e3f4543f0288882431686108f0be01f8309ab5ec1996b165d626f67", "285b0e64512ffc65ff8d158b9a5df2aaaed7302c83dd58dae772b1cea85d2342"), ("253506d8fce0278cf47a1e67f6dfc3e9de0c74c6373d2c811b088b9bc6d18a95", "08d42de15966e543004c765bc356019919bf14b46d3d5586b71849c8220e9577", "10ccb8cd8c7ef54cc1fea68d79db5ee64d8c19f27218fd77a2c4584082d71d09", "188a0a18fc6b9de763d47ea5996532e270487b14262a1fe919a32f9d587ee0f4"), ("017dfd038e12033f16a61e69ed8354ed12cd5d7ed3597c1002684e37f81e745f", "1e289832ea6a549cb133d10565fdfa62622208c38a50b554d705fdceb78e574b", "185e25fd43da857188692323db98b9b380e7c634f96c89ba7d763ef8aee60bf5", "0dd9345c9ec9fcf0ef2444c4c6bd7065b66f6e5ff774f4cceeae2011bb2dd980"), ("1e5d01447e0aa3e2ab6e20c3379629ffe98cd6b1be394699da6e3683dde0e6bf", "19b480e1169e0c399a0c1608916c452007dfb4937f9b047860e07ea7921194aa", "1bac8f417e1d7b4373025eeaebd5e5cf26b4c761b14f7a67b5be9e5e9f2ccb74", "064b3b96ca1f650fd82c982d554611e95a8c5a9e93f48130c09f74161d7c4f21"), ("0a5021efaa8145e89b2d3df5625ecc66ed5fce757cdb5ca3144c0d1cd69e96e6", "12194b2a8b9d9bc6339f8de793bf8a715f6c4ee90ab1e62a52c4b0e6297f2d21", "022b61d68950af6391253e1fdc054f4711962b73e7440befac64ee87f549eb7a", "2b11368d793e816db1341c4ff97266a2fd3b2651a024c14a89d54d42d8460ffa"), ("26e3bcc6ea5e9fd5c0f3346a8b32bfbfc9f66fa43c25fb61e73045c20b5f4d3b", "25e44ae13f0a9deb5ad22c77db9ed1932b24c54c3e1fbe183d7ef48dd64bed44", "1ea22a513d3eed57215fd0d4fd698df1e46a6124ab0e45b4dc5e566388e74d46", "0c97c7ee8cc242f2bca11d500e1ccdb04f7d67280875cc242384b3df6d2f7aba"), ("0c25e8e50a6dc202f9212cd8674972d2234417437aaf0e37e311869b4782f929", "2deb9a23e7c21038696bf452aa13bb28e3de6ea2fe050a01e23a9cac9922b4bf", "0324499e8178a801383c78fa78194e26a6d4c4d89d048e4cbe4f9ed31e5e2640", "04b4d60d6cb66c4c76594109dc5383d738907be9bb998543f1988669af09821d"), ("1eee8683e3800e05493d7556949402f7037f38060c8723d9dd28914143e493af", "1009ccedee088db546befa1964c4941eb8bb93ae429a56cba969fcb6928ea010", "050af57cb465af21789406dbc3483a90532324d01e4f70801541b58a069da023", "15f3affbbe9a7352247cbcd15f0aaaba95fd84dbdc35159bfa47cab6c31d6b86"), ("1ed7d4ce03c13af144a36d0d6c144f116c5cc15e3e0f41b68d9e4116eaca6329", "0f3eee7d15e729d19fabe2df70ee5392e1a8733155a9ea731374a11fb3ba16be", "2266acb3f45697c8b14ad871221e57bcc3aa1c7f7ef765aeb9a8fa886c8688fe", "1c27e529e7ce58730a030cc41bb269c6aceaa1dee6237c29751899042b780593"), ("2676c9a9bd541eac083d58b23784c454a62658b3cbc7305647aba29e6206aa8e", "2718814119356d7642cf0f8c1c2e2a6477a73f17b7ba89f604625eebe6d02342", "04e90c68e6a1679145ee5dee8512315cc6c820f661153c76180f434239aeae12", "1f1a9c8f6eb87c756975bd5a94ee5c721102697b66505983dbee517e104dafd0"), ("19e10e7017a77e58452f09dbc5934b292b7aa973936851456baedc2f9e414335", "13d05fe1e1e005e6f2c3ca5276173050235f5d83ac56305989757a0c23403a56", "012580ef29fa14a8725764b826d84e9abd512a7461fa5e71589516f0d78b8609", "21ba67ccfe80adc43f0e3c41d61bdc8d6d2c635c196d9b254c31868127ea4b6c"), ("09ddb98fe8320318e549618fad978047239366a127fc950ffad00545f2266693", "2b7c1d9bc2f4fd897870b353b7c60041432066fa76ba8e178dfd6764b817b72a", "0193c93f65ca5cd89077c5be1578e9c62367d23bb9c7ab4fa352e3643c2c004e", "19c597c2dac0e208482bdd5cdcaf00d3f7b69e042b228a7d720fc0b634f3bcdd"), ("2ad9ca6e359e1898bbbbe1b561ab65c2d9fd93be42869f2d15882cfeac141bbb", "0612c7217de6106fd638a627f93a2fe982f4e49a5a6134b1fdeedf17db7a7227", "10fe63414babee15ecddabbd4f280ad9796f530e4217e98923162b528e1c6d09", "2273464294fe1167724ec0800637498d0a4d89d03e0f81f3e652f2ed3aaa23da"), ("109063f3fc6453db845a2f7d85ff32611c7dbc1e918de6656858e9021551d89a", "22a8a844faa462f9c5b382e1c27ab35092d8b1dab0d981b2449fd8baabacd762", "25dbc135a00a0948e2f7532311eaf2bc7545c5899268f6def12708fafc80dc8a", "01291449b5839099014a06633d5315b6ee0ec76fc68ac6ed7aad8de9ef3e07d6"), ("17b79099667eab074d2a084429517f8fe86e134374280064f62e75b93bae6363", "2427ef6f16ed55b1ad4f9bda36ec62777fc40818065da8c0228ef7d74362b448", "2b9fa48f77e47143381c1ef5c8a17d4e6ed334fd2bdf1ccba549c17d0d567ad2", "006774b2148dc7e8c13646911ca280808e52b26f4cfa8487ad0d33926f663a3a"), ("03df3a999231b972a3d0ebc457b6720a43642070de5f77d8cc89aef3428542dd", "05564215dbdb178dc2af11178ac8f1d7c23b770e578a58be4cc4c3333b36ffd3", "205e0b47aadd43ae2f5631630c9113e3a518c99c59b035c8fe57979f3e2e1b43", "1ae21cec4ce06c59e950dd258358058b76498a34ce0116d47fe9bdeaa4c4da8f"), ("08ff2a0ebf118a7b817be888caae79a669d1e07ec9bba567e53164d3dda94dcc", "3000f088ff5e567dcd8054c1bd85c303be35b2ec0fbb7042f40b1fdabbbf329c", "24df5d82e25ca1e0db0d29d02ebd517c904af3d25b99f03b9502b848dc3e0359", "1271927641c5b2e31a1d1f2c2468ab1086f0be20deec4af4d48b245f72e4e815"), ("2baba6fbe1a565f0bd1f327267e48657230b37408559bb8864276a813341ee8b", "0cff6b852f624657f6453193e57fc2f0f05ed150ce0e2a399c350c5af8171f24", "013cdfea554883aeb9e1820003127a92e61878a70153598a82fb3f48e7f5bfb7", "0981d4af8fc43e98ab578c4339e7533f68023bc63e22d752b34eaafd6bedd1aa"), ("015c18d718ac96048a1dfee6344f7a947d81021a022277bfda3baa519e76f701", "034ba5eeac3659e88ac23d65bcbaad1e2f8dfef631bb5813d1d0c3b36d81e26c", "09b10aa71aca45063f20e44ecb5de82d674421ce9a1ec812b16e604024f316f0", "24704ad50a00568ad87fb0e7487a6fceb860ecb2e94807861a5c6b1a850ba2d8"), ("070df53c7d3179af7841db3ba56de649f4fb7255ae921c7c0b856412ea09c901", "1b9f873fd5dcaf57543344232646890c0534559af0c5474ca44e62b7678676b6", "073611bd8f16be0d8d6bd7aff954b78fb57b1a8aa92d894ffc96f2a56634bc37", "10d1353d9d0435a3a031b428f2f1ab0756a0b7a85aacc3fe48b50a1f6fc504fb"), ("1bc32110c840350150cde6dddd7e70d3a09a8b02b66f404b3cb6cdd078ef3aec", "18d4c2fc44861525f98d6a5590d806199a3ba92df178956f3b6d54747f5d30e5", "105d7448a969d8bb5965058c7e8356e17461e77a8a3dbe3325c6d4542379640c", "0cf7b625d8bb5b92ac6a3d64d35c31ed60ba9ac5e1fce6714b40ffb6fbf96e50"), ("21c47e2a3892521608244601a1f3d0e3c94198216561565b694f033b7e71beaf", "1d1045d0767e2f2e00e512bb6c329a70305172c562ec6916a299684cab2d3205", "2fecfb7eb95a9f3c5effffd9b2cf0a140964014cb6c8bb89f608787f72bcc05d", "146f0363c2cbc807b9fa00fa7017b08c0b29956af078f63ff4f6c1983c61c34d"), ("0c1b44ac7b38547993adb714286867e37323222dbf4ece1b3847ae365c235e94", "2635c8ff958e1a27348ac30637f232f4223a96986b30a802a2277b7c63666933", "136114bc9ecc1dcc9c2b2d76b1ad27362e6a5494908d5b8c64be6012acc308ab", "2ccea33b3d127b90accc51c8ba27e4e045c99ae8e8948603524c26011852044d"), ("27c635c18f980dce85917532386c15ebcfb51fba2b3fdbca044741a441692382", "2ce80dbc08fd3d22cce08d40be84e47368478832a083f47aae30dad573c4dd19", "2ab3956da4cef18715d795207b7e3fdb59e9cde7ab4fd8ee33fc3cff44cdecf9", "050a00c5e335945260c270c59cab0b5217fc55f8e59a48f94c09a1c211fae6ae"), ("067458430b0f614f271019c6d18f2bbc664b3ae9997c067d19d0488686131763", "2e1fed583ba94ab0af683870529f6b65f78b314d4d9c0466964aacd42fb754fc", "17c681c3c9ad64af537ac03aa573612ac26ee0b049c3f00b9847d4487fb153b1", "1cb24565f687c6e2fdd99cae0421412a2d7b8769189e6bee959e771d85b2194f"), ("00da24ee14415c5facd69c0f48bc28cb21bea8b83ddf186cf61b72505f38c626", "246aed246173a28a2c67205e244cce77668ef4757b541002b1cbda0a08821e3b", "278ef2de2060c21e316ef035368b9faaea2664ee7be19cffb904509dde94a8e0", "047b0bd1b479db0461767f4ef9c8e0ac83107a204edc8278e0ed6d0ceb90c80d"), ("16f948681163661f3f9700177e2516bf23461045ca5c34793c64416d77e965b4", "22b29a146330e2aa0d669c07733633badd3027e7fe2f2e907020785b0d0d6c65", "095ffd3e7c98f62cfc5f3035a63e2b0edb64bc2be4773decc8f84bf15feaeb58", "038dd456f60ae221d4393bf368447cf75989341bfa207c2f19b6cfa38d4ffdcc"), ("00f34632dfb5d3f1182362f170bb9559fd6662b301bec3cb0d5fb8ee8b983a88", "18588eeac43708f956eb863c2198c979075169d2254768eb3fc97d2536c84003", "0cfa442b4e7886dddd99a922752b6c994598ad9832861e393b501656fdcfa865", "2d12459d0fdfc62049402a050d90d0d707ae891b8acc4d77c00b20e27186d92f"), ("02813a1eedf6ba139a8746140248b3feebd078c26f979f194b70ab1b1446e74c", "2f9331ff1f391446add4bbcf13bf1322ce9b13de5a199e9387d5f6354dc66b2e", "0be902d23df679b88c546117c65e7f8fc8a7817419dfe8ba41cd000f583e80d7", "2fe3391df3d62b1ec07821226d3910d7bcefbdfbddb16a6b0c59324fadb26323"), ("056c404964da208dff6446c03869c0500440bad8bb6d9e4ea02139e67f6b6ce9", "21512bf5b5ab72759735d39d7bc7440283233533b6d122a951d609b103869190", "10dedeea7d5a9fb929a4148cbbdb360ddcdf42aae01e70b58aa01e54ba1d38e3", "2e7b6b9d7b99b9ab8dd9386a3c4d76ddc7dc52bb7877eb761a79248548a9988d"), ("00f083dc7d66e96df9ca7d1eabfab90e5f7542730953d4ab80e2fc0d57db59b4", "1b11677771a3f83245fbac4fc6f5dabe92b171f1cd3697d1eb4b7688c1e39cea", "0e6c3d301935b10efb3b107f7f757327bce5bc111a6300988a3fdb291166d4eb", "1e946bb6a4bafc5769cb768a3cd45d82460dd6ca1469dd05652ae55a039b8216"), ("0b250dfa56bff49065c4a489393e09fd41c6b4bd96069abb506034c566079475", "1b4ca1f1f8b2d518bb41c242c128924ba3148fdcf07042b4f6faafa7eeddda42", "0b3f9241a8c4b7a00a7f2a1fb0f66792c720a1be66970cc7b060dd0caf493af0", "2fc17ec21947777081cc52e527854e5a514e5e91de54490238d37e97ee0e0e4b"), ("0a612c96199be590b8d0bca772fe2f6b0fd577dcac47203824ad1ad8a6503d64", "176f9c7da1adec50de4ee26b287da4fda80c22f06ae15e9976365e7dcc9a696c", "26bfc1dbefaf9ab1a7994fd05c671fa7b057e40df9633b5534af181410da5e52", "113994427e447497e8cc8c5b987222c062a8a9b66f6d5d23ca50d02dfd1cdcf5"), ("1b1930217a85bdfb74f2386a33c3e8d939c933b458864d755905c97f4e3f49af", "224378ac1ab0adce564d2c691cf6dca5306cf353ca1ec8c62a6859acb1ed3b95", "163af885cd5f94c9f681efc171718f1cd11a84bf8997ea7eb898d1c580b2724f", "0579f95aafe5b6d492a88e88c3c74320d249e9b586d17b78f63ab04bcf4ff207"), ("0b08336843f6b9eb435accd16d9471be3315adee2d86f0ca0e0a10544bbb197b", "224f361ba46026943a25e630e45723c5af7b1c14fb71ded513abf5c137c31f9a", "20a3bf22bdcdee45f0d79564b8154d8c4b53d882d4036d73bfd61d34c51839b1", "23db20e59a132765c2e5c2be5522439e31e0de85e24b27796b50b60ee2464146"), ("22bb83f0d7761cd38758ec1c14d11b665178b1ef36cd9635dd96d7171b672cd5", "28b5334ac4a84a143ad43451912aa966f4da3cd81af5fc28b43d6ab3de8caaae", "0aa29df4789ff0d9dce60250d8fd5be4c4254ccade9b67ac1b2981eec3c3c586", "10228a8a718fc126c49be5516b4d9b8611917ccb9388ef06482b196a1e1468f0"), ("2768c6c20f63354df0a621f70ac7059897bf392e0538797372e90e2aa2d268fe", "20e9a7bf10b21800da4895b79827973987c1154ef53874cefa6f82d6689373a4", "18bda40e3ef85c6c963a2d83179d63ec5565e8c44b63c29b237280585feeba91", "1b532b0ea7f3b9b6bbab7103a4841d419b7c89f6d4d0a9e1b7e9b6da42fadebf"), ("2c29c0a34d0e5e538557db241cf9b26db6f0ac333363a4f7d381e59a6f3ed89b", "12db320852cff7dde6ed91aba692774a481c989671816629de93354bfaefc9f3", "1562f2c8252c8dc5f013e6ad141d140dbe954305360dfebe7eae66d81c3cf519", "2757e1ae021bfc77ee9e4b37cd30e277c3abb13d29e57cd9b5aa9cb0642b8681"), ("1fcb50a75780ecb1cfbf94e09750469e65b118175b7686448fb380b5db435f63", "04c407ae3499c23d96613f0350653e4dca567f6c9b98337ed1acc08dd40970af", "2975eabfd9f42cfac981c115402164959f8b1af380e9fd2cd31fe802b104ac82", "0692d737a0208161994f35150765c1b8342b2bf1c327d690fa6e355b8f7f9c1d"), ("0947c4556afcc68c8cd8d986bc5d8215642fd5425c7eafbe718d8d7090757f6d", "099b0226de411bd1b03ad75c09e590814e7466164814a6c3a9fa3ebc585291e9", "3063fb626b28da2b18daa031de28c54ef8febbaf9e142d3a352c671ea89beb9f", "14ea4cc5536294933ca56407e018e45e11dc89edca6bc5ebe56d3c233faec392"), ("1c29b9ffd1c5df708a5ca525bf1ecd80e11b0ae3c98a23c6b72f9db40c174088", "0f7d392d7d6d32f4d4e19660b22bf5cadf5f5ff7ecbf729879bc4a86b4dd849b", "11c69c6243fd5533b78dc2beb3655f1b7fd828bfa21d6387277cca18e91f8368", "1e8721b6c76d013fa64e7f52992a88843f02056e04217d7e3ccc3832f10d1d7d"), ("1fc538be679ec64c5bf33b9b83588df96801b10552b8b1b1dba17fa8d62d73ad", "179c21e9568725519df8ed022313631855e2a3668e257ed5e15b8f55ff209bdd", "22602c1410a4b88ce52e11bd9148bdb89da59a387d1360e69b78fe6f3112afe5", "198f0a7251b4599c0b8313d065e3d46df68c8b3737815acd5677a3db4aa405e5"), ("164bbebd97ade7ea353671ec23a7ea5dfd4bfba7986c276f16b1c34b64c35b18", "22d27403c5e0e1b9b7d48e0425c02ddfb7d7529a5aabacfb59cbae6d1bc70e09", "1fe7306b04e2d537c6e99691fc64e5a3528bcb080f4d3ed4cfddd58a33d90dc8", "1796ff6c8e2e6bf87fd7b10203d88c3dc749bd2abd4b9316da57b0d65de6b0ec"), ("2031923ce8a8ef13cc3754065aac3446e19c848625e535e012201ff7bcce3442", "10b49923de61e6b79a893a977c9b2e04fbff5e607f27fc560b5ba52e30f0899f", "16c7b3f243acb174cb1c846466ed7979c1a452a4cdeac87aabee9ee3f38c7d31", "11c86c79cef55693ca5c4849042abb84c139d57349f36d00c63cd62266d0a8ed"), ("2ee7d397eb70ff24110caf26535cc68d7a7126bf2aed629e98fd1bb644546161", "1057f539778d930e1966c5f9175948d4b51b6958f9edfe3d59ef527f61ad3804", "1f9e4264534684879353761e574f0f96a2421110bab7cb3a821212a149e5d4dd", "1337a910978d070a029f9d323d6d20eed7d98f59af65ca80082c20f752e0ff86"), ("1a067104f447a064a60b478405c07eb924b001d9c7542888498fcf25e3253116", "1debf2fe2212d9f8b54735fe15c8c34b8b9f9e312d3a7ab5ddc2394a182f3cad", "094c64cee3d56487be69632a4a7eb2bc4b87f20c17439fee9e606f19ab619851", "016d050da8fbad8b4d0e82f35646d3572b6c67dca4234baeb42903ff20c2b0fc"), ("22528bd5bc6240a0b5e486e56f4eca2ff5cfd02208fb46b8e545b137d5b29cb1", "0d9416fe39dccd0575276c4c9749f570aff8696c38b4d56b7c3ffc5b26fa1930", "0992ef5025352d55518bf3fd65290f58edc3bb14bdfc23bb37e5236175c5a443", "0c2703b8ce05c2b8d82f7e1e084b27dde73e2eef45400ac61b24ee3f46b0cc8f"), ("1a4a2578446844dd54970d1c4879d7d0516b1cc8cd9a519c2c19f8f6459aacb3", "1d68037d0f9b138b2553ef09d8668cdaebcae4e1679b54c4d10d76b6e7728e75", "0d6091bd8b7362592db2997e2cce34b3e4ce9bc7e4bf956043cea3e7509933ec", "2683e6021d2e38f6ae7c6a8d0a6f3209b1673dcc3b9f035fba5fb84326d12032"), ("2dc8930f9e9337006b5481b400e31a7bb66fcb7ade5520ed731a16fecf272c25", "05f6fb43bb7659da2fb9b1e964f670922e22acd0a00ae902b4a0735a17cb8b32", "0820981506f10a3bdbf526471472c02a64f750ddd0fdaf0fd0e2c09d56e13403", "11d626eaa2a5f73cb8829d53a5172ff0eb2e0a7a56c9874b8e145675e37a1308"), ("1246f06311b8e4708f9026f3fdc4d5c0fdabb10029bc649d62d7ba0b341306ab", "02e2f9c79619293b5416907b95bfc33b4068c3a72bb312af1f6447f00b7e9c49", "01e36eb2969b2c309b52fef8ec71950f947b39f3577dfde7de2212c0f1214ee5", "0a223de0e913e26ad0775766772b4d7a0d1bcf2ea9f80c6201d05d8bb8e71c8c"), ("07a6f8623d6afd4ecb7eea71270ceda03c3d73857748cb79cf05a970fe265984", "02d38d249a5022e96fceb91649561b3f6e8feb3735c02fbb125a02c755409139", "0fd6f16014e37ed1638c8100d607d4fea5c5b1cbfd374dbeec8924884c11fbd7", "0d89a7a1d4ca42a2213525605ce85d801b467c1903b5f4ece04511ad73783169"), ("20184b26929cd32aec702aa240de53ab361a2cac1e7c0751c06ce51ca8935bf6", "2f4feb74a16f65812a41e6d8e93eb8f4582ae0776e80987499e1a9727592766f", "17386f1f86e3cf7a8c45b61024e1182b0d2eca57d5f28292240a745f521056a9", "2a923f5a6ab483f526eb243b5450f68b2ef6c86afbfadab59675f4a743abf1cb"), ("2bea946a8143887c478f0a97d7431c6a752da9a4de5399defae26ed7f3ff50bf", "0a2b8b1591470d70886120d4024a4a7620de9e3e5a9fd3bb26164d0f54824037", "2ef319b2f61dc427dce2e2ea45f1cfb27d7ab6e525d141b9ce2f48eef2eee907", "0f754278a1cfe4259a776355fc8c3debdb9123b6a3510c226fe1747c33feefe4"), ("2cc3478d439043af682aca8dc6d5ce705b1554195390cd8ca38c5c2264142361", "122c82ad3c1c5163924b241caa7516e3a71c2a780a283484732d89a9eaac981a", "14467771b3b86473a058992a0ddc90429a95d9846525f1cad3edaa100def8896", "15fe28c5b1b0f666ff1f69dc5d8507beff67f33c4f65aacafb3dfad81d78fd26"), ("14c7799dbec034bd9d226a1a3b2c81f0ab344a266dfb76677376dcb9a989cf24", "1e2b11693451dfe5f04edb179fc8ac8cf5a471ea0f096272cfb56050954eb510", "2cb725a64b9f609928ad093940f13e0bff4fe5e1b93486b2d151676b8be0c562", "0cca4258b4607f427c4df6ebca1d26c6cad2b067bfd5a036ed49013c35b2d90b"), ("2e07b01085cda29a8525dca64fd152aeb29a2edc8f7c69fa08f5a681dc540143", "1139d5e6c6c96ce2de21aae41e29840b3a86e24b7f3a020fa008517cb56bae35", "187c45e3c221ea190372dd46991da269f3c628fdab5a7f31fcc747dfd4ce70dd", "216ec248becfbbfb2e4f547d3c187f4f28ee3fc30279485dadb03e5f92eb8eb0"), ("2dc3996ed66a4e78edccca6c13a6283d1cd727aeb2c9001a26a5e36f155347bb", "26aa8a276a728b8d651ad6de8fb61ac0744e50c25b669e8fe31bd696265aa672", "0617ebeb28d2a892ea70d6b5d61089929fae81b2a23525e9c95dd8d02a8d11f2", "08ac253802251fc07cf52bbfe6f114f26ab735d34bf97e87f7afdd24158debdd"), ("28a2e13f3c0af770eacc1eeb81234ab0028217189a40b80ca8472bc8e21b4c09", "1c598cb76f0b756d6c935b00c38657d8bd19a57d1a4cd13c4faec40b1dad7499", "290c5fca0a68c1d57c2404004e8a93973080b3da44051da3c8ccd59cf7be1680", "1c958ed9afa15b259691181b298f15e15eeef1d6ea8e0e534f6ef31136662bfb"), ("0962f835dd6020a3b875d95168a38a5146974f22db940166bdcba053e824a694", "0a4a37b512574499def7e59f771e6ab1c411d2c4109902d5492c385edb9cd045", "0cd0c3c434fffc56bceacb1bc8a4698e759045d98def237d74fe72dd58470740", "1f5a70e9f200e7e6ae268ca09bd0ee59c5ed9f3f40d6297d3fccab0cdd960540"), ("1ed1d64d5671e9b41bd81dbf46b56ba3de9bc7926aa78e325d09c1f2ffce8de6", "2d91ae952edd2e96f0558d8c70f68d2a628ccd1a547591852c990d82ecc8ba17", "065104668c081629ae8c25477d9e0d9b809ad48f48557c362e526f1114922c6e", "2a1beae22e006fa2c36c1dc78734ee54c60861efe4b9c8776845c0e0e9e70ff1"), ("101d0a7997c72aa290473ad193fd0806c760d638116a3916a841d2d702fc6a03", "093d4e0ab16fafc2a48afd900116124fd5718731f99891d7b3cbc4dbc19de985", "0a367c742c77dd2b517b745f09001b48867a748d35e3dbc27d29b3ab20cc8f01", "0affec66ae8c0945787fc2cc8901ce6ada40acdcc0ecd6b7087cfc572d9986b8"), ("2afb25f35df919a3d1c658f4cf8ece7eaa3df02885e7539b8ae17e308641b2f1", "2e201b287bd5bd2209a374681f2255cbc1b9ab396e359a82dc8765d22e6f5b73", "0737cc8db945d348c9e58f733a6b9fc0a41dcfd8ba88241d72582a8079107eff", "2342dc7aadda54be73317e986b9a8a0e0f933805415223a607bc87f0e8f99e5a"), ("1900f7127d86a15fecd469234cc4ae6ed6bff83107ccac54567109dd793a9ec9", "1edf45dd6af8203bd9e23cce8f393a7108c8a848c11a268ece6e704051afd0d6", "0839504ca1cb34df30a9bf47549a578adf06b14f6b007809b469cd37b4df5deb", "069cebb24ac1c00760a0d578a1e96ae2d842306e7e9c563bef2ba3f2aa7fb148"), ("1e0e38b3f68bd823a1a2a3741d3ef289c10a7fceeec2403ec7e50d6695e8027b", "1fdca0366eaf7e62a3014a8dddb0b3432f918438a9a5d178ae012952721c14ec", "0fb9bded5febb4eefa0e7a4795305217b96eb5aecc32e9da304dc5bbe2894a08", "0ef45a6134d35252f012419e28340c3b24a07db9b15bf32c053c79a6ebfdc7fe"), ("2ca0fe6b8eeb4541afd9776ffa1bf9f57b3f2ba6f1928223872a3bf7e2b28d6c", "2d2855fb82e01ee30a4ad6772a2aefbdbee2f2f38fa632d32553c194699b88b2", "0ae75e6d652c8731a6117b37ed7cd9549fdc137c9bb6fe2e5fed49a4099f5c51", "24cf686627e74285918c2fc1dba007ffa8997ca25e3c4e5596eee555157c5b83"), ("16ddec0405961d46154db6b9cdf89398d106b82beab6ea6e07e51aa237f07cc8", "0c934fc82db533acd48b0b3536ea39b3b717a89b1bae40b83ac9dbe5358e42da", "0173d82a5320de87c5201a504264451fd55dc64230b452dc7cc446c0a3cdbb01", "2488701898950b6a180a4aff6cc265702e1b04e2e2e42e4e0aede643428c6b80"), ("2c55b34c997e1db679d13bfa8a99074136e0ecd7ba442a33956ffc6a8fa14cb6", "0c53abea4c1544e5481103b9bc36c5f8e829b57e9e3bbed4bc3baed496df53f6", "17f775f0e59b1f7c5185aeb23714a66cf5ec9866d600144f47f936fb24bada14", "2079b0ace7577c0aee35898304a310a1a48ad73c808c362ebcde81b965e3caee"), ("0477d2b1e7ccaaa5dd09fd565f803a3a1276805a7bcce48ff824a4c0667736f5", "27354ca91b55a5f419577956f7819a331bf702b4cfbeaee3dd48967037197811", "1090f8447bdf94b6cf583d571510520009136a87699a7a74ebc5b42388f48283", "1d45b3fada72d830d8dbc84bc3d87efd885ebf3f4b23d42c3d12d588905775a4"), ("0d3b4b7640ab9f75f74644ccc4563be368bf70a1e6bee08df1db7a704eb60396", "2709ecc6bc3a4e101d8aad784fe9df627257be0b061d4282c6a8faa1f4bd8199", "17058d28602d1787e013a1d764b6c363f46c92d73a5802b6b3b7c5d988753d3d", "15cb00433312893c1ee692a13daf5c598b9062ee4ede05e3c9203fd928b7a5e6"), ("183668dbf4718c481391548ef92ae6b40631e1e52e9602722f9cecdd3cc9045a", "0bd40d581be77ddfcbe734de36adc2e03a8fa7138e09b109f6829be403706311", "1e1e17cc66069f03ea4698eba7552974826e25887a5e1eb48c6020ccd6d2ecbc", "2db916eb08c9fe14dd27ba6e0dbf4a7b61cc9db4dd263333d0d514b746119f19"), ("10387e78920b6ce71929b485a890ce5ba41913a8a9d1631358940b2c1485a271", "16c4560a4ddac2a87dad01b4076b41e1a08a7b41da1f316a0aff7d6d93e72fdf", "016c45c458ec220d3d59aed372d70b9e9878a57b41b666738d1fb428817f7e1c", "1b0ee370818ec3b8b4520a161732e8e4ec12fb687796c8ec05bbde9d8032ee91"), ("1f4d22c19bf0ffa967da4562fb0c554dd879d70690358b3c46ba210bb20d3f00", "1084e50222fb59dbe2f3aacaa47567177af972e1087622407beedfbf4da40ed3", "06cb7282d7ecc03bccda78c8c58e9eecb91f9f1310d027853be113bd9918c28c", "2946e22336620118690b286060e36a974ab1a3e7118e8a26df9fb040570a93d0"), ("21087606eeb7bc6aa0c9dd84c80ad6aa6902d23dfbae6d45e18416eb4c60ca06", "04398c405700049dfc628f6ef207424fe0afcdc62942cd5442ed6c1084027947", "00b0ba5ab09d39c100c32a1974054a8eef28df21e2db611a3150a2c422ef51e8", "20c0587f5337998e56f4217d5a02cf13ba70247a3477f3371e6ca0afe4af6a0e"), ("179e809cb44eeec9f9b95e5b863b8d859d9ca4b6b1be61727273d1e5e04ce870", "28a3bca5002d2d03129b22543fe15765724b7c1a30c2889f3ecd4cab2b621032", "2e195f52b484889adc6a7441b9e8dd1c27562f5fdd4290527b98460b78447c62", "0b8bf2fcdcea13f3b1521e1b01191f9d2219ca3efa944aa5081ad5d137de798b"), ("1f27a79496507825349ad060843042823b73e148a4ff61de994f936ef889a69a", "262a06f745f4cff914cceeb7ea38584449fa5a442f08fc5bc04a1fada59a6b2e", "285a3a5c02664f151ac35934dae14ca27efd44aeda22a5a3da03fc4759bfb4c9", "2316dee8a238923a302b97c6520044c139ec7fe162dae46f830fbf70a715a65f"), ("1d9c7764c9ba99639fdf1bac381ad87b16dc0ab6595cf455cf5fbe32ecbab4fe", "26f9281e33193a098676d2b8b1f5d0cd4bb10b64a004a5b12105ed6e32a9d93a", "1f47ac43cc1810444f46cd4ade2a8b28e01aa8c8d0f4db56d9201184d667cd5e", "2fe5caa998e4a0bca6b0c4878ee22deb2fd52882f45b5ed3499938ce3eb915f4"), ("0e9a887c6c31abf0ad77f62ed6a8bc9c9be79a4d373bec247f123aa31b4d2624", "133ee1f6634976b84d8f4ee00b5ce7850b887770285653c08c4a3f9c3907d384", "156c0f043badb1480415d60e671b1bf4d240d444a429b8b6b72c130c725799d9", "2c943462096a1f1efd583d69e3a557e4c4e99f176dbcd719465260e819d7ec36"), ("1b5d769f1b6eee742b830cc8c75be5902c730c92b4bf991a687a39d70cd2fab1", "1cb1cf6a47744a9296daf209668a39cecb92edccfb70328c28ccce19b64f5c43", "2eace30b634605824f9c59a49422e41c7fcc3bc91c57102d17b832db1537eaf0", "1560c163b7963ff14c0df732a5e937e15e7ac460c5ad012edc5b877318af4ed5"), ("17566de00b1293b4ac148f5fc57e8c49ce3a73f2cd210f46a8fd6a402b71cf49", "1d4e2999b76fc8625c17b4885c79a40f7c124367b3ec869b1a4e802852bd2eea", "2c274f724f74bc7f31b17cded8332a0aa167858d5db3ec17d8a80503421c9151", "04394bf0c9620302faab009fad23827125f01d133a85977b7163f77a623e9a0b"), ("169e259791566696fb2a541129083cab94d834643a97d35a9efac0268563c870", "005783cc1d3af4b916ef349382880d824b25f08c385c2dc42a3fcf2e3cd10d93", "2bac9a3a48fc20bc6d5ea84a57decb3f90e67e540e188939abd29a64524d53a6", "23f998019f0ca69fe518c2c6cef70a9c2f6d2f25b1dc44e66016e8d30b7306be"), ("237df2da84e014fc394face28d276d9453ffb32653e3372e9a90d8697f205ec3", "0c67539d4c585fbe823ae8e60dd015abbc9a4c7362c23e6a4ca12c866652f769", "03505880fc81e14b419d6f1b757550d3808a7c036361c029dd7a232dd84e3033", "20f3662a3070a5561902a6d3f0e758eed8bb6613d0249bc7ff1b191c70eb6a95"), ("1781deb31b086d8972fa9a6c67e5db790637cf036e31e0479a56661bcb3618d4", "0b237ca0776554282b390ead2adcc341befa59cbdeac4638c54ab9752b367ab6", "2876fb429087b9c9d8c9a05b4b03a498f5167566f424445d6bef9fd5e2c61280", "2688f963dd73325baa8e8267b427cb29ddf0ae3bcbeaad0cd56fa792938231ed"), ("0b5797ec8981a5723cb3353e04ecdb9800497ec7f71e733706d1999c83d9dc09", "20414bae6b5c9b7ce33c2944d031876aa645fe5658f10db79929ccafebebe586", "0123d95cf730cd5ec461aa1c7988e5337d553f41b9f1e93b4cdd68b4c7b2ddff", "177139741b9e921e881a4a57968a07906ee1f6a758762828c6bb9ddbe76a897d"), ("2e7d696a6b1108a79ffad16988196e4b2a888b1483ca6d2015dfae2b98f92f5b", "16cf6a0911eba5bd5f86b64d9508de139640715f354f1ad9270b8d9db5e848a8", "1e3069b4bc1c436d7719a700145064365c13f261d460c35f8fbf7495f6edef2c", "04d8c6ba6a791dbb997c1283c0194210aa8d337be3bee053d076d37ddce231f2"), ("094bf4b546a8e8202e3a7febe23df5f4d3e0ebf6edc32d55a049d91b08a4375e", "19286f230c73f8ca3518b5da6e488364efe35890c2f7f8a8e0c0a6d7e8d290bd", "0276d05b0405053af288f7004e03a4931af44ad5914b511a8e93582babd6ed4e", "1eb9967411c9b342e62da9e6897199a9e67326845e03cd4c38808ce5453f79b2"), ("1788a6495a0aa121c38e8b947b365b0375fa35f44cf109c17e690fa81c7e474e", "2cba6dcd035ac53a2db55686e10cba466d23e21da4ad3d6ecfd36a06c43e5792", "253236472b0642e8168dbe3676b2bdcd551f8b970042d35ddc36ea96d7b5f4a4", "16c49fe239c0f9333a9ed77dadfb67444a26dc15e52282a9eb6532a42be93d59"), ("22ea7b5934b9b12462bad91731ec0feadea1d11e5e6ba42454601ac6b18161d1", "1d7953cbdeaafa9e4d6d0585fe9c1ba3318a96876b8b9e3f809a35b58bd91159", "043493a18f4200d082c3165a3d3ce7606e2851e2435f288d29f748d7bccd2f86", "24d012e5f90dd1eeb3fbfdd82e80729ac9cf5fb37ef21dd5b7b148e8049bf10a"), ("224bc7eaa21d1ef53282a469047af772f21e275ef3b12c3894b2e3e916fb09fd", "0ec4a1fa4cab6ff825ec3cacc15385094e9995638b8a9fa01baca6d097146532", "29f0523a09a758d5cd55a0d4ada23f4a4250ead95a5540f64340e10b35e3091b", "2baf5f29d00e192ae0762764a7b1e2fa1ebb8e5065681d1cc457f20e83b2ff57"), ("211bb6e7c009b266877a0c9a1c6a5663746fe0cf447701de0af81ae725633788", "2454ca461f652561da33cfd8d68b107f9795b00d3ab312f9db10cbe9a0b1ef06", "1b8dc777c5546cef964a0b3a49c19bb8bf8193af4af8ae6c48922bc0a995f323", "00517c1317b3e134c8ef20eb42107e6b3acd7bf7941d6c2ad561292875aff00d"), ("121cf9c3491d619221d5963fe63b3f2aaa303579c39a06591e3eaec7cf78425b", "0b2c2205566b8ea308496eb0ca5923aead81e1a7edb25fd543042b8dc2d29111", "288629cac8192dbfc0c3a6890117c846fd343ecfbd15e8d6312954d6777f355f", "0684600a763a0948f42c4afaefaa345cee56a1d82ca89f1b334aa8f4062e7dfd"), ("24a2c9687c74ffa7c6e766f7a54de9a49967e10aaa1c11df72351bab83c09fcf", "2de81e265ef467d7c2af619e311052c86d6c20bd7776d65412d1d32c41c96e9a", "06463ed568212f79be8f5b4fecd8b7f9b2f984e4cde1f3a9ef3b91bec4e95f92", "2bd47c22bbb8a4388bcf6ea52a83043dd8e2d24f1818f22db5bbc097de41dae5"), ("10b2ade30bd866798cf54193947350d7b6011b4ff1ff5d2b9bd78f2111dc20c9", "069f2a836c4d68d7ca8235ae995c10f621398242d613906636877c80a9b94cc7", "266d9c183c4ab5471027adc0631a893f7aa0dbacc503abd63cf28d9b287ef920", "1265bf2b3aee5e162f02eb35514bd4e49671dcbee967f2b7fc1d5e553cb4f6ca"), ("1721e2b5c20aec1ca220aed0805ce4b60c733b012f34c22250b1958dc74bb313", "2cf5656de25fbce046ba0e5566e3238fd6cecdcf6d740d409d8e642ca2dc3016", "1cc49f0dfcf9990592a593170645e2ee4d3675ba0c4b4387d487ab2fd93ae0fd", "2c989316e3db47060b0a44ac1270bd5b13c5a5e86ba9698ac4a55f143b207dc9"), ("1cba7cdd7a22029d3c258f48fc6c134af24c0e1b86409a7cbc87b6f2a3dfd265", "0bc1a34ae22081793862396c20c4542ca6f298c25fe0abee1889087755756d6a", "2c348291d89242128b8d234dd488cba2008ea79e1ab958309eb395870aadb30d", "26d29aa9c2b0f3a29f33f1b877dcd98c7220b3f4bf873e670b88cc9334779f42"), ("243f500bdc9629ae5f342a79945dc7f32a73405c4c9867d0292c9cc4d885d890", "14cea074b021a7530bc1ea7fbe2a2abe1f2df19732094688327453a9fd303d14", "2e7134d72ec173aee3eba0413f8e35ea9a961936a4b4cb0d12390e45232c1047", "08bb17d36ac9d141461182620bd49622486567c6eddbd893ca4addef8071ed54"), ("0d6c3c2326d604a951380e8cb5d237b61b9b7c1d8395c7c641a32aa5fcbd20a2", "0b8cc3691612fda2a0293a6c94c76e034a45661ac72baa634a417476f8402ff7", "18d033d44a1657001885b68a3cf13e5ae389c4bb08e482f88fcda34376144525", "1ce1b2c36d58c3389bd3377d4072cf030efd679965c9752dfdcd5c2859ee2c3c"), ("219af4ccb8dbc77c9c1d4676ec6619f7e8649c25ac2bbe09d8bf8e2112ccd097", "21ad8b24b03ce50dd0e428f11c08fcfad344c2d888260465add0b3b08ccdf2bf", "05e27b57020d456d71ea41807ae6f9d6f532782a6ca7d0a79836ee87a7fbacf2", "2df3f28c38e496a0286909ab77157ed3d49d6d83a6494341060436e7400108cb"), ("30290c0510865eaf78eabd5e264c28ca0f807999f371bb37ee3a3c84e4a369d1", "09713256b3530c57e5f45dee31595cafa1bb834ab32d1a0e65510b7405e77bd5", "10c1ef506b778f55951b17350bf3640a6aa4fb8e35fa5d2d28921956d07e027b", "262b872825b2a62384deed2028f457e33ed2064d7943d40e9ec90c8027d73ba8"), ("2ec68e5ba528cd4053bccbd652e0070ea3ca3ecb017fae190ac29c1e19259cbf", "274879d43a5a93cc572e5b36bd44077a212cce56a03233b8c2dcd169429a1ea1", "1f47d737a32badf41bb152b73f82033cc0d261826c8f2ba4862f8fc4b4bca435", "09880b472492966cc9506b7df1b44211beea34be96688075c6b1eb15a7fe1475"), ("1b6c2415ad208720b553428f4beb3672bac0066dffdf6d0627c0cb3d00df0ab3", "0cb2fa393c49580e64642e64c697d591d133819bb9619de80f935e8ac678ba76", "03477c44bea26d59137d03a247c82c0dff31166fef0055430265b9dc21a6f608", "2232af29f77d448ab765c04f3658683bb704272dbe23cb126dabd9239968af40"), ("2834623ef1a198d55dfe7e6f4a878e7a1d962b8bd0dff6812dad714abdcc3520", "2302435b4c2bdc87b4711cd747e3b49fc2d7af91893dda711b98468271aea9c7", "1aa62c54bd53b0c3b25f18539d0857d52f9c082eaeae5d9f06deb8a002cd666b", "0954dbfbb268a497e87291347c64649cb8a1c6f57034124a564c3c0c17c554f9"), ("1c1f8a2c67717973f556152a084f6d2684ad9a9b5a53f35ab093783651b2120d", "08ca53765a23bc73d268c60da78bfe29cdb25b9cf0e9c992cf85f2c716994abb", "264fdcff0443cc8c8d75ab567d551e22c2df4e2a01212edcc1849d1f077c24aa", "06bd7196d45556604b2a2e95f1374d62ea03556cd4805ca07ef07eff201a4306"), ("2d053f8fc28fe687be16c487ec13ea0cb9276e50d6d00ec2d4ee7b64aef058de", "119a68d17c7e41e9d6bb66467ca1763ef00b5fd08bff994926529f8c895ad190", "18d1e608e49c28cfb7cb146b3311fba5035b594abf7bf27d23f64bf1648de377", "2eb94a9d4dd95317c2cefb3c6ef27372c28d3082658aa4e0a7347f86fa7df29d"), ("22518606f2e54b60add220d66ed4cfe69efe1231fe794d49971c0dd149763bab", "0052fa99f60e164559cdc6d5b6f3905f7a8d73391a9731e442a225bdce81d6b9", "2fb1871c64adf7ebf0bb580dbe5533659a0c6dc1a2c9fd504e9b0a48e7e652a5", "290ba63beba34026185d6723798ab71229de8470cb517284ff61a0e3d0078d42"), ("108c725b550f5a262300b0a9db18e612b9b429f973e94ea0a26308dca68b9abf", "1e575230c2712d46ca1931d4cdc9ecc71cad46f2397bc2df3b8774224f25495c", "1a4371743d8b7d67aa24c964ee70705fd8e5cb4e7c9929b0db72367f687bfb1c", "2a2c28b9b85954f391de34f6fbeb93519cad4adfe3e36679e40242ae065113ce"), ("060f1260c9e303a0ebcf405076a3436da165ceea640a672acd8718fa3610ddaf", "2c9cc84bf52b3bb4fb7c99c4a0b1421c43e5566a26f189dc238b095c0bbc8213", "032d86b9064253bdfb4b84e93920a249d011550a4ecfa5e0cc363a21e0f49677", "260fbacad97f6000d6081cd1beec42a53cbb61d51c189a6b61cc00461900a325"), ("0e8191ae82803358193b09836d6f5b228116eb5bd672f86a9f6e084e63188707", "2819361afef2bf70b1d46dc7632b7149eac091892fa05f404b46ed6f7755e1b2", "2542bee905041b9cc1b4abb0b6cd1c7b7584d39ef99a541e63aadc0a5899ebc8", "2a13190b4e693703e000147195516dd0bae7d980c7b6cd87c0028b6a493fcb5e"), ("133365d9a1cad2c692b04062b8b62f6c75431b07cedbbdd034637f165a739eab", "227c9a8436b9dc275dbcea4bbb0297882899280eca324d71dd8a88eb29aa74c1", "2fe7aae15dc892e650c0e01b74d6b590cbb76d5108c63872764ea6d8e136b70a", "1b2f0e94f41e37135b186e6ab66027c92b7985f2b04f7f58b9060f0cdaff9e8a"), ("2897272da9b3e03f9a345f8cbe9c44f898e9ee52e4987a362a08aeb196badbab", "1fd02a781aaa4a27e6dfe585b09d0ae0b32936ddb4c0810cc5cb4364520fa46e", "24813b98c53ed6fab3a1a48968a28e8249714a3928b0de07e0004143187b6425", "2716574727588288020aba9d65510111c64e47a1f37ec476d975b2fee5bf27b5"), ("27572800dffb17ebc9e3c886a8f1cfdbab60ab48be552f1940dca18929acdab4", "155c8ff061001c95eff38217571eb8de48a910cf643fa0c7a3af4cd4fb3396e4", "25af44ad8dc50c61de03a1a08627886a7802265c4a1f4ebe8ca5e97c9ec6010a", "29f064861a2a3a5f04205b424e3801afcdc54e242f8acae99067218c2de107a9"), ("1814b6151c065a89bb19d1a24efb5c0f7338d0602d52548bc04a4dffb8f8a8b2", "0b66958f137888c8a27fa13423a0aba59bf0fd72153dcf1e6ef8157d369008f5", "0e50ba4efc04358c65c94b75f31d176c427354d07f6f3056e9a4675945e6e3fc", "0aa559597d0e1f357f04db1d2ffa57a9e0efbcf77ebfd3ea172c175b4f64eabc"), ("1fbdef473aaf8f33cb76bd4d28c4520d0ea5a1306bcb512c57851d623244f358", "1ac4c8a4d1c14b3f6f67d8619a8ec4d902a89bbf67e1a1473b5cb221a34b1f4f", "2f42f18d4adc1783d358c10f683c50d3697b79870a658858ab8ccbea726ad569", "2596021e25d4d04d1e19ab51a8963084874f283cff228977f44f5fea0316dd0f"), ("11ca7fd8c496e3d72a2080ee30446b8c9209bc999bd62b5f5e8b9210443e92f0", "13bfc7b1c8c72fd5c82c106fca47b6ff25d1532f9d402659b53099d4162164f5", "145c83907951e8b4b07ccc6f0247c855f4e527553bd2ccb47d3483f59834d1d2", "1dded2ff073421bff965d75fefaff8c62fad8e3d349f1f0cb759a197e33b2520"), ("246267ab88720315ae1ba6f6d381fd25a91849db0c6c2489299a28b6e32161f1", "066494264e78e62140fc8d89f3e1812c70c1050d7b79b4e50d03ac4d033175c4", "0ff1f1b051ec119f31257582520a871b6ebae79c806ed9473546b685e7f2b533", "107c32b05057dc567685c26e8e181c148139722af03ce013e6054216ad573120"), ("1736a2c1044057b01620d3921d9d7892ce90e95d180794b592a9b9c4e150f14e", "0a46d44ac87df29e9846d35905849b3fa309346d6395cd68fa7dc1aa1fab5902", "17c9702e036f1b8f31742ce7724b0e4d3e032bae09b0aa5bb62001ee0e549f78", "0480dbc582f4dccc004265c98efdbc32ff6a2d78fa782c6de390445d5c1545aa"), ("0f8a4561bc01dccd56c66ffcce7be98d6fe2479cf81e0942685797872eddc64f", "1926a61b5e5b1f167f292189d452afca933009bcd889624c9129a728c1f5343a", "1fc71fb8719ed59c9ac1e80c6135da2671f561bcdf8bd5a842186af72d9e4476", "277077de8995c60be14c94045eb9982b47c2f7bed85b0348b8702b742e995dc4"), ("084162377d325f5fd95a663fa2a9e5f1f7935f2ace5a8d5d2faa9c1a13a24e97", "204784bd119e87e17ff159a7418025d0e6d7d4b61462cc4b15f9d8f9594ed5e1", "277545488feaa9abfece12c4a7c7c17e808455aa4883686fdaafdc6caa7aefec", "2b82b16533449dee783d3f7da16c66ea0a213837792ed55546bb2dc596017956"), ("066d8a91fdd3e56141f18ff9cd8e38300c26062425d2aeaa3d880262b2ec5575", "009255701411ba8bdddfcfda51ac50308ac2d468d996b2d1690ab78d7f8e7b05", "231510ec1354b30bfc1c5684992be3c49c1728b27fe03a0f09de5ee771613eff", "1bf2d53065365d01dc1eed76de60bbd22b9d78069edd49b39539cc8412533e97"), ("1401945a5d8c27d1653d498e8c0adc40894c5c583b1547d0ad8c7b900021f13e", "18a0ceb646656c47d80cc04d05a10128259bd6966a6d7525a6b1a02f9ff976ad", "2ea12ffa3e98b3b56ca70450c4c06c1622daa7cbb9449d1ad8c07ff161cb466d", "2fbdd140c4a70d19f3c9107a12e076ced2dd9303fe5fae54d7d9ef4f7827053a"), ("0ea6f26a796e5d1b1268feeeb109548da17920b61170f5a56c83788f8fc7b117", "2a55a8034a2597398a56eb49d8235ad6e7f25d761a785ea6f723273dc1eb0938", "177141227425ebca1620eac8d067802ca86374a271a4abd27028d7709c3aab49", "21b0388438e56e4c207efa8e626ccb87dc2a336e126c8e3482cf03694c75ff4f"), ("1c5e66ddc67a3865bc32c9c570d9c4dad439b3e135176cd6aeccbe797565853b", "060e9c5176ec8e97d5ff71a27dabeaaf87d18ea0a8d880d0fd8fdabb248ba3d3", "16e136c3c68ba5e596e169b23e528a3003b9817b8ce3a5a4b0fdd4a5a2d4ce76", "2b896da19a80e0cec13d7b0283e80b05e31ea878689acef511696fcbd3890cf1"), ("2f01f8f3a373b4d8386ea50a7cd26976cd4c7f2caada7c982b01416d1651382c", "1578dfd1197b1bcfb9cd7491f42c30ae7695ef0a927bda8ee0ab7fedad72eb0a", "080055f98beae0e34453835ed0d4d633b26c4be392cf9aa867283ec2cca6af68", "1e0c25bf14a4d0be8fa23b879792652259cd045db20e7019b263f4207e01b47e"), ("28112fc91dd7612db61f0d7a38e018d48a30f7cac221199957312ec41413a1b4", "19f3e679d9c406e135fd77bfb54d255a26477c8bbc475071b8a316b98c2bed33", "01212bbb0723a2629d4ca617e3a9ff5cdd4310f3ff711d8adce180363318296d", "2993fcb5737a260663e01b31a21b78f02bdcfcd49e1366c20d0af0966fc19413"), ("186bd38de8aaf3eb2f0531012660b8c228e76b09bead535d84eb377eacb697c1", "148a9ab4d042f1f3a6e04e2bc52f5b71ac6dae9e8fc0b61eb34fd302d93faba6", "013d230d50ee9eafb6741b5a81efd271b04cec2862d93a74713e05093ecff6d4", "1583caf45c43de6ceb22c5f84909602635cc51d63c09894ed90ca9286d332a03"), ("293d31c5e2990ec47da3e0160f077d3753df365f612336087e54d8fbaf98b5b3", "1f6c9cf61aa1369c9a1efbc382552542d500605cfa610445ad87d759aa698650", "22f860dbefb991fc679d95108a982ba61af2f0420ba163cd93093d6e06c861d7", "0520c322a6ead165291951466cf6ba25b712f06036301295ffdeeab3529d6797"), ("064469373f04477842f19f5fdc463db3b90c6487b1cc4e1dcdd85d79665feeb1", "0691a097165d18f7bfb270530edf307ddb64faf35f9da39d8d6329d2e3842056", "2c015afc18962c238d28ff50e0017436bd10349cc54ce320e26a9f14fbf5790d", "163e5d19f4d00f5e00f76b7ab4c6acabd1a7b13ad5376a64c525535e6e0626fd"), ("07bbefc42ace165c1b91b4edf195bca634c5d40a8acfce0b40252a8881e02473", "0746787e7f0c755d82df64b75fb1cdd1ad81a9b83fd5cc3a1e1fc93e85cc888a", "0d01b4ededa99f8220ead4e1440a8a972ea54c9ba7cd47c1335f42600f2b26a7", "137148ceb899535d01441560dabbbc3797775d82ef616754deaec8360825e20e"), ("07eda44f4a8b62a964a8a6ea02f7c9c94a4e57d0162db4d01c0655f46d59bf7c", "0cd3c1a1e504108dd042dcd845b6553a3727cf17fa16797473f825c49bab6338", "15030c1449072ad580558313661f6c14d8d6232fd922dcd0d3b7a60eafae10a6", "209bb522c807600877ebdfe2218a8bdd73ccbb3e2290e7cdb6fe10cedc44312c"), ("10107530d5448185c711eac228ddda43a97105a93eb9d0cb6750463a06b01ef2", "141d168a38f70bd8cadea71cf6bf3c339d515da5f5d063a8b32015188ec8b9ef", "2e94194b59bc7663d2ac7d4721da29e6d2f0d3416a7bd7a8f1e4f806e14088f6", "00f3ce7e60a4bf01684957f748546541d434f796c6d87d8adf90a4d91f373a33"), ("0731953464f8ad38e277e19b745b7dea6dabb0aeae9eb913ad648fae3931671d", "0122b24718ed3964bf8020562ebbcc9d80609bc95709f7ecdc4ed6d9bf2b3614", "0bcd2b35f3d2a3f15343f5532871504ab62479c3b2ae755ab57f7cece291bb3f", "22a5c0ddebd52e5cc1a7e22dda2ef1e37ba31d27812d7e7443aff71b1b6f1b91"), ("1e70ac547fc053249e5660331993680bef05bc8cbd2c426d564fec31f64ed901", "1b00de2cff9959fb7597d2e2d72a38e8810c153605b188685ae321d5b95cd9a0", "27c975303f7e20fad2126dfc749586aba62b96741a56de4b71a9e54b2222175b", "1d7a8290c76cb51c6baa5ef80dfe72fb1fd4c57be227afdfa8ff39e04e0fea98"), ("2d0c24cd94789eb3c35a81c5f5f673ca3a03b0005b373de839c94a843c182cae", "232366fee7c2fd853a78acc1fb4a43db92addb59bcb624f19fe2b9a471c3672a", "14b6192f0353c2e352f6cb86977c2cc4aa2f44598a960992beff17db9d322e21", "10a4330805ca89e7f7b87e82c8ecea48f29bed231716001329835939d0ea37dd"), ("1b4dc6412874c5fdd0a743eab1700ff28718c799df86d6231c9622ade7699900", "0501b4892aa5f04acbe9f196a5cb2576302cb466267432de6dc1d29126472ea1", "084395c0997ea365f4d874203c6f76bd1a8b28d208dfbd3731b74bce426bd251", "0a8f4760b6ec6e7f360300502c93bd62f4396bf1339d4eac372db6cbcbc2930f"), ("01a8d05a44fa87d9874ef80c361339efbf37a245489de0f6ba036a00db267573", "0ff00aabdc582f6786ed9e9c63e4f38aef463a48559c6930ff554bca40bf308f", "242c41eae2ef5b895d3ab6320405f4d11b8c006c2c8e0403f2390dba9e618663", "2ba75cc35eba7d886d95a22f39948f6746590f4fa7ea72483c6f6f8ac013c844"), ("114d8f381617e9a55634d0a893d0a2c0c9f112b552b1eb6e95e3d3c6b4169ed9", "052ef21a559cab5b8c21fa86bad57ed57ac764956561ec85f45788bbf0f5130a", "0c4ad19e9fd4db1ff8a1b520f0bc9e26f7bf3bf32da11dc3cd8e39e6409e7084", "1328adb8dab83453cffe99fe152a8c6eb434f5ad13ea8afe0a40b129bc0d672e"), ("2fb0e7f7795073b0fa5d0ad3a8aafcc2a1e813b00ea60754bb64079c3574ee05", "12f5724d3aa47ccd5e2290590fd9c5937b025dd3875f6a4865b1979adc9b48d0", "07c9649942f657d69a33e77c845cd4ffd749c85662ffa3cf9132274da9acc102", "0f2f4cf88fdd746dac634784c02a56875ccbb67f13d20e850f1315280f2fd550"), ("2109844c36983a24130f6f7dbb04cba8f3e59c05f2e06a67c55ee9a060b793be", "2bf1f189350896cea8bd1cde214df073b2eb8dae24de5a85d1ff33d5d27f4c00", "1271801589970b4f3e568fa151daf35d51abd870d20f48c25acab0ea113a78f1", "2e0d83cddb913f2f2e324dd2eee2f31fdc30b2840dbf9439e55cf76b2d0bdc04"), ("0c72631492aadd00a99fab1c67287891d505d3f17c4f5f311945020d0ad0bcb1", "0350c11d529d47e09d95bc7788b6e027fb91f21b1a115d0d32d915c1b56dc5cc", "1abf3677d2dde0bf1202cd7f9bba8fbc1a67307b81f1692309b863b6dd8a4ba9", "2f6ed14cf0a82ba842f7ada2cfe266011d22e49bb2d2849ade225c0e1701ce08"), ("059a416d46fd3abe52b7c1c3806edc768223fdb2cd4a43e7eefb018813ab2c09", "269d5ecb2fefa2ba7280b01a5419242f4490f58fb1d5919b1b814466af8d8712", "2be6f8180ff650f1a52fc62ed4ea58ada16b032a72976f03bbd65eaa68cd1c0c", "270a2efc8e2fc02f59ab0da3cb0a9fa0c14dad94a72f5940f7f3e921412e2c69"), ("1138481524ecc44d00a4364c2083e85dc50f717eb01f215670f490dd1501d75e", "21bc99b237acab5fd9af77b86aaf55a96833eda073e38d198a6c645baf214cfd", "014d7148632991a11705fff22980dda319ccfe3ab4e414585e36e684e6d49d67", "1d1e09f0220566225c523d79d782661cc9c173cae557fa82d877e2cc57a424cd"), ("22e18883e95a1568c1f7dae93fdaf4ebe27e1f30bbff29c1b87cd1ae4f80aaca", "257ac30aae9e440608d4ce8f0cdea81ed285cf9757d1d93fe870f8de86dcb01b", "0e980a68762be9dcdd0c5f7ecc90c39fcd8fd45a62d80f5180b09c044e79c7db", "185a013d13057341c6162996b15caafc321810220ab37397bbc2189fd5e99d09"), ("11d735cc60c838eeecf60d51f96588344414867ae2667283a889e13ea25f04cd", "0fc1ef3bf69dda6e3df7f9b18f3293cf2ee53fc7b4f2ef083d9d2ed8c458c46b", "1aec6ae84910be9870c4311a33084e2f57ecc53c45a4d3a347bcbb20c40acbd6", "1b4b033b4f06ded67f31f3d2ed69aa3ab2b1b2b2405dca9d57f3e9cbcc62119e"), ("150d735b0c3d964ed1e56401ac88e501a0c6033f462760e6545b9df3a4a2023a", "07b0bd26845fb512a01d1b6d3796841402931085f768408b90acd1b3cf6cd1e9", "2537993afd34a58fa7745e3105b57630966fb4d9c581676f0a6f295ea62ce398", "282654a57af798856d3474bd78d1d34aa71e77b45ea2c944b8a34428732ecbc0"), ("07da01142edc5f84da01dfeea457b74d5a5c3a3ffceb8608d9223d7e2435841f", "2679700f62473aebe476ed571590a700314ddcb9411f411328bc20c8fdc21c67", "0542c619dbc6f33c4423bd2049ae8de9ae561c1a21737af5b151c467633fd66b", "05d0c7c2da6ba85da1ad9b5f5280b3d0ab5fd191bb4d7c6582f5b39467c2e82c"), ("200a975209a1ed38e148fdd780cefe0361a60d67d471d35eafeb487e43058b73", "14a84733be8b155bd0be6160027f8008b09d6853a180b9cf23d7c87cb9926568", "1ac409a07ce16e91657f18cfa0416ebde409a42f623444bc5bb6760ad67d8add", "1b4a49f1c64203dcd9124e2f263126f6d03d18bc82935ba4457926075de3c1b4"), ("1cc7d8bd2c948d3ad8a245edf936332b4eb0632de2786dc217353aa75924f7af", "2537b6e2b5011e1084b7ab120370ba4e80f3bb0cba602fe74c13a6dcd849c6e1", "222628118227786298514a4d799817dd0990f2baae6cf37b20e83134d1fdca87", "086d8e452e355a9a8c47d9ddc103407795e94f79085b601008a5d9e9c66bd0b1"), ("2c0137716cd76395d0c5608d676d4fac1c91358fcb392a2cdaa566f29db82374", "22ef689fb346a3d1c163b435bfcfb6c15c3d629d201e5c6676a344d0baca2fd5", "1642870b8477dfa9efd316d990e6398d382f74efc80e543cd44f4477f3b5beb4", "2dadf03be602c4a0c86c3cbd223a344e70ae5b1ca39ef6345c1b4da44ef1a6bc"), ("1e31355c1a03ed80673a97792fcc95b73314452193d82dd6596d90d14907e557", "03de48414e14ef9181832ef5208423bf09bfc9e6d0effe73fb3a575ad2951a83", "29615b9b1cf33d2726bba4958f198adc67647de28065da8faedf38827b9975db", "01a64f2abd0f96935bee52ecd67a488c8541ac48180c0aaf6cbb62e29e4c1f28"), ("1473f9758455947dc0e77d6cfc69104e5219de452bd3fb1d7a9c0e22c9fd8079", "071b4edc723c4e90bc4db144452d9a6989b05312ee8173e4436ae48918ec2839", "2f294ba772fd99cca7e965eff9161bc4856afe7408b0cbcc3a84bb834b1c2fc9", "2f3e1ecfdb9d5e908bdf48537aaa6f7574e221077871a8688c9525e3424bd81d"), ("12e8b7003af16dd1df5851cf57c731e328fcfd6f9b541c03cd9fc41a62832e10", "025b031587179ad3357c1c46eb0efa449e5335a65ab9c056c0e8c536d461abfe", "1a8c4db13e9257930a76d659965394b2723ec946c85c580094069d8836804cb0", "137adfbf1f0a3cba6e8ffcdf2ea013e776e884043b27d139b77eff8f733f6cee"), ("151494877b5c5231235a085bbddcb116e4fa3bd94ca04d1f9e76a0820a851148", "034d8e10183547b297e4ecdf9e2eae810ff59642a0111ed3db6bbdd726a4f80f", "2afb898bd9fec4c3f686438bda37ebae54d30fa3b8094327f7e43e93ff7714e1", "2b1331c6d5b2217f6ab292f4fc9b733c471d64f9c3ea92ae270619e0886632d6"), ("19ade83640928769e76f0aaba501b5eb2e67bb049927cedcf52cce0e847ef10d", "061506818179c5ae8f2c46800626f920163ec65882fbca055c2a29fb9e540343", "2ee662f8e339e91d75c65d504079796a785b5b42b09769bab5528e0d9a495a4c", "169deeb75288ad6c3e8c26a44559523af9f10a807fad316bb705209919e29365"), ("06f56d12f37de78c3687f7f53c503fd939a04e7c099a37f431d47c1a7fe4a654", "1c4d7ba6c000c87f439a49f8a63169f20ad4758ec03bf55f03794618b3e73ddb", "158dafac6edbb69ec1a330e39c082bd2e945efa632f9936ca7704d0adda35a1e", "151f26d551a84e8d4017e289c38a9c3173ed038b22113afcae8212c7ec75a6de"), ("08d3b877cc5011d9018bcbef917d01d31d87355fca90aba40dd5a07488d91593", "1de10a034109acaf88a1e24480b7e2b8b9ac6f8f934ea961ce956954aeebc165", "1c665302e864c6db1e9dbf57606f9cf63868c54c5c4c3a4459bf786e20d118d8", "1a6be363c7a659872959e77b35271ddae126e0252ebe3442d09e0d4738ca43df"), ("2bf3d78443d5d4fb333408e704867a89e13219e1300ab5abe57a36e11723c3fe", "2c40164eae42daee5a9f654f75b6f78f4a96a9e2667981e5cb45f387c93bfa54", "2c8c1bc141ae0384ac8d51f909b5a61240abe4b05378453a2bfd70800c5ca919", "29b203203eae53d2b0d806cafc8a3602d18c9e98088a29475452e0ee8823fdc7"), ("2abfa864647fe51f63f1f105fbc882f13b64a544b3af592e34c1ca75b820516a", "05fee2cd4acfa23ffceb4c37426852a89f9cd73e2562c431cfab40c9c5be5860", "0e6e4e5520d9b7e3d0643108ef9ccd1e770c5936c4a21be81304fc96886d522a", "2a9f279ba06f61c13e850f0d6c94f864c6c06bdd95679a6518f88f9d818c736d"), ("0955b0888df0648ff8e185750b54385cb6c626c8b19b23c068b049881ed8c9e6", "23d238c0de92512580b6b9ea9bc517307e02a71d3e64602658b50b53eb77fc06", "10c92b0fd36af95d4d3e27a50b90191c4e95f933616122a21626ba199ae52de6", "15054bab9922f8c74fdc52c1f0c9f35fb727d33ac3af8c04d389530f9ddcc920"), ("025c314b60e3ecbbc7ecc7f4e60f768a8a511c98b963539b28d155a4b8257ffb", "2ac5e571856ede1214e3cead1048ff73c5c7a454a954ab865b59ee282caf0b7f", "2aed3ce0ec77aef9416575dc873753c349e2422b901a5d31564c61cd66fb2f00", "017d92f6b2ce2313ae9bf1cef842f026c44087abcbc96dcba148369228cafde5"), ("23d8dcbebc2e6ebfea8de263bbc22b4413af9c8c966692ea7067e97837118e1d", "296c3816c4b9316860d3a975c2343995dc099375a990478aeec05311ce97cb22", "1e667ef06bb05e0f92d6a0a91b33691555d0dd2243e942f9de511e4d852f5a0b", "239874135e7371de19d354a77d16fb8b1f486f3868be21fe654a08ede974e0ad"), ("2a9599f950fcef8ec311f922ef35e1f040daf5f60917f568eb6ef1f97ffd075a", "28b808cd41619b0f29787444382d9ceebe71b22c5307857e5988ebfc9783e889", "1ddbc2c9d9464d1238f8fedc7ad20144c34e7c71d83ca3e8e4f8b7a1f0e9ba29", "0d69ffb964f879f6a7c41b42b66c6b0365e55e0a6c35dad5c84f7acc743943a6"), ("2be8c760be791c8d2814986969bdcec8c7a5ebffea2143e008e7052c9fcdbfe3", "09e7ef8d0eb05c595427d9441bd50fb3eb81a3ee964c04898f774090ec818798", "2284bc8bd167b4d71b87e2bf7f850b5eeaab4cf6a0844f6d22c3f8001cd01ba9", "2697de18ddbc4e6f3bca344bcedaf7db31ea171105e176a54b1f1ad8211bfd00"), ("15eea8f82874b7d7f3a9fb71ebb9e62f95c41684e50622d2059c323bdce6c2f5", "2f7d70cfce2ae526137c156b402937b3528a740f42c7f02d27991de75a9a0c78", "2b27ca599b02ad309b2792c7ed05516bfb9ecb2a419e0360d5b566183a8f64a5", "1715bdb431574fb5f8e47efd05175194151599a35327d35b62ca1eff0b8be068"), ("1153a4a0d15f22fad027cc86c21522a4e2179e37ea25a1551403ba2c4fa7cdfb", "1b1f01e954d5e4e42c74cf44a5f6a32839fbc37b2010eef626d70e8ba12e5f87", "2b000e14a0ffdd204a6a93a39f6dbc362478ab6880d1423299cb6d4577684852", "13e28fd335898193d105705867d58dea5d2848664b47a8e3287758ec9cc0f181"), ("0ec2406be10d93b04c1fda9b5da37394f9ddc43b26789fca478125338e41966c", "247a4b9e67e51505713cbb71677f25c9391dd93bdaa3007ebca72be4c7fe4359", "0eddd3288bd18c6f91cb7c1d01c05b0f24535f65524bccb74fb748bd83835097", "14f11a6fbe88675c81fe26ba20eb367323733f531c9601e496843f8e4ff7680b"), ("2c517f628cac246769efae0aac5f6d603f691925f71044035e4242c41d366d59", "18b3466958c65b5d563843d31a84c232f1dcec0a442538294e71124dcf710934", "2c13e4cff8f43476d7faf53a6785e02bfd19d04c86617130c0728d83c8649ef6", "0dbefb8a2764407f7b8ad5c291c4f21b972dac7fa0bdac73598d4660daa7e789"), ("2de46dac9342044a52de3654fe06693dabac4a6dba97db0e59483d4e246c605d", "0d6deba8c072d9afaeed3cff60577a5ba9ad3b53931ff8f8782babddef5c50f6", "0edbcb26f5c352cd18f0ff7173ffad58b58c0a2d77aee89efec73d7517b7d2cc", "00e099d023a8630e9e20333334335443dbb140973811957a6703ec244f478041"), ("1b9f88f199fc656274400de6d44f68d6dd98e83a0978a0257bdac56d8f00864b", "0b66e1669819c5c11e7fe4e4dc2b59b88753ba9a7476febd1245a16f223277ed", "1ab9e8cd7ea818c96769db90e00c28c94b6ae43f91c13c60904f79ace3620ced", "25241921fc2120e51ebc09a1a24148dba78f6b6d08e6c395ac3b224a334d2d75"), ("229b6c8303cb9a72deeb30fea77620e0bfa022aeb43bca3d8e15031ce63ef4b0", "1be614f65b8db9aee71162505eff384eb5f55c6984f7e8e9ffaff3b9980ae958", "0b83bbbf72577da53b7e709dc1344b30e1b097ae08fb8d54e2e8561fec504cbc", "177665b728ff714347ae0532908aaba712134320577b39779fc414d7e87ee84f"), ("0be310d5139733cf087263007819d5e8964806d5cb5c16632e71870d64c61af1", "13a7d132ac8ccbe8ec37c94de7a30f8bb63111edee1cd024db892fc622f7d9c8", "2845d3ad89ca416cb1082ffb71c746f065debe3682a4d568cfbf2ee83307df6d", "12f2530ca5ac3d65ffb07e71a519231ba12523090ab13091f507a0d0b28fe6e8"), ("0b5297cbef1cda8d0ef1b55656a7b50fe4416069db279f811fc3c88d57736906", "29e6b90f43452433fa587c3f2ddf7b91d615b0ccfb3052d1e4fe2c1137837a12", "055e1022ebefb401d792c03ce920cff72fb3976fb2c885d55f50f5011027d75f", "281aeca7bf638fe4a1cb6b99710716bc2c8ced39f25771599a7089cc4034d5b8"), ("0e5283061f6f000aca6ea3e204ad14cc8b7fb9857e7fda088da0459e1f0436e4", "2287bf8fa80fdf5080b98e2f5bdde7638bfcc6c1e8f5849142d6232694fc5ed1", "02675e8e730e19280360b438edd0ac1fab319a34aeb0630bf05ff259c9754936", "0c307a212e8acfac495ee12f04cfe613197590ae820dc082f8efb34de57e3f65"), ("0bb617da1f0da943dba39324ebcc611ae6f07629e0cdd596b6aa35b64b1a5089", "2c8ec9c52f7876d7bfd489d2f68e64a3362f4e1ff802529ca236799218192a07", "270c4adaf2d1203645257ade1ea4819171c953817c0ab5900aaa4be7e4214333", "1ff9459f328020081e4184cabb3e2956bd05257d7114d66c4d5126348dba35ff"), ("0509df6f3549e6287c529f08b0c04c9195cf06dffdca8c86a669078628f0dec5", "0d846a51d1269fec468fd9b74e64aca967e1cc74d226acb8588c704c4ce64e0c", "15b2c135d7cfde02f307ff03b3419d313ad82befb3baefd015045f8e81bbd7ff", "2f1141be4a9d90a4d238fecf418f090e2e78d8402dcd87d97694c98dd2c5dc87"), ("004a92232256429d3a5df8d836fe106cc973bdf22010cf7424866da28f86f587", "0c21f179344a6fe3ab27d741ed0c1563443cf9b92401cc16f2b80cadadb78175", "2233fadc3a5bb962edcf99f28eb157bab3b833e7eacaab795e1b3663bc772dec", "19497dac95cfb948489e8203e0dcfda0d2b9d89fc750b0c9cd66431e0849d87d"), ("0b1d36e467a7bc8d27f90bab4c4de80d3f66567a53d70404f54fc82fd6e0e5b1", "2b95532290502ab721d052252459f7258a807852843684a70326e971c313979f", "23a8fa64c90b0a850681293ce5280f19be13c8b6c45c8da39f21c1984d667fab", "0554141f45147c9ea101277e2e78581e423371fd2dbf2dee023abd7359c712d4"), ("0f5e4b321d5a329c9bd4b3971bb432657732d3afd37daf60d37f1ea3821c2682", "1075fe9d51a4db9a122b87110493b11e6975602690a4661ac96c3636d45efcb8", "1fb60b8be56d8d26861ffc39576a7285be575a13ff8f65ad3a9dc22e4a56f4d1", "15e431fb864710c1be8ba6eca392027ad7dbbf08186991819e14e3c638127440"), ("2d295bcfc0d84059b4e3215f51693d0fa7656ddccc9df712044e174f1b746de7", "200a69cd84b17b37cbe90cd1c23a6a39e5091bc33e0798801b2df594e4fa8915", "1db925983d857da366d52f6efbbee4cd46e6164ed261083ab2cf11d0bef1d585", "02ef341bc895e5ee7c73b421e22253bd31edd0cb6f40f950ec9ec1dfcf400442"), ("106b9abbec02601d7f42ff933943b8be70c5aea7f3905df7e1ea887f328f8a59", "1998d8a80426cac6685c077f720830eda52d707b92fc2c7c3e20c2afdf582bd2", "1db7a0e0eb69648ed4806210b5f30622198fa202a0e7ff70ae016986e04d0a94", "170b9340cbd95b32edcde0e88e23ad8b8d03b2a7b8cdfb6eabed187110b40157"), ("11a5290d493284f4f5fe6224c3eb3ef375c429fbe4a479c51a52263a880fba65", "223ac0763b9c5b152a826170c7f8f72c81d1ed2ef6d1ee97013b9f34e5ca7fe6", "04e743217e5964c27a58a2c44256a237d0c51e6734c3002f90430c9afbe03132", "2a36144ddbf97b66f4d1b4a8d25399b34fab5ef8dd5547d4d5c2820e7a70ba99"), ("14a6c237cb22a89cac01b54fd776ed938aa425f42d6e41116d16b3fa96b3df9d", "02d31ddaaa9ad973b08a13041e1410a97601a0fe5f611c3bf1bebe4896248cac", "2865850e4919e4875289f6e35c547547aa9a23e9580b49a3f1f29d20c3689d25", "241636f3e2d158895dd144cbf7e374cdb702c97bbefb10c7b6ae739635d08a2c"), ("0beacbd09977bdb0349fe65d4818e8e6897bc9730ba8fd55e1cb23155f703315", "1380cffaef30588b8f6e64bbcd2c9a2d8258c8f7582ae65e1b501599820e00ba", "2d780299389dd9ac233524c0e7307562dcb0234fb0e9abd0aa3896317569ef26", "09791b324cfa83d6e83e218fb7173246f23cc5fa15a40abbe0b214aab04f8bc0"), ("27e19d2cabf6cc5255b79e5d44a18f14a406b21b7814aff4130bdb63871fd0ea", "16fe5fcd53f27d6a218510ff9a71c306168d141c094c3609b40d18841169bbed", "0e7fd9e7996c516a3a096c31a2f6b193ea63f5eba0817513597e4d666b48bb76", "1861cd97ff8a2fc4181f09c690c9a41748405894d27e386bc5095b9159791cc9"), ("24ddf004bab67f05fd46d62abb83faeffe57ce534b7770084471ae78aa1444ca", "1e52dccd997f766a410279ce71a88b4152a3a8aaedc84422f56849cdfde952b9", "04e988d3a3b9f090ee043f83d080c7d22a514623c15d9f3463e3cb54218f0495", "119d2427dce88163076f098c4b828615b2a79bf8349c5caa2f6f009c0409230b"), ("0c57516aac9ddd78ee529ef9858da8604c1ca4db28dda48bf26355bb43081b21", "06f3de826ebfe7ffa31296f7c89f3359705aa7b12db9fafa302c46131983a37e", "226ec512110843c0f2b8572e833d27abf70e53561d66358652de39979bc21ca6", "27968037466f9edd2a1053fe8bb48326ae267de35296ea1ae7e8028767fdc7a0"), ("0f3421c51846caa4285f317bbe788e34dd5815a448ecf0909cd061f5865b11b5", "105635e51a92aaf94436b6173aac76ca53a3a22d14a63431da642263001e1bb1", "1927737922b68c7deb8a79dd5c218dbbef755852c633c8f34b5df2c05f0c7cc9", "257a684b1e4a6228b7f8f14e2bbeb096d15d04e6f001d0c99610d3611b5d4007"), ("0049681b96fa26733b746154e583fe76a937422476bd96a32cde329a1c0d8f42", "292dde345453b6408871f08d904d4fdd329bae66d1d6dc36bf435950cba0eae7", "0bac1c9f6945f09826f80764e1b2a2d42775c4996d79575eb7bb77a20a8573db", "02a558245c2c9690b079d5ad7d23c063e5eb0cb0bb45729797c8044e0900249f"), ("222970a09eec3408b4b632e0195ee6001275c4d02fef9afd7685db7516395d76", "165670906e604028aa3265149ad70e7742e81c2f0a0b672a3e77ee5c5f7e27d5", "27d1c79e3fdff47b4c04c396b2b79d4adeb085d9f99bcc11ff04086c842595c6", "16e51975b0cddecf86d21e9919deaa4e396a499e88bbb806e2c1cf8391c11d25"), ("0347c495d62865a74657d7402442cc4249e0e00175557e0e059f82de8d2073a5", "26d164a73c2bf6df3072d7e60f0786599afbe3658d6ef821c70a1c0cb2a2a223", "18622bc7de1937a8fa66ab02307e5f124c608f879d21b76b340568c34772a563", "1c5025e27206e03aeb5d78656b9f9e1df43cc053f9e8e67c18e0d859fe680b92"), ("22f22447f7cc305146ffb1b3ccc24751b09e450230ac97967a53d42dec42dba2", "2ce3cdf15529f3d0b2c654c97de841033f6b3ec0c833b71362da691a7fc090cc", "0e78968ee9afe4af1812a4329b97a6df3ef7d5e3c59b6d209cc5d73506850f39", "2ca776bcd00e25a9ec844248a61d38cd5fea5ea5dafd56b716f8d42f3c76ad97"), ("058699efa89ad48029a2534df00baf48f30b3e234bf4a7bc0db3184c039757ac", "02150db5b5c074cd9004b66c240c93f55464d0e3f1032d2aca5b3a16155c8d44", "1e7ce925c0ba1bcfc14360f2033a748bed15aaf4123c35a6c80406a592dc8f27", "1c8e48e886b79db59f096650cbd79b4c398183b6f66f233460a85d403ff418ff"), ("2cddf40f40ac98b483d51ef18cd659dc628c4cfca2160a11bd477aad0cd7871f", "216f5770abca80ef2d044171a26a7bb8f156c7923f6e98a50d0b16cef0ae6dc6", "1f3fe7fdeab353810cd05832a401bc745524b95007d988088e5abfe4867c6efe", "1ccf807fe1819abc1da80547206a38fcc9262632c566963dffed5c18b65ceb42"), ("221658c02e839b3bd47e7210550d128dd410f006258848d4b53ec0726f3ef3e4", "18d774341629cc65209a63409e699645d537e05d47858c71d67dd2f3f40d35f5", "074f24849d43081e0da38ab086ddaa56753e00c59a8dcd8a8c38cc06451ed66c", "2db6d2856cbb57a8685b14846fdc70b3b4aebc8bc257d50d1c7630c7b554e416"), ("1c1eb2dd7a1cbc3c9afba95a19663b8728d857102c30714df1fa0d1d41a8fab8", "2b7d06a7f7f2c82031078620c9bd4c0a14def035c920f3e920e617b37c9b7881", "12907239763d02c7ffb501267b870732f88f473768170616d31bfab22c5052ec", "25217b84e27892399c2dc38d4f641a40521276880234520b427f32e94f6982f6"), ("1988e2696d8ac5c0c1857667128fc7bb842fac0edeacfc7b1113d835b7bc0d12", "033ba7f81412dfe9022fbf171bf9de0e4d89d22b266a71310a7af7f8f85adb6b", "10741b32b9d689fc44113fd131c9f5c238a85c72aeb44cfc04121c3e691ecd49", "2f4a9ee283416b25decfc948af6e0bfbf28e4cfe3859cee81d594e1b3043c2b1"), ("1a7e090123afa5d2aaa9ecb64cd5053ca545fa8edfcf72304d921f656fb5b1d5", "0bf820f1d545c6cae825474dfb801798351d602023cd813c731181ab328efb0c", "2864dc68a51da51b50e0985da2b59e5be59ed56c0c4d38f9686e41e541983bc9", "00de09505856ff9ad12e1e9d02bda7ae1586148ed71155a32a8848a531101c18"), ("0ff6771474468eecd505b6936f0eaac636eb904d56579d0ef1cc5ffe9f93013a", "1de14cf62a9ae1391313571028d3c3536bc540dc68342b0eb405c6ceeb41bc69", "2e587f5415663eb99034cf21eb9850fec18bacc970e5cc7c29ca7640479194b7", "191e17a9f657417b779c813b79c611d552eebfa969657e713474928debf12c81"), ("05f6afacf1d13fdf1151146efd22274fc5723829c9a26c1e7b210f30259c8dd3", "25008b0144aa3cf2cbc76a0da6d0763375b222289812fdc16f7696f02dafdb97", "1e08dedfd51d7d82662049d1fe132dad102d42a70658e6a9e6bc7f5acf4cf66a", "29679066f3419856bc99f908fbc6f3e6b69ee71718a539124759cebffc3d3033"), ("1f40bcec3f1b5ea0890148f8ecf8d314d71ddb819f29b3fd5199f9eaa253ca1e", "28127403568d28f4b470641c2c45886c820f618e1c7594b8064b7bc4bc1d8ba6", "1082d5425a7f5c2950e692395f9f48f764939921773d46bc735a2707d61c7759", "2a39366f38ca222d4bcb22f7990fe64abe9b26c212a31b9744b17d1bbe4c53f7"), ("0d3dd0408ff03cc04e650ce56bcb591a2bf4689448a60741503febc4a5d6639b", "1e29cd661e2b1c8e1789f023bd0e0be351327e41e48f3c7bc0f2f8e869b23b6e", "2a4dd406031ca71d4ccf005a3398dcd93d228b0e51f18a5942be9b86e245e909", "25e033d4206fde12705195e779446b61afa41ebf12f39dad14a7358a01a536a5"), ("28777970fac129ade66b5fc3be55e2d1858c4e4421690d95a447920d7a009eb4", "13a15da6220b43b5accf00a80351fe87b100a5a87fc6d1075bcd44c94523260c", "05fdf101855b1055d8a1b2403fafd68ed626d658e3ddc7e0f78b956bc5884b2d", "2e60d7352bcbc393726023ac5cbeb381db42428f98a13cb514d2088a7a02c838"), ("2e060a25b2956297eb231ebfe142cfcbe241bd3c56a92a7c74bec14386edae5b", "065aa696aa6f486f2edab8efce9ad7578a76a43d1fb848f7c797d9643dbc1e7b", "2646f618de874f31c737edbba30de375d5a4392517d7720f76b6ce675896ec01", "0e5e6730569f5640c9ec7207508e804aff0f2549a89a7f085ef2365274878bce"), ("19041d3495e9a52f110966901d7d6421ffb0b067876856f75463dcb821707083", "2a2f31345d2aeeb86b9a5302f9e533d0acb85558ccda2085c6c0a29fbeed4ba7", "29998f3dc0c253a0a98119ad027725c7f1e768702c80bb5bde9d2433eaeb404f", "1bd6eafe0e5f520be18907b1191eb419dc2579014ce539fcd94157d3f655a351"), ("20cf40813e3cf90528569536c1097099ff0fc93618fc34484381bac258155439", "070dbb777e78b350151e0a471af2a1f7179ea7905246197aeb1917dc8cae4617", "17c5ae833737d6e0216b09987d9055a0e1dca5cda921d90c72c3a71764f9c542", "266b2840b5f86c26904a3c8b22a91ef65842431a1b3b7c9801cf8c966bbb6b7f"), ("0d2782f85f6dbf7a439680651c133b09f08306c472de0e5d56def04e87d4706d", "2cd0811df5b0a7f64db5b1940f27086c4caa939da4a2741adedbfcf6bc8ad347", "166495cac93dcc6aed925abb0133b73c23bf726225fd1adf4c9c64d626257b49", "10fa5e9ea288b706864ec89001ef5405c2787354692fe56abb5f8c9d1abf3876"), ("2636fd4f8a9031a3c172551a62bdd75dd4d944104c6b3f6c0f9b547ea10652cb", "0ef388fb2826f7aea421a25ada4b447df519785350f88c13c66fc193adc39984", "0a80ae7d42cbd29df06078cd690c3ee008b38af4b0266dfe6ff7c887b7955af1", "2562b890addf40bb6cd0015c69be1fcbef3fe903fffd137f781f9b7c088ef19f"), ("111585e24f15dfd00ed91536e870722357bbd731a0b90a53539ba3d77eea854e", "24c687d9754067773dcc5a37144c3104e6ebb7cc4329431baecf73aefc6d64f3", "0d25d9e4cb9d5769703daa7fd16fa83875d43635934d096b7f2ac2fbb64cff35", "20c4dd28e92a82f50dc970b187949c8a23971aefa189ebccb9d8f2df48318874"), ("13c0b01a0546bc39df8fcacf79ee086e50f097cfb17bb8274996661f72b16365", "1aedf449f11d65a57fdc3767ff4bdd27014a4c13bace75026995c98c3f6b2bdb", "0e93e2adc3729a27e14f7e579b1e4d7af1e0adbe3c8c53dcae395e6d307375bf", "0fa4da2eca1e687e88d822a9aac490134fda09ad3d13a0a77f7a297be084cc86"), ("2aa9e9f6588d41a791a3d26adbce90d7c7b2d4e4aee4ec61da6f428c96f52a37", "29e74a7e61e18db5c19fa1c5458b5c450e121c18edd223569f36a211b920e773", "211d7a60569d67db13767e00d046a68c4ee2916c617f2776bbf4ec848fc272d8", "06d06efffde1a1d34435faa3becced2501a29a8405f1143bef391fc1e22ae76e"), ("0dd731d1538d5c14f8e869e566f07e094cfa94fcdf6df93c74356c7ea2cdc509", "06e9229468998dc092055e213f4d65fc7e3e7c50ef06a0c11047f71ed17b0b16", "09ea38eaa208ce583840ab6b892aba35580995b8a377f6f2e880be9e4dccea37", "28f588dbbb69dd59852f24c4718798288a4e57823c75ab3e4f60be714802e762"), ("03d081caf9c8daf275dcb117dfe7b9baca2ae07da3e790b689dc36a03e8bc48d", "2153b6c795d7c771cb9abbb2ca68fc3d3f2e36938b75d757a927c607d456b6b4", "2be201def8da94380465c671010664926653edfea85a8d5a907f36eacdcda620", "22e1d581a6a6a9d665cf3eb4d21a57f3a601dcd8b7116d2cda8603f0dfaadbad"), ("0ebe411f922c69625e8d6ef97be260f268b6ad2e234c8792cee42583fd3e5417", "055dfbe63c1ad3d3afc8250e073557ebd2164428a661421daf13e38b4f046f19", "1ded7ccd68e850a32a60463f4ca4bdc2e01911bc0177589a82f5fc0444b1becf", "2385709ef7429dfd4feb35d7bb1d0e8f3b6c8761eac959d1b14550456304aa81"), ("01a63305a1fcd99e73474a79394028b8fa7fee365fff78bbb6938439609a0702", "083dacbf315201517f506133da7114c4004ddf045040752d4ff43e4446818458", "2da418800742fdef17c3279030f20cba1b535b176ee506886c82c51add45d5fa", "12513523f0fee2dd3a6301e7b51f4bb8cd2a00ff194c246f071279cd61a40583"), ("271ff217b3c679d52ff0723b31bb9461b53924d0aafe7ec5ebfb20cfaf1ca278", "01c9be24698dc03762acde29fe7ff468c8cff2dfaba143fecc4ac0a7ea12a72a", "2ef949ef68362a2afb549cdce0f47330276a5f697f3c060c34775e627c7f47bf", "1608c724b888c3f11c096c3f240fbace85fb0c2d9ed9b3c7bc8e7c5d0cc8fdf9"), ("1b92b672f41437e1676868bde0d15b125f6f6c532dc2ea0815c858757d5e2862", "22085bd6ed818a3013d06d577f36c75ed653a666780d6345d6ebb9373a2012ef", "2530fa730e37a5fcdd31308a17c1a8ddacef93ec3ed24f6e1fd0215301a5e8f2", "0fbc69209d50c41939b0c00990b68d83f0fb6de13a9ffe62d52fdffac114bb57"), ("1ec7641b93b75a35988d0a82f0149a9b19299ca990cc73988f134b844b466a7f", "0953f863a4d3406a2c21823588004716070e3221d31ff4da21facbe7515c3221", "29574572a102471577721ec72975daac736b53b3d097f953d61e54f1b0cd7512", "1afba03bcad9ebd9b15226a5dea76b359e24531883c1355360f253e153a4dc9e"), ("11da362f334c88e1443dda550c301bd71bc893b15663ab79ada5c2be394b235e", "0deab1cd8ef363d1ced1c8449673ff9696cc6459fc88f2b48c956ebddcae0a42", "11d489afb2bdbf29dc1b280436a11de9f0619a398d90822e93be7421862ea5ff", "1fd9ab31a1d4656c76bf3f24fba96ff5a4cba0b0f8060fe4ef5b3eb5c8cd1a5b"), ("2db76ab8539793b2ba43859a5afabbe1af5a792af6eba7af53e6f6500ad9c0e0", "0f9482fa36f340d32c59802fe15cc92ed7e0dec2bdbdb2a77ba7a50da641c302", "1d91d6563ad8ca9abba31a2ea40157bd0996265b3bbac723ef3e2059a5efceca", "11a316a39f39b567a137487ab0f5804847b47f4253378d8afb41ecf11f8b0a99"), ("149c70994bf33a911cbfd35ccddf391a7df9f77c41d596b9c42c6f2ffdbc8bc6", "0c41da85cc8a35955aa3722a6b5ff89e602750f85964227ec3fd76f12903d47b", "12f8ca10a3dceeeb6b1ca3c3d539dadabcade37dd305b7068ce43a53953caebc", "0c344aada041c551bab305cc2a57ade83edc4a94db65f1e7e50ae5094440a3e8"), ("221f38f54a132af21f5a549509ee88e594bbbe379d3fd4cca98f185549d02ff3", "018b0f035fc96136606e79ff351bc122dd2ecd969eeb5b2e86f35f9b03fe0671", "2b322e83c57ddd3c62c46905276c8ac17855e24a893ece8cd6bfd78a0159c96c", "2cd66c47924d9883f35cd4369a8dfacc1bf2ce3606c13b9eee1013c959f6b732"), ("055c14e8d610e96c6bc5ffecdfbab00d20a3e5dc624f87a9713814498b561805", "1b521aad058046c528aeb18183558a29b54819e61a51f0f9b92713544d996b5c", "054e33d2ec52a6243802316d5e7e9895393c870a3647744eb696d9144a291c7a", "0bd7c09340c8544ebe18b313eead535e85f448b7b66e5917323c1d9994dbc278"), ("00d3b3cba77a427501b3608126ef67ebdf5b97613085ac1e30c532ebd0015e1b", "20ce1e9b9c26607950ab40fddbac9a11dd8cb7355c1b4ede396e9d5b4f36cc59", "0252da14f9b591a186680e053471d58fe21aa8fa77f39aa992473504200a2337", "1815ac249261f530325b64a40cab1f7abaa4ebc7cc6ef79cd44a577adf303a56"), ("27072e0b4506f2b469cc8f5674868fc840ff2e48cd8630b676d72d9418e2060f", "2a33e9e27f9686f3931a7cce055216e6548238be07d2a3d7ba32b44a3dd38aa4", "0f7e84d2f015eee57f9e5138752406196d2ef67f74e35c63e04a9cbfa3bd787f", "1b857f61386bf519ad48a2c6da9bf04aabf21ee5b60eaa80581e7fcb553f3c79"), ("1af836cd85a538ab17379ab2950c8e1e35a802ec85cf56c0c766ea6aca19dbd2", "14e2eef92ba18efda42723a191cf65358e331f14a045e9dc01c083717256253c", "107087cd064a798c7db2710f265b969812e1a44fac5132eca1427d285c0bfdad", "226d6eca50e8980961ed3e546e4574d5ec033cf7bc3b69fa0d2040834a13b219"), ("19a62f4058effbf9562e9b5c431b45c3ff5302b7aaee0c486108fecba910b3b3", "26a4d998420e57ab8912b6f5d9bf58401a093f09aad8ef5233906e681b525f2b", "05eb7cd849277782064ec34619171b5bff2b1ba27241281f54c5ae63b3a6726d", "0cedb769bfc4e6856af0d76a086dc5bfb536a0eb57a659c30af8abc2398a066e"), ("0e98a0d50ddc306ad4783f177743fe51a20627788c1c425a9da3f52e35abb2de", "10d960ebc556364efce48b374afee4a2d33ae931af8538ca7aa14e700187141a", "14a62d91f4921c9580a010081e14669ba5910f788447a24b669b7a48a1c6462e", "0301ca603291243619e5b024f20967b2fb4044fad17ee40fad7b2c80a7741212"), ("16c9ec3f152ae2c5872c6e55f30ab51565d0311bc327045c40e190b742db235f", "2812494ae9579541779a8ba205f8ececf71bad4f54a96071d5fd3a419bcabd8c", "2f965c43988809dad286c0d0f76a7f070f84e45677288744abbb980727ce4bcd", "1902af4b6a092d0fb341a226e0e2eca9bbad21b15de57a44dfca6acf24155cff"), ("2f37d4655389b71526200311aea8462a6cc3d7ee445529994b9cfa19c4a15424", "0508f98ab4f48d3b63cf5263b85ab706a1534e620f588c78940e33fc3939b53d", "18d4d2aba0ecafe7d3da433b0bcc54d2fd840eb7624243ed36ed75eae14eacda", "1cb617932cbaad65dbbe2e3c74a977e83eef1babcdffb61a0505988198693682"), ("2e9932e94f1dc61619b5c7e83d2fd58d9a526bbbc07d7b93def4903981f060cb", "119852ecebeb623480f1ebd5c21e7f20fb7b96c379d96220dffc0011dfd275ad", "21ed0bbe0bdfc80db9cca54636c36b646261abd0fed6456a20dde63438e58579", "0546d485a5019f2d524f8b3f9fc5e3fd33a468e946182561de5b5cb1a3782ca0"), ("1d061f693bbc55f8971ae9878c70cad915994dc05edbd0671fb4a5deaf40152b", "1f3cdba054a3aa46387eff5d012f123ffdb372ccd304116a7c2aba26e048e84c", "0e8e9e8e277483e2ac689f37a222876a60c29a2630b5c04fa98b4ff984060f8e", "1401471d324466774cc635263fc01fa58be50eb8a6d030c04bffd9a1d740700f"), ("2d0a266be20e0e1fd9186aad47668b5cb934e05d769fe676c250bcd4e9aa521e", "0a4edfc773fc1a584a12f6ccdfab7f3d739ac588f2920ce554fd69e7f4ca6eb5", "2a2c1974ec836c69ea7d430c5fc1b5535530b326d98fdcd1cde894d970bf2290", "206060dc5c1c67544bbc142c7ee009f6dadbbe1ef8261277147681001b42aa8d"), ("1b19d625e5f6f6c1ce6c6a00d9f0cf7c5a875650fc186da6b7f41b7ade2d0f79", "031141438400774a123d2591ad8a7bb55598f7b4f9d03155b14463e5652e056e", "1822d918b9c47f646dff0a5452685e8953a17e7fe336e9d5e237cecb78d0af97", "03a22c5033aa74d8446bc8ff0329e148cba8927e66ee0324988a75b2992a140d"), ("2f49845d50e5ebcc2f6526a39e485d460e179f361752e335363125bc8a92b6f1", "26cf5d817169aaf95b8bc5ac0fa3bd5e4c472209644a5132e03adf8f3efb4da6", "012e3bf8a5fa2127824510995b059030f9c3c60a351de364bb320ae4f25c6a58", "12e1eb0cf94b6f9161713b23f7ee7d5a9ad2342ab53c242872a40082d16deeb9"), ("175c5ff25e6337b1070d4be3b6073c4b6f64bdb073108758dd26be5c2359a4bf", "253e16184135c864b32eac06eeaf9d6a02d1027d5b20134d7e697c9a2b71845d", "1725f2a26cf7e1ee8ae732df219c4ec3e0c8aba6be52de8b2056da6416ce6573", "09298393189e6ef77f7461052b87d2d8ba4799363b415843b814749e02f918c2"), ("018cd56296e49521c5834f9d502abdb7367a5baac760b0cc79e21ade869655bb", "105e014c792a2d7c83a23c2615d26d0be1221268fcad381701e940ae2640fadc", "0adcfd529b185b919758f6d21c35c8e5669843fe495afc188429792e515da140", "096698411be0b6f654db9453da061e06b664a18aefbf6eec9033d20bd1194402"), ("0a9f332f96d93d9d7bb25a51c330fc222cc9a74b062c3ea528aea45381c8c6de", "290f760e29774afac3af1f8458f5298026aca371635d883ad37138d2c9e4c651", "12ddaa23d9d003d50f7c4685035f478469f89d197061be751b40517d9f6c91d3", "02a2ce7cb35050f81773466a688c349edfcc06ebbfb47ace71c27bb002789eb6"), ("1c576f4819ec0fc9cb78ce7c1ee1a8fd3442893029420e07a4ce332d6d0ef7d2", "1742497da3cd485ce09bb49c9cd0788114442ec1445f78a1dc1635ee82ebab5a", "167e33ff7ac635b9c6ffb236c8605ceb099b83f3b83ae07ee38a2fd9a6df3ff4", "0bb1066629383697da3f5b98a92029ce5d5ed247e0e7f8391d90b4ba6e98c5e1"), ("0c704144eb2fbfb11a43e34fb3693039ab0ba48806e12f289c6ee051012c3c69", "1967f0036c49057ab84d6213aa897a6833bd406ff43435152818ad18040e83ec", "0340009418141e752cac1452402482662841d2c7710a6f1279e673ce22ce2264", "28d2a6d728a55b22bdeaae2abc901a2ed42a011f61d738bb700d6b5ea5dfcae7"), ("1489dbf9b1a7e64efbf9eb1c7d183a351b458d3f44016d932504ccb860184069", "065e8172394c892733f86ebc31ea1aa28f9197f57a00450f2b5f83aeb7421c41", "0a41527067ad0f1a2ebce3c6873849c8064e2e910a5e6bbab7cdca305a83ec7f", "07a3e11a754828c90e0d499a1f0fb772a7949b3059af0463a1d96e79e9a86fac"), ("0bd1b984999d257d4b7fd250b7663649244e66ffe2fb29dae4182ba0f3bcb8a2", "2933b468b1a769c165b955caa31038cf10c415f158db6ffe70a4bcf9eb7cc8c8", "1dd93e49c5486aaab6ba04dee302927ecb9b415d7540ee1ccacc0315d0278271", "1a17b8b5fe7512c403b79ee7bbdd2b57de0234cc2f1c98e1876979cb5081f58d"), ("1e9ef1706ba7311a34e026a9533c0fc2649f47775b938dfc2c109ca5f3813cfc", "2a5aa844ed9474ad77dd72605cf12e8233bf4113e39f6d67c21fec5b5a11a073", "26cc5be43cc553af917378560ef5668eb6f5eb30926acb5d1b19f88b152f4642", "28e0e682f70318f5848cec1329241d3bcf0c63af6c43578b0b1a61140afd4353"), ("0f894f8855e8f7cfb3cac23250f9d761afb8146b097bef1dfcbf3ceb8a153cc0", "1d47ff86ae7fdf3f2726df411d3e3c2e211a35d18d053628450308ef804aebc0", "27fdcb1ec396854708b4f92733ea440ed55096e5b6ccea05a89b8fa1ead74007", "1d95c5d1b6384df4d6abe692d1c7d1a24e90de641cd758ad934b7d11ba14246f"), ("0a16629ed6ecd208e9bb2faaa0d892c376761112192a392e79ed6e810b87629b", "0e3bd5eb21958970b7932991182c0cd500ebb2a3eb117704f428ae6f56e0e6c5", "1def4c074e15cb465374b0073a2a27eace7ef5b924535f480176992ddcd742ff", "0aca205b01fe290c719cfce1734062b5715e9ef58da363c8ec86ecb37657841a"), ("11596b697dd641841690a26a218e0bd6e5583dbb3083e81a77e8d79b192c5939", "204270bf3ca4a208a338ab78edb58a3ea6dcae26547b6033b97ec92afb70e59f", "2dc7e53a32238951e7e3c8465e7a0712ab58fd287cc53b3258e16c91759d4f79", "200e9c49f2056fa5d4622782bd2068a4fe4fcab2522293309ee0c4c8447e9888"), ("16b71255a41b66efc218873cf196e1d40fe3cd43e26ce1d0cd3d89338835a761", "271fa76700c5c25212e6d9a83c4143c1bcb59cb8871212368a1466b68e976ed2", "16a2329f024f0a004f223f33733b7aeb5a6d90b6d2267dc6c35a1d9901947fa1", "2f1cb8a80705f75f1203cffc434a6a1cc79d819952527ea23eb032ae12458163"), ("1f065c8a9ce7ed29a1d06f423f772977ce54ff3aff0d2356c25f59c0b6523845", "0da56798d8a96c174a87a1ede481c41f5857f021fab122a3334967cd3eb05cfc", "1750fecd639f3ec804f319da5c234386f91107dfef6be61c63474d44b1141c59", "0acb47d0d8e4f385cd08fd5d4ed34684eca26581282140dc8cc08b27320a01a2"), ("10d7d6d9db74a0b51d9ea35ad5ace2d65033d27af28d288fef906734c0473ed8", "26fc1f737f74d4c2605da5691b7b9a6d895ac1876a3c462554683bc0d06aeb5e", "1a95d375127800f776e020e591acd0801e9a81cd88f5b7fcea4937c32c27880c", "2cc47196e3270b69cf4680571743d69d1f88963ea884c70e2c543795de2050d8"), ("08125cb859f3d73a1d5a3e481a12614ccb571749c9b8f5ca1aad4c9fe52909f4", "13425b482ed646d164a4d85d013b7e0af140026c8b9ec86b1b0f1c7cfdf4c2a4", "0941e0287e9fd8c26277059731b149bd06833e88323baf764a6d55078dfcfbf2", "04b01f7c17003c925e918635fd5573103fba361ea584feabe271e55ee8a2704c"), ("26ea7dd7157d6d26a4cc21c8be50dc267922a08f3fd6c5233654e8b8e2fbb6c4", "2f4de0148df1afceb4f2e5fa4997f03c82ad548e746c14c20276716d82184bc0", "05a515750282e6922e2fd1bd601ce86cdd0b7aac7db61f69774c051db61b4ea4", "1292680d93f86077fb8f6d4db2f4ab815d2af9bcce8a4e621e5d570153358461"), ("134057a8a28958e8250205d6eadb64dcf883f58121c5716743c998557124982d", "02c4f623f7eef3d62c99715108d2cca52578f77075e178f5a880e2f6d20e3d4d", "2ccc988ee33bdcb8ec44d0e6e81fcb0e490725e401d99ecebd119bb85c6687f0", "0f4086a6d5cc5e23c202e9e3d1b8b29f1e663e3ff4870ce53bde376d1ead5d6d"), ("2b17ce5b5a131e88c4ae119146c5340190e2f8ec4a0059f45d9195da1709fa62", "1c5a1c5c0ac626ef56c92742fd164b2a5abaf418d2e90f2d9d4f4d397f3fe7ab", "06824bcadd1d5d4b39e265d03f39a505575a230f4a3bcff91d27720f95880a3f", "1d1baaf31e0c5b8c785ed343a3ac24a3632153f3baa68fedd94c562bfd34d8eb"), ("16679f459ac39e8c0e72987a0fb4422f8c2ad67909151a63a5077c2eba729956", "1c81b426c6b8f44658288ff57da77fefd2ea9738c39b04cd19fc4a9072ae0e50", "0ac66414ec918f2635cc7752de250d8dcbc8cc95a8e89e7035d493ba8f02365c", "12d5fec3035da31ceee2502c2deefb00738c46c5593fdd8325b468289cc26edf"), ("00ceac57a9daca908152bc2a9b59bc6da14b82de6d0e0f3d51190ac9008ae7ab", "1d5d8965f0145d8261ceaa3e5d1ee0ddd1076683151fa3626fcb23c0b5d4ddb8", "134ae4faca02472662380487b5a48cbd1c0ead2cae73878899f004643b8eab23", "00110ef99b50264a3d7fbd33c19c933c688bd07a57b77ea0ede41cbc61cfad12"), ("0909677b1c19bdfac4c271cb647ac92cce9a653bf85e8e63bd3224beee880563", "0937f79382c8b5bb8c7b52dd2fef223eda76956a4c95bc5c5586fc966b3579bd", "1e7df91767481792d69c9418028a3aeb9338436215df7367a28ff2c46485f465", "1d9ab94638a290d0da2304b23bd89f3e21399a63da4670e0e1b01767b73dd080"), ("06be60204d2fe7a2f76b58b6d1aca8b50a703035953967921c84a756e0e9533a", "0fac6d9d46581f90b8caa0477b08b5bfad2cf38c284d44a80ce5b7f62fdd6ef6", "156461004169701332d007efd027d5f9d6585487e367cca8cf0263cd3c512e23", "256051eb8ac5e5e8d71f7c2306ce0d663124234898054a57f7de47ae648205c8"), ("064376440bd96991275fcc6d1cb3e3049e8b3b02b5d5e8767cd9f1f59777c66c", "2ee2457664818d769bec81444ebb7004b22acc106fcacd8b4be4b605cad4f5f7", "08e1c481eca055ea2b014bf14a48a53c42481fa0c95938a6e8f2bad4b882edf9", "2f8fca1a51ea4f1c45e3851bd27108c2ca2c9db6d6cdb6200cb4e9ac460964dc"), ("22b059378aaefc53d641bfb40c669992178dcee8b4074322d20e7a08c3b0ea61", "2ce6332c3e449688259c1b0cd1f44c570ea3c0e36203c6b3c095a8693f33cb06", "0af56ad62e826692566de4b2acb5c0e434f567bd87aaaebd1ca31f2135a2a944", "0872e0c09df0eb099ec42c4b0de1eb4ac8eba75aa79b120d276a9e5529682a2f"), ("1d8ff7e9c069716c3e6474d67a67239650d2d3109090e108fd4b573121ee18e4", "1a60aa069ffde27513329bf90067a08a9ed513ba412d430568df5a5bc03b6701", "150fda6dd852ef01ae036d488ad4b36c1bfcb029e4589ee87aa688f96aeb102d", "0fdae63f70d59ddfec4418884f974a3025ed1094bd10e9944d2d9ac302ea87be"), ("18bf6dcd1eb2dab930bc6cb7bb14b5a6b4e152a7c0c70378b147e87af5c0f37d", "149770bbdfac16835a73ae868421c910d20f2696391f8a8e24ba8a28f7b3dbc9", "14b7ba420e394604bb8bfb1e94c1bd1fd4e03517df55fa194948475594582a1d", "2d5f0e2bf9c2bcc588253d26929c9fd4334bd7623b58bb374688141ebfcb604a"), ("2f56705e25f99db92f41beed9cef2c1b8470ab52909001615c788f3ec8ca7f0c", "2dea9032d1e4962f37b9448f1ff5bc6b3d39705e0a99be70c867f53fbb414ded", "1e1f568d6a6c9e06741e1115818099e4565871d7ba800a975b6d41869c4f8122", "25c8140de973a84691d429db6e910fc335d20005ee84794038312e23f7f3ee68"), ("1f31b01f45ba49651a31b56f4d3c0bcec2fdcda96fb806ee0d2a409432fae6b4", "0c03392c20f0423e1d93302ffa1f0697fb57b3dc59492d98a9dfc440c3ecf8a8", "032da3c73de59775ee07521d0446dc1d8169ae8d89909066e59ea9251fb4ff1b", "27630864ff74cddb74463f810be3530984a0d2363ba1fafdd23aaae44ade1743"), ("08b20517ce45fa170b2c829f749f20c130cdb535db1d7bf0434a1fd97f7d0d97", "2edbd227b1ae4e7b63c6b8220e0de2068613b1d929ff5dd09dffbc23bd9f2ed7", "079e689b838f99bfa1af0707aaf61790aeb35de7481caa809a8c05fb9bbe0b58", "07eeac9b037c0432c76d2b233348ae81a6f565881d4e26c8de5ef8c75efdff23"), ("2701a5a73e106e604694396a465fa28f20a24592d3df88cebfe7b66c6fe887d6", "149005dbab417a095c6b89d001ff64380dec3e6633a726250547502afd84ac1a", "0f69b42277c8b3f571ca2d0737d57e9868daff7ea77801651068e028c56325bc", "09f94144b77b66c8468f3865f6d2eb7b632141c3557db5ed9127c97b71ffa8a8"), ("191bb72dfee49d0b88c122c2717b9c5b7310ff5efadfa3b9d7f16ca09f42edec", "2732447dc8f4d0d32c14f9dd2875a417af6f930515fc62b76f8a9bffdf5a660f", "301502c7d0049be28ee6c0d8b704de99616d53edcc25956acf5008895481d86d", "2a3a6af3810cde4cc51150f76b799cbce042095b004e6afc9f196688bd92a165"), ("1056363486977c25e03c6b6cd2b2952319063ff30b00247540cde5bc65868f05", "2e9993c6c105bcb4453061e6544bca34db6e61b8f975a78b5a73275fafd956b0", "026de6d07a9760cd2221ff8b04977533c79743b32ee7a8e359a1fd51db0aa6c8", "1b92424a0c4550ddbdb3eeedb5082e9270fbdb9ab128aca312a01cd0941312f9"), ("2ecbeec7fd015a69f209a8119c1d87e8787e3c3fc886582bb8892268bd610896", "2fabff62f13114773df10e79fc145a57607cc5c3fd533b9d7dcb4c73a90c1846", "1aa01f43bb4a61577100790cf546f5e0e2a5743bca28f20a8ef561e71adb05cf", "1ce66f6b2305b17aff6896390e1f81f0599f8d98534c4e5e62e49320daa103a5"), ("046e37b401d0aea65ca107848b7f15a64b3fdf551e092c4509422f59b3b47abc", "10d8dd8122c53b4bdbc6d708ffd720ba16200e530a4ae8ea31ecb01ca64d767a", "0e283314ce46c9f9a29d5d471cf7c0a9e8092c18b18fe7393e74dad406c6b2d2", "090bac46ce8804ed708970bd19ed7bc372682107ad8136b46d6bb7893da80b0a"), ("165454bdb3d3d54300512176e0d64a672d8a9e689f6e03b94a369133060c7551", "286a569acb52e53e368bf0ffc7d4490ca637d3bf74e6433f16d0db5423485204", "2fc92c9ddb060f03fc5b71c61cc0f15a9bb1ec252013964e3abf342b7aebe486", "27518db2dbda5ce3ef0700044456ad3a74c9527af7f7393456c52f6b9619b129"), ("1d9fda913b39c4f866e24f58aac4e198079fb281692f2d409642021c813d7659", "1d0783248ed036f6058b866c3835572f61dfcc8c6ac025139b9a014c60de4e3c", "291bd66ed7552669b6b32b8539886406699bb7d83d4990d8477bb0946ae947cc", "1c3e28f3880f42524131ead86ec441ec4c4e0dde82163fce2e0969ef297b64f7"), ("098bde084c5b938ebbf704cf3ae9fbb81c27116e97227ac4d6688c8dd5dcf250", "1bffaa7d4b27135b1e154b39cf335684cc27e7c79aab614c177b1368898a6258", "1d48b5d06a3be61e6bef0685806a2bc5daf9a8c0e20b93371665fccd29bc64e8", "2faaf5fd9aff8c38fab39d290a88411652f61297be0f0400fcf36857ac302a53"), ("2eaaff05e74f9897ecc70249beffdc6d8373e017a7997e9c47c8a1a7d1fcdc09", "1a297fc807869add29bc11b2ec40c3f01cee242f37ec08f0de505dad64c4e025", "1642ab4a96dfd9cb8190f3855ee29faab83d060791891d0c538ba160a1dab1d3", "2492c75551233ba1f7ad3972f174ac10246458aaa57e64c594b0fea59b298e13"), ("06f72cdf38fe314eb0fb42dc78cfd5cd58dd6d66a6598b0099a7e92292c91725", "043576b6bb5eae6deaf4528543085abf907065649c1d67ddd8619ba0b7b5007f", "03e23c7e0705e2709810b8a065dfacd64e7dbc9bd92546ebc983726f6f2f0d1d", "1b348c7de3481ac59d3eb4b2182c44d84799f23cba51f9d775668a8aeeb0f867"), ("19a1cbb6949898647582d2bc0e15b9d174ffc966d8bb25756246fde08ff89f76", "0621c45553ef5b89d435e94a947e6f87a3984f664a2a0fbb60107315e0c223d9", "1b3fa2fe3e3c39d708c8c6a273032b9d89b12eeb4a5b9d1c3cd330a338580978", "0e2b0f5f04ec7c02e1f912a0ac08e943226ccf8affd8ca417f79058a635db650"), ("26ba251870a92ac37688343b32dd1feab914b07c2d6359cff07cccdc067bd368", "2fa5c200a80e030d614e4c6fb654812bcb545f6a38b01e66a73b434be4019cb0", "1fdd950e7f78d2f5457d016798634939bbbb8452c1d9834225cc6d275f7ca909", "05bf922ed65c0cb4420b55e1a6675275f7dda3cfc26824ab80fa38b93b4ffa19"), ("1e1432ab660b3ee6864f09f7fee059f717ad6122957a1425f6bd0bca1a4ae30e", "2f5968efb7fbdc1026b9992c1ffd2cc509009edd5eb98e8030f3384265eb6436", "1dff28dfc03697b621b921e994561b3cd1c5780dc2dc05a6a933ada5ebc118c5", "032e1aa7c7cbe0cf9dd99bf5dc9705e1f9611955b2fc445f4526e1d8905b16e8"), ("0fcec8b7c1fba2d8e8735251076add1efc0a76fced661b5dabbd54d9196a7f78", "175408736f25a0a0e6acb687c435298fc51ed54671539fa8595a5cc489e9497c", "0674578058575319b3830273a1278043ab4ff96a2938c28700be8f1a8bff517e", "24ec811b561b31fd8d88f93c3ad22d4149ecd6c11fefc0648662c4e53994a11d"), ("019410be0bc977a5d6aa17bb2c65b01d09fc5a7735fc807a921b8ae90e4a67b8", "28ede677266b28ab7f9de6d236ba829cfe0a94e26f443c91e58898dc179adb17", "0da51fad4110f91570cf8389483efdd028d7e2f6f08613032f95797847f03cc0", "2f4d7d9b78c0bdd1c9819bce1a0d8dc05c6063e7f2bec20b66d52b13946b9917"), ("26f11a3691c42c91cf231b17fcbd8074f356cc3273ddec32ec941c5de636e345", "2a18d5d26a4f4c16536c59e0630e1f48b45370d245342975de4937141dca858f", "24938cc0c9a4d8a808554520948850890e55aed4388881192fd2543e057e37dc", "29e0ece99fce7f17ecaa0653849301aea79f4b6a60ac6bf53c294efec668e44d"), ("263c5ae288a1e93f947d748e47396df2332b1d2c0c873eabe35e125b7bef4db4", "2f8c46686b1a6dd3e4c0981c170cad1c54414d74da514d4409e2840b7453b2ff", "04583b0649d46773b9736a1bbae5cd7bdb610f67e0259f83c27b43776758aa42", "0cdb76ec2f4a49b82a18b0a9e9c043f85735c8186f3dd25418871974b9912bec"), ("1291ec4122ba87397a7f3c274eab9460144d4614edc277fa20b3b382663ab23d", "0d3b2f6abfaf73d773760c7c2e4962efe15d558b29e4b5b78b1d3bf2be2ba1e6", "2eee2efa42c778ad75accf0aafef50dfbb6de912a51d506d2e9a86cbd80c67b3", "0646eb0422ea16fbf592903732cc5df3aa6fef29b5fc3556c0809467a08d6a01"), ("039ff3a2950ee4b84612b9173b134b7321304ce0b4884cb93bf147798b394540", "2a193f8175455085a908d77e5e428910cb759a3f98ef1f736a09c0db61529a3f", "0ef674f97577c69592897fa44bd9227447dd8cf7048c91214d157eb62c3ec0ed", "16a3e3d2f57d57faff1601cd67e80ce6cf6846a04574b08d2e3e523c22522211"), ("1cf0532fb107f7dba0494ad429b9ce42cb454ed845805b535856db3f6ff62340", "12d33de5f356638aa92d38f9ed5e87b7ab64fc96448cd57065668ec63006f9d2", "21a4f24c2aaa8f3e6985ed6a4411b215a3018df00d220f32203c72c326faeab9", "0f5f91d10180438ef0db138e7c8ffd1d380a761920d01f47291b4b2580178a5a"), ("2ee74e0312d0348e0dd4889a2b464dc6f4cc33c1d822349ddbe3f43bb3a4c803", "0788edc22a702bc5dd7c7a6a67f93d6960af126f6702c5a467767036b65d7029", "287a3e7086b41bd5909a4cf90d50d0b3d66333bc2c2ea333ab94d3f86ca1936a", "0f0a75645d4babf334d7481cc85316573ab7856f4dd0a36114468e8bbd2aa7a9"), ("16dbc65630f3f8a68dea0dc671d3f105e9804a9e9520d90a80d5e2ca25661cde", "2f028916690e48a6430110ff23a56f9fc8c96c62490520c7c7eb4f19b9f4077b", "2bff81f6c855e0edca36c339432e18b2a80bdb0e4d6a13f7be349818557b088a", "0dd48bd803e1c61e98ccb1d6c6d3364a342d6a431cb0241e01a2e14d6aa1f9e4"), ("05e75e10d9917965dd3f15390c0778a67cde5350c48accdbe802d584ce5cf735", "06ea65c2af73e78480f85d85cb6cdc5838e7819ad240668e83733af971c61e2f", "2060bca4cf405cad0bea533f0a22784f364f9cde7dca54dd10819931a8c349ff", "02a33019f5a756e04c27cb418be7f2a314187d11ad02b44ecc82b489a568f67f"), ("0457759e1f264f78a7b6dc5d0c76d908fbc094c57bfb1a84fc6186dd2d1cc9a6", "07aa86e9b4429943ecad938142ec4e6093e510eb7ad19e15a71d0446f88a06f4", "194ba3ceb236ed7c7f8a95c39afac3abf0dd98d8d406ae656af8e40eb0c172e0", "27eb0a88193d42156e8697b18c3a6e5a009c06075df92329fb144679dec3e2e3"), ("204a5ebaeb6f35994e493dc6cb98aded1d2c2a546ae9649091b403a5fe027875", "03a2929436edac32f1b1818cdaaa85dcc630dbbd22090e4f0a9c2afb028ad8e5", "2dac48d06f5ea0d956bc8edf83105d941e477d770080652c91a066b4e8f51667", "110058fbb4f7c396eae7686c8d9c90a9c24ecded7805638cf361e9789bd72bc7"), ("05ca5fe887d102c8acc2985c62339753d244a76d1fb612a45ce3fe89c602a421", "27f04d66633e2f03377b332aa69e55a07657e3e30a13c2764c2b427ae1562638", "15f3eb8ba1d620293f2e93e40a39eb12128900abf665a67fc411d821adf2f5c9", "0675b19391512b9a9919a95e51b253161d32ccb20fce5b7cfe39e78a3a393d39"), ("0b4df90cd146b444253075928c6bb08abad4bbc4a71a66ce9e792dca44d7ffb2", "30352aeb7c3d5d5dc36e47d43ad0394bd8146dc9f1450fe5683f26343eccc805", "2e9934e350cd10d5d3ce9a9be19c055d4ea0568a7b3e3c5db6c2c1934e34383a", "2c410eeaafec8d44054d1e3572bff214b6bcb77af21bf9dbd5e4f87c69ad82de"), ("16b54051c5df40177a9ca21e933d5d1cc220910bf6d15672836338d7535a30fa", "0daa4012885e3727072c373889cb952851ec036c4b2d6765dd6dd41f9ebd709b", "2774d2b4a8b632ba8f4aefe9aaca70182d2f9ee71ca08c614e03cb527d22b25b", "26a2c5a96e226c3b60efb5309f5be1408ffa361508ed667d1a39446d99a64b80"), ("2631d8212cc186e17b4b9c352bb5470741de3e67a49c2cfd4ca7f8185505628b", "155f6e7b1dec82182939e813943b08158aee22bcfa2012ecc68de76d0c78a71a", "2f01bae0988d30c638bda4abfc7e2a94f5a72a307139fd5f3864ff6024c64637", "0269c1041259acdbde8f061f30a4b43a6e4418a2a08b32d37da7a173f4b5b6ac"), ("0a54494117878c5fb176f005a98a860b967ccd161547d7689f48bec61c67f140", "23ce0ad9195a2351571f41b821dc14f6a984aedf82c1b2c55e418447cdfcef0a", "0a1acf7ce863a50cd2d564063feb4c33e58f3e8f82f13c5bc78b9b22bec3ac73", "22715a803948d025fb1f8cfcf313af99c4d58ab21953805a338c6dca7c3a38a8"), ("11b65c1e07b3d314b0531756c92e4b9b5fcd495c758e07188552cd38c422a843", "10ef83c0927b59b71c35d69f172778445709ff5295b737d8ec12eb6f99e38024", "0bbe770a2eb8907b8cfcc613aed1877835186fcdadb503310f5be5aac2b252cd", "033917cdf74ccff9b083cee0a6788f56ac491faef26d1f84a35ff410f3c665a1"), ("093c90f3feeecea2629bc06341036b127b4c496d35d3b6aeea39ce7c1bea9a4a", "02299239208d11e314d2ec9c319ea80f803afe569b64ca569435ee1c0eb75137", "28c2a2567d061b8b163484bb7c1d4f2d46d25a0d29d94ae42fb2a06ad1820c3a", "0a6ee43880aaea9635b06cce4dde8d4249013a3b9c9c7fb087309b890f459628"), ("05008df377c69a5a5dfd5a51b97b9a1b534083ce3782330fca58c17e497f6ab5", "0d6391390b92bf4519a8dc934cc7f7d3a032159d249c7118e2ac749376dfa744", "1f7371beed2b09ca288e3bea033ca17c5c8481fbe7abea7801d9056aa11321d9", "1946ff46842093de1c99c39b55fd30fee1cb73f150db5a48fe401082e572a11d"), ("077cf607f54aa80ec2aa80f080915c967670efe0aff03f24a27348dd07c64375", "2d9ffaa2b0402d1a2396b5daefd7ce952ab9abc01dd3ebf1e1a52464c3bca351", "234e966a7b7b58f18060d5ca6c27b4d19db383628c5ce9ac52e41fc0d2cbd3c1", "13558b939e3deb84c4e4967d25ebb025016cdb54598af09ac6039f0a0eb1f84d"), ("292b82143e381bdc3a464f296e6d52f139b16baae0cabfdf5427e3e11b848723", "270babd1e182397e71473266074a51f3662f8056072ffdd420e76bf942d5bcac", "0b147e9908e21731b3d879bf48de5068923a3847bf231a2747c423d605887332", "2adf93889a47b835bd39f6c8eb1b7eb5b61724b888a4298c3c5f8b48fa9a63fe"), ("17ea55b2c7aa233440b84d4ddf4e97018d10c44dc2b36bbda9932c214d9f9517", "0cb0d213ace65382d4bc69d3a4617b07b017468b7f8cdb113f20fa497b7b903d", "1e416b21d56767a582b1ec281c6efd402c10e956a465ab7b6e568364ab3ca6a6", "1e48233590cac13dc8902da6401c36115ba148ddf27a9c10a2d42ce2fd605d6b"), ("1d0605c231342f4ab1f850c8e02bc98e33b82922ca37faa21f813b735a84b126", "187501dc7aa2344493599e0e203ef99824981741944db8b78d8bfc710caf5054", "0d78be37e269194c156360bbe765b672a568e0e1a0127cd8830497d0c56f3d3a", "2e09e28dfa15f97b279a32547b5542a7b91711aaebb128b0e774a16093b2d047"), ("22a63064888599059fc9103d8da05cf8681195759a43f1512c7e48a119412fa3", "055a8ea3be7115ce91fa78c867b45b926f2f2323662118d9105d2db4c76ba637", "09d9f5e0df9f66beba451ed19277864aefc54fe180e110ee949d937b85fdae15", "0400c0c6073491d9be25d144094cd6fdf0fcf4f8f152ec1f42b866e350464fe4"), ("2a526cb1ae1faafb652eeafd75cfca129595ebca83372ee99848c784433a8604", "18e1f49d6a3183a96f3e892e62539c5436f52751d02d47476a1ca1bee2813555", "1cab654813444e0be50871c90a8767bdbf70f771a145803879e2e3fefe135c32", "03fd43dd17ca38fe57569b49a0a2283481a06e99632f6bb69eb25ecf39402d06"), ("0b6e2ec9f0b25d16f95029ce31c82fad076cf1744a7e15b6dc83d2ae57ab3d9e", "017fe94ff9893a8d530d0cde00408c1c4ae152a88d4a7ef0e98688528bc3ec2e", "24d0d70bd69d30ce0df13d335168863815b8b726dbe4ebd7d4f7dbfa35449d72", "1aad742b9bbf458344b88d033431c5c5349a9b81494369fba696a3fde052b4ac"), ("08d92a5b434cf1c4b1c9588f95ba6b848064cfc03e69fe05689feee03b94615c", "1713c5a11c35a0c443479e9379b3af014892292abb0bd98434e059ad55a3bb76", "02fa5d5c148145504d96b327c5ae8b789979f1fc97c42c19b5fd289485972c56", "1a2c4e8183c19b5b31dce2942d5b30f55e416f394b324acb94cc30d395c82ade"), ("0610b230e0afb4036b6b5362be876b095eedf335196101eb062dd58e8d0fadf2", "022d3cc600c53f69aef8c2548e13d35ce31d9cd3cd12c2a74a2e7bc4ef43ce54", "22b275a12c7def3c3627007d58c72d82e74f1d949a731d8484207484ab66a4cd", "1a379c0c1450b312e30116db9d72137ee24fdcb82967da4fc075e58b33de871b"), ("11622b4091b8059065b6953ef3be30e35fc522c9a1a11a1e064fd8f4324b6dda", "0492deeb6618e2b092c912be86093dd8904a1f41736cbc1ffe35c0bf8f137de1", "0976f64f42f801e5b79876edd930391a4ae5cd7aedb2580bcaacd821369d337a", "26638b776741adb17ddfae6bb6ce51ad7a7bc6db7f02695ee40d7c33dba1ad5a"), ("18b4cea82025034aa4bc1565003ee2255d087bc1d098a8fd5030eec57a6a7944", "09541e370c980358f5609b4a7d3de3dc306d6550441a9016f68129365ac1bcd7", "26c4f5ebec774bf568700a21be99708e9e7863e52501d4c2861cce57bae11df8", "2f05d332729c15858cb0203e4cde7655d108b303af7621d640e0a1409aa3f35d"), ("184ce9bc7f7f17ad5e61264ee39d599287a6507d5b1f26633d6df8b9965badea", "2874ecd4942242800c8d249123bfb62d01d90e194195d096714e8818f5a3ec70", "2f5d207b95de4944fa0e76122d2a87fc460e3dfb284ec68ce213ede48a841c15", "012016890e008e728a4099016154d0e4264486e177e7913c8b2bdb29faa23453"), ("1d3b9c1d410877e09c148ddaf9d52b9c4bdf37020b3e8476c042b1f7626f9321", "05c5ae2fe3c81e9191f7e5569c0f134aec169519b8638e372583e766b1f3c1eb", "024254120dddd1070a5b97f212647f178e7855b12fa84bb35ebc84607cf74d9c", "2dde6c3688065b8d6fdfee9b2d980d830152f6847a5c4de7d9aa0a7fe47265b2"), ("275cc1d631195f2d403fb1d7e26ecd32edc6c2ca463bfbc047f4a0a9e530b7e8", "2ed9b32f5f2cfe0e7040e82bddd5f52f187a338c1c612f6414602cd393083b14", "1d97cef239dfba4f731f33d41d311ee3dc9147f496256e2153c917697ce0277d", "21794246ab2fa228ee488b685e2bb31db7c2f0f18ace998bd0edca8cbaccf597"), ("1b673366a4a7f6c7284780eb3163decbc73eab41c6e170d21c01a776a95eb0c3", "2a7cade390a1815ec44489afc9cfc399bec24598ca12c6cb4fa985a2f17923ed", "1c981cd1386dd03fdfef6e386f83bf90c10e877239414f429cdecc70c71cd216", "206c78f343574d4700fa5593eb1512b599e3d5d6f692c40565488a93425806cb"), ("0077efcde4daf3fc522054bce8f913beb36b0170551e70d23c9cd4ad318235b4", "1f31c1d634284d969e4bb0cb8b16d73179c94f1f92c1363f73bb332db00f0e0a", "2c1275c6bc36332d840c7877b0e49cd56d61dae55e93f4f98b46806128201f78", "0f2dcef3f227524e114366e32088441c6eff2f782d5ff4e8030194571965ec73"), ("164d5a493432c9fb16474674a320d74b5e06022c4ea11ad70815138fbd743f4b", "2bc9545bf6d39401fbaad6142cb01604dfc1d318612cbe07974663fdb788f05a", "2a19a0e90cd3ef09c180fe638a160126fd9032dedef11450fe727341e1d2a070", "11eb7d0b704a6187a0f5580c168b7ab741d797aeb15bb967b21723bb924a8f0f"), ("2697a7db016ee5983829090e628ab0bd33caee9ccdf52a1ebef26987c58a1bd5", "04a8a41e89ed2c54d83be6fe75427cd10c116fbe20be71db12736c52060c2a6f", "30177ff592a3f367b2f71b03628f8a10e3bd1a39db7a19170142244fedca0cc5", "18e10bdf9f9740b988788a8b3f4838e06b5e6a2adae7d41957e09cc249ccae71"), ("2f3cd2491b5937a5a946148e657e035b56185029c8ab6cc19c2008a815d9b886", "15f513c479f6dce064c7997146c0232a6fb7bb8ce65c66c0f2a8cb7c95a0cc8f", "2693c3b5e7ff9a9ef56d715baac7e416b95506fa1e64eaf733641fe7eda39534", "0e6f69ff967265f8f31fa860766f1637f1c65557f79850c00020d3f4fc72ee84"), ("20761cbaf9cbac04218aca6f2f1865a161a5276e738e7196960d3286b0bd9fd3", "27f9b5c46a04e216136739e9feef226ba0f9da86e3c6d11c156d258499f87c78", "19f0ff28c7f22b88aca40b49e512f1d1196629b1346f185eab0c3ae619a9d1b5", "25ca8deee173a8d18ae38ea84e8242847470732197ecaed1571053d56ba94b87"), ("2f0c95ebf2729f29c0f2ea5922d1026df893642bc1213dad2feecd40c311371d", "0c7cf839e0e13b24287480128fe2f690af6f9dbeb0c67614b878528412d99575", "153eba3f5795ca0883adab65fc2178dbd50f3e5d1bbc6051f8066729e713c6ac", "01eb0ab544564e51e052d4b88e70bf74101f1cbe75926cecf36b5febe37286b3"), ("03b7d8515df66791b81354b7888369f9c0041f04ca4dde33b12e4ee29157b14f", "14178b30010f5ef0d752aa7491a44eeaecb0ce5ddf64d1cc80fdc70247c5a184", "029727eae53913c0938db3dcdec6c79ac148f4fc5486a0402b03cfaaa959f66e", "1fccc7f6cd300b1800587722160470c116b7b0ff2803410756b7b1e1e2a19efd"), ("06b81b781aeb741bcd1b3a8b9f88b1956a123fa4a17cbf0c113e06a41ce2370d", "03631d5b297353371e6214331b6965bed61fbb82ba006a2648260b4b56759a68", "126fc1ed2c084d585f3de97c4ea5ca5524593b3c5f67a716f95c3461b17b7026", "17dc2240ce0f4d7921de195bbf55b686ee5fd5f8133b68eec85b064f947c5d8c"), ("1d7c87c0d2e4a1177c5dce03cd93e344c80bee8af714b90941db809a900e9e10", "0f7992171cb0997ca0f36a06fcdaecf6de9f5faeb2274cba036f90ac1afcae67", "045e7d503b673ed30d10d7b1d93a050e99917dbb66b538c5ac0c4e018976a65f", "268d7d88bb9b21d191b0e564e2bbee3e56984fc710641a6d7d07aa945457d190"), ("2b3b5d58873ef97072db95e267aa64f786ebe50063b6682170187dffdaea0b31", "173b99fb122deac11443c348d0f19fbf233a788653557569a2a3f932e6740308", "01b36d0e2e5ad65463bf4dfea57090caa82dd7d17b361a4af5c5ab3091e5f136", "02b4ac1ee32b6f51a28aeb445a64670eaa477c9714c539abdad2f21a054661cf"), ("3012c0b412ab366d59e676d523e24a6e6c8b9e06ad0bcc7937f0a58fa9cea827", "16aeaf3d3ffc6f0fe8986964307bbe9ba24af760f97e01c27d90ee57e10df80e", "036f83924d3e5b67e7479ff15946b14c84d3f87441517f5c57386e2804946d85", "19f5d64b18e3c3787218b604cf69b64a3832651ed29fb050a7bee4da52bd688d"), ("02ca62c572b9b85cdbeef0a69af3e6af007c7a1f305d717071320f9089fbb3f0", "091a7abe878e9a9525939b2712973c92decd086bf70db3375ed887c860e8b39f", "23737421a83901c32a815cd7bde94a89897cd748343af6e6dd57752f8b445c6a", "0a881fdee88f1467d6abcaae8179563db8506b8d61f0d2f32dd3e6aee14a991a"), ("18f7712e39f0d6c8206c054efa879849ef2fcb6de166aa2e8cdb4162b29d5ab2", "06bb2a5251ad123185c898475ef9b97b5cc09f313ebda5fd3b69f5d4f9744db7", "10e62a563df719f0ffdf1b19843703b762494e6abbee96b41f7cac66e4a3a3ac", "2daf64dd0553825ff953289431f2d2fd6b520fc7cbe022b48b25494538021d0f"), ("2db9d81ed46998af3910daad291b08cc4dab33cfccfb5fc094a0c99123af3a1f", "2d516a4ed4ca09fe9d6a5517fcc8e8eba0f6ee2246a889cd39a938b900b42740", "0e5b21687b1d0e3d522311698d53c0318bb1bcd0ea786dfa312d360d7208216e", "234ab5594fe310fda72235e0f1a846994821e1dc3022ae4cd930c89ee07882bf"), ("15514a91c34d857ace116acac7d23a737a225ef20588ba745d1cdb67e7f0581c", "00a2920d530abedc423782d4843154aa00175bbcb33672ebdc89d63ab285b4c6", "12d50e661f17e56d2269ce6d4b0c41ca1ee4ee4c31967ca922a3ea57a9d6fa62", "1c97daae9dfdc7bc74168f7aaf4a35e45e417991f504ce84f639710ef5c84457"), ("1cb1bb2e66d3df221571dcc89b85559e87f005c480743c80e7dd89c5e57ea226", "1f2b7b269feda44af6626b489e3bcb22d73ff4ada3b8a9e451bbb9c62555c6f9", "19bfcdd86d6afb512dddd919c53c5cdfdf264af50b8bcf387a76cf8aecdfda2c", "2ebbeba8b40ee32ad78ff9b7f385bf9603bf1a98b56bde6d82e60924bd54b3d2"), ("1e50232329981b654ec43a34188c5212a0982beb0250c99ba1c56b733233dc7e", "2cc79c7c8e0ac934fcb8cf35b860713ba9c0c17a97bf8dd5191da46a865335ab", "0368fdd64902183e0711f1b758f821b3ea8f6a1493a429cdb8e3be6274583cb6", "2f9f685fd06592e939afd75549d4129292e7d876be67e453da4952ffe95fcb3b"), ("21c057e8493bf690486377935c36d75d09f4b661042096e47f09206524b899d8", "0f39410e7364244c64f168989db0ffd3e8e5c7d5f4da856d4c4029e24eed8bb3", "0e87fdc08db83e2b0486b3d5362b99fc0204d39c430709930aace97b184e3589", "005b37e529d7858df588e75fc3a24bcff711205800b4ed1f8c0cd0534984b7aa"), ("11e9a8c561a06034aaf8c98f198e90b3ade4c6f96d37c3a54d30209b9ae878d6", "16f21521739e427634167ce08b920617b7ea62e731c6fb704fc68e5db0bddc17", "0a63742fea4ee0282c71e06d3c2c56f4dca8454e564a14d10fa7c6f4b1ca5fa6", "14b0b9b91491b7695d5db481ee794dd1648cf150575fec718437e2900f5f6883"), ("026f25d78f63a4cd643d2c480aeab39355f43df47e2c0ccbc11ffc0a33294a23", "155ac855b396843ba74ea67370edac9ac4b61a55891e7e841ac57986c18ef7e5", "15740c1c9aaff4eaaf437be1612a11f0cd5ea362fc20c27eefdb48698aa7e3fa", "0296c49ac23178abaa260739c7798131275ef623303bc201d0e16ac0bcce2c3c"), ("1b0064401585d5033893c5103f8dd0553b0a91927a0f8820d36574019bc9ffdc", "21c4daac1cee1448fde28969db3d43d5641912dc4905a066a5174d72200011d0", "0f2bb89def1e1fb54fb031919591305cc617f1a087f3955baed09935f0b61c49", "2435c42fd6d7bdbfcc8280b4f250f029d5e22512ad2b560c797f873c859a44e8"), ("20ea95daf8489f7684d7e01e1fe529cb36a1272e45de06a01a4993e53015f305", "07636f6bbd7a354d8d537e9ccb1cddfce040c02f07f1d071b39072ae85f8da93", "159b8c35fa44bac1f62ccd6ab0e75ad39e6d774ef4164227c6ab2b47acc23eb1", "0b0bb81f03ea2a3f89a5b664e93ff3fcb023d31a2d875e279d2aa01efff89bf3"), ("1518fcb52769e6497d2f3020f58a19f06957ba39ea26555bfafee335aee6d430", "2e6100a87c3be0c389bc3f120dd395807c4c278379db9f52bb1067127141728a", "1c7eb2b0a0173ee2a23cc6fa12386f044c4ac2db2ead57e2efe134cad5d7f925", "17bb83642bae94d3e9db955c8899c3b02616942a18e6791cb1301241f451dae1"), ("168f5b9fb98f28132ffcfc44f5574c5bba182378a7607ef3882ab8eb41e834dc", "03ddcb1f7866b96306b32e54f6bec6a5f04278adf68c4bee6622b58d436a2cf3", "2f57cc215df140f3a039b33843e5cfbd012913e3a785c09203d0cee0e790bd87", "22e30a9f6eb73fa5ace890854c79a6a627529b0363e8f8f24b4ae572adc7f493"), ("2fdecd7fa7b374549dae530106763cb2301f02628542ded39cc026e266e375c8", "11d0e0f95a4222029750cd5e99ee4b983dd88387b8601cd8babe137e505579df", "2bc9db4bd00284f05d801e60bab6e28ae289f223c9dad5cbf5a6e1255eeba477", "1c20717a3fd89a7280381084c118fd16c6b6dd54df0c0bb8c9cc540071c8b973"), ("056bd7e11f0e1b50488a8d86611eda87f93f2c30c8eb498253a0ea881c09f5a5", "1172f5b7f72b0ad2c9ca4028c5573bdb19bcfff1e17ebfb0a59bb51b60b87457", "00b00b836353a08a9fc654e2d897f41cbf112007dac1432e46b38b98911f8a9e", "23f82bb853c5536354b881b96cd6a618829bf920714311a4076defc7f1d9bfb5"), ("303491259405be3fc324f9a452400fa8241ffc11dddc0600f61ecbd4dbdd7bcc", "00f2c25a3cc4e3ad4235f857da28588f0ecf28565509ab0b1c6e72e9bb81b550", "0dcd8e75803e85511a0159c8c49cf941d97d00454a5abea70e4bf5874f24addb", "2877051c5d50eb75dcff646b5487a3a740b59fa8153d0086acd8b2e5d95236a3"), ("1d141cdf422bdd9c7979aad02b4911ed4a488b17aa8b131f7623ed7d50f65820", "2db751ff5a27e8e47bcadaa689ee455d4229dac94daa87148a7446fdbc55f640", "02b953142a35a256bcb41615e80bd1c8a4eb245f81a62b2ddec29b285226f07f", "14a2cefe6d598172fa55ad0d157bd0a1cb0436efbcb95825bf6b2b482211d424"), ("07cb5a2825b3847e3380fd1a983bc4c7096c202c8a3e09e1b915b130dd259e81", "0e15c1d567c78ea5e818f50674ff87ab639c57a8afef372252297f4a26007337", "25a1deccb24b59bed14b902f37d50372e85166c55069eb7efbe72d534136e42c", "2c9b4cb813188563fd260666bbc1fa03cc5f136721c07af3674614c60e050cb2"), ("0a7ac6dc79935e35a9ae43c7cc85f927f82b7ecfa1710c8af0324010426824ec", "1429f65c2235abaecc879f862b5502539d073f26009f710e0874314881a18381", "109b6843ee06e626292bd8092b49f4b4f06841728ca5cb96b2e1d3cc8fc84d9c", "27a13c000b43290d8166a3122bf60e74f2ef79327228c0ee4bfd61fdf77092c2"), ("09b2bdeb11db152050b12ae8bbc5e6770b48b9e86f9f8042673a6d48171f1094", "2e09e125ea08e1fdc269388827120eed595c6e49a448e37a7319c9039c2c5133", "2c44678ea032ebacd2a72353ba1130bb5d1dae01d8cb81336559b231ba4e922c", "067d4b232fd24a5c6700615c5357c22b9fce5df221841016d04c31c2fd2eed06"), ("1a6fc02b39069807d9798e2986afd7bfaf88e3aa9c3e730c994136fd6a5be591", "13197b9fe9525ed7c503b1557fec9ff8b2b05c60256c853e6f200e877cb8084f", "265b1a900a9294274d962f0a1693c81a5ee6d9c0de83e64cd7f6ee122815df37", "118173f1e4a0020ab669c058e1b55346170e30ddde6a57c29649399e18a3a8da"), ("1eb637e4cff80b0c4ad82062f07ac0325e437d65d0fc2531617eb0bd4505378b", "1cec3614142de5ccc795b59594374b2f02b3b204cac62599db259d6f51124573", "11a9f23f7e1209316ef4ee05ee1257899ad0f0ff3857a1abb2b2d739711ec357", "0a0e61369724b125be4a286d153897785b43a944b99678a2bb3d3e3e51cca709"), ("186ced90412492529c23143180f076315c33d957d060de46218caffd2dc3d2d7", "2d0e13ba3fb1b5860197a4c837647173b15ee375abb1e5e311a415a66169f59d", "20794f919d760b369a492a17464505539d7f18ed140273a964a1a4f8cf170f17", "0be24d2af76f58ea92b64f8db214a73fad66112380ac40c27992b50cc22700ec"), ("2739e9cb81c8ea90c0c86b72ea03428adb7f7f277ee0618c815bf54c8fe38a1a", "270ca9f8181ed2c2563e2a0332033ee1ece5ee8c3f6ac4d7db8d0e32b091098f", "29f194306cea4175d0f724a55ce9fb03d0e340b79ad4c304a67a8552b7fb41a0", "0902f911e0053615bd7d0b8ff6d285f1c531c5bf66c90a91ac6f15afb82d30a0"), ("08f79a5403d78c707d6a9b4e86991d0e948d9376e4e9f6e15e9fd4af91dd383d", "0fe502c7588c9dc6f0e5a7a995cbc146a3b733500a47153956015a50b5186482", "0fa55d289ef93e4e41a60e98834e5822d864eaf109ed27f0121841a725f145a9", "30026a65785ab0e33664e8be9b3098e7734dd0472aa998cce3fc2ccb0ef1d687"), ("28dafb9675b4589d1d3dbf2a9f1ad65278ff04c588857f7a9d1035708472ebfe", "0ba83180bd7b111bc1c244be08e58c98502901d2870aff8c9e621426766c7c65", "1cce109394da0151830d49d0aa6a426f01e6beab33fd087a9b41fd7c8ac678d5", "04a01e9571c96751f5614ee572bba34226d38b005107d82b2df303deb69de1b5"), ("25e4c22561a36d6972038df6b2c7dd3d71e8a262dfbafa20b2a1f3244eb7a342", "0ef87043c5e6cadafafa1d7b20ce69631ec3e2ac1a7db267fc0076eb17863ca3", "083cae6e717fbf0b1366caf5e6aae3691a224c8187fe14b0e7731ee2ae022686", "04316c83a9f6980a15c9d9143d23c77a4b58fe97f194e4e2533913be9392fe29"), ("2181518319eb497b1701b6994708f6fb403c671425edf48e5927b6d51f6e5726", "2ea86ccbfdd79478cb5c771e528c89f5b325e5e56503433dc3098df72a170600", "04a55034f436fc1e1b659099923e9127229ed1e92346f94329a35390922bd565", "2be5c5e472ad72e6cca0e4b7405da0371392c7fa4b47b7f0ec9a3c728bc70a6d"), ("0c003aff2058adc2aa15232d6b39dffb4170ff03a224f8932e8ba7bcdef85e28", "25d0b0a6409ffee3f52ac410577ce2582fc3b4324feaf8908d9e60415a650ef1", "15246a0055fdc8e75d237199f539984fb341c1f1aca46fb529b695ca884575cd", "01942e00faa11567331399e2089f7042482b8a7c29b8568542d6d8842300abb8"), ("1079fd198402c6687e2be1dcee1ac143077a10aa99a61e6d5eeea3b5c46a5b6b", "09f957639568cc64a2429055e70d0887948ad2bb81a0aebbf6cae0aeeecb0a0f", "24485f4cf43ff952b821dc3418f7dfc98cebb0cfbce0c915251b1c8b162401a6", "2e00a3a97e8b463a09435861afe76ac3ef085407dfd8085c5700427b5cbad9e1"), ("002f48f5c9b22f8a397f1c50f82b33198137d66d3cff352531b12323160d2f30", "18588827263d4803b8355b070e493ba911bccafadc15574969d4b9047b14f41d", "2a8fd7daf0126f2f3c4ff537e21095c00214468b167b0fe6b97ad8b62311f9be", "25e131759b6c090b1f800266769e3bd7b48264c30ab8dd347e69ff7da05a88ec"), ("0195eb0f496df3f22c6d97b0701ad3ad8d18b0ac71c7197c11590fee9139cf75", "025229dcaee4abea05f1f4301a825963771f5ac11d5a91be6ca644de9f68670d", "2a1e9a116b5137ed4a09e6cb2ec0f64a1dfee10e5b69f38ea7201763306da181", "0e1c5b742ae0e3740b54ffc70ea59d8e0d086be5c8e7e079027c0dc5f9971d8c"), ("17a00a070d8cc5db21ffc2d4ad92a8a6356e179603f374e7ccfa9c77f19e1b99", "2d63512c1a64aa65fe555534909a678452873d187d3bed4f7801f2d0e8e87618", "0062e2aa00c6d1a0240d6eb0955a54c99fac57a987907d1410dfeff76a0cc9df", "0b13c4e96085543e00920ce76b37a697456fba88b81db28edcdee617e651b389"), ("2a87c5b91b00e03fddedd4f710449e99377a883235c1ca4237477a0aa415b2eb", "2b43ece96870fed853cc6b115c5d597bc810ed21fe6799f5ff71ad6865b1e89f", "230f7182cd288f1248a0e159897f2d31304f7ea76d8625a5c44033eeba8f5475", "2b21e3d874d64bc14d3c44808c04d49f6b4769cd8280006b8566bfad64e71047"), ("210ad562ac5f39fc4e78f160769b4621fb50b3caad48d9c1ad58c9fa65717b94", "1d60ad40e18b5ffb0fbe28d2ada6f77edd365c3ab3503706f269d04af5c095ff", "081294cad0e5fd6f6b292ec7d206ed8f137bc225f911c79eac1409a1394ef9e6", "04d270554475cc77ae3473bb4ba59e798eed23e935b014473ccc9d45128d0d1a"), ("22ad695225e70f120c3f159cbd1acb0ed5ace99ef55fbf44a5e98251ea428095", "0c06c6bd46206a7e918629615ede8c2d530d2ddc1949bca0bb81aa018b568ec7", "1656a029a5a3f8e9ec791c215c34b3a3fb9ae2536f2bec7843a659f1d5b74f88", "180720f6dc39534069e4c1ad804094cabeb4f7ce40cc05e38306bf0ac4c0b19c"), ("125fc0d6c1b8e28de625ecc180553e8626a318d3faf8006de92f3f69a2d47475", "2d7b2d63b1e05beb1235d58d887866ec03ff4efcfd62d6d32a9c28eff6d74798", "233d425a57faf391df353409595c111b3566a80815f84f810f823cb857bef93a", "02391e8397bc0e4d72c721f4c6fa598373dff3bee0cfa5af7291847354694644"), ("17aedc746b3ec15ed4c62aa189e28a3e504ce96dbddf8206db86646d4f7211e6", "234235ef102b66e159b088efecbc8955c208b9745912407e4ed793e2657b900d", "0d2eb5b2cebd11f44e2b7f1bc5e2b43cedc6e3168f807ccf219ec11554127ee8", "11a209816335a81656a3226596b01a2c7e2dfa63af94cb991103621541711309"), ("034e1f84584757f5dbc0c902d9609e403e4e0b5fc3a4cac38485b032f8488e2d", "09e5e379f9b62d3c8399166eec2a8463af8ee951dcb8478d16ac37439b7e8f4b", "11241c7c120dbc00ab90af0258ea7455ddae0747ca963927e7b152b35ea2e1ed", "12d821592e764192c478490caac9754e112dac05cfb8701198d19c98adb2f2c1"), ("207b42e175ae0423828fe7b111b3cd3db2e4fbb4673bf2a22ff06cdeb9781e82", "031596440f476338e37b5064b4b1e6bd1f800a750aa789c3c3945207d07d6622", "10e61a2799367d59cdfb8f56b0d7e4b390a581cfcad9a4ad6356baa1b44603c9", "111a5a897b6b6d89af90a5e4411de855d8584a8facfb005e8c73494638d7b01d"), ("1dbc8492756700554574e4adc748e9dde37dc93636fdcc669368f3b08c2025c8", "0142a042c07d1ed70e5e7180ecb921a8c57954c4e8f89b542787c541ff8044dc", "0caf3ddcf4abc2dc35217b61c335aff6468fd8c2fd882a5e08136c521699f7ee", "12b781e3c1d594a553037c85236e1cc9462175f66d6968db6b78dafd7a65d929"), ("209d5b6b2d4a484756359507acde95541a8fd2f4958995a5993ea8551d177575", "26b86fc3dfb236da5ec10ad79a51195e1d6904efd342bcecbcb21fc6a75aaaa2", "16f5ed502e9c967fcf6c99070677552074e1c5e51f3cbcddf893e6141b51a79b", "113bcbf8ab7abde31f114aa73da63790a0427b60bf524910206658db11c130f2"), ("032b6ac073a781462b0a9494e79f6bcf6f56b341fe6a5e1e9510b796da1942e7", "1213e15cdd04137b7adc978cd772299e8aec109055a65e28f1daaf526a0ee5be", "1a47879d175199784fb4598401d966210296080088921ca74e3b76cc9079c600", "1b31e98bca1ce0431caa2c0fc2914f3e34b5de8dbb4d5ed2f1b4a9bc77ed387d"), ("2069c1a3d26d90f44b72457a1fb5b8ab268193f189c52899213ce2b52072bee4", "201d790953e16ecd75cda8b304969ff3cc12d716456095b144b471ad821f6d16", "20b680e12b692fca22bf2eb8149fff253129d59a89d59385f8995e4ceea0933f", "23d32f19cab6346ccf60d71d552cc30870db29297a4f81ce65895330b4fb4eb5"), ("04d4cc9fbbec72ad66063c57b2344d5ffc5817b898edd49803521ea564677d83", "118761d19a934b252aaead0367ccde8a7cd45858926be36328cd4bb316be3a29", "1764d30da4663b7cc0c4428848a2c74b529cc2a5f688674c1090ce995c17ffd1", "104617e66b6e1b00166e35c285c2aac03c35aee5bcb75b0f059f5f48fb5b34aa"), ("09a504d1767639709c31a90394d558fed081259cc27153fad5a9d60eca750a28", "017ca40da0709592c486bd7fb113fded4131a01247e416d17fc52167ea20159d", "2c5fca5a1c5e0a7fce7d59a5900a1900c18fc943378e68ab32ef405cd9f1e0c1", "059b39a7cf44cbf65dcaad035761ffaa143ee26b0301a308d5518a661065d782"), ("28c378da8743f10820acd518702b0d605ad222173afa990104024ac8db352f1e", "2de0c314ed9fe7cf1dbc76342caaa6f9b0a02627928b92d72dd59a070e3b4b5e", "1ab89660f28429bce905e3fe0fe3700cec5ba6cfb4e2ffba4a86a9e32667cd2d", "1d4c54042f24fe75f601046a6ecb66911be7437ab1aebb758bc23c173fc1bd4f"), ("2f3a2593fc112e73e0f11ff9a5157d252dd2b079359d727d9fc067092556ccb5", "082fadad11877f497ec2fe3bf5d72fc66814b71b734e7ee8821513d8f20a6e47", "1c07702d990862cc3ae0ee192124c609ba518455c48072d7f6f72c3a83df034d", "0bb814b80bdfa04c31f5d75c8c49077dd669955793159656783434d6cd27168b"), ("300275251cc4e5041240c8c9178ef280f0dac53ca719fe0df60552964e769884", "08774ad8cbea8c29a62387ef8622c7c84327a4175a79b3a27328118aa4e6419f", "0cbf3f280a47f2559c076eb988bf198c94a11f21fb6beaca1b3c3c82017243f8", "2323d90ed65a1996fb7a8367e3ce4c08ef086be88060f5e40cec6d3a39d6f783"), ("0135777c4cfc972060912e69a405719f4d8c8422dffea48c0ff7215385a2154d", "27c5111c78868d8c806236abcef58bc7d4635642854a8331fb4c469a871276b6", "2fb92d58da7db720b4cd394740ca4aaacbd84cf95cf60e65e8630cb572c0b6ae", "1652ecf9bdca82e78d5edd879ab6c0a3dc5516238d75014b470654dc74fa5790"), ("056eb7c443c3b546b0c847c5a8cb87bbc14fae274783fb6ffe8c2cdbfb9bc662", "3017a9cbc1b0c2c4f6cfa583bc48861fd8fbd199639b2400e8e838d347206311", "02dd7f200e2e3ed9b89b06fd9947250c79a9a2723566a1f163b9b4d5da8818ca", "2ab7dfd26a41669390640c6383b7317f2bd0b5e796b2f150a508876ee1925af4"), ("0ad25f5838c39e9b449f66a88c63d3ad49f37554a9594dc41a6370a4a29e1686", "1e6422ecf54493c68807e37fd1a63cd6e2a63d904d39887cd388fb9da734436d", "11c299abb4a4f2e5221b4e1ac93afc03e99a23cda32a0accbc9cd6ae325d61fa", "08d1b22b774e73baf2d234a0299e7b46742620d6914a40ab7ef7aa6f7f0d2621"), ("1b4db8377dc4bd4a98a81a09610307f8bfa794cb2a762dfc430da9e360c9f794", "0c9e1ede1660dbb75867195ea38e3acee9044cd47da69e8a2a9a53cbb22bc85c", "276b98eb6ce9a9580fb538edf2aefc47c5c466633e7162b793611062dc576853", "0f5e8c84fa4774ee121c53057625bd93cb0b4bc050a400a433e2dfbd3015dd0c"), ("291280d995bcaa9f68d4ab6798006adc5c1b499fadc0377c41458b4ddbf2b0d4", "1f7aa4b668c1fa6984eded5391bcc725abb17a6d6c305876abc2b8985d6c3100", "2a18dc1ac9d3893443d5d876634bfdf0c3741f1f4368ffda543e628d36e4bf92", "27727292495ceb33c95e62f1f8b58870d315c937b97f85462a4fb81de8c088e5"), ("2aa4f0f110ce77d302a87365361550baa1fe8acffee11f98521d6a92bd8b1e13", "1044d89cbf19b893cbcda2e16cc3fd1969d3efbc844e20714e39b898f3196881", "189e32c55c4bd55909357413e9d8bbe08f15fd16a642f470c5f015e89e850c97", "0760340417595e3d0b18ee8af74842cd65ce589115e648506a9818d2e6731fb6"), ("2a402fcd213b4c0a34e876c4b741cac58e3b39bfbed3173e38a1e0045e4bb6c6", "23226aeff2118331ef523efcb829a5efa3d32cb078bbcb17b9de3e7b7312785a", "2bd9dcabf3cb22cc31efd7e1dc3ee174e973eb9df343dd47b79350baf19e3ccd", "0170271ab7a1b7b36eb4ba96182af44d2873660d8150e5d5549db888234e61b9"), ("1963350defe42aa29cab80691eaba2298acd4164ea74e8dafff596ee08c17aab", "1904eb52513219d7e5b293ec7ee48dac86d7edb8081b07e81f20571021d55fe7", "08b25d0cca3062fd0a87a13778d0332217f66e1a99731a38aa2ccf34c30bf392", "094c06a33ae2ad0fa943d3f27a89f82fb5d6e1b6b11dab5497130462c79c6214"), ("2e87a55c97893d99db501f084b602ed7f73dd82fd2dbbca8fe1737136e7fbc0d", "19d66037653bc5edbd4ab06f72973f5ffdef1a696722997ecadb06c035f1a84e", "077b0d3944597f915c159cd23a8603b6edf03943c8378d7a5761dca5326c9375", "0a85bea9d5d777ead8bd64aa9098f264b1dabc5a7df08f422354bbfdc43764a7"), ("21675bc93ddf87a372157b9b03ed3e6f0d8d072889494bdc716fc1377a05408d", "0eb54393c4413825e2170d4dd9490213cbac718913df7ae8447047ccf1d7786b", "0ce498681b88aed87b4dfb5837a7e5aa682fbc09c9b03bd62a71319572e2898f", "0de467a789a6a80a74c93e0afc60caad3df4d94e8cd7e3824a03e099a00c6a62"), ("1b43d73d2234a08d6d0a69e538f456557a1715b4abbb08177571f6ebcd2d76cf", "160c85eb707c10a01cdbe0caba60af332f8208a561c2fa93a98b724f50173499", "2a12dc19cf5f241c67b833a31ab928cae87c6f5989952407ba15f303c2727d56", "2a87f9824d9201fc3af08c5594eca9134fad303cb2cb5ae89cbdb33620bba0bb"), ("1e720d54855c8a4b87768efa22ff793ce28daf86b4f3e1bd4389ccbffb1c52c7", "2936b8979085854e81353f39fee487479022b925c23f9bd7b700bde30af94b80", "091cbde53006bb0bce0a833c9bd14ffd31d4b81c7b488f2222970ab4df6ac2da", "1047019b719ef2300c44691c630aad1d1b1cdd253b5be13945a442366873f341"), ("2090db78fed44d0bdbee25f0ffb96b581fa8ef814da1b8ca377397938961bd33", "1e419e417fc0be7d6f530d04c3683d6c87aef9e90b5b0ac0b25f05979ce854bc", "11fc0296cddaed33c91dcb1601e214a3f70a9f8a3667108b6836ff45f214616f", "24c3c3aad9ba25941a6d8d5c964e9a310e6f5edb10eee179329d9333a0553e2f"), ("23f0e41011ebc9af726e0d5b6ff0cfd6d5f334a73a5f18e06548fd269aadd9ed", "039207568928d567dff70b2b64f4480c56e9c102a3cc69c9fa670c8b575d26b1", "2e73acc2b29b0d6a32e616911bdb3469ebaae91fc44e136c79dca0342c8aafbd", "0b94af1435e25df1a70495b6ca00d273f250520318e0ffc33afc1df6ae58d097"), ("2818e48e46e5f763231dfd048a2bf8e725d5099be48910b880efff4e6dbb20cb", "2b7a8e2eec77bffe5cc6a9c35c7aee5567c29ac14f12a255110c608f09baef93", "1bc8304c3e485a06a09e4b5637e8a8d61cd3cef69af7b63e327aff2aeb90c4b9", "0482b2df9779c8c86530f10ad73d1208a67ef8c61ff935f55441f89a326a0e2f"), ("0b73990b6e4cd7d6b96b413565a6dd720e406ca4f70d5e35abce89323dd93512", "0958e7fb18c246542cd09a5cd468e0b4fdfaf37b95b3052532b636c7bc01b16a", "1468d92dc6bd68b0453452395d602c1bed4ecb4d76f5675725407953b285be81", "244c38f69a678fb69d29fe5502d3f230deda0289494e856e42eb20cd05198f16"), ("14d35f13c984e9453977ddc5ada39e2f33ff0160bd0710e629a40336539e8847", "167e16b8c3848ae9517e0805ee51d830e9b029ad44be8342bbcbc8863faff1f4", "2154caf6c2b7a4d44929ed5c17e66cae3bc9abec1c90218fc5d564dc4cc22091", "189f2e99839a71559a3e935269ad40a2f4aedd6a98f19f00f5b4b6543f844a3c"), ("28f4c6c261a6e34d18d5b59eb1007af5e29b2a52c55f166c635aad3ba9d83225", "2427009804c9df6e099657b1f82e12ccb579af77ac37825eb830c8c9a207f237", "1b7608031da633ae19b0379bd6a7515944621accc76b8d42fcbc1e022e13c61d", "2fa9286432acc3ca372ade736a2ce97632ef2c68e0a0cedbd4ed0155c8d52cd7"), ("0c2b2d04d030f9f295d93b3542c5a95289f995b6daad666d0e0f34da264e4203", "207a02e839cbacae8f55812a1fff1dba326cbee35d810cc3ea2d1d7103e611b6", "22b9616bf62fd8d189bfb8fefb09ac9eeedb9b4024b81356acec46f3fc533802", "236780a04b53d9e13c08dd4b059c80101bdf05fea1290a5c11b304f088a2c4dd"), ("1dd4356c3778cc41fd3c0a1a6608da54fbb3f019280fdf8c667791fa29d57b6f", "107318e7b9cb380b68b2be4671bc25dfd472bf112c5e7e03012fd2f87f6af99b", "104384a7dd998d0c4e9b749d4cabc48eb3b7831a32c6f3475c7bf95554a518da", "0551e6d91cc0f38c782cab2d130f95b906c6c4ac9534fd2cae1737b70759f984"), ("229637bec4a33c0e1d7605121cb89cfbd4886e6c27e7b1c211fc3cc3fcdb9346", "0576884ae3e5b35819bdf42749a6c0d0b97c06ef2a2d9965200aae04b11f50c9", "08df3cb1ea0f2d4a2dab2f4755c39a2b0adb0462df427f960718d5fe6fae9f2e", "29455192cadc172262687f53287200b8f7fbbc654c7977411cde2613da33e312"), ("21b85dcba5c3fd34033029a176a34e0c7aad2e903e4e2c6431247d223f31a853", "0b7d851675ceacb10208e0a70d0e4c9c555466b694977d8fc3966a4486860b33", "1b67ff54cd01deb5b36e42b6759e6cc875f53982f70bbcea74a79981a1ad22cb", "1bbe3b35aead79b32fac68e9dde2fba6c819e01ec1d79ef4dc8caf2b2fe4ff14"), ("03904d8ea0749b168acf769b8e086005ddb67f661482b316c3f869356b992474", "036ed7722b7f9d8f8270c7e93d7d81f7a5671e27870110a03997fed198135f7f", "13429d4a9d29a7c8f41ba63b934855c937a7698ae3c41dfb032cbad60a27621a", "24a1653b9d972cbf9f441db60ec26db64af6ac6eeb533d1540d5cee1e3e8aa56"), ("04873f25500ba345ac070dfc6927523ac9b8fb093d73f0124cf8db2e185df166", "2a7c31fe0d7c2667e0c4fce8a7847985fa3de9e999060fce489ed5b047b35644", "1f758d03cd24ce720c2ca3693414d150c7f8adefb081d7af3f821916518bb8c6", "2313f16224c7f76d9d883c7cbd10a60651d7d248263983651dc45da463385345"), ("1db9ab2f051221e7aab721e00a3fd09fff2499fc62e22e914cc901d5a1f481f9", "2367964b08bb59a6327a40963f50884ba5b6619d016a94bf835674d918b10f71", "1a180169e925c4218d05dd842f3404a702353abd06e2cdc6e8f954ef9b66e96f", "2e629658f15576bf58c4bd0731d398dff99f2e0fa8b317f84f4d1712a4ef4b8c"), ("28f9c0fda1e2c6f982948a22b7222f093b7930114deb7b1fd88b8c8a54fa21a4", "0aba4b44bf8cc9b811495f6e6ae6c33e0c91b7424b5d64a38604747896d7c714", "15d755b24085fcc279c246b59de32c3f6b89755db0e6281e08dee3cc30828b54", "2106286824fe19b9d8d8d580eed51423a1e08a089adcbde6e502e3304f9d6d89"), ("18aee69a02197d06b654b2821a5995b0cb09b4ae51aa47d0c6ed39936f7b6923", "0f3d6221bcf7e2a0050a96726c6ed3c7243349d336535da994aac47cc564dfae", "2cbf1e1855299f4f423983e400d3d47021c17aa16e5e4c42652dec1bee52eea3", "018da366d49a5d146ecfbc9eef10c33c6b510f4ff198e80f78848aff6f1d585a"), ("29ffbafe3287e750095660fd4b73b318d3090fc1861db9d9409747a726fa50a4", "1b88bc678c15be8189eb111907f45c3c79156a948460c547988e95571db08f4a", "08dd9d267bad3de0fc55135d5f5966992957143e377c2c1c241ad3414e98e42b", "27a1a84b607f41fe57d363864b49153fb8640d6fb505bb57c60f42bacc222b18"), ("0768c87782a6e2fdf8c9e6005f9d96ce60524b9af9d539873b6dc575cf9c381a", "16e68795af463221dde4a93b0cb265df0b63c9718c36ddcfb88e4a0d5d3c0ceb", "129a5c47347c7d8be4eb3a59cc28c072a1c8d6f7752ea1300c0ab0e96c3b5a55", "09d875b81ec5d231219574155c21326ed59d35d3de30275880c6ea2260aa3d5b"), ("268880c145324e213a9c97f3cc22f86cb89fb5696bf423f34bb8a0c115a46d93", "2eaf930e55be6086f0e26a66e3b160770b96ef84218e95b3e59c8f5ad7128889", "1c1388b60475cbbbc0dec4b99004fe191ab411f68dec44a540a7743d5fec09c1", "12456db4aea0fbc690965c54784e48b8ae61cbaf20605de74aa6f9d0ea6ebdd4"), ("050e1575ac4f82a082e1296f453fe0a4c5c37a533e7ae71b06c9e8c2cb579462", "201902ce57f6d8569578631a67adb9723679426da0adb3c053b04d6219fd5d7b", "15223261ae7b7efa3e935a8caabefd0d8d272b0a450c891f0532d8752a4f2104", "048fcbff63b70475fbf31e825695e64c1999f67eacc1286769f0e690b9294f18"), ("000829e9b09fcae64f4123b493566d6737590f49e5a0d6da47c0711738b2bd42", "10ac70b87220a1bb7fac7c0bac5e100bf7cca5492b73e4c6b3248272ecd71c59", "01c31ade63ccce8e9ad585e5a15db8b40c15c811921acb769f2d6ee7de1b137c", "07b390689b2c364c116ff4a5857036cbcf9653cd2415bbfef967539085fe3a01"), ("078f9d03855752348ac6ac396809cf861823abd8d9c8fc9124b7eba43489998c", "20a70f1474fe0f4269a6dffb10170506c174e21170556d599eb19750431dab1c", "2f63315f99ce789f38505d586cf8c684c69f21db41d88944ec9d7de87bad7223", "07ae196801a5ddd02b07c841240828df44d69b4441a1af265a613a3159c2eb7c"), ("2e49ade77fed9cc002c4e7c9ee370b811fd0d0884c5cde5d653b2eed2de41736", "02b03da5e5d4ddba8f6522ef5483faa88fc4a6cbc62b329f42176bc7ee9cb084", "2298f67c97b203864bed3158f2d8e9e0a9c324f1c23dc389e3dd3a0160d4f952", "02ba2a83c3772895e846350d83e3273456a1c0dc0c05a6ea48f222776ab815bb"), ("089229b48d962bec2da07e95229371aa584ae6b6a8d2cecbdc50ce54a4258ad3", "148b3be74ae9b00cbd0bfb2264ff3b04ec38f6eb9dcfb4f2a961c3ae871e44cd", "2d3a4854ad81c383e5530a7c7832e0082bccf680177b0fb7889ec1176e00feb7", "06068eb9e425c2c97f7a7a78e0b23bf916d213a83697e52b5444c760433cf121"), ("1422fe7828bc64fdc8db394bdb4f8b29ab559a1230f0241b027acc7961786750", "0b1596b0bfef42317e1d608a042584dd3485cb1bf1f7bafca8d27fd73faca256", "022952f881462ab6775b07d067b8eb94e987e840ce1083bd660f44776c9a2ab2", "2b8eaa5583af4ca0eafe7c5cae270a55a4258d7f1b4754a82cd3c1364a726bab"), ("2b9659ce8511b562db662baf9b995ea5a142f2504ed4f5daf757e55d173592b6", "0d4571229789e5414690543875513fe3db21c5b5fc15371633ac145243a39458", "2ec770378d1258793052f2574084eb26798d0edfc9b93aab0f8e84364fb1d8ed", "065755f4b96de83d7395eec3db9b20ed7b5ad3895e017df024e0b2b437dc921e"), ("04823416c116b696a05ee4b1f9d75a182fa44cfc5656e0bae3df6a48df0c7078", "21ebf9c228acf27f2654984d6e60bd01de7585e3ece26000efd4ec1a3f9ad2a2", "2328847f2b6dd7e1b5d6b6c957cef10a8d158391df3f6b4daf2c777c28217b7a", "0ebb588c34b028dfa3ecfb0a81ee2cd41b956dbdc4901cc07643788b8ad4b2ed"), ("06bda44f061c8b577731e1d744aa756ced89a825535fb1e1c72e1129e126789f", "2c8da79ac65b7602bb22c4c47a3ddaadc905a8c7b5c20c314c5665ccdbb8e2cb", "0df980e847f6e2eba450c5da9c42e409fa24d421f665f6f267a50455989cac91", "0c59db4143e744f65b664f4dec23b53f381b5463845fbbaf49580f379f993ad5"), ("1c7bed41c0084c8bec5c09ab581d8d8613f20943e56cba33c57f5f0c31670782", "154fbe3bf2e8fc5538fc0ee83b01f1484d04b1bb2f61451489040f284e6c9069", "0f5aa2a9a3f930de629e3c8eb22717463e740dd30bc06da952666dc06b1de0f9", "2bcbf052438c1eb55674e124ba3c27a5b6dc0d5202a4fd478acd28d72becac2d"), ("26287abb1ce857d72ffede26ff0104c09102b58dac0d969ce5c207f6e991cb86", "0c42ca974759b52efad8aa273e6a4f212c7941c87401fddc1dd3b3b316df4719", "0c14a54be3fce2c26ecd52ca67d2a5341d13a1df943e242411d47b04bb9d422d", "249dbd95a94a338def5f628408fe5209f415b28031524724364d0c244346e7d1"), ("2359b280d427807c51419ff962665b22534b31e53365a1530e4feea455ec897a", "04ac06d1cfe3f17da0ebb7c9db2a24290422cfe9e85877b01b0a4b04c3b084cc", "08cae76f16f3c11a3305ae42ce0a1fb02745a75ef34bbc24be59483300058fca", "0f37c14b90d21e5d9336b6d607e1f99d333e4ced1a90fdb4655d988119474608"), ("1ce6f62e0d434ecd4e216078c68c3180c74b7b1b46687de7c74d014ee3891016", "0f88cb6847bf74d7eb3f85218ff73e97c48597639a29938cbc6ddcea45ea25dc", "26e2b515311330c9929ee8763f1a21a1df564646df880f43c514b633f7cb3a8e", "2198fbfe4c57c9cff88d9433a18f292b18d0d55e7d63e1ce3336626ed1feadd8"), ("116acdc2b8e621f456010ca549c25c32ae6d883a7e9a33da110b7b3d160bd8e7", "2b9a37eb170eb23285ae9c17a2d12123db78eaf5f5c1c8b141e71ec821109521", "0f9c4019ac8edbdd2b5ca86b742658995b060bdcfbce14a5d93aa16e484032f8", "08c4e854aeabf4839065d6676ca1b4a4f6b97ff989afb3b4b5c1fb3aa04f3530"), ("10cae131c85598b4cacd5cfa13587428c9f4083b6ac249bf81b51286b83a6f1d", "0ab1f695314c012af485a89de2fc803aba23e1bcb045f62f54e8f82be9c407bf", "18146ba18eb2f85e9613e0aabce7142dba50adfd9f61c65c476d74a6add454e9", "14dd663f399bd7c7ee8e88560739152d36920eaea3eb0ba95493dfb51bd30618"), ("0b2500462b5518158593878c8ade731defdb59b96cab6bb5ee84f8ef2ebb654e", "0bc8b1d45c34eb1c2251e0152a2c7bf63e9734d2d3dc07569cef1717d9d71f0d", "043d394cf0f76a5d9418ccbe2a91df580896dfc14b2b8ab3c8e51a33f94e43e7", "11fa27e6f15f97654cba0223819fc29f4e4e9b154ffcd09e4ed2e5280d06e174"), ("1c5a76b8ffea7d0cc48b84df149cfbe742f193531768f3f45ad00261c55a93bd", "2321cc929e579836c50425e2b3e335e659c8a7bb1d3d6dceab32ad6348e6aeda", "2d74dfce8cacbdd9aefc904fe9d12706323cc1944b85ee275f1fbab2a1afca83", "1f699f9e29ea9be038157f8b818bad502d5ec100fb829719a2ab1893693fe2ed"), ("1c2384e48da3a1081dc9adcd0ae05e894ddb9393cd667e32f6587cdec2a2b348", "1c35e4dcafa37bdbcc8f3bab090542f1d8d990752adc546eec26f7f9f6a1b326", "06041078e0425c999c858e0cd4ad3eb86afcc2ee90609917e5a3ab23e68fed57", "1f2bd26fbb47129e5e94859612d9857f8d6ff006a4b444bc1a19cbcd29ef83d4"), ("20bbba94bdf0423d3de7c2097b75cfa05ffc03b12dc9fda2b76bd28a9a3f0c74", "0e1a8739762c8f4187db1cd0d9a158b535336586442eb41a6c5feb05c85d17a6", "09449e6f2effdb1d16716e4e08078bd3067e8359fc6bdd546e9e118741211fdb", "0c251f7aed1011f4da4da4a4d3261cb38f00429e89e36202b5a9495985434097"), ("174f286527192162152a728b55fd9cc11e668ea78212897fd3ec7604894ec053", "1ad3643e103dde46b8f038639cd6e059efa29ad707632b6355e2fef887db836c", "22d3fe0ac18dea9f9f318c8a77bfc7b96b201151f8cf83d2238c871f8db6e1ee", "1220eb81bb3a7f16f7701d1660ffaa4c60b67528f388959b934e105c521345c1"), ("2666bc4062d64850ccbc8dac2552a98f926db14e7fd2fc348611f5c30f5beb17", "118e0d111edf4cf0e24be5aa25bb550e327f782ec5a15cff060d5321939d7119", "26372a02cd4bdf76af15f030c5e6c767e46971a9aa89a649ebf91191bb753e1f", "2bd857e12829407d4c728671e083ad0b552785299147b9b852d95cfb3431d45c"), ("2842734e5542263b341ef45422a7c5c628366df6681c6af32e142c69296b84e1", "06ff637a815f8f62c9a4077ac98112231ddd0a23c7a63b2eaf0b8e72eecddcce", "0f37d9b354237f0798b7bb997312ad16d192d836b4a33df01b17d581e2a1fc30", "2acc9b3a43d2d5b8b572bf07476dc52bae61a7515308a905c25f670f2fba2c8e"), ("1acfae034fa8d7f3f117af9124eec4abd4d71dd32f9041275c9bc744c2b2bd42", "02b04b88370ac534a0d267d2e96fbb6d8ed7f33d7d9c60974e0c9ce12365fcdb", "0f37d33dfb68604e965682ce387fe6d62e655428f7cec5e7209a6670b050873c", "0a544938fc1d7640bd6e3e55b7fa4b115081b7c8a91b8c227a06c417a395daad"), ("1eafa8c5830e2e2eae6b76ea526648b7938399d49bf032c7c29cfcb3448ae243", "0362fb53d47c0ec559fb07ea4a688241cb5e609c3e2d7ed089c3b6db27179930", "1216cc740d44c60d14934696b690f93d8ba5e23260debdb592dca4d27b7c7ca1", "1eb4bc52f907a38516bb7f15e22604a49649d4dfb6bcb8a501a3cf6e59acde07"), ("1b79c69aa1f4bd90a204ed9d4344d848eaf2102ca224a10334e323f31d6101e2", "0bef7abfc9aa466542e55942bf03cc9d706e1523d13b2faea19743608b36a238", "242d892ee950b36dc8fa0a982f4a0099818e3c9f3c33fe9ad6bd0261b980559f", "05b348d738487e91a59ad1e06e633150c0852a1593c522bf0db21ce200153420"), ("1f15268315d1444af19ea824330307bd05a5f5b5284951732aa18f0bfd149ac3", "2b8e3b150bde31c0327eeda29b03dbbd0aaf7b55509fa81c052d1ca124542ab8", "247a42f7d32b83079b09799495920c051a883c29bf71d5e2d4bf8869731e7eb4", "1a640e40fa1cd19f305a9ea42b913f8177cccafaa3bf9ae465a29a4577fe98b5"), ("01c2637ad9ebb6e75b4da83bb0178c1a5d444fc1599a6c3178af961ead30c424", "06374099f3476bcfe46c28b1395b108a6a44f5a6b0475dd159714169b406a9a4", "27c6ad711d878d48e23d42ce6ac672b69ed75bd09ecc4b4965817f3b888e46c3", "0f1242810096cf4e28daf9b0fdf25879d202c2c13250d59deb6985ec046ffd4f"), ("0ef4a766e3f07a46cabc8f367dcc7dd825cd0ffa9f003868692cd92fd4b5c5bf", "08da2541092cd4f89fade07c69ee78626ab1370d3990c3a1cc5a56ccb8ecfa8a", "079b94d519372d5edf0e5e188536158c04c34bb914950ee5e98fa9171260a6e2", "02d1dfcea2daf5f03d3bcfd1927b83b9198cd38ab46019dd6ecf527e5015ac00"), ("13244df2e4adc2ef60bb8fbdd417e479fc6bf2c04a35d4210f0bfa5481e123cc", "16f96ace52a3649da8940d884f787675d22785903719fee156f83712a4e7c380", "0d7de56cf49dd7be85c7879d90697d61c2dcc37841f2b5c49912c0f1e6b60e32", "1099b3acff089a5449e4008f1be144014ff5c693cc3eb86297b550e4e8c2a41d"), ("0c2b2a7e122bcc0ee2230cdb49f6e742ca9dc1032e5b548a6418a52299a9e6a9", "1c29d53d8921c5065a1c38ce22d1265d8b0a6b0d8fc0b12d997df14f13363cef", "036d3369c70b3d822fddb36cd4b7bec4f7f7d73a17fcfe6da00108d9d765b1cb", "10375c00844275c1380dfb0fe87aa2cfdf548d8eba798f543596c36959ae7a3b"), ("2cca2c0e2cef4c31a5ee3e84662fba6546f9e579f024b834fc8049a00de19b43", "25b6651250dacf07f2d97baa2d40445949fb9aca32ed3019c2baf7f5c6ed3016", "180931d840658d537c1de9d11f01d57b2faca16f45df8e253e0af2f0cf6d9729", "0fcff2c850d02d817c9294bce3a7b2b3ab0e7acab35c451119f8b2f1e7603036"), ("2274608168bbc137a0474709068f6209419943ea3d9d43f922c92a64ac6aed03", "1351442d0e9da9bcee0426744194c3fa23d84551324a64ab20f5e7ae6d434772", "2c6060d2c98d0661b4a96a73f9b96f700b7df7bbe71431c589643402b7367b9a", "023454aacaa9c3b6edc72964fc2416c1ed0be1853a8aa8cbcb728ddf57d253e5"), ("0dbc08bf950cfe138b7577f2e4661dd148a81d73f79178f6bf22b384628123fd", "24caff50bcbed6e93f81031b7abb0b5017d7a81b7c080b0c804a0967e5edfe44", "1c5d831938dbb5cd58e5bac05f96bc82f891f7aabe3b78f25b17e892b39f5ae1", "2909768248037474f2b8ce6650836f69240056d074e58c9f555ad850b589c9a9"), ("1fb6aa7bc50a63cf8e5b092e6d8edd67ef71b19a4dbf0ee6f3c864521d01650c", "025bb81e0cd16f61f3b8df60579e4a29f4dbb9524a022ea3421127ade5590cd1", "27b65f1c83047d093a5120df0cb5aa2877b4d402e077105905ac4e71aef7ee2f", "00f84d98a14c1f237c1b11866688e71e4b94271366b5e42043a2f9b8770b558f"), ("06142abb9bc75d31386bdc5b067eb9dd99f70ddbe0a32db58461ea11bc9c9aff", "24468af4177cb4ab40fcf7662666236f578eed27116f9eb41131bce14c9217b1", "01be38bd82f320f608f40e6756b382f07f96add371b03badae76b5738740c840", "19cc500c05dbc7b37867de08f7a027ffaeebb55f5c8296242c0e01d43ee370a9"), ("0ca112650fbd459dc030bfdcd5ba887e0556a5e2f159a6b649e194aaead9cb65", "2f64a04a040b9054575b6437b44788044d583e6ba4a90989a532679f328ae0eb", "1293494878cda279635a4da001227719516312b16a0ae54b83d2ce3d5b32f8e6", "10b025677a487ecbc013de2b6bd739adea6a274019fb437abd911f1f1489108e"), ("19fac3357988038b217930e36e54989edd7948ff27b1a09c646473710f2a304a", "1b22639f63c9bb14965473efe5b959f28dd340d4d13f65b998e54af41d1c58ba", "139c52018c5cda33abbfc24ffd3b35f6b1bca4cb6045b9c9fa6796025559a816", "1a607fa32bdba3da5d0d4a21cc71980500bc891125546c97bd7ca47047d90c99"), ("0cd75086cda535cc117c3fc20767474bd6c323f9ff10c52a46871ee205e86e95", "28c411b2cd00706430515a394f92ebd280d85a383692f059c3f0754c6168f16a", "2103d58a6c25fa9a4d0bd93c748fcfe56a918a56a51ebf8b519c5e269273f5b6", "06f953378d817ceec75178e306ccc04547cbb65354504c4e9ee209c294be2010"), ("120269966ff0920e4e97e5f5c0b9c884a95f4ff5c56f4147a75a9bb5ca11239c", "22061640c5567ff464e924e4f64a03e5bd5ed028580f74ac0e72b2da6418052f", "0a9b8a86e387377f5a0ba0888fc014f21bab394f857aa174939e6cf62b7dd9c2", "07cc4ef56d6ca417f117efeef1991ec6a4282bf4670e5279dfa32876c090caf8"), ("1f93dfa5b97c6cf86f580d39327f17a00d1eee014f76619419270599987448cc", "1e4000262f968e24585edec0f4d17a7067501987d36f63dde9bc931969317189", "28b067698637f78b78df8a967353c992343ac38def6deb1dbb71df6544a3c515", "12a2f324ee6d9489e73eb18e562c98eaf5a1bcf6840c38160abc4e4bfe4be767"), ("2818291a1f7ab60e42b1a9d405c4eb256be6838048ea243855e341deb7a8b0fb", "10f01fed218c69ad48c53e9c1f330be65d5346b792ca305c19f615eae0391973", "1fcbd515a1b028d6a022dfb5bd63f66037bf97c7658264d199b7ba72d98d2132", "1d045e0245b3a19047ab2c88a370edc35a107ac5579a63348c4fae918c17b9e9"), ("1769706f195107ecaef0e96e5a19e917bbadd58b2f982158295f85ba0f77a5fc", "019527ad598098607456eea450ca99bdc64c8eb5706f86e54a333a6242ce7640", "2747e096a8b2c8e92c35ea512cc1ede5bded78c6f3ff3df2a9fa3150c82bd618", "1a16e19ff06d76a347dde7c9facb1be133b3a4beafc81ccd7b0559b0177fb100"), ("2c7caeb1783b6c1ee5cf3109021fe60210d861b37ad72622e5e2809002d637a0", "2ba3bd2b75ff549805bd760f0052b161dbb3032b0915e2116717d6a54aa093ee", "1257c3a47951eb3b3870139fcd73329dc28725916b23fd6a9f1ac334417b0235", "1741955cfebbb82620f10daddc23ba3d152b964ed8445f46579ba7a4b7375b51"), ("2b6fcb5d799a8e74372d7d40ce0366141c5f873be19efc16335f49a1821ce451", "2454e4b70fa5b8adf28036856c3fad778a826bfe829de76347d8cb4a2d2a788b", "294636c9dcdef6210b06e2053ab3732298ac936f9787197ccc74d4d6578f707c", "0815d82523a5abc53ee5b67d520d64f18775def24c75184d84dfed7c351716bb"), ("01fc50d9a324e92c17dfecfa2a8317971915366b07717b3a118663c56b1c5819", "16df92405d9ed888d4eaa105e5a339536edc06667036f267cbf994c6a2d10dc1", "20fa327fbf3f581f0ef9f3cd926378d468d9b3e37c387985ba583541462840f2", "1abbcf1c3d71446bf0578423a16ea3201167845fb67535f573040e1b6155e93e"), ("16059a880e89e8fc135ff1d98ebe094f98586409326d3a68132230295223bfed", "0f5ed805d38e80788f4f7227537a4b37181f61ba5c42336582a40dd41fc443ea", "298dae5dea4842f3287e92e29e920861e08aebe8418a6a77cfaac191b8d4074e", "20ce5803ca03bb1284658280defa18b70c39ffe427cffcc9225425aea4f3ca33"), ("271b0ef9646e7adaec4d5e7ccdef857f0dea0af920e4155e44f5c3e49b2c3ffc", "066913c7144fcc6ae5f7d349464aa600104563820f085c03fc289bd9b084d1e1", "254ce754df08f4e03cc1c3ac406fdb527508ffd14358f6f1cb947f7b3ac981fe", "246a75e8d7dfc050c1eeb3c4aaa32c764caf4c0dbbc422377206b4dca2791a61"), ("25df51aefd6baa4301790818bff67960e6834fcfecd47b2f13f4bc8d35272fe9", "26109c318f1ed933df1e9d90d87cc6eb3b68abba79c3890c4aed607627e49667", "1e3dcb568fbe734cf61f7b0eea329b674ef54fc4f26ddaad77e7ea4e6aaba7af", "03041e3c40148826986bdb8b51894b6de19a84e6983bb6f3b6ca13f0a0ea07fb"), ("23d8ebfcff26f0b82f0213cbd11ab2e105825a02c8cc83961f1409b2b7a14862", "057ea9719ec3353ae99497c0694d3c9d585a8e81084d6c0a372a53bf1819c8db", "2f7dc2b3e02f9b43ae2a54016b071a468d3ad06ff8d710ae7a6af4e04d1b4a15", "2d25b464da1e803deb3a646e120f60f392c71b6f2c450fc9cc8613d4ac7b1bca"), ("305a4416bbe263ed7f6fbd01df20aaf4fa5236144acb41f60df50a1e1806ae53", "1f3e88c30602299d0224d19a99cf1d298849546c5c6486d8f3fed5767581500a", "001312d51c52d4869ff0eceb14a3527f847a36a0605d12f125be5cd2b2717976", "039d4a010a51e9ca5912fe1e1f89c58bed7eadbf8eef8a15224ff7d54b40defb"), ("13b09bc51ffd6527cd4bd024cceca4d13a4a52d520f45f528f7c574a16dc14f2", "16fa215224815d03b8b448b13bd1728dcaec129dc21e428c022f296d5b7748fe", "1b7e285aee3c992b3b236f252002b011bc3963551dbc65889713a3fea67eae8b", "1e9172876f49583775c0593659254ef0c69fcbbb85f4102ac704cf0c964d2c1c"), ("2538da2ba7800d52787e2048aa7a22a7d10cfc99fafcd719840356b9b5e8f21b", "1d41b22678aaa10f1ddd117c144155f4ee898580772be24633c31584d5dd8e73", "2a1d506695f0c3c69e68176b724ab61b4cf40b5361efe4e07ec173bfde441bae", "04abd279259a98007f9a9e32e68e6f94ad7618e201ff7a6509a9d3828b803ed1"), ("24ddaeaf188297057a0b7c0aa5b471e2fa0d535338e74fbd9d77bcf59c943040", "178a0da650e5ba2197b2bcc0d9f23ad54555559688e47eebbeb1d5faa81472b4", "0cd026a3cfd0659eb6087ef0751a87a72ee5f455dcf52790b7dbfeaee9b5a9d6", "25005547d624e1c27245f981aceced05d4a037c8923362a4ec5fa37c395b030e"), ("220a5920cae2420e8e0756f03f5e7ceb65de777b62976753aa0970d7feb1987d", "08525ad31e62164aaeb2cfdab11aefa0168b113c53cab083369a2858e383a565", "1e53a3b278366d1d727672dcdb6e920a359b86220459287291aa38761bcd1b7f", "28d945bc5bee40f3ccbe00ece75ff39b6004076e645a25c382719853e848e1cf"), ("2fc740983a5cbcaa576f9c78ea5f044a59b30e2d0e8e19bedccc4efbaa1f9dee", "06d09a0cb501e83e18ff6cfe001ae95bccd752dabbcc9c0fef203415d7ff144b", "27f6203869a3d088fee5972237793502f3cd074e904c783402bfc6e2196a319f", "289a6f3a8d0b3be864d26ca0f743ece1d83bdcb27829275fa61cf38943b0bfde"), ("096419def31497c787dab7f706198ba88ae622eabc89b9961a1a27e4a68c987e", "2ef34e50526bb2ea9d335ffcd177a7466f99ca45d01f370506f41f60210f39a6", "1fb765bb68ceb9f28ebf7a7c38c3cd071587aee5a1aade06e3d7e82381e6ce68", "085edba8f51d091c9e051d5525ebe7f4b787464afa3450c90ba30949aa444c33"), ("2451d9b51bb9b71c9fc0368bd7002095c0c207a78d156580bef1a69d041fa022", "176d72bc14668d36bcc2ae066fb503963de18a3ea55b4527108370ce5221829c", "2abbe011155ca12d9234a1c4e9f81b3ab6a821ae1b161dc360619d890e6067d1", "02411aeb8c684ccbbea982731546a44b014f0d2fc2adfd16b18434906d322346"), ("00a40872cd13ed60302a22c1f1290a778aa393cbdee3d258a962a2458ed52a43", "09528986f865fef71bf2f20d392e28c0dee6fa01b4ec45445932d85c6087031a", "236af5c84154e84748e77094737476347b882eb6cb9cf38a00854d48cf2a727f", "1a9ffc8183fcfed0ec65d5afaa6a9c7e6049cf49a5c05048b5bf2fc18d861644"), ("279bc200090dc9683e5c381ef354850d7e132156d3f35f3dfa218484615ae1c9", "2c8d21425a7c7487a8f8a8132381c48d65e5bce2683cd1d1b82885eca877bb30", "1d4aa46222afac05f95e4f103ebf1b090cd6d58ca60496af55452ba6be4b740b", "0dad9ca686be9757d837eb207ec2a0372bbbb8935b763dd9f9acbdb0fa06e42d"), ("124165cfe8e81f98fdef27bfa603651bce1042781084c14d03629a92c52757a4", "1ca78a9cb39ed324e4dac7d165f7c0c3ec356a31c8ea41cfe6734a73f0dfcae7", "2cfea0409943f46d7dd7a8f95a6c6279c352c8069cf7580db5e6afac1bdcbb0f", "23a38ef55be912bfb2213b49d5e7d0127e1130659bbe63c8cc71c58e60e8061e"), ("110c1493d29a0acbe3575fe80ec9e9054f60ad1244162732f8c965aa4f39354e", "1d97bd13945a61f6f20377ac0b841f6cac6f4d18d37e5c0e212793e96431de05", "229575f8d19241b32e722e3d7449f9774995c4e68b05b777d442ac2b99623e95", "012ea09bc69284526d6060f88653c8e756d0c584c550dddf48fde79b739e36f3"), ("0191c3b329800eb886e082fdd8e2d99f1c04b2f9a50cbc8c6d4960b07d78622e", "2c442cee0883f5ecb325638fba15ce0cbb6227d0c97a2f50485204acc8e8b1ea", "2dc29d536ebd186355de133f85997e6f07750882c5158e929bc8e223057b1b65", "0e0861213a608568fcd2e1a1d9515d4147bcfbcbcddc92c8de418e3f709aa8d4"), ("2282347bdd3fba47a70634549a7eb3e284405d598436ebd3ead98d089ae2cac4", "0ff7c7acba2a3c5deed0837c1ef5c8ee70d245373e20ce8d3fe04227cd222ed4", "167bb4c73c7f03453eb5856c16647aa11ea4774fd77d0ebf0bfb6d18ac0fa2c2", "0cb81724559e066eecce95608eeacf4b5f82318a0a31dfe36d790d75d66c703d"), ("16590427e47dfc7b795ff629d6c7af493b3ceff1de0d3dcd683a18b59df399c7", "03c5006c41ff7cb2f55649c6a415d2040516297e6544044592e6b8b690b628a6", "20c5804a6440a8d3d652e8e750a89f0cfe9ea9a2876339427b1134644bfeffcc", "010e6e70d77f7a383e3f087d7542e57672c1a032a08c9636309415d28f0d43b5"), ("13a9089571865932128d35e35cbb4330d14e61807913db09306761b41a3f7e52", "068e8bc5c3f02e9645430c953c8998ba28c07c2bb2cde901ebe3a4d67ce5409d", "10ba075b123e24863f4e9a594685c7f3dc12bcc1278ad6c7329caee860fb386e", "1a1e59eb406a012706ffcc16ff52dd7e722040d95931b0bf4acc234d2560ff09"), ("2819421d2b02fda29b77e226266fc73cf21f2ff76010530e9fcee7ab82782e2a", "21ad3adf9b08f23fe14389c72f645a1ec8784fe1c0c403ad5510ea32fe3af93e", "1abddd2346ac5016be8070edd8dfd17c0aa37056d34ab45b734f92260941d059", "2ff98257926b698e29401c2ac883f3ef7be7598bd7b8cd94087ab411c7b0883f"), ("0e6577e0dda3938c8aad0aed9a11755a28875eed37337081e7cb2a29f088e5cf", "2e88458ec8ed1fc6eae8cb6dce841de555d3235726ee2959bcbdf212b862dc9b", "1b686c53c6126053ddfa90a19728294abeac9fd74c4ab695c1ad0831d48b05e4", "208ef232a21aa8c37a843fde46edb0d39b13e75423e85c52f2fc210c5affc380"), ("292102e2effe78a3f4c2469c4d2eb96a4d7b675e22fe58dcb3530c78be60ad92", "19459cb0e94d375285275980a09443f014439806b59ccf64474bd531217c2d5c", "299f820f9fa1fb94625b02ce1380bdcb564943b32a2504d3a68747a933da1357", "08d7903d46861713ab6a8c5f8251dc8db130fbf29213cc7ac38eeace48931a42"), ("15cf8cd02a8c7622d2dc9e67a797891ee9848224ca38e0542a59827f4ed54053", "283132c87a76f648a41ed06d5f8b574f0f26807d509158932b60233e7d85675b", "0a6e9e084dab5e2a4113ec6e1df00b79ece4ee870db74961443d76bdbc9b9fa9", "2ca9f2dd338642f87a36ff5e7b3fd14e8406d0d151a5ae2be52b9bc34cce69c4"), ("216f36072e570b444af1c419c08b52beea945a2c8c762e10adcb63b1038a94df", "0a39c3fe48a98faf94a69e85a2647690136f13e45682f4dfa3bab3c2f411fc6c", "1d092cd6dda30efc6ce89249eb0a97e345126ce0ef774be4358b547466e52622", "1ad063776223db6eb8bbb13dc3fcf45aec7392be10aa895f8a4075fa5a104e79"), ("09d9c64d362af789701ca315d2de0506cef17c22266625ffaee26c9075e254d5", "07bd7526fac4be1377f911ccef222e47d6af75fa857e58a3b49b40ee023ef00d", "301e13112844ff73241eef1cb1de4b6b5114318fe679d92f1b56d6479b68f22e", "20da14f7d864ffbd68e77f03c9493813ee652e5cdd1a87927cb51f53485658d3"), ("0a547c1ed51a23eb7d1db18480e58057466bb415223bd4b2c2ac1890f78e5e85", "2070b13502f6a11c57a4b80d534f0a2e82c95774ca6103f12ef377c713c46a35", "20bca2f9b12bdc92d9ce5cc0ea42816c8a7b18834d5084ab50a8842f4f429b5c", "08d5ca7cd12b3be5260fad12b2e7492da088834673e97eba68f5a227fb020c54"), ("194c6a137fdbec23879d8cf9014e0aee55b8d3d95c3c3d05f5f20ea31d5833ae", "1e048173695642d5837a3a1dd88240b074e1c1a2e28fbd330bcb7259a85da30a", "1f75023ec4a600273a66dc1d4f797c9e5893ae1bf63048523b2d611701cc66eb", "125f3033afd6c4cfae3414391f106b9cca9f6005a4e61284134f3b7c2e879c5f"), ("041faa86b237a671354a2a8ff1e9db38d51288e5b3be525c877b6e8590b79551", "2b904f6746598cde9e7228deaaaae4f6b1e2e7d30816f4a7021e8863d12d7f92", "1b1871d247b46b1170beeb68e12bc1e4872ea514a31e43732dff13724c06684e", "10256f7b6b2331cd64fecdda079263c3b89ef53e90b8c828a9e7fe43fb43b991"), ("1480415663f1568798058a9cd44d229f77190d2b9de58c9dc347e29b7f7f9f0d", "02ca721b0c307f934ffd3cd8c04496fcdbbf4373770fdb4be777442e02651a52", "2e0fa500a5e96f5715698c2e5392a00be760a3be272f7604d448836b878e8075", "15e6ea1fb328a8b424eaa7aa5cffe004f1753d0c6e5b9938908d18f466e28471"), ("2ee448aefea48c18b62e31ed477fbb9393bb7933102e23a8e14a060e952cebae", "1726edc0b09d51b8fd6d4b05623b4f2c923194fd04944df8ea37540aecac9f8a", "0cd390288c25bda970a7439c03009b50c92668b52fe8d0ec7016559a1570e171", "2f94a45bd680a9e29ea024e72a50170bf7c9c59d1ce5fd2450154996e30c75a2"), ("0172c4b8652c106d98c6ca070a829be9b5674dadac150f42b6ec2bfc1a2048fd", "24aa2c719c727d69d2e2a240cf8fdcd6893d8c0bb1072fbc3199fadbd8d33a78", "0edbc0e802eccd3ab8423202b62facf9044dec04992de52373284b6285814d60", "1dc046d54eabb96bc2975081dc1dffdea9351e15f134160c88744cbf34659b47"), ("115ec10285da0f3c85fc8c64de01e2932e0b91a3006574f5ee65c80b13d55ed4", "25717f4976ee5f63932b0ad3d555d402c8d56ecebb9dd75d500840ff14a980d0", "2d3aae51ae1e308fedc2c22ba353628f4766eb2088f09e37e01444750481b57c", "058dca91f871838003ec4a6d55fb5b8f827004887fb61469897e5d79ce68240a"), ("29c2dc677ba95b83ad1f685ac217d0d6925a4dd1e23c4400ce4d343ff7361e20", "1ad4f024031ebd88430110778a54d91a76e7e327dc0b748e93684e1a6c156a03", "09afd77dbd87dbacb9d2b010b70821615d474d32d6fee3fa36255b4a4cc343f2", "2c6af5f6d73861c96445240019fa6fce69a4bff726140ccdd4534dc3b6c4faf8"), ("256707667aa3e6d975732ee39e2aaf50a581743928da7fedea6264195e1f4759", "036298295186a61d3fba9bcdca876d3a50cadff77b95a6ab94c5c4039556b774", "16c3752f8d4dff0d11c54603115d34f84260f97936ba80244422fc0870723355", "0d24360887bc136979868d22d0c7bad57b8c37f47eef2d50942a71022c222c27"), ("1d3e37a4f46c44f8e5dd3b448d8223eae118f2ea879a17738daf92dc8fd081d5", "15b4bdef5e2acd7d7af3c135afb08b0afad32c3401799683029df2b3183c0b10", "0bfb564a7d2a2c1fd6c0453c7fddc054b74b3fd872f4a6e5cc1e95d4da85967d", "2b2b2ccaeb34195fbd174936e13a423a354fda3642615ba10dee94117e85749e"), ("2108b96df0f1ed4f91bcb9c7ab1f255976a03c999b52b1d5cc98a4adc5836edc", "2138f630f6043ec6efbc8b3ea9aea101acc66c1394975a834d1ec2d87ea7e91e", "2dfcf00450f465d29e7dbce84d36b000175e971dad43c6a55ec702a9956a9c39", "07975939eb2cdc6bb3748c0b11e54fc4360be394e5572d6e4a0aa19e47668177"), ("1a58057ec7ee4f8e948903093d173b2814305fd3bfead95726e556b00528fa2a", "089ad53354f1ecc66ce6430dfb0d5efefb73623f29d61176c4f8f34e92a2c928", "20150f3981d6bcf616ea9213b8edae1fee89448485c64ee5d82baf63e034a004", "0df5f836696a884a58cc601e2f410d938b9379612345558d650c2a5f2eaa4e8a"), ("1143d3269119af409c54e53799c2af6a3da137582ffc958c8f3fb25d3f114bcd", "110bfc24cca4c4371ff9a29573a521f8916fec5ede1c103d0c1dee547acfbad0", "01c8dd9aed9f2c74f0c21e27c9a483845e1b3e9751fd678ee083f3005fe6ddc9", "0280077518e085e509c6001cf96de5eedda271a3c7b0e80d2207f6525e5db0f5"), ("03ae43b929b0442f8da0e4fe2adf33b202b345107aed2591b8f1c7eb1e9c4d61", "17edefa1f9c66fbcaf95d528e4c272b015ccbbcb07e67698fe2257c79763656a", "1f826abb955c5693ed6097951f7abc545124da916aaf3e7b518531181377b5ea", "0b25698ce90d4888a211073a7b84bad2e44c44c2db2b675bd893377b9b56383b"), ("220db616cbeef157523da1c1982a339de09d2a98224eebdf14397793039da2e6", "0ec8e336866f4286b794c6a1669cfb9b67c6b2b975ac5efda7efab67e4aa2f27", "155d179dc8d70418069d37049786dd10a28d7de96a3c2c1826e0fdf65babc1be", "05ae152c07e8b8347cc43638bdea2e40ea69bdba6c372fe4c7af76ec8cafc8c2"), ("131d0577f3b9173257849c14e1b1712a0a6f40adb7a8fb89ede2d8c95df98495", "0f4721553a6733c6e37ddeeaeb92a527ea0554f60d1b7aa914f2c1456cfab7f3", "0c67a5487e1505eb9ebd56527bc769dfa17f71172e88309a4a3b30a80650cec7", "13cb8bebd159e4774bc799cf65577d901c9ac33b212325c66a27b86355b61040"), ("223d966889cb26831627ce619ec103a13e1a5851adaeefafbbfbea2d61c974d7", "2810b39c414e3db770b1f8eda9eeed6db376c868c375bb01717f0deb1ea54f1c", "1aed50d83626c1533dd7fcc30c91496d36611886af3ae218ae536ea2b9d9a046", "1c083c85a821df548a38aa0aaaaf65868f046b2be9847b0f6177055c55a2f070"), ("14a2d2571ea1c21d20fae9dc2e507c442a83ada1a1adbec8bda3bc6b5e4c7303", "229637d996d3c9923997048e964a9e6d97bcc477c9c73d601eb45155fc07668a", "087efa4fad78ec055f37335b19516dd9ada4276c729b04354befc905f2fce795", "0fe6bd90e2b8a8f27ebf8738fa22bd48ea91d50e6a3973ba8f5830dc772324ce"), ("2d5d3fb3f8a470ed6c8f99c723672849b2170a766bfcd96cd173c4253bb6e7ca", "2f29a6a24d4482168cd2a12e33874c907b3ea2e518e67685c97e1c1ae6975042", "0fe89b1a46c1957c3177189dcc6541ad92a9612fe7398d95dd935d47aed03e39", "21cf6e268d483ed612d284a27b0a54bf5727e4d83ea57f9e189d470872400772"), ("1f4cd6d6987e21e2ddf992039ff952c1e015ca4dd41399807a94274c6ed9d3fc", "2200c599946db3ce1bb4e4081dd48759f64318934acbfdce13b5fae4ad3d4ad2", "037b99ad9d2a9f8667bbda55edd9610395ec06bc87afe350d38b548f07ed3944", "1f446a9e833f456037cef170d1c2f947d19dd77cfd1686c6f96d16f3996e6406"), ("11178567954a4cc4c51bfdb2aa10c40e847621a656d34746ef09d7e5314b5139", "042a902bf5779177a309ea84e7ed791198fc5a207451226b4feb29f7278a0ed4", "1d2af5bf4c32fbb9862a6dcf86b1060d5e76a8a2fffe8b5e1297f4f459fbe2cd", "0d420cf6b449421c1610e33fefd1da8c9a321fcb5ca9f0652e72c558e49ff6b5"), ("1724c8b7747ff4f1daff3f6cc0b1b825b78b7fab024cfdaf58c3ace054b3c84b", "1288ab4c5789f3282ac02c3e29029ea9abb011c3c6c9e954870d6ef28b92bcf0", "27cf6c6f24159dffce55faae884f8220cfefdd203a6510dcb112cb7cb881699d", "2e81e07edd88362e1b7b689e271702e4f840140acb8ecdcdfe95924040ff192f"), ("16dafa830335b436e5e113ee0c7388155064b6364fe2b2c7c669739173c134e5", "2794ab76a19c60422e8cac99ab4e48f2cf14f457e28cfa35180cb017d9fc7080", "27abdc5b3f2293b6e94d4ed6b3139420cec08285b1f670c4cb6a3cfb34e83645", "293647419be504be8410cb1a623ace83b6864be6b7f5030e6e07c7bcf53f424d"), ("2743879a6a6e440f083fdb317b0736a2fffadabd9429e665c132da09a90aa2cf", "23992eacc9b79e0f82fe273b41c2c39c6146640d6663f57de781837587c93463", "05e267ee0f9b5b1f5743dc79d143efc2e93fc628065267d0314e4377f6a00d9e", "043825068616af8422887bcff896bbde848b5a17ad64f019b8f34e382dd0a972"), ("0e9db6eee4fe7f9b23be07a9ed31e6b179520bfb42ba0ccd3be44887d95c5b31", "20d143b4f9a063d0f35b2a4a20989c55a8696d7a55b2e3f20362a5063e566e36", "282186ab8cc8997c97e718b588d8689199ded33b7b31e8b35ede67efd17ec777", "1c2094abd387ed72eede1885efc8e99a0ac6f8488f6a2a9b847f5a7808f4e593"), ("259f6d2b19cc610f15f89aabadeb2a7b336bf1bddf524f252bc51c2788931059", "0dd9167e1df3e01043c5fafc6ee43dff4ed846ad2d0d0a2ea1a090edd76cd7e5", "105385e4dd8b8a9de769bb57b4242f6664bde8c64b58dfbef6fd9fedbe28e77d", "0f6617977ab4bd0fea10cb80ccf047b79b6514bc921fa958573ae5d6aea0ef7c"), ("0cd814f4476223f1a71ffd87e71d42e6e6a3f161867ce24eb8c5500ba0dc4444", "1fa1ab31816c6770db5f6341736cf58d974232a69ae694ea25a322fc97507c17", "0744201dc58f419973d44b6c2ddad69974564538606cf095b7a426931275095e", "2b1a7256ac66ff1fcbcf02833ab23bb8cd99920fd20c92209706cc218faae3ab"), ("23f80b624a2cc630503e6e1961997a748836afd16a0681d047d4f9299dfd1b6d", "1f9c59ab40a914c7a0c3bfe59462b211fd1f865d59ba21881bdf1feb9edb96f8", "133190b08f2dee2a7bdd9c66f923bccf6a1bf5441853ba7188cb2e2f54ca4665", "002088f02cc318cfb9e22fc1408a6804c6c9759e7aa0e78b19861bd40d0b4000"), ("08896ef1185d534c36376be39a865dfc8efa5c2f1da0fc05d4827041e92172c1", "126a24c1598cb95228e39188a026ace2af30ec2152b4ca3594a6abfa55b59e3c", "18824a54259f8545d4e2ee5f3614ba9485edac47366eccdb3f2989debb42af5e", "0e102b4be8c83c98bcba213c8d3925eec89f0c214f7d352487e3aa03c3e629c7"), ("108722b3be74d5ce44b8a68dfc95b1740eb977a61b3cbc161b4d66084d4bdd22", "163cacaf5e0dc0ab9dcb91e975bc1e181d3da0bb748df00cfbb300e4100071b4", "1a3ad8f159e60c9477f7681bdce8973259a76320a930b5e5bf0aafa94b5c6422", "17f408e1fb483c84f5d61b4e5297ea549ed047ed38d86648322e22bbaa36158c"), ("273e1b2e6edca2e7aac1c6a9d6585bb172b9a6bbb3298064338055b57f2ef40d", "2ba7c0c003326ee0875a9479cf9f933569cc34d98bab504487db38dc028feda1", "10f44377a4c324923a98bd6bb08e3c6882e09edd5fe26c18f242208a388bfec8", "0aa55f85d8802188d3b33cd24182f0ddf3fbcab3a3dac009f7d132e59549bafd"), ("2d89ddbc75728223519054924f414095eaa398cdcb8282287d06660959c9c72f", "10eb0d1a07682d0709b7b73e4cd98484da30a83790e639022f12975d108f5e32", "055ff5e4da1fedc8302d91429f546d21d4e668be6c3404bbe8795a572c66726b", "17db300f35cea269972f808d75154320e40f3d391cefb83949fa16a7782688b3"), ("2f4f217ef9d5652db425c9e2941673275f1283aa4402642f3788c7ca006dc9a9", "0ecd3e23fe8936bad75a7ac09b1cf2f259310154685b08ec9afaaa4a536bd3bd", "01ce9e04f4928b16385e231046ecd21a2c7e52e457669650011e183de8f2970f", "1716f2de289c4351d438737815b3a97a3cc83117bde0c51c032c7ce8c6222bd1"), ("0e5f352bc7fa7bc862d78aa6c949861fdaac02ae36d1d5962e608f5d3e51f41a", "0f9e642b71e2add2402c5b954f87113de2c0f0e464fc1ab2016ea92b1e019bc6", "2283e6a1eb164f19acb46b3bf29ebdd360d3591a5dc0dc8bb4b9e0070e0850ac", "2436161b661c504f94a529b2c9c4143203956e0be5e4af62bdd9eb6878d35ca9"), ("0bc8fed63156cdeb41148c4fe8e4f0bdce48688d7c97d68cd7390c833174f056", "244e90166a0f5739c25844e83a9f1e65098e6ee44287bc0b186274485382cbaa", "0a88c757408800a5b9970901538cbea737d24d02771124e543f9b7320c19948b", "07babd8ea1286134c0e58e1651e3af94d8ed74ca92064931d074767102559b40"), ("0e8b3b65066c809e0b2a9c5e89c76dfd6ee70797ec1a7d6b3380f7910b813c93", "1ec4a3259295c283e778d1b6a340bf0edb22f5c5cbb10038bf80b90212e9efc1", "27d6bb0d78a24cc20fee9384874bd71a961a14e37872375f5c3d06f59aaedf2d", "02460b0bea496faf32526b734daf8b085b0595c7b36d5b5de7f1f1bc902d0066"), ("091a1b54cf1e981cde52b40975c2dd8df34150adb968214da0edd77c6398934d", "17c822c3b57f46292d48e16518c8b3a0a0265e162efd21bd7dcdf09ac6c010fa", "1ad3637209548ec9c55f77be5b9360af0586a61a4f68cfa6d2fbc5d7637007c8", "15085471ca3f002bb0cbad5977d815a5f94f8ad6e636ac4fb1bf512650e4e631"), ("0752f757295e91d0d0e5468456e64c36641a3be5bf334c5c7f6052f3fb9e7660", "2a2d4a5b7a678fc47d8bde3a6c99d6cff936ff7e87dcaa55bdd28f82c65a4b1b", "1c14e2b38a5775a101a0ffe8c9377c696c22f8b96f9a0bad4085470a9577d6e2", "030b01776b377ee877ed95604430d80460de5b2791c2ca51d477f1fc5e0b3a1a"), ("0be5d931d90b443bb00fd2b5ea58fc78fb00891657310233b8a9f76e89f6286d", "1580ff44a3cd1cd1d5008e167703f18ac211ee26b475cda724e279e77189eaef", "13b57ff96421c7777c12d16aa00c0b924dd456794099fab388c436455cd0d238", "10c0129ab9a3e81296b1bf5d254e47dae157c067fd80711b6ff749331981f049"), ("09e8a7c1cb769257e1fd16b0a82ac92090c464294203a7493c96b988643dbdf2", "21c45c1d2a2eb6a961690d8cec83a78372a9a25d9160dc38777a233d28aabc3f", "007439c2de50225ae8a12d592af3f32395d91e804b7cda928c4237c885456cd9", "1a363f045c7f45b1bb5bb545e7b06add2af65792d832e5e89d847bffdce06376"), ("176be204ca73962bfe707a10af946cb3442948b6480955c6dd2e3fd71157937a", "0b56d721ce4b6ca3928a2d8acde89332fc9e22299b5eb0b4989ce902bbee3a6c", "1ad8a49b39ceeab1fde13f810a681a2d0c26df300134e0d0c5ef42d2478cb580", "282927aac503f8d9a0453b78eb9faebf25fbb79391490b57c5a649c81220de44"), ("11ba6150bb56a5a2bd4b4765a65d086e4a5baa88f1972789617fde71be0729d5", "2480774bfbd1c918101cfc70aa42d8b2bebb271a1514063763e2a738286f59e7", "0eef30dd97a79af4a3618bdbd598815dbce02fe43c8d50d143f40f22cb87d714", "176e9e240b5acb08e49d8e5beeb582fe349c2890745effb54cd37517bcbba247"), ("19b8103ff25c631a903c83afd3b68928f26df72aa1ae4f37240b877798ef2bd6", "2a02a8c1b0683539563bf7f0f0bf240f9f8a4115516144940293f3ce13f34c2a", "19840afe12c6bf3e4ab66e4df2492bc0bc7472622a32d351305d5fdd47c5dbe6", "1b6de9f9ae54fdb5adf2c6a6a33267fcdcb278eda892b5d707b24b71c5bc0bb3"), ("25395064f11abfb760b7057ba427dfdf1ddd53fb6ccba3c01fbe06a4f833f9ef", "1490019f0c79f55b47d91f9b98a8ce8cae9ec745a0cb0a4bcf6c693833649627", "0019973270c061a958c176ca8da8c8372e84b8bde9302378f5e7654433f684c2", "0a6f2a7ada0e044a01ce34b79996b7aa14c563b0d043951c20d3ee5ae28cce9f"), ("1ed604111e4627a29e3afa42bb59fcdc47b877d8347ce25aa9e48bbaf3c7722c", "12d07833b0f9ac8b463a2d28deaf52e3b47167fafecf19673e5a0f16262754ea", "162fff890cc6e7aa220964f9bce7d675188923f9bce51df47b6bf78325bf909e", "2f512ebf42b56d65a8035b7488c0d159dd7a1dbaef464aa51b846f25da976ee7"), ("02a1844abdf6e86b37df14af9839a04d962f088e630abde65d57da28bb655715", "205d535cc89918dcbae8480c7a63682f0e14859576a32b1c7279baaaac4bea08", "28704d046a4991057dc44b72410a2950e05bfb51131759442f55898eefae8f8f", "2a6abb1df7ecc22eeb026a94f4b06601968855cef58c8335210441c4f31c2982"), ("19d3d2c3cab265393041231673a96e8c82306bb55b6fdf5a718640f30bf510f1", "270473a3e300986b69c4d92c719b5307dadde5cae77550a947ffe44e13b77718", "0194fcb4842cd0e2c4811648118aa1fd7156ef98b815e955d2f55931ed39b8f6", "1367d9648a80cce4b20c494698c6d068aee75c560bb40d0f16e544b37a995d6b"), ("0d3f48565d10c46a3022fa251bf3275c9bc726c9d8e8079e17905d1413b0d982", "1aa87c3caed79a6ab668b6856bb7db84cbbaea23e7ad6e9f0f4d33ab5d534457", "13f90ec7838acb5c4550a639385bb39c85861755f7c57c885982f68cc6f1007b", "0b3944c0423428e27175199b1b32623c62e3ffe8ed4ba8024a43f5bca21cceb6"), ("1d736db5ff997ab3795d1d59941cc022d80a73f7f8ec26f383265f5e8fdb7dfc", "1843c506711befec900a5c46f0dddc357197ec8e89504897e0accd2fa50aa4c8", "2c3988732bf0bc28d0826534cf66154312e7917ed342921a560c698ea1024ad9", "0b594a474969ac025abd4a3b21384e2e1e9461c16a0e055fe1c5ae4d674569f8"), ("110e5409af49203af870baeef33f4c144e6c950c5745014598245e5dea7b3b2a", "2f99d80262d17569ff43d2eecbe69934ce3c9e20c1d2c425b246ced217d95973", "1ed2119aaf168b6ef072329f726ded53f6930cffbe3781a986354554bed45d45", "2b146c9210b3503115ebc60caf0a8343237cb4790c2fb7a4cfe406fc8e78d7e3"), ("16b5a9a73bd223ab5be4960ef6e9bedd11c25654b386256028e3951a8d96e327", "288ce9aa53451248d4b1a3cedc69c68219ab175d56b0edf4a63d2d787894cc72", "2798043fcdcf9147efaa45b112807a751bef195b5f6368805ef34ec0d4699fa1", "02730323ef46734989f4214a76cfb2dfa0c55652d840b65eb0d31b3ec62610b2"), ("28d9aae30f0d3f1a603d5957b23a84924e3ab471e87e736187e325b95f6f1b89", "03873179c7344b5f02b474449e7d5ea15a2dba2b96e89960ea248f90e0e68422", "2e322226916d60b5e8c0435af43ab50e0f89a41c63ecfa97c4aea7364f02b46d", "166dc5b4d418a79de19423af708955330b89b6e49e3fac8d97d933166677c18c"), ("26b632bac1f7162b6d1f947cf756b6369a6b69a531b88bedcd381c06853c0328", "1a1a7d3de2b8a22a4cf4dfe69d93ddd6ecbff8de0e7fa1a5d46520724686db9e", "254d48b2367841147704ab2ba0c62b847095e994689a0192b0063f40bfca805d", "284984221162319ed4f611b7042ad44425a363b9a957ab33b318d84c67d77332"), ("2dc7b0309e24143608c52db55a5f8b67371bdc0a36056dc57a1c50e2d4bf4991", "0ae8967d2c9009f60d1b3e56eba24a4478524d9381bebd2f012f725849b427f0", "22ce456813970a532461854f3dd0e1364472123e8224680b88a50a17ac1a5d9a", "0d8a9c57535372484dbd5b1dfa0022240accb345fa1e87c1885414a3ac86b208"), ("1626e671237283bf9443388d716c5f20af50d0610131ae17adf6e620049b8322", "17196e8e53c61291c3596cdcae7b2f00b9c0e897cca5f39083e77bf8c5a39497", "281721d77984517237ab287dcf6f86f7b290be79434777dfcc304972eaa8be4f", "1a5c9fce37692ef9d17dcec68f009f9328bc3f01900a64b03376efb8fb1396c5"), ("2ad12353d8daf8a4c5b41cfa0f4e6be586459aa53163ee06b9fb3b2ad3800a4e", "134653451b5966ee080f88c99d9ec676bb25432d90109c3c848edac869c2c009", "2c8131c1b9c2673e58c965dbecf527e6b6c2c0d16d24a66df4307f74077ff47b", "298e36efe77ebb5c7c9fd17506007fb1efd69810fa0d6dd9b3247e22590dd8ac"), ("0d2e3510c1056e3c8b888f5e2eddd4dafe571bdaa77a80a735593175a241b33c", "125f3972467cba2ee061f2c4b87204d912a20f5691669d2ff84eef0f719aba4e", "2d39495f0bed6a1aa0ab8e3f7f2e4f187259309a16aaf7ddc031fb4575622ada", "1a31f2f0c21866a87b69442e783e2ea8c9e3845ffbacf0abceeb2e3b6597e932"), ("1da2b9e221a162b134e8953440f5fb7fb1a36deb8895e38ece08189951f615c5", "20942738ddf33bcdd874fe687913effb0b514db130aec12eceb883b0c75a8f27", "01294d2e67372329b97a51471fd4c7b2fa2dc187c045b46ac9fc4e0983a7c912", "1f8156d661d6dd4bee722c543f9b8827b775af36405502d06d02f11e5e5d2163"), ("11e9856878a3286b1bf54e124a36721304e5adc5ab42b1dbfb9f18cc9799fb0e", "1eb406a3e8155aa512a128e0563be1f2b2b4f7035eff25a9981c19c4728ac1d5", "2de3c6b41fe571fd42a20ea4ce551161a58711aeb689342d5be78ca73cb5d821", "04fc29bafb20c04a635606074ac8a0ed4d16229eff3a9bb4800dcfd97c029db5"), ("19b48cb3ad95685cc078d1616bac7888ef9cb87ab1da1dba501e5d4ce7d3abfd", "0a66a379015e470c1693314c9864ae479e08c245165482979f0621e9b37d794c", "2a01f16cfa3f0c1eae6785ee6969fa328385e5de1772d0fbbb9027baf3e23a9e", "05535a51e791713027d0c1e36d41e35a2283e36767e0e72ce6eac7f886165469"), ("2188a19408427fc2526a268c93a4cea721083f34d95f6b652963a42891912bc8", "2521d8ad6be1700cd33aae2d288783902bad98be4f27482a81a0457432fb8aef", "07cc440ef86f6061e1c9ab8c20d740023c23fe568903beca4fc46128fa7a752f", "09455e0b8cada1715eb2bddb4946a8e8fd7a0a4295611b04b150cca2c9d159b5"), ("1d0530cdf0d7aad7306406f3f33fc0705c3eba41b3df2c19c911b892a68f7efb", "2fc32f948cd30a119d9208c88ddc8a0a298a6875f48152c535c6c7c68b520af4", "2521a4c39fba6ca18cb5bba3901763fe294c26a63a84f0ad2c650ef9086c930d", "2e63cf82b46c2250c32f3e6843437f0acd13d61113f6ef625ba5be1787d2402c"), ("01745f6db32deb96d05a2b8fcebf7b16cb09405d90f84f292b43e82a37e9c868", "2b34802c3b3455c5d555c6362834450a2b83f6a9852d915f2084c19f9f42271c", "1809a132aaeebb85b8f91c57b0994301fbbc74029851e8ae179cc390951a3022", "141b647e9ff77f30a1b1ffc77a3c89f20930677f8a4646cd5e29a314c56644fc"), ("0aa28552cfa93d1a1737f5552efad8de0937c9f40226c6da278586fbefee995b", "2cb73b7aa9220a5951e116b225bc53e96061033ecde3316aecea37948e39e386", "28dd7dbe5508e1514795e5e5cf17a7e969e404bc2b3dff70d48b0c45de0c8e3a", "1ad4770f66b2ce30a78cfbdc34cdd69ddebaa68832eee9433d14d46c236a1ba4"), ("27d35c0cdd681f6fee4d896f3d5099539d87524c492f3e051baa2b5e670e417c", "0d43b6c1e51622d14b091c8801a6e252cab085ed9ccbea666176f87ca0312fc3", "223b0158f31ce2f9729bd50fff001a6043d81d78c081763742e52cc226fe0271", "0d4b5cdde540f70e3527ad7c071297620647ea7de0f47a60312efe4860354d41"), ("20e595f86c4364106b929e846a0152e1e20707810e0623e47bac108cd4aae405", "24a2577396d96d1f9fb7cabfdbb914b21a5b8b92332ce9714fb0746d3c0fb0b3", "110ee28e3f9f85bd89c5983cb0b17ce3585e7a9c2ff75ee963568f3d6b0e9053", "2f1e1ce6fdc74d61cd9e3e086e9b5f5eb14eb53fd27e25a065bae7b2bb793914"), ("2724c9a49c1d7b74c445ecff5f0ca7b5a337011d4e3228ca8b78ba41e858831d", "11f542a68c4cdb0e3a4ef36b9c6110aeb953bad7f1499beccd21365b17c80ee2", "03b4e2a75da922832173e1e9c3105b23a8810b05d8b7d998643f320a94a43af7", "01255233fcdb83896bef702da8c6461c9684508cee4cdea4ab02015776f57fad"), ("0c47394e05dd051d2676620a0898103a4af5c2e337105e49c5675142034f3d13", "262160baec6ec04c980ee7f60eee3d7d0eefd5200797ed98fc2ab7252dbfdf2a", "22b1c16bc9cfb625e9641bd3f1291c9db67e4703128af7e7c56654f3c2c27db8", "10d1c02890436e1a23acfc2b5851e286a6e5f6df772ba46f8eba1a17af2ace19"), ("07c41aa0769457a2cf3779178807a4988bb2c543fd737dfbdf56368cebb3401a", "174a147e72c794e2152efd243c83874143f330aff69ec9aab713ac1eb9edf161", "289c9fdf81c7de0294f540ae3e39d0a16c1e1f4f1630e2df1823c7c2b8817a09", "05a673cce5aade282be7be0a6cef8d879cc9be32684651c68c537e9c24d5e532"), ("10e7c3c33065a87e13070527330f289b1ce6236bf6faf390820283048dad6174", "152b255e07116504af9538caa91e99cf785dde9e4f72fde7f4dba3e09e81af92", "0d5527bed1d53d3c1fc815e7ba3573efe89c5f1b551438d1cf0f7b402991081c", "03af836afd202a7210005ab71e5967cf339d729dd44e25f3adb73ca12aa9d63f"), ("2ecb4cefe1a190ccb393a5a02a62ead36b00343f8f82b604808f323745f7c949", "0a2617fd251675a1f795d54f62ad1f7b6b4c995b55b216ad50e2ad0f427998e0", "1875db6cddd5d85b688354c4d7bfaec8d91571bb53520bdd85d1bd4d774ef1d4", "200e27c7d073afd0b6592de492deecb64f7c1ad5cb13c351f91e0412cf901209"), ("287dca6333b40c736b633a6a0045d03aaa2849eb24dcc562524e174a3699f182", "26a99f6ffb4bcff6042172e138446250e21735f3f7bc977ba0fd4b2e3ea60d6d", "2ac04d3ec987c632ca5e57e53eeb1d3f35e054d9a8c397fa923235c0eedd9645", "2179a1943c1c856f641042e9cb22398c3062d0777d11edc4294a02f15e4ed2a1"), ("1b38515770d1b31c7358e1f0609e773d0cf46a929b1c74f88e63ebb37c72de84", "2c8883c80123942394ab65c6a8cd94f83f9701c0d6b0c4d98f24b8fdad5bc44b", "147c2fa694ff79b0dfef293afc1877b8d28b26bea7f835560b4038abb5a79ab5", "1366ffaed0f2d4efe3d1fec69f5f0637a8e23671c19178ff0ceb5d969d2908e3"), ("09a0c59d4975443def9b341849351b339d15326f734dea8207799adbad0b59e4", "1f330545e7c1add873ce281a80142a8b4c919e27e9c21722702c923bc08979b1", "2f4021cbfaae03544c1cc9f9a7802aac4c64186c4093a68ccaa789aa1847f0ab", "2ab42d9b8ed3a0a5b72e1a8cb7f945bc3f46bd67247630ed3d0e45519b9ae84f"), ("17170fb763c321ee962cdf694a230d4dc4195f3dfbf3655b2512d6cf1aeec86d", "2e5a195fb113afe424b8967078b8c319ad86885e88671755a9541db5a2b7b8ee", "164d65af95b7fa06a2946078015fb15ce5173959c446ab251bda4fbe9c9246fa", "11a23f7caf61a300cc1c0920d26f022214848081cf15893bba73fe1632279759"), ("1e3abe05ea8f57662c90706491b62eb38f2d41f7925e9213e0a3c6acf65d65f7", "069d2dd301945ef43920c9579470021c1d3e940e3ff6e2bbc7fadd1711434ccb", "0ec88ba4d2139d6179df6f71b755133442293d56a15304f1a3dc59838ca6985f", "09fa342c810a23aa955596e8df03e86f470f6dc649a35b8693d17eb49d184ee9"), ("19a9f70b56c74167698cb8de23a0abed39b80798bf31197dc3455491e3339c6b", "277e3b8f23923702abf8c7e7e2db6025ae51b1c83ca414ea348f800f493cd9ce", "269529a95896e44c6ca395889c7700379bfa99de54c538b9ce1eaf46512ae10d", "1a2b40480e2392225bbd77be51ab6f6f209906326a67a164a98e549c6b8cf23d"), ("27ba3f2f0e0c0143c835149d1dd572a5d7cf21de6cf344735f433f85deeb3135", "210994c07de9f20c506f55886898ececc62b4518019138d06b24055df9009289", "297ecbeadd95f66213d458b614ca3daf568596701e7075089abecaff495979f7", "049e0a798c678ebf5c3a84457feb318a14ff1f0f3b9eac59f54817196c36acd2"), ("1f20f7c4b61a6b2df7b713fecabc772bbc02975958e94f27d97cda69426c8fca", "2cdc6424be3286c9c31b445d876d3178396ebbd7f382b53f1460c46e82233f2e", "251e34e93cff1098d504576ec081b8cbbde11c80bf9f40da01512244a9f2ff67", "0473b64a3ef30588d8cb413bee9ed82074345ad5ae3831b2ba8bfb619e556856"), ("18c3a537d0366ab3b113cb45adb4e5ce92ee2b75378d181b83f1aac2076e39fe", "13bdc5d4a8d54a76779454f3a093eaed948be0247fb6b8155c839566aecb2f9f", "1b5f72820f76c09b5b2786500263b7dc7144ab3228bf716bebdd322154b87ddb", "1481da4284d83173b24ddf1cdd244f9962eedf2a1f121a01fe57bc1bddcffc67"), ("0241118eb5a7a054024bc6d262b32eb376017e09699bef0ce18c2d2022e60655", "06ac33c5f46cc596d5e46062fe241662969ce71fea895682f684279241380fdd", "0b61e90d092c8040e95832b610628e9def4c68ea6a7eccaebe9815e9059a2346", "1a5592b15fdeedc513fe907458529d1db18e01fa907ee0c0d44e178b4b05a605"), ("1f0c8aea71d43f7d384d2afe86e8051308ee1241cbf3cb78921226955d7f71a4", "2e5b96746a407a0f22f9225970619d13239a4c006326475012f395f37b8df943", "3016c08c1ee98b9a22dcf7562421038e16637353f104ffbbfde40b25284a5b56", "1095cc2e9e3a2749fa319992accfbdf070fdcc8bc05dcb641327a73535f3260a"), ("204d43a8a8e7dbf166f85cc38277229b84907ad675db3f4514267d1fe7b1d910", "124386ad5bd82d3d4b4683940fb18b6f2d7e20fe961b88b533ae7d7dae4c30c1", "2623851b27838ebf696fc8cf3f608b777dcc8e29f312737359a48ee71ff1e6ac", "22f9b965d77961679069006015d7bb0a70c476c9ffcbf27f79d0911ff02e56c2"), ("0c22f3b7281d2e3f65553b18519ba0c3b3b2337674c153bead5e309d75425756", "05a32eb135b3fee528e4825f0bcbcf5e6712ec1b593c9e6f6e6785ce7b8c8357", "0463cca79a5cfeddb2dd8f08c1e0f2642ade70647bec7a18381ec12e80451071", "2a1449a6590f7fd0c006405d674b2f0bd16e0023b1705a8e751940d4ebff59c6"), ("17a10999317c72bd289b368faaf793a69595a0cdc57d734f6a84b6045b76c2af", "2669846efb64bddcd5a7426762bb1161b7a4123fcd30e079a0cb395774b9b298", "0622f8a3b444f78cc7273e2d1b98f3e699c6c9f336c818376c52365ccaac996d", "007fac9a6615504982b0fba892583579765446eb3d49db671eb2d86afc5f034b"), ("2285396197453d73649838066f9350ee24347ad705ba75147c36fe5f39120fc0", "10aea11f03fc4b678f33ad6098abdb4e2168b61308fdac2d77c0849f91dfa48c", "0711a719f1679c0ce6e202d7f21ba080534490d93426b60b6ac70df560c994d7", "1a50368aabf931ad924d7fedc92119a5823463c1062efdff29ca1c792dd2adfe"), ("24a194495063057d1daaf09a903994e1a85f7ceb07e2f1983b65403494db5cb2", "05faf0b4d443f83a7a318572a1a1f0b38e66fdd90ff0f56317025e83cf833e05", "2856592358ce717f3a946e9e2f9e90a9d93ff5187c23478f6e0218c97ae7cb80", "1168f164bd0f35eddf9a543cdc1ba1f1a568464a479d72469f750f4c88428b53"), ("287da1f1c565ace94ff0dbb186b5e6cc3e9c09fee6c7776732a18bd87cc7685e", "03d07e406c3a543ed6037f2bd0e001c7eca21e62546ec79d8279e12b3318b70a", "05971eb826fcc79833cc6c36f34e1dc0858a2ab1aca3f5e85ca37a2f37163c54", "036f3b4504e0d177170d01bbc3ea89bc5a4dbdc181d38afd5ed55bbd558ba812"), ("252410c248f970ca9d896e7357a41a960e4a22026ec0a268d50cb4f31eb17992", "2c8508641b6b7a938402c79d3197d30d0d822961f3c9f8d121a0920f4c54dba4", "19ed1a66a71f4515c06c4a104f829e49e4a9b69a8d347a9f0701fd493e6a9d25", "16fdde6eb2f5842e2acd4287f336ed0c398b696f9a94cbd3ee7cc52f41bf6334"), ("1a1a4242b056cacfa88addb39a6145fd641f7c60dd8bb3c3c7e097f91bbff5fc", "0f784fe26f38884391bbc366064e28831cb7fb4b45c117f73627357c34e50405", "0887b0d88c85d20716b87440e6079757e96461768829593b75f599c20e499434", "16cfe1225911882f7597accc927e597f582101f12d17b11c42d6b002cb717095"), ("2a93afb24703892715c35fd44934a2b1a8ab004b79f93b2ef0fb7bd84f961e60", "0c5a2d5e0ca1cdf16797d0f9182132cc80c02b164eaf2c6e2f8c44b9d0ffab17", "28d99cfde3b4d9ba1436df5e0f67187fb74057cd4e3f30b6177878a903edebaa", "1512e660b4ae0959e1279b0f0123fb5dcec24074d3faf96a82a9a831fdf753c5"), ("2190d36a5dc6392d8b9655213d00be589114dfa0e34bb649354551034674ef55", "0048e6bb1af331ccd4b4b2cb8c72a7b7f16fb66180382306ffb78323dd30fd5f", "0767b185c67d310fa7a5648e0903bc95492ab6cd66b174bc64c9359367831cbc", "20642294a5546753c59d895bd7fc27444e480c4ac2519b62d06779b830a41342"), ("2026661a40d1e9b59259112596bd9f77f8e2e2e90ad51d68ad528007f8b90488", "0ae40cda2acd93961c140b9594667dac0b51e41085c9c66f582764132c2ab900", "03944ff37f7336509d1b8e0e48d44ebd20b1fc3caa3519658e0c635893bbf378", "23c78f8ae7e005dc851a9e285b861986cf37dae1cb46a3fa9f107c53a10b6fc6"), ("20cec8c4c95bfc67d6a1d17df7891a313bd98411ab3b3cbd263b57bcdbe0c713", "071f067303866d429d038eb7b534dbcfcf8650305cdead027ddde4ddd9ef6680", "21f620c392d713b1a1ca6fc2b7d7d8530d4d55bea6a79e2668a371095f487590", "17a02b422b22b06ee38312b4318657681ee98644b872ecabbd3e2ebb634ff138"), ("1ecff49299d6ae50cafb2db956616d274d5e8f6e7c48abf63bab1a152218abdd", "245c0225079794a89690be69a2eb72f57b1100f9ab7012a3c80a6c6a0458cc1c", "23aa8217dc1817d617ba8c3a01971eb217ecd127c888075dca722e99abad4e7a", "1026cbb7745f9e7b7b497ba873bc4f4111149e606fafdcd801203465fc556b8b"), ("0a5b849be63730cc2fcc14455e5482523dfef524ee3904328d759eccc9efbd11", "2237cd31f0f68eaffbbbf954c30ec119de2ccf197e13142f75c526626e31fc79", "179c24301dbe60d4f1768a0d218407160e3f9cd9735a70159426b6901b750387", "0d037e7a6101867102911d7c729bc60a26b5bacc349788ca18ff0d6e8b848f1a"), ("1d7792be08f4aaeb3e0b476b0e626a5cd971b588d9ba4d0959797155ee2e7b8e", "14be0ffabb187eed216bf87e666a2b91b35cf08779f75a9261b23c4666506140", "116184d5f12b52002679b2c7d5b4004d556f1c93a5205a999a3bc3736ae61a29", "13b6755f4a2837690d0f17cb203ef9c316c44f35dc97725847cfc87c33a411c4"), ("0d02347eb1368f9b165c082f6b7832f5205939cbfe3ad7389ed3177f3c01687a", "10ef04caa245a258b10805df2526335074972ff92bcc9de735eb9145163e9bd7", "1a2997e41ae38818596107b60d2e25b7e363937727d07c9959d8bdb3eb72b2a3", "0d141b72967ceeae0f0150ad80beb0fcbb6762a76f7b8d275375d359905b814b"), ("13c7d7728d72c737c581a0b0f9330dcc2f6cef5bfb6ad2947f80b981ee20f08b", "1ce3e3cc1aa2ba7e90b6ba181f76b318dc5f64589d0578cd0ff67fbc0892336c", "020f6c1471626ecd084ad90ebafb599e1655c8a67330e5f7f5a78d2985c20c8a", "07d2ad5af6b99122caadbe4c70e3f994e88ccc1fa1767b90c4d4f95fba069915"), ("2a6cafecc34d9a2571254ab5905df25ce293f870263e3ece86875a864b7c5d2d", "2b84c0ccb169d50c9ce164f78717f92015b7d840d240963fd899d6eb5b97c96b", "2f15d6b6ec08ea82464e4aef0e5ab5765597ef40cdd12c8f360caee1b34d5ebd", "018491963fcacc1593b3e6568d68f908e8fd84b8d7784e1fdfccf8613fabd3ed"), ("0b23ff5c0334b545310b56c72621f61e612cee04944bea3d6fd81b0ece2ca68f", "2d217c12170280f16a5ada57e68bfcf78f5f7d59d68c3a72c37d82cecf5d857b", "199d7633624058e11e372b6d2346c8ff54d1b456d0014015a22c2830bb8c757b", "0017d68201ed2454bb63a9e9af840f005db99a633e604c14c44eaec0d0043719"), ("1aec71b68ece8f6e91a571bcee9b7033d39b03c23c3ff68502cdf9fcb57d6ef2", "21825246298afcc210c9b05492afdcb14a62ca89e382c0c9f23ae2dc49f3d95e", "0bd3e65179fac7d8e34cf35521c97735ef31dee0a524c71933636faadcfafc6a", "02405084c95b346209e41402cb00a7dc4ecefb6d8cffbc29a7162537f2c6d891"), ("1a3c853d00f9a8dd7f19f61a08b418c9f6ba9285db7cb07ee78dc81dc098bfe3", "26cbe7f1248682f74681e83b4ee712cc86c519869fa917f7ec2ae986684fe0a8", "2dfe7fcc4af7e9fa8ceb3bac9c583ac31fc2de580a7809162814da59d0d9e4c7", "1540fee41c1e8a5da695aec9f5e50454f25a77c2150f7442d680dcc7fc912069"), ("2f7a00cc649d4639bf44bb06f37e88e027fbab056d20ca9b88bbc9e49b619056", "0b39b15b194575b924f6b4749adf8814036e8df8c394498c575667deeadb6ec8", "30552b74543d3fd268dfa54e5000461aa9a2254e296d66683fd36736ee1568e1", "091e5531f9c6fd04dc0a734e52922083fb89f4e62715f57e9a981bf92cf010a7"), ("020b16418f82d3b97c89af593e6d05d94d4662b654af3f8a4eea49d9f20536f1", "1878035cfb7b974490ceff24467cb6b5f3f6f1362c3735e37a4dc3dd0bae1d72", "0486b08c627ccd55281ecbfd3dd8be7295f4fe308bdf87d0fccbb7c9b08f9759", "22ef582aa49b5dee41297184836991618c24a09db18ccfab65738c31f06479d4"), ("014bd5cd7c147e601ba81f20a8defb2a198ecb182219a18866ddbfd4de5260e3", "2d641f27930dcd29411b2e763badb7f0e9bccfa44ba71ce6bdacaf330d871b5f", "0157cd69ebb351cabe437dc7531319e6c59a409783568d3373a1e59b5110429b", "1c4d7e3d0c53395486d90f036c2ce5cb4e35bfe9847a7039441b974b24a1bc66"), ("0ce1ad71a4d54728e167d80b419569ff459538dde02ee5c00a4e236eda25fe6e", "1ca8e87d16ac550756371867bddb89d7d42992003737f96e9cfd2d0caf3bdf28", "0ebab04a095db2ffd6532e1ce356c50ed3978ea7ac7448dfad5dd737c72c27ac", "057f4020f90b01aa4279390512203b0a96615d9698440c2918fe6c04fdebccd7"), ("1cae8dd0d1ffde103693f68135683356a1bbe0f1772c035f15e8752785d19d25", "2611bf4020c7a797572fb39bf311231adbc55086e4f4df8ff97d0888075f8507", "1958d32429953a76de8f5b1395113512c5e62161b20431dd413841b0317b4c93", "15164bedc765c9c7d633cd0bc9182cecf06f89daf668b91b5bd9383196a40275"), ("26267a558c98daa6329b2737e688b9a83c1b4a398be045fece0114b7f60d728f", "1ef7a1bedb78f319e719a55dfd763fa956f1b28a9b7d1e7282f2c9bdf71f0c11", "25b6623dc188c8c17591916fb4564030d98418d6ee998cec8a0628c05c5ea3b1", "29f2be1980af58cf64003cc8940e1dd097f4822d42482f8e6f97511477259fa1"), ("127320369bb2032ae7ea640d0880f77a4225a4a80883ba516108c11897cf54e2", "2de750f0dce90d2d7be9b6232b2d084cdf899daf765e2e6fdd9e5ead2ccab779", "2a0c11ecf6988f5c45eb2afefe3058fa72a10d4174370a12880f1a1c26d9d144", "19f9bfafdb1cbe8d655db0bbe81dd19977b3f61f0f40b16b4f9039d0f1649ca1"), ("233a25e519abea12a267556af2142355eb231b1198d64d4367a76ea92c820962", "112a6cbfe3c123517ef93a4358a180d9f6a27a0cece3332dcf7e11db4f956ad8", "032c2a9924b955d338b3ee8d49d316080660363dfe684a3c3d822fcb1151b8bd", "070ab5047cae359858a6cbdc79338b1b23846d727956725b8f2d1fda7d0a2faf"), ("2ea0bc97eef032acb95f0261d94fe418dfe9952cf5e5917c88da3adf825d4e04", "04a51c6f206507d09c78d8b417e150fca722bde09aaf5ea4e181fd2bdd6e6569", "04e552a3042a2ac8811e29c26810d9572687921f4e3fbde4b6c28f0da16d2f02", "0af40f1dc068f6cc00b646472854811edbade2720839937d9336bd0b45fbdb58"), ("1fe0635709d09f92cde1cb1da7d1d17716be26367f7e14b626d3c24b311fc106", "1cf255ab3f1f9bbc612808304f5b9aa5b5d4097220fb262eda52ef3d3c320ec0", "2532babe6c3587abfddcc53e8bbaca3a956308ed77c33d163ad222a98aafd17c", "04a59d5b3c471ac3137345a6ad52fcc589f0f8f56981898d22a646fcda07c33b"), ("06fdcf52a30843f437076ae1cac2fb25ae90c4f35498021fa7c752dfeeae5e66", "257e91ded5ab9fda1ed22a52c609d0c74c07f969446a88af1a0f04e67bdc4988", "04d6ca350e68e2ab15dbe6a097f21d78563d6702795ed39ba9ce5919092823b6", "098e0e09ccbd5fce7f70f842eede00988b4275c76d9476ec8c003ab16b0118ed"), ("06b1989dc9612536ba8ff1f083f4b52484a0bde97b192d6fe8a05361facb02a4", "270c8c8cbeeb05d1c5e621423ac7a4dfc2ee81325a6c9690e1fabc00e0895672", "177b635952a85c948944810331eb72f57043e3bf16f35de134d9110466af4311", "0cb0efd80f14c39b7cfbc8c63406effa0e064988e21c96f42ce4f78b04b8c7d0"), ("0396b4355e404d3d0e98b2eb201b43131ecba8a675036732ac9fc196f9bb0e66", "23ca8cc1c8e2d0eb66aabc79bc0ea63bdac6b361d5908c2ea28480bd141ea428", "26774df010b52dde28cb2ca87d7f4317a1410a412d9718e884ff7ae7562d6f3e", "195974d3426b57f8fcd2260363af3fd2d811934c8be90402bcccca1589b0f3ee"), ("2e7ca01ea28e826c37e1c7c0ab2f30c4b20d9791df6c4cb875dcc286b9cee093", "2e47ac662fa594f4a0d411be05f464735c51c40bff4ac3a00c201fb85804e918", "1275a7e0a9e187e778fdce490d99c59984b5eadcb9ae09c45b8e55c26d649477", "21b0499c70de942756633dce1bdc44cad26631f3c0bc4097f678daee5a9707d2"), ("0de408efa3a7aed1db5cbbf06e151a05dd0a592f3471b7ac73481957cf2f33a9", "1a9f24da4908bdd9db4d8ce836179f26fb0de0ac54de8766ca5dcfef1a8ed9ad", "1b3c9410534ae3a95299fb84a5077b2702345caa2f9317d2834b49d9eddf689b", "0154a44ee4c86c9c29248efd781f9ddd02a65d4ec64cc53f4027f0fffd524b51"), ("2e4353150769e78226f4cbe1f0c6c5cd8a9dfe16b6465f0262f16d04b6234dba", "141c0028ba79c178f815dffeb262f8b8d64c7cd76c389536417e0cf20db3459b", "00616c8c4674e5211e7f0bf626bdab2e648e7e64cdbe1c44a2671ac257f5adc4", "1818ff2a02a892a66b2f7caa5303e6c644a11faae36e0cab86b72fda28f7a260"), ("09e4aa58f37eb2ca7d6acf9ed24fb3b30d0a2025103379b13bf8938afb15a1e5", "1cb2b5879bee2842a1b07fb0bbcbc24866538508467c3ccc593cae47a96835e6", "09d047eb17b882d474de96eb0d63ca456cf1a882f9debb0d876e3ff3aef364b1", "01b0af7732ae8d9fdca5bd787fb720c7d4e209099487bf77e71a03b40743036b"), ("1622fcdf3d0d0f34767e2d2288dc10b15ad5d0bb40d2f387857821806b064710", "083d71ee47866d06ac2e508d55d2ad3313c707643e30dc12463b3cc0490b15de", "302650381a99e30978c6a66b6b9fcd6efc8e52199a5c5e1a4a8abe9b09b07867", "07a664b9419d04fd208fb937c548f625c86334c9dfa554c63027f60c5d28a1d1"), ("0b1a569051d3ae96282da8e1e36d0982c60007a4a00a598b1fe62a1caf93fe23", "24849c155c4d612f31418aa6bf1c6f6a072562f7dfb3afa2d53f29675c9e74df", "1fd72694d8068386ec6f54a0352fc28a1490b49fa661e5835d10eb449379996e", "152b0d719799b5dfdee424f42017972d917730c9774a9254c546a74031696677"), ("14ba5c298ce848a3ee3ba614a8a4556a593587be27a4c9c44330d19f62ad832b", "0f0a62b664453704de8fe694b5cc643254780548e07ab4cf9212f6ab7bb16501", "15a9eaae57c519545cd666782bf86fbacfc7aa541e4c6639834c9159d958add9", "1a15d0e1e3ede59cc395337513961183545d7254458dcf06c44971bb4f0415ac"), ("097b45b8d30dd4ca598553aa7a8f27f2bd3c73dfba4294aecffd9d1ec9f46145", "1311a2f953dcd4ed01990e0e1b59702e064d0501349a405095a1c2bfc5d5cbbd", "1f97ab69418a89e3eeff1699600e7579192d2872d191ece4650892ccc07aa64b", "1ed63bbd6140851d2f37ade22ac84fcca8da8ec8a73c9e2c35e27eb97e47ebd7"), ("031de957ca09871accaf7c4aacdddcd5af07f0741ee14752a258357ea4442a3f", "0f49e2f1e034845f97edd1169df3fbccb852e340d935d8cf00f8d797b43a37a8", "1607417b541787aece28954dd4dc16506d6e43ae3f09bd99abbbf98babd58d98", "08f8e3e109c07254d38c0bf1eff34030e9f92eabb8ffcc93a639242f45a006b4"), ("0df7ee9dc1a4d6a81e7c77d4003ffd08b3df3343e5c5ebfcca15ac495439699e", "162564719aa49448254604e1b93ca47b01320889bb86e1a608a5d07a7475e58e", "2374874892bbcd4fd3bd05edc62da734c7b46a436aae5db680f60044b440fddc", "1c281445da05471b3c7c62d57d0f46ed0c471a1ef3b38874b8b624e2a8900564"), ("183164ec08b0b1744505bc3240bda6c8cacab320bcac687284e4384603e47943", "0df90e92490693c50c6059cfc25301edc362f9ac93e3db856d865d4f29a2d17a", "0dc7e25c62ae5200b47b664312e379bc1dfe565993c9aa96d95c3ce985828ba9", "260890a588bd615358d8c5892c42339059a7a6a2a2e470ab955a5cf103e6ed41"), ("09463760c716b61ac06c0bca52a669bb033abaa274769f9b8a8468e90a09c910", "0ef979055774f9415c477b685595c10b89297765f998649657d8857e9d08e850", "12b5f061a375be35dbbf4170aaac536366f8371c16bfd560523f5ecaa94e46af", "01de1cfdb67ed65631555b4325756211573d7be0232c839afc66d4c6e7af2666"), ("25b897a740341838af314b220c68b4bc9c937f7a321cfe694e1fcc464551fcce", "1b31667f643523ae1e9c19456cef688a4bf35483a42b4866831d5b45b749736f", "1dcaba96b5c7cbaddcd8cf79d2d6fb72a01f544aaf445cd49b43f45e7e900bd8", "2aaa61dcd27df7480fc0ff12aa7aa691d1d273a07902574caa159094be4e9780"), ("2a51eb04cc393af114614f5df8a5c512a12d0749a33708dc709b79f2c911c969", "0ec1778aa713e8136c9ef1d2e6c23d279687b838793d26c1de617c1adc8e8868", "0c8a188a3e31381ae63357936b3a1dc60fd0a22cfbc29806c9028908102ab937", "045191f8f5b66cc9ef06df80559bdefa4fa397712b33425fad001bddb0bc50ef"), ("072f300f5e4a41319b0efba54e5895ce0ec5b1c8117b35316cc3aa30575c7fa4", "24583c959f8b3cb8f3d62426e78e078614d260c1dcb1073e5de34d512254cbc3", "01c0ea73d839551fd7a99b142b0db72ec0271d321cbe7ee203945f0a19406968", "0577a0bc05e192bdfed8896b16eae92b698a97631ed2d89b4c030bea91a303ee"), ("05c57b91f26212a64156bedf52318ac0db393be2c6c1c24c966f569640ac3388", "29db92af62e57a56aed1ccf4ae890e354aa5c58bc5b89b21c3165cc1c66d0e6d", "2bd00fd3498e209896e9b2e565dbc2aa18a456b437b559ac1c318ca550f5b30a", "0aaf44f7d0030d5ba5ba2b016d0585ff55289f5834401c7414e1ad8e062d786a"), ("09c9876c523f501866ae571f79a143a0a6e2691d164d5ee70dc9483aba19fe4e", "211903fd550eddf224776b741735813f49f94fa1217261227c3e263f55e07d22", "036cff9eddca626a752d1c525b678bc8c4b71900a8db1f6bb448f13c87ba8079", "0d5c0ffe514565c9153c722b109bdbf0547d05e8996096b958d964474ab8f3cf"), ("09b90a0a197d62ec287bd9a5cab757bdeec05576668a63745a54e5ebc11387be", "0bf99b85740430dc35278a18c4f57aeecd5e6ccdca988eb606c154ae1b1854b9", "21c00acc2b0a1534cbba2bb34d02f98389dcc0e42fed9056c9c86528b6de565b", "276087d52dd42300246cdb3641b19bf1f62a410cfd8f07aa706679c40d72185e"), ("264cc96cbacad2c4219153457276b0de3a8d95e00b6370b162444b829b92e80f", "0ad4254b00647e5fe0cde55cadc5540a75cceb47f9049b41ea01c8bfb9717c32", "17b81a1af93a21a6ae107c63ac0b28b76ea41f009dc12700ad9a12c4590a291d", "28596054565e67c2789cd28c4ab9ff74cc7ea7ebb78cc027bb8b679bd20c7709"), ("0b1d8911b816320bb391e252e3b84c97d570b73e72d4c37c0f19eb36f18e8363", "0f4c38aa7b5766ca0cd94c403c58e869816f05f349c0cb81b12413b4ac0ab30d", "1f1654913c1280e58a739dd81b418002ee3c6126ae5498be9ade66174de326f1", "0b60bd7c1dde8502faf69b06e90a4fd064ac901bce5c6c84c7b5a28baf452e8d"), ("2b85e16a0db12b5f1de66c32273260e9f67365d081719b7af3e1c8152bc6fd52", "0487363d822c9d6dfad08e11bfad6c6348d99ea493d4566ebdb3a6c11654afc1", "1e835e8df2c97fbb575812a4bde6e94972fafe7e00222eb6891ead2fd610228d", "10aedf39ec878765d10858c38b10c81783d889c26538ff838e5bee177fb57a12"), ("00409f90b0d4252bea025773fda2813cf7a0e085d2cc184080dd4eb4532a4963", "2ea7e7a76bfa1a176b91f0b137491b1f85da8f6ff73c3c41a754f3a123c57002", "10dfc518d01a33c5c07c4307c9f17ee08c45046700a06974b60fda594aac8d8d", "234e6662b7cc857cc223c3bf83c93221a750c08d29ddab84a05359ca6b63b5c8"), ("0424d3a1ddb7be68934687c2a492ee2155ba95a0b4e33c4ea509e93a382fea30", "16fb35e0dd3fc3625be8d7af36d7641816aeff0bd862f684418ba5df7aa035a1", "1127056eefa10b4e0b6c563cdbee6a4a896502dd08ade20f1423eaf16883d80c", "1dabe9bff2f83f39d7a436efcbf7b8025db7fe954e4ac4db8158ac7a93a7ad7a"), ("22b69d6e22f20f3c88c00bdffbbe3324a235718e2bcebe137298288f6887c0c6", "23e3e8ad331ebcebd3153b8065d08ee6396be3d99122907fb9b4037495e68103", "2065accedef629d97a7665a1cba1c882b798eefaede1fb4d8f3e335e06b398e3", "2c84a2948b79ec59860c0cebaad621c90f405b892301b0f57a0e75de338aa0e4"), ("202f3ddfe8408a5b0f08641c1e18afef8a8d2ab1196b85f0ca93411a00184a40", "213a8e02ac18876454223ac28b817b7a5218feddee6a3e37fced46daa65d9593", "0e1716b4daefb9edfc941a13d2a5766112695cf64d7becb56a886021454b49d1", "1c7cdaec34f063f3f7f21889bfa70d43492e057bf75bdf064a7764ab73a0c31f"), ("02fdcf785a5ec191b0deab6d3be9ec65ba1bcdcc70945862deef3618b243ff25", "054a4e20be53624e9c1a885b3130f5bac5f20acd4968d494e28aee2ad44dec66", "08a472e504761e29780c416b7c304e780d2191e9416d4a8f83f676c0be74007c", "2817c20711fd76e8d89ae95163a6861254562b77383f7ab054607589a75d2db9"), ("151a75ecfaed787591fbb691e04c34c081c4879d430964ee4bf26495d96f8abb", "26ddf73a36aedb503b7684185816554cd739ea1b472717a35df4a954e377b247", "0434bce1d2d8cebd4fd37e8d2a9d4a352e9b2bc896cfddc76a6f1523994a846a", "1e11d4f106dd57d03013bf2a293139e5029f7afa740b7e125fa10df470d48ec7"), ("22c39deb7ed6526dfb62d62b78e0abc2d9121925a6a0b9c1d0ccf3a69a0a16e0", "2501251366ecb7ccb5acdd3f833b4dc68449109530a98f533188f707a16c626a", "2dfa8aa40a58aadd4e14baebff6640c4920ca59b92486591ddb815607386fa93", "2bd2afb1e4928ee8ca39c992adc3845c3c96e15b2ba25c99a526f6d4c7663670"), ("230c403fcdd60b57b7278f1f64bf1751a6e1ec9c5047c460f9c85e5f1416fe39", "1da9b5e180863760245d6c9f48a9fb9e5569c3a454b1b65279ee8581d312744c", "00e8ed1d90f7bb4fff12b36934b850b44387f2743d6da3f177382027dc2b39dc", "0ab9e30c4bf3b18477c127edb950aeb9100d0e04868112b62235dd76e60839e1"), ("061428dc67bd09700fe140f8487493c90a0c0aabcac025b862d6851f7998ab2a", "01f8248ae1cefd20a2d92df150a4c1b23f0c4ac00fb60e7dd8cb05de569ae7ed", "04af3267496be0590681451aaf6e24b4543f05f40ce0d6117eddeb021a87ead9", "17e759beeb87a62b169eda7d34f9cc7405a4274e08d9a93fdf0378c09d2369f5"), ("1f7f99806fa0a6bf58a70a42f7d5b0e5796770dfb8dcf40d3bede0c28d21f6c8", "20860d4ba09b87f3045d9f7bc394cea07473e0feef1cde1a890cfb21cd4f1330", "02a10c4131c5763aba2bbd5aafc88335968248a6d045feba77cc2e7dde1f3bbd", "1c518567fe674e93505b81dd0c9246c1d91930ec729a09bbe2e96f8cf4ae4ed4"), ("01a603df8439225c5771a8755d2378f029f34dd70d9590706a9f7b57e1a25856", "0c34ab722ec6344f88d62cf825e5e3cce73df4963f2d37a7627f9c20802625e9", "1af0610e17b04731909fd2a864dc47a068634271ca0d85b3600a9ae720a097bd", "2f64b3884779575d67bcf6a89999c03f7e6200bce4d9f2308073c8685ea22981"), ("10080d4b9404f40d8c96f79142209c3e8e88414d27702eb64e13f66951782370", "15122d32d3a4828af9f638e3b95f609d67d3c7dc30400d4c611ea923bbc77537", "274f4b2f4af4a40da66a85c2e1d4b16c9a7dae9b4d4ff5185281dff0a2b8cd56", "26399e6902183a036154ca71ddcc52b71e7be4b294fa828e44fd29e9db84b4d8"), ("11d0f8569539d83d6a440e4d7b7de7bd0d66c801c9932064d5f3ba988942adf9", "11d439e3e64dbe4b8a0889794d8de26eaddc3bdfbf6a16c98c209d6a561da90a", "11fa404c03a952e88b9080791312b88731deb8fac5aa379ca717fba00868ea97", "0782117470e806b00ca9a60e7dc92795ff8fd2874cf22eaed82338115993e689"), ("07c7b616d3f72171d4ea21cba169662ea8c437f247d07cf89de14b5ee06f7fba", "2a0b21a6345c9313f0890a12077d94df215e35aa7b4466944ce18b1c872115a1", "02da05f6cb5f13aafe1955cca05bbac659b8e23db4df409fb28b04814fd79a25", "2aedef6a1db8e03fa97132c524ec3a9f7e175727ee5bb9215fc7fb81aa4ca708"), ("23abf6eb5df403270db249d60e43da73981e81f8d2e6b60978bf9ca1c93c17e6", "0da231773044e691f39a28947c34e160f5a667f32b69fd99447451763e46ce5f", "231b7208121d68c224feec8c85124bf47134c95e0e4d0901383cd9c68df50c52", "2eb27f8edd08b5fb505df20dead67c19b6810eb18bd7de40379074639e592513"), ("17c0f1f9cdbe73abe350cfceb408acac9dfc1aa3683593c90d8329ffbd6bbce2", "01909767b8610ea6994caf8f117cb61bf6172e76ba3e788a6a32c0f2836c3159", "2249d02d3423ef722b93788a67c801f316b95621ecad3a36d4c2f4f5c933de48", "151915784d1c54374545b514d34bb76327653ce8dc48cd0c98bdb4ffdcc01efc"), ("0ce3815269070615e69e4f6db76b2ffc3d56c4bc80c5badbebbe56b199180ce6", "0958a3dffe629e26cba32b88992469197f16ca8b58dcd02ce06c344c54308c19", "0f7ba9c78da16ed73461e1cd23beb856957668343268b700fd701d4a6c6a5568", "199454bb3df1d06aeac3245ca00f017f06fabc035e39c2fdb0616393e93a9851"), ("06c63fa6641aaf1a9697031d9101f82eb3c3c826a9f1a67c5b78fb8c1ef37c7e", "1b61ff857e3af7c7747f5150b2a292d46a6620682ec7a32e0f48145f0733f150", "2509dd1f17d71af0010333aaed6243add8caa79916d27a5f31b9c14759d9f47f", "00d247ecafce028669c84318c5765c70a5bb34b43efe66fd24cd86a90322c386"), ("19ac6b5b3fa83b80667a31786b83d3c370f58124583679b586edfd0e6a095967", "044c924f27ba8ee7adb4eeb43afaefdf10b911ba11edd80d7ed83d66c4139360", "245e60d0ae793e18557780c3a94ae230db5eb49dd4f51e06d5df344da0893179", "045950266d3a09110ec5d286f9cab20b8128882b097a01f8760a19fa67859211"), ("0da2a70bfb75de54a4283aeb89f44eb1042f3e13ea1caee2b6a5d4bdce58f831", "16a8e7a5dd7d0e99f01e8b35e6ee45090d04695ec0af0a47dd9835bf39e5eddd", "0d54b121d37154bdbc7fed96e4382a2927353241a23d7d8fd764277f4fbeb05f", "012d6b22b902e96973060b81c38d61a201bc6526e58df356740c283bc654f0b7"), ("0be01b4c62884a34de738a7d0bcbe8dd0d6078c055c0f1b31d914d61d39888c0", "03c013f09fe37ca60b7fd33dfec3075ef8813b3bd97fc2c85277606f8f25423e", "1a837840e0189740d908c5a1868146376a758e19d0b08ad10375ebafc29d5c80", "2d1e7b1827a8b3e2673cd214da0dafbbadf7f712c898c85c2936e2e4e85314bc"), ("1dfcdd687b1795449825811f1f3db20c8eaaed916ef7b6446cb53fde38c58d47", "0dcc7a66fd7d3b92115a96b6d8bd629e873de87d965d6bfdfa780a045f11a5b6", "10b68b052a652325c77ef466ef13ccff5e6133641302d444cdb8eb9d799c72a0", "133485eab277868f9b40515dfc5d6d28ca7bdf5cc02e89f2fe686673c6d54b7e"), ("247dabd93512f85728ba2fe8fe78fce0af58b1d01299817151fc27025ed5aa5f", "2cea3582a3d9f0dff6a01fcb9501e1fae1d1c0628f0b698782fa5831ad0a21a7", "1d4e207ac6dd38b65aed8e1e77599e568aeb4b3dc1d7cbebc3e4ca5dc8bccb8f", "1e7cc0f37c550ec3a065e4f6b5189056acbeec6958c0626102b1c843d37af354"), ("127ef6ead9a2fecbe90f9aad95e1a8336a132a195d880d502c21625de9b14421", "14178d0b1b7e293ba1b261d9874dd49860403d0d1128871d5bf1c0db94af28c2", "01579d7b9cb48bcf219e044efdf459107487093000703237f60d2ecc24d23389", "0ffe7efad6f3fb88a34dc9e56296355ba8acbedc8a4c63c9ffd0abf5d92be10d"), ("0734afee5f34648a9a98e83b91b1f194d51d9270d851d6649e95b9b1d210e789", "047aac379f1aa1c211fac25ac01861ce68b00baef43da68d057110cf66fbcb70", "13b9a7eef6db0b9a0e9b2c31b85ab862a80a94c88e92f5a0c4c72619f3b88ae6", "1763d0ba8aaf5ec47ec1ec5e351ca0d458e49f075010c6928f48a27df95694f0"), ("2940ee83f7bcab8adeb1f533829422688e67e4352dac1c4541a35cc4bc75e229", "03aaf618f28bc3a2a6034ea00936af1d5bc65a9eca60343ad027922c2b9be178", "1b50bb74a860d8d5820c841115b3aec68c2a2718531005a4096c1bff5b9562ac", "24e456157cc46fc0ea21bc92536eaea6d4cafed2a805231444319a54957e4795"), ("0e033e2ae16209a133354f56a6aeed44505e26e23f80f01d857cd8bb73806d5d", "07a8e23edb742719247ac93e9eb62df2f2807c1fe4c3fa3807ad74b80c40ee6e", "26e9056403b88032baa91d0c7c9502e1ff2e1f45072dbac9d1f52f7be5ad9843", "2be389b4b63328c1888588d4027d2872e16bf13c6c88a086cda1eaf6a9d981ba"), ("252949f6441aabff6bac566e71cc6074c1716254a62c43061b0bd598a29a6e40", "1be7f37916e19095c8f08608e3d124d2e9d8dc1ad8fe8a30ef1540d225c822c0", "2c4349f5a5e60a1f15d98c7fc4909e52088901481de5949b90c3f617cd4083ee", "2ee0a8c9cf7c71077dfde876c6bbbdf5aa09e318d20b3e5ca01209446404e4a4"), ("082b49c7210f7fea9a054c3d6e0c88d15109603f022d048546d040a43eeaeeb6", "2733980265c9470cdb927699842175fdcfba4add1b67352af83169ac1ba01314", "1b87314e99d2f3132e63b9cdbefc9be1bd430f1674cb8e53286d58af1843a3f8", "0de154c1889d900efa4d82eafa74f15891b752450f5f269981cbd5cfeb9fc4c4"), ("1415f97ecb6a9647ff4e699bceba6f74510a360d851c63aa9fa2832658d995fe", "233f8488da6dd6586d30f7289934718940c6587bb6e1d9e22721773340cf420b", "22e70085f7e4279e6f48bb265c8028d747e4dbc82bad252d9f88781308d6f9c7", "0f30d2a114174d8c047a6e5c1e9dfbb55964c910ce30dad30bd0823a7c8bc15c"), ("158227a88bc7c78b428c901d6a4e6eab39c7e7df217047c1c4ed287a8bc33541", "256ea93c3e090de513a9b1a41c3280f2edcf0bb07fdd56ed41fba8c60465972b", "21e6b3fa32207357cbb59d6db03f8e3ed91534fb1ec8d4eb6578ee714a28227c", "08cef353324bcf9f273cfae618e6511883f62669d57c69d8414587d3a1b990ad"), ("11f33e41994064f4a17b08e94d148b563cba8f86f3ee448dafe04bd8cb01b70d", "098ade2ae9cd5ceb054b5aa41f56de56a0c112268334f0ab306cc9a38850d0c9", "2b0629125b4e57e6598ada091ad01a771dd9b633c647deb317133429fa7d2450", "13f543b9a5635d956485a614062910c19d6ccd4d98f9f41352e82002360bdbaa"), ("2514d8ce8ee2534245d8eafd68bef3ad7810b98c5b4c8bca3a52ee33dfb7a790", "178ee5ebeb707c1161381d57deb83d65dfdbeb69cf5fea1a26d9394efbf79c13", "112c08d2da6caa0669e795e2557450b88db87d8b0967e2aae0816ad01bca11dd", "08942824767bef9cbe733ece1982762fd8bebeaa771b7bd68ba94dc2769b4a11"), ("2052590b9d10a30995347b0ebb401c4f7c02b90d5530e9997e97bfee41495166", "27de5b27d6ed82297f22e78e3140f31f6ec734f639ec1474307d38bc06f0b239", "1abc7a0a00947128daf89c94cfc41604f4caa257e0cd063c5fd82a6b7a2f5808", "2acdaa4e6011d3d8418164a83fc75dcb62a08de364e85f82164644e9d02e7fa6"), ("06cb63e52babbbb37507ac4a645661a23d14e12eec41082a27b35ce22492f2ad", "207fb767b1bdc5929b3b099346ce245c505a38fc4e98e215c37c75038e5bdce4", "2e9d5b71658eddb1de8a0921f4523015061bc3ea5d1ef83dbcbab434e347a78d", "05f0661a478c1c6d55063aeb47b0e4ff308bd5e5ecc0231ec04c5ce956dae142"), ("109657bc250d2760b1bbcc5af85c1602de5f33ed28ce5383204e8497d3401199", "0ffe7634ad516f6055a06573bc2c727db3ed962316bcfc6b217c2a64bc2fa54d", "12c519491c0b32426352742f68d54e44eaf29e093256cd9780630636135f58d3", "25c55fd155804a9067009b2193dd60cec174e4738643bd81a5044cea0e4cf9e1"), ("201def60e5b83f8ec09e6622d8b468abf1c067db1332d0679052c33f21707fd4", "0b5eb2cd7d87e331009d1401e15df03db0161d4bc2d693f78e18daabaef1cbbb", "2b84ff769bc8515eeb1d9091a49d3842d5c3f97157b4700435ce377308f25262", "08af79e3755dab75ca781e57e3b22b1b37787fd172c9f7f78e1836ca1cfe030b"), ("0d4860180ad3907c2705143d0b4896854f83176d72236d83071b572d9b06fab5", "2e15f169b11964dc9a65d46834db7d7202832e261fe66aeeb85f3fe7b418ad61", "1ac170b14d1b08750c117f5a3bc5e90985511158d59dad3f1f2bc62d62c85d78", "07513c613564459f3a7b960b33e812363e489701ff723442e5eb31c89be12a65"), ("1f3e68abb945dd843864fa802eb11d9ecf49dce7074da3d51ff4acb0ae8ac44e", "02f5c07ea2626b14b413ebd5567206c4417213e81869031a10b81fa02f485c23", "0ed385d0b65f97febb849bbcaf7999cd3e2b0224c59e47933f238e8f9099f4e5", "08bc343db16e59685f13c4339ff85fa06d6e8d69d1cb254e2012f21fc8bc4a12"), ("0d65580cdacfc22291f3f4378e700ecf024f1b5123959f7a87fdccec914ba0a6", "29f0381988ddd356ae94212ed165e8413b271faf91a403aa12af574f7eb341ae", "0baf831b6e01b9149fa56539e8d1cf01b980814315f4300e5debd9281c283f05", "084481abdfd08377df76d3064ae5b17b0fd199c00c07eb9b844e1dfdf3aaa8ee"), ("2fb4b19df084b07d7693d3090f8bce4b0fecd30591a80cb9903e0e6c761b2f6b", "2f14259c89383fc2f067f099f71eca232ac901e728175341b20cdc1cb125d880", "294d2dc9126b047cbc4b4bb473f56611b8e50396aa1e8c4769e1e6b4242f4cdc", "27ecfc7a89901735775e49c7eff83f4ab7174b9006ebf817cead8ddfe78f3e0e"), ("1721de75608b304dbcef7f30f7f9a7200278caaadb4cba70b750673315453dce", "036befce7acaad7702f3e93d311429da241b706b09a8eaf255ee680adc400c99", "1f4ca501bfef188857fbcb008e6f5ace98029356ce9cba8c563e075653c7e5e3", "014360584d52ee252297f0eaf47130168602d8dc62298e3d3ab603bb0cf6f562"), ("17f5f113142354d44cc8bfe402d8278b7566c77852f34ffaa69e66a48a4b50bc", "101500fadf239d9cf8b20d56c2d2cf4a73bbd8eeaab7b9f2fb0fdbe50ce1b644", "3046d31f9a80af0d652f7f7db14306ebee7bcf7de5a4e5a1017a09a5e4ba79e8", "272a9ba60caae2bcb79161225febc88781a5f54a3a9ff98845505126fa425c23"), ("29e6c706b7de41e5486572ed5e5231d8d4365b45c745ecf57c4ff0e0ebc080cb", "2884b4c17fb35a8ef40a3add3094bba90b2c4cc8570fe2073778d30ad8c63750", "28e769e46270d87750cf74254f7b8fae39f8dc90664233e63be45f40cd197eb6", "14f63084abb429b6852a09b5d55eb0cbdf38765607ec27bd4ba7dd44b5f73a59"), ("040360a1a1134760b8cbb5ebc0559f310e3d4a2fd6c8ad82971f4ff90d08b568", "112451dc2433ccacb608c5bdfefb2682e1b116fb9b3fafd1e888f81947d37919", "12d0d855de6eb7a74773aeec9899a244bd625ed3836ebbf8873b15e18a2feb3e", "167b4f1f617662e0963ad771533abed7a30d75b42411a19179cf089035b1835c"), ("2caa45960b1599920630c34993a218edee3602713f6a58a5e26d389acbdc29f1", "1b290de7fc358eec68421c929db243fbc2c0acf060d5f4834e3917b5e074a268", "22e32a82e7de05c63aaf88c6a32541b628df47a78c2c12c4245cf8e5746689a7", "0ead13788c0873b486633d298a8b3a6e661e361b9c44c61fc44a6aa7427f1535"), ("30217c52535131474085abf269183f7b42d1af7967772afb8bad7bdbf90cb632", "1e5f3bebff9141c52f2826ebffe019e7fca1c4dda87ced9598905f5c5a525234", "2d38d3fc22dc8309a519f1b20092381d90eebb2672370f8f00370b61443eaafc", "05f265d63e7b5a0eb2d536d1b92b490f19ecc361b7b3c429913fb93629c72e19"), ("0af12d2ec6a9ba1ac6007f1ae35daf2a9fcdffc5ec3f885c31f27fe9134e3f82", "2e67c2588b97e3a4eb797f953e05a3a6c32270b2db2a4ef820c692288e1f5f73", "270e62b4bfb21ffaaf99959a7d9d6596c0f729a2d5247b021eb862443709c57e", "0ecb877520d60953fe21673775112d72a9182b129c7cd44c70917018d45419b3"), ("12548d0fe85a7ce9816ceb592c45053a140f0c82a1d73547ce234a42cad46371", "17c1c25750a7dab5e31fa7094549adb81b38bbdedd036d284752f2c5de339f52", "05a48c3d10a0f2b072643b91f9cfd610f64438b5a4218515d22fee511e2d2c58", "0fab3f2fd8da9c8663bd5dfacd1097508107bf79d18cfbb0ac671e6f118c9506"), ("0b36b173f8a88bb77d09095e9fceadd918a30d540f18532babc0431f741c8230", "1212049cfa27e35978fb87818b3c122a00456117dc424a24c6135017ef76a631", "066a1de42d14d4f63f840b161438da615355c32d3bcefffe3c9ab6265c68858e", "00e10dba8257aae4685f79d4258370b54b8920f9d2c130a05890d8961cbcf030"), ("029e1d38c818d8de1ead6e4d0be0f702b9d69308609c23955bcf4bc1a4aace56", "04a37f1ba62a64c0f23fcdbc95614a201a215d8dd33606285d7382311587ae37", "2438fa8839da3b63b1578fe25f10e696b56bdbe7ef616f8274ac9d604a9991b5", "0734267ce23073b799821a4e3ed3f068abd2cd6f33ed7fd3be627579fe358198"), ("25160d82b86eb0daf2af89edcc5a86e5f3e690b6d772ee6a0945ebce89567def", "1375bc21329ac3ca8c31c03b5feb48e339d2cdb3ac0e2503e9a329d11cd9e70b", "2de710225ee8164f11196417693aa15151f696b200c2529b4db8c74723b84148", "279b10af277a9462e38403bf9682c1d3b22272bcf0c01b12aa16d334ce1a71b4"), ("19176bb6115750640768d61093a58b47ce980f5d77c3169963d22eaaed47ef02", "0b17771a732babdbff13a14c5eb2a60b1a730583685f84091240abe2ca44de13", "02f27bdecbea466e42b7e44da5e6207118c2cf6b38eeb7f8c4c0ab9ead923831", "1926899b4f18c2912ee959d0b50995288b991b38d884c5cec2f4e3ce3a212d97"), ("1988dd49ae59cb1f209d1c7f2e249951fd50365927cb16ebb5a6799a83d6a154", "0eeb4ea55a026eb5729599d2f67e9e30397a2b7db595edd480f802d0871e362f", "00a09a801d5e0ebe8ea4705e3e29f6e3d97964dc59fe1d66f2628cae84f62455", "1ce49149fc765c558d452a9ec150441a8ee0a2149f63dd36381f1182b4f046b0"), ("05c7284b2258a03de38c32566be394a06f824a65499dd09551675cf3dbf49848", "0554cce9c869bac125136a6b1ece23701c4516431e132f9890194735cdd6034b", "04858a1b9fc943bdd2e1f19df163d0eeca82abb3b36c30dcb7d7b81789c373ef", "0e80c42c17e850d9fded341a1abc512a451a53f9daf34389ca6069292d46da0a"), ("10598d0a4898d7eb1675ae5f7ea2854c5be8b7315a1a0be19a0b25dacfc1a9a4", "1d2109fde7b877b2cebc5563601b82c84ab0a491380fba455d56c78eba2dbd24", "2e643bdb016cde3b7a24ccbc163e11a5dd816ed280ef261d20231b31ea78823e", "2fd3b7c52c67907b16879e5ac30ccf03f11297b587a1d9a737d097e9959fedcc"), ("0c37f646d65372f2d12bcc41326be542f1eeaf9f6074d9956cae3c39590801d0", "128aae866a66d251835f2d5eece563acd9137c59ebffc43f3df093345981a9b7", "2d362056d1e5e8977e23e967aaf543a73d5123d6179a2cb8d8d061bdc0f31c44", "1ac160864ee6a9e542111c4ac4fe2031aff0ac85b863116d30b78315cc133f98"), ("23b31c48f9f4bab2cd0dde7bd61bf328008263b9ec5005302c3dee2026deaa06", "2cb7dc3768380e36146ddb5086b9e55a2096fd113685603dab4f9da79ca4a193", "240856a2ad726db748f50e1200156c1689d650b38f00be382425f4b72549fc96", "215c4b3111ae820e32dd8806705a023335a610e0642015457ff22e285aa0d9e1"), ("22f144ffa149598b868c19a706d6914f069965845d5ab469ff93be0304662b3b", "12be443d046652f196ebc1fd89e50fc422e8c3cae4f71f5db12d51ed46c0f67f", "2117889feaa4afced9ab9c308165967145db566d82fa861b8fce9159424d3218", "22b96707cbae9434e07e17a5076258820f22314d2c8b700a0188d8bd8afb3753"), ("177fe16ef19154422ff1b77f88acdf92ad944753f3a1920e0cddbc045860c905", "1bc7dbb699d416a266756952029c4d31e7778f71d66e4701d5798cec6632ea10", "29833e14eb8280081b73dae77abcbdb512e204c98fc20a71cd7e62d8fc3ee90b", "105b7f6c1029aa3452d15304630bc9d90581d48840a42b9afcc9677df268c542"), ("17ea065e3ff7bd7f67d29ebe863b9e130b13bcad75f7baa3ab026f340f1ce56a", "27379eb9923bc098acd7bc4fa073b2171d99e753fb29ad984196412700cdf661", "1db0b53397237324e7a9c8157f82eeefb50b383bd008cf59c9df68bd49e0ad75", "2a647825046963d4e4c71aa174dfda388e5657ba274b47225723ccaca7607e06"), ("080aee06239c384042e981982c1175929840c7e0cf4b8d2cd4d22d989b483b6b", "1d61c06f5df59175d21f44727ac11842ce07aa0a2d6a004d41d6b8768c154a27", "1930103add7b568adbbb1560e4f0e98f33a64c3edff415fb06e4faa38472885e", "0999335a4e83e4817335774d76861238c9cde415a207e41930a941bf473e58a4"), ("064cc87eebb87a3ab5439a8ad5d3fc831e2dde16845fd2e28873990483f20e31", "046b82079daeb9286bb10ad281c40274516587a2970139c2b6e0f14cd0e5ead3", "26aac753aa8fc8032593ac9f950aad5132b34255f2e20eec975f902ef4873507", "0d3245e490704957d564c4a65b8fb24ecfbe943772a11eca1a0a9bb55f7adee6"), ("125ff00d1294774f7cc3adc4faf8148358bb2543d7c9e9a3c7091097900f0bad", "17f2925fb6c4fa9bfa0828614f7cae69ddddee59121eddf4f0eb2d5a1b07e19c", "127fe0927a8690b3baf64d86183ee5f919a7e4baa3055283dc3830af1fba080e", "20ffaa0a5974f7cb8f94e8310f9d9fa7ab257b4fc6eef4a765139db58b77697a"), ("114dd1ce564a3e0795aeb5eb531b8c3fa3d0a66019cee86f725bc448c0ea0d42", "0c464c9dde52251454c83de40c2a7f10d4374e3756184b64d26b426876383ab4", "14c015581b75516adfce96c4633e71342c6f30456ad02cb610a4b0d18fd82a47", "06497eea8c5cd81f211e0856045a7bd6b1e10cb34707eaf7f453b753453c125f"), ("00707a5876c025c61d596321dff1da4089a71f4f33e68a041a3876d8cf19e8d6", "042dbb72a665b23ae98e4af1bbfd4eb5d1644ee50650b3d47e89b5956375106b", "198a56bce6a1af2b094290394eafa3593c4126f65ecf90cbba26842139664e4d", "0d9dcfd1fcbe76d4a0d9439665c117d273f3fead0a632f311dffff30ae739a5f"), ("20551407ad70edd6b552cb60786e51fa38c8fb6bfe974c056afc89e9eb395a10", "0db878e0cef39513ae25c256c7c04f5b54b293e918d7459af7fa6f1340ad0fde", "0db3fb634e4d061922e0acb420902fdcd653d6e0e38fb35f3ae4802793493116", "0c8974d54dc05cfd435b174c53bbb1ad88ab067c831a315fe3ffbaea7e76bc95"), ("28f7d2622b86a298dad3da9b74cc3f150276c2c99a525fe1caba36f163a19670", "06b5d451e718f457fde809e6259868e83e2f8bb1ab622ff50bc15223f62518ed", "047535f1353e20ca87d400fb27c41186e21425b3fbd2e5c6c3a347adbd7c7122", "2523fcf165466100c51e9151c3a7b2757882a4da6d9515ecfe8260eae76a1cd9"), ("1752c1e8d635a840eee0e3a681a982b44099761745dcbba69e91bc94b0311331", "05ec36260683755aa59e6e67fd7e09c05036baa93366a083d5375e7baf35c77a", "145ca4334f98f808cd3495f2cae788da2d6117d4d11aa99fe500053c1d26c596", "1dd297ba6acb54dbf092975eb9b9e738063b7a9af855029d4d0e2fd5004a1505"), ("07626b68f82b52fada495ecfe68fd9a0823da600a87f9bf2eb403fe5f1803541", "014a38cf3b9874ef100161a59d2dbfffbd03fe7a272e199db1d7d39cead5577a", "21abd7b4ecd99c3cee27ac56228990d5c1d13f867db542246a23d584ce541399", "0f3569e054343223e3e85decd3caa89a04552af2cd7aff74694809682147a4ee"), ("0a734dbec07a754f566193854c923304d657f7030d6770e0c3fd17eb033fca12", "1716ad54a06cb3310073ed03a0496691e0b3f6384f7adc0dc2a11f7062916c2d", "11323c134125e888b1ee281910aa24cf078a8f320c04d01e9709d993920db39a", "10823a03e4b10bbc7450c52d51ac45f4c63e4c5ed0d1e3d050a2a26bd20e9a87"), ("2bc66f9f98c2ddc29121464b105c94a9b50ba3a0d459232a8f377adb802c7250", "127c0075861a70dc05888fd4b57af953409092db09102271738daca525423178", "302046b22cee60449fc8a10230a433618e78d5b3efd5521032ed1901268e1c01", "276027a2199796fe2d999d8646cf0f6e8ff0fd0ea5afde5ba6f5820c3b03146d"), ("19b8b62a0e8d603cc699f367a42dbb50ac728dc6b58aa099547167ea3bb615d2", "05ad5fa0f2f0275f060cb8d7886b39bc1704af153f06b490fe32901ce175ac5c", "2f8a644a098521931105d9efc9f2538932de47de52afe2bc8d11f944253663c2", "0548c947da9ac91db898bebcc452272a50bfcc75edbaf1eee7bd7b52afa9aeaa"), ("164c77183ebfd2f9887942da752845e63d65533c7b4b5e701b455bbab3195283", "2ba6afe8511288e5bc5d36ff73aa1290c3ebf19389ae34a82a45572b8d300305", "1db7d2ee13256f5481f3b58f26eec6347ecb4c48ea546115a9184c24919b3aa4", "0e7cb2de2bce4693708784ccb5537fcee3917b3dfdff4113fea0f5f6a8eb34e5"), ("115e60a439eac3f6be698660e9e1a4f4fdae87c551807851fcfe17c3a59af722", "2fd542754623eb4cdfc6acf1f0ceace788c8dbb0e73b8a4ebd097bddba240113", "13a4aaae24503ee2217f11d3dcda1be784bf7b0ede8880aad6704a0769797eba", "08326fb6a9dd713ee9c74b7a86b02511965bea4e2b9ac5259957d20939f6ec82"), ("21fbad68544757068b2b8527ed98b8d56aaf7215e9593fcb2e996e7434511db9", "27bfcf7e8770098a0cd2cebf3b8d3410a2aec6c0d90d1e60e9a9de9a35d287db", "03f7865a74b62d7ca95cc930b5c0636994dfdb20dfb04291482c681850b3e949", "2c9b8816f5d3304a35f34fadb47bf941bc1efe71be60e9b5b27ecf139a7941e3"), ("04b217332463658e8c333e5e483080216eff18b97b692dca00317c689b9f2cad", "18ffc048dd3367f6246c2dd4b2b68914f07e5bcd132cbec631907b35949af57d", "16d3ca74fb045863f622a5051029d6ce223839bcd1c14aa0ec8cecfd141e1de1", "248f0d58649ff44288f141cef559380c562978a2b2ca387cf9c56c8f79a1667a"), ("0fa259b1d82cedaa44066fb363e7709ea55a62b71b884a04191f4cbab2299594", "13a0882a2fdfa36a058f91cd93444f279454b898602c591d5480ffb70d5476ab", "1f7b6cbdf7a37ced3f570e08ec9441eb4e5e12a7bb01bb7015b26185e09cfbe7", "29fb45af5e349ce1d576c3a8d5102fc0b0ba1421ffec977f52c68030ec286ef8"), ("0a06d28ee905284a1c8cff26c73a86f023e3485d164423abc99125a3509d8b46", "22b9f3d9f397fd26ec0e0358f7fab919c64424a8e8574c331e0d79db7f9959a9", "0e8c4ea3ff25dcb786c2dc97b5e9997f03f458b86d38db5f6141e34cd625aa40", "305e5d1bbae28e2db1b515166c8c56e253f89c112006af6b53c995eb5a8685b4"), ("1ad6db6651bf38b319287b93a6289e3ce4df2a701ff2c8a8ccb92c13e926b402", "0560360f83dc6fbb53510e38b55cfac18a0e4487770d742437f91ee77efd18a6", "23f14d86a5e699a61fdcb26a52977b490a4b6d81e766f9308d8728fc2d564d4f", "13022a59bcd4ca11be96adb436ec60ffcba0e9b3ce4bcf3ca840d4cd46ed8bfe"), ("128e87dd7b4f5c673765babe3bea1a329b022103ebb38fe9e9476a9c31a31f35", "011ea99c511bd463387a16373a92c8972d73cba237d8a5f85ee024e285027cb0", "19c81cbd66156b5b03f355e0a41d727b82daf54f1fc7eea0cf6d22414c2843ae", "22b49def981bfbc2e01a37b3a614ea1ec3c6cf479424b81b04ec0b56a03c97f7"), ("0159888ba838e5c4629dc6077a03048953db8b329826daf113a6b0f22cf0bb51", "2f2ca9557b5f739890d599294ea309e5dce2a2bdf6be75ca17bb8d906b3aa758", "1a0eb39ebcce36033fb24d2d72e347a302b9d2359a19f2d82d41b386b0e809a1", "01cd47b0849f15dc4a63e42e23dc0dc9505a5a300f429c0ff9831d2ce22682e6"), ("280f3b77fa27b8760d701aaff7dbbd3c814bb3e2e80fb9114836f7627e6911f8", "0f5e0c59ca2e480cba993a149346070a616ab67758cd01b3731dfb5087d07c56", "0619ebbc1363b06693e35c9a3dfdbcc7bbfabf6461fb9c0ef0f621e2bce88a16", "01c1d954b2afa755ac8d324fd5fce8e361709032e9a38a8bbf2bbe9bee91c22b"), ("2dce2ceeed7e82ced5bd6571adf2b9976ac5fd6a004523b681b3a05ad8c03afc", "10a9786a3b4114a923ed3511a1c7b232cac6d36df7f5a53ce2790329a15c34b3", "1e27fbea2e774b8451cfab246ae77a5eb57892ff607df103d404d457ddfedfae", "087db7be2044867d7ec2a669ba07a85d1858d6f9b74554ad40b3415e3e281d0c"), ("07184dc98fb623d4337b4a6f02d25c106ceb7ae0b6a477db2be718cffd1069ef", "2e5cb685deb27ba55efc038f0409fbedcd6ed8f9faca28982ebaaf355c05d0ce", "0be04fd90c49efe194bfbe4544b5133cf250f9a74be7a94c49668c3d0b94fc46", "1c3d935820202139262084ecdd05a9944c611fddd9054788007031f47358370c"), ("1bbc6a6b5f0399f556149d1ee227077d1a795c1798edbb2333e89be00f41e8ff", "2e2aa32477ccb7c9b495130dcd114d0e6a3a17ac44ba23b5a72b0242ff8c3a2c", "00965dbadbba5c6724dca7687be1bdbe7ea75c4fba0a90abb487859179cd7b8d", "0035bb2fb7a868e47478dae576a2d26f7f4c46f47dc12517e74ef323a14e754c"), ("0896049fc33e44212d7d6ef61ad8430eda9d5f067f829f313eb4bb138db6691a", "143837dd56c7b4f3ffe22370d7232178e99a1259699e0c3770ff6317446bc1b5", "293ea183c5ca758a3e441c774ef31e9a982673d85143599d1c00dda03d03d216", "1cc6bf16b054a7e0abfc2c0e2a901d7297a6d7d82ae19d3e6fd1881bc1e194e0"), ("2e9b65139f2fa1e90f16e0ee6eea56a3c5477634e2f3fd19fad21c7266c1b2ee", "2a6eb330984a465dbd9e983a0c608f70090a87e835dbc0e1e8bc3e19a3d6c319", "2424210c6f4f0049a0f6aa867edac2c754b41dd2165a231ae551a7dc11d11e8e", "1d8ecbba3c06b747d16bfe789011a6266dce32e36449605b8c9c6b4e0b4ecf87"), ("03bc2f1b5f1a711cc35380d913ae4a37e55b0064caf8662bc538fd4c7c06e235", "1b850ef07cb959d127389f6557a2d8ab9ea25d2a5cc4381e7900a4387f281551", "250dc771d8f2b6aa8d2b0a2ce0e855e592a06e407292ceeeb73ad5f73a8af47c", "16f6ced4fbb71af14d0cda58ce9a03b326d6c23bbc99a8c1db6a2ad1d8f5ba93"), ("11f301b109d00802b2981c6bcb7d6254caa65044f0828495e7e5cb9c80564a9d", "1e26f7893f5b35831dbad251e1c45d020b6a3d4d617c2b540b1f64fd851c17b7", "07c0e1e1c3d868717ef1cdabd37e02185d3b13772668ce71ff9064345559e96e", "0bb83717ccccc87e90298efe4337f5f93c85388a5300936c488b13d38d4b7c95"), ("105bf09bfd69cb6c92c47378b1a6ceefdb36f57a46aafe9f23dd979e536e6f03", "2f52c0902d1530bb132c01f4dbebe026047eadadd24fff30abc15ade0f823959", "11e12d993408507d6dd6ab00d5f8b923763f8762eaaa51df3b13946e87e9d264", "100aa751f085532a11583c62fe1f3c6b5938c2c7ac44886473bf2cab1c96a274"), ("20d73bbc870f47a704c2def2f4f0e73a88b246347254d8305566df47b1bd1842", "2e373d217a16141be46ce43d829962f034e4d172bd46e14b4821bd290e968916", "157f9eae6b189d88ee8d958d6e28b75be173c459d82d6b90278639cf02da121e", "1a8df4afe8ca7027ae80bee3f6b012aa45e6adc4842722293c0be49a675e94e1"), ("14b55d69d804fe7fd5aff0bddc9bf4d7b22f800fe0cd6ea0a344de84dd3fd858", "29116a3c6d91a9d49c1a7c186d0246c63d128c4334cbfcd498ae00a76cac77b5", "0a83a4ea7958735cabe9dde3a83b329e3691c39bcccaaef84eb68daae2ba8cd0", "27a2d3d028028f66fa4029caf967f9652d3ef4816f72ce153f5dc2d6d57dd748"), ("2f70bf226c661a0b50c5cd2d3c1558addb12c408919e53403bade48c5c43b787", "22012bd87f651575642f14ee57b9663809e3414004cfe2ad6dbf03a3540a481b", "2a2f12601fae69c8f53986e43c19526533423c26b9d2b913b42890e20dd69859", "2c7121256eb8528717c50da1df21ad248138d6b23953bab0c38ea55c131dfe88"), ("06dc430221fdd776d8599e1306a5c9c7c787a4e6412b8d40935a2621bd8367dd", "13ee707ba5552c01175ceb43a9fcbf90cd946185a349f98dd37d2a83c6a466e2", "0e3fc94ee382675e0ab418047018a40a520cc3badbdfe964efed938f0881c16e", "13e8288039939a5ad9581b5cb1d8945e3268f9bc245f367490c686c5aa7a0f16"), ("2713259564694d6c8022c895a3d8b8000eec01e2d6b18e5d1bd1be693f11fd45", "21f4e187c5b891668fc06374a18da8b010811ef5d0a3787444fc35f0eb14e3da", "22c38aa8e798d81be8fba63c509a4bea3e6d60ae6ed61efb4476205d2b6268c1", "184663fd4ed808d53d78be62e29cbb75f1efb9c30d8c109dd80cc510ed7f3939"), ("115e07ba2467eb170713019bd21748ef78d631fc9f98c42e5388536a4b5c959d", "26795796aab094aed21a51634888fe7d30e504ef29570e01c24f541f9dfa6763", "2dd527adbe3172187c0182dbc48abae37b18522dd54f4da74062e07b1b0ff93d", "1fd2f78c55d8d862bc0efe0f97b7c6dae8be67c2def05b5131c24c295e5199db"), ("1b4a0ce318e7615f63103f83ab461200bf134585b93a69fc5bf9098e4dd1b4ed", "2b08be4ca3cd752b45350adaec30ec23c6a256fdabd0d0354d905e8f7a4f97d8", "284aaaeec0f8454f9041a7bebd37a091df3aeaa8445e736581161062dd5b9460", "0915f96960c07bde2a582005df13fccc87b7e365fbf99d25955404938f849b06"), ("1dcb67d107cdba67b966fe69a502414caf38a2099c2a4c369b919d912ccea393", "02f082a1647a36e4a00ee6aeef86989902e803f3e0694407e54fcf62e8ec06c0", "18d6e5f34e9458b231f0f0fbd20d78bee6ee9d4f12831d34907c1a3ae6fa48ea", "002596618968310ff198996c2b87034a7b5bb3356b1edb86e4c12b2ed7a1e716"), ("2204c305f913b105d857ca2d12623f57a030c4b9c9c2b91c6d1ffe1c1b3e40a8", "0a15bc2cff4b3e711a34db1953c7d86aa8d02046cd213e32e9c379f6f26b27cf", "2b5126c489adfb8c2f072836cbc222b7842580aab22d0a95bf698a6b143303f2", "200eacce81b44e84448a3a541adca8ac69f9a02f90e735942ffb57ee99106305"), ("2978b57061086a9d4ead5789f2d85b92715dc539291f680f485cff0f5753cee8", "1e9f7be191c4d2125dddd919418c4ee834f1ca99defce3c3506284024c302574", "14fe273f325575e25dc2fba13ef6344eb1b3fe5231e58ccf180ed3afc50a4870", "1ac423fb91e3a591a7b682c7123be79df0976d9a17ec55e1cb46a8fde906f112"), ("1f29f68a9b8bca67af4443ccbfee4d1c9e9561588529a24e8c1dfa0f2a056ed2", "1152dbfe64faac29eb60277cd6f7836868d12afd0f505373aced2e315a3e3bba", "2cd765b876ac90f031c40b5c78eb571a7d8d4a012efb8a1cb83d1d69c0088572", "065fd7bb6988dcb0ceb6261d3f15a82057a84379baf4f46ba36955135e4e9842"), ("20e958cfdd399818976862f4c23433b3e9e9a85873253aa951c14246ec5635ce", "22e79bbb680c7f10068f5c1f7ad99140878df9562ece61483c8a35b7115e45f4", "1e65e72a3c9f4233985832abf80a13daf8a0c093fcf7784fa61b949e46689408", "2b0ff589d52e84ccf6f23e4f70f342c9dacd170cfbff06f01a2c9ee641ebebc4"), ("2644a5ef7b8e86c2e40d397a5d28ff9b99da7d8a1ea5cc3531f53dba1f612e48", "093919e0fb8c1ef42dfee67606350332add04f59b07d2b33ff68a2871948b5a5", "1eec15b68698a90221307a3c81ca7ab4041b162f34fc9ddc5f5c3934c689284b", "1bcfc17734d943abf58695f4c396f1e6962672b97439894bd2c3eb890cd05b60"), ("09a6e5e5968bde8ac84d112c4bbe3fcb58c7028038e5665b3e0342705fecd0fb", "00d538f25c747c0709378cdc144d4a455840b529f5c04639ad2899278df73c02", "10e5bff38a0b840a732a2684f697169833b443b0bea23dd925dce841ac9e4ed6", "02dfd3ca4e63bdb5c6c82b1771339321516925188deb725680a8077d5c250ef9"), ("2dc2f85a9bb18d51d5b6c14dea7013b7e6441a562bdab5dcecf15b1b356fe16d", "21f113deacc86e4161c9c0d519fb5962f81ad4de90a68248084d10d9f2effb57", "062b8455e6ef8c0a289f5eec803a6814a470bbb7e3a389703336e3d5c97368b9", "1ddcb5581684d9d10f978a66532b942f80b2edb803517a6b23925e9e3bb9b191"), ("16afe762acf58d5f1182a35587f06e2e70e68739c02ed8c32c483730f480e700", "1b5a088e407f6bb4ef432429263b909376e710efd059fdb8d655c1e7423ad113", "08525270d1260ffe71c00fa8517c27b72c10d392ccb65ef2bafd61218dc22abc", "1a3811ca8f815aa0cda267bafeeed4295c3ff3c2dccd31c3440f38a3db385b31"), ("20057309cc769da58bbb1d4ba44ad4b85e0daf9f30eca1d56fb1c2b6a6e685ac", "08b4eb0ae5ff15bc25cda5e7639f08119270967f7c3d6daffaced13550800e84", "0263244273f2db82fb77e1d80c2afb4b055ab066eddc25a3c3238e1178e2b602", "2cb59eb35e16df840c6d51cb7cb0af5aee6a13f83b585902bf41be2ef961d77e"), ("118fe4cb013c3e68b596c2d16d7e93dd22776af3cd43710d4d97195e5db67073", "2089bf47e7a6eb8a18b8909d8f8a7ad198130e5badcdcfe9f3fecea69253ad1a", "15f80c5bce5741f98ae619dc30116d8300925cdbdcf6be69f926a24d16e6dde3", "16c4ebec456b8e3ca622dda25f7899a747a3a5933e777846cf2f85f8b74ed275"), ("28d80065e53d677d517ba15773c1d1e9f1f5142f0770e7c35f78281e12322d09", "07723e8a421e71d636230bae1fa2b102ca14023e45da865d89aec31639c37743", "2861f38203e5a5b6ce5b05d345be635c1e3ac6aeb815dba33b5a7cdc8239a550", "255b69cb959b52da6b8668993dd5b7706f22f931d97959ff1c6823a9357b3017"), ("2a601d04a73da7d69cb4db10d0bcf8f0156f8a05f61457c11bec303d608d8c64", "0c8b64a4a93702671c75b50e8b14c524c7e688008dfe05c0b7add5a7d857dc93", "13abe40037819bed4fac8b725409056b12229af0875d5612fdc73e99cf797e97", "10b8312b58336135f726e9d06f97aeb1420a0d4811553f25b3ae2d3a9c664e0f"), ("22a6fb219f918f1fd0716b180af8cc9f0f46b35356e4eb8c3a01902c5cc70c19", "1ad64b3bd0f14ca3b5edbe357d09e346cd0af5baa4fe0fde8e28ed5ce17b2b86", "2b474a2bb0833e90f8024a64f6431d9fa66c9a04b5f058a1d24870b9a862be99", "16dabf380e8579fe2ae782ec64f64f32dbb2712417735e40d593df6d945668ce"), ("192763b334814bc97b46f2957555cc0dd6a1533748906dee2198fa8b73f09a20", "22ce4cfc315d23425654e3f91438646cd8a0a0401e32046edf4b5c6a9183baf3", "0f2a256f1731c337a7848b910569e006a54806012140d9aeec7d1fc1dc5a690a", "1a713e117f7793d88f719445cc16996f1906f6a2f91e8c2a9f2deb17bb7fc94e"), ("1ebeca8bd46556a05541afec2abcc46cace1a640add7229fc92aa9dce2a7e088", "045e0e25aa35e31f7cfb557931de6651d33d06901a1f3cd4a4009bdc33ee9dd8", "091b698686fd2c67ee7fa2cac9dfe7bf8c7e062ad037c59a88d64cd1cefb5810", "1f3b2678dbd9b485b307faaafe5f144e4f96b41c8ec527c7cb0a12950e397869"), ("2751be645213c4005bdfec9ffd38bc672588e428e3552d897c5fec14798a9955", "18366b5cfbb6d8a299c48ef493b6eb6acee99c27005861b553860c9ac22d4f45", "255fb4eb5b76c648f536ff4f550473dd9ffc6c3671925a04bb9447bf4c1c287e", "09470c3878d984350916761eaee2e2b19f5b62164fac8003cbd805a9b677e4fc"), ("08acaa78e3b116a3703081311781f84f08ab5f6c39acfac6a045f2df34b0d765", "305cf305c017a0866ce814b372b215f3e58030c5f828d024b862d3d65cee7a2e", "161595ea3e2a51a344182cb64359e63b24cb725089ecc916c3d1bc2c2429c6cc", "00c7ba8fe66f7913b939f44fbe89a54676b91f9a4a89b66d9adcfe4f5d5a2a9e"), ("19727195ba98f29704719d4ff691dd9521389dce7182a6f4af33a315c0e6cad6", "1f0102a61b564949cea03719042ae15b19a6407d0dbb4607e34b8e7c72dd4d71", "06e11d623ecd66c3ef2b3f349b630fdcb3235864f052cacef07b9765ef689a12", "1e3c2462d4ae56921afa3531bf820afc5152a7ed3e942675ddbccae35981b54a"), ("2c82173aea2e95448469a32ec30aa1bdf10c3da64d77253a6f9a1622ca9d2206", "134616946ae4ddfcf4a0206f16b9738b2962102bd4fd0bcb3c195f1c8be04f8b", "0e458822e18f51c879cfa02db55641f87c9d68ac124a4156f960e1f4d3e05d47", "1412e57c1e064381697740659c83be50c3729ce2d4e90141e6390a2ad521337d"), ("04cfe58fb86fecfbe0230d3398276aaf76ec95e92d08dba07f87a410a071a255", "01a79023308350d68db330b283eccb1f825845962dba4720bcc03074bf42ec87", "2787fd4630116c0384c0001a58fbefc5c4a5c21a9e39d5ad479803d8853e3ade", "136493c6e8334602bbc7cfc07cb830bd46076c358a0fa4823081e41b93f165d0"), ("2b33658a338344ca3687da1238fbf53d10c4e1fbf811a21d4083cd460223601a", "131a77c2cdf19e701daf8bf166cc6d8965f966f64811859042b38259dde44e81", "0ac764f02045d2e493e13f2328f9148ca8156361355ac1a1df00031b43d5d64d", "11b4e796f7438f7cdc95f013081db142725a6bb166e304d6b27da02cbb78e9ab"), ("0290ea6f2d52f577e5bc4cd74d73b6f601b79c5a6d0082fcccca3ed042a0d0cd", "20d60944114c76714a9e748cc25d59d7516a0a3dfc81b288bf409310eb362af2", "23931e43431d5b6dc9661930ecd4b070cc41dfc644c4b8802abdbac81d283637", "044683b512c02020105e90f3fe7fe5d90b9a6ec8f387302084c5d53e74fc9e15"), ("12c827691ddc5607c92f1ab1938f3fcf1a63676d9cbd1294e5588dd21df3b79e", "3021f0850c125823315576516bd4797b20bff88ce2c254bf76fb91b6c78b47f0", "2b205c61aade84e6d24f4d6448266b76433c1c383e9bee5f83bba1f9c429fa8d", "15916fae7e04d841564796c77ffb6f34f654a7c860614d7df273b8deda76ca0c"), ("26b8cd8d94df8d5831014b94dee2cf8183df3aac33a8af76ba98b86d1875f9c4", "06bc8772b08f543328192f824d0f35f6ff2610173ea59aab35732d6b4886a217", "027cf43595657043966fc468a3397d9d15e68269134834c7d20ab116d0ed4c34", "20bf6266ffb688c0a9dbc859b1cf5e23e5a506d69fb367ed66b4bce15259c2ce"), ("02b59ebb909c5501857ef5e82652e778a6179a586ce7c0425d25e3fc24251e77", "21d28dd6bb3c2f7a5de57ca93e05bd0bfb7c69890d45e058d8cf1e40a0138151", "2b5d5fd3071393164eb75954946fba906169ed1a8e55ecfa951ceb1668da784b", "17eb78dcc5447da1753335127a9d9b928f84794143ed8ee57cba07c5aee1c140"), ("2ad5b670a2d373097e6b1b6ea96f2d535c686a8acca0e5a68ceafbd30cda0688", "092bde8a050befe3bea12150475592e5ecf5f55a8a6136399980567da9f5458f", "29f079ba3d61b971efb36ddc87b6812b122dafb9d68b7ab52b50b1d2840509ee", "05a7381dc61e9393a14176614dea2264f5ddca694b6a026be5e72c2033f6c15f"), ("1dc7fa7f44bdc371734efdca0bd20af2c6ec07417da0090c2aa66c77ac2e77a6", "1d7bfd922faea20139af134aa0eb15ea0a421a418fbec131992430f0ad02baad", "12e927a5ca69b0c064c9b8e7832aea80ddf8fa1beb876e2f654333a4f35e48ca", "2c1328dd5eb13711c5549ead7dafbe66d171c8d36bbcb92dc4e19598fc712a58"), ("231f79afae3d067610824de2eb3a2866d3492b058803d8d69f232502b27f2bde", "0872ad440465f3a897edea3576ece7cbc9b6e2675449bc641b53507564f195e0", "00bc78bffdbcb7b050fe82b664accd44413ee60d0840469f788f33026eae80ec", "0786a1b89cac4a299b06a65ca9c7fc01f6fd5cb5d3f61b201af99fde21963f15"), ("14b4a7c106b2d01e2c81219e87fdbb8286fc2b7340e10965753e858656cebe2f", "2b30bbfbe38e670b3c0ccad78f8577bfad32426476ec2950d6f34d9ac26b74e2", "2d44e56198ea5bac79fd6fafe2fec467711b1310ddb8bc174bacf3b1d31a1196", "0d88a2cf5c9fea45d0748941f87566e4b4a03dc1b88538333f66506f90b69679"), ("0bd1fc12826756276d8cb7ce775f76050f4cbb068275f50011258e013cb22b02", "25ac7fb0ab2a49ac030d561210583db1a90d201da64529b741a33940402e7572", "112ebccf828604f7f83f997cbaef6992f9b3cf52332bea4832e210228b84240d", "2a08bf5b7fbf5bf8ca9b6bbe0291ad713b4ce1e1602e0c9569a606d54d76b764"), ("12295e9d5adf73822a258aaa858a879f061effd9f4a8c069140c52bce75c3ac3", "139323f133a9b66b5af322100995217de36fa45d4dd0c95df326371ad45bcc43", "1b9c54bce18f40b1e82c33bdc5a569b3bf64456c9bedf6907ff6ca30a23cbf1e", "123513a4c7256226b006a42b722a4e5458447cb717604afc30d2171417fb1ccd"), ("07c28262fd08a12ff7d00fd6c5480339742af14989f1e8cca707bff890b58634", "25fe6923a28795d8c9f5fecabeea04b8ab5043f2969979152fbbc3a8032b7f2e", "25d6187eee5361f801193dfd8c0cd660483916472ae64f6570409d6247b29005", "1c214eb62abe35c9dd20c8daf9c1514fca636a0d198d6c181448830a18f7e75f"), ("218966fa3f9aa4865c4dfd288d8eee9e5a4e4f59c9620c692922c957132ea6c7", "185459dec95281447c1c8de4f2119f16d047dac397f782f8db590e8c728a708e", "1053638e5d0e775cb1a810828f3027abb0f73e61c85147648bf02180fbb71e7b", "212b151110901e18c7d3a1ca6786c7ebafbbad21cb33cdb4513347b857cd57d0"), ("2bc6aa2c8865f8b9c42b59370136762d0a91d3b0510ea050ba289b3c0d20634f", "0bb868b789b41ec8569bc8a400276230b9358e1a0b7e1dd349b5195cfec546b8", "11c427c4bcc6e9eff72403a23b2bc90462dcaa28d34dba0dcac9c37635e16531", "24f929920502df2cabc8e8e017828775fb5d2ccac922c5522b27f3001a57ccac"), ("1ae6fe69587c4e698b18818345478b9360f7932cceb1a703fadcfa6a65b80f77", "29b83d48e9c82fb54dd547602f6f3c4e29801a0f06c9d30e1b5042ad52b6804e", "2410626be03574909da6b0c9a9e8fa2373db06c05f8a3e2095fe6a45423ead59", "09e3c65d0b1185f0762061083cf1eace4a8178b86669fb26ffdaed42b6b42dfc"), ("00efd6c73345ce60565b66da6f808dc6d4a5331ab72a6b4bd18a2d3376ffa54a", "2c63f89bf19493e290af84e3551b625c86f3be7c8d3a6e6b1c438d5510de93a2", "1a59cdc9e97111c0c85497f9dfe7ec83c2acba272d7b9500accb61541b34e1a5", "27476345a2fe17e39568134703006a7933dfe48500b093c34682bd25902462e7"), ("0f270622b8fd99a80c1cd13c50cffe7c4c5f97b4a20ce22c9a22b4fac6053498", "07ffcbd692f70571e4f56237133b965e95cae6442cbcc1e5798bfe2b23ecc75f", "0f457832e15d1bb56daaace830ed36e9e9126e84719536e5cc1750e2af1ce445", "0055b8d873928f35cd38a104dc0f79b70fb270bf4c1d8f9771045306fd9f6833"), ("1d61250a004f2326c4d174891ec342de564ff3b8e4971655c08c06389f6923dc", "00749b516a6c9daf885734302ef77310feb4d650c88706433f1a864064587048", "05c74b573f895750cbaf2ea3f6c6dfe5d48f8e8e5fe1517f9c752a9e8ef53238", "045ccb04fad60c50dfed2c14af9fd606d22b2ee94b65298fd481524a7256c160"), ("1bc09648eedd5cdf5fe754012b5a6f7c335dad993c43d9fa29ee05267a3389b4", "06be0f5b9eb329d1a693ff02cd347065d7fc34dd070591b2d286eebad1c90ec9", "17cc0fa9698fa782309de1fc5a7a3184adb08bef4d5a893645c079359e466556", "222b47ac312ea714b362f1be557194e2cda7c58982949c40ae89071b3e99f8ba"), ("2a4537f5d490a6c50f89275a9b4324ec6f4bab6395f75c63f293d3439f0bdb86", "1be472ff784dbe8f750f87bc689d19867338dce33a0e4edf626e6e23b387f5a8", "28c334b62504df4c5e4aed433aba1d8551b68fcfc7aaaa386c6098214dc2574b", "277796f875e6e4aeb3d9ee3a9b8d404c4693146d3c4fdfd189ba97330b96da52"), ("2c03e54ab7a97a415e4972519bfd0db63afc0bb071be0fb1896b6f1926732876", "0232d5c2bc6aebb78ab70fbcddbcf1f09d1a9b04bcfa2c2be2360cee3aa3a2f1", "066997386af61db25653e5a88ec349fadb393d76390b58efc64f531a7004e487", "24e8aada331d75fdee61e58d26621711a6c287cbc7746108725204d85f9e5300"), ("267e221ed69a9b313f702e2ed33d4abb02153062e3e15e23c706ea2734f392cf", "1b2c67e5d9fd4c814f5a218470683261c691057763adcf0dc837d7c9db2d3757", "1e0e2234d009aae3810719e4889e0ebe6f4945b83facfb0119e9b778c972fd62", "0878db76e02939d2e9a3fc4cf0af4f7e544f721234af8a91d0d9aa8693b7eccf"), ("0b91f4e32aac9bc3c616aba31844e15cb21a0285049432f62dc09df5976b0935", "02ed14b270824566b5299cecc2b1be3501fa69f26d2a8c2387eb5cfbc8851b6d", "0c0e96a5bc9b4540443a8c592f0da1bc4f17ce543c7bb1d86e0f25d16ec7827c", "185d638ac55507e8c3d4540de909d2b9c004f60f86630e4e15e4bbe81f5ff764"), ("186ebd78a107458f94493946a94a122b57a12234721d74ba2a2a05a2689b9df0", "0997051d6b8d69514f98e80439d54a1b3df9717e74839899e9f8594b1ed6ab32", "2debbd2465fd679b611f2d73b63e2148f71a488a26d047b2a86388fe4ac3cc69", "163ca18f09785881effa366f15503a3c4365615c8ce4b4193c71bb7b21d3f1f0"), ("027be788d84cbd3f6b3d8f5477eb81785c69cbe3a30c08df25ef29fa698b9ef2", "08689c32ebcbb152930f10355a3866c2cedd5a2ea75f29048da1a54cd9ef4ab7", "00064f6f61f0de2e0fdc35268bed8d8eb65c4e2d8c9e9d07366f6af78e1b59d6", "251589ee2a7503cb2c4d21d3661e8e7983c08cba08d3ce5b7561d590e43efd64"), ("1146f06e99305e303e8a70d15ae18c00465c8171ffdef43ccd68296a1289a73b", "10af92043af589aab869d2426cfe0c795e02334dd54398ced5945418e081f418", "09dfcbc174845b0103e0c6bb91bafd63d359830826cd891ac6199152fabc3a77", "0827908eb5999cca1af0897b42247513f51227f9c939669f3c58d002c8acfc16"), ("24c2527cf6d53b5421fa6002e795c9b7ecbb88f475421dd87739d8a31866feaa", "187f3a7034480c5fc802f6d73c311cfd50644e44c8c5293a8654e5a3ddd93b49", "06e919e486c5ef1138d6366c60cde2abb4027a1d9bfe50e0e7ce37bcc5a8a2d9", "1fc354ce38f4c51218fc90d3342c79ac9f1070e6cb5150ad1259f3b776c69043"), ("15c8368733c37194f4d6b753cb5354b095c0ffa2e645f0a18de26d4ee29c17ec", "0afdfd62796a66f4c52ede92ba4fd6ba75dd703179b85244cced63b4ff10bebf", "2248b64ba00f2482cbea07c08736997cd78c2ece69561cd21f2ae6d598860c39", "24c8299e13af3f1646d4988d17a30d2e6c918065df743e28dcef2232f1918d50"), ("03ec55e5d6843c657f7fe8911bb15fd19c281d0a7421dea76d2b8b67c5181786", "1559638216862920683362a19deea4b965921d6011df903b182b720f7538c5e8", "08de4ad0a46eae61283d6b233eec0d9173e308d146c0e5ffe9a536928c912c4b", "1f03fadd3496d9b13480d6d0164fccc3682528dde2384ececfe19c70eba4c5ca"), ("13d163425c0e431923198eab6e294e14bb47262ff76eccab790a62e61bcfca9d", "0065021d22bc1ef8958382619f9d8912bc61ed7342543631cf35e62b890f4886", "2ca5889b65d4674aa3be81fd0078d157f672ca8102380872f25de866b3cf0e88", "1cecb439301c43c1bf312e26870bf19d108e18cfa43761d757f97073a6c94981"), ("1b38739f0aceef34975cafc7a71eff5a966e0a3f72085210cbeb719f44e3bd1a", "10cbba6f6863c4b5a2143e138b14dfee5e8563bfdf97c4898cfb216db099a6a5", "02cf366e5af4934e0931f8aae41caf6db9d404f69d18e00a837a0c03469d9513", "0e8327d6e7db266c7b893ac7f5aa93ba0d27f79711f7befe6fa6a716c0312f7e"), ("05eaf30479eca4d3e8d63b9fd772befac3d1809696bc0f1693321f79900f55ac", "05aa3af76ea71d0a91c1a0cc9fefaf0f0ed6fd60c6670332dfb80547fec734f2", "167922f292a82fcb6e7230230752c9289b167f8ae9c5bc528f17ae067b95811b", "2c92107bfb5b0238b5a13850d806708e791f8e33fddae3e0cea38bc18b8204a6"), ("1452065df4f5442b81a33fe3516a6c99e306a302d8be2bcd32eb59f971ebc0b5", "2a1d8932a30ff583a0e78bb77a150b18d94d12c6e91313c368f146745c4acbd2", "0ac9b71d64c5b17c21767a8dc4d2758e4effe50ab7e516285c878aa6a2075933", "18bad7df9a09645b08ec3a130864e2a4d53b606e79755d2aa5faa220d8330d56"), ("01c30d51832658c17d53d9d620f98728f8f151e9f4fc4c2189f24e39c33af8e3", "1c8f1488c7830a0bc405932eb74f46187999df75e9a33d08a9677feafa2af032", "20505bf1d7839919bb2bfeb45a20de90cd8e43131eca8312d4fdbdc67712f419", "248db94e2ae177ab8633b0f7e11adac555329a472ad93e4e9d787737ab0352c1"), ("28c4afa037668895b0da699904635a5e79f10794ff3d63a038f96af7e21bd842", "0a58a0a3871680ce9dca5cc51131a037a16b42b1369759a6249ece91c61450c4", "2883953ca04a760c52b389f6e519c473cc0342999cdbb114fade4b21364f376c", "00e3e46cc77b37232ede7215806ce3bae383eb615f47dc527976042721b1dd34"), ("12d4726547020b1275ebd47865a17032dfc8c9422198d94974ef5e443519a55c", "2a25d9b9c2b758dcc269bbcaab79b23bc29ff81edce9694baf9a47a6760a555c", "0d167458659cfbf7fb253b5e9b6cea720946f3111b0db05e9be66f23be0c8d53", "23efa3f5febfbe86fb8ba3d5d03c6ded5ff9e3468b237f1b17aa20e4a13cdcca"), ("26a42855e600cd9474c2b4145deedc511c7f1c14addeda20cfb63d7bf3766106", "0b17ab57d9359ea1e1f170702f7584bba386afe52b4ad4e7df65cd0ac8ef89d0", "07629793997296c9f08f20f4c546a779a2708143032d7e88d6b73a1e72b63b8e", "15ed95ef32883a7c5cb96b0950df85c4005969e762fc09bc6e2e559c4af19fd6"), ("004e15dfd8328a297c21610a3cd049b501d1ce37c90c1da4ea822692cf904e79", "1fd277153f67d4c1863ead05c7ee8a343f8fcf244088ed32dbbb1e5206217224", "09f517a55a7b0651bea81b31b4822998434d6d0cf441a0ed679d833906070003", "2fa06a32b2a1084c81e2c01c7e0108b24023a8f9255e71df2e2d2698a7898409"), ("16ceef120798e0470c82af8e801e284757511baad9558ec4d356d27191362e70", "1d4bd7ca09c018edca5abe79181395d388128e56b4590f2998a2529adab3105d", "1365fab2ee03f06ae7b52e9b3710f9c865bac91583ec62005d8bfd408da41f8b", "23e20d2d07a4404ad03a1e003575f4252fa5d1d6ca0987ae799d31ff04d8f16e"), ("233a82f712ca642e9c457f0d8a01dcf310bd6dc711e71feb1f91c7c0941ed9ea", "1319519ebf2ec8d7a694ae6fb904794cebbce2855b2170c94cfc5f5039bb30b4", "1ad9c1c0c2d4cc63e9fa17d0dfabe9bdf43a65eece5d18ae02c87314bd4025d3", "15eb1bcf4dae19718377d5e7ab41b29155d4bb6d744cc46e865b62e69ac01d2e"), ("20308d1232e765139a3c4d006721ec7cd7c0972482b7be9cdccf24807410f805", "106af2fcebae16fa15bf60062725ae51036ca179aca695a559a18bb8ff79d1c4", "16872e1ae0d1a042c4f96711ab983ea02fc0f5e5cde02905a995c4c504d4b96b", "1d6a33ad5f98b2979a6c11b7492a018cc5e77a6cf9382a4c2f0cd724f1efd613"), ("134a3a1afe5371bb848adaf98574a9ba57fbc1028fae9577a5a0ac3f376387c3", "2962adad0dd255f7768763f4a6b3dc9b38b7362fb755c64e9c9c65e0bb621c19", "0b6f23b6e28bd609a3b2cac65d98476345abb019fc0598cdf28c2faa8ebfb66f", "0b474dd9580022e868425721a478e28be9891069be8b7d4c66c88f69d89a48fc"), ("1bdeac510660d4c13c819b6b1fa37897e8ec5ebc7d3131126232832861de7955", "137e163687c279f650ca64d9834f2b3a78c6b683868df321f8ebd83457f1923a", "06cf383faae6a8402a89492b07ab1d9e3b959cec9181613fe61d9053bc021548", "258875d8abd758059e68e158f39e689b1b68b159e0f0df0377ca2b2423277170"), ("14a8e299b1a5200f532dfef101cea8dfc6d9e9ebaac423e1737933fb44692b0f", "276a691443ec812eba483f5b129cd9d18a4eba6b4e0cde95113ffe203ae855c6", "0545e4c44807ef36f57f00d3f3a40902753327d9701813e95c627fa5159c6933", "19e92e9c7ec8a7cc02967edd5bed9e01f345f12acc9d0ced2464681e89b2e523"), ("18dc1664d85226db655eb300b2b39cd7c5a122ca986b20437220f5b5f11afbae", "097a5c81af39227fc3cdad5cc87a530e074b0a98a4ab8194b9dc86125071047b", "20b99595ecb6cc658ab6f573c6d1c08ea17ad432da32f0bf9d8f6d1f1416d03c", "05f083995eb436ce58c51119d3a4759ef6c24c2b11d56222004b1dac26da2a6f"), ("261ef4789dcc0e7d2ef4ef11bd1d2098302dee14c7864c2cd793ccaba26b7c27", "0cc9963c8788e8a4861c426c742e3e94d4277b9ea93aa8bad431f6e018f2b0ab", "2d0df341ba8793c33799c86ad6783f5f2c8048feb441b5295dd86d59054d41af", "0bf16523c5ec4fdd66e4b2a3c36f1f41812f11c532e0fafd0c91e762d1d0f22c"), ("2f02f3b95752f9ae75a5e2981d64b0f93c33201a85b5a9b81ee8773749ed8b6b", "005809eb30b94d398ee7299b9d6df6a93ce9e5ef28d9077eff1f2d68705cb79a", "09e1cf7b4bb2e4e42493ebcdc3c8f3be8ffc3e4de98d1097f285f917712a9ca2", "080a4c2f5679ed181c5a5f4f2be457c13099424ee10412e75f9865416e2ade98"), ("18090bd5b6bfc58d591fdc88163a616b5b5299d0bcd6557532ebeb7ceb7d17fc", "04ccc40f33ca63532e3eccc7771ca802d89a0337afef2cca69faeef63f540a93", "00828a063239aa9c85d6aa5b3e8e732e727dca52529944322eabcbbd79a31636", "30083028177aefa7080d5f7ac58887a3f86987ecf769fc28377d0785d63f0224"), ("0f8a5c794148998ec1eebd55a0ebb3eec7857779a79bc53d4df8792c40427f78", "2da2591a1f10dd04af79101886dff99959924b98f6bd599e6015c94205ad42e8", "24c275da455701486fa23c33f55676008ee849c1e2b0a1a301aa3bf23c3b7875", "0fdf5d987e5cca7f3b908f4eca3fa32316e93c39238b8bbc2ba27b04e7d77379"), ("2482f30c716e6408cd88184523afd6be8476d5aed19ddc9086f94497c779a9a1", "0b9dae02bc6ff993f654b5864cb59886e01f1922a07b5930b60b86a947e65d88", "084fdf782f7b3acd9c0f33479505c81c9a7d6ddcd6a7067a01cbc4c1eef29c2e", "2de3189e5c56feeb7cd23628ba5709346c3284f6db54ad24e28dba2bc45a8a0a"), ("133d8907fc87324bb8e731d1622a835965714d5e77a97a5975518663f0b88129", "09e8b9d8dbe638cc494272ca415ab634a886225783fc04ee8fe4c381495034ac", "16322dff185f3f960c6ba150e14978a6e4e63bf6e4b4a830c29ba8e289bd41ce", "1f0a940dd566221f1918ca6002b7636fee538c451b0e640d1e1053d564630ce1"), ("1e1ea401d97ff470ee27f68e4554b84673c77f06e56bba20571d10e8babedc6a", "2ba7344d006e8690dd31a1ffb33fd2ad5a7bd0442d5b03276c395a4cb16be655", "0bc1625f1dcb249524af90ac75028c64ead550d96f161f2145d6c5d3f8ef4493", "0f64f28945a816564e1a0eb1f9f3cb543e192dfe3fa9307d68fb0407f6a8e1af"), ("15dd2740cc8107976a37733b5b653d3c24c646b3317d9defecf135cfac20de66", "1e137e39620bdc409f08d445ca767408d30877303b5018fd42c4d54ad54f1242", "03a407fa9c3f2d7473c6d34669f651692446af558c7d2ae3bd8579b65e4c24e2", "251774cc57e0ff59a81743f73581b5eff5a1bb641e4eab00e4154dd17239edd6"), ("2d0e486bd3d707f31ed9e0ca67f2c305d80d5f159eae2e7120930a6f7aeb3a16", "0bdd6708675f4b1fdda7227207f4ab00bf6510415beabef8cd0ca968154537d4", "06856e7848fd99756e511b65040eda42ac9681e282a2334982e6b734b2420204", "199d09874afacad63b2c764d169b27bc7c30185ba2cecd3aa70bb7dff3eb0f17"), ("21bdd992cfdae2bd06ba001e78a52a1e9c5813ceb6a26bbd07ce2f9e8bfa4dd9", "141f38338809b0f64eb25b1423682289af27bb237e19bed7c2c7033ad7d12841", "03ae08d1606ddf3da594340368710b02093ac88ae74a69eba7b6e175b9cf0ce9", "1c2cfdd5627fc2a5d86b18a299e424bec6aba5a16f3129b90221905d3f8edfb2"), ("1e8d66c8956eeaf531920cd0509da1fc6a25d452bf66ff717f296d68eec7e126", "12001cc2ebefb98b5beb317258793c340150707e617fdba4410de3902bc3e613", "261afb497ffbe9134301b40daab652c2e9ceb0794bbde285c00db4555f42f6a8", "10f244b639fccc6509b2720a7a33a87314a5b111c4e25d839bcaa81bf8f675bd"), ("20111ffbe29cc4bc8a88e926957194b6b012d478ddf020b059159196a2c039d9", "11aa564b8a1dbe62e8c7e11a90da54b5e2be8d86c909c36e0f78610f0f689735", "289fadc6715b34eccdfed02ebd44b77ad61aaf6c8def3486d287727c65a97d72", "0b7dd14b0e7f96cc9dc27ce9c75e82ca55fd350f300fb95d37dc1c57dac66237"), ("25ce1e54d5f7a54d69361a0756873a648af529535f3fa45036a72b4bda9eac8d", "13ddb662c3fc0252ae33a80ba132d6b8df3a29fcb8eac081a47bb1e468959b24", "10c4ead2c90ee4c2bd66c03d5bace28d830673ae65c788c3da2eb0185f17bc5c", "20155aac45eb1f3ddbcd5b9f2d1d98a072181843808978829d469946833ec4aa"), ("144e5a5f564b0dd49ace6a2dc1580dff44f2b6048c66d75fa98ae8d96d7c84bc", "00559e2a15c64a29417a0a6a2ce13d826771ee6832e562d5a52bc960fbf5f4c9", "24278f0b2c2760b3d912dac719f0c7fd21ef47ac27283c81d772995b6f2af477", "26191c1c040a25d8a60b1eec56b5286a3d81733ce49dcee36cdb46cd5a045d9f"), ("04a7c435779b81c3af2a97de1328d1cea5544644f2f845915a288375258fbe30", "2a292988d8baa5e3648a05e1c2751a86213fb9e89907d3d5f45e49c2ac4c863c", "10315675c152a8799bafef7e770dfc9e78b5fb6f0c2d4bcf878f61f3153fa6c8", "1fa35b67527cb00599a6ce0a3a853ae2da41534596883c8638b9165bc081bee0"), ("037012211a57c82f60bbe8310a013d1685c7b55fe443f7f8747978cce7e3a603", "1e3696f83b2162b9108a5858309861c9a52dda85f9892e83c131794a3cdc1246", "2131b36dea09f0558d5a359da5036e822dc2c6fe9dea235c441452bd512d600a", "20e1fe5f58b2079c5440236ebd22e082b48d9dc359de1b1b2596587558586b90"), ("22d09a91b38c92d47af64472b96fe4247ee01734884a54d2aaaa02279001817e", "277a42de8f4ae62aa97cb7748c25be5a39717f2ca97cd5d7c6349ec5caf4e182", "2846af5e0ac2333d1381eca505c218e8b112b5e71f70ba550c0e1e9dbafecea0", "071cf4afb632be2845d8ecef9f75b583a0e937432538d85317f9f155e9b37393"), ("1b7c875f94b0ebbcbc379e0667af52f68558ce466387089fe9f684dc2a5acaf6", "159c0116e800a52347d55708f2e74503ac1d9fa068dd3cb5882e30c6c14e6f0e", "17592c08ea3c6166d4c7430029e14ba27d46d189b6785bda4c5ccc354189865d", "19fd9efe9814dd7a9618ebdc0622c35155d015cc69d1da2c0c6eeea5748a3046"), ("0431b04c3538e4ecf038559ee860671d95e643749835a61ec36865bb23500e26", "159fa85348224f8548c475aaa8d9bf1121e439ab01407668863f750ed92997b9", "120ac23b783f1ab56e45f3f5525d6a41961e47994bb5e01a67475cc5227f2516", "10154bda655e10d368880cbf44ddf51601c64e8dc3479d3a9dbff0a99075a392"), ("23dd401cabe98eed0fd977fa149707447bd2432873ad31c69642c26f0b890c71", "0953f8bf88e24553a6ef22de00ea0f44fc420d207909598013483ed30dad1384", "263198d11fbe8d746056d2467236a42f51794af6df0368caf36ef16a90b0ea7a", "001601e7d211e44d527944ceb74bbf3eea0345e39a6ce645fdd1df170739ab52"), ("1edd68cf2df542cfbdf064b253cce7921b87328a75218a77f2e682a869a5cb2d", "1d45938eee0ed897e19867ebde3884a9339e2c8ab793d9334c2227cc57597812", "270ab5955308389f218e020c8510e245de76dcc6460d3a73933fe6a07184b0e7", "28b2334988423c1ae0a1f6a832115cca3fccc45d2ec46877d8ef882586662dcf"), ("117182fa6ca7e4efdb07b4e5002287e3975404c312965cc62f1cec19c56fd93e", "1ae68574e07b51833b5c1e2fd68a308ee9ca80d028152a24889e25eef590d012", "1662c515976c6db0dbad18e90a4e01da0ba211f8785406c0d018f72b39854cbf", "0cd8fc536ee922e968fadce942d62f17a00d42a4b6c2a7fd4fac12250a709f0f"), ("3054490603e54350e5b1a17cd97109ef9b5272dc661645e2ce72837ab1a66f1a", "2c44a87f36ed9090ac8a5f1dcdb18740622e03726c5dea96c4eae9021a919aaf", "29c40c9aee62cc453f2258f71c0c37139447a5047f7912001952ca99c2b43534", "2ff239dd8a177fed668d01783773853c0ab2927e9d08a2bd2eb4c1ff0c2d435d"), ("01eb805b85fa65f89451f0b5fea99b3d34b96ede8f10e55862f85579019c9d07", "209b99d735d6dcfc02a89e911eec9984a6f5a22d02ad3d5d0220f54bd5c7ac87", "045c1412d84f16569343f5fca8c0a174f0df5b8c8c9763b1cd87d9d13b2aa84c", "1b0fbf524709e3ce09c51b79a211ff0900abca1422a79ea79b2f7c6aa34330d0"), ("2b980c0b3287e900caa00e806ef900d292fd8a417df6cd281f20dd5c56d0aab3", "1308f0fb2369b247bc9d6fae51a25fd930650fd1d6eff37152e6aa2aa6f19692", "2d32fd051173e8ae314916b648fabdfb494ddf886d3e9737efeec896e79eba88", "2a83d242ef0d2eee01f6bf4953d1b80219b4226a77b8d7229307b751f850b0ff"), ("1a92c8fa43e6e277eba765294f6e5390882fdc0f07c2d277db1fd99cadbb18b3", "0033431867db0dc170a9f20a836aa917c9cc5e53e5a66eae62e93bb472cddf55", "06903fb24bbe5cb0ff8491da18dc01a6c5c50190c9973247e9bc62055fa74ec9", "0ff4ec71cb54f66e6634fe3c98e7d646a69b55d9713ac4e0b1231cdd2165a2b5"), ("25936150967fe5ca5370166708b7866fdcd7bb7142e86ddf7610f134724b0fc6", "0e96ecc313e1c89f86dc1386a35baa0c00c2889e0e7049ff0672145890835c19", "1a4a07019bb60b9d6be9c5f91d42ea4640b6a22c84caa49ea012f095d1cfd66d", "0a7cd2d911ddb29f495a8ae374c81db9e06f9b363a010953dca368b10fb6f668"), ("0bfe42a81bbda75dccf07032efb565d959f557fa935a943b4dfa15bae2866ed5", "0e815fa782441eaacc6a2f02f231a53ee8e033baf3781c309d6c0bbc6e060e4e", "22dcf3b4c1f3a533d55e97ce381889bded597a21770aa6c7ea3362291a37f7d0", "26f94e81fed482ddc334d4334c2adae4f3b9544dbc324e319178e7a8b6d4c72e"), ("298866709eb55e8087055f6ec9209a29c1824b8e985c8be4284298e6000bc10f", "283ab3b7bc25497853c63f1d0d07aa32f93e8a81c9b3c360dd9a11506a779077", "18ded8f334805ff4fe75417b7f1e6fb12447ac4ddd5d6926778c89d6b9cd2d11", "261a826d29b4a78d43f4da9b1430729f34f63fb61c10317b262dd31699c38bdc"), ("0b2881718a4471ef6592bd81ece5dbec09ad03563230c7dbf31319961781b6b0", "0c704d82cec9116e0e300a784702feaf00350884aafce2ae85df4ff4dbb561e2", "281dc8cecaa1a00a8839d8e3e9a678882795c52bac8840ad37da761ccf6caaf0", "05452c3a05df37f0bf14003190b86f3faeeecfbb389f6f31ee3865fa2641fb40"), ("2225685267a42aa09328bef0c48d2cd2335e672042b9b4ea5ade4e1c2d5261d8", "14392638dcb4605bbc2a1cbeb575d6d7514dd8c8fa2ca40e59e099c9f031e286", "10c87ab40424f5ec26446cf464d56b010859ee49b06182cb5a6113b95376a8b1", "1d7f113b6e88ca0bc4e391e28f73156a9a7ec8965255b9f36717d15d97e8ef58"), ("0da7e4052dbc96a944184c9a490141a87bdb3dade2194bf9763fcb4900f4dfbe", "26756bb62d59ccacaf5487cb7bd21e0e3c684b3a440e5d2c47421af6ddc6d15b", "01d6c8f1eb177402adb3d6d490113b60ab0b934630441f6cd26a7dc6a503b13c", "26a5a441a70ae61067c9817a79ef8d26fb767ebf4e343781408ec128c9bfaefa"), ("25754103f83196bef7552dc07ba7223188155313b4a4788f5f7959ed3fee27f5", "2742678adf74164c73d5d8a34fa1cce1f61185a5a8c311d6c32a4c8b1ef4280d", "068f40ad7734bbc8b5d08f22c926a37486eb0772d4b8df991ca08c72268d1a35", "10c1a43edf7c1dddae54e431985fefd3aa2aa2cbe1b544ad52665989f0564a27"), ("0ddf7eefd57afaf67b6563cfcf8db77f21740c0788a547fd03f64edbaf13d5d1", "0fcf6f09d7ae985afbdd9118284847cc667dfd0d74b42446db3b5c0db30cc146", "2c8713d7b91e71eef0223473735298de2608ca5a24171933b303d98c45403fdd", "19a984eada8e37b644ba33e199e403fd035a5e152e86be8a42248181183d7f4e"), ("0fb6aa11d9f84b3b678e00c1da116339f27ad558dbe4761df28bc84f757f87a2", "0456c3a4df6abf67fbe2d5561c2dcb6ebdd85213461985bb2f4962d3de424956", "26e523584bb453259370488fea906dfc64bd3fa9123eaec1c7db4af2b3c1d64b", "1eb00f2b884c3fcc7edbdd841ae55057c5f4bd026e70f30fe3888379c741a873"), ("181c62c661640241691b3e3527028eb8bc68bbbbdb56b3f081d74517d674aed7", "0b1c9c3d6bf80b09c1e9876c922088999e8b80d6c04a6c4d2aaaf654e44adf29", "10e0706fdd10e86c50e30609810ccc39434f2da40f971e456f3560ead4885ac9", "0289819ec8a713020e1ced7d22595595d3d4d5b3956d87cdd62f43e46583b071"), ("178a929423e8655385c8743f97565575306a0d7d2120df3b21989084433b384e", "227ccead0a9d0421bad545fb4ce4f4338346ae4478bb49c5772e3f80dae1fb60", "1a9913884f27fba3c9a9f60139b160744866357c827a84b0d821cb38e346ac9a", "23e404a0666ca5512107b3b0a51838a509eb1c2309b5fcc36b1e2aa1e53c746c"), ("18eeb0d7aaa3204ed6c245c3764ace7b9512d550339113281d51f96ac0c41660", "0c0984ce880a6c02771540f29c8c733ca84e09fe43445555d9adfd0b22e1b984", "1f7995516ce13d8e360aa7c3ce09842c79a72518747b5c9c24d8da06dbb85a85", "0cd78b7665de059a5a614c7c3745066128c64d620a2b7f5c163be9cc7180c76a"), ("1ad350bec3e7311e1341bf5daa60764cfc55bc87e11b3640367b32f82967729a", "171db98723b6bd296d810e3315df05dd70a0361fd556c0b7a2356bdfd5ab6c23", "2f7df9d713bce78853cb7e856147d7ffef8ec00d4d5345a2c5e5b834ae332d38", "2365624dc0dff407a67991656020dca31df4810af06d4a47081fa7879cef6c3d"), ("167bff96f8d495c7c0120822562577f0902c266d49d11587cab9e95ab3fce51b", "039b0fc8f9bfe248b53d7f02ab4030d0589d8ad8ae37892ed96e1fa5a5f3ebcd", "219cf4949a6ebb2cd0c5a1b93084ae4dc89b827a8b3af9f22be39fce7a1d45f9", "1ff755218b4af0f8c46c8c80129544efa693611abae89d3c0c316b6f6e6515a2"), ("0076c17f91b5481887ae74c4ac298944256864939514b496099550c608abc554", "0754c295943ad97882bd8a0828543d892d1f7e00399182080cdd59a9c6d47de4", "1ffa77dff4ae32bcc5fae5fed6a76b3749c74d256d8782894c05aafd1c193fdd", "02e735c2952c51ede16717ec0822bdecdcfbf5a63550c116cfa9d75504d4e9fe"), ("2170eaa30e27dcf4ec5e577ff319e8297cdca5c8027d1e9d878651553010daca", "1e55209071321889bdb3e708e9c21fbf38a0ccc8587e3ae60e830250f5082a29", "04ee348fba078ca3f56ca2d12fc91891a4c03e9ef306f1d555070d293c96c5b3", "1126561770599395d280b8160328dd3d1f114942c8396a71bbf48b54af2f7cfe"), ("0bb68d5b24a4720b8eb08f2ceb36b0f59f260bdb768c92ac9163834f580cb468", "21d463a1cf7da142d32d6d11d5a62fc5bd045a3348e43fa6c41fb7f14a75f729", "0216f80c8ee57f5e47a7b3db1e4d088b3587da83858c197f10318246d1532520", "0a66fa80116669e99b5e1cb916bbceeddf2533106b699e74f48d83c86d9b9252"), ("285f8d767058f94a19e7e4026cadcb415b99764df5cdc3821ab5bf5bc7287422", "0d3a4a92e1cac8388736f932ed0c11f5085e88715a18e2ee724441223b9c678a", "0417eaf4bda04c950d404c1b8e8ae9dd1ef822b705aca296f6b73fb76edcefe8", "122e4dd313b201ee60f30c140e37ced19dbf35486b54584bcc2a6dcc85a14d7b"), ("0887dc7ed84f492f1a7dc00fdeb9fb333e3b2370ff0519bd02335c888cf304a0", "12da4add5d85485f2a9127a55adab6117815ee448a4b95714c386b746b5b5441", "17c430e9e118a3d53a993b26c08faf150b0a012edaf06d3e088c6e5d74efca4e", "074f4f0d4651592f8d2e1fe1081682a51b2f2b331990a8d441cf5e32aa9effc6"), ("23f78b8bc07b17a2c4c1e5b7cdef57d834bc73481981a72465d7c18b52c09ac9", "076ae97d1a5cc483b7c612c8502bdb30d1629fdfc120985520749769288e3b05", "280208b01d0c2b66dd6c3ab9082fc8f06d031fe06608d748fa25e7a5bf3cecee", "0bb310ae09fa8e6f0485020028df1dd7edd046c5e2189d4e2ada6e1243dbbcdc"), ("2321c8872d9aea243e2585cc0c7901074a5ce75b0d8dce4538cab964240add70", "2e72ff76353dbde36a162f97d8d043cbc7f5d95a07ea8da5a40b41eae84055e3", "21ddc73d77bb9b43ed119d57e6aa1419fd279807262e4870ba03ea46654746a0", "0d9864ee417a97ada1075d206a51ccf421d2563949b09a27aebe46752048e044"), ("289834952004ae4c6fa2e1c2f3bcb207dc0f467bbb67ebce10cbf5bad7dc303d", "06def9b32fd88d6db8fbebee26ec376a24334ffc9ef09d644c5a6eeea842bac5", "02308a67aaba60c9941ab380413b120da7fcb5ad65f4eee2790f3508f7bdd2fd", "2491d0ed5fef2cf8c54648566d4299dc3131da5897ee1e58d59d13d1f679c32b"), ("18618b65a83f2945d9fbdaf562d84818499bff4f2afc86cc88bb32d499b37354", "10c69883be6cbadb03f02c5e06c167b0398342f169d76481cb1b082ec09cda7a", "12b560c5b7a70bb39428076a5dc4f1f5e140a3393ffa1d7ec0738e573560a50e", "2f6ff0cd068478a4dd5ed8142d3e773be5cf3da220dbad40b31549c960acc714"), ("02d7ca10999dcc13dbd29e72d313accbd792036c8faee5a3728a3d8049dc09fa", "0426113741f33a5e9ed0f3b6ac2c9f472f3b746b16fe63f9a05eb2c06cf53d6f", "039dca987b82b95d4d3ec6a8f50c5f7af0a5bb95b873991214ff0a71c25a44ba", "265a514bdc6d79177439782a15e39160c619431413874570cd9627a969457d9c"), ("1da7b20e4e025c5cb0484f4aa8318a4015b88b986865ab093292b2d1cace37e9", "1fd2b872cd049e5917b7db2fcb015d41f387e1e3088db16152941c60103a5227", "26efe14f84798150c2aa83757b202bc77695e42c09c266875438d9cfe5a9dd40", "0d9c5e1c9e7fb446cb38f7c90e02f6dc5372188e8ac991dd121dc187c37ab77f"), ("2fb2c2d04a9e5ee0badf7e6d69b4ef03ff9347792d3fabb6192b1604b7239350", "2ffd7c8f0a1e615b77649b96f6a8b80cf14fe01328eb0e2babe29ca2bbc911cf", "293acf0deb7a09ff8179061bcba7ab73a6be156db3b1c54682eab2e4fdd22176", "168c264d5f0f8592cf894990ff0df5e5e249f7491201859dbb3ae8b48cc2215c"), ("094a20d84efb25cad6d80b9489d0ebd1ec18c1c9b8f8ad66a6959d936a5c5b5b", "2d4199ff66f1e72ae5b2dde23cf1124c17f512730bf6c4a43d8af961400e576a", "0741680289cfe54fcac4226e911a857d03c07625a8007067faa4c4ee02f734ce", "2f0d099ad35211e7c464c2e9185a04c2383b028d3bb5c723ad0efab3c228ed11"), ("16dd01f17270433f79029d9cf16a874a5916a150f455ce5b68013132cdf9607d", "25ac0b4cc4ff31c1f97432b4978b8a72f49fee69c77faa3d2c2d6e42db923ee1", "01a12858499e2663432ec6268cf521b4709091c0452d0c4276c61639088fc626", "16a032acb4b39fe85808829e5d73628f47c0aaeb1ca0be797ac9b8989a1c3d49"), ("145a2591648dc87c2fd9d3ef33d2ffffd24caa76779a596b917f6cfd69b7de18", "2238be43ebc576678d6620b1a854d4c3dfd2e9bc1f11b7e917d2129cccb28f35", "2a4cd49359edabaaf48316a7e97406dc44587e5b273bf02892e6a028fb9e16ba", "2b6faeb0048838add22fa6d93affd53090da8efcbe397b99fcf3b8be05c601cd"), ("1638c9d5df693ca123aa637f8ff7aeee42b55d25f869edefa3dfcece5567f519", "16a3f156188bff36dbf80114069ddf46feb35698f16d68d14829385155be0490", "0788b3b8a587b674fbd0660f7c6b30dacc0306f37863879382847b4fb467829c", "066531c1c550f67974c973640e7143ea83567d5ddfc7edaf75629dcca46cf3dd"), ("1d55866bc3afae48348949bffd264e515711585c476e5287d7d69716ca02abea", "17c25a772d1e57351f16ff4384aaaf8205306256396314f3d14c214ee3a54729", "1f00fd4eb8a031500dca6db975890c1c6e8393b2812099b3ca33279e146e4170", "1d03220b650fd96a737f597799f45348a577b0980de2cae02608376743c452bd"), ("239a6f57553a431d074663c2b5bb9100cd2080d1a2ae300eb338abe39be5f9a5", "0709e9395fe80943e9211ae26bd476e028fdd5b10fabb4e2499bedb643106a36", "01493c6a61b0f14e8c5554ec867586db68c8b2672b416961c9a433ecc2a434db", "11800dd44a6f49dbcafc60812e5449354e08f9c7a9332485d4a1a01583ac5878"), ("19b4a3121379dec5576f633394eb570e7b0fc637fd85324d08aab2c59518d3dd", "203c1bb40ebfdf9cff09c3f7394e741bb5896f06e3a7a84eaecb752ad85bf32b", "0ef4d54209319f6a678e94ca1e287c33f6e9fb01133d3e1997692f5728eb23af", "17d59455b1614bcdb872c6329bbfaeb387ff975dd92482e8624240d7241416dd"), ("053dbcabc27ca2fbc99531dadd1d5f78f6c154938edb39e95cc76fba5b337798", "18c8da4176d3d15286379e0ddcc3d6bd5a8fa626860773442b3ca4f24d55769a", "22fe058d824ea479e292c8a8a0ef201f918e3fb0e2325436a2d3cca277c70576", "0e37ead6c665c5b52dab0d61faa168d1b53eb6100009a03f1fdb26140bf6a1d7"), ("008ef1dc4957ebd6cfae9fbae4d93d2e3683f1a58f4e173d9018599a74f5872e", "171b942942f79d76625446b802e4daccd8299cf21a1777f47346fb35eb667ef8", "098543b16fde7e222a89f53edc300f9080f66c20f5692c6d095327496377adfb", "2cda7f79f1b357d9854060381c1cef37312eb4b37c2983f5e9a5b9917b8b4b55"), ("09ae813cfbeb1263bcf1d9d6a938dea7b65beeaccb41dba29f568b22c9a2bf51", "2a0c83a6f0eda09291b89de1aabc95e6065178833c55011ecf0a0353cb588a56", "09fcc3973da6a796ed3cb4e8ecb12cb4cb31a8f3ea1ad065d85cdbb430acba5c", "1c0752eaed8eb476c16ae27efaf9504629a7be9e60c37790b6126317c245b3a1"), ("12477968ce5700b950d79c6018626670a97d57ffd1ab32df23b2be95c538fbf0", "16d9678a9b272161fc3795b9300256db8d0390f535d0506e021d1a7924682bc9", "224c91965a7faaf782f9a609dbb3f9586d0bf38451fea3b068c70b56e6194258", "30141266a337b889328a8909fb57b8d457161dbb9f2b979e2b1e95bf65e5dfd0"), ("1f6f8184f0eea10f172ab4c1639c605587ad2fe070c422416cbd5f91e01d2fad", "01c1864d8a35dd36287390c3678081a55e1c63400c6a6ac324d466d07bbae066", "1bb8ebc3b5f72bc3727b69d78edef3579f79083ed37b70354187131fbe282cb3", "017dc880d09138c713692bccef8d82a658bf29125094bd2191acc217bec13d68"), ("019f58ec2e18faa20b8870afda5f39cdb3d4816859a881ffb218d63a6c27517e", "2df51ce62a7198b3c0d63e9994c33e0e483f9bccde193caa3ccc26f1a91fb41a", "144dc9b93733955cf651e1786615827cafa5b9ae2172c6cb1733f44daadf758f", "14e80776e78a9cf037851c23a50a3ea5322bf1896f8fc28ffc9062a20c1719ff"), ("205c44172f4921f0836b30fb801d94781bd53d9360f684414aff884b2dfc524e", "036a5c6d669abf9934e2b286c66eefb7942310d68824715b0ab1695d34f9ddfa", "1251725170a044c25a54d6ccf1f88864a7204a3829557a9b5890347157b93c74", "2f6d0fca1e7b2257aafec6798ed273234d952a2cf61020378c0636d32a536f7f"), ("25b981da308c29add18a201f98e5922976b3e1ee2798a7c68ab86e3f068b4b45", "024e8f1d2fb31abfa1d784fee0e781b5d8137f0eeec76747219ac86496fe3fa6", "1260ee01a048e8c6948e27d6a3997eeff26baf964a7f13066dc5084d37abc4e1", "1cb2069f833bb977fe30302852869bedb1ad415aa202da540864073fe18d9e5e"), ("1f0e9ba506dbb3e89d1905e60afec5ca2e99c2bbd78314071d19bcaf3358b596", "2126f8a85dc2037fe955ddeaa77b9d8633a2e5693663b62efed0f6028ddade58", "0fddd2f55194de361187ab5bc13127abbddfc4d5b720ce4e4561d04adbe09431", "20f8b3bb2619d132b44e038ba76f7605a39e53b46857811cc0efbfdc37aa43c6"), ("1649b9a2358a78bed473976237abb875ad37d5078cd441b9948fde49030fb283", "0b859baed7e30084fd9bf523b04c612bd1e81b3e81ababa9f1145375db55cbb5", "25a9d403f1c335e5b715866fb87564d675195c15de5201c3046bb4f8d7b30c0f", "2ff89d921f49a3de30a68d528a6546023ae16d6c0dd63d410ec76e704165091e"), ("304e8464a277a7fe78217e151cff75e9c5c187452e97b893ce99a7116a950f24", "249db2c2f942f485ce50adda7c98c8dc46a3e47dba89b6ab8d60c1478f7d29cb", "10c802feac05de138f9452256bb9b95dea822ee0909819514e1154e29fe6b50b", "2697f1f00c71fd27cf2160c68e39403b467f1291c63ec329ed499f1cbdac4260"), ("1c0612d705a3493ad3c84be94d23a42858d682e3eae04f61b3e6ea46a5ed65cf", "21438c2907f50a3d454385355a00adcb459b88ee35bda0447c9895c26e9f5561", "1d70a7f99c0a671dc488021f599aac3602417b9696a97965af970c1af34d73bd", "27b7d46d85fd15af421618fbd559ae8aa30f93b2c6c46f44a03c8dee4628307f"), ("10e1cf6326b126c59f9d03b80c72dd5e78e67924aff96b9a575e124ef25cc820", "181e24412f301f272045c9ad05a81fde0f5efa6c93eb67a9c28345218e96cb1d", "1745516156ce04c457e57a06f59018207010d9538dc3943d62b1ac66e2dbb1b3", "27957012edc544b6ab9c07edac389666d41f60cfa963e18711adecc4fee00c82"), ("25124f7505d3ab2b4243954b1a65aed4df5cb652f41423221e25ae81323085f7", "2fb478e53ca2586705cc232edb6f0c7a83276d8c233925cb6998d90a0b81126e", "1d4f481a9b3031e98aa1eb652f6e6cf35ef0a4238e8212c1640774eed605a86d", "19a9da847bac80dfac106749453ec24b40c7c0bafa8787645f443268a1b61bf7"), ("0a8322bae76a6721037a77bc23d1b3d04d1f64daedcd055876d8adf105d91d02", "2cda6f24e15fb426f436ffe5487d15ec6ecda057bde64acc8a058cec812360dc", "0a47d893cdf99b9b63bd9c822301a0647b30078b8283be3e343eb4e2b28670a9", "1f6b63224d8998d1be14b1369d04acefe8a05ab4bccaee4442c1dbb49e3adf66"), ("108309224641e7169e7812dfb099404a6045910ddb8d209bd6758077a9c9702c", "2a21d2dbe577a372133dc9b8bad363042bbc9e7669d93b87586d68f82f935db4", "010fe4ef8c1ae1d672c163efbcc6dd77494a16c76121d0bb485b6941063cf832", "2a80a99250d0df73b08e5eea07b3947c8db0173f06f0f35bc9f7b8aea78fd9ad"), ("2b44f3daa0bb8c2422b2b5401744e8e0e24bbc9885c37318ba89951a51449712", "08bf03a78ffdf2d3ef0c6fcbee9f2226dd68f03d1f7a54dd943056678283e9be", "1b05cc90360db1366b4263a4d59cfb559f026a834feaf820306e13c866e1b2fb", "21420e5633a493681332eda010055836ad67fb7c857bf14c1f9deb8099372308"), ("0de0781471546e0a11a29d37dbcb278a28cd0a39fb333e107625e25a9be330b1", "1bfd2dfdac4804faa48f4aef240502436c9db48071d327684b19cd7ba3850695", "196326f16b451844c4cabe9be7af785e95af20605671fb5cd64cb2957eb1a9f8", "2ccf963550dee9a874ea32b96aada014c312e54e023b385234d0b1a617991365"), ("1906291cbd21396fe53ef22307dbca0f9840a603b6b4d07366238178c044783e", "2a83f2d2b5f9b3a9ffe05984ae631bc905b5907e2c3b11f84ae04e24320b4e59", "1d19a4f3aefa1931e4bd0a4477e3c6796a34d95471fee8d566e58abebe0b4460", "1fc3cf6278c9c69c4b773033b708341f260746a67d9bbf97dacade3a56f16a5a"), ("2a72e33d39af2fe149f4750a81dcda2492fdd3829358475cadce24c9ad23240c", "15845ee1fa3dde2c3a5a1212cd8854448c7cac4a0aca82ba863fb198866f5728", "026f664d7a23c5002cc49a78cff0098ed64069e5371bca3232e4f92862352732", "008a0d67ae219412db7b651277f35d17959831330522b3590035fd29c04eb339"), ("180685c1f6a72bac2fee24058535ecbd728596ab144aa8d167856f6148633efe", "0508a3c51d89f3936b830f8d242d8eb994fdfe4d7cccba688f103a8c4f8fed69", "10e66b0103235ec98e7c815f1a0f0df4211e913ebf82d30e5eff0d8c67a945c5", "1a1a0b3043c44cf6b00bc6b1dd234a0fa31d8806ad96fc57eaa776253588a62f"), ("0b7c7474a5be22c8c328c145553fcade927fdedffde8f2d50a7a88be8d9976b7", "1534bc0e4b92c8d475461b239441435dcef6947dc9b4d628bee5223f3ab5739c", "18eef11ab76b9d8a48a00653bdceadc594e039ceffc9f3a09e2dc1af15a56721", "0ea892ae1b5f1bb7ec3f4d7a61984565db8e5a9c448711dcb4325a3c2bd5c332"), ("0857e0f931182ca508642d0d7202b12c9cdf786f6ad97ff9e5445083ecaecc1b", "14c9b17b6e4640b981a62bf10f12a8b1ed20a4bf8958247f3ef20102a70f3604", "1d25d6d829576e92872ce3692a8453de6fd5f09e5e4eed7e6125518a2a18dc34", "1e51b4cc5807f0d49cefb5dd888c8e60c56ad37551212112bac2b743c9287b37"), ("24eef14d4e08427f179fadbaafd5227e2403370d60c39489bfebcde035b98f63", "0552f94837a9430f2957f8b4a4bf14e2192067adfd4ff2fef9c097a7cde53b94", "0a4591fac3ffdc3f0e87faa234a6673bd0d815ca75f4e2eef6d6064178579ff9", "0782147c2b492d6411050e08fd6296d12d16941d7631fb60a75df443be84a862"), ("0c5e25a337ae15d09e95e9fb6095363282cbe5969bd7c070eb7ca98b5f166e5d", "050f0b992230a426fc9bae53db276ea7c3bf8e6ffa8b01c74806b781532c95ce", "00a21603bd90602154cdb87f01792a4b27ad60683756e91d7965df77711f3e1e", "08c7f96af46a8eb353786d416088c741da192332c09b022a268d5b74b3073151"), ("29132af7c0d4c212bd573fb2c7d0c238ff27769af0a6a2bf6421ce3c8b541ffe", "248e3d5b5abd7e782cafa628fafac594f3a7a8f24391d02c792cb0550ac79031", "09cc0ef74d0359c97b28bea38e423251b9ba56ea297c81bcdbfbc05a1d25eb3c", "2e7d57f1a897560ec05358434ae3ae96718da48d35a13795b3af8d2aeaefc161"), ("1d9886a2e21e110b0fc09c4ca9cbed1a3753d663f47e0891005db20436004bee", "286fe531e8182040952982879d5d10ac8ab02a855720c1bb004cf0e109fdfc49", "0e5d247d797ccd529e28054b4959bcfb9fff970e83045f77238025423a55523a", "2ff6793793750831b820c2ee3a6b1682715e130e2d20fdb11f0d9c9019170281"), ("2020884e3a904886c384415c51dc7514c5f4ea0b0bd8e7321991e7d935e9806f", "1ec5dbdff2c9b03fd8bd4e35fd975054f073b7ff834fa602d8f11b551125e026", "2c4906df8c580dd10f29427eb0131f6ffce67bfffcb9831cbc23f4606c35adbc", "0a75c3fc39c4efd921297510d714ba28a4ab0d5238dda4673c71526fb20fed26"), ("280e6e788b3c030881291d6b7c1e7fb86f24c3bcf4c6f5da6f0b1d3d7701c9fd", "14fdf9243cab4233b529951f58c3630663325ebfcf549e32b2603fdd8af263be", "2b8d60ac6606a728c1cc79395ba0e4c00e0c3d04411e1040bd59586c7932597f", "06166c07369509e08de99597476c570d8186815ff51a20f2ae8c8eb14911be31"), ("26545e02a76670eb512c0b70c39155d96faa844bcac4eab60e6ceb06c6f5a0f5", "1e5c9e866b5dfa3ec3488818f51f7fb7531e435c2481bcb3f93c5c45a63530cd", "29eb16a1cd284bc76e12d8765ecd99111ecf8f96516941222fe7931dc1baa96f", "13ad2560aa8e3f2fd2fe2cbc552bb7d7764813d941a8ae8bb94b1b6816b236bb"), ("10d4b8916fa8617e765443e70b81e6c805a1340ab006299d57a4afb9806a4938", "2468483b3b223e9a8eb6b480decbe0171d31ab7683f95fe4f39d26daa80d5325", "15eea711304ed726a27dcfe406998f4a798768b499cfb878bee04128b123926c", "2cc97802362ae02403805d9c31aad53141ee8da8e778721731816b9043410dc6"), ("2b140dccbef2ea248c428bfb0cf87b2884da149b6cfb5f2e09202705b8edf57a", "2fa019ec2b24a98844fbb84952a871b6e70cf25817d5b5432f17a2d47c612c49", "0b6f86cfc8584bf9f0b0f6beb3bc1ad2747a7a47f6ab9f7e89dfc03bef1bfc3c", "286d29d0bc87f2024da6296aa54979f0e5e3f2744a53fe6668c79fe686d29aca"), ("1e7295c893ce9203c16edff96931491716def894bb3def733d3a66a83fb78797", "2f66802780f479df77100925ffc36a08d93236d91d459d1dcec496043de925f1", "0673e054c3e6bcbe721b944cad5656457b8d0a47bb79f867af373da645c1275a", "27ec0c3211d466f10ac521064c03d6a3a8d0ecf7f9a0733e2a0de490da2426e6"), ("1a416e80fe0667ab1ff546825e8a15afe1976ef7bda19b712704040487fc12fd", "168e8eca063155a5a43fede4d261c3817d152bd6e753991dbf37d8779ae44a1b", "190bfdcaf698c9b2d55aa45a2e93a6fa8562eb0201f8355e549c851cc494e811", "126bf234216ce658a216bf91d50ef1c14188a08485df88e92f8fb939b496afba"), ("029d4ace54e608b3cb989f2281f136e2ad032efa8cb076159dccabbff7fc3ee3", "26c706a440968ee673be886021482dd23976c1962b1d055a8797934e70558ace", "0d9202e1cc4fc81160f2ade807a26eb89feb2aafbccad05a5c14f142c0c31f31", "197daec9c321fc0840b792c220f313530e59748a403bb4e8fa615474e65fad07"), ("112bf1e5c594c0e11b58d7236f4d1452f65df25312a1207ac69725fd13b55207", "206cf61b3df4ca31bede2bd1156ab084279764bf39a8497149ad8e9562da1ae0", "252e2f552c4ad30d9907f43e376e4df808ae2ae3a1469dc2b81be36138288227", "15caddc650f063f7a9cb2ef3d7e7ae2214d53a40e312d6cf5e3586f6967a543d"), ("2b81b8128f929d6f4bd7349416c8d71205a160322f42542fb64a8c9a930d8ff8", "1953fd4bcdc8a2a874b00d87054d99de5d9a7f06ef37aed2052157f2aceda480", "2f2434306434907fd46b900e29008f4b2b43d4bae6861d280795643dd0706ac5", "267ffc887e42e5b0c7f072eb0b12a45d859cecd99b8fb4b1bd2d1dc289a5f174"), ("097ec85e45321f1f624842b047cb4750b4db58cd536dd61254b489c0a9285256", "0981b0e8fc497bcac62f727392fbb3964643a86e23ffe6b6a6c1f868088c1cc3", "0cab1f90f02cd73673e95ab123ff0d51cbcf478b82968f2f8776c231a69424c7", "2c381005ef1b872b406903284fa6d51c0359ccf9834d1f5b02af1b0b5b5009e0"), ("037791ee58ee25eca223f6864a9437f58b8bbb2d2e986c823f55e43345c5e76f", "067204fcd42a9227868e5149030c1a6cfd4ad6cba06dc7cef96f53004c359ae7", "21461740db6cbf26df436d510edef49e2a3d30015c4d4eca80ad3a54ff467850", "0b8fb5da74f075d6d22ca4f5baa5940b57553bc296aa27c97411910e86b4ce59"), ("24bf3053b989b3b0820d57f5b8d1c8ff2a3bb60401c528b0b5b09705b09dad6e", "1c5b4a1bb786b05a3ecbc780f73998af309aa8e668a6f822203b52b1d63e36a4", "0c224f2334a437463ecce057218644c329c0213eedb66fcb3e6e0c42d20af5c4", "0ead4a27991da05db0b7b02e7df20ce36af616a83f9b49e53e8cccd4164a2324"), ("02b4aed8e71784383477578825a38986cb9794cc584e3d4d8db641105ac35934", "18166f2086df558045a05d1b4a9fb034ec3c6b53759cd4f50b4e035e3ec9975e", "1a483a90c9d320351be710ec4f3c76b45ea9ab35917ced0d9086d52ed4dd068c", "28760b46ffc6504db4fb9d43b0656d09eee48a5bba90a4496800bb275235dd02"), ("2bf234dc627ad3086d9559f05469bf689ed48370a919b4f799e025e48629ac0a", "2da28b16a6ecf2f5eecf61ef5e1ea136a532631ffbc9652000806d54789f631a", "049491f4cedc9ca76e27f651cbc510eaf18e500cd26bf562599ed9e5c15d9430", "0dbebc2582f004c83f117de70e99534a8f1e7dca69a3b97ad88f379de7a98281"), ("11925692ead8c6020086bd419d2d036b2af787f77be48bf2c436ebd3b4d27f91", "0a333277581adb4f6cd79fdc23ff2707fef7da843d9c4213a9030d9664f5cb17", "2b52da5775d7d3bd8c7d1fba2f6e1f5440ac9dff2451dd55430936ae16c5e331", "235c6dbcad03471c1d927564cfbf205113c78f450b84f38b1de08257b211bc2c"), ("236c4283c8e6bee703852665c33ca2612ae024f380bf59588e971b7b67e27817", "0b1c525a5e74a3f2fb601dbd9b62115a90c03819fecec3e476e89f655a09ebaf", "26a604ea02650b49fe963781a2556c0ad0d59d030ba41783b25b5c8a93d394d8", "30015a4dc34fe4545a66897128cba838ad15de987551e13154525112cc76d404"), ("0e94db64008b340e751ce04fef4d16f17f5e6faaace4c7c129e32cf93645c570", "27a5c8335fe5f045238d3301afae35722945bee3f72307cb46ff47310055cb50", "0211bdcc3ce9e97921fcfcb3fba4d0c4711909c2c5c79318bfaeed6139cb31b2", "20748cbe6e98914bccefb5be674b2c387526116c4db488d81c200077f0e7d1d6"), ("164b120c2c6e07a48c1baff9966f9a73bd6c25c56b3128837562874c11948f58", "21c95e943f226fe044cf700add59cb685fed1da323be345e4afbbba193ec119e", "20ccec5fc1a5891263043b82cef362e2a340028464facd995002dd150b72e029", "1e902f6d859ada7ac197780de12487cdef59cee10de1011adf42c0c76e2f61a0"), ("07410b9c1a4c89862365219a6da33a2dcb79479424ed079dbfec4a8ea6d1b2fa", "3035f3a608b4fdeafd33f6ad53422e21df1759885583d5cecf04ed285f48616a", "227012678a6ab9c90fd686d21d7e418fa5cc580eec122740e232aad5d801318e", "17dc5d54197e0586b78447ad0923c2266822b96804a544bc743b3ad29cf1768b"), ("0132376e59a98535aaa681b1ea7058203e1b25ecb6089008e0a509f9810ffbcc", "281356265e373cecd5dd8cdc72ed6902089fef874aa947125a02e9ff2761ae1d", "2abf060eca75b16e7d1c3bbb28435696fc5050292598c2bda4b2b29c2aeecb44", "169b82d3e874cca06c5144eedc66421ac7da6661bf3c067bd8f877cd7db0cc78"), ("1e8c8561a936a4a3c26232acdd29eeb78dcb017f00562b473329d598f0b3864b", "10a946873fea5d31d60b6b8dc56ae3cfee4e8cec264a3ffc04ee2757b14b8507", "15fbaa2cc4c0a2e638f2be40e9075eb31a59c15432be2a7e9f66a4364943a4ef", "14f6f77d28b8b8f93c47ed0d42e220f11191059f11165ad2a3909ef9095c14a1"), ("266f8825d6a53bfd1f89a5bb81156c1a68b25d4f20e1f82d976cb38fee0511b7", "0bc4d7486ed641aa0c01ea19987f1dc75765e25403a68f1fde0a87f8028febfe", "1da3d40dde1b715e72740916c1706158caddb58a42f8c76ad5c5e3066de6dc78", "1b200bfd5708033c1df3542c50c30d9a27f31c0cc9847f4c2c001e98e94b76ca"), ("1995c7299b0937f0a0f09967b8df346541bd5a91ed857aac43538e69eef7a6a9", "0e5b7609ed04fdc0a751c3a325b0a32fbb2d736699a1b5b5f09f2d81d2978925", "2e3ba97de8fea1f58d1c4f58da0ca9288624101f19e29495aceb2b4cd7f277dc", "2ece59931e7e21830983b8eab72a463dfd333254519c98e931a5d6ee47c2a9f0"), ("2fc31cbe0559b4f34b5ae039b1f476b500da5195282d4812c9f3c9bf95682c07", "17462849e2c766b8f780bc671fd2ab9114bd935df8bfe5282cd435306e34659f", "1a51756c0ec2b4b978410e265760a1af59e0904fc7309dfe5d372c0bc3a9a12f", "218178bf0769e4e291d9791452b465a53ea6a8c9d3b86ff7c6ea2f4603795bfb"), ("232af27472deee0aa081898105a21ddab15897e900f2581367442034d20faaca", "0b7488fc749e1ca9461a5c745c29ba74ae6c3b20661bd4c08e7c2e43e2535364", "001ab0867bfe69e3497dbd9ce41582534c78c1f6fcea50f148b25008ff82d4bd", "143c64bc74d405ba36cef457206cd9523d5833ea39e9878fa8976009e0e578df"), ("17a12179b8acbb3f250f7421e90f704dda1f5981e5cd158eb91c2abdb2e38f76", "21fec5667d351300b9c676c4dd79825f9e8511bca703579feff7105c6df521fb", "050a0744e40644987ae30b4a67967cdee4f451bdc6aff76fd3d3e17d29a672f7", "102f92c35cf9f642b743305123f9566b3fd317ed0c06d1c70a148705ae8d3acf"), ("19cbe587b92526001a254fe878c426246a5ea83c877c526a5d26e8a860cf62f8", "1f607dcf0a77cf3f53064ef95b35f658e335c2e0d8bd1612c587cf181b88ea4f", "0a4ea00e6cd95eb573b6a0da54432aedeca78ab027bf33c7b78c2f7b643c446b", "2e3302473303961d96d145baa1b5f50d81ba7f29279e530e6756a479ca2cb624"), ("2098a1dbbdc1c5ebc2a51091d1f1c749724f5946da704c43f56c5fc371992100", "13303643fb0c37096147350fe978e07d20a5004ae9d47cbd3b61aeb377f7c0f5", "1e53a1dd35549a8b6001d42926331d2a3ef3eec683a444394bd0a4af47ebdb9d", "18b5adf64c6480b0344f19fcada1f26c180804bfe631d66828930ebb9122bdc3"), ("2f4faa3c6c16e79343483dade4e47278000724c70e1fa86ea57f7841149e8cbb", "214e329839820ba9ff9c29aa414b1512498cb0ba7cb11d9ee1991acd015888dd", "02e0939729295eb1522f351c8aa3eed6881f5499f7beb92804b1481b6b80312b", "02cc103831e17db4d73ce2260eac7aada1f3c573491b1c637a1b5297a49e6fb6"), ("258e13279fed281328dd224785f587b5ba34c8f33352274bb2fca2621fd64563", "02721b8c60ea659aca9703f54b480a5b64193cc0a54b34aa605e21674e748f61", "24677146d6674c92421d9387b6b0a5d079f9ea7180df2bf787448dcd2fe18b93", "287632c6536d8baf7ec63cca0ca8be5733a8221eea2f0d1cdcaaa5a44050399d"), ("0eae1fd81e2fe4bc8dc6988e34f4ef3a04281e72f5c934898dd9a5c99bbef43a", "0a3fe3a03735dedfb198528f69ff7e561a4915abbc00f05f20eb66c3a65d828b", "1f874ade5aa358201d8dc0f116f60a7cb704e3630b00c8a8eefcc6c9737aafa9", "1419103effbac1412df5bcc33c9a03f8f31f86694a5c7dd050eeedb53dc1daef"), ("10ed7048c6d7906f0bcfe4ed4524a5da54e68c2b7529c69a98f28eaad6d7b280", "2fc3f83bb5b28cc5947b29a27de78809fb4ba000c583d0b4a28c9d4871470466", "037f2f2e11f5f54d0f1b0588e56d33fcbf82cbc509c335bb04eb207803ed9791", "2f8decb8d9351adb6b259b60352f52a80287f92cf124d832504eda6c5417fd27"), ("243ff905746968f435e8e215b1469d0048bafa530b40fc9cea3c2c27272e9ac5", "210cecb4029c4b0b3096fb54c2b85f06db9d933459b6b6c1d81283d0c7b2c614", "2f74c80eb3bc05568f425f7e2a4b8366bfd40c6035463b117cd29978d9864d0d", "043a9a48e7538384811b58ade6015e1892f257cece1039059f32446adbd51c62"), ("0e232ede75b83d4772a8d9f8017e19d5a019834f9502096f803bb14dd6b2b19d", "2266adbd95449c1e55ff2db469604192bbd24d15f078776b3b03d10fd445d305", "16dddc67c12edeb5ceb66752466b60172f397cdaf49f00e645c9f21d549d4b9a", "07c684142b8b8d19f8569f543961051ef2b3d61ed07e4e07f32fb2fbea393df8"), ("2ac96599b0a931301090a08fa2b2c3f38aa36357d7c2ed64a4aa5ffb2e581db2", "260d4ab7ad996fa6e112bd3f02616aaf030eb949c0e79273f558727f3bd567fa", "19a8be38c1f4d8775560beb35af396b30c6fad930ce7defa06378a578f3ddd17", "1b5486865723856b4acbe09d552983b8e324a8f64a35cdfc9c6103c878847c91"), ("0c2270cbcee34cb688312468ca98d665b4a5cc6b1cf49c26e2e040e5de83e8e5", "0b67565bb5b45c8c3c5e12423edf2b08dbf7ebe50fb7bf67e199478d34dcac91", "1df03498e9b8494606f9f2b9c04d95280c794210661566093fd7cae851f9440e", "01b7cdf3389e97a379f4b632967df49b574a774b09a9858bd2836bb76395d78c"), ("1b958cfefa677a21bf873c9263ce44b21312d537142b7c9a6f11202eefbfa657", "1a056d2b3511c954bc2fc54e42af79305903a838ed00955c0dba633596766dd4", "230b31b8bd4dbeff5397bb0fc4f2343bdbfb18c2cd717da75ee0cb992d5e13bf", "1970c2cf0bb736206f8aaaa1eaaa91c1861958df8b92ad8d56ca9c40974420b3"), ("065fa26f3832dd3bcc563daad5ec48db9b4bed37f82dad1bdc1d2e4f0695951a", "1e708cdc7613a929662fcc87560e5986b4211137ccffea0143db8ab5d9339ec8", "2ba75f1e06303c1d42a8c7ebbb5184aaf7018538956610b223951d1a64503d89", "13f87ebcdd0397f39d7c1979b51a67eb25f2ca5a4a6d91d284b74d3e9a41ca2d"), ("19ce75730c3c1489518bfa1e2fc20354a8fae0b847b0fce56436dd2b1d84296a", "214f2818a541043bfe68de298bc99ed70b7eb1a9c83439a4cb4c597b8cb62b9b", "2bfa8a4142580a97f68827b8e48e1be13d9094a9787c8d10883f8a7a1a139970", "0b3a62fcc7fcc7cac51027864287882b63a674851c980665b4cacf29d20223ce"), ("23a648b516911c5c25f152724287bf0ccc622c841ffe9892183c229bd4ca405a", "186da48afa411970d22a008b007f036857feed77c3f99dd822db00dd5c974a1b", "032e715b6b6e5d0e6ba9c802120de55f4a87f0473fb1662d4e3388e7d1c2c446", "074f3c5b334d0c8b23eac916306884faa04f23ce1162bdee22590e806b6d9bcd"), ("246030b79a547cfaf1babef0af5b0faa70c6a5d2342f12baa7e96cab7adfaada", "1ea8f733d35155c36fe23e31affad73971da44bebca4d5c1b50a408b7ca185ea", "098f81ce6cee8ee677437022a1dd6ac04b1aa4b2e632e796e84527c59f93e3b0", "0665e473aff79a50eadb0b8306deb1af23e94e75d313b265b7f943d236b07892"), ("05c8cd6e846eb9745a8c87ff4da41aa9ebd7cc6f0d79ce2cbfda257ab0f6dcf4", "06be4d7fea21c5135d9564f93136e2d4974c2ff15d33fb30d6fd4e657bbb703b", "19fbdffabd42e6f5eccde3a7d395c8fa1900086466b8ba39984d0d6e8172d2d0", "0c6efadd7f82993a7ae114a4ef53474ab522c1a34264681382640b06a493861e"), ("05c05779144b7fb652ff93280aa7234815981c04d8a8b9ad6c657505a90a86a4", "2a15edc205b571e027e0f8fab3e19298c8ab60c74cdb8bcde44bd6e07c0175a3", "1f1a9029306353d79b41646618438505edd63a5470ceed74b6a88ece74302397", "0c9f5fb2bd9eca25426de39d53638cd184523830a0e3ff7971bdc6aee881d214"), ("2ddd712c816bcfda6d04760fb4a39567715d99b4d7138d90178a36d6f0d50c85", "1da793eea0071d4bf1a35ac87986fabeeecafa86b35fc7132634430d9408c3ad", "1fe8ceefc1133dd5e4f2877ae4fce55cf90864cac722fdc95899b7a1c2954947", "2da2373883dd835b8dea47a232d91ee214a231a1fb2ddbd89aca02dc9427fe84"), ("2721647c4842e98d005ee3e94a081286ad69a23761100a2864fedb4baff11242", "14e15cd3aca22238018d2142e0793f19552a9a6381e1e984231bfdb77a9c27f9", "303526d03b0fc4d9bfd6fdfbe43910ed9f1d26ce7a03762b45695d05530faa32", "07ac0ed84a95ab8325a5d3cf22bc5abe116d678a448bda88e214fe31d7841671"), ("1a8e29c7ab09a7a14011dd08dd2d38c7762842e08850643edb16563eaf4e1cb2", "131feef55c1ed18675019ed69b77d8ffdd5fb8873080bb1c7f63c168b358d9d6", "1eb5e1255cf0e40d445383105fa483c7b2d61e2e339858368f5be697e74d4227", "1d8f928d1ea3599e245b22bf531350604f4a4bb5d8d9a7dc86097c882ea02857"), ("23ca9384cc84a805e804cfa3eb01a84b512d1486469a77a33ab4b6582158e10b", "2f23f5fee44f1667a0bac5fb315a6fab4227067184e770f768c235c2f117d7c2", "0872655c2ae863e7c6a2b503f411c7454e73adffcabbbdb12c93571c8c43c039", "2033266433c5cc349925a842ad8c5934e40a28e392c2340c591b931559a9ed94"), ("2285e9cdbf6dff5c021592f3250ad1a3c9b0f021932f0e51bfb668f734efb11d", "21d0eca47f68633a387858f1ba0a063fb3710f1244e8a2f793c4603ce6223be5", "26916418525e9d935021765a8d7abcb9ae08fcf0c43b08d8b72917decfa67ca9", "0310cd7733c3b769736a93f92175a14d0372621fdcc6f6b249696705f38d38bb"), ("2ded310864c81ad8e60894c3d3024301420fc9329ee3ca8ea87add29f0eb5e24", "10743d01ded1c328103bde592a010ad0bd303ef1e8896aa639c6696a0a932ac6", "245e0bc062cae8d37b73590b0504113058b9b1c1e6987ca06a27fad44c9f4f5a", "274cb066b08e428e5411b7c91a8040cae1932f64b4143c4dcc9b02642b10bb09"), ("1f34473dac8594b316f49b98682fcbbad4959424a95711f681c210be51b4d58f", "0af3b48c751665a440fe285142366ae275b3be37035ace8c2a0eb1da691e37b6", "1ffa86c6d53111c7756d887a71d608c0ac2707bd0b9eaef8bb97b647f4868c42", "0d939714ada879cb6cbcc05acd58470c74da4f76d26de535a06ce2233703cfa0"), ("08b38aa6405bd366fe2d4a853455490e8e6965a30531e8554b99e6c5dc5eeb7e", "0cd3fca06751c5a190a8e04e459eb4851ea3c8ed219e2575a1a7d7b61b65e4e1", "21fd3a6555fa62b665de80dc49532c4a0b2a0404c49537a99f4aea9025145fce", "1dbb2bb067f1b133aafbcf5c39fb90f438f14a7406ba1a77c7025da46977781f"), ("162093ff32581297b23599ae53b0495a648c415a1fa5edd4092ad0aa94fac8ef", "2c9c77e51c4edac8c36035826d51d87578cb6835743b73015e2f7c9b2041f9c7", "0458b93af989c91b5949a3e2e0be671dbb9f54ec28603f548055ba081bb65c3b", "26a0c303b4781c9a7bab0ee6c431a4678020fdfea6df4ff36f7ada9e760520db"), ("2f031e8c7edeb37d17e6fb2e558f0c0d44aaa9f984e07739941ed2585bfff707", "12dea74ec57c26b90295669ede26938ba0d83cb3106f28682e22c85489743178", "03bfb0282bf5ad4155e2ab741c83aa1d0f70f35b4706641a2a5bac435a82b89c", "15bda938dcdc105c3cf01bea20153db5a292321f85a495055a1d7e7c72d56e3f"), ("02b8d205fef4ef405f72404940ae80f11a0da890713d7a5d8961da8209446b05", "01b5958d397ff09e0c24b5173043eb3f881802397e19df289bab87053f2bd978", "2fd342320e7407e3cd37ad3f98d35d6f6f4d894cdea37be9bb47e49531a8d1f6", "20a7f545b256efb49b9452491d0db70ba045b66440e6a085f00922f710c8539b"), ("049e702975642978cdb63988088bea01b50e9e503861d61b485af1e6e5a847cf", "1bf6f67cfe3a10cc00ddcf4e3d824d9e55eebb71469ffca0dd95e10f90908e0b", "110f157e166f75dc0e742405c6b20a7a2ca52072d60088c29b14e89e0f24983b", "0a5875ebacad1e2225e922da2c066f4a97bdf63a30086110d9302ed0f4a03836"), ("1e3c3ea0f040b02df83e42d0fd9ae08513104db3432241bcec8ccb82ac02b040", "1b2ed545b0065ea36aee0576ae1e71fdbd5d608e50464a90661d23d32d45f541", "0fa6410425cf681891e3650fe862bbaf9645f4ad8655211a9ee1176b3309d6bb", "19070ff2e57802972ca06820a17a3c169ac13d7b55f96f002dffd45347354c4a"), ("2e23f2a86e861d95293ea211a7727a1c15437de2745b266b448d12fc5dc59545", "039b2190385b985243173abd28271dbdcbb6c2b500db5d62a7174f1caca63557", "0f91026afbc6b51955673b7da3897fb313d797fe4892aa5a6e82636d55cef11c", "1ccc3b9537fb2b95d304b2661a67b368569a14c455b345d1bba398936ea3699a"), ("1d690afc531390c6077517bb8b5c32e06379384b40d6cafefee713ccf4439cb3", "294502cdabb9f2db14932d365dde12ae58e32e38b4a9df1d8455ab783b9ee7c2", "2f589163d012baff33faafc70f14776ea4484220d2091986173f3e62b9be1ab4", "21c1c0821ae00d053b534d318ec67b6a66ef357602ac94c58350af2a2703e5d7"), ("0ab599719bbb0a07c3bd899fb2ef4faf28d27a41895b95dad5496931711e5e90", "000250d1e7ebd4b5df8cd26e9ee68886213024fdc3e0bd206120c2ece4d8cb9e", "21a27ac471cde3712c5e3e7dc752fe47b02abe14c01e430d01bbd4c67d1b8a93", "2597a4c48cef95152b6dcbc27a9198b6a1f0b188431298953fe97d938c394f17"), ("098d529b4cca6862b167907fd5effd66d9ce01f9550654834c90acccc66f4883", "14da0ff5e4fff3ae980d40cc837a79160eb02e91572b308bf9d183267e97fc04", "127bc1e06f34bf674bbe1beb079b94e6f822549157e991e55194c5e16aa0be35", "0ac617a369958b233f293ab7d56aebd7bd6242436999fe1397a81fc99d9841e6"), ("115c8f782c4a55b4e852ac48cb63255d5513b75fd2281f5329bb50c75534c9e4", "1fa8f22f65ca5ac7a54c2f189c0df9f5b28884558c8ca3f7c7cf05cf154e0444", "1326b6c016c2f21469f28c3192a249ca6bd4958910d7b586732a40fad3957f6b", "1b14d8c026d5df60985c4bf217b0dca97176d95fd1b2827c427081e407983dc1"), ("16791feb81d35284cad8b36bef5567e8b8738ff9523370372cb26709f0ca03d7", "1fe040d7fee4454b2959ecf94debacaae1df72e5fe6bd678539fdde6c3fd2412", "188ac1b1984b6d26af6d620395aee7ce5c32eb42765ca21525f6ea94ac615495", "2bb7a2ffa5c2b7b19b3bcb62a165ecb66a353b5c93fddd1e4c132ef2b0816262"), ("07fef841684b91bf0fb6d15bd148717936f94b1a0a1e932848551ebc3dfac81a", "1102c435a523c2275c14b8a5f6351e0a67a8604b44eb969faf51453baf4fa4b0", "2dc3720f21da562e2b2f8838877b9774234b3821fbd6bc1801e9a2e803d66af2", "267b168788253c3aa73b14e32f02193313ce2d0d64e4e29740cd143672e1ef83"), ("1ac2c6dd2705f63216312f28e4916551307150132e9ec0c1250fe492ad8522b7", "0a21fd59008c90895ff447d7f36c078821e07e85a43d04dc9ab9d87e526a8cdb", "1ea1f207fc2d7c9e98952619e2eebc4a011a52fb86867daa4b105ecd6094403d", "29a0d43596a7ce947dd018c53bb46403b57439ac5df920eec2df86d8e29015f9"), ("24db9cd27b562f1b40a52a0bd1b145e70d210521c9d314ea7d87476897331665", "2e676cd31dd4def8309f6fee590edbb2b2b468ac74881b30864da45e4700f085", "2f18506f94b950b1708388cc7c1682739f3cb18ff6c72a62d6aa34eb31188664", "0612df15dd0868b88451321f599e17722d13c738ecca5bcfe632c2a868aee838"), ("21c12522f994da217bfcd35d829a4be5439fc025364b908cb75e158433969a47", "274e7d25e721f18ed682edbadef1cc5937484e2740549035db0bab67d5f77b04", "0753c8c60885c7e80c53d6643a78458de0f2c47dd05ac71c5c143fe5e104ea28", "0d166eaa10de661d6138a55fa50bda5d4078a5713c0a269e99e4470694a24e76"), ("2e7fff73d3dca11cf0d9c6cfff1dd7fd109241d834f0ed5dea6d136379fb31ba", "0b16d059f4cad5d628fb084d9a34775010fec9737b42c16a6a28048711fb1fd4", "00bb946ff8bc0327b95624913c3a2adcf8bca1c789af70722494a021692b63cb", "1c1187e140867a16fba3ef6077f2a4d32526c13b0cf98ac907eb0a24f9a16ea9"), ("035f5699cfde2483ef92d96485e480d651d46542192b4eefa6ac7b8a858b16fa", "102d47a0588d281d583ff578c936cc77f91eb3d82a0335b8b12947c7c5dd15ca", "20293d4af1517cde7719d6fa62e09a39cb82564f258f6b0a04adcdcdb1f656d8", "0c8598a56cfde472558577951390121fdfe1153fd6836baec8458d4e81353cb2"), ("0ec8d12df966dea1555271c7fd7b2c9446625a7c5339ccedfc39cd166229b20c", "0ef0423187ee6d37d6cd307071c1ce83ad797626b39b918771e7595b52187d42", "13a992ba2897e4651353fd08b3b8b22082e24b1b99c706441ca8a8c8b352eaa8", "1109d505e897a13ca9eaeaf86ab7746df154be65f0587216eeaa32a73369b111"), ("298b9bceaeec9ddd116732b46dbe1dc461086fe06f1dd7e0561ebdfff44c2978", "2a8797e4e57567c8e5ee6ea1191c7463881ef960dfe92e7b0f83b21a4dda381d", "19351a1ebae2b8109c459e2c9b23eaea6ae14130bb96bc8a77188d27ef105304", "149b119b00fbe71dbcfd5f0e60dd9cf884009c3b7fe175c79e9f7e6a9155176e"), ("0066c0faa22963fabfdc8ea2ec7a05fe607ddec6ef3577754db08c4e71e4dd78", "1bf5e5720f696f388811595f0304d3c36ccdc90ef5b9217579cbde2a0d56e0e1", "2119445af2e28d918da7f6afb1dbf409331521a471e04505d5e3458fdff16806", "26cb1446dbf0e1fd33904e1b5c2580e02d0e7a9e93d875f252ccd2f68e716f12"), ("2616ba2025f7c9fde4a43122fca4c4becc877af466ebda1d37b3eb2b9857ad99", "200cc6c5ae361a4ae875611ae28909aed264268c31ea8efe8bdfe3cda63b71b8", "0541b892f6235ff64ecaee11a8a93c3c79456f89d4f8220967f9d7488e7c6dc6", "071ced8005bc6ba0460dc80c55277146257cb59dcffb729db9f6cbf1287048c0"), ("21a74b1ab2ce75e2b175e2c86a8d8ce5c93eb646a5d4b0f5027f483886313cc7", "0eb900d52782e6caee9ca29386311603382c7f1ffc202499ba1a26e0ed304142", "228e50a5b945274959469ea05eef038ed73695844ef8995e4f95d58f50d7ddc5", "09160c11521391f53e052172d8f541deca357e662ef3ab0510b158c42a29138a"), ("0aa103f704c77396a4a3338583499f80c995ce6a6491d6223b1c3ec96e59197f", "1303e3c8c076363c08e1f848737d4b3c56e3e536de28c195e85f9b6cf1edaa6c", "2bff97ba542b9a27253fb53e8776c173a4ff57cfce86f4c160b3c4d5801d7e17", "0f866892e4abc3d77d65be2d1908cf29d4902b06d822dbc9d405b9fd3cd32cc4"), ("153cd26e2f04bf2611a01e7c35c468f3fa4b9ba24e0319bb8424ebb70503b18c", "1e3d4d4bc230ccd5085b254fa07edba0ce20024b800836d3f134885bca5510dd", "1404e20ca3c91d293e613af18be895b160fca61bc6ae45cd909b40da416899b0", "099f542bd523e41234981325e44c6310d8d113c024abf5a925b29884101598a1"), ("17106b8843974d16f9096b5558ddba8a96c51eb0cdfac65d8c32416e4245d3ed", "15a3c98b54ce205a2358f62598d835d6795859c725b1f6e24f47c4d0f11ac567", "26c8508de49ad105973742b84896ca541d2391b0b6b9673f24eaa00d1cd46c46", "078ad6f83e0b57809d195e9ba8726241c91ddf1688a8b652a06eb059ff68ed1c"), ("1d25a32d607dcbdcc83c4f6f698c68ccbb8ad8f3a2ba4ca1db54a9bb2089569b", "102e0ea992d3c7d49a864140ff3289b30847c8d49bcb987b38c6be7c0758782b", "2edf4dfe044e39ec22db82fdf21cfa62d00604d61c380ffc3833735e044d9b63", "1a8875e9250582e7493a7267899a2a0f30541c6aa493f01ee0cce75a0f74ada5"), ("00ca2bffeae82f7bc7c3e19f3176b4828510ac3afe1db52b1cee8911f61720d8", "0b5fff603685636db93bc617218247b66f412666c286f784849cfc7537cbe6f6", "267145027920d30cc6aaa373a93dedb8106aeb736e7e7b2504e8141014e34d2d", "02f23b49e038384b9a17be0c0509a75f4cfeac13fa244f77c42e4a8ff5ec3e20"), ("158ceb93ba8b61e4f8b8e64d02a530a28a2e11f61bb779f420c4523f435cd168", "0b246dc5411648d17f9a20288512d746fc599fe0dc9888c1edea599000d44ce5", "1ec936f65409f26bff4dc77cf82185e3d2cd0daf7003436b6f7115b454d5e924", "1d61542f824407ddf395cce305798b54ce82a84fb9f28d81fb92f378d73eac9c"), ("0e96cf3d038d745becbe516474d910b65fe0eb7f7ea2e60df1965a9c1117a7a6", "2a4e1e17554378aef387403d17d1c350dad674897f0ddda66bb3f3925983c98a", "2c00d58e8fe8ae705dcfb9700ab3404f0ec4b0d44f0c183fccac164adba77973", "2cdfffe5d35282610d64db7136e0e4f3737d597620262dc75b1cc9e6bf3eaa77"), ("1fa3c84387884a82b3ed40be50c88aef13eb875479e5aed3d4f6b6c356255bf4", "1715bcd073a0f1a4f400fa43e84973cdcac17e9c90d848891d1d8b75b8f8324b", "1ed86a0132500e166ce6d21e4d8c698a678768e7decbfeda6f0aa90bf7c9dda8", "0dc46d236110732bd3316c77b9557825ba55720212771946bdc52a571815785d"), ("2ef54c3bea8483f9259e4b0ba3db399bdfb50baa8b58026c4d7e8f80f5f7c488", "1338b847beb737747c82523daf4c620fa7a494ab618e0766ff838586c8e7f2c9", "1496acde1288cbd04b43737c131257941c9e37ee412bf99ee33b48e5f6b3fd56", "0f005414d19532f7617680fd42d13da85e2dc4f2d677b29304c3b02e8a922d6c"), ("0ce6ebd4878b8b48fbe2e6081296d7a33d9f120ac8b1669cb8d7333cb494bc2c", "2f59c0c95beb69a8ed0cf55c9745fa212d17e8dd15cf359f2ca4824f29604222", "1df4bd1b19ef7e60da8477a35afe1da6964253e882cc17900952e03352074c2c", "08196f1a8dae703282c6bd18ad8cdf390c6849311912dc9f87ad641ed3558060"), ("05d4b41dd7b04181870977d0755da676bcfdb49bfe1a465ce75576e8a4bd49b1", "074ba217be53aaa41d9b32dcec0f69000de550668b2b28f41b5e38dbd6b013e0", "08d8cc05b60fc45b58f5390209ed9952891f1cc0cb0fd270e6e8d1ee9a2af127", "19890bf39684571560c7b38a77f4f016ca74d450356373c29e5e3c9b10804f48"), ("01d8df7c28653947483725003f3593ec1a1920714d6ce0a84f65d8966c8e0fed", "01e3a436a8bc05dec2d4d080e74cf2f1f015aa8e1ee5c845b56c9e6ffadda42f", "062096f8edecfc32babd0e1e1b28e8af49c184fb236d88a6f62adfd5a496020b", "2acf402b7f3249e4051eb7a59b55e02b0918c07889d349f5a524ed291b0fc367"), ("15b919d16352445214a1eac25c2d0f0cd4d08f930523c30f120590ab220fea1b", "133ead51aad8eabe552b4f5acf49c6242115687dd705a05d9e4688e6f33b8da4", "28b81ba44fdb15945497c1fbcf17b8cb3263651426c0764112ab6450c8816e83", "2a0dc4c43176ec80d128e80ccea5573c7ac5d9df54b46bc58b8b2c5705d8bc47"), ("0eaaf11ab98fe56069cfa334dee90e86b5a34b1e9d6f8b2cb45a74e8efd35e81", "14d81c0671d915268012925a0e6643b1c5ad21c08b827eb04c12f99167e05702", "25b0d11f9ba34957eb49356ce24cfabd81a7b31d22ab6d8e5395c05dab9d5503", "0320b3c386dc5724e6bae1fc6428e3746f2ae73edda99a90d40298be39c1e179"), ("26874f698481840573572d840116b94936145bc8b8282610267c67ae0b8efd3b", "14e57648ee3df616becf5621f58cb2484b416144a0a93e8e7ae04ece53068aaa", "1c34e8272daffd99c7cc07c81e909f7eb3821a24a5672309f5fe8d0ee15939f1", "3032bd76a8feba22a12a33a0fb5c6a3825915ad20c099947e4f730fb0da81027"), ("0f4e9083fb1b1a183d6b9173ac83afbfa29ebf7357e6de84b94db170f97c4740", "0d8752227afb25be92cef10a5d615136738c432113c75e35778d3d470ac1084f", "100a0dbc8e3d0906ff2a5548ffebdd5e166fff010e6866e77363a67b947c07a0", "06a71870c50c6b7075818d7b696c458664e7a32c4607163d365c90619a255213"), ("3005a86684a3e801c37c32d419e06d9767d91707d36f55d5693f7598909313e1", "0ff62c0021657952ab752ebd69cf06f7e73f5fb546390670eb01f09b31bd8674", "07cbfcd00040285ab872487a7f2e22b80c8018acf7bc3990e350da9227a8ece8", "2aa3ef3241cecb05c347e1967c6370a6f98d81309c6e338e4c038ded1d4d9750"), ("2b3bb6f0444316063bca7415917fac53049ec6f43c6b244ecf085c3ad3207c04", "2cfb2fa6c18fe26c2b22a70b7a86295654031c089adb875736862ce1953a9392", "2b401931c2642e1b73ffe59b4b09e84ffbc085c5391213347373c7aad326ca14", "1bf64082604f964149f1898e2cdd7bd3ee779ed1fc19d52ab1f4c77785f731ad"), ("210e3391c4ff41eb6f112e0eddb11e57190637bbe66d17d7562b333032ecf16f", "2c71abed82fd011bcf8e645597c762a7fb24b0cecd3be8a1b32e5006e73d90cc", "2508adb8913ccd8a6689cc6529b35baff7271b1d85bb6f10c68be53465de3c29", "134c39bfd44b74eeb76c15d9939b031c9c8868e2aa507d4ebd10fb82fd237f7a"), ("13e0616653297822a8716bbba445fc7dfd7afe7b5ac52aa4ba0efeed51480338", "1486e9ed9fafcd726103966ed518de4645071f80132dc6b27a3b72ae445f8fe7", "2d277d42afa3d47216b351ab83b167f4c98f6797f008bff02e77de072113d722", "041c490c30fc28892cd925de3faa5f6ef9e4cd67ccbc714b1915d64a121735b7"), ("1d78a425d5a92699519dc1d2611f8d571e3f765cbb6db2a602a4b711337b7b22", "2bb2a9583108c05b926aafc88be2de246e29905755d22d3644332d18fa7dbf4f", "1bde068867156071ef939f4dc02b869fa5aebc3e2c6cb403ec39be60bad654be", "190cdf08d94f1f3d1091711ab247238c89e8675a307282d5dda1a2f80cd7e410"), ("175a5e774a92d6d8d9e8a3dfd1b8792d918ca23945a874e14332bb6956a62d49", "01369143878ce14e5619720549fb88797e9d1981d0c86a349848e836737c0119", "1de7a61c0a78de373cbb13a2cee1028ee69a44b38f976a7ff5bc7a8f4466a506", "26c8e8ae470e60a73f780bd99033f43bb3cf0b723a7420d3a467ffb2900423fb"), ("02857f74688d6cff7c787732ccb0b91dd6b31814e070bf77f424fa5ed7aac505", "053ac9ed3933ca4fcbb260c52fb58139bafb5433ace447986e7a10bbcf858c2d", "2c5e40cc577f4d797677a5235564fd50d5c683a31136cbda48eefa45e9c36b1f", "279f25f117e713099815ae954ce681900d18def268dba21cefaaf14f9ad059fd"), ("0139a59077580ab155a472fea714711f8d3c460a890f4478bb986b2de5c3729c", "2518c0903263b278a57e9c1fa07dfe8defea5eadbbe3fd11808e0a2fbcadfe47", "093805154ab790a031ade3560d037ded631f465dcbc0b72f43f770bd9c8c5438", "0d7e6d7da8eee8250498d1e4e3666bd561e99e0feb42179b741481c4efaeedaf"), ("28bb436e4c99c3a8067ae5b57028179a5f84d3599ad2887f2c12754323840d8f", "0514280ce2fcbdf0dd9900061bb7339344a774075e19cd8c8e36a0f0069e19ef", "021ab11ed1adc16435b2db0fa0d67f0b4c6912c7e0780ba8b9706a26442fef3b", "246a775c485a0f53f8361737b75c6d77f5263ae771b81fa80a4df8b27e16a0ac"), ("09b7ce212c093610d0712e3be1619c8044a3d0a94bfe201ddb8b368382623e60", "11c52535c616f60190c9ad0a59c8c7683629f8195a1061fa598ddf9602255565", "137ff64f135d7808391496f6de57abe1de2f1048f390cc94fe02f05abb21fd02", "2314389ddc1c0f3e73235e06aae0259ed4d90d80bf272a725719ed8649104153"), ("2c7d825b12322fa11d12b40897f927169ab3b3ccb87aced61af440edaada8772", "0310cf005afbc4d3d22c51174e442bb0dc8a0afa507e33a3d3efbd1693ad2ce9", "241bad196a6000619cf1979e0e1baf03bc902d1b35aea20db6ff98f3c1883a40", "24a9115c93086952fdf1a588d62fd3fc8bbf5cf2a8b89759f12bbc3124ddac31"), ("118d35eba7ed751f4f7c8cf604e84c5e25cb32e8c2989b0410e6abeefb7bc658", "146218565f3a45b32bac40e553877305098d9e854bb61a9ed92092262f117611", "097657288017c256ae8deb048b06af6f9b207e3907b8cf5d201eac9e7fdb955c", "0d89b29ca4f7f80864f701336653764b735fcecacdd3a974ecb49b901bf8f796"), ("13b62bd6c19d9243b35bb5e0325bdbc416a58c1b87d4a7c8351df35bb77f0fb4", "2924d370694e8e7e27638f0baf4f96137aa9dd227298a8dfcaacb2a335a1081f", "04649f3891c8106dece256e1f4dcfadfe4fd89867a3a397c11dad160feacb917", "2237967e9558f60fef6b98c4166cb984096ef78fd3b23a53b0b9c858b77bd335"), ("21da4b790e4e5c24bd7fe3563b9ec8c7d0bc704f32bd1f68d3d576933cf63019", "0f81eb898e7dd3d5596efe1569dfdcd419b8a202d68b9df63da48f9894b4d481", "273c920f3f6bfff7231bdcb8ab4112039d9ada776935568ed9858dfffb8ca522", "211111c72657ec59ee34c77c3e318af9485ee12c81fd4ba44b0caa0d944253a6"), ("0d0f61de7dec56c5a3f3ec3ef1e13fa16322a1659fbb3fa4f89eeac9995e3146", "1cf7520ef378de4c784c8e1692645ea1ae485b83d014839be2170a0a9aa8ab5e", "20863104ad4dffcea5e28fa56e073ba715e5cf5fd1709e8f63bcd3c0d13d070d", "00d4bd2b98eceabdad646ed43adfc9772f9115a1283395f467815b06e2b895ca"), ("0c6790711e11ba14c3f620acacbf6c5c767b60ba91773313543955f98a049fe8", "00641bb08d3e736e97c24d8a39f075ed1dde4ee92a5956cf7cf89678e16815f2", "256fcdd03206d1466e565da7360685fd436896cdca34e59131985c5020cddf58", "0edb059610f3ac801b62a8b562a527c6efac8db9b9f78af4e95ea3c4b3c53499"), ("07eceb5decf8c1f88182d39ea9cb73db34d3800f048b4bc7e512561fbcb6dcff", "1c30f69bf88f26bfbad1d3b3c45f073dbe2a326d2c7178f6e6e539dcaedf3777", "266cd020ee8ea9caf52b639af0886c48fbcc2db0a362e106fa62fa0d1273b9ea", "00e150c5ae4a05fc44a13459a923579bdce6de2c7e8c2d9795834828955d60e1"), ("207a0896c58ba27ea1994f687a7ab96ea9a9d5f7eb3f8278fc2ffa6489bd8766", "0ff374edc0869e3d2c00a1718d14007558b8d338df66f46b12d99ec34bac145f", "1298a46ad3fd09fea06e9a0f263266a586c9c6fed07e3cd86079eb611c59e71d", "1bd9b392158e6b40c99e8c5583e85ce5404c778861e8ac48adbd473acf17cfb0"), ("01f15e8c91eac18b2b5274d933c8053c6ae8187784b5cb1383d087c663794f43", "1088fb09b2821f06d09b7631f92fca17f6838acff61a5d65ec943937ede66724", "2bcb445b2233ad8cbcb2ca855724dd44ed10dc44822cc8814561796b76a83c72", "2a929aa9e61129487721cb15a895a4771da031254b458ed5220059b9d8390e87"), ("0f1d9d3c2f8d08a0f9e7e07744add601b1b0db9182a29a1957526ab83e7c7686", "1ee339528d9875b70a34e3c4dd23cfab49538f03c0017efe8f4c11d753f6efb9", "2f5cdb7c5c8b7008074fc6a37646d28d6aff0db02f77209009ef6b7636a3ee5a", "15d3e0c096071e71aac5fc9759b7105177dc1024d1524c95811a515211026a14"), ("2d833625079976a45d112bbf277495a839456598b84e354024eb3e09e9b158ae", "2a8cef3c53ea2d9b4ee65c9ff7a8876cdc97a61ab0d25e21283f4ea4d6c944a9", "19085ab2ec53d4191a2efd5a29bf9ddd70cd85b57ed6f4a336944b46c7e16c39", "0b0b0e1afc87998f5d705121cbb4e8eea8d03e7119b086ba6b2750037ae204ce"), ("2c4bcbcf8df1a9da39c5d971074dfb3346cec183c26cce5593c2b5be94338d73", "114cedbc5e704cee7a6d1b71b721b84f13395f5e8f9a08b04123ba5e72d865ed", "0cd2c54c26c5d44f5e234648e005d6f72564f85f22e07ac1c17869894c5edec5", "1e4af6aecba2c9bfb77c932f8ae906fcad39b4692252e6829eba5e77b664b7be"), ("2cd6017aaa271b07bd4d5e5fcfb89f1756947d5752a2416769a8d92b4d22aa24", "0f2a25661e69f6039d64127f949bf18cb250e7501da2e2ca3a872e1c55d586cf", "17c94f4b669a17c1834309624b53e19139b1d90d40b4a08af091f12416d136d8", "23a04562a1b6ee6e7d74b96e6a63955208e6aede791d47f4afaadea45b7d97f4"), ("1696b6750b26aea84375b083b2e7db7534381c0065d578ae94edace7a14b561a", "06f15f3dddedc6da773919f79d3514b6fdb2d2cc4db93d929cf98e370618a40b", "27957a9399251750c12a2010a5efbb57559242b7383baf567379a05efcda7bae", "08471ff039b7a6c1c78255934dbe157155f3ef67f3af795a3d52f1fd0096faeb"), ("07c389ca6cf5cbf28a81be345a9a3c6edfa267e614a7cd380eaab7f78eba1bcd", "1da0d32621499609b13529a286f70e9ec221c29fe070cef27fff42da39309641", "2b7e11af0bea391ceb7a469174f673bd489440e5619363d95dd93b3ef3748d4c", "0d6f4020e54992f3ec7c6924c786936454b648343a46e278942a3f1bc5a67693"), ("23c40fe07c877c040f0749aa398d8bb14a5190e847d214f996cbf1178170bd36", "29a03a772011754bb6818b68ac305d195ad7b3417bfdba7ef80df29c415188b5", "1b54c0b61ad0fbd5dce8d220dd0d7ce56a9b3385bac740f22d3fb3ce83fe0f47", "1f98bb0c405b5527ca47e1570bcfcb2e77cf947b8922535c4aedb43cc9f5f38e"), ("11976bd5a204938320e21dae5ddaf594d41980c81228cd099d0a2f1773252aa4", "1eb27b609fad5007897bc879666859981448c42ea44cf19c68b9992f01af9e53", "1e7eac7ce551471e5045c5372173c9e063c2cfd8314df3717d46de1edb688186", "2f1ea98e66ec7e57895c17103c0d1160a02edf83928a2150e18f2c966ad58231"), ("0f3c559eb192e51de8d6edf35a0d28132fe486667be48e11890641c8a80a905d", "1114ffb41c806bd0f1b577ed705c120d7150131bff2050f3b0f06a60ca36fdb3", "1a029dfd83bbfc3309ba3fc0151e3ee23a02fc63e653a75e9f61f5112f9d7f54", "295b4085b9043e2ac29a361c27f21ed9d6f660b0b470dba4d95a22d4e4c506cc"), ("2d1b2b7452bda8367ddd40eb7e33bcc0add3e6cba6eeb0b93a1674ed3129d5a9", "2febfd47981d5359a66d78e959a55ec94c72fc4a8918f9d19f3e53f3e145c485", "1841947dd9c3d8434e54f56ded6d751f99a727aefba39881facc4b344632d566", "1e3fe397b2ff5afe5c5ca1ebd09b548b1524ff6f9111505683c290825d91f869"), ("02efacb83f62300ca03091d16b686e78b8cbf40608b4c0d26a27a4b348773bcd", "0bee3e00cd7724ab064c7086d1eb33e28f7b064d8cabca88abca9c526144b947", "20b5a86e89dc84290c13cac2588b3b3ca323c5548344bcb7e95135e7fae405ab", "2185a8768c70aaaa24e23774974fbcad9da3c958ff20203256e535a7dc17f8ae"), ("0833d2a00b32145db9776d3fe666be15d523f55c81d2d9579988113d6d15c10e", "1dde181d24b8cae42353e57cc9bcc5bb58194054021a459ba6a3eed9ece7fba6", "159495ffabbe0c8db77ac977d1facc531b82576a7f991038960e1a3ea1f78899", "202791faadc9d3ad05c287dd7f9a57957147e3e4d963b824fe60cb79555a81d2"), ("1e5aa4add88c4cfa1219dc26d94fe879b0a53dd8dcae89a01af2d4099bf0d781", "1ff1433103a0121b0c178652e46c20d774ad49b76096c30ef405356317b7ab2e", "06a00462b6bb21268a08c09b38b40e2f36214676e7397b34b5e5116582ba101b", "0c8460ab356fd076cd5fc577916f2e0e8ed8f3e60df1c43d37ea3f55d96981d0"), ("1c2ff891664446218c743cfd4a90623d7230c12c2aaf689105778f870c1aa459", "015c81ab05e18e6fcfc9ddaf0e60a81a0afb93b8f3966d9488c57acaa49f8b61", "2723834d5556010877a2981881e955a704266858018a89ef2b3e04cb28cfb196", "247030921e7cbfebab7d9c95d1d2c0745e37adf6fa69ad34d08bb8fb744e69a5"), ("20880ff5ffeb367b23456b22d5d8519e8f53d5ac413cbefd63979cbb01a59ef3", "08024775c1c8bc5f4e933e062bd4e387d6e641d5977e531745c3e9d6e4a4aabc", "29201cdd6beab07024650b7de9140fe73d22d832914ee995eb8878c28971976a", "02db271aa187d8b362abed800e2f817e6c196c039a8e3e63ab7c9f572c81cab2"), ("2b007d741a232e0590b79f7d7af20d6b8e0d30dfbec20b4f6846e044b2692921", "194f7632fce6fc33a24a3e442bffdc320e6d64e9fae66e7e7cb69328d26e38ad", "2cefa6302ef32380bb4c9691799f8b440c6e4e8a63c1e7b2d597691dca796f7b", "3056141cd065af9422f687edf2332d4d7883e93f2ec7ba11f895a32d959ee922"), ("15495b9983f7ca7b74f9f027e5e48c557ad6d9872a058a27be95092c20e442fb", "28c7ed0f0a1acdab06e7096e789ba7eea8bda52987243f5c45fd4185200893c6", "1b7d144027180898a674c08d3042b06bbd6c49d9f57c2e640a93cca25c6d8039", "1e091d73379588467d733cd0e49c1837ec9e6c3802a799fdfdd293305ed4983d"), ("260f1c25182600cfb7bbed3f67d91fc68d128946ecf285127c9c93bc74ad34ba", "269de79b287a5a722d5cd0f6f5b362da49b9665ffb32a6bd52b6adac8a444d42", "140a79d33105236aa5c49d05bca7bb28cb70f7b7f5e9eafef68a003da54af8ab", "149516da18c77f98b83b9f317cc90c5bea4b2a5902f74daff9294071266b9328"), ("259433433f1ac15ef51bdfb75d0884d462c27edf7866d7f76f38aa6dcc1047cf", "0b4da6275845ea686f463b67326e0890f80bf753625f9ef8a262f3e8ed028850", "0e4498b56652643781f3ee4dc90abdfc8f4087b8a5f8fd79794f536b50b1c8fa", "261c1e367ed6d608fea2fe333bbfcb8b3204fc7e5668ea28cd4a19b56abb3beb"), ("24a601814bfd07c9a29ab92252e8eba6d3408e161188dc72b0b079ba6fc38c50", "265715af2e80c4d9e64ad83cac881a83f1e127ebc6984f0a9f926a6ff2ac2a65", "119e40f7a4cc4085d3b56358075c991d0a964e8f811eefa890c69be5f33f5734", "2bb6896581c80dd53fcd9d54e0dfac443d8531cb670356d28c5f7bd112a316ad"), ("04d10ff65e3f6f35593b0d3a2aaae2f50ae0c04abd66d9073b38025c2c669b22", "25eaaff6689ee09605b972961ec8686a6b4e54a258b08cf66e355137a92de94c", "2150c8662a1c29124fa0ad4a613ee699d863f2a8331c6be94632aa1e871f4d23", "00718a8360a24aca71118fdef01e77564aceae6141b4c8757d9d4d632169141e"), ("03f5ce92cb68e9233f8512bc6eb9656b3e6faa6407107bbc75e10233ed87fee2", "0480dd995700230f9eb9776777ffbc6a6a3eaff292b9b5ce5dde2ab5238bef27", "14b2d14d37b288c13f1b9d0abf4008d2c5ea984a44604367750556e202ff02bc", "0145de2ec6b9d7890a227c499cd8d3e01096b6908c1f5e6566073dc4160af2c9"), ("08616064a42c3d1d0cfcf3bd18f9b7c20fdff1fa57220932fd3c0cbb5d29b00b", "25c96c23679360df7b8124d62dd51381c4c58b0d9f596bb4072b9c15f55116db", "0991767859c996915f79b71265126bd7fe3c186f146307fb2fb0a43a608c3d9c", "21e6e146c772cf0458a2647549b31a2ea6b6112da398daaa583d2dce2436b37a"), ("09d2667903c72be89c132682c3837f76609cf2cf8cdc68bafdaef452c3a92b4f", "2100641f69b38299a9e9ef5af1465d09105c317892596426512e876a926822eb", "01a061cf4edbb801997f721cd5249f197db3e434dc0699f5aa60ca52f4044c2d", "0d3986aac17a79e0f7931e7cea6853e6d4e73caa4d628059e1ba21a76998196c"), ("17483a4f592436727382d8f2ccf5ea78ca8db6e50a78472cfcc382270ebc22d1", "2c1a63ab2dec2ba9a82a6a49172f504726efe8ac6186c54884ec56425d9f0a5a", "2993ee647135c31b90735bcdd3e9b411b6be7fa6010b93cbb4acf3f41c31515d", "19a5574cceb9dcc6a6b4ded1ac1cb640022b6026cc1af26b69e9d402f7c4aeaa"), ("05c0bad4e5c8c6bda51caad78519e197d2a1efd1d339c8898b47dc3fb0b04b0b", "008e46dbd0062d1b279b72cc01350b1a4d1c05d5cf8c21c87500824d0e607239", "24fe96f4eb2902d1960a0732c09ec31c42e9156b0a594b039285eec2b19d63eb", "1ac416ce30ce6ae8661c2e07eb558cae2b01f864b40d7f82d94d81114d9e7583"), ("2f05d7fcaca010725539feb4a211e5f0ae82b633ab818e29bf6707f0ab130c05", "008f25b63f92049b721f3f0bacf08fb0647cb7ba9a38032ec321c24a5a8007f3", "194af7c568c5b8c1d522ffd4d8d285fb645ebbc290534295b75e213d1f235df9", "031bd91414f2a1975756313ee5bacdd14b798a00d89a4df78141a69c63ce2d7b"), ("1876a5f70340875b36944899afdedf59ddd9d631b1194263583ae677587b7924", "149004ed895ce62c00f7ea859f19ce734bddc6068231dbf6c42dab793909c5fb", "2a48d2d60695710353e631962c6dbf2c7813269a79e82b8c46af066a3c2d289c", "22451c1cef5dba107e97e0cedb0bed5ad72e36f1ee0cbe20baf2aa4a13baf4bc"), ("25ecde1deab7ec79c4ba80e69e5fb434cb9a3c24a20b3fb475e8105a436edcd5", "1f4455f01c80fca945f4801a0a8fa77250a8f3a955589e8bd6ded0a4ebfbf10d", "19c7fdccdbbda3a11f85b19a68eee0f1c35ef6a08e46b4f3894deca731aa5690", "1fa9672461ad22ece7af589a24b9784cf9daa90e31241e3102b7e24986954f4b"), ("20b1c49ab98a809e2d3c1447007b66abd0386992eceb1d89cb7a951906f79ee7", "23bf625d1c15297bdfa9e5ae1595fe23de3f1483ba3b13e71b9a021981589e3b", "21f1222e166eb3ff11f5790281327c2cda5fe9196499d5fee584e9e2aba258a7", "0daffc3635d58599e037f49d01ba75692b2b3598e614747dcff24adf1fc45a3e"), ("2491f8f3c1359ae96eeb41697c96099a6a3a12d14ea960fd94a967bc4bd4645a", "12bd8cfeaca6ae910d552939d38928111dff05b0e9b11cbbf6a36f3fe4e7c7b6", "152a90efebd56e3d7d255f6b5f1eba4ac207846ac91fc0e659d8308b9e7381e8", "139d257281bc40dd9b25746cf073e3d947d13ec9f9908bde37d88fb4e088159e"), ("03bc6062aa389dbd01b38657c7535c7ac54724ffaf44ce88acaefcd68efed276", "2b98ea35e76e903bff694b0b218dc9e0e9bbb44d8e0aa5fdee10856c93e95327", "0c6343698926d64914401899d001a81299173b1cefa8436a8dc20818fdc5bf6f", "29d42c5d8f27ed1c67297b28a46afb0cbc6a87c1c234bf5bcec1307f478e702d"), ("104cdc583fea25934b0a8d362fc4bbb50f588192bc2990c7ea9b2b7a626bd08e", "207dde7ba2e73ac6e2b6b25769e81c155e3fbe08ed1feb283e0a41bff2707ebf", "0e2fcf88ce2024ea2021e63c8367349ee53e5bf9e7f6b5f54dbb322eade16b00", "12579a0032b002a853013537ab40e44dad2bb05aaef529b73b37e6dbd69f6d6a"), ("243e8406d3b896b7c85c1a376ddc53b7b4405e3a32898b42dc140d1dc69f4561", "2ded8490304b9cc645898fc21886a89cdc35e2d57d5556ef85118acd838f37bd", "15d3bc41dafc80b4a0611a5de49c5b0a39b3be71bbfd669b2eb71e4348f70118", "11521e11be33e83e7a9d394ec065460787a8e8873d58989290dd728756952b63"), ("172f802170a795d07975214b6805eafcaed6714d07e6ecbbd86f2996c8746a86", "0a1eb7f1387ae63375daca54accab4a7a4f260e415c86ac3e389a5f5b12f5ed2", "1f18b31957311e7f06d00ec761bf1fca415b18b00ddb002d492baa459cc5437b", "277cb445ac25933032eb4920f271e3a53fe22e100c983ad79f8cbb95e4334633"), ("25dab505ee5731c7100f00f595121b6735b26b34a9d9e9efa2e54337ea192a19", "2d145893deecbc9be19e851ba381772bf9c3923f2514edb4c2e9ea3c9db9caad", "2725cc8a9e7b39d334999b8854547374f1ee0a78984920bf8525cb3eef30376c", "11d9f840afe035723e3511e7db411d5c35492eb1d343ec35471fd9991dc959fe"), ("2b209a24a9f031ca863844715a0669f0a931ba4019fd60a762b86489a3c358e9", "188a4b92ee46c8ed3ed65150b1c88713583704edc9d4c5a77d718ec7e3097c45", "0a4e6b6bbc5c98e71a995853f1ec5e2044369432c62a25431022057231ff2f0f", "2f6f863de1c3da960c6c5919a7f0c277cc3d50379714947da736ee811e13a761"), ("0d311da7f94a585e757b0e52d0bc4c6a4f6a5dfd627d7f0a137c8fa778591b47", "3059ca9f6490bd3a78d168c9e2cad5c96556654f5d6f8afec429372a0e360e2e", "25e0c4798cbf8ab4945ababbb8d011c10e78df50633c6b4e5cb4e29e054d205d", "0529ede7f84c9165272938ac79a324efede723d7280cf6673b6da8f2e7699c46"), ("2c9d31a2f21d0dd0835edaaa00887282dc71695123118dd10ffb4ca6e2912ba9", "27ba5de6b86d744cf586705ddca13dd0c03a2d81f55c12f2c4e8d59dbfcd3c51", "2ff877e3b03fb9b164e45e70f552f34a7d589bc73dec1e83bec25bf361483dbc", "20c1d7b5de6be7b4130a36b2e59878479450460b4781bdaf4abd044365b6e908"), ("221dcc5fe66614f7b5371c706e43877eba21cf1f517e53921ebec766f792b7ef", "0d18b97a34a0793a329293b6bbd33a3aa8995c76997820b7a94f5c1016cd8736", "1ee7412ed76be9639a782138c47ba9e98059fdf57bb6cb8cd77d82d9c0c581c7", "16dc7e257bfd01c6b9b7e700371d7f93589289af377c3aeafc618ecb6ceb24d0"), ("26974478d6c25908307e6f71d0b87add2cdefc2f681fe234a1e18bc2f940646f", "00c8217bdfb0dbdf8245ace0446e051700d6dddc1e8b3b69b8842feea64fb4be", "1dc2f9668af3d1c1aca5e2bf476c19d8ae038dc9d2dca3c73f085a3963ad612b", "12256274c26dd7de4a6e367f425175265d4da6b2ac1f3cc903fa50e2b1d8f430"), ("10656f518cd84f89d98299c506527714479b08e2867fe02bc3b52c04aa17e1be", "2d6da14eec48c9eed6216d4133db857f1c9776eca830d52b9a9f2d82497e87ca", "2e2f816f8ff7e41975221ceb37fead4122cd51f62ea55209748849c1a274bea3", "0326b702c4b9db039a6fab188c74102a209af3d1305a1c6386a35506148829e9"), ("0f7fdf65c6cb0cda6c50b6700537655a06b52dce554f9939bad45f6ce908d806", "2f35e2d2590da8f62bea75eceb08a015a9470fbcdd5fcd721da86deedcd0dbce", "19041fef8fba39bc0bd6194e6e6b41a4d153903842ab606ff71fe99b357da1f2", "2aeff063b77b21daa822963715c7a1b8e5fb0a36e0de422aa83f7780cc07522d"), ("14b7c49e74af19ffbee81fee153b06f8ef6580db6a52a6ffb31fef63360c3a5d", "2bcbcc040d1d6f51a8584cc9244f52e1010d968250ef214f5e1dc0cb691b3589", "0cb7c0c35b17b93a71a1d4888fa8b19cd9be39569e6228a720f0ec454f90b8d0", "281aa2d9398e08d541954fdedd7ee178c4e0c3f89cf9144794ee0c91e70ad015"), ("29ccfcc83887436b58d50323ba52d79c28bffaea8722a9ca7642953a90439f86", "086c1cd35035777f728798763262f0dad1d4b7ce2849fb5ee4e7e67a18734bd6", "2cd85fa92d8cdb6da88dfe755f6e0ff9716f0e0a487cf65f3629b2d648c3eecc", "1ae27bf6a049f19b965577134305d757a338b10b8e1e12f8e76e0a89169f7cc4"), ("03142a1dd7fdd4c016e20a83d2facd2dbecef725d69944e14db7f470ca8c364f", "0db1a62db8de6cf72f52798cf8c04472045f55801f8b4df15c3cc3a4165c4467", "2ee458ab2bb01dd06fa8908f0190f7c559a7ec7c7d7444474561f4f4ebe45a0f", "18a379a6f4ab7f245b8594538f572ce4ac779bc32ebd946968421367747e8730"), ("13ade776d392bdeba8c42f0e5cb3aca9ebeafb4c13afa15247da2246e1e01442", "189975bbbd73add983fa6e82d72dd5974b331508de623d8b5e3bbb0e418c3b38", "239d26704cf462006d5d13a5686a2c06639c463b3f097131a429091f57ba4972", "2777405742af4c03a623ce7ab92187378e117c6da83a4ece6864ce5f4b567958"), ("27a83107b8c9e390da5ea81f595fffda3400031e9c9370ed79bb7679e2385d45", "11d2de66938ad93eb5cd63ebae49dc4881ae7db406af1399f4d41490624675ce", "117198ed1c2cc2af9cb71dfb5dd27301c5bd2c45c60f58a519e6981fd3474728", "0d8c00b648e14326e435e2ec8a61d1d6ee4dc9737ce165e5fb249d52f6741e0e"), ("0447cca173db7b950653474d631e627ec9b81936f59c55037da4b662f2a1cff8", "22c28bf82b9674b02df3026e5583381f66d16779bbd9c0e98e55807e6c96039a", "2294c5e292717aff9ff87184e8db613ea1e67dc06e4c1e813a88831d93090a21", "1345433713ff3c305b6102e6f81c2aab093df4399c8ccad50ceb854421f03acb"), ("1a9936c7ae8fa65e6259581796c99d844f0735473f5519851c473bd6a05973a8", "210c1d623e25fb93c699c6717db1d78dfed359e1aa98183a6fb2c2bc12dbd983", "03f5f62f0f36967d8a7ab4585048188c6a931e02556023b8a4c0c54752c81033", "26ce45223d6e0a3b636cf241121bc700680b7cc29e88e5ceeda0e57c47cf6756"), ("17c9d507849fe3e5f7caa98e2dc867a0a5c7a56c51d4d1831e8faede8f76b4f5", "2a6f04f48ce564473e58a5b472bbe8eaf80fc22f451558869daa36b030fd22e7", "12b8d9872112b0cc96d00beabdce939efe9a1827a1c57e9025e2ef0dc4653220", "119fbc41c30538b9fbeb7afb83fe7b608495328da3e12f68a34dc90c482aa5b2"), ("1a90c6c81f813a0a3928f1aca29a30a33731d6da825d4f54f301bf46aeb88155", "21dbe5a4b1092e98d50709cc1e2c5aef8dd1857f6ce971b817ea7c96ccbc8445", "11d5f96338dd9e9d335ebfbbefd7a7cb71b1d6a3aa49b258ed775a62fed8b4b1", "19461555efc46e0c37ceef19b459164f67d37f6de473b482cdfe1bb94b74bc14"), ("08619901bf83928574f1dea8b0f85b01309ae6cf6aa385ce596fd42c3a4dbf3f", "25edf6f29272f577b617cfac1a59c6dc745659cb8f91fa28c6123f3d6133f955", "0aa2b36fdb7a9c83467d9fccbfd9eeb10f349e9bffae59c4fe83a60b52c7ea8b", "2d8c26e3ad774c0974ef7826322d5af1091316dd2579b0deb33be1b82d228895"), ("271a148584d86aa99e419c4c4a2cc9410b9d876afc32fd971d533e8190f9e5e9", "22d07564a672e954c1bc137df167bee62c4dee582d3c78d2c35be0e44584fc89", "1ebf5bd7d8d8f8de077b93083ac3502d833b7f387f68bd883f1ef053de8d0467", "0bb3ac6c7f08422c06fe3906420b20f7772fc708c74de6baadac38d4131b4fdd"), ("0493afb482140c7f2d6f6a17e7dc47937b079214eff797a3162f1ac63edfa99c", "0e788d4bc48717bf30f55f3549bba84596c2013cc3fae63ee2dd85ce16269073", "0081fd0b7d743c1deab6f7cc9876995e33d4e8e7f767731dd088b94c2725817c", "268c5a8e3e878686f4fc6643f349878aa6f7792f9c71174d43209ab97e63e13f"), ("099a797cfb1a58c95038c1b06251d26920250f0ea04a1cd864b71dcffce429d3", "13dc3f1eb2d47371d03eaf1c80afdcd5d32a6816f7bd9543cce56f6307f2a373", "0ef92d7c88d68abac1f0212c91ee331a9c32b53803e85f9eedd7f28220338d8a", "0869552d6a4b708e0cf8f9d7ccee53efa5c53628cae0370dd67b552e21da6895"), ("25c1e311bf3de50c9ec436009d57b1c2d0374e2b726681561bb1614e7c547811", "12bc0dd5c5665e16f98081e09fd15672d06d9e549d3707d92773e0ff6dcf4e03", "0c37ba69bc8542e0e9ff93a94c6e183a9f4fc5f1c7c32f4180810c3301a0b431", "2801dc8b69dd0eac6a47cbbe46dc9a49ac1473ad665a45a586eb40071263d860"), ("0ca1458f66fac330573e31a5d4b9a7ad7ea70370094bbdfe6fedce5b2a2b545c", "3059a16eeeb954cfe4a4025d102a4243880c39f938adfb48cc8a97ba3764f693", "061d3ca5f545bdc0ee7fcbf7c498dfd0f80e63a120babbc8314e20f831ed591b", "0b72b5e71ca659728d70dbf8a5e6b5b98b1a0475e8ba4676ff11511d0e026530"), ("2790d88fc3707ec5a3f3d48ec0e575fed01934ecad4a4b22aca62cc8188fd5b6", "1c74946f555e8eb4e8b5f06798676dc9612674c88b60401dae65cb15875639d4", "2d9d7588c112b79829c15d9cdf1548cff4069f3650a110f0da5713956eb6652b", "29edfd946a84b493a176c64841874b5d9adb5ae16ec5e9ea3ebb92884826ec37"), ("1ae019c61098396d1e39813c954860135910b8833c17d45f3d4b314aa5c4afe6", "1bd4de3c266245110440f051d8dbe3e22cd9841d8f7266abb29daebae494d506", "00bfbc7429ebe45d6e84e12c9cf01dfe4b93c8c451c4ca477d53b39430ef82d6", "19168015b4dd3cc2dfa4d5c58d9924207772a7ba3b9509f4c9bcac8bd81f8100"), ("2641e9ff33880d88a55204395ec66b8b82e415bea3b5d27549d37bb507f122f6", "2923ccbb6edd711d2f2ca534781d73666c233eb3625ae266dc5b9bd6714aac47", "2ec4daa7d6716f0a50bf60bd9253fec04a9843d8633c20e1545d9ef27602f621", "173e6bbc151d8c5edc5efd6cd0cb75980c4d1648d1d029a39af884e7812dc217"), ("179d772f52d060e2ac7d8f7cd3324918e7a0959d65192eef8b985c2cb0cadf26", "0d9657d6fa3f89eb315c40ebe5d5b1a44490cd170caa489e0fdd0d8b953db69f", "26cb08e8c5f252ba7b44ec368fa267dad73a0a7f79e3e6c1b236e1ea4f2aabc1", "1622b42d4032a18a93fb39ff77604e9ebc84dc25504c106c268bc5ddbb363376"), ("03ab85bff5fdfa70724a946693120edc3d057bec3e327a58dd3338a7b3d45c8c", "1cd9bae96274deb678c0cd1de2056bd423c0bca229d68cb31448c62db92aa77c", "1611770903efb067b11e8d56ca8105bbf4198e59f5ded837662761650a09002d", "0399855c75e536ed2ac391a681c4fdbc8e6652ef9b9ffab40b823ab2ea38f290"), ("011576d22041c66e2beefd5ffabb6fbab99388ca05c08f4ba214249897ec5f84", "2d405e068227e4801c0a69b0d7b024c90f3eb50489be2550663e511791156b9b", "009d76a32b9609034050be925e18dd95bb4181a5c92312846b6b0abf5ef88e8c", "0b22f67698c8ca8a541b3e7810d9eac21f3317c08385510bacd8cebf1ec30007"), ("18b587f1cd4c13a1e172d07b6a42775d1630099af46fa606139bc187c765be6a", "15d7bd11367ad6d3c1c4aa76f77e4a3a5f488c0ae6d4a35db3eb4949ff485e4f", "083b75e3d05bed40b8aee2873902d6ea7cd44cb0b6560c4f9295f45e66e36644", "1e6fc141663ae18ddab592a24c6830d04ec3548f33cc2ea64a929e8524aa9d84"), ("2f0102ae2153b6efba455751ddbbbe3c5ba3b1a22180ee1f3bf1b575494adefe", "27733452f3f3e29fe5f62efc55d9c16481d4b4c2bb7338c1f9584265f50e7c79", "01843b791abb30cfdee2b35e0f245e2660f5122bc2529599d0b7045ddbd90183", "13b10e25d0b26eb709a20126bcf32a7f45d285ebf76ac5672e94deee098afa5f"), ("200cb5b2485cac0395441eaaf98532e884ef06da5eefdd108cc6992944cd1a2d", "2a92f11755e7938768c1aeceddf6b26e674db096685ba0096277389c28ddbf34", "2e5063f9f4aba9b2cecad0f572febc09fd3822b162bd39f8f67dfcc41b4e2925", "0d15e83da67b5c25197bdd55cb39b53127e02c17bef74b4fcadd567fe98954fe"), ("03abb9264ee3e6a7d04dc71f9fab294136c7e2c05ab6846f01c266ecde328978", "019a1f69b153472cb193ab976e10aecc4ddaacd48d1d36ae3f9509c3c9c27ce5", "1f8dd75eb7baf435f13b8112ae3817593e658852c9d82f54e3f2a046a08d6c75", "1bb4688265e024f2345c640faca941eb2047d3b7b76fa4dbb0eadaf82a6badf8"), ("07e5117f6b02e9a4f56f951ac9e9697048dbb79270b1c4064c4ca4926fcf07bf", "1136a02a8240e94233be9c117da5a3e674ade02a32685f665d3f457b9ec08e3b", "00bbfaf4342c84973d8bde65abd002560cff467f723f02a603786b178c544fa2", "21510e652aecb920ea697e206d488c878fe54f1f1736d10e10a61962cb6f1992"), ("11a3e41ba9669e6bee57d4d11f530407d7c63f1be34dc271df7d0df7290c7d57", "0a57965c061b186e87234838a0392ba1914b9abefeb8f968f02ca8aaeec17d70", "0dc26431407a937b6e8f419ad7a62cb5c1723515374041f7f6a71624b21dee34", "0b728166105a1ef5d37bfc3ceb25e3330a00de60c6a61322bac024e04e7f028e"), ("2a8758d876fa827d7707b58c311c7a39cc62c98f5731cae25c54f7a8b9acc3e0", "180649d8ed3e0e41b55d27398d2da6ba143644e27085dcec9a7440455d52611b", "2fb105d99bfdbfcbb96731ca9ac5b93c94ef95d28c6b7b45ed3c4cd224752269", "1770c4d30cce54f149e24a0044a10536eec3daf8f69d4d6b505d5fee5870fd80"), ("1e1e34660b73662be9b6fbfdfa57368db2ddcfe5b637dfa2822697f983dd967d", "2f769941fa203da37763795a7fdba3c56a560ea591e56a839811d69af71f4af6", "1a6acce7e0573b874c037a7b3963627debfa16f2a52ebccec1cc20aea21aca25", "19b26f614816cc4355d3a8356ddc613c6b1aab9c1b3d3f3bc02b11b46e0c1abf"), ("103791395ed820b23fd473d35858ba63a148ccfadb26ad1bc836ceeeeb9f492d", "050845644f543b31e6c0a40e082d60f8b6b696cd9aaeb0ee04259a62da78fbd0", "13f4257ec384d3567e3b50df51124cf4e5b74418b68f5850a3b0a84e136650b5", "2098dfbbef90ad852ef21a3b1bc6466ad4548e1860572ac6722400695449e5a7"), ("1ef61d9e789e32a53669d21956ad4cc7f0698f049e3e42dc44735c6ebd6c67f8", "17ae63a7bd0ed501b0757dbef9335e7c25d68f85844d3e038e22a41fd206b4e6", "062a035858b158ffe4630dcc04840f726a6e91c9bc07976446ec33b76d430de8", "18c8e3c6aec39dd416eba5bd6cfc2abd035770d7c79ca4082b4c3b297b4ed08f"), ("004bbbd50ae59d64deeb3555296462327924b0c377f5b22f253f3d275da77a28", "0359eb86d02f08ccbb9560214d74b30b6936e8f5859ed84f41f4fdf0bdaf0cf4", "016c496f71d4871c76f5052b4633913e8b31eafc3b0917e67c5153e220a43b31", "2f6bf9d3126b8a5a80eef7f25516426bd4968eddff2e39ce1193ba4b0cc2f4fd"), ("12bf8347d519f97711cc0a15158f187a4d363a29b2c678179dd919d4725df23b", "2b620449673fbdb613ad386b43e39f636371774a4a56a974065ae1f828b9ec27", "1a2c820a818c359e67edddc9fef9f4bb96cb30a23fe9c81e7ae0bc76290a42b7", "292ec395768ce05221d340eab2b6a600bf73876dce8b6c87dbc55b60a95c8dd6"), ("292eabf871121ae17b227a85cadaa32f6f0c4b1cf2759ec309be40d48b32f649", "26f76457bb1ff46121410195284d2bd5bb3df87e1293a52ef08bd536aad662ac", "19025ad054118289a29f57deb54166f7296ba72c030b73b31c25d6d32c4374b8", "07df696f1b400fa5f0dfbe330938cd6aa3771e8739144bea5087fcebd4af5169"), ("273886b8fbb6abb51d6d7da768c34cc12af24324ccdc3e7655ededa62cd536c0", "2b930af4c66c00d768458bc936336c7c1ba36e90e4aaed3f200d1f83bf80537f", "1924b0f1bae453852798a5dcd4668306ad1b2118bf5ca2dc27cdc6de4a3e663f", "2540b45c9b9176837b6b82e3b4e5f106d136b11e392ea9cda9137b39801532e7"), ("2735d5494555e3ab8976f602e84f6964e434fad85a14fcb08a695180d479e0f0", "14af516009c401fb605a8535a4688cf1000e61e9c5664fdb8c626d8a32ef6a93", "0df583e3ab2724229db95d1ef25434f3593093cdb0f899e247c903748a694d61", "020cf3eeac177fdc1bd2f09d6b0be5203618b9873702d88cb38fb0a01ba8f369"), ("0af853fdc3e079608739476ff260979c342adda6d175f05bc48979e120ecf6f0", "04c7adcf7865b9db237a605f8727ec7f7313f92c9ce20a4f16d225a3671e823a", "0ff758317d4c28c1bac4f00b5669b601c19210c5607b816272609325bebe083d", "0759504d387418cc122d2addf3dc534f282f3e8027cf4ce75a4f036ebf5b15e3"), ("10d94848730faf6327864803c620cc83b311a2166e02701d6662efa3fec584a1", "2826cc77a8e614ca63a5080c90d6d4541fd6378c30fc71f228c96443b226b9ab", "17d34565e9a007d386b55cdd1765881d0688381dddbf87482f16316f7fdb9f69", "1747cdfd58fde5a019e1f6b5b504844eba885ae33713adb7e4e71354ea3a56aa"), ("1c962d34b89aac81f956611845e07df4ebfb51a08f449de35c61624e91c5f359", "20d72732d1f260b0876b2ac1eec49da3b57ae4e8a995725508bc5423e7256b0a", "0031595104a3e060b7d6389792eaa41fadffe98830fde0b8cde62136c79c3104", "22e465c034f4ac7430eeea19fe75b067422d45213ee9c26313d107990e2eed28"), ("1ccfd5331a56c36d89c85c59771b68a5f01c53c7e52b1c483e2e5330ceefd7e8", "20b3b2a80847bf5e78dda7a68a17d7922816ad25ada13e3239ce63aa803839ea", "0972d54c51318edaafe8055a8a37be2762d3824e2565ad7da58cdd134fd7165c", "23cbc2881635712ca2af2411987803f3a9f26df065bcd2c95121142fe9d105a7"), ("26a125095feff5897624bd552bf40f386f1f54b55d7814dd7765a37faf937338", "177b4450eb2fee195dd179ddf7f9cc8d69f9c83ba03d057eb699ddbecd92bc48", "269a54b4337b694d7ecc5d4b2e8cfb567e3cd9d05a9489925fdef86958935d33", "2e220b88b569b3592657f2cc285b610f5142f70f53de97707b2733f908c0ff98"), ("2fd03ac0402e89eac03880abcc92f58342cfe857d3f2ef16b8e34eccfd5720fc", "0b6666c9db4731e3fe830b4dd2d85fdb8200aaa56a6e0c71f8bc187dd913c341", "1a920932de40397787afdec3aa8097775fea6e68b76159aade0fe3de444779ea", "11aeaeffbb0bb0390c4d0757816681bee1788d0ac6abeaf4c69f18dd63094518"), ("262db716b7a11491839b2d2a68613b7e9318679a828d70a92ee0a2ac342bd0f1", "2cb93c1cac5e290ccd0ab4f058fbbf9099ca7ed8c25b3bb373c1bb9bff6b42da", "1eb97fe01cc0d1b71bd9bf55c7df69708ac0719493d04e8f0b08eb36c8d0e15b", "147f6ee344d5cc4ab23b758c8539e26922f91cad42ec7cb33aac9e58ed29a195"), ("2bbc698946017ddf9df526e5c25fc966ade031ab1855d95a43ff4f61f974dc3e", "20d93abc1c3a571fcbf17a2997fb67c30594b1cce55118dd0e21fb4d145c3ede", "09cafc34971434e4b6c1c979d707c6c271e2d4680977d1456ae81d15376593a9", "2911df6674539589833b5600bfd8ff4aee8479b00f6ab512eefc97c374a2b2cd"), ("2df1219f7ac3df445865cd0aae02af421ff624bbf57e8bdbafb478aa999d15a7", "11ece4214da629d0ba76b84ed20c5a0b6c80ee97962ac05094f82aa716118e9c", "15147afce07e1a6b978713f4c4b672ac73bf1a085dd581c929dc85d002f6a15b", "26873379fb0491bf04c1d2b2f5674f642163737c1f176d8fcc66c44115e2c04b"), ("12332000330fab2578fc06bdbba4fb926d068d3cfe3796b1f31f2a3a7fb6d6ab", "19b3437307354ac46bd2790cdec590e66b6a326230640a5ffc2aeaeea5f562ae", "11f61339e21b8281df24b7121f486bda51b48d718b7756c24f8f5e2d7bec48ef", "218d9156e462ddb41d90799573bae750205f559a96f82954dfad53997456ba22"), ("242c3536e74900ebda50cdc5deaaa3f23c4a1377829b5207165904b86fc194d8", "2a83bc503db83c8982349a9684e23fd44b2f90c0465eae6745363480b026d92b", "1cc7b5da4da54bebf611778efb35ac58041244cb07927c26a3a23558fb2c03de", "2ca47bb07e08221f334c08ccae9db19c4e2f3a96f3e45a741dfb57cc532ba49c"), ("165074d226730108305e8562b5a0196c4122530149a85ac358256f6ed1ef721a", "156d55141f56040f13540c994ee1c7533a5ab4f93acf37f0cb580d21c5413ea1", "08979a727f9c5184ee1445dc5e7998f8b269b08d4f65e17e9a141ce3a6b5e6ed", "2daf6052cdf1665c0415f9820564a681647e414918c162f6459c6b320ed17ed3"), ("0e5e6baac6f5d72c53629af5d5684491fbd5400fca4b312106e561b83450cfc7", "2004616aff4a7532c93279e7b81eb4723916067c70a9f73bc2cf1b953cd55ccd", "0b806e5e6bea378bf376c905a93d7e081947a35cf4ac0f1e209be66296a6ebae", "29d63bf2c5a4d602d4e7c93c86fec869626565fc1aece517d9dee4ccd7dc781f"), ("1ea0cdda89c714a822f64e3f657d2d8285f703a31630334820655450a4331b3c", "14e8f8d6617291101407757367c7d6805a806c14a2d705faabdd7c231833e631", "261a18f4c1fc50b472575e61ae1d144d09f5dfb368f43b179095c138ce097f2e", "0d211a26ac2802523cae59023f377b519ebfe4f76eb3c1bfc72e52e6f4b261e6"), ("149d0d6906fd0246411921e00c11de7f5480fc247457ea7411964fb26cb15899", "2d3f887e15aa5b5a32458e6af512f6cc54abb664ded98de90d38b47dec4bd486", "0efb869961ce5bcfa6266bc64ea2a47e9c077f593135eb43a5a544fc911e83c9", "0d475605a5c56ca19352447cc783be6d1b65c1b96f6d871351d2625dfc0799dd"), ("2a6fc44cf9b199f586431edea6223acf3d7b9cf2cf130ea2a1c8b32ba3a6c464", "0fa90fe35ffe8fceeb2181e5120bb596ad7dc768b8c868132593a068ebaa9b43", "1594287bdb963df02d1644044f1c871bde3ec3b216f027d7d45517a3201cfef9", "0858867a7f1ad0ad8f4ecda4b5679a657346a154e5dfea2aa3434baeb34c0836"), ("10ee061269f4aca577d47b8275e761c59764c25f7360bb1f183601f4cd690a5a", "2228f1e47ba9b6f35a58b2a4f5ebae343d6b9f4d8f5b28cb2e2c48c444be6474", "0f1f2372dff191e1976e72bcb932c0016c17e5c9f557304c7c61ebfe525a1948", "1e748044a3d1fb47236b04231acaed66afa670e4e7304ddfcaec01c312e2c23e"), ("1b14df58fddde2aefb41dfaac6f3b0b04f1067c594699fe2b39ee305615c4b4d", "2e75a79e35e6dc512e6dc524b5359b2fa7d3ee0b90fa393054f3c396454e1bdc", "152d7921951b9a5eb64418e4d42d2473f2107954821d040d681babefed166f97", "23e208173d2c45eac17442f217c65ddd9ab63432a05f65345eee7cb37e7442d3"), ("2a7dc9704f30719d1b382ce55a58b68139f63e1b8301daad52f4654e22ee2740", "06608e472236559e6e1f0be8d7f975b7593d1f5537bcff10f4eb20bfd51f3a18", "03039da72d4c421091ccbf8aaaaf089b28ffc8c99fddda54094f4a571a8addbd", "286aeb47b25ab7fccccea7a5c3217d9fa1df8cb0ccf81d9a69c408f8dc28b7bf"), ("2c8ab45859a8e4ae9fead13ea4f348d5eacd410629a9d01942b9796850e82c78", "2942b8b1c5de3ce434823c8df341e6a2f72e0f6a050a463ebf6418fb04693961", "2cc8fb3597ee43971a866f10c23bf0eb0d583e087be3621f5b1f1feacb78244e", "1bbe7160a6131b05447e083bd9b7a73368854797aa15d19fcaea71a2e556cdef"), ("16d5409a566becea5cf88a78a4fc629ee496486d8ddcb1144f9e40331f2c8f3f", "1a987957f67e06e63d8555b9fb569c77bf4fec199a703b5827e9bee305cdedc0", "03bb7890c871fdfe7fb81f8d56c24df9e61b20518d50aece919a55f23fb19b90", "09f4afa0101ce08e5e62aff4990e4bd8ed58def8d203f59c1a9e9db7ad0ed6ea"), ("264784e143fef7f173edefd6eb9bada4b124563550c342569814ae85b76b85f8", "0b1114053cfb46b63287aed443b9f418364fb176a47f4825231866317ad993c3", "15f9630ed6dc0d52f9aae123f3587da4662c03c7ee49a7cf8a72d2689943f18a", "2a0ffe437e6c30cba9e9d11d76d08a7d7447c67fccda99b9698cedf38f5a6e6a"), ("0dbd0c4bd213334019647cd1a9ffb8432b32d4d1d1da01e04f524ed2152813a6", "15c2e3406a1dd78b487f1143901eb7054158fcbf318633626e891fde69c54c93", "0f8d7570e5623cf87e2a0f538f7355af0e823c93f2abc0989e3807dc172c75be", "2433235207232b9304d2c2ae1365e798c66d5807da12a385ab9e0ab426f8a348"), ("0f90fcb449eb5673424ef737b3d9da54476e844af88d2ebeb2cd2ece23693839", "13975e5280aa1341478d3ea40978e05b50ce644c312f5ada037320ee8fbdc52b", "161cf7fa5cd251bd71477ba2259385d6ffb45e6d2eb3b921e603d49bf835dee1", "2a3efb5c01ca334b2efe76c0aef1dc42ec7f2a4d922909868d6406b383c6e7c6"), ("08aa50729bf0ce87ac9b9471e6a1d4d251f6470788c7b76b2132d79ee8436533", "163adffb9e15e18a683d0ae42c1cb0934a25d7311cd05d9e1d137f483c28edb3", "1d530d1c10e4e7c648568a5e806b606a149be10f250dda40b3fb1c3d66e87ebe", "0d542dec302433f75c50488088b10161f39faa6a99e4a459da828bf9e90e89f6"), ("12767baf65ad83b90ad0c6fdd83cff52421be5cad4ffcfcc6ff737ad2d5d90a0", "0ad522febe731a7a0695f8077ee7c02bda26934b4e1656f1f4280604fb1380ec", "2b7f22cf8a9c5b9dd1b3182fec56a313b52dcea5a60ee24ecbe0bcb6335548e0", "1daeeecffc4001424228885d071c0d834c0636efa677712e3a340dc27324d59d"), ("2031de5683b43f01f41507ac7004af8b00df9369609c04261707716278131e67", "176be0cd4df600bf1ef1ee5c32d9e447f37eb064ff6ff59739fa3886048d3e89", "0f790fba01092869229d344bd6730afe2b98107aae766a8379eb2734c08fd7ff", "1bdeced2f2e36949827d1c08c1103c2f7a8da800aa5b62b370ee34353fa02b1a"), ("1a45258c5549f75a0307b5ccd6e002cc92e84895319cc4a8975596ab1d3ea198", "2bee62d92a6ec200073a870f6f8824d72c988d2125e3ec10d6cd9be8edef09a4", "23e4ce5231359b46846c51659b5595b00811f2308155f46100f238837f57c305", "10b30e3c3085f82f7d0ccd73be52ad1895aeeba21ba2ac3fbd4f215dcc70c90a"), ("1b7c523e06a9c3b835e0dae38d7e64d8d4285a42ff873f51248980a62142664d", "1688fcf3086837460bf11733f7c4c0aba83deaba9df1f38fc352e0f8c2ca0546", "2b8a082a07e0d532f37a4069f76bde412d78dba07e0c81a9cd9b219cbaaa60d6", "0ac5c321a7ec2a8d682ffd4d3b12b5834c58b0f3eca89525b73d82fc36aad2f4"), ("0043c47545e8a2d3cc7b153f946d4f54dd3f77f8cc70dea010a2c312724014fc", "11b502fdb05ad81648f205d068b3eaf31628a529fe6068b32543887964b93bd4", "273ec46e45df5bf0a1e864a33782843cfe0a7e5e9ea7f2b0f9e734ca618bb355", "20e48166219b35da5387f7c329cc3cc86accd598e646b4a62e88f14d60d37753"), ("2dc32d485eabfe08d0353e7e3a2c69483851621e2a0f1a69649bf3b08f32350b", "271f0b47fd8ee498b1cb2b36e998b2445b7c4154e942cdffe5ba01a8686b9894", "07653ff2d80ad8080dec3782a4b66246617ef44706438b1e6c470a532f4fdccd", "0f9f02417f2f11d6642b957cd9aeb7b37a6767265116881de6c0f80a714e7e11"), ("2c2ed8406875a19afdb051f2a705ff390d296d28b1cb04c625ba62ddef817aa5", "05ac23cd826a5e89c41467e31415719d96feaaf4c140a720a06b322b6fbf4c14", "2eef44664ac3bac6a3ca54eced238604eaa76b02566a005dc347452d21c0cda2", "0a8b456fb56501d70210a65fc505e1a24f64e23618a4ca27f8d696f9ef58399a"), ("1ab93de921369a444369b8e0a41c2a2e1691f1b524d3589852433861435bd333", "24f61b81e9abeef24d4105615c433af69a659a27a05b4036a11a0e7a02e8abf9", "10ab3755ff21089f9f9e7f14f921398d10b3aadc70743063e5727fe8bd6437c0", "26e7c81798a8a2676d8109fdfcc022f5fe9adee3dfd9397914f136c73f547923"), ("279a82c317c447f53011cb8c0aa8f7e9650191572228b4bc6a30a3946e83aa06", "2b7437570e907ae245a8da5c33783dc54fa2ac18a186ea14ec4469b55c3d622f", "0a498678f760d28646061e9bc997de8fe9d2b7b2eb9fb853df90053d81ca9ebf", "12bd1d60421395763ddee624d34b0c694b83b73a6663a56962854eba1abc4d12"), ("0e7c1c49668428d4db8ae0830febd8d90f567b53be15918065217b54e76eac13", "1c2b4acd7728ac3a69dfc2d2ff5a317da403f754ca71ace324585486a1b025ed", "24c2b022e95892600fb419538dc74a8641b8283a2394817e8130aa0c28065ec4", "092d7becc86d02f658c16b0d4b3f88afd8a0881fc08040ab0275e5b2b956a99e"), ("1d56fc78ebfdeb7b642b46458b195fc67b7e05f770a12fe0b940c52c2410fef5", "0258eb411705b1573bb74a7773b8abf977970acc1f149853159fb6403835c124", "1e9fe5a4b5ef78d56886bb6533e769385d666c602611111e58c2667ccbd1e00c", "26004a22b476fea5f8ea383eba91146e6a70a21b49f254613c2166c5a0a90625"), ("024ec177d4db8b47d8b5053d82a96ebdb1d77257965ab9c8c1ad12606f3a4e3d", "0302517ca9ee7eb9ae82db1fc916528a88547f6cb6363531ec799ea6e17bb7f7", "124ac357eb7d9b8d534d09eff3bbfdeb0c80bfb199556d0d1913016e6d922486", "05ccbd3624f862c07942b3a6467f318044f449730f6d58ca7b394e8c2fd45b49"), ("0f0b0636ecaa7ee909b22241858dccf28a233c43f4cdca2f6546373d163c3066", "2ba521cb3f723820b7c34de9b6ea229ea701119640e35479538d2e946dcf08b3", "2ef359b2eb119a11e95dc1e5c7be097ed53ae7ee2c85502820dac6f96449e13a", "0ef6e0e5909432b8f3aabeebb93810980785ec8d2ff7b39397cc356b167e05e5"), ("02a5b670c83aa8f4d419b1de6daf361cdb2188a89ba12f9811aeb12b57910932", "0053eb88b26020d150a59896be2dfadf7c6c66facbfdafe4e7c24dce53317126", "178dc5bd6cec28f902f85d77173728db12a01855f07ebcf10985f490cd1e62b0", "2c7ce31f305ea09cce7d804fdeb491287d3f7c3414cd216a481416c23eab61b5"), ("2acda11b4ed5d6cc1a69be601b5e2211d2c65f2a9c4bf282636f662e2560a301", "0f3047381bf3f6bd7a9b2cca3b051aa5f564bcac56edce34141b97668c2effb1", "245f445ceb80404e5ddb526f5ddcb1f4a59d2134f1fd687b564db7ce30048ac0", "2ffbf7cb099bb72ac553d3edac87b3861c665687de63fe57f8d9577dad994c57"), ("17c0e4f1a062b4feafa3fe34b49ec16b538afab8a75e08551de188e512ac511e", "09b5bac154d5a8035e01bafe7d8a81d630bc1c1cd567e27939b60b6ac0f8bee3", "27c6847b2ed2e8176f59c62d8c4be59f2cfcc259fe60d2bb5ba32bf91e6aa829", "0e0bbf01886975aad7786a496db61531f3a0bef4f778f627546cc32bfee3aae9"), ("287983064ae935f9ca5a7a9ebf2b258fd275ce69d6baac02938484e9a8e4c00d", "0fc43e703c01073b09f06eec928c75a22eebcc14a7d20964b0da8a7145d0d8c2", "1563e7201280feee7d8090e373244b2b85209c39d2104e5ac263fedb968f4c74", "202f7e11e3dcec921ce18e53228574cd4f7b1004614185a08e6d211860f72b99"), ("1231fc806e493f2ceab944db1b2d5f6533bd8d929ae8dbf006b4122733d5ec6e", "241558a8aa8ec5ec55fc2f35235bf3813bf7de567df007b67b596b7513ea5f41", "086d16308478a9810ad5321033222410a3c841a54113efaea0280665ef5f5b21", "14a34acd8890d971f1889809182b7a3597b31921ff59d5280b33fb70dd5d9ebc"), ("004ab7767c8157b0c648cec511d16822c6b718e4e20a6a303810c856260678d6", "1d8ebb5cc1d6b795667efe473ca70923e523271d2072ce90a4d72865d4cfba21", "2ce212cb5570165b06055285e0ed1e7315e5d44d65ba713b44d09f27d75cdf0a", "0ab82a727c0deebcfe78faf81bf7a9ea8d5bcc7a5d0b07e0821edda74a5b22a3"), ("1dc327d775539a687bcb0958b496c9488800e3841aed69a87f84e7ef67d2256d", "19707c36658464993dbfb61fd6b7979f6e74e449ef855376ae7aacf480b95b80", "069178067574516ed168b36149e0322af0438584c171083a770a8c18e491b4e5", "165f7b721a6e1702702e7eb1227c174e976d2752758a41f37c65cb23e5b226a3"), ("2b0f2bd6d4cb153b50787d1da96cca85c8a5aef50d9c4fcefbee5ccefe3c3250", "17e2d18f3aee92ca4cf2aeee1b4f7e65519dbcff7716a30ec80aa5aad1ca97b8", "156fea473b5bdf28ddb7c28921d64f4ccc55e3f0df930f2ad8b98e2a559b615f", "033930684f38aad15c0ea079fe50b9af0d33f1f1a78527cd617a9e3c311ab23d"), ("11b9b0bb7c6ce51c90d637eb530b08c5b41bb538d45fa5b78e022ccd958b9344", "1243fd880b7701f7dc5d1427ec46f476ef16a5aebcf237eb68c26b4219f48244", "1aa6a5496b8bee8344746e5634814d90172f9f6bb699c975dc583612156f8d4c", "27b3268dfd9f25e63e8c18b7151698a7ae1bfef70c49089161009b9c40ac1709"), ("239d3ba46048b74f659745027bf524755d11110c0243c032a45f3a58a302385c", "16e9ebbf37c215bcb37054b06421b14101f0f40ad87bb35396e0cebc225bd9e8", "06f5c7d2f6a5f1c4b09c0699d8828d24d871038b09dff586e4e8f8bbd500620f", "1080f008d9c70a63afdef5dadb76c56317c3cfac47571540446a99913279bd38"), ("2283932ec95f55736f6a4a9f12375a0d5bab059d85b11aeb84301703a8e7e7cc", "089d9217d5ab7e2a2a73f143fe76ccb33d7b7e0c3e2c6e6f4e2026d1aab2544c", "23513b33824a116cb746bf9a9e1c4f5a18c34762475a311fa11983b3d1a914b5", "04ad24a88c47d8647cc5284ef0710023408aaf6439a99d85892b77a85e55ca66"), ("20c050e08b2ac04a2294490ac03f35925a534d534baddc9b1d9fe2b7a41763f9", "1b3ab90b8629500312dfa2aa391fa52ba07f74661799c24cc49f44034fcf0419", "1f3baec6cf68a5973a10a95fa1af49e3639fc5327624615f43220180112f597a", "07aa0211ff828c406e0aac1eb70dd2d468fd99e6b4d8b8bdd77e0fc04e4b1cdd"), ("2943b55c29d46a6d6e7d494e2895cc17ec465214c5f5e5ff974758e5f5e0713f", "281574d61df6598c6e78c880383382b99f54cd31e77b9b4b02c23e338cbf5db4", "27b4c0648a6da16f653a142b2548ce2e33097eee495de23775bbc70fd3d9e74e", "2aec12e86041dabee1dd6ff10b8b4d902d5e9a0cd8099ba8438192933857ff09"), ("01ebb34596ae09d3f8f9cf95bb869977291dda59a66a95c3e0f38d1ae65e5e23", "0b41315059f00b684d6ac534acbbaf0e86e73cb816cf2cdaa21d1d3312e02551", "29dbf1133e15a6db7216c7c001837e43aa9e8deb87f1ff9d57265e9dad1b6c2c", "0e89e4fd9d139120b07f40e588357f603504423519845640413cd1a390e73a98"), ("2b92375673afad2018dbf6b90c5da15f0f7dec7e692e97e3cb89d643fb67f49e", "164fbf7c44464428df145b55ffb2c94e5ee9935ab00e723a6a0606b99a2a55f8", "12e12631e998e6b11807d815db753df075971c0804057019310aecc939548409", "1461238060385878d1c53326e0ddd0683f66d3bce09779cb9af0cfae9c97cdc8"), ("19a7e1211329871a472c6d1718684cd961cdf40f0a121d8bb61a285ab3d4df90", "21857c031cb0d9d4ac8111a5b19d3153b0a68ec821fda788ed5d87220b69912d", "0c195cd8b1d7acec2e23021d76d2b4ea284fee92fdf7017142c457b594118747", "1c27dbadb27191127de6570099be73f557b4fdf57e74d882d031bc33d1937cdf"), ("102e395543bd6cf45c182b7c312ad6573a2e49a4322b1b4e5efee3a893592a22", "0b54935335a103f3272428875bf9f5b6bfa62bd6649e2d2a274c6cc0751db93d", "0be04cd52076b4d737817ee4c82f9fc24d62bf141963299d94dbf11c5cb987c9", "08354f02a080c0ffffc09faf1b095e277989eb60f0f1c2644da19dfbca22734f"), ("1bfe42d02f352e8b97538785ae615ae233133ab6dfa9eee90382548e0532cca3", "2156093f6933707d94d8cd10abf2434826ea66c58732cec5aa856616809cc49e", "248bf6b921c81eb44b15e52c8baf60680538f13041d35f40b82758d7ee12e43d", "1be799fcf0efb940e80c169309910e7e030c39811d960c34f897d5b805ef4088"), ("1ed83cf17e2d3c217b9632f5dcf709758cf156ae0eea4fd2ab32c5abbcd589bc", "0f1cac1043cd7630cc37cfe6b3f50810cc5d65cf55459b5946f0881218298924", "26053789440eebba4b4dbe3ba99fa2f89407886bc5ea066ca837ba8b9cd96f83", "2fded840bd6317c81cfb553440bfe9fd23166d47d73c48f5de8b163d011ff825"), ("11b1b904cd9b104bb89f8d1e29ddbd02bd8a8b465d6860fe32c334d5246481e7", "08df81527255e9087c96c7b59f54183251536a92882209ff1b8632cc042723c5", "11e36086b53ec242cd752c5d640fd0305108c71911b27e5a7aa7c1d450815f60", "27f251dbf3d7fc73cdd1126a84081e9823287c0f9b2ee13a0ec17499c9018d85"), ("1999503ba1feb96337eca21c08d062e3527157e559484bcc90283a8f9eba48a5", "077d346760482605296c966d4c83de0245145b7617787e7bf3e880e241a79145", "0c0eb1d657e65a4319ca71cc55407d95bc1c20d5b7fce87cd0d375ac40a4fcc4", "2740105c0cc0b02c9445a6447c73e900664413db04416f0f8683f411d95d0a1c"), ("23a1694a08806a456507b2a8e67afa1cdb18e80b491b6ad72bce844cd614ea6d", "2f6eca5637812e2e73099b9871fb22e3ba4a2413b47c863149302baafd6568a6", "07e46dab44d4cd06de5655161ce91afe9bc2ca61d4860750dc111aa89542edf0", "1cac23ad32691a42a3c6d96b8e967c2b1952e3e2ab1406f3247cee24768cdf84"), ("0e469e9211cad735fad4f72493c6414443605b07d1bf6876728d07216ca7986a", "0c7fbf5c28c63bfd5f09a16a657854bdf6ccd2514af233f0ba226f77d77abd09", "2aac95b1ac2af3753fe191315f2595f3accbe85ec42a6701e6dcc675d55a179e", "0f1e18ad4cd23becc35b97ac1ddb3486d602db9093ec3db8c83fc370690f5b74"), ("054f070cd063832ff59b451e24ce5a7fb3e0f7a482aa1bd2a4f14d025e0d26d3", "09878e527cd59ca826ce2803428c4fc892c9f0ce2c1f751ab7726e56ade52e54", "20273f451744d86df80c95c059f2d00b713f49ac01ecbc31948bb164331ec27b", "070dfe15c57631abd285b11034abfb24b2f6c4628f9d7fd760b698eb90161ff7"), ("21a38848c123a03f7404dbf59c8afcd229a6774aabb66b161ed8bebea88d53b2", "2f8eb063daadc7cfd71297d1e29f2c3ea53578754f45fc0a453c0d6828f74f55", "231c556faaec358cecd6ff0492df00d975a753ffb14c1d2f87b148de5fbac433", "0dfeaa477ef1f15486a478554c252bdc9dfac695d0634b5cc2b1ab976ad9acff"), ("27eb4f174515038552151883542371cd80213314f3b92e5c4fffd73dc434651a", "026f59df20997c1a310526fa0e79d26388ad524417fcd59e5262933f439b1711", "01b43ed1d423db3326668363c7405a2feb30be2f123eabd7b96d128215c5b1ab", "28e0f43be0eeb3d0faf2938f344d305984c64b25d275fbec1290d07aa93c317a"), ("1443e27c571b1b01db1e5a82126f95c37bb644f3ab4404c46ec90183be1fa36b", "0536d8a6540aa10947f2c3873fa1d250f8b4cec90b97376e4de1da4180d52ff9", "18589d439fad2477fe0615517f91d05a18d2576926e2c3be6cdd911179a964f0", "013354e1dc30a8a126f0555e15674079f0898156907e10f39a8c9a8fb53abe3a"), ("04f06bed3ee1bee89118edf12ba75a34a732d149bf5298b6e95e505a00f950d0", "2da05d46d7e3c815405822c55bae94c89d2e55cf01747ee6724e571379b2ff31", "0846bde47e82e443f38ac8ba14460904d2c1103c30223a2571f71ee628b9e65d", "2fc1944e96b567c4b59813a8c2870248c32d04c6341dffe10e8cf7cab6836834"), ("081ad175c10d225999dd79273d75f490b0fbc0c7281c49da46cb2b677d6b20c3", "027ed266817a0070994d515de536884444d2ed3f30f3a3215cce980dc35aa534", "2384dc7321b86a9763564b91b46c027d83e3c6d143da75658291d6ee778af50e", "1cc2033f8c0ce113d0306e03112f17cf2d5406ce5c3be89a228e7a6658dfd79d"), ("13f53883d2935afe7b8fd652fa6bbdae1132eab887da11e3c7d00d14ee787fd3", "28b37957fb1eb9d8980d7d56db5d846346b4fa5d886c3e34159b55fb591b5fa2", "0e2f8fdff2d8637d56a127e6c96cc9eafc7cdb24bfd8e263f80380dca8ed1211", "07d059193c7d8b4afb5b052d2057569c55ac2783bcbc00aec6b7ab5a425eabde"), ("0e2667cc018fc3a0e65e1d01cc3fc8429b0d9b4ea1a517a6f80d5a7eb4a55b75", "19d9b34bd73f01b241f4fbf672cf386608087d34df293f8485f4874c8ebbb258", "166e7243cf609ab810d5c87b5cfb2d6f4464c7037b908a395b2c1674d378d2a4", "294022c3989e0d7943dc8b0d8bba3a7b509cee0b6f9c798f2ed935dba51896c1"), ("11b02707d288face88814e7b3b78762ef52f8df578810b746cb8192653d46eeb", "17dc2936d5a30cc7c43ab3855bec49b46d25855d8e49a4e7482c6bcdca48f3fd", "000810be2fe9cc3c6f61c3c01d3c3baab826fcc19d361577bb248e159333ac92", "2d18a5b9ea6b8167bc710e52273072e93c0e10941607312912914f443b128c5d"), ("170b26c94b4b7c6eebc917fa3c0ed322baeea5941549325cf60cbb77e66f5f56", "11c8e4ef5daa8663d222f7a632476c8b9f4074bd43d13dfcf0b2ff531300ba69", "2219eaffc3a6274869800d839150cddb347f6b38b96ef87301f33c51ab79d275", "045d4bf73277b7023ab9f1e1d8200397cc153ad0183dc2ed486e71f1d38cf52e"), ("1a5d914e8e75783bd3ae8d3ab70b329f5cb236b1bc2edde1728e6e7febc03a54", "04080372355b4c00080ac452bfb8bbdfb068a1dc45f3521e2d672eacaf013f20", "087e52940e86c4eda14296403df4d47892b683cbd1b41e4123c16c4d5350db76", "2f4b0f848b9da0f5351ab9e8febcc9a0cc2c875920ac545a1095b29e369725b6"), ("08925cb6dc7e7574266f955b6e988b9e0db70687c29db6acd8a62c98a3876dd8", "1770b9867e0c97eabdc77706cfa5fb5174f987e03438e9b993d64aaad705986e", "1bca237bf2ae6b2149fef33c36662dc5fb29b2e9d1837d5e29c4151d9d194bc3", "14935d8fb9a739cb18aa7671ad583005fe76861ff95cfcbeb27906be4c4252a6"), ("07e21feb1c7f37cb809a926d3e8dd4d9806c01f32d0c601046b3ecf6c6af5180", "0b41ce420eb0a5ff6bae304ecdc258f57f4a7895f82d750acabca1774378969a", "2c6af2a88ae6927cc290c821bce2bbc21c17fa6a18209c8a8d5752115576e9c5", "224d1d62f13207d5a1ee4ac857b659c35689c52c3a43f9a7c7aaee09b9a967c4"), ("114c1a25ef169420afea837d130098cc985b8fc32cb0ee0173cf88fff43d54f4", "2eee3e941232a2bb74593ccf80d137b660cf901063afea20c061c7522a7f5d66", "212f298ff8aa5d5cb3c566b8410859d352a44c40713d379608bdb3352c081899", "13ee5f58d79fc254e01d1c12fe476a09b38414a3d7c0654530067ba0ee58c420"), ("06a38cf00ed2c64a35d2058612489779892973ff1bbf6cb2710b5967c4ef0c86", "27c4d29b7c69e45e2dfaeb568bc77e5bbe56d576baca836c28fba0e5946ea133", "181ee95406952d8cb5696ff79e6fd07c31b659300dfddac72b4f2fd8b01385d4", "22a59896bd8b200eefbdd0afc5a25cc2cb2088b2784f322359afb2bd5dca8f03"), ("0c0051278d539b5b7eb9c8566f15c4f5d76e5ed0bcf360d4fa6d567b5b89ffbf", "2dc6d582acedde9f75ce0f7cf8c582158e02488456bb7352fb6fef9c66351cc2", "05e1675539fd567e31c93b4c0145c6a257b719f16f1b12a4daad651317ad1df5", "2e81c5c1b66e3c68641718e710a9a6397c12eb78ecb617d159771d6f54a50b72"), ("0577aff8da502802ef46eb074c74844f9c1c5211bc9d61cdde1fce52bab9f2e0", "00d2186959f4a02bcdaf181b93412822c6776227ef1c25325f09ac09deffce1c", "0ef044f070f453dc36c3a26150428f8ac64744118fb2a24e37ade1dd07eabaf0", "05d508a1d8c27bd28e0533e9f82a4e4fc45d9339ac75e3491a6b1ac0a8081288"), ("2c0e7ede7cb8905eb218efb81f824bd50d5b2c4d282e9128877bdcefd53964d9", "05bb254dc5a780d202e995b9c31a703632500606d8e0a171c3ac9eab82ef3697", "084da33d4ebe7acb771cb218de18baa934dd2b066681b8671caad88b117cefe8", "05db04b939290184e128282f038ada6fcce30e1a9c3288e6442640a44be062a1"), ("22d5cc363c35ad716e754c4960f5db16e73b99614c948fd8b24bd26149286664", "111465318ad070203944769b8ce47e6909b2ca519a1d6c4f68b5770424ac57d0", "196de32a00e88150aa6ed0cabbfdf0575aaa0d6c6082eb3f3e85300ddfeba9d2", "1599f829af2a0856a3b0ef1062aaf5ee8bf49f4d8e2e37b120975069bceba8e4"), ("2fba6776fc50ecc64972281ba015d65ad4403631b45db85535833b6060b1cd2d", "2c0301b267d625a60a7c6831317ad18d13d7ac695bda1f97b1f4ccb6bd0a7479", "25a70eeafe201a7b9dc169b6e04725b378bd775dd066f98e914cb250868be4f6", "0561407e6e260788ee0f4fa7fba69d8db06aaf0d9a23b24dd122da920bbe01e6"), ("1ba6970c4fbb7d6cd8d1ddef6505f97db19fef441bcd72890f8a711856d97ec4", "0d53062d78229e177102fc3511243cfa01cdfb195a3a19dcab3b149b8251e36a", "122ee19cc344c6d0e54a1aaab0c351629b2257161c9ec87e9f76b8351ef244e5", "104792fc97e3f889a9d33fc7dfe29ecd67c83240d47f246c22f363e6fd148ac0"), ("2c109270c6376f62a5cfb5e150a17c83b5bfdbcf1dd6f7df62eaec0575d92634", "07ad7044a5936d83b44fc421c04717800794fc5f4691b53c135a97703459af94", "257ee29fbba1fb25cb038a572db64dff52c5f3f494cf73e20a3225e58a4e3dec", "1b2fba3d83b88b2c7b1d2317be030e76dd2f07d0a77d338fe9a7b62c1f36493b"), ("17ce7fef497ef0af05ba5152b685940f10c3604b21b7575fcb548dfc49f3f1f0", "0c97a4efd0bc046b5826e92701c881ac828690321745ea5fa0eee2db84c767b8", "209b8140fe9bf9b8d74c39d23cc314aadcaac00a594c0eca08904a07451d71ed", "2654f23303b08e3b9d75137ae7e340f7a4f021d9465e6b619fe4977c1511c184"), ("10be25608c05efe3da30da7ef3bf40f22f9960809da2478a1af17c9c621bceef", "1c27fb92edb174a7d4d72976f78d1d89927d83d61662a50d784de019bb74d53b", "0ed7eb5511a801976fc4ef94b38f2878c48a3dd08930720bbd3e692039d12ae8", "21dfe4e6a299cb7d8bf98dec5d6c70b2aef8078f7a345f1dfc33e779e2370c0d"), ("07b62f0b9fcc5da1264279e1a9cdc4765de2e96945d169e8b7f3cf217839cbeb", "26313f74d3ce37084bf7ffd4dd756ac5eea78a758b83919751aff31c78db1131", "1d40ced3457efad327f27f73afa80ecc62a9bdab29bea7a9c93690ba5497751b", "04e7867c6e85478332d21c1b0d149aa7346230e1419a074de65e903485139d4c"), ("300e2c4ce50e573791a1015db1db8e14523b903c409a69f40edc48e06a5c226e", "23f2063f4fb17e00d65a2e2fa8f5b5668cdee8f14cbe70cfb0ed419c05548f95", "04616c1cdf1917fd3bde5a64ca0a065de40a70c95ab2534ac3d77dce66cbc504", "01ac2e32ab6d6c865eb586b9671258244b868c39d2a3c7f49b4096c5c16a64ac"), ("268e59c2ecf02ff715958b3b9f5a22cd4eb96a286784529c9dd0bd2739a03e83", "0ce0d18f0e415938007146bfdfcf68f3b7256acf0fd887bb5cbd58f50f60d6b4", "2c8f4ab5636f074169f217c91691e8798986471935ec8a45a6d96e2f0cd965a6", "0d82981cfcd0fab7f61bf9e450da56fff390c80fea26d9e89be69a15072cbe42"), ("2acb1185d3fc45765e3c6d23e54565d3571c50e0fee369423e49783d1fa02002", "104d7b07722d2d2f3285084adc08393e92dbdd8fe32fc3c082fd891a59c2f5f0", "239e7f263eb81de261a7572fba4440d753fcb0c72c05585ecb6af6c3501ff875", "172b471e4ce8f184097a906374e686824f30a4d594108a32143d546f8baf7ff5"), ("0d2f16e8caf06321293657167bece0a2346ef10437828a96d24d435b051dad90", "15e7266c3b5f861c487e224a2b029936c6beb545a3431e83c495ff1970f4f159", "0b36bca744b9c2498b7d3a26b6ed0617ca4ab81735179cfd9f23f8e6d52c97a8", "1f5e466e31d047a681d905225132af5da625ccccc5a22b08eb08530cad9e650f"), ("2898bffbd6ef831b405779db18946f1ec2ffdf8a5e98aba2bdbd4c481798256b", "1d5febafb8fb274db5c6f23d288d41fa6b693b3c09e6acb4890e6bc9d13acab0", "2572bdaa95d64eb1f90708842b16b50cf1b0271b5c89eb1ea63ebb8c33f1838d", "280beb62c1e362e8b92861ca6497c22e8fc8c19901b66134269f8edc146e65bf"), ("1657981410b30b9b323e3af3a1e575e110c681a5a38636712bb91c2012b56627", "087e5a645d7ce0595a043d8372c445b4b7053282f7364bcea7543806b9f23f59", "21dbd35a45e8ee678714a175c6b377793282f6ba6b39bc6ea581b68056ee2b57", "3063782d142cd7f9158ecdf523f9cd41d75a034590a99f9292683bac7ecff64e"), ("1d9785e96f141e0322626ccf0ebb74f5024b151891b78d60efe04869f2a8bd05", "0b5ea50bc3b804eb44e4e8711ffd95037b329fdde9a0bb9011deaa4507d63c87", "1669d5eb38eb449a09c9a006f2d2d012706c9a853ab9f8f98a4355192b0ed7c3", "28c4270e631c1f02979af711769b46da2cd6e67f8f45bc7ade8383646f9f4078"), ("2aeb177a6ab13b8aad2bcd11e419273767a4615aec458dc6922db3f72fc7cf3e", "24704fbe2809144493a7d19d014d5be6ad34a9ffee0081b1d37d4e013a47618d", "17460002b0cc27f75840a7ed4dff92414797d7fac37cd524b9cbfd2cb9366c0f", "146ef72a90635b3551a9bbf87cb1ab5df85d0525e55b67466469a30a1e3e9915"), ("2f70e82906a2acfea4fcfea90ca38b633898c69668973b227cdd26f1d7493e2f", "11fe38d5dcdcbb29ce92741e586827ac55aeaacb4689e071e6d1a06f428ca33f", "142bd38d1cc8df7cdd26f2eb40c4c783f679289742f511728e62c5b5f0d4f862", "23bf407437ec3f86700d1f5b9857e6c1d81535659057daa3dd7edf7ef2f31e6d"), ("2cdfa1838a2c07e5b9afd6fec40e6b898278daf64847cb8597891434804ec0b3", "1567fa5b3c49cfbe5fd824014e2c85dc423c740157e0243b5d9cf5884183388e", "05ee9fe336186ad8c914e3ee862335458ee4c648479b5488d483649b7b965138", "0d9e3a7fef0441709569aad4a62e03cbfe7772cb0e058489713a99fb107d86d8"), ("00e9bafbf23082960b7fea4743baa3b3800f2b0e9e9feed320a390e21f9a5647", "1012eb895ec7b9c352d1c5e01d896bff00bdfdbad3e08024c9c8b1fe3d847a60", "0752024e0e303fc4071ad3e597e68ada267db3945a3650a57f7ca040dcfd8887", "20b417adadc0a4cdb87c4d6d506eb455f040f9ee03d3d9cf8076472475d46eb0"), ("1be371e377ab8670df757760d532ca40a1ea0c2090ad823712a158405f1cab64", "04578b1ea1882a239b6f43edaff3961c1acffe6e6b251c1490f9d26f379072b4", "0361d5633271381c52530ea1e4e7c81a53ea0f0471501665aef0b32b630fcbeb", "142019e80fc9e70d01268a18d1309afd16392ea0923fed731ed464a74364b122"), ("20ab1d67fb56b64291234c816f9e7024bb6c52c5b8a11ee7f5b4a570d9b79288", "2df4f6b6ddfac11b94fb698fe4442542fc390349f662ca8a7bd3768a6c904c23", "1d9dae57e43353fa6432485e1217981b2d389d9e80937d5fdf6af445aa99ffc7", "149830e589169f434d4a1dca57c6d286a9a7c72d9a274f7bf62ecb052543eefd"), ("2c4b35d485e4472b153b9d4681133ab86bfd6132f9a24beab4ef8f3e8f1302d3", "2b36299d8992388fd284b35d980535928abcc44aa50edf77464f211fe7f0b601", "11155f1ac504e6eaa81a36aa0dfb4c91cd2f4a59c4d3f894535250456c1e4f23", "2b06d2497753f79bca38ac184d369448148f4e4364c6c4974829b06586f43878"), ("17869cfafe72eb1be3537a02da1712bb5d9ef3a0e4fb81702ca31404c203e70a", "1b10bb7405ffee14e60c670f6a3707bebcd6ba8791206a09bbe6798194b61268", "2c61212113edf6c8694ccfb1a6bc641a2ca99f08bae5bff17c2e5303a41234d8", "05587181c58a84001ff9dbdf84e5be4f5a6866a540135670ceb04a305b64bb1a"), ("28b9a2160f2ce51005668c1e02ee141651ef32c0ac95340770cfd45602d4d399", "2d00a3ccc080ccf2fe3a6e136d359df8a01131e5c2d19a6ffb3c030bad2e8b73", "0781e382cdc8564c94a59eb68b67fb5fae6dec261fb99d26409c1ccc6f8079ab", "095d7482535a3829f92b04eab979bcdc3c79d0e5453f2fcac0764552a06936f0"), ("19820c4739684457fd7fffc62f7647581300006c5bc2e94736314ce7f2b24738", "17cbc33669e9d51e41c4e712191edfdbdf6930e996153d4922400a6fd1639a4e", "03d857bfa1d00f9c4ac798809139725575517d66b1b3fd200f5f5e70d39347b2", "04febd41fe803d9473884463c1e3e066f5e5bf5c54e25eb9a0b342bdad7bb554"), ("2fe48e4c336fb2e9a36da98a886538cfcee49f847e5c0d0cc2f4228d29b2c293", "0277c8f89980bd0230b3c5860947f3f28f7c61b02748a58264e559c3adc5008e", "2f153f8aea319055d0b5321ee800912d08a06a6ed9294a4e805f5eadd3e9d37f", "13c98ba52f9bf5efe38bcf3dc8bbc8dd3c9f014f26d10a2bbac782402db80a6d"), ("26e99fd9d996784b686be9163d69d460f86df0a7d6e37cc143cb70fc905cb1b9", "274ff6cfb2c7619555534cbd2f6f96fe28bb6a5ca0d338780e02860a8782a5ba", "1bf77ce9ec02b64f02b06fe60951fcfbde07da89f551f17a9c3ee11363ca3173", "06397197407259750ac300581c9dce4b6c91aa2a38341c47f0f439598899a5d2"), ("25cfec54362c6bd62b4670aaa0e81e6ec4eefa40e77e5d760b0ee2c7f46907ed", "1648538878630bd3741d697aee948181d8e231b44297a97296e0a956ec83c7de", "1b3350c1109abcb767c313345e95d54180aa257417cfc6b19d037e250e99fb52", "0eac514d167fec5c2d6f509ac80dceb93844756e413e1e3917e496df51b8f3a1"), ("016340fc9f98bbe6ba5cb55b60c66efe69519e136a0e0b1b686000f38ab811c8", "11b67981efa983e49c96812a335d72145a4acbfb390ed94559e4d3d1b9d70716", "0e57884de458df0c41750c8063dc8c0ec27266073dd8d1d5e4d031794850a8b5", "2ed0f44a229f97d7d2b560956f6fae64ccc1dba8e06d42582386e647e709571f"), ("2998ddeb6fdf6261dd4e1abbeea789ba9271d4e35a228c081e108b7df122aec6", "0b19da8e24f1ca6a31e19e8a3d35f27c1cea808f8ce5f163feb2eb8d53462a84", "04147152d2479623830b7b9f558f5b85bd2e619412ed3965a6242607be186dea", "0df62db9675edcd6beca0166217337ddcdfdf66ce48cc395a74b4d0b252e42e1"), ("2fdcc936d08c83af5cccdafde61e8c69d41002df7960e3db90b15ac4433cc3c8", "18a395240705c778887fe27f332f376737692f7ace98373844dcc117db737a8d", "16de0dddc66a18b60fcb0ef48de5fc44d0b9b388b2d8a1c0bf257af501d90ec3", "06a66ef861d451a17232e6849bf1b54df1dcdc728c01c87a96122ae137d4d415"), ("06b49ea6596355f0ce9f85862873c2966a573620de1a5b41e1cfe7ceb3eef94c", "2ae9df3d9b1a80f3a2e0389abb38d03adcdef431543b4af00e503c3ed66be91a", "29f8e1ed1e7167955843a7f24903bb02532190e2161d4d68b32586311fff5ab5", "1d61f37b6b3b48f4dfe0cc40285f0a6282cb64f49c3f11f503954f22f803b19c"), ("1dffa5409a34ea655ada0c9b2b544ab1c05ef6b6b5ced644bf0fb3af08b676b6", "173ee95a0a1215cf867e12eea3cf436404aefb221f2b05b745a7db0a091de013", "202e4166e97986c742b7d9564cc7e2cd8bd760ce58358191607261cea1fdc17a", "0536650285c553d1eb01e7ccfddf12b39fe56a181f1c07581ac08e483f3925fe"), ("13420b47b2c898f9d004d418274670bbb009318aca820533825a0d4c75580cb1", "25c204e5704d04d5ebe0cf1f65f556127c6355d0e99ef817273860120a674e4a", "2d986e87d55362b1de55a6780454e8b6c186b8e17093f269688d0149fac3156e", "1f1582b1e4cffb0a5699b30a3cc430efb2598a6db37c9285f7c9b4700b80ed36"), ("2deacb8d4e8dbf09fd603cf429c838332cf250c706d7b0241f17fb9bfdb86140", "1d85463d12157d4c2e838c0f1c44631f9a94d8f0b07f7a634f9fe1660cfc14d9", "2d41ae441eab8eb35073cef4ac3decc485a888b297a16b9c30a7a6f7cb90164a", "0359fa9c99df4d0091b71a48dd1773da250c216ff308c61ad624f2461a822155"), ("2c9842c511490895d00c9b7094202466866843acb4dcf8d72532d4c4836ddb8c", "1c311b02f41b0930dcc36752754f88fdb8ee6698995e94eb70deb1aa9e617a46", "2e6470b352680d50573c7e57f8fa2c125fcfe77d18866b8e9b9b460aa4696ed8", "1fd75b4c44819d15b3018ac163f85ffb3eef7e2e88664eb1d99c7f1c47df6033"), ("026f78efa812718b6d558835576df2b9153478c062bb9d52c1fa3a4552b748f5", "1b15d84305cc6060f8bbfe04c5b0d9a8c430f1b3bd8c14cf76141392bd355b00", "22e45ef708ddfe5d2d9157da8d8b7bb6b7a799ffee9599203523129576cd7f01", "02c341dc165e8ee7faae133596ca72840caa4e01a790ccfd14e765240f243925"), ("2e7ff6cdc3a6a15a87c1195d3a1a96b1ff14ae205c429f092c4dc1e1cbcb00b9", "2eade26f5de39778bc8c5b0035bdc547e52d4358e80be33ff6c8f8527744e5a4", "2220b6570b42f96b6f783da75e7ed3071de16ad53b033944a02bf70d988cdb7b", "0883ed19fcbbab0f8a0612f4cf361c5c97256fd02e99a6d04720465685db5c11"), ("137f43c5c9b93cebb5fc38c5cfcd8bcc08f4797d3c1d7c404d9398e68815f394", "20fc94d1b0af08540e7a2c437b3c775bfeccb3bf2b6cc44354641a95e4be8b12", "04b834c28a89f769884af00ccf5613e52e261494ddc0de722b2e5725ed03a7b8", "24476e3e88d71d38ccb8faa61828a6abd8f24a3bfdd6ef115be6fe121f36765c"), ("2924250ee9b12312645f13d430100a5a09b30b578ceea8d2e3f4121fb60d135d", "2536d00dce5dff1ae1aa163ad5c836d620654bcc6f71852cf0ecf1b7183a6f4f", "288f01ac0550cde6da88cde8611581aad075d62fe53e1c7245d5e7de26ca90aa", "037cfb675f6b585b69d3ca445ef6589496e5bf1cf47552c89a0990a821630967"), ("1a91ac5b211e10ea41320d02a0d32e37a66b02b6a7ce8c45db1968897ab70fee", "1dcd64340ef0eca39a580a1302ba22c9ba5a44bb615a69f553a444212630facd", "14d18d25e04eccd956a9c20b7b066f0feb4280117de76155234667bbae0f01fe", "2e9ec9df34c127aebb6d2960f509043770e11f89af6b96ee4fc3d09c45d8c3fa"), ("1c820083efba4a34a9485df51f45e06a0e66895cdddc46231e7557942a534ef3", "18bc8c367fa933d3d51e9aa751b038888b26751579975243015820a94d4f4b3d", "04d87e3169ca9860dde9f6cf48ff9508f3b60e032f5c0c9fd87a806061f1b571", "06c55431f407fcf72e9fedc21b841e1a6049fbc42e01d0f43a115b2e8a951ed3"), ("10e45c9635c9564e0d9b42e0a77712f4d4d9daab53a0c7b93f894deca94f5e71", "2375c150bcba1992c7d251dc804fd62ca7b2d52c4104a97f8ac91bc9a942bbdd", "26383da94e87416a4c46a3b3b00f27d18905406dd8b0f54df5468fdfdb0259a2", "16465f993e828ca97d395f89883de97dfc7e4d967cb9fd6b7b1cc86002af8d93"), ("0117c0d0d400ed2eaed75367b229223e17dc485f2ed31984738b0889b442c6bb", "1b132d722a041f8550044ff7f3a8b3e850f2be7a4a4831f1d14edcc27e65eb37", "292abd474ba1206984703ee6216b4677b0d94f75510616d74e3c96d01ef8dba7", "0e7a425428816b7dc0fb61670b1f5507f17a1b23c1ecea2cf44b36469e4f57a9"), ("127362a4fe1bf8ab5f4923641596d8f7e04defdedf3e791a1b3fee4ae8120aed", "1066fe75bbbf5ff76f6b334e225d30042d809142adac24fc20317dda989104e3", "1b47ec7ba66dcb342ac11fc1946af3938237854dd274cc3999908f07850eda99", "1e64e30b38b17ab3ad2cd188d75f55a25f4d1de19f505c4872d87388c9979b9d"), ("28285ac4d3d8dc4818517b1e1e5853c6913e86df7ad9f00a28b702a6e1bc6542", "0bb1be52f52397065775081d52789a3aa9ec835d3555c51e96b047687a5f55b3", "277d97bbb2f41475cf4a8061335cfbfd42bf20cf4a0d3db51d637ff74da6f329", "2d59af1ace834f25085ac2612c3aaf41d09e3aadf89d1366c5ce5c22dee17781"), ("037700f74b826d27ff964ea678f488c9bc72368d93b520a4f688fd25ec5f2dd7", "02d799530706eddef680106aa8eb7f7a6395c46a04691062d423dff78d41890d", "28130da2a4cc80c86b62b5acead5aa99b0ee10ee5ea1bb1b17c7d4686f8c6323", "2892b6a21b228bf0b6a42c15bae33c28f8ea1b93a91663723e3d48af7e27c012"), ("089da1c055ceba18df83193257699aec7f447f67544d25410060ba0e374497a0", "0a8a25edc8590f4bf2edb1fd8ca94bd6d874e7f7d08eeebcc3d36e85c2b1eb8c", "177e82f2c674c5ed09407f8d43aae5161a147d9cd1e20197a285ff1e0b248d2b", "14800329ae281b3a1d04824a4278009e4c386570e518c304fc1d502b41330e70"), ("020761d9f6af62eb520c3e558b74144e8c9ee0ce87c4c2f0362e3942748d92a9", "073b9d17b1de0761a159912310a342dbf00a5edb03f3112b5aece6f94ea05de5", "15520f5697ed8a6a694fda4b638643bdcd57b94c25b549806655399a1d941001", "0c00d9eba91a9882a13fefeb0f814e6ef5d0db7abdbdcdbcb8e84edd9ac742d0"), ("28598d8fdcb9fa01b26f38e8b2b636165385e1fc4bddd1198baa2b7b367ec2bc", "22671501ca32d5bb5d03eefe4e5f2792db239731551ef76cb783b4cad63943f6", "0502a4fc69283c1fe935930050c7d44a53d8d08f97f777f1da82ea9a0be0936f", "2cbec23f29bc23d400be93b8fc0b8f21e9d956ec3bf36ccea466f76be1c7a017"), ("1d751388f4b7ecbb8cc235cd82cf0fc8cd3a5e5a6606e66ba168f8686b64815d", "1d2989c26d633ed722a7bb830ac32f0c0338bf20b1b6ea996d385c5cd254492c", "1dadb98cc612b2129b9de1dbc972483f44852574bcd95a15e172a12c9370abd7", "0673b33aa0433161aa903af7bb0ec13c0bd40885248fd4bf2aaf1656dfb2ade7"), ("2c8c3138734833884920274faede86fa58702fb4353a0c308cee2375589d9953", "140b69607b49696a05aa82a1e4071e88ed8cc65d976995f6535893af4c19a8fa", "2e23870ca74ea78a74df2ac9467611f63c333232de162ba118c5ad920cb80ba9", "206f286480966af2f422de8b06633c889491d7381aafac83378fc7c5365aafbd"), ("27f5d3a49f4cdd091892c58ebd84d9609e24078f802290167184bfc2f28fc65a", "22a918b182130526bd6bb411bb0b8c96993156086ea211d1f1104d8a877dacc9", "1fd8365fe44ed3321a51dec002561c4d3321e087495f419585ea4baf0e517444", "05772b4f4d258c404fbb232cba865719471f139bb71477650416ccef00d1241a"), ("22c89515f527396dc4648bd9b76d5fe86934aeebb2bd4cf33b30557ffa178a16", "2c8d1e5b7a85b1dff79af037a71021cfb3d5cdf6d6aea12d5dee28093bbd8e71", "04c611153b012e2db3237c5b6602a02fb4c871ad482fe552fd557185d44d8738", "0d20b1c384041dfe3f2a7cb57b585191130a5e9dbdc223553410d40a37c213b8"), ("03c38e3b0c65f38b410e0258534dfab52a4a9f2bae4050a984c0c30a9af28a6a", "273af80770347d3c80fad8dd8e6fc5e9e6d548ab5711f6c5ecc1461fd75b4edb", "18dc1a2f1db600b80e27a7050ab13a53c4f85f9c752cd75f06549d4980eb6409", "0d72ea3cdd5bd62d8312eff5de4a6efdd45b251a4271c738d8302fb5d029b284"), ("13fde799f3dcec10e398c44178b177a04dcaac5af5988d65666332efbb25bdb9", "037a9c7655d493a7eeec85b0698cb6aef660cfe2ed8e0f949d151fc32713ee8f", "15f758c7d18ed767f686697beeb16b6fb049aa1842e43f204292f5a5305b7963", "22b70aeaf382ef4133ec6a583544ba4ea5da26e27bcf919594478773f8433263"), ("1e7917dfc241be717d18a50813a3fccd0fef238c6c7293fcd8d4ac4d428c719a", "1985452e2261491f4b35ff8ff7031fccc60469e85923e2415cdf9827aaf559d7", "18c571010b3396cb3b875f256f7003e962d0e6a7c5f15ad74bda9bc291432a88", "1626730ba42bd0a0226dec93b2622d698d886cefb59f171a8a8f29381bf8e11f"), ("1493974032b36dbf5a20b6e66bf76015cf5d1b3d56e30c94bd1a40f31000e903", "2df6eb2e5f4d0d4ad6690cf0d02d130d3d225a3fa4af8770859ab8cb71c5e8d1", "022674fd86ff3a90d1d4bf60e79697b706468349d5e43e5ff5c898db1ee054f8", "18fddecf4dfbce3fb8c1723e9113093395437ccaa67b8d794541a1d30d7b6141"), ("1492ccf9f3db485d2a5a4b0301859b56eb56a9979c73ace7d77b4da24f5cea4e", "2eadeb05dbfe4b94a74c989f6d41ba66ac3b4db6f07e76dbe0226849683f41e8", "04b7f24fe82a042370462712609b1e207c03fd89072da0036d442f66a79888d5", "1ced02638bfe3dea428533177b188db51eb4efaf50b51c39bcde7e557e643418"), ("06929d1f61598ec67e701cb83b4cf46762574df9df3021d74cc1b9191bb61a3d", "2731f45b99cce2863870fb9e73593559e9c089dd4c9643c478e1edee76c02069", "08b512490e81c07906b5c5bc0161d70fd99c717fff07c26414cd98e85637d88a", "245a21052e69a740217fd58b1bb3837ec1bbc0ebd7902c8308428f65d72a6b9a"), ("0e33e635a60816186e81ece5640362d11c363fa2c78cd9348a45dfba38f19adb", "03d91389be8355b02c9b6818c107adebf1b11b9808d69522917b91620a47f016", "00b8a61360221007ef32ef4cfba76a831cf9930234dc64df6362f6c2dd280cf9", "230010fe8f30a1d5ca399f6c1eaf3f18081690dacc1bd7f16a178d5222735c47"), ("283091a3bd0e02a3b90626a4fc24dc890d16608eb816323cee8539b4df704970", "09b5db8efc42f0df66d840b4e1e5f85638bd135822dd8b2688292e52e3416580", "085713bdd1a9d3c4a20c57f1c3a6f20696090c23008afd8d51fad0fe1e4c5e68", "0ad0b4160018c844d4a6a0759c65f5cf486d7d943f2f35b95bdc7c0fe0cb8368"), ("17677975e449570c07f9d7408253682ae28296b2c2536421df4609b73691da4c", "0f7786d16f168a61417106e0ca5dcae30a808e2e7558e2342f702c3aa54b89b8", "0d286f31a636eee2ae9823f517f9ac63d1bba62a9819ad7431d0688e59d5a22e", "15cf5d77fb3aee5ab7541262973a558ead5849035183ce793f7ef8c98f242992"), ("17869ffc1239076e36dc9f6c772c282e9a9f02a72437aabc7a60d489ed03276e", "0fa3847bab783a2a2e3eef0fe0ac63cc481f237898eec47a9c4deb34579df7bb", "0c6facc62662195a9f6e0d7d96e5176ec6f4ab42004869d81c9a785e3baf1c20", "00551552d8f7d1b40ebd120610d969c8ca3f15d6804a5225301c5ae53ed347ed"), ("24550103c725e6ecb00752b70259cde0ab255708d5fa0657d8828276391d194b", "0390f1ad10d08ec04f32ab13255032b15d9a185a7a18f3789b6e2359fa2e7e6c", "275dcc106ee43602126ebf0b3c0f957bfed773090e4479395378180cc17fb7f8", "2751db080b17f6dba9b1ccb63af14631090f4780ef990e713788920203a99071"), ("0f2a9ee8a0acb2e9c1a31a8e86c1f6b37496ba27402478b5c1498b3c174fc70a", "18b3b8d4027d55f015424886fb04dd83f3968fe0bc70f54a8e47982f6704a1f4", "154ded73eef9e221a24b10b4ec18eb9ecbf5e5f77417cada106ddc61d286f3ac", "1f2f580a00c5af626eb375f6749844a352afbef323ee68d18b9961b18e747059"), ("26b6ce6beedb9654e7addfd8db229cbfc296f2822aa39a82b418a4ef210cfe7c", "0aefe96e5738af8b46f0bd3de85c65ed8f1f94fc556ef3de2929e2bc4b0964c6", "201c25a811fdf60c612008fe300fac9e659145ef833d7b47b533c43865b3f0e5", "13396f4757dc601c4e5a13e85585029db90cb5ff8edf174e8f55dfabcdd339c2"), ("21398009746fccf8b49a530ac5da21f8b31917c49ffdd2e9ac6ece464b202474", "24d69baa9889f7bd80cb48ceda9e5f3d146013aa47e19327061bf3d8efbf073e", "2bd53cc9a65dfcafca2327daacee76f34ceffe4649767a8b95f6ba22c178c50b", "055daa1cefdd10c06c9732895c19764c0db61de601191c8e33553e75435546f1"), ("1ffca4e71821362746e81bfb432da03b77ec2cbd3dce1cc3c0178545c7d19f44", "0852f90b0bba3bdd51d731b4b8aba6ef4f7d909c3e77b5db125375bbbd47236b", "04c7d30e9a898d572c7dfb3c05db1fafc14b89604ab33ee769ce18835e080d31", "2401c8d570b9150c7fd16e0d9fb70d6b9a4d8a9bf8830679844eb3af08b28287"), ("1391ff75ce6c16953053d8961c337fc09a7f21b965167c23fc52e69f032d68a3", "02afffb9220f214d2cb58e67bc605e0bca39f2eea563562ea90bc82ceadd19ef", "19a23b413f7630578ab3662628f14c5d3f8c496536dd64f1cfe328bcd467808e", "1a13e34ebd858e76f409b7832f4b52bcd6501e937fec25512bdbcf7fbe948788"), ("0751a3ee72c5ea180d0b26ec5466f4976b056b8486cadb4d54980bb4051cc0c6", "01db1275a6ef5e16e721deadc6b0525eeb129ad14c2b285cfd53b651b69ab9ef", "2915b2b0262ecefcf61b279f518f53ae95c8ed3ec5b2fe95c095d64882c9ce0e", "2d5ddbc5955cea2fa73ce1d7059322e032266118131ecbc78191427ccf69b26b"), ("2412c879cf1863c4fc0ef038a04420f7f0c8032a4478070822b11e21f245fc1f", "26c45c9234e38aa3f5e6b271da1a98f5062b44488a29703b418b6c3fa81878ff", "0da23fb75fff812573fadada34042be3a35d553de9b7c20c61b51397e9ebbf36", "0ad911acad00f5c60f672607d46cf66f65a57cc106855f4823c6d151a1352b33"), ("098502ceec2c36d5b9f286235db28144fbfc179f16bc7181043fd40887abb2b0", "1d1855cd300253e82639eb7b47eced1773b7911c8948fb9e8bc790485617d25c", "2f6550efc09a233fb034acb08f43abaa0ee27bf0dbc7658fc509c6686d31dd25", "1affd3e373f6e0debb4b89e2724ea66d25aae9949d348df8f8745ae476ec797f"), ("1994edd0fe53b7bfec70ad60c8a42d298fe27483a8037a440fb75091b43b0996", "04c934bd63b869909a9522cede218c26711f522e706b9155743a244a4c41579f", "21cee34fccd20e21c3140e5d52796206b65089758e3a3a9c28083f501987a8cc", "28989b40c58fab69cbffa392a6457984e61130d6a4f4cf106427b65cac202e7d"), ("2e10424a247646fda34565b6afe31e54ccf16d34088bfdf3688a90571db9bea8", "2e6cb5cf0d97e101d51a825d45a9fd46a80bdfa7c018e50ec6bee9b0bf818eeb", "21411c7e4248813011be085e480a62bd064ba848f9c3188d1a1026dbf337f400", "117afe8f18c1473f833585fe453f3b6bab4e6f6257c16b70d333e517b4772b92"), ("2da2ce37f37ba7109e6d81f9279a5d6c34fee5d2c3032d085a85764c336d72c2", "1fd267e8862267de54a3d41a28f181529351bcf12664fcb9bfb60b079bb6cfcd", "1165da6d72d81602baec6a0adc7614f70255d69ef411954d6769bb142a006347", "28f585193bc4589947046e7b5cef2024b1baf3ee617c04159da8e767932ee713"), ("040185a2d6ef9279f10fcd0ce60c954af1b6076f434a37299f4e76b0781fded3", "2558ae7a88b5172eca72bf5afd3e0e6576f493b5d110b6de1ba4b89d812ffba0", "2ef3916691f4276b7065ebcc8b4ab2c239c22c03db543db1231ecbc29532fbda", "16bab875eb8c5a47884c552bf632a3df06def5de440feaa4f9885a474f135be4"), ("1e95db675deae05c1031748cf96e0497bd346298f744fe752dca0ffe8087e6dc", "0074cdf523aca07cd403d8ed198e03fc3aca824d2374e5a2f64ff7d70c211c8f", "181f9be2ec9dfbe44b63b51afaa05f7aa1d2909238f9b0c0465be0fc16cfc39a", "13941ee398cecb66f9110e8b6518fb8ae47ac88b70111418dbf8d08d56640478"), ("177405067b2d5b5f8ec761f10f34252d312605c485fd330c0add50450a9732ac", "15218cf58422a20f9752b6d3096c2256fb519a12c53460a844fa656f64e603cd", "0b93123f3aa16f603777946de8153cc3efec03e81bac1a589c043d4706e62390", "10a4d1bfbcd85761d842380df4a47a3afa774b71d5f5768dfb89317d823e2fdd"), ("2097adf7ce4d4e1e0a361358d5f9ec07f62ad01febc7a5e25022fcc1fec677de", "1b527366598ad0ea9b78ff19b8762620ddc86cf05d099f00131ad835ab6f72a3", "221282a6d8750df566c8d73071557eac93cf96a173d7b28effba1c807db23735", "26b3c7a5abcc4d85eb66812bb1f441db41823bb0f1751c7fec4f884cbde98b08"), ("1d27747941f1a3d547f81524eae386c680ead34c9bd3f0905896fdea8e4924a3", "2682ba2989b4705275a496e6f45cc911cbdf14b287917976eb1e2b439a7c5de1", "172393ab752a1f4e7a2249687655ea6c5d99ec84d6dffae14df166ae6b587601", "28560cc7c55fa44ca0796706151cd7f10b2abc7c6bf31fdf3f9dd61bfd02d574"), ("12bf25f6e51c34c1868c3fd3b8ea258e5e2a14ffab58f35d07ee51c233c35512", "2fdaed3e887f1d144cb6422b2acd71784cb3c10c3c9619902ad9fb0a617008e4", "1ec8fce4e98c9d607114efa2fb0eab329fa6180383880fd2d0e4ff3cd2058f3a", "1cbe8422d27ec7a6cbce9147fa20af6e058ee468b14671967ec484a9f2c85806"), ("08dcfb2a82049d902cc9959a32dbb969751c7a3fe913b1179b96d02c4a3bce4c", "0ed938c540d955eeb01d0887049cb22d1a2b921feb32da9cf5ad19bcf3118f37", "074e141bffe53515570eb3727805044be125523dd879a61f2566f1b4688c4b43", "04a11a5e14f63e037b8b376afcf4ea04aa5911c4bced450d4ce50ba712f430e1"), ("2336791cb667c98c92b980dd02dbb3afbc0455e2a68d8d260fa1429b76ac32dd", "1911348fd3f42459508e53d00febf64bbc8f642b577243341d619d0ec0bddbe4", "14fda0c895886977993e28e87a7e0c8cca1a3b4a711d2b88239e24f4861279f3", "2636e42e928f0a838ea9eded69093bb73989422a47e5051711b9a79bc7749914"), ("2e1b1695c52ea70541055d26d7def02086a13869fb4d5f5f460ba0c0c5bac0de", "08aba03f8eca20c767326f2b57cfb16e77df8e8c5d376027fd9f162df27828f8", "1cb4f224e10483050932e64910b31d62542127b3bfb29684ee07436237c710a0", "29d9eed2c1bb1c03413f31cc18ab9ad4408ea1052b5b9caf1e6f68661bdc3601"), ("25be7972d6b0e67028aaba587c6c07128673f42c6daa17115423832f5fba8bd4", "2c6e22ac4e311cfc107a9a4a221555926ba4dde6326c5b3606f03cee71787863", "18012c42f7312270190525f9bcce4a25d7b3ee5f5ee6663a57717ff3d3b56f3d", "0ffd609ed33568658ecb4b77256a37b385dfa8788581b0e8901730f96a9aff98"), ("1a86b89b7cc8848141ef5cc35de530107b4fdc6d9a4616b03509f63dd2ba1e8f", "1306635c50ff36be731aa440be8882224fca7a558aec1449abe48eb3d62e47ce", "2f857c0bc777be9198453698fa1274604562a3eaf516c7194b0c5064e777e5ee", "1531e810705c56c5bdb2cb270302e83b576059b70f4813cca6f68b8ebbcde7b3"), ("2cf8c922744e320e76284f37dc3cfbf513156d9f76806355e47b1c26036c9e97", "250b2d0fa9f612573c4511dee83441ee09158a4dc0d0c4c72a57fa4ac01212c3", "1f9873ddb48726da6b73e8f02276b2ad23bd168f35cc74246302a14b2b378239", "0a9c7b7d7c35c659ab460e296bb88ed287146c956dab40045e94caee9abc6abe"), ("1644e9112b58cda1c9bf28d88b6c5ed6acb890f33d6f65fbd738f533cfebe101", "125d8333e967a37c553ba19918e7e415a792386ffa18ea6daf18b7e3f48c0955", "22d1ebe9285c9a8dde34713a70371c9262c96996443dc72ba6a45c7c1d9fe94b", "1ea9df1dc6bfed886f90376cb1840ad904540b25e3d7a9f682d7b06a29cd7e12"), ("0474ebe6abee2deef29e62f320df00ca6e5d57395343f5cf38f0a136c5a4463c", "2eb77f7dd3e650125bf0e6043c6e9d24abe91117ac1942c8208851e1a102781c", "0fb869e83152717837d43592a8fd3577689722bb19f7544236be258111d9140e", "1adb6ae8d7a9cf41805484823046db43aac5d6e34b77d9a11249aafbb12ea58c"), ("1d469a76c40a354a416fb8c579f8ad92f8baa83a6c587e08ad615c406f479566", "0e9fe22c0ba55341e212685ef519972de76da0338627429a64d0fa1cb021f83b", "01a3a7ab64a708e0523c75b5e1557ca60d559990b73ee62b71bf4996e941beec", "17adc13f94f1d5f78d8568d0488344bcf114dd0d99def5ac6764ea4d07b3dd8c"), ("07fc9010ca06bf121986ec29462c84aa942f6d722be21a8fad90fe6ea8b3b57e", "270b061360b06584fe74db2f5296854e1f63d283848c3734220b80e1cca66cc8", "09a0679aa4bee10f99dc8bfad1deefbd5fb6b1d2e1f2782477cd11a73b75d06b", "117da420f2399c16e0b899250612ccfac1984900d46228c1535d5ee4c16e8bbd"), ("032fdeedb491a3309d2a8dde4c7412683e36c5490e2bab83954126df0cc9cb7e", "0cf26b75994d3c4d343460397063d52544a5653c9976a85d722f07828dd86e62", "13e7fd486403d9696c0c1bbb21b463f8e7039c621553cdc2c05625639edf539f", "25433a9bb19d1d5481862d6ba78936a302b42a5278a3bb2f1eeb440622d69cdf"), ("276239c301fc977594b1cbab7a78985e74adffe9762d56272e38760a581e054d", "10ab23a79f0735312da175a0c7666ec5c796b4377061731a420cee094108240e", "233ae9892b97fad2fb450f1c9d9c3fba93b651f939e85cde4d112a24111b480b", "26756e62467b530889afdc050780e9328abbf820b3640d045afd358a308f3b2a"), ("1eed842d8fca392d18e337f62f1ca4322d61fb0d5b2beadf4b706b299ce5284f", "123b49424471709dcd6c83a2d4abddace02859b3858b5792ae0dacbd396a3a67", "2528c85df0cd6db7ac91ac1f6e78d5e740a0cdeb58f54ce3da49c45d8c31d1f3", "0965e146e055be3efe781ae069fc088c2fcf29c11924f9f1b1cba46275413bdc"), ("13e6c5a31d793c333b346e9bfbba1ffe0215fa7add3d68d31c08be9cedf2b788", "0c994981ceeb862468889c855e0f28809ad1bf842cf393cffc47d1ab5b2d8875", "2857f1663ccccc467f7b45f8a6c7b8f19398a13a4918bc7229be395b8af6af81", "302e0d8fa962632e5faa82c84d069e72a3d59e7bc7f8e0c42abc573402e0a978"), ("0653021578dab3edc59fe7365d419ce48ff6bfd13d70767593aa64913a3345fa", "07e7fbf67c8a0f67591505b92395e7adc4413b0f522c7e74066142e49e012707", "0ec059b859035b88c73fc88b328c166944eb3e023e519dddadbcfe939066c267", "0c83c9dd9d5dca2af6518ed98cf188a86698664b9d6d223a2d4452e520217466"), ("043338824cce7e3801ea3c784e3753783d6d869b4924b12e891c8a7a19cddb7d", "1cff88747edd97a0acf9124c11e24c4d8a236ac8d918f64e56e43e50c780c673", "1f8fb3f8369dd4a1dcf4c459c005e37070af410b164b93501949703aa1145625", "241c45db29d205d6c442af245837381151d62f06ff54deb1ec8734402e5eee8d"), ("275279b66fcffe276073143456174a5a60191cf69db658f50ed1d2f3032dded2", "278280aaf8bee552f03055d4af57cb3f6bf331927d89ad79acd0892294d9e5b2", "0d235d7db33e1a73ad0943304d7fffd46efc8219da68f93c7751b9b1a8b04e84", "03952e0f352bfd10cb6f2e53298e110f04d18744cfc01bae8e1b85dca3a29052"), ("2de24975c2a487c901f674f11e1648d3af58ab26c2cad5c1d7e1527def45baa0", "23f70ca713899f484bdf6646dbfb3f507e9c1592f16ce613b477797236f98b10", "1b98396a447bf344b43d6c6177a1ca768179ec482de25daa15382f5d3e3dfdb8", "0f0c3447eaf2f9927d27055c7e2a30b9aaed75933422895ebd8cec96b8b08637"), ("01cdf407edbde6546d5a4d01a7a503e325adcb7ceadbe40c49550ff4c6fa6dce", "1f2c81dcc029ff197f75652fad48d56925e13c992f82f51a5ce73fc870cac8b7", "20cb50e50a779b4f285d0f0abaeedae8c7215dfdc32832f2a94f4af09f4562d0", "0f25ae7fa825484cc3a59fc7208abe9c095b62f5d89d467018939e7fae638b01"), ("2df1d7813194a5224b9fe1d124ae0f1e6b27ea269a80c605257d27d490d21e06", "26864df92ce180ce6bbdc863f99b1c70f39edfae069eb279a400c6fa6c85fd1e", "19ad0a0855389d87b2368ad81948770aac608f52efccbcb8bf1ebaaa7026965e", "1d5e340a0a36bb4ad35feb3e8348ffa5c4053ae22b949760e41e84552c4d7821"), ("0dec483d514e57c10d3589612c5feded2fc0fb66f61f87259c41675df0db2b03", "18152662fd269174612e91fc05b97ced7ba7968528f3ae3c675ef377aee04fe3", "238aead7be4c18a9d4b5f432c59f61d2ea777949286bfe7624400c014cd97ffa", "1cb5ff156bf41f90e0c84183a18ac352644e393459ec53e989fcb4fe5795b16c"), ("189ff0bee7fb72cb5a8f06c61bebe007451715f365c082299a97be69b4425533", "07f8ef2f9a63aade4a9e64b3527fa18c4a1165d843448f473aed04bdfdfb4b64", "2726b98644f4a0f50ce2b469b8c19c2a77265bc7e7a7146e323d2be4d20ca7f0", "18a92d105f6827448d09d2c382c9e4572d206a9c4cef752528ec7854da0c12b7"), ("0a7ccff9c3e3e6918b49191da3e0f1aea323321d0e281819fb31fffeee252c1c", "05da51949fcfce1882b6a42102a5e1cf88dad97bf2e1f09ccebdc5fa410e30ca", "03fc7367409a5f46226e808eb62ad275ec40a4126e184cbc6fb6744d86c44cc9", "032262dac8729c97a74636ee895a053531161584b834891378e186f692a791c5"), ("029a3c9728a056c286faa038a90e5f21c7856ce1b61fc1ba2bfd6837a85b91ab", "174e02056129b8c6df2ec6bc0abe47bede6c4f87b1161a06267716c33a6fcc81", "0e69cfcdf13c5f169762c5ff8e7c921f6c90a15bceee709322b7138faf09661c", "0ca81da7778910c018effb5b795e0816df9fda985e45576b77709e31be041e41"), ("2e9ab1f9f12963a3266f501fa0e18a1ce75bc07eae6497643cd29fd8d3f9a0fc", "2e87590af7f57c2317d5831628b8b4950496396ec984857653e0a7f48c89e7c5", "20ae5a2b7088982748243cc37419a698d845d658e57a25921770fdae4b7fbc3e", "2de8338f49e4fe9e9ed53a8e74de5d173e162e81380f9460f625b6ec101c5d47"), ("221230e554185b33ca6b606dd73ca8f028741fe5d700686e60fdd88485ee3520", "2bac45b732f7b3d27912a24aa3aaf3cbfb55bdfedb43f2cf0a966d4d5230873f", "23cf2aef8d7aa8e33399d0552abacf71f02ff2d5d99786ed3f9a2ea7a4da60fb", "2b086cdb32aae40822e1df06624945f0135b510715ed343677371f5a53b21429"), ("1c5e507ea63bb4266f964abc4725b73d18be87cea74129a4e656887f18dcc1e7", "25c581862a1524315737943332f2b0c669370271c2048729d246dcba69d1313e", "2f2217d5b28c65cc0ee597de9c9b8b3c0995299a61c5cc10ef223b90f67f992b", "0de6173e0b952cd26c9b74070afc7239fd73ffcdd15f7532b859e3dcb43e1ca6"), ("1676e03402d0dfe0d0cd7a46d581ab5a748782ee129045dfa3f03ea56cbea35a", "2eeb4de5c2bd93c55f0c23c405ea31780c85852671297c1bc00649cf47ae7abb", "184188e577c7e7333072593f226773d4b69415617c1bf21ad9c9ead3aab48fd3", "1d2de2af36720ec160f7895f8611b4b34e272d98bba707d54e28e81be836bc92"), ("18c81ab70fe262fdfd5b17d6e753818a037ad8742af19e4e5351f52d31447004", "1f1a6f7ed111ce6452fd3b8670b7a9f10b8d0af8d0bce6e57fc6a5e7d1e0654e", "0ac7a1566282f1ee6eeadef8492cf7bad09a5bde52bf2f2c378bc3733bc2747a", "0117639ccdbe1501a2965eabd5c4abbe1a9e3be00b35e2a45a4c5d19fc845042"), ("1e2332a5b5fa60e3ddf76512e09087fd52f685979fdd108310e8d5998f2fde73", "1b6c08b964643a64a59464f0c93cc23f2dace15736f19508dc2ec46856acf3ff", "242e966c0f0850a9fa3e16de700f2e785059030d41350f49d7c62ad64b72aa9d", "0e98fa85b7d967be4f6fb1a22d74541727d4a9bb00429527fece6e22cf69c6ff"), ("045c6c968790a30523c77be6b18e88c10a893668146f1667796ff750e3eae5e9", "2936b85cd449c180be15669ce8d0e767fe631ef6c43b8ae8ba8d117d4bab5732", "04ec078bf824d705dd76c30dabe5820329b556e484a367525c901c3aa156039e", "2b5d1f36726eae52f541798fa80aaec8e0bceae405e82dc96e808c20270819e7"), ("0562703a8d7525eab063ace9f8d7790a4031e924b4ce166135d20f2fcb88b538", "1ff40fd1d69a02e2819f48457730b7382aa4399df6463f3710ba233489329d45", "0fc38d9770f2becb7b0e52d8ab956b958aec0a274cc9179a0aef755c2ccfcb96", "1fc81600b3105f2967e9a9394b655d29aeef526bc87147d164c0c48ce5d4de62"), ("01e8bbff38b6b2fa3ec45a511f0a445d768691d7bc88524b9f5433566aafd48d", "29dd21d0b68cc0b5e06f9f3a5b3dcbed54170c7960a0a18bfeb8e1af64c34065", "175409bc28a9ff998d05c8f6a7e9d868f3f5b09f782f896afcff52d968b95756", "2fa0914fd5f811dba850d7596644c4413967ec25812d864246cc787375108e64"), ("1a91d917476e7897640e6cc6ec437417949f5aafab7af1cb373b221c79ea6375", "1b029d0ac2bbb8db619e7f2e1105a5c9eb06093020f3fea8da0587686cad0b38", "009246922a0b50dbd934fd9c9cd6eded5833d636823df682213666ff4e3eaebc", "18a427a223bd948cc869a636c9342b5e888ca55e05a45026fab90723d48d88b1"), ("0dd25a993655dcfbf20e6369d81ae4da95cc08cf539d0b0cd267e4d981e2df65", "1fe0cc94b8748a601bf68613ab3d3449be15be21ed3540561761ff2815d74c90", "0bcd60e69534e8fc551c2c425e2a065aea156501a9eab19e8b2e86eb61d2eea2", "055285e8e5015c8b8e54735ffc2ea5890341114432290db0462ed297b9fdf044"), ("14aa2ac17a3e6b57763dd6f8c9de08cca2ab19f6ba489112ac6e5f0c6f4b76d3", "026b860055be435ac7b23ee2c24ff62b45d228f06ad18a91401f7eb8021b69d4", "28a420d10952e613e064fa3c0a53f315b43dad3940e684acfdddd4bead5912fc", "10e34f67662014bab42a13620765feeb02224528a53340897b0396d8f77c65eb"), ("005c28beb559faeebab8170742230696bf7a69e974113420ebc7b0213faf302d", "2baa79a6ade7176cc4aef539250e980442fcad04e924cdbf1cab7a39c1729968", "1dd55717fa5eeedf3631332ab01a6b3ffa0db9bc49f022fd74dd3d81d442cf88", "24e0746841b6e3d60867370bddb8223180ab153a5fac62c3e1a493bcfb07c46c"), ("07214039f2c8d37a2510dfaa5dc3d08833fca3c6365505632f48b38e5bcc43b4", "009cbf5418fea1222dad21e2a9b282ebb85872f82d1347acea86ecfaf4e4bd0f", "1692e95ab4b327d43b9791b8d73fc3f4775fa1ba7443c83b3e6bda769495dc09", "17a4722ce7414f0c795d6b670ca29d5d82d5dc33f42afbe8ec1ffba220399862"), ("07b8c157f0533c2fabb1260decd46620b43c466ad9c1e89e1bc21d632044058e", "184ab4b130d1010d3e0f90fd72422a023e39869bd334c9b7040a1241eede4263", "001a1c5208dc32a07ca7abcf6bddea3cbc64eed1afc8ea45b250c2aa9f00d879", "300058d36340349724c03087f92943276db458d7e6d14b16111212966ba7e2b2"), ("2545884bd4d8e0425f25791fcd9584d22b6824dc05ca0be99c78487afb03db89", "005003e503163e24955d461786e59ce24e69607623df9ca70fceb2edd4cf69e2", "0957b4df165a4b4a32922a9708a10cb6f2738bfe1e9e0b5fc49224fe86327f65", "24037a174c178d4d4516382710d5238714043ff84f4acdc413e92a643e5d5b4e"), ("2fc7a351b478cde4c2b26d227521d1e70ebaf8e22076122dd3aae4965928e32b", "024cbc043a6ae1693a61ab5aaa8e731c83bd8d4e8186cc2522d48c52f780a2e4", "0e905105d9a7cbf26a5e45562f7cd73120a819d615936b9b66cad686f98198e6", "1f07460ea5846c30ca7d890d5f019d0ff2acc82dfbddc34e678ecf018b7ccc2e"), ("15afea50199a245195357b3dd5ee547230e27f2469d444e85762cbede0ffe56a", "145e52a43e5b93abbd14e9bd0115532bd734e91a4ff3cf5a5601ae1e1f2006e6", "2cc2bbff45a3f6e9b252ed85fdff871f7796ddf8f70beae3a05de2b2126c6f6d", "071515d0f87a44fef143c684914b667218e61f5c69f6d033279db3a128efd1ed"), ("0483486ef5ca6323ee6a80deb7ec586a711dedbf7c967dd6f2fe7ea06406289f", "1abe812e50b7f7b4e73c46ec530b133219ee43fac1911ada2821846c14c351cd", "16a0a77873046a642421c7c99d32457ff6beb4d60e3edd5a33caad073af0d49b", "23612deea321d7328c81f607befbe857fafcb69d0cdd4259ae17e12ef5939bb5"), ("2fb892d82de98741b43029fc94f627376039fa78c5d3d98df1640d74b2612035", "2618b80117982058a77cc774e58388eff65f35ed762511341fa23b0b965b6964", "21926b30c4ec6fe8fe86ab1b8c0b4dd8fa58e085201270abfff5cdde0a61663b", "1e91654ae645c893ddadb223f03a9a7b499f35a60d52e5e69dd7c4896dd15794"), ("06a319c8bf2ced0fb6ba1be927aa33fce5629c5165ac834cf7241df1c3413c93", "1b904c7016cdfc32e35d5767c6550172ba857319916f9d816a623fcf40d67682", "046b97dc091d4938d57211f142f33248dded89473e81950dda01db148739fccc", "0d714cdb31817eb13f3a2190627661755a0571c72e47b9d23abaa48007237e22"), ("07c88b2f2fc62dc14d12d6343d2d0910ab15ea8ce3a1bf72bc6a5384aa1cde9a", "0f449725d8f56d1a35697caabd0d461bdce0b3b5ad6c044d3a24b5cc5edc489c", "26f6c51153553e6c167edaec30bb0da87024e8032fb7e0cf63b45efb0f48a42f", "2a37754e48b45e0946b3a52356c93f0cd28239d989548621461434dd0d40061b"), ("2474b3e400493cdec75fb9c8f83e603ec60760627373ee371729223166f2f124", "0af3d1009e318faf4d5fc376d0e70a1a4745e40977bf8cb28018b604a8a009c6", "12bb2d67440f46aad6446b2d3cf613e7a813c85c4638ece16d36ebf613077973", "1fa4471be05d73b4b4dcefb2c382256b31af285425b4f0c815aa4f5eff604723"), ("002b76279f2ef28d464424fd80278d6944d9ec28bb2f0ab2dce747ec6dd0219b", "126953778f4357eb581c7536d229ae971242b4333334af7940dcf39031275fcb", "0bd3f1103f11a2fcaed11e384988f258fb4f140fa10680e1916cba4a3528ef12", "2321001f867e6721ada6fa2d26661807de073380f5ef2baea26035572498c7c6"), ("08d29c4481b635c855605a2fbf8b66e92faf7f01142f8a2f079dbfa710c92f90", "2480f13d449d14e84b54f9a67735d2d80540553aa4d9fef735208fad9d75a87b", "0319b7a97f0c0dfdc0a07694b883a13e7cc9b28e176ac6628981f5890762b387", "2492837ca82518c2bbad0d964c5873b33b33af6456143ec378f73fee3dc8487d"), ("21cc95190841f8562dbaf4deecabb1aaa1bc260f401b6f3b510f1069e27e8d96", "082e339343fc99bbd4564c692ae95a751320044e1338e6008e1623345efde882", "13ea8275fc1fb85a50027430963f30162ed2dd4bb35aec12cac2378953a1c9dc", "2205e16a791e10a8e85e85b2f042db06cf16bbe2bddd8ccd79622ab0db0ee6c0"), ("20873311d8879b36095770820d38a36ee1a61348b279d8679b967298d1b246f5", "22936e74bf2db701f565430553d0015e1c89c18d78f4371e075c25e1b503aaf0", "0786ae43123dc225ce1905471c1d3c10d7cc92ef122db83c431f94c25aed3926", "0a7b80e18df911fb4ca4ddd1ebe4f7bc856fba88f845f3f0fc714916e0f5c718"), ("0ca0d57eb3af9596e5f1a1612c676f0aba53f99d6a40a5c3352794b372d65d0a", "124536919e41d3c9d6f017c435cb5ebc6770239b07b022eed1b1ef13dc851da0", "0422042aec57e5e419b98f08670d11ff87298f47aec980c967726b79896c25b2", "097b8d3b9955c112a31c5fee1452d73d916f68c7fa541a2c837776f6c394e7c3"), ("2776370b63947d5125c160785c6e2a628124f0e31ab442b6e31744c991cd0fa6", "0fa5c4935d8bd2d7946ac1186a682d8010bf1fb9909ea612747685ab31c3ff00", "0dfb1129a1fe10dc6e3c0766a85fe77b8c8d680d80bd9a209f190f29503b3375", "2330a539908b7052707d5f54a2ae71f1984336641ee1b97d2a10605ee393524c"), ("16895ce454818ea7408c8b28eaa71e9c3e981e9f8ccb104af297becd8ae41478", "26ef033b3ea754661510a3d1210cb7e89d46b2d0fcd3819746752507d5422f95", "1b1f3e6d620ef49f546b115d0f80e0bbf68e955d07b54d1b1d6fb94d90a10b20", "0869a712305234450493a9927470624df2ed39152de00df5354da8e862b08a44"), ("293bbb3299004138ab218f91a016bb34cfd48e89071ac5d7a37d912f268f33c4", "1ac52d961540de1b1711676a855989f116dd3dca003b12b7cffe2d0c9462af62", "2a7cd676b692358ab08fa52a18aa727b5a52b3b1f6f49c0550fc92650126c3cf", "09524aecffdee7fe14eda875b445293665c7872222e3be99a6012ebb06447fe6"), ("2cbdc74d198338dd033cf1317c05c63cc4d377b621e79dabdd8dcf1dc23c398c", "2eff39bd4dbef06c3b3b47c72435516ec35419e943d6d1c958ba0b915f42ec55", "2d5484f6e6e710bf0e599dd7ae5658e2bf53c83bdabb84cbb844d90052deb491", "0c7337736c9c23b5a704559484f6324933640e62b2f581a155c8b31c7efe02b3"), ("0461635789759a45fc4fda9568ebd6e0aaf395319f4d208fae8a771690d8b1ac", "05be5aa84536f043336a0acc1c3fa0dcc89a0a10448eb583d3772f924a910a90", "0a5681ba0dad01b1dea627f9b82e2763c79cf66369bf78b6d00863fabac4ecd0", "1a357caa7abeab88de898dd5057a15b16af4eb6152cbab3d1d47ef1fde1a9b60"), ("0807cbc6334a2d5c20b3bd9052dfd359cc2700c1f50478b214f4a9519b503b68", "27ce158252eab8ed336325f37d0296b7ddecad4bab12c59aa090228e181c2476", "0f713aa54d7ecfb0bf3d94e5143d54deddad72b05c92724f6e84ccf876fa58ab", "0d31346031103f5fadb3f8d2907204c0ec838989469284f639418279fdf9104b"), ("1ef817064b53cb45fd32b2eec9f50d45c50258db1e63daea733becfd8c354c62", "0a43a453469ca5e1ef1b82c97f2fc2c2db7f5819cf1cf4730449aaf0a34e4450", "073eff002e50862aa09acd33b221abe0147cdc2d4f7109c29f92204a145d6ba2", "10eb4255d682a97202813fe18ff84d6275ef5d5e060f03dc77cd3ab5aaa3268a"), ("1c75622c3877f935776a4c2f195eff54f3f7fdc8f8820e514b12907d3b5b354e", "0a91b94f95606e2635a0c32d19909013bacd7421dd525d0323e5e75f26fc2588", "14011c22d40400962f1d920d4c0424aba104b9058c2fe58f1f75e524c761f9eb", "138d617891c228e1799f12ddb5b895368db6632019ef28bf33ad8c8dc13f487e"), ("0cc51bdf8752e4c548dd27ed5961fa6e52d579bea976792ac688480cf2c33e01", "26d524eaad4c47197f132ae3a39a3e7ea7083df91844faf0fb32fb1d38c3bc50", "2cf9170ccd464ec0af1e4c6170f9a0522afcbe62432ced0a10d8b6afd59df154", "04c86cc27c5b50abac408f3b0ca07241bc0bcbb3b9f2683d46d044b6917272f5"), ("2f04c10adcbdb854794de9051fb700d7a02bea26f235856fd09bf8b1351b23f7", "1d0acf91638f044c86a8cea9baa2ed5e097fd064be32d6c62a7380b7ed05350a", "20e1dcabfc7c1d0746041585a6ebe6d9adedd81fb105339b8876c427c9a6295b", "03cf1f4e8e5e6601510e685b470255cc8da97d2a76d12ef1259f48e7096e17a1"), ("0507640f4fc0e41561b91716aaa449957c1629c89fe32f1ad4dce59e3ef72a74", "1efca85581bbe95fc98e85837671776d4ce93ac2ee8357336391f13a074332d3", "2fa17f9f9efb3e84d2ed2a1b2b167aa464ba4459437892d55cb81f62c91aa040", "1ab6b1ff0e7fdefef8df04ea9e657d7a8738c22c187cb9713c512c8a245ee051"), ("28899a8d7814c3cca5d4b672a2d4f30d645ade016d8890dd5c8c83de37e09163", "1ee5282e3d8b09176dd89a6e48dc092785bd69bb7b397c4e487641740561e2ae", "0999c7468261fdf58d25000efc62cf7c35c3e9aec20fe35f9bc91848723c7bde", "0301a0169ba786f2d19a8649e9424b30b8a80ff8353963ac6d42dd307f1f197d"), ("21d5dd8f6b5c076b6baa57924efe529784efae3ae1ad42ac81f5d16758a1bce1", "2f2625a087298372271f9cc30d90f5c1e739f667a3f92c6d6202a98f698d2094", "0bfdba1ce7122e34e98a523de6ac68cd7d0a85ec29cc76116ba47ef7740704eb", "08861bb03010334db8e74a9d39ecd7ae9c67153d52520f996425d5e12424d13e"), ("2859cbef8738fd81f294580de3c306b1ec489ce8f1bea398e2faacbfa8f9a2e8", "046c3acf5eed1a952c33c347bf54e081e37418dc9f310e121cd0b338a87a7eef", "05bb926b8c17ab9c0113e2ce08319afcac8c88c6b1f1f13bb8b3687c59f943f9", "1d170464d2dceeebab399ab62112ee2ce359a5ef4f21b656322f66002fc1a8a7"), ("136b2d3934730a8e0c95c0c99150a80a7ab2f0235c6b8c8cb57e51d444489f3a", "061c319502d72a32b34af17a4eb1b9337be6b94f4e822df7f37a97e2740e0f38", "15f3ad7189d655fa0f53070fe895de628a54df33f1abad63d7e36d9b80fc9368", "0bb83a9d0d6908d4c3317bdd4393d77b82165a57c288676370bb3a1b5a8b9975"), ("2137fc7374b9ef27444dc7236995a3fdd50e7012e4f442780c8b1448798d8491", "28e2524e8308c630f3803cd3ce098309c3f7b7aa08e5e375b3153c01e3531bc4", "0b35eff3a370d2998608aaf5ec6047775df17063fbdf7d90edab42778996f513", "19ae8233083d24597871594e0b2c1794d625278d263d463415714e19ccba4b1e"), ("00cbb7f7e22205aba02d4cfbd29528abbfe574d09449cfe65eb29ca903a2017e", "1818e57c4638da5b43b45b59c7f9f681860f8aef288f433983e16c3c44e0c95b", "0c6df11484ac8dc5a7a63a14a342c275928588ec54d4d63401b517f938bcce6f", "021ec621f5cdbc60370ef385049d7af770a39aa2b515ccd4b64943a91f8c4ce0"), ("2bfe8a7d34eb5cc156ae077bd38d51f745a8ecb7805f1f051a74fb09f0d126cd", "110c96e10918ac39360a5fee3da8cc030ea4c321c1e67b3033a4330011ba6bf2", "018d450ebf37e0412e0b7c2f96a00f461f0847f67dad1fa176edf2e644f9a92a", "0d7557bfbbb66bed230b5fa6ca7258e255d9697fee1b4e109bcc42c2d13139c7"), ("06bc0afd239100716af7e0442ebf6cfa774fe5bd19636af790720224e87059ab", "24cd5629068beebbb5e47b9b321ec9add8dfb2fc02f423a982b1f786d0f64805", "2fcab074b7aa5c482ee98a03df79b449f3da6c2b97c2eb1a42562a8b93f0b038", "0f0ced31e1d7233af685214f05e11ef5698da6a21fd86fe70c1b6109c38f2229"), ("172d505a8b234ec4b52afe58a56f75f288adeffaf53bc2a59772d74def817250", "1cef7712eedd9615083eba814598371b4110c865da1d057ed01c7aa150df525c", "1d3bf0978e9d4477ef5f3b3e9426fe6879f639e4ae96cd6a3a5fe89d66f2085e", "19e8de7c9fcafb75300b992d7c9a2b36e4ff665cf7e77c1cf6e8f6d14e166769"), ("263f65dec38b16aa78d6139b4cfc441559cf8aca37fcbae8d6f30607122f0fd7", "2a4d44046f14ba2f30ffefc41f8e67b64545493746af77e5a2e8de53928ee634", "1a5fdf4cbb51d24ce6a89593ded2fd53cfc25fcb0c3d2cccab7170cda823d31b", "150dfda90834d5faab065ec1f9b486d24c4708ae2806a0b2cddac43d1ece02fa"), ("1659c51c669b91e008bd657f6f6aea1909e9ad78f1954d496c8284c373de79db", "269142f55f156f5fd44d2cb8f794a6fe86422095099099a72f00fd5cd30f95d4", "1f38b9a70c98f9376c065c224d3938b5d00ab7d561c8dfa06d8f993c77208dc9", "13a1e2dc9647b8d5041d0049af19430cc7001d2f11b5d38d624a1b381fc0ce9a"), ("168fbbf282feefc3868594c0c0524d113020dadfec83e99a06eed768789c8f12", "022e256fcf63614c35d4f6e816cca52af60a3761ba5c8a5acc2dd9da0e546dee", "183bd617cf3bcc18a2edb8e030f36cc3d551756464bec2ea3d53186e0d6d1e96", "2ae48c3ff9daca79fb1edddfe471774c83906a73197e5f8bb8f46f7b831befcc"), ("267f26f47819cd9f84f7b4e9041d591751dd4c1917d094ed341f2bdc21eeeaff", "0dae939c29963d58d932ef9492c3b4d3f194afaffd3214625d97100daf6b5757", "1d6a605c8140795d91fafaded5f5f6e782d640ca2fe2b84fd47adeb672d8eed4", "2d83124395474ba71de5e6894c19e7aa28df80bf7f2c02fcc192c7921974ea9c"), ("2e08b53e95a73d91575e75acc573d40c95bea373e260ccc148633773ba6bcf48", "088cdcb15dd8a65e63ed9334d44e41306dc19c3f718ee4336aca6722dae02301", "0cda61ebce7624d292da3a8bd63df255de440c42b4e03db76cc381a13c719b12", "18d47745a7061290aba5f604408a95d032e5e820456bc96c46c6a5cc15559e88"), ("29983fd38222560f607ad97b71e0eaeebc9847e32ffe54c2c61c66cfd37f9d84", "2a673852756b35c213af927df3ced46bbb6fb5876634f7abb3e6a4ff11055757", "016e01866a5ad7a7061bd9eab65efb324c62d205266c80f18d1bf6defcd23b80", "16f8c316d5edef6028763a03750151f4c5657a960e4f830b571b779847f29503"), ("051a09998176e7eb683dd8d2b9389737be2c9e988dcb348139c1f830ce99b692", "0e1fc1b4c3d81f5855e37d0d38f042fe95740481adcb044e5b495299d6c13de9", "2a74de52d8a1ff0f39fdf10f1ffa4f0810a924f86d5d65aa4e2ec657bca7bd8a", "248d19c4a4da0954d32594357c0d527a58a7741998582ace51efadc07c774874"), ("2581b0476ba6f1ea212c3173ba1b653e2c0510c73c93aa66c7165fc76890a9a5", "248f38131e0336034af404b4b4da6ae10bfa84a598fe19ebfe326993e3291859", "1807ab8d322fe23510f6a5c05f12e7d9199f77dbcc7a0a55fe5b50c3b498bcff", "09484ad7b0d44984211b64a3ae090190a9ffb60300f472fbb917822a10b1bcfe"), ("0d87cf1b62d2b81a84ba15933161871c3dc607413751e137bb0cb13730532e5b", "1f636bb8457d1c285b313bb055333bc4b57cadcba916d2542fc796810e0391f0", "0fc4b68431f091bef3c2e36317a6e64cfec70a52a2101516f094fdf18d3ebb27", "25e5040284434713ea9bd26f2ac9b8ec40f3b47e0dbe9dffe5b792eb0300e3cb"), ("2e993a916bf57196eb98f5fc0b2738a1fbbfde5e1845809ab80cf3505a5d7434", "2dce6dec26ae130efc0a62a13921104d10ed2842687771fa4cab2675e72b88c4", "20baf483d713df51b4b005a4ff750debd8366d4c8169a0f520e2a2c87f26390c", "271d9a97f6d19a84c87d50c836af0c1634aefe8f630516dc1fdeef27777daeac"), ("211e6e1b53a49c353298ac78488610812deedfbd1ed996d153ec4040a741f419", "0355c5d80b96f0f10bfb46b64495b2d41f932b171402ee3d8552864a65158c9b", "1306973fb54b60c8d28f416fb43aa7e15d61a40dcf0b8d0492cafd34e212f4e1", "123ea7fa3890ff206363369956a70fd19eafcc40db27425926a7e153498c2b2a"), ("05d8d91947018e2c8fa0085371c5fd3b152fb0212197f4c130a596e4ad449df7", "0d631f8eb0eb2d84c30ff6ff428467256a12a8d9757d635b58b86c083fd463aa", "0ff43d9c0289d4fc8a641d97ec60312be563fbb2dec20a0cf1d5386685eed323", "2d2c3e2395f598301228d0e10a89370c9561b7002d4cd428ce26f4fd72a5389e"), ("0cc3c46ab3362fd11a31baebe30346e8d182125bfbbeb7dc6fc63141f9d2c4ae", "1d8e47aa881f41fe85914f45dbb08e25ae5db24ae815311985a4f1f4743dc713", "1e14618ffda19662bffc4f2a780a91846357c599ffa52ff7e338a7916978d784", "0664d25ef60d47f3fe05d641f6118fed9915859ab22d90b579c589f694c0fcc0"), ("253988246455f649ac922eaa5372155d8cabb7d972b0a82f14add3290d044d8c", "1fe1c0e24d25c11b12f0b0b68c4986232bab6f2c84cd555292a8472699c7a63d", "07f498e7325fbd02cc29c286720829c7f9e920d1224df4132fd3837afb6bf679", "25695a72f257db129264d3798178fdd45182c6d6fd8b607d78ceb06e80622b80"), ("2134fcd6308adbf614eddda1aacac38c21b374615a5d82dc48b2f4a1ec6c7cac", "1337e79c32e41aaa98f86dcb7f75967f18acfe49eb9a6840e25a249a0961da43", "1e7ea357896f4b3d8bda09feb2f31f0f8a2e1d6d06c7211e75710498a05187d0", "11e3fcbfc526d2a9b3b1744deb57d73b81c9907ee075bb86627d044585e1d9e0"), ("153559c4f54a91a3da6f8267db8de8c429a2ac7f60743b2658e965f184356fe2", "2362fe704e997abed9726f9b5ba98832af7beefa8c6d38e4483dd61d478aabac", "170c7d7e95a81525e6482ad1cda5441f95dbc82521dc0c6d46e95d9afb32d093", "184ad70f83686668b0822141591507f3c7b884ea91a6784b23ccdf825022116e"), ("0a610b0b3bc992595038af87b01c2e10d3a4802b43813be5c69409e5440cb1ea", "2dd7b25a06e7fb87677b29ffe5efd5664c16fa2823a0c99d9a64dd51e48329d0", "060bf0f9eb82f0146d749a1d889ccbadd5ad0a91bef50277cda8239656e23331", "219fce520558573f11e942dc6e94500b21568ebc594725478f4c5ea68f20b037"), ("0df4b3c91bded3df1a96b2bd3fb6273791a13999ab8ff14254d31d1c68f8afff", "2d68f1951cb4c93e11a464e58582bb9ea701da6aa56967315a2952e2a3b977a6", "13938756c206f161ef46934a5d26e37cbb72cca297dc1f66a0a384506a46c3d6", "214ca8b32d76511e67e9086436c6f33e1cdd8a10fa129257ff97f9cc8a77c8e5"), ("1762d1f4f6694f2c7c27a259c236d4d4b5d5510b170d21fa4bbf6ed1fbdb0fd0", "0ce6c4749b212507466ee6f992800ac24d98fbe45630f261e80a29f9df074456", "200ac5286d507cf862df680806edd8f4203da639ca7b03dfc830ee78b4c967e3", "1fbd198b3322d297da679c3cfbe88a9e2d259ece09c1d89df74b8e47061756f0"), ("06cd7f47fc08f90bdbe25bff4d6309c02f03bc7b466ecea09d62d4248807eb84", "14b3e6d7765b724e0665ac3e765be3088275ef6e8ff8b024f3bcc3c784185d8b", "217b5196adab3275bbc50b7203a3ca10e884dd689b402f1f7e94e3b4747204b8", "003898955ecfd5e512390069c28b0fa71f5e98e560aec78a6a355ae6e01d0dca"), ("131d6c61ca738236241a5b2d5ed1707ffd0cff29ad8d5dcebf45cc5a5944ab06", "2540a20118d8b59cb278a45d32f2687d20a6a253ba8ef7d7e91ac27cdf2448e1", "113544b9ff6ffb58cf7c8e9ca765e035c668919fda310bfdbb13686c8b7b8634", "1fc0395fbe9d23e44a8ee7b99c2ba8f35100ced68ce1cb742740155d0ce030f4"), ("084591db3f768ab1883433f371c9292fb90586807e403e0fe10cefb598a0ad02", "21948fd1f55d230758300924bc92d124c86dd34365ccc4f753e98bf8d786072d", "202edd27a71921601babecac7806af00752c6c191ec787781e2a4573e7231a9d", "23e929a82a2d52de1f6e78351b4f6bcd364d7abbaec74d77bd655e088c0bd452"), ("286544a6223fb9659d090df3994a206207784161892cc97469f402bf08260fba", "06920f1b3b360fc3c5dfcf2bd8864e32a24e276b5c9cfa236546b4143473a197", "25161756ff7921a854594cb26da202c3bf558bcba10af2cdfd06705902a662f3", "1a54b20bfb92d5b6f4ddd934a57736e763814de48513e5944bf5a0e57e8d91b2"), ("082edd73d2f55b8efea4b2bd652886a4f8bac00a062de199db20e1277c54623b", "10d089837afc2a38f22f7cd48833e80d3ac4ef8a3a22354715bd37faec7415e0", "246d4b2ca2fd2a8d227e37fd4beea60479bd968b82f9c5abd3182983a0d5b91d", "2f9a0e1c026d04c4a1b99a084e2f9f151030ace0945dbc79e239198ccce9b3c8"), ("0b0ff44b7f5e51deddcff98e1457103c787afab5bfe7674e6a769d29f39df690", "22309d11e5a741830140267c57baeb3ff27c58d26782a530644f4fcd6190e0c4", "152db1fbbde2e691bbe9235d3a7fcff863546d43610ccc692afc9a3af19314f7", "230e11247ddc31b65034355e30688a818496d2f63942e1d1d35179d7193cf9fa"), ("3048a20c2e7391c89f300dcafb1b586c17811e57b8201e9819130122d7171120", "0100382057d0e82655b63b54352d47b0981641fcdfa6bc27abae45828c4bf081", "0c6f156fc122e51710314babe15bf6eecd314b0a888c818a13576157a23563a7", "044693275a626f77a35b7fe0a2f49b0e061815c8434c5ee361adcaa3170ca4a7"), ("1ebdc50d0028fcd6e8ffc2db0edce6cdce9f42dd0ee4cc35866407afcb04333c", "1a35f0afafcbc7a3b01f2a06cde423c62800b7575bb31a25afb34bec8b3329bc", "0e9d9f4bb31611cf1f264187fa4ba549cb66e81a1cef8a1d4b22baa35988484d", "0d3eca91e2ea13e53a43ca511d025ec7a63f0ca72b652452ceffcf4ff481ba96"), ("288a35a5bb3f246a0e3887c40acd4a2b65adef2b69ef37f13061b3996d078fb9", "27599e7003a4b9835e2e321c1aae375e4d3efbf9e0a90545d1f23e284d0aa198", "0bd50dc4c4949d3e02633daf1507f2f8a08cc552283fe2e946c4f31d7bdeac9f", "179e6dcd9bc90642b74aa5f6266e60a33d4ece9b07616f25b768d9786e5064f7"), ("11d449b9d79f95355bd1f98acfff6214a52f5064525d77bd774ffc9016de8f27", "1ede317b205a6e083a07645202fa5b32143ca87bab8dd560ef5f6345d84b6068", "2765e086ee2004eb1a0ff4d494da92c292891c1ea4fd37565130a441610ed725", "1ce15405decef3ee0968e17433190a559afc2e643c24f2d25ec1bf573b7108f8"), ("04f75df8e1e9bc7e05b16c834d3d8949a76cbcfbc3db20d707b74b094722942e", "046735b8ff389ab62a06cf4a6449c5c16b59cfefee1a43da1d8cec53a23c5d89", "085894b387ea48b64e77999ec74a7a849ee5ab25b57f89a30bdb6905ed425eab", "0ac71b9e9179b253434c9bd06b2ed97d7f3f67d72176f0ec26edaf043dfff4cf"), ("20270dfdc1377ffcfef23574e7ed5bf511b94eea6f53967eb5373a93c46a144f", "093354088d0fd8afed114b2870a9a649036efa729a8c537d3ebbd90ec346e9ec", "2886d86b2a433c87da1e15ad3b5dca4add59468cdd285ec363559deff96d482f", "098fc5d5b197c11af008e8a50b1e9a3912a05c8da6a7a5788ca59d4b988c4e68"), ("1ee6033fed055f61f16bdfb6811de9f7fb0b98257298ae2b4eec5cef99d5b2d5", "12281e2b83e9a254578b70e90ad68316b72a46d958c92a319194e4f614fa5302", "16ea7bb59e27a4c62ce65f9a9009fb02eaa7ccc56bd48eba1213386dea162331", "2fcfad49263b2a58701d3051984714af067c3379c327569c866ce4925edb45ad"), ("26195aa92411ec24aea506c57b40bbd56206dec041cc36730239d7d0cfeea8cb", "1af747b248a6c1e0eb5bbf52e9bd06ffbb2dffdb50633889eeb4a49a1602ec88", "1e71e97e7cc7d894eea281106bd3e647b9e6e6f32aa3ec97d8c4076ae9a28e4c", "0ccaf958b806db8bf664e7c2197e2dee3af5ed46b407db10f90e178d0409df12"), ("0d4aa4676ccee5a08c007f13cb7d3bee81039ca105b131d6f77d17094ed50e2b", "13404c66fec0bf4be55496b7592499778553f55c097f2af0d128eed81932569f", "1749b5abe6a7d32bcdca4e1f271f28606e58d9da262586d7baf8862529c0dc6a", "24c938f7529337a1a6adf1a1e9f7940eb0f81f9f6786296cadf7a21edcbfbaaa"), ("2dc3b780c08e8be5242ef74faeb9cbbc3ebfbc32e05c5b31f93ca75a5d2076f8", "2b784b4e3d8733afdba9be34b8faff881c5e55d1bc45e0a9c87397f7254358f1", "00efa92ef65b27143c95dfa41f9830fe59b4b57717fe8257ead89fba35a833d2", "0b4c772732cee6e8038a28ab1d026dff61360095a5fe608c37757be2871387a0"), ("0bbe30389002dd814f18b3dd731e3686342935881630efb24efd07a9acaa6ea9", "08f3a599e2d9ba8084df80ea51bf22a0da1dc04aaf29dac0861c8549e361855c", "2b47e232bd5270223b64da7b15f41555e25a92fe5f37bf333040f79ee5f282bf", "2b7b8f8c199eb939eca68d4b936302eef5ae50e59220b5801b6040eedd1ebfe2"), ("2c67aadacefac6ea9613c5e93862a5be2917ca48760ba1579d845bf60a5328ab", "13ad7b878d86143d1b5f7572336102b227f49aaef4b5af7e7fd99486af2dfbee", "2e15c4f3a2312e041ae8b95fa5a53541ff4e379b6f2249d3d3246c5c5f518493", "286fd44f5be2aaab8ebfffa1086ae63c87fe1f4fa3978a3cea4ab7709270aaea"), ("2b8b6b3522294cf6cd62c2077d36b38f494fb334a0c301c59d4c45bedb4ce0cd", "181d09e88f765493e1341107d6ba37cb550a23154e4f569191b24f7698281e67", "146d7913cec81fe7e92afc15ce7070f30775c4afe2132dd89227f910a4d784a6", "040c07bae6b38997661c6a7d482479a0aeaacdcc9020fea19b368fa8eb20251d"), ("12a21fa15e593d89af433661a0c1d7fa991090274e11d5acc1d4bee053ba2599", "274bb6614bd091a54c122fd1157db1923eacc45c25e5795c47a012672499a71b", "1890be00ef2c20f0530646669555f397f42508cee07cc81ddc2510f88b173f8c", "1a9572d309db2b15af3bd34981b98190237250a8a179003095feeec9343623e2"), ("15aa291f8baa6ea6ae427d35657e0fd0cbcaa5f70dde0f66db6e91fd4411f434", "19d833b17b6a10bbcdeca78ffe526dcd66384076963752423d5d323215591e9e", "06fa4dbf431a112509396c53e51bc4b71f00a6fefeb2aacef816253282a3ecb4", "1cafcbe6b929bb93a3e51640586f721dcfa41036e0bdeae23d9ad157f6e956ef"), ("283f00d17e3b1d282572545ae03e45f2198599f6f288e39d735bcf886bff66c4", "003c985057c0b0556c1693d65942aebd8bac8aa89cb011e3bd6b66521129749a", "232138d8dc775ea35ee2e90e84199b5f3545b69f7c36506243c364d01916c86e", "270dc57b06c411fa0e612d5ccf1ab55df1e5d15d714755a65155a934eb1aa1c0"), ("1c7773749d8863243655e47aeec44f09c2256704912a81546b4f1f64750d8ea6", "127dec00795b07f2df227badbfe7d68d807ffd7c4e9b57e5f97e262661270aa5", "24b77237f735a67c22eaeab354352c7033c72db1795ccd05a02d5fe65fe367d0", "0968b85c25995e2183991ae05349b27e8e81be64f3e816ec804c345f5620c352"), ("07e6e6b47d44a2ad442ab3d9b93e852168ef8fc72edf6ae00615226fc875c17d", "00bbb97621c1f9bffcc46b8bbde41bfd5058bc44ded3c00981c131e555dc6a18", "0ca4bb70259309231dadd43c7831a1d720ad8d2c4d0cc785b1653e95dfe4e358", "04ce2d83c0c89610aeb7dfd93ce170ec63ca4554121d6825751870599366d2de"), ("17eb73a70b97dcaf5441b12b807a2fc6076aadffa5102c126786adb382d1dacb", "0381ab69f1a6255bac99373ea2bb757c721f6ae0ba079875476250ff2608ce4f", "1571734b4e3a6c56e576f5c0e35e4fa99ad75ba91d321e826f7e5b9a42c12d70", "2323954881ab5ac9c8cfa6a42d884944bceca252370862cd7e05a665e94ca026"), ("2dda1d56ea77e63600b5b4806bb0526f4f0728d2b40056019fa5fd23ca271b3b", "2b72a48adba52882289280349ce3bc949cce45e6a8bc1064b7400f69ed7ffb36", "215c7c5efbf1c2543b3d4a3a3a12c526cb5bb5c00858d186eca147e97bcfae29", "1018ccfdb7dddd4f6f28f3193f0f8d7a9875cb97e6b2597f9e87581d0680b79e"), ("03812200a221cee0b6ab9a841c99b1c51f8b3fc9e1a939290475aa22c453b934", "01c8ed3bd48cb59ff09951afc6271278cd7997d22b306d0640f47a473b2a0e53", "2ec636e62fbf3984340e137be4d69c0c07b26edeec2b48fc09efa05ca9fdbf98", "0dfbc061fe79d6b7729ea3c0d25fdda00ff498e6cf33eed9936d7224953681df"), ("18b8e6db0b883a87e8180d2a8a0820521fdec85179226c0674d5b1f898cda5cc", "2cc1dd5463e0171b6c6f66a43d858d61650d7a6c76b3ab3e0ad56b6db312bc6a", "01fe19465775beb8e8080a65800349cdd3201ce31384f5c477f909b9e92e1828", "196730f6151c0aeca963af93ac673fa10f0f86e08285165dc5ae2a20104a3e61"), ("208c8e1759021d7ddd8c524c72862d95235e6e9fc6163c1fbf6ec10a1081e663", "2a6a37e234a5df691655d36eff791b4226268cc0cf898ad274c058bfb41d7900", "2a2ff70f41f918284542e167fbb737d4aba7c688ee25ea6bffe87cc750e7b497", "04deeb736af6f54bd6ee65d996def1a3d551996205ccd49ebfecee02c911687b"), ("1d165181efa5fa761a1a9f8c9e323f1e445ebf50cd5947b7871cc69da7923149", "27cf6c277e329ae9ba0586bde18b0bcd01223d9506765d64e16bd3fa8d5d58f6", "0708ed48c994e21e8f6a132c62326c130767a1d5626877c0e6a6e5c84363e9b6", "23d6683c2097c3d596cb24a1576393dbaabaa236686c27a3b4d4202c02b72901"), ("0ad81be7d6d6b23dc6af6ec92cd61b91633ef9af6a8be533dee22d252f008d52", "3046419c98a6da739f33fa6c6b6e716807557412276ccac41bd1e4a852b71155", "1b75dd3b5996df317965984c3c4967236b4945d5ebbf88e20d5d8e230d7396e1", "280665bdba2c4392ff308be64a237b122d024d48d6cfabed1430f6aa3eb07d06"), ("0d86eab3e46249d43ad68b131bf148534562cab62a7c6094ce74ba8a37e85ab0", "2f354955c45aba36cf4c5a4aefa99d271db091e65f8c193b3379b5acf079b6b7", "038211c4d1ac50c70cdeaf5cff77a0c0c2b171ea655d058f3aadb44ca48a006e", "03e7f3dc7a776ea9dda832e7be759abc5c8f1fc41c3d593683e3a067cda44f07"), ("09d157bb77836fb31d7dcea54e43bf7216a841d7e8ee40ae8de29f8b0eff12f9", "0647d2bcefc9e3ad736e8051bdc14d0b7771912b4a166a9c956189fa976f96a2", "1719ab21cc495725bfa219eec2cf6139fee0d6a67d573a141aa4af22c8e4d7ea", "03671ff84f79ab86cbd94026f7f9ca6f872f92e2383eb4cd7b85ed048925aa01"), ("200d299edd8db12039d736076677add5c0ad1e9745b574dfb906ba3db1765a40", "11efd060f934764cd25c98e3754dcae94a74f8da2af07fcc8dfc32fdfc12dd44", "2918345bd5c11cdc796c7bec42c930af336f29eb7a97b4ca7aa450c98722764d", "13b6ab7071f360ce64affbb89c202a27e6921513ee74dc3e6843389a4b9aee47"), ("05738f3dc9cbb63c4090cee07ec6a055e2103d5f151a22c4901b0e47af67d9a1", "0f693361da3e399ae85f480948435e04c1945e1eaa7653235b02247893ab9502", "268f024583b325993124596de5bd36d1106c8ed9ab334b82ac45d09668b1383e", "17a22d6b427f22e7ab07f6f45a0993b4028e88b855f7cdafddb0a5fee059813b"), ("187e11e15f3e63355b39eed7f1c7c515e6db21fff87c46b96420ec1af35ee942", "0b882d52c04aab6e4c43a21952505cd2b90c8b595e7e7070b6a25d5caf1f5def", "165fb1c601c663a358414ffe16093417ffa07b3ff749d8fda45c2acc48ebb3ff", "27a6c21c28d14425f25e1ff363447633f24608b99aad81d064d594a749b05fda"), ("19a99be203b0b521ac3a975346a0295347a17e1dda964bd77eb07179ae8bffd2", "05e3fa90246ce4a43e77ad6b678a1d0c961c739f51f4c264089e5382ae205399", "07f5cc66cc58afa93e453c3cb9150cfc364696ac2d5a72c8656f52b5e72364d6", "2771c179ad3f4e296f37e3e7c33b80aca57f5ff9e5881d2af7c9917d4c88d78b"), ("104bb9d8eec14ff5394dfb81fd75103ccd79405a23fc6be11ce658b475ea1a91", "0b314c0b986c7fff5ae13c0a1210c2d2729625c14d5278d780e78164904f1ded", "17b8488d828ed1057ad1473aa5000d2dbfa3808ce9bae71d99a6b1c8f1b9aaad", "23f9a58f533b6759e471a628dc5accfcca4ee0c5528762f781bb42ec23b4e7d4"), ("2facdca38c05281756e3f555a1f47188e1dfddc9b7a7b4518b6ab0e858bce668", "29a6fd97a23de6466980139badb906ddc448c63fe70ff94bfe256d766e8de116", "28808c0fa71ea0cf0a2a4c3deccef1f6f44da7a8ff1c4f08af34fa0f6c2225ed", "003cdf7d403e4540ec5cdeaf121f4a7ce14c5be0599444d6a5c35c16b929fe63"), ("2f8f684cbe5967c179a666057f240b4e413826207e2fc3735b488dd556d2d0b5", "032275be02ee40fdf7e3aff7c97568c56c11d52d093a8c3622e8ee3eb6780b44", "022d94ec50d2c32bb7594f26931d47a3cbd21c915a5f65dc2b2d3856a13bb39c", "1a81005592190f29ae0891fa9455e19a3e9be7fe811762ab5964dddc37fca0a0"), ("0c98c2058d64dc250b07aa4d45daa74d0384f68e3752118ddbbfcd42f8a7913e", "08f6efb293ff406acd32207b9d2fb90419c93fb124683fa598cfc81509a84e55", "0294933ad9d238515bfbe2ac4da062ec82ef8a70fce0641bd7bba2c8cce351fa", "2088d739b8f0bc564d4b48ab9e509a71e60dcaef7589a215d38bb06014820a4f"), ("13c3f8d0e3accfc2cd6a27b5ca22671c8c06fb2ecf80159539a6839cbeb25aab", "184658de4a268c50cedc46ab06521fda7f4dbff8f863b125ca08d4bd8dccd89b", "0755896e229badf3f1a5e4b5d2106fe6b7b85b090faa0d670709da2406b6c31a", "0a30c1ce87e4514ca483791f08ea94dddca0007268e6ae358985667143c0d360"), ("18eeded1c9660d6975d185164db6207a2ef8959d84ffff6b54dfc42b393a205a", "204612536aa5ded98bdc28aff185e1c5dd2820b5aab0a0d53ae38a589e0bc066", "28c25670c53f0af1f135428562e2a30b5b197f650ad19f80aa7b7590300bc711", "28a13f628d9eef258b3aff9e49a8c77e445dc44306f04a037d801dc2ee17c910"), ("0ee1430ed30013b85b24cd191e02dcd9a022cf1d9de256d559cf73c567e1dd34", "182c6c40216c879de45c8deff418377dbf9204381b5cd4716ca29e5010a0b432", "112035518938d6936a20b4d3f388ea29a90af8864b874e4e577f324e94890fdf", "2ce7b0f2dd3a2429d81a005d291411f77d5e9d75fb2ca7410da3b7692718f1c9"), ("1682c28ac1792346efad2fca535f1ab00999884672c273bd9044eb3842d999e6", "2a6b39bfa96d74497e83de84ae808a7a86b9f96f81020469ca420a9ab617de4d", "2aa6f9abdf61a468bfcd4605f00e0dfc42a9750be518d74ff283ba109ca70933", "1cbe9e5fc7ae663e544b47ed1ba9003d2265767f92279ec01be54b7a5f6fa1c8"), ("018f4ac7468be911396678227986897eb695ca95d2b1a847cf075c9b56f309a4", "07c3128ff661e392db2e9fc7ddc82eb76d9e2bf7f9e28f8030af50752a027f2c", "0388d68eccb2cbc0b2ac1a810ededc63d1268e0bb98de2f356468c5ea1f62bf1", "0dcda7d9abd027613a81d4120828fa788f8ba0ee2818d3c229c27d8c6efa2072"), ("12550262248fb6988d3f7a9fb78a0bf4d9222f82c9e9eacffa41b455c8ec2f97", "270873ea583182a0d9296f49d411ef8603f4fbabf81ad69b7a4db2a853a4b797", "1124307dc90923ed79c7e8bfb3aec4bd74a11a71649b41a4faadd49e582284e5", "2e0fadfd3f9542b7e22bddad27c319e745e5414df7313ceb79e8fb914161edf0"), ("1b180ec22896eef5aef1bf27cbfe8098b49e2bff2d7bf518e867133ddb107af0", "06fd51beaedee4b9c9fa09843c3611029aeb24e961cffface62514d373c5d58b", "0df60a7e7b9c220bd8d0f34cba5fe5dd6c60d0a92a139e5afb8e5ad266f5a436", "019cbd602bab22453e7ba9d7739187190d9f7321a9385118a1bd2f055df8eef6"), ("03721c6e57bd519b029d99b63d48aa1e4f569eb2f832ad36394cee6bd55062c4", "09865aa56d4cbd46db7f3abe1009fd24d7d2018a29275de25af9cb250276c398", "161043f01749f3344b87ba672417476cdd5cb2e6e89e1ef5619a998c65cb8f7e", "0220b53849d179009518693d1be66299e0e16089949c4c9c5ece56f0f16900d0"), ("1f7c30b454d18c0e837a50395d55bbd4fa4f41835ec2036302ea4e6c214db79e", "285a9e7419c55582d76eaee973f34cf9d8108f93521ea266f0cdccc5c55d5b4b", "06ecec7a85431aee470c32b5ef0d80b28b2656672800a0e5e55b988258920732", "0a2301a2fa19435cc54b429b5864a261b90c73e7ad6285baeac465079fa0f1cc"), ("156be63db7e6d59094fcab003a1e1d3f827e5aadb93f55cf406cb680f4c3b49f", "27c2d8aa6ab300a413891409501703dd28bc490b4cf26db566b7d9c3388d2bac", "1ad22abb5d93445ca7c4e4632fdfd60454d6488a6b2b8eed77a05aae55ec0d32", "1b349b255a8f1bd4062b19514be5f5b8847ad3a0907ed9764f4472f42426275d"), ("30132a81a193209101dc41895b89c890c01f8d6b5586cd5170b3338f48841066", "2ca42723afbcf04c06a02523afc5982994889f77293866e23823109743fc29bc", "23803ef2fe8e951bfa2b7e9c2c2622278b07cb4d7cb75a29e51b890eb1a5771c", "073765b169a4636d658e2cd3a28d8ecfa8f7e7560dfc021fbc47bf977fd8e9e2"), ("25120f108194fd0b89b9923776fba15279abddb3bf6b3ced3a29f3523ed34c26", "1a9825ec451467b5cca6d85c5a1405c023c0e95443273d5ce51854cef414bebe", "2a412c7fe82e1b26ef3f65e0a4b3bb9c4b9358400c6fc30ae578c13b7fb6a257", "153c0fcfd5efa8f1377067aa3f9e6e6dc370b856d170f19b290a013212f8dda6"), ("0b9d8973dc9249d2f5d03b6fce1d9120e1b397a46359dd666f210d993d6ac89c", "20722638ffdb07e5ff3c2b5a206a0d2749a11523fb07c31f776414d25b43ccd1", "1a1076428961416aaab205bab65e33750fe7391a68669e7354c997b67f0d97f4", "2446c694d0bf9e596c01efdbfecb0b84717cc938978e647b49e9bb6aaf84d0d0"), ("05c614d2f28637a1c6fd3e0755157642d04a208a86224bb42008b5ac62847c1b", "1c3c86c32fdebe23d5f4e14469ab7f62d5f557262539e6177f6b9e1c713bf76d", "0e4fc7b275d87d28bf7748269d5a76b36fad37db18ebbe691b36acb4591072c3", "1ac6b6819fe7564d7c44541d618a4bbef513e92a9d63f5a9ffada3f18f90a14d"), ("14a8e52c02f041f0e1791209b160c2c317daee8e5fe9a21a38ab0cdf282482b4", "12fa792cff4354264f02b9c428a97c0caf980d6168cb727de077d5ae2b1128bb", "132333913acec2568a4da296df1eab051822d3753effb2bc0dfdb30c3d47c631", "0d0d8574b6aad6ae8dc9d7ea447b84a1ec942f3425e54efc1e6c008de6a733d9"), ("1bd960bb4a6aff27562f78a850cce05db2597cb94f3846c721d5e0df9abcbf17", "0e8aa7f1a1bc12f64ad0c59a0611b7bc7685692426543a2f475503a80bef28ec", "1c6c0808a5a43e75cc4edecb11f025a722809b14dd7ce71c508cebb7e8d8c845", "0b4964ce82e219ddba0a2166ccbdaf17a7b4910403249c5134b5414584731c9f"), ("19a70ed4fd20381555a3c624363665c9108188176d5a793daa432e6010eac23d", "128def006d1c01590cbc2cef784b60ea56b711b4282b363afb92b41bac0a926e", "1d10d45907e995114d843daa570ef85ee8797baaccd7ec2a8346c990fd448bce", "2d6aa957902d1cdc1eb59be24ddb6d6cf5e339154ccabeb1a5454bac03d0f2ef"), ("0b96c6cef1ebb1b5467fd886b8f4950ddbefe9417433aae2e31adc658362bc55", "0769eeb09eefe663482093a9793d65e4cd45d24b292596705c6e5022faa8fed5", "0cf8f0d30efd0198b8bec45f01c4a750254c5824d19100b835965e879f856be7", "1a8184cb285555a7d2d059335220a6f89d8aaa2039b6c8ec222f21529513f610"), ("0ff05a86bdaabdbf0f1c412882dc6e085f3ca038b7bf63b7fbd9c7788b81e17c", "2b399e598133e01aeac381922d2c3ce374a63a48c47193fe3e9803dfab41a3e3", "1f17bc46b617c87faefbd01dbfd70912926a7a1806dd90804214029c9ade3aa4", "01c333419963c2e5daf81c833b1b84515210f4a9510e56f5d8000b78b417b020"), ("00226dc14b4175ce3d45e9b0125efe7aca791fe867ba218493df1c1bf7706768", "298a2af47a76b8c009b3db300b55cda59bff32bc528acc4b1f70c8182de54149", "1f9e41286e703c962098e8c7eb58b183bf116eb3c4dda9216aee5748ef298658", "190a901fa009bd1263b8be6483a509cd12b61f8a850455fd2ede8e42fe00a306"), ("1d2b8c2a0d48a86526097749bfedf821dfea8268e2147b6d4c3b211eb8caa7eb", "05f12f330efef83cf05b7f2c2191945f205315d163942da088a488ab789f528a", "1d159609a9d884518b47a82726f06f029a0f1bc616943a6471d589010367c1b6", "0ec530e4ce7e804da1917acd6bce878df315a39d7648736bc3ee3269df12e841"), ("111e4740e0a67a30bdca9cee75276f486a31f6567248ad231ad0d032cbfe50a8", "02f2e9f6d8215ae0d43ae260a91e459c9cf89d1ae3fa5a07ebf37c5055b5d8b9", "2de5bb205b94c02fba9462cc3f16546f50345a926816649e54f6e83a581993a1", "2214e010d87e5946e1307658a3dc324b35ad967b254aa1e0124e4835740cd9ef"), ("2dea9d1fb0c3e1d2f3df13fde6a0618f756a6e1a87fef36810a31197393d9c50", "1ecccbb867a341f7a0bb60be69d38e6c4557540b580add506c3dfb79aec1089b", "0b7b1c1b646bff9be7cb8124ac22824ef55a26495657d66245fa35e9a1498f46", "25fd52034240a001108aa81a9fb8303ff5a40b37cdcbc51df4019d7e73ea82e3"), ("101fc64bf588807fadb44c926fb2df37aa1d2c7195332df2fdd9c29d1430d2c1", "1385a362da660b0971d6df027f609cabb625d8940a05a21d39c03fa63182f496", "234a13d83f676465d741b7edaf9271c97e4e2934175037af25293dda560665a8", "0fa6fa9d77b42d54a9565b552c129799b47ee5ab50ec55c9341aa3e9944cb7a5"), ("1b20a426c2a1d61538d8dba2782ed39b1d692965be51a05bf38870be7c61b535", "2d7bfc7c7b7f3c0d43688d24fd10409f430b4afd58c639c1c31c38191d2b40c7", "2fe3bbb902c55e5cb86a51b49ffbbab95530a8d82769e32661846a98fa24ee08", "1e6c99b510c7641e8ed5ade51bd4a24bab8e0c2fddc9e9fe33fc15eab5ec64d4"), ("1ceab0e91d0c23ca5906a458f0ae85e186cacf939be7695b063e9657949d3ce6", "0329f355f5b6ddc068038fe32d6e3a794698057ad8044e2ce9e8d8604ed1e418", "17a2d4dfb04fed6adae1d831e363aeb103d6d50a0effa670cf057f30b1217360", "15f455e479b4b7ba4de195877b427494c6404d5feb20e9c62e0ba50841837f68"), ("0ff156f6213680f9d90bcbd84595b0ab97ca165e2b02f824cdaee01c2a979f4b", "2d5866477767c591b401a0581147a9c39d01b5296d82daf23158bff3d53aed72", "282d020b882c9c39fb8486d935a53c3db3564d22734f6dad1445205068a2d6ac", "0c669fcc15d2c084ecd30fd82a00f87df67521486a2e3a11317200c65a2b9b53"), ("1540a2271d20560e86cb172e77296845a2cdf76c1e0bd688d2f62a82d60651b6", "2bf3961baf7caeb7ea751e63510b3310f432d89af28dc4a2e1d3c355524bc558", "1a0b7e20b58412b09ebffcf271c32fba19c14c9bf002ec8f7d32fcf21a6a9051", "2b6554724f765376526751c8bcb1258234284429eac9118025f1ad8603b4f039"), ("28730d4e82c1f238f4fb278acf4ec45215fc99da3ec4ef63fd4582edd6c195d3", "20b3b0386acd6e92d67f0b161dc03ebaae28091efa194c24c610277b80d159b0", "1481114a3914fa79bb4639123f3464f443b1e98d6793a5c15ebd3a5e077e85bf", "1fa5b73c10f630294b3de431b8db831dcb68b9fbc10f5381e0d8ceaa5a77a3bd"), ("0717f5ccce642a610dc9bc289f8ebd1d0f6845277ddb40c1bc003109080bd51f", "2a0a3f528ca2448c99d5f4c3645dbdede6669556365b20db581d45a03a79d8ec", "201948985558a2d39841f1b0f610e74194b5a1e03d710bfea72cc7debe2c6722", "14160b5d6ed918464558998ebf2277f35023c41c77a897de6df9f6918b01efd4"), ("1e0b1b0a9a55bdffbaf7a56d9260002885db8a3dd4386ecabe8dba689bb29638", "170a91015058ca41958fb398b2ad72ea48ef1fdeacd8c5f89b7c450492ec1f5d", "236740d8b0fe33f982ba500aadd26d0540a55454ba1474fa6e9bb36b2a0776c9", "245365467c5249e850d1f599440c3a5cd36f2540b3ce4bf8c0f2c4c7ff3906c2"), ("11745840536066d163e0d0a8db1ed846a97f223e83d77dea373462661512828f", "17b70076b362fa72e8645c24f699729b699d187b7d2706aabf6d18a71f8bc100", "1ca161e2a1292ef2e2b79d2547170e23b020bc479fd76650caa1e5cd867c0190", "0875880434e5e7f32ec272a446fa13b2b9297bd88493b09a94638d7269d74294"), ("1bf7cb4bf9c24e3e9180ff4ac3a470ca2ab0b03fb6e515a78ce6f0f496664e16", "03bd225ed5611f129e2dbaa0fd093be4f8bcee01eecb2d8a14024a93a6396ec5", "0911196814a182d260acaafd50588d36fded71bafc38aa408cf329c3ad873f00", "0c2891d60612d7908fa466f253f185e5f800862be36ec486185da1d5bbc7796e"), ("2965f7c1babab6e4cc2e0a4dc3fddddb2f0308a7e1cc262bf6a817d8747cf181", "29bc212176757d2fc09df42531c6dd8a293b63bdc609e4993d05fa04134e6bef", "1f2eb6566ada5c8a966fcdd75971c3da02b336f5aab79ce70bac2a271ef0b6eb", "06e60690f25bc121c59ac121fe672ec4d5edb29ae67735a4183657de1732b32e"), ("12a91ed6be8ae4db71cc730c25fe100851413d4bdea062195ff730ac4938901d", "03ee9a156b3277c9361b4b1748127ae0df620259daa4423ae504940f7fabf5ff", "0e470f59adda93f3d81e4c5301db683a3aaf15041eaf143e6b1550afe55d9130", "055086210cffc66d7c6e8ede68a12ba38a9cc99fc9ba84a002ebda7ec0748e66"), ("1d4671e28c2856c638ad6ca882cb3748836f1be158603be6c9f0560b96a344dd", "0c207fcce9cfdb6bcf0751bedcd3496a9e548b9d8311d4a07b62fe768898ab12", "2b6e555671ea6cfeb81b12b32a87f75bcade272dac8de0f66ab299ef8a8e472d", "04c12edd35fe51cef176b36a82a2966b39e8ba2eadf60598557eef4b811f1715"), ("065ff46c6671550d4db3b654f84f51d64226219404ef7bf2fe9362fa938e814c", "0a16b12800272534c570f0bb3379d036106a1e556922801ff629d64ff29b576b", "167645f45464b7c5bb46f4cdd3dcd1522b3b055cbeee2163927e1a14c287452f", "0d0adff499b0bb0cdfeaf21713ea6f25ab7a5c698d2a0bb39f96a78e3ecff8b8"), ("19f31557e6f13973f13d2ca5d714f919dbfa48dc37b9191596ea3995b6debcd5", "2d31b0fd0d022f08219dbc83bd15c162ebfedf5bcad9b1f101130b0907a5b010", "09e83d6e37eda5f96bd6aae63660d98fb2ba8b9b7e8e41c2bed82c38466cdddb", "17dd0bd94b3900c19ab0395f6447e4f3970a36f92a61c513d88621fbc766ad1c"), ("172542ce7109fa19be8b761d9e60ed443dac31ce2b1b7bb4b837dd9a8d7b7bdd", "1a5f9f33010f0aeda74e63edb3e40e930cbd71ecffb9e814510fc82ff0a4b140", "09bf56fe9c9964c9701e3e3a7e54a240511d6ea9f11dc4e2293fe584f1293e43", "1766350a307a0e1d240d45c0940bd23372fd5f7a2568b2a7292834f4ef74e888"), ("2fa005dc9bdf2195bfba3e0c34d2602bf29f3c6bcc02cf1506dbd435255e9869", "0e9b146c8db92531e2ae942de3b304ea743a9198547f9d934a9fdcd6e22518dd", "00f2c21b329a105005125c3b417d89e6f97a70e5da609ae0ca2ba3f24851d28f", "01e0ca794acf2484c704de6bc06176ef33facb3ddbca3e80e91da00e8644133d"), ("25834b9356a09a1fc777eb53f7375a98cb6a2f147533e83da299b95683d61675", "0b049bfdbdf260a206a9a190e7c3bbf5f0b5a6589b57110ceff0653f9d0e5d15", "03ee759bd1d3b1a84e5ada9a12d6403a65e2993139bc0f5aca836f319109cfec", "1b2ebc49ae731a001c74691d05a2e95f270b83d9ab7f49c78aa677c3fb06cde2"), ("0f7459bd6bff15535657f1915651dde81265694deaafb07a1d4200ead9947fb1", "199a6a1c654d302157b5f7a235eea1ee133a365e54c7d2748c72dd92cbcf1a61", "12dc096abe229e6247e26149e9c3c9abb61fa48048e2b18ef5150dd2629d58fb", "13ec203b9fb67a70ef4049f96ac2b357ed58a8baefedf9daa775495e89ae7ae5"), ("0e93aabcb2d92beb610f39c5c36f072fa570d7c8dca7fd578e3e9ade464083b4", "30639140a9534eb7fa16e1c4423892dfac74c0691b019c121958a76180972817", "16e3c384c0697849f00604df6e2874a4a610554e4892eab102763705b5c4eab9", "1b0a10cfe8fe69abcb51d5061fa621bf8bfe87b0baa584f2b239c1a89bee0bfe"), ("18123170188e4a9ec5850781c6b9c27662b469f62c3f333975e8c3b3c49de660", "1a543dc14acab035c0f732fcb32a02df2ded4a0e819121f93c7453ca76843850", "2fb7a9aff774e9765e33f276b6533dd7544af9e7bdc2bfbf69efae6e5cf06882", "168697ae1c331012e9b9a09378f5f1bdf21c290a60dc75f571d7aa9766e1cf00"), ("15f5048d111f9ca84533cd9e8b5da0ff7302333348763a9548217d3296e2229f", "0be4f5af13656edab88aa5d75f5a602a2199306ff9a9e87e943a9129059a45e3", "0ccf1de0954ffc053fcc6ac636ccc526fba5a30740ccd202156454c1db608891", "0081e3744d5243e9697396fbe0817fa5559ba2f2f5b333d484b76505acb0b8dc"), ("0a62d2219d83f1515a5ba4810b982190f8ab8cbcbff84101474c4cf85984cce6", "2f530e5e7b51f32cb9661f7212affd7bb77b7fcbce196917b7eeb73560e628bc", "2056d043b53c79c792dcf81f4098fca7de1f7fd328930f0f19533e8b7854ef28", "0b89aa5e6a196a2d4c4ba2209f23f3ebc1406652aec92f99489f884bb467d662"), ("0fd5aeeb2445a6ccd32e72cb67fda6bd813e2fe4e51ed5f05fa493e59b640ec3", "1a9d6739d106dd57fb5957558849579c0efe7f282760d46e6529f08a989a6fa7", "22f8d7dd7959be4c8f556082dedb923b08282574f3bb86de0b4bd7825e8d2bf2", "09d994ae7f3cc39bfafe2cb5d65fcd53beccae5dc41244a84f8126e8215d64d1"), ("2b9608efd2522b03ec1fafaab1c28e53eee1fa73543fc701ff22e1973aaa6ed2", "1f4b12b78c145fd430992268700fdb06fbbdaae720a6aae229559267ffe80462", "0813af8e537009be75fcc01546f80c8197f3a0e95875eeac0cd687128dce6f60", "1ad22f9f8e42a6672632ee5426d8f007e2f108e41c06abba7b07f575d54c1c89"), ("21f6379ffdc235bd7972a2065a5885c8dfc53c3064c046e0999d2f76d8fa1fbd", "267e013aa54c53fcb1d63edb9cb0ee1d47a893a806f2d75b221deaf452303109", "082e7f382d97aea1974b78cbd8c3904552427415bbaff58098b6672abd5d0ad9", "2105aa08b895871470927ce24e3abd5efbc0b66ad46b5c78557f000f1ae400c6"), ("2b25b7e5c323c24e83cc4f335016d6d35df592c8af24ae623299464f9504a112", "05a8482296432cec133f513c63cfd052b951fbcd95c838907a2abe3b0e7719a8", "0dc5c8cfc794d1b191a2f8100d1f4f0079ea381ff46a58a6395da5ec0623235a", "249c3bdc1681ce57291cf3cd2b4983aae095ec1cdadce9ff3a14ffcd67b702f0"), ("2d6242b6b5fdec8eb8d954acacb5ec9dd16fd3ec283e1a5989b189890dfe0b3b", "13265a09ad34a6d0bf35f7c04b8b96279a1252813f5bc5d6ef52f28f71de6868", "01fff588a814a2b96f368571ed630aaa157628ae87c4b9d2697356f618f3cff6", "00dc7054a654548e6d58d9e404eb3c5822929d45f15ead5c1c3f4683c1b20622"), ("1bb016cc2de9ceff34ac7b37985e20daea80e4165c1fa43b3574c797250483cd", "24d801fd40cdc00c303f5b36ce07784f6b90258cd49b9e74f9057e441a476ce9", "27ff8578674edaa3bab81daf1b64ffa3abf6390c81fce9bf54e473576399da13", "06bff3f74951d488aaa9af7cd9a96c9e8e17a4654e4925b82dd5595e00e73805"), ("01fc04add5e2cb4fd3e444da9182e7c3153382324b354931df27519a71b752b5", "006aa1686d9650b727bdf001317851e8d1b68ca8302cf3fcc6f7f8d5ff529c69", "1e8d23143dcef7655a0fcfaa0740b8761ac1bb157bab039080a0f0530c2479e6", "1d51e18f98883390ca4dff892e38a5ddaefc0681543567e4337d40f7a9d99ac6"), ("28ed68cba2ba9e5629b0c08b834c793f8119e8577de354e487de96c651442fb5", "053a6732ba3cbfe8f2f7db89d9d504746ce66055de505fc4f87da1877dc8163b", "2ba739a4e4c7808c190cdd7a451371e011d2e8a7b941720e57a458b88e9f9617", "11f69ce474c014a57230e3e17725f8c0c28d41b5ff6b3c4c6d86573364a74cf7"), ("19a7c37bcda5e1d3c797d58fe8ee9b8a87c947b94570e9571ccb4c528debe044", "046d7e9d37264db03b23bf553410b4dd13161dfa49378d046031481e1156216f", "235e81ef5ff9d78dc13cb7cc407b7542f831aeebd574e0d3912c84aff0d312ea", "112ae9d4ac73774ce4b13ef439ec9da9c120807200ca8472506cc71507e07ade"), ("070a67d152ff5d6376d425ef727a0b43c8a10a4dce912fbdfb8fa0c5a86a5981", "1b6ac24cb33a6fb552a18a121b1fc1417338beb9841f7eab636258f9a2bbc62a", "0e07351e611d1fc6feeef42ebe2bb4eaa9597fe30e0d8d2cf46110d8a17ba8af", "034675993380698b12563ae1949af553adc95411f445ef676d97beecf9c76803"), ("1106f6c9c9eefc0d336eed4d0d9d7904793b05520b3ba3dbc8cf91711b4111fe", "0eb3ec51ae7aa93a8b1703887bbad3ec6627d5c384fca4475f0c2c293619a099", "061f3003df6adc52d659c31794f410149a6a5852080acc9e10fc77668d1cb944", "2e30eca2718c24b5d105557702d328a6b9bcd7f158bc31dd136e3ee67addcea8"), ("1b665b82914e5b468190edecf121715bf74aa84a482e8f2572cdbce4b95681dc", "1b5695115a5a5f5ade720d3d314738c89feec424b013941630eb81ce36433328", "202cb27132b457315cdbde176e25a598decf663a0d5b948c9a05644ab3b457d8", "083d2fb6c9822ceef05261a75a8696fcfdeb3d3e412f839d8bdb694569c936a4"), ("19d1430bb73e5f6373dfd71d83d07c103b27f748a646828adbdfe49385dc43eb", "305efc852e774a1d52c956cef89c27af8d1304a56ac6eb974cd98768ed80adeb", "18e99b8a6c3e55bcc471605bc9dcf5f502bde795b9fc62d9916026978dfa2c31", "2d89a5b6ec4162e0d6ff5c22506fdf81fd77dced1d72b362bb56e1934c3cfea6"), ("004d6917a7fad0f4d0729a77e05ef60cec7ee4476ffbad94e37b2c34905fb625", "24904ae1271811b4e526e3a2ca6cf5592df25e1ace42a7d06026c1628735bb6e", "0b86d288a1a1438f3e6ba0c89e025a3fa16bbeb27abe601488043373a5703bdd", "2607b62ed25600f4c861b527608ea95e08986e8936e4daf9b0b5df0ea70bf84f"), ("0cd6d54024a3a7f75dd2e41f9c540737a279fc45ef0d44031f29608e17382648", "22ffaecd327f84e9b1dc252d413559d2dcb632a96239393bf584926e4e85cd98", "1f367ba303f2e0bc8f1216d35d6dbe958a7515144e26f6cc38680a6b5728d418", "15836a6912427c04612501c00c8acb160f67481c286aaafd0576f40767984b45"), ("2397bb387e2febe9937fbc5779b270cd52f665cbab164ea229b88175c841ecd3", "168c1729800fb393249df15ca3aad6fb97751f0376d2c95b333c00ea91ae447a", "1d9e72193682a5d619f101c95166b6ecef23f88ad786622fe9c86a759438f58c", "004f0226ace1ee2919ebe4e6ceb2ea08df2150859d59815b643869408ad6030d"), ("1e8130d21efa4f4e733f3c76c9b76a6b3e91cd5241559246a69df2f07a267c05", "20352ac9499f6bb006882828db62b4a161cb92fba5ebdb145675cb9a891c1fd1", "10e94b09059ed714d94a8f5491c3506ffba04f90c87f20747a10a3a9c8ef35db", "08ef99baa66bb61aa4c1ab1f73af27cf7af7e320e0c0bc900d2f375814c682fc"), ("0090372ea0e3d6e9617126dccb6c0b1f1da51dd266a0ac74c4e40aa9843c3b19", "2e02f28855878d9d0794a14a31d50adf4cb4817266b09df637d649fe548890b8", "2f9e190b923c6b96bb434c1eae9d28e8bf503e5774126363544078ada48afa88", "2a3665f4109bb6be3266cd66f237440321b5a48aad873fc22903c8240d6fcf6d"), ("265abc15ec78e187f23a835ee2750a807760f4f0b5bcacbd25a273ea0a5c5398", "0205f8fb6dc6de90fcab322bfc81622b8d29bbfdee259daa8da7c39895a3f8d7", "0ee0472891931ba234f95c6fdfd496e07ef024903934d5ed8364000cc5b4c034", "063c64df2beecab46bf3ee855aaa55db75d8ad8135490ffb708cc901ae156ddf"), ("1bd8121d1be9bc309435fab29c6f8fb8a4de3b229cb49b7cd3005478b1ae28a1", "070aee076d364e9c6a8781d2853cf9bc1f3500e2ac1da2fe162280ace975731e", "12f2c36f46d560a6e941165535449a86335d2c66ecec8626008c82165e98e68a", "0e45f6977e7c79563469e710c4ba47f68a519950d352cde88cc37ae6ff1b5e75"), ("18f3d9b8e688306d3d3d8def6d1238f3c9d97a2762b452ca09071065bc28a951", "1fe4d44a3724ba089d70abb5d4fdb472a012ab3b9df6846cfcac62336ff95d97", "069557257404b026e23bb0e3ce2aa270b8d2e913b8f726114f09d60f72ccbf74", "277a707a213484e6eb635a0688ffae879c9d2f8bbe5d41c231c380f2bd3e2f7f"), ("13fddbda48ef1f45730d0bbdd8708acf24befdc5dffbc212817e4285d7083dc1", "20b780509c5dd5e188b3346799b20a63f0519a2ef6edfc8cf2e93dde3b20baa3", "0e38e12d428e804cfec7d2a9ac09a4d71741385a88c90929249d1b64e97af5a7", "0f2edc19bbeec245e3a9ebe3a69bcedd898d55778863b4289164bdb8c7f7df92"), ("0e43e176111d413c1029de5ab8d8bf6f1f23682fa77fca6419838d123fca0eac", "0e9c2fa602fe776618d64a7b16f77a6e769990bc0498620e3cae69ab91871132", "0379ee976d47f6a5972bb8f2a745032f9ad441e2737c91a111655e2627e78525", "0f19fd16e2ec11f4e7c135a27e3cfeb976ed637d967a68578ef9489f8ba47044"), ("290af5a8468c0f856647ad847a38b271621863d8e895fc312b42233877403557", "1ba35e4d64fecc637878c04a37a724c91dcff323f045e2ad70fbe7d1cc8aa2a3", "10dc19132d5e7b728f8aa68f32c875a5eaf8d98f008d8229741a56f870b9f695", "118e44f5a326d35ef8cd14ea6bbc6575264d40b0360121ac553fcb073ada5c02"), ("0f92ce15b5ffa1ac4c72b92bbb23751130d301acd1128d7629875d20d895cf6c", "2e35eb045c50e38310c5ef90acc473ee4d2926d1fcc5255fa21295104d2974a8", "22226655a29f6957788046208074a3fa0aa101016b3514e564f8d639c978315f", "2a616737b934ba992bbc512caa57a11e919e65d972d433b0b3366af13246f095"), ("0656719932ac0b59e7b549cdd3f605c11d6886b57c247bfbf3812105cf6a11c1", "25bd59bee61fecf0a82fc76b8542b61557e9a0dce30b4b9831a4cbe6ce0f06f6", "08787c0ea8c018285db4665eb585673aeed0fbe7b68759e0fefca8da62f9c7b1", "146ce7f09f3ca339613b769b50bfecc5cb5533631b7da59bfce7c49a46e535b3"), ("2001dba77d32b82a97bacef0cf7684b2740eff689e50e9c43c03835891a8c929", "01cd1ef1c2367bc46d1ce35b38a9b3e0f450eff5bb5edc0c2b0563c0993cda6c", "262aa2e0b55f40bb7cac077fd36b89c7abb6a1ea548d6bf1118b2a0e7f1d528a", "0be7393fe9d126d496e247abf6a7a97baac6c7492db598fb6a94b2c2940e5383"), ("1ebe51b7e2e9bc531e589579b27ee4b5817cd4cf2b365edf0d2d15b11267b44f", "2a49c946e9147a1db66d2bc684554f54f6d3a7932189899d8ed17b40174b6842", "2bb50cffb3fa6db633d5978df90ff77ec457af9ac0eac817636c3fcc111a0693", "090c729cd26badbcbc5ac272a6d464228bc0f789ce067857976b05c9fd325b85"), ("2a51d5130bdeea8aa0aa3f62127928417b017d1c8fae9e2fe6e9cc4d458eb6f9", "22733e1dc42048e5683bb1547ecd51dd6638784788e2fb33c3677613afcfce60", "23ab72750ae2e75eff0dfc9205f2278a69f69949376e9360402e1a317b5f4ed1", "15ec494512e2337c15430c1614ed563d26a7bab9a927b3110110b509543d84dc"), ("0e3a3a085189a3afeb566f3f63e13b6b67ee61561b15d1bfd469df6d39a4d80f", "2fdb89c71e06e4f6bad8b257b45a0c5681b4f94b7021e6a1747319cbf9d3fb5e", "0f79756c0e98bb1bf23135494cfdb250e57baa2a7c8f1072954779c989445b73", "01801335460be2a3e0671c9257debfbe7f182b1bf6b2a4b4d1583161b8343df1"), ("14cd4124f0565f40e94687f271a07569a8a55e73de2aecf64c136ed140ff36c6", "1c984875f9b220f920d8634a2902032eb395b99fa50516268461b7cdf0b20db0", "132e98f20c163daeba4d26d942eafab71667951d1612a7a1d973fa8cb118f0e9", "21ea6fa76451ebc742fa54741eb903ecc8e1ce8612474d7f38e9879078c73cee"), ("15707a9140abe27f52afbd5a3e4e11a88200a778b14a0acad01f6bbc8175f60f", "20d8bc0815bc907efe8f7c22c34bb1290c059b0e358a82240edbdc3813045bf1", "0910f8205be0cf91fb720cbae459fc9280c5546ab4dedf7315491a2cbcf1e620", "23bcc0df1bd792dd78c04c711361203680fdbd14283277dd2d3b413b22bfed82"), ("01aa3d08f7eace1404818c87d2e803743a7e53ea57377976d44f7df78708e544", "290bba183bc53561da0312dcbef98a78ace0abc16c1c47ffcbd6a48f3f59e21c", "1e064a988481eabcb599628e29f215fea6977d339c435e65ef8a23c2b4f22acb", "0843f9a6a68054453517d92a6d4ec9e9fe3093df6e46e53d3bec7671881ade34"), ("1fa013e38866998087f0ed0ee036b6bc7a90207bb62470bf4129c409577d5e16", "13d7cbca02148cad2c8a16436cd96d81158a1289a43bfc5bda51f2318cb36d50", "041e532ed01d9b6b3309afa68660de79aa8632f050c4c5ab3ef5650194cecb52", "1ddb61e65dbc8d179dc4d19ebab015f65064d64d48ba372941f73c1efd39ea21"), ("2563dc33f65b1eb3d7f2afe54700789e065416bc750967cb10a8b695ece25948", "24135999f9265f5889c456cbbfbc8ded74bb0065e85d9470bb41c857dd5e6c97", "03625f73f5e918f6541b964c12ca48b02996d9165380e201a67ca32ef1f79df5", "0df98c1cc0d00389368ee2eee6f39eca10262ebf792147dc75bce0035f191d5e"), ("0403c5b134d5c3effe2c7f91a6a4e8362ae7ff0b4ef9402680056db010c5c6c7", "0aa9a2e58346dca1c1ee204ee5cfefe038bdf6fbc5cda654e2f3ecd8b1b119c1", "0178afcf1b1dcb6390ca31dede5a10665a3e4417113ca8916705b2c02c2c2e68", "09a265378c38c5fe81413ba03db0de60e52ccb325be2897a2bcb656f34bca90d"), ("2bf189232e0e7a9cbedebf4257abbd2bf7c2dd58e86f75a275e80fb45d0de8e4", "01ab232fe2c5d28b6dfc86427fdcaf16cdb00ec30bf258d06b874c3edbcebfe0", "02eea06a2ecdd243398b1cdca75cd09d3ca14a3bff33216fa33a22ca671a25c1", "1da9a4408d9f3595d05a7925b5ab765645117ff9a7699d10343536795888d00e"), ("19f7db8d43118d7cf670a302e3c6c593ac4f66391bfbee2677c83580d00a64d9", "302399a8b067bbe84f4ed11324f78a287affdc0f83de645b77e4a3b906215711", "0dfcf39c44ba41fe11d876bb1a36ad5ee439b6b838c314a6e61a848265d0d381", "2a4d3faafecee8e8f55103839e4e5a2ba211920189133a79fd23450efe874ab6"), ("2f9b32f4e4fa726480757ff9feda56f7cff1483cd6b3ad50b4ae6dbad4e9f1e1", "29827d361564b6df92811599cb2345473a416cbbe339d083d097751c69a73178", "26d30b73d383c59c6cda533e9bd1f73435c88bdbe5c1cc853f5ee0b0bd359ec9", "0ec18e21b1978e05008e5027f5526373926f0146f19c7ee1dfc9fc890427448a"), ("12689b4ed6183a56983f0fd4a388155f591eec095e065f56c566a573440891df", "2ad910d4523c6c320a469d8e6138da8bc950644ffed72048c4a37d163f751601", "233042e1a29c450ee8d5870dac332b5145cd4bcb19b86c6a137a3a47ab2fc273", "03b2a304cf75d2925ab0e62cfafbf777066ea23e992afc0c5f48329024583e7b"), ("0cc81295356b1c402742bc5a1b7ceb52214df87279a65c937918bc18c0f7b500", "1796b8907cc1d1665aa7990e571a4850344497ea11640cb184c3f63dbfbfae5f", "28bfb46b41447eb20f1fa23cae8d89976b7a0790e95dc0309344f47e42706a04", "14877046d623e2549a69281f8465461fd3422f08dfe390c07c0fcd8110d5e895"), ("299b1f65d207ab33f9bc591d9b1715d20de469400d1040705aaea6c69895ad6b", "109233251ad9d847f72d0cd2b18f4d1ffc8ffe5657483a6af2346878298a5736", "2d738fbef6ac25c6826e92f59656f20036c5ff1d63c3fc8685f5eb5869a96625", "02f6d50996cf372f1c3d1690c655acfcc85116dde4c81153ddc87f80cb4f8512"), ("1515fbe4ef168a06315e0bfed75143cec9b7e0e2e082d8d3018a91fa3b70eac2", "27e754407e8dee131a5c64d709b2efce39017a5003785cdc82648e1d4e03d301", "2ab18f2ea0ebb95ee732e4c9b7f13b3a4096380967a80b8eb801cf956af6a8e6", "242e9196ffd884693201a0a41bc2a14f50ec7888c36be129100279c9935aecb8"), ("07aa16210bc107fd6066baf2ed181a96333ee11015bef75d0d5fa86e487773a7", "07203c7ddc74ff8b39afd83833aaf46d5e988d12092ea10eb5fc4931a485c012", "22a7e8a2bbbbd0bd9659f1a18db860149fe83b67d49c41c2b57ea9089f86e01c", "0f3db2a4e300f8d2cbf38a1038db0761fb919fab7eaeee970226525c6ae61510"), ("2136ed54905f7d5002036b062e636d6064b54f7a05b5b0733daeb4197f090b9f", "0db9a54d73ce2562cc788eb5c157d7cd5888425156636498b1ec06d60b4f8415", "04245a8a96d0a272b21ab8008733ffc00b741c014a4112560270bf5079c6f9a5", "068f0a40cb5f4f4422365bbc5f28a3f9c2b5e29af061c48c4a03009855804490"), ("2fd2ef83891467aef08ba992a0e8a3b894dd10af3ac9c05f63fcf137a15cfe47", "2da97716b2f739d072fe662ff740e193bb94b5af564ddb6ebfa565badab942c8", "08d932189fe194a83916fc3d064772167d6d3f58a94d2ff081579c6575fc42d9", "194b8861eb03201838f53d1ed7c75b51927bb249d7c082a19e756b2222e6f60f"), ("1ccdf016c719213f87f3139797ade62167ded428237193cab16d487c562376aa", "17592db0ff1317e29613798d65fd46439476134b7ad3e46d7c74e22fe34fdb2b", "27b1efd65190a194a1b69ce12944af8927755d110a0e03b1481ccd64be494459", "21c216c558396cf3bc2bbc94b45d8d30bebdfe2e731dd8657daafd9d7b9a6ecc"), ("2180522f9946e965c49e989515b007f3a4499344136d4b2d2a7c3c38d128c8e6", "037f8e4dffdb2bdf57830dc73f7d537c6cd615e34d9e94f3d629a0a8e3a5922f", "028338804d217bfd1f166f8cad375cb9d1967362a936fa73eb6e2e6753302b75", "1eb4c4b0e7244c794703f56e963d2db855023c4286d52e994e970ec5d5033c0f"), ("2b844a11050a9dc8d0a353b10c3f16802cbf5e03ed8172e33645860419aa178a", "2d3e4a3d15af68f508b2af6ccced41d7ae0096a1a30b2a2fda15e821e35a4106", "02a2afc50f4b35384b9a37853a975506dd8902e6204c2b54da492df5a1fc74d2", "100902715962ab92d7c876d384e676228d9c19ecc8cf11ec81c49ada54708b19"), ("3005ec16ecf07e84e68139924fd00c4488b6c79f48adc7cc0082a05cc05d9b10", "2e657fc6c93c3f8dafe0e1bc46181f8051e939a0c674fd938fed871f98f3fd92", "1c9b4657df435f1aed41efe13f0aa6349027ec8b0e31509a6794f7780a303b2c", "1a66dadf3df5f57e70bc83f1342d7d98b8a8a6ddfbcc94b51bf866a75df6200e"), ("2b5e7a3060629cf1c8bba33dd0830460f1342fb278b391459db826034f3de4f7", "23dd9db8ef4a012ce70bff7dd23c58ecaf858dada38d5ea66ccd4b1a41db0b43", "04b3aff6470a1062aef99c0320f5dcc3234db4b7ac52d9eb21d36715a6b5ffa0", "2af0ed039a17b2c1ad80804bf5468695aeae2edb351e509ef7d0bc7c958a36d4"), ("17553f79c4ed84c6c7c5bd7f21581e468af1494f55bfdb299c2f73f33aeddd3d", "1690aaac88429c76c8df0160aeca5910de48996affe0f052280dec3b50e8a003", "1f50a4f70b0d83b6a0675297afde4416ea20e20ea9370c11b0c204d020b2a497", "049f7d48207ec3425bd67e8c8fef6994c642cd56b1aa38268f356a967e8164a5"), ("2922099c0dce55140b51bf783e0fdae2e64eada4a0f941b2f7b3ede38ac6d4c6", "0a8eec166c3c9ff4bc9753141b6b4c0c11a39b7093c911acb11ba82837cbf80a", "134c3356ee796edcc84d0249f2e57d6d7e933280dcecdad5eeb720d78b5011d8", "16e1b8f42873e63f26efc86a8433cc7fbee48accee2299151c1e59605e3819e2"), ("1e3382b0f741849c2df745ba9b5574cfddf052345e3a89e71a84a687a6e5f423", "132cbd8cc8ccbffd49e6b33e4d050d414accba5d430a9ca462fb25ee2e0260e7", "08bd3675a45e6941371485603aede917f1304a97a5424c965dc15b0be2ba025c", "12985bfbfcd1de4891d709f20c23688f9a078d0aeef89370dd3f34e987105461"), ("2641bdb14135f55ecf389af599ef69fd5266a365dda3c105d13c7aeffbaf12d0", "04e5a30be858bd595f4888fff8098a6c6f33e01adfb57bddc00df9556ed8aec4", "0404047fe1b2a6dce9d59280f80655cd9d592f43321bb3415f089595bd82d5c4", "05eff96999c19d1a4f6fd232255eba21f26c68572981798ac7bc0c9317ade9df"), ("062b60ca00643ea9fccde3ab5e50a71c56bb4a40c57955c9f87807357720e003", "04683efee8b75773509bf5cba4675e0beb8ee77cf7e34bca61589db32b9022dd", "054364eb892862f98c59f9cc7e907a823431a2ca592dc186a03c82a30f24ea5b", "0435caa665d48011160d28c0a3ed7678680ae10a9e0ceea3f4f86dc4d002882c"), ("026e81b709bd574cba96e6caca320b4c2e9b15fc36fa766cc35d18c61726f2ab", "0a3e3c375155dc9e3155312371988dbe1ae572755895597db1368bf50d188952", "1f7fe7d876a626b6d254ea6c6d86b10d6ce5507efc9526e820ffe13026d7828b", "2bb9545107715a8c2cbaf33b2167fa4897a7a22ef94b2cda33487636348bd753"), ("24c62f68838af1f57c69769b18c78fd7ea220ecc4b68fc5c2cd16c265dcaa4c6", "2d7b0139d86cb8f8e34ad48c95dff709e01726a38a7d545293e33b7aa4258275", "2beefd09d1a6c3837d5d653fe977d4a693b95a490e1a4f0b23fe7178dda97662", "0ec8135b6fb4e594d310780b2bd959b8e22884aca8ef3df7dcfb3f199e90bf63"), ("06846bf6914c175423f9f4258d239f801cbb5018860f5b866a38b00ab4f3d343", "0924cafca3164fc4a72f6bb1909761feb53e03cf8884ac158a2d9e0853e6e739", "2c985a6cd4917fec6a80729293f27a232985a0b7d7aa244274ef2b4b104ac040", "266e40774d4e81e9dbcf2e9d07c2588c5c229b69bf495d7c39d4dae71410badb"), ("08d5ca71a3f19db1a9437f035329a58614133f5e9fb171db8cf34797e6afccee", "1c700eb8650049d82695dc644d1a8e47e68e9718d8bd5323d23c529d2d762634", "1b5ea77f2e0268ecb5d4f10a8b626a85afecca2d95391f83ed6513e6293d1511", "2e71771fc6fcfe8d4344589502caada3f2c355521bdd6cf81cf23f70fb6f6877"), ("00766261ce3f77def4d19c13409f1486f5041ac1d987296f8d966fa3036e01a9", "22e2f50d753140623d3c48f7dcea3b091258bdb71c0ce9e54e44c06c3c973d33", "2d914a02369472170447232bd07ecce1e3e518b665d76edbe68a42505d138859", "0f4562a9840f6a1b4d509f3b4bf18664e92d569314800deeda3b5e857a47e153"), ("254e201c22e4f04e03121d0807cb53b22a28da28726bd091b1c77b5dfbf0518f", "2ab8c614736b2488d2df4192dd90fbb0c98a005e405eea18d0c1c70fb20ba89b", "082ccefca0cc56c949ac58bfca05a5349450ba13593cbbb2d66f7fe00bbc63cd", "0ed0c5dd22ff49f523de9bf13b994860a295a60501f4ebe1ab834dc2759bb803"), ("255ca42a45c1736595353759ab8a21eb5de8733339b539ea5e4ae9b72b73c092", "1270db3210ea07babe6873982fbf937f9d9dc9ac521abaeec24e9abf8e1b8a78", "2fc13deec4717d8b670e23b95c924f6e087116803ab2326647342ebfb715bce5", "0a7cc27380723ab8be610b4e16171adf3763238ae71fd760fef104147a3d4df3"), ("211d570ca68d81b1d5cdb10d5ad6201c8777d9fc0e2be1374d7d335c70899a49", "2a6ea508ceb2ffa60cc97fb03f53cb3f0bdee6f41b03edce3baa733cf61207fc", "16f9af79fa30aef8760369fa4c1acb4c610e4533f332476559c3ae226dea03a0", "1b52498dbf429e664829890756f5fe882016923bcccc81ad7f6355864e11d6d6"), ("11d32cd2cda1da7eb17f6bb65b030675b7c4c346c290fce749255c0fb4b15594", "210b223937a03e3a12f30d05ab7915edb3332e0b974cd28fe3b3f21d28f91d64", "01aeb6508abd6283d65b28a6cfeeb3fbd5039142ed5069f7991f887f2846e800", "2780ea133543e7afc049a673f349d80f43cb8a6f9a0fa634306b616526d7e636"), ("0fe8cc4681b326da4833f662f2e605dcdb0d002d9132807cd8c96414aefc397c", "0997b5c449f3b9e3ac76191469dd256c1cb2e30cdb53968e3d8454ec219fcc9e", "10dcf01ff698b7993e2e3884e61863cfd15b8cd9c629a1ad1b094b8fdb67abac", "0e7d323fc19c15333cc6f88a348e82a046e2068a3e7b5b062afb8fcd01bcebf7"), ("2cc083b9cd654845df2d95327611f3eddc11d20f37578320fa5ef3b8a985169c", "19d866f04636a9b7d66e69b14e84481a02890499203c9d6a5a40e083b962e0c2", "11cc04dc970447211a5903a8752ed4182e23ca39e51beb4d86b65d1982174165", "06295ffd1a763ab47b6eed1e1d9b1184807f590e2008774777e3e1cb80d6ae9b"), ("2b4a97997551ac46e13c8964b900aa64031ae6d284b8354e64459c393b803409", "070990e8493356226dfc0c43999fbc08236f287a7170fc119c78b5829378a76f", "2b8df69f5d0aafab5af4457bbcd2ee1ea7869913e6c6fd2f10261407fcd3109b", "2c93f3c95296c7652ec32d57b9331c642ef1f72d8d642a60699d6fd4626642c0"), ("2868e80319ea537da6d186e9a387f29e9d9d72dce5ae9a7de151221da3a00386", "2867aa545ae45e85b60febc820065bd1d6dcfe991a62483ba085c91dd894c8bf", "2889780e4a1acb0348916bf762ee2325f80952682c9d4bd70a8160a0d4c0fcd6", "1001780f7c652b40610de35b3317c4486a94e1765623ecc43430759d2e3a2540"), ("1bd7ee460b9ad8797a3d46f40894de8ee63ce777a6c141fc900be78a10738c38", "24894af91f02a6584822190a4ba7b04665b773f5a9e61f43061acec9311aa1c9", "17234da2d71efe24344718a850c796379b788e306b9b3ace38c68c51156f5505", "21ed48572d43f6a264ae83ba98901c7256f7fdf54f30dde0f7cf08cbe7724ed8"), ("1ac40d2357331ffbb6fdfc219db8f0c39e023e56b434d6344e0a3fdbe1a8b62d", "235dc18ae0eee97de3ddf549db9d13891342d2e760ca88ac2c7ef1d03ece5055", "222f5e1ba9512e97978293fbd337b6da404b1cc7689078d0f0f188a59cc881c6", "21b4b7132bcd9b45f7a8bbb009789361cbdd7cf49c191da69700718641d037d3"), ("10e9b865065b77927b00c89697cac3000b1bd0f6af7fef01ce71c0bc727eb25e", "23719b483688974a2a1abe6575cc56a71d69bddf29feb02a827fbb45cdfa55b0", "1484f9684d9071b6d43e2897fa5a66b998191983335460de39e6e95ce71094e0", "025cd27f2fc95b873582c5c5c8738d038951ab7b0290ad874fac002600b32f6c"), ("21c223ae25ed4c066d8efa273072b7ba71ed5b7e0f242e8e27780d128b7a3e69", "1fef7e2539857b094cbca461a2be65ad252f600ca4839c917b1fba8be2739904", "17ebb985876ed1612c9905e00d3141fa76bee11b5357696b287b901b2ba53b7e", "1c87cf99b97874115fb1fc0ed1654b483af4c7c3e37232df60774127717dec7d"), ("0c1eb82dc61bc55343c4ad5c0d9251ec9e2d1f5128df9e23bb1bde2dd6021e1e", "152073ecd2ce4a5c71607235143c63dbeaa2ff8c6036812f20a72f65b1160310", "008e994b649a2bd13691cfa4f904f0b9718d7ef8f53a2fd836006b6e48cb2a95", "1ae8ce9ecd73f95d9105d47e0a70c446816f8d613f9b5822970c23bcddbccf95"), ("074878a0650224341c3616a427ff93bec8d21c0ffc01fe0cefa7356bd77ce9bd", "06f1dbcc58fa0fda9d178ce43f0902178a412b2c1ee9ad58eb91327bb1faab24", "259aa3b390077da16f05597a44a47e80de415c7c332ca3c2a89656125fea57c8", "2a0a61e0e550eabe659beb9efacd7c499d6d69559e1f3c3c649815267454e8c2"), ("0eb24638dce1ce3aa1ff89d2da9730557f8712bdbf64b17951dd46121c8b1b21", "1f65de47efa60ddc2004140efe4140c2688aed4ea56ac75bc129d87e7a7f16b1", "2037d0f68581b03e2e6d60a244a0d6d519672b94e223e24ba902291441af88e7", "2a1e2490d923d16cf80b4522d92d08278c8326bfc976483bc68ca3abe97e9d9f"), ("218ba7eaad129e44c3d0a2593e0184f43d0d1a3a7363625bc69b836d4455475b", "2cafbf4d28c273a7901121532412cc94ce0df9a73e9b4ba896d99ae9102c85f5", "26459bb60dca8fca81df1b83d47a1d46883c967be9187ba1481ec1ad71612028", "1ef8f041f359c780dd61d2cf038ca116bf80405e57439d4102d27d8c3c0664da"), ("1b0e7ec35502a01481e2b90ca29a371d2a48f65fcd98bfee71af9f21016f5a5e", "0febc52d34b5499d70ea1d7df4aa274e8069c3dce7733629e8a9afa837cf7265", "2745a64e64d1cfb8313eddfbb1b4654e729ffbe7be2f921129e2aac7e284b863", "024a4e46380e9bfb5eec98c07daa3826208f4836dbb9eb181e326d99499a001b"), ("26910f44b95d2db0327aa261d82b10ed46b4c95a5034a4d7cf8e870205d896a1", "00d3e8445ad8b08448457d1d7306912e2372724159308d1a081d1faa02e964b3", "2bae4aa6b4768bf0683ad2c72e59b375a20cdb258c7368f03d0c18b8fc49223c", "0957eb323a98498f98d8a8ba447b4e658cad80682e4daad336edc44a5462cf2f"), ("0a2eb334079b708bfc7a82c491608b0021ae36925432d9cb6fcc9486a9536881", "0a62e73c831092818ec640b7e363472839a912089348c76b2440ab7947883d3e", "1f630e60a44cf4f5c2b8a2307b381ead18fcc7620573208776beb33fd4b0561f", "1d45840577d18117b5ae2adf2404e530a9961f6ae7f2900653b430ea77ca8779"), ("109fbd936a02c8677ad1abc985be246fd57a455a3ff931f8ebdb8bf0a5e36701", "0452afb40d5d44280e8b951cb7b03a5818a2454871a3d4d3229a1002c4e1af7d", "0e51f4f14ec7104562ca220137ea2fe14a527362506a46efb823985b0b83a5f4", "1166424b3a186a9b1a2ea3fccef9a2f0670f9f998654900a6a3d3c52e0c76d62"), ("0bae9955e43b4c20e051581344b9b202c152bcaa419e90b78aa685c2408c35ae", "09bc4f55d4d2823bd68de3157c12ec8823a62ea5eee85fda571d19ab116a603f", "053eed3756e9d2591e4baa0792d7218ebe7b35ce827bfe32d2e016f121406745", "2b303ee4a165b37e7a8d37c59288bd2bccaad987311d94ff8067e9edaef411b4"), ("060f081ec1f70f41988357a52e2623151759213206154c6aeca1cec729cbf274", "257eb177808c6456d0e78b54b504ef25868c2ae2805b9f62d930060f09634eb2", "084a9e058b9aab89a10ec60ef01cba3e5a60784a77bf3591f99af7ff13a97fcf", "00b2718bc4cf8510e0430359ba50482936a879743905f3b6248ac188ffb58999"), ("28470c0b2770c9f515e5b6ddf439836659a7da71c54d1d38d477336adcd5c6fb", "217ba4c6213940a120bb337426e644089422e2e04deebcc98ff328d86b20e22d", "1200cc6492b9547737f54fc52403f6be82ac6ba3c88f363e1c1f3253d138b895", "305a97c5cfbbbecbb639729d5360cfda3d10183774895923952ff193dbafee2d"), ("086f921aeec40204c6579021579210a808faee7b564f84497ba4e8eb015d31d5", "014bc4ca78fc1eca9d5c66ba271bdc7cc1a1528bc7e8865ba5f67b72735b42ad", "24bcc555b7e6c8b2f418b690a0f257332c8b9d3a06ac502b42fc257951493ec9", "2fa0da0042beecbbd1db0cab6ce3127eb6f68253ac8ae79dd17fff11a5b58004"), ("1f164d776091e1dedbf764b56e6891c4d85867fcc12dbcced4666d22ac0db11c", "145a1c2f93e7079279f3c8d43f195bbc7c2ab7713986b7307630c041d369df18", "129c97667c82b136eb0437cf578bfe4e3db38664f52c386e373a8cdb59136ea3", "2fc6d0df9cc75ee8a5ad6722b79b65cb5b7efc5d52993972b074cecdc7eaf9a4"), ("211f212425d5dd48920a4306957f10bff2b4432bd4922b4ae4d7015cd9aa7f5e", "1e1ab5bfc46203b652f6d3b627f498235ba5a726e467584567d1a7198827c21e", "1e40ba3397d4aeae25ebbefcc6eaa4b0532d8bc8c22e3a18952186a209ccd5d0", "041100f1d29f884b6302b3ff4e08be3bd247ccec23597edc1aae4f7d55adbdfe"), ("2532ffaaa685f5da5cdb414c6a2329360bac4b70013217beeea35a5c2e4e4e07", "2bea260af03c0015bd5a5847fa2c9372a24624955d70faf4b4d8872d79326261", "1162be25906d5e98c74ed9b2656c5d3fe4e3858991f00e7d43d99fae72f30783", "1f40d0775162ace9338176f1b5fc11a442b9d056a2b0e97e91251a055428569b"), ("3040e8b97434ef6a67e09b7e52db13d0089bffe916b991a5ffec2fae02bd4566", "1dfc3fe83d2ef0cf2be51c6374dcdc2809367d655af01aadf0e63015be022b5b", "1d15979b2d72bf45b5cb0efc2a3e56870c6792813bdbe4536005c9dd32f2abaa", "106452b97719a2a2fa7e34c87bab752b0795d71df4263f034c5fb3607564b917"), ("05854f4fef0621c7b79f79cd979327126759e6f64c897a5bdd9a3821624d2598", "2bf58904bdf9a911ed2980471932ae27146e83a7a54d3100055233288f9ad1a2", "2ef895e8b3fdc6e138346427dfead57a50c2105804b732fcc57b670d1615559a", "1156bdb0ca46f3e37d6f4af8768b622ee80af8c59779c38af4b83bd38535d6ad"), ("09cbf5fe80574bbd2d3e4302392a62caa18d620bc93d8478e3fc4aeb36e501ea", "1e568d8f8df97359484f9ffd4c54a333b79d2f9df2c33b79eff96a5d33d05d80", "0d6cbc6e9add04bf91b784b53ab9ff7535bb446dbbd03f1704cea75d5f5860c5", "200e8d14f446a2f0f168e2673fd1910a327f84a17b67c64d2f9db8a19b6fbc4c"), ("0707ae6ab995c8fcc398500709232f528bd0c2f44a9151d0a3c9400cc884f995", "14dedc8b291dbdbfb678f53ec63f3ab5f5b22a4017de3a27b33b1e6e6173c8e0", "1ec8702d8f87f44ffcfa14edaa64f1f98d0a8eb02c4cebc3944cee446cc81f21", "2a0d19cc2a6090b5bddceb96d406815d112b0e4d71a036da712e88cf01a9da97"), ("29c1d6892ffde2747feeb6dde13960448882fadee8c13de229aa06673d2c1abf", "225577334e9c45acf8bcfae673478de916f99856869fb80eabb77ae082462826", "116ab19cd0cc717aa694012660329f6b4b430dbdf9c003eb11c306b1c62f6f6d", "1219321ce5238906c71d1850eebccdfa1da3ec1e9305da99025fe6176ab625fb"), ("0eaad5d65110392440bd1e620f4082d83988fdc1c4c98a9994dc23259f4cafed", "212d74f366dba9964290b764d68581626fc792f1d2a9dafa3af0b2bf3e7c5c56", "23fb295054adfb08abf0c590e95a5635f8dbf11ef71ffeb779f3185f979657a2", "0b8ee1423baa8c76030d3b89c1f64d27f3b7e91a1a0e0aa80277ee11fb5f9367"), ("1ca370199925496777dccc3bd7cf7404203204d97b47dbe7f7e6d0f5310f12cd", "14d81cc191e3579f85c0e3fa8ec6efad25fef06c5292098b70300cf2851bea35", "23f1dca8ae3ad2c8e4699cea86d74929a6b54bbac1e41fa170317513883df89c", "23731008ffe256d70bd10a35448d6ad9448f045c0b671fc03e811fe91328dbe5"), ("1961e8f781ba26fc79bc36506bd0d75f3e27891cb80303efdf4bf275cbc023c0", "0ab276a4f9e4e1ad330dc7800bc359db47d71bee3fee3b3be68c9e8ef27dc8b3", "0c844a0555a5e5ae16bab745fe5753c494cbf265342e0ff36ca6a5d25fb26f60", "162321de3a16a085ccabaa556899067b161653fb6857031a567225d4e0b6f921"), ("0e122d5b6c56a72f35a8c489ad02c0c1963144ef21cfe41250f740966d5d1d68", "1e3acf1c85d24b664d5b24c6747f5e17e4ac9fee543f3577a40ec3ca2d191b2e", "18b385d8492e8b90a8779097c4c27b468b888cca6a8c8c0ab30c23e0761eca60", "25a2cbbac281bfdc915a41ead4c3c2f4172ab53be89e276e8d3785219738338f"), ("1da10e3d3da4d8db4aee65c9367ef7266a03597e03da34a8b1b9a8b0f599aeb3", "284767f16c1698cbcd89befbba04fa716920f316572188780ef9b024a4629117", "1159b6de5e332146db07144947184b0d273f421e4f8321e19b61d3d508e495f8", "069d692a4acd7ed1bb81f9954563d9a16b0dc1c51ab9fb189c1e5fa02fb66072"), ("29d79a2cd8c1fdb074778588ed86110a6802f9b4f3defefbe40743e62484db9c", "2a7ac465218f9973b483801b33706c1b1d94e8257c14fc629f394efd0850eb90", "2ce9c0223b5d59667998090813ca436e7eaba67a29d3f2fdfc2fc75bd83188df", "2d2255718290c435d11772a145b5e50d87925166de540aea54bfa3ae52a6daf3"), ("239abcd2c0174463a6fec8b190f229a3d240479f71dd928b9b9edb6202b51688", "02f019380e8923fc657d1e33f215cf30a36146669aadee374109add23d0e648b", "018987906496b76079478aa895654f9863ddea9213cb1aa875206ca22d15462b", "228f4967e029dbb89593b6d0cc33153dac95f339ba1b0aa450776fc01833c715"), ("0929a7f485609b4f4d3f97667ffd280f49746a2cc0fb97cf9fbc4ca4cced0cf4", "29639561eb04632c0efb95073d7671ade49f5af312077016a2fd12da534e9b6d", "1e4e591452f623f75602b054cdb1598e8e9f69f55e2e73595305f13ecab785c6", "0badb70b922a7095cb4e4ad0d26d9ed7fa3dcd5f9ce195afb85a03f920d5f5df"), ("0ea7fb3aee3602d423ba65746660433c20f073c4868c5e99991c320a6cf7cc2a", "0328e4ac004967457c24e5dd3dc3e1cb44d6454bea6d53ff2e082913d9712140", "23958e7baa74cfd76aa54676d390be2d41ccafe0a5f6006a7a485ee2032b8945", "0ae9d96ee8dd6300000f2d3fddb7576cdac62987e57f270442464236d8f0e6ea"), ("10cab6f38500ad37c10f78b510781c215a94d23230ca5a975ed9444c5a67a9ba", "1baece65afae66a07e84ec92c93874f3b0655b20e0baef7f26debecc562a1be7", "1f22950feae3b7f370a0cec34232df45e8f1d136cb87d033631ad09e5137e761", "08a3f4201b106acfc330e6214238adfafc5e10ee0f56f4234600735ee2047f39"), ("212f6c5b3a49d43ef3692a9f906a2db7fd5cae7c3708e1f8e323eecadd264e0a", "216d25509d5e6214198cd7db4d0830abf26aca9828b2cc2ae9239fb3bbba2b8b", "21f507765902ea8da720b499b4dbbb869763ede6d78813fafaea9c7ad15c3fc8", "01132225f0c678e1aac9dc9a6b1de293ad1d4a70e1662f84432c8efc6439d02b"), ("01ea05456afac648730c6baf5b9d0362920561b3671970805f63dc38695aac5f", "255e8c33176a2c6acc1efa3c95e30a26c4514581b3e5ac7d5c41e3d725a886c6", "124e692df26a8620a4921c80fa484c88f28bc25c41f1424517118916bc786b4b", "27667ef054c65decc187426903e7a4f813ac7c91ec13c8fcbcc53d289cbcaea1"), ("1ddf19571715d747aaf4f9f07ca246d7f26448748e033ce692d08e42ed5e3e22", "0f33aeae0b417f57d798c32ba2776538be5d18c9d5658c3da340394bba4ff8e3", "1c52804d7a10756451d85695703b1b8ee0b3797b0fb8098ff27167d2d7bd52e1", "03927c7907f79d87ad7cc25a3dfdd25205f4d993f781ba066e89e071d7ef69dd"), ("06067fe6bbb3a85f9f5085b94b2f8317f1453a7f481fb4aad0f8de3c712e7ee6", "22cbb539165eb6be1e85914a68a676e83d24c09637e61121a3f3aa059ba3628b", "0da644649c9b34276855af3832fae568e21496c2bf55029cd609693252dc40b5", "05e4a577db8fda1ab847649ca8854fab2d487dbd80200ea26af5d86d20b456ef"), ("235ee8883b6170f3b4ab10bd971b156d15137a271bfb9d8fa72e793f29e3a29b", "2586c9f0b9b28b51981a7d708f418ada2fc9b0bc6b3f3897692b530615df2087", "29ed03f0bbb7c3d0f1edaf001e2c287f1d2c4c8a179f80f1bca3c10b6cbaa721", "2e80c124c9b606e384624ea9c688dc64f9bdf7e1ad9a1bd7673c85ef571ecde2"), ("0cd8fdce17dcad90b239dbae24d7a7bd61c4e7530ecacb7723d2183bdd40d6c0", "1dd29f68487a64fa5e3f4096f75f05e459d734521094b3e219a8b7bdf4590e77", "29843e75cfe99a3e13e24e248ba7bf2f065b17d6a9fcf4b8d3dcf5d22d00dfc0", "019b369e53f65304af0d11dc54ef60a93406957b366565257bcaa45c0d0aee6c"), ("13328c0d3403dd166bb72fee8c9efa9cdda61d54d63cad0fa28fa3d388f2e81a", "2e5ad60c09f424ffda06ebc9301247485c54a3e911f742e49acbfb1b56bac482", "28ff3077e144d6daf2fd3d0739edc4808bcc1e089af88859f795f8e1d99e0e0f", "2077e6804609dbf99682b87b0dc7c45a547edb193c3f0ab00e647a46b2c61fe6"), ("0d14a166853a427657d011f47a2e4579552abb682d652451dd63a72716048a47", "0cd870ecc18c789f70679c6ca5f1f96ac16188c98976df02ec24558ead177faa", "24fd7c641484d3ab6ade14863e313d2b82d2d2615491d4ddcaf0a348bd39d89c", "0593439fcfd1b1390dca12cb50c0da9f8e7084e4f3034f13e3aa5ddde95e007a"), ("1aae788be3511e4597a98330752aa1a71482664777cada8f9b99f54a22c54154", "03c9d417eda3033f4576515c0facf5c9ad16ed8ccd5874c7d426d1222578a166", "219febca71529dab8968f8f9b154b5c4a44d215f46be1171100fff8fc6d098de", "27a1f3485216f9aef57d61370d3a182cdfd3961e79eb267b15403c13a45070be"), ("1e5f1181139cedd27d8a60afc73da6d31162f6df405488855ef370ff86672b1a", "1543d0a2aaf64f31671b1716d77a2702f85fbeda81a2ad5eb32e49837be88176", "03e4ba4ded62675f166dc2e9bf28b6a8e0a71efbf28f218ccc0131bb968dffb8", "0ac874300bc843f75c71487592618d7dccef9b193805b9b995bca26dd9492c1e"), ("0c7b6da6d19baaa86b11537bd0bf6ad698a267037d4b23678ab006f274ac3c15", "0c3d6956d6639209036a451e5138aecd91661d863da88c1fd3cc466afe629dc5", "28549277a4c04cadb72780438d463d492f390f10701f079adbe2f95365ab5b58", "1d2c4fe14e212173c0e5fe29815bce340df69aaa4c7f7d5957e99ba972757755"), ("1b1cfce6e03b11a683a06ded7c80ede2d0fff2289d614b77fe352a9f4dd2fe81", "26eed7deb4d913aa8962498bde02b38ee7c15c2899020c714cf46df268417333", "0c24253df7b4b2bb027baafdfeedf851988b5eca6add8d4de561053cce3f8721", "0d017cf45de619448fabe77760d779756c3f4bb72306ada0b2e34244d3497c31"), ("083d1f9fc3c92b386c78bf9be5735222c659724f844d08baf4e4d82df41e393d", "2d68757d169a0ebe00e6215beac47a6a3ae4a314670c3f380f782eac82c20324", "022724d5194e04555ee527814206ed67b94a81deb4edbf6908bb046ceecfae57", "2867971fd27e92f3d453dcbb22c40e148f70dcd9ce168eafd06dfa468b3a82a5"), ("0916f149ddbb57c64e08382e19f716a6f37b9cf2311e5cdc8ab4007a0682f6a5", "2f4240f43db718a3e5764def592d157927748f41fb71d89eb88e28de4ab859e6", "2e04b209ca36a0295cffb5b4c74f6d5ab7af0b546d8338a2e70710ffd6bb484d", "1c38c15e5fb743a71c687e91afe9d55317cc47b9816194ff63a73037172bf513"), ("0545c54eeadc9cb1ee2141f77c0de52da3d3f2d68277faa1fb55d18d298c7e1a", "07e3dc13039d461c9326429c3aa481a59d4ac17c52b226752bb8bcb0cdb3550c", "17df0159392f9f4d89feb9aec8680f7e086063483a15be43cc9b3b5004e93576", "26cd6424e2fa7f94ffd3d05bf908fc544c9f5ee8e9b37ee991b4edb646f59652"), ("1fb481b14e1b66569326cc437297663072947034e272b9f0361f7fe00fa6b636", "1651272fb9d5c9472fd9e29668fb6119ae9dea3a13208ddd35cd4f0bcb1894e0", "28397a52129f58e6b5a67643813f34a547a2844bca0b46073e86523de57c0fb7", "29935a413ab217b661b74fd2b51de00bd473ed225e3b4952b4ef05bb3f99889a"), ("2604f14bdbb5227cb996cf64f61a225a15174faa0c3e460b35a5e288edf8f580", "05d88a4094fef252e11981961ec98b47b50fbcd655b7f2ea647e085c7da92faf", "00dfc8a3db693e7f52b47e5d29016eeeeb2f83238c410011507fa14efd532a0e", "0a26d57cc687b6939afcd4ff1c38249d541e59d43c8e404b3ea7952bf78f60f7"), ("128d3136fdb6ac3f97bce281d3e47cd197b8f64f3c54a8927d45caa34a9d1a57", "09b277a1c7f0efd7722bde34b9153acdd8b3c3b3c92d89b3ae90dd9f1077f0e8", "08488687b2370826115dc12e26864b93d79a720ca8a9bc1bf73390e007689100", "10fe5bcc765a53171eac0590eec92c11d7ae7e434bfd71bba2a4c26258f22935"), ("195b52a4d1403a567a35c934368f4c7db3c49e6f727b0f5e8ffc54ca70c9679d", "00afb3d1f7347088ff94f34dee2acd0289d84282c96eef3a602d22d3e95c53bd", "232be8dbc590d1e51fbd2cbdf71ed52db7816c256a4fd19677f98704640e8321", "258a4784c78630dea01335610fd5e698dd2c0daba1c3eb0c3863cd9e03457462"), ("2c090eadcfffd8b12e4559de16cb4218443ac2b16cba7737c5d8d2d969a946ab", "184b404c1bb666820cbf094b0676e55cb5b915057c07a11c38fa74a621a6d733", "07fea6c344cf13fd9b0083747ab30a3346231b0295ea4b2ab0e8e0ae54908c69", "02f9be90030b199827251194346160414d46ae84a4fef1ed2ec27431fa102cf3"), ("1a8ced4e7a82a16cb9a9d004e969cfbb514e483231977200d94f3adc25bf03ef", "28d3c1a67b1dd3dc993d81d4ba9758f226d5aef0ad3152583da50e0039ff4355", "22bebd0dec1954e57e0bfe073c94d5c7d5b81e883a6f0962b608d559bcbcc16b", "0a4bae5932f9f5a9f8b339c29c0d4ba52984c01945819882b96ec4169584fe55"), ("2e6da1a7d4f18bb0a82cb6aad940c2aad0856176e2ea6b18ac22f6fc8019d925", "174beb41e205e33587b6ed15f733796ff9635b6bc6aeed6682828bd098f3ba5a", "119378b8f4c30fb0831cbd1f205bed63d4bf24434dc37dcc4027ef679c53ec5f", "26517919b63112a91921dcd98f12d775ed133863e10c78dd4e38530c3c49ab0b"), ("14302db93124ed037aebe7250cbc9aa02e00f9a17fcf2e97126baa7dc28bfd22", "2838b6447913402f48a51016af46e51f3b5cbe120cbb249533e69071f1bc5433", "2fc6d2865b2a6300af201256d825a4323afe54bd67f3987824a7de78e16d3df7", "25852f76a3a115bc2733cf8b0f1753ba546361f3df106e16b9e803ef7b22c83d"), ("16fafaa668ad403eb6faad882b89d643a11b995cd8cc5ecbc3fcb7a359379d8d", "12b3840210184abfb5bdcebb46f72b6223f55018463c51e98ca22936dc874f43", "1f12bd5dcf24455f48c1ac8fc624b1c42f2dd07b24266353f106a0ab004f5052", "237c9878e5c9e200e000d7eefc94d54136e07159171d6971e1ec78a123b7b082"), ("16c75808941564ee6bad2dc44fd24f90b2f0aa4fe2e1e6bde4bb6f80703eb702", "0bc4e33cbca30be5711616763a60d3492cdf5316a114e4830f59d4c6dc01bcd1", "1cf125d810f0c8fb154c7f53cff8e302a0b0ded5738ebf8ee5846f8d34ecb006", "0a546935f7a3f6cf9103641d2fa677d55c4219b169d71022ebc772057d7623f9"), ("20b55ae37ddb4926e7729a665f141ffe9d38e791775d43fe9df6f54e3f9f4bf0", "09793b2b6392ca3e7fe13b80f75a7fc2c7360286befa9b5a465ee2bcc36eed3a", "2126702faf7656b0895b0f9b928a2d8a8fafead4ce591c3abd366200c8c99fbb", "0f8ddf74000d8d784d2db9372a58b5ec8cb8f0894632205c1ce98e5bbffd84a0"), ("0b30193a0f7832667ef5a3ac38c27af1bd94b6563a3c0795e89f40c194d89803", "1520be593b54c10e7be468043d2736cacb2dd7f7fa24660261f9069fffca0447", "02be28dfd48b3f39e15b6cfdd3666408960b108e671a0b340b02cd02acd15f1a", "1392e08dd1ab9d50a53d9488c941538880bf9a208c6ac60f854a08a03e9cf66b"), ("124ffde57f5034a754a981b677015507be3d3f5698b551dcc9df5202d6cc3429", "27a8aa557255c05810899da5d9d85c7af365409b68806ed96673d95fc9108d94", "2d00607543c151889c64f047931a5fa68d341b0f20c305d8e27916793c45c92a", "1dd381cf88017d0fd90ae3c7fc15a19d188f3d0200875010bf1a03643588c19a"), ("054684e44f938806cbe40cd926cd07b7a3fc4632dc6b81b249e31100b25e36f8", "00ed0e283bd5b9d831769253c06c573162460be3301382403800a5e02c2c8cdb", "26ec00990e41368637ece9d9bdbfd948bfdb85ce5a51c48ea8ec771c4cda56c6", "148953c87c9d01a58fb3177930503ebd595176d2a844df0e5487318135408756"), ("1187b44ee2052262e5637a28e9f0507c2a5a88ee0149efcb5ac35cc86ba469ef", "2962a49ad713bd75ed81329f13f111445d0ca9abc2d42d195c00348f291c1ff8", "1983330a810628a99f21c6da92b8fc68afd1b3b8fa6b23dd93d26dae0edea841", "02ad24e967f622ba7223130e1fe4a654bb34fea0b7d35fb2d201c7647ef3115c"), ("3050601279f6974cbb1fa79b477fc2b75012b807f24a490c5366e0b78aff9f0c", "192a868d3867b3d37ccb04673395e1cbd3883dc461903b1b8e5585191ac75180", "1807f501f51508d842483f62820d38d518a44ab3c87f6a15b7fd33661d6d4832", "0a003c18f5b854f554ba79d9c3d63edd350a702ee996411ae82dfac53594bc22"), ("21ec786760d88c94d0aff561a5c613c1d7f823a542c94e80f685c9d27ca653d6", "23885622f87a4493e3a5de238aeb99f40b5ef5627f18291e280bbdf3ba7d18cd", "03fdd259806816351674d23e965cb58286d6593a9acb062eabbb53a93df0a531", "0f438c12859922217b41b60179bb1c6c37f4c651ebbca4f5808434101a21344d"), ("01bd77a056481fbab779a9bcd4982f09eb06c004940bf2e46ca846113fb3009e", "28797b8d47b2df0856cef65571ed177c3762bda2509c568e65b8fbb18e094f73", "0bead7902d63b4389fab6264c2c8292b8fd1353c612003886f9188b284041b05", "16c3830ebf339d91bbf330c06423d63b98d090ee9e296082840d2057f544ac64"), ("13f685ce05d21d7d77b1496c531ea9c5d69fe569d5d02a2e4a471da1b3664d2f", "2527d41b0882955bdd38a2ffde34767be61c178744af7b7428d1e296c0bd3194", "00bbd008873983083e69f3e86c2e3e28457cafa3734e82b0fbd9280122feea34", "136b50cc25322ef37e2d02510af58f693da7dd262d0e0682d26a55cc62cc3838"), ("277cef6dc2f0d69b3cf933af48801a45fb7cdb0d974168866692f1b2d63cb505", "00bf482f352685f3633f0d19da630e335354f4fb0b1ca99b09dfbc10ed8a2670", "0b0198648035b93ef6e69fb8125ae7c107bf42aeff69ceac0830c5d209c42500", "19cd06ff069f1de44a9461902acf52433b7d0e22dda2428ed9f70cec25846e88"), ("2ce40039863e7f9f54772a6951941a167a1cc18ae0e7e54bd8a400427ed545b9", "0a08d8ed4651523664c18129006000592a90b8c3b876cc68a334cab7c994a7d6", "2139dec22ef6af94cc49e0d797ab8f7c1dbad6cec6927cae5faec9f43c6211d9", "0d1a18adfeacc68276597b6989a4a9f8d6bdf53fa18ce331a0a50dddf17a7769"), ("1a5a4be5070d020408a30eb8fcb6e0bf41e6e10dec0a702e5cda937cddf6f172", "10c9cc9af529feccdd01d9ed5506c798c7ab51af7e7aa58ebe37d2070203b44e", "07eb1343be7b1f5032929e878fd157a527d587a50237c0721a52f3afa40f620b", "049ce382bb6b6fc7a168559cb2d53ab59e7d382d2397a1537dc10ab02feb80dd"), ("2b7d93c345e6907cc6c1b3ffb8a44b57f7df5fae2046bd723f6845766555724f", "2c98d8320996cbaf6b53273002337ddc06fa1a4944c1a659b36775dae603fa44", "04889ade50f3e7a27d8520bacd63e9f3f62fbfeeb11f365da0075ebe24b2b40d", "109bfd6920864cd5120b5b8fbc07f73a631f264517ba794e688a6f5f60d73d04"), ("02861aebb36625f49ee783e807b659d0f42ef63c3d5f1476f8a3000a7f73fbda", "19547a4fe081a3ec8eccd2638a1baa314e9c0e6c0ae0891b3a19363e7ff14a3b", "224c4d70588a687b98a14c13a35c93a4af7cc1dff1d5323ae29979ca49ab2bae", "23df496b5eadd7e42138e79e0aa86ad6d65621da1bbdbe3f7f2149d9032f97e1"), ("2ebea355fcca87048e4e896d825bf4d39ac5d4fd51fd2a7269618d7f8dff86fa", "1a38d662fc5d63ac23f9744990376e120cf65fdb27191b5dd3c32292c0123f12", "0a9c337c79c13605a6e4732275fc9bd597a9d2fdf27de7840d29594d21f60d02", "094b5b1cdbe7830504af59dd9579ccc19feb05deabdfe59d85139e053102180e"), ("00503fc573b41071ab05fcfb819f26e3270210221da6136c1f0de62e681df824", "222cb30d1ae2192732cd7e4de7398a210f5eb21d16230b3dcdb156f90455d95b", "2d703af6e8247eaa9eeaf090841e202e43d63f0c7b587dc75cd9c0631891fffa", "24569ca0d52e642d6dec800fbeb891991148e2569ed9e13c23faf08090691013"), ("026535c3314fad688133f318be5c92f4816bc67f6b9fa22a7dbba0a0b7cf39d1", "225af89fd8de6aa0cc91ccdfa6d364093ab53c38975afefa7bc33f6c97fd1b56", "22a2e81ec26f00a03779fdac6996ec03c623e323d07b2f7e515a8e232c8da856", "119c058eca9b76669343f0b33b479474d445572e29475be277720fd587287ce4"), ("0cd4968d34f563b2e0f7246c8c2dab0ff1b7ce31aee5a2a5f4379dc64e574102", "1d4278094f9d6a36a92b816a5bbf8f66916aa6f7cd176ae3aa0d7103b48561a6", "00b0017727ecbbc993fa98fae8fd283dc1c03033b7ad236624451c24102d4a8b", "23ed57a5d6214729cb40391f7d52f51a4f4cdd8dd881290d54fdf93ef6e0b796"), ("0fef5987e0c52b6e8c6a82daa4ba2047c7081d60e934ca40f01962dd2273c7dd", "02d9e6fde5a4884cb59fcb130b55a90aface887a384b118612de7d48030408a8", "231a51780b22f50c84c9b04a466a7d780a84d793c21d7bda2c3fef94ad81ebbc", "0ce63ac3e4ae0692d57319921ed444a10ff5274cb0075dd78b48e8a974db4cda"), ("2aafa376179d76afd4d214282702ca31120463043ca4e23bc94936e4f9c529d1", "19e650dd5f81ee8ace07ffe455746b735d1ba6b1106fb57375ee4933ff2a893f", "1adc24bb5414a32db2942d9bd5a1dbfef52c701dfe15ecb253cca3a5c72e5219", "2c79a340ee122a869db49c7d53be1a22942c1e9b6a26bf8a6db7e7b0be7ceb5e"), ("0b927f76a56f89a5ba4cc53310a7a84158e1ac4c7a017de6ee362163ec465b93", "133866727ba5cbd0f0ae17c7590da1972691a4d9d3d7935b19bd72172bccd3ff", "2dc06f9437c456ace21be7789fb6e865e529d5a3cc07390effc64271c56835cb", "0a80b9390163cfd470bc17aa872a3359fa21daebf66201f3f565c2a16045fef5"), ("02c30466f6172cbc607b5058b7dd5de50f5c432dec7d3202046d095b4e88d60f", "2131c75895a4db8a569b3fed7e8f2bd81128ed1c7fe9ab4baa7b6559b56c4322", "0777712fb82dfd8c32693009688612d185f3df239feeb23df278f51a9969a58d", "2b9ac09bf33d451f38217d10d775b4500e69cc4084183bc4115a5681389d942b"), ("11a6211516aad37080cc5026271b66ba56bee563e8173a9dc46a238188796179", "048564171c77b7cea2c073e3ff099469c907bcc870d781a5c2a013290746a87e", "104f928aad4ca79cfa629c7b833cf18d1707332cd16ea00367d68b2c46928f26", "2ec87c7eb15b0be73068bb8c8e50b35cb20b0b40fd4c0e99006ce27e69c947d0"), ("26b431428c5170b490b6b172f815684169ed02f8b9c16e253e7362dd49df9ea7", "200c23ee3cf60d3f98d680c68a7ba8ce669dd662f61c8ddfd7c4530bd9e5a9bb", "2148a24517d1da59fba5e3832894ecf37f0365d4112f93fc880bd4366184ddbf", "2db27443775b14b47e0fd03089988746ccc394dc98188b8ae6e1bba19c99e9a6"), ("17f77acdf9266a3923c106158f462737bc2e64b48340c5b37132d8d28ffe1ccc", "2b9cec9c0187bfdc3453573cfead7ebdd4555609344624eab0cf14cf94e73ac7", "1f8129a369b22634bec48caf0d1d92b742f47d75a86d0b69c8e20e18f7b7263f", "20481dc72a0ba831b473e13f7dcbdb08351adebf479e406a2da07b890009fcef"), ("01216300d9c2a618cc5f2eea6c6a1670942ff8978d8d3cf2fad9ca89119b2d59", "0d849088e01a2c38c9209b8bdfb924e912a96c440a078361f40950f77ab14f29", "21b796e228ed242c1e385db39b5012df22f52afb99259fff342b0cf5c6f11529", "2779eaa8ae30cd0545d88b5a352e220b310ec52652b9efb9ad4528fe8d8d6347"), ("23a51b5197ae368b61da24023a77e4f9833748eb652c0a73a6b3245de871e8ad", "252050819cee12fd2998b1f0289e3cd9d17fbaf11601656c8ed3c8b45373c898", "24ad2e8595b553bed99b2b5e4aad3c47f71153373f520b6be36908dd1a614e5d", "07ef7474eb1ddb0dbf8d45b4d841c9caad2c5c8c8dff1362f6a993a35e44cc78"), ("0daa3ac37e3614376dc46abc17a6f86a1c7b8d9cd2f6fc3938a11e575e0cfe0c", "2e237067c3dcfa478a67bf3109e430a067abfe9f15a0613131121a4e90a6643a", "01daf239a0b8ec007d7609c4f4d9b08c939e0c593bd65d4ccb4d0e5ff13c3fd4", "15f55085b7dcd9b4d84946d9b94db52f7550f4cc13a4689d14a72487c52e65a3"), ("302f44fc03d8357b26474e11ec7c8396cb6ba56511c5d2a65da12aaffd33533b", "2b840d6b6297e5818dac767e34f44849554f11c6ec672154bce5f2db5e1a4007", "22b2d63a9ffc82401673d04f0b19c50c7f19a9a184690c9cff38c8933cbd9ce1", "25935c8a3868ea3fc769dbd2ef14c65e407d58e33f867ecd37539eb55cb1ac2a"), ("24d0dbc7a3f20f1ada158bb165eb880d9b1c73d05dd33adda05b920d4ac9b996", "08452b7ad052a073870918f5d654f360563d6a80b35365b9a34e530bb78921df", "14657c6c0967e24324c031e79b75d1a51b03a0c2653c930abed096ac5deaf07c", "0b601666274dfa398ec25dc7c9cc5ed4e2ed677cd86ef329070228ef64d08cf1"), ("0aa5fd11e22df31cd7b9a90c86438ae6a44f61c2a5dff4eb4e29b6c6ce42e49f", "07cbc2b9e9866c7b2f3feb65f346ecbdc25258f0a484a17b663110166809565e", "0522f7078e808e79fb2349cab1bf4d6d41864120c5429b192c872969bc6bdff8", "232d727685eddc4c7c7212fb96a09583afda93fd7540ad8654e5930f39a30662"), ("18989d05f2974940f8c9da0e7843c7ef32eb7654bbdcf43600b9df1e93a161f4", "0e82d06baef9aca7fe9775ace994315f09416d9b7426eb72bd47de4cb6dd3793", "10c3ceb6867ba4b85ffa01026a628cdf32977e81770cb18bd31fa4ee1a185a38", "1503bdeaa8ac6fc26b4053500852650a27fba526218eb8d3e4fb29feb9550e1b"), ("29dcc565242bd64d12594283f5b05c3a96db8f6bb4d8fa14a683f7d06e1597f0", "085b7726c228ff299af1546c26daf0d5bda2379bd0e7c51c7bfe84323ff54386", "16878769a518db8656085cc1c5d374244750a9547a24e3028cc47f0fe270efd1", "14819cd619f6a5237e3412c83efe44955766a0cbce33d216c58bc095c9011065"), ("08423664dc067f55e9330995d67f0e7dcda1588dfff174c80a731b52c79b83ba", "05c4713332767c05ca86318990b7ecaa2e102213e4310178738304081c706c58", "13d9b16d361810329f43f3ca141a803e8c010cb011d675fda4134d5a6c209a22", "1a29085bf75d6249e16ade4efe99a2b138a53cb07fe3712dd52220e2fe5958ba"), ("1f2926b42f8f43b1d9027f98cadfb3bca6334efff8b706f236e2651e16bd14d4", "1c17e60f55b442755b0f9a3fffbb52c040614a88fe9cceedc0cac13c39810bb1", "18125e9f730f0f3c4490cf3792055620a651732349923ef435000b3b635c82d6", "2152352b37a85b6e3c394f013f4adf9fa1cb77c8a6f5d6e223c4df9c944fa866"), ("15a5bb87cecf7497d6992ed8ea4b8016f07c92ad3a67cd4fd04e4b358dd5b366", "0dca598c53a0070548c9bfe007b9a4cf7b64d65f955a0dd54b6313186c71947e", "29fe50e959c8822710b0499144f51670fd84ae5ca519ce120e8b5793997c59e2", "0ed615bd9a109d95e3d2d9cf85c49818d5fc3752b5ff9acea84cd776b7acc61c"), ("200d85d6fe3be4a3dbfef25d06dd6ae06c753835941353198bcae5b1037a151c", "2612bc85a933c7e4d05497aa4d700f0e8e4de62f64eca5707621d23ba6dbcdb5", "252f192e5cf6c5a9891df6233198332cc7e393f2086d465be6beb3a579668594", "0c309a61502295a54095c3bf892a6398a9da1c7bcd753757e7cc4eacd9dae072"), ("097606ed36bfe1b2d300fd824d9dca7e9eae76edb59f29e7fc205b880b3099ac", "2b5f9c03e1c17d03a1607e8448129c8e8c88409d086276dc8be461a18570fb13", "0f011b106a5729f320281eadcbbeb4df851ee2cdc020d19d3e3a7fe87ed5fcdd", "1f8587a88cea2f4158fa589b217eaf2864b714239de1a882f245421d425656f9"), ("293de8ce3a0115519f468d19af6c220c0a73acd72125dfc322e6244cb843311f", "30320dca81b271c0cd34d6f25bd60a3cd9faa661ec02347a7c3ec2c858c4b47a", "18efbdc7db899046a2a658678a490ce6c46112436257eb9f16b64d37eaa1a039", "2ea6bc2e54c3b5a1b26fe1cf84123a69554916c0985b15fc28cef88ebb73af1b"), ("22c14617089c3433dd0a12d01377a4106d0d227b386c88fd84995a76fe9b5e97", "00f4c63be9fbed9d287d8723aa359eed349bcabfbefb8f6038de6f9fd6bde89c", "2d425982231e75e3d1f96dcc7e1a38f43340bece4f3de7c6d51c0bcd891f7af5", "0ecc01a156a299d0755da38d55186609f14200ee1006196746d575dd16112eda"), ("0c4b8c2f10804a8444572f0bf6c91b8604bde95ea7982e6bd2c660b630aba144", "1c97fdb26a6076ab5b8be2584e826d291768fabfdcc61e82237c7c091079eb47", "09db628f50d5058998c9637f25dbe2948a2d477a90b3b830e500bfde7dc0d5ac", "0d268429247f7fc342f48b9070e0045a60c583d6cc0fa697fad6460fdce8e0bd"), ("243f13f921f4764e0304f783212726e4c8031ef1d39ca5b692fdb9a7cc3ee0bb", "1b9056546c7e30c57d4a24206eb882d656f3495bd578c939db282265fb104129", "22392abe5ed02fcd669e7a34d371988cb107c4dc411becca15a20f736696b5ec", "2a8005d7604a6f5a505b0a3944d7038f8c1fc3cf196281ebc988d42d2ccd74d3"), ("2d80d06b8f8a8d0f0a0657d3a5e475e6dd04c9f222bae8250c5627150fddb9f9", "255236de3ff537f050a7de01cd42beed702487635026c65ffa396224a3eddaad", "206992028500fc0151cd3bef3aee98d4ab53f95e8165366ae8f46249903cd572", "1c6f0be1a4f9eefb138dc15bf78c58914d5925557d34776d33a79a5ff140f313"), ("281530844e5f95bb82fd58f469bcb5e631a2aeffbc98e419a9487f98fde8c86c", "011d05959149712197223f37709122fc538b42c8027c693bd410e4d7a82852cb", "2d4b52b39d8c78036e214a6b086e61fc5d39b0a9c8990d8725ae2744f23359b3", "026e0416fd2538a0d4a94d0fd004b2f97c2a51e46747e754502b6a9f27f807af"), ("09ad2398c95eee95bbad6f4391233f06b97c99fbfc9182522b25d8ccc8882a26", "1f3ed34937c93fda76d87ed6acc90c5dddb1e348c4eeab53e8399f209b85eb9a", "049a204c76ad9c9cd1eb8470f3a3c6c176239c75f67d2abe2908f4495df7c7ab", "208a5b7957ca2d285dafb464cfa376c8a6c7d40d31088797bb98870bc7d9f4ef"), ("1be23b2d4acc582ab06b1ce47bd7c042da5cef3ae0e9c57d57a38cb264643844", "1f693163e17f1d1fb343f2adb04469436d34bddfb83e20abe7ba33171766415f", "0468ad3abb8db04cad176d9c81187f524521f6a58bfeaf4047e0764abca892ff", "0ddd3e2a265cf19bafa6fe08fb450348f4b31cd23fc1e9a8f5d040ee4bff45db"), ("09232ae3ad5bd6128ac659970858737683cb6b338706de13a9e19f602d210f24", "0c578530e6df15b866a64859a268b8b8d1e46de86b49ea936ae427872b4db2ef", "1dd7c0d1ea4ca6a155f7014ef8b1c76700786ffecc38de783a26ee56fd1e544f", "0b540680ed7f0e8561e504e9bccc596cff70bef4bc08f39351aae66b93b58034"), ("27c0de23e9298806ae974257bacc7d9f43e22000cb4c7ef779c3c21d7a4cc21a", "0062b7d37c25aaf1e9444e474a6041b76239348d5f7adf8eb6d5d10af63ab81a", "10c6e65db2bba633da36652b2e76eb247c5f0b7fc1153624145b9317aab2baf3", "1643f6c18e2a63dbadcc930583e89e609bfb1e0f40f1641a329fca0074b4f3b6"), ("2b7db03042764ae313f74a57b5bf643407ff9ea20b3e134fb927a3cf2083ce7b", "02ef8c07716a04cb62b842195f8a458234ce4465b446ae600cb1ff51345ed9ba", "13bb82b97d6c38d200a320bda7d32dd01bd06dea6f8a25e66d204e9877683c4e", "0577b4bee8f459da1726e7fd9c1d993f2e4b7c8dd463dbc88b7b89b74ca0e33e"), ("0684d712f8b20416b7cf998dee13cf4eff4470629ede2f1522d5e4e0c4e89b89", "18a364e8650c6a657d3dd176bfdc415eca134034c8217d45f47f4e13024dbcc1", "0320eb90ab0726c46c4042b406a9db1ef4b4bb278ffd81e783684a8659a755c2", "19b120ddf8a41edd234707dd6b860350bd37b8a3cb7e0a2d967c713a8a6854da"), ("1a29bf7abc7d9f452e089110f0f33c6d190acabba09dc7a5b2db8e3796f0f152", "23e037520bd078fce0e5a41e2e3a40530e602780b505cc6c04486c56d55c3a75", "0f50d1c616cc7ba8f292a077194dd54ac45e12b99526209a6e42352017efeb87", "1784bf2dd4fb48965956b961da48521f3032383849568ddce78127e8375c6989"), ("0e27ad10b12d4c0755702d4f52ec3f4d5923158f56cebd95b49d90956a953eab", "090dfb0c206831d84574337386a612acd5bc2934b8a251a6dc1fb21f41f2b4e0", "1ca10f00b7728ea8f977a61228efdc62a838e8b01711e9981d8ed94a5c62ecb1", "00759c4935db9f9d380285e90069425a9593a9499301d531f9b605a2ac7eb49d"), ("26be91b1f11720f0875e160631f6735f6f741f05a10ff8337fea5cf6807673cd", "108bc5bfdea062513b3115a74b9a7bd5ff2b2000327345670629b506f1679541", "17196630ba80c4aa23ed467abd76c4a24807e0b007f5f5b92de6a15981e6ce6c", "205b8e4bd0be42e719a0d5fbea8314c92d4ce00c20acf5cf623d272d747e0b83"), ("000abd56f4e9ff2ff6437edfb0a52c830b81ac32a96f544f6c4c62a499475aed", "24b0556eae339440fdbe26c6b28372a30404866ba2bf86e664ae746db7a7ede9", "2a07b035dda5cefdaa1109eba43e85507f91b8870189a203e7ac424e00cda5ce", "2639730e7a6ea638cfd6eb62be3c8d2a536ea08ff33805f095bf2e5e3d543c57"), ("2ed7d5c2b94fb24468f7d840606e6ce71e8b43df32845fa184b072b8143e0bd6", "25321d2b4ca0f71e6dc9b0e1a9a08290e9cf02c3593c60d951b03c3bf5832381", "2299a8b639bc94eb84f728f062ef80d3ff42a656a4a9326d8e766073646adab6", "271be1c66659faff421a251e4134a7ed78d0ec554c9c19547d2bcc88afb1e6cf"), ("100eac127b6458f1a80d9698834b7ffbca401950a3f12004a575747228fe05e6", "2e1024402c648c15ed6a483058301683b71dd05304c381de801c31fc7c179ff0", "16e8bb358d2bfd6e8735537b802d065d18c5951c6e40379f53d90ea7179703b1", "298cc3dd155602d2b4af2d4740e7774a360d2bef3c4a5ed7e6081bb1b096391e"), ("09bf7b7f3f7a6b0fc9cd2c930394192b8bb8d23a93c4889c930b8e28c0f36386", "1015f2f98113e8f6f7b7c485ca5c7082f9a45970e5191d52b92e73bef6cf07ac", "1015b39baa5d985f39e8f3ffb0fbe459e27a3a03c396a03a8773ba315390c02b", "1b6e898b2be76c5e365a7b0e15f385423afc22e892a4130463cb0d74f9638d97"), ("13e54cd01e5c8da268de6cb6f267c2846fec48299382a708f90f498c0abdf7df", "19a5b8a0b284f4ff9b0a86396498ed5ffa2949d7193096eef36cb64aac7a267c", "02d55ac4bd4aa75a9ccd841f95610ff93b1b22962a79bf16c7fa824a58f91cc7", "0d22a9e8bfd5febe06f652a245d21d94b7d0dae57f19a03c0a5d17bd909df215"), ("04ab7b8e57204faf3e5f995569a839113b0e65845e5757574bc260962554ca41", "037e5d0894b5e683c9d2a60d5c26af93033c87bf2670d491d6812b58331d755e", "17f4ca760f0b74ed603f399cc3fcdf2a5a70ba8d44d557bc53231b90c237c5b4", "2273045c70a26e70f0389d30691c4365847fbf849cb771a3a8262ea05aa4dd6c"), ("1a973f99e1e85d394e12117e81594618e17d7923c219f24f99221aa9ae34aa41", "2425bfbc87d167408c1124cf8db65695014fd2940a5535425818cb714bfebf91", "013e669e06f83bd4adfb22adfbffd3281f4e3f2044751a6040fd2b6def903cc9", "1e0a3ad5d7e8f08f20bf38460d30d03aadf698e226ca52c47203e241749c268c"), ("0998ac7461d63e7c3ebcf37f79f71418164330177f56e9f8f0addada1901e7f0", "04cea45376562a247b9c8967149604696a05152a4aa602fc579774ccfb20cf3d", "025df1ccca105960bb2442d23733d215929dd7b6e5a596490e7f249b68519b3f", "2d93e08191e56f578bf728017b4de0a36fb9d8debe5c42df26df21a175612478"), ("04d14d13c8a89ae2c47632e6e5bd0ee30f08ea026e20ca9e62b732a81898dd40", "2f6d6913f212535d222ea85c43d923c16803d77eaa8bdb02622fb2d8624d85a8", "01065afc0d7c19937c062cbca56e61fcb0fd52ad6a71b4a6a1bb6db5320b8ebd", "2016b5b656c5fadb61d8c8606dee918fe94be745376ce39df1b333ab50ad13c7"), ("0a67a99f5b4880aefabea6d2c9cba0212e3db3dcfc25b7a0366b16eefb40161d", "18c88053ba918993ae400cbaf248e529c20bc2373ea5b5261f5ecda8ee534aca", "0b9fc4dcbe76ac6180bd6578e77bf7be3615071f10f7c5df534b652b2084f113", "1bd22eabdb8f08f9bd99a1940454842944484281acaadb484cbca6c870ae9c6b"), ("08f5c0dde15b1367da895ad196947f7f6ea06fb63987f2ac1f30050653fb9ba6", "0b420bc4e2a915df5de267c5dc4b46678367042180146c83048ac9a7414207cc", "01fdd5e29b368509b1f33be21296e48876cd11d34f9dcd89b6b9ec6672e8a7ec", "2e9331d3ab77fbe8fad85e4493007ca88ec3267f2385a539d75e767cd34a1ee3"), ("27e9eec14ace452772a56e4f75058b9c89b6b11073a9fecc4d1bfebfacf822e3", "1d01964495dea39f9cde52f5f408b95849edfcd06e5cd3d482a032079e0ea314", "0c501222df1d5a066a423dde215d06b77247c41c66da30abb73b62d6267eb86c", "215be5a804d7c9dbb132f86df8a774e75223c217c4f01db526f2aa55cfa2112d"), ("0f4a94cc0bdebb28bc9fdad3948b228043784e48640c479d24cc55cdd4430932", "0121429d605d43db8f953702782498818d474a7e4a13cbad798152cbd5f9edad", "294f79b459a997684110b554a468b76e56ff22a1429b4a90bb7e063b155ff793", "28be55efaddf5cb60ad9539ddd732e532d94463f716f4629c7a967c998b6192c"), ("133f00a29ab9cf417aab1344b1e5c936a452bced0002d6dc18f57b6196fb534b", "07fab8fce7560b0edd3c6ed9c44c5e647eb948f852335af1a8533df60fa2f5ab", "23416b6256de9a59733f1e0a7fff7ed8cb4e1345aaa4624cdeee002bdbc7936d", "28d41b284b2a0a69d2976d15846a67c606c1428106007eb1399f5637fb5a8bb6"), ("2f91ce297039014b72339cdbae992c72750a254d7b5b7b727013e8e4698ea007", "2466edf43351f31c4d56947f2ddfb62ed6c812f79e7d909c711d0d4fb163272c", "227b0de5cc92805ba866996fb23626922eb77a5d9b4574e209c289f8a0f30601", "1ff1fcc6841b5bb5999e129a5400609c5467dafbc630d0e85eaacbf82e21891b"), ("07e9f50d493a585e934c08ff33a8ceadbc00b508f809ba73c7cf6ee0c570738b", "04f5c707f1c8fbd01ab8308aa34ba60f15b3d65d494a500b704f6bf3f9901c67", "26072bebdbbe6ae37c91bbc675d26496d117616335ebb2ed4a276a016fda8327", "0050dee54805642306df8680e831f86171bf4cd717dafdf0ae76fe060bb8cbbf"), ("0a3b5bf56e806510aa393a0d2dc5d41939fd2e5dd680f1b43548baa5b42421af", "16fedc55166220bca419f86b4dfdb211aeb15e2c754cb4fc516c07ed4236e2a8", "1a3f569a962739519e521a6fadf1eaca529c6806933ce298daefcdd6e533130a", "1cd4670ca35f0f7a3f18f6eaf43c98c0144f47daf47d1f073ce22110198a4f0d"), ("0638b8f45ddc5e10f9db9ff275ac0d068cd0c4c80e81b899adbbf6dae9560d57", "0037b2ddb180f69ddde5ef94c7a3655279144f2a655ee19b88af5ffc42811716", "280f44bd95c21cae0f6b3a7b53da53e33ea59280e2177e576d1e7913d0ece780", "0c495e138019a2863943eb88f69198bd4e436c5245fcdd5aa845b475e117eb96"), ("1c754612d94bf5bba9a6d34924305ec24b1a14a0de8671c2ae48d9718fa9e0fb", "24f703cba430b7774da23d5f1eede8097889cecf4cee337303fee027c8e694fc", "1ad5a3936cafe1da1e8506f8157a66ca952824a9e998aefc51fa253dc38a6c71", "2200cf27aef77f23081709871b5615486730ceced95d8245ff7969b9d7921cb8"), ("1374d87fb30ae76ed4b2175195f086e7cc322eb1188bc7c6ebd783e43000f969", "1fc01fb2e5a966637e886eaa2c04d9c0b932663623280b76310e70b5e7227ae4", "140b6994e91921cfb53873ba5f1546576a586d3b6465270fedec6bc9631deff5", "1546034ccb1894aa6e8871ad87bcf137368a7c9bfd1cc763f6eee8167b3c497e"), ("1388c5324af62b2abfa687a60a786ae7816f271cf8d0422898133b715d9cc8bf", "1ea0b152831fb555d477bedcc427c8a72c92a7f94e39567c2269aaa9c1682492", "0cdbc50521eabda39adfe65c502896349809947239917056e398b923c174f4ec", "2efc50e50d02839818cd24f999f0e2daf2d9c20570ab0afcb04625582170f956"), ("0b0e80d7f1ddddf48abe361aebc52ccbf81d0b79b64eb536fbf5bfdb0b6f4d02", "02eeb88b7d072fd7f7a6c1b6cee2a32823f0a9947704a25787f44f2f2054e787", "247447a1407328a163df05eb1fda97039fbdfbe0dad4e84885147df839a51230", "0e6d5f85c04a577afd34bca35cc24103a17bbc15228f92b3838458354f355abc"), ("1d7d7a40832422e8083b7552fac016e535126b9b7388173bdd67170fb6674945", "14448958b12faad968fc9a8e37a729f9665426962cb360f3a838b009ca892fd1", "0e5be790c3a6f41047bb919b24c380bfb694293a0078c88ed72f783a81d8518b", "09ff1f00e3b6fff662fa9c96b5903c0b0e19890918cb5e14b6898102cb5a499f"), ("16923ab553f98627be983901b69c4a19f0b395ed8a65698831f7a42269c3d4b9", "114a1b538c4926eb4b39c6177946155de04e73f1e5430920a71cc642269cffec", "084c66e34a8f542e39d2394586ec12c498edcaae9caeff06faa614463246aa0c", "26a7cee878183ef9d98e88e9d4b280f4480f6e5018d5893fea09f6c2942d32d4"), ("1171a7ec3505124ef62b61cccc1d18611b8f112380707e62da24fdfb3c7e203a", "0ab596edc4a5d662f75ed1491a0ff382e88085b300d40d3ae9d26c63747f9cca", "1cd1eaaecabfc459be4406f4bb68a72144d04b30a707491fcb806887daa1ac79", "261e48789e6a5e4d3480de3ba5ccabefeece6bd5fafdf091650f5185be720ac5"), ("291fdadf54169eee0839878b04320c706c07d8fceb6b0eba9b708eddc36e60ce", "2172122589d5205efd2a2e618007dd9fe54eb6deeec72846c6016b3a3c1d0c09", "175bdc70b398469d1aa48d3ff104fc3e5b67b76642b4f77ac1dbcab138a703ae", "0ba23982b789963d7895f10390f743754341458cbaf03d7b14f7954f5443bedb"), ("089078f34cbb0e1a1d0719cde72f601650f8b1913eeee4f3788cf0d5ab396294", "2c309cc23a60936435816e5bcff2cfffcdcf1be1eaaec4c7c66ab6c7fd8410f4", "059efee3a07d6039e5b18a43af3a5378e9d8cd0af00a8b39fb999488266c6881", "01a98d756665304a68e254f2c43cd9f42b99026bf952ecfd7469ece950cb4a62"), ("135d95518982fe12c8290d57b4ee0a3c0591e75f096049ae9fb953e13d5c0878", "0ca2f5f607d960cc8175ca2afcc492fd40f6a45e35c4a14165f4525a2f54ce48", "0b7c7af403977ce216c0a6afa40dfd14030f35bb7f04c7c678f79a6ff90335ba", "00aaf44da71aa209a16dfc75620944db6f000f4cdcd60eea9612ca94ca75cefe"), ("1959c9310fc662ecdea228cba6831758e15ef8e38f8bfd3cc68f8d76db4b384e", "28055e47900bf47fdff14c8ffc0a038acb47f41429fc42f5390cdcc35deca992", "075d4cd7768294bac13bb19e22fd62e65a879f0b1a85040af722b5a1d9bbedf3", "1376404e3f063819f7211d31e285a831fc695c0219797253b6cf69a8458735fd"), ("2d15a42b686f4e4ce2bd029125b2728381887def35f7a328494a5f08d717997c", "1102bbf8a6c9953d507f692d6aef7923db8fdee286ec56c435d8b576cb979fa0", "0b610bde495470a6f65297c3d9d9e5a71aa85450bd143a9c2c7ca32b23a32571", "0bea713a9b29d99c7f310d6e4d02c4c1f689c9befa6876a285f6deb7742319a0"), ("03e816865d22eaedec9f9d1578f1271e13a1f17cb70f925241d81219fe30bf90", "29b1a2c3a9b8e3259025462696862d0fc397df7d1b77383701f5ee0d79bd5e49", "0529edec541072664e606d31626e2791d69d4bc528c50f4b1b823e0f10322294", "022d3a01c6fa7c38f6a834410ddeca2f16c73a5235846ce0d65718853f5d6270"), ("2aff1f0755f00076990e1878fd5a346d09732ec457b49e1f3b67a7dec467c203", "2de79b3aa3a361b2478fb3fddb49710bb40c90503fbc8a90f9aa8e6f6f269dc8", "10110312e1a5a6b52842867fb98c564714ebbc99fbb39b870fba13eeecd7a80d", "223b5c556786c5a9faf93cce9b6f300cb01ad4ad2e4e69fab88456857687125d"), ("1c24b54a306d6388a0422deae47bea9f20727569ae4e3e29144fa2177c3c6fc5", "0352110d56e20d73451ab554cac5e937a825dfdeacd331173eef5b9253934a69", "0e0e665feea0b14e6e599253fb53370064ff51a5137a06c558f9f40d443a497f", "07e621e6dfdf78c2a566c3eabab96981a6313d4c043e088049dbb69d69f5d64c"), ("2ea7f1b838444e8b5d84fc8913e576e384c43f9e1be4956e4484f0b14d00a087", "1e1891cfe3349b535d66ae116d4a4885392f5215e87fc8b3e28ddf9d6f45faf1", "1b3b6bd0294d3e945b4fa4c0feb3e4fa8a1079b3792e9dbb7f1978d85ae16fc8", "053cabad4b16a36a56575ac6f46180f88657cde38896aa68f6baf089fdc8e5f8"), ("01f5336d0c24f62b70856ff928ffb55b8e0fa3df031367312f27c0bf450761f5", "2724569e9e12ce98ee4e933a0bb82435e808f9d65e50327c87f8ed6093e89462", "1961c18e22ad4929bcb3a8a16e5720094c386f5e80da345e87a38260168b82f1", "2a84321e2bf3aa8f0e0c4e9d2b450779002454b269e6d74281eb72e48190e190"), ("0ab15a296368e5f5b4ac1b6c867dfc219934989f3b028518af30c1d6899fa310", "047d24346ea35e788cc8849eb1fb34c8fc8a8abde45faf5fc35518d620de9309", "0ab98c084967635131bf4a6cbc908299bb7891363ba050f2c6495222cb1f6008", "2b57e492835a1fc34130ad3c202f1ac4b60f018902a596bc0e26eeea9357f0e9"), ("0e70937dd6ef9e7ec3a1395e9b2a3ab1e1300a2f28d45f29452e79ef846a2696", "000b278fb6c766ccd02cf44152b6418f23a663c211c3e9dc099571bdbeaafec0", "1c126d53ec3858bf9e103ff57bbeab4e54b7445807e36178a9e2442219ee169f", "219ef5c538b2c572c295f3efe23348aa4d9508a60021e5835c812227e9208030"), ("2246d591bd77787b11ac808bb152f7264be2fcad8fd893c700f7b33abde34522", "2b7ad5147a17bd204258c8ad09961c57bf7347b2a8ec34466a5c9f0b7d73f773", "2b5d79f0fb8d9d8201acd73b2521ff5f47b1106f01a0a113c761258a4b3b583f", "0ef3378ee7def58fd98051a501b4cdb7768094103953849b0a68e59262c5dcae"), ("09d5280a8c57d103f6ff4a6a7eb2ad415b5866e1ec60b8b04e1e692449c2812b", "17578ff56a11d39e0b589cbc2f78578ad58496d0f0ca65c1b2f4d912c15a7b29", "1af157af4c2ba76358328b97a5d9c10285de769839e8d92be03ead28fedcabd6", "13defe03eebe9914f27055645c5039543185bed3ec165d6640635922672456bf"), ("2f97dd63d238588c151a2b87ac88a94748c0884c251e38931fbcd116a628db10", "24fea17bf305c72e98496d094a4e8c05c743e9a0208300f706cc1187feba9b87", "1f633582f6f79f74c0fcd1c00df8c771328220399a304c631830ec20dfbfb0c1", "0eb4707c849ba56353585c23b2f663306dafdc1293525fd63c0afa87c8e3d134"), ("028be8fd1b571b0be86d1b96970e86ea33dbfbe40c66572a66c0d91d613ee444", "2e5deb4732c8e643d17a7f2874461a433ba0e0dc5c16de1ba35a8be59e9e09dd", "11dcc33468ad66d0a29abff7876b52cac1d19ade07f1b3305ea1c9fc73211d64", "07ea50fcfa35a18d1b3730570d755c41551267c8218f00e3da35bf5748027c3a"), ("18ec7bceb83d944f5c630451d54c7624f081cb6af25e1e95ad3d95db396313c8", "192967c6834b4b2f70284a8bf71aab4b50dadc15f410f15b6853cc2b210074ba", "3054cb77acace4e98870a4a273c033c9b48a842f0921cd9f5638dd9b86aaf128", "040dd8f31b5ece6f185d77e0c78d9efac4202788102c3fb7c079834df027f726"), ("0693d1f42cddcec87fc767d6d314e0c22638b5adcccc72136e2373cbe26c4894", "210f0f884600d0607aaf35d6a6307c747972accfdf075c7e246c71d28b070f4e", "11c99c7c6d497e8b7e84c5fc297751c3bb14d41c16d70e0d7083450dbd2f7cd0", "1db0ee17dbd0e299a966e3d11a77972c6623b5c6d65c8c73839c3bf61e9d8bf5"), ("0ca557e1b823e3697de809dc3f2a45df1cc8f9f0de13d933eccb0319a894ddd6", "199bd36233ba8aa9d2eb6a37927f376ef41dc6d9218eaf5bfcb822b09c9c5745", "28430a7f0c0063542949880e823e7b134c5391478a1a2cd5654af6bf5cc59a5c", "29047f555763f7fcade09cb11a9c9155421a4df99c28a43e50887f222d626adc"), ("2bfefd7deb9e9a382f14f12c77cff60767aad71ff2e010e53e971121a4fdad8e", "0306a0aa031e931e626472a661579f1c68d3fdd7a43f735d25da360f09619cbf", "1c7249504aab14a7e0ca272f6ad05e3b2616db97947963131057960457d988e4", "0ded726b6135f23d616c77c0b5ed724fdd33790cd5566c0dfab8912eae4f01b4"), ("12d3373b5aaa2b070fef4bbc02018867afc1363d3e36ea10bcfa9fe7db57ba2d", "06430e6114f1a23e88ed02a3c698fd4bfd051962b69b6548caf34cd271316af5", "150d66a5c472cbda5e02af52b2294cca5b796e6aa3ec544c2c26ce5236534f36", "021cbb67d6137cbe0dd21d2c817e25b90b804384921b43eff93a581ceb29815c"), ("0d80f2df8c7808a8329d874b9846d00f96b33800603bc0bfd3a8f3c1fa4f701a", "27221125aeed3d6d24681236ed3f9c89d0bdf6e6273d3bacd787db6ba852bc0d", "06252e065a18eb40fb3b41f9cef700259de5b5aa6125a25d11e6414005d32bb0", "09ff4edc20a584dd1e6dcd82c5c21d40762aec7127c9b2fcc274c6084546ca47"), ("23b6b1de7dcd0f3553df1fddc91017c531ba46813a452434bdfc55a64b24982d", "04abfecf2c4e04a2a9c7a0a120d43356d124b1266bc21af9be8cb11cfeed992b", "2e46198efe7849f800a0fe37ee1b0e19cc1bf747df13e261bd0e29eeda7ea661", "0beb57dd500ad44a6d7fd79894c8841d17b0297a6aa9ddd967e98276c881a113"), ("0990c6c20c0c61d84fa17e833305878f209af68b4eb2a818016a6313b29923e2", "2d0371029dbfb871eb6bc059bd94c93ba5dd2b5c4c80cabe87bcda24519f72f6", "2c6a9db3641dcf006a216c92718d67982a5089954664460f3b9f526159aacb17", "276ba30765c3504b92b763b476e6d24ac099ffbc364475c12ce71e7997fb32f4"), ("1ed9f1157ea46d6ba0b609d39cda6dbd55433d93f962a0896a86acf1c0a1b616", "187f1c0153ab91c1b3fadf4f037d85a5351835fc19e5d317c098de6e4b99b550", "19fc9798bb23379cac8d3dae07d46da716d747052bd3ffb6381f294d890df58e", "0692d55444b1a31100d9e949242da49606e3d055bfc5cfa559c3febee0ca29ca"), ("2899c67bd2e30c946f0147f58a5bb88519aa49f3c179bf086ddf551bbb7caeac", "2869d9d18dacbd5c2779a60f070249426bf645f48ccb752bc551cb7b83c8115c", "00e5c80e58421681a58e55189fcea178bd6783ae2c70205f17c5a00bdcc11cab", "0299139addefa4da38df87ec22cf37f5ef0c0c4ced34d30a89c2b5b359c8075c"), ("02ed733a41c08869cdf7a33a2e5afdb9910d696bb591d2bc38c0fa29d288cca2", "0ce64d0d4f38e52b5108318b77980a89172ac2fa3af1492e95b26caee59c209f", "229f6f667731245340b101aac1cad85d5dc8e4925f27d622b780bd9b5b5aea5e", "285d1aac6683e038364b582d8867ab21675b19b0d991cc83fd9e4d2ec17d9d02"), ("1a0083f554c8e5973a83cbc22197bc44e808231556b03c595b9b4be8bc699bbc", "06fa4ca02c79b553cc046f62644dfb7e88efccd7321639628be9fb6c3c7db37e", "0d3eb5c245b1398e28a9989248eb2034525d8760245d4957e4a9c00d7e5e6887", "1d6616c0d3c3f39999b0afec1c35d4505a7bd2a112eddcb4fb028b786cd07e18"), ("2d75fe18b43528512f67b8bf11b7960c844fb96a8f93b6cc71053ce6a97832d8", "231914bd24f6e06588dcc7789eab22c1bf9975008111385ce827a4b92e0f8d4d", "2ea80da8c1c190e0442eb44e194b62a25bfb76db05681fb6314b8aa364f0654a", "25c70c34ba536cf3c97aa002c81b63387bba129e2a6adbd53e659d66bde18b78"), ("10730c6eedd03961c7aaad7d4727654a0229e64ad1d0f2345f4538b4a1df2d1b", "27444deb75bbe101dfebb824cb9d9da98568cdd78c7e58403ed188037f1d0749", "28986cae8c35e23d24beab3f8eaf58d0922ee82990325539fb82cd7ec4124359", "0addfd69580a615b7ef1cfd22575b0c1cbd53f2ab0697d977c6fd137fd18bc30"), ("018f64170976c76aad196e85c4b173b3ba4f3f0ca8829555e9b1b61d41a06c30", "21c54e55c05532ff8caa19bbb9edb6180eb774bbe77aa4cb08c714b00899961f", "0fe093cedc09ef4784b00b0945481709756af315cd652254142ab5ed4f5fdf67", "1cbd4127cb0a49d828714386f05dbb2fffef349e91f30ef728953af0667edf05"), ("1457bc9ddac688f3711627cdecb1ad180f6db99398013dd9663eb213c01ff496", "15f424ab7676c1bddae971c338859bdfa85b4ef1acb28687e4f089ee672ff866", "21de6fe0569589b91d53f0aa38648a1a123bbe139d2f6c6a4ea2e9a3ac95458b", "011c095f0eaa860baf65d3959b06e843842cd7466d0090fab479c8e76c8a771f"), ("0def0aa345efe42f23f8904a432d3a35828a57cbff76e51b6e5986d634e80347", "2c42b2494d5b3be2fa34637e927acceda0d2ba2f68d997d372cb755356effd6d", "27ddd1e80c07c2894e16a816cdb9c4f0c63f8d940ff139bc933193a7f7657311", "197d99a928f6d0a3b43e730067ba57d42a499f16653ef6da3e6bb6159db8abe5"), ("0db17144b2722ae5ca10aca038175c5bba7365ef7ec933c228dc706a4cf074d6", "03e4d48ab9aff17b703db505daa17f5445b2acc5c24fdc70df4d5de6f33a9b27", "05fdf8f6a6804f53f0d6e3174ca4feac942d1400c35270efa846355321e605a3", "2756dbc423edc9294e5efd29b7dec871e25cb818a575e2581dda825b87921430"), ("29e6c5d602f0000387d40ba451a179ca0654eeed7bee94cc2f414a393da178db", "154aff0c2ca1108ba674000561f47409ba14198acf62eff7c2f8f365a9b051bc", "285557d07cde5dc6483e4ecd3cdff4ff94148ca748d88c611499a8c8fba951bd", "0de2765a5b02bc4416337493939a8239199bdb38a212db902edbdff219a5d337"), ("0c943e1dcfb448828acf3f6bcb0812a02ad3d09783c7415fdfd5c65b1ebd12df", "0adf45713f045b51ad2b612df22d5b9832667c24b8c0c5c14108087b9fee4f1a", "1c994655fc9b29ffaffe0b2b3d5358583e20c5d430ea1cad17c9e3abd11ccc76", "0ef4b99f2ab5e9cb9f3f2870fa814ff7a3a7710bbc4967058983b942f64705d9"), ("04d367ef37ada86240420f4a060a682896f8fe0e4038e8af14512c570ec9a851", "292683502e1e879ffcfc894c3970ac9471c7fe40a4061f9148a986652319e547", "00d0b18de260245ab0e608bf157987e927bc6235cd494c70e0ee687976b7e21c", "134ba6c3f41aadec5290ce3648abe2eb3a275756bc035f0d57f6107a81553237"), ("07114822fc812d23a24a2fd0c74fcb297f6fb197d0463099686e39e3ad5152c3", "297fd2a58c1fda20bbf50a18f816a1683678a61db22269ed462bcde56493a790", "18121ea79a8871b70eca11acfe1c91ce64be939756a212f342f805cdd95de288", "255270724a4f3ccba08bfed107c5bb0c5a6229575448ab5b1d63039cc66528d1"), ("12a69d285eb8bbf814b49809fab9183faacc91acc98c7777a8e0f6ffeb77d328", "2006e82bd7f31a3ee4c29307c84955ab53472fc0e87c4edb296349ad1ca14ba3", "009b0f83122082dc5474b9f8f10d53f24c54d94f3c1daf0e4dfcee24b1c764bb", "26f485f79342494603157d0e17f67ead4c1ae9610348c2544b3c03177310fc90"), ("06374826cde975339f8e7db4817591e1913553b8ec600a96b23b95233c052807", "04fc33c7c4c289ab7277009e77a3212f08d960fad29092697dd79b28f6077a86", "06dcce911c1faebe4e83d30e795fa4ae424fa5bec3540444fa9220427a20da0c", "043f0e391ceb1bbd4a4dbf6fe384963363a0a89cef0a4d6ff584e82c4f1583b0"), ("2549d25742c7ae2f086593f2df57793fd91b380d900ff57e473adfa02153f1c4", "2d3d4d3c842ef5de1cb25a567a3ec0a1c8cf9a1652e8f51d81ed94f538c1b100", "1bfc26841f31dfdc32b3a3ede067c34a625c520c8902abb596b3f6d08533a23c", "13da6de51b284999251e684e65d2947ecb83ff85cad9589b373b68a5877a7319"), ("29020489f5a9b1848841f7dc8369851c33ea4aa93d3cef97a3ca2ac6aabfb4ab", "185496e886a0af2f89217c0980070d0964e5e7471f7a8ea728fa3d1ddbe2abd5", "0203bf12885db9dfec8734ce582ec645e1ebac2e989b47f52f7b5a8179b256bf", "2362186b36246e5498698d89f8bb35e2297bb0a73f5875175d5cdc269c271a2c"), ("20a69dfaf60b13edd592f38b497bfdcb0fe8f4d87964ffde8d3f563e310d01f5", "2188454347b4286a773cd46954aa459f05b7a3a6c3940d3cf8e1017b5200089f", "1eacafe1c302776cccd618feb05aae304b9b5f65e8f455f396edc73153303027", "22bf1d45ae12eb4a87e9fb514b0d5d3bfdda6b419bbc87dfec4c64ab33212fac"), ("301e98e314ae573935fa82c9a78c898eadaa1ed0b85ca3c07a19cbb5ca8856b2", "2ef319a777d83b6cb9fe4f72868912c0dc90ee308fcca40fe5496271ad26353e", "15df7c0b2cb630089a5762109b0c706b68c923b623e19badb721ef0e0d787b28", "124742383961010f5b4c7b3c05abe7ea9970e2b3ba44b27566858370e938dc26"), ("1d99b08112828131d47692602b5fc6e1774ad61218f98f7ff26439dc3f5d4970", "0e4ec489b2b08669aa8b84386ea148e2463c95656184d02065578e5cb965b307", "1eba680cc7705c9ccababaf9ca87da0612733a5e5fc549f0385efade5c76be95", "1861b0f7b93874b56604f250cf759c33d6bd7afa3d5cb4f654096de201c722b9"), ("09379a18a0b9c5cea6ac70ccb3f5ddef8af0ffb9929ea1ecc4f0fd3d35d715a3", "0aa7e37bb4246d95ac68c62e705768ec9d79d3ad0c1970bc72b4f787b8d35a3c", "16eced4be6d367523559aed77dab8d38d1153813a1fca9a27557669779c113df", "1b3f69b0c9d3ec5ebb51f53c10a89a032532d3451f622927aed195d81b8f0b11"), ("0cd63a359eb0832efb9f91fe460c43d7d58256473cbd29a450f1bfd827ca3fac", "184c0c0551b68a7ae895d7a6b72d469cffd6666abb29fc53d382793c059a19ca", "18e75357676f4a3845cf2868ede3f2c5e5275eff3ed65054b136f571535b13cb", "29a150c626e37cd18fe7d5539004c6646e64003aeb6d2161ede2199ac7df7eb5"), ("1779c7f75a328e3b8378f409b52ae78c81bc20a437aba043df5adfad4cd3fa4d", "2715624fc29597caf8044cde22daa78c2877886ee6b7db280b27ee9bd3c049b7", "2609fa09597119c01b713638635d6a70df12a84612b3d690a40439088fa13541", "28e4e285dea9d2f58ef8474d3c4122ab1af85fa3f7469ec514b1efbe2f7b7107"), ("26bf0d13113c964b94d6d8f2dc4b9fbaf4b38b3cc3dbc24c546c84972e6b182c", "1f027da9f8c1547918a615803627e6f0a8699a01a4b08d8f3d4e7848e00c3af7", "17ca1b43e45b5f8754c2b39d101a97153fe660e0198e8983ed022a45102fad59", "1a257470e777c7fffc9191b6d905a4d8a15b984458b19e8fe062f01b7fc1eee1"), ("0f74dc983cddfdc36779792029dd8ece99c57026a8739d602ddb429af1e76515", "081fcf70f96f9b053a26b433776eb359b3fe5efe5004a0f40bb570fe83805054", "1daf51d93c3fc1402649fb48400dc91c1d9f18af9274acf25a6f3e81e5c204a1", "1a46a56ae15d2acc08585cca89938154cee1ce24ad91adf822e15061bd4dae6c"), ("0aef3f108502556df3dca7b8883deaf295cf2baca26c5f897b9e7f0ec3da36a1", "2c280a4e16fedaea2951687d6ed2b6beaebdf87debe996a2c3a2054a37cc61d8", "2aeb96dd57abd6c51254f11267b85f452dd1cd75666660fb9df586f23ab6de86", "154ebf72174ba68892010beac7f587365453b9ae881b84df6ecc1d5415429178"), ("03d4894af1817a87f261f6cdbb123b0bc76507a1afe8fdf795cbc87ceed0d6c5", "2175ac0b20ce5ff760bbcf4ce6f365a4f7a816fc654867f59d8da2748e9fb306", "07d6a1165061fa07903721d31ff127d4fa21ba25785de025bb520355c0d99435", "2dc8738b26fdd65f2d2e221235d6aee04d2465671ae05757617198e1e8f83fa7"), ("1679fe2bbb10ab718ef659cf114288bcd1524a5a255afb3f760f3920a1bf9ab8", "16c4e1060e8d1df2cd9dd9bfc64fa4b1a3287fcf604550e95eff615a3541a658", "1c37cd8284718911b43e2f669d2b23df7fda02d8dc42ad1b4ec4bd97bb393024", "25bd4c8df9df86a2e42adf27ccaf48e82cc17aef91b307ad5c2b9de57316502e"), ("07a08c757f2b0e58b7a9ffba9904ab7a6a7e7a70901ddb7bd7a09db62a9b6301", "24feee3ef012a79eeecd16158a470926e073f0cf401605bd7f27d824931fd948", "1df5a74e87900c652f0fe7ca72e5569ce144f2cc0ff83e5991d81ea05faead62", "2b526fd148412966a32ddabea4b54ab599997a12db65a1f1614a27f1ee59b805"), ("10a91fdaeff86d5ac7133caf89198478442a66851e0f5a821ef1bce8d45df6c1", "2681fadb2148feb52eb6d163fef18683f569f9c7faae6f9ce2b33dd6dcd1848a", "2a56037e9ee23eea469fa061751b19a8873088f41421f750336d8a1caabbb399", "1897bfd09fd25deeb764b4b4f12862615f3f10d42a945181de339fdcc962bd9b"), ("0663e73f06e903d95f00af78dd0448fcd9fe5e6ad8bddbc59c17451e069b28bd", "07bd3fb866a07368a7f982981aa1471a631ef3979c719a7c2a4e02f44a84bb5a", "0446dc6b53b7a83c71b66d5e5063f546bb6525b82b569a0900a685dd887a28e6", "2be7e499c3d47b14e939a26a17dd3aef3e078f08e22bb4a27315878b790ccf15"), ("1cd1af08079ffc2527d745f5c3c86e668acf46f5415c1b0fba8bdab2842fe601", "1dc3bb1837cfcd311535fdc9c3e3764068d95437a56a8d05561cafb8dd1a92a6", "2f41f4b64631b0a9418379e0cacf1ac7689a5aa8b3f8ce1b8bd93232f01ee02b", "0eaf866a2e198329c54e0889e6b6daf94ae98cfabd9c0be2517b655ca715a799"), ("2dce26ae145ce878930743d341405eea188de4ff715b0185d1e2878cc33b32df", "0722ef5f4287e21c992ab527d1bb9cecdb28e0d7888f138bc928a84ba036c780", "20b772d29ea6495d00d1638e83adc9772097bf1691bc2fd0c1f3f3d2101c6775", "08eba399d56caa567d5dfba21d7e33b60ce524955c24312971873c97c8d46fcf"), ("220d9208b1e6aaf490801c7a5209aeb4d5b12828fc48eac45c2cc4f1d5a1dc73", "0323b8286758c04c5412f24174dbf1e4562cc901f1daa175ee9b08d26f080040", "02038c0ad71949f096b687e63adc4db016829f4dbd65201e3799d3ecab5d0819", "0f5f5ec47cf5ce54ba1fd08fb557bd0ce36f4d2388f5917e7c29346ed51b1e11"), ("2aeaf44f6a9a9e9b9dd8d99841c7da7a6c982092ba97c0768262ebdaf92b9b01", "09a7c540e5af02da2cb7d56d3b06aed8ec1ef6abd70b28cd63a1d050608aaf24", "0fc7d23cb243d47dc77a8674d9bdfc03635868fa5b6024a367d5bddb09a12bdc", "14472258475a17974305e04f46f9e743715d0958f95ca1be8d2fc68e5712c783"), ("26a7c54c026de6b8a36a8d9d44c98424bfb6d0ffbab086169d133c0920190433", "0df3c4c748718868500d573af605b3ea68d22ab4923a4eaf4241c9490f2db78f", "2ddc2b3f7069342701f949481720c06758154f1aecae0bf9293aae3cb5211079", "289f104f4eeb64952c35861d594b2b90f6a02396a67ee3566a6d79c9b7f75c56"), ("055f02cb2782943237f0bde69f5612326be34b4346e643ead53ad47a359b504e", "227783919a653eb0bcffbcc54137a4c74475f6db29c812ed39b6baa9b8bf0cca", "0cf044c4b33f6da6d87cdc359b79484a316ba046e379093e69503f645767ec93", "1da635ad3d76eb3219cb6807f6622a3b216a2442e8d4ad9fa42099f948b35ba3"), ("03f6ed8e3710e44d6282a565eb8e2017590146e9e595728f912513478d2efd84", "0402c18660726829054f708435f6360064dd3c56d1b5b34b1080d79aa4f9f0fa", "0077db47aa980171731a544afeed0aaa8035090805a2eb3476050bd89d29262e", "23bb10deb72d8d502ddc65aacd234991f33a5ec5fcb67968686631c1cb94d708"), ("0b4a1fee71385c52d13dab64a591d8affb07ac7bb6b7185e5da8aff2defd3055", "269870a2d3f4d3dde95cb4d36adaf3c61da33b0c13a0107ca24c5d2cc87ef28f", "29446d3a44fea31d6b6a1c5fa29e18a5bac47240d5a49b85cc4c8fd2101c2e53", "113d7adbd6a5d493aab9bfcb2445b754e9a7eaa489b15642fd5cc1eb713b8614"), ("088e5ac53c7bc7a30227d85a72bb9ffef730e352b77a7c3db067f6ff00816809", "1d9d622325fd6a7483e0bc0039b8d61c58ef7c4af71ba4f3632b09f4cb64889a", "20d6073a1fde3a94776f6d5bd8c480e8561c7aa22cfa6d998f755aff0d2eafb1", "041ba5b2cc5d26f8e7dcfd2199f703f56a056eb8588899eabbea2a2e07fc6372"), ("111ba58549360629fb1a8f8d572cf3f1cc9c07403d5af18c83a5bbba977b6997", "17dc52639a8ab0f1ddbe9eefffd25d80a59826d2c8a5ff6fcef8ef8d21a1d88e", "0eb71db210e0a2cc2090850f8a7b63b4307f9e272e5522f8c5b4a033c023664d", "00a77c3198030d7e7f9a803faa5879de3f06e0a1dc5c9de293652cfb3349c91a"), ("131e4b438cd543988febad48a1bfcfdf0e5b1272f68a06977982921ce7525d37", "2e2b70e08752b0eb5a9caeae438498598fb51adf4f90abe33b46223745593706", "1e616b1c27173b8a29b66ec2c122dad970ecbc6e70794b1b806ea7513bae0d98", "2127b597c6665646b28e36972c9a7333ad9ac528a8d6b36ba98610d880d9c7f6"), ("2f4ff80da69f3fd5d60a5f0645ba4af925e9ff3684aee5acba80fdf866263be6", "2c451ebc8da5eb6b470e3dbcea6e09bd39e3a7d9dd3950a3f69469834098bfe4", "2ad832ff08449845829967db4ab516e38435efaf9778794cca872492c0814f0d", "1306a5dcaf8bdbf10fdc0725ac58d830dc4ad0f4c38671270ddc278f4c222938"), ("2f98a4b0d19e35cdb402f7d951e03b643016007b945c71c1d2be16e06d60a9e3", "0bd9c68bff53c51e134e6ad65eca7dfc4e1e0173deef526cef7248e1e90e7ba6", "1d699d0899ac9fac8655375e477f8c83bf3cdadda208fdd3d44ce382aea8ebbf", "2256baad70995b66253c01aeb1289638827c5e72e22787f741b0ee3c04340aa2"), ("0665d9962b64999c6428698a2ef580e0a91f6673ca1c67bf0df9a2c66139fa32", "27a1e593742b97bbf973011b2a2b429dc1803b415942c6096ae8e2f6ed6b255d", "043d3ba9268acfc74781166042eebd3ce218c8dd2ab01105223fb8154da70615", "0ce68ebe0415dc0a5a4edd33d6c906e62abca51de5c604333f3e4ce12b2d5bb4"), ("11b0ff660338903fa8ad55144a6a9712d8f8d517824d530f7db70e761c81d0d8", "087b8469b8c383feefa74509ace143e33c464ec2ecc8e64429b1972555e9d478", "07d9bc8d77dbd52eaec66432bc5f0a910dfbcd55ab758a063b0b78a644ffff86", "20e79550f7e8d8f57fa3602a571e90e69df435a172f9ad7fc87721d91e8b1aad"), ("0c6e546492be24261f37025c45db82cbb679fca81a704c13230975629fdd4d76", "091bd8b2f1fa7722d9ed9820da86174f6ae00973ddf12af593401fe1d038842f", "2c8fe794169578fc8b679fc4347ad9b50d35763374b328a22c638435b93cd596", "1bb45cef5eca8649159613eb2c8a3ae8bed043a8c217371ac4c15fd727cd5ac3"), ("05399357389f0be6596d096172f7cc411a17957ba91568f063bc9790aacc977b", "300ed3acf2e1e334a3c6173f9eda7df06b218e33027db259a631b675345c5de2", "25f9ac9ff17444708b068fddb4527d8e289c09774eefc16d5bb1b1df15e8501f", "168cbccbf1fabff3b052aa84a94cd2f475407f6d88c66aa57e0e7d3151bdf9dc"), ("0d838927988f0f3b44245344c7edb30c3f6c6677c775455610c6ad147c149b74", "30013f9a304b5b3aa1c2cc39c7d3ad3af094d3811b326d3d4d3dda499b53f3e4", "1231aa2502d4e83a0951fdb2185c87dc2c694ba64ef63c6cfaa70f088f27eede", "12a858476a534e90dd28a8fbe1b4c2eb98aab1fa2d157d8c80e3f77a667c1491"), ("016a432d52532cd385c04ee4068c891a79f0fea1f1bf6befa5ea05c92d53159b", "2dfa5f9ad4cf45a101e5f448a0587f588833ef540320be8e0167719b97eed261", "05e880a8b1b5ed15edb682cbafe7558319c37e4685439cae54006d0cd2b971ea", "2f496b920e296b0d1ced3c18cdebcd52dd3762cb75d6c18b776059827922f334"), ("0a5447884ae748c55472256b78948527b7b638979134755c1e1ba9397c9f3988", "014f81eed78f88a002fdc573f569d3fdce3a6339e9698a83c21ca53e1352d229", "1059dfe664c3bda2541fb90aaf746f97f96a67bb9f26ddc562293b833bca85bf", "183e7d90873cac8e91bd8e3dd67287429b97a1ac4314f443c9d7781e15b9e651"), ("2bb1849fe4152563e95f28d84911273ce5cd34bcc7410a2861c6252ec5313b2d", "041527f4975280505f46e04e7efa461d5907eeb83d16caef1ed9862b50b33486", "292cdaa3bb06907bf7de3de85558977975b0ede2395d02363113de2e813bd2cf", "116785d601151689d908cdf76912cc70ad2b4ca2d7da9205f088badbbcf8b089"), ("1fc1c85fffdb644949f984cb26f1b96c67166845599e7be72b8a758965b8eb56", "2f22f54aaf49b8841e4abbec0268aea532583612585efe86086a8dfd6001f9d1", "1d8c2270784af30c86256b5ff31e0ff051778a6c7dafb8188ce8e74507230f26", "2c5c0856ffebfe6c89706cf1bd4d9eb95da04d86dc0ec54f51a74e7b72cc4fca"), ("1fd0038bff263193000fa836f9e4c9bec89f4c6d79f5d01be30471d89add36c6", "1060c31868a1ededb4e7d7e56656ed060a0e6a3e976f7d6696895c8cc8b1033f", "14724f45ce0c0a06314b795b060ce9fd0a8d63f7ff5501988b694cb4230df3fb", "2a477fb9eb24ce44dadc356bfee68af5410db30756e90e1bdfbdd44cccb2e0f3"), ("04f44fc547dcf00e47f0e12fc3f7fde416f26e83b292872a5bf3edd5f51f0f6e", "2743aac757a7b40e73ae004b3f9a860723621f49662334797dcb2a6c678bd621", "11b0b95b2992ed10130f73c617e051b64db525e3b08716839c30125e374d150f", "201c2d8b27123cdf68c9f2b1e04b03e601288bafcd1df62fab5188b523b23882"), ("082470e21b07a91f1a04cc0357c71078e26d3c68242a3ec878f30a9d1995fc19", "0300de83ea47667e6d37f68b885c29051074049b412f11f02f00989f9b5ebf9e", "22b25737da87bbe14962111a8f35269864bc10cfb30e5e49b5bebd26bc332472", "228b0913e047ed095e294ab806937285829c71cb7925b96796023d3cab978948"), ("14f8a4dd10a9503a124542d4f1db4ebf322789b8555e1602d61fbaeb9850ac13", "24beeaa9d185dcb01546df6860604dcc3727cf46ce5cc79851a623facca4ba0c", "0382ee271b0f07f55fa8ac8eee2ff510b013dbe2543309f60bc9a4c8fe2a0ca5", "17affce17c8a8d5f01994945d9d27b0b9a9c5c43a6f7e2758a4bd90639033a7d"), ("215a56b6cbae16dbeb2e445779716609e203cdfd49107a1d86758d9fb70d07f5", "223d95dbe84098837c58fc8cca5b9a1ddd4ba6c2fe2140b4b9b1c4e46e624b09", "29672d4a03d520da7bb9459081b3f82cb9b27caae87c9840366b72b354cd8dc7", "22d417f45bacaa6255c5ad6529d93d830ba2ea1da8fdc7907d74dea84f3eb7d2"), ("2c8119fe471d5ea42ccdd977fea41ec76d59740b887eba9b011a581d571a9334", "0f6eb65200bbc8ff78a3e24f2d7417e45703c22533e3dd70256d381fe3ad4ddc", "285c2e36c6ee4da05bbc00790f9a3147519036395f51a0f28bfe203ce64ac4e7", "1687cde456ebbde34a8df5407f628301a69b754e05a1925540077eb80ee4721c"), ("150b9a0780c33fe72b1a528bd9556790b246a60e30212a966ac8f38d2c2ac51a", "230a520f8ec917bd5b3128a0f327aa5d3194a21d81bf463f46b4d062d77e4ef1", "03d3da4489872f437a73f67ef9012954ae5bde0e6efae6038565731a16ad065b", "080446714b4cb7e70c7ea1691008b2c5276ad05a38a8b2e02db2905725616e7c"), ("2dfe8afec56e2c8537594096320593e4e9e60146da86b38ca5277a6b93f3d41f", "184b63012e15afb0d62694a0de2b79eb9ec876c27d0ec98808e35e867e629f22", "17f986513e3c2c1081653edcb30a4ba01b8570b597e02b8197b0ac4acf64eb73", "089d8155e206e200aad8ad2c14d2c72df36f05be01e3d7a1b46290d2aee7679d"), ("068f2070ec4d5e70aa7dcbfc93f162308aa8c2397a80eb923aa32f897f276dbb", "146d5ee4459fc6154c80821b14eeff31957500a6a628fba84f717894145b2147", "231a048755d9dd11ce956443b6857675ee30952bf85e9f5800c21d1924ec82ae", "058e63d8b9db30a495755551c84231c2d3066ec2d566054d357f56bb1bbf1b92"), ("2111d10f92dbd2c5471d2ef547a813d969b0519156a3ea4920e035c387b4c323", "0c0b218575613deea2bb59562fd6f924f8078d6aff729bf62dce7a1bff0bc642", "1e29f6099b5e26c4d7a2b580e81f7eb38a96060d04384a51ce95ee5f62f68019", "1f7d735fd32050efe8df0a9dc246d3cfc5a29d80ed5af0a11c6cec47400fff8b"), ("0d978d45be5a1850e88494c4e83efa5893b490edcf5e7dd3cb36fb3d040a5d77", "1a41013cead0fe356b6fda1420da5c47ce9a8cb55f46e25e0b9e74348b5ceacf", "1c66ae67534f42e779bf1071de11c15793d0882ff88a97b280e060a1f1de02e2", "260ca4f0fb3f6ff20b297e7b355303e3e53ed2d0fcedecee4717d2bed1a9f009"), ("126e8703449d082308e13964fec0431eb2cc9d8f9e8861f6cdf8f6f2a3514bea", "2662d14be352ab50830e0a1f2d811b37ae10c1572bb740a1968ab5aa6c4c5959", "1b103fe1947c9752a07b8415c798dffffd034239eb1eaeea23b6e1bbec28777f", "23dd970423151d08221970d65817e0e307d1ed70cd2baa19d023ad872efebc33"), ("0f86632f28bc102dbc6ec5a97106540bd6a9fc34659a9a00d05972b99d604b29", "1a479d11a5122d00fef92132a55b9fbd975d80bd26c3e29bfa52b883f588d6f2", "1005aa84b397e334df05ae16607247feb27ca8a9e31e31ea650e2fb0f5ccf10f", "26f11bff49edd171f614cf23d0da02fe5bfbc1a8165fd8404d6e52362562cdff"), ("1f7a1866a4afba010a15818038dbb6e514569c9967ed121a4038c3d5a0bec8e5", "2d4ed9fe3f9f932c8e77cc2117466862ba291006889311f4a0653de2ae6bdc5c", "2a35c3998e7a61ab25a55d44c6e78431f26ce8ca4e42d5b6323dc3adcf4f04ee", "0d7a95d0682d82cb6a7fe179cf6fa4f7c770b3c8f486b326621f0cef6eba89c0"), ("07fc019434cc7934c97d7fd44db5ce33f9b7244e002facc535a5376af2fb43dd", "1fea5b2218c13b57fbfe3116cb4b51405a13b8ae420cbdaaf31da8bf9c14d125", "1ae4ac896bfae718cb0fd1b9758414a8a3534457447f044aaa40b853aad266e7", "12f561757c2874bde8fbb878f0156e249312b6a4c7121830b1862c5ea92e5e44"), ("285b8c9603428d9df1753e9bc044cba3861a93c0e5c74f95e2bccb702992eb57", "011126247c0da1eaf24ae721bbadad0269837340a4b02fe446be60961df304cd", "08ba679231a3bc2e49b4f97e6aeee918ce9fee3987696cb3f4cd651efa8a87b2", "14fd9c5dc0f522a4361dcc9e102f6ac8835241bb33a2ff35ffa538a75d0f68fd"), ("1b965fb91481cbf40caaf56d17c70d84561d56a2b5d4aae56d41db2a90690e25", "2041b542fbf41216ac385e680558876f17420233920537b8b68deb0f2ffc21d9", "09bb85d988f929a9e12950f49ea3fa1f2a73134deaccab2a7fea7975361ec97f", "06fdc321e51ea0b8d49f49e4de55f99e629c50ef0c15156b04376bb3212685f4"), ("254c1be484a9fa591d5a960f510272aba2b52e4ae14b4c29e45b6516b15bf7be", "231e4a117dd594c7a433342b721933f5f7bd21a269a5e0d286700143453e9ac9", "0d29e1602e65a8c702b19fab59d0aafec13d02e25096596c2cd66f67e91816f7", "1de3d622340917088c3eef27d9a6f9e92e86418196f19be28221cfd786f40015"), ("0a4d93f5ca460c31deae2fddde3abe1b0cc3eaee7d84866cb4f30afe45752e1c", "009efe6e96523c44985f18ba7d6185d1aa8ba16fa0676a92cbbb7ac92c36de94", "12fdb3300259d960757b34525257711d26ffe1a8eeb00d6bb6e366abf61bfbed", "0c220a3018e081c8fbb1ab50ee7f181555fc323778f673b516d3d678ba7c498b"), ("1496bc7426d6a00ff03604cd8f7c3946dd8074327b799065bd3c0448755e8eb1", "1866d0b375365d34fecf583f34e913333da96a33996012be9d00be892f837587", "235e4c31eb7af9058a146bd79057f61bdd7d90045227e098cd2e9e0d38293c5f", "0c207c3d3a72289a61397b495ae2b70998bdf16bea15e8a7a2c82791a50cbd00"), ("241422e18b7e7e894be0bdced0f56113dd58ca2c1dbc984bb2e0e166ad2a89bb", "27cbed9a319301d48d6e56fb252b21c0e7524004db377133fd5fecf328fdc650", "1a1ab8b8b61548a2a48c54fadd59e58420fbaf6ea741a90f2f78f242c5576acb", "03443bdae98727ef96a07230478ae880644a53099c75b94e7051b4991c94cab4"), ("22a58606a8711f5ba1dc4b00b8de856c54680c5ff184a2da903465297233ebf0", "22619e526f9a85270f734cbb8888604e870555fefc3ed480d1b91a4f66e7256c", "0ca101ee5f07ab9bac7705bd9f6a6e6d9c1b9b0baa1ee8144591103d09058562", "23d250d4491002f2623f86c7f259defe46925099edcdbc123e1dbf33e8a869fd"), ("129cfefece7fa28cfbb7ff2553be3900b3bcded73291f6e50215fe94fe6a45aa", "11ca115139954135287689c53be1ae94b0ef6994426fa965d5de63117e6ed2be", "0af956709bddc7f490022a3b21e34552e7f27a78fa85b7f7727b13c86dc71202", "1673bf626351cd3c164ea7684d2785e0dae09c987d11fae6eed9262c9f2b5abc"), ("080fcb6d9523f88e9402f730d2dcb2d441311a642bef010dd0dc2bbf26c529e6", "2f525a0f35e031a47d6b02d5cf4a8bbb504c9fcf7184acc776adb88b462460c9", "24304d17ae7dfedab1e7386468591def4a0169d1b75e8679457ebf04743adf7f", "1a883b4f012d2a7c2853de1c92084a595cf2b556bb1c95ae9b3e0712c4760492"), ("1e974920d787253aa3d1c58a9938ea47bcec2f99728a6b114f25d8a66655ca54", "225a3278345e2a170c2ceb2cff642f9b5bb8793425bc1469321f1304b251fa5d", "1334d700e58a604982c4a94a99ee8b85ffa2279ad0c07a047e5a7576b0e2dabd", "2e7f765c5f6c7ddfd72b8b926cb61f52986b8beeec6664e86a0b8fa1219443e4"), ("2fed6c11787324035642a5f48f5ef5138d65c5a7756e184ea9b0d90fd7168113", "1b714359b2678c78a74d9456c4cbe6692c91a312e640f4c1d4d3ea3540832c61", "1d57078263ad1d0b9d1e924a542685e51d92ab7c260f7604fc937c7724bdac0c", "27ca0ecb765976730ea25fc695578579d670a35ef2d5623c1818e1ee84527240"), ("0ec4376fb825ae79fc48ceb3902c3877206e1bad1f415d2678fc4fdcc16f4be4", "2ca53b937a0546614f2881742ac6e77db85afca0027406f253ffb586cd223d62", "14634b22971dc1abbbf6907f33f349a7ab5cb5b0ff753c8bcdc23224d749a4dd", "15f06e573edbc6eb68fa4e0eefa6def02a9c9120b9ba474609c7b30427da26e6"), ("22e6d231e365fdc64db6273a5a60c61d61599870d9be4d2d84ad795fea40090c", "2e851b4beead43b7c98e799894fb5b32d457a3f66b40cb1e3ab2652dbd0928ef", "19ad965e5bd9cbc62d4273c61deb4b2b86bc781d1bdde802204311cad4f7ef49", "089df9d36a912394ef952d78165b89e09cc05d44c97be655b59f00053fd7b65f"), ("01830ee4bc4a8591d346970b82a93ac219b969ed2f001b18fff9b02fd29684d8", "2309e8ff07b4bef8e28a20b6f09c127c1eaa4ceb7472086a8e54308fa1ab3e68", "22470d1bd99ee7e172a738e9c65741a72728cff5fcc11b1acec8731bf58841f1", "06bbecf6bc21a4fd09a3d80e9529a8ea1507a6ddfba08bbbd84b21cbdd8247dc"), ("23fa14538bab689ca6abfec97b659752260a8d312985b48dbd6f15a7d9c5b4e9", "1a6bdfda78948415c216e2e53bf96754540789421e4c640c986f8ded83b5b201", "2a7b01336ab558c7090d522a4a98d11db6b15813cc09281bfdaa65bc1d9ebd58", "085f5c85003d43e62bb37e8fdf83f454c63a8ce707b7456f273cec2245482fb1"), ("18c3e733f8009c488368b7d56520141371d52968956802a9d1d8ab88f2c87b3f", "08dd45595607bf302624cbae1021cf282d1a2a8efdff20a22d27f3999b0efe82", "24c328178fa4c10efaebb13df2f433a509a32498619bac9c525d2781efdf34cb", "201e3dca9792b0289afc2deeddee9ee106d8aad6dcaeef82a6964e40556d90e4"), ("2765dd8b0a8ab6eb5138a904f7e5d5f27a5f23d80798f72bbe319b9fb7b562d5", "10ba807c5a5af005e8e12299db6b4c747e792bf9ee2a208a041644b06f8955b5", "2b4dd4be5c69cf93055affb41766e46cea21366d727638ce204da4b628fbc700", "2cd36ffb9420f0e9d6d9f9d89dd1b9f293302977e0d2c7a13d1feb8fbe3166d6"), ("0e70cbea67adabb7986ad09c550a50fc0ff3d49f1ea9b736e2de88bb7db1ce38", "1e88f8fedfe14da6d5d3c719c0c90c02277fcb61ffe75955c95c4a771f5590de", "27e785b2538c922d09c8527a90340c4bfd025c1bc89f4118b58f900b03ea3e3e", "21daaee3c39b7fa09b6303dc65c9fc1de951d08e49ec56068c7093f2ac3cc786"), ("1302dbdfbff5494657f2e4658cc72eb52290f1cdb8036c856edd99f66635e5f0", "2771b53173d5e663db206f60a046839a590bb84958e198fd2e80d4d090a252d1", "18040dba690432959189a626ef3bdf4557833ba1ab71ebbe0efa74f9ab9a3acf", "273750a89a5bf680b1dec6169331546dc4bf1b70495455aafed04969886a9010"), ("0d4a686f70a420faa42bc978d0a446fed6a6b5ae1910495d3d95ded417095b9a", "09b1158c7912c2495c54f583c341d384088302e870b17d682b7e5601e2d802ef", "26a16bf7c2294f7f8ff308cff82c3c4eed4e708a4beb8b526334cbadb66654d7", "134fdb708a944964570963c98fb4ccb11d8c3b6f04eba3b0470819c66172876c"), ("1bc352373edbd7839fcf0953f5a05611323fd17fa6e9eddb5609b8392c4b0bad", "26f0e59f89b1ae7bfe2c6e9ae19fd1cb166c958a796b57c5be135da6c9f8b46c", "0f6f1de61dffbee50407bd4d99dd119bd8377d08b7b669b1ba1d9d35d3b002d7", "1f81cc121feee6eba3019a60cad693c6377ebaec3f2fea2d092d44655a362585"), ("0c7cafceb84713628dfe964ee8c1548d650610f7e3631173b2b235fc87d96db3", "083deb457b38e128e709581237a199b595e4639db5a47fc42313348c4c4096e8", "2969e9d07b57a3c7e15dbbcdd580878ed7eee716ed1e24b5e60ab5c869cad79b", "2be18774f9e40dfb410163b9a49f9074f62d2cc414c55bcd5aaa1942d3fab00c"), ("06dcf818b58275a42a774d777d296f46a7255da4195582697c291e1c0a0ce7e9", "0b9d17553be57c19e6f4c8a3a1582059659e25802a7145eb43455b862f4a9761", "24f793ddbaea832ccdc36775a5aa3448e1c83a51add5f84feda0ed09bcb94e5b", "1fe0817240c996c778ab0815a2814b48c04902e0db10229bfac7ae2d8c85318a"), ("072462a62734f4367184dc58ab7508642f39e4c3227a05b9d53a421acf9c3b25", "227a7d4ed77d4e8c47fee98c864df3ff33125fa83254c44af674bf5ec6a0bc37", "1ca8aba3bf1e1a33b1aa7e5964a890b43a346e9ef66f7f6f7182a115b967882c", "091b56bbecc26e0b9a0f47ac4cd2934eb26c736cd404837a86507417f55d10ce"), ("2273aa29d17b9866daa8924adeb9debf0e7d0c2b7be0e02128912eb24a4ccf25", "2c990df26e8f6343c463beaafc6d88c379f04d624c42e41f4dbc5a5f531048cd", "0795b8cf960ce89055cecf74796d28e5896485486a5a2ad311bd018324c7eb9d", "0716ce1e96e6242cbb9dea9a49cf93333f81a8a82f9fe16e0f6c250fd056ebb0"), ("0e16d85625778d13a2d777e6cd19a2fd81c82bbe222cce25ae67383621709212", "1941b1cd26e2661e91bec7781c1aed45c2df58bca88182381a795880a00eb180", "08b9586893f6a5216bce45e3f6859a943e074ef801dd5f7cce8380ceb2e07b79", "073b94ffa44f640c6eb8556d73cc93f80e3bb825d44708827e6d02f2ddc918c1"), ("1c13d0cb2e10a8f54122311f39395fbcbd58eccd3041616a8e5ccf75cf90a948", "269421c4221b1aa832b787a34d943fb6caedc28146ed470f8645865c1133d41d", "0e12163d16630a7face82115b015330ac461270bc5b8c649bdb8e3aa66593d61", "2ec620c2062f7458b6956d83721546367e370c1ccb3a4ad2fc1204e91ecaf3f4"), ("1d15df45951f13f8caa0361c08585d8378838a05ef81cffac3739e0aca0fd932", "0615af692dec42495e4d36e3bcaf3a25041368ed0234e9cda1d4197a530ad0e2", "0bb328137b166937f1843e4ea7b9d265477d0cf03baa360a52d3db4ec5cc9480", "2e7d7faeadaa8574aac514ebf2f77479279327f9c07c47bb646d303a11930081"), ("0f6a1afb1c52c36860ceeffd3bdf854dd18e41d2179963ece05b69b98e3fd5f3", "1fea6546ffcb3ce50aeee599309d43d0f3c8fae105a9c97cc1bd23566e4f5ce2", "11b0f284d44bea9efd8c1b36b96d2934c1c3fc74aa5d530df81eaf1f03942a51", "2aa0fa16684f0f45df1553dace6ee80edc920665ef2d6c7c20d1287098cf7beb"), ("129048f7a0fbaa50c2492c0ac3c706bb415dd7cb7244c2e114502c0a800d33b4", "1793092ff7244f8fe9dbe2058797e09b7a7cc998a3627aaced6efaad589d647a", "2b2ee96b0ef337b618aac202b5afac0ba9156f6a0cc6c8deab95af1ffe3491a2", "1e3883cc0adcdaedf3f3946a3db2a74b988ce99f53f9445b909ca28c95ff6977"), ("0a7d8646b0feedc7d38daf0b0b0edd101bab54a47e14568e7b557b57bdc4343d", "194c6ee1074f68dd74f3f61c0560acfc4618bee04f469be7e648ac9cac3e9c36", "0cb2b4f2b1efc009101c0a8be214e97f3163c2aad19f94f0fbdf6806e22d060d", "2ea2cdbc4acfbb999c67c2a6b256f3861b9637b28b0d91a030520d67196c4bed"), ("212b5f28cced03810ea3813250f783cbaa2e28347f5deeeeaf789d4d80f009a0", "08e3535d230aee5a0f6f930af82f51633a3d630936d55c3b6e0dc9bda7e7d561", "1cebd933e4d6647339380105adef833c6892eba7b503bd07218b228b454b0ba4", "24f598ae028ca8d4a744aaf35eadb864e87ad4e7b93f27bbc041f042ed9d47af"), ("174b5a23637eb6b30706ef0f981cc17aba3d4a54d1023edf9441267fd0fcd2f6", "20da4cd7496dccdf7673841fc1c1e6bcfd7d8e42b03ea7e57a92c4df970ba19b", "24b15ab4eeac3b6b5e772e0def8b20ba5294828bf9b853fcbbe540532afc323a", "19cd0be00caee84a038011e3c9aef8e48b64b7acd72cc6eede8ba1802a23da41"), ("29a99f34d4f19ba09c9730b2c429b46336164fd11338a5e6c360211fe56de38c", "159b350fa71ec7955614efa9b6db48633de534498e9b969c0583c10abe442081", "0ee091e4d407a59d94681a76c2e1d9bb192e35051322b296e836c3963b0bf1c6", "2a990147cf94e34f27b30a1715f80558c956403da3dc6af3ede3787513e7afff"), ("0f5d65e64b3b018358b6372ef6b9324a551521ee6108bd095fc87b937dab9f38", "1f34bf12e6c1d8848666954e74aa7f895e58a6af3c79a18704105b904c760032", "0e2f66bc10e27f0e7e208fdd559195a33ccfe7d55fdccbefef32d27d05cf6b79", "25ccd0208ed84b72a5c9d81bf893815949bfc111ff0001ee2fffd32436745095"), ("2ec402c8adccef975557147c0be0adb62b07d6659e263147b403c85920ad17e2", "2cce05b4f0753a99bde9aa708da6891c215921ea1ae23e076d35a9df10facfd0", "17de7e27429bf382173a03b3b4c24192f5ba4d8e0af5d87fe7f3ac42355c7ffd", "0cd0a71c721c0bbe3eb955c8bad7c05f0436e406341202f927ff143fae3c0b3e"), ("23b4064559f30ba05e0e0f2f952ae64b1d6d5ab1912c63c22aa6ec2664c7df1c", "146a149dced5d3e3ff6124ea232b3de2aeb63a8fe59d7e45961f3cb8d6d8532f", "033431b723af4a5b902bebb3c13d5dd2a8c46a62f70caddb243d7f6f779bee49", "15e684a591777e245d6c8a6d5686560d9ba96fc3e6096cbe66d7dea27c942cfe"), ("266bc63174f85b90c3f101a306d35a9e19643b261bd68da4b8c463a2907e3e93", "25ab86bd51b6c7359a3fb9a04e6fc46fd2082a98a82c6aff749eaf30d13feb87", "168ea6f1237d0d6dd4c3191e5dc1bde4540d9dbb84d389d1705fb26223e5e623", "2bd010b33dfcc82b12f188f3b155e44249eb4b0786d654697785cb43c4cbf5c1"), ("1e3f6bcc145c063029a3d36bdb4781aa16c25b1d24deca0459ce438daeb04680", "000731b5ca76f4e55a4431fb557a35205f46ca968940925eb030696ab3b3dddf", "282bdc9aa808533c8c029dce335a96c5a3aec9332d6e03a8d7df64c12e2a292f", "03e25b6df7496d0ed383ef6fcb04eea7f3ae85ef3abf89e70c36e1d88b3eb866"), ("17e0ce050434462c80d4938f4ff05b3c076375c6d18f05065f4d8103c4e56c90", "25d59ba50de7adca0afc8678cd24847c443002dcd8034010aa1e6b387895690a", "1b701477d824c2cea50281c244a9781965697ae683fefebecfd07de9e3df06ae", "10b41b66676392d0d6bf12d65846a6c76bcc8dfc540ca68e91e1cea5c5d688f6"), ("2b3cb52adc7ecbeed445778cb51ca4d3d55c879a8caae7bcd94d3edba54b48e7", "0135c04df04cc3e6e3d5027e31942c969df4ad9a6ee57ed043f4d45a1293cea2", "2b07324537b8773a8e8c376fb0dfd4eb4675e9ebc278476b5b69ae9b5d1b0a4a", "2ab51ac6fa3e399f411438a805ff8e40a8b4a132b0b1e4c25acfb13efed1a141"), ("1f2e3891b781e51b1c2d062dbab00b24c182db18dd2c92a8369b6b9e7a206d56", "12ebf381198b81d84cd16504a7bcad65ea2239d18f3ff6f4b28b30c3b3493aa9", "2c1937b104ff420e56fc8d3daa89191cdcb8079b15f4c7cd66f042e8a28dff21", "07578d69c55710d099ae3f9fe2315b3e0aa331d819ef91a45a4b65ce6ce9bf6a"), ("22e0ddf3877d7085ccf0ee50b2d62fb27827dfd466b806b3bfd94b5a7b2c4e7d", "12166661d1cc5634c1a57d61482a0d4f43057054c57f15b9ea2a90ec4603fcc2", "2aa1ebe4d3dd11b0a2640c5da17d2aa69ba0f6e71df47f0fe22bc80a755da456", "260b83af27d4fe5a4f415ad4a454bd6c8113ad6d6537378664df7b812a1465e7"), ("1cca60f8a3e8179f7262edf4594f2a6df24c4efdf79060bb8fa03569fc614971", "20092359467abb31df6dbf369caf814c50ebeb6065bbfe56521750cefacfbf22", "23f86391dd5163e3abb5aa3b00145c7e999346184f532541cd8abf0ee4ecfaca", "265edfbe5a804aa17a2a13e5759c86d775b219e0ad7a27b1b3dd5aa17b0ca94b"), ("2cb28c7edd954d1e2c9c6ed304cdd50a90a4072458d20ff0f1ff71d2cd1dfe3e", "191f8724701da0323944a58508b6dda617b5fdfacd671314775bd8b1876a6aa6", "22119e5c371c73aa123b79332180e926c3735cf927811c835b8d4d0e028ec55e", "227ddbdf26bbf15cc7f92d656e3eff8448d4c04ff35ecccf650c5572dec7fdee"), ("15135a2467cd0d6344d7ef9c56ac351fbbdea8b0c7b4e4205dc9c89d7b60558b", "2406415810483e07d87b4403f5935300461993ab582e1e78ba0609d69ba94608", "158c8b6c81b215a5f5a0e20d7d173862d7d32bde9369b2e6c3e1d2541bd773e9", "29abf0cd8b8fe8a782817040512af57762c5292c368d2d70698e409c123145c5"), ("121a4c0ea6cc0340616124e2e0713a90868723703f36bc7fd0825f744f7c921b", "0793951e08ebc617d0ef49bfbc4efbef972d88dc3e2a3474ed527206de79db95", "0a03ce3534b13789bf72308a918c0066ff651cb101f07f3198357828d0a2df60", "2f10f428196f769eb3b82523d5126dfb35e6c492aef44671137d939e32fbb11d"), ("26918258b36aee11e203906fee112bcdc9b194fd25d965d44016d174b8c6ebc4", "1ccc9c2a4aa2fccd70aee72ef31ecbfe7417ad05c50ea779aad1d4defa95b3c6", "01d6f0f568301f97eb49477d4e675360bba7ed83ef84c0e8c7df10fedf3457ca", "05a30cd97d5e35f058a0f5f1ca9520a58099c2a59d990b45b275bb11416d1076"), ("1b4c841b7e56b800be9078edaa89cb832914e2cb5c22a0e4abbcdc0706c8391c", "143526ccd0cd9717e71b1672180835bb0eb8b8a08edea79bfafde59d79ecc7d4", "2a99629e5011fbec1922db91e661982e661d5c481f4de6433b9e92a853e4679c", "126482dca87405c7b2c0c36f5adcb880930a49aa3ab4dc351aee39fa33fc011e"), ("2ee70d27c0a9d18edf268b424efd49082e9dc092ff52c52adcb98bdd02493f09", "193dad8f822c23c385585f77de4c8bac3c6b1955205029e9a6f179163a796fdd", "1d7321230e0a44c839f3681e4ae2c6cf57cdf700efd024dc1d8466a9b35f0410", "077d6d71cfcf21abb243e746954cb7faf066fe5d9b26b2fb02772e63c208d0e6"), ("1b4e0059eaabd7c531b3f2bc5609c97f4da50bcb8791f6452908cbb1f5dad087", "0148f6ffb794d4c9efd31e834942b89d008fd4e74cb0146b5101080d1308f935", "16b1b50a1da719f874c436dc770ce12f5fb4cb0e3c92712bb7e9b425778beb57", "030ef119535e3780980a3417b0d968db0d4b5955bc3212f8bccee21a7ab856eb"), ("1ffd727e33f35e28b7ad3b9ae13a729bbf328e3e607bedc685b48adc02dd6721", "15ed8ce5639145648b11453516037f12b494aecafd517c7be88c4d7cd0123073", "2be30941761cbd32d148bd2ce11e1082010179c53606d5b80b17251e8c98cbcd", "10b82decf61a7b07fa16920243abc27652d9fa7523cc96a05e5504df38b7696d"), ("17b6c48e0f559dc2aa0b8006a7d9787e4b2069725d38b191485deef54578728e", "067cf3d12ffc4243f867cf807c6df67a655aeee30451de920843fe4b8bdc1960", "254cf0fadf4e5d9dea117b6d78337c281bc2725136e9bf96b664190d852226e9", "28420d3e13efc71ece4190e38373f3127e3ce2a7c03b20a6161a5aa2fe96f4ce"), ("0c3389e44ba031e52422f4e197297d1b745c1e1263a73c6d0894d88bba969326", "1f471593bbc5e2f8ae28e286780b05b6bc5dc6fb9763a4bdbf215f62abd723d6", "1c597bb3a7cd548f8b30ff5441676abcb9a81b032fdf2d1105f3108bdb6d5b56", "22b11443d12bc18bb0c2fa9def6205255066ee7498ce5b2093a77653dfa69738"), ("060c0a42bfc70dda547be433b7c94728b8207b250e1639779b4b2c59bba76377", "2d2156e2a76b6ab7b511f536d65923744556a779b5a6fdac21275c44f5dac78e", "2356b9e28cbf498e2be549f089fa3c26a8a238d5a84dfa3b59c993136ded11d1", "0291b22b72a941232e7e129de1e5368a527af5845776805712db08dbec78ba57"), ("1a84ac7ed80138c425070559f056b29468d37ebee141c6f54c59575045da2303", "2abba4b65ebb9d9a831bac40f0d33a31e239c45e39f457b590d8dea5d3d0d6ad", "12b4fee6ab56467dc4dc625e4a10d6fe29c871f229328a29fb4b1267c871c6fc", "214eedf92ed57417c72a7b1758532e6c80902af48e640251d5648ace582a2045"), ("19d4d079782080ff9fb2dfcec165f4e094c760c16dc93de4cef0afaa43bb6428", "1c0a4cbb0b2822a012558648fde00774cdf2d72be3c9f200e15cba73e7d8396c", "175bde863d84ea4d4791839d1d23aa1404e17339f5614e697263070b894e7e68", "15b1b3e6fe1f61383b60bf24a63dd45d3b16782a8481aa985a1a0899692e2781"), ("2530d39f6d1c1625796a14ccbdf57b4ce4fec3cd7de68492153372ed2a8b8cb9", "19add36e5af62c5629df7e5baee7768f9fb8e32f5898e179dddd6a81eb6a1bbc", "0da3f964bd9f6e0f64b5dc4a726bbe47a85f2b5a0e62383945c24adbd3239805", "06ffb3b590f8a3bd171ce5098d870d4f823eedd1df745c51580f10db3c2015ff"), ("2fa00eeb5430c08f554dcbded444daad8d236dda1653f3406e33336c6c3817b2", "2a025798a662543d09784c0172d553ccc573372c142171fb53502c589322cad1", "0503abf531379ae553e906a4f242615e47eca511072c4fa2e0ff0c81d0a087a0", "2b03ebe6db924b1b2834c272311387a642506372a6a61a5ababfc9ff13fe6e8a"), ("2866e5c15c89201cbd541f811dce8b5d78b89371246a4098c13662f2e3b2580d", "262b624dc2d7cdf4265f723ef0a87483c5940b890de17dfc1969575d356663fb", "11afb8ddd152637c6a3d7a513759aa6b61ec86285a3590b8e276640bbfd329c8", "17528617148f049b0f37e750432e0f646f4e358b0899d52bbf6cb4c824e26a84"), ("21a47a0c5b57bec50a64388d569073c89b2a76e781a5c36cabb676acf3d6d343", "0e5b77ac5d8000cd9ffde36a13df7bb19914ff40e7d84ebf4c8e82d96050f040", "2eceebb495bfe5b17d796d1c38e4255bd590ea7935c105970b70739188d9bd93", "19960ddd607eea48c93696dec0955e40e05010946be1ec8c1bcafe344bfb6f95"), ("06029eab8d6a8f7f48a9ebb7f3fda71d553c4739c1044535db2c568275f8b5d6", "201c51b0b2b1cf4285608c54f94944f7a84306af55523090f2a28318f26448c7", "1fd55e143dd3f8970ff86f2f14dce6eeb652ff09d53dfea269b4eb61862d1091", "0c64918a72b979e35ca21edc2c0e0b488af148f94fdd1b74751710c94d74dbe3"), ("2ea9f861c5b75f35c671eef092d1374ccfcf8265a8ca01d2ef152e16ab1049e3", "2d753688be233b11df7207f93c42b3af869f778bde7636b7cc5485f8acec0fee", "0eabf0cc68492b08a383fb688d781d0bc94c6dc28adcc4c7bfb3fcbaa1199d35", "2d8dd7d367baee7f1cf1196a6524699dd9571f51463dc0dcc198a255c021ec21"), ("0bc61fac5a99e6d9593466171347695cf17185df968b60373421db5065074377", "2a10f9e256b87928b4e83649919afb00210094b205114315f1a7cc05e9da9586", "0571af0e6b42c91e404cdb94a8e0764039c7a2eb8434fe3f1273962b191265f1", "0603de5a3c2db555f23adfc8f5cebb180a96e3388905bef956ca56ee6b6e9ffa"), ("08f25fefab867ef0a1328a44abda34137724ac041b0b2ff6dda267fdd459e285", "2f262a76381a3a4d6e0f773277e0faf6a926a905495b50e5126636b24dcf3874", "134d9620578d3c76c1091d22afbaa8264cbd4387ed4f7e0aac48f456a26e5677", "1b98c54e8613e75f256dac129abb1fbe67f945ea6605543ca5c982f48fe8b5bb"), ("2094caef102d514438f9e6d22289c3613286bbfdef0cd7792f971458ba221670", "109b94800e030a7216973a96c1f6c425ce198cc1e4ee9face27d45cfca4d1c4c", "01fa5bc2ddd5f25fa8f5125aa3d0850ad5dc323bbf691c79c1e12c55d6f0a291", "08bc063468642094d0c116fb93a34a70168ee78543a86ffca138c033fc27ffe8"), ("24750abb874d28586a566c05b3c7cd80898c3ccfff59a32f537c00e712a0b94b", "0e899b7dd343c27cba2ff898d3d01a26d836fc3b74051bf3afdf4cc5b11c11aa", "120aae629f0b798de2dcdf1e71e99f3e9ad8bfe548af6eb7153c9ca07a0ef294", "24752259d08134667b7548f24e3ada59998052101fd012dfce3e4427c499f3f0"), ("16668efc3b28bdf9633abf127bd72e440d1018df9100566e4a9d5349401807a7", "24b31d5d9a3dc3260f4b485eb317a30377601fc1c3f5ae18efbe6c5714b1e327", "0eab7068dd78d021e44552b7540c6fc495ad22471a6485feb3482269ae764a56", "2ae72026348f5337d40f834e55c8a503aabdbc885b797f5469d082e1bdf10914"), ("1e59606a7eb7f1e1cd36e3d18e9598b3fbeeae760fe95fb94e9414c036967548", "02a7bbadc2b8defc35582aabb9666487964a486c0fcaf7976431057975feb131", "06c62cfdb7c4a39636fbefebd311605c3cbe447bc31870fb9e62136b22a71f23", "114b5afd54118c1684169cab9bd6d2c3516abaef88b9e053717dc720a0aa1b72"), ("1df4c95505a0424ac3cd556864d2e74c427af8767a28250197135f695736a109", "16547c07beb882c4a0386a5fdcedfc354b2f80313bfb8474170a2fda8f5a362d", "2da5fa97a66284c7da27e5ab5b4659fc25bd17725462043d564a0dbb14c090d7", "2f8172e1f9e457f250aac6e085166f9e558e4b0de1325f781422e1a76e2f88c0"), ("1945097116c03718eea27dccf1b1e44975b93cfbe8c9d743e9d25fa95683fe7a", "2b1e839a77fc6b30175b3927fbae24fb843ed5526f2b37b2935da83112f47fea", "1ddbde269e54751ed2450967d6817a8c5d4528024a64c725ad21dc4cbccf7651", "103bd7100c354030be3725558c23c7995c6115bd27523372fa7fe3d9d6ce75dd"), ("2afada7bc1113efe8ae8feb8b141f9ca9bc22715e68690e5ed8ef5527a7500b9", "00f5205883502d18a763cc87083ac4601c78759845078de1bc1c3137d57cdb69", "0aff5341b53688ab12208c9c61674b0386974fb7be405374e85a08f6581ead7b", "01b371cfc7a0613f2c0a7cfad2f67e889d16015e673e75bba25df27e82a808fe"), ("0344dc9c819157f258826aff858f6f24c20305b6b096b3a047d4e9fdfdf49af4", "007d28fe3adebe19a4a6d1a672128afb0844cfe9518063e0c1f94ec45b1a807b", "1a68850173fcdee4ed848daba5908ccaa8fd8af199ae9762c93cf2db6c87b554", "0784b0a77289f332ad157db727df34a26687b6300e094393e8a44978e21adbdf"), ("25148ccf1ae0db1d3f0fb8fb22806dc9fac58e1d93c634b5a9746b3a94b317c0", "002f11712f3cdbf47c7184ea7a456aa19da371ecaccaf21f69f005295de1ccf4", "0e300ce1204d920c58f76b16890fc2cd31ad8c91710d94fc6a888258672eb291", "08e8c3b48478eae82c014c7cbd025b137bb61a6a24ad8827e4c502122c5e7299"), ("111c6233010d9c53fa2d33aabe09a01204c77aa02274db20f9f6c1e84837a46f", "2352feec4cf09f275e95f94fc827e9944fcbab489d83bc4a45a4232389c78057", "211df279ca83f5e21ec37ddc2910eee340536660ee64cf5c87d07fcab3be6027", "0dcf875f118f758053c19b2a13af5116955b61810ebedab3d0fe5bebb6e6b35a"), ("302f891169af2b90976797396371c9394f15d560fd87f66079bb9d32aebe3282", "2338403ee244930d4a05923fe2fd2ccbcc55050339d05e54c721300d7c868cdb", "22f81e3109ab4970451f35ba6bc452e6ad98cae7e5082b5a80ce2f698094c59e", "21aad83190eeb231e906d3af4498b6a1798caec4d587a749cf484c643b9e8eac"), ("0e5e6f0fe0afe76e7576ba01ccbd31e1ef925bcc160a1614deb327d1a17a4f9e", "1b8d2b1c493800eb21a490bec786e6cad60f9b9c18139f6ae1014e9ebb2e560c", "017c172c32154ab686da68e69f1b4680ca2e0142a0536b4f1ad3957f75359169", "29c60c8645ed37add674924702a8a2a28b06f0ab90aa1ddafbf4edf7dbd32826"), ("2266eb815e8cc0cc5501ce650f712674c30e3adff01e59d5b4e3d9ba78bd72f3", "01e207686386cf8732b3ba937f7dce41a4a099918b9310a9499602e7e02879fe", "18900ecf325873acf99d35f71f49d6aa8b957eaab66358f1aed1842e67c8dd12", "1a4ea3869f0cbe93279f1551692e0f4363e16cbe83196f9413a9d89519307f65"), ("22067a4b9f46897665d3b19b38f4d9d2054c9985e6c78f53bf1f718d0c0fd1ce", "2adf016a2521583c572e68f524e1e3ebbe68cfa8966bbc3f9176b9f54dc38ff5", "0523185de6e04c207e8edf97fe4050a355c0c823771ac92da34b06cb6a473794", "172facc5677041268c857854705707b2df6142add0e2ebff50e2165b67823944"), ("2627b6868488c7984ba789e863d3d0a4c6e353c715641659737438ae75af0aea", "1da752a84800622de09210b3695e54363f59cdab7b48cb59ca5598fd246d91cb", "0e05e016244e259b84cb8384845e986ebc5516b97079804c841059f4c7d3a538", "20031f149e62772862d44bab59267bba7919b8fe6b12668dfd12caeeae4a62d3"), ("101f1d7d05506f1870b72ae1b6384ace237b4a451a7b70cb50fb48556b441dd5", "299edee524a39f545c19200758c9a4dddc4668cadc06628983a6d903a72d15e3", "11dd75eb88a7836e9b67a7a3a753d14826ef882b832d338d5be30ec771e71bf8", "2611b5c73ea1525c8de9514af1111ea9956003cbe67c72fba6e79251d4a3facf"), ("0c06ef669fedb077b883c0aa9f43e87125e9c769717bdd2c26eecd8ec4bb6e0f", "13a8fe2ec34384e4d203f21e0e0d1f36bcab3d36bdaa7925f27bf068a8ac93fb", "11a2377c127699260e2a36bda04efa988161b40f871ddcc184dd02cd68c1e6a8", "2d30d5276d29ac6c3d69068278b33447da72101a8605c147b852aa190360bcdd"), ("12fb88818435d803dca78435a4aa482d861977289cfbbc1f1518d0bad4f17289", "2150313b2caf85a03a85f5ca11ab9b8da0f85b7bb43705e0f2952615d5ca3bbe", "1814db5719d7510dfcc1398af569533446376832fff704c219b247ce70cd95d4", "1c9a4123b49119f99698740d234c20c76ea6fe52cc70d9a09a27a57396954e91"), ("2dfa6fb5e9ddc9d267da595e06ca027baa9a07935a38c732b421c56111ce211d", "2b6f0efde1c0e68ab82a01457eb90acfc0ad2d66b56e44c23a61a2abd5af2552", "01908ea685146f213511196c73643187c6f5a96af36ae4fb36fde44b663554ec", "0a927aff4cf2a385372dc4d6846516847864afdfa128b50263844b06f41d8c66"), ("010c74e5925c488cd3cddfbadfd588361d6197ead7b2d9c439c179cdeb20d44c", "2f647eb00679f812d3fbf3894269403a53f8663e33e4026ada2ebe0e338d6e36", "11bb919280f9317c09d0b7f16622ba7b7737befff74be5ca80289d37d54a3320", "10db0599a1dc1c54be25c44d0c13545cccdcd2ffcb07820cb06acbe230185935"), ("0b2e8f5fa59715a69f166d1f8d845d29fffc921f7072ac7f7d96b31b56f665fc", "1afcae628a118917d84e8626f8b8d5f2393255b0a90540e8d42ae8733515125f", "2b51550e7c90b04e373c70de580afcd3a39d49231278148e837febe5f4b02573", "23cd8d81583aa9a05ada2df76fd40be292bf6a23e93894f0cf35e6f4863652cb"), ("08c4705786b60fe5fce5151e474c18d90b1d319cd50a66117e81878cd1699429", "016d3ffc586c673ac88f97772ba4a5d6c48247053a71267e4d60a0d9b3dffe09", "0ffd54844e25bc0f6cad257ab3ac8e676b8acd0f97fec2b2e43c9ef7a4d7a7cd", "2dd2abbaa0dcb801e783cf7334c84fe7c91415cb48aa8cad8151b986db358eb3"), ("1a3b9d2581c28d6bfc9f0cb15d422911e4faec899a6191f01cdee518420625e5", "209e80f36ecc765079356381a004fb9d8f87f47a13654d5a5fad4a65f687ff19", "1a1810f830b77fbc732fbf841c1a60cd0ef13cdfb428dd36a36a8cd909fc7cbd", "01330c7c30c3d02d635b8dd671fb3e89f78760162116c5b236e893c672af04f5"), ("042ad11b02e3c545b25a2a13676c0a8342b870d0721280ba556c0d6947bd39ac", "1bef6edc46974a52b11c1697159654ceaeae8b3badf92afa5486c9469486e2a7", "1fff1929a1ca945bb35868e779a1c645c775418b0c8807b0f2832585e2fb2fb8", "190959057e34f885d7c02fdadc1c8cfb1675bc14e1e893dca28fc94c4740bb57"), ("0d29a9ca045337f54b27a6803cf46a18472539f04c53a5e2e7522012c38f43a7", "227fccc700736164be5a3dc688d8bf6ed1951b2feca5cda903835f5c138aa899", "0dc0de14a075ea522bab456a855b56d569db04c17cc1aca668376aef3a83061d", "15c38250be0a3d3417d341f6da9a0a5e98922bd9ea60a9d6a82414c55dfe816d"), ("23314c3fc13c2aed13d02182758d6e1ffcdc70b44213390777f4e305bbfd43e7", "1ce488f88509128b4977317faa44388049c93e611cbcce58150f5367ff7c3e2f", "2e071cbf1c3973a7eeb8db2a8ffdcd77359eca2da6c58110748dc3b58bebf347", "011d38455855c9a3b45dc7bf586c10e1f15230c440540a7a64604b2ce8ec683e"), ("1f8a96b4172bca502c103e22b33ab1b5be20f9a6e3810c4e520aff0a9ddd7590", "288db1df6b3208293e1845d47d76b8a74bd92c683d67e594f86e667b5c490693", "1f40c8863e4af65b76eb2299bbe4b2f7d73b368afa8ffa520c827ca1a18de77a", "039ae0f40e4d063763bb6f4620a7a1a7ecc20dba75bcc45a8bdd0f7dcc1b2c11"), ("2ca831306f04d4ffd24f54e9477746b82a28cec5c0bf133ab8449c4011522e0f", "0aaf2253bb5365da7a129713b28a8c0ecf9b74a4c720a8d069d7456778680421", "00604292f4b9f0a47879eb0d35551d36e5134af7800ce993d350637dffcb6b93", "0d802d45aad27237e849a3175415fc9d8b8829042b8c006e88039537e23a1f56"), ("1ecd74ca7d756af8ceb3fcf9fea37af7cbfc294ba95eca4be56e85abe233f9d8", "04b44db74f892b61ef02bd44a8f5e688eecc8b986754e93d5dd602b18e7a3092", "2df8d5c948adc79fd608afa16af4d7755a5391dbf753ed0df9a0cb7bf075fe6a", "05b911064f1ed2509efed8cf46780db4c3d615e7428b0a94d6ed3b6ba27fabec"), ("1032708c207d7c169556b42b3f50b5bd7d776cc6a4b1339fb051dbbfa888dfa1", "2f30f5141ccb5989928e4c8eff01ef28f2a3c82f61d7fbdf6c76886e8da4b365", "24bcc73214bb4a3dfb28d0dd58d7bf659fa15c6c852d3cc74afda0c93de2359e", "01fed133777a7d6f676e7a9bcd5640bfe45783238bb3f5a2c41fbb1640300125"), ("0b92fbc0d358a8c30a2f144deb5bc40f0949a06dc9dc57ff276b20bd6d2be21d", "0ae5ae804a3d038f4aca0bf97208831fd68240ea917f99a151774980539ee759", "01f2bd8a808bf21e1999b453b1e011087e000f4d5fd63dded6d57da8f5110221", "0fbd078e9da5b2e4f52309c9f6f28b807eeb78833633ec3d0799e212f421239a"), ("1c1d2c6ee41413efaf8cfe272239ce79e3a0f564c5e36300d8434e1f0e881d71", "05b4f076b668d8d4312d63e659f39d497649078ea9d660376ee3d68bf30a4cc9", "07e593a04a29e5f87eb7e1b38b4e8405d3981c680901a53c26f8b86e34148ab7", "27a535113aa70e50775124ac2c53439f88d4e3acb75e552fda4ff97e66e103a3"), ("0d9146370212c00001ccd4596871e0bde9bdf7ddffb9f091202de9f109a2131d", "0244031f15a91666e59b4802c1c0693193e2aa124e5756daa476df72c3f558b1", "0c5316e80203a8af7a40e579f363d2c57f5a625d6881779d31338e84cffc1653", "277fb394f538325d22bb65f67ff21719cc416eb30b5da3203a63bc5cc29ffd68"), ("10b17fd2826341a8db49297fb4f6fc888decde20557b3d36f4746e42912215ff", "2d10f32adb03e44a05446829e32a23b3174dbd6ca3cc33c562b151252dc79e02", "270911523fbd727df4c86c7811e82168cfe9ba435b8d41b72a256ddba9d13e96", "0443ffa76f193b2dd26a0f4cc0bd7702ee64ba0282dba29086cb82b0853e4cf1"), ("2b94b29d76bb78094c731eb3ab307ccb23f08ac72645d31f61b65e2298b42f56", "251f92c25b43359c8b3393bb0f87aa742dc6edd795d177bfc01d881ecbfc3491", "0c0cb1918ee56682a6e6cbdaca04c5c44cad88e88664f70cb66a380a1960a894", "16064a9e8ae8db8bc46dc62a2a1fd19356d3006a954f344817228252f71c421f"), ("14612e9a5dac0ed29c21e7b773dc88447862615df5356ed47933cbb90080186f", "242497e23adf5a18a1210a2e0e99d7f6d2d362b24e91345c09973e79cec7554e", "1fef96de83f4ee23d3e0bc2df25521e260c1b1f91bac64faa2b219ad1acbe421", "164978a56f56ce47b20e6633eb5fa8f5be575de4e6501d0fb9de984b4a15cc51"), ("00e24b062724463db579b0085e51c8848a4627d7bcdad2ba22bb8ad4465a0824", "2ec1559fe7430ecf8ace5dfe1d7625a3383af04254e2ac8dcab4bd10bea7c8bb", "24466e3e75c6e9619b6f8ff34591830df496f1e1c379c9064402008c06b07fc2", "2046ce2748d0f0c6c41133e6f9fd0f3c6ff9c471d8897bd5eda4ece96c633ff9"), ("20e99ae8bc1f1e2d0f40dc6ad85abcddc70de9929b0deff43adcb57035109be4", "248ecd02fdcc1636f15b8a036935d8f84d0ed116a2f64f6ce6b6dcd5d7c6ebd9", "02a5646b0d690004f0ccdb60874af6efbd83d7aad5ac8c5fda2123fcf20af83a", "08a4bc164bb4f76f6a9c89909a7053f0240af11895734b23a7bd70e6858568ef"), ("0bb1c0f386d9caf8f2b129a6c204139e2925cb946ce5bd681577dbc26ee4c519", "1d15ee182defd57ce674dc5dc176a09ba6cd407579911d9f55f2bda15be7f56b", "0c4948ce8ff84c46d7c2c56acb42578e59dc45e15358d669aa98ae0a1ddc353b", "1c71aa8daa39d211cf0a1ef8a300c65eed08632053dd6b3e15bb939c567bda0c"), ("0039d5f879dda5d3249643048a719201164e8e5fad491024cbc88d3d51d797f0", "0871d54d908ac4232b723045e39d935ee305863ad167f453e709184010a60466", "12927cec14681b51a7cf8b31fccc0a4540f15671641d52be18ef055fbe8a48e2", "0b9b2d9f1743a8c3c0791094a778d868f5746e7424628f2554ff0818a767cf4a"), ("1971968d74fa90371824615fc62e6e59e0fc54a9936aaf40b5acb8eb6a22d244", "103150ce205b21caa2bdc298c100002d49c0cb5e352b5d620ec2face358bcb89", "0c2f91e671a476a0ad8a621071c7a834e581a8eb44c7c8c01276ee925fbe0b5a", "22d446c110728bd2aaff2a9759f16b8e1dcfbde003aac6bea8523d4de97fd781"), ("0222948202103a32fa6ea4f2d3ef23b6833e1211edcf3e219956c50bfee8f859", "2d6c8a612de17588e8c1f09adaaa3dd49feabadc22db62a740350ed4e206516f", "09a89e0deecb585d7f2cd977d55722b8f9e55644ec125a45a78d272221007ca6", "1ea794960bdb65bf71b66be67c71c4e8ff72b2268cef501dc303884a1a5d9db1"), ("0b2dc6305906dd7ca8c90ce270254cb7712c224e4aa8800f1ed5afb7d68299dd", "2a8288a34eaeffb6298d82c41051b8699995c5d1509225a1dbdd4dc3752383b5", "113876392aaa377b614804599ead779a4121b8d0959adb1845ef95d6d332d307", "1b74127aaa24ffcb0435ca840864b210500c833b4dbc3b53df122428b892b962"), ("2000ba4d98fa30970a70bfe4105e84f36d3265cbff8e63b9fcbf9a041f9d69d7", "1843fec9ab902ad591da5340dd219f1b0dbff16cf7a62fa9ee4c31b17038d5aa", "04aafd704fae6c19a8b98a0bd95da95cdbfa39b0f3df8a2b2d0173786a8fb7de", "28cffa9fc6e40ed076fcded739280c287c2f4a115fdc3076fd9e16bbf7c821a6"), ("0e944e0b146640f3145da752bdc127d80b3846319822e6b00c89d9ea3a2ee214", "07338352d3488c68ce8aa8a00ae5ff1b90df0013d7258246e7bd6fc350afc702", "149844ce2dfe1d98894fa9e16fefdfde9b121697b95e5ae16ea4190683ae0e54", "20bbfe7f09989fd1c5937039bb5d947f723ab926889be86c8ef6adb60908f406"), ("0af38f5d769608b582cd082e8721cb26f2d0dd36ef578c2b7b0c80336fba16d5", "13e6e8f26c64eabaa8e8348911598e86885bdf02a3b58d18369e02da2743a35f", "2dfa60a5610deb5b002f853cf9d90e31b8ea79c87e4faf6ee7ed22bbd192eefc", "1fcb58061c290837e62f10d98914a5d9e3c8617a83ee189bbd3c23c621d6fea7"), ("1fc0b8d0cc0fe770e22b6cf669cce175a194fc9e1f3f054368aaee986a772570", "2f90567d98ae1eb4e44ee514d35eb50dc3e56987b4ae60de529ec78074f8b79a", "1369fcfe8b2982f494ed485d2f68eb548b136ae5694964859ed13e30373039ac", "2b3345ec1e8147ac2eab9c8d2c2aa6edf927f37f1a0101290bfe5572710fdfc3"), ("1d1ea1dc2b220466e0bb9972113f6aa095b1d62dbc7a9e7a11d16f73f2bf353a", "23e3360716cf8d9e288fd24ea16e43aa5f8ea52df96516172e9ddf00b6c669a2", "171d61882da36aebce0872b5516d7f2225ba82d531ac7f65dcfd4eb61370cdcf", "0ee4c06b98adeaead5c76d5fabc5f50a46f8f83410719cf85897d564f9eb2231"), ("1e6ba578c4aa2704b3fc891f1520d29ebf276af40de5b8926b4585556b995223", "0598eed57c3dce022aec0d09ce02ec01be3f3ada064a6d101da80a0df56519bd", "05f9e0d8451557184eafb8b9ff0907fec64f3ffcc1b241b0be98440eff8ae224", "257f89da493d195e95c37f566aeda6be733c77a642dfca7d16cb936b1a1d812f"), ("03278f688ebddeecffc2adfbfc6383eab1eeaea74bd530e3ba743745f36dde93", "2a4c0e95195310044723c9ea264fb31559d378d9d80756c80298193ba7dc99fc", "25c9e0d19e26f9fb1fc21f7b3402b991a294b7dd701eb85ce5fa834cf7657026", "1002673ccbcad2fed3dc608e59f086125bf8f1a45f02cbef609f927ceff6fc11"), ("1f88763755dd9eccd1bdaa0ccc78a46f1026e144d03568a37cff7f9133c3b532", "0d1b31c105b22c7b1af6364db98211c503fb9915420bc73a4a8e876ab0d0f9fc", "186d338acadbff4da8fcfb0fbb3359d6711cc9522f4cff2a64734644f678c4db", "196fb2ef2baaebebd7a36937e58f4c5cf32313d1d256f7969aecb2b88b7e07e6"), ("0520262076690ebca9958bf232bc7cf60cb733971cb7378f8ab04c1cf6c16229", "269e5964db3181595483959c18c242091e0f5b1b256a1dcdb340a9e8cbf860d0", "1e7b07beb7c4c360666dbd4b5961b4193e0485271251f8695dafa6fb9fcc6fc6", "187e87056602986db447194817da7bab71b1098048b4dde4e246dd70876446ca"), ("0d419b7ddfa76baad99c968fc9c50b60129094bae174efd762ad2d621e8dfb2c", "238f85980d9c3364b314f582a303c64762b5407d568bdd485702c6c7792d939c", "1830640080912b54ae3f81e70b8d020b5faf4a8afece8e5cdf2cb072edac08bf", "2dae1f3fb578c25eb21e227e722445c03931c78dde0e69bd21e064f62068c519"), ("17f103d4b2e8d85df9a96d64350577905d758f9d773c5ae01f56f1f4378c68d7", "0dd300ba98fb95534e82aa144d70301fb0ee3e95c87985089ee016a287a9b359", "0499645d8224bd96682431b19c5cf3f64f26968d486bc5764e1107c10b27903b", "29b477b15daf524f0cfbb1410a922acccf422219f699b90aef77b7f431f8fd53"), ("2454ffd913cb1456f608850d4b2bcf89ca82ea77cf2f4f5e0500452c204d8795", "254a7879fdfab5ee20250edd154eed8d5c7abeb404d35194e393004e2203188a", "29400c8e65069ac1dddac8f1a1cacd3e1aeac1969161d620d1c9290eae2535ba", "040c311b32cf472b607f25dba49642dbe441c85e756d037c92242d22bb821b18"), ("0507e33c25a133a6ade2f900c1cbcbf09f52a57e06312b714e7db488e0a119b7", "04e77d9b97f37727fab2f4964f630a7e53d973874d958b82e9e041a89410133b", "1aeb77793eddb32a77151bcc18c3e53dccbc934070bd9bbdff4ca56e656fb4c3", "009de15455efeaefe1097a1f4364fedb7991de780f3fe0e76eef96a2c057a85e"), ("26d79ce20774fc6854c2cf9f7b2f269b093dce7c27821a0bd98fcabcf83e8c05", "2183157437c4963848f8d497c4cf216fe671ac2c503598864a8ac19bf11c9c97", "1308eb9a1f6ce484f85280324212473e90a1fcd13c42237968225395bee89dc2", "2c9e3bbd094a81cd286cd429ac5bdabc94bade159c81dce0af54b1f68b048089"), ("1fc8f5fdf60984b4103814ed4d0f3e8f1d5acf5bf584d13d3a91429316f734a1", "2d4e4db0527f2e396d64abff18f08128d442ed80cfe747e1039d402858ab31ff", "1963e9076d7d029a4cfb8c40c8285fc5adf7b0dff39c3d2a22e54f975e452fc8", "24f5156eb304fc420438a70051e8e605501b54b24bb2926d69d3924db94049f7"), ("02d733100c028faee32ad19be6fae7ae83467f7c9bd04f80ee616d91f9ee7e93", "137905af51df38d0b62439ee3f12e4eba2338a7ec50d088bd5ca9b2d74067af5", "20faaf4c874ce3663f063c994f1df4b5710c26b7be0d7548fa3b08d8403bcd22", "0ef11e3e169362c122180237043f656ddeee4a13c39cbe388063f54143816951"), ("03fe6810b628005d7638952ef502b1f5925d9df4d9c68cace94ad8aed78aa043", "22852b0af5d28a1c49c3aeb7574c7d0f6acb1ca6f68707babaecc3922098bdf0", "1dc40d73a40df19510493d1a5945a9d8c95c4a7be8f14dad943acdd78492d3fb", "26be0d12fff8a4cb28c4f8ac39d4f3a4bd7665b708dc508bd3331ab408d23edd"), ("258259a2efbf69341fb3f3523bc5aa52b386583addc5085d2a29c696e8fa8a97", "006ebd784a08c34fc0b874adcadc7b5c23c00344cf914b6e122eb779e4d40de2", "2597990eeeaa84c49b3473cffc37d840065ff233ad3d92be0a33ebbfee8fa60f", "0b036adc29c0e55f4082b23af28d70ec1fca091b72144d1fa1a5ec8434d1798b"), ("27d4645f84c97c123dbaeca4f80af09d05dc500a60fea5e2987e026b7ea10d15", "0e82402b4ea457259b61b512eb6f080a84252a60376699eeb82fbf4094632bdb", "2ae675999ccf393ac32bd176814d6d8782a2588b305619007c9d72d77a71b6a7", "0ce7149eaed430d819eec6e4ed339c938dc7793af75b407639f31bed2dbaf560"), ("1c8c22b3eb84c1ee0dde59cedeacb4c1a51bf9c1af25fadec1e674da3225d4a1", "0f74c733a2702ee89e78c117942f5171f0d98d2f6dbc69b113901f8dfbfda7e2", "2397fd2ab6d891bf54fb666fa1b0fbfb29873c667bc46667fb31e46cf756e6b4", "1bd5c5a4fca418b79ccb26b1f24d37640431a7c9647d3c1a69774a7db95440d1"), ("2d98d308c0361f4eb3782ec5d5b2a851b8d11c82a569aa32788c2cc4f6fc385b", "078a21bc9a51fbeed9ebe410835945b35c40585ef1c1809a9af26b6b85329ca2", "2b6ec8d61c3eb72b5dcd64ae920e5c3f1033ff41ce1e1dcf86f689759cac2b3c", "01becdbfbc4e529bd851f191bfa0f4fcb14990f1bc3e64043dbb17498f792cab"), ("03b473bffa9d56be3fe9d7f7c7720997ee75a26a6d149b4439e864ce417b51ed", "144ce56df8bcb26c2dcc91fdb88bbcaef85c9693a9333ad75b4a6b82d9176233", "004858f0b0943373578a457bf86ad339904eeed57c46d8ba38bc5f8ccc0a068e", "0a134036b5a38695cc8ff87e81b040ce74a6b9b550854df2aed38b5c8db6661b"), ("303203728ab98d11d6a12d75a1b6a3d30603ac3be435439ea98cd4f0bce4c6c1", "21eabf73e65485dea4278ae5af947c0f081e5522e5e3827db7d6aaf22cfb3dcd", "11f5ffaf15ea2badd80369be31d5556ce23939d038ad95956bc0c4a68345afac", "1b7b8382ddb06e7098e74d8bda87f077a4cf3edbe9b39849c11009c2f7c2f712"), ("15146b6b71cd7709229460ae95ad5dd3d725b351be5d469a7011a7878b9169cf", "0e48be2270d2434db523128ae1cc347f13b0d8f0752a32e1f056be44b3de0585", "2f58ef7b074e2d4501327cbc50e5f872a617f6e9d6286d0e00594e6f6895b9a4", "2fe9d20154556f1b7298966a66484f3b526adb42a2c4a61e991fba8e4c0d7252"), ("2ccd5324940728bbef1e4a19649daa91ebfdb63601966a8de23763300526e0d3", "09505d8c058527fb3a1450134b303b7677864e9c3f2986905e38cdc51a3c1478", "155686b8a36281ff85eac5e36db299c7e3065d898b0990924f363970919b06dd", "0057a302a84ba228af987ed7332f049dc92adba10fdf97348df829433d71eb30"), ("12ac65c7a8648496d7217e67c14eb262c1f7046c542097ff0fcf626abc154942", "159dc315106357b1dcdf4a2f8e6d363e109fe40e4d7aca4d8fc9852c8ea33a39", "1e71fd6d98f4a2e258b93fb5c24426b3d396270f1c48018d57a9397372a25e5a", "137bf8bcdf30e9ed52f783879a709dc005a71912829fe6c03d9ab719a51c40cf"), ("1a8cdaefb47084143ef2492f4495a664dbf69e184b2096b0784c7b665ec729f0", "0c1290d1794247df7436188639a6898cb3a288633698d9cdf25eb371a139a66c", "29fa3ad1d2b44ec737d97bfefd6821fa304cfa0efb3d2a69de0eae179448826d", "182abc7dfec96e6b0d3f4d4e7ba23faeed7487154aa4d2e68be5ce74b33c5191"), ("00521809df36def51b52d272ab237c4af10f1e998720b844338c55a5707df5cd", "0b25e5288b7d851ed411cb337f8700f8dcc47085dc09710ac7a1531e700a3a51", "16fdf3c1e9acc5731283ddea145b6ffac35b2f0ac5deab2a9c23a2cf658c984f", "1a401f8e9320aa020cff3a555c312c1841ed22f8965b0d6198ef4ecbeaede026"), ("06e8efbe6715c9ea34c044739c301034b9f71de50e14003327f4ffe5b0900adb", "2ebeec7501d9516b5aed557bd6c6d3c8461cffe9f7e1328e1eb728c0bcd87204", "234b7eb38bdd2c293026646bcc48839134360ff21071aa5796238dd3ec1ae0ad", "1fbc5c5ad5f6894d10c66767e5b9d24fca05e552de1b3775f8629dedc2c8ca1f"), ("0b6223021463470bf772a60bf91d8efe84cd7fdd63217e72126c60807a6e96ee", "06340d327cc90b3cfcb7725ea501e5cbf0895f0948964107f1cbc1d3caf3858a", "198757b900a0ed0f3ea239cec5f8899ee17156025b72ae7bbb2b361d08127edf", "240eff8c92e2d72c472db70fc2f0b829c68b79104d9b5d7b1bd7843376fe7d3b"), ("05329c82cb820d546c76b803c2220778954414d46571d001e9a4ff2dc8d5703d", "2f35a74a70772e07f144f20c671380ef889fffec11a6fb60a7cba5b13062eed1", "01134846f9dc35c582cede208aa0c533716d2614d08496aab8db33ff40df43c4", "00610a93cfaeb8843e3f93571ede98b8af27f0871883913776d56e7285b93c93"), ("15e4973e59ac3534bbe1cbc5063806186a1da1a4d8365cb38e94c805a237f095", "0d182ceb17f51c9c3db39b7ab8e7aa5f1ff5740bca4bad3ceffac22f5a597d0b", "0d82cadb4287f2ab77e27974de4c5e1bfe23d5023e9edbdc3e74e9121bc1aeab", "1bb566862ac8955de8d4d60fa6ca86963687382667abaa66b16087111eaee69c"), ("223b7fcb5c4127d434977d7a64b78031b6dfd1995a5aca8dab7410dfe7ca3f20", "0b850894c7553ecd6c5c1e72b93cd03647d0720c51f35501292c92cdaa552c30", "240dec1c1635d913ffc7ee9a6b7f2a8de81c5ede7c93026d438b12a554fcb275", "1c7d0514b7ff07e3a962c03ff7365cf253f649fdba58be9e5e6886b0ab69ee15"), ("0c6c59200a6497c3fba732e2ec4ede110950f262088ef4eca8c6cd248747d77f", "0c2ad12eee0ccdcb51d05dbe6bd164d2afe3a978b31eacd69d2f26921c4420f3", "08f591dd4c73d065f7ecd69f8678c257dad8183e577574d3190c4dea0eb3b2e7", "2d3b1b5f9d6acc073e7d35820fc6e98ec53825734404ea35460eb09b1a52f5dc"), ("0d187cfacb217b733448599c2833e05af0697dfc3a39333e8ad23381de57fc70", "19b3a4e7d1933327b4776f67d29e9966c7a5a397fa955f8353ba99a34b131bb6", "0cf05e3c25b44ba7dc6b1cb140a28a035b49cc063a9d58c68965e7c7ccdf1279", "2ae90042366e8df35eac74883298db87a13f6bd642b2dbc183ff99bfa2146fee"), ("0c14f48a97181a882976aa8fd4b527f0fe9acb343279856fe29bc638b92b37e1", "148e302d64f146612bb45dc419079a3705dab8901aa9ee50b83b5aaf25405b8c", "10cc5a6fd23741469b1596d34f72dbcb9fc27e142372d6a762441fcb4fc2a166", "030a0aecffeb975d2c60db07858c6ad4ff603e3859a06bc0ba1fb08eb16d43cf"), ("052b36cffa89ff5db52eb11cdb3a7d8b1cf6a3e9a5412b1a5db3a186a1c795f7", "03746d645d46e9359165c1ec3e24532058595ae27815509a8b896b5ff4f01e4d", "07e1bb5cef5e215238217ce3c3abd2620d13ba8009533b40af5589d113e32b24", "2b1986488dfaba3631cc68a56f80d340fb22334c596a241a423bf7a7ce8f8f15"), ("0d683260572e2d648ad5f0f0d279353e7f08338bbe35d18b59cd9e71d32983fb", "291b4c907e06f785b4849c0d8ee4057a49b954227accd3f3c5d4fc99b968278d", "2c4a452b5e0e3a35525f4fb962072c2618db2e01d0feec9c5ca026017d1ffaa2", "2ef2733cafcdb61b887e48b5712536ae1696820a555456679e123b81492b72b1"), ("29647b07048657b92f157739ae268ab5fda9948d16a919238e324b991f5a3d3c", "2c99020fae3e624deba1095f125affe0c3115881b2254984723892e0e988d9d7", "0a7f1c4536ac761e5315f0e8fb2acb4eb62ebe6dc64dcc2a94dbdacce8f024aa", "04f7e376febeb0e158c23f659c93ead5aaea92de7d7e6afd501d544c51028852"), ("1336652f384068ef2a05c24968ac535d84b0158b17be22b685b45c38537a48ea", "0d0bf20f0bd3ce73cc76c536517cfae64c064c5dedfee38d8f61bdd33499d970", "013bbb6f1cdc9968f1a0133a153d2a5db438f945f0052bbbbbd162d62df8f5f6", "1f64e8d3f9a40663ecc19937d5de46a5c3d39e3c963a1f6c647848b1b6ea3178"), ("2772b659e9aa3cf9073accdc60ede219cf4fd07352f94850e420599f2897b71d", "1d97dd1bf81b3551e8ecfbf96fd1a9954c924cd2b56402b5274ee64f74b882ae", "1d7945d7475ac54874413189886bfd8cb6b4ffbe187f0c81b2bb09fc00a68c54", "0b832379ac63d253102fe5ab84c42e7a1a79ae291ee6b3305d058894315e5de7"), ("262466e9a7a3212fc66c31b563eae5f99e444103ecbbffc1d25ae563af97e853", "0973dd483c9d0bfa2138b3f80047cb2dba79080ba382c7964d89bdf509679dd8", "2be7a68727146c47e49f93023f3d915caf5735c32a897350f729bb872209121f", "0671a1d9d53e91c1d7fb6f200fa10efcb95a2d86f89932d3b85095dfcc076c6c"), ("22ff10c8b2b1b093da5945e16790ebe5a06930c235318868e53873ec7f4d25a4", "1c9c76eeeab8cfb0e4f84b25fb3574b4dfeb41e7455a636ce840b060b1f28124", "2254ad744396e3f7d4e2ef12ce4bceddb549b2931da636596add1e3f3970c420", "1cba9e6082741dfbbfe0afedb13fd87348000c4dcfdc27084b1cd725e1162b3d"), ("0becc9dc2b8e5c99fed30426b8bbe3bec915eae2528e94e64f84389681ba18c4", "2154265142079aba722687bc1804a356bcf634a4cd01bad15900d8ac6892bca4", "00bfc204c06de5549d4102604b80b82e9b6a91061c4902226b373824ea911b58", "2eed437b4b960e2fa91b587cbb5a56099a591bebe1c51f281946d5dc98bd6072"), ("0e3b6779ffb420944fbc297b364ec9cd3bca21033b3c9b097fda192c913f1934", "269840a53150cdd74f60dff97c706392679e7fda0176985a640407f79305e8be", "09ffee78c1c90f9a172dae858a9888bbb873f85a55dad2c3475cac8381d696ce", "1feaa30facfdb66875ffdc9108e791ea868d7d915b566bce4bcb17850c29c5bd"), ("00fb43654cb3516816a31b381111e7aeee18cfb1c397acfc9dd08d957e3e041a", "058fa6cbc12d728d59b4ff951a9e611c4ba1ce5f7830e9605d66ad5b7f916c0e", "06bcfe0712a790ba4bfe090092148cd3c9670c3973a4783deb2be29677947ebc", "27ec076c1e1d417bfd5a042d528d0b3cf3145b1c3960b2fc31781eb3d88e0c2f"), ("114e6232b50b8cddebf10a5b7095d010e2df2ec9512a24d0533ab9f42d9055ee", "0411485965de7a3962837ca0b5275ead8f62f6567427dd788e2c5550aa1ddd02", "2eeabfcd7bf1e3d92689333441d2339e182c26eece8aa36a29833e675cd062c3", "20a05a6a92e6802d4179e284d131266ecc4d10089fa93ea4d66364811cda3936"), ("1c2db1c3846756773c27a0910b7cec19a72e1caacf574162e6a27d6cc65342ad", "1fae670782cdad51ee42a84e5ac8b8b4518624fd9ed81190d2e2055a47e8edd9", "2ddc5be0e5952af208572e95b6e6a03b92d911ff661591d975cd4f56a29b46b0", "2169c48fb3bb37f5207ff6a9a14ac4c1262aa195124dac29768d02e3ce629649"), ("081873b87842a612fe45ec440e3a59968de2bdac238f0cfd678de6a9ae2ab63c", "2c749bd3cd53af2739a0c0b0d4ad705c26a6e045e216772f718052fb34604e4c", "27b27872fa7168be4fde7be13496e8f2898f5c51768581fc04de84f1f696e430", "2f795023bc1667a0748c4e87fd72b1fca8f6e4d40f9f924bc9145b33d65b9448"), ("25ff9063ef8c311d4a200fc700d387f4c6f411d05e1b8e0054ac67b881135e8d", "144afa018dc191f6717906859e641ef934976422ac383854f3fef157b7a50cdc", "03a208f2fc82fa44b84bc4ea33e0162b8af3a91779bd1e47185091ce00196d5e", "1e17648d700fc6581aeae031d788c272d0a891194088528f173bb49830f701b0"), ("1319e76c48e69622a4e856923a12048ce73ba5849ccdbc1e72fec2ef7873a859", "2f2c1a07eb561376bd1dbfdceebed401b9ba8acd93ca46e27b882aa98aa5c694", "205e4389959f12adebdfd56df80c002b70975e983323a68328bfc93c6d0b942d", "2404ba47e2fdf27ef8ae216fba3be9ff3ecac5a8bace71e561795e04f2912db5"), ("2ff90bcac0894d7832bed1c869ab0c92cdac90652f1e402f26c7706a05d19807", "2252b8fe4d02bc05ef34cfea44d23cbd54ee92a84c07cc6ab991133ffc28ca17", "26d1998903b64c5eee3f993cd7819d1de1601c397cf0dc8cd36c8bda28c2814a", "0e69430dcae65248a696c395bb093dc398e970153f60803843ca3e00d0e7a011"), ("144d739e61750f17c86af203103e89a9264cbb293184d481c0fa67b176236534", "003949c115c6a179a229099ca87e3fdc066671bf8e3e30ce0a6876fd4174fc3e", "2616f2c0e5384e47a7b0886eb2b2a034cb95a40b0ef8e0dfced620d7d85a30f5", "0ac501920ae70753fe80fb47551d814b7e08cbca00e07ed884d60358bcca9c74"), ("0e68679dca11efacff1c481e987edfeabfcd53188744a449176673667d038031", "0fb48bb37b072c0e47eb1ed83f4f067c66db8146c313cf7caa86641f526cf0d9", "1dad04f57679d4907b918f9dfbbf44da13f89b1ae823456a6bd6102ba83068a5", "2031648978a028f69a7ba21d2c5dbf7f6060b285509d7c7f6ecef5f50d469214"), ("001a9277d657653483576eea7c8ce2e9c798bfa8bdff55ac7d1301edf378af07", "2492c6d267bee1fe24d0e93558d4341641edc6cc25f4bb2b97242bab89cf6448", "1dabcd7a77946b6408a5191b5521612edc71e6c9b933698e0d873d36b9122869", "0013901d550d857017cdb1af45b1aebfbbaf4dd1fec85856a8a1dcd4f7c0471f"), ("229fd3de640919393561cf94722f71189e5be73f73c23662ad58c62d010df39c", "2806456a49a12cf7c195593002cfb41fa976f844a4b39841550a8f60f0814910", "1d499ef922bf70757f0c1349277a2b4d6d620e2e86686d731dae62fee8ee03f5", "1ad7b975cd7bbc9ba33241213ec5d95d6e5f020b33c6bf2b2e6d419c3f2ed89d"), ("1fef6610535753f953f4ca2e97afaca3ac2b971643b14dbff6e6cd394bd6df0f", "2c593e0b397add108a4019c747257d78a94ad82e9d5587ec1608df3bfc197cb3", "1583fd654504cf2ea27b88d01c32175891fa4a72dbdaa18bc1cbfe00ede6f93f", "1bc8cef5517d4adf2a8ebe457c1ffdb581f61ac6927dacc34679354e68ca5fb1"), ("18f8b283ee4003d1f2293ace808ef7ce6646520f1d6d4e0d372acf9975166293", "126e03d1cc950082da9031e3173d0ca215826f5ae94f0e495b3ccce1ed39dcc8", "2bb7864897b49bdf1d21ec24fe3b1a155be24bb1ff129f6ed844619c52b5d631", "3011b4b1f6bfafb35afa23ee761dc5cc1448e1b86f4e8edddac7b6947c39efc2"), ("262f57a5c230b57c210faab937831c817ef35bd3f8a11ebca666b2684882d2e8", "275347d25bc93cf613e9a0ab8a0981196af7acc124d73b673e8209b574e67485", "15e8fdd4e2d4ab9259a7bc16b112570a37d8521c0238788d55d724f904fd1c78", "07f06367b3a91d40bab707fec3a900f5da5887b5069cfc9e87acdf51072ac3ef"), ("0fc6f142f8e991fb72399c0e06a9417d44d3839bff812210ea727a813862e72c", "10992922f92b3a5664555d2a70d56317bc5538bce110d9542ab4c93192d1c89d", "050ad145ae9562c978d55fe4c432f705e45071c70438ae4266d5605f725cf9f7", "1d5cd81c1cf34b6d2eb76ee6f026ba6d452b5d9e08babde22dad213d03fe5d84"), ("1d2baa96a248d1c4bb799f3a092aced7e7b84189f374f20831dca97cb30620c3", "0fc1ee796f0992d342a612ffab03c352621b3e13325b60786c68b11e6b5be094", "278e8e5b89b5836e2dd4a56b83cac46d759dc45ec55faa522cd5e3bcb4f60060", "043fe13c87cd0643373a6c45969fe15c869df3cfbbb5cdfb4794d6a043eb4391"), ("07be43cbe0b401f2487b4d73600b70a60a69e9349972ca5452566afe182cc063", "04139b1dd0e10c448cd95be8f6a9ed1592c44a2770e99f344c1eac2c26a7e557", "202b850f9366acdd6ab6e3f40b45defdcdf30633094ad38a4e67f890f3b8ecf0", "23a4bba839a731a13f41619e61905cb187c6ebd2aa356e47b20fb25a12c27ef2"), ("1970531f61d61cb1922679b4984739a7ba7f988062b3896b00e31f24f0252921", "229f66b6945902103f7acf784cd371395c92129e025cecae4a51214f54454546", "0eeaf5db30278d6a89a02828df342fe64dd0bfedede1bc955a1e495f941e15e4", "1843d41e7832432a6b0397124b1ea235a53e717d3dd4f7f20a809b0e18bb8afb"), ("15186b8974c2080bb3ae9d7bb662516fbb3546f11720901b9dbacbcb49441b89", "06de85db54fc81f186f49f3f4d99988187c151cdf76bf9b3f278ca54832f76fb", "2fa7d926dc9fa3361a62a3bd1c405a79b61e5b38137f7f3b397f48b3dcea19ab", "2a8da62f9ebf14e72d69b0f3959c93c6ce9139a0bec9d012f559eecd6157bb74"), ("0bca83ef1eeaacba786f7dc4d2bae29a0823b0cab0afca4faef8f5f06fc0a43b", "01ec8d0a712c9b3a1b3e248c8d5084c9a4dce7a3c57f262dde2f901c8e4e6b4d", "0120e8f24c67a1a63ff4973f140c65fa42fd89267bf1c4c2ea40e40ae3421b09", "03a7d8bd973340f44bc32ae03e3191e85c24d2322573bde2207661f5f19904ce"), ("0f2e4cc3a01bc9ae537032ac9e3b0eb6c2ee2dde721b05a8a3900738c2dfd788", "2ee72131e3459608b639fa4b4f4e8f747d7cb679f1e6fa62b239ec1f4d784096", "1a1721b49488b3ed0a14e8e4767c4d2bf1b9a1bab8ceddabc7db5a5184f7728a", "108ae784d38471a926726a2760dadf5dc0a81ab5ccb37d353d25603cdeeeff98"), ("0ed73075db97664bf7a4741ad867e5266bd789751843a343fe6b5811cdd2a98a", "09d77af4366f2c42508aae5d22a8b2430500221a71a67e98d131ac3aa35a6029", "013ae0eff0ebb958afeb7b1bd20d1a4b35a85dd7bae2b12e14df52f82f289a1e", "2392a834e14bd3d051d0bdeed8d77ada7f3464776864e23e54d1da692acc7286"), ("0683ae995125a9bb10ccec8eebe1c414f506092d49c0a34c2ef9d3970c568efe", "19b5f665e5ed127a6352cf3dc74fa6c3f723b174b9da82cfaa47f48a11561400", "2ffd56daf2965f9635e750504cf291ddc92288001d235be8b6cc63531cc0ea5f", "297e071cef7d1e56e4628a6a3a52524421c7c78d16024f4f13f78e2be7027de3"), ("156a1de979eccfcd51c3a5f06e2e6f4d0d5edfc4cf32e470c4118bee0039eb87", "26c6ccb4effb20409c93d1a44e901ecec157b916146c07d4f27dcc53124c3e51", "1f3e6ce47b08194437a2fa6cc9f804fcd699f982c20812543cf0d6b681ce795c", "2a0fc3b73ddfe4a24fa4b5a6e422b49364980e0067a4f43d0bb834b5f821f412"), ("0dd86d27125860b07f0508d94677eb5d0a8834b3d58a5fae91b89c31d7b748aa", "01863729ff3912444f5b307764953e78d60d6ec8ffc7a0979eb5e567cbf52a64", "2b5530c308ef4183aabb681c0439ee5dd7d1883fe6c36725fc132b7dc6e4eaae", "065b66dbebfa9ff4b5be08952e560a2f3a14aaf96de2e97b4cc18386bdd68c4e"), ("1cbdf58b5041b511ea4f10d90f999a5e602ad73df83a0a2b9634d8989850a703", "1d2aab9c4b2301a7d3b212a31325cc98558ade355587fc269f314b71d7cf496f", "11cad361747668f9d36f790a78d76af240ab74b7441ce9ed4e7f8373fd67c420", "1c34d1b812efab7393f5cf14223d31affb0f7272bc09490b4caf8379fd8d7635"), ("219220e0f782e72a76e47dba107c65a218cfa53c5494715f20ddcdd16544384b", "0abcadb413232e1c81de8877e7ecd9e85f411fa7e994b5fcac8b9513985db2aa", "09127d57b9eea20fd24af94aeee97f341feed02140ee74c3b5b93dc68c79fdb7", "2a81b9ce071fa4e520ca49c048c9f6b0e5f23b8a8dbff9d0ee0689e33c9add95"), ("1d6aa0674a9433db34d91a8af3e3dac802ae8dae7d0667ee10481ff6bd14d426", "29ff3317f4818b1733f7382dffae438292bde8ca5742813d876aa05baa4ad2ad", "27e6658e1bebfba26ae3742e3bf263f9d0369b7cd2ee9433ac42b2c9e6222788", "0ab580c2d4c88180f304a7640f48c311d4806041c5c2887c696152cf85f2f5a9"), ("0ccadbde0c51a55b02bed0cca3675e13ea7421da6a5f4bc0ffa198c520501c68", "29456481b8ebe57063ba6a5c3d566fa035cf0575e92d80e831dffe53f24670da", "1740c777ecf140cdb845f6c254cf9cc72f9bc4b4600f6da39ff9c4acadb459dc", "08cd1cf8d0d5317bd279bd6b1e55dec9eea72fd3e4697d2da38e35ca82059bba"), ("26adcab8f57f40b3598e45250e383fc711cb4aff684060be1038a8ba57fbaf12", "1065bf1c6b0cde530300fdb6f4e3bc9b093939b5cb772b60e63dd0ed8e5e3740", "012c2f33e2bf8db219111de90d67e734dfa7e858ff95ce77afc6a63fbbb21c64", "2d00acba96b90cf0b5457aba2669ae908c3ae097b975922e8ce425cc08c7abeb"), ("1c39d52967d260c1fc2917310b99d170dbc0487224e9a309cc354a6bf9456863", "1f4fa70e049182e1103f553ac4d4dc9328e08194c0d593b2eef9a5d0b55aeec2", "069cc341304f9002856fc4d8677511051113686fb7f8d8215e9f31b20ea6f021", "11b3403dd8a0e406c7e7dedc00fd7534cd505520eeaa80a0031a7866535d00b2"), ("0d840e1d9b6ed72571029ec61a07b710c8dcfbe8a12a62aa03d5812f15a02ec6", "05409b15fe342170ec4100f680beee22cd64a5f64bfc012526e6b6b3e6fd9691", "2c82bbbbef896fd7052d7dff51161278f129c16b10b71915759441fa772e87cf", "24b30d9c8604bd2a4a9196301c8d22e49e9f7c353f56a45e1753ded1b92ac7c6"), ("2d7d546660c67b784a3e3f14e6827397bbcdfdc8b228e2e18d1b10d7032e10b8", "15cb087c472959efdfde4798ed59270015e47a9cba1193c8ac3f3ec287cc64c6", "21c55019573d233621b1db8c0e11b0cf9d911c5d1e960459806b539269ef835e", "0f5a5021b421b88ace9b353e4ae03717c0ab6cbaacc68cc5f5a382106014d54c"), ("2b393916c52cb51964b30770af018e57ebe5a19c2592261b63474130db6ec41e", "108c1bd1258753917cd32bf7d3470e2be4fab9de44d116d6af3eb7864f8863fa", "0865fa7a56949491e67ab7675169976eedcb1629c2ce90893e2a694284773684", "168ae33b4c3281719b37e72f1106f717816c7a728d142b455f30743342edf22c"), ("1476c1827da835b85ef2d758770cad1cd66f0ba9be36eef15763b70e32a78a8d", "0033256f0134d8fea4708711ca842bd3c03b48e83b0ecd549dd0ef243d9e9b5f", "1fd29d1fed8df39b42d75289fcd6aa486eb714f3899a8c790ae03ced4668af15", "1aa3062219e7188eb83eaa6a99e506209a92e3ef4249d71d878a2e2aef4b058c"), ("099984d602b79eea47f40a9ee63cb6c36830b7e121f093324b5f731180a1a23c", "2e97b3d70e4fa5e0c3ca4d28dfc209c34ea6e7543368cc45b38193a073a13d12", "0db6a0dace05d9d7c306f5a0393e646cfbe799cf81ae359f3c6a724ba5d3e22f", "2c09d03474e43371f8de66c8a76f25bb2cb0e1e464b8a5e4a3c6c12cd0f59013"), ("2eaa0e6a68170c0ab44634b3130c3a0e34aefe51e0394a72b899dd725f901f17", "26cfc8c803e3c51de87a7de08488268a4dea608a1dc16efe1abe00e037bb3e70", "18cbe57d754e0e23630b9c82163a1fa583cd626d9b42f10141a4adc805449aa9", "223b3006a3aac0dc2ae7a4cb4b58e534838f32a77830a3187fdd58909127856d"), ("04d21c5af1270e31cc671af5778d4f50119a5defa9e757c98e0895abff53bc62", "1bd610ef0e2e273bca44c6a29013e19339b130345caa97ced123eb73e2f9287f", "270e3cb03bcdf6b6566169a679a9dcd1020c2fe8cea011cd6a08c311d3d96cdb", "015b0f4dabd30d68fa5d542b2080c13dc63fbcb51d570ca57c5b24d8d9d0bce3"), ("167df89c262fd0539893e530064e699a36e5a8a8753ca4c066cf67a73693f95a", "296c3766cccffa1e5927932bdf0cc49a73d47745dcc49a6dfe2e45238b5ed19d", "0d559253277d43f5e58547fa777dedbfac51957c6666b6d9db2cb3bc84f4067c", "02962765073b8e7e226475271609f4108ba9d827a9fb455c5b63a8f799df4cf7"), ("28fd6160b9335e777740d4ef383e2df7fea54176d16d5e0f7c7c055d25762818", "2f7a4c06a923440cca48479edacb7e932deee282f506abc625bc10cdc4884454", "2bcb18e7059cbd1d8b0277d5486d1a352c65bc874f6db89e6d439731267cc3a8", "21469ba684a327e72b0b9c0542729b4a311892cdae933ec8591b157a3608dff3"), ("0677a486e7ad71edde773b087963f32b70a8e0e00e49a67006ba6fd3ee0c0027", "0071e53e81f7999585952e47da2c6479e4e982b2ab5bace07c91de8217b71ac1", "2e993d6937249b1b2e90555546b8dfb4c6ec40cacf8dd0f2d9bc64877f7c5d8e", "19b29b029a0e3b641f9955c080ab392ca1ff922b4bc98b7d8ad0dacd379e48d4"), ("1f8c8fe322839582e32f0bb2e1c8acfc15e37909da1802dc4f8657e2ea8b0981", "00771b84e3a26ac90a9a198fb2afe9227faa549bf727390398e9c59cb2d8f8fa", "1aa4c692ea19c980624d3f6a83847a3a2f06c20b6c232dcfea7d9fe728577319", "226df532df2eb9994c176d3e9fbca179cb973d004426446b6f463968e97560c1"), ("02f349f2628cfa8d2dba3aafc63e87330971bcb5026508b798b537d29bbceb4e", "174af11ae6b24eb7d58a98157fde164a2f54da33cd3ee59a71e18e618835da49", "0dac9c5afd46604b71620b9d24e0eb3db5c9b6798535246e4ae89624e3aa51ed", "043a48404b9ea5a4250ea312e48f6e72a6aee273f70906a48f6f06fc35612804"), ("1529f9498716fa6e609c355190d63f25ea46685af7acd012507c1544f60e9c85", "14e0522863e0f2f57b03e74667fe8326f1e442b2cdd30c4556a3e76d6e973ab6", "231342e0e5256764e462f32611087a6568ed4a911693257735d1e85ea132089f", "2c3e8021564a2126baa5f4a262e894dd9b0008c84c625a09c2a0303e7789998f"), ("1baa7bab88a724bca32e15a4f89c9573d85cd8a8c4123586f2ed8464d9a90de7", "09b5daaab138b289d9751e748d912a8077f17856200e5691b3a4d08dd23e9795", "095f3909a0053789891dd2f4a5dc1fc123457a694f6dfaca8704cdb9ba0cf731", "2311a6ce4bb72a81c6df30555430cddb48d9f63e22f545a733ee063939a4b54d"), ("24802e2543447e09523c0553f0a6f75d1ff9c1d36f8bc203bf57d85eb0f0d572", "0ed4aa437aefcd5c5e2263e94ade6d0c8fd66a6ade9ee7756dd9c80464880c44", "0f81e9c178db7f41dd8aa0fe11088d76e39f13af5d480f0c3be10cee0a71c03b", "1a4979d3e5d36436b24e46ae10c446f2530643af4e1cf7ee3db5bafd755ae021"), ("1d81b0e1ff11b31c34384da3ced5fcad300e69109db7a9e9e7f8e0a0a25fa84e", "16921a1bd2153ba939db638f2c636478d3c45287b4f3b9d10274d6ed4370148f", "0401cdd28d8e1602fcc65a12f93f4504f4a937f537051072225f4ead8c40bebf", "24abd77379476d4ce563bb66d382d866ed5b43bab3fafef98522570a8d220964"), ("0d329db9f65a1a27c3f04250287852ae7dddb2c9c1957f0b4c3e46f33a19523f", "26b39cfb08abb5d8c73cdcd0b8a513ffcd8a1bad3a190c76a27200627c741aff", "17a59416d1cf221c57dbee964dd053b166026f76b3d8bd03606c8bfc1c6c37b1", "013d14f37b2d9858fe46c8651e1a971a89ca5ad91f33290af08b1f3a5ce0c9a6"), ("2c3ead376619c6c769d6dc4421bb992b587abad16845a0e33d7715fb0d9b2d5c", "287411b37058113cd149e50ecefd74cf62f39e5f74ff42dd22bac5a9efcdab5b", "0fae58d52bc7e1158bf4afa3491ab431a8eece2814a6e3ca7c17542b6d275cc2", "1f4f72cf0f2babd26dcc954078ebc129e633c0dccdeaa9304e029424fa1da498"), ("0871d9bf310a212ae7ed41658d0cf08a4aa22feba7c7505e1184a8282fe00a97", "2535b0ddde0aa5cdb4d9daa141a4a458908f31e2ac1fd9d6ff99273b97b44ca6", "04190cb30347ed9dcb81d4ef0e8e74ff1337c84f0fa5144ae29728b6d052244d", "2ae745d92d0c9fb8edf0e2cdda4e73d39febe5de3faedd56fe1a35d392082b2b"), ("07c2cb01b819942fdb8bb72c476a28087b8f1ec3434e252ece9dd8b5096394a3", "07514c0b981e7028659181ff451d8d2e7ee17e4cd8b2452887a0797c4a7b7bcb", "177b592d6256747dbcd543a50cf44b1c62245cc257c610cbeaa47c7076d5f056", "08619e330fecd74eb02d704e0a684277a01879e25a46b5b31f2aa43f2e2ad0bd"), ("2a7e0e638e019f4468e0cfef260fa543dcb476a71c87f89635271e83c43fb432", "1ab3c69ff59e473889dff6564a4fa496198513045b1fde6d503c9cc568440a6d", "2ca47b05a5986ef33d89adad3bd10c2e20c691e52e8285fd91f5c49f491c2e22", "1fb2493cc2c1aeaa45b3f90801c2aac27280d08ffd0a5f65e170b67d2491a65a"), ("21b16bafeb2794bd82278c906644cd6b6ec9dfcff6ac84fda218376ee0b19d09", "2ba017795b47c3d12da2198a0ee8d1a4f29aeb81aa63646a999c53aadd8cdc77", "14ca9146d6ea2e4e2941a0b728d36952447613ce853bc4b5c02d8a89cc84953f", "10f00ba6efe3aa95f772d2bd9525322da2545dd3e3e73901dfd2a2ce833b24c2"), ("1612f30aa781eff2dbe393220037e49afbb8c054d655580489938d2bc7e3fe37", "1e7b814e18b5cfd4858522c785a407e5515bbb549c641e79454a2285d8dfdee4", "28d9d9463d52ee548ea2fd2f51b7b5da58af849fb93d1dad898cca4f08ae2070", "015b6ecaf414e57e5ba8ec65e6f1d1721d7e2efaa1d7a6cb7c0f25781589c625"), ("260dde57f37b223bdc6543309c34d82210bdf27a4e084b93f3dcba29d251ff71", "09cb7737c505c94f3e8f4d5fe3c90a6b40b243388564c03d0a0d7594719c9097", "211f35fe714989e87d780bbf24eb3afc6fa90e82943460ed96e2f9ac0d7dece7", "0982fe6b00047bf31a9b3e39367dfedc3bf09296f3e2ff2199c74431446ea3e7"), ("2a674d36f10b250c175061875ced773124d65f7ef7c0ab51b15aab292050a4d9", "2e9157bbf853a40aad77a4b33d60f67517059882b1c0f88a0498ec78e112cc2b", "2d072c927d4e1ae4566fc45f9cf3be5c36f2e51a1e8b73441e182c14d39fa19a", "14a1e4bf5da58a86430d8ca305c86aab487a943e00c064fdfe74ed78a2b17352"), ("0a9ece47d064b72374dc0da627dc779913cdd0f7ad329f2cdb7a5baa6b2cc6f5", "155fae49526c376dc022441ba2e409cfcac53696bacb65b1c473be25b9d18425", "03c7932d25cbcbf340760f3a5a958089c12b7afabae9f4bbdf95d7c1d8e05e7a", "01d46ce9dbad0dca2f42a31eadc04c90291fde9766ccbc725d9117bf07fdb8bd"), ("2147f16702700de7b021b0ceb57aa8065256dd33f9243d470826af16cf99bce0", "05b95199c54d572e1bdb6860e22697405bd7811ceb3dc23905fd5bef800aaea2", "1af87be7afdc88a9cba9ebd595899b5a00749af872297b3bb24bdcf3c9f5bbb4", "2a37f18ded8b8e5a3d5c57fc12a8a97d9cc9dd3f280012a8ead64df9bcd52ff0"), ("03e5540d3b399ea7a7e526e8b4afde9498b284b4f653e3d43b10a9c0c9f0bb45", "2e48205754c0b04798e75990aa8be73fe90c14e393d4310178d25be8762d5555", "040c0b30c7bc14326857fad653e8ef1acfcd16cb4a3367f8fd2a6ce69641278d", "18b803089484c48c3a05982798c66215255d59eeb7fdc4f19b7018e2cb75e870"), ("1fdd85799c10e6f5a169146a71c4888c50310b3aeffa23de85425f6d06d59fa7", "1cd1f7c7d842846a7c3a09ed4810f0d05c571550d3aa4bb24ad22a8f3db6f252", "1b084d20acea28fe535a7590d4a6fa9b5f7e9c3ffa804f827e4eb5badef7c37f", "0c03a141f6845677c6646d5b609e8e86cd5e5119ac9a44a9f836e5598c98756c"), ("2e43802fa7d95f3571607443b761f4e174fc31fe22ae9892924bb360ddcc504a", "241fb7b0d754386067022ea8449a9320b640e2e24ac12ead1df0d52ffe46c40d", "168b7e1038687a191a9942768e6faa7cd41bc363be5f972c08f11885ce078991", "1a1c10f8aeb3f39abbf7d7822827b6b0fc5a9ce816d4754908630ef205483818"), ("2b143a6309a1fa940e9f5d751f6a874f30a86c8c253a054b088ebf618b699213", "0c937e1422f5de2b8bee6e73aa75ed35f73b2511f5c9165e5fc5d08042551460", "1b24eeff5517cb6867b731a5b1c91d48c4157e4cca0eabb39a6d0c67502eef28", "1a9a1e9e89a8e9c94af3ec66aba4c7e91cac5d96c1b702917c2319aa3e8d5209"), ("2aae01dbdc8cd4b8a20d9a8ffcd7589626dbe06c3f664828f90919fc88445f63", "1a63e92e7f45efa245b022619db61c91ce8eb0fd07fde8cbe63c548c5c9ff286", "14b0c8991e507db1d60fd9496a6555cf7006aae73ebc061fdff2fca76ad76b02", "2b7616ee5c7dfe8501edb168d9e6fc060f2d264b78cc64852a2e091cac608836"), ("1ef5da1325f431acf7886aa198b542acad9eb03203442b76b9c5d191adddc365", "2814e261e5efdb9865c2db255959f89c8f64c9afa6a6dd8199c24d8646a5dae8", "249fdeb1b93adb70f3802330de247498fc82ff1b136b8efc664e9918fab5a919", "2687edeae2150e0a3e55364dbf8ffe9793914dbb79c15e52be03ac8e8ca7ba28"), ("2d532105474fb3b4f1f7b9fc3421101ae66c88c684c36e364a91b3b5091fdf18", "191d5109c5a05f4edb6a42bd44ca5c43829ab6241b9e0e03c989c2022ef8ec43", "0e5fd2b52bb9fe806f8ec8b3ddcc467d48b0db78936d0641ee747df22f8ec381", "270db6dcfa2bb1eb6e028c6d1ed276031681584d01eb5100c8fb905f17eacc1f"), ("26577efff331a7d1dd41450ca7ee696658740694537090686d4bbb6cf945a230", "2d464fe8a583fc09e46fa1360e4c46b4c5923c74ca92a9c7430b297a76673f1b", "08068ad3b992830b215b5e97e95ac3c627791ff5a77831a25d022e642c924ef0", "0dca570e03c8201df16c2affba583e6ee27a8287819a7427ff77954ff6cfc100"), ("03892f6eef04733d5869893784ab12506b2e5454892d3762f6d8b6d7b3c24a5b", "0b2bfd37c139f6095ca04b9e73254a0263875e47527e18c4a989e22e8585a2ff", "2d41fe21176a184ad71171a6f6cecadcb8c4221b6df384859315b2078fabde06", "27ab1ce33623c88d6c4bd2f861da3d4520159a474f1ac3196372a7c41f3cc0cc"), ("14caf13777960820de3f0070a2e6f25d63dd8ddbbc30d4bce380782f2573e7d1", "14d42a5563fb7c0b7a6eab010970cd915d4e98ed80ae5767967b615346a247ef", "2785f8ea0dd991b271fb11cd1463e1535a2c0efb44c962a349ca109dc5c2e74d", "08ef432e4f0aca6ed0a117428a338659a6bdd2ce1c445066dc9419467de93d83"), ("29deb8be12e352e6bd77e009e51e8dbb2bfa3d586fafe36cebdf6f1e634317bd", "1907750af2932751ec6a30ccdee602c6e3197f00f86e0eda83076ef10048cf04", "003eca619e9bfa9efd5bd706f7ca15db35c1c31b085837d203a4a0dd8ea753a5", "0c47a9e550966a6cbeef4b8da282101ae1a20e9865c482e604946049dc534647"), ("12dd81a98cffb510b1d27e71e59644395272f28f51f2f9475820a13ba31273ea", "149d95d900768ed9966ede8bace315295ef2f464f5966a41c18cc8e2a4a385d8", "0d90b5c893274b67064e4fe6e0603bdaf1b3acd3f8226518aa1151ec6f5b657a", "1b67ac6ebfa12a224e0a1ddfd1f7a20c6498001814513c7a89e66e16394cc071"), ("2c03622a84f1a168522f367b1894b31e307d68546fccf37b5d818a71de547185", "0c4884be89350ccb6c034c270f6b2c431ead291f6b2515a97d01bd320e359fed", "2d78dd92a15381fd5dcb35da72ed4890cb136448ba36d618275818e92ebd8308", "054a4fb14253124a122cbb144e44265f2c24abae6c6f98ac91b943074d67b625"), ("26d17e240695669cbd641dbfe8c18edc0277d20e2c702f6708d45d5ba9591b39", "0bfdb16577b01c62a273d4b05058f24a2b678be05259d757b387dc070ba6f05b", "137a982f7cdfd519252c58e55681b957142675419e900046db9e141f37c8288d", "158cfe1593a4b3dc2ed2fa62c1c5f008816140a2506a06d3a2f045dfd66c1692"), ("21adeb2e68da952e5affae6db0d19b0cffeaf9add88f1cdcf349dc8add5c3b6d", "15ea0cd69a2b364a00d9dfd83ec0ed7da2c0077ae9eafa5fea24ad4cc41ece94", "2085ae9e3918f88666899d4ecb86ca6d0c3e1ce9e2e92863645166dba102ec0e", "287f390312032e60742018be77b368982fc5914f2d31c1b5a1d2d0cd318f1840"), ("2f2d921b3f59eead54342dda1bc0f549bed2d1e7dcd16f6b0b5a20cab56159c5", "25452d75be3c193774555dfc964c066790aeaa7f12b83ddaf935e6995484cef3", "090c58b84b5b47482005b633328c15f683e73c2e1b2524cea83571f5ab12b6c8", "2ea7435c6351945ebdaf5bfa1faca66e0c069c1f871bae592af96690c245e7a8"), ("08ee416ba694f134a58c61dccee9e01f1a2a4cf453803d73f629d6c38b2997e7", "044a742a1d0f48396833f8fe3e36e12d4816522735c0bbb894d64f8cc1d1b53c", "08de7a5f3128d0497d6f9472554fe9b4dd1ddc0b7f01597b8a6b9da17bf0c47f", "02c4ef5a2fa8bc28cd36201b6c68d1e2dbe5f71db084b7ce8c700c0e2b249f23"), ("0d23d6ce244e4692cb39191c5930c07ed0152d5dfcba33506d205fe7f59da960", "0506e7b1a6eece341fac6f6e0a1cf9b3ce9f62f7f254a12d95005480685a2241", "032f6553a0870870d9207a5a2fa3dccd5ca87867ef9e5e2d17648d501cc2b34b", "0b737b9ecfa4e4b16143d72b0524caedf0111bbc3ad34f0c7bb31981ad5a00f0"), ("06c0b7ebff15f7e5671da4369c9abe57577be55b70d61bda36ddaa80d4e15e18", "2e3c902250c1036f2d8ce8ad892fd74c92926fd52b57097d553daaa7f6fd1e17", "0e6882852f4b3751cd159066a1101dc31650cf8cb4cf10c9fab5c7fb8b4333dd", "1e98fa1d3e0069e5789496c878f60b451f0542fd82028a705dac15339b429149"), ("0ce39ee01b101427a79c4893f51645a45cd9de9a5ac3e12142144a86989a92a7", "11cada2a1a89cf522c9cb14c80c75808a99194ea259ac6a58d4c783e9f2102d1", "2ae323d642b1b4427f7c8427b4a333685b9f487e1185b8ca594e2c65e1701e45", "2cb66d55bd05b12ba2c99f8b09e801014f72d4a238a16574c4d5b3a9dc44ac9c"), ("020b2400816a758332fb5f4ad3b6f23804246dd0a3538639180c8c5534180fb3", "30476ba565c7322dd40ae1ab59586edcc66109f30ea58d16dcdf834a9bff87de", "0404b25d9b06b2390c72e73e85a9f38ef82fc3a27bed7838cf1eeda9f5fa7ebc", "17ef3fec90240dba54013c40653f344a0763d954847bef467761ca05404dc601"), ("09f6d5ec9aee16ed3241de1a4919cf4edc36fbb6ff865c659565d165fa8aadab", "182cfeda9d81b222d9f159d866b43cf8d14bbfc2ab0608b9d81bba18c173782a", "213238e45f1df51fd20e3914496d01f173c27689758f248afdb3f749e31ab722", "2c274167524e75873a429cd3ec21d87058733a140e7a7141591b2414dcfdd816"), ("037a4e601ff5aed2070d8f342d42ce76f5fafdce4a7b558f071d267fe8ab73e4", "1e5daece0846600c87e8400ee0e0b187d3dbeb8654bd28888b60518e0b75c4cf", "2de4a7a764dbb9ade3c53089df9da81babee1a63c6bcc0a92a4cb30fd2781a92", "11067b47315aa9dec95930f2eb8b8b001af04bffcf98cdf3907a64a40b1aa43f"), ("1ec4ec65ff29e61b96d86e4dea85d41c641c89a79e9e172c6687c0043649957a", "05356b19201f8e90ca27d944699de5c5c04a3cffc21525fd6e7b508d754f3bd9", "2b31b4e53de7123db03df09e32a1f2819e6f7eac56ca4be67f8ccec84ddffcd0", "2c1027c96e140c522c828555bc8a1f0c9a533cb02af0601be89c61523edfa280"), ("184a6a2901cc849473f88c7ef86759c3e3085ecbef057c244e3618735ab708d9", "227ddb5b85a0bbad98591416466ad514e187fde966beecafb2516f8adc63014c", "081214faa182aaaec489855a46e64db927c4b8236d025a8053c326b1be21a37a", "2777c05b1bc1d5c917c8b9894954f3b8c9297dca3a442c26de6497306b057ba2"), ("1deaee163d26a825782e5abe48fc2266dac094014cac51e8f53540881b52c006", "242d3aee9da2355cddbe4dd28ac10ec134c9a15f0f300ad7f170c8ded7e5dc73", "11bafdc515e83d03811d00d8df154630d362311929fd160b357fe7be03f782a0", "12fbf313cf9e1ca51c0844a230e81bab3453397ec88a251565750f30c3ce3ab0"), ("0a4dc3d825ec5631e67cf5cdd51867a90025307e36b43e64e021f88946c620f5", "052801174017d08044a351754fe2fbeafd74da4a5355d278a12af0b11f3cb51c", "1ad84b61996924ad923624786ed6bb4d9b58490c5b94d10e7ecb54336d4b6f50", "294613ec091174a520039910a133536908a0bac73d8cccb48958759e0e640c20"), ("1ce7065c0422f9ac3f3aada8aa761279d8bb60518a6cb8bef7239c0577b07485", "0a75341d7d9a912f864fc49c3f6d059e006200269bb2394ad708a0f1e5f6634b", "2ae8835e8dda2df84fb9a19ca04a5a9b6fe0ce98a2d173b6e25a34e3780aac22", "0f165c09c59c22761b1ae1b7c7b270497eafe0b3f651678969dab73514e6ec3f"), ("0a4c7d2b29fe27f2df2168a808224e2ec792c40679933b8046a3c5d76a06ae5d", "299447169a9aac6f93b32214b0a30f08321079fd8e237636968b8348d26cae04", "133c7889a8a7ec28daa0cb30d2741691277f3f878e082ac0991c670adefa4476", "1b9ec2b698828296b6a4d143a9231a2a1d3aa7cb0014c2fedfea6855033a3c3f"), ("11542db43d768b4cd1c8167ba98585b24b1a34ca5a6208e6386567789e384865", "137dbdade1ffa39bc7be532d2aeabb60381a8011a1ab399ef2ab2181d12bd01a", "02a7f42d63b01abea1576bcccc849f21094ea6a265de745eeea47f984745a73b", "1c9ec819609c2ff4a5811726e9c1969f3dede1f09ac3cbe15b589412e155eda1"), ("1b050746e8eafeeda2c30a6499e9e5a1eb73e03498fd5ed0d664822513ad5579", "25b907a51034bc351836a177b8cfde42911ed34cf54b7ab10144345c34348c13", "22c496e61eaf261083c637b19a4bb743ccd71626d632d8129eb68c33ac78cb6b", "1a76997106352a1b7a6f18fdcc8d3eba4ac464a75479182b9e0b593c9bd10823"), ("26fe01df06c7b3dc4926623a5c49ca0028f48a39e9455610e2b8f4f185b346f4", "1bae27f17bb42410a6df7d4d4530d094687f8631a33431acd6af1f24f22cf08b", "127fdabce6ed1ead6b4801fd7eea5dac711dd0c98e06f23a342182556c6fb4eb", "283336fe297d96312be0275d4ed7acae9c88c0439f8f374de84953410a6f370d"), ("21166f48b6238ce29add26ed2a595d0ff8be0b4d9617b6a83451e20330803c81", "18059d48065c8dd40ea964c393b96bf318561a57364369dd25febf3e56ebf70e", "142c0b64fccfdfddde086085e3b31c4cf70e237f1f73d1a1028f266ab6a82b20", "28d30dedeed37c94b83919ff0fe4e795372d21a5ab3ee740bf0e38449b7d55a4"), ("04fc00e91c78e44818afbb1be0cfdb9814bb65b69abd3eb0d00fe2918dc27c59", "01fee1c1ea2ec153a00f16798172ba2f203defea5055bd243267a23bfd5bac69", "005f57adcadb5a1fc58fb8be2c5f5be6f60fc2bbf79a22f98ae1758eb4930114", "1c4c5daf340ff17749e0ed9179efdeaf8aa414ab5feb710f0271e3b1b6c2b8c4"), ("0fd14214871cc20e9ef612a49b731759d78c148f55831e2b3278e44eae74023f", "120c356a0defd310e0c3cbab49f437d010382ea032966168bd423442dd3c42b3", "0a754764ea572cb6b4d220f7150f7ea8d7e02b9bdfb36210e229f420ea661bc3", "155976954707dba08fa103f12f3db647c8eb982c3cdd18d108747e06fd65babd"), ("1ec94ad2922f52f12d6dc54a0bf5ab093dd7500be974202824ad51988c6a6c89", "217d4d66891cad1ea8739efac1a54355ffca64584596a86be4d8c4dde168144a", "27367d0069c880011d30fadce0ae2ba0837bfb9d1d5341b1298bd8188a91c5fc", "12a5e3deb020b847b317c1b477cd6af50ac01d9c9011ef86154e87cfb74b9b58"), ("0f752377b2744c41515022d18b9894fdaca2207f341dd459702a00b70f9ebf61", "1e8ed6b18d26a56b79437559c23fff496abfc5a3ed9f36dfc0cab2c74fd87735", "223e56a0f2276fc46bbc93096b1af13507b94216a7d2eff2675dd77bcd047e74", "2b44371682c3b1d22ffe1e16aed77b8a539277fd51f88e8977d6aad8ffba05fd"), ("0be96c770a0f8a311001f2eb9b49295020bb5b7dac66bd71869f13f15b590896", "006c9e27db65056ca93f5e7ae55f42cb5819c1d3284b93fe43a655ec17270868", "0a582eb8edb273768fccc46ce6826b339544ce3cf6fbc46a10d77a3a31b36c77", "1f491e469c9ea32a4b5fcafcc0989e3ac468ba943b2b0d0254e15872d6966da0"), ("2a65e37a5ac3ffa3c2a2f7335f157ed38c987779aba51f2218bab60b4d60425b", "271933bf56e6ff303ee923c8796e5c6c0cf84b9ba86026f97e20cb044d97e649", "25c4dc10f76f15665b4a6f42bfc3e2f651a8e02031805c050b43c967415d15ab", "2c0b649c472fadc04a10d75cf4eaaca0fda59883e1232b3107234ac236d36b6e"), ("1a937a6de075bdc2ab01e754ecebe449e848db0fb9606b49ec7a7ef8c11f4461", "17707f5bdc8e8e0de230051409bc2eb4abcd283072ab286cbe7ce8d819155f86", "0be84021067a758ec7c36b98c3d81556e07c66c9f0591f8f9d4643bff81b15cf", "1dba6547dbd029480c70156746c03868af4dc87fb5738a64fc059035a6bcc971"), ("13e5bdd368a387362468bc17f0574ebfc3aa33db9e37e6035763f854c9ca7127", "22de101de45afceae56680c42a833a31207d20e75074a0010c3350d23d138b25", "236fe567132b4a64250915fe084c617c9a088fa2337a9e30b4726cc260066477", "25e30c3dafe720e878a5df2506de8831bbe6d8b845d1a8b57545f5eb1ea0aefc"), ("1e86bfc02ad6f05e348dd676bdb73bbbd552dcfeeaa6f3882f65c025422a694b", "0d8bf6ed11aa6ee6fd3b1a539d54060ec38865138b638baf0467c019ffeded2a", "165ed10cd1f7ea00d33d7537bf985a0be5a86a7be0be1aec6ded1f990fbc2796", "2f9021ad9a7386f9864288e4b3db3c094c31ad4bfcd6fb33941f7edffda10add"), ("034a27d82ce3a4bb3a60e056e0a3cafac367a44322296194f28acb2f502d40bd", "1b2d52cf3f5aa5a53a78d276838c6f9d0b01743556b8e427992c7f8c210e4845", "0d9300cb0bcb9d2f0a656ac08c438940f4b3d3a15bf8329366e9c80a0666834f", "00aca152bbb51c3f36200027d00e7f382a3e30da45b8d780b0357af9663a06fb"), ("0f575963f6eb27ad8601bd1c791d4db292cafea868d797592af1462ab5c012f7", "161cd6676bf8a541e279e917b29b37d4f65e7a481378dc916efba7d9e38bb175", "02f3bdd8dec6df4f3871e9e08a105423eb14b9eeea00ec5a7ff76a00415a811b", "26c626c4ca1da5c88ec0430e6e57742131c4686f50b90f920efa1f3179d63545"), ("104efcb140332823951eb16d3a94c65dacba8f263361196168a80971870183e7", "0a68d1e1775429b5642d80a8621509fbc6fa3cdffc7533ccd0e63fb7158cde55", "10f3982371ce5d43114894334bf6a8988f5c8ac425ac1f3d51f68da63120611e", "1e156e3dd62ccd48ba7f2a9612eef0805572f9b56ccf022ecf729d393a590b99"), ("0dd2896854486436d2edccdbc2ad90adb6ab35b3c1c07877849a8d57fd16472b", "035cfa70ad96ea05c84e90ecc10394df396ca337ecc39a0652d553793d39d65e", "0ab65f8703baf6c9ba5238a2dc5b9ea29ef3eace81521e91f03c615a3f39585b", "110ca43270431f982d29bc47b4caeddea997fbaaadf22a34e1a1cab8a263521f"), ("1430b0d390096c5a130693bb9991189b814efa40386efb5a1818e519af956c31", "082dc00f0c6c1822f08ac80bea0ef4935966dd290d5e069ebac95f96c7983c0c", "273d24453df1b05a0deca58c45ba552e30617218451cfe3de859a1564b51003a", "00558467af975e0e1b6b9b50a46978b6d727fb0f1f89229b211ebf95607414e9"), ("0aafd811746716b284e93fde1e158d98157f4c3d425c81091d4769722bfdd7e4", "024cf5e6203b07ece6c3873d1b20567dfd14a32f295b0e775ef317c17488b854", "1c10b0c2b5fa8e3bb08ca2825a7e342c4d813aa77804ca0f4f35660c39fc22a7", "23e885d46c1d8ef3c708ebb79471c2cb3320d832c4f79e12118b79d3024a33a8"), ("287e11f18d7805fca36a236824f478bd78200e01b230302970df73a6abe9b443", "0ad0a96643b0a17fa33baa21c7a599b36c9625b5307681625882ed1283b4287e", "07b5eb108aa56cbc3e5d149ca12bca857636b4e6f218ed05037db372bd831917", "13fcb24272f94f9ff9d168afc922afc32f7f2592505bf0c8443342f8a3b18d6d"), ("03e4137d7dfbbe4bf93d615ba7ad060a63e400253d6b479d73edb4d76fbaf906", "290135bd6c3212cada961210c243459f578caf64393e6826612b317b85cb9657", "1f69d808f4795f6d0d80304ee3999edb756077440248bc35c0c35235812354f5", "04aa9807a882b8991eb1ccb20aaa0403fa07f33a7e4ee2d0d6b3f7809c6b3850"), ("238a16e1cd70accc51c6b81dfcdfc182e448495f29d054c384b7d82ac9f3f5b0", "1bd24cf464eb1db683419ff3cc731cbb62a11ddaf079792b35dd423dc7463a80", "0690dee3b2005b0f2721858ffe42efd7342af8d37ad3553d1f0228e35ac1f44a", "2132873c453f081cfb7ce4895a287d3e3a955e132866479b015580c8362ead9b"), ("09168f7248d6774fe5614e325a99086ec825bb1473ebd224043702e83ecc2f4e", "0d83186e2adb1ad6b31165c2ea678bc41c7cc141ec3ffe946005d4f819f0c6f8", "0b7df330a46b9bade4e48732e63031d3f5c0043995cb7a4a3e9d0327ea37c57e", "2fd235068f7d9b5d739a57dc0de8e3fd4584b6b0260a88cba102e007db30bc2e"), ("0d93421990ad72c5dace19c6b3a6f04add348097a16d77c6b46ac69a1d6b90ff", "13852aed9c9951f17249c210e91adae0cd5073b53f26b2cc6b8e63025ad257eb", "1a202f8d478d57f885b5d882de59daa01bf79ea78e47e8b69ff04ab3ea63ff2d", "144d0379af9cfdb2e8671675c865c0bbada1930f9788a6f8b95a0e6fa05e5c6e"), ("21c9b68a7294444e313190eba5b008760db77ea1e0682244e1954450d4dcee30", "1d941032a5e718ecd809b3f565961709fad7c389ee92527090d9eac755edb48d", "1463d145e4ba6ef148921e85ba2df9f38cb8ae2d7581865ba262a0a39d0b04c2", "1b07b3007115c7add29b408c93004ee559b33cc75c3c0173c326740833f1a84a"), ("188ad4681c19b1865f24dc687637ef8990d5faccf8a44a2455f371f427dc8550", "1f980acb1f42cd57696f633d5430660f6eb9d645aa673ba81d4640a63b2b635f", "038b7e55629f24ed37fadfcede75af4ee4dc4a95f5e72e75d342264f73fa7e04", "21041e1dd9a805708eaf444d262553ea55bd4785d32a442b99731d78a5bd52f7"), ("2bbd5498a6dd9c6dbbe40437745c83d601c712bbe65dfb53ce09ad065200fd5e", "0cb48536dadf8aa646a22a5de2759c395faefbc43c2b2e4518d088584c408f56", "25c8c6679f3fa2e834bdcfc5fb0e72ed8f9cb3ab39c307e087683d9cdaebf53b", "0c3a3d7efd1658abb49778b71c88abd685db61932cd05b8659ea8b3f3843ac3f"), ("10bce5c9fd10ccd17a1683a40fb4af54d23570aea77325db39e7049a33374483", "17cb31f998e74b2cae49a4410dd31e46814b01dba2ee376a6dda5a81fac95326", "2d0561e69e315383d4da8edc431d9f1a2d3ef1b845c0cec77f302b7c75715e2a", "149a5296d5d44ec42da332224e14982fd21cb60ed963efe39d07124367f03c2b"), ("04de250199d144b1ae11173ec55255d394563eff9846b30899801cef2114cda8", "28ca10bcfa9c6da535632e40098c8f8576f93bda5f122ad818639486fbc6bd48", "2852ff98430d6dce29461ee4711eb74c6465c20a6c57d8e1c742137ccfd0810d", "2198c8f67455be94a148b306f40c5542572e83475a252b62be2bcabea3d691bc"), ("03b7cc9a81673e0b1620a83a808aa991a52ad07a5f539dad445b667763a80937", "29d8c5d7ff5338ef0ed659a45eb2d56218819b4225f5d16df5e90f5a6776899b", "022b9a6ec38f1c30659cc631a01a034bb70a47d0130afa7ace18c5cc9ac1621b", "0edf4a76d7a407dca8b09ff2469a58e40b2b59afd18ab81e0bca5563cb28f704"), ("02eb2c4144713063073a15d02e88a4b0cf6e7ebf455ba8b186795c938811606f", "20e372e0e701d39c50b2be29dfd7b9af37560ed2eb05aaa89f4f52d1a63b63b9", "2039287b5a5e0130a7bbcfc1cd01a21f6b38390ef2ef17cc1d5b97d2a865f667", "1a957246f41072400b1c37715c6948d874e0135979a37e80501594ed1cd95ecc"), ("0f4c3c2dd1452d578b46c5fd607a72a91623ffdf70d3cf44170de4ab47cac856", "27ab988900fd5041a7d19f3a82f8e104474b66d1d9f7bcf4bd2a9dd20f8cb67d", "0c2dbc808ee9f7155d8f215a903646512bd25adcbd57c8c390996fadb1082f8b", "1d62ae64b4a1222f51d9af793dd72cad87f5d23486bb6810347f4c4d63ebb82c"), ("0fa328369a9679cbe00d84f864f537a511625afbae9058a06e5c3150f451c65e", "067a40556fab1cb2eed79b3132c95cecfff1f8bc1896bdef9cd7e6a03c136ba5", "0ffb5b21c5fe0c7adc383a6315506492246a92ef3dde98857aa7f34949646eb6", "2524bbb43dd2b6ff4a28416477b14ee784a6562fdc055e95d0b1226741e810a2"), ("0072022131fbdf25322a7f754bd807a01fe2dcf9c2560055a7a00a195370c040", "241eeb3e4dee999d44699e0fe196ea8cc47c0221a311d34cd8112d3390a0adf6", "0e704745474c1b5e1e1304ca1c4e6494f5a2bfc81d909d4ef381f76c0de10d4c", "2bd16ac7d781c3b0825854ca00f37f3c83dee461d2811743e58519cbc7179803"), ("1f9b406e2643e46a066b5506366d3e93c04e3eff57eb2a4eec07c19fef1df0d1", "285ac89c38e9013d7282108444a959091f8d45729283faa787dd53bc3c3ee486", "2c7c618feb5609b9e6297714f3e994fffde9f5470513ad4687683a3a88ab8f63", "21e0227f11aa4900ba19b7d74206b179ee04c2225488c83adaad72cf934abbc8"), ("259f04246fa4ed0f9c1fccb4c3c10e20886d8b884cb1c9d1b1f89b7c588e6275", "3052bfc49ab418d8b47e27034be8568a9100b40fc8a301ada21cf38742e66c8c", "2411e2a22cf7b8dca93f6e98d702fd2cccc216104ed12463920bb7da525069be", "1faa12ffe124921e826cec6f8d94057e521d8d52d5dd1c38fb05371912c9548f"), ("2519292ea4c96e9041417b158373c5e4dec89753e6574e9949545985a2128328", "0996929b0d38f330ec2716508d38bfceed286a8ee58eaf64bd3017171dd3b8bf", "17ef346579f6e57bdd42ad6c639e2d4af2d5e8c66f05237c47c7ae397dffbf40", "22297d4e2890a666811aafad2b441101ab1c6fe9807dafe143a228ed3938c40a"), ("0bf92d9adf6b435844cda5d750ed282b107366c1861012cabc2715806397e982", "0702bcb5f92bd88042f26e7e4672c803aeb332e8b7fa9606600d42cb81592fa6", "25346a98244aff903b7aece124fcafc5c3c37d75ae27fcf2e8d887af758ba932", "1964e17576db4d7bcb79084e7e97e1d281585615e6d0e32b87fac27991ba7ad9"), ("129aa6b170459018fc21cbb3a6274fb9ec574f7ba08fa81b6f3da983ee4e62bd", "073c520d3c61afe81903aa2a1275ec75081b570d51c17f4e927127e46d4b9b63", "03a482b4af71b05ce7694cee1a78f61f87be9ac84dd5de3bcd4db10e2ead93df", "2f8a37099785990017450727bbb63da4dcb5eb3bdb699c52d90c55eb21f70fb6"), ("00cd6334a30333fefae2cb8a1ff5e264fff16d9aab243c79e06d9da85b2e6984", "26d563d97f0f96789d87ca97861375db020a680305b5d3b74d74c39e1de5e680", "0220359c810da088c79b11c6f3ff020e53db753b15bb9d30a070c5d2bc5d54c4", "18bfddc077f22f5c0a35a4d0351e2a12f95685eeba3d44435912126f36a06efe"), ("0f4bf3e6ac25e4bebfab641975828a0049f63adf54db1c6f73dc705a98886312", "10cdd43ac3d44b488076669c4b4334eb3d37c48694207881517532434b9469f0", "237444cdb6b57e2b2c5bbf07a01b9bed80756b1527352e52c0b2235215c3ee72", "205623a06cdd315250999d99a102bc61b7749be20a8684dc178b48dae8acdec7"), ("1c39d876d2ccf90df06ca1dd6c0a757f54bd385db92abff62a3ac4df8b197162", "21b1d16ca5dfcaaf27fd5ea1960d3070b4b54d457f8759c9bdb8b19cf8e930e7", "269810ba775ea70d8006b3eebb22ce060246d0641f740f5a3d688ac69a613d14", "0cc9c533fa6e0d2680dd2836df6af221fe447e45d15a50a1952285e374278882"), ("29908cd8d62401614dd824575ce78dca1f5a1cb5082b2536d27812cd76a8bbb0", "189e0dcf88e070c6deb5f78afcb459be3c2cb307b6400cbe6ab60241978b0921", "16d75bb409b751ad260914922f9545f1ce3c0ff794f397ae7d628163e2d9accf", "08097c43cc501610f6a0df74b2d08c56c4835cf1deadb4f0467eed10701e8704"), ("06398cfdae0f7441e1a91ea140bc1c35164831ba480a0486be4dfa787e65457b", "03bc6374728311eb6734978bfa25900e9f96ebd986743dbb77de1706860bc6e9", "04f5486bf3a9fe7586ba6501a5cff69b0ccbd432ac285eaa0facb2989c7496e4", "042df2e9772b61c66d7af91e08bf8f78dc81b53ab49085a392896b4c24cab5fb"), ("29547b07b1d070ca1643ff6feed081a84ebdfec310bd6f9b77d0c55905a26e91", "116add78abd0a0341d8f3c145593001df425523659b8e62a905ce792e6fc354d", "105834cc2872a79c25c96dc10ad253a9fcb0f4e5e536950c539f50915e954c2c", "2414fa3979fb5f08dc39d77854a637b5df2a2e227f67a033bbaef2d4ce456d40"), ("1c1de615a49e57466116d7f91170b8210a6fa653e8d9134f782b55c65741b7b3", "28ae3af7cdd56ebf1398ddce772b68306eece7e76836ec58873a70c9ea0c37c1", "2b0e1ece665b1b4418b0b1b47846846b16f7136814ef4951be5c97a8f101b628", "1e7b5cc8ad70091896451c4dddecb0054b2fe93dfe541ab304ca23dbb2ea303a"), ("0d30643c9413b6ec32164a838c957113429c434854ff18429cdf217d54a59d7e", "25cc5438a8b3fd8242c8dc164f7bc8e5a2b71a8f9780956b1d4cd3edd3d2e3b8", "2ea1bf49efe6d8bd54e1c9117af256496d645ce9ba9fec3af47167456436dbc8", "00ca3dfb6da68d31bd8430c636e013de765b41c280d0d4f917b83ae0b0803c0b"), ("022fb180959ed2112ee04a2a4419c880db1e0744ffadd36f6be3a9718d25e027", "2eede234d06babf0bff8ca633b40f27ff60056b9a404492c7c214b14c1135be4", "2a49a0661454a15d72a1d28c3f6a722f995ab2abd59ba58bb54d37d9c76ffd6b", "1b959ecb9ee37baf8829fe7f6c80e9d66d310f549cbc0f26b345ad7779c2ce8f"), ("1e29756627bf0df2881a7983652262447a251c1812b5d1c0e305a91bc8b871b3", "21a9478099d627e34f1e38060feb6ebde1ac7c1dc478646ce2d411d7268bfb6f", "0fa5852c91e9791aa227d983ff4a4cc20768d04ccd03f2af99823518af17df35", "0f5ad6423058b31faf4f9e6ffb714fa39ea2196fd82b5446dcffbca54beb9aa6"), ("20573abbf846e083e8f1693072f16a4c923f4d9ce9f113cc30c770ed80b52865", "2aab8d7737752fc09321b71af36bb663959b77aee69f677a24ebb55309427f8a", "2e7e6eda2c5ee510c7e7613ffdf5e123409e4c0fdd3300ba0c951af6b579cb21", "10711628594b199109408aeb35afc28b04944987c72fd50b4376aa81a7b50e26"), ("259f6866b8a134069828d59f84bd2d41dc83d3ff6e274ec268e0f118470da9fa", "0a6f6ef5ca6a199be1b13036b0f8444c4fc469e817c7a8a5968fb156efb19a73", "2252045741016201945f934a301069e125b49f8b7dab3bd0d3be02cb3207afaf", "1aa8ced42841416c08adbf71c9f89a46b16cca5587da12423b589744c4cf5e6f"), ("07aefcad19d9bc62e61cca4318ee867cdf625520b4c55e6ea4eab14a9ea39adf", "0e329eeefa75d28a9096e3a7dcac28f92e58784beabe7ac8487b83f41c2d0d7c", "07c1538e87158275cbb91ddd427c1ce5d276902522633cd7cfe559fea76252c7", "0906aba7a92a9f8abfc5c4a380de5e9532a44a8044c006e386c2b1b2fd96e0c3"), ("27b49867840f4265ad614082c2cc5ddf33b2662ea6f0be77a629424250e94147", "1d47553de3f87363ebd59f714de5451f52bab05e150dbf73000b89b975e8b19f", "06de87929a6b6e1de04bf63db3d6c3bc8f7c7f18a74b7374a7bd53fdc0c3dc9f", "2d323fb8fa67620580c942cbf8e5b2ffd5ccb81dcd3bc6477e6aecfc3f604a0e"), ("1d9e39bce58635cd549802f8888340f1cce1059a681266c92697051936a24e8f", "29929e4f4827bab5129cde944e9cb8782f5aeedbe34768c6d7fa1aa0fa1392a3", "02961596f4ee247e7125456d5ba709e170490c610c31bf98d9bd63deb1387f60", "2cba57e5bb09af732414400147a9d3861627b937cda415895be39414f48ecd91"), ("2344d960b3fb4b8ff73778613f7d501381a0930523d771b530024178cf870b93", "0bfdd33d04b76a9ffdb44a43fda3f1116d98de66ff727be6e74833c0e9712cb1", "0676d5913def24a8e3fb4b2f01b5fd68db1d1e31c9ece3935768db4433fb1a52", "1903b54e966ca69a9bfaf52f13387385dbfefa411f97997f8e13ead031f82389"), ("228ce3af11a8714b7d6a77c31c0a3091e1a2fc549f0cd7ac9e86911f3b794ef8", "25eb3c4592b7f1db3162479dbeef736a5299e39d3fe69bd0bde02c32091aecf2", "2f57c4f918a1d77c558c38e08456f9da6fa9666e6343200e519a20f61a269a51", "2b24e138df770e686cc4abcf27c41ed99a2871c87ec335ee112bd04d261413e7"), ("02e2089bc98917adb48d6b6d24f4137971ef38963dbb1a0059920616e33d37ab", "2cb26e10cce47d37492651793bb8370a9fa91a468cd6cba99dc471d4093a175b", "0eae421a06be3ab755b657f877b1c2485be40e371ae47e4776314fb7d461de82", "237e988a7d7355ec9209300604604e9b9a6e4e01c4d090ef4797b070e1eb4139"), ("20217de534f15f69a35a60f970db05ff083616b6c1eef7f1819a695096f820b2", "11e917564a7505ba53b700eb21f22975683e4e57e9529113df6310151dc47d03", "1255e5b1ecc13cc141e53295c344343fdde65795e8a5aeb2145d04aa137276e4", "197c85c22aac30f86599c76b2a467f1fa9f0bc91a0c3982c5f98c46bd09fa7ef"), ("0507673c3ae9cbf224c35badc930fa75d8baceb222cf27ad7deadb35d76dcfda", "02882b18d69c869e187113031de0b5a3571a900287f25f358d213b313c980251", "10dabd7c88bbedff7d711f9acad0d5fae0189a11fc3b4b899eadded19a82fd68", "2cdde55b1c6bb6c031d3908cfb17869f16dc58c0bc0da7430bbd709e3bc5fd75"), ("026e1f528ed5f06abdb9ad390a9412fcf894a4bfd8c5a2312162b3ba478ef782", "242c9cf85843d9904e63c9bcaece3b61ecd3666a0dca531de94b3d85516e0fb7", "2c73bb0bf1da2870992fd49f23155f267518ddc8524ec7cbde651c0ca159a12e", "24811c0aeecbe53fc24e92989b521a344a62914bb9d558e62945ffea106bf381"), ("28bda8d60b3eebe6e5aeb52f8a7a274cb6fbf271598a4988166129d88d3a0f44", "2c92f2c2daa6e5883590e87c87ad7d4cc56108548cbb8f0824382580a383f8e2", "19e981fe1e72d8d86eb76e2b0832bf57fb577b58fa8931bcafa886d5b3f8a34b", "2c1d7422a8566eda2f955733f6beed02f466dde37949f3f67a55fc4ecc5b26b5"), ("12b17a560bfb26808e86aac5d60560163ce86d937ff0ac9ab476cc93c414edcd", "1eba79f6e6db1e9ebb04eb172e283e18a97d4b208148dfb33fa4c9f72120f69a", "123d2af77a1334274e1a645b77acc5a26c99a1e9a5a4357818919d91af3b26bf", "2bf6553bb683fd8d85d7c66543aa684fac852b36b84bc77451231ec26c6367c8"), ("211ae04bf4bb518ae993da536d6157ccf06e706bf0184267ab33f85629d9f8d7", "0069f9abf54f5264840fbd43dbc5d16ecc34aa672c5a45a030c40358cb003380", "2bfd7da9f4d29cd0f290f798adbe972e7a0e0b1750f56d7cf387c927af1922bf", "1dcfa131d31bc989998468fbf46d6de377c81176105635d68745b0578346edc4"), ("015d8b8fe119cdd3efcb6de79a951abcea1b931fb3f18bb6296b5677ffa07260", "237fa8fdf0a6d733fef57c5b4070730c951e6c615f0dde88035da49d548e4f12", "3027d47752b7e6e2594d872f3c2c0e71dab8ab5a7bc430ea9eb06dfb4814d59e", "2f6d3035e806056c6b18e7f6a36ac32021ac8b774b34e7e493cc2cde8d77c3ca"), ("20c78f52597121048f07a5a7b2ffe3179474624a33a73e7dac7d36df5ff51d98", "25f88003f1328a0a3aa9313605cdce4de1deadb3d2cd72eab5fa006a8246f13a", "120a8164d05c0f30dd0a7a61ec7ead110e555da3c38719abcd2e4670c1fd4725", "163f7be43901958fbb8c82673c93150e6a9ed7442f7880c89757e48ad508a8e6"), ("03d98bd50c591e7b4e4f94a0f04abbbace456dbbc1189395b561b1952d4c9253", "193227427e85161e4711cdabad2292a8547066d690fd6c0c3c0a449c1c2c28e1", "27165ea1d1521f4f5963ee1d1e22f79a9b4a6645570a6e54cd2f7df4060a5888", "06a6bf2eb71fb279bb0d2fb377cbac0b5a71b487433fcd0a978f14dd5be7714a"), ("1cdca0a2f7eaffb7af7c4ec09840112f5022ec41511123e11e2669aab49af06f", "0da309bfd8688544475ec959fe260de9a2228d51b3c8ed3ae829434a303db5b7", "1f7fe6bbe947b79a79ab6f6a3fd5407114a52a69e05a7093b211d291e9ce623b", "19398bf651ce82d3443d757ac0aea7076b175695b564e5bb5b2a38971d2c276e"), ("1389ff8893c8ec7b77c4ffe9905a1bac3611cb19b46763b6b8bb1ec1cd8cd137", "13222f3b34cf1c67929f35f83b858a2fb26e9b3cfffb9570d9149fe0da23cd29", "1905de99dfc0f224ecdfebdf950d704933b2fcaf48b7cc511423449151ce524e", "27352a8d793653cb73f418024cad463733c6f95e218283346d5355435007a362"), ("0b84eaaeff45ec7f8d8b01145b2a198b143b86a22fd59abd32f364427c06a5eb", "25c28ef6945d35b20b6bfabf9b1494b7e263c435ed71b55c9e7e98b130d929a5", "284128a61d19622110f314548374f63cd15d0872d845d638b56e6cbb8a6b529b", "03e091d7e0ce11b18870a11f2b40bf41ae9eddcd4ee122747f2dee0f07924a64"), ("0a2430383521a0b21efd9d8e8a018bd39cf867635c745da0fdf4fc8dbd209874", "26b9acadc66aec1faf2e54fcd1a26438eff633dc25e2112cab7f8d891df23c5a", "173a9a7535a349c1cdd9daf0f2dbec628f75031a1849c0ecbe9099d576a0c821", "2662ed7c1657ca2f0e3e707aad93d75b576b383af99e1220f9a9e7eb4a518e58"), ("0d2948d9dc38507abcb9229994c41c3545a3d2c6f9d31ebbb452830e35f8f4d9", "2be543ff4d4bf12d9c2c079da6e38bcf9d27e7aca7cf00593a7227d8b96f2979", "28782863212f41b10532793f5d3abb630f81a24fefe6a83f0dccc3e6a2dcd849", "0d4340362cb9d62ed36a9b693f1e6a89ede56ff3e5af49eb43c5395eba77b6b3"), ("2024c7de61642308ff923ce72f7768a7e176a9d541e40878525d723e4c0a2993", "0e77c64c3fb0783ab6f1e824094dc672cc57430467cb3dac1a6f4a0a609071aa", "1af3af229c3b0e022a6e134fbe7f7ef80d5b43d7b9c0d6ad4f3c6870295256e6", "185aa69315d20655dcc0d23111b32356d62641c650cd008663c12a927ea0a9d7"), ("1e5f99d617fe8bfb048d2d84958986ae9b9345ba80fccdb1f57b04ef4acab3b1", "00f1af4ab89efb29a88d06d49a45f54b44b776d0b81e473163c715766de8da0a", "014c45a11c4ef1515b79508092329b10f9e560a2c0c8d2425eacac9710135ca0", "1e0d87d29d1e5f4b20e32a8cfc78bd985c68ce32a8b58b464ebc882cd7f4396c"), ("15228501d42f6699bae657f59ebaaef0855f83982cf5b61562d56e8147f33592", "06ecf45db1ebdd4d6d943ef040a908bb229c959157fc67f314abd65d3c8bdb28", "19cb3aca2aead04b9bbb54694a5ed301e440af53b96fc4ce3dc2752d4be4d6a9", "1530ad1312de172b10c09a72a2610f0c791b005247d838885b5ca08422987b10"), ("25d152d052a5e2be7ef7dd43a116e89e901749f79d84d08c56847c6d52ce978b", "05d85dbf4626f4b675a492ae3b3e5f565c405e9f70eb5054dbd64d78920a451b", "2589272a6186297daedfa7a48cc042c6c82ad0b5cff5ac7f0e4aab9bc6a73034", "17324323ce9b1760eba2a802577f57d967194778f73ee61d9d45408731df9c8e"), ("2493411bbe5ac55c1eafa09550b518dfa709a2cda65303342f64ef6eb01b292d", "02b83910de9f6a15e0fc65bdcedd4942bf3da567d2defe82fe0fe479a6b207cd", "07475aa64fa2bbe0dbbc001a6544ed6806c7f37866db4776547cef3f1566a164", "1113613552ffc7f247be2d46c830dc3586fd256b82a2727e6e03c4ec6e737de9"), ("091203721eb0bf3716ec37d229953da02cdce4835d372a3b11073035c031dd9b", "1b58be6b196e39a878548242a5a2aebd82afe76c554ac114fad5395233662cce", "0950ff6031d17f49f4023591479e1500dcbee6ace9f0ea8c8b1e5943e12444db", "10cb689c4b52d14972dbca43a2291a3137e4d1a10ebef8da078c73bd4a8af81d"), ("2e6e74cd57dc5bea8cfc702f7c91bfa589b55c07ea623440d46ab929e82eb005", "2923bbf7c0c52eedf6f80c519468fc2936fe59798bce15594ef5758aed399a58", "198b5bcde0906335a4d12a91408154046ebbf21cfa5b2989291fa4150e27b7d5", "06566940615258a0203767720cb9275007010b12e57c876c731984209bae63a1"), ("1eba63f28a9a0f2552e796dfe2239ca41cffdbaff858fcfb87f6fc20f091dafc", "1c2c4587e2bb418a8d2871e9fb827bda4547da72abe17ddea2818f6090982f5f", "074a610c4441b781595c7c6ddcfb3312f35369eaaacafc31e10599437201eea3", "0e0297be6275583efcff05336e98131fa9d69c7cf5062a24308d0e257590bd34"), ("25bfd6f483549d3e0ca094da511080a9a526dcb3da98122b07327c64c2770f47", "2844f5e5b4f3e426d7299c2c75cc31c7a916b1c61a5a93e74eb5d9ef21b09778", "255b8d136926da0b3af32355d1ff87976ccb67b648e861cc2cb0c2b11c1a4baf", "19c637786137d278e63036f6cdf08fcd1856109673bbfa4168da109bf7aa6dd8"), ("1dd072c011aad874d43d46c059165b4db393e328c8cfe8302909e81e26f2f9c2", "16d2ad9691fe96905968988c9ee34380d97c8bbc06b909400980b243ed8cb452", "0b1acdf4607595690cf4a1b5daff284077d85c224926b825cb3e45c614228c85", "1dcaa5d22397e07ff5370ef1c57378a675885759de03c528b8faaad7b5df4359"), ("21d76e196b012a7977852078fa79b3ee308fe14aaa4152a862259f1dcdb6e04e", "2dbd13404b4b1e0f0a15bc3c70175b5b5edecebab69b4635dab84206f8757b50", "128ece98232aeec6686fca0f355806775a8520286fe68584c6ab8ee0fb670a3a", "0f1bebac95e31366a2ed8c395b5795a3ef3881e56bc1beaa55291b9b2ee51192"), ("13cc60f77a5ddcc5b9d5b08e13893f1d8a82bbd27946ed3f4265daa9de58c69e", "2e814da520ab534f0cdb54149b319d2ae93f5b0960e36d3ff42471cbdc313975", "233c37e68e7a0877a38e3212ec90cce3ccd0087f5366f1bbf30ca56036c45ad5", "0656ad0ad9839fb83a24bbeddfdb89bec9c67c61b7c260117a34123b47630498"), ("211eeeba795259d377011e76fd855e40e5117d89f862aba7c288a9c5b01610a5", "08697ea485cd4cf6cd98bc3b5f6261d52a5430569dfcacf8e05f8153c93bfd01", "0c67ba8045a8fda5dcbf6e47fc09f48dc8cc556a65b13cf9f0201aaa84a09b19", "1d3025af762da638face706d7c3f9f966e0e699fd1822645e74a9639e105b746"), ("0c0cb4dd3afc72fa18f7995616fc5f797d946de399687882d39868e66742dc86", "20e29350fbb24097d31c6320c3724506ad561afc53b6dfb1f794b34a5dae72ab", "1954336e65cd13e310a539dcc3af8d5f4396e2e7a2f33881ef8762b6065e4a36", "1d73814fff55f32c05ce61a1684dbfc4374fbfd3b6d3c674082b82d9b81d5228"), ("2414551f91e61c74777fe267d62f6ac3a1f4ac0147aa7196155be5df55b8bc97", "05ac6d95ece2444ab610ca7eff607d1dabacafdb398054fb5e16a24a603b3e53", "0e0735d0d278ec8172dc56cd58a2dad2df4fa43c709181114cd499303ebb05f9", "1aa9324e16ef354ca0ac83306e8018fd189d439f3666942c89f71aa2e0429e22"), ("2b0f0666907c7f5b15917767c5554934b03ca1b6bcd3a0d41fdfc2617b506d5d", "2eb7be09a265d14a0645075c43192ad726e1b46450b7882826bf09aaf40c115d", "1bfe958d9a49156920cdae232c61285cd98b131ce2936df4688c3f28986048de", "23537c631bb8f518f84d323bc79f2357f60c305278982a8c690a52433f4d9854"), ("0ebc0cb2312322c33d47d480f3c5b04737f8dcd33fc4a654fef6d72108458ab7", "0f724985fcebe22d062858adf01422c89c0fa6ba6794749bfa9e67881a40b1d9", "1bf327fa4aab285562dc427b9b6ad095c3d5dff28b5bee3dc3f61f5b126ed284", "2a0cca74c33a230fad80a4cffd8eeadbdc7ed59c6926b4c4d9029375f307b788"), ("01e6f145f8450724169c5ed0a99fcc551ea26f7d3296a9d9875bf83dac7b4e63", "13e33cf0a623d3477fadbb7d59937a9e298126d5179851eb60ff9abd2ccdd306", "0615f770ea39a7a0f2c50cee4c6135c9e503d6ee88abd1db14502d812f89785b", "0adc567e2954fd749081f46281a34a78f754b206df605d666cbb730183ce8673"), ("26bd6adbd7eed3ef5cd34f5b59182d48570d2efcc88fa402cd3c719155a25633", "207001436da718a7de6ae6d1f181f2ac2f2b200140fdacdb12ac058efbd33bf1", "1d86edf38693c34c478aa88754bdf1b8aace9f585e2946359ca356e584b0fe33", "1c9a261448c9e95153577f06c69d1e1f217677291c7865860a8674789a2e98b5"), ("2fc01f19c39112abc013c61a982c4ca14d57597bbfb9571100e635c801e2e27d", "010364244daabd8c55625ebbf4690fc4fdfd8efbe44acc027470c4990921f6cf", "2c9a3329875588c8d3b907d7e5e9ac8d08ac5da9229446f5e0f3f965e7ef6e28", "21a5ba798e4ddfc9e8cd82db847a5f19cd792f980cc9cc20242f1fd56c976b85"), ("2b783e2a9e868649b6b62dbf5215d67a7256051c468b0b0ddec624a0341d2204", "1558148e0a137935807e9a3d0f3d1bf5b6ff1ba5e3537f95442911c90e11b7eb", "2b809e4c91b7f925b69217e947ef370cfa2fa3954172833bf341ec1c09656152", "281a56afd4d54ef14495e04cb9b9c3bf660a148dad33521ba7002b6bdf565190"), ("0f6482e488ac31f5acf1fc24382b117c4d05ede214946f4ad67c5434808fcdc8", "1c2eb3a3e3953ae2b0e18a9c2b1af22e25c045433ac13a6ad790d62aa2d8c122", "1861ef6463137afbc437c75b76f7704fcfd03c2b12c7e04bc1f687370e22abca", "246834dcb0a5667920b6aa2a134b5d78d00ca0ace4ee970160236e41bd0cdc86"), ("2c49236906352d0ef805afcfcca6bc8b7617cc514a460300f076774318fc8389", "1d836607ea2f315262d33b4dc1d1adf55c5428ba43076de77cc6a6303af6ad44", "11590b5992ba95b157cf81a43fd6406ed7aad2c29e8df7bfde165d165d5dc293", "16b249e3552d96a95db16897fdd3143b6c9c54030eda887ed411cb70173b47a0"), ("1ad85776b079bd3e23eba901286e565360f3fe5151c0236ffc1ea0680959c276", "16c80a947fa6151b970df3d6e9547a672cec65be3ed2475799a1ff1824ea7a8b", "243547b56440761a8abe9b6df1d4b32123535ad9e39f4ccf9d66fd399b70d03b", "205e9ef58821d2f16d800eb0e42f0060d2d39e3f28236134e2ffb5438bc52d1a"), ("085208d89697c0de8af98806166ae80d0664b5e62ef8567b158b7333a8bedf5b", "25d22761489ee1a15d367b2a6ae7f88915750fe44d808a7c8cdaa513be26077c", "04f57e1a0ebb233be6a4f6a0bcff1bee57df2efe4558a62ac48dbe4e11d24e64", "0beb1a232d13fb255b85cef6004dad36cdbde9aa4642972a156123d7ab110ab7"), ("0a65cbcb2874a2b7826f04b81ad877414991e06765fd5bbe3f1aa2b3ed1e111d", "1a049934cb91935fcd6bcd4b2a4e59efd56b2f4c30fa6e8b959842d2640a4c49", "07872acd0b8623b5ec5d50dd9b9e183e583540ee2c1e40974b9bcda814f1ff27", "1b54b9b2b94d9cf0b3752e1b6dee78deefd2a346fdbf113730efca15e39c1284"), ("0adfdee12b5490c8d217e77bf1fce6827b94b40a7442470c6ebf7ef665e79b8a", "2d004773c7648cea16fe76f2f74b5dbb8288b94584e53d775444ee3f08f002c2", "053a459ec10c38a82cff2a4304511174c0b11db40ad1afc1f6b8e2f71ad81705", "0b13b3f6773de176036abd253c077ba4c903f90a40522b3d2f29244e8866a25b"), ("18c680064ff27205664dd26d4832ec4cc70370ee7bc7f781d4e94315f1c0ed31", "30470a90515149c373a288a6469289199ed5aa49f0811f14e65a4c8042ac95cd", "11aba2aa5fc2aa2812aa8ec991d9ca1a2d84c604eb27dcd304ba4fd838a9d8c7", "2b5ea0c26915a1672de966c42b8ac8d70f9e7628a14d52ae4c739e217f98462f"), ("2b7527c5da4d76ab44112c47d1bd79a2b35e8f607c5af86e9ee208c90c192aa4", "05e0293eb7a99c91cf434756e6dd7df5754fd03ccd24a74cc50c6bf078b3fdcd", "211feaa689faeda8b825c392a31c08593ee6d8d3908fa61d0e36ace98fe0c4b6", "2dc446cea035d86fb801f4b5642de87329c3c96602eaf728173bd5d6baadebbd"), ("2c0c9feb759792966cbee70edd17a514a6de89e9be3da9aeb4f5fc880b107c61", "0846d4894d790280034ee7dd2f316e5fe5ccb8a81c34624893817abd50528bfb", "1bd4adef37fdb64d86bca0076fceacc355c41a9b5b5b8e1f39849b6345a17e50", "2da5decdeef9d517fbec7647a65dc46c8b5d0ce7a0a0467f0382be702b2c76c3"), ("2d71e73a76522c60a57ae8075fbefd07513873735b18f3243f3629876c498547", "0b39b4ffa51b7dd7d9653b8fd1c22e9cbb98c7df18ed2c012dee45b16cc70163", "1c7c8fe9df0b391f7b240ca1c30fd384718fb0f4ad5135b053953ae3aa24cc18", "06512c953a0b6449d31e0b5f7be8ec3aad1114fcc571faa1f417f0128fd705fc"), ("15a296f45fce56557c81c6d958025cd5157731ce1a7880b8c5bb4743d616c551", "276e50aabfbc2470acca7681a2e6e861c5e8fc7e3027bc92248c24bef8c7b651", "09d7123ca6f318358a9f8714afcfe153003f11cf5f8742fbfaa7035f927ce9f9", "1edab2e0e84aacd26508f6a8cd8b45ae604fed919f99d2c736eb9c1611b4477a"), ("1dbbb5ca103073a149278fa65efbb49392024f2c1739b5c35279d42407325d8f", "13e8aa924517e3cb68eb8d5135cc27135646aa8d2c84fcaa76dbdaf1cd58edaa", "2dc9cf3ac09939ef658c8d05ab986f7d556ed6e716648f2ab5de525fcdb5aa8e", "1a4e647ed4277441298f09b02c284b2df580f18112734e3f428b2ffad20a5a12"), ("0ddb5f9a248144c2aaf56480369a49b9742a20494df6fb5c074204c06215ab2c", "03d1ac8060aaf8479795be5fc07158805a84f0348bf8519f74808030b0bf1949", "0a470881048a80f9d67181979c54f8fa452a19170e1091a6cd80111714f8f1d9", "07404d1d36d2178d04324197606dc4001d3acd2bab3551dac436c15588031468"), ("101b6b6baf7136cf7924ba58f8a52d81f267cf6bb5a8be8ea3637841f249e9d5", "0f5167a2d5f5b786791f5d0b9b713d80c5c6267bf3b1f3b77e51229c89472625", "304ee790c9221a7b627fb5c9d1c545e14458b9847749cdf7f9ffb03dd921fc99", "07590ee8afd0e4250fa714c7ca87edbab18932b797fb4f9f68671cafc9a2caba"), ("0e0f37b7f7db7382164db3c7fef379fdc5bfdb5629a9f3a48fd0a7bae3f41bc9", "140de43880a990dfc96a4f379b498637f1e7c68b54d4a3ff70e5bca0609ca821", "1895f1b15ff3ea73cb86cbc91fb23e80c336968f47c8460344a9654f32d6ece9", "22492d3701d39ba19c44b48c500a9bdccb0d101d586b6bd950bcd65e883fb242"), ("1abe27856d899efb2c923da01d35da5361b26d496f4eef6e987b8675a04446b4", "0e1d204565e702eac6793e3f70f765989b75218f82e5ed94b01e8b957fdc457e", "077d055de95b2184a7adb96061f4d84d15c736a964bcbfa8699adf615653fe34", "100cc51c13b7906a886f1d7f940eefb9e003e26c3c28a53d59159f198bb59883"), ("1c15b7eb00c32bc2d0fb04f2d778a91b30bf04d6c4b194841a601220796490c0", "0e8cf497967b5c7c82a81c1916cb7b60e9714638368257c202f134fd6f5cd381", "2e54b2a61a843bf77e4f4efea1c13586f09ef89bff3a566e44cc172171330329", "087dce9f3a47b3cdca46122fce531b028618c53b071911fa7bae346ce73360b5"), ("2a8364bd16a4bafd98648412b9afefb52e00c8d8fbc6082d1ab7c70611c81f24", "013a762b0ccbcaa8724906a7f1ae4f21f0fb70d38c51829186ae9b27103facb9", "0f5410e789a6f507a4b80c6b2a54a204d72ffd935e2144c435af7b887a10dde4", "12778575da78e88bb4ceffe95eaae6d0fe851e61feb686a270a39e506a987316"), ("047fe14ff6f53221e6e9ad3eee94e6c5c211b20619c37d7ed285ca01f8a3f46e", "2849ba2a90c48eaccc33876691b508c934c529d798959ac8bcf36c19ce3bc353", "301bb6d49af027ccd58e5884bf6fa32710bfad8a388c56ab6f1a960699db3139", "0be69282799d122c264a906e955e72091bd1fb511ea2d9ed4b230ae5ab8938b2"), ("299b78909e08b815014ccec869969e06f7d2cee29606864d0c7d88062cb8dda4", "214893f33bebd31e7028908e67d07d8b3167fc8d3851277d574cf5dbc543d3be", "2e3520d66e35cf19f115153bc86f89b882c1ed931739ff7c97fd4bb0f7ec752e", "1fe23ed16301882245b70e2046cf1079b94d3e8bee06aae796585adf8a2c138d"), ("13f00a267c8126d6166ab2c974391de61f538a3627d95578a3169e3ee841ad64", "01c5117549046ca5447ec02a7d0bcda095eaef4c0705ee0e127e23e10baec355", "2cbb48d9d76945029cdcb053e8e168f0366e1ca6787540a159b49ca81488c503", "0383893ca617eccd0f3dc011a2d5f7c6ceb843488ca8b0a34e8ec249765eb5ef"), ("17b646ce7212e75b7291a0d9ac196b999e1bed34d96a82885abb67213b37258e", "21ccc747248e49df7de9b734b56d7ad4b82b96410d8f032e6ae19f0c6f6a6917", "03d1e21ba13419626a6e77d637711e7572867fec8c2496b4fd69d3e34d67fd7d", "03cd84e31059517eb13bc9b1ffc4588595f0b32f04c4ae7a31396d7b7e61adfb"), ("24cd21d53e3c09d9eed61e5c462d96de8d16f2f10cdde3457cae49676cdc6b53", "2db8fd1165bdbc71047db9b10e30427667fbb145bafddd990ac29d0ba8f8bf4f", "15bd293d4823800bd6201a44531a1fcc4b1c67c1906f512ba45ea153f5ce7c30", "2f34897560f3debc3d6de4cd815917da4b4639760bf036452b4493d42b0fcd4d"), ("22f8e2a0b199ab6194834f74e3cfae8e409ba634c3d854802587fbed43726d19", "12a38025d4ed1fec471ebab713837dcfdf5b48752c58afe86dd4659d21cbe717", "1aae9b8e0b35470de7845002b8e7b9b0ba77691dd8f7009992a6981dabb89a2a", "17760b767f1ac3c9a85ce9fe6ce67930e87868933814081ee1c2ff2a6ea674e3"), ("02a8c27872f9a344d7f0ec3cff186690490e6ea569c47e58c1bcbf0d6d801999", "235556c73ece130c30200c65b5a2ca5340280df9c0c53c3ff282757e65792cdf", "30538d73fa21a9bac2a0fe0e631f874d2ccda6670e629a82b5c34927441388a3", "098e09c3d921e20e816a42597ee4d34d218c050cd8cf2d1ae227ab6b21319aaa"), ("1c55c29f45c7cb6a4dde2dba2c91636c972d54bc91a0d1ba651aa3449013936e", "0828ffa9f546527829946a829da52f4050e67e47aa87d1e179807ac5afd9ee83", "16ea2d5dc8dd651f63d6c8d12d892ef99bc614b6ba58dbdb9eda7e8abd44382e", "00162d70f048df2d80e4806d5bdd5b547d8d8e776ee4ae8ff58b4ced52e8c0e2"), ("126b175af6a601c9d441fea67b3ddbad79551b2c1e6c61b4dfbc655151a042c4", "176c428e86d6a48173b80c4ac96663c90b61cd967c018aa769847aeb73b8c281", "186780ae1c28139946f149e00a42962a5a6d5aec3b0ceb4995b8a4d6c6f84d93", "2203a81e7b5d203e8bc7a62e62b8b9b4868a73ed8a1d61d0644360101646757a"), ("2062751db3837067775ee88a21c14fba4359803c35d8445ef98c34a25da33a31", "065b607069a1b1cd7ec8a42143a5a37b62c579e3d6989a555bdee0614e083308", "11a7f369cf93ddba1a776bccfdf0704b937843754f4b921182b61946013efdb5", "2b1cedb078108572fc287804765985aded03551786630c6d5b8cf4c750f5dab9"), ("25b625fc07e193bf4123e7682138faee8c7614cb9541a08d28c24fdde17b828b", "06993843992f74c70c139b1e7c41dae56faf727bab30861506117010e8ba2e8d", "249dcea688c3e7b2af89b0b463cd55a0aabb0e8dd95e4a80830604442ccac59c", "205503bd0119b6f8c1645707410041f6822fe46e18d5e113d3a7d60509be8881"), ("06e660fbaf345462f4d1d19f59612afb853e38df93f19cf283a3fa3aa3c1ace0", "19f74dba6af9cd2d8636fc970826cab61c1923864b555dad6c9947cd308bd44f", "19027df49660649d1952aae5c67f89d49bb6a50a4a33dc17c032ba63ecafd82d", "1e749d681044ed57bf240d04daa038494795e2eecaa62fec5a29dd26f236cf6a"), ("119edb5b0806cadc8963cc503a6b1e6da9136404956fe4ac4779b80b29c9ac0d", "073bc143f6a6ae7c97924bbf7b837b1535436285d34c5aa7cae105d998b55d13", "14c3539b88eefefa338797098c891b4e3f82cac6b4980fd3f4bf7a65e14c9b16", "0ee82ba10d1e0c9eaf53d8f9c5a8972241400201a774aee67c102b45ec75cf8a"), ("2984c5bb86269efec3f64c72209f6185b81b8fcea2edadebd21d016077696ffc", "02a89c77303fbe389acf30004212447e8afdc467c660f143984f70f609402594", "171d71fd8164d45b759a998b0057714c7511e9e9493c0877b676d6ab9af04eb6", "1d40aad7d9d5662b8af07bcc2207ebf609c194e4449b5f47ee664e3a2d2d4187"), ("1d4d9f43d611a23a7ee1ba231db786b4c5488227c495063bde883652151c503a", "1f58a8cd0e1e6097d9f2efe31410991ddea403fc0f2b6dfd9bcfdb98d9b2509b", "1d1c948b618d4cb6690d67c2880380513920376e5733fe7f4af5136035266167", "0b2db6b85f5fd487574913224a4dc08d314ec65986113e9e1709e0cbed75b9b5"), ("0d950bafc6fd327ea27ad133c41f29ef4a2bcdcd52f1ceee35ec65f46a1dc394", "2f204578a7e105ae3c4b21b6dcd14eabec6626f5b15a31bb4ac24685cd5b2069", "17e84ed82eaccda16a263d75c54b4114b21f1fb8261ffa6cd593f9d5e32529ac", "1a884c527a511476ec6f92b8d1508ae4b52f8fe23c71ea827bf8592f56406ccf"), ("188a2ad40abc47b00789de05bd16fc480a4276ee734e877fcf47dc2ea158fc28", "0486f435fa5e387ea7ffd125cc0a469d6da9a34c19d034b85b5a3290269b44a1", "2016864ed929bd8304b620d36b10501af71c9a12b65d0ec0eb5511c947949b86", "011c26ca414271343184994b3ba4e6be96eef90f7d6c765f3ed40b629ce08939"), ("255faaf838f461419e9417a6274aadd47e6d18962662a6789558c9c999eeb2a7", "178422de6e6a0ede7b239d93cae8fa240a5dabfcb87a17482b668413f4e8e70c", "2ad4d9bb035f9331dace97db681d52e5bb7532d2fa275fe303d7f31676b65446", "0a706bd27672709c5146ea2f4e2cc14e89365670286c7ef824fda45f32870b4e"), ("190bfed946712ce5e1d260f796661f6dc9219dee2977402eeedb7e99643c4c81", "24ff3ae976a48625d57eb69a98c68e5fcace30e315a7a723b623b3f946817666", "03467dfa4dd21d2f39c7210e1684f93f25fb096e5a2eb43dcd3ad37e1f5e909d", "1ae2d73a05ea02e90122b2d4cc361216f21ba720407fd659854f2cc3f4bacfe6"), ("21493a7909de8bb67365cd32cdf7f3a4ca5c79ddfdca1275a7693a9bc7934828", "1a30ae683db4e79ce04eb89c6550c3eecb8dfd570082bf6211bccf388266585a", "2fd90e0daa0351f5318f9a80a31aa70d07310c38f29ebc8f355ee334b9eec511", "1e6640128931cc6a1da9c67d49d889d7afd7fd3272bf120c410a58dd4fb25cab"), ("079e4d0f1a4853a5ce2ac813d8afa29662686b9dd52e7a08d409678294f9cf34", "0d38d25bcc1fe8dff9c5d628bb8f1abe059905306eb7f5b329ccab8d90d98c4f", "23d8c4c53e7eb8623f1c61165591293bd7827c0e2c5c81e4dea4a8619306e994", "20351fac514b3c0df3af604df27e77c0a79af88422b67b92e5c8f87b091414c2"), ("14c79ad1e1535833b878e86a8c2c74f688f1da277f0a7ea57584d5a417ce2482", "0f0c0bbe7b0a55055a116b5da4a315c474f2ea0e6613ef8d6aee45f5ba4036f8", "17145646149cc94f1e56d67da758163807653e83ed1133d5e6b7fcc0348acfec", "0353f7b1e974a0f00da15bf02a3321267d0660624cb710d588c4db67f2e93401"), ("2e0dc721a85fb55755f400e2251baf50ec03241de803608dd21af6acbd260bc7", "1c8862a152d3193c365741ef17bc9154d073a974733e5138f7f12455ec078168", "1aec9dd965d6f346a6c81ca3c750c2b7b09d230a3fd96ded1f665c8795ab3108", "1c790a8c3c374e8f02d0abc48f0024672cad7e962d81e3edaaaa3bc47d651b57"), ("254863cb7848a9fef01001e97ce9042ce55141eaa34082aed79d838b662006b3", "1aecede4737e5fb3c4a2c40d3834d7b760893a210b8491c31e2da9968f044182", "1105967c3513ba5523b8b22106f07e3f452596fa174ac31bd9c7e6629d48907c", "0ce66d4b5a89e884c20ec625e7f31042d0f4a3e9446b3f6a03d48188541e76b1"), ("04fec41df975aab121daf5a8dd38d86a13b5f0ea6a3c19164c0c28f585b9a990", "1f940539b0b28f14c3ac2e69bb069c0c3663a5701fcef70c7bbee252b9b95177", "19a202b9e3bfe9b580f53a78a59802bd033b287708b9b348263022f5ee50272f", "0e5487e0074897614e72e4b331cfd931ed948022389a4b6b7b360da71ad29d5a"), ("2e53a8f2ecf9476612428c6878b01cac758710cf7952629c5ef5743fd6382706", "15bf5128fa5661e35e637075526519788dfcb3b34e2cff18d42fc35d8c96fb7e", "1fe4d4fe72f7958d0bcab3fe92dcf747dc0d31537adf0f8c4e2db28d69672cca", "01c72bbc100d510095c6ca9dee4437d3d9bdc1ea12e37f5bcb7e8a8be2fc37ef"), ("1cd0deac6314e4a0ea6ec43ac2c6ce814d5148938ec6ab3a1c69a6a214fff0dd", "08837493a3575726d2c332a3383f659394ec6eccb470cdc7cf1d01786966d527", "289115ad88027ec529ec42502906f5c875eb40b7a2fe40bb4b7107f544f137aa", "285d463e5b9b213b371821a19a7a9584151b85e9c5d2cfe4511117d3665075dc"), ("13ab150b18e4dc9f116030341d3ce5fdf6222dff38c5c31366e0e79ee2fe8e1d", "2a841557c4fd379c4a93623b71cb2beb28136d702d97e132a65216ca658935fd", "0d504b800d4cfdbec0bc0f260aa55275d168a6751ee174076714d02e094779f5", "0c01a74f414a19755a08d03fc7055ec9bff9ddf0e2eab2ef220b0248da5fd480"), ("28271af91ef2eb01a0a1819e3d0f0893164ef457609c7dd53646b73fc66299da", "281775010d09e3735d9bd81c81ebfdf4226dc85e4333f1ada18cc8c0736a80b9", "01434026359bbdcd8c91d1f942e66569018965478751e55b342647bf07a1d017", "0ec246b60b33f1bbe37852f64f5fc22b7ab1f5acdfb2f951306bdafa20facc90"), ("0933bccc550a6aeeacdf6b01970e3be018781cba700fa6c7f98ab4b5c2a1b096", "29c73119df03ed07784cb0a6e70d29ebbde4417909b3408dbe7ed1389940da3a", "0ce2ef2b4d8c942afec3508d02de82905ec48ccd54c5a25bed3f92792f5122fc", "2ef2577a203fdd927714039286f742dea08b1803fb2ace5d5b3ac308e21ec6c6"), ("00f333b3c1394e1e16d3c46e5ec04ba682bec8530e68cea6682ee30421b69dee", "293310fa073ae59682d7113df98dc7557dfdc4526994f357a191355f3c1bbc5a", "0aa17aef3a211026532744a06591dc66852050a4d44a2eff51dc7bbb367ae70d", "2c9bac057353f976dcf136e297a3bace1e768db15f2880964ca11f7c6a50b8d5"), ("08cf72e7558d67d6d97cb4bb242b17f8d17f00185aa5b64442c5a717d3b53249", "095eac9bb571ae8f5dc78e21ee9e25ff26b37257af3ff26a05ae6e325f4000be", "273624d0d8513081530a76a10b9275fe6ad94b67e9c0947fbdbddec854c8e4ea", "1e04cf5722bc3700590d68a6231b53af8825941827e95cb9bf564a8ecb3ff604"), ("2dbe2ae176d86b844944d9954c5813f9e3a9a54c2328dfaa11cbd6232bf1b2ab", "259406956c140b27c3ba185430c9d9fa179638ee97360901697e3c29eb2682a9", "22e218687262e3e56bc8776be987a7ea3b73ec299749a2086df39701fc23e65a", "239262871276482130f8066b0403da9452ed61db93e3e900b91a4d88b66e9e60"), ("1e925d33bf544d8e8a5dcaf2330f57decb7309b9e9dcd25675c764a0c5d475af", "07d7710df1b4432c5bfcabc9ced7ab5e17074fc6690940b946c8176de04c2f9c", "29e339dc4471fe9cdf12b458df4d75d6bf02fcc7ac4c230eaaa0a2e99af0e4a9", "29b7cf9bb92799b01a9fb31b949dcbc7fddcd5d61ce45290848864b17737fcfd"), ("20371f7cf5f089c18d7e36f42d200700264ed670152e1760c5df10850e1c4e2d", "265693e5676f7bf06812e15a4455b51ab85f879806d998cc43753fb8896adf6f", "23cbde59e7ea81852cb9b8f40cc9db1bd8bc5d756494002b4146e70fc73d4efa", "2fc0952e39ba32fa8205c51651aca19afb7421f8b9608e8e0ea1580ee5fd0c5d"), ("0c34442a5a5aa28206fce161d49104304d4598973cbbcbc12e9700f12e76dbd2", "2c9c9e30baaab1fb13e6f638560255b0a9b3e4d7775315f6c7c63ef5f3e4f38f", "2f5bc3f40fb9dac55cb621c31b2874b4eb2321f1a10e5cc40ed9ac0554e643aa", "066b13e3de2f590db2ecbba2f98da6e927e9c2ddc18a6a096f6cfa102c5e4f28"), ("246e397f0d7d498a0301af0d83c595f79207fbe40865270b0c68679f06d1bcaa", "108f399bae284a37e98fdd5c6967f3b84b15520a331b88ef971cf2b7965b679d", "0e84a91d2896036cdf105b90f1f0f72713c31e764647be4e6b7801ddd8ae85ba", "26a5cab99a35e3d4b612f8899f78d8cd527a216e78c86441fba5ff0c040287aa"), ("1c1ed4e3acd3692c49edcc505cd9dbbb41dc4147700b90b32361c5a520be79b0", "012f8da6877d7b6af4cbba9d3db649ba7065a663da7d38b7dde0e20efc63d472", "0d7a77e6ee74cfa2bfe88d203e5317975a71d058ea062702c8a3134273ce23f5", "108179bfb92c04e8a372c86654c4c7e605173a742cef7d9ac4558cae2fe38248"), ("08412aae57fbdf48112c20f5c9f6f67a89effb1206d53172d5399b9565be17f2", "2608244d6a3a03bf1fc08d0041af7087546ab6172d0720f8b7f91d79b45d37c1", "19ddf99fd595cf057d834b6519ff9abfc42540e3011a6457bd9bbdd5455c9f9a", "11275546aeda716c1bec29903e1ebf46ccf95bfb7b2051c75c0b905b7f41e9e9"), ("1d5efca0f743094ca4da3e712251d251464c421cb463b6bee9d7c865b1a4e2d4", "2b961abd80ab321ec7027969f7d0812e09f10788a3d32b99b09fa81730ee79ff", "089ff44a168589a356226a818e78d556bc6b440ee1af3b76e3487bddf7845180", "0fb4c9f8ea826bb278c21498104447373eb3a6ede35d87d54f4c90e50920e531"), ("017af3b82f49b43c20e5b358e08fa02fd5e913d19a61395e08917df60b13d9a7", "201a13c5356e3aa7241a4966580d4ddc6b025d10048f02fbf2212e1d9b3f3c54", "218b44de00e94045ef04872c42e6fc61601692255dac93ea642d7e322143b757", "2fb61e6ba94dfa1a127d43eba0c7e911b183da38edb66f4687380beade05c3a2"), ("1200c064ec70c94f7ac1fd07a522a4a786c81a5fee440a80aba70fbd0d0adb53", "1fcce0ceade650d2b64a2ab814251e700f95612d371a05dc66178c95c2867cc6", "0b7a7049591d8abd667e9b0e27c1afb72dd374f47362056f437221c078c0e5aa", "29101a05a9eab3387c5cc08a7947b953e8d7f7e59b1e71417095609735e7a88d"), ("273dcbf3520061697e78bd49b9454e79e2f5cafd7370a11df8c97e47fbf6c2a2", "06d15f7a052211c5278f0ced6d17e47f7c44448d1ec1ae8b100036ada7bf2f36", "1eca1d4a0d536ac2bc557984ead4c5853c488373e07c3d19977603f71fc360f7", "25e10b36478b4d8a4b77d6fc371dd46fc847f0962f2114859152627b3b791db9"), ("26cf0e2e9f7c41b9f8abdffe423eefec5b16663547379d03430e8936d0462a01", "0014b911b2938208833f8809c7231be87c100473de54bedd407d3f4f7ff8ce28", "1546ac3339998ebfe57c698935ff62474d4ebdcf40f3ffd34b73fd9215f14d80", "110a63e9d946de923257efd8511839441eac4da72301082d1753fcd54b8a6f1f"), ("13eb63685bb88a03e58d98e7812b85478fe2f56bb562eec874d16b6d209eaad9", "234421ca4d05400fad1c024860c33fcb580b00f09bcfde54702f295ef1861f6f", "198a572dbd84475ea346e89bbb806926b26db41f24bbaf6ac73edc3d07a5bd88", "2c1a4f49e9d7821c1baeb57077d49eb0daf881cd1ac728069f5163a18f5aaeff"), ("1b7bb35558f89c0c5d8328e13b9f30404081fbb0789a10ab1951ec55c902872e", "1324cf7cf0f65607bed8dcaaf000ffba64f365e15a21d284d9dd2d4ca958349f", "00fceb31d3d1ac336fd6924c1db57e788ae22af957a2f62b11cada2acd39dab8", "2b1f0487f635e295d391302880066f9b69eadae7194b6e0e46b619e724724593"), ("23554f7c0c23a0b8eca87815153e2b8818635f24ee99e1a115e04400d1221adf", "0b3830ab3bd27c50cbbf5dcf0793075f594fdd0c1d94f149e27e51e8a7fe6757", "13e22a7e7eea48db1920af698b496ba465b2e7344b811a7212cd9f3c91866aa6", "044e31d7ff7c2b7032181df34212bb00ed2f4af1b298cad491bedba00b282237"), ("2ad9db6c1c9f9cc1e21b8922557686afe74f4d0db2a70dd1c3f0e11de805be1a", "17a6e9244eedc6950e4e020dcafc48c932e1e925890c63c8cd32f5148d562a1d", "12194ceff39584a6ec20d9b30630257a0e8e05e68104b4ed88920d13cda40557", "13fd8155079bf564fa101c8bf1a625991147cc1a5e3f123bd361923faf65cc1d"), ("2301ea6a86258fee257c1ab880040eedd904fe7ddaa36948686d1020fc813f6c", "2ea8b69df5c1c6e487cb6917e689f6c845f1b412a96afb75cc288c1954140d67", "26324547ebd05a2e1045f656bf226b4fd432be7b326ec52a444f169d45c6aeaa", "24ec21da269b4e2da7c194d3fc17cf79cba2d2da16c140237f8803fb25d6bf8b"), ("00aebffe4298a4ad2ffa0274322952a30c7b6d01ed637baf499a81de69f0ae05", "263ab149c52595949850ae020662281ffd91fe21c1ce47e98b5be9fd10522532", "1dd517f814ff6519bee9e2de135817d1e5f06ba28d57077d89800e74be64a73d", "1e5a0ddbe6b1a680ddd5667b463900ac646988731cbaec40602bda197c70f3da"), ("1ad4ff26958ec2f5e0e7a366d9f03f7020464dc5cee8b7befccae260fa6ff7ab", "157776b0b45635ebbac1d1fe39b4d354f63f7269e78ea6267b891910085bd664", "17c424dcf76b4ba7a5021d4707539c9ec5c80ba4efee6856a94490fc49dfa8fe", "15100cb94b6c3701bdec53313a27caf3499260ac5648054abf142d6c6c2873ac"), ("07acbbd4acfb80cac9e363cdd87a1c161aea5381417c1fc30d5a10dde381a4a5", "1595865d5a686b6deaba8e753bbe962f91c03fa53b7039dbdccc1cd246c36868", "06fd3a4be603f4063a3b516d7a148bd3063504b2479a4b94e200a9479b513dd6", "197f03b700be763b8d48c1c8fa852ccca8621e47f554d50af842577daff78120"), ("27fa956a9fe66368aad19790d1859ed515c6d1e9447b26f924f2f50947de1e7b", "0bca0482e85215b123bc853be3772a4c9179ef5036b360c0794061fdcee0cea7", "02cfc3008d47951bfaf0a0ebe103898f42142ff975e9990ea405606b406994b5", "1d287757a0ce47f28db74a063cfefd25e508a4c0c6e8aa862be3deb4ee0693ae"), ("17951c96ce6c03d5835c9ae28d9904697428054cfd6143535508b8f34f248d68", "25fad38c1009c5ae579a5964805837e64865008ff330c629b9f6ca19f3fd97a9", "1b5c74221ac080d5fe71a7a287a392fe1ccae845b59df27866a3ac4a46b6d6f4", "0a22fe1f4e02330ad2f65196948b4489b50f5ba7eadd46885aa1e5a5984a2107"), ("041c049a3286b14716486ece116c6dac8e38d795d8689baf3ea244e4c36ff18a", "2aa0a14edf94809827ff4489fc2f35612cd3932f417e80731926f0f3703f8828", "274d6aa625567d7bb0db693f2d753adbc582865b7d4fb1c694246fc034fcfda6", "187bab0d292c89807f989a65fe63187994017c1363f3d7dfcfd6806078108e17"), ("254e2b632083b6a0d3827ea231d5a39a05d6c87ed9efb26548b85b63a646d6af", "1d54e7583f72c18c4459c7821e012d55a62bbd133167ae6931f0b5bc7f82b4d1", "1139b6e7f76c6ed763997f0be24d0e153e9914ee46faaa1260a8eab5cf3364db", "0c85a93003cf6a82c3899500305c47c40d070009244eaec5268100aac22c0911"), ("1ce11c7dfa9c9f951de341710fb5ed9f944fb7a5f820835137ab75114f1f5d0e", "1e7edb149aff8cb8f3de62c3527dbb40066d1cd14588bd33522f9fabd8b011f1", "28e1d0bc701be4d8140cf0412315301c08642ce139cd347e582508f5f80590e0", "07cf1b2245fba1ad6130ffce797b16b1286cd1791143c8d10e2bcd3a3feab2ae"), ("2daccd8188c6adade4b823c1be8e7f2e0604573f56aa1b0d427a2652ee953e92", "2ff55e01b5b3135d262c4e3d4f302437bf26205d77e73ac0c8a5cab77018993f", "092aad8e537febc22fe701f73da41240f30a3ab9f452a522a546a9902e9f0349", "068b3cb60e5c4c14139cde4eaf0c6ab1dd63f677b9960143f0433541ab4191ef"), ("09a4e8154893e0ae0553afaf6a17f05ad608bcf3816bd8a898029832102f9d84", "0660a29432240383672172c6ecfd9f13f110c152c162e158dc8bbb9eaabdd36d", "1c9a094068b68b2853aa573e460647d51d099c8d54e011a843f0425b65bc678c", "144c68e4da6d2082768c00e4e51159c5d822472095a2cf39c3374ca9029d88c9"), ("1fdebb7d2048230a1732ed495b125a7915b647d40ff2b052818ce344a870c698", "167d2422835d9be9ce10af809b22217c6e8f82c66436585dd450e6779ca168dc", "00a210b0376c689d899e49a34e1a98882a4677e129d182df29cd45fba552e6d7", "083fde46fd2232db6a5ef643e109f78d3d15065942f1c3bedb6466325e381406"), ("0c082014e891c14ff79c0d689b0f0ce80605c1772d95d904999ef45915365b9f", "07946f24378de3c78802486d1cc2cb725253e95e68d60fc3eae5db6287e803d6", "1df780fba83f09028560e6ed2015e2337304cdc8101d8a1cbf72952125a64503", "0139a52325bae6e7330e5ebd95f43a3b9e2b71a632467ebc07d747752526ff3c"), ("038b97a2b06f1afa44544939bb2ef30976176f3cf8ef1246fbc61c17aab3f4d9", "072cee131a7625bede0b415e567cbfa7b208dea7d4ed98d9bbaf7b17d940d50e", "0581bd40bd2e52332ee6b0e682efddfa27b1de4a8633370be17f24f082aede28", "115c4766811e155d91420b20c74f2f13091f7ce17a40145f640ed1b90d8d18ab"), ("060451b69e2425ef5da122fcc9f20580d65e4b484a25161914cce5e0955740f9", "1d1d4656ceea673cd417716dbaf19c97ef19105dfd232fc06b20baf839a66616", "04943d5a1e3954d3472842e7768850a7ca5843c50ed0b6684a79e02149bede0e", "27391b89332cef40542da8af957e349e4fa7d5b2811b1ec8736e3bfad48de15c"), ("265081a988b900b750214fa3c03d6c19536c43cb90f5433883078cd09ef432d5", "1e635df0c6f5d57fb103bddb70c53d65f7e58b67e489521fc391abb0f7393af8", "1eef4eaa10a293eeaf2aaeca8aa40061166f27289f1b65a4d5b572ab2d5a574b", "1d797efa396a1dae704146f90b2620d69e9ddfcbf2199504de1c4e93fe706586"), ("0fc259ac55b15846ced19affd5c1c0b4fe81d46cbc0c4273bdc321bef3e6cc97", "26544460b1b702bc6d6b00d6776137ff2159805f9c219733c8c0fcac7937d340", "29fae3c63edcf06f0b2b2b85df6789d7720dbaaae42b710be70e5d58cb389665", "2d1ebd2bf0f24d103c28983a753115e6755317b18cb59b5dd76735edb381e894"), ("0f357d14e6f74dd8b68579ac622d2739432df774c5ac329d952063a152e69cce", "305a2cf029b43dcbed1b65b7f34980a44a17eb0fd1ba373b0b415d90a2ef3724", "006fe350a86d3717a15ad12a3339386d5effcfd7c13d6af91c0237785fdd47d4", "1b2ddec5a81ecd26703ce8dd3327c1f22ff0f38ec14aeb7f05ef859c0635912b"), ("034ab4550ff134a25e08e66ae0899f01160bfded03c2ef097811ee291786fc70", "241b7002127299e03d8d3ade54469bdd9a1e88b545158ba5b004b072aa1c98e5", "1488fc09da22888a053e00cd0f0f5c5c2e6c0ad023be0db71bbe1f1a65c0f9a1", "0445d6dce3cc8b415a06d01b5ffc7fd3b36d0501dfb47194ac21b59bbcfdbd7e"), ("14583b2d182415180d6335a0abafae5f3703e0969a479306946a4dcf06dfd5f2", "1a4d648ea097b7256710f6aa1dac915c9256bc714dda9690210fc6f9ca20d011", "0a6372ffeef56924d39c25c878d93e13cde07283e080eaf8c68dd9e1480a81e6", "0e32a08875c22b80002140151e0ea05aaa6c976ccf4a5d68c34f87aeb5109c8c"), ("10e600b1661fd99fd19b3ada489e82660aad5ae8eea5e61459e2cc51b34e3a13", "0def846b5e6fa3d2ef2490ed3eb2d1b576025791fded36ac03a420019d1e8bf8", "16ba4638bdbe792e26a035800f8573f7ed8cdb33a24ac455b9bfb8e5605b866f", "1096b7b1e2759c35e32e05973b714cdae4eda0f5f66510b7365e48628ef2be38"), ("07dcb3566f7c4e7512340d7893265fba9a1b00b8857a0f6e159df699045f5320", "19f25885af7e0d0b316e0c6f5cba093143c7356b03bbe4423aa228d795dc9a1f", "13278e2b2705426a3ef56ce7746ca5f3eb79f977c97dfd473977b0932dfcd8a9", "19e069b246f90e33bda434b615a5c63745735bf26df952876cb8ce3c082e4e12"), ("1747a621c86b735bb8b6cfc6e312233497855b2c38e6acffbf471231671108b6", "13f220bbe79f1d33e3dcddc28a11c5dbe8f2ab48f2b18d1a967c958f8bcc2e84", "19c5d2e03199c51042bf3d5eb400f3a233382fa4ef0e5f5ede7a4112480ee82e", "27e7c96491af30c3a3b45dd88f8ec3b37d626da83c853d84c92841f3b9012dfa"), ("0660b6db96031e3c22f6e83845a529badac647308a2781b48526495a2e37642c", "2cd39cfb2a84239efe1110d8ac8f3d98d236cce42e6802cbaab17de3642a068a", "1bf2c8e0a560637bda2e3f2533d6cb412ea70cf3c03751e439139696441077d1", "1bd4d023dfd7abf42fa5548c56006a76a536e9f202c8121182177b3a3aa45fb4"), ("03c4c27b0b0cfe7f9291933c88670a0adf085456e569f7a43eb36e9538515e3e", "0eb7c163a930569e76f5e911f5598d8968cc779ed1f14869dd5be03de612dcb7", "10e66c1bc85597dccb510437b2aae196db9fe05bef65120cb63c13e15e2e558a", "0aba70764ef1e5d8bb195dd12f79d34ffc32ee9b33f1db44e6a923ceab8347ef"), ("25198b928fc0fb008f7aa7a8f18771330955341a2442727e3b6b037e4f9b43b9", "20b244ae38673a76d3b19fbced8bea6ac30d9a383dfcb0b83a7737237fc0c216", "1f4090b5a2cbcb8cfa0c03fa9daab0096ac809bafc386632db01766a64d29704", "15e5e1bafd7c21cb419e724a4f11a89d44ab3cce059b40b4d9adec80b9cc8876"), ("17ff3644a5c7cf09f57db4a93b63a913f27f42d976f43a66899e24f311a339f3", "0760daf9e03d4a50b613dd98f0532b004dbbd73b7d947128e046f5e459359f0a", "289bf01c747f4c13dcf9857f4673d302c434049510da417d045a7283d39cf0d9", "03ef4874c18a09ba2bcee5cdc8b678d66ec44861612ad6268c2688013e170784"), ("2ccd7e408bf42ecd2dff149938f659a64fd0d4f46fa798316d2c554d189df704", "247cdce9285438e5d9fe069fc5f0dadd24cf02c4cd83027fc2aed2bf6e1fae5e", "0af4ffa574b4e0acfc354896ed916d6ee3bd716d08d0602341e018184d8312d5", "17e02275aa518c8d8099bb4ea41bf9e4fa48ba0fa1b9e3ea16ef04f0943a740f"), ("0be4b783396678a869306df2c120482b9b738489da0df749552faa9076740053", "1f31aca044d221c58040b658480a277ab25978f7150a25a8ed35e833557d9f6e", "2e1201b0691de155f6abc511b36d3d2c932fd210861c0125c9b5b8013675e690", "0f01da779aed82e3660d0ac0ae10f7767fbfe77fb229d3c01124c497096dbd0a"), ("21ff027a0be30cf71a4531a55c4bfbc837deb69f715172c253b3477dc509df8d", "1fe77c6527e0cad5b5ca26624a16918c9c319d822b036ddc174cd2934dbbdade", "146245cc10ae6e713f6d4d5bd54ec85d3c1c49f272b3ad9d995d0fb3a8535705", "12e3fff56eeab04602afbb1e5d2b61f9285ef8942263d974abcc07d9acc8e326"), ("08b1fb56f6d060adf4c7b89db2c050a7bf711031518eec59c631c4b6021684e5", "2aea85b5fa4ab1be2dd518f5d0b58c97ea3212bc53d407c20a658e5c7be023ec", "25e45df5329dd24853e2bbd24159b81f6727aa656d95c4cad5775f6fb2f38eb0", "1aed55d621f7473a697e8bcd367c1d6eab2cea85e572d7a4dd5d734a89693880"), ("2ab174a87145b8ee5ad66ab0bbe23ee3d4dd83ec3c1b386fb6e4e2ca04a96265", "0c8f53e1fa9380f52ef17e74378284a304e9361bb6ee2aea5e40873d70d7de6b", "0055c416ed68f8243e95a3760d0acd10cd1c18bd8bae33f57a0e7a3a2104b175", "1dda347a4bae99a4e18440ca879a5adabdd746ee53e44e0285f2d7f406c1fddd"), ("16481046c814edb99a33d3f60c648b415167fd440df157f064896e2f9a88f825", "277a785a0dbaacd1db6ed07882ac7e3e7bfb7ea93d5a72273bd86ca02bf3f017", "167eada70681d9d747f572491f983be8ea67e672a42fa5155d765a94a487cd75", "19167b4d338d4f088f7fd37dc5f0192bc6e38f93525ab12e6bd4d085431afd67"), ("0efc3d6236dd73c91541fa1e8980f9652a9e65308f338e6cd76677eb01a09482", "0d1355dadbbf36357ee32d23ba3137b9c1f56d2ac022746ea49c6b20fc818f71", "1ddb8f9705b8922b03e21f481d23499bc942beb6f94424742bd09ba8ca97324a", "25af00e0c2cde0509ba7e16d75caace24808ced8528fb46aacee435e273a3af6"), ("2316167f03d7b49c36a55fd74c1d2e727e07c77b3b47163c486a0c5598f8f6da", "0867ce8dd986511d0cf630d26b630ea75ed40aa3547b92745fc4ddba1997c1b3", "0c1f748ecb39f8622376aaea214f2dd01159ca9ac40d15f47c6eca8eababd8a5", "0261d1682864fab698ed8408894fe0160c167c9617a0ba25f43b06093aee51c9"), ("20857787f98230aa8dab66cd35a3cb36f9957c52b2a2615d9468cc807dcc7552", "2bbd5127174797ada6330c0b9e49dc2ac0c933278d376c7f4a53c11b6e438678", "0448cd0b57a21324c3d1dcafc835802ae216546234c2460cd0112e2e3a828b1e", "15f37631be42e0d93f6b2ee49983a299f1ea07658a9ee08c67746ec7bf4fb821"), ("1859f6403b945c422c5ce774bc653c71dcab33ee4af33bd97a284c83df66c8a0", "09ca1f90dc773c205111dd90b28c44cdbf85862d19c2b3f542e1ba666ed38b39", "2ba928855064c48c2fdbf1bcd3894a5495a828ba5663e4d20dc1934f73e05876", "0b773faf9eac950d998927f9c520fb9edf15d2e77bf60fcf826c736e3a0e94c2"), ("0c22498dd9d129e5423581aa3755f42b470025213c8306bda92f1c11109d6fb4", "303e8718cb49dbf9f9c0a7a40bd7392e703d166d859d7c4eb2e9f8efab37cbcb", "149c598bae8fa2b8914033cfd8d955b2771a45d5afbd9e8401d74cd422590b12", "03e09e31eb2389702f6acac9d51b74f181b7ec3373228d0f2d44e973b76e7b0d"), ("07f0d8b3d236eda33d6f22ae3bdce31c27f4ca676a9d303825cb75b5049f5574", "2a07673d9236b7df84035de4b8907f00206d06347a515cf3bce7d616420db281", "0be21f72c9c4b8ef3c77694e39629dde6c70112222d5c46237c40df20d719fb3", "24573180fcb86dff3a1844a063c84764e8f5a8d343be11f044fa57be88413377"), ("24aab0fd1d548a3a3545a2369386c142b76f4baa85e3baf0dfda449ebe6e554b", "0c9e270c6ae07ea1e313b1e13b28897cf76027cb3e76c2d87734fdaff8d5d83f", "0a80ed55c4c10cc75cad85cb0cda9a6eec18203dae94c77b30f51e7b2e3c80ad", "0cb8e794793e4bc8e827086d2bf7f679e0ac3bbbb065120792c14010280122d2"), ("25abd60ac53244508737ef486f0d9c179b319d01105b6b2452962ff8c50b62b7", "20fe6e456715da9eacc119e794bea1d6203600a194e5db95b37841477dbcd24e", "1e2ac6da0cd0193e2bb19a2faf63cdfc9d71e2b1865cd573878a08998fcbaa2e", "0ea9c849433a069dfe6a6553885192a1cccb42809a4188aed7da9158d8bd8857"), ("07dc8e6ea6b5e98832f8267495290e707912a5c3507e52231db3a3d6c6311918", "0884c09bac23a192f3d95519fcc1d66bfee39171047ad4eb57e2f9109c2fd470", "1caf31787457b9ccf47641244a7e299901b2e87b353765bc7002ef5aec669b69", "1f3e499c0cef0295c3823962cce6918a5fd95141612bca3446b15c11b9a3a9c2"), ("0681eeba9c751466edaba1049c27ee8799e6aa466f8e15a5fb019ece2a36b194", "12e04a99f4b41f9071227ce6f46d51e3b41374d79e0565eae2fe8cb5b0e1f91d", "1532467f41e3f7b610d123500070facf08755a6c57ad1c6e3652848417a3f50b", "0e63034992f0af1611c1d057eabc9efdf9be39a8355aa33df31feaa4dae92552"), ("2a96e658bdbaad7e5de60108375b95e5fd77829d2847afc8f91be83b307a2e82", "16615a2a9fe3d7e42e84acb24bc2dfa248754d39d9a14d88af835abd25eaf3de", "1f208d93446478b5c554af079bd776d797cdaedea7a09c72d44fb7af4db13e36", "056b596640251274aeb3eafac4670b36bdd013da0d93778b365a6c817657d7c7"), ("08477de16bc74aa6f48fe6035aa914640b358251945bbe63e853893fec6b6e39", "131a81abb161f25c3be0c82177495de1503a5fc0ed326b01fe4c318e655a0639", "2fa18ce4dce71149f47131fd1e93971be6ab34560c04ca91b9f2802f31fcd393", "21061c5e3748e104207efb5400680b53f5ef281cb6ae846b3260a4b0fae80647"), ("14ca37cbd335582e4c68bb40f56cfc2498c2f58caab53f47f1f3443d693a499b", "0f629b67e60841bc8c9efa0776b48a4fd9524faa6d327013c7732170bfd445f7", "19b9fbe1d98b7659c5d4a3ec9f19b33170bbd8b57a540bc503d36c7b0ae75d08", "2d422126217554d9e8b76b52401134d0e69e4b740b4b72232e6623f398d91f87"), ("17b53a492683890d60fa74f2f681ddcaaf005a1f8258c8b6960a182e49e5926a", "19a5023352716090cc055ced9b0fb1e86fddf96737974f5ffb1f96908ff9896e", "0477819ffe7fad2bd9e2d811c718ada0205cf3e10649c51b9e885d5cf0a1944d", "2b439cb1eaa0d9e31336acd05c636cf25967bbbec0a24381645e6167c91c4dac"), ("2e20f3b9b0cc906493b4ff36de5cbe39972e50f5d1d31e21fa93135cb19bec51", "04c36491c82ef818b6be4c64e9b21670b59bb5daaf14a6bb86db9573b569a2e2", "042600d4d87ca0a20fe980cdf94761d05ae94d68a6f557e2c6fe1547535942dd", "2fb778dcad7a33aea3c4e7d9bb802d33b07513c022cf423a3578ccf6641255ef"), ("1e282efab743a0c10e2ebdeaa2c22f87b46ce999220d3b7f7e13ee141695265d", "1dd3e1d2cd6864e7c415536c10a0f066666053949071756766e179ac03bbe223", "2202250d741b1d7ab04e643cfd936313abd92d766d6925257f8f0bc054573308", "23c1fffb56902b06a8575cf164a962703d64dd3b1d78fa338c4bfd70b19cc3f6"), ("1638fc34a80d8c225b6b010d63a2da2ef918c1b462b39e2e31a624afa3fb7197", "0086e2bef1cc6968408529065e8bb0131a7eb86b88d3e129ce679ae69547e25c", "17fb7336c8b1d30544e674203786b8a9ba3ccbedc6ebbed5a35061f035749713", "133354fd63e4d8daf8e312bc7e169c567b4948b807f4dcd41e1ec469e83c887e"), ("0e3240f46aae4e74bbaaf645a5ec1c94884f35eeac90d67ee8d80b86c1bfb006", "0f6cc6b813c8e9bb2db4b30d5f5867a191fe013e38aec7e50967eb0596112802", "1b90b5ec89b49005a61648ad73bcd01c0160179cd641bc317b0ca04bf784ae62", "2dce57b278d806ae617b60b34e3b786e4483e004d848f6d9ef7bcdf7bb1ccd79"), ("2a825f1a0331c813468f17c77715fba0016df11e6b0c603f215c155c9898108f", "0bd8c1006acc56be84313311d6a821c8c6a64ab43daf84f1e5a03e4c1022f89e", "0dcb06ad3c998808bc734bc8d993af95448904905d3d664b3d338ccfaba23ee0", "18724bc10db0516b7177ff3da0b8cab0ec487a1a0eb838bc55edaa51de49d243"), ("0a07bb648340a2bd3338f9b4304b8bf86af6bd06196fa38856a0c1f6b0ce9bb3", "2ed1e626185f1b7cb54bff79b0e12346a24a3156f576c5f263cbcd2e26625c04", "09e9e78f33e076c2032fc387da50355d3fe6114c83f83340c14593d467e2df9e", "094b486f2692e4ff71f2a3a35622f912698797837be62a29bb257df465cf3ff2"), ("2c9a38254d6abb7cb1425fd9c6e1184588ad9b9b533385f1392f3879d0639f1d", "07f5ddd213ed95fa892469664622a00f034f77980449c2dffd87ac4ddb808208", "2d870e3d638b17659d2e4f80c17d5f526d3cc588f018c58a2e8f0748676cba3c", "018eb50d4afec0eb7defead90446f1c0841069f2d84571500842f8d5f10deba1"), ("08750c98340b6f3de975873645f0d489bf43a427123d809b30a991b179bbe815", "0b82bbbea77b1f1d1033f6764c621686ca259e07131d0e5da553aa8e462634d9", "19913a629967203029a40fb6b31984b70817f9ffb564d182fe1f7f4527283812", "099609af9d33a6617e364334c6ca797cfa42137528cbed0fc357f308323524e4"), ("261ea1d00ee18d87638f3a213deda3d858e16275295a6d09ab56d41daac31b45", "1579deb6e8066446279dcbc2a0baf352fa77433768b58eb04ceb19412946b71a", "011100cfdac17fdf6037922fee5f73c8bf0056c425bb80ac9e72388fdcfc983e", "0c3ef8cc8a0b3652ce4e833c502cdce9599d8069bc029a485017903720a6d80c"), ("18f0066d481289e169033e38baba8c6b7e3055652e04396a79c05313ea66d4b6", "05bfd998d3e785f9f8c7d4b33c3df2c0c5a0fe99d62b49649ef26011dc5b5615", "02257a6b2a21e3ae079f2039bf1e8fd15227fd0fd3091077231f9ef8641860e2", "0a2addab3aad814f6f973039282999238525fa22b15a5cab8b942b587003b497"), ("29c451a1d1b54b6faf4983992a6a8e08b24053225bc95f335f707bc47743903e", "08495b91dfb280a4ecc8f1501851bf8c63cbd55298b79362b75e0632de34c20a", "1edca6615c6f16006effffc9199d8df6a0d5739294a94aab8ae63e169931fc03", "1be5bccf24c69e74817e96666a3da4ba47f9dc90996bfe9117d158500d1facae"), ("13ecf0998c5c9f94a34b90f47102c4080da4359cf7c1d2dffcde52c7805b4d0e", "15e7bf7a310f4a86bee0ef0d9ee3508251ffa69a20508f4d58625d211db5d6f0", "09b65c321f5740920f0a0c8e99cb726941e0af738b089e4bb0abd98fe91fe106", "2c22acc9c797440a21780cf1ca84e29dc0fa2efd75596ec564041e9d94774330"), ("2f3e490c15e7cf41273dfb689c30e26f1eeb771454eed37dd4badec774e56419", "1dd8f9e611c82c9704da92b44f97a3dbbc02eb15c04c7225833d8a91bbde07d0", "0e55adedfee251a090aa7535511be94bd0da19b853916a1079e631670f8dbac5", "1a87faf484d032f6de79db91975013c09a409c3afd162b3c05756d314de36d09"), ("2e73387abdf4f692e5862b78957837de06d9b64e64376ba7fcbe4750bcdb7a93", "1a0b2b8892501ce5909fb60d277d04818645a1709c6810aa6a68dddbb1418692", "1f756db841df77fff4404b58ffd3a4db027b872898498ff27fe6c5d81516d621", "0829121e46677dfa990233f313b3137319f8ef36dafe37161dc2a1811d289cdd"), ("260eb9c845aa8e3e8309e934dfb1e61dbd69c165592daf1e3a74ae5f14ea5571", "02bb02fdd305c7949107e223c99424a0ed17a8bc5f1f1138b3b5c93bfa8b443a", "2cef84c89457aaf61ceadd57d7e132e169a08e4e46c76dd89a47edfd91c15a03", "23404d64f6bd5706d942fb169213c5f5d3c95ab2c791d9fd9317dd9dd9a767f3"), ("2d9d088bfcdc885cfec4566fba3af00c11019bd92f857649ef4a9836c4047323", "143eb57559999b7f7729488822675fb620e2b29d42179c2027ad6112a8682244", "1ec456e62ee741a3995347e0b22e8af0681063694008a0867031a6c313935485", "2b453f685d838bcb56e8f18abe1235cd2b5e100cbc8760f617fe2e1daec0d324"), ("0867d625ec0a11270b0319ac9e7737f05523a441ac3693fdb7eec1d6affebdfb", "10f26cc3000b8b68027de173f84b04e5635b576348bf499265991b7d17cd3271", "1390c31be1790a3e71fbac4b6d4a98029024573babc08003af2dff478bded2e7", "02a22f8f7886640288c5f78edc2e86c45f7abfeaaff8b383840cfbee73e3d172"), ("027465d6e05c8efddd79603de64a5cc177e8026fb6fea4b404f19b26c3cf362b", "27df80ecca00f098b4a0bb39e9066cb604080530ba35a48c661424cfcafdfaba", "2c55ab15e1416046a1a8108b40c2e2aa7bd163882629b650ac8ae0e5f935d0c6", "1aba002c8277c717b3e9b5849518a85f7dae8d6f2cc87a87b5cf488071c11b73"), ("10a57a4fcbef94032c9a47b8c861802eae0d18fd7f9753138d0f9e6cf6f5c769", "21283201d1a5fa525f28cf5ad0f9eac59b3a407f6e9872df66a3bcb9afb88d44", "04cfd2f209baba3c49047d96a4d06810bee527efda0160154c4641e6db6c47ab", "08f96569fd921a26d5d5f6d772378b30c2e3458bab22401d66be837e04ede59b"), ("2cfbddeb05841d68436fc668c582fec429b0ccdf45b5eba58a3808ab36c0ea71", "11135942a695d5acd2d6d166a2dbe2c812d07320aea98e7b6a762c881e1a2eeb", "1aa73acaf2c2b41cea98a7babf15ed947e8fa84d00546f3ff8572c44ea816fb6", "2cbdf096106b14815092c44f49bc86c84bd52967db0fb842d1eb8987336de7e2"), ("189d3049b3eea6c79fff27033c5da45fb6c456288b1f9a642b74ce19af8fe34a", "04fa6f85b85f81fa56b0b529831e8ffce999e0cda6ebedf33ef4ac830669eba9", "2bb3672c9c137eb13509612a605e9ce60a12e891d248df08cc027c07e5feab70", "0eb6e46afe99aa00747cb87590981e278865ee6af5bd9924720d3a0df621ad29"), ("1883a737778915af4c6d58713ae8f0e4b5c40ae2e54249d1021909e87034c8f8", "3021844e6db048d18ebf201c0d2dc807b5c58dafd0cecaa04c9546bf74d691a0", "0ada405a3fa20599195800cc113006ad79c8f8f4fe786c3bc48c23ff337c2049", "227af936b75cf17f07352200e508b7a08d640500b2753170271378838037ae65"), ("12214bb1b73a683dab7be3792b4b20ce1aae09edba6527a573bb933e984adbf9", "28baf75a1f76adb8e7b9c1b9badcc65dae08e6fd1703b24b28a9175f0fc430e3", "2bc324ae2b2ab90f2cd11363dacf7f7369fdf7b5ec424bf03ac0e86676678e40", "0ceb3271446ea4c8b320a2467571f31452cec5b9e7c8d5402d0b2d38b2b7d6da"), ("2d2a7dce744114caef9f519946c56ee820c3063d680f5d7c157477518f32e7cc", "25c29eb0c24f1b6cfd1cebe27041fbbac001246d2b58b7d1b4cc606a97a3be5a", "12a5a30729fa81a4ffbe33e83610610aa2eb307f4f1ab82c4afa27226a114ff6", "2280af7d02d97cb7482df53124fb43b15c5a6d85d844c2f779baa41d867c29e5"), ("0a9d2f32857d55bdf01b514677586f1fe74590faa562acec8448738a848bd4a0", "005ca44dbf6e1219e48e936ded49df2eb50ebe85edc532a81141ead88ef4fe2d", "1177a694b7bb3cd720ea5f27726f2824d1843982b3b0577b7256678d312d96dd", "22204567080a2d7c268086af82e7d37c69769577b33a53ed21d066e5f656bd55"), ("0f5e0e7078531498b4aa60a61a244a1daa7342c908c0fd818d24e8c61c3145f7", "2deba8bc4dbe276b0e2be2a6c6eaf82b689a7c12f2c0f930ffd37e1299d1ad03", "0d20e2ccf6f35f9d6f2afdad724228745c6e67a9044065d68901106f3ee23c5c", "208e07ffa411acd296898ea78f15cbc8debd3db968b76c433727ff0178abf26d"), ("2b0e60e62f494ff9fc532f64c3e53596ba4aca64db53add7ecadc0deb9551c43", "17f3a9b25cea80cd7905a47368eae8ca7a8825e76363e87d4b403b54bc714d81", "2a2ac7d8a6c16cf211f6817077411fec927fcab7c384b8ee13c9abd58343f0e5", "15511a2632c854ba0f554ff416924aa72d89fa1450d02c8db13296281c602266"), ("1d96fabc52216df60191d7d3db05f6107711cf5740e024542d4c628829384f82", "0c5d1f23b3eb4ba121cece6422cc38c68580519958188009dbbe08943c3f14ef", "082dc812c11797dcd79ed7b912170b9fec69e1613b58a3ab25f1005f1285735c", "2a9c846d8af19961bc619e8b16d1c33db9256739841a386e9b98af312b308ca5"), ("2fe4ba1aa53c433cd860827d0b3b67b542c33652d0da54307f84295c527a49cc", "136354f2a270dd9ec976468e9b3c294b8eb3ef4380011de8e86401036a84bf3e", "0bea644314fecaed0a5d4890972f677d8400cdd3be606af66ed179ee67e76283", "1bc8d0d170d3cbdcabacbe2bd1ace780877fd9f1a6cc297c3f4686986081c7f1"), ("1dcc2069ba455f3f020e4d3090355855f0c914ac0a14408ddb85e22a7e857ef8", "23f7b510d032c07507ff9d01a102188c9348df4579dc45a07192175db9a6849a", "2d33b759e77c706c554fdc748aafd3d5c36e655323f0c12db14b60b69d817082", "2f3522d9c994e66f6ab58a37ec07abb0f2bc3b3a296c9d6e16ff20254103884f"), ("0837c49ae2bb9bd726f2d04be58c7d5cd2769ad516fd31bd87e9422783a9a2b0", "13622cdf412189a2424497425dcee455bfd7480df46d46974409031ca57e04b8", "2fcfd2372ca99591fa868345c2f93facc26c319fff836d569b8519013f3c9168", "276964516e3071099653a4181dafe91aaf88052ce0d81818fdda208760c26925"), ("1d385e8ad02ab04a193dc6539f00cfec87690f8c0fc593fb1f49a7930bfffa5e", "01453e0efe9025c56bed51422dccea9d216d59c8225446dc4467228169bf5127", "14374d86b2f159fa51042250c965b34fed01b1c9b9a1b2e4af1ec462d147365a", "0bc877d5bdb3accf26f5500ac5ef8d225569c3e3a62077b8eae22088b97544a6"), ("145e331af140ca9f5f2a5c654eefdb2a2513415e2fdf0c1cd0dbcb6c8038c987", "077071a81d8d655ddede48c0a58b2b9c29502826707376889239f493e50931d3", "1f482b83bd670d471a65588bc0baac6736b34abc3ad36eef64437a24bf548f1e", "23118926d9b4e597a0c0c933b9e7d42d053c17a005c32c2f21476801e3637667"), ("1ba376162346b717e21a960c760a3e3bb111741a414d576b97248fb169f21b63", "24d0840dfcac3f63294038b0f12f225938584d3d85836e6cf21a761dd6f6fdd2", "29190e2cd5d0ed1604fc8e63fbf0b3e5fbbb913198b5c78f87711f2738b1ba9a", "08af2cc286bd49ee16d80150b9e128f977a766c96218553d250e65960aa063f3"), ("202266f1b6d491ae729f957f67b8faab29883ade99a1292eea8bde575562209e", "0017c167814d8ec7570760c9b5b853e2d28da920e61d7dda9ce225b4821717b1", "2766b416839c2f04e551598e25eb2cc75a821c605fc56c52e973ee749f73e075", "0d80222780994efa4c71780fc155bc6d710700118fe8099a29ec901d2d123c52"), ("2da4c53069be46a86f06cb10d1f236868303179e34f4489b04ba03d0fa4182cb", "16cfb635caada0ea62c5316952acd40dff1b21b0abacba978baa5fa8df31f03f", "110386b1968a76ea31c464842c4cbf21f6d187876b52d0d71bdd658e22ecf8fe", "067783ecbe5f5e0289bd51d8d69d3a9d4d0e6830e5a4084ccc195bd6968f5727"), ("1b8dd37859ebe1f3f646112feffd032c36ae960e553d7d21b83db88bf58682b6", "1a634f368b09620ffd3dc132e5b1ee53224b51f97f93b098326510db618d72e4", "08d7b466b8a71db990e8609e9f8d39295f97e385ec0f3990ea4e0214a37f79d0", "13709cdf89d913190b5cd6df40d290c6158ac3dcd0e6ae60f1bed7b34e9e200b"), ("3017662f9a7007b54e9d01e3f4e59ff8d390bb0b1968ebb43ec0600a2eab1d32", "09e592b4dafcf3f21937f00cc9625901495c0bcdd4e93969df9ab25c26865288", "064e7fe83b4f7dbe2c1fb7efb1a46928b6b365f3e4616406c5d369c13ab2b490", "11b7ce018e1434da280eb519c0a67e955ea600d9ee6ed10080a1522fa30b9a79"), ("08fd5158053ca6c1b92500a964068bfae30222600c51ba5db3be521691e9e6e4", "2f0b271bc513d3c13917f1dcad5cfd625becb1a652e440bb73c7bf2712fbfeae", "1d22f33d2937152f664ecb6d3ca5e1138379c798b006cdfbad616bac6c40e49c", "21643fa442aa9d04e49e022b13894058cdeeb6c20fd174f2e0095e7a7674b00c"), ("2b4ebc50da1985e5124ca5e232ddb8ba879ecd3902afe6bd4b5dee10327f13ea", "14fd4e665c9460b0e134d26ab325b2e3c44f51fb9476d747c538a5b1d043905a", "291ef5676ad601b398f2031f20ef8ec6f321f8eebc5d55fc0a1965b1d9d619f5", "1c98c83b30fb14edcc95adb1d5c640ea2b8c693f1e2dec865947e0b747ee7eca"), ("1e339cacd1aceabb68d8c3ada14e92b609e17439056a5b2a58d519308500d0d0", "03fc2c583a0d517d1ba646fcf0dba2d33c806ac74c6df11a7cb6430773223dfb", "1cb4956ea892e46d409f6688f0cefb3645e87f4c3084d59369778c97864149fb", "2c273f9fe8a037da79927cdbb251a67904f1eb358af96d920d304e7cd999d79e"), ("2bd8698f7657928cb8ab622d70a8102ad52e9aa4ae410295bcf2d98a8e7eeee7", "0703ab1454f9febbb12206c27f2f02ea5810778c11c93eb1f6284d58f6af835a", "279905d4194b76432f490e1dee69b58116dd34f445dc7324c7c49ffc1d2a245f", "29bc7602123755bdc42f5b5b7545215f458c52afec3267951eedf1015c0568ce"), ("06826988d71a4b2d800457b69d36254699fe10a0456697822cac30564d54c29b", "212128c54e5126ce40f928cd367a47d8f20a6935fd56f945f35d577eb886123e", "1c617e1fc282739f121911e7ae4d8bca599017f8bac1da6f1a872ef749cd1a0e", "27d652dd4a46dd195c566791d177cee8732b215921af777da6ec7911ecc0879b"), ("22d343be14f2a540bbf6626f80902fedd984cf0ddc309861ea6eff49b261dab0", "29c7d8b0dc962d3e917b81eb754efb98325dbb558fbc70d0ea7d262b37d2be10", "09e65bc4d503b4c2bc6a2ed9f6a8fbf2426296f0533cd93db09ff0bd5215e06c", "1a18910d01295a294fe2a5c863ef74f8436ed2a7d55b7a256ecd00b30493c5b5"), ("2f346c60491c64d1b54bca7bad35da15d0ab3020f9ab005f560339e66e3d37d9", "2a72fab1f90ef54bd2bacec4ead5388c8a75b0ec2d5ba1a03a1e6f4d655c9ec8", "21319dfbaedb042f902604633c7355fa206c88372d69652e17400154cd73f65f", "107154039d788a881ac487c4a16d9fe7076107bca81048131490dc349a559af4"), ("06a89cc4970a362ad954e38440d460037097c540f28c983901397a67c584d02b", "24cd0b086be0f39dcd7481e4045749c5344b4ea8776a917546f8e67065ebf8ec", "134eff2866b37a4279c722ea3638fd0e918fd5d19b491d890f7392fdf60f332e", "051fc8d6fd049c3e1df9cb8bba428b4c9832c428a6f587c8153408cd5b17d70d"), ("1bca2d8f00b80b08f8c33483b1c97ffabe5916f31166fcfd7e64de44b7cacc81", "24dd9e8907814948b4d8d32359ce3662a1d9fd16cf7c618a04cd4b1b39891569", "0daa53f010e168ef60859644795b622f95628528bb92303a83f0529972f783f6", "27acee636d180de937316e54ba18c0cd161376c59ebfa29e3bbf88f8ea1d86bf"), ("2b0403c55a705a014f202eadd286add1b66c3628f895097fd4bb17bbe50e2a2a", "2d4806a7ce1aba5ae4b16a99c6814a4fc5596e2c04d48ea2dff0aa220bb8b755", "1664bdd674590ef21c9aff2e444036f4a364f59c77c6241cad5a662f8592349d", "2bfb7b0c1768cb04c69ea5f955ac2eae4befc153d40422b42abe30ed2458a455"), ("2a41ca251dbb8e7e1f08487c52744326032bafe81d32136a00c8060eea58b385", "1d5385f004654a3f695d2afaf5f2e6322f7e57ffddb27937cd5641b287475128", "24a58552f8d90a20c30eff9aec14b79f2fbe174bed458a07acef78efef676400", "085baf1a5325bd1ba6a2baee7873884383c42b0ab6b2c3785f39a50e52503d8a"), ("0070e49814cc52f2eab3e3d989a8c2014c448c64a404ecedd98a53baa9213ea8", "2d25cecdece5378d22aa513be5389c90e6b431ae07911ee9647316f1bb67922b", "09385320b6b4957bd6c0b2fa91c4807379ed5d6127332f449c16a69bee0f5857", "18a35f0c69e38eb5e70192e9d678873ec0d36aa40f2b615bbf01c57a2f8faf5d"), ("13847e358ff687bb46a1488b1ff72b1779e9d410194696fd125d7739205ec6fd", "16f78259e009163ae7ac6f0ffb4a0712216fcebb781715deb32130c0d347bf83", "2746218341b399f558fd5a56faa4127ef9fee6142037dc3d28dfa486bfa8c492", "2672dc17ad22a8cd3a96bb49073ec7eddbf42b285fba409d547bbeceeccc75ed"), ("27f38135dc1f218f312353bf343dadda232bd4b83cd973428d4d4575b69229b4", "26c396167602659b531eb8a914e60cfd49a2a8886fe9d2966e0438534215dece", "240c7b1eec95dddf8fb72a688ddd3f091021797920b20383dfbcf4a557e29d36", "0507ed9da962deead112a1861eada670ac0cd597eaa975094add24f2aaab3c05"), ("0a87e4717603633369f940ccb930ddd3e6909c1a2f82f3df3114d903cb007607", "00658abaca65862f4920885a7c7face8a7f7a8a05e1d0473903c93d091371afb", "25cc9636cd32a2816bee55347bce60a1949f3d04638b1220c72f10f0477d24e6", "2862a2b06d720cd9969c203c34fa7716be7eba8dffd846acbb5e81f78456ecab"), ("1fda6b682c326ddb5482c9e8cdef08f5a25f218e681e8466546ba75b1e4c9334", "03d774d4ea02b8ef5c80e54b73917e1c24bacbc096dc1f3fcfaee29b30675431", "2b55b82535ebd9b8df1aaaf44019ca65c9f1efc8e2298572117bd058a8af3270", "19a67c7e01fd1b36569a038a87828d179ee35e64c72b40c051e0796bb7151fd4"), ("050ac06ca77959dd0bb7cee38419d7685347ebc6401198b57e0988d61da39a81", "04a50d74368177febe3cb41c0959634e8aa2204e05b416250f21f8763b418f61", "24ec3b6da6abf51983f05122311715f132cc8f54322f2e4a160c6fc65eed0b48", "0059e595a0b6fd2e6790f26c7704025de7ca311a4b3545c0cf323592efd7f6d0"), ("12997fe8c84dda032f5cc6f9e1a7021a498bf26c4e55e32d37f96dd9a9076ecf", "0852a024be1a22008b3fafbbdfa9bc0f67f2ef9f237b8d81622091db6d0b38b1", "056cb730fe4524ac00f5a77caa7b4b80924dbdd29d8aebbda718e4caa894a078", "18e5ecb78a7269c47cb937b4bf5b67b9f842addc2f4114a19e0f496f322fc047"), ("1b1d623404e3676c55aab7f3c240e94b1341758a2d1996a379fe6e07366293c1", "1bf0660f2b209de26f447d9404e8c0fd85ff1d58888795acc50b82fc3247eb10", "1d3aec13ea5bf7490decb832a92ac28262206eb6ab0909260b0cbc996d5013ff", "0b6becb1f244a162b674787de1b19f9ce954b9ab29363dc83ab6b0ef8bb964d2"), ("00ec0b966de445efd0ab9f62ce7df8300b80d0de0f00da056c7c4f69c3318e2c", "15d5d172e3ba981849cd56760c21196def52c9c8f02583acb2e6c9c3a5606f8b", "13a34f8c4c362246df566aa7b6f31e12c436d040b446f1f8ad25ba0fd0a209bc", "0a0f6aee7b6f48e90bc2e9b8dcc8277d7b000f3269f0f6f1be2b099659e94cf1"), ("0e9df0f540b31e1b6a05da98aa855d93d43f8ee8f611898081eac24b78f6b538", "11e74c2f616dcebe00bc45c9c2cfbcb9b37c523014f705bd76324404fac74f8c", "169c66f872647ad0884ae0a4344237625f9516c92f2f2a46fe5742710c3e82ec", "03705fdd2b6803213fc8a11b3727191d2d3cbc6f9a06e61bbf16e7006ce283e0"), ("08ef977e0e4e0d8755a5e25e9ce0972fd9b3a8b668042f388d35d538d3bd3539", "0e1418c5dbc51eaddd6bacc12f74b3ae5da321da414ad24f024c7312b4787147", "0374d06b04917cc00cada81f25336e573a2a32040e81d8ecc3aa1a4ec230f4f3", "2c97ee48a961aa8ef9c835b3f2f95331304078506eeb4ff449e2c3bb68ee445b"), ("2e8ab0235ebf007695f021984115c536d687e69b2d7b16fececcb86c1d410221", "0a6ba5f54b34cc3b230fb9817c81ac51c623963cf0a4f94aff5c15e071e3e876", "0c796091476970163b503c5d141bc9795367418023d4341997b4b2b545d8327a", "2be58f278739196b93824e6e01fc7ed1a1c5fd1145e511bfcaa20a52ab00f9cd"), ("1c78f2ed8fb9d7e62433767f4f88b1902d6d0bb773792c6378052834c7b5a999", "0a883ffee9a2bdd3ec71a9140ccd80ddcdf02c0d5a0901c1ec7456178765ca5a", "14b1e662f7037a9eb38103230df614975f17dda50a110979a6498459fd5ad89c", "04d8ff1086f0a266e28eac286c068ac782d8e99bebf11ac6266858d7ea4bda47"), ("30348914c80de71532bd5eb496a78314ad544b5513a94486aa63adc1c5a4c5be", "1389553c03bd1ab5ed92a05da2ebd123644220276cde6640aef7fbb0ff45fc5a", "1f76b108d96ee82e0ff90ef7232c6bd819242614b5f085f45e163bcb84ba9696", "20440c14ec754f3b2a789ab16b1fae24b3b38f5a062ab819595e2058e235164e"), ("09abefcf89f204845aaafa7e94b444108eccafee0f002e175509814cbbcc4c04", "2baed3699301c7f9dc6ec545b578bfaa1f6b5f96b1a1f11576394c97fbf3be1f", "056c9647b983f9a72db9f2094edf69fe6894f191bdf7a51f9957446a4473beed", "298f43787b7e587d06edf94dd5fb5ca1e1ed5898f01c7556e7e723390070ffc9"), ("23420aa1f13f1727f7c5ad0ae11c54060b3dae6a8dccd796988537682307c784", "0171210c088b2c4d069ddf5f4b20681d24eadbcc2d77b1b29afb265fe0bfdf74", "1fcc0771d18c8e360498384c76384a8b61e4621d0c1af60fdb5c7a8b76a6a149", "2d273c217ea9d7d630c860dc97de08fc1107fa63c55bda7f0973fb289de0af18"), ("1a991054bdd68cdc707e68f9a6a26a83dce719f628dc4079c056615afc5b62ef", "1ba4517e6af7bf79618d39b58ee4e30d1bd5ed5e3567e8b4285ddeb3e398a942", "23532b063db4e49530dddf28ea4c29dc32ddd211bf1fec0308b1359b3135d877", "05bd2b5ef5143699418c0dc17490d35ec8f92e5fc54a4f5222a80fd5151b2e9f"), ("11eeecafc0f4d3675040d1eefe5b3839abbf7b490738d67df4cc92a6759894e4", "1e19575180896e344a62b66052355b81b6d707da4b83e7fdb0bb2dcd0eb876de", "045619fb620a157ab6e7913405e95416adcd0f5db4d9dad26d4286a5481f29e1", "28522febbb7c03e70608f1a19d7ab23893476998405b8ea036cfed2431cd6e06"), ("1ab5faafe5d3dc5df51a5e15a9793ac6a1e4d6d67b9affb08448a9ea0bd6d582", "021f09af0addfbd25383636054d465761a9a2a866a081709321743177d9673b0", "02c1eb16365a11e9802fadfc237b1c732702e7c9af43908661c96f67311564b1", "2cb2df872e9d50356fe55abaa763c92cbc090638d3814a6f84b19b6440ab5e02"), ("166c0c6063a0e5344412071e7b5a122db497e55f4c216ce64b75591b5d334a3b", "05b150adc5bb2568506cdde4d5d7518126344f63042b7ffcc14216f0560f3c54", "21f763b9395e26a7aaf2e4f9f656ffa4b3a44a894903014c8a0bb1361d3ff767", "26ef52962236ea0e96fc0ef455c9769ae9c5e7e55c786cc2caf9a2e51356c77d"), ("2d685d93de0d94ee07d3d3a11aa3e613fa0fa1e437e7c2beb4896cc2a74f8f44", "1e35ea9ae318d2d1d809e6582dfb55b29861de09d0a2e77a7a47848452007f9a", "26d4a85631feff6d68a623e79d8c9901184ea426e5e9b91868ba3db0d93212f1", "0973782a7dceff291bbfd2fa0272db39cdd00502df2e6e1092d081b4d41e37d9"), ("1cdb78a8b037a83b071ab8c783986b7b276fe45daec146e61eae3392d92c3216", "0c6fb9f958e16de04aa0e0bb040559de0a774d565ff82db572a6754e0e986ed9", "0df1007ab46ab59a7a627a4daa8a76ca2a72b0d51051c92f285a7e2dc4b1673a", "1903486483438aaeea0ff5b4711e806e22b52feec633de4f2b90af7f7cd6cb5b"), ("104f9b86867b7a6ae1be508a4c4675fc5414f0f0e1182509e00369763aa1a818", "06bd3b757e3c359106d93ff86e2f072ecae59f85bb06ccdb8736383a8591be38", "24c8cc037712a32dfc7467382451863b3a89e91c8f7434f5eddae0e033240570", "0cbea37f92e71dc63d97c76ce6399a11db75cb540f7a4ba546e2ad7f3d366864"), ("0e936f946b0b5fe8d8ce95290cfc08d3c97fb553a4f48495879ac14a3e7b1051", "25cee9d1ee18ad538b5f4ff31ddcdbca695fc936b4f9606b84a9b93ad2467d68", "29666064c79d8eaaf2dc1d3029c4eb332002db936ef2b68bb0c8c923e5db024f", "27c91c9f71fa095461b1a20b7eff1b653ec66d2333b0150a6a740f302a9f75b8"), ("16996578f2126e0914f1b8a415bcaf283de38900601a21fede2b999ac8d1c6e1", "21c4cd558885f9dd5c5b358a18e5450708971bbd0887a566da3ff80660ef26ac", "1c20f502ded2b84d4a34ca6eaf6264ee32b90361a0af26ec325f4a69484bc111", "078e89f616456b56f2c7214a2b9e58ef915a102e329e9181df3566604e9a6f4e"), ("2e46798b0a93a1c7ce49445b8cd1eff0093d93ef48efc4af2ebc0bb0ad9ae1a8", "113f6604363dbb9e854c1342998dc9f88ae492b4f647a9b281c62cc1809bc152", "0939e770176b2f7fb426f0ef26a255205b7d2f13d290b595e2d69900e51d07a7", "093aa21afbbbc24d4cdff2193d767d3b881a9a6f5a77b5f8ea131d3366bf1d1d"), ("130005b5eb6e424c1378067fcb0fbef4dc404432640f98ab3f828e9933888ba7", "2945679d73bf7d49bc98c088d8b232f96b8b7b1b382b49a7e53f337c402153d6", "191bac0d36b43e74b93cd99f443f291cbb0db8add8cedea720ae24c4eff250e9", "000e10718a0867841645aa80fed7ae177524dc02ba3ccf416c09b2dbcffabc84"), ("0ae3d135c79b66ba45490a7ec0e49aca96e92621f632a2f36af87686d42ca5f8", "0dc75f9aab1f9128139e2decb3ec2e83f712885a17b99e4dbf4289a8f09b3272", "1e0c1730dd4dbddc74df6e848773f56608e6cc2d5f32df775fd81204a9509730", "0b1f47ba0a14d70acc58956ae13efc1a7566c0d1afb1c7055e72c9a2f9c39e9f"), ("182104d42784357a410553b4e493542fb70f5342256888247cc3e5b9c0e208c7", "0d18a6c11c9e63b2cc04da4cfa757740c3f4d01fe28205a7550e38fb797c9509", "1f749bbd49e4da579c083b47b9dd501b3c6735788f1c5ba3609e7229b1af2152", "153d159feca8790a0c5507d151cb85f1336ee68969a8521daed14dd666836277"), ("304221c000c22fc5f6d223574999e9218fe717e82c776adfeafb57b2cdeb6971", "3050d6790c5bcd05771f544adf6dc4c3c47e6911f8c23c2936f2cb584554cedf", "1b2c3e7bd4103e1d0eb40d13ad479a201400985c7ea9918d2a77ef1dcf1c09b4", "17d61ee9d0853272c278cfa6173eb5da10d84d5485b49454f3d62522d95abd55"), ("24f7790692c3f3e9820edffd766bdee50c2302ebbf2fa3d8d79bb45d8041446d", "02f45bbbef5f3efa066f205c5bb6f321297145dde6a4bfa057345b2a41b97f9b", "100fe25217a4812c326f26e681790d774dc9bb2e1c7991aae060b23a881fe8e6", "0c6917476c1b463b1bde115c3de6ad4123d65402139e92b5137e68568dfed4e0"), ("2d7d13ace017b2967b4b0a19dbe35cc708b4815fdf7150c6069a14561eff70c3", "00549a4e5b868002ecc9d66f1dd4ccd98ef4b83f85854d7fa9f73d1c16995b80", "191510aa87b5a92f05fd46d57a2408806c7b5dff0bc5307aa6a30d23e7c2ed1d", "15bb76c133b683466413ff8928cca772a19811b1cf3eecb79fedf3133b921a9a"), ("10a7579c83bb5028a209edafc1329f03648c54bd82072d98b40940badad2be2a", "28959254dd2ff954e2408261935e066264f338aef7cc332305fbaebadf6a5a21", "19ad5deeb3a7f9735a263cc6f4431d8ce44fc98296a6941a9b434f28344866ce", "1dcabd89e04da7bfbd9536fdb7e05415d1e89220b49fb6ea1e2795b08799cc90"), ("0a2b17d8602c36ab00217fa7dc613e0186d6b87f400d8626945e14a19038f76c", "2eedcf5ad564d31956901989d1354cd563897829d49942c776a4731032943d27", "01969b38f81442f12c40b900bf682330af07221a5ba04e130a8ec0ffe8bafa71", "126e68a44075f7ccdfe9b4b3ea237262d7809a9e0e1200429e239d4f0fbe98f7"), ("1dd0fe7c999910e1e889fcabe6b9225c36f7ca3dbc0f93911bed6be94e75a06d", "04f9a0f93318d282dafc65907fdf809436967c6ea952de36b966e8e417ebc63b", "20b98e48f3e3035d353361958f77d1d322443a5bc25722c7f7dbdabbadee17f5", "284ac9f9c29f9b2c5dbcc24c8ea22f930780b572a0542d719b69ba4c5ec8a748"), ("24edd6c828dcead281b95ad596ed6724585875196445d91428c2b745418b5aab", "01031a04840e1ad8da41eb889b17837e96a7226f7a198e056d719ecb77887f7c", "1cc4c15705e3e281e7589176c8f064b9d1d147bc0d128c17f70c09750eec8d36", "16d4c84ab26613d53c0a31593f8e33d07f80ebd09fe4508a7d8bc8658f08e3dc"), ("2c8364ff3447d5c06833b8cce144ae0ebd47a065d83fae8fd51d338b62359d95", "00c7f2e74a4a827c355a1b2ba83791de33fdb95e2513048935f4fead6aa0e9f6", "1df1eb67e4a5cd1b47fe4ba1e9b55ac98e99059c473e4af4b70d26756cdc5387", "06055c5ce238ee1f2a0b417d00bab392513ce360275283e867a355d70128655f"), ("20100c57ecd548bc6e41a314257ac40855f79c09c4af96db06c2351ff665caaf", "2ea4eec6dfcffa4a349c789a4371e23e3236dad7f79169fff8c0748cbc5fc8eb", "26d637642042736b8f91bf32dec9c4e61541814eac8cf9fd7588ecc528db539e", "28e3c0c4fbdef1d268ff3ed00b392f27cf9f8d0998db3e6be0cbc5f829a7fc94"), ("02a4a253ca139e8830577655d13f3ce280ed21b1edf5f46ee69acb7249885d26", "0c810ddfc6d882297525a0913c2238cd7a5fe13280a5190dbdb57bc576f210e3", "0370ebd06d856ce379fe4a3ba51b307e0ac44bd30106d83585fcd29c47a2a3d4", "29e07022d3b77288f40940c2033dadb6286a909d0e9e8d7225b0717c148644b1"), ("2bf5267c0fd3ab63ad31a2f75aa10815b53cb20fe738440f648063a65b0aa812", "058de972b2407fd40f781816bf19d9c4cb5307772ccfe869849b38efeae0c25d", "0ef026e00503e7e24665585eb0fcfa482424897f7aaaccee745fdefe9c087839", "1b22fabe7aaf6428eb017bd1735a3c82a49fd4828c265e4db15615f58e1af2e2"), ("305aaa1ba32ec4977256760d4e9a8ad9e4ce512b7b1ecb3498e6681038f119af", "26a790aff88c384d565aed4e940d674621285db8493d9d6421ead3ad8dd1294c", "123f3f6c484d9637a54a56f50fcfdced767b4437c066e68817389cc67550242a", "1f49f5926d6564ccc7e401aa2fb2880d51e48b79999f996c570fef1dd4d80a4c"), ("0fd83924bebbbff885acce1527f4f2a4c00282c36d7451329797760359ceb106", "1501f2951be8d912379739e03c6faad8a48d272bf2bfd27de932e9c6e20d3877", "20497785762d7b2dfd982d6073d0ab62606d88a6fd6bceb831de87f6f51bcbb3", "2aed5d5c435e799c3d13ec13331a36b254d7c81dee4403ff46ed3443361b518c"), ("197214ce9ffbf68e17c80d05fcc0e9608fd6b156de67d6f5b90706f03c31d48b", "0172862b39ad27dc4d3904c93028ba56e9ffa77eb7e7c38255b1de269d309ab8", "277c5b9b86b55d0e3c77323e458459ebb7f144ff3320933b45f798d19fdbbc14", "29e0b9038f6ed38bb542a1648199e05c9230345b943548727004a26e37aa0032"), ("0d4cf2f2fa724db1022fefec6118158d401a974dba9ad5717215ed92d8d33189", "06ee568a1a817a4d02ea93ffcbaf70cb25245b2e9b381be60c55866e385beb54", "1d141fee60631b720610b9fa0f1b4c84d51514fb33949f39336a363dd3188a33", "0b17ff2fc69b712dc8d567f8706952b5ad1b96394827bb7456fc4f32aca2139d"), ("198b4a89acd3a475b4fd515f60d6450305f15a4cd17d11250df5e68510ca5408", "0110769154c94effc23ff912252ca97669c877e446aa677480c51edeb6cbe8f2", "14bf732a00ebda90edb161078cf601cd0d1d7d0691546e9c6ac9cd16f1d6d54d", "1d144cb397de3730c836304a0cd0cfad2e1096c2ed6ede464a44574d1c49bbdf"), ("215c69d0995297459a938265649575406702915a7117cfe6e7a9ea6cacd2f39a", "2f0e81ad5b09f847a0a0f70b6cfc3486d6038c1e917f09be04b040c1e287e37e", "02f299fd9da69c1075ecc54558e7502ec9ae367b439dcd63841506d55e6e8c21", "1cb785b6fdd34bbf4865767acecb6ace710864bf98f47dbc14069be017e4eeb5"), ("2453ed74e25bcce4a0124f994dbc1af23be1e7b1e4856f6f0c10954c7c1ca235", "1089b4831358084592701f558a2b4acf99c4b06c6060fadb18fa78ba500396ff", "0715088e9855de148459282e1cef7a7aec26d8fe066ec7f59e21a707dcb5242a", "0a6161678f52c8d6338b0bb28d9079f4e5f9edb226e3f986f6e3f755d16abaef"), ("0c3f4bcb996d56ba31f1f46a8b2a3a599b4125657d84aec9e2e7412f68ff032a", "1f105f429c8af8a5bbedf0598e893720563bce71bd9fc40524282b6207823321", "168126f3fb3ad6099c3e54105c46bd35728f93a0a53ab754d88136a7c612572b", "2ac8cbf92e4cf7a6e2e7fa347a17b1d8775ff68967014ba317107e15fef218a7"), ("22ac411d0f24e2bbf5f435b0292936649bb4c47ca25f2e2a1311cbafa44294e9", "0bd268cac8e2cf2cad25c8409d622ae263628e1e1ddb1bf329d30ec70d3b99d9", "0635f62e3ed6ee8b5a338b6636a4a708a8a2880ac684c397cde46603de310c86", "1c0eebcbd43a71836283be36878ba5153ffa982730153be2395eb3cc696c2e10"), ("10c89a5fa4f3f9e951a66829c9079cf055d1620b5b337dc3c4d5c0fa0b74e721", "2196b7429a57df014f76b8d848b0d014aaeb84eac92e9c1ef63fdf29e8df2acf", "292660fa1f3e9e18632fbd4602cfa4c46f8c56218c9408b0fdbce4312250f8ed", "02ce1811d2d602390dbc9b86c66a8bc74c57f48c6df1e961383143f8c7e9b7b9"), ("212b18a9288a7e9387ae49b2d0df18f791d1a8d6dc9e940750057acfc90eff50", "10ee34f70dbdfff66f99408c612ced9518859444272de0d662f3c6d8ca1b8a44", "01c01a31688f15f9d070a7e294a1451514246c24c594a89b2738dfc2fb8b66c9", "12da41b0cec0be8aa064eddf81436851a1d4c17c6517e237017c96b9b7c749be"), ("06cde36ffb8662caa7b60840ad6ebf955348a4ea6644b69d08ca39257fcb99a3", "132cf77d1d2b42359afb0844b907b100b4790f4162f1c8f88764eeb3f9324560", "287780e661f14b753277bce72de7016e21dd9f9994ecce5b00d358d01793b83b", "0f1c73c32cf17591aea045835455df217ae95cabe446b677c7827442d209633d"), ("2afbb555192ae95b82fa22a715aff0611f64ec5eb3ef2b8353e1d9c504aa5449", "255d89f98d9dc98f529814ad37735b4b8b5e03161162cb68d1933128c752502e", "29a469075730c4a8cb076f2d26c16c45fc2fa2883db1080c10684f472d85af48", "04e2aad19ed504ea3a98b512e7491e23f7859c651ba2d4be2cf26422a46cf102"), ("17ce12b6d685e4306fcd4117a2c49c6d91e284edd3f68bae228dff4672a03915", "2fd7448136dff102db28af549106d8288b32490dc680ed0ef650d1abb31df4c8", "224e0419e1a252919a8cf51beb6b66031570336c5bb0d0cb059794e6b9a0e56e", "24ea3b1c8adec02bdb0bdc2ba0f51ad20c726aee512fe17ebae1fd961b221241"), ("174b8237d90f55e9033793d7d600c23ede5f2698f337e0ddafbb30d096b1979f", "0b150742d754fa0b2426b36d16d3282207856155125db6c403a0e677d6e8144e", "19f9c0e3f7ac3b34917577564ef0cbcb63be3f7abfba1bcc73763193d41fd425", "2ac60b564a012f764878ceb4bbade105ee47dfffbf2efada4c14d340ae7c43da"), ("0b28d8231e60e698b4ac602871808f19a4e176437cf7f12df249817102b58d08", "1ecfdb3ee1b55bdbfb0a9fe0c2fa4ae6785e8f26b688d14cf5172237140a574a", "1566e50679ada4805e286ecf325f19ad5ee415b65612ed7dfcdfa776fd442860", "0eb06bdc6a5828ef59343de85314291916cab3e8b5865918ae9dd00ef10e0fe9"), ("13406406dca75ff72d5b5a8bf400aa52d7083cfc6fcacd0645c6bcaca30a14dd", "2f0e488db1aa9b82d69f9773aaffca28e3b5c52aaa1636c1f39a27e72b73b2e4", "24b9d8627589f69c65614901dcb4a8a32ddeb99f97959ae6e60866f5f7e017bc", "1ad73824b5eb0f28fe0d941256556c8375698bb06293524a823451614423a91f"), ("12779748872f7ff27d667feb86c24263872353b4fa16c0f8c243feecdb6057cf", "0f40fbded1171c5fd50a07acb95b1ca34e0653e4da795fd72af447862cfee194", "1bdbaae41adfe84c9a438a30b77d1ed10631f8d534b81b8a106f9f654e221563", "03c2045fb281ace02c1c79263821d1a2c0daf261ac34145396673b2bd03cb209"), ("0ff94bc2911069ffd65dce93b85576ac8cee69e3fa73377a3060d023793c0f8f", "03695474cd18f4d28b916bbf469f4d452999c03ea11529f6b5cab8975d574671", "019c3ae4a4b8bc45d9683e0f360aaf37dab402a9abbc8a8fdae4abee8d181ac2", "2799dfdb874766f72bdd07b370a95e5aec0347f33fa24afb7341eecbdf2d6af6"), ("1234d650279c54ecfbce598b4e613635dcf4a8c7f86aac7e14136e73c03f296b", "1adc628f1f9ae7a76d56ee583044ec2936b35bb42b7bb342d529d71143c95dbc", "09946f2fa34e851bcfa595cf9250074052dac67530d28a10a5e4db692b32c16d", "0b21ca0f31229d74bf9fce87866de93da6b0ab6b904da290bd5327fde0c5b219"), ("216c7a9d6d515b8bad1d68b3a1c74ac178226e1ee892d9fb502f4051000aceb6", "1e67ab3cf227e2ecf2640afcaf424ae0f552d433331f2dd396f636677748f781", "263629d27848238032cd537a0fbb6aa230924cfd7b316f54597c4ea7370a6616", "1b632c9d1d12016cb6ffad4c0224fe8f49dd2873430a02885f4a157b09af83d9"), ("0442141c7c07ce296054707b108ff3b4066d3207065d81ab37604d0c85c2792f", "248f1e2bf35089a6ef6f95bec6f5cc0ae794a8b3eb3cb92f7c9eaf29d1795fdb", "0ba2dbc77aeb025ed869ddf0c05d3f8635c3da47e028e485a403bdde8ee5d795", "2bbb40c602488299bb012c6e83d47030552faee2cab99291d6b749d1558eef34"), ("2907ffae43267f14d36a481ca80334e1752e90934f8f19bfb315da381d0ff199", "1365a90636a3096988a6eff07d9cbf4a9669bca5fcf38cdde57b916ae730c4c1", "089be64cdc165dde6e2c433488865db844878e9ba06060b388dff06f66d022b8", "05698311c09b316c4bdec67f6f977e62fff62f91e405fe0ad14cfb97d3d08d47"), ("2752c3fe56bae6bbcbeeb64ebbe19e2ba3fb97f7ee1303b9dee238b335d55252", "1bbe91f317d4a5c2edb6ebca0688456d4e2cd4c5b96ff572301d0c8fae04cc9c", "15a878f4616d4abdd15b8a3954378dd3590085d4b3388c17e3bb3aca7938c02f", "286ac243900e58c83fd8e7542e8edda594e5e887cdeb6c0991f0da4ab6628de3"), ("161c7808d652231d9b96e917065fb08f32d173f0b869402bb91c1d60a3355dcd", "195581ebdbf965fb433489068c0e95ad48abcbcc5f1dd874a6f7429c970bc700", "23f149fc5fe69f3462128dbd0ad546f83c4d42b7dd3a70d03258241b6bba4cc9", "1096fd8306838eb4f83d7d85524de22f28a58cc50ac1e654fa6c2c03ba2eb052"), ("13b8c6ce88f1e9723271678dc8680262ab810e0d7a9242d4f856f3f8d2f84e29", "0546514e044f5705792d9a382f66916abaf4bee4dc9069470f151095039415cf", "2f08244c565f3ee9c17e139fc163e9550f0acb218dccb1a6d7fd3ae323122d8b", "119eb2a927006db4248aa769bd99be1ffc5e455577f02f1917ca1537a681850c"), ("1cb61a37bbe5187055fef88483d07297499f423bc0204072a2f272a8fedf43fe", "304406c4b74f5ef9ac47571ce3ce88e407afd2f6bc2410a148809f14c673aabc", "0e0bbae4846a7947f66348c81cef94d8b503b155fe4c34e01c3222d2fac4f598", "277ff6174478841ede26b85a48f6fb531e1256bbf268484502b69de39c608b8b"), ("1b6fe7b1465c4e1065512da00d550555427bafb10b2b784a52105bc44ba07489", "0076eac0b03ced020d2c8169c243eab37c4c4072edcb9caf25abedab583f5d0b", "0a60e3afca2636efb2dffc34fc8248731f43bf36b0ecf4b7698a42e29d1c5ce5", "1f5cb5282870721e7ed0c5fa7a711477c9ac2b7537e273e3212fecebc668d566"), ("0c46c6a820cc2b51dfafd777e048941562288206a80be0ecdd565f3e4412fef7", "05e003d85e5a5de7da6607345a58996c77d8ac703692e2fb25b141322549cfa9", "2816b82cfe33fbddf168bb9759e61e3181fb6b29d2a0fd398133b605ef61f63e", "096a505a2d9ecc8fd6c2c927ca60174d321354063ea59471c861464c9d17f4ca"), ("2a177dbce3e7582ae55d05eb7ef068cd283d84c958b36858caf7d9ea461ae0e0", "061b30ec0d545c9eb1485b4c695a4e77726f47f84d3c5d4895afe0ea314aa8bb", "17d72cbdd27aad0e7e086c9bc9422ac561889fb87acd425c487db5e0578635cb", "0fb4408f59be81fcc02fb7f0c7a5dec7cd5c692e115ba8f6d3f5dc7e7efc1228"), ("1f2b63c69a885a6b4d88144ff0d7c7b55350a80aa5186e9ca9450052a3eb6c5f", "0b546d4330dae73feefaee1a26824246aaa630699024d71fa3adc6f62391e9c9", "29e199da7eb68781b15d60830b0a46ac6768b5e76f75a7764a4e7b90f8d67c9c", "2c1bdb03fbf5a9c59041fcc2d4bb4773ce85dda15706df8936d23de5fdcbfb46"), ("169d11c8acf3bdd23a30775347857eb2dc5659f4bd0a037a3b5072a1c99d2c7f", "0a0ffc1fc4fccd122dd320620d0fea3dbf1f1f1c4625c019ba2150997a2e5d71", "266143579506addab49cbdbaf66f1e61349ae64d161e26f83dc7a652bb61c327", "0d0c412aee8ce419a7d8f6a29ec18dce4297302dcbc5871aec821e480970f944"), ("08f282dca35f92ec00ff5b938d94c847e46d7c231124767bce5826f19d08cbb9", "21b0dd66b50d1df7ceb4a612879e140fe480bff4f5c8dd955c8a05f9b3b2071a", "2a331c9aa4ac6812156b46dba59b2f45634ff4aeff4e57ff22020b3123333aff", "12f397cd339908942d87bce01b89b1e1833e01fd9a9529d8a1e18c4d00f49491"), ("19c0fd66bedb581b0dfded2850139c0bc495b4c250ea5f294dec619d11824119", "1a8fcf490f91a487a28a41117faccea6658543a53845b5f2c96a160981f943b4", "1a679e3b7e3dce71ef9b6f285e8a28d9d5516b2f833b2435999a66a3be890e92", "0e2d832b89b79b69f7a6c259e165af8ed7040d00d40e5eec8eb40b6cc17c9e8f"), ("16d2c9fddffdc45bb32bb6b5345091722cad07b4e9601258b3343642e8d89601", "07d352a48b025d30def6c0c0d12c7a20e8dd2af08a095fab8608b0118340403e", "066944259256320d257d6034b7799fe0a74708640d967c84984ae969d848cfc6", "0e7d7746cf1ec33966ada668961b0e971b988ea3c18aab2b7c4d8b8a3e0f1a1a"), ("075601dd2ac40de2dc9572aa709ed834fea93932d2762c133bf555bc171468ab", "2faf898e48e1b6a2c5974aae65553619522b05b710fad2fa2d2d22c1f1d6b9f2", "0b46c8f67996aa12b16a4013e006eb0455aede60935cf0a1d16ef7e4447a519f", "20769ab285d853c0b8a479632195a65a0e69d4f0b9d7ffa14d87883d35381ce0"), ("088ab369540c244d033a32d7c31eaa18229ab85c63b82abc251ecd33cd04f22f", "1ef86dd25f5db416376acf4d3f8bc21ecec3361f2b036db6c9176c5fb996ee3c", "089e481a0bb5cb7a8ff08b0ea1a20aec948304d5c2b5b96e788b059a0ce0fb69", "2801ff4b641585137c812b88d337de9bf9e08cfb66397466c3266e10465305d6"), ("002d25d7615a3071b41dcd95ed13a2b769c7da8692bb7a69d839265e5fa712cf", "1df648ffc67e444db5712b2c87276eb8812462b30383bbbf5f6b160a95f1f351", "08027564a5a48bdc6cb0d080209b52c5a4b3ca5aa39eae3ccf685d560dd6c22f", "160f8dcf6ba154c7231a603ca748b7cffa6640c76df5ffec12b34a569f14bfbc"), ("175032f6f69bf5fc9f7ee0f161dcd39204d6908b1801b36f307045c3e90a128c", "1e9110100fc6f02bc7417233cbf55be38f6380d17761846691bb1ebf53407dec", "0dba25c6932ec20fec5689a5296bd1d989ef28f5ed5622be603db110b429d7b0", "15f6e56086289f815a7b840e47177a992d9ef9c8cf1f78f28328d75276d920c3"), ("0d9dc6466a549a25cf8d2e562e6324dbcd8e44379822bc42793f68dbe9f10d98", "0d2ffcf7313b7caa7cae082a0aff27864545c1169d070031815c880abc69f069", "11038d9fb2d2ea1d6cbb10f1fe3a5beec85daad5a85ad432e6072704fc67ddfe", "2c53977a5bfda9dabeed8623c0dc6fd2fb0ae36ea937276ae00b571eef7d62ad"), ("09eef48643e91816e287b9ca974a81d68b4222946acbcd56ca85d1604a818c74", "08d9cf181acbf8f980391388380168dd4feb21ee6f066ce4bf4dc2eadfe3824a", "20b9ce7372fa5900d1bd9b3628bdb7b716be0a0b9fe0f03d25a4544234108cc4", "24f391ec18a7d69910da668c07b7e014f29d1eed01a04d08a99c6e15813e2af2"), ("26bbc7f0d91eacd110aa3232013964f4458393969a2880d5fe58495ce8d04109", "073e9309d937d1057d666bf4417ef2732e28bb6d65d18b9bbe9f4d9cd2ee6403", "239e997c6b5e5647db7da4dc9a3cad370716bb882e72859c7ec32f32e5abf711", "151637487101f4d591c1cf3700921bf60e8d7a4cd11d245ee5d17895cc06556c"), ("2bc1ae1f86d20118ad70420d18f663f6c8df47355483a78f62ce7c8286367e00", "2df61b9d2bddb474758d2d5815ff36644d3fba4c601edf095346ce50c7e6d390", "2445f51f85c3ac7929f281003d2f8643df9621eb3f7411e9f28d48e686bcb21e", "0f998f9721186a66635f855bcc52c6fe64d6b63bba1ccd17c605e767c84d27ab"), ("271c14ac9f8cc22c1898fd3b1bce042c21a54d716f33ef9eedfdb947a5ddff6a", "0984fe88e2167d387d849d371cc428bf0dea359ca41c3d24378a2a525989be18", "0fc4198c0fda9718f7f10809d448ac4524d373c37e2f21824b2c9a47241f6114", "26b0ad2e0a14ad76a740088bc73f168f1e75b9b9fe16f53c0aee427a5abfa6ee"), ("2e269ffbd758a764e059d00e3a01d7f79f9b169c888d96b93735647ca5032a7f", "0b03b86196fe0cd717c7e66ce60fd9cb8146b82f8c699b470b3a749e287cf092", "173563cce9468a867589d04621bbda5a5c4bdd45bcd31326428757e8866a90b3", "0bce9f5e9ad80341acdee755c21ff61e8130e428935cf0b809e4f0d2e6c3b2bd"), ("28a021eeac3f6d6fbcb4287873d991c5158072707a2adb2c6d33e1fd7687add0", "11a4756004f636d02851c1aac0fbd9cde0df65b81f3d94ea89b330dae992fe8b", "09c58a51c95eccd4fd3a0f2fcb6b559811a1f44b0c37b198dbb2bea7e4978093", "057480ef0b3e15912f916ffc4e6c1998356a6a9978701771308d6686e9819384"), ("03953209b548301867386f4614017b8cd5bb8fa0029b7ca086b97860aa75fee6", "17367c315fec1f168f28254d52bb7896f16d006c08909295e285ffae64c44c82", "18b536b93a344e9861ca24d77f2b7a5543555a3420d44744370959aa373b4856", "12a5d87020a0b42bda2b17102684b2b8035424c132bfd6bdba6a38d6d8732608"), ("29b6f3683b384320ae4e78fe2a104f43eff47a23909f1ecd9106fb861214abfc", "010edb49548ed39f26e36c8b79335ce53ca8b3b7aad0e0216a2db198f041c0f7", "12ed22ff51d37030ba2cb225dad42216068e7318b25781bae90b5c7d1969134f", "1929c106b8b36738dbf14ee3f9e615a216f744b4c433190ce183872b2bd5ca6d"), ("05be48ecf55734ef08171f3e1f2497861c7286b7c3bf9718d015fdb33e985be0", "15c5eb6a9c09b1cbe0c702d1e34497365553aa8ebed0ccd4c76ea47368e820fa", "2612d146451aedf836fb501b550b1cba2724c1f36b713363b9d84ab386acd51c", "1c32453921b4c1bf5329f0e9081b963b7e3670df4d5b24c3f6088d65ba5984ee"), ("2669daa23dcf977e68d7aa3c6d7e2ddfd312da22a83b6e7a326ef44e70544979", "06c0dde5c1a80cbeb1d68f1c4d8d6adce49ade35b37d41588e34c352cc326bef", "059b8c2038e4378ac406c70cd911d907180d010dc7ede3e355e1cdf86f675c26", "06abc5afff20403223962c6928bd7cdd04138f6963e721b7087f70bad76af576"), ("131472ba794be805bc57a43c3b463cd51848e036ed9ea36ebea4652c4301c1d8", "02d016e7970d11ee99cfb87219ffab87c4813d2ad9f28c578eef3f792f9586a1", "2ce816bda71dc441110e9c9584c0f1677ed786fcc9138f880c1aa4a26e360cbd", "11bd3440039aff26fc9317cbdb477a61cd1f22d9ba028499e3abda105cb1a102"), ("2801b99df724cf513b1c34d686024dbdba5d31a8aefef0fc10c7c95ae7c54fe7", "2d31b946c3ae1e687f7e32254142ff8a5a8ba651f0afb646436301deb88b8e4c", "0729a9d0f0a596d112ef5c4f545d2b82254aefc25a03415e0d3dac7a822e76c1", "2b55073f226711af5115bee4afb56df4e169bf409d0a6e4b6914b27d2f0d6bfa"), ("2ca0c224e65014fad44a14f199b21f7377af1b265fecf7bde5bfac4c86004016", "0e97159ac2711da8a7d14aaaab2b2f36ffbfdd31637b0fd9738f3f9c8e8f29bf", "2447536cbd5fef551e20a12dc591a78d4757119c2bd79bc78e7148e94a9f953a", "14b923a246ac6be7f13af921ef0bfdb223eafecf9df740f14f43b70e4c1c0ed7"), ("16a1da33a4b5390005bd073a96988512bcd8fc03988eda27250fb41de561c93d", "306275934700c7a13793c77df4fef53265da0eca9e7c91f57c6511789aa9256b", "1a75a75bf5551f238c4700baddf37ebd088c5a06938322a0b7d25b8bbee38252", "11387f0dd99a1965cdb2018ef5fb9c67a8ff73ea702cd36142047e8f43fcde3a"), ("2add9d436a3933b8c50f3f4be7dcf56d2d980b801d8ac14df286dd02374eaea7", "1f0cca21411f6e464a31100957910fd1f67b436b3ed7bb184673625b3966630e", "2c06ca1b1fafbaae4291baf7e792f7d3c3e92882594c2357475d8c1e584712e6", "0f3db90353e15a5387bdf1a3f7d094b40ed8b5b713e4b5d59b1cdffc6aaa332c"), ("01d5368ab4498e42fdc14d6a2b53b6f8067c883e23e364ae2d6ac9f022b64e1e", "0015189d939890a7125380d838f48c89873c3161929620705578c22fad22d6e8", "02c776d9e8d9a48851d573ee93522d176b846ea45db4922f6a6977d4c7826d9a", "1daf28b34d62bc71c237652dabecf9830d1ebfbdde26f66c68fa7d1abcc0d7c5"), ("16f7d9932a8f9ffc95cb311955bef84a3fc442ed0c0ef312f3986e9e180c79a4", "1541b202b17e53ea18db958c60c160c9b96ca841ba08bb6d2ed2ba3aaebb4945", "09010986ef069dc62879935ae1a721878f5d8e64c8d39d4604bae83bc84a3d09", "1adfb5954163ff5ce0cb919bef55efc36838f7bc2cb90cddb7a6654006e6f768"), ("0a61f204c2fb90ca2ca71626735fd529496d53446742bab7d76a7ae43abb657c", "09374fb60f8c81509da2674902206dc267bc8c6af898de193c7b0944705518c9", "0b0fa7ed6c34b56ecf3ae7ed7d81c40cd3e22dcfc6e61544d532bf7ecc5d9b32", "01b3bd8a794c696a6a4e95173f6f0916c0f750c3bdca2619b12f86d4cf11efb1"), ("0e515048260426faa76defa7a0eeed282065623f325d3882080403cb7e1aea96", "300e86597124c6dc4a3a107ed288df63b93a1d9484bcd2f078a00e264e9a14ca", "2061627ba2fac5735488a7abdd408ed174372de71ec9ef4c292ef6955708648e", "2339cba44d1c40344e3f9100f95c44eb67205fee4cdd4ab22d4d71641d176c1d"), ("20470029ebe082f2e41a66fed308e2a330c21349d50c719ec48a04fe0d670c70", "0434a92711aca0dd7cc113d307300108c7a743e36f1df9e4d5c0df2197957224", "251e93c6648a4d00227240ed6ae8deae300d6901625da2320f2e57fa36063f8f", "13fd49e6024bfa89b4d4f8faa835d60d0fc7adb760773bfdc1fb7c21a0c82b75"), ("1ef55a91203afb43c7a2bc36762dfa3e126625a7094583dc65a5689bc19e7b49", "0e84859c1e73d86fe6b6357b30e9edede16c7bce08db94f563fba36ab0bd1c87", "1e33118f07823b4e3021f78942eb70b8388cff3513a96a9f9e59534f28659eb0", "09430ee0001c972df2c0ed82fed4dc90327e7a664b98108c93ac19cbf141d2e3"), ("030156cf4185a5076d4a114cde08be4ee2560127846fe6f5b4fc8787b06967bb", "2ff9fa3a92d30d6434f724eeef3cee5882cbe3d2a107598d0f01819e3701f4a9", "295dc24e370276471dec621c858cc4f128cd9eac5686fbf58f39eb284fa58ca1", "164ac81669067d0685b05f34c466217be061657b87f4febcf57399fe71c1b79b"), ("26e161bdb418c0743e2d505093b0c20a4c6061b2cc71953d48c0fb4fdda091c1", "253b27058cffb82684db1c60ec67696d8f96286b255529f5f5a3d6870ab20bcb", "20d98ee921219c9f35ec14f1ba10122b2c3c0e3554be384b559dc284913a3535", "005638e75b1298246b56c44bc75bb02fbf84b9f9fef9d79addc59a603dfcaa45"), ("297137d590c63c84d8a0e81bafe491059add4abc9dbd531dea414a266fd11c34", "1ac7538e6a5cb3a3d7096a008da9fd1004258732f233269608d6c1a89faf6f30", "27e6788f251d400e5e4e7aa63ab358422004e304ebf4d34af84f59e279fc763d", "1fc41a1824ac359fe2fcb52a31d2abdabcdcfd77aef07aee3885d69930457987"), ("1def4460d844699d3c2033f11adf115a58b8b139dbafee51697656d367fb34b8", "0fa719bcf44e643a147be50221db6e4b3e439fe526ba07d3ed65279b813000b9", "0792679d7be536ef4bab5a0366f64774a802056eed3754a4bcaaec7d0c42e941", "2ddb7070b8d36d8b3cea76fdf71fd71091273d38e09fc2ea357ad99d24f43710"), ("12881f83159ecbfa4ee7f98136095f8f2541fab4f9df02fc997e44218842020f", "2464dd9fe65dff1725d4ecd1684c1b7cf76e200cc25c51699401fce821506425", "1737db58e452668878579ef6aade7455b3b434c66fbf8059b219a96958707e54", "17e33eac44ed84af291189034a5e46070dca585af97eadcf0d8ae02fef9baa51"), ("16cac7329a33bae75b29771953e03a3f5ff176b890b8dfc372397bc18f461f5f", "1c52ca89404470fdcadd289a09a4543eda2774501d40053cc39e9c35e165254d", "0c4f645e6895d9057ba108124a778a4655cd8f0b05964e7eb2c563ce6a6c849f", "0f0a2794643ebea4f0460d30b2ad40464ef9d99ccce5b9328d4f91583ca39097"), ("0b7f355e982edefb9de9339e9f77d3acfeb82ed3ddbcc64eeb523aed77e1d577", "2c975dc0a5045fd9b17b19480c5bb9ece38cee8963feb85f3096fded7c3281d4", "004e34ec8411f9c3c4c44453ea5005338e4c4154f7f67391a2e1149d51a05546", "096f369b74bbcade4215535832e2c9a38214dab8bcc9bf1bda92a912a4dbe205"), ("085e99f3729a8acf2d648539163a9cdff450aacfd114422be5eebf73aa77ce11", "0aa75f659e299305c04351d1b948782779179c320b05ef6dac873779554f541a", "0f6610eef49c65dd04c43ac0a69fabcc2b406e27c5e01a0ee1ec02b6d219ff95", "20a44e1ee2dfa0be8d0e513c0aecc001a7b87c07677fd5301f67ecafb22cd661"), ("01c036209f0d7000a0ab07a8f6f03f2879dd1fc5112b4e2c2edc9ab1dd632905", "10ee73dab2cb888868a1c3ef257ac076be7be9582415f2ad8c8a89602545da94", "0b8dc08d167f7a45738571d3c2d7a0a8c6939c11c82c0101136f4d8f170b7d31", "2df11e46d16f579bd874532a77725f30f44c90209cab5121f2b1b02b52594915"), ("2a6330e81e605629f05d32463e4e3e42d2dc1034e5a31b36e3fc905ecbfe65f7", "2e6d2acd366506f0413e17975307e48da3439897690ec5f545672db67b386b6f", "19cb023015abe9162472c993d88439b64a49b368bd4e5495fe3667756e6eacc8", "17a2f7b29be48af11d660669506ed47b82dd6e710029cefd60b4a6293831fa80"), ("157e9dcae02e74a2decb1d369a019d95f2f017ab40c10428ef62d0a05233e452", "03dbfef7d9725c6404fecd3364267082028c84707bc6b8ddf73974374bded954", "1a96cca8844bc887920a9712c705865c9eb5f9ed5df384610abc9793d0f44613", "09423e3cb024046b71f3d1c58d5f488333c76bb1da99e45f5adf8bec88e48113"), ("2a6c0f5d98b21b391026b075e8dee21aa6a595c5f658604bffdab6e7e35e2212", "08c675086b1b62c8c4536a75e313ffc9afe4428ac06283607a74e3307cbdc147", "1a985788e1ff3b011412ee77578e918f84f7dc444c742cc90e785971039c67d4", "21cb6af740f684cd5d7aa9c813dc7a75c4110895fafcff1ec8e985c5c0e5886b"), ("0a020e19a16bd0cef9043c34f5dc25deb7838e9ea831ee370183d9299e2893f9", "074bdde57d691359a749483596b4a25b17a10dc07932c008aed51471adb895c7", "06fe884dcac5336f7347d21d668f116713b2cd07f84d6255dfcdfa5242af60e0", "147ea97f7293ada603e1f7297e5afbc7be375bc1c69467b025ad3a0b6fcbf155"), ("284a7e87066fc565c03ef1c67e85e901a270cb8d05abc626b3f50bc3e187e708", "1610d0fd3f94d860b710b68058ba91559b34bf74233db97c3b0497027ff21350", "076ad59f741d58a675eb7c0a8bfc618c2b1077059606c345161e67d8fff52a6c", "0bf9b4eeee4283cd4ef65900eab165c2e8608d06be043b3a034f2b412fc46a35"), ("1b5c09cef71b67fbf17ef55bf9a6d9c6cbc1dcbcdbf669f6cb67149ecbe8c0d3", "26282a50e329274e2af269bce12de9b670242435773c1563c5ac2d4ebc433e97", "0dbf46fbc74d967670c8721814f009628e2c722d02b20987827dbb918b230a45", "1c9b4a5a0c46c5d740e1209c5fd555832420f25560ec01802d0f2febde994cf3"), ("0de4d6d186be367a6550a538c30d199acd768f4f34961008f862f5cdbc40db60", "00aa4c657574d4defea84015daf103e0e527409fb782dfa15e2fa2525810e18a", "0065c6f3f5076b2963a12c9534597bebf1c4bb1fd11e11f8ad012841e0d34026", "12623f4535d162be27e1f5f8f628d302f5bc841483184a21d59466eaa58cd729"), ("2afa0731715d7b9d5514085f682b0703c581c04d803b250f1a7bebc4e622dc0a", "184c3620b0f4d690930cc856935f08507356d205a1cd486f43898de474c2a78c", "224fb25eecc53d9473cfb1c386ed1e1483cc42c63792c13c08ba563598fa3a53", "03c7a89f993b3c3cb3813eac1051419f427393a1b3271cbde7db3369953b4bd6"), ("2405e76cc10d16f65655b6adc1228c3a380a4ec69054f2456d5dded5fbebf71e", "2aa66ee2efd6df6077443a314a1378ae7f2f99b4906ee3ba52136c937a43beb2", "1f9f57ff4f404224468d80db6a0593ca320d211d462df16ac99d6054266c970b", "2e5b7a29152802e43733a373daa6c2ef029cbd1c94a3111cb8429876c81daf8c"), ("183219487c32637c3023cd46ed0451bd3c0e3088976cfd45b698a8413c095170", "2dd2ff56031165729c4b5069e757d07e1858af8e731cd40b93b99068f831ddf7", "1fe1959fe38d8234084cc89e079e5ed2395b865b4ba414f8248153411337c27c", "1ce50f26e165f9f439f07bace67736a31467a86fae523653aa6cdec034a519bd"), ("1bc613c664dc504663ea50f3896c76954356ba5746939181770de897f082b70d", "26c8cae8c2ad023f37c352ea12666d6074705ca31ecd3cd8a3c25bf29a33c011", "1567f4ee02f13aea7fe3506cd624a0203ea88158856461391ea958bf4ffa1df6", "264cf73b9ac7b0a5a012001458e96efc91861ef61419e3f28b1f31f17b02d526"), ("0f497d8b20faa044e399b0eadf6d653bef4a7eda493b5182b36920b22fb69227", "1e606197d0714f5ed93abbc1468660f7c68013c62da11b418e8773be6084d900", "0a76dddf1badccb547b5c09ef79469fba492359c444fa0e61f21e7782a9383d8", "00d2c8b6e5811c8ce629db19f6936cfba520ca01a7fae03ceceb92cc5580d5f5"), ("226ac4ee7c7cdbacb4af661e0a330177303781f8fa8475f82e4b8ec4b9b8fa9a", "204c398fe8fd744d8718c0a77500701de731ca454f3433c7c3d6eab97e28d9de", "27c3aa93a609a20cab1767bd1882cd6c4fe9e2a99e7670b996ede68b7656adc1", "2cc8424afb067c6942a53cc6bf0d5db3363d793e048a186fe646455ed2a08664"), ("02b43b81a974dc6861d7e150e174df8e2e631d8e40a8f118de13d451dfa9f231", "188d36778cd03cec4a402bdf12948d9605da06418c7ac227cf1ead9ddd50687a", "1d6ff6c5d7a51a912795749e4713abad00aea03bd75b75e85c1e0afee4e30c78", "03d71a667ff3320c37a783de7a0f377627961fc3b69678737020db433f1ccc9b"), ("21809068a1e15e0c142f314b5caa432eb291801cfa28f9c8c866d90f3c6974d9", "06b52483339a0a3bd90ee15735ae452d7121ca06ad2409fc8de84c0dc99cb185", "2dd5ac99ef6bde8467a6d2cd7a38994f2f850d64682244bf1ae14d8dcddfbc0e", "0e7b8002d42a0d303737f01447a93510a4fa4ec30a3e76eddf9547bb2ee1680f"), ("11aa1fd3f50fe19dd8530773b6ba3710161c44de94979bfacc057c35a9f7e3e7", "14d68938b35b5d2ba60dcae90519bcfddb4ed9128391c2b70e00318764df1057", "0e6bb6b3be285059484706edff07e89747306d62d8ce38e02572782e048f2f54", "26d850bcfb055068330a5146ae80d6d3d100723131d51a6a6bf6b26f0a0a01f9"), ("1bcdb77a4594bd0193cbc48ce0cad1bebbb1636b5fa6208529e3bfa3c0cb0e51", "1a12b9316984ef6e60b8505b6687ef24d4f943661437cc3df0deadc5cc0fda62", "06cfde2db39b1c73361ab345b1882c35064db6b016ea2d4910d806da99c03b30", "0175acea776e80a94c49cf8e79c648bd8cd1df44ac2899a45019c65b981f1df0"), ("088ec12e2fe68042fcda1d7bb809da2b9f3345ca84d44b44eea5f7c50c9c11ff", "0c2e08ce20088b0af697f874100c375f3d2cf5f5127e1d597a4474811e5e4db7", "1723f345c9b30ab65e9d75e1e9e6af4f06a114a0fe8f2b5b839b207513f19972", "1605f5eeb64652806730f10cdc8f16eeb17253f4ed8dd9e13b05cecbac776dba"), ("1f60da65a40c0631db2bf97512cdfdc822768bc20ff0254381002e37719aa237", "2f3a070cda2195332b8aa0e70760ee008ddc2d421c0f244522535ac4d948a199", "2019c6422c103df09ef358153c7257c75f913d32e468a6bfc91db4e6d672f2c2", "03afa0d1c9c8b3ff67b36b730f924c8da1ad88001137bd33a5d3831d1738681a"), ("1e93f42810660aacf707297b956edef718501dde23a192d46a523ce5ee7624dd", "231c6acb68639eb14c0e0a9798843164b05a75a15361e43828d5ce2aa5b0f21f", "077eff525827d48520165ff837fdfda29ee56d4a31d9e3d56dc28e0991983f85", "2a46e84b5c93d6a2e35f8b759ba4be99dd87ddc827d76a70b631c73d19efc5a6"), ("2a34c2412e8d40dfcf181237f8003c5c730b22f47e5c47aa36f2b849e0ac4c20", "236913d7f28c311c4c97e64f846de703786c9d53df1d248f1cad587e9cc8bf3d", "275e940b064b422e6767dda02cee5503911eb860395a7ce9713ae6618d35b6b6", "1dbedda228b42fd162e54e5314ef67e2146a0939f1d8db59ce4bb1f106b56912"), ("2ca1bd0b813731142ae7db4ca5911fe7b9a094786255a933d1b5c037e96b0627", "114789cc00027d5302623a14c4df2e4b2ee657b206b1da924ab1f6e01b2c8d01", "29993ef6b153ffc80b6303f329bfce2a564782e94b607a2bcdd54e80510db260", "1334b1995367857e55c9e9d0f931338c9d56c7fd8017a3dc7911b8ffb99ff196"), ("1633246658fa285791fd8c63f209a8012fa173db82417bbf7bc5057fa153ad03", "2a22b5463c8974d15751be139462e311156d1b302542e23a7df8e7ddb7ad2a60", "154e62eb828f41d0b1b299180cc0cb358ea194d4e35f8414d5d7300cf81bcb3e", "183d1df40ec76db6b1254d7f06cc62375f5a9be91864204938b0876779c94dba"), ("184faabdc45b8af44be02f437c175256873dbc4b011bbce783b4ec1ee3d927d9", "2ec0e4c308569a7659c2b8a5295f627fce5b15f16c0e11120c693a708a10d40a", "26e8fcd24fe16c7a815b5581356c18d9c47add0537234a6f300ef7ee0183ad9f", "2852d2e035b80c8898f1230aeb426ca0c55a204a847b5256d7f258142826f422"), ("25ac9f11b417a28d57c3bc4268768611b3b32dab10822435c4245b2a8afc2043", "19d49a333df026b9061cc3937f5af0c1804a72f5d0288f3a4ddd7c40659df3c3", "20d5a49103bc95053ecbad39b8c72c5f453ca52cc991358849c4efa435cbf426", "0339d7e889ba8010f63dd33f6a922a903bda8c50e7413f0f83f881dd4ac347aa"), ("2366b3d73b217c857007a9d92eb78ff0e053b372f881c1bc3334cd43e2e9d649", "0c2bfdb5490a20a4b7d4aaaf6f331297af77ee61cf0a5875bf03b2d4694c3675", "1e93fa3a6e965c3ee6eb4f7b9c509c745567a322846bcb3bafcad46c0ec691a9", "0d6f913ff02d2990b95f50c76bb240bebe6ff460a2901652f56ad1030f471960"), ("259606955f9a3105a48bc1f6f72fd242a00aefd8a0a17d6a10cd79a51b6ec527", "275368dab139de4dbd99c42b5b45f6a5c2daf1e2c688816d3d7ab4d9bac7a97b", "206007dfc311c7a690c5c23719110e71e1ae77e66b98dc4e61200fbfc722f601", "2e719c83a2cc21af8765a3ade3348ec6e6a970053134fe576ca3ab37d3228b02"), ("10cdd327e7019ff2b14462b6340aab272860f2c3b802daf6f1d31937690fb327", "20deca09b42fdeaf87d2c91cd23dac7d940fdbe7ed077dbdafe1ccbda0115049", "099bc8dc8cb7e4a82c854dc4e88fdaac39ef4ecf68fa6ece6e8689aef9a603e0", "0368f91edfe811370ee01f170583a7658a67c6b9564e94bfc23a758cacdaf5aa"), ("2e4bc607210a33cc1602d7ba76e6c43449b315deaa58d50b27b8964b10ccf4dc", "069360e64e8548ac86a5605a6fe31d291f335a3644e26fe9580e5d0bb40c3497", "0ccbf4f9c0cbf078defe9d2fc1bfa7cbee236fb3c60b6b398d3606886c00ebd3", "1ef3c44d79b497ead0d6af10dcd8788e7470fed4a7b453f9ea98dc41b8335796"), ("28ca7c01f937cd64de6600efe5a3f0a0c65803b567731d7033d2fa7e8d0cbdf2", "27f1b4ea00520b6d2fe6ad0cf24855ace89b74c187e0a2ab72b07c4506e01123", "286b0c12bf6922f602a0c3c5a4c41b5e784cb9177fc23d0f29d0ffb5bcf8875a", "01a97578a8ca4482b95b6edaab94cecf9070b553be6c148f70e13fd5f331a100"), ("2f839cfb848ec09880a6e530ac93dd54e958afc7b5db75caf2381d33b29ecefa", "133bf544f90ee281990b7577bbe2bce8f9f42d94fc21045999e074779ccb2cde", "0e2f806c56f4df2304fd9d35e244ef12ab1b4238ea2c94062c112e73ca8f131a", "080d272a2d86123de9d27ebfe285df1bcae8027e476182f19786574b6462beea"), ("0c4821a307d074f1b5e193e3e50672297fb35b7c4f30f23a9701b0683d09d50c", "2e95d84d12c605451a7cfbf4b927f8446f431aeb507faa8f9f9dfb23be5af8b2", "101dabf218fafc6e6b3fe36d76def9e27ba19471f221cf7b4ef7b657737f4c53", "2648190ea35b91ac1d9c97e2a58a5f8b4af0cd5a0bbb461d5ff9607ae54149dc"), ("2d68030e9d4b188c96a90044a31a04909f0cb721dacd76a20e3d432022ce3088", "1d7e762508ba6db11f809b87ffe71a469a0e2555a40dc52307d8c2564fcbd5ff", "236b3673fe0dd16ab936619b4cb80d4454f7ac18be3ed088af878f8ce726f7a9", "0f6a3749c7342db36e2d0916ccbb0fdaacfc135f0c9c37ce4beb56e351d19d83"), ("136767e331182b5af5a0adf5ec268acb07072e7148550820a34e908211381823", "027f5867f4d2182d3a9283db31e181e523f9af5de017c1d05f727b3b3abcef3c", "2452837ff4aa49eb0a1fb52e5090e2b897f8e4908a78d43171c5d20641bfe713", "0516f3e3afdc5af5aeeb6cc50e219b0356708ca3a65d0937cab0f7daa0e59a3b"), ("1135919fcfce3925922f3aa489f60531c56f6fde83b12d989e38bc9ed767ba8a", "04525b28d1142d7f9d44f40669f76a22d708020282be41ba07f08d7d26448edb", "26390edab69d9aaeb1f82bbd221687cf2013c076f06f53a38cd518310f6bcd36", "251b4564b85c27edd93942f6dbb3ba24b6f26c22b2a63856a4cdf4626558bcfc"), ("1063ea2d6ae9e9098c4661c8b6baa26bf96af9b313bfd99cacb03060b89d4b68", "0134ac459a67471c83781d7902fbf29a25eab61214d602414e27f3553b809dd7", "14d2533389f288eb253d0339d0a10a67ec9ae70839aab2619159b2d108cf7244", "13a904d45ad18d3c4e135de5dad14c5d21b7e7c3aaa42cb9381503ca82f05353"), ("19a4c46ed4dfc1dc5b2f7892b2e9d6b25a6abcc9a559bc3b0a33e09f0ca25cc6", "090cb5fe2df4e41f8ae2fca97c3ab1c3d98b87ec4209158d98983fde886ce7c4", "1fb50a5b5d56a2860e9d07d2da300254e98d9fa5092b0d4246b70f8c7cbcfe6e", "1064a209072c34dc29f3332559102fc56cb0c3ca93de49d2e8224a990cf89579"), ("27c2740d42d48ca8c9c20516cb7dce355e8057c6ed381c2657f83668d94c51f4", "01046c9fafe6515a90036c33e38ed7b1d14f7d7cba4ba0b7dd3aabbf1f1127d8", "05c65d9ec46f612dcbf03591970e85fe4e3e21027957071bffa59b825f765557", "2859c60b9ff8db08959a712184863160941bac05066f0bd6802eafbe2a297ae9"), ("1439380dca74675c7358f4737b95e9e449d3c253a437528d232440e8d25b6b29", "290136b4d9e47f614b1903a004f0d715416103784fc461ecc9d7119c72324eec", "19ebbe88afc367dd6db555e1dd2518b8817484f623d937e3fdf331e5b875f65e", "2075d41f7f121b5192e218556c62bad9a517100d2313d92b866fc9a141cf1a1e"), ("0edf03463ab9f96ce703b58dde5b55d7ab9d8cbb71fa12cb70d93261cd3ce726", "07fa9564dda3ad9b1c2afccd55b168df2479b57b14a467917947dcd9c25efaa2", "264e3d597b1e1e3f3fcfc1def5f94099959b7122e42076af68d44292abf0591b", "0c0b3f284312fa019eaef3d2dba9d47fee058c3d891c5f438b3580b3f1b8038e"), ("230002f8d547124e95589c93b9b925912f37d5b46b7b54a842d09ac4600e0614", "2df33512d32bdd96bcbe77419e734ed9d625c269562a808d19e4cd97e9128170", "01311b192f0eab87d8e7017d19422ead88df0ce64cd9b7de4f8fd6cba9c1a270", "0f6ceeb9c59c7cc3d708d163155b5e91d41e029bae001317d13d9badeae4cf08"), ("1ee45cace08546308dee4eba715570188e5c715706a46252aad198c5b94aa648", "2329b8f44991010c1904b5a4b1061a69ef9011d10ef3427bf50a6949e3f32131", "20b0d4354dbe3b4a608952db58e928ea553ba9da94aac5437003d1b45959a15e", "1fd6214303573ecd504772036c10ccc4d24b9043f2f690d1a9dd5ab5d0d03e15"), ("04242610cf819f9db23ffb1ec577fd0f14186100634c00fa38c336b78ac6f754", "08cc3b598263afd3f448c4f4be2c33a82d9ef786290da5e0d5d10f0f004b212b", "2606b6ad565ddd351b39349b66560032f439ecf818734d308f642bb3cc9682f8", "217b96c8b76e9e3ede35df15813eb698c3a5183021d1b0e21c10419a3f0f79a7"), ("038592148c0804e6a435f0a490971e4ecd5e2de1bfed25762a590ce7b5fd363d", "23b8a2538eb69d8742cb30fb22e71bf805be29e3570be026c5b8f3491dcb5ff4", "1aa21697608ae4688a12fd387ddf6da61cc24e71c5cb0cfee119906fc08f813e", "00c2ed5bd65b2ff94f208e4b17fa214cf04b73ae74406e407e424ac3ae114be3"), ("0e07923758b7afa2d32c1759fa715ea6b5583d6619dd98213e4ff680b094edc8", "19d5d071ce1778d526a3d9d7985a6103e5c1c4fefe0b5413018b0b2747f2cb6e", "2c27e51af5fa42fa650c9ecb41d0a15fd3de4f568a5c89ae941f60f132962082", "0a4d21b1a241bd2f5b4596eb3894aefb8cfec76701dc4ef38677990a84cd42e6"), ("06d9ac7b287ecc376755e38ab13607f63d82fc99a6dd2e0e730f211423e4619b", "2c3f1653e761326a5d3c651e7f898fec3e2a8091840e1864599cea5a256b0732", "0a5dfa783a620741b429f61f9738b542c7d82883c6cedac668e1423fd148d180", "102ac3fc37cd6a3b6cc577c35a829a8f07ece3263d6acb7fa51e62414f7ac60b"), ("29cd34f5bae0a803674d9d3db33243294664df4a6c89538e21f08cd04ae9299c", "0f4c5c25913ecfcfe3bce0e251f972d92757cc6209cb41a59a6bc94be4ffe21e", "2542f4313c1f8dc99679cc1dfd4ec73ed68559940daa3cb4f40cdf58ca8d75af", "1392bcb2917eed98ec78eafb71042642351c3eafb88f25f992c1591508982c45"), ("254781d54908b6db563293705bb7e8d854ca07f570c8215439724c87ce56d0a3", "23f39a9f8b414eeca85502012fe9f09ffd1250aa1e80bf86a7002a902ee29340", "2cd328391c7d8d091c4e78a14a5f4cd698712d6d7b5e1e0ec420b6d1a7a91088", "2b4ba5d8c0d6c6ae8377ead6a5bf48696ab9344a05ba161838e0b774d9bfe75c"), ("1b43bef489ecedf67371b8bca657929bdd712d51adfb054bd420344610629623", "290486369fd67337ef512af92cf53dce855d0260e36f7e6d6f2835467fea7eff", "247b368e89223b3ac836e6c4ee36b0c83d925594b180bf0adb511afe56330c69", "1b85991add434061a8e65cb7441eb1bd8ffa341d18d97226ffbeba9d0bc8a980"), ("177a14ddefb3fdb14c8198e2af989f8334e6e19fd822c0ee3aa100fdff55ff68", "0d099c432d8d837d4b745121ab2e62d3f591f241070af33ac8039ee4336212bb", "28a5818e761afd4b8308fed70bde74526740a141a0bed2fc6b3a149627fbef1d", "108eae514fac8d7c6a824241ffc39c41434093c03999d1c11a2bc6e974c4bb77"), ("00230e39e4a6417378ac0a76ac4bcd144f9445aa2791f4f225bc6a13130e9afb", "1f0ef10a8de237f7db53fa4d3793be51691b906f85a47599fdf4d1b8cf8cad6a", "2bc9cdc2f6eff2038004254d7f60e334cb2451ffee54926082854d93d2d627e7", "14f422c2e190b77c477c95e426015e818d822cedccaa30e4826dad2611d44f36"), ("0a606cc9bb9561e1c0fdbba65eb8864b69a3d66222ba7558c77e2848ed4d5e34", "15753adf3c8b802e525c8b36d3f4c0981d02b82a87abf1c03386d081d2449213", "128b517c6539d2b845d099b46f9651ac26450ea15adad53a7caa16d6b182a110", "1867c3d3e4a391a29def8bed0ea9a7676ee80049d6ca2d1ad84b45cf0e78200d"), ("1596b4059bc1ce32a2dcce0cb2f6156e9a9dc5be721c42648e6616e0f1672042", "09b16436996dbe653ddbb0a3a38de70e85081305aa3c198ca089cbf0185d2c0a", "0fc667f346280c9c1f4879ee099e808b480d2ebf34ba186eb2a336161d938a08", "16815df77b47ec80446373e31255764671af3934ced15e87104f8b6e12f6f25c"), ("301dcdf52c172d2561f784676618093f1ee6083e235f321075ca44bb96a010ce", "1f25c2d830e7e7bf575cf59085ec2afad62d5fe5d8e812217898f62f032f001c", "166ee4fbbd0e2aedd15f554f88bdb65c5d2a12d103ced42793245e1c6080a5f4", "283183e58be374dd81131021e611779d7ee65f7e5253411cea62c97779e135b9"), ("129c05b2fe8e6a9de8f2d24dd4942f05c8ccfec45dbd1c008165d5ac0b7ae0d5", "0e0d3fd0228b0a4a4ad5936714874a3798ce5c6221aecafbb5012878fe926cb7", "2e601fb4e05aa5b2bb3a7bde93e7fd1ef1d4d6e8959aa89512611f2286161bf7", "2c81835ac2eb1758cfa3e7dcf095afce777528fb5b8c8982e960d270487d3522"), ("0f8afbfa282253088a63c328b35d1273f1f75f0e022c2ad3a9010a6da8c491e8", "136de5f0549278686ec2ec88cdf9e1b6590af12f0bf2b0ae6589ae097ccf944f", "0e7f0bf29245d8db5f6608b54988bba56bf8d9bdb5e427f3ab09976728d51b98", "142a11a833a589f34da006277ccf0a864e425b604c74b1405b6ba773211b1a04"), ("069652329b2e8fb7aaffdc33efccaf473a1b0bd43e1237cc125faed81022f28f", "1f203f653f19d927ea1a1463f8fc70df25bdd4a18f4dd9b15dd879d1c02bdf34", "09d64362c65d28a9844ccbdaa66bbd08e1951bbaa7754c35a90279f487fd512f", "0a3d5c4ebf7af6253de538aae732ea6014e6a72868dd163cc17fac3b3ec2bd99"), ("0850a01c7bb397b98d43b4e65d0fb33f7b80de5d037d1dc96fad21678fec8f8a", "27be898ae3ec208277d9efa3eb60edb7a85d35663cc5e9265bf8ba06584b732d", "2a1003c1c1171aead3a64965ff4795de12c10af4cf93d9b477f15a57ff664dae", "02ff387e706c062602b31eccf08562d8defcd5c855eddcd807d73941cc437970"), ("1faacafca59039364a620ce2606d18ba686b90c2e1afbdfa30d92f1b0d67634b", "2728d7b69da1b5cd809c892b8130122cc4adf350455f7a67cede9de4ce441463", "0977eba1779813538551a9b04819796a0d4db5ca333c5fed7aca046e77c8da58", "0562f0dddf06d22fa979dec1c37ad4dc1da5d7778522251287c183ba23b01ef8"), ("2454774da1a08f8bbdf3675d2a1ffadf789814758cd0664765bc0e6c845347bd", "1360092a9428280f695c23a69970f0a7f0d14b01512b7cb1a67f67174deae462", "265450ca2e3d401408679e935425f645eccb28a1d819e7c23ee0eb14239cf21a", "2e563abdcfd466594b52ffb60c12384a3246164606591562a18c0ef9395eee04"), ("14032da62d78be1af28eca6e73679d4f932ea61696c32fc08010d9a8cebb5531", "305729cbf3553ebaf5cabc49fa12caf34325591f1a15ea7d68e78c5d24a9f235", "01135cbfa6f422c823a75af0d195bc575cc96503269917d56805f10f5e49ca41", "137c3a0730607e38ad773746341b99c93c46f7380adf4d373527e7de2d2ab4aa"), ("0e5b27c0fbb8c271e0c00f868df94a1fd84d9f1365631600d6f4f75ef4e15e0f", "2f82427ff65c4d204612aa45f8fdd80dffa085722fd911c6f63d1458d99735dd", "0b2202be9ca2f63d7ac9383387a6852e82edf1d5683a2a6c456853a3a44d5d69", "052d99b8e9a82c2c5e12cdf0f4cbfbd19ae0811c54f283ec42fd55a094c03fc3"), ("2f675b6c25630a96d4e5d210f72f77d761f330cddc47594e7bbea00ffc6940c8", "1b37c9fa4dead052588358fa083b5e2f63173ad7951b9c9297858540cee35e5d", "1ed401ec56d5b4f0ac60a68a053a9d2c7dc6a818020978eb93cb0978fd329484", "211eca43125d4176992c7944257590996a6c6667e8b1cb5b85deaf20229d5d0b"), ("1dff33a44a04be685472dac2b4224aa1d816036f57e31e361f7836e6d0df2860", "00f4ff9115aa093224b6583541f99f247c4ee30694a64dba060fb0fb77fe1235", "0f298802b5655922a777e3a4c33355be921af61faa1e1952e189cb3c187e7998", "106f4f16436d147d0814ea1bbf994ebacd50efe25225804735fdb015dfe0598f"), ("10f4d13e9c63ef3c79e56ca75c163b6eb253061547d045415e54bedf66ff7368", "1e98333b3b6b6dd5622e7a845390ab1beb50a8815001f0b0a6235c430637822f", "255028fd2e5bd57f9056f531bbf0ac4283de8438623859d7da54c6a44092326f", "1feb244fb8b1fc4d53e7ecae699d10028f80d46c60e5310b8cecd928421f0507"), ("159934e2adc0b56a318e47bd0e854ae0968a569e8ce86bb2e4e30d6957857627", "29eee77ae50adb676dd7b5abac946de59b73156e1b8bedc5797479f511f8c0fb", "0366dce0e35c80874d36b65614ce7c490ec251cb38e65271868e95d3437152ce", "285e278583d3302bfab99b7161c2999fc4eb831034afb4c3965593a07707efae"), ("2675b711cac581c91d28257e6625e325ea1067b857ad88c94e9380c4a57346e2", "08924b961cccd6e4b03e3eea6595e4ae43aafac753e2eb1805e08adce7f59804", "0d51d3a22d043d0e2695c1f907ef86ebc02c9bec8c520704dec7f3580765289d", "045bdaa1e557536fff786f8864c00d46ab0c2dee0cfd78635295fd5044b19627"), ("1b3143b8792a962f15ac8565483aff88b89126d6ad0c273887549dcef9eb91fa", "15619f8e1c7b668ff299b7719612098861c637a454c2334b1e9afa70fc7a721f", "05b8ec978df4bcc111253eae15b5b25f59c8147b42101a6dc1e04e3ba16d5f47", "14b9af33206ef0e9b79d0378d811744ab5ecc6934522ca797aae5cf4529277b6"), ("2f40fbad8856b998fbad9bb81e64db4b32def221fff01040ddb1178f746c4c29", "10ad22d963ff0a90d102cf21d54d8d11d32f712fd1b326a9532cfc5c519ee785", "0b03c1b05081258b9bf3f49a9dbd1762118824116c9b79c699c6b6a723a327c5", "1d75cc6739a05caf02c865a25fc2b4459d2791b83bf1c4823c5f2aad9b45491d"), ("0a202c7bf6a14b197628f6f0b216f8a36654b8a623123f2b0b3458f5b3476512", "19679ee4a3ad35fadb90274903141fba3108d11fb91b629be54ea754695d9c4c", "22bdbebae31f37f4fbd76c72d87568bbd8dd0292e67a2223256c6eb4a53368f9", "28c2a37c69009a8064b1403629f1e87e1fe43bfd97f03d7c60fea8918c96f51a"), ("12fb3448f59c597f39bb8b4bef56a58d5516e860efaab0446ee7e25ff7b39741", "1728ebf7abdb8ffe161bb4d9520e079e6269b5d839ed74ecc67dc4020dd584e9", "0f7b273242ac407ab01367f3b8163e57c26827d98daad524c1e40f971829174f", "1b84335e97f83e6b2a92c8def7b43e5c892f1af4b74edbaada24e7b50c5e0e00"), ("1542edd6b80f446602e1683f62f440610f7ffc038277fa0ea739ac94616635f4", "21a8683473a86ca2f0692235d471d32ca96fbbd7b3ff314c4fc9911d184c9f8c", "1ccd7253883cb57d6943b72b8659317f5870acbf036059966863b253356c61e3", "15ee0ecc24fb186d17ccd591fe3bab2e2bcc72b9ab39fe791cdc667ab860eea6"), ("0c59e7c88813683c46532fcf1b45950693cde4d287205b41ba2e82b542dd4460", "258ad414006fd4e9d73d4f9a37b9bae4cc4e5634560b817bd03688d67278ac7c", "2153f43d716ea62972c54cad9fe00a88024967bd0e9d52ab7df0f94b4ae82053", "1992ca449d6e7f14e1128b21ed23a69eae82871bf92758e9c455c10236f8c9be"), ("0481beb92b8c21398fd0454963035ed9900487595714e0ede93be2952cc3255d", "2bf04eacccdd3064a19c8a239e8d524aa365a5741528da7bf729af9ee139b5ba", "2dc9f8dec5ed238faf8532bde429d8d42c404ef6d3a38d83f9c484a95253a93e", "09ab34e2fda26245492834fb1b5550e591c9876de959c83582dec739bbcc9b55"), ("0ebceca710813fa7029a11ca7f90a7abcf236da525a53abb7c99cc3d312b504c", "0ceb5f547d2a45b58bd03fa72f3566b53dec4c3437786e72236df3b8eb1907eb", "007644bb3d4186789cf2fd3ba3b200fefc35f09011e0dc6f546fda51b38694b5", "254ad72936543902678722d11138f93c9763fd8bfbc635eea7ed83b469f1b6c5"), ("1e94dc20866a5565759e8d9a7d16c87b577648a28e7fb222dc8237b9eece92b4", "0067029b8cace45b2bba0558f677e53491b54792f4d7293e1c6817304aabec41", "26f0d2689f74bc3efe1562685c1444c1009c76fe9fea90823ef5e418c359d392", "0e2454d3d39c93ad9ea6e41ca9a28a880d7687869d904a1d95d5c02d1b08d069"), ("2166b12d5892bbb904007b74ba15abd1df2ad2478826504a8cf41cc3d0dce34a", "23475f89f16635cf453f989b20ff480bd754facc73388a00a8028fe1a7443e35", "02955ed7b359e6f927dee6014f7d17f727f2782fbbcd5705205c9699ba353da0", "2da6f0c020d023100bf357c6802d87fa1f5f0318bdea01705ad677496ede1a3d"), ("02a4c31fe4d5738acaaf99ad38511bd9e7311b1abcc54fae38fe4a7dd429277d", "2daca91042c3b41c4f1d569f637202db844a03293dfa55bb3a64d95460cf62df", "0ef4176612efc8139bb9613d7e7269fc68dc242bb83c3c414fb701e4afd30abf", "1ac68d0541d60741a3ec56286c1f562e0eddcacee8096739dab59430f38660fc"), ("2d9ea763e5f421ac290c6ef6ded48d320286dae45a02641e07dd39d50cf6b2e5", "0955241d910c543d7dac02af178f6c25096eb3d47611684e20fdafd417559f0e", "1b7c093a27679f845e4b37968bee8abc7349971829085f5b0afb11421f6677b8", "28a0f818a99d9f61ffa61fec5cc7a0ff3c3f6d8262d2e340ae8b92f6e6ce1b34"), ("2d10fc98232c0b0b36534c2a271b57e11c191185a7029269953e3fa027a47f9c", "22ddbeeef496eadc25d58901023ca916538b9a8bd80c7188d80093a33459d6a0", "0660b1c08262537b2c8f4881dcbe03013f1c7c63bd348058af1fe07e038cf040", "1845f446b68d6f353e97bcacb325ce341cba57c2047f6f3c26c71c5b5be9f7fa"), ("0513b7670ef198babff083634b8f4c49a86f0b4ad5daa7311bb289ea5fcb3397", "18a4cc3466d0df68f062000c78a0435e810dfa9efd165ff864c40780c5220b04", "084d5bdd652c717324886de2c67256632353048b20e4f38cd27df411aef33e33", "14e2ef6c04e8d7e23b81b4a9aad63c0abb5cb5a10ee00d561c4b59714ef57f0f"), ("17ab4b72c88638974fc825661ea1d7820a125a9ba64a9840b783416cad2f643f", "129bf9127c2c0177b9948a8d589c7bdf2c78a2eddc2a506f4e1a400abc53adab", "0979697c97c0be22c3ddc4696788b0d4985c221d4c0b5498dc466839715bfd2d", "137710bf06d89139a5d7e62f3bca2c00a3283d53209b30e20bf33e1d8b82cba2"), ("1fc21eaa041903975757512c654cd39b9bf771c61f083a9a2147d2e567fbf2b6", "0ac6e830f4bb989ca37f5f8e0e49e95c630e27116dfd07822d6405e4b5edeabd", "010a78494a3e2bbdf5cc7695e75c4d00d0a6a2b740896b79d0f31db6eb5ee365", "0ce0c4a584461db0028499c1f0ad3117a497fb9dacd609b8c807675c7c8bf357"), ("052d8107fb76dfd522dc724c0f172ae6985c2b891b850b9adb038a5a5f00b81d", "0f0e7b0c140534699d27501f42b03c5d7d43e273f00ca05fb343f83604887cd0", "1448189110481e128a450673f516cecd6f6868d4b825f574837cde109ea37833", "0df3684e0a08035786038e2384c26447ef243289ccc53a811d035c4341126c1b"), ("18ae6cb9bdaa766961e867f49c1675b9d19465564aaca804f6274c7bb916c3a1", "0d83265cd6947a9ba62228b581c9427d96423414c127a66b1e2ae5e2277b83b8", "1cf5991c17c43e9750e012fb7df214606265bd8c945da27cf027b01444258593", "3018591b680c58dd32044ecedc845d58d0893e964fe2cb8d1fa6e70d61763cfd"), ("0f69ae70c0397c0b0b6c5b153565d269a0152631bfede96234e14427c047b1f2", "0c9b4f03a9dc5214cf7b60de751bba4a87a0dd2b66993de8ef6596a28fdae67b", "0e8611c7e592ca8ca302c61cd0b65a1eb357b683e2118d4fa96310302db89703", "2c3d622f50ad59f201941a030e3d9bc8031930124e2177a7dc24395008ca1016"), ("14d619d751b3e2bf1f0041ea732027f91ac5a94ac4a6438d42c269b6d81f22ec", "1723886a4c72757dd066efe2bfe4aacf57a03760153242cdf727f4e2f8bb998c", "216820048c15a20680c3bed221a1106a3edb3ac2cba2eed021f80d75615ad786", "1ffface136981b011608e38b351af2654d59158328127895a1c801c62a19ed23"), ("0af15bb8acd142cb5800bceedaa3825f1cde407faf86005a56239773181de17a", "08ae0b6544d95f84ed4a839deb0370578cab7779fa224739daafbc205b0b2475", "16c3e7e76846de44e3f04a5572556004bf317235d3f0da16c5d3cf37db8fc4e4", "022e566b03fdd21fe976750a0f4f9a75788c21ee16c286057c9d215c535fc777"), ("1484fd7c752ad73aa9c0ce2a1f885c2f48b867f761da6ec4efbcb088491fb93d", "10cb5af3bfb63d5daca6a9192bd6b771f412ca56f0e8abd2381139ca97278faf", "0ba8eff37f4aefe687d4a5904a6d81d14578931055d97b3125daf2a6f03bd153", "1c2b5186c7bb1d7d2b781d5e1b639c5a20489207174f3836ddcbd47ffe1b0ab5"), ("058f17bd572bfb4f2ed59c9760f4a2def1c42c6f7da7a43217508139eb5ead76", "1e691661ac8105fd13709bc17b057025081a10ef3bdac2991c997714187bc858", "1a7ff6a25d0f66ba1a9f423e77693eb95bd5eaa1ac92aa0bc46ba2aba2d451bd", "2d5b496220c188e7a9e9a5da59bf1f54bd4ac89c4ec2866df063e73706359166"), ("22f56189241a31ed408c90283467d65b37a2a2d8feaec427b8624c0ea080ef38", "172be5bb0f9c461a8470f24c750129f2bdb6ee26e1dbf3708d21919dbe475f9f", "13625c36a0ac9a52f82a6006ce197c4393885ce442ace902723b13ec8d498693", "146256ffdd1f9eac6aec6e220a8801d3c8f0d9b9786dab0813e6d9979c2b7a7d"), ("01fcb72e82576427e2963cbfcd5abd51df9749bf882909baeae9636cc5b4e75e", "2a72dcf37432490b825fc977d38d89ce233319b11e7d5aae1b03c189ca060d98", "0430c0c94efee533c4f709b3fd0ef6d0d453027a15ae82d4a20365808ad8664a", "1ec6399ef334134c8c264ff7a4e975f517b606991287cf2f849143fbf4bf83b3"), ("04d65f30155f5fb6875613ddd1443b7ced463b1ba776b1173507d45cfdb1441f", "1178ec3815faf1f1ac3f960825c5dab713021f61af2315b3416809b15ef885a5", "15d0ab5ccdb7b98ed3ff213755f984de84bcaa216befcd3d7f5a71c12562ec45", "1fe5aa9f803c984d0bb48c73670ceaaf36778161139069e09230b4463996b0e3"), ("09cc898b1dd1e5afe972c6965ada4aebec8d2c3f5bcdc5f7673ff41d6a651896", "00812a5ed083b1dd7d6685a783772bf1d6b6ff859a09ad6f7d4478d2df51f6bb", "1d27d1ea9b9e0aa9b524405ec67374164cab38155f60a7364e29774c2df79e73", "29a24bad3055ff75696c5d8e696ac0d2717fca51a73d623cf8fb776e8d706c15"), ("09ee8c412dc609f9419f2b28b0fae4a1d81267f28317226019209b911d6abd1b", "234f50007342671f13723e706783beac960b50ed9e2f5ed9d3b337776d1d64df", "0a34b00792efde7c3b974cf1ef8f6dd6bd450601c15059678bdc3cc70ba802de", "1e1756e5bbe17e3576550002783f09eb3e493a106f39e0b5b374050316b5ba7f"), ("285ea820ddd5f27b76fff1b21385fed0dd7c259c20ede5ef2ba706f24af7eb67", "01dfa48aa81f5d904e24ae29b0c9c3e211ff9507a98dc157788def8c64dd813c", "26da0bc541c2ab38c4cdbbf596abcf02746ec48a4e2fa12712950b36bc02fef0", "27286e74616fa51b1f460907b3f92af85aed4bc52d3dd59059e341ad8c6167ed"), ("03d97ba70abdea9182b1536d8b5acbcb4c046d59b46b8d3c79cb64924aee3b45", "1eac85026e063e856864dabcd2c71f9732bbb240bf068a38841c04ae5c4c965a", "29b23e3f8db42f66b9ecd59859bf1123e236d91c44644afe3e383ec0222f2426", "106f958d8378c3594e442bb7dd2c0bca7bde4dc44e0fb285615dd42dbf1371b6"), ("2c383f1abf2d67c1001bb748d4d7230fa25845c9b5148691bfc840bee61c1c23", "0570efb5037999e4197e3409f15f239568e0e86cb82bd9c15e267b3349846ac1", "18e38884bb007a9b912be62f9fad4e3f9bdd5752ccca444da671b35220efa1bf", "27af94ddc44d7db7fe8e423b36f67f3f7b58cabef8d09809f8c3759ab84af69c"), ("0848c7c53b5a4252295ec10086a2d9e6226eb766c8d5accac3e0f2a16c8c6e7b", "082649d238aa7e5ddfdaa2d5c495f918fca601cd0c5a09f3e5f924d81c7cb73f", "2c7f5c292def89c73768995fb69721d12a90b604271d52083f072235ea7e3360", "215597f0583c05f471fd5706f21221b5ec39859f2fb45f7f4821044fe5a53fa7"), ("1faac5f78482e65cc749f3b05eb8e8fbaeab969def75b253723c8e5716da079b", "170fff5df4c268681f713e42cd41728bd1c3d8bec6a953a071ed6c3a534117af", "029f244d13d9e08b21bea8c8b7d6f612d20bf619f49bacec162c3a24e2017275", "06ea38c4202e2b7e008f1ce0c3d4c01915a45855942be4c9289ad0f7f5cee140"), ("0e9f4a9da74574a72e1f7a87c3f7fe04fa25ea73aa31742658775271bfe81376", "04777891721ef3f01d115efc3e16deb209e0f678f43de0fef52787712bb2a9ad", "077dad8b4f4bae5d8001c0b4fd00e988cb49dcb903dd87f1c6602c845f3216e5", "23e3ce2596eedda8dc35c6d346d4878c65cb10d025798fa4f8b9c83a2cb1ca6f"), ("08d211719d78121f16bcfce529738a1be5c0259d97ff190af5016ff64086b9c2", "2a682f288cdcb7864781b726650ed1144deabb819c0533c1eaaa250225cf0acd", "30582782160143173c9388c78737abc5c47a10e13a2e28e7d3dc34f59874363d", "2ab9c8634584b85d3015307e25f92e538f8e35df7ef3aa51b026b9b7cb01edcc"), ("11a575474b917f27ecfd900168ce243caa143fcf9246971908a9f3e32e9eb1a9", "24f00c97dd322cc6164c1077b0812de21708803abc70320156a556e8c0b06729", "2bc76028c45a89b7758fa44ea243a660b8a9688d25ca3fd3399cec67a3cab53e", "283cfba338142b85dede77dd8ea455ea6d188795a00783c9d3256bdd15f1e058"), ("0c3c5b00fdf0c7ecf5c9e09e70c6b515566a8e1288c4fa21ccacbbef2e12cb7a", "1cb4149d3b52c02d5661f58a2e2f70a9d4d275f8b97ba947121f182b34e03e72", "06839f06da743194ce48da468f4c0441a2b4df2c63a82e15f258027ed81763f9", "2c0b78c69f910afb6009c855e299175f2cca0ba8fd7842964a96d44d23eba98a"), ("15bbe367486fba1256be7aca60838f75c25d34bc20aac113d99803374b05e376", "053ec526d33ca82db6c0bbbc7afbff2ca10d581f9f790271cb43d3d5ee9c03e3", "27b82750bd571a0fc960f4e1c4e278f69ec50628767a0a4dcc186d16fb7139dd", "2ff48f125317573c2a6801a60da3ef56e26e4912299d087fb65f52efe4b7320c"), ("1ace43a621d89366aa127b4e89fe009d09a4344fccab5cc352c377b19669ff25", "1b4e9a2f300c64cf5bad923b8a0ac32b221072aae06504813037845c3a54435b", "1db4400381ee241c0b36a2556321544140612ed50a66d32aff754be4bb0912d1", "1b01d4ab48cc41f75ac2a24bc0a11e0989055e38e70c291661147d2f85616efb"), ("06c7ec1663c789543e5cb883187e32e6df391a2cdeb7fea99846b60dad940658", "06c3f197265812f65519ca32b9ec5a1ed2280294f80fb818a1937c32a6bee52e", "1abb4349722cf0ede6daeda3af24cf83cc617b8338b949780af461f38f05ed46", "0eba1d5306307e74cddd82fc5dfcb5646b4e7355d5d939f5eae2c593763232f4"), ("1fea16d03dfa6f00925b151e518567442a0ab4903a3dafcecf15deec7b7f9f7f", "2ede6f79bba7dbf312cb1461c0e3becbf4a711746e029b96c13f43da97d35ef5", "2726e4637b26c9366aa13e6f3097e2f4432a25b5b6c88e947db3ca5303f244d6", "00c6996f71af76d5db2df8341d2c729de83465473211ca47d0dc6b1c2922f84d"), ("2d3ec8b0c907f45f05beeb8ebe67d994ccca4fc88a113b12c4bea07acf9535bf", "15bc74bf4f486ba15d848419b659c89f1855ca0799c682f67c592337a7164dc7", "29843964143c1025d17e701f7f90618712b565616634c824d2089e32494f963f", "2aed8a610e1d85efe467f5825addd45b5d7ee74393237b363ee8621e138d9323"), ("24420f8cc101174465d10ba0eb7ddd6ac1abb02420b4abce5a0a1ac1eaee40f5", "1958aa37185fa4d45ba67c9cfe892bf360a03072a0dd14fbaef407f0832be26e", "2e7010655775c569848302ebd2ef5f3118faf5089bb69e3eef6c2918c79cb3c5", "02d99144fa3ea423cba6e2b81091bbfc6eafd14e1f3965127d6359105541d6e0"), ("2191e4e552cc4f022fbdd1da0e545b0aa754093093392366d43108a9d98fcba5", "17a01cb9e2832cdea9a3c269271d29de49901c72741a23627b42406271694297", "2e6a0fee6a7f60975f8d309adfa7321f6c63491e14603ab55b7288562c776c4e", "1eb8ea6253d7cc8f8051c506a4e3d3e04bc3cd99bce89f7408a4260b2a4eef9c"), ("0f0056684034f6e8afdb832e16d26d4c71c31db6a63f66abf5fc740b5217b1c7", "1a00b162310360764deac4c0df8c342506bc15113a97c9ad403351bb03578117", "0b2e94bd99f37fa8a1c5ad9672423a4bc09f272143769a964c9934ac40274af3", "195fbee73972a1b035d846a2e32e2955a349de3bcff52d7ab0d6ea6930387713"), ("1375bbc7bcc02ff5e9f7eee4501d03b1964c79b375e7b3e663e64538aab1ac01", "1c93e7643714e535891f9338a138960f983920e5ce101266e10a938becb07a6d", "22fd1deefee105b04e5b49bab49bc7dc8b08d68cd902ba5fa9aa423f96acb697", "2777054ded7347a1946fa7f1b31311884c60dc3ddca6d87e84c7e601410dc489"), ("143e57a512ae2ee22337b4445bfaeb26d0eaa14348ed4fd173b4ef2fb4ee3ea8", "0e234aa219652ab4ef025d60ea2f7cd8b6bc14c72a010e21afa8f0df8c815ff8", "0b7e333dfc5f207414f7707b0a4ba5f47bcce3999583dd26b0918e3dd9812779", "13fa0abc128f20ceadfa85e57803d1a66ef73dbd9840280c3d276c67ceed0289"), ("2cabd404ee3c5079503f992cfa108c948c3f208015ca346cf39e6ebb90650c00", "05ca69f816efeef44cf59aba3be8fac1a453f6b20f1ffc78650b5bdb90f82c31", "14128ea7fca8cb62f9d9ad6bad160ce0f246926d0cb801a8ef88fc881cd0be69", "2652613a5dd6c3183f96a5ad5ff4851261e07de3af1ad481a4026ec35e6f35c1"), ("2c7dc60538c790ec99ec0199af6a79d9bda7773d129c63dc31202eed255dcabb", "3054a53538362db99663b0eb7b9f2fbc384dbb40277ac4d6808dd0c6e6d30e39", "25cdbf3be8ad51d84d9c27874d7a10a3cd4a9d8fb2e576032e5f96aef6e56fa5", "2fd1b28c998f38438481c223c5d40fd92d9045832ea7c137d4bd45ccca07ae5e"), ("28001e9741679eea6048cdcaa0beec61f49b90336a80093746042c4a53e8e5e6", "22693e9097951ebb54adf92f8fa241bd52bae1e6e782d6630f991e54aa161194", "2f1cbcbedcc062529b06577358770eacaf726cd11a32565e9ed103ebe1dc68b6", "1d182991c0762b04219859eaa7ec19073340119894177e0c07c8aa57e1efa6a3"), ("07896f7c6f723ded7720c9e55b48ebf420a7f93272383b6f9d3a4a78a59fbe3f", "152df8e85464c88a01fed89c220ecd1bee5bbc1f98af689bed921d3bdac5f959", "1e055ad62f4e84ed4dd7ea78f6c88a61ffca36e68120116ed705c832895519ad", "122fa42ee2816a27bd26f74260034bfdf6d55700dff8519c182454f548433239"), ("05feefca8ee2a938d2ac98c28cc546be44af3c1c058084d0e2e638db2dfda055", "28b08de76b6330a9dcabc7933190569604e94cdda4d9b760c18a9f2e696f3f78", "01b665c4ec8b3d7d8cfab6d608ca6c4600cdd26b6d82641cfc4d00536d88211d", "261278522ff5af0c5bf391798bf2d8dc1454f3a9fad239617b83120f05ef7ca5"), ("1d11c210914d4ab87e32f9af1e555d762fd904d3ef79e3b6d3a9c980a33614b7", "0132a7770b46759dc5f860f3dd97a45370aebadfc39107ce449bcc89c2261323", "10e8b78d7d08c04beb4541714411a44ddc304f08f6fb58c81a233ff0cbb22149", "166118b0be523bb06e1ddfbe3b4813f048ac06439de458d013627dbefd617bfc"), ("05d5012d27177ec7252caaa8906961d14fa3dced24e350a3b64878c86c8414dc", "089ba301cd38f9b26bd4a1030f58f46f8078a5c82166ef4c3a0dae38f70b16bc", "28af8759edfbdc39438dd91f5558bffb8802a32009f170667556ce9bf52b3de1", "2c736275709e019f1689ba5ea82ab7e4fae39bef810bfde795a649761841e386"), ("2314fd8a7e2ecf18e7f3477dd814bd3cff995f25b43175a9f085dbaf9c9bc222", "1ba1940a2d88790547f0d6f713ed4c81f9e41ac26d345146cb232de2508e52ed", "2f8c3dfba4e356f0fea4b6b817e7741078388a3cfb536a2f883f5f11d0a354ab", "0b767e79cae583e772da09936fb2c96bd8aa69988c1a27c7e8721bff31389569"), ("2d54288e72491a99555c85adca2229efe8f3b84f34e4ef8d5fbba6c91156231a", "156ffd287cf4b80b5b99a3c811d5663fd7b14094056e9a238eee1df4f129ed24", "1bdba2f275ff6736ea42d12d37f51664e806618e2fac2f9d8d82d2a43a06d9dd", "0fadbaf9e8a01d0e3391666fc6ce5f0472956b06efb7850196d858c77c387864"), ("242e4a37111479d76fe88665da23f5b90858238f369bd73e38060c6b1faf92c4", "08f8bdd35e4f1f64f56fe00afb8eb4f97cfb11807a51c87a3f4111eea0d24ad7", "1084b02c4cc4195f8ad224e592c0b9bf0566ed9de55fdba745a4768a7ec9f901", "0e420f77a1daf0d72ae43793fefb1b2ba22cd2fb7faec28c33812ceed952de18"), ("07f20850932f2e78c08682341474f5639acf3ab6ae27ccb06c6a9d92a54ae575", "2091beb625b4ebde084165fa5e265a0e0a4066449d55ee7319db4c98362e1699", "2218f2313b6df859957970cb2d6640e994141387596e3e322327164983babc4b", "146d9a41656f97322c36ce42a8c076b8d3327aa7d4fd6a509931983b462df7c2"), ("0bc8bebad5942992e8ab8f9aa8cd15dfd48916e011f6f20b82c9c98763ef6146", "008f5194455705bb0422996498466873a24637d3ac5862f71b7da896fa04fd86", "22ba270c1377047a5c65c62f59e2cd3ef9afe9990db1ac8ad700616fa4158987", "2c36ce6c41616720352cead5b89acbc85fb9994789c7595bd482524ccfa05131"), ("07e995c0090e5b00b7650ac88bd58392e34afdfdfcaa9c035b34f32c6b69a0e8", "0b2d61183de8b7af0870543b09182271132b5a1c4b9af4c6fa6a9362b93a9885", "2013329812bb4ceea305a0c5bb95446efb0a2788dd7d3c1cd3b50f4907201392", "1794e755451f3255175c9741c4b30abd8a9754b8c55bc4964106a40a147cc175"), ("13561a0f752b2a71d35c68d49eb46ec74340c3d28b45352586f27670e2e8d442", "286ecfa43d959db9b7f5ee304652af556f15031769cf09656a13fa27380ec905", "1426c21c52442189f8a2295d4685efaf6943b375f19e01458c275a2c19606616", "297119056080d08a3ffc3c6c44e9fb9f8ce3af13e55fff09a94b14a94111055d"), ("222f92b452037667a24fe2e3003019d7b3ed01b9140d80cab8776642c82b2f36", "29d3e27b5e1e605797c00646e41a2ef95f41c79be0f558301cca462ff134df64", "2383c9299266b1dd4d85a285ddf5f53912217b1657c3e41ac7d41a5596c276c2", "0f0b5e1f5a8e4f3a14e7d07aae55ea287bc01c59eb3def6308c42d1bc238243f"), ("00e2c58dc9bf5e91691d65026c99cfa78a2a4d4fc44a78bd8dadc38f5cc0b788", "2dde168d4ff0424b88b67a79ea5073a6a1fb6fda75660080bf6327a0f6fb7206", "04866eb0ac7907103141b3e7f793b7d16183d545f6910cf9f54b6696726f697e", "21a05de8ec45a381c1d2595d6513ad37ca75ba9786f9bdc5bc931158e67d01f3"), ("0128f257f87865887dafeeb2a532cecb5d1e2e9405f324dd8cb2c8f8eefdf893", "2702a1349ea9afd17f7bbfe798cab60fb8fa1ad9b7453771cc4195c7d62ad7a5", "0b2b7dd9145061062355aef76b659c3c0517819b6bd7d270dccd3b263ccec43b", "234fc02fddf8b6dbe87ad49cf40824bc2cf0fa0dc0720e840c07d4f88fb3c4df"), ("26f7978f9e97cd78679640de0be660b106ea5061ae645faade506477b775dac9", "1d0103ee8e2e6bfa08333807e9186773d962773c5615f903a013f6191a7833a3", "09f42c331d8edeb7929828e7eff4fcd11d206b30928e877b9cbf577816ec5201", "235c235cd146af587007804ade8340fafb666fdc3a91d72f8b24960709c3aafc"), ("0f5b829d1e0ff084524aeb02d978db027086258a0cf78edb8cb8108028b62df9", "1f4e898e5ab1c4f8356e51fd0de1087e86e3471ac5007df77b9d72ba1ab5e427", "23506ba5f3e619a44e35b4f435479cdceacbc402f3145437bf9f86bc83e00534", "0b514e8077337c03cb41e385c928143fe5cea135940ba521fba0f6509a39877e"), ("1a18f857a647d54641c35d6effd540213eb1163b4ff3e4f7b90268ed888d6766", "293b39c4622a18ba54d7fcc00e20b27c93126354bd2355546de040458bb05580", "103eff4eef684c5f727ca5d9c6d19d8e5c81fff5bc23ee4580b81c135def466e", "299531bda19a15e5c0ce4eac6cc243ca78e2c4049776fadd50274bce7689049b"), ("024c45fb7cda29642d5e2e17a386bb27c853e91d35737b6d68c411c21b84ab7c", "2cf200bd387f86f76d405ad8b11e3e0d7e53168661b1c0ce3abfb973557aaec1", "02dd80550563b191ad35871c981c8ec2b42aa862d7c77f6944e05e69f6eac641", "11394145b1322dae1b85fa0a3b607c7832ae853adb4814411d368faad5e9f2fb"), ("2a961bb3ed9dd59ae5004a0ff56838a3829f8d477c7382ba7b3c7f8866d3c1db", "17167b81c8b0c4a2f78322b4b86de7c697f27bde97d953c7bfe11c2e498f14ea", "14175a44b802ea9856cbb48ac2ae6085521e64f6bc08f2fd5d40fb5590797a54", "09c4c7c7826549150bd7a73112a1e78d5c56bd009722131e6012045ac5516f49"), ("1509d6c4dfa5d7f8dcb7b747a412a31fefe0141f36561e0afa258d5f944b87b5", "268e054590e3687455d4b5f2e939b7dc08964b3d565d21fc3463674b707a3f5e", "27942130b5f3e4c1c4ed330b1ce1e5fcf317bde378904c736fd06e7a3a07bdb5", "18c264d468d974924843a16bcca75d5f439a1b9bc57d097c38c1499744acb84d"), ("25842add56c840f7983216ded7a4ea961b181506aa92e9a4e9949925863562ed", "17c88b265a7dea1346066b6cf1f47ffad8b8f19bec13d9f069b6d587dab9b4b7", "1abed3cbaca24b190dc0e51b674963bad059ddf4884ba769cca7005c205dbe52", "0f0708728f47a568d3227dddc9925c84d22db0d11bf9c59b262814d6ce532e2d"), ("2201046f6a857c7e513fd832c3371f8acc91320f3b1d12e3025db43374ee00c6", "1e8b102ec8a8d2dcf681810e0c69a7fb4694b6d74c738add178ef3a3d5ee4ae9", "092bf5361a4b646cf6b25ff9786a8c2ed6e928053d06802beee5829584a0e8c3", "0b26aaa9c9a9498378c01875e1b0f4fe13d21c77946fba51426b17c81592f0d7"), ("0f6bcfe04e6b5e6eec48b61bf39270572d354c6f0139873270c165eff395f40b", "2128bd0b1cc5549ebed88268270b166b9c4dd6a6930d56b6b23775e730bf4df5", "1749e3605ddfe15f6a9d2d98585a2329380fa793c93c48bee2b17c4c33d27602", "0f2c15e77ed58906d80c669b1c235098db8fa1e214219eff30a46b1c5d46dbd0"), ("2b613382104206b0701b79f969f42c0263531d803df8c3f99683be2f9d07e713", "2e37f8011f1ccff262b350bf70cb430b40690b1fc22ca50fae7429ae536d670c", "2c74cfe6267c5b9f8f5f4054ea7fb01bcaa59b08126b15b63249b06263630c51", "05bf303f9aacdc2565147a4ece046d3133f317d9ef72d82b959b7701a8c7d02c"), ("0cbb39961b95582dd6e918e56c49b9f6fd824d3541327cc330d9fd004dbc670b", "131a03cb1090d454b71efb71bef582c0e09ca2b90e10b677d3a9c69552d063eb", "184b9a2ad16f3113afa894730eee4e52c6c218c8babbc65095800aee9f028a6e", "0daf10dac0f0defb661a9a5b192c0a7e86c17837cee2c81dd3b34f4adeaf075e"), ("19a4c4aff78dde769e1abf4d072ee09d9978b9d6c9709ee0672c6521e8a2a733", "2c91ad835d9e5e2de3df45ade8b471af5dc6522480158704512fb1124afe42b6", "2ce063f342e3666ac3c6730d08903bba41707494ffddf89b8468951d47e98567", "1dbb53e4874cf935840f07cf2e3aed620da33316db788f60ab6ea4c5332d4dbc"), ("1c7b3ab64c830e2c2836b8ec6b97241a4f2f7b1b591cdf52d8be08463f3ec7ee", "1f95522509677bf45a4a6e2171871ead28751ae08ae8d391314c99d8f9bffd1c", "2badcf1bae9558a6b6403e9651db985cd1de9363cdbd3ea85543d61ed245dd87", "2a999b783bb861a403b4b35fee4d89bc6808bc5e2ece144223b9ca3a212fe616"), ("1746919c8970c0ca9e3da69ce7e53b5420eabb8dccdfaf6b8773660e6a0beb31", "0af011981317f990f90ae4e081e418a2fa1339e1d584bb4c3cb26eacfa4831d3", "0793edf8c3846197e7834e0cd3caa881e6aa180724e8ff2e9013138825946766", "201ffdcc3ae63851283d99bc2ebbbcec162aff9e3b6069220dbfd7d87753281a"), ("1ce6079d34fa194a6bea207f73ecc5b03a5525dc620d847a4b576b49ad58a771", "1cdc9c02e6b26892d63ef66eb8329dbd842fc1ebc7bb233235cfa0cca2fb9fb8", "18b0f976a7de55417188da57d31f336b9ae45a42937b571f2d37648849ae0a16", "1b0d0a2b7d7613ab5d7216cd4dffa95cbf75fe9a73abb45b3b106151c0dcb3a1"), ("26ed172b162819bc57ebc861e54f40b1581f4bf78125e0d51c77f7b9b1a14022", "1d63a8a9e6c7cfb24c8379c2adf8a1d295ecc8d767147dcd145b93835bf83d8f", "0a601c71e4e13ce2cc37ce3e5878a7b224473f0c497e1a84be671e9861b050c2", "0d588aea662c9a183b34e7ed28bc656090f86acee747a3c704659e3698db2ea2"), ("18865b65303358d1890bcac6c9017dad71c4fd9c56e858a71c51a1e6ebf1927b", "169e362238b8145a308505a5a4736f61ea3c44ea42cdb5cba89d9514a0c04acd", "25212fadca3a77dd57afd7f8db117e3bbc6c93361aa1483bd316e9caa489f512", "237e7de67560c8e1f06f0b8fe4ef7adc609918c996af018e1ddc77c4b89e510f"), ("2ab9c60072ebecdc5c055eb2841b76d9fcc33be8cb4133af9cc66c345b453a75", "2f2a712ce5b1a1b89956d0a848617a8d399fc57e2f04016ca63091cb87efba55", "2d58dfd844b18af3ec0bf5a968860d45b1d3751f30982160cd851bfe4153e880", "17c86a5fcbdb50777c7e01eb760b47e3bfb1925672bad63c6d19f60eb51829d9"), ("2f0ce9fd7dcffd81a109ede168d93ce27a67d7e8e931bf40260a90bf2319cc2a", "11700700a7ddc8c385625cb9befef6ef1a3f0d83d43e8c9fa52f8faa5e4489d6", "3050379b6e10d1a6407ecdecc2a55557154a397470ead59b1d5c75bd70c7fc09", "18ddcaa447228c2e33c04fa6070069829b362b77b80cc032b4691c033d05cbf1"), ("1a4e56612265a46b28fbbba3d48dd4c85564ec89eda77a6f71f375e5552b254a", "2b634974a145c0e60f192085e617c1747540dc7afebbbcb77bb0839b8216ba8f", "2a0ccde142fb5d3585f6167dd2a2657f9793f7ae3751b8e059a4523b1d992b86", "2571bfe19cbdddb798cf930ecedf687d951d614697799e54f744c122bc0a1780"), ("0d434ec8af36e9d4901bd628ac996f1b34d8c1ab2edf59862c2709832498cc29", "25efa8464e5b1e204e6ea4f34ffb0bbbc494a8aac178466ad97ea18c921ad8b6", "1966efb7e20199122611327cf6024d7c2c3e33e3133df52148493fbcca6c1458", "219d6c67807092798839e61da4737fef0d3dac064c7f1718046b07ad5062928f"), ("2b1851af21fe314bebdf9a2086cd52d5418e6b09c1659cd3e1215e6c8f27f2dc", "095c60a667949eeabff3563258a7dc1b5f6d4c305c0f114dacf492e0854b43cf", "26f70215a41be6297175b670a306c24133a1bf38f9fe0a17642f1c468d4bb79d", "1848e94549d00eccb89c9c6442fa8ccbf79c0bd4cedb72bbab4163933c6ade62"), ("227c523a08b8e01830201988249b21467365bda046fc9bc24a4862d9f9727bad", "04fd510f6dc6a0afd8521086951c5a20c24d7966172fbc3e5a4757fef657270a", "143b70d6aaa67ba84e5baf7ec14f56ddc4a5d1055498b1e8e39bdbdb38e007e5", "231d9b67704ddba4d698d55ad03e872374775cf497f6c5ff414800041f61617e"), ("22e2339737fcb1fdac6a5108c5490986f8d62b0b4fdb10929fb363f9e60729e6", "14c0f84a22f601d4485df55cafc3f6461af1aa708e0ae59fbaa6b47c23af4243", "11d27abc3f32b4c77bc83fc154f0db70407388ad632d398db4bd804bb763d328", "0c7245d2e0b51df478650687b36fdafd7776ca6d1d3dcc6293e4b692f45dcce0"), ("2ca75af3bbf8aa02847fd33d00ee3e5ea8e9afde6ddb376cbd5c48245f689247", "0b4d243ad199ab6431aef3c2a63b9f432e5905d92207b86745827d71b48e3e66", "0cd7e4ba2a0361a82312967244f8458200e19575e79aec90964a0ade614f8c3f", "134aa8a0eb652927e53cac2baf89d0583504446c4ba90da72b1a26a087449fee"), ("1784583ad190fbb438330cdea0484d5f332bd9e4ad3fa67a9696c2a57c19f585", "27eed9a63be09044687e4003402b61d3b6e491d06e70c655ca582c017929646d", "01b94294df604efe28e2c39efd27d35cff1d104a49d50706710c07227d076488", "23e84b16915d391f3012ce24169e84d03dd98eaad53bc97baac9db6c9917d184"), ("1b745c5fb31c6eca91a0c9344aa56d53f5283c07fbd86426b2d4221238bf5c16", "0045f3dc998dc9b1aa9f43f9ceec65f13195e6784a0d33a42e62c8358c683a2b", "07d1649bc965055460cc079d8937addb7a32d82610a481d5e1ccdf0cbac812c0", "2bdac02fae95b383649896e5d62bf08cfe2272681a494b6383ad25482507fa08"), ("16f490f3d94f1ea676afac6542929d634fc7ac2d4746256070615b1e1697bdc9", "1542a3714ec055fc89561be072212ab1460eb2522ae350a97de9268be1656288", "2a2a8c554f98b72105dbac57a327a31effcf579a94390942840216548cce2121", "09dd861eb528ef2dc6d49eab16bfe3f3dbb82f3aee312d8c31ed6b1649db550c"), ("1eb8b7dd6b43c78e86a73098b825faa0e924d26e8b61bf711b8a725c25ddc985", "2da95f8d0a4af6afd27415613c2edd8b0fe9e9bcf2dfd7ca52578efaf38740b3", "252089509ac78b41dcfd1ff1c58de1826254e14cc9422a5457517d6779bed2fe", "12cf34fbe689ea72409a81a9a22fd8948988c9edc543ed8c5ebdd594ca7eec04"), ("17fd0848ef737665be50173e1f39be91aa077e5ecf5cbe63f44a6467bf0c2990", "286f04b9f9d8435cd1dede58227a5d1192db333a9aac39d8397c96f099f13c06", "208fde3edf00a2635ca823bcf5f5adf2434ef00e9d204beb9c9801b017baea44", "17bbf2ad0fa0e092203851baef95c88c8e3bb0011f6a47f2f2c4d37b477658f7"), ("131f6db3e67bcf0c5e9bbf0e2621b2018dba4880b2f7967e7f56507aecd576e7", "2a6550ca845ea295d2e31075d6ad8750493794934769a8c2ce3d55aa5b5460b2", "0a00b40924e4a655a6ef7d9a8af80b727702c30493479fb54354d84409812709", "1b09e9c0ad65c39fd6cdd92c169889f5e1460e9ad4a4b0364148623fade5d4cf"), ("19f59a0b1cbdeb7d99df527acafdac6c03fd686235bcb4cd8c9b87d5e34d51db", "1a1eed58a93246a211bb95c83686505cf7b90cb1b091e8fc3331765f8e255615", "1f0594b5950f1d753f8c373a4cda325baec64d1f674985be7c89764a79d8553d", "0feb1b4db3895cd33ed68effb83e4d57842d6fb720e0ffd6ba7f2170feebe738"), ("08b8f217d97a86e0b58fed0a4f1b226de765cb848eec797ecda6bd6fa179004f", "304ffcff77ea9e29ef2d2348ce41f5265ef4cf34cf1fa067f527d96528c26a8f", "056e251865c9be694ea3da8d5a2eae528ff3c2cfeb5681e17ecbf1545a2cc174", "2969ce6fe2647bf35729c85af18f9c94d793ff3fc4bc4959e25731e6d3c4f35e"), ("1f69aec61e2d94c5d4c8a7a0eded0879cbe808f2df6dae1c809dc7c0608b81e8", "2f2364de0cc083ea874fac1e209170e8d60f8b96fa860415dcd6d9f776e59543", "287a299e21d1f19530a5bfbf0614283331a89a582f8cdc0646c553d7f6d75c7e", "0a3a926c64c92d0a3f133b1edaa54c05a582b56dda0d1232753302742b86d540"), ("2d1ccd590e82c1eac8e062562369a9bcb720493874bf7fb65ba694238b76e769", "2602e34bc0fd05e1a9096d5c653175e8a186b93b332052da28580b7e6c87143e", "0cbf85167645ffcb80eda8e9c52d1d8f6bfd6f2d90e5241124bdcd6aeaaa7ad4", "2727e79471b582969f8abd48c519c0a12eb0b82a59af8e6501aa6d711ae6165c"), ("18ec524ee2aa903d63db251c4bdc98dea44b875b3e264a2f832a45dbf1e50555", "00270f7aae6053ac994d830d26ec7888abf4455c035cf093656f81d8255eb80e", "271db171397c248638d92f0c43adefb1dff90b38032438dad5cc66241981ebb4", "224decc8e88c3f2dbd8f3d82dea63db9b56c7521971e988936bda001f40c95a7"), ("28864815c9dacaac7a2b6524d64abe8ee830fe287e2a069b94e512ffb8e142d1", "03eab87a049858842f5c47ab5431d891f0c79ab567c23df89bd8bbebd8fc39ff", "22495566dc35a168a7bbb766a423b85c3d1d84731757ee5bfd8dff477308488f", "0548ec29184ebdc75e0c8a1a30d650173f8ff7cb603a8f8f751cdca6cb51deae"), ("11ec25b4147ba5281efba14352f26bae024dd8b8e855269e8d4335144084ab8e", "23da51fa348e24a7946c70b29b8d08ed8140a3ddb7602c75ad601665270d0301", "1aaac54dd4cda568398a3f72198f5df758cd0dbfbccc3e57ccbd56cb931e75a8", "12938fa5a948542c1a3e62b68626cd1231d1353ab7dbbce510210b89c5cd87cb"), ("1c52b8259fefd76fc6767b76f177b843501c5d7cd31cfe8b703269860bdac57f", "1d2de2770bb6994107cf822f58085a08608a2079585dabe8570799c6a826225d", "07d7ebcee0c325aa813cff126702c9d70bd5d5b844008a6e672014e5dd3ba3d5", "09aa0717e525ed64b3d90b11356e5a666e4158b4c4acc1d0e4c251a4ad0303f2"), ("20ddd10248bf1e4ff3dc550f7a03f70f51a2a269791bb4af31db543a3cb722c9", "0775b00d84f13b59a16e81fc303b8260ff470e8eca6fcdb4bc94ef32c95c492c", "254739059b8286166bc174e993e85e7b35113081ea6ed4377ffc7e0cda308a58", "27ddfc61fc48991659d975301e486f0cbe035f8ed36428ca8d071819f6d7da4a"), ("23d2d9bf2000ef9dfaecff0aef9fd80bd4bafaa76c463bd83575132a8aa96cf0", "1dc4721820860cbd6a2f51a3fddca208c275120ae4f692d2159ba2a94e109eca", "2914dee9914cfd9fa11c40e58e8a1691735cfdedbd339ff868250096ef14b36e", "21dc322a8ef97c11ce7f25e1ea31600a4535772a2ef8dd28554e617de4d2125d"), ("19787fbcb839f4f1a6591e0c398168e653bfcf079be75ee6aa4872f948f776a7", "1d217dbe7bbba7dbf2f213efd3b9742255cf22c084a9b12b4a6d224a1a055a42", "2652049c3237d79f1e80a5394ee347c4fa3053e33fa88d52a89becadf38c2b5a", "18d645fcb3edbd68dd487f0fb09d0558f5309381c0def9ac7e443e0569200c26"), ("2961d97550c9056e5fd1f1e7577748aa1b0bf89b8dd08e61211e99a5a6887c91", "0a59e04dff4df127e7a6a70b5837cf037aece66f8a9c9395de0a118652c9b76b", "218cc760ed2b44935bf581076a5a64f320cb58aa9a1c33626f40d16f3cde47e9", "1271ed1d9bb8b1d0d85b4e32b9d8e1d81accb0dcf0d0c632705e18535171428f"), ("1f3bebdf85c7aec92924bbe45368438cb97d7bd7768c36152f3eecfe42ace67a", "0f8a8920534eb5b8a923170a2da17191c4fd8ee16e08a81cd545a047e86e343f", "1af9cbecab48fe9dbdd27a97a258eb194537713a3c47b635a146db573f4f1568", "0c7f14263e510b2381aaa25d7e8083e9de38a127edbf0f130841199270a53cab"), ("0a6bf8e1f4a6793fd3b7eca39aff46cf31f595d9ac7f31ea14cdb6dce4b57d85", "09cc0faf645f2312886cc02f3e214f11d029e574bd2c0b67425d3b5f4f78e5c9", "05abd4e02d66c4fbec259617d3f610859a554e28f3c4f4dcbf57f7c3258b479e", "032e14014c16f98eec2229eaf4be2f0954f3ce529f9d43e3f6faa5858603966d"), ("206ec05bfb5f45aef61c3d34a589102da94c835730432286ac0998675cb76023", "0c10b5839c236e3f2de0108c4ab2b251c7f803f1c630a24e16f387b473b4e967", "27857aacd82812e9d10cee01c42a4cd7f205d0319cfbcbf0c76808ec04aba97b", "25f74c4155308d4fa32954bbf117aa43edcb6d719858dea4fa0fc7596ba1293c"), ("22a1751be56cf61eef6033b85b53824ebcc8e69540188438ac5d7378c3ff93d8", "0f4330910a4117599540b404208df19fae0905337afa34d62475cb34aabdd78d", "04728f9a71895f66d94574860c4f8253e798b8d88b2e2b00b51e5965af90dbe8", "280d145182701191d63612e8ab27e44bcccd8c186020b0c0c737455e0b6257ba"), ("233019008ed05eea21ff77dea9158e1425987fe7f46ce5640773244611cb5957", "11da0082f6c0e30a929b354848fc12967a9efc8a41e343d0747c2d7d292fd1fc", "2ee1297d969f2afcf66d8b0ee512cd8b946a6820c3c8a0b4bab3fc9520ca0779", "11de8d3f1171c2658f6523818b0c3391479792fb07517ae8c502cce1ecbd8117"), ("21634aad0cb856f4cd01164c1921ece5afc38a40c8dafa5abacc44b62387bfe0", "0373f2122d062ba3685636ea5a6751f66889a53965ce584f8c985d0c44d34d38", "1f130896343a1e37a4dcf17484c71ce2d4ce552635c01aafd58d09be763693b6", "0e0b93738dd2e6e6ef0dc605e009e3f71cace2519d7469d8699349e74b6b95ee"), ("1bf95263579f1ab9418428b265064ef5a63030cd7394166641f07d06b98f6ccd", "0212f8d91d30c1a581f3e04157e03ed33597527686d587852d187b460c21116c", "074559539ab7114f6c82182aaafa92470f573f88a8fc3adf4eac58e6f070c08b", "06e304f7879387497cee474e3cde95ec47fef7820daa3a8e53dc4b4b68869973"), ("23495ac19bfb8addaaa09eb9e124adcc9774bc09b36234d08a21e20cf199ead0", "08819397c1a83f5a5acb98922a0a999206464590036fccfa9119c845abcb4529", "188077ae15d54e1fe1e579694007c6a2ec440e3be104dcb79b91261c944835f5", "220a52a32c1c0e76a40180e6b79b8e22bf967c714ce8b3db7e5264fcb9ac779a"), ("24f391bbd8544b9be14d115be29408c1712cff954960daaa184c91d58d4f62f2", "162fd4156281bfc0e3b23d73c4371aa82fda24d04a19c559f5bc2adbe0841839", "1fc84de4253c664031b5548fb885e8b2892b6d86e7e1bb4d5070ddcbf0e10de2", "236466be5c2f9720278089820e3f6a7e22a1e9ec01cac0dcc5dc8939fea8e7f3"), ("2621b4d373f7229b0306a9c9546d938a02a5f0743e13499f484acdbe6ca3a692", "2fe74c8a81709ba5f0c0b59590d5099335c0cb22a32fc64599b5b619b3da2b9b", "0600213da0a066350cc2e9d64d4d20d4f48b9b802fae75b92b2adce4c4b1ae66", "2568a6482ec3290e4228c38b30722fe5919ec44abb7d69395f542b258ef640a2"), ("17d36d9c7cb49b836209423f14ebda6b8e0662c1ec7b72dd91631c7b3318e3e4", "0b38f58aa06b61c30eb165fd3fb68a5f6b52b305c02a332e998dd4661403f9e0", "09d1d90a6a2ed0901872885f033801f096bc51e00c515aa4c8ff47693f3c98dc", "0e89ec8a2edae4b449c854864e52ae45168a87d6c0b3d6c5039e5242b24aedda"), ("041bbdcb7e93beceadeaf61bd8267e82db3f8443610ce11aff3b59056b4a8400", "0c893b273f6bcbab984e6dee365287d6c6dedd247e72d7f84336dee25f06d5a6", "2ecbc5b6e6bbb5565692388bcce76d36acac482790e08a6dceec03633b5b012e", "0df8b622280e4ad3f6cf4d0c305cd9fe176ce33bc2e9abd2b303770a2483697e"), ("15cf596e13b898b402b0899edb403a297fb02b8ca270dfca94197f4ca24b8a06", "05d93be14d73af6774c7ec94c097d76b4e604dfa73f885aed5187bde8c974163", "1cee385537b09db7bcb48c7e298a4abd77f9631cf266a024b82fdd95613ff68d", "1898c947e54e74adb6f1b5f464a6e51c70e5ea2bb1f108240413b0fb33c6ba59"), ("17f98bb3b80eb08be7814d3b5f083b61909dc33486afb067a85f7fc859e871fc", "1dc0f8e47273388485200d4a1aeb64df2106b81545a4c16d74a5b57aa5945271", "27f6a3cf3d2d5049db0573136b48ee900b5a642374f0f687ff23e89640392da7", "21ce576fafa28f677b28967b03887f4f3e78030526235afcd3cc043588027dff"), ("06961c42354b3934cda2331b42192d0ad8144e4b776188e38a26c013f0504a49", "0f1e3a81e68f6361937d6da333c73b0d5053bbfbeb4fd0480e43a747b618d15c", "086a76a8e030b427b5b1a9dbfc90abb47fd4f55c88d8ddccc6dbe29323191ff7", "1404501718d8911590305e61c9e6113ea46877c711e2fab3a53045233458fb7e"), ("23b4a31d7b011cf2329932d1a9d9576d82aaf5a34d0308dfe5f45b287a90e080", "11259eadfa45d3de8d6c4a9df70bce72b7e868579494c8a695400be9fcf61803", "176a9b73db7304096f244d711653bbd746823cca61b6be0ffe135c1ccc0d5c9c", "152b7eba7e7a0a7f47abd02386c42a16349a8d428de2ca71494673bf41d38328"), ("1129cecc5dbf9d0b285977c1ff6de65b7e4ce8d165277e7db843e64ebe82e06e", "0fcbbaf392c7cedfee793fcc152eded0a6cab4113b70e0af7d2ff89bb2203494", "0cf0b4ba6cc6b2b824314159ccd648a50c6a5f089025ea6a5bab5d44813c292d", "14a8b44e97c329ab2a90bda9a3fd65e78fd4356ba9df58c753c8cc650e3e75f5"), ("16628f6124be72abbff274b81a3a108242a1d37414c33247f623be0a55637a0b", "0c842a86115f36e243ea3ec2ea14987f06d97595938a288f799a52aee2d7870c", "250085d7486003cd9f322cd9a4039ab7b91a409e7a296911fce18e3419203bd3", "07ffe9f9434ac262efaaee2cbdc6e0e51401345d13ea77b8e6cd92fd69750678"), ("160ede86cefcb5349a502d5ffdaf1002687f913bfc16675bef24b56573fff1ab", "1189cd8778cddfa166fb677c25c51aee5e81dbc54db5d2e9223281b5f4d4f7db", "2c4a514d7a682681d003085d8e5044a332c65f00e5f93e9b2ad49959c2ea8ea7", "180e444778a90da2ccc25c5ea06dba7636aa05bfaa6613b4e8cfb8b1d1eed8ee"), ("19e879594447e0095db8e1b3dc48cdbc636c0d89c730f22420d1579bd060a847", "129ddc9fe72868d23b438638e8999be66acd506dfc4f0a336f29472208fb0444", "2f21386315ea11f5229ceec75e811e7e1214cc1416f5ad48112db96cdbb26ea3", "2af162072ec04c9ad56b98d04572053f20ce69f25cf6c0cd00970d985f2845ab"), ("2b3ec35814840e82b6cf288952edcfee8067e19e57e1e66f6d404cf3c1e9601c", "0a3266f7ea1eaa470d1c88e065e789e0d24347831b14f6b3b4cf87416f861bb8", "08ff4287e809a72426d3df0661c08dadf71e42846709af6f0585da68019730a4", "00f3f8fcfe903a08c4dd49c63ddceced9efd3bb5a66140225709ac1f93b00a28"), ("2a62befce7056e9955e59ac38b58ec886be905d4248272f48d1a80e892d035e1", "25d4321d2deda9162edd717dedb4aa476d5e8f51dd464f0c7c0811d6280162f0", "11d8fabad43be6ba2723f7701caa03b2f838b57461e65b8dc9a8e9d7da2650f8", "18b1ce0f1122b0ed6b1bf8da57adbba5a0305ad63b31fac8eaf4f8b1557ee59a"), ("203cc3c0af74096a9d49ae3cef53eb7cb3896035f725a1f381dbfa83988b5528", "01d0427908f12c67c94a8e81ce17f10dee4acda08db7b01a81b96a969ec38ec7", "2296bc4dfec5e5554a975956ac9738f2487cd97f74ddf8aba1351456f08e1ce5", "277f418cce5874832e719dbc22b94f9057566f0ede1a19b6058b7e39d725bbbb"), ("2b742d4cfc9612d2740604106b6fef6700589cdc6dc7f0e69eb6f5d15181cd05", "114ff098b5e77ec5524bd22307dfd0cc1571cebbc90606d656b6b726c8d5383d", "04439ddef77fdda4bbf7fa6bfb374fd0ce8d9232f80a49603f92e076625efbaa", "0fece2be798920bf409adb8e2159e045f29e4baaee1e810616599388b616998f"), ("257ed93299623a64ad66e96b9d570b9a6d18a42ad26cb58bac7f1b3d33833c5b", "114fb8caf46360c7aa3cd069f510d3c53034e7498c742ed5a07b2a595c912572", "017c1ec2b2e2d068d6cdc52185702a23f9c3cdf1e3282e6024e0b8357f88abac", "229cedd4a67ee89e6eb9b3fa0bb499f6ccec43a6eedf4a1a8fbe11a0e9607283"), ("25c632e134332663dbad3ac4c371593a9f406a17aba93b885257bec8c047d6a4", "30265f22e8c63cff7c89966469eacb11c57c31b1abc3546cdb83cbe2d4d21baa", "041a48d452c41b845f5053385fa9ea55999798fe66571589d76fb6f0445a991b", "17eb431aea716bdc32bc37514b37a4cef7e0d5ec47a3cdd8e58928983370b262"), ("06c470cbff93ed58810d709d29bf3ece44afc8303d92535e54938e3380c03924", "2a9f1dac3bcf333ea9b885c53163efa56b20a7bcb56827d0f8222b606a0aa58b", "010171ada4d7baf3e757e21004b885d43982b5339de2d1b173cc9d0881594543", "036cd7e06ee5fdd5e179e9f59df063401869708dc083d1c4d6c49f0cdc4a2665"), ("2815195935c80b48a4163c90f8b00c2fddb699dba6b47daf967e49df1b535127", "0843770693f039c3955dd53548ed99183884bd1c28e79dc93e96211db53e03ec", "2bf335c16bf5938e91afc8b17ec1d36dbac37afa0de93e61e0425d7f2b877e45", "271bd1932895b0a7b5f58cfe113c91bdb26ec5ab8e8af5eb00af3c90c970c814"), ("0b1548597bd04847a8271e04d2fa6e2ecb8477200f27c3392803fcfb2288f77d", "255c0652ce8227ce2e4b84f9a8d77665499f2491efbfe868ece955c5c788fa81", "2408a727eaf5dfaa20f50649926bd51ba5fc72d555ba7fa33c7421cbd5e2c8ce", "23e934def52b164cc2b1202b51971b75bc77a9fc420a10038d7961c8ed13edb6"), ("2f50e49755483fc43bfb97150b2f1983562e83622c2cfe7d578109401b16951b", "21bd412046b1dce5f7441ea6881b2a5d33339d9e2354ad21d7002c4dfd07d027", "263d5b194a8b84498e3c587dd0c77a650356aa3234574e3fc2b3193777529426", "1808a20706a024485903620015c4e7bd3262f30a32c35298fe1e8389f584f149"), ("08541bcdbf2f75ea6342fe631f65ab06ff2086d3640f87cfe8b680f8c939d9d2", "0e6e76e10d54cd1bf23a2620212106a1cb1fa93d23ba4c5ee38c2d7b3fd62880", "2b2b7ac5eea6ac89ebe6b8f189b140fb45dcbd9b576a1ac5879e4d092b8583c1", "11e4d8f1a469c782114b4f4e498086651c1c4cb3b679605013c728c33cf26ae1"), ("19133e81cdd9dffee27a1fe129ef37d132c076dfca892d2f23d402cc28b2bd8b", "2f86f3b3070ba0b2dd415820538c6d13caa45cba72f7d62d606cea2665a88f29", "0be22009a6fd3dcf1ff2380d021746c154f8f5adae692a05c319aecd988befe2", "18fcf99ea1f4540da0f360bfadb89851d7d0f131c23a92374a4c7216da85ef09"), ("25ca7a83374cb719c35e0f329e071015dced4f6439a43528957c07478fb13e63", "24632771d4bbd61f2567a7bb3f849b0d2b042d66dc8769e7454f63e9aa4aa166", "23ffc14da5aafe0be1c23bc54fbbd6d8b76b42319f24ca5bdc3782cf54ce0637", "1ac2b4a798874bde37e15503acd9a8203bf2a16f076738f705948c541b989fbc"), ("18bce8f9751d01bfa0f26c11345577c7332c566d2b8346004258f72b310aef6e", "2ad95e1e5988fc29aafb01d26c89d10f4aadb012b2c59d4281421127be883669", "293e4c034c44e20e7889eb985eed0bf74e127ed85b006b976ac8c95b2c88cd0a", "0c016584f008cca09b996dae35a62c537218d8dfe08dfb0eba19ccdf7d02af10"), ("02b7d65d695fe1e09678be4a0ded3391e655eab9de68dd8fed4dd03e64bd7da2", "2fd0d7c3988ab627eb9f1538d8ff00e2210cb82dc71707b566f68f0a29e43402", "1b2ab942826cb861ecdcc7cab0c91581ad4878b3c1740211b32f3d1c75cdf65c", "0905a675ce5f946852f8e8d94267f14438e961ce877c91baa5428e292193b836"), ("09c7a04630085fa9e387b238c834b4eb78991d151bc28362672ad2f5c7d23ced", "09d445b394d0a0382d240fcb40347f6d22330ebff6370c24ac6df8c43bc64e8c", "0c8659bdac50e98e67c67b7e27597bbb0d6cae08353b1f65a296393fb5eb281a", "1f2ffb31331010abdb8bf06914147e6ba6dffdfca74c7818c82409d756657109"), ("2185302901b02917349162ea480fd593a2f39551043d7690086b23bf273505c1", "08f71c312986354dfd900ea730fc8107843313874d5fcd1f870c95251aa6be2e", "0ab0f49a1f2d7a12ac25691f85c41665b6b7bf21015d63ed5aa52ba0ff184006", "21041ac0b6cfa3c764151e2968e9f648e2fef6cdf88885f4a43f34430e6091d0"), ("0ea52241ef4c299397f2c148a90668dc3e89c0c9008f9b4663c1e6cefd59ac64", "1caae973e3369b8db53c57161c0620f2267c3e51952ff97a47fc81cfd6de6d9d", "2105e8a23db2ef241b05358e7f3a9f13bad9d7567fdca4d8c866fa7d48c499a7", "2d2749cc192c9555ca33eb817e4abd903b77fda131f12d97faaeb610bb2355f7"), ("123aa2af89acbaee972bc7db644cbbe572d8becd7e2838a0508f9fe48460c347", "2675efb89759484c47b6b8e80166872fff458e456c4dcafef0034aab7241bc72", "24620f7bb9c9afd91049be4cb7f19f922e1391a6fe0cfcc1f35f1d5409174bef", "24f374022a3d3fd46cb658d1ff9543e19d3701dd3ef6890c0a1d0c0c698fc5f8"), ("13db4d10a69888fd4fc3755cc8982121468538b9a852d0db64bc19497dcfc305", "2c92f7aec7afb87e6d7480745e354bbe1c7d6711e0d58bde7d96fd04bf83f28b", "0a88190da816ea13230626b94bbf167a83b5d1019a938889ccf626adcb18c7f6", "0da1d73b5742f499706c07932b34c7949b23ef81bb136d6d5e4ae1c3873b3cdc"), ("169d5acd07de3626956a4582d32d2f2c15186b23308a4f5b8a22817a338e15ab", "1b37cdcdddcd6dfd895b77726aa160eaf371d54638d097721f7ec5553bb93970", "2b4e1981e9027afcec12c82e67848caf6b08aa208d5d3f81fd297a50dca7dac1", "27a492d90f04fa475939adadd708d10ab3d4a1a1367ac1bb20c0b54339019155"), ("2220933ef01f840ff91e1bc287db54917798af3bac9bbafc7ee4c9c5f8aa56cb", "2aef24bd746babc975128b701e772f558268af91cb35667aef85137df5e580fb", "05a0ddf918c47359bf95d18264247a0369c96c0cb08d89ec1ea690e615082475", "28680a6c4144a58f40bb7633432fa9764b6b4584b7e4d84181ad860eda6b7890"), ("1c1bb26ffdc6f20a02eed0ce5dca9025781b6212bdf97c24fcb916c324747b56", "27a82d7140a7cc928c8e4b147e274acb3527ae4919220e08f6eea9505f10d8ac", "14695e48e56d6f620e00952ca3aa1293e83d9a28997668d77fa6081d3f0226f8", "17419f9b40551485fba888701a1e92836d9a112252ac355265ae92b9a0ddf2a0"), ("1e10dba9a3b7b9059d00ca9c71b2e18c4095bf240dffd414c4ef14be3fcd802f", "10e428d4f33389f090e9613fda6c5159e034058b47a59eade9560d784e7f8395", "262c8463b0c35e4a27a8991af4d989e9f9259cd2f47a45e6f09f31a13d45d4e3", "1058838c51dc47a8bd9a4ef0dc22e035a20461e092ad13e883c639cb3b829d80"), ("1e2633c3a850c7a2daa54dc42b19a0928ddf25dae8aef4a36cd7cafdd0973bc1", "07b582373dc0566d8d3f66259f77bf5c8c67fdfa0c13947d15e119e09ed7a525", "1df15cc1020bcd5471ce790cee31f9caf16c69985b9031fd4c88959a4c4677d6", "24f576233eb908e044754d406b8c403e1a04b7ad21a8afc7de749ff9c5b887b0"), ("1649cec9fdab8ecb4a2870d209812b99b0267819113ffa476d14f7cfe015ea4d", "0870cdb4ce199bbe2897c69773f6db7c341907073c63089c7e1f15c0a80fcc77", "1b21a5dd18f604906dfb304050f525f46b750d8ca8ad60967202f8e18016bc67", "13db9c601de609263d5025f3de56c64de8a3bcff30bd854d0ec64cb013a5515f"), ("28903c66ddf91ec54207b4266cb7ed677b8fd8b7bdeb0fd0589a3df006d5d9ea", "29fa61918c28296ac10b4f8445c1b61730efc57a0cce478bdffb5a6dd9abc814", "11190025d1af12575f7a2d3ea4c3c55f25796656f81d7e761679932985de5fb1", "209985a2a941ca3facbaa39ebbe60101be8afbf07ab574dd20a190bfcf0c3e6e"), ("2df4e5c19ec23c4dde333108a64ef243a093d0eff5bb85e7135c1e5a82fa7c96", "0d04445cad2206a8d8825bed75f6486f850dbe7b79e7ab342c12790544228356", "08171e2dba18e0fa75387a4a3a20acadc412d45cd14afa89fb6b266d429e9f03", "255487522daa63c18259dd485c36ef4f7d92751a118c0507099366503336d790"), ("14fb1789cd0fb75ab0151bb58b23383d6c62211322216a6e2644f626812bb002", "0f04c1c844900a5aef73067c8f1a12e9ffd527bdf0188dd4467d02c029910f7e", "2fca86279d01c9a5b4203d0d7dbbe82c069ffff6cf856effed696cc2ab7871a8", "1164881cf4cacaddda3a7e171a57ad25d1e202b7525d58a0b6f6b7129d227e21"), ("1ea2e0b6222b6d299e241c90acaae21e8d836c627f97533ea7faab08bae9b527", "29fe92f38bea937a4c678e9f653175bff32d456476a0db3d13b4a9d7f8852f95", "28cd6b161bb439916ee8973462b428b87c409ee5172ba49516684bdff1f7d01a", "02c7cc229a4e369d585753ff5d4ebd859de5200b66732a3967cdd1b62b92175f"), ("2a46bec86eb1576e2ec50b7837fe46c45fcff62383364c2b93e7a19a32ed6bb1", "0e681999557114ad1b185fda7d3cb2c54082a7abcf98ae613e05ae5fdf945b0d", "20b76cc0e422a1aff38ab83f98c98ff08871ee040d7f8fe0262b986e9b0be74d", "1d87fede67b7eed8b82e4be885f842b9d48ba7d512a2cf1cb889d1968d0e92bf"), ("29d7c4b85760d7b1601022e32cfd2e99521a8799718c015cb7a5c5e823e0bd51", "1369bac9e9cc9fe92a27f29f27ee023a5ce020683362de67ba60376cfd10c481", "1fe9209bbcd09c549dce518ee5553886f82d8abad3525a58d0cc57e1f5976ac1", "28efdf359c17e76fb91d66eb62022c5e2a82dcc2144b27e71530e8b60c818503"), ("1521bd042f30329414dc5b620a366896ef976ed697a07f9e604a9652a88ec95d", "04103c79c95c612ff92ecb3c9102b8af7623eff0f86323756648bc18aa77273b", "153da1280ab8a502fa8cb0702c4ad0bb05c07ccebe4599b83e0b8a25580725e6", "0840d9a20586e12861258a90ce5ecf563cbd97a2cf9903bf1710ee001f502ec4"), ("012f58779b639d21b216884937faa1c35fc67188d53e194af52eb82e65873248", "2c15cfad3d50489d0dcdb414fc83579583666b546d3e92352094b905868f3a6e", "2f6fb057de1dadcba90844be6a532e9740b9d5fd0d7c126f32f921e93880a026", "1ee26b9606b1c2a93de02fccb2f5b16dc2358529bbc8db53653f142e0cdf39db"), ("22097f706a51f0e09712102664ef7fc0bf840c2033782ccdb9c0c1c0276d4ce1", "08a5bf03b3f7e12490a0e48c61322ce2163cc3eb2f6d24b88335794366eb3c6e", "13fc112a418ac98fbb4f9ffe5b89ddddddc055d3878dbd69814a9760d314e636", "169a9f6030fc946533cf2fdcc2b8399b6298cbbcb120e59eac9b2aba3f7f38e0"), ("296829d2f75d3404223826077d3124ee6c395bb9956032837787adc3728da67e", "238677bd646f8128e5b52735a69bf17b2bd0dcd3153273560f41116ec1241e7e", "1ed4534952fc387ff5adbc86d68b43f8dffc79683204d11d1b3233fed32d9a55", "0faed3ad9ae33dccabb4b6dcd93914a43167df717cc47d7ac2c81e0bb66579d0"), ("1a442471252cd962d94a9f6790ffdf238199630e0c03284cbfabb766df6f0cac", "0ec4ab7303cf95c05bc3d0760ff382db4989d21f15ee829563d0e5de0b7c0a1d", "1423489964ffd8acf3d6bc4e9e2e3c519b561dfa884e0ef653f727f11ea801d2", "0a933369ad927f615f1e6e2dcd741345808acef4c338cb9d2c6a15c743286f45"), ("0fe0f03532396ecd94a78842a14c71657afffc6881f64bb83153b53d72aa5331", "15689380ca72a4b0bb8040e8c23e6a557f79e950ef999f5eb1543019ed21534e", "1715a1c61ad0b063ea20da860950c3223ada58628eba9e35a700330de3ce5f87", "0ea4043ac1cc48960ace924027614d5ea001941d78ec831c089099f01adb23d0"), ("2ce308e3b6545522e5fb4bd0b396cd33e2f45719516b11043501d7ad6a83143a", "2c6f3c8603a05dfd2de8b79eb6287fb92e7d0528ccf36d9e0f2bbb4f42c6cdcf", "1c49c904b8b41e5f5b2be906115c26e59f4fb4d98b02e927adc9822508dcfd63", "0297664f7cf073ccff70801cdc15f8474913dc989dfdb84564f4c0643ea98337"), ("1077553b2313c707426f6e627e95cd8a0c4815238018e3ef25ba507e2656d4f3", "0f1eb610406463406fdf0ab319ffd2969c65c9f832148b321a263e30373cc3ce", "2121f7aba2f07418f6e6db1ff72ac7aa1283c38064cf42566b6eb612e5662591", "151a32451f07af26b427bd5f4cfffb7c30a6e8dc2bd6e7791636ea24490090f4"), ("062f2c06389c38d9612166edb5be2275c81e77ec219fe5cbaa321b0b6d8d61e4", "0469c53c677fa844d648bd95a4d88eaab08c930f5d0bd18f4dd6b4354c67b735", "0a3f418dada0ec4ba91a7a05902298fe6dd6620a0c5413bba9531abaa9012c8b", "1fe29139eb884e27c2bc39b961ddc6ec088a706b5f2654b0eb93fdb8f3fac402"), ("172d95934a9bb2eeaed40b17080c2c6a6c66ad07262d94b75d7267c890ce91d4", "0bbf10e94ab31899831bb26274e74c0e1e4baefb58bda6d76d970b14d5c47cea", "16b9391f40cf1de5b8154062a4c1330db658b3cb2f7e13695454fad0f4ec6e0b", "2432f6b95d23ddf34b875e635f2996d1ff832987c23365403c7015e2262d3724"), ("051f84c54eae5d2fb954d4ffdd4de82f9836534dd69c551637f2b8692c2a0a88", "2777265295d7dbf48a03996a1e665e71349cc7f8c059a8321b8ff960380e5f95", "04d25b1f45905454866f18842bb4e0d14ab42d2e05930534633d682d9bea86e2", "2949065aef23507d240f745f3ebdbb6e63398c706a0e0c0d3cf5dacfab8bf1c0"), ("25117a3172f3eda5bc82f3b921e8be7166816e6336e7f41529f74b7cdc755bba", "199cd8e82d8c7c0d8f4ea83ba0431371f147c52bd1a86170ece7fe3ae6188035", "154fe3e661cf78fa32d1657be1e2f42758c1a09cfa382d88c0c015b4a31d46ed", "254f88f7e9203875765c045cfd536ef6b8e9a9ed924dd2ccfe6e799aea3f3e13"), ("18bf8470e977f8b82d93c030bd6b500225d77fa19d7bfebdfbf47343aa062788", "235856f71580fad615290d99845943d7ea8c95f7569b8e670e166c4a0c7e4fb5", "05f4b613e4ec1e90538115733178b72059ff3cd76d81ad00bd0e64c4a1e5299d", "2699511c7d72e1e00bb5876f776009c66d94c2975b88a06b831aa14c1e0efaf8"), ("0010c33326e7ef25d69798938dbb8002d115a9109863d62d0a12b7ee552b254d", "051e6caa9aa1281238ebc61ccd6512f3d01e82381a388e9a20d90b56368094a8", "2d090cf4c21921ce05f057a8366a1da5382a1605e39cd566f9e691abb2bf3f0c", "27201fa2133233fe911c6bef579f49ec3851187edd97e16f2aec95ddbf0ecd2c"), ("045f581db0662ca7b1973f9e7ac39f6d9538d39707a9e8a3eb65dd92fc314ef4", "28baddb2238820455363c059b9220338e6a107e33716019c6f3c159212efeddc", "000d929b6671755d7bcf5c8a2dc5048cf227e7f7beb4392223380cf6eb108638", "2c1b5cd171a45011290afb02d0577d3441868192e4a7cb9d18d83751d47016b1"), ("0e70fb0c3f8ec69bfc07e62b682df0019ca8b25a5936f842892b1e973fd5db70", "26b9b0c59fbde973266998e0dd88fe42d37b011edef447dce03b010c19100e51", "2ec76d0067d8b95dcf5be33ae8c49e8b01f11d9c44c242b6e65eb6a863fbf7e3", "233f8f1a44ea885145fb9299328fd970bfcc854f3df76f2d3a61e555e0f86e7e"), ("18f983fa589fc88f1bc7529022222f63a4f4aa055232791781c44d493dd0ba0f", "099aea13876356fc62b780531a49b12868419f76a5580e454f3de0f8b3d3428b", "26a61b12c8178a928edf10ba956949967fbaeda6fb8dc0b735b17747dafa0b0f", "26422143e947883b106f2138100b4bfb402273e81b37db97dc623937cc5d59e7"), ("15c05a904ace52fab548589fd8322f42528ec3019e25cc5407f55eb1502f7d20", "016f665fb44ef1186a1a5c8c43e3ada99dd1eaa1c1e3f16ba64381b4f826772c", "1562463579c65b3bc42e1a146a263ff2e368808a6f2000344d5d1e0c55007f42", "219e5eeb9a60c524b2b834441e39e8989cc86d71dd914c0ef4ca1a4de28f2859"), ("28c6b5567fcda2ad1330c4992dc089555da610e15f125cba82096179e2ccd25d", "13668b6e0992fe47033af84a9c2c10b3f8854999ddc29d8feb69d94fc41cc548", "1956adb484d0dddd4e6c19c597d73c5bd66b4ef35fec9c9fe82524df5548b43e", "25ebccc495a291ffd9afacef2a87b1298620f1dfd602d599d6bdaf4c50f5cc19"), ("2b8398756984052b07eaedff645d75d59f48c04dd0e56ef7bcf1472be48289e0", "11eb0fe9158196ca4f6a9ad63116b8a57ac2130d3fb4ea48d22d45c0e362f64f", "1cebae465bbe0d1c6d85c1941d3d87099fe501cacd0f01a195dc278f8d23f740", "21e35bf1bc8edcd708a2fa3d624cf4cfa97d1126737e173f0a7f7784a2354e15"), ("26010bd4c7e1cae9ce072edaf6698c0ac5b7d56224e7ee1ef7f07db984281490", "0edb79aa59fd680b0b4333b6d86a59c84c4c1a9d1f192ff1c6b880d50d7764f2", "06620ebe8bd09d3af0636d63c01ca3ca12a737ed0b6e2d44f2ff18db86e2ade4", "0160f072f555e0143e3594a7bed61d0e98a9e57060a0337918c739b14b76f02f"), ("1ca1a5640e350692da1f8b1480bb9de1dae8d06f264725d72f2ef6445440b66d", "2b4b6c49b030130fc0758bd4a0083a834a16c0f22a22342bd3892683ec291e1b", "265eaea86c72e73b10f93b19737d36104bedde7ecf1ebbb39e49188122222109", "01917801aabce3983d94747d23f8ed7dc715b58291a8185eb1db5d0dcafabca8"), ("27767c1bf54690ac8e036b88fbff8a5e3e84935ba7fb50f01815c66d71831c03", "2ac43f0a098ac6a5dfe0723b1e54416039388e9cd9fe24380ebe982195454e74", "111ba6d03eba75e68302cdcb1830f9a38a4c5cae1c5f2ee8142a631ade4c918b", "0db30245dc36883d8493a13ac81adfcecc8d770eef9305c57c07bdf0dc64adb9"), ("264d6ef25dd93e88f15ca1a98b49a5f555cf9c193982a68d7c1478698ec5dc26", "2459b1fbc56f09c7b19eee5b8e61c216d9f147d51be90154193c6875a1295619", "012d8e31290da3ef2f3602fa7a3bf647fbc49885906e15d439238ac65ace7e02", "048c2fc936c9308d4e5adffab9b3ad978d9539e5a9d7fad1e5dc556a4e1d587c"), ("16f8c3e7ac5f7ba211f43705ad57fe983b281425c9dd145fbbf6126f19238b9e", "241583e31b5fa2cd2775773c2ba15e947d84279c5fa87dacfe9759c1cb3c46a3", "1394005b6dd72eddd77f8f64809b7353d5aed4f5e7675d7e4dd3e5336a21efc0", "0e4da1bfa86e675a88af6c68380e33adc59aeb4bb74f16f0b4102f1f6badb171"), ("1da36e13ca7da497b89f754e6d5c827f656fdda9dbcdea5cbc0845e721961739", "02274b9bd10d00716b4611350ae2d1dcf44ba89922ce62b423761d5ac03c005c", "0816c7f897b6c35a54e6032957ab7d9114a722d6162a350a5beeedb21e98e201", "2c2d09fd9b035549a4741d257805d4c943617abd7ee5ecd08af96d698c5160ba"), ("169ebdb0126924ed162eb75ae5e2bd48a61e6cfe64aeb118dc8fcdbc365386bb", "08a8117abfbb0638fc337485eea8fda0ea2d317c697fbcd0d046512caa40ca7e", "044c4013d3785a6d6ebf79372318ee70578e3ae02d915b8a964763aed79351e6", "28c471f7f4b96b4bf2ebe466ca000ad2e73f21f2992f3df4a35be96f8f09206f"), ("0babb453dd37183f538475cd877b9779b14d4ac94db45413a8c98d578ca1ba51", "2bd6e7236d0529c66aa2221f2d4c837d1945b867bbf23d6cea6e7d20c0cce2e0", "18d94a8024ab23a259a4256cb2e0ea1d8cd19777ee59e3b1b2cd63845f1476c8", "1af26b1e408ffc32e8986cb3ffdf0065289fc64dc65bd3c444c253048d248c99"), ("000c0991e628d83dacd6a8d5747752552a2f6bd53accb13fa30f4c5e4b4874e9", "0dc6a1ccdc036f8d271507b37c976c026dfe758217e7adb1997feca48002cacd", "2b6ab56fb82a043d371da137ecbaec114a56d146a46ec94c2ddece664116d69b", "1119bbbe68d6c5c8a85338111fda0d294d83e2279ecaf48871a202ed36856201"), ("28427da81e2bed223a282e1e11f70e7ad645fc47658ddfaac2458caa8dbc180d", "25d433ed0d150ce481decc5c8f3ce50b2758adc8f5f5048a3623c8cdb8e8a009", "18f627720e50fbc3a1403387a5164df3ec1d695851a7ac7ac215749d879daf75", "09803b1e5d489cd66cfd0504070c5c98b89fe2de2ae08ac633646f0bb6add33e"), ("0196e943b40b62354e7e21ab637e0d53f024fc98e8967f694cb83c3566ebf43f", "28f6362e4379840dd4b907aef2913a70b6ec62ccee8f41deae11a65a9386c38a", "1b03d4493c58af6fd962b1cd46ed05aa3d0f09e5e055f97fd63ecd0cbc7fb937", "202bb4c13ebfdbfadc6ca1f79fd428b8f5d6d1e5faeee5d917ccd35951e96f89"), ("27583bfdd1fd6ff7ab343ed6cd415298f3daf4e50f35f1ce681dee1d296213f4", "0eb972039fb5716b998bde84e915acd2267aab078a8ba2142fc5bff747747c19", "16e7de172befb4710308fa8c0f2bb605510e6d9e6f2bce3b2e423a5a9cdf4a91", "1e6e980a2fb01ee2cc390b7cee1fba9e37169e6dc92391f03cf32f27e228948a"), ("27d3dbf5b95feef34b1b6bac492cf62a58633940eb176c5d89831855bd2f6901", "228b9d6e35647d944bbb9b21b516e1e167f5a1a5128a66b761227d7ee3ea268d", "043f4dbf2c4987c463b9d0596820fbabb1c2c999996f8f85f52c81d36d40c54c", "18c13e9abb5c2576ccd97076e86b38f31b7d109cd8f9511550e9324cc4fbad7a"), ("2f8409e54f99339bbba59453c6ebd71cf4287e13bb84e19f2316a3d86534b127", "08da49b69d9e351aa39c5cfc7c2b3fb4af8c763ad9fc806a3142ebab54ae18c2", "092867403f0c5dab1b0959a17ab2e75bfb3e279606ac78c492307ce6b70970a4", "077e5afe064b988e6607da5a3b2b062a676bb0c645ec71210e2a91975ee78f92"), ("0f2b484215dedc843dbefdd7f781c8e142c0e74970fe82803301be93ea4e841c", "07e5279d331cf2ae995107e7c0aeee089fcb7238fb9b8e8aeea74749da373995", "013694e558d82e77dc21e63dba14b717d74b7d9e7ebd8b897cebed3d2e83fd3c", "2b76ce13b16e0dc5519a5dea8b7471c6cf22bbb1408783fb0a2deed5ea21a1cf"), ("2082cfe46f120e1958ee249039e474b2605348d6ee54d454d4ba7b045076eaad", "2ff2236bde3d7246a49b1ca0026b27d9776ba0046eeae6d76b1153ef1ece1512", "1caa621eb95d4854acfca426345855695feb5ff1a689395ffa5cc6a1a30875d5", "00f2b70bf10a22c95d8e8ff5441715881acb4317c1368bbaf4821bb850454389"), ("055d2bf7b057e95c1d46fce59ad4c743528b7c80e501cfab6a6c27d7209ca534", "29ee56e0c0c337ea0237c49a88c0e6ab2719efea0fe16ae698d1b087474980ab", "17d166bab9c2f680a4d05adf2a6b51144873b09fdac883c9a505b923e785f4ea", "244f4a898ffad885b73d4e0216b5bcdc50883532a0c9e28779e39dde4b49903f"), ("145b90c033178c58990ab6083ad06b901872117e275cf3574b800c16f28f13ad", "0f6fe7b8b600773ff0333eccffe32e4474d8f798c4bb57b4e8b6a2542e76d9d6", "009fa1afc092490665a45f0968bd54509a04dd3e1db53a1f189327ea17bcb4ff", "03d3053afdde19880d980aea01a318921daabbd9d013ab6718578dbb9be70752"), ("0b789d61c73af9aebda9d9d5786620259da78f31161be6e4762cd16f2c497de1", "03ce4b4fd4b09cda009c91ecb74aa80e8e21503cba8de593711460b2787d3608", "249870ed3341d1a83cfc7cdee8255d47a623cf2ff3238dc5e72b3c77c3eafed0", "1d9ac1efab40c5b7c435ad83578b8067fb8c3a142518d18339263ddb3b1ec1d7"), ("16abaed9a060a12c5c44015c75b103168bc85a72f442828cae8d2d955e5b4665", "032f51702c0cb8baef2269a1006b194d6fb5821131ee9d8beac534163a532bb2", "22dfacfb642744b7d8454c21ea3a4218d64149112bcb3952ae160562a3d4c001", "1a170982fe683e7d7c912c1739411056842863b4ca811d1d0ddcf724375690bd"), ("24aa2605e0c42287e140a893fc8e2a38ab493711a59ccead5ba318e454667496", "215f483291ebbd10b154ee51f42949b666612fa79920b078e1ebfefb631422f9", "2aabbe760e585ab1ab5d88b831b586236151e2263d1425f657f6258870783665", "0e9159bdba9e8a9693ec5c4e5021db4a2f3e9886dde142b45c6dac86d2101ed5"), ("0130450de0df506a98080a2d46fac58758c3bc68646cd34112f9608328269e53", "031d82a0b9b1acaba65abfab068acfd81d5486fc3e013c7aa667f35ef7c8aa05", "2138defd349a9a9ac1ee08ccf2008b40bb220baab9e5b5be551cd26df2ebd1c3", "29e01fa5fae48fa32bc02c9bdb8791d9aeeaa391c1cd718991717c44ccc580b7"), ("2b73b56a046577b11a21fa8bc6865078c90261aa2cd7a7c292cf5451b8f5d264", "1674692e84aa3bdd5b06d7c5f7a250d9f32b7752bd21c742e178e438b737e0e1", "23c32a8116fb82666680695646bd567974e7da91afbcf0bed73d64ef9d0ec3dd", "06bcdde08227e9e479a28ebefb309d4b328e7b8f9d25bb5e50a9b772933ee642"), ("24d2f732c00a906feca5a2302d5a27dd33788f37f75dac10f358f2ac7b73afea", "2801c6ee1a7577f2ede0a015b2589fa33364843ae9da901770dd75fd1c21861e", "095a9a28bb9f37b1b1b1a897efa0187436b11b74682305973e222d4c329b6fcb", "026066e498a8973b7354e981d4a05c5d39382fd9169970c3c44855e6a9c8e6a9"), ("0364a0982a1373f43c25b3738f08abf14001765a5fdf9c703a5527e45622acac", "226577a829ab6ef8bf3f3b999a3956d13ea479751d73824b5a759a7a04c14b2d", "0a5feebb8d21185cc92bcd93cde217af343a0a2e93b8d364193d34f2946df639", "0cc45d3220507d835cfdc3edc0bc4ae06718ba87de82c07dea732a671a78dc00"), ("054bc2612d0c69efe4716328b598d2bfbd5bb1ac21d70c5679813516eef04b6e", "1076f0856d404763210b6a423cf28ec42ae9467cc0dca490007bbf21535f154a", "1ee963d3c2837b87b8f39efe18de39af545694bc73d37ad6bf6180a9d3b3d71d", "2af776e7d0916dff8c2ce3d2b2c066ef6ae39d332f31955a8b854f4efc47b5e5"), ("05a84d4cdccc9fab5e9d862db799a3e1fe92607d0ed2cb2c9cdcee6bf3575022", "2b30ed07dbe331adeb45037c1143bb1bc375ca9f6c4cae629d097931cc831e25", "1e6a008d03b1dc8f09630d2d603ce7f8ed1826e6ac3e3d496ff23effc086a6bb", "2110a3f3900ccd837ffb8f3a6266c19d853e97c09deebace726410306e297f76"), ("11e0602a30bd0c822ef8e9c51fd384697d0d37eda14f8ead26916fb0580422de", "15b54f99a85e7200abe31ffd06cfef81d6111022b4097b0ebb445813ad4c5d73", "1b8630a1474329f6569e4470909bec56849158c9b22a15fdd0383a80767844dc", "15fab8cfaed1f35e9e642946a6045a8d7c8cec3a5d60d5d4b90347049745bfca"), ("08cf92a3a317c9b9f821245154e807067a9b5e7931819eceb85ac0138cc36bbc", "0d5ca6cc7a219f8eac4b517f7a310814ab8fe743cfdd4d8b0cbc1b3280eb9d46", "0e80a17cde5fc913008c72d80f9d0966f63b871748866eeac858a2d921a18881", "1b37b8c80584bf97704f9d7d40ebb2416f326171a7d7e221b69493a5e7a93151"), ("1a7cba1aa82917dc6398b214ce7324f9658dec04582276fbb52afe9b8a04783f", "10b2c08ca960e6aa1be1b2bbeedd49f6561922309588c65fffe4faf3d0b67384", "2d8d76acd59193607c8c96ee8fa95cff32a88d8553dbde788699332befc110f3", "11c4f7d691e12db8cdc26f70d1f0152392dee69f3b6e847f082feb12b9303610"), ("0d3f763f109a273813288ee2dbe3d2d8c6de4f10fcfd7bd9e5995470d75da39a", "128b3168eda45188eb8c50502354849be54af1f7e2a89a0e0010c711471918d2", "0a9223f816bdeda86125066408ba757570878d841946ed2837aaba990c4b912d", "1ee9c6dd7be21586dec18724378e2889cba30703a65c5662a87cdea2d983e622"), ("0a6b2a9744e8ead14c95e16db2b1cb21539a17af09bd9ed0341eb298214534f1", "26522012886a268b467b2045fb6f85fb6b3741c4c724cf13d02bcaaed4c86599", "139af0d113a9e8a426b96734e1389f59c597e25ee85948c725fcb896293d899b", "14933c42eb205e9c7891c2dc8607f73441a86614c7ee5d82d381777c6ab49c19"), ("1d21685b669c8eaa99fe58224111ca835fba96e363645b46d88b86cf3dcee0c7", "1e47776462e7cbbbde855bf52444c3211200706be54b76393af89521b4769398", "1226d9ca86b83a1c382fc9415b2ec0a2c52da7f5dd12d886c32600073556e6fb", "16e150e6647234833f13cfea0fda501ad0bcb6777dca381e3b543c6836e14ec1"), ("20ea28be3a3538f1534d2af0634a4c73159cf004c087e217d8ed43e308b1942e", "02d0e3489cb3d8dd9e1b0c2dfb619a0e8eb46d1af7de7a74407fd2240623eb6c", "1d0037aa7b166bd6784b8b3716f1b1ab1bae50c4777d11b2e59ce108b4d57ef2", "197bda8a400b5b25e02aa05c5adcaeb3e6294f2268da73a1066fc0ea5de44263"), ("2711482b83ef1ba6cb90b3b12cecd09c7e8d5b34438c3cad90ee414c5457dbb5", "2da014397f311ae1e778e6f4946ad902b7a72e63bd2d9aca9f28bf6964afc902", "219a2914ef27956dc63ca5e6a6e4e48cab22c527de9dd767f7a2476bc05cb4e1", "009a47e244198767c327095dafea62c960d4f16d8431c79d04210c242757197d"), ("2560259e8d7649bb4e31f8602fb06191f5c7cd13dfb12b4e996d172b2839c997", "01e9a85770abef6d50b567c6b663f2be9e70fbfa3d6671fa6173bbcb1d4e6647", "2aabe4dc339790899527655338d8c9ff82142c7183f375d4ff39f80a5c4ee1d2", "2465b67716a842af7c0853f007cf739aaa79c2181760e7b2532b0a387a0195cb"), ("00724ca6a3e193be532feff9bd2fe5e7678efbbeb7c5f05c2f5df61217266f3e", "20f2b786302d18e7e20795a2d7353ecf5ad4086075433f09241e3a5a77bbce3d", "235986e3d324e77879fd940f941e881eb62337c6346cc25c529dd4e908f9ba3d", "1f44b4bfcd3dd9fa02e4d663f3dc54717e843025f34ff63e046869fde48be947"), ("1046ae54d0ce958356efdeba8ed88cf7a79da5bf034e5e8cb95e11fb7cf163d8", "2f576b900c757affcbc6664923927f08c5ba1d111ccb639c0cd0b7990f1f7682", "0f5552354378fcede5ca030efbc72deb45a78dec2ddd1ede70124bd6c2d58dae", "074d57bf72c4e47bd2ed4b5d0a78a5e9b83f4e407910155b9f096eeb6e8c4de6"), ("2d6e589dc5789b7bf0304ac65d88e5873d4b2269b9a3f8ccc293a88afe9bb42c", "0f4d72a2287ed677c187cbaf3c31a047aa45e1810cc48fe5bf24b5e7de29602f", "2a1f8894da6d14034bab7d6b70234ca486c85056ca17d19db59f23a8e04f5311", "2e6218876c6208ea878baef47eb7d1de76138df79d8b48605e65e42372811649"), ("10ab00603d19fa23381fa48133de47052da6d9eacca8f9fd0cf53abd7a65ea3a", "2c9b6236556bbccfdabb0d3f8807e49e2b688f8b8b6156eb5325e3ec93d4edfd", "23ef76046b2eea04db3d5fe1d4693b8d36ac4d5640f06a1846bdd3ae7a79fa85", "17b9fd83195fe1b9af4bd690dc33257dc7295f904628f54e5d1fe55a2128d32b"), ("006c35d867ad9bd228b8fedccd1ec83fe6661e36d7337066c688e87a5f2130e7", "229f3ff6b78c0bcf5a8bd67be38b761169c28eae672bee5fcd2d92b020bd35a5", "2228fc4e82dbfcc277360dfe59bd2048b0441b5ff723253d4539348f1a012e91", "0ec1f906a2622a482953dc51cc7f3904aed10f2a50589c52324ae6a2f662bb0c"), ("2b555f209f2bfe2afafe2278d4acfd583a6b758bbfd5dc6ddd9d7ca5c08be984", "156234b0004078273247a1d49ee79f067ea7b64a6ac05eb484922a818a62e36b", "28ae4b666550d675793291ceac373ebd7d5fa0cac9a3e317aef6162f27d00245", "253c7e6c0dfafcd909aca19292d3613e6484a9472a53d96ec3c8c1654040d0d6"), ("1ed86ceafe349dd8cb3ba9680419e30f475b8ad0aa1bf1552f1a05f19c51d00a", "1cb9b0b256ca41af7fae72c4af50934b5e484be556dbb1fc3fd610987ddcc103", "1e9bc8b65516535e885ed02ce05c8070518d8feee188961e464793cb62163051", "2d856ebd10c8f6b5adb3ab671995ee399136f2814aa4990caf31f6ef3c4d56e3"), ("26792c5ba8db36b6dcb9445cd077e8d208d0bede2d334d24e291dc6d02678006", "1db2cc1f1676ad615e48bc1475ae394d96fb937c10af2e4c5753bad7c9d6e404", "1608ef04cbd1832ab6474d97a45a806631e922d424efaa6781e6ed7d8b74f0cf", "16a2570bb6123dc29e43d5164cb89966bdc0c9c5950071d8a7e18cdb16927135"), ("1f1276e4d8efab61469138955ccbd593f50c4aa76992407b07dc5da1bc7fe252", "1ad8511db06aaa6eaa8aecdaedd906075ab824178442e09b993d139d03765d3c", "05e6aa23ad917ea7d153547630980faf9d60db100de24f5cad514576b69853ad", "1c0b5185ec99124c6d38209eacbdeee0d26d2d5106683cb36e5b1f1a5f79a25c"), ("02c3cc64418a193f76ab0fd6a4b0403351cdb603f8d9734a93030b3a1c2cb612", "01f32e84b0d2ada487cf3c8f54b5828b177faa1c3a2ab793ea42ae53d2e92a30", "0ccb6a46614e99d7f5632ec01500d29680b0bd97fb400d1cbb446f773103d430", "2dbe8a6e8659cb22d70eb163077a6c1d5851117165d174536c462dd53f1b5f37"), ("253e7115f7fb20acb4cedd9d51c955c54e0b2ba6d039d4f3325307d243219678", "1ff2f1e394aaeaf27bbbf3711fe2c7fec6075b502956cda98e4b061384a794ba", "28ed7f63cc9272ba9a57393e72e7cc644375455642bf8eb03ff8fb701dfbf41f", "2b023fb6dde20a7d7163cada1df7c371fe44ec5c59936aef8679b1a38b2bf40c"), ("102acb1cb3276dac14e2e60c13459949632dff121be7793f9145e6e084c369aa", "03a1047ccb33312c5da6bbbcc4091654043c516ec16ef25fc78e70cd9a998e00", "138307fbdae8f71ea2cf511965cd720e38f13bb978539a7e11ddf8708f0d2242", "049be17ec8240c6aaba4230170c44addc4ed453ba7fcd2d81680de69e1327920"), ("2fddee96c8280136e99ca249c65e3f776401fbfeb437cd0bffa28f0ea6ca3a0b", "0ae2140aa4947cb76ca1c701bd0db1e04cfe092901be04c618a74dd2334861fb", "2b0958434b6a249113af7777aff7cbe58d52a6930d7cbdce9fcc3f14fc064ee9", "0d558c56224e924068d52a227943305b7ddb85803168d9a098b955b149f84e50"), ("0f8a6ec9166820a42b49e3a054765739462591c85c0792aa439722d983c95a1e", "10782b1b6e9633cef7f2cef77e15c234e8f5a4a711ef9d746901e9f779749768", "1fae5426b9a3491b2b8c67fcb914c2425a5df56d9313ebe945e00e3650021a4f", "03c45cc3d0f2e40486a358b5bcee60f603548fb2f7aa39c490c442ea3bfe2332"), ("1300471783ab2aafc1898141d16fe8be2aca6e4a549bf7da6fb69265781e7c93", "1cc085e87cf8b73fd9403d478b885eb16fa86428c590edf1d52ac1e38f78fdc7", "1f877a7ec458c9da6b7829b5df40c2cf63b5f75981057860970165fbdb3ea388", "081f74f7b661d3a7b85331b989d2ea8153a6150d7b86639c3b05c70cfb2f908c"), ("2a86f788d49029314c66719261533742490cae2f438b7a1d5071f5bc0cb49293", "16c8e808c12624918eaa5a3ff6616109834267ab93e2d734ad644da58ef2cae0", "2ab959fdc1223ca53da793e334eff2f2ab2ba69df8ec2399b1aa6c9f71cf1101", "2ed6e1986ad0e9e583f23ee3101ecb0631f480ff155c092602313b33afb4275b"), ("00e98095ac45beeb9cf279a3958eed018d91a65da329e0f5389b10b5cba190c5", "0b151474e20a855c1fb1cf8b31233fd5d70554e00e26d27d98360bad2e9cdb0a", "1b0a1d15908f95dbc2e922b34b34e823a4859ddd304e6297690745ad42cb4ee5", "24fc2b06f28be65683eb22a2c10a9f8d05c6c953dd27f2c5c2f4660ebcdf9ecd"), ("08ec42183f510c3e2a9e944853416f77b0eada0dff2d946624b99890ea33213e", "2c0800536f8f26032ab251cb9107c943cc8276f2674e985682128089f57edf26", "210e85269d865572e1239658d8396166ff94f5fdaace4f7180f3fc725103a5b6", "157a9d2d6011aaa01c018ce088377bd4226915dac9dc8b85d919bfa678667f57"), ("1b25d950dcc732de89995f87ae5e3ae708ab35fd1d9623f1248dd54886c278ef", "295b4d4ac7297d5acf2f620aa695ee289e953efaa983e5b85ef76b5004f0cce1", "27c4a0bf039ba2074aac5039e8b6700797ce755f17b220a4f8e078f7e5181a8e", "2f33837f4ac84c5e826c197a5aae1e2ae782795876354f9ee22d2c44a7b2b2dd"), ("2a78c14ed4fa90a4eb169ca6f3881397642d034a201e25e5349f6afc8466c359", "16167c0fb3da3003164b68e0c48a878ef8657954f5f2d9149529eb76ad3cc162", "04c41125fc77cb72d783bfaf84178b5e003493365205b5306aa688c7d28538ae", "0398e223b2e4e7481285fa51d07100bf37df9252aa9e15fd461586d87726f336"), ("30492d68570ac56998e83dc0e8c5d85eaa2db10b5a2583c0292cc59061fd47aa", "20f86ced8e10adf1a47bbc370482c3d2913b3503a99d3e44b17a31f73455b0a7", "2cf1d3cfb7638bc6313f4e712a53735baf2c46845f8271357a366561941fd594", "12d1c685d27a15f01d0904d2da63a8043b66568dff7b0fcb7f6834ed350d5d35"), ("2f47ce1847ec9476e2b64676593893162d9dcc8b73e027e9186a4bf1172a1e5c", "229fc81bc01e8e470e87bdf7490f2f89677038bf3a87966c7f7f15ce7cb875df", "2e7910d59d56e5965472f8050a2a257aa2ab1c2e136cb282514c01e7f171fe34", "232d5a75bed5db05b09a4e21162d00a23fa49801a9befaf27ea7ff867f039ae6"), ("0650e821e9fbc0455653de06c58c107ff65872a8bb8142a51770d3f73bbd2b54", "16f1a43ecb9ea56786cf69eaa9c9cfce12277b9f33fec83943911740030198b0", "204f2c222380024987df9ae34774ba265cbd61b98539b33a0656728372a53a18", "1b7c1be4b4365220947e1933a65ef23e4db3e3444995f194bd5e18ff4c7a0fd2"), ("1c2326afb8f5c2c96bbe1bd8056daf61ca670ad4ee0f8a82b28d61699f3d3ca2", "2cd920885b20883d47ea4fa5689e685d9f914d5953902b84300f1b4d4d5748be", "26e02bf889172fedeefc1fc2911f49caf21d9be8c51adc7fd72e9e45f2aa90ff", "293d23adbba0150e92ce15ba996debba7742886cf0512a6d3188eb48e7278038"), ("27b6a41586b76621ddc0becf3ba91ed02189dd39103d7c25681b0c8e0dd0cfa0", "1afd119133d2811d46895a3b4381e410bf445060092a71baf0ad86a99b747ec2", "151ce6bfc101d476bc69c32affbdf3f385fd42efd8ea17ae982d61b5e4f92df1", "06557253593982bb5a6d01a1a4e8974f92f1d977ebd321cd1963ba115b76c546"), ("12fbf98d328c90ab0946512e2b6dac3ae0ea678436c2c40388993528c9f178a3", "26bedcc694fcb6af858e755c0d69f6983c2e2f5220b98ca37cd356a9ded5e80d", "03d945ed9b5d0f463961fc4c5355b626db073b0e8cba85cf15679c03a1880aaa", "0e1d14c3ce8903021181657bfb99ae38fd36b126d89c353f807216e3e5881939"), ("0acb81e6c60eaa1daf6db136d094ad7260701262be7df537cf8b946fb85d5686", "1629199a0e6505a436e6bc5c061045c922e4266d15fb79b0196090accf636376", "2c5a779b03d7fc6c039e676f6ba65701611bb25af118ab1aec51443c5574fc19", "1fb11740252bf3d94d3d2d1cd05103a2b9f09c5bafa08595bac5dfc9e66123eb"), ("16bb1a1aca134a6c82b68d5a5b116cc5b80454d4ed0cfeba35dd28a4a6af51e1", "155ee12227d868306fcee7910b7bda5c8c453595a52d227e8932847e5ed7b080", "2f7775419b6b951f555a95867da6627ce055e65846fa56ab6b0da96262a09e29", "21bc3c8512db6fec17c99e9d88157f0de60bf8f1f388f7a88c9ce32b0cb1b3a7"), ("0628850ef83747cfc9df60e341c43adc4169c139fd35d930c332d55435d9aec7", "188880a8c40cc2510a0e76cfc0f24705730347344b09b2ba6396832ef422b654", "1fd33fee807cd5faa7947851e57f080df41b1ef098c26ccee48ab2495b581aeb", "08293e7faba432a688a2356b0b5f48485100d8fc83212ff9529137660fb3bbe5"), ("2b0d50fbe89105b66e6b370f0ae2fd522258a41387601113d8d5408d4b8a56e3", "1cb7a2284aefb1fcf5dfca63af9db43ffe720de5856203200a8f7e5e0e2db62c", "0e3d55641fd6a0af615f64617b83908e1a4dd277ce923973e60ea050e48134e9", "1b3d1484db1608dac8fede741865137d3e128bbbbea0e1159861806ff94d64d1"), ("225ff7f7bd730f563312807c7946dbb8a3202353191058b605caa02059d45fcf", "1574f91dd2650f63806df3bd3e8a3667bb34c3eba1bebea2552bf9b3be4898b9", "1e0cce2b9326dbc93f44ec72afc8a88e035488422ff8efe53038b02efbcd3f02", "2bb3660be5f85d9d61cab30e6a4b3b04fb4e29e9245c993676f6c8e3d07714a1"), ("1e8b73cfade326c8f042de65d968b26bca761de3a480109ac60f9591a7ee7fb5", "0f666bfe738bd20a6a890d9fbf8dd0356febee40ed3c90723e75f9e7ce88deac", "1ccc2463ad1addd5e5e0fc5584b5f3b3fc6f70128170db98b3f2647e414504b7", "19c2d3f0c589e37f7a63f61b97e8de1e00c92ddf07146cd7dd91995a24cee3e9"), ("123c6d954cbedb4de3d699455abf093b14d16d3b6852bcff2ecd077f15589e71", "237d3f1d84e3b6f0ee1d952787e76dd688b9930c4dbb0908c6df38a945b4c547", "112586831299fb3aeb39b7fdcee61f28c7317f95eeb02c766547b614b18d7393", "0aee091d5cf9f1abb801f215bd8e59583e91b3a0cf32dabaa08eec0073987c56"), ("28a6543297524f1a4dbdef1a4306834b466065e65a6ab1bd3259295293056a54", "178a182617a144a659a841091de25dbfb797bec7d23325a40b321b2c9df66367", "1b53d9898c014804a5098b76045b983e16535b721ae0a18f745c06748c2be9b3", "2cf2b408179e84580a4a00674c3e16b1ca26b1c23fdb63b1b055b9bc708a1d3e"), ("2fd71690aae10acc4592cecd4e9bbdb3e4c07553642b4b9de6c1aa452af2cec1", "2d62cb9a3606408a24a324cb015f075e4182e18334121ec4435bd0bf4cb4b358", "3041b8f8d5ec5ccc9a0996fc2952fd3aa900f32c9f67bfb894d78603cb1d2f06", "157ceefa2b6a8d5e4b044a7b56a9d6123c7596e4ee965330be14ecd6bad3f18f"), ("2dfc7037105e877fc21a3d0a3e1d0e1301ec0f77485eb87685746307edc4ce22", "2105001df820f4236e7a2472058bd603f66b048940f8af00eaed6080457d58de", "0a23ef2614001d156bcd406496b6fdc91b00afad87739b06d6662d36a3910db2", "170db2150ab459109ef76e14170fb64a5367d186af9caa57bfe93a37c1eb42d2"), ("1687de9b9ae7677eddb613b2d2425521958488bfc5b3746a7502d60425df7941", "0d3b60650434534f292c44f63abfaad896c984dbe4f327fda0f886ef9cbe591c", "2090a7e5402da8f5c1031255b7d1fb6770831c6fb063c1b9c93eed4db5b150cf", "27119b8fc34b02c76260fb4a6515f2e0f77fcd71c6431585d355ed4171a98166"), ("1dda8878d3b0bc142be931b20d98acea2d5b471ea8dcb1d029bfeb82f34b2886", "150b1b3617f5adb89497eac6a7a038ccdc0f2e2d81b4d60de214034e1e92e080", "2f65ffbe4a0571e72b1c2afae8bcbc02adb7c88d031575f1a4380e9dd3ee5b3a", "2bc63cf408da73fa30948b9882e1f3f45120db6ef37ea075d297e965f5c3b537"), ("24bd839954b5ca561d4f181e20c29eddd76ff1cb296cde40e20df5c0c71cceb5", "2c7affddae6992bb780261afdee7e9986e67f630a9ccf8f138c0ac3d87d92cad", "0393d03348aa16a9d9faf79c20f7752b0b0295fb9b1c8dbb50ebd502c87ccc7d", "0bc87eb7e0cdbf4000360216302eae2fb719426d21b614ee858d6f93e1a67e6f"), ("228052b2136fa60537764c9c9385441006f027805d6bb8a48bae911023fda83a", "21d043542ab9a3f07d4c2515b6ecd535447db20f8fd5ff9e6a71b9cae63d1a23", "228c73e2efee76768fc27071a91d80eecb166058eda411f815e3bfd43c71e070", "21f2af7ce7bda7068d0580320b6a8ee1f05b45aebef5029d8da941fbbbb1b09a"), ("06e63cad5d43a3337d13c21da7a295155c9fdf0c0ddbf454384c19d3baba2cda", "10c519f261e162d6aab1c7a082372bd38e6c61cf024be797f76653949891acc0", "1edddf2facfe5dfeaa996a5a6d8550be208d0ba5428327016e325749607fc923", "0aefb8ccee5d6fd9f3c25cde7d183ced7ce5aceedc70cd6350e0ddaa71950245"), ("240b5076d260e48406cd761cd6fcf7f409725cee102736fba9c4e37e4db4478f", "08417762f22e0eef87b0aec7f1988974cfe41efbc23a2e814269c23a14ee7448", "257c2a32b66dd0a31ba7ce1e2dd3dfa417d21bbcd297974a99b8eb2a368872b1", "0ca7497a73f3928827b76cb1b6a4821f0a865fd7233730080dae9af5e5436741"), ("12f96b20b0a07a7f83a25ce6c95372da3ccdb88b4b972787f367add2546dbfb6", "207c22824ca37921e3dfe9cab0174a50823559447a585d3273b04af6ead94658", "1cec68b702cbd0155d2c97a6ce1561cc3ea6d779329416bac301ffc8d6e6fd52", "0f77b6b3d72e205f6dbf47f12b0bddf4ea93c9e15644d5ce6c86c66d071b3308"), ("0982c6cd80fd2ca1d992fe70a058bd45229ff2f9ed3f196fec963d0cf55d01ca", "0794477d0f2c8f49008e28410ce2d8bc673cad73e4ffa94c1c85e4b5d1d1d5a9", "003535b0904af953aff5a51326e903bc4c7f971b4009ff654abce753b8eed951", "206cdd05c640079885dd00c38060ce353e39b01d90ed1b851f6103aa4fa1bd34"), ("0ca0e9ace427e5ffdd0b2d000c396c4e51c83fc41c24fbd3c41f94efd233963b", "0095eb5e2285b381946c47a4732d470743710737d67def52366236012d03a59a", "215836db65c0bf7af05e135e8219108d40de9a41909ca84ef6883128a87eca8f", "01864eea624e30cbaedc321c04cafa0cf14ee271b3a62b55d6d0f6feddeef76f"), ("1c1d87535fb1ef8f146ca9e71ca51151b4fffbbed4c82049992a8e04f8c4ac64", "1ef007e6df935f51b4a67f529893c8860717d2072f5fd0ce2292ede49dc0449d", "094f3a26d2aa8ec6d6e8bec6b6fd651c7775fea84fe136790f7f71330eb4d840", "2311e21f64c18c998d5bec39def2b97671fd82e0fa894f27c44000aa9afbdd4d"), ("2c4de0e14084e11025e18f32b9ef3df1243451693fa2c2f938012535e6f00d9d", "1e1f621193c5f76628a20119c88d80be6cbcf8fc743a260d9c8bb04b84933b39", "261dd89da3595202962aee5e94c28a54a14c505320ad447530e4aa1ecd9d6349", "24b702c9a034e9bd999dca15e5bd13c5c306bffa8883027bddb1670625aa4e25"), ("0f88e6e36002477bd78d681f8ee2609c5274ff0daa95ba81794c4c8f8194ee0e", "1e78402041110417eef4032245188a4996794db2a6b4b948711fca1c9a5c5304", "0de9f457204ec7dea3ceae6c701f3da63d89978c054059575a646104cf53e5d8", "11a035f13311da09fce48147057cdebd89938be18d1ffbd6378739f32fe02fa4"), ("1f4afdc7be706ebfb395403e5e6917ebf7c559ae617fe8fa783dd048c0c4fcdc", "080bcdbe10b7778df7ddb0b22f1b4dde6e34b45dff5301e1e0f01fe28fc4cb0b", "293da4524fa68a564068951cf03343686dee60d532e3b08687545ecef5fce8b7", "1570a97e9a450e7836333dfa916550e1019c0c5c752a5a4185a2fa74b0a488e9"), ("27b927558f5953f8f8487258ce89f396692e61898ecb352f5f7b87eb3b74c4a6", "01a60e3ff19a7f60cf30e6ccc6a4dfbe00a861389fb63704fb3fe581da6d6647", "1ebdd58d39a5d390a9bf28715a5e8a8495a0092595baf8d9e4ad326cfb9c8e52", "172ea719fb2d5bc4c51c4180e92f6fc08b4be682e135f5b0ddc90af21d2f5e3e"), ("2835ade57ddfcc6aa68cd61e39a2e61a2864a850d56fbdbc1c3592255454e4f1", "0ca18289160ef17e226aac8ee45093b5ac3ee9c6374f84bc911f01f0b03502d6", "28b9f716da736022fc0fb6448d63ab080dd992f70c3cbdd1f588595c76b9d93b", "0f003db75d14c82d815d0f405465ab3cdbb77c899c1382ce13f859bf688c9490"), ("14b42d17f989cd7ef3eb6b0129dc689f723367a2825ad3b42274a1e21f92c870", "26dcac94748978c1c35f03c84a4b91122b051d7e65dda355d144bc9d1ec2ac9a", "18134eab19d95ad3d260127ce660b7967caf03fccf40b3c3cde0a3eb7c2c3566", "00f02f670051e10d6aa18d7c42a90b97c902c5a5ed9c98e5c8107b8600cb1b22"), ("2e7b21221940c194a9797941fe15415b90137daa8d4e548f1fbc6cc970fde808", "22ac591782fd27e78e79e61547727a2e4484ef36244e1e38793869db3dd8860b", "2df14c371a38c236427e7c391e56e09bf90db2a597cffba2d802a38e4b3243bf", "136ca0ebcc51ee496ace4002d16a8b4317764c87938e02dacb0d80aa75699e45"), ("277c02ba4d14c36772bc1c2412a1856b90cdc6da0b93ae8bc370cbb0c847ccb5", "1175fc3b80ddd5f525b7ce52802c7556dc84f56dc334d4edda3eb757849a67d1", "2f1da7f1baa6049b2a2f7db3fe8d5a416974b26ff42276b967ae40ce374ba238", "142663765465aa86dec8438463bb7d5662211336b2b57be747c1afbcd52fa3e8"), ("0d475cae459a57511fa54153841425103164211f29dd754b2407995b96a61ac8", "1c3738d981415c33bef81e13c7a02c6eaa5c0f3a57d9e60f0a1db4e25ce34c4c", "11edc31d133ba21b564af818e1c3cc4cbbc20a8734903d3e5396fc2b02381f47", "2e37c5e28f0834606f6d3188068a1f7699757b1f3204da5f379466cf8202a6c1"), ("1e5a2369fbe11e9e5685abea5e207431234b944fba6fd3c9041b3f8604eea7d4", "27d2b9b9be1c72d3b0034106adbece3e8fcdecb4e2b2ecdfc502b46b26a987dc", "0cec48f7568ce549649563fe1da327be35b4b38f5f76aacf39fc2fa06eba310b", "24a18022f1c9fb3af70a16573a8006ac463803eaf8eeb295f47808a331fc14fc"), ("07c1533021fb3f3ce67959e65de5f6b5e4a2bd5ad3895452c35ff7c69f228f0b", "0e16ec2ddcae63764f768991d440ce0bdc8aa3f4632cc7f44c6b764670682258", "21464f068c008510d7ccaa8931f062fcab7e9bcbe6a905974771a8a4795346b4", "0d64daade62dbbbfee8a090fc22ffb88316b7130e1e34526688a4be6c6c9768f"), ("17c82728334891c0405134b5455189f11e4f13f7b6ed928f4d337f4c7b5000d5", "1cb9662378b5a5a7cb119bdb550b712150bbf56aa15fbd60073d268c92c3ac3b", "24e7b0a24926d3aaffd9937e09c75ac5c0d945e6029660c7c05f59b86161095a", "214601923f10006b6a26626ce9681ce390410ca7c053491f1e76a951ad3bd150"), ("124c534e3f4eb8cdbaf7c8f2f77195ca4c85da9f7442a8b87a9bd3c2cdccb68e", "1e0473ed722d513ce0f135ff51d2f1afc887a4bad88291785e473a2b612bb9a2", "18a4028ed5b8f7328c604eff2b54d87626b7ad32645bc72a3455be09bbb270e0", "1573b2328c9e26a3a4ae37adf1a41b1d0ac3f866730b742cb9bf4253ea67aed3"), ("15a3a26e67f7fc5acdaa6db84f5c214e6598cc60850651d34f21a6ae967cfa75", "187638c2f2f81a43a9d83100dfc59f23020d0780ee535ff036e60557862aa6bf", "2062e46b9f3220e44f2f3e56e1e5b3094c5c4366a545ad1458bf3bb725658970", "2fdb2a700a87d57791ee4cce585aa7cfdf10d6b99b644e059492f29fed682b73"), ("09d1306cbe94e4161a04a5a265c0b8dd430f4319ff53d804371233831bd96c18", "04d1cfc27f9d1856fad164e92ab17848893133b83cc416f22fa39dd3ddffc68d", "10c28ae35214ee27f67dad15865fff70b2034f43089af51c3937ee3164c8e530", "15d88d26c3ef90340e0fd6907d1f322551453cfdb4e5ccfa611607e23f999e83"), ("1c4d7832bda229f62374f09ef521b1c37cd2395d8efca9d656716026682a07ae", "0d6c3de20be70f48bf4446be01797306c11ab830e032059460855ee7d0808642", "303c8bffa7cd1f59c857c777be0cdb0a98f639fe178ae9de41b1a0612e35162d", "27222d54afb659a63c1ce6227509084db975c93a209e4311e9be10481c9c7ae9"), ("12881e4381a733c077cee5d07d1329650e8e1c31b8b790a286c22280bd2d42ef", "10aa687ba80c33fdaa9d68bb5dd5331f142563e74a63ae3e1271a8f411383e77", "12ef6c5e33cab33109d776771163bbc468916f295ed370358aad43d869a3fee6", "046c88e76d1f16efeb071a4967b61f6cef3b8703cb02dc679d1b516922e2fcfe"), ("1a860a93b344c567c960eeff4a736a566ec7b2205af6632f56199714511de922", "0e1f30946b363c67552c20ad5a30a81871fc69537c87d9b3ff40670c6a12f632", "01da5c2ce9bdb3b6b453e350f651c69bd641ca8beb586297d0d777e4651260a6", "169dcf96df74aa1d67c782a67f8a59b95d1894ee2de9244d865f3532f3fa5ef8"), ("205381c35654b02365b0333c97c7d53c881006558f30b2b0d02d5a46a9769c58", "2e5fd05f8b17d14de6d19e57e6c7a8b0832c9f7a177f8843a46318fa12e0e8fd", "2edfcd191cf0226a576f9efde1ae1bf6b48238aa2f5f0265d891d3e759d3dd21", "25e8ba8ac5e03f866d484278e8e736b2040d7b28da5c2890d976b112eced9011"), ("0b5eda6c42f83b07556b8e5673979e2a2ffbefda171b66e820078b89d5662602", "02f602a9479ac3661c8bd3f9b2493a49263fa55a9e05b5e3ab19bf1c6a12bf92", "17111e94ce7decb295bcaa2e6012e9c61f434723f62cfc641a1b8196567bfc43", "1aad524e2c72d3cd028fafa4570f7e0c700827d8fc811a407d482334c67aa98f"), ("1432f49e44675757fce36b70623d20f048c61d0ae80a465061e7d853dba984cb", "0972ae27224a4d669d4382c2f84ebfdd70fb17a11ec9fc09a6508a73d401c4c0", "11ae05bbf0ca2f3ca8d80845c26a5928f00708323501eb3e855a8fb3441fe471", "0668f647894e53afd104741f80dcf2f2baf9e0c312dbb61b9cf3bd556c3fa3c4"), ("2a52250cf083d3d9a610b77f8606844568b8b5b07d16aeafa1b93969c5ab0b87", "1bf49c4cef0054aef568856b861bfd7992d8df44e4da331e6d7326aedeb41ceb", "28d814e24009d58951438522b2e747c071713dd29540d7b4169feff37f3f7525", "2da30e0aa2323c2323e6d1844c5fe227a38dbe4f11d3b37dffb8c76140645056"), ("1c2b179f92cf310999b9c3abdc485b0cd3d3caa3953d589990579349dffb9900", "132f80c19d4190c46c89f07ae87a034f7e8df8ffd49e76ff9cbfb9ec63769f3c", "0a92b6b36726cbd1b0b02eff1b6be411841d29cd7eeacb8f4213483f3686cb3f", "1cb35af2d3484ebe0c1bddfdc916b45540af7174d032b1cbc8fcc0aa6e48e856"), ("1e91b0f4a7f682791cce2fa4e16b81dff065a3bb9a4c5fdf7435203d00ad5317", "07e11bec58a896183a6203074906ba189a640f561577ff0b86153c6bcab2ad20", "1a2157433e0cc4c6c924b6be013d6f88c54cfbc2dbe543ee0ca7acac4abf4d5e", "03288fef82a3548ca2582d68465747d160c0fd328d86f813fd9702beb7a0486a"), ("152263fcd3c56653522e2d217758c33bcc53c52944a5446908ba5991944ded08", "1c036d26c954cd0173b5a5750af31c0090c02f960aba1aceea0e1261f8a33b04", "1d09fe8d505c8bbbed7ca59c5419a17c2a52eeff7fe5dd1dcfe70ca613c40c26", "112c93cc34a1b0cf38b278ed9ddae7942c3eaee1876ebec331cd0d31bbe978d0"), ("1f77e3975523c1916d85f3713bfa4fa79539ce34f74292a908ef59d840cd0d06", "144b139c5d6073b658c0129710cf112eb707282e5d1712820ac727f6e2e81ec4", "26406b632a5724b4e5441f1cae7467e289d64dd2beb0140b289afdfdbe6db9a6", "16fa9b74728702887a8e9bcd445015973f27e60506c6a35bb749917345f39ead"), ("1e20791d0ea4c5a813ecfa6eb73872b48649ce4a564d397f54be644d8a940f46", "03e52613f6755dcbdcf3cd6d60cb0f10c2742aa94e98d932b3afbc80c40ed93c", "0707edc680045f957a83cd9870ad366cd979c928fdbf434ec7d3b3ac136d4598", "24dd86be1f7d1bbd6005d2739b9d41fb7b6126d5d186ba671c4ae72dd6389703"), ("04ebf5536a7284f2275cfa8e20c097c279a46a37c144770afa49237244fa07c1", "0749b46b67ac3df4ca612a1fe960b7479eb7137b2ea7f63bbff5cab7dca54a21", "1583171247247d9c993394ac4ec2ffb461b3745314fc22e76077f26fc916541b", "2fe92d539d257ea2ea89ac40da6fd90c36a63c6f65390499578c7eae65fcb6f9"), ("09058141fe9296817d1ab529160d9896a093d57f2049e3b70aa7a0298f6bccec", "052ddc3eeacc952ddd36a558e23e155902bd1fdff9f526dc662fe5fa93b54965", "1569013dc76d7ee099a68f53db4b8f474ebca1d69d69a5afd1e0e32b9e6baf14", "0d865bc757a89d8f9fb64737e5bbc9c6caa0ed5b2084c767973e0788ad1b5b02"), ("2f388ece9a82b90fe75cfafc7444cd54f6753a0bf8b74affdc582f287834d14c", "2d62e18a3ec5d46d3b4eb2407c4266480c00ceed8dfe04caceae8f5a0a2e1aca", "0421bd67402fb9f6afd6adbda7eb3ad667f81e5e347e5d2950d4ea8d301004d5", "22cc15ed7e90ac8488038f7add0e65c774ad4ffa280c1cc317c8d374ea834532"), ("2032fc97a0272219c89c7a6d9f92e2817a49641dd780a5ea6cb2d29415416936", "21c5e2c286967bff3275ec136c504b1583e091157dd2436dd3070eed0fb7f75b", "300cadf3d7377fdd53c7d6280451d874edb2a9a053cc93777daecc7c61bf0155", "0be94d672d19eaa7aa019c5160af836ea3ab1a7cc013b7a4a6253e67be81401e"), ("02acc876b0801e5bc339b52821c28f94b8214caec26310cf5aeaae1f2585dfd1", "0628ab4f7e5a98412931d9b986c23b71372cf470afa9cef5d374ca0000235902", "27e27543cef1cdc3829a9e6872266c633a7d199004497bef7af85dadf1243baf", "1cf61e650c2853c9b5c33e0d224d3b763c5ba52cc731cf03dbe869ba566ea34b"), ("0c0343ac25ad964305fe990a4273df973f5a543aa7d58303c041246d16acc29f", "2e6b942dae9b7cb9cdf8a58180da7ec7bb057fd1c7f2fc8a069d31b2fc736389", "1ee9878da2c264ff6c611f869ae0c3dee26b9598facf93c37b1b2fbdd458ab0b", "22159181403b012e758604063a5901f232a98fad8a1d32645489c1799f37d9ca"), ("039a3704db0755a5b0af7cf93e764f565d18d770851361a7b264ab5e4f47961a", "052874fa51e252a087b085b8cdfdfcd56fab5f030119b885a983da960bc24393", "0b42fa787b0c7b34c74d05b7e746ae153c95a66b8d1c3e27425f925e796c7b53", "1402dfd04b5dfe383cd6fa174a9779dbaa1125a1ec4d76291a6b295136235472"), ("2ed851e51f5a465f222519eaef438599d0af8d75b653706c6010de32c1345987", "2bc07a3d5cd70d32407f0f2038131a35a6d9379e212bbe4a7dcf0df3d031565a", "27acf2b1293f8d75963db544cd210c0aa3ec2643002462ed03a35882f38d4305", "0bf360ce946adda57933754ccc9d0ce6ac0c52c75a8e92743da32c05a108934e"), ("0a2f90c5c536d2867eb5873cec03d706195de5ef8598792782e014fc9de488d6", "15e0b5714c9e92d7a5a6eafffbf24fb522786ecd2d215157b35b3dd225b6618a", "1bd7ec393a6da80b5d3e8186aac2714b1b16be7c1a787fba7645de894edd986b", "13c66c8ab31077fe4bbcfc91327f073f20bc1d1f8d06f3d340c142d76677b89b"), ("0c22074f173f1da4fb22dd8a755a1e251ee7705b8c9a8486fcdf208699b79537", "0f668e22e45472e46d75d0778abf81207b28f22f64a56e2c3b9a68a42de72003", "0870beea1cba3e4058acb412385d0965c0a382b34012763f4d1233fbc915a69b", "1051b3bba7597e1349c3663f96db0d2154b367e445f4a6e8d7d4e8e16a421df4"), ("0aa91816a34901023d37f7ba989299fbc8fee9b0bf66f8d0341191bb52cd86c8", "1b9524e56da9ed61ceabe286696cc1d8a48aa5c51b0ba24a8be6ae2bbf4f2005", "2f13c920ee43d4bc96bea22bda17606e7b17e1c8903e0470f1ce3698ba470995", "1511c26a5df4724a98e58663e6c098890e5172b2839915468cc57f363b279696"), ("07878cae71c39ba4e65974c588e6687335933e6d95fff25be06859baaf79b4eb", "1eb2284ad148095298cac73d3e8c59e4bd38a7da9f8c4ea2f5d265be266011b9", "09a3eb86fc155ddf2831a01a32914918f3b03cd563967aa12a29a19a0a78fb4a", "00647fdf9812e221ad3459de2785392e29ebbc1e14e105ad39eae11b87af972f"), ("11134450390f411d1f4f79f84880d7a89252ec9e42365e84afe70c3b0de72b88", "2702801c886412f0141085e62cac024a53ba6f9748ceed3b6c1e3e93e8f181a8", "105ffffcf3663b59f531feb8b790d97ff5cf91c8fd21cbce4b8e0f7783e557ca", "24acdd2bb462f3ab8ac0e31580a0ee3eca0958b203359804c2954cbb4d5680b3"), ("2e35b73749397dd505eddb46fd0b1ee7c25b965b7986a063628ef88eb7922cf4", "19839f4d1011770f8415465f4c38bf34f8ce8a7ebd154a51c794e3b308343b8f", "2bf22294591947af57c4d85339bbaf805aac1a61792d0e53cf30a900036c00ed", "29a048fd0f0ff9740b4ba9e07e7c02d7e934e2f2a3c9f07225d7fb3503a07a41"), ("0e4c34282f3ccd6bc8ae46efe3e9a62de22647ccdd86124cf5271500296c002c", "29ec56446f6f0c5cd9174412f97613fac5fb7bc68e55d64334b929f95e19d230", "1f6ecafa56e9ad00f4ad8e584d3d42ddbab4a7f91c2efd3ed7c983728fc9575e", "0c6c17c3e91f0dfd24adb4a25b1ca2f86e9ab74bcbf5de8cb3a55dfbb3372a95"), ("150f297db9a2b82f25e808bd162eb01ff6fb0e83d95ae0f45f3111cccf02f391", "19b3ed5ecc29d3205a692c6c931e9aaba1f716ea95dae11937fce381dbd4396b", "2017a8f7a17481ca1facc964a0f9c6da78881a8071dfd8831bf1ba9295d9f303", "09ba1effee43976c1439ba34a04f928c1c8c68bebf9f2cafb96c4b56bacc4e7b"), ("2a13505f849c89690342883b8a01e7e37474f278f787e2c74683dd43a940125a", "07a560d668b71a255cdece3e1a12caacae0c0ef0a02a8e96009a9316ca25eb98", "11b606c1ef519ad44051fd5fd7a9dd7d1e213609fe2d3c7e5da215e0571823d1", "2fdbdfcac734829e44b8acde194580534417b8543ffe1e87859adeb4174ca5a5"), ("1203328cb2919fdadc49daa382a22dc0fd6d46b157bc4ebffc76869049637222", "0c8715b88eede2f0c1390c78a367279d1e859f10d9cebc2029f8b112dfe2d1ad", "139068754a097c4aca23da7a06847c406299e878e5096699b6a5af396abe354c", "04193f1311e05f41a273fac20c831d2ab65d7ee4f7ca6232fbe464b7f75d6cc1"), ("2ceb79ed4f7f8d48f7db86a686ae0a3491cb95af0174edbcfe6c071be5efd7df", "2e2ea0dff266fadfb6a57ca777e5f97de8eaec179f1f99fe05bc6460740979b4", "236043cb72e55019a0c43a71013f00cabbf5670e9cfe346559a4938d43e6855f", "2f78f77ebbd942b34f15c93e4e055e3f94a179cbb064664f3d2ab594dceb03f2"), ("29b473712bd6ac0d3df01b39da069b6a32f23d707b642dd547c7623ee3c3626e", "151f7ab21616e1de9112121b2059f9b1d1e7a43df5d4b6e1c8008098fdee3d8c", "29c5312d1b0741beaa70b6274d20119c235a379f0ab592015adad6d4d9e6e2e5", "154ad7150cb7485ca5e164fddff17f1154bff9b7faa050e8bd1cc73d216b1ac1"), ("04f6d30b1616b772b8287d395057fef05f2d664e2488dd50e2606706f222821d", "292eaba97dbdeff6890285e7618bbb011acd0249e3f27009991b685127762460", "0062088507f5104204bf67087e9db753f48d8bb2d03f31cad4191203d06ad4e2", "06fbb92a0609c0f6daa4df572e0e00c69d8a8514e119b87568c05dedd58b9ffb"), ("1f53942bfd69b01da675a1cea1021f8f623a5437cb4663fc77a8d062a0d33ac9", "183eaf6168aa4c4133d7a0efcc7458b2a3a213bf59c8db7f6da001432a5dae5f", "235b29f7dce83ba53a77ed527029659c6e596b019f6bcf6641e91f2376781680", "2ecc495b429c23dccae67d696c7658e4f01d4e5ad39e9c3439865147c32a0d8f"), ("11cbcd2717219b781d731e64f33a801e47fded433af0563c9257d97647eaf859", "11fc143ceb5b6ff1d8166dc04ddfca138cd28771ab2f8fca502e8209bc3137d5", "0517d3746d117878b2ba9e3ad1fde68e0f92cb57971fdb3e47da10aa27708c06", "0e8e6f994791396eee31cc19603bccfcae7c6aa414a91b5a9aa3e828bda4b865"), ("1ec93184259bf8ac78b5d94ac878ee05dc29a5d23924451147a7d671ffa30065", "2343993f10f9d518e12802985d89e2252b8499ca316b2e82d84d0c27570df519", "1c5e735b59bb200882f4ce2af6036d26549d95712775308acd521b1528935a16", "088516fd4099033e6acd45f645fc7ce31f7987558929036b973a4e18d31fc5c8"), ("258f46d82750db32571da34c959261752b4273eb0feb0d8c5cb2cff21c54ed85", "216e2581285bf3f38ee947556aafbb20e2f923579acfac3bc7455c6aedf62713", "0ee1343c25a826cf3fa2c7ea71546c51e35bf2da4177348277163a3187bfa45c", "149ab5706ee993d0cb23f8246cc7be9060e3c0564d2dce089ae7fc3f3a400c7e"), ("12594b37e276112f8ababc439b1f28b0fb74bbbb5db148ce608a747da83512d0", "0f6b995c3bb3c15d4d67c95287f56fcf0ae81a68edd7257eb731d8ce38664807", "19f74bb1884ff67e1afcd117200e62b7f3c249eeea4bea5bf8617ead0f8bb6ef", "189cabd3cf37a5a391cdb8a931f4a9257effeb7bc094afed61ded97bf98596b7"), ("1a12031f1cd94e3eace125df8d64a06a77de7ae499748e7f723d72913e20e6a2", "062288b23a3943973da13db8f6c3a2bb96c158a5ae19cfabc69a46f0977364ca", "24327b5af62fa4dc4650282e304155236efe20aad24347d0a2034ba8a984a8af", "14e1600a6b3e605318176a7e1aa734ffd3109368fd5608b2cd1186f83351c46b"), ("0cb6d19338edddacde020c3f07208549bd82732cb62f9d51c6cfa9c1d9bf0ded", "28ac67278dfa7c3af4c5ded62eeebd5df573e9f8298927ccddb94a7d30936bcb", "261bfc0b252aa58c43cf393970826149688933654270d39410952f0afb3f2c58", "05bea31180af877fdd0bde0424c619f52ff48b826bb81f075e70da67979a9b9e"), ("012ba7e6a665c49f99a66dbbca2ce373b1a9cf6ba51b81af8bda594f08591b13", "0ac3050cee80e07b3032d6a0aa9fe38e51ed7ea0043d6d9b48ff3850f61acc03", "192b5a3804df5ac6e64bbfdf2738c748be5110a4993cf9f209d6f9db90e0bba4", "0b467b69b1cdc617887e664e99606e283064e6503aed07389b5d777f8b1321f6"), ("2b7fbf704bb1aa135a2f765daa65f5a6c6856d42fcf8adbe6e1fe49e860f2bd8", "1fed35e638c1351e75eed6d766a35f271f6d5df2eb8ce59f2ebd8434547ed689", "1d26ac5dbebcb54a243ea58a414e9777d3e67eb3634bdc4e3b6a565d4fdb24ea", "2a3146e5663d5a10ffd7a07e6c22c85303e1262ad1e18db89d631a2750ed305f"), ("1d8fac91869c4504db28163c17f69ce47eee811f366b41bfa75704cd05685fb1", "14a0c4739755a0ce788d9e98c515c6ba4ca4d10835ad4f5264ae9791ec758664", "2035bd578a28c7a30987e5eb618245f7d7c4b5d7c3b3d98892396c24d2471a4a", "118e365c692cd75eee33d1d30b73ad378c4b887ffe91c7746e5606daa167a67b"), ("1a5018444f1a6d152a2c796458248381582f384c98f05c9d8900a4bc429b2c45", "076c40b6774b2b870e19993238c05becc5786406b64ab54b7544949a9ab107c1", "2b5998cbb7dba93ff3e48a5d7c021c0b4098d94c78abc7a5629fd8df1701ecb0", "1b032305225a40c795fd7f1de119a08a73cc676162e010366e2361d15824bd69"), ("141220e0d0c4af79d7f4a10e481f1923c616b59320000e56fd3abf325d0816b2", "1a6009c0aed454fe3c6a56723770e710ae35e7275cdea27163cbbf3385adb726", "092de773bafde489a343f77db5e7df4d1beb5b43bf275a30c24b4dd14666d379", "26e86275294f10ffc5a75a4c6292980dd690853835978b40baf4b4a4522768a6"), ("3014e86c1288f23878298f83deca9c72f0adb7fa4f497effaf526b00b7e97c67", "2f2de33e97ed86f088b4f0ac26daa87156a7e8c5bb307754c8fbb81d383cb26c", "11a979a3bc4a2c1977d37e25a9de89e0b8955c60e85317964e6e7c6459a674e0", "27393e0a7cf2b13204051e3548ca61170f327594561da39d0edf6af8b964f8bd"), ("23bf26b6daa8b20575f04b2b13ea1fc918d9ed5a582ef2bc3672be64a0068daf", "029194b77e6ec7bc81e449ae8cd87dfc1f674080af3a5e762301488bd78fd87d", "1c5270dd84f8bd9766a6c0cc032fc7d2484edc9fe2375e2640f34d595a1fda10", "0fecfcc14c7dea5e0654b1e40a6089c733e539534151e528d5caa84e9feb5b21"), ("037de28dafe202a1147d4210c2cdf0430de0fe6c5a005f2682d48b5de70db5c3", "0146e9bbd7e0575f67c120ba889e475ff644bcf0e64c02690e8f6af16627ee74", "1c74a8d3a85ffc8c7a5054255de0a6ca2aceb6eb6bf63c32e312a69f7744d6fa", "2c71341b00a17dbdc2e04abe0e8de3892e723fcf54ad790dd511a8e4b4779db2"), ("273a82637211d8376c64a83edb3e53cabc0fd38bf8b31dc38e02dc43c13876e6", "053a21ffbea1763c545b16800e63245dfa2b3fd95b883b28aac290d03aea3f7a", "0f22a17e1a0f095053673b46af25f99c41a7d6548219bdee578f0bc17f3ee25d", "27a46c743581ad3cc656ad7a10508f1e5ade6e9bf73d0cbf599f9401bf778361"), ("093767ab04947136d5b157bd6abab708663e59bc91ab5cbfff48f108f607e73f", "1d837160eec2a46984a02bf24d1350d7a9cd1bbb799dad0258827af8052789cf", "1290b58c6ef0e6941aa31bb6bfe44a3095f7557331d258b4ed3fe8d7784a3738", "0ea2c5ea00e4bc3868f6dadbf023917a8ef55038498cd611b22c7290ecadf88a"), ("256cc0a702fed3ff915dc433a195f9c27123f69cad1ed1d67f20851ee286aa6f", "0f6c14818ea0225b105ad66a3b3e6f9e74953c7ce70123c2d1930c9a14b73036", "0b2303ed608597ba64d7d9c0038e09c6de42320c3916f29fd415f96b1f17824f", "2667840c9112a00674701332471d966d6b4861717a8d422d92156de624ca750b"), ("0dfdf644ad1ec0a6da88be448827f2eb8922030bbac386485fb493cdd8020916", "2e5effcd36dd4483ec9e7d3d6f09e7b386edcac22627ed6e516e967806a8d4aa", "2c4e26240461eaf945546831c892aa16baa5ba37a72755564e68df7cc84de77e", "091776633c0f669b2d4ef79798f2a6cc549820d2871e98175c2743c81ed5258f"), ("22d62d384a0776fcfb0518d23cd251c9675dbb60b15c3f5ebdcd6cc55c2765c0", "16ea99003878bb7b68dc4cd35c81deb8807afa92bb11f11574e6eba83572a92f", "03b5adf86949cf4b2a9d15b5ea0a7165cdfae33d9c2b48e9ace0592a49b114fa", "0744b5eeb73ac1458e74ebed7789f3b273ceafdf0d55f01804abf37a034645b6"), ("276ff2fd792bb1c8162764ea055d91613bc7d90088f9888da62264281db170b7", "15ed7fc993c11d29e5b99670926d3f43a60df1301d1faac73cb75f6c7a895543", "108e76676028d50b1be58a67d2d10d586bacaa80d8b48974e53715804703f425", "0de06603f981adba12dc2d9827f92fd3096864a365360f965bf80416876f5da0"), ("2d7d686e77106daa8a400078e95ea118b2a99c20bc3bb8e9469cd6414c82475d", "2a0aa3e602b9b749ef5068884019f601ffb5a6af901df673fcc64a42a032e2ba", "11d1b01b6b17a4136427f230b88a171a10a8dc527fd440970d6494dce1ae2f97", "03734fa0bdeee634c02e1fed963856d98b2e8e9ad53d942a08a184977440b74a"), ("2eedbe581bc8195bb0839a6606ac27fa24547f6527c2385e4e033d78ffca7fb2", "21f532ba31f7b9848278d2d9e289801b0d4e0695b227fe9598ebb7780978253f", "0141db6b3d381a10a1597f79b81c3f8ee0da2c7dbcd7886ed9be3f7082f8b9c9", "18dc19a9dbd09424bb46a2b0cea4de828a6e6759fb838aa997722c0fa2dc52e6"), ("06098b24c994d93b98761ce32b26e9f13b81f1f7de25d2afaa4d5da266ee1641", "274c38a2288ca39c0b7557ce6af172353a3f191ae8baa56f886d5e8bed018417", "12afbd89f743aa93798a97244e3a1aabccb6b2a7fbf7d96557ddda4dd0a3218c", "2738e0b96357808f312f207f191960ff043234872e9cf92f883e5a527064feb2"), ("25b30fac2d4200a00003534bc7ed20b9ad47d7d99e8c6752ec2a1e22225eca9e", "277c18d93baeb2b7ca28ee27340e7722e58858a512513a2626b2183e69c868cd", "1631e81bd756f9c52dddfb6c626c3465de583b0a6c27103888e9919efdcbe80c", "1995d5b6817a2451ae74d3552ee0974e6a1ace74f41081ea795cc28fc035a150"), ("112d75d9bec76ced1da3ae37dcdfcb809ac1509611d312742caa8edc5e41fb72", "1bb6e4df09f13634f5940260f47dbf251c7243baba780a42e16d584dfe799400", "1a94d67a21a0a9c01705866f184256e1e140ab9a93fef20ee3ac2ee8986499aa", "151c8de9e514461cf3d6a8de9a18198a949a8dbfc6733703633c0db948e7bdb8"), ("0a356119b96057b489ad7e84268b2214875a469172fd4cc5b1a639d3d5159dce", "2da32c7acf242fdaefcd5d0c382a6d33e67d2408c689749c712d3ef25a6f4208", "234d38265ed573b2d52ecc16f3c6aeb428a832795f9ad8bcee068db3f982194c", "241dc0426bc78309067aa286a36a15cac47a4a7e05ab61a536b040cb25277a7d"), ("14f76cdd40eaf351c727b75168ee32b4b4b1d679f0ece88b0eb217c297d0331b", "005c2a85b3b4d5cdf1f3fbbe43907e7b077fcd311d9171d54ade82968769b4ec", "0c2a08f5e2e07014df84ee39d2a6f94ec4c150d777ca5e208c03dc854e219871", "1212a45db112b42e57f2e648566f82714ebd3be48d739276c839de78be5ed6da"), ("05d86acac2d82621db0ca3c5e51ee67beca9be7c977e51b9caec913ca89ffc17", "27727eeaecf76833c44f6f19bc232087d173e4d035293705678d81d4625abec7", "288093fabfb10dd2a8d10cc2aef5180331e0fc071be1e96adfca2749d657a47c", "0004ddd37e21676fa6e9154d060ee4d83c64f644a26cd266f5d15307df455247"), ("02841cb3900aeaeddc5dd2b79f5d5819df90aa1f56deb44e8df0ba0dca8d484f", "0dd156affa458e5f0682bc7755dacc687772270311ad529bbe5b3a253d3d9e8b", "0a4ce3ae1a9c92fe3559c7569d700626cfa186d76e4826ead43ebcb6e8e34590", "03b78f7e5e8e037d92fdeee4e6f10778d327081e820e17c9e7526641da4c0bf1"), ("1668c4be3177a7d9ecc3c4097bf772ff27db10e10128d6ed1fcef4e1507c5a1a", "18dbf7b39a3c9649a22eb780628455ff6776567f4f907c7ad0b3a0845efd3899", "20254f1793f63c3eb4c7c65dedb2a89b99d97ecf1bf2230285626deda885297f", "21d29ee67af7f2b69ff2d3f43eaa4070edb870af6940fad0fd89a43ca06d3616"), ("0f5c60db13784e05cca2a465edb2622c9f9efe5cebbeef4f28114df99878d426", "1d4f23b0e57aed1aca3e0ff8b1f7355eb1c88c807d8a495a4a21d22291415371", "0e58cedccc414ee39a2bb5d78abe24197ff9c5346f67419273b81aa0e82d32cf", "1461b0186ba7c2f99fcd109389f28ec33c85ec2f2c24a7a89cf50228537a942c"), ("06e6fbbb49e39905fed64f6917585cb3bbb7ab99086d327bd273f4c7e71eabeb", "2dcb38b699a1d9eaa550506b29ca0286cf140b9ec105a1a274bf0d1f55b647e2", "056b1d67fb86a834a2db2f855e5a46c4819b0d366fd8f378ddc283b458d65928", "06b5184bd8e798d74f4aba85925508b65df7d95e35870861c89d786e4d58cd84"), ("0b2dfbc6da2a06868edf38cd8b11ca222e0452bbd1624404e7ecc49adcc197b3", "29debfc06d462f6fef3e0e439db1121009f0493c00825f39cfdd53a7f93cf4be", "031edabb88141534521bc7c1af8764482087a26c956d938ff77969fe3d524ca9", "13b2728423c6acce820021d9f04db9bd83514f5b7bd90e461e4257a6d77a80d7"), ("0c61a6b214644b0e6f2e572ba68e67dfdfdd3d75516bbb63116a644db96abe38", "238f7e36a31a11a3b2d66ac9c83c93938201952495437975169c0707c951ab7c", "1f651911eb24eeb87dd553d8fbd6ead7426b46abbe77a1ba0fe121418c37a0b2", "1bc809875f515d3b795d039adc8b0e93b588be9e7eb0ea25e55168935062788c"), ("22816cca476694dd0aab68763e3086170606172fcb00ee14c250043ce647795c", "1fcde57450f1be0ecfa4c89c981fc7280cd83d462d693e77e7c7559d5ec2d0d0", "0a7c28cc1437003a42c7c9b522205b852014d47b78bd6c1f45d0715b8616b4fa", "1439145a4a4dd8c754bbdca19e04cd224b1264aa11f8cefdf9b5e80b12dc4de3"), ("2bd766c1d6b6c8f0eb78c29b7d93b6cb3fa42728182e38fbee2d4c708ab805a9", "04ee1bd634646669fbf68226cd4c0f776b75f57fec4e97193f2f558d635350fc", "0e11c35f9ef9bac8653f0cd410e96457d926b7f1787554259b824288b762b6fa", "080f1026661a6b5581fa6bdffc100ecd064a1a928ba29444b3d44d3ca716ee98"), ("0e19df4fa287dbadcf293b906e21b4944eae241f4dce5f241200b86e53c47761", "064c2c73d9d11329a1223fdc3256ad4926124c7050059d0bf96f8d187852dcff", "163069f1a0f9ac1a48883aaf87a83743cee5cfc8aa4b4eff9e24b11507a636ec", "1e478ba164ba997c3f0c80e2311a66df8e429880a9f2565d8d73abefbf420050"), ("2319c89b0e0464471b795e2a40d5d47c35800f9fa273491ac9f351de8ca00950", "2e80df0c46e590c8d5c12475b28b3acffc8a9c76f802691b76f1af81f0971c8f", "1163a40bbb8e757e7a88d7208a70eb01016fda9a0f8ab0bdc2bbd2ea4ba9613e", "29e099801f620d7ef99fa974ec69e6e2099e6827d82ff765759dbdca21513e07"), ("13ddd47c4fa4042f8bde7f5f4cb0e65e0985b52a9d0b121d569c3223328300ab", "297a8050442d78ac72ea0eca1226e0ebd843e48d220ce3c4854ae73f3ee4d2f3", "005757fd7f63bccf3c6a45d1e38adb25722baa8dd57c03a33e1d1ba83a68a28d", "163b72a48b03eb65041a69d341d532f7ed35eb69bb783791bd5a45b4f0c91cbd"), ("17122e9fbe12b1e9033eeb81b365b7c7851ba3afbf138c0d86f2565091688ae3", "255f7b2957144fdcfea36845adf71a94721cc7af931b921c412b2d627e17614c", "020efe00ccfe8ea82b858215de4740885e15f123ad7779df1eecf22a2b2593fa", "2df165b14f405c60a0fd45a05f603efec900ddef7c80e783641d8fa56093fff4"), ("0b18ce2d2657986bd36dc63ada66c09005c882ef129db39dee2a0ccba5782475", "10aca2b0f86d09643f3e64df55e522796f2e81a568e6c9df5fc178c4136ae1f5", "1d7498f4090b36824f7cd34ab0762df932cc1a40eaee3f2b6cf46de28d62b95d", "2a796de98485b2d3aee8aa82c610d97362c07b8bc3972aca0f3b4f9642296ff1"), ("2e250973efcfa968fdf3551220c29a2e14c87940b1854f6ad57a36f2c8a6fefb", "02ae0283d6e4340dfb80775025d8dd383b504bf525dbc7a4bcd756f82fe01f4b", "1bdfcc6189d8e51b1c552b482be13d24b61e2e7a194af4ab38d43d1eda66486e", "173d4e46dd64df15b88c78aae216908934ee60377ceac91db8762fad7fc89097"), ("23b956c8883a10b5ff9aca6d9efa8ea139d501bc0cac2869f4ccee0bc9bba258", "0a81df4e1209e2d14e4a36d72c71bb403e0a438e59834a704015f5cdf0f35fa2", "29372b52847f55818e6e04ecfa97df7fe9351ba5c4fd37fb48b8d5f81d061d95", "01abfca3a05b6fabe237160440c6ad8f2ed3c472b64a89e60e3ef3ffeb00d2d6"), ("29204e61fa7bf3e70458a578f5d57a5e82f53708cd3b8c781d1e6c3b83f90f91", "106246b2ab6deba46da8f1636c5f93df101e07d54d0767edcf06bf12c4e98536", "2486218a3417ac5fcea29728b0727546d3a2e74d3ac562c7ae9314902e0c4d31", "095d8f17a0182eb6aa8ebbb4cd78aaeea6a4ffca1ddfc189944023c6319dd681"), ("2c1bf7c6eaa53f5379defcfe9b1017365c2d2bd30f913776d9392f398fbadd93", "2574e13682b53c80f9f2aa9f46f1bd76f8d3ef1c02116c965346d501be83df35", "037453b85609ee9bd5cd14b95c76516788adefd1ec92ecd26ec903a6c64c3379", "1a4f9f025f0369fd9133070b377996085ea9d0df5872654e3bbbaaa632f8e259"), ("24209366ddb4ab4ab7cc0729367473d4a7db626b1bc301cafe22dc2925261aee", "2d155e0fa0b8c2af153c4a5bf79df6f6dfcafd000d80c4acc55008733a70541e", "13cacafa9b08ede8153c297b063d87a1e52292a07ffca968fffb8d024963539b", "1b11438b222cac3619ea2808bd76191581993c140653da74fdf19ba0c500532d"), ("1d6bd369280c982539576b9d175cb522e035dcfaee122fe661e527e84ecb9c0a", "130e1e8f7ecac3ea2dc5082bfb8621f7c88da90ff714ecb3e77402bb57b1c63f", "1e33215defd9d51af1e578bf01aa4be926c402749e48a6122deba6044c1e9bcd", "24517b2dc1eb89915e1f7d701990b68a4865d4ef3ab160d584314fdaed232da5"), ("12cbf642cdfada88db1e2f8815bcfb32d52dc4cd5d3d126999d2847087b8b9ec", "2812fde80ce997da2378c5568ba81d5d33da8031b27d40a9bfbcad2c43077974", "05d15cf7fe3202b0375183ffec5002c6c9aacb0888e7b4e2b31f44a39da46b84", "2056a0c87350757926a9fce6973b334ae03a4e9bc38ac35bb62840c7c32dd24c"), ("0ad7cf4b8f361262b1a157a55379ec736b0e2df289efd3207d9dab105663a9b0", "0aeb3b7f0d40880d4b357878ed0447434b6538026910d0d290c92dc3e61af56c", "040608d6544b658e2dcd9b09a8071aca3a6f5942db7dd6fddc6f1eca00356e52", "286a0ee8be27dd660d486f6355af2dbdc1cb33f067dc86c571ef1dfb9fd1aa8d"), ("2315a211e6bf6fffcebde53dea363e505afd54b49bae88a923799c537c28235f", "0bfcbf9d02597386cdefe25a91466528ea3d8f53169940a70e6811acd9889207", "2ba90dfecfe490cbefa556e16a6049049b1f423797511a1920cd9dceeaeb6ccf", "00957f00f368c37d1636618495ec499d33331a12128e52a881eaa8af3acec2dd"), ("046601d0f9e3259fb4166ef0da22094a74e679fc4c17140002aba1aacc719030", "156be1b04b544aa6d1e5bef372fb18bc5ced0289b25312cb7121c3aa26b28a1b", "0b25c058a3a6bee757188f52e89a9f8fc89990678b1b52172c498c5d7551477b", "1458e4b46e2f27640dea6ab8a648a7ff0d62fd2585d0cf635757685ab6a89231"), ("0f9a1c8d7bde262cc28426347ce58df43a713ef90ddf5036f5b08a635914510d", "0b51af9b6f5b261344f4649e4562189d70e6a91f3464a773ab11cf52c653ac6e", "1d0e5d33fbdffd58883c9c291021013161289df08d280d5eaa8d9205277d7aec", "141058449b4ec9cd53a3bce0cf97d929b931584db4ef207224ddf13e9a7cdc25"), ("10f7bb3ef192213cec49255d56f3550a91e898addbb814842d447a61b5bacb2f", "299d123d5473490cdb91d337f9035430bf92f68ef123e2ec134ba582ba5329d2", "2bc8cd28fc8e6b8a2333f428db29810bab240240414d8be8e427f5d84c6528c8", "2359ad03874beb5670833313058935e48443fe49e234521de4f7f176ca301bab"), ("2f974b3e9ec5bd919e6f8840cbaee7bf96eaed0852df668982ff7c864b61e6fe", "267f93671ced06a642a4b8f0ab6cb2d53003dc06a4d1f0df25e8cef51699884f", "1993e296725a36f569a62158a9c356fabfba965c6c38144f642d31574a3c8d16", "195f3adc0d5ad0b2a6f7ef68e4c44db5d7f5f9291744afa80a0a6006ad41b9b2"), ("153d3b33cc7ea9c7fa3ec3da305e8c5887c2c2e723cbe049557a05326eaed267", "1f35bd3e97b856c1e4d50b4977021f9e3766a60dac9dac56b413871327a64733", "2c546abacb07b2a126002e53c62c12580733035e5924ac636ee1666d4695e617", "018fe85a7a256a056cbc5b5f393f8322467892e7e5ab94178afd48adb086133f"), ("167e8ba64247fd0e19cc423affa9672d70d7be1bdfdb274235731eb036994b4a", "0919259342af65f17e2fc97c062545dc0b629233da8da5000512c8c47d038f37", "2ce9f591033780e35f87583be9706542ceab8004b5c94da40413acbd44110558", "2bb64b7b5ffb41c4056ef3fdbc0d843effb185cc3f5bc6cb5a52b4a7c815bd22"), ("1297416d42bd529bf3b1429d060fb2c3937b85fcad6cc9fc0264387ef94509a5", "2d09faa65707fa0777a38e0783f057acc51bd592c53ccbed4727156f515593c7", "092fe8abe102a3505b31f5644ea94eb0be5c05d3fa864215bddaf26abc22aab7", "266216761bb0fefa2e97186501cd7a15a20ed4fba0e0a6993c897b6db953b7e6"), ("291a4750c542b8d5394c1d6089fb52fffa092f18e7f45034ea370446878bf45c", "0927a0e9b083c1249fed65b4bdbb8ac322ebd0d37d27efdfbae3dad5602b0b62", "2be992ca7a4666d513e5b4098da27951ff7640d0edb28b4b9b1fbda3439a779e", "0fa2ad263d077fc187a2ad2bdf836714a623613714ff5cc4cda484d7dc98eafa"), ("2535352db8a203fb28399f5e7479e9ad425002c343bf58dec53a382bbca899fa", "137339f6d2d6573bb3c8086e8a1d7028a767a8307ded141c53aaeb52fae776c8", "1c2d62e17b6dd79702e5abad58e18c8379851fdedac792e189fd214bed5b97a2", "14de8b871d537946b746417201f6dd16df730f1eabb32f7f974d76d397cac5f6"), ("0616242a55f7fba486c96c588e90560de9bb54b6754b10587a72605a83bcd600", "158ec64f64b01b49cacf9d60392d9c29fc87e99e65a24c7ec7c5f9d77f7e3a24", "16bae06728294a199c93551526547f12c60aa4410fe33c6a06d54f62631daf64", "100739f891543a0fd4b5b8c738e4995e388779c5cbb06c7a0fb684d6d8bee532"), ("1864035d8ac663e0b8411ef41d998029b4a13749f8b1b562b2110dd76f6ead54", "17bfd47d7352c62eec4014c7c540824731214abe270bd82981873199a6f3501b", "0ec4ee125feb0a7c4b3e950547984b60afb5205c60b492657b1d9d1dc2cd9e16", "24690018d79d9dbd4b11393f4940ac7c9f263dd932613cc8b7112cb6f550e06e"), ("09bb1f43d87dd41e960dec0d5e68a339de7398310ffd56b9c5d03cd57c2f14f7", "255758250b7776b25758c787ba752205ccd1bd98d23287cf06597df66a3ec557", "211c7eda01a98fa9e2c5ad780c4a3e5495de2826dbd68f3492848e872d2dc29b", "104aafcc36c0967cd01319ed9d1842f344d1b2a6aac7a081b16768768ab45067"), ("15b2113ff36202c1ff78d90e26d68846e989eb6e470e1e1b4135f02959f173e9", "05e101a38beed11cfe6262850ee468360b95608a623c2d42149e2e46700a913e", "17d980a75073c9f5a8a0e5df1877a1ebe945bd890bb17949b3902c773cd0ce91", "18db710b5e5f52c2500bbe006c40108d28d30e8eade3a3bbac934e3c07ed80cb"), ("26dbdcd43bf9621384e49e276ad5edacd265bccfda793264b1ab9e5aba1932a2", "03a2899e0a51b65fff1052d6d28adbd653134341cba9375cef23fca63dd116a7", "2a6751236ebab475e53a94558dc873844e9a22b3431beb2ad9df5650a6f4839d", "1a08c363ba7fe2c26c13669a1a40ee4c33bae2d06ed474f87b2f0443ea7d9a0a"), ("22d8f7efdfdb0651df24c07b5c204cb7de73848f9d14a81c9f9d16bf5b54aab9", "2b17a48dcbc457e22591d94f0fb06b47cad119ec655fcb7e1c31f815634270c5", "173257ae727f7a524246e2618b74ec181583f4311797207fab7331370a7c8536", "0437927e65bf1a63bbdd2b3fbbb98f2cf86926477e7991133e240158224fc0be"), ("18054c530869dff73277debd1374c6796c43f9dc37e7855afda99df4db2992e4", "09ccbeb4d16faec7c217ada0e70ad90e7efcf5dacde82683041e5fa2bdea6eb8", "034038908a238871c955cdbd325dc0319d05b66fb43fcf7f963ebb6cf9127155", "202f6a84d0e133ecf0c071fe6e393df91b96cd8f15899c0a1577288cb1ea0f20"), ("024ec59a69dbcea93157735de7f1d704b12dc5d6ace039d9976126ab67e4bb89", "2afb2181f54d99fd40c80e5b55a322bd513b029eb873d0d8129ddb6d72de05a9", "2b7a6b8a2af002ad6d773cacc5dfb721e5978fdea14e78ecb4d942a682a149c4", "02b3cc591ea7cec5feda2b2b4cc54214addc7af54bbef17abdc23ab38b1340b8"), ("2b4a5f1a8f8dae618591b6b404ae68d81088e8a73b3f74e418e76b2435f9b54d", "0b99c2a8de60a36b77bc066ef11a63aa290a78fc94b14f9c3af1f8a2c32d9724", "1563850acd4eeed2a1e48a605a4554e7c2a9784ebf6ced3b6948844449825926", "20ff2303e0f02c9c6f6f7e3355be34bd175fc262012fdd4365abb94426ae1e99"), ("01261929e0fa0e95a2537c1000009c0832f1821bbdef3ef3e94dac14567e9112", "20c1252d817f0ca24003df7b249f8400b0191acfe2d45eb8a3dcdfbecc5f5828", "200bf9f8d5b3595f71457f5533a38c20954857b1fc598a8f32c35574e91b19ce", "14cb76a083d4281609e5e30525b169144e55a244114b802654d7fd80737e4ece"), ("1a64e31a5bdec1209fbb6057e6956c7f116ed07ac7b1832ac093d093748053b7", "230d3f198eb86762326cf7120ee09590c431890d085576c6d8b978da326d60c1", "1a0f78daf0cc6e39e65a3f19a2190b33cedaba7cde272663e81f8374c87337f5", "03388516a211deb3c29382403f8da6ebdd3885de6733011086660e52c62fe125"), ("025613ce2a8b7b9f9920470ed5fe5cbebaabbed76d5463e3d3010db7c6589c22", "07286adece1c6b61efcb609c5822d9af84201500f7aa6bfc4d4bd6676c94a9ed", "0e4adfad7fd29d7b4ff3668c4214b8899e396bbec0ef21132bf0d9c9bfbfdb1a", "250acf2f410ab6be14da36b612b5909529c0ff7662a36aae43484375a7de5f55"), ("17ab2bca17a1a13fcc7e9fae474620505fff227d7d6a592630b21e372bdbc42a", "1aaef316aca7d08589f5ed0e1abc7d52d31fa88a791c2ddc046d73438000b92f", "108979e4a68c23903b2947be9ee9171ca3d614d352f8d22d50bbe233f9463c6c", "19863b8e75bd544bee7aeb6db39e18cf6f9773a40837ec1a64ad04d1b459f3d6"), ("178a4956f46270499520d937b62b83dd35ebfef8655b5f2d82c6ab761f93940f", "0faf9dd56198722b0f4a8278e2f5fd37807152acc579c81c0423339171c4dbd4", "2705bc87140147245e4459383a375ddda521dfbfe14226bd08296ae0e5c0506d", "030ea95eb07da2073ea326e8f4c09c506e91e3670d4383cf22a60703221defee"), ("19cbf408e73c99418199f34eaf32272ea56d6a946b1ab2686a739c76faec3470", "06fabad258b23e8194eedf5111362474a2778918ea28fcf479d8ce873fa08303", "1ffdd6688dff0a1a18276198e6b226df1dc16aa04b383f26d955eab078a5451a", "277cac259b81dba9d482b8a8203c889c6830524b3cf65bbf24aa39d0aed260dd"), ("034d442ba8ebb7f1725d1a2edde5e8796221f771b0bbdd65c28d95b2c675ddae", "0bada02b77006d76973262b7f51add82679b5f402b1117e54124306ba1668860", "1c830c71cdf4b85fd315843696d75e4b69a71dd9fbbc303407988d902d22c2cb", "233528bc5c816314634f25c99cf53c13e04a005d76fd1c313c5f8b9f075d4c73"), ("13c8241b27760aa33d2d9862acafb9b26984dca41671259b7226a9dcbc40a357", "1d597601f4e66a89d718fbcfda6b88125af0647ff32c86a6aa88adef8fce204f", "065b7c046965e388d887074254228e67c694db4760c3350f0616946b83248804", "0c3efe0cf301c786cd3ee8fb4f82ebc1363313334d077256a8ee150cf3a1fcf6"), ("065e3167b6757b00dda49c3304f4479529c37f9f3f3204a547d3107a59c1668c", "1968bd4edc900106f2e22e0336c422cc5c610e78ec5793461fae5ab8bd9ecc1b", "174015de1f22d1a7d960fba3bd84ebd5e56e094b011812e4c02c7ca3501b930e", "2249c3c2af5fdf84523dd8c38830191a149694f3b09797671d78bedccb6f94f7"), ("120f5cd9535b105008134ddd93233046c262bcc8cffbba64dd3ae280264b9352", "2c2356a88eb441c351fa9eff5cf6371d48949bf90b36098b762a9f3a6962e663", "0a8c5e6865cb330bad370e3cbdac6e2ad585d00da68d93bedeb06a050c316d41", "2cbabcd3b14e97db5c73263d14a61d17e7a6fbfb3f244e3fcced75aee43b5595"), ("0060aff4025dd034f1bc45720e0f5b0d2d44f7c2338c6a25cb9d8c1120e2089a", "2d10a65033efbdfa3f296d3f9a8cef268294a79b951a5d6c63c475e6c1b0cb2f", "1b353ac3a4d584708728b4630774ae075e6ce77d7ed60ff422287f7b2cb7b8fd", "1aff901158b4754c55447aa69071d12c246660940a7901227b1f2796baa332e8"), ("132b2df0a05f2a69cdbcc78d6e061fbc169589f7ee25d187edc0289659878787", "0a8dbedda5293d0487a9335338496d97c8526b2840837af27850bd7728d75684", "24a247dc359910bfc295515c1fc11a98be441130e3850e4b22e39299566d940a", "14090a0e4ea8b8c6d1f794d251a42b5ffdb8c0d6b75ca0258736f2247fefce19"), ("11c50cf04edf7b6f8825b9cd38511381fa2457a96c264bbddbbc869c8747caac", "0f8a1dfb8e5af2da70eabfb0293704d16bccee63215fa931eba17b1294b76583", "278ff34becbd4395cf5fdd25806e35ff7418e42e7aa3b9df8c1e90ba1ff66334", "1c7a7751ba6fa8ed9276042d0939eaae45b07aa725a4e07a9b0f0625f0e13e7b"), ("0d5693a84275b4cad44b99d3f4aedce2e74b4e0330992ee94af1ec92ed28a43a", "2ddf3817d041ada5456cd2889f364c8190d25737ea177e5ee2d92a9579134c05", "2923c11f18aa13e713e2bf2ca310007a5f8f9b184d2651878c24382635664a7d", "2a7fd47fe19bd37dda7a892943fb70d87cfdb53360c03cfec1d2143f71e1991c"), ("1bc1544031f27f619596edc35fd569bce132a2dce754df36df181851685b6c05", "26706fc9314051b91862532cf98749be9e213b61d6a822c23d072261a00117f8", "16cdcec7c0294c644ed7fc782f937aba3fd565f47eca2ab20b1cda16106d6467", "0207e0b6d094ced19d26a6a29e6af0b0f6c1c71fd509638f628bd6edfbd0300c"), ("10c23b22ee14031f1b9ce3f8deab2feb090cf888ae619f814f9951076d76d498", "2afaf3010d6b07833e395cd83c5651992f73d412c9452283319f337d137f446b", "0151e020fe98a6300e90463cbcffe8eb0e9417bd5d20cfad23d056627f94cc7b", "1ca29d2924d14b144cb3cb62533e8aa440685e5de38df7950ed6aad966bdf971"), ("26000f86602e9ffb2aa2527be820a68016ad2f9ad1c6d68dd61c565d212844c2", "1994fa01388b13adc437d903822849fe5119df1d9e34854057d2ded92365aac1", "15b7ced7c0196e7509ef42bea9b92cefbdb80b2243398e4847853c71d4eb05d2", "0efac8205c79d77534175da526f258e946bdd223588dd33755f22d3bb7d38c75"), ("272e9037b5013475d234711472c6c2178a55ca2ba831c3ce03ba3e3398766e93", "227c51bfec30930b1972ff1735986917bd7dd43c1e9f84a56b0a2b21c6f006ec", "05d287fe04d4ab2f43f1d904f7c1d59a7dd1d4c56307c628fcea97e961cb2238", "0f459825d9829c2f2c86bf253c24e450c976a047f53ca959f06fbb645fedcee7"), ("1bafde7cfcb6fe01dae543f69a1e6dbeed1ee6555d123bb7ef930997df12719c", "252bc334a055576732116a21cd798c67468ca65540080c86c20cd0eb73a2cc9f", "1f114241c6c4b023979dee328f47a62a8724cbc18631a2024215533db5e2b538", "11ac9bc4bb55010a2b4fc35fe0d4fb914f33710accd25eccd40bfcd3c5194ef2"), ("0ae47c18dbb9fb4a98e227fd10f35126c3c8f9b2a0e28fb3ef9638753e3de544", "2d1e46eb7df538ed1ad88ecafab418648ae857059fe39dab001d9d80287aa715", "20aba8c3d701ca1079013666bfaa9b55e4568a5c93334eea9371852402467025", "12f9d5619041749e9d44189d31f407aa2a464b272bc01652d6baacee57ded342"), ("2c1ddffd1f33e6aa8b16485717e27ab1edcb9afd447198ca30b557f94590ee16", "1a7c503a92e1a9777d761a1c1a0ab3ec979f5d5ce77bea61fda23cf0ceb4ed54", "0d0eba43eafc4c58fef2e819275595ff4191736ef437a204b6ff8dafb8594e16", "2723b33e0dba9bd5ab1df20cbfdb91ad87899c03685c6f24a973c33c65477686"), ("227d0b9e0c92d963fa12d89dc9a583d60df6a60af537aaea4ff046dcdce8103f", "04295e417bc27030b04d97b48e206b26ba37edb1d7509c6e30670dc8bcdea695", "0b1a42f25594f43cd904ecf152a4ab5c89bd1862f393b882d996c159502f85fb", "15eff181aab355a55ccdacb4ab98a6dcdf44adb1db1b5c96a32bbf4f1f3ebbac"), ("189b3ccd4a95dd5a005400c1089508adc286ae6e50654a588e9b839381c2b4bb", "2c449fa517c599e723be1a761116bd0ecb3eb994397e443df80eaa0ca94c861c", "01c513c94ccda27f0f905c2e7d06d1f460a228f13ebb4a217c32cfcc289c4d44", "09f55e2d7b02beeb57afe4926be364721d87af304769d22b474da8cf548d4ea1"), ("0a0b5a70c9790ef21dc50735b1091f03d54e874bf0614b3487e468435ee824e1", "24f5d33c83440c2a4f254975b66cd5609f1097533b3f5a840728d32d5dedcc9e", "1954bf56e1e384ef7045d0b9dd72f12b8d867a43c8016fecdcd014bcc9f867a3", "2d7d4efa56cfe6035338bd6e8eee5ad7b9735ad0aa8bdb3fb25bb08e79d446ed"), ("14adc5a4b11ac43020d67cb77ac03a3589b84440d2c6685b6ea29e183127d8ba", "283034da485f8330cd51a1149afcf9dcb1dcebf19a9ef35514c35fcb1d2d6c50", "15131c7c7c73dfecda1805c5c56f36c6ce978725d5d3b5f01daf51f1ace94979", "0e1561e62d3e4895bd7ae058daa98f14cc1dbee1ec1006725e443a41eb98f2c8"), ("1811733918bdedd5bb8e6a79a2d68392aebff0363877049121b6224ffd7bbb70", "10713058ae2f40f9ef6e18e00fe612ce57193108e8d9df3cd18afc2e79e3c709", "1f73c49dcb07a5c0ca48a17a02e5709029c67e48178159d3283718da19e32011", "1fd1bface32b3e7e0022c5cded5c948876872c55e49602f0e741acb8291960e0"), ("1ecd64621c2bc6b14720acb913ac16abc22ed4a42f99b3d66fc37d5ac7747d03", "0b270bdedfee47c9ddace784c653d7fc0fb8473b60a5d53aace9925e6f2090c1", "2271319cb970cba485463a1cc4c4ef3688646aea59a5bc2c3043ed848bc445c9", "1ce168e22a3c16641e4e761082e8c3b4fa2dff6fb2d22692aed9206390cee9d3"), ("1d6b1df219e83b2cd2a1f53fbc459db098ee552ca6e7e6e96a6338576a8316fd", "1c84ad77b28ec77a78ba5da6e178eb655af519f3f2941e5e256769ed3ae2f2e5", "1c6662e8acc90989f2330f041409e7df822f0616dcb48b751c4344fa78cc03e1", "09d92eb6167e06f48ea52c4549dc80e75360d60a9e2d728bead5037377a71a1c"), ("0638924188e8a719dfdcb9c791a214c9abfaa8c6c59eba0ad386e188705e09cb", "2ef059d35bfb9d51fc0dc06a5022b7a575cb80685e8fc627a8fca902803839d6", "1f05c9ae11bcf0b8eed491feb9331a02fc0992e61b7365bbe04625cac58aaef9", "0d2f6b4b5088b2b807a5f15ab3689ea5323eafc8cbe9376de97ee5fddd4b8dd3"), ("2ed3887a5fcc290e9a6e5fa7b367efca9e26489ce11242c79d2933f0e85595dc", "2548638dc10253208fa3e6eda59bd1802d2f3734680a981a2792f61278656580", "227fe99834d4d8e6d8f63c7fe83087d729f72612633c22002812bcf49c8a2235", "13b7794987ce510f3d8f342bc40099b0bea028b224d67fd85660ddf4170a7877"), ("1c4e29474a539460f0f4dc027e78e2383bd23d69ea12728803d02d697b108407", "2739290d7f4e88d877f280a9d96d70a42dc7352c72f95ee86a858107c9acaeb3", "0577a2b805aecbb0247ecedddc297c8dcb5de0eed2fd4157fe2188a57c169399", "0026252afd81594f4715d85c5bade062dff5eeef74fa4b68c22608f1b6d67957"), ("2c40da4d6a5e3c1880d99052c63f4bc1c2f03bd8f2c916a1db2f7c3555e811ec", "25f8a845e6b370662993bdcb1f9a36b493b5a031b510e1475bc9f05cdccd6a14", "1c081db07342c4bd68efb70ca8cf2ad67d6ca4a203f0365593a2c6b814b64d6c", "164b5b24ff436501fe6bf7191e43ab192de72d5ea89baf323faaae210f1216d8"), ("02821c70e8cc967cd0dd2e68c5452f7722b182aef680dad03144889371dc848f", "2cf1e379ce5762f42bcbe12d165e16d6a9260549f9444351cb9192db2915cba8", "16820e48aa17b9caf12cbe12cf5430f3b25c35451a7dbcb1fbfb908b66a68946", "099228d5c19c1d0e1bcc16281e48d73b61140dae2d239d295af9368c89f3e07a"), ("0559cac208c0d697c52ea7c549ca76c1aa6ece2dab604a5ac8a251754bd471fc", "153bb79e5231d95684fcffd4e42f6d8453938bec13040a9a0e2c2e104639ceb1", "1ffcd6ea6c2b6d1ca03ac276605d3064c5529e66018ab871f4b0ad31590b2acb", "25286e84d566fa4967f5ca7f61f3ccabc7379a0f06c93c4560dc8b9169e5ee86"), ("125aece2bfefcfec5eb914a90fb2809b72d8b098cb0a00b5a3ad924306b148f9", "198f1adb0a657bb590f2fa0cb98036277714c40a417b7ea6925814ea317dc490", "1f01a4bfd938ced79363f6f3585fe9334f3ef6ebcdd041e506932692924dea14", "22f34628cde72a0a482adce78c1ab2eb8b1a79a77b3744b81495704afa0e2c15"), ("154894ab645f9fd586c0d6d1d35ea79c3d4e0dd1c0cbed2e7d8a1bac74c038ce", "01dc6b6b76b3ac07b21a3617a199a83eac429a25b87937fdedcc65755e7e1a53", "0807affec8c158f06c433bb49b0cf1b310c1ebd4e55c57058bdf49e0188ed4c7", "137fce0c371097f1fba1fecdb2028bca7bf34e16522fbf0cb12b44490bda45d8"), ("0f0043548a561c92ad11d4f7376743be7a68fd25a459b71dafbfae7d41ac749f", "129a1d88b7a215b878a98177aac840c89f2c9361eac3aee4ae31b29d7a59f0f7", "0a0e0757950e7156dbd3ca21f3a3393cdc4e9eb3ce9754414d9194ca97a22406", "137bc079381f8b4f20aafaf54177963b92b30be70ec300d887a50c6327f93592"), ("22f854aadbaec5e16a8fab2e69dc54ba68a4ea239bbc05b631e3ff8979316638", "1adb1780e9860539d05c529c54a3f44a9274f682202a5e6848a53429b720c0c0", "1be174fd1cb8f5aad846226d527fab24d3787d4a8f03d61928e9c102120b4ed0", "0c83c51399b93d1e22a43a570ed68ecb3df839f07a3f2a074e5b5f4632974192"), ("026c38555be34d6359f4acf12fde3582d2e27685fab1e9dfef463486d7b30ef4", "02a56e9b27ce707749bdbdae9d6fba1badaf633bf8f20b03c78702aece11dc35", "1e32fc80cb27e7fae26022da8a149b4a0c5f07964474750a75f7ecc2205768c0", "2aebc96bdce1ddd040159167d5acbdf396eb6503a491ddd808ac59edd9c16253"), ("1118281163a3079de552933481acec28548ae027a462db80f3fd3c356fa54cef", "0551596ee37f542fd6801fd4bbbbd7e91bee7ae0e13c08be78c73eb258c9504e", "2a73496b90794dc1c495c81f867234d182b57b1d5639e21e864ab9e1a4bd968d", "270ef32d81a30e6bf20eee2830a422ddd3a93a1ed5f754c23a26a7b6b22b21be"), ("0b5cdcc82fac61c8d15cfd9c6d9578fff88ecfd99d148f96e73d035b8bcd0e3f", "17082cededb149270500c06cf60b9f938e05470d7dbc094310a2b9ea5c522dd2", "1f2b395484a466174da3ca63e8c6e9f4c6d679df002ca857bc17939af39a3422", "1def1f86ce06582a10d07ef554c72fbd4ca5d13641bf630a4b73d5ab5a642291"), ("11fb6ea5ae8970e6e709677ab85d4faf733688ffbae13e36711607a2220c30b9", "2b9b4dafa0dfbedced30d64fb4c107eac5471774f2267934b0cf740b675cdddb", "071694f58641e802122543cebbfe1187703107fbb1b59dec5338711de1760ac8", "147812393e73af2eb29aa07cd4f13210d3cfb00ef43757c0d1afdc65acd85fc8"), ("100933894504b3f0bac4469ee52de2e20425c28e22d00bf997a09b4e554f8cf7", "2007446c5f5e006230dd60abf8258fc562a9fd0516e4ab846e94f1c55d9d3fe6", "1325e00f6afa88f5d92774f03c2e695547865a142a76f4b04ffe71f2391a8123", "2b541f69b228ca5d4a14ddfea56d91b0c051856c11be2c7b59fffcf6dbf840f5"), ("19aa660041bcc12d237f6347b68cda626ada5e9fd725b578bd3f3263bf3ea0f8", "24d90dece32603308d5d4ec7b8c35d289392487569aa10a6890647c2ba689266", "07925b8e3d46ca45c99ab47ba194f9c528a3390bf63a94c6ff56f32ae6b17164", "04c476d3629ae7d97044f7b02edef50db34f27ea937d0aa165b6ed2a6b141a3b"), ("1b1e8a234ab387f259fe97d6aa5594dba1ca59f3169001703afc0530c4959dc2", "277d2ac5a502eb289636a32ee8c199e7517aa5c996cbfbdefa7dc5456b0f7c3d", "0d310ca1660583405c85b3cde95f828b292434cef2a537e75dabcb102b0ebd10", "2f24ce5c1ae88a4aa0070d26050c4bdfc97503e9c5b9bd23e5c614933b6fabb7"), ("25c7e71a963d05fc34f9b7ebf3a817a4fa34d41e2ada8a74b0be274b15ed6608", "0d7d6f225aff246d956a0179db5a88613b9d110715f8e55866b70c918dd9701e", "16f85d351349fbbd070f3d3b88c7407fa1b6424c374dafce3f1f33dc896c3aa4", "2b6da2d5e1640d1ebc8219ff0daeb5188588bcb87ae8d3fb19d301ccad7fa101"), ("01600961164693c68df6622d637ee58f4b31351f2b406b749b85654a6125bede", "2ef874b71435e06c002f268dec9829f2b3fb2da587ff4caa89ca57379d3eb627", "23bcc4cdff1b0faaf240a5f62d75dc0c163b2e2cde15eea15777a074c04cc2cd", "1a0974e4d7275807ca06cf7b3cafa63371701d1122146106a6d4fa615da8b82e"), ("19a30b794d1c8185fdae65f9138507cc0b6c6c3819889bd3d8560471d8c589bd", "2295b81c1d8efd96e842c551564e6a3dc66f876471de218fc812dc67dd02a182", "26f01730065b5ff7a5a33467316786b066260677c5056dbf2f91409437c7660d", "1b85c24389976dedd79b01beca1fe834efd29f3cedeccd7faf83929c9c2890de"), ("2a5f1e34d5adbcfc4ddf4a6e88b52b78f66af337959cc0b30049f1e71fe7744d", "11996b01f4d23fd1bd8c3e25315a340b1c7454fec680062f9b62e1e20a271445", "213989f81853957b1496cf267fffad00356c2cc1248ab0ab6a00ec607150b8b7", "19257b68e8467bbceb5e0bdbfdf2389d0f037ffb87391dbb9dea25c9eac9289f"), ("2f79ee7f169dbb5566862d4c2af81f5a72f8189f0c5364c948da1c1f5e38ef01", "0ead43019e2a548adfa339c5ecab2c5305a9d22bc3f6c2a96a389654c294f473", "12e1d145600b2c21060006a02890f99d0dbe550a10e09077bdcc544bad15cbf0", "16ae416d3a4dc4bbf4f2557fcf495de709b401959804cb1758a11850d754e0ad"), ("0adad48060373aecf38013d301f6e05801ebb8215787fcc6ccd0a0257bed8a7a", "1c47ef2dc04d50b5b8a70e6b4c22358fb2c7b2860327bd25f1683f0125b33695", "1178c9c71e2b2a9d06abad690a8495a4f96634a496dfec105a0da53a1afaaf11", "02b23a9c2e4238211b50f400ac3323bbbbfdc3b19192c27707369daea76933a4"), ("1b9e65fd3f078374e45e40301e091546d5516d31ae2c46ab6e963b8bd6d8c5f3", "1e377673fd8256331f16b0665f6f645f928b6e06d7914e560e4d50cc6a3a8539", "11d71c2729ffde59e3834f10eecd8ec5833ddcc475286044731f5643942b6bed", "2538ea9bda42d46f49326299b2e562a7f1d601f9951bd222405c603f00d49389"), ("2bc910d2827839ff3dee03afa55badaf0711ed75cdcfc781f0bf7986dcd2bed2", "2b31ae046037f8881b6f96681e4bbe05ae87a497da12de055824a721d134e986", "20835e4ff024d6239fd35059ac76296d55095e85c30bfce55132a34f4aaee4d8", "0889791c6dbb1677375c5a04b0c7f34e83b3c8e36057e5eb62e03d70c79fa72f"), ("1e9a47d8cbf0cb5a11afeb96358299b51b18a90c99cceaf9896bf29037c756bf", "05086f6c837f260a9202ca37fc758947aec071f83c60db1a708389621760a412", "21b30f218eb6f0a6739a1c2831eb29418c4a485bc74a8d651965d8c77958ce88", "22903b4059c012352237296983193a1b9917bdccf9f7396c5c6dbd15b99b3333"), ("2defad88a8f641a75f4024b86644ece1688d05a2c9f633c5d1706c0a9671c381", "1545344caa3d63f11dfd8bc1c44be761f4f4622bc828283e55fcb06732ba13c9", "0cb446ff7dcefaf6406a32312a090ac35fa626dfb2989e2c3d871ee156fa6351", "22d34c141838a893aadcbacf52fa799b6dee81cd6511d22e2f7c5d5de38de8d2"), ("129e45b36447d037bfc1e35b131fc6af89045e803ead84f1c49d1aeb961adc12", "23a8d41ebdc2c2c39b76a4de02318c23272fe57c9dd62fb8fd2b8a80977c722c", "298f787d4064a3b7162354d0cadea034dffe94bb5b2263053704ed4749b826e2", "0be3bbe276216c20e2dcd39a47d70a9f5c8317cdcac717117498ff6c51274dc3"), ("061f14d9508709030545869ebc3a816cd0ba8da8a1357410a6c8c08454eb8e91", "26ffa0a0ee6a47dbecdf2c9557863a869db1f95351b6655650d6c90fdfdd1aab", "1a4778245192751daa1758f08e57d11fdadff85970b07c7d0c3dd24164ca19ea", "04d8e611fadddf93230b3fc6de6c458e1aa53469ffcdea8da0dd0e601aff259b"), ("17031f77f1ed767337b69e37619bb00f343a9895a3c6020a2726dba1daadbced", "0957343c2d129b91c91531baf7bfc7563a2f0bfcded27c86b14560d1b392fb93", "1ddfc5f14bbcd4c99913d198679cd253c30fef05bad8a6c45fd41aaa5ac90d61", "06f8ed7d0f2948bbab8b68406ec8f63772f122e112941e9644b5f25d3436ec91"), ("1dec35d2e06a193bbcf53de80623be2a4fe2599d381f6e81e980bac74b490db3", "2c36bac4b650a5eace262318eca285114089f97f747ae7be5e78bd3b60b8c5aa", "16dd5ad0e2bb7df4bfd45c21d90de0e36416a721ecac82f34da7bc9ee3043b54", "3050f43c066231f3ff5c89fdebf660847e97554d4517d77b5b36446d90c399a3"), ("190448758618871867d467b023bdafece65099b6c6513c8d4a54be6d08811178", "01b7140f712fbb2038aeb048152a2ca79687c1e6e746f3f485b098f97a985c37", "0ec63053cb2bf12dd5f32111bbb133a79fbedfcfff843dc2230ac82e75fbcb1e", "046f88877c03c287faffd5dd66edf4a6111ed7bcce74fc9b9ad13b9a8713740d"), ("1f9edecfcc609699081ac79b6920ea86999a431f6aa9129b666cc0ff150e00a4", "11cfeca83d05972c6c4f9fd7d8436053951523f1d15e7bac14deef23754a1350", "0bdd29acd99565cfd03689c2f095a72c8470d857793842fc5da2ab0e64eee043", "26044c8a69ca235edcba11e920f3a7cd14511c3efb032974eb8741876ff3c2cc"), ("25f07d872fc90da63df5ec28db16c293e4d1a5337339d2200c0f903552d82fff", "2392031995b5c13ce25c9c2c189dfbb17f254b5b0230fbe399f0fec0473498fe", "06ec2f4c70610c99e6db5cc2c8dddc177d5cf8699a873966241ac34c16d29d21", "1b1389e22960fed4ac0b60c03de731a2ffbb3a5cf6bd1eb18e64093f31d26137"), ("1a8f05f7945bec66f6317ac0c3d6c34ef1bd8783eb4f698b14d31bf16f442e9e", "26e178bb79f5427875703401e66bdf81205d272a44daf78d97c6d719242009bd", "068e9bc4b0e45a07b11dee80bf138323fd6b69c54f7b9539e79e61549627ffd1", "2968ae4c672e3ebfb3365c732bfac07bb34ad1981272fe8314730e7807bf3eca"), ("05ebfa22506d53065041cef7957427c869f5a5dba3520314a019b3258e562a4e", "033de377ed333048ad2d62ec38f174908ffb867cee41e97a535397ab2272c864", "1c61f99335de689a00a0bda285c4f2a8cb816b62efc8b9e9ae8259acc9947579", "2c3a993310ee7cd8d90e586780005e31a2bb33f43ca6bf40e1d6b9f6aae62366"), ("020cba3d419d6b96cbb6d00ed7f9e74c7cc26f5c866960e8f4f83f51514c8369", "2fc62cb63920ac6e903d1c11e146817c2046a21cbeb14a3058e4e29cd48f5119", "03a5932b482f827697317742c5fc15aec7791599c05efeafaa35ca3724ef5a5a", "06e3f807ab174f73c898908a2cea147393c9cdce91175c6422303cce15e2ac4d"), ("1109514a85cfe1cb63102ab9891b83298ffda4fea496aa6e723c5d0205ad3e8a", "15bdbcc85ca3d5c1c9ec8a73d48bab63dff16ecd6095e28885e0658117c5e704", "0a48de62776c636fcca8ef20badb83cee12b4e7d9e953ff3d007f550578d376d", "0b8f307509b1c15d538bfcf2c491a7333a8db929ca9da250538f959430f39e6b"), ("1810645358e7806235aa18225aa13b41410018b5b92ddf751ba604e167f140c3", "04a1407d2bf774bd294ab404e0d31ff2be4d33c403ea43b084a44bc136f19aca", "286249d9e8f1c37af16d550f6c2b7b9b6cf5eb267d76eef541bd0a1b9faf9714", "2020fccbcb6f6aecc6f0aa7cf030de3e8ad986180fc34e80505f413b33d5faf4"), ("13cca8ebc73604bc54ef5edc31beaa02a7c6192ab4f2b958b38c1b60abfb7b83", "2384ba53e4456c7ed36dd4be65acbb98a0aa38a065ed0a6a4203f0ef128f6632", "0448647b792950cb0cfa59723233d5c7e601e6284ca39235ee33e84d12a7dcaf", "2c49faaac1f090281d5f423368f808c5ff770da28a4e544b1defd524fc47a47f"), ("076d20278a2b2f1fbab69a614ca773ebe3f0d8812ac440db2a2bf2deaab14dfc", "15e0c730091616cb88bd71163db2d9a3f2efd11e21c56cfdda0580b792d1dd5c", "147804dd35bf24952a470599ea9511c6d38298e822fa4ac231858ce890ff22eb", "11441ee469cc0ed8367dd49bd6ef269c8cd9c7bceeac70109930e6af8600150b"), ("14884af1b1c183042cbdfb62c73412d6dd0d5f5c3e1a01c0bd9c01db66a01f53", "0dd8b02557434e30215ccd61b59ff4b13a0a0d48056072140dbec6485dbd2d96", "2a6a7eb2835f4a926ec748ee349e7dea8b19c56bf920a2930f6d7cd4d550ca65", "19c3a3dc73330181ed893a31fba35710e897ced00c1bf89401806a25fc44d166"), ("1a9f98f546eacde747f341dd77f9df750c4294eb2619352fddc1d74369107200", "0d1e1825927488410ad7bc1d6d4818ed12b41ad08e4670f097cf63d3c54a3187", "2a83ec07ed2f002a13b8e56683f55c3a6fab99b3cec004e45cc8ecc145323a7b", "0d2da7fed19dc98d8a188918513ca5b9b2c9da78b31840b9e3f035aff9a7602e"), ("0122af0a1879f9a1c71e236e95d00ebf49344e0269a7cee5382a7805eae8c590", "0d8483fa877406deb0e3cec608038d2c2bd1d24c3db60635a780127d3bd22b65", "2e21ca50419b079d43ce043bee12de04cf0c3b392346c1ac4fa57c1b57a3d708", "20e07bc5d2d15b770ebd73d02c340fa7f6e6c8a3d6626244ec76d15ea67d6686"), ("17ca8a4b08aad3587c440b86e8cf1b86fd7b23d3e75621f09297c4629bc069e4", "03b53e9180a1c52efd224836cbe8ea74d3a730a18b4b71a7a170c3d163e6f542", "06106d78c80a932b2725b820f822645a7b747c24952cd05fa81a8d6b57ef5882", "08b33a079027fca98fb43974b2b9f404dbaaec9189b437392875fdc144d89611"), ("170870dded2363c98e0eac0f26e71aebbf675f8ae757ba13fd592e19ea510579", "1c93b11317db4d11ae4512fadc7636e11e994328cf980c6b543b4783103a3bca", "210423377610bd41fd2d23d7442999727fb66fb295e8d8e19571d4c77771b085", "0e105eb9cb6fa97356e88d9a73d41a0f7aadb9db444b916f14bbdc143ec60dd5"), ("15701c2e06f31b5306503f3595c67bd57aad9b88c53265ed9d6dd3f88ea947d4", "2d7c1d0b89b4f76d2e1feb68eebee75fdfa2a0c0cf93069dcd1916f118a4e297", "22319cf860c282fd732085711d7757ed1ba44f877732b0c56b4eb160c348875a", "22cdc3ac745e993f3362a7551fefb321413ba1da4f79d1570a3da9bd84604fdc"), ("2250e5e7fb02bad0082dee9873271c96690652ac620403f72322e9ebfcab6fea", "13efa578b9dd1b2d1ee5eee8658bfff077a196b9a71c0500e9c5448beae9d761", "13abd59a1e0accec0a37a940dbcf4b879817db13fda75c5ef4373189da000dea", "2ee4c03a63a6044176cfd19dc013418fc09a8bae65bccdd72b2b1eac032f0c0b"), ("2db08ac2a282db8d173ab28b5982c984b75aca92ff7e5b000b74e6e1a67af725", "042549cd60973e0fa0a38526fdce132c5e89f17cd9612f09a66694a69faa0f32", "0ab0b2c669b59c00a51fece72c90bd6f07444a4c37aa08d1b462213c04ca5df3", "2f90007b1313898724aa8874d178ee3b7e7e559530f14b5553d6d8a8050686ad"), ("0e9dee0db1a30f6617e976af606b59f06561c7c6fc87eb3dac3a980ba78f2c42", "158f3a8ebe3951fd57b1b64703c2493e5cda524540aea3c01b1a1b2fd6dd3f3f", "153f4866278585313f7f558c7e76a6e6c2af9b07f457d1afdeca9c577bfca05a", "0e0f1c51ca7b035ad0448a334957c29a5104afa303d6b2d9a7b74944b32fc06e"), ("039848c1e32687ed4032441a8be017f5b4d554baadaeea9ba3546aa5c0a21188", "181929180540ece9fbddf5e4496e3e6c89120382d45fa926a00aaf6f3580beec", "2a8f8dc53ea6e8d2419c0894a4c6f5edeeef6e5ba8be942ff7b1127d4967bdfd", "08390dd118220639ea45899fd2c6d52493fe6e92a647428896ae5d58bfde367d"), ("0e085e6716108976b316f6d5f67f736d10a5242265a5bf85809911eec0e84904", "01030f11f85d591864a882c06bfe0619aa799310d7e101169136f88ea2ef7d03", "0c2803817c72a19b883f80f0727a088ebd729371f71ebdb20dba581b1f502de4", "0683d97df828faae9470107c1d4513d8ddcd11e071ee976069080020fbf4e1be"), ("017f9b847829d0e8d2210c8a4b4dfeb89b977f5b90e2dd0ffbc74d30298e1b35", "1d95529939629c8e4346e24c30e9767a33db322917f9433482bf6a0246328996", "1ec7fe373c7ed884fd3c381cd2b17d2de29832f9fa480d4b64a2d61286d41a3b", "14323844e3bbcf9fc5d4ef2409aa8be3daef7107f85801750dfdce6f80376273"), ("0dfb6d109fa9a9d9e7cdd576e3dc079f21ebe8d6a6584b540e531f3ea0c30d6a", "1ef0e5a92d1452c70c227f4c0f5f00ab0a6630ec2529b0865152ef6062cb8c5e", "17a9f0d19a0b81825d48d883ea1f83c5f32527ec0ce7f2174768a47cab7518e5", "1e25a9084544be7688c704a7e1bd70573e978d022e6e1a89fcd52c5a971f541e"), ("0c74e99601ad5a69adf34f640c0b1fcb689709ffc3be4d288afc03b9e6f590fd", "2778323be97a45c687c442f8a93ea9e11d9124e9385e9050c0891fe00c123373", "03d8dd8c9d65f1a0ee4d6af68584215d5d3f9b77dc46f01e1c8e77c89eaf2f64", "2e774002733bb1b5aabbce2e1f212f0b469cd9a7fec009afed39b1af4653cbd8"), ("24ccde5f51187faec5ec20585759a21a110f86fb543e4c100049b0c1c2747539", "206013b4869bb30220c2ef8cb1ac98d7d7882ee99354fce0d7f91ec49fb504c8", "2be905d133eb59c2f444d91330dfd1b5afb504ad21a3526bd239493c266d3803", "03cc7d5e256ec93785e4f3da651e04072069ed513b1aaffe7a3d48232ea2fcd9"), ("0a8a1d689efb66c2f6b9fffe1829f81208cb5ce654d346dd28253ad8b2c5d4db", "27df1fea8e0d4b9b981ea196b5de773ba1c42e52dedd7489485f71cd0d1c586d", "16e7bac4cf54524f26556a95405aecb479acf7ffa97ac147abf3d0549206ec25", "1fa9a0a3f5d0835f1f930c954e213a1c13de52550c6bb320e642ffe17737ce7b"), ("14527d70364a3bb77b780f617e6ad6a0dfd27fd8b852a27d09753cf8c7ca961c", "2dc592b18d0d12dd73a5c42d54e612dd5fde8cc50216e952309d1736b54f2499", "2ae7bc42645fcaff74a22c1d01eef338c531664795673a14376e0572fde7ff83", "04270b9ff68274ae55d725e56df2e7f0a9321edd2ff2aadbb95b449ef8b1b134"), ("14aec9eb74546c9c1eb68d34b854f52d91a7cdb05efd109ababe129b99ccd2a0", "21b0ed5885e553cee1f929c29f72e0ca89b46e33e399921618256cfe72b37c0b", "12b628fede3ee09d16e8173ad0f2bd537cd18e4e410708089fa650442b282573", "25398b1c999b5ac9b313984f4ec074e7d96c7b8967768633c6db5a61dd7045a5"), ("2905b0e48f07548b2f6e000de66ce5a44bf80dd2dcdc59187d6259c0b639615c", "0af00269ba83b6df1b8e3c6182320d7f0c94edab454be6cce072f9ab568146ff", "0ae12f3d5bcdd4d3602384e298d7c8560059ed6b3ddeeebe005c3cc79f7945a8", "09cfe19dac7f2c9a163d28845925acf9eff36933d12778d89aa5420e34c484b4"), ("1e12f82d35ec010e8467206a8418eedb505d2ddb109ac402c43268e7f4499159", "16bba34661d32f0f07855f0dbe7227708ec7f846b0cd0d3780b7d4392007e41c", "27760405a750005e0969bab9b08f723ae5b4fa969993661dc845f5589e85d839", "21c0a6c383d1ad4ce2e629a5d3c28286cf47f17a02d3f99c6f8845ea6a1529f6"), ("26f2ac27e7783e8b0377482f6d306d1f4aaf0079e9ad7ea2364f6ee055933dc4", "2d6c889fd9a1fcfdd99f2dfb844e0d20537df9349377849b732c677fe617016e", "25c998097a1192fe1553f4bc0e4f4500c8fd4e31f721728d8e02e4a37a6f662e", "1d061a45cb7083ba08ce2f8ab5d49ab985cd3fee9841feb845c187f3f802d0a9"), ("07ec3463ee96dc36d4d56dae01befe4b8e8be194f8f85cd1d52ef0fb0843749c", "140ea41c2be0a0d13d4785d8107596bdb4ec09aee2b9357dd3fae6166a41181d", "0a61e46da18248321e0002c97b0f68ba861e076d4528004a66046282b4136d4b", "222413288ee936b53f8e3b6fb16c7437bdec267d4b2396fa2d547a7da5b04d2d"), ("0a5cd4b8a8a72fe9a8db4313ab626a5b3b7d111bcadbcf1d1c43d0e79589e638", "128c19b094a7c09755785750e611e0b8b05d610d41b36d8190cec6984f00b7d0", "14b81bc40dd8e6330cb02cb360a556c57fea7ae26237c8f93244e53cb0626fe2", "2acd2017c0f25a95f36fbff402dd19df0c3ccfaa63e41ae92d9e3ce941926632"), ("250470e9b4a74cfe04eb75ec6237781250e633dfad535bcc2303e41350a5ceac", "231d57c0fdba4d8d164e7c0b7e99ed9062fa58bf1809055b42cfa49eabff3686", "0363b79fe31ba937cef11ff8398791f76c197320a887f4bc0a67730b1dbafc5a", "113c6b297586041035455b44c6c894b155ab9d565a1f6e22a032a4423f981ef3"), ("1236f3a54b10dd538068d1baab3c02a245c09115bb36ad68b0f796c1e3d98a41", "1483831cd9f1de07cd51f4c8b0ba701c7096a9f385402b2f8f517eba42cbdeb4", "0228f38a5cf5011f0dd97a6894c45697f932b9469ee6314b5397554d6ef31089", "085b2a906a68545d898a2c88003c15a93c6929096481043d23d2abcbcebb9b54"), ("0e466bba478054b71e42fd58646f187981f2490a66f2d197dac3feca65aab3d4", "2a8fe5d4d173de2e6f49812bd578624bd6dadb12198e6b360cf9a8a1dbd6ca00", "04c5e672728051b5617e4b0f309828b1a1b9bdb5be94424bea9c44d03aea3f06", "273b1afd05cca929a0f6390c7e54f2d0212817cefa54a368ffb5662fea6bbaee"), ("2d872da3dda364410c29a5755de540af81d5dd25c585d70a2538509a6f90e5b3", "1419ce59195272c6e97828e94c91a551ff5d8c8db1bd9884caa20afe612e9ec1", "11ee99ce66d4d9dcd75a76e1898c9b6287c411e56ecccc04cea5ad4ab003798c", "1c0def97051658e68b1f16902b7b91e2b74ec93645ae6b3dc62a8e94de88bfc1"), ("1f316425ec59ffed84c368370de25a988cb519a0ab1d642d7e0a77ba4ad23adb", "25909e5425b2ef452863e5a5fda375470f8d84f0a185b7f75dc293f87c670372", "20dc9e0949ad72fc82be891a3a47bb23ffb400de4ebe3493b68927ac6296d103", "27b877aab13cc1d52e48eb57aaa81081edb3fd2ef5c6a07d61530a3b57b17cb9"), ("00bfb89874abb370d777ff1d7bfeea41d49e845d5dda457da7070d27bbe504ba", "0a275135ccee2b162abf4aad80a8be7e7ed43643b56b86a2b9b8162b0cd2ee8a", "2ae2c482df1f23022b59349a2183963681619d2411bfcdb5157e64098ecdb5da", "2e6dfd5fdecdc52613402e106bc6264a9b3ec6745eb7eeaa4138b2e2398a9427"), ("1813fc7ba96e0a10fb68e9bdb31e191eded4c04f1a87d800e43a6973be4be2f4", "266b135a9c8510e63bb0c661f45cab4f36d462d4ae7d388f555b4e374ffc7fa8", "2aaace94332ac3a30b471e73ba9728f5ff61edbb5e3e9a1b5f9321d78bfdc2b8", "2772b15a6190113018afca32770d4c56a6aa348cb4c7bb4429fec0c19381ab1d"), ("2b70229c5f53526e29d7726feb920f670070f30999ba00310c74c36acb3e10cc", "1453eb341fb085b0c4cc4d67900d0747905aaa8ae98e5ad265da77279c0051c5", "1bb8cfaad19c06e5f787b05824337a564a1486fcc1d8d97e389f84efe6c9a8c5", "2746929f1e0141e73edb107ef8c7ff4a712d5c84e3a504096c367f16115208fc"), ("2dd40adf56640a8c16b59afbe827f7401b9254992369ff7b09e028e79d17d6a7", "1b1e9057787636e5d8c4bf6f7f6d671ded4c3cc1d577c3d6930089a69f70b1d4", "0936609433ddae8e90cfea3b6b5c75244f715ba712c5a6ad3d1e808d3f187db8", "12efc47ba3a8d28fbebd7c0d282a127af2385759816290fe6e970cb62bc72f1a"), ("16cd0da9e5ab729755964da259f29835dff5c5d6d3e3acacaf1cc4b27c1704e5", "1c5647ad71d51f6053764f4ddd9e57a43f1e8a7526545bfd661215cf75e8f478", "28e1edeb7856485f4fa9437000c0ae10ca218ae9bea28fa2aaead2f068776e9c", "0ddc064532e6a4cf18444853bfaf4f0a63fdd576b27fc87f3dbe32351c1bb298"), ("0ea693989a3148ea0eb446139016ff794dec2664c37e7f9edd607611529d3d9b", "0f8bd6818a0c114866c314dc74884a9e8e312f56a4ceccafd94421b681830dc3", "1c6d60638fd7ed2327d977798b3b04b3ef8634ada16f5e0f76cb8bf74c4f25d2", "1d8a7375e0f5398f09344a5548035d92a7be4b41d9aabe0db7992bc94e77d175"), ("2c9de124133db63d581a76d17b90e8e84890bedd87011fb8f8f1bd2c9cd97cd9", "0dab9ba8806475f32251cfbdc8724d4efc26d45b33da78952a520066d5716294", "2984e54b6f83db80512b009651dc1bcdea03a619094dea830e8d284d118d9061", "0ee8011159eb93ebcac471bdb19993511d2ea842c5a0495a6404df89d7f119d6"), ("02651030df292c1ad178a649ed5d78179066359c8c7cc6fb45b164694447751c", "187a30f05bb97d9c8ea7f35b2948eef77d003a00ef5bd92f96e9e542bf2390d8", "04c25f4f1fead14735ff6ca1090bb27f4970f0f7789d2d3ca381433a5fa0c175", "0621562b6778f6a30fefd710e96db8d9d0840c24328fa7205334774322ad9dc7"), ("1201087393b3dfe9a37fdf6a0a4d020f97dde057ba428e9c9da2eece78921dce", "2b371773debd3176ff1dcb787aa285985c870dce6cdbf2813258735ea32a30e4", "11a6d30798ab4f9449aa630e0767c45d310e90742dfecd594289ab6fc7d82129", "2d3c7f8ed1792ff31737e18b658b490d7806df82316711ce2b74f7a205a91b84"), ("2de18a24069a92ac3ffb757d0a35c7d4489151ad2ea6046bed6aa03f8bc74f67", "135b8eda843e5b6046dd100ec8c3c266f8118979e245847843827c69444d0fdf", "2910645cea93a84f62fe343b55ebf8d21667dfa0e17c139ddea11ae6ac213ab6", "1adbc2874bed0f71f5670c4bc79049bc98ddae59c3bbf5b206ac660a4fd1762b"), ("28fefe1c6ecc331cc03b9d9568454da1db0602f02b165f4e63ff37f4175cbb09", "1e6ad2147e07cf2581f4fe7ad280936f3c17d3a2c678804311e57487158c919b", "23eccbb996a01117dd7a9fe116815c9de6aa3e0bd50761cf9c8690a9cff43c7c", "03f9bdc6731531bffde22aee4bbe13838467745317923f307adde8a80b18796b"), ("2a8fb8e24bdd7dda33ba680fb0647115c3e512938c6c94e40c19e0124c400af2", "09f250da41f01910e7f3e25680e89e222dd3b7982aa3f92a21af1ed8886353df", "22d5ce41d490ab7d427068cd72666c7f22c3d08cdd2e5b4ede6623ccaba72b88", "055c07437fe9592da84fe808d518014cc28a3d65e5aaae761a9c950cd16f995f"), ("1da0a672a236d40012d9a13c9d2e9c53167cee3798be69c342a51c3ae1058b12", "093c17318e90e83591fe070b462fa332c0b876efd397df26bf55d58fa8819b24", "25d845c8fd48c2b68e0341d696cb0e5ba0ba4e169be4dd39adaa26a85b27889a", "041e66e857b838ae821870e08f36da209eaf7526e3c5eabf0311af8348013340"), ("2742000dcd4fb88a459c80f4ab965db47a08f8e5a10d3a0c76fc26319b2d0854", "17563c114cf843803aa4057e7eea3b06f5eb4ea4abb92a0c2932fd8790d63b3c", "167b508e8a17263836a8e5ba5daf71713147e6b5a5d1a942260f7da6e76b35fa", "27d80ba727f98e389eb160827eb96e6e5685034309a015f2ebf6e9f30c70849f"), ("046588be2a2b9f85d9f67ba6f9cfba45a0d7ec8a4a63ff38423a9fabf84cca49", "18a6bf9f4bffcd35c985803f8fcedff285b6585ee6f6a4f205928a14f21d657c", "2046b65c83e06a112c2f2b8514178242b3f4a13fb0a147ad95df1295e3a3f0f3", "0f0a67eafb593dac12c99c01ec527a316589949db030b92528092d355f379969"), ("1c29fd07a3b2a3a2be2fa72ce80e3dd95912f8e7ce46eef6457e3929ceffc880", "2852b1dc8a6f03c0e322feeaaf5821f5ea8b1686218a629228dae6c5c7cf2494", "1a16e0e5863e1ac1b404172452d05bc64cf92b8c4436249799142eb5c8857d48", "13fa5c239f5a4c1b2b379c46acbd1841e73c63e767a59982b6b0c5db7ca2cfff"), ("1d8ba582e9b0fa93bc6832c88b5a01c913a26da926e0195358dd0494ba728f27", "0fee7deed99ecb859ed4599e629e993698ae003ef4d1875daef94c7152a5f661", "15f8e930633f0e0199066777dbf1306dcbf5a328154f74da1872529feef154b9", "0d31a895bf0fcc3fd841affa6f161f5d6b55d9b328db66b25b7bea1f041d2449"), ("16b9fb9ca41b4602925e428e021bdb6f1a838dfa0dc9231e33bb3e3eafddc365", "13e79dff66057b4a6338debeee5bb735e80a955a4e83695a55f4c961440a5538", "0d793454e7760b9f55ce84c587230f7151aae6520c2cb1e832ff5133341806eb", "0362a5abda53bf2125189d7f726a910bc6aecf872c2e3777a521392fcbf45462"), ("0095c906c58c3a22cd93d9e193d2d5f38ed6d864e70389b94a96020d0146066c", "09ca05a9f2d2c4997ea580a8f3e82ff682da44cc2c9b4ea696c9fc8f7e9a25fa", "0b878029091b4c4abe5f928b5e7a372185ba7a4e2dbe13ba93fde6a4d610232c", "1ee65baed7b15fa17deb89fb3ddb1f2c804f8e48e25d086395d3f8965b97dba3"), ("050e05499051e93017055944af95a5bfbb12e52cb80f3be330de30a140fc9e7a", "2f717ec12c0beecc6371524c895834940d448ae576b39175248a1467078bf8ca", "218d533b744bcd5285f6362296180d00737ffcf54257d671dea9049f2508ce7f", "0b232b449f0cb8c6df3652cda93bbc49dc8ffb306ef85986f644dc7f7d7cc3de"), ("2d911671042c82d5321cab6c879bf95602e13add0a0d4592ecedcef242d06557", "15c896c2646f87a151cf4329472a583cb475ab9233af9727115db2f85f9dd1d3", "2a947af1234c9829c7726aee2c033478b3678ef53b16423d5485c1f63d990df2", "2c2446cc0b052bca0256be28bd48de4a99bdf035cd9654a6b59a98f58f335780"), ("1a58d4dc24d76edc38724c377cf423ffc95def22fb85e126d4b6f29ee43aa925", "29fb4a91eae001e3af017d8e9158529ce762f3ffe63f72445a8ee5213b0a2ffb", "0c1cedadc3be543895d062ff23201fc057938aae4381e5bf7d5b0c6b324df081", "09e9b493171ca86f8e29f17f8de4f0faaca6bfa302dc4071f3b8e468070c399e"), ("2591601f592b346920c5478b83f6e975217a7ae97ca4dc42b173cef0536b2be6", "06d43d2712e84ff0a269274a8c2aca0d56b3d83c0fac48b7fa6309032b120bff", "1731a3c751a0d4bfad2be5e903d7fd1b07838061017bc38174706969c086d0be", "17d8b2288ef2df5ba124a9246361cd6bda7cd21bfac1d48ec973bd4422012229"), ("11b75ee3081506096992ef2949e533f718b17255fd9c1b8ce03f7bc58aad2a88", "063c12eef35e6a7618aca09da7454578f92ceaa615a1e1054a32f53c609d0748", "09aa2d1a864e1f608a9294c05f253b0c919b5068e62fd28df690af234c081866", "1619e8b04a9bdb15922451ccfd9964d395cdd8ce4c0778c39d0f2a093af525e1"), ("22c245d90aa5ef0971d8ba5db1c629db8af9f0b76a4a119df6f68aba870c8dce", "0cac8f62bb495af18aae2e8f6b8bbbc685498a8a18b5340cbc45afcf14f364eb", "2b8775d8a584d69c3c4d0f2023c925f38c4dfc8b48b73ad3467bc8632b8e62c5", "134f4d3739f528a0ece7ea02932e3b548575b094433f076c69505afc638e770f"), ("04f245ed88c9c3dea856aeb32a8db39397b2b91209658100e6bbfcf1802e2352", "2233ca6644a8858376b53bb1432b6969f664c81696164a830b08e8441e103d54", "18d8130de89380b77ce74ecacc3a278111625cde514cab2f45df7e14c1484f9e", "1663305f101a75ec33bcfd989acc18c5e6b9cb4daff3923ced968661d63f1e8e"), ("1916a2fecd1bdf5fb6460b61216d1bfeb6b1697cd9dc8685b0b9a7a1ba0137ee", "191c27eea2c631143d105ddf300e8f8258b2499352709ed50cd789f45711a143", "1362276a0bc686444bc4965377e04673175e9e1f75274f7eff9eadc6fc210dc6", "2c8d795766ba9870e390f8168a6d08383deaeecf4209e4b08970fe34037cb6d3"), ("2854e3ac2ae4bdeec34d4b89b20cf0b9e0711403332c766f5100bf8cfdbf745a", "2ccb8801118d90cce1d1b3e4201b9bfe460460594c5943a12aa00ae2b065ce17", "22d7accf1974f90661ca0652ae6ee8441dda61fa6d0ba3f666b17e7a78424dbe", "22fc3e3622b72142c5add6b42873e45ca8adb7633f51a0ca018433a02c62b28c"), ("2ec23e697bd63ff6ebac4a2e8c71f01a4f421b2c18ea78e1ce40efcab903394c", "14100e44b1141e1b9bea3890cad381e2b2ff7e5efb3041e31c1b18accd1b1f50", "0ae7e30bbad982e31fa50cd56060df518a3cda065b8878a0a2081ea6d4e20190", "1e3a2060e23c7f7f34d9e69e93ffbfe99e1e3e78725c30a035b4c3d559163f2a"), ("18c3ac11d70fa8f21b6af9df30fa92de2cf2b08bf68b405b02baabf047fef004", "0f4b7001d28d1ed0f32aff9d57df5974d8d3d103dfffdb6deba8c33393d02830", "296c86669f51e45ba9e0cb3a83b8e41ebf9b90e2d7d4548bef0ff45cd0bf01f5", "0050b123d9f87079f6a6da3a0311781d6b9deff279cc78a6e6678515ac60d06f"), ("23acc45f0f6a0673f97eba30e32839757b7f977c0710f638d8ba400248f01d4d", "1f443b551a53bc6680e7abb69ed896642994b04a758723fb7c623e4d4716e06d", "1abbf2b0a4aaab4f0933bd59941470f4cf84ef9abeda44e60bd46fa9b3ca2a7b", "205c31b4284e04ce276e101e7cbe386ebab2d28b959abc85d3f233584bd18869"), ("1fb073e887b6dd29ff21bbc4bf01536ba90aabe3fdc4a07a53a810654dabb032", "13a84c34e636da82b7235173a03fc95cd13d431414b08951de8147b4c39cda47", "08904a448385f51b1482ac797f6439e7c9abb6ea816308bae2e626bc1ff5aeda", "2836210d1759541b6d8237201f0f06954517dba66497ca5d5e4529ac43e07fe5"), ("16b3aaa153562542b9a64af23f08a7d802560dd8c17b31802db81450d2dca3c7", "28fc67db5be971c1d0e35dc8d56ca95ab6175f55a750c38681f29a49c09b4ea6", "1e88c7de7d22f517631b50db73839489f9189726523de91eb3fd229e74cc25e8", "1887bb997658a050bcf89cea6cc043a65db36331c8a560f4c3a4590b41395f95"), ("045479bfd1fbc148a6fa2ac938966e50974cc4c36c2478b9292ca25d07f2a2aa", "22bd4f6024338c07e00b628f5a1857c6310980471baac3d5846c0fe0452ba403", "0a27c961b3c0e8b7962b47101ed83b9c340ed4e8c448c9e9d575cd888799fa93", "278a6973b31e064ab01034b9cb31bc2e2a0327823b000c717d77280bec119f61"), ("1a66bd14fb75dff8d889d3dfe6ce99299a28ce005e4075326aa403b7a3505b02", "2787a80230cf925de241604074e9389de30efc1f72959213f40fd9239d7fabd1", "2cd4d42a33f30aa897b09474c8ee66cab0dc8f9d96aef2951adefddf75a81954", "1f508649c6d9ef04a463aba6179cf9ef80d1d9301bb7a8044141593882bf55bc"), ("048ba95f59a19304d0fe774b452b6043bc9bfbc5c94c0b659596b5a7ed7d9e4d", "11ed8a8f64ce61a37523f0afe8d5830f0e4d1a9059fad9f62e18e7ccdb8dec8d", "04fad98119b8dec5ebb509b1af30cde9c914ce87b34919a1b34bfe4744486d46", "08ac00f5913ab0b7b95d4dcfb4ac4a52b9823dd574864b2bb3daff92784c30e1"), ("2c0a9e2f65bc4487f9006b23d7a7634bbbc27381a6901e263b31638c31211760", "25bf95a792cb87cf2b86a7e1889a730cf7e5075437902de16b0df16abf79183e", "29898a9ba4ac53db87460dad35cdb11c3960f25d36f327ab4f41c7eebb36abb5", "015a7238a37a55aa6b85bc8604c23c0d03ed95a2e83286ab607eaf21aab5f9c0"), ("1e5956ce10c38695eb6f552b603519482b48fe6c84258d58d6a293956fc22f0c", "2bb9aae3035b08412b131fb5d0c82f2293e6054f06700def7c6488875d0da4a9", "25e5f74ca488b66ee893e789aa7329e99b07393b0ef7a44839ad100232923b18", "1fc23790383ab3f9b030f4f20240ad574b2e97904fe2dfb52271c074da38700c"), ("18ac67cf8cdd4136896172984c1b1da96322ea908ffaf48005e237c3b5763382", "00f2b58b59947f86d85b9dfae656f2b139b067fd0d4ca3e0a67b3c4f69ef0d97", "1a38811c9d995b145a2b7dfe7638118d25fcae26620fc5e7b5521603e4ee5b26", "1c6025529cdd2ebfd8ef146068c9c42ff5595927b91897d16bc8824df4ff2332"), ("122f2d06d59d92f0e7398596314f14de0bb11d7cafc6ce3b56e5973ae5b20ca9", "0e46ed790cbc1f272b098bc425724e88d469b9efe78e6a957d4e943a585e2a44", "0fa3d65ee61609ef1cf328b93dc2a7503add066bef3c5f83104025f6b161d250", "02068fa526bdd26fc4e8bb02408f02f83fda86d9f50c0522b17f25e10cbc3218"), ("2954729eeefebc2729904a9e5de99a4dc47ea22876245c9386e9b23263d79380", "102f3aed91efb069e204c53c87282b4d97ef353ae662a80916a5ce6118bfa24f", "154ad458a9f87dcf1d8dcaffc3d689fb4da71103f73e09221336638819b4dc3c", "241b7c5989c2d33c5f2dbc6efadc50d2da255f19eb085c1ca1eb1df3f9e31283"), ("0703da120e25f6eddcfb5e86dbd31413e5f4dafdb5543ecbb29c79cbcfcbf42c", "28a93f6987ce99e6b2e4524ac6e1a239474b52246d8632150a89d083193fda2a", "1f9dccc106bf7ad9a496a846d34e6590828beaf935786d48947fb7b1e0356f33", "286ca2324d136b98ec1e59aada933b09d948879d6c0df2e7eb42ad4edaba236e"), ("2bb426f3f30a3073efd6c6a11e84c0fb54b7a616d9ab37363cf84e4a3d3a8478", "1f1cff2f2cdaf4f36030ba88a87739719b7e3b382afb12d26c6f823fb90c2ba2", "0ffe5546202c41d0afe63617f5b6ee8c7a750ceaffde8981bcada566bee3fdde", "0330947462a8844b202c02fb2b48e0283cef2f269ac846872306798655ce0e11"), ("169f76c9ba0d9ce151dc323e2af3068a719067d7c2f5e736cec812e103080ebb", "1dfc4834efcf10a1a7ecadc37eb402a710e5949adfdde4055b6be30855361257", "2e3ad2a82ccffcc13929aed3dd871470c0de9e929e0bea0b81999d18b85488ce", "2c2d900ca970580cc79e0d1cd92a5c83ca9657e6ab23ce791cef0ee0741c48e8"), ("03cc9b5362002bc1606c823f98d1602049e7601c0567c1dd38eea10230d454e0", "2af7b8ee9e26737352bfd90c9483dba5b1f7ad35a9430a42eff2b3540a18fa92", "2cc6a00a795cc6dc35c29635524abb7b2c09ba3afec91d16ac1d66eb323b7610", "0eb8f5f3d7ad485b1ab2a83dd7e6346bc1d4ab003f2d3eec14d6aaa420db0a5e"), ("066818a3c24c7c76772c025676267cdf17467a89016d99a0e8bcf2669a562e4c", "0e0e93e092c3831a04610afb5d21dd154620da101daffd4c7c4bb9e6c3df0389", "0f360163e56765a7602380238e03d1f8fee8424ccde8eead2f17870792a04a4e", "2dccb54072895d5e7cbbc2cbf259bbd99c0b7163c5bf999a83b7df37008a97ba"), ("0ed35e3d2a1ef25c244b2f7cb8251db40d65f2b5905bd727601e6e4736936f94", "0251dc6fac2dba40d6a231089036587aa79717e4870314ab73a687d96482b76d", "04f9e00ab5706af2f9dd3bf7de4522f57641f227ddc9b199fcc6faefaafd16b5", "2812fbf4a5deb94457433fa622c0696f9b52aad8fa8559f27228f50cf7ef9980"), ("1749a2d340f95dfabc4b9bdc4b51bd4ca3cc0021ebeed247f41d66bfe08ec647", "23c7d193d8565cae11804b5f95aa68bc530916feab63ed1774342f3f1db05abe", "1c25c7a2124e315312543592140b3a096465ae1e0d7f87bc39b670ed2f79785d", "0ace75fd498494adb990108e0a27bdce2c3892a6b641953794dfbd9eb1baf580"), ("2444785afb1bdfa15c31f7a632e8d040d713be0fb156d4d0fb90662ffbdfb62b", "076947a6e78269c4f3b22a4273eeb53f72337e80cc96705400ab382f8ab02b47", "2aeb7d4e5caf33fb1de6018062ad31e78a0a62fc6c2886f731db1552e825d12f", "294a0a128f8bed69d3c0db1b7de77fedffdfbb485f8dcf40bddffaf796a7146e"), ("141b9b45a43bec978ac3661052bcca2db40e9bd6f71597656ac4532ba8d688a1", "0168e2b72627ca957982ed6b349da5fd6bf5d6eeac38fd57781b5e680ff30442", "0a1df148cf26f683c4f2ae3d4989f32d2736482508dbf6764d340583cb9f78a2", "034bf363b26e903a1428fb2e7da799825f1beea8dde883fe538e9c2aebd78637"), ("15884feff713d1ab899eafecbd01be871df6e2d4e4e6adcbf36a4f4fbf96442a", "21e8c7547a005382fba6071868494ccbda941fb6bd79d6440e86f38f6ba57af3", "2f8d29a72655bf33746ee9c56f7c202fe9416e3ad762439c3d41b3beef896713", "269cae6e5b08873d2f9e32b927b35e4f35ae78af7581228f1afcb7097fb9e61e"), ("13a0280fd11a87b0220a204a3b7253348dfed88dd2980344f64c4caad76eea90", "018cb5f5d59d066e0c4cf3686303e9686825f80e412fb9b67c08558d8b2ce3e0", "18dfebaaf33ad00d077a6c32001a9f91f3f8d9a1833444e31e9eed94809c0e7e", "087fe849486a81c01d5811dcea60038fa9ce8c99248b14a982ed808dce18b7c8"), ("06455ede660ecb8210e84ed76659e0138f8320fa878e6e7f674f1a6933eb3e8e", "13b0e4fac63db63ad44288ec3ad62fc209b5a4ef9324ec141910de060f756cc0", "11c462308f09c75424743aa75c161257a9679b21a3fbe46a378b77f4f9ee6c65", "13fa5926b9675a6f9d1d4539cf6cc813eb529ec50f4c8accabb1e7773dac8353"), ("0d57d83a8b3ca3cd4541fd66e386ce2aade44646d43b5e65ed23d4b74a3c1638", "02a00c9f4a71b2b9d23b4322e5106d0b298f9fb1d09d81d7d77dd29a726c37d6", "1f578c20e14d1ac61207c2ebdf807dc919a19fe8fde1d82c76502e038f0982c5", "0a5eb7f811420f9c35697674020f6e164e1923df9708835152b6c0f2c88c3eec"), ("2dea6054100eba649dba42a66b1cf8f4663d5528df5cc460ba1ce28d6f568b31", "010484f8255a7e1649c5056c16379a9bc4c8382407f2a390727fb140d72668b1", "295a9c8879fe300dc8b85ef1785f448274630e23944d7ffe3ae5f44b2c5b2bc6", "054609804ad2553b2f718d596778a7f8eeffd7a28e4e47f6453522fdb442ccb3"), ("07e17b3ad73c8f2e21322df8c866976227d0542ff9e0545d798a9fb6d06076c1", "25769f78afd8d6703e11b51d7f4d5259c637d357a137a8fa9e76f6af7e6d83b3", "2834575b43d787f897d6b5c0397e84e1a7c591cc337d01410703c210cbe9aca2", "286b599bdbad91e9678c9aaad3ca98ee15d3389fb5e7a9acd541307b1ebecc24"), ("1b1a3b52e8bb62a4c6d781dcdc55446c407849b82b98830f8dab9ceb03e63cf1", "15ed449500a50a251382bb4ad05a144c969743e519110d8f8046c74ad73625ad", "248f01cb099391910b2625bd206ba1ea43c2c7d2c62988c4446f0ef691088481", "06ae4b5d90ddf4227ea4c1dd84265ee246c444e2b13749f92a6aad3d16d51b04"), ("213d7edfe12b5c60f306e9990549bb90d026ca798cb550e7615e368c152fd42c", "11c42517063e047fb9fb88402398d5bce6c78cffb63e463d0a4acff50921eb9d", "2fd3d0eecefa38d78c5c37abee843a771a018c2b34fec7f84692b7b8b0643e94", "263ae0fea1e01ee67af9e43c79de36c554030036cdb99e12176a484c0d945c3e"), ("0c1c95625aec43e9eef34c378c29e1922fe6624632527d014a0d25e422cc8854", "0fbf0a740a0eb78e6b2bdc484b874b2a47a57b1c3b1905fb217f535a55980b97", "0054ae1eb2faf84344d3514af4922edfd4b3203f55daa6c0975aef27b3a24485", "210754c701a0ca852d7c5276ff8b1719000e79375630754e8187e6b9153fd14a"), ("176eeea1f4ff1389df937ae0350905904463111099bb3df34468833eadfca287", "1d9105ebcf3e048993ab1fcbb046978dbcaac11e548304a3f14d69d098f55936", "10f1b72b1ffb266fef2abe2fd8d3a6124d3fa2297c2d3783298dbf952c9139f7", "26c84a2c63ffb12df0c1b5c8068e03ede8482a8aa58b8e013965b6b9aff67217"), ("16cf16b829bb74a345efe313c840a5667b31f5d7c701240e8b4de734f223cc0b", "0d23955b8640efa123dff64fe46eb549106ce8ea34bb61830af39d1ea041113a", "05737d0a735c31e5d1c3aa1db315c0ec79930f83256b601c9fc296b91a1d10e3", "0d3c01ea4e92ea1e26b2c7ac58c31a8bd3bcf6a4641b6598250a25d017070ac5"), ("06cec15e191cd5e1904573ad627005251c752edc8dcf5c94ba44047c8d2b91d7", "08d9654096c59f07d84a02bdfeb86c48c2635af2b03c50315ca9811cb5db4677", "09740dbf977b8a6f5372f1362cc7e85d0c617b115aedfae33dca6b1d81ae2e08", "11076f54807a50997a349a16108c4fb67fe9258a15a503c8e03e67ae24122add"), ("079c6bef79c9f8848fc143115914dc2b7587bb696da40a5e2d56bb012d94ad3f", "1ebede77cd20da28bf66ee19ed1114e0ef5eaeac68c1d3e922dddf589bd0717b", "2b3e37410993952143e5797093109904d8fc61d987beb39bdcd5b7dde7079038", "0c8f9aa9411f076b12734daeac92985d34f591ebf1712b7bbf5a045b6a7a565a"), ("1ee05a46a59beee77b7f9bfa4faff4840e35f3d51893b673d56146a580e55741", "1fd79adfb60c3ecf50390c4b80d69d5288102c7e4d506471d43c1c5cb545455f", "2bca8e095acfd4b7bd5d156fbf182c05833c6bd7d85db43ec2137ca0f57d90e9", "17b21e954746597ae1dbc198184f0cc9c0f4041f3e577d5aad68d0bc593de6c2"), ("18a748893928faf95db5627843800feb3c33f583fe25317569ee265e059886cf", "17470d927627c3e585dfb562a918b9bab8b7277101c6d9fc95c63fbf8a8a1533", "1da6f11a708bd632326c551c215e8cf8c2fcf0090bbf8d98fe098f9b9dddd780", "2a6b54b9c8da7ccaf6bfb8b239342ce9af7ff7c4707b09f93e46de1cdc51f35e"), ("2061295b0348a77a40bfea59f16b0d040c6d7f8d34d5def38c797d9327877ae7", "1fa48ba9166ebb6ba7469cbf0f5790a243c8f3f997dfaabec85a04b10b8c8146", "18fcc6dbc286b6dc5e676b862010c4ff6b2641a06c4cee1874f96d0f06f3ed9c", "211144beba173fdfc9ea3ded79a5931f7527bf204a06ff5cecb7bd495efed527"), ("2f7aef922a818eee1eadbec46ed338fdcc5b97584e9b232f76100b728adc453b", "1348d4c4d2527276bc432b12fba417d5841bed9b5ab0c9a20647598fb3b23c28", "23a21a6ee9b178a08e97a157d74a058e4dc7d300ab36fc5969ba78ca013076fa", "1355ed1b3a8d80ed88419c702cbc93461df98cc937c2d4227a92af9deb8accfb"), ("252e3ddd208906b14f25d65bd82cb2d38b9527ecd073a5593202354025d09ea9", "1f12e5694f8cf54288c6e80f8a7ede9bb5da5437fc9a7ad6e335e97c15559a50", "1085d94de223869cc61a7fe0d30e271fde3e376d7d5d05ceaae993fc06952faa", "01a24937d5ee646817adf52a5da2c25a9a76aba98a3715397447bb79731b14aa"), ("17e445411e05354c848f21f49681ebb7d9617ad1045bb5b4c3c249d82991568e", "115411424f92428112f0ce97dec43a902e0c644011a31887bbefd65a50798dcd", "07d31b6de785d5f2dcd4658133fcd751d84f4243cc2939773279bdbfcc39e055", "2667f8c2cd001885087f0de24be071a5c771d4c41dc7ee36e793842c2551ce39"), ("26074140c974349647ddc1110b1d35f25512cfcabacf290771f189358cfaaf62", "1fed62cf32532eac1b4e8d9ead0659cf9533f0d5deabe96b8891c36fea1dcd6d", "24ab37caf759cdf67e7e7af60492fa8b2b2f9ff794eff81318e7d6692fbe7e91", "134b2918d01d6577f5aec236667ad9ae77be5b13ee27dd933ff289d1f24cf26f"), ("12e8ecd6bddd92f33612b7f4937b33be551f0486d59ac3ebe22841587a8919cf", "06512ca98b099f9c785a6cc45a454791509f62b77fcf02bc75d447e574397a54", "1cfe3c6c5e81efd67b08578bf50000d937f40bbbe717b876571405cb1a7ff540", "03e1499297ef4a0de0452bac2182bca90d29627f56ae548a88c33fa033c4f286"), ("2211afd4cd35165c2bb83995cfc0a04ed8014fe691b57698bfbb569036453caa", "2e1bb4da96d53a917167e589f7ba9aa3baa85b371fe15ec3aa7e8d21659c1415", "0db849bc8a7b1e67ee5c250db5945a92b1f2f9cf06964a61d33d73ad80c1a248", "2868d116c4802074a8a1b117b2d4e24bd70ec41b380c46b206f7c187f6fe9135"), ("0ea7648dd48e5edde0c04b4f33539a3c10e860311c97bb2a850b40b79c18344d", "1144e65aef8dc8921f09056276991f86f90868c4135f551c95a4ab69ee4eb650", "18d758178ec846bc70f309afbb3abfea9dbc08cfc376662089e860edac735c13", "2f30522c5fb7a8c2bf004918b72e83e94395b403fdcd9bb063f5205fcb8edd19"), ("1065dfa387694b20fdadcd7f370c4fe82c5fc056d2413323fee27fe1f7e57338", "025befabb9c676caddfdc658a42555752f30ed78365cc2d8b66d8198e776613c", "0dd14857f4e0bca9dd4f7235e38b5b9a16982cfeaf5961675d2e021181a30066", "0d8638eecfe1e91a62ce627efb219cc73ce13c690901677863b96a7aa826b5ae"), ("2e9f002dfae1a815d0c1610030ee612f082a7d7a0894aec3e888ca9bfae6a8d0", "2301c886034f4fd571e1d439941a2ee5acb314c76da55bd7ef60d88298391f06", "2676f9031aba4fd679178f5016c4350567ef33bcbcd76962952619c7fb4d4c8d", "1a86cbcd5118bfb10e49f44074d2a14422d614c8a34d924ca78822f93f637909"), ("24a5de6c640bf70a5b365c06182760f205314824eedc5d9e4a4197587e47698b", "2ffade6b4f798338f53ceee5f2c88b203a03d43a6b77c204929464b97504d8a3", "0ddc99c3f37e775af6f3eafbbb5dd87284a92d9bf2b87bb2f78d5c911f22acc0", "2021a3d385bea4ede704e718817488d3856738769efd49b74d4bdf81a5ad6791"), ("2a04d384ea81d810d5985b84b6c8ff7e038be78f2485319a7e9403b43b48236a", "2e31367efd077c48e64bad8b5e457553fa06d0bdd0b7e39b85a9ff3993a0c199", "2795e54450c23cf21ab60475e838d425f02ee57a219c8f8b089d6ebd6037a7e8", "0f12c7d7a1f9a98317324430cc8f62f79e912519f9d3aa65235b66aa505e1b1a"), ("2b0c03bdc740a243cd905fcc82d2c24381fd5c5bf474aa51cb4c6190a71ad6de", "00ef95a04625e35ba9b6c06c17f90801edb646ee2cdd46bef01e8a89bc9ef41e", "02a464415fe96ee81bbf8d110925faf32f87bcd1719647cb5c083a49b3c29cff", "1c6e87948c8065ab2cfaf769337025c5aafae9277a499b1e13cdd84dab5d866a"), ("1792538726bc0f45f23f79e0e2fccf26621fee22d63e8756e03148a17b3d0f41", "08abade27a9a0940bd675bd4ba33ec2a5afdbb5de19b71c91ecf7976a4c41628", "073e0be5003f9af617ad4a2a696620273522bbc356a370c6541fa1d65f2f86e1", "11f9e60e06534f0253d0f26ea52799d25ecfd9fe581ef01c9399d20bacddaa5d"), ("14b9b9cc8f2be75fa9868adb9f9d1df68680f1bbfda540487b3c4b214ae971c5", "22f5a8b3e2bbc3950e0a31219c9542b2f42d6ceba9f81d9aa0c2b31b68f85eac", "038e07e16d1e3da396f5b3dc939adba06beadaa6f23b889960a200d1dc134ffb", "1e25294a8c9d3a7346d5dc749169729ca2b7993d3210edd892d32206a423dcfe"), ("106d4f382a6b3ec1d3c2c2bd6e255201f78c9f367d1f2b11ba2c2e6d6ec63a2e", "2554e7a3d905ec2df70939d18bfcc1bcbe0faa8b4432bf934106457e3f80e86e", "20d501e64d382318f011a3b6312008d41c25c11c40a30f60e6e6f7150c838468", "2cd02b39ed3a1dba91a8791819324c2b4aad664077407f3a4814b70932d06d42"), ("01a00292cf1abb044414e8027831bab020e77d8437682ea8274597f185818e72", "114169de515b46c61c6bfaadbf776547ebb3d59d6ed39af904fd8828617e58d7", "0af1b1d9cbdc9603dca7cd59e4925ae98d393f707b9fb5d6603d850c2cd1799c", "1300e979c704542b62bbb2d7952fffe864d207a19ef789134a2470bbc7b68c3c"), ("06d5b12e17607ea648a11da6243ba8aba70feaeedd25b3192bfe276f94bd6f1a", "2e4c338596548d6522e1df2cc161c86136fd9746bdb48d3f3f676554d7f9b9c8", "12a1462882191af96df627f5b446a39e8413be7a28ca5a88239810b2814d16b2", "1060563bd6fbd7774b375ed74cd4081695f05023b9bfce7fc1688e8026790bb3"), ("0a90b25a0860021ec640088a138ff858160ecce428a0c1f2f14eca6d0b22fbbf", "15ef2d00cfb92ea61fd9e1b02dba05e2a9efa625ae9f6f4c44618db4aa9460e8", "2350247858ee97d891b819206efe353fc5c23f571b5b23a53fd86f098fbc8006", "2f359a8223fb42a9aa1d9359276dbe3bc3975d60df250ab90026d6b2ea3f83a5"), ("2a41bd62dff3098f021286ca547266ae1efe59b4d7f260c3eb48195fe42d3423", "18124124bbc12277b7f7297d3b0136b6660ef6f2b707ebf7f0f158dfbae9b280", "278ffd0123bb89fc9c5e9b76c3c06f304cd7026186905f254aebdd926183a04d", "204dfe3a2f4a458723a6121b56943270304c7920664f96174d42ca6a098b64aa"), ("0c751ad39e9c608770b3b4a4d5ad8e80a5281226f4e1eaf79dfd8444d225c386", "16f6cd391f0bfd11ad1eba53a8a6a90988fb96a46deba06003f081499d9f4379", "00a9a2dd6ec1b86ee4a73c8060314f230b288078fa3307cc82aacebb0dc7c824", "2895d7bf43a3010c9e169bdb2efb4ce9d778bec46284652a1d368456c172c236"), ("0324fea7b77fa9efc0ec09df724c1e9117a23923d1566bc8ded090c765d899c2", "21678e9e609894d8589934cdd55a4ef619d4b0fcf85c19b63d3bc795b3ca3472", "0fe12c93d04c6e9da1efb1d3d94199643c7116c0f5466b1bf352cacccb8e2a6d", "29b1a4049bbfff8af9eb76b8f22a8562aeb075fb58a090eccc19fd516f1e4f53"), ("0f3508e6d184414776802916f0ea8b072015a4f87ca14f7b2cedb65e5b417c4d", "214f40b7389b3065c810c30c5313f66713335993571c7548e3db502aade90441", "2a0c2c13ebf9f68632cc9879598f2faf323faafa71ed0fc89512420219dd9a62", "0d22245993738a98f926c56d623e43b3de704318a78b9b46f1b468cedb4d0e3b"), ("29a88e67655136920d6e2916a5ea981bdd0b6219ec356553a1a66a2b4623b321", "0a0f2194694777a4178f7f6eb5eb6ad1edf23ff7b8b59835605d0e1a43fa4403", "012f348b905bba8532c5de99e39cfb2d2365829f1a143f0f637b2cef0d9fe130", "12bb0ac32fed8db321a78bb30f5243ea2536dc6b3df42439e7dadcfc51683d68"), ("19bccb337f7ae9c308d3f723967db4d1f28c265fc46e131ad4a49fa450cf34ef", "126f4b10987719dd4ea07e08c3b72631c088e402c6e9c980dfa3174a576b5513", "09e37dc0836c35406a7c25f995e365d2e7e6fc8dbe12c3afbbf65c32b70fed6f", "005b67aa892e4fdbb95c4880bcfb2ada860840855df9a1c20feeb51826c1d03f"), ("1c3af5d888d092a23e73fd2bd86bac190ba3d73b820dac0401bf00df491768fa", "0b4289d4d09e6feb16f82d455d8424dc72e3f14b1afd7b0ff04436bd29c5ea12", "273f454c983563366494b83678e824246211761ee93784c37755e7744707461f", "2182bf67ea0ee53a18d6b02dfd7a0ad64a27196ad56378eb6f8d2efb21af5167"), ("04bbaeffb29e54cc394abd9e006d2900bc2acde7fc227533d8777569699907c6", "2e55f396f43a409c77972d434f9d15d5a3760a7e87fb459519ddd250e6f0f403", "18d8956594176ad4461db2da4d2d7b71edffc6648d07a84060ed68a7defb96ea", "262aae47ebfba429ecb32a56cbfdcdf2eca046bd6d81a435afb09e3d0ee17f17"), ("2613fb06d70ed1ed0f8943661de314d693a4da7bca846db3ae31516268b361ce", "1602977227c7613f219baa6214412fd54b907238a3e7179185e7f80b3ea74d48", "292084de330b29deda6607208c7a2e945a8dd5bcaf621b0c1768a2322200f9de", "230d0f21f27cc4aaaf6e3163550d8ee2463eacac6a858009124aca9ed3d95fef"), ("05f4a3a1fb0f440566175f18001488cfd51766810b799ae17389e807234fa1d5", "13ead7cb648d9dbbf35a2ab80dc18b376985c22506402216571c32d986ee95f9", "0fa162ae6fb2fa27bb00af13e992a469298fd773f807f7285918ef3913d4e939", "1ba72c026d184f3ea82fb4cad4d116b5705c3203ea461fe3185f53738296edb9"), ("2416dc7e744b61b2644dd476ccb127cc9dc44dfd82aee4c2a0adfa89614e8963", "104bdd0eac966d92959308b2d76554647964f784bba5467ef5a36e623100086d", "12dc0df2837b7fe3a8860c6d0918e6c62335c76580f7f2d6734c241eabd01368", "1390daf28857bf775d3bf77e7681058a84d696cf04b7e74fb917486127e350b4"), ("0f0e5f2181ec8a9acdc7fbbf2e63ba621f2d7634dc30ca80dffe843eade6bcb9", "17812191cb1f9791173cc04198715ce0a69e71f163e602fdf698a68fa2877f79", "191925edf5c5c5fb5beae7f71c74339e02434eca16a374dff2e3499f8472215c", "03960fc529cf216ba9c01cead5eff84686a60cc0a00a5932635fc9481ade05f5"), ("0372806baac62bb24a4f911bfe8149b8471a7c8a43b9ea6df802f0538aaa82d8", "1934f5520222fc29c164b5d9e8e92b3437b9db914c9086508aaa863875b597c5", "0f9bfaf4ddbcdbce65e3dfe2bb83f75d5753dad878280cecff621161bbdeb504", "014af9ba70d8571706255c9408b6e16a5d5c84e0c14a2eeb02bd15f3c3ce3047"), ("077c64a8302273693f60c13a748dd6d10fd8d9da499c2826151ed3d52eeed7a0", "0ab1a517a8b399fa9794c64bd3a3384b045dda5ba9489df98d78f1e97425b6b9", "1632d3c7e483290f93ea92797f7575aa878d908d487dfe17cfcd98d88b6d093c", "261fef7cb7301af3f13570705ad60669abaa2e8c93500f5d5676798ed387320a"), ("2e6a8d4cf0dfa41d9497d0fa5606b874b0f3f034ad49d58fb16222e2cd10fc2d", "0d033d6afccd55b602869d919d7b50352e2fb5f9e59b9e845ee9a1326b8952ee", "139da3b67d206381dd79276b6385c13ffc5698e5df8ba08fd417d85a4b74b317", "2abf3ef8dade6a2722bd35814faa9d76b80d5396fddde72cfbe67f40397a66de"), ("13c5870f74cb029a5f18220d098d1f8034ed15d4b359924cce5c12d22e2243a5", "04dd30a51abeecdef4e8d3af70e9548f583699ba9ce2dd79145f931a1ae30cb2", "2e6942ec50648601fde7b937b6212e26967878fda70135f7e1af475ee97c5bb9", "22cb4f003b3eac6e6af640f7b1bdbc8894f1aa590d8f3b99eadedac745077f01"), ("098a9a70197862e803544ff4754881078a0b330d69df21db9acde816b147e6fe", "0071687de697ee4f432479ffb629052ddb77fd0e392bbfb37318f53160e41b9a", "03c2d3f74ff7eaf0f6cc44c57fe491c881e8a7a335a92873e00bad55cb9879dd", "0fd8af954341c68d248316673b0fe4bbc5e91d5691658351ff98050c31a7826c"), ("2e1acd36d650f7197ff7ea48c0cb1c9cd08ff42140685220ffde948cbc0463fd", "0bba234e905519da99ac2c8ba5f04e01ee7b8ec57cd685195efc101a9a2ce13a", "0b16005e7f7c11223ca039bb7ef1521b2d3af1937cf8bd7aaf89ab031e5af0d2", "27d48e090b93f6b562d50ba1286d5beaa2277a4bf2cf20dafe690e4c2a84a353"), ("0ed6728b29d9fe3f15ad49dec7cc1b608764b40b2caffbb977a903a5b1c3eda2", "072edeca2f68da97f4840c2f6b737062a3afd033654d95547e2bf43de522ca8c", "2e7d8c23ab0c938e4af461f68184dd1c47b3a75d6dc6629fe630a9b1105c4122", "1eef15adf181afa80eadadbad8f23981f492eecca26ad76d74ac1f902764559a"), ("0cad82b33d47bbd19d66c7f4f1639c9d5e16a2c81f9916285bdc855ef9dff914", "04211cb5fc6060b3a0c12faba2d9277cb574c39a9c818a2741ef225ac6002380", "1c0e1ae1660857a6d9c66b2bff8adc68e31fa19bbd7e50dea203abd3197c511c", "116d7d41a47ebf5e40872bc5e6947c511c82c6069c9a9cf19e136926ebca6228"), ("083972e7e4c0fb938ec0f21e33ca0aa85c20267fa30112c35eb182a04f264185", "12bf7459db0e68bb1e5a2101eb791a513591006138fd012f4f22cf4a382e70d6", "0479d03541111c70a68468af4e7d1239175886939b51b31d03277327847ff5b4", "080417b573dcf21c73ae25125f4ee0c90cd344c2fb64667fc491269decbf3ffb"), ("2e00dbce0d86f12bc15dbc397675d6cb7f336e277494f1f09e71254128bfbe16", "2eb935bc54209a3c8fc5ec64b2bc02375896243c84dd1745faaf3f1470ea12b5", "1bf146477ae32964ac63e4dbfe0a74c118922ece46afa9fdba1297ebb57b9ffe", "2d9fe2b45adcdb6f32c9462411c2a266b1d0d0ada7dd1ae007cea0c71c956f55"), ("11d78612f6132b4c9a0b6a6599ba1d6b208050523342354914d60396fba04a81", "12446ae694f58335e65a02245c005aee80ec4fef774d68bef80871d806597689", "06b11fb5bc4a28e1e0094f3fde9dfbd393cf40a45b5c9c2fda813ab1a7f0e253", "1ca96b4639bfed3d85427a65fa619fd2d5684661d6b8dec71b04f6b81559319d"), ("108cb6068b400d5c30a029a85930e1019dc1e6350055b51e96ca826747128348", "1d0b0a63ebf3e364b7140440fd5fac3b363f409896484ac367c8547b015186b5", "0ec3d300979aa06de83ca48105187b56f9397dd4ee2774b6a8081f6b902de373", "1e4de59ae533b121ba69439267741bd0dc1ea2fdfdb580fec217ee8c52a26680"), ("1d460641fe333540e3763ee041a4a54d556061868b2b1ca6a80b2b73d821939b", "18db0cf5b7a2ee7b46ee649fe1e8031d2613be36e2225fd76b75032c80e98df0", "19c9bfb600c7992c6c250be388231f7750d079ea603f7029e94ddcfb51411fac", "0a037abef10ba6a4e36727380ee8f04b6a4fd66ce355f9abb926016b5270e926"), ("07132e1c16c81a10f2dd4c651e43148425afda27cb9043351dbdd4c4ddebb832", "055b741121eb0cbfb156536e18666880f9c8e2b8b1d09c108567ab9c518ca9ee", "0a6d5fd1f4bc84267df61715c71b2786c48937b1a84ba9224ae4b0d320f0ec54", "26db2d90eec198f2611f31459cbc3f0b269eb72a4a31ec1662cbe764712d2a06"), ("1167a39cda48bb957f28804b00236fb73747a7f6b97eb3f08566a54947b975ff", "0b58c8b6897ace3e8541f9968a8aac28ee631188cd8d2958bd5411b49b3f4c22", "17887c0c6c9ac4d7d0899a048c24947c58a8f9838254f043c95a3beaf2992a5b", "14576c4f6a5eedb1e6975f1e8a00b95cd91a541e05a3beef3f5c48f9bd2958cd"), ("1cbd559c9977bc99d64d4fc3ce5834ad47c18098338da0ad533360f4ed9a7d15", "1c8d806afc2ab9a91375db8f5139fb2f638e069412853cbbcd5a4a51cd508ffa", "20da26503f231b64f919248deef22ea20efc90af699ad7fac56cc032db1c0358", "1745fcd9b70a71293ede52c3e5dfc3dda349090a38a570075622146bac3970e1"), ("20cd930e04f0d67cbc338764b7dfcfa48a2ec1f600c0edee13da55854863369e", "0a0288cf7d3423af6af9cc3998d2cefaeb0b39984776ec7b847dcac58cd10080", "11e7c4816c95f348832ae099b7d72c5d16eafb33103770af88bd1792b0781c7f", "1698dad8a7902ce6e86f6c951400ec113d0d859574fe961bc8019f22569909f4"), ("05e6a04673bf31d1fa1609ebc41a1aded5b0a13f56d72e46713ce42b822d418a", "26544a7219cf89ee79c64ccacfd0a5156d17c665b1effd9049546f61ad8b8976", "234a881aaea430a0cc1a5015ee56a0c7dd91391a0defa8dd234a25bc8828f04e", "2082d4a7459606dc0047eb7e53dc8a54cabcfda8bdacd02ad5cb01740d94304c"), ("0b510937d518d0243248444447db81ddc7ca0c03334169ea0a8016881d7d7517", "230480c8089069207ad0bbbaca91068a2283dc23627b28fdf615a76cb31c07a5", "2d27b1175997af579f46b4cc0e0d834bc74f29192f789c5c7fc0685ba50c38d3", "25fafb98f96c7494cd1f503a3faf35cfa76aaa29b6045023ba39710d0bb1bbb7"), ("1c64122dbf4f1aaf589459fd050691c9d0c3046b242ba09013efeddd3856ce92", "16b34d0f54132f1fe92540d618f8a925eedd54dd216505fa8b25fbf3c7e99a85", "08cbf7c8a2b684958aa002934d846a9816216ea6e0631c1b80b3fff077973351", "160218f1317eab0517f971b1dbd8c22df09eb04c9fbb284cfb11ea78a14ac450"), ("1306b401370d4f5883f6d9801151d6b59e5dcd6a4da47e23d0edb5f486e353d2", "054a75835f6989d419495599d764429f879d01ae5cd1308551a138f31895fe56", "021b47d3a1fdbed2775945a51711527b0a70444ff799b49523009d5967bddbf5", "05add8ac0ce1a916f558ae0f2f7f1cfa8392196aa42a384f29c7b251cb11d7ac"), ("2af6a0e7fd51e11b4050a0f56a2e750ba83ca559f01ef505fb2c7a684d422735", "2c752af9f0e119dd10cbe84ac1c84a6d405f60eaa38de238cf763967df579c2a", "0a306666b2c1791dd47784ea1286c03fb8e9ede1e888a2843fb33edff56aef0d", "04f96e29348293de7d9c125e3d0313193d85c69a233d64c251ce4591ce47c1f3"), ("2b24e67623b2400c78bc438e4e6de6e8f4c1433b56dd5c0f5d46b15b64bd8d83", "243fd6a70ef05a4fce38a99d5618f80316b140ddbaf6f60cf00b712ebb9b2a7a", "1be069532807d6bd2e13bd0e208259dde174536e6e0207e536b09fa148d0244e", "171f86b817117d262ab16e85c2efac4d4a9f34c76046536590bbd714b2c237c3"), ("1dfbe0587aa6f48d0afd44c0e85eedce6e4cbc3c9dde73888dfff725510b29a8", "1adcacc614598d2bd5f429f9fa02069336a319d8f77002d8f43fcb77e7a36e1c", "25cece3710af9f3372a6c1289df8b026003f1c0c0cc0c7a698c531590ebceac8", "144b9b91ea8d093def03879bca33895fbb44240f043c9ce555428ead060511e4"), ("2a086f6189f5bc5ad7700012208931f5bd9598d13653b5c25a7aae8265c4580e", "07bb9bf92a29dd002ee398bf232294cfdc050c0cf264958d7c9144ab2f62eb5d", "08dbc6e5304cc19620ee179151dd56955d21102c413dc3898d873b0f3322a8e7", "1bbee097f554b1ae5e6a5763006264a1c3f6a03db33a383a89869d39c002946c"), ("1dc735e3e754748be7a4109e76318da9232c44a7905c97511e6c67c4f0c53974", "24d0e5b8373f8935888afbdc6ba7a731567c0398e4b716149bf7cf982857b1af", "16115e8af2a965874d0dbba00892f282e229ed7a7115fb1ec2a6108adbde97c5", "2a402dbc93fea530a86cdbe4c5fa3c11410d8b62c0f123cf72c29e74de96e0cf"), ("11ed3e024e40c278681dfd9bb6888b3389129a363210c4b33b9b213aa8593db7", "1330c2b570349ea59ae774b4edc06c161fda4f8119e35837d8b3c5f3e86d7dc8", "0c5203d1f1327d02ac0316693a0db1aead5df0d7402609ea284ddbe67d220ae5", "1e737c4682baec074cf56922e4eaf3267cc315525f7b04cf918564116921802b"), ("07b0d08bc93718d036a3fd43d4047409f459cbf0a82b14bcb960bac395f52ced", "2829357f0e9a06a5b9ffa7acbf29ef94b34b9c979cd7e0c0cf3678fef0c9b583", "1ec73c1be1adc0ee29d6a5373b94d61d012af7133b8c026f85a628cabad42f34", "1ce33155a844189a372b2e9c3c86fd9ac41f9066cdb0e70784001865443f30bc"), ("165317f08d0391479543a65ac0d7854e521dde62e339d11de9a615fd76dc7202", "08cb1450fcea7acb8dfa5725891853810291ead13feac4b5c44a7fa6f441816a", "263c0d7c82ba2bf3f6a561cac444bdadbcd70aa758cf3c2309672791a9ff8df8", "198d6cf55f7900343aca8530f425bca2de703f6c9bf18e2f510039f89cb4fc6a"), ("1be40d484d08dea801ffd1d0f52aa9b3a4eb57a913e4cc107d32b54c99d68e02", "1ed5d40c35258697ca981669f547df74916b57b907636b365fcecd116ad41674", "00ffdad47431c2eed7955ebeea351eaa900d7577f5663c16b99b2e4bedb3404a", "02a267220b85feb02d5bf39d5e2f4b7f2158575adcb361bce6faa5811c0eaad4"), ("04153bf9c08f1ced1a71d36d4e5e2d2ee989959fc6b63d5c16f2920d3c14ccf3", "00bd46f79ae1554553417cae3ed66324144faa8004e2b8b0fdf818936114fefc", "0676be7f19856953204e1c5aa4a9042e18ac0776f68290701da5c2e4c373197b", "2a4a20f1fe1a81d397d3ba5f73c157efc72d2adb0db47a5c37cc4ba6770daa38"), ("2a45ddd2152be22f1f161e165651ca3f85e4f4f0434b037845f536668e84d90b", "23ffe915aea42ffdd21d5bb1ad462003e7a21c879c78ffee3e11b524ffb2c294", "2f060383a10761019f8df7aaafcad5505cef3026874cd7d2c39d3e1c2e0741c6", "0de9a6dab789aacf0169cbbbb1e8f0d9bd5f6451700e95e7f6f755f29a463dc6"), ("035068ada4c50ac23e7b9899b01d46fd64a46cc187695c1c928041bd5d12b3b0", "18b082a73bea12b37369e1f80e6e4caae35ae34ee018bbb184456f44a169da65", "1e9a85a011b7182b05b2ff0aa14ac1750bb9f4f700b5bc38a57d5fd31d8f0ba7", "122d1734fdfce4285a47fa3d1f75005a803b6a60e3b8599e7c39bc780a877e5a"), ("16333804ab87e0f3e4323585b8d34789b1aa70a0b614c582d6081ac768564a50", "1aede3e54cb40fb95e919be8edfec779d1c5f83446774dea64e458e70d8dcf61", "054996a68461cfb14dbc3de34e6766e633b100a659523e2895c9107113df9791", "1efeba164e1d32e2ccd661ae1e1f25c486be318e61bcb2ae52e95fce24e3aef6"), ("22c9f3425650b8df7c3b0f5ed824ac80d5a0355aa6ff3ff608bd634c5c77e135", "036541f46923ca46d006125ceaffeef86eef7818fb50c67389969441dc6f9ae3", "2596cc500e7f1f24a7080cf70cbff5bec530b1409505e9f63d3069a6c83e3f61", "17674a0771b46b16f50ae70386f6a80ce3712f7fd87fc958dbae3b2efdbdbf6f"), ("0a263e835aad9ac1c2cd88ead71cb0ddcfdc2863bc0699eb1cfcb5da29ac3e30", "2cc95171829170f5cb62c79974b5e2c855860ee7ec84fb9fdd49212490908073", "0c4f1065ead3c920cbeec18c4e9dacbbb7e8b7b1c272b2cf5601d20cc867dcd0", "2eccaa853e3e8a6707f3edcda2645b702772ac669745779898d676392af69636"), ("1a45562cc8ba5fb07ae1a936f0edeedec0ed4217d4ed8a5b077414640fddabde", "20af8af237c7f1c7bd4ed7cc15f3fdc2cf611f6eff71832a4111e97d397959c5", "233cd381de220795b688d10aa05d43167b280f36552e8617a6c9c9930e31f594", "1009a39ef139f151ed6b27a6e0972e37884a60ac5ee538f7198cb7bc583770c2"), ("0652c1b8fa839cbf82e787a2cc5cd2450b881779cbc1b230638d7c535255a9a4", "05c3f77666af5b2a6275cfd9578dcc957da01defd0be773fa995a364d615631a", "0eaf0eb60c64320e60d06fce945c58ed7db280409990eb200244687fd0069b7e", "25b99ac1f0e9e253865704f47a660f00a5b7e10f71862cb840b654ad0722c2e8"), ("1241cdb347fe0251101185e9f6609f6d19b30b80edccf60b09f0a62cff7d831c", "0c9215c1f3bec739cf17d4f10a15497ffa1b09e9548ce95f0ea613acdae35ae6", "1f831003bee9605700f8d270b8431e968fd1e42e5934787f28d95631ae873d1f", "0c9a2e8b38e82e08c0eca7b06b770b988327a031592da2fb764cac92c85f07f6"), ("0c0170486baf5d1779c2f63ab629c2eab1c7cb35b929bc629765c447525fb2d2", "27390db782936574535f11e66a39a20e7019c74644f8580830b68f7a3bea3110", "125d13def0bb0015e1a23549df7bc07dbcdda21a1732a2220ec6082650a1e092", "11708e5c291eb1475141fd8ba4b532705d3325c556864a073d3687e2113e195d"), ("126f0823a08d904055926a4855a9fd1b6fecca5c8191bfe67d28feaf0fe666b1", "27bdbb5678fc2ab5c3ad586804f14a50d0f8a3229ad3a2d215eb9052cd8b8bbf", "087821e4a5c050806820bcb8bec8aa8f5e6b7badbd992475250031b53fe8e3c6", "02f7ba72ebb4460d2adc76837dbefb1f75ad726e729a91736cb65a04ec8cb8f8"), ("02dfcc0c40dbe36293583d713cb2286740306e506fdb4f6597dd328743dc3867", "2abb301605f342ef4c5731d8f69b14296f4fb16b7857a2103df3b11004a69ff9", "1acebc08206467b9808a3fc5b1e653264f78558b25842deebfa98fdb3305fa62", "2d229e7bc4303339ce12f76cbe9318a9c8a76bfd2b4ce1d4cb467a257c444905"), ("086f9b9994bc7b30e4d4667e5151ff0af51aab256863802fb694df1b7c8316f4", "2a9278df93f20500b9a65e885ea5b7c4a89e6fdbece7ad176973933d18d50bdd", "2d7dd784611400050f2626f5a44f30879ada26eeb460cdf9c77a701a1d27578d", "02bd9730b77dff6577d0982fafca853aad1f6586b6a6c25f1a84b77a6fa68948"), ("1785d0e77d4ae605767b836f26ec04d0ecdc9679053967ed162bd66902931a80", "2b14ecfd3cf147006d43bacd7f78e0d70f542ad0be191d2f7778576191fdc7fd", "25facc5b9deeb89556abdae26e89ed02a88eabb8a44006063ba212558f17d2ad", "2e799db5ba1b180b6a8a54cf6707cc0f3e7a0c050185cf2b194e202b5eb7e46f"), ("0f6e3f33f3a8443ea5f2ab094676a72f0d269f40dacab65b82b694eeabfb90ae", "0e158e2781627561117bf91e44c67eb758a3faaf87313da48dea7306bb687d9f", "22aaae6535962f3969df02d0b41ceda2eb0636b68a7edac5243d14d58c1fd700", "1a4c8aeeb7f4da5f5de63dfc23981a3eb327630794a266da90260c818ed8a1de"), ("212cd9c224bf5e96aa36a4f37bec673b8e7c91fe477aee6684e35f994bfa3b41", "1df14f6dd4e65e1caccd10b757aa4f3693e2006cd054a69105af3394c136f864", "0205ae2ca9570b02e6e5ac8fcf415870a06f89df64df93ba47cbd23d13b7382e", "2d2e52d00aa9e3745d14f0575d02bf4deec88121252c3fe1166b1baf76395d6d"), ("262c4796ad85306fb556898582ffb7a528713bf870a0f3bee5cc5dab60f9fd4a", "2dc46dd8587b49c8af0c07de586be74ae6c68cab0d1c2916bf73d8f4524f2b14", "2e50ebede14cfe8d251a7682a36e014b5aa8653de5d244390761c25fc8087713", "23b8e33f64496a49c1943e8a07f9b7bf42a1fe81ae5cd8e2c581f1581cf0223e"), ("07c160c31450b45cfa1aa70f03d18e5f0075e7cb6003baad89f40f4570f15561", "2cb97d9ed6fe10114143728ea15eb5ff75238e25be8d55dfc9d7d6b040812a21", "0084395180478455e91b46226c224476ef35a70ab6fd222731bf2b88fcbc8c5a", "08b10329824b415dee343a94370c16746b4598236f3aa5992af8cce7c80dfa42"), ("1c0e65864d0ad601588542417e9befa5cc9badcf4b4e293f8180e3c085100dcd", "1557758443d234bd70e3b4adaad310cb8a80650238d97e24aa2fb69cba7a0394", "297fdc9730008f81e8b968be7a51b4ff650481211acd461d6dc513b5e05a7348", "2f610cd34fcbcfbc37d7dbccb928cec2c2136840d5fe78857a09ba9dfa6f5e44"), ("00f54b5a7c4b76ed8e528a59f3c5151338c5f5fd946c320510926c58a79ca2e3", "2bcd22852c248f99f9c12646889ea2527555faa30f30eb7a5f2584b7a7f187b8", "29bb2f59c82af2f4db9d2e7c1cfb3cf9e93d5b6315e30dc1420536a65471dec5", "2a9029ae8e91362fa0873ba89bd79c70fe77c3b6ee89a79b8c000929f33bad7a"), ("2981f241fbb69fde010f73e781cd2d34843938bb8e3d53b1be0079e53af696c2", "1748eba3d8ec690a0d32bcf6c361df906fb51844eb915b6fdb7f66b182a68e15", "18ccbccd3f6a3123fd5e6d86742186e531a50c5a045f80b1cb2b4b97959c8d4d", "2223573b25542988309b40b4d6d9ffcd40bbc47abc0a42cdda30afce089466e0"), ("1d78d42250bba97b20147c0d124040227f4a099f36f1bb49cac46290aae032e7", "18aa387f32d406fa9d03ba27a67e466f804754c43a74de762307d02b3add1b42", "1567bfe074a46e382fb957472842ab547be9b02e7ce74758ff975cb969061d5a", "1ad3db1547945925396efbca7bff3da0cd849478a6ec7f4534312374c5d4a5d8"), ("0fa54d091cc230c2824abbd1f52a80cace41bd494a3f31b80b9555766cf51c74", "0cfa39d08c8a4386e368263aa656acd118d121a38aa379d594baac9cf91a76e8", "2f6283899d08285dd409ec28d485f65c8b75d9d39650d2b45564278c840ecf8d", "1b3a93e4481c0a63455fb3d5d8f53fdaf4831a4756e69d60c6fb650616ee16b1"), ("1e23f709e474d214542aee600fedb48876cf9773abd1929f8eb4c222442c0bc3", "2ffebe334564506499d9dc6abaf1649ca230e781cc263a48ebd88719b41c8f96", "1925452526ea1a6bb9ebba8a2c59d52094f1eca4aed21b2a6ea63b564a2f0ef5", "1ceea7471acfe55fff4984923427cb6d706c2b1aeaf9762d0fda838c02557f83"), ("04189571034821163d3f0f4f6d155c65b31ca38ac4a45be1d066b6e5f71c8f38", "180eb431d3d69d3844504d27f0be45cd6e991ae48f35a893c44818636bb17720", "0c9d7331a6ac6162abbf879e557ea6ae8145ef4139a8cb1274351b16ea2393cd", "0867b42fc6db7d24ae6bb32ed47afb6e77840a6f2f686987d2d482187b5401a6"), ("085d7957d90184529913ac2ae8c3cf0e4ed667d90a14fdc16b0c7e727d38f3de", "27f123a72feff2469e773a15b37b09abbbc8f77b23bdaefea7fa0c47f5e4dd0f", "0ebc25eed51924869becd26bef7294f7ae21f53a572ad1fea44c5a856470fbd1", "0562cb2825f5f53d9b207080a194c728f333226edc10579bc7891269daf04783"), ("019b633ca2cc778436f290827d90a1bf3aa78ed35c26f7db03c6a557ca9bcf27", "0ffd96099f7553879bb24ea06b8011129bd73df33b582513b0a644b6c77cc3d6", "1d0588ac088ff612c5b06d4ba74454ed6dfa5a91e3304fc38c33efb3b33db2da", "1540c92fe00dec1d0da8de17f3bc9f3d20a2564fac1fa53bfbb142e5c486da4c"), ("04e4366ee46cdae0e073663a42715a5d836a457abc089a23f0ae2d477bb33ddc", "11485bccce08239c1aae6f8c2a01ccf6bb827cf5a6b80fd8dc35c18c0f14977e", "0891a578e0c45cf341f352cbaa75669cc0e0af3e8ec319bc4159d353f7986302", "01092d9810ade005aa1fcebb951e05c496ac707c0765249f36c24ba7c81f282f"), ("1ed82c40895a26539d596021c0dc4c2902e53cde6a7bc1d885b8d06f0e08c5fc", "0e38efd76973dd189aa66df0edcbceec9f258f6c55f9847a49967dbdaeab10e6", "2b92c80822ef0edddd77f7ae8689e66143b6b627845f59c395295fc483497f87", "0fb39e45d6826e4327b50a67ab0cfdaf9ba5eea9c87103b00582839f009b617e"), ("239666e8c62f9db3820fb25abccf614aa0b7fcdc6bcb2803afbcd696c525f05e", "05f6814a0a14719372cc675cf97a752b7b7c3237477a90f18f821247b2e8394e", "2d5058c78cc49162cfe6f5c31f35c9635cbf4d92f967cb518525b56fb1c748ba", "1127c44ea811624b82f43b1ee7e4eb90493d112e8d37266460231cfcad6805b1"), ("040f9b51b0a6a6959b1d76be0ee7f09024891db163e7842ca3106192e42cc60d", "0f95e9319f568bf8588306400021c14ad637419f36ead937afe27f9a953eef34", "255a15f61278e1471abaca0c9743e6465c2b7b4af9d9db75bc55e5b9e919a251", "1bb1466c813ea0b4b9575f0248a7a0602384069eec25a00bb20358a1134e4382"), ("171b67fd3c32528a7e2e784b1f7475cd1b6b4142ccc450b61ac79afdb5e084e9", "02393b75ada2c4f6c7b5a9b825eac3141598130ebb60ca21fa7c68e7eebd9267", "0bca5966e394a5ecb399693e6ef2479e10f2769ce270efd8d48bf35f657756c1", "085175c84ae8840cb4c6923fb0ce0b926956d0bb7dd606f38b55069dd14cff85"), ("23716dd6058c5451f1c082bfbed95e91cc35705f6dcc1250debff2caf344fb0d", "2934c27af072812c738a6bd6c9869ecd835a8929a1e6b88eaf41dadafffbc32b", "0516a43a9bb684879429253b3719ba2fbb3f0870e3b40624834b5f7f6a51aa9b", "11c352d225666c57bfe4e6ea22037f65883fc15190a50170f2d2511f8d67604e"), ("1162b1eddcbeacdaef385506ad6db7e0a9ec46c12cefa656c032a88013e90257", "064619814c0d4b598e84f0867e0d74df3df39219468198a11db579be7832760d", "23842d168c3761962c643e8dc3ba64ea4f3c324e6060127cd84ce1b77da63512", "0208b78b258816339f711f05d28b99db984b34d249593f6c74f2e9c83ce19643"), ("227df8f12a80cacc346c0fa39e4d3f1b81d069a4fd387cecf17dd63dd7124886", "10c1956d0197aa1494197a33846f94491ab28fcdc950c8b5c76af7f627e8605c", "04321eda1bfa676cc593f6f948d7e02de2333c3da281bfce49798a309e8b9d07", "0ba720b37749312d906bfbb7ec21eb09ee662cd73259dee8abd9c662bdc6f0a7"), ("0eba856ba845206e44800f64cce381f2fe94b5e9a67553256cec7e692e4b72a2", "0ae2c058ef7a6fb99c76f545453db692ac878ba37fb583ce2cae75feb716df5a", "075fb10fd8df867f0df88b0938292893968d178675fcd4f7ca944dddd030b6dc", "2f68d240cc779c5fe7ccc6942ed849ce5142a324dc4dced512a1d62312e5c348"), ("1f99c74b34fffc12031743938667846548b304028e347f0ed344829f7b26a1b0", "0f44d505eb01af3517ee5ec52624204903ed0dab405e9e7af23093064b460e5c", "270e675df849a025d69564360b8037a27f53ae80d757766adc598d8399e4357d", "2b871b3de06acf74a7cb7894519fb4149b875187edffa8c1d0eaa02c8dc36073"), ("02205c73eff45ca7291a23409e6fe423a5629e2317d6363736975a1273cc78df", "3022a98e444b4045424a87f6902ea4237a775ff99f4b16a8dfd2c215e33e279d", "0cf7a937e22694d8ae3f08c6909361c4d97e1e6f7c4bab60881d3f8bea712f39", "067e159a49cdc1f039b826fbef213d031611adea06a63633a9faa15576347473"), ("1567d276963d5a15f42fb8db88e192eca5cc9d389088885678ae75d301fd63c9", "1e22cd85982c5b7f4d4217e1f50e4485b8bfdff173678da1278e8f614059f774", "13e36f07f3901b784a518e822cba65b58b57720904254a490d95898cd1d287fc", "1dfdbc126b8831487f53a7694817ecaa5c6e59590ea0bf48215cfa6223981cea"), ("04042c43e6edc56f6356b95834062fe078339be5e8dec7072a9a3155b6e813b6", "156fb22047073525e4b1d4230daccfeb8db815d92b7dfeda649a20e82df0dd34", "235e3ca93e58493caf5e8d11703f6868bce30fd52b5b322bf5c1b86ad0c3d5c0", "278673a824df4b577d432de532709895af04ef83ec16f237246c683a31fb7be8"), ("1abecd2b334696099fe4cf6de1da016b8c210af97410de3a472dfb71df6669b8", "11d8542da1a2ee21d129613f0f76008498dced511d52633c0d005636bc561582", "1077ed015381c14cba6c087e2baa536f8acecd515421c0931a4f4cb69bb0230b", "08ecd845fcb69c2a5cb5fa0a34d2640b9ed5c98a7b3d4f8d104178df236a03a1"), ("1da73c765c00467ba4b82a6be14cca8e49a07ccce5b29c0d8c5f39f3a1010f46", "1ebf10c45be2fd1e6d1f5aa342a2eb0148dbd91c1b6368e7c245e92e7ef1454f", "0df40ede8babd94df93efd02f02d86acb59c9c3f7771b5578526527628d0f39b", "28f477f2c33ef0b5eeb828f547f35338883846c9ff2302d719df648085e12da1"), ("0cf6873812712a3509ec28086831a8d1443159903bc4ceb6bc2691b731f536fc", "10cf4e1729983c5e15cc20f4cdd661503d4a1e09ce27cb5bbf1d01cd2ecd41a9", "2c7e8343300dee6ece32a51df1e6dcc34fd3f980ee06321029e87642ba972aa5", "2188e06046b8b09c4bbfb9fce172d6d783f67a74a1fc37070bfecfd46b5b9772"), ("05503a9d6b8a07e179b54c5a3aa52296705c8028f6592e93b1f6383bc4ffcd14", "2d31009e5ad1c16b42ce809f5302f994a3976fde35811e1c27ddfd942b915e85", "1ed3cea6e885c72e049e98b251bf3d7bb23a0e6fcf8a1dfc38d5f1a5d6854cac", "11d0037a55155058144f99315a470ea286ca0c9f7da2521a3e246c27f75bf873"), ("212512b4a60d00e2f482caa8d1015167b8b5415476bda77c032b11c7fa9d76af", "15a3a7cfacaa23f32ee75463fce1c57d24151cd87b57612962a7ce210d4b8dd1", "2d35b074fa630be3a5751053cbeac236bc8511b85272f3af2d0f095aeae38700", "1681182783b63f771c7b250708ec3c8fa880b977133f16a22a39500b8966a73e"), ("14b9884432e32f996bafc0f11a9a7390f58a5bc0b16f20de098ce93d629382a6", "25073d513a654d94d475979c54987ed160347ca4a1f9a6d5d2a18ccf9108a138", "035ba60b60d1f71d4439ee2b4e1df332e05e96ef47e4e20ae748621d2d5d6633", "1550b50f4ffd45b2abd2259b6c4a3f0aa1823bada49ea4da379b256ea7935e45"), ("1530e0d4841210c96ed3ec8dd1833a3bd55c5a716b3d8aeda244a7056dbe652d", "152ab9de6813257a12097d2b07bd2f721fc356a2592812fdfe20a74b07550e21", "0c353b46704d48209ab0226da6214e30b2734ef4d203dfcfb348f3d48b6273d2", "2bedbc409ecddd1fe4a043dab869aafad6ed3db14268f68efa1cf086fcf7233f"), ("1b320b06c6d03066aa07fa36f7ea0be477be013c93cb191c2746846320ee8f0f", "1db89e6b22d2aa6746d3513cc3112c77967d81907d5cbb33f1a380ae76e1eb41", "14e03882de37e1d5382f186df99f5f397dd03aaf804c4b9a7ce1d0086f024e33", "068666db36625f141b5c8a22abf48dd1ee39fa43c0547580a878178113e7f43d"), ("0ff2ccb8e91396bbc5c8e33911965d17c0dbe202bcf931e081e55c0ecdd2fefc", "0d3c7c9bf184c4e968e4630bda047e61e7921b0fc18a7ebf8a8c32a8065104b1", "1511ded4323bfb88aac2e079a18bea76258528dc13a27367caa3fc8c4a7d1942", "01ea40c45fcdfb0af39560f2d7fac4179e73416400639d425f9c2a74527c5419"), ("29be2f396bc6be168380be832fa44af65a0b84536cb283e25f218ee6b267ad14", "14c33b835fe69c0e4b41ce9dcf15db1330b58713634659607755a15fc46dc600", "139086afc99f88f8001fc853cfb921afdebe15d213094edae63f7c633b689467", "253f30ba3083892410b96243871b6d737fac45aa25254d5cf4d9eb67cdc84f79"), ("0e2836fcf14bd5bb5172be5cd49cee577adb88f913d8a53c3dd292c3e401bbda", "055b71c1a3249905a75fa415c1b061429ebb5b5331df0d67c08414e926ee0328", "1f19840442db45851bfb04e942d33a041c0dd23a061131eb95a7bdd95594a027", "1556b2cba6b896ff0af807affc3c3db116bd86b9b0667b469eb7067330e303db"), ("2493b109d3eebc87616062a331f0c1b8a68cacae9357c305e2df989bcaf7d129", "129589e990951b38138088b77ca6236213128fc022323e2b9963d458b7c0339c", "08a92442dec2600de60c4193ef0f0f585957a70bfd4375942f44ecc31fa096f7", "2967711a1421386589cd165b288dc23195cb029d67dde5622ae6473d57842ebe"), ("12076e83b8740a15cb78a83de09bdb2320a0c08f3d72f48fd4b7e521aafe86df", "1b5a5a3f49d772fcbd2e6668c2cc03c556789a0f98ce6058e089a97c9c116263", "2ed806fcf826f4e2bacf11389754c4914e646188ffcc40b42f35dd450a20c2ab", "18c75c7e49e3f102eb192df2e7a5b1812c98d6bfcfa46cd51afc2ef2e0164eef"), ("200b120f37e6044998b7ca5144548c2f4dcf6a759e69bc70afd07be317275077", "1b293646e36ce30cd060abb2f22ecbcc708f782418f988e6a6cfbc18e59cd2b5", "002ee27d0160d05377aa84f0e622d64c696b75d6df2aed4278ad92a5306eae91", "28862c905678f47fe33e680078bd696ab85a5c2c2b0b61100c80a0dab423a066"), ("29a91f9dfa03f31071a899c079a2195d12c949e13f4ccaaea5ff18c8825cdee7", "020fcb982917fa398f30e7e6e905886d6374653cee85475b9dcd6671d2d49306", "2f6f7eac2d537442f8e65fc43361d414172cf712d9fc1020b38456f9a47d964b", "242672639c822b2de2657f12371b51a9f644e93c579e8074132ad5d103bd2cce"), ("107db2a77749e594ee752265146e9260ffdb63aa8f6514782492c218ae40b7d8", "0e78ec4438ca233ae2ba9b338f13ae7245188f3dbd06901bdda03310f8a395f6", "14c545dc2f81030f0b474a192fc16207c09ad0326d78ed2b83692b495cfc015f", "1049902b1975f1077f5cd81cceb6939f4aad9a9e6f4f520771a3c96e9068bce1"), ("03382a65e31cc4ce72d4a81fb7b576e9fe437dce6e3769cc2e1b85164ccac03d", "0cded0cfc8df8161455eea91d5644ebf3296e13dd1438ef070c6a6ee64f80c9e", "050fa920488e0c973bac5a7874d4a8fd0cecfebeb2a33635ac1b856f5f940418", "0f6da2ea0b707e02941a7878f8b73c1bb5b9cd9cdd19050b36a87bd4c41c5df2"), ("171d2f25228b312bb8046f8388aa46f410324ba570a1233bdbe2df4ad7a25711", "1505b42cb134360b1f483d6ff67c69358f6aab6571866f7e8e71f3684c35b8ce", "1bbecab8c020d80ab7d6745743aa3eb1b49c74b8fe5bbc1342176f5fe16fe927", "1e75d099da2c9b6f4451a2c12b91860413ef3f6cca343f0eec4b9543b22aeab7"), ("006ecbf9fd86e5b1566fa468e7c539ff090c94b3c82749dbc967fd2541e0b145", "028c3f0a725e4c80e355c54e9372194c81ea51f0335a737a28ec1e4928e145c2", "0a06842092815ca34a7da5bef55e00009bb5411f969101a96b607b8f7f0faed8", "034780b8bbc04faabd8ce3a7379421439ab239db80328ba6e2f50380a857198b"), ("0b79bd52c804f8cfc713304ce35fc2b47b95911d65c7205095b2b36ef828cb9c", "1741ab7650cdb05933888023ff412afc500009841082e7e0831093e3f7e8557b", "20ffef2d061c66861e7bd17996518619fb5e0eee54a49e5896e1851e1484ccaf", "23fab1d0f31c4a02419d298da48ca7980def4d8b9870184459afea1aae08bbc1"), ("1032fd53b25d6f52b0a94db114b1ce30a902b34eb4ac4507c29cf8b684f7b117", "1f5d873603ba95f5d32419f1b970dbe39b9e954dc0b9ca1cbb63c0b984021b7c", "1c1d0dc6714a15880dcd1a0e6af8fdbed89e67f43866edc1f1064e78e07b7207", "25d5c0bcb36715982d36b60c047fe63204441c7ff841ea70866d931bd96d579d"), ("079706d9a83810632bfa5a32ec79d52a73e2449057a30487d3f37ececb06c58f", "126c11a3dd8af94c47ac45639246c41bfe9d64158bcb44ba66a187195ce2a2e9", "071b796775ead995d8534a914e010281cdf608b17e4ac160270e1089b9e2e301", "0718965855b2006adbfd78c1ea8b66e4c26dcc5dfc84760245c50ba0534e89ab"), ("168b96b6b2bd6758b29750634e02fba489be9aa327a2ddd7bb45275ff1b0bdf9", "2731ab9f25042f53a7956c2d6165ae95c89f07d0cb269b2eff351e8224279064", "110c3f76ca013a8bdaff17730aa76ddfb1b28ca83791bb3dfb0f2cc5f74c392b", "01ee0cb511b34518f632d91fb01d56ddc329bcd2f7364a521d1af39c15a41ed3"), ("1fab6131f4333162180bda06046589bf79c6d8c63924a76bd4afdd84ec3b3728", "174cb8888b781dacaee5056388bb7f7f383cc7b16dfcb4c0d68d39f767a0c6aa", "0e91df525d6d454bb085168ce09afd5de5281452b160489a47bc9c4c574cad54", "22816de7cd73851398566046ebcc6ffea99925e933aba25870c779d45e4b5e99"), ("09eb159f1d776cac63691a6c131739a3361d77afda487ba27d8f0b08f7520182", "0178f7c746cc5f61709a48a089bce92b3a242c47238bedca332ea1f05cbcd60c", "052b6d1d4e4cef77851b20abce89bb89a8c63fa0a6d600134b7da3905f858d2d", "26b3c6526e21f95892b809ee7fdd1dca51f0ce8c1a7929c8ab54fb4c2a5dedeb"), ("2e1869af49d3e17f9e98bf350e15fa58b7dd071b64ad7b988f48bd071fb0de45", "16a30423904349a166a7ffb47410501f423da9c88dfaad1c8bf5c9e2d867fa3b", "115257b84e203b099bab0270b82ea711ba4d936d4243e48e5b44d0835bf0b545", "17b63efdcb8c2de3f2831ab5beae79bffee85ab48dffdd1feac64dc37d2e1126"), ("255c05a1510d40d05f9f0cc54dd3a9e77db25d8786f96d116ecd9a6f1a96e17d", "0aa58f5d494d4c1fe2ab41eba1019e4a6ed27a7524be86c517671715b467e471", "0facd16eec1d3d5428e3352297f1bf4b800c9e57808a8401d3288d6681ef736b", "15e285703f68cd111bcaea9a5d3825e235210f76a0e32f1853617118d57c231f"), ("2a20bdea7eb3786c43c5571cbec9a3fc218cbc33a1112b3f7c269f5559c42f96", "124ddc097c69fe5752c94b29c426874116682bb420f99ae53bbcc3a4a451d5e9", "1f6c9f69a32d47457e02ac6d275cae1db549b679df7afe5a108fda95e019a67d", "130d113ba03de44c26858ab91fc79be25ac20a9f7bb9513a381cf457564edc46"), ("2b8a040b68db06b2e9bc913e39c0591cc7712d73fc5cfada1a1967efa7c3e88e", "16ed475719176e9baf1cfd96ee9862c88b5709231e53fbeab4ce7e63600338be", "2ba59032c8d69155cd27049cd8546d992a32facd4b8cf1918e47cda24f34ca16", "17894736315159925dee221a21e7cb3fda83ede9ff26fc44b4c4f39536cdc14e"), ("20cc4b843596d436c036f64ba7b0e54909bafc43e8216d84fe7cf55d3605bd38", "1a5364a68b29ce0bab36bb13ecc83f4e8a927c393856277583b1454b011980f7", "2e83e4dcebe6e53f28dd7f27afd2ead7f63a07207788f33171935e2cbf9e55c7", "3013f0685736909637a3092cf26dec8c0bea161900119e1a800a16edae478232"), ("0408b3c120e3999969e19a7157585dc9348226e4c6a35458f2ead99bb21a364c", "093d4f730e0cabcf11d261fd03dac755d33dbf6fcf0472c5f851df31f5470288", "23ba2726942def563834a72efd4df2d41974ff539b5b39a23e54865db5e5ebe2", "2b5e08613c7999a31653405ec65ccb26ee9ea1f1de9d89f570b4b30eee41009e"), ("23fdbb23239e243e8df223cf4ba05e4d99224fe4cc053952f56249e73c7510a9", "0a0aafa75898f3c88389d235d128d93b1458aa9d7639189eab22ab73acd2b430", "23a85a7c39d5d72c416346d40daf612e556c49a2633caa8da73d3ff59b45d4f2", "075110d2d329599912fde7c193dc669bd5f02ff8b83ffc44f7175c5492b7f395"), ("07886cac05bf80977bea6149bd86616b506d9989745d46a695aad58f868990b6", "1b423c8a59fec7a3deb971d51aeaf4d7a51df8cc8dbf4c4b3eb5c9f408330f5c", "2e3082ed68c187ade268221d6c290f167c1ce3208a72c600778eecbd707f4f6d", "2bbd0f1f31343cb8a56cad48a4a93bc1ad58cbccdcc08e1b67a035a32051a824"), ("193b558335f3ef7d204ae158fb53a5fa9f14a792d09afecb3a236aa173e84de1", "1d4076eb6f1f4476971df7f84d55aa5d45342a6830a4ffb9be4a529622057590", "144a43bdbdb1cc5f057c87ec366b609d4231de9f3faefdc319f27d4c64aa491b", "0dc9a62c33e3aee4125a0bbf3bab604e03af9cddb69cba0389a6b51b09788f4a"), ("073fb69b398115311116392070a2ec32e3cc1f3150bef1c1e901d2b143047911", "1097e043d211e9dccb4b9ba7a0d9da30a45031c609036bf7a7d870ed0ac39f14", "1e3d1b663b01faab2c2ca206ece932a2620b82501c40626c783e1c7e277f0435", "072af3c1e650607a3e5879fe7e9ff6694c1a3f32bf2f6548e0dc87c0650613ca"), ("0d0a216d933d874c7a2d5b341816cc71becc435d233abc13e376126f110e8db3", "0fc661335e2f29e12021b3e703acb3a18d1ab18570c7000a35fc19fdc5ee746e", "1c5fe6e0da10556a598eee4cf205e4f81cdc80fe23e588995a14d0ffe890601b", "1fddc6df45bbb56850e3a459600e20be8810b130bf5325f6d1069cbf0736d1e4"), ("1f3088dbc99f330b3ac23970693dc57d95664bf15d76286f233e638a0e460d9d", "2719bd758b4774a0e83139549bd9b7d8c198e56a8e1a423c17b9796e03cf4ee8", "1442bbb51becb503d5147b1255c917bd2b609f26d1f32379410c159fb33bc27b", "265836f4cb64d389d5e4759ef675cbafdf4cd34f47245639691613973bb1d594"), ("0df585f23f34757624c0084a3ce7d9cf3116daf56079c768a5df17f053c992e0", "057106fd33f9ca35e8078e7fa9ed50bc3e01e8bfea7bf6230d8c9116e67d54e9", "00c4c47609d7162dbd14a6e4a09bc9c0b80e37bfcdb531c843f674e680ac24ec", "1e3e1ededd26599ad3bd379dbfe9354cc98fd02b68c9e7b8e9bcd47f297d8a19"), ("1518077f10c38c3f3b4e90cb55f79472a4ac39788340709b404de09733f5a2c1", "07af26f81ae3cf318572618c678d3f76deb0ee1670380f51fe3f2eb9ff20e023", "2de0f790189eaaa4b11b12cdd740a803c47dd3ea0f667e62bf65d717ba067a1f", "1e57ee6722c7ac29afed78f23c7aa76b0a3f23eb2fb98a87263456e9c5764303"), ("0bca409ca5ca37a3ca28c35b46313c9e24f1c02c449b0999c141fdc35300317a", "2447d695f073d04ef28815b6db019869a5dcd06ed7ddc78c47fae676a2610cb7", "2397962159bf85837a669e640cbd81b994861c2632286094135b2932d0ecfe82", "0a31115a1e268c5b1ab46154d70e57f4528592b6e12762a17ae4246cef3ade28"), ("16dcbdf5e6a595fa42ecf70f03b72dfbcf0ad4ee5e4b08c058daf2a6043e986b", "04885a4506f2055cefe444d94b2963f107339344114d70b0b21c6f7da5995301", "2790b7f846aafe795b2d9349f6198b5e31270f905032bc9c87f29501c5df50be", "1b9114d917b1d24b3ce76043a6ea4c253737e6d376a527043236786562fa1652"), ("261d936a50d43072e6dee746ea601aab65f3e2d0c6869399188a4274fbc494eb", "1e79f6417525f31e7c6133026e1bb0f6d0c9af3c4a763346d2e05340edb240e9", "123ed137fe499b8bdb7d3ccf845f281eeae46ec1e800d6f719bb3f9d759f9d77", "21df3005862d55abe43aaf46420435bc0d0e995022f849a41bda0eaddf11aac3"), ("2111b8474ec701c8410da1427ab90e97ea4ab0d673206d1a70a8567113f66a25", "132a1e5eedec56fd396f75cfb2cf407d57e46138bfcf2997c314d76a86adc2d2", "038de72f8c3b7436d5a2ecd1fef6c77d62d730f684de29ebc7a6393121f2f3ba", "2e881abb8348482a33409b255455a0ecb320775c5eaead6c88df9bb8dcbeeb73"), ("130ee35a5ed0a37c1a1d31d796789c56c5ce7e093de0a8e165cdc3367c1ba52a", "2eb28a9ef1bac0cb0d97addf358b5b5486c3e0677be19304e91f23925810f239", "21126f3be5b522965119061225784814759d1b3e67f06a3a560c47f1dacfa67b", "2736c0e9ce13c9c59055a4c8dd594f75c6906efe170c7bcb0fd627e6fea38fee"), ("1bf46aceb1d0a63dce5384cf732ae26bdba3a4ca5e7636e654c79300c7fab4a7", "2e6f880f27f11ede353ab9f2c64ac2cc285920014c5d68887f47446616421988", "1debe8b28fc99a8abef9ad77d7341488e2b5764b69a22fb8905f20494ce89b81", "03618f375e9990eac27baf118784cbd01650d7b80994e7ffab9cbe8fcf800be3"), ("210f339986dbd3cf1e0385b6d21216994197d8f633408479b467746db376bb39", "2b98aaace1d7da48f2f603114043eb2733e359eea4361e19fc08b8b2fd0d8e0e", "16eabcd2266bcf5ea5d56594acd2368d63d824364c5e6b547550ca187c998b2a", "21dc6bbc70e708bcf31ed272e8e61afd9af9fe8b4f15ee38fcecf65b3ae9c063"), ("1d47c1fc8d83b864bcb52e34ad96ce60a444ac5421f20a5b37e29d8bfdac165f", "2af7e9612795928200c54f7f8673e6b616c4db3a0cc54d5b74b69f373a31818f", "142c910856264b0792c854ed9ec4910d05a28d330baaa432c4a273ef2427bf3e", "1c9e809cffeb74c74cf0bf8492a951004e87ce1cc4ac9fa53dcc8dcf8560372e"), ("2851eb3df406a7d8250ddaf21300d3f478f81a341f335f67393023cbc1c21e6a", "0fd1c159eb5983516f52c8a557860d2309071560e40a37b3bcbe67f56a3ba1d6", "22ebe0ad0ff0b866617db810602861924982e2f2cc34e5e50117df926f90b942", "207595f0a9f0f562e18f16756601d172a7ad6c07ca259dd0ce3c8e1d3c5b9499"), ("1bb4ee55b2903a2acf2105e10a82a3ac863495ef063fe55d1112335c4c333d1e", "0faab44295dc231ef56f0e93ef90de4d7bb473644ccb0eb379c7cd53addc99de", "112eeed9a3fec1d41a380e869a464bb2dc27ef3099ea32c21c72514e1980ec96", "1295fb456d586ec12c330146758728ea47ab7b8e34639ec4794375d04edf5726"), ("045d4272d04028c54a89b55108119bbd6e3c0eabec7eb869598c6b73e3670fdc", "2f486ea3a3f62952d11c65c909c5dc69ecd9173db1c3a947579cb7ee5e822ef8", "2879e427a6521bf07325e161db8b002fed8a61f8068903416d0e27431f1fba33", "2cb7b8dfec024643af6ef28970f08cf70cf61458516cceb34155794299269724"), ("13f8196dada116a5deda8776c9b3614d8299c0379d013e453d3969d81752d813", "0d17ca117b8b37eaeb02393d845451840e13688b024a2e708826e842719445c0", "242d7492be506ffea8e5c172eaead4f52a5f68f704e45465f60b11a3cf56bfc3", "2f934959899d9ce621ce8517c17b8f875a909a06508d30db9ef284e53bee44cc"), ("2c354bb8be39f7ee443c300e4c3058399dcf0981e4eeee8627785904eb978d7b", "1fa12ce31d39c8f5a38c973772c2b1e9c06445a26dea84397a2625353d261667", "02fb168524de527972ac76ecbeb608f7aa4ba2e9df97cfd001d0b8dfda677c23", "228a5d39a894dfcacc7edbde3c4e00accd19b78e7f63915da11babac4f0657b6"), ("0b2bb986f7b06e371163b8a0b0e50a4c84bcb17cc69e68bf6a00099034480ba2", "0af51f158a10386dd8cd3271f6f2f35180b5866348c12291c68a612747fc66b7", "2a147fe16b345e0556d80df7a7d0db304a5b6586b7d3e01774158b208a5e19e8", "288ec96f17613437cf372f4354441559f3f0c2e8ee2fa785cb64b8a896bfa3ea"), ("19e8e7a6fe8ded757e9f18e3ddaed1de31bec686997336dfe8c9590531ff834f", "296f21dddd4fd6a645bdd3cdfd1aba8b888807c6ef0a6711f631403f1add1584", "146ce4711794203700f7902646a63c997be35654e825a9bb4489849a1385a978", "063f2c42dc0d0096843d0698fe5cf1ac9148be44b58447f7a251928ad5c0bbc5"), ("092878f0c45ca6b9c5017a0685af16b9423a52c488e425736b1c6746e175bba7", "20c3d51862baec7c26bc57656a53d4d6295b0662281f59a521db777a61321e8a", "25d25f7d89598a5c5d423d270a54e497372b8c284b09b86eb03eeba03efdc1ec", "2eb8c44d34af9f9461e4132929e002840951d11ddcb3e015d1326cfb2216f9c7"), ("07cd670854effa8109105041c5860ff9b69ad1b064c5d882e56e8cfe9009ba53", "0f0641cd42e2ffef8f1b57dca43aaed6707a03622ac66b27d8177914b7e485be", "0879515869a5a0c1bfe959182048a7af6a893df0b2710c1f926a3e143022440b", "2a3a5b07eeef9d34f11618791026566f0607370fd591ac016854b3dc01fff510"), ("26437ecd57512ae2ec095a4b587360f35c68ac189059257c7176b6d97a79ed4a", "16ff5971e8c55cea37ab89f04bd0746bf5cb3c1af5fbcc0e0f30768c1a8201f1", "2aaf075890e6542a1ffe1c66896ef29c54ffb0320a6196493e867bb27ffc56d9", "25e550f9d4bb099a2861b85656fadb96257dc2af224df8b23528742bcc1f958e"), ("0a744d8edb1605283a52a72b83b7af3c3762bf0aef96c7811091c2e468a48675", "14b7dc50df5fd2c8dd00bf0d67ec261388bca1e8f2bec6bb5f13e3a1a57395ba", "29eb35f7bb8217b4d95d2fc8ac52506428a6c413fc38b1e70d4b31aab5c98ba0", "28027f492f2bcf6a488542f59b93a182acd8d6a14ed6b6c1b8d88f66971d6309"), ("29fe16c8cd516bc99d237aa16a10ad5059a439854a81c30964802accea2cea0e", "1cb984f8dbe7953041511f108e41c3b116d7d8762a4e0855314bc2752388ab1e", "1a9e03498e4114a587da1e393c71dc1a0213afc1d0a3b4c587aa2e6b836392b6", "1ec6fce9590c5467939e6c6cb7dd10d8e204266990d874961059b6409af66406"), ("1dd9bf222b5b23e614cae39be473d7418ba5cc3fdd86e4da3648c90a190eed41", "27d0f858109bc41e36278b84b9c39dc48d23ed6ac6aa268c77ea3d9a44c78190", "0b4993b1ec793827b9bf22edb5167a34751cc54af94836689b4ec603ae7eb005", "10ef37980251e827ba79194f191be4fa80554f74bdcd44ea6f10308fab3b170d"), ("2d7e03f5964ec966e906d162a265abdba8e49d7091ca2c457c607f2b6abbd049", "120d81bf9b343aa7dac28bbaf342b0c037034a199336afe5d9e621038b88ee59", "14f853d7e415b675efcbda70c2944e5dfb11316ab62568652ffb296a5fd79900", "03f5b5d4cee579ef11260bea48404550a70e0b74999f219bf8578b137b4d0317"), ("07380ada50d56422c38cb660939d47ddf9c9055f25980c7291830a5a51c89ade", "09dcf2c01e5b44d2768c63cbbdb40074614c39505bdfd9abfa21a796f086c6c6", "23a89b1b584fc896fec51ce056ba0752c3ce8d53e7f4a153096142e7e61c50ab", "214cf1f89592b3321b5e3502a8c578b69eb49df4e93e042d17fff766b47ed821"), ("051219b88c3fca1028993c0cdd15cb2f25a266c932feaf2c22ff103e6f16e78a", "08a9e5af16be8a8c7aaa70582fd0018671ea57f38932d95ac3e80c5174d7a5cf", "1176ed5ef725f7d6d68c7dad724f5689e2c6ec554dcf2ef3274bdd8585949257", "127c15f2bf15248b8de0a3f9530759beb23ec5db534cc9a2b1d9215f5a831d1d"), ("15b24679d08da017fd3d9e67872c391ac96f5c6f4683b088e5e94dbff76ad5e2", "0c43f86fe56e27b397f316e0559d880666f166493eb62423549cf6c2d5b62a45", "0b3b358cc57f27b6c8f361864ab1cc3132c95400e1942090ed0dbb960c8554af", "238dc936253c534ba072948cc3739cee372eab1cdf34f736d5a59a7c635e1b96"), ("1387053f824f4371f0e10611fd97e4d96a6e9bdc238d6489f21d51bba28b1a00", "0166543f8df4d116a2ea89d1f072ca8801ed575c7546075f0197bc4247af33d4", "0523beeadafa7b1645a0efe82679879e22b09106d5ac4185a1bd024e8e0335e8", "1e74ad480f957696ad041eafda110a6c64ec06b791e9def2c4f1dcc1b0b6153f"), ("1e3f04850ea4aad4e99a7efb46202b08e1021a85788c4be9268334ec9ea7799d", "1c3c41173fb0fe676e41d3e5437c4712b4a806c7ae5d044df6ffeceafb5060bc", "1c0f314af58ecd5c8bacbfba95f37ddc04ebae1244da0a282b0d595520a197a1", "1d71f5231e725676cecae58ffdfd9bf091488c54a94b72c09df93157156e70a1"), ("14bf9341b858a53f541a8a9de4298e186c3fd225cacfabf813b24c8021daa8af", "0f713a86e6a8aa789f5cf0ba06e9329e08f1bf8ee42b122aa35c4774767507af", "244dbcd1262753f724a49cf6ce5c0408d96fbb73bed7e4463ef698831be6928b", "09464f5b3b28249b4b5f3db468e27d54c9c5763dda258fe2743eb54e10001b1b"), ("2c7b9cbf63547341830e7e1690ece9b4a0e45dcdbe128516a9c961b93f51d9d2", "0703f90069d4b00f8a2a01f939dd9448a42604076181946960b4f201a7d9993a", "126678322af05b9c035b0cf5d649e90f733b04ed30ae882f7a37d5e1d7206aa4", "09f7e907e5dd1923b54c444cd93e17605e55cf9452022759b2f8e46a3d2ea005"), ("123a31ba1f2fbe45685acaa927338403268e1e6ad1acee9be2c1a8f83b20653a", "106866a03547e26ae2fc6a917bb22e49397f6034cdb521853a8a57e96d31e55a", "1f7e0f4358f284b3a3e8cb980e22abada53ed0b9a135c2402529311941d9701a", "0a96b057f1327b96cb670e88ea2752830b4ee1d8be98abb63feff3b860b0c683"), ("2134304d85b6ec6c1fa929f9e4b517df1e47feed89f8ad28b94dae3784a2e906", "04ba172fefd0de582b9b41060c1b1a85bae79623564c9346fc4d288e77a0e085", "294f662ad530eb5fa99d08718662ad3eb743c3dd97c422252dd22480124d24f9", "1669391969224d4bb131a51b7afc64af8c1bdcfbe6b9a41afc139cfce177a4d2"), ("0ed18055dfdac730c5f40b386e924cea4843c964b2d1590955f5e9ec0a95b99b", "1c5b5716bd1e78c7039361c29225440124b1636dd9421ff178467a5ce23d1a05", "2e789e574dd75c5ced3812778cd95cbf40269c703b56d4f79d39c0f87ee5d62c", "19a23c91ab6535ab487b0633916f26b74271957a949da204e168680708d1af37"), ("23a958dcd8af50c64c8c131cf59698ae6f38409dc7166ab15c45ef1e19a57cff", "056413e5e2d8fe5b89018145f4ac801ea24daf3c6356a228940e76dae41272c9", "2afbc5e9348f80ad5e5cff20dddb878f9b1d0d58900a7cf697e2b866c8d3f501", "10816b4e6eb3fe2042d277febb208aff71f9cc66225b152904a0ec6c087cced9"), ("152dd933dc14a694391180ebc81e0561f01b4567ca64afecf4e35027bb28142e", "0f0bd2dd9ea983791e01ee9b429e6a873374a08195fc58cde201e4a4867d3b23", "1a1eb7967100b77ae753ce148083c84bb7aad21e41d4b346986f34762a6ef6ab", "0e97b6e78eea828287fd18c5692ca7f27acb9b12da247ad9258385cd8c0b9935"), ("20f88d6bb047e9cf5677c33a2a4ada54b7ef1b40bc02ad0a939215eb33f01d27", "13edad6df9585d7c05beab545f2acf572248e1cd5f7d61bacbfeb2e8d6c1a069", "290397d244e9f6e2df7c81ee7ebdd53da056b440fc229ae5d20f3d97c44eb471", "17029708857a173b05c122943d880d904e6da8d44dff784c84afa51f350f1d28"), ("07f0398877f76c4b02fa0ce541aac47ca795939407540c49908914a870674cbf", "17c895c2e8503fad886a49816f8316d6e257095e7238f3182f3d772fc4418d67", "14d451a6c9cf7855ceb50f2b9297e081b44abc1d3b045bb331756e72580b048a", "0204445eeffb38a3ecf3c9446a3473b10ebbe5024130674f8158b460e9dee238"), ("12143584cbf0816f52fce0703e62f502fc3deddda33a1eb9b07ea252386ed0b5", "13a028cb94e1e02b2d2a80e4825fce80507592f690b0e848856d519033c7a192", "01551bc69cc48cf3ffaa6bf44f1f91e91925ed1e1ac29976db84d99b833f91bf", "0414c872d961041e226972eb36dc317a70f10e7a3867c064fcfc5d416ea0110b"), ("302b5b8dd6dad029c2538db14d639fad1a81dbe5f3942b8e90508a07ff60260a", "23d6ced2840df1aa2435dbcaa80adf41aebaaa621eb5bfbb4ee2c1c4c62bdd3c", "19d38a9176c911f53288c08c493df976e76f7858d12146ce539f42502fc78a15", "02e8219458833cb895ddce13712bd9e7b2f978ee271b51056790fbe4bdaea5b4"), ("19792442d5ede6483e730ecf5838ce2152881de952f5e235d153fd13ae1c71b9", "200a1b09af9b6dc2d8d2ef1e36641293ca6013c68ccc872685aab12bb41bf258", "1b9e4d3ebb7ba3082c12c300bbe9cc89968982bf9f6e1edc01e2e7731a9ca2b8", "0ba0e91fb436f26cfd414a223539b062645fe2da44b2b3cd69d64d78835a1353"), ("232e1ec037c2ac2f3996339d20530118fea8de91e85aa20d143ca8d94b547087", "1292756b6bca45d3c13b105f8b3ef40c97b42ed8511cc37fab0cc921072ce58c", "1b64bceab9c602972a522fce90db3b48d47be3bca37771d6d04b9f6da2e897e4", "1ca4ea7f07882e18128667c549c20294d39319be0d1ed9dc3328dc492237b1cc"), ("10aa7ffd2670e9b0b9e95bfb536f8b3b54f6366cfb631d43acef63a43c21180f", "2f23b4ef5c7d0b00985f96da60bb8a482e5e74626358a4301fc42efecfe81934", "19dc45622ad802f6719eeb3ee8256b1f84e607e53f38ee47a2bbe7642bee3a49", "1b9be96d1664fbcfcaf79390f0fe24852984840c35f2b277b3f3500d1cc10526"), ("12594a086d97197bed0ea6a3780c3292d8877e887fdc294621f1895781f6033e", "13bb2e2fe1e684993588c96fbd7b5098e314c5c8803666d07d2abc528fa8a1fc", "15674684cb47462cbe36fad33ef619edb81c0db361c00b46028e92761d9266e9", "03850c60a560e29e2e15a72ae8e4b4b78fe9eff988d280325def19b0a458eac5"), ("0151a593c5db9f793d6fca745d58b454eecb71028f6e024393389537ee15314e", "2dc74a4cc22f2700931494c5536a3108bd3422ebcf4b8a13df86fa914b331aeb", "0b9cfe47d664f979d4152bf34154f78824182367d0ad3f86d32d97ad8f79b36e", "1c2fdb90d4b4331e1c24ec14a96233cbd718c86747803505fb2351f7dde3d1db"), ("2245c831ccab64cd8b75dd69ac66c6131282c013c45eac7fd42b7e817d4993cf", "1307f7fee1adb2d1a2a947bbce07017a09a07d9fde02fda2595c9f6bf168debe", "037e2c0ddc2d91676bc8ffa51c02d8187f18ef6ea9cd98408501b4fd6bf57c31", "258e5b7723bd1e1d8beb971c78993edc8d6bde3099bae0b6cbd938aca0fb2407"), ("0b1b8717df880a8b962d12d101a9037cc3de43c03b227fdf36f94c0cb07f799c", "2e787a082b553d33fdcf4e4a109d9031e9c23204bf39376acfe0b205be14a4dc", "23d17d65e5d1ffd3e2a38ea43c1e62e7809a74bf93ce5216f7229353eda59451", "09937e4fe39ea229fe2025c756e784bf6dc2326a0dd5086944f00588c98f054e"), ("2799411156f45041eb2ca297ea84cd502a645ed20284014f1f729743b8050ffd", "262429091a43c7443fd4931b24d64b4d5e1d30b56af8d810e3e85adf2e64dfb7", "1b9218186fb15e587b67940f60390fe4872ab1ca17a48500d8272f4e795a65cb", "21537727bba4633cd0f0b283d2a330559b1481c4a326586e6a4343682fba0242"), ("2fd0becefa05771bd4dff9b85973d589d04a71f7250e4e1a65c585331a1ff353", "1b8ad41e0b8aa727cccc7342305e9bddb7f634868efaa65dc6910439cb8c35d1", "0fff6f7841f9c3d7ebeed22a5c948e832481c8780cb7c8d4da378cd14793bd27", "2030aaecd18b9959d9586bdaf34a050d5d5874aa9c9159c06c8a32a33e2968ad"), ("0b25c85155a9dd24852feb30c8a6e576d88d41ceb369bfc4a1db47ed160afa5b", "2e0556b23ecc5d9272043659ce29fdde06cc415162064a31b3104bdd5f84402b", "2f7b0c6bece8cb6d488704d03d7bfe58e219599d98af3b1cf3b3080760ec3c4e", "170db936f106517aaccc2e97bf1250def955cd8260f5972019bfebc27f7afdb4"), ("01f412792d6670bae48cdfe450135550e76b5c047adae6291e96c0e870a276d8", "2fa3e1e8e0e19aa148d05879b68a921d36c98f92ddb69a3da6b0d38366a8ad67", "14a4b48f18f00fdf7330394f195d88f8e3c1559095603902452129a5815298ea", "10812755b13c1a286e7b94b87c3bce32a4c4635a646b7a4ea703d2bb58f381ab"), ("20096d676e122c3b7b4db0d4a33ce4fd43d453a77c5cb62285224ba41f57a2b3", "132624bd6afd41d028e6e39f23b9be265d98ee03ac5577612da4c42daed0fdcb", "25fa2c544e29b962c094256763025533701d8155ca41a67f0fdac9e0adf47de4", "254eb2b7bf877a60f22494b99786d627b59ed66adb3d1baa81ca82e58d7b1a57"), ("1548fe3762a094384084e66cb7c2dae997e797b521c358f6171a9779f1980447", "036b508897f9bb91a760005689a1b4d77405d2863fba9ede10dbe69faa69eb9c", "0a287ef0d10b08290a0902512f8f33cb90b0db409462f3ab007e7b680ebd8461", "2ea006d9494e1be5f28578c9a3ddadac041c0e33dc496993ddc284770e6edc09"), ("03c7805fe989d07dbc55d778dfd2cad8df4317bea35931833f8324824296f028", "10120621263dfea77b5e064b9f8629f177538741f12c13616061df2f69b2efae", "0b65b45acb712556e2291f238a12c80ad696e5dc40341a85875308e78080dea2", "2a57985c2f55202faa386ed91ffe5f4c2b3e7846d7d6202ab15d1ad2819dc416"), ("2db48a9de295c9b120e8e31ef5153d34eb9b2902d1e97517ec02d71e5dc3bd00", "0c7ba8a60a0421fb2574eb64904022d7e8c6dc99279796faed55d205c336898d", "2083a7a61970f519e91ff4f1847c43a0db662dfd1447f6df163f1e06d0808980", "2ec48f56d0df743b55f8417d094e777e27aeb02e74b480f0772c2d19dff269ec"), ("0b88bac39534a3c7e22ac111fc7b0d240144cf9d996d37a50b931328add8c8f2", "098e3b260f7f89ccae65f410b46f59b0be96b4a7358bfb9e6b2a17b2480d1edc", "2b3e53b4a77fb7fe75e27ad4d7eed6adf7def928cd28ff1f27116b32c4b11ab0", "07fd22849351f66ae7de4404c302f4a3156e04fa0f7fa31a835cbe0af149ebc8"), ("23b158764d4135dc79e4804bb719099876e24c1e6de02bbdd3e4776c2ca46d38", "14fba4374e737ca7a6ea7ca323a6396f1edb7cb9adb8516b3a7011157d73846e", "1183af5544ee84615629ba4e85af953717512a40c33fe2cf58c637b2a51f47c0", "087a2e1da4b02144b53ad1e73d439bf56c2b1fdfdf8a36e49c201dbedb81b05e"), ("18583d572115a4b2d32bb6e1820f8d04880bf098d532acaf6b37a520ac91fc8d", "26809a10ea03dc904655632f353c5f7b02c743c3cd585832f3a40fdf8787278b", "2d129dd1859e1f8cc1bd5d92b576cc5688cf5a2f265c7ce9b2830f3dcdd2cc49", "2b502426098cf655aa86bf5528ccc73f906ebbaf4f96b1fb21071ee2d634a4bd"), ("0473c1184087537d8358937ad05a4afbdd2dab4aa44a85f7a28ca3a372351647", "220e11b703909d2124f791836ee095dd2397ebed05087107e39ef4b4213336e3", "23292a837ccc497c5373ec3c28283e5ac0d27bdf0d86e13e06847555225dbb84", "1b0893c3a1bcb60fd49bd7896e3021f0a748c26a06350f2c59ec31a0350df06c"), ("15519cd35c95970ad1abf20de1fa03f68edd7e3b0b7a0076d3c3461c8423bc01", "251fd05888b483700bfbd02b9a5381d55420d56256f64399ab33a0a8a2af229c", "24063d425a14e8f6f1d169282beb608dec70b8896dca67164d04d615cd504c02", "019ce40bb3a70ad174347bde15faa88187a8bc6b1e4b757f34132d63dfd89f7e"), ("2c9adaa90baaca81b1e71d05380e36c16bccfea2a2b7d5effe6dd2372e18c7a3", "270e15957629ce1f08428dfdf91b6c964e5a588ac9289f96fa3e607947ee4966", "083bef0e046620d127bd43dea34c0c9e68b1fbb06bf40a4f0b53345f023686eb", "1eef4491c04fbed150d6a8533b800f9f769850ee517f992f9a9a58ac99437ea5"), ("2b552da124a092d83737c945011b609a423581ab0358d74832d43b02b9f16cb4", "1aa6e8138f8dc4210c023391cd397d9018555dcc034097305004c39ce9c5e637", "2add9e98a79bed785e099b10533e01666b83178863a13608a9a02b36029bf49d", "012a2263db71ce70f2cbcea757b2c161f0dbbf6fcaf49f8c044ff1816efb6d70"), ("057cba93519a72ac5d51efaf9b5625812150b715484b66ef3137b8ab6b2ff2e0", "19d82b641a6497f8188521b097626137553ae2850a5b58da1f2aa2bca7ecbef4", "103026fdaf49e3ab447ce0a3b38ff5c4d4b645215b8fc166fc682c4542d82788", "09c14ae23bd227a296f5675be4dcebef20229e733e238e666e5c0854fce25f6e"), ("02a420d281d009ff48cd855edeb9fd3b901198768391072807315c5211e3530e", "021b155543a20824aa5224e89affcbcceea248f35fa4f3f5147a79ab30189eed", "238d0c7ae17d979366b9d1be2deb9e6da61e29fa752a51902d11cb22d568b4f3", "0988be78b1e7b98c095d78e8c5ac07d74e1301cf4abce9d64aa8f16c919f3316"), ("1e7d1f0979d3533f7d0e8368639cd105830f758479cab2bacc573a146afa2449", "1e07f5f338830c87baa8c6d119b07561f994591276c16373951859923d7a21df", "0ddb7e275a720c2400a1fabaccd99c2591e5abfb160b79d55745d1133c8f850f", "060858b0b8cf5ec49de1ba41db7e9b9d4fcac869aecb297934822105fdda104b"), ("23dabd5013ee13c5bb53e3e94f85e9250f986183403e04268a0aee8ca7e6eefc", "08b5a3aee392561e318c5bf45fecac90c260c9a09a3f07475f9de83a9ced289f", "2193fb1d1d1886e252d11cd00594cf0f25ec9e482b2ed71b904e7e7416604c03", "264481ef53b532dbe3f02f54e4dc7b922f8b7b1b25c7250ea060ffab31ab8220"), ("20a89bdcef33dbf86e51fe861036c1ce688cc2adfa8954e115e1218690b79f6b", "06d4dad57cdd0782225047836c8347d48e55f1aafa8a1b06b579fb3edd98d268", "081b75865337d1781d25fe7c7cd4b9dfd1c011d00fcb3ea8ccb6f9affaa5c900", "13f924986af706436394a75ae20490f12f7e982ac74c182c8e83093459b35870"), ("194d58c449a52503a312dacab051de3fd7cbdb3bf9c3fb1cf1733eef953d2c77", "134d89bec4f606fbfcb48e6807cd4ebacb70da91ccb895833c6f814ed20e47cf", "287a1b4ac68efe6b69b0b7886731d7db0d8c1e4648efbe2e9c7f4441f468e271", "0ff1cc384d488613e3e78f0658a1d19bb74f91ee0511714285689a387fce20ff"), ("0ab28dc55c173c4b834718043ea62ac8a625d0ad9b92e503d7cc2d1e647ae16f", "1e597b8a7b128d5a0a2f37230c4fa6173e378bcf8740bbd4b8c8e33b0ec0e4c0", "257dc9a9503b4117b35f1ce746527989eac784a9a727094f20c6d458dc2658fa", "10758c10261af7869209818d869735dd326622bba60ffc94e6fbfe81e83d325f"), ("2c4ab7cd9f61a740313b4713b072180279de0350e2894fb60c190f88a6196a9a", "0b9a18b266bf11b913c3a2453980137db7a9a8b8548e5eb9ca6c66857c328f6d", "054dc7efc975b76a8f69eaf273f5f2c5431a447bb8fd60dd670c57595fb6d84b", "2dffe8a6769a726866a385d23868e6bc3a092a87ebbc1b2d400ae208711e7a2d"), ("200ea07c428a2b33de0d3427a95d92e757adfd02a502510f07d93b78fd6703e9", "2caf2b2115a746daeb1617a251f0c8518334d20239e2d2734af12e5746527fb6", "2d6f6318ce4f6645da3f5d496e9b4ba020ceffdfa21bbbf6f6a1ecc501905037", "00af222922b90823f954f988dbada30a3ad26811eab1f562bac75a8abea43760"), ("0d1dcbde3a87aaeb74635e1502e1e5a7ca92a8ae1fe9f95502cb07b24d9efb9e", "28b9c39dd8a119230467e084037832a42733562c59f6bc8295e5f70c478277b9", "17f46f5a3a3f20e5294882b8da8c161466b93f6141e89f8adf1100047cac7eae", "2bac174943d6e1d04701d4a9c5ddbffed010485a5c7f7dace026e520bfffc0d5"), ("27a01adb6ac688a23886849069be5594113e57b4b8740410233c3c5a78b4e278", "165704b66d555ef91baefb5a446fddb523f7e402f3c96a5dbf3636bb6e10d688", "1be12214257ef9440e52f71746ec66970cd9bcc508fdb8dc051d73f7e373b779", "1682cb974f64f562e8dfb8f785286a95b4725534f63474da26404925022c29da"), ("20d858b399374877d748177d81b92d27d11e53c81cd6629207ed5ce576bea866", "2cc878ccff1dc42737904aec69251f27dde5defc546e91ef394014552795cae3", "0850497ce71399581dee77f5c22a09e14caf40675dc86c2d6faa36b688c79ccc", "0619b77db742c8b29f5c96732be7a873725c06f84a9306b7c78f26440f341b56"), ("126e49c83280b2017c344cbe1af5821605fefbc74047e9793dcfc05d88d46054", "13eb6c875ebebb34a04aa0a8a7d940d9e0f04dfb007143a0ada14a34f3cb5714", "006285d685ac4c5f26d658e02c10d962530936f494fe8a166c039fc9616deea7", "279306afa89057ff68aa553978329d46978a6f64097be0bfbe01522afbee2f78"), ("2779537d6d0a0391d3ffa0b73ac02e5e9800d989586d69c3c8129f7955605281", "12506affd66958d9041d1a957b29ba405f97037339cde0a9ecdfb1d546f4e55f", "1f406f92132dc14cbb492cf76878fdc62536b62b6270ad87b50569bd9609876a", "0e66cac043156b18e75e8fe8a9cfeb0b3127509ff624f10cf4a0a113390a4408"), ("00c4d8d26cf8725aeea70fa65034d69668d113c4f83622fedd9479275132ffb5", "2ca5771cbb637d2cecccfa320f964d8ed2346d620b4ff7c16e894bb84fbd5793", "0fc1619fc0e53d832cd95a1e9478bf9f70637076203995a3a507b4d6a5878e5c", "1093fe3c63508613a856d37e60b0259d04ef4f66a63c6c16586cab4079461ef4"), ("17015128e6f2085abc347bc04f7c1d34ddeb6a7e1fdad028a8de3befd0916612", "24d90ac328267e32b63a45fff465e6b367988c9b4d0da369d0c473ba40dc65a5", "072456e1fdf14ef7ad22daf05801886d8f2688e086a64a87f296282c71f82321", "2ddf9adc6003fe1d0b1868b43618edbfa7b01d2c4151f5061704942cdb0397fd"), ("2f2708234df6d65777a17380e5d80f7c7be5206b29bb7708cb90ad8a133a37b3", "1ff358bed1b212f475cb3a581f433d1d1374775d6b25bcf452c46c1f61cc2d4c", "03811d5d351050c4239d1d32990dfa38e501a353553ecca28630282c013f7fff", "273fb6dfe86648592be5de30408d34a712ce869dbabac42aa811c7364caef95d"), ("1fd17544ca81dcb531270b97352bf7fec1237937279e0b5eb64ef884b923f2f2", "026764509d583348e07e620723e9f787ae0256a9edfab88b9ad236c373955102", "06a6087110f6c7954d55bd8998f6cf624aedc882d2185354ba48c50f6ee1c465", "15da56e958d9896144b247b188eff00f193cc96d6e896f273f5732b17c09563a"), ("19d3a69f28251bc6d961692bbf3367e895fbf76842f3c7a73305c5ca4a8513e1", "1b21821f4a69a8afe80ff5fc50e41221326e40a18d95b2d093a18a9ed9927699", "00f57dd49599c21b540f8470667f7ef714f31e344eb4c177a2dce8307ea26ead", "2321b091287a07b17f7445568d599455b34925e9d17571fcd03c8b6e3ca017ff"), ("275ca9b35159be0c4a2f0ed4932587471aaf44e4d7424a93808e62449f6555b8", "1871560df0881eb75da39103576ea86e8cbc1e352612784494da4a5760ad77fc", "027cb415876e5b32cb61ccfb74be92e8c2866a161fa3fe4f8b99fd8fa8a7222f", "0dfc31cf623f397b842f68dad32b252af1ee4cd4c91038fb43da818dbafa2cb9"), ("1d73b95d77c350cf54cbda7011c2a6962dbf586800bf6ec5d551bf2cbaa1e749", "1570489cdfd5524d875c6fd66d36dd92df79c9cfc5205c02db3c2643bbad336e", "0055cce179be2aa48ca4c801c556d07198a228e50651193636bd08ebe816e936", "18c3c8e60a88f4d62f17307e56a9d0f3397b803fbc59eb35031b39be66b77e87"), ("0cb59e38b3c280367b9fbb6762f3f9b541cd0e52fb2650fb4c706e80641752f7", "2f56dd635337680663719d8d82175afb219013dc01389f37e3edc3a434842ee1", "06f6ceb81a8e2db02ff84c54113098ba2d0ccd8e9444dd88e23cff31decae30c", "01fc0b28b83b4d5ff7aa9aeed91f19454d488a46c45822f880164f77435e2cee"), ("14543f9a754f9ca243734640d969bdb9edd09d4e7e8bc2e742c19815e56375f7", "00efe736e4ed73d3c6237969d80ecd40cbadf7ac445f95ff0d36af2a12cc1919", "0caf19bdee9a658e294cb1c483345edc307639a0bddaad29518ace8e1ce65fd5", "1e6f5d00879bc5a9c02254ca9a654b163ff1b9441ac63b0108594af6f0b62f89"), ("2385ef9b2bd8c0d0606d14079ddfd8f15fe974968e207a31dd1bb83edebf199c", "13effa5ca6cca18047272a6508c1ef6e1b17b82d736c2b615cdaf55f844eabc9", "1192befb66dd9c00d2718989cccbf5d287d7bd8adad478b46744646d59080ad5", "1a67a7e732a0f44b389bc0f68c3a10da168cdf2211494fc256f17896964ce5c8"), ("2f712484442515c37d04524bf48ccfb167b3810e96365abc878680645d076975", "1c548b2facdcf5e1a8fa365d39e12a470604944072c3f06d1f3965e3a69a44e5", "0e566ec3f43e6ef062d9d78aae6996f005a3ffb3bdff607abdeb0eed354afba0", "0db26afe333ae5aaa4c262c80beef2ba866b4dc163cf68008a3bda16cd705a7d"), ("2938dadd3f5701537ca3c6c176db7c507b082a5c55a68091defc51383957a2de", "1cd8ab85dacb0a4c0917c71858310c7c85e615ef24e93e8aba9e78a651f67d10", "2f4a5087e002ffe563ae74112a26e809aaf1f0177d9e479204fe8b77122c47f9", "1fa29a33d2e47abde41e2284c9668ff9710da7189b47bf688d91d1bb20e70227"), ("2f4f85ce76aea2b5deb59e1bde974ef10e04d965c109ab7cdc0aab9743ae9aa3", "2b2f8d71daa68b5f8fa0dfa42fdcdab3a13535b900410f1c332e4b679995c22a", "1c488c1771ba0549daa20b5f03d627f87b1db93a8c877e6d880a3f12ad842c9e", "1d15722cf9e8abafc414e34541978747e90d8007e24d295e99027f9c815bf7f1"), ("089c6d476df8a1a28d1c9188a3a578adcc2b02d31d7b5b9328fc3351a058ff60", "1ee7f69c8a81dfdf3cbbadab218f2ca011340febe8990f944392fa25077d828b", "1354db5f2c6a68a82d0d91fd59d358811e62b182b584eed156c8d4742e14ce41", "03cff65e4c85ad27bd318f17fbfc37b27ed74c5b1211ab2613ec7ced85cf8d91"), ("293be0b6f2cf6a03d3d4e3532df1eb1cd44f2b93b6139440783d10d292747c2c", "10bf5dccf30762a973430437544f36429135e902b62d67a717fc6a7dac6ba720", "0daaa3a63f9fd8f08d1d44d5f0262d70969b2cbdfd13502ef54845591b896736", "06c5edc1fd196b564ae8fa39015a6bab462898877aa20cbf63af0d688dda40c4"), ("24f378d3096be858ee0f1dbef4954e46c2591166158de8d020a9a5e7f2022e1c", "0adacec94fab44b4ec53dbbac466036f3e3060d0acf2ced6dc06606191985c96", "1ec6665a86288dd7db36578dc019d0debd43a0994aed86bf70385e7c8f8d4e62", "14c7d043fc11220d7fecb67a6778777d0aebef292d9b9e1066142cb1a730f311"), ("09e821cb307531be43c971bbbb12e60364787947021440c79ee2c4683130db74", "2ca9ba1cb1fd8747ffac73e502f04e4c72431402b3c0881fe7e5d4c206aa2c6c", "2818439626007a2fcac1d102ad1af2dccb3f391c6805dc6a99a283101f244f34", "01c3a15cf01faefe2dce6079319641347801409622518727cc9bc53b25966c47"), ("02a7e73b7317640164c83f861c9ca333f4f10ba7bab9b784d442d25d782a637f", "02331b8f551452bcb78ede8aed127da70306d8e3a4216a0fd33adce2f67522a1", "1444927f6139e633992b8dbe8c8d964fbc2695935d0856f340c71b4e07248b94", "20692b36412f03114688b660fc5ff79308a5dcb43c91e4ee4db57c1cfc918f80"), ("28c550421ca90fc1d2fe9a19f009432702e3355780f4822812524fc8afa7a683", "1b25e1ada67c73cf75d09f2950481403560767f85af5b3c83814faf2151fe0aa", "0e6b6dae64eff9e44ed5a6b6a3d8a00ba256e39dd8126a08a995c7c1b89b0820", "156cb2a7d86ed0043d6816f8b98bcd952b11ec5ca55886ed9fea446f0b937c95"), ("13dff2e996c6effdbd4b365b7b6cb67e105a6b7c959216171bcb2f043d83ae58", "088feb31e4f2c9b12b8893218c53db6b840999101d828b99d25f339404ff823d", "27b4c61c136e7ccd87ddb457cbb8029291f20e5c71aa1b5dda872a5f76c84ba9", "01ce9f56d01959b215100956b21a26f81db351fc67c3a35a812ecc83a6ef95ce"), ("00787a8842d4e582543d5c96656e4f8775a18a30f25cdd1f4ed9bb57211d2a05", "036fc79b7edbf59eb3c15b0ec65a0c9a32a939605fc5ea855789de559e7bc728", "04a1a423e3a218ba32553effdfd591fc6026ca74bae92892abfc85f54155fb06", "155bd68fbbc4401ec8821e3118bd4080bbd5fa51c6752f32e14472ea75ae48ca"), ("14f4afeff2bd101fb55ceae9cbf8cad747d4dbf01b15b166d4fb46bfb42aa11a", "0056c6686debfb277968bde2f623483aa44f4bb27ccd8c928b2b01adbe535209", "0253b16b1633ba6043c72c9a4f21ef7b8eb10575e26fc850fb8329235cef80cd", "2b09356b3907b03fdd59261486c70ea9b60e47631c538fcfcbb7aa45da40a935"), ("235a94d861b1abb3826d3c2689e93282fab73d6747db082c15ce5e569bc48693", "1a3bcd25234fb58ede3707477f5d091420bb0be4f5214fdce1ef38eaaba6f1d4", "12d77cf79067d13f1592913603d218df683c14be9f828a663ff93f54bb55e065", "28089fe049436f5f94156a3ff1df3a702f3cd9a0694ec36637b09038194df7b0"), ("2da7e690c686fab82cc358573042a1b6b61ea7aa60ee93169b6961f21e15172a", "01c7e680dddea0c103d1089854ce4a3d841198a5f522e2b499b2889abed884b4", "16ddbda996955dfc1562cd2ae9ccabf75310aa9d40d8711b079ab25d4f46fc3c", "18ac12f678fdd28f12418407dfa9b6d2fd5cee4ea9b9bdc74d7b6f99617cb5bc"), ("262767eba173a42573f81aa5c1af3b75e9ae1bce3d06764590ac119a32b23001", "19db02b835e8bbdc1b3add087a0b40bfca41cc3f6bb18df1708e294c73f86608", "0799a9d211adb573670bfb04d22f24b65ed3d1fae0be00de1882ab156a77ca32", "131057c36271b6495d5beb47bfcab988f2108dc37f7c2aa44c9ab590abf2ef44"), ("22ba51532dfb9f2ea9ac1003cba63a673636ffdfdaded54fda861ccca835cec8", "158fd95f86942b6b67104d20e0ef709540ebf17002de05a11107fb17f7d184bd", "04ac1db4343cbea32d4939fe5d453684eb488437c108da28881abdb269c883b6", "2a342d5b912e9340cabdaaa9f173c50cf26cc410f41629a92076d02229bc5231"), ("0a3a3c5ad3d8f97830791c9ac45e126abb6d4c4d2c60b1b5e1dd1d5b0f4f419d", "22949c7850f5ff422d7a417088c7b1d3deba946a99e9f3bb4622b9786656923a", "27b003a88bae482ca21bd93222ed06aeb9f6f4774bc9c6e0153a2c896f21491d", "1ee36aba67269cbd5988e01d6897d4a12ca3128b05a64e998277a563720f4400"), ("2b2aadd00f72a995b868588ccf0ab299bf85ab7019ef262e696760003147a00e", "2b07d02ed068fe7942ab5fdac49a5c8770de2a09e799b6ea0d099b1d0ac8de12", "162a2459a3ec55aad06e64c40b87663462ef21ba7cd17fe41aa5d2739fb803e5", "0561fa99075ff212db4086695658313bb30a771dc6c9b3b83c2fe456dbbb7545"), ("0f6a539405c5c8a718a9fd57685543c8ca7a6d7d703fbe5bc9f7c78fcd13050b", "133397ba07ff164c179e9f22bbe775edfecc3a50e7d2ee31a610b91ae569aa10", "0eb5a0092a8e0347cc0bff39fbd787aef669617733632d739a6a7b1938f80745", "1b2234f212eaa02b8eded04532f27d5d09b322a3d65a5c2e96f0064ba46c8484"), ("28dc868c7e8791a7f8f58f0498acac4fa827d774b48bef87726565320b8fb8f1", "2ea0816357ccc3f0383a70978395a97884aebe1c94d4e376d2aef1caab5ba938", "1d08bb6829a2f5d2dd395fc49f45a6847c980b9239f78e7874ba7bb23f25d70d", "0380926534990abec8473ae19bd000003453c04327d5e984ff5e2216fa8c3aab"), ("0fecd1b1f71a7a9c316ac961dc8fe78bc1853dd7002f04f0d4e01fc590cca394", "094919ea9277871c0b7f0484758bf2b286b6c20c10f57853c30d4b3380b3056c", "0e56f2e7afe6fa433f7cb9451c26d14ea61f22620cc0ac816984be11d6235788", "1c2265ee8c110f9b0fdd07e772e7311c263de258dde390f6f712360eca751ac8"), ("0335594cd9195481d8e80a4860ca7f988483141e371547b6992b9914a958c0e2", "19205c6c176fc8d68962409d30c2dc0b65d455abe69f3b298c1cec8a56e82074", "2f596087a7c015eda1f5c336dd006b01d06da0e615f38e6de81bd99261752da2", "2d33228d4244faac677a55d05747603c727052aa64522d190dcbe7c2c6702aeb"), ("181b5110d1a25354007cb30b3cefcec75e22cf3e2ea35f45fe9a78471329463b", "2042c99ede0aee551ddb0c0b59af59945123a148d903ea16af21e5350405f151", "18c5bfc7227b6defc5d456fde7d00141452df1e54b76340696f6724a5d1ef643", "20a49316c40c515b313d2778eb42cadf5b7eb30038a9a3129201acec44e8109a"), ("2554352d8cd4e1fab7bc6f1c8b62eb543a7af7601a9ccfec05aaaf385acdda50", "300a29e2b6e77d8726e66d6f7409055d2d8ed6863100b350c5ca7b079cf61c61", "0fcfc5bd1b8b0cb31bf2c1aee4d0c0caff71fa3c82b665ecd1ec689f5e8a7f53", "146d4b8c210a22ca451774e9a705c2a5b61d73a0dbb62d7045878e4e84494ae8"), ("1fed7b03f35c8359e0dbc7fc60a11e47381e1a0bd53ebc1033b00052df9e3491", "09b52d1ce3db463ffbf68ebddbf5e6489efe309c51564844b37eb3ed7078c26e", "07b1265846f139de61da13bdec20b51b387ab8707acfccfe880718f03f4eff6b", "268e9b7a2003b3a358eef803742398c88ce9f95f64ec6bec8251b1fedee9d79a"), ("2c39485ca6eeb2d689c6bebcc47a672ea0f9671e130840a39815a59d7965f1e8", "2b4aef5fc37453c2a91def2a24604cd31568168755691b0dbfe81bb9ab5a5f38", "188c2f3e7309151d5d1636a88692f21ac1b3eece4347c02ac20128c65ec624bb", "112da9aa055020a898eaca934003f903f8364b721c04a20cdf1bedb524d846a2"), ("2a8ad68c191f85f6487f78414d846a6d06a542d3fa5ff3e041b30038fd8e8297", "20248482d9d1309017ddbeaf0adadfaf09e53fc4522d725ffc0c8c77fbbc3f7f", "2f49771c815ee07a3a1edf7c1ac9d60789c20d6c4b6d5b20860f221ad5fef56c", "0482231fef993b9b5c2ed0b36508b7db77a94dce112e13829663ab2976324a3a"), ("13d0053d267559fb757f306dc90eff21a407634d1406c40bcf00181ad93384c1", "250a7a50c8cd6291f8d0d7409742c9408082b81bc33e770a527f438691eb85e9", "0a7466082a3fdec906f02e7953bbeb3fda81a7eb0f426a62705ce380d16ac16f", "0cf97d60c30cf705841b7025aba6800024c7874b103ac18854f792f60c4b7c91"), ("072dc282905a29ea33e74e19f199f615b24e587912d28fd5debbd2a064ab0bf1", "2e387ed762fb1e4e25649f8b2aac129363895ec9150b1c8630f2e6a6d6678d1e", "0f19b2d54c7a0b871dd60c4310290e57a58d61cc7f97b534b6f7cd0a09081f33", "2a61acd4ca8695b5f95a51e3ab82ce9ea647ad529bdc6e2eaa2359eef2aefca6"), ("1ec72321f06e3045dfef6f7667b05632a1ad30aae6c1e4880f0d8d99f31921bd", "00b7c55e0f578d640ae328b03a96a168ca96a783e9a8f200821fdaff256dd457", "22a8cd296bd11ad5d41a494ddc349931a5749d77cc79c8e518270ba152190987", "13186bf9567429f4f17eb73a1d654b6949c41e26931647df2974a0ee7a380be3"), ("24ef12435c6c4751065d4c410ca942a4ed81b0b7579783ec0ba11ea2b1aab519", "1cfc94b93bcec97df214a61eef759bcd646fd730737b3a9c797f5851e0f6cac5", "0a4f079fb935d6ab0b298141a0ffe424a3d1bf5dd354b894f6f8412512349d30", "06bfb0fc4fad840b593c9c96ff32186177aa211b7f9a81ad25b5cb11e6cab0a2"), ("21d0b3b29e00a285af70a434f148f02f21cfb23359b4d9544a08164e6f9b571d", "14d0a339c4f9749e62d237cd60e1f9d74258bb74d77846f3aa73b3e1be3cc57d", "2a0d18f3ca596fc447d33d90b66ebbde98f99db4d4a386c668c389c2024f6764", "2d1ae6b871c251295e6ecbe2f8cd3bd167dac9b23779f6303e2a8a10dbcb5969"), ("2c74a23c71dd3f70d4fcaf3cf459d4c2c6a128f6cc0d04ebabd3cd1aa5da377f", "08293f0495ed0de39a69c94441601f5be6ec4a45876f11ca634689d54ed101b5", "2b122ace34df6ebb64b046f5d146f138b49f5004694546a51870743217c48715", "22d6dd491ecd5d3bcb55a4fa888fec2c8ddcf45c81138cc3bbb6244a51d375ef"), ("241454185271da6e814e63e9badca1eaac2a21b396ee3d877aeae52be1757b1c", "305e12ca5c178f60f6160906eeaee74d0bf8d073a925406670601f4263ca4556", "202170386e90dca9dd4f84d7e246650d509656d127b32c15c2a05c13bd90fc98", "290a76f553ff5c52a216737f83d60c374d309b99c604f73a76353e8674f38c72"), ("21d8aa77130d56b6c4f482f6d3cb00089e51b5e0c8eebd0d27d03e4085a31080", "032c8311e8582345ab75df6a740d82816dac79cfcbbc476ecd5e12ee75e7507a", "2e8d83dc0fc5d78d73936ab75b566a19c4e0c2e0272dd43b7b5fe305238558ee", "0832f889c59c9df11bc01e768c1ddd8680ecb3f023b033d5cac64493aaf684cf"), ("186b08071e774f4df2c80187cf7ca973fa25296efae171fc4f6f9238025d650f", "1f8e273db823d0498058f3b5aa438c774b4fc21d0c9ed61e1cce03951a5eaf28", "1309af613ed7de454c7aa7fafc7e07ab52bcb94b5b86a1b3d409bfb1515cef0c", "1d684159e3d09c06f5748575bee829b08d74f87dcc8d664279625d7bea3ad462"), ("1267210495b551deb0f647631ec3a36441e401a2ef92916577808a478754fbcd", "2982c733df6c9f4f699ed8935e35ad7c3d9cb39b8a17a715e6af4af862f165a6", "2541bf4cd721507556ec77ebdbf9f398407822924b143242e1d923f2267a7fb5", "0126b2527d3f045408397bbdd3c9aeba0b846a18a541f6bbe81a538d51680f5a"), ("028a3bba3c4b6140b71e7622f47c1ecc01c15ba49b893301096046576e1e8fbe", "276e5b94864e7e3a347ff3b6d41f32796be1d829faaebef3293b4bcf059ef90f", "1b96e0082371a267c96457eac207fac5711d8396e10be286e2b0ad18aba32496", "067d02f9af53ff614103e2221f8ad435c83b16acc50ebcf64ee9740728220eb3"), ("212035b2f74c5e6aad1fcfca5250bbb0879402f0b8a384f5c9c492f62bfe36f4", "09f8b4a8f13a40965f9c250577acc05b1c1e8d06e4fa5f4e2393d082ae202605", "043301a0ae3263282818ed473740fa38489153f80332614cb5b0093a98010e1a", "16228356e6a3d77ecb7e82b9fb73cd98ba537738b8ae17ce44bf88a5f5999bf9"), ("21cdc683a62621d2ac7508e8f043ca361cf85a8850cd4e9099e8a146b86182f1", "1ba02cc02f8a02e5bb1da4201adbb70640643acb5bfd9f34b9eaa620ae87f962", "024507f422df4f2d2cbcca80c7bde248795f10361c3ea11d1d8e344d080a0634", "135597a0dd4dd01e3412a616cbaee408a94324c59a641f9b7312d9e4951c7e23"), ("09b4075de149acd8d91f90d399b38c334ae65697fc50118b8c9826a9b5f6a4e4", "1928f8ee32460f59c786086a0cb484f17e7abef57e8f1ff7fbb855425714550d", "0724b8074baf2c1bc16d68f793d8445ced5be8545a73f0a66b0c91f24c2b071d", "2523a83026d80287c9820716cd0bf0d0989779ba33895ef257852e0667f79c70"), ("2927dcee747e569235d9d6da43f8713c657b6d92ef18cc5a66cd5f6376d9ae65", "124934a28258deb760afb27ab4f36c4a6f7762a2203465d0f91364f2d0487f9b", "0efccf818551cfac1c3874ce78334fcf72379c1b8ef1f8bb971e25b3d414b7cb", "07f73535f45a668dab534ae22d707b959b800b5fb1a93876f072416b831de641"), ("25d64a08d739970ad16729d0b38eda6b61e5389a10217b266c2bee8f5eb39bec", "2dbd3438f799f07be3144744da0d20ea76b81f526fcc2e3eb139c8bbceba9383", "15e295682609d153f370e2be14c87af126925483ae1150665bf762bbbf8652ff", "06d52023e175d6903bb5c1f20454670beaa4c607e45fe94ecca8900c45bbf4bc"), ("0081b43fe31f34e34e6fe8df9b39adf72b73671879c6d7f6f7673b6b9f1e3200", "1106932f74d445232b0866eaf92fc8061cae3c446e8ba687985c6e1236e3b823", "273437c85b634855736535b60bb0fc16b8382e721d88422990383f21e6c2d9b4", "1fecfe21ba1801eb403602d905eaf8185cb4652993c78cc9a93eef123bb4fb0a"), ("1603134a68a7521e5566bdd9682f91b8eff26b0fa264d3093bac98eeba492054", "1d9dae6516813d8d47d64243a83b770df042170c5566d3a31389541deecd3067", "185da76580f7c69457398ebe3ff67ff7d94a1a584ad51d568220cfc2e9c36979", "01165ecf01efecb86832de31c90f681ae5ee0e83795d185e2cb4a11e38549372"), ("268f590bd8a4fb07bd7e9182f9356fe5b817845806ff280a85b25a7d318fedd2", "1286034e05f0c9a0549f7efa4f6b9801f1eb47027dadaa6884c5754a0458995d", "24d27633679a9af396d66b18f79b0621e9b52a4e88febda8f8e8386a788a9fe1", "1336fdc973ddc7f2c7b9d1baab67a1a7b3ddbc18d38ec38d69820e722e5669ad"), ("1dc6fd85992360e2bf39aceb5c328a28a85804da46c61012bcc462634494dfeb", "2c6e6f1b95e901906badea8d698485fdd5e90d64c17404e695434ed02f66bb17", "12bd5d4630c82de561c65dc19c76df665825750259b617826c76249daec06823", "0467c6e9cfaa616519e5ebdd4ba27d73348f92f53343921b27939ad09328c2fd"), ("0a6ded90de3f3396c60f8a3cb096b11a2c03c5dabc7e82512c5a5bc6814143af", "27a95fc62a5f069fa8e510e207d7632e9889a5e58281f80002709d96b0ca3858", "267c8f0ae584300b43a9e0adae222cfcd378c688b9dccdd3c02f1b2fa30fbb5d", "024b34081fcb3807eb86c7c06a39937910e98f8a810e772b5727c0351e02819b"), ("280e4a8a56f70fa324cd2b3142555e5f0564b87fbccafe8f5c72e40379c558a3", "1a4c3cb4a724ef645426c3d96a217b12c1271c994e4af3e7d040ba8eb0de0555", "276b9c314d0972ea1744cdf486d9c622b064c62b6ab37671b52dce5f73af848a", "19919f9351203536fc5975be96955aa30afb3de087c96c1b9d896682939c3ec4"), ("006ed7dba150c9fe9c249a8acdad25ebb984b8a43fe3148b3982ca5155643e05", "09908587ef49039077585cb6f30dc38e9f33f120d8d3e438a03efa4fb7e37b58", "2fedad922f4ce22a87c8c13850b7940b45455966826155a8790fbec20631df49", "2a65d894b981a24710011c4fd3ee53ccd8abadce6ee373fcf7c3d7575dc8efc0"), ("2e3fe2d270c8eebb3a234fb831c3bc016dad381a1b30d858b641f160107ccdf0", "079fa8cf1e39f15239a74eadfcc48893a1613a733ae24881081457e004e3291a", "08281eb16becef4492b180133b24a8c41db661be6da9b59f82bfca17d96e14ff", "1d92521d33e4a7d05e018efb57878cf7ef94ed17a0c667076a4588b99ab170ac"), ("0ace427d2970fb4a4fbde53b0f89a7555c6356efc68a3924d522029c1b0aaf02", "27fdc29d918386a875937cbf595a7cff29cbb8f6557dc2a39fd5f5ad85918608", "29f4e968566310d21b2f12a4a76cfb76b2247c4b65e710de49add996946de1f9", "046a82b864be156412b5fdb82e15c4dae9119113a0cf2693f8ccea050bd729a9"), ("2f86098d7efd32f239a72ca9dcee2f872c84a379f995222339292ee5637b22b9", "15b14d587a105c0713a2e98a584a2bc7875fca309fa86e079345ac343d45c72e", "14de120ac4372b4d952279cd2f3a886376bae60669165a72e6f08e8a334df26a", "03ebfca826e75cd4f2cf2eed1f6e105ae7d796065ba468562556042a3a54ee89"), ("2b04c06c4f980b4cb430126e2c77d51bf83425cc0fc9145bf348edcda5b996ed", "11c14c3eca088a3fbfde221e530a0c11563573d2141387d00ba5aeee90b02768", "1cd3f25460050ae554d84205a8247089b4e3ff8508d628e6ec97680da03caf04", "1d8ec4f4b49099784c8aedd73509e0848b26e417db60bc2c8ac5cf4e5b64c1d4"), ("083e85f11e3d5d41076d83734971f22dd87775198115b7a6a4302d89eca91255", "213cfc19e8f11a212ec1a57aef94f56523409290eb1cabb259a8ee0866adc45d", "2abee73ec30fcb7e2a5e9c1d5a1e6ff52fd1d623bcd796d2931aa535d5fe7a46", "116bd749dd52d9ee7eb1468ad362931e51e22bf3c33c95259c7a768c3390c33b"), ("2be3ac4cc93473f2072348656fb321e68673f10a1e9479e33fb6e5982c343f31", "13cc71e783847e1cfb4180704e3741272f58ebf9bfc708476ecee5e55fa6ee9e", "2b9076a6ffbffeb43e88a48383ec82e5fb455c5f0eadc3fa8162a606e98ff058", "147b4458bb788cb87e7b48e17f9779e23da900b4cf15a3e8737eb2a79e7b0c7e"), ("24fd1ae5ea721936f9b01ef2d261c382d51bd35aca7b6777b19720dbda343b72", "01bda381e3a30391f52bf55349eea5577356bd8722f45d177ecba2dca5cb3d39", "294dc9bc46aadeb6728890b807ca4668ea016c8b4903c84b5107feebbaaeaaff", "0450e94b9155a79f346f97c6faef55eca02c0aaaed48f31f7a74a35c7e368f32"), ("12aeaed6fd2299f45e744fc17504492f4e580b667803af15c3c891819cd2dc30", "2fa324fde12a8fa8b1230af2ba2f3bdf54835893082e3ba8c71bc3b740539ba4", "02e41532e06682f39b80d5c1bad251d136affc7f08dd9388913d8e09c4ea12d9", "1cf7ae51db8b10d6923d622800722801a96462c56d1c4de70e8be580fa5c9583"), ("0cf99f26ae69a69e2f2c1869f7930124f2445524f8dece86e4cb43b0d4f93186", "1f6eaa5929a919cc2c53429797ef4e8e8d6e1387a5eeb02f3dc2234314df967b", "0df8f14108bab71bebcce2f84d56d9bf1555e494180080c079887e4eab4fc082", "21047e7026375da74c1c75294bd1411b69779bbe973826b2db3402dc1b50c67f"), ("0b235832896107b0dded345cc41fa59d83349473b3c5f98b0c277bea1f16a35f", "23083deacb64c4ab881692060d95fd1806c6703fa33222ab029f2ce55253adb4", "2cc537a67e3c70f1815b77a797352b11f697c9727f9a14b5e2668109c7a1dd37", "2336ac4171beee91568f09aa04193a67e1d4adb9fe9d79f6e11d1a7bed97cbda"), ("2cf665befbd5de1ce4f1152524c1de959058fd7348ac849acdb145f50dc96f8a", "0f7e64712c8b147f74f1b2fc982ad6c1edb47c772d768b870d0ecf6e93fbbd03", "1dd609ecf2ee4e560f8df6278a8e8dfd28315612c2fe03aa55fdee56ec151587", "1984387ad5501986cb0e54e14db4fb01c496ce609a453e94a81cc7243580e2a4"), ("0848d416552ad795f0bbb453d411a0ea6aaa824fef193ffaed7e7b3083d55115", "0ad844b005a634d178bb5bc89ac883468d1de06cf15fdb2e68dc4147b94fc930", "2f6fb1486a834090bbc85edc1e64470c9f6cad65bf6d136a3d2b52a6200f4d6e", "17ef1dad860ed00472d3c9a82bdfd4e3f038868573b6975952caf3e326faeaf9"), ("141a7d93dd8a18fa8063e41c64e16efd15351adece8d2ea476456eb3e7add77c", "14889d7f1bd30064fc3cfc9162cb9cf0438c703c8f056dd527e3a102fb1f1a3f", "09e11c1eeec0d514b570908536ec9e2a22a7e9cb7d270773ab4d3c80c7e160a0", "27dce8472e8a052c2fdf0060223e30c8267dcc461158349e6420f6ee96db6380"), ("15244239e9e8ac75ce81f83cbdf17ea0a1661deb8bfa2b03134e79ad7af5dee1", "161b9d1a7baec31fc92e275987f676c59e781b72a6d0622c70db19ec65d4eaa5", "21e109e8ce4c7b9353b51e1b64750d94d3a900f9f113c12c9de3305235916e23", "14fe3018a8f626ae4f0d99ec6974d45de2c0c4b045cfb55819bd789a0c30978b"), ("049248865f0aecd45183ccac87b99bc90a17746771d551f84231612c4d53be12", "2d48db71c0ef9695e115e63f98894ef44382ded15d27bd2ec2519304b6787962", "1203d17384f2040c57644df6055e02916ec1c08f8b4a9fbcba43c5818ee374c2", "11be2cea5899015f727ff54df5ef5dc888346c33b40bf32220082c49246eb117"), ("0377eb4acd51d9dbd77300c67b5059f04a1ed26b3fff17cacc86ca1288434d3b", "24bd955f4095df8ab0d87e553330d7b35e33601c2f8d9f69b7368c2d7bc72e30", "15ddc767ead6eec7ed48caf5cd5fae7aa5a38a93f5680f664af740e803731794", "1005fd5d405ef68c62a30140ff8b69deed6bf5a16d4df4573c6c3fd17808c40e"), ("2c82712aa77795ca710cbdb81e0b986925620cabf00acbaef5b25b79b20ae561", "0b468e8804c3b704c57518ca3b06a22bb65963faefbc641dd1667f633b3152e1", "2658746c5dded4c8c82faeaaa43a163ad0a351972fd9a6b71635c1cb9e1ea017", "09b9646c714e0550fe0aa17148a6b485648334d1324f93bda61e882605148ff8"), ("27840381d7cd1b6df8fecc430ac50e30595375631dd7b46de12afd7ab4b915bf", "06d0a531c8f83376264af94db6c8e8dc9a978a68d2f7679ad7355220b769c5e1", "2d6906bbc162118b7e1163e7b89f5cd59dd99fcb96c43cc75340d4cb4b90cd62", "0761f89e7df875e96edd3fe514ce5cd61007fce610708d6e86ae5c15a9ad8de7"), ("29f06844d745c0601c923f800227722b400aab3dbac98bcf8f2ad3f4cc3d5b66", "0f24da77074f10153b7378c3c51648ded951da9c2fdbd685592ce8d0877e5fe0", "04a4ea1afcaa06d5337695481d6464d7e3242b2df953d8cb7e9edd69f1c4307c", "2cadf581dd867299964b226326694318509c01f723df80f06f32528e95ebd0b7"), ("0d9f703da37b04bb7ba054c84b333bfc9ec7fdfc7a8d6c9ca03e14d3df2bb9a3", "031d9ff7ac9d0c76fffccfc5ffd05135ccbd35f58fd11f370c66c217d2ab3fe1", "148da1518647a4baaeced44471974c090f0d1851de0af4b021b30105f15dde1f", "11a802e1d4021336e8a4e509af7bdfe07e353d63033ece2d4df0e7f6da6c9260"), ("13f1279e01172005b772939d950ad537fd26b8770dbbaf360ce57ad12b9df995", "274c9bc44b83273c429f7c7cb87679df51f007b2d1a4ac3353181adbfb946c62", "109a36249d9aef5b89613834da2a80f82ff3574a40baf090572de23547c6fafd", "010606d1277a789e86b22c04542ae9d88c8d36697ec03f3e398ddaf74b51200b"), ("077d2a982ff327b9522ab6959ec4a165d5b6b850b04e09bad9b46da215e8b585", "0970a5596c322265a7cfa0b3226f4e2f146e22207c6db2591764c1da14c1b283", "198380bfe89930ec4d8690f60e942af045efd2c633e235df816cad2fdd2f8c1b", "08f67826540b9020d8eeeccc40d3fcb8b6f62fae95b5113ca0a2216590d91800"), ("00fe6d6f282520fc51b9b038bc4f69aa97e785c068dfe353904a54f38a79082d", "257609807a951fada76029cb1ac7a5df4794d2f690d986466f0fc020e132e250", "0dccfe3571dbba73964e5995308a5aa7690f8e941e4ed2bde2a979b91d6b3740", "0f108821b7af9181c8042223f9ecdbba9aa46bbf280a715c219484ea80e07075"), ("1fea9483a6ff74fa64ccb1dbd64cafb3f4550c154477ce0d96314d54a303dfe1", "0dc9eb0fd1089a8c2027903631674eeb8028d570f7f9f6eaf8c4b98ff8a8744f", "1a0ffa813bd7740bb6e0a56a8b03dea3901c401b9c711e936fc46ea7b9ef7881", "21bff745466239d12838a143fb72ce141a7f21705c6fc22578595c44e19c4c0a"), ("1fcc10f13a736837d5cf30febfa780f04d0c275fa84020f277a309c14eaeff96", "28e304bc1b32e194815459dc70383ff59d176c85198299505e94d31be197add8", "0a39661b2a46aec34bf8e99d9e69317167261a6b0f9c04425b8915a855029c26", "01419bd6d62a7c757b4b6c90cd7b39df3514be37553620777897a280a462839f"), ("07a711d362535cdd584be160a709c87f4f124bf7181166c09abe4339211e8602", "2aed472e5a85ab355ffda745213859e286ba80144092f8b7ea49a2904bf80dfc", "2d2df7906d76b953919dd69dd300152adb56ec8ce3e6c9eed628e575fccae7b7", "1e9bc2d60617b8dc39b3cf95351c7ce068dedcf7dc3a31f0b7417f90e2264744"), ("0a7e173139c0934592943b8ab1407b6c3299f3f6ee3bfd88de9505ad852009f0", "05ead15ef40c3b3d88e310de2b839ed66ffb08bc47a1e864bc712ef537fe2316", "06460ccb070596ad7de76247ed48c0b2d8950846a6f02ff5d8ea7489e2143c3a", "175bce33dde4528df52be119bd6f44a00af574658424237fe51fe54ae2c4384b"), ("239c4f7ab2f2286bf3115f9deb2b3193a5790257ae09495f69929a212de17bdf", "0b3598655e0d8a7d592bde57362c8127a1d89ebe649da147027faa7d822203d4", "2c5a827596ff969f6c5b5a80f8612708fca797d1c62eefe77982d3c23d2bfd54", "11bce442807dbd05f4528e5ff248a6e303ea43a42df3c4bf2f3d0ff7363644a5"), ("20772af1f8625308bc8bed16967f5ad5254af104e08eb2459012a69d94c3bfed", "0d7ae2723c26067cd159cd428ea4016af4ca6538a3d8423566dc675920619130", "2f2d64df6d9ef639fbacda0bacecf1ee4b4c54a9aa5da9405ca87c5fb6db1fe8", "03a9ff6f0f60f3c016b4a8d08f0fc97841f2859301f33eae10cf1e60702f3108"), ("1d9d40f9098e452b94b0af3b157bf30e0f3cf6ad705d1757b3ae13aa4f307c21", "09a56486fe6363104df4d47a1ba427de41f42dc1e40f9eed864de639a0468954", "10d4863f9f34d0035ad4b945a114ecc9f17ac52385849e849a8a863884cd77c7", "0fdc91ecccea99d74dd418642a3383a0512b039a96a0858667cd1f22e08f9158"), ("0845d79aaa7c5a62f18321d4e990919e45601f5ce5257aa2aeeeba6b533a76f2", "15947e258fee762e13e02e7c7e5e38750bb39e8e5a06b04ff48461983752663d", "188eb5bc6b96440c359e85ad946eb86f9be1fb02a8089566b6fda83d410fac0b", "2d495f78e38ce428ca0cebc89a88f6ab83ca39142228cda7f36a72751768f09a"), ("03230ecd66eec74e6666209a112dd8b42a5a32b499cfdc267704df7714c4bb4a", "1c2bd4f148dcfd31d4557a6144271b1cc02171f8d3ec0acef49afa8b47279616", "2010f2584af7059a5726065b7f92157e1fb99b4f6e4d1bc5b6b04d39f335f9e9", "02a8b20f6fb788331660564804794913adc1e67338511b5b3487223ad20d2c28"), ("20480854deaa2c1555a6a8ba285d2f3297d3e51821079cec562b5f70cb62adf5", "1f2778766b5cd7101169d62d9218866dd0c39fc062f5e49d0bd6e2525d861097", "1f7e13280914c5c93a68a3ba84b3cccd0a7c1089ea2871e590a35b5f90711f27", "02fdfb99f4945ea7dbddd48dd4bca45d696dcf8c6d65aa0e740b10edb7e65a9e"), ("006c0451814e02678416459534f72abee52f2c20ddc1f788178c075dcae03605", "17e287b60393b68d3af254d182201228d9742c855b2999dacb266778073cad5a", "25eb2012e32cdde6c33a30a3327ee58e762675da3964e24ad8cb6823afac172d", "175405b7568333d9f422adde1f36a18a0a0e79ad655ab067b6857e73eab487f2"), ("1f9471e23cdef4c7d8b23f630c0d610db86203a6b674c0e787880afbd488f836", "13143e2cf9a84caa7c244d15ab9c5cae783e7a1966dab7f7eadcfd6fa93dc535", "3010419d08232179bf2ca7eb899551dec883983f6db4de275e6adf8b73c92161", "14e59934ef2706ff23985691a1fc892fbd9c5279af933c1cfed9a2030bf0e6b0"), ("27ce8aa8bb74ca84fae022515ca9020e7c27cc237d49f824de99a3354be6d835", "1762ce7a07b6b59be6f5f618c60c74edcc39f4ab7d79b952c3ce58fd4a8f1315", "2df25d1222811c61b921273f56facb1c9d95c593245a45fb12ab68f8047a6dad", "2e1f8b5ed740aca6971e0fb8b1ff8e9a9a3e8338e31ee7951ef40d8f6dd28a89"), ("066302821c975d251f5914e6ff4bb91ed66051981ccc31cae692e9d34e56429c", "13776a2161aad04484cdb5f0e3439a1f6af130a2093eae25ab3666856d885346", "28e3bae7f6072c77d0e49107cb3350d798771e444e34a77e7f252e374c760570", "030ba84cf40118c9cb76f2da93af4702f5adcfcca88bd9d55c89e948d5424bd5"), ("1c23985cef0a71505be7151e4f0ea19dfdbc228b23120bf108e099ab9cabbbca", "2880cf7d28847679743e3f3a285cd90df60afb917924c0e31a33abd6b6df4fdd", "2d2b49a915de36d7e3ddb150c1992fb743b3d0dceff7f10841b1c452a65fd834", "2c49fb9ac99148b7fd05c6c2d867baca0df5aeed8f50ea3080fe2ba3c54d7a95"), ("19f16b62bde973f0c97b5a3c198a4c8bd33804b0f826573c2db91062e0371cb9", "24f3f9a81fcedab79d6a79ec7d1738c7fae953f54f8b73a57d23ef33b6bc353e", "1fa8baa67f8746b330d43e0399358fb776157f0e7bbb45f85f81b79d3a52c648", "0606763511f22becea684ab69dd60862919cfcd7859b3a598fce7881736a874e"), ("179daf499bae7070b4aadf917c3d3bb52361a34c8300e1594483d961261bf491", "1ffd7bc01fd017458b30990adf30866356455c6acb4fc03aec5cda2aa1aa2270", "0e9cd8bf26334257b92c594025736a41617e5e6f07ec4794cebe0ab2959cac10", "05d486c51a8e28825e1fe5d5730085abeeb70783055a9723d2c8e69c1b1b3db6"), ("0dc9b5df5bd0c258392e0936796afc7cf436394662848ec6433b7b1c063b8655", "02cf5ad318a93a83f8fae012ab45ee380adb461a5a934cbb8d16a80017104c74", "138e2f9225755a5d36b34ab13a7eedd11a4156e5e03b85653f440bba9cad8239", "2b8307c2abf9ffe74dac3fb101e180502b0e6c4053526e3d48d3fc5ce03fb784"), ("2eb2ff254a37d944c5ed84f6d87ed2623caeda2eafa4ddbefc65703364825419", "157a5d56ff47c277380c7ec3ce9d0e979a54fd6495acc6e9e0b54166dba7ebc5", "219b54faf3fc89a15bb28b1f018f72e0570d916b1d08b0d7d481a7495604c58a", "02addffa834da8f7642fd09a7265f4ac7817df3f38c6a2d5a7adf8010d7c88a7"), ("2190f3d76493e5f914cb8f05206f44a192ce0eb5f8aeebcf4579d117e1122003", "09b3b965955c3d785085d0977aca4cda9ab3c949dab3ba4ca3576ca13d9e14f2", "2fc99142c305848f6cdb580257fc35f5cb6de00f1cffa412c44b907223dd896a", "0322c5cd96bcfc5fcc596c9906da270951340c349c2caa4039cd2d25f8548613"), ("173502828433f7336d517d6e3b7d2a5e41a83a51fac993f67b52550d2a1420ff", "1406314b727e8f3bd043c97b218cd143d362dff17809df4de373535de25ce524", "0b223ef13318c2a99090d85265652558e19ae90b2cb5494f947b86effa4f5787", "05451ac14a71ff71989354c5db868240d5b317819cc482aaec4a0403494e21b2"), ("22e4ce708f9079b96f4f865b4571eb65ecfa161686643c6c2dc003cea44ef887", "1d2819e11056bdb72a5266fa4b335d500ffd51834320b5e8ffb82673e201522d", "00966c2ecfe318ded5f589524f8b7afd988aa05a3e20b0566ae33893105267e9", "13507e9dbdabd5ff2a9d11a2fe97d5188673d41ca8dc57ca648ff8a211511384"), ("026a97ac23eb44fdd3f8c1c08884821624f02f9fbc2d0b0a032275a416d795ae", "105ab411fdb55e8b53dd3035f48b5b027e9a8044aea59bf317e35f805285daee", "1f4d8f0880d51c82c73196d350765732cb3de2806ea131762db3cf924dfb1b8a", "2ece436a0a6eb5cfe887ec539c589a37ebbcbac588ac2de9b4c0eb72f7ca89f1"), ("02f677f86d99a0e4d705b625d059a95f53eff6b2eb049676d15c33e57803c601", "0284628eff9b3bf2f34d9aa70e6a42c8a97cf8a8dc115c02a7a5874b0ac07992", "1bbd103ab776b943afc095d420b0b1052c89e92a89dc656ed86595ff819f0399", "25c00a5e743e17e863836d24f3c705d905c779660682242b132093830426a64f"), ("0de297f110d76cb54865f74fb5cc5a637edd697f70c8a79e26990ca520d46253", "220c635b063469baeab24cca5f0530c357a38727056fbbccb753a2417a5937d2", "2c2ca6cddb991587b410d3c47c6e90c27b26a5c625a9bb8916913e926c03d8ec", "02222c389458a281b6041e0acd00f692dd832d6fbbf3dbb0f861ba86cbee9f78"), ("11786abc2e24001ad01c7adc201ec271a5fffc18946b536abf0d0d2fb05173db", "0f275e7bad8e005fc8160165b13aba9c3f87c47a2bcdb960b59542fc15d09db0", "20f613a4cd57855514c9af7fdcf038468140f8952e4a2b3ed871801c670394d9", "158d2c443334231777a391e63156fd60beb149305313b1572ac1439e092f8f5a"), ("13f2f9b1e6177c16d02f882289b51caadfd451e2e6734ddbe19882ce4be688de", "0f626a050a7b8af253de93d66624ca36fa9f76fb286cc8e73b0082a05403af87", "293a64f4a134bee6327b8020131150b664e96e20df8c0080d525e3a66344ed9f", "298b339807e7f120a7a00a3220e652c86a13c7e998e481d773491030b0b10b49"), ("12fb98a0c11c60d09aaa10282fe631fc5f5791369dd5f363eff4ae0fa8056a04", "1313fa2c3cd85bfe10bf909f53efebc7ddfe81be51816595059d25097b56533d", "167105a6cdd1962dc30dcf8127af9f8337a4b829eaa4009e17b3fb5a31519c8d", "0869e89cb6ab9d91ebc97b0d3746573579e43217e2d9acf6fc7383aec72c6e91"), ("0f1f547989a3250bc0f0fbf9941e38dd65532c3644c4104c296177d87aac80ce", "0ea6a88d8e837f5489f97484efa546b82cd154fe3300d4617ef6b4dbc1d8ffcd", "118759c8fad090c55934c825ee3fac0893535cd043fdbcfc36705e3e926c2568", "178ad31305775034127bd21aab021b94ef4126b3cc2d9f9279c193fb35f097b8"), ("21a610605cb50724571a810e6ade2dfbf6d028918ea16d740f0f83f9445c4e3b", "2180f5773eb7d270d2af64cd02460b4efd3719617886def9c6a8b17f9ffd1acf", "0d84e3bfe6deaf1ce2e1ee8146dcfdbbd12944d6e0a1e8b2f60c5d11ec9826b1", "13aebb219d24555a36e04ab446d0dadb0913cf2300eb2050c5aa5df2ceb0f581"), ("149184ddabcb02c3f2cb86ce0fc5863b21e8d3a02f502cc90af4e5d81cb802a8", "2387e61070ea028269e14a8129c2caacca27244b9cac48694a4372a95708a31c", "19b4b3d1e7f39c599be22ff8c40ea80caea1109ab1bc8c032c4c9aa18aec8fc8", "17fe75406f3aca93d74cfa7cf4e2b90fb0ca344bbb20a07dc83fe5186159b10e"), ("2e4e056d588e05ca0353aa8781dcd4826d8710037edad4a8386c3ef3cc23493a", "2dd977fa84454a6b2f6daadac28386badf1f7d39dd3b7ce77f1d663ff8459515", "0cbb266bdf7ce93cd0fe75053c01bcbd765ade200f2c9c97488d43c5e5aa7166", "2155bddad93274c3cd16760af9d3a3b1203e1554186288590e0383a22b17a6aa"), ("0de1978ae4238b599e6ebe7fc5ebd705a9280814616b4cf996f1b88353d55531", "1824c957058ebde34193fd8153c7a43e0d88e178b4f509afa278eb0b328aec37", "26c5d81c64e087e6567348e305f1f29840ac54546b21fd2e4daba5d47a757379", "1ceaf904cf38d03808a29fa86e8cb9a1d6d16d3dd9505d101f15a3d07906399e"), ("2d480a7fcb8b0eef41f1546d577f00e7416f44612fac4a57a2b8bd0ef31b3d69", "16b976c7fae7fdb89b3ac5c1469ce8e3710f32b1933e6400d6a7c2492dc92d66", "1c1215a129118920981abf192bedfce6a48c19e43c5a34d53a5176a1441e1c17", "1e1768b05a964d42a9da5ff452a4a8fd285a7e4665c86afa0516ea8eab6e5b84"), ("1c1433a830b8cf406da8bc0f20d2c900bb974064a9e13ebd415f3957089a74d8", "2ff29ff5c85d2c462456940a66b0889c650cb33b8070e248db379b7dedf79e77", "08e8eb9d5f6ff978c6f61cfa7d1ac9e428a16004620b156e44082611afc0f53e", "19e39ac9f7a3ae9d4ea7e90e2354f828dd3b01e8757189cb242a243bbd53a546"), ("2667989a622eb2543376dbe22f0df69c4b4b5be0d91d3d1c6f9ad005e29d3d32", "0437e04982fb811e16f4e0eabbac143c530120180ea9d289d49cff7a39388451", "09f63beb80c73fdc92c094218c17c6201a47e60981ed97bc08681899db91c028", "2548e225174ff34ff9c4fa0779ca0016ce4459defbafad680f80af7433488986"), ("2f6d25965acc95ca1d6a35cbcdb309c70ee5afe3b9cf930286d695feb2d0565e", "036cd7b583d5dfbd2ec45472058a9f900bfb535438ba574033facc17c0b75cbc", "2a2ea4a96b5e318e85b460a5dd849b85bbc9822007733ec0c286ddbd55bb4eb9", "02dc2aa4a4f030923bffbda147538384facaaabbe34a372c067d6fa290dac9c6"), ("0c0ff06daacf82f874e71735d409147be53a789af4c2117d4a7c0da0ff8eb068", "054fa36bbaf1df5239a3d164d9b90f89f8f5f1b998312f4fb77048ff162e06ef", "19d6de90d4a133efeb42c082f0b8617f583488588b1f5e0a86180bd3a938e911", "15d6c370fce4898c593304be5841ade58a417a9a5922720d8e4a1f9679c44974"), ("09e54e5e00b8ac125cdf32a63a2fdeba07b787bb499507e1b82055f1aa99f80e", "2753c867acc23b059a962c5ebe97740422e606bd9c6681ae03a424f6f4a9f641", "0974f8fa9772bc7398e0e5729fc1f6435ddaaaebfba97a47f0f3d0726c14e1ef", "046d6c4b4b7ada6464ebe6629ba5fd194320a1c3584b431b086f1da8ac7ca0bc"), ("2d1e5b11e7988141de6eba7cff40cf7bd5e0c63740f5ee00ca98481460439af9", "06cc4afba814517ee81a270a8052716ffff913755321963286811ff13759f611", "1884e15f1c4aeca2c4eea6fa9266c6e30025b2fed63cbac3da528ac2c281467a", "1fc62f272c56567cfa91f66d77221b32ca461fe12bd8aabd4393a3e4be08b86a"), ("0a240965ff576bc7c19fcc484bd98bab8fb815c3c8472b7dcb1c0af51d2a3710", "0d9579691c7f6dc8bf1676f950f735a8db62e76e3c403454a2734ee13abdcbf6", "01a1a52145e4e920a899d3a2b05995e09a6bb7410a24e2e05fd2eaffd7b032ab", "1d832e64209e66a7f1c04445eaf0b05987776dab57f212b814fb3c36d2cd5390"), ("082bfcbe94cd31256378ea8dcc6028b382a858cd71e41f2ff840e9cf729111da", "2ac7db223cd6a53a0f01d15fe8d6fd876f90dfe256ea6f96a8fc10c5260fc415", "0ce6b1b56bdd5f4266b07dac650dc54a0e7d28fd11181e8a71fa84c188ac9d9a", "16012252f65611260eac9338ab1ec17730696b2c313700416298b0f3c27123e1"), ("253e7437ed2f80bf5e8cd11bcbeecb36fce7eafd0ef07ace264d29ac385e9264", "253f39cf67f7ecc3144f2784c5fc194b4da580732ad50d950241693352db922d", "1826bb3609a5a58c63ff7de80865f652e348dd1831f87374fa357f9eb4418a24", "0cf0761b265fb2d2eedf1374f6647edcb90155624b971e1f7ba28c6663134c9a"), ("09a610d79e7b61c2e61381df0f47bbd0ac8ba0b0b82646e7aa1eed671eae5685", "08e4a1e8d4b54591f015d8dc20543a12307e68fcd62c1e3324e51cabf70326eb", "0c742b7cdd7cbb7d637661b32475aa58ada71696fe2be5f35bb5f9915a88b170", "2cb1882783d1fca0678825af03c3fcd8b07cad6c0ecabb4bfa8d431d516c01f1"), ("15acec96eff15c10ec74393bead4c1ab2ed1feb18c3e14e6c1d03073e6e30692", "03f87aa773455206c386423128ab84a3be43267557a08ce61a6a05ba5035789b", "254e6c10688ff57f5d264b708bb2a31f1be4ee494c09d36fc1020d6a783047ec", "19ff9013243dcd50fe141550f7612fc19331b627cff0a8f693ea8b64648ed082"), ("153ddcec245180834c373903b8c52f939a45ac2578ca5ef1b25e04165dbd80a6", "2175ac9fcdc166f588a9f6f3e5dda6dfb47cacab74a9c499342613c35a297ee2", "108d419b9116ad6782e38c3cae64850ce361a63df7e6d073de55c650cc5a06ca", "29d2fb90a1d0d48adec7cdbd058fc1c00c9ae34dc80d5094e2f186c9fecf26c4"), ("1e121d4abcf520fbba8d4c7e703c9973f6a8b4645467a7c57a733f4f0b70da61", "2943510e02de05ad584821ac15d6623f80878a21e2fd56a7a9c1d1dec3455725", "18bca8a0347b23e75651bbb8b4712966a673764b76713e4e15508745af853d44", "1d22ac8f0a36ebdcab89aae60c1432f60bd18095c4ff8bb81403ff575ac0bb8a"), ("2cc6680b53d6d8616241d5e3181a38077dbea378d605458b8d86837b2a69ad67", "0a6736456bc1cac9589b896fa20d8316aa20f21234a8c74c6862d30b144aae24", "2ad966f9dc6d1eddcd5dc8a71b13fdd5b7b52441895c4f33122f171c4690ed6f", "16d2644c335b39f12a8cfbde72bc1ef71af0a72f6d2e72eb93e779712b964490"), ("15c268d7f38b5ea8d82de680b8bb96a468cd785943224e60a280944404bdd998", "16b0fced8e7a4c04cf8e519897d450ce8abeef25925668e7206b0ed3ba076c67", "28ef68c91bc1d4ec20e92ddb8b996b1775489f572b674dedb5af1a26225e543c", "160cde695781164dbafef578f4fc800002718adb58ddf47f61fc56f5e65b017c"), ("0c7b8142a83d49487e31fa6395f336509c2e05baa2d2e5a6ab74afaca4fee9b1", "2340f6a6d5234ea6368d4a012221a4ef3f5fbd945daf7c7929a1a5a002f55eca", "16af06e4aecafb70c18b636ee88ebdb25b8564d3c9fdd0316c3b13c434c1450e", "08b676ab0963d3bec07e0cfb1e953178996c0807ef947985199dfbe4c9e48092"), ("2d9d0175947a6d4b5611faccb1baef16aab62fbd5ed146a00c89577ef62ab894", "0e77d4242b52b0355c74265d23c0b0bc40d2d943f78eabfe44c1cce5b20027d4", "04915625d320069a3886f3418d3df92349b36321e799c6619173e0073c98ec2f", "229fc068e760b745851b97ce84b938b66377b6630fa755f8a95fb38e21c19785"), ("1f479f83c0c4b1c5adddaea9b2885d2db78d5087dec97cb963cab471dfb0b3f4", "00726269ffe91557051a1f00bdc88da247530ddd6267f6cf83679377a78a7adc", "152186f44d6a102e14d5f181368bb611b0cf073c63d76144458855be40df7f3c", "2ddadb58290e89763fa50e5e25e74d5e94e170d0af91697604849f8ff4238b84"), ("05c898dfa03d28fe2d28e2703c8e4907d8c9d80524215fe30b31cf3745273433", "13eeb01673afafe186344bd1f72f5d22c31ce477b1bd141623ad22f65782a41e", "15af2cd5a4b30df18c32e918b496d13dccbb6570ea144397ccc39008e1cf8a0a", "020a862c50eafed34613f6fbf0625349bccdf5dc2e054514a42eeee990d7d3cf"), ("24a9f0a12076ff5ddf16031ecf37e966dbd4130e452d565d87843d93e016fa2b", "02cc3fd4d826412f24153c71ba0905c483bc14ea6fd5d0d888cee0bd5f386526", "2e8162ef5e8b6203c36dfc6f85c18f71df52ac4c91711e7f0f0a59c55e69c993", "21f2aa0d122e54f5fe4085e313923f6e025f250b28b41b2606be7e85add0706b"), ("079ef027ddb1cc6897ce2c1695eb6cc3be694e2a0c86beb16422f94e8c09e854", "24b10cea2bda97377784d114194c5c2951decce9b9440154d60c01cb76243bfe", "0518e3af534d99db3d1786d84d7e1af06904328044c357087365e3705a6f5407", "11a75d196049c62f8eba3ac09f9a995a8b67edeb577940ad4094ac931f02b4b9"), ("1cfa97f51af0be7c8689f755625dd66d4e0c742e82614517faeda6e2471bac56", "139ee0b309557bfb0f27232a52a22561cece60cf1c67eceb4b325f5c6c97fe0e", "039228f7e13ebd2020897092d6c26fa39669552bbac78ef7fe492483abb535cb", "096d1a96c95a60955ae38d3f68f782b0e876aafe7407814b1eb2c6942c825cdd"), ("0905ee480260c8a3ef262827150896eb67fdb8328eeca375a285112c69c832ff", "0062b6a905090eb586c1a9f2ca8963af1e9b0b2c867151fe7dd0710fd0c3a67e", "153cdb52b1e8e17fd27d8e1e71d417fae05534fecdbfa2e79b77d600ed69389e", "087d349a7e4e5ada24bdaafe24d037ed14ed2ea2dbabcfee13e167d63b801905"), ("26dd3aa0b5197d5f1ddbef254c61982d8de218b91463064895c65887658b2243", "1f3c57706973a4d01a2395baa150589c0e519f08442fbacf5202126fab32b2b2", "2d737f28d969bb58821035e89657f56a7da83b662a69be553ef938ac4a1a7cc1", "249de7bea6eaceff58d6231400118bbe763604617a2a84cd91faa454a7253a43"), ("01d5c4f003bf6ec5f79d269cb4d3936d072076185b4a76321512dfef57b25414", "2d35918008d59e5dab518ed4a8ba38b2f7d2910cb838095481a2edb46ec00e8e", "16b9bebef45eb7873e5e9f1aa23041f65989b037be155efad6662e03f9198c62", "2e3d230a3080727ec05646f5d1b67bc8fb9134439c481ba30cd03f5383671862"), ("1fb116c75279ea9a429a090556a878d71d36da1542558bcef34147d18645cd04", "1366c918a524d048346e29b5eb5733c2be32415d1ad4e5a7b24523ee685d3b90", "26370df9d07a6a127061aceb57e8c33d88bcc434500b5e0f4f94ab64e600fb6f", "15e8d8e0b0cd15cbdfab203b35b429f07d38a2ddc1a6db62404b3ed330db18b3"), ("1822559c70329a2ff92a2096791c2d4c8de8752548cdde11f1b350c11862bdb3", "1cd989628f9a9de9877dbacaefe3adaf7e355c9a508de6bc076470d8f6c810c7", "263d30489b675d88645aa14517e5019d220c5600f232fa548754b56271b2dd42", "0d70900613038ec2a5d9b004c3747cb7558b8e57804e185dd592d9cd389c246a"), ("0babea8b9ee3392f3b345ffb24c101d3c00ac4fcd58025910c67afb953214452", "01c6d4dc695597657a02454f40edfe3cd44ff893e3fe29d502dc36493d1fbbd4", "1d30b3340408351095011c1cda2ab31472f30b7b68290b800b4da2a7ac963811", "15583d4c00f00d14a1b7caac586e63e36298c2ca10e1b14dff5d3a3ddb376939"), ("09d89ec55cc3726952f15a0af6c0a5e7f9a646ae33791b59dfd44f15ad17f974", "1aa65e041d3b27f999e0ed0dd02f5f23c991a30019bbfc8304e7b2834b95d16c", "2609647727bd91d2972b4ac7c31d9c17862ef1971eaff18b8dfeaf12ebc78e1c", "2e884e54522a26780a998d36b6bee4b0dc635b72fb9fa6263f1ff2f7368c81c3"), ("0b6c460a393b39a221366a4803e3ecff7be3f2d20a795e7574dd37f7657e6e24", "06d137b372150a92f56521cd9c240036e9f25a1ff8ea93cb07ebfa6e0416b88d", "1dac613bb65fdd61cdb296dfc9511543408af368ff5dd850b44e70cb934fe759", "21896d01c4e9de80ffd307706ac9ee17b6485be355534c2862e272860522189a"), ("0f41b9fd5b7a5eb104906cef6d380c90ad49ceb2dc9f535acf8c7784c9d6dd02", "04a383072c1bd13445e4e66d12b71876bdd1b30570219781a268984564acc6ca", "0a386897defcf71df0ec6e3ca56ce81ec16303ab6a9889fcbbb6b1ed82d2bbb8", "06189b056803d4f6f8769370db7d29b003361e090a1437512bfd21b5d71c07c4"), ("02b1073719bf642d0c754a83e5535525ef348b53e65bef1b3c26329a0e7230c8", "274d6eabd712a9f76f726699f89bc866b0030e2ac6bedabc54f8bd8bd3ddc0ed", "0b31ac1ee46836fa7db45c791dcf62edcb8c0a96e130470eb741a67285a88eb2", "12283086136485478e268b41b422d3620e354ca27cb5b7d14e71172d2fe884f2"), ("02ac3aa7a8e1694a0fe3e5ff2c445eaa56e20d2037dc0dff6270b345215fc2d9", "0898a59d018713821c4cfcabd7e84809b4c40ce218640885461372851f8aeaa5", "00d99d954a39fd780572e3818dceb757b4294a945b8e7a8b83e73c3e0f49435a", "1b6c61e3a486243fdd1ce3297343bffc984742280a4be017c937e9f87b18759f"), ("2e4fd1a96d1d72fc1df967bf2b121eb31b8b120b3e2573a8420f7fc27cd04cff", "1a16ba3f46f6b35c402e5d2433eeb0383ce3b66ee8b917b753beaa4536e5fcc1", "2d988db4cc3cd1c8682922dc471a3d6f8c530ed2c94c90b93426b67f881b320a", "212531c59529d1d8511404507a13a122106598f07caeada641d29de4ad6f2f48"), ("116388f7dfe561412ef8f58c6a308b8b4780bbd414bc18b681898fc33c9b8247", "0b5f857077c213b007620463f56bc66c2f19e1bedede00bd60fc587af48cc71f", "16b7ef8a40e66fcbd3fb667ad860d26b08b248ca2c75ef3733fc28d03c3311e5", "0f4c8e3b05432c25c64e685150676cca66692e1a3668d40a9bfb313dec48a746"), ("01ded191994f2d433e3715928872a01e0e40d6b9c2c28088c48e189ea32f1967", "12ca69a08646b7878044f658460c88cb83ac63617cb7ec7d07c6db973d5e7aef", "2f1e9d46333dc774745b14cced6f0cfbcdd1a815bc71ddee90402d6239c2cbe4", "067aed0350405957a17063aa3d3b110aa6f434ae010075a3f9e43899998ae7db"), ("25a4504b9b53d78a8d0747dafa23fec7824b40b4e23abbbc46e78ca86539f625", "131a7c602b094dc3f21bf7fb4a8fa9e79ed7e14bffa6cefd779df85e8631a32a", "18f9ddaa7a48243df7ae97df8968a37c09971a455680353dbc63f9409fd17586", "094c049b7d5744c88e530e91e479214c51979f7f08a85705465a455238db1b11"), ("1a1f32c50259b3864385d4b73aeafc38b00c34a08e76a95788e665de45eb79e0", "008b50adb3535b2d3380f189f46d194294427feb8c6256a06cf81e5be2a64ed6", "2546b5cf83092188a3c75afc379e3894187d27a9f9c23bff7bb9dd207bf8b4b0", "1f1b8ddbf776e93274c78c679a8d1ab2c48e5f559c9d5e9db9d0680e5f6e6d8c"), ("0385afd37ef64f95de4680240590f0ebe93456d4069ea9fcd0bab2b79e780258", "155af3ef25e1665a3db233d40de646431bea14301c5c1038cfe42c3231148566", "25c8f9a5ae8cb39eed7b5fc3cd6c0b86b85943430a61dbbb9e2d70e2e3a43532", "0b8b552e63d9002eb5e496828cf18cfaca3e8fc936119f5405892e631472a51c"), ("266aaae181d8f27600ab26485fe4d68977f74b43363e7cc7c1608ae63a6752b5", "08af8058ce257b954324a36d8bbddd88cdf71595fdc6a0e43a419c9be1163cc3", "01f13a6e950a9e016b385d43dcd369a3c36211efbdb60feb3f4b25235ca8fb3b", "14f0801eca99339e5e77f03ca7a50aeefa9f4ee958c77949ad0e0ff6cc1f2e89"), ("24dbb4d8a00c01df130472c146abc3a9224e55a219c736276d91bfef970fbbab", "16cc0b1969ec27c12b7ced09c8e034fdf70d9e936dd0846302a4bd4e4f9c41da", "1ee992f3e041195e252d07b5383df6bdf0ef936044ab14ab57db1913e0b6bc7a", "116cbf7f5a80d8f660824df0abf734d692d2d372bb254e4202e4a6198f330cc1"), ("09721d7a748437b8ad30cbc370de68e3fd602924534fd1032301bb270871a349", "0578df4a6817e14b6cc34febc97bc12ffb5b8198452d56bd60138be57d6717d1", "1acc30af2dec5cc0a682545c3767de794f40e26166a4cb8e070c0a1f6d10b094", "0be13ca0b415d551b84531d757eb27d76a13c2d066f2f9da9f48564bd70a9de0"), ("2471341d79c03e2a9fe46afc903adc0614a79469eb2d95176eeb3b2bd507b84a", "21c630f7bbf0c7b49bb4ef157f9842228cb6822eb79d04cf64ec7434b52f1cf8", "11e5e285ba67be019c56c13bb09b48a9d33271d1a84f1b4175d9e052bd2591f4", "18f4fb12943656f5f1ced0ad004d9acc55b917cec4540ac639c38b43f32ac862"), ("1f60b776083854a4e5052ebf4d812e4c76bfef58c10453477ea44af45daf2d62", "0df70a3b375df7ebdd31e72306c30e086de3549444fb4d872427980357690369", "2ca0da8fae1df8049522367ed496fd6bfa6c11b9fcf0f7ba2a970e8bb095d438", "0266128944b6f4ef738854e1c2380c79f8239651c491eed37fb71f655949693d"), ("286fa1f39ffba9d8918f0716c3c3e0f296ccce6d388a0a813909a85bec3f9b23", "0ad0c5d84215aafc4491bf34b8a9f190a8e9b00a8c4088330f1e0c15112ce5f2", "2257928feaab13e86d93d5c0b8c4fb4cf8971aba7e28f92aef141734d510b486", "00c197bbade90d960db456e1beaa9dd80d712cd7924e6e1a70a7ec9b62e25b0e"), ("0545c8c4d44313acd9b86db84ba1596c0d662ff3c562cd7365e04a42ab152113", "0c626f0e5242593188f107ec43dd10c3d887de406eaa23d572f3d966b8cad721", "1e6977a6315e4edc65fd3490d5c54979396e4660f45e3977e6bbb2790369155a", "1d5aefa3ecae9e22de6474f43cc13da0df77ce7f4821a5aa63afcd73bfa17fe8"), ("17275bf56e2ae6ca71b53a1d3ac1554ccead6fef0affa5fdd8f01d971c486170", "2ad025f40bb26364bc89c128c8b68c05f36568af08a9b3d2f0e0a7ec6d68082d", "0f3049ef0dd77f2f93a375a1030e1c94d4f94e81acd14f7c36c4a922b657abf0", "1fee5df70a27abe4611e19ee5360f2eac3fddf2203476c1eb4e27bcefd98971b"), ("196410fcb3431b6aefac1b5a46fe8a7726a4856e2104f33d3341ae6d72451c18", "28b65a97e0a19ba2f4697e4d7200ab228729073fcc7d9f302fe4c595377293f9", "24666b014e4cef13d2b2524fc617b25d9861c79b3a278462219a339aa7f4bf22", "2e831d94252991fb3dfc3cb802e7c7c21f0ca6eed22364de8a843c176674f8bf"), ("12786439dc8bb94eaca6a4c15440359f08353f494d63eaa0aa682f4f14416b52", "0c1d83be111feaf45374af1e0dc694115ffd41e54261ad00862509121804cf74", "1b02e5c23e3190921a87c3b0e8f152d5acfb3b5baa8d0ad88e540b2b88feac13", "0e68534fcee0ae0c7fe158cae3982e47772c9b45f7ced4692b3d009fb1082cc4"), ("2a95a1d98fb98de24df198b0e0285b32507f95eb61530965e06e5f4a6efa3d25", "1480570cc548762260d826846bed8c202eab259aa37c2c946c796f4fa255699e", "0a1ca4a3c33e0c3159613d3b019e6afcf5084a23a9a27919b3824001fef0384d", "088b12a0b20bc991e42ec0554087070854996602913bc068bcd1c123d84e877f"), ("1c26aa91e64521ffd2a00c56407f63273f0ca4ded4cda72abaaf76b55505e3a2", "06baf4485cda8e3e89e2b027b1f47175d49d4ce07eae6039bb8593976fbdae8d", "23a369d78c84e51bd773621d56b00629786a7dabf646515dc964ea892b0e128b", "2d6e4b6022fd4e33b1cff75706331b9bad5769636ed6077e8aa5e853de33446d"), ("16f5ab694c0d09c544b98326cbdb417c05bfd498c9af131c10527c94a2b8d5ed", "2de46aa9b4b767b7b8f00fa4e2eeaac8935ea0573a569eebd14bc14c32ab55bf", "168f75713baf48a2266b6c6ba94158dee7d5fcc5ecd07774a87a37c49213e47e", "122c069d28bf16e242bf29c9c86cce3db895114f3953ef873baf0888234c4ded"), ("227a5363b825a56bcc114fa09b0b564497d3ab9aaf4f31ad00595c5ec0fbd960", "29dbed2b688ff49ab9dd7e676211995a1cf564e3b646c8af7052b52f262ee467", "22ab72a879c00ee7b0850bf208222cf20d244ec3ded73c172fcdb4b94ecd3103", "2e7e18b8545455731d9af0553ef4dc96bc7a87b4ea98e0b50f9332ef0adda94b"), ("2c4d87af253f773c0bb9e9c8daac1084acdc3ddad19bbbfc4f86bbfe50a9aeb2", "2e777f43eecc1824262c0b626a8de795a3604b15883cd5e0175e6c0461e24200", "09cc56e21e519e0596d1b6ff8fbe1b218e340b1c03713d0b12b957e7e4af6703", "2ac022bca6a2b9a0e2538dc21119fc157711de072392642754c6774b310e0cb0"), ("000bf32bc99a7fef794d8b5b62e20dc601fb64a118b65ae143099677f5cdf428", "1265609963ecb58e9b2fe990cecb3e8790179582d8d8bd41dc9411511481511a", "19aecf067afe4779eb6a2e0a69fb2629761ca20b74bb5b0a478e0252a13f4681", "23fbc01ad7e06e8e2325f1308caa090ca36cf7b1a931ee31ee5413b323db3a1b"), ("1396b1a86bd85b0e92444039705626a5934b86888ca6cfc268e797051a3b9489", "223bcd6df6b1aa10c9cef005519abc0c91474ae5c6b330b1aca51eded921901d", "20f15188a00f06307d78b67c0390f2a9c131abbf62255654869117933071cdfb", "12685fc970151509eaf508101510bb557481584426455c578acc0f9c9e16fb8a"), ("217957a217ea103776a5238a97bfb8e20520fe2ef56ce02002c0071af56a0f05", "1757df2b80fd11a5f1a8352acfd57a0652f0c25cbebf307140d5fe97b0655f78", "276f7e63382743f8b1ee38e7aadebac61786f2c3bccba2aaee125522fe60aa88", "302bc3d2d37a4903ea0842a33afd0a4032edb9636d1cfcdde5a166464ea6e550"), ("300fae507c7959ac222f2ec781e5f606b826eca27d3dba7057fb0e656f72d88a", "127b63850a7fb56fd55a82f12882db2ef24a6ec821aef2506f4d1e57f1c49bbc", "006988ac2822d61ee6ae83e6a34fb07321b64a16dfc4c65244aef199a80538e3", "264fe71d4e1a8f79f93da5a1ed127b12aadad15a7a32a7b39ed7cf16b2aec22f"), ("12925f590732a2390e58f870d276c6d6f14afd8505a58ada69eb221b5fba5347", "2536d4676cc09fa34bb3e6444090f8c6a3ab5ea3a9d525edb0338de3c87ff2ad", "2ecc5ebe35c78fd15a43aaa7aefbcc57b129353e42dacbbebed38932ea1a96ee", "28a20f2eeee9babe320ccf96ddc018caa4ab561cf308c7a2b5afdf93aebcf940"), ("0cfc4d180840a717e4a5db5bb105ffa1a63de4afa7a10ade69ca05ed8d54b886", "1a1d919bead6f17064e99b3b791f4b16135b2a8ca20e2e460612863f5b6d3fe0", "11f4e3779043224e1cdbd3364b744a88830f275b0a4d86c7efff7ba8a1dc8556", "22671f3d4413b162db16c1b4f294cbcc327c804673da94fcda1e0173faab4062"), ("049d81ae632bfe1fde3646878ad9ac41b04f4d58d76643804fa35d94110317a3", "08f3d91c315b08b40731b1119d1596644023f36f4b75c71e6acd57c8613132ed", "14bf3bfd08e6327b22131fe1963c8802556c87fdeb42704070686bc636c32a95", "1a716d43d633b4900bd67b2bd392da993a78dcd0f87d1cd649471d8911c23365"), ("266a27b20e2a601bb0846b215108f3c96f75bb800f94a8d3dc3a508babfb2465", "1c516dc055717a39ab5d6135e2bf331928be55fc1553c8a498fc6fb4a38539a8", "0e434e91938073bdaa46e4f5f551db9f0c9d94675550418436089f7ca004ec5b", "13a764cdae597ce804fb88997182cc92c4f3ee604836ade724cc9d6d3fe5638a"), ("15c2a5dda70e0f21998794ba83eea828ce4d073ff9f84011cada71103cf480da", "1b08d6e0bd4cf5567b6d72272cfc4e34cbb38e509fc44a109b1f724dd40b8306", "00162c1ae07be78aa5cd538edb13c33235daacce795e72aa9b767ccdb4389335", "2ab988e2cfbefeca46f2159f49da8f531fcb0daeb27c36aaf12258eb8ea16a89"), ("0f71959038a3ecb9dbfb7b8848085b9a60f49d2355d17b13fc341936a32c1332", "10c136e8598e6502041b7e0a6df3bc3d8a2c9e1e6d97bfca53ffb9b9cbbb1dfa", "1ab3ccab9f1114530319f959a8119dd9b9374527a434c9048e2ac158217f37ff", "153bb33fefecb6a25e564a5f63b9fea3fead60aae4921b80703d13ce201df483"), ("1c158acb8302859200b790c6d1d3fdd628fcbc1b13968546d4a903ccab95b9d4", "21ff652bde9d0cc2c0eb9c304b936a4e3aa8de8c3be770f617e8624f97268eb8", "0b2db30fd7bc62e80757e7f510f5b6f04cfefbd2ae9fd6629bf87997b7bee3e3", "26e540603b616fe00c032b2b7521e27b6d3f18aafc2c02680c6c87eb05488dc3"), ("04ec9a5329ea6e433c99dfbab78cd316a181dde1836ec7f522d4c0937f2c5ae6", "1f03b3f409883418cec57b914d046f9baf5a6a2a3320904695a8a8361fd8f6d6", "200c8b530337978bb6f6a35800bf4c52b9295bcd6b15030975d07d8b4626ca82", "1825f366c4eacf1ce9f0f5ac79ea244013783c19af988ea6e28cabf511c3b543"), ("25360826dbc02a3d114e335ad5cbb9cec741b753eac297a711c3e331dec639d7", "26ad883e9f7e230fa8c42491601b1a8dd3062ee17cc293bd25cb729d29b099b9", "065b2c526582d493c14ad58c7ff93d97ca4fcfff82168d3d91d1f5f42245f097", "124df33e3e9c007ae780da4433c1a332c239f1ffc5f1fcf77b899a624b79d4c1"), ("1c3c4395c02fadf016d86430088704adf95afcb525aacea6dad5d33562151963", "2da839144017bf5a91be0375c87dd393e28525cea251a3358487895df938a90b", "1491af688968c74e8337e8f88f79c5e8bccb1da2ddd63896c0f62ff0a04de43f", "2aeaf7068c1539683022965eada1cc0dd8bce1f0345b2028b2ff72f64b485274"), ("20204b56887b5cdc5fce69454fcb37ae7fbe2e03f1c746c90ac9cd8896e5969d", "1b89b505b3f3a52cb79640c38b87bb333c8e8759aa256e64ed8fc14209ebce4a", "1cd77e2536a4adfe3c2f239ebeab4ed010db60e46693d547e86b117a7359fe51", "28e0fecde11d64912441e5a7ed476d3d79e117ae9049fa3f35dc40a4b37164fc"), ("27b61bc47ee8c1ce006441119527478c85de04c0697f0d2e2e155669b2e61a42", "07317a38590c614e78d7ad9556a4abf51f5d4f9e03990771a3620ed88b15594c", "1b148df914fa2cfd73030b1c980bceefe7d689071dcc9287162f9ce8bda6c972", "08eb8084108b651aa042a21b7a6474e06667d4392ff409cb88d1a97fdf37b8c8"), ("1d5cb678b3c52eaeaee8360835a689fed7ac0ca5ff5be5e5f3c2e935694b2046", "1e22581487936ddd56041aada686f72e9016df540dec4d37a540affafceda151", "14d7755e8c41c5ec49852c135f11eeff23bd05ca0f2fa4d8569d076106516114", "031a1645ed4bb881143b3e9587893a19098eb0f8f02e6894c127feb47738c279"), ("01b387cac1890fe29ea5388bb337d2c03232947d7a171edf4df1a8bd8df4862b", "2d60e025c1020cd8d2e60e61fb0d07727972bdb8780185e1e84b5512a40e3968", "1cd1a2e67f11281f7c73e96759033aa07936b39fb26b61f21d6f3c33cfb2ea96", "2ba348af79aea74691d757a563b3e5a43dad3cb6dfa2186d99ab4e4c8809c8c9"), ("1db52300723c4f0e1c463211ee006f5343209530ffdcc4a12ad1d7610dded4f4", "282ac43b6c533605648e48a18368a7596c541ed72fcecf0c81840a882e594b77", "085d7de5a408490cb5b84eea0d5d0c00f95b5c37c1c485550b890f07a8cfdb4a", "0c8aa1ac940be8f349e0f2317ace8790ac9f01dd3457ce8e34a3cd4184330051"), ("014b45f51c84e0577751c26f64f9337fb4b8a1aef52aeb441f191703eeb0bc45", "02af98da7c756a083a12fdc570b28ae2a3c82277488e4e3bc83ff374bf7f2c9d", "294635b2e453fa23685e3198204417b5937c9727685280c5847741df4b95acf7", "26c8b8a913f176ba48f0013cfc79663cb05354ee0eaa7cfec8f44ddf6ec6eb1b"), ("28233f80203187bcbe6c61c6b8dc332f343860f5f470e24603d80792302cb280", "27ca69155a4af1cc770ca15290d6c1ad9798918884541e2d9b2ce5b99de77bbd", "2f7979a2d38e5d8aea71df478ede35643f073d9d529c1edeb694db6ecd7a1df7", "244a79bbab5046c24977ba3c9a6ad81e5c5b1dbe091adffc9807ec12dcbf183e"), ("1cb8133e7cc26818070cb01f5cac3f53c9833bc95835639e5f6d0802cf01912f", "0e8fe63ce08c79d68b1c323cc43e54a8058037219cafb6ac45934b4e3258916e", "1d64b80f1438b43420bc53b03b742ffdcd8eeb26534906670893c88281b4ee0a", "16f38314857db4db72dd7aaae999fc50ac3b749a07de7f32716a917c7b882d2b"), ("2cec578a9902c77d96ad6c4448da1e8abf1b983c5f535755df24ccf93453d3fb", "05bb352785962a6c59492201a253c70781115c97a600468d12c34b0dc9e5b684", "2434cd58838647b54b65c27b21c3ee4f56f647e153d02dc4abb93a20283def6d", "1c2d2dfbc89aa36c8092a6bd87fafcca5edb9096ca417f2eaf1843822a9ca973"), ("11347135b9e0b00ff2d82e11df87442e7e4bf5fa8484c90f551486b0e0dcde19", "203b116d1c8a82a42b92ff253994b0865123ef616ec10daef9e405c7dfa4a573", "1790e04fc494150eff088cedce65068d7da952027baa0e6f6a4aa77d33a03022", "2f6ae4157c38e6e2f06a70d112a05f5aeacf98e3d54a7ced618eb364c6c3aea5"), ("0070b5158c1740817dd2591c0cd8ccb9994c5257842fc073dad220719cab1beb", "207cf71c99dfa97e3b742be6fe455ce64ab7439e6e23c8fdae5ecca4bbb53e60", "23c72865b1d9a9e845a41a68a3f6b39dd5e65534926e2238c2fc9a15988d23df", "156124b4a4ea45ed7beae35819a4af14ee6a927d331782e26c9444a252678143"), ("23fe918979009bad5d2e90870d7d23d7953bb934460dc80642df88770c1beb79", "1cf762437553880b648d1b330151084730de2aef73205aef46574d47dd5a966f", "1e2781350e4dbd29041ac1db7e87731a0a543a7c6129598b739eb561e0246b97", "04b84b892ee4adc67b55dd6c9f3be57c06b10f5b9fda0f3b44ed48dbc6907707"), ("24feb937d1a1e39617babe174587c1ff619f3da5826fe53a5395b137b54c6201", "0e0778d2d8b76c7af69daf804cb4c11ad097fb364e62f5a49beac97b8c042c80", "10ab77e5d68591b27df86081a474542f8656a9df4cce6be8eb8b801943806de2", "094ae30642382fa570bf25afc8b5ed3565016f55a673a21b389718ac3f553b8d"), ("04d09ddd494379d7fde14eeb8f2ac4d5aec680f10d9f24bb2a22398796594243", "1239f3c819824131180c0eedfa82c8b5994df61136d47ab5cb20bcf8a223afaa", "0ba729877a7efd455a36b0801fa593be8e1006a4b73a9cc1caf8af8001b170f6", "09979e5a59a7eaccb4fee2cef9c130bd29821d77c37a6662e407e38a3bff3d76"), ("255261805d87faea6a6984a5289e139962548325d05c30322f39cdabecb6125d", "2ce067022270418a984a0659dc9059a61747fcce6a2a383cb324abf43661b85e", "22f57216b18a602f0a7ce1d3801a5b2abfbad78550aea4424b8b5d4995d01af9", "0d722a3f3947563a7f3a150cda785701000ea8ee68fb3f6773e554491ae72e93"), ("040fa50bc5f370a878b14f31617a41e9c3bd6bb7a4736e928bcaf0e1013d9ef5", "020648549daf2aa3396f20e93b7b4cc95e6076b2900eb5568955b1fc3b2f5e71", "2cdc5abc0e4e85567b8bc6f6dfc326bb75f74e4f7252960cf4b9610f09e079f2", "0a0733362dc3dad64f4a88fb33d261dc4c4f6c459e3df33ff71e283062a32796"), ("0fea4382b1017cf3b3c853ce7d28718300b081b636a479bea6e4ed2a67b14686", "16e53e3421c17c861ec6de75c024b21cfb2e7099d98c87b958680adbb0fa68a1", "03c9327d305f6452a9bcac8bf9d4cb9d6fc392a5dd48b7083d60dcb917d9ced0", "2c9ff0fb64f360c255366382ae827a1836f354987acdcd668aca72efae23f1ac"), ("26a4d7a6613cc66279e9ad967055398ecedcf8f6132282630731b853024b6d84", "23d046041d1391a14a066735272256e1b9c940b34e726bd6b6c5fd30cd9d05e2", "1dbc378194852eef9c5c0e50f6abeeef3b6c79f45435d5524feb99f0113c9932", "0492c37f33157f464ad8e6a77d7b4e80716a0870b5991f697dc0822458e765ce"), ("2376f91f4068a876699d595a2433ec90b3a00f215faf53ee1ac8102bf5d7c0ff", "1f119b039ffdc0f46ac18d7d4cd2631fdb6d556d8ec177a2b9b2fc924241acfb", "1ca12c01cdb2284ce4e0b3b1ffbcd6be98acbb4e8bf5536437a7b7d0371d4a5a", "26fb78f4959dbf149c347e5d629c73c10c9f2143782a64a62342d28de0bdbd81"), ("1e26271622f320965111249f32b4f65c785a0894106b690370104e9f9576b186", "0f029fc7a8a1362b0bff52142a6f7c58dc268721e1c4fbce50e60ec8b2972b16", "2920c02dfa35c6cdd4677a200a1643b37ccfea880b5a5ab70bb0f239171489f6", "1a71ae1d4c6cd4e054f1be99d2d335357f2622bf0fec440b2e77ef809cf1575b"), ("2961a29986240a7e10140867c85d1b0a8c3899530bb44b3213aecd740825a025", "2a541348814ef445ff52f8738ca209e46bf3eff902a8d1bd5d03def6333740bc", "2e36db30c01e7b41eb2eddc203a1dd8f9fc01e235a0f769c252160474b69ffe0", "0ff1c1253df0db3b6eb8a4c19707d44ef7978215421c82d456a077f693473b23"), ("08eb74a72147d7134e1a1991ea758e0af2cbe772460ef1cf1e410e7bcdf80011", "2e3b20ae4a45b2fe6f0547b3ce106a29828ec4ae4a9b971c2be1a9fdb94d4218", "2f62c5aad3304fc681142a3d0034309a22455af198e657e54a3dc406bb2fa57d", "1b1fcd4e88d6b30b1b6b7b325e4cfcbd54b019343c1ebd3c37557c78d33ff161"), ("0a6aa26a7b7a191206c7d1874326ec03dd39ee3fda8f36b5e1197513bdd0ff0a", "14c196ba29047e3b99649ff89a9cd7dedcf7e44a8d95be42521ab1c27dd8e1fa", "2f06b06777d8cc2343cf2d96c76339acc1517591a6666159c33346e813072a7d", "29649af5e6b35883e2ff6724439743edd1182a845e6feb37d7b0e279d5e2cc5d"), ("0988ef04a090bcdd27dc09e64646709467c9b9029436a767fea31a1f265a8f4a", "14538cc5dcdacfa28d449ded0ed1c30d6a128d5fb4e573d72188f0ced2e22c85", "09280ec9d6fc6062e583b6975bd59b9ab45bc930bae4a10e9f7583ce358fe288", "1d38d6acfdcb3466cc26c978f70037cf50024ad96050866cfd92ce125e2319df"), ("2e396fe61fcc92419b37a61b52abc98022b92cace83523bf786f88a886298f5e", "04a0efd9232ba946f78bb4dab29b93fd0ffea13bbcbcf912590c45272bc39d1d", "07f7c15a13ba1470a2a2a79b7c8b8b80aed3696965f9013c66e0c12b4de97b8e", "14bb36771cbffb5a4f58978eb5e3a3ff2524e48b165726294c071c82e28a6e77"), ("0dd42d9b8255ce8e55e9088ca6a6237717b773cdf42b92feae143cffb5548135", "0b8c6fba9f8110ca29f9415a575f97b590c129f034c3ebc966cb28dfdf731986", "2b464bf450311e51df58fc2c8f6146bef5816a18fd6d347efa7b181c29d412d7", "0f495203ed5beeb4abc20ad748cd6a575c8c0362dcf671fc1ceec9e2672ceec0"), ("30027deb4bb205fa83850fdb97df4223fd1862e3a6aa1887d1036a285501a6f0", "14ecd78e76c43229f44a684bf81ecd1490e410419dad0db194659c1ee935d03c", "0b0ee47c884a565648c41f623fc3b9488a3c6a3308a8c8e47e35b77ebe34fb75", "2dd58c4122390b893df8e3eb84d1a17f56d1523afd31640e1e7c97d4ee779407"), ("2ede76c02f1521a1fe160f894749af572a009dfd49841bc4d3ac7cff829b4da9", "0122b3b80afc45f26c3701ed47ffd537639e889b38969a1927470e9953f228a2", "00d4e12f9363550a7bc7c1f04823b9bb201ecf85f17081017566addaa3c40023", "0422372a509eeb81d86728cb5f7151f77966014a03df74c8fa17528bbd45eebe"), ("1666d4a1c4911d55444d6e8f10df64a9fa93c0576f7468f8df327b1440cc40f4", "08cabfb694916ea8c62de9a46b005d281b2ff49566fb7b08e966de1985795ca4", "01fa7ca748f04cd5c1ac09ccbd3098d21f7930d9d3f98412c58cb38699aa28d6", "2eb48c5613fde2e4234f2a4f5279f4793741631487b1058223532f275679e4bd"), ("120d12c613b340f54f913bf185c402d11f872cd7a01a3409751fbbdabd469856", "0dd9c42133fefb448d90aad1986540c521d03278a79ea1060738af17b677fa2d", "0fcd3fe35f4326c6f6bd8a1959fabd0810d1f02f9aa1e0c1c9ec047346a41e51", "22792b72e2e57d52c75cea03029208cb912c7165afdc78d2aafc3b0513fd98bf"), ("23c563bb6fad3c4d7a7087ba036bcd313d742ccdc541bcbc87579a7ad6c8a4e2", "2d06caed568f49fa81d9225fbcbc048fd77e1f42b7220196e44ae015144f66d1", "14fd949d39e41c37d1db0af8d1eb942a8a55fe88019cbe137e19719524ad0c0b", "0025a75a0e7616647c86a11be37a8ef894e5452301407eaab481068c8f95a43a"), ("25d9c663177436d01fce3123376d1d9e5e268fb392b24911905c0bbb67326a08", "303b94fa6c7291f71ce547a1ce232512d0bf1cc09c0e7194f9dcea908b65fa98", "17d9d741608b6c0ad2c5092c0a194a0a4489fb07b4ddfc0f924b45bead4a1dba", "0c09150d0289d2ce6ed16d806a6478edc366988326de5ed4c00acce5e05f0f8d"), ("1df86d9f6e85b33db712b9ebaeed7802762edcc314ba5ff4d9950382b2c98ca0", "02f5a90b80357a4ffe95d50f0b7e24e682e2564d919e27948d5737f824eb3ac0", "1520cfcc80348a41aefa768d9fa00fd7f28fc7ae7e519656a1a251043354e67e", "0ba8c875ac1df4025ffc7217f382bbe92222bbc500af70f86e77aab54ce158a6"), ("0d4b11fdb69c6c111dfb4c139568e4565c9d46cdf84499c5ee11f75e80e8d568", "01d064b6b63303a215e568ae9561739d2318639ef7bc5f4bbbbf0ef06c4b4843", "178db5fcba77ca0ed7d0fce8aa844aa6890799cafc70758a0a71e4c97ec1d997", "0eb3c5a4baf8528a3b6a5178096c386de38aa2c5cd05145c57adee6666f77770"), ("2d89a56df2012de30cd495a02e200beca9519268d4a595c282bcb94c84f80aed", "1794079bcb4b76fc848cc7762357f8a34745a8754cdaee7bb2e5a44ee85978a1", "213bc832e533257a6243b642ed2140186c306656f411b6be298cbf0516ad3a1d", "28c55e66f60d10e4190df0aacad83aa1108ed7ab4b82739919701bfa83f91065"), ("1fe7c281b2c77fbd9bf2a1372d1f3ac0c4033cb2f075a74c1ece0406ff1280d5", "0203a84be313bb6e3c417e95d671b871a5f406361b54b2453f80540767b0fe46", "0503c03ca09801c7f36687fbbe6380078474e7f194560381035adff67abb79aa", "18f9e69c5803999d840b0dc04b04559e68c48d917f63cb24cf6c7d5185ff678b"), ("150b71535bdfbab78cbcc9b6e596e297b46c2643215076823b245dd7fb8db882", "1ff16b5816fad547158ac95aeaf735ea8a4e54afe7588301da39778765f6c944", "0dae7dec43d509972871c5b3a2baf98d2e5879d065127c08f8587a9157420299", "18c1612c4bf7b5b1ada93a67495e701cd86da042a175808df68a36ae2b255553"), ("1d959a71f8c39586ee1b7a88ed5cae4a6119a728f46cc3291ca86cc3142ddf58", "1e315a13070f82b1f2ef77d5b1f3cd8d93677edf7171ac8654192e21395f6092", "0d5c75d85f3a1326896447140b3303dec3a586e8a678947fcab43047912e730a", "020d11e27131eb021b680c8feaca7388d00036165006747394e78f01fbb6442b"), ("05b5657b4fea7b29aeb693b478f64e31bc4694e67debd0d1a8e3d76c2eb0a70a", "172e4aa1157dd7dc3b5465f2bc78dc5c825f1d162f7d4205cf56f42ea6004302", "26fc040d7c634fb1af1c2becd31bb4ffc4f8673e0f0594377311c5f4aa3c8283", "1c03d5f810e7f66ff4a991c84d431c5edac6ab7f9045a041659aa6a5d1056f8a"), ("2a96be515e8c910e6963bafaead06041acd46de6d6963653258a13ee8f91b900", "1aaef1ed0c315c471e959df9a9b5e4585971bf3537199178ccca9c66c984aee9", "17fe30207c4b5e8c63c5282c73fbe6949aae01ca8bf0f883775f90191435bf23", "199dc6f9a8959a3b3795a87ae1d86d1be71ff449dcd675b7cd5d02ae691b3a26"), ("1b1a83e53efd6aae4722f4f6a1eba34d4fc5a8366b39d1a53a6b082fd9bb220f", "0b7967b67e660256af0d62e258ea0f85b3944dd06e9d90eab5e61959d2ae7419", "2491fdbb44a7ae94640f86a6a49370323556d8a2f622aa3362f577b4c9dd3c13", "1fe4660c86ed74e43e7494f21117264cfbe0224a6343b10271cc01d3fdd4f853"), ("102d063b18ea12e58d578d5a3ae6d4e6f078a33ffdf3dc2312aa328b6f5daa96", "11e2ad3f4a9427dc0a7ad6cbdf6271e079cf67f5869086570ed8dd64b814a10d", "15f7344475bca956435b9b523ecc1f5d27315b2fcdc33a4277068e3390c28fb4", "08991f8e0ec1b881f9d56868294e949e13834aed2a792a3475edef3c7a46bd94"), ("0801b79562a2bdda67b8b0db504d6ecb882de2f07d8ddf93e6385f8146235031", "1101bb1218ea911b42ea28afbb4c58188b2148d7cb35d4e7b9274331bfa36e9f", "12f7f243a962dbe73a529ff51e1e0be29be922945341f96f1dd4e54989a30f1b", "0364e16f7eab91b64d3d985797b9cf837bd4eb0120d84e4589e1a124afa514f2"), ("006d48f732e4b5170eaef1f9ea21be1d25b0b508a9c4a1a371f9b7c6b0cb956b", "28551c4c936a76e9d438568837fa6faa5b697d60449250cc4257bf1d23acdf0d", "0cc80c4166dfc176ae59f5c89e81843495605e0c07c29abb5c43b4e60ddee72b", "1099d958145c4c02da2d9d9a8874580a219a80213db79d0fcbf42aed17d01c91"), ("2080d4aa3ed6d46887836a583e407b69a6489ff283453d37cefc9b5b502287b0", "27cf20306be41dc3a3bd0b4caf17895e74280e02a4ce3b8b0699efa17d985fac", "12da70d97d8f9ed1278ad0eaf787431177c30d44601b9e4a339341e9e375d4fd", "07df15daa96d0c235a7f0302d67efd1c7202818a3265254a573e291220fac904"), ("1e3351f4f19612f4c4c8bbfbafe4932b0aa063c79ff682cf815155d07789e276", "16fb4f6672138a71c705fd058bc27f510ee264a2ff279950cb54057d2de4cfa5", "161e6ddaf9b76c12c1b00ddee8e9d61b70ce96390a617c4933bc0a2cd924b3d2", "280056a1aa0ec05f32b3bdc1c9f460b2d151eefacb6d9412344c3ee44d9266ab"), ("1bf47147aceb3a1b08c1b86e729afaaf4b906a89d34557bb7201b4a6ecb4df60", "1d06a3dc80b150334378debaae2ae8170357c5353812396193e5333b12aef2ef", "0ca739cc903b416025cc2ab78e60936b237a78d2fc60e7ad35343965eb5aa094", "0abab46e2df8e1e96b897e9a8c8f0ef8c3b57fda5b00a71480f27d2245782a24"), ("116567c4090f8b6d073af493215e5bbc80f21bc18fe2b45228bcbd7c7a989383", "006fabc7187686ddc8bf403180556267f7a0b41eddc8abfb8e212d6c36a687dc", "2b9e2e949ab6f3060b32ccef42de266099ace78e9ebc56fcb44419595176aa61", "1543b1c6daf7b6d7900ad503e25dd23d30ad9b0a4ef7bb638f422e688aa26ef7"), ("0257713cd19bc351c6ef7c2de818fa27c1c6571e2da5cdfe3801bebc8781ef60", "1f8e6024a4b08bc2c31d63a5a6d090d12b5d328400596598bc10860d0021908b", "0eda756a4a3b728a35592452a1c16cc510b2272b5eb6c3e4ed9b37ec9b61e672", "1c15e31ec0bf1dc2b4d26a46fcd2cb5fc86e6763c85401d6eb2af495eceff220"), ("1de895ed2f57237e16f6ca08126a3c85527d13112f674d7fdc1f126dcc1898ea", "0b4b7e6fd7538ccd85417fe6b755fc853ae32af36f86fe2a99c416ae240cf0be", "1abeeea40c30223fac6e1cceabb909e41c3c42f023553d8c12a36a80c509cea4", "13f20d8f12c104b4a879f3a48198367dc4fa2255cd9c775327768f6abfa03a09"), ("261b1c7bb5f6bd821878aee7d802ec2e784b4078478b51e2c972469823589a74", "055af974c4491362a80fcba62e923160cb79e0f08a0888eb1d0137f58e15ea6d", "2b586ea130aa56c1e096ac19052677a3ac1ba029f049a3fd9c51c0f129a46efb", "10669c81f613f895e53a05cd01671991a53f4269b5a06ddbcf5ec4f398670d58"), ("29179fe4b65b157122e3ff32e727e8db6b67d05dfc9bf87c2b45f28587de156e", "00cdc91861b80a95925f115321f11c361283823c8f26c7135293346514d6a52f", "1d0525882f0b1d52b0e2169f36d6e29fc59dcc259406c6de7b8b6c81986c9fc8", "292c74aeaed267ff98ff283e13b70af967fc58ad1a01047eeba8bac1fd7cb588"), ("0bc178e2250c68a41cc5cc6e7672f7816e4198d8c489cb06e28585066e23915c", "0d7decb9232aa8d95745888abceaa48e3a70310f369f581358cb0eca1f1be227", "02ace0e6cf1a17cef8b29352fbafa9e8632d235b301ab6b01a87d16f67292656", "2639776a52e631fdbec39ee55c6bfba4eb31bea2d0f2a4ebb238fc315ced53db"), ("1916e448e45c03d0eeadcf87d843ad91759caae0b7c5ad8cab6e29effd167abc", "2e54920e406c5ed916dcada86fb1df8062047b948a59155353db0e2e9b6e77cb", "11816aa10e84ab734ea602aab58094ad30dd6538682c8be32e5b0b0c16ccea7c", "14b189a22a799d108ddeb4e3a01e11c6da41b89edf675c39680b2bdee1fcebba"), ("1533da13bffa6be28be457b58afbe0694e34b3005bb859fbef48ec83f9d1542e", "2c91c586dfd56eb056bf152cc45ddeb0fa46ae0529c76fb88e5bb7eac0db67ea", "1476ee3e6d849ccb6feee71b88be30dae59ef8aed0d47995014112cb6e368830", "0a896347fc86140e1340fc518d0132c266b55c5428e731a43b39e3b865e361b1"), ("14b88f2c16d124a2f35b8648c3ff34fd428b600acff35e0f52536a088cd03058", "020a2dc2a96d70eaa5df7ef99795fd66b2ef8c6a24ea162610e2266e7e7f37f1", "1f2f50eaa5ec5867efaf2ed4691706ee07e145ce2072bd9932eb04b77df5cf5a", "17b45e9cc335be15768d081f10e8fb764b6f942f55e5b46f14b4f6217a71aa22"), ("15522c84def6a8472c995a8a58e541c31d803fc291064538b6883af3a058d0b3", "21ddbf1cec8e5588e7d281849ce18d584fc7b538fdd37f2135fa4a1abc9535c4", "251e80e619cfb0cb864ffdd6ff095ca083adef7d43943638099c1e8a7a1a7c63", "02a04c7899876c2a014cb622fa7e8f56286e36d9309ec605591ec4615f376ee8"), ("3054fd5c0d0275682d84086e51c8f91ed5f82a8ef192145e41f5472f80d1f97c", "1eb1ac5f81236228283cc65ab7dfb839bc403627258e064a2e5f679e606a9c0c", "223d8f4a98e74c210e8bf91725f7861d330a0f636c7e5d8d33bc9f191d55b226", "18d1b5542d72451748851dc5b22fd4177db68d5222bc5ce80bbef52951619393"), ("130c79ffe30184aaf8c8543081f33fcf4f2d058142cf822656a23bcc0d31d61c", "0e66cc7a1bc04db29a96ffa68bca3f237a13c58cbd5fded7b25d0f5586646ba3", "28190e38e629696b678fb0bc1def68693642685aae672e00066544ea7acac271", "1ad81c4d332899122e3a5520284ee5f02774192a6755b7e92caa659adde701e9"), ("0c9218ab0451fd9e2b5d89e52ce5bbbc48df154edc7500e1a684f13751e3b439", "1ef44d74e07087451812e1501ad51440b7e80acd3f5e3c170046b8b36467654f", "303070d72a7836cfe3e82693505af243e1893de71d14491f4e0e179842e7aef7", "242df91876cc91906f79c2d968314ad0f6f61380462f054ee8913e52447d31fb"), ("180fe8238f36fb24406502b1b0fdc951facd1368c6ef142be74cb6c88c76e340", "1f47741362b6dd6245faf3ca785d96422c9f64492a1493518da29a1f6fef0d63", "0f620d536ead3649d91cb51156fb45aa0e22789d8185d74f06ea3045dbceb8a2", "10e4da3145d58bd2116c5d568152313a9369c4ec0410f63fa7cf2de9ce4bb77a"), ("10fe0326f372298ca9c6760f0b5e45c7989714406baad4e6f2766e589b49c989", "241d32455a98c2e34333241394a1699e32571e189b17a1d675c4cea65017d033", "26721e3206c52fff76eed177b0a10be3712eca0a824a05dffaa5580b5f61bee2", "2ffda240e1ded3fbd77457627d5e171900d6330bf8c0fc5927b955360beadc9a"), ("073b87494aa29afe93de335252082d1c638c5417819382176fb43be76a00cd26", "2b7c465292b76dcefb7b336a91789d2c4c78361c75b58ef10fad2393beee1e08", "2b02491d82be184f7a1f39011f3a4d8d8c93f9e0b62155b4b6d7eb5fa52e470c", "1437e3327591ee09624cd8f654be4a12a09afb4d5542850f093142707d9f6f52"), ("221be8b9cd2ce57909ec783ba2ae3d4f4d00e3bd8bc6235246f6de927c813b2c", "2305784e5520e1e650d33ed2917383add91ca9fd8cb1277dfc30405881c56b05", "198994914f4e01223acf0a7eff74c27671bfce1510aef31d2792362d9e027ead", "01a6b808c080ddf53ad9bec691e959f4f607a08134357cd75f7325c01de9dec6"), ("25fc158281aa18da984a1210305688c622f999cb0d6dbdd5e1d769897123ebbc", "20d7a99f5f10ae0bb946dd47af47ef372f3d2fc4afd8abd3c5f4e710a7d9135b", "05f66b0aeb2ff3aefae30f7c238268f9103626c1d95120949bbd0fa6a6292a6f", "0324d47c3ba2d9ba37638b8fc96dd3a59bf4c6ec8b964f7df52642e862d3acd8"), ("046f3c68ce29d0270ecbf3cb2ff5c21c48e919051e7e08678bc89aff2dad9b46", "227051118ac6e1c81bfa6a5039a00d51b5980ab5971d7426af1b31fd482733f7", "130782c0e886f8fff654a45447835cc35d6f6bc004d6fc247302c39237b9ee29", "21811896c0bc23c082b1dd2f4ae6cf166a64884d28ff9845b98c8ffca05edbc7"), ("14997dfe80eadde67b0a936b97be08e7be15b85af36454ffb3fac413c5868108", "13b9bbbd3c44dd774721b1dc0731b617f3803eb465fed3edc4bffe9937060806", "2efe2892be59f04c753306e3d263d9cc33bd4dbebf0acac95822b6bf457ccd36", "05c4f893a877da8ea9f69f8301bafd2cc53d362d4d569690d46d346a933afa3d"), ("092439fe8a71a8c9d92ba4b8798e2eccc0d3eb638c233d4080115dce3107a02a", "1f55f2e03f89bafbab0df2f103d00091f61afb740bee00640738befddf186783", "1f8ae4c593745d2b574866f8c3e7d94f01191a01a2983560a017dc33f0335860", "118eba9489fd9a23210e6db758d1ac92933067de28ef6810ad5c6b58072b730c"), ("0cf5409516d0a8213e9e6f5829b2c1b32df1e7134286132befd63ec23bd8ce85", "22e743ece994467c9a4d0b59ae89e9354e78553a2e26e75c0e9d9185ca1c02d0", "2d1d247471aa6ee098eba90f847f22c444ba3238d947858b9092e02b245d1147", "00fdc3d75d7ddaabfb3ca0c374c1c71811cd62e8d51fa6910718056da7618990"), ("2ff0fc67b8f53f8fe70f60611ce3e0718aaea3a633f8f55a4f15e8fd64819325", "1502b3ba1500e219b0c8bd5c10c27ea4a05f848c473a2c1807e7d8e1bcaa2da7", "0abf394973c0f8ea925869b5389c2127f3c93c68bc777733cdbb324e22e05abc", "1a486543598f3a8a536eb979f06ef00d7d229d1e0ff5cbec1b6256f3f5d473ff"), ("08e74cb5e7048b2514c370f8e1ca6387347ae47c5b0843f932d3e568cff764d6", "2b978abf6aef1daf05762e0194b91669f6d58ebd19295522f771bab41a262bbe", "1eccb6d442f35dfac7a0dc538e1fa8f5ca94bcba94a8d9045427c5019df3cd4c", "18b84ca776c1d60409ebc3852a99e6a0bb565f996f9987052aedac7de507c821"), ("13fd1c2f893fffc079e0d2341335d63974e7910c4440bc7f37bacccb942c12d1", "2a1f06652544e649dcbac34f01f534f7993d2180ca3343b8897a34dc8aa7e6e2", "16d8acbbb0806c8fb4bba9578753b8deaf21b66b275d5d14e85e5ce344292ea5", "1e2e705c6d02adfce24203af217a3e4a1f5438a18eb1cab4a58f11c185974006"), ("2bc05d06752b81ccb1cfa593b7e56a9f5d8d55425655a444ec3ebfe6de298601", "1fa84131034a7687e336dd21349a77a2607d346ab678ffbc11fd00561089628c", "15161b4a2796a4c23accea03f6d28d6b9f7b3b9aef282bf8c115babbbda0d4c6", "25f4269f4a01f6a79f13ef02a3d3b18904afb0436e5982fbd05a8447af9c5b28"), ("1a9142381ebaaa799998c0670064893ab947158350003505b614b9715ca341a9", "240693e183b24c3526a385d80b030bd77238a0c7ba99976f022fc37f06ac202f", "2cbc3574d21dd756ff75040d80867cc9cfc550bd91ed59ea5b50ec573b18f17a", "22d58c28d4c2e04e1ad7399b782a957045b83c35c322e8f1009f64bd4fa6056b"), ("186d0d62c6cf53fbec632f47d310209bc040cf83abd4f03c615d8e8c35c4968f", "15bb323061277f698b1dc4cf439ae86a45a099ed5dc86855fa7b55d24a8779f4", "2c46901487d3f6fed72b073b157c0104ce0f2a0c91b865e91bc5ddfe58ecaa26", "0890725885a0122bffcb5afc84ffcb76d2b4541f80688938f0b5503e0877c066"), ("217674a2b82aef90659ef26695c397bf5f510e1be41790c53979d37e9b5d0e3a", "0064727e3967268c5528d10d25616f9dbb5a0e52513d18633ffbe422bdd564db", "0431b3a2efd27d199d045cdfa54512d4eeb17714ad9ac6c13c4b144346f72350", "14a79fbd18a78580b52023e415f0b5b5919ebd0b222651e025c41f0abc19dc59"), ("14b10c8009c04617f5dd801cbc19c5af7baad61021fb7eff8cbb4c7111980b37", "00815062e8e467072801558d1febfb5233eb5eb3601dcdfcb47f42fe360d90a2", "2f3788960d1b20060a91f81e95f450199542e9ce4af336b41e3269949bbf61cc", "1da829b1ad6c3214c6e341759981f2f17618779e2d90e8df5bf1a75c432ce41e"), ("1beaf96c4c3a139bccbf8f745291f621bda98fe357e298b8690f49d414e198ce", "2334e50748153e11ed57ecdbeef56afad5eda1029cf3cd5ced31f69043ccba39", "15debb70a392791aaa4504cffd08d66ddcfa07da9460a94f605f5e98106bd5ff", "1f66803cd4f8d762457c1a1d0cf9fb1fe13bfdc038b2be099d6408ee4da3ca82"), ("10169cc18a27563d103850de8a923496b0d9c4ed499ef623fd2d9e04f7057d18", "0de0708f393870678b81a9787de55c027569e6a8387ce52166e2af0f107f28f2", "19c0bdcaf5f8f91a414fd4b407eae8effc6040050d34cb9d749fb6c88207fd1c", "0b306efb8195961a40eb5d1566f5a0e6c39a84625866977d2c5ac8d1b970b0f6"), ("16bac93cddf487bb91ed188cf81400b92ee13cbe08918cf5ca5f693b0ff4967f", "211d215c6cd49ceef85b42c99f464b146909ec37f216ba600de931290974bafb", "14c6c8c8f935eed952e73f5bf8c75f54fe00d065a67abbcf23c2d22f75b1c8bb", "03d3661f6f3ef25c8645ddbfd1301896e173db96baa935e37731f8a32f811fbe"), ("1752e0c6f517b0a5cd6968d59df0233ca4dfa5be4ab0527b92a3d68cff27b315", "1fda6f46b3507c72a5a9a5a1f80fdc1e0cc2492bd6f43dd6e773d2594582f277", "014e31f0ce612b16c1d24a0af79ae0bb2b35aceb6b44306fca916bbd7cc5a018", "140c33ed73accb55f5c22144d9f498756f10fa51aaaa0bd89ae05692f92dfe55"), ("2ce567f3af97ce414cbaceb84e01bbd2a6cf4500e6f54b22ce41655d9aa88a21", "162703a8c9ae7aaad7afdd4c1ee2a29be2f3db43194dcdc610d7532dfe221076", "044b769c954d144846bd40c5ca8d9ce672b822335abdfcb9dab172cfe375476a", "0f166bce5d5c0596484152188817b3e829b257bdb7dc89027332991c397a3fa3"), ("001387d89252a3adf0d4cffafec6ea8f10392383cb5ae77d5220dd943676e7ed", "15b9810b53866f3a4cae5423c0154453a1096e948ecb71b0ce9398bcaddc8633", "18124d7fd6aef9c14fadcf99ef1221cbc6ddff18cf4802170f513f8aacc6b015", "0b34f83ab70e19064c4ceec760f2a92c82bd3f17e8d6638c9547f38975ab26dd"), ("0166d005353c9bcc962975b5c4f5e3836df7ae1298422496272e54f6d6dec349", "0d7c6bba593784221c944444b4c44b77f72760fdfe5e19cb61697ecc8cca324e", "051b11655f8d903334e5cfdc0f58ab17e782873e514df51c3b7b0be1aa076da7", "1e06a46cabc2df39b47d6310842b4a03682db3a91948e10eaabc160974d15d91"), ("00433544b84646fd63e688164ff5db5b95fee4fffa0cf16396cde4b7e6939810", "11f02b6bf94eb525083f4d3fcd20ab8f1fc8661d523ea0a30056c9b9efd55a4a", "2bd775d357f9c0efe98c2c0d19ad93ac7c9d5eaeb5a37ca2cea6652c38f6aba1", "0a132c0849d6c6b0a80eb444a4ea838fb1e56716c1a63dd052a0a17fa4fde801"), ("265bd2c38a54c5614c08df2c29939dc94a518866b87520ef99b7e447a9f0d2e5", "2f7c4b5bdfd66d3b44fe27f482c3b72c05a89bdf0d8cbfa0ccbfe43a5d980da4", "28738db00ed26bcb91558525652bc542dee14bc5ab097552d9e5c964021f6b4a", "27764ec3c1fb21ce0623e5c53a86512bb72a30989f38b294df758e94af36d4b2"), ("0ecd1f8cc1dce775007d0330bd84b09f11d7cd085e28009b8c4a83f51b8af59c", "21c4ae8f21adbdfb392550938754b28802d44b5e4610351ec8e8d4548aeb6cdf", "1c601e94ce54fccbb84c21f56a281343af3b14d1a7dc256212bc165834aee04f", "189e057117eb78a7b0b004e83b6e50bf2d059c34b372329b05f7574b82bd972a"), ("189911718876ad2cd06b94d4cb8360013f28eba58d0b95e04c108457e791944b", "05310fdbd45da5dcf1d781c8841f7b0ac1df205ff0bb4f5ab24ace5cd3f6fed3", "1e4cd087be39e2166d6b6c2fcaeedc5a7c9da76001ff97b2f217b25c1964ea7d", "2d211faf1671fcca35a7027ee4fae42361d53c6561d593121a1166a639524a41"), ("1f1536093ac87174191169b053838a5dea13612831795599e4e0afa2414cf308", "212f288fad0a9b4fa60fce25db30d57817efd2afdbd9c957f22f7d9bd4a76b7c", "10afd997b71ea507f9849793aec5ccf51784997ae47392d9cae41ab75d1a033f", "14892ecbdc55c1da58e59850a5db2f3c3861269fabaac454f8a5d1d331e923c6"), ("2cb298d10cd95194d5bbc86238c19c7d65cb03d394f95dee2fb8e9c3714177e9", "1eef90af9aa8bf4b05fbf7869938b1d5697602a2045cb4aae972e865553848d6", "1a05153fcd1e549c435362f0a5c4799a5f0160bb376431a0560d8745e477fc1a", "283cbfd2d795a8cf63256cd384df12cabc4cada888dc860783284782f572ea5d"), ("0cdb6a2e85148bd68b49b201666fb5a6f73f4100561fe4bdc54956e812a58142", "117072ae79881308cd57baaf93b641f78802e78357b65266f5b62340fd7176ba", "1b1c194fd69ccfc6ba8bd0785d3cd75a8bd0e413625ab7512e141d7135109868", "25c46f8d1965b92a7a24d66e637cbb6ab6991d66b7c74c23389ea5c462a9d582"), ("0dd19062f86786bb8075880be1f7bf31cd04543a03c57922fd621630b0133dc3", "19792a159c1ca84824d830b6225f307995520282705af697dbe2e149f280c95c", "10f747a2f6ee7633de6ff1006f8141fe66e828638b18172e519bf33c669e58e5", "200fb9da6d5441064c726fecf1312f9ad94e0429e6963e16bbed7ff2b465e53e"), ("03389540e1e68b7cd8b5402451d7403044c99c4ee9f32fa8f386f4b150ae13a3", "2210d8c2f2996c74c919cc22fe7535b0846508547df2c2fbc7681b24c645a0fa", "2e3b4b2d14cfc8ba02b93a4c79057a685ec307b35a8a95784a47710f1b793367", "2e0fac96ac19ff49e85f7207fc53f8d3e35c0145b7233f960ee840725a2ba4a6"), ("19822f41bfd07a23fab6f003f911324ba593fdd8e079895e556532e598c6aa1c", "1f6dea87facfdcf210091705427863c3f4b1e3e1df8b25f4c04e5c07c42543b7", "231c47957ae41b7c2ec5e79857f86088c6a24a9e79be450386703cf4cab91621", "03f7dc93898f4269a2553a11572c49df2806942df92b268dd6d5419419843f8e"), ("246483d37fe9fdbbe60bf76cd45b530ae1244c45bee58aae608bac42cea0d1ed", "064f886990dcfc25da0181b283b7ec5625bf2004dbde7daf3320934d7f9c5809", "051fb6a319c25c25a24a2e0773f6733ab195934d5ec6461c180b0272ca6381f7", "0fc25fc79993a5e737a56f8852df90af460fe2bfa9fc2c635b9d6b145b5b913b"), ("02eeb695c3bc8d789c0337fddcbd3ea1f967b0890964573728b68fedcccccf99", "2b26e7b92f5cc2b823c9aa807086913315622629fee2fc17acd18ba1766e0486", "1643fc616e83313efb272bb743115346fd7e9ecd2c8a9a8bbf47357f273d7300", "1c05f0f9b7f60c4f459a7a7db296d4d736cecfcc82c352994cb4c4efcc0cc38d"), ("121296f44d5565a957a7f2f9d69972221a9a942051bfe55c8343fe0b651baecc", "2aa7c87e7d879ed042495c57e0167707ea7eeab8d674b6054d169476c25a1cc5", "1c65529c3e0567755621b6eb929e96c0bf04b839b3a3cf4e40bb380c13f6959a", "0b22bb00dc382668cd8ae76f544b6892378e5c2d914b51925359c221fcf778ed"), ("2fc3a17950e2abe51a2d5796f4d1b14ff1d2316e050ebdb7c8f49aaf440a9918", "2f07c7b9dd911337f417d01b8588e4bde38433321a4c165b16f8d8ac222a3423", "051c545e125b1f686129d969ccbec87e1b3d8a24a27d282a9416fa9b4b10814e", "141209257957293fc7bfec71d6799a41dd49ec4b2bc6b98ab284a340ff4cf546"), ("2690a1413ee7c69de0a00a55e02ea856a15b46efe673893cf66e20b40ddfd4c7", "0257b60a5c543c9c691b562fbc164db7a7b8424767e7731ba90b71250d633d4d", "1b9c83388b6ad63fd53cc2ae8b4bddc097f4f5a4f458b91d0a8b9614c65962bd", "0cde1d3ac0a69d3aea8270b05199add2f63606b3878aedcbe4d46af57ae37e72"), ("146a57455320fc26feecc4e3e9f8d6f3e7817c3d276f528ec99617e588963e69", "0cf773f399af00308150ac342dcac89d76bf4670ddcc853b0587d66d89394efb", "0ab11f5571898f3b1ce75b3dc45f7aa40d55365856030d6968101ebf11490519", "111f6204a27d92616d0b491fedbb25bf52fbf3fc5fbacee49fa1f63212c4b6c2"), ("1692a10a833ab2e713c4b250dcfc97b72ac2d9bc6b7cb6b30062b7ea65ce89d5", "05e6eac4157f7dd25612fc18c32473d98669f150e7f3c7276bb21bcb90fbaa55", "1ecd81efef224327289ddb94389d0fd002c8bbed0171e37ddba45bcbf6400eff", "129e7b9f7776d6cff9f625098fd9508bf98afc88d1418d5d53d6c7ed4c1db409"), ("12f1fc2e4760bf903a6ddbf9ff62c37a819663ec66cbff4b54f455dc193f5f9d", "1b70ea81cdcaecba1e7791a1c621cf14ff87f035ccb758ce67f80c3a8af06ebf", "004b7b35874129e3cafb881d6379be65e704e5d70d96c0303219a0f00ef21b89", "2abfbf8f107e35e2df7e4d2c5351e5d1284a6da5da8597448e3575569ba15ad3"), ("0b3348fad3952b40c905c82b6adf920218024016f781e28ce5f87f1f3462044d", "267163d712c773abd99909b08a8844e89ea87bf357a955492ff2ec7af5610322", "1fae6df1fb11d8ff32128f02f66bf180dc84a4b5e5be13164fa4b6ec200d821f", "1531e2e616ad78f94795c73447e58ce979e5d5e02a35c758aae1fb2a3e7070ab"), ("11b3ab7226cdebb096ed01a0f57af0e180cb076276f8d49508abfc3df297a3e5", "29f9ba09d4b2870bc24e32d8a3b7fcaf5d8cf5240cefe9430f6f25258d12c57f", "2a4e30b4f3c35475352f24e9fa436a885a5aece98a05a6150cf200d3e6c48a4f", "18540d1769487505958ecacf66577a359ab91fe7398f63c774bff5eea9d77d0b"), ("1683c5b7f306345c6cde99837ee5ebe5dc071f4b22923b3de53352d6b5be9d90", "256f7898ebdda14f49cdcfe9a853868bd10b74b74dd1431913c162f8bfc2a9a9", "004a959e077efa6c3d688ac91a3122f31e38916163916fcbdbbaf50b2a99fe9a", "10a11f8fc088448135672975409c628c385cce4e79df87ecfefd4d601b358dc2"), ("06639735f52bd995420bca9048ce99dda077e2f0bdfd5331145619a477d74a63", "05983167bd30cf39f808af88064607293553c89670f8544044c4f6bf0cbdf68e", "0027681084c09f0679a5d08afc5b6234465235b4720a5446bc8a53df51adb398", "1c9d9384041463ed4045377bac26408e5e9d0ca455242c6bf0264396bed47abc"), ("161876673cd5c57ac21ea0aab416769912c51b8042af1f3af3a6f7b5c6d1de2f", "0da808304e73a1a0097e456277cfd19ad4db688c470e707238b9ef6a85bd86fd", "2b13f006f7ac8f5ed3fe6e6cbbaabf8e86b83caea7d81176c1876628e9359e64", "087ac469530645abd21e421afcb5475d974d4d008543d273b28524d73349ed5f"), ("2f79fc7fd083c8e5ce2a6cae2d825e400eb34a55889322aec195fe4cef544509", "17d7c6b03109955dd30b24e7828bffc907dec54bc609e2187f34dd0ded12dd55", "062045fb66f89f6e56cce155f82391d8c72ac2969692a7dd49cb757fded33f51", "005ea1ba0a6d31dade24ee00c50056f011296d5a23d7c166b492246ae4a7fdc1"), ("2c13309e438303ad43afb1229b532e93c82cb696e557468359e276893d958adb", "2cf4950568bc29395b1ac14e683dc04fec573aaa288a4fa83e9df396d65d9fb1", "12514bda9411fbc9daa231d94dbab06071e921f4e2497eb7dc59fea1ee0a1b53", "253d1a865976d16be1bba9d8c2fe9a70694e82be6af662157ba56299be1aefa5"), ("1e35040cce67d952aef287ae521486c9c283e14f21f0dd031a0bed75dec4c9a8", "0b0b52bce244fbe854b5bb64ba1f8d41a51462ce3ae8dc74958997cd4b99899e", "0e8c1e6b7a668acd5c055a013804fea88544e18f2ba0a89ab98c8ec0ad5bfb43", "058f173175e0c40a4f8a1fe61004a31a17475f88dd8f9bd57c5022d265a004d3"), ("1210510aadab77bbb743c748bf741af420fad16b1eb2ca16e1ee8cd2095e60c2", "0cc2052f60ad8c195df3fc1d5f68706aa8689fdc0c705d60597d55dac9359c03", "2c13be084e139e9eca7718cd7d2f6ce691f32ed17354aadc08a265e357bb5ff8", "1d96b5464f6fc6bd5e40f8e098319aafd53c75aa0064a0e9518b2ab81d21d571"), ("08bfd051961c12005f776d7bab535da3ea5ba14fae5cb8cf701a7db2f8fe998b", "15c4852ceaeb08c40fa00dbb46eb9c57baea6af3214c7c66d07d960bbf6520fb", "24e52b5e98501a3764dc169f1b3421c32b5fa1e2d46989634dcf695796ca9094", "086d5547fbbc45b82fda3dd84de9628d910ad24cf16e5fe2613e45fac2a83e45"), ("2057773f9607701c9443b703ce76007b0d208948324d05a50fd0c37e5539b0ea", "2ffc42611d20f5d1340fc79d69c6ff5d0f5d3272fb8ad55910d15445e3004ce9", "169e397f2106eef4893b385dc3e83f702d02441f651807576d4eb3d8a1bf1576", "15471c9765cc1d18fe3f3bf66af3e70525b997cfcdac346973019825da71fba1"), ("059302ae1aa67d6cd4fa74c91fa87f38f7917232333d513073d597e3a42b1d3b", "24e7c189eda80eb9618cdd7e98f1ec5dd0b5b8899458a015ce32541b97687b05", "0379f6073cdfe1e6e446da7e78c354a541779e160ae133836b72816a56f00bd9", "2acfae3abdb95d21ed091e6c72fe4373ed006a650591c2d5a1d4aea22e334956"), ("252ff515e827654a35b372c7159684ad25c3ad794a419429650123a39aee51d4", "187ecf0746e46460fc0081267530b8572e69caa323ebad0c9f78f4cc3e20a3cd", "16678b6d3e3b4bb1b4cb762eaedc7c85d153fd9512b31040ca8b4541106cb5c4", "22fa67635b36906662236e4fd9ce695d78ebe668f74428f7d8df204a6d3144ef"), ("2a3d88a3629c1b6a93454773d1cdbfeab1fcb5aec4acdaea571af5bc91fa5150", "127de86f99da6647ece77bc28a803ffdb99a8969ed60ebb0d51041f517c1b283", "267612918ccfd1e1209fcb8effd8a2a6ffa3f8db081cd4142ab61726a700ceea", "2e8a52dbecd20642a862a74ce191ee90d8bf4a242684a829caf1045fa696db2c"), ("035cf93ce8ce5d564349453c922b67158e59fab814a8b27b64f736c31b2145ed", "22c24e7942dcd9dea06762eb9a24ebaa05cc4c02cd69f382899571a1215c5416", "1d0ea916c38f5d55fac615abc18602dc7694447bae74af7da5d5e8491b10058e", "1de373a57651f61351f8c700ecb375ad0846d4bf8b694c18f296573d44597144"), ("07664a5efd41ab7e9911d5ceb40a2aba5be10cd9aa0979bdf9389f0a67bb4d6d", "22b4e78497dbfe01f88c146f5632c5c70e03c768b1971a18a3cda8f39168babd", "21a8814ae9e7a0e1a657117f5815e00839075cc3e7e1ae30e196002a9946d33d", "2948071d12ba776f90d1625da2a708a45400f1af7747a8ea2282e7a7131e9942"), ("2fa7e5189e2d23ccd92e14c880372ac39e68e4644204341bb264dbe400e5f35c", "17aeac7a7a73a46318953b1bffeb1db915e7aa70562f9c8da684a8359d32c756", "12ab5be1b7c81dc26de5bd8dc1cba3cce2b111e9b153852fa7c2cf1b9130174f", "07f100f51550491d163f6eafc6f6d13572d267377ff8692b1225fafbd02994ae"), ("23f3cbabb365650590e2de8e1862e6a01aca401b2a534533f3ba53a8f9fe1f58", "18cad21b8537ef949e6d05783431f1bffc24d91a614e18a390e870b81a1603ee", "013f1984f8742b4a350f2409a75c933566319a42d77fb1708c74fababd92e854", "12b5d34661c004a578490adda08cfb0f1b008624f158073bf0b4815daba1c017"), ("06aaee26c95d9b378866516a9d42654393a6deb974487c1a87b14b6ba1bce039", "1b91902038ea0b8f3412675efb8c2e6811a76e14adb49347cc28b793aaa26488", "13c238db4b81c5f509d3ab129db1cc56028dba9d84e79826fc27fbdbd3d24115", "302377b22fcbfbe84f3f54fa45d69e3324d382dcc18ae6240f42cb9a3060c7f5"), ("18f49a5203a3f25d548bce3b15b32dded4d342e651c1bd163ca1bff34eebf28c", "0b040f0089ff032de3a512fc053ba6ff95af9bd038811220ffba19722617f181", "1a41956bf0799c0b85f0e31953a99d3a6c57ea538575bd3c530974ef71a1e1e3", "1d94bf8efd364cd4857445a5cfcb864388918d621e886598cf640c27fc048440"), ("203e3560756a87fc54363a44a5ad908a6ab356c5810e229bb251d4b0e6c3713b", "11a52f408e04bb7474c636d08c732f33e57f6fc1dcaa1e9cecc8ae44baba2e4b", "24e16cadab672a6c8ebe40de15269caaf35913c79e17774fd2b0158ebd6e8114", "1db4a26f6aa2a2c9708ffa98fa9a10c777a111dc3a60e6624654785740a98240"), ("0dbd0d6f4dd985748b871516e206a6f7e87fd89be8f3af52aa0fd0e125773abb", "29734f958a3d987f7fbbc77ed743874f9b3cea480ace10c2d70389467c521d16", "16848e6367c2f76b722de7b25f64e2919a1d30243e6719cfc6f29d7356b8fa19", "1248475b8a86ef02c146b8b5421a30d0c8f33dad06f11ebc84aaa565166531e1"), ("1b6dbb5c5cac3629b02201357d9ab53ca233a6ed52dd6f9f9d9cfc497866abe1", "2844b3e1536dbffaa855627234ad30daa21ca448a216f7d46e5f53f16422ff00", "16e66b424be699a6cd2209ff6642810437cb8576e3602554bb53854965a9659a", "1d1c4046575f78999972e65a6a8661ab324f7c2ceac5ea63248a1a34af4b057a"), ("00b0914df20dcabded77c405a2231c9f69de9302a0850b806bee06514fe3a75a", "15b964ca5984ebe6206cef4d78d2a38d376ea309baa0976b76e6f4d53d737bbc", "10195db33b5c4102cf33f744a041ae7dc281a72dffeed1a8453e8b2baa365644", "1e77bf826de75e44e27f2cc9a461c09e8e259a0a9e90a0c6f0ceb4a9ac95b669"), ("0e314b37ead6aff65806fcac50ac926975130af2038a4a7de3015a47831bc00c", "1a50dff5c9c9c2df47c7d0f811edc48564486426a73ced9a875d92226e7934ed", "0f75c98dfb3f4c3298bbe800f559a1fab01da97683fb04085c26398eda027757", "0779363146253898e7d9715f357a82ed9bd127f391fb1a47a29c503bd12c8db7"), ("2aaed240739517160def974056b27d6033351fc75ee095f1fe27abe2df5a7d37", "2df1ad0dcc7b44aa6428f0827ceec8ae917fee55a4e10bbdd6ba40d9b2021415", "23bb65a8c6a0d915f89c3687021935ca2fa7318422ef39ac23d1e8021eb2642e", "076bf63dc2072b46a60dea878e3ee1ffa70355e72159e21c874a71b52e21b5cc"), ("2067a2b9d81875e8d978185ac322e23091dca8fcd5477c550e85b9a6e3907e72", "1ab1c095ea74cd14e4e64b6adb9633ffc19ffff003ae3d9891df55c5df131faa", "0ca61c26752db48de9837a9e26fbabf343a010a935ce18d9353c922d5cb4b361", "0dce34ed09635d5f47610a216257df5c37f1cdd72e02c9c5a6cfc6213d198edd"), ("24f480f6004dbe4a3ff1834277e6e9ecb31bc22e50ff77ca8c646ced12f94ed5", "2fb6f3f79a0e86f896ed264f93f69387a37524e955d9c7ac693a617eb1c784d2", "024c20c51df56b7f41fd8e0e7c2f11b95c05d5b3a7045eb638b743f2f177f13e", "292b195347bfdaeb89b650a0f9f472a8fc4cec723e64b320d8ae3e2f7c299238"), ("252f5b0ae40c9cd6d972c367535e272eac109e00e4b4563ee25c5a94cbf03028", "053e71bb8ed6e7ca0aa0982b3b8f6ef2c4063917e473654b198e65c1f7131ad4", "1cfdbe1914ebe9f00337e31b17a51addc75af75945b1cc4379a489265949cfd8", "2a46cc031628fd255e523a3abc9e5cc7d1cf4461c5f0b1cb36bc2f40e70ffc05"), ("2278adec774a69222ae49dad260e1e572df8fe6f290800ec474ce116f6fff474", "1c349713ba751cbf018d3cadee1e72329267a5dc481afe5f60f54d0442e22c0b", "1736fbb5df61fab9820997f0395eec3eebeca9337cdcaa405a79301aea7bf16d", "303b09ebd210e8a25e3598c93017851b6b2f463f147d599007c643382560324e"), ("25697aa49a32156955e284d576dc0c4c67b13158dfb9a0dcec69d0dd4254effa", "0782744580acbc85d8ee0ba3994da7aba02b339134c92f50346180402e63b08c", "19890f3cccee1f9e6ec656577d0a104d2a45fb59d6e034884b5cd7d1505271f6", "23cc03021215cc812ae5f24f75a3d1c40c708fc9a2d1dcca92b57b62a382ad43"), ("1f7f30c9a46f9e878b5fb37c1607cf6631ff23cffaa89f7174c075c0d9491851", "0a6c144c00cc3dc495a07d2a39383e55db9f2446c91f6e79c4e3b00e8edee753", "0ad89748a5eeceae681204baaa53f6110b72249dc7a0a7e90cb284227a0d31c7", "2242e2e4aba908d3eecdb1324fb924a32ed96c02de51e4198967d358c440f523"), ("265739c4219d85cd56c546477e3613db4b92a8de411f11b48a5f39aff7013b2e", "125a8be9b981244550c6320e6c40f814a6b769edebc73656e23ab73795457a59", "07ba26dd26159df8f5d14cc5f5c72eeedef669a7b67a7917bdd5acc4d01df4c6", "12d7f5f443061fb5c17da22fc36033741a05764f7a47fc6dac14997cfd79dc40"), ("182f02473da4c1c8ff6858c2dbc279bb2961db8b7d98849091429a72e996eec2", "235bc87ce72c06b33bfdfa8f2f72d0827e6b567a9264f20e016a4792ed4de96f", "0457c8d728decf61d5a1c26763f5c35a2d629541a8bab0fd896af2b71e757933", "09168eaa057ac95f6f58527441e584b8ffcc4831165377bc8fe566ea1d9a940c"), ("1d8e7e9005d6e5afc80e822969473a9463165f3ed8da72ee4037c613d5b1909e", "1bb78c9bebd5611bf1833f65ddf5b3107a6d5896d678256d768c27b2afb497a3", "0d9be666ca174630e71eb500b49790c1956c79335cd4698da9f3d4f4661510d7", "232c5e9e6327bbde9163881d07c38505b1bd38b6c890418dab5bc1310f1e843f"), ("084e5e15b6ebf2b65ec64953fde2ee72d1cf142b7ca7137988b5e12f925f6134", "1e2681c956e85c91e0ba083d225889395abbab05baea7ef5e32fb1401da49fc5", "2f884e20cc94cab2bb0ac7f8d28004f51a8440f323c5b2a2727968fe5b99877c", "0b21fbee2132a26edfc517fd96b37571c6229b1b7b7a1265e2f96b9a81ee8382"), ("195d313553f205e30ba9c0bd4e5c5353e31979fde923b990b3eee0821ec81b20", "2f46eca4d4b16d84b27dd70390561a016977da0037f5aed799be832d052c7202", "178c3d76980dc5aeb867a9470c75ebc5e4e75571591a2452e68e41832489a1f0", "0f2b3c05495617b864e7dc268693157c885a5c3a0e653a48e2ab74bfb431c3a4"), ("2168e8b1718decd9faa74a39448eee7e4e4440684bf872d9fffad402969b51d0", "24930d3226c10e7c72f08bf3d584c309d0fcfdca71f2a86ba1e5554af2c22eec", "222a756cf088aaaba5948fb3649063f33144a455063b5dc08fc03e4256437bd3", "028b24ad7d4941643d44fe37e9e90b01b20e50c880beac3bce968aa017224676"), ("011f7e89ee5f3cc11da37df366b780bc06421b9e07db1a0d34c98e7b90624bb6", "16a6623038173d7f0275a11a3e23949540a4bb5d82ab5059c9e39677f8956778", "235eb7be3a7dd73415ba92390e9c2f0e3e9d1935257fe7b811c0df255083a5ff", "1c395076d8978f934edcbfd112036ad6be9964baf1165c5c9c6466e02e8cc44b"), ("2675fcf5731f1ea7753078cb9f573d4a967cf57a4084f53a95c81f44d6e4f6e9", "21dbbbdd2999d5c6f381207cd6f54540dfb2a923ec87f3de2a50f692e6747d9a", "21bacf5fbaa04cd4237ae44021adb0c92f465eb23ff3992b1f22f9c7d3cbdc6a", "2a55af3394cd044c30380eea2e47e30433ef5040bbe02f78503a78be694de8f1"), ("05353dff5abf3ccd93ae461fcdf05af6332373f82317686e98adddf11b36ca8b", "2726fcd87f7ae4355b1e46c4f0ed47c04bb5737a8228abef4dbb54ce5bae3ae6", "11936e37209b1c8c5185af8ed5f7dbdd1236a55d1733e563c10908808735baa7", "299723a99efb02ff2dd968450a37e896ae27357a5f2d76f8d119b260395dee2f"), ("07492138694c473d302cda1582058dd0ea13daa661fb83ac86eb89a530dc5306", "278514f4b68876e12fee4f42a379c478951c7dee22dd6015255923985f506024", "1da2e17b3d95b78abe94785552a2c1aaa5d4d7c7261848045d05c6c4e600ed3d", "209eb3454a67d424975b9c6afd7d62edca80697df8d7425d41c3d98a74c2e883"), ("27d388b578f594fd2b5756f8b83de25d3ee09471156a67c4abf5cd9535f8ed1c", "0ffa2ba863f0acee45440b61169d37f516a8f31a693d0a5fcbe073cf6b31a332", "1affc4125e039468f36230f56ea5998b1e27cec405946e8d23486d0c4fa475b9", "27a60cd3cf3e2a7f5d8321c9d4e965792b6d485f1a7be644a31f1945ea14ccef"), ("10505ac4a0d52cf48cfe3d32890f19b841448803079497014a9ee9aa7f647150", "13e846ff83e2481e97cfd7cf328291f972ebe0b8a2ac043d185edef8a28c5093", "2c739aeb0b3c787b2f4a9cb8c9ad72c48de0d5fbed6b149a7417db134d6cdb66", "06af22277079bc9af5454f0224316af059eda29742345793f90ce84f822d4460"), ("17be9ed84530cb51d71020b34634e58f021d23d7afd3a933b03f0fb90940b979", "1c7d95e64e165d5c41ee63ab101b0b4989aac8987973153dc0318c2b1f1895c2", "2d4a4f345ff47120df86cd466c0550bb794b650fa1c58788f574615e038afaca", "0e0f49280a1ab1faff420da1a668061372be730c00b7c2ff9b77c532e9b60636"), ("0a54608473acedf23e05d2090b98076bb60e22cc9a012728e3ec01817454a8a0", "08124cda2967db3aa5367650b6cef52e333ac9fe65d29e03918d76a07ed6af16", "0d8b044e92e47b49e4602fe69cb70a8d6808c74f13d69bce88b1fdd5516bead6", "218c806c1f3dfd2b269b4a32e75c8deeaa21e8a5e5792e733366ca0549357514"), ("19da20bf356473b50026953a560b4d23f3f15aeeb240f62f9c7336f18d04d044", "14e13013a8d0e65a867f0d86f6565557d6e35ee098715b42fc4638a061626692", "0f7f7179f00a41c2b9761bac458049fc12cd6c6cb3b36e086fcc74554f8c8e62", "278557157b77e950df28bd8cbe6f8e0149926d9638bb8b8c410f1f3a2e059a29"), ("26f9a75751d3b598c235587e75329f6a232e0783ac7c92263c202f4fd2d59a46", "3059e7f1fca86442ab58bf468e6662cf4ff9d2f9fbfa2a0f3fb11fb910d4047d", "06566e0fd2d9a2f2813fe1b5d5b6faa2d7d69dc0ccd6e47dbd8e758127f3f450", "295ba7c4c5485bfacc4fb3df1382d3c1f5dea56421a5f49876432ea5f6f75a43"), ("1d0621227c9e1d00813121713f94299c55a59f5670626370b9fc3868bd1feefc", "23417ae4e816eafcb45d5cc3e0276300d6cf6aedc36a9849a5a0aefebb828bc8", "2860c2f6340b0bf2fcb89e2de3dddc3c14bf4e7b082a736f9b9b95ff1cca197f", "197a4e661c5a38d1598834e8cdda06a200ca036215b6c3266a561d49d1258b97"), ("10875fb6dddcab71b92de2bd221288a82f741ac1be1ad6f0270fcd426d37bfb2", "15cf482c995edf1ee6fd9e18a9e5a1a593ce753421b0ecebd6a69433907516f2", "25777576ba7d42b9f0f43ba0f00826fa327fae0804a4ba03feff54c2d75ecd09", "106fa157f6c129e24b9c3953c9cfba2c6736679f0ef7d2d7f8c824c665f3d6e3"), ("01a4b5810fd4f4b5c4b5e92ffce1048a6a5ef6a17ab98ff72fb1ae6899c3f15c", "08208774ddcabdbedf205d54274fa10a3a1043b9b603fc384fb4f419973a3654", "0b383745bc77feef8394686e42b7c7ce6ff04f56c51f85d2cdfd362f10785add", "022bcb8d1b68bff4dde0969b3ae12f074afeaa5bb6ac986b900b71e7f8f9210c"), ("1a4812088a86db5f50dbdb7209e5e5a5b49846a67f1ccee188f3af6b1ca0047e", "1409c104ec7ebd13e466761ae8a1987cf039f8899eae6a23df7a0a0e0aa9ee87", "17e883e1b6e0c7053b634adf9449042874b69972400cd16145e2c794e9bd6753", "2ea61c002f9d6cdb7abaf440185c3664fe8ee563b554bb94d4d563472eb083a6"), ("17519e2d2e601d2379fd0a38563cb147ab3407f4542911cdca41bf4695cccb29", "1fd68fe0d898e63d565d714bb52e5d5923583d456f1b03ac5c9a7673e6d0e61f", "2985184d88190aa8451b916ba4a5dc0f20d8703cfc8ea63d589f2ccea7571601", "2ac1de1ed9ac0bb4ed9398974e7b5b3155d235cd2cfea11f7f73d255a34453ac"), ("21654c133d4ddb7a62dd1505b116aa039b2f8ce17655febdc67178fffb7b76ef", "04cd6f68c1eedc06c6b9900ccba6396ee591877e16f5b9b406432a3b8c29ab74", "27ec367441f167bbc30978a1a848a496e3d4b193a65b7606b4a2b144fd530da0", "1c7f0657921a824351bd645100525bd32de2b7aa0f8dc821179ae4cbe3f3ffb3"), ("03a22867b34cde7df4f4dca30aaecf126abbd6021c5fd418c02a37571f28dc9b", "281edfe9d8034dc45535309bc25956b5153d4f998c0981fb4e909a328f1ca3fb", "1a39cfc6d9d2f2e39d8458f7d8729236d73de9a779e7cbda48e139805b64a763", "2feb6fe07b217556f37917260199cea78469a083bac19aee9d5f4bb94082aeb2"), ("1b84f51dc55ba86a94d00e9204bd9d64abcb6eae63910c48ca021e583c698d7e", "17bf5725dac54f38f04e2e6c6da5170eb39b002d88146d8488d1903f00ab8dd6", "15af8d686b17671f0f8a43f2753dc3a06328130d8c8bbe654fca767485ff98d4", "057d69a8cd252942955fbb92b8d5bc9ee0f853823305a4379544714da1f9a8d8"), ("179e97974bf189f76d523e8b5e957c3d9cf012763c429597b708ef1b45f60b3f", "0a1a2838007fc4aab8204ad06b96b1ce82b27cc312f26bab3a6e27f49942c036", "2c9b7fc23111e87b702a62d11cdff5bce0051bbb32d8110aedaf4d9ec75f7853", "03f1ab497804017c61dac2c88b41236503dda517636c9292601b38c588d2ef9e"), ("1023ca59fc8a986cbfe860094e7508e84287fd50a23619bc6fdab2f2660c0c80", "0b057e4cf673449deaa77c41be00d429a1fa964b1aaee7ed82e73c1bfc81da29", "20ca751dd4c5949b3a8a8d2051e498f8b41c73cc2d0626f68159a0e756e2b66e", "14b783fd02bdc8fdf1ff7d1b560fe774eab7dff2a3ce9d90f1f25f1177ac42e1"), ("0525dfb6bf692b18e8c23143e3ac9212c8fa33bdff2e0190c66ad86474a5e986", "2e77dff0ca1dfce53c9027b4a7ae64980ec115840a48bb96767c2f6fa81e2861", "11db0b4e1f5c4db8c223edd75c545cff66c85a845c7c0ce69de0907bcf777a7c", "095c0cb69bc66ebf696d7b61db00a397879a5579852fbe72a9d8aae6680d3270"), ("20b406d9697718db678b5089913a10fdea4b9d2c35fb15d59f61f75e6dafe1ce", "2e30d451d0672a186194fb577226ab7aa6d1c4afc080fdefc302c55b6b759b77", "1250dfbaf11302ce9dfcb777e270ea9f314755f0d821769484eac3d469ee55d5", "05a107a96ad29325b1eb0e7a4be485a761c69067e8f761c249aad9fbe442f5d2"), ("14027a5578a0cca57d8feb0ef4b0bfecde349a4e53ad386c71b032c50b3fd9ec", "24b873b742652467164d65e3aa0dd2266750cff31608548c4909c4eeabd1e2a7", "076b8e1fdbc38ff0d8b8bdc493c6fcd2bc609a1920d9c5e1c443ce1a123a8268", "19c84d15223d77df1a735dd555337f5d72da5cd954a9d598ecc83b051737e03a"), ("2a819e9e469b42014deca810c93bb597181a27589cbab15e3b74be0731d485d1", "2c4c0939e117dff64273b615dc242eef994527dc52bb9d59269f10f3a03e93c1", "0171249691fbdd69d3a146708210cafa3df9466dd7dd3e61d0750f7b5e85f47d", "2a3d163003aa5b2970db38fc9c3c26f3c066470d1c0ff33662971f1355799031"), ("1f08c17879e7d548883795bf736dcfb3a244f07a67be7e14c1c857698861175a", "2782328d4bf61ecc3ed2d6e3cc3e7064d0054a5d8d51b6028e5db6000aea0cc2", "10833c9ec20940562ded1fb9bcd56546af48443c3ec2cf9f050bc151d5101567", "203b752040b2d011919663ec675ba0940ebecc6c84f2d1c69cef094a8a33270e"), ("0aea9657f3564e351bf6b778370efdc87b5674b6cd3f366d16dbfce490f7e80f", "2dd14724e08b1adb1fcdfc541c38061de0ae30692bd4d1975d688a0301c7d32b", "0af9e89d7ef6c36ed763863b6e9258f5ae25aa75bf341b8ba51df9de8f3bd791", "15d29ce84f92641452f7c40b09b018059bdd7faf75c25cc0b42c953ce0642037"), ("05e3b5c77934cf73318ffff267e0883f3142cf27547b20ae5766826c71d75e68", "098d312f18b0cf3a35385470823bca642475fccc362b68ea8fc1c64a00a8a385", "0afdb568aa0d34fccdfda6ea089bd919646708b61f03579109d0eb1105c55d99", "118543bfd8b7b039ad1daa8da0b293c3483786beecf279140ae3c0356d35f89e"), ("05599a09d2033d7ffca1421b5df4453c9a80034da9b61664094774c6c2c03be9", "270ab0922f849690ab5acc3971653a7e621f33248dae07f6a133725222576e09", "0c6c7277d500e8e7912ec4a54d205c44b67a405b4c8a82f0a22a7587ead33932", "21b4346c9177502f8fbc04e205e7f77f6579ada1fa277219caf611594a63c67c"), ("26dcea647baf239a97873728a3543eeec8058dacd60817701914f38f03974428", "169cfe29685c436128d9859fbe0d33b9a71937eceebcee0050475ff3618043a6", "075a014dbb3d7731bd2c72624a813729c85cabda19d10edaab7c55035ed596b6", "2e9e90da80f2be22c2cf379baa9d8c63e4274d610ef3675ed3e7e2e659b91c00"), ("04e81d3ed79c73e206238a14b2ed825d288bc45922990d9b99ce4148f17bda55", "0bf705ccb5e28bb9cbbd900db45db159e7f698eef901c2b71c3e2eb61693c810", "2f9020122a8419b14f2ba343e2f355a85cdae215c8c64f855abf7aff112f8d78", "02af03b3846da0327707f7b97d12e3418f76dc5a22f957de036ad3fe9db8ed28"), ("1d1c3f7ffc515a56761780bbc5452ccf333cf60511dee6d883b70514dff194c1", "0b0b14381dab571c0eedc49e612c121c5a85e69b6c626d52d0616757286a30bc", "20a6c3e1ec951a0678eacb039d6c2733cd2e3d10133b2fa372ca9a28e94f4d5e", "0d47e603ab8bcc6bc3702ceae551faf79913907811bb3390c4cf9e858934b1ac"), ("0cc8dd58e299a41954524d6a7937aa91cb9e8595529bcffcda901cbe7663606c", "276027487457312a91084e320d59afca52ee4795148541a4d4693094afdb0d69", "05cc9fa4beb9cd27a208ffc89422c6c5b5d51fa0ee65e5b71899e194021d0372", "26d614fd51bc79b01cde61c10031fce120fa4d76707bcc146bf41ab4b0a2c7e0"), ("24bf046bc7fa6439fdb9a84cc20d2f5dc958f61ee86c559a9ce3f47e8609da14", "1370faaeab03a62e1599c3a42c8133ac605db45d30a99e95a6a985ec4e287c4e", "28f77889267bf011fd2d807f228ad984dfffd7bb971d8796e428fcef7ce98824", "13431d728b4fb25de2fcd073cecc365f468edf8b92f8a9708c08e987e2007fd8"), ("19080272a8610e72a512a56c56667653ca4b4834782d4c9ab774b6996ce9c647", "0359471843fbaddc21edd223d2541746a70a204a7d9304b5cf966dd4eb278c21", "27994937b6c0e00f9faccf71ae06816f550f64c1bdbbeafd026d69b654618ffe", "153a08efaa70632de1bd0180501d105c8b84d4dd32025f50693bcf010d4f6cfe"), ("12ad7f44bdb35b1abb5d1af005714e51aa2153112da8f0588e78566330b1419e", "2be90d435b3bc0ee040e6940723c850ffeb0d43793fe1a1ae91929333434c088", "2d2b036b59982c7046700ebb09b04ced0b27a5a0b15622eb81e737b48c13d47d", "03d4be9b71789c96e24549c7ae97d443357ddb37b13d965e3b8f7c7e97b54d8c"), ("0f6d6a9eb75688d18c377f4236b2b1d9db04903a093d50768b21ec4d66908617", "06d685729e624e23fc70081dc29e218b1f03895ef623057988bd0baed1c3f37f", "26cf933ea85102d4d95f1528e3f282f1db4e842004cf3e0f405e63bff99ed1c8", "075df49e27af3bff995c0222ed793c97e6c7743d08fbaf7aea2397d2db664732"), ("0d57a0e937aab4c7b7411ddb0000fb34c8fab3dc08db04ce7b23b027ccf957f7", "1697e085fe5a75fc40bef6367da8648c952d1b6e7436c448de45132b8823131b", "0fffb7e06f57a5f32ef3f4fccf2eb13bb7ea63af665bb9bdd825f720167ceaac", "2e91fdc4f0295143c4d9827763587dcc8953033c480aa25d624bc9e41d9e81a4"), ("100ce26dc2e10834b15c7b4d6d8def378e17d460c00857ea9ba6b3c7f6acffbd", "173442c2a2200eded2c2ee5b1383b1ed46004018d93c6f50e47842068230ba30", "241e7226c195526859a7c5124f4c4fd18b9c1a3696e163934b417ca5583cf3b7", "2f1b419a2f579c3db631220cb04c0dbe7ad300568f9299d3b232e359f0e002c7"), ("26053d149424bdbfb81d1c7a63477c6a98250c92aafde2577886f7e85f5510f8", "2e6cbe4c728abd67544284bc6c58f644d4357f100a29cdbe71f0cb36e8aeda59", "152e8bf4787c3e3a8aaf0f6ad9088762a5d746ad9951a6cbcf9470cc3d695e73", "06e3548fcfeca9a20502183c9b37d9773ed62b0fe69d2b121503893c46849c36"), ("24c9b8635b0daaeeb987b0e10e4468c2da95333836a0af38c4161fe80a19254d", "01b5eb721d57403261a817b0ee6fa92046945169d516145e5d2c8d342bd9ed4c", "1aad9a79d97f54d1101779061aed4eca22010642db6fffe1cc23416dbf1c2815", "02dfdc901b950b841dac519585e088691b4d17aaef383b152b179bbedd49df50"), ("233ee27c4c29717a784e1a652119ac78e7bec08c6e0320769a99211af2291488", "29ad83560a1c1c1ce7acdcc218c23c16ed159745ba9426c66ad2de55cd4e58be", "14ab9aab61ba78d2fc4e088bc4f8819b9415de84255b57d52c61315177378b16", "2c9e545c7b360f7c6da285a34059bf51827f961a10d10589b549d8cf1036f6d1"), ("09adb88f353afdb19d460dbcb5cf5e505542865ff046da9613760c96da4dfec4", "291af3ea2cdc5d2fe1dd77ab0734e3939d4211812c530e5394af4ea82ad99948", "18ca3691e13e98cb7aec7558f15ac28af31e1f71db83454174693fee5f40f59a", "0457863923f3779ecff63332497e36f700f02d5944c74bd09a9f3356476a6cbb"), ("2ceada56019abd25894941cd8feb0071f5919b4a57c48b756b9712cf2cb9deb2", "137aeabf2788b8d0ba1f889f63fe693ce140dbc870ba53743684e37749f79673", "15580bdca33626f14cff0d58c82395d7757d4c7e48df99101052cc0678cfbdd7", "0536a5339356cd4fc2c2f0c2bc2b16554e96fe710f7127bd6babb881b9014c61"), ("2e096a197073ec6f0ae7bd71f96024ac4cf4f5e98502c347d2ad2c7c25f40e7f", "0959b61147e53c13c6689f22c5e7dd2bcfd6f0b86540fb1f0669029671886c2e", "182fc7c13c752a0b4e65548314f179cb3dbefa0559621162be1360a1cf9e122f", "127a06b554dd661908d2dbed70b853b4a050002e9ad8b6835c09b7d5dc8b1f71"), ("0e218701c7931848dee7dae9e143010a0f50829725e3378381eb8429b4b54e46", "0da8174fb2b1109a4ed63dba6fa1667c10cd5d9c75ab9dbc56e55cee596286bc", "016facf79ed23b43d4c327c7632c13c0df110ed50664b9e0c647e323a3c7370d", "1cd01c6809c8cb76489350c060d40f8d268ca6a8a9f2a5d3c409778175901f34"), ("2c5e06f9a0d962a42cf0e6301c0fcc052b82268fb9faf3255381c567933d7eea", "1e561c2d39c0a35b81ea1dbd4ecaaa3d0f701363fc6bec3cee680b0251d0df8d", "00b07ff4bd0c9620525a6c15dd1b1e717f3967a22e73a304be4004df57f8b0b2", "06df34c746fb51564cec5bb69f3a3c81794b54c72059636385dc82157cefb8cc"), ("2bb2b5ae6c392973ccab53c18758905d84b21d8af2bbca9d1bc36619950de121", "1a2245d3ebf5d058cf84cff1a835b32c728506f9f4fbc6e331c4b96e97cac96f", "2e797504b87d0fd39dcb396f8324225ca29177a1c94b06a3b78c02c3c7c2340a", "013a38fbe4256d31d13735c07c74a832e9ac7b8fc3287b16dffc0954f421226b"), ("1c0184e9616762ab509524722c6356872273758d82719d2ff4028d824f191ae8", "196d00c395879e69471c404b92c496233529be0b43782895ae67a4d148f4f5ac", "21d92245851f6e659048c19f0d5b9edcbb59b3437782682ce79e04db35af41c4", "1494021813728009b48a8a9ef385ba4795ed9b88b0a952c8a7a84f785b6b05a6"), ("14d45077aff390ea21d509878b927faae878ddf7b2581e889e8b5bbaa841f15a", "2804ce60e0202e17b95c20c9fa8c1e2537f8d550c60202ac259eb4296eab0244", "133051003c5bb161632915a6d9254360c95352327572bb6ce248e8c6b2575f5f", "116d718cb36c8734696959bcf759e23be286bdc38ed55278bf0133e364c7a0c3"), ("09da604f26714efac986ef3483bb2401c7032f5960596d88e406b9729ee0df55", "29668e1ed6f9add2b996cdd25121581faf4daaae4de2eecaccf3f658fd05ae33", "240bd9d38d699a1d9ee5b9306c16f8561be4087d68b8537d02691fd5285cbc5d", "2a7fe51b7f246e71caeb2391080eabc350ee917722c94b9a7b97f5b71c906309"), ("0853533d33d497cc99fdf2e055c16bfaa16d8a301d21c3e731d4f8002dda8927", "0b645f318bb972cc57e70fb66745bdeee63473a2c2367cb69f3c943e21722757", "0787c94e0de19fff2cd8206a4537cb92b90114c477e6bfd80dea2f1432fdfc1b", "104f068ab4b4861b41490f171e7211b291213c923d13fa9bba0ed540d63ce539"), ("123e6472fac89dcb22f39f4a23a1a06750afe82b979d6f1761b1601f8684c093", "23107114342ee18b4993df624ca11b618687a064f3c9816a7be9b6262d0f1ea4", "1f3c5b280a648e3f4c87fac3a8e671af504679480b4a82487e7ffd7c57d39110", "305462db383b326270ef5c51ada023548fd795eb04df743ca03cdcf30e75ac5b"), ("0d341d0b8ce20237e941b1597c444ecea7cecdd00b780957cbc97c8a7c072e85", "095ecb3d9ea439392d3bc857c4036ee51679844ed312847ad4feb61754cf4771", "1b890ba623a527a744a17bc7e870c437fde432dc5194ff634931255f5aa976ac", "216242b689c293979b9c9ce4ebd4d057c592897cfc5a67f4e16a0189a5046518"), ("1bba7f64831bad5d392f0b99e9f2ff80f796e324adffef596e7c764c23e33b91", "142a2d271e858e3019d0fb99e7ddc1c2021e5ef30333f57e227f65b51b727c71", "2cad9bae0e2ca522e5bd13542fcac186e4ab2be95a7fa22717ef7554312fffde", "1ff7dfc08e8becd6fe458e975624972e7e106987f92cc92e1baed134094ccaa1"), ("2e23f5bcbd20066255e10eea6b45afbb0cd9a028cd8fddabf53e20c01aceb619", "1d6c7eccd2f974fe0f88a1ccb8d3d96e5ffb652c3e55a600cea80ecaf1470207", "00755a9aa3c1780ba997e0897ff9902420c62e51206fbb810899e4dae6e0ea96", "267c828c5e271e81c54d019253c1358f04372f7366c3b26e58cce33c9b55df1f"), ("143ec279793b8b46fd7207cbb3bdcdd408b6831a07adb8a1d59bd5016b925c2e", "2c66e3769eb6acd24271579c01da18a0fd512dcd1a90397fed3a67b1e45fcf78", "238964b34d3347980d5f08fba0730e3c3eb5f52749e6049f349ed9a0e0eed6f1", "1d2a049f4439a80939965d84dbe0aa4f452efffd88f51cf9616ed20f0488fad1"), ("0ae15fa616f32a3522ff2d5bcbbd47fb1772ee6034815550a567e7807ade8fdf", "24720693c73708e48582c558c878a77adb643b142be8bd10d32ae650eb7df199", "128f1cf08ab2e46d4459fbccf4d302a01427aa861b0d5ee03b6d0d0586a21f02", "1d300c4ab61ae35c5769528be7080f97360a2ec7e210be00ee7aebba46d025c9"), ("174489996ae6a7a7f378a612cff4084ff4ee89b660477962f916d9b8508d6bcf", "10606804e08db52a68b150d1fba24ed0302040a8edd1261eef0408061c145254", "0fdb085895fe322e8745b278a9f43afb27e1a0c01ea0a63ffa1f10d8fa148d3e", "180456b06db250e12c313d384fc0074f4eb4a2c80e33352e400dae16b6fb6d41"), ("2ab2bfa8c585a9b62a4636189d226d500b9dd803baafc20ed15314107714784b", "02af18093d7641bc3b75c0385744346758d0382537654570a6a6eeabce890458", "057dba44bb925655d0dfeb2032322f2cb6c0967636f64329f5e72bb7106075b8", "240e91aa403b2ab401d4791c8b34c3d9db42f7fbd80aace3f3282ccaa0ee5d1e"), ("2245d10e34a6cf733fa432a6e36255dddc899508bb7286ee13874dc50dbb2aaf", "2ad855526c421be348c7a42b909654d2fcecf8cf7271508b7966206c15844eeb", "180efb23fdc19313450edb595aa0940c1b21626ee84c25fda40348aad4cd67bf", "15cb696e452e38ee3319c5062e38abea67dffb2fb1480211d9bc2a0faa336b42"), ("0c587036c21e3b8b98d97189a03286096b3a337011f24a1dcad5b0993fb08e8e", "082d824eef22dbdf5bb19b0f03ef9872c3fcbbf5969874584ac47b3b5560c26e", "0d6f9dba2643eec1aa824fd9bc9144aad60b961050c4a1b531313aff00eee197", "04ad2bcdea123369ecc40768427e3f0cf7faeb3f38643c8ae26320508ee8e7ae"), ("1daa8c9fbfc4ca6704ad792283e4c9394688fa91b57b3bb0bc79e98b66f499a6", "05d422b4e25d580385ef3d5aebb69a867a0f939b58017babb640ac3adb61b481", "18a8dc109aec78d045b979e4c84c9fc514d512198b26ff44a63b09071414aa6b", "01b315111df3cdcad8a298d7bf54fe60661f562e6549a6f725cee333071b7b7a"), ("1825b2ff38fa927f531d543924f660db11e3c0ca1f32be9d50831a6e268c5dad", "2500d5524fbc8166ed04264613d98027a7135448f69e4241ae98cb0eeec28844", "1d1277cb5b1d91d5f4673f43bb34e170986108b3b8323435d336743756cf8b91", "1dab386124a708fd5db4c822505108c5d3262b899336f0db93f9e169642f4f9a"), ("2797e09461d6f99a86dcb240472ccbcebffdea64fc349d9f477e405712a0e6a1", "262a4bd7ffe986a4e39e1da7fba18a111a4aa2a5972308aea4695feff78f5275", "16e767594eb5d82e733c52e7e21050e8c62f0783f08881c432001f9c74d1b0e5", "0c6ab179531a50e7f74a4b1ed80bdbf67c0f59184f556ba66058c3ea6b1917ad"), ("1034098897d7e83922d46ec3ace321c8022bb568b6bc9f5d36c01ba058d36cec", "21008db298288ac6d6c5edeed3df945424e5f75b35430950b433498256eacbfe", "2af24fc2c9c4650735871a802671e07a813d98b00f28ce68f7dcad8c3d5e3c45", "0b3c852fd66814d044b569aa356fad7c204e65f1ae67a6418dd19be6349aec3d"), ("046b4d3a92e06aa3261fe0e45c10245402bc4f5f4c732ec9067d879b15c2abda", "208345547490047b16f71d3797bd7dafc3c3d432e5869760a2bfe4a9168f0be2", "2d9bd63d026b30b576d6718519d39de359998c70449201db865a91854850dfbd", "250dd7cc8b6f8b64a2b77cba12abd0d50c54a50caa2d0a977006ccec75bcd0ea"), ("25ca72a32a2a21fe479b671e3d438b225b845591cd1e906c25f5a081c3bde651", "1973f0b97bb4adec27e20588e7ad2147b3018f65846025afb4de78edc54c26f9", "0daf71cc81d6676269349c78b2efb6fec3643eb8aaaff485a7b9618be03caeda", "11dc2d93ae253ae20846a208f22e2948f4334ec8450a306f90ad16ecfb7e02e6"), ("0556f3fc345cdfe2378b5c676c7141e34e4b89a9091d9f2968e8759ce4647496", "07625d22dd2083b18cd8033d85d8f28d38198f05bfbfbc3da949b4996c0c9bc5", "262dafd345771e36f9687d35289869e43ed55ecfc477a86c1b9711fac833ddd2", "0e6456f759cfb95bd7df7413646da774bd57a3a91eadee79b234992edc3ed4fe"), ("07eb74d39657e51317f6ec8541f3f0651bb25799348abf41d36aa48bb85d3c42", "0ea05e4ddbb2b284dde177d7c338dc762540ca3b471ae83b01419e3c54dc0189", "15ad1dfd11861ddcb36ba11dcfd7503a7c7f106dd60e47e2c3da13ff47b0b869", "0399f9de1aeaa6f740a577b89e4f6212fad2678277cc95aad20242254bcbaff1"), ("0a5965162e714deb8669100f1fa535a7fe20c5e459744b85afac271b50dbbd33", "157048b64ac29fe414dcafa913af05ac0070838d9635cfbe71dc813b18e41ba4", "2d1a1adebe735dcdcdf63e078335b0e29eb48eada66002a6d446a80fc8068b70", "1b877523e967dc29e39f33afe27e19cdc89bc846e15431e0c9d7781e845573f0"), ("21baebc78be68acf8eeab49e70bc7bde85f9f169dea95db12659d3e67a079e5c", "22c0d032f8ba754aa83b892c93d3336f64bf6c765e3a8102d03d3dfa00a2d76c", "10e2ec8b85cbc30ea1ffb261d557a6721c740b056c23fdf72bb592f01c25eb50", "10396c3420e6ddec472ceec5679bb2bee96723d4c5fe77d81f51170ba589cbac"), ("1b3571e4c040ebeb37abe17d08b55877cc13fda6fb300172a23f7a3618c73c99", "1f3e495e75b29a06d6ae7c99c38eb2dec2b0b413ae9fff6619ed7355d74cdca8", "03d858f95b1db98c6d119473b2a1312e8b3d151c6a339d0553ff903daea85aac", "2ba330cccf8439e85be991b81545bcb2fe60c2c29f38ee61c6e96cf93d3ce3a4"), ("24e4e9cde6a663572ebc4f850b45b353f5a2435854bb7becdc90953eb562f204", "12636c69f0d0a3a3561938154fbb0639e102c86038d13a2c5c6df667e1490b3c", "1c3d2530fc8ea03cd04b108fd7e236bc461d0b9fe43e758fd13a2f4ba5e0bb42", "066fcd370c27634e0b284c8b48fcda1e85fb3fa3a94aff3a003bf6f6a6db2892"), ("030eecd4303cf2ea6d1b5acd9816d2a05699c7caca2f33bd240577a70a1e336e", "1d273ff66d641d9c155c329300cc386af8f9b14a21b7b1db64e6ac0636981fb1", "16cfcaaa95b405490b905de4414bb7d77d6a0c79818169ab20003fec5bde16a9", "2abb00ef1ad32bcf4fc8d72240912397e9229d92a0d4de62391a6382c70db8c2"), ("085fdc38a0eff4ed20f39a490df28ce7425b966320bd033ea049b857c210a7ef", "097c016236247e153326db5d175013e00ac929a543c7a509f48ddbec5a83413c", "0b567832b18dc125ef31aad927d5dd799c0a5909dc06578a6227517b2fb9fe43", "224bc63c39ab01d03082243aa000ee669a8817aa1790738661c81ce8e8ffa846"), ("0484b107960595cf6614395f0c6ba3695f5e90bdbc395154da6d2140af4005d0", "236d570ceae83f2acbb375c0ce6c8c829e40d04a0e8cb59511cecbdc4ba2e7ee", "00adcf52bd0136a8a2f3d43d64c99ccad3302054854a5528cbb0e045387cf41c", "1f0e1f054c7a502fc800eb8c3ce09bee948e83eec8081b8d26f1462079800b2c"), ("1ecb0f66514c2032dbaf9d313318911f28c8bce696bd4792ce5e54cd81e8c4ef", "228396f6aea205f99e20779b7d62dc1f87aa8d9142524ff76984f4b6d5228726", "2c6c3aa1c919e12604d73a011972fc3eb7a3f5efcb26e67644088c1ec84d31f7", "0d0ca8374b8b2170fb7aa4e561e1ffec852ba72cc63c5ddff8c659e8936e4965"), ("1d8e4564b8aa358db090772b9f719f4cca5f8ababb80d1e60c07969f314ba2af", "216f947dd6ae49438132430801fa8934ea2d8f1c031bc7c30352bdc99e77661f", "21f7711c95fbc1a36827598370c2e15e5425e645d98bf325f8d5281b46de97dd", "0868d17ff4b6f40ee4f0d4b8d21b279b09ab1d9b60ce798fa82e949a83f38c7a"), ("0b42bc4aa352455cef9fffdc9a63c7aa92d3262350ed5dd549718f574e6499f1", "1883f244d312705aa1a40beb8b49cab4bf15e34966975ff9bbdf601760844a17", "1951e24c766be937865885933692dd6cba773dffd5f7594b3c3a66ea903860ed", "1ac76cb86e64a5406326e4b720922e72bd671e46e622a5451290b40d5d9410ec"), ("060083b23f38eba73bd684061ddf710b78b61801c2a8aa8601900bc8bdb081be", "285bfb289ba4e050f0bd231606280a812af0756eb3ca86f89770fadd14f16f0d", "1862d702e91fc0595d8601a6b1c47e8123982b5f9871f5899b048404a8c40e8e", "0077894b36e02fcfcedfe8b9c06524c249a81e750273fba42f20c7283bad15ed"), ("086f37f273774c1fb0df348fe63d297e2b5100d857cda5fcbefac6b1b4389430", "2f0cfed164839005c7ce28f1fcaa84188332b909503b174425ff78308dd3a8ee", "0c48ddcc9dcc9d6d9982cd15d7fadaa4538666f41cda8db8f824bd0838738847", "03788ea219dcb29d2c909cd4bd742f1473f9b13e1aa09763bc03164d1ed73a2d"), ("1801594521fa5155b2e914877cccf901f4c57f0ab28c32808a2d948cf6ad5c1a", "19135de8192035e23c9043e9ce7d786bc1781f7d8aea7d6bea5554f636bd2547", "1c90980d570642a7e32c96b16712d4fc6a524470a4a46272729b83af8784b918", "2294e3f1d0010e0e2dfe7436910c3e18cb4b360660202d8cc04c8b97f88e48fe"), ("0498ccbe8fe2f770fd342a1af36767a0539223c2f6b97a226c85f1d3319d280f", "291c4ddcaec9b273f7698bdee242adc96a77702574bfebed580cfd79dc35d092", "03ca3bc572dd426e7ec937d6cf46654de3fa2dfaee46e4c6433a53e936bcfd84", "1eda3f88c9b4201a85a9e3889f7d468673b729ab24894bfe593de071136357d0"), ("0fd6780b2e2942234ab40aa75a9c1a9a1439ea7ce4aa09c6a504b99cc78fe2d2", "22644cb4240322be3a018cd5d2cc1ecf583c69e316211c87bba26bc799345fe7", "1915d4f177e16138d6ab7a361912746795d357151429c9cafff710995b410e34", "1068ab2ccccdd9b30363c269b9830513ec8c698510fd23adfca3714bb4dbf783"), ("1365b751c99bfbb5a560a700638382f3240561dbeb54ad13605e6bd1181b965a", "23eabe257ab2c117731180d548b78b8c66061fb576f8f896155746f9cd0a233a", "1ab3896ab1fa86eadbac59b8220a94fca2ef34f6724d14e945647b80839ff930", "167ac453c9acfa6c7a7243991c8d3fc4dbaf801679ffe68c7291ef92e948c871"), ("0d8313a248082b91953978554400a106ae6694cf5a98d644d5033da79658cadf", "178b9e697c9258568656ea1b9ce6a01c72780b4bbdacf770418b1112d0c31c50", "21d91ec7952848daea62445b5542f380190ba8ae3bdc8312cd49efd6c8127c93", "040cb601a29ad3a9a2f028057300612aa905158093fb52ad261cd42176059aec"), ("00d7eae2aaef07cf35c453f1a237b105277a3c6293b6b8669cbdc77943734d5f", "07f50ed41f0ec3984d7b87a5d78022c044ed086a3bd4f405086e40d7e8573477", "2ffc5207099802e9764fc5e6fd968b1914c122304c27a9cd960fe5938ea229b2", "261d39765e8402b8df08f7272dac434300ebcb24b48bf7f9ff6284791fe8e34f"), ("06a81c41e2479ad7bdc224fdd332dae3da1b79c4c353783bae4e3ff8461cd347", "0168d505d329998017e1205f0cd5b4cd669cdc00e7eeef1bb1455dd1a96b7606", "09e297d429310c4ec9fde7ff990762e943c836b2bfa03867c2e78bad6445984c", "15afbb44d0ca3a4e0a7b39c9d3c21cbf03e9af06ee6ebf331de5b02c2d889815"), ("142762739f034ec05206e86e7982b500f275df1b0ddc55bfac21755b41ac4d23", "29a7ddbb73b9e6615dd0092f6b697bded466e347ba557319de396d96d1a514ba", "00a9edcb0cff9ddf0344269364d0cde36ffc16f622a2b3ce3a6413d2fe9cbe7b", "1d252e1092a60abce20ea83a967dde2bf290c2ca66687c313e688e112928a5a0"), ("016d15bf1c57718d0c8da12f742bfdeaa1590a8f329533b8b6eb9060fd3a7396", "283f317e67dd99c53109f5cf33157d8ae3b0a1c8fd0402937f846cfe085613a5", "1a5462652d2c2293b6b50d4d5b317a6362d0eb0a8a09e75434b80f85e92c057b", "2703a8636606ce1ed1d36a5bedb060709354d69f4f32f80b8dea5e74ad0d155e"), ("0b0f036460f4b8bb7f5756d368d30f6c7a21e907843ec83adbc5d0b8b45b298a", "006c839b3023530680305c4d40348b91917dc6330b0978728dd4aec626e092e0", "0bf22f3dc2c30d7cd879467e0f8f743a9d57a303f33531ca89cd2fbd8ecc31f9", "1ebecb882e7640daefd1008a5b263221e38c6f218a4acfaf3ae7f451321e4bb4"), ("245ddc40757db7a64d559779d6d7e656489fef5957b3cab608ee6463923ebf5b", "17a19c8db18d4152e47f483350713285a25e3f283c3e7a853d390a079b707f3c", "2345e88ecfd094a69c325c2fa030c6905458f731e1d4a13e16c7563df9736118", "1cd698c07958abde7346d252b561a7b921c89069251344aa7629317cb96b0e42"), ("0fcfa5a8ad50db7b9d9ecc81c6018f8392bf6efda11f6b45eea181906aebb676", "1bf6275ae5c8f179d9af06aa71758957a70f2747149b50cb6cd4f67dfa1b1aef", "27b5abd0d65ec6d216d5aae14192eb78f2e2b3e92f5075fbc53fc97e8fa23252", "1953430dbd0faa8b88c2cfd81426f7f6974efc5d62b3217b054968c9d5427052"), ("264432525ebc02e1dea083d5b314812e57fe50b548d49f0cba93ae0afd088281", "2bcff05612d4bd761b0deedf643c1a69096ace67caf597c8ce38c5f7682e7c73", "1258ac535c6bbeffd8aee6ba5ee09373b2b32060bc97dde14ce074639fd984a0", "284de1d25a1558ce60cfd5be9ecab514edba770283313b0ba0a98fa5e581e530"), ("03e8f26ab3bf15781543ff9f3d3fdac866b528ef77c50929579570c498221216", "0772e7997275c15487d5133337df1c8cb6482d22ed9f586a25a679b8656c50f8", "18a6b0dd2af882d68ba081f40fa602143eb4075172b7dbf1eaade9b87a047ef9", "13e9895946712813cdc0f4ada6db0ccc639f55464d1b6c301cf1c3da2b4ba818"), ("1f01900fa7beb25e0687f012b5f144fb418c5b53ae0bd7fcf643ad86d16dfd38", "2ec315ef447300358bbf5e3ba6ab57ee25f37c20d81ed38cc80e63ddf508bc37", "1da0d3707ddcfcd42541c6a2c5048a825854ca73d54ec0505115e8e005815630", "1ec88986a0685e02216e0d6381f359d60062806ded31f9159daa9227616a53db"), ("2a900a245f056d2f5d709460e0d9a734855e419eb4f3241e6651afdfdf5a9fe3", "2f6ab8768c45c723be92d7ed8717ccae6f961f123ab70f928aaf7fb4f71d54a4", "176a785f3c65305eb7c7b0a179d4c9884eddfd55e337f6f8403b0dd572ba0252", "12f8e9bb92305d824a5cda89c272012de7de6ee51cf29aaedb74bd407dab74bf"), ("2ec94be74f8f05d9f79ec0f4baa4ecede0ac93fafc918cfe407ca83e1a569a83", "2fd9d350de05491ce3a7900a2424e96165436c97d53e7c3c5a72b47fbd91f450", "1e2c28b4a0097c2fedde24c43972d365a894a4b9f0b34ef043d9f24314b1e375", "115334a51daed9cb254117a54625c15e93a90d68c50771015b8ca5a7b45081dd"), ("13f5511ad9f46cc30eb085ce1b810f51bc941d99bb7dda1781663185ea0bab05", "2408ec10bdc5672b3ae4f1bd0ef703ea8a43c58e305a612bcda89c96d8e2a649", "0158e55e3bd07be27650ee24c414578a5100a4bcff1c26ba58c187eabad2bbb6", "1a97e800da814b6ccfb15cefdd774da7706ba5f1546ad9dbdcae41f7faa9b376"), ("2b1e4e0a1a5e769008494f52b7e6bc8af72259fb4336cc9b989043a35a27938b", "0a1ecc9e9fd73efc8e0543a7f014ab825b0207f8c149058e351fdb2a269bb68e", "2c24f8147d48a4910d21df4c1243f10ba125b4bebc33d9771812c7b839048e14", "1f1fdc0576f415b4b8b6922bf2248d64560e8468a22178d8a883b8f6d74dd833"), ("25e0ede04a3d8562399f5d4eed0066d003ceec9546f4c942fd6bd5caf5c26d77", "011dfcaf7e9f19db87b51291dc693e0bf6fb9a775e563de142b8c7bba1dc0fe7", "0284c1d02cdc274c5dd7f0ade6aca25ad404628a03ea2c2c38278e16c3aa3d31", "25e8b309abf47bc8871d183589e5f6c3fd510ae7816b241ba2f6ca736a62bd1a"), ("2f0577b0d39a4aa4c8c8b014ec3b20c149784e9d5a98b47318a489b802c052a2", "01a47ffaa448d0f94dcc79f4b977961e8f3ebbf5a40ddfc87410862ccbcefacd", "0243e354cabd0dd03a51f48513da395424db36861efc13ba23df428dd034e4cd", "2e05d4a55b5e93cbcff8611fc9485f91337ba9745750f8152769b334c5000ed4"), ("169c26559274cc02f17fc9a38d680540d153269b8883e0e9959a57dfbeab2dc6", "061dbf4d19706fc7462b4e5f820c254e0d70ca587ac9526e36b8003790f6f546", "0705d94c699d406e31fbab066d5e1693424af8be50fa1f3eef4dd86a11229f2f", "19bd04fceac3a944afc65f7477c954c042cf5a48807a81b4ee781e085fc67070"), ("14dfb9a4e315bb3428799d15410d0ba3efa5024ea14917a521063b64d1203241", "26827f21d86cc321c7251f7986ddc9008025e4bf639a8921e4f9c339a42cebd3", "08e5f9b4daf66b74ee6f388138fd273862dfe5c89eb64726d8cf9e94b35f42ee", "116d66b09d1705dc0b92d4e91d6234315552b3967bbe2a4c37e595e3917c120e"), ("2829ab6f86057afd135287d2f54ad091a20399d980eb7b0c24fe2b0acf6bd3ef", "1ffabcb74f5304f389693744390af34a141cafe67c5dc7f2c048f882ecae11a1", "03d019be016248db97b5c5880c2afb44e9c810ca475ae6a5596b2772b3b9c471", "21a21e7f081efaec25ad81ca0cb778352de77ce525bcfd67da0c62456f3ad895"), ("2590de8a61b034318b35aa5d68438f8fb5cc8b5e8067935f658bbf7e32e819db", "2c7aa800bd508c145d3f1770d4e9876d79016e4f9a97be011b2363008579f5b1", "121be27bb57a4aecad0ef3d3053bb2abc62822fb61e43a871dccdd0abcd29ea3", "0c991a319ce88a65bf651e2198c7fb4b502ca8cb9bae5aa5fa2f210b7a09131f"), ("1786e7a633d599b6b5f7fe44494f099720cc8ed540b01a5c017b1d3de8b04f4e", "0d33927097fe56db1d681404cf6b1f9ed768d3205d70ac266a63bffa3a6a56f2", "14d8c3a585272fe1fb829f2553b10f9e132838ad52d0744278facb1e27574f19", "0c8098bc9373cc60b5213646d8a9235de14496bd7b823965eec59fb897096040"), ("25f0dc21d0e27c13a3aa1317a8757ad6d0669c3bf46545963596f8848bf49b2e", "1a39f5c29897fe5d755824edfb4d50e70a48b553f9b145799283989d03469678", "2d2dfe44f9239ee44cfe819817c1cf6307b73037b8d239edf5d98c38e16dddcf", "17eda5dfe6b8a5bc94cad364c2611e6204b7f071f59e4da6ca0be5ed06a83c66"), ("022ac262f0350635b3a7e5bdad429af26ae03edd5d1880019e141e9b9b48b060", "01c742593527ec715459ee00fe26b38ac21393771800eabbc8317b9f3f7ff683", "2746afb15f686916e2f7ac314aec38f58a4a60ccab4aa201c27ca30261bedd8e", "02c1dcb0812afe39fde9d77198731446070ce4c8515ceeb7b829c8a55a2a8042"), ("11e23e802035387428ed94a16a3879da87164b5e13cb6de0cf9a30c295daa930", "0d0e723c13594c1bca0765ddee7c1a9065a2142e199543913d969d2736434ee7", "116a6f2a067266bc8589c6a262a34cb4c4c22cc6d1f7cef92d3c35f50ccfe8f3", "01e46e20a5dfa569b8039e1e23f71ab4afb9f14b08d1999cc28f3d695239822e"), ("00be373fde67754a6d12f231721afe9f3dde4877fb77168e70f701ac2d24148e", "2d8b755b15567306e158e40af831183a72ffeeeefae5c6ffcf8b801bb24c2130", "123b6a547f90987bc76fa769cdb7a6ad9445686825dbc3d970d72839e1d332b3", "108f5e2aaf0bfa7548656ae2d4d758d4c61c5956fc8255abe8c878d123f29ac2"), ("1568e9e1bcf010a4511db0dde24c59cfcdaca8884f126ee065534ef6a2249ad2", "1b4915fc9ff8e6ef3d0a48639a84e417d3ba35047db2fd432aa7a86b7127ab59", "304c230f051f3e0559b2ff6563402cf57245442c7274fa0ea124a4aed82eb587", "02fcecb8314bf6060ba75edc58932f5dbb8d5433739c02aa486526a6e6620cbf"), ("191a5368bcc5d69f3c79ccfdc3f963e59692ffc4fcf8967d163017c54f77cbf2", "1666ea27593e620abf60e0c2409ee35d31de7fe1288d7117610e1c195fe67fea", "2bee597330d818e329dde1ec752e1c9bed8bb9bdf365b4619f9cfa074b14faaa", "067e428d8ed38ba2f6e1d0b8df596924e2195efa366565bf9095856236dba85b"), ("1b870cf72a542917811033c4e17c02f5985c90207f910c9c9f14585946f94205", "2ed0ced98e74ab0e29bbb11e4faa0145a00fd836f91f67adabe3a87dabc72bb4", "01583fd1e62d46bae50ca9353e281b0c206701027d72a8b39920dfed1c60a676", "06947b104a7e01001d56d0a3dd72fc92e8dfff726d32564c45107754b9401db4"), ("1d857952c9c8575f4a52afcd05f80fbc5baa51ca3837b5c0b78eb08007b685c9", "1bc2801c7473bc58f16fe526cdf4eb2c77f0e84f8abf707f010e9edbde6e4ce5", "0f6b9d53a94ff0bff8acd8b1956de3c3a4535bcc0e1e442c2d47722a9a7381ee", "0a72b564fae23bd85b9f184b0419b353bc4564cec886ba25a57a37bec86a3b8f"), ("000ea85341f4e916c81ba7b4d2cf43a9fc05f0df131030fbcd4b47a441e8fc1c", "130f9f4641d819bc29d7afa68c1192157503a67138c63d0ea82ffaa5921dd4bc", "1cf7f179ddd9bf5eff950a30a393e794c6babbf0adea047d66b8550100430eeb", "1757145b13b33584aa883db9101a50fdcfbf65b9bb265bb9a5193237da2118d9"), ("010d658b1b4f6c616c92795c2c0ae74f4ff2822b22e0a289272699cfcfb86efd", "278886405e1bfbfde033a02f6842cc7bc78181559d34e096c9da49ef1e914539", "240aa9cc914e07b178bddf33d2137a7235d216f8cfcdeae22f7e43cbec9265f6", "09edea3fdcdcf2c7bff5579ae74381816212ab9c267fedef230bc7a03457ef71"), ("1e00084ab3fc8cb00112429bfad06e999d49de64e45567b0d64752aa64573d39", "25ec2b6dfebae142c61e1761852fc47d99ed0f1bdbe3f7ef0a2d195d6fe7f462", "2f3cb1a7558dc10718daa7c9876abe31415cd7099e32f851b0848c8614a657f3", "15e2bc3d65e4ef678786be307f1ef17b226c341ae58b99d44a2b5fa28c4b9260"), ("2c358513159ec245cda01562ff284d44fbe69ad39ec08dc6106ae65ce7b0d60c", "021da0c1ff464c7e802b50b15fec4959a4e90e74b8b5fd8282050bae408b8d65", "0ffb1307a014fec25ab1fcb1ba7bb2fafc0aa5506beac1ecef22cbe194dc9b59", "22c2a7a3596080ddb2761d818181289d1fdd19f0da0111632e3afd9c4573f641"), ("2ab25268448d9d5d23be4706d763323e9bcee899c9bc492c1f88b405fbfdf97f", "26e8b4b37214390ea9f9d190f4f5f8b2518826076c2a1f0ecea57007e8e88bdf", "24897570ec65b69bc3cb7333b37f027b4a26a7e2e9e4a7fac4a73c3206cc23df", "15607cbf985cc6ae7d130320d11c63a975efa0e7ef264b04219c3abb32a74c57"), ("01ecbd7e16c975c0df62e8941b8ee0063718b4bf4773ff4ad64a38aaa665fd6e", "0492e53a3ce9d9fb5b7739ad2c4ec0fc0413d6e102e5dfa69b3a240750820205", "17abbc08e9776f6c07c21289e123a0117efdc4b2859bbb39a985747a4dd76aef", "2a6145ad7d187bfb9878d501df36cbc7214ddf1519d2a262171e25ddbe34a7a4"), ("216ce255c032b86659a3d5c54fce29eff4bb148e3df1492be9a79838f00a254b", "16e0f74e772250b96d308da07c4d2d83674b4a71e9eaae8f9470c161c6525db8", "2f2aa62f52e141bb22a4567d14c8c07890f65c1f79a0ea724d448c5a9219628c", "28f18c572e07c22f4603718ca8f4f54905f97782cbeb21172928b875324b5fd0"), ("244c40547fa2ba1ee25ab9f131563a0586337f0316d364884a70eeeb326f49fd", "2ede3deb493c3778bbdf192236591a269f1c0f8917d22d8caef1e651aa363396", "12e87d64863b604cf107ddbf0123ac3ec88def74035defa8a334d36f8d204f41", "1bdbd6bad0abacc84acf38f6d1bbce126013b7484b03ca51814fe0e122b0ae71"), ("16cad61bc86ff811205288df7b53f0cd0bd02f2f0188eea2911a7e23c2ec7159", "085cd3f683137a3781a31f99857647446071bd4d2f525e16e1df1310b638cd7f", "2299d71fb22ef55184e153ac388aec89e825852ea606454dae34271ec11fdc82", "09b4954b2f41da480db4c7ce4fa1b259f3ee8feb5fe88898fdf639a8c07365bb"), ("245d36ea1adea2c6e322b2ceca1d5fe675bcfb6fad11d782ab3172129a0936fe", "2119e18dc0ef616cfa707a395196808e36a1042e4d1f8ef8d2be63b925dc1ec1", "0364b27d7d03878771cb49175a4068be6c12b9645065bd1d5d698f814f306dc4", "2d4c31c392a06bfa596620b8ff0fdcf428c6dfb0d1c14aa13196761ac4766781"), ("11dbf5f4a7204e3c3e27ea368dc908d8e7565b3a631086af139ab1d5975fd332", "2c966a1d7ebe8a3961a81d695482ad505b4ab77417796933dd32679f8e405749", "094d3c133b54088d8e05993067717d6133191308bca285ff68d7af42d0919bdc", "2c2d497ca44ffcbe6bde6eeec7933e7c5dc9b0c9bd6b14aab33bd896db8166c5"), ("18905476f1936c7719c8e4415ac8b7dcb7b04e167cee793d1e1a1b6ed4efbb3a", "245ccb7710a2f2818381c32b0f7360a5b8f0a39a111d611ec3392d991094901f", "0c8f7f62df17aeada5dd2915c14385c6dfc78b971a3c83f0392806cc19631504", "117132abf7493a25e00b10d65dedb52f1d2d988be4a74bfb26f98a219ea8e0b0"), ("1b8298e90c271c5cd0db934f504fc18f4dc77a76b0e950fcf0685ac7f9fc35ca", "1f5348fd46ab109a03b9e8309fa6996d2256f5b97982af7e2d1d2504c3287dbb", "086d7157f0a2b056a2a1aee48f9eb12eb2b6ed5794306835481db711b3cf3917", "06f21f80567ab658e9e3097b3cebc53e5fb44647f81f707c6f7bd5f8880e6c85"), ("19651aadce2cd6928d1d0fcd580f4e243ca0f5f2427bf4a4cd603e0010f592c1", "05f9732d41cbe17c13c9731df9f8729f79bcb656a560da30b09ccbc82d7eb226", "27f49b10ea1dbc6648f92f458876c757f2f6cb8229b4f55f738f0f24a2341a74", "27f94b03e813b12a2841ef453504baf6badf010f177e9aa1f43071e58de3e4c0"), ("2aeda8638b3061a651d9c05245216944ff158e5bc5a82347cd150da73e4839ee", "2ff5391d392952d6a2539b5855bbc48d88f5ba9e5a5a06442a1cfadce51b1b00", "077830065ad5925c64cd2ff5112738de1e78c0ebd239bf79948070d27ee22960", "0546b06443315358dbfa7016bedf33dffe537ca5e8d46650008c65544d60d8c3"), ("095fcfae821100b25ef0a65b0d6b3aea07fa09ec23d05e3bf3a9e7381e40a20e", "00b630cb049a06216908f724dd4620b83f61e56aa011236ba277c0e5a1d464b8", "023d623460717e15b4048274554e348117e042f276d3499824e91f9d4e46b978", "16d42894083ff298934e95a1e0d7a9d211fc2569223b7fe72acdec2a4eff8394"), ("082e0c6dfeb2b5aa42af3f3956eb8a8a5b4b5ccac5d90291bf86fca90e5935fa", "2ce7230723f9f8b9563523010acf581d7be044ddb879ed09169ee5214d0b6da5", "12ffb6ac6036e4bcb0b93a2bded93ccb610ed90e8b5717c703b035b2db8f0a7a", "0ab65404588fcdd6e7ca12ab7d28a131dd2fd4043d75b9111e098dcd614db89b"), ("1ff05206757a92e9c618bf55c20d28a260e18f57358317c4cc3f9565ee6038e6", "1e7a2aa756b21e84700b46bc2c5c32a76f1358af2478f73b888f00a76a90dbb3", "111e5a8da37bc3bc3b0d213480f1f8b4d3af02033fa3e58a58bb8d6d546a3981", "163ae41a3f544b64f0f120bcad28cd6b4475334ea25ea4908e0c36488a3fb399"), ("1108715efff100cbdf63070d5d8423dcf04fe366ffdfdb70fb5a3bdb67b1bb17", "13d750ffc6eae2fd3dc0f4c522f874442f08d45a8b37bc328aeef0ff67a74e1a", "07a4636bf7f12bb22f93f61a4bf699e7a7ad29bbead0d6aaea4fa3fe2337c51d", "0c7d95eba09320a2e9d0871f7298b795325c212da43a175aa76d7b7e77b29146"), ("1c318de26c8ce87396d43c98f9bbe9c09aeb172a7baf014f7051c46ace2fef32", "1fb555bb7f861d27652c5eea6e61a2102483147885211ebbab628ba380daee93", "1d23d117e515073637cdf5cbefe0fffc737ef4f473b8eba71775a579a8ce946d", "14b098495072e5a916a3aafcdda8b665f0644489102c5f7042a1f74a5b3f5e99"), ("2c7cc6b3b91e295a68296a7ed910bc16d41402576b1589e27594bcc1db105a6e", "04a2d75a26074aa295f416422e35e6aa58efdf8d89e67893f93b9bfb9174e2b9", "2d703b598aa19bedd9cf1b1ec0977ef9da895d0dcd1a7087aa89306eb25fc2ad", "2318bd205aa248c52099f0d885f5c965ed758da45f75471e74146181b38297b7"), ("232e81ceffc8a2c79aaeaebe6a5b521f20543def45422db24263b5e2cfed65dd", "17f0e6a37b764795290105dafcccc780124c2289a11542b9833fc6ab7dd40b18", "14b0f045db50a8fdeff7288f67ebe3b4c83d0421955659f0ed78e7acc07a434e", "2311bdb14b42fb556404315debb7b80c80a4b4e65ba0c7d3110a9afb199e680c"), ("25d40b1c6189697e937ea242f96c15c6dca7dcf96a959f09acb77fa3cde23252", "136b5ea661774cf26a49abac6aad9275918c46b82d4ce5d10fd7cfb0758ded83", "2b1d0e07f48fef3d066cc358807095f4132f4ff762c8e62161cbf42afb98e0d7", "1d4f5d143bb6d98b4cf2c2b2d30c00013d07d97a170959b88ad1c3ad5ab137ea"), ("08a3af308f7eb3db48f4a55890c087d8a70a5a4b5b56cf3b6e720fc214b37da9", "2d0daaf6458ddfe9a56ea86badf32a298295af19bc72c6130a340b8d6778dce5", "147aac3d1d6739c1a751d7d0dabdb12ec53352099b0d257900e1f8459ed2b1e5", "0cfe2a0bbceb8f2b97eb2c929fe0a28801578df0bb9d5e248c6749695d6a505d"), ("27235e9cbf434915d1ade0725772b01db4f2dc76e91100c28650f308ebc2765c", "1ac1bbb3e7dfa54ca63530edf14675bfcbf33a2178899abdd5fc6da18ee19b30", "13b5ad667ce7b3e580d9d0c108af6d1700443ef35f64839ab5474c5c45f03ef6", "0cf7f020021137339370bfc16fdd3233c39d893ba1f2406e72c13b524afb91a5"), ("19bdc7793a16de189da2febf8ebf85b13bed59cbc27c3ac8c0b75268bada1408", "0cfd7a1a883700697c15ce0957ae4e4af94629a787e5868523c587e7a3d1a1f7", "272161dffc1f5e4bf1b1d68cd0563b2d9bd35d56bce6e665e810a14286ec650c", "2f4bc9e0896ced97bfbf6f07f6e4843de1e502888561516ee80345b50c610b65"), ("01fe2ad70c00566c4e723a6ddf0ba087aebeddf33b2eecf3568ee23f9e58c531", "1dd199346f995c266253010ad3eef9b5f02f1acb0515a92e310936bb7efa2d5c", "1f4a7996ae9a443fbc4d30e4be4280c462ac619425a704b8eafe29465c197314", "1e4c9eff8ec514ef3521b2f85c3f45de170747979f5268817028f2db0092c8b0"), ("076ba829c40b9c1f2fa7ed966bb552de5da9969834d608eccbd18d0e89dd59af", "12faa0eb884e0752ba7881203d8b2738583333694ec1c7517274d334f836a850", "2400c09c7425982f393884c63599ece6a6a9b491daa290315b7c30eea33674bc", "079d3c1310bba45d7e904049e6cbd40d2da3d987840803a0e375040dacf0f4a4"), ("2f4388ae3188084131f826391f2055c0b991fce571e584170328fa5bc9bdd701", "190fc5c50e7def89e23b0857fe35260e686c9d7c90a3d63c04bf197af0995f67", "0289836f4bf9bf57795b8a5bb0d383570c71949a5899fef5295318ac55c7a8cf", "2e2e2d6a6b9855c0b7e4449198f8d6cbdb58c2df5e955cc8f21adcf246c511c2"), ("203fcf77b765e5cef43dd45385a4177f928998f341a9df84ce98d89fc12c20da", "2c687300aaecfcc5b00bfcf71a602e73c6441a5350717318ff84db78b3969b9f", "0920919e05ceb42c83a6c7d8473e73273f771f56f4d6cfa08269747f2094e630", "19ae59e70062c750cb0a95260673e38ed8a123aa0e775f9d357b8f0193db91ec"), ("2ff5ec11cd9fa5a18620fcec695bf15269b754659eedeb47e2bc43f5a8d54b6a", "0abf5cf5c4298f2bf107fb03059bf1c2e871153a928cdfc4693f89dd34f17bb2", "2e43de1e3a806d880db3f9b82120b3218515665b2bde19191addee655035ee1a", "284f2e46702708679d44e0293b1da89ee5ccd66a4d54cece021d66e7012ff30a"), ("0f652e777b11ce6b6e4c0714331d956df7006dbf3d87b490d02b3945624ac9b2", "0a22d00cd6f86a57148c9bb9f1e77a6fffe8557c7024d2da282f392c3ebd05d0", "14562b8a3a1a303603d756e7e00b10dbe7d048dce1d2fafda03d6696c73b2264", "230303b1d62d0dde3ecdc0994b5e1e8034a59b9dd93086266e719f6922f6c499"), ("1daf0ce401962ed0c856a1b5926befab47404127942e9913931e3267ed506590", "2e4e703465010a37d0326ec2a47ee611fb40d1d60af9d8865600441ab3e34dfc", "1a4eb731155fad2fa5d4d7ee0fdff268fa7a8f5fefc516cd1b3bed2d05d2ca1c", "0f49e510b97adb75c4a41a45050501a61abc1f0e3fc1ec633479743ddbcbde12"), ("2002c4468ad4c9bf8d1891e3ca2b145d97892e797ee2ac10a3eb3212642500f1", "067fa5f1a4a9d3790d115138892188479296187721dac06865aa02ff1de60c34", "13fae97880d7aeece1adcc1f922afe19875df75d3dbafbcbd3f9c03bd2e96542", "00402dc2f34697488ad66e7f29e4cc021111c3a04dfc8a5efa1a67e1dbfb7044"), ("0bcbc45c2294618c92f469e5968cf38b29dbc0f38c93ed07c1235337e0ffaa3d", "2f95fa14e0d6df338becee50296cdb20d3934dfc8b5ef7d11215abcecc62f283", "278d526d481f0fde47d573e71ee06fcf2eb31b481649e64fc59a6e81b5a6f3ca", "014ba787d711f14b09fcc9bed9cae5293a1833d16e6ebcd982a4fbe3caf39ed0"), ("1533ec668bb7d7c7f88d76be6a0fba150ebf36e8ae38551c33bef73f29674c61", "053d8a7ddc1ec741f810f725fd0abb16614cf7d96ff2cf6ae716ec3347a71ca2", "2dc8cdc11cf4d4912a029c490e9c8cf6e6ddd0c4a97d3c3e62d967e0ab0d095f", "161f6f60b0290d3244becabfbfb0547b25c7ae9bfb1fac865321f78685da56c8"), ("12fa37d4b478faa81cc865d414d53dba02b041a5abfee5941566b37334c84988", "1bab76b9b42a6b06b5ac730c4f650a4144cec7180b2676e5ef14f60f2cfad4ec", "2b60b80eb9709091d8752f830f92bf7ed5f9d0cbd6293dec2f8b1fd127a629c4", "0f9534dcc4ce2ac4231ae8797a60817161fc7514aadb8bf867fbbd0b8ea2526d"), ("009f59a3c298af23c9a93828e82b3871877b5aa67059bea7e908aa29b029564a", "157e4da20f0735cd70a40058840709605820c1c5f26b7f840142dae062b42c5c", "03db197ad512a8bd8e911b16b79ba00c6b35ff5a4183b97e6acc0bbaa167231c", "13e1b80c0e864703e35031a4abb5b149d0630e3c7f53ca439a0aa37e70c38622"), ("0eea3a8c6db8c800cfe5619e2d46bce90c664a28bc6e0ff5305ab3575d2e3556", "1b6e2f571984bcb11809105104b1704cd59997be58c8356300bbfe2a200ccd44", "129b724fd771596eaddd58ccaafab488b75279fec6cc9478ee079ab741229b21", "0a19cd237225f2230f447eb77bc94cc0b788b95150bc4a8e3091c3c5e8ab6604"), ("1650bd14a6317cde339c644935af94454cb82adf9d2b23c81470fae57f3ca5ca", "01a2e9a0cd5fe82ef8a9fe40b72b359d3eb64881a9d2d77d685e183f980024b2", "07348e9d9fbe1c14df8a573e261ee6dea8cedcd6df2a49e606d607bf3ed957fc", "26f631ae6a865865b1c67b69026163cc90776b411d816018da3cb6d1cb5022d3"), ("2641c087fc721e3de8bf5995a1826f47e425a8d560452aa93e170a807eec5f52", "1d491ecbc40163e0f15711fc894d860313135ae9b84c8910bd951662b832306f", "01c87ad9e6ddaa827edd7ba83d26a7dd5a6048fe65d4665084da1efe9d1db60d", "03fbb632868f7cc6e063a2cdbae0c56f11ac9369e6694e1d13cd3baebc2f1b52"), ("255f95880b0181875d3ec84fc66343f51f09a7a496faf86fbae154636cf8fc15", "02ae8640a123d2b5eaaa03089980fdbe4746f657aa0b858acaca90e744062047", "14537eac62934347229f11597e4a0573b6da35d7921880b4a810856186dbeb8d", "161c45b9b2714e463ab3eca4cd59ed995b2920fc6e97f8d59070ab1b9c27fb1b"), ("2b85428ede2c58875300b1d86403c25c8e2313a2c2418896c118c0b30515e82d", "30104511a957273d421687d468be20d98fa57d95d06e1406c5240f484636e85f", "27959bc3add9b63458814833fab2b60751063c13bd319478a93b52ffff4d9c90", "2f18d3bff455fdfe07c4e1f74a76803e39640a4cdea6524778d3efbbc0ac2a80"), ("2e28f88f943b297b892032a404c314b18e9c7e5e654faf1fadc8a61ae70e12bc", "11216231caa54213605678a4c274d6903286b47edfa53df788ce8c4306e9ffbc", "0fb132bd8a3e913f98376dcb551591880573d73d422a962c1ae01361ca30167e", "04b2ea5a2089ac32f7138ab3cad455dcf82a74d89d8b4042712c146de82a0e05"), ("0df265c46262c1d5dc85a48c5376d8d8c1459dd97896457ff0b5709f477cd99e", "214e0ec66c12d5647547ccf97223830d97d38d30d35c017213fd676b57af4808", "23134196d63d76b2c4f0e0998f05a9fb1edf4711e054d15c2d65193d34ae2d3b", "262c9738df2069d81bf63bbde85daeb87d0fcc3ff27e81cc1aa93a0458d664ce"), ("1eba84a41edd97dbc8361bb7061c3b9eb507ceffdc88a2152f066dec07b3289d", "211c69315511b4ad7928555b50d950fb6fe2d62c0768625a19df7c873700b239", "2ce1ab97f400d6509c1e7309eee7a57b54bf1d066e8cc3cc464929e2661eb9c5", "1b8705f0f18b77fd5bccdac3e84ecce6cf925d3134c518581af68929acefc691"), ("088bb0a5afa8cfcaa7667564af80d86d6ee7ede500903d7c3b42b94c5d5e5339", "1404de81c4d061a82b1124cdbf999ed035530bc30ec3e1d2bde5d5d09496e927", "2a2c4cc3ef859f06335131a84c488e02d3ce2f15bfda3d2b003f81a366cf48fb", "10b871c3c03612217f6f3699b7132826627becf4b7bf6f18ddc2422e66128f77"), ("255f3695d921266213e40ff0931c0497bb863ebe8beb451f41bdab21fce3363a", "305101bb21aafe69cb42b39f684c9b80673f61b04d65b9a9c60e21c3b653ec4f", "0b58ddcbeecb32d08857877448640a1e6e91cb617d4694cd6ef3f6094ff43c61", "0ea537291ef0127b4b5686d049bc1f767d9dadb3bf3cd2cd419c777c46eebddb"), ("29d144141636292db1775083aee165a036982606241b71c639ac8f5db7977785", "02b9410f875392bcc48aad72f35af47a6ea05d16b97320ee59eb74042d19666e", "0597777f53761bf1559bec74c3c7c1892613ffb27cbe142eb826e9640b62474a", "298c4784400a5a8bee05134c705373be7d7eda387d30b9255d34afcf4dc5b5a9"), ("04b46e386a5fe4ce5323de2a320a6736b559c1039b41d84f8b313c22e9d576e6", "0cd698532b011cbadf89f6a9b32f5dcb3a4da13548e10aa94a17d6f27190ad5f", "08ddc334002b464bd727c7df8034dd7db6fab146fd9e1ca6cdbe2d1b04c6591c", "008965967e0f2bfc532af11a64c7f021db5cbc33d8848ab623cef687748780a9"), ("124d40be4a7afd5844f64d657b7fa9289dab0d51ff0c87116a37dbaa25c07a5d", "1f943d6d84c32bc7f033f8f147f853eafa6d8182e6bd1ed98f709877b63c40ea", "1f58f61378a1192a02424664e415990a495dc2a507e8e12fa5ddf96ddf2aa46e", "110a1d68e9c1d26af3964401e81d1a26be799ba206ac20ee90e94a79e3d40e13"), ("23c3d867e9049235bcf003f4c75c280143c101341bccadb4ac9615ed65ee5c97", "021ec71624b9567a94c75bce88829814fb2fa16a5807d8e135a7a7c9e4651e0e", "09703ab92542d6f819e88b2e21ec2c6e5fd0a766abaae5a8d077d98a8e81d9e1", "2972062e00b030dde5a75f9345361fc8bde098fdc986fc0e9018e01607a08b76"), ("0064872464abd7c716501ec95ef452e2311b0717bcb88dd7a38f38381374e051", "117c35b0b9830a30a695a06bd4d3a4c6398446f0053e25d57dbceae96b539a97", "0cc74ed34a5972bb3ac6159cca972a20899177eb8730f271f5d8b17d67944d36", "0cffed591d61a74f7d429b8de804e0f418595622b7d9f45ab1c97545f9f297b6"), ("0f1a2472c19876f4eee375aa54d31a425fc15dcd1905b71955cb18d94fe7974b", "2255bf703aabe9758ed81c345387d34c56ace7478980df3b6be518f9eba776dd", "2952e1f63e97b09655d1b768e764a2e6f0067b74a08329dbac3fd23b99503a7e", "23bd14d300f2e95715be94580d6f02dcd46dd6b3a04fc6f8c3f52cd8a11af350"), ("043f601279b3c93fab553a68b0d47483a9b9dc1965d45f9cb4f51103fdf59a8e", "2ce8615c321567fa36e1541801cc48bb8801b58cd09bb4b523f4f22902293138", "1fc13f825f3eb89dc6b2ee82aa7b2e6b7d52b9c6f4db9dfbccba4819a99ddcfa", "1809e1ad1f881715b837b0f2ef82aa289a6ad037b3c3593542f3cac18e120d03"), ("2015d7836acf100575d21a729bcf5b1f764dd3ca5583ef0ff6d573a6daf471c8", "0fd896fe49b2733b4551ae7b10f30b5e79da20ba7a4dbeb30db24e1f7187ee06", "0ffeaf1a2c47903a55580837b7113d8ff0b431259967cb5b31c0049111f41a08", "005f55a97ff3222074c0e8d863bf8ce99777d77c7e188721e94770461b500ab7"), ("3013540591e51cca20ad1d87cf4f56b3dcba11dcdc970f2585e4fe91931bc4ff", "003ae06d44b4fb3a6c0fe156fe62584787d48919bb1bf9d0ae015e81c2c2585e", "145237779568b5c5addce9b6f25d3a9439fe2e3e3eb629fc5a2ee318019048db", "118b9fed74f5001d388db7764a40dc84436359afcc2b822f1ed8da01871535ca"), ("19a70918da4ab864cc59ec081dcfef0da2633daf254d75a5088b039acde58c29", "25b466b801b3d32ee2490db401d415784d976e80e7d95a91622637a5287e217f", "013b7fbf2a47f8aa57779575c14a8865ebba8f12a843443e57acafebc663e0c7", "21cc372926b1f08982eae714939d282e4eb07c151a939fee8356629bb1c81331"), ("16c6885500cea80673100b54f695b857822ee69a7c520713e404836b28c72ca3", "1983ff9bbca4f54c9d92706d5f2ccae178fbf8d2e3820b26004c2cee5049e70c", "262666639fb62965d7c318615cb965db07948b08c542391bfb46386bb9a815fc", "2a726c0ddcf342bfd9c96d98002d968850b0ef8393f051a33db1b0843c03d1c4"), ("2c78ef5519ff611ae4d0a61681ab4f2e744fcf96e845de290ea53a35870d409b", "150b866218cb3c080e7e46ec329bc7b298d440c62b99e2de032217dc76481b75", "12bcfa8b9b54795da63990ada19e7a5ac456328b6a6026c6429846f36849e6d0", "0ca34fd8cbd5d6365c2dbacd3be6710a661eead4d5216f498ee04214fddc1b51"), ("08caaa4414cf6bf25ac09f5dd852c7aee7cec3b9837e612039ad5d04c3a08f87", "155b00b85e253b5145a0b4cd3973f55faaea2f656afbad4d0e065103bd825b35", "2fe64c8d0f992a49820607f9bc1d744166896b5cbd064e345577eff9853f8c16", "19582c21e4e148bd204d853a5d70584a640a1cdd9a3a7c3f7f4bcf91822592b2"), ("1d32cc904444055788df516b3a059ed5f8cf80cac36e517d5af12a510f5d57b8", "2384c722e201f29abf6b1fcbfcf3f93a26932a02e5fa343613ca63c41901e5e0", "223fd915a8b636a9dc2e7174ffb0f08c6eace1385bee68af63a87080dd5233dc", "11733a25c314a608db826caa025dfeeb6b6a03b5586f5fb6c4e8f678318b4b8d"), ("00323097d19c1458ab44c05b65c6bee99e8d59fba11317f5f3b6555292d22f48", "1b2f22e09be79dd8a7c65e54676f318f3aec8180f0ecf6ee8f8e7335951f14cc", "07954fbd4de545a09597a07b019db8755739b2d941e50391051c96340a1d1a3e", "2bb8a175c3d7f6dd3c183fa1af8dcfeda6152fdeb3e9f01e63270962cf6052ee"), ("2c69eecbd0fbcab708c6d345ebc4217867ce67d7082b2fbe0691dc3f4501c124", "2547ecf6c3617df29233f3974ce3e0fb5b0d2c246c11fc41d46fac1d551b0f18", "08c7302f0c6964111f62b7fbed2f47b2ae1e452b4bc1a4190134c94547d5070e", "1bee79401b5aead8f900e94abda507388a4958692be9b026400f98f066a14152"), ("0b7ae32342807166702408523ced6d8fe1ea96d9ad24dbd25cea7def633a35ff", "1df06e977b490baa949893caaa98b7646bf55cc80dfaafd08644b98e12f814fb", "26d2852c420e67ab30661537058cc0ca754559759d2d5b8593a4d3e480e42f08", "071ccdc67ab0bde3493cf2863ebe6068684fea380d3ca6f6ddab813f9d0bf905"), ("2946d28a930789af8158be678036705fd3d9d66f2d84730f83de87e394a7e57d", "0645b0044baa6b63ee574fcfdc4513b333dc439cc8c6ee6328c3d19e0c741925", "0055429998b69385c4111c5f1240939425d0bcbcbf830660c862362feb88e56b", "0e07844275aa4e6c1450617693b0dc001b1b328e6423c4e149d001bed78443c9"), ("23664611e6fcf1aee7afbd9bb222596050941dafaae85e2cdf684642c5a662f5", "10087ec037b6aa5e12ac9c5a82fee108cad75091711f37feac963a3690ab960e", "17ccaeac5273a496d1144d7766f05b0ad617789868c659939cee6a8614eb402f", "03b4f0d2a3b975441280a8d9b42b52a11809804eeee621d01d1966c58dca997d"), ("02443d20301ccf258023f7773ceae0272e97486a1df35e5b229247e128ca5ed6", "012b4c4eff220979cb98403beab32854a1d7b9f32a6657af60b8840ff9d307d5", "0258bab0363c7ce72113ff339b9995723a12dd303b3e19b7a5fe5694c62eded2", "00d11f2577303c08e0e8fb9b82ba3f8314c0216765acacb1e89de2423a8e78c7"), ("1d3143c8a7d46e27e797a083c2cb6a312ba39241086d88987df2bef3c4e1430e", "23b76a3ff51186c969c5429147362081399d5f4a148dd3369d7d8eadf60d1071", "2fe2510d9e8ecb489a61497b4704d08d5520bdb75c29644f49189321f91d7cb1", "04e6652bcbf8c4e83fd86d16b37704d8c1515663c95c121752d85a66ffdad4b2"), ("25225bdc682e2abc9dcf95952e6a2ed9b523672d36c81e97dacf4f0dee618aa2", "0ed9011f7d2693691e7f25faf46c3d323e8dc3e3fc8d98f3d35db208698e3ad5", "1c7302d8447849688a0af0cc605f5da231e003564bfad610e21880983877d5d5", "28868f1e1a0fa49c370f2fd617fc9ae1d1a1a7e1f4fb8be48fa781db07406232"), ("08c032486a9a6e68fef13698828431244c4d6ddbe0007f4a785a751855777a51", "1241879f023481cf1f958ad7cf9646dd617a4e795a20bb5aed0400a1214549df", "0921c4292c06a2bb35e33650bcb9bd59bb7f2b8807ee9d72e0408decff789be3", "2fcf9c3ce8efc9946aee92aedae37156b4fb9dcf57f4186abae9d6d10f2ad398"), ("065a95bd0170c1bcb036b092890afac85d55952dd3d3aaf978cb8a6622b6a791", "1cf4155670277393e2a7a4dd46c0daea2a0680792b29e9fcecc78e14aa8122ed", "01e8cf33b4aa084bc1d81481b5e6253af337663ec79bb62024e5e5232d2d54bd", "29b1a6f910b050db82b3a42fdfa238f0eb438c8ae2c50fb7d9e75411330c2de7"), ("17dfef29331432584cae28d37ca6d2b9fc29f2a02c179c92ee94bcc6045ec01b", "2dbd18c15330aa37094547235fadc70ea4d4faa4e6b14ab41ad7f6b039f728ca", "20fb4229c04e70a47b9e42a72fb880cf80518ab939e22a5a23836d204b70fa9d", "051fbee0064fde50824345bfa9a221ea0073d2e028434f9024adf11fc0dd6ab1"), ("16719e4b51dfcd0bdf73359526d4bb182255a2ff7c17638dc343c9a6bfb5acb9", "077a23304b0728ed186b50ebe90658282856918d4ddcb2389301e16ec608f159", "195629b485aa67764a05b60eb47988593606b72c124c0fdf5cf55c9fa702596f", "1275b78395a24e16b435b024368ae0d6dba9d63b3eae31d9773e66e367350dde"), ("1ee0d728c9afe31c7011160408c2a0636d6231515bb5f492b3d66a62d11602ec", "04ebb9973bfaf9149fed14c1588a753ec908f0268a4be3218bdb34df488c7821", "03ea204d2663d3c43a9ca132caba869916f3ada366af0aae3aca3ded6ae95f7c", "2e32cb6a1d18dd50730610c8d0373895373e4557c731aa4e5aaae257399f64f3"), ("07ef41c27d86bf96e6a08774c6de240024b1da9f2bda4d71aa99954506e95c88", "082583200076a71c8536f8bbcb7f42cb0231f4e00d0aaa646a1dcfd4147d6432", "2ddfe9b3dbb06071e8b1c0cd6631f6ab017eda418e759124f21e984887aff6da", "072a26d09cbae876bf06c9bb2089e08442a964efd70a06ca7e4ba0e44464b6d2"), ("0cdef8dd3e0238886ac70f3604dd07ea5858ae87becf1b5fd78ebdc1dcaf8c2f", "273f9aa95f6de640698698ff94fd63ffc275c4ee1a19ba1ccb30a945b2470e98", "09437079c73f0372895015592a34cdfd7db0d530faedbe0af142750381009e4e", "158c91133e212b5bb893f1f741d8f9cf6d68f073769f4215159b1866c57787c2"), ("08296d96f031120733be4f6c09541d26f89ca0821bd3d626289308eecf73f39f", "1ea3f02f1aafde5d032b9ead283ce2973bdbce6fc613b15e5c50b5ba2ce61ced", "2563166abadfc86169620745ba4add1a61f4822a0e1125a571f03dcef5b9ea6b", "0fcd400ce46ca73629dbb8b02b8ae7c8c6ad5e83acd3ccc52b9d5997c4c42c45"), ("1bafb8cdca02aaaa049a34fe9bc6b7aa1656c93a5709866802584f2452cd9c30", "13495b823ada6d6981df73205eaba0735d8bb5715e7a3fe937fbc434634dcfa2", "16689d747b617405ab86b8bb2dd1859c065161c438055239bffc5fb5b6f31d9c", "008645a2b153a8298a16a82d52f49e3fd57eb483ff97c96f96e030b240a3ebb2"), ("1c38b5fac893bc2f661e5aebb95a818d85b3e4370738fa18266c71f90fe15267", "1864c96770de417cd40c343765a40f99154389f114fd2e2357b81735f78729c1", "0ffbee2d3f1f2a0b8820a840ff1bd00160e9ed47241338b5cb11c257c20bc49d", "14ce4e36043431c8448780ccfb3465706348278faf0fbe6b2f9d9e44fea0c3a5"), ("11bfb7695ad1f1810694efd8b91b8af181ecf23dd114f40ee90a07841a2964e7", "1f6836024d56b5065133cdf0989edea9b655084b114bb78171a8fed6036f6c2f", "266c67b56c11cdb28ee9de10b91f36cf7d482c97e8398582fb2e6e059eef03ab", "0f150a8757c673e54a010f84327c3954ab0f7a4e9b345a3c23a9c977a9254a1c"), ("2f86d9ed4d3a7e1e1ea29191cd655e69c7b27e2c96d763676b757c351811743f", "0bc5191817ba173bbf83c3a5105adb455be0251f74e1dbfca959a034ef3575c1", "1a929e303e006aced8a1bea5f4bac0d0092f08ad5ed6b56958ddf9f3fb9f3a3d", "0578587e0b529ab3dac18bb1ce54ba1e6cb1aaf645f0e7f2d2c89362b7ead841"), ("1b588b1723de9060ad1e8671647ee4a8143f0a765334b26a1a0205d56fa6b883", "0d0fd966238353af781469cbfd2ac77f445825a2f686e5ac347f77b5132e0aeb", "044679289c2c0d869b28f10704f88c8365a01b044e0506442910eed6586b10ab", "0572a7c8e23388a8aa40a93e6b0116ad446a5a1f6d6ca004f8fd162f4184283e"), ("1e690c70fd922582667c1f6305349f08360da64dd8fb9b92646bacc7b7645064", "2dd5e473ab0e7ebdc34065b820bc8c117d1eb74e85fcf5ce8ef84a6cfeb24b02", "2ce7e4272e13c6a2a2b3d86603e5574c625f866e6e68d5b6c752bd038d4f539a", "26ea330cd1ef46a427ccf00ea05bf22e079a6ca9a4fda640d75519f9e9377a3a"), ("19bf375bc4391f69f09ab7d7e38a40164dbfe1d256474465e25e174594368476", "2f12816ce20553f832f757ca4bb8c5d29a1cd8569c4c99f52d91c2cb1356ceae", "26534cb1cd8dffba654b3915030063178798c28223cef748e212f1f5b52983ad", "29d136858f5fb93b55ad5c40d608ae92e64e6b6e6bbd6d7ace5d53d60d53c56f"), ("214741299812b7fafff2c43fb2b26e9d016dc7cec1d5439c72214f51e54d7a1e", "106f0aa5a47ee7c448a8c2681fd975645a736acc5d502b1df7cc2ee2343ff607", "1e2166bc1e5ae66f27d67bfab77beb6eeb22fcada5821f4c78b90d99d571f77a", "15ca3e19fc0fdca9e75de00549cca35bd7dd10efeced56aef93a90e8b6e16c69"), ("01bccd08a7d8f535d79e506e00817d83f2413fad87e95af62f592ef7ddfa2bda", "224ac6b3a3b1c8328bad4d7825cd2ec892ff7de90c17ad3a079bd96d068f4f5e", "18f8dae318c8beb7537eee652658c4b020d902d158f1234be30226ac0b337d3b", "067d1ef95222779696e23700299783c3a4072d4a85b9bef479273a551123638f"), ("11787380f457f628c5e692ea21ce1e39b779566db981cf447cb9ac584cc887eb", "0c073d26bac2d9786514be113be3a3f02874e5265ca53fd3c4a2bbb9a76c080f", "02e64d31c9de52109b4b05273ef420a343682281a182241ec6ef6c3b44cc075f", "0978678e264d067515fa7aacd0d0b5766afa3239a76b6f1d47a3dbfdf795d326"), ("0d88018f77d25161baaca4bbaaee591d74e282f5d6ac2e7bf587857e64c97ce3", "19cf9e9675526fee47368d54564178e5f6c5e48a147af43ab14b626df35e907a", "0b434e2240c0cf7ffc53fcfa18822be7734a54c30735a9b22d3b19b9c1ab1572", "103d15abb37b483e9085ee7f40f1a3639eabe23e6cf79175dd021fb88dea20ff"), ("021ab575f5dfd1965e9dd28d70a5ce093b5ac5e18b9bfa1cd27ef31db2fa3a90", "175b085c0679783caf4db7ae361709dd35ac16bdc295049217e5254cdf113206", "0123c551144315f83765feb9fcb812b3ed886d3b752cdd97da8feea47a1d37ab", "100656a6699ec1d3f17f331d67902d565e58159ef4655458cda9a18e805fd55a"), ("06d18e5068f63e1ec205dc26081f516aea3fb1083311073a0ae5b94318be3b49", "280881669de8be60d10cdd72b25504a43ca51e70c520ef25ad8cd6988fb082b4", "171214ca63a13192176247e0ac672ca6ad4ab279045e45aed97de0d46dab118e", "0ea5f40e28d060c009d6abc7ab6763a16ec949b85996bdaaf2d64e7625432800"), ("1ae1689b8545a5106e4e7ff54bb5e4dfb331e7ea6c40fa223698f1ca1845bb39", "07927093189fcc1b5223e0664c5a46fc141c7f5939b72483e8b1d99c894bc887", "2c0012ad1078b806d537b309ae0c0f6439353a177b3c307caf1f4ce146bf402d", "05de2a2bc03a1b37d73e1b4d6f171c94a2fe7f298294da7954d9c83f9df918bc"), ("04a8f13b1626ed85de08ec0b60a0716c0f88ea639311a9a4decdf8b00b802441", "0814e46ca3d2103feef9798fc075e36955b0599e68d7c6dda6a03ca126f877ed", "1005eb7bde864e44e7a76946e7e3cf628ae8b029f3c95dd9bf79955e916749c1", "24d2ca1477a9e804c437503e04f5e2d8cfc04b989ad993b906cc52ef6808667e"), ("1efa01344734f5e0ac2044598ea2ba2a6ce96d0943664e44425d357f7adb171b", "2effd52b63b6b4ef126d71e5b023ab5c0d2e7e6b83ff5c3711f47379042a80d3", "21224f5330651e2e930b9e956de807cb1998b5019bc11ae55da8b74e6437005b", "158c14fb753e6529b7fd0906a03cda2cf496c322134b3598f744a804f352e068"), ("1194830a57fb33303ed104ebb759812e5cb2e6f9e2efc1a5265009b15e8fc869", "2dba838e69898144f1a0f0e6acf2a369173801c7957c2f263bbc63d43755c7b3", "2fc747fa1d2cec71769044adaee57cbfe7e052f557e5d4cf93a1d819a1b04a8f", "10634f84f6a2bf80c20acdec6c6ccac3cf7a886f3e52e950d9940af63cbb45e6"), ("132451d6457299aab247d8ba5b0c112b6098c55745344735fda7bc915bb1be64", "255e976ae1db01b6caf998471a08b8ede05d2adcf2b1d7a62dc0874e4f9afcf3", "208c13b5d86d22a22c06611d82306bd0f9feaf606e99480c3ff14f3ab97858de", "19bfd75d736c5bf06af98f9099ed2223268bc2c40d860934c6f2535a8fc02404"), ("1e6ab20445281e38eb66902c70ddf972863b2fbf9763390338f429ad21007ec5", "10ed19c7aa143705810e57ce8589b7e41eb453834be0b451f595126dd7deeb68", "027e296505884a38d4e54154340057e519d389624f19a3cdf56fb80ceb941cd7", "2e165e33d7fa5bdcbd17445aefb9801eacc4126af7d3881a3abe79bfff06024a"), ("2793bf71310cebdc1af79b707e20064bf328f569e4b22e902be69cb21d268132", "291047467bf9e3e32170e071d94816c0120909c2c3dfc02100bcc7785de14b94", "1ab82e36d02032bc5d17f6dbbe69e6153b6ee09ef1237ccfdc0657c02214cbde", "09774cf813afd04ece61f909c75b9d335d1309d206e5d8508219f0c566bfb987"), ("2d1e51eba1f5d5a055b31b9066f1408c6c82d558a7714eb62d3d075a6641d3eb", "2c7d7ecd99b6006886d7644f439fd94f43301773894758cdd5c8b533e6edead3", "08cab41fdf2cedd083da1f5137c59e194e47a550f617acaa34a24d3861afc094", "076509e1df440ca39f4ab175393e1ea0a57a1c5a40cafcbe970625e109e17019"), ("05772d9af78b1c176fd25431aef27cbc2791c98aa66185270193cb7793806c48", "25c96a827a7553ed34b5ca2185ee726939b1c9d355ded922933fa66eb8808a3a", "28a16f50a3fb1b532a94069f29e4fa039a453bc5f56188364ab9d6a519958a82", "0dc1c58b1c7747c98d06284c3c820862932821386c9155284a1ab86d66832a64"), ("2c8a7dd9c6455c2f60aaef705362b31057505bf22c07029fb87396a4cf25af24", "0fc38c064647323ea2b9b1d6b60204e4b7cbd4534ff67d409e79ed3d9a40a35a", "074fc8f9f70014a83b40111ba16309cfd28f38757364a6177c96cfb3273f8024", "16d313c3eb61b0dbb3c49ca5df033505c44b589a34a4bbec50d0984e941890d8"), ("0106800fe71b010c0855d8fda035d300be31f047eaef7ff044376365f7ee65be", "13100e86bf1f1f4af31c83baf620bd5cc5d9bac84ca6ad5586576e316525d456", "1e9710e7847ad949a6562704f187f4272352cea549c52539f1a0e3e8c069e54e", "301153114a3ab77c5c589dab224a3a09b81920a812c0c5f9ebd20cc96a5fd852"), ("2e4f13b148ddb1e7b693e566961464f69e8a5d3cc9968e53f956b49af4c37575", "2dffac129d20456b7aed9a7a299986e9619312a209df5d5621bf44fd47cd5360", "0843aba91b681b3066db5ab183e274c7665b8c0f5bc8c35218d33bcafabdfcdb", "09d9c8f84d92b21e1eb907d3b3f41fef6b609bcd2f1e35711fbc1c46196be8fc"), ("2b6ab88713aa85d62521183d835da5d96e0a549a3543583422b6e5802ba22059", "2fa6065129641cea74de008eb2f398f7ab4b8fea7357ab91acc0cd0f08b8d036", "1dc1f723eb01440672bb700e5f03cb385538df70a9c2e9fb0b9586ff5078bd77", "27d99e9f895be0315e17177ba850f53d435bdff9f6c6d0218c234499ee5e45a1"), ("077152d5d60be8cdc44e1a27bea414d737bad3841f4e6db4c7f03dfa03a1567c", "2e1c788be78bb864ecd2baaf67b8921fa7c4e7cb8f123dadc52c0c612427f9ba", "0af0c0a05131f8ac09c399b42657c39c0d8e6d3ba8790a5bf76fa784f330e6c9", "1cf38a699517d704e8b4257324226053535f91d4891379f2ec198fae664a58e3"), ("29634fbff5de54581348b207e5560e566034f4436c0ea0408949ac5a6ed8265a", "283ab8c14af11a854c1d7f74b1177d45a9618b9246f4d8fea26134c5f9362787", "2208dfe2d257765e9f23dcb6b714e7bb42a31fe19a27de460577f5f4269ef329", "10f61fcdc5f2a2582c57c359facaec652a85eaca6133f200754015ff485ed183"), ("2a1081f8fd44f121d06a11c82005e9a6232b3a9d0332ba3a3583f56a9e818b34", "2525740b8a0b59ee17579fb0f257b803c2b1ab8a333c4072a43384bebb2ee2e9", "05eda9b37f1c9e252cea3d20bec9ce84fd8249b53958a7b120d652811e316e4f", "2e9419483b999e6a8220e66aa1ff63bc105a9fec5a6bbbe20495f67e95f73767"), ("242c64a650055b84489b4b1df0ce416448c4952db2e0d345f8f3ba323a509c04", "0a96b805a0fe70d88b971e758785307bb27822b8e22794985c43ed026c9e752a", "0de32e7a337626eaf1fc781cd8fc25af674c6cfedce8167af0803006f0972474", "3059b35f91cf5c5c17cc56dc9a23c7808cc752ee9f68d704232d8f077762c12c"), ("2714b43e3a9ab2ffc6ae7c818352eabfc83b718da239bdd6cdd4dc3d1392ec9d", "1eb50366acfeda96b8d9e1f88a4a9fd0429efa76da308def15475cdfbdb83792", "2ba349d56c5c8e7408b75a453947014e7b453695f632b06aabc313afca207942", "25678a0b04a5392c73287a26cb0166de07cea09888691390611ce4c333e38b2a"), ("3055261db7d75b7fce23d6fbf63adb9faa55d03302937e8080dea394fee78f01", "2f6a05aa8ff903321782696b18218c96963376dc3c6091da4104efe1b0d3a0ee", "0715853339446890c5622ecc2a5658a4dcd3e0e9949f4005a7d5853e33a05a8f", "025c1ed82257cf302b7e3a2f845d431d1533382ad3bc17983211a944181c3076"), ("0e8db22c52337ca31de7120023f131fa97474f80d172f3164234ea78d273e833", "0d442bab14747470c6cd3b17c26e550cd332684efecb8ec3d55ffb7686e41838", "0e69301fc37c4be174b27c1628cec80babefe3f7693ec5d3ed1ed5404e444c36", "050373be3c884694705034887429fb643b7912ba5db7ebe49bd1b95c02f20615"), ("2c9f741c45ca6485db9317219959e9dc9ea2f92cd73ff11e59147d9f28d219c9", "05110cd5d6958126aee5833c197b511d304bdb35e01ad2113e609563452342bd", "20674d5ae08b81e535330ea0ad62ce8038d82da377b807333cffc2aeb5d5d5d0", "012e742cfefe346bb5052fed1ad0a51ac74a69648b236edc48268117e630cdd7"), ("080709cb6c509318cb9d971a2bdc9d6e1b008d21096b7d42b3c21f0cd2a8cdd3", "10b47d3d691cd81607ebb4ea861c539b352a9293a1d04f98e930fb2f6663e6ba", "160e9885b7452d4eadb10f402ac5eac7950a6da83bcf7322e54bf5903e4fcf51", "1ab7a0267a5691dbb3d5bc47f885e62cf6afddd600c9915e40557137170eaf25"), ("09321557a69911b27e663433ef310612b61f5997ab045fe737f476c3b325e0fe", "2e969999bf7e1570300e347ba197e3ed9b4d33b7a87129299c871a12d2f26888", "18364fb0e9dee2529e91be3e25e839d43ef1364e6ca69d3645d07060606c3a61", "0387ae2db9990901dd1fff899b336ff71cd67366a2fbcdd1e4b66a243487ec88"), ("2a958134abd4fe3a3463ed268664e767daedb295dfa0cae6fc8ad4bf28a723c3", "258dce7d939b14e5cdb9984637040d94da0a30a78ff5db56a5092b9ebb20f6d3", "303213fa2f8c534d5349d436ecb7c7d7938b37fc51f55b4ce86a194f4e4e6421", "20870ce5070b36ae6c398e810c1be03ab6085894eb98e76234c38ef87af14790"), ("28ea16392b471cb3e0a7e31bf810a729443df723c7bee6e6e5a86685c22650fc", "0b3330f513653a1faa8119da7c28981bca396c860dc8daa67928f279810b2f80", "029764543caf18fca58d06e631481d5bf1a0285c47abb0e3e0193c825372e273", "076402a275b1aedf19d682d79e94a29097c8710d4ff905d0693a2d5cc150cac7"), ("28e0c96ad25ba6f626e832ad5acdf330fc3524d86abd9e41b2ec3fce8e1800f1", "18ea09d93b0dc05af5226767072e5ec853854f861d171ae64eadc9c07b76dc85", "17d53e344b6fe08c2bf45217b143d943465895e62430f2dfaece614016e60e9a", "04154f4ed60cf8aa22948e31c822e569ec8e00d8c7547c1c9de1be5180dbaaf7"), ("07eed79c64bb8630a314bd1413a113759cb7482a188da7c9e334dd707ba58caf", "1dca05d3c8dd34cf70eee1c6c66da4e741ad6a699c7acea19b7b666856fe6ba7", "115c1353d6587a4ad3d3801cf818f8f9109c1dc2ca2c709595fa26658f585c95", "2a593611af4b3f3a3c643f42cb96eee7b01007388f43bc40e39721f9d808fcdf"), ("239eea63c0a1c9cdd477fe1b4cf31453550445a410be6fadeb00eec5074b8692", "13848a71cc7b8fa8e00e1f2eae21d3071fd8f378064726c4ddd4abbff94ffde8", "083efd9af850091dd85f9c1de46cfbbff1b46ea1132bcfc5a5ee670eb1aa1475", "0b2302d886b3a585a8a3354ff1b9a8e4d6634bf72ecdc21bdc21efbbb6379e9c"), ("14baef370571b1b10bb7484161081599ef60344afc6d62a6914d4dce6fa4069a", "20bd3933c29d8595f56486df2de311eff5845df4cecf4e6d645b26cb3670928c", "1b91932c8af13d93bf8d2deb2c692d60b832ff10a6493d8a15ecf3334cce9b83", "0fa1e27d18bc8e72683e092bf8cf65f49558d01b6ba99918a868b98d17292938"), ("2f3fbdbb95e05806e18e7f6ddf13891637cd05208271d81a4d7e09a82be915fc", "2dfb5594130cfd3c036cd57fa17ee901645f6526285f92a9e11e8654a08f5ab5", "0e297b14fb3735be27d99fc72898d67f7f79ee9d345696956ad92accefe02c61", "0aaf6134482f398515a456633a5287eafa15dfc25a680c56bf5465244c97f120"), ("0ab1fe5ceda67917ebf8e92f93e6fa1607ee4340da59070af2d02f199a13b130", "11d197116b868d929b4b6ae0bd847839933f91ee6866b33d33911befc7d5e0e2", "295b019fe8cc484b17d356aafbdf63eef42136d2b259f85186f147f4f870fb11", "1e4735496324c7d5e3004926e2c714885def65713438d5a4014bb23d4e87b3a8"), ("1c306660952888d81f983d9926b29125abbd3bb68959dac24708ac07a92b7d09", "02882be790ac1c2da07554b83a314fdab6ebfe5be5d6472c455b750871e23d16", "0700398bd957a2834ac4922f5e4f6462a92e377be28e4c3cca6723d43668dec2", "149dcfc1830f627482cf08dd5b6c7e361ef6c4d139a04b249c4085994e0588d5"), ("150c7087ef73fcdec6cacb4f17cf5437fc4378d9ab52f076e66680a632f6240f", "1c02b1be3ab0458a5de099795573b66f1ba1e252430ded31b5816f62a1427686", "0815aef041e05c1417e108e0fbef0ffd73a06687173b4716ec6de8a2f26c9cd7", "2b44c719bcef3196953a061f654d15803231632fdb9d1e0fda90cd404db459ad"), ("2994959e1817180cb93b0c5ec8b430f06b56702f141a84c617f06e6db2a1a66e", "283c79acca894ab59c13490753c1cc685321175a99d9e22ca3822786c6727395", "00957e59a118b6fd852ca729565380d947b4c91a7b061a6dc7443e7bed3aad8f", "1efd836a580087b5b7897c687c2067fbc3e1b5705a32abbd3eb49d04d06428a6"), ("17381cb87d3f98f0cf2e489ac66c4c82c548222400bc268cfd79f64d829b09bc", "1a799d66f67c22d492ab28b74bddaddc2aaa6045c5eb5d0b6669ffbfc89bae49", "2184d6406aad1b2294687235cb92ced993e38b5261af915d2e1ce42865e9502b", "005294278573eb268c40344dbb8058415b61e49d806f53ef3035635c18e0440d"), ("0b169a6f2c1717111f8424e04cb6fcf0e5f0dd7bf4fb6ad469af73c5ff6a9832", "220a6561f18ceec42f503a68f22c055d21dd6ce7f34a5aeb1ca3fb1506931858", "1e274741bfba1d0e5ae2a608c1001200f6836a12c80982cd3504412ca609b1c1", "24672e88ee9104d8ba6f545b41010280d3a3291e1ae9b07d0eb23066e5979ad4"), ("2ba5d69b50e5ed5f76777b6a79d272b6ac559d02ec941ef1d522c48f6c0fb6ed", "295f0a557695582bf45d49efa10051aa0b27d524abdb93ea3771d06157559f7e", "1910241bddabc4c2e5ae7a59a09d8a644875f6ccf54a3a88e2439789f605cddc", "18adfc2527c5b695b97c32fb441964f3965bbca83f006a9bc234e53f585d7269"), ("21ad7cfe03d1f274312845f5c0fa78a7e8a777aac0dd3d13019a3412d7418633", "06e57735de6f93c69c1291dc3f0b202eb5bbd3dd9400b63a5bd4bc171196f281", "14aad8fd65274c8d9640f273d176c6f2044962e0c5a7e09dd2ce1d3bc1322ac1", "2bfc9cc95e2e2a4adddcaa7e522c9554fd1782536f0b5986a6f106030f441b96"), ("11f53e74b13251770e7797e5a101ae94fd9b941742e90715862058dc306be973", "2509478f8a22373d1ade5934ce0d82e0be2f76856cea803d091259f09cc67241", "1c128060d64304a0cf8feec9febd6ad18b0176d3698b1d6a1275ae63b72d3ef8", "275b2a80e0c84c4ee3bdf192f48261c91361af6c7bc091173a72e01e123ee652"), ("2daa6630360c7c11962a8fc9820cd4a89d350b580a2c5c1e5f19513942ad5ec5", "2616c0107811d9f5fecadf161a0d6a9ae38044e8ecf0ce4cd703c2bdb99d0541", "09ff98ec57c9b5d80eaead1192edd0b8d91e6bbdf1d439a4596c68e99343667c", "00902c5519ecf7bcea1e0cc81628eb4a5177cc407fa1c80dd8bed454f03e6ac5"), ("0f8893311b35dbcb23499a63f18c11ad686ad88085455629f5adb91e23a98daa", "13b012f90140e2cce461304862f642e0d52a6671ad81e47bfbcf6a246ca3ea66", "04869b14d5d2de55952e8c06b3246d416d18e55d105d2da56f51449286a4a843", "23e886fc01620a3c00906fdf869ad7dfa4059d6f7d362ebddf633b86d583d0d4"), ("10da51b548f271c4d0646f7821d270d4f88dd5ba065f38b3189d070812fe28b5", "1ac95872ca6f884d613ccd5cc21be3ed4875c9a830d4aec5b0031ac8a6946f8f", "0aeef215d71aa0813775dc3ebe174e1d04dc5b4482cd0f6a0b719dc213319928", "04b0349841f95af51837ab939a8288d44774d3749179f1d7d5880c388b19ec49"), ("0c66c453ec34bd3b719c0a02dfcc4f2ccebe0e018abf17930c79ecefb5e1600c", "1c12dc30558e31165187f7c38b1ae2bf5df6d54104d3b6d03ca1c003cd963cfe", "1705ecf9cdd812ed60f88747482ec6fc049e32e142d7b977eaa75bdae5be0170", "2b1652b50d53f8c2b2ef48a5f33172f3155f6c5369f7e43ddc7068233c568715"), ("10614fed29b987173df3b57c16b5df5336a5e52e5aebbeebac157129e9019378", "18385741a011026f112d0d4b24cd1e66ecf279f1a1b1f2e323c66aa823a3b230", "23117859ada5cdd8704b4bf918bf22672658f8ec3a2cd57a7646729d33db9de7", "1b7f92c84c0ff261679aa84d5b4c2e5be92d77d12f4139541515133810a5958a"), ("2c3d46a2a48635033b9b752fd7a770d014b19d473afc420f50d8609c81fc453f", "19080382a997ae5f576ac07f500a256b85542adc7a7b12cab35c7d1dfe4459ba", "2a80d9a2f821af43e8ff3ac0617ec7f65ba4826152b0e93460d4813941753839", "0ed06cda135d7584930411e90d97916374099b46fe62ac6ca8e6383ee6593fc7"), ("20b2d0997cdbe8736655d3a8a1b8c1542bb13a36ffa820bc670af1a317c1ba74", "297c19bff8058a8f0f43376f8eeb31a199293200ecb7aa6d53b0658e3c201908", "2e3616d3fd1a98baddf70d9e99f3fd069205ee611836d643e83651f35232334c", "1248c5ed46a67beb22c47a77e527ecb1df6fd6ea1e254b4c018b8a7e050b3b31"), ("2662e67a49d3bee306f746899b4d13275c34e6ac5f539ae666c878c03914f7ad", "28984c3c71fb108fcc7f5bbd61eb17e4005c73a26108fff864921054a0d21328", "258d6d5e6ff8219a026abfbc39952ff9b65ed0a9a2b51bb477f4d0a706081860", "265900db629c70dd2f6d9e3cd5c84eb83e8d62d59c9b1728bd9d0313952bf61a"), ("00fea33ea2fea2886ba1ef26a3b2db37f2ec15ae5ebb40b9d29e3027cb1a3571", "1412ac5011c119aa8cb48e4e4b654f1dbe3bd61c7b1af07ad8f27a1dd7add10b", "20c67996ac7e21ed3d02bc5eb28ca8ee4c45b477add853a73b5e86c9228f3d83", "1efa28c1e1d4ef722fb169566b4a403844ab767ce1c6d2671efe30888d9a30fe"), ("2ef2fd58641087803e888424cd68513d2f7438dcfd1e4af5fc7a9033feff269b", "1d0fc6a474c7ae59adf3b7419a93accb38bc0085bd14dd058675c05a61d7bc24", "0b59ff7cdad6efe6539f3b767a7e5d9ac62e79941ed0abe6687eb7e95e2befde", "13b26e23e57315dc04d8e12dc62761fd70285ace7bd64a4c405e153e0aec903d"), ("1eca8e081df710bb0b01f6fa22508ea008192183441ecfc6208349f1478353ad", "268d72a922a5564ad325670144b99055dc030ebbd144710dd0c2f479c36a2ecf", "19c5f2eaad41341538930d69b687ab8deceba62f60eb8e4af1e366a472159f3f", "24ec93eacbc0dc34a6bf338bfbcf7d568ae3e77426d1200f40f5515adcbbc7c2"), ("29379c7ede5a9d9833b4a5a5671e90a6b40d9a2d95fafc603b551f8f200f1e23", "05d615b1fd0f583b8f7638c8c088b45d1c236119f9216226651ecdf37c380f81", "1d58401456c146cc1215712114c7d630e9d577405dc32644cb12d355ef744ffe", "002372d83ad45b822b4782c779919108ebf63449443e42fd47f39527a15a2373"), ("1ab342fb963fdf702fc6af5405b7455528c54e4c8e51bdb8db895ed603ca0e11", "2a98e09ea18ace0afd3599a8babbc14f795cd3d47c523bba6cf63cf0bf31edd5", "1c07f832fcf832a7cfc59c9a79f7e93d9cdd257ff5a38c5c16aa4b9c41c5c71d", "10e7242eeab5d75e996f9fa0cb899e8023eec0c06af758830c736a42c7177c5e"), ("2071f709c1a3902bd83bbacc67be0d6c1541e2604c1efbb28b342622dc01c64c", "01e5f544a0c76179fc1d87f91219b61ce1b46cf47b0120a73c19ff7236b58f1a", "022db332f51c88b5885f510784404b657050ccb53cf8c93b9f614ca24cf26506", "1654d01c29eaa5605b8ff0da290dcab292e882dba4995ba10c7337b3eee5ac96"), ("1541aae68263c0994e569d810a08ebaf41d4f7ea7a5ea99e16c9a3f79094ae3e", "0a59e7c1ed52d04f4f1605164327144370d6974c2dbd359111c1d97431228399", "1f4c479af73262093df25d77862adc6ff763484ab5b524f6a25c0817405fca15", "22ef6d863cb06bab5519d59fdea14a259e6bff208496cdbd52c43b9827360423"), ("2ea990115d2bfe5304f3fcc98c2cc39d5c1d1731b39e260633f3249e6352721c", "1084218d1aa79986982cab8e7aa31ca507267f973518d1e40ea7f51d990ca9fc", "016fdff0b0f4b5e02d510d92ef33e157986e38ba8c12b3f2e67b3c5b859fc961", "0cfb1aa0e97d69df4774347b949a396b4d7655df78314beb81b96605deb74548"), ("2b6a97cf7d2f5040543604337c98a20fc6123045a9d284bce08203ec50cd914f", "1a5d523fe8c8557b9d95d29fc35dfaf5b91d511fe8d47b6ba8f7b5386e50d577", "155d1a1ecb2dd113628d6c2a44728375c265915a608b16ecd04eb85745a70dd7", "015d5061a3fdb6f7105e60aaafde1462d9849112dc62e491c2ba84e26095fc7b"), ("035e5a40e7b198dd5d25baccc13824747f3a1d8d75944426a0e56a2418ae74b1", "112e16bdfe2f704499408cc318d512b31c66d1594cf8a845d385551f57cce34c", "05a3b8a5654e03a783a61010da0db28fc445e4a53221b6628cbabcda6aaec4db", "273561ea35879561353bf8f58ab38310a657c1ad2b217d04197c313b4ef870c7"), ("1c17e391dd4763c972a4634aee8978cb20dff0d2af7ec1fe77909e67fba42b04", "206f25edf5accc237c7b95b1db98cc57ff7612fe93061c6287caa50f63e684d9", "2a07def6d986ac57af603b2c6d118b1437c33a8e268cc93e70dc363ef2e9f167", "19d3704e36b9f50e84e23bc83cc81a575ded5ea0ce3837a24e3b6003ef926ebf"), ("04f03bd45e65debe1f7333c83959e0eff5b2c84aad38c0bbb36a526327a580e4", "262b39e34b2f248f71eb32bd871d0456f4f07b2c4fc0b9dce7018747e2791459", "1e12d5e5d4f907fa66a9186dca6e2cab3aa1a6cb004a3322ee709ba357a822c7", "21905cb578360e9412f67f3ccbfdf70a53c55be48005777883ad4122f6e4155c"), ("0754855339362cf5d53d483ca8036741af3861e48bc740eb3f1ab8ad15b38811", "02689789e1bdcfca6e64e699e613deef001de5c224a1e8d0f1a0ea58eda1fcc9", "14e61ff1afc6bb2e1d72526688add656f94e4288ae8098b84c3efe2a9bea7858", "186d614275781635cbf04dfe2d3401d2fdf12b359c142c4191ff6d3b2fb8183a"), ("13338b800506695a10004b806e34b71e82a611fa50ade0f0042fae4bea2b7e5a", "2b9e02757850bb4b7cfdc5b5ece1ef04d0cdef640d726ce00076bed9dc87f453", "050bae7128fd94cc8a5252782a08b2d93177486abf81601547640b9e8366820f", "2fd998f92e049e3b5f5b3d803150bbc1e752fd35024e86fd9a7c4b5d07a64b25"), ("12a5152e703958592f540a15f9ea7c8f5656adeb5b6689ef3e6ac4f105ac0226", "29b62a0a587049c171b971922af22ef3687a6256f5116a31e4623ca3541d57bd", "16bf327401821681e067ef46ffe4d3ce445946209442645efabdc53b4c118536", "1cb149d08d69eb93d96e68b5db50fcad28e266dd8cc36fa0a6cf738f98863be0"), ("1c64aa0125b1ef1dea5d3432af478bdd20943c73175a5ca1515724a3458b1219", "1afc12cd7e85544483a90952df6a7721cf1b3ef7083ae1ff6192233405f71a85", "1587a504255e3ef760a4ccba83a169898272f3aec7eed4bf1f444add841db8ac", "2678877be81d1a2e5681169ceac3b64be6a0041c91ad6bce53735aa79205452a"), ("17e57efea926028089306d53ad931fc4ba881953ba2d266f1e565dbab3383dcc", "16a9dea0357853cb70f6729112361156e7213d47f924e667adfaa49b5577b8af", "1d54275f4e9910c6d114fe4e3e3a9e494ee3275ec9e4180df98d822269cf5157", "293c79ae238ae663515051ccfbde7e1e5d208b03c3c5818dbd457c0e7329a22e"), ("28259918190f2d635ed61ed6aca3580fdbb02455da2aaac6759509c95540188e", "2cc8f1676e5134db5d5abac7031987176358b00ad49f47672b4dc70f057010db", "1ae7ac6beb559cf060bf32ffe8e2aed7ea808daa426146045d6a17e8b95f8ecd", "20193875c7f20a32188fdd69f44d7ec89184524e76c3905ff0130c883a3d4e57"), ("0646560601d71261da6656484da4b8fdd839a4f1a76b7fb7bc5ae2c7faa72a9a", "221cb4ea44d6aed58e2eeef10a69256c358de739d3461899bdf6d0d7765f4345", "116c70f3cc55ca73bd9db581653c3695827d9525ce143c7be6590d3a983bf66c", "1a3406ab90f87b53e9b9cc068647a12dcc7068d71bbcfc5ad3878e833a0e848f"), ("2fa9580999f14f917bb5cef794041b1be8aee6fd8d37a9fa0a6ab4e7b05a5989", "0bbb8248db68112449fdc1b2132162df64e50b237c50d89bb84289de0e9d9d8d", "0661219e5bc754e3444833219ea674a3e0f3673247ea1368ddea03670a96a502", "04578fdbcab4acfb67ae1bdc57b630a36a2a4b7850058df174b45990c9531b67"), ("04b73cd8065ee3a9b1ac4d5dc6c3da0e92f8f430a0443db658db6af3f03cb74c", "0a47efb3ea7f7c0b8522e0602d21c92d5b3ad2cac0fac4b5597fb64c15854609", "0fc5b2938558ff0a21c0edd28db593ae913e1e120d9575d7d595382dcb5363ac", "27cc47432ba98adedd7db14803432c7163df446ec002d060fbda090ac67afbe3"), ("2043ae910c2f5f991893bde40d34ac2df93f381736995fb1e27f5ddc62cbe452", "0348f0038b3f8577f2f669333a44b7d02e64d507bca1329b97dc59dff872e0fb", "21b57e6e0f66bc89edc49f1749784373d16eb53ebc9f71b63e709d2d6736ac7b", "0f3d5e8da727164615da0afa8889b9dd4361e206f31bd7f1033ecff675d1015d"), ("018505c289e5da8178494700f5ab9c162b0f7a9e7850abb678f9998de5206722", "0e8670e36e6cad22fbbc77ee1724f8a60efda9bbd91f221c11f159127ffd1317", "2fcd73558676d47e142dfcee95475acc7635c82ced2c3263605432c7709dfe6f", "21099dc512e8d876bb01a6580c35403b47f01d5127bd11852fa62cd52fdf65e6"), ("15e82f44d0dcb1c258b2403aeb57f9fd2e5def95d650b1eca48b11454c266901", "00a659f7242c7f4e3acb4d0874296ae3a37c65aa290179607659ff76c6a9ce2e", "1df70d107f9b4a7b83091d38a19f17fe3d416dd6804f7c77fd505a96a78080b5", "268ae3cd69c95f8eb8081e926b29fbbeece80553b49f417abca1a6afa2bc8308"), ("18e6186117cb9e29536a54ef5e9b5396b44da388fee63f5f176fbf366bbdf18e", "07099a7490e12c0b504b5d1d0186c6a78043ef6bb7f96e245ee3d158bafb6e20", "26098ec61d9e90edbef9da8ead9e6a13c4db616902cd516bc94e5dfa7132e009", "109837e8644e89548c4cb0a2607497c1ea9238717979577e27bee84fd1d47d5e"), ("156760def3c1d807ace9e874da6a45a4eca4d4abd1ac995eb56207ee38157d0f", "28794a85a6cbbe02c55ca8868499502f9f2528e540f1d0754c533a38b743fefe", "1538069d6a50556a08ab8d9b5d560d296754822577278bd09d44de869c65de8e", "2dd59c1047556febe211a02a71aac22c123cb287103b2fb72a813ef9af8f5fd5"), ("1cf63f391a1efed97e7817035fe75108e12b05a4216cb89ae5847b5f4f428fe9", "2e69a2237525bd6cb5e7e64506a96845d30ae6f179aa54b4066c65e2ef5d3c13", "108ab9f6253a7f31e5793f21ae3da323a8e27a19163f03f15eb579f9178b2d72", "2a6debc049f02a6550501e7d95773b2d1def0fbd9b3ff2eb1d7ccd61d22e37a1"), ("2ac858438dea858d70fafc82b6d9c3f47b8b6a933fb6c78ff48f4f362c436143", "045ffafce0d6e0d9566d97d26cb2ada8f401d6c315ea7183b9d02c7134b31fc5", "1bb2cbcc9364672f545358cdef2f7b1c84e18f04840f9bbd49ffce5e9e376f65", "3002861c92d2d405e86153b93714f286e3f8105497c404fd531dcc27e76a09ca"), ("16a30cd2953f2503f1029b53bcb13502721f5d9df884609a6279d8acbf61b79e", "2f85bfd4addbe111e424b455cc1ffd393ef75f2f1bce21516f0b30f82c444ed3", "00b2bc4dbb888fe7636956bdd31382f4aadad91932cf4705395ef471da21df01", "0266422ba6de154767a4ebbdccde1a48ca1688210a7748606aa4f1d2cbc82277"), ("300a73401ddb951b5927e46fc06126cf38f2233079fbc0bf798c35ef2c130a3b", "0128493a24f6146bfa192229a88d5f1efc47a8458a3635c5b1da9473289e2f2d", "0b55d2f39f2be6dea9faeec4e038f383c49a7f1e87a4a36687fd52e79677563c", "2b396909346e55d0103bea379b587cc3a1f1cf51891418b644161e8ba7f2cdde"), ("08542d149862a0b6751fc9d8cd016a297b16b7002357017de93642bbcc6f27fe", "0bc0fa80cd2d201a619977982af49c935b7621f39c5f746bab7ee50e3bb1d082", "272ffcaff6d9f349f52bcc3ee4b1a82f9375f96ec40f32a0ebdbec5c2a8d5df9", "2950f95b004fe72033e729944164464733942fe4c082d3adc3494a11c71941d7"), ("0c567f46834a5cefd57deb34f3ae6b3181107631f5abe497b95c3eeb59ef5baa", "0140929fe8a81301d6d389209b5221b7e1024bab9d881ba6340ca1124bcb732c", "2e326399b2ba7d076a77c93f844b87c0ce573cd75818c4e75f3a5da8febeaf48", "00c984b5fbd5b815b7ec6a2a0888da95a3d25b12d4de5ada6bbd845d01ce4a54"), ("0b62e8005dfed93abc4a716d227b88f6f0bfa9d23ec0d6c1f5fc98c6264f70b6", "27115f51a3cbff24982d4470eea1cc7c07c195834e2d3b7349b96f6b36c813c3", "0b346bfd804cac028448105ae61ebf6ee1463fa61d1144710747823141cb3f97", "2442c3938e9e5c8ab9bc1c6f114b21f69bc26aa1bc14e4d12c465689c151b80e"), ("2ebb4a29e59b9858be59d3b83e39358c6361285c59e1bd0bd5152363b4577980", "2b9d2781783224735a1cd4f988181b51ce543906cbf287ddfb5fec5070eed850", "0a729f5da4e72983a31771f8f1c7258e5a2bade9727cd89e1b3d6f4d14e5f9b2", "213f7145e5c3b24b23e13ab6016c767bfb5368e59f3a4410efe91968ebdf3f48"), ("21332a5e3ba9bc33fa8cd8c3dda40e45ef93b43169a04bd08381a6ed49a6aabb", "03e3baab27735f5a732414d48096b4ef99b0dc18a5d2a0a54154dbd14e1f9914", "2c042fecd05d573de0202541b6502f717f663a767f914d9953d15a4ad1bede9e", "2dbe28df158c9e4bb976fa15218f218e58dd938fca0a35aa388c96fc74468ee4"), ("206fcc285b2405819ab7552ab4aaf0725e36aebeff74216cc4ea3afa1eefe484", "2bed216d077663b8979a44f064a126538258cb758558af6786f0909764863bbb", "15e36e0f0eb0ba965b996c12721c17c654449eec5dc23eab1bbd81a30a365a66", "0d4b18851535f7078a5a7c74c263f4fcdd588c4bed736b9cca9ae568c8649897"), ("109ab87db022e03fdb4144cfab132118c944af941d43ebefe8565cd433b2db70", "2c03463614674039728776cafac37abb6acda301c0d7fc67eff8bb08853c5db8", "2bf810efd61c401ddc02a330811b32f867ed7627a597d356fb94aae11f9aa634", "2bf00aee5059d490eb3d5ac504158e64572c87487a1f4c8d5f7abcbc3ef974a2"), ("161734ade4d6205406eedac22a95034feb00a386361dc905e077ad94283eee47", "2f49d8794bae2c8c4cc9cb669ee88edff4cf4519a5bc780d699fb39a048e59bf", "0b87f5623a0f6b6e59bc9fa6a020c4e265e331e6c2f7267896391d5f77345e86", "157fb9e6cd2b488729e75ab9f27d5dbc9024b371df3ad1c336f5d5f4b170bdda"), ("082a86fb7216286fcaa4f3a159b9ce44a6b158f48b78b2582072728fcf2e5494", "1189721dcaa94bb38c0fdd356f2f6e4f31bf240a009a5ca2d761fa46007ed97b", "244847d1a36918482677ed13855265d7f50a6159c934bd3b7df98a5fd6287c00", "0106026672662b6abf84dd82456bb607a02a690741ba66f50df65cb68853b559"), ("124fa3aa1c59116336729221b1ae5508d0c0c46afe16f53e8a958ca75d418326", "2520e1fe4b1677ccf381f42fc7e442faac4a23459fb73225e2456b0bca9da2b8", "0ca6a9f1fa2b5fcf5d614f5595d872c813864f754daf35ad6fa7d149aa97a091", "23720c1d2404b5ee5385f58a4d5525aa7cd185804ca6ab2580013af0f6bc33db"), ("1e8d8e6a8f3c06a278892034846212866c612bddf9b79096dbc9cb0da741a283", "2c6a457d70adfbc1e07ca926c426bca75d4795a27b870287da236fdb2b92eb78", "05427eb2106047b057254fbd26ad81f4a1658030ffc6e6d6f77e7377f4b64e8c", "1e5b38d1dd2b5343d1332bfd8e88b6cf6620092c6f57a7002f80c77a2fb5fd5b"), ("23775a4dbb30d83294ab8d1093429ce720f5ed53517f00445d20f4f0504500e4", "1e0f5f5f2ff3b9b021eb1f4204f56e7399f18d8ce5d1e00f6f2d6453178da4d3", "21f1df1b03a3476eb202ea622f29bb36c95012a85bda18e10c15bf383f31004a", "032f0b80accaf18402d662128f519ac67e7711e006d56f5af589d2932af2c0b5"), ("2f5a3843d22d3191c32d085386ff4eca1c9cd08e26f55171fbf856b0eb7bb2e3", "187bc61dd2277b87e4367b3fbff23207220753029da1a620c45241caf22cb1a9", "0e554b390d10358656040330f35cbd63ebe0ce18469e0d196c2614e1a8f10ac5", "1553395630a10d878d0c54032db6d46765f0f390b2b4ba940c826a9f94eb2b71"), ("129db1a01a05c0c91578e2aa6f0aa8e140211668a3213c000a129262a109e3a4", "141e9b00f5107a5af80b18631be5de8de997735d0bafeb20123178983e9ab13c", "305df51abf9d289f1b8ebfaa4df9deef2c48016698a816513d58c080df94ad88", "2014cd0549106328b7d965d38c0cea0846c43071fdbd4082232567e414d8e36a"), ("2c48f06bfe1236456dfd19e268364eba385b0855e8b1280f731fb48942074465", "1dd39ea252352b1d404b7ef38989b62a95ec65da4280f0569ffb80b4e80880ff", "2bad1cfe2f07eba0af4098d5de2da7597c3c3c4a2b2aba4b1781c983cd5cc0f9", "2c7f6d7843af7e70c8a661bb8b598a576db4587346bba132319ca37fafb4a100"), ("30446689b17f820e4f13fff1b5ac2b854ec3268d02f1b6d24f7c05da77f583e9", "2a761993c256c0553de834ed1161821f1f672d67bbfc6a81944a34ec826c1208", "1bf4dfabbbaf1432ecedc1d7f11d8248f244fe1ef723decb552e1dba109e2551", "110de077af76923ffdd8e860f48c3fe9c461b51c2669250def7f9055a56e5aeb"), ("303a79783a49a32cec0644c66900dbf7e180c071beab5eb9bcfd8834c2ff0b04", "1385f6037c501bafceead2d87bce95ff6112e5e2b990bab036f0ba9899764b41", "2c14dcf1a06f52d168ea7a22dbefd517acedcda29315f22a73d476b7ec5e7c61", "058c1342319c6a38a469ebdac7314e415b518799daab60180a0c9ed182b7ae04"), ("17dc102e2d15f08375b353256b0753aae01dbcb69d142e44ec546a1f647e3064", "21d69bd02d76d05eae070ec8d507fded94b9bad3ba701913e794a88297e93729", "0096f3b109186f841f7f0867f01730f2108fb7df55cc10c057ca966dba99dfa3", "2e624ddf79d2e4bed1be9262ddfe87524e4052c9a2c91475e45827311251db85"), ("1a32da99bb3fcd28e60f786a0061ac954109a1b1fe29ed6967b6efd52e2aa9da", "2f610d3a3a4261b96b1155ba88556d70e68a68b6488b0c3edad4d5e13eb9c0ac", "1df49d770c5792c7bcd761dd42b9a0f19ac9eae6112824d0a757c2f964bf4547", "1fdade3b73f0cd2a7f23f27ef32b4304f74fdf07f895cbd3523daaae870a962f"), ("0d8b45ee9f9debb5a0cd9cdbc16d25dcb9026d29422ae0d2fc6ca186cea8e39a", "0cfce2f1b9cf9edd5b54948a11b6c3102a5d96c111e687d157935cbad7faed49", "26129d3a85591897190e186512a6a882cfd09ab673b5c8501c82ff4c1a55b8f7", "1a59585dfb5caeca882b481086848eaeead14ceca736aabe015bc3056ce8c890"), ("134d305bd72c60148eba64601b5bbcc02c6a43f6a11bd5345bd4c0d27b364ccc", "12a94fdbaab74f5c18fd4e76f66d5cc766335f5e9b11a64b74ca935f14f58214", "24beb60862a9d1b007e68598a08eb8a3be8d1803a046936f09333e42ede3807d", "261fa81a816f5b2d48d561be3a8de18b714e9ad5938b38d3ad786d0c1570d050"), ("20d5274a61d1138f841a0e563e0467d5d05ecfcb37072c758eb4cdd30ed2ef1f", "04bf4259e8569a78684465169ee68c068f33e83e2b5ce5dc81ce51dd17e83e4b", "2b2956e7be0928b35211f761a824ea97286e4c7580047844db7a77ffc251ebe2", "10b99a7a19ab5e37be700f1a61444cef2cf048c02721ea7fec38a4ab4f806839"), ("20a068edbe8efaada34f5ac6c8fbbea08b02623b8fd20ae2f770be220fc7a749", "203f23b13e731b02f4f58a75eb11a44062dab1e4e5a1c35b07b81c2e847d73ee", "154880a3f8cf46f76a23677d95e472c3c6a179bc1aa9dbae7af70b17479f6296", "0a0563f6b74ee145552df4b123327dc0f9a345dce43196e18923bc1a80ec7da6"), ("21d5a184692817f1fde6aa26bfaa991d64cdaa613865df026565da8d802dc4d4", "2785bb9d33f814ba33b33b93bb190bac018229f4db037e24ce40fd812a51e5ec", "06de42c132bf41c4535a5530aca29233fe6098e254508b639aef9a4e916ef4b1", "05e3ca50126210b3edb4f0fc2d5c446c9118b2358bbc7478f03ede791be956b7"), ("12c717ea35efe47ed1a5d504d84ec28d24dee961eed3b9799236318813a32564", "1d4f43aeb8557ad4a18f14053192e0e367d736a550272de3b495e491861efcb3", "2705bdc3c23822f1ace3b4f24a2db84144a8edd5760c064aa9af90ac26f68f14", "15c659aa2a95c2cd29b10415e306115beaf38be5aa31c81b5077977d9255d3c7"), ("1410b93406b357671e7c151b8e6b686d31ccfcb1eee1bdb0636fd61d400d3ac1", "128ca69479e6db770d7380178131b41b7f83646da4425da680830c492c86236c", "2cacdd1598e885fe894693d4699efcf2778f0ecd87e3fe909c1e8712b9d6aed7", "0ce421a750fdb47ac549a737d3ab3459f92e9ccb78b4e6e328b60ed474d092cb"), ("0316b5cdaf9bcda4364ad808751e4297677f36bd9e58f1c7c4ee5fb289f17bd1", "162400fe39eab3980fe1b77c24d9d4eba3c727ab02de9256c5aaac85931904f6", "1b3254b2de6afef2a44801624919f292e599af7d609d0dcd91734cc7ca728932", "2c28812e51cc6a33e2552d6911b4db1d4ab531232de82ce2ed1d6809cd4485bb"), ("01c9ee859360b497121e3991aec2c7bb45e5f3061736a6a7b511f4e2f05c0536", "146e26974c6ba3319d5032f21bbdd0c11a19f9110ffa499af86265d450e43db1", "05403103f9fd061db0cbb09bccdf066bc9cb8555fc48cd4a3d316a794cb32863", "0573e7a15cffa798453bb9f2fff05eddde8d5288266cdd41ea6cac45b97daab2"), ("1d98192249e8f3ae2b773786fe3ce53e34b44ce9029dc3d5bc2bf877b505557f", "07fe450b50a12519b733b24ee718f8d6e098b98fe491a62730fecc0e90df0625", "299c3333ef1ad7cba72396d335a834be4049cf89c6248f75211681c59e3d6ad1", "2d1b4c1397353ed5c61494213a34a8afde5925a3f7016f8c74c21d4881444603"), ("0ff9c62c0b685e6ff6e8a51f1a6af33d4515eaedcf93d5e821b69f3952f5c50b", "1552dbef2ee2d871cbb47c1dc54c5fad48cdad3f0c088b1d9c6ae733f761be8d", "248e4301b0720c7d025bd0fd47f336a3216537d64aa2660f249edf5a92ed6254", "1dc5ce68ed8b13894cc711d67838df1fb3426ed06d8101ab2bc03e907e496943"), ("0eebea6d0ec694c91e6ad4f8dc8923e06c1c90a0b90f97158ec36f5511f95fb3", "119e45388b3f01c7021de5d8bb010e35c9ccf269de0e8571b1cb481a2997930e", "1e532ae7a4520457ee317ef2e35fc6346b662e98a85be3912c8a75dbdc338577", "1791cd651f28ffaa15e54bf1d58662f50d818f0f960ddfeb5897a1fc2e077523"), ("24984b34ac548ae71f1426fe0930cdc055a350b9294e7869cedea124c28c9ee2", "111824ff59d738e3383adaced40e8b599575c03e510382bfc84a272868264177", "215f00fc4446fce360747779e3e7ae962a9f01192494fe07bff2dafdcac327a4", "0e4202633215dafc5467da538627236d1c4ccbaae74551539079a73f53717763"), ("2bf7d52c521289f4e3be600b0efc00e802e3aaa39e18ac4402afb2c61ad0fb68", "160dbdfd60fd2aa438d8a80a8f7eeeefc71d11de75d95e438d4b898b80ebb206", "2265b4ef63e92f4afab4291bc217a396892b371aa5753fcdd8d305e3252e0c76", "2539970d2dd186b074117db3d7f9ab92ffa21f2e3905b41f704ca7b7567aaf64"), ("1ec0c49539076838db0f7a9b46c6a5c5baca8bae2b87082144d7db7f0e4546e7", "2948a5b1b3a34151b768a2a395a6f55c3d765817c2ac4db707b57f4cf3361870", "150652d4a88d8c39a1a44543bb61a17745bfe5cb1604904b9c194889ad08ec2d", "1c864cad1dd17544360ea95ccdad44f6a79d36bdf4cfa9f3605dd6566c9e731e"), ("0a41f6fbb891f80b76f88a390abe0dfc0de277cd68f26e33d6fe728fb0c0cef1", "0bd027c756676a145b189474c867292042251f05b1f7eeeda911e2d2c98d25ca", "2972119f4abb4e3700434d969c0046a4997413f36846a5f9042b6389e4f1d8c6", "13690e03988ac887c1323d174e17b735f4c9fa04bac58f0e671dee37d5f7bf67"), ("026acdb0316943b0e524f9158b48c5b792a6fefee6b013e673b10cc2de0b3764", "2b24e895d0a1cad601436d06f295ff6ab336a7b40eb1fd7da64c7fef82658ba0", "081c7b06185a11382463747dd138b57e2c2f87ff7f9dc2252352d7fe574a54af", "026248754d0471ab890f37dab5db531191dab0d818f72ce16b5cb62db4dd9015"), ("26c10c787ada39fbfa4fedd6c8a4bbeb361130c1ca7ebc3a3e0d231486b128be", "1c83fccf7297bf4b8be5aead9fc2154a415d676b2ccd3becbe0e7b5b486619a3", "09dbe5ec9e5443f7d0119da56a066c267e604aef601b04433d9ab516713ea985", "0039044c3e8f255fc49a46100aa64cd1045ec5a505550750acc00620f88c831a"), ("2ead0ad739c7587a92f478a4e9dae74eab81c95e0c51a16e999e0d26e742b422", "09f97962b296d344b922a135c162a8e5c08524fa43986f3cc47cef336cc4d14e", "217ff690052c3741904564c9424a35f28817dc16a0ffaed2a0529eeaa3fdaabc", "25c56a8fdc1c635baac9df2f430783273fdbc370f2eb4e640c3f526c1fc27236"), ("2405fff8bbbf54b387914b1c1a3b69019df298cfa69b4faadf1a46edf0b5afd4", "101ab8583f3be2cdf72c3447972da730f68eaf237e11c390c646a2edae47771c", "293e725bf4709038e118d9e7aca1f1518cd08dd1b44b4a439f7ee1e3d5033bc9", "10d0dc1b45a617d788b89bd88e1ee97be38a5abc1340eb40f978484520a71ea7"), ("023bff9ff57f12f069b39d2f15bfa89ccb2df52f0c047546468ce4df5e378d05", "235828df4a019fabe41dd76bf7c2370692960634a65440ae214ad58561736a9f", "0c97c1b9284cb966aaaa4f13e2457b632cd812655940c621ff5a249f7cea7acb", "0fd357a89f182fad45c3de0c18362c641188c74552d409351a44bc51d52045d1"), ("0a59f0c1482b9d093d30a3a468a5a657bebffc35ee2fa5ffcd98775de3fa52eb", "183b342f8970c3158161bed359a1547db78584460efaf382a659d03adc2cc2c5", "23b3d8c5ad3ccf3d6aef3772203e651ddfcf6f3b9ace19c0826c6913af2ce84d", "0f793e63b71b18f73c5b905ecc87be8559b5b76f2f4059931540cd5bb8d25e25"), ("03df5448bf46de4bb5c0cb1cffcb3211d4620e41974d7d53b3b666787c771e24", "0f82f52bb697e7bc4bf0b9be1570694e4441c78eacd3279afc9e4bbab3c8a485", "093eb0ae0354d8eabe451f580f694db61e2f9ae077c3b2677a655b030cf73710", "2cc4bc865a58dfa532ac278625b31ffcf1043ca99881df6394a57b995088fa61"), ("2539c05fccef552b29767ac4e3d9b94e11f4cbf7fc252a3ece4d0078948f317d", "132cf7df50e79e49c4eee832d102703f46032b6850cab50b2ae2fbfd8384851e", "1fb163338c3d91c6746c1ba803eb565da326eee7159c9a13bbe760c8a0948c5e", "1de13ee310e633769836659d8e04a94004d9841f5eff817b6b05365fefd16be1"), ("271491dfad2802b3513db900a03f9c773b735173ba29e8f32f6930552304ac9d", "141389f7e078b4ea45bdaf040938f38c839ec34f6a4bdf916813743ce8b3d202", "193f32a06f5259171cf06a25e2eef0fd608e697c4bb362af6371e6bcbf2c796f", "0145cc10309daefe0ee29a4f8eb10bafb012fa7da02ebc6626189b935c41ae97"), ("2517158119e51665e8c307cd89287b6a7102c2d835ffcf04520e641ca68109ef", "114893426905e21b26c3a59b4aa7b865b73f2bdaa3213b1a8ca794186f8fd007", "2e0c5dfb4fe8b3d70ca023c6b8ac4ce757ef5d50fc819d9078691c17afb5a6d8", "0046eb2fdf07eff0933e9ac03f95cf4f2bcf949975367ee3969af86fdbf31911"), ("04f8509a8c5cf3f26618f58dad224670182e2a1ac7aeab928e6d7388ae711275", "00c70283feb9cba5d6f19dff017391f04bd4177b6d5f4ea31ef487548f1bcece", "18a56699e750c05f25667b49ec74ceac5f55de3804868c43a03f34f1db203b9c", "09b6b730ae95274a87050b704f07732c9c7611c1eb421a9100e79d99757cc342"), ("263973ed243767a7639392f5ec371fade1a2253a91c33f2da77b2fe843c4db4a", "1e3f995b6951ed535a78934e434c146182631a9d019ae3be231e733fef153dae", "1ab2d7b00d39c86ad2c2bea75173e19bf163eb8bcd62119d777660308f722555", "267476c79becded6e609300ed9b1c957f7b9c675369b9ed0acb7907f1e770b78"), ("27ab9249f0c3c32473abfa6318589a4164e17aeae3f0b61aba3fd75da76d0b02", "1c9ef4291f6d8c7cf0a39a090c15abb12cb4ba43cbe400cb002092c4800fcc68", "16975d6fb35d4fee82d55c5ba55a6435c723739932f7dbc119e73c64fbb009b7", "19fdbd19ebba8ed4214d3ea83d5c8730941ce23200272e60c80148d30eb1c721"), ("0975783d3f9eb3d2764732d7938fdb08af626d483dbdfe6e9e4d74d18f34abe3", "24073d5f27f9237f975a902665b62e4fecf9f86ac511b4a1152f3fb43c358601", "0a8272ca0e5021dc3b6151a4a00a7b65d6021a081d53beeb49b3b4f79823f431", "2b91d4a5f11e07484057fd80f9d64db31c488826153ce0095b373b6e6b3bec49"), ("14854d34a2f850147700f7b98d2c2bd063f1dc942c3d3ada73f3e3b0a4154088", "24309408aab56b93197c63b490b7321a8313999d481204749b90246788508902", "1e51f13c71e3800130f656bca6f76960638bfa1a2f12af2dae2fe136a163b6f1", "1daeb9b299b4cadaa9d14e86d3e9fe4ebc93499e35e15805304cc1ef3114bcdd"), ("0e87f68806963defeee4635729552190bb94f9e861b82d6ee7c28a59d06171cf", "26e2de1a70aa9f725b7957319a31048d8aa48dea30a506355ba684fc54aad573", "1a1b0666ac1ec31cde7290d9adebd1b34fbcf709916ee092b35c2993cce7c143", "2da7173b1bf3d81a203c36c6c2b1a37dfa0e9f3adf20991d76a06cb0e804eb04"), ("078129a14e4d4206bc62dc7c680385d563d315017c07c0c59f26ee2a9651e533", "14997cb956647ba0be49b61bd0e7402c75845b188b047363404bc422c914f61a", "1ce2e41e483bf1d71c2ad0a9630b5d39209e766f1992a97ff2431f0b1550497c", "19a7f7afc4bb85348d07944f67baaa54baef66d9b0a01963a45ea346cc26a241"), ("19ea06d459e9927c2160056f41a0a5f280574ea0c56bc5caf2648dc0493ff6e0", "2bf32e89d16a68025e1f6a663b5588e381dffd010202b90e63c376f1e9f8deb6", "0e51a631e9e8efb057f0f66adde2abac169deb69f1e5c81e470b4a26ca9fd151", "02d10dc3bba0b8f58cd754f08c16dda0d22e05e49fc9951e421d175d9cbf0076"), ("1b49c88a855c839258aa0b12fd5228cff9ac0f81394c84700cec57e31ddab94e", "028ee54edf57d585fbdb8a92c52b6e0a93f6c1b06d058c14939fc92284cff0d5", "0260e99fe9a7338610b062f40509864e1dd4f503a14c3310232d82963c1bd39d", "1724ee75031950cd4d22f0c409b6573c5a210ddf0b9b4677decdd72b8c52ed36"), ("19a9c121dc2664d0ba2814b31f8700550672e2fc07795bb5fb2f19f2004cf1ed", "1488caffa49f606fdc2ac649fb3955114178f1ae17d02d193b4f12b7ce41c569", "26c73dcad2a953f23dd59f3b09d4a5e37cd40c3c8cdbd688736d2319af2d3986", "03b1c80eda5f8f25d611b017b8fed796c71d91d9e81239efea8ad21ec7a1b13f"), ("299dcfa9fd6737e886de9a1701515663c78c21ecfbb8791204101a7a5e0937b9", "091bc089c344ac7f5c6522cecc92ae41a534951ff65732e37f13784669c5c3f1", "11bc9e2ac687ca1cc3e143e7c7b68d7939057732aa686ac64724966bee063068", "2eb75303a10c6fc094fca2452f7879d8782f5448067ca9664a8cb52cd8728c20"), ("11d1f90f94b6e363e699d1672aeeedbbd3e1237742994ff1ea9e229381f59bcd", "1bb305bf68b8adf70ea7ff30fb13115fa941a100fa8f6deac7af409c84f02058", "2b69563048f57a38e1876e3d20d87299a6a1cc1fbe3e8c46405000229cb99588", "17e817039c0141bc55ad6259f6a06b1089abbbcb293c5608766839c25affacf1"), ("05e6a249757fcd5dc8e06c276e719cd12bd1ef746afa2a4fcae484c16a8784b1", "2094ae7b38862bebf452714ba9c19fb08d85ee5e6a17d8f506deceb87aaba41d", "2daac3b2878c6e0f43c1764cfca2fa3f00290e400371c0deb7e541bc0c9741f2", "1baa746a2441177525c3a28f48bd276ee9055099cb626a39aa4e5e2a3921dd52"), ("0aa177ea69cd36157789113efa62c0fdcbccdcb1d1bd357d907dbc8b2a186a89", "019d02a8432e8d464f29208dc8a3d670244f6c8ff4ce4d8af47093c375669f0e", "0d3bf52ce03696a9bac8b7bfcbef3f28e38cbd1d4a8fbeffbd3dca1f2835cbd1", "26a0fd50636d735971ab17cd4f13c01423d0375f8f885267be0dcd8a532868af"), ("02722e536ef6b4da3588b2967209a8e884faa858ecc2ea3ab4ef30d391e4ff36", "1245a13e5c93cf1d29d0d2719df7c878246454a2cddaa639c3bc5908f600dffa", "1c06ea5936dcd04759e6e6299eee50ee77111985295a7065e8fb6ce8b882c371", "13be3ada085a92e111b63899da758b77ae41227904a94db8f0168918a4ecb520"), ("12fb7aaeb9d596d7298e1c0e5f3fd36fc6c2e4574864cd2c7eded4a88bf297e8", "1a58a7a76b30440a8697ffe85917744680a97e9c888b8f31bc46d17cc3e2d3a1", "2b81b218da0bb555dbe4ff92f227fb9a6ac9535eec7f7e27a49b3f8b53ce7382", "075e8cda5a1642aeccb739e8ce92079f42926685153d63ac898f63b936340c38"), ("29cf194abdf54e47903baa178f2b119536b954eb5dce2011971ade3dc89e2ee1", "03abb665fa645a204adec27d73152e67c1cc33504fc5ed14bd3333bbe29f56c4", "0c8029af8662aa0affeb0e970f2910e0952f0cdb29b3bb74f104aef35c8b28b6", "08a2f6479f4c5195fa44b29554eb4da6aca0d6e2fd383b91d6e3f144daa85837"), ("0e27c012b04c3029395bd6a6a72a9bc84a1959d48c37240123cd8100fc949e72", "03538ea140291e1eed381a8e25265bf3f5eee7acc3e4cee3a9772496d4c0d421", "236e548f473101ed605d75f1221db024f68ce0a10a6f71d3278823db9e17382b", "207f67fbcae1c7910b9c2b772fe81986bb4e6877ff85a4f7689dc10d46040125"), ("25c5da35392d9664ca97c3ceaadef5f4298dc154ed33beeb06de58cf52d6ff08", "0868cf0378314f91c7f8cf8e67822372d14afb96a94f83ece91a4657a9391b0b", "190d847c550120c385b5e2e7cfb17a320bf64d7e9e9af807b944e05f871082fd", "1dc4fe6de5a2caa1190f794943dc29db0b831f3b80f62c507f8f14a2ffbfda26"), ("273423c7968adb964b65c03d20d60e04073368bb888c924215fbccbde4b657c5", "00ebd26ec0b9ee029a55553a7ea01fa77d55c7442fcc3551b058256425deff72", "033421ac955534bd8276316b78173ad47cd4c41fe8c4e9e3cb1a21727cdb808b", "0025206fb69cf4f641d839e77c56a139ac8e563fc1a9198f26775c971d160cf5"), ("2bba351f3bc9e258c5bfd3d1f3c94731e48842b50077dcb03bd5e66f271b67b1", "037d31bef5e5b6b53ef049283d04d26f4a952e0a91e8dd466a252b5b670933c2", "00cfbe8ccdf72ed6a479fbc6ed21358cd4070deb3262d9d903d5082dae0fd5b2", "1b8394b5cb0c05247d26de9b44eadca6f97153dc8194bb06df5a5a89a2c0515f"), ("0a0a9b180d27dead81d02bcb186a4f6496d531bcf4df4f5979dcbe0c05aacb30", "11477933f00d29f7359488a6e84d635152dad23b5b47cdd01119ba454384dbe5", "17309732faba45b3cad821dcd70c76573faa253eefb4f50afc4e0e9599f9613b", "0eedb7c2019455080a5387fd9fb542c7079e85595b8ba591129c5e55e7f5e8ed"), ("05798cc7fb1728da4c4f30ac5635b3e6fe98e5a6f78b92a38fd995896d00cc32", "181a5302e7a570694fc73b64b91abef2efea387a29ccd415b9fd941fff2201fb", "1d8a45de23b2f7c468acac114ec1d5e5b6274329ae3a11b400a2d6833d2c70bb", "1719dad43870915f82524699fb141163db0faac417037f96ba075ce4d5fef18a"), ("036e2711a07f2b510e7b500cf0f9b1993f7647c8e2167399ee57e96bae45b56e", "0533056dc015cf6e15e9a63e1f7bc521a781efa7c0e93c6d3339c2a358a4c727", "131ea20fa34c4007834122bd8aef12b6ac4b1524849da714c5e2bc2275c564e4", "28a810b8f23b511a22e087496a4747c3350cb76194f5d78cb1c71ecd973cc236"), ("1ec04d0d9f7464d1c005120ccee1fb9b2f160494c32839981c9bb7bd71e6fc1c", "201c62f535cc856d0aae2bb99a04cf22b46e1a7b4779dcce6aec5a8b09a239db", "26e30524a9b98165e902eda30f8bc38b99703f793ece5bcab243bdb1ce538b94", "04429d3040dbab23723c92a2785991eb8ab7a2b703c8cd4da78b67f1fed2d0ad"), ("26c1a28446da312419c50afe29e606f9724fb8bcc3d4edcec94ebb0e2ea7b20f", "20efe7983ba495cff08ef868473a2f8e24465a09fda0d6c30ee4e00ec8890197", "0ac74c12599dfd3ea4dd892160536e0e694684f281474aef3a3a786d44982cb4", "1931ac532bd71d16c0feeca2b7de3e3ba56e621b2da8855ce647cd9342e2a861"), ("0cec4c05cf1380cbf7806e470eb776db4ac6be4c49a7ed3891b514ff7d103ccd", "222dec88274e7f356415517761f464ccb84e069d8d6e2f9ece4de807ff1b4948", "09d9f7f22163959beca7411e3d42452bd1d7025f5a340b50e82fb3c280d06186", "085af68700c531f9e391f6bd678378b16b268c418bc51fe28838bb04273c4f4d"), ("0fc5796a96a58106ec0b7a33cbe428ff6a1b7c3eeb346015e179986f5e89d266", "2e18c00ce186204a8aae054c86141c573480a4ca661e46db7f4866bd9fb1fc3d", "10890e4a1123bb8fb0c4ed7f48bbeee82ff93ad3d1a1535dc8b132ce045cc757", "2177363268adc1e18b9ec91f61a352a2ab7e226d88548cb0f3fbcde32d740479"), ("214c3a964995ad3a7d0d2b10342a5861bb66460134261259e1c60749ebe711a8", "22ff9e456da64d11a85b4a7544cb6b521bc22df2e90da9bbf2e9b0bc380b774a", "0bd394db47984e7e3f2e64d2cfbf47ba3c214c58767e1792a5ab4eb6c9cf0954", "09fb145c62f67bfdde65d203b95805a4ba3ced8e788b6566b21ed75f9a9eb721"), ("1fbe5f51484853a91accb74e3956ae48589af38721b885021539864b6e0551ad", "2ad28950ca6ba7aad6e6d82895b7e343448d678e3d8add35c3402b9e64ce80cf", "27cdfabc9e3008951d4bb68339492c429c8a8b87a2f5f4f5b6a07d6067824149", "2412ac0f87d4bdddde393cdf7b49239162772f5d81adc3a739ade96ad16f53b9"), ("058542c783d668904384a4ece3c1bdd604c0a752f4d4a16f963c6e9f4e5d5e1f", "25f99e77d1a63e05eba5b53154dbee733ff3a5def1daac2c4effb492ee0d6f38", "2f4df5677a5a7c1369806c67f14a15a8f887a184fcc33317eba1d1224a8cf15b", "28bef572add7716ca0adc81dca6031f5aec2cd2cc0ef06e6dbbfa4017632e988"), ("252b6e4dbbe37e307fb2d8cb7934d1c9c93bbc6577a432cd16c54b6fea833e39", "2cc2fad3eaf29c40cdc4ddf67da48d7c2c599bbea689b74ef7694a96b011518e", "10fcbe91a688a4a3decff517c5876fef935df01d4118e667e3f839c3ba240ea5", "0257ab35167be7429a174eb6269f2be403fa2c3b9e0e7c335af335dd00d36bd5"), ("2f00efed2ea93ac51256d9e3774ec9456a641129dbbe0e218e9e16ee3157e4d4", "0110120d66e8c934aa75559db9c21d0dabeca93d6b27d659689a5854ffd02ea3", "249990986131db7d4522c7cd813062234f42ddf83a3c146a5e48cfce71e73d59", "04555d075e32f4ed4f6b3319b9a81d4b84452ea0ea910674bff91eb2586e25f3"), ("2eb99341f39966d21ed9f42b963f99c658838d854a5029abc0fb236b03dbf9a7", "269fa9d222b87e71eaacc80d5372faa2fc3506e6966db70bd38c3d364b679db5", "1256c38a68c347386755170e50aaf3f2503fd9a6c34bfe1a95b8ec08e81d3731", "10a395707e291037b37eaf103d8a33f617118acb78c1edda72cad9b27d7efea2"), ("2ded73b1172f7ed3babd0ae041041b7e8db5f20e3de61bad47fa467650821914", "2ee3d8d4fa8c7ef04cf2fcbf3b78d45c7ba424d6c65f03404dd65d6bcc99fa4f", "13d8efa689b980212d4cb2de5e3903e4459c4d12cfda83ec4beaff7ca893004a", "04634d001b98995bc836888ec7822e3b1010445a5ea44c7040995b296612f030"), ("0f2d37199df5ee83d0693fd7eaa4fd62e3455a026292082541eaf61b98127048", "0429b7488a560447dab233d25d1d7ca7ce9a10d05c2c27d0d333d7884e464310", "0abdafe04331d3df773bc013c37b7031bfa33303671d769c353d98be9a5a5d3a", "0ba849dcb5814ce7b714a97183b721d51e234811545682603ac3def881b89b8b"), ("21e8620d81a9a1e541e520de3571c9ea3eafc3ab1754608471aef02267afe2d9", "197f1d796b31c41bb100fbe89b6b791b057d1dadf55e9ade390c34e108e6a0c5", "0ef6bff0bce2f3dca3e27087c5397eaaa12c577b9c21bbdd2bc89cce87301a23", "2e33ca70f3123c7c570d7f5ded03a9a9682f434a097ec34bec8bd8ddfea4f342"), ("192cffe720964150a11fac413ca6435a4dd275cbd75947b06b1b7fcdde47b693", "1d1cb4f1c0bf47532b04cd316c1f2e22e5f95e1c5217c1639ec1166c4ecad12b", "0347c5ec654b77ebef029e763f9fb44914e701909bdcd804ee9cf6a2ea47a62e", "07086f307560c25e25e91920e386848f38129dcf14f24981d8dc8c4b4c611eac"), ("2f1d85dc065c5673645d5fb03d1705eaa3ee6bdd4ef38707577f881f2112a984", "196d32f0a7ba1acb4bf2d53be2140cf7fc36720bbded760c16268623ce53ada5", "098c5192accb17ab50cd9f85c1455356e514f9b8a085f595b689d99290068992", "2b0c392281ddc01195fd06d944ae3ca579843b79eee09aa06c44f20a6aa64bb5"), ("1499cfca31a1eda418d8fd9532717338a7ccff9af05d7d837e80fd7b13b28fba", "09763d012443e2b82b1af25164931b19784b201f4c39c265b32431d222a7a2d3", "2684a57a4b8dce777d4f0bab79f7c3f62cd190f7ce1fcf6c3d29642f2dd61772", "17c9421059806da005ba4c92ad5007d142d417603b1fcdf21d1995499d1d53c8"), ("15b5e059761c5e8b8286a77a9302a2d3947cdbf5d8cb24ccd232de67b96e6916", "19c561c66f24d317d6b7eec5282338b34ae6db2ad52fc1d4e11c436db5f19ee5", "26f8e75a0d9548f665c0f9aaa24f351963719b45c745411e8447764624342e22", "0eb5a3c08f8e4618af089c54a25300d10908af7dc8096164f71d66df42149ecb"), ("28c3ba5967dff5d81d2fd38e0d767dad64ec83c81ab437079471e659910437f0", "248942b9f25b5c421df9e2c7c4d32b4eba0faeba71f38fa8640a06940bf877db", "19e2862d742745aee93faf4be8e833fa233641427b603fe71a876c7cf1150cde", "2ee1472f4ca06a1f4fa03b6abf6658815a204cc43d42cb244a11f5f42bb8f28c"), ("29bc1fa095f436e8013b93a287e41d2b90e671bf3e49a3e1f676b7a7b08eafc2", "1604ecf7f339f9eaccfeca54543976c19306f420decc8e5e05312f70912b4147", "02e676ab9fe7b0a8effa9687cf926ae6568b3bab0081b36d3fa66391b329cd96", "0c4e5f1c308ee6125fb86e60d559eadfd795ff6d89ca428bd1e0494b974b7248"), ("00d18b31978989e9ee3f01872422d2b74840ddedc49d856d5c3c544a1ce8d8ce", "0d1c35283620f1442b4b2bd85833b5c6885b112b2840d08591eaee8985ffc055", "067dd8ad6280ca4e5e821be9495cfeff4f960eef5316c3744bc770504b580ca4", "2462b074d9895034f305e0633807f4d2b56564bab60742f8dc452f804a35163d"), ("107d8ef9ca5e649214e0101c256ad77b0982eb924dc2f0bef94db5efc121fdaf", "1f080d7a4544132b603cfb8b82d6498bfe642e400ca6b3bf62129ed11313ba06", "0789483f5c364a82d1fc6f95f3dc967d34b72d9a805a9e11e8d35b63e95a299c", "1eed885d9e06d8b0936c04b5af8e260855ddf1d58ed13a1cbf6b76ff4020b828"), ("16785c8dc4c8657b5f3f8f6afe92b2df9d833fc70fd71be1d5867cc6f59dddb0", "112ebefd129f36be4c0329e94ebb18e6dbb9fb8cd460af749fc54d3483138fa8", "1b2f0acdd6fa06c4bee8a47c6caea2a3e3734aae32debe6ed4c9f2c675e4ac05", "1f302790b34ee74c01c78e4d16d24cf660882470cce0f5047decbb0c00728ea7"), ("0dae18bae7a4e9a7c37c4ef8e117146bf358c9b86cea13276ab1fa8e5314abc9", "1a08f52aca1c8fca68126aeb3a83760f724db756b254f21efcf285d3affaf869", "053eb85232f971d90ce098defdc90f32370557aae8b0ca9a0e5ccbe6183244d3", "2beb188efdb7ba92cfce010de63680a5ae6b84c56adea3fc0e525d3b855a75cb"), ("04f007491510cf8b90142fe3e07090db94cffe2d3d178bc1c279ebb235c1d93c", "17cbdda223b84fc781bd2d518cbaf61762982f2488434c5fe0b80f3b854d42a0", "2bce3b6b55d427a491b16be1505767132a84494546d3b46470551e00f81f10af", "060415abea3d6277449a89d91daf3aa8f7e6439af41be1fa0353ec3d5c806da8"), ("0b81a417176ce56baf5128f400cc92abe839e1f7f753655d7573bf4fbe6a28fb", "2126aa3f0f2bb7de3ce8c78b520a3489006b5afa0958cc06ec53ae6c064d5861", "2e7bb1b432c32dac71325f80a732cdd5f0a901d25f2e23ac8ce45f64ef838dea", "024c846df976a610c443dd2c26cf029f8cc368e136eabc29e232992714db10aa"), ("043cd2bb64fbb8aad972d0896285c47e1417f07d2373959c231135a8721d37ec", "1182a51f7132b6207f89405bd3650c6dc34dc994becd8261d85b7cd9f2565890", "1d569b5470c4c99f52a6b4d4d8e05eb09a009317a6b0ca576ab64394e53367a0", "29601cf4fdab2965f802129be83cc4f139dd2913b371383ae99f2d6a3b391f6c"), ("07648e37d9a4912212e8cc7bba4b90535ce572943ee035e147595e1e5a877dde", "284037eebea8cb72c04afba197e2019843ec75bbd39f4a9d095c3e5221ad0e62", "253a076d40736b82f5cd2d477042346bdbd20746cd7ff4d2332a40fba50afcf8", "1d749cddfea7edf0f7d60f3e2bca9f59c6b80ae638eeef0f8071cdcd3e35340c"), ("11ae5ca31d170381cea1f808f140e13b8fa1749caa6449cb9e60ac884fc77438", "2c8234bac052712d23dfcc729f31673643c7e6cbac806dd9e67ad386db8fe0d2", "2d5cf73ac68336aab7dd1af53436a7201b284f3d3bbcf285451f93ed1938aa7b", "0908e63ddf8afd58c99d1c3fb32992d71f6c1bd873592b9834cbef4bb949ace3"), ("148a1581cc6c90fc57659f49bf484c1f726f8a58decea3f238f9dacedd7c6d58", "0fd2d953657b16c110bc1ba3ccee8316ab326a50ec94f2ee4f57268933f15bf2", "27e8b37b8cae2c1a93d6572c0f0aca9ba45470e225f4e92c668c7a1f84bc46e6", "120ba3f32dd31142fdb6995624d11e694ed142a83d25f0d71ec9a5245e71f041"), ("04bbde753fa72d6cf32a07a1d8d90a86f43eb722bf507ccd0d6173300cd277b8", "0fc3a2d794589042c4b58939b62aefbdcb65dab1538e9fbbf76f52c41a7e7825", "2eb4b38af876f460945e645da40fa54ac2dfa8306e21980e4a467088d864b931", "1acbdc5cc6fa0ba26f9b66b4380b89ea404f1377c2458509a963df711bc2e121"), ("0d803b62de2b1f8e5116fc1c7a7e3405bd765976c38a202f765d2ab000a33522", "2839f2abc84e77bc1f812eb88545da2029e2c4403eb8ad7c0cd0b11693a89845", "17babfb65b4c1d576de82ec6f2ec40a0a9ce04c46adcddab221db3c8c101ada4", "0c8f35bfd4bc3b9620b90038db355ca05cf2371313bcc77b1d543524b5acde9c"), ("2a15dcaced4ec4c6c7c1a72c411acddf55c379f77d84908294325ccc876c1131", "2165b6f7ddb08e2b081ad04b9cbd1a802764489d972249f11b6314d2c59931a7", "24dd8fd14459db087059bb83c02bd3e40367bd911e107c646dfca4aecdfce065", "0b2b78d49d2c38b722beebe1ef04de3f26c4f9a7fc1d73f512fbb98c1f48287e"), ("2a1e6d8ca7c9ef6ad2914c3cc8b4182d3c95531de65385bc29b51cd600820771", "190245b58a08cfc9aad4b18276a303fb144ab12e4564c90c04ee767837a4618d", "256b674d045fe25c506f81253a8f61492c9233547bb460f55e25ff6e5dd6cdf2", "06b5bcf584162be85242aed3c890b5ee3cfe125b18c4917a11ceb92fcab4e629"), ("194f620b978ff11219cd27256fdb716264134dc99483ff4687abf1934cf8ad78", "06c27bc5305742f02414bbded1c3a7483698450c22b9e8b55618f9f4c70f96cb", "293f16b835d9ad0a1fe28edb09c1d69004365ac43de5030964b99eff7e43a5f1", "00e5c292442558b27839965a05e74ccecd352eac42f7397e04fd260ececab083"), ("0820908d44669c318a114862a9eb9b2b6be48e947cd2c2c4379669028241deb1", "066275c463a1b0b02ad98d7f1d9c438fe3feb4cdb30aa5661dc96352c0ffeca2", "046e319d104578b42311a323b601e6f240f274b36ca5cc94f09ffdcce5008ebc", "0473aec7fde1ec2fe927a7f0de9ace19bd3dab87b9059c8056b082826d799796"), ("03f9714667fcc220cfec85551d027c61e8a72c6603f7f8419f51adfed9bcfde5", "021b9f14c353405eb286703417f86ddae8e926a8f3bc6dae1d01b4b07eafe4bc", "1f9aba0df29f88797731d5340c61b85e124d61d2bb80582f04d9e0999692d628", "094d2ecf0e4b606124c1bf8a66045a099bf29091fb64bd5ce1127fff72c70895"), ("09e23c1088695ff02e4a7e24013252450c9c8dca98debda5daf453702e49e45f", "1ba49333855e95c7962af031f1f23df8ea2fb499a834b38dd5f57734b859c81e", "1e744feedd77107df6992159a8a93e778533c74755f6d73a8f780c50cb044431", "06162c0c655e5f119fd74c9744fede2d43338cc30d5fb1c16ef2f2ed4fef05b0"), ("269fa46eec87a096278f7872e5cfa0dfa766c540ae0307d4886b42c38cd91b65", "2be707720f9a0f907fa0c7b8395701867e15b288250ac6a59bd97d6abc06ddb5", "18a6edb7f7772a7c00dad5a8c833edf7fccd616a0778813915dc516a5943a438", "1ac23f3a967d3802521b4a62cbc47e294663f88de7c845cffa93bb10a49dbd0d"), ("0c6a648fc4d306ae5360d44106086db3954a4fff023c4715909b44fa3e8116f6", "25fabcd68ef8e949ae0b5168d569f56f24a58e8e3ec70eb5a44ea7e876120695", "2b1d5fe0bbbe8f0a182442466b263391487d0ecde083b4672cb94ba9c32c0a00", "10b39678811f5285ce0954fba8be4ede6f2320f8ea684a7899cc74289401da1c"), ("137af94983d439585ca9e153205ca521545d96b125fae89c235d0291a5c960db", "1a9f844eda52c5a01eb2c90175e840b3d3dd69311b4457256ca812f6339bf374", "1183d877a472edf0a4f5c312ab7546295d2ba69bf9781d9b9e2f3017318d7a45", "01d0bb207e72bd6556594a5683ad39d51c9207030cfaa9dfd37b3bdea0267e09"), ("0f8e1ac8170e988a19320b6f237f7624d6c8b6745e7c9fa6e58864ff7afb6975", "15c9f0f25b53efd58a98d67a5f6bf6bb29e54874c5a222661bb37b2ea389bf70", "0ecd22a6cc2594193704fc58dba86748c680d2049d8fa33c305ed12ff1814622", "138bc3822cbca6c34479f62206e14788555ea882fe040e9e3d69c1171ab3d648"), ("21ac65cb27265c14235d94918fe453f7d93ff0f16ea65225ec5efee6b255bc1c", "1f8de352f80085d528e5e4ee0783c2577e74822fcb8a0483c4e5207437177a3d", "2a12aaf0a37003ec804b72980640669e4cb00895a1b5d492f1b2bfb73a642eb1", "1b62a9094a546c652b6ca401b2cc144650d1a8ed6ed458a4c1d26bce2b2f9f26"), ("0a456e303e2425f5fc73a512a27d7ffb9913e49e2345f3224406286a7543b7a0", "1a1ee13779651a6c9be7dfb340ba40511aded095d64dd1870457ba3cbff0397e", "0210188f800b3a8e9d1ac93548705ba15b308fc5328b1c0d52471ff784cda817", "234183e89c60fe4006ca479aff55f622b83a12f3807956d32f5d55cebcab3a97"), ("2eb9ee8048c6768d14ea2f2966972a26573f288aaa71f6954b8fdddeec6f4778", "1b93e2d7f36ea7aba93b98d053b92f75849c25a9e2c4a6a95ab938b6451f3bf8", "21a9e5bcaccab46920e53d734522d4414437e87fd16d6e8858c2db5886319fca", "23b341458e42150a865d8266c9b0abc2a2faaa1d92548834498d4a14440b32f4"), ("0fb6ad7d5c8e08b39c3a0389ae9804745e888d70dca6740352ca6fb88180e9e8", "193588fb523759c1eb04aaba91e2efa6fe06adf350a8b2f7dc5f4eb530c4b654", "1ba1dfa84231a99e4b9e83e7b4e54b6c5fd3751d4977e88d3c6ed6ff878eaf1a", "2cbc9dddab9b1986bf64c904206352b719acb88e1d945fabf18de0d4690e5fe4"), ("24fea9f9ad5abf517a3663bbadc3a6a6b16e14c79cbd4dc0251e26105db3b7f8", "17d02707588a110837ef8666b0bdcffecfee03e44f86d6f1cb4b9efd1dd57438", "1de4862f565569c3ca9c8c1cdcf7d8653a7fab58212dd0a5643da7ef791919e9", "00fa44e4b3801d783a6c586cb33b85c7f78b4d05c7c6fca61b710f44a6d22d7f"), ("102ad786529522e4719c257ec557e62a6a02ed6f1fd2ddae3426e4086234f2ee", "1b37ec71e12d4ac3107fcfbd6d122cce610bb64b1922df0db795a8723159783f", "1a1ce58aa483d85b8f9e937e138c2a4da6ec96f82db7e13912f0ccf2c10e911b", "10a4e82ba762f5c04cb64f2c960da5b43b28110a8c1da843b21a79bff7a36abc"), ("1f07f00d4175d0ed629c928859cd4997ea72dc29ac39f2217e943e6eb809eedb", "1da98ab2ec4d9c7b17579191aefbe75753b6f2f79feea67f82aaa7105e237e4b", "1e8fffbc00839c293cda22b7cc9871ff27ddb01694bcf4270a97d9c02287022c", "1036a3cac45cba7f5b94db476b3534382a6fd8faf0367577894dab35f91374a4"), ("16c07084eac0ff3c98f39e8eb2a728b7e05af479ef9e3cf49aaa101727b2113b", "1c5a75e5be775b2d8bde99c119f2fa25e13050376f14e17cf7a89c6bdd07c62a", "20e11b779e1a9fa60f0b41d65cfd432d24c6766d58e8c853b785b1e987b0b733", "1e538e7b6e4c2b81ddec326af50593273d82b13f1eff9e3d0403b0c2862bc2a6"), ("006a5418b136258abdcb539dc33ee5df3b8e0a8f6b321412b9b33fc684188a48", "2cf7348d12dec084f96246c09d4aff8d134dcf7180429d2657643fd45472279a", "26d44173fa492ca026197e2a6ff4c9e67baf090f90f65d72154084d12d85cc15", "05e62a756a62607b49303aede7f27d2e8f6c820e638ac31b1131775c0204b9fc"), ("1eefaddf8d5dcf59666df3c96fa15f614ab963c0e9f5860cefc4973c5f8ea294", "0c05fd3c1da6ac7a8fee759af0f665c7de2edb5760b3d64a6da08a84e8c7840a", "04d1eaef256943094fb36c65d1e490096449efae625f2725fecdc3059a4329e5", "244f559d222ae840bea52828f4e53036ab140bebbbb7b4142acadd7016403cc5"), ("21d94dae0dab11e2551e0cb5f51d9537d50fa0e94969735802da1f312a62cf65", "00868a642b4c35b5799ec01e7689e4516b5363f2de53c637f01b55e41313d9a5", "2f936516f21dbe1402a76b89d57766b8b05e81d39eeecfeb158c594dc46d93c4", "0639683d71b7d38c241df32775d1d105b9992125305492a7cac65be2bc9ace11"), ("18ee5832659d83f8a5cb16a82d3a0d98fae40d4e84f3f9063094f22b7931daba", "2abaccc1daaea4287619b53fa9f99f3b395beba5ab147ae2f52c4faa4d5a77a3", "165b77b25ac382c511e5e6018079493c0a7afc410c82157e481effaff46e7f01", "2a9e8cfe8c3a58c0a363763c07c6b4e28c89fdd4356577cd4c7c68eb35e973ff"), ("2d2453bf079027757d82c23692c1fd075f7cf6395c2ba5319db2a363b4e8673c", "1e5ceafaacff34e25487a528e33626afe9df8a67095d6d275f44029717afbedf", "2ad370e1c5a9fd7209e49ad1cf543d5bc30aa6b88a82e10b25f8e157e948e8cd", "26e67661f9ae94ffba8620ede6bf6c0686cb2bf0297925c883c7e18a0afb86e5"), ("0ec658bb2c532f56d7ee46ecf8118eb6eae8eca89fefe1485292863770bfc943", "23f35e7e20324f07ce9a0a403577e4027dbc415741be4213f4a00e3eb329e97a", "02380e34cd5c83470ff560f5973c6d528d7e4133c96f78b6927fc471af633660", "1e8330a950f3d039dd556ee6371354046c77901d2019dd5b0c275f9e8201a963"), ("26c98d4cf794da4d663792f4207087f48e6efc810c818abaeed56f315c0f3e7c", "2944ccd98a987f975593533421eaf526d536a8ee7d385039b5751e97dfdefa82", "099b8c2d1f26b285043bf2ad2b9de3993e357c2e839af0d7ce064eec0e887895", "286b68b45b11b6bbc986ca136e3967cf53e6bf6ce0a3ff436252919d58bfa4fa"), ("0a2f61ad3f10fd011409de147dde92d1437c826f4b7d24d4a77815855a677610", "0117ab855cc14632608a5a48656f6ae53d0e88960738977f03bdad89d0a2c1db", "2d381b9cea4f8bf2672e0edfbbb6b55b50465d5bda1ec57bf4e0d24ce8bcec43", "037bafb36d772cf94622e80a603f3eb119a2bd4d5ab13beeb35235db346fe440"), ("0bdf2c41292b3b9103dde2a58376956d02b9ab36be6e6db4a3f4c50bdef2553d", "1efcf21359c12851bb6ce7c805a3930f57674dfe05a207e6efae6113d3ff10e5", "054e17efad2e1daadf82a2763216bb0aea88fe5acd6072123efe2c8ec811b525", "2ccea9bbc790194eebce4abdd10348e2de463bfe52654e7167d8a8bed9e6a75e"), ("1d147b72028778286bc3f0a0f01afe226614c8079c775cc3f6a2247d84a9c241", "1629d6a36bf8919c226db5f76ff4745307b1c35963dc2080c808fae97e49a28d", "03b65ef42ee86db3f6b37b92afdb56006c05fa70e5d7a55e963ee7b67cd9a65d", "24d429e850a72de7158e028ac60664d90bddb8dba68db127b9327f1e109cdcb1"), ("2bc0ef079e88978afed28f28aa1ee3abe754936a807434cf9532672223496fa3", "1b6ff254f7bc2ceee19f9d8f889235e0687de9da704d382e34795e1985f00d01", "09f650785006c5eaedd5eda2c0d84d792511c9f6aecdb8817850deef13f241f4", "1f984fcd3659418bc5aea5a7d7b9f905f124d006abc3a3916472d04890f849ff"), ("2ce2ecd85845df3237f0cc520f607450da61b9fd505c29f096ce8e630d08325b", "0bfeec752d8720efdc21ecf25111c7252eb64a9dbd0703db5117c1610ea8f719", "12853a1c5a98e7fab4e59899fe0abfe8b8b62b0d857a5fc78d1c866f7d8e5a1c", "290935f4527b0d22ca499452b7e188dd9586a69b54e98e911710d37c272739a4"), ("28933603a8b4781d7ec7ac3c26ce14d9810583ad7388e622f397de1d0b618607", "1cdc4fe7917fcc5c38587093e1c763fd106d4754460f96c9cfd7dc72d89de0f3", "301eece079fb8256e0123a47fc3f3155a360e0f13211d0414db221bbd340a66d", "23c561e0b8c56faa71d723d8488816fc9fa03941ac5f5e566d5fcaab1db224ff"), ("229f5f4cdd3a777e03c1c57ca9d866593c54810f57a642292b3b1a91b98b7647", "01b609644076bc0d73a6cd47c75e9f36b5cdea17894450eea553cc4e67c6648b", "1ecab764b23683518d329c9b846883ffecc8bbbf000c051e160fc16ab2b29246", "06ccedb479227cbdd919375caf8bb30d5dc1f2fd3210f92afe54713673ef1227"), ("1b9850b5458977017d480cca90b5e22b1be9447128305e403f45fe2e605b76a8", "216ce7c4fba09d95cb7b95922750b344a2d8c8c5a80cfee1a4a11de90359fb8e", "15f138297040d976af436c88b68a7066a133c18b950b2cd10da0f1065d9ee056", "1e71b32bbb6a37aaecf74350e011b85806104285d850d2cd7732d0c4dbbf313d"), ("15260433c22d08dcd905f2170b352864b83279727fca1bc6b076a5f09167fbbb", "21c8d9e511b57abebf0fb7af21a2633fa1f9be6f0e617cb8c09792b135f27491", "0346f40a58ac0a8b4efd154171bdb4f3e4fc90d3bc202cc0cb933b37a28d66c2", "15eb087fc8391ca64629d512238eb17f4468cbbb1a7053d5edc0cd3e0dccaa28"), ("16c76560c1846f7768f14a74761857814452107beaa6617687fb4cbf825a18ea", "22bcd3467ed565d3a4f8ba4c8fc0bcbc9cbd215300d5b17ebc5c548ff290d005", "1a02b6555b9ab1cb6f86dd110da00315859a1a04b538afaf4c60bf5b63ce5140", "205e292cb2eae5994145861ce90b4ac2fe99749edcd6e4a298b31aff9390c66d"), ("1dc3405c6869b4be153c9d83a2ea711512a22bc6e8c19789e1e1c520b9226ca6", "0c3134faf2912ae69f63be6c0f94840bc429e01b1aab8cb3b041b0e565d91ae2", "2a41337b48061270ff4dad14ae087a29ff0f9f0db555965b17f2165f3fcc4419", "2cb2dc4e4b084767175b1a05aa1f75f67307cafe47de4239b6c2c12b8ddfbf18"), ("16bcdee1b7d72367bc5673177e94838379403ec27197c138fe4ccb08fe7567c1", "05b5a8a6e78e7e541ecf51dc2e6c8b27fbaa1b38b4eab5c644b0cb05f6b04bc4", "0f96d4d75e447dfff40821cdcdba2c439ac9b7ff2f483299f11b6d04a5643172", "043f22076c5440a82597caf7d6cf462232109dcbcda2b2f72a9a9907b50621c5"), ("19c234de3baedd09bbc65a1ea331f9cd3eeab41b1ae6730d11781148bb2f7689", "254622f30ce6a9fefb2417e0b917a9c60aeedfe15e10e5d62046b073290875e9", "272840459462b325e4c920c1765a39ee2b8aa0358f7e8bf439f62b0274a28556", "0f6b1c6c29c1984b4e76b6179113272794d1347380f962566a99603da4d256fa"), ("18a4b736b6c3995c3014e8b938e1c84c17256d7b4d60c7c9538cad043fa7f6d4", "2c2b963120e624b06121cb6efc7613f8f74c77169b2fd20be9e6cce7c71e0a43", "1382978d7461cdf75935966050819723595523fbb9bbef6e9dcf749e3f4441a5", "016c09fe6d503b3a6e0dcbf34e2d5d054569419705a8936aa36d457ae2aba6b7"), ("063a22744cdd86b9d11b7432c6e603a4fecb6fd56dc9bd6266eab89ffa1fd725", "171a303d1bfc9c5658be258512fd3844ba356e39cdfc2a4a7e6a353647b8f68e", "2e3a5f38c4f0a1d1ba83273d3d5a6e6015962f80e5ab834b8cd78379a96014e9", "2724f3c231270db66920d4f17f2089145261424773ef4c6e250ec0ee5dc80307"), ("29726057dc512235c3b413715038e32b90ce3c7c2ae430dea1274b979d1897c0", "20f00e4f9fcf8624091aa0ef4a7702c736b3af012d2cd9bf2a482b40cb103aab", "2d166fb309a18348dafc3fb2cbe527f2ec599d0544a1f46bc3c08ce2a42bbbd7", "141c3d67701719caaf3385da85ad86d959ab7687f8eb7bc9b48e74ef6e54c9d5"), ("195755889954fc0edf551fb291f29aeffd7f9d72495c3281ae97c15961fc9028", "0957beef2a33810d569c1198886ac31c762d8effc501c022fa89e46d8f344a31", "043cf9f1c9e0586e40daa11c5082221df0c5b164a680e2ef2eb751874c1df67a", "2a7c502d1a7d84a87d4453c8c234f62f4da1b1da814c261976d3627f3a086f43"), ("1c662d459a14e7620f1a6a4af581dc7e17aa207490841b8e75dea093c89fd116", "2fab515f8c44211c538cd079c1d321a39a663901dce47eb8f3fac6bf71c81c1c", "2577c848acc17b922e06fa3a9e96d00072d7cf13f995ba19db5fa29ffe5b5bd4", "2b481bb7a54fab6337f97bc5a40d5ee229bccbace657bf38ed367cde30067692"), ("1bd9fc7d3274c8f15bddfa60488081947d848b18711d99e377754b81a98a34e8", "0e63872e95d614691cb3e8dc6f5dd5de96cbe0cb04066c3364d910aabb8d82b2", "2a2b8157175edb5b8692d40680014a268a6f868a947017b472e4d71fb6d88c81", "1919d79c01b8ae6e9ea070992ae76a5596ff1259a28421b1e555703a7b79fddd"), ("06f582b8234e2c0294bc4dafdeea2cdb5f108d827d6546ce81f716f8e3c2cb6f", "23c2d91c7bb9422e0a403acaa8f98337f2d8f4d7fb3e689f6bf916f01eed4948", "1a20e02bdccbb63686925f5cf10c4679cb20ba09ffdcd843e766b9e72a6ba117", "1eeedaa69b60f22882382c3a8b32c59fe7a1629c3f8b14d8d2d650c047b4c1c5"), ("060e9549eed205f8823d488a57ccf49924f7ea31170e3488852a010ace50c513", "1596b6723db5849a53202c47f304883267624cd15f19d1424945e0ab03e66983", "216b4bedd1ad34d7043d6ca15f57a7881c34a6e694856bdfa3c17f985393a115", "28b862a3f85e347553537a44d45cc5527384ad87f37f4e4449da39d4280ef26d"), ("2a67b88526c38eeec9b7de6cd6e1704e8f4233dc6285490249d5a6beac509686", "24df45f30095f6500015e5f21824ff71d18caa9f52b1073a00c8953e9d3d11cc", "23422694355d55434c54bcde603526cce3a6de45fa7bcd081983c19a8470af81", "1a005642771a7fb18f879a240cba7c9650e9aa891ebf5c80ad497d990330b21f"), ("1ebfbe2ff373dc3651011a6005b972d03425be787767f8bb06934a8ebaa3951c", "1d5d47837cc77ddf67f784f9e3534bc912bb1dd5ef6de0cbfee0d74eafc252a8", "132c796bfc66fa1b348ac01cdc5b1d69250037ee28875031494efc80a2dc6ea0", "0ceec5f64a1d4cbc5973988b6cb0885575998d4eb20455376d3d64dd6320d074"), ("14a98e903141a7534678650927b73d4c53bd96ae438cdf0c2a5167175bf6cc42", "2d339954fb884b7ed6a7c42d60a969bd5992c8bf6796de7c2c86c00452138e52", "2251cd1ad913f05365dfd8f822231500abb451075685176b73a701170a0a224d", "1e3704f8f5b3aa6f9fd5ea1613f035ad10e3fe31256cd208d0146b2a240b37a8"), ("24937eb1075fccc55bb4261d8b09cdc033f51beaa445921c7ecbf48b3f62015c", "14fbcc30838ee55b410d9bfff3e199b9dc2e3c789182ce55e3ebb6bd23d8440b", "1c65dc31019d08b03a839dbb2fbf7cb18cfb9f2c04d1138d2ebdfe33e1ab1c45", "24e189266cbe7acc591490b620ef86207abfad570621069d6a4050f89203af3c"), ("2c926124b5c38d226925a26056f06dfcf8911707fcd57a907316376e92f67038", "0f634b9ee33161ff597c6e6c9da308557f1f76ab27629b6acf44c1a0a9507991", "2fd0fdbda8476c35d63826331c11e90aec028211867b2bdc5dc36fbd5918d159", "205b93b32f47a80d233cc2fe152699be156a937aea86924c618f50e10fe9fd1e"), ("2016f12f34d87f2166454af07d576e123cfbe55dd5c6bcfb9d9fcc70e3151fc9", "286cd09a0c992a7a40505b1bf2c35d6c54477bf99c55c321774fbf5c2a52b2e9", "258e0ecf1728e8907d816b00ad399de5211f78fe318828fb45ad29a834887fc5", "13d328fb4e7a10fe71df9dca09da235a06ce5de0614c6d189c94943463c61d5b"), ("0b2001207fcee8e745f14f6a394449695fbdbbd3c986eda44b9b5fb9827ae098", "245eefd0e3bfeb4d6b014558a8b82e1b91460645cb2f0ac23498564204a067dc", "06f7f4a004f77fc53fc76abd95cc0d744c27687b2cde97a62e631013ce08e9af", "12ac31a64a2ee60e3b3f04280dc398dc6fd5ecbcbdd877f29d401cfc81973164"), ("06dbf51c2353b7dd484aa33e7e6ba7f9da3774f56a5efbc5ac82e730e502d8c0", "2d3315fce99ec5bc0c04bad48ec72a15ce8952b61bd8ea2e9019d7df7d9d5090", "1d25cba04ed38b15f7defc989d8d98099c8e98aa52f0a727edb7a2f8d746d192", "0a71cc882ed6f3fca2a9f6e97cc1bdc8592d573f0eb0594bc92dd2e3a5f322c7"), ("1084ec61df9e5509b725ad6dd627d1e762ff0ce500f9438f7f58209e1fdf2141", "057275539e6ab53de38d9978e3881c087ddce9f03c48539b7a69183b6f746774", "1bfeb0e95be4f29168b7d1117ead4bfa2a2020b25fdea1b0c1524a833096a2ec", "020a8270d6b9c92b39d830982e7b8a5d97a072414c4bb3fe2f088815dd6c8348"), ("0437e156946bec89baada2713675db49fd4b17b25ef4d6ae4dd6e0716b41799d", "29ecbf0f9d54e6d774452929721e1c6c7f544f5b0edbf0c8bda056963ca31376", "0ef84b6b730757ad94b870739c76d5a557f0380c538fd47a8cc5515267b92030", "1682f3f16b74164c6cd58baa014f58d234d9eda352f69521534874f499ccd85a"), ("004868e9a99bbd21e0615a7bfcf3f150f7b1e78781503894f7817681efadd427", "2f1b08183a295f1a88d4c38bf830af05b7a96799e2da5960ec13505bfa648762", "1f848788737bf6ae92d4eb3b6f7a5eb0e121881285019b36b7d1911ae00c6f4e", "1bd030dba3aa4b35b94c0ab0cc7d4ecb91d39dbbb5641a4bde36b3ca36a8e812"), ("1f462e17872d2f93a62fee68d885aa869d427c55294149d165239686c28a5ce9", "2b93be6ff810e80c81a145387b8d7d9d28502b1cae903d02e8726aa0d161779c", "23ff4dd8dc19042fe9ee46940cf3aaa33dfccb16f94f9267c22f2ebc93c6e3d3", "03287650e04b350da96bd1c10802a172083809e61eee1eefaf53771fef698ad5"), ("27f8ee87c383f7c92a4212e806aa44a45daf5ddda83a6043e7f4cd8af225c5a2", "020171d0a45680a178ed0e38c7a8349f72e5a4283dec0b03bc94e13e2afdbe5f", "0035501633ce57a7c3719d008b721ff61e89e84d90b9a38f097e59574d080ce7", "0204edb05e800500111e8172371c4ab0f42027db974de89a4ad2c9668c47bb12"), ("0cbf62f51a5ba0aa215ca49ce5c9a2610f8ca4fc40d732a3615d27bbc18f549d", "170a2df925364120f7c3dcd485cb6819b61ad0887baac5a95f04a77a65162f0b", "2ebaeb24cc03e537b2e8f6c8031b62318ff7496ef56d99e7a47c5e8a940904c5", "212d09f49c291db8d5eca74cd307370e09cecc52709c1e93813ec6246941ec7b"), ("1e4e93b3322d19c119421f177aadc871c4b0eefe36d715933124ffae75a757fd", "24a08d99bb4cbd8519cb4200047ea279544887aeefb2c9fa0bb42cd3f2a61e8f", "1108f3e20f6e3665537cf1d42d44fe52a5213d084cb63708d71f05bed30b8f05", "2301d25965bcc33045e5fbd70cf5a111d4f3247f2ae2c48c7f51bf50be06c625"), ("2165fda03b39877db8d39876271124f99437031e2e1bacfb271e6e349e97dacf", "3003a569da8c7fd057222ebe6557fe60ff48fe151be302c363ce326743b1c5b9", "22df3c9111a734c206e1a07ef1aa0a79a95a25eefcc61e01a6aa6f03d9515803", "115c7ab8eb0120e6621f39305db419468785f08709d1c818f2b9c679507174bc"), ("0ef44c164e2115c569abcbb1ec212aca8187ee334db6c268ea66824ab2c5f079", "2b4238ef4e336f39886b20d147be78ad4ced3d8313bcef900512b937cfa5875f", "1ad1f8845dd115a0305e480b50eafd04f8335aafcd2f0c3164990eb5d96facc3", "139d3b52f927aa56742eaab3dde9ea4f612fc37fdc4fe18873c544d155829ea2"), ("2e541058ed9cce5e87fd883bdfcdc2c75a593124303ec3164a94c41c00ec4cfa", "2af142ef8e61af5ffaef4399208ab5e9016df8aac3e965501cce8cf432c06e39", "2c83a1805ad6e6c1745c774e88be777ec81cb8710b1650b5eee346da5748675c", "2cb135942ae9dfc3c04a3b29cbeeebddb32ee16baef27b1c11e97a14233ab18f"), ("2a543b3dac6ca5ad07fdaa1982bdfea6c3bee7be72f57ea1d2e59021224b2b8b", "0fe941037289a946c4a43452ac0e91c95bb099f6886f9184639c5a318f257ee4", "07b1a5a5307946520ac385880a0954d26d64e48f75789f0ab2f414261f7edad7", "1b24aebe1d5d9148423cb2db7891e24a7b9af98f8fb0840c0636a450ee91f622"), ("07047183703463b95120d63ad2a4415f8e87b36c18422bec3e52aa1274d2c31f", "0f14bd9c1099993c8258dc1dbc70826118ef1db7cadc4abf6d3e4c489676fa93", "21d45f3ce6e018d2567d2c7a28d500c106c7de58d7ad4631c196fe77970d3b0b", "08075b8147575b19b285b9e8f480265300fff16a0b879f1c4b4cbfd036a46621"), ("09df3ae3e440267719271485c3891ba1133acf14903f3f029d05ace824fe7b3f", "26b3728f9856f780e934daa0433cf0922bcc0106b19c40858a25d6581433b177", "1db2332c96ebab77bc5d5f8c5796a33fdee7dcf6c1a2fdf21fe347f09fda62c4", "2f5648fef89eec8d1c5098c49e6e46e3cd5dafd1c685e662d08036e31365c1a0"), ("28db760b8baccc3d4186f5eb8288aa6a6f311ea1b4a1f7532084d445dcc4ec2b", "0d1f6e090f64573253073938937f857f60ecd059a9a43af0173b975861d20ef7", "2da639051a3b9db032c01e296a66751c2f2748db63369ae1bdb490b995101428", "29632dec81034f53119832fa6cc4069d4e34fa70b9e732f6d1d33d6398981c1c"), ("243e03c60762e5867f6fa7bd2ba8ac305598b90522d3cb821389f5bd1b423fcd", "02db09919e9e2de4a639ebd21e35731f9e3b860a13248af7789a965d20986545", "24047927e10502c88e898e2874ca277e8ed7084cc3f3e422fdcc21b9a9162e25", "092b1a48fc86716a1b05fa5849f75cab119bcf15902206142e9c529eecdc4dc7"), ("2f6e9ca37d46bd2b38477037da6e6558d7aec008159f82682af6a63147f9756a", "262848868759b7124fcb5b46887845dc95f4186d4370c84d7bf59927dc5f4855", "00ff9536ddd6f138cf95c048d6e3893c3b61804209e88acf05592bcba680352c", "123be575347431ddeed5c4364f6f12ec026d38cfc3c48125647905965b0f0913"), ("0f474cad1ae109c99dfff36bd57c72e80801ced111a3a9735a09389d21605324", "10520b6da1dda4f10a58d0821c06ba23940169e9666ba8eb6cc983b17f90a301", "22284dd479a3bccc9295fe09b9e669445094ac8993ec1291edca120359bd7468", "2fbf7e19f5150f462950771d92313ed42fdc02de83eb79574977d1fcfdc5e060"), ("04ce1b4d49277adfe92a9cd1dc98212b574d9852fc83614c6522b533ad4aec6b", "18e3d17db8ee741596f7fd77863a262ca05da64c3e22dd6d3ad75bf34cc6410e", "290fb3d90d262aded0a32e91004b352250ef8fbec6d5c513d692e1280bddb6f7", "0707ca12f9f4a7958d092984ac4aec450c95abbb56b77a9df03e86618d142173"), ("0c69e4e87ca849d7c90fbc2c08e26a87c2f9de8d0dac25220b459f217023be7d", "07f47312c693b47745e4a3233602d6780c1994b88ffcc908e2f2e465da6c0c0a", "0b649f45c7c167c4a96f24a28195e6f37cda444100d03cc1b073986ee018b371", "0416f8cbbd262fa12fe97ca626a2e6f53b97e28e48c5e7ea34202320f31e311e"), ("0fa01f781617585f6ccec1b7f732c4ac8893f5ec153f17dee2b117ac1d3292e5", "0c01e9ca67ff267fa0f56022a4b198b0e1751c9904d7289dd7688cfe00cc96cd", "028c43bed1ce11c07017c60500ee324c554fa89d1591c46d11b9dcd9a608fe29", "2effb1db9e9f51cde833048d371a79d34a13a5efd9b2e25bba100578bbeb6cdf"), ("229139d32f960c8a64b3d7f4aadf9af13dcb42824996d448e8dbc3a3fa697c81", "104370b1a652b88088ca79fc7e1974998c757bc981f972f8c1072a3f9ce10d31", "08bc293f1c23d45715c8dedbb907806d84cb46bd8acf474b7eaa63f2dda84c0c", "0cf81ce00f34312bf9ca83fe4cf17ad56949ae1059bcaa6c13a48df44b40fe8d"), ("2c92c4cea980c84c970a1703a61e57f46028f04d8463fa1308a116cf5414420f", "06ce2ec482febf916c0af2b973f2d7e5333c86f43556065575e11d8355b800e7", "2a020950ca4fde429d3cd101cc809185b51e0f8886e5ee643deb5a50d451f4ad", "2dad18e1ce146c9488aa108115e08234a12952acea5985af007acdee6a58e5c6"), ("03d4280c74ea53877572bdb0a664bab306759265bb43ef7cf6a308fdb448f590", "24005a57b337cbb4d838f6346cbe1d43783d220137c4cd61e34b51d9710dd25d", "0901b33ca4f929f524d34eabfa27d502620c844458e466c087b94df8ef92c449", "217e6c80c8c6d441e64eb974c2c14ea4d944d601ccf580037b0330aeaffd6d00"), ("0184c296a818e7303041b9fbbd6ec95fee811c31e76c99aa123633ec88dd8256", "101c3e07fa0b036026395590fd1b15a62f334ed0b35e0565db188181fd7a77dd", "11a18407f4dba4c893758f6bd50b77ecee178815ca1592c82bde859c4eb4b374", "03bf31d5b9763af10959fcb381887726183eb8d6f3a0340bbf94e24b6056d059"), ("05433766e056bb23bee8405a3c4839277568d7ccae7fb46953dcdd82d190fe13", "2bab66e7f0a7297ad1f88258e1d970f886d741f49ed84b7c646347e4292271e2", "2406de17f73c08442b1be5168eeb5cf4e3c2f87cff3b676e03f2840373e1f0a8", "2b5e3209407a79d09eeb880673dfa0527c2c5f8965844ea826b34a13d84e069d"), ("0ac9845db400ba70c9657088a20774e4fdfac9c074993efaceea81016274e403", "0a8fafd33d38d8a8f12be9dbe7755cf6bfa9e19e68147405551c5c744c0b861e", "2791447927b76e30e267d324441adb856abd090b995fa7b150f2f5857373a40f", "28caa082f2dd7622dd3e6465838ae2f659cdceb20d824a93cfa32bcaedffb177"), ("1de52fa7c555dbc5d579ebba2dd8c16fb6ca186c27dd842c3a40a80f57f4479b", "1d4dc9c6a3d9549723838928063c79db6eef77df749fb3533cee587c299dcf85", "2692b78fc5018379543f95741c358bddac857947e8575a38763c312ea23bfa4b", "2588725673edf56f18e95693ac215dcdee30af72435149d84455dd20b1f66b31"), ("23157c6387daf80ef4e2fde3e3c0ceeb6e900f6f762ad32ac69fecbcf5dbd599", "2a45f98b3a8b895135ae2d7165d879d5f8c578a07b5c2d5b5e3165442288ebf3", "14165b959a0c450a28e69454366b68c6eb7504b89e7799d648a4cfad9da5d97c", "0a972c5642626ed86e46982c1ab45d13483263e2f0e4fb81da2ac1079778437f"), ("0a1bd050128f0c5e806d7e3a12128fb8290d27e01e2f48fe10dd1504da1f6495", "105bb02f8880e12abcf26a0606a963d6d2b7e8a0a0e1eb8f6a76ccd71ee995f4", "03f276f8fb232a4e0e62cca7fd449942dee9bf9644134ac10e3b248d061d0486", "03c7fe30ce1d7304941d435b2ff9517acfcac7f9b30244f6c3723b62202f8fd3"), ("0dedb747b9c2c9facd59fbf3fe78f6925095f7a8eb5ede841da6c8ba7b8a8ed7", "132d5fdbc9071bf168f35a77a263583c18f36018e42d822e59b5005e2f28c472", "23df03cea2faaf652118db44a3c6d077dcecd404e1a4a57a40483560a25640cb", "1795ed2e56dea929057b7c7c10b81c1fb338577f8ab252572d535581a5a14616"), ("1b6fa29aab51b3a3b9e613f7703139dfda9e57c07a3674f00968bb9ff1da55b5", "3058606b3688bd1897fe7cec05e44659012d87866fc17a4e4cd711f637738fa2", "23dc045ade3b4889bba5028f75ffd0bc0b66db711c741db57e6bd3741a647f89", "1c92dbec9aca316b943ac02da36ced9fefa577f9bce87da082039ef6629d64cc"), ("0e2a7ee490a9704fd640425089eacd442b42dcb9bd13e084f3f16b3ec62cc0ad", "0b439200eeb4fbfce182fab9afbb43691476553ca0a8382287d1e2974258b899", "2f8ee05602fc181dfaeeb0a34a3e3016b83e32d2b80a9b188b6e4cdafe71c869", "10679e9ebcdbcd2504d3cd3541f9c9fc2afe17d83e5b2243e359f057325fd713"), ("0d4a290c0c8733b25ce1060a800d2c1da7e51823ce19c04768fcaf306119f42e", "1effc2b9c8955b24799f947ae4e996ae436f261cc450dda5e90f9eb818f705b4", "12c55d676399d1db8cbdc8d81f686b8917c23cff84d65fd20490c411df5400f2", "0f930623dd8abb43f2bea80ad2b131c002ac73ee4fb962f1967bedef495fcd05"), ("29a8cc9a3f8f62ee24fb22590c560b1ede190f9b728fe53c41863534ed5a4083", "1774472f89795b38b3ddd53575c80eee91c7e88c11b0d22bc90aeb9d4fe5d57e", "21608ad84cc83719879635681391f34eb78e458e8c9daacd3fb330beb96a8cf1", "2ce42eb6ef857bbabd1dcdecdfde7ba586da7967191cb845329e3b9c007dd27a"), ("2a4cd0e9cf28d117129254e5932a4c16caab077c2e3ace55ece1d1f5b1e82f47", "2d1a14002e334469cdb9fc17e0dfc6ef9bad58ac74e85da5b38b84e61d236c15", "16f514c3582f403f6c07d95c82a4b31d04679691068647c5797023db7efa06a1", "034213d5758a151ae290c6020c3a6ed4524531a64adfd1674f8650ff5050dcb4"), ("1d4d97914144fbd6e44b74807fbb650d0e436ca89b3277c0d9475105167cdb96", "0f907c482a21ea6f8ac2efddd19b27ddf89496192faa3ebca83add263310c5b9", "1633ebd8debe113fdbfc6bbdd04e2775c88616467147eb1e86e1b7cb6c5e89ba", "2be05a001d0b53f9543da75027ca348cc4bdda2a85bd4c0d257f2c691cddbee1"), ("2277908676e26fd09173ea69d1b2dc67c2461d8ee2c1babaded13c1464fd527c", "1c300f22a317f59446565d06bff8e91dd2a5e7b37767035af120ed751013bb52", "07bb91f422c435bca983679864ef48f77fb8c715529b5084a8d48f5d22d6feac", "2b5ac8e78ca1b91e95397006cab7056f0b48933bee4624ef15083b82a2582ee0"), ("2af0ba7058bf57f868f8fc20f31c7d8c492d553fd5a0f647fad3a1410de8ff8b", "10616cbac62bf58921dfa5e2531774a1c44cf5fee9f07aca85691ceab16c492e", "0e715612c1bc59ebafc54f1323e10ebe05a374af6de51b9657fd8aedc3e44992", "08c6e01b3ab6d2daa55fc44db35721454c2d3db37e189c5baeb175d5db635579"), ("13217d638ff6a66eaf01adc11ca15a37c22a23c8a744b9639f5b2f992b01d8a4", "2dee2f6e19db1a29ad84973fe7f46241ea8d1efbfbe374649d637912f4912e77", "2fa8ddf001c12e5844e9c7d96926eac1e9a565ff340870e2305ae5e00b27a556", "2c5377a79c1770a57f18de7e544adf70199dc0f37c078b2155bd99dc7e50b833"), ("285cc41072b5c646bea4c7871fd512d64ba56e2b37ef4d2b2ffce3ec296bf619", "289fe098a1612b2cd2d5aa9ed48685fd6add0fa99a937b30cb03c7538731b59c", "100638ffa1e192aebbe95e38b67ea6b9eb19ea13a21450e465f2b0ead86181fe", "08f37dcfd7b539a46c4116c46ace9a70744d59d1d1f1aa6e37abafefa75c2429"), ("17e939688579106932cf245bb54465a37d310b9d5e2a09c1945626be823219a7", "1d080b494ddb6564b3835b2a5cd7c6e4e52317692855044be19df72aa7cfebd0", "0e0b69b76a4e042304e688b86e7976acaaa12a3c64125196a74302cecb4dec10", "033806b2f02e77fc78406e506c2bc501f2625672ca4bb124805f2a802cda423b"), ("0891282ab1ba280bde1f846a023be64247fe84b8e946334b21f8cd9bb3487ad2", "015e4d4fb57165fddc5f181ee5c4fbc775353134036543395f02df1c471de530", "07f8d166f96455f10da5f80aa03d2332581da6a56c8c5b5b8c3796ce38d0c7d3", "27d654933add050293329833bb1cc96828c46133b3bd89934faa84679d45a6e3"), ("1317d268d761f192a427726b0a79dce9d93ef1b81b16b615374730dcfdec633c", "1741108d6a3bfd7dbeabcc585b4b51a01be27d4dccb7366718a72fd02104f3be", "11e89c57882a13d8e8ec3afeea52fe12023262156b2742d9d16d22a04731481d", "08b202556c5fb7ac79952359540439f6b27dc79d701d16ae2d1b2ad570b8f6ae"), ("05a6759c1e84ccc42ad0454e9684325b98fdf72e196b03ad39168527b51327ec", "2880354df097a3a449bebcce4b7aedb2e61a6be0675286e94d7452622db662f2", "2e46a7c09108a140ec4f4c829aefff422aa43d43daef0bdaa08e8e6fa76870ab", "02e3d0948efa4664cee95bfef9f095d1edd6ada69a1ce61362966fae5512c5a0"), ("1f531c51952c75f5013b110f92e7dfceb93e8f2bec57218f9c8b56b3192d186c", "0fbd59d68302d2ba8b402155f22fe19e6fe0d15971a3f8344ac92c70a88de7c2", "22cfa10643889a7767229164944ed224b0b82dbf84d8206752fe78f2b5f308dc", "0c22b3c7e517a4e727c7fe7dd5019e99f05c0c331acfa38aa8d58fd297968ec3"), ("0755b97b8d263d48d286cf4232bfcbd104479b81d3db0b6ad348cec814fb6afa", "1be6eed5b759fedf0a26c3c5acd878352ddf67eac287eabd4162ac56fb637757", "0601c7862e91c33e7223cb38a8cd315a35f21b77edcac35ad2a5adaf33697d9d", "18d876d5e73fe1d5f651b93354bcf4a29ddde31569b7a2489f91f5cfea813783"), ("2354a2d5a9649f6dde86073b562e33faacf4f63eb11e6419100970f0dd4fa004", "1cbced8b8f744f87dccd9dc07e58f0852df5bcf1fa538ee48690ca1e607eff26", "2c1ed0994d10f2f92e5e40b3de9ce8aeba412c6ad39b5684469ad8a08d9d9518", "29f5afe12ad8f90ff1817258a341c2979ad1698bfd3156367238f1464e21ace0"), ("0bd019499a6db76344278ce44f55613bb160f79c640f8278f0bff114b9593a5a", "1a34e3a17e7bdf64c8bf8f650f1710fe8d2e43fae19da287399efeb89e63afdd", "19071da40b6b3597bfda7371dffb5f8572e47ba54b841f4cc6c81239e4eb4098", "1ec07361d17e78a43d10396dad484699d0fc293150cd19efb541b4cd2866205f"), ("1aaa3bfbf2ebf879ab59b32073eb08080bb4f9a84f8d783a54cf14f453b3a0f7", "1944fa9791797ce9d625401b7394416c1c8439b3afd60a4053496d3c54b27718", "0f25c317fbdd2f36cfaa72bde0fd8fa8120912b8de16113557ad991b92a2def7", "07a19351ab0fc90b07b385a0d96c6247dba3cad0774a096fd71b58317b697f32"), ("1ee7bd9df42de89232eb3386edfac5d6c527e7309ef9656bacdf036b9f667f21", "22aca23b03b3503ad9a32b499c0433ede98412ff8f39f5073079dfc5dcc23960", "218c83202f334bc83095c4b93fbc0d997df873e00e1093ef448098a94e0ee4dc", "1dd3435ea287139cc6f94316620d1d427fa4c3d1284f0ca0301492c1170e7bd0"), ("1df9836fd4a405aa69821723a68ee327d3dddcc3aff0b26214455b19b5e5bdf5", "2d155f673c32968825d160b29086f7bedd20e9bb4997701e587332e25b36afde", "0be8338e6eea2b5365eb47c549f4128f16d610378af2ac86ebfa0511fa4cd222", "037d010e0ca341a1246a58df224858571780af30ba43c845221ba5017c4db9d1"), ("28b2e465a7afe8468694560de607ed305a90cf772eb8f3fb72be8efd6a6b3e80", "25aac47cead821b0c29f88c20b096852278fb0e3bf8ebd47b32b0f194e5728e1", "2871f76f6b47f3a9ccdfd7928d3688de92db41dd73fb80d99d4b0282b66efb6d", "303dc2d7b37382a574595f3f5a376970c758e1268b499022f6deb02267e98dbf"), ("0db5d6f06b8dbad64bb198532677e0faf3d0bfd79c40abf394c1adaba023e0c9", "254bd9bdaa85c1144b47f58f49779f6ad6f23f465e767fcd1d9260d4b4b04b96", "0b2103e350e5ddd3efb6e9a05648f72fca8b55207a362796e8f78bffc9d335c9", "08ac7266a0d0d184964be4bfaa9671fddfb0190ddd9e006e2ff479406e932d86"), ("0a1284d11aad9bb7f4dfdc62323bc9d9dd9036c2b0d7acd3e15a9e107eb7f3c2", "0451c2c8f9595787c45cbd52dafff21fabbd290e947c1eb22167d7f6de0828cf", "2db47ec7d8d0cd503f9f96a1ed19f608daee07ecc1ec1946605388d9b8d84aa3", "0144a9b0ce2d25a64101df49250305797b6144b8c72384add577202ebb5943e2"), ("10b906f3b4f944461cb98ff5838cd5fa783d1fd43c1af4869549a148c464081a", "00934646fd0147216e9b4edd4678d321f5b3631fc7bc8d90da966a27a02d9926", "2ddf501ffa8f0f11b3a1263a8a783a7a92b18c9ce5648e9cd1fe393b4a6a555b", "29b9adcfc34ba158966e31562758f4fa59bea2868f33e786f481d53a1796fc82"), ("0fa90950dd89345ac2fff747189fdbb8d1e4362bef182e4e7663c50e791d27c3", "29d227a511ceb171a38a51cd4c7a11781482e58b8f8f2c27dafacf4bfd0bf144", "18a6c25e3c2df1932150924e5271f42985e546588aea8cee060813446528d8bc", "0d0c216981d4e15a3176e9eab5588476745cd1356aa4bcb0438eb01a941400a5"), ("265f476ded9b765236952f3da90e0d600987779c091cc780a242cd52ba7551ee", "090244fc6e02839e1010c9295028f3b6c7a8dd42a023437ee12fda4a34a34cff", "04b4a0c6531ba966b4a2d02048e20baafbb19dd5d6f4f3a0a0dca7909b92d3c3", "244a277f72e15e15c1dd825064e442921056687672fa42d963edb2d3b0e292ae"), ("252167b4813189907ec0eea476c0d554bfc9eedfd86254292a41219e053c9695", "28b7f97260b312d7543364aa49413ab4d5cb3448fa5b1348689d72ca04348c03", "2c57731ee9e7c217560fda24d951f0251dcdba19e94d6bd5b069465082f4c3a4", "12b29cdf382f44c24dc406751dbda5fc3de4b0f95570c72521aee414e53e4afe"), ("2cf96a165d5672ba3c32bc5d6a13404d1a6fe6c89d1a40a5621771c1eadeffc7", "163c2181a9ac233e8fe3e82ecede3b4dd3b422d0c01d39953fd2aa3728e16b31", "0f004e43fce3e4ede3db1946b0d554beab82aca261f556a46f01711074eb440c", "25ab6f1d582ed5a08bde993cdbbfd9d47d354c4168811ff8080ebc10234cabfa"), ("2c041f7af7f5ff790f267215203a80df410d25e07ba9e6b929a36da9c05ae312", "131798ad58ac31c86eefeba71e8887d0f8503dba96b404f26ba86c216a814103", "1ce014bac8760768c9b228b8ab90b0ed579ec8994e34ec1dce71696d3cb13dba", "202e52b18bf7aad3fce637c3f1031f6b590fff222d50bef29f554d0882eafa69"), ("27137468906f125b33813374e999ec0c1d114476f4c21affb35646705d7e7c58", "07e9c864189ff3925e6ef3a312015679cb9297f9aabb6637ea23835b40ab1d5f", "03c0097d587e4b865a27f3d5810bed7188657d66d07ba452a9e1105aff5de8b6", "1a11366c846be934bffb11701f2a0a5b5bfffbf30a41332854f828ca164a871b"), ("18cfb80d2e9de1d12d99230a1c4e2f48f46122322fe61e4463be08b2196dc9af", "2493775a9c7bf66f544ca77e5cef63b62b9abaf80f27b0c35051ef004f09982f", "2cbaebce799cfc797c9091db44d4a4e00cc7610f7107072f658b69cf187ae032", "283a722da7fe79a3f2e04168def4757d87dd5d5f8502b2be78aaf2f47ea01f14"), ("1bfb8455f33660f32f39c3795b765e9814fa6b95bfa42faf932434845f2bfb86", "07e6b9abb65176bbe5d3de715dfc2425c5b5cfc0ffcd5cf37e1b86c7c206fc5a", "244d2e9e4c15a8c7fe8072aadab0341431aba2b08ebb1c53203f805ade412a1a", "07c81178ca558fbdc792971f1cb8c46c8e9a49a223a92cbdc055ec00e60e4bb7"), ("0b8d5fc81845b4d922ada1c6479b6d509cb665772549db3721decb067c0ea9ed", "11324d9df9661badf14304ac3840b3e6dbb8441c9f1fc09cb0f00c5adb692ba5", "1b1f2a0070859cc1b3febb899ef67d137c60904a46c0dd20c60ebe7ec8aad094", "10263e8d7ed052b09273e4dc4f6bc86021297af681ee9aa1ac5aa8d1d4ee3507"), ("041fd1c64206a21c1d6339f13d270310f63238754735275cab50de1a4f51506e", "09bfe5492d3a30fd7f6b7cd4c5b9a8410e98aa51b1c2cc71717c5cca385acf82", "060463056a2be385308774f43aa9eb438b575a393eaa3b7dddb95a11935625d6", "005007b1a6af3b6b54741ba808edfa975427c278e7daf7b748089f978563e526"), ("1d2a94a116ac711efad74636208de70943ef64f22f44c38baa1acd9409a1516d", "0d3c7dc2e6edf4edc2083874a4cd978ec349e54ca2076917081cfbfd7f019211", "120671b89bd48cdbdab943b5f4302a1e0ca754c048d548e40cf72c215879d944", "17e35aaeb0353fad810540938b92b7d3c3ab1efbe2483bf53cff1681e3de5eb1"), ("03d1435efb4cb58d5de378c7cf293d37376062e3971fc71fae7d31d8d141509d", "2c2a9458b606f088a41e39c2f9730485fa4d7efca92dd2c475221a7ceb5ce48d", "1f04b5ec2257b5655b1767c55930336c3cba474a099336162161ac4320644cc3", "228ed7c8fbe4b9aa04fd5b3846a1c9e6e715a63c8cd53fcb1fe602bac9abab26"), ("2417a31fa8b88a6d1951f0703f6291d80e0d386ab145a2ede72a383e848c6344", "0a492427be3f1c84a9ac4c12c0c93459acd619b1f2bc8a662218307c8beb311e", "2e6505c6dae6ff7c1c67b0de34e4bd0ad34892695ec308f550d5f43bd29782db", "13971db1ab89173ff437e765e2365ffeb98cd16b8ec71d2d069a9d6f82d9a885"), ("17b1249a3dbf0746f44023f9273afb26359ac010f3a548d85a56795b043e4a0a", "10245b208fb127c85f2618789b724eec2f759c7a37320980d7fdec2b77fa1690", "1fda377b677a02ca95f55370242277d78d9940de968e442a9cd79849fc806f56", "13dbcc693f6749a42a6e5a20d2948a60f849d854d1e1fe20cf5a6fc8e36267f7"), ("0e10fde6701abfdcf1cc408ab1610d62ebeecc0f134433f4e95f63cdd3b289be", "27fd657796fd010c2a97d32c3c8065004053ec419ffcc10f2ce1110ac23760c7", "173fb75c79e99b4003bfd5e3cc2b5ded281bce5cd0d582a81d75f6e8d0cdf024", "28c63c4dcf7563bedd9d58d41edd4f90dc4e433e0ec02071f39c72c590c8dc3d"), ("2ab63eb19349a155e2d956383b7841d84d6c27bd7353a5a5b5a2e330d996cccf", "22119bf1d9bf0e51a80c09686190c786c44e7be5df0e0d3fdd8cc506f8eb87b9", "04511c959335635c9f4cd94591501e00bdce59b1840e7f4d91f9ce601a0a725f", "2642033f3207923eb3c7ee45776fb366d28554cde4b6111e0385a21de0ca96de"), ("0f84e2bc821ff52a9e8e0cc0445e8024acb3025f2a8980a7db2a5871f12cab52", "21922c12a237c036aa182d936bd9c0222c9310d6416e2135fd50aad95d5e6a58", "0fa67c050fe7ff1ed61451b4735dcc514e0d8d9a589ee41d8e1bf2de6b496d9d", "083e55c72fd3fed9ca77e6a011030e01973c7b6c5ad9b0aa54c4baa4e12a8a6a"), ("21571e526ae8be6f492979038cdad0b87362c2b29e2982d3d3d971289f9b2302", "1efeb5e3aee874a78444f47ff0c1969b4eae6ae62a72e1bb6d4968aab6186174", "060a0d895922a4cbf4b33d07c272d4bbc545626128a5a2e2c3fff1e368dac372", "2e5d9caa423bafaab5a4539a726990dbde50c9c1f13a4d89b4d33de9b069deb3"), ("1b9f86060e99354db6b5633c61b6e14da89b61d7ce98136cf36c792b82a0cca0", "299eae6c03bf53574e7333749679ced09d5befce5afc96c83cd9988d45f4ccf9", "116e60ea82a6ff08750774b165d83561b64ba481aa08a863506bfb7a50a35444", "186cc134cc2a951a23d5d59702e19bdc6d91725611e343b2a31023c75d5d0488"), ("19cc4401a6b915b0bb26eebcf46cdf94a6fdb6a1c4d53f082b938118e7fbe88f", "278e540be0bf65573b792b0d3b9069d43d52fd121c55b86d871a5c30ebd4f44c", "11d1140ad640ab99ad32d3651323ba28e3b0bd0e36b1c0c6065ffc972d32b2cc", "18bec15b1643ed124faefcbd24f47bcea9fe6095a8463e7a567d3c7e55af76a6"), ("0a7c153d6de938e7bf67092ed5d205768ffa21e2f08483a4ddf49579ab0f8935", "11538edb7d017f749c8f6f77d4041b581b49b06a26ec3e3431ea7696c40f66b9", "16425ab26a90702cda616cbadea4f04c9125cf5c514199c08c1e21d0bd151e36", "230141b589ff813819dd73c5aa0297427ab16a6994da9d5620caef125e3d198d"), ("1aeddafd809c004917c6f2e3c72a662797937005c75b13aa52bccb09ebbadafe", "132353f1b43108c0645c2144201c3891d93630d3ee087f0f506c9796379af0c4", "1e8f7342f51a1aa6b86b9ce4b8cd4b9c1c0050d07f809e389ecc35c9c7583b71", "2ba3a61901601e60cd763f7244cdec42461b360deae6c0b0fbf57b03475db75f"), ("0d9cff5fff12c9bc0204f0db26334fc2322fed12e60b543cf8657650cdeea356", "17b25f1927ac7174265c8790303e126abab4145e5a4ddd0e80bcd2b633820071", "10a62d829e5187dfaaba334ec3f2fd4cfb0f29e5dbb51e2f073f52288fbc00be", "0f2b60d0a8d84aaf66476a8819d5cc4bd74ca072c8fd0e6e387c4f74824e7237"), ("195c408f4bd6e01c3b76792ed1eec8780f5ad8fc06f4b44c24b8f74f3181bf39", "0b58fe6ab1f1c862c7a2f2eba7a13ab57a6e4b3e5efb6f9302a0153a62bc9b3d", "088d4410d285beff7d04ebbcd0583eca543bc25fe06ac51256eeb475e2da2663", "1b5bb1b395da511d2b8f0eac02179f176524fe8dcd7a3d5f8368dc5a170d83bc"), ("2d9c5f07381bb66719f95dc56a726e460d9b648f40e7a5abd287829c02ada0be", "075892d438edc3bf7e225d813e0e28834459cd0507228d903ee8d07a6b195880", "00d2f73166bac16b9c99310c4a66a371b9daa3974a6bd2e7bff0d2de5fc20187", "207998ce2cf95754f97dbfb62c97a2d65bd830bf76ff7f374b57cb05082bc788"), ("09fded8eb6bb9fabdab5bdd52750820e70d70284757fd1ac9778a2fd2ee426e7", "1ff3e6e5d252366326ea940f34cfd83d25cc25a9b29e8cc1bd48391306c67f9c", "2594967ad4b1ef97eafccf3930d894c585aa56693b12e2ca65cf4892eebc4b32", "0b7ffbd7336137600cbc03390fdbddb3c1173895b71ec828867f094c00d15eeb"), ("09756bbf84957b50ceba16acc957d15ad260f0ee4cc15935b7881c309ace4ef2", "2338a5631b83ae3f04463a853db619ec751b7c577efa218d06cb8a7fb85c21cf", "08683e54d2dde1deffe74a28cf25dbd1621e3d74aecb4a388ab5c8a7d0d53e3b", "014521a3f7fbda096e905a1d553ebd187563fb08a688b7cc351ab46b8ca90dc1"), ("027d5fc81b5b4677efeb2509a46a339f6c4e686420ccaf3f2ad0ea0945360f27", "2722c6ccf5fb62abc06f04aeacde3f3b5bd8c8f85406860f80c28968260339f5", "0314d401c6ccdd9f1dcbd02c2190fd552d6644d02b1e8ed313514c023edd1a3d", "0a6dbce3d26a3585dded1246650ecdc3a326863089338ddf6368ff10ca379ad0"), ("08abb5ea7ec356d85a86f2192c5aba6cc4acc06a0643db4a2ddb025b4584fb84", "30361b9661389f365b191210dd598ea48b80cc84ef84f2ceff44ca45cc2575b0", "27655f653a6e9b12be45feea8cf5df993c7184f5c0e43ec0e450230b32b5ef10", "108792ed45351a55c7dd94f048390bbf19aedc48dea0ad5fc4eeee5087b48bf9"), ("20d55584d9df2113651eef47be08a173fc8836428883c92bd6588b923e4cce79", "05460cd8f2704504550ba003e3947619eed7a63d675228d16f4aab560c40bc4d", "05fd8caff24249f3db12ea7181bbee11cebdc45d41a91ccb4168358f3caa88bc", "174e1897290a79af9e89add54f50e5f8b4abf24f592f91e19dc51edcd3101c1b"), ("2d0acb79f99a5e513f57067657df35624c1a659e441ca1b62c1c841b9fc657b7", "150ce8eaf0f90da8844245699915ac2d7215ac739b8387804ca3effd1e53060e", "1fe709ef3a7dd82d9541f4b1cb867fe3aea738620a175659b5daad02aa88e22b", "18e8a8b4a1160193c4d6b74236eee0c96d98158c4135fa4da87e74dafc1bf6ad"), ("1de3292edafa569fcd63eb5078ac66f1075e3db00c33c945003a33a333926b55", "0a0b6316fde9652e05dc8d0204bf41d99e9836049cc7d75b37dce228a44a38eb", "04e5fe28ce3d1c66feed9786919abbdf213f637a1299b2346adb76c44d2abeca", "278816ea983eea3d22e50ed14c364b1dfc48f90835f4afa585899a67bc8f8df5"), ("059055b59b490d022df86577efcbc6b3a8e9d9c48a91ba593a1e097f870bc8ca", "0d89150d947f30ef046d599dc67f57606ccedcf413932527e36b53275e976a3c", "0afdd64e43230dfb8705707d60d23ad7cb7b94569929744633bcfa43e8cd13fe", "24ceeb4ff706c60285c79ef657f9bf1b5692ac9989ae6169f4e1a3f64ff3a3c5"), ("1c28ba34ad30f32497aea25fe1eb2d461fdfee9f7f6755d895ff44674dd8fec4", "2e7d065d7174d589d3942eb3183db9a5f879a7c4e01501e4c37f0ab53a73574c", "2d51439eb4d29aac79763dfe25c65dfe7dbd28909fcc9bb906d7d8785a862095", "1992d4a6567ef667969458ca982fccb3e0f140c2ad59e5fdf66f12f82ab7f5b2"), ("188458d66da73b3c1ae2e46e6b2ae80f2dfbc17224d25066096a187c02a849e3", "1edb517c113234056d102e55993e6216b37597c96707acddfefd85f34423c4cd", "3013095057ff6bb04556c5561553c3ce75f4b591f68015ae3ea1769d08a8ff3c", "2ceeae33b87117a2c96a654723e6b67a8b4f267172adfc2bd53191d505875a55"), ("02179e1c1bcc7962ebdbe3cff3b2343ab569d7a2b128cbfaf1c12e16720d1445", "0ff144a7d0530b6672a5e61c9ba979da6466af5226d8f5d33f55fe940deeac67", "024e260c7146c5aecc201c03687d4bf5c7440a9a94f9186d950d1c8f094fd923", "273cc1811a51005e47ea242b8903cfc6525d52c6a01a9227b6e521aaa6bc8fb1"), ("1943001836a9f901d43c23572785752ed9308a47411a7ef5e47aa3e42f0a4fa8", "23dad167ed072167092928bb31731693f89cef8ac01c1b088f52bf4dde415f81", "19dacdadcb9deb4625f81418c9c1561158e61435988a8243004ad7938c271aeb", "035fa206989a82343cb1d83536c9744d8c2cc7809561a5e58215b85273580177"), ("1f2a4fc77ecc9be1db14b68f221ad9e6be6bb29f652a9ab40194479f987de2e8", "2a985a5b70a266aa5b8ef5d5db72ab0605474ebc6cbdc72c56e20c0eb47c5310", "201d6b22e1a14d34ea76800359fa470dfee7ca749540406a90f8ac9575467900", "1e6538be6cd5edc2c672240b01d8e0cd76197efe440b84232c06c99cafac1fb4"), ("2e4e21a895b2cd42a33c1ddc287fc79e8ebc127480b6d4a62491948e713b5242", "1bb29a40947d63ae9ff2d0a4229de71ef6240e4feebb6cb693d6c818b24ffe16", "215fa02d12e2e2ed13ca31f7964a67a952e52bba5b728ff5fbfdb7097f08ce24", "2de0f921ae55f82ecfc10273a2eaa5c41697d5e01e59a13361884ef5a3f97a60"), ("25d8048969e4b02878ab13f6fa8c7e408e290682606453f1d6b9d7029c2f4a48", "0285c686aac2d0ceed659d22019a0a8ad7d710845c4939e6c6caed2a115758a2", "230de4c4fb4e5257557c80581e722cdab2af0acf3de9ec4c9cd4e8c8f53c5e1e", "1af61d0bc15f7040b761b2642411691a3f801b9582beb30dedc09dd3d33cf4ce"), ("0f2acde1ce77d230cc99749c603027eae4d4219efdea3a2e8f54ee2f44fce114", "2517b4d0eb0206750570df2bfdb2b060ce24cbddc241054b9e37f827980642ef", "0c902e7a0ebd91ec7022b398dda46615738517df0dc3cd4ce3cd9f29f88cbe37", "1c548e66479f602d5e6e3f363c109a414615318a12da17049384776658b7d52e"), ("01b545a7195233f88c456aa93e033a8875cea02a3b9d7e2ada411054722729e3", "1e003f9cf8cdb3c2203065ac225d2c699889fdf514729b38fa1821ada25940dd", "22e178d2e4b49b42c6ef129e5428d3704f7baa05947b5ca6fe2efb45bf029bb5", "0894cb31424aba02167c9fbe995b0fc16bce238c8bd1db9bc261da858d6f506f"), ("12fdee31accb1d84641cde2f89c1a0a9f834609d5c4ffffa5f3eeb37250777f1", "2c1c16eb7858ca785961a95413ff249aa31cf2c08cb2d3046c209bed577f54da", "1a24a0e737f5d994a5ce191034b068afb55a5d927e9684b9a186fc8fefbab3a5", "21fb393bdc0dd8efa3a17844ac3e7c50233b00af932725693ecd05e624f8fee3"), ("03845325631d3fbb76b9880d1d15688d8ae309ae393119a6a37dcabcf70677d3", "183a42b21981019c8a7964df5bf8f5cb012b8760eb13a8271e03fd779c639efd", "1002dc0d494a84d800f024ed6ba83721ef19ad4ae1cf79f8c80c45c97c6e8584", "2b22e1720c30f6baf156583e48c4be0d6efd8d63b47abcbaad06d670a1d3b911"), ("2fb0c7b2d1b2389c81e27c501f79eaf87a403361f80ac726c4935b3b2b57a2b2", "2fc3b6a12f8b9d031caff4a0d12bbe5de6d5acf47e87e476a911b0400dc17c61", "02b447b91f4c00becea8f70ff23742080408599bd0ddbda80bf781b4ba45f7d5", "19cb38378be2df6f21e4765a67a34da2b8cf0a6fe0da68dd23fd78be7b49a49e"), ("2a752e0da900db534fc15ef2e58941100830a330ba83a655c31866afd6943228", "0f10bc1c48015f7bf229a5f4e6e68450c4a7864641723ab187c732dbed27eee3", "0711852269ab7609f5978329ddfcb0137c33ce5446dd5a29d08039eb3ede6ad0", "0e11697d3c75b2d6eb44e6272e50699dc48f10bda2fec7bc4153666b4ede2a2f"), ("2efee1fe3550f1b47e3f19bfdaf84eae69ce0085947c038980478841ee4c0621", "0bf3819555b1334e096f112ce8c5418b42fe1681240c7feb00d3fa668f7d9e62", "1a6b37f704220f47111d5e3f6c042428b0b7aceff84398387b50bd333aa2798b", "1435a4fdb20e9f5c7f0322e10e24c32e3c514cf619f23ade29c6f01ce8352a3c"), ("2e5200d2e8e59cc55578d82ebd0c4d9a6b11c99d2ddddbb9c2f7a009bedeaa0d", "0fe53a49ab5b9788c934fd4806743f3f1ed0e12a846286cf4fa989c820cae316", "28dbad0ae2ea650397d6a1a6472a8c0f36a6d09ec9e8a1c8a65f2710cc9e3894", "05624db4cbdd4dc97385314df764802dadc5c7bfec2f9e6e7fdb284d63961cae"), ("1d70c8c4414183772cadba7e5cd2594dc3fceee78373d34adc82b8f919d3cc5d", "2c4ed8b3031f1354701b343872a0dc57b9cf3f5a06a3a32cde8a881b4f7812bd", "0da76010f74aaf590e6adf4aba9b416a1183ca07212e184bde7d723ead1db0b9", "0fcd1ef8be7c5466de5f6db57163141e40e91903a6672cab528f2410551e315b"), ("005ec4226cc0273b35a67be314796e73458b772d71fca2e1f55f26d1e4746450", "0142ef6355a5d3b8126138780c30758167271600bc860e121e4d63e5401d3b47", "1f443b51eb2aca5a13fd73eb059f7a05cb511d6b5d659fa8ec28132ece27678b", "1d0ed9b0bfa4f9f2060aa77a798b7fd2f5f8e39c8470954079ab7e0e6e884a83"), ("267e3637de4961debe49cf86b67b1279638ff91810f2e59e879ee818bf90c73d", "23664ac1fa1e78379e746529ea3ff48650fb2fa7c0edaa6789e28dfbd78ba962", "2c7bc537fc7367f29c34b735f06f465ff2bb8951b8fc59f6a3abbd723cc97f3e", "190f496ff822c5d837a8e6f07b7a4bcfc262a2aa5c3471605280d18075602fa9"), ("0c656cac95332898dfc9d58b8a0ce38dc8cf1ab47fede2798560642b79d50c6e", "12dda0d2d794db17563c7b5d3b7cee4c2f235de7ab66dcbcb03f32363f4ca144", "28a1cb181ef858831ddd1273436d94a5eb35ca2e1d973c68768efe2d7c9445fe", "1c2e5ce05253f500887822b04351d27394b007a3c1171af9f28f36700fcecd33"), ("1890ecc623c7abb92b86ccb30ffe6a7e2c8b7edfea45206768c0c9f72c5f266f", "07c4384462bceb32f88031d339122e7feb8d104ecb30db9b9e791acfa39c636f", "2b3184fdf420f3e214d90f0ed05490620119744e6150524cf75427e1c4e92488", "02a73e76a009edbe33ac807acc9acf399929f77811b52df460497fe6cb55132c"), ("28129a7dd880baa37d83117cea6994e0c2c1bf627a570c3276629bc574fc953d", "04b0791bbbc383615b9cfccf5ec0407c0cc7cbe36dc1ea8fc5d217154e8d421a", "0309a1cef235fbf193f4f31308e435fcb4126073f0e9f9f19de278965eaafcff", "11d47bfe39ef2f144731936d68125aa35b0087b8e93828976ade04963bdb4c8a"), ("199eb3cfc3f85adb21725f4c169c823095d3eb1270d77b205bc88103325a38db", "0621aec6594deeb4ea1b6853c6311453893d77a4b487d59d1327f0fecb8d22ac", "012c5d1e697fd0d6bb2da5f25d4a7903ae74e2d5cac492d3c1514b630a7ffb95", "172b19c77045c8a0bdb19c2c3b44adc083698ced02f8fccda035c92f833feb10"), ("0cd1610b55f24fb5d12c5ad986e83bec0a8ec94872c8a7c337ba3f55139bd84f", "074e08f26b864e04d11cdb475c2fc47e63b1178a8d21a69c69123b101101cc69", "29a94c4b2b3ca4d130458231cd2369ae076beef930982f5079cef2c25ecbac71", "22e3b881fab68e8a1f33fb458121db0d4aa2fe79726ec15de5f72bb6018715fb"), ("0b5e9a31c100dc0744e1811592c527963388e7474a44a1649fe63dc1aea6174d", "23c265929fcd1399eb1aa0625afdde576eb0a84bd32c956f5e0de3898bd2327a", "110737cb35938f6197e19369244a86aa4bef95daa416a386fa261bfd11352e4c", "152f93eca19bed940d34608069dd8845a7aa96954bbc88c024cc1e6525bfdc44"), ("12b1db5adf18068f5b8257b6c6bbfa6edd28029b3eae1a149231fe09f73fe0a1", "02e28bdde72eb1fc51479b05ed53708e2591327fac29d31658c62a8dfba3c911", "028ada1467a8527062a3c67a85c55545dfa8c3ac1d5c9f9520caec11836d1fd0", "1fb5e085f280616db8d2dbdc18a246fa9b0cc056b5f59601f67e1a8a6ae29168"), ("1a23525f343017953d730e2302348460a1a8d1452b62ed88596a37a6b1728991", "2a34f24d9a30381fa18e88394b48b922249d886e3148d8fadee94a8dfcee16d4", "21acc707d6f494631ef839465ef92f2c223e98e3976f51bfbc5edc22fb746692", "2d8cca9be5a6d859460f65601e30189b8c25ba810dccbf73a520b068703d0f7a"), ("1ceee182b76b0685c7ff2019fcf928da3f2e70b801fb400aaeb9274518d8e2cc", "01b78386104ec047ba7dc12350f8e27a4e016353005a7644e469786919ec44a9", "2aed3878da1ff9591702bb858978e942a95d80f0dbbd39434b5096587facdc96", "2aa55dd79898e0e126850e0faccd39752900d7d3b90ad8e2c710fab831e94d1f"), ("1841fbd68c0db1f3ae86b94bee2d2286fa6a1948d22a1ac898c55672ab18c6c6", "0e6dbf4400198fd125023a9ce41a598370166b5f5d62bad77d3b50335a0f34bc", "0bec02cdec230b3a9987369caef3d7218b8140c05dcf38166eaa36924af33c9b", "15aaff9a0c1fbcdf748d49d6fdc25989dd5f81258b652093c68dffa69e9cb823"), ("1570daac04584c9b720fe1b0e3d656e1756c8d8f2508d12b63be7b6d54649bde", "1262f69739a45ddf6becc8e12e541373c7705e578a32ba641bdb2e1996d3d83d", "1d6d309fe5ae5febd7e0eca150fef0cb241fafd8684eec11bdab939830d26479", "223e1b62703efba2e4cd690bf614c1cb861e1201d205b9c4a4f31d7242521337"), ("18bbe4c8d90fe991495ba728bb208e4847abc6b7aa7322756b914cb915107b82", "14b9001ece380bd96a82a9c154a0d48f52209d79cd6a9d480456afa88030931a", "2d2eeb9438763629a7ca6846faa2339dc44dad91861b9edc14c76f77f5c9c893", "1ca540daca38de66cf5fbe75abb8777e258f04c90e1938c488d4a3ae41a41091"), ("1c2b2502cda06a2a0dc8abd5b98ea7e932cc2f82c769d4909fc48d3aa75bb15a", "225d0ab6f3abef9972efbb18ebcd756aa95583d9a4e647767ac9101bcb5fed28", "1c79322082e617440b04dde1e7d40e03bd4c40ffa29c84913d083183b0b3c0c7", "214a9ed748a53047c033c20be900c0b1864594da1d60bfb181a7d5ebe161cf35"), ("0cdeca1c947d7f5cb79774a99632e4675b3e20edc6313d37c1fdef4d9b7bb3f9", "04ce31afeb7d5331af1cc91d16db6ba3b7d3c9e9342ab11712c5cbfefae185f2", "20359f18f8d26fba2c07232d0abea974d38061d3d99cbb16c54d5a015e68dbd8", "2b21b35415f5a273fc49acb590902225baa95eadeb5146928f5ac457cc08bac2"), ("2794b0229c1d79c042944c8857c95635d9803ebb456b3f0bac27966a39155bef", "206e9582005f771f897b3f6e32af569ca19a7d0cbf206e215c2cd149bc71cdfb", "01787d806d318b15999fee14bd2b8e1b6374a5fcd7bdf3fb9702266658dea93c", "071b2c41b7c6fa12302b7af156b5ea7150a88e34376c10c67056cb200d9f003f"), ("1c1c1cb695afdd447eb900fe458c3e3fc0a4b38120913a222ac578c9752cbd60", "21d81040cb1e62aaccede46f4b4587472fc1d80994249e89ada0d57aec44abb2", "14a3643697bde978c6912abcaa1e90001afd6899d57c51fae9ee564e5dbfef0e", "1756b0be61e1964339fc7cc6ed5d3624db7ba7d3c9b0da6d35fe24b0a63adcfc"), ("2019ffd4d1b0b746c581037de8f5fbb85ecacb552f2722ae9058a3a05b291254", "1cb61a9a9961c968796e894c4860bf8942007033536d2cbd1b7fdbcd7f32a2a6", "2cab0dfe5c0444c9b0e3dffbee1f7cafe3966c058e8630037180234c0f69afb6", "29997a00897bbd11bb886a2ea708b175585c9408bff55908c3cebe7f4a7e2f34"), ("12eff8ec7c5bd19b5da992960269553199e75251a744d8c92c1b44552f320342", "0b1814f8c65ee926c2c16e9574b4413da997c95c848d35d7580ff59f36e3f264", "1382709efb901fc9455ce5baed45effd3dd134500ad4cf7fd2591a3f38e8685b", "30135d0e79e193553409914256b8c3605347b14fb2c72ef8b821aa9f561bbbf5"), ("0e660208af7032c3cbfcf38756e21c924ac7a689949ff94747ec14acffdcc1bc", "1355dba66d0672b3f0c9d6ccea810bfa7ae7e1e46396f1064404ae64be6d9a8a", "25e8d02979ae0a1fb5b97ffd80e8b944248ff28e9189712b44bd3aac5d783b39", "294aefd41383fabccdae83ec7ec41168dbaab42c80b3b979d7b28ffaf82e9649"), ("12c3e1b1c82dd428e7f7ff1b7bfba67762488450878a86427800c673b903545b", "13f44944becb6c22c7a93a31b9d01d8b01a30af83fabfeed6b46e34af1cefabc", "1e8b86df0235118505db13a85681b2f2106e8d0e2af06dc5b9a841fa7ee5141a", "159479b4ae77b3882bb7a3d660d42d3bb6dd3c1b30c05ca4e472f95e1840429c"), ("208ab6691c9c1a1d4937957f1c1bbd84ee6b546b5a45f5ef0ce8d01b89245b3b", "142c41ad29d5858a72f98ae07865cb2cb29feb79b854acbdb394cfa517a3dacf", "2472c7126b75c46dd89082dd1e372c6d09bd14579ac3dd2f138ea494628b8256", "2d1d3fa63cbbc449edc05bf6452940e41283aba90f2ae18d4846be5ff7273a66"), ("2db310fac6419fc27ad9a2c7f6f814382e8dccd6cb5efde75398fcea3447b8ab", "0425bccc9d657c12d41213dc698fbf2e5cc2d9e7912692cb55a7359408caa9ca", "303f57efa8e0b0fbc0a4ba9c358fb472b596f91bd3156e1d57f2afc962b8ccbf", "2fe20cb15bdb971d34bca1df796e3fa77f88691783f525583fae3d58d3386f44"), ("1c9d52d9bc75625ca8a06970cc8984219480ab15404f3ff1fbc857a86a45c110", "19ef1fc55cb31860e9316f5c4f5ec21faced58beb11cedaa2775f5d8ebd5846d", "13d6ceb901aeff55bd1fd27c42226f0a7812393ca5d47deb950a62a66ce15970", "1c13c0d84ea0b9ec9117522c8b8dc7f6cae32a4e7dc205ed6a0712ff4959edb8"), ("153afc5e453c2f6b6871c918802bebcd01c2414bfa0095688c2569998beb1b05", "0cbcd419a8cecfd1b2e653d8d6094d4bfa3e53132f018f3a9605fba3ac1b9af7", "2a350e86c7d3d03079681d029126b265cdabd3ededce9cd3e5428b07bb5533dc", "2f843ce9d1f44fcb9b95433e879fa81b2e54222c1642fe080ab74b1f3dca2a72"), ("190b3baab9efc70a39e52b06b260cbd84f2c80ef1929bf68f08a361c5dd5ef64", "091f15aa7984c63ead2bd5a494663950912691a99e124dd9d86976629c5175d2", "08d713b93838fd09e28559cdf430449adfce4158d22a00be2c13a85f2aa7b3cd", "183a3842ce2bb742bf6b09b47b78c16ceb2ed0154b4564bcc755ccbc5dc9868e"), ("2e3c8214d7d598eb0260a64b0dc969416798f444ff06d492b9901fa9ffd12b6a", "2c949470f6158d19f405e893106d02ca8d619858d2fa8fba48e26210df44ba91", "200ff9d34eae07fb48884d68a04b18a8dd961fbbf73d05707fa7ba34225c4a6a", "21c15dcf88cae47a5e9120835c7a1aa04849a4f9f7bfc6c76b471158b841933a"), ("1182b28a7dee49f70a6061ea5626cef4cdd99083417c3dae4bcca9c23ad36bfd", "24137db0bdc14e8a06db00a2f74945f4cdf2f538594afb18c2dff79e9dc43d8e", "045db222811217e0d3cb1e6084533706c4bf7a7b80400b4ee94578a529f7de7f", "202a354c57a609a87c4e3f5de3f779513131548823264ad33ea59f8c3b59708a"), ("284f0a133c334b06d4b5316ff734ec25590e0b7f99ad82b451e11144a2e5590e", "28a080847d552753a2334e79a1cbbf89c916c4caa7c941c9288629918b9f169c", "036356fa8cbc7c01adc3cfb8f6f9b5524737b1662130e445c327ac9b8f7d9abd", "08082131b013bf18432bbe52d8a1882238b974e973e727ea2009edabf6041e6d"), ("13ce354b325744f7c988a738943a0f8ba09bc2cb3fb585ac7ac522fb238dd117", "08cd853bd54263b8d2d6f4eab3b93ad8011a466f1d68c421bb174375cac93f1f", "04d63cf8a735155cffa3bbc29125dcc00596042ece92a950a2b3bd78b0c91d2f", "19dd8d134f8df11ca61281d5776ff771fc667a40aebd8d427efc7ba77d81ac38"), ("2da7fa988af9f9887e9a308e65ca13f6fcf30f3eecb509d33c5e385466e2ee27", "105297c524f8f3cfc428cb1bf529e7b558bb551b238114ddee4a0bb76481a0e7", "20e80520ad9d126268ec8bd3f60e743c956a55c5806e3019335d13a78092043e", "07f3ad3831cb344dd700ddbe06e6160de83836a2e3fc692e0d7c0cba1bb10f59"), ("2e2dfaaa9c641f22aba0e172ceec9e08469b978dd25a395faae66a9c31b12b9c", "14fe4e0341b3ca1cd369fa1a745a8541bdfd3e305acc14e2d1e951e430897fd1", "27619d6a72335e42ba0faf8687e046a7153c5929160372e7bd994ef5efb3a046", "169003594418e733ba5cb83046894fd7da3a3920b11aba3454eacadce4bf6111"), ("2b57ba124416261d4179a2d95809d7327e476bcb87211b18db7027f93359f5a9", "1bc4f424231dafeeb98dd3c1738f846370ac100cc4931a60e50c5f176e317b95", "16596df7eced392dc690262b5b1243bfc0356cd17b2af573d0aab45946f20440", "2f9ce0b276e010f504ead01aa6a7e7047653e3629ae9d566070c432cf3afa451"), ("1f04c3676b08330bdd2f44dfbe86f491a79464950504344a98ed8e4d4c8c1fce", "0516c29c6abd396b4b3b157aa0d7944a92a8c55ec9ce3809a2a67d5cabc6eddf", "0a63e50fc4b45971d4a7f4064990c2b3f54045a04e782b17845b4841ba3fac2c", "2ee8e7da953577c9f70c9c16b987c86a61b4dc85713ac31e570ac18e58688ef6"), ("12475411021de02e327517deaa2da16b9834fd9fc40aa3b33bffc3cac29685c9", "15d825a6e74b5d4a069f0f6c95f4a2f821b86de0729c9aeae3c1fb5de6e46327", "1a0abbcae93201d0d2b7af8399b331680111895da63ab2bbdf02731c2e551f1f", "20aab5df7613a32128a7f30dca75c52a52e250c4b105952cf22128d06c6a899d"), ("0e80b60333e78941a7dd5a9e18af5319201cf69e250aac69f59f99a68d6e4f27", "1bf441eab0d640bf85d24e581a118cb6199c5873a979cf6ba0fc596af96cf614", "0b06cf0611636149afe06b1948996146f69db7029a73ef40398eb0b7ae2af8c4", "2fcc921fb192f24c0ba9a11ee437b82c0dbfdd303ce9309b0ec03c6976bbc82c"), ("0b1e16e13882c638e69016a91032a3479c01c6b55ad080d5ab1837d241182321", "2a5acd6262baee3b745d8521b75141ba5ce4a97702d71bd946665a77db70c50e", "28e9b21f7595af878f9a0ea24f1973447ce0026efefdf4196cee199d8ac5088f", "1162a0fb92693571045615b72775deccadd7a552598a83b20ff3e04f6fc45864"), ("1fec97f8b07d1f0a2d3d67b39644be680bfae685a608e04debad4c5ebc87fecd", "1c5ca000cb8dc917d4fad208cd372c3c2610499039c6cb7f952d44b39d27fa1f", "0fc754dd7373749b6767f9f4d983535792162da74a8f604779dfa899b4df496b", "0549cca5882c526c0f62b3af12243b9069c9676677bdc574391c57372eb1381d"), ("11d48d0cf6553097b3302225a3437cf7c45ff261adbcab9874889581484f57d3", "032d477b1dac2bae509215f5cc2e66472cd32eaa74d87c2a1718acd5ba22cd69", "184841d1a314a58407e473a9d77e45d74a78359f72396db942cf654c32ed9f12", "2a4f341183c1f5003cb9b28e5c9db5edbc5238b75a3adf7170f015da7073a065"), ("0077e348feab270604dd8994938946d402d438548af18a73468a430dfa36d878", "2e7b5ac7fab7cfdef7153aad28131202b8c038ff57004baf9b50823c6b3389a1", "298a0e1a6be9a78cba95f809bd107fb1549511179ffda8813bc437d208105402", "03dd4f914064184d039db9dbe8efcf2b0a562bf0daba8b2b4472e2e1709c70e1"), ("1f160010ea34e52257660a99605461359189d650cc702f8ecbf53174194e3b01", "29f419debff13c5f18d4fb90092e500e241ae81ca0b98cfaa0026ff9d06cdead", "00480b2b14e2a575c870e84eaf8c227f275088f2ede8e58fee4949220b946722", "1bc9c044283585adcee02e39daf13122fab48ade8bb28a9d85a593b5fded74ce"), ("0558d23a087040976f45a0321a2696d18be54eb373370a7acf2b0840d1b8d07f", "2e7a4f02d732f62fd00ad4e781ea5af5a1e68fc8eccae06d9c518a99f87ffc92", "12616f3a9b034022af6dd87eb9e50702929c134505afcfe23793010ef6cac930", "2824e160a152af88287b04088349d7fc219cb0f0c399f52205b38e3b79750478"), ("08c68960877890bc6a5f4dc1babca57f6708e33c237c56dabc9bb50b59f503cc", "06faac44ef90ab530b004ff8d1a6aa20a5de726c4e564d8221f3aa1ffe529d2a", "295ccd8d4eaf2e5af665e8bddc3c2f73fcb36c67909395e7de822ad3f72c4b54", "144ccf871524363c24c58849e91a1747c729b3ced96009554a2275a556de1912"), ("003237c156010064b41821e3b66de81eaebb4cce3876b2dfa3a7eeb746900b7b", "15082225901d9823a997723bfa6130cdb9b921023bbad42e5e9559d48ebc16bd", "22484afe8d881acde36e0a777f996513e74713d97e3cc8a551a05e82dea3586e", "24eda4242d003797e1538f0d9438627b66624164f27b09c9e02d2a4677d49d37"), ("0af2589d6ac9a28651ca6b618bd64bbdf0715de4d2f50965b59a3e89a12ff32a", "12fd62cb74f369329c922c1fa783832fc0c2d286594b0459ffe0a2e15dd5621e", "0897a4bfbdaadc9995ad6074dddd6a3b0212ed71be8b1045a450465ff3a3460b", "0eb6431bb00ea0d33874e42120bb93d76441a123c6132d2969d7626bc3a3b1ba"), ("12ca291fc7748be2eb6a24aea9b3b065f17ac980958d900e07df07ff68fb0ae5", "0d344056c4f1ad9931836a9cc7dcc0f7c6dc0ead48e18243c5f2606083db7494", "1641ccc6d2de35d5e98572bea7e6c8bae5a389768c0b305ae24e1ec2142859e5", "0570b8a2602b6a30cf9fa870b7eaa36d309bc746366a88a11c22472aab81acb5"), ("01653cee28fef67357634dcbc77f2920525e5419a7ee0ce9ad1d2ffb6afd4f1a", "02f22d726d84b0a8b01516c93e371f228fcb83f1d6d933e465636ca78b622422", "2c9df4809b0e753a429cbe9b31d348c5fa65d4b1d81d459ff9e63faa38517a88", "2736953c078ce0ede0eee32d3b98fe6f7c66c8e37b9e916436a28a836921f532"), ("1e27fe22378555bee734863c3fcbd52d6cd5a88149ea001d3b72a2f704edd7e3", "0876d70c041c0e64bc88471234c2b05e41e446ce614163098b7fad4cd224ce6b", "047f82852d2b903cb4286f23336b9c093e185f5423041416030cffec35677a00", "0bdd5af7721b82e7f96275376a6fd9445a8c12c15bf27feff58ec90b46da5eb1"), ("27636c7f06536d81d76f5f4fdaa8d769d41996adacf2a5473d9bb75cfaec62fe", "28b2274bce86c03103f0a0f0cdb120b4cbbb91b8aff75aeba34725e605b44c0b", "2370b6e939fb0e7edd33eff110cfc9b3a9331d0c0ccd7c1984173a0233b1d7d5", "01cd58fae68fe38215bad4c2ee7722380adea84202c33bc902e3a157e775cf99"), ("2f7e9d6213aac5b8d7c76e2adfce82b8eb9d1eff1dabf4706b5a22ac9e78ade7", "01dae7b00b222eb3ab6c6c02753f171d4cd7e1ff34cee55a9b45f65bdb9090c0", "195db1dfca316720c039b6e01af1f93cff2f12b5c2bc6c3339ac907911c0afa2", "2e46c2f8a44715ec784ed43872bf4e291143cca1181d7c7db3f01de3f6937c00"), ("021c7c30f8ba191f760df8f3418189a7520365b0dfe0126c588d2a72e24006f4", "044743fab0313f557fced155886230b34fd9d855b437b3cac4ff6db9d55fb56c", "2c07701549d13c98eb16d583f8d17e21cdbb1289723d002b35a4fb89a4b4a3b6", "05b5394b77be8fde03ee782c1f5d6c537cd11eeb427655ecc64298d1843ae1ce"), ("1309020249d3a1f1eee5e08f792768d737db0de4bae4b8b2875ab4a5ad7a93d7", "176ed4befefbd7ad913097d1b2ec8a9c4c95c1465e86199ec33e05ed06716888", "0bfaacdca9bf81ba24c7d38c47a24d8846e5f95d71e0e44bc2f0e0b492182363", "2dcd8083c375f07821f5ec2cf38b61bb426131df9fc43cf8190ca1426c9ff0b3"), ("1e46733662c1d6006095d8697085834944066c8607275143c630d219b221c302", "07af5396c1de9407a40551fc09a36699178f3374655f6edde3070db56a37e435", "0d63f4700ec30233176432706857f0e2ebe927465a51efdf884f326595ebf546", "1ed988181f688c914c11be15d3c18cadcff7f8133193bf0d2ce333d55794ae79"), ("0474e236ae8ba8c736430901190da5eda431ff964364ed022aad68c7247c71f0", "2e7ec52a931cc1a323d973c818103e6c4a0895f7cbe64a8e91c462a91e0b7d35", "021f0285ed71db46cadd4fa07c4bac2e17fb107efb269a41457dc08b327b0f88", "0133630a41fb33c56782b0e9f2a29d9e2a36d1b954f730f7fbadbb235bdd8fe1"), ("15b6c486cbecfff80dbdd3e245c7cab9847d75f805470a26769798cee9412e6f", "13f1472db5c3492e607bb3ea8e612f3e30505a55abb6a2d6ba5c104ecb8a4f77", "2f487a968a09d7f15a1c70deaf3c3ed997e6e4b081be4ba085d17d73f6e3e198", "1672457136b1c1d7efbdba9e745474edf2854c6da18742ef77ec39612b50aa1c"), ("2cf68792b3472050d8500fa689e70fd88a97cce103e7d93f5cc7c05443e31ddd", "2c7b8ba250b3a3a70ea1757c5b751655d5eb3a2b74b639e5e4509991529c55c1", "10f7ca8db530459120ee8a6a6f43ff0615945b6551c7ca82896139c9323b8635", "1dc5a91a27bdb19f9a0229fdcd4ec141869ed6afaa49c2c18e0dbf120c6a7ca5"), ("0d70a7d0cc121c1d4a9ff4d3e95e87ced4579de932cd7237e582c7156288dd36", "003b59669d64ecb0f29643276d8763987a9e02ddce81210e92184ac644d12f98", "2ffca5d46c771019ab38606f355fc0d4d3244572d2e5b735dd367c373c2f2a6d", "0faa8d7ad6a094dfa2e7e19afa41e2d1cb518ec38c7a35c163989382d14f8d41"), ("058046e52fdde4de93b365787c794c62ba06b22aedc3bcb99e128f4cb84fac1e", "302d2601f736aaff90c8a2c44f19440a416f6261b29c4c34e871176281b7e8ad", "219437a3cd402b0184c00bb066318d48fffb836ff5eefd868bc03b2fc65722d1", "1e4891256c549c7f01fb4ecbd387c93bbf73f0ec7ada0dbafd8e82df34336d49"), ("0bc3a0bd34dda7c2e630ffc441f85e94b9e7f1f8c4f7466da0d8c1f68561a058", "1900f88afc0259519699c3629c10db0e79b6de62e4ed768ade44353a89beab18", "26e947a420ea6735825685875dd056ae525d01b5f406e5f5507f86df9f5a0fbd", "21fe295e135e47998af51b911a74060f6efe3549ce8b881cf4faec087bfc3857"), ("215c9c84855e06e67e5b0a3c5df8509f6dae75245a9dcdbe39538cd4a2fc068c", "1ac0c921678b392352a7d30e311adf00dc6d243837b6db60079241a1f3d9e933", "0ae23b8a7e293a2a4e37d353036647815fe30266ba9c9a62f61db230a6e5c72e", "1f596bf9e360464585846ef6543338c6c27917d761e4b90d8454017b753fc671"), ("1689a56dffceefb28b8c89b1318d7987950233a574edf2b621716456336b5223", "03cb2cc92a0647372c92b98c4af4ef409f21eb43cf012a519538cf081650c66f", "007fd41040f07f2ce4dd7d0e66a1718beec4f4f992b2036948b5955bd5c190af", "12141fd4d5dc3f6dd58ed90e82f3acb5dd85ce073100f939b0e0c608671d7f8a"), ("09dda4938da50bf928c99185bdeca753359fd026e1c8a8642b327beb713c09a9", "294f702ad5d753f0edc9c916d06c319038a0b35f859caac1bac6d09416f91895", "21e2f852b0184c68050f1f405fb7a1d391b621238db537e21c6eacc45ebeed4e", "067d3869ee5f43c2d7b905e9b6a3736c44fd22099ac92a1f63d88c7fab1ce2db"), ("11780a9bdab82d6b3c04bd658efc1b14de91b262a98e35404a2c3c36304ee94f", "214ecc2fd8c255fd63c45af5550e993ca595891be3165d4e45f6141e5146942e", "2fc66fa58098b5af1b9517f31a8fc9073665b523498b479ed79b49893ce901bc", "249a0c426bc38527008fe698134da191ee71788b6130440aecad51e6197d3397"), ("0794ad40aa964ddb8a539252a8a5a4076131a143bdce0c594244cdd746c5c388", "0b9f290a66a4d49b4b64ba6d9c4e85fae8f8ed06aa58edc9bc75b617db422370", "13fd6e66e45d4834d3041e91af71775c239a0d885c6d32fc0b57d2048f852f0f", "0987cb265a671ece00260576b9feadb8d70e3810cad6b12ef1a38c463423f4ff"), ("292cb022644f099221744bd10380e6f0d0d59d46467f4a8de55aa2656fd8bf47", "25d85137b51a46101256ca30af303895fecdcf0fb3b098b46ddd82a2c3212cbc", "0fcfbf040e5d531e986f71252c8f5cb7eeb27e3e9788f814a7260ddd0a2f2f64", "18fc44ffe2f00c7a2e23fe1df57a90fc4e1c289b82f720da99acd2275a844bd8"), ("2d914d26115e2c711f0cc0620680e9f259c24f87d691e21b30265a28c04cfa1c", "0c6979f403efc881e7277e95c0ceff1cfdecf0431cb542ae434e3e5ca2cfb073", "1de8e43a2119a8d7b2f63c6c951bc5b072cc717d95b63bba84d0459afa6ecb44", "086ef74ce2fb0d3a2232b08d3931c094082a6eecb2159ba2a69e7653682a8b3e"), ("1678c32ba7516bc7a3509ca66062d13b1425b1a4641b65a8e885e5a57d342a05", "118fea99d67facbeb8396349f4d0fbef3db444931ef67320bdf6bb0c6344c1bd", "269b1533cda0517f6ace5c9bd80a22e66971a7747bf7c1f4129ab31a8cc642cf", "156074b5bd37eac7cad025b973d0e698d85fae6c5f7593d315f18966135ab3cc"), ("2455fe91be423e3590e9d5abb1432fd416bba8998ea03488f0f23220d305579f", "1539ef9186eb9e09f98221ccc31eb33b6944babc6005e8b0e7b5d18fc26477a4", "13ca8a9989e8f95bb5cf51ef3571fb1ebc306ea6f535516bcc8d7e37f197065f", "1a8b3db9ecb9bb5bd535f29236985b6f6dec579de3f1244c76440798aad85a1a"), ("206cda7af3981fefcfcd2e34db64c37d267ff720a4ad71ce863fe14eb2d47d53", "2f8c60e1b0b788fbe3ab38424ddd96219f3aeba3627f6588ab751808ca5c1cd7", "10b5a1b8e6a3970e4ff37be515e9407bbc57045f16c9dba5a893dab12afb71bd", "0f1169bdb1c97bf743487237e11aa0dfd239c271aea3c3fe08ec96be2af8def8"), ("0237b60d60280d209d1f8073b481a8482e197430214426336be2804d92a92edd", "17eb01d4dcf17506b2f2c1f008ed82c6e6522ee4e910b42d542ba15fc264e563", "21b7a4ac1dd0e22f11ae4b74aa7aea24a07a77973b812f606d20a6c7a2314fd2", "1d5fe8930d9acb86d3a5b72bfe68d93aa79765d4b8e31bd70f150085f5160fac"), ("0afe4cf92596bbeeba79a50b370f2580541ab03534952d8fbba705f7812ebbe5", "146af4af21b3dd40788ae5412f39836e4b6fafe068cafa0e738989159deb9a41", "0392512c8f0ad2a6fa718c12a3b782c0d2848f5246a225b3c10cdc46187154d1", "209d9aee4503302c356895eadcdd86b9834c7c81a20297d0e6b725aa6e98e7d7"), ("2cb9efe1de29bcfe2da223f05321ca06916f62136cbe9302821a2c7c635db50d", "21bba62bf530fb9dd31c0598045c0e97c8e4fdf3b0197dcba6a8c5e583a5e31a", "05365a1f9695b3e88db33128599af592d9bdbe09ecb33ef3dd4100b56405c70d", "0ab393655ac9131412151cda501d0c26d8a163e763b45a81dc07505b7a862faa"), ("05b0346a4b1d26e4edfd1fd9840dfcc873ec9b289f62a1a0f217caf18e80b8d4", "2111f27873ed928fff48435bcbfbcb5e3169a8c5761ad1c0ec70fedb59f7ee7c", "2aa2c57d56e6a0a8fdc14da7ca4c9f8eac760d7dbd46a0c350980c93dd8cf4c4", "1535beb21cf8d11d43a36be74934991c007dfb26d6707e7cc899d2ad9559fb5c"), ("03f3cfa2ef860d25e64827772f31506cdbde6923643f5590d329a02cb5b39b4d", "1ada88adf31136991b93cce5057af3a735780770201bd81e784173e3ea3d68de", "1d5106edf140fcde8e4815e65773ed79d63ef0558713d70bd8a12180693b087d", "2680648543f807e3907748a17528d9e07794f35981106b72b4d299835e4e650b"), ("1adf5dad429c99e89055d2325e10d9a506193209218cdfc768b83a7aee2c2cd1", "1857c32d86599bdc5dcaa3f7d2f1856883bb666a60c329835d5166fff396b055", "155bee98e40b041f9de8da73a3afdbbcd5257fdab8a687c85453f0f968a9c59f", "2a7c2e8ed1e4a85349bf48b79a13562edf76787eb55481d430a257bf063739bb"), ("080d5b514bfb80dff24bddb34fc0be39bfbf7b9fccb01b77eb3990339990c9ea", "09fd2597f23d913f18ea1b03901a362894a2a42ce5265fb0cabacad8c1f9a541", "04c3a9ed213dd6e90cb984739c1fddbe85174f617909695801ceab1237e1a81e", "07ed66cc1dd22de550bdfb89c09ee838bbed2050649e0664c0715d5956f26b63"), ("23b125ecf5d274e714df21ed701cbf9cd9d648a658753dbcf0336ae94abf5821", "20be9b80815131afd1b33717ce3bb682b6abefc9557013dde15fa186151eb402", "0d263ece89541665f628a0dd356dc21739bced284c995eda82ceede669af102c", "1a176e965c0b912f2801bf1b446b93822f449a996fae995e551534298532eeaa"), ("18a90c9ca3927bd7b205c236c4a8712f871910738fd4bf2d8e3a381206e9ef14", "176fce5c2ff482588881f2355e310ea8a03d5bcad83f3f3d38cd727bef2748bd", "029993318e2c611d51d4150fb1ba7214cffd0ba31cc78b364bf414deed5adb7a", "1d60789b29d8442ce3ecaa97d28fea93f4cb31ee2aa27484247eacb704547b58"), ("2bd4c4243c7018c9efd8ac6b167744e37ed520ae84390674e309a443b716a3b4", "0bf2ea76feacb8594b04e1420e9b4f31d5068779df4d4d7552aeac7da6229b05", "194baa0b7123119d98f1d16909da677a4d569fcadecbf4b8ecc79c69006c1763", "1f01fcdff96e6ed482cbc8baebfb1b4d724fe9c60fd38d4bc8113121c92405a9"), ("24fd3eb6eea1552f994ec9007111ba88b932c6ee7023feef6ef6166bd29f1fd8", "0afa154c94bd724f50679a5218ab5a749d6c58a206a6d6b459a85b82067fa788", "0574295bc28e04443eac934b2133dddb7ea98898530949af97e103266727089e", "002170ff8c122df84ead17609764b402b7010a3d1bf98b8fc2ae9f6430fbcb15"), ("04fbdee458718b1ea42ab5a807b5f487a16a39c0978819ccf45c5875b736e7cf", "2413f0eb1fe16033d61202e298f3697f95e41db5296c0be670bf3d61dbaacbf6", "27cdf06280c819f30a45bf67eda4ab36fdf260bb4d462a23f1c37bda4a38126f", "020162e8606e4993d44128cce04cd46c1263f100bc767682d559d8cd7a19d792"), ("11736161cb5a78bb7f6841ce6f1f4b341b55fd47eb69d02cc664760b7df93c89", "0388051761ad2a5cecc18712db407a6a45f0da4a8fdb69d8cc563f448f88d109", "1b7746aa84a378ca082f38c55c4ff34c55d387a29262f98a2aa2111b754a639b", "00f7507859cde4a548a85c704c16a2fd6c00ece471e532fd5de94d76ea1f4525"), ("0e3cb03736c49815112ee06f82392416c059574017bc547662a7c96c6892b147", "026ab96a24a39daa02d3080f18e7bf52e46a4d3520630304bb6b2e3d46439e4a", "25e38cb83c1411c056b66d0fc5dbaa3eda1d90e8ac28b9bb3c7d6d1da1d519ee", "0c1560dd8dd92dcd940d3b9666ecf38e9466aa54bab0eea872d77a64ece6ac39"), ("256469872528afdc78e5c2966dc41ef4d80b0f5de97defb90965409eec2cc9f2", "10318504845ca204622504232aa621f6510d19697dfe98b493d3ba1bbd2523b1", "23ed40e04d71568afc2c0d7d703b4ee2ff8bcb0d0caf420352d015801667f5f5", "2719fe82059a2fba4d8fa96685ed527f2040de560e28698ee5b87456d3c855f7"), ("1eb77212a52ae4e8b1af85695bf7cb9ee5e31622223df289482444adb874036a", "27f4617bc1b6127900ed8df84d8301d7d307d2100ba2f65a2e42283e1c009148", "17631501cc7c3282c33606ff406a53f2926975920fc62bb68a0c5c9967aebf80", "0d7724aabfe143a308844db98f0c952da83a3ba8acd1f1795f654ec7f29b0125"), ("1546fa841046bb72420b91011016f24b760e267b277a882c15ef7cd46552da0a", "1b8b5059fd2bae9228b0df0f96b01dd4ed4c04b1870193da00ddb4299c25aab3", "096c454984265f5e56af2ceddcebb90afe31eb91be7e76aeebc9c73a4f38d11b", "27a846c13fbeb594b4e6415f8159bc91d02f34b693c091bc5e46901d3abb42ac"), ("14e0a21914b95c5deaf9de72854ce72e638fd176d9712d947e79cc6c55dac093", "257d7645a391ece3c911504f7b643e37717e1ceb2218f02b5cea9d96cbd629c9", "0ad62a77084336b802d5ed6e914e9c18168d011c5d77641a49a9c3d8e9983fee", "0f27e15f45edea88ad20432a5341868bb8128b6e86cef45f3e603f4921fb0f7c"), ("2bb85c1109dab61175c5a0b072374a4e9633ae4a153ce36486ba404880627585", "0eb718b9c98bfb0a081f86f5db9e22657e92e49ccfdf05cee509496ca78060d0", "2e15dfa8d897bf7ce0477d99d0d5a4153d122affb5356e0fefd7354e8194d97d", "04f2919e9fb22119fca51e22434b55713c019a928162d6290668acde4e54ba1d"), ("2488f1e4d68c1b8caf519a741bc233971b28fc32a2786c886c116dfb99027cc0", "2ce5be11981b11cb2e03cdc0be4a4a1ac6cada228c29f65a6065e794619c5463", "0aba6108fc2bb910b88e8b4618f765ebcf33afc5cc9d4aeab5f46bfbcf3d6484", "24f5d90b11db4be2100024a27acc020cae44fd65c069b059fd97e34b9ae6148b"), ("1225e324de805ae9d716c7f7d2519dbd0e662d59516d4e11223258fe4533dc06", "1c7f012bc80659ed7cf101ae734758e7009ad27a904bc4b7bde9dde4003bb0a0", "215fca4ff21554d35b62774436a91bccdc43e825ae50059fa4a5dd9f2da0692a", "18560d25532702e7f3362c917c637627704db18f64ccffec34b9d1eecaa849b5"), ("286a677c56af2a1cd10a4826b20cd12b1831aea96bab05371937e7fb982c1d87", "2172439ee5538aa2b5aa3bc93b6999fd3c3c0b6c249a8c4eedde517dd00a60b5", "23430d2243653fb621c1d0d9dfd56bae754be1d7674c65f022250befbb3baa9c", "0f144f59cb3617cb49c33386e3f891f2e40360766d744667053e99590cf7ceff"), ("0f4277dc9b8e2cb681e89cfdc9f06b2903005dfecdff49190df67e6ea6797dae", "06391d1e8bba08803c8fcfee47bb8661563aaed7cdfb678910a0ad6cb6e5726c", "150227e1bb7df714dd82ba31b789427c6d744aa51a3245fc6436cfe85578bad8", "0349a148ab16bec1cab6ee51722595a02660f6a98c3436326c57d737ee3d277b"), ("1852f0cfb42b802c62dfdbaac0737f591682e8a39ad2b46a74ab5c004d7404aa", "1864f2b066a1d2bd731f43131d3a049599077485782ffd2c304310d141fc27f4", "08de558c3eab200da5e568543ad02e714e48f42bbf2f57bf62829e51864f7e15", "0f28ff705c6bf8ebe0e24a6d2d30bcd045f79392fed581408331f882c1037a0e"), ("19507ea78453d2f90ef2dd4341f162a4fa79fd02006f80df230cb85ac5415d2f", "15583b2f0f0dbf153cb3a7ffd706be4d8fe3196dab99a7df5b9dcfe0f5429100", "108edf5f82b8d5ed0af2428778bea1005ad1cb04beab5ec726a4f74b6413576f", "0b2c9cf361ea067cbfba423405f1ef748706777974d5ed4b3db8bc880438fdbf"), ("03f181404cf027d8f06cebadbbd82da146ebc06fbace98ac5ba924eb2ad833e5", "0180eca469974bc0315e5022ad8b602c02128300a003cfc206a04df50d4569b6", "109ab01775ae95d333c7fe5645a3f5f0ba41eb8962b613f88903447f3eda8663", "25997304a28fb83198d2cb2a386f92c34515fd7c15983da876badcc01575876f"), ("04eeb466566234a727a0c1b0ee25efb40f6c895dfa1d371c6245f41dc097e3d5", "0bb608e281394ec21fac54368f1c6f01f1268b306923b07081c01bd46675ff31", "14efee613c8005e85de304cc8e8d2503875d0a93819eadcc3908a0e24a0b22ca", "1355effa853e0e523f3c460edffbf2aaf86cc3979555c645745c42fc8e129ead"), ("10730d0db8298c5c7f1bda39680d2b2aaa69eef18d630b9324070f791a573a13", "1ca8ef3eb6f5002e1df35953db1559b919da32e00e8340e16d317d07ababba6d", "0beec67f52e337f0b7b50739ab54571584dae910b9bedad7d1e29d2427d21cdf", "2a7b7571d3dce1a4bb079ea99a6792b8980356691b28fac2469a7158b367c8e4"), ("21ade18202bb3cac7c3cf4f14f935720c8c1a04b079d9e9e3e3b6c70d643510c", "0a85ee82bd9ee895b3ba7f3411761c0cd58fac98c62d68d0573c5b748e365314", "25030e30612b519883566a2dfd00f41cf2e5258207662064449534b936ad7703", "2aeb413fa55604c996fb0343d657c6bbad0b80b690d26dcb3fe11b50502d36c4"), ("1d2d3e6d6d8ec774cb254c7becf14ce8f626ecb9f3c8bca0f15e6fcfef7543f1", "0f61f95cf84ca8440f240ba7972f19cbce3b7bb975c628bda2708ba3024a4644", "2238940a000aeb20a01619e4e2f41aed4b4223944cad8857df20194afaa01021", "0370cd2891734666b946f7b1307082f64e49a9970bab9e981a30f30c3e1633e5"), ("0451348ee080dcda4dd66818f9588661a9cefd71ee649fe55ec330114b1edb23", "0037febe4f7e2cf0800070fc3c687b444bc6a1fbe22580f1dd3cf8b7bcd0e923", "0b397dc6e66ebb6dc72f169c6de1e6106b9be05c49bb934c1d810dd15190d179", "03bc7273718790c3b05619a86146cdce981617db0c13d557140088cd4dd58c6d"), ("29b5788b517a6d73adac367be2f9b697053875f12fb99c8a23f542bbfe5524a6", "08dbdbec53e47a5040ed00e5dd529a1135d6614470ad80a375a6a60505bf6a2e", "0218c2d8daffdf6d7f5240c782b7be6b575a3c82bd40ad7084665e55dfb51925", "1b301e05f2415b1d773543c01aa1974f2289cb0e48705ab2d9fb93b5aa9fc8d5"), ("234c702aed88888e03442353fbfd296ba6ff8bb700d3bdc76a03544df872ffd4", "1032484485ac8297d3270dcf449fb9b44944dfedf7e6f6b0f19468dd7ac35c5f", "190aaf4c8f048e572bf8de479e1305146fcf54bd0b4546d34cc45d10097cc89d", "1b8202164087980e284467fbc386d541e060641dd3f738c3b295bf26449b3b54"), ("2b56d5cb5f8c8298c2b9982a2b91d5b5038807e09c0aa899fb85c5c5e65ab4b7", "0925fe2b4528aaf1780b2b8f19725fa22b160c86e7d58203db042cf821ea56a8", "2e11550f7dfa2bd86f02ce4a7069e4631b6ebaad3eec01c0627044117657c11b", "0b45479c8a1439c174ee711556bc27549a21c0166962d974117ef248f5f1ee26"), ("24368111636a9e21e6feb3803f82059354ebe5a2875d444bbf2c621363df4f47", "0455fe178be2bf6c238cda046ba9ed1176791d6e78641af3f8f4aa5ec28b7ab5", "2416d8e23b73208be71294b3761b040c9ad56fba78afaff79363d79c680e91a5", "0794a0da9b2140d2c3f36526dbf1eb1d5c1fa30c3f1ce32451769fc8b8debd73"), ("1cfc9698b22642adf8ddbe4bf65081fa2f29aab30b622f28a814cf23582d1713", "258d5e1028528623a8206a39437a82d2e05b2cc9d46ffa86b5dd651401e54e72", "13e127d36a8690b66f5d486b8be11f0f3b57d9487a213c4be1be52cbef9b6333", "25054c1f128068c5fcf63bd5aa04fc4e44c62f3795eb0eba54e2a930f41a44df"), ("13ca5e0ce84d6e5782a75722e79b09395f2331745757b0ddf8780edb42a6d800", "0ae1d79b44354ba820ecc0a4c4942ffe46f3defc9b41c57c164110031e3427f1", "3015944f5b9d931286140ffc11f32416a871999dc0d85ca5ccf00e24c48f603b", "18e342f8ce82a25618597f62c3f994f2be9e57611be7fae373f24e6d216777a9"), ("070bea021b8bf0e0c8c380a104f158eb9cd7446ef11cb94c5b95fe0381b7c376", "105a833139dc1a2ab69f4e800680db5c4f593c739c44ff32e1d2d5e09a075a48", "2f1888dec898027fff78d1044ccf67afe11613eea159383f0864aefc0f116370", "0aac018b9f45bf0658492ce80b92cd3d2e2e35e8c074b233c8a503a7072e1520"), ("107c538c423223788b00ab8aa90daddf24f30c4f6a0f38ec5f037a20d85a0172", "30409eff6eff2a29fa47a3b407665e44db0acb4f9f5eec960a2164bf500d8f8a", "2f09a5444b708b2b9fae837fa911bffe9ab4963a4db03469f09e236b9f21a327", "05a4f81b70036b510e3ba98ea4545e3c830392c52f493bb4b1457e7d9da6c5bc"), ("2076d3dddf5648e240b9443e6dc4bc293cdb2f4355fb782c1bfc3c0e4fe235ef", "0b3a67be0b5769f076f046265350cb8fc3914bbc326de095b57c3b9ca867d78e", "2a7def8f1da56c49dd50ccbac1518b76f2e1360950641ef7a0e45fd1ead3fc22", "01b710740cb4e78cf96110d81c41b679555395f299ae594bffa963b5809ca622"), ("3014e0dbd3f5db74220e73f47d5cc11e7605ce427b44dcb0e5e37ac92bde27ae", "0753538a0f4254a44a97758b20d13e3f8f15747eee8eb0d4ae7464af5d25e03f", "0f8db6303b892132b91f4a2dd4496f7ba31b0f88dbce729ebefc9c344ecd3f6c", "1b759ec17bef40c6663dc4e4047d43406c1ebeaea04d37ec8c6c11e7f7743ea7"), ("1af80a5edd0a404f327b125fc498fc87f11657c557b95071e0e9d69a6b643e9d", "0336be3379386c74907bd2f9541b9701a5aa349ffe7e0ad83b53ced558c15d74", "1ad7a9a052a4b312414138f63461779494b32e81298df735eccaf6068b844f3a", "1b1a2a2fd848a0a1d47ef0582ff132178d448116a3ce94b6e2dbe8474e67ea74"), ("27ea76c2d6eaf94498f728ea9ee4d833478755539233a94b68d0500ee7a7d254", "043b18470f5a16934a602b0287e5608c586a54a34a6dffab6740c262678a042e", "0c53b66760c113999176a6c26ad842632c402b76524ac685ec6b33e83c1d1465", "0258a221889ca18f07ad19d6920003b69405e0406a619bfce13a702c963e7ce0"), ("0f387eeeee4f82c362e5102ac49d932bae4895a245ef209af0e2a9c99a23ab6b", "2295704f7ab8f65c86eb4262c47d7e165e88c4919c16989ea9526e0fdcbf0c26", "1b5c00f595c35b0cd6a1b6421b203759dbe47e3d3d132d551df874d1b94f6b31", "18865d7981e62a9456638617682ea5b64edd47bb79f9989b9f74787487e26a7d"), ("04eb72e22e0d3da79568131895ed5ce6ff0af0e72ad16f05b9b5b8c4ef64b6aa", "089cfc054972fe940533abab9f5524da4bc1104781919b7af6b450b50b9afa83", "0bbd3f802fdfa976664add7e8be96d53460214dee382d8813dc295feb1e022cc", "2a0e3d9d03b306fd5913f1d9a7035a115d0bb23533d186581301e69aaca8137d"), ("063bc700389d6a4434e839b330fe4a5279b9a94c4be80335cbe32f609dbe4854", "2d990067e6ccfbe03316c575419e837aa8a87d14df5980389c6b11bab76f96be", "1060861b82e0588f924ae69256851c96829e5da46a62defd2be0308f33c805bd", "2ec142c33a870833749c39389f12f11e8d9945d1da5c00c2ba8341c949f180ab"), ("0cc151d4268a2bb1f566265f6e2814dce3759b4b917eb6a41f1bda4ca703a3a0", "2e63f69882baa0fc2d952f290b0525a4cbd7ecfa7d7072a8d5f38ef436f51e24", "1a8b72768fb9ea24524380751f16d7195b96d028cf0f54cb8fed736e83d1ecf9", "2d48089af52d1089a0af25f05d869213e521eed1299a14fe42572948bbc5fbb9"), ("2ee2e441d376f5935a1e512ae55759e7e7638322f23bad7f70cb6c8427d64a7d", "237b39c8586ea8b319078f4c53562179da3d6a96561774ac7a7da5c17e49a28e", "07539cd9c068a126fa488f0f275ca152515e455d8396c4f69a96477506df547c", "0a9831efeaa2b5e558dada5272d30e27cd0b49bbc81d45182b6de40f83aee5d2"), ("1a95133bd6b10ddaf64d8d27deb2f3f611953f9ba9862b76eb7c296ea1d453fb", "06d6cdb717120fd1dce4fc1e086aa7de7d691314d0c38558ba478dd58d20e864", "0b950a5948ecb1f0d9bc6d85e5ffb8c974a04232fb344e2c307200fcf76717b1", "0751c2c90eae47f35fa6c0a663305221967243dd2ce389b5ec0d5a5c3dc4d57c"), ("299dd36bc2ddfc592181b7216a519a4056ee9bf133fa73d4238e137237da7682", "20d121c1cac665b5aada7b8851ae738592d43da36c67454390e44c6ad12bed57", "06ede83551bdd16592e9326b67fad9df8c96409859c7cec1f2e1c10db18235c0", "0ac2ecb244fcb8cf32e63533d7d0ccd09e29ba0ea3b8e1f6bc96446f60d7184f"), ("2eecfee6e836346a3311055ed2f57a07a4999dfdbde545c2e8532c9c9c45cf6b", "1c416bddcac770116ab1071d2d93030cebb50375809961327ea2866d00232651", "194f9a7f040b28362ff447c7a8b2a30d73f235f2da8bfb1966df4e5a6b7e90cc", "051934cced2d4fd6806c4a3537e04431ef96ae2969c9dbc602280c3f21946072"), ("2d2b73ab1fad7576787f951665e908d045d8ed8c19408615ac5c2595ffad06bf", "227f9c8c5cea416d92acd33181d73bb1319bc23ba6c1b9f66618fa06aafe05b7", "04814b6b938ce2db265f0a772216c4e8ef54f56d0779e424d9ce57f1d7e8c5d8", "1331c18a963f2b761b7b9314c19d5f4733dce31ae61681aab578d57cc9acbc8c"), ("28445bc3ce1714ff1b64fe2a34a920cabf57ac56d80984e345e83c215cac308f", "0efba71110ed59cf8438f74975b02da3769c408900efc1412a0db07d922f2403", "0d51b91b03567dfcbcef286b806b98b9dae686a145c252ad7861e3cf27d8f420", "00ae6aaf09f2a85d83f49fedca8c6f176bd0a3e8213b72cb302a60796bb8b7b9"), ("03ae25a923b34edd8d98538dffa7f1d834ec6b2a60e72f3c475e9424818a2f2e", "02e51b0ff60f0289d46460e497f40bce29eed48a31ce5e88af54af96347f988f", "04dfa4aadd0d21135b107574c7c21251c7b913a62d89724347b0666986ac7c69", "3019f7cbd52f2b79122c2cf3231d63acdf805adbdf26892f7b99ec3a466d69cd"), ("245394f9a35e78c2de795d697c6d8d125982c8708f9ccd0adaab92a3703d77e8", "23e2e375480e910c649dd025d9ec444265668964b62217bfa65853128637225d", "15d5883420fbb282426742c6a43be110bc7e8a22e9422774d95720b451277b7c", "1a8b2d0b0e2727720a57d2e79b95b344e1c8c84d9de353df6097b1b159ffcc97"), ("2c6eeeeabd4c8063f94cce534aa6514565debbdfc35fb6a38dd9a0eb18adf014", "07f8286f76345cd95b613b3745b53495cd58edc56cacce59fa2415f5032d7710", "184ca1da68a58dee97025083ed305ab3693c6b27a582511d5d4e1d26130bb137", "0d6e3a4c019f152aa6e74dcdb194e7351ff1d9ba529b597048b06b121bb848eb"), ("22f891712bb22c7175314de6dabe5225fd4eca3231158f069bb1de0345072570", "129b3a6ee7ed191e21623c9f032304da1618c4fbebaaba8ada5ee7853e322ac7", "02775a30ef4e9bdff04d615b5788fc33b368a8f8b9d0006656587d7f1b82e270", "164fddec4ee5574d6fcacb311c17ce0a6752aea7262e8582e6a5cb8f85c404fe"), ("2a31016074b2e13c13aa401f584a04b2602548452e02febb193047022fe2fb1c", "129828334d69ea0adfad4911379318b4e4dfec4d1be85c1d95654d0885b52e71", "25c899653593743f28be381f7c38e7d8c628062376d49bec91759610b505725b", "2d9ac7c720b51673118b1eaa7b8a782ab054c0811f223b805ff77eab881b695d"), ("1e4e3f114c9b7c99214d305c0f2d6b4dce15379a7d41e53782011aacb78fa7d5", "1c035f8675e6ffdf0692f7450e3a77609985521e4a8d6a0ab5d5696b1bcb7028", "22d90befe364d26b4f748429a57bbfe8dc2316038965cc07d4d6c1dfce712fcd", "035583afdc41352fbcc3c9f5b07fa4b4e960c44a689c7fc66b66a0bc00d62f87"), ("1201a71861686645e9dbde72e5fcdffbe751013a2aa6123b3e3077832b0d981e", "1c1ff2d65748721ef7d22af90f7155a46f3da08cff26d6f040909167a972f0d9", "06bd890a4111c25240d8ed06985859026f45c916508a9e739d1892f4ccff0857", "0be32c211893f5227a1ebcf080f58f5c1ce7264862ca3e37c8af15e700fd4b3c"), ("18959e17b720c6a9aa57d6d3f67b3f52e82257cf0849c7731a4e22bae39425ec", "1143df9305c79730548c56984134812775f402405dbad3ca851afe8a6dde7e24", "070f72bca68df10d2af07aaef315d333c180dab4770ec3827b5668b04eac2eaf", "2631ec53cd7bce4c22342dc92da991a6c1c3e9d037ce672f19c52375e60343eb"), ("23ac68d0b7b7085fb57b5f6ab89e4dbeec508e1721446d5166bcb843a7099329", "2e6bd8b0c2a90b17b1057b88bdbfa5eb09008bb4bb29d815871710f11608ad29", "21e294e4bc0a61a21a76f1e6fa0264cdc1178ae9019702a8ef85f8cb2ee241e1", "20b755d81495ef24f826932870f8f2b35142f6e90f6d1b1f0825b949ec31be2e"), ("1b34f0b44485347e0bb8ca43ef6d6dec55a2c2eaff302f791ab3e3365406f2bb", "2342309a1ebe432aa25a3eacce081921ad82e6adffe51203846ceedefca8af7d", "0f249c8f0ebcbdc1b97e466d9764129e910df03e5f76852e3ac741bf44980e0e", "001f4f79a592ec1d474fcd0ed0d24de06572fc854832d8b5385a0ccb10206cde"), ("039d5ede09b1714971cad2fb6e7b593d3e47dc52de96c9b2125beb3f69c60812", "05ca7e5f2b27e4f6262cabe77eb9f693c3df714e3b5ab1890e2407462cf38e2b", "06828aa8a83978c89b376729612371a7d4c0161419b3fd88479e69b1494f69c9", "18f7e5d71c9ca1a9853401a567a49854c5d7e2757dbe3328fbe17e8648022194"), ("220710d33d98550cd97d2cd31cf642e2b6c793985779827b112069c2b36d9504", "01c0952148327c23c2138040440f67619d036ffeebcc5f009f7f000ba64d7d18", "0bde99847094fff4e54da9311c3ce95ff2327edc01361794492d443d9d107e03", "0272a0546bf06daf37360030b13f264b34380c0a9d9a7ff86005c12a6c9c2439"), ("2513bb0bea02918890374992225478315b0731d739441d87099fd2c54e9be445", "2b34b3f2b0c6569c3cada876855543965729e30b198995241be3e935bf81bd87", "08a360558d4eaa42d103308baa9647b469b7130ed8f9b4cf9b17b67657e01f93", "2d21b6dd51848d3c4a1e85e231a46e7fd9e4f4e3361d3c6040c130b8601fc094"), ("2f68975b79fb54f14e41ae472e8f64e8be24c2201f9637c1aa026c01631c289d", "2b0dc66ee48efd9078fe309f7cb6d577cd8293bbda000fb8b55248feda99ae53", "28e160ba8567d85f35d6e2505ae4b2715cf500d65d99840020bc6ea89b418f7f", "2aca137b4d6819916728b98f47fe6a1ee3ad9fef149a04114542954c25866ccc"), ("03d4d50dac8254a311e148b1b1162860a8d586c758f732621e0bc979206d9d13", "10c7c9a22e85b1c51458c07c000b0adbc8a4650c5fbfb97a94d74f25056dee47", "2e337894ab75eefeb92f67ca204717af39f51f18e846668422a45f818a638bec", "077fe941bba10855e0c4366c1cd5d69f81c3cecbc1dfd03b73ea7095acfda13b"), ("2d24f132de3973a44aa24ea1dff7f316d1edd9ed95f89759175da7bf6f76e3ec", "125c5495fa42e0221ccf372b24f7d9a682e84b5947a651f3168e9a7156e3320b", "129d69aa89028d3af83b4cd6554009e8c8f7b157dd631cec7a1028dc07d9d6be", "2bfe13e5f8f2250f02f93a5e306e778a6a043f7429772d9b0f55f501ee0a21a6"), ("24bbd8115fb140ec7cca6dc62af0615dc150be4b2c0e1eab847dfbf286e0ecc3", "01ad6fc93da6282d37971d9e28615ec79f4cdf0b4ef8b97208837eeb5306b08e", "07ebb4f7797a658f5ade36ed6ed1d8f8c2de161e9d731d6b1acb44b91ec9794e", "23a02d425fe2c7788dac93bf33ab99b673a89a967ec3e844231d1cfbaa3baa20"), ("15fe0bc9a7357ea208a59cda783d16b4b44046f6e19f34be0b6efa03cc212029", "190a7327bf324776d184f256632dadba66f95e40e80348ac7540e59394ec58dd", "00c7b39aa0a848e710d9d30b2b5ac3c4fae1aa9eed8b2f66d41273edbdcee899", "0c54c9c601dbc4ff8f6122f3da42bb80cb830ebd672a485c1682263f2da0ecc1"), ("0bd552370d648f65bb0a47152a400561b60e87e2c23c6dad5e6772b2b34df4eb", "19799a976966cb86f0c824104a9c52e778365d50d2108491676152d58cf30b79", "231b902dc15e182ddf1ca9ece41e7c3bacf250d04d558ab6f735ab9b44e80b3b", "1a7aace0e792c32358dc64d626242c2dfcebe18bfe5a1c07bd252666cfd32606"), ("17da0178da167b746c8da9996c0cad7f2fd576a7e0ca3c46331d2572f4d893be", "124efdcad48cd960410e640b79df168025528dbfc3fcdf340239652fc0eea713", "2a8be0e14b4f53b4beeb07e2ac856fa0dde41f02a68ab295c5b6256e3d1bbb91", "05af5eeff62a56815e57046b6060a0afc8019569ec3329cb0a1973ea81e919b1"), ("16d3bd7cf0199b914477145288bb87d12a258a7abe51fd2b60fc71056d4328f2", "17a9e970e16bd82b1311a27b3ccbdb3283d6b7be1682f42f62438f5a3a4d2294", "23018836e3fcd46359332c78b06bb5a69627424ebf84db6f31ad89cbf2036703", "0062b8a9472aa8f0787504049122aca0559a046116d29f8dd6c4be62c3053b33"), ("1b8b3b13a61d04c2bb588b4a9ed940a603bd207d16e7b31f1c0fa4b718248f88", "29cfb853f9c7988c82d062ab1b87e5466a9cc308755d98983f7ed4635eb30870", "1747baac0bac2ef352bf27322631c44a4d1b2174d9a36e595a3fad02041e19e1", "1faa0d473d42db3b6186bd27badebccc0a745c178d9f6780fa5d1c0a51cfdfbf"), ("194caec9664017f02e2b3576f0c9a53d6fd3c33750c44b8f5432dfd61e687386", "11dcbc6ed226109243c45e5c8d7c57e3fdedc245fddc42f7b6a22abaa98340c8", "2c28b1736ca63b21d444ffba542f612b64dc5a1050d199a94f7f9edbda29e3de", "2a9125c407d63f02417681eb81ce400902129d6ff20673c863c90cb68f204d06"), ("0f35f5ef9a816b309e42746041c7ffad7a994f19ad0f04e16f44eea1a9c5f92a", "2b0c2fdf6c3f3ef96ba89b620b49ae05844ad6e54e3494fb6a257b23116405c4", "0271b28c85481ff4e3fbb6548e22eb1c16900165f6c6de94562566893777626c", "23717729fc4f56a812badbca3ab934157e14aa229fa1d911b8843229ae1eb5e3"), ("1688e1522d532f2b80dc3ea21b4a7c7a6f7c219105638426d6c56eec5007370a", "0c4afa8b80cd42d572e51a3fd04d86231fa3197e385e0bb75416ce3c98da40d3", "2d5e087d55a9594f4e84a3141e77fc3ea0fab4297ab73652006a7dc9ebdd40e4", "0e2ab6661679bfecad38efd9de6c90422cfc6ede2fd7a0cf1c25cc4e8a73482c"), ("03e74fca4f9378e7935c2e8a9d722bb24e1736cd7ef9a7626c8d609ce333680a", "2dbfcccebaf6b7372e6c4901549a1d4c93c092b3e0378de74faf706d2e73229a", "2c0bd5462516431cc67bf50be1d85ad5056ec4dc3e0e680f9da84aca9c84cf34", "01b6327db65ae7c0f4025ea45af34b11f038912e07d030f93af9278d61be7177"), ("0a43594415f835da388d25f86acfa1dbb763f2735f6142a0df1a831f90235ade", "086b9d3a5569b12eb0f46cb0a62542400019371fc3c72d49815c3512727c36f9", "21c6eea30e9353bb8a42056d2838c1746188c67f5e7a8e40c7dda274de2f8f18", "179146e90076859a68e0af2d2de90545f6e2aa6306d976838a41bc99f6b64f22"), ("1bd0575df1780cb8fa0a5123c58282daa9503e672b526d08ae412e0ac2f0a9c1", "190ecd178925ef6b7f0b31286441ef63b2125a7338d6096ae809727a41fc8942", "231eaf3f0349ee7570e85457cef590b18603b6644be72dc85f31b61230c1ecac", "2bef70d38bb008963b756b9eea149000905ebb38fed5abcfa22f11992916b8bc"), ("0f12e5de5628fb9cab92a6741e4a4ce210b38fe5b3be3c41578c2a641e9602e6", "00f8d7ebb01387e9a844a2f0abae3d3b9876d8c50b610c4e9624374bcbd929b3", "1b17770e071684eb952c1c74ff06b60580a5b24fef489dd985d9c00867518af5", "0ed6040b436ff1b15d88ae25a7437d82d4f02ee4d93eaa5967bc59734950dba4"), ("302cc9d13640ff23187e2a449e6f43bffd2800740c3ca14a044d26a3b93e1db7", "15014c9ed137573fb8850609d9059e7b37ac4b2ffd92a5aaa3c2adf7ea51a7f8", "1ad7bed0052031ea95c6209add04588e27716d6a129734799d8681310a9def89", "0abefe6b0bfd4fd1e9b32cf4c6ee8e1006edef2f58670cc2b41d3dd76dd13fe1"), ("2caec58d9782645ea6435f267dbbee54beeafbabb290ef055933ebf13ae434ac", "2ae1d75fa64b841c6cc083fee37696c5708d2ad33be6ceb63ffe9b4db232e758", "0dfbd40c213f4737562cf034af55e1cdb8d580283c4117f1a705c0f62c780d9b", "12d68b293b523d67c43f5fff15063bb2e4741726f6b9c175f2a8045c314969b9"), ("0a1e7fc18a54b856428a2b6355e6fc676008c3ac19dfb9c4d653d30675679089", "2aa67d21cb332c404e842c3d589ff41ea37f02d3cb380f59386fddfcc8481a27", "27fb0220bffcfade423750a7c626a9f5240214126bb7e9ed59bd4b42bbf1db9a", "2b67769fbea6f69528e12a907bdb6f20154827531b380a4320d1d8176c625616"), ("1f577ac3a56b1d6a8021ec956b290626bcaa8d7a3c32300e38e0bc05a6dbbd43", "13d60f465aa1c452fa99566a5cdf4532a8125f35a22c8797da38548eb7f4d660", "0a799955c5c42c7219f5a0c3690b8aaa7af76554df787f3ffa5536537d37c42b", "185a671243f809265bb39fcbde218180768df9647ff43e819daa09f69a99888c"), ("0080e1aa706ac1feaba5896feda4b8534851d467b1f9d410592b0bd337abd1a9", "1db0e7b06b615bf3497a1c494f2290853b8c0ddb29b664c660da10d001931221", "2de8f00cfde4244b17e32029db98110033987bd7ecf8b8ed659e6d284171810b", "13c91b7a6d69c3ce41fb1730a906311a18f5667d1c2f6279f56ba45feeb9cb60"), ("1a7821fb8ad339a8615c8439bf4114df1fb52f1b7a73d2b361db898753183fdf", "110bc733581a96692a1bdaca94b5fde5d66852fae529534f345db08435143c19", "1edf3198d765daedd749d54f4995d15372291a5d51b0d912791483f0034a3917", "1732fd23e621b6e635b16aaa66da639a49f52371b9902fe4a99402e72b9d463c"), ("1da69099388ac4bc8b8cc900777237c29ee6c2d9c6e2f9d345bcf81f0c411a02", "0817449eb570e2b5a78a68732ee8240449ffad9b7c2964a1df3068758f93f592", "1f516d1187d7b7334c6c20ec35f84d69963fcdc7be7c1d12c02dc1577fba08a7", "20248a5a5aec6dfac57856d4e0a1f43cf3d866747e1103bb03a33e3fe6f90d3b"), ("09b304f8451368fc49a9cd95dda0566320eee5797a823404f4ca350c07297fac", "1c7c6fe4048b498577bb4c967737f89405007da791facd65a1c99f2717dcc6e6", "2b184a88cfa8e85b771ebf9f330c232ac4d99742f410fde840ed888359f31b66", "15b2d6880652ba6bef40c33d8f022aa78fb273773699cbd84ffb936f9c87dc2a"), ("013b695f19d3313ad5cbe7e91cd99ec4bb24e69b88cae76219b9c4d6fb9a4113", "241818cc53557b861201cc0c248b0278fd048c22d231c8f19b13b115bd4ef8af", "2baba2a6c91c9e05954022a0ef38f4e396b705ebc3a5838718f1054ebef38229", "2eec19bfcfd0035e56512c27ab1dfe0c7f723dbb548f4e1a655112f997b31724"), ("07730c68afd85f589d4fce26498543e2b9024064af67b09c7cf85eb5149861de", "00b66806559cb499b28a5bf13fb58dc44d95a5a908fecc095e70178405122f07", "0ffa976720dc03c4b93ac635e536efe2a6943ec957df48895893b221f3ddfe67", "1bd6200cb5b012a9d242f751a41c730e58df9543d74538b4298ad532751ac117"), ("06380247230d4e457c1f8d871340490619b4180e1d506bd45f75ebc739f5344e", "0c544389fd162bdcad72123d39cc7f54df19e5318e6ae014a09fdcad71f4437a", "1e0453eb2da5a1b75e5eee847cf4278768cd17a76c474718c74bf044d8bcd5ee", "09b644b4843b3ad0929587bd3b3d110504beb5a2b16327bac6bd9b19213e1567"), ("07411810ce0a311dc4ebe3ce53925695bba2b9acaf9fb38a532cb7b5d788e148", "22502228602a845ba38d7febacc204eeb0ef11a3daff2f25a4d65c9da3e9f9d0", "0792ebfd1e54aa3cc68ce6bf534732a5522ee2b443292052408138f9ddf3e07b", "29c578ac65f2828a8ef2d25d37c5c612d9ecaab85287f9f490d3870760598866"), ("23ef1df66263d9a865e63311746eacea8b0302a68376b9e045df23ef69b9a2c4", "2507275b3ca6bb0da10352ee7312a92b2d01010caa3e98fd1cab4aba7357b369", "0d34021ffc272421aaf369bd93b22e750560e7a8ee00907603e4cf9871f28f59", "1bd9d7126c12d3820337bd04a9f2548e949fb5769cb1b7714a5fb78a9fb8e02b"), ("198a0583d50e83af084f2f32d8a50b88a51129b3650a8ccacb31c23c6f35075f", "052e7ae0d78b5b141b7215f5a423c450be1a10bc3a3b40a862732ab3a24596aa", "019b37950d98919b479565eb99e14a4146fd2ceb7609d2f7a6900edfa4f2d110", "1b3fa1336d658be48805f2ecab87320b8109a011dc68dce3c6f9fa9dc0d60b15"), ("1f272fcc303f0dd9ea676694af7f0d848e387be1842551d029770ba740b3997d", "1ca6f61d47aeb266c904cbdc2eeb77bf0b598efcf7c9b7b320334d31989372bc", "2734f974eea8cb2ca1c47a0a3170f34f8af2a695289fe8abb9468e7ac294a1d1", "0a83198cfba4d2978b359d89e5ca23cda0401eafd3032efa227a78c4385a956d"), ("10641d5332c7c04f8ab280cfa3b303a3186be7e8d84ba6e9d529491eed1d5b14", "00cbd821f8c514ed9d733e5f2a128be619517adca713c2673420eb1f891f5e7c", "2821b71063fc58c9d23798edf8ff59697e19004be96b7ca4386ce7e213e9252d", "2474363d17d985ee19650cf23c9e0b4380aceb98544571892dacc53e9d4b9dde"), ("171ddfd1a6fecf375157047fa8eaf42a4a2c257ccc98f50181df6fb322b9487e", "2c41976cad8311ecb0359af3f982d640e13ee3557dcd9d8519b0fb82f14849fc", "27bdb34c9a2b7059810bc51342a8a1ab618e786d02620fab3dc12663536bed7c", "1b6c182959eb2a3e683e4d012856d806f904eb0a04a1f80b3399fe8d8b19f1a3"), ("050f986860f549894dfdc0f395552971961b429d899993e8008a10eee8e7606c", "029e1acadd3fb8aee207aa30e2a3eff0d7034f3964db35fe324e81255aa447d9", "023981d0375375c65322cc244995943c242df2ce4dd18fbd2082b51e8982968f", "02f34b082da05497724a869bb6ac3dd7b703c082b5cb69b04b812667c737aae3"), ("1c0034b51eb7a8eefffae216b5787991e3f3d12248ec2918cd61888479904f48", "207bb27b88ef531a6bad336fc845e10fa7d79f9bf0be2cb383db890845459ccc", "2be6393339dd4a44f88f656d032b889add634b6289c7b8c518a1c087e0bb12ce", "0ec913e597e581ea7f588e6f9dab45e2ba47cdda0486d6e41731c4679491e0d4"), ("1917277de8455412f7d0aa0f126a9847965d770833c8d32645739de49e28af81", "241672ef737ee535aefd34b72d74fd42a169aea99519361dca97f832172fe046", "090f9526295adf6128d4e75883d4c03241e3554aac75b03aeffb3d918c36ccff", "14fe63ef916686292865847a05710f559e222664c71c33c8b489afecc63e9004"), ("0ea0072563b2cb59a037e482dbc1cf77a28de2568d5fd4898cfdfe7bb5213c2e", "14b8a782a070e161a4e99af0bb3c7da00814a0271353ce01c6635568ac448183", "1985de64434557a01264678a5cdf136db196407450b77007c21af68d8665afd9", "1b0be1b511a2a29a19bd5d789cdb1cddebeacc1cb1b25e773be601a0d6a41466"), ("2c81f3bb47b2f8c1bc3c805921061d30f840e85fd32db7bef65a89e1813e609b", "0a3ab2766278ce165d217197e2a266911f509999d39bb5a3db527b504f479390", "05171ac6bbb9c0f2d79491ac8d9fbc3b6ddbcac9531723f91242d01243614426", "11703440458d9eb92967eb35fe6c639c063e1f05109a1b8abeb1ea976a705868"), ("12f505ee3bf0e1b41b9c0da06e31ca0470fa60e4c6be8c625aa2ba2caf96cbef", "2e4014e1c99db9f6b522fd0b5736aff77f5c9beaaf1a48e2bddfdd7913a8926f", "01f267fc5b9f527652bc96410d85c26a36aa60921d09dcc53d436043ba4d2c33", "0e4ef8366c622a23d08fbee87d41b603f43c8da42bff12ff00a9b0d58907ce7d"), ("18482f54f8919367fa51273f56c3f5bba545db12c137f172b0b3c994f7312b4a", "0f3f1d420f938871e7a17a3fb9deffe66990106eaef8462d4932459a131fa27d", "0d608114674af96876cf6077828eeca2f5f4b84dab87c5d2e69c4e8c4d375454", "09727257b0ed05231f48fba071ed120849e527ad079ac344d3f15080d5737c80"), ("2877949c50382162ad40f46b8416cb751e8183b949398590de7e05a0092363ea", "1300e64cfe29381199b2afb1d04efcced37f426a0e316d43220c1e7ca2088a39", "16f325362ae5bc3f416fa63c62a9b670ef322b18ac543c1ff86730000e033b41", "1ec31b85aa94e0d610b7d431a7702895f68c2c9931312b5a1ee4069130245511"), ("01d98926199cfefdc1026623f2b2172fc413ecf63c23f42bfdef8315969c3d83", "29752d638c8f8761c65c3257f33d6e9d4043b73bde08587ae4bed2fd9d1509f3", "04e7c9b892eb68cda6cf0ad0eb64e6c961f6afecc5bffc926024d1d5ab24d737", "0e422a61b6ee432dfd6c2a85e8bc09eb06a80309f1ecea1a81e7bd98612f84f8"), ("11288927767b00b4a1e9dbd4a28417271ebed6f0e9b1d40688eb3ee16bd54868", "1ccd8fdd09704a40a78d9e9268e6c399dff17b312770bdf5ed50e1446b147430", "1c85082b3ac97bc398a5e7f383a77aa94cd4fafb593489fba2f3c8b3b0dca819", "05e66750a3d333b1b6d51df86154826ae86fbe1c9b4409a857ad8cf83bdd7ab6"), ("0411f333c68202376d13dd84ee9103cb387f0d46a8b1879871979f00e0bcffe5", "0ba53789bd811cdc514395ddc0ed3b4a4da0d252576e44a6ff8d4b0de3e4b2d2", "28da57ac8e33eb4e89a9626b416c09cea7c01b8f19994156def2aa151076eb98", "23c6d259bf5e21c8c2b0c8aa8319626b539f51dca65341d4fb0c5493a9632882"), ("28d86374bf5e26624cbe67f8bdbe3b8415d4a92c0e4c1a1f98dc664dd5f80dcd", "0adca389ac7b44ca3984800e122b449c96be8c891d2f84b49392eaa538830769", "2907a4ec07dda4c8276c5bb56123576a6a10d614cb2536920783c2aa72b45f76", "007abc81256f6485c561944524dd0f0590305a273325aa3f350c8df7ee43fcb6"), ("2c09268dd1b3bd94a357638084a7b386cb672d86f037b63d1c4fd2204ad7ca87", "1d57fa6ce9b0708aa580dfd3c4a5b8cec6b22d93603b5553046713529f65da70", "16913cc1034ff156650a07f7216c2a84930fb43f5f0747e2a573e459a840b351", "077469a31baed1e55bb1835406c52b10e346a8a859e0aacf85e5bcd4ade504e5"), ("238b23a9158fd61ba90ef79ace8ea9be7ee2e4bec47f8e17786f845065801fe7", "2a99dde9ca811dd4709a3dfc7b83f647abdceca6883be0495e542f07370a4f65", "00349dc423b1690a069eab04dc5d16ae22aa3c6ae00f0e9630fd69cc97065822", "296940a989328f8eef6801ac996f78c16ce0234001d9d37ca32b70be583c5329"), ("04f5af1d9c52e72668b02889617fdc75a0f6d98dc9923bc28cd9c1a50080a0e2", "2e698655863c8a02cba41150850243bdbfed3b32539a52996a7f9857958f3b4c", "1b1429cabc8203eafb33ee2e0119d8b29b2ca5e9bad12a8278d1dcad2d6e941b", "1640c8deae0840290692bafae34408533312356280534340bf87e5b5b65e9b91"), ("003e6bbaa6715cb27fd23507f7d57c6c91d291a20f1d4ca8648291ecfa7bd8a8", "0c42d5d39272eb14ff6c0390b090ba9f35d1601c86fde5f9fb07f2af298f8b51", "27289663fa7595013b4fb8c4c11e2953252c46dd722e2c9ad99c09cb8472b3e7", "179bf012250fe4681f4bb0e206a3586487e1fdaceebb88ac3944ca74ebad87fe"), ("197885d8568a1185245af3b31fc95573140987c15366fa3aaebf8f33d92318aa", "0e0a406b614e5f7faecb66ab7be6fdbee69cb3cd3e4c0dda88d22698341c4cb4", "00ec8c75698ed94331ef6274f732e8e5292df43d4c73f2cf64e0dbe758724126", "038975ac9a8da91eb3489edb22926215a4321b73ce3fa69b8f799029cb5ca192"), ("16b25a93bddc9ae66d1c0c4ae0c873870879f38e75f95300467faeecea3513c5", "08d5fcb52609ec3f830853720d3e7299a7befca9658ec494c6bb416248ad9637", "0a3596dd2c018508e0b5c44374c480d362e99c7f7096b7113558d13b63a21246", "1d998faf9c3f3119429f262760e92c8288d32bb6813fac141ef9723dd2b45e93"), ("05f0e6d1b16aba1e36e923bf15769895f3bee8e75ddf0c5a1e31ba8294479e05", "2673e83218a44cc64eef10ad36cd00eee4762b9a0b608e97b5a3c335b1bc8b52", "0b71d0f9341851dad897d5692e48ce917006af23d64230ac2e211b5c5750781f", "261d3a72460d09d2c099859a5a3d847bdd873c621d94326f250e2050e2cfb272"), ("1ab798f5ccaaa30159b95432411f7c0e41fb5eba54c5f782cd7489ae065945b2", "2590132771a96eb1a7dd5d37901a08896b01f88cc02a8e9ef52b3b355faeb7d8", "18d611d6ffd0007f788968aff6453e6156af14c78860eaf895da614c1d1d2391", "0edcff45f5a71263e9aacbfea0df091022062f06378ab3414f5ac2b4e5c4d730"), ("1967a4a2ca978548e95c4c01ac9e58f8a9c47fe5679e35fcb04e1fcc3f5d0949", "2008c149eddf3198ceeda3a0bad0e65d7684e99cefb2d20a534ac9078c7d838d", "2b0172846a6adf8d58c3cd66e17781f644b556ea44b5509b7f6c47a6fbab0a3e", "2b583144ac2c1b4f5f1397fa7545358b275b0a24a29d439b9d6f974d2f197c1e"), ("1365d9e65b21e43a6a5aae3dbee91aaa0baf8144bb5c5614d010f9a91f62bebc", "29ab394df2f49b2d942e8df6763aa8065213dc5eadb9251706b75e53a009aae7", "16c23cd320243e50fb7ea2b701005819ed79715696b6cf2872548073a01a3930", "009342237dcc305b968494e07a97c6d9c19b4b97b46954d0f5ff6e2f9a0eb463"), ("01431b6610247853b30d60357ea96cac119399cd998550e73ef432c47cb22e73", "249c0a21ea15bca9cff12c31a412ae7417d0bad42e14b7fbd8407a7a5edb5e50", "29ee61b9ede076b3acdfd80e5c0bbfd5dfcd96f1afa7f846358fd982eed1afba", "2d42a2ceb9d6682d58996eeb2a8e9f3ab522922218bcc2e8832bc45df75403a6"), ("2012f0bc4a0cc1f6bbb5d46d7d4284a3d55815c6d84eb6d1e8c887620cad424b", "24f6f7965052903cb7997e8d4bcb141cc4d778a4ab8d3d3f0b30e4d6660f645a", "11ab8519bb1308ac5d023f20bc216a0010641c01f139bf38e1d77d83c3586f90", "09d68d2d3de81104987748b2bb29f0153243fcf0dc195a707924e78c5bedce5d"), ("24bbeb4429deb9bd6c86eb5905a5a3bf3904d9b3cafadb4c09c74a68fa2831b7", "1ab286e0ed8bc5df6e2b96b65dcb53e1042afd35b783e31a25b97c6c5a42ee0f", "1334f7a755317c52c89b675a33dbcd19a42de80f80a741f23424bbb594612a38", "2c438123d807f5a1e128eb13b46b2c12f93e99adf54a7759d31d5c978c3e4640"), ("1bd8933b53b784bf2c2be2db8d87f1d164b42dc14db19b7b2bd978ce749c80c3", "0296195321993eb019673e09a87575b9562cc6ce564745c2219bfb6e588f1b9c", "0ea222e7108f676149a425d2ee8f06b0d2e64fca64ff495a2d7c7551a859fc8b", "0bf10e5cb4c1113e6e1b7257f5b5907839a9c5feaf5ffde10f2a4d73e5d14b05"), ("0042818c238fd1a3b4f9175f9fd05104a1377f1a7a1f3f86c2069da157e9c805", "257f8b9703680df386a3449334dfc80556d62e2fdee71b95c5589ee672620813", "1fa03a83e12be41904c36a63e271d1a220cf7ebe4b3f242edc3f23e9546c736f", "2f44780a0be5b4454f0da6e601af121f60fef7a010e2ba5a573604133674b880"), ("1c69d2e96e23f0ff7e1afa13e353677c0125f33f463ae24d55525011e7f70572", "1c65f57eb7a755b186f677b07f99a0e50f438d2173819f15ccd2512d42201ad9", "0a86973f202642c74242be8ba2f5c6d46dc5cb559504a0c50c3c4f7e9942d443", "02af0c6949e0e84bb7db96631a16107abfb9846d42f66e36e20de7bb153a361c"), ("12b21e9bc12e21b7b89b7134a5c254dc13b9703fbc1745a7b1bd067694c522c4", "218601246081ba441357bca2504eae0894ce976f7e657adb7b5d7771fbe9bd09", "070c6b4fb3957181f2e2744a4585297ff70fdd27f685bf4bde649fac1496c7df", "0529a08059b77f32b0a062a07f35f8438a576b0e6961ea01e2e5b36b226c8254"), ("1f95376d9e601d5c25f84ddaba7dd6f59b3516a218b8773dc7a68831c0b08fe9", "0f4e388f1beb2fabb3f041db1328b47f1b4f59ba652bf2ae3e1e1b48d8ee0196", "0ca964ada9d0aec7ce6ea43057147e3a5cca90a9658ffa0d41c55523ef744673", "2d94731a2ccd0113a7997af471c341fc0a68e5381628a3fba5d2908283705666"), ("2be484a00e7b1fbafb19d177cde0b7da79f15424f72683db8d98d48bed927eeb", "21c0d6a7a52cf99cb7be5bca74b496c7cca2e42a6923f23438d6a8dede52ed9f", "0fca63e3b088a964112777d1775488ab5520c784e6c4c6543c3a247d45aa4c92", "2840c64f506c3a1f785969621cbe73ea41a3d1c05da74d33074e75a81ac1d71c"), ("260cea4207ed05948757f228d18a24e6069e73c53532ad5f30b0997599ec84da", "16a4027e4659a718607258848a7f35bcfed4b9e6656dfd8cb3349d2be990a8de", "1cf057fb48f92dec62e1d44c746c7c6a2ed08bdc456874f659bdeff76a9f2551", "0345d3b0db368b115b36746d3897342b36ad80d8012aa6a87cd13cb0c909a65c"), ("1dd3c94870d872f346aff6d3dd6166a902d58b7c365f143bc47a0b99abf97afd", "17332a1a45364c3947aaae545cab5b3d8c7847b814850274ce5bca14209d05f5", "2fde4e1bc28bb1b64c41f55078396b96e5761facf52bb5a32b921727c3cbc0f4", "21c214fd1d50c2f32f4a5665ddbb9780db1faa9b13c16e0b204ec5c16ba04547"), ("122434544f9d462d4c4d092e295a0afda669a0fadf8d3efb33fe4946ad5e8adb", "1d5f9f171ecff8f23067ee163bbada6944bc97fa1b634195d89feebc2d175141", "02a22e4b9b6c9dd62df34ad9ad0e87e34e0c64cf3eda83eee4256533684e66b7", "2900bb02fed7194d19189a3147de4ce6728b0589a91ac77815874e84e868bb13"), ("299840c3dc08b4e7b59398856c752354f6b313c894334e0b35c2460891c55654", "2bb67fd54b1590cbcdbd87de3ccaa4dce74af3d305951048c0833e1da3404a33", "060f99e40af4fc3b945aab9937286844ca3aa603daaf6c02d612a3a4a7c5aeb0", "20752623b287f72bf0958d94d19dc77a56687ac0632de3f71c43a90a09899a3a"), ("20eeb43ff7557ab594cf7537e0569093a6776441ad9682571f38eeffdc9f7d4c", "00aa5d4370c7ddc02e05271818232b54316e5ad6ae9a268d53e4bcd9ab65f14a", "304b38db08d227311403fd66e8be0adc262f95a23ede479519e63e8203d27c90", "14ba717ffcba5df613d436b29ddd2a7e835c6263cd7989738f07c0f788fd3205"), ("1163572d8baebeb22a7042b7bce7014ff52fa2587ad8d61c21df476d8deef81d", "2856f6e7ee12fc477f8618ad7f1659bdcde8a8c47e6fa8e38685cfa2eedafc3f", "2b3ae8fbf33d6559506606a2b39cbc9030eb575c0e6823ee2cc3c06680df3218", "1cca3e01da53a46a2d94962615b9c960701ed88cfbabd32d243d4f05ad32b2f3"), ("2af40fc2e7bb3a2baaed4171aaa64d133b585276d0bb8302e667da66ea8db663", "0cdba4235f3d425538a987c3d8e76f2aa8c1152fa1061ec70dc3d3134a8cc4e9", "17dd160ffdf54cca7eb1886a8289075fa8d808008e80976e03f72ba85bc2bd55", "1d1daa391735866a25ab99f0f8a61d54eb289a46eb3d34f15f8febff62344969"), ("1958896c9d79bc797d3904bbfe96d8f9fc5da60288b90f778cb22acbb3f6a10c", "1c5ac2b1c44084c160707b2ee39ea78f86ea3da6fac36ece6b46e00ff4e86396", "17d0bff4ae24a800145030f9d22da7f83ddb3d351b0d662898ab4a76f99644d4", "02db9a9972368d485c8a1e200b9da179eecbcb5a21dd551b4f321c32604485af"), ("1ad8960c2940a53155eb87afb85ed8b2f5b075647bda4a87adae0682efee60cd", "1b622973c90c59e2dd212d42924a5cd003d7fe4361b61522d13c0db69cabebb8", "2e3d7da31ed495c2b44a436e24389fdf592775ad8906fa02044c0007840e8a14", "165094a8798c9e5fa2d50d0f13da83338534596440f9c6d4db66e224e4dac665"), ("1335ce2d276c4a409de08edc26081daca9b7e113e685e7d2fa92f268160b98ec", "2f158a8981c74f43af005012b6731c292a94048357f65c72c1de2639b4982a3c", "13fa30cd27449c2dea9b65fe2df595007281b90104fd3a4dfe4a0409e34937af", "0e700125c8fa498e7fca103edd28e5ce9602243acdc7b34933efe20e75f10604"), ("0d3d59aa5a1451fb77dd05545bbc22826405de1ce04cc8f33c3f4e8dc3723f95", "2293af9f61be35a38ae2540c2469eabd64694952dad24251386d7b41562f5978", "22dce8e2e466de70ba7e771ed2ac7775cf4ceeb3f7fbe891c0c08d20f336a37a", "25a48e7239015e86f4445fc73e593629d4d0e71a98d98a4f308154982039366d"), ("27e5b651f8ca773303866c43d402ff92524263eca977353e7e70849391ba4cb3", "22a74014c98993a4c31d44458942cb5dcf5e64551b27521f665be141ed2c5b58", "00e0b118fda14870ed8c90bf63bc4551d56e58b7fb75ced82ebe24de1d85e150", "0ff551cbc1eded071d94ad632f8d2246f5089d049df87cedbbeaa7e85a21b726"), ("1f7f3c1e2b6bb0bcb591726208a360d58a8e56c8de8f9eaf9f8cd20b04218115", "1d859cf7be67e23a69f9a666c2f508c9ebf52a5f5d1a8a4078866387db09f0c7", "050208a8e9766e4c14ae930f82dbf09e8b9abf05c422ef410c6ea004a021d2e4", "25114052626e1cae597b722d41b95a6a0a9ad02d76fbb9c531461c02ba54fe9d"), ("17ca03a316472ef1fa5e0ae5029373456a1962a8fde63c27c19120a4c9544537", "0a3a6e8e19f1b736bac2ef7cb9f6e07ff93d0cd83b5662653011899653190824", "08cb263cb512ebc9569b8b6e7ef24292d690a9c904a4d817a5f9b0addf298222", "05dc258996ff4a79d740d8ea59b721d77caf6ae64db087621010d20ea2f9b9c1"), ("1a4a96fc445f70c558e4013d6059a1967fccfdb14818b3f1db93778c211e1388", "06cac27719010769cfce8dc1233c56358fc5a20c4c3d17996b89721d7479683a", "15419df99485de554318688f67671a2eb5e573b3fc3021f2fa16bdd54961c948", "0c0a24af496a103acfdb85a3a09768ec3c75aa18a65bdaa3e94e5ea30c3d2639"), ("19288829d159e891a43c5f329b36f15b283f9316540ddddff2f672bc28c023e0", "29918fde815133831127d9161784647c4f15f1bb5e776d1dd1a7c2809c17ca39", "1740a40ff486624e67f081174d5e652fa00763a19c84510f1d9b8fa15536f0b6", "268d15e19e130b629aaaebcc63ad45d059ce7f0ea8958d3cb8931ab48d1ada4a"), ("0cacacf8eb426539e5f488c4d059677d873762834db4c9e9070f157a853b750b", "1f7b4f5bccb011b52374b734a164ec56fa223a296f9f528b91866ea45f77d130", "1c3ede5b19c22eac499976fbec5d68be0008d786a7437ad6c5ab93b0b59bb486", "1fd744368de2b9df55406b76a3c1d31308284bd5d5a145911277163e4272a842"), ("2d0834823413d5fd88594baedc883655a6c03ca9e4596a817305bf497412faf0", "17ac78ad051fa9338e95fc8530236c0eb8cf195f6f90b4bfb4de444d4dfd2e53", "0f8359baae11833927095341bd960e92da87c997db24e822b6d7ae51ce6993d3", "186294f0b0ae13f3c30526735429694edd71a6a967712c09324abd8d9b28e305"), ("27f22e0c2aa927657fc41462e7bfb076ea6d25d7d05f4aa18e32a5f671bb777a", "305f710053486b084648308d6c9225cfc59838c4e19dbe8108049107177e8198", "1efa09d66b43f0f5e77dc69ad7fe983b1821648175c4aeba0870b00f5b28c789", "19fedb90f438c1402fe00fd8df161f43d9b8fda3ee3d669bd722305282780680"), ("0c48b4bf5d59f68d93a8f3446ba6878155fa4bf51d02d3989ab09a3ba806397c", "118c7d067d898faa65634228e154473ddc021c3053ed8b160b5f83e9dc811cd9", "296058e4c42308e92cc829bab32e1362be28ffb86bdce5f308bbe201ae0045d2", "08e7637fdc2e79994703eb61d6540d5b0651b6f40dfe77ca9119767ae7734ed6"), ("24ba034db21cb0fd3c4d03a51b926028d23c90b7f831f6629fc1605d0203eeed", "10258e33212babcbf0760c9a694006eb1072820a376933ac03433c54c8a5574c", "185bcc5f65a64084e1d73e1ddfa7d564880322336ca103f2e4e02e12dc38d255", "047045d50ebd36c7d7cd825ae2f66e09636f283d2e82a5b7c9a3b0d253b5c077"), ("23958d979a792083f66ae7c1f822952d6d775cf4e60b75a519c89292a8d1c1ed", "2dc5feabc9ed910a7c3e1f69a91a5edb528f8ec22d20f4a5db6178a6e73303f9", "251c9d342cd9d7febd9dc2588211aa88406fe145d1618622f4ee262016e5d9a2", "0a89600daba1c2d17a116e8dd17304a47bbfc6f5667cedbb5e5788bc21c5cf3f"), ("24db7fc89595d0397783bce46ad2306450b75806aa91ee5bc478776cb50bec52", "02a66503409ba022ed25571c5153b85bb10ef8ec352110a9ccef868822fc1d20", "0d58dc87dc6d9e7c73c8640cc75755566f01305cef29b6b38a3829a00879fbc1", "2c09174ba1c341861acab1a583973e8c38bde72d4b729ae18f8d18cc8831ad70"), ("0c95640b49ddefb124b4d058d8bacc60350f3b390fb494d9308ce715767df815", "0a7c948b2a1ae279a20403fb5634265a03afbeebc2a1a9e33c244cdfccf223ac", "241e9f1a00121ef426ba482fae7850cd24085140c6ebf76bede9c0b21817e463", "1df9044b234e9d80eb35af6f631a6b051c60cb62000bf190731e48c8e4584fd9"), ("0b042b20a18e986ff1802d4807157c0792e0cd41e148cbd1a0d1071e123475ad", "106c574c582d29224f486f9251d8c4638ced0b3c9054aba349fa79a10d27a3e6", "1f1c18a815bd8a50e8e104023c8875876589a66c2f8675074b777ed328461734", "0a8f00c98205150762bfd8c6f2874d9e90a56afecaa3d588176a11487ff8487a"), ("20bb66010cc80252a45fb38437f70cb0cc25bdd6d5ed5e5acda8ae835124b51f", "0b6c8a6217061c052217d0a9c5c28abd24dd745006a4b38a8fe3719a2e6172f1", "22916501e4f2082544a12098af0e83e6d1fed9abd143f9656af059552876e7a7", "0c16b3d03700d4f8a31c35ed50131d1a6911d03119f129e8e0eea123d8a8e995"), ("0b4da3434bff55ffdb563dc1ec8996e104d7a4f7e75f055d29cd17a9f69789a9", "0b8df30a09e7a7149e818e314832e04627e03f770e93b0142d69dc855f801af3", "09d2f8b0d2d207bf4d49e1b1506c48570ce16a58b96f4b0d1827a266ea20de7f", "24b8b47a16f8674004a7d80810ac9cf42a54b0518efa3cebcc7aac3aef7d7280"), ("194c35921800a795cbb609af808e368a2c1deae1188c1d43fe2e1719946489d5", "23fc91392e18fc8882e7cbcca8535385bee0c82e1f66b476c02f71472722b44c", "235da7fff18456be550d4a4427f70a06e25e780c56ee34848ca1e8f3a08f54f7", "18f837c2dfb6de8bfc488fc4417874bedc999ccf75982e5524be4a686717e172"), ("0d09f5efd8d87436f6f0ac8694a7bab14e7e123bf88b1c36b88f0335098741ce", "2674fb566e0f79bd487ac414a4fb817b209787d5714bfcd9b52907f7add9d8d7", "2cc8e55744fd31037d20a05b879f59a301821a493098f14d8c729775cdb92832", "2dbddc44f37a4d397708632ad4eec139ee3a51da999474a4c8617b0eb11e20dd"), ("2e3f4f1716da07619ffec752be9355ab6488073c524100609e82815a8f9b246e", "0e18c14b2b0571943cfeb84d26bc3d827e977919cb07c8b2f3981e5b22129590", "17dc0786a2a21993dadcaa726bb035b3be6459976970efc82fd95fa068cda844", "1378295c74122a1f9fa3daafc4ac1b72938b7dd915ac6272694c697470b0e961"), ("1f38375ea0b97d34e451ed3b37910d09f1df659a042928135996de1b091bd95d", "27d9d63fde371bbd8d9830d07039e7b229eccd782c652f93c1cba40853ed1544", "05709a7f87913d61c22dc01683bc2d197d80065d9ff8c6b48ff411b707c207d4", "0ba1bc48ff21ac98e9fe2309f046936c23848bb4dc6e3615c7553ff775a3649b"), ("0f270fa1855ae1bad343aacae2c7f9fe1f8c88fb3591305fb8d2dd639a7f4d51", "30174c441764be07f9e170ac755927478f82099676f275251cbb08d5dd3651f8", "082b549082ed3448abe5e7d41068f92feacd03f3743b46539934c71ff66e39bf", "06e2e3eac58e5e0b95bbfdbcb5bd4cf96bce9ed9aa5cf376303c68eba569378c"), ("1bafafbe02f30e9ddc355a7e0629fef079e006d0dd8a7b2d7c33e8740e86da07", "29fd276f5e031599be87e2e1e098101a8c22c0336bd1b0c17ff32ce6221317cd", "01e69e63891803da65688df565059c2b24a02b59208fa490137ad24192e832ea", "2ae46d5839e9cf046e35cd1fb32db8f6744bf93887d5b05f983187735628701b"), ("26d76b11dcf0891336645e932cc97d93e5e9ee590b1e0350df813fed629c95f0", "174d9de52dda900da5cf319fc6bb61f00300a27a730f7ae3581569572bebcd09", "2fbdca403baef3d0508bf515fa874bfb97e79cbfc4c2ad2167c09aa958645fc8", "21c4a8f20968f64d08eddaad58993bbefa8f74f77d16ab7b8be1a45e268fa3ce"), ("030e3321e974dde93a8a8bac6aa0197c8b4b92b2e1c7f6b31bb97657577330b2", "2c3ce856b24ba8718bfb570940ea1b680d64840eaf5c076f6265bdd0e954b0ae", "1aaa0367e265b21db0e4c999c0f6af0c61b679aae80a4852266f30cd7245d6d8", "263b67e7e8df1b3de8c56bbf449cdfb0bf8150dc9b5080f1fe09a346342ac82a"), ("27addab18e4583222d84845d8fb759292f08de4839441f7c9f9b9c1b08749f6b", "2523d8fe113b0fc2ccd29f976fc4a5e72e0ce1c914a6a2b8a85d869332f15b4a", "0baa60070281894f0595d2dfcd2aaf8fb900b5efd9f0508b8b745763c7460d21", "14a497765b8b4540671ff2e70ec0c397286a68e145f9af821e7d2478273825d4"), ("25afdf79df9ebf25b0e6e334d0414a2f2be4edda2ec6bd36c7b0acbbb46cb946", "1d575507bf74c684bf775c254e0528aefea50e0ad7cd587b1ef98c865511a6a4", "27fa594f81816a120c0cdc334fdce7a1883679578b201e537a790f081ca23ff1", "0b95a49f4293a57caeaf5050d712a0441eea6354dca1c833ca5ee4dd206bb056"), ("21a7c70b79b78bc845b43de55d006b95f2530aebbfdf96c81d8fe46f9d6a316d", "16015c5af2877aacd551997776b61a44d7edcf74b1b9d147377d78ae4e38b37f", "240efd244081b38c7e0447a7719897dadebb840378b0f26936704374204385c9", "121602862666d19f228caf605195fe4e8720b94e0af71a5fbe89d221890a605c"), ("2140e5cc20c55da698a0935c588cc9d5f648544fb07768a7d6bf44bfc2cdb114", "218793246423754409398415563e55d5deb589318e6b251b1004d8c3f0c997e3", "23476a4e5ab7369998eca0c023eccd1832c05cee08a0259294bad63a112edf18", "271ed8cc61f6a563344eaf0b815e471e850fd66add3b02a57c8521647d842114"), ("1e81ff26537f9d5a8ecf5c0b63bd9a7fa8b531725456cc123ff2f198b86bb7fe", "234180a816571fda01ad1be5167cbba8988f2dc147763edfec13df7eda964a0f", "05b2b9e94733aed3e2423faf2baa35ff105bdb0f0971a616c785e5ac12c327b9", "002fdfa841c643409322a9cb66a326766d2be14acc598529039707badc15c768"), ("2aee7aa265a209e13f2dd914a58e19e46eaf8c2f8d8e55ade041d26de91eca32", "20fdd0b46b8c4fac61ea43f437ca91e7a49004f2cd82be5d498d79bda94185db", "07469e617943dd240f78552f4ec316a902e07325c3c110208828bc7914cb5129", "15e81e15b9dfabf9c620dabc780f6bf1c9af803800a7bb722190d72c16ac22ab"), ("13c972a7ead79261b3c701c4137ea8ff0d4f13491ff640c4105ceb083dcbb641", "262b00b5792e59e0b14ea9973fead5d51ca6d178cc9636884585d23ceecfbabf", "05d271e7fdce78820db6dc0194c7b1895d13593d64475b09508a16243e4f3b2d", "07e498ea269a0a938e45153d00f148db1fa409a1fcf625d13d01821d87f77070"), ("0292b50c540d3bfcb9cf6c38613381bfaa0b35126471ba2d7bf2b4305f766187", "15b87e1c62789b6ac0449fc6bd15c3634c225ea098fb0e08a66b213571783a61", "14d902c3420417282d73d4013014b8cb047dfa0cfbfcc9932c1d5ea9a8279c5c", "087e7cee58fc101ce715ad9ce6c252080fa265be071d8ab2f93d4fa9a97b0acb"), ("00091cf38ce9e44feb126c30791d24b60f71a0fecbd08537f8ddb7516101b853", "16dd4494962c4dd69cf43020905de1eaae3ca852cacefaf78a87a401f0dd900e", "0f87396abf82668bf082389b75aa33ee24126ddd103027cfb8e5dadb860ed538", "22e5973c38689ac298f4c021ae93d7638874a48ef53d3913cef02f216a50ec7d"), ("033f546f1df898390df81781be1a0528e61dcbcc056ac27d5b992abb4c966043", "165ac527e95fd2dd1fe7428697290303190f960eab3ad0045da253a24f6e4093", "173e0d79f49c2b0140032d473309dcba98658ab2bb26508eaedcbdfdca62a4da", "0402c1d2b4a454362c46c13b76c91c0c2cd0ed04521ee18fb667ea1a09d9f0ca"), ("28c4b5f8fd67449c71a6dfec2629a07a25e6aee65dfa9f8447cfddca306ce9e2", "26ddbcec85fa1d55628c3f6dd3ab7bb23f78e6d2a4213ce75dcdc12724c91141", "08b6ad434be599c06dda688adc63e306f704cbd407e567946df53de24504d03e", "216fa3d80ad7832749c290777e905058d68a1a5020192d74b7d44495eeed7d9d"), ("19e88bcb66a66be1e4ead39970776252e65209e391ebb793fbd6bf263626fddd", "14cd848f336fdeb30ca602b0665bcc396523816d674c234f5df149572f782330", "04e20f35ba229a32c9ae0dcb31a48470a7ccac074393208dd3c7fbe2cced66c5", "2b3b36519011aa5ed4f50e67d986f85846dd53b0964a8dc8c02e6c2719a46a8b"), ("0fc6b2d8dc49d2ecf1d144d77f0367da9079e7d0537c4aef64365e4489ad1e74", "1324e4a2429e0e3035ce0f8fd197d50e4f2fe0ae1e5fe0c888216727f0e754ee", "2b88320a14f8303d3110985f2a577942d03fa18b3c2573ece14850a628e07e0f", "2e7c8ad0aa5fa6b171b8af908a74c8353674dc6d48b5439f3153234d03d5ce73"), ("2943ddaf0b624aecc6598ee79894883610f61ce7708013604683ae3473040d53", "0909df968d01af08d3f5517a8ea40927ce54266700884e243408000f117fd9c6", "256f35d7c7a0e53d2f4b9231679a934e45447bab05cec297b057e1888614522b", "07c3e0b0ec60c03f98288f5e609fa727d6a79f6dcdd0e8fa67aba3654bae6bb6"), ("0dca508fd7743e501c3dd7289a12cbd3894782e46f61c55bc438d13d3bd75be2", "0f82e5be5ed14391818febaaf258d93046f5b37ff24728c49d18d672929a2a73", "12f90f5cbe8a6a08b4de03e836161a2751ad531d2c97a2f026a0228b69015dc3", "19fe1b871b2cc9c04e72eeb046a58a23df8b63499ed6ff5cac41e47bd3438acb"), ("2d3a865a409a11dbcc9d3702c16e5fdfa42d93bef1fd5d08cdedcac8825910da", "0eddc86548fda0fcef9738a0da4a9606fcec34c528c46d0eec87609f171d67c5", "1d174ea34dd6637e34ad8040ae27d3fc6b2b64c12e047dffdd4b8eea61e2bf62", "0c3266117b0c86bea9d47df2d3c4ccd2339189a4ea2254de6d4e30aadd816d9b"), ("09f75af4e56515e44b0fe9cd3fae52d91ce463d28d57dfa4db41e473812aad6f", "23e45e98d89e9ed1c4960af0013817ff1924a7caaa14ef74f8dbdd6a35e5b7d4", "2a09e545cd3fcc102b693ce5610ee55e7c33bcfb87401e0f1d0b21f61faf38fe", "2cff6c2cce25da8f7b37656e6d8c335a314f365be85a9e7e0f23d4bbe018a585"), ("247392be975909fc797611877d40615b653ec3b0bf77177098f61e713597a9d8", "06c4c89406c710e9fe4c67125c1a01eded87b3e74f5f93b5181857072a337365", "0d5e1ccf043d713f561657ffde1f391c8144b58d774fc3763283ea3b0096ae8b", "1116a525cccfa8ac5f222787d2da600c0214a70b838082948c81caebba55e958"), ("028643a502c3de1c3aed7df2a4d9233bf42817744dc4d319d33940dc58108807", "224577dbbc8dc9d9b4fec0d90e0c25d975cd2ddb3e292c1231b74bbd0e76512f", "163413eabf4ac265d3e1c3ecd564e4e6809ff094ec7b9d15f4c209e1ac933f2c", "1bac0a07ad73ba3a2483831c7606ba845ed65783e0f1b97ed63109e0f371dd8e"), ("1bc9ca3cf2ba26a365cab1232d9bb9d25077f61767713c20718ab4b24de70bf5", "03fd3a8f61b0a63f676f54efc2fc1455b1d51c1f3e6fc026e92b39876b85ebf1", "1718adc88b479c3a85ba115cc695e4552ffc12615afe516b6ceb6437583498e4", "2df948b9f52ecaba1997863549cabbf62f9e403b1308717ae9da41bab1bd1fff"), ("270f73070ab5a83df8818da099703198b4bc7e84f98f5be382e3e48a5c2a5665", "08883eee3fabe18b751f19f525e7da71d7a853b9caea81919eb7e0cf561ac75c", "1ab92c5464eb33ce0a4a05fd7a11af4cfe7af25d865f60b2580d431c463d0be5", "12d193cfa331a896ca7701b95202b20138a5ff03628a51952102dd1899b6f122"), ("1958d2a156e453de7323543ed6ae6aac82a19ee52207522151eb4c0c1cb38aa4", "25dc9299d696a54c0ef78ea1425677b6161519b461fd03c9b6458562b0a830e7", "1e606f08bc7c8308319bd30e876a8a2b8d71fe0fb73eeb55c78181721b8ff692", "0967235e3f1f4490de95238facd6cda1c39f33608283da53e5ad9528ae0f4f8c"), ("2af16e261e8f18554dd9737906bb533ef8385f5483579da8e6eaf8b4eec9b896", "1e7c82cd6d47c5ba9bb34e2ffb74a9eea461c154703a8ceb8b0cfe0e6accc7cb", "22e8795acedb9e6c25293558b9d16e615dca4113c121c19c79b1b77b3078e975", "2cc9e864be1c4a3f9c28660558f08266317969bd32f2d8503546e00009307e0b"), ("099df356b43248c57f7916e819d0bd9cfe35e144db3ee2c49287e126888ea12a", "22f409dad3075cc09fc234487a7ecf4da267599056b6f6581dcd45f6d651a00a", "0f942601f1085017c9089d30741a9047ed9768c7a8261aa366bdda6147320572", "2893a6abb850003b4e5ee6e95124108684d3fbc744d407ab4479ca9fceb92f21"), ("248af7aef26b1d4cf0efe25d202ce6a1ed03123e30371fdc48a969af69edaf53", "08fdaf764abbf19034b7c439643eac228d06d595695b9de72669c39786f3f59f", "0e2ea56c45d349c612d10590d5c21333e84c43976a54b0a7cffc5e184fa01eea", "1734f15017bf3b20df9de76d5392b98f8388f60f129f2aa0d129da12fd455da8"), ("2c7991aa687ce1162e0566b22591d26f0c4e39cb45968671d1fc258ce67478eb", "26bcf63198f03280be8e89d10e0a460d772e2c8c98a96b4e893c70ec0ed010d8", "12b7f14f99144328dedb85fa5bb7deef56788146a88f8cfb34fbd5b09d6b1379", "16ec3d19910bd4fd3c033ede34a010780d8cf11c6884871eba14d85ae804b5c7"), ("115ac9c0edd529af37179e4006c685f92f85c622acd838cd8a5031531c4ff125", "0211fafe6c77cd4278e7d5344d392571d6d1178108e0480ac3015660aa8f75b3", "169fd7a9711b1ff39ca9d0f8097243e97743336bc1ee5a4db43b053c34332fe9", "0f28e9af52e9e2faf2d497b7fab3e02880abac5608756a570d75f8df91dcf8a4"), ("12859ef2059b9b38940250777c125a0d12770c8a0a4d4611406f9e7780746b18", "0879d12990275b41aaca9339258a3ff25cb5f57e67d3a6dc6b05767be7531090", "1e82f8f04fa0f3825498c3cf45343426eb995e241356b0c889f8159616a14aa0", "0ab24945baaa9041919f1e02773f508ceda00e917e4f672e6e6ccde17345f5c2"), ("300b2465b098e132a92c3b12cca1a3642625a8dc56679ac213e250a4eb1c2baf", "032ed42bc6ddcf0cee296f737984e530d12abc35313d67307f7678beb177c3ac", "2b4bcabfa49fe5810bea3fde12469fa8d55214711a2ad9f30e5c8d9d63025411", "1a951cc46a557b4cba4b6621d0ba7d593d64fcf5eb2afb9eb748d16f39176914"), ("2bc2a5d6c7b8ee65e3f5a95faaf3ed0dc098113eeda59ae82fe8b7ee475b5fa3", "04d446c1e30d3678f71eef1fc7dff41133bdf7b379724d9779f24e9955c49a33", "28e001a3bce675ba397b76ba3d491597c57e15706bf29cd512fc2987580359ee", "0215b58f75bcf0e797edcb81dd24960e84613f4453c76eb7a0d6a89c44a56906"), ("1a1c638a868dd31c23c5ee83d22d1466a3440c23fe5fc79f96df0178b5912978", "107e6cba8baeea667390f0902a49fc27a6fd24e1be5d4d6169862165fa1011c7", "27f1effe60bb16bc56ac5381a7a55e066b691c7a0cbf5aa56f560a48e8d76423", "1cfe32f7fceca2a0a0d3c791025416f7cc39ff59cce4b7a1a688b9b9c761898a"), ("1284d5b190f14817e6f035ce02719342c137da1cf4568301d2feca7173bed076", "00f3b97a1aee4d7be03bc12dc28c0ab89d8f92fdf1b11222450c778c18164959", "102c0b96d9d40f02ef71c781f157fb4cdc34e6e1bdbdd71dab7bfb299973b621", "2c828f92cf5880ca1cc4dab87828d6c3122dd4bda3ef1ff26afb00ad67e4a69c"), ("0a3d67de90d3e740f3081798a105e8cf95189a709ddddd00cd7cb19483be127c", "277c3c1c38d2ab06292fcc55d14379fbaef6a789ea2dd96a990fe18c2c3c03e1", "2f78c975d4e36f6e569bca63e7df6f175c98757fd3785a501f42644193bff99e", "2daf25b902591028e03a037f2cf969669130c4c0b57e4be73f98cc9dac27861d"), ("0b72b2f59cf4ccef1fca188271e0ba27b5ca384fb6c7005e6881dfa39b9cac16", "21613d8427573a8e159c72c9e8e8903ca274657d1c950cc5b2e594402571e9a2", "2fc4ac0f7b0f8a67142d82ab58f3600fe7a72886f494bf48bbeccce432c84d65", "07bec1882c364cbcf42f09822d3add450ef151eaf3f65d85be7646cafd410b5e"), ("1624f198bb8b10399d56b70d5723753ef969fcb45b6866586f527bae7c161f16", "0e642ea27059ace573bc3ea88a7d0d957b9e9e7db3cae2b1d1ceb6fb4e791185", "11cfef39aafa7d18bbd6e2644d530b2cf6c5ba94c449087adafd1be3ff7dd96c", "29256aac00ecd822fa1f07d67bab03580edb686d26ee12ddc2686c9e181f201a"), ("24c26cb5467517af26c5963cc3425e696fa1611b52d8769ca929de6a8d1994c2", "13af88bc434f300c9729b58a6bbd00852774e906eb98c45b14afe79eb5562868", "11d6d6fe669d28cf627702c6963ca09e5ae8ad0568669a70caa819494bcc8bf6", "27a63f5bab506867f50f23513f8674ef659bd8a9ce52199ad986e8f62dedfcbf"), ("29a178487c166212b0702c8eec160736a9d9429a45ad590c50a719748e84f6fe", "0fbba3bba442936ffad617d8b7cfbf871503095d342bea6a85d16ae535e4d566", "040750d33a8f8b8f07386f78accbdc146e44dec18055da8eaf2a569301e82f5f", "152dc94014c9050c751e4624f6e68656fa0060e201bd85961c01ab1e43632ac2"), ("18be7222ec6a173dde2c4235bab608de2b70c3703ee5512263da13c9cb88502b", "2d9ac06872ad281372537a0203c589519a3775f9cd403219ba3638c8c75eb426", "03adfb0303a2a85fc88e67aff91301518c65ae57e51b8383eb88fcda6663499e", "0df4f04e824425ba5b40c5652dfa0a10e68952bd3b272eeb09d8c3f80d7cca44"), ("1b8799c0de3485a68b6e2d44dad910201b7f720f83d5401601435e63a36b75ee", "0092fa16e83ab546a676512d13a003d1c6d49a671a73fd0454215ff9231010e5", "068b8b49a96f0dd8d6999fea14eebe6e2d4b1b9b2adb599993551c3cac99dcc7", "022dc231bd331a5118e8958b6695caa78fd5a3d07cb441d6fde4332db961d6da"), ("2ca8f187f9c8c2be7e13ca092628b1ee23e39cb29fb1b53504737be10390a735", "151af564426ead2215aa0f13ae2fc320a96bab9b34a2f45818e5f36c1258648c", "09fe855800d747f236b837bb4aac5d7e941dca155363f217b4cbd8b95322ef9d", "042c8287cc46f524e262cb83b195511ff2f72c4a1a0983f870d993b2601788c2"), ("15fb2cd11857901672cbe7cbbc7d3549c542daf89c33390c821113bbf7ee4d97", "153b0fdfbdb9012f0d47959304a7362a0565f048c6bcb78c506e40237481d2d9", "112e30df05b3b9ef0dcb45cb58fddba5f2f39d650287344177a4e2897e54981a", "1caf331e307d68b43e005b2c3db57164e113f7bb7a600d3d5a2c8da0d7755391"), ("0e67df5ae030850711f24bf7ca697ff0137cffdca4107e4702b46757b3d7a179", "154e8b59431d22bdc9ee6597860d2b90bce4a282e1bdb6bd1dabbddf8bf36495", "0941129169d5f5160264c801faa09731b57c9b01ec8db19374fe73720d37cc37", "2909a72705f923e8172aa163c478f393db4fdf12aaff8f45d837a88d69ed94a3"), ("23ee46afea0a23042c0a55769793ed6d060d81f0cb99718bebf46e967fa155fc", "0aef48db6c3b0156a2265169b4f76e663c19d70be73df28df87feac36ffde892", "1ae4272011a6676109e0db2541e99d7744dfd54c7246b24442b0c101dc80bc94", "1b0c78617a04b588992468c50dd54c2014a8d08f23f7bc0f41a9230285a8d212"), ("1d0816c226a4241cc9ee1091169684e4b4d92e976d17bcba56f1453d74205517", "16fe66ebff7dc178635cf2a1b55445f4c52b0d612ce2afdd4e58fee00c28a86f", "23fe0353c14be27abe0b07d004244d0849b47f6a1b705bb24abbd62b6c8d96ce", "26a898c6a01bf5c9550ce28c51098572cb774c6669206c14bf249bee2fcfbf8a"), ("2c5232fc5504b030288b493a5252669bde1d25c8807ac9275726e59c141e3b2e", "2feb0a2595923c61d07fff521d306ef431e519e02412f0d44a806b1649c0ccd0", "101b4b4f6f0f45693579bd8b98c886eef5da2fb326582c78a6ca32f4d4745c00", "192cc2d595419318241fc4dc4666c15af45ea6440c816c6aad1897fd5df6b846"), ("29e0b5574c287cf7d8641d827e9d8159092097d63c3793bd2f6d214ba1256e91", "2993240b077e697cd9b7e5ae9e04e07dc67cc33d0e133e1f86010807923349d5", "1268502689122db2eafd533c92882afd217559b412deaff49b7758bf1680f8d4", "2096dbec3ab6a2fe67d9cc199b42e2b529513397bd9e37a5b087cfcbb7e8e494"), ("041226462c568fd3cd26a14d7f1565680e2df7dcbb0873edb982300859f23c50", "092358fd4b1d949f354b69325ec553dbb682095cfd7324b0eb91d5a5c7f4ae6a", "23d2d0c95e5069a983caad91ebf6ad7170106e21e4ff5c8b761063e31c91ad89", "208d6c3c71ef3d8f0717db60b7feb5c8f7a94abb51b53685ffadc23d8739cc2c"), ("1d90c13dcf23a161b727ed6da8e9c82689463c6e7ad576e75d83a34bb888f5ef", "214aac4ea98588ed0ea86b1e3f2bb8d1cd413dc8594519534a5a9d8dc10e5d28", "22d8089ce31b027f728948edcfb01d92a216d77c088f8c230eeb0f95a420f068", "08ea56fed7c706f084b358e5b696d6e51927177723f75108e8e5495f17bedf3a"), ("29d9e994483ed7422630fc1140b4a729a40b457e8184f6a441eec519bcef533c", "25d3d33f7435e202c076201fc4b4ae78d2aff053c7de5a8c4802cdd699b8eb6d", "2922bacfd5eccffbc2b900e8e446535d8b2acbd83cbb417cb3d3767724ed7ca9", "22ed77097fd400df8689da887ae2e9e2dc4a23c2433bda6b2959a2c11e7e4fe1"), ("29d7894d2cacbe492ed4907023dd55b4bc2cf69088128510c958f857c3a2b76c", "222f4c5e4ab140136297e730c4cd79efecd4cb924f1c60394f36fe335e064370", "2b9bed33d1e974185e8237120476ac15ad9a32396a7e629b5803db89bc4a73b2", "1f6432b81c1bd8c62f14305801edf57a274a7313e56f6d385d5532e92e277794"), ("1726816bd2bea8e154b9811fd6abdb80cdada5fdce060de04a1d169149d711d3", "1abc31bf4976432716ec4f3523d74f1fc89f456274fa3fe97bc9fbdf2fe53f37", "2e4fd3b2d70f57b124385c86e5435a8f8376f1b18547f85095f50367df15028e", "1fa46e148c2e0cb7f7a35b8c5a77e56c92f08fc3e7a4083913c8a4d388d6e9b6"), ("1374c6790a4e88e4d980f0b27ec0db5b849e56c2cd51ad413b5a4caa526131a7", "1200605369700a4981151500bd863afe3fd1327e5115aef4e574fdca7784f1e7", "14d54edad452add85d3e62b20505782b208fb0a3ef7c8d55c8a39d79438215fa", "161806e904d46d30294588e5333a9615bda11493b4f41252188abd163b1a238f"), ("25314d4f6360c318670d9a5cb2d844b826251f7029655e33e37f1ac893bd8f41", "176bb996752bf80ef68951b64c7f57d12b9e0a4bb920643184fa539ccf8aad90", "217568c8b583e5d2e97b2c5080f17d19158933ca0b3e83f8d14a01f95d7f56df", "0c2aca7d0c4a27f87463a96ee75d8ba567ee38f33479ddc28ea5e8f560d8e4b2"), ("069eab8b17c20ab9282577117d55fb3f440c216ee6e67437317731becee71cf4", "000e4aa8d611ced0c5aa8988f16e3976de65a7949f812c90cb9b81b111efca4e", "131f9a7eed12b50044e55102f196cdbf150c4baf0017f5a13794455262fe7912", "079b28e5bd0c96e2e2ed115de007d625a4543240c11b72f3c906fda8602abe8c"), ("299eb0d86a5a72884b17e650027ec19900304599d81a54ca16dd7ac6732e6224", "2633d9e3f9d36965d6207e6e339236e90c54ec2b5a384918bab7156970cf55bc", "204ae55154f3f623d72954bd3de82104f729db379d4d78279fbbde2c7b8c352a", "077ec247d7e9db415a284c24a390417a125d1db616398ba3716a981598c1ba49"), ("1c74acf0fbb86aff776263e9e3400328305a53cd4cb52b67cd84dd1cd0f45caa", "0ea8ef70628f138b80fbfc9f8994bf4ff556cda33d0674ce0edde96ae0718330", "01b7e1276d337dfb9be7cfc7fc7ba0223541683646d8f15c5733422b79674d19", "2121d1a5052b1470d8b634eb7f18abf73464d5ad6c71165187027feb8c9d30f2"), ("04dc114b3226f1576aa14e1d6c510035722e0100ba8102502b4f61d87b451f77", "18b10daad8b0eeb8d15ce8f8df8bd381047b31c7ab1396fc8cd1141972a78454", "2adbe49e191f3ddfccf2cfca62b1a225a9a7a9e6bf07a566a41e6f3a0fb22962", "21d33b49e5ded403e22b1a8b6fc59103c5950bf9d85936d758b3c45fc09d6427"), ("0ef2441ec8f7a89fca21ad68346876a98ab40a52a826d4cce2e4db6753b3414b", "2590492b1470eaeb6937e52c4015dcb43ff84f27664238878ee5394250084600", "0f0a27a3e4f12acde50c86c73caf607023ebaaa5fddd0482e0aa4bfea35b61dc", "180914ff812394494500a0fab4a4f973fbe06fb3e9f581ca10cc8f5ce4939054"), ("2515068a657c28c2e468322790fdb6597f6ebdc39a3ff9d6adb0530feaa60aa6", "24b47dff7efde24a6fee78d36dd31eaa9b1319a9e14255adfe9b974f24067579", "1dc5523f663ef3d00808d4bc75dd848edee043ae31005ce45732a40007abc53c", "101d564ba8fb920b474905312fa97cb1bc876d624ceefc2dbf90a79f02a1ee9a"), ("1bc48b43514bdca7e908130d6cf78d53f69c4bfabff7862a50565a71cfa136ca", "29ad13282536b4fac9a6b70bef0a19202afed3fa1074a236d15101bf5bde1137", "23c8f1d1c92d8cb13f95ef5fcefc208d0fe5d245530fed7c2433125f25b4af89", "248b0c7e5dfa3a78b198c33f697ab3fc5bbb19076658ca99bbb1179d7ac963c0"), ("12f937d6f732ce3bd69c7a2cdc0dfdc4b524075c2b004d38f4c080d044d1dede", "17eae06a206baf0cbcae7543028354c39dddb35765a901b7424a1d5172839d48", "16f10674ebc36293540986408da1a6d65b66b4b3af056f962cee7dff419cbb5a", "24a73d69e86a39bf304dcebe552b4eee360f5a0eb97b28cc17c5c93f1dfd5bf9"), ("2208a37a64d8e0bf937431657b66737490d24e56c0ced973849ea6e064b08aac", "208bcdd14d221607b98528b80901b71c8724893f9fa83ed7efe2be25a9689ee7", "0962b01fe5dffd8eb3bbb3deb9a74a46ce0c1898a939c2e39ebf45433907936d", "137acc4e1fdecee0cce5918e85a0bce7b4513b667c115a07e72c893c708f1305"), ("296fd80a2114e22122df0b8e7a26730da2786c89320f0b814fec28bc10d6de1e", "0fc15abc4dadc32a161a177bd6d4d9c59e54203a5b112922447354c0df236b40", "0ac263512b74ea684adc3c5572aaa8a5b85fa8df78a72b806ec14125a275a169", "19db79e99c0b71f535153af673a913e217e094dbb760043172d04e0f42d69c57"), ("20f7807c4699c0bcacf6319a6661d3387ca242b07be1a25387c30dfa1bd868eb", "2dffa0f4830c7b5b1a4c487c7472bbeb922784ae7916098b5b882acdc9749647", "156d0707815e8487e660949cffcf1a8d3004c1092482fd8834356da9a59f64e2", "1e1bc3185e849e17fa66cc4cc941954f1b9bfae05cd560d04c48b370bc87d3be"), ("1f5cc7c249cc745ab1cfef3f4cd6bd674a69ab9554dd225cf9999ab11f16f78e", "2525acf351079a5c432ca4805d9acb4f414ca3e1d77bb4e97acc3594ba442fe6", "26657fdfddc4366902641e863c14ed58e29880d2a7b70063bb1acfaef02263fb", "21292488ced6e8d15ae00ae255eb5a5cd23e54680f8a5294bb9018fb88c3a599"), ("1b17bda6361bbbb05c7983014ada56649c0f764c096afe98eb84ae46b0293ee2", "17e78befa9ad472097bbc16775b5afe6aa064f73e9a643bfd020dea10a3214df", "154e972ffc1c8965dac1417dfae286b9eee8088dcd54a1d93e4248e9c91524ed", "0e4a85d4ff3f82013ccbe723bfe6e030a926bdf6bb7ad00bc3db0e770a7a1f35"), ("0540c3d8d3120803414d01b71a447564f7c070da443dd44f69393fe646b6564d", "094b4651338353b50ccca8ff497e9b285bb1176dc4ed4c3deb820f78360552c6", "2b4f7a46d5c566362ee6aa2e75d28f5c5f662486e59ef5456664ec8773fab4ac", "2691f7cd13e9e7403643a886a03d187b17c246084d68c3938a3d5b8b3553eed0"), ("2e997ec57f6c0fbbcf0877f9ba8ac1c6ba6ddcbe86f937ca734791912fbdd8ce", "21b65f8ef1534ae14e7a275f4d6db3def07e52243e2e20dcdebcbd68904810ad", "292a571d7f874a76853dadec156a1ff4ccc9bc594bfb7204b8ba38747b72982b", "1747d7bfc90520cc9d4c916a89de2f49c60d9f393e56b123d14dfb3422ac56ad"), ("06cc3d24d8c2d39ad6782309a8fe9602269d5a1432f914c6f6d5705c441d3dba", "1feadb964cad0ccf3548eebbb314d6a97f619af58c048de5d449d563b7013d0e", "285278b553683e1acc78d6c7f3306c39b457fe6fa9529b8cd3439547932b6aaf", "122e1f1c73b14f6ef3f2fafd0a1cacd496df78b5b2787de32397bc10b3ffb660"), ("1cee51651c034ba87e3ebbbbc56daa06fb1f32061de771d1cb9cd59c3cdfce1f", "10be2b94900c496e40794b44bc66027b7494fa9fc967b333f5bc4585be9a2fb9", "0da4b91425f15c6d1f431074ad9ea2c061821fd2815c4ba43b9aca788cfd7a7c", "2c99186ac773862beb4e7d9793b342698ea081b0caf63b48650e1418ef139aff"), ("0044419b1aab40e98f3817d5b5b72b9af2b65eb03f7b32f948b6aff2c0503495", "2dcc2ba4e99a285ac10623797c6a6d1160dd4cc28b2877fd1cfb78391b13de68", "2b82d887e3fcc886032ec7767cc3f1247a95ec5f99e678f5de70815ac7a7b1a3", "2c8852596af442e2bbd4643813e6be96838ec396fdd437142d793961cb7e7cf4"), ("16b1279327f13794679107b571dfa54656b1ed7cca544fcf198bfd42ffee092e", "26c095562e70911f23579feab7e6c59bdc84d1e07c7e2e1c73e8ca0205e771be", "0a154d881d57b77f30b826877e6606080bd255326451b8d1f4c07a1424c6aa75", "263a7648a1dc750f1cca8e05935e2972b62d279f840df889886f4c8a59598e13"), ("26b8d8a741b33aa2e02b1958f3763dcac4a12436176b88bc382c34dc47cf3406", "2b1ae7a31401992d1deafdc196ef9dfc62b629c61514403ae140ee4d84967b2a", "2730d55287d0e7d9982a54277c991a5556ce6662eaafb1a38c8181cd50e5f58c", "1d7b7891cbb5e11d1d50d4046f98c93ac6f04189df58cf06984244b014218b05"), ("2c35060b8d868ed80d76b6517a080294d9800e1878efd78cf099d10ea2e4e4b7", "293f28d0960a7600f29c409d56cea2994f484386c529214555d3d1d96eeef719", "2cafa2cb44e34a9e22f31ca2fe1765e7f12641b30c03431ae43978552cab1587", "1d942238eea501a847b09c3f39448cf09504d07993916f5696c7f638dde359b6"), ("283057d0dbe5977e034aed032811b59cc86cb848eef19886fd6ef179620b5d29", "12ed3be0ea332900953b136ac9259cda2f2ed8608be16e02f6658cac5a32ab79", "305f3559b96f4ab908395f40d00b87447add6d45084dd31a93a0a7381acf9e65", "23a8a681c78164dcb7d2e96e43c974aec038dd0efcab247af35517f5047d5750"), ("08aa1dd50f1dcb3ba9c981c4164d6528dc0edd4c51aae08b353fb81c7c688b72", "2fd250fa123cabca46564512e468759c7f7d7012be7665813c4fa52723b9b51a", "17b0c6add5a636c4b16be1b6c20127db97b28767cf0334c117a0f1901b235465", "1ac3660e969ef7c01951ea0ccf07e1c1269ac2cc46998c92a44399865473e849"), ("27dd9121c857c45f56e9ed89115e34f1e8c2e1ffe6ea1adc84c497179b85288d", "2e05420e927204ddf309c1536b2646d9f3275954387c37751ccc38e2d20f37c9", "11451eeeb4fd31c0cc8522d956ffe2230cac221149e45027b100ae5fc4b2a4ce", "26f930a58161a71c3dc9a4a444498fa58844aae6c2ec1841db9a037d90e5465e"), ("1048b76888e2f66e238d798dfd6eefa0b51b84ecb0a99408b456767c4f842918", "2ad178c98f86643f9b8f5c1df9faf76a49a39afc9121d127a208b82c2a8fe090", "19060f0601b78a4924eef7928b286f69fa037397d2a08c6d5106f3ebf9fec323", "14cffe048e345dc1c70196f011bf7ad4b51ed666c53dd5e21353ea0f7e151683"), ("2920e882a8c2f090e898446da8c16c08c15d2987fd9de057eccc8daf0888c6ef", "0e2c2425efd0ae6310e823147ab047c8a95cde7e4b9d4b44530803e8036022bc", "0f1ab6954c0f373322cfb4155f9d3fb60ec156d5dab65ac4dff1a92d0fc6950c", "0d99646f1fb2214480502c0437b4a1b70e92a2ad5e5860b77c48e34eaff1d27a"), ("2947ee731c9d1e90cbd700fe053c09a19ecb3a247bf45f2d4b53c719e4f31762", "1decbaf4d26dae50fe010b2f256fc2c8a41eaebd9c770428b08d07e1d2b51693", "1aa28461dfa5af7f0190815f19dff9ca60121aaf096e1087daed96a6db9e6050", "06eb444a7d3f043536bfade83beb4b383fd52f75d587b0a588a102f48efc2b16"), ("08ef18d5e1780918eedd7dc7e672cbd72331aedd61fb4f88ad503292db3a80fd", "0dc58687fc42a7aaaeb0620929c1a5976267c9ae32a5f8ab6e891d5e31558bb0", "122b8b2d89e422c958e15a7bfb6e35c0ed248c667619851f85e12ab9dab1bcf1", "13b990bcc9f2bc3fbce61975baf8218a474d2eaef0a257f785991e312f619a3b"), ("02fa6098b375cb06e9fa3ad128ff1d666884294046f7d23131b0ae291653eb93", "1d4d2935c70abeed5c96d893b620e396b81f51095673a46f7d5c0907c1b6e343", "2ccbff4496308d10b2b26234b04223ba9dd6778a1029c237a198e129d47870f5", "04709da144ef3a0bd73383d682f332985d07504ab3800f5ebaa9ae5cf25a5a1b"), ("230c734a26e4c9a019d87ae7b3331dd11d13e32c1e0fc4e27537e4e50c59f9bb", "03266053364e52f8962a96d80877aee48c876f3bb1870034217ba6c81a427a60", "19e5a9c91a42a366093f45036b38f2f0f035f696ba78c04118b4324b1fba550f", "236bbc70fcac85efd8c815f40daf636524ae2b319f0320fc4a8e70d753837d72"), ("050cf8e9e4a1b6dc16308172a7b392af59ebc5af10377aea4e98bc39bc125a07", "287bbb2662e48485c26a92bd444c177bf7c8e71d715a6da56545fa43fa9c9bf3", "0a502c52f0b2ee8995b04db7990e0ad400f97e9f5da5c1bfc4d13f9ce82c8f18", "0fb250450516062143e9b764a75f6b83a78a36ba1905b549540bcab73b162f91"), ("3057fdd36609ab48daf652ae0fd28d9904d4e56be77ece83846ea29e70f5e256", "2b6624586cc4ae0ab074398e7c1b88630f1eeccdb5ec8fc5eb83efc669b29e23", "1bb01e99c3b6523a93146c3b4c9a511c5f0f157f04a7e427959a996b4d0b5751", "079380550cb1e767c9c24caeca0d864327cf6b394ea6718621fd4274643ab262"), ("05037b4cbbb0fce8fe7a43bfc69f0611db92e3248e9790bcbb335dc6b2f34eb3", "11d3ab826b88a53ca5f44aaa46889cc4a326489a861d5dca25ede44bb025220d", "1a9b4d9b2094f86bd5bcab9bcad80946455bbe94f3eb990acccef7560dc6a9b8", "012a72f8d387a2d60143f6eb660490f6064d846c6f17900a683e3bd4fef38f41"), ("12ed294ed5a2a6a4a0f6a2f227cc70a33d3f37146ccb0f96c6a3cc35c71ab0cb", "174948c58fe130aac5d02950278de3b0a54a17013c3ee39586856407da743ad6", "21e383ba51d43c16a87e134c224ad5f76d11fe168b42fc1955c8b0e0a7f7fbcd", "22a601da8866b13aa59bd158a6d11d60a75fd4c39736e73d1a3ff4dbd0f0886d"), ("152a9e65d79ea561dbc8b132cbc2174a641673f4d3167946aaa494b78865498a", "184d934666564c23c54086348eba3f5957c86d00441715da4d77326d6e3e8ecb", "1b0bf365de7ba4ca26be3c73ac85e4d974ad570713798a91e0c1bda865e728cf", "23d9b7ea0347ee3866bf24c4923eb0b83d33e3efef2299bcdc674899ac0d4738"), ("2ccfb320883a1be2b6327114f52a37e935ada71031e07dae3ec90b0326f5af6f", "2cbd48a4dc03e661b01ecc47bee3a62f0eedfbb9bb60b4beed2d865801b853f5", "013c06c9c7ae7d94be971ff0b2c25caa76e958de7fb6d30506db32fe44b08b79", "02343ea216cdd6b4505893fd9f96d5f218785cb7e6b8f34c69da498295da5f33"), ("1be14fc32d73c2a799e3edb81c922a0038498e8321ddcc8e8e93739bfc71c3f5", "131fb5752912343444f8a3cfbfa1e12926c87e3827b5398455570602b4e85d3b", "2f49ee4417fc95c92b1bc9e0a5a788bcf8790e889c621c859ba6abfcda0ebab8", "05fee8f53c9e63ca61ac31435a4b912d0a8e56e21654a23eb37b0492fde7d08d"), ("227bbd34fbc1242c0f94201f44c72560eba7f643b768eada24f23adaac7bef26", "1bb82f64619fefa997b2b2fd40faf616d7a058e7ba5fe18b1e13be62f20c970f", "2c17611fb3ed34f27e0ccd4f6d947b8cfcf54609c88f98a987e6b4bdb9e87484", "1782d8a7b5c74d639374e2bfb4c2d41e1e270bc2069dd5ab41ff2bd6e2a970ad"), ("04984e3060abd1be618fca3deb2ec3c167beeb548e1c92ba0c49efa609c578ea", "21f55448f3a6feb8fb3e4269d6228abd9c3961ac5fdddc9206c1e695eef6ab53", "2aa33f2f169e22b5bdf760756af673a4453a44e241024768e2e3bb688c4a26cb", "13bd6bf90afaa000711f6414f910fe6f75b6494a191e89cea72e2c1239875ad9"), ("0104d1ff2fa7b80f0ad8868cb1b7d0c33fcebb395aa77ea29d5a80cac4493411", "194670cd5a2ba7dfb5da81f44965c54942245550bff779c836b104bb1d0a6595", "245d4b59f1addee1df07b4ad63466c6691fa347c6997e022107694b950348b2d", "0d4d92730385b2b1ea96799ea088e141d2ed5dc74f0b5acf98e650d158208a9a"), ("16d6e535a3550acea39405482e340c258eab2bfbcd96e8f0ab9db150e5efcc3e", "122936858c48290ed7b44f92941abe008426c17ecd66fc736a39eebd058f0e07", "033ceea0bdb671ca02239539f0300b619bd007440c50ba919d9843feea043d46", "1a3d25c5ef956ebf95fa4c51b77d8e5b87838af1a1affad405ff37937d943a94"), ("0508048fde42e9a6c32ddc37011a87f9ce5dd87ac089d7559e09649b22954864", "13a3c1a72a904051b17ad0e2da97a68393c349e40b6670f56f4077a45d03e135", "07e40a58a41d931f610270e87ee493c0009105a114422b90dbcc6945183f88ed", "026f169ce21661dee57ffa51467e30ea0d932eeae04bde7dd3c39317b6f54777"), ("26a5874f29dfb300b259041c834cad0e9a17fdbbc0526045c8c109846f6ec90c", "145f9eb760d994f59d44143a20c14d1034c0402eb697cf3ecc6170baf835a15f", "100aa82121afc141c9fc7f924172b2b083c07293481b2ee730732a3386c3ff1b", "23334e828823eaeecbed73328501c262d9df713b724513c67d9c999ca47f13c0"), ("167e2595c7d20783fd34b1f6d937abae5079dfa80eca4a56f16bcf9113410fa7", "01f099c3b680d489cf9526acf6a21b66fa5357fedb7f919f72d9d90a03a4200b", "03a4f167e3d0c01222b52d9222a25929d7709ec7c5ebe8baf4ff79f5b5379891", "1402f658867d223e971e5f23d2d00823e0cccb6a7d9e7092003349b3163041f8"), ("16a921f7b3a752e0825b9cc835a8c69e076f10b9268e54877d32099fe100ce7f", "08349ee0c4fa4e8373a1a3bafca012454d1a3fdbfcc32c02db4276f4aa491df7", "27cfe9427af4486dc8f8be6eea8d7a3ce142771d53ccd925f9efc410076526fe", "2b9fe17726feea22eb99c3ab8deb0fd680df8184bc42d1e27bfac0faf019ddef"), ("281e94d0a778f34b205c0fb5a84c8708c3ec36f6ce6c31c3646f4b17fd325ba3", "148216880d155ed08872ed33a52a84fdfec06937ffd21c4d602b4a4867640355", "174ab80cf5a8e578913d6cfb6c2b7bfebad9506118f61e1577e30499413e7edb", "056b0c17f8144186811f58154cb98d0c437749ba755a7291429207d7a658d02c"), ("0f8795cf04122823a84f82945582a59ab493489b259b18ae0999ccd15ca929f8", "14b40afd516c3e7920f58e968c1eb910f1ec0f23f1e5029511706de321657a64", "140f8f59dfa95699cfac156123533e4dea314145e016b2c035cf27add0e76f73", "0926226be77c37c8a71a102ec018fe0a041715401a2522b19cf5ecbb9360e1b6"), ("206a6f2536662b1cf43001f76aade04d434e99305ab7227c0f3dcd381fcc0890", "2ed49d073b3a1d9fa65d93deb4df3a769223cfe5be56d01afac44276e304355a", "1e49becb6bf2168287537ed4b58ec05cab1f1403dd5700665b2c84323d6b1c74", "06a5bdd41e45d8a92eeaa3be77dd04ec9a040db4a77831802f1b3b58bdedf847"), ("2b698cf35cf329ca1a29af5cbbdcce53eb9810c57fbf27c48b4a51dfc5ce779a", "22a35250815913ee20431e3c7c63298f04c1a841e190f180783757ba7fb96120", "128148c228296ed1642d22e6c67fda27e9b7809d51baaad728f450827bfa93f4", "151ddc721d4c8d10011d5cf7b9e55b92e5036d30242433cff4f694c1d25c2ae3"), ("24a75c3b24e5911ab5a92cae0d532422f0d23a61c87273b0a41271009df6f54d", "02d5cd335a4d2dba033a1bfb698136451a79dc2a9abeb380d2ebd21a68e6abb3", "21d286cc27b60d2c49a7439423eead3afdbc408722f0b8ea552b4ed27f2c0836", "139a9d39cba538035b87e9fb583a544e72662ddc2c0a4140559c24e985154147"), ("200febddabf6ac69247f8f185815a19c272f58e3e918979cb5279a2746795a13", "219c28ba2dfc49c75ae7df51b1a4359ee3f7ff66dc0787c742ea5c347fc3c58c", "053cec689d21f2f19df6354c4fc25d26a63527ff145439ddb574ad50893673f0", "0496537b27bc3f6767ae239785a968f988bc28f4865e5a73b5d8fb497bbd11a9"), ("262dfde1ef4500b44cfcecefb68775714765ac29eb34426013ba6bf296bedbf9", "278251da2ec4f493b197b8511ee507a8305111d78a7d3b6247834c98d68ed435", "16610816d3ac08eba1220ea23ec736379bd7d36ff6fe686371011f1e2bd00561", "162c391e68a4afbb8709ca674c6d8a78a0032f102343044bd0c0f2595c913d10"), ("1cf71e935b1e5f8b8e8ec0e1b27cc799952ed3a14ea7f652185615e1c213490d", "2d68c6173723cab425a5f053ce99d847159273c9a7af22fd8a5585b3c4e3d820", "1668d1d5b68191a5e51a5316088d5e38ce198570467728062312954156e8e1b2", "19ef0cd2102ca28c891b743fd5db5da248594a5bf9fdfb4664525b3a6484880b"), ("02a79bfeedf52ffa6f8a361bc7a338c13d862530c9919dc1490b844f5ece9302", "15cb63b495fbd1043959513f507c2f663a8d71f221a2d6036de487f5e2c59da8", "2c57ef086409669375c0e711dee64710e23317aa9bd43961df185b51fd69ff19", "0eb9e89589540c044804ba1c809365c57310ead26b8a0e6a8fd916383ca4d7a8"), ("0b8de3591a637d02ce546f16d678bfe8d56ec3aeae683826ab93d581fbf3b59b", "1ded783e2923b84bd16da9150181f7593f9c6f5ee2a7fd0b890ed47938757324", "008e3a3406bc5e3e394e1115084ef1a3bf167845e58aabe826e0d41f3025611c", "00abeaa4ae96d0a82ce66a6bd5cf4457353d607c8d9724fb3bced7bc3ff8ba35"), ("24df4f5c36d6801051b482625c6f556627d077d323be092ce78f0c6d7ba447d8", "1e810a768f9ec8038b0e89701120a0fe4220a20f3a5921c7046afd9c1dae49f8", "0a4eb831aba81f95495779a23bdf7efa46e019d9a762d46a83180cbf00cfcd9e", "194e6c6ec31eb490dbca4a7f2fb5e2c62b4d5fd06f6bae3809da72a337028027"), ("2e528a17cfe82258b90b47f06cd4c45a4638cba602ebc11bda8fb6995b3e756c", "06159dcbc98766de86f644f98eac88c5c8bf4d0f4f33ad7122074c52e7db4f99", "1bb8799c9c02a4f6523e805c86ae3b2469ce697128cab5c47f028c869909a734", "12b93fa8ef79060dd359c2886a2a88a7dc1246826cd6eb7602271e23191dc488"), ("0b83079ed0185751c0f0f47cf3035e35ca77feb9d1a4c75a83faa6272376a3bd", "07d5bca931b8492d5ee94906e6d8bb3796be5b1c2d62771808cdbcae9d4f68e3", "03f3ce9de0663d2c04a97d1a5fa1f935020014b974303693f67ef3af9870d926", "2cc9740e010bdc782db27c2dd2e936335894163fa50de8412369d58a98c56471"), ("14a86a719b6c13ac5788fbfcfd74d8f55cd9b0acf8b8e19dcaf842a6dc2112bf", "274200e3387b61eb784ef826fde86de231b073fc375e70a607201a0626db6f8d", "1ca44febf610a01c5b03d65630ebb1cc34134983029ffca65100651f6f7ee4a1", "012ea43a2eee06504531a4db3282e32fb620e3f06a96cff4865fbc3a7005b3d5"), ("15e7d0f519a3a12611342c2856376a635f95f98065dfd919e0e2bc7349ce1815", "14af9d4a8fb698157ae8fa6d22c6bb6a23f8d923fb11bc9166e4df598c407d5d", "2093c227447dff0b1b94f218ebec2b7a18203af1b0d51a4d9bb159eff515a99c", "20437f7258e483a16a3b3f611cce88078091f6e2cb75529c4b4368c3b0671e3c"), ("08120dcc42409156ac5be27c260443f483728b654b731c2f624ae285bf0967ea", "0dec0ded74ba3efa7ec1a52278e56cc9b2172d3c0a14f81238e10f0dae3ccd58", "0df24c14daf661543869daf869b9e987794c5338c0312818e0959b7682b40a14", "006544eaac9fa2a61f2c8783dc4737bd3f4a4107510bd5657f700ab99108cb0c"), ("2ca7ef493682542095e459db7474c44098b987538baaa63df0fe8b7e04c35f55", "2422826079a8f3abe024504daeff5982546f79d38432c2be89efbfa0966c4c4b", "17154cdb654e51ceaf5cd5a3517e0f3db0d5c2864a5df992961e9992db16ea38", "0b3d7de2234b9492f00aea784399c0c419a12fbdaaddc6215f45eea024b40991"), ("2e1648262bed0fa71a0eadc805062e490f770f3871f9b85869cdb228f9ddf359", "2ee6f4a3a254168e292df35944e74136550197514eeb8a13f5a987c17c9e8b58", "1b6e3a721312a9a609a01892d08843b593da227fa03b68f4fb991a4f45c04c49", "0b78c3666fb95d5d5c7f043eb6013c7e2cacc329dd888e4b90d2f1bc8791fa94"), ("25a930f7e2b54bc75f7e17e288e8604f4c4bad4d61202f5466a4fbfbb3234870", "1bb813f50ae76743d71eb3c178d0d9b0d8849aff7d3881c34a48b532e672e964", "25e3a5f224e0ddbf39a5c03ab5449028971f5b4611c054514b19396c929ee67c", "1a73a693107036c6e8e456c424c6af1404cd7a74dc7e4b7cb5e34a3485a9f5d8"), ("0fcccce234671ee5bf13f1a6983627728e2146f4e26b08f29ab1c13d89e11526", "111c9c12526e0cb4eb572234f2da3b9022a752207e33895f40b20c57085f4130", "0d100054ce765878e0b09da8eeae15e7d28c0b14832f1836dd6e0ed2e7e40b39", "19182130f47deac91f256b050c99bb49223aa5bc27c34749a809a2fddad39f3c"), ("2a6da963bcea89d207a8e54f7dcb0db689b79c47b25a34d9e9ef1717e1ff901b", "064d9c1288d04c55d544b63ce199e12bdf745cd510649e1ba11f18676b967fc8", "157ff02d865ac6f8a5fc062dcbecf7c2c232079f6b846e08b9a463bd68835743", "3014e7463bc1be87daa8e33e56328f3fc68147e25345c03876012383bfdbf5c6"), ("08a644b333b62f4dad0005704a702159a07b0727b99df1629cb9d40c84200f30", "271908ddcd0899931bf2c7fa0e039ba73864663a44fab6dc6fc66f49bfffb521", "2a3a060249ff8e276e8de98b4253219609dbcab0372a7ce3264a0fada96ea5b4", "1ef7c4e33455e60818f37e81048b520be3d22ae0878a1028b30212e396932da2"), ("0d30087b0eed074628a9f9577455008c98da1971a71c02921fd6ac484a9270c4", "1ab07c3c0359cfbc76d6ce2f13c464e42495d5f6363fc1ea1f92cdc579dffda6", "1a56ee473167a07ea5c03aff5cd60fbf3632bd3746e03e623e42cc0cbaa9d620", "29e2a52e04c21d108c8d5016699150eea476ace5a363f8d79b9d2062f7758f51"), ("2e2b6229c899ab4695c6400cae20bcfed2e51da665337fceb0c0631248ca4563", "1e478313ef5a021edfe7ec08d6e8361ce3d3ef60b14754d56c404a2b623b9e34", "0204787eb981d9454f5ff0b9e615b1668ebf783a8e819ce40d780cf064994ec9", "0714d20afdac63162a1410b9308f29760d52585fa6f2bee4a68e376fdc8833ac"), ("16f240aa5c4259c805e844d97648e8438adce41444f78fa532ad55167438e695", "1a8e61cbc6269e67c578a72d602b5f861acb304431cf87f3a9021bb4817c5b90", "100bf39fdaf81d3af85a7f35ecdb1029bf23527c35e94cbb32b25a2c7dda8c33", "2e62f8137fc61492866642cb4e16b6945853301331325f73fa11c8ee46782bc3"), ("2d4e3634bfe5479fca59dc7b46512942f6cf3ac40d19b956caa17da77fc7c1c9", "2c82a3c937251de0387ab6529c59a85db17ae0f6f1d509ac85374a583ac9293a", "2fe8c4ac6daaff2c31476552d7c370b586a34126026865666ef087153d3f2244", "250f1eb104c3ebd53584b3ddc1488c4a032ff3da130392afc715128fb9b4b094"), ("11603e5b46b15e97ca420596bd501c286147403cc12ed27bd3c1876e1a323bb8", "06b3c1c365e816294144b2bf0245763cb9cf15fb28c4f7a3f039c09d4145c25d", "08d1d4893993ce94f0efe01010f4ebd2f3d8fcd83f35e1af8b3c4e48894be68b", "14172d0350110da14c3e314a90fb0937c9a558a37ad1923435723039a15682cd"), ("16fb595f020db92f841652e7541065b20699fb9fb9cb62201cbf4dee381b52d2", "0d2af885e017485b6d3ae21fe2ecde3f2adfed1626a92d45988cfb421002dc59", "123d89a2e215b1feb8dd0182ed501ff418db7408219556c8528f1cbf9b51fb99", "16ee502e156015bf6fbeabce8eaff4c2f06c8c1a0698daaaf9eefa3472b28c2b"), ("27e575571d32a0c41805a6ccdca381f740757c185b5754acbee24eee5ad6c1a5", "0d1d574eeb0c9069823dcd4e3a7413a1a15d3c8f104fe378531bda5898cd60d2", "2a586254056028fdd06c1c7035b2281cfc8f3127e69fb7d3237b43d6cb983dd4", "03984ca72f559300d030ea75e808dc44cffce0d3d1077286422e43777e4a4e9a"), ("2927a208ae868c1f926ac01a0107f96c918aaeaf07f15a9b6d6e1db694b0b971", "06dc162ebb5171fa3b6b450d1a6d6b2fdc87e3bfa01551dd953a430dde8629f7", "26eaa8a0c71ba9c0de6c93f40456a63bba863b51796636aff76ea7031ef2fbfc", "2c2f664502996fde88405c6b684defd7f71795488ed44c6024f95e937f01f6d4"), ("125caaaf74b62f6d68c581d8b0da92c06d394c3b5807e238cf7fe3827359f6e5", "0599de9a5849343cfd8526c06612d95bcfef4b69551530bc840e80ccf67d8eae", "0642b6ded9c481bcb205ba2fff1413b4f22a6d6814327b34d6ddd6c378c7fe59", "1ad6e80465e00befd3c443b9d6f7f88d940115a5b91c7035c7e262aa9224bea6"), ("2405d9f2ff8bbb9a0c9d39e16c552187d374728881d47c6a8f42eb24d8795d01", "26c117e62ca08539e83e9f929ea6da8a420174803e39e32420d6b2901212a909", "2a5658091d56e73fffbf42a089bff9f588fcb1fab3128f0177d576b19109dfc6", "005eb9564b96136fa7de7b61f3fe073675b963458361c6ebe89a4c73cff1746c"), ("062c7c4171af66bf1221e1a45cfc435c4ea08e6be2362d08fe0064683744ccbb", "29805b4245455cf076f05f4a9fc7cebb25a555475b1111c6cab72e0bdc52fdd7", "2b6ff6c9d3f3296887dc84db9b36b91c33c8e6cf7b44441d7274ad0fc2dc0a98", "302958c20f6078b35bbb192f012c8c6104093bcd4e33e78dfc8313cf0ad2fb1b"), ("2934f065f44031d59de168552366d4c28b506e8de824793dd298868e085cfd6b", "1c0a16ee087bd6586742833df87ad7c77b4d3919fa70d5c4c8fbed30e0122866", "0d371a21cf41f2324cfafa0abf61de74d7db01249bc9cec3e509442d8ee9e752", "29e99358d005c2a936e982fefe1f2cd821c5ce8494c2e39c24df51e2478326a2"), ("20013365dae0c8660470336fa676047279b740eb79c2998630cf84100fd66d2d", "015afd7eaf267696c678173b5fad7a93775047af0b918db717d7f001c1173fba", "1848de03387446aa4df4d532f86af68de4c999d8cba793d2e2acaea002d2773a", "1105b4630f7499528cb122ed41b48cb1874caa1ea2719d9e25ebdfb945124661"), ("223a8442b66fee267e7ffe87fedf74ebad12ab4824837373378a0b2ea53525ae", "264c9fd8c8ac709ef2369dd96920c1c97c8d964fbf2fc6c4c2a258a654ee0b0c", "2877bb3893ff9ee92b70975f56acf0b5d82b052ffa56535202f8b92c570cc9dd", "201c6b170be0fe376f02a5499cc7d3129fe20ffe4a6aec95b2ef43f28659a304"), ("275e1cd8d3aa021641c2c8a304b6d0fd51cfc7376e348adb6b0a7f2dc93ebac8", "2c9369643ed30a890cb60f49fe12d81c7b058aae73e95d69aea03c4bf8363e4d", "2b18abb62f3d92d5dbd356a39f99210f8abe2863a0d8f942cfdd69713473b9ee", "16b3bf95401ef3b1c3145ea29755c9606fe8cc862642e088b834609ef24bcd07"), ("1960fa4505f5e49f83334c845590692c33e9b7985050f8134d7e3528f9b12a01", "08f559a4db4f1a2d5e598e441b8a0c9c4cb381e750f77d628fa7d87ed4fb9159", "06110dd383db8a26d33fd5af67e23579d20fd3fb6a11d1519df71854bebafa44", "0f253abbc4d2fcd19f00b8f67d8909adfd27dfc44075e91715f152123cde897f"), ("1693f7e194a7c2348dadcbfd5867e7ace7be4751a02963e7c8b990226d757251", "069399d986d61b232d1069fc9e31268f946452bea20f6aa47e99f5d7bda8b6f2", "1a77e82d02d7cab1bd5838143a764cb99f5a85f555417cf20b4116a12bc5979a", "1f5201231dfef646e6cc81c7222924387a81554a59838f0daf22cd752c8b26fd"), ("22bc349c9a3fea701d91d9d775b157ac8127f2e07569bec34a9ff1523fa17e08", "1ad1e2a3c9e1b41b882ee21f785832733fa4ebb477167e383d982c33ea29d18c", "2e29f90dc37cc5985843f1c2902b8a2e04b8c4f7229db62e0b5f44d6465a941f", "0ba7942f2125f158a80ed6a0a3bf756f630f1b08bf67a038098a22cacaf87cbe"), ("285794c3d29998862be3a68d46d481db0bc776536e9d4e7e710d6c6bf3c67832", "1e9addc56fcd4e15780c02e81f9737d20f2db66439bcc2708fe355370f471382", "24f613c7f1f0040cf02450081bb0e327df6dce6341c9335104cf35ca65d53c8e", "0bbd5c3f922e98ac52094d410060333c29709ccda2318b5a7c63806a0e3b5ceb"), ("29a476491fd3513be28780e8fdf0eaa65f8b7e1132f1ec883a844727a0f98664", "1ffe76b0523e0cb4ec7af4595d0631224039d1a10930b9e75b6bb62ef9ef3d3b", "109df5fea1d5bf79d1f550b5776cd58d60c4f4318186bc55964301fcf8b549c5", "159945dfcadb903df2cdd25a430a02790a704f17a5c0af326a27b5836d462fac"), ("245084ab907459ef147b98b2d761777edf2c9d7213bb32e10b015f74460bf644", "12dd9e7fc61e8d4ddc6efa8b6bb49156fbc37eb594119df3490cd0694f5e9de2", "02bdc15e6387a9f065345ed513a50aecf3279bb98f0c5ac1412a981d4778ccd5", "11d26d9316a56d849fe78071d84a2814927cd4efd119635a2cd9fd035c420ee7"), ("25ace85c7f445132fb4a2410fef21aebcdb7b3e93bbb06847c8ff0a335948ae3", "0165d760cb04fb6e1c1919fa8fb4ebe1ddda6e7017c62cbba3f5af5910ff9ccd", "15756aea82c060a6cf45632c97cfd22e3ebb511b939fde535c81231280c866b0", "17e7ef57b82deeffd5ab6facee4c0ba79b482a5d2069eb19d96cea4863677497"), ("2bf76ce7b7c45527bab4fed3456be22b8a71bf8743718191d725b7cc0616aa70", "08172dcf1ba4256fb97dd14099be8f6d8b055742007f4d156057b406480e75a9", "1140158f5c0a23a1697c57262cbffd4ab5b5515eee7f4042a7e6aadd32b70d69", "145855fbd3b5c37051f397d877762ef56dad7198a387cf4ce31687f2be2b88bd"), ("0026816279efa0ee04baff19cdc2ba5dfdcee227ee677fe96780ea0fac059c56", "21a87bb121b34ee9a91726a63558cdcb1ebd955b6a5a78e9405fbf46e2c8d503", "2c64f3b98ea60a2aab3706386233208f29c86b925f3daf8b44b1a8ff6d0b2feb", "283a79e7cbc201dc9efc064be4dd3e2dc7ea0ae6fcd4ad09fa864d045d2d6893"), ("0b527f40df8dfab8a2619de374777af91170a6b22dad02dac24c42ac3207569f", "2501eeea7445fc10bba19178bbd04409f4c87282f6830090a8fe54eac910e81c", "225405cbb1504ed999a29fbabeae3b93d4fba05340e6fb1aea6bb0397cca4d25", "1c4c4d414fe648f1f4b006e56220a066b5b9de071f1ccce090ee207868f246bc"), ("18d084847e5f151289a8c3111aa31ecdb020b5a5fff3da6cc2eedbad1a9cc403", "2bbc0a882834a8627eb4e66b6d597f68bd866ec44b66fa1c6940661d6a88f49d", "01cbdfbccdcde2507d9672183d4a2118270961ff86c0fe0b0a15c59fcf0f36ae", "04932eaff56d5ab3d3b796de0e978995f6f4f4acb33c23e58de412191ce880d0"), ("1c240e7722b24535368f64168877eff42758659cc7fd4d6ee928ed50ac7a4ec6", "05b2e2e4cb6bc173ce9eb5dcaf7667d1d1f409ded765c28e8b8cb0fcdc101489", "12be3a9263dfaf418f0abeeabe8b5965c7152f6fcf9c7f61e1434482e1a2aaf8", "29b07645f9967b737c6da3c90e1981c6761718de6a835c99ce12a972e70e5779"), ("19e3611d78f285c19951ef063e618c731d2ebfb525b7c3185b964440ac73302a", "08eb86bfd233c2ef551bb8f0963d5f9c2b2a8a7487a858ae5894bb86f2693305", "274a794bb6df5f60394bf4736214cefb10019b7214efa3a6e017c4cd507d9cea", "1ab3d09d190a585fd313fc9df43ad639763694b6ae94b9ace705b3299355f45e"), ("01b6677afb0d22d87fc7a6cacb720191926d6cb7cbbf003d676b5da4ab9a5303", "20d001072b3306e8dbc84d4bcb326e6a33c812b88185f26675ac6a6764536a8c", "0bb6f520d44628ef0e85532afa669e89dd854d38deb7f87d4a0fee7a136e7e92", "00686349f9825f86ea2545df5e7afe5253ee78b8950ca3a379cdd8653501cf96"), ("08a383f11678f020bb7214e468734d6d8a6691ba8ef041eb4641c200fdca1c6d", "21fc87ab27509ff5f0cd3de280ca206015a00c094dd288b3ff6529665d203df3", "0c090876a495406890bd4a0a2ed5787189741b353e54b2bd1256a077c0591ba3", "231faa6daa0110b5e9bf6b5a7759ef61b85b8d81922fc67e8e0b2fdba25cabcc"), ("02364f091682fefa4265c5f31f7f0301ac33ef5359cf8ffa1539b0ccbb8cfa35", "06507ec541e16f044a2e623de71a662faf85bf0656b57fcdc7bcd980dafa4c71", "2b08990f29c6a327efcd480d36549593b6a109722cbf455fe1bece0ca9f18d6b", "2bb69c7db2125700163282fe5a4f46af85c7d9bc9d3af9a4766208a2b25785bd"), ("145f56ac277be99a731fb93e92e1769c0b38d78660116189df23ea1443424a9f", "257ce5fed51dc64076e4d0a76de963ebb1b3ab5e831b112fa073cd0211e5d596", "197a8e5821c96bf2133591f33c886d2ffae4766ab8d6751ff135d706dacbf952", "1e6a4f5732072342a153ed3cb571e9cdd3921555cc5a9733f29c638d1e3bb55c"), ("02c26ab30c85743659e39e906950e8cac28c64a2ae0de140c57fee997884031a", "18663501d8359ca2eb2f9f1ac2be77bcbcd716c7a8d88e2c0c8898ac8d71c03b", "0d814ed9e0b37bd687ae0c15ad01d3997f02cd49331cd73b9238fe0f7e702759", "0c59f670c2c1660d599baececbe1e9db6a102cb99ee191bb62e00cede7e832fa"), ("022c131a9d1e03f883df7f16d13c2818c46d4490c44bdf9813ed2d9ebb9701e6", "1d0f72eadd6904cb768901bb8053353db91e1a6c42f04a11af4bc47cbfa0df94", "102631dffebc1c47520d67285140a662251321d9ac129dd5e1d7024e8ed7cb53", "025b2ded4133402bb3efc725f313ebe11e775682d1e300276dca9a1b9251b8db"), ("093f9e591e33ae4d0a733264f806f957c4c2cd883f2040ddd460ad71f3d610e6", "196d16929033012a8bfad1b25effc3bf80f7f01e8628c8bf311db6b791c8d451", "2ccb2c9798a7b797805ed7ebce7aad230929f013240cfe86339ea24e4b5f3a7d", "01a9354c340b46a563007cdbedcd7d18fbc0703ac3f78dacfb9c657273fa1782"), ("1bff7b2aff3fa03ea5cc6f63e3cc0ea678eaad3d4d8786a5cd75ac151c4a87ca", "2a830d53c0e2903caf6128e618c3d6c7f1bb421500d5580ea1ca900b34899c28", "18339cb4902d822b08bbb562fdb81a1a243672895bd312bb154865a7035cd824", "2da6dafdcdade059f1d8c0c7f07dae420a73bd29921703b0879ce78f09e5dfd4"), ("2977c74dcad41cdc761e05a06dbf889291b42e08e146b37458e99c20e9bff514", "0167385d21f8f0c6fb3dfd024482dc6ec123f2f89b3adbc715afd6d4b29ef66f", "1ea5adc4550d5805f0c0277f8b930c3c902be9d9d3129b5fc0eb510fedd9f552", "0a20405975b78e52fdbf847d0234f2ace50b8f841d9f7f6e8c20e241aecd0e91"), ("039a74bec84304be4071f978147d1ddbfd55ce4ca30008aff8c76803fd31a461", "2f5a3e50eaad40cef208d25b5cf11ce920bb4b9633cff560e93e6351299959a8", "0da90550807290cfa1e16d2c31292c9de8effa99ca2a992926f2ce40dee89121", "2a4ae8c02734f03c307cec5a51d7ef52b73b0c8d3fe915b940b4a8464aa1526b"), ("108d94152fe3cc12c610e7c137c9af2d3f0dcce67db433185ee2515e64a8360a", "2e75a1c65f913d7cfcdde876ae9e4745d8bf06b26e181b9616f99ee95c8f5165", "1a88ad2499cbcf04f3645303f49ec822312620cfd1a47b55e4ce2a185ab19295", "1b599f2751459b5b807fa5e34e8d557e46cad9ede0b4d4a03fa142612b19ddce"), ("0e2070d90f6bd9f23168b9c20c9cd4734ae0efc530d931cd04ef62ee7e5da921", "1cdb0b4315a73de0dc9ab58a255a61fc35537b1f3b5ce552be3c4f338f3c9593", "0bc423443ada65378563f699b2e71da2f6cc704124d5ee738262800fd828ec01", "1dd6c1055285595196729700b477d4b378f73f469c6f8979a2c4f2c4776ee57b"), ("0e61b869475f255604901f93a69f492e66c2effaa429bcaa012be5313716a15d", "140ba0d5bd43766eea408ba2c11805c4b4f451e95a3efab72aa89490df658031", "0ad5ed5329f291b91327022338f79e8b4af204515759a05cd705a3f6b58fc8c1", "0236e6302af5da67c60f74b8982833e203ab6e9414479cd5afa9e6fb28ae5926"), ("1c1a0682591c3be3d03c47bc3ea13e4ef975b1edc589af4287bf63d83f76a94a", "2e9fd0e92ed48e8849e0e4b3b4eda64f8d76dd2e4615546638b6def3c13fca10", "2d4815f6d3b13b6dc49d1c4ea71ff64ab4fb49a6d999e7a49047f66fab410168", "292b8ff9ef8df89bc41c02dab5692c10e2be74e04674dbebe5ccc72d09a26847"), ("1d19f23e309e8ee36f3f90c73b8db7697f343a5e38a1af4ce4d2b2a1e3330dce", "0871da6e9da857795ca30b88ec6802a4854d793ca6155137fbc72050fc2ef341", "03acf5c14bd26ae38602bb6d4fab47426160e5205e45db86503c9f6237abc6b8", "1ad88b85a756129b6e16dcf30c7cd3a4413de2f086d1a0bccb7de00cdd444e8f"), ("05e1626a512bc5effc9289df42406e8dfe7e5e8adf3f687894e06cd1a69ec5cb", "09edf98270c1587efe9583204d460c30d1b2cb954558f33e765d5b9250b562ad", "1da6ff173b4492c147a16e13b68560c6375a428735d144eb9616498ec31022f7", "0f3f14e09e5802316fa405e605de2a2240a2c5a94da8f70125456ec4666a9ec9"), ("0d48e5ed91933bc6a163de86df625346d047bc87b2bd70b743eb1bdbb2ad0a51", "28b11c52a5ed3098142d31c603fcf40e67dfe56e6e04b4ef15b26f950c0ba1eb", "2520b1d8ab3b576cef726ea9b362b82cacfeba268e6e8f174ccc53c340e9485f", "0ca71349c59584cc813d9fba7f68236782fc9c7fdc928c895801b4fa9d42998a"), ("2b47228a0fe7dcd09a71b1ff5c21b87acaac814368210ec0e92effb3457f1380", "2da596c77cbc604aa76d1ad67dfa99595e780244a5ced4343aac4c7070003d18", "10800923773e6446f86de1089b87d28e4c551552b45a46ad91cb4787720ecf14", "16fd4d783deb865edba6c0856e73296fb644a61f656ce8b8d83fff6309694333"), ("024f2ac0fd9effaa943670211ece3f0fbee3f63ef26dd098c24773a145ba11b9", "09236be8daf3e94473d8cd08dc2f919acb76fe7df4fa553d82a9ce5d533e4162", "06b0eeeb9f4b8da59c2c0ee8816f2a19c82cd1ef8c8a9561990b6bc152bbdb51", "07caa59d8808cabf79d072ef067506a936f389cfbd7c7a7ffb024a216c270508"), ("160c63e5f139068fb8585f93c8bd47e0d3a1b183c88d6df8b6b6d52e7595aa71", "1e634493603c54a4210832b6b342e0ac77e3e98a45ac955cc73cac1db99e2c30", "0c50945d511ed323814f3bb1d343ccd36c267365ca08bcbb9f8e7bd4ce5a1c87", "0c96b9dd679f000dbd862321032fd1b3663230a3a6a626dcdf4192b9cce1efc5"), ("07c565865c2cd92b8110b604caf34ce71d237b020b5e2301a91ac73e57f470b6", "13f2f17651b4fcda8fdc027a7032a50e757fc904b402b181b91093c25f136635", "0e9d072da483ad527c4674ca0cc1b5dcd9a508bf305cb6a3ce8577311e6e64c1", "23bdbc5f5a3a57496f01cbe525d1b78b33d4b86106d05c6ed31639a91064fbae"), ("015c70d74688e9e19bf33585ad19a0ff90725828ffd25f8617098c026256b03b", "2aa96b22307d953193e58696d359b34530eac2eeb001112e4700c80a145e9375", "141fe62de0affc7db6ae5e8eea27338c937bc3a2790f92619fa0988ca0e072a2", "02c7d95972125d5b82e2bd7546b08befcb7f2a3e3e389c7e60796a148d0f73b0"), ("214cfbb4519db89fab8b71744a1fd6d67c6bdfe51f226ee3661e358434d5a8f6", "286476658424457bf5fa0d88aab51afbecb9713d6be8c72dae3e5e3b424da869", "1c93aac4b5b0018b40154094a7fb404d568f22b41fe170e1a2187d7587a18d1f", "227a9707b5a092e7b192490bc92ec43262a198186b812d3399717f1ec6d546cf"), ("166414eb3fd3a68fdb7be83a5b63e01ca999dcf3f16b5c3171902b7396a2c9b6", "062b3fd5317297435bccda6cadfb5227dbd5cd0471b41b429cea1979262431c1", "0b21e581ae625e1061c29ac4b8304ba5150c64b8dd8080981c08610f485c57fb", "0ed284a2baf1583e278e2a399d2de138c5473efa6562ea32b87e6d46e8afb1f9"), ("16587e74a16db4e6d4370aef441e13a0de08eadab8a43ec36f7a9b1640720936", "11604c9de0c59a64ba03586135466402b220913863341adec02c576893e8cdcd", "04439e20a75ecccd501cb288038efa38c5db12501bb987e020ea5f12a2b9f37e", "084c703c3854eea5ae66afbfe9f9573e53b3b9bad4f06eb9a95b73dbf86620dc"), ("299512dd46605f280d580c9fa60cf012b096823eaf4838c81962f5e85edfcae8", "1a81517ad075345e8cd62639992b3ef59da015d500462cef29b3e559d3f3019f", "106c515b3a60f3781847630e58a035e7439e7ad3f7ad12338eb3db502b779966", "2bda77e3b74d14335acec0fef945cd434569111e9fb9cf0605b5076897657602"), ("0ba002fc3764546445dcf61c1f69640b4dbf7432aa31aeaeb9b936ea1e7c553e", "14690dbb51a4c7a4a540ce25ccfbcb4d15084c910a1b291f6da0ce552fcf9a22", "1e88b774e94f42f896882e2aaffc95e8ccdef338949c116d3fa41da11e972bc3", "14683ee193b9c017123c7a9b845f0502af877e70333dcb529d55660dd7277308"), ("0a430d315a43109b0124347563d739c79d3d0052fea33f413a0bb7fb7e518e88", "29b1c44ae44230a0848bff0d5f0bb8cd4c1a2c5f05c98ee702dcc4d28399011e", "01390d022986c537b4dd1d5e094c2b4c2dd8098937f6869efcd239266c696f45", "09612908e0bf42b589d871a6b2e5ed80bd6f6d89f7d1368a92e189316e80ed6b"), ("1447eee95cc09c33b6f9fd0d3428849d728c2f53d20d2f4f8d2b706667e691dc", "0d78b5e1940769cfdd675cd0f2095c0dae34ad6eac54a943a1c418d8cd75c862", "19b6b4e293e807b9945ea8a03344873a84435179d01e0f366e8a85b2365d7a5c", "0b7ae756c661e85948bd09f3b9f5584de5868699def219a9f7e8bb542747ae07"), ("14345c1da6b956b7867fe001cc62f11704e11c58471adfb384c080dce2f4ef20", "0aa7a37e03324d64c6a350724d8fffc261457d28abfc78d697eac8fb1cec9fe9", "213062c9a9dbbb46d02fd968ea8930411d0ee9881c65333c02aadabd56c4159b", "2380a041b29580693111497c9ba504c21e4d4c6bf41ba3ca3e86652b3d5d2916"), ("24a0ca4f6046a2f5211d3579bf1160470d14e6af42672ce1376301e9beeb9d97", "0bcb6d4204a20f9a79cc27f7a268e33f38900e8c5f7078090208f5a726a2f505", "07db9b2357b59672676f5b914d3422832d33985a56160b2313970fdbf04fd529", "1e43471335ba522d770c9e31173865632061aa906653b10a39d847c627fa8fc4"), ("1ca38f3c566542a81b12033dcbdc217c370b4627e7038bc7988051885fb67192", "15de640dd869bd30911c8956476c51282090571fd0359a759483592c00858b6f", "2aa4270fbd033893607e2f2dbdcd368a2eb9cef093103b7bdf39590285b6fad2", "12ccf7def3ab39b57630eff6406f35b88e9b275662b8701b234fab71eef54e55"), ("0200ad6a61567fea12591dab96c0d93c8b507b5fe74bb5de61af3408d4aea272", "1b111d3f0fd55f79a65316adcc34eafd49ab68aa48383ec9f756379ff5f6ea6a", "2c152413c4b240d2b7ccbd0cca656d3b4463f6b70a0a884bba053bd2114442d7", "016a4eff9c1fb082534c416ef02aa3ef75d6d3234b8c4bda6fd36b6bd6d72154"), ("186c9e925395bea0e5b69090c75dba47d11d86e91da95c48898b27a863086f52", "1d7d6afb4bac5638f8d761bd61f6eb47bd87bb2bfc754f22b177b78e48c8f0a0", "2a86c9aee70b40249d9ee4ba75289ef7d70e179a53b648f8c4104e9b78d3287a", "21966e85c482711de932429ce4a39e7319211dae9cce66de9d8d61dba0e086e6"), ("148a9cd8223809663175f0aa6fbd49eb0f9c308607835a4d66d603d0b969e2c7", "21bd4c82597903c438a2874a431ce115fbe5d206f3cfce33182a6f6fc3d6e1aa", "21291f02b29476dcee0e60ffc76a69a49035ab52c5d490c9bf0913c8acf6cbd8", "0624563310c475d423b4ff99b1f2e0690132e16c334ffff6636c7188340b4808"), ("0394223f62a4a42db017ac7bfc4c7200c2ab04aecae846553fe9f16eb879d2fc", "2c381855593ff4efc17d99c8ef8b40a5f649c40980921d6731e8ee425c9a9c9b", "10a5b34722918fcc95775bc27362e119519886f23b307d48ce63527b75a8dba7", "26ee0a6fdc75884b30f1567886774bc32c3d1e0ba3bac37873a8d6e2bd4ec7a9"), ("28a92b4e3d487365ee2b7b9d22710d3ac1c0f5e4974d67b440573a22380e2a51", "2ce5d4bac80deb57d0f9f23361e880196cc394cf3f79634c1f18dc327da14641", "10760c15c012a1e98e1afad18a4f61c06e6df7ad66dc8ec7c126d6f6e3cc58fc", "0b2520c223dc24b4f7d18c934c6c2fd72569bc76c8b839a61114e6244905c543"), ("083fa23e7120a86b75ccf604f8c26fb843e4691366fde95eb08c9308a3f95124", "2e56721f8ab598318a2d430e5dc1b3808c191c8c7302eacda8571875704ff7cd", "22da57bc8721bbb5dc779ac4e4484b30a85ddcb63da5657622e358aa3649811b", "15339c8c32510a225f18faf93344921a52c0347123376b0528764135994c0032"), ("15eefca351180b8c4b9537a714463f9e36a7d8659e7913ddbc3fb25a96fd5f43", "09595205cbf4a7313d997aa156b4052c566359e84ade6e7493ddb3024cd95780", "1ef73ee9e8fab99253652cebd1dbb971ec9cd1e65704ebd523efca21b14a80cf", "045fa00986a055b9a5397a5b93754e3d468eb699e046465741b9e520732e4374"), ("0eb557bccf2267bafb5713614dae91d0525d36f499a93dce805f939f8bc1379a", "0f56bae3c785b7786f6bacfa14ea502971ca0db0a711ece4b57d90e1ae892b55", "010cc2e682374308d55f14d029f339a2912e691e733122e2b97bbeca8dfefbfd", "10552222fd12e2234120510bb9b9c44d723451807e61839083a6cebdd7e5557f"), ("2c7bbbd3f97cc59d44c81d75d1e9419bea43389acf642674ac2fdeac7909ab87", "24e0fa0affe2670f051fc67c1bd9238838d26d326e972ff46ccfef95ebf252b3", "2e2b4a5e9e33e5f2657bf14574f5c8a17d53c6c3975215c3b83a3d7c051d23c3", "141b50a7b75604e8433d79e6b6b521ca2a9dfa8517173134386feb417c0a5a2c"), ("0cff90ef26fc5f11ea025c030dba5267e46eee553655efe2fe00b4a0006932a8", "1441209a65f6bc950de5bdf5b652ac9e05169d2c83455e175c50d4c3cb1df577", "0ea04541133ee2b4b5c926c874029a196b65e027d8598bff74c5bbe8ece84818", "0a79efdf5341e2293787010312866586856ba8de0f933da369464c98f7f0cc72"), ("0e5a241a5f4f3b458799651c3fe7fd8b091665352e231ad9ae24a55bda74ebf8", "1cab9e98aae8ae8b511729c7a4a6ebcc330648cc8cd3508f044d72536407a0d3", "04c4b38a0f59eb0bfa3c8837cd8f53b769f17370f224283a06151e6e4c0d8fd9", "17ce766913da19fb4cf239fca4cafeac0e2fc03d89a22cd47b9565197a4cb350"), ("1554124ec1ea5213e3d86e872f895378015e96b2f13ec42edc9d0052a84655ed", "0a5a2bcebd7b00b4d7c3fbe3ca030601ac45a967fef3627df116f20dee702bb4", "130d8dac5b0ff57f0555c7dfcb76de4473c5d3c4e13afd5401949a4c9817098b", "089466b84e6c92b713ff245bceb14ec8fe5590fb209f864f69f5d04dad861062"), ("158c9ef71cee5f74c9107e9eb92aaf8a0f368f33f6206695c081b5c735242e58", "1c3b08dd2675691812a2fdc18783f607ef09b254d4db8f32f08ac717b6d4548b", "123a3363685020032dfe6f90be67c1bf7b56de0e28d1639726bd5091b03391e4", "218c7a54b240f476b9f9a4e5adf4f7726a0f062456107f315d48e1ed4ff3d876"), ("03a6348535e7b6a3c11e169366bdbd2954949e33783780a748e7b229ffc7d8ff", "2c613f064f3668b33ecefaca3a8bd2978ffdc31bf43fbb96352576b50023a7e1", "2657fadf0e4df93aaebbc27befa7362a6adcc4d28c7c4fe650f1557ba8090d1d", "1d15ec350eea71954f8b4c7e13552306935050d47d2ec3d05fa1b91dcd39da72"), ("0a9cece6a37f5fdc037ce3c8df421fce05d3e201e14e73d12ceea63f87da69a3", "051a124da50fa2d4dff05e63969d27bc32a3c80c1ccd36dd8a6fc44b2135f2d4", "14ccd391d8c4a9cebec6a98f610e4cc2286761557a5d1fa66b72e7d80919447e", "23d7cfcf49b3bf59bda44a9e4bc3ad4b38e2af8f19ced6fe570fd6ec99e8fb3f"), ("2b3beb2a84d0c4c815a970ab6db9469fb5fa3517387ed8c2b62ee080522b1628", "159abd8176c3944a6e11fa72556b16236731dc909876d5bffee46d465a6310f0", "3014d75dd8223064399282df31db250c01d38c54a1ff94e9fe272e38510bb072", "0f1a468542a2d14f4a98015e6cea8fc6bb16bfe8aa0d1f28f3c1b93a711fa2d8"), ("261776b3f7de80851cf3b1e7da4e2a01164d5a9eceef0344f388276b4bab6076", "0973e8bc82a8dcdff20cb4dd623a8d8c34c575c9bc1f0844d03b4f801587f730", "096c564ff7587b9f48da42dd9614c036f2b2fb5bd9e8e5573f368501e17a8c21", "21870a8505b4814519319117febcdb6f2de3a0553ea4d33228a42a714bcf7e25"), ("0cf968776d99d4a8dfd581e43c81c9c28ebddc0aeaaa8bdebf0cb0bba1076a9f", "008e95de1d360694f744b80b2e7277dbe8ef9ebcf7bdf30828e9a05715504fab", "04bb5a5a1374d19c913e0fd6fea1015188e73431dd931430aa81dd38a3798741", "289d844485ab53660c60b5eb463bbae496123718a88d9477ff6664bb4da4205c"), ("0208c871b96a63749d21bdf37d09c8ec3654d9ee91857a4c131b7e12fec5f06d", "22099f01375d48f4f4576f61209fe8a91c47141eabd961735b35dcc54a340cea", "092ce9a2103ab82a533f1b47528ed3d540f41ad6e8fe81f8b98e0aefff4f11a7", "2ec95a45c36ab5a640c1be30cf65416338b351da3e327613d7307f4d88a70662"), ("05cf7efcaad60b4eab07e135100301ebaa8e96dbaf5f624634979c537507093b", "19b35b416a6ee9de019f066142d699bc6452013bc3863cc4821228fb87f958d8", "221b6fdc0c4a3efd3926ff35b2d275c6961a0d6c04a24b23293d8dc81c07b03d", "29495200050dcab131e32766f8c78c5a6e71a40be991001885f29efd7ecfc68d"), ("2a9941094e9caf2a399e77f8555386ad5baa360876a25224c169bdfba204d3fd", "2b5b95908824613154a63d0c5dd53835bd870613dd8856d71ae27045f5fe78ad", "2a92482bb580aabe1421f93193c7688185b9c590a7659df3a77164bed1d1ee42", "1bb3cd4e832573bde1a345b3bdc92b619f5e78ba41e087040b476afca980f421"), ("12c227aa6d93b09db6257f63d16b302af1fca83da347df9ee7570c6f9ed1f424", "1e9e481210e31f4458f57d87e51e6732b24253e43788861419e1d12d67fff1f3", "1da4a8e0da1c4f55ca94b93a7f468ce14d4d581d593c5ad01654d3d1eecf523a", "10b9af9272fdf5035d15ba4d9b1649d23a56eb9ca4060b40977876547bc8f1af"), ("2937f0e18542bf735946707f23f18f5739f4a66836592cdb8bdfeae9f5136f66", "1684d1fcae58c4fa23c1cde19f27320d25b483bea3d27f4d4cf9cedadc7f7cc9", "1af293ca6112797ffd68410c8453099c7360e520aed30f51462295a05443cff3", "2732cfddf183afafe57d044d9f1240391e50d2ec61664fcab35517acb304b434"), ("10d8c03270179d30a337e4abf62894ad25ec22f81f08fd4fc8a440d7c6c00aed", "10af4f5756d92a300fe1252f941fd3cbfe710e30d6609ef2cdd993f62d4d62f9", "2c338936c435d6bb34d9a91f3b82067120b8ed8f69289b7df15c925b6d2bf0c3", "092d78c45e4414ebeb0a0e52d0b51529f9e2bbd36bb8b50e474c80c10c3136ae"), ("25d79a3cdd351313dc5b593b91c8a6c322605b576a827ca45fc948fbbfd15162", "0113b630b7d1881ffdb2cbd7393f88def44403b53160cee9ed7570157d31f92d", "1cca41146ba38c9d6154899871601123bfaf5b68b52949d00d1786ff2d7ff3d5", "0577fe0335b771b4c919b255487235a6f0214a4ced90d656b42df7d513f70f97"), ("132f6c22a3d56f722a2a4ca9c5c82d8c9f8662119887fede7e62894fcfd12475", "12e61243b9d7ab6c6bf44f724153e5b9d6035bc2f86d0f21af68a5b75ba4b765", "2cb746e6122d82ec934d2a8d203722d11b3d255cb9549a43ec9c1eb2c89f284a", "2013d83bbf569fa485c325d97a55dc263f58e6c50948e8851def85b77b085772"), ("27fb6a19e7ed339e306591c0531ebe5c1ad98c8e9196140abb469a03234f0601", "2c6577410dc948fa55e85785091f247b7fc3e647603d21feb5fb23767620e970", "131a1ef40aff5d5c19e6b71103240d6603f6cf8e5c106881aa798cb2eb4d4401", "25ff8b07e67bd984c57af0e55611c44e283ecf8b89c5c93f49d0e769df781124"), ("038da07023f39c4234b02d72757866498df9b19206e54ea167aff8b2a7f3bbd2", "156323c99ecc101267f82242a1f4367b455f3d568d7a467496773a4aaefbb738", "134a0a89f0e295e2cba6da255e75645a209618f5461166f2d176df5ca73840bc", "2f4eb4ccb7a21e0659ff885de5b48a2be82246614f9d13d18b7c37e9f3004456"), ("233abe981df3f8529a0fc8d3a201259f2ba58bf011a83b85f3972e549075a30f", "0da85686786bc424483a18b9f49a34163e88d7462ca94265be8c867fba731f06", "00cfc95089129d58a9c711085b2c66a084b1126b7a14fc57dac93da231e130d0", "00db8282e8d1e1f75d7baf6de1fd35c8c22072696b485eb530009a001e0488d8"), ("24686e6a6c944573a62f4acf0a820152b9a9297f986130e9078d2b2b15df701a", "287661ff918418f9104bc2eb22ec6ae79de6da0854238a73727239f495381df7", "089af1b010200d152281ff599385a8d53c2ddcfec741451c3a1a9ea774ece1ad", "02b2517e1d655ad3a5d5a9f3dec2ccf530ba86e735292e875a643043a9f085fe"), ("0f955096a5f97898994a8bc34c220cd472a5cfa7ce24d88d8dc5c87452811059", "115565fe5906f2fe27b34dbb2c55e2ae32ffd4bc251d39b6d2b6b69fdc92a8c5", "1dcb7567f3ff951cee39f5661d60de6c47525a70ef3037b84382cc3d63f2c4ec", "02fd8b3da7ad4105b23c24f2853c7b4104088f02330967bc064ddc456a2f3073"), ("0bbbe8369562486002eb4905747617dc988f4c9ef513886bad37e35fb39a3f2c", "1577560a61a26f90b0066b9970d5637c68aa68e1b5f568d564bb862495b1e2fe", "063c652b3764b361527da15ae03cccad78ea880dbff9c800d8009f92b83ab771", "15443fb2d4c2b64acbe6cd10306b62cb97e10323ee6721afe24a15bb2fb0b78f"), ("2ab351e32e3e730a248846dc01c320a78b46e507b2d782518383e60d9756f5bf", "2ecc9ebc6eee4600981b876672d23410d7960409c2bf5e70f78e28b836e6a34c", "13b4edf67b6a4ce0f97930921256f9fb84f70b5993854b6a441873f001682499", "11daabef060b1d14f69ecaf4f1d7a7daafba4fdd39fc54ecbaddb86080c60810"), ("11bfbf39ac8e2efce3de154e98a9a7a98c880eb17c62f51e3ca4158f0568df63", "163ab6d64fe463cba1df5fcc227a7ba1a74f95534cce6b91d6dcfa4cb1da321c", "2f9a6bb7c931cb9bae052e12f6abec0289ff4052d4f86f44177e02eeb9ce34f7", "06593ae0dd2326b7189adbf56eeb4efa68746377adf0a3302aeb9edec35c271c"), ("0b4c082a5721a639210b050f18a2bd8d6cbec80e10f1a189e484d08ebda135c1", "1a6e7dc43c39373a67ef146bf72f6196345acf682f9d656354866bd0dd8c7635", "1b56037056607aeed5dd24ce249ad1f4ce48fd4edebb6f7c1b6544984c22d103", "0a75ac47a27716fe3738f1786bb4e220971cc24273a2bde08994d1ca5e79222e"), ("020a5101c0a53dd68c5cb4281895b66e30f3ad20c869d6ac8584aace0df4398b", "0137707c1c0d2e0b546f2520516d383943024da102f1e9c17625fbf5dd650c0e", "2685ed2206b3370e40b0e0a5a4ddc9b5ba95a879fd3f7ba9787a243878e33be4", "2a60a9b65c6a4dda54fd1cb64cc5a73276a129ee400b258e8402f437ce1245ca"), ("249e7b2e6e52a519906e35c3132e852767558973dce9d3b0b9424f0a43457b48", "2ab4f2cbd9aa94de632b717db190ebddddba9e80aa02049cb933d6e0c0f56e69", "0c3df3430872bc277f06e45331736658723288e8285e889ca0c23584d7b9d764", "2644de51eb78fb3dca11e84d23c4d5ee803bdae273840e90137ea3c823de4850"), ("20153417256b4402d38d9df5836258fc4b67cb23e12fabf7db9857b6013bea3c", "207282df09b63cea957a10fed00b7f3ad62527eb007138c25b959199a8168d90", "08c8ef9cb42e28936fb0e1b3813a0bf6ceecc48c27041475f3da782ae0073792", "1bc5f5e6661668e20252471a3db64e579b0e709521cc36ae83b0ea7763fde228"), ("108daaee805d2dc7ab8f7b057fd900bacb0793485dccf9ba2f8e4268ac47b01f", "20162360d0baa10d1a4225cf2f97f55d194f763c9f85af3f9644949b63b41c80", "13e4db2227bb6bd9d90be4f96f8e91ac909aa5512ad2b23a45488babf04fc039", "22117210565f33b6d5e51d499cbb2fabef68d59efff279ac9ac33607b08bb6b3"), ("07c55b70c19b98d6724d8e922bd25a051ad2ef9d43603643eceb45bcfdb14d4a", "0a36896f0f12cbb073b42781a0ff18c39f0c736530d88c033e00bcd119b1d074", "2e1adaa317b99034098bdc0063d71c19e93c78e9c38c36d0fa63c3dc68f6e584", "19b0b97b1f1b6bc8280401938fbcac41655bae58227479b17943390c50144deb"), ("0164c10e277511781dd82cdc2368b4e383f6236208c5a60feef74c393fa7ad72", "2619da13cb1b92878e932ba222fbdde5271854ad2bf2b0ff7f23f62073cad4cf", "20074a32d82a26655feea13fbf986bc217281ce9fee392d60692e059b5bc4f56", "05c9babb213bab78b401933c0d4d760bdf7750c090ce7f5d870d1e6d1a7d764c"), ("01c741d135564126fdc863ec6dc5843512bd74ddab6c0a7d10a721d5cfc5153f", "083a6a8ec9ee5c683fc92d363a358de65648f0db9738499738319dab1c9aee81", "26d34d6ca5123b58bdd9b075cb1d721a589f08e8df091596a13504c9f91e79d6", "2b9b13533727600e4243dba3abb53e9763c36571c8bd562f6548e24c6a5350dc"), ("0852dd8efa9485a89471b79e55fc73c0b9e0dd113b41497d46d21a6de1120de4", "1ac1c7e84f9528b048a89b6897a7146d1e2428fd944e4268222b7a0ee4a0428b", "2583ac294e35c82425da91a3f4607efc90cbb9d37a64aa39d94ac5d0bddbb2f6", "14fa75d6079dc46bfe687a6a818061d04ae274d66c38b1d9d7859327e8b5ce31"), ("24f4744de8b9f5c2bb929c239ae27003d30c8e2a676ff69503791e398e86a67f", "11fb02192536eb9e15a108d5abc63c67366bdbc1d1039409b2dbfb1592cef213", "24a9efb21d2cb237764658b7d2a4528726f3e0843dcc5b5b4a3035dfdd1645f7", "0fbd5b494f930fb864952a2fd010a665cdc4db199113549e9d65201200f0b6ab"), ("27454f4df63e43cbc637bf0b30b8dfd47768d36eca0174080433be1b784933b1", "2a3de371d6619c537b901682f48cb0544a0f18d72372607859ddf9bff026a66a", "231afc10f0700efaf8f19b18f9d30300601ebfbae0a340c47ecb471565e824b9", "2f45cba9991c864abd5923f0c45a33d585a20191355dd8c2243dc657191d1e86"), ("17b13a4d2038cd4fe3bd6e15d554532e34f2ec6a5c6713f124377e5c1313667d", "03e172e268981b68573a344cc70af047712288c5e53c5d4dc4bea851f56c3e3e", "121078826e429be0761fd90635c6107f0e98fd08fa08a539d19addfef225e80c", "16ef29566d06fc0fbe734f0237dea3c2f4594e26b85fe5f73a516cf6390ea331"), ("1a0402728f7dd7cb42c09ebb54504ef1ced4e7848e37775e7c874e9b284de569", "18b62105adc3fdab4b4351242b16c74327e53d002cf302427d8c4708121b85c4", "101d87df63cc9f4adc0ba0974cdc6a14eba8588795527064c73bac05c081df0c", "283efbf3b9b092702fbfbb812baf7e59c0b9c08632480136100ae71920ce4d7f"), ("02f2ba95eda900fa68cb81b4d4b44072ebeb16b17eefa695f56f500c97b23394", "15c4538a4a0c2c06f93ea62e4126c7c736e700d92892290c1a5e0b83d2d8bbb3", "1ea0fa2d5d9c76f74445841cfd33fc043fe09b557154a10ae84475f57e466beb", "09aaf926653dfccd18cfde3681770309fee4a45f03f12e5f59cdd203f146fabb"), ("1660aac27eafd2e645d70e329f4a8deb9a61bb3492afeabe39c1b7147f8a6cb5", "264ac3820578637a5186c8c3fd5fdaab129a488a6ea53c0ec025c45973a97d5d", "2d667e489ee22a86fb10e3a2a7781ae15db780f949632235e9463c2f919a364b", "2d918775303d07abdcc80c67b263e76d604aee540c72e5d53f0d331ec1370182"), ("2bd26d2edf705c123a11a59e23bece73e3e46315ef563a32081142d9b4bdb596", "15123f840412f078e8903c2cf1f38e7354dc2ae708e4c7604b788c6cac5cd373", "009566ff4f51ca7a5a21ac44c400c3e287463d0ac1aee126f6d1eb73337ad56c", "06f2fc8bef084c5d98237bf162bc5cdf93412b2a0c92dd124659aab2cf533c45"), ("1a05d3f74e0ffbc92877838ec78ead957d96fe8a1d5ba6eb2daa8311a51943d2", "12b9d9100de5c4565ee76fc130fe0c7e8610128bd1ca02a237018cccc01915b3", "1e7ef0d7e9ee0140ca4ee4304b68e30a4be1c4913a367c3cae4f073afd8f6acc", "01795e4061d820fddf630eb329116d3a1cf2409e0f1f55c93b165d7576153758"), ("1ed7a448de15b88588c2489709d4b61d4e784cdbe14796e922ddf6c3ff8336f1", "199b6abd41b75e23c365f94350583c6e9da846ede6037f592d601f48d534145b", "206513ad1af8c935a09acd553cbf6dc972c8567d34c64c66cb3ffa3497dd3da3", "05d12840c877cbef9c071b16662e0847e3a4ff1d54f15652e6373033054f2ba3"), ("0cc271f38f97e3c7360b7202e6cce605e3f32b976217fa40fc5067b67373ddc9", "3023383d6dc1fd1826cea36b65b759c160705dac039f86f7e7bbe04e1b98c7ad", "12da46f2f22c9dc79a4bda7561e73cf743b8689ad4cf21ee5e889ccb1db81958", "14c24d8f8e115ca05ecf15385e4dac8224e928b05216a7a917c901fe8345db1c"), ("0ca0b4ca34e7450918201104ca96b275f73e0b7f6bf70b8fbbfcfeb333530293", "0f1972ba873f50d9be6bdb634024ea107beef3b4fd589d1d2af023de76211804", "0b0ea774c220a7f7ee5594360cfeca78c2492eea2637dff7215dd055e146cc30", "02e312c170033db08a531f68ef44fb7993c47e2737d6ec3b8d366f7fc0c57b8f"), ("1f37c21ab778a54f169a0be17730fb33bbbfe2416d6fcc2b5dd9427dbe97cfc9", "07e30a52ed87bd5abc94804d8918085cf6aea37484a694ecada6caf9797a9438", "06b2fddba1ff939216928aa31b3d34a75a97cf3b3710b1f275f4b3f0445545ac", "01ccfa90cbcc6ce14275c4afed12e5be54188ec63522e10a99435ff6b6cb118c"), ("2ae3ebad0f51889ce03a80939c84eab93ee0cef972f4210fdf2965ba22702ffd", "0ae65d52f542cd9b6be45b9de2dbba5d5d56cca9c79ec6edec14526e295b332c", "1ce34171791ed7d46a0db975dbcd5fbae2f07e0b8d0b9d2e6ec1ea09b916fe14", "15a2886f7ccaf500c9349e580add5ae20edc85e4664f3a37873c8c1db61fde55"), ("0d385cebd334268662030ba614967cd309c7b808c532ce1ffffd525b746970c8", "1d368d21b7e04afafe9c0bac1a62a7015e7f7a1f0dceadc6f5013b65335b28ce", "08ce7b0b8b04370560ff43efe87f3ad11c382a6f36afc293549f88fe7eb9d5e5", "2e283a4a31bf3fb2001deb5da7cb6eb951d1c4beb189f189761b5eead4d82758"), ("02a1cd5b8196391c59fe3f4ae95e2076adcc392b199ce76b041b58287c2a376c", "13b451d74542195573b1d535d6c1d7719ffc30a2f82cbc37330f2fe850d95928", "30183e47797968039040cb2951003cf39e0da99eea85cf446e023057cb8691a3", "0b6319ef8176bcb182601d57a5725571164c800a0610dec02d2bbcaed72be16b"), ("2b14b2edd6228889a2147c7639f12581ff5c178979ffe478c1d7d3575a018d46", "140b84b6f844e688ababafd873dd0dae5ca993ba2fbcb1a4319d2673c84a08bd", "0848b6a998298fe27e967e06ec87d548f77c945214b50f5fe4c443ab10ea6fcb", "2ee3ef47d88d13b05801ce1548e9960f30b983fe1d9fb9e8b9fd7842916d32c8"), ("28dbfa1b7bb1db4557b988136350696a92dfdaa27359441d81db3f00852cdb23", "1ecb43d3990758e692664e9f176b513e4ba5e012b250461cebf6c7932a70ff70", "2aedeb720f4a7523712d89503995b1b94271bcc9f63848fb58d2d51ee40c4f5a", "1fd560eaf42907c00ad2628ca2b6a73cf47b9e12292551b1c7fc94e082be49d1"), ("01c1ab4b44a038e0499d30fc6fa022ca137e0f44b45dfa98f3c214f1b680bc46", "1da768323d91ac7273246db058989ccdf3f6ea2e5c4ee8326b2028b9a6f86904", "2feedeaf6202c368fd0a0e6a2698281f24edd5b0eec781988d946773e39ec10b", "1cb782ebfc8871df94ba362b2dbfffa694b510f7c2dab126c7b5c06410525d8b"), ("0cc478353a9f0f9de299e9e8a1068a3811ade948214962678dd35cf2d03bfd63", "012be8432552080f2ae3caaec52b5af3b1c2897d81946533f8b060bc032f8a74", "26be4a72c9ae098947c8d9f142c47f545305bbaa05bdb77434e05aeeb27d861c", "0f281e6bcd28ce5b78c358f173ddd6e8d7855fedc33d318659ad2f31e4aa1018"), ("00d28b8cbe991e498d77e03f560ad803558d7b82079efaeea23623f2c1394ad6", "1439519163da8854383d1259ad4e8ee12ab4820130c00c6cf61b7f9d42d426da", "080074e664dfb33951bb7560d8c9db92de18ddb15733280dbaeac0a8375f4c25", "0713502f8146b6def52c63fc3196236cc6eebf317c46c6c25889dc86c1384764"), ("06cfacff795a2c3f96757c038319572df7eacb0ee5917ef586df9a98399febbd", "02ab0b2662626e85e852343ab8d5bd89e22eaa9ee1b99ec0ed7a308e54318e5f", "15ee4766dfc26169544f89d142b899068019b2a3a6ea952e6eec8f25468bf718", "03c23943e136c12f13980e66983d538700a493425e1dcbfb4edec7411bef1d85"), ("136129d4fefed382c56aad7eab5ab759749152fde798f973c44c79eddcbe046b", "227fc87bc05881dfb72cad4252f4ceeabb0d1663d30ec2761c99947f10053fe4", "042be93ab4930a3e04cc7d9b115bd1c543b8d66dac4a6a0fdfecedd429f1f025", "13548023d448af7832e6c37ab9cba258165e603eec91282bd174a4d198beee45"), ("25e64eddadc5da9649affcd1f3c6513cd21980541b387ac48423838e41cf71c9", "172b41601bc3e466709596cf86427befae22a73fde14b48719d51d22ccb02ee1", "24649ef4a1214e1b25b4ff491338c219c9dba2714824c952a3761f8772c20059", "116895ad8674699b8f2555188cfacd9acf83f816a0338c2b4117e62242ba9834"), ("047c55a608ce985a6a59759adee223367af0060421e0742d1af112f79b03de71", "1b72a29b590f9a7ac6ecf86389e98849553bfff0829792e65445cbe13a73bbc0", "2456fd6baa14fdc6adccc61327ff81fd0b6101e10b04b24d308668afe45e113b", "27ca5d3e417cc8fe1500bee9796442a10f9ced35f8a1d4ffee0240e9923ea148"), ("1fa03a4bda2395d6480deb5ab41cc943006f4eb2cef7b165db2459a5ee80849b", "25f96dff4d54908710c14b6095f65dcadf075ab92b45a6b927eb1dd498a437c6", "1ac505aca927fdc03c4f424863ce9ebd9ca0272ec2d65bcb6b9ea989f4563bb6", "04a59724366260819e58992795336ffc3f0025404106515cb678bc5708568602"), ("0e65e6f8601ac9be67e7306dca5919f3337f7e8fce2f0b33ea406f1738adf3d3", "14131547dada2299e00db8ed951e6aefb17e08cc891b305b5d37c7999474b7ec", "20bf4d5bc46c265cc8e3848ef9b8f53216a455a198e6ecabe0b1056733724134", "1da720e0075d339738beba0c094ca69534fbba31d2dc27b9eee0b673936a6ddf"), ("1dc1847125861e583db6757abb6256cfb6b690a7354b669539537764e28e9b27", "2e2a3ddddcc9dbe775c812666100beabefcafb2bfb6994cfe116a8220c90c960", "0829c6d1ac7f5e57a9204cbaf0273b581c683dcf1d03750433ec28b4f4b81b8a", "054a95adaea26300469cc0136349d233bfbbf357da257a59bdf48b6fdfc423d6"), ("23d5ae79f0a865c2851802490337f85a816bc466b9ef51aff042148d2eab6213", "2a3274f38b2e662f5a18baff2907d0e73831b48aaf122ff056e48b14b0988a1b", "06c0e45f13da960d878fb52b2e8ffa408c4032f0f51355d5d9fee9d66043dd12", "21d2d54125b9dbd9d6a84766b5c9f5a63800655ce36bff6db98668170ca329a3"), ("23a268785d3c6a7d50bb168d275295d239b2f19ec3dab6a71bdaa06f47add8d2", "2bba17eef9d77d29b40727ba339654dce2c2131c55603efedb7b2c0491a91cab", "1d6e698355bf0c885a6ce8e0b3bedd37e01c9869c616951cfeb84d4b6c76571f", "03a5f42b1f520d16942c9eaabdc5e6075d329dab1362339ffa424551b5812e0e"), ("030e1a3bf12ea5f96865ab5800ec828ce338f35ca78975813a843622433e2d20", "0be05a8df56936f62fdede553c83ffb483cd4c629cc9a25d067f4cf235893016", "1b38e4c3b5c4ca4c323bb146b7f26bf4b8e18314a5cfff48d6883b0e18bdd316", "0c84fb6395d58c9d9bff4d731bb1c4ec8443e503229eeb5ae813785fdb597052"), ("01465500a064fb4fdfc80b23c17bdea6e733ece380db2c34111ade46c3401928", "2eadabe3072a7cc9c59fee56e73ebbd56a1881926e7ec3a0717516347709a289", "005e5020a47426f81697e04d5b1c3b8db00a2d27409be7be319eb9e71138311a", "1145ea86fb7aff8e3b5405a0eac16991fad958940dfb53dedf589cd88cca8251"), ("29515ae66fb43b890f3d90d898db36b34ce05677bb38f47e1000c71e4784a29d", "1312de213535b92210d56ac127f046eae3fac4fdef563efc928d09570566f69e", "03c22e2737eb296c06555d83a110e2a71c0afeaa12c00d1238260916541fe4d5", "1cd2f49881e3a2370a33338c4e04d3e33233d2bd5b1fa930e022520ef3afc9fa"), ("0ceb670928c588ff356fb0916ad347ecab6de26d7c7b76bff7a9fbcb1565754a", "1764f4612369609f2a1c264764622d2234d99912f531f4ca8cfc67b03757a292", "2c25e91412e887fae63e6b2317cbff5455e97075c8c9b5d9dbc967ecb4458cca", "065aa3537eaee90598ed301d3039a1aeeeb46679915bd9945fb53e741c547b33"), ("08f95d3af530b3ad33f455d2b7e927deea1e13d21e69ddea4324a7511b18b1be", "2078c042a172d146f0c201328fd96c600fd8edc1aa4174d4f43ac1f897b7517b", "2f706c13d48e5f037fe72aba1c74770968bbad5b1e1b7d419c89396f76ba130c", "1d01f3e6dbc746cc7bd7be5b2fc3f81c275faae22d099e7b7761dabbc423c406"), ("1b1e427732c5a9a03eaa68335874b11fab7fefd9798706e55a9744d25be24379", "270a30998015b2609a401f46dc0a2107605a90c398616ef737e6c973cb1232cc", "15a6e32c522fb44d16355c3cb63b5a5429838813b9f0e2f8de2c75bd82902c54", "275673f945c6e2649c6e1cc8f280075de97df60176c45f38f1fd9745dc2b7071"), ("12cb07ffe7c73c1857eec11b504188210dadb963d12f33e4ad624a1c2ffed755", "3014e659522c2fb7ce94c8aa14607cb90c03a9a7ba4e345399c90069bf11457c", "1a1ccbdd6460a83c7d5b4eb6c4236cb5d301ffd069ae82f65ec1e38eae260e8e", "01d4f205dfc94f360caaae714b32cd769f61ee72990e406fbdd8e5bfb111dd1d"), ("0c7e4733efee393e92f471543a44f3895c09af449408590ec3b2bda47d6b1476", "1a6335ebe01d100bda569432b4bcd20dc0a28f5fc63b97d99190195c6f5388ab", "0876e03c31e802db9149b30f83d3a81b7d35a12beff5ccc38678bba61ab10c42", "2ad455b393e34b783c0787130a82f1a087a4da51de38ac57d746693ea5e63951"), ("07e798133895decd9d9a2fe2261a6a7278dde5f4d83667aaa5a80dd6f843f4de", "2f53cf705c7cbeca1e9b7a6fae4de2c2efa8eaaf0a2b436547afc7411eaf8596", "04b285e90c438f5197e70132c903e7b63e11984fc2316caaedd0ea9db8e24685", "1b5b20bf1d9095f8d18ae4a4e50e47dcc57ef87f15299eeb41f02c517a6b8612"), ("1bcc76ffc20cff8dd56f58b1ff00c13772f9a685f5059629af4a0cb2d216de3b", "09232bc9a44ac20f5326f877f080d35704ab4d46e44e4f0fa78846d6fff61840", "131e6cdadf8b157d0c3a3436e59b80362773c4753831679f5442fdf70c8e1ecb", "0891f722210e944162693b8671cfe93e68d0849dde6be2ca1aa8e790c4c30831"), ("11be6ec83c8bdb958c5a4e17d268fba279d6afcd6366977142f9ce157009f971", "1a8a6846b0538fe7483226b041bf8ae9743b46ed35663bf8cc6435ae0a8aab4d", "0cc349ccf34ee223c586b725c735fea4d23cb678c56d1ade2adf6dbc0298b1f8", "2c627a7645407a51e18104017445aeff608880809a41643442168f4e25c2bff9"), ("259a33bd5459401ef915d144b54c1d621b473f92d997a85442949ee20c67fddc", "07a6b4578f80365a11edb6fd0707fe72d091511302a2afeb6bb89177e956906c", "302d2ea89b308d4c1e7cbe4cd3af3030b2bed122c63e8808c5ea1cacda3518e4", "066b04522788a53cf5ddf7b1b46a85b7a477606834ac79fdb1de2e66e455b6ec"), ("0b1b9c19d4eb7e8b4981d37a71ab2da5184f70be0540763a7e02565387f8b745", "2c42a85762b3d02dd439299e88a4a3109210812dca6ee96c925e0a6f05cdf247", "0617de3b6ad6910041ec4140d6dbcd6283d14f9f41daa6a79e30a51bafbb4688", "093e405f78eb28af8dca829da6829edc475d41df9e85dbb263d1054f2209db75"), ("044f81988edffd8fe5717fdec2e5a6afc31cd175804833dfd4784219dc7e333a", "237233fe3ecc6496ae7d9bfbaee91a324a07e46d51ce90b4352256d924591630", "185e7ee440c7ae7a06ecf56caffb6744f3188abcd7affd885244c9969625ff35", "0a7504a55bd5f9a5ee14bca63a0af69441ebf32e2203b9b0775aa7e214248dff"), ("2e1c678df3cb309e9a0cb26ea1d6b1a925fb4beb6174b6d5c6345a8cc2b91b32", "2c2237fa88af37aa2069da538f2f0c878e50e13e065af1c0e10e02df2eadee9e", "238cd100a3223a887dc88884a7d6691f25ef640cbbd0b731e72e36875e9bc3d1", "1e0d145c6e3e785495ad2e15ce0b32cb772fb03e472bd043699811182cde6093"), ("129a70117b84897e9b34cc635b5f12d973af4eb5b9b1da6384cf4636e9d588b1", "2b3130cb2ff687c87807f962488ed28d927959ec5a2fb29adb4cc30205d320e5", "1a3fb1d987cde2d04c2f711e7da2ca3337bb31c8f5f2f5b5a7230030a264c43d", "0b67af335590d5c1722b6ccd8403879ba96e95425bd04e4db1fce63e7f22e5e8"), ("1353321a5dfa50e0a264579634c35713cebea84da3a11a9eeef0721628e68d7c", "2c19691ed74dff244a777125c84ad4512f941a78ecd3cd986a8cc35a1e454410", "2ff6af5cfab4fc73bfe98d91c329974cac2dbe084d704bc1e18620d3f2421618", "26e601b1ed115ccff3be3ced0b25621517914be95c1282df945ad91110582028"), ("0f5e4f010359758388dca7aac367f320cbd425adfbfaa87369207680cf7fc839", "0bebb713d8a444db48aa2ba72543fb94b4a977b3b5c57b07ca256156e8f992d4", "0138c0f63fc72fcf1352c71008e2fbe424cde405ae7725a7702a91fef5936216", "03ccf33439cd4ce64a7875d30e8abac1c61b01dbc32b5e9d2a124f514583aa65"), ("109da02a58c93696fc10eec0a975cdfd0f1897a610b23f8dac889c6dcf8552a4", "1b37b1e431d7a06dfcfddabb9539824fce54aa84dd0a557d1c433f177c188310", "1c7bb71c39f31b09366b342aedb0bf3d405d15febef783989032701ff22dcf16", "21d07487b5cab6ae8f0656dd8eb7c9e69fa4f84526695aa3fa38d0939760c2ce"), ("0902be6494105388b1b723638dcfe2bd1c13a73785564ebc399a80bee4b26ee0", "0a8186e74105346919e1361ba0998489629818d97b8751aaebbdd2de334abbd9", "0cbc6576e3e24de3ace7a60ec0a8ab38e399a4a6cb045edbfb70773dad914efc", "09ec9bbcf8ffb194584a6bce227c1d19d0b93acd84a18eb7410be61b77f0dee6"), ("037ed21c5d40b398b64c62bb3bba8ef56b21de53abf5ecb0da87c15e4afc301c", "0e104a19b4374b3d187b93f3457f46da1cb9fa7b70044c53c403f6155511fe73", "2fbca9f0ed43c5a2443e5bc34b8e0dcab8c7b6df3ac4cf5b951dea051837901d", "2c370a94c92ef79902321263fc21e56e9090bfee075564663f0570525ad481b4"), ("09abbeb66b1288ef6931a68c24ce5b7fd8a157d7448f48de30ea20c7eb7acd44", "0958879480b9244625b4011a352c5a37a984e3641cbeb863dec4059d05f0665b", "2cf41b953ece79bdf262ba2debe4213e028b57110980cb315d841aad84f1208f", "0662dc52a830c55cbdb54486e8d44183c525746b25b102970acea90ab2b987ed"), ("18a00fc9f66f96e6a96d8a133fe1c9154c05cae9774d367b7c0f791c45c2338b", "1ea0aa4cf391cc68ddc0b7a992915900d465c9a94fd5f47bd74e52f0ec05122d", "2c78e4d37b15881cc13239229cc728942465caff791d2e0110d4a0fb59da3622", "1fe2fab18e4ac8848045a3ffe7050fdd517b6568347f6ec3c917d100502edbe0"), ("138929a550b5a4aee826488f39770791fd07cc72b1a476db63576f8e23b17825", "040a77ec510115467a97f8330d77fbb6586e71b66e2245be6485dee73fa5be77", "2d7d3ed4ee1c8b68b65af0005c6fe30c314bfdda98f1a4a3a593c07fc30a779d", "0161ddb8d3c9fd3710bbec2ac6f0d350766edd7088b14b647e5499d967c56f7b"), ("2829d02bc875d45fd3d9b8177ff68d6f1bde44691476d2cb4917cc62d628deb1", "271ffca3eacf37b9babba8dba053c0de3344181ef12b39293d864e47c82cc52d", "2bcb0624f0bf9d4f76d2b3f576d1f87ce193fb0dd99470139cd1af09b55dd466", "26c7466e004030dd0bea7b6b429f4282d1be0f30b08d56d507b9e06636d67f5b"), ("00072fe72b846cb3a3697dda4b9b7467e6436bed41b6cf3d4f87415244fdfd96", "019a65ff4e91257b2588ae9854df9022900a1af5347fab9dca848135b5bd340a", "2c4b6d885b4b72ef80b3e241efddb528680a24aa6c58d3be8b19423e5f09987c", "25d19c3142ea40138ed6280febad6757781ae6eaf53186f795275f1548302075"), ("0aa300825c83cd51465e3c480cdd7ef1df4df219562ded2ac13ce72c00a96323", "11c49b18d53237b5da0a7625fc66fd80f64aa041a84da8a9532879bbf9d15943", "088fcb4d8a4bf5a323178a6fddf2d3812238e86368ad5351b9b25061d8ad8e08", "23844a82bea70757885e681edbc0771248d66307837e0f700af7b3884c2138b7"), ("0977770336964af3ae246d4895e04eafd113ccae32808027586b004bba53f7f8", "0e9fe8df8b95154b7d0d61d3617006fd771bb427d2a8783d6c66212887903760", "142e3f055c4b0026187f2e65ce32c4d160c105f314549b63c148e247cd9f347e", "0a7752dfc7f8d85938df967cffebb6189882a738ea116a855f0a381d6f6dcf5a"), ("0abc70f9f5ded20cfece4bda79633a557c55f04a59827ae839fef2ef1c54922d", "291b300fd4770b491ccf1945ba4f01f94996a6e5973dbcf5f2fbc956fe2c0025", "2c20c9b3334eb729194d24c26e5e73af14384b894bc36063eca4e8e6c8cd835d", "1becc873b85a95c12231b4ea7ae7e85c279d773e2917b93c11ef59b620982038"), ("20e608433febadf99ee9d4ac24cf428e6b2df645146ca23bc843c2f6167ce73c", "2edee076c6dbf6d79bd2a2eb3766a91abe06d649ee57fae22f4d4c73ce832c0c", "156847e0b07e59e9068a6681ae2da07d4c4c5947461af96b382434560cae6f56", "0c23753c8fa18331d111777f2620c88032304d05bc9dc612520ce4e6682f8db3"), ("05652877f88aea60c86dde2fab362eb830191f730c217c1e008ce4e12e79ec61", "244e4b4b8b29dbc166d4a38054ddfcd85886bfde5bd0163ee57eff6b76035b27", "1cd4b58aad1021e837efe5e7ff315f6475725a7104968275615e36d462700331", "2df5e712d7bdc2980b0eb6d7ba39b0cbb0bce3227254bdb19bc797fdf7aaf2e7"), ("0c4053f0602ba13ccc9488b0fffe5addc7ceb93aedd5abd06d1b638a7136512e", "253ff6ceacaf65a76848f2b5e85fa3c7273b5062a0f8dd67aa425a92dcd0eba5", "2ccae4a147e4a7bbce15c75dba5054843c3ece6b5067c8db2014bcdd06fd834f", "28906fb27580342259af4843bbdd6ee683b3f614be50aa5a6cb53a6a9c7a2db1"), ("211b2ad9f744704022530f62af3222b1baf494108a4094f097a7f8bfb1a5d954", "1392ddc5c662811de9fd408e1db883a576e20f53ee133c93d092256281cf3ef7", "1f3c1b298dd6b7076b9c94c2693702a70ca7ff6b64109dc0347280d6c8590a63", "1a3a172120fb7478816c45dae07e13552d1bb9772bc4eeb3e08de309658aa241"), ("15aa3aca6829e9705fef9755db561131d815d662dd38667d1d956842ede872ec", "0776db4080161047f079928b216100353a9dfbd20de7f6f9080b60b0fe72025a", "1ded9b4c2c46b5d1756e08c7f0beb8648f983a395d1fe322ab15d3cd157ca7e4", "237210ef557ad507f59ee316e9a181b9589f015d960b1f64ec104e39f5cf6237"), ("003f09fc78ccdd77babd7cd4c82f734d3f5cb8f1f8d9c4a83a7d92d3a300bf70", "1e1cd32ec4b686cb5e070ee191d05a8ff48a96c9fe68d0e8e2557c8dae251460", "01b4af057a056cd95082bd64b1d199d86a60cc5968035ac7f721dc4075b9c902", "027ce59ef9f209580db4991553d6b868dfdda97ce119d1decc89418c99995d24"), ("133b338b7a56c407157d3bd46e3e27eabe884fd54133de6abb7177775ed9f957", "237f721c917c48613adc2b0fca0bc4b03a34af27d7208c6723b9eb818ca3f1d3", "1c78e9cece23afb4853afb67566d9ac14f64815713c31e8f8193fe2813d999b5", "026861eb9512cb659aaa2e4788ef789a07e6f26b0c7cbd010e518a1cf737e5e0"), ("2b8b59db7a6161965cf781b3048172680918819ac0d3c2e9b8898e3195d0c683", "14a5c0e7e45cc25b01ac2e8acedd2931ff09ac99fca3948bf049dec3daf2fe6d", "2d6682cbc20665c0165cfcbcf53102ab02629207a2c10db002b8018b1b7160e9", "2be1884ffa6495592bb9c896fc1e9892bc745dadff2888833b31a07e0ee10082"), ("0071d2fcdc6ccea0234d06926f7d1cd401b84678f8bf8f728561a1efca53f4e1", "0f28ecb6526a905a3d95b3ad1452ca362d7ad1c0c3ba578894f383acd3e7c85f", "1019326142c8310d519d31929f663864ac7a57772ebd98676900415ae606f5e5", "0bd2b1b67d226dc71cbeb97ba9e27aa8c23cf2583c6a066b8dda377c29beb902"), ("271eda639a4abb64788038804916673b6a703bf52e75e260f05a2d6f93c7e21e", "29a69c9de8b0e8a43cda457f1e93fa61aff0f1af99e55cec7a0777093fd4c244", "2c473633dcdf4d45b0a28605188110581591f548d78811cf95372caa061317db", "25a4f1ae375682024b9cd6d31aeb7b7dad58380c226cb647d820198ab5b9f907"), ("059cc6a3fdcbc892dd72370e7e98bf1e3d046db35624163a259efa0cb14cc852", "0c94afd93225e4105b08fc6750e3fb0283bb44ad90ebd8f51a1d78640afa4997", "252043dd5af62e7436ed602692907f20eff3f7338359eaae88617d4dc030ed1a", "14728fbb60abb177ff9eb9d3a7d6dad8ea6322bb536557a9d359392e9e42dc76"), ("0b88e66da04c8b7e0c774fa31b34279d25ae46df924d06eeeccf3ea87a4e7069", "18d76ceef7b5d0e1f235c80a369b59aae71f56df156fa97368ab1af9bc705754", "1a3a74c6528bcdbb33c9b4b0562ee3d11672fe7a2f0209a318e971f849461e88", "16fec2936613db32f98159e8b925679d74bce165ecc521e6da11246e84577ade"), ("006da6a5604eb0af1985a05ca1135a484ead02f3bda04b3e1816d97d4c6d1f11", "0bf70237d75b388c07b86a7e21a768f377f56c44ea292cfbe5e4af9c9b0d7edd", "0774302ec49c3f13610f99a1f55ff825aa999b9214473387b35b9f668357dc48", "0f901cab1a67a7da246b0ea203fa3928f369bdde703385ea48a6929abca8f28d"), ("08f2e216b5241ad12c1699ab901d7f2cf7439fcd48eb6285c42389f575ad7f0f", "2eb710fd2da902b929c4d069bb6c3ffcb340956fbe32dab5e9195b58fe8c7468", "24904503053eef6a5da7c13741b2dc459cd7aef7011c0c40909af8c995154531", "2c78bc73093d21c6da09ef7ab9987b57c495441aab2dd3ba05aaa3b742f85166"), ("0499cc0d3672e418aeffe32140c64ae9b8526119cc1484dde2b2edc9461e99f9", "283d70c9e5d07718118afed877a5f113176aff47afd5189e9d9258ca1e3796b5", "033dd40cccf78ded6d7ed4de0bc82d9ceb2af632a487d036e5aa52c21d260df4", "21b302a1909c4e1fb275e35440fbbdf9e3bece2888a327361ca4c5116fec615e"), ("23fe6fa169e6c7c2e635ec17302ba6502a94ab6d5f74ab026889fed5f32bfba2", "179f81abcab48c668dca1bf74ff233650ebafc4535235d725252e1f8ded890bb", "0466f032b05e02b35218dafefd775962c3dbd8aa8fdb48a4b1232d0b2c3d9c79", "2304595238f2ca0172f746cd3565ea1c9fc2585cc2b99c9bf38d7c816648b56d"), ("18e4b3efcac1a1d780e726365281e69309d863dc2cdbb56e734e38a7460c994a", "1eaeb06f5b5ea0bd4a7194bcbadff6a6086d8c04ce7ffc601d18ff1946a70d83", "13e47ec6471649f5789f4a3d2ab6d75b91e4ed4de1fa0bd788d9e729c20ce194", "1e5cdf42dd7444a20a598b18ece84692090f34d2d888a887dfea9a3bac90fefd"), ("27c732767bcd45b35ca8d7b1568d5030952cc68eda4e153b603217cb85705cf9", "200ddcd2ba9f771a3b810a15e60260bac164d9bd7a1677671d89b68116773c0b", "15570afbc1b27ce83822cf8abbf87d600cf065e90ff0125de7ba393ad639055a", "2b658d339ab054fd8f4f92d0aa515f6fbf0e4814cb7aae4a913f87c192ef8df5"), ("0db248f74dfdf7b703193fc1f3f2961c30d1e7aa8bd185e9e9759f022cc27f44", "2395e207cf31b32533e82f3c8285222c046c369a0f78dea8685cc136e4034d67", "0c7c4313a7af611202a0eed628a70f243b7d9a9405fa70b71152ed6f9174c1f2", "1882def2dca28595a399618874680c997e797f9a440fd5d5c82d9af86c2677a9"), ("2cf6ab4ff20c7d721523e468e0e6806d3dac483188017dcabbb86796a8d9dc4e", "1dd12b695dc815feafff1d67a5085df0b644ca792fce15b0c2d824dca5dabd41", "29d4ff0d0ea61bfc1badefaa3645c2f6484acb72bd090f94d2e4ef5f8eb5c03b", "1d53cbc6038bc41e1cf2394d8af61108e407cd06ab5ba7c5043fea48a00a3820"), ("2e6381bed815ed110bc85abee052a9ecbe167e356b0b16ff040d34809e970eb4", "2367f5db3669fd9a651a66d6ca871c374ba9351c8c44742df883cf3c6af73bd1", "09f7b1e85d88887081adf716e907e81bec02d959ee318b3a7990bc0a3fca0175", "072f3d3db4fd2bc821d1cfb2bc3eaa705cfaf80b7fc1ac411f0b30b6643d812d"), ("2ebdec3efda795e7b7602efb8ba91d9284dc18f803c529507f0f899a29e79336", "1246e459904619d70373c09974afc88106bd35a92279e0e0318c16bea40f05a9", "0e071a8053500f7d3670b02001e36bdab851be71c721b6b8f175f30390907835", "0bf5d1950e9ba550b399673727deb2f6cd2a95509f3161042f35d16fc362ccd7"), ("11493dc62e4c1e50a47268bc6c96f4bf9af0e95940262f1e8e9443a6d7c6c327", "2d7512bcc979644b7255a7a4228f43f6a60df626d79dc0b75b373032bbe5c0d1", "2ee94b86ac5a8b2b1120e2a70e34198d5728939f04412b7557a459d1a1111499", "2c07e8b13351cb366da1a5cd9cc126c3e3838cbbc97ab86cc58102f94bab84bd"), ("194f378fba509b14ab0d3e64a9c4489b45701a87ac3b82f468af99b0b38ee8d7", "25f66315277d71629bf482752358624182d816c7778f8474117240c927e4fe80", "184b00ada3dc81e27e6efdec1f2bd89a9974e4592cfc210d594bdccc393e0f51", "1a5d1363f6f28d730a273bf75b5ea0ae9aa3912de64bd259080df0135e66e2bc"), ("0af9e9a06bf7aab910149bff670bfc04492610864f15efb3f52948b6a8cb76e5", "1a7ef1af0f2ec8f52804ce2967c18baf587f27d57315aa6b56f0e96c62f456de", "2c763fe2d5a967a5bae68390774180837ba6f6ab93fb30bf2f70b46ffe661723", "2fba473c8b76d55a1bcf8928041eec17b53a574525bec538ca3ec7ca28de6790"), ("0bad36b6b58238ad403eaa0d724f472ae9ee5f10e80f3aa1a6979de71392f2a2", "12261d2490200c3cc300c8db647c8c568a4c19947a612ca770ee4ee1bcc6968e", "1ee5cc5c36d2c5fca13cc03f7eee02e8bcde22dda34aa97c7daf81a43fa8da35", "2bd6aaad71a6d648bff80e670a8ef2eb1349db2bce4056477143daea8864323f"), ("09badf9e49c09d2da7a8ed3aeace58d1af6e53afc0fa61a080b857ce35a60344", "097c75ce437b2b7219ebd6c91a3dfda444aef00e6ef0e29db3e4988a7b5cfd0e", "27e68f2c338ec74567652ef29c21c9935cfa36d82e845c3a3a90b68d3e2184a7", "176182cf258fb7d2be9489357537a246cb1b6c37b5e62150939e7e3347f76472"), ("2cc6dc9889cfcbedc24956546fa2a20eab703008549f55039ee4e57bb2c480b9", "2909232f136eb8001f6069fc9ec0e26ab37fe62a71f2c364f8d2fa70eeb917a3", "03ae42dcc388a456271ab707c0a5093535604d514c6e708ec90dedf2cf986df6", "07bca03b3733385c351e1f77b16b38542cc68cae471bd184177445f3d8642975"), ("1c5a2360a9dcfe840e7de67fe3eb3e582feaae575ed75b7d94bc56727b2432a4", "27a28f6e772d3b153895741c76b32aef55b5e1a9e4e68395f374e1688fdfe889", "276b3b506ffb04ba3d44600cfae2bbdb7f624fb1e80393f0a4d39be8a308b8f5", "043e5bbefd3e1a3fc426c999c07cdeadb5d788b62709c5c47675ffeced4c7175"), ("1e6e95517f8e34fe923031140086f977d8d9f05f21d2e32bd3424610931fb122", "29efdbcf7f456033720723cdd9ad0c4c78c9645629d9268ccf6a1b42b020f103", "07d90904cb94950bb7c27cf8eece1e8a5c5bc961479294cbbac69b7bb26d9487", "1c598282ebf398144dc82b4e7796330ae7a04a9366250e687a0dd8f9aab27784"), ("0ce31b56558fdd110c60c6915133f9e60131b2e2214b6feb011916ac7ba0399d", "0bd6744e0909261a7598e4d3cb3f1b98289883e1c1497e06172b4884710faca4", "1288f24e1fe1683adf0ab9957b3e0a53a5e54ee33f26bdaa0c31fc20decd0586", "195984964a8608026cc1629327889823367dd66f8326c2da8fe60fe204181f29"), ("08b602c7ca5620aa2ab7962106a54132f9214d151a5265ef7b4690b8d38ab593", "2eb71af16e1eb92f48d14f5b223b6647caa78645200ecfb48ccca1e7caa2edac", "0173b0d08727aba1d8fbb42afe79e5691eccb1b35e09b222dd865ee1715c9f6b", "0819183752c0bd59d97da94da824e55a2f420ba3aac6af87aa97010decfd1198"), ("004362739aa8fad4946854daa7024267ad260c23a0eda2aacc527da1533699f6", "0ede3f6cd73266fd9d0ecba0f73ba0745474126ad1e2c194f99c3f46af40520b", "164a67b8796709aa3f8e61242fcf9ad8fa3e17f2d65ce0cca9c86282d82f7bed", "2359353850a6cb9f33a1a016b76c49fcdaa6da8b7a947f324fa79ce6034a74ee"), ("087316c7de99a9b65d009d2ead20121a52a170febf6d5ddaf241679c63ef0fb8", "1dc00280aecb4ba5981886f08a76b48149fa41565781f96ec38f7a8b37b70b3a", "0e9ea3822bb45a71adb3d270f023e63e34f3fd8a74d351dee52a852823e69e11", "0a92f05c07934c2020fc63cd5df8ff6e3a66242fddd8657605ef149cd69bcca0"), ("24d3db83967db5c84d66093e2a38a13d9ede5b5f80eb2bfe54b812024fdef1c9", "28167186d612c5dabfb7b1597da1a9d7b9e358d6bfaa95afb90e14057edb74a9", "19a2b0d640540b0336ad1b005773a6e094569b69d3bd3c9a541ad5d3ac208b40", "269da64ec85610a66ed2ce69b5abee74dda7c60d9c7db24dee6f67ecdc0bcf65"), ("20cd2ab0e9419b186e73b862cffc266bfe0f566783a163ba2ec758a163f91c5e", "1642a230e0e84a964f212cf9d530008dbe6e4f4cab743e8ecbec0c87fea51b53", "162a7f33a54b57ad19c1a9612944bae79d467a8036b31e1966c84ab5a6e24716", "29e099b8959e3d5364a7e5d714f09c8aaec23a53088c333c88ad9283532b4d89"), ("2d15b30f2e2d5da157d42668e95c16d6254eb94c80e33c1cc8e64a18c45e68e0", "1a6763e8d50e3e74db0c57f9a6bc227343c3f03c0c6de35abfce6aff4ffc34cb", "0baf7dfcc88d2c998be986d48bf166cd50925f41de51c3a07c851d00952da206", "25445cd36a55a8f5104c0247a985a5e8bc2163e20988637b5b379bf1646cbd51"), ("0423dec79f2fa90f96f6113c5a6585a6960681a8627a4923273dc1c2a6fc9e74", "03404744fbd17641d738c15be201f3bb57c92fd2519509ff028954d3d364a98e", "2074baeb073318143dfcfb616813c4d3ebc8bded171b1bcb821d05dea575d3f8", "07a61ea130da2dfaae40ec0c2aa299c7290d01f3af398e8c81083f4068b1f689"), ("2f58c3cfb2be62dff2e5c97defa1bbf5afb61f3751f000cbfd3c0740fff44503", "277124dda18f4a055383728fede27a083b10cc470ba8d154aab5d60e18af91d1", "06f52187ae4f51fc0ae39344e98b57f584242119a48bb17167be984ade4c4eef", "22c8f9fad21b9b45c23ce418c41994a13952e3a674cef5e7b200e799926587e7"), ("04a5e5775dbfc87fbd0d7a5c82bd7362e6d6d43fd202be6317e9081d28b579d3", "2df7052c77081694b4ffb66270e40a56843be23c1cab0f8298badea2148e3193", "1abc4904a0d2c204c4d352c8d027f129e00c481cdc97c6f02239c867373a7751", "1a0914e20c260aef39689a84db0510f91c3fd0c75704cad5142b5febb7eca607"), ("150138abfe76b26779318c88e4d05d888f634705b7aa927008edd3973410c98b", "23700d95ad11e0ec3227a40c52a52f44dd6c39d486b714362b5bcaa9f9fb8c30", "13354ae0f3141a9a4201dc407f477437f8591fa8f77705b9aaf28736122a7bbd", "1cda851277eb010dadefadb015242d11d59f1488cb6a2556591b591a3ed4b041"), ("06447d0f699c6a22db0b703cb7707f97705644af627d6bb05e91fc2ddb0cfd54", "0b165448c0054090d8172bc4a56b1c7eb9f88cd2253c483600c02333c0098986", "090146c0aeb701076ef74af4d0ecf21824077eb3d36000dc74e2dc387cc20c79", "2dd69d789e15a9d3309b28b6ae8a4a549f30326474d693b0c2478730cbfbb693"), ("05d57f03826e81c5c2af857e28b784db7f999f1a312ac51ffa9cb374637e8338", "15202dee4f9552f148be4d49bfbd28c03bc58a47b7016624d3208fdd6d07234a", "093dca3408533b781f1754aa4db1fcc5bac5f5ebe9a62da5a336d6bc7e8bfe00", "0629ca2d80db4137306879412b5d6690e5406e3060952694fadc8ad420e24df6"), ("0f45a9fad58fe276112361d225328ec9b88689803d11a9fb531f05cb73a1e597", "159e9b0ad500220760e8117c965aa320b4a0e0c7e566096413d5ba5518ff78ec", "1c7419f6e06035c5ce5282d948d7be1ec2e5daef0cf4c2eda88530250b7fc020", "0882477b5bea298b4e6cf1fb4bc6b2d058482b380a3208d2ef55af7e292db957"), ("2dd4f53eb2d2b5d1d924f3d4988fb8339bb80fc90e37106ba881bd3f7764bb92", "24957dfe824e27ca11bde878373705cc60091f89e303c32132c6d80516633b90", "2867e66eb9b9dc43b96a354fe40782d0ea7bc3dabbf23cc9c0bb0cb2c25cbd90", "1f9751ee9f566e5b06093b2073778c5f1299c78d6c53ef91af710a3d7bb140c7"), ("2143f7b460e4a59998bd9108330e9f8d55c1997c8bc3a14ff97b94cced47358b", "2465e092f79e4e39c62a96c8b793b65fdec08d317a2ad0615fe2d4e43f833834", "2534b8d7730dc4c1214c99f5f8bd79178deaaf6df46dfddf7a67e293e2ad6532", "1dead0df9e79dfff2eebfe52eeae4ce4863b33197ebcf2ed8ba2a2033d60038c"), ("0cb0186d6a3cff8cb373a00f5b0bdc0b5e886ebe03ec595e08023310a9cc6e0e", "242ab96ee5cd297acb83f969a9ac674acb9a3027cef7228e45b204a6cf8ebbc1", "288afda13e7c8525b4be1e6167b68e1fd383cb84567682cf779ab788e54b2e7f", "1b5beb7ad1d71c06b4175939d341068aedc038f30d143b4f01c85ad39cfecff4"), ("1c7646cd1276928f9f9d8a72bb5d3d0a0c8a0a93004edbecc74d4d755d63f761", "097c7e2d9b846aa3b0422f0c5073f62c3cc7729ec9f90f34e5143aec0cfe879d", "066320846410c742bb3726bbbeb988a8c8efe56e8cf2676346781cc2013d7bb1", "2573e80072247437c6bec8a95b07446b84448dc7dacc758cdc4cc728139677c4"), ("2ea71130ec2748a7282877c8f35762cfa54024e4057468d7472e8d65adfcf8d4", "07202ddc95d544fdffa10eeb7217820d0c2b42ed92655c381c6b2db0b9baa876", "2ca869f5527f18aa0a6e85b1830706e93de7c5d803d12ef89d1c91d7c3aacff0", "1f8c8f2b81f22edc546b448abdcc673984793dbe07590c91c6f1f5ed12ede731"), ("1353932d9d65ec810187befca7d0ba3f6b53442749d8bf6e9c33cfddb1ce6d37", "25b61709df25217b431bbc62f1096cdbac592f571567e51e2582ada4474b0fef", "0c3ef15cf3fe777835889a9b9126bf045e06ee88d107bed7d1a7b56dfd308673", "0258e31ad61a681b42b1aaa69eab8b41cff1fcac009871d160fb0533d40b5580"), ("2cddbe0610fc02ab4acd9339a9268f2e3e71788ba95df3ae0d70b8ebd0604368", "263595cfec1f71203a7bb00dbe8b015b7afa358995ab5709b8312ffa8ef7464a", "2af98abde9f63d3eadf50076f02f69cb317d868413407e5f1eca3a776609fbf5", "2f6a9e161822636a02ee7030b24bd08e5b2343a1de43e98d1dcdf74125206c58"), ("2c3367b3b575dbe8524fbf94bc7fc53b6048ea0edc295b0073497070643a276e", "056c083d9f7d0c6f81dd77c66e254428ca70ed726622596d158425c7c085ef18", "1b7b28bcf3bfee9a8f1ff7f4c2ba14a8a6b6b7404eec6c73aaa4802f28aaa7fd", "105d058c67dfa394f0add43801e6470129b342e64d74a32e886a31fafa6ceeb6"), ("178f80f62fd6c6d90b04ae0e9c6172539cda3332b1a1e4dac05951f2ca3bb670", "18ce129ea177a70ae7e75658620f85f025e0850affa102bae0e83d442af9f3b7", "24248f56b719d55874b562262bbf3d46f1fc5ae4f2be12a4e25061fe5d5bfbe4", "0abdf3d216166bbedd9fe57e3998a02bba38d734c16def2d51d20633283cf93a"), ("060e4fca1e6d048fe2525150a85336735f3ad00aa35f792d21d6cec78acf2ac7", "2d35d1acd793237a270e998668dc23072d3b0fc4ac7418aa92b333319d86b128", "18a9757a03bfa5803dde930ca1d09c1a920d152d2067b6953ac9192e70001cb0", "0ca4a124af6e8c8ca330be82439212eca2247c73a44599edc05d15983263c22d"), ("0cc2547e220366356677931355c23ba4e942ef95f3616d347538f1595e87bbde", "14d5e736dde04124cac37bd37a98e86c7904d024cd46edd2154c4b03a8c15434", "013b63aac5ed029f8aa071445b0db725da2dd50855767b3663d648738b429ca8", "16eb98ddf5e3c2d427ad7f740d46287889105fb7b38fa774029af0323503577a"), ("0b42ed36792d053c3d97754af544bc8c3ff2de88376a265d4c039b11f3398460", "03e3c160c46f7dcb1e7d26994a8e8eb9db0b909711f73da3420b4d24ee288a01", "20a660883e46b5a019bb5f2ae89d13f460400dd1758cb3ce89532b638e02b193", "201d58213b8f44c011f9e9423cdc620b7eca82095cb3cb1269cdd4e99d6f0e60"), ("1319df47a6153728fa9785bd1c4f1ea2e53121acfb13509b742c81bb0d78b00b", "06fe256a5bbf02ccc5630b5c9567b3cbece7dba5a091f80463ef4462d2a57d90", "13a9cd2152a944f95cafec957b9a992a47d85bd6d35d0f8816b5e66b22abfca5", "0e9b9b3b5aaef2e00e14348fb5dd3363d6e6d97cde099ffa970ba3ae4f3f2b28"), ("232e84ac394feca40c1ae85c4ff5a4bf335df7b0d2cf21526856858ecf2bbf76", "301b9ee0255cd3a4f2f8778b88186ebd0b0dcb3c570ed76a434ec49447c1843d", "099f8c8429f9f369869df29b069f09f6ccc676f8a89041ef91e6810a454070ea", "055da4946b75d1bef701d101e1f2a87ea16383e4eb608e173b6b24813eef9696"), ("14f89b20e9a20b9a35492f9c0b0cf72bc6b2746d092e97da17da63a307c79fcb", "2880e6dd579221356c07c990ddf8c21eeaa6bc49f250f00959a60adb38d53256", "0e56da3a3a11d9d30e41c2fd1228462993dd0a83871fabf41ccd4eb2f45971c6", "21fa1a94af3a8c286eec9e69c004fc497f0f4564e1e733955ce4a7e7117d2d94"), ("12a960c6403ab58c6988f414636a16f8bab4b8a8afd5b588b90139f59d277857", "00c173ca96cc112d5d6441ecf8db0eee6b0600e4375846358c8e38bb193ce538", "2d674003f1999f273c7da4840a87c807073d742d074e6384ba44b2cdacc8661d", "2a349ca5c95ce08ff65126d9598435d91d573f30961327673b93bfea57e1e157"), ("27ca988934f2c487ad9e2e574bc729ccea195e51e0220ed199a83faf86203f47", "04e62a1344bf66fb1f8da9b932756f9b8f1433f60c12531c70618c62f3a6a583", "29ea76589d1abf06bf0280c6bbb5a544a7746286a5b230a580764a0006fb2217", "1f905a6531a488b2862e68b4e51234a90cdf72b30ddfa4b3ef27b0a728bd2c54"), ("0e631cf96c93822762ff1297320d0caa8b4780fb3ebbecd68d64a0ac1e1dcc49", "106b6bda7fe262b1e3d33218dcec5c006623cee4c623463bfea7bf845be4b8c6", "2cae6a2230eadf72b2454a642946cec413aa342d85bfba4c54d9435050e5c3b2", "0e34272409cf03af4cf42a4d036480e62bc81fc43950878da9b9b98c539468ce"), ("02e5d59544f642cad29dbbdc3bfc5a33e6513e61eb789cd2f8e15a65b3dd1a09", "126685c9f72c3e9bd4fad734abb435413e8f88468121ae67c15e439c9f46e4c4", "01ba615731ba6fb4144a8f5e96256cd14e92f5803d976148707dc1951e9db858", "0f2d5cde7a2d8f55029ce1e5feacebeffb45e95ae33bfee6ddce93d58716bf99"), ("237a12d97328566b17a5e01ef116a725cac2d646bacb43df4e30ca3ea2214269", "184e3048fb89d51edcfededffa6967b9d357e601c8220f948b18caab275a785d", "1169740b9da2ef370f66cc5d729eb1db05ac89ea18f6a4ae49d059354da8f140", "076daabd740477e598ade0bb65bafdaf0af62a7c61eac40297a34db5a2a6009e"), ("03b1a415e56a87cd16900855f66a6e0afb92358fe388d9dc2a0245d08788945f", "119ad4eb31b052cb9beec357cb04fac95466400475132483bb82e43fe9b09820", "1b3ab7f048ff21f2f2b954639f3616d516e640685289277bfe6e5907f73c8c87", "2e43e4dee44a32697e7b0851917e0ad402009c3c011b440b1de54e17d7de93fb"), ("1c4a4dff5c944acc8dc245216c40b8f4d2cc2a3d9e022029b0b5abfbf4b33337", "1df80583ccb113d53769c1f22755a6b00dfcb5aab3d506c1fa3e9b5587a965ec", "22c302f09b9429de990351b9f50c544b1566f5c97b0040979dca2332cfaa7573", "2f4eaf738b8150c26b0323b7e9ce0c92f8d002fc460db335ca85279311867c38"), ("1d5e235859417c56a5a3029b8a0f562aaa77f3b33948a9357aa7fa4316fe9b2c", "1197c0bb9911e4c7eb4266a93f65eb186fc53ec7c7f9230bb0671453f2e4d2e2", "1bac77553cb9a26e916b236fc26017529299a84cc6d6d72575a819eae3c92f1d", "296b70fbcdad781ec3027f14f98918eb604d32f6b2c4101ff99084ddbc55b9d9"), ("234c3fd5388e285c172a5ba1ea4323b6b1f47f90806d1a756fb54021db2ab627", "03229da23fc771cccfcdac0a18a20036a41dbac8bc3684a7bb88ca906be337e8", "12fd923f1bfbd7a26eed106535a3fdcd66bc2bbd6518bc698ee99cfbde2401f3", "1a25b19552d6d6a503b7bcd684a6741e641e605e3d194a4182897df28f8218e7"), ("085a7f294b135ca42a6704aec711ad70cadd3d041f39619e78510b025ea452ec", "2d8d80b10c61089eacf6b03511ea892653147dede93221cde7af0a83d9f65942", "114c46207964f80e1d10182fd94864fbb40c7ab7efb8d8908dda8c694ed13de1", "0c5819a19b424bc1edac7d7e71a497da004abe3ec79cf5329674fa1b19bce5fd"), ("25c30b9de2fb2d98f7981de7d401bbaa8dc5842181e7d4921dbc07a913e61f23", "03411ef2e3664e684fbf59e5bc58ac1b7dcafd33feb2d81962d1a45f9c93b25e", "0899fcff256913ce8ac884fca558c78919c6c69e95a766c1fe7d1009cbceffac", "01e32e0ffecc7128e669335aaa5738139ee4552206b9ccda2b4a3aab3b5de8d4"), ("034c7f7c25a0ae59a85a3768bb283e3f9c2fab92f9b6d5838974c9684f5ca96e", "268ac84977298bfd7b5afefbeedf58bc0daad1704a73737fdaa0163e685ea7f7", "2378726fa80f14edc35abae246f104ee98736caa5ec7b639cbd07ed3059e9227", "2e7117a279dfd040bfc7a9d1ae6877841d9bcc2d1235af811170fb3791a16f15"), ("038e9d15a8a648900ea3a3522f0e3b1b19f812975fbabc2615a1609accf3262a", "2c3a9a721d7a6edad3517b5f52402845c5c04b9f179478acfcb3326085ac4dec", "2ca1d5d948b4534fac6a3cb2668b85f7222949cd5b2e0ae8ba96acd82c2507ba", "009032fd902da7b07a733faaba95d02fadeac04beba92b1ae649ee81dc5a8a0f"), ("24d8b6909ab422255a22919a4e16f6a0c0b3fd1b498dd2b61b04dfaeb4d319f3", "01563b7c018298b546888525c0991e3da573966dd99d34ee915408c00f9d506d", "1a7d850bf1328fcb680edcb2f4747c886d949e97bf85fd6b60aa4f65588d4dd3", "087607ab30afae1ee846f819ada3ae0facb558dcf7e2b143d5400b91abdb1790"), ("22863aceee15060d99165399540fc484f947db5c42595563ec4f1409ff11f313", "088a115656287a1e65f3587f46c82390712cca4b29d87adb47ac3682b458f3d4", "0c5017c3d12daf9a9251aeca71097a6f07c07f872f62dab4c9e431cbeb7cbbef", "2d3a558b36ac06aa1e9f8059df632a0b00938ffa8afd96567aa126a0c6195bac"), ("2440254119bc345afbe45fd9d9cdba8fd8743a22d475966fe9fa733dce0d2952", "0280d9257307a1f84fc0badd8eee163652386084267a01c0fb83e1f49f4ff34e", "15a47a69b7cc1b1e6cb07797cc819834b7c3774c1076e90f530583fbe32228c9", "22e038eedd76875492331e9bfc9ccdfa67f036621c40548aed72b40d45a82cc1"), ("15b5ac9ea4143f0f0f74dd2fc0e55a92364e00bdb1e75f656d21b5c055692fd7", "20e3937d1810cbf6974f3e1bad91395a427be21e4a707f76286f85d4d8a5afa1", "0dad441f37792a11240e0f9670b3c7b97c70f1ff3b328248dec4a4472553c740", "0db0fa31bff4085a2b92adc89c5738d1b153aca1824d111ccb4c5a7aef73d5ea"), ("1079508e3e34d0381e510932f600fda7a5c9d0ff4a0bde8485829a0e4decdcd5", "291335add0eb0fbe32288ba92471a5c661687308c03b505011af34f669a49652", "11a83c196ef4cbaf90f5b36744910e2ae555007f55e88419b9a6083df56c1ca4", "25464fc6affd0e56281938cc14adc631b65dc7f070f0fd0eb673391c0e3639a1"), ("2ca0ea10d1d5604e4e5f1646f84d1fed00a129390db98d3d10a873655c3e76be", "1b4a88601592fd12ff6f8b64cca8e0cd2174cf9ed4c6197a8f551bd1b2a717d9", "20888179253f625b58c270db659e75651f15741bea4963f5d9b8e8fb7f5f1f65", "2cabc10dabdadfaa0c8e91161cce361fd238ea7fcc9b6c6693622d6228f1651e"), ("1e46257d174b0ac3f0f0240b1885e90a65bec29cd7912633478d7bb1e51eaf71", "1e8899343ba3ac928559bdf989cd91ec67fd1c56db2d02681726e97d558d8991", "15fd9bc7022bc5d79a4802af8dc2f34b5c23a30d47547d4f96f16cc7da2abed7", "08cd2625340a230bf7cab761c44808d01d518137eb71f3190a5534d572fb938b"), ("219b1ea9f9eedb7722b0fa7bc2c74907581d012d9bd69f17e8ab5453dc8c18df", "28c4d4e928e04ed65ccab48068b021cb7b06d1431026aaf8df39407d24181873", "1470a672dfcd7aa02fcb49084fe2d45ca1587e4e3d451a6ae91d835d7f8263d3", "0362f5b54166ccd20a8d624f0522c7a7fa663838aee72775072f1f53db82f2ba"), ("184decc75ce16fc2547a63ada701ae946f6004880fe4bc6ad63b6a2da1468506", "0106e5c1bdc2b0f68cc223d1c39474f75fff0954d6926cf843b96dab2c3a95f2", "2a3a919b0196f88b5ac36081f07efafa5cd20bc920035f334c0112b4933a6979", "0510a4a0d9e3706026852229997b3561aab77fc87bb42dfe19b2d882d4a53328"), ("0caad9f7d510eaf9dd4af3de474bc95ad033358fece7dffe42da615ef5de4228", "29a58041978a8534b06702f08eb76a71348ca624a58e77754f5619c619e7a677", "120b2630611620e0d85176259dd51537ee82f819f8accca83ca9e3ba9bab8b3c", "02105d64f7074f107eac18b70e0ab38c6a6e7275f1d706d7495602c2589a701d"), ("254eece4f5cf71e007c96ed1eb0c8a55036a0a58e7d9b44023e76dcbbcccfc9e", "1f688f78450b7f2a1f9a37efd41848e6dedf49c55604e85e5fe01cfea33f05b1", "225456a7b20e6cfd5eaeb904fb9287e1c5a6ee74ae3c19291fc8cd900d9e802e", "2b61ba25b146fa91af1df442b9b6dc793db1b7c5d0391933a84b4b6da7d1c32c"), ("0d97e02ea5c9b5681718f8ca05ef17d33837368501b682c35b7ecba114935cb8", "2882bd35f20575ee081987c1d295f0c2fb1c1f91ba42c6f858e073bc15b36fdc", "2b3b83b490af049381b56c28eb83c586b4edffe72c91f991ac68bb7c4e3b9250", "218fe00661b44919d0c3240b4ce537f36bf9b922410d29b4e103a897c3e58a98"), ("02f79bf6ba26aa56a73d98e1159c92be87090cb3674aa74b49ece09d10e37462", "132936f4a2d98f246fa92972ca116976e25c7fc78e77c8058f2e6c9dfa868064", "2b1bb45adf0a63f4842a2bc3bdd3844b589526d18a643b7299455832f9455e7d", "09c32fa876cffcbc6cc7cc064012f661ab4a449a40a09ca5c12201c4fc80b111"), ("27bf289eb3fcbfc047a68799f6cec7c6c33e42137b0fbbad0c400ab2ea73911a", "2b53e9e9c15e5ea45602678011dea1c199fbcce67f6d2a7329bcdb73754a59cb", "08df65480547ff0d86da5044716b50ac1cd4d6b38704ccb0f1d3825dd7b95595", "19cdba865be0ebca029d4eee21fb2ad1f39b177e78e01ba2a5789ea0a75d6505"), ("16bdab6c52fac11eeb3382043dd70d84c07dd9cc891eeda7d49a5e87d3709cdb", "25f0ad6ab254e948548e3f761bb6b34ec84b7187a85cb360981e2a907fb17503", "10656cf1df907825f5fecc374b439a32a514efd45b118dee1202d8ddc9b0c27e", "0c53d5fa86a09092a13c2f5fd6eeb66f30de2d1fde4b650fcc13904c7abd3da0"), ("241334efe3068a690e497a27b847656c21918187c335b2e0023c6cee3f2723a3", "163c99254090eba5e0855048eba495531d2963a930e5ad75892f995c8d235088", "168bf64505602f9ed886ef824bf3646b08664f51605b60d0cb446bff7c74c749", "0f9256b67e96bd87c01084ca473bd2e9f576121547d54cdd1981f2c63e5e513d"), ("05096c5758514dd43fc2af24d4b6767822262a312f775cb7e42306bf5a140881", "28538d4afd97f7a170b63414a862095f8ad68427c6543008e439c1482a1f70df", "0a89d1a946627945227a339073c32cefe3e5b3f5702b2f3bfe069c5f00625c8c", "065863e77bdfe0211fc7b7c0e76a021d4e5484aeb4f21a16347c5f13a6b82df3"), ("25f019266bcb5de1a58c523e0c6eac1c190ab26653fbca8988d2831f8c5d407e", "17ff18f3fff859e679ae4b46371f6ca0a1cacca4de76241bfbf2b31f696ba9eb", "2af2350cfb7cd6f7aed73755a92a502f414c56d95429d3fba1474215eb4028d4", "2d25e7a39340845d721a03952f56a492331994818df84f202c155bd552dcda35"), ("2ff61d3512ed110fd2e6ada92ba1112782866be343e41f8a95f942e9f8037110", "2a4ba54f609a5b53f0a6c2c01d36812276835510cd0d93733603409e956a44a2", "1b50df1df18a88bb081def43325cd97168c62b37297376dc7d7582c117c01fbb", "0ab127d83a609d98902c6a5faf74d4c801d2dc123e6a662f4d55d92d3a7a0544"), ("2a034439bebcfc88ac0f4da4d9c0c03a21f6a843088b82c10ca5c2e5185d68c0", "2889aa41528426262893615f0bac71800c6967069f39bd2ef68801539d3ba94a", "2522970e741ff2fb938d6ef45e8eb5d2cde098923b73781370eed924dbeca5bd", "1bb3ff49edefe2705d10e2ece8dd4f14cefc11cb6de88e82cadfcd8dcf18efba"), ("1599b11a0764d194f6bad72c8edba77a31543105c609d1e7746fdef6aeef13f5", "127885eff97a7c3634130e5a700e4a0779db7ab8524b70e7f3df0346726e755b", "10fbc0f423542ab497858e3b46becc2825b58def33069e68ae873ad15efab309", "2856758755c228d44e7725ba4d2a84638cd9a3653ed42adbc8080f9dce825e2c"), ("2fe1c0b8ce42a86e3296be39e4074da827688ca20cc0ad18457b86c9fb3777c4", "1970ee0ba3993613ef7aef15ec530af890b91d5840bc74579e1b63c0ecfd6b21", "07e24441b4962adb1a9d5a8f8a3dda3bcf9e885dd75f84be578ae611ad942cd4", "1b7a1cad67c6d8d6166c817345cd3b98aacf4a8cee2a17159c48fdce80e0c5b5"), ("173618f91ec774a5ac0ee850a35519f437c1338fccbd67e4f2f78d38c1800c2b", "2cc459f6532b5e2b809bda151b1c76d7598fe249909fbfcc464066e7841ec327", "15324cf4560870f07c1c997c06905721aa983f9fa6ffc220066052ffa73f3b25", "008ae60ebff2c2d19ca4c3d99d981dc1868937c68e41b4d0d8c3f77be284fb5e"), ("0291a54e00b86ab3c7dec3787a8ec57d07aa6fbf54bad07d4c58a30a1f174d7c", "00e48c8d400fcaac0702559452d45a92538907f871671959652b05dd3b0ad38f", "2d7691f64a47954475e90e5c7fc2703c80b3daf3288e80c75c4b0d7493dab09d", "24442d6402387c608dc31436ba534e92c815f65a9cb88801d7a3e2b5f546aaa1"), ("277764786f952375f2eb54d5d5fcbf18d43df6fc0668f7dbf589b4cc85f5e06a", "098e3f15665f284bc1ad66f76cfc589b1d836f5d2483bb185c70de343cac7da8", "139f365a0e8c613d7022c4f77a0179b9b0502ddcae5988844595c5e43e51097d", "0a4f8c208493727c85ca6c53f3bf6660fc16cbf020e63345e473db66ce0faaba"), ("14e79fc3dca34e6c81f70d3d626c01bd997583c88d6aa3fed81bc3dd8f62b57b", "21388969ef1cab23adc461b1f91ead1ccbcff4fb5722b9c794c8f50c762d8810", "05a90244b72f05dc36d3e4f73fac1d1cf0cd9b37b3334227394525cb68183513", "26b1f34999386256b1c4e64657fee1449c17fc13cbc96001407ff5105ff98911"), ("30407f8c17f787fce1a7e54a2a848854a5621d6c89ca219d2910f51cf8edf3cd", "1f096c34c5a5854d5bbda99d9f5fd605ae1df3d7c56f1157bf0e15f153cdb8cb", "1b1a824d6e3a210bd2b00b7b4f01b9bd2c5df174e1f95abc273dce1d368b9bb0", "0ce38160e4de10f57d18de9b4291484e107e7ec36a1f7c95973eac1e2c523900"), ("2c87c9f348dcb9c84c26afeeffc02ab16a9cd90f6173083b880e85880c70b2f7", "17da85cc31c2fef6cf68ade38d0e838704b3620e522f1e963f07ea983c239fc7", "204ee33c0662f34b3a6564ebc5d56a4346b5107f17c65f778f29c7a3384c8622", "000e3e9f4a45277b9381a7cb8df0ee140bacf31d3a8ddb8cc9e91b32d4af1b5d"), ("125c0db591295b9b086485376eeff4f93d632a4b2479ef09b5ac23e41a36ef70", "049267c82469490bd26cf4406036e79be921b7c60eb20c777c0e28a2797e72ec", "2687a8475c50a6fdee94dcca970081cef1a4fb0d70644b5042f660de2f1c9f4f", "2c6195930fb4e0db28ddc5f1bd4e433a1203b322e6c9269316973281bd7f2d7c"), ("1da7ef9c4e270ee4356207d82ffdfd12a6c7e8dc4f04581d9af20055ccea96bb", "1d63b1f02838c935cae2253c315f080d946ba83cf0837f47c7b6bedeb0cd09d5", "22a331ebb10145a3763e12653de90a71c2f55942914f568dcde24049d8624593", "161691a3008abeccb8d27dcb6f8ef2469e565d917f9df6ff399e504f52758bc0"), ("0c028dbe6165e4163173b079ada83ba592dbc164e143466ddcbac958b5e7c949", "0ad23bd2d93fe75837476ffa7c334781845436168a3bdaf2887ffe06a91ec529", "18a8194de1e2b30b17e0c486cf4a189aec6307aee5453770dcb91817050b5eb0", "02f4e4c311e75f843f151ad028ce03a236a155d92185238e8c11f9befd59c2b7"), ("1dda1c46227d17da185bdf62f8976e245cafe8be3c081f707545b3efb142d9fa", "162dbc9faed75a42f22ce295cc96d12a65451d4bdf179fa7df4aa5470eec9f31", "15045b9ede230fd7d1cd8c0b59e0a75244147ecf8a5d4b79b8da15247376a994", "222d8158264dcf563f9642c3b3b136dc8909d155986a0c44d0445d5633775a8f"), ("1846bc0ad9e636e4aa1bb9061df445810beebba43b9fd63f46f2be98c3a6dbcb", "288538a4f93197f565eedec56991d0b74e5b079af4c9c7d43a18e291a6a3ecad", "0f10a2ea85eec0343a2ef623707a35368f9a90293377f04c6364a6ecdc9a1db4", "2cfd3f1689866fa1e20141acb3322b6be514270ef20e7096fded807c1fa6aacb"), ("000698a991043e7ce562d02af13e3316603f37bfe33413222b92602527ee855f", "0b1cb6c010bafcef0a4989a1b7d7e397196a6d02367fbc399fbdb0dab271eca5", "04fc0024df72f109f5c549b64aead2c0ab09de850eb34338b8a0cf1b4974f823", "003ac0d7122a07d517f321b556b0c16fdc36c0d163c06ae8d56b5bd72d868576"), ("20480d6b3ed56a82c4dff662a51ceb003c295c4be597cd02232cdb1c8605144e", "052a93229c15f78006c2f2a93e296eec60593b3a31e233bbbc02d45b223092c4", "03235cb663798d5f89b430878c145ca0510d881837a76c58e1ea889ba8ea08ce", "2d91895051030af55f37c6ab1f826fbbada59db997d5d91a42f3e71475a7ab83"), ("064ca6269193e4d63fe0f7087228c6b9a289b1e35d4b2ed8a02c824c1b04178a", "02a4b100f0f21e5c5465d353560391722b600f8ed1d3dc0d640b9a36d72108f3", "2d95a901c16f235cb5920b5785fe0b9c3e320c7afa7f2718d7afb6e12864bb2c", "2ac9ec27dbd863e04379d2d1e41c1c2d691a1b39b7e1bfd0ae7e880d705ccd15"), ("030bd57958718623f1226d9d9b78efa33d2ccdb8f7344833927162bed957aa4f", "1bbe340dd29ca6496daf04bbcc6e96ef413efe8b34fa2841cd8d9c09b15dcfbb", "278f7da5db756e25ed335f5966ee05bce4969d24eb84e140226c9e93e54c124b", "14883a40669f1b7d5b41d391b4cbcd012f1d2d8978a6422d1047ab0b439cd629"), ("11121ee98286bdee7a70291ab8384f0a0948d71820abaed02044ff3e75e0515c", "1311a9cb7b0453476a8aefce2275a1047917f11109352a2bead4fc676d1f56b4", "16f26268d61c4e64582dcafcd8a47c07bb4361f0cb54f8c7925ccb5b25715494", "0f52209cb48b5a40701b6c8d22df166f8b6f6d9f611bdeb6e744db40c94074cf"), ("2a0e37814fdd08f1fb005e8f8a429fa16738dcff9fb65e88ebeeacaa29d905c7", "015ffeb3f714a1526befa4a8e0086902e7c8b2398c001fa4994e30e238cccddb", "1b738fc2351000b46844d3b4762fb04e140e7a0fbfb8854e30020a8143b1a8af", "097952a9498c11f67049f69c21ec27abad1e977369c1e457aafdaff1060e480d"), ("0a6524a240b2be83f02a753e4542089fb2154ac7ff9c800d8bdb7394bb3dffa2", "10b226f65c9091b4bb82fe979b46e7adbfe639de8492c57d06e4014e7cf9a098", "2060ce58462b64b89df7a343d15f7382399575d906428b7653f67366cc02cc51", "0930f996d9b1eece39596705eeac63ded144b47777b9afa022f8c352c212f570"), ("210ebd44ed61f796bb8ea5b1c9681d1d033d93ac1440fd5d34112d3e316e8b70", "2325f5013dc1a964a98e70f2f02b2d550d66e0d53d38815a71c27652eccf908c", "15b9d124d0bfbc44aa0239104c59e4ec7abffd5c2a4632f68beba8aeb024ec7f", "232515dfe40ceef7a0be6cabee089ba1bd1077cdbb9d3845c85c9e344a7a52fc"), ("1795c550f00314debea674f036f4eb9ca834fb2771eaca917b1b8c762a940ced", "02eef30772e9d99d3189c1831f4334431ae7b904ad950dc39e88f413cf8d1fde", "185898af5ad89bc359bc56e9a1158873af47c6471bc6ae0a3314c571f59d0fda", "2f2a3d81730e406808d63e848ca0d4e033fc3b31dd79693d5777d068c2b2cfe2"), ("1aada52737dc361252e335a4227fa4c234d755458b97c62c25885702317ea8a6", "1b66dd81fa06b539f6e982056686bbe588b8cb0c9d7f6192ce798c52ee6f9fed", "22467a7ba0a725a424b3b9e2bd0b2808e9900d9eb981455400cd0b1589f3cb09", "13eeaa38ff04e40f93a2399259cd441d301aaaf14cee4b01c28259439e5b3def"), ("188003e92a5e7530b63318ff40eb670ffa722b968bd614f16d890e3295df66fb", "2e2c22615c39f6ee77e2b10673c3a1d5dc55b1549ee5dd0704dd659720e5c511", "0ad124a732167e69543019f59218c1e8535f21350ab078c3a26d48f44b3e6113", "0c41f505cbeadd0a31d7f5188ed1274b80b002fd8664fba401194ff3e1900451"), ("18fd7af166f7fd2fc559cd9c0ae8e1af65150370b2388ab363a5a4c5c4b5120b", "276e34b63988d60d24a2f95f1888762150d6156168b2a6313ae8ae5556b62476", "17a2eed2db691837a54e8a1f6fc65abddba599b216d1e4303dd34b464814c0b4", "0144df9794a5dec276c617854eb56566d20aaabb352a2f904e118f7830f307a0"), ("09667feed317a75f57ff7f1dfd9fd399332e2fd9533edfb88d4060f70e54f0fe", "2f544b7c3dce91cf2afaf8977e0689a46b127414ed31dae8d713d4dd9665c35c", "118074956cc57a92474ce397a35b2432b993e039bfe37e7a8826ecb06c2ce0a3", "0897d20227b23162665dbc5bc6977216fb9f07fa9e914d29e431b079aab9b10c"), ("21e23ad293a14e9e70268535d172bd2c23cd6f2ab9d429fd88bb361ba8a9c264", "12d79ff8f8f6d763016d5df7837c442be8ec9998b2de07ef2ff8fa288f98f262", "2251bb134428ae6c08851edfbd21461c963a4fbc96ee5ca1e14d6a103beea359", "0678d333ce6c9c234c7ecf24eecf3ecb2abf89b5f058e5952a6a699be4727232"), ("18ae0c2713aa09a8bbd366d0600d8add2a78e0c172e867dd301730e5ee54b2e7", "10da6cbe9577205c3d025a421275fe6725629074540a9b66a99c20b718a2f9c6", "24f904364d9f4c7367a1068a051c30c7dea4976c42df1a537dfade84c4b1a115", "0858f6a322ab97b6998850d14e75436311bc9716a5816a347658e58a5630ea57"), ("170b24db403b2f7574c7b1f61b25563f1a6eddd8e005291cefb3e8f580477960", "1410bb4a34930f68ba24a7bfd4f4dc0bf94cf7d9af7c7a059ae67e4cd21db16d", "0ab80d2d0b7f6398b316a215260342b5c3d3ea745019adcef3ea8ac3968c4336", "0a89a7430fa3caf2f30ecc274cbe7935f334e7404fc273bedd229e9a24d67825"), ("070e53fe167e865c74b0dd380c7d663d2e793fb0f822d656af39814590d28159", "13ccb64eedb693bcb97da7a20660e050ff6ae967acbe0120e9fae4f264e50b93", "10a25083ad7fb24cf803b988dffba2bdf06d16a61cfa87e4995b57bb5d4d101f", "26836dfcd97f96d1967368c45d1f162dd71b56921427398cb2aaa71448439e0c"), ("10789c949c3a0032b07f6d76e9e757f6baf0a201d704e38d749f8ae47eb4fb6b", "0e74915097c6412ad69740e4cd0c6b9742d5b643ccbaffc6fa80a2599f8e3899", "2b868e938eb1f6b0c55f5bf49933ee69e158ddfe910d8f70cfd450c4316f7bea", "2ae1124c11244ec4817f02fedc250b73734d67b67834ea2f3f4e4a37d1e5af5d"), ("13d4853b051168c458747bd01dbd388c646da8f38e6e96b6364047b09a47eb51", "2b4d9357cca2bfbf9b74abf56120c59274af40374c25985af6f7c7ab2f0749ea", "035d1cbcbc3aca9cb29d52767ecf1d6c9f3d714b0dff6f15ca06ad19de1779ec", "01d691e5a89d26706c21547f34ecc3b2c96c17f7dbb36770397ed69a702e064c"), ("062accd29aa79fb9989c5fd129870a5899ed1aa688092d42fc246923f5776ec4", "29e2ad1ef0ae5e3de30bb718bd425f64479e91a50f38c198b3c18c0ed8989261", "0d6633dcebbe21a2cea6b3b8e06b8dda4f8efc82e1f75cb5bec495c575c30412", "1d962c843b39d88ea220ec47502ebd0093ac1b7dfaedad01e40f5501af12c182"), ("1381db84f9f0fcf32d9427b859b83224acf5e7ba4607602342e101e453663f32", "2d3df0b9012d7497d1cad6c478d9732694263af5cbdac80040fe3daec4bfbb39", "168d2774841d42051c39d2f39412fecf4b60cb2b3bb19f3d41f4989f1241ca11", "00ab1b0a66e9a7e21cd8c27a82cb215a03f4cce3df36d7e258ea4abd9875d959"), ("1390be19c375e507af99cded47e7e694320e5b81c2c8b4aef464e43e02d7806d", "1c81e6f7250a5c1093c01a09b98294d552bce60b8b18f7dcc1e78ca070f15f61", "231c885177d5b6200426e13524a384da0157bf309b2a954bf08af27294f4a62b", "0be0c1c2801b5987b09a97a8a9f8512ab7fef98e521564ef12f96732b88d7f2e"), ("18f854f6328cf7eb950ba1044ce8ca7a866bedbe26375cb66a5019cd44471c7a", "0bb28f9f08e73771d2bfbde2f007efdfc7d085483b830a91d6cf833cad0e9fd5", "19a035ed250f940d443e340668893579f368884b1a481c85024fe61aa195b279", "20561663f51eeb9590d473606c1790b68391495a947100cd2a4854171d985c2b"), ("26449b0eb844a46bb40e7b62f1f4beb7a2773a690b9028ac382098ab0382aaf8", "12af0aebf50e167db901f46c46a3fa89847e3a7f6ceb5e4cd89d44c0abf02ce4", "0e8dfb154900dab8d64baceb0aa81c724388a9b7b2eb3671bf7359f95f9e0ceb", "14e865e751de83c6e054d42e5610f453a04f87fa90c4fd8833d2b1703edecded"), ("155404c4e799601a18dd5e7ed4e51b8d425bb25d5eb9cd9acba6038c756633b6", "1a7355be6fd0aaebf56e8b0a2dcd775a5e3c056e56ea660ae840ad576b5be938", "0102cd8635585b483da8525daee1a357e75e52461f8b8728dea5b298f0c401d1", "26ed247ff8c906f96e467539b04d0af2dd098d7f0e239ccf4190e6e2b565c7dd"), ("22a087e3bd88bb955a1fad7920fcf48e24a1ea487a1cd0547d77390829d9a0cd", "1bd38f089737f2ec1437c158e35cb5db201e7c00b7f2e6f6716aa8d190b28fed", "016551880b63e7d919eb8d8ab68b8423fc8e7fd4dfcf95040ecd60e1b6ebd29e", "03ccf4a644b06493d575de85fd5d57b6b54bf1c05b9ae65fb327f2a6cc57d781"), ("0fb768736931212a5c7ea2416cbaacf336c46b067761bc3ba95682ef1ef4df09", "2010ff856375e7402f0946eef18dd7da03e4b9c26d3de61a225f90b313326aa2", "0016cff816995660dab06ee6c5605a77b76087ec70ee9e818a3749605b9b9051", "18157486c4e06e5d5f8e9739821d6cecd96088069aec8eb08d862a5fdbd4d85b"), ("1cebf5eb613ebc58437db7978306e9b97657dd7980c4d98d8df9b2d54ebb5332", "2413380dea5f87e1697db62702f1aa9732be7465f3bcb4c6edc68fda698737cc", "0606f14d1ae10ee8f057577618d6e9d747a74c994c7522e37015e5eba1f741d3", "1b3ed4fdc52a155a4462ae48f466b5e16fd0c5e9efc9caade41db2c54de96154"), ("072c6e494e51821a13b4206815165617c7aa9e395d63163532a5cdb32c83ae82", "2fa24867b3924b6261f3bf99683056f8d7dd22a845bdf8928f836d9f0dedc05e", "138257325fc9121621e66cd513953bb82af28c4218cbcdbd027cae88c16572a0", "127f4ac842a050003e01bdf2946f4601a310cdb8d0cb210e02ec5476844b49e9"), ("1c9414c9e0ac8d4d7781e86d55b564a4009dc103f611c1b2887f1816df37bb4e", "07113e73516b13a82073340019ae906f395ab44673f9e01531d28bbfea387ce8", "081df8e165594cc70e9cd4a612b8b02909d8bcbe5704b104789bb771f671e6aa", "1a2659dc9ed1542a2976a772076ed8b04564fad0622cc0c0591a00fcc874f990"), ("16c9fee10b61fa9e30613e9f313ea5e05f4dcb2654525ffb5370d4868933a28f", "1b52c7ad7da7fbe62dbaa27ee2ae3b0c213ef2b7d5877080c6da83936d8e3326", "0a2cf0452841adacfb90787f90f6e936ebecb359a493aefa81e96d9beb7d5caa", "095d9ba56ccdd7061629fee89602c77cf83bc2c3c2f53ab694ddbf81afa28ae1"), ("16aa7230750ae438bcdd0a4f6706c5e21560e318129f2d21ee1a45c566b2bf21", "1840dca7f394f83c4f77b4f1b471a21ff57348418390a6af548c5ffc39a8565c", "094cf610aa17880758c9ea328895604d70070ace0440732c0702aa774d9b2893", "213e3421f717b7694e479291d3408f26fb1e3c186566e2c9e37a63e9da6c5fce"), ("2211e2b04c08104e6bbbba2e95714cde1394e6ee1133f311572c7be1352a3f95", "1e0dcab0e4b00e179bd28891478d7fca1a1ffaac0039e65982b8a0a065d5d3b2", "0b3560322bb97241db0728a6dbb70bd0433ee38f4e6f829ba5366d9411cb2ab8", "215eabb014a4793b1c2d7f73f6482bc3004a9f4cab99d2a9dd2f1d2ee8580487"), ("22b194b82774e64714bccc2532c1d8d1ced2a2bd5e3dbd4885e44089f8708333", "100419b9386060326d33b3857cfadf526708435b369f5ebdcc67aa62f2a56473", "16b17c44de3719c975a375074b74b94cc5438a188853df08d49818af75b40f30", "0d33275e4b56a6f863797d24536261318b4b4533876529a69e62528f80f204b5"), ("305c7fee14615ed648989d2700c035faa6ff3ab86fd810a8fc4c6310c7485fef", "1e7b8a2bbed079a94d50cf5c1c9841bbcbccd731b7307fdf659652c974733b16", "2fa9202959342b2f82c6dc302abd71f777e9428c2fab1feae0ac63f2ef85341c", "2bde97f400fb4e01b6e898bb68e26903e4fee5d3af9e1e15b17a9f0c237eaf3a"), ("15314cf1c50cf234d493025e3855efdc3a37d9a01c4d5c8b175b1d38ea38aa3b", "00affed2075713c65977b39a0ae3ea9fee776bdbff865cba150356064071efb8", "193891d0ea31681682a9dde8817d9a3526f3dd379dac5bf9253f5c34ec114344", "07c9bd737e1557c358e22793cb22919be528933a62cf96f4fff801ef55e70550"), ("118c693180fc1a7227e35594b2d2809e229417c71102b684000de3fd5c81355f", "2f274ef446d39c82faee0e2decc12184cf64714a1523c1235159d07be8f25194", "1291ee4900e7d89206864f700e7a19b49a5664770fea08e3ce7d8860ac7a1dbe", "24ae803b5454d96820e7ef22438ea6de3dc90a98d3a5f9b17328033ba8c7b788"), ("24928b616dca4b42727e85a352ff252c036be0198f3912a0b53c6a01594bc95d", "104a5a3e83f06ae798f822e7ef3a29756558059781c0ffc3d34c75559cdaef1f", "113e743caa0dc032bc22044e2f421f8eaaa314f6213033b3b16813e2539c297c", "1a65cbeea7cf79ff42bd020e05cd5f6192ac9d8b47832e36e5763e7e0145705d"), ("051fa7659d55ab51a405bbbd96be99de3200cf21655b64aa515599708632d2af", "08d73b48c40b82d1d21090dd5c2504584a925ef7bf7962b895f3ceba343d1429", "304544f33e493e49144626ad16d86f5cbfa433aa26147e5b8a0e56b229a8051e", "196a8e2ee0ef73e2e64f281a7c1032ecc06b33e65fd194a7b85f6955cc3f92f9"), ("09becaaa8c2ed95d8a84675dfb2a43b467e24b15dc27672c43ebeb004612a148", "28dcb0ebb23b3e316b633b7701a958bed917505e96ce03ea11083f200df734d6", "098e9d87b3538deccdbf9d341b6c596da85be5df25e7e4a7d0376e73cd8a1b25", "217e874fa5f33b2887fece7e37c9c218e9f396131dbfce1a5f7bf4ed817d0c21"), ("190285f215fac9af3ea28a10ace7e743dffbfc4d82a69a6571f63251f26f7102", "073e614a36a360c35cc76a4a8c23578a6cbf2fa55f069d261bf90a3091281cb7", "29db63442c3caab255e585aa7b40d2d7c738743cb4c8bc2afddeec612e427662", "0e6a58124a736b95475498f3b3f6a266f71e8f0beb2752817d49d367e979359c"), ("2f1fdb3cabc8391b905e6467ba959cfd75b3a44aa35849c1f63d0c7efe009659", "2f2a2139ee19b6778de55a6220cfa83d6ee0d5ef75e6ef242208ffe788d287ef", "05d0b3e1371074a7c3b9025c41f74b9b94f46b6b3ca290e795d0798cec358e21", "21f9672ca4de97c1ec1e9206e0141deb50e3548280458af05b525b48599b9ea1"), ("164fa52b6631a90dd6e9218211ef433529977ce58ce63e01115111d968ca0e5a", "2f1d8c30a30afbd6c2492f72efe2e33391a4f48d1234103df989614fd8f7fe3c", "2a9e2abb484326f50f89251114758b0d3af1ac7ecbdb1c37f564c281d810f79f", "156bd20abe1354d32557f15722ba821b1a49a3860cc0ee0b770715f01532f35f"), ("13b9625b9560c62b3b359d7ed200f6f0730684eca3726f966d27ac9eb61ccbe9", "248fd87a22c3c3da834ddadc7affce88eaf476c1efa65469db887cd75299f4b3", "221433125d748bffd8c471ed606c8277ae23182b9d89de3f328133c288f9feb1", "23d0cef64bee4ecb5d2e514f6040e53a69d5ebb3ab8c0dee232dea169abb7a76"), ("2931903a7dad352dcea0a5eac2267bb22f4da9ddcadfc46414c31d6edf63eda0", "2d906ee819241c56516b0316455166ee049ba03ca40dac1f02d3775b1f6d0211", "29a24ec436ba3da3c28ba69261601a1472e66b01820de4688d893b41bfb42783", "0c77c1aee73c4f441ad120281897afc80bb24848d9b18975a83ece71521ca3ff"), ("280eda693b1b6ce6e2754d32ef6dd7a1158230185675767bfffe14d53f6798ec", "17ed07ee336df9a94dcce20e66e49e510531bf040b2c0a727474577c014d453f", "1ebdfcd89755db526ccbb298a01353067d20fa11b16f69e1524e29995dfad2a4", "0e4b8b64c42171c995edc6ee73bb3dc655269b4698b064d3f1185e69bd19f488"), ("044481a9c0512e73d45579443a64439cde6f77253746223803575f642247343e", "206503a36ac84448e385a9d16e530a8824916d4f9736d2b67e209017d0a02a47", "2ba12678aaa43210ee9530857922bd4a52c4fb10f0224290bcddd42c5790438a", "2589d41d75943ab05fef25198a175431b14f49d0d553d64f92887999e04fe106"), ("0ad7f7cac9546a5f6d40bd696974f539d492c299989d9bbba4475ef7377e9132", "28339e42e6542828d5dd0babac57f0bd242afd0e39e11e0f0373ae36e2d0a6bc", "16bce55ee47b40cf6c9c48170ead593b9210398a9c8028c1ad368bcc372acc25", "2af86c448bd0ed5986b7bec21e2479ccfb334e923faf320c699c8aea80382e65"), ("1e158d95c6b8948896813562d3912c0496ee032727e40eee9024cf61c6dfc68d", "1444038c95edf752342b11685929eda606f5da2a88fd71df8741535294e79618", "0cff480cedd742a38a28916147d2a180409586012e79070c30a18e398186ca59", "0c8f2ee9ad2d7780c6702d7a319413ae523ebc18c6a606e82f67455150894a23"), ("242a9859f814e0ba198ed5facd6630a7b4260bccb35bf12567612c7d6a547334", "03827a53fc867e7aba43945cea5140a106cea2e462fcc52eee2c49d87bf654bb", "225c06ee2f5f490a0a1253cf06b4cde0f5b7db50ff4bafc23569700b697d6925", "15711643d9f1932823a19163042f95f7f180b508ea7fd78adc5cf643d93bf08e"), ("23697021449e9e90d018b9598714359d4089e8b301d2340ab7fec825f24e07ec", "0c417a1d03cca8fbd0d33e959a2f42b101476a2df2ed034acb68e28cfbb34f6b", "12cd974961063df2e8b0099b2625af7d61c4702844461f314455c8dd85abcdc4", "0ede3ff09383fbdf42209d87b3c62d24ee9feb9dbee9d763d488cf713434275a"), ("20bccd1f8f390069010dd76e37b9401050b862cf2fde8746225c2554e88c1f5a", "0fcfb34b9ab3012d3a554f1a9ad1fbd41e3fd4930eeb89dfbdb6d291dcb16bde", "2a43695d7dd3bd6774469aebccf77f3d01ca5d5ecc15bbee8e5819a4b4470245", "14a1c08bb817fb9881964b2c97d794c1ddc5a67742f41418b78d099b80396bcb"), ("283ee7dcf761af41070bfa9a613089d899bcd161be9ada6db24a2e48e2aeea14", "1ce6ae32e0727f1d1845c62fa3df7add01757c4d23157355d0ce618ccd3fc117", "0e5758eb0bbc0db2906a19a3f23abf0f8bbe5b750e96bdbd40791f30ebf943dc", "0299ce91cf84d42f4b21803c9a9098e75b365df172544e19908759ae5a0925c5"), ("30497ac562506f953b6ed17a01697ff9a4247c6dbd846e5ff6deefe645cd8672", "22b5c462bed30cc795d98a049544b05a3c25b38b4564644ad07f237b706ddad2", "050470e1ebad171d198ec3eebd134d46921c4364a8e192b719b2509a8d2628bd", "00ac955a7c3ced15ae9a0fc73bb6b472e09efff72cbc1167fd8e1569e0173b32"), ("0ae31d062efbb300802ea80509f15469c0a4ee814e04966babf6f4e9d576a728", "02b8b02f2cf9258bbffb0aea5a9b1fe52a970af13a842421c3f2bc78ed252f01", "120bba6089783e9399ccd0546a75bddaa28e2670b9832cd00d598e3f1f8a88a6", "19272f4c1f35d9e823a339493895c56490327bfc357f3b8f1d43f86a64f02d87"), ("2f86204bf9fca1b552769c3e1f9be756f00a6b5dbd6e470781943c38e8508a96", "183e251a9cbae6c8c513bad6d22f001998f8583ef4a989569c889f6a17be6132", "12417009082470866c5b344a1e23a3444c06ba62f801e0b773902d11cd5fd1dd", "09ec0968da5e4579316dbe863fd31b02e9705c127a453db990968c04223c46c5"), ("0a00bd5f8bd42959b1692c44eec872bf34d6bebe796cfc985911f92e2245ee71", "0fd083f7ae85a544d8df1aafc63c36d10e24431b6fbea80e571577be32a3979a", "060d423447d8cdc13fb2756eba3934699299a8a9cbcd53ca1fd09a7147e35e53", "132fb68facde8007bf163073d4231c375df2e9f551fd7fd5c4d6a833366f94f6"), ("0bc6c0d1d77faa44e2a7aeb22026afd0fd2017bdd6bb105f4d4559fc828880b3", "092fcd4e7bbaa8ef2b4fdd4a14edbbd8d4f6c111cb89d349c3cbab1f48584254", "2aadcb2f357772d0ececbb86c715a4e70be8aee64a2213752e56037b0a483871", "25c2af888cb86d93b7e0ff3f530a4846b2deca29d80f752244dad5cbfe544178"), ("01f7c99ba5367d5d40fd89d8ed977505b04220a146aa41ea12a7ca73d713691b", "0b475f87189ff73a54aaebd8f12cf6ff3a9ecda6c3f59c3bcc49b853e2e839fb", "1b184939cb6ac0431b145c72e160a3e43970ee7d4fb2df4a1a3fda230d285198", "10935b0bfd02d3c0b61e0831a51b5a2a3ad5b1e1c275b2ba3d9aecea1f173013"), ("0ebe04aae212997773112861263ad576eda74bf9186e37b4488e417d8f2b4065", "2cbd31e82e3666a774be358ff8ffdd6762e8600b6ee668b0e60075ec1591c6c7", "0064de3ba22f5f86aafc5cf3949b397e23b782056317ff31056aa3285a048eeb", "234b0fce9cb58755ca9aaff8132a1307eb81312d1140d35fa74c464dc2cf9fdf"), ("1b14ce055633d04c6385643b5f9b14fe93089e139e7f0947053db172361c2aa1", "13cfe7875ef4e6079f2e354ef934153ba90c35c984e3d59de7820db4c891cfee", "19c9d0c508b0663c81f7e176f2a9a33454ba74f81b26dcc56154adb530ab1f83", "2ce56eac86cb1fcb8c1e39cefa688cf79683ee4d7d621ca8cc6f48cc61a2ef05"), ("0c7ad1736497b9b0e36ae7beef9b03391acaaf61e47b232f061ecdf19b9a3d1f", "0590bd667c02ffd444984c09796d7ef9993d82f029ed21aa9cadac8e933d6dfe", "2378ecebf41d526dff7200e77f42d8158b0a9aedf527b205375a3b1d1e91ddde", "1ae5ce9cda38d8c083dfed2c03be89c389c52900c6650b234bdc8d59d604b529"), ("281ee3c934e135ab586ccd59e68e4acb682e367f116c2c6686bbfd5c7ab12a79", "1e71af2d32cb96fc1d466b8ec5c07f6a1ac41a39d5f74aff20bd85dfbf2a209d", "10a8cd6daca395e314ee786105b6ec754833962bb8007b9989049b871d06dceb", "018ab634e28b05f8276f1b609825b6c869b2c18c0cfe7789607cc4497ac7b823"), ("1308def68cfc380859a002b495d86871cb9ac92f7be63f8a2408d6dab1baf66d", "26eab507304aa0ad6061515261184a84fbc5f612f6dc9f1a2e86259ac1d69783", "1a9d61ec5c3bedb708e9be573d8dd43e5720b8917cb472d4d9f4517ed69db408", "091b5866748dfe879ff22916e74d0a1de8327447e6efac6d8dec1f7144c52e9b"), ("28ca8267f99c92382b6c1731a9c449175c47eb9309ccd22385a4a0cec3af61bd", "1806de132880bebf49801fd10f37fade319bb3724fec91e4b6d631719fb0f285", "2d403d487c52901af7e813fd5c4a62186775c79e471119ca119f6f0917724912", "06e926efc66b4328409c235c8bb87aef7ab1bc89f645dd54b221eb5df5e8360e"), ("266b02d9aaa831234a17e678a06e88f4a06d713e9456947eb2e47ef7a7a96efa", "24a07e5509e29c43b8dd13417ed5a817b39be913cd501113d01c45fb33a32c12", "17909e271076226c6e512f6f51a9e376a7b2d44f30f3da37a4858f4867e94732", "02c3ca12e4bc17d5d377834ad74301d4f365076da4575ffc9fefe278bc1150ef"), ("05ef31373e747403e56eba46b2b5bdb6efc75d81e60e74792b6b197bf476bfbf", "1d1dadff48af5f3b8d66957df2215154ff3874f2cb39146b7a528f3bcfc68bfa", "2e71709ca4236503a930d542478af79253510bb26043092c1ba75b7a3304c472", "1819cdc71579656c052ab358862e14dad5765010c0dc0c82ed034e0c4ab4e152"), ("195f93b4efee39dc745fa790a7178e765b4b05e322b1d72f0cf1c45078109c2f", "2ad791731c6e9ebe188da4fd9ae400967327bef864e3244bdeb64fde4a7eff6d", "285fd6177e9fb7fce1fda6fc760e81a8884cbcd1278d8f5458c01d9a1b094463", "2fe5cae050371eba6d1bc049e7e53fe0d86d3be4bb1a4daa9ffa6fa08c2203ac"), ("07010cc1e13d44ffd123a304f16480dbb597953b9d20f939cee3f6ae001e1ae7", "1af0fd21bb03cae76f6e37876e71c0cc0a688f639ae3a7b74900eb90cbeebab9", "265a21fbee5f61d68cd0dde30bd1d45f5d16b42ba9b1c451f623286ba47f7709", "056d0a86d0d44a6cab87e03392b77839fc8340ec6c43d08ff8288a7db938f57c"), ("08d098f5e2e2acccd3283ad3a8261b2545946e882e90e5710eac62e6886d8fca", "1a4e3f498c113c0dad34791afccfa236ea5f21253b3802e3beb09aa0e1a2c286", "2c2961957ad26d06df3ae33cb99a9ac5082cf942980a1f4a66189c58b2b79727", "2ca8f8ac4a22ebe519161f3e19d83e1354d20f00527995bea2465aaab02d6088"), ("09357ea47604d0c90a0b00e0b30e9333db0b91a974ba94632ebadba792b7cf9e", "018516eb6bcdd496a04c94a88afc0a2e1678c7d86cb82b6f712c19951cebb490", "02b9a703fbf4ab88faecf2026dc944514608bae1272da2a9560332bc8553b5c9", "1c1c5de9a5821edc9633550558f7121c771da470bf213ced780dc9cbda783382"), ("21003330eb5197bf720f1488430b5d4a30cd2384e0b48e44be802b471a469fc9", "28984c09544a3aa35fe591b61afaea090bccb86898abf6830d97a9c49fa18fdb", "0a54fb31f3a34f06ac90832cfe07c3d73f82c70b548fc3d3378892fa8512cdfd", "099d3b13d1dfcb4c4519eb2b560b20bbec0aada3b9b387d7ea176b252c97b8f5"), ("0d5f4b07e3ef3e24e4243314223540568f6172ac45d09e85e85a9066cca289c0", "15d809d4ed18597e4bdb1fe8ec3de7c8ef14d78824e2bb4496b9f1e0bbe47e7a", "1c45c8f73d32c7dd7274dee0172617224bd69a5c3963311d83128c02a3572788", "0fddfee02c6b1960240f02274d056347c861381713d47c3d27cdf5a9334f1e37"), ("222b839da685dd738fccb3dd143bc43b7467ce2ff32234d6f3663acf655fdcbe", "0acc3ce38d86c09eadfd47ed93afc17767780bc503851151a5eb23a0deed1862", "1458dd639224ecf9a9b015ecdb28c59e8658458a9b2f1c2ffdd4ce7d783bab00", "006651d1f4b1b5529b47661709c20989e3d6cd511a0e75e2294ccfcc9905e887"), ("1d204bbe2ce6cede88e10cd2207fe5784f6173323327a709cabc1dfa3ccd973c", "0cc0a025cd1198438e4c51d85686845000c1b5e6b2e31ed9b2952042b2d82843", "280b4e4059ec10aaa8b59c835f046fba2a1db8fcabbb93c3d27c80321a62ac3b", "02b26ac4c706b45b4a876b2e6b6fa58cdb6c4a3e1e653f76089e4fa24e2fe467"), ("15a26233931fe93267ff9d727bf0d4dc972d183d3eca73173b0d786d9b2bbe79", "0933ce90d67ca92288424850278a22b56a27ef75a71ceb2b149d1525dda12eb3", "10a54d785bd4889c00c3cdaed9797401f0edcc3b5ccd1ef5363ae7ad4f6b02a6", "27a7e4779f22ca268a1ac429b15292af1b2096a11f73032266c0e113849b847c"), ("16c405aad29c908cae9bcf00e3da98e3cb17c633eb9295df89c0328a09dd45a2", "220b6f2a061a6a6eb67b62e7b1fbbabcbe839aa216ce03d82fff409ffbffd87b", "16fa6ffc13c0a9d9c2d7058e8927ce0b9ddc3cd7a77f9e0636a11aabbb1b47d5", "20dda8bf9acb6795965152f76ad0ec7fe08beb39ad9f94660fd613c1cc501471"), ("2590280326f1925aac1a830578f783831d1a7fc6827192942185d7c84182c4ec", "2d9223a903f5e38a63c0774891b5958f8a5d8e97fcc9fc277c6dfd0ac9be0c2c", "2c0cb6460cb85bf8b16e776f789ba02877b97112d191f794bc8e72d80b90895f", "1f2a8104178acf3fa71e0c88adb178a9f2b6d8b2d7d9f60caec675b3141434c7"), ("1ac6006c2e9f57900cb7e542e65bd40b101b7de8638962c1e6d94dc8d200af74", "214fc5e806c13459fd1e4e60f97fe0140988842c1d81f9ced535b767486b7549", "01facfe8149fdbb1b296a7af43b9315bb1f336ade374467a7cdc95e06ea12a61", "1fc5affec60a630173f306fdfb0f519034cd8e3dc74e511578847587031c4758"), ("1cd4f34008ef630a796069b5935af12dbf4379972f9e0f3abbde6e04c3fb36c0", "205b9e3b2b00226cbde7a8ff902d73566d0efc2e4e2ac5d5ba4e9291b88ea322", "0649991dd26a5944a38cfb72c53af4b9ad798785b0cfc88f72813250c9ab8900", "0f69c3498a8f48ecd2cfa94797d63e7dc520870891bfa1f9f70df01d54c23649"), ("2edf5eded65f3df063361ced74d753039b509079acb619b3763c7f4d850ccb10", "1291bffeea3e83de036100766d2e36ea27c423383750fb2e8adc535b5b5e7066", "2ff2cf1cd8810c23460030aff740b19e7714b348aeaad26403ad0ee115ded6a5", "29f06e608c29214ad956ad64d631606998369cee292bdcf5ff6f1780506c122b"), ("1f1947cd4cf72d92ebf321e709945e0c77c820cc2bee5cd33dc862407dc5f9cb", "0817da2f8df98702c77528dda5a7240cfec354d041aba89e7cc17922f079e1a0", "0e5b4c64f2454446850f07c587d8a94da43c04baccd8a270bb3cc0d170571e1f", "0a0344d94ac78766ca2b1cd20d7e56979e16a0718f1d96121a1f1b10be75e490"), ("1912bc700d2793b32c2bf304513478cbdf5211bb067dc6a388eac9c8ca26ef65", "09e5aa99fc71be21a0f7404c806e2388491a49e45b1a460ab50611ab3f67a147", "15fc043d8b1e4b50f0fce67c2901b738c2a4a522c20c33ddec5e50e30bab8833", "2ea534c091239d130a95dca01000308a54b0a1361bd75590d882a92185f57cea"), ("0db6ef43b22d4e886b874d283f998fca17823d507f0b6106e8500fcbec49d852", "0798ff5614ba61fc49c0baa297bcc1f702f2a9e0f6a89ded68a5c5f4aec5adba", "22783e93ba2f4095950477c6666ea6054b93c303b8ee4f658b489e7dffa668e0", "28d3e505d956af0b7de3a943350586fad8d4095ebc308dcaa11361299da09ddc"), ("080bdb0256d3fc72b1640e3ff4d7e3d8bf61f9e053e7a5f3756d6f3122167af9", "1ced7a1a6fb18280dd7c8f7beb0c459fe1c4524758afcb5267df2fb9823d4e3c", "0aa2793c77a3b84747ffce2e1db5441d4675dcc565ac965a29466a6c6cbd3851", "2726b6dd507d69f9babbc6e5c758e774d551d133cae77ccf375cbe94751b2dfc"), ("2cf895f6c538264fc3725f0860ea53f80d0dce290952f2434585b68d77ab3df4", "05c4344177c72e8d494c8e8e8152f70b5e4da35b05e3d5cc8af976ad488b73d2", "28c29f89382998141fbeac9a72e10684d479e30cd4074141434630ff3e2aa329", "1edab568fa89aac55e7c721304dffd8b9e0d1d7611ce287f0fdbc597706f79dd"), ("1eb2a4532ebae42d4c641a005af123533355f6ce5fb46159901fc196133543c7", "1d9745d563b1e7aecacfb34ba7fd0c9c2b8dbd05141bcd4fe513b53ed5d4379b", "00cec84ce14a399a74d7261000eb3def6ff2ff6f650adfe6f54d7cdab28b14d7", "05dd30b3383a5e8b9bc131e7a71713605431541e0bbf4f1ba14e793b8f1f12f1"), ("2a9907d322a963b0898d6cc32903ff560e25f336f7a42490e90d67e28b7ce516", "0791f48c74aa7cf959318d04b17035a9b1e0014037367bbf6fc0fbfa920deac7", "08ef768b7f7846beb62a4383f6cb3bb5cb6cac2481e6c46b13c905ae6b3f931a", "1a95f758d1129c2abfd8f74d02721696a41f9e400f14655814d5177e83c88e76"), ("029a456dc11ce5e8cc2e89b33b06f427095bbd5e7bfa0deaa988281da24bb4dd", "1023cad299b334a3ec782d7a76317dd50da1bba570ae67941845cdd26fd4786a", "0b34d9f170560e700f14d4d42ebfc7bbd2edbd6b90fec3bda2954ad6b8224571", "20b9ababf88bbec45fae13fa3d31f0a2bcca82c180a01727d9494baa56a8e74e"), ("2336f4b8f8422ed31bdfb081f3a746ff61268c350dd9173798bc067eb109d47e", "2fa568e7d61d590c74c37f7cf86267669b634aed18ce56558e3b162f6c51dfc0", "1264661ed383927ca194c6a32b0744b6330a7454c939e63e13dc9a46ce385ec4", "28ec32b9a1e6c6b289ea0f827d60f4c5d7cc6723a9c6217aa4366f9fc93ee1bb"), ("29dd1920fdbca638074eb8a6597be9c7e4f35296b54e0e4150f7c35e77017aa4", "2308db167a764b4d573b76ff8abcbd6a06f9ed0a8e3f1a9f6244fceed64e66f0", "1bf7d3ce8bf9f690aba2d50d46f41a36aff64d586e93c5cd2471308be9a5d2f7", "06cf832d9cd0f9d6147ed18610674815008114a43911b7b08dd752cb0b4a5d5d"), ("1b42575d59e50543b89043371c508dc7521946f83ea03d7d1d7776288f662cdd", "15b99809d5ed3550b0fd7e0c75d59f01a13453ecc20a9c19910b31af68614868", "1cebecbe8c421b8a5e1fb269d60d9bd02ab1aa72070b84f462413f0c7044f99d", "03e5c3cabcdc9290070687164230bbc776658f683083a8186d8b897cb31ae7ee"), ("1805da3e68ec27a6ade379c77e3fef08091ab7e93f69d9d137580cc6b6a3095a", "0ed02fc8408c9d6f1a6b463d6630b359f25f38d388abd16e35c3d3aa49dfc31c", "2928d5fcfb24c4b153ec9de0e9c125c3c464ceda195ab04f9598768265d31668", "2ae89c7cb418d31371b2814a2429eb59659f7ccddf83b3241430d71cf750ea36"), ("10632928c9ee674af90d5e7f9cb1f221316669cd18f6cb13e2d97b3b3e9d4172", "1116c3bd2e903ce59ebd4571ec720e19aeafd3858de5a96c436e67f20ca994e5", "22e178116edc7ac972d04798577a273bb573964eee3a7e90c8422a5b9bfb3120", "056f0ce2570775b76edddf2100e9ae7c51d780a261d4c24bf1f6c2ef2beaaba9"), ("18e7991fb4862c9b958528679a8d38e2d605a16848be48af16dfd1660cdd2a98", "1d4e771272ddd0ea213b701c2106348585474e04b8e8844db4856c7bdf00bc5a", "27071d507a80fd281922a6bc688a74b4cbda3151db03febd50f43b02403f403b", "2a7049e23a32d8e2c6634493b69c1e042de8cd0a94ba34700e057b813ad92f95"), ("235c47accc6cdd60e80850f8d6f249f4721d8d59a12d551610cc2f48f1fee8d0", "2ccf0e2c03497d96b1ccd9abcd4b975a5cfe508811099ab0b65b48cd311effa3", "00dbd9a4d82b6168a198f3a0207819eb2c491fac21e6a4ca28b36db2abb8e652", "07c0c3a5edfca72ff0156ab1e4e9bab2dc9e58557c6c755ba5c019d61acbd02c"), ("1a458e20971486d783e17c6d1521cc79521ba76afc1276a08b83ca7f87f01094", "05cdf289ef06110bdea56a629012cd3e4d6f8b34c80348cf86ccd048a7969b63", "0a4f240df9559cf799407c414719ab386fcc7e87dd1e642f0fcba4068f22f6fd", "2352f24bfd571053d5ebaba38e9495a375a89f47b5f60bc05101a195661a51c1"), ("1422f62ed0b12bb965219c827a174eea62400973b3f21ba6cfa5fef6339e6cbf", "26a73f5bd0ba9216e39b59356f0f4e48daaf9b552f148035fee933092c4cabb9", "280d1c09701acccfb71125255f55d810872cb716983ff8b11189b1fe7793065d", "034a371e89c3507cdda863dab3fe669206f772ae3914922515d7bc974f15bd45"), ("0d813b17963d3b1f1415ad2ec39f75735f1d50f276b52517032ee9ff4fd09a06", "0b8e95b9b5ef6b50ef125e4efcbe6aae721aef78619c39df1c7a0b6aa946ed85", "05eef4afe0711fd972f911e9d7e6387f9a74fdf5fbc3ab22c425480d28fa4e85", "19911b11fdc35721a973c5e62c952b52ed29421f3ffd465fb7cd518e643a615b"), ("262885d3df56b92b08c2c9df171f9a6ebdd045cc046c57ac7dbdb5058c5f2c23", "0708aef06d421694a134642e5f9cf26d59cb40954806ef550a3c3af4e8f1a690", "19db4932dd1ceb3577534f8fa779b511c66999c10315eed1bd799942f53631f3", "2e87a7097e937a73ddad239e34f1fa068957c6de1c8326206d957ce7413e6c85"), ("0201db5db4bc54dc222ea11e46208e99f834fb77500853a86e52b4b0d43948a1", "066a6b3239cecd187da7a189dbaf11658affc01a276216407eed20e7f196b21d", "118887f1232bd41cb87f7f6d7cb8ed54b5883a65a9aebd2ef03d195b71da4295", "02c4eed1abec0fa4a12f4703d9f6c47624180349d01dc2d2b71ae6305b7ee5fe"), ("2c5c785033ed90a5133b6f78d0a621db5f193377ec0b9d04b0eb44928dab5775", "1416ca363e37059ffe74a48aed89b154ca0fcb922c1f41f4ee6be2fda28519e7", "1962d90511374d75bd90e306a28485477db59e1e0a375568016845c498fc7fe9", "29420c8eca7af0bbbac9768dde11c10ffc27e3653d8cc715f8d67d0d2d3917fd"), ("214d3cb03af3efce45ef3358069055c0a6371ac43e52736515bb45fede240101", "2e1a7354bd5b9a55788a380166bf68c888858b542b5ad68b90ed14a47afa6590", "1309e279db38e7764acf13c07a6e27c0f3315eabe2db7dd91cdeac387213e7a0", "14a69bb82bcc257e5751251a68d2f5b2ae4da19e3264982f320cfe29555665ca"), ("17078130712804570855aae0f019dcc3a338357fcab751307d669e97522d19d5", "231addb1d1841fe9f2dbe5b603b4e61a64f1964ec81f3c9343f9a663d700ed97", "2d669cfe15d8a1ad20974cbbc7aa25caa7b4f1c9ad980a16fd543763f911c4e6", "299043086bfad20f68d4be6ba283141f953b42f6e499fdacbb8499dd309e3f6c"), ("2ab94304cd171c08bde127377b3955b68316742c3a1a121178a5bdeb8ffdfc30", "09897e8b7da1c37841c6e3c147aab982edc61de9fce308d550962a340f574c90", "09e5caf3a004be492e23376c981a6c126addaee966eacb46c7e026f7f5322305", "08c95f65a51b3705c65433859c993c8bf07a9c2ea1054e6e912316dbd6c8ab9e"), ("05ed95c095fba4e0c9a66986607e36ba5077046ee4fd8509870cc9f1aecaac22", "0236bfbdc52c239a8290b08c83af357c53713516ee0af082eaa4b5a2b24a58a8", "111cd2089d43b0d20a3047970756388f86d8d1211e1e436474350150785c2270", "28e90bf28139c3df401c43b5b62e36074790c41281d44ea1e8096463d7cd46b9"), ("0fef736c3b54f885eb89e476be75f5ed0c190b805ea32e28427dc22c7f644bb0", "2ccd3f2ea0a336403ff33d89897d468679eb8653f818262642c889014bbf8024", "04d7b12c2536d1b62a73c1010987e1e68c3ec44e127e4ab892231f875211e89b", "1c18cf8ca3a1bc662e39c46c93a4eaf08f0fa8033a684b90e63d87a658252f86"), ("1b6eccd35fe31c07c8c1953842a538fcf5ccf47aa2b20580c0e10fb1cff6e502", "00f7025ddcb6bd715d69362fd0f27631f1007d16eab2f4a090bb2bae4cf229d5", "3016dc2d9300110e29d9cfedf7aa1c98591364dcd57be175fd2be82df23a8c74", "0671d2d6667a88ae2ed7d2ea8de11fe648464284a6376962b90b207a3e9a0f98"), ("0f0a13d775516cecf081427d46163e7af0ac7dcd2e759eab1251e64b0452f2b2", "222e9486703e6e60bc4079814ccdd553b3e8780659ede9b4a4d04310ddc9456c", "087194641106f68a618d60423c71037c0688e1f5fe34a7b60a8d44653128cea6", "06ec5fc83e0893bddaa2013afc2409e8c002a5be675083088dc77172f940c4ef"), ("1ac978234fd3d9ee474b9aabc88d9d67e04620d2b013d094c431846b8b8dbe55", "1d6410a8b911b588c971c865f28ea16657f27b2fce95c45c31386c7966a50b40", "0d1e4e994b91120c91a7a103ad87ebd4e6f01ed3feb24f5fefc6254915634900", "1b0354b786512df9ee9a7dbcfb3c7c0a0346f49e08c2d4734f10dd09d2fd488b"), ("2aef2c16e4d57aff628533c758f19b8a864e79f781a69da8d1bc2ca2cc175d12", "188977be57e646e6dca68dfe323778c6b8051a18ec4b49fc290dcc501f1d6a16", "12b162187db1eeee10520930cdc707fa480a959fcb8253d420ba45357bce948b", "2498cfa8206ceba9942cd115a0135c3179d5cb455ebb16103bf5fce9f1e81a6b"), ("0052e5501d90da37c9248647eff9a93d0066cc7ec7e4808cc5165c22bd1513d4", "056b74d58778fa20340019709c6e1f8e0827f3b4839d26f59342aee45e531cc0", "2282e33bd545cb2f4370e77250c9966e42319539e084b928911c987f5f8b1d96", "0f51c1b603cdfca062fc3baac01189a416b8b564309cff2434f992dda5adac03"), ("0293c65a753a2a3d35fada741f2e36d5aeff879273f275a5c36a63bee2f0b91a", "171c13b38c0c20a170a6e8873404adfbca56f15b05aeda65d87615b2e97c971a", "2fab13b852d8d1ac900e9e6fe9c5da020912f6b8d0d3bc6c8ab9afa682db1476", "1f162b56d1a1b13ca3d616e4fefcefd84e29be02fe4fde9cd745fbac1f6ede4f"), ("2b87b6cd4b823e81136e0342ada27b2f40d3715c5e102256fd3fa0c1a2b083c5", "0b98d811ee80e3d4ed8a09f17260886bb96ab4cd38df3f131dc80916592711a0", "28ad9192830a30d1465af94f6a7b813dd99dc4f298576bc1727c12742f01dc2c", "1f0411b7dfc656f2579adb82253a9737e6a02b2d454c79a8c48c96f1075424fb"), ("21f916be1735ae36eed4da3f763925e3afa191c1b313f2797b32275d830373b4", "2c162ad88867ed6b3a11b8e18f37a965be8f004c0fbd59671eeab784a54706cd", "028f6be50dd7c48dba95aa05dfb72c64b8e5b3827ae58b74756d02d5d6b4a430", "2e83ab7339e588345e4adbd63015370f584c0218aaba4639e3ff2d7c09f721ca"), ("1829eff1b7151fc1383745b263c173f41e4124d4cf4de36c1d5b2bdb82d70ce3", "1a46eb033ba9930f2450556da1058652c71f064c3e45bd24a214f19c616528c9", "1a6f3c55321086210aeead1d44dc073837c99d75dd55bffedfebb0f4a9aa95be", "06fef540fca3272d05d713149ae3ddda8dd9dea8fe220afbfe273ea5d2edc9ab"), ("15b0fbbcb4510678c10812a63b020ee4345cd717af590946fcc3ffbee262e4e7", "1e419c12be2931821a43c6a4a2dfe907a79c0a1d998cb37c4d9cff96c98700bd", "23c7535d267683a2630635f20c0c046aba2c14cd65f733a25959d0243aa577a5", "0577a4e036e3ad00dd46732c5268c53a3547b48aa758ae6a7ac22cc9d4a3c287"), ("2c7542fb41c744a3510663b78b29480da9cc123c87e12028ecafc6230ce9354f", "187b7e3da4a0aeea794a1ad9e03850cf7ddf4119efa7d0550311a5ba41af9ddb", "093a01687e1f73d4af56ea6a187c5e160acaa3ac71b2095507fc848e26d2f78e", "0b92b94cf92848a5e3aa42da4007539ea8c793ed7ea32320907f33b288f995d0"), ("02c756f4ee2ca5d5dc4ac0dc2d5e33356a59689f39ce72a5fcd988e9ce40a435", "181c920864413c0dd964e29d1d65c93c8c08372e88205912930df55a6997694e", "19f4cc5b68fffbf92a6433eae69152724e5f642b8afa9705d001bce942d454a3", "03c5c50316ea09d63fbffdaa2be68facebcfdddeb384e9e425aa8ebdea3ee948"), ("031e5206e78d4ec09f64170d5f3e93c6b89c63aa27349bd64a62d68f466bdb11", "0f213922993387eab0f65bff4a23df8f06ae5f085292b764c428dbdeb6f16c70", "146f236f1345447b94ccd9431ffe94727c592e7547c8470c5ba3048e1a95b1d1", "19e860e91c25386ee6b0a154e83f908e164eb97d3587610d22e0f0818e068d7e"), ("2218570c775a14eaf5ebbf09d085490cd59f2e362b88766c104ee5d078e360a6", "2071a10b787ee5f0bb56630e7c3f4324003d0b6751fe7dbaeee367060adae8f0", "068b1f085ca515fab02d300ee4585410376a72fb77aeac80e6d9c6ba8c30ea71", "1edab1198280572edbad0965f5d036281b824345c832e5b80fb82027581ef89c"), ("1b711ebec4b44ac3cc036435bc1ee60b0f472ce221336aaa6b3bd6a21ed6ff7b", "14f65b14b76da4531c378131905cec2792442ec6a8cd4b0dbf8ca514f5b1398e", "13744efa9dc0a41a2082a6a6f16a589349ad2d82ce39637569ee26e32574f38f", "26bf5a78d10e301d75bb63be2609636ff1dc9be3c66910d06221acb09917d196"), ("1e09e52260f8bda7f602d81f12ed0663d998e28f68c1ee77272e7160b21f7f2d", "2f596efa3a7a9300a2f88288d953e4d8459b1ecd0920a6f3471b92a51c987e61", "23fbbfb9d1c529fdbebc3321f0905c174060b2b803529c99d04abfd6330cd99d", "26fff55813534bcfb88c48bc8d748337544c3062fd3a7198299a83b8fe4c1477"), ("2c4594da8361ad9f1f2d659debc4dc39f6f2d307162cb6867aa634cf5e51a998", "30168f3fcd302a5ef6d7076cf343a91635fbb411305aca3e11e4a4ba254ff92d", "275c22705b35a787f8a8ff686efab20bafd08124217a87ad6d07c1bf6891ccd2", "2d525124fe19474611a90fe8d0089f9654dd3e256807529942ac01fffbb22f9b"), ("13599b3feef2b85d2265f722280e832cac9b91c6c14cb4ba652a8f852b21237d", "1df3dd1ba16930e42efca298b52954a10e59415bb1c3cf4f51d222874dc67fe8", "1002070de4c84dcff102552ba8d65876b3c23ab138c2116c1928c909364d47d1", "0cb478816b4c447eaa72e44f55e462ec7516b431ea2f0f8e8f82562f6a4b8853"), ("1eb476f8d867e52e0ad97ab40fdb0e5be80756fda064fd2567e70fea803ec1f3", "0f998bc934822d77dc7c7038f0f2cf7cb4153fbb6676fc1c33ad57ebbfcccf3d", "194172549676d5bb48ed7834ada659813809707dcf49e4e72f7a0159851fadbf", "17a8a73a5eb9d1e3e135ec20816b81b441890107659c112fa57dfab9c0cf1460"), ("02b71d570b2477b873bbcddb802a34a72ebb9794068bd44dff183f6677cb9191", "0cceba7136d23011670b46b101bfc81e5c157e4bd73411b064e8e9d2f5f7031f", "1d8ed603ec56585fb68197ed2d88c1efb0cc316380500cad1ad99dec1d5f2a05", "1f03537af960a6caeb4f09a7d9977fdcf1721977c4876629c58afce14267ed9e"), ("0a001d2d9cfbfaedc454c5df5b781ba03788bd9a1da0ad3cdb15e50e7fa83512", "12180235a8cdf8a46ea1bfbe9162b70c35c2a687437bc49b0ae892fe8a498086", "02869724bb80b7ac76b8f1532dddc628c8f2d9934177ca22034c1f9892492826", "0511b6de352cbd71a7a9b4ce9dfa0439b70a9fd9cffef7d533c9a989e957d79a"), ("0dd5a8c9b7b4d373a4f0ff4ccf046b33a02544aa07e02e1415e2788d22520004", "2a709b02690f8c2b320bac34285b5d6833150be89a7472d237fad6efa7358057", "2691b3283eaabce78e6223705489776dca757e8813fd5f0e6b195adad820b1f2", "0bf540b7c80a650981dda9af25aa5eddea0fb49158adecb3324a79fdcac3284c"), ("084a45033cffef336b3080b4e8827f5d6fc231ab09ceff31b3e5faa60a3fe3b2", "0f54c5820ddce998339689a5ffdce0b4b9f2b4359246e7e08c41c555a758dae9", "14e3ead65d5e221fa852f7c6e4abf762ddca2144992ed297e7333b9f5fef70d9", "2fb6a5dd519b5daea3196f97d05c9db443a22591c5020fcbefd81620f5b3a5af"), ("181fc5c66fb879ee5744d5951ea338d8a9e4ef84271c2f0fa5d672af4398fef9", "272c51f20fb7fd98ae95ae83130508abd1fa4b2f6df592d85a55395010ddcba6", "1f70491b4c62380522612bbd6296d264ce5a285ecb7f8d07f87ebb6ba08a350e", "26a76c13ec33b630be71abf839b711d36abcb575156a2141cac0f6aa53c46e5f"), ("1f32b116c68409b6a1ddb525eb8f7fa6ead4cc0e910bdea386a92a3cd19ae7a6", "13ca6ea57babb6a091d1fcf6251601461913f39bd298fb9f806f7025afeb3138", "27bbda695fb93cc0886e6a981b25cc8ec07aff8af7ac023bb0e0c8c9b2b7d19a", "2b4c55a7689ea3219179491305ed9d5fa50767844fb5742b486490b13e2f360e"), ("21b40c5f3cd8adcdba3f0d2eea1cf42e328440e40c5dbb6f68def699d11def3b", "28f014bd87c1eecbacac606b0ab4a9b24af1dfcfb14ebc8e9fab5f675604ea64", "0a49df2af6967d54559f944b972e1cd76d390389bffaebb19e5197402eca61e0", "1d679b73792165615219a2b009ea61e886eca9a7e5c7906e5daeeaa7899b0cdf"), ("015713ee709a92d9d7bc1867544712f6f4807c05c4d452935fbe2ff7ab02e52a", "07b49c72dd65bb6eb103ad5714ef734e2a87d116c24872a9414b7daf06dcedc8", "0a6135a9bf4fec3bbd2f8140711117443b4826ae57c3514ff1a9395b58a2f4d8", "19ffdbb3c086ffaa5527eff41654772d9453e8e0c35bca0e59a38515c6f155a0"), ("0d80c7e3292695808f1d989d5c89ab51b6e9e94cf720a59a5dc28de71adade7e", "2d42c22e72b1049adc6b5fa95be4c351508b674193ff713825583cc02bd6a9da", "2099ef761ed96ccd82cd27a41ecf0edfb73d141de5dd04a3cd43803d8a3a11e7", "05e9857e7a5d055ef3f6c6ad6cdea849699f61773625d793ccd0d746a2099407"), ("22043f95bc02232840c8ddd2c208a5e330ec06efa5c87b6294d62e6160a3a1e6", "1585b928aade93d6911ee69fe7517a0b78fb14365ff67565b2a069e534bf831f", "23a791e02f08cd5531a4210736de9c01e27a295a7c4035bcc5589f584bd412ce", "099a03d1883ad5157bdf8796d64cd011b47b258268485fc16bdd76f49c1bed45"), ("024e67fa59d20ff730c0be047e24178893c9df964a3ec9591a7a7ba1de22a044", "297719bfe2a4f951b12ef4009f5f240f0b5bf53cea18754cae87ac21ab2b43d4", "262fc699e2e343d985c5bce20dec8a3fa5fa0bbfb155655d9a9d9890402c45a3", "0eda10a2500a5b3ada5af495e3f8e968d684625c8d67e61688807ffd2b1d08ab"), ("18bd099058a9773f383ee99b5bc51c6fccad3affa058d687024a2d6e436ef72a", "17c14929faf52262182cf50aedb4a9a54ace27b516c127f33b8d6aae8483beb7", "1306c2cc79c7ed7c392567eecce57767fc92f3f962825e2237f272977f179754", "06a6daa36c682912c6c3b1378139df4964369d169db94c185092eb66d436d5b8"), ("0c758e3e0438ccc963fc7777fcf7acf72bcf2544844ae915d24886ebab15e907", "017729cb1bf1cb672e12ac207399400f0b7e121d4910b88b7879ca8b5e511dfb", "069c40926d57050bdf304a745c148b8b80a06d6ec98182214038f5f6c12d315b", "2850c9050aa5cd3af36e82045b8717e53a0ae259d51a6486c60dd6b70302941d"), ("1f28abac6cd406a30a6e1aace18bf1adcd3dbb7b2a9a378d62e5408b2f9f8ea4", "2f2ff70a2a8961cbccd80d945a50defbdad20f7362dd417f86bcae46ef1d2b97", "1110dff6c41de24fbb5c954ef06051f98291d370afceae3074fd3ff3269011f8", "2476cec45e2765df1c1bca33854b5c198434a499aea96cf0873476bf23b5f23e"), ("2e93e51c39a555fd8de17652f7eb0db60c974689375b0a0490e6d3bfdc1438f5", "00500275c337a1db7c8a18c4c5cfea9f9f29efe4f08c2d8844a97cc0e3aafade", "2721054fc5c62719432f9eab900269bd4734004b8788a11f878972ff825a154e", "04d90e4f9bbca5b1deda169f15491a1268c15376cfeea09369d53867e82411ec"), ("1ce6727fdc3c9c3e8a6488c64b116cebf13c4fe6996bf45521aa70c7fbe6cd93", "15ddb5a69a5b9f8b0d9762fa14e144b7226269d6df3b7fc14d6df73c4d520905", "22526389e2301a044ef01e4aa78895b93029c10493298e2d6185166b7a3492ff", "2c42beb68e4c8ff77dcb91a56f6c75444824fc09344acbfe1eb666620469b909"), ("25679116e7a9fc4a035edfe26230d51737844b9bf40203ca6f33e72e6c6abbc9", "0071f9d46019a4140d79a042d7e085813efa2fba413956740a4fc227b75cbd55", "121f749ceed8e359e0718da9867b79e6f011d6f62c70e338e3c017336098455a", "2e3f492e4fd462c96e63ed4178df71299bd8164951ae921473c4d10dd332ee5c"), ("12788372d972f862786ff4992af58c53b1fff15ad0e8c515f79280c7eba9edb9", "2c16ed5f27f4b1b7b79aeaa2f59f60093ed29f406cc8622fdfc0147a6a9bef48", "25d93024c7dca25b0a35b456c67ee01189ed1f6facf45ed3ef9fe8eb3752e479", "0bdf0cb69fbf62206bb5c84a056ea9656901b19df5d2f5d072e4aa286f37c6e1"), ("19643ab31a44b8bba193710c48c60d6d8605d88f9a557021b277b5efb281975a", "146333de1b3cba1494b1d3ad24c240713fd26eed1ee18ca6aaff7def052df26e", "1513e460804dfb74b554d5e71938b2566a758e5c9061476d4a90d405680cffdf", "0812449f122b6535739759b5e9da7190a0fd7c577c989ae6ab03a2c7140b0148"), ("28b4c97114a830056eb9e9f6de80bafc5ef4fd7ff2964611d811f8202f82dc70", "0bf023608e466724d2bc702bcdffc1973e9b3c1a020defa6435e53f4b3e379f9", "2fb0368481356a5fa9e2a1175bf2bd694481ec8bd3ebef6c56e593d3d799c65a", "0b5241ca439961c6be55666d1635f0320cd8930bb983a1c29aaf31f1ef9d1dfa"), ("2ad9f308a3f25b55a9b87cf0bb1e92d368af1249edd8268d8a4e302768a61525", "2bc2c12d62ee8c6f30fe5ff5e9ebf860a5ec3b68840c7d94d14168984c435a55", "06cd270dffad52cce1363d05d3594dd368d218dfb63ecfc7d81d7625edfb0b32", "0cba57f5df4fac7ab8a8dc67ff7966c9c41524b1b9548765e0b627115ce3aa1a"), ("1d4595dfb4c17a56b793047969d5130b6ec803a0a8943cfb924a30ba91bcf2ca", "1284314961e4dbb595df0643d784d6d8e8ecb9aed2d53e80de813186791011fc", "10eec2891e8e9a4ccd5f11516a16c5058dfdecdec2d6d21e68ef3bd5f4dfff71", "0adacfe979d2bb4282e0ff4882171299695e01b740edcc6fd462a905d0a2af13"), ("01f5a60b844b9e93bce71a3b042120939ce92cd288bdf54c65fcbecf84560b1b", "0279765d445a436c6e64b1a361c25be4ff2107151aff705f123f06f180d9556f", "2bd90faa0a0e337928e94421737694fcb2c4e6de363ff9af4d31b0a7f3852a50", "0384f69a5ba7326811bb1a4081ce0a3f3dd9db4a3a879a9f1426a7c84af0c450"), ("23bc56c19a0466f71489e9e9b6b4894c6afb03ac610950226e8ceb67da4ad473", "00875cc1228ab88f5760b6cec0e5ae81cef6ee5f184681ab4844f7aacefa7847", "233d1648e5a3f6e18b796f20d6ed29097245278a450f98f3c2eb86ffdf014de3", "1cd56ff5eed0263dacef77ba1bceb37d576ee11426258980feccfe9974bb2f6a"), ("0f4bcd8fabaf44d58020c2531eb1e5bdeec2157a2d48cb72c1351bb02f622a0c", "23f975ab20cc414c10c88136f63ed21095d6fa0140f0025be02e282da82896e1", "0bec1dc2e86f3fb9fa39d4b67828a83e838d4ce3469183310b78c51b97321b45", "2ec7a69f8dcc95ea6b0a9e5107c2be336dee55fae7d06891bb26020ce20ad7dd"), ("1d91455563a7d152df661242bbf288fe0aa1c979771e7dfe58e2eb6cd42fd3a4", "26b48c57b8681d6c0a488806da11ca4c0f84f1b489837f9190f501b9c3b5767b", "2215a50ad45296c7a05a72db572f56f017c91cd2baf7d2b03ebb9d02aa6bf7fa", "0ccc62b9839d721f969a65acf1922aee5d8fa149f7d89eb9e3c1ec02c7970ba4"), ("11204582448482737ac9230996aa9aad3b2a073d0bf5e20e035b6c2c9bf2ae3b", "212389883a3b8a8f822fff2b08c0d9abf7270e7353882ae312d5660d04d812ab", "09fc4596878f51be64ec860df191fa996cea078afb7c551e9048fa1e58886b82", "24793bdbdd2df37628522c095e408e86a58e95cdc514f153bf547a35396ad646"), ("2141cb82eebf2f5c2cee5a07cd598e90a8c3179afed47efee10e41084ef21b49", "0821969bbbc094790390ecceba5cf57e63b3f984d770eff0ef7643134974dacb", "178c2cadeb21e29df6c885829adcbc997b56021151f74368d19fc776cceaddc6", "166a683de3048ca9ec6d720502e5978a4f61497bc90f908f6494fd6eaa175e09"), ("29d39d458c4ed0e502c061bef124bc63a1704ddcf6674857ed511ef647780f61", "1775c056173eec8ff410ca02cd587c3a5e392669dd670f4a7c5cb9a96d8e38ae", "234449338254aee92f584158bccc96c2ad7b59442792aa34982a7cf83d07bdb6", "2f33693290dc0a9927b840a92fff47922911d63f56aae77fcbe551d1e90a9db9"), ("275c50629e8d947808c5875a177391f3251c0f3f3c477d44a07c95069c131110", "25d7b20fb626db922383041045dc52271e2f826db6d1058f2482ce2dda17a59d", "1db2b85a2b5fba595834a7adb5433708dbcf51b95af02b815e822cbcaebe8464", "277854783600decbed6b3ce2e5380447adb74c7517d5c5c15d2d08f62454198e"), ("22f44bb63fe734f596b84ad29f298f23b6bb676bfb49603affc7af84504f8da5", "2c7bcfe63c9abf8a2ed33765a3cb0ffdfbd7247733906db275b3abe82f148bb7", "09f3b382b0f49017338b8359bfe1f0ee0bfa3b6fd853f2fe066d6740e891f9dd", "2d2620de113514a8b0320d0face2c8efe60ef43ef3ab4eac4901ea690621c71b"), ("1d127d73f970a8da2cd603921103d0d9424097b3f59cfa757dad7156ee8b6ef9", "2e37ec4e3ae95b006d19fa3c3aa956afe39282c0a52c9237cba53e8d74f49fbb", "238dc6dc05c61178f7c0d4bc12c2193f3ce3373209476e78c38aa7dbdd16a6d7", "299d9390bc5f434de2eb83cf88f7554df9709d229b9e1810bf3e2d025268f955"), ("0d59f7075347f4277603de5b4b4e31d921cdf741ac51183f2700225705d6b8f5", "2b16b99541424303c5e39e863bcb711772d9fbfcaaba316b577dca38f519d671", "2f02c162ffdb3ddbf909ab0417f6ad3d57e93563a4568c94f8a6f9ad2bcd38ed", "212951a844df83b2962f344654db620308e89cb6f0336b2050b167798cb4b169"), ("00c881a79e3398184a235ae45dab8802afb2407beae8bd4d5ab3282cdae23560", "22f6fddab25ebf12adb1270d7830295fac36dc530e00bcd413b70a5c94a40532", "20b67d47325308e651795befc739e55dc5da03e0c3db781aa212ab8ab6753872", "2a7b9e5bbe07c53ad8f11cdb205443db1651f2184d78c10288dc34181b4105f8"), ("03b09bb8507cea796fb8a1c248b8e4279776aa7c2772025916ec90c8e5ae16aa", "07317d1301818b093d7f97938daa88b16a5ccff6e52ba6addf073b88c48deed5", "006ba31dd17a6b7e954f1c3d610b10a071304948ce9086a0ddfc6b2606cfade3", "00783b621b5071be10b8fb893cfa2867997d9a534708e56d156861d965197e6a"), ("1ddbc3cd830b7e5a7a3dcaafb1ee06a45d189590b485af436ab03a277e00f96b", "11d41c5396d2cd584bd09e816c50caa80b9efc6f4927b0fcc18c18fccbc61f69", "1cb5be7ac09595732da40f6a3d23b586c106d19e08c5795d585f9770c4bcb066", "083d9ff5087de9e98658775adcc7c8b773cd33455871b3316a66317acac546a5"), ("1db7ebbd63d8f2d8efd78c306bd37469ba4914463447ac9abd611e983043714c", "125a0084836041cff12da46c96b987621e613fa52354edc0b50db696ddc688eb", "2c400dd242a64a8329ace0f216c8fe7f3d2cb38a302cc971a350ac89c2d4859b", "2ffdfca5332ebbea3fc11c862ace4a3d7cb1374a9800d81f2b552ac8111dd95f"), ("01f5796d771b94999a6ee8c3d9afde28364502bcdf8b392ababb135ba8241ebd", "1b7091b93512c0526625063be0bb54552b89f93688fe19d25a1db8c8f8f0783f", "2419c1568e51aa5d95114dcc81c0cfefad6962740996da3678f3ed4decc571c0", "160405940fc2a441a058ef8f035f1ee36108905024a21623e2c74d6018d25224"), ("27fc794e5fe445ae63b98f220e21ea94f3dcbb41d6bbb7437a2b1961b63bbccb", "1370542bbda8beac354154b647378cf07bace55a580d144245d540c868cfdfb4", "2c25fbc63a3ff443302e5601fc29288087b6cece48ab317b01531916f701dcce", "253b41a6534a9d10412f4ef0fa4da629f149e28b772ad961abdff749dcd22c87"), ("09fc22e0cb7417025696bfca58623876d13bfd0c2cfc72942d34b13e77beb866", "24c4c9ff43aa98db2db9a5c8a9627b9f8eb15d31115cb98af1af79753f3c45df", "059e68319fc263da328244f3f9f244377b8ca2133dfd675ac7739b023849938a", "10bba9e467c1d9774b1d92d495677df2974ddac309f109c5d8827276cc2b7986"), ("27f9b4db281952e8ecd643265f0fcba5a9bf028083268a6693ed8ddbc8f0ef48", "00dfafc15871b46bbe2c7accf23c83a2e51b12c0d275f00d7f1889617ac80414", "2a22443e3d15d7ae141840dfe8de875585ddf12563be0b482f4c7e88ff12531f", "12a28a132fede66d76a7d801934a71b763f77b8d2ae4b1d3e1ee5f4c8ab50bac"), ("195c956b9cfde67c3ef002774711fc34b973e7e835a497c500f091e1c776f17f", "046f491a0949db24755fb680e860d8394f8effa1e5269dc025eb01a34f6cc717", "2077231add304e666f045ebd5d74ee26aa72b814bc5d03ac4e61f015b682ef8c", "1a6a84bf73e29bb686384cd4a06474b44e678f6d4c74799dab286ba8feba8d86"), ("00b60c176ec24e7a14414e454fdebec4d86278ecfaa39b004ca19a9b41e59b2c", "25c640f520a4cefc784e05e497f034e780e8cae36f1fa93cf8fc307dd672a605", "1abf498448f6f0274b5eaddb1049b22e87c163dfd8f3f5b18e0afdc5f2ece724", "2f2f4cb04c80b0a070e8265543468c0d1c7fb13fdf6ad07cf84daf16c65f6dde"), ("1162c8db422e6aa8ccbc0816a3c198a4bbdaaf6fd68d2a074806b776f5ec87f0", "1d8079653929bd78400e08ca264a01f8e615a5ca6f7231d527f75a46feb66c26", "1a7dd90f892358520ff93820d192aa9d39926e78d91262621aa94a9ec8f6b127", "0ce5a32f3c9a5b7851c52eb17f91cebde144f7e6ca7230fee41a7095005a5079"), ("056f99cc695c0ebecaf22a51148a0f837750aecae43815fb823f10bc0b381f49", "2c4b9146455b154275d180353d611f0e95a7dadc584b4278af71b677995c278b", "08ca76b0b6cccd572c8641c0b8c1b2152c3d2afe618a8ce516301af9fcf435f5", "2c015713bbbb759d28385a4a09ff2601b85583bbc86dcaa26686a06b8f8a5a2d"), ("01dc39916546e27b4638a34ee9b4c138920a0ee903d118ea24b7364f6ab7d541", "2ace01e5bc4f3c54146e36720d3dabb163b700fd6cad853ce016f7b7e6b47b43", "2ddc5365c23163bc7c72678b095c5ce8e2718f88d0c68b5abff98e66c1e21b23", "2fd6a3d2e9ddb0dfb11e394e6c4170a748aa5cd15c226a307a0768d65da6a589"), ("1313caced0fb8e085d9e4050a207bcb21bdcfacb6886044a04d4e9a3b70bfea9", "2232d17011202060dc820e170be81ae728d7e13590eac860ecfec7e29672f05e", "2162057551207d9a66bd801eadff1bf69fae173fe2e8ab55ec2774af919777a5", "0634a68de1fd7303a3b69fc5a00704adc2df0e53d3d2829c18c84e171b5edfe7"), ("25055ac23521102b2eaf78a898c2b7f91603312a0010b775e1f1f38505301977", "289a87574a78a89c48f973a43949b44a2b4b0bfaf6add25d0711b6bb3a7ad540", "0f993d45c82851a6c68aa0f5e30eff06dbbbda99b1f202e7f94901fa4c4394f8", "0066b59b8e4c069cd530825126ae2533bdba24a1a075f5f2eddfd5306ca11fec"), ("1e8455f99e58cdc4c67100f438736bf5a5aa4b917abdb2ee953c4bf5c99d5c75", "09b8cc480d7cf93733710cfa6ee0e4054aa40d064d52a7c35e4cadda0afee6bd", "0c7a93b6792861991ba778e688cac6b5da2775e31870129b80a050a0cc0690a3", "0ce15771567d530d245627db74d26919d9f90cd274725f6fa5a5a14d788b6983"), ("299475c56e04e1325b93c09db5d216773c78c7e99176b470490f77188c5d6a2c", "02fb4e57c0676ac13c2f73de93b0b6df1c9d578e233b99f5e0411d5abd389bdc", "0244f4b05d94137e6cf34c3fe402823ff4dcc55f8eb30b5f69a47c65e346d5e3", "14cfccd1ae2fcf32a37d34087552d9443e12fc9d07650527a5fba9d2d5e94329"), ("115b5b2cc663f6682a87dbe19e3a9609772f1353b5e9d7362238efd46bad8016", "1c11089237cac0a3f4a4c256056a3154231bc4d0a2eef69e9dc4eac9497a2352", "1a769206fb5e0b4338aa8187cd2bb96b602dd89e6415ea767abc31bba51e5026", "11b716ad414b10ff024e8269fcb23089b02642135368ed8601eb24228aa3d0f4"), ("0b7844414b6d3d13ee6be0eb842c39d99256468f69b9765a40cba9077281aa1d", "0ddacb2b8dcb23cb36f1c52f9097283624f432ac3a7d72d590a4b735537db53a", "28d3d03adc053329a94b16a7770b42b01891054ca4628b67153681f7b3bb1732", "15d207733ee079a7213efc739812b7648e0eaff6daec38759582ee27206ecfca"), ("02746a6766e157ce2254fa5ebbc41964b6c37f1d6154d96337a02a48207d23ab", "2361b8d952ab121570fd454681f9bf5b34e8fdfe02870bc5604e4fc89d000db4", "0ba90dede6e2acecd14189849d9cf0b919ea2fcc828dd15be96adb28ba5f2414", "0aec80222dc7acec3d0a84571d251a4334ba82e1dd215c2638e63007fa093ac5"), ("2deeaccccb97d3bb365061b65118459273beff8f16e8d86ab3b66680a4433f00", "05042e225ddef0ffcd27ce549cb346759b164df1b99acfffc8c6ce476e351efb", "1197c526afb874e464601db8d3d6784ad37d8ff00bb2f97e78692610fdab53bb", "19a25b1e8f94fb75dd872c49ff0e9a4051d9778290e2b1eca3a3baf24ddafba2"), ("284c220d010d74241f4b43f41c96e57085b41387e73bb07bf307b5dc6e50a3e2", "2028adbf1586cd702e91b8d29cd97251c6d52dfc023e33c057dc5e5515b0facd", "1fe2b881071c2bf3a123b33d8e9d1ceb0cc741aaa11dac116c7ad85fd3e46a14", "098fbb4de2f508a475e50f57bd3dee4f201016b97461a45ffbb103e17ee0767e"), ("068595c7ee71c717a5f3244c3bd7b6df7727c8ca0f5ca2994eb367d5c36a29bb", "17d336fcbe05955731befa2fe156d5b621b19a952f901aa9c34848e0b0133aff", "0d2a1e1e6c95fa8ad9c5166af594702644b04229a9331c179c2dd0a6db72a5c3", "04f2327e3b50e61f8f7a76a4d2448895773799a5987f251c7672e3bfab00671d"), ("03c20b3ae191078e19da31cc750b0c8aedb2b982d0b017f2b4e35d43f2a5efdf", "014cab373231f3f48526647415cb1d80ce34b26412a3e154831c75d85e993d78", "0c3aee8939120a6a0823669a36bacb5d1d200ad887659078727a8c6d0900693d", "21fd5faff446d1491e70fe79f953e54d6d8b22c9b11cf0d20deb56e50b0989b5"), ("0f5b65fc8954292d78754e6600f3cd227193251abf823bd287c3635048915115", "1c164bed22696dab46ccbf26fda2539ca7ac468725a2ea9c0781c516d0caa1d9", "0d2b4cb68a35f62403498c8f8154888da2191eacc2a9485e360154c906b8106b", "09aafd8d4fe7121025f52a430901b5e513333e47372d30224d5261407dc5b940"), ("086d7fd575746b301ae387e9fe9017a769c03d6f03c01730b907a33da0331e14", "25f9f47c3a7bbadd1db34f80b6e081b831d69313320c42aa8efff517306f2c31", "0f28ebb80dd3e180d5af23a0fd2af20bad447c46d621be15ef39dd4c518bee62", "058ccff9550262e63a1f6ec16d04316cf23e5ebabf2d216d44b09d131601f4fc"), ("04c7ee40488e56d910f27e34524f6c9eea0bf36b4f586e9f142b8841ee556080", "16340d05506c5315e60f241c367ffd354e099b3dda01a98c1140fd43c26c21b3", "1e09deca5abdcd493a21ac0dddb277148c1c3d8dfcc8d497e19b4787c2aa718b", "0e4c3fe502aeda55fb883e8f04216beb9b58a2202daeb0776f65e63d307ca3af"), ("2b7315ef2e9f4483d0905a63c513e6b0216c392487a40d6d581f8acd9dddea7b", "1ea8cbf8615d6bdb64787a8dc830903dd2b5fa3c8723b91f493ee809b3d9a0b9", "2b0d833c98aa7c0f7299cd1903039137b5f4a819dc9a6e5789a9499c5a31e67b", "1b5dcd2b5821d68c09721698de91e036bfbc6dca07005ff73e552de6bb6493c9"), ("00ecbd3435a1cd8a08edf1024ef703dea7613c62cecc9b189f86130ead822466", "2ca23cedf7d6afe8eef28dbcf6319826eed150c5217abc5a20ffd25b9e9fdfae", "02d64d3144dda436c0e29db98560152ce55b0e5975a1d2a16248c8fdf3cfd348", "0884c3e3fd1ba59d5139bc04ce1b82c42876fb86c87d1410046e3d57c3f7a53d"), ("19c9c429c6c93aac05cf4ab2ec411459cf334038b69642062df4df7b9506f384", "14686bc8a77a5dbd0272e4ee4feb3089ec694f63f40ee2fe4b3a470dc45afceb", "2e37e7566e524187856c980ef956b90dc0734ddd11e178138a848fe94a16395c", "1419f2035501893bce079229b5bd23e47ca7326a33982fabb3890d77de71190b"), ("0cd946549dd264ef62a0a0336dea0849c3e4a58d14b7b8ebe51a74410937ca2d", "1524f246b603c8a6b0d998d3499d57d24c79868905642cc21b529b913e0abd59", "043f36bbc8fc4770a4268d1cf825e7758ba6755535de882be2147a66b680825f", "0fc6e8f01b8e4b1642ebaa75587d83f344b25a88560db7de98b00fe06eaf8672"), ("12f0456774e103cea5d9b372f0fe2282bfc9786b57f64c1bf14a3d92b7f4dfe6", "05da46161dffee4f6628b345e1accb61d1a351a79967ba2cc71b6bc836bc1d56", "02b7c8441fdbeefc4e390101043f7b8f3849ec1d3ddf06c14f0a8f1e6a480be6", "1e33f13a361066e25dd9a97086b37ac38a11872ccff5de9892e4439168f77e01"), ("1d525051e852d8872b00215c3f845a65bed149f57c0909e05a7d18cbff06a7ca", "2a112032e5d1685b24a13bd90ea5232c556a1fd7b6a2f6ce7407775ccd0f4da5", "12a2bb34b21fdc697eb7eec36f5e08af2c69482f275cd32a266df0cfc7dfd611", "1114cebc5fa8908efc84c37a5d125bab3d26889a510b0a82932dd346be677960"), ("21fd7ef67171a9f788be877865b31d875b051bdaed738a98da3c6c5e54fc843e", "0ff7477b19546af2a45515822ca1e0ededd41c8bd72582243528647ea8a5f5c1", "07fb158f92aff3a1ce4be7c2f3197164820e0d6d901d9aaacb9b2b536bb175c2", "19761bee6d1de8f23d3e2835811618fde47521e7fe6a798bb4a9292b60539205"), ("0cffac9d0410c2510448aaa6f15494f79a31ae65a1324f9871032ff8278ff00c", "136c9c19244bba8d08dbe7a7a252ac305e6f86ea09fd355a4593c6c360cb2c68", "15ab24a88938110c3a719cc0bc195bb26cc54ab66e7fc7ea884a394b83313183", "273b9603985ea33ef6231229282181096b9d2909b835c7758f4ef12ba925d7f2"), ("29b08281c932133971c591f025601f2723f1bee41e6148e01d1c5d00dd74a57e", "12fac0377216ecd6332786f1cfa597b6e94ee2da565b8059a0b4c40b61043c92", "130e716664de1d2edccf853661046e05ed1c90e2f5b3837747e477c8b47e5456", "22a6f7c60027d8fd9b1d77203e4cca1e1d70ab8e91bdf9e82d07f23f68fc5e00"), ("2f98bfd680f0985f5e01c25a8027f20679579f83a636b45930c55dd2a7c6af60", "0f1f0278f59803f9542525e6a0ed936485f1214e94ed76ae0a1024f564c5179b", "2be419fc9c2ae1671ef2e15a200291f30b1f58b1ecd0491a331d9ee89ed1fe37", "2670f1dce225ba4b726bfb4c2047cb23ff63b6a1356d3f5b4b888f8945de2127"), ("29db1a48898a50836b8c5ef876b6c2564696c603aecfb4853fbfa80f04b9e3b3", "0bff0fbe91bcaa9b9385757b376ce98c91f88567fd853407274aac448546eb50", "247a13e0b3c18479767dd134f75bc0149c025715dfa2cb257e1b99badf048a37", "273132c9da4f6a981b9c231fc57fd797ef47aba4079eeeaf72928d4c6ef7498b"), ("0e371620f78a30e32f7a7b5fa64abd57214542a5d0fa40c2307ae48667c26866", "06ca6514531a3013ef1be06cff06f704caaf052b3b95b7dbd4418fbbdb0bcfd1", "146c8bbea6e7fd00ca75bfdcc9fcdb6ad07b9f8895bf3ef82ade19382436b4a9", "1036edec74d658e0bd31bb9755eb38436c0766635c5e07adf94a144df16d9b7e"), ("1f5adda802c6ddd1d07b0b694a783ee7792b5fea62c06c53929725f43ef91350", "2d9c0f3d72811c5d96370b2ae4b8a9e16c7f2bef8c5c025c8aad556c146c61e1", "1b48d25b5551d04228b48ff73c5ddcf79bfc650dddba27997cb84b383fd29463", "018d69d99f5ba9241b52fd9e7577acf370b0e8eeb1c1bf247d39ddf0b25948d7"), ("09843a0f9c03ea6c6bd8cbc787b68e6fd4cd426e396ca736ee7a4e87f3f8e595", "114cbe9f825de5316fd419edb11660a5e2312e5a7e74d58830d91133ec87a8c3", "2aea20bc9631fb12f90bd6c20597d654dadef072caec576cc15294610b659335", "166c53ba2bb51d36a37662ff6a79e44e4c043873be89fe34ef693651746df2bc"), ("18987a7cfe48d4d70c4e2af7293df2c0fe663cbb7b694bc7b06c1dc60314c0b6", "0858116d2dfdebd0ad461910bf6a1471585422a09d52222584829165030b1a33", "031a0837775d78ac841a9b513de543b32f53881937f256abb27a0583a27db6e0", "1091833d721611f7a11c5401753132df51dd132a99a0aa14609e18c2edbd01d2"), ("1ab73f3f68e3e7e5bd43e90d21464b60e7f53579ddcd4f777a0a061f7ded6014", "0c569fec927e6f8b378ff976dbff929b1f31d21fdf0427a411006be0f265a1e6", "13f47ed76de6b9e585d49f02e246d930ebe97fcdf3c1c7fffbe30c385d57d6e3", "16a195a6335032a2972e956c0e4432cbe80613fdab0edb45113373626e8a0c01"), ("149abb54d0d6c94b8538c75d02ba8b5eeb2a6b9de7b52c21b2d42560791d1c13", "099b2d39afb8b1ae7fb3ff916ee2e2e697251f5ddec4bf1035717d5916daffab", "1623c52819348d8fc2a604a509492bc69da5dc36701a17f69aaa703a87ded55c", "07c7c1bff904d1be147fb57f11745a93b0dae3c08670b85ac43777a5bdd5740d"), ("1b9418861dd1d846f423aaba7ea078796265dda787f998434f554a74c90e1e17", "03955083b0d6fb32b49e4d22c6bff6100ce5367b01fa7f90bb616100f41f5470", "0662930452facd6c486e6f2b4db65e49d24f6a25bc3266a3e910bf921cf9d35e", "0d92cadc9ce150212a37d479936a81ffd64bb184cd8a806acc4f30d7dcbd05f8"), ("21be909edd6c16fa37aca0db0b90a31ba6b964c2cd04e73ca802afbf93407999", "21b9e9ad42b0008ec7dbd083b791d0c4be7fe99e698714c51f6dced33d3c1747", "22b77ed6d626187b03b1e46c56d2c72ef5c838da6c14ad2f00e544643917f994", "12673632a81d627eaf16e290e0283be89caa912e46cc03306428585b2e47c500"), ("0f9c120970a949a3cccafc430996a6aa460d0dbdeb26583b4c0ab0e8327232a6", "00871cb63b063d3a3e7840055b342e0e57eedcaa0a9dcda70ba3fcb0e1faba6e", "05cdf53f35bc0a7342490fd4de3393c47776baa3ed87b8d486f5b0c401db051d", "2074b575e7ca6399267b585256d245dedaa95303c6718d6c6b658b65e2bca248"), ("1870a39b5e54e87438ab279170dccb246460c92aa3a35483f9883332ca2e56a0", "00fe8e5cf3fb40bd660e742197b8445370d078b56b1de78dd9ce5da4b501dbb5", "1711e7660165e58aacd51280a8fa57fd87fa55297d621d377163090fb058b9b2", "0eb2589e0bfddaadaac252e231311c3cd5f1f92623acec882f49714b6c27b010"), ("161087904341c85fb9ee14697201158ddf38a0d3d4c087190574eaa14c307c75", "09dd397304f55d32574356d25da37b913248cbb866fed9b8e4c3d46b3d658587", "1af5ab36fd828b7c93630a1d8326e9dc776dc1b0021ceb48beb37a005585324a", "276f96772845db5c6502b100e3516092b3fa352c55ada50b761eee5c845fbee8"), ("305c827e2796ff85e0d70b9cf5b1799036140c50aa369503d9e1a10919812a4b", "1188cde238c90f95f6e6daba5ac270baa63474a495745879ccc8639eedd9f7f7", "1e92ef0a047d76680b88dce27b88480bbd69217e2df17cbce9f9118f4ebe3953", "0f89a819cfd2a61fce47995107d0645a416c6a402ce3bc317f61522c79061603"), ("248ab281b2f40304766b8aa52992d093a6943803fd6a03303a1d8e397ccff6e2", "17ee20135bd8fe9e2ebb24b63a0ab7a1b921ad675681059fd7c82cab2dd200b9", "08a3d2eaa1f0b24e61220e062bc69d585592bd7c08f391f4fb15fe60a5d1d19d", "2c10139923698967dcc78c384e663c9c8dcd7d3157f093aa88df861cac4a5a6b"), ("099bfea6df3e17006ed492f0952061b24c6c1c7c54dfe0468777636552377467", "1c17c6849b0c3825a423599869f9572c2ade0a9c8a28f56d66d46c45c587042b", "049bad72ed036d07d8946b8e2032af8071a3035371845eb49cedf6478a08888b", "10d0c2577185cfcd36c62a40be624a7939ac9dd2e0f6851db0d300c4291a0709"), ("18d39b08041f29a220c10fd3ab1844ed4da720a5dc4cbe9468e5cba5b6244cc5", "282ffcdaa31d15a61bd2441650b9ea7ab43c4b74ee9e29dbbe9a82331d1ff34b", "18f9a23a52753d2736b9b075a7e61d62b0e916ef7b311d9bfd82c426dff8c7e4", "1202fb04cfc910994a24ff1c157d5aba8a88e3ca8b5998288ca5022679a8f315"), ("23bd2883ef6047717b8be9d139fedd9668ed2faa8122028b829f5ff188c41179", "15c18878d9d36b5406b28538d5e9be5c001575f5da4c6f87314fd7d9834bcbc0", "12bd34297241a5de8f306b9baf7a6c4965a8228acc6c57655b2ceeb50f4e5f0d", "11b29833256d01d69e7b799c058a8cd38c534216d259738e386081035f4bff1a"), ("0cb3454f85a70533df3e0fef124494a574b91326b0b02370daa991cb99bb6362", "0bef5f92758483e59718d6f9f32873ae5777a776e020dcdc75bad92bd9cd055e", "017c1fad7cfb577a109e08725d75837f4cfc1ea8923e9f74e27b6bba2b1aeb00", "1a1b31593911ed940c997acfb3034d1ff126c5219bdc8fd26f945685f194a48c"), ("13bcb47e8be5237048af7e14c706abc2d93da07536f3e1475eddaf730d500154", "1d7cfec80b3e38f05b5deb187050ddc1fbcf2150d06b813e16021f22a1c29fa1", "0c337dbc2c51fb12303eb8e7e4eccf8ffdf206dc831e50b21dcc1abc8459bb5e", "10e6f68d3fe53cea590e111c0326f571ec45899a0b461341738b3007120c0104"), ("0c2d20d57ecd4518042495a7e6c02e9a5d6cb931b8ee1ab84e6a936483192939", "23f63aa3e07aae4cce557ba71178dcd7cb4794e6a2e1343d69000e0d4a1e318f", "21fdc7e441624976d2dbe0e7802d11604937c8f5a31a38124205e5bb55dd9854", "0f2d3eb69147cca25e40a09309f6a9dfb048da7d5188e2ad3fcada86a953d675"), ("0f750d4004fe665eabcd7837692f0cd024e4349644c8218cbdfbc4d04b4db520", "2412e5ab2e71c473e913dab9d37b600fceb7881c31fa0821822b938d232635b8", "1118700f7f27bd5699fd41344d6d764a1351656188ca4c15376fcc09c7030bae", "07cb9066ab46629298a3d42e8ddbdb7399f47a77c9be6b11636b3ef4be4f05af"), ("0c5d26680c8d3f03305236d7fa3a1a51d86ec6dc757dcbf1844d5db9fc0260cd", "1a0995d98686cc6a941db88cba2847d63c8e1317ee68d1b51171ee7b2466b8e6", "0a9c09b7328c3619c25339e965fa2d962660aab4339e6b977e8f205d1547be7d", "0706a899717c93e84a7d82bbaa6e60781dbdb589bf30e2316109c77020041a78"), ("10d0f8e12418cf6302d7d38c7b63d0069311f089e5aa9ab60b0d2e8046822d08", "23466908bb7ec3a6667a449dac58db807be1f69576fabc3243e1d9c1f394d918", "01e62cc0994120afc5271d7308561110fdd3da305f724c2958c5fe4bbd0f4eae", "25a6ccd50c14bcdad0603b04d2a062d6b6efc5a909d7330ce63c85ec1904d270"), ("231641e696e0db286ff3987cf00004493b324bc6a9981c66b7de7146a29de763", "12c73e9114aea43d113b20e0dfe8b2b4f1c0cbe5fe5124a88b901292261516e8", "2da8c8f6fc83e8c7d89559d3809c9974578812d931bd91daaefb7d1f453a9022", "12c655811f6c92003b3ee3df00fc8a050895e0b65c58135ba07bbe974768fc5a"), ("02bed54e8305eaed0d2ca19490786dbd79b4dd76ccef15d806afb4060f38f598", "13819f96ecb42e1b68672cc8ef45eee0d6cc3f80d4a1a561f1551b5d11bdfbce", "080fb38d56a3cd22136c82bd56245d1ac4e9078f6230668fd98be5453a6a4c37", "2a1e007195dcdc865ab7ff9092b013b282a1810d2edd733e162de230d17f9ca3"), ("05083d87d6a2658943ea153a7da281082a4a1fd28315d2e28f5d2b6e8766df59", "223c4b12b74163820f864f913910bab3a96e52e542e70755d2adc79839a8c5be", "263a0e3439c4f3e6d6554a5ac41739f3b6a546e08d1964fdf17e2671e0d1b50d", "04a8a0b6c04576d01a40ebd9db4c2f5d1dcdc7c52d73ddee632aa94599a65a3c"), ("091d06a643334319aa81b6ab15dd0b48172be4202230fdb2d72e873cecd27097", "187ce6e85fa3f9c28de2e67cee5576d6894cb49f4db7837105a12add77372dad", "2f01b18b53d1a57839f8230281925b554116579934c17cf02271c93903921b32", "023ea99caa0d6d1ee2baa0e6f2933b347bd509ac26e6725b08d637ddb02fbb85"), ("233375ce57fe05b2826aa6b71ec9a2c00b7a16d443d1430658582ceb852c205a", "23fb2ae2c8b74b311d6408d0d08846909498f1c926e976d0279591ceb1fde79d", "2535cc8825be46114c3561837a319f884341200aca2b7c3b79e8f63f78819bd0", "0c634fe617ef11e3aa662304b398e5eea65af084009f04976fe7de77007114a5"), ("15a198c03d6af159612fdfab1af63e112860f37b2048ebdc8e51af3de711ad1a", "13c56cfd98aecbb10bd528f99e01f155e3c6483fb67ffda35a718dff0a1d33d4", "166a4f10f11157f61b697ec840770cb9d4516c99ba8544923c7ca62608dee895", "2227cfbc9a305b1bbc3db17f074651bf130af76fc4739f3cf5b1af1fc138b82b"), ("280015eb3ad4e6055efa6760467886331a41470a3f5ab52e5e6c1aae80482f8f", "20a8ce53ccf26c800e67d7e8420cfb1eccb582bcdbc173a61e14e194971150b1", "1f94ed83f504c69c5b80a3fc7a7f11bd8752837309ecc4d6ebe6141f778c41d4", "122f0a53a318a01e882383dca16e068f53c7ca97d1f94f86e601ffbd4f3c8b35"), ("098ac028f63d476c207eea63a43a7c88477dbef8e45b816701f08a6784adef9b", "145457de555e89229637ca4461024ee5dbaa2bc2a22fd7eb1cc498c772ae9ab5", "096f45054fb9ee747c09998038583ac5575786d3b1bf6b6bd0f2e7864d83a0fd", "2ab9a0532ed7976df9a0d5e5314df4756c69f5e0cdfff8b022ff36c0fbe8125f"), ("21e9dfafcccda1bdafbc37c009c22a85d0f141ab19e5789db2eefda608a243d3", "12a5858d5117f241f0a6d1a8689907f141827fc4d93df3924aa8bf9a22abc9e8", "15400885ecc92e63b4b061646e2cba566a6340f49a9b436e1109d175a6412455", "12bfec87f87bceea1f7c25bfb5b925c537248c2bc431fdcb1c50a30d820aa9f7"), ("07aefd81f9eeecfa90d6609587567de107159509f5b678c0750e9c1a17fa42be", "189eb83556317bb780226027375876b5f8fb518b257fbb1d8883e287728f2114", "082c26c8eb3ae4337315afe85c224f94f10b6399037d97c5cee0de0c363480fe", "0e247c38d22e6b294e15fd8f497652af379430dcc8f2bf878358bce9fe01b0b7"), ("275053c4980891dd235971b2b2c782c14d44be73aeda7904c788d572a4627000", "1744ff68f489e5dc09539cb37bcec1b8f2ee93c7ccea32592ead441b21c25301", "19bfc94808b6b1b36a65af524b36ab67cd46753324c441b496bd6290bf36a731", "03cbb62db938edc9ee63b80cc7d4154aea665b07fc3d6ecca2365a240ec7cdc8"), ("23cb1a7ac8d5b7aebd2f517211f6de8f7f192a26195ca671f5f5b382b505968c", "05b18fb7694c4295361e38b1a547a6dcbefc647e30c51ad5b34b321087849eb4", "1cb9ba1e50a27340752107439cc947a759a1e9f1b122ba585a46553430e6a2c4", "11c9612710f334c171372458fd6f8bfab904503d9f55b059d75118c6cefa987f"), ("10309c2023da7130d199e676b4cf1746de477ed41263c3627dba7c05b94fbbcf", "281f4def6a2c676f52e7304db803ebfab6dc16de4bd7d9073c7cf1c18c190cf2", "0347694b64e72c0ae183c0423876438ec3b1f2eb35ff7779b1ad1309c1cb465b", "10b7f4fb147be10410f1b6a5fe55d234d5f3771a39827cfe8092047e347a7608"), ("268bc98551fe968a947dbff3f6b6e4c6b92dddc378f3a5a3eada35a673df740c", "15bbecaaf93475fd7c38e5de7dd35d8ef94751a9aaa2c371733ce03b5553f9c1", "013ce2ae609d0115937aff1740858bbd9e9baec4e7096d1bab9fb11e0da85f74", "27f6fde9bda5742f90744ad0a18bb95def35b24858d15609d6c946f07613bc6f"), ("271f2ad276ea4a75785463bc1e42b34e24e1c6da82adc2c86c6533dad88f0eb1", "162644b5b5419d72e26f59db7f4f463b8bc7d6fa8fe20d04a41c759ef9e8e141", "053e1ed650bce5a59a1ddb2cb57d4a460f4263344c302589f4bb45bcf7b595a2", "10158cb4382797adb5d3c7a4a421b5b563aeafe16960e5077698cf783132122a"), ("2fa3190527a93b6eb4a53a66ae51f861bd2fe19d56bdcf56e92166ecd9ec7e01", "3025cff470f4fd4345cdd6b2daa7e71a0ed93a599e8d0468014d21575a0aae0d", "2a406cba1f53f2c37f04eaed39c7b9402ea8724d93a9de688219dd5535974506", "2851f2ecbe3237ca0a4ff3d4914d416b5251fda0c52c3ce5d3d54d9a88232834"), ("2535ebe384133746c7f6d6beb6427f8291ea00c64ac85348653b51c1dd71ad43", "101caef188d57ad6e0693b25eab9af6ac1a13074c645bd02fd99e9467db219a3", "16fd2dfb7eb5f2dd730e4cf080466a997c8a024e31ec4ca1a555b76eec8fc3a1", "0498d5fd4a875a75b2043191d295b158812bc31e649142a2dc3383a391b69fb2"), ("305f2f80af6d7eeda286754f58d0fbdce051229d137499d21d399743ddbc4ad0", "1b87d85d9b018abb9214f40f52fe18f94d3985605662b183da7f5e21cc5a008a", "2713bcf2bf5bab50b711cf5ec2723d2a4cfc9906a640d7d8d14d401b591735e8", "0722661e603392a6f3754151f1416cac6b4586cc3ed8b174e68488ca7a663411"), ("15140b5352ca3158cac9e9d416a45a1fdbfffc10bf1a24bdb4626415c3506a6f", "03ee4990f995c4d043f72d13e6de5e3510ac715aac918972295b46accb5eebe1", "0f3be718d79c8981114c73438c1efce8ebe62acede7ef391b48f107734795440", "0b35334ad9ce6bbc04315389ee8a5883abb29ae15413b6efeea2f476ec3a3beb"), ("27dc8b0e9255647f86a7d3ceaa5ee15afe8846ab040425cfcbbf690022fbd9a9", "2ba6564090734434eb967a2ac4abd7b433d81575962ce2e8538f950b7858aa25", "270709e0d0242861313112025f6a16ca66bad67f300ceedd413fa18286ccec4d", "12bde0c8fe52b63ca05b822c0cab2bedba872206b0be7cb2861b0b28b0528ada"), ("2bb1384e86dce5d44c42563be242687d2ceb0004f4bdef3c101b2b40fafca676", "0d7db5300791e2bbbfcc9869f28c95be3513906ee3b5e1a83dcacfd5bfaf1134", "2643fb65c6906302fc112f54732d8966d5700e88b7ddf116a5d8f80e40957335", "305a1b57170a6da9e907c0f1ce91743edfa3e0b183bb22707c131dfe009c68df"), ("1824abf7e593aa2384267b7618bac54c6ddadfed2f2696c71e559e4f993b7a03", "00e0ae270c17fbc6e33d1f902522bf084335737414980b25b4ed5af03dd36a4b", "1a62bb5a1f51d7980e984936979bc6d848902885a5a9049368ab7a4b0c5cef73", "1aedb4ffd56b51c1b01c9623a964673d9c4b27657312dd24f9a8d03875d0e7d5"), ("167cc44e2caaf5535700ba55663f401d575d5350e5fc9bbea2b99d312f4523b3", "1f01ad7575bf323030550b8ea276171e25a1d51f4f90fe09460aba01740814a3", "12bf013c779718bf2e613117c74276376424f4888f9800fa36abd0f2f67d9d14", "150c0ac745c311d4ae69a0257b24bf5bf3a54e713d93fe4eef44a2968262cac1"), ("0eb4b644cdb200b595bf415bec5a5035358152851fbe5b6a49de1d3cc0401cd5", "23a6bc1b48e2a1103558257db85280701f4ee404e82d5a4326e9985719542d3d", "155e693cf951af21dce91599dcc6826e2d5df620837e94243a5ddbcca64cbd4f", "1e1d03d833f40d505dc22fe24c61a7f2f2120469bd1603071f3762989aa61c49"), ("1dcba66852e22108477a84da9f53af808272018d733631359b5d54acccd4d742", "0c07d50c85ddf38c3719297b2014b54e893041bf001e61416fdaa8eea9cb7cea", "034ba570a07320b46a88821528d67cbc6a83e37f37ff98555edca0aafae1c2ff", "305626b7c7fd553ac47ee5cd0a2425877a1e661dd50d7445630e7d1242b93ae6"), ("1527f5b3761299ae089fbd02a56994e85f69864eb5c1ed5eb698a19b88ccfe5d", "17e0e3e9bcfb5101274b6d75886f9f7755653d998111df8b0b7e7d3e9c83db64", "1df24ea9c692d11c09450a91035ea4699a49c1e76aaf550e588f2b9c98a164c1", "00546720044f0294002f3e2ed54c593f02c601f1e5e8b448ae5fb658c53093ea"), ("1b8442850308d0f0ba36b1a71a8ecdd774a1c4bb88cea6473b83c7d878338a92", "21f62dfa267dfd5bf597e12ff5100fadaea9ef6cf35808995ed4873aae0c4e55", "2b2282e3afba03830982dc04762fa765116f786b2ba3f45e55019ed8e3102f83", "2946bc791c31470720f2242be9daa21537ee0a7f60ab3f3e1a78ffb0e4ed901a"), ("2ff96813b2b9c5b9c3a4ca28e6ddd6a258371f1bc020c355fafeb2018e8567bc", "0cbda5ffb1bdbd6b3ca34e0c1e30f457e28ee9ac837cd98617e23a8f3a5cf430", "086b2fcb55c304c0fbe69930f16d585d6c298ec8a9b2cf9ea16af1028842b802", "14f326deacb675960ec9526167ae7b45cb8d2640f630169dba69de7235a86097"), ("20ea862ded77d52cc2d99f00ec3a0243246f63dc516dcb0873fdc4e499cf1a05", "251f0167ff90d11e27cc23ff9d0599c24a1988846f31f40e288b1d58e67865d3", "1279555b53741a294485aac74ba092b6e24817b193c64ce6cec388b3d83ac0d0", "238003f0e4f7ecd7d1d5eee3668489759bb4bd6f8596d40ee0cb2a345e731416"), ("17bbc73feb5634e64799bf3624ba5d5a6fd8ce866da753a1275edf2b81413a1a", "0a0c00979571487bbf19d5353a2746b413df9faaf8f200670080aae5702f1e46", "1d7dbe7a4b9f06b063329c2355ec35287668995a17c4dc8388cf7a86a3933a86", "18b412926856d1db2e325bbb58c71bb2dde6a78533f64f27a3e1208398a6711b"), ("0f8f7c2f71c37365f52fd2febe1fb01fcf04e7625bfbc81fee855b245ddbb709", "25f21befe1c9d87e3e749935e16b602daf546dcc582ee25bfaea6a695d37bf31", "2876bdff58dc27e38efdd07dfef6ad446849384d33fe38bf24618f9c0a9d572e", "06886f0d35f86722ae7e5adc437d041270ec69aa2084d3775d49675411a052bb"), ("02d281d25745d3e6920eec62d74622f492b67e5fffb22342a7c243c89723e5ac", "2faa664c408fade60662c070539dcfff14b0a7f16b012eadfd6b53a6dce18255", "2368a360303177625f8af5d9a2005c245ec66519eaefc8608849a88786e53d7a", "0946d76de70667f3690ac5dd6ccdcebc9315d85abd312ad1babd2b62f31d849f"), ("14a267d26e014c35d2ad9ac344919c3b69a56d0c5cb23619164dac3910d76a01", "275bfbd8856ca0ee290e4d7f6246fa7764bde2995a16a8be64192fdc864f1aa0", "23f0e47787e3aaa8903e15f45ff27ad0c91be752fed424b075b7a3c3b0a97b93", "273e80c8d912eb91d2abbea8788886bdb6858044221d3249aa870f1ade8b620a"), ("23af9dfbe4df1a6e89e9988e8de36e7c4a0ab1fa261edad1ebb034b962c2c0f5", "203c342a9ada1f68d2db16da095a41e1b68451f701bde7f5fb9009ea96fb0ccf", "1772c17c8ee9d94bfff710a5c450c91bf7eeaa33873c4140a9055e116f5bdea6", "1f4e41f4d975a3860b948d94b8df3909674dde1c4bcadef156bda63d15eb0fe7"), ("0505883dd19e01514996393c3bf5937f0556c8405727b08b775f09ce1a87eb1a", "268df1e043ff8a22466de61e94ec6a5fd2f4775d5e98d5da9318effa75185732", "136efedcba3de42d5daf3e385e735b2a18815c385f05a5fbd19eef9c6452b7aa", "043a74414959ff3cfc2d058da76e22a69ef9ce2dcc2f29466c4882a46d5fa450"), ("2f57d994b3fc4163d08704d8fd27dd27ee2ebbdbca0973264a4e2379c350f877", "1a582a13fc8969fa95cb37c8c3e8a003fec8ec976a39c44d4695f2657352ddab", "114feb97b4017414b66378247184602e45006213ccfacc996ac6a39caf89cc95", "1af9ffe728b940548795ce2cafa28c272f7f5717df39f478d741b6dd57c1169c"), ("25f0e3f41fccea89770bc72ee75442de69277949605d554708640668f85a0812", "0048844865dcdd05e7210896d3cc9f16e512f738202546e2790444f50d76ceb2", "0d2062c0e483fe577f2312b838de9a3d32245788d80b4f31e6dfbb7622d479bf", "26b6a85266b9bd1d379b6464d4ce89fbce72a5261b085c0086710b4c9f977cb6"), ("0f8161030fbdfcb2e8a899456dc8093df7779e752206464862ee47c3fbb5ff96", "0718d14ca2536b80f204c864fb52bf1fe024d056cc05f3056c4257ed891589fd", "1bfd72fbcd3fd5e9965547bc0c8f38b2118407a6ff5660d364553aa68880d372", "1737ced67ca597bc9635a5ed6e36d73c850fa744ac83c8662fd04e14d3401fd5"), ("0a8aa384e8ff34c85dc0a51e6bdcac673d21b72a97a4ddbda854f33b30d62357", "15865e756d366c0674df2597e00427f3fe2e90c20c7554fe62b437e35e201080", "0e13e159e24dbd1080bf7cb63b920d4346f8f819e08c5a8921676f342911a9f2", "20d6ff7f60468a4a2679fc6132708c72a683dc69674c8ba07665691e9b44d2c6"), ("09d1708ecd7b181ed406a8c9865ab2726b1c21ab060287d7d852cf50aa86b2ea", "1467f187e6dc040c3a91696af7f56f88212b4ba529414803438805d321e525a6", "2ae1351015ad668cada344812036e7d3078c051265993f68eb45a2ccc21661fa", "0efda6d4152335f7a2ec4692d74adb9db5f2db4640337c6bc16bba08dbd12cd6"), ("2ca0aaf7512e71ea4279b63a886b809201f892bf0027551872e37fdc0f7c0334", "1404831e883c482bada841678c3a47b7b2bd7959d011cc068d5f72fb5f44bdc5", "0d5bec8363de72a4ee72b3f63c740eff483027669efa1ef1a22ae4fd6013da76", "29d7334a5442a06a62a5dd3304274a2fc0c68c5d5bab87a4e3cdb56f7d0ed358"), ("1fe5eea71456afaf6da5a9e196d0c67ae3a900a365c2795a479395cc545a7ded", "1d0e01ea300d1528788d82552691b79eb294af18e7a5dca2c1e1b634c2d3b857", "2683bec736e649eaa991eda23acd0b9fcf6738cc538cb93dff3f7146536ec8fb", "0c9319cb6cfd153a4623d7b9c6449f862fd86392915524e10e9f9e09e2e3b533"), ("2e0b5146813b081f3defad7a92dd334560f94a6023d25d99dc54d37356f862be", "093ee920a501d0a0128eac99df756c08cbea4f22bfef761dc74471ef6813b323", "28fe7f8ef57ea6ebce196e1a267ef13d05ac7a53b18966c5694aac1696432cea", "233b809692d008ef9730bb4158e256be590acbed294d3c4025fd3b4eeb53f266"), ("1e98105d72a43d5d28426f4d53fd130e3413e9023bd78b053f3c80b3031c4eaf", "139fa6132606f46b70f68bbf7435ae9f8526a73cfaea13965a62b2d4e70d6b9e", "27544c8bdc64e31f07544561907f001429ace38373dd56eaa4e5ad6e42cbda65", "17818b303f30eb8fbbf5257564aaa6e39ce3c18f45a36bbe585d4a4450a58abf"), ("24d01953f821e9424cd87ae8bebb1c02c866b6a4856dc688bca6124528720ee5", "1ab3b262cf6d84eaea97fe55b06984add90ee7773140f01eda05b629aea8403d", "1f931bd407d0f91e6f47d8b11bf0668b4208f1d790c43beecd4d4f2f0417dba4", "1325861d1b9d8d96ed416f5be99ad5d43869278c7e2644a1ecf14f0df96668f2"), ("17d8602ad189798c6d496a3f2a66496412de313cedbb76e47d78700e565c8f9b", "15bcc44ab957eb237aeb322fd9d89997e24304c038b39b05898f97f4dfa836e5", "249adec29a7c9808fb0a8e53dd5e942926e4df16a9250ce607b8307cdc67b381", "128c70ee63fa562b4ad6fd896e5cf5d0ae25503d6e36f711a95ae28daf507f60"), ("11ff8fd0d7ca548d465af7199f7ad08a62138f2cab10e1dd5b7d37c4085a5be0", "25516296decc6bb0c397bf29c04bad6570b316806843c91f44d0e937d2b5c581", "0be5c3bd994f2d0fb8cd5c2228cbd7a1473779e2c4c4c47f2895b5801781741a", "07a9ba30a642c08488de655e440b8a2a822eddde7cc33d9b12871ab4c95b9806"), ("2f82aa4385feafaad7ec9171861c4fc0ff0637edb276593ea2e466296f0ea838", "0dd80b8548092fac93afb10d05daa2dc4ee26ed1480c85ad10989cc70abd5b6d", "26cfa72c3014cff5d92f024539d8dbf1295732262964592d9bfdb8cd30304a90", "122f6ebf75905c0c119f822cdf8629b28f678df154be6ea8ffe0555ad13db4c4"), ("2ea5e7d7dec5da21f774237c561df0a50e02c8b4f8e9ec71eae51cc444cf70ca", "196c18d9065ff1f7a7f23bccf464f07a6df862e3af0a07d708e832e82e4138aa", "29059340c56c7192de3ef300a346ed4c6e4ad54fc24e0878b590a6dc9351e99a", "21231080a2e8aaccc55a68194fbec79407b59203f57ffab67582efcb5495ea36"), ("2cda8d06e2687cd0ae32af2beb3ea7ee9e7ecf7b62e476b154757b96b9e3dbeb", "3001b00e0b6463004974e78b7aaea47919d3f023a0e23d247a93373a44607d1c", "1eb38b5796ad7bd22cad492f49a4aa5e401ec84fb1ef4f6ef269071d3ec88f6f", "0d25abce44a504c89fdb1e4bb3364866694d43b749fd56b3409528da80262f9a"), ("00fcccf6f212ca81a9d79ac0a29edcc9797260d4e051f6f6e6ee61481fa13b7b", "0f2da2bdacbf3246bb44c12db3488a1c12f407a3de4db5a5f2a819eaea564a12", "2f7dd34f6d9e16bbdb99bf094e5d70da0fdb9dbfef092f15f3cd2f5b32bf69cc", "17a640a3a218642de9504a0880e0cb77dbf49dc32464674d57d9745e0819260c"), ("240fd4a7ef99cb50e481447feca65a44af421f0eb2e5086a2b832acb5c87881c", "17f2ca6df30edcf8b1f9e440d5061c4d49bc00f59c24104f0e67370c3747219a", "0108aa3a3b7f6ee3d693911735fc78db2d2c336a6e0a2195a4bf3fd3f7d3a190", "13a6adbc14c46a3a350d6d7b158a8d06fca40786c9e136f5930936f546f0353e"), ("0739894ae0d998abb09630c763b9174de5654ae9f592136ad364f39bdd261fb2", "1a35011d64f127c284605b52f9d968e4652bec512945aefb4107b948ce5daa96", "129b77e35ef28d995193ecde2ac56f9e7571f9ea5bab22c5d7bfcc07baf29d21", "1803118c54af306dc9d5bd2e60c3cd6636032a8541f7e05e24e8fba24685e528"), ("0b187334973c76bfb91ac060e47a24a896f1fcfd56f81adc6b9503979c79e90b", "1514f779c6235fb0b6833abcc512e6012a2c4f55a507a746efef60bc584c8a3d", "1a4b0d0720565c0d451e193ca6bf4c2dc1de857118788ffe3747b6361373a92b", "0c99fa6b5c9aa6885c7ba2f73bc618606fc556f13409cd9e898eace49d0288e7"), ("2b7c7a550fb0fc8bc722aba91b7271d33cc7ede20f96da11520535e9c65c4ebe", "22e3521205b822adbdc5b4950a19723166519e66763a9b76e18c3c897ccd0c67", "2f0c82a47dc096f2e9cfc9655ca2c62d237d77d84ef90672cc367e2de9889422", "030bc4a40289d14d1c7d9e2cb2bec4401ed4c488f6c5fceb7e756904999a074f"), ("2a1f57fe8a690ca930265278a4d96d7d93182fed4300bbe87ec56e2804872799", "14557aad06dff26e662e21ead237a4b718cf9d0b90738204f5f48763e3aa2044", "178f6cfe3026ba713c85bbab3ef271fc41e034ba4150161f0cde7f6058c6655a", "1eb8b98acb425f4a1530358e2144b25e136d69afc7cfd9cf3f7118705e171c71"), ("04ea6aee5f84bfd486630f9e41baf317bab3c216b44c43fa50e9aded638f17f5", "024a58dafbdcfbbdcc8a09aef4009d4e82eae5b5166d7634eccbb87f48c7210e", "052a534dda332ceb39cd0283b886e99cb3e146824b9f159c9192127c0799711c", "1f005263bef00598885bb0db7b5657ef1679c740b90c7f5a2210b9fef40202fb"), ("2c59370894626a9ed1d9c7627d5a2458d033fbe97a74f7c57c6475039651daed", "24aa426bf0b17940be847673a0c1d94cd87b723e433c7057b831dcbb374571ed", "2a2d50ac3b4cc6a1ba3db424664d650f38553b9674c30bfe95051a1e2f8f0941", "1bc6d593eb7f4b903fb709f547dc1affd7bfa14d7d919c3e78f85f714c252c8e"), ("1aba0e37b626b242a859bc9c55e9abafcad8faa7353e1c30d4a15e393b2865a1", "0eb09ed5d81b3cc00ac03bdbe2eec05c2774da62cdecd4eedfef4df95f24340e", "0fdfe7311a720e1fa30cb9ad33940e63d7841077dcd267bb7722022b1a39748f", "245959560385115de0433808f93bb86b12693d8db3ecaef7951673bf79e97d6b"), ("0b8d03d0a796af3a9bca0d915ed645de29b0b880111f8d5bba8e83c3c74571bf", "0ef307b4eac584fc45b0ad4727a248d60b9b0bbe7a1a38a3630d6a96d9482578", "0a860ff0727c49a97882573558ab3f299fdd1e1cadd5a26078f41165e6e0bc8e", "13f5205a3749423c788d4313a6fa362e2db1a338813dc6d7275cf730e1b26900"), ("2e64d98505a40837e4afcd323f04274e5ad9408cb0501a3f69b98b8a9035defd", "14848fd3afebe55656ff9e5cab5217363fb2340ad226687bec196be17b81dc37", "1d9c6c8f7d13a7136684c1fc23970554ddace28ff56ca99f2e9ebbf4c52b6e14", "01f29e809ab9ba803e60df0a50ba5b1ff34f87e7fca6957aabf5d8eb9f5317f2"), ("014c9443c3fec37e8ffdaea6d2bfd735d5b125fdc3bcc671bd310b3533070c9c", "160aacee7b5b2c844bea5b5339c3bea1c5ffebb0d2005fd644a7ceaed3e3071d", "25a9bde06ef18b6bda17715c1f88c784045474c17fbbe815d8f7c063f491409b", "2899a72589f07f71de97a12999969b3143055c89dbba2f80d7ecff03ead167fd"), ("20233b4c067f14cd6a61ef177e0c300bb6e2f21562a0dd7b840e66feb31336bb", "2a68284ff11c7d18cffa2e79c2d0824ae2851be4fc7c1a6acbf7f0d0678c35d3", "0890146a1e9f6be8939caf20f264587a2ce2fe400a3943b1200aee5883f5aefa", "29e1b64ef23f333b33fb8f75060ee5507f8c7c82fc456f88ae05958d36cd9c60"), ("0563dd357e4149b71b7498c81c88abb69e9109423baa90cdabc6cdc7e87c068a", "2a43c668921418f227063f02261cbee056d72555243689a03b6401724527dca7", "18ae69c4e4f09643bee8005e5a6692de5c155b2f1273fbd1f32e90cbb47090c1", "221a2f6d39aa627c617cf6f595291d14df8ae1c1f057fa20a6ffea0990b4ab3e"), ("2540f702bd4df350a13ebf69e728ef42c498ed6a6815e52ae75f57bfbced073e", "293046faf794c1fa8ec65ce8083e461797d032ce03244ddba712a992ccb709bf", "1f66d4e6c8fd55d55abd46c7d99b0fdd22513e0d0487e870e572a68b1ec60f5c", "29582bffe9df803d7e760dac7153486375901b835962898b05ab1c6c04fad976"), ("1cbf1f4afea424f45818390711961e5f76984b65fb43172f23a14c7e18dc28b5", "20f5ef8bfceca4bfbbd7dbfb41c5f5889356976cb61452b011c12f69bd9bef54", "2e672a947455975b4a860b664782faa1c9c03971bf6888332800a1f4902f4215", "23f801cc41cd66d868641408615d343a47f341e979ccf08445a747afaa11e646"), ("12e5cdcdda7d7f93cc6143728d3371f08d5ae7f03c04c2772978d2dd91284967", "1a5070d13687345325bf3a608300e7d17a1282acbd381dc7d777bcb0eb09883d", "2a87ad01d211740e74fe4a271bf640edb6d68398a78a34cedccb583f2752cd20", "24b599277375086112430b4403041a698fe20032305ffbdc5de797a20af5c4c4"), ("094a984a02602e1acc305eac3369644766bd7151855f398e6e5c363285ea268d", "1d20cd077db95acaf3b230ad39852319dbcf13ec06e65edf3c50d614c075f9b6", "2fbce1a851cb7ec465a9f7b390095493f618f817af72ddc2d026703c7f49fe65", "02a86623f47b74f3cc57d5fe05d7c040dea87ac00aecc6d6849df77bd9b3fa5e"), ("2677d19629e40f01c5b8873c3478db7bb276384577e0b55054aa2e2bd12faf49", "22ef6f5ca36caf4dbab4585d0a7df914dbed628aaefa741ed47b604b61ba8dab", "1f17a70bfcdef4f9cda21718b99e462694c8272ead7c7a78709f444b2640d3d3", "266691c81b4bf78dca0bc55d2b9e30013b6fff1f1e52f49e6a563a2129b1c9c4"), ("0833c981f50f59ca04d9c7a08888510138c3f9c3bf304429789c271b494f1295", "27e7b6c45a86c1e7539810299e4f4cd78c0b40c812a0af1d6d6d57998e8b6e09", "17e2d157fcb7282eb6e3456d20462575dffe2db46ee1b2df5d18d3985ea3c291", "04355761023ba088943f6def5aba10fd687f7dc0ac7c6a4db3733ad59be1f66d"), ("0342dd4be250ccc6356f29721e19fd6404abf97ab781a14960cd910d02e46230", "214ea554bbb7f81feb997a2694138eed01e035d1ad00ee86003623e7500e6d04", "075a9fef119eb1f279f1f502c1ce3f3d9a707621f27856b276115e3f31c1b067", "103a059de7323fe1af0ffa63cbd0cf81cd40383f8f184ccbe1f6731f5c5db5b5"), ("129c160cce39f30f5926c842c8d6b89d0e67c3df1bc34f164b65cbb5f655f2ba", "1c2eb54228c75398d1ca3f3d51ce80ef5e911807286fe7d5e11b8174fdc4cd75", "0633b5e1add41a1adbd2fbbbe70317ef12cd428f3d428ee62fe11a6f31902290", "2fe91b4dec20de539d5f528f5fb62f0ddf69a6d41d1fec4a9de8fa49c8619bcc"), ("19d856e6fa70e5da9827c4ba497e44285ce08108480c7a2dbee59ab3e1e7e503", "2fadc3cf65c5a2da16a2a5fc66c8745ae1b5aa444d3bd794939de6a921e26b41", "28d2a5b68284edce9864fc2114a9670559e9d353f8ca0a8a824b1167c04836ac", "15a0f299f5e35bc40e9b288c9130215438db14bc5487b3c5ca2987f9d187a314"), ("068f97dcdec9df770b2864b00c3c036f6af41d420018b40f8c89016d9dfe2963", "2844e5966711e55d8cca8fda37a656c0290410c50a3748fa2e9ca8071f7b0873", "2330780a07a1bf78269671b08bd874a07619fab8c7211cc721a7cfced6da7273", "02b7656e1b0f0a29873ae89cd92e40ba1ca6cd39f05fe45710a6124c0d8e7fd9"), ("190fbb551ce6e50a0875909d8ac011c0a0a83aac8b5c8db0202f09b1a919168a", "0c4a8b19abbae59ed1346607e2a59ff079e2ae8123e603aa63f5de8d1b5cd842", "243017d3c4eb30da42a66e986c6dba7e98376b0533423ff2ad36f6e27d20cdc2", "11b28335106422689465db4dab582310bceabdac141a95e46055e91d507f67f8"), ("05e30f5df887abfeaa14af74a806113fc03d173d18083e76fc75ed51dd3ddb25", "04d10bcb9a77e97abb7ac2ddbe13c79b53ce362bb62d3bd1f294d097c4ecc395", "089b9ebe14196c09ab4a5766f6d76aeafc533e10a14e09314c278e60433f0eef", "26927bc2ee339e24b44f901976980839ff542cba31dd7b4b049a58041572b94f"), ("14a08221815f8735f4b6060aadcdb6f8b02bd4a95e7621484ac4e1d153f3ce0b", "06b23061bbd4ae514645c8dd3700a9fc06a9eafd454ebc65a8e9d767aa42016a", "1d6a40c5066aa1056f52de78a6585eab0900ff28d8e090c41cd4249aa0c60fbc", "2fb69ac2c33654104c0cc3bffce3add6e90a05b3dc98e42f6d733789326149b1"), ("286c27dc9131d4ab7e2f7226b58141a48789742c84239345f186a33dee0be38d", "0933a58a1b8ea9ca3537c0826ead7832d12f7cdf373deb76abb8850e1fd70a82", "245a7e7b352e60e8e71d5b34632df552fa260e7e293e5cd7a931beb1cdb1a9fe", "1e54cee8ace5876574e23e91562c0ef0f9c40c24233776e77edb825bf3b46e25"), ("2164ac7b735c0431ba9a1efdecdf28ac46496bb7a1ef439d25e7b61de8690e53", "202d421b3a41a73b834c036794d6d78adcf6a8a76a8446338e6e06cf05098f8e", "23ae17ed075873ffb61fcad78b65c54320776a0e24fbe0a0ee8a322a38cff183", "1181bcc37c25c77ffea6031327647edf7620e2ab511b14055dfa883a309facfa"), ("2f7c9e35b7286813ca57882fcb8b27d570fa955cefe9bfb6f7cf6a9bc04744b9", "292c4a28c00c1d0ea691bf1e6f0a689c2dfb73427b7e6539b09a56d2ac5d0844", "2ca2e952450b592ed2cf4b30d92d5ccbc5b07ac1a64ae2a54da95850155ed719", "1a174876186f9b050c83cf4dad3374e2cf7d2f098406f24ba7abc6203c332f14"), ("0d0530d32ff9deb4ed4d872c3fdfa51b41bfd11ee8efb09dd00979c69fd648c5", "16699651fcd4949cc27e0185515877bf2d9b2fab2faf82777dd217bfac2eca1e", "0d2ddd8ac749d12c440908c4f68acc70b00d22f0326b5f92dd9781f59af322ad", "007a4bae829ef60c57077b70f917906717cd0e6ce7776fab5d4c542278b3ec0c"), ("163eb7ef234a097e63a1ecced7947d42b7d23bdb522ed77edd84d29071aa6248", "2d28be75d79d452c4fe55d62379be3204ed4b4066f610e0acc702b611a0d0bf1", "228fb45c200d403a71fd81438faab8c52f55d1d8bdf9562c9a2ce48e5cadb020", "2691916f5939d22c46aa4b3af5b2cc9c680dd3a4b3f7440b65a2d1f9d0fa931b"), ("283f4a70833ea6a26fffd0df11444df45977c431e37d165353fc9c6a4140223a", "0471c2689ccf512bdccd96deb28a21f43fd802250324211cb889dd7d903cf484", "156490de3b3385a41aa486e3f80c4a368cdc346a3af2a3ada8d129753c8b9c55", "106d42a9088125993f8c8f511a16b9c9d3aa73da0c1237065588109f684c2f50"), ("07cc7223a54b5329b25e260c6553b834bcb71a34990e10a4419717a7c99fd9a3", "2b918a0e32ac5a21f53a44d995aa3cb1859842f4ddfeb9f79dabb15a6c68c21e", "0480fb5178b6e3a5bec0416cb8b318839b2f64af9d711cb2133a1c72d939b422", "1436775fb5adf408b97fcb445dadb64b275bd3549a84d84b7fbd2bb77e542ec0"), ("21f5cc46a74f46a7cbfd80a2ab4ba2060e9c748785c09224251fded1809237db", "2fe24a01255f95d5045e3880b2d21e7d1e2f24270f9edc8cb5a0ca3dd6ad3d1f", "0558583068c45b9ea0c444a57f73f5fcd5edb8b8347e5e2894c7f51db60bed0a", "1395acfc4f97b675bb5ca2a73e744aab3f79bdba369321304b384b097a88633b"), ("1ee72674565d06772b6c5bc10122e38290bfd6e79790fb39108fe52f4887fac0", "2f4ed40974e3ef0882d4199632f4d9fc2de0886cf117c7d54e9973fd28c66c57", "0cd26f7c7a809d1c12fcc2970a737e8272491ac0a4a8f83a685e988a35f52dfd", "024a432e607b64acc8992fbae9aebc6064774ba8eccd52a1148ebb41ec12060c"), ("17fc98e5cd650a3abc03cc1694bbc171cd00b42ed9582abcd75b7bfec373d36a", "1fe6a07a5978e97054ea6effd218ae09b7c014bb033fa96800209c3bd04ee0d3", "079268eac1dacb24796d1c11d23af43d3055ca8e9c677f0d60ed95c57b81f010", "041458e9582f8db99a6c0fe2102ca0cab870293bc72e0eb687742a30a52d4479"), ("0ecfc3a30d66679ca4e2afb4215db02e909aeb735acf40adccb8b38e33c7f3e3", "0defe8064e89605bbd2d33e3546fab9ace0beaf1081df705ed7634e67543762a", "21b7e93e7e43952a8c1405751f3b6606685e46790acd2b452c873ef7b6546db8", "2e8a9a5eecb99916d34f976ce5df895f8f42ce27dbecd5bb974ce6d69e1c0499"), ("22dc188de508d59388f825a230c1ee8f2c192004fa986bbf8259253ce087707c", "15ce3d8214483013d438f8c2259e5b19944013bd2d898562d387b1255571cf3e", "236cc3579593c94fafe5a7e9e0a3a01261e974ead9802a2f0e5506ad05801f19", "0526caf253f71bc1b1e59119217d2815f2b2da6709998526be1f0e454a2b5359"), ("2d94a00cacd55ece5648205b74a84e575d7f0592843f602bcc95923298628050", "103445875a844cc6d0735d7d01f68d54c5d5afa4502295bfc0ab9cea2502b6df", "04ff701830e0261c965be78dd57f3fa7f76e2e6c684421589734b54716385a28", "21530eb291aeb889ec4757ab308f6f8bb6f4fb078ad6f35fd10e1c8c15de991d"), ("127bfaaf05f79ee870365bf25a867eb825a4ed4b9a0cccba54e9533b35f87297", "0fd668cd6331d23b13bd282912d67e9671e097db078be73731a27cda0fbd1ac6", "0bce5bcbdfa769b6c29291c078323cb1fd438218621ec74867bfd1c8b5a4deb8", "036ebbeb0cbbdd919e920624a5adb683735b30738ea004ca1253632871151ae3"), ("257a2e1895d3baf4b3649a4fe201517052e8c5d5f2bac31a326da19176f5c0ce", "205982f0ed5bae21d9f418d1f94e26c447f9cb1a928cd8eb04c4f24a5b3033fc", "1976adfac2e568b01302c5761afd963f5f93a009d8e0fda88d676e4ba21497f6", "087f2e27a53e68e38fb623f9ac33d27cdaa543f187588e9f0b3471c4ae967a61"), ("1f14d88a9644e83bcd134919a73141718760629669372d32a2ae11c4cde54407", "0b2fd3c7f6033ee3ce4706ce9c469049b4856d684bc01153af03d4b7755f4372", "09edc6cda9fe880ae5d7338b47482eae4289c4ee91b1abf4e9f7deb039ca7054", "2eec978c6ca04eee1268b0fa68bca63a6e5bd6b900564a0a49b1b894e877ce3c"), ("1881250c2ae30d16e51a2038551cd8a3dea924b3e3d4c0423d892b8cdf65317e", "1451b48fea57c6abdfc922104f403bb75a8bdd086c25f0235a652e8ec4cf850c", "2c5dc8165297d0e7d7d468e4c323461fe97bbb9e9b35614ff4c2275e53860200", "2a88c64aef1b875cafb73d73ff60238898e4b94c334623ab85c5f8797985ef2b"), ("1cb9fb4dc60a5cba91532f723855ff304a61d5287cd8d6bdeda567a6417740a5", "0083d710066004e7d49f06415385cda57966774fcfec5ff781a6c57ce4f6a2b5", "1461c2e8a36c38e211718b946cf19f780a97fe0a0f409489c1ecd2da32af4921", "18496ec2bcf30895655fad5b8ebba6f310fb815edc9ceb14359cebe3eb815570"), ("26e95f5dac55fc34020ad926764f55a75c71b076901b5afbace030261a7b5b30", "12c9e59fe0f018cd7529e7ad8d54f701b0b83d515e09518195a18150023106fc", "2ea916d27f4b610c71d7fb9d317fd7d44dacff3899b4f8138040367e24e2ec03", "06c6ef7325e835332283cc4ddc57588973345f5b4dabb207c662cc8e38c5c460"), ("0ac29fcce5dcc3156bdac2d044c40c062b79b0b45bbd3c1e49d41c587b6d75a5", "26c07b9faae0ffd4b247cc3c90c076a54740e00fbf855a3099f9a6af2b961574", "1c3a9b5068854343a5bc0e6f6d6c4faf5666a03b3982e351d661665c72a5005c", "1dd6d86ef047ad038c4a4f922d96d578d820fcf27848576668851b39c8496ca4"), ("0f474eb2123ff661c4edc3c814160c034d4d1b4d61b025e2bcb8e2dc8089e3c8", "16e33c0f3a0ab701850ae8f5e12f11eacafae539b068594edc9e83e3c3f8efd7", "199228227efe26a1a78a2e34029d6f214f7ea8c9ccbe45d727427bed85bbba25", "2951505a15ea73ee6fc4ff55c2a0cc61217673ae38c99e6f1a72fd0d5f36c5d2"), ("24767e78b90654ac164f8c80c779ec86e821466426b18e733a30a195760900af", "23f169a33becce5b1c6018c4111272ea7ebc240723c57ef163bf3416ee913a89", "0a89aa049d401f59c0a3b55f9f84f29417064e359316ef11fbaa399fc5e660e8", "1ebddba8723e62797837fafd6834de16583c2b200b6bdb6e6d53bc96a2a3a2c4"), ("0cfb03c3800830bef54279f2cecebc93726d2c358f475d85f3b2c210f7dd8b28", "2f27cc636c146e686329b7909a7019eeb99d18c9fdc4461d21022741085f4664", "1ddf5ba151ab49479b8367bc7ee4a0c4cad2ca49386635904d4da5c7a5e9ded9", "012e487463635c56696fe5a78a17045a86886fecc75e8e69113b64d6bf5c4b0e"), ("0020bae817443241004117eff41624f4a196ff414536930a225048c9c495ba80", "139a7068e1d04f8a1fb655d7c3e7a366be8141e65565601cbffd0ade829fbb99", "16d1efec45ba0db5fd8d2b0086d68e0daf40c711ac900da5981cde7b6f139803", "25cb4ff710a45ddc602bb5d53b65654b0d9c2c09fec7eecb5ceaa3c6484190f1"), ("07582ff14261cd6d7d03cb539b50492ca1df26189ef79b8f6ccdaf4d2fb60da7", "023a3bce520b42161303f58c9caa0b86ea89e51224f997b2629348c2d0d5ccb1", "14f09ed47db3a39e962c87edb965c35da0de4addb0fdd734c138e346ef8e5d7d", "2e7524f2d3eb62190ca6c94d06f7e3569d2c904b5a6d8628911435273736b0b1"), ("215d6de4218fb3479ba890e365aefbe09d50b5b14e9f5bdc2799dbe7a136edbd", "16c7f2bd7b683879e7b485fb32cfa84bb9b9f04305ad28e9a3b1e3d8fc57b69b", "05f2575a50a17cdf28e36235283f72e963d07d9ff91292e0709b2e94c6bb3e57", "0906f9b865ceafb9b5121665fcd0b83b299255a673a6826016e9eef31b7e501d"), ("1ce349242e4f803a9f2fb94c2c9e92d3fbfc0d767f44a187b649491778475585", "1954854c70274a3cd8781287da1ee821d31a4e0b7da6521909c327869fa98ef3", "2a10d27e9f815f6d722df48cff8a294162dfce4db10a4048634939a9975926c3", "0102422e23037a6d7e315463602965cad35419b0289e5c12a7afc85ca445a00d"), ("127d07f86200a0ee1bbc30274862aa2ad0fe2d1ca9bedec7fd1d3560cb3ee52e", "2f81f5c835907e9b3eee08605e251954a441169b225ddee09b9637e03726cfdc", "26cd9132ccc333fbebf0f8887e8a2ebefd39f01f65a60bb9683ca7d1a230f89a", "055f8eebb6be72d41175e98f9cba2a3bb5b181e1033c54c4a307bfc71e6b1604"), ("1985dacb016840e44a02915295c6ebbccec3a8e04567117903bf05a23cc693ab", "2e6255d73e56477090db49d3048355e36548611175ea702244968b2b1f2b77c6", "258e87b781947a99821e446b97acee0d0886e4240fbfdbaaee6876a7ed804f02", "2649c4fe6fc66bc545ef1a2e9903d2ad5c73f1bd54117053c6efd002f18df82a"), ("0c148d85876c9820ed3e5c80a950ffd64c09ffc59cc8a677e99536780c1405c3", "2235a7ea5109a7e2e1e59a7aa8218b9b3242d3f8e7bbca36a6c5fcc0ae2b7793", "0f7a615b46a603424e25548a050ee64cab96e95d6788e6cc643f11fb964e76c0", "09047d61c803f35d5aa494a6690f14f49a2ee8db77d7efea45b869a64521f91b"), ("1110f71b1f384ee0d49cd0fa6ef12a3636246e45aa22d721189ade53ff2d4b97", "065ab89d638e483763721e9786ae9ddadecc0f323b4e7cb766e2e7630ea5859b", "2c7b9f400054a76bb8a7e994dc48f8b3e797fc107349dc44240340442adf277f", "1609b2290a6e7628e21f0e9964b0a2e4f939fa7f414413311fec5bab7fca6914"), ("25ad3b339baec78c0459f22c18b8808ad66401801ce8538db70ab4a798268a8f", "00cdc47cc2048471287df57f2e30070927474f6cfe2ebd5921de062f11178543", "1aa24d887b643ed83a2523dbdad386bbacf7db992062b550ecf8f50ac7089b31", "09e38eace79264864a3244d21b8f46069b3b55acedaa0dfd81b372d5ae9cf038"), ("16938e026c0be4d93d10bf5bccdc23ac4da0d65fb4db125a7986625575d1d6dc", "0c8d8f487c05ba88ff203415c02746fd25f3eccd84d92abed77930480b5514af", "0e0a0a00b26c22befd8264fec6fe3eff1a2c3bd84903aad757df7b1bdc162ca3", "0c538671dc2f87ca2757d9e07a24e79f87f713f18d95562d0b26c685f341fca1"), ("10d949c1107853b7c8370b0a70a4bb16a4fb0383422756655c98af431ca0e4e2", "1af23f4d4674afa0f1fff6db80b66f46300a846a4cd401df7d3048dbe850b4d9", "139f9f14ef0f38f7d5e839043ac51da43ff29616666d1bb08bd743b7d59b5dc6", "221666f6f767dc22d75655259ed2e23176fcf2e830edf9452d6a50e11c9cf66e"), ("056e6c07b307f2b0f87f312ca71d8abea3cb601b7b78d49e886f6a0eb1ead2f7", "05f5a868a07642118c184f686fab55d8ec8ccba3e961ecfd6bb94809adfe6874", "04390ee547b43e5cf8c22c5e832dd21469e68c9a611c163f8ef016fbcaa282a4", "1c0e6f881bd4ed376ac059e3899ec7e8aff2fa54646f205630e146d4c66a24c3"), ("06a269d289ae35e7e81051da10af0a004bee0f0115537f20e344974c522c20bd", "25b685130f3f83346d8f0fad855cd019bc6bc53a51d8fade4f981cb369a1cca2", "2b343da855f265c0ae022eb6cc24935ffea43c14c6f8a5a3020b5b5c82eceee4", "0cd31c3c9545510baba95cf2ad47a423a24aa41afc710f8caf9a8970e213172f"), ("2274bc5ce913e80e997da91b24c8d49bb583b2898a02d38c45a44ddb56ea9e72", "2db88ba346cba3ccb0db2eac602f543cb43134e43398dae53c76cdac75eac2ff", "0e6ee9e6a25d0ff5998b735bdf74725f3c0e7174b1158cc71e544a9437b6f11b", "079091ff53e81bb3f403dca82d346907c2e11a3b971ce03e9f56e6589adcb905"), ("12a8d162689b1c4e40f05dceda43bd56a0bac5d89bddd640c7004bd8ede83db4", "24715bcdbfb658b312d0535670001e2cbf8ca5ef50a7e9b1b5b5b0c373d45933", "29e2092339548c57e74df5c89cd4f8a41f67ed5e6c67c86e41d1e503241fcd76", "0e9d8ae0123b5ae7e4db994c3c290b048c4c7187ff6da32b8804a13be9879747"), ("159a3271c7f7936be0b2dfa3e93aed503dbc9a76fe4e90cec99d91c311ea1e2d", "01e2e1077c581f3279fa0abe33295dde5f016e6cb3a11bb5433b6e524de717a6", "11de0f52668ab0e868ea35fc823ec45bffa337d770b8d4784e8e23c7fe4f66e2", "0a87651accf434893445eda341a5b89bd3c5b21b2e0f8d45fd26c9d211da4e14"), ("0b66c8ad76a517c29492c04c59bdcf8171519a8cfc39958bbea94f1c80dc83cc", "2898cb26c8947eb20f264cabc7f57468f0465ccb3d221fde327d18531b8c75ad", "0d8889cc90090317360d21958091d4d2c7763c6a772890a480ec66825a7c37f3", "2ca342f8cf8c9da25686d24727f690354682b013ceb43d54297946c45a0f6226"), ("0cf432e498919f9be5ab1fa969f900fea1ada01794042c6fb86534fe8eec93c3", "2ef30e9ab22bb0f1b3727dd36b9d3dc3b4c82c0d5612a26618718ff708585671", "29177721633a9e471868327b06813f2c1d88e9bfad907527e26654ba40a4fb00", "2d236d00155a63bba55f7db3aa20d0aa8b39cfdb3f268876d681835c49bb014b"), ("1d01a895cb5980511feeabf9b68b937711b19379fdb9073e3539c912e00740ce", "0ccd223686cee183d6698e3d8c7668d070213227b31d0dde67204ec073828e9a", "1da18fe9c1d2a44b69698cf2dd0ee165f283396afc59c84240d5e27c6b789dc6", "1ffac74fc550b7df0379a844c8cbed2ad834a9f44af91e2c9d244c25b4e42565"), ("22999826cfafa69a5a7af70b288a5c9bca9add82e949bec48a1a4275d59a7cc2", "20b7ceb39c98654d1f46ff61b2ecf2d2a9865b9c896661be240baccbd13aa0f6", "2ee7b0085cdd0e7b86865da015dda453cd25a45c4fabd699010a5125a030eaf2", "2affcaf019c297416250221c88feabe83aaa5c3f8d6042ea5687b3c94207e719"), ("060e904aa4c86a2051fd3d1aa2892d96a4794fc4c15286f31fd708624fc5bb94", "274798615b6e3df5cf243f448450b86d6a81dff609055e25fd63ae3d42fe202e", "18840e588a2d3462bf0c8ca4993bcede5735d582017c9825a508f5c88723c6e4", "1a1bbcbff7373cc94170ca050d7a03fcfdecf43a8c8183e71b1254a5761076d5"), ("2711c94957c0bf48ce54cea50eb166f5b1e4bd5cc903be1e915047e4af256b7d", "2fa98fd150594c6d3390210a766c7f6670cba8d788040746c28747b0623c6064", "099952412aa70f066b870b10f01e297c41498e362eb9656ac9ad1e48cfc6719a", "09d5b0844d88b96294402c0ebcaaee472061afd31d7a439bc88ade74c40ee8e1"), ("17cb34391dd91bb78e221ce6b8a0fe4d40ea7472fc63dcb9db56579722fca997", "193724ef8c553a01cac4d1bf9d347e6b83fd7ec1bef2b5367aab3231673ef567", "101e7e9fd41728165d0d7a6e8c28504fe0395ce8134466d82c8e851ea2d0eca6", "0f5e9c54f3ce4e7097d9cccc6e518bbd7c69e302829622b9aece9344807f1d12"), ("14b034f794b90f1b231b6269749f6babf666da183e70ec5b98c9cb98a17cb5cf", "2ac9a14fccfcca068f378c45280d796d506ebd63d1bb9c941be2ce0d2fdfdc0c", "0d1ad11550cc028e1de0773358beac0faeb27d05e82b53771f896b3ada2422a2", "0ae4e4b6b6a0b09bbdbd213821ce5c08a8d1060976c270c40cebdfb4d12e7776"), ("2776c3a2ea9d9e79da949c6ec89e77c4a95b29035df0b5d9f6d9cd9d2b75a771", "1b2fe64045903b32e2976b9060ea01e6e039200268cfff385b8521ff57d52707", "0dce3f9fa02585fc4840684232e17a04c886f7ff40c40bbcc75da552fee93aa1", "2df8a1a0647ff3c1aca51d8722a2af03e66f58163c28d7aa5e924aa2dbbc8ab6"), ("1ddff0eb580f496e375bfe09d41324224c109847ec25aaf724c4c2bc5e1d40db", "2117c80f5d11494363ef794f689e8e04bc355d17c866cf45523feb0ce77a5f77", "07b2a538b9eec587e1dd67799b27b004cb82adb477d48dc894c77f902d248210", "11d3f9c0f181d272285123b8435566e3ba3660a56ea658cb24f1e5fc1ca1f02e"), ("06d1bdb4f094ca34e5eb584cadbe1a78eec006f07397346fd726a12a33bf8959", "12c0ba6f526d19a706614367a1cfcee2fa36f7386d0ce3697ccf33cc766e91e1", "2b41abaf3e4673c2d7616f41b7e7e5219b54a7ae76976d981f2d41c620ec0375", "08644365d699a8bd4c7116f1594bd8cd0928c37cd6e9f7bb52e921b38b98a5b5"), ("03472ae89a99e9ab4a9b48590bf5ab383fa6243ffce7c34388db42792a29011e", "19ec6eeb5b255d579141af272a623a82f92a1909dd41af664416908727da32e2", "293e31f6f06394ee85fe6b0a4be6eb5b4ea025de7be82ee09fab27963e4d1eeb", "2da0f93e3fec4eadf3eb293d005722cb19d58ff92ef13ec63da52227ca203287"), ("1d431f6f6edd9656c37a8a7ddd47aa92e38bdbf2cc019b54cb2436cfa605975a", "0875e84ce619bfa71eb5fad086d90367b90916ed7099bf05ed379e96d1672bf1", "0f3a2f291b870acd8efff5cd144caa60f6b325f4cfc89986ce9505eac1283bac", "222a048cdc50c17b0bc1d0b6b2f32f1c18a22d313cd7cc49d30b01aa650884d7"), ("2c286bc3ba59d897bfc965062b59b98173638e0dcb43c74b6f1ecda9522c925c", "08af43cf02ed3e50eb2c3de248d1cd91de2f5e4c15571188a5e9a7dd62675ea3", "22e5a351d113aac6bd8ac97c9892eba09ec06decf306897ba8a3b1581c63f72a", "2d137999fdf678608758740ffff43fa6c663de2c2ea582129b40f25a7afaebe8"), ("21f8fded05341e4f01a4ea4f5de52bc8f7d449340a00d57d837d564231653ebc", "037f6d131ebd297bc30eabd075749e8594e741c255d41a6b790d38cc876dba8f", "3051754c12e2af7a88f5341c503d6cc69c23bf8edc36c50abbbd1c309fb4d36f", "0034d94fa9a43db7ed2b8e2a6b89a37a426e53ff76a215533c9f79dab011bc75"), ("13ab1e5fb3fb862b24b7fe3c0d2e4c08f52b3ae50d332825e6562e953697a895", "12c6fb643c7a480e8920fee59e4dee613b2b5a7e0d2256393bf7e9d5dce5210d", "0b56a8af64e43aa5222b99a6bf2a9ae39b62897eca8e022e4cc5b3fb099d0f95", "2fcc09a41186dcf5b66c82e36b5e2f3b8f4348b24bb5ae07401a2f8054932000"), ("2c4ddd40b540aface37f4c351cefce020877c90e525de801cb6f8912c77eeeac", "2dd7345fad0e78cc04b5289357d220ad7418b33fbebce35a60d4c5867496f241", "13902862e6f0da3e86a2cfbc1f543f72ed8f44a4e38d440f7c8d2f61bdab28f9", "1f38e1fa78c7d80ed5db5999d5687c2301545c6b10fb96992c05dc58e9e13970"), ("3021a33accce5961567f334a9d46357bdc5b02b32fbd883b0b5085c3a5057464", "2430fc6a8ad47b23ead3d47dede84a4e4c649081f12fb0663099a47a8a006b5d", "0db3e621c8e9eaf893aa045267be255fa3c57bc2eed34eac0bdb05ff54684f8b", "25210de035dbba7c2678e51b643e82413d1fcf0d9396948663f9c71b271c8620"), ("273f313fd6e5f7b9b2c189c704e3befdc869aef3dbfbff6d9e56f3a563620976", "15546a16a48850dd264b55d4164179587969ef46c3be9d496e4ad9633c820da7", "1123516c06f61f28e5a39c73fd43038f45f8f40337e5f55b886eec5a011ae6ec", "2e6cbf5e1da593739cc1d9956b02ee53adc145ebc5dc389fb45b6735e8de620f"), ("280a501fcbf70d658c41f8f0c22ed761b3fd2cbb5c173ba9e9151216d386d5fb", "048fd9d7082331a76ab6bc89bd8e5fa7f8622e960ac97d6827de1431177aa06a", "122d7c7afc3f4f23d66ccd13d19dfbc29c6ef39cb192f74c6fdcbb98918aeec4", "294c4bed8c03349f28155f64bfc3c08c56b38c1fd850fde352702be08e24b285"), ("1175dfa474fe2e71e7d83412a7100747c1c67b14de8592541a19871f8dc02832", "0034200addf1e1cf0e3fa704681c5e640abfee3a071140dca199876f0f7d5d6f", "133bb75d7ea125d62b069921b53b360f1c3f28338963ee72ba81b196b7aca305", "20b6eed3ed35c157fad3bba582694a4d01905c4a2977a6b2539cc830b36f8f83"), ("120aa8c20a1d08721621faefec25f435aea0b8547f6d23b05f7178620715a80f", "16cbc9c6fa8759874e6755e6528282cd84ee7afbd247548454eb016e4a95797f", "1f914f51fa2629b359a3ae4a8207701734aee8124848722b71823fc382e2dfd2", "2a4fdd84f41863037b26197bf8f63aae001b81dd5d77762d1225d8ef9956dddd"), ("11261c314364fa633a884b78a08a128aba31b29b8dfeb072df3075e94390aac7", "223d7510cc8ed6071af02aee009cf3843c57f3dabea29213f44c9d14cace8be8", "23db140650fae35323c6981d5fbad03772a4e2b284d1550e807a9c6da069fbfb", "0a410376cdf52d325316dc937ba03b376991601b6e280e793bb1070a0d552f4f"), ("122dad912c99eb33af68a9e135bb1928a3a04f7f9ef732daafeab79fbb8ff2a6", "2c6ecbda4bcf0b4e7e3c82e588ad8d3a7863abd2cd03c4c21e1716cb92cfecd4", "0cf0ac025829441a358d5e34c76933785167d0d0a181f22c04e87549aa97f3e7", "06f29b456052ce9115592dc64fc4d0e0ef3070b0a84c2936e3fcdec487eae076"), ("109ae0cb6c558a8c26b679b10226aac9bb9c7be7f8653668ae9d1c520833f814", "287f43a0009eeb99a8cfafbf3e43cb94378eb1fe91eb3cf79878f8024f6df388", "16e12f342fdaab23ba966ddc401c4f8f0619b7f17a18d191b38d59612a7a7bfb", "070df8196ae56359967a876bfd997d27b2ed13742e7abed73209b2bcf11556b5"), ("0c4840ca4fae72004b896fbe436351ff8c4f682683d5459aca37b4eb251262e2", "0c0d5c1bea17ff05a4d52031af15be57828f29e4c02f7d687a75f54b2837e7bd", "04a9729167f372a778926b7a4c1ff624fbe1c81153270cd7025f13699710c74a", "024b5c0e39efacb8c9b3e67441bf527da86c4501482e7f5e686667d6e9f9f9ea"), ("176e6d3cfcd6a19394f8ff40bb1ff740a53a69383fe1abf94364e2784ddb9fed", "18ca6f33bb96cf015523f02b4177beeb1c5abda2afbd088b6d507e3a0e43a1e1", "0a053c383fd937f4eef973b00e4618b9af9646d729a0cb31f895ff63f5290a0b", "1d8fb993e621d557b934f82d80df9e911c082a86855e8fb260249fcc44426ede"), ("1472ed8360f6c76058abf903a4b7fd31daede5afeb39f26c7b2c6cffd59c1699", "084b609cdb2b1c4aeea1b88d32a0689a71fda68e4d98576f78eec6a47fa53678", "12b0b0a3d6124f36d2b73f2d91d057403a8acf47a49eed57c4f486cdd88fe148", "1598d6bba9fab87ec4a95099e95e29ebd946b6610d4f7659524d5d2e185108fc"), ("1a0f8d83cf703fad2a4119ef7e2541f7877e097c3a96516d920c67f712ab8300", "065b11687b7f821a66e8d747ddcef9ce8574450d548eb32bae410631665b5606", "21d44a3c8aa5093daeeeafa8939fa21d400ef45c887777b1b671334fe1d6a70b", "2c3ddda4cced9226fd1551623ae4a94410fc3d4d08770bbefe377f1ecc092b6e"), ("03dcd90a1e320018bb0177698337f40ee6462b5e21c6daf3f2bfb8a1c0e83324", "303addf156807f73a633b7fda2a7a896006dd775c295cdc32b8a2a6e4d0f802a", "08f79d4d9b3aab7d83e669d635970ce804a67463e46be622a3d2f62271899269", "27e3ce9a1c77a13ebe5898d0b00db19760fb4774c3cf61b88fa96dbf5f8d55d1"), ("1855ee17f838b8ae9cab9fcc24f54f78c5e3eeffb68e6997531d37aaadefe64c", "0739c4df97539e739c1ac81566df18ef18fcb1049e5d677ac5c0c7d5f0ca64c7", "04662c7feb5056009b782dc5af38a4ba968d603952fbdfb3a7714864e0b45027", "16ca30324a83808077fe45f0679456f86187f4acd56322d9da72a90a8cad96c7"), ("1ea899d8e0f4110a1a782dc4c7feb046edf45e5008487dd7e05047b30ff4e117", "22fb38830e9e55a3f193dc40f8ad9887f87e9709a6a6a46ba59f8045c5573a85", "0ec8eb58dde01688368c56a645e10988f6dcfd968f8242cf6dd92e4907c3d537", "2247d7129d0842b119cd387cd224e22d7dbdfab53c3459a32a489bedac54d41a"), ("1455a802be5f6eabce19ef1260ca7730f8be12e283f6f62eb1f0fd8ab0ffa48d", "2f51bd7f10790508674dc474a853c6b450ca9f729b61e58b9b088125589245e0", "0536615a74f901508f42e0558404409daf04ac9d70667b2d3e1397702fa96736", "02afcbf01780bdc1cf4da213e64e91c34fbfa667990e67a110a0389dd72df68a"), ("0b8e2221c8cf0134305f3d17e7532539713fc99b6501cf8be908f34c1a40de97", "01556b12c5f234ecd5f3ff6acb3ced0cdab4291135e879a7326b3425457365f1", "0b7df75316afe8c566b400df38fa63c0da7cd9d3098af40842a975b59e316e7c", "299d19d7a232f3687777bc84360a0d8e63851b727699d7cb7218150ea5ed5124"), ("04d8c6ebf26e22662d1cb9dd67a152803ba9d8ed773423bd0e41626683baf084", "0d3533a3c8025877ed9ebf16b4261c2cf8ff4515a21a704238336382257e6d9a", "0ca3d86b0801bf9a4073eb5efbe44aaadd51bd23987e7890d3fb492cf80186d4", "0fb3d2a09713879d123513a9c21c2f0af90032ffe3d42e26c9a229bbed6fad40"), ("243683a8c291f2a50ebfa0646eaa7f239803c7c2db36f1727449df739e359847", "1a9352c9ac818f7740bb87ce88eded350d395d5ac48745063c540610c3523d99", "264e00d2627fe9485a132a842faaaf7f10e2d4a3ef8c4c5495e1a23733968e5d", "245cfe723a1449a51d99ec7335d05d9e562e1b94346e239debacecdfef8b8675"), ("033bbf0d2d6c54227eac85654dac6abb467fa338f6d0ab627267a22e7aa7f423", "18812bc5367001b3d9d0fde83e81779ef8e46d6e939d05b71e7a7472552b3227", "0da6cd22a5038304d95cf30ebba618c2740f826c85c92e2d2caca09fec2eabda", "090e36b412f297e4591f246b8a38074c8181bb3730b0b5d852a0156d662344b7"), ("1329945d4387f7c99d4d6b18b5a20594c3319acc799f480c80a41f144a449949", "0cd4fcb3dd2521aedf19b14ed6625fa31d227989489d414bc88edb363b401861", "280e39043f85aab20be2faf59e7453550c07e4ada8855cb24241967e266ecb50", "200513e484b376b894f199cfcf59560dc16b7ac7e5ea0b7f794382b103a142a4"), ("1dc7a91fa1fa2b870f6fe7a89e2e7e50989becfc214e950d97977b87cc9f1b9f", "09a4a32a54602629ea280c6662f361f248da349084c4c31a7963ae34e80bfbf5", "2835ac145f6e3302ce940eb44560ca9264ab9d4f35865119be8631928941d896", "19f050894a68deeb0f628ac1f75ea211e2c3d01a1dc7037686b790e7f7fbe3c5"), ("0a03032348d0e211437aa2f762084a2a7309526be33372ab75149d202fdbb5b2", "0f1ad538f29f82f2a528d4debf4407f08243436e44eb2d2780642f2346a244c7", "1572160485fd25d10c9fd7f2fdbbca2968af7ce6015d4e0716e01b144ff7ae5e", "26170619aa9654ada96d29bf2a82806646ba742e62bd02667406a83d4eb05ff9"), ("135e993862eaae906ef136fbd4793f58e28074ddb751c1ea1ee8286daadd02b7", "212f97b2ea71b2cfff378e960128bc899fefe8c35c36b78473c963545de6ef59", "22bb45ebbaf9681c860655b0fb415289b073d1db6b8c25adea0fb1cfd56d6f92", "22c89b53340a72b5acb5e241b04c5f47b8a64bd4e90f1bd5d9f034bcbb80cea4"), ("0c222a6539437f41d813ea88f4d67a08908bec58079b63f0bd68979f83e93f71", "1d416f2ef789f189755e04eaca689d437894b66c41c47e5f5907cb30295f5209", "08078344f8fbbe2a43b614cf260b802af565d001c808bea29e819842c5429703", "0646fc0fde0b849b98d42abe90e862154786ec41118bd6d5587eddc304fba5a1"), ("203ab504b2047103e1e7b4786ae9024b01e857c7f92badfa55a419f13c0043a1", "0a9d5bd0e2fca51423f6c9f9b4a77ee2d94c33a43599b02f9310b3090604fc56", "01dd6220c1939913a91e5e62c154319d4f34d293aa8c7f169083295a9f624a47", "1fc8cfa9624423acd2114bb1dc952b518e5c67271e08d70ff9a7815b7bed419e"), ("2f29edaf80e970a90c3a653b5e5f5d81b142a7337e51e8ab06fa7276e6c70e78", "09a15e18f01baf3227b8e2e634e5d8aa39813f6416fefc5ac8027d0c886b59ac", "25b6c011b630798de387cde5a0647ab38fc2d14c68745a46bd94cbc3c3b35738", "100a8f6ba86b4b0c53dde9ef6c8a8d755f960c72189b4e48e17664a933a7f201"), ("000f778e16d76cfd2c4d1388c8ec189cfaafa1c7d1cac09a691fdb02f474a2d6", "0d1cdb35b12b0ab30ca329ed12201cb3625ea3f9dfa206f42adf75f37817e3d3", "06290b08ef411351bca098f89586273dbf189cc691d14d5d541eeee95df8e6e3", "1fb985acc4418c62941f7e76c4681e11a5078fa8ada26ff7bd0d40a735ee3bb4"), ("2b9e679a10dab0e5cf8bfa7cc147848d6861dec5fb0de6e488c72503b6b57982", "06d46fa16ae798539d21b5478f7393df2efafccbf499265f0e928f9c3437354a", "29580c0c761b7ce3ff5224e485e62fbd72d71a4c1e6638a3f753c6ba00c27dde", "1c0b2fa7424019adf488de0af481ade6a4b29753df9b91ca7dd692aa6daeba5a"), ("109b021e1b0e8116bab7e20a219573837ba26bc77e17bf92252bdcdea77def8d", "272999ce50e4006c2119aa987db00764958aa879d61651bb32d8db59de4298a9", "15fd0cebb885ef99ec1368ef4e02d21a90ed4c846bbec2cdbaf86aee0aae20d0", "2b1277506253c5d8a3acb3a841ae3f9308b8a8aa32377eea696ee97bd32f2d28"), ("28739d9b0b4b4fafb219cc4cb4a993171dc9117c1baa1632c3da4845848d6303", "3017b56b2bf9bb75d72f9a8ab22fcd9e5b7e1c95935a1804d67fc86351aa6e4c", "2a125b3f9c454734855098959d3fb49054936a11b5ed42e2f7d487b17fe630b5", "00463bf1a10b582f65c90b8ec5224815f964751689c0b76190fa82b914847b5f"), ("02062d01e621998e4681fe6a8e66217a08f0174dcf030eda4d779f581f5309a6", "24f9621b3bb57a8c51b90725279ab416e9e69933ab8af37f406b50b2b240914e", "0247f3d7f318042081a39b6336fa6761b2d922be6cb5be7b2e7c5bc290ff6c7b", "0ea97b8b44efccf65b6d1976f90694261c706d9702cf8743dab65aee71547163"), ("09bf024705b1159582648f42d19d033818dec3d3497e4fb35d7cd6b14850fdb0", "2bfc00c6ff3e1dab02e267e3a2c64374ebe59b8dc87fd40d208887cfce815d2a", "2655b02d9f38a8667464d4d5572ff2239f90ac19ccbe907c4fb8196a5e18d512", "2214c7182ec5b63c006a5f16352f2367c4e783463e484e0bbd64beba3c1a7551"), ("0d008baba5a3a128c528215523df78a039667e7ebe426da52b56f359afc5e8c3", "13ec5ca710ba1f1e710c07ac93ae7dea877a990ac4cbc2ca8a35c7455ac5341d", "1242aac7afdbcf901f5f16156b37a9d012e8b95a8a0a8aad4f8b13ea5b9b833b", "1859e9ffe1d9ee6c372a8c68318b3536b6e89c99674a641a00dec93fc8aa6e95"), ("1b4483514a490bc622894ac9a01245f6791a739af5f49c464d41894b0c41daa6", "04cb3619d59a3aab1c234435d027f3d5ad4aae1a1dfb14b8e79764c734dff3a8", "2078c468eccf6ad844b36750df4dab5d90e7ce65230ce6fd61642d893b425349", "2a918bd9ee4bc7fb7f84bdd64ce33e938a50350581ca18e4d6fadd611b72fa66"), ("11ca0b59ff4dbc2e2ddf5e5f73e8d26193549322551be3b7b8251735a3b89af4", "19dd80eaef7ff30fc3d97bd82ce5ed3dba2306c68514da94a3e6979b94aabc73", "1f6f0ea11719bc6ac6d93910293de8fad82657a949bc80acd6e3983d0bc58611", "1c41ec1e84d98021f802d87aef6229f9b7d3adff885e68fd8b3c5827f1aecc9f"), ("15b3c7340aafc09f7f8a05652de1ae5adf461a9116980cce63425dd585825855", "0c3a1a1fe78ed47e9b1e769a9419d38c6939103b9c01e7889e7806b6af5d7763", "043160d36cfa30e1e00d9f24388d2402fb53be363d9ca015c6f562e01726fc63", "15b5678d8879fec7b8692d48724ab68b154020680a4f6ecdb1b21333afc2162e"), ("0e44ac9aeee007f6bc0cc471ed6070cd19463d954d6d21a6f0760ae4212d4350", "08385fcb1e0715359abc635eb3fa54c365a8f45fad3977fc7ea8feda7265240d", "2a0c5194fc11238d7a78407ca5d419f05cbd16a6940ca0a5b51e86a9945957c9", "12e58f02a3864a26a32aeff7e1d693805b8cac188c13f646d85f89bd13e40311"), ("2a668b332bbd59fb87ef97b26cc4c7776161219f3d9f9dfe11bd39bb3bda1b5d", "297aa429d00021981f9449433c59955b15eba78917bb402df687c4fac04314e7", "1ca99e9d00a44d06ecb29a2b8b4b4c06e1d111ed0a7692cddc671735bf47ec90", "216c09675d06b12466f2a92dd0d96616567def41c36dc5341d22146cd7174da7"), ("115cd7dd158d20cc5eb6a94e6a1182dd23a5e6819f3d97fd4b504a4056b91693", "0a92671aadbc9da283f35f6f04e938b9b303215080a8f6baf47eef61690e4c11", "24a88990cb2852a6a34a609c60bb7ff31c8f6bc82142e468c4c3d4b1c7b06f52", "2408884bac69f6a4536696d8dc69e4bb32d9035b5f65df9afe2e62b722d9ae9d"), ("0800e05a637d60497a1ed4dcb4b0b72dbcd7636cfe4ccd366b4f91fe67341e23", "1a0fb009d421a5835515fd5eab22cf0c20427948b3c2ef9f6a77d3198a301a32", "2016e188def9082a22d6269a19f613b79db8a33f2351f84d720742dc47912df2", "22e15ecc13289ce12f3286b2511f4b9f5830a4953c2c16e4919f5f40c996db87"), ("17aab248e9e6ec3e0629112de383a59c1a564a596a75bdb758093f8710dc3f5a", "1b6791d672868c2dbb4da77b4db265f468a6b1dcf2aa45361e7e1581dbe6495c", "1fdfd2c6b56e304ab2eb4b762a5199e4cb013097e54e5c421b59c099b4db5700", "1f5d733f9b3346d65a9fcc0defeddf63fae7ff8e25b09ccabe50e69c52004dde"), ("0171de577dd33dfba21ae90371456dd9f5dc758fc9cb44c371eae01e10238e36", "019b46438f6cae8cc9bba6fe5ee70d75023dc37c7e599e6d0a5106ab4adbb63d", "189d0545eb17599509f1265194f599e9ce8ce7c30e7c012ed04a8512ea0f5f8f", "02570318e0fad89f81dc77cd469febaabfb60038ec454f2f5213d2a69f48761c"), ("1e6b65f2584c98eb8973cb01347e08ff00d16f4fe9ecd3e72e8fe320b193e366", "15d74f908f269ea44461e0b6a8d51876d4e44f9e90f5a44620d5f6372452f7c4", "2a81029d60dcba15180c732eefdcec0e3575d17cab3b7b3f3342c4869ab0ba53", "090cbbfeb3dd9193b68596579fa934594ffbf03123e225ce273d16a7d1e6ffba"), ("02c2cd511cc347b2a788495f549fe953a99a5deec745bd45b5df4cc8575adb84", "0a5ec899cfed70fdca9d338b5f95f15725d2fae1c5e90556cdba49a5c7ef34dc", "295a26307ec4ec6b80b8e5a3cd502dc046818e8cc21e579f69bc8e2db032b712", "1f23d884ebf783d63f3892770910262605cae5ee187dda4e0982d051650e8404"), ("05eb21b465751d76c522304ee18b86b7af91fcb38563046e65a27b94f41be6ba", "2e5194d8102128b544d92b40b1c5c374e34e1742f74e45cdc3c0701a1b2f0910", "2e7413b034fbaf6d7470271c719ed4941c2bcdc7570ede54c7692ef968c2116f", "2def7c63f7dbe80495f982bdf65e0c04bf71c7d3a2a3947a8de49b83d86ad9f3"), ("22dd8165d011fac132b266f17fc003529feab377d269a19b794ea809938a6308", "1cfaadd9e24e3aa247c703b49175f4b21c33a46ed9d572f73160484cf4558baf", "00e31a3fb20b69582b1d4c614ec48de413aaed79934bb1a5d668c88e81e957ad", "10cdffc4017f83e4523665adb44cb767941fa19190a602a91c1924c703537df5"), ("199f0f68513171a6c7b6feef02778c914eeb09664182cdcc5a7b92e0b0cfc369", "2660e7d72f33deb5680ab0580ab7bfceb9691ff5c3bdb4ef358f4a148140a2ce", "2c7123d574c7cc8dd6f4a00b6d37897c449d731278515e0cdccb505d2c01f8d5", "0fa0cdcee021e214c5a51de1cb9ca0cdfd8f0400d5863db8f3fa15358926051f"), ("2f60da48d1cc79148bc8576d3c717f91facc8d2b51c38d4b3486b9ba108bb312", "269faa57ec86f3aeb076fe5008b54597576329ae921312aa33496d3095a812ce", "1980a211c602b8ac27266a56632bf1bd426168161a91e0fcf3253f598ac15499", "084041705027123e49f0b619d047f2028335edf4446325381cb645cf4d458b59"), ("12fe10dbc082eef792b2cce0ea163119dd016de1e4a02722c417c5848939694c", "2ec89ad583d14a15955367eb0eaf81c7df29afb4d2aa1927c41dc4ab9e1bf3f0", "244f47048e7bc83a6d8033d4a3b9230f26f81770178d94e8cd2e10cc0297d1c0", "08627dc52f4e376847492ba490c683c49ff6f5dfd80da21bc64231f98e940b1a"), ("17c869bff69ea447c6143268b232663de5ffd153a362fe9f78f4a0e3e911e526", "09e77db443d3ad0e31d8b4fd168db6620e6b2b7095fe3e6d8fedf826fe724341", "1a80096df260dc646f3d30c2d247275a9a238e9123c1a8c49e64a0f926301259", "2f9c19e00d27b848815ef81a6189d5aececd6ffd999405fd53754013590e337d"), ("011518b3369b4c43b65c982f7305c30f83f28f3e612b84c7e0ffaf363e73501f", "0eef4e67bebdbe9d863fc63584cac7e0c0af775a2375dce7242258b1e0548a3c", "20b5f528a5dcbdc402c6d003321a210bd8fc5507d340dfba23fd7c5b25d9823e", "1c35cadfc21f893a0e9d6ae90a6561ae2582ce1ed9b8b493129c2298c8b231f4"), ("0835c76d978f8c9df5f4afac87bd0054c9b65b207f584d70d29d0632cad58054", "2e0b03938c2d63fd1c9a72652f7df92defaf3942397f8dcb1e97d594e3130f5d", "2b77d107f966d04e3cbe37a598673ebb8dd226b2f8b18d3042cbebb3c24f5e18", "105931ca6f612e8b19255a5b268ea54b3a188e80e691b7c0fb0e8f79e8514d39"), ("0534a596b593fdccec28693b8aa28ed51b8b12a5f3e3c681a4922e6e64f854dd", "08109a346d0003a2e99671cd779c38d2eb8108912217cb3853a5e69d29347a1a", "112a275e77ee540726bdd3f7c345f821af8ae5b1bd4801053f607065f3fe3b37", "2d9405ea6f956371a9174341f5e721f3de75a909740d30ea8caf1e04d12d2549"), ("1dce635e40d7a640c115d815436e51300ac0df8e43f3d069a49037d98f019ac4", "240ea8324ca2f898ea641d979738e8edb0ba5f5736f41a3e53f0fdd42e721895", "07a8829593fc1223f24724ad3b4f3cef15596948681bd7bb83a6a172d15f2f3b", "1a16096b7bdad5ea98314efe4366919918c2ec1f55cedb27637a263620d12625"), ("19983e8df47611b7054cbb84d7f77b862599559fde739699c29fd9d25e234212", "29218236d5abe379dbaf2a61701308b7f081eb577a445b8751ecc254b6c70b3f", "1a99aacb41d5c831b1783dc15c62a1794c40306cfc6f95c4ed0fdebbfd09bf1b", "08d01f45d2ad5e79e1e4b843609349da6121a3c8b494ba47aa2e4dc023dac818"), ("26ccfbf0d7ee99439d2b87e833d09f47efe82ba7554e9436913a71f027e9b796", "144f5105e1cc0537b41a5d4893d2fea7ccbb3dc4dbb2f4c058894d0f88f995ff", "25d8258082839a611b1793c96e3aae0b101b5a60139bb9b1c53efe0c4b6e6768", "09e835d05237d3f9bc566f5dc8ce74ef51bcb7a224318fd514a0c7c24ff2a29d"), ("0e498ba4d3ba5551cb70ac87048eb467bea6f58385abb9554bcb35df4d9a516f", "23735f5abacf4f60feee871b8ca6d95734985aa0f3104066b4a5a938876aba67", "0ae46d45a6e96161f31db4208f013971bfa9bbe03a137903a57c8a993e1e78b5", "0d4c49ca20ecae7456f426f9f4b25f292fcec5d4e2a3aa16132f51d8af6483a9"), ("0a046f6fb7a045c99130293dbf46cd31c96b1d5e53f8ee5f0f9c9f6a26c72a9c", "01b9d8157b337d1c721c82e83d0bcfaf1dc55b382124e360a7e517a94ef99b80", "030b55ae9b256eaa6919dffc5c6096ab7e0daa6db2ea90d4288d10c6e3017961", "1c4e40eabce6caf783df941d48e27ec38b80579811846a5df2a87154e6b70c7f"), ("0fd721d614f077d498da234233ea06db620a36b565b71470887fa47a69bed5ab", "173cecae46028b9d2a0e979b043549b34b1dd25a8aa52d3892eb9173e150ee7d", "0dbdc2ad2d321fb0ebaf0200f9326bdf0595f1441a7b252d1d942294c364d7f3", "2db4f1f673fa35a50a23c87ce54c54e1df4065f707df7e1e1a2826631f5a6ef3"), ("09bfc08d3eb8c89a49b74528a47726222463094ac50d82f702ffd8a16c9068d6", "25173b2cca17197a8e226f0d98b089d766705feb6a70ae7e035d49f98d329f35", "0a6fe5890c4b37bb552a9e40b290c2590ef309e58107a7f351aa60945edfd3ee", "1d4f9634bb28e93211e8000099f0cb2cf248f1ad9deb15d5c74eb969c8cde11a"), ("02b270def8f5c40082d20977da2cc17c234f3264c0ba19c6e7b849db38462091", "1898852f26c2b6704d7077f4353aefb21c3426f52459518f53a5b84efe576df5", "18b218eab078d0ef50feccfac63564b30dd0d17b5a58c8536c1b11fcded6e7cd", "1339d2b966d7be998be230ce6d12fd281c0a77050dedab2e4dbe2e6d124c7550"), ("080feb73fa106649d5096a097b63cc11c37f7aa82051f27b00d81fffb0708d65", "1a051216037e11c7637dc571be1632c2b0d26135121960636c72bce613437c75", "21868b7e0223920ea3e74094c10f9397cc25a6ae4d36bd026a064ad582e42f1c", "0a7187f8b3e4950f9a9f8f591622894c6219d722e6ab8b11ea33f85a532da260"), ("2ea8b3f73a9f7a8b04897ecc6f22100c7537e8c03c4c1725d41a28cb010f6f1b", "10322f8e2ff9feccbbac5536d2353e0d2f0b86fb6e29a982708c788a4b6128b0", "2a88e4a0c5d9092ea2cb799e8d555e5800e349a3a57b168b0ac2495504dbbcb0", "0d72ae6d800ac9e12eda77ede6befb3111dcd5d07b2a309fb5ef86b85b805997"), ("0a9b4ed6954f2fe696393131667110466bf8651a00c2f28b03f63d06a67c6e51", "1edefaea41c34b7fc17c74d0c1482e5624ae3d10a947b264588e9186c7691d5d", "2027a3e0424cde12442a64385d211b12bd16ace2efeca80f9df0c14e67cf4a8b", "11479c8dc5b5dd59c5dcf43ffb5b871149760cb0d666bb15bf6a992fdda314a4"), ("2dd087e2b870d7d04e1120a292b1a737a07f0cf598a247b1a37be7130f41c94c", "2b2a1d2179ddcbf199aa3be17e59cb3993564db00c8acb894fe2a4107e60c084", "2c4d2c5eb91ea2964d3c265206a99b9f91e6b4bd82348b67a42a177cccb80fdb", "1365b3708cf5f8fe2bfa2fdf387ac30cecd4826555a1d81f9b47405629876cfb"), ("1a34b6893a68b89b7ea01c29a9f0df3e5dbcd4092bd82a4d5300df584e296ea6", "139affe3ae8f578753d77df823aa939fc1e9eb011c7fd5e47b1ad9ccd18f2081", "2ae3280bb8eb2a93d3039f7a3737b5a097374d87ee91afb7f00297f9e2cb2ec2", "2af198bcc24469245419eaded2aff19c37193cbc3bf01fb0c13de8a0ccc00186"), ("1257892aadfc8146725b411ac5667e1da7c89e717a752747ef53ef2e8bc9af1a", "070a4fb2411d4dd5572b6bf44c48883178e9669d2696bd96d59ae1e7de0888bd", "06153a5e71df3961d32215f6a46f1955ce9e97f1a89e684f95dd1b4c1f42a32d", "1ff904500308fb6a0671739e66fdc6a479361282c01c209d44f8e9e6d969ad5f"), ("0ff62b247d36b2a945717de354f0afc43e67087f133239d80548933405e2956b", "21952e76185b054f9c3b29ec4c2c01d938fc696ed4d2a5d9674c9c7149653046", "1fd1a9b7b6b4181ea64c3ba8d3e3352c76ab68a77e16f40944abd5496c860732", "071d9ae5de003d6ce107e67ae1fc16f21639409d715610778ef18b6a7c43cc7e"), ("25b4ea33054aa4d445b9a7adaa6990da864fe720ad2ca7979ddea65ff23428d6", "0161705cf0e26356c54e72b4380cef8b578124bfa373b17f3fa45402d1c19824", "2f7c9f7a23853d4680c301c858b3ab04f726896eb85047a2dde6507be154faf1", "1f414b3e989495b33c7642ba9099ea54db3b4b5d786efed54660cfb6e00853d2"), ("1b207b7b269fc8c28482a721eeb8e745ddb4006c8536a1c63db86a9048260c8c", "06deb3bff7b87198a76c9e6deb088726325c25bd905215858e13d758fe8bed2b", "037bc10199d2c3098072ac8ae9098d63af809a0cd0766ce8b3b3466e26f584a3", "1df59e9699387aa73f232798bb8b66e5ba2a3fc6834f96b806bc34786b8d0d54"), ("29d010e1c3db47df2b8293760976320c4246bd14883cffcf56311cb87cb18088", "048a2262533303b0d205f86dc0d94f0bd3fe02c5ee5ed0abd3866d4f298647ff", "2cbf86ef976b2bb8e6c58cb9c24784f12e905bd164ca35f33c3a9c89086ebcca", "22b3d16c2a707291a73aeac9a1feabde39dd5c0bd1ba4ce49266282991277121"), ("0a3a767fddf84a3c1e2a94fbe69e5e9f51b5e0a4f098bf97564978619003b25c", "2dd7ad8fee28d7ea0a0f5de18aa56da38ceb8a7ee83abd1a2d92e4a75d20dc8b", "1faa6617becbd8964560d11f203c5ddf8ce2ff09fbc1bf80e3635386d6ce03cf", "0e45b000ff40172aec9610f273ab0fb9fcbe53642f875edf61d885c453b2e92e"), ("2c346faf9d1d8a0953dfe10a8a6d6026345d184a56925962e667e0c1d150cbe2", "1f7829a19a597a84903c4895fd1b7cdc1a2feb21767e718465a73684cfaf95c7", "09276a5ad943453eb19bdb70444731131d8745c2fd1d0b8c6caa59f38afc2297", "04ec4aaf7c4c7c4024dcf83751245158d4ea36e357e5811aeb2079fc277fa2de"), ("0280e3fccb77dac9f7ef98a3e2f6deb07b0fe640282f67107fd0208168a17e82", "1f1505dbfc4eab49bbe713f61c6743877d65cbf0673b12e35f87c02a09716c53", "0de6535f50b01a7699a8a81273885e3db680781c14cd85342586dbdf90d9a697", "24d1ded57143a8aac5e337a054e70ed659f436ee7e6aaf13ba538c82909c6d4a"), ("1a595d88b5a9609cbff19ee9c128fc750cdcbfbbf826795bb0548f16bd01bcde", "1c6c46729a632d7937fe8164679d9c6c2ed49c59f76e9561302db70c17f9d74c", "1b8bcfb08fe8f71c3d7987388b86f1e196598e067448d75b5f2f43022eab6c5f", "071215c094bc7676a42a9516fab40328fedd692a7ddc3567c2c046c06b181a97"), ("1479bdea921e4e4bfba0fa8ab99f8bd41eccb3dbc94896370685f486c5ab66ae", "1ef9d28008972fa2b81ba65683c20dbfa561a7938ac1b8e18298425162d271de", "25f4cde63f4565c9184f772bb62ffea6be33fae9ba1b2d60ec72cfa071b1b275", "02eb9097988081a13e59a223830ddfe0ae9e4a96bb6ad35ee3a55379e3c67552"), ("115b0f10346f97bfb8d42687ef986e6cfb8577b94c5cc5371b6dbaae5bc3b4dd", "0ba416ca06a5dc4decc5ec32d431314ffb26f1aeb46b69c22c87b4a2ad555636", "1745ae942fac1a593baaf1c7fbdbbc0bd001f9ec31f45783bbb9ce896e70ef52", "1749706ae619ab80659d2c6efae3f142fa4ba1da77f945d3930340ba358e1946"), ("21e6de8e12e02e42cf85b4815d66c8fce0b67977c442b9b24f7e00a33e16b66a", "18fdc167ef118dadbbd5395e52d11d7bf1513e082117c34e61530537182062ab", "1ce09908d5c38d0be20bf42aa6f5cbbee0b94448cd5073d2147bf95a29e6a8f6", "0397e67f55d8ba4f70524d3688186b1b891d417c3d0649219c458a987f19b909"), ("2ef4a6b53d581214413fd0c22d6246b61f13656fb45ba6988cfff6616b2e24a7", "1e1ae20f4b04d5d27737b0bc2cbc6b9449bb1988357c377d4b377cb1bf904e06", "26db41b89314a3db35b1df337701f6322d6e99732853ce0d9e3daec6f1501464", "2646dbb47a28cbd297ccfdc4be863e9b6e285074c57fb1c2a33e1a2c854b76c6"), ("2637ba436466c22f98e23e853f581fb6ca3595f07be9e86750ff8d10f774f666", "1d3e5a43ab74f2cf101800f58f925a0d94736bc72a08d32ada84abea728d2eef", "1bc2c267c63ecf9d9bd1e482fb493dcf50650baef47def22763ef84efc956267", "04e6793101907d3285b4353ecaafab65d64340fcc89c5eaed9d3a4b3b17c944d"), ("15c654ce36f511d7e58b5df52434d1865d942805ca9c0d24b3276742e2c2ea5e", "2ff9864c4b454dcb9721d70b8d28d8cb793bdb6b0155bd2b6d30bace6c687d40", "2c1a25ffad08f814c5dfbd5a961a05a7e9182a6e32ca71a43c1930251debb37c", "2ca987e6aef4fcfd3638fd6e15a11c70608925bcb99438fe72bef08257e28347"), ("0fbfd53642edc3f9bf2328c99b3c7882e1d5e7147265344d372a6877ed17e7a1", "068af044b6ef8f19a7e08727425b070e2448ff83bad4bb06e46990ed7186497d", "199fa8f19d35e955dff4d1739a8f1f771c259ef22a9b609501ebcf77b409a132", "0009e77f85c3370b2e1bd755e81e3946d7647b5f559e22430d66c32699add40a"), ("2d87b1642a4900780ef8328647c475c9812986d40f27814c06387a808f45065b", "069c02eed9e215982784ad2de475a28d8fd6f3a7ca6f27a4117f520d45f32a1e", "196e1b7590d980b47778fe829c505e27d79cf7b3c3037175e8c015248d87572c", "2dde5df06d0181d25f6ef3b43fbbf786fb757e4dbcc7b4324ba77902586061d9"), ("2a941a02280ef1318066a90bca4cfd867ca88dc22430ec75c76b5d90e083f2cf", "23a3892975fdb0f30594d44d9765ccb75f10d577a5cd8f4e9540f22ddf66d351", "248c14e02ac72f21a57be833eeafa08fd644cc00adb8c12b84673517ef05d7ed", "19c0a263a4057a3d39df372b5ef44eba88550fd0665368eb1f90a5dc23181ed3"), ("006dc1926f6dac4848f97c6a7ee3b3d2fa364911cab171b31a9b7f07b4a93255", "00deb5b36b09d6fcb215352e0fabfde1d563f5b044d941ee3427ab1d127a8767", "129d08fe6e632428c4528016e494db6c2b4431f8744951cdaaaa38c31c36b647", "2ec2bde1a23eaedf5832ac423b6368868e80effddb3f83a7182fa71dfd7d267a"), ("25a39b24fd3c71eb119fe093a2c0ccb55da773676985ab3e484ab6fed5907e77", "0d5dcd6d53571aa87e6546738701c97861843e5a9d58efff75c00239a0cf92e3", "26cd78070e9eb85012754311130a6d4376ae232b9e458ba167165281c167d1cd", "2c703795a368186ec596fa7ed50dddee3afad7e58ca4a835ae3f9a6f56e49511"), ("16d8e10c4f04ee20bb1752f22ae64ece2ffa17cd5cd2338c0d0d1dac992772d3", "2377a4b879327715df1158c9673cb5d70904d4172767f3848f7a51d196e2a057", "2e03a292c3435db397ffb01393aa2ac0bfb2cd7301d83e50825b9181c48b8ec9", "2f7674f62337292b7b401b1865fcd376637cf8c919e7fe6410075db176c01190"), ("008b48c3e2d5b5c55e68c6ce33aa22d1e524bfa0ca05b9dff2c2193bf63cabf0", "07d3a945079ee2aa96a708c293f4b2872f1795210970292c889ab6fd6fa407a3", "1dc8003c2f890f52986d0b8118334b1b471762286c0ee7bbeffa2d366cc7bf54", "20942755f2d4680280946900d1967e1850b1e10758bfbf663238364edb13fcd7"), ("2658f5111e4f5c5bfd98610efd3c3427df2cbb7700f8944b4c92ce3e0950117e", "164e81b27f18cae66a5b589d73d5d4d2037e7301457b07c2fe10842f86e2336a", "19c9ebe730402b208165b3a40bec3afba8059f0c9ca400675fdeca36a8d7a42d", "14dbbdda15400987938942f698bf87a447aff997825347a8906842f1fa6bdfc6"), ("1986e7e6653b925233b2b2b8d61957642abf681335bf9310a85d3acdc4566f43", "210ae7a6f50df30d6ce4b21a30b98a1ea20c5f0a5d909f96fcd0d2a2700c4b3b", "2c26b04f056c4cff62891479f9d9368ccc110470c1662ae63ce32e114d26f658", "08120e12c202e6b6aaeb8bb7031533105ecd814cc0819b86077d579cb2de617c"), ("07cb871b87682833e7db8e58a0dead6429e036ac63facfb4456e690cfb47519d", "11dfe0b00c3fa9b282cd75e534ca7f3d8b514451e693a1b44e1f8c134ba36cde", "23144638e47533d892e77fe8c69a7e05b73910b1eb5e196d208b11c8ece7895a", "2f3c4c9bd5f990dc6d93d9424d458affa261585fc8cdac4605b5344d1f864d4e"), ("1bf1bec4af8ba7a367b0092f4ee721466f02b7c6cdd264c3a5f6a0563cde1808", "28ccfba7ceae68c24ed0175ffec258e9bdedf81f65338134f22b1431c7b4d2a8", "172af54fc315b69a23c9bdc6721c4ac637bc69b80be5ae941c2f256187434934", "2103b439ef45bc45f3fce4024cdfb84989f0609d88f0346fa4ac576b9162785a"), ("2e9b875847c6cde276747fa4589fc4e12f2101fad7a470126463afc596d9bd5f", "15fcd7bfbb1f2a8207b17106b31407ce7018264b40dd611d0c7f8da35078476c", "0b8d5b2cd5e05cbf53d09f0409160407ae05ff67e029e4c63ab300ccf2a88844", "27312b919e11d62c8b1e08ed4ecf17db6e4a8501b61d6303faa30a86e93bb8ce"), ("1a037453de56b10aee48dc6b8e401d947fab97eb98b0fe3f310ec2e5c5973c07", "07d17b8e24960c7fb9b2806dcdbd4ac91ee1eeb7af7464bc31527c9654647f03", "2b6bfde51004dc1b13ec61286b3b7f8d20a64b565017476b8cbc84423de4f5fe", "090f0ce659d7f4ce346f676b0a9220690843f8baef3398457156f33594f4f16b"), ("2f582bc1cbceb2277849c2566395590e3bb9439a7c2742cee017e7e3597813a3", "1f75a2492e96c29cf3a60b9aa94d728bc4ed77270baa7274a89f8afee3356b20", "26107a576ceffe3f801de62710c951bd770d78dfd78638d4a08e9fabf1c293c3", "01906e9db3be549cc0a78ccfe11ca96adcd9ddf048de1cd068ef49dd7abe2898"), ("021200d19b0c82b1eb568da81d4e6cd6024700fe9d554eab119f752415fd5fb9", "11dca800cdee68722056716c72b23d68e5e7ec22dea75abdd6ddd17015675d0c", "0701dada7702a2bb84f5bd07263592bf77d1fafcd99327d2592cdbb1a0390afa", "07602120e13dbe8be2443ba5625e2bd0232838a543cca80fb8de82f596ec5c3a"), ("19bc980e7c564dfac20455cee99c2c8b4a73c6472607fdd2442f17616e425d5f", "0e47efa71ce302556d844abf02ecaccf1f06f1e3c95321b93a1f333b23029588", "0b65e5edf5a10b8cded7a741eef35f98ed5b42bbfce491573d0eea46824903aa", "03b04728c2ad668bc2c7785ef4a927d202b5e88714ce1678e62c6f08a36fdbf0"), ("01b000495a9771b1cfdba0da654707206b42e75816b9a9d6d36d8866dfe6db2e", "1a957745cc76acb4307fb569464500e06cf850aad89f085936cdf42184d4c75f", "29ddc96ea5317e22c48d934465186765adff032b4797f7670d058f2ce7f881fa", "1be804fe813a5e3a3c2c9071b62419a119f709e904cb15fb9cf141d7717dbc90"), ("1d4a0be73263e52b6255c3af5072b456f47c1663d213e0a59dc2b2383e5f4a57", "2050cfe0b0eddbc9ba5c06be577953d9477eeffea1a7e20a5d7adf7034c45857", "1aad01ba27796195d2239f41fd1dfd0c6fce422c32ce448f674266c7c8951a41", "206cb51cbd0cb208874764f291cea7c293a50095ff81945c1c294fde9148509f"), ("0899118b8b4b5130eba3bd21ad6bdd378b7e512176cbca9aef16cc7002c614bf", "07450c956606537996fde4a92e7c87480a2f17e434321a564cdcda3e341ee555", "06d329b75c4c5e8001594f46ee0146558a98b91cdc378cf4f59f928971072a2b", "129572f51e210740df3ec3c520d0b3e6d7d3247e2566c393b7755edc5d8635fe"), ("0be2c71cea9793e30d95969cfe68d10a10cb345176ae96845b72d4a067b1036b", "0abac063e231bfbe7fd3a1268572bcff900846a7d656b1cb8127b6e55c1a1bb9", "22c0c2872ece58fcc23482aa2331798753bf714f666e1e5a896a36af1625b0fb", "001135f2792be3db7ab639da20008a25ece8805f6e0562388f92b8f1fdc3c2cd"), ("0840e26a71a6d9bb6e303354d059c42a7d4c278a037b1ac050d72e0d3d285c9a", "162e371f66ba7c3dddedaf41256211ed39fe38b31d48f2721cab39efb40fc9b4", "25aad2a44f8b58d6354d9cb5148c4a5f989b4dc9225935fcc3847d1a5a6d738c", "2c4c1f243dd581daab332257969856be48f8e0bc0f0c020b01fd6d5564f70d9e"), ("1de0019140f10abfad29e008810269e417863dce6928342687eb1b2f8136fb8f", "2636e6063d602dfb13447a509948beaabe3994341c2ff6d9f2044ac870310d71", "06146540c8f63a0092508dcf96d98fd1fafc82aefe68d8d317359f7d750699bf", "0a8cff832ec539f6a902306822e1a00ba937cea8bd314a64faf78e2460726bcb"), ("06838b269abe5cd950c9ac15d2904f66f53488e3588316af2c1163aa08403803", "2aa8d302bee742c2061b83ccd70092ede5f33bcbd831577b07cca2a4bb3bf888", "1c05cf4fabc543e961797c8b24cb3ef9878b0ef1e8c9f1ee0b2307e3df628402", "00fadf07af7ce9fe084eb01a8be091201775f0311eb74a289f3b2c4a04cf0f2c"), ("1a7b2ce1b9030cfe4c6376427b8764952436550eddb4539b7e181ef94ea7e8aa", "23ec55988e06d55af646756f1e03bc39804c156dd1aa180e4b41ff32a077c948", "0d96f92c892b27f268c65d6350b6364d60fe2046a2469cbb442e3ec7692a88c0", "2edf9a832bbd0e4d49799abba7947654a07988c61d8ef059d0bb4a151e1e0cb4"), ("11ad195803543dd9a361a767a5f29647d4717dbea0f020b21ef86cba9a549f45", "021f85fcc2d036eef8cb6e6eec232999cd883dec9b0c729bcd6e2f14845c2f29", "14b102ec2c05d47f778e057ec674f47412c1717765d5275e0bd92fca7d2909c8", "20aae8b3aa460c23e42322db30c418061fbf606aca9a6faaef26f738354c016e"), ("20d4e1bc8369b73f4bb0942014f4d6557081a8d3e6451ac8195c037684e73142", "1e5bd1eafe69d828d512f28b69c4e4e908847b000ce97b5fade8b02455842d62", "2b90f3f50bf353ff455d7a46e986c059a63a6b3816f2e0c84d68cf548941c372", "182a0a324a6909ef89a417826c7cb457ae9258c2327d17e4df58f984765258dc"), ("23635f9d7c4e2da2e6e999e79f1b48f475fdd57dc4956bc0ba5fca6c16542fe2", "1cd60a4108e2a426bc742a9feed413261c7c7275c585831b49fd1a83b4b69e8f", "1cd36f4655ebb5d5162b7e4c8e1838c2c425cae3057bccd741c33613156e5476", "0ee7f73b1fc2cd7167f1005e3edd6177a1c8e86b28e08b19157512dc4a1b2595"), ("267ab97988c1c48b337b1feb4438bd5b46774755edc1eaa6f169f77ff0b81f22", "2f899a60ad4d50dedb5209333a1c894205bdc2399950452c1d4e19ad45525d82", "0fbe87b6c37b1755b491b03320baa1bf99722598b3f283027ce63dbcc5970841", "1c04e154f6d286e5eb3e1934c8d356adf6f4117e4297e8b5041fe02ae725c412"), ("0930683e1a73361b53134a49f64c5ff8e816cbd2fe87a0e2d15b11b3e346aa56", "2528c95f61c1446718c8e7966386dc93de45ffb82ca902cd3b3463296b369269", "0f971981d272c894914dcb927278ed8facbb3f1b6b29ff10c9ea21a3c046e5d8", "202c0edff1f651318fe495085eabc5828e55e544416202fbfa29e0073cef253f"), ("207b90ad88b0713352badf9c4737ca624c7422fa42b2a65ebf3b6524272d8b8a", "221f8e22cac99c473ca44ae06da349a2c441243e8299fe521d828b2f5cd6ae93", "03282e0b4cfbd3469bfb01f534c27e09a453502bb74d39538290a373d7977e9e", "1b1c57c286ea0106eace84efb99403d048e03b6688f977db373ad13537b5dc97"), ("290b33d60c1f94fdf35b1955fd6df9a469d962dc34ce2c977340cb833024d3ab", "0351bc372b266ea08d6128187ff830d386517696a54a26f5a0a3c7024b37f3cb", "218cad5c39b3c7106c4dd398aa1810948fb0cfc0929cbe879d11ec80e5456d88", "237172b43740879e96be2b96b63e4510979cf11666043935f2782d1177a56759"), ("035956102abce8853c444d66b5fce778e88d6f1ebbdf1bdb125754debb737397", "212b0711437d19744da660d2a59371faa296ed5e92660108a23c686b529a3f0a", "29f349f3d5b29d45e2dad2c88c729858d8b7ef0f93d30a9b4187b86b8b4a563c", "1915786c5af27a9919aa0dd138649463181ec83b9790856c64c40b240d788664"), ("24e2a48a6975863ab96acc370eda0fbff21bfb2cb7bfd3868fcdd0e72a56898c", "1ff02b8e673c73224b232c69188b8931940505d6be3cff4d7290225f55a2e677", "044ce8b2f0660ecf5d2ee599d504dfab53acf2eaa69265e837474c13857d3f28", "11a5e8eb2bc635decf29eabf87f6a050452b263b43c4a675b6534e6a69bd048f"), ("00eb994aea749f44fa9fbc332f54592e1bf1f98966278076fb4b3b836dc7bbf7", "2e0ab611de94cdb345e06433e577ae4c2057f0d177af9203358ac48154047cc4", "1361e529281eb1b82e8bbc719f51db4128cfca06e4d5787905f4b375d3511cb4", "0e99097aec0b1d0e5985a5b1afa2e208b8bcf81a8d9692c736b5dda53c844815"), ("056e4cb2dc67d1b8c03f8a7fd6d3792d9e8e7f3dee4460572abb0e48ab6a6707", "29558d4f5694d63095bbff2c77354607465ce8d3ac1d033cd6d25957e09ab930", "220f38abb07c1879579103a51473a6bd2fd98b0a2836e08b8c64e1cc5c09290e", "081b2cf2543618dd4b941943bbfe155180659a3936afc485b509bd6877324b67"), ("2e3380cdc5b02458f295b044b2e1bf5c5180a63ffd9727be59667381ee1c4682", "09690c8901406b60523253bc1d32f00a1c3a5aa2023d8d3cc1fbc4afe2a023a8", "287a7917cfb02cff1cedaad4d02bbf22e77eb45f14d99bd163d1a788c18abc91", "08b1876b640115fd6b1782305464ad54b63c1545e55294c35e8b615cef4bc07d"), ("2b8ae1f94faaa40c8e7e5585057b93f64c2cf04cee8083414cb274da4207859b", "26e2cf9b54838257a591646f1b24d94527aec708cc5a610a7c0b3aee67d5d7b1", "2cc73ddbad3a3713ce35d8a72e8647cc69349f3da4fc6e7e7e7ac8d126e218ff", "12e8474b41a2f874d26b4cf8d41927066b2116d695971b222b026028dab16441"), ("22fbbcbde2b641700197c8c3ece92b4c2994435e853bf6c97c50adbba0d5c5a8", "118c6ded6fa5edc2b154e8c856768f37f183692191e2bba58c552d13ad57c1a0", "12a6810ed93d90502f21b171caab0029ae45cda3ba146d8ca4244f9ccefff9b0", "147c4b7d9437258b77803c34afaea6329cd9c10e39153ebe9eba4fd8ace0132e"), ("058ba29f1385ede731994893724a9c8779ce996fd6715e7e1e85b4520ad2e050", "09c3c430e05a05d8283359f70566082076d7855e22b74511918ebe094e523086", "1e21cb8c2a28b8007e0eca9d7adedb255e1134d3ea19015042b0bb7a2724a497", "1055e110f02b7a39feb26ab8b1bacd64234175d691fcfe486bf4fd9f2725d424"), ("2bbf8011ff8adb7ace2b80ebdf34f5c6ce5ec0922ddf48f3d0ec5d3736aed235", "221ad5196db9fb4125b78ee9523aecd383623128c40af5b5a774c8e00c45b2e7", "0692e76d066de51d3453bb79c27bbbfdb96734b3bd1b5d0a96317392131f63ed", "06edb8b29e65e920d53fdf36883af4a61d762aac911c084ffbe9382b78dd362a"), ("1bb8c6645c14efd4e51852d688aacfafd1655da3230f639dcc4f46801988fc63", "0d0d0944b97eab4670867f5f7a7374a5a64519853456e792a030fbee1b0a7dfd", "15662267d12851023053324fe4d1e683d93c9e728de4eb4e952eb4237130ceed", "03b6eeb124b556d32b5ca5148a906ad0cdc2160feb48ccf3a5630b67f62b04a9"), ("27d1f57a6eeea52b3aa6f1afb08a8e3286e1d345d9cac7480aab85d186a58065", "2d04879724120f999e31799e164f963b1a61460eacedc1ecaa2782dc27549c20", "12a7248ec607b6fb61e4a8c1deaeadc8376232b2ff9c53d96f0e2a8f46ad6f6f", "296f88091776219f346cca5379855b3f8dde600eb3071048e4a98bf41a173626"), ("2bf0160a654c1f653638f3504741c9928ed106a2d72a40e734e78ffa4d56cdc7", "11f7c3b53a0738cee4c58ab55e8eee0afcda0310fea096102e721cae179fefeb", "28e886eeb8910375f784216aefa36104dd86cd7a5cfb0da95b64e961c1b2b0cd", "23ed766e8f9402c8c0d032d220af3f07d6be393526e01ea0eb689056f87bf5da"), ("09802fa3cf24c5e24318fcf4db00251e5d4ade0a7369dec2ec4caf505bd7324b", "2cee616ce0701f1e8d7d4a2a8d2d8ade10ccea04e492dca985d3979fa8e12cbb", "1a8de08051971d75ce174007e18d18893884711800c92e541d379f97bd95f593", "1934fe2196471f22c2e9ea8efe5e2ba7d4c44404ea218bdc5278afab4b525b93"), ("1f3c09f069979714e99242061f90a3592a7393b1a0f797e4388cd71d0f3cc937", "0ec13f1f2c2942bf9c58c084f32259fb70cfd15a6c04eb85a744c222d549636d", "2cb0d285c38313184dac2a134c5f240c38b7384ae81dac700d103a1c9a6812b4", "0c5d2d1f34e5f374fc91a2d0c53db28621993a6db52a696b67da3580bd53e196"), ("18eefcb13b308d29b6e473b099a34378401b0377bab7131078584d87b3af2356", "2bb775bd75fadbd50ff855b898de7c680c74ed549a45397749488925b8af6979", "22a023023556d1d511d988c967c085406d9f48044a92208fe30e1e0977591826", "0c23fcaa3aa7d68d25b883aeb17b82ad17f728d0dbe61b3791b5d64529f645cb"), ("1b7fd94fa73ab063699dfc65434104f873e46c8afefe8386d335ba474ce71681", "294dd1f6ab0ac0e4cb14b228a11a3b638b7f001cdcb6ae9b06c0d8968953797e", "2cfcfd82d3bd209b7b3333c5429239668232dcc7e0f396a4c81be640de36b3ce", "0a4fa4d5f8604e07a3beca04fb86a54d0030b8f26d37cbce257eeb232a83ded2"), ("2d686d50e416efd8dd4c052a62c59a06e8796b856d6571a54123dcbc47e773dd", "2f9cf8c365a9509ed4bc89fc22996c93ad9cb2208a98de8622ab60acc6fe241f", "1f8172f00e1202ab0e51b15115a906ace6f3db97aef9ae75cbc8662a56610e05", "1d97008e352d98778eb91fb9fab997486db054be1122d74bdfc94e54aaa7eaf0"), ("19d69fe62767752126b19e416d5a04b08e9633626e0d8a719922ed4300e056f5", "046f99f58498a353edb58332eb6ad2559cdbf40762f301ddb48243ef9bd7f978", "0714a40d85f8dd9b26abf41cf8ecc856ddb290c4f3abade4c4c4ae0936f46428", "13af76dcd63af12428b29515be0f3acc4a17895756599bfa587f1aaffb443e05"), ("1d8978f2b4218a6869f3f9cf3b982afab9a52fe1e253a457a48272e3cf77d993", "29c42f3678be7c15645ff2b7009df211ba1098ed4bad9599466ab5abffdf60f8", "173e01f3cea17c71f9f958288c252d856def8aa588abbe4ee3a7caa213a11263", "1f2dbef0778ae894b09f272e796fcbdc53865d6c9246610ded58a72fa03bd7d7"), ("2cdf205989d22d9dbd554b4f08bfd351284c6a5233fc7db500ac3bf2e928a6d7", "12ec6384e0421b52f51ccbb54fc3ab4856a11a76438944f38ae65144c2729240", "0ee17d3edaeb4101888d51e478c52e99c74df358b1c54b9270a6402ea1c11358", "2febbf53e9ade183eee27d7985677dbfc98ec1094ddd30a53e1ce05f179eb1db"), ("2d3da4447451ae86514d258440e13b6c0c25773a2a44fabfe5b7c8d940003933", "17123c75904bcaeed45cd0b5115df9b3109991ed5996cc18380f7f61d61da90f", "038e9deb90750d3aa2689a6025227dd2c6ccee3f4c0d512483431ca9ede3b58f", "2914286b615442786c411b86c441349b5d3daf6cd8c2e26744cc9f39db452dee"), ("052a5ef1e0c998e86bedbec979cc5117e71afdd86a35642eaee1dc2e96c646be", "1dd3317c5a396b6511484ec6f2c8d4e747018e4bb586f712e9ab25178348346f", "2579f54e51991539701c9fe2490ce4de58b394bc765d8d5ee2c08caaf4f28661", "15ffc57a705948d1b5772b5e4afc5d1ec8cbb590f09c0f1f42f5251da02149bb"), ("0b416228b623e52dc8260df85e6aeaad566ca43410de31c30aae1b75d8f18966", "0f7a2c22381650f02e345104df98843f2eed8d936cfdb3d8b12e645991dbfceb", "0ca17223e21601f115c4ba10bb4c4fc35a22743899d9be179a857808fad20c0d", "1526a7653b8fdbcd3b89d74d6790550e3a2fdb83dce8fbe3033f6b1db60e339a"), ("04a62d85b5e77fb3c4713d604e8daa064db18231a65f670ec45778d119c83f2f", "0cf3d92d93517384a8f00e97355fe5c333a52ef3e19f328eab93d797a122229f", "0e722333089ff211c1d09b99d8f1154425c86dd113652c3face25fc3467662ab", "0c48cbcda872dba174dd27914bcba5fa56d633b389da18d423c1a1954fd73060"), ("2846197ec019a5b5dafeb38b459f8ffd1eec5f7360cd75850190cd44f73468c2", "1fd00fefa694d159ff66d3bc0248453fc30d1b48898d34d773894909f37ccd51", "23eb5d1000579ed276d788b9d205e7c495aa754019d08f6c1f819bbd15345ef3", "1be498f25b5d4ae8df55099db89b7be100b942ffa6b33fee6c436e7093018a0a"), ("273adbd625ccf730172a4f54eddc8abcbaf617878e4c07c97bb2a033410592b8", "16b6a2b0fe1628dad094d61d2e005dd17750692144afcd43dae3a2e94b2cd8d1", "0978d9007c9dc70f560bf9122b06af57ce79642ff88ab2af78a14d5e83180dd5", "1e5cb1363f858435546dd4dd3e88eb0b31275ade86729cd0d3f629a90ce2d620"), ("04178c91a5f2805f97da4a880396863629623f16826f6f76a7f21e2fb48aebf9", "1023e26937626495eb7e92a653f3dcf90fa45ebc7245fabcc4b84be5837d14e6", "0154ae9a8649429f3b1124f9fa83b31d6cbfa225e7f4945ffbb8ec0122c5dd48", "035125052bc0713099cbef03fb5d726ec6c288552c75f414ef422d45edb88d95"), ("0b8f0d80a3a50062f6d2f084d40d94be92bc953f643f16153dfc1e467f6406bc", "297d8346e84712a0e407542c706ca74dfe372efd65ffd32625a6352ba5f150e9", "0fb0a22e7e2210aedb9e46b3133d277bd97a3557a1cdcd4b3fd74e1e8e8aff31", "21d61d832feb8e231f7f8d60404c943ae1286ded6f23ec8e809bf2cac81e6279"), ("08741dd17dabda79d3a82498d3fef5aca6a0f3f6cc0c80429dc78baae4239069", "02d72a23e7295e8cdc74b381b2189c7864d732b83b552fc0c7842f42eaebed7e", "19e74e46e09206c1c124b9e1e110365841cf1c1d96b97cc3daf28dca0f055437", "2ee7789dfd0a0145036e3db1ef6208b874316cb6d90d6613c645d74d6a0afeac"), ("10d010d51f02e745936487095b0219b8543f2edb73f910e44c6d446073a85143", "1ee8f18016c93bb2e43253dbfb2a0cce17d3a3600e14f69e78d4a793a8a225ef", "2bfe7e7248295f566021f8c2850955a6628e360c9b846f04fda41bc42f4d27f4", "1cfcfcd458ac909306adeb93e97e18ad947eafa9d194de50541dff7a98607d1a"), ("0171dfce8aca819437079721f4d14e6f135dd387c143c3228a814b1def69bfc2", "17835a25f365185d2167ab4ecf19ddf605095670b471a34f7cd96c8cc806af1e", "16a7ae441085dd0a5d7f0bdd9dec3c4b2223a9a51a4b058b04fa2872828aa3b9", "138f6f52c00cc8ab4527d41e71b61d1c7d60f0940caaf3aa095c6e44688b63a8"), ("1e0b767beac877f056bc72969f91fd052ea256ff50970f575b0f19af24aa41e3", "2b4ffe7d3d40011e6b1d087d2582ddbc3ec4ab05b04ada492f8c21ea298b62a2", "20e00abc5fca9ab45036df38f0baaf041a7780363f114bcaa6985404f6d6c51e", "2571b3796abb6ea48c20cf127e6c9819f0b07b642aa4c5bcbe1ca395907ce87d"), ("09ca8652ece7b0dfa7f8ee6c3dd159eca7815191a0be05ec06e883dcf7e41e9b", "2ffe04f8a52fe07ad6588196d32bcf29e5a386a53df43948dd78fc7c26b9b6fd", "2e1feb59651452c8266ba802288cf309b82d7be5f4ef319857274fe44ba2504c", "24c2575717ba8bb21f884b88c2f64fd698719db401e78977167a9f259c71a2be"), ("2de9a868767130870b551a52f3bb0f356c4cee1ad4d302d80fa78abdc2bdff42", "0037c8dac805423af7ffb933dc2e3b0f52de137aebf3816f74b07f5709a7b358", "12be5942ba46999414ae1f8d32c23488e5c084e313e643ae76bc74ca303042f2", "1f9050ab95ea80cf64d7192e664b4155fda940d5b221af10b27ab7b6dcd394a0"), ("2b503d52d281ecef15f9b5d713b319807fdacbffcbb23512e8a05e3ddc3a611b", "153fd4484f726c5b8ab8e09db512b66134bed95633e30246bb9f36f99d15b294", "09fc48e2d4fff2cffd734f329293e6c4783e51ede50ce3cdc13a08fb9ed496bc", "1eff78b5df882624cabf4fd98d5747275b78a0597953b7288b14c508bc07b1e7"), ("1d95f89fc9e30851ca67f94cefd5d906a17abeaa737feffb0797fd908a96be2a", "1baa0a35df01d0cc400afb074d8f73c6ddfc9e7441cf0179437d4487982e191a", "0fd79537bba2ad09f241deaf8f2779d8e63a0fb357f9258fd61b6c88eb606d16", "00cd1cadabd43f56e662858c93e8cd9c2af6f397f58eb3c1f3fc87f3b44aa46c"), ("1976e871ffb6bf99c1d70bbc01d801d97601c57228b7260556a581c3bc7e939a", "1beaa878838ac6a860c557929c1d727fbc04ab452b4b93eecbdbfbe3a9b243dd", "12c943d74e71b7671bf2b0d8f5a0995212cfb6348b163f9002aec68d72836df3", "15d2d82c8d78c47c20f3aa17293c7784483e7e508e35db183dae0d09fb76ee45"), ("0833b98d43e7f3eab5634ab1ace0aa70239773c6a934c25e43805b0af0c4c60f", "088ccb142356d20b3792fb05247deeb0055f737107652c4183c9df90e3a91f7c", "2d92363128bfa479c13a24a9c4f55ffab734ee9a3b017f0de141a5ac5edab78f", "235f6261176f42e8ed42232057ddceb0c4adc7295437dc07607cf1ccc52c7160"), ("083055ffb3dd8763de1eee374b11c1fb957161fb2482bdf79ed14b93c3a570a3", "151e9a861fc63ea411d983a66fbe0375952f2f42a46c62d5ff0ac505280de758", "24083be38bf3ec22493de68884d1f6d51fd638f82cb1be166eb9c84da56c0077", "0afbf07ab97b76dad4042d88c4b1876eb5da41069d49059fb314a608ca238b26"), ("1ee5f45a9ca6afdcc37e2e8956cae00ee12a5b4ef1866b26f1b28d6339331c7e", "2a9f3aa0aa185c1cf692246f0416b87314e86ecbc1915c0190d7135d260abf8e", "0737b672b0aaa075ea64ffe2211b4a651f8ababfa267004c919626b6a532943e", "030621ad5a259eb00b2b0ddb0844fb6455e827e6c39562df9f677f228f6479ea"), ("2eca9a28ce4a740d621687bcb093d9f183a04f7a0f031c879d98a8c1ae810e41", "1be196fbec80e0beaed63282ad45e16d62232a5446ead0fb45275b0d9cdb273d", "22b57e93d9ae4494efa44f83454260e626fe86448ef3c14ec0ed0954fe9400ac", "100ddb07b00cbacd64dc0d5cbd74be5737e6afbc5dd5ec18f6062b368e6700ea"), ("2c2e03cfead293ac25c923c9fabfa5e83fd3011c7a884c4a6544e7cc85637147", "1ba02930707033cfa4373c6fc47277f7b44037ba83250cc6038df1dea3f09b1a", "0bf88e4eb7ada54487c74d7ffd85a352f1b0ca6d23b2d4247b3d06349ed68253", "11caadac25eb18a80702ca57b945f3e29cf32f6bb4f408c8bd95a299fc465e2b"), ("1418bdc417a87a3cd9f2a46563a8119f5143a395f1dbb74d9ea091665e39dbd5", "0dd9e24001f954fd135ecf0555cf03c3ab25cfbc9f8b2d608f0ac90978a278f0", "0674447a433148bee6c56b7b757e3041ad35520467625adba3b7328e4cda9867", "18d0f72e886229dfa8ae98e892cff8b6fa31936bdc35ed393bee0948bf99c7c5"), ("0a0286dc49c92f180ca0df514cd25af60483b6ab38007d41e1101ac669a19750", "244b7947c56f898346b41a07c44c6feeb4a823c5a7443d25130f7b9210b30913", "09eac26383add9feb2c8b1391766d53e494cd38267edba794e52893ed6d012f0", "06c5dde5f8c52bb897340e51da0760c124b215c3e4fa6598e17d438bf04d033c"), ("0784c137e223ff82be2d425923a534784d6d333daca9ef1eac9a9a45a7aa6261", "28e09cd10a2334db97364a1e12458d4ab7cb324ed3e0fe5c7d4130250c1a75c3", "1b80a4039b5716494543fab2387003297373ff399b96a8134b4267d4be619919", "0fa51d34e474f4de8f108b936ff6adbdf7688ef09449ed5cbe46e448db68bb2e"), ("1856ebeba1abba61822fdc3cfe91da0cf0526b247d913212b557b578b152e152", "08181ae8e8954e831ebc56027acf84757c2a31049df2b9b8741c102d8bd866a3", "0a4626a1194a7029d5ec4b7c6a080ec7bf2cafb6c325861f4b57083ad2b7369c", "033e83500180a97e8befea6c2a785fc8141f097c124fc6cbdff736c77c90392e"), ("03046bd68be510842319dcf8efe40662b3ab89bc87a88d20b8056c5f4a5725dd", "2870dcba38d605363721c20bfc086fa5b58eb9839ab94f7afe3b3240bb030fa1", "224f7aa3df87838673185408e98190e5625f472d0c10f94ffeb6229e4534c0eb", "0df884ae7027ba16b342bb6b5cfd57169fd22f5d59b604b23c4b9f1abef733ff"), ("22d8128da56c4bd9c6590ce2d6681aa1ae8874045852d859fa289ca964f0a936", "224e07bc78c48f780c7d56e182b4767eebc169c09789a09ea69397099808d8bf", "1acfafde2e96db3a5a6c268ec9db0d7694bb641bdc2c27eeb34547e719897e2e", "0350978f57102537eac99a473c7a866bc3690da3fb850984755e83aa862422bf"), ("13c5e77ff01b9acbfcbdb18fd10ed405efc7a187de1dc37178a0ee93645c458a", "0a3f0d9773cb10fa6ed1df89a8c9a0ffc46e68d3d475ce5cea8e53f91533b0b2", "2350c1d6fd8312c6a2311a4e2a2791db48ae62bf4b2551ff2bbf45c0fa92a52d", "2e5635591f9a5c859259d51f57b2f5ecc03822a8ef50be234f683696adca7bec"), ("22c1cd6921dfe814404c7d3ebc255227c730e0188caf563f80bdc5c2a6554b22", "08aaec832e62840a34aa91c3fb6b405bd1d1b8f89d0b1d5f0b3c010413a80e5a", "0d1e5def9482f040b2416ad6ecd4ac5c9d2e51421591daf7330b482bc26291b6", "2c6860308f4d02a933cd7148fa18100c180f49f588f17d866350b8ab8a1a2958"), ("1abee053917581a422b8d641b84aecb87b1caa0ae238e086e174e3c26a4ca231", "0ebb1827ade506770621fcaa208337d609f9ea447473d862c6caa6c7de7a2293", "1e6a54894a838bd2ce636ad0c16ece61952c6fb8e1a36a81ab8f2e753647d209", "27d820dbc13f4159ed28d5df0544e1538c3bf5c2e7f7f18d5ed0327fcd8e0830"), ("0d5c37dfce5429487f2146a31cc869506d8bb147b1ae6fa4e8a41280cfbca2b7", "0dd97ed810ea24ec5fb39e381be0fe0f2ed075bf204b04ab202043b9e69bb7cd", "2a9f10838e2a7ae99a5b00c702240585dadcc3de5e00efca40b3c53667de28aa", "2b326226a80af8c184dfb144ab25279b2051a86b0421059fbb85861f11f96310"), ("0ca43727c85f8d39d071f61c1dd835666e275742e71224bf24b800aef972f1e6", "28b260960d6d6416c5b3ee4d29bffc59055f3659bf4e8c6861987c35c8f92dbc", "1c7b800180db5abdc68636b5d369a8c7874b962533bc66385f42d98610d9f536", "0368342273b5cd25dbcebc55fba38b7c2f6f3789d53bd8be83e5124b55b9cf9c"), ("1d38d49018fd2079ead839c2e92b7b950cb1e00df201d9ff13c8fd5982bbf9a0", "2de404fdf9611ccab60801afe026f2655c4518498b44aa62f1646cc509cd6f37", "0e9afad5ede64cac61b2007d8853342ef0e723e65e29fa99db29c1ce44a64331", "08c945b0a548fb44e08e30a8bf7751eaa297621490a2f3d02b5c0094d0fcdeaf"), ("2d9d7c0f2a1907ddb9d8acf8bde37728ee0bbad34e4b89d016381fdcd3961989", "2f70ed6ec3945e70f87ed3b034f593009a190a6dedce0140d1dfef20ad974035", "2b5351cefa64692a07320a63ca594f9b40ee4fad5e296c3cf79c9a455a09f4df", "264530702258bc3539e0425e84c0a11a7c2c09bda006e6c4652a7a1eda9a2579"), ("1ef90d270d2363c18ee82393e0b9e540f4f31db8a1f10caf32f4e94c8e11a4ec", "2a82a9fea9cf742c5daffa2cc7535366d2990c2324d7994635926903143e6884", "2870abdfd1d8422683b76fe7ee4284bc8ff54b44cd92ff4fa818c0105de85214", "2e07bcb08c95e58adfe2cd7b7a2e4c15df5c56bcd8db9237d580fbc9d37610de"), ("1956068d9ffdc23479b2676fb9326fe0dbe467f5885bb0ccf06359efd7a6c1af", "122d9d9209ab1a3da64678f993c1525b3b779bbb2b8266fd23c3fe100051a37b", "2cede760b67bae27f7ccbed02b8d3a23173f2e4387d88b762573c92de28e6621", "257f2cb4d2567e75cd91cce534093958122a7765785259dd39e087f97d61a309"), ("06065bd818183ee891adc292babe6456305705a35c4639ed8fb3e6f2b9fd8284", "03c598d315a632421bc980126c0dd85376114264120eb7f1751bb3eb3d3a78c3", "02d9d4450823d95426c82dbc97f62f2338a86ea7ac6734ec75dd759547ac3018", "23b4332225eb4d85edeef69eaa39a98659383e6ac1fda1b2d4be84cf5a7c65c7"), ("050342c35a2df3d0025ee6d02e4b4e66517a693cb7ee6edbefaccd8753addf2f", "10f67348e2b4d904a0e01471ecd1d252f61f6f9859893718bc36c5eb2ac7c1e8", "0ccd56387ef6e9862d07dcc2429c824cceacbd2f061bed4b5a3503e083945377", "0d45298838e1beb197cbc4e73ad17f326943972f71298beaf6f2d4b1434cdd1a"), ("0288f0a10096390d55d06fbdca53844110d6e3008e15b644cba6f6c69b606191", "1d8eec4c1f86073444e9c1c8dac6df8ce7f6189572bbfe1dc1b702991cc1e63f", "064b7b14dfabeae1106b433673a2f4ab6599b9262f65fb1b5dfec11320cd4200", "1f188669c83f295dded844c66b075df4d10253aca5f215b5d45695343041a2b7"), ("144b0e66eec1c48655af3c1cf4a960cc4799e4ae40164dec19c262b3941278fe", "12e7e411d98997d872baafecec2a5b8702c9b828b1017d9b7ac2f67b948c4165", "23770ba4f952e3834e695ec9a1a5db83dfd95ca913cbedb86af3062f1b5e7b61", "26153e8331282b65a1f17243628c1528179acb13fd73b1111a087cb4442ed76d"), ("0103f54f5ba60e9a748819347497f47c639b59a8575574dc522de92640c55655", "0609955d1df91f5d88ddeba11bf8523d912dacd2d4ed8b6c74b935d6ca9f0120", "11fef517f94b705ce8632b29d8bb2205fad2e9be198bbd602f64d1fae923ec15", "2263efb5fe967c9b5a7a8522aa0f1fa65b2756299230c849c771bba72cfe0213"), ("05b3e230401c843e6d42734d7b58eb5952908072a466a76f654330f920db6674", "01c9e7958052a54383887e404affa51414674c87ab447cd990d7afc10e0fd4eb", "0c8a5551f8de15f007860591109ed63cbf83c4a69446e66ff9366131b1bb88b1", "241772bf3d6130e4912f2edf95fbc229b10bedd43061d2a3c6c4f9e389381858"), ("067c5a71527b27c212c46c440887f51693b6fd0505ab4938050a7ccab1738e7e", "1e783b299a34b20a034458201682669083cf412bec5c7839a4968eed938d68eb", "1b152e8bccf8515be050c59cc8a93bbb191ed181dcae347b0eda1375a3a6cecf", "293208ad71bfa8214167553b160f4a6c26ee996fa96097a6b399877bc9c0c2fb"), ("0361a9dbe4180d641e40a3e8f3a7ff31b2a263615b018bdc0ee270cae78a7525", "0cd7d123d0de169f2bfafc8fce4053633939c17511a4f67b6c7df3102322bcca", "0616e3bc21b5bdd59aa43a18e692f8fd9f7dbcbaeed1f16cace3dea3d726b48a", "25e6214c00d7805fd32f680a1df83a4aef437136c58bfd9ac10ea9bfbb8608c8"), ("1d286a07d8f33efe1a42f2d5682b0a6c80eaa421210d2b14c84e2827032c319e", "0e31762bdfd04dd152941fffee11b8caa12d1fa7852e02c6a240af068108c900", "03d35fd0094835a7f636aaeec0519e38c7e0a3b43f1f75867c56fb5247e2d919", "2c2f6b55bd762a3f74213f9ac7546cea2b4b1b6855712a29d2714654a20708ad"), ("2568ece3e28ec3296d280d225177a24e2095912b7a18ac0555f88f754a6080a9", "0dd4dfa6e84ba1c7d2d5fed72deac13922ad3b3d94d4f076f4744669e5c6a65f", "1e12e2a512e3bc9faca931a31ced4a797e5cceaddcd006c2aced996de81c5baf", "1c26b07931322d78b9eab0862e1195335a6979c68565b586018475f6f41a3815"), ("1ee9a49a3da97160fd8932ed463f0090d238fdedc7f265c71485ff47de6c4e09", "11f521d012689b18a16ec1334249e651d4100f562e1abdb4e664fc5042d3e582", "0802b357a9e80a0fee8dfbb5b9d7c3225789a36e15361cd15cb9e1aa62a6958f", "1b274105ab9d170f1464a492b5ee2dfcf87ffe41f487e215f9dcf7fb0c1a3175"), ("26f8b9df00a24564261565786b9134f577bc22b0ef8a8fd3e23c04fbdc286eba", "1217a2f072db96645a18261524c5e3a8cf33c3ca4d0561745f4a586263aae9f4", "298d57386a4d5b91c9c58dc19609c667a68b206c410ddec1db7a311a0598e7ba", "1d2f8e5728e77431a69b3c8aaaad4faca15bd15ecc00888689a34b53f978b03e"), ("080d681e25a7e8add2f57b30d2e83b00371d5e8db3bd4a5a21b962d9ce358cb6", "09ed96e685620d3e1ff209e316d38fddbdf29e00d9fbb0e0a54260c4fbe2f064", "2ee17eb6f1c53c63a39bb60407d54f8cd1d2382ba08e5ec8e645383555f3d8fb", "2de0f44f5bba2fcfb2153161dcd60051cc37abad8f2d956df2be1d3c200c3368"), ("2eca3c8d4ed300a9a635c752b708d0638707a574cbc912f7327fd4e48f9590d0", "0824753e91e1fc84dac78df1acdd02b8d068fa5ee6ba8b804839c7e1d00223a9", "07bf7755e28aa198f2ad01c3acac12fd8fb3b5323a2e244561b6969817f91aa1", "0f60ab8b68e4680360917e489a2d03417f3d1ce754f6f0c5b49fd5cb27a41685"), ("029974f16116f171281f002588f91d5cddb6855b6f900cccdf3f696e5446dfee", "28c2624e0634dab3d78f34c11347b814e538a59f70fcadd4a26a1cf196c052c1", "2509fc78b08be81ce7fbdf1d2068a87d8102c2f030b6d0881c0ae81c95d2dda8", "2d263d3b461db1467c42228291577b653b2e2a8068d2cb686f6a9598cd2b2efb"), ("0efd4df5ca323ae2227cb6881a3d860333de56df7ffd64cfa6714ba8adbd53d0", "09cb79c3c78e71fb4a42ea72a2d9397082c87d0728a9a85122b2ca133223d347", "25352951021d87377e17f86309b7af157174b267da712dbb08dd22b01c041234", "1694d9999b7af8774d5e8be5c95bfd2674fe83878e9c36c2dea4c55593447758"), ("229b9db84d27be198bdf3170101a416f99bd10d148d7b780145c0af8e063ffaf", "034808311812200f62f7ea31b2152f583de997fdbb6c113cad7c384bd6d5f809", "26b5d16c702d3e0908cc76a51d311d8faa98b72a8a81739f937b3fecfea3b8d1", "286ff998bf1c9e951c0633a4dad3f9b0e86192861972cbd1059ecf1ef6c8a660"), ("27fd2e9b68fd4ee64726bfce7472074f85db3d3dd4e70e6ac85c69b65a5c5421", "11f7a93809f876509f777b1c5711cf46e5e219f4ef489e41e378b8b82f37b4b7", "2109844f00054ad2e695ebc8e9a37f4654b7da543000da4b8cf8a073dfa2646a", "19ddf2b414fc208e974cefca520ce15e928cb73d15d30d0b1ab2f22d76a0065e"), ("0591bcce52c293728d29fd2c1c88fc9cb2c497137b89a6b450965495e8f1c891", "14fd73d4f80693b112d576ca72c90ce03d59714cf69746231cafe508dc27decf", "248e3b40d6e754cef879563ba5cfb5cdee525455785c48e650a626f0d13d3b87", "0a48b9a961393f7014e8153bc6a8fc3a5559323e0e0bb9fa76d67cb065734a14"), ("24d7c80bbea682ed4b106a2bbc26924daf7c550b96841f9052589babb2facf22", "0dc6cdccb70181ceb9fab356007af0e10376e7f8db961828edf2b7a48b8a6ceb", "165a061c974042a347d38999068be4e378e53dcafb84943cbd645a8b6489a66e", "1d969106f4efdcc83597fe0d436634e6a0c8d6480916cdc0c0556b4aae530c84"), ("26bdecd2896f35654a2c8ff193103b2d5966c3e7ac388757f11dbc99bf26a412", "13bc35c9a686f806f27f2ba9660f65a67bd504d26626ede052e52751d78f11b3", "2d74a4a40babb418561694f0fffef3d9556e0d0578b0733b77e8d394f2a1f1cb", "271ddcf40f3fb6b6d45fdb54d32282a910ad9597e0c76e82a6e21bece796cf0b"), ("0e7de45842f7240583cf42bcc6ab0b0af5ac3c655be1b3d2497d0165f3ebdb91", "1b8c7c64f648ea0172de2e0c900a471da18b85331b514167b35284c92135fff8", "2baca5ea0c158eda537803ce83c7415686aa64b89467c0ab42626592331e4016", "15ca70ac6771793675ed0761c40e319496fc051caa1665f6745c99cf56472482"), ("2b02ea51b4d367eeeb68080aafd8ddba200832b05eabb6ffd70c6820e52bb693", "1762435bd72fa4b9e5100bcbddd330f0226557f750286b58deb5d7d177ea1116", "00a691e1363df465ce6b37ca16d081102c960cef7cf7d5a1e9b2d3e953ae99a8", "0aebb6d0d70012b806bf47ea0913b4497ed75fd113ee1d251c5ccdcd1af25c24"), ("083f89650d2ab809857cccf26955b0bd7e0ff71765e4390ade97099f87c19fe5", "0c60305a316dac178335e3c534e7e1ac78fffdd24f30094fc9155c39e7fb15d1", "21e27e1b1d9c0a01386ff3b6c5d5e9c6d0da7df569bb96182da086afd54a6241", "002637fbfbc82532e2a463252360496968b73196ba95360ab0e6a8d2660358aa"), ("1ab3815c29dee192cf0f8527fb67ca1dfdcb28931f07b6ac46cb33e502f67efb", "0b0d6709cff259853b7608c1eb8c138483c51879472b2988c463c81e7b05009f", "0242c5f77cae49d2d27d1955050c733a6d9c79c64cd3d574d94406dc1b889bb8", "248b2f75d93b270d11681f511f34a3cb924fddfc12c2cdbb0110885f4d1ae908"), ("1dfe8c3d53733acd6773dcd298944cbe1ac948d8b965b505b749fec7e172cf46", "1323ea5438913d6813290591a12d7bf955c52ee3a7f2f12f20084cbfd3b8f1c5", "03cc8ec2b4cddf1e8b6c5c24e58c1802d96b0764cb7591b45ad030bf0813c57c", "0dd04ed12eaf155f7aa92e4e279f3e5495916a950bc739030dfa83a0af51ffb9"), ("228d69e47b2ffabf95a05b2a15bde2c31acc814389ce44210486e4731989f7e3", "0766f24697a5ae1c92eb979dddb0d18bb8935d2fe1d4d7f73a5a4617d6fb949f", "19104f064e1506c458dc2b71bf951b51e5d0797649fef186938e464d8bd3bc37", "03559ad08e581c05452b3a70fbc6a2bac6ee993b6f57590fd95b52bf27a7d149"), ("202debfa72a37baaec1e93ce99fb92c4c6ce46a5d2281b98646e95a48b3c22ce", "00fe008108ce2716c76da5a3fa91f80ea4c5f9fefb1e7138aa22cbdfd434f924", "0c3e383943fcb58775b7d48ff0c5a87804fb04403b047ead26530657fea24f09", "2fe5efd7936c8c9be5481f464781ba37db566a8e6cf51ad3b59db1ff40445c49"), ("0f67c9ddc3ad0aac72e5c8a9fab5a78d0afaf37adb4c3339bfc6719442aa35bc", "0f7765cb086ec3c16e11dadaacdb63f4b046e5b1bee66098ea0e235c3e7a733c", "2fb0d38442071ddf3b5574d4af450e75f672f71bfc71e88aa261eab4528a51df", "0a204e333fc03e45ad390004745874bd3c324fb48c3dc9517738e9d77aa993f9"), ("1c2c263861e09aa201056e20a32869b2b69d6388e581f1b249110d7a97d0dd74", "16cac9512f7c991939db2cd70f39c7c01e3434e56333031bd08baac000778fee", "2e3476a4ef12a57f437c619039f9c4ac5bdb678ef5d2b10ee82d9eace8821700", "1546622c013093a6e2711712abae91a824079373b2c71eb68a32c48bb75b4309"), ("2f5d82885b314a6633c3c8e6127147f38706fc1c2dd311eeb87caf2e1eed5bf4", "1afef5db982abea8e5c18b0550aa0c760f993084cacee55535a4423500a927f3", "2e460c66cc16574b31e978aca915b3fa79cd6bc35b238369a25c0f2cad73cab0", "2e6651d96adb673e77dddfdf272909caf83d4991710d29385a9864d32be2cd9d"), ("28c5d09e78cbfef1453ee0a3ab97c130d2bb014d9521a2a079dfe6adbad9cd27", "247f8cc9fe720a514e3b464f3401c92db156c4e82624f472e3f008715fb1def0", "246e8a2107bb374c41fee328b51f28fe020995ab97d1b64c0f0b9e83417f6b0d", "181ea8be2447da637d1fb99850eabf5151c593370a4a7230d7a51308acec3022"), ("0a09080833df1377d5c94f607bc53e47ce9063b2b8f312e88890a94974344e8e", "29410a105611451f3505c5111b65e7ed315da244c987f9a838d3ccda64059a90", "0c97391e7913511d932abf7f649b77391ba01d0b04f09a44f9b340b10c9cdbe4", "2fe03f97231f7292689ab0170b03be2c12a6425933aa10c1f70f2e540562c897"), ("115a0c42f45ae5ef73cc3ab8bbea165c80ad9173ae6613b35f79183867b62964", "300b8a5c3b7f7cbaf7043cf6daf67345080a134f234aa52d60ded4587c30cf74", "0636f18e3e9ade2174fcb7fc39b7994902aafbb99a2953c985d89c1884154856", "071352287da88aeaf1a8bfb8fa3532b18c8097e27bf30d5ffe9941415d75fad6"), ("207b80beed40a8a298e1b1cb8903493b9ae41dac74e61e42f107788b8b2ea5bf", "2cd2fe46371135a8ce5079319255e05a6b3ac767488fb1f46efef1451fd7df65", "1c36da5e8e6246bab5cc0ed5d6a3052976bfb9e60f240a284b9bca1cadf887fc", "2d20323e69cc0f19857d42e1666c023ebdcc16b6f0aaf5f1becc6262c8ee444d"), ("1ba047fa6481592fe4b24cbd614284af66efbd04ea2393d62aad7697558a6454", "0f1443272128ed9690c14b3178ca86aad5081fc22e6497cb76f81730625b973a", "0682dd3a577891c8420489dc0818f4ed9c866f069dedc9eca0a5e3346c804675", "1640910f33adf537b5230d38d817f29045ec0339ec3f9d3903cc12859ac02ef5"), ("0237bd4b7405c233a34536f86ac192f592f989f85442fa8fed1e9205c9508a5e", "1065c92fcaca289648843d2e37691f76dd2924fa2af3102f4e2eceb09e76d566", "18b8bee999462fb5a651408f6f686975df7342e52ba4e9a8f98f5012e0343158", "0bd7638317c4007944552494444ea7775d42ac854076512d11525b425655492f"), ("1776fa321bb50226bbc94bcf3977275411182dd5bd1d44164b92b93a36cfe422", "056a840d1d69c147a320ea9bc3055f7938a2e525b72b50b5c014d2bcb0cb0397", "0e04e24391decbb29cfd42d98cb024a195f2a9c79768067df44801c32b0ea53b", "08ff2d94d15cfeb6fa84f30c84df634792222827d357f53494af9c66b8efe853"), ("28a63b1ce373cb5a56ef1f780cdb3be55a15114dc9e82b711ea8c9bd2bf1c6f2", "19b547e272f851508318afe2f61153969a50d6f3a6b7d4714207334e08c68591", "2104ebac4bff2ded2cd12747ecafa112c56cda553fe2a2d649eb56d5aaf4eeed", "2aa917dd77005e32c2ccc6827d9bf6360fed80d6775c53cca8933a5477202e0a"), ("25c26d08afb61a692a7f34f2111205fbcb4b60111470c17012d774ee43b26c20", "03e55d444aa911de7eda52cba45cab8178cd34695a06aadebfa652eabfef7e2f", "0b1f63c3331bc9b8020ed10d7eb3c8f8e0c2e1d2bfc61deb5c039db5559c74d2", "13f47ca4c9297fc9374851066ccfde51efd3b89d167837cfc11baa1084533d06"), ("251494660acf079896c2c218ce4ec81f3ed4c5c9c432147d438c6e8a984c061b", "08b5e2420da76a65f0172ea0a02408c268e5dd8b6f0d4591efdf60000aab4ba3", "11b974cc9e647e5590c7d54ad668e8a9351ac9c7717f7c0398e589c0ba9a0dac", "0766b5c44484869475a209a28d02d2c93dc83002aa2c2783aa8126c7afc01d18"), ("15c1c165cd441fa38903c6ce9914ecf28c168f7df61e1d54b8039cf4c266edbd", "1079f3172c1fbb8f0d4dab977b6ff70aec3e626b3c9de92796dc1af994949077", "2f686b8b8397200abd5a1c4582b2ac30af0aab35081cc8914d8a061479c64a85", "1cb857be6fd1319d21e861256bd7afd2d19c59914e8c8de788514f265f86e81f"), ("05b3a19e610d083e516db5bd76b028762e6debd07d38076a3dc2073022667822", "2c60209ea4843ad9b989c75d4a6ff8b04478055d466f945e8757589c7354b967", "0bd52a46146419d7afe78a9d40319bfd88586b2ce0384289d635ad6664cde15a", "11d62af07d3209385ee17ec959adbcbce74a543d2af59252e8d0b2cf6186839b"), ("06270944a53e1e20cd90baf47e147bc2f5b5c4ed4218ce28ba3243257dc722ab", "0f5261d69d031012b5b103867cda42b83d3c18bd760fc40dea4eb020358af399", "0feec776b2468bc347bef5f83c697d6ab579df1d47b51515dd0d349fd72c2f4e", "20b373921b37ae79ffb1c32c732dafc742d258622dbffe3748c31aec8dc7a58f"), ("1a8dc5eb95de7b449dc30007034e32e1bbacf5c26b7b561916cbc45a6c0d767f", "2a6ec3c63ba0f62cd95b7046b4412957a409b91e1e09a63f2e5fd5c8bda73627", "03c802686388d5bc318f7542e35efb2a12d8d16bbbf9475d369e267cbe8094ed", "143b38250db7b9b77b4493cf0cd9604ab349595c640a35637fa6d18160e2bac1"), ("21553cccf594bf041124793bee60b5dc75dccc951a55f784b157be6f25e58355", "177cf489fc1607433f974d917e80d08912cce85f869b2f06067cc7119861602d", "15c0790c470de989ba9f41ef52a931804566f82d742c089c7466245684f8f527", "212b48ce0541c1e924de191d10252f906fac661c801ee880cbb6b903386d5ba9"), ("17636e8cf59e9e998425970455a30551b144302ebd8f2489329095cd9d496b24", "1b0419adb4599b920f4106713f1724690d01b9e8d57bb89048555faf20872817", "2bfb4d588b1ed881a3b78ced8f1d8fd1ff3be4ca7d8beed6616deee50f7e7696", "1e39ebe49bdc67d4f7d3063689e87abf13545f6a2d09bc4e05a206d834fe0659"), ("2e686a822f13c803b9976c669b8bb66590567d6f611be784a055950e1471c23f", "1c9b03f871d82515b4ff507f9b64a575489c3d26d8aa19c0de016c013d2cdfa5", "04dbee0d4ae514c1e81c64ede96fcd924f6e8cf7f3fec6e18b761ce6b4441f6d", "24ad8b2ceaaac772b3965bf7e0a972abf2986afc117b6eeaa12703b53fcd4b02"), ("29a62667f2a78350bfe43c337c7a6db87c66da641070c155ec852a325e018645", "0bc9ca65d5369b27994f55f44c01ca09bb754c8431fd7558e9fcb7a895c5a5c4", "2cbfc975aa5c39a274f58449e39c6d4c5ecb4bee94138d18cedb7e1a902d6a0a", "18d45060e5a4b1e6fe8b44811a74351c2e5e3939e78d2ba29aa6a6528c2f377f"), ("0d45fbdc4d3802dd6ba7a32f0f43952e941b85eb1133ce0765df485c34379972", "2c12cc82b0fd5247e47bb30805c1d9fe126fe173522c83f6d835c506e1c242e1", "08fb0b37c8e4c6fd474a56080ecb3a31f52eddb06cd0543c12a802a8258b3475", "22904aebac3304ad05515046030bb36b2c8cd3b5507f8c28e384d19c3fc30247"), ("081415dabf1fa71b8883f8da746d18fcc59feb6a18cfafa797d20a08f5eed3df", "03cb01b192de79a16110ecd280b0b78a47cfb78c7a72c1ff69e4c5464f5aef46", "17704e919bfbf18bc8dcbee91d17e6fb1d2dbd0110f3c976e928f5f423a197b9", "091f55ca183b1fe8d2a79288e355c102769d0c176334a493ded32bd7dfe3c43b"), ("305a8ac04e2d15e6acade28db522db0499af42a32f74d9174212c13639e77790", "0ed52ab678a2331b6e97667af8beeb2ba681a79b0554a98de8c6c170db7aeed9", "275b68154deee40b9b1e385ee34a21b135e29da72da51abcff57825ddf44df5b", "03ff935371694d5959076eec2484a3bfc121f09eaf89f16178b7bd51f3bad73d"), ("0c8b65d05ba8c0862b12c8909ed46d5fafc1fea28e47e7a234ba89f060634daf", "217d0206211b777ede1b20c99a39997a6927a89e3f135c724be5ed3e882641b3", "193a8ce6534506d8eaa868eb2ec7065820e77fc4aee2868aba0218c4d9763670", "2a736021a40fa721182b8f35ce15ffe10a2b5763ed09f38294ad7e4837b9f78c"), ("01d541fc30dc08a2bf097d7dbc80e3b44d85dbb46d72afda91d604ee25f21d23", "009437a90d3c5f15baf7bb1a9b4aa1c457caf08388723e1a3a2ec6794fc00a98", "1cb1a2740adf12bf74a3103d45e8c121fa4104a5ce3de7e1d36a3df83bca26c8", "0c3b628576cf0a7edd3fabb9b102cdaabc67a624e98bade5815a8f22eaa06c1b"), ("2e163255bba81ef8beaec33478807115fb15974a5f561a12b3cd0f7e4c146280", "106ccfae5234eedb6b62044c454d1a81c551ee49d6b75a0d49c6a3e711f5194b", "096f5e694639e7ebb79128d848df48cb94f30210d107fcf5eade8b665c478bda", "099c11da82e433d2aaf5782b0b051876033e8425c699b02e24918bb421cae2f7"), ("137512adb0eec72b6634abe9f4145e56a521027d97f9c42c2b2dfe37ad58cd98", "1f0ed4db12d4a652b0474f18d3a67eac07ff64dbd9904d03855c9fc9ffe4e69a", "0da03f79b839df2dee4018f8909cca4226f6bd3a606aeb65c4d3ece8de0d059e", "0f47a75b353821ad1f63bc3bb08adcaba5ff441e4f03d9415319ff755dd229d2"), ("04cd2c85c27485d3f9e4d694acf16798381c1e474ee818839521bf316b2a651f", "297f57dafea405d68d44f88e74cf5b328c1df89a33ac02bb38c673906df54df3", "12e055c1bab2083ded43f6166576f1b939890476d34d9e87445378502f94b1ab", "2be0bdf7eb30aa6a8c6870ab8a3ba0285693887f4f7d11e85293a4103e8fee71"), ("14a615d24e04836c2169c26746932cf71f9bd7942d729167346421f4ce1f2df5", "2079a1afdcb2502a6db6aff0ff430ecb4b8cc2377fbeed58ace59480ca54108e", "16e3c3125dbe0ae79145ec91e7a38e3fc9642454d64605fb361d30878ae47b20", "10685804f3e4cd25a7f9db07d8ef021990862c659879adb4e1bfd6ca2614145a"), ("01bcf1fa167d8be5a91b625ac7b2c2bccfa9fc9c47f33abf78482e80d0b0912f", "16d452a8bbb81464106d6e89b2cc4a54f83877c84ddc724efa9f8da10548672e", "12bbf44294628e97527dbee5b9dfd9529c540dd027590434db8c14f20e1f5141", "018b8bf1ba3675807c3c897c7697087f852a99340069ac9a65f3ef6b684a3cd7"), ("18939875eab2e4445d4da4743e43aa3a80b4d8b2602b774537fba94f711c29ea", "1ac11cb9f9314c0a7ebea55617d2cdef9f1ee8ef8d8a347c779787f3384c0053", "1c56d8be528b72bda3808c2e9513419990653af0fc35d3cfbcb9f1a4e4116f06", "10aaeef7227266f4e6a9362ac67a4274d35d4a5176d65c06a7be1ec7f12f8873"), ("25164dbb92cafdf9601ac0f57819f919dda2080b51b4989fa330379c45dbd811", "04ee8153ddb78819c937a69088808d15a49113051f29e56e6368b83185c02c7b", "1775308451c8c5e6ba3f44a97ec894c5899ba688f4af3f07de422d93e22c9291", "19048dd04d002a79423dc95e4e1b4db5f2683495e4cd2958f930d9bb8b7f6f5f"), ("099e5e053b00cc8c129e4f272c8e1fc8a05a754763b60899e8da39abb5bc4fdc", "0506938ef9965b4054b03ab52792264f1532467c2ce2a5c351e5eb3b5b70c7b8", "2ad2887e43e57f70d700b97c048f190b3696abe61fbf037f5a06bbaf846d6b4a", "29303fe7242825ea9a2a8f49fa2a3c50784eacc7d3d5f85f7c46fd44662776d1"), ("087aa04aa0ea816481ee5d6d7d74178f3817bc40c018972afa7cb0fa37e22dd2", "216e1dc483e8118c61dc6e35aea9129ea59ac37bcccc0f4bb4690d71fe23e60c", "21b03ab07b22b061db4760a9c3aebb39f0c50c022a2b7541210143cdd42f2bab", "135bce50d4a1f1a416c88a6e18f5da3eda37d73ffba595080e4943a0fde2c969"), ("18b8d1f651df83d06ce94c80b533ba0385e8e064bc1fbba7754634d8481960e1", "13ab051acb6a30d05af54614d2eea5dd1b13b1c9d45a800ccefd960687b0c09b", "1bb20e3d79c748911c607ff02849ba747c41dfbb48b99fc934bd5698df38a6fd", "2261ca4f663fdbf4eab09314ab5a01401a4b3478bc4817f9b12b247b8ad2665b"), ("070a1497764df9cb419e486eef9cfc7012c6a00f7e14c641a894f688529119a1", "0beb4ca221dda9ebfca29244cd6d1f5b48d29df369ed2a3b108a3c48ed33253e", "2f5c26139ad6e9b0c602982cc102e8257fc06644790d2c3f3f2fd2ef790d0b7b", "20aaa05fc2b7843f643af6797a278f5962e8cb5f518de814f306e96202165c50"), ("2f4236765f1cac3dad07361bba89961f93b08c5485e2d83743d98f2a7c98cb01", "1dbc3f3aa3d28bd3ab1c2d7dc5d2ec9f9f0eec83700860444ce7ce823464641d", "0558908e95ab65ec2dfe798361aa0cc93410ff2cb9464518284ec3c012cd57b9", "10b42a049b2e0ff8da8a802d1d40f4ed296ba1d1ffbda9e4b5223d1a022da0be"), ("001caeb72b3338cb0c836101a421da1102271871bd6c53e00acb27f9eef784de", "095aafdc3b04230973a94b3eea054f209c59a5614f7a14287165d9d4dc64e4b1", "2ac8ce6121f7094b090005ff37b4125cadd21086121071f8e8ed391347b47e84", "2e379f971dc7ea1cf7af4e0246359f8b96df3d6e725dc8aed649262f8da05f87"), ("044dde4d7190b1c1078238a8108d01c1620a6346727ec3c106a1edc57bb59863", "289c8a3ebc4320f2786625b163376e459cf3cf4cfd09b5524d39a7ad0aae651b", "1a3afe3291fe15f585352816b4ba44bd0c9676f7ac1311f028657f8caf3bf816", "0f0206bea67f51bb7b26f5a5fa1b034253ea822f83810f2491100e2a4a0179c1"), ("18a6649f31cad712d10bdf580153c1b1aef575df3b6515d66e9b7d9a3036a37a", "0303ffd1592d8e0ddcdd6616814c85e0e160e76fa53b57d161ed77ba1d88fea7", "0cb596fbd244e745639a7f7464e45375512f2ef68ff86d62fbc6f72eac751269", "1ae4b916ed5ec085edd60f7fd02dc2368556c02fa0defb44cdfa5141a1806e5c"), ("2aaad126162e5a82a6a3a53597b7d3a96774675bfd847fd854614b700c60d1a4", "224436574929d9a4ecc15cc45d176997e8ea4160e093ca1718e1e68fbb7ad16b", "2766c347eda54c624e4d11b08a454f80c4bbd5c2467fc957e467bef4a9277ada", "1e891eea4d6db846727d377c51768781dbcc238b0a1f2c8d79e76f038de7b369"), ("1d1736bfdcdc77894e28f90cef4d950aa0c817cbffacdd57c81d529ac1e0bb3c", "2721fb45677911a421640c065b14b6b3f3b764baf9aa2ea47674178753658fb4", "24d9229a9904883193a3bebeb2ef074a0fcfd69da427aac9c55b1e4a65acdc56", "299e913cda4b88de2b7845ba286391a8a501d565eab53fc804189ef5d97b068c"), ("0c7c24ac324746b9c02a6c9ca1a9d1f69e2fb9cf7f5fb46a5c05e6eeb3ec47f3", "2a0ec3b05081d484be30211c509136017ceb19b1ca64808f79902d990ed62273", "302e9b74fa33dd121e402eacb3dae7348d09b267616ec38d5a9f9906603f8f1e", "240c93453c357949653eb84be658a837ba67244b7102ac25127911c4eebe847a"), ("0311b5b749938d75a9ff5efa8dde87e9c4b8cd095223cc355e19844c53ee100b", "2ef741ddb3fa2d44eb5177c6f78dbded69fb2ac741c58b8517353b6f04ed2352", "2ed586478918e8d64b6224349edcd8d0afe09ba4d8a8b446134a5a3e4f4ac966", "0981f6bec88281f1f3947d9ae9d5042568b217df29ce3aeb38a85077c3e8f854"), ("0611bf5e103b1506d49ed0d4298e7bbea8c814cd0b9a4c7c7198370c68ddf180", "102dc9a3463f842a02eaf2fc71ed127826a40a66573a1d4865d3929250e6f2d0", "015a0b1c68cbc9973fb226d41af05534b54c7ff24039fe8693c9cdc2e6e7c374", "246ff5f1ef5ca473c14c8c151bab897be9e63a48fdc87df367ac6769def44390"), ("117b312435fbc3ef0e85eb7897ebb724d9b8d2d5ae49bc65af06663b5b863d58", "1c12ad1a90628d22f03bd75068aed575173fb36560bbc5767124fd1f065255dd", "20f273b4a9c8d5fbba9373d1a6b833fee9fd3e0bf3380ccd853769b50294ba19", "280b27409779e5949e4b4dbe29f62e79868570e9b4b93bda6ce5570c4d4a638c"), ("1f0c9a78505c7c4d4ac80582424c702fffe973d27efbe3ea9442a53f15713bca", "13da278a12cfce92f40f0db371b6d8a57801cdf19060e7037a648d8b77af1ff8", "13ce612d4c1565ac11b008feb535eaad9f4c7fbb69d59c94048a18734dff20cd", "1b4473fb6c85d6468106a4e4fcfc9d7ff0cbd6246c4d13eba2f232926b59617a"), ("2d30307da5f8c6a5ceb345d0ba7f029cd58c884df2a97b6dcdd252d960f0537a", "1a90ec1e1a7a09f6f2e4ffafcf588df13d4d45edda5dd02f5404fd75c1a10c50", "1400ad67844dd159eda5cc68f1e5039710d2da1b72247329c3255189848b5c93", "243a201ebea3c7a112fb8a40749ebdb1cd95648f5350111f7ea00e67804ab094"), ("17bab036742baa4693d22a1ed4a7f654f910a97baee226ef1c44672a47367976", "1110516987a3681a5c89d8d6fe76c9d5707a665e5d4531b5720ced25fe163f40", "1b8d8f2f8ee294ec00178f5c4f81efa6764d18e9fb160d4dd91aab9e35983c83", "2bb02dc35c6b239ce0e036e6479654c478e681223f7943b985265ff80d0bde08"), ("053d6c53acfda0c37fab357089a7094828cd1175e700f838c8b740e60471c0b3", "2b420d91f016993bd7ed42c40708f173ee895d39a3db482dfa7ae5960a0fafc9", "0d740f8d6f4cc19c1cf669cc218dc266f15a5fd82b4ed15eed77eda75b48038a", "212c31a31f70217698c89a368401b00ddad4b36aff3dafde9f8f53e37d42027d"), ("0d62fe815d19b10868bb166e9ae996976862d646a27c369a7be11d8928124e89", "05badacd5448f01583c898920b7589244b948d390556adfb28441328ce33f725", "297ca23c304c36a4275cf28568de75bf95a31a686c0519c60b94008803f77f75", "011b43f7500e8fc2671ecec88bb5788cd1ff7755863b06c01e7ae35dbf179317"), ("0d100562909d3bb9051dbc545808543e20cebc109b7468ed2b038c2ff08b8de6", "2a3575001cff0c7f493dd7e36fc016f42d5d26aee8cf003764662c96f5867654", "1cc727503dfdf3312e5a23758346e433b623224222b4d0c6c467ff0a1579d516", "053c627285cfb6adc45ab9596cb1bc0c3f0a9296d5684b7ce5db28e2908c38f0"), ("05c831b7769ff041cd5c0f5b2fcecbadd79f4576f1ecce45f74474734b303694", "21149a05046ae41509e3c2c6e23a98f950d417e5d8fcdd64063f4728d8ef1b72", "05116f0da014f24678cb55f98cfd53362b4df88364be823735c88f53c14c4412", "24910e1e37547c8384cd79290572ec8bf2b00b9d3633fd04b60125e7a975c1e9"), ("2f5945eb760a64b8146664cc3f4550fab75c1b2eb037eea0ec1cfddcd5b2287d", "0d9ff9538288020dd6402b81cf23de9e40743a22b70bea69fc234bbe47c39184", "1e692743678469307a85567c324f67b0cc86830d6bde3a5fc1410c83fed301c5", "25f84129368171420d3383bede5e7e7ac8b6667bdd1c7a9e2e92290aca6dbae2"), ("29429478c017c5005c6f36e50a4516c73fef35d39b0cff320b952b6016044897", "005c21d9defd2cd5e56a4c699b202bacfe6b491d657551ee9c011d5f7435ded5", "09f6b2faed50f817ba49abbe7abfa090e423660e6492d309ffbd806ad1b6acd1", "128f0d59f6cac8bb4989f4d0bcafc15aaeeefd1eb176b60c9a6aa3157e7d3415"), ("0e5be82c881c7107bb0ecc596dbe005fe453d3952763281137cd25c2895514a6", "1b531e3118b500a424883d47b254f375c2571f7f4c23ba7bd847a28f1e8489a2", "0f40c21131cabb52462d49cabf5415cf57430893bbb2161eea6669de57115c85", "239e1cc8b81c5ad523ee88bd6c721baba10e46759d0a07011c7f32a89610ac6b"), ("2be4c1eb0df9aa5bafcab0ef4e4616c12e4835b161d57fba24fbde623150f9a5", "22e58e83fde7b1c4ff3dd6fde877810a267bd0d04c67769e885dec239b208482", "06a04c7f957047ba62c6d617c86601fde6fd4b4ad517a2a5bdfc2236fdf518b2", "11280a6abfb2fceca0cbb5700137efaab6c144d015947fdfca8a3f4a673a9d73"), ("10fe8df15dee383b86422346658105223fb60b3748a9257cb2c2391b66c710f5", "0a40dfb1a6a91820b2539ac70a6f9e9274c3b7a72a3e728f5208ba73d3908c52", "0775e20e8b8140800a3ecd1f07ed18566f5f091d711b5447e84fb775fcb4a931", "2dc94d41b3beebc8176c6bfa2313ee7799599eac05cecf100a6df6e4ba8220c6"), ("13808c9e1f7264e130447c414c84c6ee7d57667ec19f5e2fcb925ac0f0d2aee7", "1cab45df51d0d41c15bc153d0a2efa67f04e308c037034fdd47dd79e30e6896c", "2c4daf38941419c0fbd3b4a4fff9b5699e0d41d31d4441b2d802d70e20cb5a4c", "2abb7b9cae52453e888af81e33038c5d8e0489d4df71102d096f4ec5c4d77075"), ("22fa43365b9f6c0649ab2ea54424b4843882c8218f7308483e448ba93b60bb38", "1386fe63e4b491a614609aebef69e7b016a2ee739d492c1fedbc25263bbe9e67", "09844f9336b927f96b3bd75538849ea0cdc2e761afba02f6b3d3e8dc1f822a5a", "129e2f970a6d9e59baa632cd21ebbf39a5fa817124fa11bfa9b84b9478c73878"), ("0f946f3753e0835bfdcb89de5f37bb752ec6d14bc41157b3683e7c3746bb0d86", "2fe2176a55391af810081de3eb85460c58321f554ece8edb34abdbde3eda1ce2", "1289906749a70513f1306e75bfeecbf0bab58e0959868dd7221f9d9909cd3fdb", "120394288fe886cb26707bf3cf6d224b9b5bffe492434bfb07e0f88881ccffb8"), ("288ac3b902955bf1b3ca58c31d36b26aa166b00f53f4cf6f1ab8bcd3eb9215f5", "2d468866e4d6c86365dd5c4c980a3fc4fb2f43e8f33f0a4e32c585f3de9aa7e0", "0f5b17cf2c947b9fa50f9a16c58d5239cf511ce357b3b78ff56b878ed9d27bef", "1dbf7cbab2b88655c47632e48972afbd82345bbc51135a8a1819fc7a10a2aac8"), ("17703a472afb6a54d537b3d76e2e28cf6ad8f5193f8e95a5a184dbe9258901a6", "13519f6e747548cb605750422569349e8490c735ebc6a83fc29a73f4028d656c", "1b921d2c910bf5dc32a8401b6b76a1627ee9d19b65a888603b43a80bf2ce7b78", "05a080c3537eb8d4f0e19c75ed5f5ec0a88d876f67d3ce2a9acf6e1f1682b523"), ("23b72dc97a66f8e4bd60b419d79208c22a5b0a07f95d63c1330336698314f7d3", "0969a1e8f42b23b291a7a2844e8ef33d24376a2a26c427036b274080a967ea0c", "068d284b4c68a92ba1e9f34bf050af4503a8ead82ce047bb7bec466a6dde6ecf", "2a2600ecda57f7c570c1bc073b8b13cb70d316c3828708fc30f96531baa132e5"), ("2c97967b0e87475944d506e2c13df829934596947babeb0788807a6decb57fa0", "295a80238e052f88572124b11027d6c65e66740f61f3166201337411795e42c2", "1528d3eb3685d02407c496a65bd15535cc70cda67b99aff9041b01bba65d26d7", "10c6e52f34a7e59c6323cae13f8f5e6bd90cd5cd3bfc9bedf53af066d17a4ce2"), ("1cb13ee61efdf43df86826fc649fb08aaf664c8c708ce907f644f839e628e8a7", "0cc3e376d607a49758aca02201791dac6c209934cb4856bcf1ab579d11fdc521", "194af25c8311aae5dab9cf97f939df1100bee5651913621dd9895aac1a0ba28a", "16083e894b31274645d14f29d21e73739183df32c2855e41ce2f182a9f7431fe"), ("0a6981941f1c58334563fcc32eb74311725c3f7dc8269ed91706c92f56b67cea", "140158f4b6465a3b92ccabed53162a3e1751b123513ace7edceda1389bd75b8c", "1b43038a16fcb7c0c90820d2d1f56fed66fd0e29726d2ea3d80ff55f840489d5", "2054fce0de6c13c141fa4862f8f5d7f7c7aad2136f1d381d1590ad32447a2bb1"), ("2c99c3be5aa8866428156e713e2d77a70d89229c33e1c3a6161c88a580a69eee", "16e6181aa4047bd6cddbbf7792b3f19df72439d32911f717436f647a2f270608", "256f89caa68b05d5bd7be1ee2a6859493dee9660a1973a17354993038dd9c043", "066177cc229b09e6ab22910badaa29ad6d9c9a6a38b0606ba26f3da70b76ffb5"), ("228f622d19f8d4b5ea11b9e0fb0a44b1ff35614d7db4e35c2ec66d295232898d", "2cef680a69f8169c4a78f6eaa0b42df9661e79da4dfe891960844f5ecbb48c31", "2c76d8d97929f2fc3dc1e9e1bd74baa4870ed77a3314f28d4dc598f8d28af16c", "111832ba0c14988dfcb404d80a0de0bc4f90f94f5e4e21ed476230ba5bf72539"), ("16b406455a9554abc2c44dc1d02accab307d5fc6526707b8aed62c9154a774e6", "06194c7186bea291b760fac85052b518090d72dca40d5e0728aa2547b87bd977", "22ecbdc9376574e9fff3ed8c5dfee83a98c7cd0e0b1fa603b3bc7ebfc184bc9d", "0eb35f4fa24a271d955641b1c2fa34bdc4423d16287dedc71eb44ba7a5c27778"), ("28239b5f11570cc64f62d4f4833c7d4330a3cbfed1d59c6bf15df422b33e5178", "059a9a161e55ce207725e4703623e42ce759859146d0a9714a96cf056bd4a302", "030c43a397497105753ba88f0c1ac48666898a59e8566ab427cfbd26e0c9c4ff", "0ca0a760caa53fe9e921612f0d355ae993988c7d4992eaaa45d3d8d57a6ce917"), ("299c1c8eeba3536ee7103117991cc88e37026ab5ca603a5a202f0d8507ef8a5d", "136ebe8782985b7cb368e294bda15223062d6a8fb5e095dda9b0e2aae5e2550a", "28b7d1a5018ccbda8220f0fbf75fb89403d2e597103fa9293f03206360c50cc5", "1df2cee86780e09bc600b1abed3c152afac617c35139f0a0b6ec8f33cc65decb"), ("09648c7e9ceeb9e102c96adc8c7f7279c03b382adf8b3251af9e5ef810c58ff7", "0f9ac812b30ac7901dfe2fe9e1e6221a16ef9ffd7cec01fdb5d468fb867e86f8", "09b789cfe8b0e76eed19b34997462445db1ae648755784128ec8e65b64462e89", "0ea2cd7c0bc457c23b82e3a695ef209d58ef318d826e25cbbe49a3bd0f72a75c"), ("1262bcef7ee2f4b9835fb01a9e122b9055d37c4b7e8c9d28c1d45c8e581451b1", "1da47a5d28ae9c3893d6fa8872fa9415951694ca613c1215211607d5d8925973", "0ba0a535a794fbd7715c37c6989a886ac52d31b77762520d505f7067d4970dc5", "2ef01888baa8b9c074c0f0d39bd872127ebac4eab8c11eaac381f375ab49ce83"), ("165c133df980ab90ba4d7d4f54efe2e3b28a2be9f79c3e3feb2cb10a374bad0f", "16a318d10c3abd0235c4240cfb7e41b4f08a133d9137d086906d69816b7d0242", "13352aba0daad7cb14843ff4dc53cf31a9a165e501409a4c212822164abe7329", "21f066e08e57031aeda5ff7aa56db643c44895c16c93c9f8146760491c21a7b7"), ("1e19621e0b12ed006edee85bf6020d8c579e492f5b979b8db41f295aed9c4e81", "13da718d77d9efa364744729d44c8b6ea0d4f9fc8d57542e4e062ed5a8de4c9f", "0a8a04413c6ae0fded19c4dab3a6a8cfb1beecb66baf890f691d0067256dfcf9", "1e0028f34433db8076fcaac88d0ee305b3c37a2c343ae04bec38427172353e90"), ("25eef7582d63dc4a0286351e71c98111d64f1f18553634a8f24fe4cbc87b50b0", "0dfca2a4f65d9c041f3bfc915d9d4142f4f61f29712cc850f1001db513078441", "2fa4cfa29341614eaaabe782d296f1173fc7dd75d343df67bf12ead89792daf7", "1f5ff76cc0fad16aa8d44c0716636210d944fc4969de390f7583f9b4e998d220"), ("041ef823834a8dd7290e6b71c6c4e6db820f484363f341fd0fbe3bef4bd928f5", "079df08541dcf4941d9f4d610618f47781f481a12b2e12f207824336130a6d16", "0c7038850fcc50501490c9a6fed822d23851ebca819b23d45ca422c14b050b92", "2eaa16bf98f93f0e9be086a1a3c490aa548f781e58fe4d18f3118565168fbfb4"), ("01471f7de91fd8b5bffad80245cbc0c115bf7b2d28c0af57d9b0e447e600bdc2", "2af49efa24220c72cc9a9d75322854aef9d75c19ec14bbb213ee6e294fce9251", "097468ec5f171eda7289138a599e725305ba978ba49576150731b42166dd51b1", "20c231858f512f3081a2b414a5f1d88cbae5c4aba64cbf39a794f02ded030d75"), ("0e373904909824738ae1aa83c28a77788dc434a25f959e5ce3718fa431ccc585", "0f431ed68f39a7cbfc24d791f1622508a4944f47fbf70ad6f3e51b5774d6ff13", "09d1636b20524c3e22818ba98d0e3ecb082253375e1c7ac91ef93de2bd7ed218", "1d409e122f48b67443c5f9aba5605ff3e71aa59b6118e6fee786b5eb0f741fdc"), ("1e5fa172b8d1df940c7067a884b92753e5e4f5777dd7f64e6b71d8b446077879", "244acff016d2ddeb1433785ac71f9931d6a613f1f1a600e23b35c90bad487235", "3052ec8d8bca1f681a2346d099cbb755a5af58537577c698c66542441810301f", "257e2b4b0a2f46fa616304964408a582f5411c37f67d267619c5b1b631eb0f3d"), ("289f7787456e0ee7edbb586baa0a80997b96655189b5dd619bf07617e70aa4c3", "303b566725faf47852a2f335df77b857071ba03dd6df862c717cb88aed5cbe8c", "24d89b967b6cf2feaa173782a049c17a26e8db62151979bfde889a3416622208", "1e70851142428240771856ffe85c9f2e6435922747d38940bb9f3f84c991349b"), ("0e710c69de9257304d34e768725a23af27d5bf8742687cd8735860c36c47a1ea", "23019de2deaca7d05e782f22f0c76f7416054e0d722cf536cf7f3171472e0b97", "16268156d9b940b1f94a35bff41475e593aaec902f1871ecb42e502d450e1a52", "22ba0b849d043bae89194ba6741858b6f1bea6e91a14377d18b2ebd9f56483b1"), ("1ec7a62197124751f417863d0d53ce3af90b3f4b4c669188a5c39ca17116780a", "2d966b0951173a8bd215526eba45922dbcf6bb50d82f862156f0e2b66c39740e", "086ebcc8d410339afa0abdd6934437f67e8550d9ebd96dc404d1a8dff30bafba", "2ae0f64e1aa85986fd1238590f5a1aaf6c19ab01055dcdf8be36451759eca475"), ("266cb2484ca2cc963001582c03aa3c97ae462c553f34ecf197612ff6266e4182", "0d16340b0e73a1d3939ae4711e3d0de658f4c1c2541dc2f11339ed996b5c49de", "0140833df71b86faf3e8824216855d82b90685d9d2013df39b67d0df3a434392", "20f7d32fca89d089903fe642529e4a23e66fb62b0fc0629dfe7f28cebf107d1a"), ("24e2bf654226244e7325ae65c5ee7bf07bb0e46ff8b954a1688d0d6c6882253b", "2405fe48ca776aa3bdc84a58ff16b9742eadcaf90a1eebb20c711fef99469b24", "14c6f8ee8d6c1905fb0fe1155de6aa59f115da49356e73d65c9fdb392ea0f3fd", "1301eed23c925f0b7384fdd2d938a193f9a283423dd9ef7726ad9bbc756e153f"), ("07fc5ba122b7b40d64e2e7c67797a63b71ae3951d41dc2e358fe5d37bd604379", "2a7835c532662dded7a2ab86e2278b1d4385cdd8b8eb79424d95d04e7614c44f", "28a321d728b724026b5ebfc82ec10a6470146a8be8911b66a17c3eed2fc3fdb5", "161dafe8555a5e43d27bec4ea5cbe3a84864a5bc7a3ad1648881dd0adab5a16e"), ("0d2d6c361d9ddf9b21eb3c290ffb2ccd959a5b9e9245078507e3f01de59f633e", "12e0b7b06ef276717e75511b02db79990da2942f18b3b2c8646087165569e2ac", "169ae8306a1af295678efdd3ad7372c3d05052fdf94ded5fced051bff374a4a4", "105d4f00b736b608dacd4ae5b07437ff70f4d374dc73181d08aa4ef6ac5cae8e"), ("0e925b55796ac4f09e4eb194fa86be9f0453eb1ffe9ec933d4c7fd0252dc2b7e", "1f7da3503af45a72ccc56bf4a5979848fd877801b4b839deddec4f6d8ea0591d", "29db61180ef9dfe248137e87092255dd44ba21a51c9e2b0183704917fac42c74", "0b1be258a65da77cbe4da9e47abf007c13c3b7f678337e3dd5e65be26d2bb9d8"), ("0bd7faa063f64b5250d19cc5eacab9c4e236f8813b9c6f7abc516b90b6525591", "08ff04d7e6bde21d6d834333a2c495df58d979cb1186f538cab232664763c69f", "00b9043ee2cb640c3acf403185953c6a917b39e73727d7f105a12f661794fdf8", "219ce00c1b45bafc35e2dbb957264c344804bf3e793f3e61ef35bf82a446a64a"), ("00cac289d107b21ae705bfd6fbed1c389ceb868147d2e81db32f1e7fe1bd19ed", "15806b84abf719cd6ff6ef5ee2d5b2e29a000506306febb48a9b39ba858f48dd", "222b176ff74c2425a87b954bd2a84d8ac64380ef77669972b612bfe668547cb9", "23d2f8b04da01fac4e805756de9cb8ca0afdc151d1b42d54fb7f22d3df653f82"), ("025258a69abc16f4de5215c5657ed5645c161a553b4bf4626ea7cfe8d45c134c", "00a1df27d6a3e82c46a3a6e80a203f7d40a1ce587fdd74234cbd8e1a97441bf4", "2a31bffc87dbfc844a278d420a2ec563f6b614152b102db2744b23252c6b5839", "047895d58d328aadbf9beddaf426263c51d1eb4d862951d49643d787994c3ba4"), ("255dff912a6e7c0b483cf21d0de72afcfa515f66233242604a9aa4eaebec01e5", "10fcd729b91a0469f76da38d861b57f81c4c054b0f2fa790aa9ae9e35e25f068", "2a8040f1880e2c71be91a4ad6637a8e6f88da3e0a3906b64f3c3a74dbc21c08d", "1a1e490395f7c7dd86c065e03dcf95264f0b8b1be4752305e0051757e271597b"), ("09a2fe3d67affd8ef8a2cb83322244fb47d1832ece5b2cd53ea30c9310034e2f", "1ddeff94224cb500bfe6a97ab311df1eef3d0716c90c8cfd03ad839e15050524", "0b0ec592944d49e7e9f6a34b764fb50251132b904987f6bce1e2d9840118bff4", "1af5b8b406f3df27d7cc5f8f6473c2ab934aa959ffe9e4b5c927f2bfa1366f97"), ("2b83f66dfaf6163c3a83c3291efb56fec19e0abe595db6a1b6113cfa60817b99", "21b348b5b39aac75dc03d8c6a8561cd31511177d0063fcb009417e9a185077bf", "1e66e844edb9272ea6ee8ffdaec5cc0fd033f20f77b9692eecaf276b19411222", "0467568338e8e0af5f226471f529896a868c31a8dc47d1c65430652a4da4299e"), ("21fb6ee8c83e8f614757f401cc707b20f96d62743b0dcec46cb3007fbd716fb3", "085372c59abf0cb86c1d58ebbaec076c5b92e9a7a74a0b624bfeac5303473f00", "00b3c154eed28a9e9de571dcc2dc905a91d2bc560fa42d7eea872bc1b0ad951e", "17c8f5a0810fe28573fc80b4c897ef8b384e105feddfacd1901a1172e21358ed"), ("0a36f8126b328c34c3fb5e2deac02b3865fb4599f5796e268921b88a8d332c4c", "14a4c4e9756daec3dfc39d62dee84f3946bec98fe53cef0ee350fe5c67a5830f", "2637e1c389052133a6fe50a46b89733b5bc74e289a0a389bd93fe1796b435f66", "0912e64011097a29633d3f356035136f00e688dda56ba43559539714485c690b"), ("17a3639a1f6cae6c8214a3ae77391916e5864c63c6cfac37a14b00030281d984", "2283086f2e867604bc4f4f89fb74175a8bacd15eae6cec59636172cd4a207387", "25009a4a99caa76ae449b1ce21eb819209f7850b0cf6772554d61153b9ddd731", "2f84c540df19cbbd3ed2cc1bd40e638e4d3c58940d3cf969eb01895992b34b47"), ("1de6292491ab3cdc78a7738c6af68b7919163f5faa47390a95df68dacc784d55", "2abf74ddda97c62ee326e74d4a244bd0f97005dfe3426d9dca94eae98eb2be04", "239938343bfaa98d6e3f9b4781cdc9125c15d708218f2a83e413bfdc367aa9b3", "21fc050130fda2f0b2475dda49cd9fce3c06c8bcbc5d4055eea693cecc85716b"), ("027a904d0d08de1dd3425fea1398d0095a5ec982b0c1483c0d1ed35f49118612", "19b786fc25e310c559507138e6b0e174034625d4eac17790fb7a6318ac0c3e7f", "1ece2146688a70b2be838fe6a45d3a77c0490cb3ffb1af5f7e6353daf5070f95", "304ac74b738dee93b156b8604e67ccaedbdec01a562daac0412be7b8d064d38e"), ("2216fe3fda94ba92a9c41ac9b71d6c2f3367b15c4e625a539de1f1fa75ffce7a", "1a247d3e4745f010c1ee43669ad7e5129251184de3aa90819f4c465f49bb393a", "260cad7ec470563bcabc156314d4d2e32776c831dfe4a75d20fbe97aac7a8e4b", "1c0663e85df5162e3f44e7e016df0ec35f765d445257c86cac159e5606894791"), ("07116988ffa59b86c17696972ff0910b85333740a5c040197a7de7a2ef6cfeb4", "2be916b76d2ba7a555444ba49ad616130189f45ab9eccd3e26c9432478d47e9d", "26391978b407248c5858f1723e34faee4ed19d1589b6d0b5c52baa1122b60d4e", "04dd425fb096bde6365cabb0aa0e377770db3f7d3e50ce5baab57ae8060854d5"), ("2fdde5bf353368604ce9d163ba1a16a86a2b03a05e77ff76063cadef67ca508e", "002d55241ae4a8f33a3be27cb70f5cf2358170a2221505f3ff2677be879305f6", "17be67b0473b89e385102174a15880b10f8489e34c0cddad37eb52b7156bdc44", "131b1c61a75f39f242e5ad0205e354dfe9786eeb9589a9facfd901c9a00074ee"), ("1457f68ee90269da8eec1e448e2cb3cf5348e726beca24649ee6cf3f6b64b8a1", "1f5276dd19b7a3e3e7eea5115cc3235a0c76dea577b6cfd12c131c84c5c0f567", "00916ea659c2c3405484110b1b8ea5c736b899da4df98c7cb22aa3b1e290271a", "185e0f4f38502a6231e1c2761d4a321c980f828335b8f3e88697b8d981dc6766"), ("248c5bad93cf30f9995126c82ff32adbd7f913ad18b36cb86c70fad6d0990aee", "231017226640f3c23c66036025975e9501a9982e5aff4c49c82ffd23973b228b", "29d9e3fd16ac4023f42b00260d4ef71a6d0247777e78e7390db45ea975013c08", "245fd82efafb6a10837eb3193a7b567e2f876283453349e79e0f187043835bac"), ("06647fcf956e8fb53c62e6be3d90085397db9e996b4acda8e9c1cb5eeb12af19", "2778fff9d4d4809300de41877d46fd472af906cb175186fd42df1463908591b3", "2e834fb3722c970a610571c438e517ff65e72c77eb9d2f1c107ee1c5e1b370b1", "01d8febeaaa587b66b7444615abf6a783a1757395b8a4158ddc165b23898f612"), ("099f287df7a2b1d0c47c5537adad3e3a4afeb67141b734a03a7b6e74135631a4", "25f5b6e1f49e426b0bf578ffc8f5d17425925a34e887e03e5c9e48b55d6b7ca4", "1c2976cddf35a369078c5d6fbc40fa111b46e0e9c834d46459a8768b3bab48d5", "02095a717bd4daf4c24b9ab4635e2925ad7a6bcd8255108eb84158084eef38ce"), ("0b7d7c49bc1aac839477ea2b8496bfeb262f2299a62473ba50867599373d69aa", "0e060a182cd7b53be6c0fe55e81962890d5153bd801a068399349524205398be", "05b72e9827b2a7f6e34cc3f6e165e9b6448d4b1fbadcf96114cc5677ae1a5ecd", "1f9c73308a10dbd852648c3c4c960907cfda03e89879b9f416b6af4dc878e54e"), ("0b71afa68fce55e0bd80a35e0d29f1c1cfadec05490beea90492a2b13e178bec", "193795613dd235707cd949d7c5e42f07091eb0bf7714898543e6387ff969ac43", "142290add85d35a3364ada477dc842c8ee37eb62b2a9e01621c855fa0a32b6bd", "26fa316214691e3cdc5e21a6992062af26d1c001a17351bc0a940a6be80ac728"), ("11093acfd09f39e99711eff010c7477c7b129136fec866981ab01150892158e8", "2aa5776e7788bd5e8f56e71ed56370a3778b069da9de1548ebe9f53bc63a1f33", "129c53660b2be842d0ab34140ee275c2a02be2a8f359d676f2b8bae49c5dadfb", "2d6b3d13bfce845258444cb1a4900d3b5d1d6a4c53e20376d9ca6e0ea0a17d7e"), ("10b4d7c07ed64a2e1b1392af9d11f81364f93f2fd2fdcedd9e48df6d3bd4988a", "2da3db4be9a1ff15b4ea751c3a1f4bdacffbaab01d147433322ba66b591670f9", "294ce351530262413b25b7d4e7dd43db57c5d6188d106408fed881795f6d69ab", "2632cdc918a10bf3e68f23f0d93b7276c27af49408ecdaceb2683c69e1eb7454"), ("12634d32fc691b316c445682da3ba5faea9981ff48b0cf4ad294a611a66c6205", "0a73bdb6943c8c0abbb86cb2159f2bccc80963bca885925a65ef9b92d781a9db", "10d912800e131ba281e2f1288710717d56d0e4e7b268af1f9b764d40691fc29a", "139d20b0dbbd70a0298902f57c459699dffeb9d81bb86b1b34a5949071b81cbb"), ("0e7a6d5958288328573d2a086d8f8050b636c0f70bddef65b598d35007fece39", "18a56723b3f9f266874a064e66b7c92ebe35d172238b897bc8d3866fcede1636", "08c65351d630e4f19be6d4174c4d072602dfb3fe69eba889dc95bf56e5b068c7", "0fcb72915cc7c58f9ccbd2c3339a3e20850d0b73425f352175581e759bfea992"), ("08b9ca7ed249451a6d9886f36fa890af997edf39abce420aa12e7c6755f0faf8", "0b8837e963932839b27d38ba4a613ba6425163ab9294a1520ee2b151d4727dcf", "1872a92a8bdb2abb345a72edabc72fd7463e3dacaa0dfd4507b9d0373a859efd", "13d0d1e163838fcc51c53f6081d7005e89e6013c65231ed164e820613699be7a"), ("1efd5fa4001200189e47e3947d90f01a892de3cacaf270388ebfb5526f7ee8f1", "08886df1d87e7b467b77232097a2eb614a2c7fffaf211f3f2bdbff15a2f70081", "22d61fda858a1fcd8b3e2ac7dcbc8d2ef676a92951bc1461b25fd6939010f3e2", "0c7eadcbc8c546962edcaa70b474daae6104154a7704a7ae7dd39ccdda94e04e"), ("22a31f2ae1da6d7dae6fefbc606e34189ff41550284a519f1f9e750a01358210", "0b6e8f8acc109e23b81ebde74ebb534d38b4868d79f9705aee8e93ab6e761009", "2e042dd06a51907d9bdac015dfb5b077ec4fc5981e127858e72a01ec722f3b2b", "0466b1413ac15e75d43950a57f9da8cb2e39277f71e6bf864cccc40ea51dd5f1"), ("2d840a85135d9a1c9927ac59e3e3abdd8ddc140de4a6f35636c8fff907865329", "13bc3afcc49f328789bf1dd0bcffe2e69a53942e39a333d9a90e768b1666f552", "247a43a6cf23684b31de5e55da10ba52a117f46039930e9d8be26f394c66016c", "250606b70d175343628315241b88f91e66cefe61305555e72b4192ffa0edf1ed"), ("2b8faf0bbe4f51dfe15f052b322af96bf192291cefbac63ac1362a56089f81af", "29d6f8292cdbc99fae459ca4a2b1679125555370e664358b07d37ff848042197", "22b44ffabc85868de66e9a07b3c3b7336b9a1beb15f6d13cf7b8078567b8f0f5", "17c6e086277063f9907292398f0eee4a7ff141703235f6c6599a13cdb2679a5b"), ("2e00f3a00e68c81a6b8199b06e076bc3d0c7815ce0d918d6d108e1ac53957367", "178f46cc961bca87f978e1dac1a19a5a170f17358eb446c8feb58d710bc02aff", "1ca69086c5c6770241af706ee00087c55cbeef5d3f643319a3a1d97be9101cf9", "2969ff947e7f9a30f66a9015f705ccd7b0c834f353f513aea23e10bd875a04e1"), ("304405063113d33abc7ba8e486bbab26a8fa6387cc1f0459556aac8d4ad3a11f", "09a0cc93ce79310b3aa67cd01dbd265ffa6f9463730a48cf20a6f7186af3136d", "2085cded473090951bdc3e48618b6e69b637142e349428dd7351b0d262ea2f64", "0636c66904fe1972190428c56c1b7e8acd2a74fa731905b1da6db3f2d7699dad"), ("1eb2b800514efb25e80c97353f1d464ababcaccffd87ca3251879de4ea728c34", "2f62b26f89a5d91af0ef8be55955d877c9440aee2fa27445e4ba064faeb8db05", "2a56e2deae17eb927d37614f49a47cc2c4dac600c33c2d76ced483835e348402", "0e5edcf6faeb17edd21453e4f83cdbe357fb4f85812b3d6a3c0524af36b561b2"), ("08d530a31af2c3b8ab9bfa0dd1f89fe10c7484247ebd7cd909103c05b9af3ad8", "2770713dd99457e005ea7efd90aeeabce7c540216f4305bcee9a774d082eb0ba", "0b800d5933319dc4293f98ffca143af1f75eae359dd037c6bda35a2f8f580da5", "22eef39a05ddb53e08e746f903293bc137d8ae20a6b246d56acbdb33c2ab2f9f"), ("17dde8cade310f4fcd24d3e0c75e5ab1182a32fa720131acb3d2c35505a4d77f", "2d6fc6ed7cc1f03aa3598bc6d7b677c7118e04c352e8c58e0a48e385f5655071", "0bf3a81e63065c65fc64e7737363dfa47ab04e9d3ede2248be72e9c6d7a94218", "0e7f13724456e58934d45f0258995b1cc934a352d02703f0cd0226486f5b4812"), ("032c40dd1077a3676a3910fb13d2e30c26bd1a618204e9025666e89c83c2784c", "1ef1bfaa6c65695ef4e012b7a568c7886e2aa8d540520550f8e928494f7f38b3", "14284ef8af628466f7b3a4899ae3eef2d39901544fdc27ecdb8af6ec12eed1b1", "0f307d29ae2e8b6a082c5d683dbae8aa9e804febdcdd399a1570ff6d25774662"), ("1b429f77b5614677ac08d643da4b13b240e3a8bee2dd28b5f703416ef91da396", "2f3378aba0158cf50602ecb97106829a30ca2b73cf2091fa7b782114ee1baa15", "2593f5235029c9380eb4399c751033e1113f749cd610e4b37c12d400f89a6d41", "19e8008c3e02457d32fac6d982ecaf28b7b008910c4af28f669e8a32343918cf"), ("22a85d204258c7d30fb18a3040befb4f683c7097f303157a86f6c50b8450e28c", "2505ddf31acdba4ee38e4de2ffbb75565528af256755bdbb452910a96c5ba2ae", "132c87718794a6b4de3f62a016053070b7daed4b66964fc9df32cd6b219cb324", "04948d6809622debadb6622bfc238a68a6a28a9752f435921230b17377ed9770"), ("08ddf812859020b04c8e2d490674859e6e36eac408e5f7b67d443ad56d122a6b", "109b545ac3e0f8d35f4de0524b990a90dc0d879246dfc85bb22553573ed471de", "035d0d4ec58c3e73ce0e0b80d1dd631842ce1ef796ee64082e6e5737f26ba5b7", "2bc7c5eb811731910c6fff388f2c2d4435591c16bc05db17325275fb0ad7a972"), ("0c8f729edd49d7a6eb62acdeb4baf435b2b47975f5030bae4d087c35c721610a", "04e2a0e6494f186fde5afc6e792787c13937decfb3d584da10901d76ed1639ec", "0144bfa9979afc111399b4aa18375ce5bad557c4366553a52a482fc79cb2f44d", "2b020b24becbfbd9ea5ce8ae89bcef5c316cc2ff0ed52143f66e6d462e76e2a9"), ("061f387a47aed8e85f6e24b2c385afdb188cc00068e9373d34ff64dd99d0b50e", "195832e9f7058abb24a7e88eb172f18053edf636aec841a48059bc9e6918f00d", "1c3825ba4d337948ccee9da75fbca66f144d089dd88a27bf7c59f27ad4a0df06", "1fd082cb3808625cfbc4985baf29045266f6cb23e30f2af8a9e6c3252b5c5f16"), ("20e32348d697763ffd208e5703c4a0e665bc980cecc62b7192d3e966f6bb2e57", "27bb209360463641f31be9432615ca9f4590756dc9f6f31cf7267d8b57d6ade0", "2a7e03c6a9e497e3a1e0c51d7b9e522e03f817c52b9ff8a13188b038dec47bd5", "0459e57dcd7f547f07669e5cb1c29c000cc1ab12d324e1afc7da7b34825c26d3"), ("25dec4c0483968753777a3c2107e815f92559cd7a3d6be86b7208b44fcb9f533", "07ab6ed44935062c4cc3ba7f1cd85c7a3f45a1d342f73d2932dc191b32a97a5a", "2ec135ae4382ffe26f76b777e0334fb58c26c71975dc7dfa3ff1978ed314fd29", "0e44fb3e42ee625f4aabb3d48582b6ef29c0e6afa03f39fa393541c00e7b35ab"), ("00303d1debc3cfa032095bc6e43fea1e0d232cce2e11752e67e7477916601191", "1e1971572878bb0e28bdf748ee57ac7c13e25ead13d51a871d5a34f4f8323363", "01e84debf0c58077d0edafcb9053bbaf30725332de72f61baa4cc8de96c25274", "300451aa972ed0e6c56ea374a64398601d878bb883fa6e057dbb124d1e86b154"), ("0ac8230c14bb2b1337daf228e5ac4157c435382bdee9a7121dbc2d5c7986d8c6", "26dc172484d9b813ec2e99e64b20911bbab056c7f90aec0258c1fd5f5f9ca3f1", "1c89fcaed646c22d0a28d848c3092bc842242d32cc4f6b4a2173a0df76589d73", "2a709302558df97012c5f9a670c51884408a62b6ed465330e0bda7929291e357"), ("13e6478e1ab167085aff914b44adcc30e3d38e39e75d0dc74d36e7e60fd112b0", "01daa96136643c1b1fdd4bd739ab27dfa302fdd4d40813f0ff5732bc4ab564e8", "15ef3631f1ebfd7b4f48aa3ab92e06656180f599853dc0c8e4e6fa2757ca347a", "06a180b25cd775b26220c757895fb97a91a97ef61765f1a12e04d080243a7155"), ("1df2990412a6f036e632d54f0d2e38da1e5baa3fdfe50759e98f618953c5b4c6", "2180276382a3f90b5ac66057c3b16cb92921e690d2ad5290dd37712ce25979e2", "29621b8fec22cbb5339462ea1fc8be068cd93f753f8006ab445b6d5b532b5ca6", "106bcb6e67b179abb9163ef1a36b1c6d20f4abee8036bf999cbc7f9c137bc1a4"), ("080acbcea5b0d4936ecc784669e0840c0dab67a0d6674a158637c3211176e7c8", "275c5201d64a23c92b376f8c795f5d06f594876cd6c9c4da2bf17df1beac668d", "2193ccb12a2fe45d5913a89d090de747c4fbf085370a938a0046a7582d9b9984", "0fa4751ba1ed9fead424fe68f1a3b1695a27deecc5a8471d7f291e0560e98102"), ("24708045ff67a7b42c0ca5255a1e6ef980ab2458211c37df1425897517810994", "13504a5e45093108cfb7b3c2c110d677cc4f1a6075b65477736a8165de364fa5", "0b9feb01128e12e9e9407d5edcc75fd64603549c316455e30804a262e2d37b15", "256f5f1c96791e544cdf9500d86e745cd860ef8e10445b3a2a05e83685720d1d"), ("2b278aefe8e75b53cfcdb4bb0da3276e886ced6ff2bdcf221962ecaeb049a155", "0c9eef92a5085c0f600818edc463de884a3eef9ede5b5dad450442d91af086ae", "2ceacfca3987d72ce815d99e5c081b7893b6ddd09de43069c6361be55cc50711", "267f48eed51b87bf6a63838c1385dddc95027825f7c87686f1b45335fcf94894"), ("28102d0c8f73777a30c583f559a93e4dfbc963edb905a37a4e77a7127184fcb1", "2a8f277b2f232b2de788e1ce5749b44afa5e03f021a50447f56ebe3f1f56fbe0", "25c8a49714232a42fb004da3a34c36d8cbd6c9c8bcc24a0e195689093f398545", "1416f38aa0e7017ebb19e29de4db9daec13fa24178977710a84866d4f192bbbf"), ("1c6815e52b41110b16d2a9a2f3d332a3ad3707a6448bba2d51d2b8ac3796f164", "1b4f9e0666251d61e24d63c97746874e7874cfaf41645af15d7b30f2fd8afe57", "1338ef4907d41f90bdd4eabba82eb81bdd72f30281e9fdfd1597685f7a8942a1", "150f59aa86370d8deb69ec56d42548854a5c32ba545c34da048c8afe3ffe8719"), ("0c492c4d42c28fa9f8ef0da1d21921d3128e4ed2eb7e5ce5c35e3043e56e7b3c", "2513f07282c853923a69fa6077d8a5901694462890734897870c473578e1c25a", "054555c5bdbfa7906db1739e3f5cfafff51a81277db85b4cdb124be3ca76800f", "05290de5821bcc05af30d14994bc4f4a24f38e16c3fcf81354de92481ed01458"), ("11e6cefe4a97ab494338a5ba8e718c9d53231d2a59def1702aaccbca0f7ff1aa", "14529e99a61d81babb0d3ae6a6a86d24ece040a6d6644032bb536acecc3e114b", "11f75cde35418dc6ddacf273abaa864686de8469c1a2bb0a6c255b699e945889", "26c88632373435684ad8fd425b04b66a85271a423ddff78e7a7a953bdf2d8d4f"), ("2d1670ce1288119b51f533737075ad48d1c5dd770c0feb83b4e2fcddaa85aaf3", "1748903015885f09b4ce8514f2fe72ca3c283b6c16ea8a2ee841e639f1d1a0d7", "295a3f1b84af0372e74261fac890c49693d610b59fbf965f46c00fe4fab0032d", "099510d7a0522d3a326f977cde16a891b824c75496194c41bb4f956cebd43b5c"), ("249f94c8bdab1558b7aaeeb5c2f5782052b56d67530c85518da045135a70a65c", "09968f16b582f2a85350c39352bc370f00e3e2c17b8adb8156635cd63c3fc3fd", "0aad2ec55edbe5abb04526d23980550b60ccb02f12497cc080a9986be4d75e65", "1d70d0abb93cf49bac5476780612e05c69ea3fc6d6fb0d97433a825006e1beac"), ("27f8b5e668b1807e939332caa00d5c774d22b842452c4c352474e9d529500b14", "24d1b1ab2ca4e46ca8f4f5b1dcc0b539cb2b47221dbc20942a2934bf7bea42a7", "1b1ebea29f8e3d9119ea75a4b288553faf50e5fd3d5da658d08d56095017991a", "1fcaa57c02f8041a98781a65b4b749d5cf608219a2c1d8f7e5fb9538544fdd50"), ("2ba69619a96f8f01606ed16a0149300a6b32e5c75cc5d96ec20d1f9fc5943390", "1d26ccaecb781ce8367ee9efa6d1e24a434a71c8118ca86d7a28120f4af9cba8", "2716a8525c7bb6eac4fd2e0515e930d93ecdfadc9afe514c8ebabe5f37c1b400", "1caa7dfc7c666ece5ef969e1c36fdbac9b36172aa068cd80ec05f9583b2c9705"), ("204f3734736b231124ba846a97cf53b678c6ca07fe118e802425aea761ac9c97", "22f77922ca1a538b490f7fb0effd95978bb3fc45270b12d5fe233f5fb0c96fea", "2788ca2214e502cb9264d63495a1dae40bbd5b057ebfa849766222280a52ef9d", "1004c9a851a28cffcbec1e58384e82f9356a4dc275022ee371d2ab0131702473"), ("043ec60c2563bb07f9e1164eb24d4f96f5ed04aedb71689b9f15e3c393b381c6", "1d7e875452fc9444607b0645d6c8d06700c62c1f5191b97f15e6da3812d69422", "0d1c7cb8133fab3021f5c69c4cd8caa6e4555d55558d4dcbca38dd20cae1d365", "22d83b8f2900c95f3298b85241c663c954741d1bf6d1d039d17362e14d3d816d"), ("060bc916c96b0ff1741bdffa9e1271efe3b1aa945ff220e1f29372ee5bae9a29", "2db13887a06664ade2cd95f1def5e1300e2277c49b602f2b624c5f69a253e756", "2d256e010b9cc0c09e82a985cc37f437891578889b6ea0b362cb1d6175fac71a", "2fa2f87b5799a7f3e3d575b0c19f45a07ca6f526ddadac731b9a94f708fa116f"), ("2c06adc9f13ae1720b7a4577b9d414e81e568acf6eb14c08ff8c702ebfd21935", "06b5e44acbdd7a5c6f90165152153fc9833a91cfd38c5f9b17d7b2d8ce53b22b", "167c190936ddd14ab26be00d4f392480f5d107fc9c552d9f9b6f5401c4153170", "14ba60e29ab7f0a24ab6a03624aeaaf0f30b15d497f4bfd181cb1f687bbc80c6"), ("095bc919abf175502ca97790320bedcb53f7cfdc6d6e007949e8cc1c4b06a5a7", "0517641a1353cdfc6c335c474e9a44497d2b740b6e83c7a18f8954053f809690", "18f4622577030fbbe93f7003e2e890f2be7ed6f501724b4156fd8e6652c8196a", "2137ba86a951bdb7c0cd948c2d7e0fd85641ff6d427f861da0ba4e85991bb138"), ("0cb595d1aef419d193d4f283f19844cbc42ddf76ebc056ffee65edaf6257c408", "2106d955c4e88f6a939cc043b33e9c75dd85df2154c2a0efbf68adb400a1b005", "050f7f7a69fda00d24310f032bf283e9b7caf912fb5a16bcdb1b31bef7d25ccf", "02b5b01e5d95640664d179d1fa1fdc29c756a654f3ef36dded6d91c182a60c6e"), ("1e8a1b2849da25c11a9cdf57422666dd5b976eeb4107f3bed3dd40867f43ac5d", "0d9b34d7bafca3c113c34c0e6eef41d8f487a4056c8e68287cbb8361f3d25382", "2c32ebbbaa9e2fe9b294a9d630ab579bd62ec759446fc8d5151d090e3aae4920", "1075dda8130673df345f6219bf7de3630e0dc3f3160c94539dbc140976d19a37"), ("2563d8bfb0852f4c5813d8ddc90e0208358cbf95f4e01df154ab0d85e6eb6115", "2449303536694c7be59b11609d825316adc7a683cef521952832f4a234d6d549", "2e76314282cd9a7f3fe8ab91c80047e6446c071a7ffdcc8d09c47c8a93fa9e97", "253a9f837bea1ca0beb04c1625e0ac12bea8e9f3ff178bab5435fa8e9402e4a6"), ("096052f5c890929b7f8f235312656a66e8ba58e757e632755223e12b43f0b16a", "1aaa963fe1a8312d320dd2ed77e055784dfb25d32ca2c567762b576560632974", "1826fd6a2e78f669dccfa8b2c46f2e1d3f69c924fe805b19f1c424ba8b881a9f", "1b1c1eff07e1aac068a2a64c72e83f4c51538ecda1f67f174f6451e8cc23a0c5"), ("1371a67e002601ae0d42c62331d5d16326c6fd218a513101d1cbdf8d86ca0e4a", "0d17c8531c4be0bc74ca7a7a8b41b42dd2f1b2be1263db92595f4e2ade1785fb", "1d3dcb7c519e354945d668ab07d508fd6689e83625c2899bda0399dfe17befc4", "2d484fd5960e28a4975d2b91acaf3e7246a7e77b7887ab423a3e6edbcd30df67"), ("2bb2a0920c367325c9a137cd9915fe237ca9d06f3e9d0eae186504657be325ba", "06a9353eb328694a96c37215bc7d37bebc177710420ebdf6af44555039e7e4be", "2377c6245d1329b7a39f5ad110b5c54b1d515adbd4d2039ff2da660e04711653", "0b2b8b4ee1b43532d3d882c02105003ba4e7ec5f6a4287ced8031c6cae38dcda"), ("1219cf9ac791e00fdab74f462ff93d7a1ace769319485971f498a9b16c63257a", "2f64fc4be8a0a6fcc357c11b6650b504eec64630a29aab41c67d7910cda48fe5", "2be442177841981558c860553a8326da71e96ef78352cc8c01f188cc32ec1a5c", "0c1352aee4f964310da79f3e189a77067d94f1044edcbbcd950cc7d8e3c785c7"), ("0d84e0ed2f5afff928a5cbd8b3f7502ca74c6eaf8a73bc3fb4e7d82ce791ad72", "2c81819d90f2eec6d180d19776aaf339493a85be566235c6cbae8c8092666b46", "18e40f767b93ac192753b4ea15408c09834d7fc0486e26ee76a8cd89a6ce4dbf", "083a1064ebc930a8f67bd4aa8704cc75b24631fdd75b54ac74e22af5cfb1fcb5"), ("292a2716bab0fce827754d5fcf9f110f645abfd4e444aa9b32c9d0d2e1a51238", "07cd2a1b53681a20cf89dc9f32ac9a2629732b86c898fbd07d7fa5af2f0b84e4", "1c1d89808060832d66fc178af484a291019cbd3e371e184bb2fa920443c59d59", "20a67a1e777655077394879f10f6e78b4d729a1530ac42289e96ff59cfa165fb"), ("2d686d03c6d38e7b867795c2100113f22b4814f863d180e3ea1d4a191347cdbc", "257b521681c769ebb56524a523a4f4733d0edc7e66622161f484f17cfbee58c5", "249dbafc16d4e85e29cc5a04cdfc2a4097d6cf170d10eab3e82837a09949fc0d", "0e3edf0894550812d1e3edb5f020962fb1128b37bf70f595aeac2fa91ad89fe4"), ("2e264cb463157a20c06804d45bd2c36826131b81f7ada06e1d5cfa43205ea44d", "2c302bfe421fc06a8ad0f99f128ab90c0228e974082010c34e913d0f519a1fe0", "1beaffef08f42cf96d4724fa622d874aa3462caf9068f7251fc93b2dd5a44c23", "2093ee9277c54a84672a504c5bdd0815b5f62431e85ba992e1c230097ff0243d"), ("22170f33f33f1b4993b87d6129932f12d71c00a195c2e584a07bc87edf2be673", "284adafe0ba797f444ee9f5a00baab59d81694178c57500436c853c5fb77b340", "214fae3decb5d216ba6c4959d3bdd10237a31ed499bdb87b2ce5f8137f2f8536", "0579513f79af03f3e99a6230b5738be47219490aab8e18d42fabab4faa280b50"), ("222ed19e8e47adeafb0f4aaa6e95fbf712769dfbff15ca07b42f1a19312f65d2", "03a3bade8f86e287410e5c5826bfcbbe6f5108e8d5f87c455f3bd437f3fe9f74", "0a400734bff2ff8b48280041f1eeb9c360524df31d48d6b204b36604b3736ff3", "25b24d39bbbb4ef5843adf8b4289bbf7e576012aeef52a611c0c1bf60e512751"), ("2749a290e5d5a9523dfd1153f0f18c741f39578305edf54fa8d98799c5a0f386", "16e77fd3bf4f9aa64421f3457ef00f603cbe2422e74dc073a6728d825fdd8d7b", "0f790fb5398311ff1fecede9ffe57744f5769460912ba14265a8a60f3b06e41e", "1f6bb5b623936cf6e17a732c225cdcb1cb54ebbbbd2da380c833c9b405d22997"), ("2d8f2dd8de1f42f7486cfd3e5e02a54dcc9e85d0a267b145853bec9c2069ab39", "128b3b23db855cc53ce75114d6eac67712eccd034b26d7f37e0b52339b076d9b", "212b3d9ad0016ee81b8cc1e6e93e7d02f317b4d057957f642f5b890b4a807150", "017f904d0ea8a2f3111269b7146b850cd78f9191e6b50488e7b78b583a35d29a"), ("2eee715e7f23fb64a846298c5959c664f932802e601d4733309a88a18c7aba26", "1a3615d3c3a153f60b34630c77bfa1da2c9d8a1d0f5b67feb5da7438749e5a8e", "2c806b0397eb15ffd19acce5fa3c47cb90bccb69027823f4caed61445f23ef93", "1d26cecd7145d6378ae885509223c2ccfa64a5eb22d1c14695d76723615a8ea9"), ("24ace1c1d81aed18175c53d2bf30406c31322ef1c7e8f33cdeb41dc5bb1292b2", "2bf16b11dc56c274c10a1ba6cd50d41d53cd32c229f56d23f3a5a0234990541c", "1808ee3c7ad7aaa8acd94cb7c3c8bd1a9d66cc3173ece0a6d212b1258cdce0a9", "29c3fea8afe3ab69d5aad7fa56196407f521932722401816b5a71de3204695c9"), ("11fa39b237d35aaaccaeb342b5c8965d4a62029b4eb96472ac58d955406355d6", "12ad51b905a395f9621a2f92bcb79b18f5bab2595e5093706fa10cadfef55379", "27224fea752c51bca58b8b569a39b5cced41c0158b6fbc3d6c66216b197e59eb", "2f6c99dca64045252ef83fa1adb4d54dafaec121101dc4b832f06853366bd579"), ("1f5502d0f72c503805d0df529762e1cdb81fae3af46f10505de4067135e9ca4c", "0c4247de0cb53f63f405516436365cd1f41ce69d8716c01bee72bbe2dc4c36c2", "2addc7b1168d496b03edfa56af09255eabe67537e06df4c27943a7efc57eb988", "2e82f9fe318e34f1dd7d181729119b38385965e2f13c89f716124a33182bf285"), ("0f9fef6e9aebbfa922a79aa8bbc8729bf1269c5996bdff67e88e0d35f4e9f472", "29f999592a4523ffed61c17fa77d38e4d3a5e8b6f9c47ad963a5b0b900726450", "16bbb2c9c22278cfcfab2b3aeee73bc5bfbc0435ebe1c65ad458dfc0c56885fe", "114192911570e9d2b60f9f6c0bcce19f13fb000fc598aa1452d146966a24e7e5"), ("0caeee755f455a135b49a9f37fa4cb587657c4f7b9cd099cf2a2795a6f1f3885", "1ba51dbeabcb5f5a0ecc2d6bcf9908e746600635162a0dc8d49a57c87f22d40b", "0e56c3ea822ec04fa77c58cb28bf149d42ec14a000244cda7d660d3065ef15d8", "01da9933d68e1f643910b253d8737edbffbfb321fad52f3a7b81d2874613219f"), ("134295c9e35a57a93dd433477c87364ae9ae46e072aa6622420a4b0b6c56a485", "2423d7afff2f002b651f54ca0bebf0df80bd6ef896c69733f076fa65f21ff434", "1871bf6d806522698732c96901c4136ebb181f7de9c81c1c57d27011751de708", "16f45d50f466008b8b958ef8f5664fb5bf65d837710054693a66853ef6a2cf63"), ("1262e42d953eb044cecddd300526cafbe3963a567acaaee226efe84fe21bfdff", "1f4f66e702fdf9a3f920474b04aa836fc919424238b860c244d9fb2027e095ef", "0a221f9a1134f9bb86e9b93ad466d9b1208e735a229a91c0f12aadb36d2efbfd", "1022ad2bd7a07bba550364ab48428d59d3575537241dca5a777620436893eb16"), ("0ce8fcdfa76906a826c416f0442469907ff7b0174f3956f41fad0c5ecc89c286", "0d684b9a215979e4c783e1c53fbe674c6e2a98a9862bdce4bf6150c0b42e876f", "0c2f7defdc11d98c3d1ad5b63c08e7a0ff7817f730ae1622dc4b8f05af8d3bda", "1d6dc0af54aa0bd83f03712eed1945989effab4b948a61ea2f00f88462733dd7"), ("06660ea52d1bc7a830e7e0b0833eee05a516af90d8bc3cd43d294f164c1092cc", "1b8f6de812529e38d3cb0d6a1df20f423b0f06b5c4af1b4e7ebcbc34f71344f4", "232e377a6fec94412d9b7aff5ca41a3b257a864400b28c8c60a25c6ddfa64b99", "1a9f49b2b7e3f305263d22d27b430be92229b7f3321ff2156df0b4a2af0ab79e"), ("2d96a8af3574de3c160ac0f19a385e904a31227336fb35392d39e227012126c1", "0257f911b06630572bc4b72040cea9bd97536210b01aedfd9ec1cf27d5bfdda0", "1dcd0d04ddcd9b92b34b149208a4d9dcbbef367026b07720d8b1b6596b1f866a", "1fc80fef6085d90f71b426838bd0c40bfad46f334c50ea79fbcb28fd641edb65"), ("03c5dfa2727b87d8560346b353fcbd76e51e100cb4b2f1fa4f568c6ce46593da", "0d2889c3527e7a5492945cc76ac4862a2e199d07316dbf7987ced4af38d357b8", "27ce1bb27d205edd85c7a1da194110bf3206913353fa8c21684be2363288177f", "218851e851955cea0e6169b722ec7b8cff98e0f8d75f11c651b4c251a093dbc7"), ("050d7ee254927a46588796d75dd77d15d5455035776bee24cef4ee5bec5f7a43", "11a93f4401efbd91eeba54f5c1055ab9deaa8047553c584872e38ef86c658847", "066994f87ecd7ff328b9ea6804194bb8524b483b9cd23078b2ef8e2af3cac5d2", "0aba9e46b91f4e8b7f287a822ed06519496812f9a36a6bda4c1a1d8b0e3520c6"), ("0a9a78f703f2c039b4708e23486fc33cd1f34c7d66046e15184d20bc8f325766", "1e05e5ed3ad64ecb65a85f5ffd82e277bdbccf368510fffbd6625e1ecd082f1d", "2dda0d460115e94f887345609435a65ef8c74a8b7e2c84bc37951d97739614c8", "209ec3669be1bb2c493ed6e7a559ce4d0a557a7d271c50c27a49f88328dc37ea"), ("04c39e7abaaba87e6dc3a42c750b178946eb665f0d7004fcd45965ef06fbd5db", "13d3405d36fae7467872f5e63232a680a5c8c2eb688182ec2966fb0ad457650b", "1f529d4ddd0313412d175f8ca49c10bca0362ac3a9a8304ac831beac344e19c6", "112e21bf31a087a380e56f961c9c70aff1bdcdf3cef242596c74055c6fee793b"), ("2029c0c9f42cd3aee9675a53409e98dc9bb3f93e3a8e957baa488bd8e46ce1b4", "297dc93535a1fa600888501a1eac4515ea20c6742279078854b77cf2b3b8be98", "151ac90809dd70848e0fdc75a6399eecca073cc10fdae05b7f826466b0c990d1", "2cf3ee64604a3e01dadfdd9704f37c3b6b81f5dbd9f19f2997a9138de5fcd81b"), ("107a6c2f200234296821cf8b53dc4a6527b55b40b9fef7e45a94aea9e75bd759", "079d694f0b58e6d20674f163903a6197c54f9b7b6976edaaf017326e6707a233", "085c08c736af0f1ca79f9c1529b48a528bc77c5e0d90e4c9fc51d3b6cb7d2fa2", "1535a22d5bc82d8dfe2ca53e34119a7e99cda3b815af139fd698572ad8ef6526"), ("1ae5034df9d27f673f6a97bfb45379dfab552abfcccdbdbcc5f04f87c260138a", "22e74fab4be39fdb68b59dbd1cf56b01ea09ec580c5e77be5da50765ec9f5b63", "12bcb0fdde1bb35543a01dfe4019dab831374e8c958ba80a697b1cc6db1ef1fd", "1482a0fb0cadd35a54fea6357acc235a4f01f51233270210c2337d4e1bc48a25"), ("2e465f977ab97b84bcd4c75b296c6774c60473b4ec6fd38f6d0b0966da93957a", "2cb9db54a67089191875d635807e5ca924f20a6e544cc81a4be877b25fd8ec04", "07fa791044920d6332eaebdfa43d1ed584898bb02d91fde1955993ed295b44b0", "0109e0ddc179e156f89487f1404b3f504647ba25fca22eb848b2be6a7ba3b29d"), ("1bc1c14bbbdf71138fc163ed05cd7e4c5d1c64b3d5b84059efe0a52629c94a5e", "0f9b3818243f9e6c06b7d449f5cfdd9d7de78d037dccb9cf11e1fb4379a42297", "1afc71c43023d4a7af470c7bd53c57f899eb99ed445431ff8d68e6343abb44cf", "064a130efaacbb317e734b4d7d3d8dfc135bb379b64aca1fad1ff54a60e426c6"), ("24bd8837456bbedb3a8a2b2652c30c7881c74a9e5672eddcffa44b53bab554fa", "1a85dabf4310b4250aa351aefac750fa5e90c44f1c4298819b686c7b4ef35edb", "0b99d0adf4f9e62dd170a53a1f40797a2c5dbb9a30a3a6ba4a306470b9c1190a", "2ff806f4b63bd8cdc718b884a070ab1a7bb29d93126752371b3f0821d9355ec1"), ("10c0967f0ed408a662da48d9c92d784696e174c286979139b00e87b8501c349f", "25c65ec8ee3a5eccbebf571a1ed8b3181200f75b73964e4d50cc23428409bc9e", "229f2e12ed38cf5bf76aca32386feffac7c3acd3813b52ac61e55c7e6795e3c7", "262f28bd2ab66d2eee74059002127757c28d431b23b41cbc7b46afc042083fa4"), ("216a72e5a954f737ab1d11ab265352f7f57f2177206093529be777434701d253", "1277b052dbd4565c23c0ba15f314d036d1ea2488685b4222e6dd326c497a9959", "225d7e73cb5faa54e9e4ff77616bfc5240800df9b23e6ca61484bf6eaf93d59e", "27f7e51733ec20421ca8cff42f98bc34bbc172d1eb12b7f44c7dc401f083c485"), ("2a6588bc237bb129753ba28ffefaaf2f3f24363d98a59bdec519c532bbe6dd28", "2c2e2bc73298d5cae35c51909d91cff4a210c025ed8c915ee4e504cf8e982356", "0a0ab889156c896a04efe48c14bc651fe88873a831ce79e8d4382113628a3dc9", "17be811818a8ccf030684051c8afc6431f9f8721e0675919f9735b22e4ed80f4"), ("1b876cd24f96067a408c2e6978e2850b295d3f0d693f44628d14e5b2e3ec1b98", "3008df72e3282c6d879e0a46346c91625e65b6900c08254f52e0845dc52ab451", "240dac9444c8bc9eb1a52ab42dde3ffd8d5f0cbf0bfc67c3ca21ff0d77e47a2c", "0a08f811a712716a6bbf58c9e9135be96687f9e3a1ce72cc198e5982ac43a754"), ("01805b7c091c3d6fb5447b2f1398a7cf106e8c26e0dd3de9a4c511256b30e559", "217d82c66247bb0563f2095a1a42db4df42c6df7be582b0b68bc3a059fa9dce8", "06600161790c0b314ba3c5f07f588bee978fe3989b4622aa83820be3a0dde403", "011a6d49dcfe17cffb72ad990b71ce45f54b5c03e58be5bc77f44960062a3309"), ("25c5a78a2741311c915a5e58c4503aa77836658e018bfb50c6343ef00f7be5c3", "184418311b6ece774be254c3ed9f9c3aa9e9f3901ddfee02c362073a1678e1bd", "2e1cd715703ea09caae6d3a847d88714af4925bebeb0b692202eaad7a4d79af7", "1e7f91c0a99ce624941dde0c524f22716760ddcd15e954ada608a464cb6574a4"), ("2e072f614178a5aced25a6d74c114ac9c7ce0b80a87a573fc30bcc7b301f97c0", "04e7ce3325770d025a8cb83f842776ae91ab1a50e2e7105f0585455adf23cdcd", "0541d516cf3045286ff02808e0f4e97bcebf194fc303c69c5da89839865a64ab", "1449f2f5de12f64fb0afb8005517080e92566b2fb9b5ec320159e5640cbfc5c8"), ("23bc9a4ebad040fcff3640e46a23772dc454fd7668eabad9ed186748a16fc711", "21687a7607b29beaa7b2f066f293f8e7bb86f40b376c7f7ce63e7b23ef211c2f", "2545e008d71438cf55f4c3cf3ea5056b3ec72b1c913cbb89edd1dacd7119a388", "0076ed33cd7b62f412eac014f2041c4ed4cb9f84d352a86f0a66a008fa82f027"), ("1f944f7eb0d684de8a978f84e811e6a76b1f20e394629a05b509196f8a0f5b8b", "170ad36565ce196b73fa224711e7eef278c54bd98dc44aedee10c7caea8dfb4b", "04abc843b9e7044135a7076bde570f13e1103b6fa63265145da42e309fd039c5", "24e366305b5a70727205f99a69d86294681accc966f0eef0f0439bc2c4ff2b9d"), ("0717357ebc40e9483c2bb57740d9085dc143faecbab60b19ff35dd9871f9e0f2", "06e692c1952623a5d62cd83e25f92f6f74c081806226c5bb030f82e7b5d69387", "149f6eb06952f04d335ecac9783f7a0f3df096b657f433a6f59fd14de542557f", "27b97e57774e5c7608c66e0801da56ef6eeab5a777579103c12eb01a999a2957"), ("2f73fbd314334db8b24f511cecd10fc55893ad114411773aac3a3d81110faf0a", "2cda5cd1125b280a18e964fa7bd4976799f749adf750c954722cb3319a82f14e", "1e580d7e4d93133ae4e05684318cd43d5d160181843822b54119da2409c5996a", "1d6dd279577290101b510af4c3132e4885ff796ddfc2179d6d17d16dcc3e750c"), ("2817635a73d68dcefdb3d5a8da1118497a2a638dbb87f877d69362b793f6a9e3", "22bcf5ef01588e8ff5cbf9221b9f90e697a1dcbb49aac0d420d91c591da8953b", "213555291a6ce7bdde330fd5de745991f4b834e6314bf5d21da46436ac3f18d7", "065aa96e091f9f4940ec79fc4300156e97b910cbb713b8ef37a3f3f10037b6ef"), ("2e3e1aa9d79f1a0d54b61d2c1aba8a8500ccdfb5b6a4e1a547cafc7c029e2e58", "23bcc433cbf9bbb09372ed1f5057384f5bc03d00f55244567aab06e340c5d570", "1bb26598eebf0fa803e7624296ef0e2f36d042993b4358fd89887b9bca406ef0", "01c122871cc7034785c7d09e2956ef5d7565435bf3432f335c6c1f0058bdf020"), ("286d95ac5e4d741e3b9e258e8378262fc45acc17b3291046072ebabca1e32a48", "1387ef186c911ba8584cb366708dd6a2e9c792ebebb8ccfee78fd7fe38007f3e", "29695167defac35c3977e326765fd60847cc6878cefe7a875e52cc407a39e7a4", "16f9a6276484b8a6fbbdb2771fdb5b0d803e8bb81d36c56d8a08090c2df7cb68"), ("038e80bf0c08fdb8839c5ee11f5a480a20f8cee09d51affa6dd9a28d9aab7031", "010c2ba8be336dbd56f6c6acdb8c4aaafdfb41da78b640f08530e7ef6e65d71a", "0d34ecc7c6b08191f08c582ac36b73137095e45f3633c7d85a6ba5c7bab37655", "29f2ad1481772b526d9a20d90da68835cfec923f0d009a5d16eeac2ea4fb6180"), ("2c6378daa0b1442c8b4d883eaa783df640cd8db135bca665a3c1aba36abb214b", "07c24d3e184e9ba2ccd62e162168349fab347ba971023a66df7c90b1dd42b422", "04d30410ef99333072e106063b570ab84ecd497819ca771ded009768fb1edadf", "01131334efbb8f716c35084731f5d04e5da7d7e5c54f2e75fc95f7988ff8baa7"), ("2a00904be8d77342ae1488baef60e2d76c1048f11374afa651fe0ebdabb7c4f4", "0bef42f9d2df9defa49ed252eeb0856b08a563eae3b247f68e1549d585f53ca1", "2e7a09948a409086888e06441666a9932cbb08e67f28047a8f509823163d427b", "0a064948e65ca37d1dba63213947e2dd314fee7f0bcd2ac067b59ba009be128b"), ("212f53f039a35bc7f96f2ed24a5bf0cfa57c703064f17cf5f41d693e9a12149d", "2c0d54468186ccd6b765e44e47e931f8ef66c35d39e946589643c3f1225b325b", "07d8e32fc71c373dc7f11c0ac1184c695872209c4e3a18bf1085eb8de7694675", "040d845bcd2a03c070ed8e21dddc04de4687945b794df85532e95ae4d20c89d9"), ("13772d679aea7d9fe2e9829d7c07451ab98ecb1b949e783113bf8c622a8502dc", "1d3b3416290989b622d4fd9dbc8cf23146842322a08c325e981fa034509bc961", "208138d7cd92dc453deb531f166d0e51fa5e99b9fc2222a024e1e07c8c1424c2", "11e97876ff59b0b8b3968b5b6791afc05c36e7ef23d681965d502965bfc271d4"), ("019482cda57a8a67a53597c8dfc930f043ca84e5ff59c35424bfd58b7e3b78bc", "2385b996f03ac649450d9311ce56010ddf604c314d4ed314ee82e268ed2b6443", "21e7dc3ca8e9fb1a230a2d68cbf12f12e462c3d1e753b170f44dfd903dc6e49c", "08d661a52cf7ec0897e8c0c9a618cf18581aa55e8fcd313518a462f0cf4324e3"), ("0af80a7db94dbeb9fcae6422202c6b33e8df1b7159d01e2108493831e057fbb7", "174e9d9f5fb1ef00a70f433fce6d24eb1c8561c437d7d3f6334aab8990c984b5", "18123382b8fcaca8c69ba32a15e45f6b01bfe149068bb45ec701e3b38877e422", "0d641923dc22b215008cb28f924e0b6f74d2719b352fd82edd018a2407e7b856"), ("0b952802f428dbae6a0511a825e74680c362980cccb315a12d49afa0ae6a6b91", "030690c6fc771c79f8b878f95de7911238044797a48c738e5d2bd9c793c0d5fc", "245fe1146dd83d383b3a4c3a80728d0de950a482b3f919bb7a45291179af0871", "2e2a1cc6bb298348ee6d91a3b44718c54897e5d7f7192bff59b806e6b7c57d25"), ("10ea4362759ed2bde3e68b9f65cb8a2f07501bbbfef91ced96d8c4e5709967fd", "170c92961e089cce5f7eaac1eea5c35939f32dbbbdfaf093e3d39266f78f0229", "069d229a980edd8ee51637f47f4ec7e797a3f4206e347943ac0babcbf1fe1c57", "0cdcdebd12b86f9d3e6d365cc086fd22f94d58391213ebc4fbe2326d45d6d86c"), ("2042ce1fa82d5e7958cd7707a35de0a890eef9ecfd50c23db4d3060b43b7d40e", "1e3d6a5f2bbb789f29eb112df22962fe777090e634b2a30aafcbc9802d1311f8", "1ca53251d2a3daf86b95770383f6d09d01bc9f358549a9b7eae75d13fc1a5f8a", "26e4271c53810337b831521eef466c001c30457aee80ca50cf706e0701e62099"), ("0fa04c465d8e3ade39e32a415cdb51e64bc8977e6cd668c0b1aa617f275b5e1b", "2c8a296d97463a0cf03220718ea283d7ae92a6fc2a4ab8635b19251ec6c2d553", "02d8f5e5c492fdb52e6a3f2cc07f15e6108c3e668f7577516e59be41a7ef40f0", "00a5c95d467d9ddcc03d8903d703f7a6ca8463bb6d05e49c0892624a1e94e6e6"), ("226c6576ce08a90d35bded6325a4aa06d06a0b6e2b7a8e61f929bc1300cd921f", "291b5cefb80b9e02d34b6b7c740f503e0eb212e23295e2754b5ecf9a31fddf1b", "2ff3c1868873cedc52bf695910582aa10fa0a095bf1442652d8dda2a5394452e", "028da423ce34527fba91c792bf614ce07597afe0b2d40fa520684d869f90545b"), ("1ec601c78eb1176c6563e661697c1e1ca9929b9bdc427b2ecf08840a19699dce", "25c81e2af4cd2b34dbae5eda595019fc23d83a5b1ad131c29b4c8953c9ea7086", "023afaa53f34d83acc32af3ce30d3d1c991ef9a4a134c5e311c57eddb4e02de3", "0bbc94ba4a92b82e4ea6cba2907db67bc76a790beecd095f0ea45e79b09c5738"), ("24b42bd8c4f22b844328344b82a49415b9c40dd6b482d55f5284c7e14728c81a", "162cc77ae1120e42d03ef72238ce02366f32973ba2c5d7d320386a3bb2645d1b", "0182ec01309943daf32f807b30844ec569b6eb2fc5b4715c17374f10137ab189", "240fd018ba5c3ddf0e3375f939371685c49cd210d7119ad7fa6ecb0e5a8a2d10"), ("0dae7d131b06a8c359f0c57816e992f39bd4ee642ad5514e1150ed42cd84cfc9", "2a25f0ad8915e67f144bd8544cbcad3c907fc15eab1b00e0e68c6db3cc0bec4e", "1aff455f5f6e3783a60f2816c502030d80d7533ae6176cfcb7ada9baf389391b", "2b38a428748ac1b8687405504dfef490fa5f73e67192da16c1fd6c9874882e2e"), ("25002f8be3dc3d4a08ad963786530e2fea2d85299970bcabf98c716d4181d48e", "1a675e260657901adeb15655dc38f235e5489dbac689a8694def57ed27b05bfe", "02d7d7dc05655ce51770197ce7ec13a04a41fec151e9df3a196aa67673846ff8", "22b603fdb88a8257628fb4e6211e3622a5e1d2fcf8ee3d4287e79860e6e2c969"), ("097f87ca76936722463c83e8446dea977b63dabfc24ba6c84c9f772e91588856", "0c7d9508568683faad346daebea49be606f6994fca90a26225af1393d5e76cf1", "18a9f7a1312b26dfe104efc0c22e8764f6a727ecd74bbcb5e23f9840f0fffdfb", "0827d4597fb25901e042a6c0a4f6386fc8e619c1980dc0d715ad6b86b672bea7"), ("1627828d3e0f46d7bf1f2ea89e279420f6ec2ea2aee695fa06497b340325a0c5", "1845e0a8f6779f86fed623e4e2f2913b162bff05537d0f5206e71097890b36d9", "18223cea83cc07644b88f7aab926de276352ff0655fee2bfc4546831329badb8", "0b9b9d88ca475c2b6da797df2dfb8f211d961ea05d06253a0f3fb5aad8d28a12"), ("13b199c5a1187938738789ad6f4a48b2fad7a3c0676e9aa7818754d52de7c72c", "19bb9bc2df06226f167ee3637e7199c8060dbd2d7d542c69d5f90c21fddf399f", "18dab8f8f2753e26d3d64c097f4cde03a90d80f24698323ad2175152761373d3", "230493fcf7b756869a910f2ef9d1ae6c4152903fe083eb17b11bbd71789f60e4"), ("07942770bd8ee039de8dd002f941e18f7493771cf75c8810522375b6f518355f", "11b2024419fb0b1ff24805c20222a9a58fec99ec0442b48de9b475fca9ed253e", "22b610837d7cc1dbecba00e75cb7b0de12db7ee7ccf771bb0391292d24929e66", "019f3aeb17b1ba965c36c21e702ec0fa8f24e1e237f35c3b45d037120f3032f9"), ("0e5458854d0a362a8a6ffb6a67a4e0fd56244ca59b29f1b814671c3fbd2df205", "1681057e67cedfb5c01e0a3a0381ccc39b9690999cccc4a576a76ec33fd57a61", "0d3d414438264177caca32ed138532a2617588a7f2a97cb16beaa772e278856f", "082ae6cfdb9f131ff4edf6abb0bf5069b0ce09897760466a472dbe8ffe3bc3ed"), ("088ce681aef52b983119d7b0bc5575d96d069636f9d9e791c03b4050a487e536", "091e9a4196f9801f10d46093c551590cd89cabbe9383b786fb289880d1551205", "20aa3d60494e307dd1a5f5142b382dcc26843f43a1428113a051cb3f41df6588", "2109ee1dd6938020d6eb41ecd2b48713448db4e849d85b9b8254db2366d9f7b3"), ("1e42c321aa32b54d2de987ea8dbbcfe4828052489f0263909a49ad11e00c8b10", "2cc1c013a567e8fb2d403cd7de431945c25de47655fbf8e53c4403667ba88305", "1a9064cf935a2df659b75348afe6d3c6192f502eb691442128fb04f49e5cabb9", "0afae925bacd3ca1f2bfbbc550c4b8a8938b6e2643c9ec9813c40156a17cab4b"), ("1d8214732be99f5762d6bf6c7566d6c38b3ebe5becffa69e82a65e1272f7cac3", "07ddf6e1b70ea9d12f2b478dae5606b34c086ad053260432e5f0eb349f954191", "2bd85619a9f69e26f3c3114d122133404bf82a8d84de2ffa4333bd4649c52683", "0e0991552ff29f784691137482629b39a34570cc5f99ff8d417f5f6ef7a5358c"), ("2c4571f991c692524a2afd87fd6e219ec81064103dbf1fea40268443f351a31b", "0a0808dec27e3c89e75824899dcc5aa46c6903c044c4af10322ca3878d46913d", "2201a04f0c176ef64b10a1327ca623cd105bc3191e31e8713c7d1d971771b1ba", "03b801e7f3bc915cd9c471a6da280a57b149906e1401b78e8bd9f6898ddb11ab"), ("04504c965ef66cdb56cb12cf50fdd9f458c40f0cc98a8e679efa6ccac9ee9711", "30086e35b8bb3417a03b86b21b0357217b78697fd40ec80a7735ef9412723b6d", "067b59b10db02afe0daf7e07d2afb42ddb53be4c77fd1d1f217052458cec764f", "2530f8f30f7acb70ec942ab40298809a79964e9457ca53ef79ca0cb39ed75107"), ("25d57d733fb181483843fff6bed999fcd9d6572f699045c793af026cb46b2909", "22b2dde35fc5a9da1dc403f65e17d95fe065ae399a4621613e1e310cf415c812", "2fc46b5f88fdfd4fec2a0aa7134d2bd82cf3ed44732b94978cb44564aaf9d69a", "25e9a6ff584c0eee67adbe56bddb26b6bc2f09a8c82cdf041ea331fd259bfe86"), ("07df3189ce835a1c93e1220f28855d2aab5ae8d8e27eb2f8d1440c756ea77058", "278c75f426182338db0da8d1afc352d8181e32e22107e94d2d83dacc493fec31", "2e0a0c6d6e362a4a3e0dd82abcc5d162c440e2858558dd0a15bf3000845a5b08", "047512ac264d6cb18633715b76a7af08f13b7ec3e92306c6f655c81aae0ccadc"), ("0f40c12711f5c4391be187fa3b934f012fecbf39297cd500cd7ee26fa8c219cb", "0572e8ce923e2856790e06c86ee572767228de1974f3c105310cf788d748c7e9", "2cb646d85c1081659fa074c2683c72f292610a14ed3333fed9820ce300af101b", "3010cdc6ee2a83e0b7af7f26934934880e5db6c23277bf0c00d25038ce9c84ee"), ("17fea77d137731e8d43fa2c205ec853a4be78603ec79adcd63eb92fdb73a14a1", "26d0cb00f4ffa59004c8cbc0e87198d08b51a716d77501f1cdb4488b76898956", "0fd6b02ffe2ffb0641cdc3aa2263e62ad0ff318826cc6844cbfd9331064625b5", "093adb9dfb1527e71160880472e2fe403bd4b8400cedfcf4406a989e87caf8fa"), ("1279570b07370410fe7fd63b33a86032d95df113b51c0f3961755876ffc50725", "140698d850be462c0128166b428f12aea7dc9977c1488eca9dac906f856ce418", "233ff06a4c386e10bdb5a7406a3ceecbdeeb2c5f67ccf959115d7bd89f9a2569", "220ac2279071edb155a9e0bbf90b9104041a92809455e6b1fa58faf9817377b2"), ("197db1fd6162092d2eebdae8883c8cb461113713012d31bf71644b4cd6bddcfc", "1ffbe3d86848f14a1e9ecaabd7aded452221a98168b22465f287b59c10004aa1", "2b2f37e118d959b4c103477982e2b1b80452a5bdffc4ac1da64925fe16dfa382", "21851044bdbf21dc250e7685eee6a824c6b860f81699ca10fd720afc4aa71673"), ("2b7c8946b53c5e72eb46901ee09e0e2c83e3aec2813aee0025156d907c4fdff4", "25437ac46c6269b68d559c225d6ea886b2de1e3617a466dfc9722c457e6f0388", "03ee12fdec46a25f7798b0267108ebad9fde67c2375716a694623b4908925b42", "086a019c9420e1b28d19fab02e5fe23fc941901cd186feae53a3e0e7044728a6"), ("0c68ada0666d88054a9fd5cc13a45d81f2d6c4e230eb665bfe797c39fd647bdf", "0f9411fa5ee3253f5f3eb05a3d9fc2eb1ee7727e1cdaf4db169b7ab716a08e13", "0df82f47b51718a26926467957e8ffded588232927d69c0bd3259415995ee43c", "23f6c357e9d2b27ba913f5a54760866adfda14bd18c7692e93f2965014841efb"), ("0ee532a9fe0ff119e1e44e0cb39d8f1017cc8cd5c600d48c2b95e4baa1e5121e", "005a05269959b125cbcc76258d1948eacf52ca2b65c5791629e60d6c6e515ca8", "07f62a677fc95a0cc4b5f0437a8352866475f3eb23d7a11efda9ca7ac4d3e62f", "0f6c33dcc103fe40e434e00df68a15d1e797f3f62b80bfec543cecfdbd1ad693"), ("0be90c003c34240c72d0a665eb67e35c324a448be0044b8d81e93624ad4b93ec", "2204015a587ccade75f7f238cdf6b0bc1ba28900f29ca593b9d462397c1acc0a", "27159ebc14609ec9db6fe79d9c53752da5772caf827e86737b464da3a977c997", "141aa85a6076217693db992cd524037d46a327ac4d734642bc1322a73ede32cd"), ("184a25a33da57a894dedfde582cd62a2839a58a0fe94b0d9afe4ca564d14c746", "24858d82a50b5e5118bb326c508404780604cda421a92cf93772c65787ba1710", "2892f6d0e2df53e0c4cfe338cf8426d297c8addd79f0764bd9bbca22838ac8fa", "2facc1e99b0b34f79478e2532128e69eff4098787854206bddddbf5b6a9ac24f"), ("0a6ff331310b9e5df7c04e31ae39c6cbac4525e610a4b3ee4f2fe376954fa351", "1d37946777fe39b2ef6a219918b23d67d0b84a1762780ba0dadb1c74f5b03706", "1389ee8b6ca86f0d9e6dde16691fe9fe0e964a0be634b7f23ea8fa452e4be21a", "2da7a52031b3ad01db5712a211b24d91b39d861b3a912c5877d1b6b9384e17ff"), ("2b9d8d4fd307e5a0a0255143dd553422fc484b3f2f25c3b2bb79c38eb19c66f8", "043bb55c59f7d31cf0fbfcd6948b06ae897d683b1a972f3f037aabcbe7bec434", "1d8187d97fc2e261c68db41d6ef962800a07ae2d27c5baa919ae48a0fdb9be5e", "03bb025a642e960fe633f29272f080ed0e9140fe62e90c3d8115ff310743cca0"), ("0e8189bb26e367184f5e2a55379c7ac08b1e2323648a7b6937535ac728fc34be", "2b8b44aa4cef99a6034259acaed0fe17954478de442c68fd8a0ac2c360074cc8", "2ab01756e072c1df5c5fb21d4db96bbc586d4e20027d79c781d03ac6bcf8f487", "17416fcd0e78458973526a26b30217bf35bcf26dc6f6e1230845eb1bbdd287a8"), ("04b0ab3fd786454ef3569e56412db65afcdb902e7ca0cd31a7d38768ac4d8d5b", "0affb4b6d77d5d8f8cb191a8258d464e472fccb52ee4a6af02f85b3eecf663bc", "19f5d49f4db431d762532b0ed794f9e232803cbf272366fe69abcca8530ffdf2", "26c5d1a5690ac249ebb25704e99a5481da49411891bd19d0f10e5bfa4e6daadf"), ("1fa3f89829c310cb5ab32f3c6ee68739b9eabfc86a87d36aa216bf294f8a743e", "0518c8354f3ea0cf0838292cb1807f1a883d4c258908b62fa8b5af3c739828df", "11cc49adba626d388a87a57d0597d57ac4092053250657c4c2ae1bd6268fceb9", "1e322d611c696ebc53d93ad54580419785ff97b6e0019c7a8508a705319e4f57"), ("135fdbfb9b16dbabfaf0c9ac584b556fb6175518a5d429ff1abd0737fd9bc24e", "11429bb30875075fe829cc0687cc201011da69c75afb037ae048c8c05b6a2f8e", "01db889900e8c74affbd893be2f1ed073a3e173ba0a36a94b63cb91bbfb617c7", "0329f4f7125ef83d8ca9827a41cca650a51ac9051f2ee225691e4e8f9eef0588"), ("2ef34efee459da5daaac22b6c4e7b84f65f6064f47284e5f4de13a98cee7cb88", "29058cd7d94fd8f74ee550b29a6b4613974e8c094e88cc43635fe567cc994536", "0d896cf69219a525524b7d64483b00538f78d69c6a64d41c67a2b05b9a8ac724", "03093bc89da632665a9758533cbf373c3102b4a7940824f04a56228d50379ecd"), ("18fb0145f87a73a3326745a5be73ff44e02a3f87fe5a58472249198c6c37b9d7", "00ab0132c412976bfb8c28c3a2e0c6aa19d3aac9108eb32674d44eb6a81f17d5", "12481dd3cdb2a56f096cdcd5f08a8ae7376a48d51ab72672d253295fe082e929", "1659a0d59d59710d01e541ef8cbf54b1ab4c3f8b91a3ed43a21876aa2a611108"), ("126b2e1b9d8e699855359804898575cb8ea9cb883cdf220b00fc1091f2f92ded", "2c0372b3dd2dc890f8f30a1dd8234b0dd2e6e01befafdadc50d0cc84f5297f7c", "1f1133726e6441be6b97730bfb58363ab8f8fa3a539f2d61a513f58e284474e5", "04b302a6a857b61b32bd15782ebecd8e765ebd39a165e42329bc653dc8335efd"), ("2b9df9e01a54ab249bae63e2e94f975289c2f4de033b5f24eb168b6097d8f7b3", "0dcdee35db57e1ac8ecab498c1b33a83e9ce3fd593693028419bc9729813da82", "045b7d9fd8dcd8cad8205f3a73e7c50f2edc3f344ee3c942053a3e1fd28fe55e", "050b691eed6719edbd847c9472af17a9d189792fa8696c5a0687ac39e8dd194d"), ("13c4c978dd490a4b407368f9dd3cf13d3b251c44a0d7d31db44cb9d0eebbdbf7", "0525a426dcf713b62dfa1a2a926ebd8e520cabc8f72def2399279deeeb992e15", "2f4fbc339ca48828d6984db8886a2a03022ebc39c3cf7dc92d5ac5b16af4619f", "2ae88924564f8212fea8367c1a33076cc5651fbb1f9ede0ddf6796d99baf1669"), ("100f6ba71215206c8bba6145cbb3e61673d5687e57b46ce069aa45b540f82343", "1be595d1580c001967c0a81f4eafdf510d219f659637cbc3198491e6fcae6e49", "1d89d8a83b152cd13c14aa370754d830a257dc30b9c8affa4c8f49315354d90b", "1edc5abf72dadc3d00eeecf566496309e6f18cd77cb37dfed3f32e92d379850a"), ("10d57f5e3e481cfc78d69bde5d6b6147112ae435910132fcd7033ac694122b3d", "1db53478decd6d2f2409496b04d8f760ed43139b5db05c8e149dd2cec8d1bf72", "172b0f897da1182993108fb84f5d253dc8817bc38ce616df633bed01bf545501", "1cd95118f67efc06a39affd2ba1a3b7063eec90cf214610e9e426ea9af3ed886"), ("1efb978ce19c1e686fb73fc5835e4427b3db3a82e959dceb1f156aa5bf45978d", "0ae1b24ae16983bc0535a03284723350956130adac358ffee278f6c9463564fc", "0eb7b61527da7ff9be25f62e87308b401232f8c377ecc2fb402e6cb49816dce4", "0a04c2e56b4541c2ac994ee27ef69de04d62119e870bb45ce9d19fde30d7bd2f"), ("0fc9569ac35d9237d6f251941a7ed6b52ee79b9496e3736bdd09f9ef881cb9f9", "0238fa84a948729c8f06e2db2359e5ae610252fce956edb327ac21ebe0a59c3a", "305b532799a196891e630469a00724673f8e767f3c6997d15969e9ccdfec0633", "2798de6f3b893baad0c031bddb9b427b7f04c2308e6a518151ea6a797cf09523"), ("086579b580758dcd340cb7d0c1675e63a9daf7bca72137c5a41bbe2e6a2178da", "08fee320f310e278523b75e735a61fa563628bc8167d78775a57318361d49947", "20466cd8b64f835659bea5505885f9f32721d67015df99c7b32b7b1e8fe76a8d", "1c6681eaa62a43674349c5dff7dc3bca04db502108733498fe17b633e53d30d3"), ("280c4f775c55f22f1a34a264c6a1477f1d6e09da22163fd5aa3bc3bfce4f2680", "30204e83ea2627dfe795c282157479d2f97c02575c5a39fcb6a2b91430c46b14", "248afb56f8d4ff86a9ab1b7c14bbd56d66a63447eb5acbc71e84dfef2e3a4d3e", "2c551138452a433c7b3a9e24d6598f02870246c0024aa59fbac1a5df8336da0d"), ("0d42bf2cc84c6bcbecad1b93fa872f6425b02523c8efdb151e054e1c9b2c4d0b", "031b78759913bf32a781c4b0822b6c59fd897794158b70edc727200181b39f96", "0f7f0c65357b8bdff1b2a9cb7e272095f1053916821caf7b6e1bd0024fafbc14", "17236a9d7e0c849c9bca50b8b5b0d5031eb4ebece5acba54cad5bb5cfa47429b"), ("0eea7d05a521e35895be7d528005785fe35b79d3c470767ba8c1e37a2f3fcb97", "2c4159894d9f815e20a4f4c768ee1b514480e323ce2d7a6be653835b488042de", "2fd17656b24939fc4f765f0c409ffe49a0512997f3fc17614a8f6904e5c28439", "216cfbf7655d4309913cc3f773d11a2daf3c93a5fbfdb3036a532a7e4f6a31e5"), ("0ebd27f39d18cd617801dcc93cd3c91938f4ceda6898275b2b20fc1ed2bf016b", "2aea7586468e0544776b330b8cf78bc83fc40a7f8ba5b18a150e44649014bfe8", "15aaac05eeb4d6840a614fd7846634a1c4627733a93cd0c632d75c8d732ada7f", "19171b889a92e9addcc9b9bbcd5360049a154cd2bb52293374c8dab07d3c54c9"), ("197647f9fafa94d3a375f2784a024c65e24c65273bad61ff28b9b323ef06fe6d", "0145ca88f5618efd4420e12099978c9e7fbd08e0913dd5182b96eb7bfe162872", "1d1e1e4f04239d4526dc348e48956e3509cfca0912982860bec62674828b994a", "0a2553de67e0a024e7a7fcfea959a354d27a73e7b6a93b5919ec6f7bf6fc30b1"), ("0cda8af7aa50233cc503c7f8f3b5b7356442cc5ec2bf9cd91cc696ba0e0ed5a1", "1e71f355a13305143c0d2ecbc909635a1e1219358acef3727304646bef9cf441", "07c64f7206f348decd316587b7f5fb0c9fb48a4b798a56958bd1fe0aa98bfdbc", "2a97645a40148ebdd836e2976949d9f7e89b507dc2f381252f90158278a071f0"), ("0a30b8b9e93f6c1229e4f465a23ce7952b0bf520908d6d9906f436747dd5f1c6", "0f93f24f9189bbe82d3b6fc718863c0f37c3286c4ce043d2d35cc7f9c1a4e8e3", "0643b3c7daefd6e49b8c23b78d098742dbd240ec0151acb9e49bc6f1280b69fd", "172aec43da03fde63e47f9219eabab796d7dee2ecec01d66e0d60c20a05f8d40"), ("26ce14340c084cf501e8ba789e6173d53ea1133b15782e7e81ad34887b6bb546", "0c373f5e34f665890a64522263da709758c42cd2bc80ec149a663dad14b961cd", "08624c4f0b1000f9b7f3d8d804bbcbb243f5c4e9048fac205e7ae369618336bb", "079b17e0a6ee07e43c2e031a8df0d9491e489ccca07c9e919ce4a9fe51a18af6"), ("1ca35fa08d0817ab7696cb721b02a6d9bfa4244c330abdb2dd40819788dbf0d7", "134777607e6ba101bf3ce190620a9927dcea9a4e3245a9c83014cd927723c8bc", "098c02e554f548895670fb6f2f26eb8379f42eb9440d2aa09602e3dd915d5d56", "0381cdfad9f2f1252f807bade64507cd7f8ed8b2184018d43de7e20d75d77a31"), ("22d3435e3c77b6cd83a78d8985077d4ffb6adbcfccb94a1a71278641f982bc00", "0f3fbd055ba5c18d4c3bf6ef7170048b5cc222890a5a5dd666f5be6c53b8ee96", "282f6bf0dd0c099cc4fc69df78db874a3d2a99e32f5c9f45eba5cc218526520e", "1b8d65095beddee4027ee117053935f8e14af1a7a80ce90a5bfe8cb7493a8dc0"), ("17863b6d76a799433422482c395f304989bf21fb000c9fc200ab44dd83515954", "2d726ae080c0f0b8bd202567ea9e64d7045474ad8bfa916632bc5ebf2bbd2607", "2db8048221768e556841d1ca87aed96febe4093a3d0878368caf74e205e547f1", "271e95374f8c576ec46455a1f991082d8dfade424f3f3e10df96012ab6b5999b"), ("256504efa278fc55b8d241dbf0134ae90f061309b21cbbc9720c05ef55db722f", "0e339c593634296ad3a420059d44e707f9e359bec5a2d1f42b00622fb82caf1d", "1e0322312eb0222959a1a859cc6f6db4b0348c2b4aab95f6858bbfe7969b64e7", "20b2804e35ae9ba5f1f2150b30bb5af81e947536a4f1afaed1de93f6b4de762d"), ("1f5d66263c760adecefe0a6901a2cf1b8af2f4aa63f43e7f2f278b606f28d742", "18c4c264a91571560977d2b6bd1e3ea8b6a3ae3574f61fcf4ec008c8f92ca4ed", "203e23fad471fcbd58fecbfe0f7c84263ab22bd48089c07d1db8228fe9b3c719", "22adf32069b89f5719a9f673ca83a3f6fe474412ab044ccb2e84535e06192e62"), ("039909a11e80adb318ea1769e8de223754bc9c264b638a35ba8d842aa8328bb3", "0edfc3f26dc6d4e927597b7ea4ee3b919bdbea9be6868ed57a99bcf8345dccfc", "0ebca8945fd8d9e0e498480b30325f00434e2d16a4efffab4efd21e5a41408bc", "0d787c296250ada36c54a95953ef102da211ee4a56ba670efd9ba1773faf3aaf"), ("2797cd18b7f5306cbdac4d71bb8c6cff3a54dd883a2cca792948eb8a2e8d370a", "014a85d35cc3f840ee416f360c0a332aeab6ae273cc0d362c0c4ca6c1e56577e", "09e0389ad14de6bf4818fef9d014eab48f16f6247028dfb536e9da8148b2f3a1", "20659645ebd5e241f476876d1244c1bd606621f7c0021fa7b312d91f7c82aa71"), ("06e51d0b2a90950f097c16eecb5fd98f7d097fabe0a8f13f284f113251a1f709", "27ab3b8921c798408a50a90059deffc29b00ae07ae613a3ef7c3e7406eae4757", "175bd5aa8ca0e81469b27ebdf5b5aa7db1d6197e2460c227b168789047e4e6ff", "116d561d6248b6f5661ff346140bc2e1e832447cffeb7b673445521538584385"), ("1f52e3575503d06b7d4c7fb7e6929050db081f6cfc81d5c0a0ace3b675546eed", "0faf58c955f5203b75c84e6f55700db3bd0ccfc8caa60308636932129de2e98c", "2bd3af9aa5487d6ff22f2d49246624ab67c55c2654fcd867719ac8a38a62834d", "021dabfb428a5f9fa39ff4ab7f09defbdf27d029802c0a59d57f734d6bf46219"), ("2ef1f7c37e30fa1cef73237612e49e5fea02c380706556bea5d590b37537e95c", "29e4fb313332c9ec15cca550bf4bde318c530db977a65852ca7fd0e8998e705a", "0646451a39110fa3694631e7da3941eee281f1f9bc3b55a0004ca5a8b8255e64", "2a8de0f7e5e7c67f56378c9e826b95ce00a5cec8e56927fca074ef1d2802fe03"), ("0ea03eddea8ece89b61b2256fe051665c3b83943f196eee4f799e50220ed7eb1", "11655b8116e8ac7c8dd27453bc22e1c8a30eca194ea21cd55bf4ad59d2c606e7", "06db6256991e3214ba228013d80a304a357af9404d6e51a706c59ef1f7d1e355", "096087eb7119030f62802c43acb865bb72389e5d40c40237452b16abc8193fdd"), ("2b07f8f279a351b2c62179f6cb0483eec8e3d03fab9a4856240a1335b3b33b5a", "097e8b4530e67b29025c3b71ef8c60f3f5d79d2a7a7307b98b4e6b1517b1fd32", "1d636dfecb2a93a28172cd75d6e6de34f44ce06aa15cbf3822a0ac5636c6a8d4", "04f1035db80218be253766f96448e4f2040ea427b67ae1a6d1db16453d1c983d"), ("01a5c73d0f4f99561d31008baa44ec987ff85ea1d936b5bc2141b622dd6d42a3", "129cdeeeec28fe00764bedaa7c74c10c7067add4dacdcc4c578008ee153dabd6", "1541ef6ad4b634fcc53cea1e2ede04b40a818899708472e7b4ad55f4f373d014", "063b51416f50565e460d6c4b967047d747e21a01a6b94e051a120693db139236"), ("2f7607f5fb15a4f1eb59c48c8bcd6647720a548b41a3889a0f8ccd6b78c47b83", "0f982fb758d31fceb98bf86b10381784edf66b7e0a037caf4f4dc24e3ac1132c", "2ff27bdad22b5fe759c1265e9ad6446fe7946e8994099b6ea10dc3c72f693b8d", "14df196d73a80ce5d9b5f19a2aec03d7113c0f5e2527952d5a3022eb0ebaede1"), ("0ff575ff87e7c3227e3503b670cb160f896829c778b36da18ed46ff14c3a12ec", "229251996a25f69a6b07f99d6c66595d42178acd774fa353fb67ce6353fcc770", "2db4b3d63c75eef8c4c101e2bdfe6982a923eb360905a1c49e474f127eca184c", "12c967aa60b4fd975c003014da64bf4f3df093b55151a829a82c970dd6836133"), ("27d8a82db00866db82c31a1877dc5f3f6814e5332d093dd8b903ddad282dba70", "04ff61ba37bbf9efd85a1c678a6813c103eaa2553ee8df96b7c9e5afd677b3c8", "0af76ab1bcaaf514c24bc4365fbd5e1e07ceafa27de8e4e89870f6ba9d5543bb", "07c261582c5d4a60e9c698b621e9901a2415993817bef86a8c832cc46afbb5b9"), ("2663d7a4a69e8273c0d30a9ec510a5e419f070fb2f4e02521c2911bb4314b919", "1dfb956d440c99f4cbef83055e709e03044493ecafcf9051f307b40ad1aba936", "104e68659bfcd25167299eda6092a07496d8d1f94f6921e452820c1b0593f1c7", "2f8a111377add603c3920f828d08475860d53d0c3c012ff333c6e61b8884a4bf"), ("17cb43981540f8340ef7a559b1da0ca87e851d1fe675b6bd9caef87f2bc17041", "29500e7d5a9c69b633bdbfc1756ce99b445b7dc948e5f3f415991c681d3bacad", "216023709e353a1354e58ea0d0a00907c056bdaa4d83609631d8cca12c09ffe1", "026ee4261d7109dbcc647c7d2b75aeae85bf7ac46c594c4b700e6923d4bc0396"), ("2367a50d4232d035075f4fe93ac61f6d07f06fc5b992eb85598e08457b07bb12", "24c8c19590611871322b6a938a15dafc1c3c57ad056e11fb91f89fa32411177f", "06b68dfe08b8a7fd49b58b4b2c4872e6e40d1173d25ce59219b5522cc8449843", "1d103f5c0dff1e5d3587c3dfd07bdf2644ca542a397ca91b5f2c95ee3a3d8817"), ("027714cfc1fe5dca86b7740312a5e11d7322d62acfba076a8c69d52dbeb4db20", "1c670540b0ae611838d720586a891e70dcd8877a1e24c508513c1afaab068309", "2ef9054586bf70d55c5ed54296421c1ba9a78d520a416f61b1ba6426c8ee78be", "24699b462bf4f542df304c15d81235d4f053c4d47b5bb5708594b41fc1bc12ac"), ("23ce5ac9f4e0c4cbf252bc3d57c2c92e44b43f75c8a8448038008a117840ffd6", "2a174d29bc1ba837c509d45ce68ecd8a8ead666afcdb5bda0e59b0bed68b25b4", "1cc88eba53bfeccb8b604fc547af9f6ee80bba7997242aec1cbe0b75ed1c2124", "0263a69b44a2bf32bdf670ae6d0b7115b513a427ee93585b49565ed89c5216a4"), ("28b6a91e0098d84ffb23c218e8860c52451937c4b8175c2c1ad62a18be6910d7", "0e41e36c639166324d1c8425e501cbe1c28ec0424b3969354e540f4117665e6e", "165304fe35670f5ecfacbc2997e3b5a5c0ef4cecf701e346597012e7d6d13298", "10875cd9903663e81eb6dd33c37b407567b8412ddf3bf3d97ad45ea4b1d649a6"), ("1ab921c3a14535125bb4a26269f549d8a2c9abc301bce769e9d486ef0d205b41", "0d85c3a974a4a1c39a5b78fbd25b7a2f2698ee8d717594a5892ce3187c18bcc8", "185fa7df2e69b67416b65cd1015b1f9c5635d3ebce7e269cea7c890ac8111663", "16a01317d67587603e11239b4d1827d2ff0f39a8d3405ed48db99b93d8822312"), ("0dc1433da5d3c8b89fe5870dbc75c25395665fc7a850691374d35ffcee12961b", "0a1db83f93a8214e29f7b6379ed7bad5ba22ad901522fbde00c65096d3d78fdd", "228268d24f0d4f38e38dd8f8ed2ac91de6ccf36515ff4b6ae4c5fcd73795dad7", "23a8d91aeda1431f5308e796b24ff603fbab799319eb67c558d0b67b6921a0e8"), ("27deedc909cfa87174049d70a969d99fa2091bfd49ea1481f027e373af5b930b", "0ab16337c7f3e2c378c42d171e9c5e904cb29eebf3d0153220636fc564a11b1a", "270cd2027cade28150a21150e3880af07bc2c4969d111ddefe494be8695a9029", "12392c82db7b598dc37818966e875d6eed815ee54b845dd1a0a33c9716bd3016"), ("2d776cf71f5d207043a2b5cf2d33251112b9e2e7038112e0e2f683a388fe7450", "2f3248133bbfe5509c222f4dbafba456f604f4545ee4f8cd9aa320f79b406511", "24acb7a766b4f039b2f4d731becdde0341bbca07459d2f3e9964c55e0e32ac18", "19d045d6ef789bde35249c096167f57c4583e2405a9702c69d48bd286c17e873"), ("1ada004906b7cbc3ce3699d95a08bbb6f1501332a372a90e7be7d221afc7fafc", "2cbba0a09dcbd842da8bbee7637102bd657159da479001e541b387f0d9bad087", "236ddc6cb1211ce44889b217030b5a0afdd66c0a5267a2b257dbe5a0b0c1d6c7", "12acb9207c8411c68c6eed42b5c0d87e1a1dfaadff0c0eaa5542a64cde08a747"), ("0ae174e6d8a00e66cdd1f32d1ab79b329b8d4e1009bfb2c0cf4beaa7ed366f48", "06887f610c6c37f99292a09ab486be322c1682360d1ed049f21320996c7f7cfe", "262b63b3e5f2d6049277d665a5bde0bcbe4b6799eeac5a13fef4008881d1e0b9", "19420d06a40afb9678bdfcc992ef994144db5fd7349c42c1545f64b615aedba1"), ("1123b9382ed227766b58756f306dda3ae54f8d55b3d08d3e874ce958e84393a2", "29437ba35ac9b6e7431a4d4ba5f24826dcb112e9c89c6ec72465fc5e1907a893", "0c4b68eafe70c754153f9e14bb08ed58c59b6b855b1897c20563d554931cade0", "219240ac14737605d012f9b9b1739281570ed860acbebb7ed7a374387ac25c99"), ("18932a6c9b112d3a94c6f0535f54e6ad63fe187454a8dd9452f76c66ad60027d", "1dba4e9a852130a85433eb42e995c29bdb4dd89ba95337dcf57f852d12ede159", "160b173f3879ae4bd73dca7bacb9ceccaec781d5572fee908b8cd44385898c2a", "1f55c56027512943f601f22897979e9852bdda5f2e3db42c65c1577660b1f546"), ("0793ebf4bd3e93c71112627f985aaa73920c2cd81c6d3f269f01032763808ca9", "22b36dc63ec71251e11afab0ef5532cfc016e80dd4fac455376b2e005d4fec3a", "0da2312bc9a8d786e28308a323520003a859016f98b11dab66ca6887bb37166f", "1837ac28887310f96517cc3a89b4a4232d83cd229e653bcc55223e8dd86cb5e3"), ("0c107d12e9fc84bf197d8f38ff18e6f74be7b15b7824b0f515822f2208a3e945", "14b060dbcdf34f4dbb665d2d0ecc400a7b4cfab4618f76d6168b3a82b8fb87d9", "19ef9d973b25e9905743d408c795fadc851443b45ac990ec397e92577ebccd84", "2193d45c383751fe0ced7b6546d0d874c701cdc2cb427500c71204a851f58a1a"), ("2c30a854d21fe77be04428672bc8fe7283987c7a28c1621a0f86105a29b8928a", "08fdb2f54b171cf2af97ce04053121732c84f3a894c8b717e1c49bca06400497", "274376195acf635db34d8d4517bc9a7ef0ae511d4345d044df4bdaab1d45848f", "0b41a7fb30e7c9c4a845703c357ff2c1dd4f923c1e57e34a8b35e9adc84aa49c"), ("195bb7d78196ac710744c5195f8b2991fea11d4be695f4fa8630ab71e6164e36", "1360d3024f52d5f3ccabdd589f5de4948cac236c5c57ae94b9e8bed0342e7094", "06fcd92587c7df1a9defc672f87f8e704777c0649d858972a66e79977a2db4b8", "2b0960d2d56c88c7f8977a2d0b3411c19037453b3d1af17b0439d88466717dc1"), ("1ad34008c6f8f1c9dc86dfbc678f367b9f540bcd025f6af133cffa04a039ced2", "11ac0467a0454d1deef0531fa8d1f61663fc4ff2d102cf1928e749f214fb0ad7", "0b14db4c67eb9ec968668e02ca9b25bd3ac045af5a10e583fb378541bc09cb70", "2a148f07af6eccf17b6e3df977a6e0a303c8e4f1a57d1142c228b4e8cf53342d"), ("11209dcf466f1558aa90a7656f324b0890948fdb55165eabda2bf383721f5520", "2b1df08f16559faefa215c46cbe7acf94ff2342dfb2ce04085cf582ed2c81e57", "008ed48e3ec7967191231c0e424630c5f915c82f42922a171b86d7fa5e84a679", "15b26e5a311cdae9a07f674d0c287172a7aeaab67f490893854b61e828a8e93c"), ("2802397ab405cdb83910e44e7320d101897d0dbe06827347144f082b0eb6576e", "099ec5387049196f78971fd3a54add75db46b1b52840ccf05a29997ff176249b", "09d77ca297ce95869666284676dd98f0ad091d754ef2a1ff5e0060f343b521b5", "1e39a28cbb790568a519c1dd2ba08d6a58c3afc1b01ae78c69c71b6b80459601"), ("0f49f71c1e49cb93fe2ed512b0059a11ccdf4e1a785adbf7e185e9e4f880ff18", "26c628b789f64b90ef42318d89fe9987ca80c9815eeb84b459594b7cac477931", "1892890fb0891a56444954aec8ac43f13c941787885ef2f4a01f65a163bb0831", "2ffe5590d3efb433aaa87ba22dd4098c912ff7409c7c0d571199c1bf80181f53"), ("13dcf080a657cdf1e3985d768de39fdcbdaca799a5dffafbae86c3d8aea1206d", "0a43867a40b1d6c2e6e2b7a9ca11aa4ff8311f720c7b981579a1b7e7b06fd4ac", "2f106c9d14064282405a565e77ed097635381a1d1fbdb942a565261f3def3d84", "0b4d6a3ff4108948aa7745f1afc02c6e4c3475de37083fd008e35b3bd1891086"), ("0b54bb1294ca682f52a590e3d7c5afb91b5aeeac59a4d859fae7657551493a1d", "1e018994c4e1c30600233b4120e1728b1f018c8caa4b9f98c686511513df78c5", "2576c303d0d4e753ad11a1f1cc8447018a5c6c88e08397544e03b4b0479d4076", "1800ec5a0f2c791a1c53413d0b17242476e18e532d25d4acfba5a91bb4e7f334"), ("0546ed5d3d3bb16edce73ffc6eeef59f0362ee7df1b05aa0c476c24c0b7723a4", "2ef5081c42d2467014a8255634a48ef741fd5a168296b911bf270befb55a161a", "27a366a43e51ceb624ae2f97036c8f2c7b4f490ae11fb04397e867e8688f0aa9", "076e90d29fe3aec64f9d5de26fe6a84992552b67d185163612d6efb708ad059f"), ("1c4a926a35f131ddb2562b63ed4b72a190c8c2a288ad4594b3b090a7ed7616b5", "29c6352e1f93e566a4c033c3245844342819a5f29e662f8e7f2b075c0eba2d16", "009cceba974e639af5996f4e69f64a109fc5f9e27dedcf32ab3847d42888a22b", "2608d276b986b7fbbc9008e0efae1a4302c15dd1b0f0fdf463b00b368372d7dd"), ("0056f08a7ddcb3b0d3b4db2e21164bf51525ef28821778eeff8ba49c3acaa2df", "03eddf0c5b9cc90c3bc6442df81138d4e9f20a896dfa839a5df49bb1d46e7a16", "23af484936d56e647f37d8653d6bd7cf50b05496fa12e43d26909949d5c93aeb", "1f4c2f3bb07fb7ac94e572615aff060bc882c0b3aadd6fea94fdc1540247bb2f"), ("0bdeed106edfcf03f7dc28fa4b6d64f378adffed7c261893132c413c60b79e78", "2e79363dc28e7d7afd6e88f509aa389018a52517bd14871a70c9dbb7e5251ee8", "17f91d5aa56b68c32ff437fa334dea796dce502e100a540efefcffe8a11df4e8", "1421ddbaab0a3aba409b8774d12eebaa923fd0e90121056aee748f96da5541a7"), ("0d21ddbb23a397f55f9f88f7e9ece9d6657f15197f074aec31281eb11714ec91", "23eb593f206ea7930b32b375301c5624010367a6af5bbf638d38a0d6f67141a9", "18636832b1518ec9234ddb48cedff451335e97ad2d3ae06dedb228885cb4883f", "29e6e08a8cecaf2f4a09f118c87b7e0f497f1897053971539db04aa6139a2fbd"), ("11f944760e0261e55922809e9e7d58a1316124545086723528a7f9b6e4e389ca", "02b1790c39681a3906306222afa7b0e3e1eaa1efb4f72fd5266ebd5b22a8f41a", "296c8836eb44b27a5a1c5ef12ba287ad9b55ec8d6ebc0842ba990ea50d365bee", "119de2b720f0a40bb992583be3ccb8631155eb118e9cc202f46b78aa5d750037"), ("141331054f59c94aa29caaa6319c1515da79529e129910e6cb5678e848baeb17", "1166f6f3db53ae9afa9764c72323b62c545933aa266587b010a98451c8181b40", "1f11a6cecb5b0d7c121091dfb0451abce463799be4a416b7aa0af31f47bdceeb", "13dcc941651ee9295022a6ac24ff8b3359846abfe182fed12e3198cd2fe7a8bc"), ("13573fa2f9a7916cb72f8d8f2cf0b001e76c0196db0e4b099f9db988d5fe869c", "2a70bf045ce44e9d9c271d07fb5796a25e5ec42060ebf25ababbc4cfc198669e", "2e94f30c6d962f475ad3331831baf58d3633fa8f4bdb4a27353c7ee4547ddb87", "275627110fa0aaf6105b2fcdde1d66696a890fdba4b028c1a4228b2a2488d646"), ("03a9ffbc8d05649577abc7bfaf9a8f20aff9ff04f7b722a5dbd491afb3df0650", "2511bd11486324e114bbec48baed0e031dcd90a5a530a844218c27575d19f9b5", "259f953a752da7d935ad6794a51202541c7a29cb0a735dc91eb789c032b9616f", "1fe96861abc3e5bb7dfc0ff4e29493106943332165f45b186e6f0f8586ace5b9"), ("12f7c98e7b7e1c808191bfbb53dd18fc6d2b4f2bef808fd2865e28a7601820a5", "0fe14eb8afb0844c4ef2b9fff5c7ec7a068d1de3077d6264d48f69fa85fe6ca6", "179fb367f33ba6526df69dbc18ff7961ec83ec940ed8feb7c05592c6fd097a7d", "1b474ac6a9551b66c6557bb415db727065c92506c6a8f4702c935b7c33c701cf"), ("283951861d9c012e36e25de76cfbc150300d27d66d323eb2b270d9d0b57fbff9", "1d174bde2081b9af200bd07b2f8597fc6565f395ae0c596989bc1c13d75fd467", "1cd1f1dc5304587036304ff4d4d2c3ca641780afe77f52be03f2e3b0d2759492", "23503c5a73999e0699eb3391b322a5403c8843bd1342cf829f02db211edf8c9c"), ("0cdc3696da8ce737c5ccc724e327c755af864afe782f92302ee90a8209bdee01", "0b34cb62c1823a0196c3059753a83d52a99c4cb820e8d265e61accd0fd91c96f", "1adb306a27c33d64cfd93506dd4f7cfa3f85f4316a172a27162ba339fa0757e2", "0bda2149b28faa3ad8792c93beeb245323c8df7c3c26b1dce2a0274ea4399815"), ("1e0285383f2adeec20fc2a01cded09971a2607ca9b1bed94e3315268fd9c1ddc", "2655940037d4b756f8a0b7ed814e5aba339e27ecce47384efe5b135aaeb13bbd", "10e90d5c7758a6169982b1dfe231d0d6d860f94e1109c345b791ccb7bdd586dd", "0fa825da93ec9512ba69fa39fb0563d39e2323d58ba9ff9c88cf547a034b9483"), ("0361bf42526a09ac9adc25ae552735b079fea7e7d6b5e3c0621bc0f0b8bcfbce", "278437360f8852617518eda76dcfb73556f2766ae7b5fa77ea86659317fd9ba8", "2672da1356a6910e7ddfebc1bf4be1ed8dea7dc92cf7afb88f5b63f841388a92", "1987205b68bd5a2b2d916139d0cbb3891017e3c0389a5301f3770b7fdbe92585"), ("0705bfb8dd364855c1108d0e41c68afd514e65219f922265f316e681ce99b3d1", "16f8f764246c522a2c5e0a00185ef6dcf6250a8d35d09f07f6ba4a7044da4b4f", "15fa23fb60aaca178f2bdbed6dfc508613e3ce2c0a142a3fb52878f8232645a6", "0849a1bb2321707794916d22721771f80ffd3aa0496626dd4f0e80bb18d1f893"), ("1b943a8a7c316aa544a56f9e1123d70951350a22a8f6ab1597c25ae9652c3dfa", "238fc4c97dc5b7d9915f11ba7f0512af85b5f19b34d06fb880d0cc8845d7575d", "014bb92fb988e58f05ddcde5aa0b5c0b1f46a39c2fc09c221c330fc4a79302ef", "05dc35e971e4194c04ff12f6609f41365831a3ff68b2a98dda00673fda1bab56"), ("007aecc2ebae6d8050b3cede13c3cfbc1afef63980f1661b312ff42b22029875", "1ebdbaba0a4986c9724e5adb3a2fcbc4f5025cb74d4a2627d7a59d7d985d70a2", "2e343a29324e92e03d5420d241a2af06aad665ae4aed887e947326d69b5ad5ea", "2926a6d222bb70e2071a498c50939816c15675b3ddad4cfab0ae071700d471d4"), ("2b47f0c957259ba4e756f0487fabf6fbbbbef92ee2cc5e539242fb1c26980364", "0c68119d05796a75da966cdae814d9c425238d42951af1e761a78e3a20892739", "170a3b304465f97c680454017f155e3e85a0adc4f143fdd052985a81b8e59360", "0480eceb97b7cfcefbdf50e8a456c9784d15d89ae0b0c6493e7caa2ffadc45a4"), ("27843fcb084b91b576dbbe409cb17324b4b3a47659cb5756a12a7d78dd6ed18a", "2deb03538c218cee2485d49d06ebb3e54bbcf5a8d2bcee8d77182fd8a7c01f84", "1948a740b3a25a2a44246eee109c9c5deb8d8a9fdd2123ae0c4a4880fdef87a3", "17345c57c4f4a2106cca98f85dfbba092899a04c683e52c92c646569ff791968"), ("0ceb0b5a2140cf5e3222ea01f9b4833c76eac7750ed2e0cf04847bff2b09b68d", "1c5286713bde79a13219c515449d633b30b2db6bfe32337804ccfddf6c7216e1", "239a7f924587931728bc95413c63d9009c88ca19b302c51be26e2be0191650ec", "02235281b4c0079c48aa6cec690ae42c649c81c179e07b299d3c12671979cb3f"), ("120ef88ebd7944b71234eb6ae3830aff37d65945ddc950d1fcc2e70a775a5379", "1e1540226b4a109adc31603907f3371ed6d5fb5f732eaf7835aca2ee0f7d920a", "2ad77c89db393dad87bd82186f8789cf028603e3b8c2bf51ec89458245fb0be3", "05a0ca7056e47ed4b4c8c278a3b308e028b13423a2c9efe436f339c1e8e76fd3"), ("25a6f8dc586b97e7426bd690ff5def383a1ee0d79bc22a06c7730599561c9fde", "212ca71ed832af44fa870abddb967e931864935a3f806436983446978c798b05", "09aee97908ac98a095b4207fbee197cc539eefcb542a4e7f1125ea4a1441bbe1", "2152cbc9d9edb2602e3d53771dbb7238c0479c51fc02c9113aae7a68a4c34805"), ("2d7338531be97df84c64c7a4097434ed095eb8e4d86da9be9e198cc339760ca9", "1d446e4c6d3ca9f19992d6f3a2a2800d508c1776bfc72cc0238e8bfdc1e48bff", "0c718117397eabcd6d31ceebb9545c16e4e95768af88016f453dcb1e32e41297", "031a698f8cc578bf543bf591c4cb6e5c25fef0cd1dab1dcb56c1dfaa0250338f"), ("174c700a256d463b1b826c749056814eaac9e12608a3f71d5e4caa47b4f85b1d", "2b99e4ded531d84e60766fe5925060b90ef17d8770fda0ce4afb691672011f08", "255919732a8e7fd73e14b8d07fc779193cd22a1420683915e7c78826cebb7b39", "0dd28b97ba143e80b68f3383bdbf1e32d5be93a2ec90c8b87187cba1433eedef"), ("0924dd5adc2a36bf510adcfefbe8f08372129849174717564ca970f98082cee9", "212b3a1e734bd48ad73d6bd0e2a15de50f4138eda5ed5b63639c42a8ec8cac31", "28ef0b27662e241a98d0e547437224993633d581122f7953a9aadc7414b1a9de", "04ea3bc1c936bd0efc16330a3eae6a59ae6ad1f20f965c6a2db1015772a9cc05"), ("032d22fce3889e44b57cf8401eff9f11fceb05a098d3adc8479219cf741c5928", "2bfa35de4e8df8a43578b21fa10e445b6226cbd805f5f1e9906499253cf07ea7", "14da031882dd4d2c7b2771ae67db26bc8992bc284f88ada729b0656ca2afaa57", "256b386fdf90b229251d78acdd81c679ba02711fe05396e89faa88aaaf15a4b6"), ("24269f1252c15590227732dd5d9fe2142632c2e689f1c52a4f2aa08fb0b70389", "0eced4bea693650a820f76d554524bfb2681185eb5f78ae0449715eaac12dd41", "28cd84418422efb0c1e7b0526ce130609832dd49a3f507d75239dc876c9a9ac5", "0af5d28b3d010586cc0d448852a966d334176c6ad70d6befa0524f282c6af270"), ("2132152803568743206e795b7ddea41afb74c2c7006dca3dc372357ec65267a8", "1c0aeb1869006aa48b09f7c4f4f70c176f4ea1cde6f4d87546d516d4030a16a6", "15c2c0be1f489ff17eb352c274d5624f52f4b7d2cac121ac59c309324a11dc9c", "2b336c12d235fba5e944818f0817c7c7dbb547d0ea32a721f94115a070895d22"), ("217aa9bdeedf41a3987fbecc4746dca3bf677f6c0ccd4c592b2971bf96f9156a", "12d4a1ba99cf3abece578ee263c41a3d62ea2f3945a665a7c5cf3f5df8525e7c", "136d3dde04feeb3813a6569d2086760272327598b4200fc75f410d9dcc15a79f", "103e1f40d035fe7c83b241e7e0aba2fbb0b816535a4f8f0c4331677e210350a6"), ("282ae891effec78c954cdbead116f9936c899c9586a1e10ac90d6e7d35852a0f", "17c21c47f6770185f8fdab2b4cad2362222697458bdb06e1de1af34a3b847a60", "12863ad24d2d29f5586a4dfb96e25f98bee6eddd3e6653e740332ef71792cddd", "23213c2016e98ac86ac0c482fe4c9eb26508c6a3d3d7ea71adc2862d978380ff"), ("1cc4b71f8f71a5aef4bcf071268961a7460e914ac08f4a1c1d234968aebad767", "1e3f8abb04249abef8da175fba649ad268bb54db271db8e84e698be6cb0d0f88", "24b062efcaf4d8b4be9dd1e8cdb8f123be0ea23aa7e3555e0e66e139f6443a78", "140d5f0a3c98a5ca59917683c55effff2f9e5c4ee4da877629e8765cf2808fb5"), ("29980a3c4e8ab989b43b7fd4b3f63b9a38b75cea75908c900523be69114da23a", "0aa8946984c41c6ff0d789c730c0d886a087ada17f5609356c6197740fecddbc", "0748f04b1af62c610c643d9fa774c5ba6b6bb11fbf54eeeb2bf353af899ad0ca", "0de990f6f308c7ea309152e805574f575542780ca2e9e4984868d85e354d0fe6"), ("2345019a04680f1ad5d8503f182e3952d4262f453452f0b4a4630f26cb8bad4a", "2c86d99ac4ba20e58400500d7fde077915190ad39a0b329b253e55def993c696", "10835dd4650e1fc952eb90fdeb201cf5e873efd147154611c046eb63e99f592b", "0f0dc052549f739f99980a03f569c1a9f25ba474f63f017ddaa4982c399c25d8"), ("0197e0a9e8e8fa8a63d1599d7e9ea656bc2b7168f7d04cb38f492767c15cc2b4", "064497fceb8a45bf843b738c90d9419f2a918cc85cd67cf9b74dcdefd6cfb30c", "19b0948ef76601eb8b7c71838ec810d52c47d4e5cb6c1283997631f9b486debd", "003e34223d8caa136aaab223fee780fa59350e04efa2a84ad83ef473459edcb4"), ("1480637d5e9b6ced50c62ab208bb3f6a7b7ac8f5dcef5506d836cdf495b3b28e", "0ffc4f2cd3b5e56bae1c281bc5cadb797df9928a458d9fbb5e8f11c72fcdaea8", "107ba0ca7092a97103edf0c7ca032b878e4c39074db20fc98213f961e8e90d1b", "1d0b9f4c528b1f94d515744838082ea6e107caebcecc00932299c3b2e447ff07"), ("1ae1585c542d4435ca22b8ea1d370c479b7b13c9f0eaa5c719a287179f9c5b17", "08f42148926fea0001ca47f3c64ff00d974a630f6d41c1ae1b0f46a73e6d8ead", "226b526a0dd4ceebbce67f27795a2dd514b277ac1c2d51b57d629e67a823208c", "294527df7b87a709319dc1d4314eb9e5ded0d347b399bcc612ebcfa81f566a6d"), ("192bb3a9be093852858d58e157d87655268775d826fef89cf118c71fbc2a409e", "2edf9941c6c2f5cb0fc320f1d8fc68794815f5c6bead0f1b96fb8163fdb0eab5", "04f35d5ce2751382ebda1ef76005226efbb0d467ea5cb468a3266d269e22d8ec", "248281f8f4536fbf5f8ab2150e48d1c920abd1c6891d4d24d1e19bba8a33df29"), ("14446cf454fb164ee8d7eefa161912de027e885ba7212ac8dec880a07eb714e3", "2d93eda2c0950c02f8053e94ca845c1581f82baf869196806d35e3f3c0517f4f", "17b432a61385fbc80ac9cc1590e7d6d16696cc7368fcd750ae49e552bf607a38", "2125660171f1a880a9ba7c1c54561335d71ab236dbf7b9764dc58023a0a826be"), ("0aa14b1fb13ee15d797227d0ab8be1e878ce3bb93c2b9429b68f4d00525bd4ec", "245000e3c382e7172b5dcc0166e63fe60dca0f223341f1009b34cb263a5490ff", "1c5c41a249d28105eb01dd95bc33023b48dac66679f5827f061a975c7a05eaf0", "076e207ea2aaf5ee046b92b65bead6c2c7905318318782c928ca4a9bebd438d6"), ("1897a6e0e9afe67aa455f9bb2a69bed33147801259cc23f9faba3215e814759b", "009edd37cf0504411b05fd6cbf60a544f2a60d60910ca8cbd45b36709e9dd53f", "2e11a9439f63530b05ac20fe3cd178f96674c8f2677f628a6a1a403a03ffb99c", "08afaef775cbe7d67f47aab4b85703ddfadb1fe24f44d40c32dcc420e7311822"), ("24179496f7c9e59151c6916cf4edf3a446a1bb0ce55b914f5bad0cf072c25825", "1ff1e63e791450521f0d64e036bba754109ee2054ff3e71f34f47ca7a33a4429", "2adf2b66819a9e77422e9e8f8bc1c2ca0cc2ab2c75d4fb733f76c903a3a07c1c", "2ae66d42956af6f41ddaaeec26cdad8e25dff229548eeae94274d3fd11f52518"), ("251796d0bd5ac0624f867c9cf35ef1c82cd7a190094313b1ddfdcdfd75dbabee", "0a4773d1ac1fd3495cc68db93776b10f4d1ce3b3d896838a1228b339d47bfe4b", "03b451f70a8ca8afea6e2acf29cc6f709c8a4a10ac53a1514c1220ea9c3f34f6", "1ae791644453667fcac5aab7c65b123adec04c10612f74954245c5776c119360"), ("0f206b4909657a533a547dba82a5945c7fd9bb1b5394e8a3aef07a3cfe66113b", "055ef3acafb7ea8301400d01e54b7d3edcd76ab30d0bbb63e7fe9a965d9f977b", "275e791de00bda320dd7092df4b5d74d927f541f9e2c64d2ed28bddb98d37fd4", "03fb49c874dff3072aebd25402126089608cff701be29d9779d05f3d7ef354b7"), ("06a49177c3d4379b7be86a4f8a54c918e1b3b84f9d203caf8695082e8482f409", "1b69c49670d8f5fc712c735b3effc3fc30010f92ebdd86269b63cdbf72726984", "294358a93d4143570332be01ad308823b89ecc04bbbf93c3f4ad76e40cf89417", "2ae14f528ba880571441706d7751824c1985c9bc9c32a834f7417d9cf712eecd"), ("0e6cf8eb854430219e49b8b0331f26139aeada68ca8bb2a956b520f4820a55e9", "128986768b9eb91bfb81e6a95cb32b642c780209eba35bb944a151136d5a0ba0", "1efb8b54866f8b770c7cbc6d9788e8b28a7edcdfa8deb0c2baa92c156279ab5c", "232354b58f7ecf2b55e0e6df8827c4de0d995777039d36bf05128d34fc553296"), ("1d29a7ba83a21b5a5f247fd298243f7c065f2c03414203a34db7662b5b169155", "15dde554ae550509d6be9b233416c4f63fa1a35df15069165c84e185b206f81c", "0dfb3098a06a76eedbfaf419970a0483bb848ba8df137ecdfadb6824136ca92f", "0f380d45211242a3f987eb1de665715d63fbedce4fb052851d92aa9deaa1aa8a"), ("1ad37e968937cd80f56e1b9f28d9f15d0dce992e3931f806e3fc73609240d9fc", "1ceeab82c3a98c0a36f317dbf0f84097bf4ea34a9b6f1a56186821db8cf56d4b", "117df8b59a9505384f085337da3aed33893d758106ef81fc7c0d0c60b4edaf18", "08b2a2b64de171be063f8404e033382206c0a2d503d0f0a195e2073dcd43467c"), ("1165383965fb026e5722dbcf0a3bf2e10e3ccebf997b0c2cbdb5a409db7cf21f", "02b721fda4eb1579e815825e4496290ed564a4d3048999113e3c610aa3280b95", "0e620594a6ac8794c634aad1d1f36bab6c68a142ed2506972f00a59a4a3822d1", "2d95b87e040f0950a190daa5633454bea8d48ba53cf9496499671302f54152a1"), ("26724f025b764d3d4466ed88ea55c68218cd751b4da11d30772f8f0a2f2748e7", "13a7aec1007b8adb2d34845aaa03d3449c3dbb75c91bc88d4fc95e8eda0b93b7", "07305afdb372ba5076dfa6757f637238b87d58e9acfea7c5412270f2ff05d634", "12610b26672f5caad15b3a9c91e66d43f291f0b534ffbbf3c12f64b375120628"), ("2b0a5e3919da8b0d43cd393fe18bc4d5292acba8e69a93977a62111a0379398f", "07427dc5af7675a8309de2dcb9460b857fd0829d5ac02b4dc863f79894c381fc", "091d3437a3c567dfffe168ee741272b40d69029a6456cedfab4bfd9cf5fa6a45", "1c0ba910c86c132e1c709769090ab61ae1b7070c7d9c28205ad70ea6dfb43a86"), ("1b3c431f9618713b556775f7454440451e588b6fb0be156e75e5ae654d68d70a", "1e38e201a59f8d1037bbcf25bcf60ee02712bc1858dab8f50c664f55ca646ebc", "0729f066b4361fc4d14b8eb49795b9d30671e4fc6f9c3bd371a9349981bd0e07", "2ee15be59f31a59db5391ee0996e3c6629bc822f1e7cc356ed1f25b699ea8ced"), ("08f82eb75bb032174b5385ca8d52e8807a39e40199ceed24fa622b3859f508b9", "18e4d879a52e4a820df7d455dad1cdc0bb7d2eddc02a787c5fb7117e7f61a94f", "037b27130f58cd8217db43014fc240e3d2adea7ea5b4657ffca91c3263e1dcf6", "270bcc5854b4a9a3f60e4cc8fbdbc5e0fde24f3e2c16c5f882a07432d64c4b55"), ("2aab237af5f6476697917600d8699ea24225ecba8c4a4e0a3a4dd18adf115e7a", "2c049ee8eefd263b30c1d8a13cf844d3cbed45ee4ecc47a8c7f848321cb2235e", "1e3388da891934eedfdb7da604acd19e951cd3df0bb98d38b0d81812749e5838", "233cc9da371edd0f9555663eea524af18e9a59e050a323dcf9d20d44edab46bb"), ("13f1ddf7b5616ac391e9a7f9e7a73eb90e57625cff72d68115b5b3afca151a1b", "1b4d1d57d1b62b8daaa2b7aac237045be95f2dc478ead24c05ef5b9cdecc5220", "0a73458c9b29732c50543b0711209571461f5fa8345409a018edf011019d97f4", "2be90d9d43017d7e047cdc382f8b78d76098cba3a7c0e9883d0a81d77160b668"), ("250305b46849a4bd0d69769a21e5770ab8809cfe8b49d40e25dd04eb43fa7814", "066ad8109cede8be58848f4239c5834016d6c2611c1b0da85d60a2ccb3971a63", "1375b3f7f2bfddace5a49853654dcfa87e7c1c6562d6356c725e246a32af9eb1", "1f01c7b05654a28298a90ad49e25c0a54539e8d05c26c38ef12c13070005bbea"), ("09dcf3a70a0bc4a6f00e7787ba3b129c7b8e6fd37b13dbfcf34a1bcd8b5e2c6a", "2f770cdcf87fefd635b0e8e7ccefd2d91dd926e393429dcf846aafcbc69c8bed", "251df50d6fac938b4f9627f30102bb030a4b12616806e8fa7324cc4cb45a4ba4", "0da13be573ac14b37ccee35ed623cdd7606aee7ba1cdbd2c163303db3f60a80b"), ("25bf5043074279d13a295c5a36442bdfeb8fc6795c1c5e951f705347a205898d", "250e6acd10bdb1361a50658668091e53f748f772b3c4cb6bd921a88362e3e1e3", "09953e1df6adadf1849a0b266a0e0b0d2735d94b49f39f77e66f5ce2265cc465", "0900cde06a9ac389758b4505f0328311a0856d9d8834ba54668eb375b75519d6"), ("11fccb91f92c57caa9baaf1339068985778da18ce9816fbf91408aa1d605ab8f", "12c7c2f46458fb00679e2e5c30d52804bf50208cc4bba29b46d8f0dc2c93c874", "00acee7b8489b77911e3f67b0e5e73b2131ca94fc7331af958aeb54e31cc680d", "0027337af1a10368539d14a48af695f2d09d47be3c99717b212823875287bf15"), ("15b967f0cb40174b1891032ee4175ec2b7b06b29467540bd856d52596aaaf6ef", "15df6a2c3d5950bc47e0ec74c9e6fae00f59314a3f158a2555e1d14903ff6e9b", "0f5d2a3b14faf75fba0dd049acd6bb4abea16b0571114a936fc5112f80cd4e0a", "284f34b3bfaf7544ee049278e10af4a721b0ba31888f0d705306d96d0485fdcb"), ("1533a365843c0c18974d628450dbc3a566a16fb899c3a270e8f53eedca1693d1", "035146ce5093892d1dd53a2a7043979a95f3af0e2a56102722c19c4ba83df7ce", "205042eb0d6f39104ab7c1e8ee45b12cc127dded51b7b5349860107bf763f653", "25579719c9a8da2f4eb7dc5fdc443b3f9b2a2c41dda367b1598a1a9b6ad00bf8"), ("213fcf84f99d1207c00dd4851105e7a29b0a8f31cd3abb73ea39e43a8dc8e058", "0f926a4a965c99945ea49b3a6a5334c7e83f91237912946a119714126a6e1848", "02e1dc85c5ed611c226b78b22ca7ceb25c235cd6f91d7061e9c704d67989467f", "143bcaf747444be0b029fb7585322480ad318d5bca3067da414bc035f2379d87"), ("049e13eb01a4af9f84d24d4bd9cd9b54358ae701e1cc4fd55ece5b16a0cfe6c2", "1d526de47b981f4525dcc2dd753f7e4b78be2240ff637af0238f74d392943eaf", "0dfa3bc0918e07269fc14695faa3cfb9dacc0500ea1d7fec45933ed9c214f32c", "1fad428626f34db0eb68d8e38cab77e728ec3a2941659fbd317931788f305b81"), ("120f8e99fea2be0f96b27c3750e8f8d5cb1dfa1d8448ff54b8a7ed0e89197b2a", "0dec7d55b3433dc4214e2bc8a7296587e052ea7db3a05e7582890a521e1a8095", "02bce264fc62c5cd67306a7693d46ab24d95a3bf1c3c5a2d09b6288f9460c135", "2614c4a105b604a47c6b2aebaf96c16426cfc074bbe098288bed31b5497a3867"), ("08b667845805b0dd44e476a98efb903a66ad4bce79e61c4307c6843d20e8fed0", "2d12c995a850e31ca7a75da7bf24151d0b5887f36b63b84c8dca4debe51f605e", "26c21b70727dffe46737fd00a31876ce6303d004946148c11ef01bce21b1bff4", "17b287128484381b96aa7186d44baf66c9606ddaa4237adfea4c49d2b4ce26c2"), ("1f6433b1b4f348246a08f146a69f5a22ee59ad40938f306e59605ca1462f4232", "03254f1be4f6d41f390b45076af79f8ddd3adc1e1f8ef085f8111ae5fa0cd1ce", "104db1ea0b9e2535f4147a3b72f29f037436cf8b18b75f06d9187f5673b0e726", "2b650127d5845e98517465567a83d01abca93d3d46a68d7dd2e8decde2275b1b"), ("28d5712b9c79167623150627c4f64b968c2dce33d8247b80d2b703841b8fda35", "21e907c96ed67dd1a27f9cf4b7954bbc87d01ab28c817e33ffca57d52c44eeab", "11d0d6441f6ca250ebda74a2b3413759572d5182301e1c234497ebfc42965d62", "2872877e092eb2636e414293fce7f3d962cb289efb07ce79f8fd6def3e867511"), ("19214152653b3e864bc44e75f2923d286970abf68e83c08ea1f72b3d6601a437", "11479fd4d1bd9066c35015990b2e5bc844a5c2fa5b92b2c816bcd6b026b64658", "0f6efd87c97cebbb3aa1ccdc711a5d68ba68bab3bbd5d5d20137d3ea324b5dbe", "19a3f04d846fca9408e281f060cfe34246140b0e0fd75c6c4f831ec747417aff"), ("2ffd780acd138d4608e1809896f58a621435ff75e536bd1ac0c49dd2de9f3511", "181e7f95efd037f30d978aa288e13ea9c90897b80ccd212f58312c639ced0b9b", "1c575987cf1c1b7a8cdbeaca67851a81582690a662bd1b3c92e6cc1e9fe5d656", "267cb89c8a50147950a8ab762c57ccae16402db5d5bd4040cc4f1cfd24bfe6d7"), ("000fd79fe81d8cbb0a7bc06c572b5d5708d047afc94df6de8d2bededd4fe3709", "09f7fe6062057c630f6f9c6de7909fdee0ea682df22ee424471d4febdecb7a94", "0cd6d5f5716623c708f9ceac115e5cb5fd86983f56d8efca2ddad6b54161dcd6", "2a9d182cd734cca49d47025fa3f49c95127c8b9b315050103c1011b144c55ba7"), ("182dbf3c10130a9aba7c499a103b3a5ec58f87cfd23d7405aa85df240eef0b78", "25a42137b6e62864605799b8f9f589d9efe01cb7e8aa27145e2d2eb0e6fe13d5", "114ca287f2f4d33c1ff615bc0e0de869c7cdd510d9ff45e35ee0def90e6442de", "1b0babc5e2bd08540b1ac020621e5e1707b452fc6441119780f2ebe63d96f03f"), ("0216163e00ee21cfa364b3a554a05411b905336fbc1937caf1cf24325d731c55", "25f87a694b2ecdf94efe8e5766bd7ce8e2bad4c1709de97666c36407a7c71481", "20b91557dcdae7e8bd35ec54f00a0e612f97e3577107db9d1669c21def868cd2", "23773a0f1e51ba8be55a0886a5ea1bf9bb4a58386410728ec5bc42392a66dc7b"), ("25a3f012f1dbc840e1737bd7f84b9ba566af6b035fb55a8b833f9c9459c3618e", "163e25040283c182919e73a620a286385ff0e35174cfb49a8ee41f504e3968fe", "0a29e5fb172a109f947f85a939df93a3eb2911738669ba3aca1daaf1ade4c436", "2b22ca164cb9f113c59ba4513987cfb79324fbd9958165aeaabf73f92e1f6caa"), ("169746af3586a2ac73c869134ce02e6ccb1225b4a414feb59965c31aa825d637", "2c466db86fecbef7346f12ca7407ec0a206fac97faa38b8533c02a3098bd02cf", "1228ea6b10bcdbf463da36e9721af40dc7f7eb59eae00c1f6e80fb0d22b896f4", "04a06b774988d552525b83b43e5661f79162ede5429f5b453486fb3092d537a0"), ("105d6b055d45c44a1dc4be50e3430fa299c05b25d680db1bd6fb63b2e6772fa2", "23e55d3b9f94f65fb66173d79aa89072369c61c5feec882b36f98b42ac3fca04", "0ea97dc5a02791a9899ba767f41ca0cf1d53868d9f53a214c4cec7312e1aabe4", "1eb31fba1fc73705f304d5bca87d714d47d573c815fd15f1fd30a4e2229a9e7c"), ("028bd2b8ca093e50cb455bde4dc35a7707b0a325f746d24acbbf2b3875a92c56", "013c1bf5c79be876d2d0d5875f19eb432fe6608d163ccf0105b7822f02bbe787", "141b06e4beabc212494f84cbe4dae6f8ab2cfc5dcd007890df95ff9676321c86", "2e7eae74e53f5c42cf651e9d879c9c2b2533b5d11c30d8ae56a777f4283a5ab0"), ("253546bf778d4865f02464a99a9e8181c3a52a3ea2f65eb176f3c11d7d8b5165", "22b52989765723e87ddbc6a3f9f8d34ba15f306ca18fc554e3df1b9835ce0f5e", "27c72c7641d3044f66fc44eef82150d4196a3323b876d43cf2c89bf1aa267b8f", "117ea6af214a226eeb72fe82c851f75b6cfae3da390fadda0fd9a2e5e71803ec"), ("02cf677ca3aa9dcf33189add2a6184aa48d6b1dc372567c75d343751ec8f8a4b", "12b88e1d1e96ef176f9e971ca86c3ddefa3102d0c0e973ad219294382f3bd615", "29519e1fb720e8794a9eccbaa810ed33ea777171dbd073dcaa24adb07221fdd7", "1e31e1111d5d485074c471cfa57b7b491bc95702f6b7bc2c622fd471f886d485"), ("0f07cac00571ce27a551ebe8f915ff127639db9ba56817d06fa1e0e164d5b507", "2cdd474e2590e9d6d5c9c70ca93cce8342d3ec690aca059fd8d8ad5cf9cc026c", "2279ae3c39312e2db4794823c4fbd902ba6aa90db57b8d6e6063c436af03895a", "1d201d4503d6e5fbfa1548bbf2f8fc2e58069b47a9fc5dfc1e998143ba9296f5"), ("1db6049ea461225d1c1da28d0f1a500e47fa070e2dacbf54a7d3e1e40975a0f4", "29413812f84e1c6a0a17e6c5aea20efca47c04d33c55c9272209c863a59d3551", "28654a62f26d4d84fec2ca7ca458912e7fad4689f4b0e5cd880743d581d6f1c9", "04aa01a90bd02357577a2d8ff87a017ddca6084ae98f974417f49ac73aa67f15"), ("2916467f658c98d356cb6cc6b5958e6128f16697ed610ce78021a91e2a476979", "0478b8478a67bd111b548ad232919ec95cbb53ab3a3697cf4e106cd447d53c7d", "2ee1af59cfc20435f0bc29da32cbd38b94eb802be7bf481b75d9239ed2438b81", "060a983f59ced14e1bb37e802f13b7249b57e499c303bedca398b7f9fb31ff14"), ("12d54f5ef1aef5d25149816f6388ec4e6bdd9761fc6ad9576c92fb1e9878cda0", "17b8c9ed43fcaec98c3dd5e9f649e52469368caffb22c0dbceb76fd15d571ed9", "125e91cd4d8b1dd030c26ac27105321b859035ddaea379ad5b2be7934e740fe0", "05a03f05e78fd8444fc143e598f20dee2c1bfc70215c34be6ecc8ceeb136aec3"), ("2df7da2d597e356865a26b2a7d0a3634be680f75c621e2f289f56b36ded86fc0", "133de95cf12843395fa99969bde3d313f8708f01163c06305448a14951bd3899", "082ab969ff86c6d9ad280e8ededefa285795720525eeb6ff330d7c32c6577a33", "2fe6d371d4b5f46992b49c25d6f0e9ce24442c2bf2cdaba2ca11514760ef5b56"), ("208910fde78c9367100e55c3fc13a31d34409218cd4acd1d4b62ddc593e669f2", "12f6a47be2b4bb180609bf587bdf1679385c44edc75eb32d8d6e25f45dd506e0", "303f2ce2cebd21e0e645bf81354539896a467eb7f8a19e491e99382dc448a960", "0a3f5f554781fc24d1499223b17859f3cb9b834bb3b33e5aa0cd517e83e53fe8"), ("056cf901963097c89e497e52f9fb94e1e247bb74e401b4e0520e290ea1dc0de6", "0587e8a2dbce898380df38183bff0f51b13d22f905dfa305ff7c4e03c1cdbc36", "0513bee4674f9567544c0fd768677fd98b012dffbcc8ba323845b0e240d94f38", "1f76a525c0128792ab605a3f5ca1f006baddc24338af5d48bc5b128f75571b61"), ("21c4bdf1b1537e97683649f9a07977bbd10fbf28971f6daed1d1815edb01497e", "12f54693fa87d8ea264d25111ec70e8aebd3f414c256ac51e92668e30d445a77", "1d5b9b6ceb6bf645773520aeacfd768e5cfc4a06ed8504dbc9bb17207d24a33a", "0f26acdfc996ffc2f66592d6a54d42d979d2ba0ae18d3ed322823c2af97c5e48"), ("17fe4dcc3d806237a1fed808d75dc12d09fdf318ddebe7c0acfed31091281166", "28893e121f9e3ff3bf80925d1df01fa5dc1dbe730dbd186a33b1c3443c9bee12", "17b95bc7dfd52936d8f6f9c6bed4f6e38ad45138956307b51369adb8afca6b17", "286e42d140bd16a7dd8519caa1416e08cf28e29e67bce802d2da525e331ab3c8"), ("162c6bbbb5a5a62cf3bdf418d6badfded1add350d6b75e7d391cfea94b41e12f", "2716ad160eb35a3f3e011bf3b9841c5892e2a88754d00556db943b59e5604cd5", "13dd5e132b56789e86c9165f1c86eb017012071d757e0bc895a20842484c420a", "1d073b7ed01b529adca095760cfab6a298a264fd00c848beb2e348980f9b7add"), ("29b3a068755e7aefac66b92c9c136450b553ee6dda6c48673ea5fe75c4e41333", "2bbaad20abb9f597a72c4da8c2b0f5622f2e770739e60f5a76e5b5bfb0347b15", "0bae8467db67c1860b0e361d2cf8154095c750c028d9c28837723ff654d221f4", "2402f3a03f0e0a12da5eac0203747f0e9b83704268f9652b022e5f99d49abb1b"), ("1bcddeccf4e73c3ad67c0173bee09f645e6ba08f6f04c7bc5f37eed062055bb3", "1bed42cc39174024d853a5fa72e8c73a5cd1c68f1a20d63aa03b1b1eefebed12", "1c24f049cecd39c9704eb29eb7e9f7884465346521910f42ee5e499809d2ae34", "29624042e9684f9c2f58b0becdf1654bc44ef62859b60310e939cd6cff6f7f58"), ("268f92cdb228059238637a794a908cf6ae15d489fb8b81b6472270d375b9ff28", "13defccef11ffeaf3b2803fa28f40ceefd796b4ef770b31919bfb5864f97e0d0", "1558ca34170089a209b2f2d5393f1c36d14275a5c0bcb4f80d59f1572ceb296b", "001d6c4000d826a2c9a52a221e3c223e91bb5301bc7bcdac419cde5e8f57ae5d"), ("2be3ff4cfc8686519652286f105a2bc121111ecadd42d031eaf7b8d31d8b016c", "008e4974a851bd587d65f18625ab1a18f8c2d7de3fb924e35de5c537cc20e2fc", "077300ab3bf2d05f47ae7a1e72fc377687a2d6703025ad1e36faa581adcff24e", "0144e0e63237faf49aed1188b7185bf9db88391b43bdc4b062ac62378b5678f7"), ("17f62fbb6336ce3ccbd700bfb3395602460017e66ad8b8ffaab3879fa6057a7d", "1e3e6f0f4f952e2043f546b33376c61e752a31be239bf65315d921f6a7036029", "2daf2157bc7da858e980a3b35ab810de73706aca5143029c1c19bbb90e3e0423", "2d83091dd772cf11774bc6496e0cc45c4c319c7c4f5ef169f002db354ece4546"), ("14727c8f8a398b51e851a0e4d618e91a4ffbb01a0d00872d7bed5534e5f8b8a2", "22a6b85671eb79ad5cfa6c1f164b7656b6c5e72ae9087ce9166a0a501afc5fec", "0ee9bf114c9d028f58934726388ed35f89d9875aa1cd4fd7ca33e9d33b141748", "069ade0d870829256a5ef14d38731f9c76f49cf769775d41d12ac0a8ceb5bc5a"), ("0eb8aed3e072d3b48a31f9896ea522834951744c48acea7d7cac66c349645cae", "0a95cf38da4e466841da7470214041f3f91157a4447608ce031d92c60fa79e2d", "19ad59b62aea066dccccf12d4b4704676844be3531271f166322f2a1d36b0bb1", "013c1f8e623ccd83c7b34f82e85c4ecdf6028cc4733a1f44af7273f8c63dabea"), ("046687160b44342a268b14e60389becee06e53bb25c8252786508c6a5e647b66", "0ff9b3043ed69177459882f15d7cdfc587e87d3e7c429514676a42a91c19f38a", "095ce2bdd25d123b16b6c3912f89cecbe387b36e61bffc7a2d8eb3d7bba40ce1", "114d714f71c076186086b7342208aa275f108a3d4214bb4f419cd7624462407b"), ("11bd9375dc9a4c90116a1f80b9a726f2a00d55dc778c96a77a4e4ba16f411b5b", "11d976a93647aa6024f03a3b3fe0e062bc524034c6462d7cdc07bd17fceeac2d", "1f5e2a83f2820b1a695bbfacddf0010dfa224c2aa1fadac55cd3e3c39914349f", "1bd248464ce41f6e4f3402445b7ff858b97d17879a08daba8010288f6583a1fd"), ("2f4e17243c9a8baef2474c176823716fb70c941a775b9037a2399b16d4c88214", "26e0514420240a0a747af133d784b397d1e6f8ea867e31bc6fac0a8ca8abf78e", "193c4afd293b1f6b93f58261e0af7fe03efa0eebb6453ad0d40ca50c65a790e3", "29f6269f0bf0bfcc0a6b775c7c1e5c5617cf14e91a6f36d540d617fa2b73a8ad"), ("15fa28e68d7d344b382b0a854a61820269e1e7b7861b8d9679137bd871f347a0", "0cdf26c42b7eaaad25ce2da57a93545c8ceea1f691606cadd6311d01f3fe782f", "1c74f893bce3f230a4231eaf9effa9b34807565c32801bd1d8bb60581a4ce38d", "04388c506ce74cdc8ad8345f19da29900a854ba46702c37decc9cd1260f82cc6"), ("0326ecf9f46dd79441c8d81baabb371f6c351fbc874c0420c332da40509c4d24", "00cb02ae5ca5d7693f8105b3a4d3de61a845e405be4d77a42d7ff40a6ebf26cf", "2cb85d8569c43660d8d3d16262dfad8ba30d5c40c8e0031a18ca89722ff09151", "1d1f9af37b81ca27f11e81519f5e67e90659861e8aa6d1e0bf3f1c6d474b407a"), ("1888c27eab7cf84ae7fc4972d16b6c5ec0ec85ef6853a206a608199a8f78ab87", "0e7dbfe60117682ce171ccf191a8129f80775e75a12c41fb698b9ee39a8b6e23", "2e88b14c63cdd7620aeaddadf45d5fbd9b592541228636c7670745d14fa235b8", "1f15b7de6647984601ff0bec338ec179eb5833c68f03cc17decb99958000f136"), ("218aff75f7b1f95342991f6957473b18410f87acc8ea7354d17851ef85c2bdbe", "260e7bb10df0acea1e1b983ab23257ee7e9c70ec45bc0b0289c9370615bd6f34", "18799a71101c3c87cecf56e8d26b611229c9d22de09e974365683b8b0ad8e90a", "10d9186e53ebb8565eb7748f40f041f4bf4c7a7f3e38529d7a12c0f45e560d0b"), ("03ca59c56d17777f983ebbbf04a453f499ee0dffe770ad31b1b40fb223a015fc", "11b502c0813444a16944e1c5f3f90fea2f3fc5adb2aede5f58fb0864b694e950", "2ea04ef2607a7543e65d7d2c46908a222f53eb3e62b52d2a61984a2d8c722466", "14428b07b3d7f0b5aa608fdcbb4e4eb52cd5e1bae74ac5e38b24962056439adf"), ("1fba49109a779f2791aecb55ae6dd657ad38dca7a46686fc48394206cdaa8154", "2f9914b6ed2beb2adec65288aa4b448b3d9253640651936b9a2578930ffa5f10", "0668e5384be8eb2e3eaebd40325566a8dd4d2d4a66f1bf03c4d25c4af8249f3d", "29a13fbe48f27eb2c74565f88692b41480d34f216892d6218e1938fca0bf7ae9"), ("0287b9c5e6c9f199a3b2d814d5fafa96160ea5758192d381b63c0448251c4a46", "2764ded753a310a7917bbbaec114bb40f4070e8d5c98e69d2f19922734f5fb87", "208054fa1b19c195b6e84ff3845a46a685c40e6dc222d04f9d711682073b01f4", "10c1c6aa7836e2e7eb34701476b560453d176bfb32cde2010319c4a493409e83"), ("2b20ea8b2a2216899a3236be296101356d8dce649fb559496b5f444ff56ef5f6", "0128b6657ff09adb9606e8ec11a198fa3f90cb06edc59d8eca0d6d311b4d143c", "0e546e1c7a89b16194a1ce30f4c890b68efc5bf066ed2efcc3121223aa2e946e", "00c009a0c89887f7de36e247a91d1449d75b09549316c26fe262f15c4be2f2a5"), ("1895a4c11d23f7542ded97993264ba3be81067820e0453a5a0f8b482e9ad47f0", "05324e74c2c2d04e64de984e8b4229abd915d2b7630959867527bbe3be134d8d", "1d3b5f69551ddaeb0c6c520b60dd23be236d25305237898f15b80fb91c48e112", "229e347c9f80e8281c59bf61a2e9bd307b46d004d3f2ecf4e6afc29901132fd1"), ("10bafb5bdac9e116fbaaa9d51a08a4d7631629472821b333b5cb0e06276dea8d", "28a50633779989e460f12bfdbae435e509d297788051830367b370becce11a16", "0a591f82206c67debc36d2cfbbc77ba27893545c664c9bf1015119890ff2bf68", "2c75d0d6795acb839ea1362902e4ad6aefb501ccfbfd6dcfa1404891d2ba19ea"), ("0389b681b00c94e4a1155c7e67b8f83c310003ca5bfb397aa68b23d233d15843", "021dc3a40e3e316df763df828ae60a5649ffdddc9ff120d95d8b4037ad82cf33", "280a925c796222242b57cf1c395ef633375b9625dceeade34e41ca3c98db7e89", "1d11ce9f43512bdbf1ad7d6a6e91d141df6774952f8a859642e5e21970f50f20"), ("26e0695ab0e8659cd2736c96181ef2df6af1a83427a70039ec7b17ae16b8b4fc", "040619ea47561282744bd3a6aefd1ec71d1f5ddfa46d953a30503b4dd7adfbaf", "06350bb50d4a786ac4a6a2a0ce53fb954cee031abcadf7b17ea6d4092a08cc08", "13f566d491d2f21e74797ef02f8af71c6c0f3091483c6abe84bfb966ed7a94cb"), ("289abb92565a3993b049a2c48597cf9e09c452c6e8d6775256df1403c177c4f1", "0de157762811cb14617e94cf1f7be599967d8925584a03bcbe1b649ef23532e0", "201ab338f38ee42ce71ff67a3981b033d9976b41004b7a96193850e0fc386d02", "13a7a9841bfbe1590768aa069ed008fc119d4480b41b066515480146f20554af"), ("1573fb793e3663daa093d58b6efb4aa016832e064e3758ead74b11cbd8751481", "09ee8a4b7630efc49dc0e134d26e6b9b9fd98a0dd0644297a523b6c9ea35ad89", "01912e9787af2c4d96672fb338ddb901eca5163461c3a14fec468f202222f59c", "1426a70849db06f0273d351d446be93d1b94e8ecd9d0f5e62026804abdfba296"), ("0abb88b98a920533cdf973d03ea0c16e796f22c4e5193fd611704a48eb8ef081", "0a9ef94302bbb55277c71f5a15ac1e1031f786fc9cbbb1a696c26d8261814eaf", "1ad968b2c85b1ac304ee2799cd585e1eb93348f12c36165af47551e0505f0611", "10f313280943e3f5a61f5f3109214df75efeb4e019ccc6d9f0023b57e1287cb7"), ("2b075e8aac1ba785ddc622fbc274b4ff46e12f44e74fae1cf987064a45055616", "171e8b1653210157fa985e72ede042361736dabe63cfd55c8064c93e69498ade", "21478cd0c7c8d6afb092e41effb74688acb984a833b708a5200dfd6689ea58e3", "1e33f59a223d28a21b9c724eaba25aabd55be274616b4f5ee792e9c3c64d5c21"), ("15593f55bf3000f4f9d5937b4b77414d15e4ee0e0349c58fff3c51a4eb8ba19f", "087fdfc915ee6629d6feb52d907082930b70bd391e2f1d9bc1c261b182cc7416", "0907531cbb926ed99425e99ee91238b3107cda53d17a1a30cb03fdeff2256a05", "06e2b7ad92b28ffbc025d0f7215b649a2a0bd73de00b8bb8e84ae914c624911b"), ("2ca032efc844483cd3ebe5ff43eb056dc427248254981051533ec2629c4f2731", "287db946668a052adaa7718fcfdab2c819a2d455202deaa0693fb035e629f546", "13c0401362fb0db824bcb0301c44c2f571f1d27f2b13663b310425cce3cb256e", "0303fefcf3773adbe5b0cf5f49b08ab40f808602279b4bf03eae4e5498aa5355"), ("0b67b02ece80cfbb0dfa9154ba5f5b75556e6dbe0f7ee4c8517c91fd95cda390", "2bc1bc3cc5a83ca1713dd65bfcdf0c30961043e4a89e6f43a088ddb2bc7bf2a9", "1d8e16a351545406dcb36219ac380e5bfe7a65aab4f9a7b2174f23860c6110e2", "008cb9e468a8dad4feb6bc8da7268406ba715a855b4fcb9cebb48f23c9c3b179"), ("27e3e3e11af858d5254fe37d6433228b67948ed7ebff5226ce44f477d32a64be", "0d6e8110682f7f06d6eadfd01ece2a1b9de42327c80355321416a633a99c89c8", "0497f71eb95e629b858c9f69d33341363bbc21350d938ebd076fa24f55c04c8d", "00f5a99425e64b708991f5cdb02dd3e42d96b944b44a217f49114ac6c49a5b46"), ("1c65216a6b3a258ef71a1f1195fe72e19c20721270a860e8db757981d7149270", "040d67dc882d2d017c68cd66b9bd50159bba91636b7941a708e7b8bdcfbebe85", "02934b86df9acd1cd2dd05686dfdf926f49261805a90fd1996e367774d34b9de", "01d6017f301d5d3df8b77f1d272cb9d1bad83d348738ba96d9733a432113e7bf"), ("1493cc3d2802c68892f7358cbe0b4df71a9fd7b80a2d16dc52fd49e16ab9d0ab", "1acac31418a96846992825bc7827c45421f7e6f3ac0403b183699ceee1b6b2a2", "0885dfc9f66014cb383644bc2b03b665590d216639a11281fd728b255a2d685a", "0e1d5f9c2329e9d0848dc0db77a357078198161d5377368411efacc2d404bc37"), ("01f9b01115ab5b34be155f0b0cb7105b3f456413c8a162a3454015ba5bed032f", "095caa499f10e28e4597f6ae0c0bfdd9aa65869d6b28dada99fea6f7bc8405a1", "222821be2212dd1b85a63cd4dba1fcf23572adcb37c19a789a8a10fa498d4ebb", "0630363ac69b0b2ddde76578291a35c76bf467580b772e156c2801e0fce744a7"), ("2e7eeb42d6c68e0082c30a718969c0097fcd48c40dbdfc115b75b7817de277cf", "03fa693be59e205250c6d50909525d3c9976c47f8f5a9787435799cbb4c8c2e3", "210b9943f1daad863c157820d64485115c7f40c08d28f7cafd4a595f5224fc37", "1f0bdff1f3b48ab336d13edc562b7680b12e8eb92fd3ea62931ae3c653a4a91b"), ("04a33995b5d7d1c336a5d9cd7f8f3397238aee8bc88e79ffd6e61d50a17f6d6b", "0a80e69b3c127a081e70d8a5692fed834af514b8105fb24b17f5b9f4ac8baaf6", "0ef5428f515c5db72664884457976ab06a4b05d377c1cf3c136a4ba2fdae41f5", "126d1f735baea4a2d5ce40ead17c517038eab4d881ea9fa6d756f2bb271d2625"), ("043048dce66699c3af8e0890c27a92f72cfcdc56a27c587603ee2f1c679159c1", "169a60f9c64232b04da259999696c865d7861d67e41595819ea3fff18eccc551", "1993ec2d04d63de390c5410f004f1518fc1c581b5bfdacd984816ab1c1b68b7e", "167394802b2b3c9023de200561ca736d218762e43e381208214486ce1d29ff99"), ("1c34e02f13b0f23a5233ab1d05db3225d2fd730b25f382b07ccd7aaf65d00625", "2399e8a66895a035e1e6ef816427128bf43d0188ed8ea2a678d807bd3f1e015f", "1975d7ed54932dbe6272bc947704314481fb765ad50ff90240447e7ce4a53f87", "02fe2d7392aae1f1f617e371ff3747ac989ec8df3af303c1683f3846e12cb66f"), ("1739809a5792fba5658764076af360db3fef6a1fdc2b074a9a029ec0261d2d55", "124bb2e49ae62e5cf9aec7c0dfab4379cdc7d9a2a665fac95955a61a54b39e23", "27d82eb594ac0d1f6b3eae2187064d3fc277a1d7507d5db96935f5dff9dcc50e", "0599e6b03012b890e3115900155bbcb3125937e985e773acbe258e162119ba03"), ("173510f67ebdaf5dbdb2158671d6c2ae1bea6a829730a75195617fb75b01ebba", "16600374e63e17ed1dd670fa1d3f6852181b9beb1571916e00b6da033a08f60c", "11b42204078c66ceef8e924009b280302825e99fd811639ac00901f5c851a334", "2174813aaf279dd5fc1c031038511a3748d124b0468ce89d303e42a8db6a07e4"), ("046e9bf984ad12c51a7f8ccf67885a7fc05da8611a03b794138620bf47bd766e", "15912d2026a5bc16637998368f09dfda05beea980ca52baf845ac8a3e5e9acf9", "1714dd7ebe7828c572fc7cbb07007015bfc3599bda79185ca0030da3193b3ad1", "0c4d4966bf7813f07e9a630487469f69a1e3fce3f61b32daac3882b597d4e516"), ("1eb2ba03f2b26224f9069caae70f1eec1f047930e3ee03e45b976b2a360f5bec", "03fb5ad443de265260e7aa107602bba3cd842d14e49b64e36cc086ca381f1d7c", "22c629a3803790a63516bee9aa8c87f4803039548957bdcebfe4bf908ecd6da2", "3015caceff8aa47adf1b5f726375f125e5abae75786da1cc35580b66ae3862ff"), ("03ae86b47c43c2d36bd6ae9c75575485fd613bed5dc5667358d5deaf62bc29ef", "0cd544d7f8045f2d8c3e01e9766faba576e77a5860f1d6062ee281a22775a180", "1c835520395c0b743beca27d0e5d9fd6b7b469288467e3cc60e26e3ef325cfbc", "00a60fdf63c7d4c50939edd8c36f61e8defdce5df0c4c7351f0ebefce9f756c2"), ("087a6d71f2e8a798b99ee108ed2c15e20a2f6650fe340ecc4261faf5efa757bb", "1d7200104ca62ebbde039b4757c3874066b2a7181d2818faeb95cecc7e8daa50", "2b7bb05a5dfc24b54183db2bbc9ad594d2120ab59df4f6d85c24fe776e995f06", "0630d5a53a89a195122f6fdb3d5f7fc3dbaea75499008dc9696ec2967d68aa5a"), ("29f324f09053301b3631385f09baba158d9e4702e37b6f21d26ac3469f2dce52", "2a89b700331343c4e242dccff2ebd6c8feac79a44ef6129e0842f9dab078b256", "1f12d68ce6f26cbd836ebaec75d072524612c3baba5e4a9cb3be5784c200bade", "2f2b3d078e1c3b38d2db27f298d32bc53171c21bbf44d0e2a6f5f7de5506a292"), ("2c4112b33a97d4f51839db3a0c676077e61a06d60cf4cfd22b4883e7326e4ea1", "229f67d528676455f80bd948f3d6fe012ff1ce90366006e87adfe1769a8e1dad", "2efadd8d06aa7520ed8fd93ceb2b1b2df2bd629a1435c40d1381a4144e404492", "262abfe0e33b91ef0f3ad69e8a9c57135d7688cdc34ddd81e5abf6b70bcd8b45"), ("17e99ceeae4311bb0a924bbec953308ec8b451c68fa095dc3eec388352de4556", "18f5a05677ca943a868b60eef01b477f9e93afa0de9291c8a7d2242759c53134", "08c4865466643ff976d270f8189dc5640f17733f26ab002bfb4f96379b79365d", "2869c342dca6eb0125a23f96229fdbc34f02829f0210422840e074b55de07216"), ("1abd8110715aca1a443906d2c02016e31a75a3c914af05cf749c049f9493eeea", "05faa11763ccc3ce9a462388d155a5f5190f40309668fdeb7f8d43b30eddebb1", "1c8350f9697a8780cd23daf409eabdab16abcbe1a149ec4fae8fb66bd068b93f", "1b0be3e0abd6a0943da8054dd2eac8540c8497e3ef0527501bf0cd7d33dd4ec2"), ("0a4d1ce4b1c50c0ce5aaa1dba4265fedc625b4bbfe42e5499b612368f0158844", "2a2b0fb15c409fe5f93f6d9d01ada923b1e899ac4d00e873660d82a7fccdef99", "1e5f5d3f6af9c01c078fd24e3ea3943ad71ef26c55bfe24deef880776ef27428", "02cea453c340a5b283cedc93a03ca5bce7bb62398a2e513ac4beafbd7969eba0"), ("044c22a9098bb95917d6a6cea1afb32ef8f0f218567a7a31b2adcb9edc93d1b8", "0172bc9912cf3fdee080a9915a7224c9f9847d99a374af69481432f182632fbd", "187e02105186a294ebf5e46431bca497f37973287a087954da2a609b3a841f47", "20b04b33f2d62f093d40d093dd16f25d150e9a961be0d34fc0e99e0e24eae83b"), ("1f62a06f824b2a955cafb88ab73a5210a8032ce54e649daf15a41d06bbf1ec2a", "2b66be0ce7f896c9dbcd2bde75ed9b411f54b2ea6bc6e0642754990f20bf1b60", "11367c61dc1a0e352f6a17b67e971d7fddb9a8c47ef6631b91fc36b2c3398cdd", "08f560ff71f86f2ecd40edcb9893c3d913b0e48989cd519b92d579c603760ae8"), ("0483f7baa2cfadeef530e927514e9499a83d7c624e589e1a4fc1060b96971ebc", "09d5e1c23eb6fbec38376262a088789b92755a90a6ff7523fa8217637aa17a68", "02f4c3a45971bfe1c22845e30d280280af50dffe7756d982a2c8417c232df2e3", "03d9f5ec3b799bf4e27cd4414b73bdf657f9f5faa711a37c759d1fde2509790f"), ("05dade55aa039225400e642a5bb4a036b3b7be2b32dbe2801860bc0da72bfbe9", "0dfefdea85219faa93ba87af42849a1742d5e10329f32556893cc4e045f38ca8", "27f157ba0368b46e9beafeddbd08fb53478083f0a68fa020ed546053a3915194", "274e80e7727f018cf84b4f4f86d40ffd49aa3089c5c45a787ba7f8c97f5aee31"), ("2176215609de1f70c7566e0bbefde919f4b30e517b3682d885e7aba9a4edd8e4", "1453d252f73da6a001773744fbc51bc985a6e31b0d6fc4a8a71b238dbb75d90a", "1e94b045f41f14cc990c7db7c2cf42baed3b6b0285d8c24da9e2b6a6200f8452", "161b41aa23a69e367c69d2fda2683b5771d2804e6ec2953a51f55950f6262d8f"), ("1dd803a82e3502549693a4695919c28c6fba2bbe3c18bfc1fedef03e170c193e", "2a14f706cd01b3fae7363ccb03fae6c8203aeea7855df58e700fba70febeb64b", "018e0a9856e7d1993be2cf045838c619114c86f10091b88995a7eefb27b13c07", "12ea4960a0bcfa9a7af089a381dc37b23e2f2ebde69821c311e098b68d873f17"), ("2c89fbf585ad2538bab56e224f534afef500c05b94a3df840c3f1b7e7d6f08a8", "0e3829aa8003491240147afd9e42a2465e4e38a1c013279608c743801d8b1056", "0711c07301e354c1e5e688df2aaf92c90344c53c3572d65b52613d3f5c6b9929", "0c3f598da9ce1e50ad0b95948f1a6ed7726801e0037e56ccc1f151555c319bb1"), ("2b3f511233fbfd8c0de25ae2cb1ac445266f2b65273b8c9bfd8110dc05ef5c2c", "06c06077e22768e106030968cb5ea1ebf33c13f70650b9fa8175f730f49be5c7", "1d12ccfa9afc8d96d30068a0d3eb34384d2ded8b6ecf1d51075a2c4e3dee5e50", "24ce438ba5db791c68e95c8cfd84021298c0c4a6cd9d876454ac88eedffd9d64"), ("2e8f2ea6b04ce3dfcc62b81c992d1ba0150949619b3c99be3686351a402f5ff3", "2434bd692deab26c7dcc47efd9eaed435536ee30536bfd711bdaed43f249c6c6", "24d9fde474d861463c96e64a7309f7aca1c940fc0b57ee468b8c449958c770cc", "1ae5b82d41df1324add967c5cd99a81804f429ebd1f2a245ea6d48cdbc8b09b6"), ("0bafb3231437a563aa782aac1bae4cb5333a562b7ced643f3d60be042ea2d486", "1ae96dfd6763e66e6974b7a342ca843a9c82db85b95e0ba85d640baa543525c7", "2e31a2935a32e0cc4facae84dbff18c1af1e6ec19abd12e885778ae992f660f2", "1f7c0732ee836135cf74fca0f60ca4b31b8ef7b5e356048d325a84ea7368d126"), ("0d164c44422c0afe5e6343fb4c52535229854a1b5559963cc5e8ef2eb8152e03", "1abd1fa4ff30a5ed78c6f6055e52503c0ad5a74dca42f9e9103796ea6b899365", "0599502df472208bdae557052e874ddeccdb3ecbe61b1ba30e128c89c9851480", "24ea37d09ea36ce633713b6efc37578624eb51019c4c1b46afa819a32103c37c"), ("232d32b4482a23cf261061bc5b6cc44a90a6222fc564490571b6c464e6a497b7", "01bac11ce524a60c3c2885399e2126708b28a52e0ee4e9a4834326b2500ddec6", "25355a6466403a505686819b0d449cdf8840ef14d160e396a24fa39fb7c54976", "2874705cdc21434e326a4caa93b5652a2eeee994b564ca08bda1c286ae12ed21"), ("06fc169330caf4b74d7ee863f1fddc311f06ef57716202f2cf67b297a2f5cc66", "103b3ed7b8d89fb5a62ccaf701346cc0d724fb38a0681b51ee79215b490d3cf9", "1fd2b826a177363da378cfc0c3f41514de3032722a6fbf1251736bdc0b0ce13e", "0a18e716548272a0acc5b9c0a580c6e81a5a827131e18d3069fed0cd80122c32"), ("1b4f903dd94bc6c4e32189311d2a3404c73f560b868f6423183c8080a60d2345", "0bfe2265be35cc824f235dcb1cd09902a3f3d401787093b64e6977c8f1ac8b12", "2bce8c1ba5e927af03120d89b0f5967b5482f7a45d6477c130dad7ab9aa0e237", "208179fe6528da47c1959b72a92aea17a4c02c92e9c74185a66030d8d83e4c0a"), ("071b6c29b8edf6aee4fb2cf79469a9bda367dfbd580cbd7c95101cfe254c9be4", "1d26f1b18c007e0f5bb0e4abda8b32aaf12d0193ed1c7f061eff6689ab6e0b03", "08f0a93f18da4dbc45b291ee0423da4214d01d87687536645605258b90c3b0e0", "04b4a39aa92ced981ee97d89659d7dfec46a1a941e4d6f1ed97feea41ae02786"), ("29481608f334d5f40e38d755254b74851e60b252a245196c78648198efccc4c8", "288b6d9be594e3171c8e21996e5bd32f1f865c857c715547866d972dd80c15a1", "15df7bb2aecc3376dc9c4807ee7bdf68817970743f36c6f57447d6abfc8536df", "25933c586f7cd6b0c04ad9abfbd34fce26919c4f04f91ccc82f02e9834afe431"), ("2453482cf4b7adec48bbd887cea035da60225ed2fcfa6953c3f618776b34d181", "2e44a7c30ad46199c6eaa87cae87e11999175d2aa43be9393af729d391dec0e7", "26767090f1de359e5f2453762e1cbd518b4ef1b8fd9d01cb63a0eb1304f29521", "2c27eddf6aac599c903b22e08c949124dbf9e32d28045668ae8c97a24554d5cd"), ("0f0de72691e394a2f6051f1fdeeefbbdf12c2f2e660a0d2fbdaf841c43c4b802", "2a96459d0160c73b2897de38d4988923ea82d8c701a4b2f548ea21af05992df2", "2e8c1048aae3f8f920c0e5a6adc4fd2918dab02069916af594b1e48b7e6263df", "066a23db8308d7e871dd04e5608940f2d11ddffdd4b138a4d622b60f3d5a26ae"), ("2f7085a0bff1f1caf863a72a07d46a5ed7fbf15ab774e6dcf74068b8088a8eb5", "27f9887e9c6d31a99e7b17976fe1f26da6dad8aa7f1106a13338d11e6d43d209", "1702877bbf4b6680b1a8f6ebb392222c4ff5ae45e3ba899c5782508f2734ca3d", "08499372dc8e5369fa06c78d1abffd3208101bd043d4445abb376221927138a5"), ("2f9df29a6fc464bcaffd9377d0dbbf2aeaca41bad101a970304010fb9433ac5c", "2805919962ea3c3281c9ae6626f6331f750a53c68efb3f8bbf1354fe14096407", "05ba7161f2f4108db2fb5729df1a9721bd7f67325ae2ddd923f0787ef9d610b4", "165afdc991e245a7ee4cc67b38b1a8c3c40f849fe5a26628909638326e9cbe87"), ("28dc9ccec3ad19c416c8bae38ca09f2c4a30df4a0f8287b5c8c34e67f204651b", "092f4db7bc36ac3af9a16a5ec14691daf8afe9ca31189cb322cb627936337775", "2554a4705b4123f7b78d0c3b113b2ddc20dff7ec09c5c37db5501ed419952cb9", "152a0d77a8ccd48d138a83c3bd6cc525b805c8baf1d68f9d691fe2e2f5e74aa2"), ("239a2889696cf936eff104f73b73b229739fa0d32718165143961e8cb253bf55", "01f5ab0ccf669c4f4e7221c3af33cf1c514fefbe74d15ab227e2e96780d759e4", "2752e1e1e4a3667302d3b36a85ffc49003e045297084465fc5e84b27c698888c", "0c65fe47c0c99d24b3b0623c504d03c2da2e6416cc27044295bb3e7f76450791"), ("054e6900ebf64dbd03a48eced62e8eaa5efb3edc6b8e0122fe4fe671a713482d", "0764a26d8a805b8e4ecbc89833fb290783e1197cc120c49c40c4d8bd08d4f673", "274a7cde27eed1d7e4f00099ce14630fc49a58db4f4abe0489dad66633c3a917", "1896c3e3606169b8a3cccd5bab3234b55baeec31d6b062a75e13b37519dba02f"), ("23fb857070b7b7eb314efa43e972cc828663a0877e2b370f33b4105a5004d9e2", "2e24d25c4129a0e7682e7126e5f6960596d6e9db2a9738ae9eb36575cd5536fb", "2f55cca2b25feeeab6202702d9cdd05f0e11c5e69c24eecf51ff1dae322740f6", "09c2d3c61c193db6ad8a089e77a0d3d57029f66a414764b55c773bcb388450da"), ("101c6f6663f8af1c4acc14fbb2f3e05f7589172d905fed56daec93971c2873f2", "2b08f1b1cc71ac391680b8c7411cacc4b0fcc4b01cfaa899adadc9231b8a8b8b", "25922cf7eb88507bd3f184ea5c4af40dcf164dc4cfb442b5bee71b854eb70e34", "090873c28fa0f88c095e3e5cd01220971b5f92aff53263036d24bb650f011354"), ("25386dfa31d6e3808475d326364b9a0837ed62d6dc96e3ae4eddb177c0873109", "283bb2f5f7f89606da5ac9bc1befcbd9aae3d49a91e1bede9911bc4b307a1dd3", "214009fc833a4d27e99b5bf2f639831a4dc553b1307018c758afcabf3ba1e6cb", "1d4befe73d2c6fe71e1d91a3dd031af378f88e57a14087f5b536efc1f30bd0ad"), ("0290860178f26d36e9d3093213ecd2b6eacfb979fecb011f907dd04b19b7f703", "252cca08ff74cf7516da6a114de6195025d0a2a8b7d7e73254d3f2fcc00206e2", "0dd8097d2537146769cbe0fa3600b205b8c1076c8fc10a34404298702a5b95f8", "21de2cef11491863e995a1ce4daff2f2be47e4a5b0225a4dffc4ed8a94125c7e"), ("0f54d3549b3f607fe3dd759c7d8039d4b6f20264508b3a698fd817a9f96ec09d", "1ee2d7b84682832a09bf6f3aec477bda002bea287ffc4aa367531bf262e93076", "232c6d2a9de77cbd05b1e15f90b3a0a0a083ead68850e792f45b40b51f6f79e8", "217067530b8ce2816169b6a3b6de7de151eb0844b295c3d88e81d0eec9825910"), ("15dd696ec0c2abbd0a7217d731cb78e241d3221c91995cb84dd5f88d208adbff", "2a371cd4e55ffc09395ebbbfedb68420978fb91e5d4450d3f1be89a4763af0e4", "12a06774d6ba511ee5629bc19acc797704ce8294ae04b832a81551820fa8d8ec", "0f5412bafe0f901dc098421562f4d7b69e0debf76efaf985341dbdce92eede65"), ("260dc1146f2c1f619c45b214f17939adfd7e196b584f1713a0eff97c5ded99b3", "2236b063b7c2a70786aa57a0cc658ff17e8850e469535460de362a47324c5e0d", "0764aa4a1b02d959222c4b775911c9b59462af39b669e97bf988b86a38a22faa", "0167e4acfac15b9b74f2b203aa0fb4732e804c2d167afd001297ba76350df979"), ("04e15a3924c4965e33ae24e9229c2d6a9e7236ab09e422db287f8fb62e2f2482", "09d7153e4972d6671bb1446f284f58ee1c1f7e41dbfb55d7007969378d250488", "20800bfb6c545f9a9179e6ebfa7bc0678e60c17e0906cc1df3a4f2f878bac3dd", "2b557da6c6544cb639208fceddcaeb92ef825591717c4fff18ed8baf593515f2"), ("2b9ac01195e654bbe3275204df54f5ee50ed84f616095ac936eb1446c78b4476", "04859fd80e6ba702603acfabc5e7282521827068f2a6566e520abf31616b816d", "0208b371badbfc0bbcd34716b8ed46faee8116187d76eaf3784ef4901301b934", "031c90494fbac25153c4e2413021e3adc5d0b36a9d475f76bcb56b0a9c0c0ecf"), ("1b4ffe7e21ab2a3719156e1c4cd41fd40d9c02a731723bba130ce5233ea9ecfc", "021e40c136a6bef0785bcec411842e88f698b98af5c553a60c874ba126dcd97c", "285c154b35f60597bc61324024cb0070459fce708b5e035fd21d9839e94ef1f9", "124f008589389e132e1712f9961fd93705bfd28df2c0941fff3ae4cf65432097"), ("0cc5097c279bf4281ab8aa16bfc1940c3c495706f84e143c66a630c70f40e2fd", "0bfd1af0ec91b68237719c2a0d3c23754e240ecb31294f6b5767c2587d6b13c3", "304aec02348a3ca171321e3d32fbfc77c201944d6d2010ecadbadec81df442e1", "0ea79b37a521e1d2eaa029aa3109ceaf2530cc20f1ee6c1376b54656444bbe53"), ("126b9e125e84b807197e7a427135813c080193cffc2aee50b1e5accd615e5b2a", "095608f8dbf062acca3972c748460f5afca029c5a441ac566863c9462276263f", "15d02873fb42e86932690512984840c3fa56ad039e9c7be657ed2aafccd5ac89", "2d2e04c386668fe97dc19d715b0308e0a444be9789bcca225baa60a68419d70d"), ("2c1da28c9676bb2a8d940f1b4485e90030bad43719520bcad047f06883430b97", "2baa1b98118dfc6d0d9ebf40384091d7a62237d6081ade35a66be448a7a8c766", "288a5372ad2abcaba5611c04c1a889aa2fa06829b0b32b29070dc1d1ff1bdeca", "0d7e588005fb382d7f4d832e83c4a02911f65970772d8bdaebd3f9937a73ef04"), ("2c41c9937d12addc19a33d68ed6fc3bfbd92bce0681325aef16827b2d8dbba1e", "2347be786669e0e8ea3eb43cc19b365f82e9656c59682ea9cdb400cfc35f5853", "0197ad8a01909376fbfeab2701cdcc50e65e7126f6c6b10ee898a031b848336d", "1e0c5057e678f47a8d11a553d636b9b5eb971e7b8a91a409356498e21a14e446"), ("2c056ea82571e17348595d2b8939f15b325214633f53fc7479d3013f3a9e75c9", "114b100489a2b3283f1a39b4c90acc1c8e7afdb271e43d7271c7dcc55dc75aa1", "13f392253d54c74c8ce946764c0564ccdf9c52a0aa41d0958610e25e5929601a", "0fbc601f028a88a0c989ef617a22c1ef9f3b2510389b92fa3b12bc6fd31c2f3d"), ("2c7094ba458c484d3d9a8c2265590e52cee2a0abbc20b430ea8b3d5d7cd885bc", "07875c7f7c8ad1bab16e674044998f988033561bfe3431c9011cd3456fb1bd66", "1b917f2f6cc5142d2711a1fb925f5f5b4eccdc52bb80370cbed97fa395d91828", "14dca376674027838b40a61f881cc143feda98efa9ce6f40257fef7079d60a43"), ("11d59332e754222db47ef579ffd38de2bc0d46d473dd25f6dcd97c557d840c8c", "23ca1e16a7386ffbcedfb646fd776565361412592e562646cd19c466f9712d1b", "1f79487deb2dcc24707385bfe190698e4fc07bea46f204226b50bdd13ae0ce77", "25c8b496a8c6982871f51276758ab81d2e7cd8437cbbb1360d98468b2118d9bc"), ("0a924c8128932317ee7b0f932bbfd4b7c9ce8b6850a126f8d4c3ea8ec2fc1b7a", "1512933cbeb4d2173f3208e9c18ebcab1aa0451c7c8092550922fd68b7b33cc8", "13878da595790d90b192326904a176a552e71c150db49b50fd313a25e85ff5dd", "27ac085e9f080c30e91f6d25817f0cb04796ffde4e44162791a89a5a63df1780"), ("16290636e4b5a493dede2c3076ae4f49364acf0c2adb54e42abf66877f80e1b4", "147f43fd563ddf4e7fcdb1f9ea2bb69e209ab630b3ab12ec6a1546aa22a15406", "16385ecf3bf593165e5488bc9c706aac10c55d22c2c4565dddc41d4555984152", "1c61d3bea274fb403d6908604c49bbb6f363d6141d800d9ab0975078a571b844"), ("118921b1855aa25a5cb4aa531fa7382c3ad7d8b516ae36d8cdae636860fa82ae", "1493aeeb85ea650a6250a60116a03c165b53195e338d97fee51fa6999469db2e", "0e158032260bed7c8b1b145f60a3410f0904f8593e8004c6dad721b4ecc37d75", "16fa11a5ccc8c55c33480ed1d357d6aa4260c890882d5d553370637526f1f94d"), ("2f6ce635563b553361eb6a3b4583b674363ba7d68c13e6be2a68bb5a48ce2505", "0841e79c9652861a6f70a868ff6d30f5b7e420e26c4bd311368a78cf1270eb7c", "1d48ce2b491031fc485a117f69891967d35129c3ee26db9cf0a3875aa8ade1cc", "019b987bd937477f60a3b6530d8a2bd8755d3ab3e329bb9b2b324be3eff43d2b"), ("0af28038e02ca4044b4ab9a76eb9dcee880b74970a2a81e77119a77b2bfaa5b4", "0556119ead69b41fc76286d087028c1ccd7cbac6bc9d3f10773cf270f623703d", "28c39a02ecebf499083bd60bc522e33377eb7c3ee897210885f2caec8b9be147", "2ece1fcc5b0e3b3c77c6cc152229d4c7962ff58bf4e98cc2419e1b4b907d216a"), ("018803a4d97b8d85aa5f20a2f0079e52ef6ebbb6e4e0b0b0bf6cf37b650f2024", "264ef6ea3533f60d62c1284b6539eb919655c4579ea7b8cef057ac2302923f72", "28295534d66b716f8bc8545652e3e6271cd44c3dbfa7d98713a092c602b09243", "05d4d36af36d0f0f5a0be8a98ce51ec098d8fc08e421e4b36e5e74b25946ab55"), ("185af58db4be1b04167eb30dd082647844e7a892c55bc4b97455f90cb6eb7583", "2c9b7e86c262ad783bed149af4aa2ffa7114f5332217aa2a2b9f6b349a8bb548", "2c57feb9e6adab1b555527bbd69624afdbc93eafcafbb3332f7fa82adc0e8880", "2fdbd999310f565e9a3218f47f1756fa22cab2460fe02d0dcb02d7324fad60d1"), ("08246e08237ba60006029fa9f4e27f1d010e30ef0ba3aa4482a042a1fbc33f35", "27d04493598064088224b6d72863d140ea0843baf3a0909b2c02fbc62b9515e9", "1481bcf5b6ddc93cec16de04c4d14baebc30d7391010726c576230d3e4d7a222", "29a263af35fb529d7481538d7063607663d6929452eb9f3251f0fad8918ac866"), ("01b48d13933dcc9d7feb454c65dd9015116b6ead682f6fcdec5b95d806755d0c", "100c637314252b971070d83a89d33043a9e766084bcc414624743af70a3898d3", "2e1be5b579a88df2528096ae7226cdc82fe463c10a181a42157b07d61c1332d5", "28455cb8bbfedc5b59102eb7f44be7a9dd3f2e377e42710a85a1a29d1c4c60c6"), ("04b9011245876cfb9a055c5e94854f1ba578ec3af89fc913814418f249b8a6e8", "2187a542c536368a760adf2bc7726aa49d773be6ae5e1e9d71d69671c0daa9c6", "17c62f08738bc1652904b0281e97465ac365dc709da4189dd902198103be8ad0", "0a4264f25aa89ceb8fd1a6122a6f1e0ac1ff0593685f5a1f14cd2f53c0ba6a00"), ("0187ecbd6aed9366f8954c226df64cbb66633bbf602d6d864edc242207430fc3", "1f26cb1925a0830fc9a178c3e8525d3e20b5f346def90025016aba665a9d126a", "0f4b197b62fdda2c7ac0d51ce3196d8b539ec2ac9a0c35af6dd2aa6ab3f769f1", "2cebb8a41605325ff9eb5770114fabc78a897580e872025ccd350cdb1c3dd285"), ("24f1b6a30aa8372d4fb57cfc649c11aa8b336b378fd8058732f43237007a15ef", "0a97486276196d8075dc0f9f32866494ae2dbd2eb21010e62b754d6687a51d7d", "214cb251a0e763c03b9c7c2c9f180fc22a2f952e5c5da4769824d0f4421a5488", "2c54c8986aa6391397384baba6575812ef4022a5440fc6717cc319a48a270aeb"), ("1579fd452aba2e14a257dfdf20f505d033d31d7a3e1a2ae804ab3c9381a87d85", "00bf8b1fb1810cc314df982372671bc01ad828fe8d6c2bffaedaaf1612873dbf", "0b7888c64156d61cc253747ddaa9396750aad9fcdd4f849b4b89d45796d615eb", "06fa0bb3d378be0c34836513e5b17845c1fc2fa8da002f7da6cddc61ff7a74a6"), ("300ac84fabd83c0ccb98b8aafda911354e227a00b98534765ac9b38566e9d032", "00e3d28efc4f96450633449a32d5c10d39c75f131e1f249d2d6a14026aece5f3", "148f3b20c7eb50199412aef5cd4b2b702ca950a845e753c3f077783e41b4bbad", "0a42c608f92651b3c44587e9bd91a5bf2ae05c782959dce69ac0dddea6af0412"), ("01a60444d59595a881502d5e23362bddca69083f0abc1e19dcae2ce98273407f", "0d393af4a60486e64e6a70d755974a1aeee63b78c5bb615da3292d9413b206b3", "2bf89a6fd50f59640ed99cb5f7caf253364adc87330454999f47b15da1c084be", "01f96613e8bad1c89f3dfbc2a7e3768e8379e438b079b58962b341d650d5ee38"), ("211cc57bd3f4413ccc84eaeeaa376ebcd31e33c618f82544ecd0b3bfb697b980", "063a48c5995a47b991f5a6c4931bcf50cf4cb2223591486457d6cbe87a47a560", "0b132880146e91ff4f15157c1a913cd3b32962d6e57df8be43541919852b2fab", "2d906632ed93748dca89b188ec4c9a0b04381e12273b805248ff84af64190f32"), ("304389cf5c450d573c4189992933f377d9fbf58af788ca783c14a09a4fa8dd83", "1107d9970695b66a19675f9392cf544f2ccc17f5640ad8b375e21f9d3f7e972b", "24d66444aee8a120c1c4d6164d40229c2975f2884451b82798b3215bb8da7f22", "11a5531734abbaaeb8c2c4918b22812319f0c497f04fd57ce07ce071ec1f3d8a"), ("05f5a8910e09117b9cd0d446dfe3474b6d3fd66b5ebed0555693cbe36245f929", "16931d7f96f98b27a06b8d1df46b78e1362a82278de9b4afba9c2e7fd71d223b", "066803d16d6ffdc9028dec6757824543553cdd66319e1465f6f63cae805e556b", "2e0ae55b69d05ab92ebf343b8651b5f75d2542bda9febd6607652eefc98e51c4"), ("0d8d9e1c34d602f85cfc2d0fced9afbf112946d1947337b52c6410073c4635d5", "2436cec364fa49ef2f577471ef03d8b4bd6ce85e9b86dcad535076e72991c02e", "0983469a10053fc62cdf9f9dcc380f3989ccc4a0d68f74ff74df8322e5636888", "17c9718e7d78049070980b5fa3caeae3104ba4c7462770a795000fb93b0ecccd"), ("0132f1087b1e8e620148b62aa450fd1356b7250a3b630427b8cbe2118e8e0304", "0d670e9a26286dba520bed5722310986dd3a39cd9fd61ce14a634c10bc766a3f", "2e57b9640b4d1b48b0cc2f4e345534fd221e56cd273fb761ac8b324c02fb53cd", "2c7bfa9b86b3f7493da61b587fc1dac1a87c3d0dc865de3a803b0b0145117a87"), ("0fd727487c56b9468aa4245b8070f71f9a183e10592c4064c5fea1dc38b1ccd9", "1d7b6b4a7966eac063f1af42ee305a466fe85fd2c96f49c5ca0f531dc6ced6fd", "2442e376c7939cfc17087aedf0c9900c27ca09dcdeb3832d6b8db259bff1ca77", "1dd958f8d7cfd70c5123eb511e16962b045daeef6f85fe25438dd329f3fb63f8"), ("240dd09036b2ddd70a5e1a5d2043b0fe8d65146a16fbcc2ecdbd6a394974dd4e", "1ff4348ddee68562fa84a3acbaeae72b8463b862a727802835f2a8592ef8ae20", "213a577d23fae165715342c35d71ef813b0b5e42f08cb5afc3ae4daf09a97385", "1c10525d3914a8a20e2cd26f1748e610fdada205045aa1c7f76dcc27a9863382"), ("24d918cc54d7b91c5f983324f502050a5ad4ddf0005de0ba5daef69395f91077", "2401d66f9468ac12fd215b545a3ec3d605594d7f2804a53482ec8a3bf8d588cc", "23f10909e624da936ae8d699110a0e70b419d3f599752a4e3c0ecd816c9b2dd3", "03d765bd0f9d9a405cb0dc4b551db5a75ac3672920280c8de3ae6042f704470b"), ("154e98f6fd72d89f74e9841817ba26e7986f87655d72f6c3201557b0ad2436d9", "14487a80382a892814cf0b21507c3905ff90f00f29ec69e7064b9ff0e5249c2c", "2aed8ab963d1d45e3441f38369f7a3f6200d7ece2cbb1df985c2341e7a312de9", "023376d0c9b1f67b8612f686837d6f30ca968aa2e08a1e34b878c8b403e8fd63"), ("19a2e0f1891885a6994ef62ee1b24ca566a1a3de85486008cbf6f813ed67b774", "19be12802c6e2a55ab7633c1f2abacf632ea07d09c48161f5a90a8a023b03d12", "2d6c3773adda41af21d262e111993a0ee6d39db9cd2e3729c39f3c307052a167", "15b3590cdbd83d7f7f213cbb2dc143c43a407b1974cd5e43f4745949074e2e3b"), ("0496a434fa2141269a3f36abb44bf260d87bead10a0f97a94c98405b4ef2db18", "1329f821bff8a8726c5ca79107e02208f6ed019cfdf66b686329ce041caa2126", "148609844f1f937c144cc621e22aacd9ffea8c371653fa08b2fd8b186ad65c2a", "2ef97671e06d359b9f6ebf83d1506878a82c53ab4773765c78658c15338562e5"), ("0310800c5f7e7743a6953456c90c499539d89d6a82a4b2c3095be42335fe70ed", "126786ca6adbf09b592e25bcc5f17ca885419d7b81a2c0bf4a3632e12768cb02", "01d87d93975c42a7c26f4346f65ff8c5cd901fecb983800b9a8c17773f6c5f5b", "2de4d217543797566bce0196c7f6932720bfaa1eafd6f7f03d17ce580c11327e"), ("05d0a9a3d0fd7c82a5c2cd0748073ce684722ce9813897024b5904ef0a6c74e2", "2d82a9f7afbbef5f94ec5ab7b86896ed5e8294744d5ce41ff3816e24bd6c8cf4", "12f6b8321de5c045d5a78d56396d082236e9d8a2a8e921ff0cb38e5d03997744", "2dfa20da594a75bf51640d3e577483abad10078e9dece9010414c11c4e088977"), ("16eb6e80d84767f210ce050f6fbdaf7f6da99a5cb40fdc5db76841c0c806fdc3", "1496e281d40b8e9372d2654d365ed5488e39fad1db2049eb15cadc380c50e5aa", "1ea6faf9a28b02674c2a1b3ebf17a193ef2a700a0f8b2c1608044fe6218aa604", "2772b6f138429bed7cf31ce56c191a3ee67552b9df229704aba2a77a178466e0"), ("24ea8a722cc664d0dfa35a97d405fa45d4bb97bfcf7d2247db353843b6462a4b", "0d5d6f44a065c92f73f428541e4d664dc745146235566a60fd8308a0d701c2ea", "085e948af24ade18a8e80515f94b7eca45a8c21a43036f9a01afad3d3b7cddbe", "2a64ec2121ab87a12307ab9577df565cd005f32b0f5c6e7c6389ec58672c85fb"), ("25b3bd886a3a1d6bc3587a2b7e0c0ffb5ca7640d5fb20077c81bc11fdf149ba9", "15d7fa8167fbcc6f132695ce331541693c05e76d16ef9ff5a5a8a650867afc45", "25ecffaa0f8feeff6b12e2f41e8954b45b7a88bc573c3c19f6c78f8fdcf0da0c", "2079985ce68a58cc661412fb486c272561aa93d18dd869139b4a92519048da74"), ("036893b03254b3c4abe66cdb863c6406ced430a679c51d29b949d58cd5f9cbfe", "0c13072abe8179f97b858bf87a13dfe82cd3e12759ff513fe4307a5d31a6c476", "23e2c298b3ef6c4c98e2afa9d59e0f89f6865297dc55a25549c528afd9fd29a5", "268b65f68ee51ab8f6afc8bfd3b44a685da60cf198300b982445592bf419ba0b"), ("248fbd3acc153fbe6e6788c19e70666b0878acb7e019916a9837b26231685570", "0db8b7dc4ef01d2efe260f5b3486c41a70a976e27279722ba2d2ee76f90c89e9", "280c4d32a4170588b2887ec18a9c2ce19d1cb8069aa6f0232362de562f76fe9d", "1c4ff7ee29130d55b532e6abe7edfc93d441586aca5a5a65ceb91468d50e4c21"), ("2d0419beb5caf4c526d26a0653382495aac83704b78f77c1b641e95dbe813be0", "2633b758c274f918c0ba6b762edc4d537983cddc418d8d334a76e89a611a04b7", "13f7db4161ddce28d9bf4235e8fb5c5913cfcd2fc69f513d150a2520e91f0d42", "04084b3294cef5fd37da480ca65af1fb3c06a1518edf1441a84d1b3c09c266ef"), ("0408d480ee5b29030d27e778975629e1c71d07447c2bb53008fa02de50b6e166", "09120938b71197f995047d5d5c9ca26aca6272b4055d527cb8e98212e34f2f7b", "2d0d44413cc4b807aef2afd32435e363ac368d89eb5ba00fe258b06f30abf87d", "2294af11838b84f843f149f6e4f9c332b9a50930b5f2b0b8fd830b00a1372981"), ("05956b7a4ab75f7415fec7eedca8da1fcc5ca5636165700b625635d626baa21c", "16164ad2938fd1eca20548d1606d7e1ff8ef88199231c8943e077591e659e054", "0353ddec55050f50d66edd834afc77fc69cd687d4fca99cd5f4ad2ca79db92e9", "074d651a2774f245544cf98f4ad3de89ca9391447ea89c606ddc5175aa2daa29"), ("0338bd1be9fbe5a60f8cabe7b20f7a87a8f736cedc95c8f7605e96f5197cfd56", "05ff761930b8a58b91d48db3b3d970f25d07cc493b3757056134e2085a2cd99a", "1312a0a449bb91e678117d765356ef03d566240c85862b66bf4b9a34219bbfab", "1e5facac44fe5eccdeecf0c9d8827d2011f46f2404f83773e35289df2e306675"), ("2c3f959a44d1a08f37ea5fe365535da6b9b61890f5017ea8ed69c2593151fb74", "14c708c831a6bd60515b065346934b38e7b1d41611070cd47a19da188ddee8ba", "1098d3939c9ff65b0fa3a7cc9aa88400f5d611d35ec936856e8381f76d4a63e3", "0cf16f00cfe1611e9084f2ccf2b424e43390a0edbaa0abb2e6857c402d99a5bd"), ("14678d5659f7e978f7f1600db6fe7b2d26f638d16cda561e778b09400b651e7d", "0a0c52615e68a9af54dd3e6d022f17c9e66f54a3ae2e773f9a65139865a691f1", "197d3a38292fabb903d950bd2fa77122344c031316d227ac70a2a641fcaf61a6", "1000fd100f3c175bf9b6f1686962394a7e40d6fcd172c7630c76986407dfd154"), ("10dd15ae206967d9f13e91734d0f87001e409812f67ba4b574dfd97a243819ee", "1bd8e8ee88eeb9043be969e4274812d967700638a226f199786055698673d5f0", "30518a3d56a60a5b271149cd791de4af25c73c83033938ba1a73a59ea7fa94d3", "04adf0b69e485d04844736efdc7b2f2353b125badfee4660abb55e6a7a02710d"), ("3030ead480f0bdfa65207d54f9fd6fe27fce78e85fc920e100785e4ab8f6c1da", "1274ae0ed50079251ed8d28e933328cf06d2d609002430c70fc1bdcc77fce421", "1bac8523ea6d0b922bb43065c4cb91c3e11e3a317e9408f54df000265c10a1e3", "0f37efcc8f04ea1c576e4f5ee055294c20989b4fdfce4bd37e80ddf6b98df66f"), ("06d6c92e3e648ce8abaa7a718fb9d34ac696c7bf30877ae275c43292a87a1736", "0536d4864f255d2606295f04d352a6efae58d02eafe40f939dd214959ad3d107", "2189599a53e55a6e7edefaba09ea43e746fb21ef4826f1963d2b3273fa89afbc", "0b1ec6ba89b257b142b09d5301ec8d9e69899e058cf879bc8813131aa827c1e4"), ("2cf6f7ca01c9e19cda80b319c6ad3c0a97810e8bf74ce9efa4254ced6b75c8e6", "214253f9841d23d4c9436621512dffbd7674d39928d7fa5934297e6e63427e2f", "14c94b7fa1d5d65895e7a77c6d0238497b02f9d56fb47b4642c8086746dd4bdc", "2137387bcfbbd9b598fd4b76496cb4aa387c811bc644df7df03304555079e8e4"), ("0e1e9677fcc9f6aabf517e0909bc51897eebcfdbc9514763b1ed6ec927cb8f68", "034902d68363cb7bcafe6897d7afbc192f09adfc66907156b0940afaff774648", "04545b0c6f6d9c158b3c1e4d44eb56ef58ee52184c68617892bd0ce63577b572", "1f0a34fca4b2fec017ef7883bfda563b7a7f0b98cbaf16c4dc432156178d2b1e"), ("002268d340695b59d9dc4582e712dd98aed595e95844a86cc3a39ccec025e104", "19b1edc301fe2f90620ef04901e6ce28ba520f0c7aa4aa31a710c76284d679d4", "011c810eb5b3170403446fceac89bac9206c615b3ba6a4f3b740325e36d59e80", "30182ef8af4befa5b8b6cc6bd6b8a0f772d99efdb290d0d3c08537dfae429edd"), ("13a58eadc043a105c2d42bd4e53d3f1fa27943965b1c21f713c0c5ab2bf2fe5c", "056d41b5cd30cd192045e39d680b1b8e321ebc8610a8182f47db56c2440f23ac", "01528832939ac37405d329ab9c8956b8afa58e795e54783f38f0b27f898d0819", "12b98c56160ac1fdb3a735d07aa74f5ade4b1740b66e30eeab615b35d5d4b432"), ("07a8ab67926a303a24e84eb217250c7f690b1421df80bac0986ec4f416e79996", "07a2eedd68c5a922a36634062aebce63126dfb789b09e64a4894a4b24ce19f36", "117e399a628fe4bd1650821bb52568b8cf3507455dcbd17a3f59c41410fdc9e4", "1f8f47ac25a6c2b3a7fa266d905e78180dac487da62ce2163266152185d0eb0d"), ("253cef86abfb0d6120f554ebf2d29f0e42d6f911d097077c5270f81f5691befc", "139e862203b647490f448aebb452c726cd658f26f68c4abb9562d9f0ce99001c", "0c8649b844842069ed750e7e5d713e1dfff179b107cf45b7473dfb39fa2a5aa9", "1bb4364c2548a44d59b0e5a765e12bf96e9b585bf3d5832651351ffe91849914"), ("0f392e9576606662683dc4ce92fea1bc5aa64ca89a944a29e67f5e6c0ac4a452", "0923af786e11a2bc757ee565d791d85a4e3c6e9570d7484c5dbf850e71ac7ad1", "0f588fd9aadad2e4bc464054a0746d574639bcc3687066dfa0466491a42c19cb", "26074606afa1701d5c551dd4688e9f4f82b479e1870087ae79aa60546c030e3a"), ("1ddde261782a5b8b682492626bc93d4bc4f7c78c910c14750b1f12e63934ce3c", "21dd69d6e8e192e897e488dbe9192e18bdd872d684387841eadc6a43ebcc6f28", "20c41839481c7c916a6fd16fdbaf2cb8cd9fa0876fd2e81ab0b5ab640e548ec5", "06b46383e843467d41ad395def21c1b9a3478808b1034d600b5866e7227cfe70"), ("24307b01413dd201ef2c6e9be24935687a998c5a38bcc39e2eb82b1cf81f875f", "187e22c6f8831a513ac2ed46ed65a61851bbf53d9d2cb0c04f70b1d51ff059ce", "047c323b1dc2a0acc9d8fa2f25591031f8e346144cf60f5a4b9e59daf9309364", "01b9f08448d8a37dcffe392a10d440c04d6e3b5b0f958793f08f4479bcd73d89"), ("215ebb7a3b281f75cc24442106c20649e0e6685a89f810d35c593b635998f44d", "03f2da157a7e67e55f3e0f5940271c1d51fda54c74e47aa1b7d508d79219a268", "2e7c3da65706c2a4d13072ef3c8def433f4720f39957c2d141ebece7ab46398b", "20adbb433936095ecb3324da3b7e6ed6c53c5652c3714b4c8788d2e73de94229"), ("17ce5d95255df0ff4e9441c84cb48f3bc63708e6bae21d10ba414d16ca4902e2", "3058cf9d4169be40181f840a22f6cd70bc1799d707352c38276bbd13a0300209", "197fa0e5edf506e40db2dd04369d14da6d92c4682a9c3e8028f4b5ecf14059a3", "1bdc22dd8a41a13c0ab02684099aac3c13f66060140aab06443a9351bd2c16cd"), ("0cdedf7bcdcfcbde2bd53b8437328addf98ab8aad0068283ce5685ec4887938e", "09c11450ef981dc4233009d3b70b1824c03073ed9d3215d689b4cf56083286ed", "1498081d1328b7305afbc201eb41c254f742599bec46a4d7d97dff494d702470", "2adedd442341fd82e3cc03d89872316f7fa5a8d72eb5db7ba4d18e81ebba54fb"), ("0fb761390a9f1c6d8adda2e2aa73e1d19e75207b1d8d7a0f332a189917cdbb39", "22781397b402d832df2bebb20097974d17a5885c7bd459e70e14988aff7fdedf", "1dd61b82abfb92711cb10f02597a60e458fc981cad051196bdcbe3b35093a5d1", "2d71225a3936be14571737de189c0bf6dfbc73b75eb93dee05db2d203a4530ba"), ("05090c3e0e61bc27beba920b6da6cb3e92c871f7d9c7ba40d170eae91ed8fb0f", "005efe906fe4005894d998c910b0af17a98749643e27c7508a3bab3571c6fe06", "05880111a429b834fa39ce6c67da89a54d2563cad3e87d6a44bb4e2e8b356ebd", "05fb37fbca75a60307215352c4d1bdd68bc2e6de35a911ac7010e0c2cb2f855e"), ("1701e9616e332901ee4bd9eaf5002789e33b2dac5a4e3d0df50142090de278a9", "024e7eea3b3be792c7969bcf03866ea5a89a117926b5af64d51150db0b08d0be", "12d25e136573002645b416041d247b8aaea00bd1bc51ddfa5026915228c140ee", "20ce9cba4f368744ead060e09e41c29cd70864d8db1bac92b30063a1b643c6e2"), ("0144dab83ba6b831faabb96385f48cac5a41f3af422f9613a48eb989bfa98b84", "2580e9b28f42d408808d0988a9bee51df93d243600dc974ce8f0ad40b3f5c1de", "265e839ccca96652b303ce681f9649b2a438d29c0f2cab6531bb79ade1f64c5a", "0178b0765582eb8b176c9af0dcd84fe421dd01802fe7a476bb0bb5b29a9a784b"), ("144855f01ae240ff2196a89bba7b2e422c4706ed4c3124ca66c8bf3dd5b64362", "2b85fc16a62e584eeca122a0b580207c569e86e4b23ea72957d67f4d49e78241", "1378ab30115028587bac22339930e1eaa933cd424adef2b98e6b310dc4c3e2da", "2cd9d2b1e2b9ef4e50f906237ed21357aef47892ce1df388200828f33f999b3f"), ("158e2da1b8a8c65ac836476f81b2c86d923ed20fa4bec2851d8913c08a9395ed", "02bbd4b7f2f28a3bf8fda362cc0be9c15409d77d3af03f41babcc5fec5170039", "1a731a3e465a98fa9c8af07db9e159687ae81e77d8824b4ba1890035b655e778", "027bf9401de9d0c344e5dea35d66b00dabbe340d6784f01b3753806c15bb166f"), ("02168e07f903976d4662f05215a442510b6745f9587ad208f54db14fb2d0d2ee", "23b7d2dbbc11e571725e0f5f5f3a3a9cc30e464ba58eb0613422be05d2c65ef7", "17128b8e8e41999c48cbaa7cdadef9b7c0ff601f21a0e11e8b990d4034ff7282", "293dd1aae581059094203a2d4c74d4b0cbdb331dc3de6deb3ec293d23e0f4c33"), ("0ac54dcdcfe2f5fb5d9fc9cc1a2dd48df20051035b045f661d73ae0b50a366ed", "1942438f457fdb10a346d18eb0d44fa599d73762cb4cb148850eba4f8a95f042", "1bb68867f2cf01d102b943fbb6e4a2a6e77e785953aa5ae24ff003fd987b3ca6", "0dc581ededc1f5b1ee2725348442ffb0ba064125b04ff31b2f345fc6464ed69d"), ("0b5bed59c53470fffdd4ac338d807e247f8a9143f0946064c53305c30c92836e", "219be42e3efcf7dedf279f01970589b2a7416b20b6c0b8ab6003899bcac08e23", "06bf41bf700f17994417917fff6c3de3559b0d691fb9e2b502b22a89b667b1d2", "06ff0da609e22abe25cc3bbd6cbf04172145c2a411d246c5daa38f0a360619e1"), ("289df81c017d877f520ce3d3661fd7050ad32c8ab4d93aeea011695bd4fb274b", "01aa566ddac8cccd521b4548fc4b1b127211fe05f5a9cc01daa87c8c3ce5630c", "0a1c90ca0f56772850b70eefa783b3dc3bc286b4891a2abfe0670f5048ba1a06", "1b581b5f6a41d830cb121d632e1e1cf6fe648d4c31cc552fff79abe9a78962c6"), ("23bc3433b8693648940f061680b9e7518f970be8662c4a94e1c78d6df2dae79a", "0f245f23e61aefe4f555574f7118d9e217a3af4fed267c36c8b5ae28951e6172", "0c51df0f516fd901495b7a2f650ce3f5d9e08af3c2d29e2bfb0bbefcb1524545", "038853bd5c15eddebab707d95150e01fb9e26ffe7f33ef96f9dbcc278ec4a270"), ("05cea319ca164452164d9072d0159960447033f75f6e1ade6f5570187af03b41", "041ace9cbe0fc89238c3cf60da3d80be3675e1f0c17670fe2ddebce170a0a57f", "0bca8c7f67563b9f181aefac9c39f51d4f38142b7371469bf5b6a85c117f6b64", "00767bf577624ee5cdf5535e7ef865ef11e41b304cf3d86087e66baea8e518e7"), ("16350fc28648143a52d6afdf8136d072968d538f6d4dd8da82ed295266f2e57a", "1a25dcda8b67d17f99816c88e24dd599625f271597498cf80e5074b6cd00f93a", "2d28534c09c03d17e4ea2ce99b6cf67d8ee26dc0b97e8465c35a29de3187c4db", "22eb7efc6dddd606022a3bb345d6db1fb808c9d4f590981504165685a529a8a8"), ("14b0d52e2d9a4d5d13fafe58a3bd59aa81ba340213a3ad9cf1d1a826958f7130", "218654d912ab0e81e168b28ed4abf1766a792323e41ab693aa625bafb763f957", "0030387fb9abc87223d687d03a56708047a5bde22f11ec62bfe8898d246349ca", "2b51aa8e2b850759a0254eecde129bba6fc961953a84ab9105ac9a95b071de1b"), ("121106c617680186d9e1618621f06fdbb395c176db704da8f6cece2053cfb853", "17db139f53366366f3d1f4b9eaf2d98ade014d94f7cfbf69373d25c8f7c67801", "0729dc737cea0932ca087eeff1a2ad06cac9c6f93edb3a97aa033132713e07cb", "0b83c8c97db959e6412261b8bc1a0c0145d6f8b9b76804f7f2948c6166fda281"), ("25d4e77d50362f350c4a90701d18b10380792856762050baec74d335e09b7516", "255b2c9e6f6daf3681bc7c1e4cd66ca0603fcf64112cbefada6b663e99f924c8", "2f5b331dbe6497a00c03b056f13ac377a6adf1344ef0fbe9c769c08fff91c1ac", "0ac9a2a7ed921f2fb8a0c4f2b30e562734a207187ec4fdf6d7c5a2daccfb07d8"), ("1bed70d9092a651daf1aedcc76ef037b1f83beadc218512becada0375cbc5669", "1a3f0e48a38d41c390d1fda514dcf9af27fb98856ccbc4c997f18ccdc1509113", "1eefc11c09a0986ac178245b1292b2ac03f2fe0192b0e55c48ab702243277a06", "0f38751949bec05601e5c8a10c85f1f334f56f2a908b91eeadad3b99a424095c"), ("2ea41d7402de42a2adb1355d46055b45f0ee2833537b459aae6b25bb5f374fb8", "015187d8a060f6113cc6558b4183b861b64965d1ef3ae83fdd9221db0b50dbdf", "2d419b91d1bf8e68689aa05314debbac1758e70e348ef29a3d2f9281ab69e7d2", "2c7ccc7d1926266905780786b3af69366f9977103854b411ddecbd65fb299460"), ("109698c1eb8ca08b58c7c712d043c21b7bbf241b22a387ad9a32d85e4e96e9cd", "0327fffe7f6da201feff1ec593a1ae10d8fa718b9ceeb9c447187ab6cf4a1166", "2b938b14b420088263eb2c7db5866d035d1cca0f3a07ed9d529f737ced25b9ce", "143c0e8f37611f9b83737d1b101a06b21d396367d134aa4fbb87c890c98a9801"), ("0e3018fbc6e1ccdef4a107db4c2dc104831a20ae756fc2ba0057e0fbc9796417", "1be462b10ea661958ef8541f3d2062f82b206aec25bc3ff87cf18b587ecc0e4e", "0d7155e26ef6216f7123e1d9b877de85c883c4a67050e8f77b7aeae338f32a3e", "2057e5f6e1dfcc0643361bb87d010d740ad623804d13e0978855e1a772a504e3"), ("0400c1919c162322a8b72d351fa1c34cba60999f8f1927febfaec74f49ace552", "1ef7427d2db9825d2b0ad8c128a946bc069e64648c1301e9912bf236e527e1d3", "012a3018860a798a8a4363f47dec9a2a7aca19dc7898c0aa62c09b65bd595bcf", "10d75f6abcb57dd46f4972f274427c890d4d833b621a1df8e6744cb367399ba0"), ("1c7f2d9ffb3e4bf1365b18e878f6ac1873bd201a4ff3b58ecef848c4aa296444", "12ddac201ca123c92db4ba5ec5957399a54334259ba7a047ab652d9f4890b9d3", "28e189af88eabefa0507a607d6ceac9b8f00fb02e15781b4a9825393afd72b94", "08519ba563c9fb5b05b2e19958302152e86479a31a08cee8999795dbf562a819"), ("27b653726e5e748bf7a3289634cc344bb6c4ae59ba08ea2c1c5bf3fa46320f3e", "29ddc4742276f61c497581417c05ca66a1971af1d636025be1bf5e3213cf7cfb", "2323dbaa73f3067ca845d5f0f2afc320845988b6d4e39d86b00a05f74ef78fd6", "2023a2a00831b283b3137da18e82707e0bb0cfef21cb09c53059b3d3f6265408"), ("095f6ff23b8a737e42900043f7c34de38bd71abdba8ed4dc3b52511a0723630c", "1368f659fdb6d96745ed5a91a06e93cbd683daf071a197bcd4a731f2812eae70", "1e92bcfa9e8f9f9f90d0cd7e55f7719715c316d367de67ca8384ddfb98031dc5", "09498f255b96f8db26625ec83e8e9ffedb03ecad38fbfc1cde6476c43ffbbd09"), ("0853c6a464cf45ff073f99f27228e32950e332e7416a88c37114c97e975bbe03", "07940f8667d57b3156fd7fcd1bf4827ff124adb53633ea070e6b06fe03d478db", "085f01806b8c9a1ae6af43a1ed60f28802c8f322b46010fc1252aae3284c228f", "1ab48abaa827e747e3139c152fc141b5b9495be77a0980404520fb987d0d2d4d"), ("112c2615a3e4e8dd3862000535cc2affa02f44b10bb36ada166f488494e811ab", "19d5e09fe2e01643fcd9eceb8f4a3bbee3117a4f2871b26c9c2a46888bcc6ae9", "0ca1f12af53503f631b5f44de7a8ac9d024a218153ad8b3d8dffd644ca85870e", "1f77c133b0ba509bd491f5d53a59b1d14d13eaf5876b781b6d3fe81b845cd014"), ("0eb05be39c4cd8c2613de4146db4f30f9e262c05b9c5cbf777b9e1cff2ea5fc2", "1f369584531e8661f87cdce8233ffe911cb8be21866dea8722e5ef6436f49175", "03acddcb672ffb8225d67b9d9cb304ad1ae78f20a685dc2a0bca42f6d3450b50", "052d088e544961b7f925a8ae37ef51aa7fbc83ad00aa5962477f5cadc753403d"), ("0ac6411f86497de2b95aa15359e746719c094f61c44c5c82194e32f7e6418485", "08f796db649483331d3ee46cbf2c8553573032ed76310e3fbfa4d6c4e1aee388", "0193ca12064bce53f498c3a0f9fd34e5b1f8b0415916774d09cd718479763e96", "0d30a10a0d57e92e83b4aa5b7df46f0d7e03967809eb58be06a19bf540437340"), ("155520310a17f3d94acd241d3d4f525a696419983bdc5de946a5a9ade61df693", "0c958d5c673405da3846f66f9470b9f840857fab3e95d99ad43e48c54156d105", "146daa40d5442b65f1ce81d287c0e97cb8b570be232a1fa2fbb32ba06e99e945", "19810833339d38f430f4193e62807744d5f3142a282add4d1f4ee718e2658edd"), ("188c3ff35d535aa07137973ed06b72536acefc84b1c1cb845bbb1164d991a2b9", "19163813cb2c518073e2f46b486c13454e0762951f4690124b505cf0535cd719", "142999f28f51d17ad0a0877ca52c3d8c31693911f124e3567ccff1f813f536c4", "031ebc17ee355f62942d4308b4ae6d9f397ccc6c45acbdf31138f4c41b0c6fda"), ("2c95128ae47a849e96c8d577053de8b85cabfd18d6ed2db391dcba10769ffb2e", "0e1216282b5126eba4729fdcdf7f1f4e7ee775801d771b6c8cbd9dacd6e52b57", "0d4aefe7950323c0db89ff365650989e6d56da5a46d498f87519114dbfd14e7d", "005c3f96240a161d33fe196c4d84ef337be5ca05b73d59024e6f6e9a13898a53"), ("29d98f7282700d486b1579fafcbe26746376d95839f99bd15a7eacc4391173b1", "183024aaef64227e5f1f340e4a2f63be7858b61ce6da6ec05ff6a610118060fb", "17d17a2f0867c853796dcb2fc6c561e611e52013e8ba2191c9e69f936b1411c1", "08484a7f9a6d0c6315abfe4d165edb1c7a6e683b57e340d72d159a93e7412d8e"), ("01ed020f292db6e3441c7282095c476a40fd6c857363b5ef192ee013e910c3d3", "3039ec09f90d588920ee1546a6180ef6f74a3b1f77ad932a0a78bb2b48bd2344", "1a60690bac0abf76affad5def19a36b25c013101a236379ed89f78338dbdcba2", "2076c9b71c2cb2c8fe7171dc5dd00cdbda5a46baf76a339a568cfcae915b58d5"), ("2371df4d7e7cdd9e09804fda76a31f9c16a5e4b97803abad929406a14d0abe47", "20d59ed00243c668e7823cacdf85bf672c478d838f2bf8f4f3c14c7712587fb9", "19ef98f68d355662c5482462f43ad1a1bb1a72b61f715e267bd195d742b7961d", "04135cca72fed02f0c152dfff79baf7483c8fcc3f89cbd732e2de37046c7b1e7"), ("24953dcc8007372e14581f844e32a412adc92d328f04c9b50c7df858a2acf9ef", "1eff6d2b4c428b098fa85b3996fbae43651357a76aedac73073457a1144158f6", "24259a5f9e02db5106cc798422190ac6e1891dfd303ac94f9371b2657a96bbbd", "2d4adafb3c25c5a489c00d8095af7049576302cc00500aeca1a8c17aca413d74"), ("114f9b10f7d97757ce7ff3a253cae185c34b19cfbfd6499834b96b349a8951b1", "0ccc71776f49c43006fd0c5ae9ed40550367d6fe99a8cebd71a1cbb2b85b5c1a", "1fbc2b8cc47f80c26ca58ea7b64e7760812fb25dfbd3b454000b81b753045e3c", "1050917a4a2a21ed910ee7875076ed6e7bf84bdc36095f0f7c10d66029acd8ac"), ("000c1d27f87549650697d12122edf3886e99d034c287950c4ead6fc9c6de5ab8", "0af5ed9748778935eb8681bc87ef9a8b36d35d0541ff31681cf5a118731290d0", "2ee8ce1b82568684c533c07a9ea828f3e9e1ff6726a88237488a171cac40e60d", "2d0bb65c8529f1017f68294ac533583ffc2a19909e4ef33296e12b6e6c4adf06"), ("261727b48ae96714145acfbbad1d980c7bf1e1f69ab2cb481b92a32201dbe233", "0770bc9b8476fdebedef6981918fc90aec10c1cc47d7f2e3a13a61d5104c3c13", "20274492e34e1edaed406c3f83ae149cbefdd22b4ce3a1846496bd2eaaecf6f0", "266db47b69ab6605ff9bbb23ac642139556b32c42962bd9c83a245a430bd431c"), ("124b4d778b4a3162503ba7f498c55274982aa2db95235cfd831469aa7ce97866", "0f2a593286fc45748e789185e84798d76e3f248e89011f49ce1a2879622d5dbe", "2459c74fff14f13108c82b02ba85454c57d31ef07199bc67ee4e4ca753f947d4", "293fc2a3be7cedf03bf74e55e48c822eda5b9a4c8f7a9693c09daf0bfa984716"), ("1cf13a356fd6d982ad733e994d4ecbccee5550b45e6dfac76551f59713b6c732", "1898da48d98a9176904272b3f325b01b22e98331a5dc24682dea8d78f0cc2e08", "1e8e5e6656b03d3be9d92af04fc3cb24d8b523a497af9eab00d606b61d3f88b7", "2cd6ccc27a693e98bf1c187adf0f98b4457c7637b03443b55138fa6abeceaacf"), ("2b6e7c531620aff1971a9107e431d450a8cfbec0f3611e661517ea8aedbb84fc", "06dbbab0418f534990f7d1f002e136e53d92f3dab8ca27d56edb27ad674298e0", "125c202abf0366b0d67b1b07d719d0d0d252a4b928236cf296ecfe2bc047d4bf", "2d8b58d7d7dcb7528f588ff9352432bc890da1c1729e4c04139cea9d340f2829"), ("08d22d64dde9c1525a169f6e2978f4514521a2e982dcb363b84c5f4c0af3b47a", "0511030bdbcef79b2b9c6314f6a0dd9c9cedee0922a2ed0c28694baef96de07e", "2466b9fdb1cb3a484c8e0c07a07d5deccc32ba375b9ecafdef3275b1e2d649f9", "0c6c977d0c6f104c670b901c540edeb4ecf6d3c875eff6de3d872de4efd20db5"), ("04b9c5a2b43cb73eb49f4c3058afcbf45cc5449c9a546efab599cdeb8ef4cbb8", "149f0bf48c5e113a042e51b414861a086b26366a478be680edda9b2e1a20b0d2", "0faff086fbcf3b2cd14c4489deb339d01fecd2e34a2e096561b6898bac177806", "04f86b0be9af44bdadfcb223c85440a39f11ee71ca55fa75dac0058ad0fe5693"), ("02fb129e9d5c55deada56342f978437beaf16d43c5368eec1009b7ced059b169", "206a9bca025a97d81bacd0fd5967ea94f8e518da2f86a1c2270b4a8626b6663b", "0cf5e9aaf0954c5e51fdbd0ba65010c35260d82277c6c463686999782e32d9c1", "1aacbca1d66efd8fe3bbe7a0f11269360d12538290bfa13891b6e8b12315434b"), ("0aef92a5f783bd95d2a89a7fe91983d75d940aee3e7979f96af21e1209d22667", "127ae29a63dd9b94f9e0fecc83fc72b94f8727f9f26b987ad105fb9673102561", "1e96fee1536ea363c16f31221ed9160403a8ca62812e85b44a20c1f5e60626c5", "0cf9f0569d053bd4858bcbceb17bd7fd2018d1642827828a2c1955800789d531"), ("0b386e18d9af4797520eef201faf611eae63ce91c8093661fdac73378c16ab6b", "0c0882452f78889cd02e69136780fe1b3b3b37a6f8b96c766d0097b1597a3ebc", "223c21d1a1db0bf9ffc7ab315065faad1c7a906355e0b20d60b24954e4292432", "2d86dca8a3a9bbf17435c5367608d65aaff22d18aac10af77da09cd8cbd9b4a5"), ("0895e737700c6863a6552a7d3fb5cf3b1776b425bb19e33da56199dd02a95cee", "1f814ab1d826f59ab5b52c38bbe2a7add92bea20ad9fce86562284057511cf3a", "011c0a538daa7fefa92a3a444c1e1a38129a7ec84002ab0555639d951d544dd3", "06ea8170d6a1b100c0ac15a2ca5cb9cf3bd187c516cda588a070d60029499b16"), ("0e5681bffaff8d0b9113d96687d15351f41a08f81e51c1166fd346f7e3a6f6fe", "2a966cb163133400e0cadacc66b2e49ec2aec3731f087eeedc8b812606d0f73c", "1ad1e459a52e57d5c5bda03a76bc012f3702d3dc05baf7dd5efa3ac2693cd658", "0fc050198275e17d4de92fa1ca26a1421eca375598bbb1c0b63b40338ffeb2b2"), ("0325a1afa0dea4a95bd3d2e513a7e4771e3549be929b99f91094f71175963a89", "1ec38f4bd359957cc1842c4de6885f9b471c7e0a49e5c42e5d591ebb574b936e", "2f4a799d0bc33caef109c1365c1390d37ba1bb804fbee08e26392f3a37089ac8", "17b76832e4daa36326de30caf7dbab4af273dce3bc9e680e4b91c010c006546c"), ("161497cceb9179e459bc17ea0ba255e564f25018514ce6825a5939de6dc25ba4", "170dd69bbf94f6b2f800510043f830fd9d07d31422e1572f5756aaa28a4c916a", "013bd9294792c31ba4b1c00199a83b0604a48c9d7e9b0788940870f4dc67188b", "0f25e3a958c24a8d6cc5434b55f7c4fbd016a2c2313e16062c21561ebbb21b8d"), ("24bdebace4a7a02f9d644213a9a4d87ff54bf31e9c6a5f6db1596cc3ce4b5080", "12f999ff2f64f4db3ef9c711acb3988c92afb79c13ce4f30d581ef6c80258115", "2350321fa5b04d22a910a17f7949bf85c27300ffb31747d26774c04767ec93f6", "087fd151bc9ef056bf598b9ec279302a0cc4eb251b5bcebce8f8c3be2c6a7773"), ("169793aac350366c15d426d0bbf6c6aa03b987a444c34b223f4cb09d0ce4aaae", "1a4177ca3bd960e0b6fd8650eb73bf0a4a6a6d2b13970d69b5d7a5d52dcb1521", "25629f35d5b2271d421cc0aeb8b8a09f4482fcacd59560e69764fe68bcf01c91", "0ae9fb47f7bcf3cdf979b86c55930f8b23d8d39e044716c79d42d445fbd92e41"), ("1fe865b0de8291efcf61dabdcd1e791f7581f0c2eb9af80a897db668a617329d", "150df973526018298081250ffbf912533ffcc06716d0271e4f3e787e35a11ee9", "0954534a8fdd0b513a82437882d538e68f5f07adf2d556943055f3375fce8b76", "018167796c565a9c66fc3a654ce99ad004fda42fc10daf02df2762a0a50248b5"), ("271bd8d58ded9bb0e1b23124e28ef1430519f8d88e8425bbea37eae6d036517f", "30119c36f179522fc3aed951be9b0a44da3eb5ba97ff0d617900cfd68e09bbbc", "053121b425edc943a244df3d9b462f29d08e228a58599a7dc244b991a50b11e8", "05ac7632c7598985a9941b7e09ed18104fc1b2bc27618940c5d939661859ccb8"), ("1a2d5f3323b465da35c95e48759c986c0106fe61e539a8edf0748b3a1f039835", "0f5211fe82df08c68c7ffb16a353b3a4e908d9f7f5c381530e74c68cb07fa398", "138b2edc7919d01f0e502f6106e0a52e7a5688dbde25db0c7f3b513b2738cb30", "1b245fc3a1b7603d3995028589c1b08a729d20c513023541f643ace2d9628697"), ("098f2dfa9955cd9d28d46f078d356fdf60b065167e14fb67048dc35a62a40025", "10df55da15ea91bdbf73422142084787db270033e6fe167a248b8497017e4f25", "007876868951814f49f7aa93f1ee8694bdc61cab552741ce5714c5000b2f9664", "05701d819b7f700eddaea595815d5872d1cb2a6c95838c960b9b60527b74e040"), ("2cfffa05a7957c2c258c859940a75497ca59f0b9d60e1c21e2b4bfe3087402e6", "29419f44c598362bd5c81cb816b3a3bb78bf781190beaf9b41b9f528729fd02a", "2f0846a12ef57fe4fb4a7a07c81735bf2e061cee7b775c114c75fb271b12f936", "0300e8d446f103285144e825f5d7c438175c31d65cd4d14e6f150942b7ef0da2"), ("01c66c2b946ea3faa041ebcac52f4e232c7a00cbcb8fd9b2e756994d95e13545", "0ddd130cc4a58e6799e542d7bd81ff02344f9bf42079351a2702244460097799", "0118b70e77607cdf216aed4f14d2a1212a7df37e657812751e10ef545163f18d", "1baf3078683f93740f06b40c32236bdab531bdfa3c901d254e265394ab3cef38"), ("1354597ed2da77496919efd386060579a73e136417ffef5116b0815fd7f45ae7", "2c3b87813607575369da4c0a6517ce574d85c62a6ca9f96aa36cf72060b33a3d", "1e84032e536ab6cdaced4262448e161fa1c551478965a8f76983d03b07508c43", "2dc3b595891011bf8dc7e15e2e9fad438eaa8af6761b7e76494129981ee818f7"), ("2bdf272d61740c2bc7ec9ed102365ed144dfcb3ac473f10dd970cfcc4d5dae86", "2e85dfb65fbc0d58b074e5d4450e08a16664e0d20c596d4c979c9a60e93ad82f", "21b186801ab75721094c4cdd3619ffd46fc7ae202d6d079fcb41a52a880ab8b3", "302d1c7d4bb14ac491741693686e9cfc8551289f34cfab4fd38a5a35e4d44df6"), ("29008b431b1928ba9749afca4524321363a55ee1a3969afd8e2ba138df73b6a9", "197a5de553afb4eb5b1b6c3f2afe52c6d993bae3e91a62c055b93004763e7fb4", "117dbdf7b00141dbc588792f90481c3b5119f6a80072978ca6893881145d964a", "119be455110aae79878ad7e1906ebddfccc1e9ef3f0e25f4b94efcad1ae0a9d3"), ("17ceec803529804181b1e334af59d7f587863cb1a97539b62598cda93e38b309", "22311c3ed7e0fd8b284f759df94fb4085293e357e8ffc14f05513bf7d9b911bd", "135b33b34d80d502e344a5f18d2b16305b8689c0d492448d57ba5b054b72dcdb", "1b942c3dee471653c52c15ec8e2943074c6550830cfd8c6f668774dc8beee317"), ("09f65b9cd4a0f030374ee1409369394998b6754c3b2b15f01705a1d2a8c920e3", "18cb299b87e1bbec047e405feb823e055791d32e946c1a9ce9838511456002da", "1647f5bcaf400cb837061088fb1eee2dab30e432e453c797c85bbbfbb2a8f38d", "098788647de63c62e23e54f53ba0a19fb514ee9b6ac47c72d99448298a6021e9"), ("1b3d7a16cc5a898d7154177aca378692b587149d74e2867e43d914d14527ee44", "0a4df117982da940feaf9a00ab53f9ac5a872a27d79c1ee89cb5530d5f54b4fe", "09de1bf159d04792d10fc8e4327c6791fad71cee5f3b8b1f6fbbc2ad13f33615", "12c10301b4b948ca338182384986b5ff1475bcec833353a46bf2471daacb793e"), ("2f86a90849f72143a440a4a9432a13b5ad0de5eb45e48b49279cfb4f8218034a", "24345374091004009047264054ac2048305eb218dd4941838b3f6372c3a4277d", "2badc41ddceffc58c38444fea062de705fb0df0243af88954c8c3cd6904e9943", "0672883744a2fadb123c26ecfa7119dc4ccbae6ffdb58fb5f2c2546a2aaaa718"), ("1c1aa6b8b3da18ac20ec9d9fca07dc4fd92a494ed3425fb034ab050a3d622ceb", "29ab1064db8d27f906c5a7cc023a35993d84fdcbfae526180495e877eab9c1ba", "22752a604ea77b51addd1270bf76f99388b4a114525e5d1eae1b9e2cf8f4e5e6", "1c9a04ae9c3dbe97d0e51606e20059d7cdc4e3d64f02ad9d46b2902c21736862"), ("140a14d1dfb9dd81a66cea131fd72b69319dd646bf7ecd3c652d07f0f64a9fb1", "1f3f56b398f4e853782ee03cc31702fb6a0969604294fab38ba7a1c2d45be2e5", "12d9a68623d7d7fbb546aef08cc79dcf45e538bca680af4e65e24d164c46b04d", "298e7ccb98e7b989b529c6f44621cc1cd2435552b230f0db28f069e1acd4b913"), ("028a36afc8769fc0dfa8afb576b0449615d915e214a4cb933e3a8cf899a62990", "2b448f23969348a32d0ccbcb325bd64445e22e2224c9912a637678cd753759a9", "00a50be7587355b875995b7b7b50fd5eaa7a4725feb233750fd6529e579cb813", "2380d719c71c58ced4435c1309dbeea21fa3a431261719964d712e99035bcef5"), ("02ba58e343ce03d5a40846114f0f227b4771f240aebfd214a73aa8441f5e7504", "173fc2e0444ed67ec43551315b9e7146809b002b3bcdf6d0713f5f24f4476c95", "252fd81afd8e5be0ad5057ebf6eee027d01274a4a9e6f0f4c1420734bf299ffe", "2b259e8e1cbc05505e2c5c0dee695a8ed8a072c088fb3d0c0a7434a91a42c902"), ("2becfde4f8cb7e8fcb879446b620f2362db4f5619017b36b45b244006a073948", "11c7bc5ac3c7feb347e45576489d36b2f12df90b28e3700fd3a0944123502d7b", "1dc3bbc9d41485f7719b1c4cc233ef0979f7612bd1745cf4d8a0abc611a1ad6f", "1409d81fe835ccdb6492e60e04831feb46ff7369a06fedf7ac865d4af44f0999"), ("09e592afe692f7ca4f7afef4fd81fee1f266c02a7bedf0cb25ce1d034c6f95b0", "0bec5298e834c14beefc18379603109f55ae335b4fe877c864e377a6ce8ec9b5", "262519a26e7fb664acca1003271ce21450339b4c151cc86a74aaeed18fcd4bc2", "1bfc5d789228a4bb2faa6d1ebecad603016c9455082ed9d401ca468970cdcf6e"), ("2eddd0b2ac1f27a45ab6a1f6ce8bb6aea0ef1e3a2af86e20d12c6d7eb499113b", "2349a86bfc8701c974c071e18986d9f212c5cc2e781747c11ab53decd8e1f4e1", "0026e22d94ebd4fbbcae9d0b87f2ae2dd4c2312c01c14f223a90671e6a38543a", "21ea384b4c00f1ca40f707aadd4fe152d6f1b4e1d1faba762f7c8bdde1f74956"), ("2b169970c37c3f018f4ef69805cbb1290a82b0b11990b117a941b0eb9ec79623", "19697cf64b61281d8215a1bcdc4c5701fb99389334052d22caf8dfec4f6d1302", "2d2681000b55f8019a98b3e9b8ede1a9146bdb6214dea673bd05161034f1d236", "02460cc30666eb8008116344eb254c56f6e93a4855143280682f00c570bc917b"), ("0ea14fb34408a6516213c08fc55b02d4990caa96bddc14dff11f1da475e5da6d", "010ff603e957ac73a826d9a113bf87a1ab3daf1f15e348d1b7748cd7af392be4", "1af74b0f58145313e4d226711ce9a17cd825b7271f97f8cca731d13fad1bf0f5", "2b604e1720690f912c1bc2444705368a9070404ab07f0097f09b7b9bc44d74a9"), ("0518658ed045a11698cd9e57a735937c445ad5808503b6227a6539e4a9f8f31c", "277ea9b483950d12a9cf4468a3396297808b837ad91adaa8fe710020f5201678", "12f1f0f7c1ba19c3bafe5ddbe9775c172d2a674800a02ed66a971161b80633ae", "02cc04506bab442d529503b1979ba2b06b7dc2f74b63cb670eb1df0c756cba58"), ("205fe27784cfd372804ac8684f4c370cf39fff9abbf640ecdc30767bf6e028c6", "2ca82c0ed931a086a3964e070975ce3fa390b9f2d05dfebcad577b69c5eca3ce", "1ce21b63af964f061d60b9484db7997b69ca95d2b858e574c70a960884062a43", "1e8f7c8f1286f22cfb385739c588644698c45133532619aee2096acd476c91eb"), ("2f572309923a3af85610dd2a94cfaa171ac5ac00c39b0e55dc6311dd371dcdd5", "00fd0246ae99d06575e14b57dfb72b5ce4062ecad7bf22c4c96c95be2b9d0364", "23eb3a60a7fca832931d155a71b38815456295b58e0c04712aedce80980a8784", "2aa52945c887fdd0724983f13db1a4b534434513814c4b0ab16414bae0c54c25"), ("04c1eed1ff8934e34a6c9a53bbac8a54087931789c58a30409376e1f08a2975d", "1dc81c9185b9ae54765aed91ae7ba38cd494529c2d373d7ec766cce9893f5a40", "03f22d06cc377bded3648befb09c7b9baddad636c84dd5dadd30113716caee6b", "05a963104affcb8c6a7b90dfc1cb51bdabfaa68faa5f0fb213fb99f74792ff22"), ("02cb959cecfebff948f0e3ed0faf8516581431e2bdff9fd872e8a6ae94b7f03c", "119313ac9d0f47bf0b3bbf8837b0f4fc94678f3d1aa7e121dd95589c829422e0", "0e7d38dc63c6478c4ea5baead37534c919281310f288f6ac8913594fa0387a32", "205aaadea3042b7db214240c2dc86bf0c91a04d6c785c97a0b3a8464db967446"), ("0ba4f2995605234a62a5a9253afb1abc0ecf51c6434011f03219adb4b209fba7", "2dcce9c99cb473b3739bef3e81f4c05a56c4e4017df40885c7a86d97afdcaa05", "000ec9316906631b41f31f072bdf8ba18d3ef98cea66df5e75f4e315e2890fe7", "0e5f4fc516eb7a1117a485c3a41c8a959210504241b3868ab5374523524dd533"), ("11c3e72caf9b5a8a5b51098c78d992d66cf138b3ef479956c90019e8ba7236c1", "1371307ad6beafe30ab612b871b8077c6a3cf134c0140ed0683e979295e22bd1", "1d24cc454e9ce1a323adf8e2f3be1c9a871eff2d10016f2b09bf79f0b18754fa", "1f4faf7340bd4d9bacf0c3fb1c042e372400e8bb19dd048df894a8c50bac2920"), ("070e88edde94290368c82e18ac42c921e816f2b5ca48d44b8bc316c8dc8d608c", "1a0bf5bd4f1456d6e47083087d46c7bb21c931f23a9a1d4e7fcea39bda2ff068", "057c9f3b342beb0d2145cddbe7e5f762228e9f720273d4f98656e929fac91bf8", "12e1e1e25d4b0044cf2cea60f3e7a287a8c0490b2d420bd5d9d2f5ca3f3dd83d"), ("22342831128d70dc371873a8995cb9dab90a24d229152790b7d8061f024e5123", "2ee083e429a2c025c4d58262a06b7be663daf8a46bc1851230a5345d81bfc60e", "24dc9653ce19aa77a9f0ad40ebfac61782a199e3c85efbe0a1a6bea0a68f4adc", "07b56d0b9bfb7652f5ba5ebe3a75e75e289bec2611268a59a92be68a8dd327ec"), ("0233f5248dd039192d5aa628031a34a0c69b7c5c7809fc203834292b80807a18", "09d89ac8f9c4b34e07ef4b8ce4517dd392a0801f4ae7e5d7da508b31cae5534b", "17d2f902773f76f4ef7156c099870e5761f30a9a07ea1befa4d23e3f9497a962", "0f281fe97eca8dd791a5ee02dfbe3825256cf7345fd2ae1409b92b0593c414e0"), ("2bcb3d31216ecff49319b744683a55774cca6e5257caca20a5cbd69c39214c29", "08c84cef86fd5a49a0cf6a1ff88e81e97b013914b7f8613b981d1384a3849e20", "259a595cc5430e1f7fb80f332e39f52b02a2decfb20a997dc4878529e1c91a32", "23f2d08da14eb68b9d143cc7d2897ce8bc5981d91b4b15dcb6127e8c06825e02"), ("2683100e60c876f127a08ca08ae07109464df040248638870aca71cf61d71cea", "24288721cd8d256a77c07c65fe2af237a72870e04e507e0d29ec32c100627ce8", "18facd3d474aa3d28a866120ecf020663e78c6bc38091b9377f13bf4af1afda6", "01d172b4753f3f3e3ca43db31e40c2c2e5be88dd25c95bc80ed2ecbfd5162c71"), ("05e828d8e4c740963025b684b5a5fedabc5bed6c75ae6d6dcc3a48953664362b", "086a7c3e13cb695b83d7d4de51001ea68bb148bd828323e720cb3af5178e6475", "1c1b44b4f025a84da87e1951766cf5764a432f20f83cccd82ce094e7d35146fa", "0db4456a2c6a09f6eb3662830627b253f179b60134783f197a979b7cb2d7e1cd"), ("16f0bd1a56935e432f0cc353328d59e5d585725be8981f2ee58f4c0c562820fe", "024d5891f11b3a067cc07ca43517fb53ff9bc662ca1347ac323cb0940d200942", "10a4725178bbb16853cc297d60d94dab8522e4aecb87f261f0c59be83265ffb3", "12f2fcaf72547f26f96738410e5a70cad13b573a6301be6543dbc04bc0b45866"), ("239ccc77cbf008fada2926945127db4722c474972a20dbdb3bdceda25c630c1c", "229dc9a0858fe133c9385dcbe7ad93523d2977e83c75391df10d4b2b24f46ca7", "09c212c57e4d8168e4f88e5ec7b2008997d628112e9f1c8f97cfd19a52defce8", "05e5967d66dee5d4e248bb9df01745b933d38d59cac69bc323c71761a168e564"), ("1ee549556e1419dae1fa7a1a7c5ba72a5d8f34e181d7283c657b9b3376ce5f5b", "1671ec8678bf37d0a10c92ff4586541178c4856eab2c662b6811a0782c4e7296", "21f9b5d815fc8a2f2a55de6ffd6ec15b50842210f97eae00211d9f1a25694c0a", "0bfbbf709a5653cdd6e765610b57df29345dc05c5b3abad2854c349863fa7ea9"), ("07895f2409fa2ce846d2a5d62efe55b7bc3dcceabeb503f87a32b3c803c736c2", "2b6aa51fe55aa54dcc0b95efe0be8c069fd53b58ca4b9b6fa45e574c7c28fe19", "02debfa18122a19fc43047161d6e150765528a2d2a2f43b859de8b9e796b6746", "1b2a64681e26ecc85f6d49902674d21e79a11a9b9e850c332112fe555ef79f13"), ("2554e13a6475d5014b74e3389633b640907ff59093fa3502bdc4c46cb1a19bc7", "18afb3b081a0fbaafb3edd5dbf39ae2befad28536e5ec06460ac0da1e9231a6b", "09716b567e1f645efe273a7f0714e0b6e2aad20875120c418f8a447f0227e319", "300919b9c77ef2b5f91dbef06264465316d4d9ccf8431a70ef79b7716a8386fd"), ("24295c118e7779b38220e907f2e995223b51954e63ec2d22a8ba03d8fd431fe3", "0f528f4f075c1cf9ebec0cfb41df29185a88383d630c1f5042a2dfa573558273", "2e4455544c257aae126581d75d22d49a6d28e2d27fc1845d8a694eba67d6b40b", "0afe790ccda75a6397edd699f03e97d9f7301eb89aeb5a99744ff1e9e9c4484f"), ("07b75de8ea9dcefa26191edfe400241c55a4265e550c5518bb600bbdc2ac684e", "1549473177c6112a02bd0bbf033f423c954738103a5aa9c3778a0189fa828809", "081225e28f3c18e137e6be9d5af762db9080b4ab388e071ccdc5df8bff5cfcb7", "0e4809f6ae9c4ee08d97d31f1db1529097484e6312d35e11272d7a252d090123"), ("238fa46ed282f5ebf1f40efa9fce305800714ac24abb1e489dd175d9dbc8997d", "2f37e19274139f9f97d35e7faf7b6caf8f21199afacd958176319a06887d3719", "2fc0adffc93712814598fc504a074ec0d3312625e7e31ef3aa922e354bf9f34c", "1b93d804deb538b4e6b0ae44c56e87f1b7b4b72881ad690ce5544c00ba95aa10"), ("1ccf181d983895a7aab0e2c22a340d955fafbc8c88d11bd78546688e98b7389b", "24dd0ef7068964beb3ca7d410b9c9f6ecb751f6a9d75bf10c3b809d187d565a0", "0eba5ca65c5ca78490a7fe41464d7817c735593bbca0a6e98e3cab17c5957af0", "125a020ac67c078b90263e974cc34bef22ff8e99e1264eed00b3a19c586d4ace"), ("22558cd726fd10dddbc829a4828b0ed6a11e3dcef3f2913263fc721c57333b7d", "30212bb8661c1d7e23afd4974585622b5bbd1f97ffe3fd042ca31893eae69227", "2903d213477ad6c64c3f078f1837594586395e261d5d6e9330391e0005e8677e", "1984011b725344f966baa412e8d7bf3755568499f1e3b302a513122a78b19878"), ("0b4dcf0dddff4fbbe57811f5f14f524d4301c0879fb1043b81f1df80527a8722", "2fc6da08ca360798a78104969656173b9fa2ed13ecfb4aa0acfd582fabf7d8c9", "00bfca0eb8acf5f97ad7fa1328395b48a58229e8e74171b636a59f13c3a6427b", "2d2d3440e18a46548d5bd76097942bff40f1e5798344d0f6d4e2328b71f90173"), ("26c48e3f475b7a2cf4fbb404407247b3c55af4556d4e86e3b3580977564bf278", "1808ec4f0974d8279c6c08ef77a24b54c0ddbabf407c21985369040db97c959f", "19e6904f855c87213ab472e923a50fe7d303f21f2c0f3d1e1f1f351153082b43", "0a4bd23ad69d3ac08c2bc0375e12053de2cd62cd096de48b758f5862095fabca"), ("2412c84cdc88ad34bcaa1bae6af4d8519c65abb8b0123c12e1b080863fcaea03", "272870a3be27165035fcaef402fa24c4dda60a58800ef6928d45bb7761e02f48", "29993f1b0a8b8eba2c97fb35fae27fd0446d85ed13ccc618fb81b188c06953ae", "13dd755ab5d7b3f1d6d01f7e55cf94ae20da08878dbb51f0664608db3698cf46"), ("124d2db8b7e209b4a21c2e4ca0591ead7fab05cda46e6ad44443b8425d21a6aa", "0ffba9bf49895284b35d997d088fb85124a495c8b38c6e7eed9645226197d328", "2bc39e8fd4f3b4ca01ab57db3ee1550438e465defe0019e0e60968262727a818", "0d14618e73690fbd38d677d9522eaa1f6fbe5e074015cec28738c33de2559ac8"), ("1a5b922c94cbbad2749fea47f95c393fc023f0333a76555f8522216875ea96d5", "24b8ea4fa483b5dfe289389017a0dfa7c5cba26d45b50d0922ced69a5210769e", "2bb67d8025a7a42a685f84a4d9e20615c2e3218def044cea6765757b5f2f5239", "12abc99a169016682545adfa442200d2d045438b2c9e3be52ebdc1e4bee570c3"), ("1d3c4f58fe28e207762efeb97dd9bd5f272a2bbddf5d3832b454080499ec490c", "02eacdbd7c2f6339d5a58c42db5c182bea4500924b83d9938d24f5c3f5f085cb", "157309d20482019d7bee7597dfe556d0c288fe8bef65dc1334ffff1130cb7eb2", "27bbef802de56224ebddf21cf8339f338c2c65519996ee06e267b0c2e4c493a6"), ("0ae7bf5175bfc23b8fe8bc58c7c32173ab410f1df20cc80456d1998fe190eecf", "01de01bb4132f3fffe7f9227a1162ce9ffc2ecec9e4e7fc4eabef5ce911a9e92", "21f208eeae553d6489bb74a46fcc83fd4806726cdd48c6aa81c340b241d22a17", "08da7bb02a24c48433876ce7824988eb282002a5421d74e8eebd5cb9f3df6fbd"), ("0722592759430e6b04c040fd97249ee1229c88f8f61d1d0ef8ce811d335916cc", "0ba653b1501dc4e3e0da696c3b1de638592414e40de9a8ff8a94d9be4695b50b", "2f66096cd4248a7050547985de1be83ef96aecae4a9cdb59ebe529e8fa597bc0", "13e86253407d0440c5f9b6bd64b15348c35546cfa30171515628aa5ce5b72a22"), ("0137f8331775ef7878144d048f196b13a8db51b057e576626d7a1c7614ba6409", "1ec4400f701dbd080566c386a2c57376eed707acf803f73bb4c548dced70c747", "1afdfac922df863560081b4f57205590acd5e76e8227060960c1d631effbdae0", "0c3660973a84b11914918db2946be4c0f9160343614a109b933231024f0008e8"), ("2bcb35ca78bf775a4b43e485d13a20d5739683fc0dbf1472dd1726abc7c75dd6", "099b9a632f64262367afa46e5b938fb5310dcddfe046d9b59400702a8739789d", "0a163119b5277d68cba381a76efa2e1a25a8b8587f07c9475ede1c9b59b6483d", "273d79e123e34358e7faa51c2b52ddb5f287b9b02a9858346efcd64e2b6973e7"), ("17b4c3a8bae44a230929ba31c00dbadebcd1a38bb30e67772e7d1923ac868d2d", "1661db9d1d0b77b9058a4faa08214f5517eefc6c151f6118a96ec401a1f0aca0", "1c44e36371f2c24fa5529b69f040b7e6e7c3f348123e6a2481eea617856d1493", "08aba498bfcc104cc9b1850e248d624e1ffccc976bf34b0498ec8ad8e54f108c"), ("2c7106f99958aea0ebe34ae074ce86f4e695f5da8f387618b2df35db99d9ef6a", "1f20ac8860212d077d4f41d564acfa3b62b2aa148b670c28c097388e2e0406fa", "2fdd5f009ff096a90a9e0020f61649e3ad29816f4b8349c04cd06a52889adb60", "2f26473ae36c86e20ab3a838b50dd499373e41f5d66705771e0d27e307dbdefa"), ("2192cf701b74058d0a07507004a7cd8dfb417f6aa145e66194da16ad760beca1", "04de3f8c4b43c8c6e071902a95f1fe12d607111828c20ffb2a1fb3b37cdf059d", "0388d0014e0fa416aa11fcad6f89f309aeb05598994a627644b4be55cb28e674", "2d8a569edbdeef6fedaeb3350fa977be177935965d0d04bccf676fc1b4a98992"), ("16c2e33beeaf0e1fa1911ca359594f7c0d3cc9ca8755ab0b9fd5757b4d917d0b", "08b401348de3e30af2c755ae297f5ff0c178510ed23693064c9088c09f3e0308", "304ccf60c3897b79f433d077a70f2edc4e8ec96d07b4e7ce01ca3845e18a1257", "22cafdea0454a9c2379b97bcaab55ae3a93ed812fe0410cdf604918e7cc97276"), ("177fc2a5e69b2f167239e5cf8e674a421513dc2af32ea6b2c2ad3924f69f443a", "2a97672a362af60b63863aeaa172b548d65de7d0fb387789cd0b99325b47114a", "1c9c1e4ba4146a208ca1d2adad9d6fd9fef6b447432b996f7424143fbc1e5b5b", "0212fb60a54e73091bbdc1f297bae7ef6eea5fd55ae0c5751b481f7f1737d8ce"), ("0e047d6dbca35adc9621b000cc0fca73c281a5bcccf145502fcbc7e76c7633e0", "14af847df350b0e17725723cf0abb95db7fcdcb994cd8cffb48679cebb18cb29", "249ccec36a5921999df87dec723adb45e22eeafb3d944165791b8f05010103fb", "02cb9f4ead95c651f2197a09b4a374488c74691a6dbb2344e56a8febfd6ab85f"), ("083374ad5c4a27ccc88518b600e694452bb8691e446b2284b5dec9ec24878d7a", "1fba3b8d0715abf9f678b7a91e8f7df1b08be1c1922fc880d77ec0650fef79e0", "05702545d488fc3e64f6fc5af5a7665787ba9f7c474c668671a86ea2002a0d88", "03f33b266c056dbcb77b369a515c174bc331ac8e4e17a3284fdf7ed91565c228"), ("111bc1d0563d911e0ced2bfab3d56889c8c56f5c681017046643749ac4421083", "01f5fc1a798c8ac4ec49bfc7e61646e02bcda7b9e199f7b175ecee19993ebc72", "006fae5e44646537b54565fdd58de14ccaa0a1fee8c39a36708c1f4048334024", "0dfa831ae4da271bd06e3714783e9ca3909322b9de7caecf09b2305cb295172c"), ("0b6ee199ac14f197962acfc76d837e38c3bb73a70e655b72cb16cd15a093deac", "059217cd785e1df87c9de61ce95d20e3c239497eb8c357c029533879cb7dde40", "13b2448a0a480ca58be1bb0d4918ec43886f581fb244808e4a56766493b03b95", "0e94ca0603b78834d9da85969438261331a80d75fcf9ac6d172b16a80cb69532"), ("2f43a4218ce271429b5c52e060d435c49c12b07a7cabf0f047ba20039924f78e", "2d9d9e60b412cd8e8c3d9d95d5e552b3ee7f908f492670810e397957f6b86480", "0ccf93e94754b3d7ca40cd0767f693d103248202f2a8be9ba312eb8d023a739c", "2b9a9cdfd1b3cea762e87d0e8ae85cad54a18537742d94949d3e22d8de0b792b"), ("0a8a4011e13fd810c73819cd71f941d4da3661070549a979150d2688e96fbdf0", "1f4a2349746d30c530ed876ccbc83cbced0a793152e43deb076141bea0b34595", "16d9b98edceaca0e01110b2379caa006c10531c23862333d824bcb5f12e0f5eb", "2d4be3228578575ead965ee68f12815f9d0a3c4165e482741262595a7fc3b9ef"), ("002fd679a72ef2f77207e343cac79a66a5f51699efb4569de8307fe6d04c9a9c", "12aa604a3704cd6bbb119ce6f9836194fb78569c6c25e66a29f580d6a61d31d3", "0b2471247ed9f4fd42f88eea99451819e51bba2432675175335ce57d2f8423b5", "14a6a27df3453ca1d755f75b9cc29ebab879f57659f583d014c71cb2f58c86a0"), ("26748f25f162739ffc863f6490d557937dab8849f757ad7b1de41e131dde0850", "05cb9a0aa26068826008619e9e7da198bf30664157ab54eefed8d6b89aa36dc9", "1df0fef4ebdeaf0fc5e03b08ba3d653e29396fc0a8a58737aa66f0a6dc4ea227", "06b29fca6edefd720054454df6d71eb200fd4ba0bd0631cb5488db41c7a079c4"), ("1fe8f9a970509d9c19d786e21c92d2787bb1627b2be5530e52aed2b6bae47a10", "102d85bc5ea7aeffa7ab53e3b577dcdec205eac9fb25cd18437fa9a438515926", "07e204526fb3f734cc23e3c7697a8eb518fb30c63a0b29db1f3e3718588b28eb", "21e889e4904d04268698e716b0f6b481a35ea8d905892515ac0574346ae7c3d7"), ("25f28bcf27b5c55a5c125b6d8a64cdf6c57650cf0b7b6a1bdcae4313a705be16", "2548c609ab66ecada74491b17df0c42dccb11522fc1c8730104bf01935488db5", "0f7729f60b2f788c8cbf55dd5f92acad3e863268556d28d8c2a9a92075672029", "184444843eaa506e7bdb5ec24395d86f8844fdeecbbc5e4e47faa90ac81264c3"), ("21f5cee93d154b1a57a2afa5af6277745babc95d7f152a54e7413d38ef69281d", "1d97ceabec90011c3b8035551a1b420c506b94d8ea0cb84c329dba606ad7dfd3", "20d68188c0ff50f701c98c92476a391c188bf0dea8979bcd0a75e193cd2d6d0f", "225f3091d6cc3b0549540d40699e7a02f14d859e4be864523e10953dfcd0f566"), ("0399f1e0be970d23a3d34297b979dd8f9396ba7e267ec0246ebd9672813fd5ff", "1ee8220b84fe2b595eec47100c5415413062f395d36bee736464dfa2c97cf36a", "16338e73a2c4fbc5bcf9ebf9fb8bf14190c02f0636451a81d25f94e057fc6a0f", "010f36340523ce808a1917371fa8cf25e4d07a156f1cd943f1dfecc828d6e33d"), ("2643164d8d404973bbb48f77b51e04f03db2810741fcf2d5f5be007707f6cf33", "21dec34d4609a054b3224fcdd7562fc0f3e6ed99f9749e4d4b41232c4476d341", "25eb7504b1973db5c3bc1c41a22220d6dcd4d784686d968d0dfb52b9cd918f8c", "24efb40212677c3bf099f3e90d7af953b368c7034c1ba9028b13f21c9aa8aae0"), ("2d1df1265a57ea7617b97944bbc4a2edf86497f156b91a3e5e1baafe3b6ec3d3", "0ad91a5350a3170bc3deb754fb34b73536f38088f49e61ead537472503acd91e", "06e894c25680dbc3fdbba2ec08155820c42464962e3400d37674d78cecf74b49", "2247b2b975f30f72e5b23e25a44c02da0a1f9289abb66bf323d2367c15edf340"), ("15238d6bf608f725fc22bbc8f1e6be967efb7a5c9d9e4dfc566063238c9a16e4", "0ad7dfbda4b499e64cd37f6b19036160884eecaf956a5bca905cb2ca2c23923a", "0ee140a01270f582cb66ed2b1ccae378ff395dbe98f1e54bce04880fc8425eaa", "16217f55ad1352bb3f16adf1c31cfc192dd27eecb300aea2d7aeb58d0de34285"), ("1f16162873605305d8d9a83a4d9348a6031debcd038acbeb8681a671c36de42b", "01d03428e20424228cab6f6b06e4e1e622d3c76f82fdc9607d097e3b74e480bb", "23b2bbac3082c273a1efa38c232987669248663a92ba57de5cfe028df310b990", "220a17751d0a815b458bce4f31b662ae3c65a3db217bac8bf6065e53d79612e5"), ("05bef4c2da4d9109a1ef01943a6448785811037530e94bef3a5c3129e4bcacb9", "191b3bb7af9bda2d3f86cd7f0d1f001bcfa65267b9e31f6b42dac8f34159332b", "266154a71ebcbcdb9847923c1c822031a371732938969c5cc83d3eb8f950bd06", "2b49a1ea10337b41fd0f72ab8996b74f32b74a1866398215ed85fb0e8d9dc86d"), ("0a3514268603290d0ff14b09d2328cc5c14e9817b239fa312961b21bc37451cd", "271bf1fb50769145c6637464096beb0ca3e6193695ab2241e3e82941b4df47a5", "25d0a2bdb2c927669852a8080ee8ab1580da4939e8486b792f17a56c08b84dfa", "273168fdbf4029511a065831f41e9435b93586f588400f090834d6f9db2761c9"), ("2866caed4e69bf69438a036e5285282bd434c0d9aee2048cdfde0877e91f2a5b", "2fb77ae5a2f6a8f50fee080eaf18d872e73e452024e7bec79a38fa54b335d475", "21af42fdad52de7146add173d66f117d4a42d9d05e67cf1c639303ffa9ded7c3", "0962e8563c67c80930c836ae156bbcb9315a55f82e5704829c465148d8dd74de"), ("2a341671ef42e180e0431afe9f210b8023cb0b53dabc0b02f38392d2691d9ea8", "206919ee38016d51b781bcd779209d2fae9c1d403c113321e6e63c265f520cd5", "18aa981f211475e185cff11f23ac8462dfabf55f495c59dcbd5e683735ec09a0", "216da6eb327c091abb37b883cb9fb354e01447c60aa8223dfdb347bcee325669"), ("23c84f9f6c02e734887d469946db76b06385e3347db5c1b9078d563896072dc9", "0512438bc6e1f1a0d36ec6d4b35067d85e108bf52b298937ae6a0312774d2ea9", "1ae4b1dfcd50e8286fd1beab1705ef2fcbdd796f46bfc042c6b88037d3415243", "0ed8798e6f098776eead7a81d96dc08fa047562a75150bb03296f72ba37fc9ae"), ("083cafee3916435160effdd2ae6aa3304c9a7a2179f402bdce93a2ca02b83e9d", "00607c2875dce92a36b7b1b681692bfa7125a2c091a8414c7fda01b17af074de", "1ee59f0739d7338c76839c6003f17aa4963a911e94944963643e7adc70824281", "21aac30676714d55d81e028507c4991d2cfcaf797bfc325b14d0a8f2acc69932"), ("0b7a3c19782eb4ccb5731d4d776b098501d33094756334996606d56993e36fec", "1bcb7b5a0de9d9e22faa65724e8ff5379550f40118a9ae83462eef68e8bfad47", "10ffff3c405ee90b7d9b87bc839d2cd1582a9c7d41b41f27c54fb280b7bc02a4", "0e7ed9a95eec9cc587981f8701f17f4a5044390e6b6a97e88ed3f5b17a78208a"), ("1d296bf28b0db7e0d61bb8b5706ff27497d4c3ca2cae6d78468b96912b35c315", "05e467ba7ae15f385a952fcb37086e36a49da76245f1aa5a68a1d02618547931", "049bc2c5a6f5298d8682bbce55ccb81f3e3d49c688ef569627098baa587fe4aa", "1dc915d1099509083b516d5c01255906963f2b40e98058c486ca46101d87f4b0"), ("095ce0b84fa31f943b3bfdbc71ba00a60a66fdbbe330b6213142244bed65287a", "293e0d82052a4bd8c987942a4ea55179355100485830ff7f1a94522a8b9b7d28", "1b9c5a41a4b5e9807a2f7f89888582cf76ab7e0fd7870d7acdd3b2f1d1c48f5e", "1306790576404567c2e58ca2e452b2caad3c5f2a2938b8531e022389c851f8fb"), ("2d2fde9e1b777cb16b5306dbab9c58bca4e03de85f0f134def12b51ec2ad66c7", "058ee9eefcef3e5de74a18e0b1eb879b0f795f325d13990e6ed6b7d05d2693ea", "15d4dbdc225dea4f69a96df88e76e9721f06d8689fc81daaca875fade874f7c0", "05c99c0026fcac926701d2455a7579fb32feacdd283338ced4d641a4f0276b52"), ("15199c7816add55ae89a0d5e4f4534a8f3b6ecb84eb78a55f70ed8ad87c9b3e7", "18f137bc6ff0ebd14a6fbd76bf7720666b4d43b705b70b9eb7763c78a6ae1a50", "2fee8896665db464e166f602731cb0c7519beb0de1637b10ee06f27f91ebab3e", "11fa20c2053e1b45c1a3c7eb3513e9b4a2a2fe930819411d2ca0b15a31c1fa51"), ("068e9c35557c8e689510a24188f58555f4d76b76c555a314aef99716c084963e", "24d2f1950eebd98048c8a42eaf9ea51bb773a4ae48996838a2c5ec42d8d007d9", "2d2f7e7acc627bcef4c75e4bd8a8df98318285ad2ac4a93f6a7c7e9182a9227b", "2492191d51296a44b904f82e374496303481a8644f12be897d90861dfb557e52"), ("0908214e55a85a2d8b4e65fefa1e7a295d85265a23e6e27ba4a63873d2a2f4f0", "2b4cf0b17b996b36f23628f67f0028fa25c0394d0a486b4045a9a09b1860ec99", "05c23bdfb95eb484e5a9cb04d0651e614bd4cdd09343a1f103a0375c92f222a0", "0c3448198457f6dfc3c191778bbf89d748cf67bc69d39f021ddcecd127ee9efc"), ("1dbcba8da4257b1d290f631fc681bab127feca402784fc21cc603ffa8b72a859", "0bfd2b62c806596265a6a95341362cacd88000f664ea57557ab2e52b3980dd41", "155a500ddc86996b061297ee3b11f61648226c4c8ae5e1ae56fbc4cd664b48f5", "1693b8c79ee8f34cb710833714d07aaf3bf136e0bfff48eeb9ff021123c8d90c"), ("2b29d51c444cb9d96aa4b3a0b1de4fcfedc38dce23c77dd41da94d29777396d9", "0cb686cc3a7cdfa460fef7b68cf6dc654680310c34ae908abd1937fff18bc285", "266dafb2dccaef1de4c792cd6acdd1976718fcc0c84df37e5a08a26f45a6ec25", "00e61325ed61e6cf98e091589348dc31febb9546904b367ddb2df864f62beb74"), ("14033647c5e7acde451b5dddf4d7461705677683ae6f942506e24c5928c8aa82", "2994396f7918045e088bd3363a129c19c72b5ef3c90f52e505e0a5cfb10c4e42", "1a181cc988b3eb1a6e1ad271d4c4e0a76d26c4afc949aa830517fdd08503066b", "2825cd64e68652b4643ec61a708f2256b6cca996845488e4966d068b7f7785cf"), ("2476b121fd1ab1b47a5e25f9a3c05f8d66e0c7d75c837f3f2493ad9ce74a49de", "208df64bedadeccb850a6245ea889443ab3736bec1f450b79d6f064227f01cf8", "2bac5b1470a7cc11795c58f83e891f64a39264496a42e78d79d7c05cbd609e0f", "2a547923d846914eff42c1033131ad099a16e116b20c02a52e5fa640ef830f78"), ("025c9a490a94fbc45ba1dbde0d678c6a3d556b9d53f1d7c1199d15372d9a4464", "17bec4e791eaa8b5fcaf99602ef04de418a1fbf350df76dd8dfe4f5f7c6dc2a0", "1676effa1c5b001f1c089696bdf97b32a9bb1518ba6bf0ff5dc9ce5dfa928d3e", "0e676fd322d1d9acf1ffea6bd1df103400feee5268fe181ef99b810b92c6c844"), ("1d6e35bac40278791362c2e4ef6aca118de2ef4cb6cc9975fe9b32e8c8dc61d2", "04b5a89a367a537b00e0123791365498bd0825e46c35a20a9c6784c9b3705486", "21534710046d98b6f4d9b39b849d615e4e36a05f1923053c9cde3adccf7ce3d3", "07a6eecdc0cc7f90642e23ce9c0d7f3c6699ef10e50f7e83c6a3d98e3cb807c9"), ("1e5d458133bc7ee3225668b7bbdc6125ac314423a51c52a0108aa64ec09cf8ef", "075fd7560e08119739e84e9508bc23884b24ca324706f3d4a7cce85e67bccbfb", "08c0d6c7ef95204235e85f94beea51e6e8e2aae07cae5ceed3a45277beac6b9a", "0f98c907a402acb67ef3c748a77f975c4f105e78695c0cc29fc0ca1d26c05566"), ("1cca6fdee6eb00efd67c45c8adddd0729f7acba601b77c213b286b451a28e0c0", "2dde1018d292c9b8112a4e99c12ee0f05f1b857365bad06eb4633da813e91741", "03b90f5298d7e5d21f9abf634fbbdad3e76c643f8591f6dfbd9aab13baafc934", "29b4275cfed961eba86eb3801d6a7ef02dfd71671ee7a55ea1a28b4557bd5756"), ("0efbb785dc203becf1868b7a32e5d21a89be5e249a520287a8cbf90ecf085b9d", "02f77d7d01da9ab41d3d6dd6ff03a025ed826305bc56be27d40a191c75699580", "15aeb9057e1c7df6d4acf91f70d8c1795e1437357e81d87aae0e0f14f4ac2f75", "19677c651a4a96e8286ace7f7e20725895981038c33636e2e92c1c86fd8f1322"), ("186a0cfa3c3fc6c663aad7de4585b5eb7b80bc5c949839eb2d5e9dc182eedeae", "208d003ce254e9f1a4053a271b5334bad3e190c8e1d659eb14a0016298c6ad4b", "08dcf9b8d03516b3e5d2575e6642e450823a00a504a5c349fa56a94490421003", "2a822e9844c3ad67950bfd048a9a4dfb3fc20153c5ad3e9040f15a5ad30ef920"), ("1e2557a10e58e0e5276fa78300fd6f43f3bb08f9e2946692170d8393345f5e54", "01de20d38466563e37ccb95b247efbd8f0a2e277a228a17d02daeb030a7fc770", "1011fd54dfb7f18de7f5d34351427298da32bfb4ba0fefda0fd0ddaec6152152", "0bdd2342736e1fa87fee8e46ccb6c30a11a1bb5ee1b33725b30991d09786fc4e"), ("1eb5c6b2861f2f923c4431ab92b4b8ee2f3a749d64f1b07b926131aa52e5ab93", "1e65c757a44bfe1ab5a76093232be904c7108ccb062b2b70a99505c377b191c5", "284e7b026ffcb00c657517844ab96cdf50b94b422b5dcd4493b31dd57dcf8abb", "1b7707be5cd652f7b70fd7cbb95bfa26acb54de8307197b27f12c44180c35048"), ("1fef04638e10edc4e91e656b4fe627e000e77c2a1915408f32e38c8e8e6fa727", "3039d1b6f6c851173fc9edb994a3621b138b6c4f5f2c84aa0981fc6d9b760622", "1dc5bdd589b53019308c2baf17414dfc185acf60dea92fa53c0373a99de5eee7", "21e5190d335ef540f8ad331b8654b50eedd6c9355b05a920a42214af569443bf"), ("036e18b5c9ff3bc7309a072509b4727bbe0f45d5b94c43ee7d71e5dee1e9ecef", "128d478e0152b4cbc914d09a71d7d16499d1e0306c968b039a6038b0e0543b75", "1418f6da607f85afb285c2b110305621750829856885c1c1d63908811ca5929a", "2046a8cacb5930646bdda1dce2355a3f4826aa53803347d39154afce63cc31ca"), ("063e4ec18ef63323b6578e8d1d342f68ee1835890504db29e402aa1402990b25", "0c23eac00cbf375879c4a3ddcd4119eba860387a8e0b50e708d4ce9e2a133e63", "2add2f0b8ceba1fbc1d876747aebbf29712c7d760a2a74fb04007d589d795682", "00f63867a5a1abb59d2977eeb296cebf6e4cee3fbc0cedcdf9ab6b94074390ed"), ("0d1eac8d9b96fff0a21119bc79970142fb8fe86e6009e5eea20d724bf6ddc2a6", "244e8ce33cf17626bc0d548a012e944a6e0483563ae11174227bd55655e6a69f", "1beb364016233d5dee9eb9faab647087b630e2a1d3bae2db6d2a7372a6b97905", "28a3b6e82b92a35afadacc0fb1548f033efd7eeba409c903be4ea98c598a3aba"), ("037f5a561997e07583e06e1d02ba0d78bcbaefeceb394b9445e853d3bb8bd8fe", "0dc2cda1e3ce8418ad1253ab260f04dcfd4a14d2362f4abad549ef85108dd22d", "04c7a0b6b03c0186c356b6c907509af821d64fff09ddbaba2a4b01c7794c6800", "0993adc4ac3469cc0c987196d32223a1a9d8d6b93d6de3191e1c109fd64955c6"), ("0711fc408c25e41f4a00898df0fc9ffea0163e366d9948c4f28c1e8a5587e7c5", "0e7527bf85b79061a32956481dcc1b2b88fea73977eb2d7239743ea421a206c3", "2f8718930d37261ae3be8b17ab93deb3e0a33153a0add19d8c9843d7cc4bf97f", "1092cb0d3fbd7ddae8b8c403343c6c127e0e5e47ad94d916bb73704bae7b9211"), ("2b54d86197544ca2c61a44e012d098ecba46bbba1d73b5d6cf2aa86452fb9e71", "0691c1960ef40160b3e0974e9eb2536246a0164d3ac8592c6ce9cb9b22197bcb", "1544b25273f19cebedc1b94a786f1e342b94d5d5e5e46038d6e80cec39bdba22", "1878a69c963edf5facb8ed8e8afeeb7c881bb82d955ea2ec47cd16462eb6c784"), ("11cae84d49b8e263c7c1762ee6c4eff6cf413ddcfaece153fef57b4e45e2f945", "2d7e0093e8e97447908e2e8debf45dc6379a8738cd14eec6748916a4bf9efb4c", "2bae7d800aa54b2a44806cbfa99d3ea47660905b90c631a20f3a40a0aa351ca0", "233abf33654bfff5116ab919d7d36757ed3dfd7748f0f6a6d630ee9825940930"), ("2eb17bb976230945955ce8f4b2ece5b9d79c878836049a9aeeda695a439fcd8d", "2d7c094b07fb14d3d5304566fa39987a598d9dea2b5c74b11eeb56aac9d639d8", "153c9d287626b66e00be4f8fde8f4c1150379b85584f403ba0969ef9a022edf2", "1e0e5bb99429c9ddd103fb2616d6731c56af7411d78417f2acf0dcb5f7712606"), ("1ec75a23fea7be878b37387117a2df46b520dbe26481413e83aff35237f737ff", "1ed7f3b44e1d59f8f13de4c0ed709a111ad59b8572cad951cc92edeec3998611", "020e165c1d0756d34b7d118b6788cc3b13115bffb58060089777d933ecb4418d", "0823e87203ae5da203f40483f407f9e6f0f45fbe9e97619056dda333882652c4"), ("2b72311d692b02bde17deb459d35c89b397f5a66d5b42db8571b76ff3fa10a9e", "2775b3ffa187b59939166421ed1d9efb83cd4d6e6c115d9157a7df12e4bddc04", "1ed2d63736d56a4980df5d6fa1ea48e37c94e43977a12498aea6b10b4f64ec0c", "24c4dde614ea808dc88bbccc8c92deb69ba81b2f725f9398b1e0f9026f2b4fd1"), ("113b8d4cc4959d8a5a82a16645ca24f77bb4c9f4dccd22136bf497d4865a73fc", "2f8fa0c95dfe0c3229f1a9e3ac0be894288c76a6332dc406f7e69bcdb6f5fcdb", "1d9b2a197ef64eb560b4e5e50bac76f6670f4e3cd7d9f2ea4345670bacc4693a", "17e3ea6ea809e56f6c2cada542c177b3e0e3d48339208e183865379b8aa8c1bb"), ("138565bd43d26f58c54faa31e848746d2b4939a632f5ecd0b46b9a527df6854e", "1c28bcb964f7f2057b5c702cc49f4d0b655386828bfee4615d411d53410626b1", "27a539f3a76f72f0432b7e2dc7d8f21adfea2a477d7cba031eadf2b723355317", "00d0ece3bd587a0219b46d3b076027a5811a8b2bdbf599de36c717c003bd063b"), ("24745f722e08f4c8f9ebea28174f5661c9ec7f74366b9cce264d17e77b5f1fa1", "0441fd161db793463a142ed3fe9c1a39d3e6506d1a0b4ddad9a5cdcfb9181a95", "1f1c72b2cd06fedf0b37a08b19b2689b6ae9e055e787d35ad7c80f5f1029576c", "0442fe4ee40310f5f9e635f4f25dd8fd7ebfc89b24f2768cb56697154d73fdce"), ("0aceaf82cf7cccb1cb31367de6d85c905b664f9d52f98404641dac325aa65686", "01c0a44fd76686ed088519bc01cfc6359460cf802af5b463953669f32efc7396", "02e406f1e4cbe749d8dffaff17f66768008859ea4c12f654426f2e65a84a583f", "1ad6221d45c473645786f99833c7cbbd6020fd0df49bab93e675d8af84d8f36d"), ("0327517ac86525c4c39ff97d6c0287d482bfdc75ad597f55a2508e32d65e5359", "2b905ccadfb1777533ceba23f58a91c62fc6511e8e46dae342d4e81747ddb412", "0309df28e7fd28a5004e91ed99882a7e596170eb5be2e1c1f3a2b6100a5e2c90", "060caf8f70d031d5ee4f8fc4f45db33e6d2cc829b39acfc05e44cf7e7bc910e8"), ("2ef08c79712ec8068df4e984e8b0bebea928c99df1676800fdd9a97bcbbc436c", "06dcca7a439a744de7f105c26519d3bd5162c2f2b1ee388ebf562c480a06e345", "0211b7893f3473cf7d4fde5b151ca98d474903b1ee8a6ee256fd30360bbdca47", "2e9da303b80d986c83f67c203fd31cc8913ca85902cb892d28fe9701c990a447"), ("100dd78a8c5e383c946642537d4678962da2e468aa0cad823be2cc6f9e5f8216", "04473038ad2b791db2c12097d18cb373ba2626b276dbf15506c3b98896087767", "07590b4450cef4ba1cc07597c1addc60af1be996bd28a60592714d023fe56a27", "23e4a55fa2631a359b23d8191bd0afa1b76ad393335be2f3c86c0816fe44f9c8"), ("0327028d0e01192003eed0b6376afd9d19eb233b904578b5b98376429e36b362", "10b7e65cfc730f7a6f3ac2366f115a7e388ff177852cac2d16748e2615482c78", "025d98292e2948b1ef5de2709f099a25574907d5c33db8b8af1bb9caf7614e7a", "10a5eb38ba1a18cc0468b06d3e96b1e9a7c607cbb511285d4d0dd89a4b5897fe"), ("09e88978b998f11bc9b63c7c3f21f273ce107f55471a6be578c2518091d89d8b", "0c87971955e012b96c630408049a762f4645167ce26e84cc74892859a39ed6dd", "20be54a06e69e8a83be234be97c15228ef56c10442e3c89ec2acb6a5b05bc200", "081ff67dce7757e3bf34cdeac9ddba21e768bc3522583a98f06c36073b63eef5"), ("0a7820506b8612eae3a9c5a9f176de2cc3af0db757a373616241c95e7a6f4a09", "24e354a9e647b5541226aaa7652955cdd684dff7eba75b96a4cde48021881aec", "093edab5e011614fbedbdfec8f0bc82dda5384fbd4132adefc07563de002c947", "242989a5a0767c6b89812ac861bfc8ea7c6a46120f096ff63c4083c656959567"), ("171cee1bcfcfc4277bf0b07ddb5b76ca2f57b5148af3ffd8d2a19c57c1b474ce", "03010f969ebb6817af9faa72b41c2b980d7e3b0774efa9508f9a3a043ed9a47c", "07b0cfa36427bed25d1c610960200202162e0c504be6e82c10f9cbc113eff4eb", "29e2996acc7d7636f104f409951a85b8ad03c559738bfadcab3d7a7a7ed077f2"), ("16673421498d52d18dcedb0ab60601f714f45ff031b425787ff8c823bba55f4a", "09b03d6e643fe9ce166fb4523ac5c664dd0a2c56cdcc693f9c293cc7e407c3f5", "00adc392d2068a344e2db7312342af74849868656cd63edcc97d74951bdb0c2f", "0204185079c88a87fe424fefa836a6329cd1bd29f010704126b658551f82abec"), ("2eaac19f397b27c3c6a1f99c2aa161cb74843a8182ef1fe722a6cfb2c5e254c6", "216baa6db48e1ff07e6051cb74bc87bfb0215b213461b0c48aa8d5d30858df3e", "130f703b6e5a534472a65164d3f5163d85e525303d3931322315acfe5c9618b1", "0a225daac16a1200784fb4aba648b69dfcb3eb09c4f89da68c2dd7bcd2f27609"), ("14bebdcb711b7a17410b775aa0016775c1b4a60ae973d9c3461f91dfb6f75166", "0a103e05b6070a5e3fde383ffc2bbdb9fc16249a1126da2536b96a527b09db01", "0c78c2b547498b678eeeec5f4f19b97e0784828e04ae2c4332504df352dd1ae2", "10239a9f761f97c19ace235a107f9d69568ab40a2c1a45c10aa9362931de583e"), ("1daea747a4cc26647d9ba70b6a6d5a04887f1e0647f536fdb3b5f94cfb08f515", "23e3d3e5fa77c9e746410110a68983c8e73571f7d78442d3fe865d1b6df60ef1", "1e20ddaad6120d03612c755483af8f5d255385b947df7b19b235042db1ad0a8e", "2f13455d69ab78cc168bf621221cfe046d3bca188a1f811ae02f104e1d5af96e"), ("15ca0a82db0fd454f70e1848568c0ab10556a44ba44b91242d29a39d683b5f41", "11b2e0107907c73f13fce6571faf966b7c479efee37760c467c0f043830b5499", "1e27672263fe17e7dd8559f72cd95093de270b736a82169fdec9b996930a80cc", "038cc799b82a724639822c61ecc7f89d7484fa5de146363e2affb3da005780da"), ("0a578ea5a84fa998fd7b5a900d566dfb84528423296d053bbb8c25ff34db2c39", "28fc14d2c39a5491403a7b3cda793ee3b00acfdc86a8e9207127b939d76db8c3", "0e81e7b62c8912245e6382a3e2576fc8f2644924812df483e30bc7b91c970f18", "128375a14a465220f7e1bfc118f2f211e3953aaa38adab9569f53d280f364f94"), ("2d7364f084a7c62dcc854aa7e807ede0fdcf06434a661a3532907493471d4474", "08a29390fcd1f639994ea874b65261b82b2dec9c5c7b404dd523ea3b836dfc3e", "1e9cf1ec4066ea9dcfa9ad9cf361ea2049ae75f34bc1ee9b8ac043f991fc5f8e", "1ac30010a99f44829b48f8ab6991457f8a3322cf77d322bb661943668ac6d34f"), ("1cb3fb9125a1f552a39fb6ae663fe56743cda9faddc9d12a0797e3ffc17b77a4", "2f6c73eddbe8e5be1b37b2868f05f7bc27ab06c549687970f18f6e68f2bf3066", "1d7db52329daca266e1325be1c0fd81f54066ddae346ad6cd241b03fab51457d", "17ddf0c9eca6834a1084078bb0acbb63471cc7dd40913b6ee2e50cfa5633d861"), ("29d7ebf0e52c875395993706d5dfac57a25190181cdcc50e24395ba8c60a090b", "013f940569afe25247360b37f5ce2e9216940273f851b9cbdaeddcdaffeb73ca", "26f02f9bc161fb281b6391386a139491cc96be27aeada8aa64cc635ef9a52cac", "0fb40c22a714ec8c33a53b6be7f0a29b5423d66ec5597111e3520d1d3802c036"), ("279d5fecaffbf7839d55d6b6ece9999d1906567a93c1ff6e149f59cfd6ae3713", "0fa2753176f5f25e2f733bfc632852320fb5d6aeb47a9f0deb03b07c49b7a129", "106aa5f8f6b1932313406d2e6ec2ce8470f9321c4854a08fa587ba31fb893ad5", "220fb25416833c23587563f0a19eaea799ed609349a35f7a3d0bf5a1d4ad87fa"), ("2814025ec652442065d33194b842c6f2f049b68fc476b6fffdf02e46e731449a", "204248dc4ae9c1bbc47a0b757ffaa72a77d5f4d808d7af5ee36c3a851bb086dd", "2ab19910fd82c7f1d7d2f76e3e8bc8f60fc1c97a1fde101104a16c6a6a7f17a3", "1dd46bcd6228059114f18ee88d2accda354c810d2411b6ba5a8b8d3165218558"), ("21e5c4a6fbe913f3e865b61539408ebe78afe327f77a407896a6aaeaa8150ac9", "161936f2fd2a0a92eec169596e2e91a4f528d1384f5446c0fe1a87915e42dbe5", "0dae5ff1cb48165c9655feeeed8ae0063336e74e597f70ef23e5d64f68981da5", "04fdbde95c6ef985f2fc2ede64edf223f686ab30b8ea33a259ef0a44f21553dc"), ("2b781309136d19946932a785a7d78ce73cd90d0369b57eda08f25bacc7440aae", "23d65973829b557cd06f39b75f118e044d8ed26bd0f1d14642df76b4ad97b917", "1aafdab05dd6a59e0d383e9ce57d2b32d18fa7c0bfb255770677ed328f92a831", "14a3d51ebbf881357c884b82f3ff4e61eb126df3b1c38423a4183c00f316a241"), ("1e25f5074a517278d63158a224fa29d3f7656fcdeeb43d1e83214b875cd97f1b", "2f89f17b7ed1821eff0ac354775ce56a71d4f29e8205a01a40c30d8cef8729a3", "1b135bbc251f74d889cd0c611dbf38359c4b122f2587db1689d9256578684e52", "26e4dfcb9fe5543bafe806e6b059b0b5fe4c735e7be4ba71b608bc335af414b9"), ("2ed179654407e6cc29f91310e32d7efccf209c4e7421d036b6c68e2a8985235b", "241f888518b1a5cc5705e971e059e4aaaf3f00e29bd3440ee6d1f2b9bf9131a4", "039d93c2d5e90542dcff4ffc601fe0c73e0e1c4297986c44abcfb7f3720cedb1", "03eef9337a8234d036b02f7bfa228f76301a2267bdab9434583df1547d4ddb3d"), ("24f4980db9829c50fe287dd260ed846788269b871e015d97fa5affd335915f6d", "213aeb5d8dbeb65239b53d94b91fee4be42d95801d19eae18990e74665af06ad", "0c76bb8249d1bf3308463734fe3a306bad8f6fd46d2e7487e3b4591e435d2844", "1323ad44d5b625cdc56fca29a5caebf1bb5a2749cfd151d3d801297dd756ef6b"), ("075d4ba13bd28927614dc5920fcd60f0ce8295e25bd8b985d1a7343e4b4f4527", "1ad34f69cca42affdd41d37651fa871d4bdf50745f05e54763868526c860e17a", "0629472666d2468b013a25c6f0bb65f67f544dfca9fd8ae37be51f063291654c", "2187e64ee68be029eae0eecb6a55617109d79bb5b39be2873f1af523a1aae04f"), ("091f9a6ae91845bec7c5200900fdcc16cc27d6b03cb94979a5f7cf961accece5", "11e84002313cc015b1cd686bde0bf749247ebee862152f18bd0b631fcf941f30", "08f4536027bc868fece30764f0e040710dccab2996ef6af697084c5bd521f141", "0b7d18cfda7ead5126e7d3c33bb284c8f9b6cb0bd1cd4a1661dcada0be4191b0"), ("2830a025df31449e4fd3f94f25930db868220283d0f7230484ca738fa06f9439", "1263723b8653d9ba9ed6e0f6f1861cef08a2c665d6178fcaecf871395287bb35", "218e7b1da24489c7e877a21d2b1c513ff6ed9805a2e1418f2311082e2741f785", "1aff764387fdd4fd4a8cb15e4dfa27c320d73b1a9c63891229378c0867ca2b02"), ("1512b75d8942e6740e3f533b5b0dc2f3f9bd6db2d60e95e0ca172012bd3f1ac2", "0bceff69987668a0f7b72b6caefc610b415d3a6ed07371133fe64256d0887137", "08b0f9a2573aedc0f41010695ff67c9591df0492eba0585f5fd05f3838ffa32d", "0603b0c306be0ee13d277919f45370f2247430f43c8e25cf3e4ddc94d25f43f1"), ("26c684bdeff31636e542d6b7bc48e28470ed38941ab8a020fa222ef6d0c70b94", "18eeeee3545c709107ec254aff55637f81d6b867e10d9d131e5a4b7eeefb7fb8", "2a36301283386c9a0867861981f174eba66ce0d8adcc4951d7189a4cc26df031", "2691c116f3770d9e52c598ed0515bc44ee7f8c4252c6067ec7600029d94ea943"), ("174576aff87284ad3e0f8450ce06f317307c10c92be05f809d0ae3a6561385ff", "05fe11f70ea9b4829aa7370cfb866a3f68adbb64231c9b5af2c9e98304784ccc", "065e327cedb1c6f658709d524aa9f3de6b959507fe83f5d2698e65c74b846ebe", "22540631c5fe87f5f8e642c5fd5c9a01597984e6e60cd404ed65e3023c8cb828"), ("000b03ed050cbb95b688afb2d23fc4eb2b7fb670e4696a5f126bb6b78f277f28", "09db01ea90649a27f70727d5c2ef557b58e2870dc77d623501fe4c6ddb6e0420", "21a3539895a79b26ac04e72e99ed20219c7ecb8269a547cbfadf018c76a827f1", "04dde9848871a5037d12244116df70ec0c40a0fb65485f6037257d3a991d6507"), ("187c452555bfc8e96589c7f7ed52b59c965b3c404b0024d83d9b68c451fa745f", "00fc3871fd0b22484a09cbcfd93e7c28adf92eacf974b8e9a6303e82a11d7b2d", "0bc0e13e587fd00d3ae76b28ced1edacc0cc186fd8732fa963f7ce088a867782", "1288bcfab1e1b60d08be58ac04ce5dd079e4b0d6cd8510e6fe8986f9138b1591"), ("06db87a9e4777b753bc3927e1f9ebb8ab26837f14be4d50356c82b9cd2f7d6c7", "2556cd3bb1cdca6e3ee0d15c0df61a6c7dfdc734ff46d1b1c2efdbaa93e32518", "2c47790ad490069d9aa95f5988170f7a8b015b5eb8c339efdecc90292322e68c", "1669b65636b68a68e3e409d5090a7e45f0b61d926c8393208a8bf20ed23a9298"), ("00f0f73cd1caa397e99872b6affc319833f3cb86a2e49489307dd62534c3fe70", "20475954308bd4616718b1a8c6c3b36f28d7f2e0b03b523f4c1119a986228728", "272de637e9316831ebfeee95a92f59180e2e735f8ade646cf50539a524267a64", "2b19dec4a944ce603ab32c72494924cf75e7c58e12f703870e3a916fc94f3588"), ("1440f4bcee88e4fe0d6172b160a4a9a6e0a2f64e3646aa8fb581a413024027bb", "221b00eba23d876326d5a8c6543dababbc264ea434970c6a050ae5830ba51e54", "1cb6ba61162625f57a19c994a1ef64403ec135ed517f236b5917e48443983a2f", "283b7cf1b57e0dffddf0b42d68f151d5d1504d51a5cf6c1e469b07a7284cd797"), ("1f47fccfa82792b2bd59417f820129cfba03bb4594ae15e0a14811f043b15804", "2a2faa819f46bf04becd94bcac3ac9bb9403ce6c4eef69af86883b4857356a13", "158c9765de3c861cb18e5ed389c7f2b3687bd314fa1e03a54b7f1c391de736b2", "0e9b033f25b69beb3cf7aa19a18a4505c1f7b68cc5c8890935583b088a8be6ca"), ("2612a2ca75d26240ddb881b4d4d8e1b5c4d41bc7d83b882b9edda057ac621b61", "207898353e950d7bda2a08f81acaaecd259f753cefe98793a17a47ef6deb2418", "053009533759dff8c42ae80ddfb78e285bbb17fa326ca4206c2838df129c3df0", "0cc93c6b3b8908b0470d85de2908fb70c9f2177d2d8d3296808621aae202a9ff"), ("25fc6bb789b6f57573f152821ea7d136811e27e5869753830c4a9c323a22e832", "0d57e1c1da5a8898f55d147ba146b08a260212004b2316c1a2c9fbe029eaa143", "2ae42318b74a624163531428b8e118eced1bd835331703b687734f0b33b7d161", "17898be93f1401a788390be9a363ff83929b88939ccd0f5c4ab993debccf0534"), ("2a174724e94a2e5c64295fe66179c01449fc9692278c6b234025c91f1e9cda49", "1bb1fc567e4a02ff3b3f9d29db551fa488f5609666c2e2d29730fe8ccbea627e", "0eea1bab65f5e07f2bc03c95db153ded34da7e7af990965b53f48f2ee34feb4c", "216922bf1e52a859424265d718abf702d1387b484abf7b807958b14a1d9e4774"), ("2e196f2e8d764018f82b2a7dafa6d8120d650cde9495bb69a542286a6eba91d5", "029f7dda4cc24c6dde9cbde979a7636110fbfb9fbf98d57f270ff37b86915c31", "2f139645ffc010a3d08ef013ab512c6b1daa7dd994303ded5b074febaa4d775f", "0dd51311ee4270b5cdbaaf33d933b9cbbd880521bca3b454fe9bdf67c7bda544"), ("151c44056bd041a4cdd8a9fb8c54ed06af9151936d2f758359152ce2af16e640", "264f939e9227880cf107cfb41250c95eea37fa45802f9be709a6cf987169f89e", "1250cc440c10e6012098cb5f7c7d855a77c1518b513091afd78bd83ab95695b6", "0bc4c9759f9ba7af3393ee655cbf01e565d17f6af7b1c664847022c90fff81ef"), ("245fd86c8c1b07b2311ec16a22d4a7c9eaf5e660217d42d52ed81eae045a26fc", "0cc2a5d7f3239cf4c36b48221525cbae42e268439b7b0c48ced16014f983a224", "15e988cbf7080dd7a8bec71d0c9473a0484fd4fc7a1ec73d8de8141413958f68", "0756cb329efcd7146d2369ed24f6a441ccd8b50fa767b5c1f9212ed5fe11330a"), ("25c9eb51e95f6055dc9d5545567ba4ac286d84943a89b54cbf21649853545a9c", "272343901502ff470e4d38e92010f7e3b7aa337ff999f003d838a733413f542d", "0682fad993024579975c8520f281881c541936dbfad1f839eaedf095d440b22f", "2179cda10226634033226f151537f3ffc466648dcbb11dbe40ee86bb072308ac"), ("1ab148ee442d317be7c7ba34afea599f6ec56df87305ba3454398eae7b3f4300", "05fc4600d8cf7828265be5ac4553a8ad2be50134cbfbc15f510efa5f97a2f8f3", "0387fca2984be29445dfbd43aaaea88c02fb200ebdfead294e2572909ce37977", "301f18e5fdb7ad220084c0aae293a558232498d0d4e29034fab21f8cd8f3cc35"), ("28eabb66d1a8913630dcda9955e095dd1f794ebf8857a8e94958b4ba885648cd", "0499027c053bcf9c175d1002fa1a0ea8d4dd7207accc2b8efd0faf430e8a300c", "2b6efc9bcf963e7a075362fd3c86e7f357055b2a51edd38f8843f98d01b2440d", "0567fc800ab1f67e4522ba906d702e8214f03d7adeb81f15d30d1fe76e1cbd2b"), ("141643ff46c936a59ef4627918abdb8b2297822d22083862f51b5c3bc76323e0", "05463f08db7a0f6112c39775d3fbd2047bc92a9270724fef5dfe523958f3580b", "1843761c856992dd806a7d8d21ef9a69c66d4ed4cbe46646febf669c0b820304", "0df3270c47adc6cf3a31a0fdfbf3b163627b7b1f5d57a62c514892965003f957"), ("17ddd89c5e91e8e2e5eca3ab1adf82c308fd1df24081ac64685e1d99ed2179a6", "147bf9e1b386e5a797b32050735113253fe7de33de797f085c05de68dba55818", "119e1c70469a868f4b0feea7bfc27a2aada2ec54ef2c31a035156ca2078f2de2", "03d985fb8447776ad9d0299a87b6b93fece19a06e2bd7d9b09c1254f7b0e89ab"), ("2543341526b798bc92ec4af441105efcef24fc64f3d268c65377291ba32e17ee", "2305af12b553f74da4230547142d9b6c203bccda5bbf14c83fb594f51ca9e484", "0674a746847bf4a07dfde010a372eb6050e33cbf65ed7881d27487f67449dfa7", "1d22691e8292b452d3aaccf98db641778464ecb51cd1e69ef9823f31d1e44172"), ("0b9391b6fa6cecd88fb3abf2e6a2926371e9cfcb89ba5db1b1d24e9460743dbc", "2f4d030d8be368444739e3da50bf16f6a9b6d67d2ccd29cfe0e83737de07b966", "07cee3ca9ec9c0dbcdf04d4cbb79d41770eae0f987914e38cef81c949785a9e4", "0a44f8aa52f5d46ebdba28e10668f16cf9ca013eff314795309de68758cbf9cc"), ("2b8ada7e58da8319a33de50640d9aff8251a45f44cef20a6781a7350e77e8c2f", "16f48607a6e4ed2d36d81630c344725777930bd37a6fda3fbe10a1b07b26905e", "2b2a542a9c3aaad77fe8210683bff18a22feaa3f78b7f9b8d2c4d976be5c7c74", "195ebe53a37a48f5e38d9a136e7db94ee1c35b7be1609f02fd26ff7c981c1ace"), ("18c9645e2454b7d12e612098a7c0d211a13083f8aee2b21fb81126fa7479c72d", "150b98086a4d1f994574febd51608911361bd605fcc7112da25574428a563732", "2ed3c32199b36c84ecf683c1cca0183ae2f577d1834b430ee102a309e64bab7f", "224317b9c2be874306c26ef03926a6827252755204db8228427a900b063d2eb5"), ("29c8adb352540cc472a7422ee6922cdc39f0d3f45be3c35a80e9d5493207a138", "1d115cb5c93cbad2d0f67cc53e6ff244f0fe6dbffec12ff798f8470ddbf7e2b5", "041c4988b4692d7418acd6f3617e45383ac337a5699002d166153bffe65e1140", "1478850c186fba7c42192e2802c74455b72bc8e88eaa9610c46611ac7837a13d"), ("29302edadca71ccc14e2f5ceab9ddd8f26c22cd5b3529fbaf3a973096a893af3", "22920ba5dece7a13c85745896817c99be92c953b030c783c324b94d8249ae984", "18518d3ec2e7a17953d995b6adfb4c733f641ab4ed9706285cff3dc6b9b50e71", "054f859ef8aa6d8d8c02eb21627a35f63c07c69f74b40e17b017a6e1f004d24b"), ("15f2f2109a74f49453876fcbd4d99ff63bad6dff11c1bdc375e1d5068f3e15a5", "2c6476d0ed12c0c3d90df4ebcdc6dc1da05f2812621d69beca24e77bb7f52435", "09eac322748c06a0a3f9cc09f3b1244609e5bd2d21b2356b0c44e2b46ab0341a", "25c45de5861a1244d19b50d58c9972c62b0be8dca5766f6ba2d4c057378ca490"), ("219183ac518de62c84ab68ab6e54d48b1c5baf607ebad58c3150f9f30ca3de2a", "304ebe3c4d25963f957d063bdfb4b1a8ee7c432d585718ce793604e8cf4d18ae", "043adbc0ad84d288eccfae589882c7076ffe96d2a14ca08e3063f19104e43d49", "2a05f1f8b05d6ee66f22256b5e6fb64471f45fa1f2a2d0b6ea01d90d317bd8ae"), ("16dd3e58e0eb64167a998a9c85bd214c6195441512aa8615fb3929f59952a35b", "2c51f097faeaab67c0f364a0bbe22caec0661eb2649ed03696280d1d95ec37d9", "0220e7d2ed90d51066b4fdfd0ba611eecdd8d8382f614ba72002461a1023105b", "17409b8df5964f50f0cafa98c0d05287a3ce06a1034b74bd49569c41f82aa53e"), ("22d2fd3746332442dd3aef1dea0f3265c1d1aeac5d7ab158d6bd952d9694540e", "2c38ecc9b8dcd6b75eeb1d088ad6a8ab2219b9d80508c39d623e38bd51c40dba", "1644e6b2731268f2768a521187e995b48f691f643be16b246960680833002b61", "151c8c2fc31a8ee42a503dbfa1d8788e6c208f3fb8e25bff42f141ca61cbd194"), ("0f7d05b31ce5af5c432bff63bf4be5b0a14d4576c2f63b854d3776fb89898f85", "19c4715b1745fa99b41989a3ec2557a51fa26dff3e7a0851381bf99afbbeb4fe", "014a3ae8dde85ad8d2276c0a5322b45877d56830cfa18fdd38ba8c19ee403448", "0f4e23f6ae2035a60d5eb2f52f84caeb023d2184af287b7f1dd4e94c2f8d9da9"), ("29e02debca02ae12243d49bf31ee61cc6f2ebecb46c6a0ec8e804d7524a7a90c", "18d7cd47bebb97c0e5e2f4bb8dc2447dd79ef895a0b059f77f1a13ba19dbc497", "0ebb9a96808bb6d99edf300d2ef68124d5c05e50b814044acab66c467cbe238e", "09c65c76fde7fc68189041cd4d64d75c60b42f05a73ccd4526c23c9b3f9f65a0"), ("21489b9d2c6a17de2521734ea1daf2a576ff2c319895e129678f41a1952ade72", "15a5996fd703f95a986b99fc5b8b5a842ec085449ec3da1d00b175da1fd86b59", "168323b3bbe1a5ead4e3e596a763a78484ba6faf9a71398f33fdf88809c3482c", "2c753c0b51d6ee6c826b2bd795f5ee80a1d7020ae947324795c6573de4c743bc"), ("174d48c9b1ebcedc99abbb884c1ab50575596c4c5621c018b7b3471f49f118e0", "218bacefd21d681713c87b2af48df831447dfc8e5f276d6ff6fe475facbfe89f", "1974c3b833043f410dca47a3cb3a6d78f1edb8efc6cc5e73189e1c00f6a05ff1", "177000ad84ad9bab002707a44a3e3d7d7144bda52573a60b0ef3b8c151ad7dcc"), ("1e163d710227d92f5322458664908738bcc7c9f13f5aec8e824516cdfffb6045", "05aa05f055167eeaa674b8c81750d0b374ec88da2e6f656ed2aefabaa2766f06", "2b71b04716c58960e4c3ac9007de32a809bb2ecbb0b5ae189c7217ef943a6a80", "168501f4c10c5811dcae91ed9de21c30d034a7924359bf6a0ecf98b5220efd24"), ("02287224457d6756a6fa1d379bf6a3f4ad1308d4cc6d68429afedcac7e67b692", "224b569644514681ef4782b559156ca048e8587561b99c97f20f0344dd85a49a", "1029fd5b4f37571a038a90bb4ffbfef3bc11a3d57b868732f6c140d676f4c18f", "066d7b98795dc8f5dffcbc2cf30bbc0f378e33c9de649378ae5f9eb385a11533"), ("1011cc85df45032eb6ea9298d1d8958128039fc9a309a382ce54ab743972b026", "0306681896f65756022b8c99cd6917e166165c0c4eaa40ea6128b8de029636b7", "1156a749c0974e554065fd870ec903184d5f555f664da2443aee6afa927c13a5", "25844eb9c8ec7b7586b0c1e50c26b238774044c5a86a8841e8fcc9ab0fbf5921"), ("2fbdffc31ba03e5707f290ae86b75f3d7d449120fa86a77718cad42f0452dc87", "0aa825143b4634181aa33687e43cb3cac75574361546e52e627cad2c2b85c775", "0c492e5b1bc47bf5f5af7961fe0a85319fc52d48297f6567aed8375ed5ab3b82", "04eddb8143b2cb010b91363833f56de0bfd143a073abdcdb456aa71ea94785a9"), ("251115d4d9098581aa5973ba0bc4b50400c6948812692fb9d0fc28bbcbbd0942", "0127717f37f07a255223fa456988790508b33e19c1d66ef6f9509be405a3ca73", "18bd14b24b02ec0854757fb05734502e34f36ab8cd93fe2ba42b935a2b825e3d", "264eb21e10c72d66597b3403bd846be70335996f56f58881b946e424d37ec611"), ("2c729aef7ab2a70e7599ef8e4f81440254eee93a6facb5a6f5f6e974fdfdaf2e", "2ba20ed6c8bf3406dfbbba6951e18f73a09e2a6d95303c9e2fce256010177eb4", "01615a6dfb40fc820a0f7f64c6e87fe5e89a0a520e0f5f79e109078a7c26147c", "04d2e04dc3f38b4cb12c682f4c086c3c9e7da0ad49f46e5a7060d39a366582b2"), ("1669bf7c1ab091bed6459e0777f67e06a0832086f9bf26c705108eea6046369a", "2dc78a30ce68421ccf53ee3d8435e675f1bc408c939d6463549534b0f601b495", "2bcc4dfea597434290a3f8463cb926e7880baa1b71b3d7e0f403752f62f44b47", "15d7fd1f042264a3b0c3af1f7f9577069f74d65061024316e0dd37aec56adf2f"), ("1daae9f963176cb35d1ca269e13d13ac2eeecb6022358d97200fa33d5efca6b5", "0925f94f2a844d9fe9e39a27179ee72c9cf4b8097e92d119241e807878f6fb95", "192437af86060baebefd644fd5474f6959a44ef17a7e42929faf1a82280fea76", "1b950ecee9de5822b2e10745278b2267d0833c9309347c0fd6d259ef9a6730be"), ("12dbace59db882d0dea6a25110666f8d70026febe39b9e7bb034cdeb74acd9ad", "076a9408ec91805d758ac571f6c47aac5f28f244d416297d873c4280e04c4af2", "2aecce09397fd509390b5b76e26dd42be4372b08f8281f78b6de76c6b8e2c808", "1f951b141892ecc861e4188efcdc215598321d555bf116e06f74cf81b2dcd5bc"), ("1e5567c747dc923f010b5bbb2f133192557ab8e17e83ed0ba1ed574ff9753572", "1fad6f8445adee70e55edb88f49e6932ee53e78401970fa50759cfd9c9275a42", "180b8e125da0d0004492e1f53b73e966c31a7e358ae244b543a0de30635044f4", "2b92169502c2f4cf87137ddc0f6503873444268c2e93319a3a1be3264e26cf12"), ("1daa2f7e2dce71e65ad1ea311e613624c29658b67f86b4e0f8526fc1c8fd9fc4", "1ef780291694c63516ff1c5517ecffdcbee76912a780ca3391b02a897e06c709", "07c4159cd94f72db9a31430c3c7c2d637a5c1e1ed3079e57596aa45f092dabae", "2427efc9dd821477c41a3c54203e6289fbb6f6966fb67f1867b954b4b6f8d48b"), ("2c646ec220e0aeecb0f512d3706509eda07476dcf0a91164154bae80a08ef379", "288e4f89c82b62c2ecb9144d8bada6b906628fb0c9951ee6fa3d76c09fa0f8f1", "1ae78f1cd59e2182d32e195d2efc8af338eaed008577c22239f89f4f638d83a4", "14b9b070f52e97bf35bfc2c74c06e7639715a61442a37dc3b9c44f69ad6d5f74"), ("0c5242440429bde4c120d3a2a93212f19993134bc9fe65d68b7987eb1c3d7598", "04edb82d9bcae7e9181ecd774eccd4fb8ecabee2ec2ff2eadb6885351bfba620", "1abb1d12dc006f5588dff8117149a303ce6850c5d5912ae41d7d980f2d5680ea", "09e33700b0961e2d164a7e22abcc5bb9235881fc163ae3c9d61a0a018ac212dd"), ("29d9950e6c1b1a4269d29d61b3f95bb815f8b7606d655c71f8987a5d55948dee", "1006847861cab6123374403ef1596121033f19470941c2fe6280048f68573d99", "2ef501fb4578cb109ce1d5ddeefdfbb1cdd94f4884dcabc5a7423bb83be83e31", "03cad07018989d87f213a6764e929175626285fcda117c24c514363706e59a49"), ("1c7b34f4552e29630ae0df9d79c374877632c624526024856e24693dc079f474", "10cc3ab02e066fbbac98d32bd2752a1a22781322021ff0703b90e1c990b42743", "0b13ff5bf2ed093059b3645da7883c338a47d8319a8f99dfdffbb9e6508782a2", "046dba437982b146a41b376c502011239501140f97e5c158d16fd62f170eb644"), ("2de0052eb7c33385eb4d1d1c6ade5c89d66f6e2e925807600de2a40db768521b", "2c7ff9eaa92f501d8d7bbcdeff7261eec4013c24215b75f928faec3f7a01e246", "1b28b798b536405b968cb918de76b3e9d610e68ed4b02bd955fc242e04796abb", "158d4aa570a1339e92375d782d9568c2c5cb8e2432eb861e6ecea0f7c42d8025"), ("2d7da73c724b99d72afdfe68a0a19557f2eeef3d5295d79f2beda70e27a9f40c", "2ed8d907159aeeb2772a571e96d0fa0201cabc10b9ba8fe063d8289387918441", "28f41b593a6a150cbe35ab0b4c799ae284aa276e21b5d7f527c54313d4a0564a", "1abf6411af3a81720d8003070bb2869572ccb1aa972eed36cc0683af9a48b656"), ("0e8e274ddd363bb4041854780896fd9a3e859b3e0261e83d76b9a4f145aa242e", "109b65b2bee49ebd00ee703aec2bf0a00aaa0bfc14509f879259fa6012184464", "23db4639b3a66bb4503ecc972923d85b76ffa378b1a68e75d3537beec8767f3f", "227d1533e03297b2c37275ef4cb52e4ff97f87d4c077ffb3f51e4f143b0d3cb5"), ("1d6aecab10ab7801d2d0bfbc97428e01835afd300ba332e258837ac4d7652395", "1cc72497fc3ba07429053ff5c61b3d6a0794c041ff526dfdcc08167b75a3fcf8", "1faab4450547ade1aeb8607803ff56eaac5367267403bfa1497d6fbd75227094", "1fe54d3dfbdd3b5e91bd6c3c6b09f5937f67656d39b9a930fa4a33a04395e541"), ("2936a06d3a8baf195f64c8a95c7a1ca100b59b6c46d06a46d7f669d36c77b488", "0b8e4805693fdd0bc18baeae67fd2084b064b3e988f54005e62ba377b429ccff", "08c2c6fc2fa25bfcf59f33ee1be19bdc22238cffd08fe31683664745262938c3", "2032966493845912611523991051ad32d5f36cab629e70076759cb8d78cab180"), ("1ff9c8ba7958c35a0e6562fc4549ce08c4d7f943302ae0dd48589bf74294f860", "017d11af7d11a3e9e8bb8d9e1852a2e4fa4f80edb9bfbdc4f10f997d34c32fb9", "1b80d7c71eaa193f037492eedebd46485897128678d2782b6f4a474d3761db4d", "259724b41758f9d662aa170b87c6c66b5cbd1f7882a02091287f5ba6aafe58ca"), ("106100a28bc58029fdaaf0a9f8cbd508064f64eacc178713265ac6987552a98b", "2e25dc8899fa719dbb87d95d990fe34e5c5ec601bf2843701388695cc4fd9048", "202f8e87e402342de50048d5803b078acc581de5768ff0e962f83ed7a74ac3cf", "169e09aaa8c59d29ef88284060efa1f6552a5b163a82e6e1c577608a99a8a70f"), ("1adc789abec432881bc0be5e174e5d9fc0688584fae005fea87336b6443bbc25", "2a672ce6d6cc8ecd5a9d034fefbe9f480f3bba4b0b01543b02aef1671aed6b9f", "1029792fa6dfc0196db349f3276f6dfaecff13ed4b54bb13fc50e8a2891a05c2", "22c370de58a6854a7c999e7af04487b4fe2be9fb55a12555928a6ab31298d170"), ("2cfdbaad03e7018a65bfb93aa3889f4f477eac832e75bb033fcb0f818c56f067", "246e07e181cab3d0e802094b43323be1267b17c033104f70a203e73aa73dd04d", "145d07893e4fd88175da471e29a40e48e53cc5ff838ca616ab6b9004caabfc53", "1bdf519cff34f6d32783a7e9d2d45923a2d4e12bcaa629d6b7b105d08bf7f151"), ("2fd0b746c9b1e30406ef7ac4a071c4f7c2526a2e308a31c59caee6617e1c5e67", "05760b1e978c4b754812094573de21f32a9106368e3ee24869d526f89f5b83d2", "22bc5672f3800400e7ba8c2a0c1439819b1bd1cf5b6ff24fc854db9ae397cc15", "1e417eb03f5b428e03544b3ada656679b41a77dfa9c8808a36e4754c0c72e32d"), ("0af1cff6da65cedaf8c5ac64a910be6532b3000333d1f88994daafb86f4d69a7", "282407f625ca06f20feca0409b61284324e5ec3623a4ff4da6bd5ba950e0a505", "21fc57281d0c0de25ff76a62cc3994fde98f7581e2016f9459536084e34fa230", "287b64d58362450ba751cb1c2aec73c4c1a38e3001d569a15aa7ce6cd04d2b45"), ("1aee89db96d108479a334c2204b6cf57fc9ad317a2dd37acaec7af527a3302cd", "3017c993646824b80f90bd5eaf230ecc4211d04702f05f4f9d16fc352808db6f", "2016b37dfbaafa0a5f203a48db877e05926232747463cc9f7c7e8ea723ebac6a", "1abf0fe9434a873071e3643e10a6841d26e6b27858f7615d41296a40f89030bc"), ("2e9fc93cc538c0f48b4ac41e5f2b12f32b47f108016d9651a5a714e56f4d27a5", "174b354b631cd0d3c543ec816b39e17688adb1cdb38295c683c02c84040e8f64", "2e81ddb1a9e83e820a9317134cbc350400afd7a63595e47c91db50704f13f86b", "2179f4736f5fc346d2733830048377f75327c04a0fcc68a1f62d0ff9abd3eca8"), ("0f78d27dac64dcbc9030dc207bcc3a27f3651cbb6f5a718b68477c45e7f8db2d", "199272204c9c0a6e0eeb88747aa2308ef7c725425da6cf66c34d5123d5c4dc8b", "16a1be1b472e5b28135ff6fc91fabe265a052fa7a372bea23e69c7918c9a8355", "1714960ffdf0aad11743ad455d525f53a1aa33deb58840445fa1803044b4feaf"), ("03544d3daabd887d4421b0a1b11508227ae87d4a03526d8c52fb2a3af2f15406", "0d533644c21aeab8a36b1517a028f0d395d0b1009ee7e0759ae4c5e0323afc68", "1f3bcfe63be6d01522a7a370c1e9700e8d2165eedc1c367315bace337f1115df", "0dd4830a9ffcc282fe8d92f7816da2e30bc0e7398a2c18ee2028d113b36fb9b4"), ("120254dcfad8ac10a84d4521cf13014e8a59321b8ec7f31633d6ab3219d36ee4", "144ac9ce3ddc7be7db8e1266f0482ba8af29c67684ff5cd18385201bc21a7503", "26bf3c4d269e7663c0cf49d454f76a92f092876943d072f5e5756b30bdd6166b", "1382a440f36c386876f87dd6be1698974054474fd1f4b5fea417d1944e64c41d"), ("06ed543a3f021760229fb74a7632819fc84d1f881badafcf8eaaa42e30bcd7f0", "08d581b2788dad053762adab3e872a9d12367f9cad7b1e9dc393c99371b4757c", "1df365181e76733f470d09d14482570f5902af3282f2889b2b67a356ee577c06", "23d4c144f88021efc9ed39e36ec7510479b49479dec82a6cadf241550b65e1da"), ("2bcce4c5e82b873ce4db7cea8769a3e826190c766abbbd9c2b0d17aaf116b41e", "0d7a22a51eb8e408b61acdd9dc5762c80de080162a040e853474c2dcc6a329b5", "18ca11d8650581b0fe65ee74d63bd361f20b90b29e6912639b02a88fd351f4d3", "0186e9fd2d9378b9bb9bd0b57f96bc8bafe8b1fea7239ae7d8e6d0669d9e6325"), ("266f8b99c0a02cd543e1e1b6ab3f00d3ac5c20d8e1ed4298fdcb4abea5ae2c8a", "1eba4df370c466176e3ce7810c8acfad76294485ad4f8404dd7bef4ac3057619", "0258c285b990f641abc25a029fcc11c29f4fca405424ed9cfd8658561f85f0c7", "09b4cb6b948e1598da1b93aaf09dd24829e6e8ae9c520aad32ee8a2f51298c8d"), ("1712b2b49c1edac584ffc68ef39a45313d60d53ef2be04b08425595e58edcfed", "0c761f2261a66352db8e3b1ba1c94ccc7c16cdf5bd99d64a163877b398698f3d", "093c7f53ffdf005c89b80085445952792b582ac7bfe99b63f5d50a9ad3cb68ee", "0c2bf24d6d4ff36127278dae78e66af580840b688cb64ee78c5f06bf87f22c0c"), ("20776ccdaa3ab6f12a8b7f5d30e4e09ac0be6d4e233462d26bf8180c0995c9f6", "2f3071eae24ef004883a1a95359a3779a6c751a9492bc33db223b42bec37935a", "194449107c87b84c19b6c0ec2f3da4f990cf0bd5f27683eb5139e13e092e64c0", "22ac7a1c4f04ed2386cac2032d7da76414e12462bbf8284a16dee43165a23b72"), ("178a838dd5a281270fe7aec3250fc9631049d330ce3d2ef301802e466d203662", "03b87b5182bafedfadebb499c3deb7c79604411e65d6bf437e3e093855e4d0d6", "04c39e75a2422f5171ae437d450fed8f79d71e34cc9df6db0730933c4da4edeb", "0324e10b36306e42d195c8e600bbdb6d380ce5d48d6b0e91a97299d97e0f7cbf"), ("2464ce098e8c52e36ef5975f0853dc9fa07652a51948e93266c488433f53b24d", "2743f23c674650909d6f61ee2ffdf2446534a273a4caaba9dd9e048bb3fcd216", "09982731afa914636c0ed0ebd44006fddd1f9da1f2184f1bcfca5b273b9a975e", "018129d91653c36d128c27eb345d978a1826c4bc4bfcad77764b9923d2bc7aef"), ("1e96d2d91ce53893a7c39faaa37a0e54ef43ef8d38fed49fee433c34d74a3b31", "0e0939d2e5405664957b06a1acb231ad8869b5b63bd63b50eb4a1ade1ee5badf", "29bb88ebd3e570b4343ef214455e295b0153132767b58ffed6e247f131ad223f", "01674d47a7424e340d7b426ba0901e546ea1e2f64c7221a82e70aadc80de6b2c"), ("12eca7b00791fe0c37ab5a490129749301c0d676a84f8de6160e4ef1c0b1ea89", "294ee72a524f500e76ddde14baaaf24efd99ae38e10064a881f71be4563c8f63", "2d761162a301cbf0aecd9290afb9b2887bebc483d689410f2191ff2268ef07f8", "2fd84fa1202ff198de1f4020190ec4cb0f288f3935a1581e1844b40f41592b61"), ("0b8376cd717263202b6b492f4db04fde7a327037c9aa3ef4a3b255f4219718cb", "065e6a0703f316b3567f68ce20259a2e04d832c9b33435ceb34d21f92c3cef2a", "15244038de59965db6d018e113e68fcf53d1c240ff193727e20dfd8b31e8f2c1", "17c5e3cad6fda27173883b8e3062df7df1a46408a22e8affd63cce934b2415d0"), ("275ae1779c7d114846e377d82aab0792412383f494a0d2234d1705430627b0b6", "244988c45a1d919089279ed52c1a67c170409b8e911ce7c0049c424e6942bb66", "14ad1d144d01556567e7cee17beff164188e3cca8f0f8e50dcec7e97765da584", "1776e2c8c5bbb47444b797dfcbd58e66132132edc79380cb84b2d5419b884cc9"), ("0d12e388c79b23b28a611e147235052e9ddeb9a497640706d56aa0e4819fd9b7", "004d9012078da775bc6e1be24c0b59e57d6519d7f9ce2316d7c5f81519854dcc", "0134bc4c1d69a6dfe1ac69dffdc5850f8e56ebc0dfafb0935cf82294dc913976", "197219b8744b783f3d55066fc7d05daf7a76699dc9b84f6b89581961e98a176e"), ("139ebb6b63e2d98e15a2f93df13a596d05a490031d85c0fadbaa39efa0bd6e8e", "104eee67fe5803a064e5f552f2ca727e47098cc93c7f5956df106b950d1f5018", "1907af10eaf169552c44cb059c3b46e200d2afbd2faecb3c839ab5319f9b7d10", "09266f81901d111ebd785e55b1c1bf5a206bc4794e2b719576f7047d1f785f6d"), ("2b54124eab33ceebacdd1478020a489643dd68f0d6a98a758f1c1e2b6bed4631", "2c9aaa9e286ec251c698ff69a5c8121dee3d9c6b938c948d843ae03a8e9bd11b", "17d32cd348df7419ff469346e29646b5169d3a9af2921fd5c20cba81308f5a42", "0998187cf27214fee37d9028de2da34cc9ac1b0bc468ed84e949b519c2df66cc"), ("285260306e3ad1937f61d22d9bcc5361103673e44589d98a1232c2991ff54a4f", "0438f4859cbd4430bd09cb2faa63a5015f1af6ecf3048894e56b2675c3ee77f6", "0e5bf0fbed794d06943c5e623e30f9e194c1b051d386625cb9b96672858d89a2", "1b79760d76aabd4e7b78c4d4ec66f303429ecb760b4d7c7345ef4e1d9130fa2b"), ("1a9779dd6c79297ce8c9ceda5c1810d3af649ed202db8ca14766c78221ace38d", "1e616722120274c6469488c456839d2f9f94fc80cd783caa25ddd9055b137651", "1b66dbb25607ec999de3e88c842873641c3452cc7ec4dac628a115c88fd6265b", "24d01101ac1352ddbfe5899212311d0764ef3f7d861f931b55d469f10a51f096"), ("24d86d4a583c746865699d714c6c69ed4ed6259f8f75664291d9bb8c180d5c18", "175db8acbd71df7a70d76910f8102035f400f39708d030ac09728fe23f343ab3", "08b6ee6b193eb653848083331805de268bdfc08f61071639ee187d4adf4b9d42", "1730f03d3d5d7d8fb91f6d46b65b4b00536c1b4382efe51c248d468430a0709b"), ("07eeed8caca8fd56d1c85ecbfc449b9e2c8efa8cd4b2ffe2f661953967da3271", "07fcca9cf5e6af66088c6fa8ef0a8abc4868854632015a6f4c1ed9d4421d682c", "1ba5f00d8d42dc2abb092fca71fc5d473eb08da5a2867b237f3f4261dbda0c21", "0d450f0312cb67461ab371420b7d30d9f73ece232de5902cccbd7a407388de6d"), ("13689bd56ee867b944b059e82351de2113e7f6c27b7bace7562c354ea315dc08", "1bdf45e1248fdb7a8c2354b048b81b233585e5b99418b46f0e5192e631cd7e74", "19347e4f07f60badc7ae1b3d418fedea9dbdbcae1f420617ffd1b7bc45131e48", "0365da35575c4f992009700d283443ab940dae7a01218ab948a91ae760199d33"), ("20f172acf327d2eccaaac29edd86cb20012ea7875b08255ad4e222c742412e6b", "185c8fd0b02034949c8821e43f3395cf5489b6f8b6fbfe3f29d69685f06b935b", "0e99568fa7bb0f1b710528eddcebbceda309d4de3c550eaff2d9f8c9d4b37b81", "0e4dba618c6740637a4f28dab5509a9260af19d8189e40ec6b7f5617a1337ea4"), ("047b1b277ff8f9683d1d39dbcaa2d452c91dbd2ed1f7cfb1bb399396ab62e1fd", "25dcacf6905982659c0bea6087326447a75eb4d5c49fc6a02a254b4a671f1efd", "00d1ff6db36626d3302cc1cf52978989d38499f8cc92538a82ad3dc4e8d1beb7", "0a942179b5664e45c79dba834fafb1606764a8829ee7820987c884eb044930b9"), ("247c90df82d7ef0cc015f0b1672980c77685dfe30c9a08562a4099901d98ee99", "1b475650c6aedbd70ed55873865e3527a0258bfb26147dbefbe572224b6d1786", "2276e33f7e67a75d871b9a76e7b4a42d410b6a9039dad9a018f737f5b8605236", "118cd213083204f840231cdde6e7bcc1d54cc949a04c9a8ce0d0e787a6009b7e"), ("06bc129c28834a6667bbe4d1cf4227074154b7cd73ec868f76c7a00e217c8ec3", "1e917282787bfd20d69f73ce92ade8dad85eaf96371e9c1d8ac0c897bd70a662", "10564f77ffe28ab309846c999eba4b4962313f857b2135b7247a8a09b76131fc", "0facec573f280e6f4bf8cf1f99c1837a346b50a5ea2969983a3a72d3c2a85fb4"), ("03f8580576d59f2f237392149a966446ffef53bd81d52643a9e0e1c5ed08ee97", "1ccde4fafa8509c88b106672fb6a1f5ec696d9b9a06e6f5cac52cd1f47feafc3", "04c6e4da6ec67d6721d140cbd33820d6c1fd574c5e529a4cf9a4cfa7303a3c99", "1e6abc53544e54e7d465e9a85911b23fe4feb0d63541c5f75f698d43907a5fe5"), ("2556220822dc42e907350e7b3fdef1e61ba667ee1b886a3094403b2b94644e44", "214c44fe5ddaede28a3fb2459c292d4b575a8d0fc23c09c159fb7f2866d46c1b", "124150b1ffcd4f59197669018c8f169bef6d43e728307d7bfe77b2704d630c3f", "113a444e7d3bfdd42f8932289a430d721c28d30ab22ff93508e8fc7ba185bfd1"), ("0efb07aab9b2b7735f679e28f4f3a2bdd9bfe00d0c56d963aa9720bdd54199a0", "297929b496075f5fc5babfff7123c3787026a3428889c8042a414eafee02eb7d", "0c05ad5a2a8d59928c207e2314b2b1240ac302a1459b02c7b20d200d7ddef3f2", "1524863c8df172e19217af9c14ebb01e6efe7e7b2b505ba39147453d277523af"), ("0fce96bb2891d49fce8599c897b5949576630b59a6a803d2b1e49e0391f7d385", "10251fc12c95da300ea519528c013fdcc0165207ddc31b1b5e706acf07b42adb", "193abe6be08336da59bc4ea25590d37f0a362121b31390437e7b016d827b823d", "20ae8a61da58d4e7324d1b22575b7a2d35841039d424dfec9632a2d3fdcb92aa"), ("13e19d8047b492760f4909a5331f0d2025b576f000a313ae792b523f030714f7", "0a60163aab4dc1aa732bcd4942b2f31063c6c658de4091136c7b9fe359e5d9b5", "117c3efae981ab56f8ca8d9f8e9b8b9afdba690afc832b8eed6108b12b264ba3", "2636e9173bcf7f331bbd9f827beee8da873c727423f29cbbc5ffdbf0ae65bb4b"), ("270282cf608b587baee75951f3746860d29525ab97552a5ca406446c7f80e03c", "0e01dbbf7dd4d15d5560b4601acbcb64fe73d8ff011b91b0b790f59198c56225", "0bf1050a7568b789aa3864f892a89b5a362e1789c11cf036dc2c67c5bfb2f291", "27daec33e2bc79cd2589aae31087aab4afda8829982a66e156708d133223f2f6"), ("1227fb82f747c9a706fb88beb4247a64ff3335c0c71cdb2f7c4b08c03e65f31c", "1f42b665ce3fe2e7eef94cb62b15e0bda9f733514219aadf9fbbe493f95cf9ac", "023a02b02a47fa181b12ea427ef4e8613c7153c658e310f9537a78086df1cabf", "2ea914dd15f12e5933563de375611a8a95a9603bb95935ae3e9ebdb83a1a072b"), ("16d045e4f1efe13add98078362d67f5f9805d95b539f17f77ce2894d569ec198", "26027e7652b21cebcf7cd96959d2d1694b153fe869c76a0a131c22eca5a1fdc9", "0a4eac4a6bd6c405e1dcf2496b119e9fe5a6fa5eadbb40bbc7a5b9fe9d422177", "0bd2b32e862195706c31c9b5d84cdbc1588738a48a585171345f27fcd6b32a68"), ("23a9aa361e16453104d6d79c176c73311c9eecb61c1e8b692935c914148bfb02", "01d418772da2dfbf046fd598ad9062f50d8400753ddebd88049f98b760a833a0", "1661893f9c10e225a7aaf99db0195847dce713629f6cb8bf898e86292aa53d1b", "190511f2688cec7cdd8557e7ad743487af1e7b566c55dfaf3774c1c06daceef9"), ("0d11c8d084db40311b6916ccac458b123bacd0c7c6a2586e12f6e4ad43f79b5f", "130b883107141af55e2676cf5de7b46489b2c621fac1a1aef730bf58be78d186", "15e35eb9577d852933ad73394c1afaed3e207d3f000c0b2089eabaf4285fdbc4", "13810fab13517890ede85e9ce256a3828f5f7ffde91bcee9b04be1e6893390a0"), ("0ea2ddc12ddc01b6a3468c922f0d56c6e18a44759001808d635ef5fc9dcf4204", "2b73fb7a1ba3e8e2604960551f526c49dcd60b5417cf86b20e81d502f4264c5e", "225fcab4d53b35b96830a7a15d28aa9087fc095684130bd88e0f9a1236700e2c", "1aaeb98d1ba77e2676555b1fc5d8a712d178dc0331f3daad052d7fe7faf3d44a"), ("0c370abf09d8f040e45b66e69861793de08e424b569d23b429c5d31033fbe224", "1d7e0081358cb517ae2b58b8f2177018008bf0215ac8bf34ea719c950aba01f7", "247126ede04151ce5a9dabc3dbe2148ee0988c24ec19561a2a79e1aab3dcc83f", "22f42f9b8ce747318c70e316204e8d2f9dccf2f87479c19d8ed2c307ad52668b"), ("2697b0cb11556e0c290a7bde762a0cd4f7bebf7cda55d0f9fd865423ea21aad7", "106c22aeb21068b0b2b1e7e77345dddc797de0adf6c87fd0905603721c515555", "0dd7eace104a429bdf693aeeb02aea4fa653f8a107bd8e1045a6570f96cac0f5", "283faaf5557794df9801e79f3375e5a60861c455dc06243463a78304a1eafb25"), ("1449af0d46c3501eae44b998beff20658a07537b659cfd13dd81c844b21390b0", "05c57b1b037e7f0eb16dc25ed7f53f69d1640808f8ea641817bb69e9138638d0", "157a542655e2bfe89bfd219f3a1dd1b9f0ac3cff5f42029827091e36f0250f46", "0214451cf029d9e9f0adaa74d2a4b447c11fcad50b83dc3cbb090953c056f2de"), ("2ab6496bc5dc6b95d05c8bc58e978f7d37d6dcc132b6ef57c098bee9924ca807", "1383a92366dd22fb4d3259884e9f3ad8694284c4230f9bea91e52f2278265967", "2ab853591542aa66fe431e420c40c704b914e6c61970bc9caa642861eabe9a3f", "257eb64dc512284cc1b297d045b49d0812f404a7b681bae9ba67bfa29ee6f634"), ("2482a614445bdf27deb3c01ba9cc59113ce9fff4accd50ed851324b1190d77a5", "13dcedf878dacb7c147767936f43c3b29fae36b08d3b48d09f55f372956a3fdf", "1d4997661f09bb8126c0fc35f49cbd72099572cb21436226ea4b3226725387ff", "010a5ea6cb93a0ab5c26dcd57ff89c6725405a69c925ca782eea5110684165d9"), ("13cc49a9345c2443dcca32fafb9f450d793e58246918e7cfed50c0bc9a69271c", "2f45e0b1a582ab3c29fd98559b5f390cf480e1d17d80ee86e478c732771ae8be", "08f27e0367a7206e03c17a6d624e0bb506f54ab13868d655a91461f68b7d7991", "22453270cf59a611ce24c26803d739ff90d059b72257baa2ad4c18bca7c8274a"), ("2943bd17e2154e76831592877ec73d2014f4d645b0e027c5eee251fbb1878e6f", "0b13c0e158947444be177abfa98380c7d3bd5738877ba582be5a47ad9664e6e1", "0418892c9ce884299bfb361043c4d44c986446c8e7552c144f2f3a8200989788", "19f494b85ec80859f196cdf622f08302ac90cfae98cb2e957eb792a3fe9b18b7"), ("2d763a447a0fd1f26533d2588969502d18bdd00c55a5e81f7b00b6041d8cffef", "2771abf3b34f8053c3edbfc87a54d30409a5c91ba94ef42dfda9ec6a677c021c", "0f4c3324f1593939bf7da6f14fe93cfd104c5f879b936ec42f5dc1c8721aac22", "2bd7bc5dd62ce7804142fc1ba67cc2a0242b0e5e20095da90a1c2c0683ded870"), ("268cf16015ad38e1f7e2689c712e8b8f61ddd509d32e251633992312a2633b3e", "0f41bedb594620bd69e34e0a9344001f01d90d483963d93f69f8eff32cba739d", "13cc42f6a4cd15905085aa94305f7d26edc1b0049a07af954fcc04de026b5847", "0f3c4620d97975a5ddada7ac83474ab8b4ebe8170af3d17791f9b595e996f6b2"), ("13fd9be4018707eed4e30ac2c176151b4f9b1ecc16d7eddb20a9d01711f2269f", "2ed015d81352881de9846dcf7bc0ba49bb568ab12975edb3946a429ed5bc5736", "112352afb85a5181de9984c3df394988a5598a973a2069c2fd506e864e5e8f96", "0a04ba58546c845e3e3508d04c5d1ea5d1d4a2b196bc0865528e32b29a184f20"), ("0035daa2c21764c3309cb04d21eac99cc10ecf0079793a2a23edc7fce515e901", "1e8fb9dfa62f79418010b749208c08ed678b240fad292c938b98de1d3b0eba97", "26491606f31eda492e1255bcd0259cbcdacb2fd2322dedd03757ebc7fa23749c", "1012a9b6ce68affecd23542e19557299c4da97ea790ad88a3c32dfd0a0714bc4"), ("07a0bd679f464ae5e2bb71d476069c1b8d5ecb45a43b734037a581a4acaf90a9", "0c6c9754ad384bfc57df4460231fb41b0777dddfe37d7a83a8af29433beac8b8", "17777395a9d8e8e6518b3470f9dffda92e5b3cc3bf5311e8939f30d98933a018", "008353b5ed81b0a06d8d898a307ee37bc90d84977d386096d9e82528d0b53982"), ("1153948227d1d09dd1de2b49f98d84f28d2dd05881cb38d91b363d4aeeebff30", "2518d202ae0ca1fb1e464d2567fc49100590e5832df17e5a1958b403994297d1", "0c9e9998661c9680359114cf94381eefdfc7b69d072f87a84b58036b0681f5f5", "275d5c3e6140f055d754fe1dd6d531140a84ca142c60381e8989e46387371507"), ("1e4d810ebdb3105a1b75d672d058ce5c58e78994ed5f901f4f967a69a45007d2", "0eb1f2e5ab547aa9ad407ddcea69c0a317ee0d612bc4cb8424be77eaa102a296", "05f422b2fd081abc44343385f5386a60df3f868c891f98ddf3be66c2d33ed745", "28a31b20290425419e754257f11e4b9212f97966a8a208deb8bfdc449f8182cb"), ("04159d0d9479c3c80ac2f07ddd8e4b92c4a19f2893a64ab79da6f97b0bd125ce", "11c475e2e7e8d61bdd9b6bbea204a96be39718fda6c85e967acdc09304d5bedd", "26ac104774a53d586f51fe380159f366fb6a0f981f9129a367874a9767b7f077", "1363493196ac0905dbf0448baa8d406a0a504ea86647b2a81292252dae6ebb12"), ("30127186edc6a160f8a2d07cb7f0a34f594ae972525694aa6db1a93cd6fe04d1", "1cd4604fd6e05e108d2946a1a94c3f7c5548a7f84741cc2a1427fdfbaa088941", "17f467b949acbfbc62be5055940b97a86ea2398be9e94f0b62a45f4766a15f75", "0877f566f6d7dbc538e95f601ecb1fcc187faed3c6d05f162d553728806d7d8e"), ("1ca807b4f5b2f5f0522e43876da1f8fb6327f4cb3cf65426246809b4994e2f70", "1da45e226685e537661a12ff8cc6e0e81b9b4e12f45059d46bd3afe8ad1f4793", "11020a20aaba15a7b8896e4851d966712ef141bb875043c25d716df626a6c0f5", "10af3f3715ce8589873c2464130205a5abe3c788d44970c17e8572cdfd79348e"), ("1e0be579d24ef5fbe2a536df97b07160d6e760b919736554c4d17eeb8042391d", "22096cab7eb1cc8caff7abcc5bf6448b700da1f0716093ad5d0db4312de6251c", "09ee5099ecc0cf93d2fdce27ea40df5cfac4e94056b408170a398d3665791192", "04e2a422d1857d18050d4c40d0546feeaf5ee6cee3bd21e8fbcc4f13aaf52d42"), ("2d23c33d9d6e3c2400d3d9d0444beab5d4ec5f63e4bfa32e40ca953fdae91f3d", "305b421616e446ebf47bab13f46290e02c8bbe1635fdaaa437c2259cb6a6b1f9", "1983f04e4d2e1e165bf62c33edac945d44641207fa8bcad579065b4668b3fbe7", "2fd0d73ae4011af1d0a5afce302d37779b219005d0f477387be377606801a65d"), ("0a30e9d35d7865833d11a4315858af16801f4209b935536ed161317b483e3d30", "0caab3781a21b7a9bf9c11198cadfca30bd606a666b873d9881875149136670d", "204c0918377bba6492220ed8cacbad080e6a0c79794dcc308fcc14fc05ea84b1", "03688948d0d9bfab08f431976f68de014b40982e69aabd2ecc4348ce8c4d4a98"), ("1745bf6ac62fdb030e07ef34589aa4aef53d0f5a3127b1797b81cb6c3f2b2a0b", "2c51d75f8cceb62b30f35b3ec7ae2b987e2fc1435e10b375d290a421db761234", "2d87cf5ba52542984cfef009ef24bd5b6bc45224d93f38b3c2da135b7fd2f96e", "2c57e9bbfd66a8fa4353832b58c0dc2bef661a8deaaafd25d88ca30d8a5f97c4"), ("2ce2a222387b005ba62a412105a7073dfc54976d182d5850ed04e01f7716dfa8", "0a9745b34d3ae3bc0bb1f38548b4cca8c85a274f1d122f2dfdc9a58510f824e8", "05dc680a8460039c3f4726e6bbf38bb4b3bd1a80263a18151abc0781e3350f7b", "1a5c5bcdf2b9ee280faedc974538f497ed43939448f24542c3099855dbf6dc31"), ("27e60a5a96492435da252d12841111f98c999d15996097983789a2e11d5ccc79", "1689c5b4c024f37262548db0d94ac3f26de532c82ac5602bb1c090fbdaa01116", "29d4ed329a7f7305edbbe4bcbaaf40462b20186a653b4f90a3db8b52c28b5c29", "2bbc0ce831082b196b3378bba8566098a20df447ff822960b5df5eb81637752f"), ("1d508e99f59d313f8022849f9fa3c634939fba756c76c45a098be092034d1dcf", "263f2d187402db967f9ea1beb274b6145a3f30005c979f20e32aae14ea8cfc93", "1ff00e99b391ec90f3dba19b27c180c0488a1b354e3e1e389d7d6fd08c789fe1", "0c3eed4d18eb77f0c2dcf25a07af89f01a8d29d0d0255c39d4f751d3137f2ecc"), ("278be23ea9369bd91ed26b4499014efe33092c864156038d053b1ec5b089c267", "01c2f026002913a4c3c915f9c87d7f6a902b42746baf2fc8ce458b0098391698", "014be102c7acac9f49e10082afae128d4dfce4305f0eb49a899fb21bb24c73b9", "19f74beb17c9811c691cd21015be1f5c5c69470cd4012e7ecfaf00e03624ba92"), ("28d7bcf63d295d4a62abc027e3dd0c4bcd5725d908ac99917b27bf29a79face8", "22db3dc81f750e405e5da3ce787fb3d4beadcaa5b9e10ac7e6e0186558b04af5", "017089d36a8d27931c47b7a4c9a751f493a385f6d03d3f618bf1718f7fc9754a", "2849175b82f9dae834b488bbcc445a776e868bdafef7937d1a1a2b9354ea6a92"), ("19d9f23eaee82cc4e5da696cf81317c1d3c761419a5efc65acad0f5acf09e7b3", "0c874946eb398b80206da35f4b80232693a576d9aff3835bc306571c8ecd828d", "26c6d2d8ad14bc7f201558862204a64a6fe7def593e391df307d821c3d8891f9", "120e4e1c579e74c5a24726d13ae4305dfa42ac549152258d77a02408f710a69c"), ("1e3ff6ec705206baa64b4f7ff98f6c6a90c3699a1b2f4acd0f2916903e2c792c", "05ca60e7525b49327fac5fedf19257535b9c1da878fea56b59e34b9b78b479c6", "065faaf6537ccd6e817c8b5328971a43733ba879c054ac81977c78e7b49553b0", "019227474d86a7cccdccadf6db82b3091bac76362a34b3522857ef02956471d9"), ("2b263a6298a73b382b90d0ea3420fa176c2eae29629b9a02e64cdddf6899d330", "2c93166a26e9baca0f3cd8f2106f6246d90d8a4917ea7f0015084f1cfabe91cd", "1a8dc06cf7b686cd9635453489d8e0d6d5f1ce902765941d6c3714199e270d9e", "1f968d6cec2de22f584575b7b19d6ef094ca628c87462a41e8d19910c4d6b4ff"), ("0bb9b42702b789c28bb5926d04e66fd578d8c51d2dde0ed29add9089eb780ca3", "04f8b12e087fbf8fc9104c2a2cee89ca079107c45dce3fe91da747fefedea3d0", "166707ff6696ac496fa59ab55e7f0fb9f6cadff2d0374bc531c07e55ff6ff5fd", "134082e22989bfa0b14ef2c2d7bf6ae496506559f4bb6deae7c9b1000b98ab63"), ("11f4adbcc323af9e5ba88229fbb66bc1e0f3679ff8c1329fd9d1585f81c204da", "2a1235831f24bf759086e19703bdc8aa1d3526422d524b57aa20794587a8ca32", "2a7667cb0ec1287cf6887e44297eb8920881c207fd9d3eaa5f725f94ba3d4fc1", "05f7d022c2116b74733263fb00c72f923219ac2ff336e6b59569726cd66f84b6"), ("245a62b59cda9d8a3bd6302a766778f4f47b43b97e37fe57abfe278c377ccedc", "0f369148da5eac1b420c279815c3070faa50487e099489c0f7c39ac7f5b2fdbf", "140fbe8d531f14beaf62f84dc67b8b11e3e0d7ed2a16f4760eda1db9d29c6e96", "0cfd97d22831134fd2193b727beef2683d226938075b1df729625fbc604f1955"), ("1949922570fb6a593e4e5b8d46a61aa07ea5dc6f7686c10d7a3f026761186ed6", "1daa0afab76710d2edf2b5898bbaaf36038f9c9fa0ea5c7dbc2a811f6c1c706b", "2dc7a594d26086051616b88a7e7cc895a7365845e2b735aaf0479452fa133c59", "2aaa6edfaec776b3924aec2d5f6fc1c2227b40b03ea74966e7a372275d44a447"), ("1263c76b6b8803bee40a9066d6540421b6760b3f4f1fe6c3fe29c38b2707df3e", "2be5a796984cbb72506dda57968f48a8bd07b2f7d494e3f04ddccc74c3f92c42", "0211bad2935b5f1df8314bc3deaa26d609cfb830d8d804c56a7018ca7795ab38", "2bc9c57d3168830c8e2f732c3310a6a61ea18743d5da0bfa89e65173891916b3"), ("253ea46b28e67b898454daf3e5a529d8f562e9f54dd558c63d8032dbd607d5ab", "2d1fe0e0973c1769881ad4aa1a4e2da1376caa363a7893ca7cac24e3ef3e6276", "2d793b8e77f7662f58a8eea6dbb2706544b28362d4f56b001cea1eec87fa0cbc", "2dad59c9bcb2136dda3f7b8cf554c673f3aafdddb38c88484902e13999e51077"), ("04f24dbe93a312965d56634958ed214f58294d2ca034bb1f4d3dce3ea7a635dd", "17e25994af653bb5bfb8ad4774cf4ff860574f5cd581360e6d6dc701c2d56e6c", "0681d51af6b6706945569f099e17a1477cb30519bc292f3cf8213d456f9d6e90", "256f80e70dbcb766e354cc29c293da5b16f233d57745820414d46d6e85ae78ce"), ("093aa06e1b7f04a671685bfa910d69d5edceed9dcbc5824db5ab35f1b7a5522b", "0a19cc35bccf26ba3095a5ed1ffa63226ef90c6ee496e453b9025e74a5b1407e", "16c8300d506590ab8ecc94cd64a13cb8612c3287f5891dbd5ca31b363d7bc31c", "17e28aed0127cb3ef660f77af34211724ffdf75166860f7ed033a7c6357a7a4c"), ("005bba11ddf24ebbca3e0abf38593a251410addc18d8c7571e86c527b2621797", "0ba80e6e7d226ad2c9c0b65850f5c2971cf86784e9bd81e360f8ff02fd9b4cc0", "1df7df2cd22b9109dbfd322e5be66bd4164a8170e50446bf864184ed131d0b79", "14cd588816de20abe64702bfcd23a7ecf1ad112d1277402dbb2beb36f93ef8dd"), ("1c0912790ffd53428a36fc51e36e0e74cc74ee7c18386374dee6cb1f30896996", "070ad62c9141c436c7719c2fa4c219056b830c34ff90b19666a27f5475b264fd", "135a4856e180536efed3b7ae61b537e1506b7f287232c4d72d350051c5c0e5f0", "1e9156003c3915f3cc8a67c2a7be783f7a4bd2174d6c48329345fbed1d5f1c8c"), ("1399a3b6bec09eccc89abbe46eb6feaae6aafe3229bc63c8577df41ffdf583bb", "2346139f3a12bee26f6dd5512546c2fda8a0fbe8993b46b84114a80cf3140d1b", "07c0c48147c6b95a40cde4b6d03aebf8f3b44c6ee58f502d76785d52d9703bb4", "24d3a08bd9dc8954749edee48219eb7e861473bc30c9cfdf9c9e529b16c26e61"), ("0680aaa1777b30dc694ae1cfc2d6fedf42df64a7c662d68d36fbb431ce15fafe", "1f8c0a9359c3f00231b616f9fc24883f9513271509c53da847222e15d41dd741", "09f1f95c9e62e2bd956086ac5bcd499c4e26d4ec875763535a957513b60222a5", "2211b79e1e8150b53013aae2c4e46f2618e18cd282c0732fa85a49f4104fced3"), ("130fe64aab8d085026fbd8f24f3fc08d05d014d4a2bdab2614c3bf6ecb8b3d56", "108957d7797a0c30217166b7a81aa028c782c8f2fe0627da798c23c63ddfec96", "2fbcbe8d3e28d2379617853e26e141215587d2a6d8d3e3c27230545cd0e9acee", "1b2554c5424e7d0c0fa3f82b5714f7c4f33f0de729c6f5b4628695fcc087700b"), ("00613b224a70202b939e43abb419945b0a8e4b43be5a681077b829dcbec5f450", "03d6285570d166483817144a9d25595c25a870619cffddcb5b7695b511a42323", "0417a4fa3ad550657b3ae4e99f5a47f3dd9a477a2b78b22718a800ecb8ae3a3c", "1703202372735ae1f21560d9d4d930412a41e28bbd236bee9a76af1ab46b6e59"), ("1a8fce53dc6145fa615aab5025fcda51188ff557ac4dddab283383c2ca253821", "1cefb77d344b9465ad04a556ff00f1c01a75bf79553fa7630278bec08e0b1873", "1f41859ad95d32376c001caca9affd6c3f89d00e5a990039742a405c33727d35", "0b10d4e2317c53bd7f547c546ced61d8283676fc3fdbac6d223e0adb914072a9"), ("02a7235d08540ab38b34458fbecaca36fefe09b8ddf1b6f4169027dd89288012", "11c6055cbac201e0f323de273315c6ff2e40662167a28d9cda22988cdbad3937", "156599eb2462d9de1eaf3e687c7384d36911dbdee9f8cb45ee477def5daa331c", "0775ce7594816a7b5547f19fd25752e2d6b46778cd6f9f141ffc0f7a4b5ac234"), ("29188383cca6d99ffc7f0a66870cff8135a9e3dcaabebbbe8d68ae92c4b5cafa", "21a43fcfc5ba30f77ba997d9f25e59200e7b8671140a767ff1df8a705706a30d", "1e685d6dda33abb225484d9534d0e32734e900a90b8475e64b81ffccdce27f3b", "1bcc82ecd461ca2f4c5f3d81e5fbad9f68ed245247695cdaa8335364d78534cd"), ("26b44a6e26f6e0be53a8935bd560f3022bd75bd5a0be6f2b8c941b6c36baffd3", "1314ac8d8f359805d1e50b3be2885b5eb21cfc406af63465663c9c705f8913f8", "1917a514ae8e5a387d41405aa6b28ce806962304daadf084ff5abac904814b38", "0c10c69c763172a9de583ff8ac13f25f7adf9d39624aae95e44336333db17682"), ("269c801b5bd63a54e405921d2aacbaaea305e835a908b8b842f98ac037e0fe89", "0d48f754484a655a7681dbae0ee16232280b4a6b917609859b4a7682aacc80e8", "2a6f255555678479a63107fd2a1a1803faa2c03b2577fedd1c326d723ae79b12", "0a0af50de0b62bb4e55f05159fa06e9341e6e7bd92fbba2eeb056c53b910f1e9"), ("22cf1a9e0a680df0e3b508aa110aeca6270c6fbb4bad9658cc373a00798a015a", "0583f649cdb953080cd1dc888b4f07b3698974566a132b84510df4b3000bbb7a", "0341d57a3f411f6b96537b4f00eb3d0802de8096cef5b14fdaffd9a5fb86f640", "226ce7d9b6d9a85c40bc2339142ca1865630beb1dae307a294596b7ed687d42d"), ("05d867d3360bc9af630eb8aefaf94fc38e5f180e16c55126bcac5368feea78f4", "09a83593fe5c63e08866c96051d9c4dc0b0f81237dde89f1bdeac841b49cc8af", "21cecebf7778bbdda791b4a928f5a8679b66a8e2990b8912aa9d19f31b92c479", "1074659167cd16ad847a489fea6103e588416773484dea16beffb96ef7446186"), ("151abb4d908c9f7386d38bb388e8cb08e67e15613f9b79cf2a416d263b8a69ec", "2ed25363a3632074835a3eb9257a8d2addb59defaf2c766f08c5ec615f1391a9", "2d025b88b5e5745f4680402aeae0825e0af6b2b05fa98b9bbd04c9559f1c97ae", "15603139b9c56f9609655e0c7346b9678d75bc59f9512c9feb4dba31cf7e1e6b"), ("185b8280659576fa6f9cbfba6b61c9d20683249a18daa173d96e154f2ddbbfa8", "1aaf5e349aff15a68b5edd2da6a08fa45c450188d306e78cab52fbd6ce463b4b", "1a76cc0442b582cd3d2479d449e0b9c40465b34d1675afbb4b56a9981360953f", "087bd5b6e29c281cee89d17a5d6fc5be14b921503017abdc45c7287db140c5fc"), ("08935ee3779dc44a080fa7cb0babacb505058338f3a0a431070fcf3bfdca1668", "064e26224e1d28d0199ffb96de726eb8ab6f5bdb207ffac923b9bb18cdacce83", "2710b97a4c66cdce5dbc52f40f0cfb30a82055e59d39839dc49dce894d5bfccc", "16a06c27106d514e4363a71129c7b583581384561b27c854b3692961ef665ebc"), ("085cf4288aca574e5b1458f96567c7f415da252418108da408e41743cd3a4d08", "20110307b0f3b94bd7feca077173ca8787e128cae7ebd0f3ac94cfe534d20b93", "2ce5d8f185815366e6465628589119f5e72ad88d3ce056602e26817b7b412b16", "19a95447e2fd4af91cb9013b40eff8681abad8ee5342afd4094b705114b49d87"), ("24b078079baadd19eeabe72abfb80ff1e2e102838a84de3ce0cedf366185309a", "03b4ca60fea06186ecd85adb2f4543e1a5c51f7013efb7ba8fb38e3345a31ec5", "0c46c96b39fd015eb270cfb19cc4398468ec103789c0d72deb353764deeb964c", "2354b0b089a06d6a68e573b4880471676e97db05e917e618f558a978b2338fe7"), ("260758e773501e716508e369ddedad56e373e4edcb8ceefb1306bca8134b0967", "144e87dc4b5afc2062546571964d664dd3555e621344faa228239dc638f0337e", "084c40045f0d16b0926f0296ceb79a1c98407c41a1568e280769de1e2b362845", "1e669be9a04fb22d13d695ae59ee6eda5114248bb64e1e996da3b87d471f3dda"), ("23b422e23c14d25c6f05f866eebf8e4697f7d4155e91ed5264cf2882776ec20b", "293645ddb40c7c4b05fce1bf1fe3922ca1270d0234677e4271a25ec5a624da8b", "296937f9343b981d0937ba253004803972184e87d60a576d4eddfd8ba284b975", "1393a12774c4eb5cae11a797bcb7e45eb3a91ae9fa49c9fe0235b54e4edb330b"), ("054eceda0cb3b8d7d75fcbed893712617aa7d225283839fee1af0ea74ea34b14", "2ba527c9ab811994f3e46a720ec9267ae879fa672de0d9ff47193ab0d1b20bbf", "0fb355e12a7c64ba5856e34e6959eb361399fe5be989d432af7d74d9959715ae", "2bc1a2a7481aeceaa5196ff9320e96baff0564b26cb76f94e922fee4a09b8f92"), ("0337b4d5bf6bd3b22c4fd2b2b50449a588daff62c6a6beda6020f97e8c7e5494", "1d7488a33f778ff925dd207eb67502c30893cce08b8a1238cc8b4bca743c4848", "06f2d736e35f9c51d3ec32d9423df8cea336bf9f1e5f3d43f90be71feef6c944", "12b8187e5db2474e52c1a0bdbe563e344cc917086eb9739b44a7699e51233cd1"), ("06f6e6512c9ce34c0fd6f3e2a2c4f0487addbbd274ef478a2b10d10272ccc1bd", "1dcb7a745ab24eb0e5f5710c84c40aaa4ba65a7100e07448c58c64c12eaecb21", "065e230ce020be9d2b4b3161467eb7f87d234f589718cca59614d187ebcbe166", "01d0bf9932d205a28967008bd7792df014f0dff31c58c411d1661531f12a7d4c"), ("2cdea315f498f16a68c0c1e5091e69faeb952611c760f1b49f4cfdf5d54e1cc2", "21013375e36af4675f10463fcd10a8b38959a7eddf6520cf788c22e168344610", "01092c72d1915d658d0b386e82361dd2185d88fc44322dbcb601b92e6d344d60", "0e2b8960b53518a433fc01920acf66b2b49d727168e326aa3bd18ed2b114b95d"), ("1dc2db638816fed63679c3ab95666b944ccc25ddb6dba042dfa7387140e96fc6", "291ca1a080fc09a282b4d5b72acd1082373a84cb03bc60b1adcff13b15879400", "15484b1fbea4b74dcb3de952a84fb5c603f5f1767346f10b0329d0e3dd702ace", "0b34cef5dee7623c1e0d37a7e4855378fcc177f53812acee7fa778ef713dc91e"), ("05f13f06b708780a1fb47aa872e37949cebd4fe34d8c72efcf85b6f89ccc01f1", "058197e040fefdd26f09f60d36a69bb21232593177755c0c020e43b43ca35768", "166116f81d1b68a3cfa25abcd93bf14a8a4369f3ed3f988d8378c6dc9131a616", "14a630886b4d67e515cde2ce05405217926e1a37b97792a6dce73c94cfe8aac7"), ("1d0191b858b2f295969f4413782aadf3dbb085947e2a462021ac01c3929c8ebf", "2723dd18adf4b854bfc789a6426ca15fc24ac5d54db6fd69b036126e1b1b6d88", "14039762ed1eec0b8b64fab4d7104d5673979ef8ad89c00fc349d2fdc7d97a58", "16defb6305e961d38d3438595323d03d3c7b1867e728287e3c1d425223fb1e73"), ("0550290cda5f4f1e1835ef6dc9302fc64cfbaa66375ee59cb92ac939fc9b027f", "1d81d20e9d24eda41aeed1d1efb4903af3fec8d78c09bf52dfc1ab4114621cca", "219eb4de58269b0303ffc7c2504436617e9035b37678370fe9351a132ce108e3", "11f4a134dc00f93f934fa914a8e0330ca379e57ffef1a25c7ab8a840054a0194"), ("2a16aedfd2b113341d871dbc24b4d04edef59b72974bd2f935c16acb94a5c047", "124a1835bce3a4ce0710118174a881102b810c50e1279f0279b9ae9461ff5b4b", "0c82492eee2f75ae99d8e5f2bc164ec15c414409c6e78046e3445a7f1ae904d3", "07fc1e1aed231c32237580e06a3ac6ef8839dafe99973442f1bb7844308821a5"), ("2822c1bfac678f43eadc1f0d2c83a604e39d4cc7d3f79837d74e888c0ae70282", "05b1d3090f6b3c5f01bbc5f2bdfaf8e5a71ca6d9d5ee178eaa5fbc7a8f11cbe8", "06ecda811c2e30624069cad9700abfdc98b64abdfc12cdde053385e3b83dcba7", "106875235981a92ed8bca7d0916e52e8fd3f625a9fc8a2f97f51e688dbc55c08"), ("2a039898798c425115016da42b07b2589394069fb7bee19ecb90626dfe3e3158", "224727e0642e05b0664ee9758efeb7b4a4ffd8acdf824a02e5c0ecc6a4adfaf3", "00fd1e24b389b332c788db379ad152302f7a50775d5c9a7cef93fd56fcb2cbdb", "0fcc074cc99fc1e142cf8a71a4e6ee6c70609c62663ea40f6143a40a9f5e4c9e"), ("052dcd35a85352af924d18ae7274fe4f88eedf9ad159561d0e15e50de779104c", "21205cb9e904b422b0e6ac76cbe49693974eebc3ed40fe998112f0a8295b9e79", "24d3012442ec95a2f35665aad39f1793090bf5751b29048f34f5c974144aafde", "09f51cacdeacaf94854cf9542af4d0c550b379bb558d8e17d6d6bd42df0cd159"), ("29b621936cb8179ff0ac4a8cb168451e67c2e10fc3df121a10588ef4250eb707", "2f06ffb7c852872269cb3b81b862f3be8e217ad37fd613fd4acb8fe696340272", "176f702062682aeead46f6c3743917430b81448ae3a4ff6700d6465b74f815e3", "141f85daeb9fa10fd69a5474718eb8a5e03b769c6733202d5d88998d1574ddc1"), ("152f046a2824cc736bf718e35ec39f53e3549d2b08016e6cb07107510a478efa", "161a0a83aa77e88316e857bd5e46766c82ff92b55f92f516fcf6f862dcd4cad1", "26c5cfeee05a5b4d72182e1420b08614f58241e8d30d99d5cde56cc1cc9d04ce", "25fbdc877898b690957be0f205fa9267e2aab48b344fd94e5107b2ff07c5dabf"), ("0cee7d319fb731943ad1908a1a83208bf5719f7259e2a5a38d4baab33fb8aa06", "1ecaf3b34d4e9300aa73eb3c6ace1e0c4f505259f19255c4fa1a8e7a570acb9d", "08befc8d9786a080631a179696f8e569e39859c19ac9b54ec889712e778751ee", "2b1ec70806ebb7b245f7a76f7d741641828a33998451e29981507b3288bd89a8"), ("265bfe7c01c574d2864fb2c44af9901ab031f347f137bb75408a0d5ba274ab63", "22f11071f0da0c4b66cb2f81a161cfd3428d960741a69c224a75f0467aa6402d", "0dcb60c4c89522a25abf96a1f086ecbb0bd272c155bfcfd2d50633c912027f8d", "1c3f71fc04fac846e765ce1afbfb7ac593245bc0b66490ee6462e9bf29020065"), ("2e2775bed66e74b64ad8cf5a88f5a4aca1e1a83376853818455eca7253b58431", "24012883e8cb2c470e057c64727a1d3c5dacfa07a8df8926d70d474f0e8c78fc", "288fd60fd3116460fe886687bb7951cdae592afe25db880eae8c7ae9da7c20da", "18d579f8f7ed1d1559c07afb61cfc14baeead2c4e3e31bea771fff701af47986"), ("2d68a75f246a70a48c10fd7226b9a206e2e3e88776108f5d58a9bac52d1492bf", "2bdfb22fcdf29bd1d3c0c2b38bbf0a4e8b194c465ece479e11371ee2e6749cde", "0a91660128775ce4affd79d1e7ebf12b1da04e6cffa298db5bdf59d66f8afe54", "2c6fe14b34382a46e2589a131cc7097b4e28335ee40d5d447f4bbbe5a100d8d5"), ("29c2615464e992012ef21d8173ede9b7cb40d5c55e5be5966f66b08497f90c84", "02fa825c4718c1e1b34f9f7fccd580ede93c3ab9a991a4fe6012e5016aa06d4c", "10414c5bf61a0cc6990884907b886e48930df32441f4a4d413e504bf335f6b42", "0096a3b79ea4f198d67dd5466892a929262a89a935506d055984e14528f59bff"), ("0cd1aeba4f4a6742f66295c173aa47de43f3b9741e2a5e434c91771806180ce2", "0be1b12ef768f4809cb21c95397c42d39ffa74c79a45ea4e72fc84e522f1f6af", "1133adc6819dd7a8cd8eb774bd11adeeab0d511ab85f40f5acf21a6e2e1ff6f7", "0cf080a6f7a488b3b0c6ec3b5f83373ad2655aa750d03c4683ab76bf0acfffd3"), ("1401ae618d7ba54bbf2d22513459c41bbae15268e3b49a32393cabecc6cbb894", "0b322f7fea68d7d7ae10e7254ce33c4c516f79fe1b96d5e712922457bd13e351", "2ae41bdfb87fc0a444c970cb3968379da32cf7fb95c0eb3a40ee6cf6388c05a0", "0fa2c83b1de2604280218ccf136bc898b29058b79692806464ebb21bc97a0cc2"), ("1d6f97cc1a193da65e1e989323d42eb91809fc3cfcda54c29bf1a5b0f675267a", "23efbf823bf85ce54c1de10d17446daca5c7919534fe68817225ad48d8ae4790", "1bc8c0026b86951c4a59877bccdc17837565e8590bc2ca5e21c6079643fc3b8d", "161cf18089db5549a5a92b1686fcff52e39c44125652c52cbcb2ab1f92ed9e22"), ("1e2f96525084196bc38de7a01ec6c25b103e5870009c337d975f316c0b3f6d1a", "1a8f5b7e6fe2790c7ef2e6f5ecb57defc07e07f609a7eb9ae3f3e3b902306fa0", "1a58a049148db397028497bed527cc299b0c34d41710a05769df8156ae497089", "2e2b556aaba918afd1194f233d91d8ba5ab07375ed2b7397a43d2753071609cd"), ("10f02ad4739c614a6939909ecb921fab58f0fff2a43c18594b2a8862e1786900", "25aec7c8e37e5efd75235774f4dd6e97aad14708f10d2215fcc17d89d2209529", "0cabffec228092d0e706c6ed7ab403d724ef790df4045338ed0776db71c89285", "064571c380449dfe22aae33f39bb760c27432aa510988189ae03e6acdb5ad901"), ("0918b5d828fb04bc929bc6e49ca493dc3def2c4314bf429a088b112c50693970", "28ebca70a24c1926c426e5c7126450aedf17c850dea02011d82e34866dca2ced", "024c50f159506ff3f74cd93b39a80291105725a1301f2f9f259c67a387c0149b", "0c19245dce5c661a034c71c7be7383980827432a82c06260d2ce62ad0ab2d402"), ("11bb190f397b070f41b65a9555ec754d844dba011a5f3accce366c62f6396da8", "06b5c5817f91329804ea0a1fe6ad80a7fe24f339bb73fa0b55e4f036e53d2ead", "00ddbc7196c5a047388c336c233d6ce345ecee5d182a75777ef44c95e0762cfa", "278c48769fce1e34dce2d0e725e153d5e0c910c9858616e551a93f07e30037fb"), ("2010fcd1c01661313cca3fa9d1f8bd4255e22373a9e3adc3c76a22c772233639", "0bfffb777ecfccfd6e39dc46a3930b8738bc78bb35cf77b27f2a36a5c65101fd", "18067e50fb13ef4d04e980f66b673916b27b2feb661f9b4e7a55d3f83f353cfd", "1a6df9a706390a9e15528d1e920874ce5b2cd7b46837ab9a150985e89764d9e2"), ("26fac2397c1937b652be84dbb267e72fb11e95b50ace6484e2b16ee7debc694b", "1d05c9aaf44cd5c8155ffda4bae2699a283c5ead81c62c0a131f57ab413529f6", "0f4f21cb674b8c29e681214bb7ee18b4977fd4e106619c271010f86d92c5e982", "1c0258a294554c8b7b6c16a9fb83ccb6a300a5d678646cde54ae758bb907e2dd"), ("0c527facef5872956ec5710c81c4664fb2fc1277fda013d49161f08b4365d149", "10c3d1b139a77c1d63c294b6c1f9abeda056f81b1a05f9a59889e66c40ff4337", "22f248f933b7f32c921c3019942bb6a931859b4a11e704cae82aa6f630bc66c2", "2c988edcc3e400ed18dbe97a1f9bc25f60a9df88a5fd37b0d70b726fa01c662e"), ("10142d88beaa105c8eef6ee0430ab4451a6eca78ed82948d6f4eed50c7f1d6dc", "218f14064ba4ef5c60ff88b4231863788383d634c5fae3a53d493d02a5cd7086", "01f418b3071acdfdba3fd377922b05ce4d9da38d32178492d16233b4cf2857fa", "1bc01507efd074927931cd280caf5032d12b9fc2e7fc34670007aca87181806a"), ("07e6e86f40589034b14830b10b6f9da84d8a897ff5e76c9f36954d23fc7c47a2", "1cc8f248d28afff77a9195a62583c5eb1c6e0971fcac8823c0b606b8ede043b8", "01eb42bd7105e80389c20e2ccd868948d5af8f1e775c9851737a06f41c1e6e3f", "0ee4fa0486b7cd42bd94fffec9e4b693ba8c15737b3667b418ef3b98f0cccb51"), ("2a3315b2af25ece2c59e05af80709705ab42d7dfa7f11b8ed52155ba1ba4241e", "0a70d539c0af7e85cbc5b1f14370cc618d73e7034435c14ed757ec9ecade0540", "029b49067f1ab00eb72e779186dca1d923bb0f89d9375192ba943fe3c3c92b6b", "08ddd907cafe90d48ebb2d3f72a7ea14851aeeb046100e24b857ec59b2b32265"), ("08d6a7765640b222c749858b83ada06a2891df41e62c5f3e5a1764f9c02bcbfb", "004bcec3cfbf4bc628e7856dd743b64464e361f7a0a796da995ac3fdf8c8d2b8", "1668a530b8ce58488607a41ddcde4447c05a93a303cfb27f5b0f0a47a8395fd4", "141767ffa6a203c5d2c50d3eb2ffa293f88ad45f3725bf16c3237cefa8f0eca0"), ("2f57692561fedbaa597e3e0c73ee5cd0d8654fcd21dbb2194a72c3714d9e8fc7", "13bf80cbacec893c0257f84a2ac8de5a6ad5ab34298460e66f813a5f140c9c93", "25bc070c6c312d1c7255dff0e454d116a58b7515ee6c2077935d869258b5b615", "200a7c2551e1cb504d8f66081c27099a10ea21d548de749fa31d05e42d9fa672"), ("0ccbd607ecc0aa2241813c7476312d182212ae1d5e33785c7fb037067c671477", "1f15676f03aa12f5d08049a87e062a626100a05b01755f6415107501e67d3528", "186dd6c6658ece9044e6e06fd0678f31babd06acee9ea839dd6536821750ba9e", "006e69e0de58fc300472f1698c51b4fdebc82f270c926b22153db871e6bfa8b8"), ("07cdb7aac4b28113d5b6511586b508c0d8ca316ab93da841f65256f22cedf5fb", "17fde2806f12c2652fdc715e293777caa56aa8408083aaadc4e9f62b0d142888", "1fcc035e0ff1964ac01a12806b4f3282f0beb2a61716e0e22a510fb7d9716cf4", "0b6c0711cc99bdfaf0cb9b24b471111daccac426973563df4461919fb5862f2d"), ("1335c9258c05d82ff45946d8152f2a8c79eb4aa7c5138b14fdfbedd799634476", "27a121ff665e66c7dbb2c5ff78d01ba94bea7e55b9b43dccaaa64175e5a467d4", "0a6a2f7b9b12bf008c51e37dcf174b6b4165f833046800b6796629df208c078a", "0c6d22a01fed2902494887efcd64641c5f27840f8bb22b76fb56c8bba65e7882"), ("1f0c505d673ff635d213503afee85963bc78943c69da513c1f236a179360b5de", "113fbc37008bab1aea34698efc7ebeef869ab54905a47c823c85fed288fc3b95", "1159109197b8c94b84f184c276c06c8efc9a3cddf28b0fcef5a9538c92d705d6", "2013417021f959cdef667f4084a2fd3bad3de590ca6fd180b65db98b9833605f"), ("06ff0e42e8ce8a9a3d2527b8886d5c2f957c0be49658c366bc3b41bb19d7a819", "04891e1c12bf4db8776fcc99a4b6aee505655deba4faea5418f75fac47769ddf", "1e2a6b31bd7a770237ea4871463e14c291d527bb4495c0463cfed5d8e678e3a4", "305e3a3df151f3c174efd7957a4b0dc9e883b4865f036e5d14f7c1d356faeb61"), ("07d5551f36cc30697716fe8bcf40eeeaad694fdc303cc800225a531d9d128ece", "2e583bd3a001ec26c6f82a170ff81c47c7164f929089cb5447b701691e62c1ca", "1824df5208c6649aef875dacdcf0b6dc87f66ebbf72adea13ea02de2b9e7e700", "102798c728e2807dde7c27de27b75df5f5e7e49345f7608c2cbcae537cf263fa"), ("2713c1e62d0d8a8db7136cb166e8270fdb4fef6b0c4ddacaf348c391d6ec63c6", "0258703a42be7cae58ad1265248233bd3b34e631832273a82f56e4de5df35ed1", "1863480c817008e974d6c430cca3284768277062e8d5747d28f77273b3a451f0", "2b5c989c94bc190e6c841128e8606309b7da3e71b35964ef7d9267627aecd96d"), ("01f35a973cddc5fe60186517264b699e2dad6289637f1004f59201016c92a895", "1c7188cb327f1c18d7930623bf6a617400d2c71a895dd5bbb2273a578c4a1b35", "154e98d7cb2feeb826ad0b8ab0bf20ef75b79657f0a14ca06f255c6651565915", "05a9a94c8a26eec29875e094a14175fd689b6c72c75974b3dc68c451ed8d4687"), ("05c781de4c54ae68ed6edaf38886bf781ca81ff548f3a737ca4dd8cdf15db2ee", "01a57e2d03281bfc603212793f0e0b959f6261e3ae6e70a79bbf5f9cf653a65f", "20d61e3ecd76683ce1f25d4893c6c8fdfa55ae5015cdf3c745ac2b31309e0b01", "1ab62c6ba4368bf3408652755bb1eeca39aabcdf9372cf503d116705cb939fea"), ("06308c290afd18f0161e08492751d809618dfbb161fb0eb4a5006d5f6fcc201d", "08ecbe29f77e109b284426f7d05643a7ffad1577ef4eee3e873c9ea7261b9818", "14febf2a83a934a3d53771f245bf52045009ef2b5696df4ef91aec8fbad60123", "252ca41b5e051de1a3dec9af920599c54906ffa859bde66398ac1f582931017d"), ("05e9f871505bcecf945507894427c88f1e7e8327eafdfd18f66e0c3bbd355d4f", "0a37d1d619ace14b285ac0d3edfefe30456e2f2d1379554945cfc12499626804", "30227bd300d07e21a463038bc56b977768fa4405b9e64de7bab1565d54955bcd", "146a41fa5574c5531bc1adc59ff6c7269e57a8111c9f83fa9f29ee983fe8e40f"), ("27a87b89d9601123a0fbf0e823dce720ffe61038c53c45e64e8adc2326add206", "1abe2ce517b316e94e0c15b8be62099cc1d4ac8fc9a51d3531466b176ecef053", "0a5413f618f6d6d114cef292b8b204c4b38d5e3a6f4d1f77cd825454f0ec7aaa", "28515a906411f8df8556dea4625e9ffafe37c1386afac1672aa00bbc5ac68185"), ("2a7891f3126e9a0bb33cd20d9edefb9e8dab79292d8f598f804aecc936618887", "2e1007be7649ab309b4392f3ff85d0e1c276b8c87c7f3e215cceae4ed0d38666", "016e662d9b08a394f41d000866c3abc7beb11b83b6488f3e91276832d773dacf", "300c73b126e89ff34b733fb55e266e2c774391de981b31dcd85bf0ba802cea0b"), ("229bbc601bb27fe22dd4900fa5373ad75594030b41b5adef3108b942a9a67725", "2f2e843b27a448dee2017abb50de648cc2a6cb01b7907db11ca689200976045e", "19be1405aee1d67670916e205f839b5cefacf4591b43df983bf6622681b56b26", "017d3a0b1a5500fd333227ad30ab144d079d705729a28cad49b23e1db8f0c04f"), ("1adfa5faf055a40780363526d21dfa280c0dce79b07c34cbefdf83abeea574b4", "057aba117772b65744fb208518b16eed1df806a85168d041c3b168f870ff2a6b", "19c91bb6a8e1c0463992575937ca27f08af1e14c1cc9d075e243ee21f18d1498", "16d33b2fe4533cb91244f2960bf08930d73a4ca18b045463c338c127924cba95"), ("02d345da771062e841282c1f1982315b73f2827025f77feaf1cf53a5c9686064", "248c0de54438ef4e6462322ee209284398687f3115bcf451ffc0b423e826c616", "060a9c4e50effc9b65b96a7bd1829114692ba6182f4e6f3ef1fcc2e242a3fbfc", "2bc83236b47ef16353128752d0bf7fe1210a25ac51b2c720bf9cc8f5cf40d667"), ("113528d78ecfca4bf5cd4cf0cb9cafd97bfd879b0f07dc89dc06371de4b60ab0", "0ff701cda337d1511e7a7d4bb723104701fd301182a9d6e2f35ba67f470fa839", "14c46767f31101e3957e2ada1294d8ef99d3035325177dc2e090dc9fa6c347b0", "238d439639a70b270e7c376a8b236ed6337dbc14f31feb91cdd1949f05321434"), ("2edec728ecfcef40a0798783b4fedd017ba43b5f45164752eb9e5c09aadd03d8", "0638501dd6aa1febdaf9cfc61e7f772749dda3dfdbb1e3c97cdf799ea6139fc7", "12fb7ba059b222637ff6560befce6987a7382098057de055e865c54b6d93671b", "2d9d6e42cb1e4915c782a3bc5b5486ada1a949348725bf37c211f3e40064f825"), ("2d2f2573328d790f24a76917cae76aa8cc653f86a1fccc09f37ba0cd67ac0784", "0af2c5a50d4e15aac114f8306afaf3960913785c43e97e84a454ea9777e039bc", "23a26c7631521a07e081d1ddc0b707aa111273728faec17e40fa2f2d7845e0b8", "07d355766ad03814690d4e73c5d53465eee422c4ca31aaefc243d68ad720266d"), ("2763afb78f25a90a4171b6f87198b3f7a3261a99cf214fc7b0e42cba74183b56", "06757ca36f83069dacc0f1330c140402ca61f39cd66a15b7cb3263c4af4815c9", "1f3da100e6fc1dc188f3ceaaab46556fd4bb7555e79e15644384d93dcd0dc019", "2b1c76d2a337479654d9fdb463838aef92cdfc34ee630fd4bc3bf09110357c35"), ("200a421314564369769c3f339d2c2f76b8b007e4703e016d8ab9a01944cc1276", "10bbde57b79def1cc10ba888f0485bcd6e84673d538517cf365ef8fa61d94226", "0c92c8c50ba3c0e5ea15944bd9b0c87036a3ebd7ae3cf9fa0d41b7b4561c5421", "11a5fea6926cfe0f264fe460529e23b23837b1485084b0a45dc239895dcf0708"), ("200d84bc867bae56844629158f3f49fb2b1e6c5ad3c93276cccb7f5af8d5a3ea", "1c72c2f1fed3c54e2cecec4f59ba62b98eacfe7dc0ecdc186dde94c76476a23e", "1904a7370592ee1928fa5c4849ddde3b76b6cf63670754388160febc6abf77f5", "2ba1f30dadd891ce7f7f1dd8b4461e0f41673bcbcc2b4b14f2a42e02b7bbab8c"), ("04dfb097d55d06d123c9db65a634fbf6d0d72b4e5a5e9737a7de586a6693e11b", "2bf5a80ee55a4c7d197a59503544a2cb13c54ece138f944747c235f3362799e9", "0688ffeccb8a329e169b7342ea43f891b472eeab6e1d03e46533dea39339d283", "1ece27c58cd3e8e535859a8d45f448cc8a382c58cd7885f6442830b691c9f3b6"), ("241a57bcb7e82205be30f54fd085aa82d7c91ce65626943a01ca024400e41adf", "02f76b9168e8246157a1e5355190d8f06ebb97d478ba073bd3758a45a3f72219", "235c862ec563315179b4b39ba0601a9382176b43c13159d6a38eaa67658f35ff", "2f89a2d30a50f339f4b3d45a4e2ae810fc25354fa95b4be48e9a1425e40a19f8"), ("1e2b0c449c2b3fa0cd90a7284a1db1ced23af7fae1da02ea4c8a42e1a5d1c88f", "00ca6a6aad02593567ff3d763ef9b997199372d7715c1ccdb8f8c781947bab33", "1522a5f176e15e99da3c74197f850f6fe259a714f0bddc0db56dd22f2c889461", "0292b4428e0c6cb53705d0f73cb848e4de737f1cfffa3b05a2de0b53e3ab3f52"), ("2a4366e772918a9b0b7fd194eef04beb02f100f4b84e06a412aa9a1967d95c13", "0c8cc3cc588a07d6912343cbc31ba49f416b8a9f02e9d308040508310de5d5a7", "22045df19fda6623be7f0d0ab60e3429fe5d4793a492a3f0f256164232b47d01", "06d361c935341374fd4d143e4d68b341b4402aefa84884f068e5e887105bf8d3"), ("2c15205fa61a90b0b305e460d9ee6d2cdc344f677052678aa050c8cc1cc6b7a9", "0907be70a920cbc75861f909a5df9dd1bdd6c138e301a5bbe317513ccf7c2ab1", "0a116e580f18b345e35db8073e33d61bc0828c14aa03495e59fa4811628433b5", "00ed9a37a2503c0310e8a09eb7abb040066515a79ac9442962734f710c734800"), ("1a9b7ad4054401e43120183cb99bce616c5eb801b38dfc5987c09056aa1be609", "0e26e40aee606dca22322bfbce155c154f3ec3d8d1430ee6b16ebe40a47389e9", "28cdc48318e3a610060632598d26dae5bc9586ed0307ceda690b6987b54792e0", "0266367ef5d2eeb196e356a3f4a375e0aefa763608c08e5e869d135977987287"), ("1a46a2a9ee618f663ad2b746ffeff6e890aead400101296d0dfb4a9819ea583a", "2b0c26c461653599da22c38e6a6441e421ed18114496697a61aab6a993895108", "227a56625450bc095b982cac343b339417d7dad727f1ba235dee3ead71a2b0c0", "1b772893e7f5b347d6d9d72f0e6b8a10ab1e0cb52df093c56a73b053b006fcca"), ("16e433ff33c80652eeb2849e4a6bd7a746fa17f05bdf1b923c34d5bfb3402a2d", "085b859ee080f7e7372e0d9b15f4a018e597bdcb5fd4d8dd21a95f1adae4324d", "1f094688762bd3ac84bf7bdf4a34976535c6c9bd6603a10674bc6ea815d4104b", "12d26a9d936c26f0efca18e66cfffe83c68badf5758cb894a6dba5a607bce6cf"), ("2c70af206738da2b391aeb6c7f624ab2c8f2d554572a251ceb0db2836f1e1deb", "123a1068fc9a91577f6ca1838950b6166ee37defb82d783544411e3494417782", "239ae970c81dd53294e585d833825438b3656209e65de2f316d2a70ffa79208d", "2eaf5fd06d1cff7048bed16202d70392489e6de0d32b0262276fd9a470ad92ba"), ("219353c1833a36ad983f34c20fdddb9dcdac0af04daa51bc2bb616585fae4181", "0538f08351b9fef444b22f7f31dac9918f3e21651b49538f26d40288549fb624", "00d2c0c2fa272ec19a02ea432f92aba96dad6b833445f00d46650d337f80991a", "1523e37f8eb219635a189996186a3bcedf1747ae8a5f55b6eb92ec286df87486"), ("07e7d811fa59383b1b0e4a125ec45ffa4e9a55b84acf9b2559af53693ba99bc9", "28cd763af3436802552b0603a63733448e2c818d06d5432e5438d3eb80e7435e", "1e5aca0693ced6f9ea4eaa80b51ac53f1d62d239d66589d8a933bd46213a85fb", "1db7ffed038ff1c06e90658d860c285a97b9a534118c920721e7fa9170a19d3d"), ("0753272d961798d339819db8a715838ed818eda27670621ce6533e6393ed615f", "01166d0da197571ae3c28618cd3c3ca49c75b425e9577012203cc3f602c58f64", "13a4f61e557dcf566e24582e340fde9c9d98a6fe05d43197173c8ab70552949f", "0173d10de1a64d0a3dbff110611d6d2f71fc5937992d8b8cb39639507dc5f3c0"), ("1264e737b74053c7cf76c53a5c2817b9d04456f15be67662f3453a38cff0ffb6", "14152ede1954447872bc423b34fe12dd0a5e76c240cc0d6841e97fdff7b8d100", "1a4c8e3abeb8c1391bf93e8e3d246fc9599bbb2f4b40014408d7b28de71a9354", "15d7072539b96c9733d118c4664f8481e0d1927e132b5eda9bdd096614f505c7"), ("1c2d34843d52e8730dc9bc7980430b813670e508bcc30556e07929a72b2a382d", "2b7ed920cb976d472883fb9cfb2b3126229b60522f9335fdc465cf55ff3a00e1", "00c3f28ae0e3dd6918ef025b0d94b6a374bb43f7a6557e5b3194bd3ac61ff70b", "27af633a10fd41e8da17591d76fdc3ffcf326e8e2cd495ed6cd4a0ac6732b8bc"), ("0d18e4a6e254a5d8a18bb39e453516d779bacc227ba32f5e6551691b93f30962", "2d94601b093d0dbbbdd9ff26f82ce48798571d246fa0aee6eeadb0415c343ba6", "077c6d9590a957a384ccfc0454387d1f0e057b11b0935e14b2db0970460a0eec", "04e99db3a6b225c70c20d145aa0b273ab23f964e02e0d79ce7cab3025b2440dc"), ("25dd1e2f3e24911c3b84215352431165376ec8e6f9e1b8e2f734ddd45a4799cf", "027b749b5a0442cdd904a3ab093d74e2b53a4ad4a22ba510d74d253d4214976b", "2530fb71251cda36993157834524045e7b020522a2ffbe4e49dcedb5a878a3f0", "0d2ada4104126ccc22f8b3b4517a560bcaa700bd0d0fc9fbe6224d027c1aebaf"), ("2077eef98c6cb15bf1f591cf01cf76dfb6d2133d04fb5850dc959936e75bc4c7", "167493e4d611b0c612c3510c71b83a66ba3cfbd755eed081ee921c6add071d27", "2cf5ce82f39a4cbad36ee9578f73926c5f009440e8b449c257b437259ee17a76", "24bb180bc0ede155b1bf0175106dd01d5eb21d782d12edc78a07275499d92187"), ("03f8d19df90bbca7ecfff651914d0a3778c5bf83b289005de25618179d318d15", "02322731be72ca1947473b7063edc0aac9319650a4b6811710326a0deb1a9fd9", "1a6b8cec338135141462d40a60f2e8b0665e6fe71e5af90954c515bd595bd152", "1a8f75482e5a59581b75de5b33aa48c3e16cee79a135e7a4c202326a4a0e3023"), ("2ffb00521744f5d106a591c92859cecae903a157e6dae6f1e93488eba0925398", "2435b1c1b364f2af52865cab4e34fb34068d73f3f656887a04ca6e6e52cbad01", "2200dfc82206269f0ce672011a284a08e9a5945c81611ca8a047f8394576bb33", "2099ea08ba1e38e834954ce929bc9461cda2261e64808b55e692e2ca43aa3dd5"), ("281e77db1df93697d84a01766fdea9ea4c2465537236c5b41c75226d20d0333f", "163f66e957ec4b965a0df467a7725a2b3231399dfecbd8afbc5d02973f6971c0", "1324e64b6c58c6680a9900ec8f63260189efff92a2a2bb2dd257abb06b066a84", "26a7b1a23a9526fd1f7e016cc7b929bb3f3bf1248d7dbc709d1189c9b58074a2"), ("0b60871cfc4c66fe4aacc4fdd338505ad89f0ae788468843d7c50c1134d02565", "2c8d33b66cb8475d69295b05609ec9f1a35c6bc81826d776bed63ecc3dedb711", "15df621a968ed134e4118f83e56950a5d661d8d43bbc73e6813d8f5e786f6ef5", "08db7479ba349efa6b85969038392dc5c20b09a0b0008686827922fb32a07c65"), ("0a553937cac5afe7b67dc830f4a176ae5fd124d9db2cc60f6fc939f45a482e9e", "1c3fad4bc11f8a9871572c67c2c2957355a3d4cce43080aa6d1147a40da89af4", "2e88d84ebe679634105829bcbfe0385a269f27821b3449fcb50cc4362f09c3d1", "182ca17d4866a5fb6e1f5437ca0e7ed0964e6c7af3b9a1220b4d31c69757e2f7"), ("2d3c2a7ee876bc410e85273f721135ebd7f72756f4c597cd96e9c1bb7fc8b1bb", "050e5c18e3349e94653e1b8b4c109f50dd15399214eefc7b9134ed5f7076a36f", "15e0d9943d68442e063dda69b418cd49ec517585a0ae504543f98c62f66f37e1", "122aa4c8139bb1bda8d3684efd96b670836fb64d3bad1e4847359d76e47db970"), ("17721a771fb48a4b11e04793e923dc39d50c10172aabeee205108d797d04d242", "251fb82ee988a4d5b1be75517bdfc57c1f9014b8b3acf12e965c5584c332210b", "08126ae05a656578d2c9ae4327fe599eb4e908a38a7dc2a36970889bcdea4313", "0827faf59e741a542a64cde4235de53771c9a8ea40be688b7d363c30c80723cf"), ("024d2ef286c392ff4b399aac2d388be828b4049579965ee26ee8346b14964312", "1504fe57ea489528c62b34b26d96dd2d02773a77b9449b61dfcc680321d2642a", "0556c573da53e96b24f56b4f8feaa7689fed2e8c3edff40387a77363b82b6c8a", "29559bb9e53dff4ae844c3049f25fcb3e958f75195ec3771563695ba1c333599"), ("1c62d2792b1f6865ecc22ccd6c6402f3f7b9159ccb82be672bfc846adc10fa3c", "0c2cf7b524a23adc5502c235054a45849757c66fb31d282439b3384aea2216c2", "172eebee9095a007cc729349414644f60ccfe10b51a99dcd333a982d211ae24e", "28a7a2511b1f348909be80d48c938b7d117a20122748f7fb950d61cf2616cf37"), ("289f620b4a54056ae9ccbcf369046f3231fc26b61c053cf428a7450985d2f5e1", "0cbfaf62b0aa1fd433bbe8851330147b6fb088ed54504235ea2490a9226968dc", "18300725db3dcd8111182b1f82bf3e96b01bf36d36bf935527bc50e03e7ac236", "1634ef36d6b7713212e7bbdd384fdfbb2556daa62ca57a9519e68d49a4c5b064"), ("291dce10feb350bd9ad8be66ded269c988d75d747dea580356c81463cf779902", "263ad07e50d1b5709f9022445d802b13ab06559b1999a828523e492af2fe2e3d", "1996b568ae59f5baa786b06025e5f3bad525069606f3858d9569a4ca8862d271", "19e0f2e569baa17ddd6cac9f44e436df7c5d02e73a1e3425294573ae38264c9f"), ("30169f099b4e2b53a4315779831285359ef314fb782fc98f78b5bdc8f126a67e", "003f5d78a0a7d0d6f52d10e2099390c7aeefafaddc2734a94e0313e8d7cd0799", "0ae4c152c404c696e9ad702181a2e169784aa8766d9ee57082ac00e299bed798", "028a7b8a6299cb226db92cf324ca3e95b998d328d22fb48608a8fdde96a08d89"), ("03324cd35887e6f0d76391cea94815f63825624a4ae90402eff07ba1d94f71e3", "22b4012e5b47f183287d317cc4adc6770fd0b817fd102c10119d6becd4b2877b", "2733295a6d6faab9cd39b950138ff2566bcf17939f929fa3783b123a19962b94", "15c73a2509226cd562e2f46185636de36aebd0c19b807374eae87a1a3d1611b9"), ("012840e7a1c13b5f350afd9c83cb886dae44bc216102a1769e12d31c11052773", "12d036a343856765984cd34f0857ddaf601354b290d13ca59beb80279817d4e6", "1831f67e38abfc0b69179ade8afecda4459f2ac0de73a0fb5c508e7a89406e40", "129f2d549b42abf79b298f213a8fb51eae8df3ba55180337dc248c2e2dbfb611"), ("03716e749452d40656a579c144b0b8109c4048c921ddf7fc78ae4076d82830ae", "0b310201d18e60dcbcbdd9190c117c2bfff8d2ff0d96e9d8dd91fe07a9327e07", "1fc5130a027de05c4f647551fa5a21551aa61fe96a7f49181bba53a44c91b772", "2fe5f5202533451c03af912a64b2b4db8ec60765dbcbca0eb2b41a101eb3a655"), ("1d316d2628ba8cd03f03ef0416484c78909070bbb22787077a94a697dbc7d891", "29c14ca751a21841cc29ffa25dadd7d7c4a14c0c6f0f6650896a5124e08f403c", "13d84ec37a381638508f0c4d29765ff154282de39d29693b7ae42678b9c59171", "24f1b62c8c6c1257d4018b53999444c16dc7d304e0ad31d2be34157955d11d50"), ("1b7f6a300f0d68086fa9a4c7e39a5c1c29fd633029161f079b793f7e91131aad", "0ce29309a139aa847ffbba8aa2b928eccba8b14c0dc19ec986e3f0b45d5e2f69", "2bac5a4924ee83c11a67ccbd7aa4f6d97b09fc258b9093bed54ca2a68f249e82", "26d22bf2faf67a730c9322d313dc833287a8627a9eb72dba1de20c45d2a1c484"), ("16a17634fcfacbc7dd88ffccf0ba5d564c50a5e4f86156e1a68db575d297d0b0", "0ba7bb110644baaa06db2d8c5f1ee9169afeb3115c466d7fad3109dcac18b456", "16d61b4bbc42a76c02b694e8dba08326764fa3c2963a0f3633fe576d0bc042ae", "0832174b11df1da9716fab8f85c231847bcb505ac37074bb2a78f29d4eb9e80f"), ("16d08d2f6d6a4083c80a3e3b27d169aa4eec6d6f2112acecb52532d90bc9c83f", "2d5e647456f1f0560cdc14363d2c36a97c5f496d0cf46357c945e06510b94aa4", "0b9dd8721cb243065feb02bc61e98bb20bb9f74d509c2fbe4b85751880e12f46", "03137525986d47059633edb0f6f057fbe08c918c7ff5c505fc4ca0aea6be818c"), ("2db893c38880a507327238bf852d816a2aa0a96b3ec292467dbe096a7313abcb", "0049e9d4b5b0790e879feb477efe018880760ed17233d771378e678401a04ab6", "15f5477a04d17028cbe197d39284d535c513515d19407543e6a0412242ad57ef", "26c4c05cc7f94be0a47c54dfc5853501704fcee67b00f99507d9b3050ea23ca7"), ("2eef2451d737b4999c763a839eee3f4fa9b5093dc2f597e84e3535530934f2e0", "2a7fa352610306394f43a2b5aae61ebd52c6c14eb3d36a3f58f53ebcd7ba8f75", "0a02e40dcd0088e9b40a71cd9942d16a79daec9f01f8e413806b9428f6c7e55f", "1bf2e4fee24371f87ef5a6f16ae172dcffa7fb5b1e5e6f5b84329afa807daebd"), ("1678577882228da091a3ca53c386cc9efb62038dc544975337f19c6f30762c3a", "12cd551c8cd6acf0b4880bb6afcbfa3ede02a766de7e613440add277b5c901b3", "2ba5319ec3a0e91f3cc8166ba354f16cff5ea8be476f55841de915cf17900043", "2b588120ccc9d54ad1aa3031d8d712728b490edd9ce1810c65970dc471499cde"), ("0e31275c7c7dd933d462373f339af23143b746db9a96899d44aed562a90b1902", "03d0c1f49e7a40f179255d438a6b5044d4b711afae4ec7d93a3b7d29af89daea", "2c634c99c1481c08e7271b3f3fbf512ccca91f421e2317a73ac1898713174b05", "2e9bd8d28712f958c7cec1c62e9b88efc17fcd9a770b7dd40ba9cec6c505fad5"), ("1e8ff725b4402345b1798b8832299d84621241939329324eb48ad94d0eafa6c0", "004c2703dc35307786294e723740d09e9a1932ebb9a3992b6166f9a6e3e722b4", "067935f8370926184e4d7d384a7de8abeb6168ba412ac777300aa049fd1e3162", "1e500a2daee34a4b8335d424fd4f9fa1c1fdeb8e71053134c66db12d44645aee"), ("1f34e440c2dd5990cc8cf958e3d850ee3d812232e06a12a3eeb854f77a4b7f8a", "0281b4ecf5e148bb4f8d3f3b90cdf3199f844fdafb7dea082dd8e4a0e4c26902", "1ebc22d1b18167be85a59b0d46f23f8b231cc3c5d59fea5e49d87f041b838f46", "0c9a99ebbaa0ce3e17912bf70bfd635e2ab38b4aceb5bb2c2b540223bab88ea3"), ("0b5d3bd55d728dac6e4f01cf5e8c922a9ea2a89e6195ad2b42f17acc1bf076e5", "2910a168a98f572105855c01153217ca37221a37a6d5cc2ded33869aeacd4d75", "2edc68cca03eeb975f766aaf3ef41541982fb1898b06040d38e361d30d38cd23", "1804e00f4e24ae723a9888b8dc00987f184e3c7bc509d25a6049a46347608faa"), ("065f238d68f9e453d65e766a657cdb0debc80888ea2742c1fb154833524e3568", "2e3daa87bd6bc30a80bcc5d252ee5b6bc075bd376ed568aa9f9cf85fd3c60379", "14d58b626b33a3c011a01f2686fce7a3d17ecb0374ff44a6dcfe33060209ab18", "15e57d7ea82008213b9a3c06a3fe4a1cb9c636ad6ae33cf43e4254cb398aea52"), ("21193aff7eb1dedb915fd2ee495e87272f121871c0fb34526788539a3cafa7f3", "2b02a6d084dde083f64cf2d61287bd8425a48f555b4acfc7c79dccf5ee0cc185", "29a7dc9a25f3caa01ebf9c5a4f9a5f4321b42a9d84ebd61d147ac2304dc58564", "081cf4930c62aed474dcafd726a5d4bc2e764ff1937bdef3b50f3c07d101d473"), ("22e56b453b854cbc2f6a8a1de25cc204b2e9b998a1c38604e1cb68b06caabf27", "171f385a89dc9cb70412abae94f032340e089dfd974fdf39f031f1365bb3ba32", "05cd474a37eeabdc3b83305139511281af865f39868aad98e24217482c3e547b", "05673c1c95c36b34d7fb3dd31af75b99b74adc20f14fdbb572830c026c0dd0d8"), ("04f944f43548948dedfd31374d8b5aebbe6af2b7bb9735953d340347e13b31d3", "286b95d6c054f45249454c31744613b82942cd896afe5ac9211c40de536ee6f0", "04eef8dd965a07f8e1ef6f54751596bfefa2bf33447da3b8a39f64db4727c348", "2f6ca52bf8135bb5a246119526813bd6778056bf0a4f982a62a422defa04301d"), ("2c8d935e2a5d8aa252f38565013fcc7c28e52cfd60af62a9c25f0b4f0ecb821a", "2758ee918255471be8bd2f095e5d5e42d94c7178dd574e32e983628c55d6c5f2", "0a5de27b520879bd889eee397fdce4dc82acf926301048aedc147fcde01e48b3", "22ae59908f3bb6714637ffbd8b8800fed82982bb6fac271b1f44121f6ea45b83"), ("2375024e2fb1e934c83ee703ade5621a8cb1cc9d9e9d3231bab56a67538c181c", "0e0fe85fdf8f97f73cbda7fcb1fb2f80ad726af77fd6b3a36925f52d6c21cb9a", "2bdc62d68771cc4040ce741e3d6ca271b173965adc931d5efb2504cb3e7a8b33", "004e5f6bdddba54fb5b331dd59098006fa968184841953a71ba8219174f63ddc"), ("261aa9921c6b7013a3c5470a785ac1570bf66963734c9debf04a22833d7dc175", "2c11c926aba85875d398f3c80e5f90103b7dd5d99e8aedbb8132ea4f19740b51", "16d627148837c4d3a196a7d2637d250973bd4f1cdf682c8140dd78472303a9e5", "145815e22adae4a14e84f437752b796f78f5d8f1418c9ffc257118d6fe4b5722"), ("2a88c343fc9d7ad7e2ab86451a406c06aa27da67e06a2beb61bb3a42fc874449", "281cd5245f0a1b87ac03dbaf16563a4e369fccad60333a071ca07fc44bcc61de", "0a188fe7392d449f05c4629b089eb92ade8fb213a509f1c1963f6b8c7a794f79", "26f2343e9ecaf2a87ed46d087a8517d5c67bf36164cf98688ef987d3f065e798"), ("122d1dee4b5cae2da923a298f960170bdfc2e0a3b7ac6a70357e9f783b51c260", "2dee365333a1f3b2026a27988d41353b9183ac6974f92ca534f701d5ce14ff0c", "15b77e0f24fe0833a7c5d8f6d4304146956ced48e30960f8ed8495c989b73f48", "25537f27c2303c17bfa2bc8f5d32dd64880fa670e0da6601cd1b2ef329092da5"), ("2e974b20a316fd0ad3765878916be0263823edc337ff65be64af0f26bf6c9fa5", "1777aff3aec5f55b34d2000045235a935341d68f7988d8620a4e6cff335ddc3d", "1be0607fe8ba2e2ede8a4287e10cf277269c11a2a00713323f2803513fddde3e", "2892db6bf2df7b8e3cdfb78eb6a83f5e5a470094b6b990c20dcf3511ca3978d7"), ("20526c5d5ce3fcb28b6068ce2af64395e4a9e49aeebe7fe45175c5d6feda4df1", "1ce23693541e273d55f62e0a3243f09bf87f69f58fb4ff704dc3d3a6a30cb8cf", "2f01d73f21d777628a7533a79585317a84bf1201bd37e2a52b38b5677c3c1918", "210fde33880ac0d46141e5ba1d85ba19546819e539b3a60ba1a873a41888fd4f"), ("09a6e7514209eec505d4926d4c8b140c74c827e837e4467b7d8a3c7ec650da48", "29c14e596f48f9135e8686334d4dc24350871373923ed9b0c4ce9e69ebda49ad", "19feaa0658de95c006b49b9446084a447698a5d2a25aaa93cfeb992308a62206", "0fde078609c15052d30876ad63efc629b37febb949f68106f876ab164485d7ff"), ("0e6c337ba396928b81ccdea80db849141bab4f52f37a3746b884653e107c39eb", "26d35d64ea7ecf26f22ecd8fa65b9f208bfed5737d2a29b6fa75c5c5793379a8", "157a25064d0a14e972105f9df82589ab9552b00cf8669177d775149fc83bf2be", "1464f9f2e04ca5df89cd451e3a04ae666216f29d67482e5f11b1efddd35a54ff"), ("1d8555aef0bffdfb4a45fc3ac0cea8729f3e33f2a4cef68bf42e8529c177b773", "0bde4f7ae1a096d8482db3df1852574d4da10e101407068b9e6e4f65c597253c", "0c73516a776aed7f0865acd76363b2b546e7e7da4323fab18b5a16b8654b3038", "1957c5df6f96f6c7be8ecebde23df1d5d423d1bea84faceb37afe9185172e442"), ("12fbe791a5dbb36dd4ca71e19cc7f65bee2b673fbd4c4af399df5ddf4e591cca", "14dadc89d9a35cafb74809a33b2f5bdec47204477f31740fb5c8685f3a358ba8", "1cfba0439fc2f74569df5ec19f3fde3f054cf605aae0514ff07d0f28e12b8d3d", "1c7f8e265d9826983d7587d4372e5f41e6f535ca98b5997683aa8d1cd7c5e80f"), ("1fe85ec43345ce181a8c1baad2a0d6b4580c8ddd149e9fa65d36877e386f7071", "14d228f0266f9df5e97f2d2c80bacd6ed5b2b80a7a8168b56474f969a89a856e", "235f2e6b89f8e9afbf3e3b7019b02629f922f6351fbef61ca08fe7356d179191", "03fc57bc7aa4989cddd980b647222ea454559f39540ca0165bc1a4d5b9fefd38"), ("0897f684330e1bf85b335f19697a149f7f93d7c470798fc7235a6b3816983bd2", "203980ee57bd9ed6de04ac229ae9f6577e774b17986c862dfe54063af7a7bf7c", "2ad8588268be0bc8fb805a872eb0d238661457b07169b020e1d97cc0af73023b", "0ef810049b7587cae5fba842cea7dc780f86fb4d29ab4e1f24f4ef5426d3a229"), ("0643e8aea2b119792eb5a777fa841311cfb706e1043df5b80fa159a81356be01", "0e6c5c6dcd189c36c3dbe600bbebd6737831bb055879db553ed0031de752318c", "1a2212a1d58a3e7e95f0bf83641f12c45f65c7a7f98da0c52986272607088226", "25f3a1294898a5287d9b4702518514798651db008ddca852c03c69261472303c"), ("1b5ac00709861306b509ab74596dbd713a94623c2e2a7dae9e6d0876df05eeee", "19b9d358fce13e6c9386d0ebcaf2974d7adde3e50a4cdafa805d2492573cc622", "164b3620004824fad8a3ec97a62ba2347a9e61d5f136f43382326152cef1a2b0", "2c7f1a9454515f9ad8818968db563b65a650ab7a9d4a380d95f4b72d261bace4"), ("2d4d83073b890a91a0ff2bfd879b09b6dcbf1749dd7a38f18a8998f1213f8d2a", "23f0f96956924136acab119e0d4a0beadc7ba05bc52413f8a2032f6511a6764d", "01d9ad669e0e6ffe05ee05640c095a2d10a923a5ef54bb911dd634c0b92c06d9", "1c9443627dda8593f16b81470251cc2c62288bd5d1be96ffed93f16dfde5f514"), ("15fbd7b9d330a93c6389f0fadbba34dca445c5761762316ea731e35ca14520bd", "238e49d0da5216bc6e2550418d27be768fdd569cfcada086a685f806b76532df", "04486afd455f5cc2598065999ef5fd77054a65a912e503b3749492de9aa7ce5b", "17b4817eb0393e28424e157ff559d26c7491ca1f251984fdd4d082b21d2caa1f"), ("2adb17429c186a46a3aef40ff8ec0b25750235f11556225c3b47d21ac082709a", "03a060abbee8197ba1eef6435d857f0fb4f59d9001eff5d70557370dab0e9b0b", "2b83f3e00ed3b894dfd136638f63a59e90fce7f806732ff5a270f05b1092c878", "177187e5530fdeef119073f3180355ec5a89924c94f714cbacf6c8fa67d74e22"), ("2bf27259f67faea7cdf869dde399ed1a31f867d7fcdde73d81a4bb865c4b1116", "16d78a41c5140e76e56c9d83ac474314321a1c7ad465d35293015916d929e671", "2fcf7f55f7a2c1e56d2276c21b2b7c3f6ac193b330f8612fd842a70a007b0790", "27533ff11e9839ca4e3fbe193a306b519fab2da613963ef0a14f4754bef88215"), ("2d3569578709c6d06f665733c5592e4d0024888077a90f4a0e5e24cc15b885b5", "02b6d35fe3c0f359ab63829261eb2593d1ecfd4e442edb268d031aac48569003", "217156123c559385e38135f9a8ea99f5d967cd69c13240ab0420161cb3f74156", "14ee3b5e7f9c70e64407c09edbe6e999f15a59c3c4291ef846526763b754fc9e"), ("29509efc28a60fd0b7fe68f718d928fe79a6761cd2f80d88b2e401c1e3de1fc7", "1353983345fa16e25f34b6b239eb410db6326949c4dfa8d42cf874a35acb65cd", "22edcc5896584c3519bac23700a82433842f5d16a764d6b8ff57c7eb045e58ae", "27ce0390dbff7a98174062a8a22b16a49886ce5910ff3fbd0a16d1050bf30698"), ("1a4fb8e4004745bbcddaa0ac22fa15c7fda35d042996bab993fea3a66dd97c0f", "0376cea9c64b21b4bfa41beda349d0b38b6891b76879a579662f34dd0c9f7211", "05bf850e9d5dd7490496fa964b6573082660026eabcd4aff0bc00b0a75041340", "0dfef3ded8367aa9d23aaed3f59c9faae61d6e1869627d1dd13dc3565c75f589"), ("0389fe2a204e1322ca30d6351e92ded32a925ffc614bb8938027b4cb844c0b49", "2cd8dbce2ea19ba6ae0fd43034a2c20912289ccf7d3db6ef0086198d3bc320a2", "2051e7e31caacd304ee264369951e117e5d521cf813a53bc2e15c8f6e267f3e9", "0d39400f8908ea0869be9ab9c659ef2c818d9fe3713b873d34554a0588922a37"), ("2eaf57754d87dbc002794a10e94e2372765cae26938bbd8e5d727eba366fb4d5", "13875e46fdb520f1f69a760aebc3e151bbc615ce83a1754797f7b6db73590492", "18f99e3587231bda34ecbabc89b430d6f8182738e2bd55423e7e68594ca7c467", "28b2eac47f36c9a55cf70a8742047b728cbc53400bce4d49ba3b48b403830b1c"), ("1e8dd46036c5ef8587c5cb545e179ef6ad797b2c9178fe98d0d0267ccb0be0ef", "20d728ad9fd378416acf9cbbc25e2d916bae56fa4548f38791c5bfead5269e29", "1619849e560add14a4b25bdbadd6109a264657f24cfdb9b1ef20c01e668ae8d8", "07da1ff20b88b6a63737103b8f3f4d5d17476f0876817fd56ad606e7566f1196"), ("2a438fcd06542e598e3219d776288a8c147c2770cf82e9521de24fce277e187e", "22ab7ad4d233109af5abb6f233e974b7566f443dbdbd0f2d7f505fa5b273c18c", "2e17cd6ecb635a4c56c17d3d3e805f5f31dfbb78c75cb5cc66eab7dd7d01a18d", "1768c47d65030204a4890e1d4892639549b83575d8f6b93be9e706a2a54efec4"), ("2aac548f8c18f64de6a8fd05060b2f7c2ace6bcf32fb6193ca5c6dc61a4d36c7", "16955067d7fc776f159e977669ca27c4027ae3bbf4f2f263386636db3c371006", "2975d333833251b682aeb3559188fb3f9783394e53cfd31ff0ac403dba461ec8", "1f4e83c10d85521c8aad5437c50ea810b676c3bb7417b4d34461fef080ba5994"), ("2baca9c7fe7a51b8c80198b78f323192331a48e31ee8ba3e3648aefdddf5572b", "1a3610f04d98bf83c6ebad299e25f65330739da6f6695d856c55965676a25ef4", "1de7271016bf3202b414483e99350991688159ebcaa11d30de164d17de23d33b", "08a61d7da98064c7e1b9edabe6672d7e64af334c40d1313133744edcc42e8c97"), ("0f14f9fad37ff69716eb2f786394d061be0c76035ed86298ef6f42d882a8058b", "2c0b27875cf32c6339ce50cba532bcf930ca4cc6c16df5b60ecb83ef5e53924d", "10197b52d74689a78fcdfac616f1605d06504c8ca7d8cb6f4e6322f72aec57d6", "02a88218edf09d2fcd8f82feeb50b3e3e38ab7d8bfecd8bb8f1b4650178b98f9"), ("1aea143802d750f833bf3688fcaed682f2921a2722ca38743b1643063efb05df", "23f501e4201b99c48ff8bc0bb4ce1f4e0bf2d58273b92da3a148589aa9f71241", "144a84a87875756a03ce3f9e0895fc05052693228a3719a7fa131da03189a4e9", "05c191ceb7ea4b4fbf93406711ea5e8e300617a69f2052419cb61e0980d2d635"), ("1baf777ed98f92a323ec67d4472245c13cacaba728aaaa73d726061260afdbb0", "27095ab179ed3253ddeffd83d13811924c67c318be94d90b6e72a17799bd4ac5", "11b463df324be029590f03d0ab8b5571939346c3225d50a9b3424ed66bcc4e44", "09b4d4b72f51ad367644f1eea96a09204a0926334c6907ba060c728374f74834"), ("0009ad0a5818c40ba3690a759184a9031b6f12bc9962a4c6d0c0d24dc064af3b", "027ea9d6ea7f990b58086c31c1cf44f75797a1dd725f3791a3edf67ce598edc5", "10fe2fa5685fa93ea7e5039a3d67e2507296e4abe00b3e17895278c071f0a7c5", "1dd0aaa58b79590ec3f7025988b3669c525cee4ccb0f98e8f067323775bbadce"), ("087f693a2553f4603e85ac78fba4bb0da17fa325223f018c0a07a9c1096eb9ed", "256b9f624980ecc66d7a0b8ed01a4e439be98b3b36fff971d2add2304fa1293b", "0ce46d7c3a483370ee69aff372b7fc7f374b6925676459afa67d43d7fd5c5c62", "24375d1017f01007c4bb618790bfea2ba1a9c72ad90058d5b94ec96a4e87335a"), ("2fe0b4c7a52da9be80343da70cff2666056f3707a7e30b0ffa551c257a663dd0", "0fc9211b8feccf3d1b75c818d2095caab78411224ad7c65508dc8722c009951e", "19c36cb5a482563713d9c3f39e6ec105b6534379203a81b6888f0d6a4f4ac323", "172ccd5beaaacc51843d66585e28f856f1ca9ea769c42a8bf64293bdf81acf46"), ("15e16582ae386fee513ddbadfbdbe4875797887cefe3e5fdc74dfafd74db75db", "1e5e01b8f7bd4e150a5b11e062310559b589c5af0c8f0808585ed7d9d8e89c74", "1ea9d322fb7bac164822e25928e427d7273f0cd2ebaf1c888f57b26aad35a1d4", "1ead3ef7864f5e54455311ac205fc0c9635fc5660dbf6290529df0e066c3673f"), ("07b66aef222aa747f37e3c2914a7c13910c5f051ddc56a37e58591317c4790f0", "1283de77e7ba90f13afaa82700f3f4809f3887a48f55723e727ea7933cc3f96c", "023ae7d43b80de6ef6467bf1ec76ebeaabc00fb381ac3579b30998eaac143084", "0cca8ee7dc55a3f3f9c4d54c0f71e2a257ab12976c425a1d7b6e1f03f4a9bab3"), ("2953eeda7120bf2d4d5a783852e963f7aa68ff0f2c41da0097d53dfa607ca84d", "2f0e85f87b2bdc2c47f464d041d024b052203990373f0f36ab7431a61e54dc31", "212f7fcc1e8ab5b113836eb552ed4ce7f8cf3f8dd87a340d00bcd1d0d1bcc371", "2cac378b95ba8042e9639f87428f9f397b2a69ce1736b02f6cd851da4ccd20f8"), ("262f9c0dbdc3815476efaf4e2d96de0de725ded7f3a6983e3027c6768c53f92b", "0a660ae2c30e3e1a8e9bbf84b5cdb913d85959e5ef02b2ea766606dc5b3e7f9d", "2b45644151dde5c1d689625a30749cc220277434ae88bd506c93416c500dbe87", "2dacfd9bfc1d9386bffd633c73edc0f676a92b95a5514598a1cb6645830904ec"), ("0e93c02b59b6389e2f97e0433089ea7da8a47c598c704c699eb4907ad13bf4db", "12f7608ccc5ab04e703adc11f53e37540a6c256026161d5cc90105a4364b02de", "2f10cc46b9b08963b718c9573e9416d44452b28637a932a253486ee395bf831d", "22a27eb5790644e2666954885827fc852a19e974029123efddfa34b0ef24b012"), ("1c0ff496597f23d2dd3ec7c5b7197d36f8d5856d39466a4810b4e5b1b852d474", "2082ab973005753494918fe69495f7979bca21aac64d0bf156e8e73d74d8d24a", "1f9a91c604f7896eed05cf8c18a869aade67955a69a6f2a7f337e0dd8bd7cd42", "2f1390b3ab8598cd0211adefe8b8cbf73ce0fe25f6dc65d288ac51b84f4e17f2"), ("1e6cb1163c685c9930afb92b1db52f906e0108ec7aef651dcc60a191127eadd0", "29524aeaaae87b5395ccf4bd82b12bec3490566938dfee7bae42980d68a390d8", "20cdfa64fab674d092cd03e1acda334b12c4c5c39445740363caf48cc5c8b9bc", "0aea6bca0c0f103edb49a6411fe9bcd334f66bf73911d1cb5f7ce1b916adc02f"), ("0ff40ea9a06d1b4711e4b8a0366bad4c474adcb5b3013d30555013b2bf29f085", "02cbd9d4f91d91fb88fd36ddbcd12ab44166cc0b419b6bd6e3eb3311192f63b4", "2e0537ee6efdeed9382c05a3dbac73bca291052d157ee84d43d2e75a3a9deb74", "273a0962426659c2ad73aef4b9da35ea79843046073a2704ed710d3a71e1337c"), ("2732e7f1bf1695b2d379085ab463fc2e91d4952a2890afb2d49a382f7f0b6a98", "162fee44dc294ef67f782709c1f46546d5ba83ba1dc6a4a522245e442157a90f", "2ccd11914de37d5d747c1d78fc28dd763e2e7859df184495458e7b1fd79a24bf", "28d5b84f9dad9d19e24783eac6045eb97754c196121ae9d0b136c552799e45f6"), ("059dd5d774697b4066bcd58857595b3a4255c34f91b2bf1158af55bfe5841cbf", "0a5cbdf359940cf6e9903e730e48e29d65336d8ac40af129bc4bfe7d5f2edec5", "0248d43c79f11c04688ba96bf84a07e69f299a0155c7d8c4ab729930b1152189", "0f5fb08e282529be2424de51f9d5eecfae1f22d9dea524d704519171611371dd"), ("1b24b2659d009c357ac54ffb51e8757444dd1354762f2f33571dee8e63deff13", "1ff12963e01f8148fd9d68cee65631805f35104b416b443a4d59e619af1b4381", "092a7a0c915d74dd738f948467e157dd9ee9c81d3619c937ade52cd8d07b8d2d", "10dd8fa256c5cc977cca055c9526e92e93e46e72bf1e352a94da1bd1f27659ae"), ("16b753c1b95aa94157e8910cb684bbf5e40c24c93c8f209096a3af4f9b07fe69", "16173fc857fb5eef45425fcb34efe5f1501cbb71ca25aa3e2c9f3548346fee43", "1f0066774214879be0382ede94659b8cfe46197f26792ccf977b8ed7c79fce24", "065999d19c7f182de4f429b125edea1acf7f21361fc88ca45954676b3cc4c0a3"), ("2733751ec3d786012d03d434574603322d00354a37d2af08a4df181f54223479", "2602affb4c888154ff554b9ce0e6ca3509a84a95a784a8e455a147e6b3aceff9", "0f5697f92706c0c6b29703369688e1ed1aa00b8b49cb9c224501710941dd0051", "0ffd0387cb65890e6aa217bb4b489dcb78994500f1569f20e265f5bb553e7238"), ("2347aece4209e2325b7ce8b831e58759bf3f8434077c7eafd9af29fcd39b9d7e", "2a4b78c9fb5a10cc380025dcae728b8a1282ced9aab6db2f002c2103bfb55c8e", "0983e5fae80e343b3aa0b6697095d1ac7bc000cd8242f4de3db9025be5058ac3", "02d8edf217175b30adb99c35ed34baa8231963c4ecbbec07ca84715ba5647597"), ("19b7014bbb2e1a122271d6ae41ffe36ff96d032a28f6d861939186a2f9b7ba80", "21084baa29e99a384bdd5181766f7af3b7646f6c618547a999f82e45e44400d0", "202700ea1b02c741ad4f9709cc87f9d9cf2766568c26fd6dbe88059a7e60cfe0", "0ec08b3591d688936c76ee69dc1b7a7a3756ca0ca42896639e2361d201df84e4"), ("2dbebf61180beebe1fc26da98f86f280be6d5b8c96f7f650e0e6611c98dddd15", "2c3391f260aa1e962da1f645614057eadc7abfaea8a714a93466485834f3b9e8", "260fdbc588c0aadee5a618a4f508bc73063b7c14ee3fc9f15e35610290406430", "24e3d4e93af74fc84ce7df6ecd1a604f50708d86120e9dd5975a7c5cf04af114"), ("27bc675e5d0d10e51a8201e796e18bbee4e39188d8a2d0925395dcb4ef60b0d6", "09aad029cf55d0bf6049aeaa30aaa90e47f3ef231da6e72e84da46fb06b49e58", "2c02d426a838e1053fbb162fabe29447ecd58cc5b0f38dfec1f591f1347accaf", "1572cecc34628481375c165ae6fa5fe3ae6a5e60b10e569f3b449d9abc1b2985"), ("193ff80ccc75e912513b7afba38ab89fcfe37dfb887de9c3f81cf44eb9299e90", "1045e51c75dea5d9654d107667e69694fbc995e304f64e2f353341cf4342f140", "2b3629e7b4eb36b69f1c3ef94b4da97a869a1d9b88246e07799380a135f69957", "0600189f5592d77d13a632de91838e5c858ee99114efdb1d5c1da4b75cac03a1"), ("039400c423f584b2614e159c60c0af7d561498ccac9af865f83571e7f7560047", "12beab59cf1ff9bafee6530e0a54456a3afc5a041a7ebd7c283801a080988312", "01cec932de9a07720bad76f74f0b322729d245c00edfb5ba5a0e23ae1f385013", "2049ddc56db6bce37a4c3a18edc0543c1a86c748d58a313d0ce3eb3e720253bb"), ("08721c7ddfcccea068faa3e65c9e7a39594a56d9aee6daf6509e9e8596235ea1", "2888e09bac8bf9a6d8e18b50058a7723e08d781503a494844b4524209e1f70b3", "00e7ac8b4f9e58b823d88b17b74fe8bfd9bfc8a12e4594f2ab124b412f71ead7", "16cd8987554df0a629611e7051653d723c69ec523a3ebe85df59d50bd33234e3"), ("23ca48bf500c5ea9a38ad4696f84c22136e240a53e3af4ee36d29ac41e59f659", "2083e76886b3506e93f626bb87d9ba31a5478d0423c47b17d78b847951bbdffb", "0be961d4207684afe60692ac9a5f3e157365912d0948798b49dba217cf556bfa", "1cc9bda8fca0c89dea470c0db5da1334d5e161655f60a0cde724b6d214a33676"), ("2f8881bc718dc36f9e949fc0bdf6451de2fc7257b11849ba3e5d485ab2ba7b57", "17a13ed65d8276a02e3350170e6c7359c981fef4acb6474173d7a34e220c27cf", "27ad77a6c54de58c05a0445e4e1c3a64a211897a15a8f6d8c02ee592f51a7a5d", "26f818eec3c4fba60f668212f7d99f704f3ed2c72ca0582b1d3bc0f0b6262a97"), ("2234ba7241ccddbfa706404f264b5073edff3538c32ac75cb11df03e7c795be9", "1793120835510ca8700193b2d27ab18aa53027daf6ac3c4cae17e08ec97669e6", "164c12f1be3af2e8d66a6c823213989dd723aa7d6821d72dea8aa132cd3f9afe", "208f2656dc64ebbdc544e239dbad432709e79e3b3dd733f7cb930341e409a1bc"), ("2e73405af5a1bca3ca6c6b6d7a32aac98f8de97745dccaf2f43f768461427ae1", "258edfadd1a23716a076b8c3a925279d6ba8ca3c879417357cc27c49bb293f6d", "15eeb398704c52cefcd4af8bb8e342b93fef78b716df39fa485470a096b2cb3e", "18336bf330a342a408df24d34a541f6ef6b7ca75c573055f27a5410e04232113"), ("24a729ebc77fab30343f9f47769e5a4745e7202ccbf8fa73537cee1dc7a9bb1f", "1fd753880635c69999548cff4574065e85d660c04fa9675183dbc93ecdbcfd17", "29050080d8c3ac2478f5f09df0779e7646d096256bb4984d32d50af3754896c7", "115c25694961d6d6af5e099031bde5fc8c6c8429a9089accaea44741fa8d647b"), ("288cb67f7c5d6d58b42785ff8c86aa637ec6266ece57107e32717be32ce9850f", "2e200c0f0725495eea55951cc5f42af6404149d0ff07e88c6f00db22cd7b40ca", "267391598a1d99f3c0ea4044799f70124913349ca53fd9395e212bc39d784914", "0ae137d247455da36f18c66f3dca29337ac901be4ceb51ec1269b85600077cf5"), ("13431a3510224f3df4bed57a9f90e5fe942e9826490e42d42269001acd754c99", "28c862efc3a1924904e7f7815995b4235e009a7a20ae752d742823ca86edff15", "103bf9eec3a0c2f8600cba5aa504bdd4d2acd7b85539ea0ad2dcdf508ecf364f", "269296ff853b55f28448fc382677e3f767102dfff84afb7eed81a04c4653f008"), ("21942c62d503acf74cb08f9fe6cab988ae551e265b4af74fbcfdd6e10ab13b2c", "020930edcf8ae91b1b15b6565ec82244ccb05b1fa26a5e59dbbf08ff496e104b", "2348a6e7486f6bba8529e20acb1ff5feb1ae4d53f638a0e3700a6920b56ab134", "0de810cb65ff2600a4c93e51d2c10deb5a8a83fc5dd54cf7c62cb6994a1d5fee"), ("1448acf7995b9d5342688d860bd86b252d447a11e29472bd1fdd68eccdf94e1e", "2af05d1fd5710e7d79a0afd808af6d72cb81ee29cbfdbdeeba98c899f2707a5a", "16aaf81e2b27c9ba2ce8c2cde05548a5da38c11d6b13e379f272b98eefe89b31", "22b5f2936bab77739e44bb41c285ccee1c8f03023589ce72fce5a699848eabd3"), ("080e111d83f5651ea6e27bbb95765541b0f056cbe2a01839869c76bfc48b2054", "24c5ab42bfda38f052e07bae569b591cb29879a673c1e8080ff5c97f579b2e8f", "1cfb7e0144e5e3a3eddf234eac1acee23288eb2ccf8abd6d33c8b1ba0694870c", "28b30131bb83f2da67f1f7b4264fd09250a34f8e29b80f655b3f5c407cb3d744"), ("1b7149fcb3cd29dc8b8bff3ad9a5ddc0cf16db7e1a9d694112291acba634bcff", "1773f5eb89d6f95d26b41d00d4e5095bff47f51c4ac8705a1a7afa659879065f", "125a3dd4cd3fc92ef3188a2b21df83609bf3d210fa096b0557c5b2d3a30b8d51", "15b702d0d8ff131f0f748edea001662113f2eab8e49d02c07c5c3ceba1eee8e5"), ("1b3833cbed1609567afb7b365ab19fb2552d7f07073e0d20787931338d026e53", "1131c2cee492c233c7864a70a1c61ff0867a0a398d2f8ca3e2c6a9a4ae9a4a74", "0b911b967e27236306666d0c994aa91f937ac129d8158ea38214e5ce38ffb87a", "0aacaa54942ff2d5d2816206d5b6870cb1eeb39903dbff1c238f4871e9a4379d"), ("187c4c9f8a8f73306b049333f4656ab78f026fe9e84133c4a4d68061eacf22ed", "1a3544fe76331cf61d319498a9c01e5a792370d6006200841d9b7a086848c58f", "0d0b771f6ab048891d2833e53caa161c25554d00b08406db276a683840923566", "137f96967c5cf14231da7d11aade877e44d49db75c0a698f31223a64d694c5bd"), ("0d06fdeb32d656736070b93d514f74bbe9d018752272cd03c0a0d1da90f43671", "13df59fbe91a433b6a8bbea5cb9c271dd7d0d170c42397f58a857fd695bc364c", "2741c8ae1921e2f71c7f26c5d709c698dacf235ffa999a279d66b8974793149a", "26e13496f6e001926f7c083e5e9043ef26accac72ae97b5508f4fa4c075c970c"), ("2d17e15516eea5072e38c583475d77039ac38187a83ae963996a97ac20743334", "2b16f044a9a8dd6ebc17321601d1e7dc09f87df0b43ef0d70c43389a5d017ca1", "2acfb9ca0d06ee4e5b4427320d41133318ccb2e3304c361a746d2dbd6751b0db", "187cfb2e38a0280ac684d8dc0e1f98070bb9187622f69199576be8032d04a0f1"), ("11f124684bbdcf00b808608b24c5ca4514a7f35a6a78dfe467cb3404201d4222", "273a4ae5221f6f5c26d4d21e53755153a080fee47f5a24b1c8a5da270598d4af", "305167503c51c8cbf01be12e2bbf9b7474eee36b8bbd3341342a1e928c306309", "14e8444f20e8355ea0c059d84da9d623cf500cd2f5af9813eff35a4a2ec41b58"), ("2fff604be7adb26b47a6ac2d01bda1227adca142c2033cee59a695e123a9b3d1", "0d4e2774ca0ad6010d7ece0d9777c8b2fa03448a0a3a1329be1f9c450ed43d27", "05a4f479c871a519bbc4f72138c0fd84e95de77e1a9ec0581268de3b144c541e", "298aba3a54e41a9e937103c48932083a3d3c07ff340a2471009fbfa1a2b2ffb8"), ("1337533ffd8388a11d493db78684d3a5363b8d85ac53dd9a08c5c162d9ca6e93", "21de422c379ddc9425809421ab8359ff8c6b765e8878d58caf1bd1d86d4d8b46", "2a4193b5957923db615a23152e8ce79909baf0ff4a57d05907f7a01e84a1cf03", "2f8df51cd65cb5cc3258b2330955e7a4b04d84af431bd6287ec608e688f72317"), ("29df579607ee6418f2e9d733fd88d45d037f31e15c1030b697d4722c698a2803", "22e1b2a5b9cf38d4eabc5275ea1bf98ffa9e93eb69008390916b59ed7f63f3bf", "078d640da4a7d4431083378e69d31f44fff2fbdd289919454896821fca1ecde4", "2d12c8ad7b9fb3fb2615ef20d7120e6927e25b3ae669bfabcb444c5a22b9c46b"), ("080ec449f4078f5f3ed797d928be9dc256afce7eb93121d2b431e8a60cd20fe4", "07ad868f57983684f2c684c3662ed79992fecf65c192db6513a5edf7f8d643f7", "1a8ccf07fd5116ad02878a213167f3ef4ab7b76698b61410df85208cde3ca819", "1c4034dbbc4b568beb63c78b3855a4ee7b6da8b8229cefc799efdbc5467b3650"), ("0765bcfb3dab03eec8b8cd4524ff49f183ca2f7d3abb134d1f2aad4bd298465e", "2b7065f73fb451134ba692293fd12a4ddb56e019ba51a6e80f64f7832a4648fc", "3060527f30b487285c45171dfa8c29df8ef037b05dfe0815af4325721729e1d0", "2560c115fb2ca99cce01e9c59c176e27a515594671d2f801a7471aa197d0fb3e"), ("2fd67826829cf34b3250dc6c5d34f960e598472552a8b6cd32ce5b511fc3b66d", "053f5a85d7f8bb04ab8abca8d4a7495ee9663c4e1950067da6a34af43e337f4e", "2d8591b3bf8c3a444c8d4d3687512f816bb15f851ab80edb72e8883a442cc399", "1662ddb8213d10ba2a8402d1ebb7d0f9ba91142fc05f90363fd84314f8b9e29d"), ("1c25f0cef1967c3a31a93840c814ca5716b5600158c8e96c8fc20a38ecbc7b72", "0b0d6e31478719b23ade125944b1eb58aa7e256fc990c55b036d4acf8cbeec5c", "22f1c7dc753d20ea9cfe2b0453564ad18c1ff0420f847a03ec63b2b40c37ad56", "2a0a382fe4bbbbc01b369449f8dac7e47bb2316f9a14dd3726a2ef577832ffe6"), ("2acd6ce22890eb02df34734307b2b2fafb35831ce3768ec24a425060f361d592", "19a88aef5e7e4ce47627b6dfba787eb3eb960ae271cf4da54771e8983ea9e5dc", "0f7eca4553322ddccf74ceab15f57871d04da554e1e26bff5c7757c349a0be5f", "2a4dffa9e3cc649147ee6ce22cbe2b6d7fccd7d0de8cb321d5c9f1eef2499612"), ("18bbf218f6cb619e416cb6961b12d356ce858a5e42bd961bf8e94b9db3063040", "130573a9e77e981d836e8f896c3dc28a4ef60f63b0fe3ac5d85be52a0191f98d", "0f5fedd62af8905ae1425192285b6f790247ecaf449800ccc9db26a74835495b", "028c7e24fd8b88f02c5a3ddde205e92e28c9296f63cf9e0185441467c6f10f18"), ("2dcc1cd62df91d340a99a3a801d88a11e0649439990cd2f2bb1ca1b9cc6d3122", "305de3ac539fa6f68fcd091f9f5471f7034718296a089d7419d289b7cb857c82", "18f291957b39526419b41f7d8098902e6b5d40d35dbcdbe24b30f4e2c64f3723", "04f6dddaa8daafb5fd3f9d430ec8533ec3c1b64966051d5f9ab22fea3016d9a7"), ("01c9fd453a88a70587d413c1c69d583e925433b0f613c20092328508c62ee3ed", "28038394a95f0e8dfe0979982438502fab093e3b7bad0296f80f39b2c02fe211", "054cdd2b6136d703c9a83238d5a2077d7a29d1c5e15f1940bb61f2d52021ad2f", "0f0219035116b6fd7023335dc8fcb38bece00b6b49705161007001cfd164086f"), ("1a8f18cf8ecf446c4019b7872f8ae5faa7860b5affef44eedecbc3bb691bbef1", "1f903ee7a81be7a01d66d2de6dc3156496ab8566d1f76885e51fa1403879c1f3", "04d513ff45d1da036b703ad0b40f7f2abd0a983d721530deab7392ce452b3764", "0b6eb746da50bf296487bf580a47c5ced6b25a3d76a52dd6a65e6293d424a168"), ("1228eb1a105f7528bd484a4b44c8d767eb860a3d16b456b3dbeab09023e8ab05", "09e1c48535925397a8dc5ef921fd78212a6af5a28e8b0fe8eaa34accab00a38a", "2cfe8b2dcf805b585f7edc2df1bb8b0da016ebdddfe2f8b77f3f5d6895d1187a", "2fcadaae07c651221e144b1f20bf5105ea5a5e790487ab649b2b802a9f68cec2"), ("104d66ee13a18015237e60b33c3fb5c1a1767230c81ce4a02c7c072e0de2be4c", "0a94ec471a9f38264a39cec775a2d4dfc2712c23b53d123fdc4278bcf0484873", "1c04268d356105400051c07191642c1685ca3715ab81e21b92a085dc5c0aacd9", "2489d7a23247733f1439f174f6c630fc06b1d2909bbe6393550c7b75af227235"), ("091a36a112d7ae5986d20d7161760c626335708f30049070512122148377190f", "1b5db97ba4e496d3711093881f74302de4edc0103657791aa2a1681acb035b3a", "0857d3bfdb03615ac208e3553ee378997a89ab2864b1714825badcf10518693a", "247e7ecb7639ede7b0072ff99ce6ebfa2bf80a6bc23241c7c9c4f382dbcc9ff0"), ("29d44ec2a43021b666320d1524afa769b25903f915cafc68d3d2dd6f93f590fc", "0c02940c70c66ee113bbbb1de5412d5eaa511fcdcc5391fd6554975a88fedb50", "13daf7fe4210040110df77b7e91137a9c50f44da67dd644f1f70d35fc2999a81", "0d7441b90769a94dc9afa9aabfb6a7113e5d47b5d3d8cf84aea4a99ed7d4adde"), ("175f065667735612b6355d9c2e2142fdffdec3508779408cd445855a5b2157f1", "1aca8d5f48a4ce14d0907a76c6c8688272a94d750cc3142c579b56d52d2cc982", "2b272f99a0fe1ce6c81369f37b0e16585560345397ff3bd5c6f81eb93b78bd29", "075a39ddee4497392f2d5ff04287a6281d281b46032834209de429518a437f20"), ("168d1da7ef455a62f312fb4ea65f8e57ee24c0df563fb851827e1883770bebe8", "202268e30f551393a37e2df343a7cd24393fce71fa49457d5936c3ea41ee8bf5", "26d5058606d2c398655791dd5997b47e1c51570ed9e92e009459297e608de249", "20893e5358040925ee3fa51db2ab16fba59e8f848ff0d4d59a7dfb516d3ec25f"), ("2d86c546d6091e603d1d849f81d34cf77a8b68ef9644922562f69e7a06ab7d17", "1c286d6cbcb085b7549bfdfd2861b41b30391d99cd6b27738a432b484f30c445", "2c7d717d056541a3119d8dbc552542dbdd27d35c7c949310ebcb2b6dc4559c76", "26c12afcb5e798647cd0dd35ca380c6c9df6fb26f755343c419ea32581e4574a"), ("03628fe87b5303d797801e0797f753c2ab7be83a00cd77a103cab97072f29b53", "19b03ac969f2e2ed1385a5d6685d930bd0e8bc1e3937ebd42106105fef2e1dca", "0cb576287d81fbdc061a9b27a6c36443e82ef589feb5352d5a7140dd5266a5ac", "0da4eb83242b54bb0bd15ae9b9da01169d36abfe6702daeafb5686592e11abc7"), ("2485b17605c7a566f821478552502dc820f8a9df02dbdf03ae356ffe21a71041", "0e5d11e1241f77f191a38fbcbb9c56703aec6a9141f83da33cdc5b2387e06d84", "10f3bfcdee7dca388c743777c6d8ad5c15314771bfe94568117449ecef575a8e", "2a7026cd82c89f09d76ba2637aac4efdb399af1f702a4aa6916224ab394fc236"), ("01f12876b946830bf3f9eb09d800f82fb5e3981df1a320d98ef55c73d664b312", "28dfbb23162ce54613cc0ae04432ad50d7acd174f49c9cf355423fa20280e8f6", "2b2f78af67128cb04a3ff4a8e7211a3d147a0cafa7757a42c5ec3cf70424f74a", "1ef7733965100969146461fd4e6686fa8b2bc476bc843cdfad0d2168498b6d9c"), ("13e0b775b224c559f9e85e4b6ae06f6adf78f6f9521c8be57409a6082e73ece6", "277564a80099ee28392ff4ba361088151275dd6a53e9a333c5391c37fd856816", "121727ab5d3186399facc97bb5b2f15ff9f019a6b79e97d984485bf98d7161eb", "2d6c545141bb0c1b2aa92b3170d6c5c8a4e8881a54a7b729aec186ed72211277"), ("25a6124782fd1b87132bc0c08397abcda45479225530364450d6a20f3bffb8a4", "301086f99dd82da30b29027a5c3989c0619ebfc6b2be2afa6830a6a6a787371a", "1ab670208cded83f66418b49776e40d09af33c14e32e4fa662132a0ad1cea143", "1bb8aec559e0ad53b81d92ac5b098ccbd671c4fc7d444a221b32f98369180e85"), ("26b8f1502ae45a1d391a77ac7bcab974c8f4b04b258cd780bdef7ce7543a430c", "12f458d1def658a1b77fb5a6a8218550b892b491f4ecb4562a5a663a87426376", "2d53d0ff69beec7ec47f647370e978e4bcac8deed8ac85e56f785e4ef74bb905", "13c2ae15aa8bd23f967e7a963b92dca46695c55b8500da3a8fd1bcacf59983ef"), ("148a232145e734386d1806c8737c68bacd7c8301ca8feb5bd8fdc8d64043dd60", "10decdf86402669ed8956eaa51c8056bbd225502b71c92323f2d08a0ae34e2c6", "1cc11881fc469a726b73970cfd5f05d1ab4ff6e0a33214241942a4ab2f30c687", "2ed254518b6d62085c8376795d67a15cb8a8e338667c33c608102ff6a2955fe2"), ("2490beae31ee147f538f8929bd80d02b9fc39ae4bc12ceeed9d7c6772671864e", "10e31ed81c4847d21d35401010f5d987f129abd5f45c5258e04d0cacc584c5ca", "1260e2ab2ba5004c29b0fd6900ad7cb048173ad8629890898f8b42d69e9ae773", "003e7722c4b27c97a44c3d50d77ec243a530a24ab748c5b07901c0b6960af884"), ("0d6bda2eab38ab974134da1818b10e45b2950f4e5fba92b721f279c3fbe30153", "0b75c3db558529fa07614dbc4d829cdbdeea634766371693070b3bf9ecca477a", "2c09ad623580caeb0747a343d349de1cf1116e8f4c5e55ebc34e1372a86e64bf", "0bc53fa17b26ac4d4a120dd6de4d8aef5971323d551448ce785fd0554288574a"), ("0bf0c38aeffdc4de1ce12231243dd3f182b940218e7908c2075d046a769ab48c", "12a3f1265451f87ab9ade1770c48c55add7a2c9589140bf262a733a76127a752", "2baf6f3a42080f0f4ffb70ca8a2ca7962ce38e23441576079a592684dd663350", "037ffff91530ba2b598f5594446673acc1b1a7193bbd68fdd75782d99e46ebf7"), ("11a94f14f228b0214a9662776f94eec5a874d180c7940376f13f7d9d7c307cd9", "2bc99160ff1590af9722604c7ba2de879cd6429b654fd22065fdef2a2a0dcf68", "049abad4fedbcb4c25683729f93486f930565d928e132a5269afd1e711d5bea4", "07fa5081e60d924eb2498d87771eae8d8bd10b27c906b8e6dfdd48be92c4efaa"), ("0977096dfd66b515804eb0c89875107ff687379d68f4fd0d0522d22714ccfce1", "080f622e81940d40381f21deb9f60d3b44c5f87ef1d15b1abb057cbe19ec12a9", "26d712d43d4a31b36c4217b47ceb52dab681f6d03b006ff39219d55d6f509107", "26e77a8bd562a52cb910ee0cf95e2c9a02623e203ab22fab891008180cbdbab1"), ("2111a4e1e5fee702a7f3e5b33e3bc89f25e51b36d987aa7f8c367b7af5e6a84a", "1e415869ae51c7be834a8003b00af67ab6a7a8f300fc82336d54ba11f4baac62", "0192f85c19a1f70443dd58bdb20fb7556a6dc14d9c924cf9c38125b9c9cbe35b", "2e327f579bb521d2b65a32ea6bd0384ee172c22e38829a3dd8e26912ae4a4e11"), ("0b90c38fed080e130bebde954208c3a52ef97036f7495e6b077e0728bfe8ae1a", "246cd3f31b9073402649266c8fe8f323f22ea9ff5eb335b23742d71eab6eb854", "1d6008e60956ee04ba10017f84048839f8db30649c3d2253fb24193474868c74", "28cb048df558c1e868053142c65a7eaff28e7ab8e3676e6614b8c7c7ad75de6d"), ("1f4f360b3b0251830251bb18629d425cab71237f4685a658d06d45007a70c84c", "033edc3907af5da2581196751a1400429dd103ef3278bd2459081e7af043a498", "2f6adbd489f8a6f0908a8f5c4b575a38ace4bbd21b60af9222fd7662326770ce", "2cf315a371210cbe3b5d9c39c5480ec612f7e74d344662f157609f3ac4a9c930"), ("193dde3d46f135c2e86e2759985ff0e8a3719a72fc2aa9bee14cf63f502b80af", "1e3ed56e81c3ace1259605e3fcd9bab88590f38aacda6bf2512befa2ccad41a0", "2215a07c76bd443bd4cb8d8a5625a14301fb1a7f9723fe511ff79f315d4fc022", "2c30e0628242f846cea4bc48c9ea31b1849e3e57e78fd1d1a320ab331c623596"), ("301610833b5bcc4934ca7758fd05e41c0f3c6622acc83005b252494b7986f73d", "1799aff0039897c4d43a4be24715b1b9ada86f70996e656411b99414591b0a6a", "07b16f9eb4040951a5fe5d5cbc83c9eef00fe7365952766affeeeb7196b6c33f", "0208e6e13340272eef50b79ca38b067b6e841b8f185412d21cf6fa45b69234ec"), ("2095b0684c44dcd2f51859a3dfc2674435579f7af3a86a4509063014eb4efc1b", "281a607a29821835048bd1788171a6fa72c0ee8b661cc4082f46405a0549d79a", "1e6845bed5b321cd660acd4d07b4221ed547d7f318d2141255e0faf25650fdbb", "27ce322068014ed9c51a1dfe7b692997e2ff3ab6d407da6f98857e34604665c2"), ("1cee294a0b33979950764017ab42412eb823f6768625433900ff57d2c42bd69f", "159c894eccc5d95d801be571c088b8aa31d977f40113c632f44b21ba55a0a537", "005e08e0637c886d3ec2ae0707989cb7d39ba968701ca59f9537f2aa5ea4d8ed", "06e1506eb7c77199ec01a3eccdeae7471c24179686b1635a2cfb537fdc41978d"), ("1859cad8837030c0108ecbe48cac89c9823567920bfdc827afcf3dfabc0438fb", "1784445d18ac43d8d7ab16bbaea9217c4ed36ae9ffcbfaae0d1976cf5e67c20d", "0aa4750c1cf7a629d2a80c3f139054914a46aee1164cdf9fbca389457a1504c9", "1bab009652c9013057f51a5f21f943905ad2e5fdaa07fb483e88d9e2a6c34529"), ("1219cacb4bdd60d0910f17e21bf580eeb926f931ed74c98d6e84a31ed4b5f770", "01b6fb89ba113b3c83647e5145c5adb07cf3ca69c43526f777ff2c8e05d63d9c", "09a2a45ace02dede804c692a854e1aeb1586f6755833791982d5751b3570a032", "29b5f1309f8160639767d47ed83f91a8c12edebcffa5e3d24b8c5b5f7ddeb956"), ("30281ec0d1782d7a433a463de420322726a114ee0cdaceb369848540e7e6195e", "1f5246bcf8072b0aaf1e21f51f65a5198e379b83e406bc71b8906fc3b27aca30", "2c3c63147cc4e144ea09569fc617c335edde7a6f821a6bc293e1c45bc036c92c", "1b2b980d5620efe4958b6e53446f88afefb738749e722ba90e6ea8c5831c98a5"), ("05e221fb1a6d1faea09ea09269f2ec4a5ae348282a7d9519f3d09920fe2dfffb", "21eaf2a62e38f52944ef7ccdfc6e90487e3f7ffa0c8a03a8a7aa70297b49385c", "21892bdf4892b4297d1fab5e599a6915051f02626c94b0b12eb2fdba176cc53f", "29704f2838ebc8923d4350231dc42e9dbe290d23460b3ee8a0ba749ec7b61d0d"), ("26a9b97d107d0ad51680740ff4bade815e2dc61bcb649cefc72dc69738147c76", "1d388dd9b9ee3a06c090645ee2970ef4c98ca7632c66e2579a55429dbbca7723", "2c6a7b19c0ff98aa5ebf87e840a789b3ebb9ed711dbe1f86e94b14f5e0d4f013", "1e7e683dbd12fd1f4b0a1e60afa2597689f1e7f11482231ee48ac749149d8c7c"), ("0864c4c66f72372ce43394b9f2313c26ca7ec9b2af07042268de63cf702e1b4e", "2c185b87751d84c169f80b4d8d944a19aa4f4e3f5f4af69f59f8e12400705b19", "0eb0255d19694b4e5fe1df1c55a67f7085df670dc75e3381bd91bb4061740508", "2309d38e6cb428bf3a883c132da19065ab15267577ce740981066be205d6a8bf"), ("2e324663b64bc10c489ef125d1b8added0a731003ff374220a67fccfd49a5291", "2fa4d44e8ef3d32352538aacebd5ec189bcfbab22767ed5b670812b828b02e78", "2bc40693a38626190d7b49fb147e2dc1ca7c5d8c4c61c26ead08cf185f0c4bf7", "17993f39bc2a5cc83790490f181dff8bf2053a90f7131e5faab17e26b8318f95"), ("24d31041490cc394fadc4bfb52abf22b65a1a92d1501d1b0e4990ffb8cd4459f", "13aa2ee39605ad6050ba4f6766a0a5e2892f093801fb782c73b4a10c244dd896", "0738cc614c4c1d6623de492ee3ea89df08df70c684ac8e98b62e486ba876a159", "14184fa609d9d924d7dc2d9f0981728729e191b1b5121f8b0a26ffc78263b47b"), ("0748d4cb38227baa67fe86fa06c4d808d3ef07f063e4bfec2ecfab8e2dcb23dd", "0be1924935eae2f743b7ca9d14f1320b4ccd9777a6580825e34fbf3e6dde9236", "0ee343be5b4f41b05107dcc7be24411cd72fbb467f47337f56951648a8a81d7e", "068c5ae18fbdc8e9a9d4d6c3b79515f7ed1bf8e047cb33056c6feb40417ecc84"), ("1351dbb18455d919d9e2695cca719d05d1279ba5e657d5f16d1fa353c6f1f31f", "0871d7230f784341c4fbcf233aa9fc05c35244381956f39d9130f05b5ca981e3", "12d6180c3f3b573c0ea668eafe71f8b436515e4a704266d5df5538b6ee4f081d", "19e97f1131cc28a3ec4899395f57e90c64da84c9de6696e26dc96a3f570b9c91"), ("20d0e56f8b4bf6f53fc55a99f6dd4e698a13793072396f7c0f725ec4247b1fb7", "044de82f36f6a68ba1dcf777432d2d3767cc267d65ebdd8e761db30aab66b391", "0e6ed1c38e29eff7019cd65c61ba9fcb760079726e70bd5befddc952ee1d2f74", "28ce419af5454524e56e85a73847d3656c6a21fad7fae38b893251ff2aa4f208"), ("0cbd01dd6f55ab53236116e2073b43240d0a898fced4fede419d5a54576c2e03", "11444c209af68cb7066d2ce0e8644f08ec2879d39634b356c79f27f565a180c7", "1fa307dc4b945a81f512b48ffde0214d09c1f9111b9daa909123ced496a0eacd", "2e7ebebd1817b5601a5abda036984838e6da781d087a6cebb7a188de06c42956"), ("197ff4d510bd3e3968e7ac6ad8f737d5beb7e48fba74c6f08f84f35a2faa151d", "0e14926c4f6cbead3aeadc3a891e939b7e2ccc4de68a8273d1449492405e0541", "18bde5575a831ccfda4b71bcb5f330e95a7afec9bb67b0180939fbc05ed95e7e", "1ba1d1d13e0738782114ca3de7f3b0c644bb081ee0f188349462dfbdef4a0360"), ("11d8864fb90deec8dc9b4304a8343567d998c14fd37db5e3bc3eb8f706fda102", "0717d947728e5ff73916f0273bd9edfb14bab5e50701817fddf6ab235a1864fe", "0dddcc7bd3713f217778149d8e777042e8ee90e8e963b48bb146cdae092a0135", "2087c137f2c5c7227ff29c355cc17693e9c5f8d5e7b13855481913e36d23146e"), ("24a1545966a4ada1960de644333b5d1e155a1b23ae751718e4aa32c01a70df44", "0caba3ab919dbf1ff36c143cce0b1f603d10db637023e82f508de616b822a915", "186814df125c1931b1952efaeb1b1533c7ed512cd71e592985df5c68d4657356", "277fc3d43271643673c4d36b8ca9ce7051d3c831e363e5ba72722e1b27096366"), ("00521f2a0797e02c5bd90f649e3f71b5ec8607724582a5d47c28aa5a25d26d91", "0b5ce765c523028ff39fc2cf261451abdb7e0de01d4429d7f7eb187e7ae6318b", "0608709d28148d600ffaf186f5109fbdbaad17ccd8a36584f15bfd87315097e7", "1a4035d09d12b3ada78bbafdb96ce3f9db971c6676943af6222efd426c1e16a2"), ("26c9cecf867cb0973faaf7a63bf83b2a0677ec23363d742953c528b8bfe7696d", "1fc352e7e2a6172341ae845c6032e55dddc612f92e4219730c91f6fd89916bbe", "066af8585bc0bb4f0306a4c92c9d34082fb09264ec7996f56e03e20c97c15c22", "183c355822d477a0cda0c2d3ebb40ae0b968b6dcc63bc1ef0e9cfdf9d2fa3390"), ("22453e1f7d9586a4ed9f390f57d0dccf75aa24b7a5486ec9a4f76e06e07f801b", "1077edcfbcdbeef5c390831f7efbbd01e545257121a77399ad5f6acf0cfe8b70", "09bb4dd7224acd0eb0d75810f77a5c72f6100253039a6e99c5836d36e448d0bf", "04fe928c5804061bc1ff516f3c2e9664015610533f0023fe7614756874984e5a"), ("229c6e9ee1d41e1207051cc06ba870d4cbdcf63c090ea8e02d85405a7d5ee579", "14d6b0eebc86f780d0f5f609094affdf22c18e6f0a1dd0dd9fbb2c12bda93854", "2ed038e4350768dd0ce50a3cf1af566c435a9b56a5f165c752c84b1f002f4307", "1273f665710fb585838c4dd809e51ccd9743dfd96799781a8d370b4791676559"), ("2aefe72b49c2b2e4a31031f7f5f9ed0407fd0cc749380170767dfe786dc4bcad", "2469b5cf3ae99ed24ae61bfa07a69ab7e425e04d73555e6c2070f75ecee310ca", "21982b9f43c11a57bba46e598749d64eab56d8c2ecdcf5caa35714a5dbb590f1", "2b9e69297dfd665eb1ef464a1013c102c88c239818d96315fd5479996fd60552"), ("097a0cd8b49ecfb6d56a785ddbd1a0e15d8c42d11af34b4105a0cea5a6ae1c06", "0710fc38b23d16c072bd04fc940d174d2585b723ce4d75d77b9d1d7116ab1451", "2631f5d79dbba5df999b3a10bbe77179d891c441e1ccad9331e7f274d9cf86a3", "031614839605486c81f119730401bd24970bab1df5411836c2d3370a49e7130d"), ("11242f350e4899eaa7d0efa325006889ed7824b1dd2800d768d403d344e45849", "021ac7d54efa6ce98317979092b8b1fad76dceed6a8af08142545b2a47b94bac", "11279be8f7f2c75742e8bec8d692bb894f28ceba872f6380906bb4cfcc43c05a", "21a3fd2af0e57723c9a3413c0797ed37d7bba0c32809a1d5a60115da0b6a3c82"), ("11fb4889e4335a3558d1db45334a6317d4e8963b3520d305da67da24d49ba279", "2677f094da3f07f9354994af41c5b919367688934b9d72d2e5167f5e75ee7929", "152df1479810e2b7566161ed0df566e5d10d27cc5a67a0504cda52544dc01fc2", "09e59fbb9ffa8fe16fef7334e2c6773cb3000e7d42a555f29730d79c65c46ed5"), ("1af6b2ac16a11ede6b6a3c7823266ff355746ce381cd15f8fa0da10adf07dd7f", "20ed68fd852a082d59949a3c66d0818e09fd389fca1bc9b829686fb66e8b8e42", "28a6371fbcb0b23ef11c514a7c27decee925297887cdc9cb2d96703c4156dca2", "17bde4ee6ad6f76df40b86938761b290be6f30d38826b430fc0aa84ea11b12e9"), ("2e82e4c3de2ec45af0902f723be6f8a817cf0e6a629260291bbc2b7e1b2a6696", "1d44c2d25c572f961284c09d6f62e205d0fc9b5fd86c15c4ac8417b05617e228", "29ab73bf95b87d17be82c3db4a76f78161eba37bda364547ce5d51feec968b0b", "26d2e312dfde7250cf396df66c4a2f7851ade6248a8212dd7b11491fc30b9e93"), ("14cba736af467088d8de131885ca574c120bd9e41ea7804902da8fc93e6c09b3", "1af62bc46c99605823b1058204eec3b4bd26b2b6e888fa59384d2dcf4ddeccf8", "119a576aeb995303c6ea3477288393cf7be46ac96289cd0f4220f242f0f25bcb", "198cf7e1295f53ab2dcfc8527899a9c9b9375d5bf0a67d30fb8a6c9172dd2bc9"), ("2ef4c9df6a9a35439c66514f210f52762a87dc0aa3f56a331e95940a0bf2c14a", "18466aa72b23a6a47de5a2d715c4293a23e3daede96afba00d2e46d6556d9767", "27b5880c1f88f888a541b5f4e1b8e867bcac9f2ecf8b74e8bbfb8899205b3198", "04429e1b1341f011317895328dd996e0af87b8a4d974613413750254f9f9255f"), ("12d539204b34a9989c7dfd937890128f9f95db0733d84a0a16135da59d954c73", "209487df5f260dc68538c7536b610365c2638bb2b1c4cabc743b79c1aaafbebf", "20e1e2dfab61f6a2ae90c554a34c81895872ec0927736b5ce73dfac9cf367282", "188499bb6447089742deb92d5c167667f2883c58571acefa2c2ca0f8375f4146"), ("2fc720ec970b9408fd69df4717c96568ad3ebb98de60c0bd86524ab4b1edd4d5", "00d1231d229763aef45d3b4d5e2f6d52fde293581d6fa177049c1432dad32c86", "25514cdc2280e865a333d95450d03c889089387530934f3b03b9107bce0c43e0", "2e8ae45f44a75aba1e65421708f295bcf5c854c43fc2b72c34a1da46c65fbbf9"), ("1139303a38487ee8e65854b1f7d55accedaa1f0a874ec1391cf9bf903fb7a6e6", "1542f5669d5ed9b2079f79c16fdf387bbe9918ca490ce20d9e306b6e4455c327", "10c2d2846f651d624a428195145e14ac79afe033dcbce60598863d33f0691d1f", "1e182354c2d071c3290a6f8b99ccef8935646fa9b017d25fbf80cbb4e26d3c30"), ("2bdb6d3011ad00776edb2896956753365e96d22d1084ea3fcacd91f775aae467", "1f49c6add83429cddfe4ba13998270b031e73fc8c7978afb8e3178cfe08a6cd9", "29ccac319962f205e9b908808a9c0436c8f2ef63b4816d407b0f08abc69c8979", "0e899a35269f2fa0a1cb577d3c1238937abb98324cabae073f994199ba191968"), ("0885f27dd0a28ff3ceb209b6b88c33b66f351115981d0c964fd5b0faf77e6b16", "09ad42ac9e4d5d70fe277023fa2c6aca364df4b0b7b6080539775ad1c8e9ddf6", "226c93fc28e4595cf1acec4e580005cf3ba775856a9a617f1ed7d94b03eb3106", "1e7f30bf5fca8dc01a7b618c3f02cd643074397c9f25978e5b37696fc448f1e1"), ("167a60972487b832a98ae390c6d9438282fd8195fca9776149818a128f49c125", "1e96a3ebf258374f02a59de7dd83d6d5a54bfae5af8689094e07c691ddc17611", "17d150055e43e80ec171733d4306b705c4c2614588edd391a713cbad5687e3b1", "21802f184e18d02e4dc6f75077aa6a5885e66b0643824afe460ccd9b188bb94d"), ("16f08965354a993b88f9e45c0bc126674dc3ea99d2d4569c18289ce9f5a9324a", "0ed937a282637e6b17400ef30578f0bfe7794719a0b198773b42ce741a71daf5", "2b82c4f01c4fb643c1d882a51c1d8cc800b845f70d731f22963b19a9c1537ced", "14cde1796c5322886bd25d83581ff9554f0632479c5650e1e90c840322db3b45"), ("2b059ca79067f2c76ec4085dbb47cbe934ab1e7ed11a794d1ce300aac2b42b8d", "094633e1ea1d1fecc9702ee5d4f5fb24d27b22dd6b4b56743dbedd3308a32686", "254e353400f0fbf51294577762272acc52484378c1d3db69d49f588fccb4c691", "10d43187de435f996062be050e42f47150f7d59d4b1644d6fdb7f31d7780312a"), ("18de32644034a56a4c2ad5e0ca619ac899b689f1e3cf8d451901fa806ad59315", "060d304c75e3d4d8cb3c11e501815fd5c087cfd8f157c3fabb65192f9bbbfc0e", "13f7a94ba09a5ea2c757c2fe86e7c855405dd00d936756cef289502b9b8b445b", "20ea7ccdf8e651abcb63e47db9be6b2c99e5e767e2daa45cc954ff197231560a"), ("075ff15e54c3c077d5787683eafd35784ca55474a45302ae3224d8ec3541ed06", "112ff61ee38a5c683c9c0f7d47ef00a24653ee276453ddc00063a45b6149922e", "2461bed99137f29dd7115dde5e32db8d9fb5fa164d0119778424c3fd3a51c740", "0011bff3209bf2f371d7cda6db0c982cf8a4d5d8231e8bbc5654fe0bafb04130"), ("255cb80ebbf60d757d0f41897caaf581f9da28bbccb791db2be8f0c84fa4b9ee", "1edd8dc099ea07cb38bc5baf25a17898bc2729acf30cccd41acc6a31a894b7fd", "219adf7e3b861495d9f17081658fe9c0c6c6803cacc1de5c01d77bb3c7dcc1f5", "26b809ebf6226c303f6a7694e486dd6e15b37cef6dcee0a190e22922594c1d60"), ("190d7868401023b6f25c6d79305d938f10bee6d9c7cfbde3bb469a78604105b9", "201d5adc3649b224d363f864adfa65e570ebf8ecd0cf200a96aebf948cc1a8f1", "225f87f32c1b25adac0937cc5922e59920ae5b671d7e40233a06c858feabc924", "1666fe96ff56a0f2330024ea2433d30f3cc180e6a59e0a6518e34fc666f7a0ed"), ("09c0d5ffbd05c161015582834f6f2cc0e3e00e379ad172827dcdadca74449e38", "198760a3690667de22b0314897a1088ff251eea027ff3cb65d119d746ce5bd94", "2f6c9ac9fdb6da9677aca6ed3d675c3b9b677783372cbda3fbc434afe14a4a79", "289334c668b00e4d9f3818851f05e9e8128e75e19f8201c32cdfa3ac53e761ae"), ("1adfd599ee7dc12fafb6e1b7b2c37063a14384ed1141e6b4c245e2292641edc8", "1a1b943a7a7356a60e8303c31b3ba46a6b4c0721df2018b6fef626e2d20ffaf0", "27dc78d91422fffc09e4dd8507d02f1a28ecf63cd9e0bd339915a7287097bf83", "1d16bb59b4c2ddd9cc758b0843ac4064c991b87f6f0881d6d1b8d3bcde56b7fc"), ("0a0da2a95b770f0a158cd105c88176d163bd85e188797b95f6445ad54467cdaf", "06480edc5b0b2339b1f06459e4c52f9a9d2c69b014f211c119f39e063198b3c8", "080ee987a73523528e3869a9bd04e5326de664e7e76dde3333db240cd98ad08a", "2768f569f5c4484651fd2d10310a12aa0ed4e96fe895f65d2386cd469c5b2a19"), ("01664bd7d40b94c154e94e520aeaf656482c570c9aeb36731c08ebe1988074f2", "1d8937be57c474e0b4c2197b74ad72e316c6146e95591206b5b4c71a0079166e", "2e67b3305623065c03269afa819f11b114118e3f2a16818c12bf22c063413c53", "0f703b0136c897a600f942d06db79ca05caefa4c9a98b19fbf8fbaa5571f8210"), ("0e0dd3d832815e16db80594bac7b8b43f9fe8dfbe97c8409c076ed849aa11df6", "257d7768c9b606f72b2810099b4a82e479e540a64fde336c510749f3a00cf4c2", "145c4aae6f9edc0f4bbdfbe4fbb0d9e3cebb3e5c9d96787654c935eea6f38ec8", "03b5ad0ff7e3bd5cc07879435e60e46a644f42a877de339dc47c4d1695f86d8c"), ("009992506e78303a770a0a1857eaa4fd31bd973e9529f73db504dbf18f280209", "2bb60ff40eee5fb1c8d52cce2f7960fbd28fe5d998fdfc8cf78a20c3bdf9a787", "163b4ff93b8df24efd849f4c1d8ba1a21a1b2dcb4f1282172a62db87f0083839", "2b5c98930a6215cb7ec3078bca547b16a5bf877c71fe2763b5ab77f4587bcfb3"), ("076b43ccb65069b8e0f8fd8f49d7f595eaf41944b224d5b660a764a6a9dd5cea", "159a7391533c5ac465f8707449664efb0741fcaceb1207be9d8ad1a4290b2f5d", "25af558bf1e7e3405b03cfceebc7f9c892ea5713f680ae30f318358475acf660", "0eb324019bd3bc8c809d8bb4582951f746c1d996e2b7bfadf357b3837a27cbb1"), ("2511f0e24c9a97546563621fac5e284f0b84d8316fec72587aa0ee08afc43d85", "280187fee7cb2bdce7600be55a486435da3c26fd275cb4cb7292440400b36314", "137f91617f2879f15b8806ed75196113095b6baa82dce0b1ffd91d9f450de617", "2280165a6738d03cca64e45aaa34c3ea940a5ea813d5e0dfb633b45f68454e55"), ("26a930b4dde54b90f2a7bac105bbf66c26048b8453e9705a7f500c7887446e08", "0d2c1663dfb5b76e658684a3ee63a12783b2fedb858b5b4e862d15672f0272ce", "2749d7ef60561475fc444557c5e24814bddd318c2ed937763445443adb5e6cd5", "14244a751f663712ad61843064dc6b3a876f9e5346e365b3916afb74254b1afb"), ("10ca02996cbc1d0dd7a8efdbb5fe52e12a34378d915d7420e2e801b5fa1b31f7", "0bb688a933fd518e15bf712db19cf3b889d00b505d83809a98a08f4610d191d9", "08c80293585eaa2ac41b2f6830675316aa480fdfe72904200e844cd9eb9a32e9", "22c810c3c354bae6319762d305b89e1c3f1a0023bdeba37dd9e43255d61e2680"), ("0cfc05bb979dc3572df2dcc337744f060e31c1d9da79f81bcaf227db74cc3f61", "2ea673c94e48d22553977349acf999087211791fdebf1bcc1d0ec8abbd7625d9", "21d0ea38beea7df3c32e3a20984db67e70d130b34115af0273228b2f8c3ac709", "04f13ad282589b0f110c19923ec734969bc81f9022025d1a814ea09f0dff7eb8"), ("1afd2f1a4205cb6b7a180924ec5a3a2692a9c799535f20e6d43fd5ba8a68cf70", "27826a194d3e598a8659037ced215392e9e249d8dbbc0d960f3f59877103c384", "1c3bd6c3ee31aaec3837f1378fefa49a4fc082bedea60aa1145beb762cc64d59", "24e59dd324874e5830934eb5a34b3c391062ea102eaf7d61ded4794b281641f1"), ("2b89ce585b790181fdb9de04285393497f282c62d2889104ab7fedbf5a1b7ccd", "24eb7de6cbdf32306a20003a85212571cf818941353093be8de9aaac5ea1b61e", "2c645260c8ddb29225c3d5b54bbb173f6b1f4f0940f780da8ab0748b7f763597", "22ca9288c70223c88517e101c04674882c3183914453fb11034875d9df7179fc"), ("0c1e838a27a3008a4cd1d391e0d0f49257dceb781f71aa532c369698e59cbcd9", "1f9e15ccf60f238d3128d3f48f99c63eb9ae014b7b955f7fd31b4c7bf7bf7ffc", "2849754e78ac2c9e245abab173fb04cfd7ada0901715a927065c4dd3b0d73327", "1eed29b63cc2fad9d456785908ddec79ff2445dd6b6e3e9228aae00685994258"), ("30441f3596a9e1416fdd58088da009fdb37a4945a449ec1acf51826c087a838c", "097ba49b408dafc35c614fe68f05aee94ab7d6cb11d41f8ed12eb03741b00783", "231c1999e6d4d7f8f26898b9cd6736e093d6fdeff643dc502ec5ccaa4973d700", "2af629cfe433174d1261330d928ee1fd47932c6f31e198bf60decaa56f86d986"), ("09cda701036ea6593efe643ad20be01c5a18345f2c541b0d05f26985e110621c", "175281106b59f6b725c11e8a3f3fb9a8efc3d1b5b4969dcf800e64c5de037081", "2cadacb29a3a0e8daf77725e4902b3633515c098ac33112306674ba56f28643b", "0e36fd2c43fa19ba466b58f1514f3134ab90fe3f9fbe4a62d0efdc6eb850bbfe"), ("005a9ea434c32df23aee0eff27be4950ed0ab834696d04e849120a967e6ceeca", "09842317e3aaf3fec92513c0c9de87c420879983e7515dc5d93e0c99444566b5", "2844098469cfa37d9bfd189ed229b99a1ef11424bf67f3b1c1d45396157ea568", "27a6b985f65f2a7aae515269e0317e23effeab01c33ebabf8bc377aa6756b1d2"), ("08f33b7665c089542b4397d135c2b0dbc97a8c9a11e6493a92ba3a1b6162aa7d", "1cb0e06d13bd0eb6d06c4ab31f985d50ab3f795b286682de361f35ea5e836662", "0324ed17859618d65aea72d82ac28301684e5eb3c6d7f58550c19fa2e29841bf", "203264d83540b1b32ffdb02b81cddaba365a12324409e55a25988dc481229da8"), ("1fd978f5c19972412847d4ffad41080fcfe452f4342cf6d35659f2e74a67ecc3", "068adbeb8c769af5c67e942a316ed9be7f016b29b3f463571bf996df72281db3", "0fbe2e08aa1e948a01eb08eee708d368d1ecf12b459a77435350c65de6d63e02", "1b14951df3ab40a96d7bdcf541bc79db13b6df4a28b62193eceefd086027888c"), ("216d02082d916e9802b8516cf65e5989619214fe7510e1830d2f710ede522a04", "1ef6f2150bc861311f0cff9fb67f3e97f0dc63e6dc1667ab71fa72d9d1f2ac50", "1ecaeddadbac38e4bbe2f5ec676236d6a2affd1a9fcf47a69f666e92e26849f7", "10804e0419e55448573f9d0a96967432087a07f20c3387f875c27132df0592e2"), ("00aeb827ac4095130b751b65c4d78e75589720cb92a216a97732b55b5ca7f62c", "20b5e2629a6f580b75592f414a0bc2e378b94cda6df3b4f92440b4fa00c5860d", "0ee27f47a11e9864170c1e15cbd33c0c1a852e4f85a8614e23ac361a61a7869e", "1c94b93741eebc17ff38a2d23de333afbb6a5aebfcdf1d21b52e762cc71587a1"), ("0dbf1fbcb1422c63f5c47d6082291c05e477e010bedfcf16675c734cc5563fe6", "072733f37be96cf6d8a43f69c8b9d0419eddc651eef736d996c300527a4164c3", "25b2f61a07cfeac2d4219cf714139a15a47a6951841dd6b14bdec802e25d14ad", "24bb04d92c8a6d21ae3053ca1c051c2091ecc417252cabc2602efa93ffebbe7f"), ("099502ca20606c50b8a227c4cf09f434792db89b2670fb0eff5221b7ccea78e0", "09ae00ae13b8a707171500cb5a548d2aee6e9b168155a615e1162f00e5455fa6", "12b26e7a48c8cf4ec296b85b84609be33901d17d581fda4e1afd4ef0c2bc0206", "25063e2c487a9a9f5da9efe9dbecd875dee5b5d0ce83fbf851db9d18cfd37039"), ("2f63bf91c1cd68c306b00729537d38337b8d66af04ec40789f9a6c0215a35c72", "14a016521540a60de51db8127f91d090eaf668d9d7330a84f52575a7788e5498", "1f49857d8d74a3dc8afd4ef57563f1c0743f661b4d7b36f8674be3f722aa9de3", "1f1e03ab036c82b5125502181254aee1a0fc9c08abbda09c58139d35d7d3a77c"), ("144a183c3d4fe124c5784bf65adf4bd445ce94d254691fea259101478f8cfbec", "009e64d6ea7a73d2832a5e6e358ff2e944292099f8ed867c8ff436601f5684b9", "0546c5997afb615de97e2cec57c77b44c816a6e6598947c6add523bb2859163d", "107d11cf6a7ecb1b35ce51196005d3a91a44c256293d30bedcf9de8763e601c6"), ("12add423c906d5b29ef9c2c7d9b8c57f26fb32902ccb87d1a18194522ca1e105", "2adda61055816e0ed16e9f3cbbb66cce350da35162197a7436d2859bd5698f09", "1824305e06058daa27ce7de66d598374681d840aa10602d4b2adaa36153a089c", "0f41d52d055a94ccc1308946012fcfc8e398784180982d0cae3d4b55c5cbbe6b"), ("14bd62ccee6ae5154af0bb916e455d840e3eafdbb5e4b53da8b3250303a6fa0b", "27d30f575f426d6649145878abc65e8ab34b6a6016fb3d4a2b251470205408b0", "21f5f956176ba59215f7e1f86dea03dfa612c08d90b7838fef7475dabe38847b", "18bab88aea0fbf69154d247651cf17ea66f2fa11f6597421760a5fe90172d53e"), ("2c2f1cfe459768a2b6443660f6397c679a12d512e867eb823c903b706c9a7ed3", "12f45f3857fbc653d336865fef2dbd7ccc4e775a68a4aecce6758cd76c2ca5a2", "2b66ef78202c833f2705930c7af9e5e00fbc924246380e59b1640f441a35409b", "226d533643e017928618ed18c08fb27c35aed4831de9fe011dc29f1e9e4e1eea"), ("108fcb3757f36652c64e2fed7f3160a514c13327fb5d1a9e78a7372959df7807", "0bb35a0ed3e1f9a04774a76227cd1067a7d33488148017919e95186f75a84a62", "0bac9a9b0424716c70ecf1b079b1fe0b0180780bd46c3c0d544e1bde40da2445", "2facdbdc63be4f49702d80e874177aad6c939227c46fb54bb6404e51c3950ac3"), ("1f4626a427a8af160db80fac1e82725cfe20d657aef169d6192ddd848abeed34", "1f29eda631a55fa41799a4b59f951bf21517f5d9bea96ca4874ff49048b91acb", "268c8c2b638550aabacd3f21c8b1fa6997402abc7bf3df1fae793bd76723fdd7", "09746726aad4311de8529645bb44e28b396c9e9764ac5a709104167d83a1990a"), ("162f3d22b2c79d7c5a8999f38cda501174a0eee3a5de1bbccee816e539cec98a", "06ac134837fc713c2254d57d6a1c615fb58bd2269221079c858d7b520ee5b01d", "1cc555d6a5c2e3c068ab14c54e8ccc4897168e6fd8ed8b2a0305f844d6b480a9", "02e65fd39f0ca6d80fcd7cd561021331c298072cdd18f9eaa60b1e42f3de0d27"), ("1cde75f7deb8ac1fac612e153b087453536279c901c78a3812cfd528ca404ab6", "0bae9b43417db5511404fb402822555bc7409670adc3b345b13f4a01974d60d9", "1e67be53071d0f880430e508a5b6d8aa546a9635c419195d6805665e52ff0c45", "16d371c5c5adb075f0a5732342f23af60e4a0fcbecce705c4564d4fd0d9947c8"), ("0ca3cb6c66376cd4005b3ec802f0b93ea56ecca424db385e0f293e8e701902b0", "24bf6e1e0d92ed9f928175f9b03dc96c463e988eadeecade05d282d44594dcf7", "0f8106c8f48deee0ff67975d7d125355550b6efd0baebd53dd75d2415856ba85", "1cc7bcc57a7517d47a2f4a456c7b9c9a5e1cd27dfcfc19bd063281c872abbb47"), ("29850e08e3381d4fe653f3cc1057fc2796ed1e85a24de9d317594623469952e2", "2527a863e825a60c06a38b12962f326c7dc2b4cb4782c34d32002ce74e88f9e2", "1f2a8f781210fe767c30a44b1a431bc074b7cbef4e4629ee9174f3002ae38185", "0993916fd85369e3235822da56bc2bf6bc73b173fe73ef800c59135a1612b9fa"), ("224e7a80b775a65e685ff129d58ae46debf6e999b469b16765ce7a4149728974", "02e0bc13dbaa079c9e651da0711074272b00b3c3f65692b55b2876079a067857", "0e3761f3bc30bf437115bc87b06024f1ec6e3055f6d273b4a6e9d21031727fe7", "2836f584b0ab78f223e454e125d8e7a0e62cbce9c78da571d70b14b33e799b78"), ("257236a9bc38aea6f641ca373871179fee1cb75babf85bbf4fae67b69c81e5d2", "011de723978d3fddef0a5d806840f8fbfd87949fd8a76f7268fbfe2f67387230", "0eaa8cbe0d8b296aa3f7006ca932ffdb5ce05880b6ca652c847a83b79a89a5ed", "19f7fe6d3fb49c50f58efd70e10a795178fcdf1cf1cdf3de16875b9cb4244c6f"), ("0894346bad502683569b9d378a73efe6b16d186ec87011875159fd552be9c21a", "1ebf156eddd1989b68b98042be52d1f27fe7366abb6c4726804c3c8a2876bee2", "22dd5886b6c9b761cd1948b057b2edfb24cd704996599ddb93d84574551c9b16", "2690dba6690ee7eca78f972fcedbc02969aa562a09ef234a5d1d2d077fa7dc5a"), ("29b9fe2e245db1163c97333c3183dd88ffe16052c4362f5fb17aace1fd184cee", "08dfad3a8c56fddf062603fc627c4cdbe9970f8b2f606ae299bb4a63cd694547", "0fff62c9ef62756b11e5fa71337848fbdfa971f714d40c696a2a63103e952bea", "07431f47d3967655189e510709fc7180050bc6ba5bff705c89b4bc2c87400ea0"), ("05d4b58b5bc474d22490b8f971f39fdb6f8796771e1fc24b631365d51efff44d", "2f33ef329978760952d81b74fa58483ae59f54e9a3ece9cac86e96213dbbe488", "1017580731d60d6f0410e1a9c58e84eba1b23b88dd7cbca7abe0d64e74d4a2e0", "0b58b0197f3fde99aa3da6b2cf72d891ea3d209b51b96f43ea9f0e4c86c4a7f7"), ("28cb5ea387b9f5faabaf55428b7d8100c0646bafbf08708dbc8a13bf668609cd", "27bdc5da92aaa89d1d8b19f7efa56225ffb94100d6f5fb0559ad6ba65eb344b3", "260732b7536740aa577ef527889c97ed92298af5b92e42343cb4f7015d58de47", "272a65771639831d350b52ac2e9660bdb71a0ea497c2d3b15a5f640323507673"), ("2cf50a60c4228700462ea0b99c6bbb3d487621b290373df11864022e01cdcd44", "028c45392e9e681c11fb5cf9aa73b96c1518580700d990cebc3b4d2ea132928b", "03fd24e88fcdcb8f51e095dbb5119b4520de8c178cd7b26e9527a233122dfc54", "2370984cdaf20076b791e1c77a77e949ab468aea779ff4442b7fe94a549a592e"), ("0d0026620f2a1ab327b261d639d59a2d5f744a803534434e6f1e701e17448f3c", "076f091c4d8ce4266d824576f1cbb107f0f1c776b38f72005ce71eae29f28c58", "0c63c1b463ebfd7a2a5813d2d4e306cd81cacc16dae1a2be6671ee893baf5231", "1ee3a52ec26e8f04dcf4400279166cc439f7eb6291ee911636869e71cd203984"), ("0afb3473f9a1f546055d710b930e72a8673ea49c12a45028bdddd30b9b5ce13d", "26e0d872ab51d8efc70ef20fb1b828e09f5ad9a3bd11260cf115b7baf933087a", "010722d004f9808443910e7f4b3f38ea6e807489e1062227a635511ebe2060be", "0ffbc4d9bd77d4a819b883f81332f572ec7e643c702f669d89aca0f6298ddca0"), ("1aa89976f790e94972dee12757f11ede48dfee70558441d5566588f9b27b9e5d", "01980d703618c743f8548341fbc84e19c686c53750b37283e96b6fdbf5c6e529", "0476d583eb1fb9172e506a8f0205d8b806501431477bde94f0ba38c91f6c5536", "059e204b830cd437a70aaec1617f47d7b3bfd6485ca9f02be2b4a65bb09f9920"), ("1d60baee8a72606f76fd1e9ce66f5b305db259a2295e748d3a8f798b386f346e", "136787f20ea19792b7714c1f7b4b8d5344ac8e3531cc16905a05042372fb5b09", "1d065bdf9e6cba5560d26781fb4a666abc5d09b79e4c04c564d2548159ce8104", "0d11774fda94f9a7c381a1cc4d6bdbf7df8efc00e0b5dc11a0f72f9f20e982ee"), ("0490dc631ec8a25cc461d1f68a0a1058db8b202a8d82868ef7da70e9593bcbcf", "076ff04197d992b71d409db99b054a77e3da821948402d32e80490d4e5882f49", "1d1fdb42d622f2b0f716189de6484371225cb78eae36d556efad5e3ad254dc19", "080fc693027d4889da55ec886e271df5c01ae7eb0c98e6bea654cb23241c1792"), ("193a56d4ca6df17af6eb83bcb002367329d493f9aec2838d0e9ab966134ef57b", "183df846c0e18a105047f945170c2b1a41fa14af2fbd4176ab03e68e9e42b11c", "027a4847fb5570356a0fdd0b1dce885e62824f22f45d913cb892b476af0dce87", "06d95125e71a123de10dbcb4cc1d9f8974f48ee098125ab0dcb3c23dc89c75fe"), ("293400aa7fd4579a8ab630b27448991ccd6a5added89068e7fbcca25a546efa8", "27f536f82c308275bf704eb72a7ed22ecde15254dae125208343dc84fbacbdc3", "12739113bf482e2f26be96e0981c2cf5b0766bf70d6ed3ffed7c171b3a8bc43b", "2a32437de6d4e9015e113c71e15d6619013763dd26b69b99c2c5bfea2178909e"), ("1c0648034fc21a4bced3838c85d32a08cb0cbab7b53eb6e8c444e88e03396ea4", "17ae74b204b8a5b2496d9b99cfd38e55d731ee6696a7040dd06786e0a52dceb7", "056750f29fd58e4b3c5f734f4159a99ebacb6c8f7f96b599b8e6bae6946bbdc9", "29498d7624c74ba7e96ccdb19f7f43c96733e1805e9999720294fd05b297c8cd"), ("1531c38fbb26efc667b5d6926d2120ab4802302a970756d9a6c7e1a9ff6486a6", "2acc6743daffe2d2bb22cad6a316ba6f0a20355f738f0d89b6f47ab2d86645b2", "047bffc0409054564d4cc8459a6336217315c3e59bf9b7e8346ec85ee4b63f92", "109cdd200352f0178b3cd736e5acfc42ac4e9b56c32b4b7ffd1af7dd0bf91674"), ("1c25127b29c560c0cbc7662e15a6b1dbf5a373796dee9b7e2d46da9d02a3b359", "01e4d3da4c6db452b2d88f20e9e2f719a5d76855b98d10ba7027ba9e029c1caf", "0933d08f8779626ca54c8782820f477bbd9285df1ecea2d1ea74e46a93d270e5", "0a1f390a2977c486cae19ad4f8ecaeda7a7b7d145bc46a03c49566356133b66a"), ("0177713439c598fedd4f1974f702ea6fbf867587cf9dd792b700a0e4a281525c", "28cc7a0a06ca95df6556f9b0c5b2bf60d5dba6e366852002708c9c972f4dd64d", "17d6f9691b38622b7f60958cc2d4b574a4a57e113edaa30cdaf22aa62172f214", "245ae4d4913b4708567c37d18316141a8d7e8c862a87ecb22af3c17f65a984ad"), ("022b142134b1c850cd584867056f373b23f41cbb7f8977b08af1c07123627b1d", "222a9d6862970fdb0c64ff3cb82cf61c7331d9b96a8e61e4154d7fb2317f5a7c", "24d010b2733d2dcde00749519eba426733721acdf94d7b598e0e3d46f315474a", "00392fb01acc6cc17748765ce88c73830bbf0143855da15eec07c403f052fd26"), ("164af751641818129d9b1640c43eb55071b8dc2ad6fa7f97d745f3e4603fa772", "08be56dd79500baa29fafea836ad5f122a1b66c6b3775835d80cb31c8a5aacc7", "02985ea900b2474b7aa505d2f8629126130ec866c18619032a3292aba5251c43", "0be7c41b5a9a84921f53ac1e3a8e27d6bf44c9f570f7163826122ea92c780bad"), ("0d398f237d8c4b3ee9a0094e9c7b4d9f34c3aa0b67b0fd71707b92461b197c58", "17bc92eaa9adab7b28f2483cb71251d6d449e87e0b07fc842ece45885a60d9ea", "05d29258597b04aba7ddd096d2402525acffa4e5fdb53e11dd522744216c74d4", "262fe62402907e90192e0c10ea650363bd8f7e66c034b3ad0c33e205cf03da44"), ("083b0f003a78af5776e698d88a3364395be4993535793fe8c27fe312bdf336bf", "0e42748cf75d0a1e31039c0d7f76f577c1fbf514a55c83e607471e379fff45dd", "123965972e3555c6aafe45c317d5a11fdd63f82557ae0498db1663e10cbe1204", "1cde26476676ec46a3775a44cec125d1e3174a67309ef4d93cd27a5cd05f5ac0"), ("0ac8d7d9db6c0b98fc817c76a1dd71b16da1661ab775b36baa30509edf8a7a4b", "0f5e950f2c658a08e02318bf6bb3955f32f2dd7b1b0ad10d2fe4a667de07d685", "030dc66651b61a7a72ec88b69084e68acb3bc54aee5f3ecea82ae75dfda01e84", "1c13c8fb8704600731b4cce2a44b42a36f506ca1a56f215c2e969ec425c89c0a"), ("2afa2f6b2e808fe9b0a1e204679ca6526ca62bba068d63933312663bce6514c9", "04a279bfcdefbb4eaa51f725bdc84ed58f9a087a495bf7671829884de13e1b4d", "00477111a1e3fa01384cd38042c11efb5d9082448cc8df591a8573c71bd4ceea", "185f3afd6bc18280568b21a416dde1f89be0c6fe7a7286567670fe3a34b631d9"), ("1f6e84099ab4ca0959bc54c869fc50a69ec9efe2d770534883a56ecbd6a2e369", "26586feb4633c70966b77e2e678edf4ac0487c54a76582216d6ba3df467426fd", "1ea226c275b25aeeb53f7665630ee8c6980955e38e3c4bce2979e2db2026a3fb", "1b012127bd3615e3990218113914677d04a641aecb29e9139a9c68964865cd65"), ("0333a0b05f8ba605008be03a3c0aabb7371ed3d416fb95b5e5cdba0c1bd00745", "0c0bfc1c10fec895f8980fca0ce636e4bc868aabea27755e3f6519463dcc4754", "2d57d9e91950bf19a36561ea92996ecb063030e16ae345363d71d91822db164d", "2f475c2651dea59440af60ff3e0357d379dc5c9017927baa0a92cc197e60000a"), ("1dab4711f990edb5181e39a04b44b688b0ed437c0639408eda94e0cb061b8880", "052f93e6fbabba32692d74b98dffb31fd746ccb5014f58e13b6be4315eed3c5e", "044dba070d34137a5304172f99be31483b9fa68a98da0eaa313d7227ece54146", "0db13e7379b9d95b8335a96f821c78a5981b8e50345c458ee55d178aa2a1410f"), ("2d8cca4a359d6f890c0e555f1ee969bc47cf5d9314fc1577375aa0a0cf35120a", "0162edc4ee7840c5b309745fd93788b39c7c5407778655bd384c87dd72e5e778", "2d77fc468c39511d1868715b67d244c44143eef78b70262fd91f24a9104f2e0c", "1f5dbdd00ed0e4f52b455df83e07ec2ea2f81a3f0cf03b7c9744b961db03dd77"), ("0b113a42946937b613d679f5b5e819b4033a358b59d42ac718b8334cde5ea98c", "1c982883787d82116aefe7e3c772e592ed4d979f92348de455d2b7adbd0d2502", "13dd893d566848546cbd8c252c08e250ceea48c87b9bf1aa0a0b09f2fd264ebb", "0db2700885100e78586f441b83fefe1798d0fb7e19ec5e7903e655218edf1de3"), ("0797d5c0d2db440325b96588bfd71cd2e9c705e5dd9067d7f9c3caef065f043a", "17b810aed7d4095d4d894cb4a79bcde6349611e88b5cf02a2cc9b1ecbc505588", "0e713255649037954392c4ce8d0e5a1d9d6ba2c26973208f56ff4dff998357ca", "03d537100b53732585f980cd32d389d5c4249917b3f1a29a97d29ea1aa6543d0"), ("2fc7fb848250a588571ebf7ef942921e486193e974c3cc273a560ae30f23f44d", "169cea958c55c20a496076353544cd8f5c0d6a1ed419ed905dcae71ee87f45ee", "2e2e1f11793e4888dacaccf9643ada0d0280e06c8d6ea38214f26bf94ffd851b", "281077c226d361adab4fa420f037de3a785c04acd619eff0df49cedb4baf06d4"), ("1a70547c7df9465603927ad9ed7d70e67a5521f6a5265828944583f8418ed5b6", "0361ff8e48a22f3dfbf789b2431db2434fe6c0a7becb0379f82281bfa4103f07", "19278e23f43a268a69393b9a984c8adf1fa2c59e671165738f1a7ec2e1c711c7", "06f0b60aa9f852ea439cf8650564592234689e976cf25ee28e45cebe29c0d99b"), ("0a082b337eed1701670b38ba125b60810bb4de5ef260b672d2425130efae44d8", "0e9dbb2115a4e734b6d9cfc932c4c071ca148df822c5be1e1e28f7570a34b40b", "0022be95ab27d11dbd636c972dc1479036cc45cce4fa409a6c8a164fbd8de412", "2ea9ab0202b394936d4fbfc2dbd4a8001674fba4c0c430e5c3d747cf28217975"), ("24ffa81798f19bd8011a62f06d9cb107f91749460a408f4ef2c5aaa3093193eb", "0cc43e542d62ae46b2850d881d592ffe362222747702b7e502209ee96b0e4bf6", "1def7c92691ff4c24920bd1b1d0c99e9dafffb33c428df87e5e23abd1f31d8ab", "25ee0b28d3c5c3f83e229ee67a4dcc6b792e229062e591fb5ed3a1d08cb86d1c"), ("0589df607ffd549a3cfd72b6cfef21ac7a74fa7f338683d5b40465acbe15b9b7", "02d3e375651961f943330e8ea0fe29e89ccbc265e57051c76ce063395f7a7b11", "0a8371bbb7739655f5b5d9d31469c1d11dd9146ea81beb05e218835e01bacdf7", "142adcda92180a7c06d1c59c0096b9dad690f43fe236710e7afbf1623deac4fa"), ("23634bb11adc65bf78aa924405ab9c7e27ce89e36918df634bd18aaba6a50422", "2f00c5a026b69de5ff5dfb0e2b81ec50f65a56fefeb5d2829ad1291692bf5be3", "01cc50efd806d9263373b7bb66fd62c982c351e95726dfb9f185652d9676495d", "05d5c5e3b6664f5a5d3312272fb286499ba57c8d96b5973ce9c5989f5ca3d2df"), ("1d3aa9aa7c917fc9029f3ff2dd93fed66e66ab206ce96d427b9db4e57d3fec43", "09ef291478c762a40363223a7689fc917f46cf5eac6319c5d42c533a3787c6c3", "19314d717dbff08e53561484f7d3bb10837b3e956b7f8a9470ac5a8692e9578f", "1a6b879fdf8eb14687b54b16d5b6294a4b3e6c45363ca53fd70fba7ff9b79fc9"), ("2807560dcbfe4fc9c8d42047c5beca9cf1db53a0717bcae1fe61f86a8e5e0dd4", "22df5de3d6ac847b00fda5511ccd8f2daa61acb04d6fb59f693f39f17d26063b", "0d7c223e184737788c93dffe86f6ebebe3d3f4d3347a0b3dfbc1925b5621c758", "062deda6aeace4573b1b22bcf0abd93b0eda7b7d37c0802aa5cc34ece233f3be"), ("1eb6caccdf207a7a37eeb92a9328f40d07b4e218db5834fd05ae0eec5cfd4ee5", "167c7dd7efddbf971e6b37a9131490a4792b904ce525ccdf7f516c71a083184d", "2b5361cc9b090650604294ce6b516703cabb4e535ab3f6ba9830209cdd3b7450", "21dde9a49497f016b81c4e998da9e76ec5b9f49e588d925b02e038e379c80542"), ("1899102f8fc4a07e6229e7552264aa02b57de0eb74105a0ef4bb567c2c2f6dc2", "189738bdc31b597aa8767cd08c0d740c80e374c67831daf1ac025b5907daf00e", "005976c339ecf97efbbd42353fa57e468aa150150e09c571ca67476156d1fd49", "13c5c01733431197e044fdc3d98f981eeb7b9fad0c4bff67daadb5e5fffd5560"), ("217a71ac3e95cd127c051a873fa5013ead897061db336cbec34ad6d6790415d3", "1f719c3bccad2af6a16dd8766f78ff1aab15323201417e87f161cca92f0b843c", "217dc323a389679897614172699aac5b007df1cd240b9b5bddc54ef357000044", "0491f88d37f94bcfc704c3b762f5e706d0fa74cddbbe5b35b763b89abd0edf36"), ("206d2d9db157fa498b38476608d3b849689cc81baf2f25d85f0a0156f6ddfdb5", "15da8da555db34de1a224d4626520925bb406073215fc20b9fa0e3d67719a53f", "1e526362030ccf0e102bbd325d898f85fe1fc28f8b416235630bc708e087e094", "2ffcb4f55a222069c2731cd1bf06ea98a8c94349dafd81281e7fe1a1b37fde1c"), ("2d6b6781bc890d9a1ecef778b682283302c506f421ec019f3e1e00f574bfb19d", "2d94061dabb7d77eb562e7f8d53caf8a2ee6c8dc1fcee172428ae34c6606d0b8", "1daa7742c9dc370aa39ab24b701ac94f059fa457e3ea17f29f10ed4ac469d82b", "06e58e26b77e95bf050195ad3d1f88c7eb48e28b0324d851c29606a1592e916a"), ("03f03765bebe70ceb6ba5828c8ef1a5d3c1015876eb9a3cc0c36dbb4bcf4b7fc", "2e0b80e86af2873dd63f092a932f291762202746ced22e3963a50bb9f9226da8", "12cb2137c74420a30775c5028c3c1544c3c4456162d6d175016c2b0c46f1059f", "15437553bf417f3fe8ac910fc7b6630d7c87c9840f3f1f05a56d77d0438eea09"), ("1f25d7ee325457f2de556f7b725cb45f0c93586984ceffa2ab66c02de9381d45", "21836e95d6ad30a088b4c45d55d6761273f47180acba34b3fb0fc6dc6492412a", "1106de90b82bc4c57ec87094da6fd14e46880cead6d628b7250c4a3d094bb926", "0b0a58f64b7aee7bf5ad2addb4058d41fdb7124d4069a41bb64a1e061ff70efe"), ("278e60a92955f23b47687ac3e1da53a81fd3808a32dee3c5b0b2cefc44009bbd", "049c867e6632731e048c8b73e042c68b236478e248fcf0f189c6d2990b47d797", "207954ea20ba00a8654c728789670737bbcf97344435c196ba6495d1f16b1104", "0032fd65d97ec2e6649c2f0b5c4fef1d93cebd4c879ec1fffa017a7aa1c2ab9f"), ("125e14a2e30f9bd123e36c207fe2eb3742a912a8f1376f30c4c0d1f3926b64c6", "2647ce9f012fa7b18d14fc9e92a015764a70e41dbe20c0aa209a5acae4dbe883", "2c31ea0fddf984bedb15f9d5287cbe935b322faac186594966300beaa2e14c99", "1ca2f19db4abc46282108aa0f556120de05103318f4e3d11f000d8e1fde8bf50"), ("0681e5c196efebefb69ad3edd21ae9fdd58ac51acfb5152dff9a83b64637728c", "20896b7f0126d898a36b914c521392768c37efcd9a83f4a142605d60813e3a7e", "251ee9a5310ba6e07f2afe73e2066e0cd2c9dfb9e27232daeae2c12ec97be299", "0bc6242fb9bdd17af6134cd083a2c4224e50fc83997fdb369ea0a690ec9c8187"), ("04fbc04ed68a00f1b81c4d36b8fb377ddb2d3dce597b81bc43a926c801f30464", "1dc131ad5d19b2ffe75ea1e5df6d83f11e0a848ad578d242ef891f35e15e3aca", "035d71fd2ffefd68fbd5588d7dea91b9801629cb66c923c4d52955e6b80915b3", "171b72ab190e2061e663dc15cab00e67c755dc5d4b2b0c03943d96648a6be1d1"), ("219987a0bf63452b12cfeb0bc57bf50b85fe53f00037f3861faf4ec872d83a21", "1cfca434205185124766aa6f93a0e55d13c31920a22f0c934d46339f7c2e08bc", "0a644939dd2083556427709fe716cb164849e9ada2f61dfb5f303515fd7f2590", "1d83577121a55937ac2a699bf0f8ff84fef40811931c28097e372f0feeca5d88"), ("1f46af7da0ee6cf84f0d93a77ce903e5d6a08a274d6e8c1b755bc4430d7faf20", "19a12b7584572739d46d53d764120187d87a8563ae52547fe444f897a433384b", "0b44c696377e9de3a3522a17c2efc599319abf4314914b01a1f50d697c572e44", "241c58ee4880e3cc86c1680aca7db2f533bfa5b1170b2fc11ea49bbbce78a3b0"), ("26488c029e0d382120305c85340cceb67cb9cf7b20449760a23beab0df2f6c80", "27b8ffd53b5bf398dd5ad8771d2a51e253c967f4b55980b4dcd337aefd3372d6", "17a9bac8f422c9b6afcf03dab5e09e9eff4fafc4e98943813c6b842a060032f8", "1d061c70543b4f14d38041c3cc7d397ce6b7cf5caee6dfd3f4cac1f7b42d0139"), ("29a9c15364d26e7a4a1d01228bbdd7eddb5d42d5061892a16b3a428d958cb8ee", "1b58f6ead3ccc48dc1d90a3b05189e111e4444913b5bb037d1532372c5c4acfa", "07c0c2db18565a325294bb996b696f8bb83e0cc2da01c787634a19bd00b6b310", "043c0011dc0e79c9d1c09ef9579ae6e02b5ad386ecf585fd06b2fd1951fcf3f7"), ("0eb7381f70e60a1aa4f40c56ce388813719fcdd731d337ca8c1d3a106b1c208f", "2269b575939c1570b2c6e35e6b81493d10e11b88d54ba21179d0b10383a785fa", "1fd5d1635261f114cde7080dd939640d305ceeaad012becdc2e462a4802f5c9c", "00a1beedb98c752eba874b1b213e2a53eb464a17cc0a17997d2a91592cc8c415"), ("0a5889be20795e2c61ea4c3654f84b54bee9cbca5b5100e1b42ba76cb4ec0770", "0ab8c9a7b4cdab15fed92f82811806518196bc78ea061d81b91f716840cef4a1", "120e02d006ed088ff23cf21089602e11a52d73a3e52a38da8b0582c6c36b0eb7", "141fcb55ef860297c42cad2a1f557df45273115f3330b3e1afb15ae06cad6b50"), ("0ef07a81712e15cec1ba3066e91cea49b568d19cf3b03787c1a8939922aae92f", "0d9748a50d5b2b59c494efdc181373dc735047549e4774349e05623b8eb8cb52", "0ad9a03d370eaa670687ccd991b8bfee7e495605699bb5ddbde89505502ff654", "12abfee9af344ac73981cf5a942f9944b8dcf0408a8332e34e6bec7017488261"), ("0c451a5468a0608955c49b406d2db5a7b64fb62d9c3abc82ab7a09f7d3c58ece", "006c26e87e510533381ad45192ad30495f0e19f2508892bfdac36e901c677439", "0b6ee496557c9518642b3571233d3e14e4538b4b4cbd87d300ebfc0e2f4769aa", "02b383c65fe0599f274288bf00b228cdc5443f4896c0a5f8d074210f9d756979"), ("1047a9071bd2205a691b3c243e747543b46622974b1befac747806085962f254", "236e05443a691f8cc5b3a6c4ca9d7f0cffe608fa108217e58bb0c083f0f994d0", "2c742d41520c7d38052a6dd1de662a693010aa0d5856e3012ff175156d68d6e9", "2ed030ba52ac9429862c9794b55445eb7cc730c0fba7c68df10fabb817767c79"), ("17d952bf49e0ae6af3f9cbe769ed2afdf5ea83fb1310568ba202fec86c405e27", "2251af0c1317574c71f8064e7d75b6340fdc343172add9b5a49f08cf5a983fee", "05a5400e20759900873741bcf732410ae833f6e45e070de30b1849e305665ba4", "1fe10ab2f6a531dfb8bb586a0f5f3432ffaae4f344780ae2851f284db3b02cfa"), ("0d6df9412824bb6d42b6b293e61b7d7a0eac74a699fbe1ace3f8f8122a98f43d", "20572d1d2e3182de85e72b6fca715da6a54a9e1ea6599c9f7a731eb5f81a38a8", "12aaee8a899b76e0cdab19342772e9dd594966beb554af53590519faeacd0759", "0b14f09b3a8dcbbcd133c238cdf38dad0af2b3a4afb0339801362e223067959e"), ("21353b6b963270ba1bdf7628848d31f0906e7bca79858f2c9c905e3cd6642ab0", "0f925557a13ab32c086c637624bf592c097daa0cb50a3b2f0e70d53f1030b788", "19916ea55242b7d067c3aa8da5b42fe4495fbe91015fdfe00f972d2a5454ca3b", "1b4e5f9ac099af4894889a9f241dbf6aea99a706d127afe24274b5d97de2c70b"), ("05e65406189c5356a3e1648796be390f855f5be2ae64fdb15d317b6dd1b5cc9b", "0dba864ffa97133b5d0e61026e62d3b913af163b868ce056f30fa213614a0701", "1ba08ceba0cc3187a15b3dcc5b6febbe49e8d6c169f6f24a4011f7e05e9630cd", "23dc914ca48f0bd1c21cdce968c26973bb66cd4212d3673fdad4ab95ec1b3238"), ("016490914069c5156bc55bb3ad2f83e66389dd2b0325e166394b0eaf3f89c37d", "06155483011c51e6bbd8622131f34d89da51cea33546c5eb5c8f2b2e58fda74a", "2b88ea7ecda21ca2f3aa0b5a0efd6c1aaf83efa77e27b9d2e2b7e1f6af2c155f", "12c61bfc9bb243516b7e71080bf70df486ada134f2142b2e29738c943db115bb"), ("1e5e8d327448460bad4f2f2cd4d2ac57e605859945803469caba9e3fb905fee1", "099a2ac19d2075555a6d72f047a650a230488805ef264ef4fed9d05f94eaf0c1", "1cf8cc78c3ea72f09b88632665627e4586001bd7fd27635d42104d4836b02136", "2376ee558b5f72d663e4aac1e13857776267beb0d45a1cf002e65fa1ee699723"), ("1a2d32c2cac49fe18be0222f06c50faba489b29857ceb11585a206b72610b754", "1587ecb5b2293436e9e7217b26053f58e74b6b0c686c2082345baa215ee8842f", "0b276d5046acd603ab567fc1709ebc148d4f422aa6a22906584018da73d692d4", "275dbd8e3c576e47f3f2345d38c31097dab5feb941bb449c124c543dffcba0b1"), ("0833a536672bfe94f9f0c86668a1a7d1961add2297f5eb05cc59c6a805e2c3a3", "03352d2ad6aa49514bdea951d25ccf829befc35ea3816d1f64ff8484a1a5c7aa", "0192dfb8f187d65d0546d4c03a47cb0713f5123570d7e980aa9c3975f0d83477", "21056caefa5fc8849881da03aeed33d4bfb933260010bf3a4996ac5e8f284a8e"), ("0b55aca141a7a40e88d600ff1a2a12d582287565073eb424d13bfb2f662a5324", "2daa07fe5014f899474d2bceb7319144611e8a7a5c237ee8d62ff46c1bebffea", "1b8021cab28aa393cd12727dd19df2d2c567c3f56d89b8afe77524403f46f416", "207319059ea74585ef45b2912ae6c4617d94d63f4ccd4c3d6e9f0fd563850d58"), ("19b30de9da60548ff8e295c588454405a9ab3b65b676a43f4930286d21bb8337", "031ecc8529378951c405e889077cd79baf1cf1520a034ca65adbf02e28b98767", "1126635b9c0c0898cc21bd0158f7c4ac45330829287c9ac6bd8fe7b60b3feb2a", "0ffcb5ed356a61d7b98926e6799eac7b8ef33119f040b54942e2e7a9eb4d8135"), ("1d575d26f1963aac8915d1ab0a645dc9b47b6ff9ce38348d13734d2778d43cae", "09c71cc6b5cdb509388fb0a2d38e0634ba0345db0d561f068274a33d2f00a3bb", "08615d7290cdfb739c81d7499f1ff5c3b186c2879aa9c78c26b278ec3bd46d3f", "13af84784943404c955c9c78186861adb320c82e7a6f1a6c1c98e7fd53d540e4"), ("19be49663f67d888e7851076d156e585ee06fc8deb4d5077f43870043e8381ac", "0bf484b9a9a366bf9f7d73f80b5e35b9af61e2321846d700adbab4713f731764", "08c3d3f9c8208444365b4970cbe68d63541fe3a565d35b44c6c140bd36f724e6", "154d5d39d45b74f17c560872d76654fba6125eb9b89a92803ecbbd3bb8c957a3"), ("163cea3bae7f30ca959ea777b2d73670fcca5b063bcc66aa412fe0122dd0427f", "1de6a7c7ae4bef35735bd70a5a37ae82aa2e39749e296939513862b82dba0e3a", "156e1e5eb0b133276ad70883ef93f59cd0f5c377e7153672e7bbdf924348a807", "0ae8e16147f833d6cd8a95fc321c122636fa2ca935ac7aa21d4f4b183a5daaec"), ("0462096605cc282b86bda7d1fbc196f0d295bbd088010727de52918a0ebc54c2", "0bb483a2bbd0511d3800be2fb4c6dd081dad4d34459297d95e1f231688ec3775", "0793ca169751321be71de163726b4e41bffb969c29d786d5d86568ad0f1206c4", "2b851ae3e225f52f292290e713f341242524348c098c204e608e4ea53519f853"), ("225891f073a268e6e36e8b706ed963e56f2cad2cf528788505c48c89b2872a29", "2d0ee0492bab421e5f3eedb88e0896484f5be3973ce1273c1c285077bcd1dda9", "2d9f7e8c240ce0fd3e6d36cf90376a4f45cae8531e386c8d78bb686f78f73c49", "08ae9b9d9852cab2ab7a5346bea7f5440108d5e5653eaf8301aa3f7cf85f3907"), ("09a97451cd34964a4b6b0d41fb1f9588a14b5b8c7b6101d3f6daa6301d3e3e2f", "16abb8e00a98f35d9a9f3eeaae4160243c35700604cb79b73a0d1101e5b9d46a", "10707e5d1d8c3a38d44f7c59ae3b10d62c90bff5a2013d5d795df5ee0a8fa8f4", "24d7fb1844b7540ca79351e8a3dcc72ad1bc6d6c74ee8e8efb48e277a7f3accb"), ("0faf87fea9037c0db68346975a2e9f38b5fd23219647935dcf34e0392bb410ba", "21a218e402915577925936770c061753e1b466b819ca98e828e30a4593808ccd", "053be4267b723ea58bc4c0c2f7097ea38f11f731c4600e5a28d21ef021e616f0", "1c47a86b034cf8a64584b2aed141442fd104dabb76b7364ec5a8e8d4b3e3162a"), ("09e2d607c565c23be2555b79aa24da85c5e5ae3cc0fdbb3bbdf8a2e083990029", "17228fa4d751f24fdf654a7b65fa811088e6b521acff876abd5f3338ec075dc5", "0c32ae4b5660cbf1b8ee80dc2c09c79278622dd9d8fd3578e606866c740f5a5a", "1bd4a825268456d4a0167d47392fb258e70868f18a9cab8f4f965d7854ddd4b1"), ("1cca67483ec043d83cf4442ae81fd65f6113c6c2159615aa9ccbd27b8b4fe99f", "239620a6496251b0705700c17df30d023bf6ccffef89e19a1d6e442358f370a1", "18bd4756ce8cea36f35c1a6c96ac5ee759c5a4390cece3d99b04803ea14e9e54", "061f13ab5fc538aabca88c101986da44166ed5c56f0945a624d7e8a02940eb75"), ("0fc5c800b7b80151fa5720ddfc24dd9971956e2c08805a6c24583eb56518f708", "14168faf5d962c9c9642ce67c54dd22d24c8e65a64383ac286aaebbbc52072ed", "210a86dea3e0de93c56d9d0b5fb1fe2a0ae80431a61c00d4242295e599fa7cc2", "08b18c593f2432485028a6d8fa74ee4de4f7b8a7e46b0a3050401beee9136e8d"), ("0f6128e12b52bf912653dbda87a015cd49789d90738c65020fd0c2c21d04324f", "2d6026dbad829687c4feb0e64b0e29cedaa70b00695033c5e124d94b0bd8bc24", "1936a07489fadd8cef53c0be18e81c69ea4a6382132fbca6f2203436902bc9af", "0c9a0b87e8f29b0bef0c3be8f912949ef712208a9378d4c02d4024aa6acc82bd"), ("16f4df7a24302d99ef2ee1d49d1c6f0123d8462afd41f120668ffc0ab32c1545", "15c22ff9d5b64be2ee23fb7248cddfcf8b81d0e49fe82328755c9ac68919efb1", "2c0173ce3816f3be7ec180f1f2c72b78bf04974972d160db703dbee74087b5ef", "157c59d764bda3a4d68be3c74e7efc93416d25139a55e45d470c60253111b9b9"), ("2bd1a43d345fd49bc73f625a304b956e35441e7d3db3f14c4d0628322f36a039", "1aaaaba3c3fe07f08d75b1f02d1e120172cd1eb2086d0423f91a90dfcb38da3d", "1a7756bc5e40115cc976b9e03d935147d2044266f3a1420e8bd488fd9aa0d327", "0d33502bc89b0625bfeac5174d3918b6183507e7e74c1806be801635439ade6d"), ("221b758f07a502bf4a9991491d207a5d107cb7fb6116555ff48e069075ab4890", "1649bcfee6b1d3df3e77f482890ccd37de12ff282ede41dc66184624fc29861c", "1dcf802cd2b612c876572f84089a1547b42cc039949a6bc14f2564bc27dd8072", "0d359fb868e1f17e26012b346cc47a21def5b28a01b376bb7a0e12217a11e95a"), ("2e24bb12ae097bb93dea9236843c3d06a1bfcb16d99def9da97bce0c03254e4b", "058ec539d639fdb9b07d538b896bcecc82dde3dbba64e5ed41008a42fc253cff", "2508f5128bad70bb470c5f055e46ae9dd0206628127dd28ac928f3c6a223a1a6", "19d02f76beacff8be93f095e848b40d21bf218110d078e96a26506512b2ec141"), ("015da98248984a2881afa907adc1032c596b2e64f5bd65dfc2768e7b513ef472", "08618efe4635ee3036169d04e29002d1bf3bd5c5e3a71df811c2db9d53241738", "157c1f50251609215e2364507c8e79125bfef6950948b510002da1e67cabe8e9", "100dff45f41b2cbbf639ca5b87d703978cf4c57700c0a540fdc347e39858745a"), ("0fa1a88a2957bd00cae9a57693a83dc0c008c570ca88163fdc0922ffc01bd802", "2493d66ed5ec8dc124a4d904056a69e04f8ea0ea537b40c6801510ba5ce8060f", "1d4c585e4d97926807dd2850afb4060f93b3615b15aaf9883d045c111aba4c97", "0ad1bb3bf0a3226f702384bc8aaeda843d79f42fadbf516aa83bad4f859691a3"), ("1f7112d551f2af8c6e39329c069623807c1299d1fb49decf6e0dc0d0fbfe1fc2", "0399a38a578b14f4858d06fa65961bff554e31c4b4d0b49647bad0c6e614f3c3", "1e1ae9744abd72bac87e995e0bef191194f61810c3f454ba07e1d2d9c407bf0c", "1ae047e29d891f010ff48c48112001ef59a55113fbcb18131fe3c44c003ae363"), ("1b1a98caaa37c67a7b6aba45ae95dcc1110a72745db30c72e6e6f26b0a7054e1", "038beef9aeecfa0e150a380bb4a955df4689660917244fd4c469bfa822774421", "0caa4195a3fd3160204102e5c0621987daa89f31e03a34148e1ecaeb7fc84b1f", "2f497b3d8d004ea18b6f54a8222f99d644285e35bb6a107b7fe3dbcd1fbf4ee5"), ("0dae4468647eedff5d00577ff2f5d753989b5e7abb5cf3610f97435241d563f1", "1e9059b0bf1ec1f3c7510b68c811a9080dba7129e54ee8aee37f7691a27b7ee5", "1224ffabd4387244db3a70c569483159037668a75cac10a0a8b89f9bfbf8a7d7", "0199db0d4affd18705d43bbc4fdbebf50a75fbe070b0bb638af3bb1a6a6e385d"), ("0dc3916542a39d65e571d30c857889dc19b54847d7076bf4ffc48120dbcd157c", "05d3c7193c7a3465daa27204c6ca1e2f556ae90f11103b0a1e5bcbcffe8a2ac7", "04d0aaba7835ffa1e4e611cfc1e2c05eef05ae07aaa4cdc9e88b3f5904fc97b9", "0035bbba997b24d32ab4e21dc0560ecd0facc872e47a405e82d0a78e47a2170d"), ("1032d26c9f0410c0e3be1f5336076ac2713be8e3dbc3f5b9e655df2a618fa165", "0deff57e2727dd795ddc83bc717323a5b9e1303a221758c83c0c90799686d51f", "30123fca5b5910a2b060a6374975893658950b4d2202c420d74d5d8ec03899ab", "20e8e2b9169e0d29e106ce6a591ebd16ae5c1b72352e9a4f05a94d5da311051c"), ("1e917b64b4fba491565a12e512a049882810090c6b85b1088b7bc4e180d2c9ee", "16f6f5f669e0fa3e03bdb95148a271426a5b943ef7c4f968d5c2adab3c017796", "19339e50b9f1520cc5835bb5f11382836e8d608a7c3226f462e3c11a37d39b26", "074f777b151a54accdc871940dea04598affcc0d198271d699f024f9b47b15e0"), ("082ae719f7495832a30729cbb988b9a38103c8bb6120505ee97044f75cb10356", "25dc562abe17b81518bedee78a2905b6e32da76d216dfd3533edd5257d501481", "0f067bea42ee31aa387dec6129198bbaa938df3e525d88be146cc86007f2ae24", "0b2ce2811b62494420cd7b6823e7ee37517b04fa8495708b537100ccd7f6e494"), ("00800edc750503d4c04cae23f73601719b50eb66eaaa9325c9a5a7493f48fe12", "2332a376930a22e65b7e9979a20af1a5388ff6b0c1735c7d6377713a839d7940", "1f00de14fcf3829725a3de06be3579b10f2769cb202607d1564d57fbb6167062", "025aca6ac3143022f67602419ba9694a07cb7594fca49ed31d2997008a536940"), ("2bd59d184ede228ac369a43400ab3974497b8a9cac4f0d4bf70f1408033bd6dd", "105b191b432c0a30a47e95bed71f0690a860a96e1c87e39cd8e06fdfe3bba00b", "0c4f67c8fc02c204883d941bb0d262dc1aa6a8171a1836c463478b56190f8c32", "0797a3fe00bbdb18d7fc5cab4a209f5535007402522452a7179835c37752308c"), ("273fdc904f43a53a6137d9cac870e7195150572d21262a77b6ec9c016174e564", "21df5ebc23547533be5d67e057b9cd9ceddfd010d09c8253a94fa213b79eb297", "08d139056e83bd46769c1ad6af7bd6831dd94fd07b6ef3f2528c93077dacf4e3", "046a33d3bd3b80fe070a95485022f428d7b44efb12d6e840ce6e6b2f27880f12"), ("25a5a8af52e68db412328418e9dc332b14f6edfa7a33000f3ace78787425da09", "214c8c2f6080fb2f27aa3dd6dccc95dfe6674fa8af44ecc7cc79c78b59bc64d5", "189923f176a4f1e8538ad7d9de9f45c3fb3febdea61228398ff9713b86484a79", "237a33fae846d6a4e904760cc062fcbcb57fb63399207494f989bd970d50e4da"), ("08a23a32064d97fd99d4aae51096cd72d4ba921b947ab1b17e103d64f8db2456", "06fc1aeb96487df1f69999a1dbe65243af949bd5afe8853a0ac7afb2aa0e9fcd", "2f938b3f72798180b9c36aee74e290db9a090d83b917d88ffba84327de36c50b", "1b186e54f3ee51f7c32851a9291df75ddb25496b19174ae3d4ff316c2e0fd585"), ("1bd305e80b35a34ff0801293d46e130679d2e95775bb2b89b507ff0db6e3ba98", "1ca0a984862cb77f71ffceedb32597012d90fadee571675460db952de5f6f70c", "1b437cc9d6dbb53cdb63e7cbf4483c8cc53d3a02b78726a0ae0d5e793defaed5", "107b9a1c61ee914e1db1b8d6f5980e658ec583c01b2f4bcba8ac3f21e974e8d0"), ("10074bd81b410a300ce913f7d747e7eeb1b7b014f553048e36fae82b712ba8f7", "0bede88ea7d369d4c814eb707c11d9dde1cfb3bbd438a4e4f7ad70f1d5e3d44a", "2203e24450bc63032d9bdab195fc551831288b30b9f3189e63f7b7d49f0ba780", "0b0daaadf82966d877a9d18c27f75fd94068c0d93cb31907b76351cdffe2e1c1"), ("22aa8439ef4262022280e29ddc5dfc979ec544c531a13e2a72b7aadd2feadef3", "06e46cf4e1acdec5fb6c176345a7825c23454abd54e51c98ff200c1995813dd8", "0b2e7b8e230a50d8496a1318ef93bf20d58290b3b66478dd36f77144c9bff6c6", "27cc18b57181b715fd71e50eeee4b53a17d0aed612e79bcf8f2cb80cc96eb63f"), ("074730d5256aeb21829ce009ee692819dbca48907f5f5ac0563e5e0172fa156c", "24cb3de5b5496bf09e4e4933d635a1289eed20eb53fb8bcb3e07359670ad933d", "072120bf61fe173b3ecc6bfe77ad6dc28bf416110189e6a8340f65d72cbb9090", "29c67ddbca4e1272043420e2694528447fbb1b73353d485366a270b570f3fa1e"), ("206d7650d9fe6c091155a73a13a9418b62199af15a62eccee33075cd7b791330", "0d76652cdd2d82d30c975b991263c2d6b887de387be17a09a8e0165b8ec24b33", "1b64b25ffd08b3075f9356a66067b5cad6cca28b4cdea02e8c7e04e591031760", "10d39dcab4944cd867ef5c42ce66f3175ab7abbcc6f8f2dd26c8b94471f28c94"), ("0f2703a8ce58ba6cbe0ad50c36c1bd8baf63c0db811f1d2ce2fdd2c70641b923", "0af3913ec3cb1a9524558a63f4e3cf7ec96240d9dd8f30b020c6bbe1517f4b24", "01d96f38fc0fd3c78d364de12b59aa0bb44fceb2935731baf3a8177c4c629f32", "28e7a7ea711b5e9d3fa2603c11be3b3f6aa7dfade04b09c298f661862ad93b29"), ("0f54455e141c840e0b1bfc606e3cc7570915a2c42fe43c4fe44434d062349c9c", "259fc3a4dc04cd1801c5990164e05a92b981934f233313688237dbd30e266a79", "014d55335f07b6268ed798a05ac108821d14aabb619d8a06bae075dac99d1cca", "2b9b0aff55a7e9efc27798ec9b4147a49652ad9f2850b3f353d4a8d0939ce780"), ("0812ca63566dd97a9abefd5f8068cc1132e7d636ee328ea937b2234eb3a55476", "2247315ff222f95e8391a5b5acd2e08ae49f209a4a8bce7e1e249d6042b4c653", "0949da0ed7f6684be90fae7510f9182a6e27d9f7237b361ef34900d1f5b5da40", "11a2498ca9d927ba12ee25d3f95a075ee262bfcba8150aedcf9d153458041d16"), ("225f3a3a8f2578ca20a8abbfe23563dfb5bd5aa5dcfa730abd2e6f1276c5d7f1", "098a2067ce44fdf3e3ca8127215de5ec3aa36d10f274aff22d711c5a2ae5c520", "150d8cad073da3bd51177e83f0d4acbd895f5875a0e3b4d0a54dc787062d20ba", "2792756226874cfcb6f735b92ab87888252744b248fdc8a1a462cae9ae054553"), ("0a0bc20a776871f4d6b19825dc823ce2a63bcb58e3105ca283a553fc571ca6e1", "1d27ba409c979653a9df3edb5be8235b0b772c1cbaf1af81944c116c9ba0c3e8", "2809b00c4e03afcbacfcb20393f4c9bc3dd051646e39240d97c4f6e2a6f42e54", "0874310d37db2bcc20f1753aa36ee4f622c556ec5ed6353836413d17edf8193a"), ("2f77f3e7f314de3597ee8f939188c1014b14a041a1186c95396466093318825d", "1a22c9a4c68b6bdf50817530b62c7b44541a624243860ef20484b8b5ed909aa9", "25f6da0ee4aa573063203bc8352eb6da86c29ee08b61cc7aacdcb71a041114af", "08baea1115c1af6ed5b65cf92f2b4da6088dd2a7df53cc5cd4436a3d5c2c4f6b"), ("15ba8fa459208197aae1f685c625ce9b3e8017db6b1f2c69fcbdd68decd8c745", "0e499607bcba2ecd75ce0da7d8461d5b3d851cc22d8df57fd26c17f1e5737ecc", "0992c6a7b4dc9de6817e306d0ac636cc2ba8ca7236ac0e750173f8b29c5af12b", "06399dce70b85f0dbd677ab54077d5e9ac45f1b9a1c356e6aa0bf8a41d24ad3c"), ("0e50e6527d583d67fb053b57c84a9013a0f10d5c71cf5bd4285ba66f4c757558", "28660c340e41b51cf8c0cacde81f3ddb26d9d02d51c0886dcecb496d9f87aaa8", "12c7eb54171c3143f9f302710d48b8efff62ba968851baf94c45afe50594e015", "0153b82f45e21ce0065bd2753900c960bcc3713bc24a0d3645d28c048599fae8"), ("0f99534d6e485ab0f18aba7aa65cdb5049b340705caaa1a5ca48608f5df97b61", "1b2afffe42ffafee116a8015364cab329c8d1c7fdc872f1532a011c393826ce9", "180505cb297e2c6cafa6b0eeb968a3e7e7d80e6a9ff4b72c913bb947289d76d6", "10c2645fbc50f7457f6db086a9ca696688060d810ec91190aad142fe1b34b3ac"), ("2e556f8cbc4983cb668ce806e38d03b41cf784910fdf194362ce2d4234bca889", "104f42b521e5c52c3dc026b95e5ce407019b99202138f0b2f2dbda0066bb3d4f", "0da33c12320307327f3ecea6dac6881c18c7b7134761262ba4a056a243fec5cd", "2f58a9d45e93ce17a6afdd172d2075087637a1c0187a1ec2821a0d5f89faeb25"), ("023c6b8443131d1a78bc44ef5f7252ce57689b5c990cc83663d7eac6f21b9927", "22c7b4d7699118c6a24fbd182cab3218945434da77bd5efa658bb643fbedb3c9", "0997a50830abd07bf4004f5fe64754a8f6ba4bb525d68b3e2b03a08e1891a438", "1fc8bea5ba357d9a1d9844231d3f273409ac23b0bed851589bf141aae01790f8"), ("081c2f058e0df5ce8cbef2bc5f40b3c570eb3ea0395b6a921883f5c2763274eb", "0e87080c1cf83b05ba1bd455311eb79c4fad6279f721510484ae8d824c92f784", "22c3bf396e504f40e22987b531d2f566ff23bc535bd4ef310b0d240b6db05730", "1d311212926119cbba21e89006240e0f32bc16254f8b19b2e9ba906a8e660b2a"), ("0eb6af5a8b8b71f9de8d892b8081776c787a6cd92e63a3dbc5e87558f89a0214", "259e4aabf96ecf1a721b9fa9fbe1b8dbed9fa321c780e4842fdcee59d506f863", "2c5ceef0c663295f903607851c2654f5783d2e667aa22515d78e67c05a36f1b2", "03c9480e80ba99fbd3c1f499918bda46f1a5d3e4963800e17064f2a27f66afa2"), ("18fbc86c0062f08105fdd4c4b978e9c5d0490ef1701cfc85616de5f221f4df1a", "1ced4589305b7ca17c84bfa547e9cda29dc93eefd1317e893770447dcd903a08", "252ce4abe7c7485363db08bd2725f457ce9294498916a483b9e21ca89eaf9a51", "01fc77d8cd3b15a7c54ec331e10a69c7cce60bf2291d4407ab8c05ac839d5f9a"), ("2f7e310e8e8c622afe5f547093a8b8af14b4d1e22caf3d31a5a593bdb9f8a499", "21e53f41c11fc9f8dfba89275c15d11b4ee205dc325650d45e74245cee07bdd4", "2e6b9e625fea18e06c0a1bc62acbf00dc92d132fef3c99bbecb59153b9e26b51", "0a914a8f4f7fff29ec9d29c445591abe62df03ddbc38e4afbb3ded30a5378fa3"), ("2bad9b3adb26d008773334926d2b15d1cd544f8db72d07bcef9ab37e6a25ac18", "1122001ad1c9ed7a06dbf0839112f7d0aa5bab53d80b3fedbef64eb6961b8258", "0bf0b34d26a814b39cc7791c212a940d0574636b65057f6c87ab04d52e4258ca", "2bd0fbf6583232aa1868228079e3ead0ee1d8801cc82d3de23bb2e35d54b433e"), ("121589ae08be11f2287c269589ac8ba7e9bcd716906d6bb682335c35fd36790a", "19bb7e6c43da1a5f7b662c28433ea950f457bc62a1bb22dcc97077d6a90c2f2e", "2bd3779b5e60012c58d06366e3c3e9e597e42c84b473a8928bd3b3f6225cbc7f", "023ce9f10db429fb33c20c46bd79d79189d271f764d24cebdcdcb2ec490c9cb4"), ("0e358d1f1c0c72b53cbcfee0b51b403ad6ecb0c8d9e0b580c7c1ac9cffb6a9cc", "2cb301a3ea094750698ca0531fd2e03eab15936e42406019f02e6ebd0f71f250", "0539f043897d348c3f91af1d630ca14cfec12226d27c9e3a91919c46f638f5c0", "2fefb8d479f73ebfe58e8d3c4deb78d6cbb16abeeb9e5bd3e576cb9ea2d6fa17"), ("164fbff064bca133d831ee379be3af9a05f00af07ae23b436927c5b193a71127", "084c2aebbfc895292bb3677574e8a5a563a169fc53b24e29e7489a52b94ac85f", "15165b64799da41e3624e0768318fa615ca5b69b3a814b32c87520c67a76d4fc", "243e72289117a7006b05955ac7e9cfd347f6f4611c055204df037df9e8cdda3c"), ("08a4ee5bce4f3160e56e7395303fa1df7a65a436fca95568f622f0c3be7391df", "00ed3e00f1e4dd3dea1eaf04d2b6d4ebd8907b4185baebbc50d789c37ff0c07b", "289e8c9e46437e9c1b323461506c651af58f9c2a827d7636b4a23e3593b40a26", "25906375d51f553976a842939f5fd4e3eed6a3a0ba06aab84b4d7d58adc910a5"), ("0cc9ed6780ff7c6af67e71debe4f5d72b87282f408135a729d82ebf0a0affe62", "008d80bdb3e0d4d70cf1fcc82050c66549adb26b9c44ceefd7f6213e621fa6e7", "2df0dd36dfaa8b4f0f1e7b42c245bc74f2ff4ce40b5a41084e6b486b8869e66f", "1a8499796777c3b0200ffd37ae7c5c0e87c9581c7f812c3d3047b7b5dec3564b"), ("24d6ab8b3debfd3d3373f3c017e3b84febcdab37d7fc597227bd96b992c76ccb", "1b8143d80070e698f186fd03f94785c5ce526797e37d8f724f71e5ec5870bc40", "0502c3a897a9abba5d3934c6d737251047842477b424b97604f449492a7c754d", "2e293ab2691ff2dffa65111582a33a9db5057bff7403b4644b71d50779abf3c2"), ("14f463663a3b5273b5fc7a8f56bbdda823cea6bcec7bfde54d10fcfea225d9e6", "15a7af7a81d11e64cbd8b5853da3f95070fa2f308ff0cc894e4bb16d9c383894", "15ae29c7206eb3c7aceedec7834ab9bc31d4507f3b711a6b40679b94eda1b129", "289e1b9ff2c4c34b87c8aa472121ed26c52a2209a6a7426f5377762c0efd1264"), ("13f8a336ca14891484c9535124d8515b0ef6d305887ff3ba385c0655211e3299", "0d0de95754055d287951f62da0291f92f6facc5374b35eede07b76b7ca11bb12", "184a3857ccaba4e24d9dec706b2ef843f5de565410da68872ff94fe33c1d930d", "0d50479b1409375f0fd0b6dab62996250caafcd31b32176668477de33103f971"), ("2a18047287d008a1ba55507218362852a625dfcf767b714a03357f034e3b8483", "1cef288c8ef9d4e360dc6a3bb9a52026efd78adda8f2fa6b94b9b43ebb544d8b", "13bcc1a33b4712ece3cf38160826ebb4da6c4dd9389cc58d7cdc350dc70b4a0b", "29cd64b6a971bd6e0f1b1627bb807cdc50fc1ead7e24f03cb4ba5bb8e90b261b"), ("0c911d6f1f3c39376dce89dd74a2ba09d784ca27ae80233ebfa357d440682c3f", "17752f48051497246bf14d2fcf12b5494f58b6d0666e43238668818a4f135325", "05ba3dc11f54841e446f7332bd188af4858d8264d61860f7ebf3ba4c6120a42a", "055e60cb8cbf74f4abca4736c7fbf67bea3ad4bba2bc8885b52a8ad3c05fcac5"), ("2b4b8bc98b2114751068ae9b4908f5b5883e0941b2900b1dfd7c8190735d0116", "1dc642ae72a9c1edd0ecbb7826636fafb560069ac056e9150bea38e0ae4518de", "0df9d1e7f333f59613fdfb716dcc68a4c0dd34df4603bd1b7cfd7332d68c9394", "03ac688cc4129dda2ba4858b831841c3dd8a1036452636c37bbaad0f9be287ee"), ("139e745283415c96e4638cd5f090b4fbe23106c277902188cd15d46b64af567e", "09ec42427faee0311ebf02538af05740d83a9335d516430724cea9e2c5547e8c", "1316dd9f964c0c8588c1bdfa09fcac1359a6c0882b7a9481a205522b4146f32c", "2aa9c61ad3146da7cec4675d403c115fa301503c64a1252d7b868def7d449794"), ("158687bd21afd634a749b922a6839f32443a11f5ba384392289b5702cf3a03c9", "268308f7219b4d95cc7628693702e8c7601308ffe51b3af1b3f4b47a1f06b076", "1b96758da436ad44e6bc90812d9fddacbb4bb6639015df548b2e0d4fd459dbf2", "0085ceb2bf5304d06b78643bc9a6ca6b482e9605eca2a0bc43f240ec8cc8fe96"), ("0a212b82204824bec5a8133f0796bdf315166697a9ed3eb8c3463521170cc05b", "212a9ea60822ce7730dd043850a9b76f59bd63d8a5a59c102dc2b3cc382751d4", "2269daa5170770de8cf759cddfdb7f40869070b974426d6836d2e287f17cb60f", "1d598850792c433cc6c2c940d139e7d2e70f7f12f65b8d077b7cfdbfa9419d2c"), ("22e547c402d570958ad4dcceb42067d9cbc21e782eb2ddd1972066ce4c399014", "051557af758ac80ca2138a04e59bf47e90d14e23848b8b4843704c34486830ae", "2ab00635dbb97db5e4563535ec34729b51606ba6c0ba521b0183ba2047ff5d3b", "2c8d33a241d6e0651c69e9ea43c6259e22577be8e01a0ba550f442fefc9828c8"), ("0fc28e77b46e31e52b13f45f13888873f99ef891708f22baf504cfa80a885360", "08b541c05557ba16060ec55c7834f646ccb1cd57b88a33f509706dbcf1a14ae7", "2976fe1d75d0a93eb892575e64d15ab3e994fd58998a86014f647b5aca56e9bf", "16a83254a899cfc3728aeebb53f5c752062eb207a3ec56c25d68fc36e701d9de"), ("0fc928fc8d41b0ecfa49a8749a3aa3721c9adbb7baafccb024f93e00247f7999", "29aadcaa9257facddde7963df8e0db9891be24d10e7e3b564f813c098e2e24aa", "002594caab6eb7ed646ced31203b9048e45a4d51e8e986ffd69bb9bae1f080e7", "0f8161994516f926a6d57b54a4350f4a512f0dc54313e7643d81be547debff43"), ("174743974ba7de0bc8bceb10b8bee8f63797b11add4c1261b3d1794375cb4efd", "2cfb1857f45f65921f8b4f90e3bc663575f7fb0fddabd5a374bc2974162e9c05", "1eaca7b816c88d4c19ab484e448e4426ba60730320e71a4fec921d5a59f2f060", "0a5d753643ef0172aa52b0a0892c99ca16486f64dd3eae8302f386141c0dfae4"), ("262ce61d86a73f99bd18088d85068c3dae04670074f27d497e47999c07cf8638", "08c88258de8e1ff39949129cf13e53b73b3c2c1f22968bd099ef2a666713ee8a", "2eee7729be1077fb54225e13336de93253cdb081d0876d312fd66f60203e7059", "0d704e55f3c1c63ab72bcc4be799ec63975b5b9f4b01005ea3037b67b49ae1fc"), ("08539fa4e1d52bfab8402e7d8c1591f916d44466eba08410973c54e964778285", "1e08952ee1a22ec2d09b29a2a32e5b40e89f03b72569df327c714727c3c452d4", "158f67ad0f672003de46fc5713a546bed459b103c91f0e95b151a62f3c8707fa", "146cedc4df254ef74d018144c13555c82e33148566eac3f6ba4bcff3b0ea1238"), ("1d01a4059c9eb1b5c0da499315c69f76dc40a0fb85c807e7c375e74d9a071174", "0f34d44cb9f9f88b9cb5325bed1737e34e19ca98ed7d6be12ed904b4d2c3608f", "11fd446bc5812fdf1d792336f836569a77aba7c2503bfbc656160844b4c9f38f", "05bb51bc413ea35a8e69182beae2994181afcea03d38ecd809af2d80a9e1499b"), ("12e02d5a1f0d207adf429df36743788eae3d43ed699fc3357bfd9d5c008e04c4", "1fee898bc220955e41486d319e99ef5c619a0be43b9378f21d85b42d5907a289", "059eb95ad55910dee52120df68b3b98c2c8df989dd28ee2a9edfa9207594a645", "209fad2473b69b84ba49b11045bc3e311428510d58a7fbecd0cd3364042a01be"), ("2655d263d2d3b4fda0a94bb4860716b8847095ddcb822737b91ce20efbea3ffc", "1528ab170c5a3ae5c9eca47b1cb51e229e34bb9aa8a4bd722cc13905faaa8a9a", "135dba3ba8e59564d45a14737f31832230080da09efdd67db3c6696be493d036", "2a819b1b448d2ceb7362b8875efc40f243d00bd492e137cf5365625be41b418a"), ("1a3a945eec02423ce9232a9ba2a6598a5057d7e2fb72d835121288d896e13569", "060844dbe0ac8856a73e584d634b79651fb580977b59356c37f4e02eba2e56e2", "0a4478aed95fa678cf53f14b3761ee25a90d2f3cf473db9bcfc846d7ef46ed25", "09a39047797b838d2917d436b99612e8243a0d72151e3550e14def981851f067"), ("20b142494801f62851f7117d33b69d2059c45a72d4f5789bf07006ef83815035", "0582dd171472ca8e45fa05f2885014cfb75faf6faddd9df8d58de3c8c22a0536", "29969fbdbba8fc0ac2bef4aa4b91eb6c87d9936c85925c4e60b8263284ce2fab", "03010342fab7396de48ad5a4395971cd75d4822f7d35d768e9bd4d6a8b39bfc0"), ("25c2b3a7d453b214538324158f6d0a23d6c5998d59678f16dce57f076ba1821c", "0f2350f4bf5713532cbc6317a8c9d859559091a2f448f38115ebf2e6dbaa73e5", "19dd43b7e8d3ce6bbd2213fd026b197064a39255e2b752b45875df1e3f2843ec", "0b7444482fad3e077deba08b17fb204148cc5b597927a452b51bfb4e8f334b88"), ("2ef5f47cfced9320cea9c59d6d1f2525271646340001faedfce07cf81c472744", "03761cf4b009539bf49a7f55bb7ddce89e615e2b753d2ff73add482aeee2674f", "049b5f52a896c1281aec816d297508714e19ab3fa025848dc7465b7fec3cca3d", "0bdf17b09ed1edeb7df6cc6d9046f33fbda90eb84b66f1fce5760a59cc304774"), ("20353c4c7306a9b36ef8fa4ca8526fe32b9c24cb85f221afa0483acb45a5ba03", "2d1b26d3ae18d40ebbf96861d90f6de69ad6a92569f76867edc2efab73b66aca", "06d120c158c55efc73a8221c687cadfb0d94c44155c988b42181321affa46908", "2686dbe17efa68ebf383db66f952fa4f72e6e2312bb75d729ecfa35e7c1d754e"), ("1a1c3ec0b60b1499784a9c7024b8a7c1ec5fb1383f206671a63f13d4f553c0bb", "0420e0bfa240da15db2c969a9bc0577c0c80d3a5d3a35b44077bcdb42b83cdac", "082c432c0ad9401bc46a5cfd3f9c7cfcd8114b95df82bb4038d8642c20846c3c", "0b76b05f973f0237e7f422d0814bcb4089ef965fa4d594dbb2a2e5e66ecf0c2c"), ("23a6e6ac4de4494a99cdf3bd0506fe60ee4462bb0ecee64174e4d8cc1802248c", "1831b596d3f68d61971190ff6dc1fc537e152f424688a1b45e7c8bd633dc007d", "039ce4d21047576661da5a35a934e25fea7f6251a7b466d19b38f3f698e9c9e4", "2d1aeb65fde0a15710223d8ee12278e160788e02ecfde2907b2153baffee7a26"), ("13ce6aa3c3c35f1fdd47b7cc7c06b2dbc0a4fbc1df4ddd608c8c64efb0012319", "0224db1bcc58ea8219698cd3033ab210588140d8fb2a3e246ee34cae9222d639", "112f9adc4cb922102700a19939e203ee780a45e6488bb3bb031373f0e927a4d4", "1a9ad5f05fb0ed6363ad49359cd51549858d9f50ece301664d825f52e55dbf38"), ("21fbfa710ca04888375e1d130f8cc44f3474f51a3298301d165ee4a02c166a9e", "10a6c98fc319ad7b0fb2d903005829f438d522fc8143fee06f78236f9ef3bca9", "2708d1b63a0fce988db0bdaa1a24ceec5fb85dd12dae8bec59c8a4201a3dcb66", "0988c85461a3cf600993da8ce0ed9c6eb04b48627542d6fd25bed3e62bbb3aff"), ("23d61fe4e19de304cf96a121fa37dd3cc24fbfa1423b34203641234b1cc47a6e", "0be39cedb1be1b23325c7571061014856e0e48b10021999f9bb9ae857cb0e35d", "1e7717abce4bb08a13998cf75467ee1bef687b75338e080b80fd9924132b38a0", "266e619b6ad851593f58e72d4d52633843318e5192916a65b6cc4a8ebbdd2370"), ("270f25962cc8551b0a8d8514641c948c1ac8c3b3ad6e0ce48f4048e05c5758e2", "23fc3c9bd210d3335a62625565f86fbbd360693d4927d73a5b1ea647abd1d6d0", "0dc05f9f1b68f99b91c2e96a69a3a0f304d913c69fd31363fe95169c6ca2540c", "27b7fd9a617a8296eb887ebcbd50422b2f21c499888f2ad4c2bbbdb77d3572f4"), ("158f1ae7c515607a03d85e2ebec5ac06a64338e445681533adc7876bd4d987b3", "2362191d2a4e215c6958831be2f75c678a02e5bb248377fc6c9e4be89833f528", "0fef77c862ae14b02a401e34d2fbd4d808cb3f9089e3bc249269cf8b85232517", "1d7e3335ef8366d8a2191b6b769dff65a7e1924d8c0a96160813321ac4d6ab38"), ("20a235b66178dc9f23bd171ffe61f53493abfaef60cda66295106ab605951da4", "1c28e280b75d0c50c537f65b7c846e7c0f81265596e955003193c36926ed38cb", "02f5f07f1ffd3bdb6bb08d8d2f9b681ff8ff9ab7fdd6d70e0a58c083bb7affb5", "10d389cdf0be9f1a8160fac4e69ef87b79c7ba7be8554c010f96d3b36e6ae2dc"), ("2f0d75270970535ada2996b928943cd2cc23299904d8aedc5fdd3892cede2bf3", "00eddd3a66b04156cb5b4ead0458595cdf664baf1ac58924761f8c2370e275d9", "141cc7cebea5098236a41b24ba385437a89361ce983d5f5b4366a0a5c2ca7e45", "1d4aa490cc1550bd25bc4284e5a7323332087481be0fa4dbf000262c29253954"), ("06681f4a05d3653ab05b434bcbfb8ebb3fd364b460018746600a3142775156d5", "179e6f50c5b26402823f2b998fd6c49cfc1f5ffd94f8bc998ec05eff33a420f4", "24887159395751abfbe11a6a4204a32c2b79d719aa03686fd1c82a061ff8f77f", "07b025e6fa5f4b24c1cef89b1debbdf1f3dab876445b53ee10f2f50959ca1177"), ("1626e0d4a4edf14ddc3d97bcab3cec92d27aa5b16415b1608d3b2ba95850af9b", "1bd74dfba42640f8c01a4ee7606f7f46c13aa7f957d7df8caf64a719ee94a43f", "2b0a3299c6dc3c8b0c7a44b9ea3488895ce771763b11ffdbe472fc0c6e1f9dae", "0e17b98c6ec2a40c7932f01120783a46e34883e5e5fbfea3461c6654a82c7911"), ("04cacf1d8f2da8d32dc839911944c4b593bdb8d7a47170df5f313de405d6dcac", "2157a0c493a251c93585e34c53e2402c49d03007f7478dc8b4eb6de1d38dd4ca", "0030dc0b2197ff9b7cc8f8af86a5d1fbd9a0f7d7b03bde63b530fe322fa2e144", "1ce3ad301caf06d210ff7692dc81b7e1aceade496aa2157928ed2e9d58d25926"), ("1026c9aafd4299e8bc5694cd7252443d13bde07c686551b22d55d9e3af219a51", "19dbb32ede8bba03c9bdb9669f2d76e87a6c3f3c444506d5bb8d0873a7ee51a3", "2a097e205f1c05ebe9326c58f88402f43a5731087ff84bc003aa773a682b15d6", "1fbb2baff962002b4f5e1e2d02a0957bc003adece78a23505528f719d60aaf3d"), ("2f9e613d306f8a115ae1b61292aaf4821e15f1465745a6b6fa38062dd7e0c5ff", "144123d2bbacb9b73367faaf393b026aa13c45e630d1bdbdf1e88aeff4a2235f", "1a82336da54baab591b9bdd65f344bb5c80db52b11160474befd8e796bc0ac68", "0b2b58982a01de129217b1a470ce24083ce1f98d33349dfe4e471ed617ef249b"), ("21939043508325c02ccdc9e811201f00c4033bd712cce6b34d23f866ec62dc30", "2c73531ec267e2bccbb2967ed65e7866197d311dc9ec4c45dcec099558461de1", "2f19da964b27d1b7b89071b236d694667b112239a13f49a91c128792a5c26344", "0d169bf1e097701866bade3638992c6480f5173f2c63f9843e41f37b70c7122e"), ("2f11b0466ec167f1e25e181ce8cd5bbd2f828cea067277d3764c4d8c4d8f9938", "00477a624d71454252b2c2ccda1ba9137aa63ccd55b351859ffac13ac638278f", "284974a195369974c4c035e81eb7b3f1d07d988e78ebba2b58b489a6e0edb990", "196fd8b078f423e19c909f008455152d962260f4c7b9b18056bd0272661ccbc0"), ("0fe7c266abeb663cc53a1b5ea1660466594f0ee132c090b80719616619ee873d", "2f0b4a8c05565f5bda47d9d1d95fb342d202658e24226af95af064b46b3ce49f", "020582c8ade71275fb57d886946942fa97428a0fabf1a023d2d5870ad9fa559c", "237e1e6a2d18f74b60f34bbbba3fa5d2b3c7ca3005aac4bfccda4ed149f79268"), ("2f1a65eb1cca1899fb7567d1f425a0a8226300e0330e85607f03dfbb862469e4", "0aa4120c1758a11ec01c6ab0fa189f0548ffeb2d325f3e339b474ccfc9d52265", "2cc9b9f978261d870634b77b1206da90500c83b551fedef11c3dd0ddac932041", "1f6de3d4b2c64257fc25abd49360f07940bcd58bd1a4e7907901aae8e71b1991"), ("1ec7ad7e9aa7afa06e8cc78e50dd651d2fbb916f7ba4cabe7a1da5849cbc57b2", "1d3883b02d390c66324e2a5cb837e6bfa79e4896b34bc6c89cfd9e5024695731", "289cf24dccff33640e7b6a0815fb0135d7ff0b6ce4a3183ef74349f0e472c19f", "25bbbc7a6d9e0874c74238c618a50840dc4ee335036e29e478fefd43639e097c"), ("2dc462f9a6a7e138c0be3f99cc973a425dbd7637b6203a6895b4540db08ba14b", "17b15899158f11e2e5a6ef92461681b6dbd2eb3a1010cc1112285d75d63d2411", "2f32996fa874f168df90d6d9e6bc3c094db2add1ed2ff5c682e6ca15fee6e6ab", "12467b70a9d0477b6b085b5f60f6d9974568c471d058e00e3a6b93048db43618"), ("0bc1e91a4691aed4f12a31a333468b9790ef20072109568fc77f274609a05537", "28709275b594f4d6397186fdfb7746c973a80a0cfdd4168043ff9ace6e697fda", "10469b97867eb8caa1fe70f5b2775c7fd2ee31a79a122f34010de261acab002d", "08a825c755c755a23b22e7f149ef65d3fb2db392a2d25772c38d06297e4ddc7e"), ("0b64003e63f73776579c3fbcce7024adcff026b064cffed9199b8b3bd0721007", "27a70dd00665500925f8a04ccb54699273d0afffbed9000886b5279186bac99b", "21db081b1916b4fa5da6c8098a46ae86d923985693af8e32b1b2cbd11eb8eac8", "11c608d7dae8002de999db707329fe154cfb222e034a4a3a041ede54eebffa50"), ("1d8b1275d0cdcd965e4cb2d7328aaa4a39e3143c1f6caea534765930e8e22d53", "1b414732d6793073c27b4186b240059446b451afba3803cbf29472aa8543ef3a", "15d1a79ca9412119849e280ac3e21bd8d3aaff3f934388ef4bb4e7e0f383fab3", "01af14c3c7704829600fdbe70ef6e53e2567a1da81433dcfeebaeca0aaa79a11"), ("261e93de62a4efbb43f9c329ae400f74449185236730a822b3f11628eaecfb1c", "22941bc12c0530f45b523c36f529880d42e3ccd90ad1dc3efcaa31c15acac755", "03a6ce6928a25fc09bfbfaeedfa686293064660935356521b4d3e1c52e7e24f5", "16a5be556834527dbe234b280f19471f8f685f7f5aad623e9efcbdaa0029a1ac"), ("271186afbaa6f45065ebb600b3473e666917dd568e665bd3d773b81f3084bc72", "054ec990c739f6d80e3e381fab4a0adcebb89103f22ea59c36f926b56f84ed89", "23dc6bf8a2a16f36242c2c78592f79a0bc2cd43c872921ad43aee7ac9a1c7b86", "20f1ef4cd0801d34bd778417eed0cbdd153b25c29162aa142abab479bb041237"), ("266db6d2c4e5a5a3ce948971528fa597648779944a4d86c394ca8500e9f3dcc1", "0728c6d6774d1c5c79aad2370923ab3afdf475b3b046bc886c62580bbcc2a1b3", "0c6e5fb1a04b037453f279355c2708b5354fb23eecdb4318c3add7aca415d3ac", "2bdb9b55e973288bc849e52f683e6cd158dcecb4dab015b102190838a10206b4"), ("24374af60368279f255abcce03e2a7c2cf3d8cdc7ef0e4b4585406f9cca0bff2", "1a00c2ac8b27c102b88e301032113753dd97e832968e12e444dd2a1a0f7ff6ac", "07b81bbf3f0f7b713fab14a409ca3393bfaeca591ef46b680e637db5a0491a45", "0eddd77b70b1eb965a900fbe35fb508d0fff1ccf9cfc761726c460124e6cee67"), ("16822cfc5b098e715768f512796dcfc86c5a088da653ddc5644798eb4cdd14aa", "2037e2d879b2d9fa966e56351fcd286ebaf61b2fa73311f68aa382a2e64fde7f", "1bb101ce4014f51933b44bce4beb4dfffaf9a092eb2e187fcba831b5c7150359", "1d6f76b39a7fdb86cbf236546e1391d186bb5f5be0720b1c66163ca0367c2f63"), ("12d706cf041f575ef640eecdcac60c88e7f0c94c9d99b7671fc94b83f3c07159", "1a61aef4187d75c0a2c437620d9b92dbec514365d15a2920d8e630ea7f8b8e28", "04778ea83c7a61be5695c49f6ddd55b9b2f6f61b3dfd82a361bd3121a08bdd42", "0b155aba9c19600df5e25d586f3b64fc71a1db24817575118599731947efeaf3"), ("179e25a68956607e872affb5915f88c9766613e1cab240b149fce82959e7bb8a", "15b2140bc40cd55c1ff43932a01fd88ea5f4134f8a740c030067105969e6c0b5", "0b26da09e8d4f98462862ab2f83bb12b7a3c7c8fed6463f09c01e9fbb9a50ef0", "2f894c1c1dff3951f26cd4d1789de33fd6791715142b16bb800b88cea97ba317"), ("26abe2b404175a3a1a3fb33777525917846c711699b15d527a000b58c559bf6e", "1835333923c9bb518a97e3d0913131c4672876fbdb3832e3fb9692059a29d53b", "1b84d1ff922b67e323643cbaa003efdd4d2c4f1c7742f239d54baafe995a8dbe", "15f610a00aba490195320ce6845fdfeff118ccc6bee08965d54ec081f0bc0745"), ("0ade1a63b66dd68603fb576102d64b83b621c064c5daa616e7efe3dc8285627a", "1048084d8fc2d598d0d86b85c2f5e7aa5ab9fad7ffab5ae39b36f70c4723c35e", "0868798f00a914933705da8b7e42f18f42316e76c320aa2d8928f5b7209990fc", "14a9c38142c600fdf1b6c78212591253fa0c601f8a435f5c0b5d9dd43982db3b"), ("145997b29dabfa7dfa2de8a4662032098e0602808a4aa0983c27325a1e301b5f", "07641b1dd538d687ca49fade96cbbd092f75ff32194ef93e3b14594ea56c87bf", "0c3a41e55068e993ab35c44caeed1711042b190c82677a2339ab26c62a3677f3", "12ab8b7b927d7e1c3da64db1e170319f1b4d445370ad3d01e41cef75fca01fac"), ("1fe0046c7113dd209014630eb47e51d3e50243059fee86245b6968f63cb92869", "06c4fad437fd950ec6fa1ae001962146ec044ba14cb3ebabc65510b1b85f2bc9", "11734c9878509385b7fe6cc38af5cd40a97b78a0aeb66ff3954094ef4dce562b", "1a845e2a3ae8ba3bd0f48e733aa5bda2fc1f6036e5ea0e811469c3473721b194"), ("0108c8da244ff3dc75cab2ab4a3d2fdff04eb281d64f454b1167862beea5f0ce", "1e2ae8b80d6c674d5f0460f840ebde8d0931d704cdc7d737949c09591d985e51", "04ce6370a2706e1a0c0a4f3f4b90d8481af4f226cbf74eac1806289217a80b7d", "1f5ed79779dcd56b9d5c49f78aab25a6c4ac94c7280f932fdc3e9960265aeec4"), ("2a988fb6f8cd5302fb65a5f305137f6386fa2d1a54d1ce798142720165d52e92", "2746391643b9617d47a673f54dbbaa15bfb0bafa29c801fc293a2fd4fb146311", "113b2155934e9335c960f8c14575e8ddce0e6c06349fdab9b85f695b064516e5", "1b81b73e2bffbaa2495b01b42cabfea4cc3be589ee94be80b157ee302de8f220"), ("1364f0e8eff566fad8556510f51b7bf6750fcdb19eb54f5a233c45f630509474", "11889ef05252a1ea3a0ac1357cddb7b00141aec9bf46f6a1af38823153989375", "01f54252373a748f8349a40f2c1ffb2b598ff83fbfba084c96fd0eaba07bb96e", "15db20e08ca7dbda0672929356aa8e5a5d0c9fd72cf4413876dbfc511013e543"), ("30426d4d61281c84413a92c836d4908df4d9d8d2f15651c0fabec13613a5c423", "13b237576317f8770665f29df658544b9b0eccd5e6d82769867f1488e353b60a", "20ad43d26bfe3492e1a15232dcbbb5f089270b00d407c271ac9ffb3a463a72e4", "042fdbf0d5e639306e7c37ec41d8fdf6d25b71157726f823166cf4441acacede"), ("121c51b43db65f36b792bcd5222c73199c7c413a2fb2f60876477d9d7ce9303c", "03c2285f08c48048cccb453d49876215f3239cfb4da055cce5f317d99e325af5", "2fee563fdcc24eef6938237b0ae7c26aaa2a08d63c28f0f24a3624999df079cf", "075d0c5651400074600d2606d7d25f73b44d57e552ca0935273afa2575b1a815"), ("208b62e9b172869d75912a66952567dd20b577af49dd5ce0321860a23c7d25fc", "132dd5334a68f09dd237f9fab4a69b844d1dffbd724dcedeb9e216bc86d7c282", "2ad288f2f6295c2eec5a1993f5bb13cf6460140232ff93359d3d7297b977879d", "2446e6f3b1aabf6fcbf5c5891c62243c9906c1908cf26c888a5d2bbd73a67945"), ("2ba306fe01b00f0427bb872c611bf22de896679815b38bc11cd5a4b1e35f60be", "10b27a37edec3fccf1460a9cc0af38a95980c9f092a7d8afcd9d06748e65ae6d", "1b3fcb1e3668f5b2263855bbb9a1c05fc47045c00f7d3ddad352c74fbd65a122", "17ca5a384e2957dc02ef4c16a0054de0d6b595cf953c851e55c290e15d5a788e"), ("0b36d67aaa06e588fab40755c8f874c8102de8b17e478874a4c01dc6049e4b2f", "0728f2a180a5f0654ce1b4e873b31a7c014d7d82309e3b4778690182c8b80887", "2dda8a2bca5e802dd6f796a369fbc7fe960cb3b29b72b8cc9cc0b897e24d8aea", "261709d835aa1a3b3d59376604c72b725e57d6d59a4361305843dc9d8bd29298"), ("049887af23c465477b8dbeba36e202bcb10d4cd08d86c47b19c6eaa40386c54d", "276a467d43c9051fbf4bddd0aefa9bbf229cb3deda01eea40435865abba86b04", "247952b9186c932c9508f2e5142384ea150ad1fe89a95f14b5184f41e46f38c8", "10fc19b5ec1868823199074d54d55b18c6a690beb8c8879fb864097475248ff1"), ("2e932ceca46c777cb5e4dfd0cc5a185433b94cbe34e196e26950c0c4931d53e8", "147443bed93ca2c2f6b010869935142ec074f7bf227e36ceb07250dd36a0f84a", "010f9473d2be9b67e215cb9f25da40d78ba5c97020e0d0d50dea1ca46a0ad488", "2f5e0d92a77f91ac82d1b8d86e936c07475f5115189df4ce6a3c0d6b9f327fb0"), ("20e494e98ae0b45233f52f6498001dd716006c733614d3f35dd4e18929a5135f", "111d9dbf5f3c074037d825f96cb599615c4e9f4d4a0d64c3e65c65a3c5bcd8db", "04338429621e3cb9ee74cb09ce11a61eaa239531702053ff1557103c152a6e8b", "10597953d877e19fb56d57235eeba1789b9de28f04d8584c4b87c1c9e8f40627"), ("0e3bee3f459ddc6e7f9d0c6f50f26013c1c3933cf8de7e9723fbd8b22c70b683", "29578e51ce3e9b64cdb062541c7bb80c3705f1301192801b4088b39eb197e15e", "15dafd84d233b2b9efce458e4b07b633eee490f3463e80b44dba7beeb6ca1268", "1b511c05605238cbbaa45b9637cb6f306f76532f79bfe8e545caae3015523118"), ("2ba3c47e3f3570237f4c6c811274b3210a7d0baaf0d80c34b533503735d806e9", "2b151ab770cc46e862694aa489ee03506c5a281ece1a7d7db74c0c8cac0e5c12", "1bed06b3f9e7adcc9d6ca2cdce981aac11a119e9bf35a02f56133dbc5fe61b1a", "0de281036dcac2782b58a47c9cf148b66234a4eecbd5ac593f79cf55ed3ec019"), ("0cc1e4df27bf4a41e45d3cda876492e7e0ffc5fa6859e122028e09765b2db872", "1f387b31814a7bb5dd2ba4c6f0619ce253bc611095a36361061233c5897adb51", "136804b2f121ab1878f94170bc596d7269f9ccbd845c9840ac237d28f6d08596", "2301170e03c4e95a38cd2bcf589e93a8211676490c8b242f4eb67f2c915cbf8d"), ("023fd42843228874424624ad9f6512289620c280ca96557ae2adea597d3373ce", "06825dfbf3879df67abd0ddf7230b6eda70ff4a88bac9b96c28b17a7c7c3746f", "02b177f86c8bf1b9397d40bcfae556818b006f3dedbe20601aa7feb55fd43873", "1ab06ddbb2bf2221225a819c1c1f09e47c2e71604c6586e807325bddd4103898"), ("0d5cf8f2b55607e9f925294d1fe178a51c08a693ad83fc4ff2f3f80bc0d9d3ff", "2751c2331065e114e6fb4c869846cd54bcb2de6172edd6b360397349eb9b9003", "07f05b69ee87a5b4c6ef460d67b27a37a9a9946208b91e9c9d51c1bc6ba28435", "2bf7b06ca756b92b0286760c6bf34792c1634f0b98c8343f28f6621cd06f064f"), ("0a08f48762144060566f80bb7d9d37617b4ffd1ac8c9e782ef9c36345de0307f", "1be0b92f4afbf20c0eacad8a72ae2b623ccf8c26c4dd3d7a4f261b57f46343dd", "10ec65888548f72fd2a22f2e55f4c656db772ddb25889082be77289c1bc1dcc6", "0c73fff36f058c39e48d60668f4bdc0b197ce4271222acbc57e65e77ca39fcd1"), ("0bb34971d1422dd02f261cfcf80da65558bc243c937e1b1ddd341b23eb1cbd2d", "142f7a3eecd490e5e476e130083151f52fc83ab29d11c5e5710a872449a1e34d", "160f27253d0b71a5facf573e7bc12714615d220d9fbb56e3e9e726f156b9d417", "2922bed0106602330ae8f3318aedc1156a10ae6f15b5b9b735e238e783d7279e"), ("11e89053887340c771e1e729b26f0b2767a682e5f01f45b37cfff2a43034d6fa", "0d53345e3db7218322b3ab56036dba00ec98904bc26d54d7a3a6ca5c859f0030", "0d4c4e43c8303173f233efcde56d2c0adbce03f0c5d22aeb34286bd213052bd1", "0bf9150f9c5d96fe086c4a0423aba14f91148a9657c49900e86d50359433dd88"), ("016fe75bfce109a4289162c9c0927d9ae6aaab48f80dee7ee8588b7098d36437", "03eedca04980e6d83f781e7d71e3ad809b8ca06e264bb16f99effde0966c2443", "21cbba71e2bb2320d01d35e228707451cbac2cdaf1f655982f5965970c6c6575", "27d4f5c173e686c4498afce704580fb4c17ea309ee5410550a18778987a0e043"), ("2a188ae45420b0a74fe951929e20b2fc48d381be8632bb201067954e29702141", "2d804fa90aee5d8ae30a4fcb645aae6c8b4280bea1e3d21db36715a644e632fb", "1224dd57bdb1c58d59c6dbc4e9c7c2fd107b0ee098d6a8673a32f611ede7837d", "1fcb5361fbc73e5e447ddefa6f93a778e064a46d2cab49955314cdc33b58ad2a"), ("2a9655e54d3824d4e5f9d07fadd3e5abca818943a51de9aca676a5b621ce4ac1", "0a257870880523fb170a1d149fe97aa80b0eeff018f63d7c58efff686c557925", "25a2eae1caca42ac7a266f25a477830f55aa3657a5ec205963e4963a353a6d7a", "09a3092e4a3e8ed1aeaf9a687a817ab62c197883651d93292001373fd30a7c5a"), ("047a03b3960ddb03ae0df41756ebe5c3575fc0d83a3c075621a659a9267f8054", "159650279703d53a813ed4611f265c9eb001c70f3f1150e1bd763fd77f62a58e", "10cd1925479d7e67e38de9b3d8cdef83d6b72046582527038dbffb5cf3f51b58", "1b753106f244d0c8a3c08b17a1c7beda90304afbda7563453a8f8dac98187ac0"), ("2ce35ac50f65b4ce7cec6f618ec14fe6207a9eebc434531618880f68e1853dc7", "100c77d336f83e9f650429179d0f61842bd167fb50ea0cd09c0cc4b8cfdec55e", "0fe40c815fb526d063886e8d49b487c50f3382e86dce701e9c22431e57c34e9b", "21a4dab3c6c2d7a8d2e3b2cbf5970d3f375973714b946f3446e9c76aab9d6d96"), ("0daa074912d63242cac6e97976984e3d0464b8289d0b4773177a5f3f53acc726", "1b56d0af1c1c51cb1876bc65f447d511521fbcbc2cd568ea7fa61563873ad2b9", "0f53a41539f12054aaff2e3808c744b868d61b72509050cfde3f072a70644c68", "2be8d93e78ef32f4e99dcd5a8cbd035aa3c97822d0f39074e751bb97a53acfb0"), ("2ca6cf5aea0ee5656d43081362ea0595f969d7dffa31d2d5bcd4e69d6d5c320a", "1bd9fc1587bc240d128ea18fb11dd60402fc5dc535e780670bd25c975e7412ca", "1a2288d91d25d6d01f0f90abcac5555023147c1e8bd695691897417e57d8054a", "10b63e823e549b2835e0ccf85a9b176f78999ec778db8496a060225b97af5e88"), ("09ae3b53c93d8a6b0e672a6217681b0ce3f6578ccca98e79c5057bfe06a53aa8", "28c08be88a5702da7d6a3056ff4194687b48803ceb8772336b081c4205ad4fc2", "1512ad482fbcb58cf678fd3b478c115a370e3f62c343103c36c67379e7786f1f", "14efcc67de2532e7d2f0284d32cc31fe7e97f8f2cf4e4cc4b97c21c55383b53c"), ("1fd2a65ddba7b4f3d1a81f65b6a74dc7d6b0ba9bf26ca7362ef5849a06a4ea6a", "2d39f3c0d6912326cf819af3dcee42d1827a1960965dfd5b2c6345a9e5d370d1", "24fbf675d09a186ae939c6f68e423865a96f70affdc48b540dcdce2a52427678", "14aea2880bf0150d6b69e4d3c55b3f7830ed26dd51e9277edee330639c466b4a"), ("1c326f9cb58b6b06a41f23316cdd3a517ab1ae4302b92093ab53d21f84e04768", "141527ef0146c2e184ccd0b410c428b9dc0ad5e1c4fabefd12ca49214bc4c0dc", "17fd02108870300d6b1b433edcbae406a99c2ed85cfc447c98c96a18df5ba609", "2aa21d0c0cf1acb6005629f8378b7aa342d7f4fc3429d29347878a8a9789c4ba"), ("1d57c70d4a93290664611bf4569f819fd234003e0d77745228b434378ce4c93f", "2f2067c351ea2fb5e65d3dfb0a5e6eea8fba0d3513eed267f88163e9091d4831", "12f39ad48aea449b507a3ede5d78a04f48c7318c5e327a28129dc31fff137df1", "2ee302a509d16dbf4d1548045a8693d2a81335f968e302bb07d77ba6e8453b1f"), ("2f33b123ac7e9be096b7007315cfafaa9094d703b9a287560680d8a315f25f2a", "0d49c186bcf09168fa3434534300d28108e27d0a342bf1e631d3efa42634e580", "15970ba68d3aee544b5930b3efcd34758f38719df3fce1a3813de8d3ae0ab0f2", "07ac6a718d5d6308d996172ed3026b899778866629306619dbe86119347bfb13"), ("022517e0ccd13d0977a4c96600d1ab0382c1e45b2e33c4d2753da39308ac475d", "254e55f206ffd61aadf4ff892183c9aad0a92965393f21896ca5eab2e95ef9cc", "0e267b3e6eab3de94050a7a4382c592bac079ce046687bd1a52f66bc238a3406", "18cd4ec268dc0f76900b744030e4d033b2d2c819c4a2a9a3e7ef098cfdd8258c"), ("10098c409d8ecb00e5907a2659b63778efd643a3f75c96ef21d8b877c8ad2f72", "0d46fcff1aa8e3df0b70a8e86e940e8d55f093826edd7b61aeb03f65567b5de1", "0b3c8028b6f217c2a51e92992d4cf17d21413825f221670b356c72d1bcf5a68c", "257705187ac7eed2b58a828b7f661792388f9216e84f7863923855e39e72ebcc"), ("2d2cb474fce0c1e0449c3f9378142d44176feeb64ceeebf6c28e2e8c7f205d05", "282fbf9fba0404865df6a128faa6913cd1bde2edb2366607656e3a83694494f1", "20b4fc0359c80c10703c8e36cf4efd17488e3640ea1fff6b2c359a0aa56f8c7c", "0398deb5161d35361ba258248ac1788089351f06c18afd5f37cca805552e7211"), ("0aa1b14dec455b30c3cb2d82b9b0a75740fcebc199c1f977f057a78021d350fe", "189d8a86752622fc96807dd060b32d377ad89523d9d90d5acdba5ab8a70d8e1b", "1b5b52e0f84a0e21b78e704e8626ddde28a2ce9a682dbdb0404ce628afce25c3", "1057bd83df7404c8b0cb223d4403168847eee671e37d5056dce64d4666a1f1db"), ("0653ce28f79c8cd61d5f4be0f9121d75ac3bd86b9426e688ee6ba412cbe791e0", "0233eda27f69cabcff550649cd4c5dd458b3c943ec188db772e50f163e90f4db", "0e4f7dd94dbee7c9a3e61a690882db087fb20487390f445f6b177084c8cea3bb", "24b4cd9b55ba0b39955870da504d9c7045be1d1fcbb9d53214c93e0567c3afca"), ("15161290993a25562d24ce476bcd7f082ad1b5dfcf0927bd5461016d476c4ff8", "19473d746b25732979a708532481e56f738c7f37ab97f3e76c443e7cf39dea09", "1fd13a09fdb4924385459913a9261ec69267aa8232491acbbe7abda15507e3f7", "0239f62db0517efeca34924da0c4853f51219aae60acc7b6c948ca1c63908cca"), ("15dc054258ed35f6a6f8d1eb371e1d1697dbc0758bdeed2c33bccaf605dd517d", "195e6e98d432356e58c31556488c3601a7fd893404f7fe2e231443e130163e2a", "144d8a51550768be03fd683982e9d474bf5078d7f9a5e96444a3f13a78bfc6f0", "285eb3f9e43b8c82903ebc827e31d1cca58672df0dec84377aa32539cab8e9b8"), ("0f958728bf7957fcd54c8a32c46517a07cb697d91c0ed324cd5ab0ca1a8e51da", "21c2706dc985a97bf9018c0c5a34471b0318957efece9bff5985c93106c1a484", "007d4124cbaad7913f65404a27f3934ad9f694a3e9438ae43205c916d6464fe3", "25980f32d9ebc1c1dccff80c0a0b8efc42b9c87231f83152609e912a891c73fc"), ("041df8d7e9d033a79173aa9291550804338b23e888b4c0f3521ad93f8afdb13b", "212e6b52b94fed15a2ccbd9b778ab60d812c650b8df73bc2ccaf78515b4c49a6", "156bfd870d57ea1b6035395ec495c723672f127c6f89fad89d4f437d088c4e3b", "29ab2144eed91dbe8ae80b67a19afc33a057ba00ce11a6567250805aee1e9f18"), ("1a1af0ef60745de89a8e03a388b515f16cc04fe1b7a414ccac8e112fddc6eccc", "202a296f21347aebd66131e3b621a6de5f3e3e235cdbb7ff6460a752135f4f4a", "126bad30bff51cb424ad316219e1833ab542bae9f32c5cb80f37406b47552bb3", "20bae06f6c9cba00e13738e3c4127d74fada16434f8b58f1715ed364d9ff9e70"), ("081efaff4bc1005e564247b33179c8907fcb1adc819d94cd07929e9f9fd51440", "28519fe989d8655e6100063153462727b0fd9ed90da3f2b8cae02a1631518193", "082c5906b9ecd5290febd7f1f1e149ff5e34cf33ad30d8cd48cb28ec2424ebe6", "2a251989d5bf865086bc864970f34e947cccf128cd46e4523303c73bd0ad7c78"), ("188a21ab1ecfb58de176fc1c6bb83a800839c29fd88ebfebfbc618f151c0d2e0", "1dc0a17448c1bc83d4b58db9ac86ac1a173b8c55aab36735e1658a4766ca5e35", "2bbb85819dcb80b383b604098e9bc6ca3bc56aaf5ca0d738dc30993811ccf8bb", "1e53b59a5ac338d3a494c7dbef7783998a6d146fe6e9d9d18b4888182b380a31"), ("273c6d1ace31e8c0d7cdf390e70c80a1764445d90e9b5b08e89b609a591a5a0b", "0683e67eaa0af3a8a61410dd28d692cf60ce8ef4f91f6e8f516f8a809daa10bf", "2436691e24778c8b08624a31b437f3848126c3c1c6e09fbd8301038526145e29", "026f955944d287e6d03e2251ada79cab6dbe47ef83eff30986799e61a287e869"), ("18a5e0e632aa3227951b2cb69825b5503226c7a50a800e6703047e727262e1f4", "01dc68562e8387d51bf88eeef2f0a111f99580285aed22924d559cc966e2cf10", "0e02ddece055c2a5bff52e0ab130aa0bb8990fd511a4b06bf4444b12b71a46fa", "2d8133c3975144fcc94475771056136dea60a083a7b480f6ab8d48956aaa77ff"), ("0e4d51496a3f7e884947dda203bbbc79e0bc01a8f8ba82df0996f152df9afe55", "01c7a470835ad5937a3a22ecee0794b505d2d266355892452e347bd3031d3468", "17084c16e1c385a6e6365d26218db75591ca451555e021be433cf9028742aff5", "1c4beb2101874038c4102d9b9f6f12f66353ce2988ed9ba4fef489a2c43cba29"), ("2a2e11fcf843ec24e1e605cefcc4e1559f1f2ba46501bf6234bc4c9caea5fd8e", "099c77536f6972d893f454f37e393d3136bce420c9c8cd6877e315d59243465f", "1ac04ccb211afe06abda289174b948c5c50f646a600c3fe1c4290194a1f66d9d", "22cab59b2fca8b341de03c7f7ccb4e5290079eae7b13403e0066a83100f5ef6f"), ("09e07ad928b83c937c3398fbb97b140689b13b661b00c2cea129f2a3ded24b92", "27a7a686a82f034c08f55489ba74bdef6a6c0f6fe1eb0997ab9118237d28ee28", "1664fd3d9e82c984e733bb64820c1d5d31ec90b7b822393cf06311ce86e784db", "16b61a925f7ed621c664110bc198896f459dfd367d960ad86062c6b6762708d2"), ("186e4bda21c69cb8dfbc06a57140825a46e14bcd3d6a4712973e0f99078bc534", "1b67cfbc9aef9e55e933833da59421097f01cde6c4d83d89218c3e87d309b2dd", "1a580dc778c85d5d2fe85a8fed73575ac0c879fd1df45309a813f71da9dd8d26", "238db318f10e57f831ef53417304536feb8392458fb762b82b45911fd20d3e43"), ("0b957f1b5b9dc380550b5df059b69261887b22808e8aac26c337936a0f0cf0a8", "05097f50dbaa0fbaf839db23c76837e02f1c9bbea15f25faeb43d8b1a3765e2f", "16464aae2922b953fa83ff615c0aa173ce64b2182f6172f82a955b8149e8a22a", "2b56bf2e8287c53fa3447097052b90030c8f58a9e0b5f61392c14d967ba6fdf9"), ("1c0d3ddccf5fb23e03162d4b35993bd3ff19582d55f6a4d71296fc443786fbe1", "151000cc7efe85d6b79d88482cc9d8ba4973e7d9937e0c26a4d7860b97da1a44", "13fb91329960f334e75e3c88bb5f4cc8032e8e3572cb841a5554d32ee52d8bcd", "2522ae95763e8f5285742ac00618e8313049baae88b325ded705d676d8fd26ba"), ("20accf6ecf96f9805ad05d03b1a49a60ed61fbc5b26e9faed7bc1c46ccde372a", "2fe78553de54dd74144223cbdd2313eb0e21ce9c8227230bd562123a43b5afc0", "10f66d597e5d700bd4e729c9535200396fda8668a35f25f04d04e17ec542da92", "09d79c8762b2727fdb2a519aff3765d1a1147fc0b807f39dddf405d02a13e02b"), ("0b63e4e1cb0438997c0198ed2b54834aac5cb34828c04413d4fc93df17248137", "0748fd40cc343690012d8f19b53276c3595065e0c48ae2bd63079ab83d958136", "2709b4f72003437071939cbe0e687dc5bb9aec9edccc6e1a321c3a27054572f2", "2b332799a50ee5c72b5dac1c7ddc26858cd5974e43b74f04d0fbd9009aa6edd3"), ("1bfb8a1f7af532ede881583283db543c2cfa005bab1f61b66f1b7d420ce8afdd", "0ae46b8c4b6c703023ffe9d03e84a092c70e1e05f87b13cf4c17c356bbd63796", "1ea568eb699392c876bebedf668cdb5b120c45e989c3c5fc80d2e4ffb7af4cb0", "1fd17b745d073ce4157a15f458cbb96e2b36a11e70b023d4cfe5196c68bc7efd"), ("1f24660394671c7bd92425504411bd4e4ef1ae38d1667cd0c4cc06b74e3f325f", "1011edc87a06e0f9cd071d4611668c5ca27c308ccee76dc2267fc33ee790c544", "10b6f24842d172566d9117afe86db2485b22035f54bd05d3e96ce68cdbfd2b97", "143744b289ac8437c67acfa579e4bced1d97172602e2a3ba95d0d10796f032cf"), ("26500d8bd04a3344398637631be26ab73bebeb1777779382ceb0af3da4a8ff6c", "150e4f731b1fb25cfaf79400361b7dc714ec4e7ae3812f721e702ec8df3b7a5b", "14194ae719af2119f796b75e2dfe01ce0b8c950f2f6db3d915c6c6296c65800c", "255ac1e354a2860d80a9c9d8b26cc4bac36ebe7c26fa1329fd3457eca8009e8a"), ("1658bf77272bde5cc65f64c12d30a0b338d83f6bdc35bd796749e4d08f21cc58", "151d5eb4d8a7af21128ebeffc973dacd78292e630bc6a0183a18a0b750985c74", "1144e969c45104206e1038d70cad08f412fdd44e2b53af7150ffee0964eb8073", "1fd45ff8712bf371c528421363f4abc0e3a65b86b6f08c3fd7ffb7dc2d01a8d9"), ("2f1434488a5ddd99336a8f088b6ee473b8cb4224862daab2edf7bdc2927001bb", "0348a8f673d2ac65c6aaa478fe1db8ff1ccca796e0a75bca600ee67dadb1d8ff", "2d1cdc9df51af1539d2ec22ebaa8aed0e9d41b7c3cb141df0fe235d261cf09a7", "1fab7acbc8477fa3b4cce64705b91555b2ad21ba94739c004de4a26497312c14"), ("238abc30e41450ce66b48927e88ef457761a09e0bf77be961fc84273d926eae3", "05d3be194d8aa34f789549675b94c873771c48b4ebeb766a6098f7a0bf1fe867", "16a07aaa7ed657e3b89299313a49fdd15f8fd26a92d70a33048180f9a18b00d5", "077597f6c7d8ef0eea47767e2f2cbd87832b55307b598f89f634ddeb5a296c09"), ("23d33d6b02b0a33ec668665babf0d953328b50abf2a7fddbddad8e9cff90a434", "064cd3e001e2b885fbd3630c6ca3ba9bd56a511b617ef92ac5d6af7496f5bfa8", "1fdf9117bd763198601506394f20b7f913aec0402167609678c29f04dd849a13", "1930e74436e1fde17ad10e2c0ec394daf776cb97a9dac0a3812568f15b61cf34"), ("094b7bd0d302360ebbb732a194de984fbc85b42bc5eb5321bf38baafeb26d882", "00bda086d089846380f9a3a2a811d03941e430830924b784feeff38de36fad01", "01447baa2d0ed52f926c13b701d198bd9d482a62d888ca4a845c011b48b09a2c", "11bdd124254757b660c416d87e6f3e6edbad4b29ecfd460830d9112962e96a10"), ("1ac959b70033cb0ed3a23af2678d202c548b1afe7a77ae7bfced855d79bd0f00", "2ed72e08be780f1b783758ed8904fb74a9f0309055b563a9675c92300b1ce5e0", "1110283172c8497d2787b8623860d41551acf296b7309bbe078c7c6e200e4624", "2c325004b41ffc64c9e602d00fee6c133e2020c0e12e26723b6daca4477c9741"), ("045068428a363fdd90acd79aea3ca2050917d712b508028d09aed7379d076f42", "1847463baaa6df0f221929ddf4a934ad0546cba99717b53b7e12db73921bf54f", "071ebd2ca346c6e668ddfcae09a190e61db2dc4a18595f5479ec68cfd06f9c2f", "2cf09b915316f96cf35478a50eee4564028f2b52eee7d6c9ce1651b69a9ff09e"), ("146f4c7bec6552481cea48187739463ec2e3c8f3d16dab86527f39795d60a1cf", "165feb7e4ccb6fa15532f315e2cb4cb44bff35ee2985e0c480ef312b8eb3727b", "10401f7229c5c9537f62c066ac9373a5d238cd97c34fa8ca49b741b343423d1f", "124b9cc5cd5f647552da3131c9b1877ecb84f575a2fe8c8489f2831b9b4199f9"), ("0b520d1180df38f7e0239b9e4336ea484271ae9c891c58d6dd032975c6d9ed54", "07e4d27fc75b0746fc8436fdd947a9dac5bfd5776dd43b9f0172f1ea69dc0ab0", "057515aa2844838b92e8da57e0fcda435e194fdeaecaf0d4cf57b64ec1456ff5", "1b4329750c1e4ca27078d5069656afcbc63a67791e822741d71c1b77e050d67b"), ("07913a889bb58bf99357ea8943789ed78e472eff6a2a79c721fc5f644a959eaf", "084f0a34c3d67b9e23125a551112dc2f010183dc3f1f9efcd822ecef44b07151", "27c121834407bfd402a2123d72949726cf4d6685411263b3f89ece8a319be0c4", "270088a2896df02355f3df7672f09fbfbd16b399c0242cd96fd5dff47f47284b"), ("1b6063ee942de1a3e4534f2c20c2fabcccaf4321991ffd5ccb606fa9a814f79e", "2e30122714756542d2a525e4ae2c1dfe0684b877365d0935f40d90f5026e5ebf", "137bd66133c49d5994ccab397c8374f20c82b956b4072233f2de6f735166285a", "0b3d2fcc9bb93bdc5f2430250ec6dca484554a4661e409ce8b60225274938ba4"), ("0e6f96f0fd611d9d3ba990397297a5089aa7492961483934d755a11be5cc4f11", "1bdc952e4dfa9f611f331408eae11c77e7b8408ffda2707ab64f34ecba8e2345", "2b84ea91b9a97dff007dea895fc43be0413eccc95d34b42684ad5145f7e11d61", "054895c8fd612a9c878d5b1f0823e4976603dd8fa4818e6370c554174a89f406"), ("0e29aa613aaa573e8ce9fb9251d6cb824db8d0af3ffafee350d281b7371c206e", "0ae0d02a48195c82cef220e94a413aa983dab037657bab47aceb49aaf401d5bb", "2a3d21bae61af729922d056a74afba1874756d3c94ada255adab9fcd7735066b", "141b86cd99e342e8fc20cf547028090cdfb86d33b4929e33a2ea3ea56a5fb032"), ("1b3b68effc8e76e97e4c39c8704a534717b00d397f8c87e48f7b3f04ae4ddd08", "1acb577c4274b6bfe753d7f04ca7bd9c515648a85513a87972faf8e4cd268daa", "299ac7272e3adb023ff5b68d7af0632a660cfc47c42816b070982d8fcb7e6978", "1727294a3d34a9c48148e961be3a7fe265d929531a6a41b82fcc3f914e5f1eec"), ("1045563e4500c768686e00d230ed01a4b3a7e3ed449d12ef5d11f2576d90a6d6", "024449381e841964f91d654b125387f63f74efcf9b8e1f59d88f0aaf2fab9b08", "0e03bf7b9603c5ad96b8a638ef8d5b86708f736ed1a891fea3f4bf3e378da559", "2cc1074cde41b66734a70ed25b2b887ba49cf70e93c537aab65e63a4e16adb83"), ("01dfe8bce0fd70f7b00378b489f6ffc709b3c39f20571282a7538ea4183024af", "1954d2e76a899aec157a591879217a777fcc0d7fbd4f723d667ad5e925dfe2fb", "2a4b481fcff5c927378e8c60f47b4864855204552d394bf1eec78750878c7fdb", "11a89fc6eb430cf73cc844883f3a2e4389e12508d14493e39362e7c3f91fe3a7"), ("2d9379ce5d330c9778f9b5c9be8c1dbf2071b4e0e4a49f9ed65b8d50c8badb2d", "2380d405f1642ec6835288b028674c721b6ad3759d56dcc4ab893620e5f4de54", "0ecf0a23034a69ae00a1155fb1c51657cd1c34abbb6aa8893be2dcd3d1c4c271", "01c54d862b5308536ee226982ffbc0d264d94312cbe7baded1b48a32138847b0"), ("096c3ea80c30cb5622d9b4ba0cd25312d0f5fa484357a65c263a2c37c3b86735", "06ff363f29eff97a26707df12562ecda709b01ff41135bb1c0a9e57e4d2a3ed5", "0f920cfa49ef9675d8f40312e211d21bbda0df542c8a23caee581465442eb545", "2cafb6c9307495b4ebf257bd181d926754bb0c059f490a754cd5c3cc33d7f354"), ("170abbef1f08bbb48c07e70b248f87fa4201810beead29e3fb51c495ec8f81a3", "0c05e35e75f1bed542409f9424221e23d61fde77a6d3e264d8e911c968632867", "09b2bc53455b3320bf3378bd2e46d0e8b634783e4d93148dbffe26fe7ab38996", "080a8393bf7cd35d12c588c4ab33fb872e99d6c00c924d81a9a93dc2e61b3f94"), ("1b2f693f4fafbcda00f0cd5c96aa3f86bc9af53c5920a344147ba1b49114e701", "2abc8bdf06ef4667a0f93a38205282ce4b81882ae7daa05ffe2c7e24722c0144", "19318c027e8d7b0a8c4267f8e8d46e38482229a39f425caadaaecb74e0ec07d3", "094f8dacfe1c893ebeb8ede20cd3ec9b4b61093018ef87b6e329962c94b36c4c"), ("1decfea0356a9ea3bca2235c4bb8acc859bf64977679133e50d02722741036bf", "2e61a4164ce68a7007de602429c7e3306013a2c1fcf0b14e947b0a2996348f72", "1cf48bebd9d45673fe1f44443b26f9d0f21f64ada9c5c308cd93c843df48cbcc", "0ab3e492e8506e14db1cb882dc3aa471293535b7c54e3aafba9a29e1696943f6"), ("2f5b6b1da1c09f38389e20de4dfd45b5da5494f4ad5bf0374bf5cf7434a8692b", "1299145eccbe773c16ae55e985684ad2ed6874a9af21a24f32c220226e21867d", "28e09cf951fd205036ff0a2a4e030ad6d159a63c45c34af9e23ad306e3dc940d", "00cb8ab0e937dc3ccac3b9b81e6e2db217ade41432511410031a886d56d5101f"), ("1e81231261469a5d5348d689ba3056f69a82c525183ae2522f07df80acc781f6", "06ca08f2e106a40a58bbe4049d04c3ba94a7091986731985314c039a032d60c4", "0d79724dba8c84f42d366daa1afb2acb193c65e83823a7e2608a8c092957a82b", "0649efcd44be120c0fb5166a86184eefc8d2b84b768711fa8859677ded255c7a"), ("1bc6ba4f70477436222e7bc3bd74ee7eee43e067992b553d86e6eb375474176d", "16b75c2789aa26af1f43c954c6e4ff75955f886de45e0cc13f66e3753da4a972", "173054fa1fb842bf135ef69a88905085a50f84d64fbe6077fc7dfc16007cbcc7", "08dba87071de35cbcff7343f27a0a93cee37510154cf780ffc5e42adf4eed0c7"), ("08f1e7cf03771eaf57d9dc6db266b083b6c6d2efdba078ccbd319ec69dc1470b", "11587362d70fef8f3bee412272fe43303270c4a38e32b4a6413438c0c6641467", "054dfa797d30cf87384fb854e5ba90688558f57e077b716eb6772c59af0456b3", "2e3a2d0281281a905d23a2b3ecbc8fa486586271b1c88bb34e71785aacbdb572"), ("11bf2726ce9d9c1fe2e151078d49d8010f28329dabe243bed563348213b55a6b", "1f3fcd1d7711a7eff37ef355872fa73dd023d437f3aa0a9da5cff00dbf7ec48b", "0963b99b5fca566a101ab987bc6aef386925511a3f3407e67143f80cd494332a", "05c67675079e23ec1e0a36642be38e3d7c162035d1693467ff90c955f6a5ab53"), ("012682b8397430a6b16c3919a6b08cb0c967e213018fd49c7413839e877c5a7d", "2c9d11b6151fdb22b0f7653811cd2cdd2bc886cefe64070c8758963c19e94a56", "1b024b59b2d6abf9b4fc0afceb077409ac6188d493a6d11f4422d1a214b43b0e", "1801c9cbd74be5f323242f52e81ddc3854a37533e565a6b121df3b1e7193ea73"), ("0e7edd9de6ef755391232c18f169b11c6851c6afdbaf808ab9063fa08968d8fd", "2fdf572b1000ab5f10444cd38e6cea44495815ac8e9f2230a0c19e4aa56cbb3f", "12492da004612cd6be483f95580da54ca9eb6ff5e7a12afadb407ec386a69a40", "100c539f26777209b2cec4b8a34f2a02a95fe6412ec412fed4d19a110ee5a53b"), ("1cf57e2ec38790dd49a9d4646f796d051f63c5c63965aed94244e8670b415926", "2646e27454992efb55b1490c53ee8612ba67f7b811ce1a119500a0fe6148d465", "2316d735f7447af4e765dd82eda9532ca68a61dfd683153393f930b5dfc35fd5", "25149063f965a2664c8cec770f4847869f7ab48ba9075075ebe5406259720e59"), ("0f127d4fb0af7f430cc17ff2107e21b5be901c20caf2aa50c04cfc3a6103a845", "0c850f6e7a655139186d0332f6fb18b506735940a3b49f8411f358491afc7e5e", "259d339b8baf6e9b2043b5cea588ea443b702960840e841cb8012b03a88fa655", "25ed11d63b3e9ed648997bfe75db95dd158e0ee64dcadd495f6b04512ce9d25c"), ("1773bd6a91802999b9de8165c9c78fe771cfa9af8aa0db4210787519e1ebe427", "210533e82aac370d13d9a7527a904bba43c9a538a7aabe444d222dca40c06acb", "07eeddf38a4bd1a2ad3d46b6347c8f33e23100b968f77740f5a5597b364671a1", "0e10b5064273831fbb7f2592dbbc69e798420d23d8b1eb0bab833a6b962bf5f3"), ("2bea7a04caf22e97e0db684cb1448bec34f776923c16ec7a7615efabe347e8a4", "2f78b6860c483e4e33de998450fc87f79767c6979dd3fadb1f68d926932e73f5", "22ebd64132e25210f32cd83f48a9035ee0e08af3ff24e0d797190190fe3fcc36", "1f053eac6208af662d623a55d8f37c914a9e2cbca164b410b62cc71d792a9f9d"), ("107496893d68fd01de9eddef3b9d41f92f59cd33f26d85c132b4773b34bd58c4", "218cee9469ba938be612a55e74cbf49fd395feec04dac6465f43d9466b6bf9a9", "21da5d14c7c181b6d5081e60e20fb54b7e4b2505c3706502933ba43eb5f1d4ec", "18df0287f243891d01d40c706068d5e8c5b79ccdd5d4904089822b36df07e136"), ("2cb2e3319aeba6ab102de47a37bce88264ce6b5496e5046679ce2534a8f28f1b", "01ffedc8fdf49bbb42ae0d6f3b882e13dd7c5fc3f53c2888f5190cf578208d24", "2808df5d65653920aac5424310dd2f6e189693bad18876ae2c08be5304a4d197", "12b0ce986684484975c5841bf9c495acf21097c23437d1c3b0460d34f2ba3e3d"), ("04b136f0206671a753a90e0089d0c2ccbdc04bd9659171447b7411f78641ed8e", "272a6629866deeba22bb4980d4a53e8b8448d974a51c64b7f2d6372dd0ec2457", "2855686c4c4912323cefc08b80438252efb96e7b107d07a7fae4cb07b0ade189", "1f21d09bcbb8fbd7907b85592213d5da0917dac8539d23686dcb24b5ebb7c1d4"), ("18c58588a98010a30b1073165cd6685f81df418b1417da7c847744a9d53a7507", "27f25ee2ebb355b20f3e5af9ca89a63b72e777f41a7e4e10c33ffd10945ee2fa", "03bddf2a4741bced4ab7de3302b31fb9913aa5f2081e616a7eb243613a66e0ef", "2bd99dde8be892f787b83a99c6f2610a5f5e96a9945248123e47076fa9d5dccf"), ("1c93e4d3aeb639f66ad9f5a13c1f36b92dfcd5c863d2b7426908b08658404da8", "28d361090cf54bf5b4c72b8a72e5ba9d63d9f1776e4cc0d4ed47c7752fedf6ea", "2c8d5beebad476e8bdedbd2cb05f31ead43578f660a6cc7428eff7dc3af99555", "1551ef640ab2be20ea053456dcdaa01b77611357a7e81306708e8ef7ac395d63"), ("0b41fd0a8d61eba2a83fde8a23322dbb12623b0009f22e3925cddeb4f6fc0a0c", "216bca6a1e728911c79008123e8aae73466272697dd39daf2b6bfdc461a5a475", "2f8493012512d830b6eb3cbb01493f65efa6a656fb0bc6ab66006a4728bab108", "08408748ba4d95171f2ec0b574f25ccdd1d304ea0d3da7b0889a02bd57fb7743"), ("2f853c0c6d6a87578142e3feceb05f27b6adaa9642c996ee6d5aa9d7675679f1", "18b1995dc8549e38c14ea25e148c51ae58af7eb9b453482fff7587971fc1892e", "0c2aa976128326ec1b60fbe32fb8315d8f3e669b07a19714303cc63e5bb1c238", "07db05d4dc87a477ca44a76dbec2565e1a2f40585d96c12c286f07cb4fb488ee"), ("2ed9783bbffab23da958e86c94a4d245c0dbc1949a5bf035f0a39dfcb8efb2b4", "2288a386d325111aba5300d82716baf417db4a7667c1c9b3e2161aa3479b058e", "1734d4e9ac36c902fb29c19cc3c2dda1e5f9b2308c1093246281a89cda46273e", "178f19dde50305ac8d976715fcadc65f3e214493cba0c8562b7915327d92c58e"), ("174345d3453bdc7aeae05da7d7238b219f77df5436f29b7ddc879093a7f7f2fa", "15eac3499d05c94c054e53fe82e3185bed4abb0d9133efe183b1f3ce2ddbce07", "217e183d4ff545cad13fff7a967906bf528433c5acc7a653052bcf269fe43ff0", "012f52be770d8b8851d6a9f65b5c43332494c13304013a063038aba79e33efba"), ("29bae5e89f82ed2644a902944dcc7235e3cca0e99c6f98f2ca60b58550690f25", "29f67c501001fb278cf094174d5a4b69242eb189ebe52b7fb04d68c7659ab87e", "28750bb8542f7fc657093c4f3a1d72920f245258e04361d8b210ae17ef5326c4", "01a9d56e7f61e3614e27f11d29734f108392b77af3bc1815aa8ee55a8de519fb"), ("252adda30b481b1f8c1b06fb85567994a2295be20e24751647de157fb08809c6", "1de36672a3db2a0eb7af5c54c0f0aae0eefe730d1822292f75f756e9f122919a", "0f1febdf3af04fa4f7e40b6a21f4131e77c94c5fb578a8e5c1fccbe232ae4b95", "1dd006e3f37a50a2c2f24babdf01a0735eaa7bf818d54a50acecd23873acd82c"), ("02b641bf8da8a2b2f862415065bd8cfcb191792a10737b042c96a23432ee91f5", "115747c6315b111adf3e57f309bc658eebaa40a6f7905f41479619f89e1b73d6", "29339c24df0c11678b1b4f27fa4b54256b80bca17137f402bf597a106cf2b049", "03110bb946f8ff0af812aedfa0cb251bd055161fde4088d93a4c279e28892953"), ("0a9e0646a71f75b94f0adf5b8a28205adbdba35392e23a12522457fd4bf59a2c", "21eeb2419037c04163eda16224514c00863e9e61f11d61bb7d6bca31b4e3b32d", "1a078fe1606af966e3766dd69d8251e4e13a1fff08a2c03579043cb34901299c", "038cab3484cab688e63343a9912bde85d82fa59c01b23eae873c9a4688eea5b7"), ("13c3135fad42d849cf734245517656f590c7ef1b63df0165bdddfee1d1fc3889", "175ea265d630ac44042802ae6b449dd32838992e5de434395a981df029045046", "2b60f1db4b177e188e6d2bd391ac693b7f4e6e90fa6d53d9f8ed3721824745fe", "1e61517aeed7c31b55fb2809f2be06f2b13c23f90a4736329cbadac2888ab5c3"), ("0ea1a3d3558674ead9b9ee6a08969a310499dc10abdd518c8b6eeec729219905", "0b5f5859cfd43f198c44e16215f0ec4ca6fd0fe2967b67beeac837c09a30c842", "1f62579e49dcb93f78b3fd2cb59148fa69b11aeb986d440478f7664381aac37a", "2202ea4e1391267baab35c017772f214f4ae7848f2bbde3a99a1763d8e624117"), ("0c1fdea46b0f5d6701e8d535acf1cf573ae3dafe831102fa0e8bef577f454d63", "0cc6bebc12e592aca2dc64b0268207573792fcec77b617a84556b4ce53def952", "212d090a5dff1fc58c27c1c8cafa245de8c545cd0e85fe87a4da5f6d24c0152e", "0a3bd72153c162777404c71bd8af4926abb39f639d2e3f805f139c5d519d894f"), ("2cfb11f04c1523d9fc28298d00ad203ca60222de9526d4f0f92eb9f945a26edf", "176bb9d5792a032dd63792b19a67f544cea07364af8442b0b07ac544b6648bb5", "21d0df3f3c250ea625e4d120f0a28699dc95a707549e907cb2ef13acffaac301", "10f2dbed9ec74efd25c96403cd94b34ac12c7693efae7737192c84f6b5dc6ff1"), ("1c7d35e062e669a9d88c56ea18f721daae9f53847d8976e8226986bf8710f663", "0c17978b88aae0bc255ed2ba9e283ea88468f7f335219242ad9722dfd73c0a34", "1953ef9321a608a3925c2eb48347257c7c9b199fbd7381f4711bba928f14936f", "03e03883bbff725c3f947ff50e7ce245cde33c3e13ab107bddce8d4744f1bee6"), ("2d7eb03f18b5769df8d08793857984e6c29b34153259df83e5e315391733979b", "1cb336c6135b8caece7c797b1344984e296e9481b094749931a1e5af9fa2c9fe", "2332293280fc5a1d7c09e31bebeed968fd5680b1eb47ef5733fa1f41d9dbed46", "1a0a854232f3afe162f07c2b6dad06363f8da64f3e4808d04d9a83713e5db302"), ("2d3c7c464f66686b66e78bd0f88e3a43644f5d777c42d37181de388ad11cccef", "25fdffdb6a2f67aefaf52336c41a2adcdbd4ef22c7645a1acd2b7cff3c1cfc02", "0b6c6c2316298afba32e9912d2efa661ea7eeeeafe3af8ba29e50ad55e213d66", "305373ce7016d725b1a64439abc6af9aec7e40c64eb3fca01fda2ec4194cd20b"), ("12297acd3eb163b020f914619210c9ccca3f094346931b53e489e588c0c3eb1b", "19c72fbaa4fd313b731a8d47c51652eb1432940b95e3405f52ced95ee7911bee", "0aeebf1570ed6e2df5c4649b83a490d3911bc72d1b478d96b01b7de8a24e0330", "1779ef6ec38d66cf85a8c4b12a915478946ba8dcc34fcb021cde8aa6c1fbad6c"), ("1270c5ae615244b12104941232bb163566f892f53cd38d86bafacbd16cf6d0b6", "1dc6a7a6b08239fe1b4624ae48fd97db36ac3fd04addc04afa89dc9c904b7cb6", "1c051ca82269823c9995c3b98fd5686b8ffa0b2936c0124631cc3c2a90f1e38b", "056d8ed43d75998832d3fc5debb445b16cc0216501414fa080ff6490f194df3a"), ("2efa1f3aeb2096fc895ea12a541d826ba63a32d87c2acdbc98201b58dd962d52", "2fdcca5da43ac3f004865b92a9748dfc601c2dcef8fb4eec6681867870f64978", "15fe0ef21cc413e04fc79fb992f86389ef2156e94877a8f8554ad4d59ddfb8a0", "1de741a283e64d8587bd14f5b355cf27d1cf94be554cb616918fe92f8c683f9d"), ("2dd20828270e7e4266feb3533b642b2fa29accb2e5cb5e90a62b2621b7418c77", "2fc4f1d9a00f395d893b12a7304fa271c109d736186e417c0c93c3e66b9fd844", "02fa182d9c388068d40802fb0fe960438dc30d2446824e205662e9612533c772", "14209626b27fdbb1d721b57b56ab5165f4c2967eab52702d0cad8f1e465badc1"), ("09f2ec6d1513490228521f49593ddde5e9bb89aa16708c784d43c9ffa917bcca", "13396a096f0dd7e613dd190a2cc0b6f5d1150d3e68607450361beefb84979d32", "106e42d6abe47ca516c60db698b12a99337a6557b0e5d7fe70d47cc63ea0ea32", "1a9ed6b612bdf5aeaa18c6c453363e95e2082df7b3a6a4085b68719842d1d60a"), ("1ac1365c9451a8456f4abb8b0021b02edf809114978b8e80da77f8c93eb76048", "21d00acdf9d37730ecf44387a85041e18a3f060710245a6a528734035d2632bb", "20fa4a3fa6692664dfaccb9cd2c0c9a24c69999de6f231958b60d32b0f2481f4", "0ecc1777187eb70474506e20c4ab7a105b85f3b97086614b81d977c53da46c7f"), ("05583c0c168afc6249a339a575369ec824504c2e53f85c4a816f6c2cc2b2c77d", "1d0abf050f79952728c77e9688f9481a0ed5a10b7f0d6e85e16bcdd61eb96b42", "0217111c72b8c18311e253546bd924c109de585f4749f43efc80e2b7f16e13bf", "0af7e206f7729443e758d685b6ee9ff820056c5eb16b9492264cea8176968844"), ("1b6504865faded705f7aa5432620f564bb1120bfa7c10cb4f2053ac8cf73d0d9", "19d034e6cbd1772bf33405dabd9ff383d83f009c56ee330c9ecc839aca922eff", "00d1d2829cd091f60d43a1256c4c59d649618b5ee50da85cb55fd0395c64535e", "23f5cadd6138631ad760f6d1168f8e1baa902773622376ca7f0a8d38bb1cc367"), ("0810db9e686bc357120384f7cc3befa3e014f7bc4f2e72ebd76ed89591aff436", "1d7dc0cbad78d0592c618773c454dcc3dcab0d8f07d574c4ed4eecf77fe0fab1", "1af303c6525c637fec8d9fcc4184a112f65b1c8d5735ac809446d5875f574e5c", "02c355c18ff38886285ecd6c3a6e2cc3b92c3c6e2795cc4482cd992fc67473fd"), ("2a907b01f07fb0c7fd9d45f25df744ad3c60ff9ae8e8e9ba134e55b3d84f6c0a", "0b973faafd3936ec39f2d1f29b490156b8e54336440557bdc83504d200430a4d", "208c17baa8a4bd32c260c6a0a8f8f7d909485d4eb79b902cd6aa712c8b751e65", "24518bb100dd6987adc4e5d4b3b6d049395d6d9217e6d3a4f62065e7a0e73b24"), ("255f96acf9c0bd3b69565d21c61cde91cebe9e16666ffd33de6bc2aa951c8717", "2dfc63caf721ccbd74e3deaef8db813f2f9501019cc62f34d21315642e8770d2", "079d7461f9e2ae64d8f4780bd147676a41eb4a77a2090e622ba7cd72871dabc2", "13d2184ee9554b8b83a787d6b77ae7130f467398ce9d1144ad91d30a4c26072f"), ("05f24f6257430cb281a72492915cc5db1528b601501c920f5d386289775daa54", "30183d211c9ff96d4beb075dada7a8086ee547c0b8e21b5d708d36fb53529346", "0cd9f4af91a153c48529e6ce2dc216674e414f1cf2c5a377f4366789dbb9533a", "2659f9366f577025a7e02c52c6170d59feb72d64bdee3d1f287f81012a69c003"), ("2265936636965cdd28334398c8b7c85777793f5da26d6f694be095f20f016904", "015f723ed3606cd7996e731c0e17f6ce2b5a7df8552e6849047577205afc6434", "1e684bd10783e73103a69798405cf79e5a5efd8a17cf1406c11fc48afe44f3cf", "26156570539a661d6bd16f1606a84a6330b42a97bffd4b77ef10d9670d590f2e"), ("27b596053a64028b8d3cae93d653f87a2929a29786e4db8f4d58cec016b4a353", "0968cc673972f69a2428ec67522bb244d2fae209377559107f4e9f749071690b", "1169ca259ec336cf4b66025332fc7d569bb90399c7ca0a9e72f54465c2c76142", "1a6ae9be7ba0e0b2b390dd0d62ac4ef8c64ca49ab7ff98c95aec092f969acac6"), ("055806005d4fa75bac632ccf519f26ebb6db39f28b80cf1e604d3f538cf23741", "0bc1eeecffea6f315cbd4de22183f7590209dca29a38b81d21a306b31018d741", "062b027785946e631333fd412bdce0526860b2eeb2dd3d1c9885aeb29ad2f2be", "1b43cd90475f8a5245313a144feee08e9a9828315b69238aa865118269c3a3c5"), ("046e1ba3c2a9a9c40c6224eae166c4db52f0b699f1d7810a48cbee9c01a3b402", "20432734fb2e478168b345c1fdef02621fccbb2909e9a9e0fe2c9769ba908224", "1bc6be3f36c8f00ea100749098537cd89d3a8f6e7232c8f6a75d1528a7ca6c0d", "2364e60bd4e4e8b946bc3edca81b8659dad556e76201e3a33db9c833b1a11215"), ("0551a657851267d2e575a827a5a16b16fd7ca51f36543343e1fbd5ac7d7cc5f6", "10797406446b2501e72479ed85cb2da24cb4ad1779346c0087116486b400d821", "09f92ff9b497c8c95b67d67d543972336ba8e8ef1b9a40b84ed62581e0593850", "146c51bc5b6a35e2674dd881caf91d77f5eeb60fbf8a7d7d17c72ad31bf43912"), ("2f15bf1473222f37dbb56fc903f083cdca92f1ede2483cfbd153028d503a30b7", "26f700284a70caabf390a27eaf1f878fb21ef42b37217591057e6284f8a985c6", "11cfd75696407b1a4befaf130beb62124739473c55ef23418d44cb2b1bf565b5", "024ac83196c2092d6de15cfd16b06e69748614c7bd3f9b11108d84d11026f499"), ("23a2a271e35c1fd8fd75a32ead971bb8a48d9d4a5159f598d23cde63348891cb", "0205cd737f5a26cfdee2eab24b8327b9ecaaf3c31476386768bb32c6f07559e7", "1036f34fa3d5b45381fce34f2d937778395efd98c06b493e801f8c6a35d0cec9", "20fbcfae437c23c1f4bf5b737bb136d59e3e6fdb958c8f375653fdb1f809478f"), ("04119befb9748e95afeeb73bf8b2811d007f0e7c864071d1c8a235026a5ba33e", "1ba1e0993270a4804818fbb5fb34f1a461711b0fb82ec030cacd29cd69cc1df3", "2c540a61e8cdfa390034e0588dc15c41a9e3a71e456c02e1f7f50ae2dc0902ac", "29b15b2854529367a88ae050d732a04e294ed66b313d25c884d78c55614492b7"), ("1284ed023e66272b9f8ae43038529c6dc0b2b1dab7d9c3409f4d20c66fdc55bc", "09574cd023311a55cf9c0d83868294a527e88306737c83099c3b25fdd1beeca9", "2968233ebd2937e96298f18c7e7666b44f275f6b816a75c57bdb536ce20dc310", "14773747a70c11c5f8422c03d450b6609f106fdd7750f67ebe5defde44a53129"), ("1c8518f7f92f8258c7b6dc00908c9d7406566b888701d385906d8ec93868ec00", "0c31b4336485a3743fe150b205f98adc530ee6c9552bf127f4e91d4f61bbf13f", "0d3a9f6f0682a4961b1ebeb47862b2ce2139ec1493e1fa9501e1b50d6b52e4d1", "1ae961b75cacbf8b31f955dbbccfbcdfaf031996ea695684b934734fd70305d3"), ("27940f0ce073f1ae1cda64c5328b49b07ed467081a462b6887aa338ec97020f4", "0d5b3f504c20866b243e7fbeaf764e1e64c2b71e4f432f79e40ec7e933912af2", "17a784439fcb0062771ff8e923f3831a8588ba51e49eb8009f7aee262ba1703f", "03e230a05cc4bb18c819bccdc473793b7d3643efe71b68fb4ed407711112f62e"), ("22aedcd1de6705e11a5333bc6d7cea45db9cc317d316f8fa2cedcda9d8796b78", "20becf453ea961f11408ba719f19bae06d0669c2540560f7b35f670921e21198", "0301fd7346cc34c3479afcc515db2ecaf148f83e3858e090e64879f8cbd7f591", "041166f26ffeb293dbfd13253724d50cbdd07f423fd6a3731bbc6c00f05c67cf"), ("05ea7a4f53765d4570bc2588913f9aaf5e44057d77042cea5ab7959de4b122c9", "208d64c98231f0d922999cadc0c0d852e2e7ea30ff2674cb1430737bae0c6ba9", "13f966c9f11826c364b5f2825749668eceae3f6ebabdfbe0370f9d7868da32ef", "0dc1edb2b731744ef347d1a9a0affe48ae73ed21196d7b61b67f57e7a7e3d803"), ("1326fcffe644e028336f05cee66d764d954c0bb427f6a55adc60a854673f201f", "2604c5c88fefb4ede6dab9815653dc6a950e2987b8d55ae6397b2848c2634a5e", "0527836cd3b2afc6bec6339810ba79776e3c56d9e55fcd54e87fe6c4a1a53066", "0caa9438258d1c965b98f36d2a9c85dd327817f773c118774f14b7d35b0517ed"), ("2182589148133a7f832bec74bcee17f385680b5643bcfe049c2e8a4eda002ddd", "2cd819daffef73b0f487c85dcbc84d8f1e57308748da70f4f4db43a3f5624f4a", "30549690d8f4bccdd22db236e89b16da63b13ecbbf69d186b05ede26ec3bdfa2", "192cccac0ba8b0eb3a07f4071fd742d138b142fd07689ea1fbde67c41ad60f98"), ("26cf7955fc1de50428b6a35579f1e7884e601b30f11984065aa4143016e68a4a", "0201b3f8f7e72d53daf8316c7e1f773749e18abb6f91616c474ca292245cb15e", "177965b3a8544765919e60c8f74d6a5ba89dd79171467fa9e3eb3a52c267f5a7", "245a2d4c298df9a290bd5a909d4bb94b4af04bf8cf95022f9b568b18157b3803"), ("1b2d2bd6584f7ab36a0280ee2708232de7c6730544b1d053c3153b360d4b30b6", "1bb500b0e42e2eb101362dc296c3c93ed192e80853016e815d8be701ce00043b", "12c9ca51deb0ed73dc97b3a9a6af30f384b1bcee9925205dd952cf7e8cb194b9", "2c41b000349ef53be52280d9dab09196cec3fbaca3d773af326fed47aabf4a72"), ("2b73f26e44c878ca5684e5c5d219c63fecd94e8c7effbb6c695aac1d95d160ca", "280b4ea974dc9f38eb3a7b3a29e6955712e81f4f5e84e97e0691e4e478baee18", "1229a04ea13190086ce7c03e54dc8183e73809d565cb5b17e89bde1167ab5e87", "0578c9fe75b222da69b3ed21bd259a123b4a467396179b15088f6e53f8125d67"), ("08319bd26b4de1255f05851df7f6e93a657e64bb5b55ad4dab2ce0352efdcd1e", "0c22f87fcc752c2ab73019489cf93c1aedb2a5840fdad35bdaafff9606b0606c", "2f1ecd0af0b8c5e59d97f8e372945ca67fb0c7e3aa348ada479b86f8239338f3", "1fac817335242ce88391d85dc03274c2c5d9567fd53596fca1b1f27b1f870914"), ("2712c739825834742c2d22663535bb86a55149be2c2405f70492bd568d53c98f", "1351c28739f3be99ab8cb342da2ec8a2d94b583cf9808076066bc28cab1ffa8b", "2365a91994330ad44d7056e3dbaae8c15442f3ad5636ff0d22d21f1790f4d153", "1e1c5e53597fba73f070f802f75c6851423acf60451d48976e6c5fc088d09032"), ("27d68b553a19560bae089a7d7ade3652246fbe520b1be3d80211b58ce2bda561", "19ad2c17f6aa8db295994ffbb0a9ffbec9088179e7085e13047ed730c5e7805f", "2487bc0c0693973b0d19836ec3ce26273b034a012de0fac3cf8e33319c07ef28", "0253bb2010b0310fbfa6ba7d66d67922b1f1749e67deaa1b2e138ba0ad04617b"), ("2252ac29fbe08dea33ccb2e9d2bdb4e8cad6c5ab3e112eeecc54a982169dbce9", "22bb11aff2cff16945fc826cf5967a5cbf2eb90af0ab641b3a4b8caa0bb997c1", "2ff22c1606ee580feb9bfd27baeb80c43be895d05a0970f76e798350ec3c3dfe", "05bb7596398d17db3eeb27af0b9ce1e30ef098386ecd3d6c8a2f3256e2368c73"), ("1636822df3b8224ef2eb7217e569d2d763e7ff36dd806d383e1211d7faba750f", "06bc8ac394f54d9b497c5a46872ad59a1433c7e74cd4c811ee9abf6aa657c304", "2b2e9f9df78e6a85560c454578d9fa13bbc5573312d021024f3b32bd7596bbdf", "1d11e9055c3ff085d7fd6c854dac0706747318934f53ad368f02eb5e2949a62c"), ("2ec82d4a11a44f768f7f46711965871292e4385433fe3f78e1d4a95c7fdd5512", "211e6528e763ea63042a6d69d0a335ecb584a9dc3558a7adbf31a154abea5118", "19a5a8a5dd9240615e4450b5a7221fd91fa2d1e8457c3feb769b754e7e83c91f", "03d0bf293e4ab2cfea3c97b640bb942ad66346a17969934e3ad56e2cb251a630"), ("19d5719a5e342f5ddab067f03fea78118d4594425324bc411e33ccd0f92662c5", "005adad9d43a71b895883efbe8ea917bd37ed83625c8b65bc82e69eaf7fcd131", "14a189c461061e6e2ef62c47bd9612346c45e62c285eb0567b851285ab681a9c", "0037f89523c78e39cc923e23776c0bd3aa06293a2b205ac9f704dc2b444e5356"), ("243b520bc335b0db246988903d6e046c6b8ba1caf5e8edeb54c47e54b4ab74d3", "19e1eda21da9b77e9dc689901dd0bddfc57d0280c56ff236b1c02522e8e8c0fc", "034ab4a86865f8081cf486a5830ca048265f78fd08c21e45078f97317a38643b", "02ecebd7f5cd6c74eae4408c2bf1aa397e1fc052af254cf2c0b68614b9cc7016"), ("18651bb9acba6855bf858d2097ce1908c19ee98129f85141daddf6475854177d", "1fc3e646197493734c56cb013f5f93a2803417060f0159190e5626049bf9c10f", "007b74ed25bd0229ad8e2eb9468b3e959aa0a4d500abfdfd083661486e486d06", "069abb5da12f039afe934abad4257bb543a59ae55950060af719eebed7ce76d4"), ("141aa0b89804e1eec5341fe8c5f35b28e2da34368d2301f4bc9ddf02ec10aaad", "0b7dfc5819951464482758a1c52ba73ae9fc3838d805e979f5a009c938de52ad", "2226a4cfd9ceb8ed72447142298d1c304c973ec5a18327cf998203359c73ea6a", "2c76b8e37b79a31a1aa78ca9e491941dc9c259cebd0a634a624df2892f0410a1"), ("1918db015d19dbce3b6936f21ff1699fa53c100266276b08cc2a55a902121990", "1dd93cc2f31c0b141764969549a93f9a8aeb2f4e41ec44bf79129c448a27d8a2", "1d5cba528a5656af80533102a4f4af0a97e7292a971cd42ed95db7dff036b91b", "0f04f9b6ab1e1e8447070d1d4d7b1415346f34290a50ca328f6429523a94124d"), ("248d85ca47577b650828f6d2eb3ee638b68cb84e4dd5043266873d0280c5abf1", "17913ff706b598273efe935dd2d15a56616e0e0291cc2d4f610f6729b676f422", "119ceaa264c142555712b555c5c1d2a0547b80376c5ef10bb726531a2fa2e90f", "027e3cbf289ba6a3e38f5b1b705704ef116ad560b984d0634130300a75224a3b"), ("24a52c4a4c439131e5318f7429dcba48bf02c5e57461be67303c13e3cb11338e", "16b89e56e20c4f653104d2fadcc2da861849e31711756a7b60d4f79ca1356168", "1683065560fe2f19a45aa84c627c3e832850d0328823758a4e313ec965014ca3", "213f17f401e90bfe62c0f79fad59b42a5325856b133023fbb1ec62e9096065d0"), ("0123a7d2101f19f8c5ebd19f9d11e37f4c431b275860c8807903dd0554cb111d", "22d43f6b4ef602f0d2cf8271325a5b75455f765b96fbeb908a7f8d0b83f27014", "24412cfca438a8cfc70e46b0f284a131ef5ea42f64ff4e9c79426f2ef939b9c6", "2120c601dd42e54545e0d17efface5fbe27a0b8f4af30defee62839f4d2189e1"), ("2adc209c597e297285d69c5933190f079af226d21e990c2d890d7899c024dae5", "28671ca4a48a95881b91180a36d35ff626788a94d5a78b192035886a0d437f3c", "2f00baa70a4950bd693a019e9e7583b6ca2329cd9a1911c3283bef5795f20626", "1c914bb93df445c213f18c5e888f7384f4687e8f29b4cfe4da2acd156095b1d8"), ("261be3a31d916309b0efb0649d18b0576bf26f16d7e31f14e6c4f23fee6a8def", "10138b1a975b234987b770f68a4dc836e99eeaadba984c901f323cc602cb5248", "0a13be660df00ff641610867e61a0939b18800ae75a8ec96d3bdd5c5ce56fb5d", "0c3e25ac6d7e7280d7de7eacd048b6fb066b643fc8b4f2f138374f5b69138856"), ("2f032774396e7a9cff4eaef2af8eebd2ef20603530434eb344a235e96d847b52", "0f37ce3e5af32a34cb7a5872880cda570e19817a4667b0c9436dffb28fe526fc", "13ac60579fd268889f4b4c25ca6dc008b1f0b86bf8e1588c24cfdb57de6be34e", "2c6c5abe5e75831aa45a5cfda0a055910aca55b1f1a7d3d1303d283f06153ec5"), ("22452aa34b1954c8e0cd665bb363eb20063aa6b57457bd701c632f87e2d838b8", "0eae57499ad4dc88f4999a539584773bbb749864aa7ae5dcc8718b71a856c832", "0d55758ca463641c845d0e4b9997a6507fb7c3df73c3d40a24f6a5bfa40ec32f", "07d9b76846575dce4272d4a3ddb333ca980a414db87dfe36e9711e98168e5a4f"), ("29eed8e7dfc7551efa574881547c2787ab8a62add4262a0b25fa180fa1e0aa14", "25ae251cdb9219fe270040a6beda5b06cb9f68724465572994730837057b47f0", "18c0bbd8d5728b07033dc7a53c9671315bce07dcaabc546b49de0be58c722b4a", "13ade6dfb96ff7ba62cc723da484cc7d2033a54d7ac5e76604daa7d9537ac9d9"), ("2789a76a57d5cde6ebea7eb54bbb570b9dda7c79c1c55eb1595f209a6092bbab", "2e32e4f091e5e66c457f45cebccea2fffe3ade09dd4f49d8dba45ca85e269da1", "2dc5438de52332d37c2b8c9babeff38b5d3f2c70f60f664f3252c14827ed456b", "1dd981fe4bc0c6597fa57ed7232a6c52f3494e60114c6a1a8e51b4c4c6b65640"), ("0849a93ac5a635af50b75fcd9ab29167175dbb1955b60ba571fb0f28f00a0fcd", "1bbb3f495ab63db908eee5b41929a3687f310b9160281f3d48c92b36b0698f44", "2556ec384824a2af08f969bbeab05abdfe93c563a568018d1ce238ffb2cf631b", "258f60b92b977ff266e80a5dfa15dfea8ea60017df1023d7c03d8b3e7446165e"), ("2a057f35aa3beb1f15a3279e459c80e0d9fefc30b64af0030fa6b18b34eba081", "21fbba6ffdbd63915f9538347870486aede61d961d455ec8ef1bd606e1c393fb", "2c6fb5d25cf2ace6af95d39a79d4459980578eeada058588ff9aeb08d0a2e2b2", "1eec56495695f8873579b8db92c255963130a0b01f7975ff76d6753fa8f39636"), ("1910bb600901c86d15a3e0064069506b20007b3b14ec2553ab2cbb8040c1e95e", "1fde1182c13fa9b79058cf1a658b1224114e199000ee36454655b50e46c92323", "03a71a5d51fb56b8d98c49f60aa10111e343c174c6caa3f35196e8768a9e0fcc", "2a892a0b92858003b4506e08d3386c14ca20069842a18fdaa04ab616ac593db7"), ("1b28324cac0912d5eabfbb4ab78a3c0f814206a2cb1235461c685d050935edf2", "1d7e634cf1499b10482f7e67b6a71a051e42be64538a1636ec51e78ba4b51f7f", "207dd09c8c63298f96bc64559ef3b58fe953d61c47fe6f1addb0195e31e9b7ef", "00ed6584dc1bbe69b76330f95159490b91e2ea31f69c01d652a50381043c76bc"), ("1dca0ad79c1b6da517dc378ff4c5c76c5cec6dcf9e73821ddd1a6f42cbed8af1", "08dd9472c04fe63cdc60bd21ecda8bc0d430ba1d1b468af958764c5bfe5ca014", "2340a5bb92f1008d473e59a428c1fdb03a221894ff70c20999be2fd7bf1421f0", "1c4f7fea3588f3abdf91cbd37159c29c39f7959fae98e4250d725fb24cbba75f"), ("2f34b91216b04832cd8cc4eae01d7c5f7d30089589635e07be6ffde836633293", "25ba6f3408b4ccbb62d5c584218192d390ff1e0831cc75b9d47df971cfcb280e", "035793d17ad5d3b20c089c1f4c7969f42ef4c62bcb0f7401eabebbb4fbeeeeb3", "13582a29a509395deb4ed3e46e45e83210d74552dd7198128bb9bb772bdc3a6b"), ("0b48c293ea55585da61235ed4b1560663903685012a97d4be57efb110c369319", "22b13488b401b160275e027e7e3825ad245283969134dbd5473f70df17152708", "07da2a7a1010aa00e590b89a2ebc4e485ca4aea940efd59b1138d68fbfa85d2f", "19bcbf9c09771f90dc6b3d8727937ef90677cf3eed1beb29c9ff3119782f2faa"), ("25e325b762ad4b00d3077a99c1b479ac25eea29267e671f267c46ffb2b662fee", "11eb3902ba031cddb3a94718bdd79521614d7f9f5da209e7786a9d675d36dfab", "1911207b5269cd8f21a3479bdb9731380ce37d6b0666e8c5a0eb9eec764d9965", "2abb15938edece3759f68ffcbb9b1667e21b523778861be8c1edaa12cd08d65b"), ("0d74bed07c3247a09030d6b55075b8f31c282b368da89ca164bbf3fb5049e7df", "2a0ae76346f65b9103028c7b490f647b7c0eee8952d46bee1e67c0a4cb16add4", "0be56608b0a9420dd2d3f364a1c33d5ae89b59adb4301ee5704fcfa714b4a673", "0aa2bd3b8a8278b9f44cd9430bec4e44044b8bcf06e5dc278ca967081eec4fa3"), ("085cc135a5364e4ccc6e1e1f5d16cf45fd7f2f84ece8f27fb0a5a2f43b37a183", "168f83141b4adb8ef9ea1729cf74fe9f943cc8b3cd9243cd7a1bfc41c7ddf0a9", "13170e9a4388522c9a1d16501f7e0496dd9cc984d01c8a57bdad808a9886aff5", "30371c7ec06e1adbba7e25e0c157c2a553abe4b914686520beda1455dc432ca6"), ("003cc48aad03179236bc45203348d12f76f26b527614e389df77f961ba317d98", "2634ab907cdfa12f4b8e886eee201cc9debb0f4b4cdcd4a5e7dfdc82770533ab", "0c5da03d27d7fa56bcc8c95df764c8fa7efa7fefb32cb9998549a5af33bcabff", "29ff1712eead65aa24d04dce4cd42f0332745e9ad369ffa03dd78f847bdebc91"), ("1128e5e6609f09990b4b565a1417884acf91a40f07d042a2f32ed8fe4decd609", "032b54cd8385511076e49b5e6158bb7cb4bc9f7c7baacda2e767b6256974a676", "1a7941d4f02f1c78d53b404a72316ad9e46ef3ffbe2354d899b9ab5088376ccd", "2b24b99159435e4a08dcc62982702fa194b966d77bb9b5518f647095ebcc567b"), ("018b0e040cd846c743a8d3a78f700cc874220601efcfbac276d2b720cc65d8fa", "2831d91331fd169f752f0e333ab9da616a62acbb6e6d4a04cae43ce12d308298", "027177037e271cb02de296171998bb29b66cbd3fac8721e0cdb52c589b87536c", "224f82e25d086e521f2f7e34bd0b7c5926009c69d28c131ca235987bce34f56c"), ("2f2a107a0c948f9e092fd86d64deade544182fff443129cd569413df48d0dd33", "16509e67e4500c43314a97231d715f52c35398dc6d3aa4d42f162147b2832b9f", "1e360b1ee79d50bc2ee5c130fa9a5709d11e577e2eeff641e039eda1af872b5d", "01373846b09e432a309b04c072f5666601202a90ff208ca3220c718c50242d4b"), ("2e287fbcf4e4be8381c242dbabddc3e1d4e9a566779a0e365fb6f99c0e780f9b", "21f9d18fea70f67f2535cbed5833037556b0321e442d61b24a5ea9c6b8b05413", "175b2c235dd05a414fed9c9556043b01154a4598ad037f8cb269aa1644e55357", "212cf777d9591e82edc9fe6cf3635b2ad87f0cbf3483104d250ed9516e04ce25"), ("05e3acdd9adee69510093a935ffe46c205562aa6507ae098587ff323c6691d39", "0bc379bc1bfd598863aa06989306c760735740d5c8a22842b29375c43b98ae70", "19fc09dc2201549ba81f7a60769cc162a034fc17b10db6380b2d204c061849aa", "0d5d724ff7f682dab2252ce205a48e20a70916bfd7509d6e8d528e320c2812a6"), ("292448b59574e7126a954dd27a7be0c4abd8cdcba35510ec25b7819d9fad7f2e", "038a57caf69bf725444273e27127bb9ab085cf9d5a4dd4c73f8141b3ec3b21db", "10a9264f2395aff3d45fe808c1adc77e700574c37b66eccf125e9e5901dffb7e", "2865992353b8517747069675572bfc66a906a572c28f5818a3f009d066017ce4"), ("201ca5d9d966db5421b7199638254db36d69d730d528a903fe4b6dda3995855a", "2457b959b804fb3a27707c7a1f670f7704e995b8c0949cbf5773050c98b23083", "1a9dd6aee81318076d4d020a571b6cc665dc79a2f0739052e05215b1b8085b43", "12cd0234c76e8cd5f3328e4c964784b028de10005de7b1772f24d4819dfb1875"), ("1ee16cbb403b88e59ae678c0ba64c887bb4bea729e3ca432c04141f2fed6f1ab", "0ffcf223f4378ab6167bc57ebf87411feb457ecc22a2a9102a06ffb040da3e10", "0ad502a8081dfaef7ab1c99b7566a8350b8c734bc5036a6a0534831b2a5a3ee1", "0c145d6ba4286f62bfa29b3d04a5412db7d05baf598f127b6c87054094f11b89"), ("2d6d6e2737652345b9aa78583fa9f7e585ba77d078ba41a0076975ed846689f0", "14d4f184aa54ccabd7dbe018e9039c0dd475cece13d7b12cfb9fbcf642e538cd", "0b1df4088bbc9bc4829133b0511a27aed9a155f35682c1b55e5e6eedb0a9029b", "26d479d0e10c7493452852ced5873c09c205a2bbaa6655f5a3e0027c2d5a8399"), ("04781a348c5a0422748447970fc0208b16b97628001a92ae33ad4da580443bc2", "2ba544f98ddada90ef241201a74c581e1d409eb632cb7f3aaf5c673d2b9a5bf8", "0f5fd4aabf252612b72fe5ef07595847974dd47f87443d9dd22a940a361c0930", "2af272056b3e81fd49577e5c2c2988e5b7ab6dd850ab7837e08c156a2f5c73d2"), ("0887f3f4c5c681de5b605b99e7785038f4b9652c9e4039ff92fe80975ac3a36c", "090096f4c2dd1fcabbd483f3a49fe043f4dd68c896028c75b23c8afaa2f20f40", "2c3b3dba2faddd82647c80610caa71acc47c82dbc7713c294e1454416af47985", "29a7ac13d480f558483164fcc8b5a2c730fbb692093d72a88bcb2a1e016a17fe"), ("1669afc180366dca0a64da44d1bee4ab8f78a67513417eacfdc236680525ef39", "0d5ce1799a7eec4a57f2f05853dc8e5b9e0379794d8c29e8a0cb075802badbc7", "03743edd2a66e1dbadae8c8db571e60ad0a38abab7c79bced6ed9a97c8e02e24", "136d95c9b1b3db37a06b8c34ee2247cb2a117718b43b7ab2cce4e78512a6d66b"), ("08318bd63c7081e96a2f9d323256dd9b2e69d73bfac146c08d32cbc91b15033e", "1255a6e3731b3585200615735036e45434d0aaaacf39de1d7973c2a2d5d8c0bf", "119aa0779aafdf5e76cc0885721f3436172d867e5be406642c981283264fa980", "2127def82b56273ea1c9b7b9cd43da329767db13109c008afbc55ad65718e39b"), ("297ed59b67a0b8df411b96a91c49d446bd17746238eacb276a0fc87fe29e8b0b", "28f180f672cb09595450134569a84fd6b3fe6baa69f8b5addfcd2f550d7ccfc7", "036e9a1d689e479fe35d1a919fc67d224f9bef6d117ed22c267d2ea2a844b0de", "0821e5c164c38b83f31f3bb1cd405928b02d596b4b41e35b1b0006bcaba5d858"), ("131c989d7c040712fc604065f48d7721156f3af7c54b459b7fb17e3d5023a888", "19e392d5ed51e7dd592ab95ed7736726e349daf14e1a201cabab0e9b0abce1de", "1f8f4214972d08f60ec41ef8f03de9c83b05f72b60fcdf86dcc9a64589c5b6b7", "1bcbe4da1c27d31a1220a154cb6876391f953bf82acbc05b0677fcd505df7d65"), ("0ab1f3f38558fa978305344a7cee02a1396fe8c9538521f09fe1cc7bd2284f73", "1f2f10a81c64caeb9fb51c1fe3214afc896ab59fa6120644b694e801b245e574", "12372b657dd451864b81be1d9e99c56a3cd94a455d1c5b6f9e0c3a27c6c63a13", "080c1467c0bbd324ca89a0f55460f9d8aca3f05df954424fa0e5761c5c912595"), ("19db7fec741cd270480a3fc061b36f49ac9e7abf7b57f6f5ee6ad076a21d03e4", "000c9d5459ca3c70f68e3d8c680e4d813f889125144dcf3b59ae22b1d7cb95b2", "1a01e43ed08037e0d5f78eb459c089c56002b40ebde248477253e36fc2b97f90", "05ad3dabe4b3fa4ed5bf3737977a86b4f8a8649c314e375c8987f9f4080cb3d3"), ("011deecb04bfeeaa924c0c2866325ae9013c3d5a2abc14b348425d86c4db5a86", "29ae29351cdef70b036ac430b80da9783b10f67cbfbbd9956e97d9a83d28e6c9", "05f9e97e83be3c84c5aa0b62d1c7bf688eac9f458019b9334811c07197150eb7", "1a4f211bbaf47a45a78b569fe9ac2179a40e562932cfe1f81e12a0c5c134273c"), ("20a1fe13ada6b791ca31e08fb5597012a75937e37cac812abc97b726f544c9c5", "03635e241c1c6a580164a41c838b295c2fb041d29857a1a96f84baac0d0ece65", "2d6b400eeca43de9794af80c49252bf5ae9e363811b1fda6a00d9bcc5a79890b", "135a776d2c899ffc8aba2651966ee6da11a2f79b09bbbabf61d0639707312563"), ("0e0552245e53e48499f582502a1d46ba8e61544c92c13c47eaa3f2236cfede53", "002f46f5ea06bac01b8f04a91677f3ddd75b895e79b17beaca1ca00bb7584bd7", "24d53c877bc868436ac072266c7463652f9f1ec41ebf7966f291b8b83f19d9e1", "0ccde3a45e4ac49deae4c0a57225667ef33ec73c509461f6bae0234df47c592a"), ("15b1ddc3cc449c46aac456067a8660d10dd2a8b4d1cebb912e4c708eb964a57c", "3053829bb443427ec7a31cb827d1e14f74403b5a747c7166ed1e8ccaccd92893", "1009912b2466f8072262fa239c63af9f8bfd37221862908707845c4f3d20c35d", "0ff8ba6686ea9b70d9c8205b933c532e14d1ffcb83db1331101a6e7b92d989f4"), ("30473f0d93ff31c5aefe7521539edc43d7959abb048ad0ac35a24c03683aaffd", "1fb7ad832d04c0ba88b9c98431a410e269572598546d92680e2b7c5a9aa0a02b", "10aebb4ed7c6e5038a5f0eba4548efc35b3ce03055c66ef227b12cce4d471c78", "0c136c8a8a5067e538bba8b1e3cf8e4f3eb5daac8d14b200b2d883dbced55d3c"), ("06b36a62d04a15fcc63edb7e2652017a1a3e411a0b45eba406608cf6f1fdc935", "2b07a9d63cc12ede7e5da6def59190b10482dc6f5b1c4a8ed17524273157e889", "0f7f626775ad26b17c5c89341d7bb942cfdbf47caecfb98bcf535c9375d6474d", "23b328437e14bac66951a5af571d9711a29660c6845470473a0dc5292f0d24a3"), ("2102a0ab745b63a790c7a7c56dc2e99d5fe7ac5fe9e7460a978c6d8c0b7ff2a3", "20283bbf2a7136ce52a2717f426e5551c8c888fee19bff9c92d9e4d3d683a4ab", "0c0b0a3d345b5dc4b82265ab5f9b9960a66e8fcc17be2b6dc697b5fc43ecefd1", "0ee965bd5748b83620e93f3b30c7f43e30accf95a92b649cb801acf7bb8bb7f1"), ("0f693e2ed65c619140f6bf030854e670e8d85aa6f5c95e26e7c5238c7b2c2cd5", "043330ba8bee593dd7b17dd4dc2a8245c9f01f85b2ae51685e581c727d71ec64", "1ff7d951cf7a19a7d987ae182975719ca2e5101e2f278e9e94c1d21068fba34d", "14bb8829e7004815bc86dc9ff636ac7e9e527f601620c897c7f75c20e1c584f4"), ("19601f1177ccaf801965d76c979d2f27bbc72f0a28245ec95bde3fee0af30ce5", "0948e29114139f0bb50b7d8e4dfae925ac9e573fbc1c992ecdff258cd22936e1", "0c714a8e023a5e6c81aef7b4ed71b37996caf9d08c8bd16be76200124c85605b", "0dce09e1bccc34c421fabb4bc2aca5e27ff3edc3b12e83b40048e3a0be707622"), ("0d59743b93594e877d44fa195834ffc5de67e368158ba4c4c8d5ccf75d0fdef6", "0acf7850b5ebaab5bafa23e9462c173706d1836cfe04e9c93c9ecd9977ba9203", "0a77fc159a2589e3649b0f42bf2673b76539ca8f868597116a16029bc7487549", "1191a69db6b6c7a915554df733932425908ae85859b7cd5a25f5aab9c15f4b5b"), ("1dd0b0278bb97c555cca342d31393dc3a46beaa56beb6a868cef87852ffc99f9", "276fc2a5b2371c19fb984b2a8a5ff710a9d44aa3563a458f82261541c16a50ff", "2bc97a46af0f6cb425d2d12639241a349b9f24dc5687eb32741dbbbd18ef1b84", "0e450aa00333b0ae00e259e5664d93d4aa2d2d7ae1359ff8d008bc33383b604f"), ("10635c7be12973fe8ab25bc10d523d7647e24c5718fe844c5327185be30f6969", "1c15746282c01adc95d90eed56c89babf940dcd91008a8b16129cfaa0cf33b4c", "00e3ba2b088aa3e8187eb70d26d1feaeb1c41e6d1e5fa8a4ef76552d8c4ba47c", "24b4149ec18510cdb9d7fa4d6eaf931d25288226d1bd47b7459d3a93e0b3788c"), ("23c21341ac199388a551e41d67d0fb21fed91be45901b055e14fe16b981c4275", "158740233932f861164f4789202ff44f8f0b12f63dc1e77edc40575e2f7e492d", "0d341ff1300ab269b2accf2140e26ef53e9eb38ce02a4a266a4cc96607627608", "08016c4021bf26c520581d0ea15e8e8de5a6fddbb14230adae6bafc0b57bf65d"), ("01d483a6c3a00cfa860406975532a68420e9494e8b9acaefe6f0a6a9f3a5abad", "1b1ae9e04af8774a3aa380291e7cdaad8a14228f9bd1352f2aa80d2a4eea6678", "247cb6b6766ed60a701f7ae5753b5796107e665bbd42f1aea3bf21431ec382a7", "18850b3833f78829f59e71a966870dbf0d895e3388add94304ccac5244edd1fa"), ("26332822f53c39ccbcc1df85b88b9586b1739225e4de94388c12a4b5784c16e1", "00d4820562cde75313f305bca313d1649327fd3a0b3a85b7ed6ca0d5ad92212c", "0f5af9064d405d305a637ccf7414c20e2eea0da495704916aa19f4e270a931c6", "299d72cdb5ed28baf2eeae7b241d96d9619b439dda874a3b796e328f1863e98f"), ("1a8cc8bf52d202399690e6518829b617c86ccf305f91dab3504ba687d50d80df", "19bc09611ff3c78914672cf5aef0f5ac57b1fc7c612ce5edaf13349832d70ea8", "1636cda683c0c29538e097783cdf94b0f42e9948f9d9f7e5dfb4fd159e5af704", "0e6efe9126b498d18c75ce17c34e540f1a4f6a541cbc109673f43db1ab5ef49e"), ("1bf0592ad3208cc740f8d00028a9b1e274e5e69427c1a93836db7986e122a42b", "00ff4f6cfbe138b7a3ffb7121fdb7594b04333ff66b3bf044464921234479396", "0d0fbfd016f655622e08a349f586310c475e42b0185b09c68c7991110712957d", "156e4592086640c28e588b74951d35dca14e5889065f4472ea6bd76fbc251014"), ("100c10d844aebe3a6e76473d0b49f9b67680cebd9899fbb127b255fe5278fb62", "2a779638d7fff5baaf19be47181f0e396c0d662a3ab66a2ed896ab6291760a3d", "0fefdd51d2c421b2130e732e626e9babe0b76e10359eb885e17cd191ec474dec", "11bb4826ede19d27b47533921c00abd524f8e0f5818108c7d8d2be44292be05b"), ("1793952f02d3f297a095aec62cab363291395374845cc72143aee5a04c5847a4", "13dcf71544f315928e0a325e2a0b6239663c82c6b8ff67e4ceea7a656a5696f6", "08932bf26bd784baa5302348f5ec83e917c4f8f5ec486eae9ca47493d4099f96", "28629b739be079a9a0706299dfd01b97de7f3e813a4264c2d3ed4a1fbd7ebbfc"), ("0abed62549c6fd2f01bb092255f1861300b7ae54ae538f9d35a76971110a8f1a", "2b38fbf93eb7a30b506f70cc3e0af6dfedf547bfc31603f5cd9300974be2c3b2", "28739a6c783091043333297ecdab7d4e2df9417477a856aa18c56eeb19f6fbb7", "3009401748f0f2bb76299d522c3a037ccbdbe8d84d4aac7ae937b70fd611ce1f"), ("0abe279e45126cb861d07f48169875316c007058b12ce36557fd9440e1ab7e50", "17c98e5bc4b161c77bdd23ac668e337a1105a5e2a6848b32e99cc153020d3578", "16289c17cd21a5f82587d4603bc019271d18860cac51653403e3e3af9766cfe6", "10b963633fd20f757586ab906d55f48ba6a4a49de49e0709767002a560ce173e"), ("2c5f13aff43ed1b98199e2e7ffa9b72ec5caffef78a4976e4d53a1b6b6428b1c", "05877fce5c7c851916d2890b987b325b6141cf7802f3bc3ebfea08895c82a84d", "1e8d3631107f228cdc173912e8977f885a04418ecce14d93f91f7d814cb1cc71", "1e5c6af60437c9bb77a3394b8f1eb292931d9a6cc6435d4b495259d16fa8cc23"), ("1268fda0ad63481c0e7c9726894e5d9a6475090ccff9c750becae1ff80c7630c", "2c13db90a41a5ca3b819aff7190b4ffc8fb8cec1d3ada56109fcf37f369a2720", "1e84691c65fbc7ef893ebbfe02ce21d018ebf06212f1931575f7343a0c662085", "1f5781a3c5abedffba658fd941f5fe2d609cf010b85d611d58aff7f18f987e62"), ("2635fdb23bb74d4881a52b8f49ab6c3abb06d2e408e53936aa400781ba35e29c", "2ab97f4ab5b7ed612c29ada46d4cffd8fe8a1aa478e384409febe8ea643c17ad", "18459960cab99083472c0262649b9399d40651fe9d785e93c61cad586d8d17bd", "11255fe1a996d9d9a85b0f3bfe28903215e124dfa3014f0bb9c1d13f26c28dd4"), ("1bc3401f82b2f69f0b54f9faadcb7c4aae50e36940d2f12065fbe9f4b5fc5bca", "25bdd4074cfd0b38078a6c1956aa5c534353972dc250db6b10a0b127841b6811", "160a59cfdf51795f814d655957805adaf1958ab5de13d14772db221db430c0ac", "300971a9493332634951983a7eebc29b02a1d8cbace32572c347465a2f855f60"), ("0f7d0a264239069bd9ecde4fc3c3961f918193477ecf8c7d541ff67477852898", "0d283df851b4421458659740246b17961331bca85d8303159c9bebf3bab79491", "03dad8ff77f055f0a4b37cf3a9289e996f2c48673b03cdd7400a3f4a9b865355", "28806289662fa5c77d112b1224bcd25cf8140061526e00851593771170b3273c"), ("2dfe5e3b91f614add0d692c3b3426c2f66644730250e734ed884c6532ecfd791", "27c92bec89a1868d149dd43cb31444bcbae04e34bcede35a466b29968b5a9a9f", "17c78538c70bfd19201696b247f8a43ed6cc4779dd790c9df1ffca234b03e3ef", "2bf8ccab2c7710d175eaeb810e9a029cb7542ff29cd5c9296b93d3368810fc9c"), ("1259e084ab69936abeb5c9869444dc4e2fdfcdd999144448dba670ba7c664d13", "020a1b04b1ce5a37c29553ea16fc678cf742ef88a46336e3a083d99d572922b5", "1bb8b79b6973b87826733121c0136929ae64fd34c5c218fa6625b6cf8f961a58", "1fa46b1d53a634bcd95448843de37558ca870b3a3258e0834b5030f8cfcddd8c"), ("0bcaf4bf86a996acb276972c855fd3c0ca493fe6bade53b77da7248e58022d9b", "20c7b7668a3d5e2fb3d31a4dda9e8ae132ed2cd5db0202889721484c39e77c38", "19dbd5f530cc976d8f3fd8e604586a416c6ce04d898cbe7fa63c49add09a5d1b", "197e08bb18ff10cf708b1987cd7d5992f794e81356520540be56b205f6e6530d"), ("0eb92804e426d4cff52c3530aa64275c6e5bb652774996d4dd99e6b73e4a8346", "24f6c88b2caabdabc641edfaa6d1fe0d486f0fac8123cd54eaf96799a7fddf1a", "097d90e6b54c8995914c0626f94d6aff200388f274975d855613627a9fbb0a70", "263ab90c5770b7045c6740b87e2f981a5230af7203ee26c10975885261f56684"), ("2e7ebec05e3f408deabdfa1bf75dabb87c568bfc496f5956cef60741a49a42ba", "1f32d386e52d4bf08538a327f9e2b569ae5dc51405d007aa52e20bf26e98809e", "105c0817c2743dd74d6e00f07953dd690afa0ee695564939aff30e81979efc1c", "2b66878b21d638edb3581eb72de93653ec124a1f74958745bf5f4db02308d542"), ("257c8bfd47cbe607091de53ca600860bc86859f69c34601d9a1893b8066e1b21", "15dfc935b44c75f7bad55fe3f1878a4f7a78dcc7c9db42bfeed92e3999309114", "1959ef4625e943b7c8c1a2aebd7c89ee776c3f0e846ecfaf8f707fdf6e5e8d80", "2f445f18741b8b38c651841e2bb505675e84e1d5d0862b09e8b25ca565c2b4da"), ("191d22e4e9d3954005f66db2012ef2cd9a91bed12055e52f60e58ef955f1b3b9", "0f9d768c541e481a2a9ec629d0063520e9be796abd51a6e90a0e09f8cd604a16", "2428722c483ff3ec89063dedfff1a1a66f256d739baf14c900e22ecf92d68dc1", "0444e9f06185fadc02ec4d60edb6cd293ca39be512fdf22b7c7808a3ca7fb7ce"), ("1bba98ca093e60fd4a7feab6587098f96d65fdd23049660fdc8487534211764b", "0713a212db036bb560321566301d49cf07ee40224bebb3dbca301e3322c5d507", "21a683d96cf125cee245fe7c124b00515ace4bd4d342a136c7a2e3b4f03b8e0f", "2769e37896219f98cdf2d88e68a4b5b1b103c1be8d4da304baf3e45a1d2e0427"), ("057b0b6937cc33ac3688fa5f885ef03b4b2a98fd2f49ec97781ae172c9444f3b", "08289ccdb8b913b271ae7f3273e9417ae2afa9a939c1747836dcbbaa0e22fdde", "28730da6cadfb42fb71563678cb98fd8c214b204ae21d562d3ff04188e382528", "2f3261dfa5f2f0c8da5a8815b083b7c925a90b9cb407bc0fd111927b1351fd80"), ("1ca7815b20ebc1c8611962cd8e03d9dc2ad8f6b63f4acb2ba1fb35ea3057d76f", "1eb9be8001b50ed499fcfa5185ff242d660b60d62a31333c30cf3d6a4401f490", "065464deb21315b77ee4748a33cbd06319f6ef641ae179b38771756d1b49fac6", "0f1c79ef58531a0c8fe99df0febe480ee91e606534aa766de8f0988a6f861b2d"), ("208d12bf4999e1278830a0c37dc7edeed3af07b11baf90c0e00582879707b984", "099a34ca0cbcfda9c9be616bfb18142abc2c6149c3d8c58bff0369a055dc4721", "09a287a11e27aa4e3242924e440e7646cb4f0f07fe2ae82a1fd38f6ec85662ec", "1c6f1e2dd545f47cbd1fedecbd852d1696df6f98dc0ec810151dd96d793e4265"), ("1b7cac2d88fbbca10ce630106a3508e7ac80daf76053e98b0beec6e68f835a65", "14c158dea76f9896b2848f034bd9dcfafb400af83b5901a5ca0f212102da583a", "12b9a885cd7a58b7d24e0eabe695e1339c40dd400bf2e2238b3fb054fc9fe39a", "1895a787e30f809c70425516e98dca1ba2832d51a4d48fb9f84afb43142bc0cd"), ("168a60ecfa6875d5469befbfc7488ca0b8201be3bc327894692f666eb07479fe", "01f366102cd535f7df1f470ddfbfaddf62d4b5ca9b1622a84f8f60d77391986e", "1640c0107a9323871247bc31a15840be60823a3c62d936e24e92ab806d53e45c", "26ff3bddd5ac6b8a9532efc05207a3b2b16e15decc71bd8ac78e61703aff5e90"), ("2b698add6006e414aac0a47e61ce95314122662b37477940ea7aaf8a15ff920f", "143937eb326b0da2a245c750486fbb75fc7792c07fabef4320f0c2889355ac0c", "0029346177623c52928be2fe8d052f4279692bd489a3259f3a3fb3adbc0149ae", "12e6c5e6028d99c6e287c15061cce9f9ba7d02df9030feeef3979fb5945cadb0"), ("104da034bff668db1e179722f8e84514eb5044f1125aa65ce09e3d9e75ec3a4d", "20b46aec8eb88a769ce2ca29a2ad6f5624a9ea4c49c601dd9b1c7e98d15ae340", "18b389337a657b8dac858afde01290e702c69952d542c7bcfe33caaca2b342cc", "1468d2bfa2d128facdc7e1ad8b48db8d5c2432e0b12ddd150a7c17f6f65872fb"), ("278447a5534d236d13de4d50b40ed2462417ab5f7a315c0659d7e63702c148cc", "2b4147b4e807a8f083ee0d451b1fc4ef2db39e7a5315374d23adbb1c58f7a403", "24896c30dbaf3f1ded193aa0e27bc9162a28a7721db7c7b26e659b79a4ec37a7", "27d8fa05d39cf72679ee9b418990112ad506060ba9a37322e080e4b97254a917"), ("2d4145527edbd322fddd770ebfedd9d3271116ec4f8e034e8d76f4d94851f732", "14a0d447db17b3c595c23a791e4a510381c380eae869b9be92b71840d09a1053", "131e326e25f9fe36490d7eef970ad8169b0d7392ae3980f7d4708bc0b5e138fa", "24ca90907fbcbd09692450aac283e2d8e8719414806dc8188357f8a820760d37"), ("2a5c440af6c5296ec66dab51319f2fd54cae7e3945393a87d963a3b7ce6e0986", "0709e1a01f69fcbd5b99b3394d0df90cf704e951122514957774692dd52ae2be", "0ad8f650b00d1307817fa7b0eb2dfe066b44e34bf1b0cd36b382a4e7d26fc99c", "02ef2e1a9042c3f0ce2730ebb54fadda395f21315173f59d096ffb6ec8fdcfcd"), ("0bd08e53af9a589ff9ea5bc5ef1915625779bb87a8c6cce3f1492cd60273fd06", "1b22fa5bdda6ba1297442ee36d8215e53a7c6d31b84c2bea7574be091e7576f3", "2e1af32b72a2e28a3c8abdf9cba78ca1858ac4fc2153c72452a2acc1960ad73c", "1a92ae3c6568145c19359e5fd1d478fe4cbab05a9eb376575c503546b198c6da"), ("2cfc436da217bbbf71620ff4509e20eea6c7e18e4d636dd01a4615ce5e8befe8", "023885be13ba968f4c64541842dfafca1dac3df18cca48a4271049ab797f062d", "03a346ff303961aed7d70e9c68ff88152f369b8a7332ed493e2c83fd40f819ca", "1ed62cd7d5f7c791bef82e823d8895a367db225147eac94fb7cefce368841ebe"), ("2792532a1cd4e77daedbdb51759cd81f55bdd11f2363e1f80f877c685d167991", "090ffa8030aecca874fbea756b90f0d4fe7413b5cad621fdcb8d67244825f806", "20cd336df628be88d34859ec9d47cd4c07bb6c733eb6e0b4a69567e28b8676f8", "1e97f03fdad6b9dcd021c8bd17d55667f23e348c23404e5f0058449507cf785e"), ("046f0604af4bfc15b63ae12f8a60c632fb3e4b076dbf29a5b7c5ac0ec909585b", "06d92297cbfd59ed2c8f18710556d61d87f24de461f1c9258499cad5e83e4bd8", "2b708310e11e3005e935b8500d6b192db37c59693bf6fbbe454d9066d56bc099", "2d343e61ca91ce9f74cf8ce44117bd7b116b669479711f51a5729745a3b69359"), ("261a28fc7aa8cbc9eada9a31931f9fec7f290fcbd3859ca0cc9621426acc3e9c", "1a729b79a20f6bd2700ffe1789f0e7ae144dff2aa14aad862f95a33461a6b405", "10182ebc4de648ff70dc9783a97bef64affa649d899327468332e449afab163d", "1f500f38f9ef7cecc4fea9c4b4c276beb067d74272720daef1fa343c6c9950e2"), ("02dda3cb702ffb04e04109ea6534b79a7b68bd12f9298e2b1983ad6098295c82", "1c2680fef143678903b56cd21b89d5ae7abfa6bbd977bec2044dbbc8d0dd89f1", "2fcc351c90ed4da704cc4bb74c38147ae56b93636cdcba68fd9e1c6b0a869522", "1780ccdd786cef37536040c9ee7c75c35fcc4c534a1b49ad58c6fbbd4e5d1f48"), ("0ea9181e79c25549740aa06f633e9fb82383d2127944e4dce4bc8771f98676e8", "19ac6ea9393254aa00e6723cc6899515a5829074513d461b7d43a0b67b28284b", "284da35c491cf73fbb3eb77328baa46117734264e4f1728068cdfb71190a20c2", "167d0a04c35f54e06f2de538e5b7c193087a50295d3236f063d0c3bf67370849"), ("1159459271c6b180f116462dc7577bb6d88316a3af77a1319b93ce01b2957ca8", "17f1f785adfa42524e9f99b83da8f648247b848bc282891f5efde3857d41e2c5", "0539291d044765bc6c7d1b0a93fd43a67333fc6a1ddb7091c5fd29350f2c0b13", "24802ce87be6f9136800de14b77b5015d2919bde46cdd23b0a4b7105ced76278"), ("1313a0f61c9189b95794829795cd7037959641422d8c13f3462e30c73f030540", "1960347a8fca006d325bacb21b0e8692deebd555c6cc47e8da9292be64ac28b3", "062377bf42b686b8c5fe67bca8c96645edaa725511b7c4ddd7cb0b479a974fb4", "15b8b58351075acd0bc878fc3cd2999e16b480e04421662c47c121ac3a59d4dc"), ("2dad2ff72f72322d11cb5822c6c30347cef9b66e2f1f35f333252acc62559a3e", "0ad2b33c90f7091544b449075965029f9b0bf16255f1ebdd7c8c6590d7c10df6", "0851de215ef6c778aefa60357c5bbc3d81ed9a8780f9827189acf2ee4c67d2b8", "02a1490bcd112f4640c9909e61e7a7a13c2bd476f94a15a23eca1be2ba85a4b2"), ("2630961c94a181747f4c127693e78c37e666b80f0347f02c516058865e6f96b3", "2b527c11acb46230233d7ec7e7e109c60928c39b499e5c9c12b8cd3467123bb5", "13567e7fe925ecdf783b1509932f57f04e62d23ef284888d500b60074783a8aa", "0c0beb8e4695fdb428c303cd9a77d475ca310acb861a7de48fea45d727c80d05"), ("133e0094b28d9fbb2185a32685385a6b1b6005616917c785cf2ecd08de933a1b", "12fd34510481485a038f2d5fcb50885ebd4c3da55901413c88684bbb053c49a8", "2c76f1fe6ce18d6b86839764dad3d66742f5083e05ef6e7aaf64866c68bad728", "156fbce3c3a11f4e706a5ccc764f567deae718bc67b90020f22d57108364bb1a"), ("068e9ff0c5b5a7f5b37d20789a392090e3dce60294253268178a10129303dbf9", "1c8b9b7013a1342cbda6ede5033eb426906ba32f2923db97ae57c3505315c4f0", "1d25cc96fed3e6dcab52ba237493200c5830991191cd6b6122cea32aac7fe975", "197f530f0fad822f67134b90bfa68f92e8cec31af31d1f46909df8a87c6606ba"), ("0b9ec16622c778d6c5e704677919427c12e49cc5e0fd46ee54b38d0e336fecec", "305fb8b177a858f15d0ecf8f4287e8550131f93d3b22170f916890f4aef44552", "2239c3e50a91f3ed955f72061d23253e086adc0cc8994273ec5afa1492d1c46a", "06bc96057c25448898e10c3aaa73052b65384fc38e1348352f0fb20a64107129"), ("1dfa3a4a3ddb1ae6a935f3a81083a541a7632569f29c1913e1c197b73f6cc4f9", "029ae3dae1350bd72de82191db50805689f16e0f1394b20c60f1915069decca2", "147ff5af6f10807a89e82bdce6897de7ad9e6a06de68bc69a6831e622065a002", "2863ec6c97fb1b705e5462bc6c08d4e8ff003e95808c1c4718f2e6beee8fe68a"), ("16be928bf5f58d7e61036a2139102792d92d247389925f4e54aaad74d2ec364d", "223b8536cc552598d13512c70ef8b4eecc2e7bca0389403dc431f2e647b8ced4", "1cb924f5c72da8ee24c7b2129fdc1cc4fa10692a9ec4039750f4ce1d56482519", "0d1a17d1cd820e051258bfe3f2524ce9513b5e7aad7946d352e104a7a144afff"), ("0eb4f1cf3a15b24dc18687b7a2cc90e948175b12c0a4722bc1e86e54fe960e1a", "1a05c99f74a61005c9544a22cbf614f9e34b551d7389c7696d60290034af5274", "13ab5030f785fe61ac35ba1ac555da8d10cad8b5138a145ac3e4a8ec06f5fe9a", "256e6327d5517607bdbdd542e8bb0f48e3973aac348386ee2784e832bc9092b0"), ("22fef48476167aae6c661db92c19db220c0be9b881077bd7d83975d244b4d74b", "1bff11ce0d95d49d8fa2f466373c620ae238afae8d5a2a3700fafc85b3abaaf9", "0e66ce5a4364b8a6ab13ad4ace7bde20beb90659853e5fe9dc6f1431a9c31507", "002cf7ce75e90b887378a7a732c6b574cc1bf14bcfdad58e2734e831e3557125"), ("218b3869649b4aa00a2714faa94f533b630a638c00e1f4a739166bf25fc45648", "2420cf83ca459c04899dbc58fedf690b4ddb0155c40186c10b498c5f25950a29", "1986a42dfa159e607bed4abef6a95aff8a868cd72d6e7cd5fabe833c3c032dac", "0e8cc32f3537c7c2ecbb7f1dbe284bc8266ec37d17e4f73c909a0b5bd6713562"), ("2b6988d8ef20fde98f5f8091438e920fd22622407d8f9dd1ac3c93112ae7f4d1", "0fe526ad68843bf3fc0b46bec66015e15d081d2536c21c72d874b06dd828e8bb", "1ac49caea4a56eb077aa85f5a16bea88de7b8f528c7b2bfd6df4666149687f09", "04c75109748281eeb445e718f9949683f9076a90ac2ca03e5d9dda8c4b952ccb"), ("2815b93d55f0beb4cdffe5b568cdf595aeaf45826948a9b979fecf0ac2a53d82", "076cdba24951657853217a2efa40600596d6057baf0abf065d50760c6ffe41fe", "2fa4f2bdf2d9c9d929eb79c9a0e05568e9e44ecdd71dd78cc9e4e922776e763e", "135e6ad1839462e5cd46bcb304f1a95ce0613a2e589e3d8e0ce111859cca13d4"), ("29df49df8c07f03fafc62f9157874c79daa2c40899b2212eacb0fce9e49be4ad", "05ff69173de21b0d93346355130d38c24e8f238ab24f7d002c5ee32670e4a90a", "0d82046f31f1981ae903199e9bfdb9159cee5611a0b96957282b12d33bdb7913", "2feee71a4e88b22d037c7a389d0cde5135a04aa8a7e4927f0136ae16cfd187b7"), ("0d08352df84d75c216bee24fadb0e1e02c8877d1b4439a43926b3c3c32ca351a", "21635c15b708b463fafff02522f965bc88d85baf3a82c7242101a9a33c058d63", "17a91ffc45a18d2d516b75f739e6eea57f2546470002fac274d2e963ab1ea323", "2517d41ac007ff98e8d72db2b3830596c3e4cdab578489e4bf3b160f793cc73b"), ("127ace68ce841d77b5d68eadaa3886798a757e65612bf220346df66fbf632b3b", "0ca810238867f99b1a3a594184a3a30f76733ec0196c4a899f5786c74536b95f", "02e9b6ae74dce4d069ae4e47c14e832242940a830ecf94a6f2d26c1108bbeb4b", "05166f8863a3beae166c257fd628a275fe22c5cc130c53a97a751011d31ba950"), ("252260b4c6a7bfcc04d149a10249f6f3ffeaea853a6d7cb5bc26a031059a4784", "183b6af9197b67277f08f9479bd1914c6c26f61a0a7b769fbae0f35050c87d6f", "238e0a7882f1e68601a56473075183852c97002c112fc63cd4a42b2b16d3c766", "08130fa29827baf41109ca29a459e5c724f5c5cb2be97a6581e101198de28ce1"), ("2c1dbd9951d9c72696c0ec9da7e9910f7618804a41a394fb07fe04302e7f1102", "2bacb497922fb274ea4d06eae4814a2e2153c002a25803cabb8639639e4136b7", "17f98bf715ade1f144a5be2312c42755a2ac4394adf431a9ff9b8a9138618614", "1bf75782e37f62e4f41ac6d0f65bd5360a21f527ab3a800d85eacfc40b3f0c3e"), ("0c086ccc8c29aa75dbb4b8a48365df6be0bfe11dc873acf924a4d21141a9b067", "0ef42e7e27c63ef3faa39c040dc58c5707e9345a4ce1f3b6301ded40cbe509d0", "05ad6868ee6e9525e5539e49c8f26d2635ec1385394b807a205bfb8eb82cfdb6", "2e34872333856de01dccd59cc97b9562a24c0ce7873d37c14018c8c4dfbe155f"), ("1258371bd330131314e58faf79caeb4ce004d3d5d7a8d73d2e54bb7eb0e6e4ed", "0af105deaa583504b87e386dfdac3aace0791be89b3ec45dc4b786debddb8df9", "1fc5574eefaee4cbb2495af3763b04f7746faeefd50ddb6f76848cec35fe3a0b", "0e8ebf9fb8f049c13274999800c4ff3c621d0718b8d3044062538834fb294ae8"), ("0e51724afbfa6f1252f3f607539bd8026a36070683f6b4f25e954892ebefebe5", "1076e139b49ceba3ad8ce6f9450ed064582b508c647aef950709f4c503eb9eff", "2a36742f2ecfa4b0432d5bf4e6ecdf7d084748655e656e8b4acb13f689ed51b9", "1d799319906acd746d94157cf55068fb70c0f3894599ec36de638d776c58e31e"), ("0b699197f20ca21657ade5416eef868d983211e2047e2aabe984cced1a780ca5", "2a37c6e6f25f766cc1e2b4ed436abe86ca75e764f25f80cc7782cb454dae8268", "1da7fc59981d3cf6091eb3d2c4cf926c080d2e94f01527b4ddb96eb19be872d1", "220e0d2e91617aacc7fee0454c1a1361aac89d56b24f20dd01afa471d22ded3f"), ("08f55cd7e79fb7caf70166f0688a3c8732c0efdeaaff9b4c29b77a4cf7595c1b", "2a7603565d877f0e5452bc3e9224b95177a798408fdd160eea909116c285f27e", "0d118b87b860d149fb345fc355e3a2a1ae664f85caf78ec4209d22c86440bca8", "17744b90f387a2653740dd0d012cf257ca985d4125f4464ce24f0c8e103521e7"), ("0c44e64658d82b9c40ed8b01d683c356318f7db1f6bd9c87fb8c521cd2aa0dd3", "08e95422f3ebafe1467c1ef8e5c9ea8b684f47d989f7d12cec5de5b336462e5d", "1f8053536d8cf1378dc0a6b02497a8b4cdc5137db70a36d68260bec9ad14ee52", "2b7cede0bd8ee14df19bc6f730d42c7092f9e6175487de711a2b3255a9dc2e71"), ("28e7206b9e0dd2f40bcdce5e44cf0316ae120868c0ab3b10c4249d9671acf614", "022854ba41e98e8b1dbf593ca04ccafa50fd6e5765e1f2fc65444ff06760e409", "152cec8d64f2e7120a77d8a2cf565f92e5975623647c7e148180062b61e9e84f", "2ae2791b639e81ce59618549410180947d4c40cdbd693a1e8a17a6760fd477b3"), ("2ef23646b0443720d8c8bb9f78c66177f71542b566168dea13df2ad9f660dc2a", "27d77e5918bddb8b69ed8aac0fae8df9af58ed3376e13b5e4e1fdee3b662db39", "201b9dd343711af203757bc8c45350cbffb2b3940aa9fe0c0c1baa1043013906", "11a5d73abd7e17bb4aed037367eaadf601ccf6f8ad6f725ceae73e7bfc881abf"), ("0737379e94ff3f753e8246de8c67a53ea493ee361fd54f5ea86fdd3069f9c3fa", "115bd7eb2dc948cc04e43040be601f91eb55b29572640ad577e5de90b070fedd", "1632e571a33716cc3c6de97043404073eee9f6dee6c9f2067f015d2751ed652f", "09cc471cbafe13b56d9cb2fb41d2185e4eaabdc012da127b7b43941405b413f1"), ("20e1bbbc6cf20e96af832d0e975def4628d2c3ad2903cef0991675a8d63744ce", "1d93061b42982aa5c443f21ed794cd02b079887d9e368142e4cd0c326a92d513", "2365d79351f938f707a14e21f2d00d6dc14be6e34157b3acfd74b39f7513c003", "267eba5ce7a59c318545298db48313672591e306ce1dc70a8479b177ebf5bc27"), ("19ba7548edfe15303725f521d7efef8df2bc96310205b0bfa0523961db89eba0", "2edcd25404df2030a85bbc0b2bd098a58f9ecc645c8a108a189cbceca1dd7c41", "26bfc84f22929320cc9c7e3c02a70d3305207a3e029e80dad742aaedb84b85a4", "105bb112323ec74cbda54535a21f188178a6f9955e5df43fe354aeb7bc398e1a"), ("0e3803e7520944266777a1c23347eb5f15ba0e41442cfec28a3bda6b02bd69bd", "0087ef6356dcc1768cf9a28480faadd3989994c504d335c352f62d44791e273a", "1e95034b8b94207f5f600ba0f3f762e84b1f027b53b2dc356999726b9029a3c1", "261d60e06833cf9924070b07b2b27eefe18d3ecb66fff27d5ed6740c8a2040ba"), ("02dbcb40e2f021c666bb75ef509f5543c7275b2a6b61d5a157022ca0b0bd60dd", "1ca7e79c4233f8cdd7d4b8c1bb0a6a14db02ea459b73ca49b960ce8c421f8024", "1cb1444d2d39c64cbb08a15338c2533bebac89b478ec316bea7d4ab314be02d1", "20ab026f89e6b6b041b51e6a14b89ccb32855e865d9a0e42915c63106eb4cbb4"), ("2001f405e6009a5726d0f68c3daf453558ad9e697882f2314112a88d3d5c52dc", "094345dd2bc314c497ab5377fb7907dd1df703899131d8dfff25c378b9b71715", "0315355949c1ec160e0e21845e6245f1a5aa45e71e057f187eabcab0385cd5bc", "29613b154b8ac503edff35191b208b12f8d0d4c52995dca789b400aa3a559c80"), ("248f814bf11384187c9b569aee4d7bce8527ccf57619caa70674b5423e3d88d9", "1244f88d5d9a8c3bf1603f0b2da7c43c19c46bf4dfeda0a1c6b99ea3e54f167a", "146b199624761ffe6086a8e3c7f212d049b9de20f4f09574cad7bf478c1c4882", "1da7f0a564c228342bfa26144ec86b81b970799881ce313c29c25cd4574112d6"), ("08e1baee5a865d6b154e18a286501e9d215f6070ce68fa9f0531ed79d6904ab3", "0ddd1452740b361dfba24fbf23224d5a462f95ad433ff9fd32ac2e478bfb9030", "12fd4a980690cf3876075d51f48d15a6789622575d1c2ba566dd7e215f7064c8", "25e8434bce5a8baeeba6224af9afc7fcaabbcb02b7bd524aa33d0e5b08a8c558"), ("09871bf90dad7dadd77620fda4493c6b2a3a9ac4fe1c7ea4d3361da3842e8350", "296ab1b208d4bb4fb7463c9088b8ba6c114852f0686e54efcb363ce0e631301e", "2a87a288f2eba8e607958f1790c5d41ea44b31875125b3dbcea69f4c5fa4e987", "0d8fd1841e59d615da7e20a79e6588d547ba4807f12825d0b2e08883d0471cf8"), ("2d3430f3bbeb213415ef99f831bb354093cc2c026172462e0c6bd75baaf84531", "15c5c216f1d03bd50905487cc62c7bfd216b346cb3cb6ab42a8a2ff86ca0ac55", "070bc9b153b7031e895d3257f1df179940a19a3c39ffebd5c29474aca507c936", "10d4ae9039b73abd4b6f9913ed24ec3de592c7ede9db4a4105c3d86b2f45f13a"), ("123af2bd0d38f91dc7837419f8ea3de62da916c2cc1a083a151318a8b3d5520c", "16d6d5b88cda1bfd6dd995518116507ef57fe97bd79627eb3457ecd3319a0479", "257b2b244bb2064bd0d9bbb798628fec2e93bfd7877cc7d6faaac5033c2df1f5", "0b6ea6353ec32f9ae7f11a727529d6f200e3790e1e4444d10d2051938edc0ce1"), ("253c33f3aa41b6d3101356ad31ae3561d848a673c56ef0725bc6cd2c34eebdfe", "20dae97d3658043a15cdf1c4d3b676e74a55920cd0fa9ac5995b925f5e2498e6", "08610360f2b062dfb23a310607b66e554dd4d8db0a44654d1b291a76d49b6513", "010425af77fd8d62741e97be8cd530f634a5b5478854570125992cd459ddd338"), ("070fc655f03a60473bfa333a0e312b4614051d6be56eb53137ec5c7c5ee7d25d", "2ce51b462d7ec732f04fa7f43de126bbbbccb5d9dbb3d0793a964cf15b691d67", "1cd736cb2ea5d0571514c8f06223a9ba01650f7270be7a8e975ff6ef822971ad", "15e999b26e902eaf80a255335782cf491ca651a69eb563d3f7a74f61e267545d"), ("2f185652b23192d6da2faee892e2f0e2a52f7523802e50e9a1afb02e9d222d4c", "2b17cd4d3417efdfd21dedd60c2db4b0369b93fb429d8920461807f90718de00", "030bf75494cc748f961ec2c9c56bf9dcf5acd9616cc8fe8f0ff50f17af76b1dd", "21eaa9fba60d64102581ad49fe1d2a35dc8a3482fb625504724d9f1f3286847b"), ("1cd2005de3232d23ec78766f3b69f6fb97356c648417adc60d801652d71149d6", "27abc9ba864585a124d2d5e205d7643ae751ecd88b61b7d18237dc418d609af5", "0c61a0dde80d0e9e67534e8a8b29c64bc41c7e490b7542d8b061ae081fcdc625", "10e674e301f9342e888b9f29df74c6c06c2b14d7f765782513d74b8984d8019e"), ("2e52bc62c5f01844c3a385568b642b4ea6803684e2e4c2441d9b6552c72d5cca", "04ec103f74254d746d831abce0102a42b82d7da30b594b86114e66c54daa0544", "023af25dff7ec418bb0004b06ecf1e81a1880504ee1e34fcc1636d06d5d4a3d1", "1f73f49fd12971976d1b12e404d496169412813fddf06db6719f031d2ede0ca6"), ("18374847e9da4e252aa699c3887999d2613ad1ad26a4a70a2444e51adf7ea421", "1f4c72c655334469856a0f12dfb137d69de31602b98af5e8d8c3943324d91709", "2fc3a1edce44f0e70ef45b16c8cd89a9f0cca567f3370a223aef5e12fd4b0fed", "18b1f48f6c4ef7928aa32d1df108f29981abf301ff482edcf44a342cf29d397f"), ("1e33a13cb9f28bab2c4fb79a40a46f0a38db754f24bd8b5626f817234a508ab9", "027ac0a61fc25299bf5132610094b69ab92d9b76455fc16066e221d5d1b4bf93", "2fb27b0282f52f44c4cd95bbcdf9b6b6dded9885ffda760105c32cca40975844", "282201ee1e9f94366a2c06880f5d4798d865f3fba18e2f3716c379d3270fc428"), ("22c64fb0a47cee4084c51c79b34e3562d968f7a458f69d2be380774a827f59fc", "0899e965f3185e8c6c53ab08f8feadb9c53eb9df56217fbfe6fe8f08a7065057", "0aaaa318507fcd5ef0b8da84916f56d2a3dc7a1462d502667e194e55ff3acf8e", "138d4fd8f14a12f7ebccbde54b11bf08a410dd6abad23b29c5bfa1ade0370855"), ("208ef824922865deab8e601c721cfcf46517390c7b947bc582d68e9a80c1e374", "21b64e05d48ff5b3f2fbfdd9aceda4e1c7eaf78876871d300654c2adc216f667", "0f48039ae5c170141130eb7cf605f8665ea0e47c0eafab80e3c4856852558131", "15b48826c896f503aa636778e34cf843bd9dfbe91a682332b3ce97a7499d0f8e"), ("1bcd763f779874385c5365495c3ea944475a107758b4f3d69d09b63f0f3b126b", "26fe55b31f5b39133c086383e06944acbda83dd180078066fbf64f382048fc56", "09c8533deb5ccb8b1b8239333cf007bb2f1683e555d7ebf8e522a08cde607a81", "0aa24494c8eceae70614ab65b318d94752be628e984c2c70c5ab35bb7ffe8662"), ("0bfaf4c04cf66ba153149885404606894d346a03407242879b70532a943bd77e", "189e367ecd6a81ae8efd69266a0cbdc18d50fd8e4796e348261526571dcda066", "1f5308e7f7c259213d750f3259f2a30a7696f8d840730ad19c9d4046ef637a5b", "24c3fba238f509c6772841e7960686d7af26dc54597720fbac042f3a3578e198"), ("0d16c6b103aeb0fc1b3c33ebb67ab2a166a026143fc045a13d464ad9f5ff421f", "2375635be4f58c0804f3ce90d4133e0b0eb2e8a1bae8578085f85251618e207a", "1a7809bd0f6bea73e52e10aeed3584bff722626acf0ffe14de1c56aa6df0126f", "11d8da05d0cce19d68677632a4e2a628ff642881ea8d0f4b782da2bb2c80eaaa"), ("21774917e6c236e3aa789549d76dda3e76c626a7481623624b74ff9396894530", "29c5d6b4d137947987bdd3cd2c0bfe7da85f7da9468fb13bea3be76c95194d5b", "2e1f0e5cfb2457638d6e26218af260af17f3fc25e4a42d1d95c8db6a67b0c652", "2183dfe697d6516c919622fd1dce4f8fb183bbc78538cccb2306fd1b8dc72011"), ("153f6b9619daa328c1d5c46172954908f027dc9869654b8b6a80aaff5b51f261", "00df196c156abf7e1f6990c4c6c59bc378d01de7d7a6b0c9da8f21568cdd06fd", "11a505fd39f90df66e8731afeaa1bdbaad00be3d078114de68be675a3e0f3f95", "08391e2fa664cec098e48b22d3712ac12ae5557018ed1485255be5309e91dfb4"), ("2c95fa4149d9280bdacf2325ffde9763296b78a4f869ff5304e68d7f1e0df19f", "15764161dba251ddc28120a7cc158d22ce3cf8fbeed320ca89372258954d5e6b", "170d4c2432b2638ae84bcea9add1b7e8d0a20559e6988ac5df41dc4dae646ca0", "294de4ee417b64ae2ef91afd036adc9d5d827e212513b66a7cd90ba5d6f112d5"), ("0c083dcf6ec8e1bd1d89b4a24f3ded8b36cd12bb51dd2198e21a6d280378685d", "2316c4c3f66e6510c9dc1ed6bba0d8cc0ab9dcb7d78322058f75449be01b7305", "1b74302158d9b86a933c0ba3255d3ea709f32f53cf1252b2f9e1a575028b2ddb", "0fbe6d4cb1495aad9c9354f0ca5266bec1cf062234241497fcef13904192db48"), ("2edb3efa57235a5e1fab72e89c9256e73605f32fb1d111ef2297bf63be87f118", "0e4989dfcfc4b40011485b95cb1c1ec6b39dd12d9dc191d7d2a1eaa664def5ff", "0014a7ccfbd489d0be591b7dab1865aaaf52c7cda076cf62563173749d93a68a", "294d1f24d23a6dc88b45559cf04238424ffb342672db39b050bf34dfa49152a0"), ("0823b07b38cde0c5ae09650634d18107c856375999614b6f2fededfe2a09f289", "1b114d8dd094a57fb7561f9242effa0d7d5a9cee9cf5edf784412aa2a5f3eefd", "0381444be15ff593590f86b13cc460a3805c3c9b608dc4bcac77f7438082b604", "123426dd9d5d147150aeeda2c122bd25db6d4d7ac77b28a814486a05428bcd02"), ("18d169924620160b2fb82168fdfe3ad086e15788b25131f54170374b18388fd2", "0fa6a2cf42014816b83fb9fd39f65758cf30677b4337bb6974185839c54d2804", "1a75b6856aaa983be38c98e377852b4b0fef2f834db3abd9cda23b3868bc2f27", "1bb7ed309159346d29b26c552c1916197af591df249b4d8020cf4f32e5467854"), ("29aa979ccc8292ada2247dc35b0f3439b694ebb8fb7188155aa74bc673b2474b", "2344e7020e21d50f163c973a649995569d64efe911236bac8c57dfbab43cb155", "1bc77505db755c4d531893cc958a1ade3ea47a54d91a490bab278cf4db87bbdf", "103f17ff65e6bf3b60bee5a467af80ea7c11c1aab75c6a1d74fe7cfeca608856"), ("0683da619adb488e0276ba39da9942d8562e2e00447b7e9b0e02bbe4daae6394", "1d8861ea846b84a48d7ab1e4fa4f2641cd5cedbaafb202d061d46f84e694f42f", "1c37af67ba353cea086b00ffb617b26ce4315689b92c224e0f76f1a120a3f6ab", "167e5266cae9ce67d95526c4fd3a57a195274b4fc240fb3de53e55a7b1adc09c"), ("0f6a9c71e24c16660388b9b1b3c442aa0bede0d893a540f3c109091e8de6b0f3", "2a6f23b90fe2e5d3e5974ba6cfedb9c90cd3064a27b558d50366c630c8af7939", "2dab520083d5a2ac669afc9ca5ec3ce779ac1b8defc268f8b559333c9448bc77", "2bee13bc49e694e4236c1b1510b66ccc3d03a1a558d5c7e9f6ee78392a8a424d"), ("0b80ff3c123e6a2819a3c1c28367362280d649adc18b1f5dd78beaea9655448e", "1e9cdebad2bd5597011b04a29978bc709a1cb34f3a913a1c86f9a1db7f8475ec", "21aef5fc95a6767dd7b44926693adc9bf53fcb5a35fcaf34616cd445dc61a602", "0fc7202e05b1ef8d86be082a4c86ced4fb3429109f2f2860313d9c3a079d1680"), ("2c5be9aaf7f4b0624682e1a7a8c30b06d9ac8b4c44edd053a7a8fb620f3c5a8d", "29358df4cbe25203252d05594f59e91926edc930883b05920d53b0a2aa79f884", "2bbeab994afc6ebaa0398a06e82c7e777f1bbc9a85b2c275eee0c9a6d941015c", "08a19f38d98c1a2e89eee2a620091b3e0f91d68e7b18d35aeed08b6ba9ff4595"), ("2c31e4f80ade664df1556dc7ce024003692246f0297bba7aac9ccca5dc96c4ed", "246f7b59a810f266341a4f8957a824b0a6992ce534f02b92aca8436c902cde5c", "1d9e7fc980ebf6f9464ee9d0049d8de613ecb0c3030078005f1d5a470e8fad92", "27069af70b7329809b6c73d563f3abdc8404283fbe4569cc9c7b6917f9bdc1a9"), ("2ec559d337898260d09cff11b0b9b4ea03a2c8f4f6c573f3f445a4a14c8860a5", "07599bcb07458c618bc8df03d71e0785bc52156dc31c2dd092555d4a5e9e1a90", "1764e90a3dd14a5fc952bb26160bd70559ffac9aeabf18e615905375947efb5c", "0ca9652effe8a149415d54588faf072d5637ae060ce2e1e7c56c7593f010621c"), ("153bd6a2cfbd099cd02d6bac4b8bc17a2e6419247f9c8138692202149d8759d6", "03d097da62bf0a3aaa93467c85a4dfb07c2048d2760ee5df660426c17ec692da", "2dbdcc77545a2b2cafb293e093ce39459ed5cf57ef9f5858d249d86d51a1debb", "23bbbd3a572f299032539fc5906c54ff027c5360dbb28d1d0ce8fa137341bb99"), ("169758bfaabdf02ea095567c39c655b29cbfeefc94a5fd30e79ead6b2ff929b7", "2113a954842cf5e9beb3d4cbd4658df1174a6ef00b255e8ed036c785ddb0b7d6", "1c7209217008088d579a196b3518f6addaf61c082546ab9ef29f84e873fcf431", "1faa97421ee7205dc94f16391e5c33013fb3619e1ab92021e734f0fdc5b6aa72"), ("08f21bdb64521de0bf14e385c9f7f0d1523eb17cbf73fc0de7dcdfba9d284073", "11262b70e48ac524958f76750403526be50c393ff7a9374acb00802a9bca560e", "16c334f058491515685695a83e584c837fdf957f67e1489ae495c85d38ed019c", "14e6ca4184c7ca92ae3d05c98e38eafe9e2fc6acc5453d00c7c018045877b90e"), ("1ad21deabd4151d07567d7fde4bb3c82787f10d67e56088c6e507851c5f2ca5b", "223bf14227cc4e91bc44aca6650cb4ce63a2184ef3d5b04a5abb97c446cd5ad0", "1ef9a61e8743f2865f4953d35b2793468146558c79aecdef2dbae66763c3413b", "2a5f664e913f0dccde364690ce92fab02d81e9b98b43da30c378bbde4f097fdf"), ("144a2f898f5ce5c6416b9de57849306a1f81069bbc4dac9dd0711a6dda342708", "14aa203d99554de6a0137af9f2a06b7728fbd996f118aabc580d1d2d1ab75780", "125d7e05699afbe8407baedea4ea526ac60bf9bd302d170d39fe9c90fbc3130d", "01ce0b3d30072b13f3c056f12f1600db640965378956bc1346bc2f4a5f611753"), ("2646d3ec167eeffecd945239ef77100e601552c9ffb1eb3defa0debd12460111", "1db9e2fa7ff002fa29fb23a3203fb4e2822ef249eb0cf923a58aa7784ae84266", "0b4723317dd9121a2f833864373f01d8ca7b5de16cec65b0cc595088422eab01", "146e38f21aad9261473f03e5b7a4c66a1244c1a52276497672074175ed0937e1"), ("0ee7e7e4b88cedd49168314304ed6b4c8b6a3cb580fb83e9a5458fcd4a66067f", "142f32072351ef8f803b632663ec256628721eaaa845cf7494b230f0483e0d78", "2ffa505ba1a2f6cc8e5e7e17e89221132ecd760a46191ab61b30fc55e78f0ac1", "2a6be0f7c76e7086e15f38a65fe6175faa2a54227738c9e86af70f8fc04a89f5"), ("1a17d001f4b25ae163c01d72fe4b02cef7e65356bd3b83d09717a2aca56660fa", "018f0378a710a10149db83447169788f0718ceb4e560c83ba062d854d933bd64", "045990aed44565841537644dac1acde5d9729c10df60730a45ca4574c96dd280", "1924ce45985f855a2eff14ef56555b6d1a4a98e7b4bc7005ab0fbf3179b4f8a3"), ("129ac1cec60602cac78ff5644502b6979462349e1b5ed6c1b10d5ae2519e0e2a", "19f5247cfdff824cdf16b931115a054836bcd18a0c4d0d9b28e08e6cc0454357", "0538c650356d07b1f9bb08c4564f5d979f66347374a43310b00c3c223d454111", "282a26753a286bec40e4c20d49e4e38adb39fd83fb799851eeb25ef1217e2deb"), ("00813d34ca01c401393ffb214693df88cd8dae9a66c4e59f2f252404e805a88a", "210eff0cf5d209498124de4dfea9496b249cda0844c97b7daee9e0556e3fc254", "16c35dd8b06b384c95060ca9a44d196c87aa3fbfa632698268bfc685dac77942", "08003b227221730d76e832e89d3d0dc60719c5729401990e650e10867f310f88"), ("1d7b88f57e0970511283e9519b7cf2c6ed0d69d537360ec48e08cbe381af939d", "093ad63193f9969f1130ace88d8d8dd4ce9cd0e1f6f6e4bb9e051576cde0424c", "2bf7fbcb25ce28aa85324af1a484fd9a8c4bd5a73a7956c69378dec5bb195e1a", "3027e198b3f950f946ed12035482f5cbd09f1f88d8d109921a95a47b0774168c"), ("13af39942396ef3725b7cfd0be9aa7536ff3cc3c2a5c187f22281dd71584f046", "2c7a5f0ed4519841f98e19d9e60a803598b54b85949f2430dd1adf2078870cd9", "28080f5a07b954a12423a2121ad1bb544063e2f262b9324ffb25189973eeef6a", "02648f307d889865a7a970eb44704c56307f9ddcce3b852199ff4db6f4767e4e"), ("06353147e1a3c8341e234ebb3dbcbb475a6f08e19195a5522ea040e2ff512517", "2443107e6ddef4af795faf7f0afd66f36b3acd54c6ac7c9dafb745571cffd0f9", "29cde5a5b8add6c7b61d5dfc33e7eb8a8958474a8e02cfd2007d8a09e43a305a", "2c010df246c8175ead37f58a4e244412ce0a889baf8aa17dbd9ffc3616c2a8ef"), ("2244ec7d54a095808ad9f883215cdebc17437c8785f1d17a063deebee31a183a", "00d27e4335435beaccac0dc545419a22ff90a8f3b628787ec2b66c1b8bbdcc17", "24b36420302a98adfa168d33c4fcd2cefb8bfddf06b14231cf63ed1db38093b5", "1819373195c9d2e6929fc38dcb427921405a7c4e3a058253792a1bae359552a7"), ("11143406c91a9d6a04de8c2c4021180ff865038699c4278a77c8852577b6d8a6", "02d89fa71252ce378c8cdd0ec98982f233306eb3de93aa07592f37ba4ff3fdd3", "0a5ee3e3c6f171a093d9a99f8c770c45fc54b6010e544d4db9b6b02c20891948", "1c36d1d46a96aed6c66f628cf9b808b3a22f185c1a43257de26ca5507fcfb4e7"), ("22f18095b361d6d8413834d15948738ff1b2f47632983a2409fceec030428a7d", "26b523e1bd9ee7eb0fbea6f30cbf8797a048649b4b310627eda4a1193b71eca1", "1255bd8bd79fb80b2ad6dc9a2a17f62c1692fcc1d433c21c332e7a3d9a97a9c4", "1bab4d99bf1db5544b8f1137862dd8d78d5267e8a8f7e2a8bd9c712513326ae1"), ("28c479bae7809008b1e6ad18832270fc6405a80ff3ece621de426f13d2f86a66", "05fab78807fdaffc3019ad06cab5a1eeef3f6510f83e893fd61a3bacc2a8372a", "1b96285d34bc7365a85338165a991b78889a8a28404898e7226588c1bfb00410", "24a3f27cac176d076a8f800176935e8e2617b3db5a0f0f6b486c98d7cd4824ae"), ("304d44eabb020d7c9e546c3535612b489726ac8164c30e0a9c8171b451160265", "216ca13c26b7c77f2f1fb6bbed09007fcf5a628424a074f6f162be06d47ad603", "2484f7079a3579a261ebc93c96ce0b85f492e353ec6a4d29f811d7335c215da2", "02e0ce6a970ccc4567f1e72d685b36f4c6a2175a917788e0feed5f5582f71e53"), ("258c679faaf26ec1e05ff5c2f8e99fc6ecd4d99c4fca25a911b658cb5755da01", "1f5bfd99dca97bb1ce89e3d705df34fc74657334ba2f37503d276776c7581979", "1b84f3fa9af9d2243d785dc954175611631eb293b811f67f3d3d503692dcf30a", "045d88a01e4d30d3295499bfb975f618b39d67f038375d2a228e1aafbe780f81"), ("08edbb2c3b2b0a04b0323971c5fb40ba6f77c3367dda2b6b20a4e1535033bdf8", "1648d1dfc994aaebafcf5a7ff359990156985a315e269a23a8723fbd269f70c7", "22e786eda4845f140cedea436da3acdbbf3036fb83ebf93693e689fc66c3a11e", "210449bf7fe653b493f9762b4f83073bfb074592a75e91fc09328484f96fa9a2"), ("104b2752f4cb05b63c805a1ee1c14d72926d030f2bd89e4b39994d9c998db081", "22149a6b61ab6aeb7cb645aafcccb51a3640d6b3652f0d5a1442daecdf1aa777", "2f5a9a65dfb5625241e348146f57a3f46b64aa327694d7dac746e9d38569e64b", "0e460d2a2b1706fe570dc6de7f6f907f0d62757820d7ae90d271add8be8c0403"), ("27ba9da9059dd42e4c02aa986c756fc6793879cf8e4af2ff6350fed8e0419e51", "157874585cfefd6dac715c7f3c841b9e5debcca57fbc1c574d629d97c5c2e303", "15d11e963482a38b9301fe76f7733f23b0183ac66c06568a11c0749824a44ca2", "05dd1781fb7296012ea6294d6c289896272ca56c72ba962a3eda5a22b2b21fad"), ("29d9566fa563b39ef9d714b9f4ec19b05f8c442b4d5cc15e522b9764e2e8c4e9", "1a97469cc1ba5f6018708b5062b56dc0101d56c48f7fa5dec4b8208d68ebec27", "16f95bbf58b70d6a1251b61b9b686c0139fc81413f87e379d428d5ebfc9f1ffd", "1e43c1855b9cbb0f873c9da587fa4b3b8b49d8865fc0fc75f6f9d93e072a7f64"), ("07dcd326efa9ee1a81161027cfc0a1ca5fdd23895497024f9e51cc5d16115ff8", "15aac859aa6bab80c4c5da8b7799216c2edba7a61e57e5af599e69269813a015", "108935011028c9b5e536afb395802073645f03cf858fbb3376e9779499b35719", "2478e9936b8143a0da4e247c80135b9c28b906a73400aef730586a4f5daf6874"), ("2f03bf76b6355a31331e6fe88ce9138eb01ff1e13b46db22b9768073b2ee042e", "19073ef6e73b80bda9257bd78bd47cbd7e43c9cf0cbcaf1236350efeb9052566", "2712ab6957ded00b058597dc311112728467694a25b3052213e3530d142ec26a", "0e2df4136dab102b5b97a99b1cedc18996020c6c6a79fc484cd89bf85ca6de0d"), ("1b0d43614a6a14c9d3d462f07a7a25efd11a089c02b835ec454d4862f05fe4b6", "2406f3fb32c388947d127015a7e8abdf52a10cad175fd6fe9665ba51c6acba92", "26512c946941543999c8bf5f8d1c22b313e1311742563e788a59283579a44a59", "1d43b7af6b20b268c6c64a8dacaa15112fb2c4e86ca838b6354acfbf67421cf1"), ("13ac6b38f9395ab403bc7e1b6c5b801b684776f2bf4077dd8f541b9fde955d9d", "0fda2c393534a513f7a594aeab1614a954a43f422a8635511982bde768b209fa", "047c3a79ff050072e84db6bfc99e023ce61cbe7dfee41b0631a6a8e093f34288", "2a3ad3bb942f8fc280d2ac9e1a3a0135215b4df8c3ec6d406a6d67a18af07626"), ("1bba19b484ad4c7f721dee99e0dc7ee6b0b14584500867ec08860ef6e0c67897", "059d161f8a786f1f2422e07f9d9c5a467f1412aa4a85a8c48b5e937f453d2780", "138ae1b8885ed0b928c10f9075e97bcc93b8bafdeb67e9523f5a10a6394fe6f9", "29a15afe0d92d2f348557ae02926dfa8d53a5f74ec4ddfc1f0572728bbed0c10"), ("0e94028093cfcd9062a331293caca1d16dbdbad1d00378b369a4c15ddfa9f714", "16ba88f70208c85b9489807372f40ea8761237b06907030792da3f968080acb3", "17d03e154ccebee5ef108d99cca9b10d89bdade2fc76d6b25038f4fb9e9aec3c", "2b585ff4a70f48b8aa462557159ecfad8f1c3146310790a0531c8ddeda95321d"), ("0a0daafd6da714623169b2203923ea6f94dd57f94c2a540e510bc5864c506681", "033dd5bc97cf387e73016e10ea854e32ca2c170948756498a621a38649c1386f", "04fe2a4ea9549601b95d0a3ea2dced7e50876f1439f4c886d499b4e338659f04", "1cdb40c759a6ca6e671a8ac48af35c7e1a94ba0ef7e768f51365ce73b3877cfa"), ("0f9d40f7079277dc67a94c350ab653f5646f0c0f50c402fff8aa8c02a75821de", "1ba85f549869c58c484e5b50524078c98a10ec9edad90f2145312424d71cd8e3", "0eb8e3a49d159b1b171f96d86a2f4cbb98ae4e167a295d20227becb2561a3d9c", "2ca47448b3f0a912cc848752a3632471e6b4c35607d80e98026530c4cb122c85"), ("059784ea1ce127379578c285f6740adeeadffec88acaab17cd90436efaed632c", "1fc5b3d6a33057570ce474ef08a78982ae27510e0642b19cc4547a561c51e8a5", "0fa12541e78fa6702dcc8d41b5e71e129614c3fae4a655900843716f0932916a", "053eed9b0f66fda8a1f5705aa0b98a609bb6159a3826d706fe74d63456c3ce00"), ("08f95f6bd65046f52b36b5e683c0b3b1b95d8bffaea6078335cfb270db37c0f9", "0dd9d57ede633fa019dbe8ad0e5bf4e13402fed594d3dd59214b63504686e278", "2b9d5b9f799a17191305f0fc243c2f0089e677ca564970356e9ada2b1292d1cc", "28ea9d8b81d7c892cb4df5268502d629e0b4a40c6646cb852f333ebd6dc5a67b"), ("09e4ce65cd36efa307fc45763bd4f5d8b00a4181e233e9f4248d39d0ad9eff2b", "0a30b479cc3712240c102bdbd8f1a49f389e47f644e9aa545710a0ecfe1ee032", "169b8c5f9297f4caa5bce7c52ef079dff043e121933efe5edbc675155927d9be", "27997f19a4c0068764b45e9b7bda0832480e0bbb5ccb5e13f9ea62e19f46ff8c"), ("0ab0716c2f69390f184adf4a6559b08e4fe8c2a032430b0474697f1eccec9bdc", "20fae4ae636d442ac4fa6a2b4f7a81b2f070021758de5ca926c7859e20688cea", "1032372d4d1996af3a32d5987fb29a0af3cf39552e6da8426b222585eeee7f4e", "157aa56532042b4d9c806284f5e072c8742dce8f72b9d26f3842fdf89b9803f0"), ("044ef07bec5336d5f2b59ff3ad5f7f76feb5c2846e4c1efe75e572e8a4394e3f", "2d45ca06b4e43f964e044865b655bbf4a09ad74b807eafc1f4a02e9705095421", "1b1270e2ff7f74b74a8c9ff8ec34a5ccb4c2d74791d3c4f8770862c2f94b8fe6", "1497ed8541770e98e3eb5c9d2ae00001613193647238d9d0b486477df8e0935a"), ("155c833386881bf61879c855d0d17b7bce1972f19fbfee0ef43d7e930c5f2ac9", "2fffc6cd23abcfceb6fbc96ed1aab9caa7c4a636e48bf10a328d7e6885737109", "2985551567c0f5f566694075ce3e4559050eac974a6f9fb86fce0583e58acf28", "007b2506fdbf2c50a2726f049ca20a7451a3053d429957ca141740829e523061"), ("2fd02f5f82a895c6bb623958bbec2c4bf77207d27a30664cf4fabf3206f7412e", "29f6cb8e29e65f05fca4a947d8bf8f274992e8e26ddac8d295fe082211120c81", "1dce90ab7869864d616f405c956ad94b1bf1f9cdd14b799ee52d4a80bcb7e331", "1e4d174a8bae4d926b15809aabc70bf8a0d018d72cf61c5e7c9abc3c4e5672b1"), ("29d190648e9744bcab91cab4e1afad5f044d07a61d31dc19e788ba56f134846e", "1491f53e74d92d71b6db0e04afcf591dc7a8f93a4c402bd05d3aeb5775ece4ff", "0ab94f731ac31d8908de700d7966479fc133bf0a321b70f9957885e12fb353f2", "0c94f7f27bf1b235e26aae9eecfc24d13dcc4186d9498b96619d946290ef108b"), ("1de42264f486bdad61325ec37eafc7a9fb3aa75615d02bc6ee085859cb5b257b", "23aeb4cf5038a8634214889ebe91a6ebd6c18305d608f119e3e07cc06123817a", "2b1d5fb86bbacb140e28758daacef5dff5c219e169065148f426a66aa8aea5c8", "06d2d7bcf7dcaf2d25fef0c1a40300e3f736cbacc757a32df545c5f15bc80aaf"), ("1a26efd0d3aff226a88d7b6b8e7885feb5287cd4e1df18f81ee35e4abdf2c7a3", "16f5fcf0eca96de57a7eafabdb34fe7d007271807cd542ad00323484c5058704", "15f15572a02cb90fa82a6f28eb4ec784d3eb7fe8599578587085e16c429c1799", "003f8698e8fefb0079e5698b8ced3c9c049cfa4b38de324b4374eb286431fe1e"), ("27858f5a406fa18a9e55981d5f1501ec7b243ec4d544f9c341738816deb5eaa3", "22a3a2a1996c67d0c0cd779096691f4471243c66302d29f670b8467eb4e2ba9a", "0b2a39e11cca0c6872c2dc4ec59ec55a2ea05be82da14e113d97ac86aa45720b", "2ff26ef0eae478a3d2f6061c19a191e82816ff74fe32248a8fed47c78dfa6966"), ("074a87534f14d93940e92848b0d6663ae3861a1cfc5d3b2cd6db9ed07d604c71", "212cf50de258005613f1ec5e7844c52e116ed36cd821d21f8cec48ae1a4d5d9b", "1c84cff45fdf070ce378f4d9149a0ea2b187c9e57090cba699af95b809fe4152", "20067fc1873e987cc2b57289d22b8e275c348489ce20cc1116ce4f4deb9da588"), ("3031fa5b9e9f29106e98856b9f60020eaf5bd2b032b8979ab07c7205bf00a535", "2d58a4e15e5a439819053f68ce748186a6922c1ed01074d2dcdfe205a0461880", "2dc73747f6b01865cd390208388c846ab1328977359060b760c18345d5180497", "1b6da32ef5bc5ac29520f4f802d7ebf0c19049c4b87a92c12f5ad742153f6503"), ("2abbf304a731f3332b2ccbe65a93c9dc41bea283a63a66354154a9339743bb1d", "0c6356a628e95408c87fe50480b13196ff343e9ec2c3819b9747e7204c553413", "1bff98a12ca74da39cd61fa6a2b470a1db06b95ae326669b108e2185d1bc27ed", "2daf167fc352697dd90cce9b5c9a834c58a874ff92c70285c0e6b55bab622ae5"), ("22bf52563ccf0167029de6101593ba3bfe6013eed4f495730872781d7ef6c57d", "189d5af0c1ce23ef316c7737668141572c66c7fb4e990fbf684b4c19fd1d5f86", "195e60a02ed19c9ff96cdaaebc5cbb68dbb919058405e034e44f6567f8cec4ad", "219509b190c2a7436079d43f25461d49c6b454831b577e2f83c2c49fcf7c11e5"), ("17abc460e611a54f517755a0f6059494e4c668cc02b96bdb3736830fcc267f5d", "0af958ede4e7e08303652631e1da39f4d7a02b9d574ff03b074bc93e29ce5ab7", "2ba83775f03a38f29163feba04fa640e2baa9cff9ddc70eefad089a761fb1bde", "129bb8447f71c262acc750bcd86359604f04a8ee00eb10ea0bf5d4e5a813d053"), ("07e4b541a45ad170471ee05431abae68604ad82126dd55b9f7121e9fc49496d8", "0c693d156d84b21d128b527412bdb0fb0203e2a37a1c77d0be20ca070ac40d1e", "0556fc4b9376ccccaf12317361be3d3a873fc14a7db086e2a5a8826dfa28b7a2", "21a9da1d7cd1fe394a7844bf108f39b09f19351af410069250c1b99a1e5f81b7"), ("0ec4646d8ef96dcd2d0d176e86d00ba5cf2d79b3ee89ac13137a5a28969c87c4", "10b3210e9408e017d8ea3e46d371a74b6d7a813d86b35e856b37c11b7d6e0c41", "287579ee7b2389b187469846d140cee406493e1e81b5363b42bc072d0c2965fe", "242078c4e151876a2d141471caf645c3fb3c19c4a56a4d5dcd689e1f691d7684"), ("270a64f48609179e09a2354b1ffe5deadae1f81dfe783f1d64b1b48e17199493", "0c2b9f85fc099fb811ddf4d7c26bcf955dc98bf153b5ba298728f9d29ebfa421", "0652d5fb5377d40b3afac534a99d4af1d269594dfd1fbd62fd5dbea02a1be474", "22e33d5d244ec98d7d3269cb9851765438a86a6094f9f39915ab027f047cfc07"), ("0f0c9c85057cbf092d731a528e2bfdc28f3c6200234e1d8f54d45404614da72e", "1e3f53d88fb1b6354d095b2bfce92c423ed92605de250de5151601c89ca568dd", "25ed007b77b00b2838d7e6b0443cf90988fd9654675156ab568168a6b677a416", "24c4de8007fe910699093a1be73f390a4656ab5573179f87dfeb1663da71a232"), ("00e113490ab52c98f4a687c31d9cd92b85f33e2db02141f24ea39fd066e2fd29", "0090f64bcbd608e18701ff48a8fe6c096fabc575c53f61fac241699b3fcf0e3e", "0fe7a71f28274c915345e54ab2b7ece64631a1dc0d4e610d806ac82fba161c4c", "15b93d0bce85e73b6f6731609a407cd07cda53effc2636449058c4ae111d007d"), ("1853162591c1377d8e96583e7021aa8c161e475f9be7dcfffa425e3726062d7a", "2a0530a96e2f4dcf5bec78723530cd51d823634d3fe5498c25c4a01ff9538485", "0a2775b50edd54e93f321b18fdad8beecd564f3642bf381778221a2e57dc2aca", "0899c7c12610af01f1984fcf1e1a89fa24d25dfc2ecdb9350675ed429fec58c9"), ("25fe9fcb805523b3cfeecc222d56cf88c95ec7b1bef84dfba5d98dec71dc9f5e", "14a4a0e6fd9f7e008c6a9bd82b2fc6745eaa1456386b8195d38ce7bc6f127b5c", "1be1397fc92099ab5e2da5aa63a49b50e2272bffbe438ef8c11bef6a160a0806", "1ece1daca169ef07aa5552079191f24705ed365b1344e965cb07491c2167b7ea"), ("2f060310f76725593c5732045318abb75b7419a71972274e020cb86ad2460592", "07ce6ea2333ba1edb4a12cfebc3a4c90aade37bee89e3ab796a147215fd35a5b", "09fa85a679d0b4ab0e9e334e70c447fca80d8a164b3812ae35f3ea59dd350428", "06d43575fb143e096a8ff3a60bb442221d2519e9db0e2b7d9625d4e2688c4142"), ("23c882a5ba87c5ad3c2d3f1bdbbc9fb1a3f7fad6fdaf5c52a199ed922a189eb9", "1edd6d91c0d0759ee608cd6d7abb977295e383ad4a5ad82c876efb8bc6ef2db1", "1147b3227a5347f06a6bb57bee3a1c70894567af53758022835489e255e46c46", "240de62624a28ff365a2d606ce66d07058954fc397867110fbf602b2ba647bf4"), ("224fe82a40eeec46101f63a4fc8c3c4848be43f1c4c8afa003d361935b54310a", "24ece9d168a54eb066d680f3fe77a868515190a66c9bfac2a46a565f7472515f", "19fb7e409cfcb6a3509815f589bef45919bf194fbef98cede490b25653df5225", "08dc29ecf12378292b05527a323720a656c576ea0ee060e3b778c533c9d1e3e5"), ("06f661e70f8483c9e478e44e9bc1db180dc739dbfbddd7564e7ea5decd399bce", "0f3ed3f1b584390ca62244e2b2549b75c4b9c6013bcc81e3a56f6da5dd017c80", "145f92bb005cacde3fe9d80c5ba4108f89a09d4918ec80d9a6112b04d98b5807", "287f85efff453bda6017393dbb68e5ecadcf6e1e1f29dec196e204f142fa9e19"), ("172e2d19dfbdbe2f121a773a7ef3fe8a4979263afa9c23dae4f3c870a295e417", "2f650bec428aa4e3d432f5df3965ea9556b1cae69e5526b30940fd4db0beba33", "01c670a912e8718fcd502c003cf6a0ad589b5a5ecf06e8d0758fc5e06e2c466a", "11c020c781e037a7c44cb5e141505d2af3b6aafd4f394110eaab74d7bf719e35"), ("1232d5b03938fe08f15ab63ebc1c56fa6f88472d18155bfff3929735ed268799", "088dec12c450975268b2856ea71f6968832a183a1023e30962b2a73ff9ecdb7d", "2703cf59fa59e13049cb61e86f06b52bc3781187b3373db425ba6f35de776604", "01b074fd82bce2c2f42d923672ca17aaf1aa1f66e152751a53a8ae0735b6bba9"), ("0f08149b97b4cac01237172de91d8701f9e009c62c047757fbb13b68a140513b", "01f2601459f54cffbae940a5860692f43e15ebeb16416ff5cf2f33172c23bcf9", "2b057fa384f7615589b92f79161e8845e11d9b08b5b27439058563d9ba70ce31", "161f348cce21efe7b154192a754de6a27aff25d21e61baec2c5d9829467ab704"), ("2e319df83189384b45e5f4d530130daba04f16c22709ea1ac5f1d66c78593c83", "1db61aa54611eddf8378567e11eb78b2258f9f09b07ebccb32c48f28e037114d", "168a0d6ce24fe85784c066a0efea8cc2a818e3d34562a456fab802463a745f85", "156129a4966ee8b4af366cf8a30968fcae860cdaff733269b166b8d7db0acc4b"), ("0036056fb11eeda47166c0e3853f72d4fc76f38f055994ce53a5547d64b5db0c", "2d55dbd4e609f8b81bc274e2f467ee1c07df60ec2569166085f458a311d08308", "29965a605e08e02c564813ae757e1be179c2849b469d6a6f4511dda75bed0f0f", "1efd8bdc50d4e489f0a6872e255ac9d582659fa38b5c411c5961da0ab9a1f8aa"), ("2949f24083596ce54abfa2529e54c532ac82be1717b9fbaaadc6082efc1b7821", "1155a6aff4cfd409825323b05dad6a24a80cba0807a7613fb08089c5a38350c2", "20a79253eb25fb32650c96ceddaafa16f2d6ee4c6999c4c99e87e12fea79a1b7", "23213c9a60d92c33f575fd1aeb7ed50eaa16c982ba5570a33819e502c35c4956"), ("1b5a276b623d2cc1f0dac4de70fbfe5d1de1cdac046af3a5d6a31263fcd13fea", "03e3bd25716880f29e08cc8584de60bc04c8273c40093dd5cd478e7721fad86c", "0131c7270e1883e9c0f0aeec219907fdf63c95ea2169d90f419a4ccdac20799f", "29b9bab785e0181ba0abe4f30837ea30ecf26741d14789ab140724ec583dc83d"), ("0b3d17d47d31f42eaeeb8845b227b15bf5dee78006436d8d497da5b82fa69696", "2fc43bed4e79ef640ceff919a21067d9a281ebc36a5659f163c678f66ec4c196", "2cc660403b925798484bb37df558a7f250d621c3d3a5272e3de2b84af810640b", "1e9ef78ce6139eac9e0841f6368792d59186a881e903f1517f55a381b18d205c"), ("02e2c2ec6281dfda5828ebf61e760c1624dc4798bf79326b015ce1bdf7786a44", "09c71e182be401f26ff7f3894622a966444423fb57f39d7f22dce05f01a1f209", "16691ad986a6e3093154f3ce646f0fb355e57b2119a5ed6165c7e119e1bb954f", "253a74db5295e701cf626e2f24251d2c94e54744422c38b4084a51a254b9dfa6"), ("0825b649d136050fd1120aa88994f199cc7821075a930f63c2e30adfa84e6617", "2ee08ff74d6bd342558562a8b7d3ea78bb07ceeb32411ee12d59e2c775906194", "041b8007e5e8d28616d6590a13cff1b4bc30e98491246078c9eb871974da64cd", "05c6ad9717dd17846e4678c1501026a699088b4ddde7acf69c6c7d8ca25132da"), ("090ab4001f47ed564462c48b41709f72df43c0707f6d32dfa11554875e119909", "25dae05066e4dc03cef7125f9b0ea61da9a937b0bdc2bd5dcd58712e71fb651c", "241918c31a2a9f976d6b4a2d99d405c7b19a520ef5355e769844bbe8e60cf401", "0867967c0b51df3cc25718d8afa5a4f641b6e7b15e9cc90268c09933ad89a157"), ("05fae1dc99ca45667d5f4f7e62b7b21de9d7c8904e9ee82d12e0f57eab087918", "2d449438fb59f6bc7e0433d49e32e79f1b9f2f8bd45544f9bfd2122eb1f50406", "29da8894bd7978aecf21d8a9710a9ecc20c671e4e13252993322f7e4456fd7d3", "21df917f4ad2243592253ba72923ad435a9b3bb47f91a89278d8dc08f2fbebbc"), ("2f95516edba935328fb5872a90fb4b99ebf53a61ad1d7abe5a53070b2754a176", "0fabaacad2201b38b5d5cb7e1fd6b1c7789b6039dcc3cf59910c02870adf38b5", "1dda3aab6679c4444b22f49a91dcf80f871dad6e574e365ac76eceff007d83d4", "10478b12099b81ce614c8f845cfe5140d8bd9c5ad12b0515c9463f765cb535b0"), ("28c4ea8a047bae2495e85c8ce14d1a2ce646f08c953da69a95cb48404bd81038", "2aa7f4f101980311a992b32cf3ff1172e5d7060e7a8ec51af6ebf1844d8f4d48", "2052cc5a12bacafd63116d5d00cefbadd64be5954872cca54a9a83d617e1dc5e", "01018d1019014cab897cdb3b984226d07f036bfda4cd74325bd270e465a16d30"), ("2f2f96c1f770a47a52e9da43d14c16ba93f6ddb46b21c64cf2a2cfa3ebe2183e", "19ecb4fbeae8490eeae86348c0f7c0d911cc510cb157270e1e7d943b3d1eb15c", "0f8bb6670f6fc7b793ea6bf077f9b96fffb4a80935e251eac374763b17f62496", "2526ab5b7575f0838b1f3776de4c79598aed8453b003297f468ee156b39f529c"), ("0ac0863d9e54a69291bbca46792a310bd1526b84b918ec3693b30d228964f983", "0c1f47fe777a611509d37e65b356e0937420047a8cb5169b06ae04e05f7800bc", "2e7f3a4be4987b5f1769640752f49cc23da1b102dad51bf6a59d8748a59db695", "262cb95d7120ba0267d1855eacd02de2e392fb921a622c02e2da34427845df57"), ("0e4ce43106807695308b122eaf9e864329c322e07debf06ccca67dcefb8910f8", "02d2043cd5dd016635a88f23d750ca60721d05d4ec963a51aba0c39b0d5dfb93", "11fd2e530a3e86b3dc22314e44ba777de326e54128539ef93e8711c444f0370d", "2368588d885c116949cb35b764a6a8ea2203b96ce8112c3394f666caf0557c1b"), ("1a988c8536bd62fd1c264e61f5e8b32a0c23a35e23b7c4a766f3ac6fafd8b604", "1c0f609ee9fbb25b52699b8313568b5a1ee1370a2c9f31380144d1dfb2580724", "27555d06fe415e84c1e4fdb778de98f82a78daf2ea83a4eb4b7bbc492bad41a3", "0ee62d038025bdff228a158b953a99c766b3bad08224e99bcd473ac2e26cde01"), ("1b8e1962b8f9b568726aaf6602fe161f05aa7715f6ccd0592f835970f15cf4d4", "1c2ad1e74387aea922a497613279d2e2b61872a425253b4bb3fd76257dfc030d", "08299c905408e8139bfe8c640fb3f27494a391d2db338ad7611b61feba5b21d9", "13c3b8bf981e8d843ab6e95b3adbc6e97c159204effa4befbdac9c5136e5dca9"), ("031737995116997aeff946113c6f381d056a0c35157f9c0adc296564a4329d43", "151c8eb6606b9f6a28ed4f955a5e9d70cd097a1768b1464209e90df98399e4d6", "08c4f0f847d16df7a389b54716877d74202e55f14798e69d61513ad5e893012d", "0c29384cf2970fe2bfd1abf292f39126d0bf4e2a4fb9efcb2b7491ab059f4d52"), ("2cc32dd5993b4adf7981712f080d9812174e43ecda0400767e9616fe6e30b63d", "1934738f164903d0c67f5bb0c24f7071d4036f089b60eeb7b901f5cbfdfb2a38", "2aa44108efc68a3088988d36732c16b33ddb736f5d24dc0d3faf35feacf1f571", "07802a5fbc0582836fad6f65606ce7204c405d4653658c660a0c31a8a725a3c3"), ("1b3d31f6224a5edd8acb1b5d3528f95bf324e0c6061b5ec1c980cbb4d331f7fa", "16d8d94c1824f0c191c1ca852285fd014fd67423633f80005afa975f8bd9f386", "2054ad550da60cb31d24b43cf2354a6fb06a0b1279c146146525475fb8f74540", "26c4ef48670cc1d6d9d0a8e1c9b0063e25117f65a89593af582b24713a645dad"), ("028d796faee23ea264505ca35f53e0b2f939b72f302367bd99788b77d0738174", "2bd0dcab14b2f6ffad6ea68499e60a2e40c7f50d235d71021d827c531b71eb00", "1be7c9198583f96b7c111a5ce28ae3a793a7118ba4faaacb1822cd6d20ecd1f2", "26caf67d7012bc6cd7e44810bf44e79559150700004591c1cb3c545e0f5b7fb7"), ("09013188735c9ad683da78602dd982bfc1a4cbf91095d78e319958934e66c71b", "0fbec565f7c0ed88f7c8525c266652cc77a3dd406abbec50443445f0ad356ccd", "212d6853fc569631277e0c03924923deea7f114b9fd633fab0043abbcde0defb", "2ae3f99d1a9e6e1bde96d572b0f32ceb432e21fd96ce7ff63e170e83f9a186a8"), ("137d092d976c6ac1430d4cc20abe1fe603f8a8c579938afdd825b3824cfd2140", "0490eb18a4977dcf115e9c5d90c731e01e16459012bd4412b3926073567e317f", "2b5275648750d83b7219f07474e61b18043f1f0ce735ba891bcf5a957bad7571", "178c822ace22eb618fa85227f5ceb4d04200163cd4337e8b189fad89a6a4d4ec"), ("1cd2b767f2add76c440643684c8e59c2cd28e9919a7d60298b0fe116f2644c74", "2012ed75b2072e02c87ab1c9a01f979feb05c0844a7bab9c9aba74b723dda8ea", "24b15925227711420240b59e6254b068e9a84993d9fcd9b3ee622cc3afd9451a", "0c378c94bead70d187550448364b7f3d899cdddf8ddd8cf25332a23a96c42b9a"), ("227a7fdc081447f5ac07e461f13d0c0cc97f5ac95949c5b2cafd2425abe9b838", "194b566af53d06e691554d525e5e5c688d343367b19fb985b905c8ab1880cd23", "2278b7ec221b273469e8f3e8190b6c38836f683ade9a3e3d919f7900844ea316", "18ae27987b36e90e772263f18889f8b65a4fcaceb20e21380459c83d3fafe3b1"), ("05a1f6756e5aa675da10cafbf400f8031e641f77c6e7c25616b0d60c1d6163cf", "16cf81700470d9c172a1cf8b8ba7f59a253397df9ad02b61724405b4f52b8ab2", "0e2b81cce83de25a557807983d4123af9007c271e463e95ec9b8e5d5cdcdc66d", "09aa2a64d0fc7d7dae30ee2240b8caa6cabba4628c48d2114384dee72764e200"), ("272487e97a1a093c3c0fbebd1aff1f85af5e135f4d36ec0821be93b279119ab0", "0ad6189c34bf32aafd61ef70cf15251962b0fcbb22dd26ec114b836d33ccc6db", "12f0eb7edb6b7ee163703574a56ea0ac1c874d17847f384008ddf96ef30098fa", "29e38491a80c707105f4f56727fc95cd7b77e6192e07f9514abb95433b434c02"), ("18646ffc35733778958f54eebeb0212ce66605d016b43551884d3a565e1ba2a6", "1351312b2f8b2f51a75fa92f1afcd5f80143738a69e1bcac14cfe1482a1fc043", "1648f1a3d4e24991f4d6764308dc90c9c33cf37447171d087544b9e72a65bea7", "0287d76a11aada59f186998dfe42b8d9d082f2cfd8f849976f41465b7f80050c"), ("07783b6ae62541d3ea395caa2fb90f189bbd040c0fec9535a0bd4c8e0c7ed81a", "0df94d880fb5fa6804380c00bfc93a3ecc12e5bd76bcf2efebb6254e01afaddd", "0d7d976c37b51439614e4cddf2a6d4bcde72cfc531af44e560c6d6dfed0b0bd5", "24c94e2257718c3fcd4d2f7b057ff36bc16b3f86cd397b5a31d80fe912810288"), ("09f7416f5eb8ea57093b3a8cfd7a9e00713150b462f536bf2a76bfc136fa11db", "095c726fcc91fbf680f407c41a2bafa194701a2ef40272fb89711c34f1da35cf", "188fd1a3f84dc0c31b26c07ab164563bc66d904176f9d4e2175372954986cc19", "195d2dd2d13e0a5bb86b380f677f83a83cb56fd9555c13aa22cb9f27259b893d"), ("019f04081ee5858e9ec7443a9b7443d7bcc2a4a29cd11cea68b513ef06c78301", "0a83e50dbc8694422d5ac9b3895a65929a66cf836bd1ab83adf6804151d6426d", "06e85edf4c09cd7004ee976a9e559d4cb4c9bcac7c84a921959fdec581f259ca", "24af73d79d9c4e6f6fe39707a68d3e5997ff5a6f80f255881e455bbe19f6eadf"), ("21e29c467ac6cd8e7d719bc34ddbc5e59ccdbd1f78fb13522101aaaf09d46d45", "094df2771b50b7301a0123d7489b4304b0cf16b3966649e8cea779ba990e0295", "27839040d37258545582ee52d891677a24e4a78a717f9318e23439b3294460a8", "01da493e2a67db368b2e1ae4cceed0b82f21cef119481f069a03817531c4d407"), ("0f0847a9cdca274daeef16491861c70b9b677ede68901bde1750e71479594e32", "19a029ec96faa18c80d5e318762b021a462520970098491ffb8a81b62d4186aa", "06e7789bac6f538fb5b67688e081e9d63cce26fd2f022a2ee129b93a67696067", "2b4a60b02897a66c30cb21018e2154e5c90dd97b9622b320484c34f372b3678b"), ("2348f44f377bae5901e8ac2de79fa55287821974caf10547d745f6c8527a5c67", "2df895c3808c2be75aef5b91536e40365e010e339ce76a69c722cd23d44c0ccf", "0a8964c22dbf1ed80b209df3ee85a4d2c60c2aef82a63cb260fbcdc7c6107fbe", "124b85c29135e20fe9278b35b456f82d85e27c9184f2a613fb94a8c6909a2a59"), ("113da361c1c6fdba4ea32088c543faf1a84cbabaa00b3735ac6bc5ac82281b66", "0bc761ec3ced197a512c1e39b82b00493343b443969084a6e4a2e9e13cca8dca", "0713675d86a07d6a8ea9648a2bc44598a3db0366ecc3e311b7d8bcb770de9246", "04ca01add03058af83aae4c42b1b1e0bedd6cd7978e53f6ccda09c1aca539598"), ("1bc0372489081e94f3d832ddf30fe70cfd4331a7548795e45b38583aef026d90", "2e18bebc37bbb7dd2a80376c242101a96170be04e66f4bc6f8e3d156ddea5b69", "2c074651e281d682e01513a89385d9d14999b05a3ebd611f731803a4f2dae337", "17c82dabf3c259a0726b146e1b92af02d0568f5a5bf8ca688298edfc9648a7ee"), ("2ae8f6624dddafdd24d079660c366286b8ebc3a61aee6e4a5b49ba608ab536ba", "112932d5fa92bef782847e7bdc1cbfcadd4bb42bbb4c4326066d3248108327ed", "1849d721f70cc3d2575d5a5d6b6c4c1c33fa2a78b631279725d6114a94a1665a", "29dfe745fb6e99cc3c707151c4294bddad87fc6a2065351a623cf0058662c684"), ("004381a85abc7ca404e2ad7ee8b69cb7f613e767586e4c1ac5a03a09f3648526", "0c89f4882e63660fd0c7cdad99191698d5299e9ec22f6e91fd5feb0e4038327a", "1df5fd67deb2e7713764d9c722d804f1363f7163ddc19869592f5b80c2032190", "18acfe7de00eb29c1700e75a158906b8ad0d20570eef02cda4de2af81a346053"), ("27b3e7e9e5be768c9bf7a70d6de37e510d0e5e58c881d0ef8f1396e00de6aed0", "0803ca48224832e9f4de5d0b745bf1a92d3afad7ece585ab2e1e377691b5db82", "2a4e7fa4fbd9e42f05dcac93f0250ff330ce357a3c26ef025085802f5810a370", "05dc46112b66b222fa5a03a80c995ce97f6e1f2ed00d870c390f405ffe0f499c"), ("1f49e2bc970e7beb084ed17c51632535e141436f3e914fd38d49c413e606e6a6", "2048708159fce88e5781afbdedce3308e36419f7de4530e7f14dc4cc10d1871c", "25eb6da9b2dc16f9e69fa4faf6da80dd03babdf9088714ba2cf64bb42b21fefb", "0d341a728f965a80a1a66caab1b8cb8d120a159b4f6185ea56790aa7d68ee3bd"), ("0a43765dc95124d7d799879fb3825037503ca8267b52ebe58877fd5f59f92f8d", "27d834003a315a57b09b7a3de0ba04c5ab9333fabb5055ee2e379f3c8e58ffac", "0d0a75461062805c17455233cce4cf11fd7480edc2d9ee5ecbc09c2ac24d5203", "1f0b8d14e03373b31d0e6e1094760d8b4e0dca59a655a434d1de107875ccf77c"), ("12ca302d9783539b6771ebccd924425989cae3b4f62889e4bb28f51ff6b13610", "200693e3f997cbf0d0091cde5a9e0735e50994b7999f12dc7cf335e1cfbc9f82", "19b2660612a4dfec6e4900f27e3171e20599d32ed47e33e504bad2b43bc8723a", "0e08bafb225455e49284daaef7472601dc9a9d584713a9e630b0b40b94566a24"), ("2efae16bb2f6be49673d085a766626458a3f771487b063eac656daeaee651e93", "1eff9d2ba3784041f124dec03e209d4dfef0a80698f3ac61de965d363c739c55", "16804e41722859c4f4b3128670b7451fa101e0de133ee2d2fed5eb5fa09cb905", "204456afca2f30c7147f4ba37e9daac08f9677ffc09ce3460e10909b0c7141a6"), ("140a144550076a94ca8b50ef482e693709d7033a9cd8b97aee120bf6a1fa1d0b", "18960ada92e0a74b3a07b04058f6fd2f792805d7ab17e1339ed616e054b553cc", "0e1c3a5d752406a04247de00f99670c103a84ec74f4fd7bfa461373cd9422148", "1ed2a36560aa34d95cf1f140e6d6e9c6783038ef080bd12995282f5fa52f85ae"), ("28af284603bef2cf3a9bb0ca7ee368767023a3a19fa9999d1ff3a4c212b7aae6", "1f7d46749677398c555d087e08ecebe1f18129ebe9930b45343878a74c06b4f8", "098b076fa9367401d717cf1d734123decabfcde71f8f278896f9eb550501b467", "2f27450d11b9fe47d52a8058a52072ab4b8c901e1960a6d139d0585efa4d67d2"), ("2d4f7c9abcba1f0e87d619698aeaf2378aaae3861e1081bbc83fe4d4af87e0b4", "1df4b87ee48b025d5e3a12aace106d20491a44b33dcd72f4a2d82b7c3d46b9a9", "27833ba098f2a9879ef82ada23ccef6372327651ac11d7ebdff78493580804f2", "0e93f3b3a46b093036728b0ec3ae6325b47feb2c1f1c10a7432f41834e84ef16"), ("01980ec5aa5c7cf5f9ff9eb4004eaa564c19f84fa4a3a78ff36933a9d5100aba", "2fbb344bacc6c1c0219944a561708a64726e121eaebc7e69eb2bd6d426a33830", "23c9bfc883150d139711d0120d5e970f0c7baf7dff9e1482454feb4c14329700", "2d0b8a0d5f5c1d106ae4d6ea49a994f58cf606740954b6c6bdc59531d3491163"), ("0ec29a559cf7a238f715b973c165ab41dfadd93046c17c065d004364d22d6e8c", "219bf72f24856e86fc15336ceb9e0a5c8722f61bc62cfe864fe2e2e32985149d", "176c4c762abbb69b132e8eda2607607e1e94e554295ea7b553360f761cfc686e", "0d1ce5d39de763eea40fa0c4b538d72a8f9f9c7eb56c9f31253262ddd3d80f9c"), ("2502d727cff198bf380e6c3f6da33ac779d3286e4b40fa27c6bcbe350c88dc97", "14f2646efc17479fa0246dc7fe54ed8d35a44c62c24815cb4215222c3df012f1", "294dd5d0d6a20653e7b873c151677dd1722f04ea67dc47330198dfbe69144a60", "29cd4e667d767098dae68670e2b2770d686167dee590c3260333415dbac80408"), ("25513c9f40a1913bfb87a6b05354351fd4bc7b5fef9aacbe9b10da26494e705b", "10db9e16757dffa28c7e3fd90e69ccddba523403310b98c70a72ec154fff4a1d", "29d5d7e6344e3744456d89eecbed31d3f44386b6e4bae05d6d0bc99c3ef7ffb1", "2c6e5e4a1de1b8ae3d1362f4ad0712edf693dda296b2e12ec92366499a0e2302"), ("0a2b53c94fb7c792e56fb02598984eefef50272bc0f25681d9ffda3fce8aed3b", "2383ab7b8a2493bd2d05bd948f9ad180f080f934c55c0cb4456a6a90d11d0d4d", "1f21df27aff7b7d4153ed806797894b948ff53c7793ee7872cde374f90cc0391", "2a1f71b1fdc3381d1a095d4f389f29073b15152497b5be117775106bbea3fb42"), ("13329be9009ffa320528272e808ee82c9cb69b6b16d6d7b294b06fcfacd5beda", "0d4527ec777d083597aaa8607d68a6e5a5cc7e775fedd9ae0860ab822530a7e5", "1604a219b8ff25f17de67f338c56eab763de84cd5c21570a7f0304251a7b2da9", "03fb690750298604ac7d95927455624268fa821f94dc7e75cf17f490470eda91"), ("29db83267a5241b9f00b8485456d375e515c37b03e276699790a0663f8f268a1", "2b520a8d3929d50d1471aa4827c76bd88a2d4b0826fa06c5d84719a83ea9c2c5", "0aec98fb59e5e5aa294c0ad0e66cc7729881743b8539dd41e2df4ef6dc4980a5", "2ef4a8fe84f2b3937843da7fcd03b6badbf131ed6407f3a4002aff60015f5ec1"), ("236ff440b7ba5772265eb375a528e540f646e29b125686a13395680d9f455833", "2b73c1aae8a7058569de99c371cb1013c01568cec731c9bdfd257162f178ad14", "2e0520227803e4b680b0fe135a955c6e95585b3177520fdfb1eed3afca953059", "0f0e6b6080ca2acb44c16ce121117e54ac453db9572f5931e107bde0ebec3837"), ("20a5c7d5d2663c598ae398c1add12bd6a5d798beace8a3100848c7bd4503ab03", "1fb928c9354e44579d5cfffbf638e7f3cbfc22d33387992e71aa0c4273a14541", "0bbd670ce26071392e47077af83fc08a33854900d04cd4053d2cfa463f3708b4", "213d02e33609eea6ae7ea3031fda80f4f2554f5984b4705960cef8eac66672c8"), ("198ae0dfb50b38efbe3cf98346962eb70c79f089d293f5e43f34efd605ef57b6", "1c849edd66d69087bba14fc07c80a2dc1bbf6553552d784b731ff6c15fd14c1d", "035733ec2073f901c0690c9e46f6341dc342afcd0025ed587d77dcde985ce25a", "2cfdacde6c3a57177f67fe142443e932ef32ffc4c37f8da4cdf9ded497d2366b"), ("1df1a1521eb1eb340f2bf69eb5ca0183c30a4d457917d4a8b610416f4fe92840", "284fe003ef875c6564f292f263f6fd14c31a9bc3249690068ada2e87cbfc8412", "1fd16ba90067cb8f28bab3171b9dd1d104c7535f9169c31b610c3ece5e150a25", "02031dee7078ea58689f74a7186e011ccdb27143e08c5bc8ef21ed6bfaf48b03"), ("1fe783bb17f5d87dbfd63dcad803e4039fd416ab1a3824467519b7d2ad91e926", "07fc348e6adccf6f7c9591a0f36e32d8e395884c7d55bfcf5f8354ee09df9167", "1a069a712fd32013d65f4664b6f8738224be9a440e73358119e5a8ef3ef2a1ab", "2818bc17e38f720102517d1b608f2b3ef4d63359938dd3bf095e46f80c332785"), ("1d5c10f741897781c094d2aa386741e415862edbe6948993f29ffa068e946be3", "15b9222a02b6e4efbb3666c978c26af36985299daebe9c14dec540b3976050eb", "02265d45e8f6e544eea8f9e9f10a2dd25820be5c469d41241515dbca02971035", "21751012f708fa3edf9a1cb7fe03d3d463df6fed0ba3c95be4e0571f42c203ef"), ("284d63d0456e9fd3b990c0d55ed8fd7bd750974c1a993bd21c80d0a4d7a6cd47", "180bd0dd0a44e55c535b6212e5e8b81ad5c8f11e9f9dd21eeb251a997c804116", "2d164160fca99835c290ce45eb46f9e51eac08c75c9057238c0b670f9b49c01d", "1307f0c4c66c23b5f87c46c8f04d95ccbe322ccdaa2286e5b97f036aa717d6e2"), ("170aa3e42dd3b05526a584ddc4d96b2eaa133cf4d537e18d139403da31bb55f2", "163b04a59f7cc2a8f24bf4e2aa717164c05d65201e21879991456e2d76686bb7", "2b3b12fd95f23ad14850807fab8afcfa371e8762a492884f533c6a100b77e337", "047b3d97176fbb39d15f83847595bdc285e574494ae23659de0eafda337b89c0"), ("0b4b33ede5e875415e1c7c794de36e2af8bd73dfdf07fe973e52857fbf2ba52a", "26f57b62ee88652bdec09a2751e77479fc07ede76b854864d6afcd4d0083e9a6", "0c544fe7745817fd9c8fb8c30915b57ba61b31bdf2bfba0157c2da3b34fcfaa7", "2802c6c1ccf682647850a5cde0e42248e949f7ff97a663a3078b9eb038c54bee"), ("1a9f1c1e517caf1b678f046e605fad532ae9e1113f41746969358658641615c5", "24eacdbe1a11c3fca35bfda1ce29beeba35dfd8abfe46f1fff0a510b48c584f9", "082b0edead39cb9122e121305916c58f40d76d880e0533eb6a93544b844f2650", "0b499a0c8b9b76742b4f958944ac7524a83ae6623713edaa9161aa402507bb98"), ("0cee7663f8b7e19ad1580794e2679b2dfcebfc427353bd5e265c6a7146a495a2", "29a0b3cd7d15d93cb01c118cbb53837b691938eae15c7aaec7bbbd9f258c9260", "27b042a616698975f75e1c348adc638757429bbdadf49e00b1bb1c930bfaaa06", "1057a7cef744571e6c3d2bcbfca727eacdd0476fdfb914dec5e48456df09cd02"), ("1d8654d9993b3f502bd84da5dc11ee3c11fbd2c1ab1feeb3902c29a4c3f73340", "0d8ce4a4ab1cefe28e981fcbdbbf9f4273f7c4969ebdf8b424041b5efd3025d8", "13f383662d0f76a071562bc824c90374ee2adde857f4dbe058ad20febc8f827c", "0adfc184caaaf3b9245fc3afbda86f5728a34891c2c1dfd66408059e3385afa5"), ("28caa5ba55dc292baeab01bd1bc42c7682b8dbe77ee09c7944e78d56aba087fb", "180f02a933b255d7d8fba00763285431356d619ac7d610d8540a30fe827c2026", "0ab33b7285c518d4ad499470f7a50c16ec10f56aefc974f77cdb39cc1e516152", "16dc4fdfc98e03b7db642c01b81fffdbad5a880169ac7a0c519100910cb43383"), ("1da4ff3b85f7d60b1f0d1663a40f2c1dd871805cff5cc5b6ec3f9ec3da724365", "08f6cac89c35daa452bafb837be925d6307095227e93ef90da96c3d41471f7a7", "2fa91d888f04001471c15e8c9d4915c1c76efb6adf61a4034147c0cfbbe6bbad", "218bbc2be9080a2934f7a6e9f3fd65f42c396fc952abc6042379aba243e8c610"), ("24d7ae09f127b32f138be6a516476d0b8ef471ea6972280f8a2f3749d7b6bca7", "063525764580c38a5322e82014bf4b839cdc7535df03bea018af103d06ee14e5", "0eb1620f5300346d66b2a84b347860c5c270e537dff2346fec3112ecf513bdee", "26ed293ac9e9649d337ef52fc5d53e3ad5bdec38217da75823a2139890d7aeed"), ("07994a06d2745de598027d89f505e79ed2dada5092cc8c00242a4508e5f60ade", "1ee1f56bdb1e43a492360b2322f461ec5f576e30249613aef5f615d6eba2992c", "254527cec8930d684b98c776ae8c007cf7159e149009fd8fb7581eb75367ec2a", "1173969723b72bb600e368cf18906700e44ea73f075058cf861c5341709a0941"), ("29a19705d46af0bddc36d3395fc2fbec89dd0558d90a307df6dcf069c9a5780c", "12ad7f125a66f94d82e4d39de40adabf6246712bbfdf19f1ea171fca072689d8", "1193078135b228a9c01a56fb2234629c58d882c1c0c8ebd0ba1052a2c33caf3e", "14aa01857ed7035881c6cb473d8ab98689a774b442fd15d560d998ec2c24a5dd"), ("2d45b56d4940cb806e52f7321aee36c1c0ae0818d7dc0c031bad7235daa35a74", "139b3798755cfb94f76a1f603fbcbaa93df893c4574a9015f3969c959b2c2279", "1ba91b163932f3c167367d97bd40195b1b418d0c2f6d603864c08f02210905ef", "1c40ab3731339dea9d39c7729c7c38de4730d947ec82529bafba32da87c15639"), ("245ea51e847c1903167e1896e37b3bef51368532d1a23595cdd253390cb06937", "17dee4cdb9e0b18d43979cc060c7e5db3ea69e166f7fc7e0a8f8dca561cfa493", "2d46c6e58f28e95525a64e540cf81bcefc86fd4d3c2420bc7c4f2bdbfeeec194", "12ec1642d1f5fea97c5477d1db83c79e61fe86c935763c482f1aae0bff950ca7"), ("00402bf3acb493438aaa421f9942dc04f7321f5e30fa16c1aa10051517e966d9", "03b48813d142a2927efd07e13935b134f4cf3e37c3e65d900e801d0935d5bb3e", "1fb59676627a311deb8456dc189250d1a31b1a639e351ae1a8fe9db16255662f", "17b1782176aedbab9f5e9a17cac8193ffc17468ab58caaa4e43fe6f172efcebc"), ("08441e9fe0d97dbe0517acc0ade79259975bfd1f4766f4fbce72a544d7c360ec", "0ef6d6c4f1e10114df6655da0f357f32ced9e65b0de024ae121e78747e10677b", "1672825d6b123620c8ef35d808ca5daf0ac208e608d4b8d1546b1627b50980c7", "1c6310242ceda5295d27b31df35975e12b25a3ff18b2d2f61a8cacb3ac22f719"), ("12093ba983aeb0b8853689d147bebe63e95e22e797bec592924f3b58fb620e2e", "16aa4768272f385a5ad7bf38d332bf17e05e0587c194462d2cc8cdce505e1eb8", "07545087482766b183a07378249b71e2ffdcca23a8ee61119e789f5fa386afdd", "2e5e069876a9a0a01f0ef2de1491fa5cd6766ec61f561bc58e86d512f0488cff"), ("2b87979f2035b7a7effa45bba29c39fe10a1ef3b1601f22a366772531ce2cc20", "043993820be85b32b4d8bf8e012044f6d538aa4c1e8365102d54ccd8173594d2", "00a6ca2a051e123c41a7304298605889ebd79eb9e81f562313671e414bd75c79", "0a607cebd97742f5262a2cf236d6eda7658049643844b350059e2f8c16809ac0"), ("2bcdfa316ce5f2a427ebd1f2efbf2e71729db47cba0508a502855cb557840f4d", "0469b23eae821c73bdd42c8608bc7b4d216d63d93230ac962740ba921457a249", "01400064d50f1060ccdb9c834ba2fcbcdd5398c104f84817004d671a39b436dd", "1a3decdedf5bcaa3b9c71f333907563e1c30ce2572b895ba713179de0eaf574a"), ("18e51009413e81ef66ae669bb52531a16feb7543863eed34384c0fe35cef9111", "0bdb964d8a63cd69518b1265ea4a047abf1c2c96d7a766956e6b2174798d38f8", "1e7d1e0a10977c99b7b2d9f6154b5482373f21deef3b9bcc59e839912f3ead01", "0f8a3256951c04af229bd95bc8715db6b0817ea28d6840052c7bd8ad018a3caf"), ("27040c1e67e683c26eec0d88c5d2d4cbe42ea89a03607caf8d7fc6224eefc941", "051b2837fb60fbf0bb819f8692007114ec5f90b23856e7c07175bde6f628710d", "25df751a82387c42bc1d81acbeafa6ac6f0a0d0eb8a969558ab9af5fabe0f6b5", "0a647f77366ebc8158c42f068d99069b38bd497173afefe709c1cf55799af2c6"), ("2ca39e1ce796fdbcc264d4061c7e4b6c0a648cb9d91f17ec62832e77d6a79a64", "2772089ea408cc4f903cf017b320c778d324eec3010d12c478c1469251ad3b11", "2e3e6538406298eb89d1a14fea8b22cba504a269ae3a41e68f0d4bf21dcfa56e", "239e911fca3416c44bf36e9adc0dcdbf5668defd87156fa851e9f0f82f7b27b1"), ("0480477bb073cf9d9a1a6a01ac3c7df002e78799dd80889439e67a9f7686ac6c", "2db63ccaf8527aed97d4386fb8f101427315c3298dafa1b37d90821f2c2c5bf7", "0dc3063a48ca4995d570dce845012d894f51c723f7399cb68a11a624448f3572", "21ff67250a62c359230b60ce95dbe543eadf1afae82147528410f67b6c816da0"), ("27c63376573d9e0ef43b2f1fde553a09066663914b2d61528e9c354632e9737d", "26152ef18f24cd6b90ebcda74f5b3fd4ac5097c09d3360982348894a1d289567", "1732bb0ecf5cacc37f0aee5001b7178b6944d071d394245214aee369dc6e285f", "110df070bce130e8b7df35df04444955594f43457069f89666999d53f121ea0e"), ("2b7c69fae362db14427f1200814765f432f28a25d4f287587c8f58470fb67d6a", "22f41463bcad2841cfd07faf3f65c92f452527efd6aa20fd123017e12195917b", "226c4db3fb79e115a4f52534a28ee24c5237bf440447abcc742827efbef47a27", "040921869cdfc76183db03dc14ee915bbac1e6eb99e66876ad0c326c5f6e3006"), ("006a3630fccf93b19b0dcf518cbf008d69bff0c7d1d5650634f39d8d7ad82264", "250e9a9b92c4e0a8482f301315bf9cd9f7ba2969f2d98463f2965bcc89d0447a", "2adda6befbd4fb5045f121219fec9dfb5a864eaa7d371fda7f2ad0489743e98a", "29a7339944e2d2834bea4505fa7c67d02194e6595e900ea0a9e185752805cdbe"), ("2a05d8f4bed6aadfe5c9f94a34ca95bc44de85e9276a1beaab67c2e301e28296", "207b7d772b84ff3a898050e1eaf44bba0d9d7e6fac9a666e3b70ed6e3ff8e377", "24c8a87797aac7e4cd08bcf5df781be83f1724b86f85b28573490a00898e2d7c", "1ae09ca24f8af8a8ad4683a13aed038bffdfc6a0a20c003b03b9561b1bc25585"), ("1cb8003110d3733b99d4a72fde627451f418735f8cbe9a4ec4ea8c4c8a690c3d", "052553da809ea98b8a81fa36878f78a8f9512fa5f35ff55f7b7b109a56661102", "2b81dd9ada6f465909838b6c8062397dcb44265042fdb9a16cd8ade400fe7c79", "0bb076f443c5f5c7555317b457aef0a26b1d53c20cb423c5ffbe6f9f14dc8773"), ("112bd2aec8593ee9f4585e610359d37a7afd7868b7aac8e15ca912cd743486e4", "2062c775b157afce8f500adef801dc089b129f54af2e2eb1860e57d5eae4824a", "0efd53012920d4569ea1bc0027f0408c8556a0ad235208a72c435964ea807e62", "252008ea5f7ce79f47c9e34e10943ff787b1775c6c848faed4f93268930fcc58"), ("2bd6093553a3894b1f53dc166357393ed23ba11edb59b3bc9e59187ee347bad2", "2681f1c68da6b59060e42d62e4cc450c90f2c15a73667183596f5c623a005f93", "0d91c5ff8c400e2f40a96601ca1fab57ca13a9d66ef4104f5d94e6d7dbf9ffc2", "2e4c761b8b9f50af3f71420add2759efbf5547d5c4e5b797f9bb025301124404"), ("2420489ed8299982606be275c5fc91e36e52d9f44eb49bf9536991128840f78b", "297d2ce86b1be692c3b869ce6e0faf7c4dbda68443dd4d88468aa86533c66d62", "14fb011fdb0007df639e8d59243633648d57169a937f323b942bb07a50aa7f79", "0f8e3bafe4ce0db1b2d487db6b1a7f957c5c60fb6d1e68cb90f47f2ea4362c0d"), ("077d9d47eaa9863238acda0d05a79af9f6962592f02b331a51daa8bf8d0f24ed", "0cc50c4dfebc19494d2f73c8d4365c45387b6caeca5037dfa03ff8f986a58732", "13842fb6aea859914fa8d03e08a64708b338913bcccf68da3a957ff665674c94", "110e06a11589ab7cc48b8e40b2b180be3dc5def2392ea0e04edbdbd10267ee89"), ("2bf308df5128eb91513fd88380938858a73be5af8c9adf19556ad54d3671b793", "10394d3ab10784d6f242d53da437e401b5cff8d7aa6a22d7a28087d93c3ca6b1", "26861f876cb677a56e3ed6403264319f697c44c878106a6dc9a2ab125401a317", "06ab3bf1564ea610b5e0c435014c9b6053535edd2eaa2044bd954d4e5c613b86"), ("1af115923290f0a078e093258b63e92447b811caed6dee6a22d2c542588226d0", "055d7d4420e3e8ed85842a000e414531eb1806bfdcb87df8738a0e6aa905b370", "039238aa90115578478887a7ec02feb1ffad49990832ac1d2a70ac307cb9f644", "2cfb8577004325e9bd5449108e8c35de2e40c08590e16cec22fd948f4266aefd"), ("2414c615a7c20fa7afdbca264557bc7846c5ffe3cc869b316675cf650ab8dd93", "17017a2519604fde111d680b1b48f1aef9d2bd65ef20ea5962ec9a0c4fecf883", "29fe869bedde709ba7a9e808520edc2e1d1480559a7db530020550035f65ef20", "0647725d88c5d010f66849d3a27024db5d69acaf3a8479c89f039b4b01d582e7"), ("171bf5f2c5deaa1156a5e3e6b0c9297585cc2bd0771a6dc23f24cf3ccfd26a2f", "205a0cf31a46369866977a45b01ff427d5deaeffea39f85ca6b81247f765caeb", "005744b7bf9fde4cf66936fd96a3541e3c27dd03a591d4eafc7515ea429b8a3f", "131ba9ba4b03c2d0b1055288dbc17f53748ca98cef588e8e9b82037bfff85d88"), ("274c73686a16b05d23ed70a551df1d37bd1bd57eec54cf580e73d8497efc7b4c", "1320d351087e44819693eed86fe3d10637ec7ba0b5693fcd1cf8133061ae770e", "0d6cb38f1f28d25d181a5e0d3308755d00e1de2aef7bfb6bdbd2972360a708d6", "0881471dcdc77d66bb0054f0796ad0bdcf1d9cb28e5e2f1bb6299c308591afed"), ("0bb57b48b29f90f66e23733eefc62c0cc9e9395d4df3e745bf2d22b07566eb2e", "28e8121b08306c92ff352d8089592c9c537aee61cbe6a5614a9a82867e9b10c5", "19a091bf52db108382a659fee0c36c627ffaa3ef53b4c79b638da4c85e55bb37", "2c040a41ec3f58a69675674e32dbfb776ebbb7bdaddaa2d82a7090323a347679"), ("1317f3b14b30ce95b4d4ac47f024d05d8599c05cef6054b60267a7b4062b8127", "120667e5ef3191478748051cabdb1b9e4144a27221ec11beb36babab669403b8", "1c54eee825256ca4b919b67e4fa0c11f13fcab081aa7ebcf07a99e42e14fbd43", "08fad3a67ab67caac8ccf6df3587cd93515fac054df711af5d6ee61da275a67c"), ("016bea27254fb5fd2ec64fadf239479155a2b1912024d7fc059fee463840197d", "04809fc62c88dd7288966ed1bc340c54bc7c2815d70ec872b20ae0348d7c877d", "1a4eb47330eed6472c73dc15817a2c5cb48a821e9adc3eb7525504d768a736cf", "15eac0244e3a21480be195dfaef412df8f4ac7d2347de27d6f269b619c13b868"), ("17812573bd60ea2ae52ae58b9b1bd492d213c5c0a08270d90e5e939a2c53afe6", "00350bb565a6c29bd2704923b01ce7df16bca42ef41cf5e6212bc20cbae3435a", "2d168eb4187fa54a016c0ba8b70dc144de652aa54b30958ecc34db3471ee5603", "1acbe44c4e36686c83f2b2cc0d7a3266e705d09fa9e9414d22d03d6672f5192f"), ("0da5cbf71c85dfcc6df1d3eda31b8713e423b7266c2981c85f46b156f8caf4fc", "1027da5c7bde57749b7d960266c322dd578ef0bbeb35fb638d3ce1611da37597", "2e7e7671ef680d64beab05d282474c75ed429a4d1e726b92d29e885187400d49", "135f5aeed3a7475b3e4f95a472994dd0ad85834ce57827ce03558e4a85b67d29"), ("2c47fbab6084f098eccf6399db4c6e6f300f9dd5083fd2f7eb0fabb0deabfd42", "2c49a41e8ff19696c24e349514f184117a98f1dbd055e1e3f5d0e3f6b1ccf3d1", "0f04d58b8a54af791c1abe2bf012c770e5da0b7d048bfc740a137bbeca2e01de", "2ecb3500a532f409ee3879ebd2d5d5fb133e957e9a0b28d27dfd8adce3e7aa45"), ("00581f223892f3584761b0d78f4562f97236a7f51bdfbf35a925c2ec5578f710", "2677dda8ac5227166c14ec6defd1d8c1c04a78dba53c0b8e29833aa05670447d", "0c20997a0478dfbad8d21387b35f1825c19e9af5e9fe30b0efe422671ef3067d", "111a2835e5bc7dc0948527bfeff1f7bd9615bcc1997ca5e0894de62c04ba5e46"), ("12bd34e3e98ea5ebb3b08ef08f40dc65d4e95c05bfe20c963d595f001262e75a", "0b2a58374fd4e701979957762fc3371aba171eaac2cc9e11381da8c7d53e87c0", "1cae0713ad2013e4367ad28e7ec3d02d01d1c2a8bbcc8f3fee9f588606af09c7", "120e9039753a9168e268e583b0e64a9aed3bffda866eae8f99b63b89b24d9cac"), ("20a52b3efa9177c882065669b5446776af70a0e37555bd2a881d9aa031515635", "06f506de38bc7658f28d823ff3a2d17ee10483149e366ff6796fb3b7f1b2dfe4", "00ffcf7e9a119038bd086896e52cf41e877cc88a11072672c547c4f622f2b548", "26be071f4eb22485c7a47c1a584c4d449191702b024e5e3c732d8be42a1368b0"), ("2ef6c77d315fd6ecfb1887a26d52981c5ea4a9206730ef36c9386c654a16757a", "020e8cee4d9e6787c60ee261eb04f56a85dfd0357c04acaf4e24074d758d3020", "156ee52587c17a6551616ac20aa5c48e9bb164ba4b5cb63849110a83711a5655", "0f2023d63593c7238ea6b66f7789fdf7c885f7163862786135cd9c92f9cec870"), ("0a1531b1baebfed23891c5d0fe77563530ed8c564f86cfad6059367f11721846", "2345b8542d93b6b09bfcce4d2cedb10b24dca7bfccda35326b8ffd1c07f73b4e", "0c2e701c471fc5c331307a192bb6a6ed60107d83c399ea95987ca9c90dd3d982", "20435255e3515caa9bc4d79c30736a97db0de85e6905d782b74ae930c18c118a"), ("1045fafea1d986d6a18f27d898ee963ffd1b2d9bd464c580293717605b6124b7", "1a14603e598dfc10d61fc34d5a273b2ce9be3fa6b47dee10ef8341b36c473c46", "252d9a1b85d0a9a3fb951875032b39deeb6ff3f79b0d15498aa561942630bc12", "06766e10e14fc107c25e7baebc7ab6af0947933f360d2c646a640f52360a52bc"), ("114a07675807d23096eded39a7a49afa3276d89d4acf4c80486a7c39d40b3178", "1f4bee9ebfceb4040e2c268333935e06bcda2a4bfa96254c8f81a0bc262be79c", "24896519f5388bcd2443b42f893eab695c8fa448a7390f4baf8cdc6be600af18", "04dd819423614ade0636292b3b3472e8c26a4a777299333d1a1568db509188fe"), ("198460d2301e025b09547e06c82edf5217a56b2897ec9792083eaab9150f0697", "2d94e11a831920291811fc932ddddef7889f6676354cc8f739fa90e55a001f8f", "259f5e346c7979e534eedbc34c562c782b4da6763795c3336559eeeeb14e6186", "1804ff14fa85e6e57f2aabcac0f97c4f0d0ac4be3170a51964372e0f984fecdd"), ("0c1066b251716c4fba1379dc8a332599667f55a1a0d49c719a6afdfd8f30f518", "17305a07c67a88965c2f04652b1e939898fa701e6518f82c0c289df5e7586ae0", "0889f8f3d217f0f55226571b297d6b454ab887b9430dad93c620d365039c8fbf", "1e276983c81cf4274505fea2c8f80038b19524e15350b762fc45afa0e1cdc88a"), ("2e4657a9ec5bafb401fb890cf9b9f7dcb611908a58d6d6f7792a8f7726fea243", "2d4a0a4d5f5b2189139c4e4257109ee60450c38f0c77c8960cc1d2e900f02d20", "0a6c1ce04b6ad042f195cf6721445217b8ab25bcaa0475852229cb84c1016c74", "180dbdaa672ed224e5ed34ee32a4f307acdd8b49a4f9267827ef78737e0d1196"), ("2f7621115deeb2d5a53ece3a27ffde6a7de87ba4e599846c0aa2b4cee9a43376", "14c039ffe6b43de077de05177ebc5c573a224ce12ee8ed83111bc052c6c23c28", "26cf98d1af89a4b386eabb78b81e755aed993be7f784a4eec4451f31d054c03b", "15442b5d9446983015d201d1b8ecc50d858edab6ce730d569b09dac68ee80bf4"), ("25e3876d1e26630a5df4744da69f67e0e4eab361f09491b5e820c70ac4656be6", "1993a39b8f65086d362ce2c043a71d232919dfe80cc27aada2d873931589ea85", "2db31268d732328893b570212e97a7ffc8d48ba6439169930773e72e5dad7a7f", "12dd075fd559b0cd1f60058dea0348196bd518c33528eda82f8a89057cf29d30"), ("28e76b8c29cf31375225458d41739f27bd251b770a7fbac9391d5ebb2c3a0448", "178d88708c58cd79afb7c951dbbc5ad4735ac165fb5bba1d182d0a3b84925232", "0c35bd17e96339ba1b4ff1743a58ba5abad0ed1956267facd14375bfea1749fa", "2e6c4007f9c60c683bcc840c3ce5884b2b26fef8dee7970c2da27bfa339d8657"), ("0b9d3947429bb36f22fa0424863c7c6913b497ae56c60359bf7c9d6a9a0f69ec", "1f9c930f2fc3c1beda3a57461d1f47b6b516ffb96e2ff1a7c5ff053da970cf36", "07d3f356b78ae61c6141580f8e65af38bc5331dda115fbc117c922287409454a", "20856c6921037364728a9521e4625878a98220e1a787133e808ca48b4ab7edf1"), ("23d95d73f93747df16852eaf78529022bba6dd04a245c8a3ccc0fce390c9d773", "2841dc052bad501dc99af4c12498e1b292660a524442140a3c8abb6908c5fd1b", "042c7b28325f155b51f4cb1eba3178a9bd6205d87c45a140309340e12d1d0276", "24da7b788ec2ef8e3cf884c22515a2a9964f462db2f71133ed3ef1700becd830"), ("1b74eef07e59e31da43a8ad795007fbd90de4e4100cf8b29ac8d33c58182f1f3", "2edfe7abda44a2f456a4151d9a1b963c34a404900e9e0221318e054cbf00a2a5", "1ddc30251cec6973cd5220b62b31004e46e0a0b3aa324ccce88fd1f232803894", "00b7ee8636854d2b9fdfdb49502c6506914f37a0016b3c7a2f61fbe9edb1826b"), ("0f23a1f2df53fca0bd679de5421ba5692b57a17a119feb8b0263d9fcedfc35eb", "195125b12dc554048a42516a89325a64e870325cac06a9dbaacaecff04f77ffb", "24445bea449bdb3da893232d0ea26f9da120481a3ab06b6a6d037104799c1d5a", "1cdddf02a8041caabccb0a8500a000298e2ecac3a32456fffa07be7980f37403"), ("00d48fcc3fc0dbfb381ead2f4c71d649a54ba211ced126e2cec02fc4cdab4f45", "0092b8827f3a343ae1201bea2bd473614a762ccfeb675b227683fa6b56b99219", "18ba5505b09d963bc0841a3220aa5e0abb96996302fa50606261765866c27780", "162775255dcbe88a57fd86d69821e819ea17372d25be24d10e9317ccbf933334"), ("0bd754f8c80968b52de742595a3f2e47ea3afac5a37eb0044a461b3b5abe7c56", "02f9ff462aa03061a70a62f2bdb33740e3985b126eab918a6967557b32fe6716", "0446bed3624741c66a86260048833c5f1e347f8a59e00170da5c5abdf2848adb", "0ca08942e2e252a4f5e135504631eedb55e14a5595dabafd1619fa9e9f49b531"), ("06fc720ea2b4b4f44cfff4a993b0a9a056544cfcbf103e29b331c44a903d2670", "1976eeee115c15c887bb05f105e12491f8481de643f52b4551e78444ddb0cd72", "01d7c55b91c176b317222804effa5b3c4e2d27b4c6413811583397a0f8f0a2bb", "077048ce5201af227b229076f6192ff1634dc63c4bbd59fb8fd80717e3abc671"), ("0dcefd9c4766c208fcec3cf59e9f250472a998e92c6d1137c53ab49615b09edb", "042978be257f32f6f524b5c5c8330dc742c3d337710f8ae4b977e9abb8968203", "1fe96cafff5a3654eb2dbe53fec32695e2e966865dc487bc96a248258be31088", "1a0720b4c232ca341dc0133a895b188c1fec7f4a6d523ad9e515db932b0d780c"), ("124cf0e5286041d8477771be7c224553d52e034cb70609b2650f48d1a3e69ef3", "0608edb02e8b53595d4c8971aeb2d8a50caeeda0815726567ec5042451559218", "24e86693bc7c6bf7a161ff39d6bbb89b454f513a60cf94ae6e4c16a95f2f42f0", "08d0bb4ab288e251d7c085d78767f0d2717a24cc5ee071181b6de654b4b92b87"), ("22367911f54ce858bcb6f8b64f5cce29b70a5ce791661036bdeda455691baa57", "1d0423a219f5493e15a82d4176844cd9cb1062dc69c3662b2b72c16f95ad9ee2", "253d2e37aa298b323c0b52b3fd39cc95fe4484ce7d8c9e71c343f520b8b32ee7", "178921c910eba4ff89f8eef931613e5685e7c8a61a1c7953d432ea7e240a6dbe"), ("18c71a66e6927a8d554e01badf8b235149bfce1e0742b33f5c597b8740fcf69e", "102303cae3c5aead59d319eaa4e70c50869ff2d7b72e1c4874fe72c54c118e1a", "0a6093fe5ee5f89582522845cf057268b9abf387dde4c3b2cd999a4fb116049d", "2b27da0b7b6363e491861b73b7bb1fdf48c9b49acfa435aec9319b2ed1317618"), ("12aea7722210591eb5a42aadbab8b7d28a0a286c933038ce1459ed716af5a698", "206cce286d7370f732b4aa64264a533e522fc1330acb4c2be27bbd2f3367cc21", "18ed8007314816231ef348d6e5e1fd48fd89aa598f6a138a7e8c6a59f49262dc", "0d3803f6fbf17f7e247d84255569c9a28273c8b022778d170894e23122d85419"), ("142cbc26a37a006cad145f7dd54a9af9a73c68656db91d79676752fdd273769a", "1d449aca03acc2b0dd77ee700334b727d10c9b6370cde319bf42996220447a00", "26bac2d6ceea94dea59b87db854da780f3177c013fa489396c5326802d0e7798", "12eff4ff2da7c134feea22a082ae9b3d61cb6e9b18ff10b56d19e6f382e05181"), ("2725060d3ede5378e3a57f1f14e7e027541ac0bf2cfc2071e67c43228eb28e62", "1f5513afd2c38e684c19d51ab4c3de824f7da44cf906417c038f10ed760379fe", "1f569cb91b91a320ab7369efd86382c4f89e0accbfacf35c25016c966529e624", "12296022cc0cb88825d6c0ed4db20e2a100aa6166fe5bfb61b06ff075011f16b"), ("2112ec25813f6001b1dda9c7a8443d598a6a515105c06a4d7d288cd920981f64", "2cfa09f779112fa9837b4f0cc077b280692548301c040cdbbd035189c9a768c1", "260b81da33038484d5b6c0d9f4005a3bb8f9828111d322b14f2a40a78fdcb77f", "25a2031e1b00e804128a79f17e475cb71043b7dc8e51e503829e213d5fc93d58"), ("24a6929e8a89054dd52c8da9c9355e02a6f080401fb42145fa493b655ba8690f", "0a4341ab3b769f7f9d2e21edf8231b3f650a930476ca3159c57eb820b5ff98cc", "02b33dc72786eeab6dc0999ea7e7c4ece46d6a27bfa3b73fe836607df182d888", "0e26f1d092d51f88c16b2688fd80144f128ce025cc28c1f77f0cca96eacc97e7"), ("276e6fa737f448507055084fe25715951ff5503620c94ff7dfc903017a05391e", "287b3ead8745cf31f0f38e121ee606f85d18af44de28f308c20384cbba229433", "22df39a59b0f59b8feb83b75b43db767b49e1e651a6eee00e8690d9ee8d0b0d5", "09daf281ecc25153b3c539ca1df5e77458e16384ce92b14d8b2639bcc889669b"), ("2fbda5de07ac246deced55186115c73bd99b75549c362fc03f257810874e853b", "0b85b607728e3453e91c5f9317efacc132be252fe972c58bdc092e9590b4b71d", "21ff4af13cce272e89a33f7bd2ace8e7f4979ff254402d9046c10d21a0fc1027", "0c9a61fe21b73b76a19ac8c6bceff88cdfc17dc542cddc60b3bcce8b42371358"), ("1c6463805013051f1fcb781e3827ddde740769ae34b843a05d72713101b87b61", "0f3cdeb13f2156aa3c3f0952f5c712dfed73d37f08f496505f618186fc419f11", "17cf1a74a643e8ac8530eb1efdbd32c8d1de8d95f898bd9f1b99f3d14ab0cc2e", "227e06af41e079d4e9f1afcbc016331ceb2ed94bac95b198109430f0b1a50f86"), ("0814fa033fba85f50b553350d0231727cbabade94d78df4cfe851b21bfca3e57", "1b87a43bbc1aecc992d0c62b72dfb41d320185f61408c19b6768da80623e3480", "241c141bb7fb201f777e5322f0e218cf15e3e3134ae9259f4ecac653340d2a9d", "1cd3b3fb6fec69ec9ca9bed1e2a32f531b44b7a644a27caa59cec31288fab318"), ("1ec85dfc87930c12358ba0386326eaf1279d87d8c86f3aaea85c579e9737e1ab", "2956f97c866bf0509818ec122544ed28a252ac9449cf149c507a5069ec34f922", "02dbc7306079a857dc2619f4717d174bbb1b6c06e3b370f4703de1b5f76df5da", "2056f3c92e023838ba189ee25b052d7ddaa45a36fdad4655c54b36994809f319"), ("1af3f8db8365fc35cce2d839abcf15a52bf0761026a98291b3873b509b3fb48f", "25c93dc2274fd8b12cb74d66469e8e74318ef33d32c5f686d2c5427f9e41c543", "2a71bba5d8c46b1b9dfd280b5d6f04670fbbcb0ca6650b641518d0eb7d7623d2", "04a24a2e607a942637196d03ae19e619254b5e93446612a833cd8e856032c537"), ("0dd6cf0666cc8a984eddee01efb26df63a3bd071c9b676ac22536b0a6ebb5f28", "1a42edc08b9a8c1d48bcbb38f84b97451069da77820ab742531bdfafa639b810", "2f8a588395937f18e1aafd79c421e366c09386c30b857a38b17bcde36898a5d6", "1acaf3c3daba7852a8990b2836e2af86c6e6893562efa5d9896520935626a0d8"), ("09e7692393f70caf22a1db8f7a6e8c6e049aa7f6bbd974a3d0a629bda9c27313", "259efbfbca13eb3041f3cedbb915b95fc54d2ad12cc2a766693ef6cf10693867", "1d05057bf68d8f2efa742660cab4f5da0d2c6bdba87d1c7918a49f2e3c02a311", "120aee7c79f306f594987fd546c5b8d77a05cc81b81ce8b80a7750dccc5a51c3"), ("14aa62220adc24400fe16ca7d07cbfc64b25d9069b8b4fce510c9025a8309591", "0818fa3a843c7b87a9a831f38cdcf4c2809ad612961d5e84ec48e97866768c28", "01cb2ba5cbb7f19b0ff2d61be13f9ba43b225cbfc6b68b0aace82e075e4b147a", "170ab22354c5c30ac7077ba4007536ae3dd3c09a0cbdbfa337cd589450d82af5"), ("0ca77887675d5cbd4f08a0a90e753cb5796485d6484d7d7bfe718882e218f52e", "1a13e8e4e30a4c5f5037725a4465aaa56f742af01847263f8bec57715a2b725a", "213532cac4950433d3ed19908ebe0fbca2a1b350fae567d9e5ab40a2f4bd57f9", "1bad3845f2a30402a4bc752874ec72c4ab9757a3f587f64b6ec35b737de26336"), ("112486d714cf91b08a114a9d49fa0146ed7034881335908e20d4fc2397b5c776", "04a4a69ce0891cedf3876d2e39d0c9229b5db2fb1b0b1a3aa03c98c2f5c314a8", "2631523253926bd6affc2b05414e9265b6027f9927faa104df1106971a4942a1", "1515ad1732b9d661e83fd7572a4116bd90d5e230e0744781f44033f5933230a4"), ("2c7c3ca5c6bb3f99a689c8cd2803efa6a4209977aca7650a006eccd657ca0001", "2b768614f77cd0002b3b94037e37bbc8907edd74178585b79681a750947e6e0b", "0d7f74e2eba93830dbe75b916ce29af8bd11e5000300dbf4f4e43145c757e412", "0ac67bfc1339f8a24ba67f2cac37fc858a5aefeabf0450f23181adc26b8be727"), ("0aeac0d97d82735f55f5b191f7aa4ccc396e8dd60cddcaa78e6ca64f4047fd2f", "150a54367500a3b84f89f9a69a6b0be59f9320911190a0a441b9d33da9b9b634", "30131068baebbaa9224a896992509a601648e625922694196e0c0e8bd62c423e", "102dd244f44a15027d26fcf8ea4bcdc8a009e3dc13dc78d4da54425b20270df9"), ("037727baa25d621ee740647d9ea0611926d7e0b52e158a6e6226d704a124c645", "1bcafd4f08fef07de579edaeae6d08873f21a840af6c19baf66ebe2b6a317bce", "2ad2e3631160ba21ebd23c7063ba45d765f823e25b9a290bd341ea3c27a47b95", "174d92ab4857b862b0fbc88243e628c08ce903949279a64091204793849d15f9"), ("220d6ad6c6e6faf884bf81f432aab6f5c1afb9b738769d9b972ab414fed0d992", "2780173a60716c65bb3f852389fc0d35dd6d42c5fa845b725270ac189b44659e", "0f9cc1cf9aded0d54805ee2c91bd509a1dbb70d79cb04b5a0ee0c3295e2377fb", "2a8fad684a800c6b5a817157c738459197323422549e2470aebed7c1a8ff0350"), ("1899b7121241ab4c653d6001daa86939733aecf2ae3cb846582476973b5624c4", "08452a0e0a5ab44929acfee809249f36ce8f3ceaa875b3051ec2b648f5064d40", "0cf9f7bffbb98104bf59bbe89283431a20a3a05d5666201deb2d2623651fc2b9", "23fd30c052d3bc3ccd4e84d5e6344573c9fc0d84eae7c5973e070f4ca0bca5f8"), ("1e571f93d742610e5fb5dd48b6d555b7ca6e8c9fc3209ff6001fb149a90416b2", "0b2e0509b76087baf900a019674c1a1136d0d4d363d950b35d0ad62f60a97b9b", "29ad9662243532c74d1b52732352228e767ea6b0f1b6506a8b39e4bea71c009f", "1b57aa6f64eb901d7d6b006d8662854089d5856fb4ca25a59b366e6501a27af8"), ("22598755c9a0e6ab6a7420ca91c54de5389d9aa393f0dd0e420ae9304fb40eeb", "16ad4882e77f2de46eea27794e7cad2abd2d62e074d4573adfd4425def4e7276", "0a259ffb8c9b682f7af5977b28b7445d382e4dae4f9c2775eb0ca486ba0f5f8b", "2e19a8c486f63e4d6fb4ea638a11a40bdc77a8b0a0b368bd763b243e5152af93"), ("216e261e0ea3dd7065843256224e75bac65a006a27a0e2371fd065b5152909a8", "264a6247dd3b291a673888dd7230b5eeb5db1fdbaf688228b083629bd33099b0", "2735dada45fc3f98211a0bbe40cc3c7e9cac3bf38efd64968462b29a6be548b1", "17a7c3ff6b22edbf2b8e53e442785db1bde5504d4a6c716b7d009328962b9c4d"), ("1fa828fdd8285081a73654fe8b0bbe9f253caa7034a5d10c0799051040b7e0a9", "05a84cbb8683ec73a28fa5e092f1781e72d9fc02c6761eb4a1b8f73288721319", "0507fb1e4be280da1a23b135517f03447cc7b01d4ed2d478c88018ac94b2a770", "19268c27c19d30e2d31e79e5d3a225ce83dd920d74a7291021cbc74aa0f82741"), ("0e0f6c0be59c90e4099e30ed719854a7ba5dcb052f53da679b5483f19aa8762b", "269c1e9d66472e04cd78d5b8d4060c4b2d1ac1252ed1ab6baad43680e7184a26", "1986a8c0a8b284e8065ada533647c87c889eb18596fe12b245b2366b17395cfd", "24f239f0396ed67f863a539fd2289fd12ef8aeaf0b46ea24ce8dc4e7eaf07782"), ("0c9717bf4d028e94a2224859503c5ee10acec2eca71541fa73a097c28f9471d2", "1a6a461d23c68e107c576c8829338ef7256ee8b960f8709f18e7e5781dcbeff4", "2a53dcbfeeb8ca8961bd9c7174f2a9095d5654a37d783a400419113129790caa", "26be978dcfa322bc8c3dc50db9567a2dfe8b4f0f53bfa956662044f2ca73fd4e"), ("1c1ba29fdb53106cef2153648ca20542c988c0e13c3b816aeac8d6ad70cce503", "243ebebe01529a5262a424fd01c3bcfcfe4ce97d7d6a1635d45769cdad71168b", "08dfbb529b7329a9fe43d8be4db402f964c8d6781eefea5fc0fc03d0cdbcb756", "2b3d728bc31a5ff782ef3415d8a3f38151c501a6a61802c6b8d9105d33fb95ed"), ("07f443522c37f74ebf2c7a138bcfa64399d89d8881ab95fd6f730bbe86746cdb", "1b16ec6a6ad583b1741b758012b9dd79354bbe73c53282253064428fecfa33af", "1e6474bc4691e5e819cb6cd6166792f2b4363aaa7936dc296a4d4d3393ab2eef", "16017c8bdbd8d4eb489a06113104b91a7c72e0094682998957105c92f8baf492"), ("032ad8a48297501a26d86a5e380931232ffd2235044e9affa5c4d062201b6eac", "2f9bc58d0ab565e973ff96240ad28e22dbd3c156a9d51df6d40f73c285aa59ab", "11de9f805e2db9be9bdf88c709b7f1e325180047600a8e719da84e60713a0536", "0b20ea6b1562492cf283dbbe3eaace1dd543730d6392de5910dab9f46f1ff24d"), ("04346a0f285f1561eaac4f4d81a4e69821db6f22858ae612dfb71b2ef653a261", "0ee59f7e3d0691c1c768123f70fefe6830572ef0eb738c64dc8e0b9659cf0ff9", "1473628686a463f71a079d8750e7d98db0e8f51a6bf130752c2b388d1efaf686", "199a9d93fea0c90072cb98828b57d2a5fbf647170f88690c3b2b556e6f32de20"), ("2391ed7d1d1d433c8296de62dd3688aed15458fd81e1168191a9cc8d273c2a3e", "2f809d1ae511554c746ec878ea8e89cff2e3f8df4658422ccc0cae4f1a3b0fe5", "25f43fbb64a7846102bd1c1fecb6992798a1abb800a342b29dfae5066a5381b9", "0feef448460f276a14d9dd40c987cf33e3753ec6d4e7025ab7cd2dd1f28f0c4f"), ("24881730b1b01899851442757eb511cd402030d9e621a3d73d17e0d628079bda", "25886a8d62dfeef9b47a5221fe4e70d0d73d91450e6c2e02f790a06ff84f4a89", "037b5779281173df9b9e1fdaa7b18d843d60275b1f911608d7a30f4f486804d7", "079a2295b3adb2b2e346ddcb1a0387f535c3f240d9da387cb47b125fae5496ad"), ("1251d472b3d2c1c1291e93beef1e8fc63d55c50387edcd1388d1a72fbc926a97", "0acada3f571c508633c9a3240badf1082a940d83991359ca69708c69ee6ee79f", "0bb733e338f9876ec7f733105e70c4f102ceac7476ccc99bbc45b0e05230525d", "0a57611483468b28edca842c5cd17ec85b551123ca349bd6787cff1b5b386cc6"), ("20c696ce6e7f45271a7f3fbdc7fb98810244e2809b966d45f9d5337e93ed044a", "057d42d235fe606443c2ccdf7ef72c259e5ae72aae30ea54f7468e327bdf86f8", "0dcdc43818ad7fe1bc25737a0a6ad923d66513d1c8d7f4b25346cacdd467cb17", "2f4012c17a0382dfad11ea8e875f8cc3dfeb5e5890d92c7f4035f9968477814d"), ("2a476006108002260b3fe28471b91a79dff45a80d674e6c0562d582bd88b0b07", "2c41cf5e392512b67dde2532cde8ee909561143666dc503b893cb5aae804eaab", "2b27d157f195b5e80a76d26cbdfce0ee72d18fa1fb46d118963134b34510fadc", "1210c81b24c3941182e0e50fca0a03b5f9b5e3c5ca3e1373a4c8cfbf12d49712"), ("200362b1d75dd3d8994dcfdce4c40222cbd6714673c30774eb9d505f2a286f4b", "206a1228386664180fe48702cbcb4eed5c75d5c926f63e19ec194fa57df66c64", "1c2937052c18779234c6f8e1f6b3f7b5cda057541ec40e19dcbf149836bbb61c", "2562a53fa610be7870dafd0a3db869144aabe5a3eacc46cdf200679c0cd86335"), ("256a9de24d2afccde76d8c7f18a7ce9b208df8044bbd8970487ed75b9ff1ba0d", "06c6a5a3d18da0e7474093afa33e5906c30cc3ff0df1ce9c7629d51f25b1d83d", "1fc24e9840aa72df3caae28326d6c0239a5188427a5bdb3aef2b323f8bebc696", "26437e077cd6fb9ac6f1c8787a4b851cbc8dfcb5e721e7bc528a23f02fd2a28e"), ("2b5bc692e1d3728ceb3ecd9d80596bfc3fddccd670b1cc300d2f54a92956062b", "0f5d8200e68720e5cc4a7c06af39b4dfdb10c3aed786449eb3c746de18d31190", "172b5dd97bea0651d5092ba1042a481a16507fb939c958850d5109e6c5f0ad1e", "1bdda363e84989168a3b3ece389ea8b38f4ed8bd36eb127093d0d0e6d650ac23"), ("077c449fcdce5d4449f3b457e4ccf222e44bd4e426eda25ae500dcf9e5d875f0", "1a68f80280bd0eead001651c918c19f19fffdaf940202e71cee8758d214a2694", "2b9a7befe149ad24bc5028d449b61a86115393d3701cbacb24d3c958e4485cf8", "157915fe42060574c83f89e58422b39c88522852d19f92c47c251dedbd7e9aab"), ("0eba0374cb4fd26fa5a26af551447153900381df7444505e2a946224bde5c657", "1285064df0984a1b1e58daa63b46953a01331f56140fbd3a816c672c6df69284", "1f13e1bab28b9fc4a9a863335b7d3b97a002b1ecf594a60b2c625c4b6c46decf", "2ece51a619685ef924238d70176ae40da6c355d31c39ecc4aeb3665fa1ad5511"), ("0e198b1c9d22cb38f17afb4de7bc73485c361466508f6f5570aaef57f65595cd", "06d7539c9fa1beae200f73d759b5d939a99e7900be828ae0490f7577a441a98b", "1dd64b9cff22a7cb986e01c7fdbba931a2b1879dc26f8fa4cbc2b06f3e85237b", "2fb9aa4c186459bdcc53e09dbbd53270510b4420b3942a6e9c758908409ded65"), ("1aacef9d8a62b7453d389f7667889b2dae84af35b3321b6c042dbcb392a3de9b", "18de13e65264a0058a9ff7253103bbec29b08334475e12f1b1cfd7dff1245d1d", "1a7b2707a799717fed9804f4ab891242bd75d41d0fc58800c3676eafa64bd07e", "237b127ca55a6309778fad9655379a85354a595c8f0ae7bd793f10e973d00859"), ("27d5fd41033019bbb1b56d9ddad6f36de8b5d721b70a885e2fe5d0f3a5e40627", "1b0c3fa8bafbabef39ed11ec20b8b57c46c28ea361e80734c6fbdc4f785bac37", "0714bcc793d9f30dfda969db1530c1d39dab3cc9ec3a2ecd0bd5cb3ab6bc08c4", "1ee7813c2b5e1d34d55ac5eaaacad838ead954879dede080fd3b41d1cdd91096"), ("142466d9e0c90df4a0e0e55d237ece6b42c5871909270f727a24899306765c91", "0c6c1a10fc6df26c3055fd6eaf2604ca325df2a28e6a96b443ce88e49b7e98de", "2f40e76de60b99f74f0335e3e7260d87e4f0dfc54609cece1241130d50bada14", "2f78a43cd9d980a2fd869d63123f090aa9c9e1583fb3e1f4b64123e0ad48a36e"), ("21312cdbf6954040012fada081c9ce7b53d241e80d97476a284a010b2849f0ac", "2a574bd025eb74e8b916f548df143cf227ce76891d8ad1f2c19cd97beb4a64e4", "0c12934f5cfe21f991354b48e0786a1c01e8d8f0fa3e65ce75c14443ea38d454", "2f002b3f2642c64934f03c787dcdc18c8d6e2fbacacd5e6e03f7c0abfd5c723e"), ("055810eee5ed2f851eed1deecea6ad0cc4b3bbcc6d89bd9dab599181a4f3a04b", "01eae660c18ab534b64fee97fc15bc3c0cb60d97e417fc906c03ad0243ba4738", "2443e32ac8930f2a16d39c56d107e8e9b1f7ae8c8f04d080f2826c142f46a5fa", "1ba7b1fbdc3b35b421de05a5fad42375046ef7380f3f0d75dc73ae7b27bb3acd"), ("13e37d16979bfe0160fa75fbc6378893d4da5f3e8cc5077dadfc2865abc516bc", "2c9a8c3a2cd89b42629b319eb32765b3829f5abfc6f9049729175769e28807df", "19384659ce9f876942e6657c453b221d330863fdd7a6fce3a493fac105aae04e", "0438236074fd6011cd966063c85bd0b4056043acff4a8a533dc4d68b90d8de0f"), ("1767380467e9393264087f1302e07d2e4ab4f07fb06ecfb25caf3308a5d7502c", "209bbc8ea3faf558908cbdb3e2bb2127b6281ed1e83692f8b85b6ece0e36de6a", "07ce67e40262e5edd2eeff2b7dea49a99f4330c0e0e9e9998209f95c0c6a1641", "01ade7da4a2a9ff578fd8fd442046854852aba080f8147969bd8ed0e19c602af"), ("2b6c34bd0d93fd37edca40383768ef7317247e58b3275924174b1f63b3256483", "07cf84926634de16403af9783ac5bed1fe66cf1dfcaa8b0a7f1194c6777803c4", "25fec49ec3b17048fb567666630e772225d6a0578ba0406e3f39e773ac18778a", "0653316287ffc693b872a0037287949fdc19e83562627ffb7a9eb02a7b46e5c7"), ("27894ff09e298bbd13c23d3e535526377cf845aec573d8d25f0b5c5503a942e7", "02cc920ed01189b41262f2b0b946f027d51dbc302103e544626e7cae90b55805", "28f14c12d7dd2dd4a23f5fc90dae4944f64596f362448694c707240fef98ea13", "1b9422a359554769dafa3e1727645465eea8d128f10c99cc0bb3b55434f7977c"), ("045414c3478f2b39903034c44a35877944eb4d42ad62f4eef6f00362ec52d8f1", "0df102658f7a12445eb7623eebbc437a1a56939299f24be696b2930b82836419", "140063889338416a172e61a1bf14e81b487c4b38d50d8f793c1f6c96fcf5616a", "2ab03bd28bc9bcbb2f1095e8783f3bb57e5df244a43e5d9ce6ea89bd7ebfa096"), ("27953ebf977ab4e06e0d760297b48befd293904c957ea3f74898feb0fcf03e7a", "1b02329d4e81b7507fc7962bc50066e065dbced6edc9b350513581d862083e2e", "2e25e21bb0934a17b7cc5002727258d26895dae47030696bb4bbbccdccb04820", "2f29d440b2abd8c489d6da698bb0bbb66fe0d179fe7a853e1ed70ce4eedb078d"), ("2af9c497632a39199d0f512b6e7a3da04c0eb7439b903a46845380a98caa5a5b", "0764cf4e17a8bcff6bb17bf344c48af5e0713e2bb86a1e8d93d1711906966222", "04308e9028ee4e6eaf0201c33a2979127badf531f205d192c46408157201aa29", "0a1d9ea621eafbdc01bb3bc3c7f6bd8c5b697d03d56fbe5b5aabfa8517500357"), ("0568cd768b61eeba7a98434c803654e39889794cca6b47832aab622f6c56e8e8", "16f1f1d8dda297d686896f616ae59a48192adb13140d75aa238b43c44f0d7bff", "15eb65597000035844c9fc4fcde9fec14595840a56ed2d7bd7fbc5a724a83696", "05e30b60b01ccbc9e4f2a48b306d9ceddf4a4d79c22ce0f5d10c3469518fbac3"), ("28c86d58062ed8b1c45ce2f8dea87866e5e7b983a398d4b8b9ca211826466e0e", "2e5dc9aa107f51023008d459ad94f82ec483be54bfc5533d4b5f79f9999bb32d", "2fdf4557c23d2550a3f0f859a0ac9c37e404712316a0bc050792080fa3037188", "0725d16e3d76bb20fed77389d2b80e31fc6dd54b53a4749f31201bc3b3662708"), ("220248903607192b076acf3cde679fdd1f200300100460565a2f02d188048635", "1b3c8e1cc074beda416161f12ea37435b4ffd7e0bcde2a1bb9741fb51c05f4cf", "03008c05d1c214bea52cec1871de773cc1daad77539b22d366c65e13244e7f1f", "1001f594c2a0b701f2b0e5d05d307703d1cb0354338f0b4db0ca5f6ab321a130"), ("15dab5cd06fd53efb4e0e2d22f04e196c2b0b5a8a5b59e85ec53d6287e3bc89b", "1f6fc8b1632d84f5178a7ccd1ccb35bec31e610d86db3d4735588b76ba987c3a", "16f324e769920c76124279526cc83162ef76619abe90afdb2749780ef463f89a", "052a27b9521236ea9f9ae1a626f9ad80c91635c47b7a25a622d3e791aeba593f"), ("0e7938f84169f534bfaebdad4f5a250941ccd7f6bfd83ea72e24f155dc248ce2", "24f98cc59cae015106b5d4abab5e28b959383fe3c8dbc2dda82b0b94b1d690e4", "1b8ad9a715ae6ea2262fa971026597b8edd12ec85655b964f194f8842eeb461e", "08be0170cab8f8f5768fb328bcb3876767a43c9ecc8ebd929b7870137d5e58b7"), ("1fc0bf103d397ad90fcf5d29371f19ecaf8048d624bad402a2002c9e7d70fb46", "148b61f1d732e9d231551c82a54f520e502e0b6ec14d23fb40b10e18a11d782d", "3043239f88514ac3274c03e760e8e6e74393606d381db92dc54657e919ef46e5", "21fc08076d9857eda01548ecdbc4d270de803c551d0c7e42ed0fa0089c1ebc6d"), ("274f92ba9cf8356e91fbbc881c6af0838ce49252f093ad96653d42a157fd1651", "2c8962c74ed53ada4307b8d436c1949bcd79c4bbdc49020815dae684c3d2afe8", "01d2a2411aea3700a5c8f64bab2689f95b7919199c49800facf05972528955da", "284962e87c449ad639e7c68527c0e7d134005fc9c93fc07d9e482a05b8485d7e"), ("01a3ce9a8921319575d541cc9d7bdea09a2fca2f29db0acd3b8c2f06a073378f", "1e5116e3d7f0bba8b951f921558490aff51732361b25acc15c36f563b019a9f5", "2789eb2a582723267ffb0349e9d69093d557864a1ee093b4358e80b837ee5dd5", "1447faa11b1d191cc0c8ebe1c2aa4e8eae1d4700fa279af9385d0d8d16334daf"), ("04827627320b4dca13803b7b965b326cb6ebb94451de9cedc7eee29577575f6d", "00538b0148c400a82bf80608ee5d98a4d9e4ca071731906928b551038b2a8284", "2a63a0165c14a5033cb00661a65a86137c6fa27912c85279325609e1bae55899", "1617dae94262a3f37178634194ad3fbf1be5d92fe6680fdffc3e8fc8e282ee77"), ("0293d64fcf0cac3da6a05cc661c8cdb4b20a2eb746e197f200d006384395e8b9", "256998d91fc91956f02eade63256e9acc1f8d7fdc0a5242e8c2b5ce2c5319e0c", "20cc0bf2f858d8395849cb22cc919c1b185e228eaa69b276dabc9346a1556c69", "0ffcfc97c85f70d76e6c75547d90b035baf6e13a817fbadd1beb68a1c0cca590"), ("2e684e56b0c345d3c9fb80d2b7a6d603d6841c657d4f7ec8bbee123d92d535ae", "03ee93236b3f40ff01771e4f1eb51d318af13f4994a49c3261a39047c2538576", "0e0442b6334e282ca48203aa0d4d9afef471eb687eb75edda26ddfa9d84099fb", "0868cf650949d37146b8859770c12214b5fc6542db6dc86ca28b6867a28a24a1"), ("2b0224c7618b78d480c5b3a8f916f557b189297b9434b067e5d44e1625eabe93", "097aae6923ba3dcefe259e6145d8fcf72546c1861a9866226011080034f9652a", "2ac8b2db7163b8f4eb00f0778fcb2ca0e0eb6a43a5ae30090ce4d013a2a9af02", "2170c9c93f6af01467aa4a7c2512d99d4253e41b06e77861d26ef20217c59548"), ("28046d7815113619d33aebe1be4d6183a07c1654690f92398532a45407b79f08", "2f5a81f55a2ab07fcfe09f539bb080f8949b7cc875ac7b2b72ef8befdf6aabcd", "03135f5bbcbc0aa4dd42dc1f03e701b1791178bb1b63d1aab5fa200d620123ad", "17501c7f309378f990e4196eb545c8c9edc97c66f3c612fd39aa4941c2d8f07a"), ("095ba0f8b3da904989ee35fd504d631e24c6d33afc1006f1cb33cd11cdd1b033", "1fac7c169486d445770fd0bf98db638c9fa1312a79572f59e323fa34bd2e5473", "177dadbc433e8cc5d1be19d46b59dfdedac09c8727077c3c624af17e6502e967", "1452b25fcc28f7f4a254b6da6151d2c8d4677a38572f74f02050a52c1eab3f28"), ("2925d1a59ba4349811554d088a83df82bd07cf5b9faeac19d52caa7c6f443539", "102a8713a195b01d9a166ab43620f7620e3fc0c8da276991adeebdaa02067ee4", "27f98f27886732b8376403596a7596d2eb30371b7b53539d0b4af4eec61d7d02", "17849fcf56c633514ae758f43918835ef8fddefd62c4dd830b196cb86f136b97"), ("1934bb3b3d26c43ceec04011d35707fa99c7e5547d189848288dae3f9d5de2aa", "292527d54d26913e1ae823b454d7eee364a9b292b3a33ec5608dbda952e500f2", "034860d8528c892216a404324d9c81befc17c1a18ce2a719490811a002024f49", "255ee8f6d6207e602ddd8914cf253600c6a1cca7972b1d7db49096e77c2e06cd"), ("157eb41635dcb19e27b6bea36a62c075a71d9bb7b2e8a0dfa87e25934621083a", "086623a793b418d64d6f17866d2593c1932beb9653f8f0ee6c7b65ff4ffd76ba", "0f5dfc24693f63c8b68ac87ba8810aa316fb030c2ab09772b355611a8346ab95", "24d53a119cba3e26e0c59dc7523fe41420e13c93c37234daf1c2a3fe41fcba04"), ("285425c256c95cec720a6cc88509af2933066a30bc45dafa4391386e8c11ed14", "1a480e79dfbfd974c1a965c9fb605b77d2e52f6b42d026e394356f785ec03d2d", "1855b52a65cc0cde5e9276bd38e42d88dca6acb9ee28b73aba871031f6124587", "1cf89dc2a20f49abc810c98fd54ba030517da57393dbc16fe76897d2565e581a"), ("2feab83e48fd15286898d6df07da320161b97863e07cce321471e137804f6459", "19f2ac3c7ff4f2d3f0a9bb941523f601095da90e12d649258b05732100a1b08f", "1b60b376fc73ef683c551eda5319ff402a176cbd679c8d28d1a9f83d4c158cf4", "183d6f169d10172c96db4a0cd429ce6941a7c1f439239120506d879eee39dac5"), ("256b7d875e5e1016ce2e4cfcc8026af78e4885160175c7e1da46649eed150ed8", "09e11283fdb4d785dc141ef3cc72ea9fbe6d9eda3e07e3339d5d79223d9621e1", "26e2c86bc701ac322024557380445cddbb20425e36cb5220840c9fbbc172c13e", "11cf6a5f8682bc2eebcf6633b0472efda7697021a580ded8bd94ed152b62147a"), ("223110f8ab3a4ec1d22ce696071adf85bb8ef653d32cc17a195c90272b6a9247", "21942f7e5f377eb5de36bde98bffb4e6007d878f41b0745a1920dfa462ad9c8a", "1f5275ebc7bcff9f86fa5948855b2f4c4dede2d304187865e30a3a8c96145d6f", "2d89f9a4781e4c3365fc6517f001f7e6f4086587b5ad76302bb36256354e1370"), ("168806b50ed88647ce95845f4c316714548c546e85ece8b13d54eb0114354c1e", "2f52e52a1fd78e7f652d3afe8db234af4b95bdf33f5ab9f664f470a728c8ab29", "169a1690de908351c30f6e87061a1994dac9e99a2339f36dd3760231d70e7a19", "29b1a1ab87466969a494b469b1557132b12d25ff484b55442a52d79540cec8da"), ("256e93e02e234fc34d2088c5ecd93cf7f7f0d7bbc7d95a6ce4f88b4f37c9541b", "1b8bcbc6bdc96e4c0b0cfd23001797fcb14b3a45da58265a059ed6a88dd11972", "14f192fa6b5a2c4e775773e6a8c5aeb3e2ca40c4e6aebcbb01c3c6bd80399ee8", "03a599f20f9cea3b5aa757eb3e7c713a1415d9f153613daf9e4c6ccd55616b73"), ("08e745a6f608e2289b1d2679edc1fa6377f3d6c30b74fd600507ab5c5a8aa911", "2da3f16771262d8870162968ec0d48ff21dfc11a29cc2e88f2ca8683878c02ea", "1a2f74bb142cb14077f3f2679c803eb8058451402dc70ca20475e9bab56ab512", "1d29a93995a6accdd32908b93d930696e6dafd851f658d1feb836b7e2f65bd07"), ("19c4e152136540d5cd29637fdbbda4a599b20b561da58454d7e742fb99cd2f4a", "06e39e300fe5ba2fca7d6932584b3b7bafddc26320b67f174f0507ce68674978", "146af567b25247a66b84ea66603052865fb5b6eb4632bc0d61921da5441f8929", "26416535fc4f9e41df0aa923b593cd1d88f37d1fdbc40e36fb929c58fa37471a"), ("054084fe4ffda73a20db4dcb073925675acc2908b5da65ba899a1515c2c3bf7e", "2d1bb8addd978d30119babacac6c18da9114fba7d5e6d5ef71c273577feb4c8c", "2530ad190a2627f6017093011ed1d8e9f797816c56d6b3f67a0cd0d0b657ea47", "0b3f8410973e803d0db37908e02d47fed5063735fa75fb8ec209c80e93007d79"), ("26be0ec6f77645aa8047754307e2ebf8e0666069fb7c58f5ac79ed45303a9cf1", "0863c90a0d4e35c2c09fce96e1d6a297cb22b48ffe8c6542b314569cb34c4015", "02342d18018f5a3aae748e289a1e5568cafb7a5151c5d23c6f9cdc1ab8f270b5", "1904a0a6d386b838afc89258d74984d7ba8e32567a23b857e5539352a3f81698"), ("2ad1b2b4792b3534fb6e8e13989bdaa6caa2ce5caafaba07901f5cdecccff90e", "2420402d47054734309b8b88b10a0140ab03e26e9b828b1e2f3ae35f92db8b08", "1f9873f86292e5113cfa4221e2ce56f6f4de09001f6b61c41d1a6f98722f5661", "16b9e82136868e63a49c5d8549e445f8dbb1fcd317b4331168d92140dfd0868e"), ("28efcef321a572899eca1d5ef2cd639219305cc0241e8beda8fef614d601fe5f", "2376b1543a08638bef8f769977c433a586acd038b9457c868cda43a66e987ea0", "292fac9520ba3eb16a37f11cf3836b3bca014a08fea6221c71bfd02caf5abe3f", "17375be35ef4b50d587393c2810a53a77cbfe1d9e7e3e740e22ccb71ef207d2d"), ("15b9b5125ee4526263d7ff007fdb565f1fa81743c1c031058428be320d2bd101", "2d11ec924a6ae81441eb18b93f2da18032e2c9bbd5070a0b1ceddcb3911e4b45", "07f525e79030e1529e44f18b10fa932043cc255ec8239aa64c8807535f39fd6b", "112b44b71ede6f5b30789e6e9f6b30ec2d4efa1d0f51945dc55e4498e02eca8b"), ("271d03adad34ff1ff43d485ba83efcaf83ee12a6a107f3a4e6cb57bbd6db5a82", "14d8ba6bcc17e851eeb30402e4512d953a28c3a38baae6fdb2607791150c0714", "091ee0305b76cb0f5f29dd1a773eb5ee3594e0a7ac3e8c17ecb8803af7c0c240", "1ef3a0006dc0e15a35c987dbbfa3108b1d68ec3c2820ebf490047040f3664b0d"), ("277f0bee279b4507e27c1a9eba5dd5462eb8560febf1ffede2afa51eb180a2b2", "19094c6dfcca8bc9f7f1422a40b643339a342259887101dfb3f2a0a8a1017956", "294a9445c0258c9bfb38b00e5a74a741bac7caecbb3c7623457f83d7ea8aec79", "1f931ae7d36985e8c60b3bbe4390172a2010bc669e5b79b4c09ca64ff10ce9ef"), ("28ff40451707ad92966ed83f72390a830a408dababd0e4b50ca2d5d86b73be0d", "21fdb224e44b4aaf3ce54811e4ff410a064cada1f964d33108a26d51ba7730cc", "18cb920ed7f4cdafd8cac3dc326df43504f4096479ae0d1e7b5f033e29ec2b76", "05f948470b9873642b45d17c9ede1b0d53fc91a289a9a74064e2e6d2ef133f7a"), ("016f4f99cc6d7c7c673018fc626072fb8953e0779d1e8320b2703746ced22c5d", "005f4d722f3329336a08c51a714057d73859eae23e87e9760223bb5cc9829d1c", "1116166a2f85a2c9f52f6570a6407e0fb52ade58c076e95adf4d193da35e5a4d", "17f900383074ac07e5c0e3f95584adcf04c06c619b95d781398c4dc7b9740e49"), ("28b83465a5f4f088f9444daf949a20d771ef671e6fd0909f4d56520b70d7791d", "262486a30fbd43ddf339ad65b3a2f9de144073b8ff8ad670bd2a8e8de8e42288", "1ddeb290362da24bce4186c0fdeb379e31994bd1718132a39d245c042000e6ef", "25e1c27f9ec3dd5f7a09304d40c02b0793e474ca62bd40172c91be78fb4951cd"), ("1c22176e4aa5fa08bb8dd78d5e2228ef45dbf975e577c6cbfe87e2272c840ad7", "09a28f3172362d8c1fb5764103815be08e7fc73f00cdc4652ffbd26ece802157", "0f38e5c2a35d2c4d6c874d93aae08b88f086fc155c2df4486dfd81701fb84e13", "1eb41c99a650b28a52674a28a034c7fa94a828ee783c50f10bdb82f684bb901e"), ("0c42c34d7640040a50096843fc03afa7fb079ef6c016f91286029d9327965153", "145ea15aab2dffdec4e865d0f29d5ca5b7ce27547ca184f01055d533f6df49be", "0cea53ecaf53f7be150041678a3e2cc8736090e7e24b4c6d4cd69e1b1fbf15d9", "2f7da8ea0f7df2be82b1cd1e56c78446eb7cdd7401fbb7bef22dded781b826b7"), ("2a52685d85f8dba0e7ed489ed4e2af111c17e15c592bb91e5be7b50478a4bb58", "2bd3a7d677500694bde689fb10743c411773420634a822d4d951c3209c82a1e7", "15169ca19e7b76a0e8f5419062e5555d8fbcdcb9de2a374bc43e0db420b75fdb", "192db45e462a98d1cb70ef95f939d029b6f0aa472487f0ede1b653e8efd3aced"), ("115ebbae02b35a8d9908d2c5348810993ea036a40f7fa83ce5ee150c3005fc22", "283f70b97fa9c90ddeea50cf882af8150e70d254ac1c0a8eb10a69e6c248efef", "1ced752b1ceb0ebaca47b022709c65bc6c5bf5b32508dd6ea3066982afdb233f", "0b351c006c2022f560acbc4c200a7ee531e4e95fc515ed9d7c6fdad228a5c002"), ("06fa30feddef263da9bcb7878d6fd34b59ddaabcfd235f0f5fcffc742ab278ce", "27120df4df92caee1a5b6f6df281ee1d975c1988f7557409153148b91f9bfdb9", "1a04b9c84c49ca7e51bea503c376b0dff71c6223bbe486686503c7eb78e95c07", "13d199f52717a210ab48fb7a33a5ddd66ffccc460f759f2b31a30db7c1239b56"), ("1bd9a31ccc31b62501eb86f6bb7df970e4255313da4ee626eeb20601e1797d4f", "19b841c16c179c328f6a74785c13136b30bfc9847fb2f01547e766d9f1a2e48a", "1ad4572a759ba55f99368c7a92155f37cfadc33c823205aab0fecff66dac6a48", "0db1aa486f6a619fc74d9422a0082acadfb89209bfc75df2ce308e50fc9d3b3d"), ("0371544fd7c572026936637c1f1446f6e828e18af3867cada258978dfa750443", "24e7a91ed25e26b497b3695f7a074e3b5e417019c10eceba4224a2f3444e3762", "1828b92c5a451efe8a9c5abbf4112dc2e5df6db4d5f4d30267a66177e7d9ad54", "1f4c45c15117acf36b49851579f92b76e76b8a54a1d640c662e80b76678a4396"), ("1642ef02418c51e37fafa60ee497de90757d050390638c8dcfa8d617b40f9b30", "2926e513b8a74135053049f129c2f7be7f52660a783a5b57fe1072694f720ac5", "02c043bec494e0bae27cc4be00dc26b23199e41e0cd288989f77ae18fc029a80", "0897bef63079d61ed97f9b1a496314e8df6f85d12cc503443dc71d66633b411e"), ("286fe07f4aea61a5f8aa27fc0719e8d93c637341494bb00a11ae657d97f2b984", "2717adac632248e254426f9c7ab351a88e4d8edf289d809ef2bcc8bb0908ce72", "05574917cac2b093021a85cb0975faef680667e1f10128431f4817c4bd9f6243", "18d5ba70b95bc17276608d015b17cdc61add3b1704557995c89c7ae63e2ce543"), ("1964d2589074ab74307edb62fb83fa67475dcc2bfb69312b7e8ee34f90f6fe35", "203415fd47ccbc406747b6d4076f48d53085d71423bf279c3ae065ce10574a20", "179da5d88f8954d32f59bf762566e1e74d9e783d7d6fb58e1f2f8b2c2e2bde76", "2c76a86d93ca5af09c7f22ec9651a4b152f0dd08287b11b1e4c74ae50ba99d6a"), ("1bc8f5a0e385c6d32867f5a60c84564cb33870f3ec0c6b46a632512238d54eac", "2acb231c699213f269f2577534b4c22f1e5e69426537c1e9f62fdd32af3246f4", "237d69cd51c6db7be7b926341de5ce82f44584e654f2b5fe25bd299ff06844d2", "1b7daf1d6efb341f4085e885d38f1140fa0e7fd3922e61a3bc646a5f2e4f22fc"), ("288792dd3e548bed02933eec2b70f67304405c3961834df4e59e7f30d0060958", "15b438d6d2202a0d37ca2376916e46842b6e3ac109d601c851e90825121a82d2", "2c328c57c5b2c08538574fbac6de4c463af753970e68f72485897d962fddb4fc", "24ec2d18d879636ec4a02130b4c178b384ed76118d39f31bff1c45c958da6f62"), ("28bdd68a6b8fff25e69ace95d16b8417ffdc98b851cdf652d15c2f59944a76f2", "1e2f4583cd5394cf959d5649975bc19a0f35a05613727e6734219b4499db63be", "18100e2e80a38556e2b7a973abcdc4cbb44ea69eb3581f143fdcfc69ca4046fc", "09e504503a36a9b7efc3883076ced4a27b354fc0fd4dbd82b116e0898b53522d"), ("1456ae88fb022ffc4bc75c91c4acf937a845913d6c81dc04ba258b3b4ef9e8d2", "1b55b02282033a6bbcc67948768bb2a04eea065c6102031d04608081a4a9a9b3", "0887f6296f2e1d5586539f3d0df678a7441641c24d8e043a7d9c131fabcf04e0", "0f481cfe8a0152194334de6c14fb6744f7fbd80a6fe9b35bf790a2ae88f25fae"), ("0e1811bb8411f8ecf0eb6f6daf8bb4b458845d50d94ab7e932795c900504701d", "064f32169245c2633df773a810254aff6ebe8d019ca299fd9cf5e0eea7727f06", "0e3abf584447df903a7070c53a80821f4c5ee3e8813e207351b82841551a43b5", "29955c47aec782a57d906df38af153c8a5fcff5123b2f1b2a00afefdde794e4f"), ("2887b53c932809d6f6d7e147f4676b70fd4fd3894b34e87a8849509300f49d91", "022b06221c7b8c2a7b3e5458cb3872aeded0046d6aedf86815f153bdb4d908c1", "0cdcbd77ebcaeaa52db1ffefee94cff8629205f34d9106842863d10a92d41386", "1f721365da0580a2e8baabc664eeab124bdcd908d6921ad6556551617b3058c7"), ("27aaaa1bacd25d3ad7b54952c95eed033d47dc3ebab43228b6f3652a792fc441", "05bab59f6729ce35cd5fb8d5f0e83d95e8ba3b69ff941b5039b218b658b417a3", "2bd78049fa551753d4671bd8eb1e468e7765009e26c72ad50618f2252675b42b", "17ff1452c0f1e2e1af94cf7dd2751170dbfc84267f88caec861e8084ed52ce69"), ("1fd8bdc3d29eeb3bb72f39c66e7d9ff77449ad0dce805c28681a4838301914f3", "1b0083ba4330e5a667f741a3cf7ad63f713077f56c6647760ca897157f8fafed", "025705b0f749e3f5c6af6fec0fb8dd470a1c960ca26d96d4bfeb6ba901b8be3d", "21705667d6dca87123ffa207fcb3a49c429e6f48e171615f6a22503d3ee0ade2"), ("1d3c0b6c563a0e07c45dc61d1a34b6b25bc841180e99b5df88b9d4c1bb0626c8", "0be468da7401026a93e0f3e7469f24871795f7b5f7c53a8c378904ebd0a271e2", "0a603ca52b8937d6bf82ee22a3a8ca8d4a274e0578316a7f08eb4edbe8beb892", "04f14698a17e9ea32bc7074eeffdd6a6d15b53b3cffd1ae9a594967244f30042"), ("1b0c6501087e56b2617cccc36213e76d0ee4a8335abcc51e9568873b78915fa9", "0e39585e4e4ea375a331819062b890a7aee9c8132974ad8cda874fddc0051842", "1980d0618a7ea26629b7b18086a66fe1572717e168a3d9160d92f2f55f1be6d7", "031fceb8a641827bb08edb72af941f80492413e20a3fe04581f2be31b6d269fb"), ("241109685b8928d9b6250b84c933f6acc123128ed0eec6decac1b56f27153b98", "0c7085753c01461306c2686df029a3823ea5227b48dfb64edb0f572b86ba44d6", "196268f2855dd64d7e79bb329c07a15ad05e9d5c3f772e5bfbcfe3297d2c26da", "252040dffe3cbe89eabc2dcf7ad7ee25e754cc219449d9ceacfddb717fae72e6"), ("1716b0e4333d25048db8693d96336aeff38429c3d8957bc9fdf59d24cef5ce66", "04e8283baff15ef90fde386781e5e0999d4777a45bf4bced09ee7bccd2254e63", "0c2bb6b9f113c3dca2b821d3e783172bfec7037f0952556ee71f950d928af653", "00c3cb6c4c38539c00a40cea7ca85c98a23e39d951351b2a209fb9f00f4fbc4e"), ("16749e1dca1d74a56cd81050c5f0150e706751aedd9f278c084a008b3c0a5218", "215692ffb3926b0fa38ceed37cda08a199c3724b51212a5ab37c9029b31be81d", "2e1c3293a6e923ed8d5a2a4c8e70f1562664b79bf905c66f28b5c97b7d29fa5c", "2976af9dc595b850247e152be1cea12baa3c7578b2444e1257e9aded5d7bf0e9"), ("02b0fd2026d48318055cf52f74c9ce4d5d5eba4f1ac1b9f02c151199cec8f5ba", "0218234883444981a88d23a78bf30e375042b669308aa415b8d4d9acc9007460", "16f72037c8513cad0d357052aeeee62f5b4c7f3a41b21d6d5d30869fc7d7fda2", "26770cf566302ee4f0f9ff3b435a99b73529dcb0f1d04bd469f528f472b8b37a"), ("0c8808baaa44021df1fc96d288abe6bcb26da4f99697fde13bedc41cc1dbba5f", "0234b78f56879952784fa452985cf6e1635174e57ec9bbff88db043056a680fb", "1f8b5eb60dac8d306dcd4c559d17602ce9dd32555e22fc8b2e5ee89618f32436", "1fc9e3d000e2395543227e9f2d81e145da3b667c74386885f79cc7da06db84f0"), ("110961f9e96085e44abdd128bc0cb76eb03b8868f4676b73bbce67ebc3599c75", "0433ece31c35b2b69347d651f522f0637f354d9201d44de465aafcf8c18acf47", "185c256bc2f5dff1317f869f1918127908359c8a8066f367f40a2beebf8e9432", "1ee0748d2539926717df05c1ca600eb562238aac2f4a3162a54211f20c8a892a"), ("2c8510f92f92bcc106fb9ddc8df8efa0bb38f6fbf3ff4093c23e738ccf743143", "04c6b210c51fd45a4d61911a91cc10b489b53f9d98f95fd9ebb5a3fd87d0cff7", "20b7dc36d9532cfeb9fd54d5ff5a6004619da0d8d49e269e9449bc07aef7cf30", "206505301a2ace1744d22b7a2901eba6c4e5727073cd021c52e2e1c7c0b8f063"), ("1a7297d6826a654ab2124cdc3ba0b2e79c4258762a8c30c214a60635a4dd8fd7", "209b9d9f5fd13ed41595b414cad28cbb18ae6d542949d54194b12ec6f397efbe", "0e52db61fb139750f0dec9fa0c63e35bc07ad554d1a231e481fb5fb026b491f7", "19c9677e98ff61a43eef74b1b440feb80590558ccfd0fd56813c4b6244e41e49"), ("069b8289567b3e72bab9e05a224956f3a01488d1613115af463b7b12ec53caae", "27f2278f4fb5bdb192db6c6936187e66a742693abc8e2cebb0c3c40dca3f66c8", "215b7402d57b0725420717f176f67a1e293cbaf1b14eaac6302558861a132817", "2707f1fbf669b71127202acceb6e4388bee2da0789623b9051d69a65c4db93c5"), ("27698ac5ccdbf1d2d056d558e5da9467ef1e42619797766aa8ab134b91a1da60", "2431e5aaa97eec1c996a07fe3b8bcd70e591c64fe38a8651aa6ac6c6dbb9e8f7", "1c70885c4ab7820ac172209b839d6f91c0ff7c697af57ecf577a7d2cecdffb4b", "305c53bedfcb5c7c53503084cd28395e587d404b2b304a6620c0e383f92ec4ea"), ("00f96e082267ce23e9203783ed02e4278e6bc425c259bca714e3246570ce5006", "2be81b53c0c9404c8042031bce1b61c27991433482871916e256c14d8c18eaf3", "1eb74fa9597655157642ecc152a86dafe12647b3619217741497139b07a7855b", "1c73cbb54fcb94a978aa89d9c0ee87c7d1d5c3eaab533099062467a7dd9b765d"), ("1556f5d0e4a7cf69721eaa08729f2165652bcfa75ce15326bac32ebdcff82ecc", "06c0aa1c777fd7c6ce42b4b461de839734cde77868646571f4c52a16716fefdb", "2cca1f354728a0004af7d7540c29d80682e62b8f27c2d2363a0b4f2251659b67", "23eb91c1ee9fcdace861631c63ea843541c62d02fae7b331beec037838ac352f"), ("03791dfdc3beb7d93bdd4c69ee17f2ee81d48edda6339b9c3dd4a27a81231cfc", "17e6d15740c353e4a737039d4beacc7a34f996257a09581dc056df0e423a4b51", "10212fab387e8ab6c93c1930ad2cfaa76601fd9d8b1c45e75edec6ede5ed1f26", "0e89da5d6da5196a6c874d660994eebadcb88149b9608b4d93c5dda8a1203968"), ("20f8bf3c72cd05e1d99974f416d6bfa6bb95200d2a479fbcef1d0ca5a50baec5", "2e7c07f1f3046e204987b977ebcdce31186e21325f434134732c1eb359a004a5", "02052e80691cc5b802e21c3286c8719a0b0e26da923a1dd578207fe24af96a20", "1d111d3ea091cd56313cd9b8be41f0af6462a6aba9e020cd3ba5862d9ebc288a"), ("14d90ab108eb0f96c66d2448f0c4c477564689f2aed79c4f73bd3aec0d318443", "1b8cbe3a502ab851be0b60e53cee889d3f6d6d15718fcdb54635a6029c39ab4b", "033113d91bdc71f80e5c7384beab0fd8568ef17b57c57ca84b30a7d099276731", "043ce0012aa8bfec98de342db7dbd40a1d9d81f94af7a296c954c77f7a03469f"), ("00692902700f5faf2b70dd73b30a242b5c0ed1898d6e8294415584c706aeef0b", "1aa72aa87e061cdcb5ac1a1c93ad2da5cdbabe587a7dff4f50085edecfbe6b33", "0c54cdd3581ced4faadca7c5ef552c8f8fdf0cea242dc1a7cbc6c63ad2ec1dcc", "0b9a184fe33941a6f0a62fa7ceea0091b0e1ffce0f0ce7fb76715b55d20fae11"), ("0458bd6ff747006aab5dab86e4c0204bd2fb973e24aa4179332dec6ad0f3576e", "108d8a40716e3b2a7af0a057702e41d93270854720effa6a8bbcf736be9479c3", "0b36b95d5d0436a9adf2c96a20b611aacc39e1c5f5e5df3a5d30fae0d4b7b1e0", "04648cab36f145ab9731c7c89d460a1bda7f2f8938d1fde65bdf814e88fa192e"), ("15fd8045277b47847f0994e500f2459e258783fef2881e0f12f4feda1ea4084e", "03641cc0789ace0a75c35f2677ef121e7b17f254f0b518331ddaa6e52dcbb4fa", "0fcc0b78adcc9356f9eac3f4b73c77f2875b804e876e80d494c38b3eb82c5ed8", "1dce116f073a855e065b8f1e0430ac3d273deb165ded23c6290d653de6fcb8b5"), ("0b19077a5fac59ed65e94ac14b5310c510193f2381e6666ed1e9bbdc3760c834", "16f2f39f6383bc12c6062919bd8bf5e086305780a1d7c8ece3f3e565759dc7a0", "00144f2355b4154f40945c32977c8f9688f5ba773839e6e77539556185f5e01c", "0c91203c58cbaf66129e39e08a71ae205d11cf94bcaf92b1991cd57f63fc868b"), ("0c5d973b6448a3b48a1a15823f56ae0d12d1cf8cbe1fe3fa70f00d80c82e4e38", "215a259c0887f3bd3f60eeb046a73106eed8375348887eac1bf85647b01b6c2e", "2cde64402f0343eb1642010f8d0988d241b9055423cf10fa0ccb15d408c94cd2", "05f5ee793e7fe7f7eba88bfffba582d48bc57400be7f5994cd59a4851feb9cc2"), ("1830c89cbc82673b25f261821a84f7ce7ae0124121070796b6ab4fcb0e318802", "103d04d7185b16bf12acb39ea11c1766e6c4ab73e22337eef15b5121328f8cc3", "0209bfe6a6c0b3dc90680ec4c3412c1b3b7381eb2630d2bf15755e24a457909e", "0cada50cd175f437a730149c3d376bb2fe318cb11dfbdeb6d8e20b5fbe9b6b95"), ("0addd63c069fa80917fcf1531203bca23fe35adc33a6eee94713f59e07c2f13f", "1c53d7ea3e69a64b098aabbff1460d5be2af721727f43beade78bc4cdd8946e3", "2055011ef7f1c6b990027c4f6f943269eb5f7d075334976ea8c89ec707a55122", "1cfebb1a6c94c3785d8ae79aa4ce6705d7b9e640d1235ed60f000e1807c81ad5"), ("24e0ada99e3c5c566dfae5cc633c6111850d4035ca09feacedaceff7a070e95f", "10760796a7c8ec733b82062b18cfc5973332ec76506b0271b557064b9819ecfc", "21777596d19dcdf401e380bc103fd255998c7cd7203de88df3e5b97e554ea024", "00315869bbfa12ae8bfb5bac97309039f88e8bce9bd49ec1a3e72bbe13bdb79a"), ("208f0f8c527ef783fb76c894c87da33c5138b2b84bd6f6f0b807d6ebe16c8dae", "2e56acab314027645fa06590184c90d5d7e2dffe8d01850d39cffd384b242767", "1163ab939ac86762c89448cc0d7289a1db304974c4eabb3a40bb77a32e174335", "2a7cb7d88db3532fe3dd5044e33e5dd06aaf15affccac6b4a4ac475d8b98bac3"), ("0cc69e9c054bdd482284601c19ca0603ca12514f7afa2fceda88ec20d72ec457", "1690c92d965498c10ad04c013121ccdfe95431be04b4233cbe88075e78e9061f", "1b366715e09a7a41b6bdbabdf65935651809d9761a4c79f4344b213eaff98260", "2462a8139676956bc4e3066a08f15eb7aea4c1014f90fabd386ce184684beba5"), ("119d861cae444ca0ae5e954fe758170ed1981e69fe2f3a4a7650d592e68ba619", "275525533a3be1ab72357cd87dad4502400e4fdd754ad2245299bde8713c3593", "0d0197dc11fac4c15d69d617c7dec7620096692b0fd79777724089f9537d5007", "1f90cf7944301888abd1ab25bed34d44daf425e07d6fdbf263a70c9f96ce0dfe"), ("2edb8fcafa0c0497e8ef59163ebad4a761b3cf113bbe3a9c9d88cff7814a89bd", "2aefff27d933dba6862d9ded3309e4855f1688411e349074e6d8d600ca2016ee", "28f38bdc854343c805422f09ee7fa9ce189889c28f056f73939c58b8305498fd", "09ee048df104e62a280e9ea17aff20535e84ddf7618252aaa45b12ea86f0243a"), ("085e92eb4b6ff8ebd8079f909e39be2408765da6d1d1f056a5afd1ca6647d74c", "2b8ecdf0d5f4ed96ea51b30c5e065b2bef5efc685bfce605fc4b040a437e6883", "1aaab102f4931b64f4820e367019fcd79cae840ef9b5c067405bb84d496ed07a", "16ccad1fcdcd953e42ab4a32bd99b104fbcae9859e4e5dd7814cd127b4191c0b"), ("03e588f85d3ebdd7cd881d1fd9c5cdc8423cc3e55960bcec427eaa232ac5f4ec", "13c9c3a4971e55ba3a748176f06992b5a3c9c4b7eaca32d99ee9e52a0ef09e69", "1686dba5385d4986644600dccdffd5d88465d8b0a2dded41dd8640b6e6878073", "2756cecb201032e3499e5121b54ad296d0624ebc9e6b9515e67aa79acfb8bf9b"), ("26f2a5764491c0e4f234e6f1056d2d02ff1d23e8f6d5de571fcc659f81acec1b", "136e81091ffbdcbacab512225f5cecdba18a190f23283fb99e0506b2798bfc9d", "0a326a0e82c2e8e47abdb5bca0649df2b7801315857595497db620e9cd64ee08", "14b307ff8781e959e042df160214c52aa9a652c2b7891738a784808c8395010a"), ("1c1a67ffdf9e734ffe3603a2ff1dfe2cf3f507077f8237593c4f0d6fdf73b0b0", "1eaf9cfa0141572e7e756391b1de0ab8b40356763d9a962cc6debf485efa35bb", "150fdbe1bf2ef8b200488b83fbaf11c67112c7a561f0426b2fae85adedfcffdc", "2b07a74277df9d944d14ffd96b6023ab39a777b9cbcb6a6f121239852b92f3fa"), ("2221051441b9d03d80ee838763dce03a9a38bfd2797cf804e865aa45058d0fd7", "1bc87d1fa77b564822650183b540aa04ed3842a9474c44082a4c91bb126605db", "0c4cc83abb18f65a55837fa9b6dc549f18692d233924b73d29660caa06fa1991", "0cdb94cd85450a650f5091be7bbf88ccd2d029c58f750d45ac5e20c0482f901a"), ("0d26a20ea2128e82a5b2be4c36c3cf4e918904133c96fb9806a7baeb28c6a405", "271634e49ed369139be8b7ff4ac02de1ba10a9cd9f524fedf7d8376540ab1709", "1289ee25de58cdca912e456f9fabc1693a10877eea9380cf08c6ab24f310eef3", "251eb37eb8ef5454873bc5533b823577563a71e85f3e40efe451fd65ad0fe407"), ("13f443f3537e30c1e5abfbb0d722f79645169188094a9e04679ff3dbb2a69abc", "10b7911ab70cbfe1fb6b8932cfb24830a415e02a2a8e2a2c4a62fcc3f8be6d6a", "07f971ef35501d83500eaf028ff7a2d7b6280572665bcda71f1769bf1ec57d32", "297b2c651c448d52805da4884a25ccc1d55a806bb803268554d223b6abff2250"), ("0b8cbabfc21f844565d6f90b3d821de664c35e02c6dd846799f3976b1e40d6f1", "0c71d772cb224d5e1c733dba810117c883b47e576f7f3148f2dbe892262f0b82", "1152a3d5d5fba3634fcc17bc6455af6861b0183c75865a1122029e7a09f15dc5", "1f5532ff89be1a67734f8a0f0d186c80716a1f2fc3e6ed53e3f806b682800a3d"), ("0c0ebabb021f963b6c89abd240c03c6186076e4d08c675cd09ce1532a2841fdc", "2a683ee90c00b3bb13ff99adecc7d1463ab9ad49ab06cbe7df5d8dcf5deca633", "1752711c03e83d788c1a7b12d8c8c8402518b979042ffaf595dc59a82423522e", "2c1b36199ac15414f91d1574b5112d521641dd7daf73be356b8b01351b573df6"), ("0b9668568e992fd34e918d80ecd3ab9daed23fd3d13150cbb10ee018e1eaeae9", "17c98047171b4ebc138428edd18f34b9f0ce079ea123378f17266f0aecbc4dd8", "1307978b1f84d48f7e5820f11cd7d9a0f175955555d1ba5e1c93f5c61b37d858", "1258adf3855fdc5ad47822c66d6ca923034ba03f7c9270ae1c2adf201858d9ea"), ("20d33c52c6a8ed350865e1b14ec72a9a2f56bfc3778d44084abf106ed329ad60", "20e1b62fd8ce45304ebee90fbaf40e919777cbb03b04c7b7075e897f558dc7b3", "12a2b85899e0aecf300a4b4ca80e987fbf602a03528300834cdcf3c746e3c036", "225da1ff78468eaccf51a545485c25e220eb1dc1ecf2de203f4bef066135c5cd"), ("1df844f744ae96851fba170c91c5ca55d714b2e6e2fcbe40165cc9b63655ddbe", "193d55d6ff51f01d3f187d595ecd4ec15aa5337fc7eedaf739bfd1e10cab62da", "2c06bcadddd473b075ebcf0f50c3897c77ac08be49044f5b61692b491de14d5f", "1fb5b725cd82f38654b9500042780015d0af2bc217130fbe1bf4d808b302d9cb"), ("20da8e15fa8096a670a8347c43a6260ffc6757105c9ee0e75d2f87b905aeb93a", "0eed1094b7e3c74bbe4543576fcc08ba9de48463558ecad4754438ef16868612", "173f348e578ec7ecdce31118865e8b761a8dca02ebe5b1896c40b0fa2b3b055f", "268e87e0a6392e3f6452b447d089f28d81d7dee250a5ad8ca626c70e4ea30425"), ("0b46795eb70d82ab2e459bf88aa0b2ec3016dcca4097418773b07abeb9017048", "2195dc97f542afd60e088822c2581824320aeda5fff96c7364c29c38fbab65ba", "1fc90ff292cc7d28142be666d3e0a25fdb290e238c6df329feee61427ddf8d48", "1b41d4d62347a0a57d6a346fa90365b3db409ef41b3aec76bb6fc00a0a98fc8c"), ("0263ee07115871b10d6ce7b8d06651f1a4cd11b52ec10ee689956827d20365bf", "233e91a8c5a73ff98617f94d23ca9717041131b70f4dd70846ea750de5a5be67", "00c339b2841cb4d71ce70cc2e0c31a716dd7bc6527263971e1060c84100ae484", "3034f8946a103956e52d08d0e8f1581740d044670fd41c2fe5b36ce4f1f016f4"), ("1f744b8581dd8af129eabcfcbc7640e8525ad17867ed8054286873eb835b5407", "07694ca4a922427a9cb1ef3c53e9c5425a686785783229fee28ff73bc3e78203", "0731530ea7d562c3dd7abff85e6a1bfed5caee771230aa8a70c977b7b3be4b2b", "2c27e56941d76cb6677b8dd2989c3bbf8614251f4ec859e1c50fabcbc06fcdad"), ("0d464e4b1346b74a1299cab3f98fb66ef838a47c522d49ec3614b0b4e897f3ff", "131cafb5b8a17b82ab52053b6176bf163208ffb4d757d609a9a204751fb1263d", "130a2e8d0c5e905f377b2939ee35c3c4477b81be52c2b57eedd206709f533784", "184e01eb2175317264d44ef35c9fbe199d1f267f679b1cac495889ea93b6fca2"), ("0b2b5de96a7b0f985cc6d0600d31a091d2bab6cfe5f9c49a2d3911548f8029d7", "1670e47b428c6a6edb373df36549c6a858f639ffb072f93ac303a75757743186", "221b3297e871c492202224b767e0ede7917b20c03b29ec1b79e415171f03711f", "043396329094c71bff289443f6af413005630a2a6ef48b4601202d853547aa91"), ("0e3ee943552bdbb1dfdab8ab9de433a7ae5c306a984f53f3386d64e432d26267", "282c1ee57cf4cdd6e1c4118a746293d67f7f49229b95870737051e68ffddc710", "051a5bd89d0110153aa657bee4505579028ccd146c3e50587796f460aac43586", "16885be76079728c4bc939d0cd10db16050e3bed59f7d020a701d86256af49c9"), ("22304c46e9d4a449b4ecc8c7aff436ae9f9621207ae629343e3aacaa95ba1816", "06b015b993efdb4446484cbc5004c06654e08d9f0221161fa3c15d2ef470bc98", "15bbf98db55d9e8eb2ae7db6448746a8bd52733e18415faa9f1bbd872b778da1", "1120b62e342008b74792e47f4d7b89337021bb6188ff7b1a4400d90c88d4c254"), ("2a843f269501fe0f4bce75610534e0540001f96b087927e4946e734b2f2437e6", "08f3f1ac2865595fe10cc6904bdfdecb4c634e3a43ea4553badf17b8bf112f50", "03919db7333f52eeb7cd5ceab96a5b9807d1a5daf87cee770815e3b9d8cd5a0d", "2266511e7e0658ef9a8f43b97ef966947fcf996d3692c3fed26451841a493ca9"), ("026dfe1bc6f28779a031e3612a018e000901747cde06f4f152515aa3b98f179e", "1ca78f4615dedf5049147a57ad737c63241e3ff7c517dde27d21bfb88c2b0f47", "2527693fcf3a6a320d43c0a309d38150ef674176bc08aba238aa0be9590b2ba3", "2074f3ac6993c5b577db1f5b1e4dc3751e2c93ef05a7319287017f33058f3c42"), ("252f8c64080dd35b055666204b80e077ed10e68d375c568b03c14e9d06b55dea", "035074b4e09a6d85e2a7e21e2f995f9a2fb083aab93615f67f3df22e0b0de13f", "117decc634898a68134120609c9042cf0384e096985f3f406407ad37d02d74db", "14968c3a84d60fe4303e36f0abb2f87126ef2af791807df992437eef740de062"), ("034292d9cfca3e09cacf9ba5cdcb8a1c013c0dff513e93cec90cabc9395d3d0a", "0bcce5a223c7550e804bcee4875529702eda3faf4e0600981f5dee17164c727a", "26fe32a8fd0c3a5b914559365f4c3e307abf98a996e98028da378361d1a2728c", "138ebc102029698a1ea79ac1d9e54428b6abd70500e36bbf2a30978602a89e29"), ("1fe4fc3791aaa9641a14b871c11c4178ba47e29a25aa000b77ea1c116e8d1084", "1db4e3830efcff18e50a4108987b050eb7646dc146c8b2c8632a4a109d328d15", "056f1871ea8a99b16619fe1547f176a3874a437a08ad88ecac93b918fbb7a371", "021782da75cdcefdcb493b05a029065496a56bae9bae54ce64b89d52bbed9e57"), ("2ddc3460471c63e5103c1890ba3fa95ad9d5b21d6d5433901f5acd606c972e9f", "2ca537917d19345cb97a92466c4dbf95a1985aa33fb42ca220384af66f9b97ff", "0beb685cc9c47c445571d008e8906e1f63cf5c12b425c4ee55ed689bd700581b", "0e9b6ace10d42fe3bde8275abe1a95bc9c5e8d24041676f03053ff82f39d2e29"), ("1f4a212a4cf844f0e4d93962991baea2c1defef6b5258e0b82bcde4fcd564ab0", "035d0f351fd56ffd1328ba9173ee5155336d6fa540c60f85f6d05ade31c8e2ba", "07804196d0140df9ff0dc4523b9ee3635bbdf4161b8ff8b95224eca3245079f6", "2f06725698f1a35eb55e4ece944b79069a3828ee36e2f5c760db5db4c7dceb85"), ("19d0eb7aed78e39bbf1a989a83d84070dc1b091385053525c6ca7a55d1a12957", "02b0edd101e95de31173e1ff48d7965fa5f9daafca67a2f819dfb50fbf1244aa", "2a4f6265ab4b3785830080c14492f44d3cd775cbb3279bdacfeba276256e97ac", "304dfa3e6f40b228fb95831637af2d379633ce582e3b2eb3d6f2f4d27a2af7cb"), ("2a241bc348181bbef112578edfd5e0db15af035c4441caec45a22dffbffe8e8f", "18e117597f3276347993ae5e1503fd39631991c95e89e592d6335e0be4c9f066", "24c8ab78075b4b214415cadfc11fb95c817cea2ee98e48b2176b47e5bb54dd3d", "000a0d5a2aaee53d5ec14b97658e64b62d050482c9f51195f7ddc12a8e2f2667"), ("07c5b8ec57d95886633b7aa07dced499f017d85c0707eee5c88aa1e0d4420965", "20661717e6e6ddd09a92e6585a06cbe7cc51b1f41d35c567dbf07e0bc9fc0cf0", "12762773f99fd08794f1e312a82948405933dd0d28d58ba3f431e0c6b6c84137", "145245c87ece88c50c4b141770dbd4579125219064cb2257e72b260c4a261fca"), ("2c1970072bd4b102610b227e764d7acdc2512f110a768ab05521fa212dfc43ad", "04554c9ff8c549c320e201aa004d42c7e1263d11ad8cd31323f6520fb67d7215", "0d68de107eb364bad8ee3bd71940f378afa08d3923a08a855479f3e425bec5b2", "01b19c252546da2f607369d692754b30404e83cda37ef1667ee8fc8d82d1affe"), ("288f596f525e5a4fd6b22c30af2f5f5e4086793538241b6531517eab0840e61a", "1e60c7b208188e10e47b24d64ed180fec0590511fc941f00e311b47f3b1d5d71", "1ef7305b68fd8c806547d00d73c414147e15a7a0284582542dca93d891f1a9a2", "07d9bbeb99b47b638602a9baad12f33682fe62b1fd34ae655dfa1131c0cfa9c0"), ("08e7053a106bcda72d5c7a641152d7ec830fde48008f8cdaa2e3f9056eef4929", "1ebbceb151fc00a58f95c0991f659850ff137664bf7d1f839bcc9e9aef444ad5", "0caaf0deb0a5bf67b3579fe31491c7372d66e7af2c6c46235f0de6d50836d387", "2d3493f2be3363df2311c795c4c40f935c9569a6438d063ee07e9ea0be61fac7"), ("0c7539dad8585f4a9467cd5f0fd30d0bc5e6c1ed95ac10bd3f27f676ce4af217", "0cd6af98f44e7475e02e0e7f536438707eccc2c8eceb36d9d223e178e6ceb625", "0acb90107dea9566715ea85e2e0c93a497d887f274c6fc1717aec5d1b475fd4c", "2eb38fabaf52b8c75dccc3287b6940c1c182919ff07956adcaeffeb125ae75d9"), ("1dab21be1e7de92412b3ed07392ffd3c69f75ed3871059849fa71649c26d3d94", "16708418fad178aedeee03bc1a10cf162aae70fe8790c42f8f07ded02c8895bb", "24f488bdd394b281ccebdbd34244d7c983eb2e02ebc739cfd8cae06b462c8906", "16766b803eec249ec43ad8cbcae9cb50d39b89f37e45fa1311a6822929d1ec90"), ("06cd9b4e8b5a9f1d963c5b5f7982e396d247cf36c5bac15fd91b05da1afa248a", "01a689e4904081c6d78709aaec630f25886d8b2c3f4179c7edbe2865373e0b02", "1f66d9c1dc9572378c2455a36ca6fa168698462f8f5eec08463518ad4caa982d", "1f77df8ddc181f723a7d060e7bff95d61a2097c6f9ca2308ee18aefaf716f8d3"), ("0ca031f66f4a01147b699f6935f035b2ef19da4fc2cc5312ad8c10f8845edddc", "237c8d5b407ef3f7f9aae3a8848d4ca7d75c2c2e7c8fd6e77d374b2a4f445cb3", "161a7aaec08ba12161b5050ebeacdbe6b2fa719920e5443ffc3f7d381a2c57bd", "2d4c875060b11dc1f111510362ee816cca1cd25fdb00254ff990cfaadcf83818"), ("053da2beea265095c752e7699fb603beb6bb7e988dbdd76f58c3052d665e054c", "057e6aefaf78f54caa34bd220bdffc2da1ca0f813a79787805439bf169134471", "06e860bd1a55bc91d679d9baf2cb60184016a134eeffea3a6f41bfd3561aba78", "1aa004bba729b8c0e11d3515682389cac688f2fd3f2c33b3d5cc1503d91d3d4d"), ("061e563583dec93978bdaf13274918257ab80bdd102eb8a6cfb074d0c89d6955", "0c0c5e7a9544eab91c4c74a26fb21ca2d5a762947e2fc25f57b2772ca00f9968", "25b59bccfd2740852bec538680350796880689f3ed83bd2b0ee033f9d90f25fc", "276be0920ce81b1dfcbcb9dbae64d32a62028a3ff82419b8220d913d1ca4f56a"), ("04963dc8713be846e8b5d1b2817a8cf2e3d182a66b8112dec13712ec8931c79e", "031836fb9ce12852686a1955c4d148612f88a4e54ef21781f63eac1e11e92d6d", "00f683ebed0e36a04a1ec2e4800f34ba3e0fad57ccf36c3bdf32aaca6eafc09c", "1f6770b901636b52bb7ccf2ba8aebf33134aaee0d796911d16bccdbd3da28780"), ("2cb658cf5d89d77c47dc21f463a67a144cf434b0732ea48118d3c37e16794fd3", "2d64c641945114eaf0c335550b60cbb27aad8d130d86576cbccf09c98b52cf9c", "1ae1eb199de1d9c2759b47f6b83a607703fa8b978823426cf8b6bad1076075cf", "03e1b51001b225d7db1f7cc94386b786dc56f240490904d01a6699dc38cd1da9"), ("26d180b465f6a95b0b6ae95f6421222eb2de33097c76821ea368840f627901ff", "127ade8f69b27a32f90b47624adbce508c7e8885dbcce24a249fc9a5eafb493d", "09f4539e48bcdbcb0fa9a5ce50d7049854d3fe2ad97501e8f5b74f962a1ffe4c", "23abcb7019329ecbd58fdb30029d038c1ae41ac54e1ab0cfa1b1f19985ed9860"), ("25233fa6ddf28d14291f0255a2224d542c0291825a15ea385ad30f98a7a4e51c", "2c1465c3901f7ae12a44508def6c48231c4dfaa07a6d4d45860e61975ea08971", "2ec6709eea811e201026f4e762ebbc826c3506de636cd2a3802bc376f745957a", "2e06f897c79fc7609fe0b310a1be7c4b1cafc93f6fa9a8cbd25c4b6f9d4ba54c"), ("17eabb28d5535016c0f7ee5c91642581cdfc9238316abe7f0ef90e0aadb87e21", "0904c56e33e9e5d314eddd4d2ea6f68ddf03320f6485d55dd21841c345302a3d", "1eb7b56bb806ab3aefaf73f7b297ec78931c53b69f67b4857015e3899164c08d", "20a2f32ce731c7385b2b7e8b5588ff2ff92b237739cd4f474d01591d1a35a69f"), ("1ce00cbf231a0c694acaed78e2d139264314daee83639d274a1bdbcbd83bfd98", "1748562628f378632d9b75a176e349f268e51be1a4279154c83c42a043f58c85", "19d4162884aa861b1689d06620e277da718dd6b2ca18451555844d19b6bea21d", "2c17ea85000200a60d755f5078dd52e70e8a702c877844d1f1cbf1109aabba5a"), ("2576ad48d2ed11216c555d27b6aa11ec865f0fc5db6851895c54d51d4e1dc087", "28b56a598e1750edd961eed9cd2b1cbd72ed6937951a440c7a7e0d4c85f2e1b1", "0514d65c205511eb032c972fc924053af97c53d6d7bce02b88aa2425b1ab580e", "226d364b513103efe90aadddaf2453ac76ce9397dfc248fe646401f30d86ebe9"), ("1c22c53d5c5ff456448d2f4e9edb6f67e273b159261c30d46f18ab52af0e51eb", "1ae8417362967ea02d28fda96bab3c195a20ea5db2c51dc14f8e208a83876263", "0aba23680057549aaf989e9cb3462e637a0de780535f4d1f63b43265fc5a390c", "3054f49e9a29791b9f86776a2c746ebdc05352ed9933762836450f150988a467"), ("1239f81d0b63dfd00d5e39bd181b2920ff139c968d89124d92c34ce600c154ce", "04936b0c9f2d2d62b29bda27ceae43c6dea7aeeb83d1c473f7174c4437c19703", "2ec408aa493869c289802bb879db10615a48edffafae19ad0fb4a5b95159fc88", "03be9b6282e8a2e2681af7b7c1697e3fa486fb90510d7975e8663c548fe7d89a"), ("2928cc507175af22aaa6157ec2feb12af9f27c532d9be3adc3ed1d98124738e8", "1e981c395d97d5de2ff637f9c48b30c48dba6118191efc92a8f898ec7d49bff2", "1df9f13dfb01b94b1347a76764e4548d76f44762c2f78efa5cde39081e6a3c77", "2c2a46964b02a36cd853006ad3d4a37e1f4689679f8b66d2ca1bf4b1d170c6cf"), ("194c969bdfccc35eae91159e923721553875027191c904bcdff56f80c7ca947f", "02e5cc9768c55b5f6eaa3b58c4553f12c784d688886cc023984b7481a9c812af", "028a97c7de90e55b6fec9168c540e276eee57fed9d752843eca93abe7b350c38", "200763e7bee12ab10d12a970fdad815cd250959be74f271303fff30c1a0c67ed"), ("2dfecf1999560b5f3f240c54566136b609c018cec1aa44223384292f43b4ca93", "1db11d1b38ec27bead93ac2f1045d6b829c2c3215add31f7cf7541bd9fe880ff", "1391e541d2f9038d5b9aa1872263f6c58029493e4ce588818d6ac258dc29f4b6", "1967a1387caa074513f6866a8b6b27af8b0f6f28f0534d6f4ccd2cd8d84782c4"), ("06da199c67bd7d21e0388f6dfa60771336d45c146b4966764ac0547ec7d85aa3", "246eb9a75ea86d3ca70d25f6c975aba8dc0dd9297476b5f46551e20c9aefbfa2", "1052229f75c7f5e187215aee96d905d5645c7c6ef92626b875eb5b39fd55061b", "2f5c3cca7b94babd79c03980fb28229d1cf9316542ba9d9aff98310e6218967e"), ("21e6ab525a8af9527c4d8575d40753221636088c99bfa92fd8a2690804fa6956", "27c1058b12a82557645e805139df1499186ab7b17ffc6355babffa92f100f5aa", "0ee0742a61abded993b8b05a2c20822e3c66027cf5d55d14476f40fa31f357d6", "0cb84bf914675acf5ecd3d0bbd9d28bce2998035468c9c2f6aa92a810e3496c5"), ("06cb99bb6b4b156b88bcaaf6600d23c0766ae63582c54d4ebfcece950bc16f0a", "0f34452b725f2d6dd6776b42b7331be2ccfed2fd01ce0a64e6af02270dd13bab", "00fb6a75db9a271f32a0c2d8cbb1b52e74fc0d7c6187f864556b79c16e1762cf", "2de494a69724f37d0c7e15fb843190980876526802fbd4c3f1fc32ef076ae7d1"), ("0158fa8fd14131f4bc3487c3f1ba9ecea194322239cef430f3a7c032880f15b4", "11bbe04a5c6f17f429acc9323be52866a5abf550ae8f72be8668bef732684515", "009588be0f8698474d89a14233af97275a3cffdd31ea208c5e71e59e0025dce6", "1f2fdf9df8c08722974ef5a4d535e7ddd606e6c31ac08a0b2dac4ca111374e9a"), ("25830f18688a2cf461fe3efb7a2d04024edd9a5d16d412ad50c7ad611d1aef8e", "093795d0488b806050b4ab79f07cf5790700febe351992be37c5de5503bf5759", "0ed895b3dfe67158e69c77199c518e63562c7b3d94ad75692b723bf3c1eb5119", "2d7f4d1247ee4f56d844adaf44e5c6eea8b431f4371c652396d07c93e28a40e4"), ("07c3c9495751e9a84c65307c32a3be223b7375f71a215d5f4618a8a8e68e306f", "04f1c6f042d77bbcca1aaa014f7589975ad89c27dc8a5f89978fa088acbea3e6", "018017da04cb7ef81985975479316d5799552b8e1600a99a981a59929133b0d3", "2d23c747b2f67584ded16d8d1be366bdf522a5310933fdc55bb560dbb75aa631"), ("0a389c6b043112a4869b6218f0ee79b414b8d0a14eba9ffa100c43473dfa4696", "02ea072139eefe156831ad9215bb1e41ed14fb4a6bf908fa1bd7264536425962", "186141a21838d8c1dd51350b17c3d7f83c65d223735b6eec34b31ed1e8947f69", "07159cf67ddeb02e7ff443aa2dcfd2f7b7acfd955cce8112e8541a63f72644aa"), ("2af47c2ab99f5ba0ec696aecb12ce7c6c40e9392a2d4ea849492e3b796a888fb", "02a50f42dc316f61893d601f2b363e0fdb9835ba51f990473db32ffe0dc9b670", "176a9869c8af8810c2e2863963a06bc0d0f4bc003a822377faabf2bb66e2cecb", "2141cd67919f2bc88ab381736367cefeed51f1529da19bc706b1d62fd4dcfb10"), ("16aa119160b588b9dd6df884c537ef413256eca93aa23118ee0e2eb7ccee10a9", "0789a88054f7ffcc27a623af9baeeda9016a91191388bffadc7311bc32dbf016", "1b9a53cc955e77d96b138b85d152166945c131505441212cdc017dfeb886949f", "21fbe0a3dd59e33b54a9d0db8b19fcf96539e6754ab414e01b0936c8ab0fd060"), ("059bcee76201f08b423a7d58b23f8811c0fff65df9275ff2bdca3ae04e41b883", "01cc8d0f4828081f982f914fb4d9ab91d71e7939044b2012597ac815de487f9b", "30217dfce24e1e776cbbc3e4100e271f8ad64590c79a00d5caa0e5a0050b02ee", "1ca33fab6160eb24370ca28bd9781fe5cadbcfaa3b4da4e88d478ce55ad07ecf"), ("03b6856d20fce3518c023b7063618d749ec41c8937d2c1903dc1f842e33dd2a1", "085ef85f0a62704178de4db1db924543f3615b2cae9c4a17d25c65ccd0349224", "054e23ae1ef2edd207f25d86d8a07cde35749e12d20e6cbb63945fd7246e1b6e", "2ebf892f89bc88e48832df9a81352e62211405336ed22c5de698ee5c694fcac5"), ("0a9329d196674bae97cc4ca8aede41492d26b84aa693d5c4bbeeea67e0c15e4d", "1ed4ac4d3a164729eea913b114f8611d50dc264ac01cb9859d678da9125da102", "1452d1127ad64e85b4ed50a62e604675d0a30fc53d8f91beb0605dfcab6c36cd", "30261a31d09c2e470c30b2c840cfba93e1a77d193cc7fb2dafdfef6f2eef5c7c"), ("1d10f554cfd5dbde4d5e80aed9f4a699bb44e5b74addee6662756b7172327b5a", "03e376dfbd7b410338d9323c32cc673172bca160efc19433fda18706d0252d92", "0b7ebef731fa2f5391b3677ae750fd356a3f6bc68f186858e79d04bb7b941d3a", "2f50913feff5c3be471f9e0dfcbe066bdc32c3f66e7cd6ec265f459529aa4268"), ("2b7187ccad11ba93bcd1cb405f58cf94305dce9de440cdc2477fcca77aeee315", "27d22e299e0b0b7955364920227ddd01e730882fcffbf827cae05cd54606d07a", "01311467edd0bf170ece03af60d54adccc005e6a8800bd9ddd184a03b525f674", "25e743bf8816c186536e733b00e1e4bb0c3eb5afca7af57434f351164eaa90a7"), ("09ee4709a65f81a13d2d91f34642eafc2f0d4bd870c3c120f538062754923b99", "18b2d5dd4b7699b292e1067bd8cfe4cedcbd23995bc2257ced020fd650ffedef", "2362a1fa791ddd406900eb96bdcaa43f51855cc8f8c9a0bf256146b3a7a590f7", "1bebbac0ec5722d199af0052dce6885a44eee436b5f60f4ce3be3be5573a8aa5"), ("24ee16aaef52d229c20cee06d974d8a0fcd84452b751f064bcb2872a94a659ca", "2368a754253fa9810441cc899308b0ccda2953328323a4e3d1a3c62c41f8d01b", "225c3610ed33a9a3a7d88e0ac1fb3b3085418470fdadfa494cfbdc67f9c0669c", "25f72fb5614b7388c4eb62ac2474a2fbc96e1cdb66fcd23aab014073e2e8a950"), ("16eacced0f9638df894f31bc79095a6b1f37aa63b659d5c32aa8e69f7d11ee43", "0c27048ecb6aa48f3f24922d8ae3a5c4b33a9fe290cd0333985ea572e4166be0", "111ac3ba60c7e03510171e5a35eac319dcf14b527316f647bd4e9f81fdb4980e", "1075247a959d099ab57fd801151ac8c2410c8e1896ec04a98723ebb0bab90f6e"), ("1c0078c55f85b58a2926b658cd9c8adc290bd00ad97676adea9e296606ddf876", "186eb4ffe5548ca40805588e5f15a520bb466ca003379541611a240025cde780", "2a5afff6f474bdb6f51ce59001e61687418df51a8d2274873881837daa186f22", "206611d8f7f7083e00fb5593d011a72cbe3ff6319767a2b9d38e31ac193cffb4")] - # StaticGroupMerkleRoot is the root of the Merkle tree constructed from the StaticGroupKeys above - # only identity commitments are used for the Merkle tree construction - # the root is created locally, using createMembershipList proc from waku_rln_relay_utils module, and the result is hardcoded in here - StaticGroupMerkleRoot* = "1e534adab58f7d300aaeecae57a25e0a0b18c368a09f720280da92b288950901" +# StaticGroupMerkleRoot is the root of the Merkle tree constructed from the StaticGroupKeys above +# only identity commitments are used for the Merkle tree construction +# rln-v2: rate commitments are used for the Merkle tree construction, defaulting the UserMessageLimit to 20 +# the root is created locally, using createMembershipList proc from waku_rln_relay_utils module, and the result is hardcoded in here +when defined(rln_v2): + const StaticGroupMerkleRoot* = "0a15ba7c5753ee78e8126603113028a343c1a01ffcb389565c76626be158e964" +else: + const StaticGroupMerkleRoot* = "1e534adab58f7d300aaeecae57a25e0a0b18c368a09f720280da92b288950901" const MaxClockGapSeconds* = 20.0 # the maximum clock difference between peers in seconds diff --git a/waku/waku_rln_relay/group_manager/static/group_manager.nim b/waku/waku_rln_relay/group_manager/static/group_manager.nim index 3b5af900ab..82782addf6 100644 --- a/waku/waku_rln_relay/group_manager/static/group_manager.nim +++ b/waku/waku_rln_relay/group_manager/static/group_manager.nim @@ -1,5 +1,6 @@ import ../group_manager_base, + ../../constants, ../../rln, std/sequtils @@ -7,9 +8,9 @@ export group_manager_base type - StaticGroupManager* = ref object of GroupManager - groupKeys*: seq[IdentityCredential] - groupSize*: uint + StaticGroupManager* = ref object of GroupManager + groupKeys*: seq[IdentityCredential] + groupSize*: uint template initializedGuard*(g: StaticGroupManager): untyped = if not g.initialized: @@ -24,17 +25,26 @@ method init*(g: StaticGroupManager): Future[void] {.async.} = if membershipIndex < MembershipIndex(0) or membershipIndex >= MembershipIndex(groupSize): raise newException(ValueError, "Invalid membership index. Must be within 0 and " & $(groupSize - 1) & "but was " & $membershipIndex) - g.idCredentials = some(groupKeys[membershipIndex]) + when defined(rln_v2): + g.userMessageLimit = some(DefaultUserMessageLimit) + g.idCredentials = some(groupKeys[membershipIndex]) # Seed the received commitments into the merkle tree - let idCommitments = groupKeys.mapIt(it.idCommitment) - let membersInserted = g.rlnInstance.insertMembers(g.latestIndex, idCommitments) - if not membersInserted: - raise newException(ValueError, "Failed to insert members into the merkle tree") + when defined(rln_v2): + let rateCommitments = groupKeys.mapIt(RateCommitment(idCommitment: it.idCommitment, + userMessageLimit: g.userMessageLimit.get())) + let leaves = rateCommitments.toLeaves().valueOr: + raise newException(ValueError, "Failed to convert rate commitments to leaves: " & $error) + let membersInserted = g.rlnInstance.insertMembers(g.latestIndex, leaves) + else: + let idCommitments = groupKeys.mapIt(it.idCommitment) + let membersInserted = g.rlnInstance.insertMembers(g.latestIndex, idCommitments) + if not membersInserted: + raise newException(ValueError, "Failed to insert members into the merkle tree") discard g.slideRootQueue() - g.latestIndex += MembershipIndex(idCommitments.len - 1) + g.latestIndex += MembershipIndex(groupKeys.len - 1) g.initialized = true @@ -107,8 +117,25 @@ else: when defined(rln_v2): method withdraw*(g: StaticGroupManager, idSecretHash: IdentitySecretHash): Future[void] {.async: (raises: [Exception]).} = - # No-op - return + initializedGuard(g) + + let groupKeys = g.groupKeys + + for i in 0.. Date: Mon, 4 Mar 2024 15:31:37 +0100 Subject: [PATCH 256/274] Tiny cleanup and more encapsulation in protocol.nim files (#2488) --- waku/waku_filter/protocol.nim | 8 -------- waku/waku_filter_v2/protocol.nim | 2 +- waku/waku_lightpush/protocol.nim | 2 +- waku/waku_metadata/protocol.nim | 2 +- waku/waku_relay/protocol.nim | 2 +- 5 files changed, 4 insertions(+), 12 deletions(-) diff --git a/waku/waku_filter/protocol.nim b/waku/waku_filter/protocol.nim index 6ec7ad7fab..b3c53b8e0e 100644 --- a/waku/waku_filter/protocol.nim +++ b/waku/waku_filter/protocol.nim @@ -120,14 +120,6 @@ proc new*(T: type WakuFilterLegacy, wf.initProtocolHandler() return wf -proc init*(T: type WakuFilterLegacy, - peerManager: PeerManager, - rng: ref rand.HmacDrbgContext, - timeout: Duration = WakuLegacyFilterTimeout): T {. - deprecated: "WakuFilterLegacy.new()' instead".} = - WakuFilterLegacy.new(peerManager, rng, timeout) - - proc sendFilterRpc(wf: WakuFilterLegacy, rpc: FilterRPC, peer: PeerId|RemotePeerInfo): Future[WakuFilterResult[void]] {.async, gcsafe.}= let connOpt = await wf.peerManager.dialPeer(peer, WakuLegacyFilterCodec) if connOpt.isNone(): diff --git a/waku/waku_filter_v2/protocol.nim b/waku/waku_filter_v2/protocol.nim index a0d9d2cdc2..fd422e6fc3 100644 --- a/waku/waku_filter_v2/protocol.nim +++ b/waku/waku_filter_v2/protocol.nim @@ -261,7 +261,7 @@ proc new*(T: type WakuFilter, const MaintainSubscriptionsInterval* = 1.minutes -proc startMaintainingSubscriptions*(wf: WakuFilter, interval: Duration) = +proc startMaintainingSubscriptions(wf: WakuFilter, interval: Duration) = trace "starting to maintain subscriptions" var maintainSubs: CallbackFunc maintainSubs = CallbackFunc( diff --git a/waku/waku_lightpush/protocol.nim b/waku/waku_lightpush/protocol.nim index 746262667e..d62dc0b79d 100644 --- a/waku/waku_lightpush/protocol.nim +++ b/waku/waku_lightpush/protocol.nim @@ -62,7 +62,7 @@ proc handleRequest*(wl: WakuLightPush, peerId: PeerId, buffer: seq[byte]): Futur let rpc = PushRPC(requestId: requestId, response: some(response)) return rpc -proc initProtocolHandler*(wl: WakuLightPush) = +proc initProtocolHandler(wl: WakuLightPush) = proc handle(conn: Connection, proto: string) {.async.} = let buffer = await conn.readLp(MaxRpcSize.int) let rpc = await handleRequest(wl, conn.peerId, buffer) diff --git a/waku/waku_metadata/protocol.nim b/waku/waku_metadata/protocol.nim index 1fbe1e2717..ff4eaa29bc 100644 --- a/waku/waku_metadata/protocol.nim +++ b/waku/waku_metadata/protocol.nim @@ -68,7 +68,7 @@ proc request*(m: WakuMetadata, conn: Connection): Future[Result[WakuMetadataResp return ok(response) -proc initProtocolHandler*(m: WakuMetadata) = +proc initProtocolHandler(m: WakuMetadata) = proc handle(conn: Connection, proto: string) {.async, gcsafe, closure.} = let res = catch: await conn.readLp(RpcResponseMaxBytes) let buffer = res.valueOr: diff --git a/waku/waku_relay/protocol.nim b/waku/waku_relay/protocol.nim index cef60cb13c..aea62105e4 100644 --- a/waku/waku_relay/protocol.nim +++ b/waku/waku_relay/protocol.nim @@ -196,7 +196,7 @@ proc isSubscribed*(w: WakuRelay, topic: PubsubTopic): bool = proc subscribedTopics*(w: WakuRelay): seq[PubsubTopic] = return toSeq(GossipSub(w).topics.keys()) -proc generateOrderedValidator*(w: WakuRelay): auto {.gcsafe.} = +proc generateOrderedValidator(w: WakuRelay): auto {.gcsafe.} = # rejects messages that are not WakuMessage let wrappedValidator = proc(pubsubTopic: string, message: messages.Message): Future[ValidationResult] {.async.} = From b030de443bc0937c84c1bd87113b9548216bc4ba Mon Sep 17 00:00:00 2001 From: NagyZoltanPeter <113987313+NagyZoltanPeter@users.noreply.github.com> Date: Mon, 4 Mar 2024 16:40:58 +0100 Subject: [PATCH 257/274] vendor lib dependencies are updated to latest where were possible. For next release 0.26.0 (#2494) --- vendor/nim-bearssl | 2 +- vendor/nim-chronos | 2 +- vendor/nim-confutils | 2 +- vendor/nim-eth | 2 +- vendor/nim-faststreams | 2 +- vendor/nim-http-utils | 2 +- vendor/nim-json-serialization | 2 +- vendor/nim-libbacktrace | 2 +- vendor/nim-libp2p | 2 +- vendor/nim-metrics | 2 +- vendor/nim-nat-traversal | 2 +- vendor/nim-regex | 2 +- vendor/nim-results | 2 +- vendor/nim-secp256k1 | 2 +- vendor/nim-serialization | 2 +- vendor/nim-sqlite3-abi | 2 +- vendor/nim-stew | 2 +- vendor/nim-stint | 2 +- vendor/nim-taskpools | 2 +- vendor/nim-testutils | 2 +- vendor/nim-toml-serialization | 2 +- vendor/nim-unittest2 | 2 +- vendor/nim-websock | 2 +- vendor/nim-zlib | 2 +- vendor/nimcrypto | 2 +- 25 files changed, 25 insertions(+), 25 deletions(-) diff --git a/vendor/nim-bearssl b/vendor/nim-bearssl index d55d3a86d7..7640cc6aa8 160000 --- a/vendor/nim-bearssl +++ b/vendor/nim-bearssl @@ -1 +1 @@ -Subproject commit d55d3a86d7ec3ad11b244e17b3bad490bfbd076d +Subproject commit 7640cc6aa859f6d4ad657c892f14c76dc1d34bd5 diff --git a/vendor/nim-chronos b/vendor/nim-chronos index 92acf68b04..7b02247ce7 160000 --- a/vendor/nim-chronos +++ b/vendor/nim-chronos @@ -1 +1 @@ -Subproject commit 92acf68b04070dfe8eb65bab71fbf63804979a16 +Subproject commit 7b02247ce74d5ad5630013334f2e347680b02f65 diff --git a/vendor/nim-confutils b/vendor/nim-confutils index 7568f1b7c3..0adf3b7db7 160000 --- a/vendor/nim-confutils +++ b/vendor/nim-confutils @@ -1 +1 @@ -Subproject commit 7568f1b7c3142d8e87c1f3dd42924238926affbe +Subproject commit 0adf3b7db70736061bf12fa23c2fc51f395b289e diff --git a/vendor/nim-eth b/vendor/nim-eth index 11049fb87d..d66a29db7c 160000 --- a/vendor/nim-eth +++ b/vendor/nim-eth @@ -1 +1 @@ -Subproject commit 11049fb87d076a25e0fa8e2fda95acaf119738da +Subproject commit d66a29db7ca4372dba116928f979e92cb7f7661f diff --git a/vendor/nim-faststreams b/vendor/nim-faststreams index 720fc5e5c8..8ff78919aa 160000 --- a/vendor/nim-faststreams +++ b/vendor/nim-faststreams @@ -1 +1 @@ -Subproject commit 720fc5e5c8e428d9d0af618e1e27c44b42350309 +Subproject commit 8ff78919aa5a23aecaf4a647e23cfa8ecda6736a diff --git a/vendor/nim-http-utils b/vendor/nim-http-utils index 77a59297ad..be57dbc902 160000 --- a/vendor/nim-http-utils +++ b/vendor/nim-http-utils @@ -1 +1 @@ -Subproject commit 77a59297ad635d91a6352ef48ee09c6bde0c5d86 +Subproject commit be57dbc902d36f37540897e98c69aa80f868cb45 diff --git a/vendor/nim-json-serialization b/vendor/nim-json-serialization index 9c74b885ea..7516a92eb8 160000 --- a/vendor/nim-json-serialization +++ b/vendor/nim-json-serialization @@ -1 +1 @@ -Subproject commit 9c74b885eaeb6726543e69fde2f7d8837357c1d7 +Subproject commit 7516a92eb8339f8fc1de7dd16cfa3d77bce87cd2 diff --git a/vendor/nim-libbacktrace b/vendor/nim-libbacktrace index aad5aa227c..008de2cd42 160000 --- a/vendor/nim-libbacktrace +++ b/vendor/nim-libbacktrace @@ -1 +1 @@ -Subproject commit aad5aa227c43a83984245b180c6c295ce9ff561b +Subproject commit 008de2cd425cbca19f7d922e4e8b209d92313752 diff --git a/vendor/nim-libp2p b/vendor/nim-libp2p index 349496e40f..d08ce17144 160000 --- a/vendor/nim-libp2p +++ b/vendor/nim-libp2p @@ -1 +1 @@ -Subproject commit 349496e40fcae9f225c437662b5bbe3c6b6eb3af +Subproject commit d08ce17144cabe2ac9925bd75a11ad88a607c04e diff --git a/vendor/nim-metrics b/vendor/nim-metrics index f51401566f..0e768ca7fb 160000 --- a/vendor/nim-metrics +++ b/vendor/nim-metrics @@ -1 +1 @@ -Subproject commit f51401566ff7719185f52b5efe61d551e479f676 +Subproject commit 0e768ca7fb7df4798649145a403e7db65cae1f8b diff --git a/vendor/nim-nat-traversal b/vendor/nim-nat-traversal index 14e016503f..d423ff9e43 160000 --- a/vendor/nim-nat-traversal +++ b/vendor/nim-nat-traversal @@ -1 +1 @@ -Subproject commit 14e016503fe6488230e6d0e59396efde96bd9252 +Subproject commit d423ff9e436b8a8219926f4e3350b09108e42847 diff --git a/vendor/nim-regex b/vendor/nim-regex index a3f5389e87..9085db421c 160000 --- a/vendor/nim-regex +++ b/vendor/nim-regex @@ -1 +1 @@ -Subproject commit a3f5389e872e45a664aff3dfb80eab8069c688c5 +Subproject commit 9085db421c5a2b187d6871b9e735521d034cc538 diff --git a/vendor/nim-results b/vendor/nim-results index f3c666a272..193d3c6648 160000 --- a/vendor/nim-results +++ b/vendor/nim-results @@ -1 +1 @@ -Subproject commit f3c666a272c69d70cb41e7245e7f6844797303ad +Subproject commit 193d3c6648bd0f7e834d4ebd6a1e1d5f93998197 diff --git a/vendor/nim-secp256k1 b/vendor/nim-secp256k1 index 7246d91c66..2bc945cc9e 160000 --- a/vendor/nim-secp256k1 +++ b/vendor/nim-secp256k1 @@ -1 +1 @@ -Subproject commit 7246d91c667f4cc3759fdd50339caa45a2ecd8be +Subproject commit 2bc945cc9ebfae1b688f72ea59f78fd23873d1d4 diff --git a/vendor/nim-serialization b/vendor/nim-serialization index 4d541ec434..afae13adac 160000 --- a/vendor/nim-serialization +++ b/vendor/nim-serialization @@ -1 +1 @@ -Subproject commit 4d541ec43454809904fc4c3c0a7436410ad597d2 +Subproject commit afae13adac25b6fa98bacf4b9f38458dc64317b0 diff --git a/vendor/nim-sqlite3-abi b/vendor/nim-sqlite3-abi index 362e1bd9f6..6d99f874d6 160000 --- a/vendor/nim-sqlite3-abi +++ b/vendor/nim-sqlite3-abi @@ -1 +1 @@ -Subproject commit 362e1bd9f689ad9f5380d9d27f0705b3d4dfc7d3 +Subproject commit 6d99f874d610d9ddac3c5b63ca5d0a341049c2ed diff --git a/vendor/nim-stew b/vendor/nim-stew index 2c2544aec1..1662762c01 160000 --- a/vendor/nim-stew +++ b/vendor/nim-stew @@ -1 +1 @@ -Subproject commit 2c2544aec13536304438be045bfdd22452741466 +Subproject commit 1662762c0144854db60632e4115fe596ffa67fca diff --git a/vendor/nim-stint b/vendor/nim-stint index 711cda4456..7bb0ccc784 160000 --- a/vendor/nim-stint +++ b/vendor/nim-stint @@ -1 +1 @@ -Subproject commit 711cda4456c32d3ba3c6c4524135b3453dffeb9c +Subproject commit 7bb0ccc7842577243edc3b8d61f75bf498551a7a diff --git a/vendor/nim-taskpools b/vendor/nim-taskpools index 15e23ef1cf..d4c43137c0 160000 --- a/vendor/nim-taskpools +++ b/vendor/nim-taskpools @@ -1 +1 @@ -Subproject commit 15e23ef1cf0860330dcc32f50fcce5f840031e28 +Subproject commit d4c43137c0590cb47f893a66ca8cb027fa6c217e diff --git a/vendor/nim-testutils b/vendor/nim-testutils index b56a5953e3..ae476c6731 160000 --- a/vendor/nim-testutils +++ b/vendor/nim-testutils @@ -1 +1 @@ -Subproject commit b56a5953e37fc5117bd6ea6dfa18418c5e112815 +Subproject commit ae476c67314ac4b294d21040315e0f716189a70e diff --git a/vendor/nim-toml-serialization b/vendor/nim-toml-serialization index 2bdfec0eb7..24bbfcb8e4 160000 --- a/vendor/nim-toml-serialization +++ b/vendor/nim-toml-serialization @@ -1 +1 @@ -Subproject commit 2bdfec0eb7156d5773bc5d25fca3b3b77d0869f1 +Subproject commit 24bbfcb8e4e256883fc959dc6f5c15fe7a84fca5 diff --git a/vendor/nim-unittest2 b/vendor/nim-unittest2 index db67e2ad76..b5028a4471 160000 --- a/vendor/nim-unittest2 +++ b/vendor/nim-unittest2 @@ -1 +1 @@ -Subproject commit db67e2ad76840993ff82015987e3089a7d76f55f +Subproject commit b5028a44710f0317c5e710c80cec90127aa7e77c diff --git a/vendor/nim-websock b/vendor/nim-websock index f8ed9b40a5..6db6088792 160000 --- a/vendor/nim-websock +++ b/vendor/nim-websock @@ -1 +1 @@ -Subproject commit f8ed9b40a5ff27ad02a3c237c4905b0924e3f982 +Subproject commit 6db6088792bde0998c2b84c2d8e231f1d0507e49 diff --git a/vendor/nim-zlib b/vendor/nim-zlib index a2f44bb7f6..45b06fca15 160000 --- a/vendor/nim-zlib +++ b/vendor/nim-zlib @@ -1 +1 @@ -Subproject commit a2f44bb7f65571a894227ff6fde9298a104e03a5 +Subproject commit 45b06fca15ce0f09586067d950da30c10227865a diff --git a/vendor/nimcrypto b/vendor/nimcrypto index a079df9242..0c6ddab03a 160000 --- a/vendor/nimcrypto +++ b/vendor/nimcrypto @@ -1 +1 @@ -Subproject commit a079df92424968d46a6ac258299ce9380aa153f2 +Subproject commit 0c6ddab03a99805239b7875f71d2ca95fbed6f85 From 9ef2eccb8aa19e80a9381dcb2ece29718ebce30f Mon Sep 17 00:00:00 2001 From: Benjamin Arntzen Date: Mon, 4 Mar 2024 17:08:39 +0000 Subject: [PATCH 258/274] docs: Update link to DNS discovery tutorial (#2496) --- waku/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/waku/README.md b/waku/README.md index 27030a8966..0e631e1a08 100644 --- a/waku/README.md +++ b/waku/README.md @@ -173,7 +173,7 @@ This is necessary to verify domain certificates when connecting to this node ove ## Using DNS discovery to connect to existing nodes -A node can discover other nodes to connect to using [DNS-based discovery](../../docs/tutorial/dns-disc.md). +A node can discover other nodes to connect to using [DNS-based discovery](../docs/tutorial/dns-disc.md). The following command line options are available: ``` @@ -197,7 +197,7 @@ Current URLs for the published fleet lists: - production fleet: `enrtree://ANEDLO25QVUGJOUTQFRYKWX6P4Z4GKVESBMHML7DZ6YK4LGS5FC5O@prod.wakuv2.nodes.status.im` - test fleet: `enrtree://AO47IDOLBKH72HIZZOXQP6NMRESAN7CHYWIBNXDXWRJRZWLODKII6@test.wakuv2.nodes.status.im` -See the [separate tutorial](../../docs/tutorial/dns-disc.md) for a complete guide to DNS discovery. +See the [separate tutorial](../docs/tutorial/dns-disc.md) for a complete guide to DNS discovery. ## Enabling Websocket From b151672143583fe854caaa8a017b951bbc8a9b4d Mon Sep 17 00:00:00 2001 From: NagyZoltanPeter <113987313+NagyZoltanPeter@users.noreply.github.com> Date: Tue, 5 Mar 2024 15:51:43 +0100 Subject: [PATCH 259/274] Removed json-rpc leftovers (#2503) --- apps/chat2/config_chat2.nim | 27 -- tests/wakunode_jsonrpc/test_jsonrpc_relay.nim | 283 ------------------ waku/waku_api/jsonrpc/relay/handlers.nim | 237 --------------- 3 files changed, 547 deletions(-) delete mode 100644 tests/wakunode_jsonrpc/test_jsonrpc_relay.nim delete mode 100644 waku/waku_api/jsonrpc/relay/handlers.nim diff --git a/apps/chat2/config_chat2.nim b/apps/chat2/config_chat2.nim index 055cd63d3b..4d0e6299ff 100644 --- a/apps/chat2/config_chat2.nim +++ b/apps/chat2/config_chat2.nim @@ -127,33 +127,6 @@ type defaultValue: "" name: "lightpushnode" }: string - ## JSON-RPC config - - rpc* {. - desc: "Enable Waku JSON-RPC server: true|false", - defaultValue: true - name: "rpc" }: bool - - rpcAddress* {. - desc: "Listening address of the JSON-RPC server.", - defaultValue: parseIpAddress("127.0.0.1") - name: "rpc-address" }: IpAddress - - rpcPort* {. - desc: "Listening port of the JSON-RPC server.", - defaultValue: 8545 - name: "rpc-port" }: uint16 - - rpcAdmin* {. - desc: "Enable access to JSON-RPC Admin API: true|false", - defaultValue: false - name: "rpc-admin" }: bool - - rpcPrivate* {. - desc: "Enable access to JSON-RPC Private API: true|false", - defaultValue: false - name: "rpc-private" }: bool - ## Metrics config metricsServer* {. diff --git a/tests/wakunode_jsonrpc/test_jsonrpc_relay.nim b/tests/wakunode_jsonrpc/test_jsonrpc_relay.nim deleted file mode 100644 index d5c55dd7d4..0000000000 --- a/tests/wakunode_jsonrpc/test_jsonrpc_relay.nim +++ /dev/null @@ -1,283 +0,0 @@ -{.used.} - -import - std/[options, sequtils, tempfiles], - stew/shims/net as stewNet, - testutils/unittests, - libp2p/crypto/crypto, - json_rpc/[rpcserver, rpcclient] -import - ../../../waku/common/base64, - ../../../waku/waku_core, - ../../../waku/node/peer_manager, - ../../../waku/waku_api/message_cache, - ../../../waku/waku_node, - ../../../waku/waku_api/jsonrpc/relay/handlers as relay_api, - ../../../waku/waku_api/jsonrpc/relay/client as relay_api_client, - ../../../waku/waku_relay, - ../../../waku/waku_rln_relay, - ../testlib/wakucore, - ../testlib/wakunode - -suite "Waku v2 JSON-RPC API - Relay": - - asyncTest "subscribe and unsubscribe from topics": - ## Setup - let node = newTestWakuNode(generateSecp256k1Key(), parseIpAddress("0.0.0.0"), Port(0)) - - await node.start() - await node.mountRelay(@[]) - - # JSON-RPC server - let - rpcPort = Port(8547) - ta = initTAddress(parseIpAddress("0.0.0.0"), rpcPort) - server = newRpcHttpServer([ta]) - - let cache = MessageCache.init(capacity=30) - installRelayApiHandlers(node, server, cache) - server.start() - - # JSON-RPC client - let client = newRpcHttpClient() - await client.connect("127.0.0.1", rpcPort, false) - - ## Given - let newTopics = @["test-topic1","test-topic2","test-topic3"] - - ## When - # Subscribe to new topics - let subResp = await client.post_waku_v2_relay_v1_subscriptions(newTopics) - - let subTopics = node.wakuRelay.subscribedTopics.toSeq() - - # Unsubscribe from new topics - let unsubResp = await client.delete_waku_v2_relay_v1_subscriptions(newTopics) - - let unsubTopics = node.wakuRelay.subscribedTopics.toSeq() - - ## Then - check: - subResp == true - check: - # Node is now subscribed to default + new topics - subTopics.len == newTopics.len - newTopics.allIt(it in subTopics) - - check: - unsubResp == true - check: - # Node is now unsubscribed from new topics - unsubTopics.len == 0 - newTopics.allIt(it notin unsubTopics) - - await server.stop() - await server.closeWait() - - await node.stop() - - asyncTest "publish message to topic": - ## Setup - let - pubSubTopic = "test-jsonrpc-pubsub-topic" - contentTopic = "test-jsonrpc-content-topic" - - # Relay nodes setup - let - srcNode = newTestWakuNode(generateSecp256k1Key(), parseIpAddress("0.0.0.0"), Port(0)) - dstNode = newTestWakuNode(generateSecp256k1Key(), parseIpAddress("0.0.0.0"), Port(0)) - - await allFutures(srcNode.start(), dstNode.start()) - - await srcNode.mountRelay(@[pubSubTopic]) - await dstNode.mountRelay(@[pubSubTopic]) - - await srcNode.mountRlnRelay(WakuRlnConfig(rlnRelayDynamic: false, - rlnRelayCredIndex: some(1.uint), - rlnEpochSizeSec: 1, - rlnRelayTreePath: genTempPath("rln_tree", "wakunode_1"))) - - await dstNode.mountRlnRelay(WakuRlnConfig(rlnRelayDynamic: false, - rlnRelayCredIndex: some(2.uint), - rlnEpochSizeSec: 1, - rlnRelayTreePath: genTempPath("rln_tree", "wakunode_2"))) - - await srcNode.connectToNodes(@[dstNode.peerInfo.toRemotePeerInfo()]) - - # RPC server (source node) - let - rpcPort = Port(8548) - ta = initTAddress(parseIpAddress("0.0.0.0"), rpcPort) - server = newRpcHttpServer([ta]) - - let cache = MessageCache.init(capacity=30) - installRelayApiHandlers(srcNode, server, cache) - server.start() - - # JSON-RPC client - let client = newRpcHttpClient() - await client.connect("127.0.0.1", rpcPort, false) - - ## Given - let message = fakeWakuMessage( payload= @[byte 72], contentTopic=contentTopic) - - let dstHandlerFut = newFuture[(PubsubTopic, WakuMessage)]() - proc dstHandler(topic: PubsubTopic, msg: WakuMessage) {.async, gcsafe.} = - dstHandlerFut.complete((topic, msg)) - - dstNode.subscribe((kind: PubsubSub, topic: pubsubTopic), some(dstHandler)) - - ## When - let rpcMessage = WakuMessageRPC( - payload: base64.encode(message.payload), - contentTopic: some(message.contentTopic), - timestamp: some(message.timestamp), - version: some(message.version) - ) - let response = await client.post_waku_v2_relay_v1_message(pubSubTopic, rpcMessage) - - ## Then - require: - response == true - await dstHandlerFut.withTimeout(chronos.seconds(5)) - - var (topic, msg) = dstHandlerFut.read() - - # proof is injected under the hood, we compare just the message - msg.proof = @[] - - check: - topic == pubSubTopic - msg == message - - - ## Cleanup - await server.stop() - await server.closeWait() - await allFutures(srcNode.stop(), dstNode.stop()) - - asyncTest "get latest messages received from pubsub topics cache": - ## Setup - let - pubSubTopic = "test-jsonrpc-pubsub-topic" - contentTopic = "test-jsonrpc-content-topic" - - # Relay nodes setup - let - srcNode = newTestWakuNode(generateSecp256k1Key(), parseIpAddress("0.0.0.0"), Port(0)) - dstNode = newTestWakuNode(generateSecp256k1Key(), parseIpAddress("0.0.0.0"), Port(0)) - - await allFutures(srcNode.start(), dstNode.start()) - - await srcNode.mountRelay(@[pubSubTopic]) - await dstNode.mountRelay(@[]) - - await srcNode.connectToNodes(@[dstNode.peerInfo.toRemotePeerInfo()]) - - # RPC server (destination node) - let - rpcPort = Port(8549) - ta = initTAddress(parseIpAddress("0.0.0.0"), rpcPort) - server = newRpcHttpServer([ta]) - - let cache = MessageCache.init(capacity=30) - installRelayApiHandlers(dstNode, server, cache) - server.start() - - # JSON-RPC client - let client = newRpcHttpClient() - await client.connect("127.0.0.1", rpcPort, false) - - discard await client.post_waku_v2_relay_v1_subscriptions(@[pubSubTopic]) - - ## Given - let messages = @[ - fakeWakuMessage(payload= @[byte 70], contentTopic=contentTopic), - fakeWakuMessage(payload= @[byte 71], contentTopic=contentTopic), - fakeWakuMessage(payload= @[byte 72], contentTopic=contentTopic), - fakeWakuMessage(payload= @[byte 73], contentTopic=contentTopic) - ] - - ## When - for msg in messages: - discard await srcNode.publish(some(pubSubTopic), msg) - - await sleepAsync(200.millis) - - let dstMessages = await client.get_waku_v2_relay_v1_messages(pubSubTopic) - - ## Then - check: - dstMessages.len == 4 - dstMessages[2].payload == base64.encode(messages[2].payload) - dstMessages[2].contentTopic.get() == messages[2].contentTopic - dstMessages[2].timestamp.get() == messages[2].timestamp - dstMessages[2].version.get() == messages[2].version - - ## Cleanup - await server.stop() - await server.closeWait() - await allFutures(srcNode.stop(), dstNode.stop()) - - asyncTest "get latest messages received from content topics cache": - ## Setup - let contentTopic = DefaultContentTopic - - # Relay nodes setup - let - srcNode = newTestWakuNode(generateSecp256k1Key(), parseIpAddress("0.0.0.0"), Port(0)) - dstNode = newTestWakuNode(generateSecp256k1Key(), parseIpAddress("0.0.0.0"), Port(0)) - - await allFutures(srcNode.start(), dstNode.start()) - - let shard = getShard(contentTopic).expect("Valid Shard") - - await srcNode.mountRelay(@[shard]) - await dstNode.mountRelay(@[]) - - await srcNode.connectToNodes(@[dstNode.peerInfo.toRemotePeerInfo()]) - - # RPC server (destination node) - let - rpcPort = Port(8550) - ta = initTAddress(parseIpAddress("0.0.0.0"), rpcPort) - server = newRpcHttpServer([ta]) - - let cache = MessageCache.init(capacity=30) - installRelayApiHandlers(dstNode, server, cache) - server.start() - - # JSON-RPC client - let client = newRpcHttpClient() - await client.connect("127.0.0.1", rpcPort, false) - - discard await client.post_waku_v2_relay_v1_auto_subscriptions(@[contentTopic]) - - ## Given - let messages = @[ - fakeWakuMessage(payload= @[byte 70], contentTopic=contentTopic), - fakeWakuMessage(payload= @[byte 71], contentTopic=contentTopic), - fakeWakuMessage(payload= @[byte 72], contentTopic=contentTopic), - fakeWakuMessage(payload= @[byte 73], contentTopic=contentTopic) - ] - - ## When - for msg in messages: - discard await srcNode.publish(none(PubsubTopic), msg) - - await sleepAsync(200.millis) - - let dstMessages = await client.get_waku_v2_relay_v1_auto_messages(contentTopic) - - ## Then - check: - dstMessages.len == 4 - dstMessages[2].payload == base64.encode(messages[2].payload) - dstMessages[2].contentTopic.get() == messages[2].contentTopic - dstMessages[2].timestamp.get() == messages[2].timestamp - dstMessages[2].version.get() == messages[2].version - - ## Cleanup - await server.stop() - await server.closeWait() - await allFutures(srcNode.stop(), dstNode.stop()) \ No newline at end of file diff --git a/waku/waku_api/jsonrpc/relay/handlers.nim b/waku/waku_api/jsonrpc/relay/handlers.nim deleted file mode 100644 index 8d5e67d502..0000000000 --- a/waku/waku_api/jsonrpc/relay/handlers.nim +++ /dev/null @@ -1,237 +0,0 @@ -when (NimMajor, NimMinor) < (1, 4): - {.push raises: [Defect].} -else: - {.push raises: [].} - -import - std/sequtils, - chronicles, - json_rpc/rpcserver, - eth/keys, - nimcrypto/sysrand -import - ../../../common/base64, - ../../../waku_core, - ../../../waku_relay, - ../../../waku_rln_relay, - ../../../waku_rln_relay/rln/wrappers, - ../../../waku_node, - ../../message_cache, - ../../handlers, - ../message - -from std/times import getTime -from std/times import toUnix - - -logScope: - topics = "waku node jsonrpc relay_api" - - -const futTimeout* = 5.seconds # Max time to wait for futures - -## Waku Relay JSON-RPC API - -proc installRelayApiHandlers*(node: WakuNode, server: RpcServer, cache: MessageCache) = - server.rpc("post_waku_v2_relay_v1_subscriptions") do (pubsubTopics: seq[PubsubTopic]) -> bool: - if pubsubTopics.len == 0: - raise newException(ValueError, "No pubsub topic provided") - - ## Subscribes a node to a list of PubSub topics - debug "post_waku_v2_relay_v1_subscriptions" - - # Subscribe to all requested topics - let newTopics = pubsubTopics.filterIt(not cache.isPubsubSubscribed(it)) - - for pubsubTopic in newTopics: - if pubsubTopic == "": - raise newException(ValueError, "Empty pubsub topic") - - cache.pubsubSubscribe(pubsubTopic) - node.subscribe((kind: PubsubSub, topic: pubsubTopic), some(messageCacheHandler(cache))) - - return true - - server.rpc("delete_waku_v2_relay_v1_subscriptions") do (pubsubTopics: seq[PubsubTopic]) -> bool: - if pubsubTopics.len == 0: - raise newException(ValueError, "No pubsub topic provided") - - ## Unsubscribes a node from a list of PubSub topics - debug "delete_waku_v2_relay_v1_subscriptions" - - # Unsubscribe all handlers from requested topics - let subscribedTopics = pubsubTopics.filterIt(cache.isPubsubSubscribed(it)) - - for pubsubTopic in subscribedTopics: - if pubsubTopic == "": - raise newException(ValueError, "Empty pubsub topic") - - cache.pubsubUnsubscribe(pubsubTopic) - node.unsubscribe((kind: PubsubUnsub, topic: pubsubTopic)) - - return true - - server.rpc("post_waku_v2_relay_v1_message") do (pubsubTopic: PubsubTopic, msg: WakuMessageRPC) -> bool: - if pubsubTopic == "": - raise newException(ValueError, "Empty pubsub topic") - - ## Publishes a WakuMessage to a PubSub topic - debug "post_waku_v2_relay_v1_message", pubsubTopic=pubsubTopic - - let payloadRes = base64.decode(msg.payload) - if payloadRes.isErr(): - raise newException(ValueError, "invalid payload format: " & payloadRes.error) - - if msg.contentTopic.isNone(): - raise newException(ValueError, "message has no content topic") - - var message = WakuMessage( - payload: payloadRes.value, - contentTopic: msg.contentTopic.get(), - version: msg.version.get(0'u32), - timestamp: msg.timestamp.get(Timestamp(0)), - ephemeral: msg.ephemeral.get(false) - ) - - # ensure the node is subscribed to the pubsubTopic. otherwise it risks publishing - # to a topic with no connected peers - if pubsubTopic notin node.wakuRelay.subscribedTopics(): - raise newException( - ValueError, "Failed to publish: Node not subscribed to pubsubTopic: " & pubsubTopic) - - # if RLN is mounted, append the proof to the message - if not node.wakuRlnRelay.isNil(): - # append the proof to the message - node.wakuRlnRelay.appendRLNProof(message, - float64(getTime().toUnix())).isOkOr: - raise newException(ValueError, "Failed to publish: error appending RLN proof to message") - # validate the message before sending it - let result = node.wakuRlnRelay.validateMessageAndUpdateLog(message) - if result == MessageValidationResult.Invalid: - raise newException(ValueError, "Failed to publish: invalid RLN proof") - elif result == MessageValidationResult.Spam: - raise newException(ValueError, "Failed to publish: limit exceeded, try again later") - elif result == MessageValidationResult.Valid: - debug "RLN proof validated successfully", pubSubTopic=pubsubTopic - else: - raise newException(ValueError, "Failed to publish: unknown RLN proof validation result") - - # if we reach here its either a non-RLN message or a RLN message with a valid proof - debug "Publishing message", pubSubTopic=pubsubTopic, rln=not node.wakuRlnRelay.isNil() - let publishFut = node.publish(some(pubsubTopic), message) - if not await publishFut.withTimeout(futTimeout): - raise newException(ValueError, "Failed to publish: timed out") - - return true - - server.rpc("get_waku_v2_relay_v1_messages") do (pubsubTopic: PubsubTopic) -> seq[WakuMessageRPC]: - if pubsubTopic == "": - raise newException(ValueError, "Empty pubsub topic") - - ## Returns all WakuMessages received on a PubSub topic since the - ## last time this method was called - debug "get_waku_v2_relay_v1_messages", topic=pubsubTopic - - let msgRes = cache.getMessages(pubsubTopic, clear=true) - if msgRes.isErr(): - raise newException(ValueError, "Not subscribed to pubsub topic: " & pubsubTopic) - - return msgRes.value.map(toWakuMessageRPC) - - # Autosharding API - - server.rpc("post_waku_v2_relay_v1_auto_subscriptions") do (contentTopics: seq[ContentTopic]) -> bool: - if contentTopics.len == 0: - raise newException(ValueError, "No content topic provided") - - ## Subscribes a node to a list of Content topics - debug "post_waku_v2_relay_v1_auto_subscriptions" - - let newTopics = contentTopics.filterIt(not cache.isContentSubscribed(it)) - - # Subscribe to all requested topics - for contentTopic in newTopics: - if contentTopic == "": - raise newException(ValueError, "Empty content topic") - - cache.contentSubscribe(contentTopic) - node.subscribe((kind: ContentSub, topic: contentTopic), some(messageCacheHandler(cache))) - - return true - - server.rpc("delete_waku_v2_relay_v1_auto_subscriptions") do (contentTopics: seq[ContentTopic]) -> bool: - if contentTopics.len == 0: - raise newException(ValueError, "No content topic provided") - - ## Unsubscribes a node from a list of Content topics - debug "delete_waku_v2_relay_v1_auto_subscriptions" - - let subscribedTopics = contentTopics.filterIt(cache.isContentSubscribed(it)) - - # Unsubscribe all handlers from requested topics - for contentTopic in subscribedTopics: - if contentTopic == "": - raise newException(ValueError, "Empty content topic") - - cache.contentUnsubscribe(contentTopic) - node.unsubscribe((kind: ContentUnsub, topic: contentTopic)) - - return true - - server.rpc("post_waku_v2_relay_v1_auto_message") do (msg: WakuMessageRPC) -> bool: - ## Publishes a WakuMessage to a Content topic - debug "post_waku_v2_relay_v1_auto_message" - - let payloadRes = base64.decode(msg.payload) - if payloadRes.isErr(): - raise newException(ValueError, "invalid payload format: " & payloadRes.error) - - if msg.contentTopic.isNone(): - raise newException(ValueError, "message has no content topic") - - var message = WakuMessage( - payload: payloadRes.value, - contentTopic: msg.contentTopic.get(), - version: msg.version.get(0'u32), - timestamp: msg.timestamp.get(Timestamp(0)), - ephemeral: msg.ephemeral.get(false) - ) - - # if RLN is mounted, append the proof to the message - if not node.wakuRlnRelay.isNil(): - # append the proof to the message - node.wakuRlnRelay.appendRLNProof(message, - float64(getTime().toUnix())).isOkOr: - raise newException(ValueError, "Failed to publish: error appending RLN proof to message") - # validate the message before sending it - let result = node.wakuRlnRelay.validateMessageAndUpdateLog(message) - if result == MessageValidationResult.Invalid: - raise newException(ValueError, "Failed to publish: invalid RLN proof") - elif result == MessageValidationResult.Spam: - raise newException(ValueError, "Failed to publish: limit exceeded, try again later") - elif result == MessageValidationResult.Valid: - debug "RLN proof validated successfully", contentTopic=message.contentTopic - else: - raise newException(ValueError, "Failed to publish: unknown RLN proof validation result") - - # if we reach here its either a non-RLN message or a RLN message with a valid proof - debug "Publishing message", contentTopic=message.contentTopic, rln=not node.wakuRlnRelay.isNil() - let publishFut = node.publish(none(PubsubTopic), message) - if not await publishFut.withTimeout(futTimeout): - raise newException(ValueError, "Failed to publish: timed out") - - return true - - server.rpc("get_waku_v2_relay_v1_auto_messages") do (contentTopic: ContentTopic) -> seq[WakuMessageRPC]: - if contentTopic == "": - raise newException(ValueError, "Empty content topic") - - ## Returns all WakuMessages received on a Content topic since the - ## last time this method was called - debug "get_waku_v2_relay_v1_auto_messages", topic=contentTopic - - let msgRes = cache.getAutoMessages(contentTopic, clear=true) - if msgRes.isErr(): - raise newException(ValueError, "Not subscribed to content topic: " & contentTopic) - - return msgRes.value.map(toWakuMessageRPC) From e692edf6c19ef8584093840444bb12fd812a6566 Mon Sep 17 00:00:00 2001 From: Aaryamann Challani <43716372+rymnc@users.noreply.github.com> Date: Wed, 6 Mar 2024 17:39:02 +0530 Subject: [PATCH 260/274] fix(postgres): import under feature flag (#2500) --- waku/waku_archive/driver/builder.nim | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/waku/waku_archive/driver/builder.nim b/waku/waku_archive/driver/builder.nim index c3f399c6e4..e1c93e6a01 100644 --- a/waku/waku_archive/driver/builder.nim +++ b/waku/waku_archive/driver/builder.nim @@ -15,7 +15,6 @@ import ../../common/error_handling, ./sqlite_driver, ./sqlite_driver/migrations as archive_driver_sqlite_migrations, - ./postgres_driver/migrations as archive_postgres_driver_migrations, ./queue_driver export @@ -23,7 +22,9 @@ export queue_driver when defined(postgres): - import ./postgres_driver ## This import adds dependency with an external libpq library + import ## These imports add dependency with an external libpq library + ./postgres_driver/migrations as archive_postgres_driver_migrations, + ./postgres_driver export postgres_driver proc new*(T: type ArchiveDriver, From 0def4904f291c5042dea42606fba62702c40ae89 Mon Sep 17 00:00:00 2001 From: Aaryamann Challani <43716372+rymnc@users.noreply.github.com> Date: Wed, 6 Mar 2024 18:44:33 +0530 Subject: [PATCH 261/274] feat(waku-stealth-commitments): waku stealth commitment protocol (#2490) * feat(waku-stealth-commitments): initialize app * feat: works! * fix: readme * feat: send and receive, handle received stealth commitment * fix: remove empty lines * chore: move to examples --- examples/wakustealthcommitments/README.md | 38 +++++ .../erc_5564_interface.nim | 135 +++++++++++++++ examples/wakustealthcommitments/nim.cfg | 10 ++ examples/wakustealthcommitments/node_spec.nim | 106 ++++++++++++ .../stealth_commitment_protocol.nim | 154 ++++++++++++++++++ .../wakustealthcommitments.nim | 43 +++++ examples/wakustealthcommitments/wire_spec.nim | 115 +++++++++++++ 7 files changed, 601 insertions(+) create mode 100644 examples/wakustealthcommitments/README.md create mode 100644 examples/wakustealthcommitments/erc_5564_interface.nim create mode 100644 examples/wakustealthcommitments/nim.cfg create mode 100644 examples/wakustealthcommitments/node_spec.nim create mode 100644 examples/wakustealthcommitments/stealth_commitment_protocol.nim create mode 100644 examples/wakustealthcommitments/wakustealthcommitments.nim create mode 100644 examples/wakustealthcommitments/wire_spec.nim diff --git a/examples/wakustealthcommitments/README.md b/examples/wakustealthcommitments/README.md new file mode 100644 index 0000000000..f577188c14 --- /dev/null +++ b/examples/wakustealthcommitments/README.md @@ -0,0 +1,38 @@ +# wakustealthcommitments + +This application/tool/protocol is used to securely communicate requests and responses for the [Stealth Address Scheme](https://eips.ethereum.org/EIPS/eip-5564) + +Uses TWN config as default, and content topic: `/wakustealthcommitments/1/app/proto` + +## Usage + +1. Clone the erc-5564-bn254 repo and build the static lib +```sh +gh repo clone rymnc/erc-5564-bn254 +cd erc-5564-bn254 +cargo build --release --all-features +cp ./target/release/liberc_5564_bn254.a +``` + +> ![NOTE] +> This static library also includes the rln ffi library, so you don't need to build it separately. +> This is because using both of them separately brings in a lot of duplicate symbols. + +2. Build the wakustealthcommitments app +```sh +cd +source env.sh +nim c --out:build/wakustealthcommitments --verbosity:0 --hints:off -d:chronicles_log_level=INFO -d:git_version="v0.24.0-rc.0-62-g7da25c" -d:release --passL:-lm --passL:liberc_5564_bn254.a --debugger:native examples/wakustealthcommitments/wakustealthcommitments.nim +``` + +3. +```sh +./build/wakustealthcommitments \ + --rln-relay-eth-client-address: \ + --rln-relay-cred-path: \ + --rln-relay-cred-password: +``` + +This service listens for requests for stealth commitment/address generation, +partakes in the generation of said stealth commitment and then distributes the response to the mesh. + diff --git a/examples/wakustealthcommitments/erc_5564_interface.nim b/examples/wakustealthcommitments/erc_5564_interface.nim new file mode 100644 index 0000000000..94ed4accbb --- /dev/null +++ b/examples/wakustealthcommitments/erc_5564_interface.nim @@ -0,0 +1,135 @@ +## Nim wrappers for the functions defined in librln +when (NimMajor, NimMinor) < (1, 4): + {.push raises: [Defect].} +else: + {.push raises: [].} + +import stew/results + +###################################################################### +## ERC-5564-BN254 module APIs +###################################################################### + +type CErrorCode* = uint8 + +type CG1Projective* = object + x0: array[32, uint8] + +type CReturn*[T] = object + value: T + err_code: CErrorCode + +type CFr* = object + x0: array[32, uint8] + +type CStealthCommitment* = object + stealth_commitment: CG1Projective + view_tag: uint64 + +type CKeyPair* = object + private_key: CFr + public_key: CG1Projective + +proc drop_ffi_derive_public_key*(ptrx: ptr CReturn[CG1Projective]) {.importc: "drop_ffi_derive_public_key".} + +proc drop_ffi_generate_random_fr*(ptrx: ptr CReturn[CFr]) {.importc: "drop_ffi_generate_random_fr".} + +proc drop_ffi_generate_stealth_commitment*(ptrx: ptr CReturn[CStealthCommitment]) {.importc: "drop_ffi_generate_stealth_commitment".} + +proc drop_ffi_generate_stealth_private_key*(ptrx: ptr CReturn[CFr]) {.importc: "drop_ffi_generate_stealth_private_key".} + +proc drop_ffi_random_keypair*(ptrx: ptr CReturn[CKeyPair]) {.importc: "drop_ffi_random_keypair".} + +proc ffi_derive_public_key*(private_key: ptr CFr): (ptr CReturn[CG1Projective]) {.importc: "ffi_derive_public_key".} + +proc ffi_generate_random_fr*(): (ptr CReturn[CFr]) {.importc: "ffi_generate_random_fr".} + +proc ffi_generate_stealth_commitment*(viewing_public_key: ptr CG1Projective, + spending_public_key: ptr CG1Projective, + ephemeral_private_key: ptr CFr): (ptr CReturn[CStealthCommitment]) {.importc: "ffi_generate_stealth_commitment".} + +proc ffi_generate_stealth_private_key*(ephemeral_public_key: ptr CG1Projective, + spending_key: ptr CFr, + viewing_key: ptr CFr, + view_tag: ptr uint64): (ptr CReturn[CFr]) {.importc: "ffi_generate_stealth_private_key".} + +proc ffi_random_keypair*(): (ptr CReturn[CKeyPair]) {.importc: "ffi_random_keypair".} + + +## Nim wrappers and types for the ERC-5564-BN254 module + +type FFIResult[T] = Result[T, string] +type Fr = array[32, uint8] +type G1Projective = array[32, uint8] +type KeyPair* = object + private_key*: Fr + public_key*: G1Projective +type StealthCommitment* = object + stealth_commitment*: G1Projective + view_tag*: uint64 +type PrivateKey* = Fr +type PublicKey* = G1Projective + +proc generateRandomFr*(): FFIResult[Fr] = + let res_ptr = (ffi_generate_random_fr()) + let res_value = res_ptr[] + if res_value.err_code != 0: + drop_ffi_generate_random_fr(res_ptr) + return err("Error generating random field element: " & $res_value.err_code) + + let ret = res_value.value.x0 + drop_ffi_generate_random_fr(res_ptr) + return ok(ret) + +proc generateKeypair*(): FFIResult[KeyPair] = + let res_ptr = (ffi_random_keypair()) + let res_value = res_ptr[] + if res_value.err_code != 0: + drop_ffi_random_keypair(res_ptr) + return err("Error generating random keypair: " & $res_value.err_code) + + let ret = KeyPair(private_key: res_value.value.private_key.x0, public_key: res_value.value.public_key.x0) + drop_ffi_random_keypair(res_ptr) + return ok(ret) + +proc generateStealthCommitment*(viewing_public_key: G1Projective, + spending_public_key: G1Projective, + ephemeral_private_key: Fr): FFIResult[StealthCommitment] = + let viewing_public_key = CG1Projective(x0: viewing_public_key) + let viewing_public_key_ptr = unsafeAddr(viewing_public_key) + let spending_public_key = CG1Projective(x0: spending_public_key) + let spending_public_key_ptr = unsafeAddr(spending_public_key) + let ephemeral_private_key = CFr(x0: ephemeral_private_key) + let ephemeral_private_key_ptr = unsafeAddr(ephemeral_private_key) + + let res_ptr = (ffi_generate_stealth_commitment(viewing_public_key_ptr, spending_public_key_ptr, ephemeral_private_key_ptr)) + let res_value = res_ptr[] + if res_value.err_code != 0: + drop_ffi_generate_stealth_commitment(res_ptr) + return err("Error generating stealth commitment: " & $res_value.err_code) + + let ret = StealthCommitment(stealth_commitment: res_value.value.stealth_commitment.x0, view_tag: res_value.value.view_tag) + drop_ffi_generate_stealth_commitment(res_ptr) + return ok(ret) + +proc generateStealthPrivateKey*(ephemeral_public_key: G1Projective, + spending_key: Fr, + viewing_key: Fr, + view_tag: uint64): FFIResult[Fr] = + let ephemeral_public_key = CG1Projective(x0: ephemeral_public_key) + let ephemeral_public_key_ptr = unsafeAddr(ephemeral_public_key) + let spending_key = CFr(x0: spending_key) + let spending_key_ptr = unsafeAddr(spending_key) + let viewing_key = CFr(x0: viewing_key) + let viewing_key_ptr = unsafeAddr(viewing_key) + let view_tag_ptr = unsafeAddr(view_tag) + + let res_ptr = (ffi_generate_stealth_private_key(ephemeral_public_key_ptr, spending_key_ptr, viewing_key_ptr, view_tag_ptr)) + let res_value = res_ptr[] + if res_value.err_code != 0: + drop_ffi_generate_stealth_private_key(res_ptr) + return err("Error generating stealth private key: " & $res_value.err_code) + + let ret = res_value.value.x0 + drop_ffi_generate_stealth_private_key(res_ptr) + return ok(ret) diff --git a/examples/wakustealthcommitments/nim.cfg b/examples/wakustealthcommitments/nim.cfg new file mode 100644 index 0000000000..fd55a3e995 --- /dev/null +++ b/examples/wakustealthcommitments/nim.cfg @@ -0,0 +1,10 @@ +-d:chronicles_line_numbers +-d:discv5_protocol_id="d5waku" +-d:chronicles_runtime_filtering=on +-d:chronicles_sinks="textlines,json" +-d:chronicles_default_output_device=dynamic +# Disabling the following topics from nim-eth and nim-dnsdisc since some types cannot be serialized +-d:chronicles_disabled_topics="eth,dnsdisc.client" +-d:chronicles_log_level=INFO +# Results in empty output for some reason +#-d:"chronicles_enabled_topics=GossipSub:TRACE,WakuRelay:TRACE" diff --git a/examples/wakustealthcommitments/node_spec.nim b/examples/wakustealthcommitments/node_spec.nim new file mode 100644 index 0000000000..d2b1e81b01 --- /dev/null +++ b/examples/wakustealthcommitments/node_spec.nim @@ -0,0 +1,106 @@ +when (NimMajor, NimMinor) < (1, 4): + {.push raises: [Defect].} +else: + {.push raises: [].} + +import ../../apps/wakunode2/[networks_config, app, external_config] +import ../../waku/common/logging +import + std/[options, strutils, os, sequtils], + stew/shims/net as stewNet, + chronicles, + chronos, + metrics, + libbacktrace, + libp2p/crypto/crypto + +export + networks_config, + app, + logging, + options, + strutils, + os, + sequtils, + stewNet, + chronicles, + chronos, + metrics, + libbacktrace, + crypto + +proc setup*(): App = + const versionString = "version / git commit hash: " & app.git_version + let rng = crypto.newRng() + + let confRes = WakuNodeConf.load(version = versionString) + if confRes.isErr(): + error "failure while loading the configuration", error = $confRes.error + quit(QuitFailure) + + var conf = confRes.get() + + let twnClusterConf = ClusterConf.TheWakuNetworkConf() + if len(conf.shards) != 0: + conf.pubsubTopics = conf.shards.mapIt(twnClusterConf.pubsubTopics[it.uint16]) + else: + conf.pubsubTopics = twnClusterConf.pubsubTopics + + # Override configuration + conf.maxMessageSize = twnClusterConf.maxMessageSize + conf.clusterId = twnClusterConf.clusterId + conf.rlnRelay = twnClusterConf.rlnRelay + conf.rlnRelayEthContractAddress = twnClusterConf.rlnRelayEthContractAddress + conf.rlnRelayDynamic = twnClusterConf.rlnRelayDynamic + conf.rlnRelayBandwidthThreshold = twnClusterConf.rlnRelayBandwidthThreshold + conf.discv5Discovery = twnClusterConf.discv5Discovery + conf.discv5BootstrapNodes = + conf.discv5BootstrapNodes & twnClusterConf.discv5BootstrapNodes + conf.rlnEpochSizeSec = twnClusterConf.rlnEpochSizeSec + conf.rlnRelayUserMessageLimit = twnClusterConf.rlnRelayUserMessageLimit + + var wakunode2 = App.init(rng, conf) + ## Peer persistence + let res1 = wakunode2.setupPeerPersistence() + if res1.isErr(): + error "1/5 Setting up storage failed", error = $res1.error + quit(QuitFailure) + + debug "2/5 Retrieve dynamic bootstrap nodes" + + let res3 = wakunode2.setupDyamicBootstrapNodes() + if res3.isErr(): + error "2/5 Retrieving dynamic bootstrap nodes failed", error = $res3.error + quit(QuitFailure) + + debug "3/5 Initializing node" + + let res4 = wakunode2.setupWakuApp() + if res4.isErr(): + error "3/5 Initializing node failed", error = $res4.error + quit(QuitFailure) + + debug "4/5 Mounting protocols" + + var res5: Result[void, string] + try: + res5 = waitFor wakunode2.setupAndMountProtocols() + if res5.isErr(): + error "4/5 Mounting protocols failed", error = $res5.error + quit(QuitFailure) + except Exception: + error "4/5 Mounting protocols failed", error = getCurrentExceptionMsg() + quit(QuitFailure) + + debug "5/5 Starting node and mounted protocols" + + # set triggerSelf to false, we don't want to process our own stealthCommitments + wakunode2.node.wakuRelay.triggerSelf = false + + let res6 = wakunode2.startApp() + if res6.isErr(): + error "5/5 Starting node and protocols failed", error = $res6.error + quit(QuitFailure) + + info "Node setup complete" + return wakunode2 diff --git a/examples/wakustealthcommitments/stealth_commitment_protocol.nim b/examples/wakustealthcommitments/stealth_commitment_protocol.nim new file mode 100644 index 0000000000..c9cf0accee --- /dev/null +++ b/examples/wakustealthcommitments/stealth_commitment_protocol.nim @@ -0,0 +1,154 @@ +when (NimMajor, NimMinor) < (1, 4): + {.push raises: [Defect].} +else: + {.push raises: [].} + +import + stew/results, + ../../waku/common/logging, + ../../waku/waku_node, + ../../waku/waku_rln_relay, + ./erc_5564_interface as StealthCommitmentFFI, + ./node_spec, + ./wire_spec + +export + wire_spec, + logging + +type StealthCommitmentProtocol* = object + wakuApp: App + contentTopic: string + spendingKeyPair: StealthCommitmentFFI.KeyPair + viewingKeyPair: StealthCommitmentFFI.KeyPair + +proc deserialize(T: type StealthCommitmentFFI.PublicKey, v: SerializedKey): Result[T, string] = + # deserialize seq[byte] into array[32, uint8] + if v.len != 32: + return err("invalid key length") + var buf: array[32, uint8] + for i in 0.. 0: some(spendingPubKey) else: none(SerializedKey) + var viewingPubKey = newSeq[byte]() + discard ? pb.getField(3, viewingPubKey) + msg.viewingPubKey = if viewingPubKey.len > 0: some(viewingPubKey) else: none(SerializedKey) + + if msg.spendingPubKey.isSome() and msg.viewingPubKey.isSome(): + msg.stealthCommitment = none(SerializedKey) + msg.viewTag = none(uint64) + return ok(msg) + if msg.spendingPubKey.isSome() and msg.viewingPubKey.isNone(): + return err(ProtoError.RequiredFieldMissing) + if msg.spendingPubKey.isNone() and msg.viewingPubKey.isSome(): + return err(ProtoError.RequiredFieldMissing) + if msg.request == true and msg.spendingPubKey.isNone() and msg.viewingPubKey.isNone(): + return err(ProtoError.RequiredFieldMissing) + + + var stealthCommitment = newSeq[byte]() + discard ? pb.getField(4, stealthCommitment) + msg.stealthCommitment = if stealthCommitment.len > 0: some(stealthCommitment) else: none(SerializedKey) + + var ephemeralPubKey = newSeq[byte]() + discard ? pb.getField(5, ephemeralPubKey) + msg.ephemeralPubKey = if ephemeralPubKey.len > 0: some(ephemeralPubKey) else: none(SerializedKey) + + var viewTag: uint64 + discard ? pb.getField(6, viewTag) + msg.viewTag = if viewTag != 0: some(viewTag) else: none(uint64) + + if msg.stealthCommitment.isNone() and msg.viewTag.isNone() and msg.ephemeralPubKey.isNone(): + return err(ProtoError.RequiredFieldMissing) + + if msg.stealthCommitment.isSome() and msg.viewTag.isNone(): + return err(ProtoError.RequiredFieldMissing) + + if msg.stealthCommitment.isNone() and msg.viewTag.isSome(): + return err(ProtoError.RequiredFieldMissing) + + if msg.stealthCommitment.isSome() and msg.viewTag.isSome(): + msg.spendingPubKey = none(SerializedKey) + msg.viewingPubKey = none(SerializedKey) + + ok(msg) + +proc encode*(msg: WakuStealthCommitmentMsg): ProtoBuffer = + var serialised = initProtoBuffer() + + serialised.write(1, uint64(msg.request)) + + if msg.spendingPubKey.isSome(): + serialised.write(2, msg.spendingPubKey.get()) + if msg.viewingPubKey.isSome(): + serialised.write(3, msg.viewingPubKey.get()) + if msg.stealthCommitment.isSome(): + serialised.write(4, msg.stealthCommitment.get()) + if msg.ephemeralPubKey.isSome(): + serialised.write(5, msg.ephemeralPubKey.get()) + if msg.viewTag.isSome(): + serialised.write(6, msg.viewTag.get()) + + return serialised + +func toByteSeq*(str: string): seq[byte] {.inline.} = + ## Converts a string to the corresponding byte sequence. + @(str.toOpenArrayByte(0, str.high)) + +proc constructRequest*(spendingPubKey: SerializedKey, viewingPubKey: SerializedKey): WakuStealthCommitmentMsg = + WakuStealthCommitmentMsg(request: true, spendingPubKey: some(spendingPubKey), viewingPubKey: some(viewingPubKey)) + +proc constructResponse*(stealthCommitment: SerializedKey, ephemeralPubKey: SerializedKey, viewTag: uint64): WakuStealthCommitmentMsg = + WakuStealthCommitmentMsg(request: false, stealthCommitment: some(stealthCommitment), ephemeralPubKey: some(ephemeralPubKey), viewTag: some(viewTag)) \ No newline at end of file From a9d0e48164008b15e9669e0001fcf1a2e18767ca Mon Sep 17 00:00:00 2001 From: Aaryamann Challani <43716372+rymnc@users.noreply.github.com> Date: Wed, 6 Mar 2024 19:38:43 +0530 Subject: [PATCH 262/274] chore(rln_db_inspector): include in wakunode2 binary (#2292) --- apps/wakunode2/wakunode2.nim | 3 ++ docs/tutorial/rln-db-inspector.md | 36 ++++++++++++++++ tools/rln_db_inspector/README.md | 3 ++ tools/rln_db_inspector/external_config.nim | 47 --------------------- tools/rln_db_inspector/nim.cfg | 3 -- tools/rln_db_inspector/rln_db_inspector.nim | 9 +--- waku/factory/external_config.nim | 8 ++++ 7 files changed, 52 insertions(+), 57 deletions(-) create mode 100644 docs/tutorial/rln-db-inspector.md create mode 100644 tools/rln_db_inspector/README.md delete mode 100644 tools/rln_db_inspector/external_config.nim delete mode 100644 tools/rln_db_inspector/nim.cfg diff --git a/apps/wakunode2/wakunode2.nim b/apps/wakunode2/wakunode2.nim index 7f9661873d..c646ee3cc8 100644 --- a/apps/wakunode2/wakunode2.nim +++ b/apps/wakunode2/wakunode2.nim @@ -14,6 +14,7 @@ import libp2p/crypto/crypto import ../../tools/rln_keystore_generator/rln_keystore_generator, + ../../tools/rln_db_inspector/rln_db_inspector, ../../waku/common/logging, ../../waku/factory/external_config, ./networks_config, @@ -86,6 +87,8 @@ when isMainModule: case conf.cmd of generateRlnKeystore: doRlnKeystoreGenerator(conf) + of inspectRlnDb: + doInspectRlnDb(conf) of noCommand: # The Waku Network config (cluster-id=1) if conf.clusterId == 1: diff --git a/docs/tutorial/rln-db-inspector.md b/docs/tutorial/rln-db-inspector.md new file mode 100644 index 0000000000..397d8a3783 --- /dev/null +++ b/docs/tutorial/rln-db-inspector.md @@ -0,0 +1,36 @@ +# rln-db-inspector + +This document describes how to run and use the `rln-db-inspector` tool. +It is meant to be used to debug and fetch the metadata stored in the RLN tree db. + +## Pre-requisites + +1. An existing RLN tree db + +## Usage + +1. First, we compile the binary + + ```bash + make -j16 wakunode2 + ``` + This command will fetch the rln static library and link it automatically. + + +2. Define the arguments you wish to use + + ```bash + export RLN_TREE_DB_PATH="xxx" + ``` + +3. Run the db inspector + + ```bash + ./build/wakunode2 inspectRlnDb \ + --rln-relay-tree-path:$RLN_TREE_DB_PATH + ``` + + What this does is - + a. loads the tree db from the path provided + b. Logs out the metadata, including, number of leaves set, past 5 merkle roots, last synced block number + diff --git a/tools/rln_db_inspector/README.md b/tools/rln_db_inspector/README.md new file mode 100644 index 0000000000..11f5352ca1 --- /dev/null +++ b/tools/rln_db_inspector/README.md @@ -0,0 +1,3 @@ +# rln_db_inspector + +Documentation on running the `rln-db-inspector` can be found [here](../../docs/tutorial/rln-db-inspector.md) \ No newline at end of file diff --git a/tools/rln_db_inspector/external_config.nim b/tools/rln_db_inspector/external_config.nim deleted file mode 100644 index e6d37484e6..0000000000 --- a/tools/rln_db_inspector/external_config.nim +++ /dev/null @@ -1,47 +0,0 @@ -when (NimMajor, NimMinor) < (1, 4): - {.push raises: [Defect].} -else: - {.push raises: [].} - -import - stew/results, - chronos, - confutils, - confutils/defs, - confutils/toml/defs as confTomlDefs, - confutils/toml/std/net as confTomlNet, - libp2p/crypto/crypto, - libp2p/crypto/secp, - libp2p/multiaddress, - secp256k1 -import - ../../waku/common/confutils/envvar/defs as confEnvvarDefs, - ../../waku/common/confutils/envvar/std/net as confEnvvarNet - -export - confTomlDefs, - confTomlNet, - confEnvvarDefs, - confEnvvarNet - -type - RlnDbInspectorConf* = object - configFile* {. - desc: "Loads configuration from a TOML file (cmd-line parameters take precedence)", - name: "config-file" }: Option[InputFile] - - ## General node config - rlnRelayTreePath* {. - desc: "The path to the rln-relay tree", - defaultValue: "", - name: "rln-relay-tree-path" }: string - - -proc loadConfig*(T: type RlnDbInspectorConf): Result[T, string] = - try: - let conf = RlnDbInspectorConf.load() - if conf.rlnRelayTreePath == "": - return err("--rln-relay-tree-path must be set") - ok(conf) - except CatchableError, Exception: - err(getCurrentExceptionMsg()) diff --git a/tools/rln_db_inspector/nim.cfg b/tools/rln_db_inspector/nim.cfg deleted file mode 100644 index f3bae15902..0000000000 --- a/tools/rln_db_inspector/nim.cfg +++ /dev/null @@ -1,3 +0,0 @@ --d:chronicles_line_numbers --d:chronicles_runtime_filtering=on -#-d:"chronicles_enabled_topics=GossipSub:TRACE,WakuRelay:TRACE" diff --git a/tools/rln_db_inspector/rln_db_inspector.nim b/tools/rln_db_inspector/rln_db_inspector.nim index d7e076d144..de17fd12b1 100644 --- a/tools/rln_db_inspector/rln_db_inspector.nim +++ b/tools/rln_db_inspector/rln_db_inspector.nim @@ -16,18 +16,13 @@ import logScope: topics = "rln_db_inspector" -when isMainModule: - {.pop.} +proc doInspectRlnDb*(conf: WakuNodeConf) = # 1. load configuration - let conf = RlnDbInspectorConf.loadConfig().valueOr: - error "failure while loading the configuration", error - quit(1) - trace "configuration", conf = $conf # 2. initialize rlnInstance let rlnInstance = createRLNInstance(d=20, - tree_path = conf.rlnRelayTreePath).valueOr: + tree_path = conf.treePath).valueOr: error "failure while creating RLN instance", error quit(1) diff --git a/waku/factory/external_config.nim b/waku/factory/external_config.nim index 514bb09c25..d4040c4f1c 100644 --- a/waku/factory/external_config.nim +++ b/waku/factory/external_config.nim @@ -41,6 +41,7 @@ type EthRpcUrl = distinct string type StartUpCommand* = enum noCommand # default, runs waku generateRlnKeystore # generates a new RLN keystore + inspectRlnDb # Inspects a given RLN tree db, providing essential db stats type WakuNodeConf* = object @@ -103,6 +104,13 @@ type command defaultValue: noCommand }: StartUpCommand + of inspectRlnDb: + # have to change the name here since it counts as a duplicate, within noCommand + treePath* {. + desc: "Path to the RLN merkle tree sled db (https://github.com/spacejam/sled)", + defaultValue: "" + name: "rln-relay-tree-path" .}: string + of generateRlnKeystore: execute* {. desc: "Runs the registration function on-chain. By default, a dry-run will occur", From beba14dcaa00d298961e5072c762eb0b6e4a9211 Mon Sep 17 00:00:00 2001 From: Aaryamann Challani <43716372+rymnc@users.noreply.github.com> Date: Wed, 6 Mar 2024 23:59:07 +0530 Subject: [PATCH 263/274] fix(rln-relay): make nullifier log abide by epoch ordering (#2508) * fix(rln-relay): nullifier log abide by epoch ordering * fix: cleaner hasKey method, test * chore: idiomatic usage of results, error handling Co-authored-by: Ivan FB <128452529+Ivansete-status@users.noreply.github.com> --------- Co-authored-by: Ivan FB <128452529+Ivansete-status@users.noreply.github.com> --- tests/waku_rln_relay/test_waku_rln_relay.nim | 79 +++++++++++++++----- waku/waku_rln_relay/rln_relay.nim | 43 +++++------ 2 files changed, 77 insertions(+), 45 deletions(-) diff --git a/tests/waku_rln_relay/test_waku_rln_relay.nim b/tests/waku_rln_relay/test_waku_rln_relay.nim index 832d0242e1..7969976a06 100644 --- a/tests/waku_rln_relay/test_waku_rln_relay.nim +++ b/tests/waku_rln_relay/test_waku_rln_relay.nim @@ -632,30 +632,25 @@ suite "Waku rln relay": # check whether hasDuplicate correctly finds records with the same nullifiers but different secret shares # no duplicate for proof1 should be found, since the log is empty - let result1 = wakurlnrelay.hasDuplicate(proof1.extractMetadata().tryGet()) - require: - result1.isOk() - # no duplicate is found - result1.value == false + let result1 = wakurlnrelay.hasDuplicate(epoch, proof1.extractMetadata().tryGet()) + assert result1.isOk(), $result1.error + assert result1.value == false, "no duplicate should be found" # add it to the log - discard wakurlnrelay.updateLog(proof1.extractMetadata().tryGet()) + discard wakurlnrelay.updateLog(epoch, proof1.extractMetadata().tryGet()) - # # no duplicate for proof2 should be found, its nullifier differs from proof1 - let result2 = wakurlnrelay.hasDuplicate(proof2.extractMetadata().tryGet()) - require: - result2.isOk() - # no duplicate is found - result2.value == false + # no duplicate for proof2 should be found, its nullifier differs from proof1 + let result2 = wakurlnrelay.hasDuplicate(epoch, proof2.extractMetadata().tryGet()) + assert result2.isOk(), $result2.error + # no duplicate is found + assert result2.value == false, "no duplicate should be found" # add it to the log - discard wakurlnrelay.updateLog(proof2.extractMetadata().tryGet()) + discard wakurlnrelay.updateLog(epoch, proof2.extractMetadata().tryGet()) # proof3 has the same nullifier as proof1 but different secret shares, it should be detected as duplicate - let result3 = wakurlnrelay.hasDuplicate(proof3.extractMetadata().tryGet()) - require: - result3.isOk() - check: - # it is a duplicate - result3.value == true + let result3 = wakurlnrelay.hasDuplicate(epoch, proof3.extractMetadata().tryGet()) + assert result3.isOk(), $result3.error + # it is a duplicate + assert result3.value, "duplicate should be found" asyncTest "validateMessageAndUpdateLog test": let index = MembershipIndex(5) @@ -710,6 +705,52 @@ suite "Waku rln relay": msgValidate3 == MessageValidationResult.Valid msgValidate4 == MessageValidationResult.Invalid + asyncTest "validateMessageAndUpdateLog: multiple senders with same external nullifier": + let index1 = MembershipIndex(5) + let index2 = MembershipIndex(6) + + let rlnConf1 = WakuRlnConfig(rlnRelayDynamic: false, + rlnRelayCredIndex: some(index1), + rlnEpochSizeSec: 1, + rlnRelayTreePath: genTempPath("rln_tree", "waku_rln_relay_3")) + let wakuRlnRelay1 = (await WakuRlnRelay.new(rlnConf1)).valueOr: + raiseAssert "failed to create waku rln relay: " & $error + + let rlnConf2 = WakuRlnConfig(rlnRelayDynamic: false, + rlnRelayCredIndex: some(index2), + rlnEpochSizeSec: 1, + rlnRelayTreePath: genTempPath("rln_tree", "waku_rln_relay_4")) + let wakuRlnRelay2 = (await WakuRlnRelay.new(rlnConf2)).valueOr: + raiseAssert "failed to create waku rln relay: " & $error + # get the current epoch time + let time = epochTime() + + # create messages from different peers and append rln proofs to them + var + wm1 = WakuMessage(payload: "Valid message from sender 1".toBytes()) + # another message in the same epoch as wm1, it will break the messaging rate limit + wm2 = WakuMessage(payload: "Valid message from sender 2".toBytes()) + + + let + proofAdded1 = wakuRlnRelay1.appendRLNProof(wm1, time) + proofAdded2 = wakuRlnRelay2.appendRLNProof(wm2, time) + + # ensure proofs are added + assert proofAdded1.isOk(), "failed to append rln proof: " & $proofAdded1.error + assert proofAdded2.isOk(), "failed to append rln proof: " & $proofAdded2.error + + # validate messages + # validateMessage proc checks the validity of the message fields and adds it to the log (if valid) + let + msgValidate1 = wakuRlnRelay1.validateMessageAndUpdateLog(wm1, some(time)) + # since this message is from a different sender, it should be validated successfully + msgValidate2 = wakuRlnRelay1.validateMessageAndUpdateLog(wm2, some(time)) + + check: + msgValidate1 == MessageValidationResult.Valid + msgValidate2 == MessageValidationResult.Valid + test "toIDCommitment and toUInt256": # create an instance of rln let rlnInstance = createRLNInstanceWrapper() diff --git a/waku/waku_rln_relay/rln_relay.nim b/waku/waku_rln_relay/rln_relay.nim index 9599553fcf..d0a4583da2 100644 --- a/waku/waku_rln_relay/rln_relay.nim +++ b/waku/waku_rln_relay/rln_relay.nim @@ -79,7 +79,7 @@ proc createMembershipList*(rln: ptr RLN, n: int): RlnRelayResult[( type WakuRLNRelay* = ref object of RootObj # the log of nullifiers and Shamir shares of the past messages grouped per epoch - nullifierLog*: OrderedTable[Epoch, seq[ProofMetadata]] + nullifierLog*: OrderedTable[Epoch, Table[Nullifier, ProofMetadata]] lastEpoch*: Epoch # the epoch of the last published rln message rlnEpochSizeSec*: uint64 rlnMaxEpochGap*: uint64 @@ -103,58 +103,49 @@ proc stop*(rlnPeer: WakuRLNRelay) {.async: (raises: [Exception]).} = await rlnPeer.groupManager.stop() proc hasDuplicate*(rlnPeer: WakuRLNRelay, + epoch: Epoch, proofMetadata: ProofMetadata): RlnRelayResult[bool] = ## returns true if there is another message in the `nullifierLog` of the `rlnPeer` with the same ## epoch and nullifier as `proofMetadata`'s epoch and nullifier ## otherwise, returns false ## Returns an error if it cannot check for duplicates - let externalNullifier = proofMetadata.externalNullifier # check if the epoch exists - if not rlnPeer.nullifierLog.hasKey(externalNullifier): + let nullifier = proofMetadata.nullifier + if not rlnPeer.nullifierLog.hasKey(epoch): return ok(false) try: - if rlnPeer.nullifierLog[externalNullifier].contains(proofMetadata): + if rlnPeer.nullifierLog[epoch].hasKey(nullifier): # there is an identical record, mark it as spam return ok(true) - # check for a message with the same nullifier but different secret shares - let matched = rlnPeer.nullifierLog[externalNullifier].filterIt(( - it.nullifier == proofMetadata.nullifier) and ((it.shareX != proofMetadata.shareX) or - (it.shareY != proofMetadata.shareY))) - - if matched.len != 0: - # there is a duplicate - return ok(true) - # there is no duplicate return ok(false) - except KeyError as e: - return err("the epoch was not found") + except KeyError: + return err("the epoch was not found: " & getCurrentExceptionMsg()) proc updateLog*(rlnPeer: WakuRLNRelay, + epoch: Epoch, proofMetadata: ProofMetadata): RlnRelayResult[void] = ## saves supplied proofMetadata `proofMetadata` ## in the `nullifierLog` of the `rlnPeer` ## Returns an error if it cannot update the log - let externalNullifier = proofMetadata.externalNullifier - # check if the externalNullifier exists - if not rlnPeer.nullifierLog.hasKey(externalNullifier): - rlnPeer.nullifierLog[externalNullifier] = @[proofMetadata] + # check if the epoch exists + if not rlnPeer.nullifierLog.hasKeyOrPut(epoch, { proofMetadata.nullifier: proofMetadata }.toTable()): return ok() try: # check if an identical record exists - if rlnPeer.nullifierLog[externalNullifier].contains(proofMetadata): + if rlnPeer.nullifierLog[epoch].hasKeyOrPut(proofMetadata.nullifier, proofMetadata): + # the above condition could be `discarded` but it is kept for clarity, that slashing will + # be implemented here # TODO: slashing logic return ok() - # add proofMetadata to the log - rlnPeer.nullifierLog[externalNullifier].add(proofMetadata) return ok() - except KeyError as e: - return err("the external nullifier was not found") # should never happen + except KeyError: + return err("the epoch was not found: " & getCurrentExceptionMsg()) # should never happen proc getCurrentEpoch*(rlnPeer: WakuRLNRelay): Epoch = ## gets the current rln Epoch time @@ -249,7 +240,7 @@ proc validateMessage*(rlnPeer: WakuRLNRelay, if proofMetadataRes.isErr(): waku_rln_errors_total.inc(labelValues=["proof_metadata_extraction"]) return MessageValidationResult.Invalid - let hasDup = rlnPeer.hasDuplicate(proofMetadataRes.get()) + let hasDup = rlnPeer.hasDuplicate(msgEpoch, proofMetadataRes.get()) if hasDup.isErr(): waku_rln_errors_total.inc(labelValues=["duplicate_check"]) elif hasDup.value == true: @@ -282,7 +273,7 @@ proc validateMessageAndUpdateLog*( return MessageValidationResult.Invalid # insert the message to the log (never errors) - discard rlnPeer.updateLog(proofMetadataRes.get()) + discard rlnPeer.updateLog(msgProof.epoch, proofMetadataRes.get()) return result From 161a10ecb0e0e0a3c329876bcf5b705f1b7411e5 Mon Sep 17 00:00:00 2001 From: Ivan FB <128452529+Ivansete-status@users.noreply.github.com> Date: Wed, 6 Mar 2024 20:50:22 +0100 Subject: [PATCH 264/274] feat: Postgres partition implementation (#2506) * postgres: first step to implement partition management * postgres_driver: use of times.now().toTime().toUnix() instead of Moment.now() * postgres migrations: set new version to 2 * test_driver_postgres: use of assert instead of require and avoid using times.now() * postgres_driver: better implementation of the reset method with partitions * Remove createMessageTable, init, and deleteMessageTable procs * postgres: ensure we use the version 15.4 in tests * postgres_driver.nim: enhance debug logs partition addition * ci.yml: ensure logs are printed without colors * postgres_driver: starting the loop factory in an asynchronous task * postgres_driver: log partition name and size when removing a partition --- .github/workflows/ci.yml | 4 +- tests/postgres-docker-compose.yml | 2 +- tests/waku_archive/test_driver_postgres.nim | 52 ++- waku/waku_archive/driver.nim | 3 +- waku/waku_archive/driver/builder.nim | 13 + waku/waku_archive/driver/postgres_driver.nim | 11 +- .../driver/postgres_driver/migrations.nim | 2 +- .../postgres_driver/partitions_manager.nim | 105 +++++ .../postgres_driver/postgres_driver.nim | 395 +++++++++++++----- .../driver/queue_driver/queue_driver.nim | 3 +- .../driver/sqlite_driver/sqlite_driver.nim | 3 +- 11 files changed, 445 insertions(+), 148 deletions(-) create mode 100644 waku/waku_archive/driver/postgres_driver/partitions_manager.nim diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 481a5f82a5..ce99e29a34 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -13,7 +13,7 @@ concurrency: env: NPROC: 2 MAKEFLAGS: "-j${NPROC}" - NIMFLAGS: "--parallelBuild:${NPROC}" + NIMFLAGS: "--parallelBuild:${NPROC} --colors:off -d:chronicles_colors:none" jobs: changes: # changes detection @@ -115,7 +115,7 @@ jobs: fi if [ ${{ runner.os }} == "Linux" ]; then - sudo docker run --rm -d -e POSTGRES_PASSWORD=test123 -p 5432:5432 postgres:9.6-alpine + sudo docker run --rm -d -e POSTGRES_PASSWORD=test123 -p 5432:5432 postgres:15.4-alpine3.18 fi make V=1 LOG_LEVEL=DEBUG QUICK_AND_DIRTY_COMPILER=1 POSTGRES=1 test testwakunode2 diff --git a/tests/postgres-docker-compose.yml b/tests/postgres-docker-compose.yml index 99f93e6ab8..396a142575 100644 --- a/tests/postgres-docker-compose.yml +++ b/tests/postgres-docker-compose.yml @@ -2,7 +2,7 @@ version: "3.8" services: db: - image: postgres:9.6-alpine + image: postgres:15.4-alpine3.18 restart: always environment: POSTGRES_PASSWORD: test123 diff --git a/tests/waku_archive/test_driver_postgres.nim b/tests/waku_archive/test_driver_postgres.nim index 0f0d266052..92e6aad2b1 100644 --- a/tests/waku_archive/test_driver_postgres.nim +++ b/tests/waku_archive/test_driver_postgres.nim @@ -1,7 +1,7 @@ {.used.} import - std/[sequtils,times,options], + std/[sequtils,options], testutils/unittests, chronos import @@ -13,8 +13,6 @@ import ../testlib/testasync, ../testlib/postgres -proc now():int64 = getTime().toUnix() - proc computeTestCursor(pubsubTopic: PubsubTopic, message: WakuMessage): ArchiveCursor = @@ -56,7 +54,7 @@ suite "Postgres driver": # Actually, the diff randomly goes between 1 and 2 seconds. # although in theory it should spend 1s because we establish 100 # connections and we spawn 100 tasks that spend ~1s each. - require diff < 20 + assert diff < 20_000_000_000 asyncTest "Insert a message": const contentTopic = "test-content-topic" @@ -69,14 +67,14 @@ suite "Postgres driver": assert putRes.isOk(), putRes.error let storedMsg = (await driver.getAllMessages()).tryGet() - require: - storedMsg.len == 1 - storedMsg.all do (item: auto) -> bool: - let (pubsubTopic, actualMsg, digest, storeTimestamp) = item - actualMsg.contentTopic == contentTopic and - pubsubTopic == DefaultPubsubTopic and - toHex(computedDigest.data) == toHex(digest) and - toHex(actualMsg.payload) == toHex(msg.payload) + + assert storedMsg.len == 1 + + let (pubsubTopic, actualMsg, digest, storeTimestamp) = storedMsg[0] + assert actualMsg.contentTopic == contentTopic + assert pubsubTopic == DefaultPubsubTopic + assert toHex(computedDigest.data) == toHex(digest) + assert toHex(actualMsg.payload) == toHex(msg.payload) asyncTest "Insert and query message": const contentTopic1 = "test-content-topic-1" @@ -96,21 +94,21 @@ suite "Postgres driver": let countMessagesRes = await driver.getMessagesCount() - require countMessagesRes.isOk() and countMessagesRes.get() == 2 + assert countMessagesRes.isOk(), $countMessagesRes.error + assert countMessagesRes.get() == 2 var messagesRes = await driver.getMessages(contentTopic = @[contentTopic1]) - require messagesRes.isOk() - require messagesRes.get().len == 1 + assert messagesRes.isOk(), $messagesRes.error + assert messagesRes.get().len == 1 # Get both content topics, check ordering messagesRes = await driver.getMessages(contentTopic = @[contentTopic1, contentTopic2]) assert messagesRes.isOk(), messagesRes.error - require: - messagesRes.get().len == 2 and - messagesRes.get()[0][1].contentTopic == contentTopic1 + assert messagesRes.get().len == 2 + assert messagesRes.get()[0][1].contentTopic == contentTopic1 # Descending order messagesRes = await driver.getMessages(contentTopic = @[contentTopic1, @@ -118,9 +116,8 @@ suite "Postgres driver": ascendingOrder = false) assert messagesRes.isOk(), messagesRes.error - require: - messagesRes.get().len == 2 and - messagesRes.get()[0][1].contentTopic == contentTopic2 + assert messagesRes.get().len == 2 + assert messagesRes.get()[0][1].contentTopic == contentTopic2 # cursor # Get both content topics @@ -130,8 +127,8 @@ suite "Postgres driver": cursor = some( computeTestCursor(pubsubTopic1, messagesRes.get()[1][1]))) - require messagesRes.isOk() - require messagesRes.get().len == 1 + assert messagesRes.isOk() + assert messagesRes.get().len == 1 # Get both content topics but one pubsub topic messagesRes = await driver.getMessages(contentTopic = @[contentTopic1, @@ -139,16 +136,15 @@ suite "Postgres driver": pubsubTopic = some(pubsubTopic1)) assert messagesRes.isOk(), messagesRes.error - require: - messagesRes.get().len == 1 and - messagesRes.get()[0][1].contentTopic == contentTopic1 + assert messagesRes.get().len == 1 + assert messagesRes.get()[0][1].contentTopic == contentTopic1 # Limit messagesRes = await driver.getMessages(contentTopic = @[contentTopic1, contentTopic2], maxPageSize = 1) assert messagesRes.isOk(), messagesRes.error - require messagesRes.get().len == 1 + assert messagesRes.get().len == 1 asyncTest "Insert true duplicated messages": # Validates that two completely equal messages can not be stored. @@ -164,5 +160,5 @@ suite "Postgres driver": putRes = await driver.put(DefaultPubsubTopic, msg2, computeDigest(msg2), computeMessageHash(DefaultPubsubTopic, msg2), msg2.timestamp) - require not putRes.isOk() + assert not putRes.isOk() diff --git a/waku/waku_archive/driver.nim b/waku/waku_archive/driver.nim index fccb14bd10..49ab57debe 100644 --- a/waku/waku_archive/driver.nim +++ b/waku/waku_archive/driver.nim @@ -73,7 +73,8 @@ method deleteOldestMessagesNotWithinLimit*(driver: ArchiveDriver, Future[ArchiveDriverResult[void]] {.base, async.} = discard method decreaseDatabaseSize*(driver: ArchiveDriver, - targetSizeInBytes: int64): + targetSizeInBytes: int64, + forceRemoval: bool = false): Future[ArchiveDriverResult[void]] {.base, async.} = discard method close*(driver: ArchiveDriver): diff --git a/waku/waku_archive/driver/builder.nim b/waku/waku_archive/driver/builder.nim index e1c93e6a01..e32dce201f 100644 --- a/waku/waku_archive/driver/builder.nim +++ b/waku/waku_archive/driver/builder.nim @@ -108,6 +108,19 @@ proc new*(T: type ArchiveDriver, if migrateRes.isErr(): return err("ArchiveDriver build failed in migration: " & $migrateRes.error) + ## This should be started once we make sure the 'messages' table exists + ## Hence, this should be run after the migration is completed. + asyncSpawn driver.startPartitionFactory(onFatalErrorAction) + + info "waiting for a partition to be created" + for i in 0..<100: + if driver.containsAnyPartition(): + break + await sleepAsync(chronos.milliseconds(100)) + + if not driver.containsAnyPartition(): + onFatalErrorAction("a partition could not be created") + return ok(driver) else: diff --git a/waku/waku_archive/driver/postgres_driver.nim b/waku/waku_archive/driver/postgres_driver.nim index 496005cbec..c7e9083442 100644 --- a/waku/waku_archive/driver/postgres_driver.nim +++ b/waku/waku_archive/driver/postgres_driver.nim @@ -3,6 +3,13 @@ when (NimMajor, NimMinor) < (1, 4): else: {.push raises: [].} -import ./postgres_driver/postgres_driver +import + ./postgres_driver/postgres_driver, + ./postgres_driver/partitions_manager, + ./postgres_driver/postgres_healthcheck + +export + postgres_driver, + partitions_manager, + postgres_healthcheck -export postgres_driver diff --git a/waku/waku_archive/driver/postgres_driver/migrations.nim b/waku/waku_archive/driver/postgres_driver/migrations.nim index 74cfb4530b..92f658db95 100644 --- a/waku/waku_archive/driver/postgres_driver/migrations.nim +++ b/waku/waku_archive/driver/postgres_driver/migrations.nim @@ -13,7 +13,7 @@ import logScope: topics = "waku archive migration" -const SchemaVersion* = 1 # increase this when there is an update in the database schema +const SchemaVersion* = 2 # increase this when there is an update in the database schema proc breakIntoStatements*(script: string): seq[string] = ## Given a full migration script, that can potentially contain a list diff --git a/waku/waku_archive/driver/postgres_driver/partitions_manager.nim b/waku/waku_archive/driver/postgres_driver/partitions_manager.nim new file mode 100644 index 0000000000..a9d90d8e92 --- /dev/null +++ b/waku/waku_archive/driver/postgres_driver/partitions_manager.nim @@ -0,0 +1,105 @@ + +## This module is aimed to handle the creation and truncation of partition tables +## in order to limit the space occupied in disk by the database. +## +## The created partitions are referenced by the 'storedAt' field. +## + +import + std/deques +import + chronos, + chronicles + +logScope: + topics = "waku archive partitions_manager" + +## The time range has seconds resolution +type TimeRange* = tuple[beginning: int64, `end`: int64] + +type + Partition = object + name: string + timeRange: TimeRange + + PartitionManager* = ref object + partitions: Deque[Partition] # FIFO of partition table names. The first is the oldest partition + +proc new*(T: type PartitionManager): T = + return PartitionManager() + +proc getPartitionFromDateTime*(self: PartitionManager, + targetMoment: int64): + Result[Partition, string] = + ## Returns the partition name that might store a message containing the passed timestamp. + ## In order words, it simply returns the partition name which contains the given timestamp. + ## targetMoment - represents the time of interest, measured in seconds since epoch. + + if self.partitions.len == 0: + return err("There are no partitions") + + for partition in self.partitions: + let timeRange = partition.timeRange + + let beginning = timeRange.beginning + let `end` = timeRange.`end` + + if beginning <= targetMoment and targetMoment < `end`: + return ok(partition) + + return err("Couldn't find a partition table for given time: " & $targetMoment) + +proc getNewestPartition*(self: PartitionManager): Result[Partition, string] = + if self.partitions.len == 0: + return err("there are no partitions allocated") + + let newestPartition = self.partitions.peekLast + return ok(newestPartition) + +proc getOldestPartition*(self: PartitionManager): Result[Partition, string] = + if self.partitions.len == 0: + return err("there are no partitions allocated") + + let oldestPartition = self.partitions.peekFirst + return ok(oldestPartition) + +proc addPartitionInfo*(self: PartitionManager, + partitionName: string, + beginning: int64, + `end`: int64) = + ## The given partition range has seconds resolution. + ## We just store information of the new added partition merely to keep track of it. + let partitionInfo = Partition(name: partitionName, timeRange: (beginning, `end`)) + trace "Adding partition info" + self.partitions.addLast(partitionInfo) + +proc removeOldestPartitionName*(self: PartitionManager) = + ## Simply removed the partition from the tracked/known partitions queue. + ## Just remove it and ignore it. + discard self.partitions.popFirst() + +proc isEmpty*(self: PartitionManager): bool = + return self.partitions.len == 0 + +proc getLastMoment*(partition: Partition): int64 = + ## Considering the time range covered by the partition, this + ## returns the `end` time (number of seconds since epoch) of such range. + let lastTimeInSec = partition.timeRange.`end` + return lastTimeInSec + +proc containsMoment*(partition: Partition, time: int64): bool = + ## Returns true if the given moment is contained within the partition window, + ## 'false' otherwise. + ## time - number of seconds since epoch + if partition.timeRange.beginning <= time and + time < partition.timeRange.`end`: + return true + + return false + +proc getName*(partition: Partition): string = + return partition.name + +func `==`*(a, b: Partition): bool {.inline.} = + return a.name == b.name + diff --git a/waku/waku_archive/driver/postgres_driver/postgres_driver.nim b/waku/waku_archive/driver/postgres_driver/postgres_driver.nim index 71efa491d7..bfabc268c1 100644 --- a/waku/waku_archive/driver/postgres_driver/postgres_driver.nim +++ b/waku/waku_archive/driver/postgres_driver/postgres_driver.nim @@ -4,7 +4,7 @@ else: {.push raises: [].} import - std/[nre,options,sequtils,strutils,times,strformat], + std/[nre,options,sequtils,strutils,strformat,times], stew/[results,byteutils], db_postgres, postgres, @@ -16,33 +16,17 @@ import ../../common, ../../driver, ../../../common/databases/db_postgres as waku_postgres, - ./postgres_healthcheck - -export postgres_driver + ./postgres_healthcheck, + ./partitions_manager type PostgresDriver* = ref object of ArchiveDriver ## Establish a separate pools for read/write operations writeConnPool: PgAsyncPool readConnPool: PgAsyncPool -proc dropTableQuery(): string = - "DROP TABLE messages" - -proc dropVersionTableQuery(): string = - "DROP TABLE version" - -proc createTableQuery(): string = - "CREATE TABLE IF NOT EXISTS messages (" & - " pubsubTopic VARCHAR NOT NULL," & - " contentTopic VARCHAR NOT NULL," & - " payload VARCHAR," & - " version INTEGER NOT NULL," & - " timestamp BIGINT NOT NULL," & - " id VARCHAR NOT NULL," & - " messageHash VARCHAR NOT NULL," & - " storedAt BIGINT NOT NULL," & - " CONSTRAINT messageIndex PRIMARY KEY (messageHash)" & - ");" + ## Partition container + partitionMngr: PartitionManager + futLoopPartitionFactory: Future[void] const InsertRowStmtName = "InsertRow" const InsertRowStmtDefinition = @@ -111,52 +95,17 @@ proc new*(T: type PostgresDriver, if not isNil(onFatalErrorAction): asyncSpawn checkConnectivity(writeConnPool, onFatalErrorAction) - return ok(PostgresDriver(writeConnPool: writeConnPool, - readConnPool: readConnPool)) - -proc performWriteQuery*(s: PostgresDriver, - query: string): Future[ArchiveDriverResult[void]] {.async.} = - ## Executes a query that changes the database state - ## TODO: we can reduce the code a little with this proc - (await s.writeConnPool.pgQuery(query)).isOkOr: - return err(fmt"error in {query}: {error}") - - return ok() - -proc createMessageTable*(s: PostgresDriver): - Future[ArchiveDriverResult[void]] {.async.} = - - let execRes = await s.writeConnPool.pgQuery(createTableQuery()) - if execRes.isErr(): - return err("error in createMessageTable: " & execRes.error) - - return ok() - -proc deleteMessageTable(s: PostgresDriver): - Future[ArchiveDriverResult[void]] {.async.} = - - let execRes = await s.writeConnPool.pgQuery(dropTableQuery()) - if execRes.isErr(): - return err("error in deleteMessageTable: " & execRes.error) - - return ok() - -proc deleteVersionTable(s: PostgresDriver): - Future[ArchiveDriverResult[void]] {.async.} = - - let execRes = await s.writeConnPool.pgQuery(dropVersionTableQuery()) - if execRes.isErr(): - return err("error in deleteVersionTable: " & execRes.error) - - return ok() + let driver = PostgresDriver(writeConnPool: writeConnPool, + readConnPool: readConnPool, + partitionMngr: PartitionManager.new()) + return ok(driver) proc reset*(s: PostgresDriver): Future[ArchiveDriverResult[void]] {.async.} = - ## This is only used for testing purposes, to set a fresh database at the beginning of each test - (await s.deleteMessageTable()).isOkOr: - return err("error deleting message table: " & $error) - (await s.deleteVersionTable()).isOkOr: - return err("error deleting version table: " & $error) - return ok() + ## Clear the database partitions + let targetSize = 0 + let forceRemoval = true + let ret = await s.decreaseDatabaseSize(targetSize, forceRemoval) + return ret proc rowCallbackImpl(pqResult: ptr PGresult, outRows: var seq[(PubsubTopic, WakuMessage, seq[byte], Timestamp)]) = @@ -219,6 +168,8 @@ method put*(s: PostgresDriver, let version = $message.version let timestamp = $message.timestamp + debug "put PostgresDriver", timestamp = timestamp + return await s.writeConnPool.runStmt(InsertRowStmtName, InsertRowStmtDefinition, @[digest, @@ -258,6 +209,33 @@ method getAllMessages*(s: PostgresDriver): return ok(rows) +proc getPartitionsList(s: PostgresDriver): Future[ArchiveDriverResult[seq[string]]] {.async.} = + ## Retrieves the seq of partition table names. + ## e.g: @["messages_1708534333_1708534393", "messages_1708534273_1708534333"] + + var partitions: seq[string] + proc rowCallback(pqResult: ptr PGresult) = + for iRow in 0..= newestPartition.getLastMoment(): + debug "creating a new partition to contain current messages" + ## There is no partition to contain the current time. + ## This happens if the node has been stopped for quite a long time. + ## Then, let's create the needed partition to contain 'now'. + (await self.addPartition(now, PartitionsRangeInterval)).isOkOr: + onFatalError("could not add the next partition: " & $error) + + await sleepAsync(DefaultDatabasePartitionCheckTimeInterval) + +proc startPartitionFactory*(self: PostgresDriver, + onFatalError: OnFatalErrorHandler) {.async.} = + + self.futLoopPartitionFactory = self.loopPartitionFactory(onFatalError) + +proc getTableSize*(self: PostgresDriver, + tableName: string): Future[ArchiveDriverResult[string]] {.async.} = + ## Returns a human-readable representation of the size for the requested table. + ## tableName - table of interest. + + let tableSize = (await self.getStr(fmt""" + SELECT pg_size_pretty(pg_total_relation_size(C.oid)) AS "total_size" + FROM pg_class C + where relname = '{tableName}'""")).valueOr: + return err("error in getDatabaseSize: " & error) + + return ok(tableSize) + +proc removeOldestPartition(self: PostgresDriver, + forceRemoval: bool = false, ## To allow cleanup in tests + ): + Future[ArchiveDriverResult[void]] {.async.} = + ## Indirectly called from the retention policy + + let oldestPartition = self.partitionMngr.getOldestPartition().valueOr: + return err("could not remove oldest partition: " & $error) + + if not forceRemoval: + let now = times.now().toTime().toUnix() + let currentPartitionRes = self.partitionMngr.getPartitionFromDateTime(now) + if currentPartitionRes.isOk(): + ## The database contains a partition that would store current messages. + + if currentPartitionRes.get() == oldestPartition: + debug "Skipping to remove the current partition" + return ok() + + var partSize = "" + let partSizeRes = await self.getTableSize(oldestPartition.getName()) + if partSizeRes.isOk(): + partSize = partSizeRes.get() + + ## In the following lines is where the partition removal happens. + ## Detach and remove the partition concurrently to not block the parent table (messages) + let detachPartitionQuery = + "ALTER TABLE messages DETACH PARTITION " & oldestPartition.getName() & " CONCURRENTLY;" + debug "removeOldestPartition", query = detachPartitionQuery + (await self.performWriteQuery(detachPartitionQuery)).isOkOr: + return err(fmt"error in {detachPartitionQuery}: " & $error) + + ## Drop the partition + let dropPartitionQuery = "DROP TABLE " & oldestPartition.getName() + debug "removeOldestPartition drop partition", query = dropPartitionQuery + (await self.performWriteQuery(dropPartitionQuery)).isOkOr: + return err(fmt"error in {dropPartitionQuery}: " & $error) + + debug "removed partition", partition_name = oldestPartition.getName(), partition_size = partSize + self.partitionMngr.removeOldestPartitionName() + + return ok() + +proc containsAnyPartition*(self: PostgresDriver): bool = + return not self.partitionMngr.isEmpty() + +method decreaseDatabaseSize*(driver: PostgresDriver, + targetSizeInBytes: int64, + forceRemoval: bool = false): + Future[ArchiveDriverResult[void]] {.async.} = + var dbSize = (await driver.getDatabaseSize()).valueOr: + return err("decreaseDatabaseSize failed to get database size: " & $error) + + ## database size in bytes + var totalSizeOfDB: int64 = int64(dbSize) + + if totalSizeOfDB <= targetSizeInBytes: + return ok() + + debug "start reducing database size", targetSize = $targetSizeInBytes, currentSize = $totalSizeOfDB + + while totalSizeOfDB > targetSizeInBytes and driver.containsAnyPartition(): + (await driver.removeOldestPartition(forceRemoval)).isOkOr: + return err("decreaseDatabaseSize inside loop failed to remove oldest partition: " & $error) + + dbSize = (await driver.getDatabaseSize()).valueOr: + return err("decreaseDatabaseSize inside loop failed to get database size: " & $error) + + let newCurrentSize = int64(dbSize) + if newCurrentSize == totalSizeOfDB: + return err("the previous partition removal didn't clear database size") + + totalSizeOfDB = newCurrentSize + + debug "reducing database size", targetSize = $targetSizeInBytes, newCurrentSize = $totalSizeOfDB + + return ok() + method existsTable*(s: PostgresDriver, tableName: string): Future[ArchiveDriverResult[bool]] {.async.} = let query: string = fmt""" @@ -628,3 +799,5 @@ proc getCurrentVersion*(s: PostgresDriver): return err("error in getMessagesCount: " & $error) return ok(res) + + diff --git a/waku/waku_archive/driver/queue_driver/queue_driver.nim b/waku/waku_archive/driver/queue_driver/queue_driver.nim index 27d9ae9638..aebc53e6f6 100644 --- a/waku/waku_archive/driver/queue_driver/queue_driver.nim +++ b/waku/waku_archive/driver/queue_driver/queue_driver.nim @@ -322,7 +322,8 @@ method deleteOldestMessagesNotWithinLimit*(driver: QueueDriver, return err("interface method not implemented") method decreaseDatabaseSize*(driver: QueueDriver, - targetSizeInBytes: int64): + targetSizeInBytes: int64, + forceRemoval: bool = false): Future[ArchiveDriverResult[void]] {.async.} = return err("interface method not implemented") diff --git a/waku/waku_archive/driver/sqlite_driver/sqlite_driver.nim b/waku/waku_archive/driver/sqlite_driver/sqlite_driver.nim index 5a74928c3b..c8fd087e65 100644 --- a/waku/waku_archive/driver/sqlite_driver/sqlite_driver.nim +++ b/waku/waku_archive/driver/sqlite_driver/sqlite_driver.nim @@ -147,7 +147,8 @@ method deleteOldestMessagesNotWithinLimit*(s: SqliteDriver, return s.db.deleteOldestMessagesNotWithinLimit(limit) method decreaseDatabaseSize*(driver: SqliteDriver, - targetSizeInBytes: int64): + targetSizeInBytes: int64, + forceRemoval: bool = false): Future[ArchiveDriverResult[void]] {.async.} = ## To remove 20% of the outdated data from database From 8341864d30b7706f45f2d4d6e88919cac7af26f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?rich=CE=9Brd?= Date: Thu, 7 Mar 2024 13:53:03 -0400 Subject: [PATCH 265/274] feat(c-bindings): add function to dealloc nodes (#2499) --- library/libwaku.h | 5 +++++ library/libwaku.nim | 14 ++++++++++++++ library/waku_thread/waku_thread.nim | 6 +++++- 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/library/libwaku.h b/library/libwaku.h index 1dc7cf0aed..155cef02b6 100644 --- a/library/libwaku.h +++ b/library/libwaku.h @@ -35,6 +35,11 @@ int waku_stop(void* ctx, WakuCallBack callback, void* userData); +// Destroys an instance of a waku node created with waku_new +int waku_destroy(void* ctx, + WakuCallBack callback, + void* userData); + int waku_version(void* ctx, WakuCallBack callback, void* userData); diff --git a/library/libwaku.nim b/library/libwaku.nim index 41a1c316c6..9ad0100f19 100644 --- a/library/libwaku.nim +++ b/library/libwaku.nim @@ -100,6 +100,20 @@ proc waku_new(configJson: cstring, return ctx +proc waku_destroy(ctx: ptr Context, + callback: WakuCallBack, + userData: pointer): cint {.dynlib, exportc.} = + + if isNil(callback): + return RET_MISSING_CALLBACK + + waku_thread.stopWakuThread(ctx).isOkOr: + let msg = $error + callback(RET_ERR, unsafeAddr msg[0], cast[csize_t](len(msg)), userData) + return RET_ERR + + return RET_OK + proc waku_version(ctx: ptr Context, callback: WakuCallBack, userData: pointer): cint {.dynlib, exportc.} = diff --git a/library/waku_thread/waku_thread.nim b/library/waku_thread/waku_thread.nim index 14680b5725..079e22f299 100644 --- a/library/waku_thread/waku_thread.nim +++ b/library/waku_thread/waku_thread.nim @@ -95,12 +95,16 @@ proc createWakuThread*(): Result[ptr Context, string] = return ok(ctx) -proc stopWakuNodeThread*(ctx: ptr Context) = +proc stopWakuThread*(ctx: ptr Context): Result[void, string] = running.store(false) + let fireRes = ctx.reqSignal.fireSync() + if fireRes.isErr(): + return err("error in stopWakuThread: " & $fireRes.error) joinThread(ctx.thread) discard ctx.reqSignal.close() discard ctx.respSignal.close() freeShared(ctx) + return ok() proc sendRequestToWakuThread*(ctx: ptr Context, reqType: RequestType, From 1274b15d75d4150889623a0b52dfcb7afd1d48ae Mon Sep 17 00:00:00 2001 From: Aaryamann Challani <43716372+rymnc@users.noreply.github.com> Date: Fri, 8 Mar 2024 19:36:22 +0530 Subject: [PATCH 266/274] fix(rln-relay): handle empty metadata returned by getMetadata proc (#2516) * fix(rln-relay): silence error on startup when metadata is not found * chore: fix fetching value from option * fix: clarity of returned opt --- Makefile | 2 +- .../test_rln_group_manager_onchain.nim | 18 ++++++++++------- tests/waku_rln_relay/test_waku_rln_relay.nim | 20 +++++++++++++------ tools/rln_db_inspector/rln_db_inspector.nim | 7 ++++++- vendor/zerokit | 2 +- .../group_manager/on_chain/group_manager.nim | 8 ++++---- waku/waku_rln_relay/rln/wrappers.nim | 13 +++++++----- 7 files changed, 45 insertions(+), 25 deletions(-) diff --git a/Makefile b/Makefile index 2125f5d85c..b02c2296a9 100644 --- a/Makefile +++ b/Makefile @@ -137,7 +137,7 @@ LIBRLN_BUILDDIR := $(CURDIR)/vendor/zerokit ifeq ($(RLN_V2),true) LIBRLN_VERSION := v0.4.1 else -LIBRLN_VERSION := v0.3.4 +LIBRLN_VERSION := v0.3.6 endif ifeq ($(OS),Windows_NT) diff --git a/tests/waku_rln_relay/test_rln_group_manager_onchain.nim b/tests/waku_rln_relay/test_rln_group_manager_onchain.nim index 95191f31c4..d6da2c148d 100644 --- a/tests/waku_rln_relay/test_rln_group_manager_onchain.nim +++ b/tests/waku_rln_relay/test_rln_group_manager_onchain.nim @@ -226,12 +226,13 @@ suite "Onchain group manager": let metadataSetRes = manager.setMetadata() assert metadataSetRes.isOk(), metadataSetRes.error - let metadataRes = manager.rlnInstance.getMetadata() - assert metadataRes.isOk(), metadataRes.error - let metadata = metadataRes.get() - require: - metadata.chainId == 1337 - metadata.contractAddress == manager.ethContractAddress + let metadataOpt = manager.rlnInstance.getMetadata().valueOr: + raiseAssert $error + assert metadataOpt.isSome(), "metadata is not set" + let metadata = metadataOpt.get() + + assert metadata.chainId == 1337, "chainId is not equal to 1337" + assert metadata.contractAddress == manager.ethContractAddress, "contractAddress is not equal to " & manager.ethContractAddress await manager.stop() @@ -458,8 +459,11 @@ suite "Onchain group manager": await fut + let metadataOpt = manager.rlnInstance.getMetadata().valueOr: + raiseAssert $error + assert metadataOpt.isSome(), "metadata is not set" check: - manager.rlnInstance.getMetadata().get().validRoots == manager.validRoots.toSeq() + metadataOpt.get().validRoots == manager.validRoots.toSeq() await manager.stop() asyncTest "withdraw: should guard against uninitialized state": diff --git a/tests/waku_rln_relay/test_waku_rln_relay.nim b/tests/waku_rln_relay/test_waku_rln_relay.nim index 7969976a06..e0a831d650 100644 --- a/tests/waku_rln_relay/test_waku_rln_relay.nim +++ b/tests/waku_rln_relay/test_waku_rln_relay.nim @@ -260,18 +260,26 @@ suite "Waku rln relay": chainId: 1155511, contractAddress: "0x9c09146844c1326c2dbc41c451766c7138f88155")).isOk() - let metadataRes = rln.getMetadata() - - require: - metadataRes.isOk() - - let metadata = metadataRes.get() + let metadataOpt = rln.getMetadata().valueOr: + raiseAssert $error + assert metadataOpt.isSome(), "metadata is not set" + let metadata = metadataOpt.get() check: metadata.lastProcessedBlock == 128 metadata.chainId == 1155511 metadata.contractAddress == "0x9c09146844c1326c2dbc41c451766c7138f88155" + test "getMetadata: empty rln metadata": + # create an RLN instance which also includes an empty Merkle tree + let rln = createRLNInstanceWrapper().valueOr: + raiseAssert $error + let metadata = rln.getMetadata().valueOr: + raiseAssert $error + + check: + metadata.isNone() + test "Merkle tree consistency check between deletion and insertion": # create an RLN instance let rlnInstance = createRLNInstanceWrapper() diff --git a/tools/rln_db_inspector/rln_db_inspector.nim b/tools/rln_db_inspector/rln_db_inspector.nim index de17fd12b1..a770e71094 100644 --- a/tools/rln_db_inspector/rln_db_inspector.nim +++ b/tools/rln_db_inspector/rln_db_inspector.nim @@ -27,9 +27,14 @@ proc doInspectRlnDb*(conf: WakuNodeConf) = quit(1) # 3. get metadata - let metadata = rlnInstance.getMetadata().valueOr: + let metadataOpt = rlnInstance.getMetadata().valueOr: error "failure while getting RLN metadata", error quit(1) + + if metadataOpt.isNone(): + error "RLN metadata does not exist" + quit(1) + let metadata = metadataOpt.get() info "RLN metadata", lastProcessedBlock = metadata.lastProcessedBlock, chainId = metadata.chainId, diff --git a/vendor/zerokit b/vendor/zerokit index b903d8d740..7dd019b0a5 160000 --- a/vendor/zerokit +++ b/vendor/zerokit @@ -1 +1 @@ -Subproject commit b903d8d740e0b8b82057bcc5377ddce05ae5676b +Subproject commit 7dd019b0a5716e52169f396cecce961021fcac51 diff --git a/waku/waku_rln_relay/group_manager/on_chain/group_manager.nim b/waku/waku_rln_relay/group_manager/on_chain/group_manager.nim index 9ed6de2f65..07325d1d0e 100644 --- a/waku/waku_rln_relay/group_manager/on_chain/group_manager.nim +++ b/waku/waku_rln_relay/group_manager/on_chain/group_manager.nim @@ -666,11 +666,11 @@ method init*(g: OnchainGroupManager): Future[void] {.async.} = g.idCredentials = some(keystoreCred.identityCredential) - let metadataGetRes = g.rlnInstance.getMetadata() - if metadataGetRes.isErr(): + let metadataGetOptRes = g.rlnInstance.getMetadata() + if metadataGetOptRes.isErr(): warn "could not initialize with persisted rln metadata" - else: - let metadata = metadataGetRes.get() + elif metadataGetOptRes.get().isSome(): + let metadata = metadataGetOptRes.get().get() if metadata.chainId != uint64(g.chainId.get()): raise newException(ValueError, "persisted data: chain id mismatch") diff --git a/waku/waku_rln_relay/rln/wrappers.nim b/waku/waku_rln_relay/rln/wrappers.nim index 92e1c9d0cb..675918fcfc 100644 --- a/waku/waku_rln_relay/rln/wrappers.nim +++ b/waku/waku_rln_relay/rln/wrappers.nim @@ -500,7 +500,7 @@ proc setMetadata*(rlnInstance: ptr RLN, metadata: RlnMetadata): RlnRelayResult[v return err("could not set the metadata") return ok() -proc getMetadata*(rlnInstance: ptr RLN): RlnRelayResult[RlnMetadata] = +proc getMetadata*(rlnInstance: ptr RLN): RlnRelayResult[Option[RlnMetadata]] = ## gets the metadata of the RLN instance ## returns an error if the metadata could not be retrieved ## returns the metadata if the metadata is retrieved successfully @@ -514,6 +514,9 @@ proc getMetadata*(rlnInstance: ptr RLN): RlnRelayResult[RlnMetadata] = return err("could not get the metadata") trace "metadata length", metadataLen = metadata.len + if metadata.len == 0: + return ok(none(RlnMetadata)) + let lastProcessedBlockOffset = 0 chainIdOffset = lastProcessedBlockOffset + 8 @@ -536,7 +539,7 @@ proc getMetadata*(rlnInstance: ptr RLN): RlnRelayResult[RlnMetadata] = let validRootsBytes = metadataBytes[validRootsOffset..metadataBytes.high] validRoots = MerkleNodeSeq.deserialize(validRootsBytes) - return ok(RlnMetadata(lastProcessedBlock: lastProcessedBlock, - chainId: chainId, - contractAddress: "0x" & contractAddress, - validRoots: validRoots)) + return ok(some(RlnMetadata(lastProcessedBlock: lastProcessedBlock, + chainId: chainId, + contractAddress: "0x" & contractAddress, + validRoots: validRoots))) From b890f9c663c8590a364b0369c5ed5837b23f7328 Mon Sep 17 00:00:00 2001 From: Ivan FB <128452529+Ivansete-status@users.noreply.github.com> Date: Fri, 8 Mar 2024 19:43:55 +0100 Subject: [PATCH 267/274] rest: rm openapi defs. they are in https://github.com/waku-org/waku-rest-api (#2520) --- waku/waku_api/rest/admin/openapi.yaml | 115 ------ waku/waku_api/rest/debug/openapi.yaml | 64 --- waku/waku_api/rest/filter/openapi.yaml | 462 ---------------------- waku/waku_api/rest/health/openapi.yaml | 41 -- waku/waku_api/rest/lightpush/openapi.yaml | 84 ---- waku/waku_api/rest/relay/openapi.yaml | 244 ------------ waku/waku_api/rest/store/openapi.yaml | 204 ---------- 7 files changed, 1214 deletions(-) delete mode 100644 waku/waku_api/rest/admin/openapi.yaml delete mode 100644 waku/waku_api/rest/debug/openapi.yaml delete mode 100644 waku/waku_api/rest/filter/openapi.yaml delete mode 100644 waku/waku_api/rest/health/openapi.yaml delete mode 100644 waku/waku_api/rest/lightpush/openapi.yaml delete mode 100644 waku/waku_api/rest/relay/openapi.yaml delete mode 100644 waku/waku_api/rest/store/openapi.yaml diff --git a/waku/waku_api/rest/admin/openapi.yaml b/waku/waku_api/rest/admin/openapi.yaml deleted file mode 100644 index f6118ad702..0000000000 --- a/waku/waku_api/rest/admin/openapi.yaml +++ /dev/null @@ -1,115 +0,0 @@ -openapi: 3.0.3 -info: - title: Waku V2 node REST API - version: 1.0.0 - contact: - name: VAC Team - url: https://forum.vac.dev/ - -tags: - - name: admin - description: Admin REST API for WakuV2 node - -paths: - /admin/v1/peers: - get: - summary: Get connected peers info - description: Retrieve information about connected peers. - operationId: getPeerInfo - tags: - - admin - responses: - '200': - description: Information about a Waku v2 node. - content: - application/json: - schema: - type: array - items: - $ref: '#/components/schemas/WakuPeer' - '5XX': - description: Unexpected error. - post: - summary: Adds new peer(s) to connect with - description: Adds new peer(s) to connect with. - operationId: postPeerInfo - tags: - - admin - requestBody: - content: - application/json: - schema: - type: array - items: - type: string - responses: - '200': - description: Ok - '400': - description: Cannot connect to one or more peers. - '5XX': - description: Unexpected error. - /admin/v1/filter/subscriptions: - get: - summary: Get filter protocol subscribers - description: Retrieve information about the serving filter subscriptions - operationId: getFilterInfo - tags: - - admin - responses: - '200': - description: Information about subscribed filter peers and topics - content: - application/json: - schema: - type: array - items: - $ref: '#/components/schemas/FilterSubscription' - '400': - description: Filter Protocol is not mounted to the node - '5XX': - description: Unexpected error. - -components: - schemas: - WakuPeer: - type: object - required: - - multiaddr - - protocols - properties: - multiaddr: - type: string - protocols: - type: array - items: - type: object - required: - - protocol - - connected - properties: - protocol: - type: string - connected: - type: boolean - - FilterSubscription: - type: object - required: - - peerId - - filterCriteria - properties: - peerId: - type: string - filterCriteria: - type: array - items: - type: object - required: - - pubsubTopic - - contentTopic - properties: - pubsubTopic: - type: string - contentTopic: - type: string diff --git a/waku/waku_api/rest/debug/openapi.yaml b/waku/waku_api/rest/debug/openapi.yaml deleted file mode 100644 index af205a0656..0000000000 --- a/waku/waku_api/rest/debug/openapi.yaml +++ /dev/null @@ -1,64 +0,0 @@ -openapi: 3.0.3 -info: - title: Waku V2 node REST API - version: 1.0.0 - contact: - name: VAC Team - url: https://forum.vac.dev/ - -tags: - - name: debug - description: Debug REST API for WakuV2 node - -paths: - /debug/v1/info: - get: - summary: Get node info - description: Retrieve information about a Waku v2 node. - operationId: getNodeInfo - tags: - - debug - responses: - '200': - description: Information about a Waku v2 node. - content: - application/json: - schema: - $ref: '#/components/schemas/WakuInfo' - '4XX': - description: Bad request error. - '5XX': - description: Unexpected error. - - /debug/v1/version: - get: - summary: Get node version - description: Retrieve the Waku v2 node version. - operationId: getNodeVersion - tags: - - debug - responses: - '200': - description: The version of a Waku v2 node. - content: - text/plain: - schema: - type: string - '4XX': - description: Bad request error. - '5XX': - description: Unexpected error. - -components: - schemas: - WakuInfo: - type: object - properties: - listenAddresses: - type: array - items: - type: string - enrUri: - type: string - required: - - listenAddresses diff --git a/waku/waku_api/rest/filter/openapi.yaml b/waku/waku_api/rest/filter/openapi.yaml deleted file mode 100644 index 49ee6d9676..0000000000 --- a/waku/waku_api/rest/filter/openapi.yaml +++ /dev/null @@ -1,462 +0,0 @@ -openapi: 3.0.3 -info: - title: Waku V2 node REST API - version: 1.0.0 - contact: - name: VAC Team - url: https://forum.vac.dev/ -tags: - - name: filter - description: Filter REST API for WakuV2 node - -paths: - # Legacy support for v1 waku filter - # TODO: legacy endpoint, remove in the future - /filter/v1/subscriptions: - post: # post_waku_v2_filter_v1_subscription - summary: Subscribe a node to an array of topics - description: Subscribe a node to an array of content topics. - operationId: postSubscriptions - tags: - - filter - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/FilterLegacySubscribeRequest' - responses: - '200': - description: OK - content: - text/plain: - schema: - type: string - # TODO: Review the possible errors of this endpoint - '400': - description: Bad request. - content: - text/plain: - schema: - type: string - '5XX': - description: Unexpected error. - content: - text/plain: - schema: - type: string - - delete: # delete_waku_v2_filter_v1_subscription - summary: Unsubscribe a node from an array of topics - description: Unsubscribe a node from an array of content topics. - operationId: deleteSubscriptions - tags: - - filter - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/FilterLegacySubscribeRequest' - responses: - '200': - description: OK - content: - text/plain: - schema: - type: string - # TODO: Review the possible errors of this endpoint - '400': - description: Bad request. - content: - text/plain: - schema: - type: string - '404': - description: Not found. - content: - text/plain: - schema: - type: string - '5XX': - description: Unexpected error. - content: - text/plain: - schema: - type: string - - # TODO: legacy endpoint, remove in the future - /filter/v1/messages/{contentTopic}: - get: # get_waku_v2_filter_v1_messages - summary: Get the latest messages on the polled content topic - description: Get a list of messages that were received on a subscribed content topic after the last time this method was called. - operationId: getMessagesByTopic - tags: - - filter - parameters: - - in: path - name: contentTopic # Note the name is the same as in the path - required: true - schema: - type: string - description: Content topic of message - responses: - '200': - description: The latest messages on the polled topic. - content: - application/json: - schema: - $ref: '#/components/schemas/FilterGetMessagesResponse' - # TODO: Review the possible errors of this endpoint - '400': - description: Bad request. - content: - text/plain: - schema: - type: string - '404': - description: Not found. - content: - text/plain: - schema: - type: string - '5XX': - description: Unexpected error. - content: - text/plain: - schema: - type: string - - /filter/v2/subscriptions/{requestId}: - get: # get_waku_v2_filter_v2_subscription - ping - summary: Subscriber-ping - a peer can query if there is a registered subscription for it - description: | - Subscriber peer can query its subscription existence on service node. - Returns HTTP200 if exists and HTTP404 if not. - Client must not fill anything but requestId in the request body. - operationId: subscriberPing - tags: - - filter - parameters: - - in: path - name: requestId - required: true - schema: - type: string - description: Id of ping request - responses: - '200': - description: OK - content: - application/json: - schema: - $ref: '#/components/schemas/FilterSubscriptionResponse' - '400': - description: Bad request. - content: - application/json: - schema: - $ref: '#/components/schemas/FilterSubscriptionResponse' - '404': - description: Not found. - content: - application/json: - schema: - $ref: '#/components/schemas/FilterSubscriptionResponse' - '5XX': - description: Unexpected error. - content: - application/json: - schema: - $ref: '#/components/schemas/FilterSubscriptionResponse' - - /filter/v2/subscriptions: - post: # post_waku_v2_filter_v2_subscription - summary: Subscribe a peer to an array of content topics under a pubsubTopic - description: | - Subscribe a peer to an array of content topics under a pubsubTopic. - - It is allowed to refresh or add new content topic to an existing subscription. - - Fields pubsubTopic and contentFilters must be filled. - operationId: postSubscriptions - tags: - - filter - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/FilterSubscribeRequest' - responses: - '200': - description: OK - content: - application/json: - schema: - $ref: '#/components/schemas/FilterSubscriptionResponse' - # TODO: Review the possible errors of this endpoint - '400': - description: Bad request. - content: - application/json: - schema: - $ref: '#/components/schemas/FilterSubscriptionResponse' - '404': - description: Not found. - content: - application/json: - schema: - $ref: '#/components/schemas/FilterSubscriptionResponse' - '5XX': - description: Unexpected error. - content: - application/json: - schema: - $ref: '#/components/schemas/FilterSubscriptionResponse' - - put: # put_waku_v2_filter_v2_subscription - summary: Modify existing subscription of a peer under a pubsubTopic - description: | - Modify existing subscription of a peer under a pubsubTopic. - - It is allowed to refresh or add new content topic to an existing subscription. - - Fields pubsubTopic and contentFilters must be filled. - operationId: putSubscriptions - tags: - - filter - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/FilterSubscribeRequest' - responses: - '200': - description: OK - content: - application/json: - schema: - $ref: '#/components/schemas/FilterSubscriptionResponse' - # TODO: Review the possible errors of this endpoint - '400': - description: Bad request. - content: - application/json: - schema: - $ref: '#/components/schemas/FilterSubscriptionResponse' - '404': - description: Not found. - content: - application/json: - schema: - $ref: '#/components/schemas/FilterSubscriptionResponse' - '5XX': - description: Unexpected error. - content: - application/json: - schema: - $ref: '#/components/schemas/FilterSubscriptionResponse' - - - delete: # delete_waku_v2_filter_v2_subscription - summary: Unsubscribe a peer from content topics - description: | - Unsubscribe a peer from content topics - Only that subscription will be removed which matches existing. - operationId: deleteSubscriptions - tags: - - filter - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/FilterUnsubscribeRequest' - responses: - '200': - description: OK - content: - application/json: - schema: - $ref: '#/components/schemas/FilterSubscriptionResponse' - '400': - description: Bad request. - content: - application/json: - schema: - $ref: '#/components/schemas/FilterSubscriptionResponse' - '404': - description: Not found. - content: - application/json: - schema: - $ref: '#/components/schemas/FilterSubscriptionResponse' - '5XX': - description: Unexpected error. - content: - application/json: - schema: - $ref: '#/components/schemas/FilterSubscriptionResponse' - /filter/v2/subscriptions/all: - delete: # delete_waku_v2_filter_v2_subscription - summary: Unsubscribe a peer from all content topics - description: | - Unsubscribe a peer from all content topics - operationId: deleteAllSubscriptions - tags: - - filter - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/FilterUnsubscribeAllRequest' - responses: - '200': - description: OK - content: - application/json: - schema: - $ref: '#/components/schemas/FilterSubscriptionResponse' - '400': - description: Bad request. - content: - application/json: - schema: - $ref: '#/components/schemas/FilterSubscriptionResponse' - '404': - description: Not found. - content: - application/json: - schema: - $ref: '#/components/schemas/FilterSubscriptionResponse' - '5XX': - description: Unexpected error. - content: - application/json: - schema: - $ref: '#/components/schemas/FilterSubscriptionResponse' - /filter/v2/messages/{contentTopic}: - get: # get_waku_v2_filter_v2_messages - summary: Get the latest messages on the polled content topic - description: Get a list of messages that were received on a subscribed content topic after the last time this method was called. - operationId: getMessagesByTopic - tags: - - filter - parameters: - - in: path - name: contentTopic # Note the name is the same as in the path - required: true - schema: - type: string - description: Content topic of message - responses: - '200': - description: The latest messages on the polled topic. - content: - application/json: - schema: - $ref: '#/components/schemas/FilterGetMessagesResponse' - # TODO: Review the possible errors of this endpoint - '400': - description: Bad request. - content: - text/plain: - schema: - type: string - '404': - description: Not found. - content: - text/plain: - schema: - type: string - '5XX': - description: Unexpected error. - content: - text/plain: - schema: - type: string - -components: - schemas: - PubSubTopic: - type: string - ContentTopic: - type: string - - FilterWakuMessage: - type: object - properties: - payload: - type: string - format: byte - contentTopic: - $ref: '#/components/schemas/ContentTopic' - version: - type: number - timestamp: - type: number - required: - - payload - - FilterLegacySubscribeRequest: - type: object - properties: - contentFilters: - type: array - items: - $ref: '#/components/schemas/ContentTopic' - pubsubTopic: - $ref: "#/components/schemas/PubSubTopic" - required: - - contentFilters - - FilterGetMessagesResponse: - type: array - items: - $ref: '#/components/schemas/FilterWakuMessage' - - FilterSubscribeRequest: - type: object - properties: - requestId: - type: string - contentFilters: - type: array - items: - $ref: '#/components/schemas/ContentTopic' - pubsubTopic: - $ref: "#/components/schemas/PubSubTopic" - required: - - requestId - - contentFilters - - pubsubTopic - - FilterUnsubscribeRequest: - type: object - properties: - requestId: - type: string - contentFilters: - type: array - items: - $ref: '#/components/schemas/ContentTopic' - pubsubTopic: - $ref: "#/components/schemas/PubSubTopic" - required: - - requestId - - contentFilters - - FilterUnsubscribeAllRequest: - type: object - properties: - requestId: - type: string - required: - - requestId - - FilterSubscriptionResponse: - type: object - properties: - requestId: - type: string - statusDesc: - type: string - required: - - requestId diff --git a/waku/waku_api/rest/health/openapi.yaml b/waku/waku_api/rest/health/openapi.yaml deleted file mode 100644 index f433800c2a..0000000000 --- a/waku/waku_api/rest/health/openapi.yaml +++ /dev/null @@ -1,41 +0,0 @@ -openapi: 3.0.3 -info: - title: Waku V2 node REST API - version: 1.0.0 - contact: - name: VAC Team - url: https://forum.vac.dev/ - -tags: - - name: health - description: Healt check REST API for WakuV2 node - -paths: - /health: - get: - summary: Get node health status - description: Retrieve readiness of a Waku v2 node. - operationId: healthcheck - tags: - - health - responses: - '200': - description: Waku v2 node is up and running. - content: - text/plain: - schema: - type: string - example: Node is healty - '500': - description: Internal server error - content: - text/plain: - schema: - type: string - '503': - description: Node not initialized or having issues - content: - text/plain: - schema: - type: string - example: Node is not initialized diff --git a/waku/waku_api/rest/lightpush/openapi.yaml b/waku/waku_api/rest/lightpush/openapi.yaml deleted file mode 100644 index e9e8162b72..0000000000 --- a/waku/waku_api/rest/lightpush/openapi.yaml +++ /dev/null @@ -1,84 +0,0 @@ -openapi: 3.0.3 -info: - title: Waku V2 node REST API - version: 1.0.0 - contact: - name: VAC Team - url: https://forum.vac.dev/ - -tags: - - name: lightpush - description: Lightpush REST API for WakuV2 node - -paths: - /lightpush/v1/message: - post: - summary: Request a message relay from a LightPush service provider - description: Push a message to be relayed on a PubSub topic. - operationId: postMessagesToPubsubTopic - tags: - - lightpush - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/PushRequest' - responses: - '200': - description: OK - content: - text/plain: - schema: - type: string - '400': - description: Bad request. - content: - text/plain: - schema: - type: string - '500': - description: Internal server error - content: - text/plain: - schema: - type: string - '503': - description: Service not available - content: - text/plain: - schema: - type: string - -components: - schemas: - PubsubTopic: - type: string - - ContentTopic: - type: string - - WakuMessage: - type: object - properties: - payload: - type: string - format: byte - contentTopic: - $ref: '#/components/schemas/ContentTopic' - version: - type: number - timestamp: - type: number - required: - - payload - - contentTopic - - PushRequest: - type: object - properties: - pubsubTopic: - $ref: '#/components/schemas/PubsubTopic' - message: - $ref: '#/components/schemas/WakuMessage' - required: - - message diff --git a/waku/waku_api/rest/relay/openapi.yaml b/waku/waku_api/rest/relay/openapi.yaml deleted file mode 100644 index 9e20653adc..0000000000 --- a/waku/waku_api/rest/relay/openapi.yaml +++ /dev/null @@ -1,244 +0,0 @@ -openapi: 3.0.3 -info: - title: Waku V2 node REST API - version: 1.0.0 - contact: - name: VAC Team - url: https://forum.vac.dev/ - -tags: - - name: relay - description: Relay REST API for WakuV2 node - -paths: - /relay/v1/messages/{pubsubTopic}: # Note the plural in messages - get: # get_waku_v2_relay_v1_messages - summary: Get the latest messages on the polled topic - description: Get a list of messages that were received on a subscribed PubSub topic after the last time this method was called. - operationId: getMessagesByTopic - tags: - - relay - parameters: - - in: path - name: pubsubTopic # Note the name is the same as in the path - required: true - schema: - type: string - description: The user ID - responses: - '200': - description: The latest messages on the polled topic. - content: - application/json: - schema: - $ref: '#/components/schemas/RelayGetMessagesResponse' - '4XX': - description: Bad request. - '5XX': - description: Unexpected error. - - post: # post_waku_v2_relay_v1_message - summary: Publish a message to be relayed - description: Publishes a message to be relayed on a PubSub topic. - operationId: postMessagesToTopic - tags: - - relay - parameters: - - in: path - name: pubsubTopic # Note the name is the same as in the path - description: The messages content topic - required: true - schema: - $ref: '#/components/schemas/RelayPostMessagesRequest' - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/RelayPostMessagesRequest' - responses: - '200': - description: OK - '4XX': - description: Bad request. - '5XX': - description: Unexpected error. - - /relay/v1/subscriptions: - post: # post_waku_v2_relay_v1_subscriptions - summary: Subscribe a node to an array of topics - description: Subscribe a node to an array of PubSub topics. - operationId: postSubscriptions - tags: - - relay - requestBody: - content: - application/json: - schema: - type array: - items: - $ref: '#/components/schemas/PubsubTopic' - responses: - '200': - description: OK - content: - text/plain: - schema: - type: string - '4XX': - description: Bad request. - '5XX': - description: Unexpected error. - - delete: # delete_waku_v2_relay_v1_subscriptions - summary: Unsubscribe a node from an array of topics - description: Unsubscribe a node from an array of PubSub topics. - operationId: deleteSubscriptions - tags: - - relay - requestBody: - content: - application/json: - schema: - type array: - items: - $ref: '#/components/schemas/PubsubTopic' - responses: - '200': - description: OK - content: - text/plain: - schema: - type: string - '4XX': - description: Bad request. - '5XX': - description: Unexpected error. - - /relay/v1/auto/messages/{contentTopic}: # Note the plural in messages - get: # get_waku_v2_relay_v1_auto_messages - summary: Get the latest messages on the polled topic - description: Get a list of messages that were received on a subscribed Content topic after the last time this method was called. - operationId: getMessagesByTopic - tags: - - relay - parameters: - - in: path - name: contentTopic # Note the name is the same as in the path - required: true - schema: - type: string - description: The user ID - responses: - '200': - description: The latest messages on the polled topic. - content: - application/json: - schema: - $ref: '#/components/schemas/RelayGetMessagesResponse' - '4XX': - description: Bad request. - '5XX': - description: Unexpected error. - - /relay/v1/auto/messages: # Note the plural in messages - post: # post_waku_v2_relay_v1_auto_message - summary: Publish a message to be relayed - description: Publishes a message to be relayed on a Content topic. - operationId: postMessagesToTopic - tags: - - relay - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/RelayPostMessagesRequest' - responses: - '200': - description: OK - '4XX': - description: Bad request. - '5XX': - description: Unexpected error. - - /relay/v1/auto/subscriptions: - post: # post_waku_v2_relay_v1_auto_subscriptions - summary: Subscribe a node to an array of topics - description: Subscribe a node to an array of Content topics. - operationId: postSubscriptions - tags: - - relay - requestBody: - content: - application/json: - schema: - type array: - items: - $ref: '#/components/schemas/ContentTopic' - responses: - '200': - description: OK - content: - text/plain: - schema: - type: string - '4XX': - description: Bad request. - '5XX': - description: Unexpected error. - - delete: # delete_waku_v2_relay_v1_auto_subscriptions - summary: Unsubscribe a node from an array of topics - description: Unsubscribe a node from an array of Content topics. - operationId: deleteSubscriptions - tags: - - relay - requestBody: - content: - application/json: - schema: - type array: - items: - $ref: '#/components/schemas/ContentTopic' - responses: - '200': - description: OK - content: - text/plain: - schema: - type: string - '4XX': - description: Bad request. - '5XX': - description: Unexpected error. - - -components: - schemas: - PubSubTopic: - type: string - ContentTopic: - type: string - - RelayWakuMessage: - type: object - properties: - payload: - type: string - format: byte - contentTopic: - $ref: '#/components/schemas/ContentTopic' - version: - type: number - timestamp: - type: number - required: - - payload - - RelayGetMessagesResponse: - type: array - items: - $ref: '#/components/schemas/RelayWakuMessage' - - RelayPostMessagesRequest: - $ref: '#/components/schemas/RelayWakuMessage' - \ No newline at end of file diff --git a/waku/waku_api/rest/store/openapi.yaml b/waku/waku_api/rest/store/openapi.yaml deleted file mode 100644 index fdd552e192..0000000000 --- a/waku/waku_api/rest/store/openapi.yaml +++ /dev/null @@ -1,204 +0,0 @@ -openapi: 3.0.3 -info: - title: Waku V2 node REST API - version: 1.0.0 - contact: - name: VAC Team - url: https://forum.vac.dev/ - -tags: - - name: store - description: Store REST API for WakuV2 node - -paths: - /store/v1/messages: - get: - summary: Gets message history - description: > - Retrieves WakuV2 message history. The returned history - can be potentially filtered by optional request parameters. - operationId: getMessageHistory - tags: - - store - parameters: - - name: peerAddr - in: query - schema: - type: string - required: true - description: > - P2P fully qualified peer multiaddress - in the format `(ip4|ip6)/tcp/p2p/$peerId` and URL-encoded. - example: '%2Fip4%2F127.0.0.1%2Ftcp%2F60001%2Fp2p%2F16Uiu2HAmVFXtAfSj4EiR7mL2KvL4EE2wztuQgUSBoj2Jx2KeXFLN' - - - name: pubsubTopic - in: query - schema: - type: string - description: > - The pubsub topic on which a WakuMessage is published. - If left empty, no filtering is applied. - It is also intended for pagination purposes. - It should be a URL-encoded string. - example: 'my%20pubsub%20topic' - - - name: contentTopics - in: query - schema: string - description: > - Comma-separated list of content topics. When specified, - only WakuMessages that are linked to any of the given - content topics will be delivered in the get response. - It should be a URL-encoded-comma-separated string. - example: 'my%20first%20content%20topic%2Cmy%20second%20content%20topic%2Cmy%20third%20content%20topic' - - - name: startTime - in: query - schema: - type: string - description: > - The inclusive lower bound on the timestamp of - queried WakuMessages. This field holds the - Unix epoch time in nanoseconds as a 64-bits - integer value. - example: '1680590945000000000' - - - name: endTime - in: query - schema: - type: string - description: > - The inclusive upper bound on the timestamp of - queried WakuMessages. This field holds the - Unix epoch time in nanoseconds as a 64-bits - integer value. - example: '1680590945000000000' - - - name: senderTime - in: query - schema: - type: string - description: > - Cursor field intended for pagination purposes. - Represents the Unix time in nanoseconds at which a message was generated. - It could be empty for retrieving the first page, - and will be returned from the GET response so that - it can be part of the next page request. - example: '1680590947000000000' - - - name: storeTime - in: query - schema: - type: string - description: > - Cursor field intended for pagination purposes. - Represents the Unix time in nanoseconds at which a message was stored. - It could be empty for retrieving the first page, - and will be returned from the GET response so that - it can be part of the next page request. - example: '1680590945000000000' - - - name: digest - in: query - schema: - type: string - description: > - Cursor field intended for pagination purposes. - URL-base64-encoded string computed as a hash of the - a message content topic plus a message payload. - It could be empty for retrieving the first page, - and will be returned from the GET response so that - it can be part of the next page request. - example: 'Gc4ACThW5t2QQO82huq3WnDv%2FapPPJpD%2FwJfxDxAnR0%3D' - - - name: pageSize - in: query - schema: - type: string - description: > - Number of messages to retrieve per page - example: '5' - - - name: ascending - in: query - schema: - type: string - description: > - "true" for paging forward, "false" for paging backward. - If not specified or if specified with an invalid value, the default is "true". - example: "true" - - responses: - '200': - description: WakuV2 message history. - content: - application/json: - schema: - $ref: '#/components/schemas/StoreResponse' - '400': - description: Bad request error. - content: - text/plain: - type: string - '412': - description: Precondition failed. - content: - text/plain: - type: string - '500': - description: Internal server error. - content: - text/plain: - type: string - -components: - schemas: - StoreResponse: - type: object - properties: - messages: - type: array - items: - $ref: '#/components/schemas/WakuMessage' - cursor: - $ref: '#/components/schemas/HistoryCursor' - error_message: - type: string - required: - - messages - - HistoryCursor: - type: object - properties: - pubsub_topic: - type: string - sender_time: - type: string - store_time: - type: string - digest: - type: string - required: - - pubsub_topic - - sender_time - - store_time - - digest - - WakuMessage: - type: object - properties: - payload: - type: string - content_topic: - type: string - version: - type: integer - format: int32 - timestamp: - type: integer - format: int64 - ephemeral: - type: boolean - required: - - payload - - content_topic From dcc88ee0b2223b1545006878003d33100f40dd07 Mon Sep 17 00:00:00 2001 From: gabrielmer <101006718+gabrielmer@users.noreply.github.com> Date: Fri, 8 Mar 2024 16:46:42 -0600 Subject: [PATCH 268/274] chore: migrating logic from wakunode2.nim to node_factory.nim (#2504) --- apps/wakunode2/app.nim | 159 ++++++++---------------- apps/wakunode2/wakunode2.nim | 55 ++------ tests/wakunode2/test_app.nim | 51 +++----- waku/factory/node_factory.nim | 54 +++++++- waku/node/peer_manager/peer_manager.nim | 2 +- 5 files changed, 129 insertions(+), 192 deletions(-) diff --git a/apps/wakunode2/app.nim b/apps/wakunode2/app.nim index de66279019..da842be05d 100644 --- a/apps/wakunode2/app.nim +++ b/apps/wakunode2/app.nim @@ -65,13 +65,10 @@ type App* = object version: string conf: WakuNodeConf - netConf: NetConfig rng: ref HmacDrbgContext key: crypto.PrivateKey - record: Record wakuDiscv5: Option[WakuDiscoveryV5] - peerStore: Option[WakuPeerStorage] dynamicBootstrapNodes: seq[RemotePeerInfo] node: WakuNode @@ -88,74 +85,43 @@ func node*(app: App): WakuNode = func version*(app: App): string = app.version - ## Initialisation -proc init*(T: type App, rng: ref HmacDrbgContext, conf: WakuNodeConf): T = - let key = - if conf.nodeKey.isSome(): - conf.nodeKey.get() - else: - let keyRes = crypto.PrivateKey.random(Secp256k1, rng[]) - - if keyRes.isErr(): - error "failed to generate key", error=keyRes.error - quit(QuitFailure) - - keyRes.get() - - let netConfigRes = networkConfiguration(conf, clientId) - - let netConfig = - if netConfigRes.isErr(): - error "failed to create internal config", error=netConfigRes.error - quit(QuitFailure) - else: netConfigRes.get() - - let recordRes = enrConfiguration(conf, netConfig, key) - - let record = - if recordRes.isErr(): - error "failed to create record", error=recordRes.error - quit(QuitFailure) - else: recordRes.get() - - if isClusterMismatched(record, conf.clusterId): - error "cluster id mismatch configured shards" - quit(QuitFailure) - - App( - version: git_version, - conf: conf, - netConf: netConfig, - rng: rng, - key: key, - record: record, - node: nil - ) - -proc setupPeerPersistence*(app: var App): AppResult[void] = - if not app.conf.peerPersistence: - return ok() - - let peerStoreRes = setupPeerStorage() - if peerStoreRes.isErr(): - return err("failed to setup peer store" & peerStoreRes.error) - - app.peerStore = peerStoreRes.get() - - ok() - -proc setupDyamicBootstrapNodes*(app: var App): AppResult[void] = - let dynamicBootstrapNodesRes = retrieveDynamicBootstrapNodes(app.conf.dnsDiscovery, - app.conf.dnsDiscoveryUrl, - app.conf.dnsDiscoveryNameServers) - if dynamicBootstrapNodesRes.isOk(): - app.dynamicBootstrapNodes = dynamicBootstrapNodesRes.get() - else: - warn "2/7 Retrieving dynamic bootstrap nodes failed. Continuing without dynamic bootstrap nodes.", error=dynamicBootstrapNodesRes.error - - ok() +proc init*(T: type App, conf: WakuNodeConf): Result[App, string] = + + var confCopy = conf + let rng = crypto.newRng() + + if not confCopy.nodekey.isSome(): + let keyRes = crypto.PrivateKey.random(Secp256k1, rng[]) + if keyRes.isErr(): + error "Failed to generate key", error = $keyRes.error + return err("Failed to generate key: " & $keyRes.error) + confCopy.nodekey = some(keyRes.get()) + + debug "Retrieve dynamic bootstrap nodes" + let dynamicBootstrapNodesRes = retrieveDynamicBootstrapNodes(confCopy.dnsDiscovery, + confCopy.dnsDiscoveryUrl, + confCopy.dnsDiscoveryNameServers) + if dynamicBootstrapNodesRes.isErr(): + error "Retrieving dynamic bootstrap nodes failed", error = dynamicBootstrapNodesRes.error + return err("Retrieving dynamic bootstrap nodes failed: " & dynamicBootstrapNodesRes.error) + + let nodeRes = setupNode(confCopy, some(rng)) + if nodeRes.isErr(): + error "Failed setting up node", error=nodeRes.error + return err("Failed setting up node: " & nodeRes.error) + + var app = App( + version: git_version, + conf: confCopy, + rng: rng, + key: confCopy.nodekey.get(), + node: nodeRes.get(), + dynamicBootstrapNodes: dynamicBootstrapNodesRes.get() + ) + + ok(app) ## Setup DiscoveryV5 @@ -190,25 +156,11 @@ proc setupDiscoveryV5*(app: App): WakuDiscoveryV5 = WakuDiscoveryV5.new( app.rng, discv5Conf, - some(app.record), + some(app.node.enr), some(app.node.peerManager), app.node.topicSubscriptionQueue, ) -proc setupWakuApp*(app: var App): AppResult[void] = - ## Waku node - let initNodeRes = initNode(app.conf, app.netConf, app.rng, app.key, app.record, app.peerStore, app.dynamicBootstrapNodes) - if initNodeRes.isErr(): - return err("failed to init node: " & initNodeRes.error) - - app.node = initNodeRes.get() - - ## Discv5 - if app.conf.discv5Discovery: - app.wakuDiscV5 = some(app.setupDiscoveryV5()) - - ok() - proc getPorts(listenAddrs: seq[MultiAddress]): AppResult[tuple[tcpPort, websocketPort: Option[Port]]] = @@ -227,7 +179,7 @@ proc getPorts(listenAddrs: seq[MultiAddress]): return ok((tcpPort: tcpPort, websocketPort: websocketPort)) -proc updateNetConfig(app: var App): AppResult[void] = +proc getRunningNetConfig(app: App): AppResult[NetConfig] = var conf = app.conf let (tcpPort, websocketPort) = getPorts(app.node.switch.peerInfo.listenAddrs).valueOr: @@ -243,52 +195,39 @@ proc updateNetConfig(app: var App): AppResult[void] = let netConf = networkConfiguration(conf, clientId).valueOr: return err("Could not update NetConfig: " & error) - app.netConf = netConf - - return ok() + return ok(netConf) -proc updateEnr(app: var App): AppResult[void] = +proc updateEnr(app: var App, netConf: NetConfig): AppResult[void] = - let record = enrConfiguration(app.conf, app.netConf, app.key).valueOr: + let record = enrConfiguration(app.conf, netConf, app.key).valueOr: return err("ENR setup failed: " & error) if isClusterMismatched(record, app.conf.clusterId): return err("cluster id mismatch configured shards") - app.record = record app.node.enr = record - if app.conf.discv5Discovery: - app.wakuDiscV5 = some(app.setupDiscoveryV5()) - return ok() proc updateApp(app: var App): AppResult[void] = if app.conf.tcpPort == Port(0) or app.conf.websocketPort == Port(0): - updateNetConfig(app).isOkOr: + let netConf = getRunningNetConfig(app).valueOr: return err("error calling updateNetConfig: " & $error) - updateEnr(app).isOkOr: + updateEnr(app, netConf).isOkOr: return err("error calling updateEnr: " & $error) - app.node.announcedAddresses = app.netConf.announcedAddresses + app.node.announcedAddresses = netConf.announcedAddresses printNodeNetworkInfo(app.node) return ok() -proc setupAndMountProtocols*(app: App): Future[AppResult[void]] {.async.} = - return await setupProtocols( - app.node, - app.conf, - app.key - ) - proc startApp*(app: var App): AppResult[void] = - let nodeRes = catch: (waitFor startNode(app.node,app.conf,app.dynamicBootstrapNodes)) + let nodeRes = catch: (waitFor startNode(app.node, app.conf, app.dynamicBootstrapNodes)) if nodeRes.isErr(): return err("exception starting node: " & nodeRes.error.msg) @@ -299,6 +238,10 @@ proc startApp*(app: var App): AppResult[void] = app.updateApp().isOkOr: return err("Error in updateApp: " & $error) + ## Discv5 + if app.conf.discv5Discovery: + app.wakuDiscV5 = some(app.setupDiscoveryV5()) + if app.wakuDiscv5.isSome(): let wakuDiscv5 = app.wakuDiscv5.get() let catchRes = catch: (waitFor wakuDiscv5.start()) @@ -464,7 +407,7 @@ proc setupMonitoringAndExternalInterfaces*(app: var App): AppResult[void] = if app.conf.rest: let startRestServerRes = startRestServer(app, app.conf.restAddress, Port(app.conf.restPort + app.conf.portsShift), app.conf) if startRestServerRes.isErr(): - error "6/7 Starting REST server failed. Continuing in current state.", error=startRestServerRes.error + error "Starting REST server failed. Continuing in current state.", error=startRestServerRes.error else: app.restServer = some(startRestServerRes.value) @@ -472,14 +415,14 @@ proc setupMonitoringAndExternalInterfaces*(app: var App): AppResult[void] = if app.conf.metricsServer: let startMetricsServerRes = startMetricsServer(app.conf.metricsServerAddress, Port(app.conf.metricsServerPort + app.conf.portsShift)) if startMetricsServerRes.isErr(): - error "6/7 Starting metrics server failed. Continuing in current state.", error=startMetricsServerRes.error + error "Starting metrics server failed. Continuing in current state.", error=startMetricsServerRes.error else: app.metricsServer = some(startMetricsServerRes.value) if app.conf.metricsLogging: let startMetricsLoggingRes = startMetricsLogging() if startMetricsLoggingRes.isErr(): - error "6/7 Starting metrics console logging failed. Continuing in current state.", error=startMetricsLoggingRes.error + error "Starting metrics console logging failed. Continuing in current state.", error=startMetricsLoggingRes.error ok() diff --git a/apps/wakunode2/wakunode2.nim b/apps/wakunode2/wakunode2.nim index c646ee3cc8..dc8bc6d68e 100644 --- a/apps/wakunode2/wakunode2.nim +++ b/apps/wakunode2/wakunode2.nim @@ -63,7 +63,6 @@ when isMainModule: ## 6. Setup graceful shutdown hooks const versionString = "version / git commit hash: " & app.git_version - let rng = crypto.newRng() let confRes = WakuNodeConf.load(version = versionString) if confRes.isErr(): @@ -111,60 +110,22 @@ when isMainModule: conf.rlnEpochSizeSec = twnClusterConf.rlnEpochSizeSec conf.rlnRelayUserMessageLimit = twnClusterConf.rlnRelayUserMessageLimit - var wakunode2 = App.init(rng, conf) - info "Running nwaku node", version = app.git_version logConfig(conf) - - ############## - # Node setup # - ############## - - debug "1/7 Setting up storage" - - ## Peer persistence - let res1 = wakunode2.setupPeerPersistence() - if res1.isErr(): - error "1/7 Setting up storage failed", error = res1.error - quit(QuitFailure) - - debug "2/7 Retrieve dynamic bootstrap nodes" - - let res3 = wakunode2.setupDyamicBootstrapNodes() - if res3.isErr(): - error "2/7 Retrieving dynamic bootstrap nodes failed", error = res3.error - quit(QuitFailure) - - debug "3/7 Initializing node" - - let res4 = wakunode2.setupWakuApp() - if res4.isErr(): - error "3/7 Initializing node failed", error = res4.error - quit(QuitFailure) - - debug "4/7 Mounting protocols" - - let res5 = waitFor wakunode2.setupAndMountProtocols() - if res5.isErr(): - error "4/7 Mounting protocols failed", error = res5.error + var wakunode2 = App.init(conf).valueOr: + error "App initialization failed", error = error quit(QuitFailure) - debug "5/7 Starting node and mounted protocols" - - let res6 = wakunode2.startApp() - if res6.isErr(): - error "5/7 Starting node and protocols failed", error = res6.error + wakunode2.startApp().isOkOr: + error "Starting app failed", error = error quit(QuitFailure) - debug "6/7 Starting monitoring and external interfaces" - - let res7 = wakunode2.setupMonitoringAndExternalInterfaces() - if res7.isErr(): - error "6/7 Starting monitoring and external interfaces failed", error = res7.error - quit(QuitFailure) + wakunode2.setupMonitoringAndExternalInterfaces().isOkOr: + error "Starting monitoring and external interfaces failed", error = error + quit(QuitFailure) - debug "7/7 Setting up shutdown hooks" + debug "Setting up shutdown hooks" ## Setup shutdown hooks for this process. ## Stop node gracefully on shutdown. diff --git a/tests/wakunode2/test_app.nim b/tests/wakunode2/test_app.nim index 4ec65425fe..4e6283598a 100644 --- a/tests/wakunode2/test_app.nim +++ b/tests/wakunode2/test_app.nim @@ -22,7 +22,8 @@ suite "Wakunode2 - App": ## Given let conf = defaultTestWakuNodeConf() - var wakunode2 = App.init(rng(), conf) + let wakunode2 = App.init(conf).valueOr: + raiseAssert error ## When let version = wakunode2.version @@ -37,39 +38,26 @@ suite "Wakunode2 - App initialization": var conf = defaultTestWakuNodeConf() conf.peerPersistence = true - var wakunode2 = App.init(rng(), conf) + let wakunode2 = App.init(conf).valueOr: + raiseAssert error - ## When - let res = wakunode2.setupPeerPersistence() - - ## Then - assert res.isOk(), $res.error + check: + not wakunode2.node.peerManager.storage.isNil() test "node setup is successful with default configuration": ## Given let conf = defaultTestWakuNodeConf() ## When - var wakunode2 = App.init(rng(), conf) - - let persRes = wakunode2.setupPeerPersistence() - assert persRes.isOk(), persRes.error + var wakunode2 = App.init(conf).valueOr: + raiseAssert error - let bootRes = wakunode2.setupDyamicBootstrapNodes() - assert bootRes.isOk(), bootRes.error + wakunode2.startApp().isOkOr: + raiseAssert error - let setupRes = wakunode2.setupWakuApp() - assert setupRes.isOk(), setupRes.error - - let mountRes = waitFor wakunode2.setupAndMountProtocols() + let mountRes = wakunode2.setupMonitoringAndExternalInterfaces() assert mountRes.isOk(), mountRes.error - let startRes = wakunode2.startApp() - assert startRes.isOk(), startRes.error - - let monitorRes = wakunode2.setupMonitoringAndExternalInterfaces() - assert monitorRes.isOk(), monitorRes.error - ## Then let node = wakunode2.node check: @@ -88,22 +76,18 @@ suite "Wakunode2 - App initialization": conf.tcpPort = Port(0) ## When - var wakunode2 = App.init(rng(), conf) - require wakunode2.setupPeerPersistence().isOk() - require wakunode2.setupDyamicBootstrapNodes().isOk() - require wakunode2.setupWakuApp().isOk() - require isOk(waitFor wakunode2.setupAndMountProtocols()) - require isOk(wakunode2.startApp()) - require wakunode2.setupMonitoringAndExternalInterfaces().isOk() + var wakunode2 = App.init(conf).valueOr: + raiseAssert error + + wakunode2.startApp().isOkOr: + raiseAssert error ## Then let node = wakunode2.node typedNodeEnr = node.enr.toTypedRecord() - typedAppEnr = wakunode2.record.toTypedRecord() assert typedNodeEnr.isOk(), $typedNodeEnr.error - assert typedAppEnr.isOk(), $typedAppEnr.error check: # App started properly @@ -114,10 +98,7 @@ suite "Wakunode2 - App initialization": not node.rendezvous.isNil() # DS structures are updated with dynamic ports - wakunode2.netConf.bindPort != Port(0) - wakunode2.netConf.enrPort.get() != Port(0) typedNodeEnr.get().tcp.get() != 0 - typedAppEnr.get().tcp.get() != 0 ## Cleanup waitFor wakunode2.stop() diff --git a/waku/factory/node_factory.nim b/waku/factory/node_factory.nim index 6d5308459e..5a08541819 100644 --- a/waku/factory/node_factory.nim +++ b/waku/factory/node_factory.nim @@ -372,4 +372,56 @@ proc startNode*(node: WakuNode, conf: WakuNodeConf, if conf.relay: node.peerManager.start() - return ok() \ No newline at end of file + return ok() + +proc setupNode*(conf: WakuNodeConf, rng: Option[ref HmacDrbgContext] = none(ref HmacDrbgContext)): + Result[WakuNode, string] = + var nodeRng = if rng.isSome(): rng.get() else: crypto.newRng() + + # Use provided key only if corresponding rng is also provided + let key = + if conf.nodeKey.isSome() and rng.isSome(): + conf.nodeKey.get() + else: + warn "missing key or rng, generating new set" + crypto.PrivateKey.random(Secp256k1, nodeRng[]).valueOr: + error "Failed to generate key", error=error + return err("Failed to generate key: " & $error) + + let netConfig = networkConfiguration(conf, clientId).valueOr: + error "failed to create internal config", error=error + return err("failed to create internal config: " & error) + + let record = enrConfiguration(conf, netConfig, key).valueOr: + error "failed to create record", error=error + return err("failed to create record: " & error) + + if isClusterMismatched(record, conf.clusterId): + error "cluster id mismatch configured shards" + return err("cluster id mismatch configured shards") + + debug "Setting up storage" + + ## Peer persistence + var peerStore: Option[WakuPeerStorage] + if conf.peerPersistence: + peerStore = setupPeerStorage().valueOr: + error "Setting up storage failed", error = "failed to setup peer store " & error + return err("Setting up storage failed: " & error) + + debug "Initializing node" + + let node = initNode(conf, netConfig, nodeRng, key, record, peerStore).valueOr: + error "Initializing node failed", error = error + return err("Initializing node failed: " & error) + + debug "Mounting protocols" + + try: + (waitFor node.setupProtocols(conf, key)).isOkOr: + error "Mounting protocols failed", error = error + return err("Mounting protocols failed: " & error) + except CatchableError: + return err("Exception setting up protocols: " & getCurrentExceptionMsg()) + + return ok(node) \ No newline at end of file diff --git a/waku/node/peer_manager/peer_manager.nim b/waku/node/peer_manager/peer_manager.nim index eaedbca1cb..9f652688d1 100644 --- a/waku/node/peer_manager/peer_manager.nim +++ b/waku/node/peer_manager/peer_manager.nim @@ -75,7 +75,7 @@ type initialBackoffInSec*: int backoffFactor*: int maxFailedAttempts*: int - storage: PeerStorage + storage*: PeerStorage serviceSlots*: Table[string, RemotePeerInfo] maxRelayPeers*: int outRelayPeersTarget: int From f9f92b7d2fbdeda52ef8c102890e19d0d9027767 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?rich=CE=9Brd?= Date: Mon, 11 Mar 2024 10:08:46 -0400 Subject: [PATCH 269/274] fix: introduce new field for shards in metadata protocol (#2511) * fix: repeated fields are packed in proto3 * fix: add new field for shards in metadata protobuffers to avoid breaking change and deprecate original field --- waku/waku_metadata/rpc.nim | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/waku/waku_metadata/rpc.nim b/waku/waku_metadata/rpc.nim index dd6034d814..fb85b774ef 100644 --- a/waku/waku_metadata/rpc.nim +++ b/waku/waku_metadata/rpc.nim @@ -23,9 +23,9 @@ proc encode*(rpc: WakuMetadataRequest): ProtoBuffer = var pb = initProtoBuffer() pb.write3(1, rpc.clusterId) - for shard in rpc.shards: - pb.write3(2, shard) + pb.write3(2, shard) # deprecated + pb.writePacked(3, rpc.shards) pb.finish3() pb @@ -41,7 +41,13 @@ proc decode*(T: type WakuMetadataRequest, buffer: seq[byte]): ProtoResult[T] = rpc.clusterId = some(clusterId.uint32) var shards: seq[uint64] - if ?pb.getRepeatedField(2, shards): + if ?pb.getPackedRepeatedField(3, shards): + for shard in shards: + rpc.shards.add(shard.uint32) + elif ?pb.getPackedRepeatedField(2, shards): + for shard in shards: + rpc.shards.add(shard.uint32) + elif ?pb.getRepeatedField(2, shards): for shard in shards: rpc.shards.add(shard.uint32) @@ -51,9 +57,9 @@ proc encode*(rpc: WakuMetadataResponse): ProtoBuffer = var pb = initProtoBuffer() pb.write3(1, rpc.clusterId) - for shard in rpc.shards: - pb.write3(2, shard) + pb.write3(2, shard) # deprecated + pb.writePacked(3, rpc.shards) pb.finish3() pb @@ -69,8 +75,16 @@ proc decode*(T: type WakuMetadataResponse, buffer: seq[byte]): ProtoResult[T] = rpc.clusterId = some(clusterId.uint32) var shards: seq[uint64] - if ?pb.getRepeatedField(2, shards): + + if ?pb.getPackedRepeatedField(3, shards): + for shard in shards: + rpc.shards.add(shard.uint32) + elif ?pb.getPackedRepeatedField(2, shards): for shard in shards: rpc.shards.add(shard.uint32) + elif ?pb.getRepeatedField(2, shards): + for shard in shards: + rpc.shards.add(shard.uint32) + ok(rpc) From 097cb36279897801a5963343c7298220b6290228 Mon Sep 17 00:00:00 2001 From: NagyZoltanPeter <113987313+NagyZoltanPeter@users.noreply.github.com> Date: Mon, 11 Mar 2024 15:15:19 +0100 Subject: [PATCH 270/274] chore: update CHANGELOG for v0.26.0 release (#2518) * CHANGELOG for v0.26.0 release Co-authored-by: Ivan FB <128452529+Ivansete-status@users.noreply.github.com> --- CHANGELOG.md | 81 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e48922b0c7..32ec36146c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,84 @@ +## v0.26.0 (2024-03-07) + +> **Note:** +> - JSON-RPC API has been removed completely. Instead we recommend you to utilize REST API endpoints that have same and extended functionality. +> Please have a look at Waku's REST-API reference: https://waku-org.github.io/waku-rest-api +> - Support for Cross-Origin-Resource-Sharing (CORS headers) is added for our REST-API services. This allows you to access our REST-API from a browser. +> New repeatable CLI flag is added by this feature: +> `--rest-allow-origin="example.com"` or `--rest-allow-origin="127.0.0.0:*"` +> Flag allows using wildcards (`*` and `?`) in the origin string. +> - Store protocol now has a better support for controlling DB size of Postgres store. This feature needs no user action. + +> **Announcement:** +> +> Please notice that from the next release (0.27.0) we will deprecate features. +> +> - We will decomission the Filter v1 protocol and its REST-API access. + +### Features + +- Postgres partition implementation ([#2506](https://github.com/waku-org/nwaku/issues/2506)) ([161a10ec](https://github.com/waku-org/nwaku/commit/161a10ec)) +- **waku-stealth-commitments:** waku stealth commitment protocol ([#2490](https://github.com/waku-org/nwaku/issues/2490)) ([0def4904](https://github.com/waku-org/nwaku/commit/0def4904)) +- **bindings:** generate a random private key ([#2446](https://github.com/waku-org/nwaku/issues/2446)) ([56ff30ca](https://github.com/waku-org/nwaku/commit/56ff30ca)) +- prioritise yamux above mplex ([#2417](https://github.com/waku-org/nwaku/issues/2417)) ([ce151efc](https://github.com/waku-org/nwaku/commit/ce151efc)) +- supporting meta field in WakuMessage ([#2384](https://github.com/waku-org/nwaku/issues/2384)) ([3903f130](https://github.com/waku-org/nwaku/commit/3903f130)) +- `eventCallback` per wakunode and `userData` ([#2418](https://github.com/waku-org/nwaku/issues/2418)) ([707f3e8b](https://github.com/waku-org/nwaku/commit/707f3e8b)) +- **rln-relay-v2:** nonce/messageId manager ([#2413](https://github.com/waku-org/nwaku/issues/2413)) ([50308eda](https://github.com/waku-org/nwaku/commit/50308eda)) +- **networkmonitor:** add support for rln ([#2401](https://github.com/waku-org/nwaku/issues/2401)) ([9c0e9431](https://github.com/waku-org/nwaku/commit/9c0e9431)) +- **rln-relay-v2:** rln-keystore-generator updates ([#2392](https://github.com/waku-org/nwaku/issues/2392)) ([2d46c351](https://github.com/waku-org/nwaku/commit/2d46c351)) +- add yamux support ([#2397](https://github.com/waku-org/nwaku/issues/2397)) ([1b402667](https://github.com/waku-org/nwaku/commit/1b402667)) + +### Bug Fixes + +- **rln-relay:** make nullifier log abide by epoch ordering ([#2508](https://github.com/waku-org/nwaku/issues/2508)) ([beba14dc](https://github.com/waku-org/nwaku/commit/beba14dc)) +- **postgres:** import under feature flag ([#2500](https://github.com/waku-org/nwaku/issues/2500)) ([e692edf6](https://github.com/waku-org/nwaku/commit/e692edf6)) +- notify Waku Metadata when Waku Filter subscribe to a topic ([#2493](https://github.com/waku-org/nwaku/issues/2493)) ([91e3f8cd](https://github.com/waku-org/nwaku/commit/91e3f8cd)) +- time on 32 bits architecture ([#2492](https://github.com/waku-org/nwaku/issues/2492)) ([0a751228](https://github.com/waku-org/nwaku/commit/0a751228)) +- return message id on `waku_relay_publish` ([#2485](https://github.com/waku-org/nwaku/issues/2485)) ([045091a9](https://github.com/waku-org/nwaku/commit/045091a9)) +- **bindings:** base64 payload and key for content topic ([#2435](https://github.com/waku-org/nwaku/issues/2435)) ([d01585e9](https://github.com/waku-org/nwaku/commit/d01585e9)) +- **rln-relay:** regex pattern match for extended domains ([#2444](https://github.com/waku-org/nwaku/issues/2444)) ([29b0c0b8](https://github.com/waku-org/nwaku/commit/29b0c0b8)) +- checking for keystore file existence ([#2427](https://github.com/waku-org/nwaku/issues/2427)) ([8f487a21](https://github.com/waku-org/nwaku/commit/8f487a21)) +- **rln-relay:** graceful shutdown with non-zero exit code ([#2429](https://github.com/waku-org/nwaku/issues/2429)) ([22026b7e](https://github.com/waku-org/nwaku/commit/22026b7e)) +- check max message size in validator according to configured value ([#2424](https://github.com/waku-org/nwaku/issues/2424)) ([731dfcbd](https://github.com/waku-org/nwaku/commit/731dfcbd)) +- **wakunode2:** move node config inside app init branch ([#2423](https://github.com/waku-org/nwaku/issues/2423)) ([0dac9f9d](https://github.com/waku-org/nwaku/commit/0dac9f9d)) + +### Changes + +- **rln_db_inspector:** include in wakunode2 binary ([#2292](https://github.com/waku-org/nwaku/issues/2292)) ([a9d0e481](https://github.com/waku-org/nwaku/commit/a9d0e481)) +- Update link to DNS discovery tutorial ([#2496](https://github.com/waku-org/nwaku/issues/2496)) ([9ef2eccb](https://github.com/waku-org/nwaku/commit/9ef2eccb)) +- **rln-relay-v2:** added tests for static rln-relay-v2 ([#2484](https://github.com/waku-org/nwaku/issues/2484)) ([5b174fb3](https://github.com/waku-org/nwaku/commit/5b174fb3)) +- moving node initialization code to node_factory.nim ([#2479](https://github.com/waku-org/nwaku/issues/2479)) ([361fe2cd](https://github.com/waku-org/nwaku/commit/361fe2cd)) +- Postgres migrations ([#2477](https://github.com/waku-org/nwaku/issues/2477)) ([560f949a](https://github.com/waku-org/nwaku/commit/560f949a)) +- **rln-relay-v2:** added tests for onchain rln-relay-v2 ([#2482](https://github.com/waku-org/nwaku/issues/2482)) ([88ff9282](https://github.com/waku-org/nwaku/commit/88ff9282)) +- remove json rpc ([#2416](https://github.com/waku-org/nwaku/issues/2416)) ([c994ee04](https://github.com/waku-org/nwaku/commit/c994ee04)) +- **ci:** use git describe for image version ([55ff6674](https://github.com/waku-org/nwaku/commit/55ff6674)) +- Implemented CORS handling for nwaku REST server ([#2470](https://github.com/waku-org/nwaku/issues/2470)) ([d832f92a](https://github.com/waku-org/nwaku/commit/d832f92a)) +- remove rln epoch hardcoding ([#2483](https://github.com/waku-org/nwaku/issues/2483)) ([3f4f6d7e](https://github.com/waku-org/nwaku/commit/3f4f6d7e)) +- **cbindings:** cbindings rust simple libwaku integration example ([#2089](https://github.com/waku-org/nwaku/issues/2089)) ([a4993005](https://github.com/waku-org/nwaku/commit/a4993005)) +- adding NIMFLAGS usage to readme ([#2469](https://github.com/waku-org/nwaku/issues/2469)) ([a1d5cbd9](https://github.com/waku-org/nwaku/commit/a1d5cbd9)) +- bumping nim-libp2p after yamux timeout fix ([#2468](https://github.com/waku-org/nwaku/issues/2468)) ([216531b0](https://github.com/waku-org/nwaku/commit/216531b0)) +- new proc to foster different size retention policy implementations ([#2463](https://github.com/waku-org/nwaku/issues/2463)) ([d5305282](https://github.com/waku-org/nwaku/commit/d5305282)) +- **rln-relay:** use anvil instead of ganache in onchain tests ([#2449](https://github.com/waku-org/nwaku/issues/2449)) ([f6332ac6](https://github.com/waku-org/nwaku/commit/f6332ac6)) +- bindings return multiaddress array ([#2461](https://github.com/waku-org/nwaku/issues/2461)) ([7aea145e](https://github.com/waku-org/nwaku/commit/7aea145e)) +- **ci:** fix IMAGE_NAME to use harbor.status.im ([b700d046](https://github.com/waku-org/nwaku/commit/b700d046)) +- **rln-relay:** remove wss support from node config ([#2442](https://github.com/waku-org/nwaku/issues/2442)) ([2060cfab](https://github.com/waku-org/nwaku/commit/2060cfab)) +- **ci:** reuse discord send function from library ([1151d50f](https://github.com/waku-org/nwaku/commit/1151d50f)) +- **rln-relay-v2:** add tests for serde ([#2421](https://github.com/waku-org/nwaku/issues/2421)) ([d0377056](https://github.com/waku-org/nwaku/commit/d0377056)) +- add stdef.h to libwaku.h ([#2409](https://github.com/waku-org/nwaku/issues/2409)) ([d58aca01](https://github.com/waku-org/nwaku/commit/d58aca01)) +- automatically generating certs if not provided (Waku Canary) ([#2408](https://github.com/waku-org/nwaku/issues/2408)) ([849d76d6](https://github.com/waku-org/nwaku/commit/849d76d6)) +- Simplify configuration for the waku network ([#2404](https://github.com/waku-org/nwaku/issues/2404)) ([985d092f](https://github.com/waku-org/nwaku/commit/985d092f)) + +This release supports the following [libp2p protocols](https://docs.libp2p.io/concepts/protocols/): +| Protocol | Spec status | Protocol id | +| ---: | :---: | :--- | +| [`11/WAKU2-RELAY`](https://rfc.vac.dev/spec/11/) | `stable` | `/vac/waku/relay/2.0.0` | +| [`12/WAKU2-FILTER`](https://rfc.vac.dev/spec/12/) | `draft` | `/vac/waku/filter/2.0.0-beta1`
`/vac/waku/filter-subscribe/2.0.0-beta1`
`/vac/waku/filter-push/2.0.0-beta1` | +| [`13/WAKU2-STORE`](https://rfc.vac.dev/spec/13/) | `draft` | `/vac/waku/store/2.0.0-beta4` | +| [`19/WAKU2-LIGHTPUSH`](https://rfc.vac.dev/spec/19/) | `draft` | `/vac/waku/lightpush/2.0.0-beta1` | +| [`66/WAKU2-METADATA`](https://rfc.vac.dev/spec/66/) | `raw` | `/vac/waku/metadata/1.0.0` | + +The Waku v1 implementation has been removed from this repository and can be found in a separate [Waku Legacy](https://github.com/waku-org/waku-legacy) repository. + ## v0.25.0 (2024-02-06) > **Note:** From 059cb975184a8b47a11c858775a4b5acfb06c759 Mon Sep 17 00:00:00 2001 From: Aaryamann Challani <43716372+rymnc@users.noreply.github.com> Date: Tue, 12 Mar 2024 16:20:30 +0530 Subject: [PATCH 271/274] chore(rln-relay-v2): wakunode testing + improvements (#2501) * chore(rln-relay-v2): additional testing * fix: bump librln to v0.4.2 for v2 * fix: catch possible error from the copyFrom * ci: rename step title for rln-version --- .github/workflows/ci.yml | 10 +- .github/workflows/container-image.yml | 7 +- Makefile | 2 +- tests/all_tests_waku.nim | 7 +- .../rln/waku_rln_relay_utils.nim | 26 +- .../rln_v2/test_rln_relay_v2_serde.nim | 2 +- tests/waku_rln_relay/test_all.nim | 3 + .../waku_rln_relay/test_rln_nonce_manager.nim | 31 +-- tests/waku_rln_relay/test_waku_rln_relay.nim | 130 +++++---- .../test_wakunode_rln_relay.nim | 252 ++++++++++++------ tests/wakunode_rest/test_rest_relay.nim | 60 ++++- waku/waku_api/rest/relay/handlers.nim | 4 +- waku/waku_rln_relay/constants.nim | 2 +- waku/waku_rln_relay/conversion_utils.nim | 2 +- waku/waku_rln_relay/nonce_manager.nim | 6 +- waku/waku_rln_relay/rln/wrappers.nim | 48 ++-- waku/waku_rln_relay/rln_relay.nim | 2 +- 17 files changed, 380 insertions(+), 214 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ce99e29a34..92ba105680 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -55,11 +55,12 @@ jobs: if: ${{ needs.changes.outputs.v2 == 'true' || needs.changes.outputs.common == 'true' }} strategy: matrix: + rln_version : [1, 2] os: [ubuntu-latest, macos-latest] runs-on: ${{ matrix.os }} timeout-minutes: 60 - name: build-${{ matrix.os }} + name: build-${{ matrix.os }}-rln-v${{ matrix.rln_version }} steps: - name: Checkout code uses: actions/checkout@v3 @@ -78,18 +79,19 @@ jobs: key: ${{ runner.os }}-vendor-modules-${{ steps.submodules.outputs.hash }} - name: Build binaries - run: make V=1 QUICK_AND_DIRTY_COMPILER=1 all tools + run: make RLN_V${{matrix.rln_version}}=true V=1 QUICK_AND_DIRTY_COMPILER=1 all tools test: needs: changes if: ${{ needs.changes.outputs.v2 == 'true' || needs.changes.outputs.common == 'true' }} strategy: matrix: + rln_version : [1, 2] os: [ubuntu-latest, macos-latest] runs-on: ${{ matrix.os }} timeout-minutes: 60 - name: test-${{ matrix.os }} + name: test-${{ matrix.os }}-rln-v${{ matrix.rln_version }} steps: - name: Checkout code uses: actions/checkout@v3 @@ -118,7 +120,7 @@ jobs: sudo docker run --rm -d -e POSTGRES_PASSWORD=test123 -p 5432:5432 postgres:15.4-alpine3.18 fi - make V=1 LOG_LEVEL=DEBUG QUICK_AND_DIRTY_COMPILER=1 POSTGRES=1 test testwakunode2 + make RLN_V${{matrix.rln_version}}=true V=1 LOG_LEVEL=DEBUG QUICK_AND_DIRTY_COMPILER=1 POSTGRES=1 test testwakunode2 build-docker-image: needs: changes diff --git a/.github/workflows/container-image.yml b/.github/workflows/container-image.yml index b5953f2635..16f7e3d62e 100644 --- a/.github/workflows/container-image.yml +++ b/.github/workflows/container-image.yml @@ -20,11 +20,12 @@ jobs: build-docker-image: strategy: matrix: + rln_v2: [true, false] os: [ubuntu-latest] runs-on: ${{ matrix.os }} timeout-minutes: 60 - name: docker-build-${{ matrix.os }} + name: docker-build-${{ matrix.os }}-rln-v2-${{ matrix.rln_v2 }} outputs: image: ${{ steps.build.outputs.image }} steps: @@ -48,12 +49,12 @@ jobs: id: build run: | - make -j${NPROC} V=1 QUICK_AND_DIRTY_COMPILER=1 NIMFLAGS="-d:disableMarchNative -d:postgres" wakunode2 + make RLN_V2=${{matrix.rln_v2}} -j${NPROC} V=1 QUICK_AND_DIRTY_COMPILER=1 NIMFLAGS="-d:disableMarchNative -d:postgres" wakunode2 SHORT_REF=$(git rev-parse --short HEAD) TAG=$([ "${PR_NUMBER}" == "" ] && echo "${SHORT_REF}" || echo "${PR_NUMBER}") - IMAGE=quay.io/wakuorg/nwaku-pr:${TAG} + IMAGE=quay.io/wakuorg/nwaku-pr:${TAG}-rln-v2-${{matrix.rln_v2}} echo "image=${IMAGE}" >> $GITHUB_OUTPUT echo "commit_hash=$(git rev-parse HEAD)" >> $GITHUB_OUTPUT diff --git a/Makefile b/Makefile index b02c2296a9..c4e140a627 100644 --- a/Makefile +++ b/Makefile @@ -135,7 +135,7 @@ clean: | clean-libbacktrace LIBRLN_BUILDDIR := $(CURDIR)/vendor/zerokit ifeq ($(RLN_V2),true) -LIBRLN_VERSION := v0.4.1 +LIBRLN_VERSION := v0.4.2 else LIBRLN_VERSION := v0.3.6 endif diff --git a/tests/all_tests_waku.nim b/tests/all_tests_waku.nim index 74f006a758..b6b7e4b73f 100644 --- a/tests/all_tests_waku.nim +++ b/tests/all_tests_waku.nim @@ -80,9 +80,4 @@ import ./wakunode_rest/test_rest_admin, ./wakunode_rest/test_rest_cors -import - ./waku_rln_relay/test_waku_rln_relay, - ./waku_rln_relay/test_wakunode_rln_relay, - ./waku_rln_relay/test_rln_group_manager_onchain, - ./waku_rln_relay/test_rln_group_manager_static, - ./wakunode_rest/test_rest_health +import ./waku_rln_relay/test_all diff --git a/tests/waku_rln_relay/rln/waku_rln_relay_utils.nim b/tests/waku_rln_relay/rln/waku_rln_relay_utils.nim index eeefe62369..458a61ec3e 100644 --- a/tests/waku_rln_relay/rln/waku_rln_relay_utils.nim +++ b/tests/waku_rln_relay/rln/waku_rln_relay_utils.nim @@ -1,6 +1,30 @@ import std/tempfiles -import ../../../waku/waku_rln_relay/[rln, protocol_types] +import + ../../../waku/waku_rln_relay, + ../../../waku/waku_rln_relay/[rln, protocol_types] proc createRLNInstanceWrapper*(): RLNResult = return createRlnInstance(tree_path = genTempPath("rln_tree", "waku_rln_relay")) + + +proc unsafeAppendRLNProof*(rlnPeer: WakuRLNRelay, + msg: var WakuMessage, + senderEpochTime: float64): RlnRelayResult[void] = + ## this proc derived from appendRLNProof, does not perform nonce check to + ## facilitate bad message id generation for testing + + let input = msg.toRLNSignal() + let epoch = rlnPeer.calcEpoch(senderEpochTime) + + when defined(rln_v2): + # we do not fetch a nonce from the nonce manager, + # instead we use 0 as the nonce + let proof = rlnPeer.groupManager.generateProof(input, epoch, 0).valueOr: + return err("could not generate rln-v2 proof: " & $error) + else: + let proof = rlnPeer.groupManager.generateProof(input, epoch).valueOr: + return err("could not generate rln proof: " & $error) + + msg.proof = proof.encode().buffer + return ok() \ No newline at end of file diff --git a/tests/waku_rln_relay/rln_v2/test_rln_relay_v2_serde.nim b/tests/waku_rln_relay/rln_v2/test_rln_relay_v2_serde.nim index 06bdcb8408..5b5bf2b66f 100644 --- a/tests/waku_rln_relay/rln_v2/test_rln_relay_v2_serde.nim +++ b/tests/waku_rln_relay/rln_v2/test_rln_relay_v2_serde.nim @@ -73,7 +73,7 @@ suite "RLN Relay v2: serde": userMessageLimit = rateCommitment.userMessageLimit, messageId = 0, index = 0, - epoch = rln.calcEpoch(epochTime())) + epoch = uint64(epochTime()/1.float64).toEpoch()) assert proofRes.isOk, $proofRes.error diff --git a/tests/waku_rln_relay/test_all.nim b/tests/waku_rln_relay/test_all.nim index ed5b690d85..7aa3f395ec 100644 --- a/tests/waku_rln_relay/test_all.nim +++ b/tests/waku_rln_relay/test_all.nim @@ -6,3 +6,6 @@ import ./test_waku_rln_relay, ./test_wakunode_rln_relay, ./test_rln_nonce_manager + +when defined(rln_v2): + import ./rln_v2/test_rln_relay_v2_serde diff --git a/tests/waku_rln_relay/test_rln_nonce_manager.nim b/tests/waku_rln_relay/test_rln_nonce_manager.nim index 8e5df8a181..250d244ae3 100644 --- a/tests/waku_rln_relay/test_rln_nonce_manager.nim +++ b/tests/waku_rln_relay/test_rln_nonce_manager.nim @@ -18,34 +18,31 @@ suite "Nonce manager": test "should generate a new nonce": let nm = NonceManager.init(nonceLimit = 100.uint) - let nonceRes = nm.get() - - assert nonceRes.isOk(), $nonceRes.error + let nonce = nm.getNonce().valueOr: + raiseAssert $error check: - nonceRes.get() == 0.uint + nonce == 0.uint nm.nextNonce == 1.uint test "should fail to generate a new nonce if limit is reached": let nm = NonceManager.init(nonceLimit = 1.uint) - let nonceRes = nm.get() - let nonceRes2 = nm.get() - - assert nonceRes.isOk(), $nonceRes.error - assert nonceRes2.isErr(), "Expected error, got: " & $nonceRes2.value + let nonce = nm.getNonce().valueOr: + raiseAssert $error + let failedNonceRes = nm.getNonce() check: - nonceRes2.error.kind == NonceManagerErrorKind.NonceLimitReached + failedNonceRes.isErr() + failedNonceRes.error.kind == NonceManagerErrorKind.NonceLimitReached test "should generate a new nonce if epoch is crossed": let nm = NonceManager.init(nonceLimit = 1.uint, epoch = float(0.000001)) - let nonceRes = nm.get() + let nonce = nm.getNonce().valueOr: + raiseAssert $error sleep(1) - let nonceRes2 = nm.get() - - assert nonceRes.isOk(), $nonceRes.error - assert nonceRes2.isOk(), $nonceRes2.error + let nonce2 = nm.getNonce().valueOr: + raiseAssert $error check: - nonceRes.value == 0.uint - nonceRes2.value == 0.uint \ No newline at end of file + nonce == 0.uint + nonce2 == 0.uint \ No newline at end of file diff --git a/tests/waku_rln_relay/test_waku_rln_relay.nim b/tests/waku_rln_relay/test_waku_rln_relay.nim index e0a831d650..20ce66b758 100644 --- a/tests/waku_rln_relay/test_waku_rln_relay.nim +++ b/tests/waku_rln_relay/test_waku_rln_relay.nim @@ -518,18 +518,23 @@ suite "Waku rln relay": let rln = rlnInstance.get() # create a Merkle tree - let membersAdded = rln.insertMembers(0, groupIDCommitments) - require: - membersAdded - let rootRes = rln.getMerkleRoot() - - require: - rootRes.isOk() + when defined(rln_v2): + let rateCommitments = groupIDCommitments.mapIt(RateCommitment(idCommitment: it, + userMessageLimit: 20)) + let leaves = rateCommitments.toLeaves().valueOr: + raiseAssert $error + let membersAdded = rln.insertMembers(0, leaves) + else: + let membersAdded = rln.insertMembers(0, groupIDCommitments) + + assert membersAdded, "members should be added" + let rawRoot = rln.getMerkleRoot().valueOr: + raiseAssert $error - let root = rootRes.get().inHex() + let root = rawRoot.inHex() debug "groupIdCredentials", groupIdCredentials - debug "groupIDCommitments", groupIDCommitments + debug "groupIDCommitments", groupIDCommitments = groupIDCommitments.mapIt(it.inHex()) debug "root", root check: @@ -597,8 +602,8 @@ suite "Waku rln relay": test "updateLog and hasDuplicate tests": let - wakurlnrelay = WakuRLNRelay() - epoch = wakurlnrelay.getCurrentEpoch() + wakuRlnRelay = WakuRLNRelay() + epoch = wakuRlnRelay.getCurrentEpoch() # create some dummy nullifiers and secret shares var nullifier1: Nullifier @@ -640,37 +645,44 @@ suite "Waku rln relay": # check whether hasDuplicate correctly finds records with the same nullifiers but different secret shares # no duplicate for proof1 should be found, since the log is empty - let result1 = wakurlnrelay.hasDuplicate(epoch, proof1.extractMetadata().tryGet()) - assert result1.isOk(), $result1.error - assert result1.value == false, "no duplicate should be found" + let proofMetadata1 = proof1.extractMetadata().tryGet() + let isDuplicate1 = wakuRlnRelay.hasDuplicate(epoch, proofMetadata1).valueOr: + raiseAssert $error + assert isDuplicate1 == false, "no duplicate should be found" # add it to the log - discard wakurlnrelay.updateLog(epoch, proof1.extractMetadata().tryGet()) + discard wakuRlnRelay.updateLog(epoch, proofMetadata1) # no duplicate for proof2 should be found, its nullifier differs from proof1 - let result2 = wakurlnrelay.hasDuplicate(epoch, proof2.extractMetadata().tryGet()) - assert result2.isOk(), $result2.error + let proofMetadata2 = proof2.extractMetadata().tryGet() + let isDuplicate2 = wakuRlnRelay.hasDuplicate(epoch, proofMetadata2).valueOr: + raiseAssert $error # no duplicate is found - assert result2.value == false, "no duplicate should be found" + assert isDuplicate2 == false, "no duplicate should be found" # add it to the log - discard wakurlnrelay.updateLog(epoch, proof2.extractMetadata().tryGet()) + discard wakuRlnRelay.updateLog(epoch, proofMetadata2) # proof3 has the same nullifier as proof1 but different secret shares, it should be detected as duplicate - let result3 = wakurlnrelay.hasDuplicate(epoch, proof3.extractMetadata().tryGet()) - assert result3.isOk(), $result3.error + let isDuplicate3 = wakuRlnRelay.hasDuplicate(epoch, proof3.extractMetadata().tryGet()).valueOr: + raiseAssert $error # it is a duplicate - assert result3.value, "duplicate should be found" + assert isDuplicate3, "duplicate should be found" asyncTest "validateMessageAndUpdateLog test": let index = MembershipIndex(5) - let rlnConf = WakuRlnConfig(rlnRelayDynamic: false, - rlnRelayCredIndex: some(index), - rlnEpochSizeSec: 1, - rlnRelayTreePath: genTempPath("rln_tree", "waku_rln_relay_2")) - let wakuRlnRelayRes = await WakuRlnRelay.new(rlnConf) - require: - wakuRlnRelayRes.isOk() - let wakuRlnRelay = wakuRlnRelayRes.get() + when defined(rln_v2): + let wakuRlnConfig = WakuRlnConfig(rlnRelayDynamic: false, + rlnRelayCredIndex: some(index), + rlnRelayUserMessageLimit: 1, + rlnEpochSizeSec: 1, + rlnRelayTreePath: genTempPath("rln_tree", "waku_rln_relay_2")) + else: + let wakuRlnConfig = WakuRlnConfig(rlnRelayDynamic: false, + rlnRelayCredIndex: some(index), + rlnEpochSizeSec: 1, + rlnRelayTreePath: genTempPath("rln_tree", "waku_rln_relay_2")) + let wakuRlnRelay = (await WakuRlnRelay.new(wakuRlnConfig)).valueOr: + raiseAssert $error # get the current epoch time let time = epochTime() @@ -684,16 +696,12 @@ suite "Waku rln relay": wm3 = WakuMessage(payload: "Valid message".toBytes()) wm4 = WakuMessage(payload: "Invalid message".toBytes()) - let - proofAdded1 = wakuRlnRelay.appendRLNProof(wm1, time) - proofAdded2 = wakuRlnRelay.appendRLNProof(wm2, time) - proofAdded3 = wakuRlnRelay.appendRLNProof(wm3, time+float64(wakuRlnRelay.rlnEpochSizeSec)) - - # ensure proofs are added - require: - proofAdded1.isOk() - proofAdded2.isOk() - proofAdded3.isOk() + wakuRlnRelay.unsafeAppendRLNProof(wm1, time).isOkOr: + raiseAssert $error + wakuRlnRelay.unsafeAppendRLNProof(wm2, time).isOkOr: + raiseAssert $error + wakuRlnRelay.unsafeAppendRLNProof(wm3, time+float64(wakuRlnRelay.rlnEpochSizeSec)).isOkOr: + raiseAssert $error # validate messages # validateMessage proc checks the validity of the message fields and adds it to the log (if valid) @@ -717,17 +725,32 @@ suite "Waku rln relay": let index1 = MembershipIndex(5) let index2 = MembershipIndex(6) - let rlnConf1 = WakuRlnConfig(rlnRelayDynamic: false, - rlnRelayCredIndex: some(index1), - rlnEpochSizeSec: 1, - rlnRelayTreePath: genTempPath("rln_tree", "waku_rln_relay_3")) + when defined(rln_v2): + let rlnConf1 = WakuRlnConfig(rlnRelayDynamic: false, + rlnRelayCredIndex: some(index1), + rlnRelayUserMessageLimit: 1, + rlnEpochSizeSec: 1, + rlnRelayTreePath: genTempPath("rln_tree", "waku_rln_relay_3")) + else: + let rlnConf1 = WakuRlnConfig(rlnRelayDynamic: false, + rlnRelayCredIndex: some(index1), + rlnEpochSizeSec: 1, + rlnRelayTreePath: genTempPath("rln_tree", "waku_rln_relay_3")) + let wakuRlnRelay1 = (await WakuRlnRelay.new(rlnConf1)).valueOr: raiseAssert "failed to create waku rln relay: " & $error - let rlnConf2 = WakuRlnConfig(rlnRelayDynamic: false, - rlnRelayCredIndex: some(index2), - rlnEpochSizeSec: 1, - rlnRelayTreePath: genTempPath("rln_tree", "waku_rln_relay_4")) + when defined(rln_v2): + let rlnConf2 = WakuRlnConfig(rlnRelayDynamic: false, + rlnRelayCredIndex: some(index2), + rlnRelayUserMessageLimit: 1, + rlnEpochSizeSec: 1, + rlnRelayTreePath: genTempPath("rln_tree", "waku_rln_relay_4")) + else: + let rlnConf2 = WakuRlnConfig(rlnRelayDynamic: false, + rlnRelayCredIndex: some(index2), + rlnEpochSizeSec: 1, + rlnRelayTreePath: genTempPath("rln_tree", "waku_rln_relay_4")) let wakuRlnRelay2 = (await WakuRlnRelay.new(rlnConf2)).valueOr: raiseAssert "failed to create waku rln relay: " & $error # get the current epoch time @@ -740,13 +763,10 @@ suite "Waku rln relay": wm2 = WakuMessage(payload: "Valid message from sender 2".toBytes()) - let - proofAdded1 = wakuRlnRelay1.appendRLNProof(wm1, time) - proofAdded2 = wakuRlnRelay2.appendRLNProof(wm2, time) - - # ensure proofs are added - assert proofAdded1.isOk(), "failed to append rln proof: " & $proofAdded1.error - assert proofAdded2.isOk(), "failed to append rln proof: " & $proofAdded2.error + wakuRlnRelay1.appendRLNProof(wm1, time).isOkOr: + raiseAssert $error + wakuRlnRelay2.appendRLNProof(wm2, time).isOkOr: + raiseAssert $error # validate messages # validateMessage proc checks the validity of the message fields and adds it to the log (if valid) diff --git a/tests/waku_rln_relay/test_wakunode_rln_relay.nim b/tests/waku_rln_relay/test_wakunode_rln_relay.nim index d0e4d2d98e..f3399909c0 100644 --- a/tests/waku_rln_relay/test_wakunode_rln_relay.nim +++ b/tests/waku_rln_relay/test_wakunode_rln_relay.nim @@ -14,11 +14,13 @@ import ../../../waku/waku_node, ../../../waku/waku_rln_relay, ../testlib/wakucore, - ../testlib/wakunode + ../testlib/wakunode, + ./rln/waku_rln_relay_utils from std/times import epochTime procSuite "WakuNode - RLN relay": + # NOTE: we set the rlnRelayUserMessageLimit to 1 to make the tests easier to reason about asyncTest "testing rln-relay with valid proof": let @@ -39,33 +41,54 @@ procSuite "WakuNode - RLN relay": await node1.mountRelay(@[DefaultPubsubTopic]) # mount rlnrelay in off-chain mode - await node1.mountRlnRelay(WakuRlnConfig(rlnRelayDynamic: false, - rlnRelayCredIndex: some(1.uint), - rlnEpochSizeSec: 1, - rlnRelayTreePath: genTempPath("rln_tree", "wakunode"), - )) + when defined(rln_v2): + let wakuRlnConfig1 = WakuRlnConfig(rlnRelayDynamic: false, + rlnRelayCredIndex: some(1.uint), + rlnRelayUserMessageLimit: 1, + rlnEpochSizeSec: 1, + rlnRelayTreePath: genTempPath("rln_tree", "wakunode")) + else: + let wakuRlnConfig1 = WakuRlnConfig(rlnRelayDynamic: false, + rlnRelayCredIndex: some(1.uint), + rlnEpochSizeSec: 1, + rlnRelayTreePath: genTempPath("rln_tree", "wakunode")) + await node1.mountRlnRelay(wakuRlnConfig1) await node1.start() # node 2 await node2.mountRelay(@[DefaultPubsubTopic]) # mount rlnrelay in off-chain mode - await node2.mountRlnRelay(WakuRlnConfig(rlnRelayDynamic: false, - rlnRelayCredIndex: some(2.uint), - rlnEpochSizeSec: 1, - rlnRelayTreePath: genTempPath("rln_tree", "wakunode_2"), - )) + when defined(rln_v2): + let wakuRlnConfig2 = WakuRlnConfig(rlnRelayDynamic: false, + rlnRelayCredIndex: some(2.uint), + rlnRelayUserMessageLimit: 1, + rlnEpochSizeSec: 1, + rlnRelayTreePath: genTempPath("rln_tree", "wakunode_2")) + else: + let wakuRlnConfig2 = WakuRlnConfig(rlnRelayDynamic: false, + rlnRelayCredIndex: some(2.uint), + rlnEpochSizeSec: 1, + rlnRelayTreePath: genTempPath("rln_tree", "wakunode_2")) + await node2.mountRlnRelay(wakuRlnConfig2) await node2.start() # node 3 await node3.mountRelay(@[DefaultPubsubTopic]) - await node3.mountRlnRelay(WakuRlnConfig(rlnRelayDynamic: false, - rlnRelayCredIndex: some(3.uint), - rlnEpochSizeSec: 1, - rlnRelayTreePath: genTempPath("rln_tree", "wakunode_3"), - )) + when defined(rln_v2): + let wakuRlnConfig3 = WakuRlnConfig(rlnRelayDynamic: false, + rlnRelayCredIndex: some(3.uint), + rlnRelayUserMessageLimit: 1, + rlnEpochSizeSec: 1, + rlnRelayTreePath: genTempPath("rln_tree", "wakunode_3")) + else: + let wakuRlnConfig3 = WakuRlnConfig(rlnRelayDynamic: false, + rlnRelayCredIndex: some(3.uint), + rlnEpochSizeSec: 1, + rlnRelayTreePath: genTempPath("rln_tree", "wakunode_3")) + await node3.mountRlnRelay(wakuRlnConfig3) await node3.start() @@ -88,7 +111,7 @@ procSuite "WakuNode - RLN relay": # prepare the epoch var message = WakuMessage(payload: @payload, contentTopic: contentTopic) - doAssert(node1.wakuRlnRelay.appendRLNProof(message, epochTime()).isOk()) + doAssert(node1.wakuRlnRelay.unsafeAppendRLNProof(message, epochTime()).isOk()) ## node1 publishes a message with a rate limit proof, the message is then relayed to node2 which in turn @@ -123,10 +146,18 @@ procSuite "WakuNode - RLN relay": # mount rlnrelay in off-chain mode for index, node in nodes: - await node.mountRlnRelay(WakuRlnConfig(rlnRelayDynamic: false, - rlnRelayCredIndex: some(index.uint + 1), - rlnEpochSizeSec: 1, - rlnRelayTreePath: genTempPath("rln_tree", "wakunode_" & $(index+1)))) + when defined(rln_v2): + let wakuRlnConfig = WakuRlnConfig(rlnRelayDynamic: false, + rlnRelayCredIndex: some(index.uint + 1), + rlnRelayUserMessageLimit: 1, + rlnEpochSizeSec: 1, + rlnRelayTreePath: genTempPath("rln_tree", "wakunode_" & $(index+1))) + else: + let wakuRlnConfig = WakuRlnConfig(rlnRelayDynamic: false, + rlnRelayCredIndex: some(index.uint + 1), + rlnEpochSizeSec: 1, + rlnRelayTreePath: genTempPath("rln_tree", "wakunode_" & $(index+1))) + await node.mountRlnRelay(wakuRlnConfig) # start them await allFutures(nodes.mapIt(it.start())) @@ -159,12 +190,14 @@ procSuite "WakuNode - RLN relay": for i in 0..<3: var message = WakuMessage(payload: ("Payload_" & $i).toBytes(), contentTopic: contentTopics[0]) - doAssert(nodes[0].wakuRlnRelay.appendRLNProof(message, epochTime).isOk()) + nodes[0].wakuRlnRelay.unsafeAppendRLNProof(message, epochTime).isOkOr: + raiseAssert $error messages1.add(message) for i in 0..<3: var message = WakuMessage(payload: ("Payload_" & $i).toBytes(), contentTopic: contentTopics[1]) - doAssert(nodes[1].wakuRlnRelay.appendRLNProof(message, epochTime).isOk()) + nodes[1].wakuRlnRelay.unsafeAppendRLNProof(message, epochTime).isOkOr: + raiseAssert $error messages2.add(message) # publish 3 messages from node[0] (last 2 are spam, window is 10 secs) @@ -202,34 +235,54 @@ procSuite "WakuNode - RLN relay": await node1.mountRelay(@[DefaultPubsubTopic]) # mount rlnrelay in off-chain mode - await node1.mountRlnRelay(WakuRlnConfig(rlnRelayDynamic: false, - rlnRelayCredIndex: some(1.uint), - rlnEpochSizeSec: 1, - rlnRelayTreePath: genTempPath("rln_tree", "wakunode_4"), - )) + when defined(rln_v2): + let wakuRlnConfig1 = WakuRlnConfig(rlnRelayDynamic: false, + rlnRelayCredIndex: some(1.uint), + rlnRelayUserMessageLimit: 1, + rlnEpochSizeSec: 1, + rlnRelayTreePath: genTempPath("rln_tree", "wakunode_4")) + else: + let wakuRlnConfig1 = WakuRlnConfig(rlnRelayDynamic: false, + rlnRelayCredIndex: some(1.uint), + rlnEpochSizeSec: 1, + rlnRelayTreePath: genTempPath("rln_tree", "wakunode_4")) + await node1.mountRlnRelay(wakuRlnConfig1) await node1.start() # node 2 await node2.mountRelay(@[DefaultPubsubTopic]) # mount rlnrelay in off-chain mode - await node2.mountRlnRelay(WakuRlnConfig(rlnRelayDynamic: false, - rlnRelayCredIndex: some(2.uint), - rlnEpochSizeSec: 1, - rlnRelayTreePath: genTempPath("rln_tree", "wakunode_5"), - )) + when defined(rln_v2): + let wakuRlnConfig2 = WakuRlnConfig(rlnRelayDynamic: false, + rlnRelayCredIndex: some(2.uint), + rlnRelayUserMessageLimit: 1, + rlnEpochSizeSec: 1, + rlnRelayTreePath: genTempPath("rln_tree", "wakunode_5")) + else: + let wakuRlnConfig2 = WakuRlnConfig(rlnRelayDynamic: false, + rlnRelayCredIndex: some(2.uint), + rlnEpochSizeSec: 1, + rlnRelayTreePath: genTempPath("rln_tree", "wakunode_5")) + await node2.mountRlnRelay(wakuRlnConfig2) await node2.start() # node 3 await node3.mountRelay(@[DefaultPubsubTopic]) - await node3.mountRlnRelay(WakuRlnConfig(rlnRelayDynamic: false, - rlnRelayCredIndex: some(3.uint), - rlnEpochSizeSec: 1, - rlnRelayTreePath: genTempPath("rln_tree", "wakunode_6"), - )) - + when defined(rln_v2): + let wakuRlnConfig3 = WakuRlnConfig(rlnRelayDynamic: false, + rlnRelayCredIndex: some(3.uint), + rlnRelayUserMessageLimit: 1, + rlnEpochSizeSec: 1, + rlnRelayTreePath: genTempPath("rln_tree", "wakunode_6")) + else: + let wakuRlnConfig3 = WakuRlnConfig(rlnRelayDynamic: false, + rlnRelayCredIndex: some(3.uint), + rlnEpochSizeSec: 1, + rlnRelayTreePath: genTempPath("rln_tree", "wakunode_6")) + await node3.mountRlnRelay(wakuRlnConfig3) await node3.start() # connect them together @@ -261,14 +314,13 @@ procSuite "WakuNode - RLN relay": when defined(rln_v2): let nonceManager = node1.wakuRlnRelay.nonceManager - let rateLimitProofRes = node1.wakuRlnRelay.groupManager.generateProof(input, + let rateLimitProofRes = node1.wakuRlnRelay.groupManager.generateProof(concat(input, extraBytes), epoch, MessageId(0)) else: let rateLimitProofRes = node1.wakuRlnRelay.groupManager.generateProof(concat(input, extraBytes), # we add extra bytes to invalidate proof verification against original payload epoch) - require: - rateLimitProofRes.isOk() + assert rateLimitProofRes.isOk(), $rateLimitProofRes.error # check the proof is generated correctly outside when block to avoid duplication let rateLimitProof = rateLimitProofRes.get().encode().buffer let message = WakuMessage(payload: @payload, @@ -311,11 +363,18 @@ procSuite "WakuNode - RLN relay": await node1.mountRelay(@[DefaultPubsubTopic]) # mount rlnrelay in off-chain mode - await node1.mountRlnRelay(WakuRlnConfig(rlnRelayDynamic: false, - rlnRelayCredIndex: some(1.uint), - rlnEpochSizeSec: 1, - rlnRelayTreePath: genTempPath("rln_tree", "wakunode_7"), - )) + when defined(rln_v2): + let wakuRlnConfig1 = WakuRlnConfig(rlnRelayDynamic: false, + rlnRelayCredIndex: some(1.uint), + rlnRelayUserMessageLimit: 1, + rlnEpochSizeSec: 1, + rlnRelayTreePath: genTempPath("rln_tree", "wakunode_7")) + else: + let wakuRlnConfig1 = WakuRlnConfig(rlnRelayDynamic: false, + rlnRelayCredIndex: some(1.uint), + rlnEpochSizeSec: 1, + rlnRelayTreePath: genTempPath("rln_tree", "wakunode_7")) + await node1.mountRlnRelay(wakuRlnConfig1) await node1.start() @@ -323,23 +382,36 @@ procSuite "WakuNode - RLN relay": await node2.mountRelay(@[DefaultPubsubTopic]) # mount rlnrelay in off-chain mode - await node2.mountRlnRelay(WakuRlnConfig(rlnRelayDynamic: false, - rlnRelayCredIndex: some(2.uint), - rlnEpochSizeSec: 1, - rlnRelayTreePath: genTempPath("rln_tree", "wakunode_8"), - )) - + when defined(rln_v2): + let wakuRlnConfig2 = WakuRlnConfig(rlnRelayDynamic: false, + rlnRelayCredIndex: some(2.uint), + rlnRelayUserMessageLimit: 1, + rlnEpochSizeSec: 1, + rlnRelayTreePath: genTempPath("rln_tree", "wakunode_8")) + else: + let wakuRlnConfig2 = WakuRlnConfig(rlnRelayDynamic: false, + rlnRelayCredIndex: some(2.uint), + rlnEpochSizeSec: 1, + rlnRelayTreePath: genTempPath("rln_tree", "wakunode_8")) + await node2.mountRlnRelay(wakuRlnConfig2) await node2.start() # node 3 await node3.mountRelay(@[DefaultPubsubTopic]) # mount rlnrelay in off-chain mode - await node3.mountRlnRelay(WakuRlnConfig(rlnRelayDynamic: false, - rlnRelayCredIndex: some(3.uint), - rlnEpochSizeSec: 1, - rlnRelayTreePath: genTempPath("rln_tree", "wakunode_9"), - )) + when defined(rln_v2): + let wakuRlnConfig3 = WakuRlnConfig(rlnRelayDynamic: false, + rlnRelayCredIndex: some(3.uint), + rlnRelayUserMessageLimit: 1, + rlnEpochSizeSec: 1, + rlnRelayTreePath: genTempPath("rln_tree", "wakunode_9")) + else: + let wakuRlnConfig3 = WakuRlnConfig(rlnRelayDynamic: false, + rlnRelayCredIndex: some(3.uint), + rlnEpochSizeSec: 1, + rlnRelayTreePath: genTempPath("rln_tree", "wakunode_9")) + await node3.mountRlnRelay(wakuRlnConfig3) await node3.start() @@ -352,20 +424,18 @@ procSuite "WakuNode - RLN relay": # create some messages with rate limit proofs var wm1 = WakuMessage(payload: "message 1".toBytes(), contentTopic: contentTopic) - proofAdded1 = node3.wakuRlnRelay.appendRLNProof(wm1, time) # another message in the same epoch as wm1, it will break the messaging rate limit wm2 = WakuMessage(payload: "message 2".toBytes(), contentTopic: contentTopic) - proofAdded2 = node3.wakuRlnRelay.appendRLNProof(wm2, time) # wm3 points to the next epoch wm3 = WakuMessage(payload: "message 3".toBytes(), contentTopic: contentTopic) - proofAdded3 = node3.wakuRlnRelay.appendRLNProof(wm3, time+float64(node3.wakuRlnRelay.rlnEpochSizeSec)) wm4 = WakuMessage(payload: "message 4".toBytes(), contentTopic: contentTopic) - - # check proofs are added correctly - check: - proofAdded1.isOk() - proofAdded2.isOk() - proofAdded3.isOk() + + node3.wakuRlnRelay.unsafeAppendRLNProof(wm1, time).isOkOr: + raiseAssert $error + node3.wakuRlnRelay.unsafeAppendRLNProof(wm2, time).isOkOr: + raiseAssert $error + node3.wakuRlnRelay.unsafeAppendRLNProof(wm3, time+float64(node3.wakuRlnRelay.rlnEpochSizeSec)).isOkOr: + raiseAssert $error # relay handler for node3 var completionFut1 = newFuture[bool]() @@ -434,11 +504,18 @@ procSuite "WakuNode - RLN relay": await node1.mountRelay(@[DefaultPubsubTopic]) # mount rlnrelay in off-chain mode - await node1.mountRlnRelay(WakuRlnConfig(rlnRelayDynamic: false, - rlnRelayCredIndex: some(1.uint), - rlnEpochSizeSec: 1, - rlnRelayTreePath: genTempPath("rln_tree", "wakunode_10"), - )) + when defined(rln_v2): + let wakuRlnConfig1 = WakuRlnConfig(rlnRelayDynamic: false, + rlnRelayCredIndex: some(1.uint), + rlnRelayUserMessageLimit: 1, + rlnEpochSizeSec: 1, + rlnRelayTreePath: genTempPath("rln_tree", "wakunode_10")) + else: + let wakuRlnConfig1 = WakuRlnConfig(rlnRelayDynamic: false, + rlnRelayCredIndex: some(1.uint), + rlnEpochSizeSec: 1, + rlnRelayTreePath: genTempPath("rln_tree", "wakunode_10")) + await node1.mountRlnRelay(wakuRlnConfig1) await node1.start() @@ -446,11 +523,18 @@ procSuite "WakuNode - RLN relay": await node2.mountRelay(@[DefaultPubsubTopic]) # mount rlnrelay in off-chain mode - await node2.mountRlnRelay(WakuRlnConfig(rlnRelayDynamic: false, - rlnRelayCredIndex: some(2.uint), - rlnEpochSizeSec: 1, - rlnRelayTreePath: genTempPath("rln_tree", "wakunode_11"), - )) + when defined(rln_v2): + let wakuRlnConfig2 = WakuRlnConfig(rlnRelayDynamic: false, + rlnRelayCredIndex: some(2.uint), + rlnRelayUserMessageLimit: 1, + rlnEpochSizeSec: 1, + rlnRelayTreePath: genTempPath("rln_tree", "wakunode_11")) + else: + let wakuRlnConfig2 = WakuRlnConfig(rlnRelayDynamic: false, + rlnRelayCredIndex: some(2.uint), + rlnEpochSizeSec: 1, + rlnRelayTreePath: genTempPath("rln_tree", "wakunode_11")) + await node2.mountRlnRelay(wakuRlnConfig2) await node2.start() @@ -461,19 +545,17 @@ procSuite "WakuNode - RLN relay": # create some messages with rate limit proofs var wm1 = WakuMessage(payload: "message 1".toBytes(), contentTopic: contentTopic) - proofAdded1 = node1.wakuRlnRelay.appendRLNProof(wm1, time) # another message in the same epoch as wm1, it will break the messaging rate limit wm2 = WakuMessage(payload: "message 2".toBytes(), contentTopic: contentTopic) - proofAdded2 = node1.wakuRlnRelay.appendRLNProof(wm2, time) # wm3 points to the next epoch wm3 = WakuMessage(payload: "message 3".toBytes(), contentTopic: contentTopic) - proofAdded3 = node1.wakuRlnRelay.appendRLNProof(wm3, time + float64(node1.wakuRlnRelay.rlnEpochSizeSec * 2)) - # check proofs are added correctly - check: - proofAdded1.isOk() - proofAdded2.isOk() - proofAdded3.isOk() + node1.wakuRlnRelay.unsafeAppendRLNProof(wm1, time).isOkOr: + raiseAssert $error + node1.wakuRlnRelay.unsafeAppendRLNProof(wm2, time).isOkOr: + raiseAssert $error + node1.wakuRlnRelay.unsafeAppendRLNProof(wm3, time + float64(node1.wakuRlnRelay.rlnEpochSizeSec * 2)).isOkOr: + raiseAssert $error # relay handler for node2 var completionFut1 = newFuture[bool]() diff --git a/tests/wakunode_rest/test_rest_relay.nim b/tests/wakunode_rest/test_rest_relay.nim index 9ec2485af5..a287c03291 100644 --- a/tests/wakunode_rest/test_rest_relay.nim +++ b/tests/wakunode_rest/test_rest_relay.nim @@ -208,10 +208,18 @@ suite "Waku v2 Rest API - Relay": let node = testWakuNode() await node.start() await node.mountRelay() - await node.mountRlnRelay(WakuRlnConfig(rlnRelayDynamic: false, + when defined(rln_v2): + let wakuRlnConfig = WakuRlnConfig(rlnRelayDynamic: false, rlnRelayCredIndex: some(1.uint), + rlnRelayUserMessageLimit: 20, rlnEpochSizeSec: 1, - rlnRelayTreePath: genTempPath("rln_tree", "wakunode_1"))) + rlnRelayTreePath: genTempPath("rln_tree", "wakunode_1")) + else: + let wakuRlnConfig = WakuRlnConfig(rlnRelayDynamic: false, + rlnRelayCredIndex: some(1.uint), + rlnEpochSizeSec: 1, + rlnRelayTreePath: genTempPath("rln_tree", "wakunode_1")) + await node.mountRlnRelay(wakuRlnConfig) # RPC server setup var restPort = Port(0) @@ -411,10 +419,18 @@ suite "Waku v2 Rest API - Relay": let node = testWakuNode() await node.start() await node.mountRelay() - await node.mountRlnRelay(WakuRlnConfig(rlnRelayDynamic: false, + when defined(rln_v2): + let wakuRlnConfig = WakuRlnConfig(rlnRelayDynamic: false, rlnRelayCredIndex: some(1.uint), + rlnRelayUserMessageLimit: 20, rlnEpochSizeSec: 1, - rlnRelayTreePath: genTempPath("rln_tree", "wakunode_1"))) + rlnRelayTreePath: genTempPath("rln_tree", "wakunode_1")) + else: + let wakuRlnConfig = WakuRlnConfig(rlnRelayDynamic: false, + rlnRelayCredIndex: some(1.uint), + rlnEpochSizeSec: 1, + rlnRelayTreePath: genTempPath("rln_tree", "wakunode_1")) + await node.mountRlnRelay(wakuRlnConfig) # RPC server setup var restPort = Port(0) @@ -456,10 +472,18 @@ suite "Waku v2 Rest API - Relay": let node = testWakuNode() await node.start() await node.mountRelay() - await node.mountRlnRelay(WakuRlnConfig(rlnRelayDynamic: false, + when defined(rln_v2): + let wakuRlnConfig = WakuRlnConfig(rlnRelayDynamic: false, + rlnRelayCredIndex: some(1.uint), + rlnRelayUserMessageLimit: 20, + rlnEpochSizeSec: 1, + rlnRelayTreePath: genTempPath("rln_tree", "wakunode_1")) + else: + let wakuRlnConfig = WakuRlnConfig(rlnRelayDynamic: false, rlnRelayCredIndex: some(1.uint), rlnEpochSizeSec: 1, - rlnRelayTreePath: genTempPath("rln_tree", "wakunode_1"))) + rlnRelayTreePath: genTempPath("rln_tree", "wakunode_1")) + await node.mountRlnRelay(wakuRlnConfig) # RPC server setup var restPort = Port(0) @@ -496,10 +520,18 @@ suite "Waku v2 Rest API - Relay": let node = testWakuNode() await node.start() await node.mountRelay() - await node.mountRlnRelay(WakuRlnConfig(rlnRelayDynamic: false, + when defined(rln_v2): + let wakuRlnConfig = WakuRlnConfig(rlnRelayDynamic: false, + rlnRelayCredIndex: some(1.uint), + rlnRelayUserMessageLimit: 20, + rlnEpochSizeSec: 1, + rlnRelayTreePath: genTempPath("rln_tree", "wakunode_1")) + else: + let wakuRlnConfig = WakuRlnConfig(rlnRelayDynamic: false, rlnRelayCredIndex: some(1.uint), rlnEpochSizeSec: 1, - rlnRelayTreePath: genTempPath("rln_tree", "wakunode_1"))) + rlnRelayTreePath: genTempPath("rln_tree", "wakunode_1")) + await node.mountRlnRelay(wakuRlnConfig) # RPC server setup var restPort = Port(0) @@ -541,10 +573,18 @@ suite "Waku v2 Rest API - Relay": let node = testWakuNode() await node.start() await node.mountRelay() - await node.mountRlnRelay(WakuRlnConfig(rlnRelayDynamic: false, + when defined(rln_v2): + let wakuRlnConfig = WakuRlnConfig(rlnRelayDynamic: false, + rlnRelayCredIndex: some(1.uint), + rlnRelayUserMessageLimit: 20, + rlnEpochSizeSec: 1, + rlnRelayTreePath: genTempPath("rln_tree", "wakunode_1")) + else: + let wakuRlnConfig = WakuRlnConfig(rlnRelayDynamic: false, rlnRelayCredIndex: some(1.uint), rlnEpochSizeSec: 1, - rlnRelayTreePath: genTempPath("rln_tree", "wakunode_1"))) + rlnRelayTreePath: genTempPath("rln_tree", "wakunode_1")) + await node.mountRlnRelay(wakuRlnConfig) # RPC server setup var restPort = Port(0) diff --git a/waku/waku_api/rest/relay/handlers.nim b/waku/waku_api/rest/relay/handlers.nim index d3efa02781..00e94caa7b 100644 --- a/waku/waku_api/rest/relay/handlers.nim +++ b/waku/waku_api/rest/relay/handlers.nim @@ -132,7 +132,7 @@ proc installRelayApiHandlers*(router: var RestRouter, node: WakuNode, cache: Mes # append the proof to the message node.wakuRlnRelay.appendRLNProof(message, float64(getTime().toUnix())).isOkOr: - return RestApiResponse.internalServerError("Failed to publish: error appending RLN proof to message") + return RestApiResponse.internalServerError("Failed to publish: error appending RLN proof to message: " & $error) (await node.wakuRelay.validateMessage(pubsubTopic, message)).isOkOr: return RestApiResponse.badRequest("Failed to publish: " & error) @@ -220,7 +220,7 @@ proc installRelayApiHandlers*(router: var RestRouter, node: WakuNode, cache: Mes if not node.wakuRlnRelay.isNil(): node.wakuRlnRelay.appendRLNProof(message, float64(getTime().toUnix())).isOkOr: return RestApiResponse.internalServerError( - "Failed to publish: error appending RLN proof to message") + "Failed to publish: error appending RLN proof to message: " & $error) (await node.wakuRelay.validateMessage(pubsubTopic, message)).isOkOr: return RestApiResponse.badRequest("Failed to publish: " & error) diff --git a/waku/waku_rln_relay/constants.nim b/waku/waku_rln_relay/constants.nim index 5ad19ee92e..83f8e7d8d1 100644 --- a/waku/waku_rln_relay/constants.nim +++ b/waku/waku_rln_relay/constants.nim @@ -58,7 +58,7 @@ const # rln-v2: rate commitments are used for the Merkle tree construction, defaulting the UserMessageLimit to 20 # the root is created locally, using createMembershipList proc from waku_rln_relay_utils module, and the result is hardcoded in here when defined(rln_v2): - const StaticGroupMerkleRoot* = "0a15ba7c5753ee78e8126603113028a343c1a01ffcb389565c76626be158e964" + const StaticGroupMerkleRoot* = "2c149e48886b5ba3da2edf8db8d7a364ae7a25618489c04cf0c0380f7cdd4d6f" else: const StaticGroupMerkleRoot* = "1e534adab58f7d300aaeecae57a25e0a0b18c368a09f720280da92b288950901" diff --git a/waku/waku_rln_relay/conversion_utils.nim b/waku/waku_rln_relay/conversion_utils.nim index 814eb98af3..f1bd7b6cdb 100644 --- a/waku/waku_rln_relay/conversion_utils.nim +++ b/waku/waku_rln_relay/conversion_utils.nim @@ -149,7 +149,7 @@ proc serialize*(memIndices: seq[MembershipIndex]): seq[byte] = proc toEpoch*(t: uint64): Epoch = ## converts `t` to `Epoch` in little-endian order let bytes = toBytes(t, Endianness.littleEndian) - debug "bytes", bytes = bytes + trace "epoch bytes", bytes = bytes var epoch: Epoch discard epoch.copyFrom(bytes) return epoch diff --git a/waku/waku_rln_relay/nonce_manager.nim b/waku/waku_rln_relay/nonce_manager.nim index e41e7ce4ab..13f8ae546a 100644 --- a/waku/waku_rln_relay/nonce_manager.nim +++ b/waku/waku_rln_relay/nonce_manager.nim @@ -43,9 +43,9 @@ proc `$`*(ne: NonceManagerError): string = of NonceLimitReached: return "NonceLimitReached: " & ne.error -proc init*(T: type NonceManager, nonceLimit: Nonce): T = +proc init*(T: type NonceManager, nonceLimit: Nonce, epoch = 1.float64): T = return NonceManager( - epoch: 0, + epoch: epoch, nextNonce: 0, lastNonceTime: 0, nonceLimit: nonceLimit @@ -62,6 +62,6 @@ proc getNonce*(n: NonceManager): NonceManagerResult[Nonce] = if retNonce >= n.nonceLimit: return err(NonceManagerError(kind: NonceLimitReached, - error: "Nonce limit reached. Please wait for the next epoch")) + error: "Nonce limit reached. Please wait for the next epoch. requested nonce: " & $retNonce & " & nonceLimit: " & $n.nonceLimit)) return ok(retNonce) diff --git a/waku/waku_rln_relay/rln/wrappers.nim b/waku/waku_rln_relay/rln/wrappers.nim index 675918fcfc..ae83db0522 100644 --- a/waku/waku_rln_relay/rln/wrappers.nim +++ b/waku/waku_rln_relay/rln/wrappers.nim @@ -163,7 +163,11 @@ proc poseidon*(data: seq[seq[byte]]): RlnRelayResult[array[32, byte]] = when defined(rln_v2): proc toLeaf*(rateCommitment: RateCommitment): RlnRelayResult[seq[byte]] = let idCommitment = rateCommitment.idCommitment - let userMessageLimit = cast[array[32, byte]](rateCommitment.userMessageLimit) + var userMessageLimit: array[32, byte] + try: + discard userMessageLimit.copyFrom(toBytes(rateCommitment.userMessageLimit, Endianness.littleEndian)) + except CatchableError: + return err("could not convert the user message limit to bytes: " & getCurrentExceptionMsg()) let leaf = poseidon(@[@idCommitment, @userMessageLimit]).valueOr: return err("could not convert the rate commitment to a leaf") var retLeaf = newSeq[byte](leaf.len) @@ -179,27 +183,16 @@ when defined(rln_v2): leaves.add(leaf) return ok(leaves) - # TODO: collocate this proc with the definition of the RateLimitProof - # and the ProofMetadata types - proc extractMetadata*(proof: RateLimitProof): RlnRelayResult[ProofMetadata] = - return ok(ProofMetadata( - nullifier: proof.nullifier, - shareX: proof.shareX, - shareY: proof.shareY, - externalNullifier: proof.externalNullifier - )) -else: - proc extractMetadata*(proof: RateLimitProof): RlnRelayResult[ProofMetadata] = - let externalNullifierRes = poseidon(@[@(proof.epoch), - @(proof.rlnIdentifier)]) - if externalNullifierRes.isErr(): - return err("could not construct the external nullifier") - return ok(ProofMetadata( - nullifier: proof.nullifier, - shareX: proof.shareX, - shareY: proof.shareY, - externalNullifier: externalNullifierRes.get() - )) +proc extractMetadata*(proof: RateLimitProof): RlnRelayResult[ProofMetadata] = + let externalNullifier = poseidon(@[@(proof.epoch), + @(proof.rlnIdentifier)]).valueOr: + return err("could not construct the external nullifier") + return ok(ProofMetadata( + nullifier: proof.nullifier, + shareX: proof.shareX, + shareY: proof.shareY, + externalNullifier: externalNullifier + )) when defined(rln_v2): proc proofGen*(rlnInstance: ptr RLN, @@ -266,6 +259,8 @@ when defined(rln_v2): let output = RateLimitProof(proof: zkproof, merkleRoot: proofRoot, externalNullifier: externalNullifier, + epoch: epoch, + rlnIdentifier: rlnIdentifier, shareX: shareX, shareY: shareY, nullifier: nullifier) @@ -339,8 +334,15 @@ proc proofVerify*(rlnInstance: ptr RLN, validRoots: seq[MerkleNode] = @[]): RlnRelayResult[bool] = ## verifies the proof, returns an error if the proof verification fails ## returns true if the proof is valid + var normalizedProof = proof + when defined(rln_v2): + # when we do this, we ensure that we compute the proof for the derived value + # of the externalNullifier. The proof verification will fail if a malicious peer + # attaches invalid epoch+rlnidentifier pair + normalizedProof.externalNullifier = poseidon(@[@(proof.epoch), @(proof.rlnIdentifier)]).valueOr: + return err("could not construct the external nullifier") var - proofBytes = serialize(proof, data) + proofBytes = serialize(normalizedProof, data) proofBuffer = proofBytes.toBuffer() validProof: bool rootsBytes = serialize(validRoots) diff --git a/waku/waku_rln_relay/rln_relay.nim b/waku/waku_rln_relay/rln_relay.nim index d0a4583da2..5e690f47d0 100644 --- a/waku/waku_rln_relay/rln_relay.nim +++ b/waku/waku_rln_relay/rln_relay.nim @@ -408,7 +408,7 @@ proc mount(conf: WakuRlnConfig, when defined(rln_v2): return WakuRLNRelay(groupManager: groupManager, - nonceManager: NonceManager.init(conf.rlnRelayUserMessageLimit), + nonceManager: NonceManager.init(conf.rlnRelayUserMessageLimit, conf.rlnEpochSizeSec.float), rlnEpochSizeSec: conf.rlnEpochSizeSec, rlnMaxEpochGap: uint64(MaxClockGapSeconds/float64(conf.rlnEpochSizeSec)), onFatalErrorAction: conf.onFatalErrorAction) From 505479b870031c2b9946c2cdc325aa5880b9851e Mon Sep 17 00:00:00 2001 From: Simon-Pierre Vivier Date: Tue, 12 Mar 2024 07:51:03 -0400 Subject: [PATCH 272/274] feat: archive update for store v3 (#2451) --- tests/waku_archive/archive_utils.nim | 5 +- tests/waku_archive/test_driver_postgres.nim | 9 +- .../test_driver_postgres_query.nim | 43 ++- tests/waku_archive/test_driver_queue.nim | 40 +-- .../test_driver_queue_pagination.nim | 23 +- .../waku_archive/test_driver_queue_query.nim | 3 +- tests/waku_archive/test_driver_sqlite.nim | 8 +- tests/waku_archive/test_retention_policy.nim | 2 +- waku/node/waku_node.nim | 14 +- waku/waku_archive/archive.nim | 271 +++++++++--------- waku/waku_archive/common.nim | 37 +-- waku/waku_archive/driver.nim | 7 +- .../postgres_driver/postgres_driver.nim | 71 +++-- .../driver/queue_driver/index.nim | 29 +- .../driver/queue_driver/queue_driver.nim | 144 +++++----- .../driver/sqlite_driver/migrations.nim | 4 +- .../driver/sqlite_driver/queries.nim | 155 ++++++---- .../driver/sqlite_driver/sqlite_driver.nim | 8 +- waku/waku_core/message/digest.nim | 8 +- waku/waku_core/message/message.nim | 3 +- 20 files changed, 502 insertions(+), 382 deletions(-) diff --git a/tests/waku_archive/archive_utils.nim b/tests/waku_archive/archive_utils.nim index a4daee55d3..3778a52246 100644 --- a/tests/waku_archive/archive_utils.nim +++ b/tests/waku_archive/archive_utils.nim @@ -30,7 +30,8 @@ proc computeArchiveCursor*( pubsubTopic: pubsubTopic, senderTime: message.timestamp, storeTime: message.timestamp, - digest: waku_archive.computeDigest(message), + digest: computeDigest(message), + hash: computeMessageHash(pubsubTopic, message), ) proc put*( @@ -38,7 +39,7 @@ proc put*( ): ArchiveDriver = for msg in msgList: let - msgDigest = waku_archive.computeDigest(msg) + msgDigest = computeDigest(msg) msgHash = computeMessageHash(pubsubTopic, msg) _ = waitFor driver.put(pubsubTopic, msg, msgDigest, msgHash, msg.timestamp) # discard crashes diff --git a/tests/waku_archive/test_driver_postgres.nim b/tests/waku_archive/test_driver_postgres.nim index 92e6aad2b1..7c603512fd 100644 --- a/tests/waku_archive/test_driver_postgres.nim +++ b/tests/waku_archive/test_driver_postgres.nim @@ -20,7 +20,8 @@ proc computeTestCursor(pubsubTopic: PubsubTopic, pubsubTopic: pubsubTopic, senderTime: message.timestamp, storeTime: message.timestamp, - digest: computeDigest(message) + digest: computeDigest(message), + hash: computeMessageHash(pubsubTopic, message), ) suite "Postgres driver": @@ -62,19 +63,21 @@ suite "Postgres driver": let msg = fakeWakuMessage(contentTopic=contentTopic) let computedDigest = computeDigest(msg) + let computedHash = computeMessageHash(DefaultPubsubTopic, msg) - let putRes = await driver.put(DefaultPubsubTopic, msg, computedDigest, computeMessageHash(DefaultPubsubTopic, msg), msg.timestamp) + let putRes = await driver.put(DefaultPubsubTopic, msg, computedDigest, computedHash, msg.timestamp) assert putRes.isOk(), putRes.error let storedMsg = (await driver.getAllMessages()).tryGet() assert storedMsg.len == 1 - let (pubsubTopic, actualMsg, digest, storeTimestamp) = storedMsg[0] + let (pubsubTopic, actualMsg, digest, _, hash) = storedMsg[0] assert actualMsg.contentTopic == contentTopic assert pubsubTopic == DefaultPubsubTopic assert toHex(computedDigest.data) == toHex(digest) assert toHex(actualMsg.payload) == toHex(msg.payload) + assert toHex(computedHash) == toHex(hash) asyncTest "Insert and query message": const contentTopic1 = "test-content-topic-1" diff --git a/tests/waku_archive/test_driver_postgres_query.nim b/tests/waku_archive/test_driver_postgres_query.nim index 649cc657e6..ad5c6fd07a 100644 --- a/tests/waku_archive/test_driver_postgres_query.nim +++ b/tests/waku_archive/test_driver_postgres_query.nim @@ -8,7 +8,6 @@ import import ../../../waku/waku_archive, ../../../waku/waku_archive/driver as driver_module, - ../../../waku/waku_archive/driver/builder, ../../../waku/waku_archive/driver/postgres_driver, ../../../waku/waku_core, ../../../waku/waku_core/message/digest, @@ -33,7 +32,8 @@ proc computeTestCursor(pubsubTopic: PubsubTopic, message: WakuMessage): ArchiveC pubsubTopic: pubsubTopic, senderTime: message.timestamp, storeTime: message.timestamp, - digest: computeDigest(message) + digest: computeDigest(message), + hash: computeMessageHash(pubsubTopic, message) ) suite "Postgres driver - queries": @@ -652,6 +652,45 @@ suite "Postgres driver - queries": check: filteredMessages == expectedMessages[4..5].reversed() + asyncTest "only hashes - descending order": + ## Given + let timeOrigin = now() + var expected = @[ + fakeWakuMessage(@[byte 0], ts=ts(00, timeOrigin)), + fakeWakuMessage(@[byte 1], ts=ts(10, timeOrigin)), + fakeWakuMessage(@[byte 2], ts=ts(20, timeOrigin)), + fakeWakuMessage(@[byte 3], ts=ts(30, timeOrigin)), + fakeWakuMessage(@[byte 4], ts=ts(40, timeOrigin)), + fakeWakuMessage(@[byte 5], ts=ts(50, timeOrigin)), + fakeWakuMessage(@[byte 6], ts=ts(60, timeOrigin)), + fakeWakuMessage(@[byte 7], ts=ts(70, timeOrigin)), + fakeWakuMessage(@[byte 8], ts=ts(80, timeOrigin)), + fakeWakuMessage(@[byte 9], ts=ts(90, timeOrigin)), + ] + var messages = expected + + shuffle(messages) + debug "randomized message insertion sequence", sequence=messages.mapIt(it.payload) + + let hashes = messages.mapIt(computeMessageHash(DefaultPubsubTopic, it)) + + for (msg, hash) in messages.zip(hashes): + require (await driver.put(DefaultPubsubTopic, msg, computeDigest(msg), hash, msg.timestamp)).isOk() + + ## When + let res = await driver.getMessages( + hashes=hashes, + ascendingOrder=false + ) + + ## Then + assert res.isOk(), res.error + + let expectedMessages = expected.reversed() + let filteredMessages = res.tryGet().mapIt(it[1]) + check: + filteredMessages == expectedMessages + asyncTest "start time only": ## Given const contentTopic = "test-content-topic" diff --git a/tests/waku_archive/test_driver_queue.nim b/tests/waku_archive/test_driver_queue.nim index 852697ea0b..015f54ad42 100644 --- a/tests/waku_archive/test_driver_queue.nim +++ b/tests/waku_archive/test_driver_queue.nim @@ -13,8 +13,8 @@ import # Helper functions -proc genIndexedWakuMessage(i: int8): IndexedWakuMessage = - ## Use i to generate an IndexedWakuMessage +proc genIndexedWakuMessage(i: int8): (Index, WakuMessage) = + ## Use i to generate an Index WakuMessage var data {.noinit.}: array[32, byte] for x in data.mitems: x = i.byte @@ -27,14 +27,14 @@ proc genIndexedWakuMessage(i: int8): IndexedWakuMessage = pubsubTopic: "test-pubsub-topic" ) - IndexedWakuMessage(msg: message, index: cursor) + (cursor, message) proc getPrepopulatedTestQueue(unsortedSet: auto, capacity: int): QueueDriver = let driver = QueueDriver.new(capacity) for i in unsortedSet: - let message = genIndexedWakuMessage(i.int8) - discard driver.add(message) + let (index, message) = genIndexedWakuMessage(i.int8) + discard driver.add(index, message) driver @@ -49,12 +49,12 @@ procSuite "Sorted driver queue": ## When # Fill up the queue for i in 1..capacity: - let message = genIndexedWakuMessage(i.int8) - require(driver.add(message).isOk()) + let (index, message) = genIndexedWakuMessage(i.int8) + require(driver.add(index, message).isOk()) # Add one more. Capacity should not be exceeded - let message = genIndexedWakuMessage(capacity.int8 + 1) - require(driver.add(message).isOk()) + let (index, message) = genIndexedWakuMessage(capacity.int8 + 1) + require(driver.add(index, message).isOk()) ## Then check: @@ -68,14 +68,14 @@ procSuite "Sorted driver queue": ## When # Fill up the queue for i in 1..capacity: - let message = genIndexedWakuMessage(i.int8) - require(driver.add(message).isOk()) + let (index, message) = genIndexedWakuMessage(i.int8) + require(driver.add(index, message).isOk()) # Attempt to add message with older value than oldest in queue should fail let - oldestTimestamp = driver.first().get().index.senderTime - message = genIndexedWakuMessage(oldestTimestamp.int8 - 1) - addRes = driver.add(message) + oldestTimestamp = driver.first().get().senderTime + (index, message) = genIndexedWakuMessage(oldestTimestamp.int8 - 1) + addRes = driver.add(index, message) ## Then check: @@ -93,14 +93,14 @@ procSuite "Sorted driver queue": let driver = getPrepopulatedTestQueue(unsortedSet, capacity) # Walk forward through the set and verify ascending order - var prevSmaller = genIndexedWakuMessage(min(unsortedSet).int8 - 1).index + var (prevSmaller, _) = genIndexedWakuMessage(min(unsortedSet).int8 - 1) for i in driver.fwdIterator: let (index, _) = i check cmp(index, prevSmaller) > 0 prevSmaller = index # Walk backward through the set and verify descending order - var prevLarger = genIndexedWakuMessage(max(unsortedSet).int8 + 1).index + var (prevLarger, _) = genIndexedWakuMessage(max(unsortedSet).int8 + 1) for i in driver.bwdIterator: let (index, _) = i check cmp(index, prevLarger) < 0 @@ -122,7 +122,7 @@ procSuite "Sorted driver queue": let first = firstRes.tryGet() check: - first.msg.timestamp == Timestamp(1) + first.senderTime == Timestamp(1) test "get first item from empty queue should fail": ## Given @@ -153,7 +153,7 @@ procSuite "Sorted driver queue": let last = lastRes.tryGet() check: - last.msg.timestamp == Timestamp(5) + last.senderTime == Timestamp(5) test "get last item from empty queue should fail": ## Given @@ -176,8 +176,8 @@ procSuite "Sorted driver queue": let driver = getPrepopulatedTestQueue(unsortedSet, capacity) let - existingIndex = genIndexedWakuMessage(4).index - nonExistingIndex = genIndexedWakuMessage(99).index + (existingIndex, _) = genIndexedWakuMessage(4) + (nonExistingIndex, _) = genIndexedWakuMessage(99) ## Then check: diff --git a/tests/waku_archive/test_driver_queue_pagination.nim b/tests/waku_archive/test_driver_queue_pagination.nim index bca6940286..d978103cfd 100644 --- a/tests/waku_archive/test_driver_queue_pagination.nim +++ b/tests/waku_archive/test_driver_queue_pagination.nim @@ -20,15 +20,16 @@ proc getTestQueueDriver(numMessages: int): QueueDriver = for x in data.mitems: x = 1 for i in 0.. bool: - let (pubsubTopic, msg, digest, storeTimestamp) = item + let (pubsubTopic, msg, _, _, hash) = item msg.contentTopic == contentTopic and - pubsubTopic == DefaultPubsubTopic + pubsubTopic == DefaultPubsubTopic and + hash == msgHash ## Cleanup (waitFor driver.close()).expect("driver to close") diff --git a/tests/waku_archive/test_retention_policy.nim b/tests/waku_archive/test_retention_policy.nim index 582985950e..26137bbab5 100644 --- a/tests/waku_archive/test_retention_policy.nim +++ b/tests/waku_archive/test_retention_policy.nim @@ -138,7 +138,7 @@ suite "Waku Archive - Retention policy": check: storedMsg.len == capacity storedMsg.all do (item: auto) -> bool: - let (pubsubTopic, msg, digest, storeTimestamp) = item + let (pubsubTopic, msg, _, _, _) = item msg.contentTopic == contentTopic and pubsubTopic == DefaultPubsubTopic diff --git a/waku/node/waku_node.nim b/waku/node/waku_node.nim index 91c0494419..fe016c15f6 100644 --- a/waku/node/waku_node.nim +++ b/waku/node/waku_node.nim @@ -777,14 +777,14 @@ proc mountArchive*(node: WakuNode, driver: ArchiveDriver, retentionPolicy = none(RetentionPolicy)): Result[void, string] = + node.wakuArchive = WakuArchive.new( + driver = driver, + retentionPolicy = retentionPolicy, + ).valueOr: + return err("error in mountArchive: " & error) - let wakuArchiveRes = WakuArchive.new(driver, - retentionPolicy) - if wakuArchiveRes.isErr(): - return err("error in mountArchive: " & wakuArchiveRes.error) + node.wakuArchive.start() - node.wakuArchive = wakuArchiveRes.get() - asyncSpawn node.wakuArchive.start() return ok() ## Waku store @@ -1194,7 +1194,7 @@ proc stop*(node: WakuNode) {.async.} = error "exception stopping the node", error=getCurrentExceptionMsg() if not node.wakuArchive.isNil(): - await node.wakuArchive.stop() + await node.wakuArchive.stopWait() node.started = false diff --git a/waku/waku_archive/archive.nim b/waku/waku_archive/archive.nim index 1b575862f7..2c81e103b3 100644 --- a/waku/waku_archive/archive.nim +++ b/waku/waku_archive/archive.nim @@ -4,22 +4,15 @@ else: {.push raises: [].} import - std/[tables, times, sequtils, options, algorithm, strutils], + std/[times, options, sequtils, strutils, algorithm], stew/[results, byteutils], chronicles, chronos, - regex, metrics import - ../common/[ - databases/dburl, - databases/db_sqlite, - paging - ], + ../common/paging, ./driver, ./retention_policy, - ./retention_policy/retention_policy_capacity, - ./retention_policy/retention_policy_time, ../waku_core, ../waku_core/message/digest, ./common, @@ -32,22 +25,35 @@ const DefaultPageSize*: uint = 20 MaxPageSize*: uint = 100 -## Message validation +# Retention policy + WakuArchiveDefaultRetentionPolicyInterval* = chronos.minutes(30) + +# Metrics reporting + WakuArchiveDefaultMetricsReportInterval* = chronos.minutes(1) -type - MessageValidator* = ref object of RootObj +# Message validation +# 20 seconds maximum allowable sender timestamp "drift" + MaxMessageTimestampVariance* = getNanoSecondTime(20) - ValidationResult* = Result[void, string] +type MessageValidator* = proc(msg: WakuMessage): Result[void, string] {.closure, gcsafe, raises: [].} + +## Archive -method validate*(validator: MessageValidator, msg: WakuMessage): ValidationResult {.base.} = discard +type WakuArchive* = ref object + driver: ArchiveDriver -# Default message validator + validator: MessageValidator -const MaxMessageTimestampVariance* = getNanoSecondTime(20) # 20 seconds maximum allowable sender timestamp "drift" + retentionPolicy: Option[RetentionPolicy] -type DefaultMessageValidator* = ref object of MessageValidator + retentionPolicyHandle: Future[void] + metricsHandle: Future[void] -method validate*(validator: DefaultMessageValidator, msg: WakuMessage): ValidationResult = +proc validate*(msg: WakuMessage): Result[void, string] = + if msg.ephemeral: + # Ephemeral message, do not store + return + if msg.timestamp == 0: return ok() @@ -62,188 +68,167 @@ method validate*(validator: DefaultMessageValidator, msg: WakuMessage): Validati if upperBound < msg.timestamp: return err(invalidMessageFuture) - ok() - -## Archive - -type - WakuArchive* = ref object - driver*: ArchiveDriver # TODO: Make this field private. Remove asterisk - validator: MessageValidator - retentionPolicy: RetentionPolicy - retPolicyFut: Future[Result[void, string]] ## retention policy cancelable future - retMetricsRepFut: Future[Result[void, string]] ## metrics reporting cancelable future + return ok() proc new*(T: type WakuArchive, driver: ArchiveDriver, + validator: MessageValidator = validate, retentionPolicy = none(RetentionPolicy)): Result[T, string] = + if driver.isNil(): + return err("archive driver is Nil") + + let archive = + WakuArchive( + driver: driver, + validator: validator, + retentionPolicy: retentionPolicy, + ) - let retPolicy = if retentionPolicy.isSome(): - retentionPolicy.get() - else: - nil - - let wakuArch = WakuArchive(driver: driver, - validator: DefaultMessageValidator(), - retentionPolicy: retPolicy) - return ok(wakuArch) + return ok(archive) -proc handleMessage*(w: WakuArchive, +proc handleMessage*(self: WakuArchive, pubsubTopic: PubsubTopic, msg: WakuMessage) {.async.} = - if msg.ephemeral: - # Ephemeral message, do not store + self.validator(msg).isOkOr: + waku_archive_errors.inc(labelValues = [error]) return - if not w.validator.isNil(): - let validationRes = w.validator.validate(msg) - if validationRes.isErr(): - waku_archive_errors.inc(labelValues = [validationRes.error]) - return - - let insertStartTime = getTime().toUnixFloat() - - block: - let - msgDigest = computeDigest(msg) - msgHash = computeMessageHash(pubsubTopic, msg) - msgDigestHex = toHex(msgDigest.data) - msgHashHex = toHex(msgHash) - msgReceivedTime = if msg.timestamp > 0: msg.timestamp + let + msgDigest = computeDigest(msg) + msgHash = computeMessageHash(pubsubTopic, msg) + msgTimestamp = if msg.timestamp > 0: msg.timestamp else: getNanosecondTime(getTime().toUnixFloat()) - trace "handling message", pubsubTopic=pubsubTopic, contentTopic=msg.contentTopic, timestamp=msg.timestamp, digest=msgDigestHex, messageHash=msgHashHex - - let putRes = await w.driver.put(pubsubTopic, msg, msgDigest, msgHash, msgReceivedTime) - if putRes.isErr(): - if "duplicate key value violates unique constraint" in putRes.error: - trace "failed to insert message", err=putRes.error - else: - debug "failed to insert message", err=putRes.error - waku_archive_errors.inc(labelValues = [insertFailure]) + trace "handling message", + pubsubTopic=pubsubTopic, + contentTopic=msg.contentTopic, + msgTimestamp=msg.timestamp, + usedTimestamp=msgTimestamp, + digest=toHex(msgDigest.data), + messageHash=toHex(msgHash) + + let insertStartTime = getTime().toUnixFloat() + (await self.driver.put(pubsubTopic, msg, msgDigest, msgHash, msgTimestamp)).isOkOr: + waku_archive_errors.inc(labelValues = [insertFailure]) + # Prevent spamming the logs when multiple nodes are connected to the same database. + # In that case, the message cannot be inserted but is an expected "insert error" + # and therefore we reduce its visibility by having the log in trace level. + if "duplicate key value violates unique constraint" in error: + trace "failed to insert message", err=error + else: + debug "failed to insert message", err=error + let insertDuration = getTime().toUnixFloat() - insertStartTime waku_archive_insert_duration_seconds.observe(insertDuration) -proc findMessages*(w: WakuArchive, query: ArchiveQuery): Future[ArchiveResult] {.async, gcsafe.} = +proc findMessages*(self: WakuArchive, query: ArchiveQuery): Future[ArchiveResult] {.async, gcsafe.} = ## Search the archive to return a single page of messages matching the query criteria - let - qContentTopics = query.contentTopics - qPubSubTopic = query.pubsubTopic - qCursor = query.cursor - qStartTime = query.startTime - qEndTime = query.endTime - qMaxPageSize = if query.pageSize <= 0: DefaultPageSize - else: min(query.pageSize, MaxPageSize) - isAscendingOrder = query.direction.into() - - if qContentTopics.len > 10: + + let maxPageSize = + if query.pageSize <= 0: + DefaultPageSize + else: + min(query.pageSize, MaxPageSize) + + let isAscendingOrder = query.direction.into() + + if query.contentTopics.len > 10: return err(ArchiveError.invalidQuery("too many content topics")) let queryStartTime = getTime().toUnixFloat() - let queryRes = await w.driver.getMessages( - contentTopic = qContentTopics, - pubsubTopic = qPubSubTopic, - cursor = qCursor, - startTime = qStartTime, - endTime = qEndTime, - maxPageSize = qMaxPageSize + 1, - ascendingOrder = isAscendingOrder - ) + let rows = (await self.driver.getMessages( + contentTopic = query.contentTopics, + pubsubTopic = query.pubsubTopic, + cursor = query.cursor, + startTime = query.startTime, + endTime = query.endTime, + hashes = query.hashes, + maxPageSize = maxPageSize + 1, + ascendingOrder = isAscendingOrder + )).valueOr: + return err(ArchiveError(kind: ArchiveErrorKind.DRIVER_ERROR, cause: error)) let queryDuration = getTime().toUnixFloat() - queryStartTime waku_archive_query_duration_seconds.observe(queryDuration) - # Build response - if queryRes.isErr(): - return err(ArchiveError(kind: ArchiveErrorKind.DRIVER_ERROR, cause: queryRes.error)) - - let rows = queryRes.get() + var hashes = newSeq[WakuMessageHash]() var messages = newSeq[WakuMessage]() var cursor = none(ArchiveCursor) + if rows.len == 0: - return ok(ArchiveResponse(messages: messages, cursor: cursor)) + return ok(ArchiveResponse(hashes: hashes, messages: messages, cursor: cursor)) ## Messages - let pageSize = min(rows.len, int(qMaxPageSize)) + let pageSize = min(rows.len, int(maxPageSize)) + + #TODO once store v2 is removed, unzip instead of 2x map messages = rows[0.. int(qMaxPageSize): + if rows.len > int(maxPageSize): ## Build last message cursor ## The cursor is built from the last message INCLUDED in the response ## (i.e. the second last message in the rows list) - let (pubsubTopic, message, digest, storeTimestamp) = rows[^2] - - # TODO: Improve coherence of MessageDigest type - let messageDigest = block: - var data: array[32, byte] - for i in 0..= $3 AND @@ -45,7 +45,7 @@ const SelectNoCursorAscStmtDef = const SelectNoCursorDescStmtName = "SelectWithoutCursorDesc" const SelectNoCursorDescStmtDef = - """SELECT storedAt, contentTopic, payload, pubsubTopic, version, timestamp, id FROM messages + """SELECT storedAt, contentTopic, payload, pubsubTopic, version, timestamp, id, messageHash FROM messages WHERE contentTopic IN ($1) AND pubsubTopic = $2 AND storedAt >= $3 AND @@ -54,7 +54,7 @@ const SelectNoCursorDescStmtDef = const SelectWithCursorDescStmtName = "SelectWithCursorDesc" const SelectWithCursorDescStmtDef = - """SELECT storedAt, contentTopic, payload, pubsubTopic, version, timestamp, id FROM messages + """SELECT storedAt, contentTopic, payload, pubsubTopic, version, timestamp, id, messageHash FROM messages WHERE contentTopic IN ($1) AND pubsubTopic = $2 AND (storedAt, id) < ($3,$4) AND @@ -64,7 +64,7 @@ const SelectWithCursorDescStmtDef = const SelectWithCursorAscStmtName = "SelectWithCursorAsc" const SelectWithCursorAscStmtDef = - """SELECT storedAt, contentTopic, payload, pubsubTopic, version, timestamp, id FROM messages + """SELECT storedAt, contentTopic, payload, pubsubTopic, version, timestamp, id, messageHash FROM messages WHERE contentTopic IN ($1) AND pubsubTopic = $2 AND (storedAt, id) > ($3,$4) AND @@ -107,8 +107,10 @@ proc reset*(s: PostgresDriver): Future[ArchiveDriverResult[void]] {.async.} = let ret = await s.decreaseDatabaseSize(targetSize, forceRemoval) return ret -proc rowCallbackImpl(pqResult: ptr PGresult, - outRows: var seq[(PubsubTopic, WakuMessage, seq[byte], Timestamp)]) = +proc rowCallbackImpl( + pqResult: ptr PGresult, + outRows: var seq[(PubsubTopic, WakuMessage, seq[byte], Timestamp, WakuMessageHash)], + ) = ## Proc aimed to contain the logic of the callback passed to the `psasyncpool`. ## That callback is used in "SELECT" queries. ## @@ -116,7 +118,7 @@ proc rowCallbackImpl(pqResult: ptr PGresult, ## outRows - seq of Store-rows. This is populated from the info contained in pqResult let numFields = pqResult.pqnfields() - if numFields != 7: + if numFields != 8: error "Wrong number of fields" return @@ -130,7 +132,9 @@ proc rowCallbackImpl(pqResult: ptr PGresult, var storedAt: int64 var digest: string var payload: string - + var hashHex: string + var msgHash: WakuMessageHash + try: storedAt = parseInt( $(pqgetvalue(pqResult, iRow, 0)) ) contentTopic = $(pqgetvalue(pqResult, iRow, 1)) @@ -139,6 +143,8 @@ proc rowCallbackImpl(pqResult: ptr PGresult, version = parseUInt( $(pqgetvalue(pqResult, iRow, 4)) ) timestamp = parseInt( $(pqgetvalue(pqResult, iRow, 5)) ) digest = parseHexStr( $(pqgetvalue(pqResult, iRow, 6)) ) + hashHex = parseHexStr( $(pqgetvalue(pqResult, iRow, 7)) ) + msgHash = fromBytes(hashHex.toOpenArrayByte(0, 31)) except ValueError: error "could not parse correctly", error = getCurrentExceptionMsg() @@ -150,7 +156,9 @@ proc rowCallbackImpl(pqResult: ptr PGresult, outRows.add((pubSubTopic, wakuMessage, @(digest.toOpenArrayByte(0, digest.high)), - storedAt)) + storedAt, + msgHash, + )) method put*(s: PostgresDriver, pubsubTopic: PubsubTopic, @@ -195,13 +203,13 @@ method getAllMessages*(s: PostgresDriver): Future[ArchiveDriverResult[seq[ArchiveRow]]] {.async.} = ## Retrieve all messages from the store. - var rows: seq[(PubsubTopic, WakuMessage, seq[byte], Timestamp)] + var rows: seq[(PubsubTopic, WakuMessage, seq[byte], Timestamp, WakuMessageHash)] proc rowCallback(pqResult: ptr PGresult) = rowCallbackImpl(pqResult, rows) (await s.readConnPool.pgQuery("""SELECT storedAt, contentTopic, payload, pubsubTopic, version, timestamp, - id FROM messages ORDER BY storedAt ASC""", + id, messageHash FROM messages ORDER BY storedAt ASC""", newSeq[string](0), rowCallback )).isOkOr: @@ -242,12 +250,13 @@ proc getMessagesArbitraryQuery(s: PostgresDriver, cursor = none(ArchiveCursor), startTime = none(Timestamp), endTime = none(Timestamp), + hexHashes: seq[string] = @[], maxPageSize = DefaultPageSize, ascendingOrder = true): Future[ArchiveDriverResult[seq[ArchiveRow]]] {.async.} = ## This proc allows to handle atypical queries. We don't use prepared statements for those. - var query = """SELECT storedAt, contentTopic, payload, pubsubTopic, version, timestamp, id FROM messages""" + var query = """SELECT storedAt, contentTopic, payload, pubsubTopic, version, timestamp, id, messageHash FROM messages""" var statements: seq[string] var args: seq[string] @@ -257,6 +266,12 @@ proc getMessagesArbitraryQuery(s: PostgresDriver, for t in contentTopic: args.add(t) + if hexHashes.len > 0: + let cstmt = "messageHash IN (" & "?".repeat(hexHashes.len).join(",") & ")" + statements.add(cstmt) + for t in hexHashes: + args.add(t) + if pubsubTopic.isSome(): statements.add("pubsubTopic = ?") args.add(pubsubTopic.get()) @@ -289,10 +304,10 @@ proc getMessagesArbitraryQuery(s: PostgresDriver, query &= " LIMIT ?" args.add($maxPageSize) - var rows: seq[(PubsubTopic, WakuMessage, seq[byte], Timestamp)] + var rows: seq[(PubsubTopic, WakuMessage, seq[byte], Timestamp, WakuMessageHash)] proc rowCallback(pqResult: ptr PGresult) = rowCallbackImpl(pqResult, rows) - + (await s.readConnPool.pgQuery(query, args, rowCallback)).isOkOr: return err("failed to run query: " & $error) @@ -313,7 +328,7 @@ proc getMessagesPreparedStmt(s: PostgresDriver, ## ## contentTopic - string with list of conten topics. e.g: "'ctopic1','ctopic2','ctopic3'" - var rows: seq[(PubsubTopic, WakuMessage, seq[byte], Timestamp)] + var rows: seq[(PubsubTopic, WakuMessage, seq[byte], Timestamp, WakuMessageHash)] proc rowCallback(pqResult: ptr PGresult) = rowCallbackImpl(pqResult, rows) @@ -327,7 +342,7 @@ proc getMessagesPreparedStmt(s: PostgresDriver, let digest = toHex(cursor.get().digest.data) let storeTime = $cursor.get().storeTime - + (await s.readConnPool.runStmt( stmtName, stmtDef, @@ -354,6 +369,7 @@ proc getMessagesPreparedStmt(s: PostgresDriver, else: var stmtName = if ascOrder: SelectNoCursorAscStmtName else: SelectNoCursorDescStmtName var stmtDef = if ascOrder: SelectNoCursorAscStmtDef else: SelectNoCursorDescStmtDef + (await s.readConnPool.runStmt(stmtName, stmtDef, @[contentTopic, @@ -374,15 +390,17 @@ proc getMessagesPreparedStmt(s: PostgresDriver, return ok(rows) method getMessages*(s: PostgresDriver, - contentTopicSeq: seq[ContentTopic] = @[], + contentTopicSeq = newSeq[ContentTopic](0), pubsubTopic = none(PubsubTopic), cursor = none(ArchiveCursor), startTime = none(Timestamp), endTime = none(Timestamp), + hashes = newSeq[WakuMessageHash](0), maxPageSize = DefaultPageSize, ascendingOrder = true): Future[ArchiveDriverResult[seq[ArchiveRow]]] {.async.} = - + let hexHashes = hashes.mapIt(toHex(it)) + if contentTopicSeq.len == 1 and pubsubTopic.isSome() and startTime.isSome() and @@ -399,12 +417,13 @@ method getMessages*(s: PostgresDriver, else: ## We will run atypical query. In this case we don't use prepared statemets return await s.getMessagesArbitraryQuery(contentTopicSeq, - pubsubTopic, - cursor, - startTime, - endTime, - maxPageSize, - ascendingOrder) + pubsubTopic, + cursor, + startTime, + endTime, + hexHashes, + maxPageSize, + ascendingOrder) proc getStr(s: PostgresDriver, query: string): diff --git a/waku/waku_archive/driver/queue_driver/index.nim b/waku/waku_archive/driver/queue_driver/index.nim index c36d7ce1ff..2cfd540060 100644 --- a/waku/waku_archive/driver/queue_driver/index.nim +++ b/waku/waku_archive/driver/queue_driver/index.nim @@ -10,50 +10,53 @@ import ../../../waku_core, ../../common - type Index* = object ## This type contains the description of an Index used in the pagination of WakuMessages pubsubTopic*: string senderTime*: Timestamp # the time at which the message is generated receiverTime*: Timestamp digest*: MessageDigest # calculated over payload and content topic + hash*: WakuMessageHash proc compute*(T: type Index, msg: WakuMessage, receivedTime: Timestamp, pubsubTopic: PubsubTopic): T = ## Takes a WakuMessage with received timestamp and returns its Index. let digest = computeDigest(msg) senderTime = msg.timestamp + hash = computeMessageHash(pubsubTopic, msg) - Index( + return Index( pubsubTopic: pubsubTopic, senderTime: senderTime, receiverTime: receivedTime, - digest: digest + digest: digest, + hash: hash, ) - proc tohistoryCursor*(index: Index): ArchiveCursor = - ArchiveCursor( + return ArchiveCursor( pubsubTopic: index.pubsubTopic, senderTime: index.senderTime, storeTime: index.receiverTime, - digest: index.digest + digest: index.digest, + hash: index.hash, ) proc toIndex*(index: ArchiveCursor): Index = - Index( + return Index( pubsubTopic: index.pubsubTopic, senderTime: index.senderTime, receiverTime: index.storeTime, - digest: index.digest + digest: index.digest, + hash: index.hash, ) - proc `==`*(x, y: Index): bool = ## receiverTime plays no role in index equality - (x.senderTime == y.senderTime) and - (x.digest == y.digest) and - (x.pubsubTopic == y.pubsubTopic) + return + (x.senderTime == y.senderTime) and + (x.digest == y.digest) and + (x.pubsubTopic == y.pubsubTopic) proc cmp*(x, y: Index): int = ## compares x and y @@ -88,4 +91,4 @@ proc cmp*(x, y: Index): int = if digestcmp != 0: return digestcmp - return cmp(x.pubsubTopic, y.pubsubTopic) + return cmp(x.pubsubTopic, y.pubsubTopic) \ No newline at end of file diff --git a/waku/waku_archive/driver/queue_driver/queue_driver.nim b/waku/waku_archive/driver/queue_driver/queue_driver.nim index aebc53e6f6..a84ad92564 100644 --- a/waku/waku_archive/driver/queue_driver/queue_driver.nim +++ b/waku/waku_archive/driver/queue_driver/queue_driver.nim @@ -21,16 +21,22 @@ logScope: const QueueDriverDefaultMaxCapacity* = 25_000 type - IndexedWakuMessage = object - # TODO: may need to rename this object as it holds both the index and the pubsub topic of a waku message - ## This type is used to encapsulate a WakuMessage and its Index - msg*: WakuMessage - index*: Index - pubsubTopic*: string + QueryFilterMatcher = proc(index: Index, msg: WakuMessage): bool {.gcsafe, closure.} - QueryFilterMatcher = proc(indexedWakuMsg: IndexedWakuMessage): bool {.gcsafe, closure.} + QueueDriver* = ref object of ArchiveDriver + ## Bounded repository for indexed messages + ## + ## The store queue will keep messages up to its + ## configured capacity. As soon as this capacity + ## is reached and a new message is added, the oldest + ## item will be removed to make space for the new one. + ## This implies both a `delete` and `add` operation + ## for new items. + + # TODO: a circular/ring buffer may be a more efficient implementation + items: SortedSet[Index, WakuMessage] # sorted set of stored messages + capacity: int # Maximum amount of messages to keep -type QueueDriverErrorKind {.pure.} = enum INVALID_CURSOR @@ -41,26 +47,11 @@ proc `$`(error: QueueDriverErrorKind): string = of INVALID_CURSOR: "invalid_cursor" -type QueueDriver* = ref object of ArchiveDriver - ## Bounded repository for indexed messages - ## - ## The store queue will keep messages up to its - ## configured capacity. As soon as this capacity - ## is reached and a new message is added, the oldest - ## item will be removed to make space for the new one. - ## This implies both a `delete` and `add` operation - ## for new items. - ## - ## TODO: a circular/ring buffer may be a more efficient implementation - ## TODO: we don't need to store the Index twice (as key and in the value) - items: SortedSet[Index, IndexedWakuMessage] # sorted set of stored messages - capacity: int # Maximum amount of messages to keep - ### Helpers -proc walkToCursor(w: SortedSetWalkRef[Index, IndexedWakuMessage], +proc walkToCursor(w: SortedSetWalkRef[Index, WakuMessage], startCursor: Index, - forward: bool): SortedSetResult[Index, IndexedWakuMessage] = + forward: bool): SortedSetResult[Index, WakuMessage] = ## Walk to util we find the cursor ## TODO: Improve performance here with a binary/tree search @@ -81,15 +72,15 @@ proc walkToCursor(w: SortedSetWalkRef[Index, IndexedWakuMessage], #### API proc new*(T: type QueueDriver, capacity: int = QueueDriverDefaultMaxCapacity): T = - var items = SortedSet[Index, IndexedWakuMessage].init() + var items = SortedSet[Index, WakuMessage].init() return QueueDriver(items: items, capacity: capacity) proc contains*(driver: QueueDriver, index: Index): bool = ## Return `true` if the store queue already contains the `index`, `false` otherwise. - driver.items.eq(index).isOk() + return driver.items.eq(index).isOk() proc len*(driver: QueueDriver): int {.noSideEffect.} = - driver.items.len + return driver.items.len proc getPage(driver: QueueDriver, pageSize: uint = 0, @@ -102,10 +93,10 @@ proc getPage(driver: QueueDriver, ## Each entry must match the `pred` var outSeq: seq[ArchiveRow] - var w = SortedSetWalkRef[Index,IndexedWakuMessage].init(driver.items) + var w = SortedSetWalkRef[Index, WakuMessage].init(driver.items) defer: w.destroy() - var currentEntry: SortedSetResult[Index, IndexedWakuMessage] + var currentEntry: SortedSetResult[Index, WakuMessage] # Find starting entry if cursor.isSome(): @@ -131,14 +122,14 @@ proc getPage(driver: QueueDriver, while currentEntry.isOk() and numberOfItems < pageSize: trace "Continuing page query", currentEntry=currentEntry, numberOfItems=numberOfItems - if predicate.isNil() or predicate(currentEntry.value.data): - let - key = currentEntry.value.key - data = currentEntry.value.data + let + key = currentEntry.value.key + data = currentEntry.value.data + if predicate.isNil() or predicate(key, data): numberOfItems += 1 - outSeq.add((key.pubsubTopic, data.msg, @(key.digest.data), key.receiverTime)) + outSeq.add((key.pubsubTopic, data, @(key.digest.data), key.receiverTime, key.hash)) currentEntry = if forward: w.next() else: w.prev() @@ -150,10 +141,10 @@ proc getPage(driver: QueueDriver, ## --- SortedSet accessors --- -iterator fwdIterator*(driver: QueueDriver): (Index, IndexedWakuMessage) = +iterator fwdIterator*(driver: QueueDriver): (Index, WakuMessage) = ## Forward iterator over the entire store queue var - w = SortedSetWalkRef[Index,IndexedWakuMessage].init(driver.items) + w = SortedSetWalkRef[Index, WakuMessage].init(driver.items) res = w.first() while res.isOk(): @@ -162,10 +153,10 @@ iterator fwdIterator*(driver: QueueDriver): (Index, IndexedWakuMessage) = w.destroy() -iterator bwdIterator*(driver: QueueDriver): (Index, IndexedWakuMessage) = +iterator bwdIterator*(driver: QueueDriver): (Index, WakuMessage) = ## Backwards iterator over the entire store queue var - w = SortedSetWalkRef[Index,IndexedWakuMessage].init(driver.items) + w = SortedSetWalkRef[Index, WakuMessage].init(driver.items) res = w.last() while res.isOk(): @@ -174,45 +165,45 @@ iterator bwdIterator*(driver: QueueDriver): (Index, IndexedWakuMessage) = w.destroy() -proc first*(driver: QueueDriver): ArchiveDriverResult[IndexedWakuMessage] = +proc first*(driver: QueueDriver): ArchiveDriverResult[Index] = var - w = SortedSetWalkRef[Index,IndexedWakuMessage].init(driver.items) + w = SortedSetWalkRef[Index, WakuMessage].init(driver.items) res = w.first() w.destroy() if res.isErr(): return err("Not found") - return ok(res.value.data) + return ok(res.value.key) -proc last*(driver: QueueDriver): ArchiveDriverResult[IndexedWakuMessage] = +proc last*(driver: QueueDriver): ArchiveDriverResult[Index] = var - w = SortedSetWalkRef[Index,IndexedWakuMessage].init(driver.items) + w = SortedSetWalkRef[Index, WakuMessage].init(driver.items) res = w.last() w.destroy() if res.isErr(): return err("Not found") - return ok(res.value.data) + return ok(res.value.key) ## --- Queue API --- -proc add*(driver: QueueDriver, msg: IndexedWakuMessage): ArchiveDriverResult[void] = +proc add*(driver: QueueDriver, index: Index, msg: WakuMessage): ArchiveDriverResult[void] = ## Add a message to the queue ## ## If we're at capacity, we will be removing, the oldest (first) item - if driver.contains(msg.index): - trace "could not add item to store queue. Index already exists", index=msg.index + if driver.contains(index): + trace "could not add item to store queue. Index already exists", index=index return err("duplicate") # TODO: the below delete block can be removed if we convert to circular buffer if driver.items.len >= driver.capacity: var - w = SortedSetWalkRef[Index, IndexedWakuMessage].init(driver.items) + w = SortedSetWalkRef[Index, WakuMessage].init(driver.items) firstItem = w.first - if cmp(msg.index, firstItem.value.key) < 0: + if cmp(index, firstItem.value.key) < 0: # When at capacity, we won't add if message index is smaller (older) than our oldest item w.destroy # Clean up walker return err("too_old") @@ -220,7 +211,7 @@ proc add*(driver: QueueDriver, msg: IndexedWakuMessage): ArchiveDriverResult[voi discard driver.items.delete(firstItem.value.key) w.destroy # better to destroy walker after a delete operation - driver.items.insert(msg.index).value.data = msg + driver.items.insert(index).value.data = msg return ok() @@ -231,9 +222,15 @@ method put*(driver: QueueDriver, messageHash: WakuMessageHash, receivedTime: Timestamp): Future[ArchiveDriverResult[void]] {.async.} = - let index = Index(pubsubTopic: pubsubTopic, senderTime: message.timestamp, receiverTime: receivedTime, digest: digest) - let message = IndexedWakuMessage(msg: message, index: index, pubsubTopic: pubsubTopic) - return driver.add(message) + let index = Index( + pubsubTopic: pubsubTopic, + senderTime: message.timestamp, + receiverTime: receivedTime, + digest: digest, + hash: messageHash, + ) + + return driver.add(index, message) method getAllMessages*(driver: QueueDriver): Future[ArchiveDriverResult[seq[ArchiveRow]]] {.async.} = @@ -244,28 +241,33 @@ method existsTable*(driver: QueueDriver, tableName: string): Future[ArchiveDriverResult[bool]] {.async.} = return err("interface method not implemented") -method getMessages*(driver: QueueDriver, - contentTopic: seq[ContentTopic] = @[], - pubsubTopic = none(PubsubTopic), - cursor = none(ArchiveCursor), - startTime = none(Timestamp), - endTime = none(Timestamp), - maxPageSize = DefaultPageSize, - ascendingOrder = true): - Future[ArchiveDriverResult[seq[ArchiveRow]]] {.async.}= +method getMessages*( + driver: QueueDriver, + contentTopic: seq[ContentTopic] = @[], + pubsubTopic = none(PubsubTopic), + cursor = none(ArchiveCursor), + startTime = none(Timestamp), + endTime = none(Timestamp), + hashes: seq[WakuMessageHash] = @[], + maxPageSize = DefaultPageSize, + ascendingOrder = true, + ): Future[ArchiveDriverResult[seq[ArchiveRow]]] {.async.} = let cursor = cursor.map(toIndex) - let matchesQuery: QueryFilterMatcher = func(row: IndexedWakuMessage): bool = - if pubsubTopic.isSome() and row.pubsubTopic != pubsubTopic.get(): + let matchesQuery: QueryFilterMatcher = func(index: Index, msg: WakuMessage): bool = + if pubsubTopic.isSome() and index.pubsubTopic != pubsubTopic.get(): + return false + + if contentTopic.len > 0 and msg.contentTopic notin contentTopic: return false - if contentTopic.len > 0 and row.msg.contentTopic notin contentTopic: + if startTime.isSome() and msg.timestamp < startTime.get(): return false - if startTime.isSome() and row.msg.timestamp < startTime.get(): + if endTime.isSome() and msg.timestamp > endTime.get(): return false - if endTime.isSome() and row.msg.timestamp > endTime.get(): + if hashes.len > 0 and index.hash notin hashes: return false return true @@ -293,7 +295,7 @@ method getPagesSize*(driver: QueueDriver): Future[ArchiveDriverResult[int64]] {.async} = return ok(int64(driver.len())) -method getDatabasesSize*(driver: QueueDriver): +method getDatabaseSize*(driver: QueueDriver): Future[ArchiveDriverResult[int64]] {.async} = return ok(int64(driver.len())) @@ -303,11 +305,11 @@ method performVacuum*(driver: QueueDriver): method getOldestMessageTimestamp*(driver: QueueDriver): Future[ArchiveDriverResult[Timestamp]] {.async.} = - return driver.first().map(proc(msg: IndexedWakuMessage): Timestamp = msg.index.receiverTime) + return driver.first().map(proc(index: Index): Timestamp = index.receiverTime) method getNewestMessageTimestamp*(driver: QueueDriver): Future[ArchiveDriverResult[Timestamp]] {.async.} = - return driver.last().map(proc(msg: IndexedWakuMessage): Timestamp = msg.index.receiverTime) + return driver.last().map(proc(index: Index): Timestamp = index.receiverTime) method deleteMessagesOlderThanTimestamp*(driver: QueueDriver, ts: Timestamp): diff --git a/waku/waku_archive/driver/sqlite_driver/migrations.nim b/waku/waku_archive/driver/sqlite_driver/migrations.nim index 4f7fea7bde..c787f4ac99 100644 --- a/waku/waku_archive/driver/sqlite_driver/migrations.nim +++ b/waku/waku_archive/driver/sqlite_driver/migrations.nim @@ -49,7 +49,7 @@ proc isSchemaVersion7*(db: SqliteDatabase): DatabaseResult[bool] = else: info "Not considered schema version 7" - ok(false) + return ok(false) proc migrate*(db: SqliteDatabase, targetVersion = SchemaVersion): DatabaseResult[void] = ## Compares the `user_version` of the sqlite database with the provided `targetVersion`, then @@ -75,4 +75,4 @@ proc migrate*(db: SqliteDatabase, targetVersion = SchemaVersion): DatabaseResult return err("failed to execute migration scripts: " & migrationRes.error) debug "finished message store's sqlite database migration" - ok() + return ok() diff --git a/waku/waku_archive/driver/sqlite_driver/queries.nim b/waku/waku_archive/driver/sqlite_driver/queries.nim index e03246c5eb..17806a47c3 100644 --- a/waku/waku_archive/driver/sqlite_driver/queries.nim +++ b/waku/waku_archive/driver/sqlite_driver/queries.nim @@ -5,7 +5,7 @@ else: import std/[options, sequtils], - stew/[results, byteutils], + stew/[results, byteutils, arrayops], sqlite3_abi import ../../../common/databases/db_sqlite, @@ -24,14 +24,15 @@ proc queryRowWakuMessageCallback(s: ptr sqlite3_stmt, contentTopicCol, payloadCo topic = cast[ptr UncheckedArray[byte]](sqlite3_column_blob(s, contentTopicCol)) topicLength = sqlite3_column_bytes(s, contentTopicCol) contentTopic = string.fromBytes(@(toOpenArray(topic, 0, topicLength-1))) - let + p = cast[ptr UncheckedArray[byte]](sqlite3_column_blob(s, payloadCol)) + length = sqlite3_column_bytes(s, payloadCol) payload = @(toOpenArray(p, 0, length-1)) - let version = sqlite3_column_int64(s, versionCol) - let senderTimestamp = sqlite3_column_int64(s, senderTimestampCol) + version = sqlite3_column_int64(s, versionCol) + senderTimestamp = sqlite3_column_int64(s, senderTimestampCol) - WakuMessage( + return WakuMessage( contentTopic: ContentTopic(contentTopic), payload: payload , version: uint32(version), @@ -40,7 +41,7 @@ proc queryRowWakuMessageCallback(s: ptr sqlite3_stmt, contentTopicCol, payloadCo proc queryRowReceiverTimestampCallback(s: ptr sqlite3_stmt, storedAtCol: cint): Timestamp = let storedAt = sqlite3_column_int64(s, storedAtCol) - Timestamp(storedAt) + return Timestamp(storedAt) proc queryRowPubsubTopicCallback(s: ptr sqlite3_stmt, pubsubTopicCol: cint): PubsubTopic = let @@ -48,7 +49,7 @@ proc queryRowPubsubTopicCallback(s: ptr sqlite3_stmt, pubsubTopicCol: cint): Pub pubsubTopicLength = sqlite3_column_bytes(s, pubsubTopicCol) pubsubTopic = string.fromBytes(@(toOpenArray(pubsubTopicPointer, 0, pubsubTopicLength-1))) - pubsubTopic + return pubsubTopic proc queryRowDigestCallback(s: ptr sqlite3_stmt, digestCol: cint): seq[byte] = let @@ -56,8 +57,15 @@ proc queryRowDigestCallback(s: ptr sqlite3_stmt, digestCol: cint): seq[byte] = digestLength = sqlite3_column_bytes(s, digestCol) digest = @(toOpenArray(digestPointer, 0, digestLength-1)) - digest + return digest + +proc queryRowWakuMessageHashCallback(s: ptr sqlite3_stmt, hashCol: cint): WakuMessageHash = + let + hashPointer = cast[ptr UncheckedArray[byte]](sqlite3_column_blob(s, hashCol)) + hashLength = sqlite3_column_bytes(s, hashCol) + hash = fromBytes(toOpenArray(hashPointer, 0, hashLength-1)) + return hash ### SQLite queries @@ -79,7 +87,7 @@ proc createTableQuery(table: string): SqlQueryStr = proc createTable*(db: SqliteDatabase): DatabaseResult[void] = let query = createTableQuery(DbTable) discard ?db.query(query, proc(s: ptr sqlite3_stmt) = discard) - ok() + return ok() ## Create indices @@ -90,8 +98,7 @@ proc createOldestMessageTimestampIndex*(db: SqliteDatabase): DatabaseResult[void] = let query = createOldestMessageTimestampIndexQuery(DbTable) discard ?db.query(query, proc(s: ptr sqlite3_stmt) = discard) - ok() - + return ok() proc createHistoryQueryIndexQuery(table: string): SqlQueryStr = "CREATE INDEX IF NOT EXISTS i_query ON " & table & " (contentTopic, pubsubTopic, storedAt, id);" @@ -99,24 +106,24 @@ proc createHistoryQueryIndexQuery(table: string): SqlQueryStr = proc createHistoryQueryIndex*(db: SqliteDatabase): DatabaseResult[void] = let query = createHistoryQueryIndexQuery(DbTable) discard ?db.query(query, proc(s: ptr sqlite3_stmt) = discard) - ok() - + return ok() ## Insert message type InsertMessageParams* = (seq[byte], seq[byte], Timestamp, seq[byte], seq[byte], seq[byte], int64, Timestamp) proc insertMessageQuery(table: string): SqlQueryStr = - "INSERT INTO " & table & "(id, messageHash, storedAt, contentTopic, payload, pubsubTopic, version, timestamp)" & - " VALUES (?, ?, ?, ?, ?, ?, ?, ?);" + return + "INSERT INTO " & table & "(id, messageHash, storedAt, contentTopic, payload, pubsubTopic, version, timestamp)" & + " VALUES (?, ?, ?, ?, ?, ?, ?, ?);" proc prepareInsertMessageStmt*(db: SqliteDatabase): SqliteStmt[InsertMessageParams, void] = let query = insertMessageQuery(DbTable) - db.prepareStmt(query, InsertMessageParams, void).expect("this is a valid statement") + return db.prepareStmt(query, InsertMessageParams, void).expect("this is a valid statement") ## Count table messages proc countMessagesQuery(table: string): SqlQueryStr = - "SELECT COUNT(*) FROM " & table + return "SELECT COUNT(*) FROM " & table proc getMessageCount*(db: SqliteDatabase): DatabaseResult[int64] = var count: int64 @@ -128,12 +135,12 @@ proc getMessageCount*(db: SqliteDatabase): DatabaseResult[int64] = if res.isErr(): return err("failed to count number of messages in the database") - ok(count) + return ok(count) ## Get oldest message receiver timestamp proc selectOldestMessageTimestampQuery(table: string): SqlQueryStr = - "SELECT MIN(storedAt) FROM " & table + return "SELECT MIN(storedAt) FROM " & table proc selectOldestReceiverTimestamp*(db: SqliteDatabase): DatabaseResult[Timestamp] {.inline.}= @@ -146,12 +153,12 @@ proc selectOldestReceiverTimestamp*(db: SqliteDatabase): if res.isErr(): return err("failed to get the oldest receiver timestamp from the database") - ok(timestamp) + return ok(timestamp) ## Get newest message receiver timestamp proc selectNewestMessageTimestampQuery(table: string): SqlQueryStr = - "SELECT MAX(storedAt) FROM " & table + return "SELECT MAX(storedAt) FROM " & table proc selectNewestReceiverTimestamp*(db: SqliteDatabase): DatabaseResult[Timestamp] {.inline.}= @@ -164,64 +171,67 @@ proc selectNewestReceiverTimestamp*(db: SqliteDatabase): if res.isErr(): return err("failed to get the newest receiver timestamp from the database") - ok(timestamp) + return ok(timestamp) ## Delete messages older than timestamp proc deleteMessagesOlderThanTimestampQuery(table: string, ts: Timestamp): SqlQueryStr = - "DELETE FROM " & table & " WHERE storedAt < " & $ts + return "DELETE FROM " & table & " WHERE storedAt < " & $ts proc deleteMessagesOlderThanTimestamp*(db: SqliteDatabase, ts: int64): DatabaseResult[void] = let query = deleteMessagesOlderThanTimestampQuery(DbTable, ts) discard ?db.query(query, proc(s: ptr sqlite3_stmt) = discard) - ok() - + return ok() ## Delete oldest messages not within limit proc deleteOldestMessagesNotWithinLimitQuery(table: string, limit: int): SqlQueryStr = - "DELETE FROM " & table & " WHERE (storedAt, id, pubsubTopic) NOT IN (" & - " SELECT storedAt, id, pubsubTopic FROM " & table & - " ORDER BY storedAt DESC, id DESC" & - " LIMIT " & $limit & - ");" + return + "DELETE FROM " & table & " WHERE (storedAt, id, pubsubTopic) NOT IN (" & + " SELECT storedAt, id, pubsubTopic FROM " & table & + " ORDER BY storedAt DESC, id DESC" & + " LIMIT " & $limit & + ");" proc deleteOldestMessagesNotWithinLimit*(db: SqliteDatabase, limit: int): DatabaseResult[void] = # NOTE: The word `limit` here refers the store capacity/maximum number-of-messages allowed limit let query = deleteOldestMessagesNotWithinLimitQuery(DbTable, limit=limit) discard ?db.query(query, proc(s: ptr sqlite3_stmt) = discard) - ok() + return ok() ## Select all messages proc selectAllMessagesQuery(table: string): SqlQueryStr = - "SELECT storedAt, contentTopic, payload, pubsubTopic, version, timestamp, id" & - " FROM " & table & - " ORDER BY storedAt ASC" + return + "SELECT storedAt, contentTopic, payload, pubsubTopic, version, timestamp, id, messageHash" & + " FROM " & table & + " ORDER BY storedAt ASC" proc selectAllMessages*(db: SqliteDatabase): DatabaseResult[seq[(PubsubTopic, WakuMessage, seq[byte], - Timestamp)]] = + Timestamp, + WakuMessageHash)]] = ## Retrieve all messages from the store. - var rows: seq[(PubsubTopic, WakuMessage, seq[byte], Timestamp)] + var rows: seq[(PubsubTopic, WakuMessage, seq[byte], Timestamp, WakuMessageHash)] proc queryRowCallback(s: ptr sqlite3_stmt) = let pubsubTopic = queryRowPubsubTopicCallback(s, pubsubTopicCol=3) wakuMessage = queryRowWakuMessageCallback(s, contentTopicCol=1, payloadCol=2, versionCol=4, senderTimestampCol=5) digest = queryRowDigestCallback(s, digestCol=6) storedAt = queryRowReceiverTimestampCallback(s, storedAtCol=0) + hash = queryRowWakuMessageHashCallback(s, hashCol=7) - rows.add((pubsubTopic, wakuMessage, digest, storedAt)) + rows.add((pubsubTopic, wakuMessage, digest, storedAt, hash)) let query = selectAllMessagesQuery(DbTable) let res = db.query(query, queryRowCallback) if res.isErr(): return err(res.error()) - ok(rows) + return ok(rows) ## Select messages by history query with limit @@ -233,13 +243,14 @@ proc combineClauses(clauses: varargs[Option[string]]): Option[string] = var where: string = whereSeq[0] for clause in whereSeq[1..^1]: where &= " AND " & clause - some(where) + return some(where) proc whereClause(cursor: Option[DbCursor], pubsubTopic: Option[PubsubTopic], contentTopic: seq[ContentTopic], startTime: Option[Timestamp], endTime: Option[Timestamp], + hashes: seq[WakuMessageHash], ascending: bool): Option[string] = let cursorClause = if cursor.isNone(): @@ -273,14 +284,36 @@ proc whereClause(cursor: Option[DbCursor], else: some("storedAt <= (?)") - combineClauses(cursorClause, pubsubTopicClause, contentTopicClause, startTimeClause, endTimeClause) + let hashesClause = if hashes.len <= 0: + none(string) + else: + var where = "messageHash IN (" + where &= "?" + for _ in 1.. Date: Tue, 12 Mar 2024 07:44:54 -0600 Subject: [PATCH 273/274] chore: factory cleanup (#2523) --- apps/wakunode2/app.nim | 32 +++++++++++++++++++++++++++++ waku/factory/node_factory.nim | 38 +++-------------------------------- 2 files changed, 35 insertions(+), 35 deletions(-) diff --git a/apps/wakunode2/app.nim b/apps/wakunode2/app.nim index da842be05d..38f94115df 100644 --- a/apps/wakunode2/app.nim +++ b/apps/wakunode2/app.nim @@ -85,6 +85,38 @@ func node*(app: App): WakuNode = func version*(app: App): string = app.version +## Retrieve dynamic bootstrap nodes (DNS discovery) + +proc retrieveDynamicBootstrapNodes*(dnsDiscovery: bool, + dnsDiscoveryUrl: string, + dnsDiscoveryNameServers: seq[IpAddress]): + Result[seq[RemotePeerInfo], string] = + + if dnsDiscovery and dnsDiscoveryUrl != "": + # DNS discovery + debug "Discovering nodes using Waku DNS discovery", url=dnsDiscoveryUrl + + var nameServers: seq[TransportAddress] + for ip in dnsDiscoveryNameServers: + nameServers.add(initTAddress(ip, Port(53))) # Assume all servers use port 53 + + let dnsResolver = DnsResolver.new(nameServers) + + proc resolver(domain: string): Future[string] {.async, gcsafe.} = + trace "resolving", domain=domain + let resolved = await dnsResolver.resolveTxt(domain) + return resolved[0] # Use only first answer + + var wakuDnsDiscovery = WakuDnsDiscovery.init(dnsDiscoveryUrl, resolver) + if wakuDnsDiscovery.isOk(): + return wakuDnsDiscovery.get().findPeers() + .mapErr(proc (e: cstring): string = $e) + else: + warn "Failed to init Waku DNS discovery" + + debug "No method for retrieving dynamic bootstrap nodes specified." + ok(newSeq[RemotePeerInfo]()) # Return an empty seq by default + ## Initialisation proc init*(T: type App, conf: WakuNodeConf): Result[App, string] = diff --git a/waku/factory/node_factory.nim b/waku/factory/node_factory.nim index 5a08541819..3bf8d31608 100644 --- a/waku/factory/node_factory.nim +++ b/waku/factory/node_factory.nim @@ -33,7 +33,7 @@ import ## Peer persistence const PeerPersistenceDbUrl = "peers.db" -proc setupPeerStorage*(): Result[Option[WakuPeerStorage], string] = +proc setupPeerStorage(): Result[Option[WakuPeerStorage], string] = let db = ? SqliteDatabase.new(PeerPersistenceDbUrl) ? peer_store_sqlite_migrations.migrate(db) @@ -44,41 +44,9 @@ proc setupPeerStorage*(): Result[Option[WakuPeerStorage], string] = ok(some(res.value)) -## Retrieve dynamic bootstrap nodes (DNS discovery) - -proc retrieveDynamicBootstrapNodes*(dnsDiscovery: bool, - dnsDiscoveryUrl: string, - dnsDiscoveryNameServers: seq[IpAddress]): - Result[seq[RemotePeerInfo], string] = - - if dnsDiscovery and dnsDiscoveryUrl != "": - # DNS discovery - debug "Discovering nodes using Waku DNS discovery", url=dnsDiscoveryUrl - - var nameServers: seq[TransportAddress] - for ip in dnsDiscoveryNameServers: - nameServers.add(initTAddress(ip, Port(53))) # Assume all servers use port 53 - - let dnsResolver = DnsResolver.new(nameServers) - - proc resolver(domain: string): Future[string] {.async, gcsafe.} = - trace "resolving", domain=domain - let resolved = await dnsResolver.resolveTxt(domain) - return resolved[0] # Use only first answer - - var wakuDnsDiscovery = WakuDnsDiscovery.init(dnsDiscoveryUrl, resolver) - if wakuDnsDiscovery.isOk(): - return wakuDnsDiscovery.get().findPeers() - .mapErr(proc (e: cstring): string = $e) - else: - warn "Failed to init Waku DNS discovery" - - debug "No method for retrieving dynamic bootstrap nodes specified." - ok(newSeq[RemotePeerInfo]()) # Return an empty seq by default - ## Init waku node instance -proc initNode*(conf: WakuNodeConf, +proc initNode(conf: WakuNodeConf, netConfig: NetConfig, rng: ref HmacDrbgContext, nodeKey: crypto.PrivateKey, @@ -130,7 +98,7 @@ proc initNode*(conf: WakuNodeConf, ## Mount protocols -proc setupProtocols*(node: WakuNode, +proc setupProtocols(node: WakuNode, conf: WakuNodeConf, nodeKey: crypto.PrivateKey): Future[Result[void, string]] {.async.} = From a1b3e090e6463d3bd417abc09ce1110a9c5a7c7e Mon Sep 17 00:00:00 2001 From: gabrielmer <101006718+gabrielmer@users.noreply.github.com> Date: Tue, 12 Mar 2024 09:12:44 -0600 Subject: [PATCH 274/274] chore: adding node factory tests (#2524) --- tests/all_tests_waku.nim | 3 ++ tests/factory/test_node_factory.nim | 67 +++++++++++++++++++++++++++++ tests/testlib/wakunode.nim | 3 +- 3 files changed, 72 insertions(+), 1 deletion(-) create mode 100644 tests/factory/test_node_factory.nim diff --git a/tests/all_tests_waku.nim b/tests/all_tests_waku.nim index b6b7e4b73f..70261b2f19 100644 --- a/tests/all_tests_waku.nim +++ b/tests/all_tests_waku.nim @@ -81,3 +81,6 @@ import ./wakunode_rest/test_rest_cors import ./waku_rln_relay/test_all + +# Node Factory +import ./factory/test_node_factory diff --git a/tests/factory/test_node_factory.nim b/tests/factory/test_node_factory.nim new file mode 100644 index 0000000000..d00608561f --- /dev/null +++ b/tests/factory/test_node_factory.nim @@ -0,0 +1,67 @@ +{.used.} + +import + testutils/unittests, + chronos + +import + ../testlib/wakunode, + ../../waku/factory/node_factory, + ../../waku/waku_node + +suite "Node Factory": + test "Set up a node based on default configurations": + let conf = defaultTestWakuNodeConf() + + let node = setupNode(conf).valueOr: + raiseAssert error + + check: + not node.isNil() + node.wakuArchive.isNil() + node.wakuStore.isNil() + node.wakuFilter.isNil() + not node.wakuStoreClient.isNil() + not node.rendezvous.isNil() + + test "Set up a node with Store enabled": + var conf = defaultTestWakuNodeConf() + conf.store = true + + let node = setupNode(conf).valueOr: + raiseAssert error + + check: + not node.isNil() + not node.wakuStore.isNil() + not node.wakuArchive.isNil() + +test "Set up a node with Filter enabled": + var conf = defaultTestWakuNodeConf() + conf.filter = true + + let node = setupNode(conf).valueOr: + raiseAssert error + + check: + not node.isNil() + not node.wakuFilter.isNil() + +test "Start a node based on default configurations": + let conf = defaultTestWakuNodeConf() + + let node = setupNode(conf).valueOr: + raiseAssert error + + assert not node.isNil(), "Node can't be nil" + + let startRes = catch: (waitFor startNode(node, conf)) + + assert not startRes.isErr(), "Exception starting node" + assert startRes.get().isOk(), "Error starting node " & startRes.get().error + + check: + node.started == true + + ## Cleanup + waitFor node.stop() diff --git a/tests/testlib/wakunode.nim b/tests/testlib/wakunode.nim index 71b4f08c26..bf460c9b3f 100644 --- a/tests/testlib/wakunode.nim +++ b/tests/testlib/wakunode.nim @@ -35,7 +35,8 @@ proc defaultTestWakuNodeConf*(): WakuNodeConf = maxMessageSize: "1024 KiB", clusterId: 1.uint32, topics: @["/waku/2/rs/1/0"], - relay: true + relay: true, + storeMessageDbUrl: "sqlite://store.sqlite3" ) proc newTestWakuNode*(nodeKey: crypto.PrivateKey,